pptx-react-viewer 3.1.4 → 3.2.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 +12 -0
- package/dist/{AiChatPanel-ITCVRVKP.mjs → AiChatPanel-C3E7NLX3.mjs} +4 -4
- package/dist/AiChatPanel-C3E7NLX3.mjs.br +0 -0
- package/dist/AiChatPanel-C3E7NLX3.mjs.gz +0 -0
- package/dist/{AiChatPanel-TO5PHBGW.js → AiChatPanel-TKBVSYD2.js} +24 -24
- package/dist/AiChatPanel-TKBVSYD2.js.br +0 -0
- package/dist/AiChatPanel-TKBVSYD2.js.gz +0 -0
- package/dist/{Area3DChartScene-2UNQ3J3V.js → Area3DChartScene-3A3CXKN3.js} +2 -2
- package/dist/Area3DChartScene-3A3CXKN3.js.br +0 -0
- package/dist/Area3DChartScene-3A3CXKN3.js.gz +0 -0
- package/dist/{Area3DChartScene-7PHPDOTG.mjs → Area3DChartScene-7YCFWEGX.mjs} +1 -1
- package/dist/Area3DChartScene-7YCFWEGX.mjs.br +3 -0
- package/dist/Area3DChartScene-7YCFWEGX.mjs.gz +0 -0
- package/dist/{Bar3DChartScene-BLPUHYRZ.mjs → Bar3DChartScene-7CNSJ35X.mjs} +1 -1
- package/dist/Bar3DChartScene-7CNSJ35X.mjs.br +0 -0
- package/dist/Bar3DChartScene-7CNSJ35X.mjs.gz +0 -0
- package/dist/{Bar3DChartScene-MC5S3AGT.js → Bar3DChartScene-BDUENAWJ.js} +2 -2
- package/dist/Bar3DChartScene-BDUENAWJ.js.br +0 -0
- package/dist/Bar3DChartScene-BDUENAWJ.js.gz +0 -0
- package/dist/{Line3DChartScene-JVVZRIDD.js → Line3DChartScene-R352CZ5U.js} +2 -2
- package/dist/Line3DChartScene-R352CZ5U.js.br +0 -0
- package/dist/Line3DChartScene-R352CZ5U.js.gz +0 -0
- package/dist/{Line3DChartScene-L5B4YFG3.mjs → Line3DChartScene-SMTHK6MD.mjs} +1 -1
- package/dist/Line3DChartScene-SMTHK6MD.mjs.br +3 -0
- package/dist/Line3DChartScene-SMTHK6MD.mjs.gz +0 -0
- package/dist/{Model3DScene-6TNWS5LV.mjs → Model3DScene-AUVJXXPV.mjs} +1 -1
- package/dist/Model3DScene-AUVJXXPV.mjs.br +0 -0
- package/dist/Model3DScene-AUVJXXPV.mjs.gz +0 -0
- package/dist/{Model3DScene-LRDNQNKJ.js → Model3DScene-Y4SGFQYW.js} +2 -2
- package/dist/{Model3DScene-LRDNQNKJ.js.br → Model3DScene-Y4SGFQYW.js.br} +0 -0
- package/dist/Model3DScene-Y4SGFQYW.js.gz +0 -0
- package/dist/{PieChart3DScene-PZWZCXHX.js → PieChart3DScene-TK2VT4RS.js} +2 -2
- package/dist/PieChart3DScene-TK2VT4RS.js.br +0 -0
- package/dist/PieChart3DScene-TK2VT4RS.js.gz +0 -0
- package/dist/{PieChart3DScene-XXAIVP4I.mjs → PieChart3DScene-UD7GRH55.mjs} +1 -1
- package/dist/PieChart3DScene-UD7GRH55.mjs.br +0 -0
- package/dist/PieChart3DScene-UD7GRH55.mjs.gz +0 -0
- package/dist/{SurfaceChart3DScene-UBQV3ZN2.js → SurfaceChart3DScene-ERFXZW2O.js} +2 -2
- package/dist/SurfaceChart3DScene-ERFXZW2O.js.br +0 -0
- package/dist/SurfaceChart3DScene-ERFXZW2O.js.gz +0 -0
- package/dist/{SurfaceChart3DScene-CRUGJSCY.mjs → SurfaceChart3DScene-TXY6UZSW.mjs} +1 -1
- package/dist/SurfaceChart3DScene-TXY6UZSW.mjs.br +0 -0
- package/dist/SurfaceChart3DScene-TXY6UZSW.mjs.gz +0 -0
- package/dist/{chunk-SWRY3SI5.js → chunk-ALO4ZOHQ.js} +46 -1
- package/dist/chunk-ALO4ZOHQ.js.br +0 -0
- package/dist/{chunk-SWRY3SI5.js.gz → chunk-ALO4ZOHQ.js.gz} +0 -0
- package/dist/{chunk-LXYDXLKZ.js → chunk-ARQGUUYU.js} +421 -460
- package/dist/chunk-ARQGUUYU.js.br +0 -0
- package/dist/chunk-ARQGUUYU.js.gz +0 -0
- package/dist/{chunk-T2QG2HD5.js → chunk-B6UIVRFA.js} +167 -167
- package/dist/chunk-B6UIVRFA.js.br +0 -0
- package/dist/chunk-B6UIVRFA.js.gz +0 -0
- package/dist/{chunk-YDEEINER.js → chunk-FJDZ7AEE.js} +6446 -3739
- package/dist/chunk-FJDZ7AEE.js.br +0 -0
- package/dist/chunk-FJDZ7AEE.js.gz +0 -0
- package/dist/{chunk-BPWSJLLG.mjs → chunk-FMEEIS6L.mjs} +2 -2
- package/dist/chunk-FMEEIS6L.mjs.br +0 -0
- package/dist/chunk-FMEEIS6L.mjs.gz +0 -0
- package/dist/{chunk-XIHK52SB.mjs → chunk-G7UBIKAG.mjs} +6445 -3740
- package/dist/chunk-G7UBIKAG.mjs.br +0 -0
- package/dist/chunk-G7UBIKAG.mjs.gz +0 -0
- package/dist/{chunk-57MGKBJ4.mjs → chunk-PPNXPEEZ.mjs} +20 -14
- package/dist/chunk-PPNXPEEZ.mjs.br +0 -0
- package/dist/chunk-PPNXPEEZ.mjs.gz +0 -0
- package/dist/{chunk-LGVNUG3G.js → chunk-Q52HT4EZ.js} +9 -8
- package/dist/chunk-Q52HT4EZ.js.br +0 -0
- package/dist/chunk-Q52HT4EZ.js.gz +0 -0
- package/dist/{chunk-ARJE3V6V.mjs → chunk-RHSA5BW5.mjs} +46 -1
- package/dist/chunk-RHSA5BW5.mjs.br +0 -0
- package/dist/{chunk-ARJE3V6V.mjs.gz → chunk-RHSA5BW5.mjs.gz} +0 -0
- package/dist/{chunk-T44LBKF6.js → chunk-RRAL4Y7V.js} +1136 -1130
- package/dist/chunk-RRAL4Y7V.js.br +0 -0
- package/dist/chunk-RRAL4Y7V.js.gz +0 -0
- package/dist/{chunk-QOLYY7E3.mjs → chunk-RX6FE24O.mjs} +7 -6
- package/dist/chunk-RX6FE24O.mjs.br +0 -0
- package/dist/chunk-RX6FE24O.mjs.gz +0 -0
- package/dist/{chunk-A2UAUSJM.mjs → chunk-UHR7EYFM.mjs} +18 -57
- package/dist/chunk-UHR7EYFM.mjs.br +0 -0
- package/dist/chunk-UHR7EYFM.mjs.gz +0 -0
- package/dist/i18n.js +4 -4
- package/dist/i18n.js.br +0 -0
- package/dist/i18n.js.gz +0 -0
- package/dist/i18n.mjs +1 -1
- package/dist/i18n.mjs.br +0 -0
- package/dist/i18n.mjs.gz +0 -0
- package/dist/index.d.ts +170 -17
- package/dist/index.js +47 -47
- package/dist/index.js.br +0 -0
- package/dist/index.js.gz +0 -0
- package/dist/index.mjs +6 -6
- package/dist/index.mjs.br +0 -0
- package/dist/index.mjs.gz +0 -0
- package/dist/internals.d.ts +170 -17
- package/dist/internals.d.ts.map +1 -1
- package/dist/internals.js +79 -79
- package/dist/internals.js.br +0 -0
- package/dist/internals.js.gz +0 -0
- package/dist/internals.mjs +4 -4
- package/dist/internals.mjs.br +0 -0
- package/dist/internals.mjs.gz +0 -0
- package/dist/viewer/index.d.ts +170 -17
- package/dist/viewer/index.js +27 -27
- package/dist/viewer/index.js.br +0 -0
- package/dist/viewer/index.js.gz +0 -0
- package/dist/viewer/index.mjs +6 -6
- package/dist/viewer/index.mjs.br +0 -0
- package/dist/viewer/index.mjs.gz +0 -0
- package/package.json +1 -1
- package/dist/AiChatPanel-ITCVRVKP.mjs.br +0 -0
- package/dist/AiChatPanel-ITCVRVKP.mjs.gz +0 -0
- package/dist/AiChatPanel-TO5PHBGW.js.br +0 -0
- package/dist/AiChatPanel-TO5PHBGW.js.gz +0 -0
- package/dist/Area3DChartScene-2UNQ3J3V.js.br +0 -0
- package/dist/Area3DChartScene-2UNQ3J3V.js.gz +0 -0
- package/dist/Area3DChartScene-7PHPDOTG.mjs.br +0 -0
- package/dist/Area3DChartScene-7PHPDOTG.mjs.gz +0 -0
- package/dist/Bar3DChartScene-BLPUHYRZ.mjs.br +0 -0
- package/dist/Bar3DChartScene-BLPUHYRZ.mjs.gz +0 -0
- package/dist/Bar3DChartScene-MC5S3AGT.js.br +0 -0
- package/dist/Bar3DChartScene-MC5S3AGT.js.gz +0 -0
- package/dist/Line3DChartScene-JVVZRIDD.js.br +0 -0
- package/dist/Line3DChartScene-JVVZRIDD.js.gz +0 -0
- package/dist/Line3DChartScene-L5B4YFG3.mjs.br +0 -0
- package/dist/Line3DChartScene-L5B4YFG3.mjs.gz +0 -0
- package/dist/Model3DScene-6TNWS5LV.mjs.br +0 -0
- package/dist/Model3DScene-6TNWS5LV.mjs.gz +0 -0
- package/dist/Model3DScene-LRDNQNKJ.js.gz +0 -0
- package/dist/PieChart3DScene-PZWZCXHX.js.br +0 -0
- package/dist/PieChart3DScene-PZWZCXHX.js.gz +0 -0
- package/dist/PieChart3DScene-XXAIVP4I.mjs.br +0 -0
- package/dist/PieChart3DScene-XXAIVP4I.mjs.gz +0 -0
- package/dist/SurfaceChart3DScene-CRUGJSCY.mjs.br +0 -1
- package/dist/SurfaceChart3DScene-CRUGJSCY.mjs.gz +0 -0
- package/dist/SurfaceChart3DScene-UBQV3ZN2.js.br +0 -0
- package/dist/SurfaceChart3DScene-UBQV3ZN2.js.gz +0 -0
- package/dist/chunk-57MGKBJ4.mjs.br +0 -0
- package/dist/chunk-57MGKBJ4.mjs.gz +0 -0
- package/dist/chunk-A2UAUSJM.mjs.br +0 -0
- package/dist/chunk-A2UAUSJM.mjs.gz +0 -0
- package/dist/chunk-ARJE3V6V.mjs.br +0 -0
- package/dist/chunk-BPWSJLLG.mjs.br +0 -0
- package/dist/chunk-BPWSJLLG.mjs.gz +0 -0
- package/dist/chunk-LGVNUG3G.js.br +0 -0
- package/dist/chunk-LGVNUG3G.js.gz +0 -0
- package/dist/chunk-LXYDXLKZ.js.br +0 -0
- package/dist/chunk-LXYDXLKZ.js.gz +0 -0
- package/dist/chunk-QOLYY7E3.mjs.br +0 -0
- package/dist/chunk-QOLYY7E3.mjs.gz +0 -0
- package/dist/chunk-SWRY3SI5.js.br +0 -0
- package/dist/chunk-T2QG2HD5.js.br +0 -0
- package/dist/chunk-T2QG2HD5.js.gz +0 -0
- package/dist/chunk-T44LBKF6.js.br +0 -0
- package/dist/chunk-T44LBKF6.js.gz +0 -0
- package/dist/chunk-XIHK52SB.mjs.br +0 -0
- package/dist/chunk-XIHK52SB.mjs.gz +0 -0
- package/dist/chunk-YDEEINER.js.br +0 -0
- package/dist/chunk-YDEEINER.js.gz +0 -0
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
var
|
|
5
|
-
var
|
|
3
|
+
var chunkB6UIVRFA_js = require('./chunk-B6UIVRFA.js');
|
|
4
|
+
var chunkFJDZ7AEE_js = require('./chunk-FJDZ7AEE.js');
|
|
5
|
+
var chunkALO4ZOHQ_js = require('./chunk-ALO4ZOHQ.js');
|
|
6
6
|
var react = require('react');
|
|
7
7
|
var reactI18next = require('react-i18next');
|
|
8
8
|
|
|
9
9
|
function useVirtualizedSlides({
|
|
10
10
|
totalItems,
|
|
11
11
|
itemHeight,
|
|
12
|
-
overscan =
|
|
12
|
+
overscan = chunkFJDZ7AEE_js.DEFAULT_VIRTUAL_OVERSCAN
|
|
13
13
|
}) {
|
|
14
14
|
const scrollContainerRef = react.useRef(null);
|
|
15
15
|
const [scrollTop, setScrollTop] = react.useState(0);
|
|
@@ -39,7 +39,7 @@ function useVirtualizedSlides({
|
|
|
39
39
|
resizeObserver?.disconnect();
|
|
40
40
|
};
|
|
41
41
|
}, []);
|
|
42
|
-
const range =
|
|
42
|
+
const range = chunkFJDZ7AEE_js.computeVirtualRange(totalItems, itemHeight, scrollTop, viewportHeight, overscan);
|
|
43
43
|
const safeItemHeight = Math.max(itemHeight, 1);
|
|
44
44
|
const scrollToIndex = react.useCallback(
|
|
45
45
|
(index, behavior = "smooth") => {
|
|
@@ -80,7 +80,7 @@ function usePresenceTracking({
|
|
|
80
80
|
}) {
|
|
81
81
|
const [remoteUsers, setRemoteUsers] = react.useState([]);
|
|
82
82
|
const projectorRef = react.useRef(null);
|
|
83
|
-
projectorRef.current ??=
|
|
83
|
+
projectorRef.current ??= chunkFJDZ7AEE_js.createPresenceProjector();
|
|
84
84
|
const projector = projectorRef.current;
|
|
85
85
|
const lastBroadcastRef = react.useRef(0);
|
|
86
86
|
const pendingBroadcastRef = react.useRef(null);
|
|
@@ -105,7 +105,7 @@ function usePresenceTracking({
|
|
|
105
105
|
awareness.setLocalStateField("presence", state);
|
|
106
106
|
lastBroadcastRef.current = Date.now();
|
|
107
107
|
};
|
|
108
|
-
if (elapsed >=
|
|
108
|
+
if (elapsed >= chunkFJDZ7AEE_js.BROADCAST_THROTTLE_MS) {
|
|
109
109
|
if (pendingBroadcastRef.current) {
|
|
110
110
|
clearTimeout(pendingBroadcastRef.current);
|
|
111
111
|
pendingBroadcastRef.current = null;
|
|
@@ -115,7 +115,7 @@ function usePresenceTracking({
|
|
|
115
115
|
pendingBroadcastRef.current = setTimeout(() => {
|
|
116
116
|
pendingBroadcastRef.current = null;
|
|
117
117
|
flush();
|
|
118
|
-
},
|
|
118
|
+
}, chunkFJDZ7AEE_js.BROADCAST_THROTTLE_MS - elapsed);
|
|
119
119
|
}
|
|
120
120
|
},
|
|
121
121
|
[awareness, userName, userColor, userAvatar, role]
|
|
@@ -195,7 +195,7 @@ function useYjsProvider({ config }) {
|
|
|
195
195
|
const departureRef = react.useRef(null);
|
|
196
196
|
const gateRef = react.useRef(null);
|
|
197
197
|
if (!gateRef.current) {
|
|
198
|
-
gateRef.current =
|
|
198
|
+
gateRef.current = chunkFJDZ7AEE_js.createSyncGate(() => setSynced(true));
|
|
199
199
|
}
|
|
200
200
|
const teardown = react.useCallback(() => {
|
|
201
201
|
if (timeoutRef.current) {
|
|
@@ -215,7 +215,7 @@ function useYjsProvider({ config }) {
|
|
|
215
215
|
const buildCleanup = react.useCallback(
|
|
216
216
|
(provider, yDoc) => () => {
|
|
217
217
|
announceDeparture();
|
|
218
|
-
|
|
218
|
+
chunkFJDZ7AEE_js.clearLocalAwareness(provider.awareness);
|
|
219
219
|
provider.destroy();
|
|
220
220
|
yDoc.destroy();
|
|
221
221
|
setDoc(null);
|
|
@@ -240,9 +240,9 @@ function useYjsProvider({ config }) {
|
|
|
240
240
|
if (config.authToken) {
|
|
241
241
|
opts.password = config.authToken;
|
|
242
242
|
}
|
|
243
|
-
const roomId =
|
|
243
|
+
const roomId = chunkFJDZ7AEE_js.validateRoomId(config.roomId);
|
|
244
244
|
const provider = new WebrtcProvider(roomId, yDoc, opts);
|
|
245
|
-
departureRef.current =
|
|
245
|
+
departureRef.current = chunkFJDZ7AEE_js.createDepartureChannel(roomId, provider.awareness);
|
|
246
246
|
setDoc(yDoc);
|
|
247
247
|
setAwareness(provider.awareness);
|
|
248
248
|
setClientId(provider.awareness.clientID);
|
|
@@ -284,13 +284,13 @@ function useYjsProvider({ config }) {
|
|
|
284
284
|
if (!config) {
|
|
285
285
|
return;
|
|
286
286
|
}
|
|
287
|
-
const roomId =
|
|
288
|
-
const transport = config.transport ??
|
|
287
|
+
const roomId = chunkFJDZ7AEE_js.validateRoomId(config.roomId);
|
|
288
|
+
const transport = config.transport ?? chunkFJDZ7AEE_js.resolveTransportForServerUrl(config.serverUrl);
|
|
289
289
|
if (transport === "webrtc") {
|
|
290
290
|
await initWebrtc();
|
|
291
291
|
return;
|
|
292
292
|
}
|
|
293
|
-
if (
|
|
293
|
+
if (chunkFJDZ7AEE_js.isMixedContentBlocked(config.serverUrl)) {
|
|
294
294
|
console.warn(
|
|
295
295
|
`[pptx-viewer] Refusing to connect: insecure ws:// server "${config.serverUrl}" is blocked from a secure (https) page. Use a wss:// URL.`
|
|
296
296
|
);
|
|
@@ -304,7 +304,7 @@ function useYjsProvider({ config }) {
|
|
|
304
304
|
const provider = new WebsocketProvider(config.serverUrl, roomId, yDoc, {
|
|
305
305
|
params: config.authToken ? { token: config.authToken } : void 0
|
|
306
306
|
});
|
|
307
|
-
departureRef.current =
|
|
307
|
+
departureRef.current = chunkFJDZ7AEE_js.createDepartureChannel(roomId, provider.awareness);
|
|
308
308
|
let connected = false;
|
|
309
309
|
const handleStatus = (event) => {
|
|
310
310
|
if (event.status === "connected") {
|
|
@@ -344,7 +344,7 @@ function useYjsProvider({ config }) {
|
|
|
344
344
|
provider.off("status", handleStatus);
|
|
345
345
|
provider.off("sync", handleSynced);
|
|
346
346
|
announceDeparture();
|
|
347
|
-
|
|
347
|
+
chunkFJDZ7AEE_js.clearLocalAwareness(provider.awareness);
|
|
348
348
|
provider.destroy();
|
|
349
349
|
yDoc.destroy();
|
|
350
350
|
setDoc(null);
|
|
@@ -353,7 +353,7 @@ function useYjsProvider({ config }) {
|
|
|
353
353
|
cleanupRef.current = null;
|
|
354
354
|
setStatus("error");
|
|
355
355
|
}
|
|
356
|
-
},
|
|
356
|
+
}, chunkFJDZ7AEE_js.CONNECTION_TIMEOUT_MS);
|
|
357
357
|
}
|
|
358
358
|
setDoc(yDoc);
|
|
359
359
|
setAwareness(provider.awareness);
|
|
@@ -362,7 +362,7 @@ function useYjsProvider({ config }) {
|
|
|
362
362
|
provider.off("status", handleStatus);
|
|
363
363
|
provider.off("sync", handleSynced);
|
|
364
364
|
announceDeparture();
|
|
365
|
-
|
|
365
|
+
chunkFJDZ7AEE_js.clearLocalAwareness(provider.awareness);
|
|
366
366
|
provider.destroy();
|
|
367
367
|
yDoc.destroy();
|
|
368
368
|
setDoc(null);
|
|
@@ -388,7 +388,7 @@ function useYjsProvider({ config }) {
|
|
|
388
388
|
]);
|
|
389
389
|
react.useEffect(() => {
|
|
390
390
|
init();
|
|
391
|
-
const disposeTeardown =
|
|
391
|
+
const disposeTeardown = chunkFJDZ7AEE_js.registerCollaborationTeardown({
|
|
392
392
|
leave: teardown,
|
|
393
393
|
rejoin: init
|
|
394
394
|
});
|
|
@@ -409,7 +409,7 @@ function useCollaborativeState({
|
|
|
409
409
|
canvasWidth,
|
|
410
410
|
canvasHeight
|
|
411
411
|
}) {
|
|
412
|
-
const userColor =
|
|
412
|
+
const userColor = chunkFJDZ7AEE_js.sanitizeColor(config?.userColor, "#6366f1");
|
|
413
413
|
const { status, awareness, doc, clientId, synced, retry } = useYjsProvider({ config });
|
|
414
414
|
const { remoteUsers, broadcastPresence } = usePresenceTracking({
|
|
415
415
|
awareness,
|
|
@@ -527,8 +527,8 @@ function useEditorHistory(input) {
|
|
|
527
527
|
width: canvasSize.width,
|
|
528
528
|
height: canvasSize.height,
|
|
529
529
|
activeSlideIndex,
|
|
530
|
-
slides: slides.map(
|
|
531
|
-
templateElementsBySlideId:
|
|
530
|
+
slides: slides.map(chunkFJDZ7AEE_js.cloneSlide),
|
|
531
|
+
templateElementsBySlideId: chunkFJDZ7AEE_js.cloneTemplateElementsBySlideId(templateElementsBySlideId),
|
|
532
532
|
...actionLabel ? { actionLabel } : {}
|
|
533
533
|
};
|
|
534
534
|
},
|
|
@@ -541,9 +541,9 @@ function useEditorHistory(input) {
|
|
|
541
541
|
width: snapshot.width,
|
|
542
542
|
height: snapshot.height
|
|
543
543
|
});
|
|
544
|
-
setSlides(snapshot.slides.map(
|
|
544
|
+
setSlides(snapshot.slides.map(chunkFJDZ7AEE_js.cloneSlide));
|
|
545
545
|
setTemplateElementsBySlideId(
|
|
546
|
-
|
|
546
|
+
chunkFJDZ7AEE_js.cloneTemplateElementsBySlideId(snapshot.templateElementsBySlideId)
|
|
547
547
|
);
|
|
548
548
|
setActiveSlideIndex(Math.min(snapshot.activeSlideIndex, maxSlideIndex));
|
|
549
549
|
setSelectedElementIds([]);
|
|
@@ -582,8 +582,8 @@ function useEditorHistory(input) {
|
|
|
582
582
|
const currentSnapshot = buildHistorySnapshot();
|
|
583
583
|
historyFutureRef.current.push(currentSnapshot);
|
|
584
584
|
isApplyingHistoryRef.current = true;
|
|
585
|
-
const nextSnapshot =
|
|
586
|
-
lastHistorySnapshotRef.current =
|
|
585
|
+
const nextSnapshot = chunkB6UIVRFA_js.cloneHistorySnapshot(previousSnapshot);
|
|
586
|
+
lastHistorySnapshotRef.current = chunkB6UIVRFA_js.cloneHistorySnapshot(nextSnapshot);
|
|
587
587
|
lastHistorySerializedRef.current = serializeDocument(nextSnapshot);
|
|
588
588
|
applyHistorySnapshot(nextSnapshot);
|
|
589
589
|
updateHistoryAvailability();
|
|
@@ -604,8 +604,8 @@ function useEditorHistory(input) {
|
|
|
604
604
|
const currentSnapshot = buildHistorySnapshot();
|
|
605
605
|
historyPastRef.current.push(currentSnapshot);
|
|
606
606
|
isApplyingHistoryRef.current = true;
|
|
607
|
-
const targetSnapshot =
|
|
608
|
-
lastHistorySnapshotRef.current =
|
|
607
|
+
const targetSnapshot = chunkB6UIVRFA_js.cloneHistorySnapshot(nextSnapshot);
|
|
608
|
+
lastHistorySnapshotRef.current = chunkB6UIVRFA_js.cloneHistorySnapshot(targetSnapshot);
|
|
609
609
|
lastHistorySerializedRef.current = serializeDocument(targetSnapshot);
|
|
610
610
|
applyHistorySnapshot(targetSnapshot);
|
|
611
611
|
updateHistoryAvailability();
|
|
@@ -623,7 +623,7 @@ function useEditorHistory(input) {
|
|
|
623
623
|
historyPastRef.current = [];
|
|
624
624
|
historyFutureRef.current = [];
|
|
625
625
|
if (initialSnapshot) {
|
|
626
|
-
const clonedInitial =
|
|
626
|
+
const clonedInitial = chunkB6UIVRFA_js.cloneHistorySnapshot(initialSnapshot);
|
|
627
627
|
lastHistorySnapshotRef.current = clonedInitial;
|
|
628
628
|
lastHistorySerializedRef.current = serializeDocument(clonedInitial);
|
|
629
629
|
} else {
|
|
@@ -671,19 +671,19 @@ function useEditorHistory(input) {
|
|
|
671
671
|
}
|
|
672
672
|
const previousSnapshot = lastHistorySnapshotRef.current;
|
|
673
673
|
if (!previousSnapshot) {
|
|
674
|
-
lastHistorySnapshotRef.current =
|
|
674
|
+
lastHistorySnapshotRef.current = chunkB6UIVRFA_js.cloneHistorySnapshot(snapshot);
|
|
675
675
|
lastHistorySerializedRef.current = serialized;
|
|
676
676
|
lastCheapHashRef.current = cheapHash;
|
|
677
677
|
updateHistoryAvailability();
|
|
678
678
|
return;
|
|
679
679
|
}
|
|
680
680
|
onDirtyRef.current?.();
|
|
681
|
-
historyPastRef.current.push(
|
|
681
|
+
historyPastRef.current.push(chunkB6UIVRFA_js.cloneHistorySnapshot(previousSnapshot));
|
|
682
682
|
while (historyPastRef.current.length > Math.max(1, maxHistoryEntries)) {
|
|
683
683
|
historyPastRef.current.shift();
|
|
684
684
|
}
|
|
685
685
|
historyFutureRef.current = [];
|
|
686
|
-
lastHistorySnapshotRef.current =
|
|
686
|
+
lastHistorySnapshotRef.current = chunkB6UIVRFA_js.cloneHistorySnapshot(snapshot);
|
|
687
687
|
lastHistorySerializedRef.current = serialized;
|
|
688
688
|
lastCheapHashRef.current = cheapHash;
|
|
689
689
|
updateHistoryAvailability();
|
|
@@ -743,9 +743,9 @@ function useZoomViewport({
|
|
|
743
743
|
const canvasStageRef = react.useRef(null);
|
|
744
744
|
const canvasViewportRef = react.useRef(null);
|
|
745
745
|
const renderScaleRef = react.useRef(1);
|
|
746
|
-
const wheelBufferRef = react.useRef(
|
|
746
|
+
const wheelBufferRef = react.useRef(chunkFJDZ7AEE_js.createWheelStepBuffer());
|
|
747
747
|
const storeRef = react.useRef(null);
|
|
748
|
-
storeRef.current ??=
|
|
748
|
+
storeRef.current ??= chunkFJDZ7AEE_js.createViewerZoomStore();
|
|
749
749
|
const store = storeRef.current;
|
|
750
750
|
const scale = useViewerStore(store, selectZoom);
|
|
751
751
|
const setScale = react.useCallback(
|
|
@@ -806,7 +806,7 @@ function useZoomViewport({
|
|
|
806
806
|
if (!wrapper || !canvasViewport) {
|
|
807
807
|
return;
|
|
808
808
|
}
|
|
809
|
-
const boundedScale =
|
|
809
|
+
const boundedScale = chunkFJDZ7AEE_js.clampZoomScale(nextScale);
|
|
810
810
|
const nextEditorScale = fitScale * boundedScale;
|
|
811
811
|
const centerX = (bounds.minX + bounds.maxX) / 2;
|
|
812
812
|
const centerY = (bounds.minY + bounds.maxY) / 2;
|
|
@@ -843,29 +843,29 @@ function useZoomViewport({
|
|
|
843
843
|
selectedElements.forEach((element) => {
|
|
844
844
|
minX = Math.min(minX, element.x);
|
|
845
845
|
minY = Math.min(minY, element.y);
|
|
846
|
-
maxX = Math.max(maxX, element.x + Math.max(element.width,
|
|
847
|
-
maxY = Math.max(maxY, element.y + Math.max(element.height,
|
|
846
|
+
maxX = Math.max(maxX, element.x + Math.max(element.width, chunkB6UIVRFA_js.MIN_ELEMENT_SIZE));
|
|
847
|
+
maxY = Math.max(maxY, element.y + Math.max(element.height, chunkB6UIVRFA_js.MIN_ELEMENT_SIZE));
|
|
848
848
|
});
|
|
849
849
|
if (!Number.isFinite(minX) || !Number.isFinite(minY) || !Number.isFinite(maxX) || !Number.isFinite(maxY)) {
|
|
850
850
|
return;
|
|
851
851
|
}
|
|
852
852
|
const selectionBounds = { minX, minY, maxX, maxY };
|
|
853
|
-
const boundsWidth = Math.max(selectionBounds.maxX - selectionBounds.minX,
|
|
854
|
-
const boundsHeight = Math.max(selectionBounds.maxY - selectionBounds.minY,
|
|
853
|
+
const boundsWidth = Math.max(selectionBounds.maxX - selectionBounds.minX, chunkB6UIVRFA_js.MIN_ELEMENT_SIZE);
|
|
854
|
+
const boundsHeight = Math.max(selectionBounds.maxY - selectionBounds.minY, chunkB6UIVRFA_js.MIN_ELEMENT_SIZE);
|
|
855
855
|
const availableWidth = Math.max(
|
|
856
|
-
effectiveEditorDimensions.width -
|
|
857
|
-
|
|
856
|
+
effectiveEditorDimensions.width - chunkB6UIVRFA_js.ZOOM_TO_SELECTION_PADDING,
|
|
857
|
+
chunkB6UIVRFA_js.MIN_ELEMENT_SIZE
|
|
858
858
|
);
|
|
859
859
|
const availableHeight = Math.max(
|
|
860
|
-
effectiveEditorDimensions.height -
|
|
861
|
-
|
|
860
|
+
effectiveEditorDimensions.height - chunkB6UIVRFA_js.ZOOM_TO_SELECTION_PADDING,
|
|
861
|
+
chunkB6UIVRFA_js.MIN_ELEMENT_SIZE
|
|
862
862
|
);
|
|
863
863
|
const targetEditorScale = Math.min(
|
|
864
864
|
availableWidth / boundsWidth,
|
|
865
865
|
availableHeight / boundsHeight
|
|
866
866
|
);
|
|
867
867
|
const safeFitScale = fitScale > Number.EPSILON ? fitScale : Number.EPSILON;
|
|
868
|
-
const nextScale =
|
|
868
|
+
const nextScale = chunkFJDZ7AEE_js.clampZoomScale(targetEditorScale / safeFitScale);
|
|
869
869
|
setScale(nextScale);
|
|
870
870
|
window.requestAnimationFrame(() => {
|
|
871
871
|
window.requestAnimationFrame(() => {
|
|
@@ -882,14 +882,14 @@ function useZoomViewport({
|
|
|
882
882
|
]);
|
|
883
883
|
const handleWheel = react.useCallback(
|
|
884
884
|
(event) => {
|
|
885
|
-
const mapped =
|
|
885
|
+
const mapped = chunkFJDZ7AEE_js.mapEditingWheel(event, wheelBufferRef.current, true);
|
|
886
886
|
if (mapped.intent !== "zoom") {
|
|
887
887
|
return;
|
|
888
888
|
}
|
|
889
889
|
event.preventDefault();
|
|
890
890
|
store.dispatch({
|
|
891
891
|
type: "set-zoom",
|
|
892
|
-
zoom:
|
|
892
|
+
zoom: chunkFJDZ7AEE_js.clampZoomScale(store.getState().zoom + mapped.deltaScale)
|
|
893
893
|
});
|
|
894
894
|
},
|
|
895
895
|
[store]
|
|
@@ -977,7 +977,7 @@ function applyAnimationGroupSteps(group, onPlayActionSound, setPresentationEleme
|
|
|
977
977
|
const command = step.command;
|
|
978
978
|
const timer = window.setTimeout(
|
|
979
979
|
() => {
|
|
980
|
-
|
|
980
|
+
chunkB6UIVRFA_js.executeMediaCommand(command);
|
|
981
981
|
},
|
|
982
982
|
Math.max(0, step.delayMs)
|
|
983
983
|
);
|
|
@@ -1186,7 +1186,7 @@ function scheduleEntranceAnimationTimers(slide, setPresentationAnimations, prese
|
|
|
1186
1186
|
}))
|
|
1187
1187
|
);
|
|
1188
1188
|
entranceAnimations.forEach((animation, animationIndex) => {
|
|
1189
|
-
const delay =
|
|
1189
|
+
const delay = chunkFJDZ7AEE_js.computeEntranceAnimationDelay(animation.delayMs, animationIndex);
|
|
1190
1190
|
const timer = window.setTimeout(() => {
|
|
1191
1191
|
setPresentationAnimations(
|
|
1192
1192
|
(previousAnimations) => previousAnimations.map(
|
|
@@ -1220,7 +1220,7 @@ function useAnimationPlayback(input) {
|
|
|
1220
1220
|
(controller, group) => {
|
|
1221
1221
|
driveBuildReveal(
|
|
1222
1222
|
controller,
|
|
1223
|
-
|
|
1223
|
+
chunkFJDZ7AEE_js.PresentationAnimationController.collectBuildStepIds(group),
|
|
1224
1224
|
setPresentationElementStates,
|
|
1225
1225
|
buildRafRef
|
|
1226
1226
|
);
|
|
@@ -1296,7 +1296,7 @@ function useAnimationPlayback(input) {
|
|
|
1296
1296
|
setHoverTriggerShapeIds(/* @__PURE__ */ new Set());
|
|
1297
1297
|
return;
|
|
1298
1298
|
}
|
|
1299
|
-
const controller =
|
|
1299
|
+
const controller = chunkFJDZ7AEE_js.PresentationAnimationController.fromSlide(slide);
|
|
1300
1300
|
controllerRef.current = controller;
|
|
1301
1301
|
setPresentationKeyframesCss(controller.keyframesCss);
|
|
1302
1302
|
setInteractiveTriggerShapeIds(controller.interactiveTriggerShapeIds);
|
|
@@ -1313,7 +1313,7 @@ function useAnimationPlayback(input) {
|
|
|
1313
1313
|
const activeGroup = activeAnimationGroupRef.current;
|
|
1314
1314
|
if (controller && controller.hasMoreSteps() && shouldSeekAnimationGroup(activeGroup, activeAnimationEndAtRef.current, performance.now())) {
|
|
1315
1315
|
finishDomAnimationsForGroup(activeGroup);
|
|
1316
|
-
const buildIds =
|
|
1316
|
+
const buildIds = chunkFJDZ7AEE_js.PresentationAnimationController.collectBuildStepIds(activeGroup);
|
|
1317
1317
|
const completedStates = controller.computeStatesFor(buildIds);
|
|
1318
1318
|
clearPresentationTimers();
|
|
1319
1319
|
finishAnimationGroupSteps(activeGroup, setPresentationElementStates, completedStates);
|
|
@@ -1480,12 +1480,12 @@ function useAnimationPlayback(input) {
|
|
|
1480
1480
|
presentationTimersRef
|
|
1481
1481
|
};
|
|
1482
1482
|
}
|
|
1483
|
-
var PRESENTER_CHANNEL_NAME =
|
|
1484
|
-
var AUDIENCE_HASH =
|
|
1485
|
-
var PRESENTER_MSG_ORIGIN =
|
|
1486
|
-
var AUDIENCE_NONCE_KEY =
|
|
1483
|
+
var PRESENTER_CHANNEL_NAME = chunkFJDZ7AEE_js.PRESENTATION_CHANNEL_NAME;
|
|
1484
|
+
var AUDIENCE_HASH = chunkFJDZ7AEE_js.PRESENTATION_HASH;
|
|
1485
|
+
var PRESENTER_MSG_ORIGIN = chunkFJDZ7AEE_js.PRESENTATION_MESSAGE_ORIGIN;
|
|
1486
|
+
var AUDIENCE_NONCE_KEY = chunkFJDZ7AEE_js.PRESENTATION_NONCE_KEY;
|
|
1487
1487
|
function generateSessionId() {
|
|
1488
|
-
return
|
|
1488
|
+
return chunkFJDZ7AEE_js.createPresentationSessionId();
|
|
1489
1489
|
}
|
|
1490
1490
|
function parseAudienceNonce() {
|
|
1491
1491
|
const hash = window.location.hash;
|
|
@@ -1521,7 +1521,7 @@ function usePresenterWindow(input) {
|
|
|
1521
1521
|
}, []);
|
|
1522
1522
|
const swapDisplays = react.useCallback(async () => {
|
|
1523
1523
|
const audience = audienceWindowRef.current;
|
|
1524
|
-
return audience && !audience.closed ?
|
|
1524
|
+
return audience && !audience.closed ? chunkFJDZ7AEE_js.swapPresentationWindows(window, audience) : false;
|
|
1525
1525
|
}, []);
|
|
1526
1526
|
const syncSlideToAudience = react.useCallback(
|
|
1527
1527
|
(slideIndex) => {
|
|
@@ -1585,7 +1585,7 @@ function usePresenterWindow(input) {
|
|
|
1585
1585
|
pollTimerRef.current = null;
|
|
1586
1586
|
}
|
|
1587
1587
|
if (closingSessionId) {
|
|
1588
|
-
void
|
|
1588
|
+
void chunkFJDZ7AEE_js.clearAudienceContent(closingSessionId);
|
|
1589
1589
|
}
|
|
1590
1590
|
}, [getChannel]);
|
|
1591
1591
|
const openAudienceWindow = react.useCallback(() => {
|
|
@@ -1603,10 +1603,10 @@ function usePresenterWindow(input) {
|
|
|
1603
1603
|
audienceWindowRef.current = blankWin;
|
|
1604
1604
|
const sessionId = generateSessionId();
|
|
1605
1605
|
sessionIdRef.current = sessionId;
|
|
1606
|
-
const audienceUrl =
|
|
1607
|
-
void
|
|
1606
|
+
const audienceUrl = chunkFJDZ7AEE_js.buildPresentationAudienceUrl(window.location.href, sessionId);
|
|
1607
|
+
void chunkFJDZ7AEE_js.resolveAudienceScreenPlacement(window).then((placement) => {
|
|
1608
1608
|
if (placement && audienceWindowRef.current === blankWin && !blankWin.closed) {
|
|
1609
|
-
|
|
1609
|
+
chunkFJDZ7AEE_js.placeAudienceWindow(blankWin, placement);
|
|
1610
1610
|
}
|
|
1611
1611
|
return void 0;
|
|
1612
1612
|
});
|
|
@@ -1636,7 +1636,7 @@ function usePresenterWindow(input) {
|
|
|
1636
1636
|
}
|
|
1637
1637
|
};
|
|
1638
1638
|
if (content) {
|
|
1639
|
-
void
|
|
1639
|
+
void chunkFJDZ7AEE_js.storeAudienceContent(content, sessionId).then(() => navigateOrClose(true)).catch(() => navigateOrClose(false));
|
|
1640
1640
|
} else {
|
|
1641
1641
|
navigateOrClose(true);
|
|
1642
1642
|
}
|
|
@@ -1662,7 +1662,7 @@ function usePresenterWindow(input) {
|
|
|
1662
1662
|
}
|
|
1663
1663
|
const handleMessage = (event) => {
|
|
1664
1664
|
const message = event.data;
|
|
1665
|
-
if (
|
|
1665
|
+
if (chunkFJDZ7AEE_js.isPresentationSessionMessage(message) && message.type === "audience-ready" && message.sessionId === sessionIdRef.current) {
|
|
1666
1666
|
syncStateToAudience(snapshotRef.current);
|
|
1667
1667
|
}
|
|
1668
1668
|
};
|
|
@@ -1691,7 +1691,7 @@ function usePresenterWindow(input) {
|
|
|
1691
1691
|
react.useEffect(() => {
|
|
1692
1692
|
const handleBeforeUnload = () => {
|
|
1693
1693
|
if (sessionIdRef.current) {
|
|
1694
|
-
void
|
|
1694
|
+
void chunkFJDZ7AEE_js.clearAudienceContent(sessionIdRef.current);
|
|
1695
1695
|
}
|
|
1696
1696
|
};
|
|
1697
1697
|
window.addEventListener("beforeunload", handleBeforeUnload);
|
|
@@ -1753,7 +1753,7 @@ function useAudienceMode(input) {
|
|
|
1753
1753
|
}
|
|
1754
1754
|
channel.onmessage = (event) => {
|
|
1755
1755
|
const data = event.data;
|
|
1756
|
-
if (!
|
|
1756
|
+
if (!chunkFJDZ7AEE_js.isPresentationSessionMessage(data) || data.origin !== PRESENTER_MSG_ORIGIN) {
|
|
1757
1757
|
return;
|
|
1758
1758
|
}
|
|
1759
1759
|
if (expectedSessionId && data.sessionId !== expectedSessionId) {
|
|
@@ -1769,16 +1769,16 @@ function useAudienceMode(input) {
|
|
|
1769
1769
|
}
|
|
1770
1770
|
if (data.type === "presenter-exit") {
|
|
1771
1771
|
if (expectedSessionId) {
|
|
1772
|
-
void
|
|
1772
|
+
void chunkFJDZ7AEE_js.clearAudienceContent(expectedSessionId);
|
|
1773
1773
|
}
|
|
1774
|
-
if (
|
|
1774
|
+
if (chunkFJDZ7AEE_js.endAudienceDisplay(window)) {
|
|
1775
1775
|
handlers.onPresenterEnded?.();
|
|
1776
1776
|
}
|
|
1777
1777
|
}
|
|
1778
1778
|
};
|
|
1779
1779
|
if (expectedSessionId) {
|
|
1780
1780
|
channel.postMessage({
|
|
1781
|
-
origin:
|
|
1781
|
+
origin: chunkFJDZ7AEE_js.PRESENTATION_MESSAGE_ORIGIN,
|
|
1782
1782
|
type: "audience-ready",
|
|
1783
1783
|
sessionId: expectedSessionId
|
|
1784
1784
|
});
|
|
@@ -1792,7 +1792,7 @@ function useAudienceMode(input) {
|
|
|
1792
1792
|
}, []);
|
|
1793
1793
|
}
|
|
1794
1794
|
function usePresentationKeyboard(input) {
|
|
1795
|
-
const wheelBufferRef = react.useRef(
|
|
1795
|
+
const wheelBufferRef = react.useRef(chunkFJDZ7AEE_js.createWheelStepBuffer());
|
|
1796
1796
|
const {
|
|
1797
1797
|
mode,
|
|
1798
1798
|
movePresentationSlide,
|
|
@@ -1813,14 +1813,14 @@ function usePresentationKeyboard(input) {
|
|
|
1813
1813
|
presentationSlideIndex,
|
|
1814
1814
|
setShowRehearsalSummary
|
|
1815
1815
|
} = input;
|
|
1816
|
-
const keyBufferRef = react.useRef(
|
|
1816
|
+
const keyBufferRef = react.useRef(chunkFJDZ7AEE_js.createPresentationKeyBuffer());
|
|
1817
1817
|
react.useEffect(() => {
|
|
1818
|
-
if (mode !== "present" || !
|
|
1819
|
-
keyBufferRef.current =
|
|
1818
|
+
if (mode !== "present" || !chunkFJDZ7AEE_js.acceptsPresentationInput()) {
|
|
1819
|
+
keyBufferRef.current = chunkFJDZ7AEE_js.createPresentationKeyBuffer();
|
|
1820
1820
|
return;
|
|
1821
1821
|
}
|
|
1822
1822
|
const handleKeyDown = (event) => {
|
|
1823
|
-
const mapped =
|
|
1823
|
+
const mapped = chunkFJDZ7AEE_js.mapPresentationKey(event, keyBufferRef.current);
|
|
1824
1824
|
if (mapped.action === "none") {
|
|
1825
1825
|
return;
|
|
1826
1826
|
}
|
|
@@ -1840,12 +1840,12 @@ function usePresentationKeyboard(input) {
|
|
|
1840
1840
|
movePresentationSlide(-1);
|
|
1841
1841
|
return;
|
|
1842
1842
|
case "first": {
|
|
1843
|
-
const first =
|
|
1843
|
+
const first = chunkFJDZ7AEE_js.firstShowSlideIndex(showSlideIndexes);
|
|
1844
1844
|
navigateToSlide(first ?? 0);
|
|
1845
1845
|
return;
|
|
1846
1846
|
}
|
|
1847
1847
|
case "last": {
|
|
1848
|
-
const last =
|
|
1848
|
+
const last = chunkFJDZ7AEE_js.lastShowSlideIndex(showSlideIndexes);
|
|
1849
1849
|
navigateToSlide(last ?? Math.max(0, slideCount - 1));
|
|
1850
1850
|
return;
|
|
1851
1851
|
}
|
|
@@ -1883,10 +1883,10 @@ function usePresentationKeyboard(input) {
|
|
|
1883
1883
|
}
|
|
1884
1884
|
};
|
|
1885
1885
|
const handleWheel = (event) => {
|
|
1886
|
-
if (mode !== "present" || !
|
|
1886
|
+
if (mode !== "present" || !chunkFJDZ7AEE_js.acceptsPresentationInput()) {
|
|
1887
1887
|
return;
|
|
1888
1888
|
}
|
|
1889
|
-
const mapped =
|
|
1889
|
+
const mapped = chunkFJDZ7AEE_js.mapPresentationWheel(event, wheelBufferRef.current);
|
|
1890
1890
|
if (mapped.intent === "next-slide") {
|
|
1891
1891
|
event.preventDefault();
|
|
1892
1892
|
movePresentationSlide(1);
|
|
@@ -2019,7 +2019,7 @@ function useRehearsalTimings(input) {
|
|
|
2019
2019
|
|
|
2020
2020
|
// src/viewer/hooks/presentation-mode/presentation-actions.ts
|
|
2021
2021
|
function handlePresentationActionImpl(action, deps) {
|
|
2022
|
-
|
|
2022
|
+
chunkFJDZ7AEE_js.runPresentationAction(
|
|
2023
2023
|
action,
|
|
2024
2024
|
{ slideCount: deps.slidesLength },
|
|
2025
2025
|
{
|
|
@@ -2041,7 +2041,7 @@ function handlePresentationActionImpl(action, deps) {
|
|
|
2041
2041
|
function executeSlideTransition(nextSlideIndex, deps) {
|
|
2042
2042
|
const incomingSlide = deps.slides[nextSlideIndex];
|
|
2043
2043
|
const transition = incomingSlide?.transition;
|
|
2044
|
-
const durationMs = deps.playTransition ?
|
|
2044
|
+
const durationMs = deps.playTransition ? chunkFJDZ7AEE_js.resolveTransitionDurationMs(transition) : 0;
|
|
2045
2045
|
deps.clearPresentationTimers();
|
|
2046
2046
|
deps.setPresentationSlideIndex(nextSlideIndex);
|
|
2047
2047
|
deps.onSetActiveSlideIndex(nextSlideIndex);
|
|
@@ -2100,7 +2100,7 @@ function useSlideNavigation(input) {
|
|
|
2100
2100
|
});
|
|
2101
2101
|
const scheduleAutoAdvanceForSlide = react.useCallback(
|
|
2102
2102
|
(slideIndex) => {
|
|
2103
|
-
const delayMs =
|
|
2103
|
+
const delayMs = chunkFJDZ7AEE_js.resolveAutoAdvanceDelayMs(slides[slideIndex], { useTimings });
|
|
2104
2104
|
if (delayMs === void 0) {
|
|
2105
2105
|
return;
|
|
2106
2106
|
}
|
|
@@ -2123,7 +2123,7 @@ function useSlideNavigation(input) {
|
|
|
2123
2123
|
if (availableSlideIndexes.length === 0) {
|
|
2124
2124
|
return;
|
|
2125
2125
|
}
|
|
2126
|
-
const pastLastSlide = direction === 1 && !
|
|
2126
|
+
const pastLastSlide = direction === 1 && !chunkFJDZ7AEE_js.hasShowSlideAfter(presentationSlideIndex, availableSlideIndexes);
|
|
2127
2127
|
if (rehearsing && pastLastSlide) {
|
|
2128
2128
|
recordCurrentSlideTime(presentationSlideIndex);
|
|
2129
2129
|
try {
|
|
@@ -2141,9 +2141,9 @@ function useSlideNavigation(input) {
|
|
|
2141
2141
|
onAdvancePastLastSlide();
|
|
2142
2142
|
return;
|
|
2143
2143
|
}
|
|
2144
|
-
const nextSlideIndex = direction === 1 ?
|
|
2144
|
+
const nextSlideIndex = direction === 1 ? chunkFJDZ7AEE_js.nextShowSlideIndex(presentationSlideIndex, availableSlideIndexes, {
|
|
2145
2145
|
loop: Boolean(loopContinuously) && !rehearsing
|
|
2146
|
-
}) :
|
|
2146
|
+
}) : chunkFJDZ7AEE_js.previousShowSlideIndex(presentationSlideIndex, availableSlideIndexes);
|
|
2147
2147
|
if (nextSlideIndex === void 0 || nextSlideIndex === presentationSlideIndex) {
|
|
2148
2148
|
return;
|
|
2149
2149
|
}
|
|
@@ -2288,22 +2288,22 @@ function useZoomNavigation(input) {
|
|
|
2288
2288
|
};
|
|
2289
2289
|
}
|
|
2290
2290
|
function usePresenterConsole(slideIndex, active) {
|
|
2291
|
-
const timerRef = react.useRef(
|
|
2292
|
-
const [snapshot, setSnapshot] = react.useState(() =>
|
|
2291
|
+
const timerRef = react.useRef(chunkFJDZ7AEE_js.createPresenterTimer());
|
|
2292
|
+
const [snapshot, setSnapshot] = react.useState(() => chunkFJDZ7AEE_js.createInitialPresentationSnapshot(slideIndex));
|
|
2293
2293
|
const patch = react.useCallback((value) => {
|
|
2294
|
-
setSnapshot((current) =>
|
|
2294
|
+
setSnapshot((current) => chunkFJDZ7AEE_js.mergePresentationSnapshot(current, value));
|
|
2295
2295
|
}, []);
|
|
2296
2296
|
react.useEffect(() => patch({ slideIndex }), [patch, slideIndex]);
|
|
2297
2297
|
react.useEffect(() => {
|
|
2298
2298
|
if (!active) {
|
|
2299
2299
|
return;
|
|
2300
2300
|
}
|
|
2301
|
-
timerRef.current =
|
|
2301
|
+
timerRef.current = chunkFJDZ7AEE_js.resetPresenterTimer();
|
|
2302
2302
|
patch({ paused: false, elapsedMs: 0 });
|
|
2303
2303
|
const timer = window.setInterval(() => {
|
|
2304
2304
|
patch({
|
|
2305
2305
|
paused: timerRef.current.paused,
|
|
2306
|
-
elapsedMs:
|
|
2306
|
+
elapsedMs: chunkFJDZ7AEE_js.presenterElapsed(timerRef.current)
|
|
2307
2307
|
});
|
|
2308
2308
|
}, 1e3);
|
|
2309
2309
|
return () => window.clearInterval(timer);
|
|
@@ -2313,19 +2313,19 @@ function usePresenterConsole(slideIndex, active) {
|
|
|
2313
2313
|
applyAudienceSnapshot: setSnapshot,
|
|
2314
2314
|
setBlackout: (blackout) => patch({ blackout }),
|
|
2315
2315
|
toggleTimer: () => {
|
|
2316
|
-
timerRef.current =
|
|
2316
|
+
timerRef.current = chunkFJDZ7AEE_js.togglePresenterTimer(timerRef.current);
|
|
2317
2317
|
patch({
|
|
2318
2318
|
paused: timerRef.current.paused,
|
|
2319
|
-
elapsedMs:
|
|
2319
|
+
elapsedMs: chunkFJDZ7AEE_js.presenterElapsed(timerRef.current)
|
|
2320
2320
|
});
|
|
2321
2321
|
},
|
|
2322
2322
|
resetTimer: () => {
|
|
2323
|
-
timerRef.current =
|
|
2323
|
+
timerRef.current = chunkFJDZ7AEE_js.resetPresenterTimer();
|
|
2324
2324
|
patch({ paused: false, elapsedMs: 0 });
|
|
2325
2325
|
},
|
|
2326
2326
|
stepZoom: (direction) => setSnapshot(
|
|
2327
|
-
(current) =>
|
|
2328
|
-
zoom:
|
|
2327
|
+
(current) => chunkFJDZ7AEE_js.mergePresentationSnapshot(current, {
|
|
2328
|
+
zoom: chunkFJDZ7AEE_js.stepPresenterZoom(
|
|
2329
2329
|
current.zoom ?? { scale: 1, originX: 0.5, originY: 0.5 },
|
|
2330
2330
|
direction
|
|
2331
2331
|
)
|
|
@@ -2371,7 +2371,7 @@ function usePresentationMode(input) {
|
|
|
2371
2371
|
const [allSlidesOpen, setAllSlidesOpen] = react.useState(false);
|
|
2372
2372
|
const [endOfShowVisible, setEndOfShowVisible] = react.useState(false);
|
|
2373
2373
|
const [presentationStartTime, setPresentationStartTime] = react.useState(null);
|
|
2374
|
-
const showGuard = react.useMemo(() =>
|
|
2374
|
+
const showGuard = react.useMemo(() => chunkFJDZ7AEE_js.createPresenterShowGuard(), []);
|
|
2375
2375
|
const {
|
|
2376
2376
|
presentationAnimations,
|
|
2377
2377
|
presentationElementStates,
|
|
@@ -2450,7 +2450,7 @@ function usePresentationMode(input) {
|
|
|
2450
2450
|
});
|
|
2451
2451
|
const movePresentationSlide = react.useCallback(
|
|
2452
2452
|
(direction, trigger = "explicit") => {
|
|
2453
|
-
if (!
|
|
2453
|
+
if (!chunkFJDZ7AEE_js.acceptsPresentationInput()) {
|
|
2454
2454
|
return;
|
|
2455
2455
|
}
|
|
2456
2456
|
if (endOfShowVisible) {
|
|
@@ -2588,7 +2588,7 @@ function usePresentationMode(input) {
|
|
|
2588
2588
|
if (mode !== "present") {
|
|
2589
2589
|
return;
|
|
2590
2590
|
}
|
|
2591
|
-
return
|
|
2591
|
+
return chunkFJDZ7AEE_js.attachPresentationVisibilityPause({
|
|
2592
2592
|
root: containerRef.current ?? void 0,
|
|
2593
2593
|
onHidden: () => clearPresentationTimersRef.current(),
|
|
2594
2594
|
onVisible: () => scheduleAutoAdvanceRef.current(presentationSlideIndexRef.current)
|
|
@@ -2668,11 +2668,11 @@ function usePresentationMode(input) {
|
|
|
2668
2668
|
if (!transitionOverlay || transitionOverlay.transition.type !== "morph") {
|
|
2669
2669
|
return void 0;
|
|
2670
2670
|
}
|
|
2671
|
-
return
|
|
2671
|
+
return chunkFJDZ7AEE_js.buildMorphTransitionPlan(
|
|
2672
2672
|
slides[transitionOverlay.outgoingSlideIndex],
|
|
2673
2673
|
slides[transitionOverlay.incomingSlideIndex],
|
|
2674
2674
|
transitionOverlay.durationMs,
|
|
2675
|
-
|
|
2675
|
+
chunkFJDZ7AEE_js.morphOptionToMode(transitionOverlay.transition.morphOption)
|
|
2676
2676
|
);
|
|
2677
2677
|
}, [transitionOverlay, slides]);
|
|
2678
2678
|
const morphedElementStates = react.useMemo(() => {
|
|
@@ -2693,7 +2693,7 @@ function usePresentationMode(input) {
|
|
|
2693
2693
|
if (!morphPlan) {
|
|
2694
2694
|
return presentationKeyframesCss;
|
|
2695
2695
|
}
|
|
2696
|
-
const imageRules =
|
|
2696
|
+
const imageRules = chunkFJDZ7AEE_js.buildMorphAnimationRules(morphPlan, "", "incoming", "image");
|
|
2697
2697
|
return `${presentationKeyframesCss ?? ""}
|
|
2698
2698
|
${morphPlan.keyframesCss}
|
|
2699
2699
|
${imageRules}`;
|
|
@@ -2989,7 +2989,7 @@ function useFindReplace({
|
|
|
2989
2989
|
const [findResults, setFindResults] = react.useState([]);
|
|
2990
2990
|
const [findResultIndex, setFindResultIndex] = react.useState(-1);
|
|
2991
2991
|
const performFind = react.useCallback(() => {
|
|
2992
|
-
const results =
|
|
2992
|
+
const results = chunkFJDZ7AEE_js.findInSlides(slides, findQuery, { matchCase: findMatchCase });
|
|
2993
2993
|
if (!findQuery) {
|
|
2994
2994
|
setFindResults([]);
|
|
2995
2995
|
setFindResultIndex(-1);
|
|
@@ -3023,7 +3023,7 @@ function useFindReplace({
|
|
|
3023
3023
|
return;
|
|
3024
3024
|
}
|
|
3025
3025
|
onUpdateSlides(
|
|
3026
|
-
(prevSlides) =>
|
|
3026
|
+
(prevSlides) => chunkFJDZ7AEE_js.applyFindReplacements(prevSlides, toReplace, replaceQuery).slides
|
|
3027
3027
|
);
|
|
3028
3028
|
onMarkDirty();
|
|
3029
3029
|
},
|
|
@@ -3045,9 +3045,9 @@ function useFindReplace({
|
|
|
3045
3045
|
}, [findResults, applyReplacements, performFind]);
|
|
3046
3046
|
react.useEffect(() => {
|
|
3047
3047
|
const handler = (event) => {
|
|
3048
|
-
const { action } =
|
|
3048
|
+
const { action } = chunkFJDZ7AEE_js.mapEditorKey(event, {
|
|
3049
3049
|
canEdit: mode === "edit",
|
|
3050
|
-
isTextInputTarget:
|
|
3050
|
+
isTextInputTarget: chunkFJDZ7AEE_js.isEditorTextInputTarget(event.target)
|
|
3051
3051
|
});
|
|
3052
3052
|
if (action !== "find") {
|
|
3053
3053
|
return;
|
|
@@ -3126,7 +3126,7 @@ function addCommentToSlide(slides, slideIndex, text, authorName, elementId) {
|
|
|
3126
3126
|
if (!slide) {
|
|
3127
3127
|
return { slides, didAdd: false };
|
|
3128
3128
|
}
|
|
3129
|
-
const next =
|
|
3129
|
+
const next = chunkFJDZ7AEE_js.addCommentToList(
|
|
3130
3130
|
slide.comments || [],
|
|
3131
3131
|
text,
|
|
3132
3132
|
authorName,
|
|
@@ -3144,7 +3144,7 @@ function removeCommentFromSlide(slides, slideIndex, commentId) {
|
|
|
3144
3144
|
if (!slide) {
|
|
3145
3145
|
return { slides, didDelete: false };
|
|
3146
3146
|
}
|
|
3147
|
-
const next =
|
|
3147
|
+
const next = chunkFJDZ7AEE_js.removeCommentFromList(slide.comments || [], commentId);
|
|
3148
3148
|
if (!next) {
|
|
3149
3149
|
return { slides, didDelete: false };
|
|
3150
3150
|
}
|
|
@@ -3155,7 +3155,7 @@ function editCommentInSlide(slides, slideIndex, commentId, newText) {
|
|
|
3155
3155
|
if (!slide) {
|
|
3156
3156
|
return { slides, didUpdate: false };
|
|
3157
3157
|
}
|
|
3158
|
-
const next =
|
|
3158
|
+
const next = chunkFJDZ7AEE_js.editCommentInList(slide.comments || [], commentId, newText);
|
|
3159
3159
|
if (!next) {
|
|
3160
3160
|
return { slides, didUpdate: false };
|
|
3161
3161
|
}
|
|
@@ -3166,7 +3166,7 @@ function toggleResolvedInSlide(slides, slideIndex, commentId) {
|
|
|
3166
3166
|
if (!slide) {
|
|
3167
3167
|
return { slides, didUpdate: false };
|
|
3168
3168
|
}
|
|
3169
|
-
const next =
|
|
3169
|
+
const next = chunkFJDZ7AEE_js.toggleCommentResolvedInList(slide.comments || [], commentId);
|
|
3170
3170
|
if (!next) {
|
|
3171
3171
|
return { slides, didUpdate: false };
|
|
3172
3172
|
}
|
|
@@ -3177,7 +3177,7 @@ function addReplyToSlide(slides, slideIndex, parentId, text, authorName) {
|
|
|
3177
3177
|
if (!slide) {
|
|
3178
3178
|
return { slides, didAdd: false };
|
|
3179
3179
|
}
|
|
3180
|
-
const next =
|
|
3180
|
+
const next = chunkFJDZ7AEE_js.replyToCommentInList(slide.comments || [], parentId, text, authorName);
|
|
3181
3181
|
if (!next) {
|
|
3182
3182
|
return { slides, didAdd: false };
|
|
3183
3183
|
}
|
|
@@ -3551,7 +3551,7 @@ function useViewerCoreState(_input) {
|
|
|
3551
3551
|
const marqueeStateRef = react.useRef(null);
|
|
3552
3552
|
const isDrawingRef = react.useRef(false);
|
|
3553
3553
|
const justInteractedRef = react.useRef(false);
|
|
3554
|
-
const livePatcher = react.useMemo(() =>
|
|
3554
|
+
const livePatcher = react.useMemo(() => chunkFJDZ7AEE_js.createCollaborationLivePatcher(), []);
|
|
3555
3555
|
react.useEffect(() => () => livePatcher.dispose(), [livePatcher]);
|
|
3556
3556
|
const slidesRef = react.useRef([]);
|
|
3557
3557
|
const [mode, setMode] = react.useState("edit");
|
|
@@ -3560,8 +3560,8 @@ function useViewerCoreState(_input) {
|
|
|
3560
3560
|
const [slides, setSlides] = react.useState([]);
|
|
3561
3561
|
const [templateElementsBySlideId, setTemplateElementsBySlideId] = react.useState({});
|
|
3562
3562
|
const [canvasSize, setCanvasSize] = react.useState({
|
|
3563
|
-
width:
|
|
3564
|
-
height:
|
|
3563
|
+
width: chunkB6UIVRFA_js.DEFAULT_CANVAS_WIDTH,
|
|
3564
|
+
height: chunkB6UIVRFA_js.DEFAULT_CANVAS_HEIGHT
|
|
3565
3565
|
});
|
|
3566
3566
|
const [slideSizeEmu, setSlideSizeEmu] = react.useState();
|
|
3567
3567
|
const [activeSlideIndex, setActiveSlideIndex] = react.useState(0);
|
|
@@ -3582,7 +3582,7 @@ function useViewerCoreState(_input) {
|
|
|
3582
3582
|
const resolved = typeof value === "function" ? value(inlineEditingTextRef.current) : value;
|
|
3583
3583
|
inlineEditingTextRef.current = resolved;
|
|
3584
3584
|
setInlineEditingTextBase(value);
|
|
3585
|
-
|
|
3585
|
+
chunkFJDZ7AEE_js.publishLiveInlineText(
|
|
3586
3586
|
livePatcher,
|
|
3587
3587
|
slidesRef.current[activeSlideIndexRef.current],
|
|
3588
3588
|
inlineEditingElementIdRef.current,
|
|
@@ -3926,7 +3926,7 @@ function useLoadContent({
|
|
|
3926
3926
|
);
|
|
3927
3927
|
}
|
|
3928
3928
|
const previousHandler = handlerRef.current;
|
|
3929
|
-
const handler = new
|
|
3929
|
+
const handler = new chunkFJDZ7AEE_js.PptxHandler();
|
|
3930
3930
|
const parsed = await handler.load(buffer, { allowExternalImages });
|
|
3931
3931
|
if (cancelled || token !== renderTokenRef.current) {
|
|
3932
3932
|
handler.dispose();
|
|
@@ -3938,7 +3938,7 @@ function useLoadContent({
|
|
|
3938
3938
|
handlerRef.current = null;
|
|
3939
3939
|
const mediaElements = [];
|
|
3940
3940
|
for (const slide of parsed.slides) {
|
|
3941
|
-
|
|
3941
|
+
chunkFJDZ7AEE_js.collectMediaElements(slide.elements, mediaElements);
|
|
3942
3942
|
}
|
|
3943
3943
|
for (const url of mediaDataUrls.values()) {
|
|
3944
3944
|
if (url.startsWith("blob:")) {
|
|
@@ -3979,7 +3979,7 @@ function useLoadContent({
|
|
|
3979
3979
|
}
|
|
3980
3980
|
})
|
|
3981
3981
|
);
|
|
3982
|
-
const { paths: imagePaths, refs: imageRefs } =
|
|
3982
|
+
const { paths: imagePaths, refs: imageRefs } = chunkFJDZ7AEE_js.collectImagePaths(parsed.slides);
|
|
3983
3983
|
let nextSlides = parsed.slides;
|
|
3984
3984
|
if (imagePaths.size > 0) {
|
|
3985
3985
|
const resolvedMap = /* @__PURE__ */ new Map();
|
|
@@ -4033,7 +4033,7 @@ function useLoadContent({
|
|
|
4033
4033
|
});
|
|
4034
4034
|
}
|
|
4035
4035
|
}
|
|
4036
|
-
const { paths: tableImagePaths, refs: tableImageRefs } =
|
|
4036
|
+
const { paths: tableImagePaths, refs: tableImageRefs } = chunkFJDZ7AEE_js.collectTableCellImagePaths(nextSlides);
|
|
4037
4037
|
if (tableImagePaths.size > 0) {
|
|
4038
4038
|
const resolvedTableMap = /* @__PURE__ */ new Map();
|
|
4039
4039
|
await Promise.all(
|
|
@@ -4049,7 +4049,7 @@ function useLoadContent({
|
|
|
4049
4049
|
);
|
|
4050
4050
|
if (resolvedTableMap.size > 0) {
|
|
4051
4051
|
nextSlides = nextSlides.map((s) => {
|
|
4052
|
-
const newElements =
|
|
4052
|
+
const newElements = chunkFJDZ7AEE_js.applyTableCellImagePatches(
|
|
4053
4053
|
s.elements,
|
|
4054
4054
|
resolvedTableMap,
|
|
4055
4055
|
tableImageRefs
|
|
@@ -4059,7 +4059,7 @@ function useLoadContent({
|
|
|
4059
4059
|
}
|
|
4060
4060
|
}
|
|
4061
4061
|
let nextTableStyleMap = parsed.tableStyleMap;
|
|
4062
|
-
const { paths: tableStyleImagePaths, refs: tableStyleImageRefs } =
|
|
4062
|
+
const { paths: tableStyleImagePaths, refs: tableStyleImageRefs } = chunkFJDZ7AEE_js.collectTableStyleImagePaths(nextTableStyleMap);
|
|
4063
4063
|
if (tableStyleImagePaths.size > 0) {
|
|
4064
4064
|
const resolvedStyleMap = /* @__PURE__ */ new Map();
|
|
4065
4065
|
await Promise.all(
|
|
@@ -4074,7 +4074,7 @@ function useLoadContent({
|
|
|
4074
4074
|
})
|
|
4075
4075
|
);
|
|
4076
4076
|
if (resolvedStyleMap.size > 0 && nextTableStyleMap) {
|
|
4077
|
-
nextTableStyleMap =
|
|
4077
|
+
nextTableStyleMap = chunkFJDZ7AEE_js.applyTableStyleImagePatches(
|
|
4078
4078
|
nextTableStyleMap,
|
|
4079
4079
|
resolvedStyleMap,
|
|
4080
4080
|
tableStyleImageRefs
|
|
@@ -4082,12 +4082,12 @@ function useLoadContent({
|
|
|
4082
4082
|
}
|
|
4083
4083
|
}
|
|
4084
4084
|
handlerRef.current = handler;
|
|
4085
|
-
const partition =
|
|
4085
|
+
const partition = chunkFJDZ7AEE_js.partitionTemplateElements(nextSlides);
|
|
4086
4086
|
setSlides(partition.slides);
|
|
4087
4087
|
setTemplateElementsBySlideId(partition.templateElementsBySlideId);
|
|
4088
4088
|
setCanvasSize({
|
|
4089
|
-
width: parsed.width ??
|
|
4090
|
-
height: parsed.height ??
|
|
4089
|
+
width: parsed.width ?? chunkB6UIVRFA_js.DEFAULT_CANVAS_WIDTH,
|
|
4090
|
+
height: parsed.height ?? chunkB6UIVRFA_js.DEFAULT_CANVAS_HEIGHT
|
|
4091
4091
|
});
|
|
4092
4092
|
setSlideSizeEmu(
|
|
4093
4093
|
typeof parsed.widthEmu === "number" && typeof parsed.heightEmu === "number" && parsed.widthEmu > 0 && parsed.heightEmu > 0 ? {
|
|
@@ -4104,7 +4104,7 @@ function useLoadContent({
|
|
|
4104
4104
|
setThemeOptions(parsed.themeOptions ?? []);
|
|
4105
4105
|
setCustomShows(parsed.customShows ?? []);
|
|
4106
4106
|
setActiveCustomShowId(
|
|
4107
|
-
|
|
4107
|
+
chunkFJDZ7AEE_js.resolveAuthoredCustomShowId(parsed.presentationProperties, parsed.customShows) ?? null
|
|
4108
4108
|
);
|
|
4109
4109
|
setSections(parsed.sections ?? []);
|
|
4110
4110
|
setPresentationProperties(parsed.presentationProperties ?? {});
|
|
@@ -4127,7 +4127,7 @@ function useLoadContent({
|
|
|
4127
4127
|
setHasMacros(parsed.hasMacros === true);
|
|
4128
4128
|
setHasDigitalSignatures(parsed.hasDigitalSignatures === true);
|
|
4129
4129
|
setDigitalSignatureCount(parsed.digitalSignatureCount ?? 0);
|
|
4130
|
-
setGuides(
|
|
4130
|
+
setGuides(chunkFJDZ7AEE_js.buildInitialGuides(parsed.presentationGuides, parsed.slides[0]?.guides));
|
|
4131
4131
|
setActiveSlideIndex(0);
|
|
4132
4132
|
clearSelection();
|
|
4133
4133
|
setIsDirty(false);
|
|
@@ -4135,7 +4135,7 @@ function useLoadContent({
|
|
|
4135
4135
|
onContentApplied?.();
|
|
4136
4136
|
} catch (err) {
|
|
4137
4137
|
if (!cancelled && token === renderTokenRef.current) {
|
|
4138
|
-
if (err instanceof
|
|
4138
|
+
if (err instanceof chunkFJDZ7AEE_js.EncryptedFileError) {
|
|
4139
4139
|
setIsEncrypted(true);
|
|
4140
4140
|
} else {
|
|
4141
4141
|
console.error("[pptx] Failed to load presentation content:", err);
|
|
@@ -4163,7 +4163,7 @@ function useLoadContent({
|
|
|
4163
4163
|
}
|
|
4164
4164
|
function useAutosave(input) {
|
|
4165
4165
|
const { isDirty, filePath, serializeSlides, enabled = true, getChangeSources } = input;
|
|
4166
|
-
const intervalMs =
|
|
4166
|
+
const intervalMs = chunkFJDZ7AEE_js.resolveAutosaveIntervalMs({
|
|
4167
4167
|
hostIntervalMs: input.intervalMs,
|
|
4168
4168
|
optionsIntervalSeconds: input.intervalSeconds
|
|
4169
4169
|
});
|
|
@@ -4194,7 +4194,7 @@ function useAutosave(input) {
|
|
|
4194
4194
|
return;
|
|
4195
4195
|
}
|
|
4196
4196
|
const sources = changeSourcesRef.current?.() ?? [];
|
|
4197
|
-
if (!
|
|
4197
|
+
if (!chunkFJDZ7AEE_js.shouldWriteAutosaveSnapshot({
|
|
4198
4198
|
filePath: path,
|
|
4199
4199
|
isDirty: isDirtyRef.current,
|
|
4200
4200
|
saving: isSavingRef.current,
|
|
@@ -4212,8 +4212,8 @@ function useAutosave(input) {
|
|
|
4212
4212
|
isSavingRef.current = false;
|
|
4213
4213
|
return;
|
|
4214
4214
|
}
|
|
4215
|
-
await
|
|
4216
|
-
lastSnapshotRef.current =
|
|
4215
|
+
await chunkFJDZ7AEE_js.saveAutosaveSnapshot(path, data);
|
|
4216
|
+
lastSnapshotRef.current = chunkFJDZ7AEE_js.autosaveSnapshotMark(path, sources);
|
|
4217
4217
|
setAutosaveStatus({ state: "saved", timestamp: Date.now() });
|
|
4218
4218
|
} catch (err) {
|
|
4219
4219
|
setAutosaveStatus({
|
|
@@ -4299,11 +4299,11 @@ function useElementOperations(input) {
|
|
|
4299
4299
|
(elementId, updates) => {
|
|
4300
4300
|
if (masterView?.target) {
|
|
4301
4301
|
applyMasterViewWrite(
|
|
4302
|
-
|
|
4302
|
+
chunkFJDZ7AEE_js.updateMasterViewElement(masterView, masterView.target, elementId, updates)
|
|
4303
4303
|
);
|
|
4304
4304
|
return;
|
|
4305
4305
|
}
|
|
4306
|
-
if (
|
|
4306
|
+
if (chunkFJDZ7AEE_js.isTemplateElementId(elementId)) {
|
|
4307
4307
|
const slideId = activeSlide?.id;
|
|
4308
4308
|
if (slideId) {
|
|
4309
4309
|
setTemplateElementsBySlideId((prev) => ({
|
|
@@ -4351,7 +4351,7 @@ function useElementOperations(input) {
|
|
|
4351
4351
|
);
|
|
4352
4352
|
const updateSelectedShapeStyle = react.useCallback(
|
|
4353
4353
|
(updates) => {
|
|
4354
|
-
if (!selectedElement || !
|
|
4354
|
+
if (!selectedElement || !chunkFJDZ7AEE_js.hasShapeProperties(selectedElement)) {
|
|
4355
4355
|
return;
|
|
4356
4356
|
}
|
|
4357
4357
|
updateSelectedElement({
|
|
@@ -4362,17 +4362,17 @@ function useElementOperations(input) {
|
|
|
4362
4362
|
);
|
|
4363
4363
|
const updateSelectedTextStyle = react.useCallback(
|
|
4364
4364
|
(updates) => {
|
|
4365
|
-
if (!selectedElement || !
|
|
4365
|
+
if (!selectedElement || !chunkFJDZ7AEE_js.hasTextProperties(selectedElement)) {
|
|
4366
4366
|
return;
|
|
4367
4367
|
}
|
|
4368
|
-
const inlineSel =
|
|
4368
|
+
const inlineSel = chunkFJDZ7AEE_js.getInlineEditorSelection(selectedElement.textSegments);
|
|
4369
4369
|
if (inlineSel && selectedElement.textSegments) {
|
|
4370
|
-
const { newSegments: newSegments2, newSelection } =
|
|
4370
|
+
const { newSegments: newSegments2, newSelection } = chunkFJDZ7AEE_js.applyStyleToSelectedSegments(
|
|
4371
4371
|
selectedElement.textSegments,
|
|
4372
4372
|
inlineSel,
|
|
4373
4373
|
updates
|
|
4374
4374
|
);
|
|
4375
|
-
|
|
4375
|
+
chunkFJDZ7AEE_js.setPendingSelectionRestore(newSelection);
|
|
4376
4376
|
updateSelectedElement({
|
|
4377
4377
|
textSegments: newSegments2
|
|
4378
4378
|
});
|
|
@@ -4392,12 +4392,12 @@ function useElementOperations(input) {
|
|
|
4392
4392
|
);
|
|
4393
4393
|
const updateSelectedTextCase = react.useCallback(
|
|
4394
4394
|
(mode) => {
|
|
4395
|
-
if (!selectedElement || !
|
|
4395
|
+
if (!selectedElement || !chunkFJDZ7AEE_js.hasTextProperties(selectedElement)) {
|
|
4396
4396
|
return;
|
|
4397
4397
|
}
|
|
4398
|
-
const inlineSel =
|
|
4398
|
+
const inlineSel = chunkFJDZ7AEE_js.getInlineEditorSelection(selectedElement.textSegments);
|
|
4399
4399
|
if (inlineSel && selectedElement.textSegments) {
|
|
4400
|
-
const newSegments =
|
|
4400
|
+
const newSegments = chunkFJDZ7AEE_js.applyCaseTransformToSegments(
|
|
4401
4401
|
selectedElement.textSegments,
|
|
4402
4402
|
inlineSel,
|
|
4403
4403
|
mode
|
|
@@ -4407,14 +4407,14 @@ function useElementOperations(input) {
|
|
|
4407
4407
|
}
|
|
4408
4408
|
const updates = {};
|
|
4409
4409
|
if (selectedElement.textSegments && selectedElement.textSegments.length > 0) {
|
|
4410
|
-
updates.textSegments =
|
|
4410
|
+
updates.textSegments = chunkFJDZ7AEE_js.applyCaseTransformToSegments(
|
|
4411
4411
|
selectedElement.textSegments,
|
|
4412
4412
|
null,
|
|
4413
4413
|
mode
|
|
4414
4414
|
);
|
|
4415
4415
|
}
|
|
4416
4416
|
if (typeof selectedElement.text === "string") {
|
|
4417
|
-
updates.text =
|
|
4417
|
+
updates.text = chunkFJDZ7AEE_js.transformTextCase(selectedElement.text, mode);
|
|
4418
4418
|
}
|
|
4419
4419
|
updateSelectedElement(updates);
|
|
4420
4420
|
},
|
|
@@ -4427,15 +4427,15 @@ function useElementOperations(input) {
|
|
|
4427
4427
|
[setSlides]
|
|
4428
4428
|
);
|
|
4429
4429
|
const masterViewTarget = masterView?.target ?? null;
|
|
4430
|
-
const activeElements = masterViewTarget ?
|
|
4430
|
+
const activeElements = masterViewTarget ? chunkFJDZ7AEE_js.masterViewElements(masterView, masterViewTarget) : editTemplateMode ? templateElements : activeSlide?.elements ?? [];
|
|
4431
4431
|
const updateActiveElements = react.useCallback(
|
|
4432
4432
|
(updater) => {
|
|
4433
4433
|
if (masterView?.target) {
|
|
4434
4434
|
applyMasterViewWrite(
|
|
4435
|
-
|
|
4435
|
+
chunkFJDZ7AEE_js.replaceMasterViewElements(
|
|
4436
4436
|
masterView,
|
|
4437
4437
|
masterView.target,
|
|
4438
|
-
updater(
|
|
4438
|
+
updater(chunkFJDZ7AEE_js.masterViewElements(masterView, masterView.target))
|
|
4439
4439
|
)
|
|
4440
4440
|
);
|
|
4441
4441
|
return;
|
|
@@ -4488,7 +4488,7 @@ function useSectionOperations(input) {
|
|
|
4488
4488
|
const { sections, setSections, slides, setSlides, markDirty } = input;
|
|
4489
4489
|
const addSection2 = react.useCallback(
|
|
4490
4490
|
(name, afterSlideIndex) => {
|
|
4491
|
-
const result =
|
|
4491
|
+
const result = chunkFJDZ7AEE_js.addSection(sections, slides, name, afterSlideIndex);
|
|
4492
4492
|
setSlides(result.slides);
|
|
4493
4493
|
setSections(result.sections);
|
|
4494
4494
|
markDirty();
|
|
@@ -4497,7 +4497,7 @@ function useSectionOperations(input) {
|
|
|
4497
4497
|
);
|
|
4498
4498
|
const renameSection2 = react.useCallback(
|
|
4499
4499
|
(sectionId, newName) => {
|
|
4500
|
-
const result =
|
|
4500
|
+
const result = chunkFJDZ7AEE_js.renameSection(sections, slides, sectionId, newName);
|
|
4501
4501
|
setSections(result.sections);
|
|
4502
4502
|
setSlides(result.slides);
|
|
4503
4503
|
markDirty();
|
|
@@ -4506,7 +4506,7 @@ function useSectionOperations(input) {
|
|
|
4506
4506
|
);
|
|
4507
4507
|
const deleteSection2 = react.useCallback(
|
|
4508
4508
|
(sectionId) => {
|
|
4509
|
-
const result =
|
|
4509
|
+
const result = chunkFJDZ7AEE_js.deleteSection(sections, slides, sectionId);
|
|
4510
4510
|
setSections(result.sections);
|
|
4511
4511
|
setSlides(result.slides);
|
|
4512
4512
|
markDirty();
|
|
@@ -4515,21 +4515,21 @@ function useSectionOperations(input) {
|
|
|
4515
4515
|
);
|
|
4516
4516
|
const moveSectionUp2 = react.useCallback(
|
|
4517
4517
|
(sectionId) => {
|
|
4518
|
-
setSections(
|
|
4518
|
+
setSections(chunkFJDZ7AEE_js.moveSectionUp(sections, sectionId));
|
|
4519
4519
|
markDirty();
|
|
4520
4520
|
},
|
|
4521
4521
|
[sections, setSections, markDirty]
|
|
4522
4522
|
);
|
|
4523
4523
|
const moveSectionDown2 = react.useCallback(
|
|
4524
4524
|
(sectionId) => {
|
|
4525
|
-
setSections(
|
|
4525
|
+
setSections(chunkFJDZ7AEE_js.moveSectionDown(sections, sectionId));
|
|
4526
4526
|
markDirty();
|
|
4527
4527
|
},
|
|
4528
4528
|
[sections, setSections, markDirty]
|
|
4529
4529
|
);
|
|
4530
4530
|
const moveSlidesToSection2 = react.useCallback(
|
|
4531
4531
|
(slideIndexes, targetSectionId) => {
|
|
4532
|
-
const result =
|
|
4532
|
+
const result = chunkFJDZ7AEE_js.moveSlidesToSection(sections, slides, slideIndexes, targetSectionId);
|
|
4533
4533
|
setSlides(result.slides);
|
|
4534
4534
|
setSections(result.sections);
|
|
4535
4535
|
markDirty();
|
|
@@ -4558,19 +4558,19 @@ function useSectionOperations(input) {
|
|
|
4558
4558
|
|
|
4559
4559
|
// src/viewer/hooks/pointer-move-handlers.ts
|
|
4560
4560
|
function computeResizeGeometry(handle, startX, startY, startWidth, startHeight, dx, dy, snapToGrid, gridSpacingPx) {
|
|
4561
|
-
const resized =
|
|
4561
|
+
const resized = chunkFJDZ7AEE_js.applyResize(
|
|
4562
4562
|
{ x: startX, y: startY, width: startWidth, height: startHeight },
|
|
4563
4563
|
handle,
|
|
4564
4564
|
dx,
|
|
4565
4565
|
dy,
|
|
4566
4566
|
1,
|
|
4567
|
-
{ minSize:
|
|
4567
|
+
{ minSize: chunkB6UIVRFA_js.MIN_ELEMENT_SIZE }
|
|
4568
4568
|
);
|
|
4569
4569
|
const box = { x: resized.x, y: resized.y, width: resized.width, height: resized.height };
|
|
4570
4570
|
if (!snapToGrid) {
|
|
4571
4571
|
return box;
|
|
4572
4572
|
}
|
|
4573
|
-
return
|
|
4573
|
+
return chunkFJDZ7AEE_js.snapBoxToGrid(box, handle, gridSpacingPx, chunkB6UIVRFA_js.MIN_ELEMENT_SIZE);
|
|
4574
4574
|
}
|
|
4575
4575
|
function resolveLiveTarget(input) {
|
|
4576
4576
|
const { livePatcher, editTemplateMode, activeSlide } = input;
|
|
@@ -4683,7 +4683,7 @@ function processDragMove(e, drag, editorScale, snapToGrid, snapToShape, gridSpac
|
|
|
4683
4683
|
width: el.width,
|
|
4684
4684
|
height: el.height
|
|
4685
4685
|
}));
|
|
4686
|
-
const snapResult =
|
|
4686
|
+
const snapResult = chunkFJDZ7AEE_js.computeSnapToShape(
|
|
4687
4687
|
targetX,
|
|
4688
4688
|
targetY,
|
|
4689
4689
|
primaryEl.width,
|
|
@@ -4722,7 +4722,7 @@ function processDragMove(e, drag, editorScale, snapToGrid, snapToShape, gridSpac
|
|
|
4722
4722
|
if (live) {
|
|
4723
4723
|
for (const id of Object.keys(drag.startPositionsById)) {
|
|
4724
4724
|
const start = drag.startPositionsById[id];
|
|
4725
|
-
|
|
4725
|
+
chunkFJDZ7AEE_js.publishLiveGeometry(live.patcher, live.slideId, id, {
|
|
4726
4726
|
x: start.x + appliedDx,
|
|
4727
4727
|
y: start.y + appliedDy
|
|
4728
4728
|
});
|
|
@@ -4756,22 +4756,22 @@ function processResizeMove(e, rs, editorScale, snapToGrid, gridSpacingPx, live)
|
|
|
4756
4756
|
if (rs.domEl) {
|
|
4757
4757
|
rs.domEl.style.left = `${geo.x}px`;
|
|
4758
4758
|
rs.domEl.style.top = `${geo.y}px`;
|
|
4759
|
-
rs.domEl.style.width = `${Math.max(geo.width,
|
|
4760
|
-
rs.domEl.style.height = `${Math.max(geo.height,
|
|
4759
|
+
rs.domEl.style.width = `${Math.max(geo.width, chunkB6UIVRFA_js.MIN_ELEMENT_SIZE)}px`;
|
|
4760
|
+
rs.domEl.style.height = `${Math.max(geo.height, chunkB6UIVRFA_js.MIN_ELEMENT_SIZE)}px`;
|
|
4761
4761
|
}
|
|
4762
4762
|
if (live) {
|
|
4763
|
-
|
|
4763
|
+
chunkFJDZ7AEE_js.publishLiveGeometry(live.patcher, live.slideId, rs.elementId, {
|
|
4764
4764
|
x: geo.x,
|
|
4765
4765
|
y: geo.y,
|
|
4766
|
-
width: Math.max(geo.width,
|
|
4767
|
-
height: Math.max(geo.height,
|
|
4766
|
+
width: Math.max(geo.width, chunkB6UIVRFA_js.MIN_ELEMENT_SIZE),
|
|
4767
|
+
height: Math.max(geo.height, chunkB6UIVRFA_js.MIN_ELEMENT_SIZE)
|
|
4768
4768
|
});
|
|
4769
4769
|
}
|
|
4770
4770
|
}
|
|
4771
4771
|
function processAdjustmentMove(e, adj, editorScale, updateElementById) {
|
|
4772
4772
|
const dx = (e.clientX - adj.startClientX) / editorScale;
|
|
4773
4773
|
const dy = (e.clientY - adj.startClientY) / editorScale;
|
|
4774
|
-
const adjustments =
|
|
4774
|
+
const adjustments = chunkFJDZ7AEE_js.getDraggedShapeAdjustments(adj, dx, dy);
|
|
4775
4775
|
if (!adj.moved && Math.hypot(dx, dy) > 2) {
|
|
4776
4776
|
adj.moved = true;
|
|
4777
4777
|
}
|
|
@@ -4846,13 +4846,13 @@ function processPointerUp(input) {
|
|
|
4846
4846
|
if (i !== activeSlideIndex) {
|
|
4847
4847
|
return s;
|
|
4848
4848
|
}
|
|
4849
|
-
const rerouted =
|
|
4849
|
+
const rerouted = chunkFJDZ7AEE_js.rerouteConnectorsForMovedElements(s.elements, movedIds);
|
|
4850
4850
|
if (rerouted.length === 0) {
|
|
4851
4851
|
return s;
|
|
4852
4852
|
}
|
|
4853
4853
|
return {
|
|
4854
4854
|
...s,
|
|
4855
|
-
elements:
|
|
4855
|
+
elements: chunkFJDZ7AEE_js.applyReroutedConnectors(s.elements, rerouted)
|
|
4856
4856
|
};
|
|
4857
4857
|
})
|
|
4858
4858
|
);
|
|
@@ -4877,9 +4877,9 @@ function processPointerUp(input) {
|
|
|
4877
4877
|
}
|
|
4878
4878
|
function commitMarquee(marquee, editTemplateMode, templateElements, activeSlide, applySelection, clearSelection) {
|
|
4879
4879
|
const sourceElements = editTemplateMode ? templateElements : activeSlide?.elements ?? [];
|
|
4880
|
-
const hitIds =
|
|
4880
|
+
const hitIds = chunkFJDZ7AEE_js.computeMarqueeHitIds(marquee, sourceElements);
|
|
4881
4881
|
if (marquee.additive) {
|
|
4882
|
-
const merged =
|
|
4882
|
+
const merged = chunkFJDZ7AEE_js.mergeAdditiveSelection(marquee.baseSelectionIds, hitIds);
|
|
4883
4883
|
if (merged.length > 0) {
|
|
4884
4884
|
applySelection(merged[0], merged);
|
|
4885
4885
|
} else {
|
|
@@ -4902,8 +4902,8 @@ function commitDrag(drag, editTemplateMode, activeSlide, activeSlideIndex, setTe
|
|
|
4902
4902
|
}
|
|
4903
4903
|
return { ...el, x: start.x + dx, y: start.y + dy };
|
|
4904
4904
|
});
|
|
4905
|
-
const rerouted =
|
|
4906
|
-
return
|
|
4905
|
+
const rerouted = chunkFJDZ7AEE_js.rerouteConnectorsForMovedElements(movedElements, movedIds);
|
|
4906
|
+
return chunkFJDZ7AEE_js.applyReroutedConnectors(movedElements, rerouted);
|
|
4907
4907
|
};
|
|
4908
4908
|
if (editTemplateMode) {
|
|
4909
4909
|
const slideId = activeSlide?.id;
|
|
@@ -5059,11 +5059,11 @@ function useCanvasInteractions(input) {
|
|
|
5059
5059
|
return;
|
|
5060
5060
|
}
|
|
5061
5061
|
const el = elementLookup.get(editId);
|
|
5062
|
-
if (el &&
|
|
5062
|
+
if (el && chunkFJDZ7AEE_js.hasTextProperties(el)) {
|
|
5063
5063
|
const committedText = transformCommittedText ? transformCommittedText(inlineEditingText) : inlineEditingText;
|
|
5064
|
-
const newSegments =
|
|
5064
|
+
const newSegments = chunkFJDZ7AEE_js.remapTextToSegments(committedText, el.textSegments, el.textStyle);
|
|
5065
5065
|
const editorEl = document.querySelector("[data-inline-editor]");
|
|
5066
|
-
const newHeight =
|
|
5066
|
+
const newHeight = chunkFJDZ7AEE_js.resolveInlineEditAutoFitHeight(el.textStyle, el.height, editorEl);
|
|
5067
5067
|
ops.updateElementById(editId, {
|
|
5068
5068
|
text: committedText,
|
|
5069
5069
|
textSegments: newSegments,
|
|
@@ -5075,7 +5075,7 @@ function useCanvasInteractions(input) {
|
|
|
5075
5075
|
setInlineEditingText("");
|
|
5076
5076
|
};
|
|
5077
5077
|
const openEquationEditorForElement = (el) => {
|
|
5078
|
-
if (!
|
|
5078
|
+
if (!chunkFJDZ7AEE_js.hasTextProperties(el)) {
|
|
5079
5079
|
return false;
|
|
5080
5080
|
}
|
|
5081
5081
|
const eqSeg = el.textSegments?.find((seg) => seg.equationXml);
|
|
@@ -5105,7 +5105,7 @@ function useCanvasInteractions(input) {
|
|
|
5105
5105
|
justInteractedRef.current = false;
|
|
5106
5106
|
} else {
|
|
5107
5107
|
const el = elementLookup.get(elementId);
|
|
5108
|
-
if (el &&
|
|
5108
|
+
if (el && chunkFJDZ7AEE_js.hasTextProperties(el) && chunkFJDZ7AEE_js.canInteractWithElement(el, "textEdit")) {
|
|
5109
5109
|
if (!openEquationEditorForElement(el)) {
|
|
5110
5110
|
setInlineEditingElementId(elementId);
|
|
5111
5111
|
setInlineEditingText(el.text ?? "");
|
|
@@ -5124,7 +5124,7 @@ function useCanvasInteractions(input) {
|
|
|
5124
5124
|
if (openEquationEditorForElement(el)) {
|
|
5125
5125
|
return;
|
|
5126
5126
|
}
|
|
5127
|
-
if (
|
|
5127
|
+
if (chunkFJDZ7AEE_js.hasTextProperties(el) && chunkFJDZ7AEE_js.canInteractWithElement(el, "textEdit")) {
|
|
5128
5128
|
setInlineEditingElementId(elementId);
|
|
5129
5129
|
setInlineEditingText(el.text ?? "");
|
|
5130
5130
|
}
|
|
@@ -5147,7 +5147,7 @@ function useCanvasInteractions(input) {
|
|
|
5147
5147
|
justSelectedRef.current = false;
|
|
5148
5148
|
}
|
|
5149
5149
|
const ids = !wasSelected ? [elementId] : effectiveSelectedIds.length ? effectiveSelectedIds : [elementId];
|
|
5150
|
-
const movableIds =
|
|
5150
|
+
const movableIds = chunkFJDZ7AEE_js.filterInteractableIds(ids, (id) => elementLookup.get(id), "move");
|
|
5151
5151
|
if (movableIds.length === 0) {
|
|
5152
5152
|
return;
|
|
5153
5153
|
}
|
|
@@ -5217,7 +5217,7 @@ function useCanvasInteractions(input) {
|
|
|
5217
5217
|
const handleResizePointerDown = (elementId, e, handle) => {
|
|
5218
5218
|
e.stopPropagation();
|
|
5219
5219
|
const el = elementLookup.get(elementId);
|
|
5220
|
-
if (!el || !
|
|
5220
|
+
if (!el || !chunkFJDZ7AEE_js.canInteractWithElement(el, "resize")) {
|
|
5221
5221
|
return;
|
|
5222
5222
|
}
|
|
5223
5223
|
resizeStateRef.current = {
|
|
@@ -5239,7 +5239,7 @@ function useCanvasInteractions(input) {
|
|
|
5239
5239
|
};
|
|
5240
5240
|
const handleRotate = (elementId, rotationDeg) => {
|
|
5241
5241
|
const el = elementLookup.get(elementId);
|
|
5242
|
-
if (!el || !
|
|
5242
|
+
if (!el || !chunkFJDZ7AEE_js.canInteractWithElement(el, "rotate")) {
|
|
5243
5243
|
return;
|
|
5244
5244
|
}
|
|
5245
5245
|
ops.updateElementById(elementId, { rotation: rotationDeg });
|
|
@@ -5259,10 +5259,10 @@ function useCanvasInteractions(input) {
|
|
|
5259
5259
|
const handleAdjustmentPointerDown = (elementId, e, descriptor) => {
|
|
5260
5260
|
e.stopPropagation();
|
|
5261
5261
|
const el = elementLookup.get(elementId);
|
|
5262
|
-
if (!el || !
|
|
5262
|
+
if (!el || !chunkFJDZ7AEE_js.canInteractWithElement(el, "adjustHandle")) {
|
|
5263
5263
|
return;
|
|
5264
5264
|
}
|
|
5265
|
-
shapeAdjustmentDragStateRef.current =
|
|
5265
|
+
shapeAdjustmentDragStateRef.current = chunkFJDZ7AEE_js.beginShapeAdjustment(
|
|
5266
5266
|
el,
|
|
5267
5267
|
descriptor,
|
|
5268
5268
|
e.clientX,
|
|
@@ -5309,7 +5309,7 @@ function createFileHandlers(deps) {
|
|
|
5309
5309
|
h = Math.round(h * scale);
|
|
5310
5310
|
}
|
|
5311
5311
|
addElement({
|
|
5312
|
-
id:
|
|
5312
|
+
id: chunkFJDZ7AEE_js.generateElementId(),
|
|
5313
5313
|
type: "image",
|
|
5314
5314
|
x: Math.round((canvasSize.width - w) / 2),
|
|
5315
5315
|
y: Math.round((canvasSize.height - h) / 2),
|
|
@@ -5320,7 +5320,7 @@ function createFileHandlers(deps) {
|
|
|
5320
5320
|
};
|
|
5321
5321
|
img.onerror = () => {
|
|
5322
5322
|
addElement({
|
|
5323
|
-
id:
|
|
5323
|
+
id: chunkFJDZ7AEE_js.generateElementId(),
|
|
5324
5324
|
type: "image",
|
|
5325
5325
|
x: 100,
|
|
5326
5326
|
y: 100,
|
|
@@ -5339,14 +5339,14 @@ function createFileHandlers(deps) {
|
|
|
5339
5339
|
return;
|
|
5340
5340
|
}
|
|
5341
5341
|
e.target.value = "";
|
|
5342
|
-
const mediaType =
|
|
5342
|
+
const mediaType = chunkFJDZ7AEE_js.classifyMediaType(file.type);
|
|
5343
5343
|
if (!mediaType) {
|
|
5344
5344
|
return;
|
|
5345
5345
|
}
|
|
5346
5346
|
const elFilePath = file.path;
|
|
5347
5347
|
const insertMediaElement = (mediaSourceUrl, width, height) => {
|
|
5348
5348
|
addElement({
|
|
5349
|
-
id:
|
|
5349
|
+
id: chunkFJDZ7AEE_js.generateElementId(),
|
|
5350
5350
|
type: "media",
|
|
5351
5351
|
mediaType,
|
|
5352
5352
|
mediaMimeType: file.type || void 0,
|
|
@@ -5521,13 +5521,13 @@ function createStructuredElementHandlers(deps) {
|
|
|
5521
5521
|
return;
|
|
5522
5522
|
}
|
|
5523
5523
|
addElement({
|
|
5524
|
-
id:
|
|
5524
|
+
id: chunkFJDZ7AEE_js.generateElementId(),
|
|
5525
5525
|
type: "smartArt",
|
|
5526
5526
|
x: 100,
|
|
5527
5527
|
y: 120,
|
|
5528
5528
|
width: 600,
|
|
5529
5529
|
height: 340,
|
|
5530
|
-
smartArtData:
|
|
5530
|
+
smartArtData: chunkFJDZ7AEE_js.buildSmartArtPresetData(
|
|
5531
5531
|
layout,
|
|
5532
5532
|
defaultItems,
|
|
5533
5533
|
(i) => `node-${Date.now()}-${i}-${Math.random().toString(36).slice(2, 8)}`
|
|
@@ -5539,7 +5539,7 @@ function createStructuredElementHandlers(deps) {
|
|
|
5539
5539
|
return;
|
|
5540
5540
|
}
|
|
5541
5541
|
addElement({
|
|
5542
|
-
id:
|
|
5542
|
+
id: chunkFJDZ7AEE_js.generateElementId(),
|
|
5543
5543
|
type: "shape",
|
|
5544
5544
|
x: 120,
|
|
5545
5545
|
y: 200,
|
|
@@ -5577,7 +5577,7 @@ function createStructuredElementHandlers(deps) {
|
|
|
5577
5577
|
return;
|
|
5578
5578
|
}
|
|
5579
5579
|
const resolved = resolveHyperlinkEditResult(data);
|
|
5580
|
-
if (resolved.url && !
|
|
5580
|
+
if (resolved.url && !chunkFJDZ7AEE_js.isUrlSafe(resolved.url)) {
|
|
5581
5581
|
return;
|
|
5582
5582
|
}
|
|
5583
5583
|
const actionClick = {
|
|
@@ -5601,7 +5601,7 @@ function createStructuredElementHandlers(deps) {
|
|
|
5601
5601
|
const displayText = value || fieldTexts[fieldType] || fieldType;
|
|
5602
5602
|
const fieldGuid = `{${crypto.randomUUID().toUpperCase()}}`;
|
|
5603
5603
|
addElement({
|
|
5604
|
-
id:
|
|
5604
|
+
id: chunkFJDZ7AEE_js.generateElementId(),
|
|
5605
5605
|
type: "shape",
|
|
5606
5606
|
x: 120,
|
|
5607
5607
|
y: 200,
|
|
@@ -5623,11 +5623,11 @@ function createStructuredElementHandlers(deps) {
|
|
|
5623
5623
|
if (!activeSlide) {
|
|
5624
5624
|
return;
|
|
5625
5625
|
}
|
|
5626
|
-
const preset =
|
|
5626
|
+
const preset = chunkFJDZ7AEE_js.ACTION_BUTTON_PRESETS.find((p) => p.shapeType === shapeType);
|
|
5627
5627
|
if (!preset) {
|
|
5628
5628
|
return;
|
|
5629
5629
|
}
|
|
5630
|
-
const defaultPptxAction =
|
|
5630
|
+
const defaultPptxAction = chunkFJDZ7AEE_js.elementActionToPptxAction({
|
|
5631
5631
|
trigger: "click",
|
|
5632
5632
|
type: preset.defaultAction
|
|
5633
5633
|
});
|
|
@@ -5636,7 +5636,7 @@ function createStructuredElementHandlers(deps) {
|
|
|
5636
5636
|
defaultPptxAction.highlightClick = true;
|
|
5637
5637
|
}
|
|
5638
5638
|
addElement({
|
|
5639
|
-
id:
|
|
5639
|
+
id: chunkFJDZ7AEE_js.generateElementId(),
|
|
5640
5640
|
type: "shape",
|
|
5641
5641
|
x: 150,
|
|
5642
5642
|
y: 150,
|
|
@@ -5703,14 +5703,14 @@ function useInsertElements(input) {
|
|
|
5703
5703
|
return;
|
|
5704
5704
|
}
|
|
5705
5705
|
addElement({
|
|
5706
|
-
id:
|
|
5706
|
+
id: chunkFJDZ7AEE_js.generateElementId(),
|
|
5707
5707
|
type: "text",
|
|
5708
5708
|
x: 100,
|
|
5709
5709
|
y: 100,
|
|
5710
5710
|
width: 300,
|
|
5711
5711
|
height: 60,
|
|
5712
5712
|
text: "",
|
|
5713
|
-
textStyle: { fontSize:
|
|
5713
|
+
textStyle: { fontSize: chunkB6UIVRFA_js.DEFAULT_TEXT_FONT_SIZE }
|
|
5714
5714
|
});
|
|
5715
5715
|
};
|
|
5716
5716
|
const handleAddShape = () => {
|
|
@@ -5718,7 +5718,7 @@ function useInsertElements(input) {
|
|
|
5718
5718
|
return;
|
|
5719
5719
|
}
|
|
5720
5720
|
addElement({
|
|
5721
|
-
id:
|
|
5721
|
+
id: chunkFJDZ7AEE_js.generateElementId(),
|
|
5722
5722
|
type: "shape",
|
|
5723
5723
|
x: 150,
|
|
5724
5724
|
y: 150,
|
|
@@ -5737,15 +5737,15 @@ function useInsertElements(input) {
|
|
|
5737
5737
|
return;
|
|
5738
5738
|
}
|
|
5739
5739
|
addElement({
|
|
5740
|
-
...
|
|
5741
|
-
id:
|
|
5740
|
+
...chunkFJDZ7AEE_js.newTableElement(chunkB6UIVRFA_js.DEFAULT_TABLE_ROWS, chunkB6UIVRFA_js.DEFAULT_TABLE_COLUMNS, 100, 200),
|
|
5741
|
+
id: chunkFJDZ7AEE_js.generateElementId()
|
|
5742
5742
|
});
|
|
5743
5743
|
};
|
|
5744
5744
|
const handleAddChart = (chartKind) => {
|
|
5745
5745
|
if (!activeSlide) {
|
|
5746
5746
|
return;
|
|
5747
5747
|
}
|
|
5748
|
-
addElement(
|
|
5748
|
+
addElement(chunkFJDZ7AEE_js.createDefaultChartElement(chartKind));
|
|
5749
5749
|
};
|
|
5750
5750
|
const structured = createStructuredElementHandlers({
|
|
5751
5751
|
activeSlide,
|
|
@@ -5815,7 +5815,7 @@ function useClipboardHandlers(input) {
|
|
|
5815
5815
|
if (!selectedElement) {
|
|
5816
5816
|
return;
|
|
5817
5817
|
}
|
|
5818
|
-
setClipboardPayload(
|
|
5818
|
+
setClipboardPayload(chunkFJDZ7AEE_js.buildElementClipboardPayload(selectedElement, editTemplateMode));
|
|
5819
5819
|
};
|
|
5820
5820
|
const handleDelete = () => {
|
|
5821
5821
|
const idsToDelete = effectiveSelectedIds;
|
|
@@ -5832,7 +5832,7 @@ function useClipboardHandlers(input) {
|
|
|
5832
5832
|
handleDelete();
|
|
5833
5833
|
};
|
|
5834
5834
|
const insertClone = (source) => {
|
|
5835
|
-
const clone =
|
|
5835
|
+
const clone = chunkFJDZ7AEE_js.cloneElementForPaste(source, { intoTemplate: editTemplateMode });
|
|
5836
5836
|
ops.updateActiveElements((els) => [...els, clone]);
|
|
5837
5837
|
ops.applySelection(clone.id);
|
|
5838
5838
|
history.markDirty();
|
|
@@ -5867,7 +5867,7 @@ function resolveShapePath(el) {
|
|
|
5867
5867
|
return el.pathData;
|
|
5868
5868
|
}
|
|
5869
5869
|
if ("shapeType" in el && typeof el.shapeType === "string") {
|
|
5870
|
-
const clipPath =
|
|
5870
|
+
const clipPath = chunkFJDZ7AEE_js.getPresetShapeClipPath(el.shapeType);
|
|
5871
5871
|
if (clipPath) {
|
|
5872
5872
|
const svgPath = clipPathToSvgPath(clipPath, el.width, el.height);
|
|
5873
5873
|
if (svgPath) {
|
|
@@ -5918,7 +5918,7 @@ function clipPathToSvgPath(clipPath, width, height) {
|
|
|
5918
5918
|
return parts.join(" ");
|
|
5919
5919
|
}
|
|
5920
5920
|
function transformPathToGlobal(pathData, el) {
|
|
5921
|
-
const polys =
|
|
5921
|
+
const polys = chunkFJDZ7AEE_js.svgPathToPolygons(pathData);
|
|
5922
5922
|
if (polys.length === 0) {
|
|
5923
5923
|
return pathData;
|
|
5924
5924
|
}
|
|
@@ -5938,10 +5938,10 @@ function transformPathToGlobal(pathData, el) {
|
|
|
5938
5938
|
y: pt.y * scaleY + el.y
|
|
5939
5939
|
}))
|
|
5940
5940
|
);
|
|
5941
|
-
return
|
|
5941
|
+
return chunkFJDZ7AEE_js.polygonsToSvgPath(transformed);
|
|
5942
5942
|
}
|
|
5943
5943
|
function transformPathToLocal(pathData, x, y, _width, _height) {
|
|
5944
|
-
const polys =
|
|
5944
|
+
const polys = chunkFJDZ7AEE_js.svgPathToPolygons(pathData);
|
|
5945
5945
|
if (polys.length === 0) {
|
|
5946
5946
|
return pathData;
|
|
5947
5947
|
}
|
|
@@ -5951,10 +5951,10 @@ function transformPathToLocal(pathData, x, y, _width, _height) {
|
|
|
5951
5951
|
y: pt.y - y
|
|
5952
5952
|
}))
|
|
5953
5953
|
);
|
|
5954
|
-
return
|
|
5954
|
+
return chunkFJDZ7AEE_js.polygonsToSvgPath(transformed);
|
|
5955
5955
|
}
|
|
5956
5956
|
function pathBounds(pathData) {
|
|
5957
|
-
const polys =
|
|
5957
|
+
const polys = chunkFJDZ7AEE_js.svgPathToPolygons(pathData);
|
|
5958
5958
|
let minX = Infinity;
|
|
5959
5959
|
let minY = Infinity;
|
|
5960
5960
|
let maxX = -Infinity;
|
|
@@ -6013,7 +6013,7 @@ function useMergeShapesHandler(input) {
|
|
|
6013
6013
|
let allFragments = [];
|
|
6014
6014
|
let remaining = globalPaths[0];
|
|
6015
6015
|
for (let i = 1; i < globalPaths.length; i++) {
|
|
6016
|
-
const frags =
|
|
6016
|
+
const frags = chunkFJDZ7AEE_js.mergeShapes("fragment", remaining, globalPaths[i]);
|
|
6017
6017
|
if (Array.isArray(frags)) {
|
|
6018
6018
|
allFragments = frags;
|
|
6019
6019
|
}
|
|
@@ -6042,7 +6042,7 @@ function useMergeShapesHandler(input) {
|
|
|
6042
6042
|
bounds.height
|
|
6043
6043
|
);
|
|
6044
6044
|
const newEl = {
|
|
6045
|
-
id:
|
|
6045
|
+
id: chunkFJDZ7AEE_js.generateElementId(),
|
|
6046
6046
|
type: "shape",
|
|
6047
6047
|
x: bounds.x,
|
|
6048
6048
|
y: bounds.y,
|
|
@@ -6080,7 +6080,7 @@ function useMergeShapesHandler(input) {
|
|
|
6080
6080
|
} else {
|
|
6081
6081
|
let resultPath = globalPaths[0];
|
|
6082
6082
|
for (let i = 1; i < globalPaths.length; i++) {
|
|
6083
|
-
const result =
|
|
6083
|
+
const result = chunkFJDZ7AEE_js.mergeShapes(operation, resultPath, globalPaths[i]);
|
|
6084
6084
|
if (typeof result === "string") {
|
|
6085
6085
|
resultPath = result;
|
|
6086
6086
|
}
|
|
@@ -6101,7 +6101,7 @@ function useMergeShapesHandler(input) {
|
|
|
6101
6101
|
);
|
|
6102
6102
|
const primary = targets[0];
|
|
6103
6103
|
const newEl = {
|
|
6104
|
-
id:
|
|
6104
|
+
id: chunkFJDZ7AEE_js.generateElementId(),
|
|
6105
6105
|
type: "shape",
|
|
6106
6106
|
x: bounds.x,
|
|
6107
6107
|
y: bounds.y,
|
|
@@ -6164,7 +6164,7 @@ function useGroupAlignLayerHandlers(input) {
|
|
|
6164
6164
|
if (ids.length < 2 || !activeSlide) {
|
|
6165
6165
|
return;
|
|
6166
6166
|
}
|
|
6167
|
-
const { elements, groupId } =
|
|
6167
|
+
const { elements, groupId } = chunkFJDZ7AEE_js.groupElements(ops.activeElements, ids, chunkFJDZ7AEE_js.generateElementId());
|
|
6168
6168
|
if (groupId === null) {
|
|
6169
6169
|
return;
|
|
6170
6170
|
}
|
|
@@ -6177,11 +6177,11 @@ function useGroupAlignLayerHandlers(input) {
|
|
|
6177
6177
|
return;
|
|
6178
6178
|
}
|
|
6179
6179
|
const group = selectedElement;
|
|
6180
|
-
const intoTemplate =
|
|
6180
|
+
const intoTemplate = chunkFJDZ7AEE_js.isTemplateElementId(group.id);
|
|
6181
6181
|
const childIds = group.children.map(
|
|
6182
|
-
(child) => intoTemplate ?
|
|
6182
|
+
(child) => intoTemplate ? chunkFJDZ7AEE_js.makeCloneId(true, child.id || group.id) : child.id || chunkFJDZ7AEE_js.generateElementId()
|
|
6183
6183
|
);
|
|
6184
|
-
const { elements, childIds: usedIds } =
|
|
6184
|
+
const { elements, childIds: usedIds } = chunkFJDZ7AEE_js.ungroupElements(
|
|
6185
6185
|
ops.activeElements,
|
|
6186
6186
|
group.id,
|
|
6187
6187
|
childIds,
|
|
@@ -6210,7 +6210,7 @@ function useGroupAlignLayerHandlers(input) {
|
|
|
6210
6210
|
if (!edge) {
|
|
6211
6211
|
return;
|
|
6212
6212
|
}
|
|
6213
|
-
const positions =
|
|
6213
|
+
const positions = chunkFJDZ7AEE_js.alignElements(selectedElements, edge);
|
|
6214
6214
|
for (const [id, pos] of positions) {
|
|
6215
6215
|
const el = elementLookup.get(id);
|
|
6216
6216
|
if (!el) {
|
|
@@ -6228,7 +6228,7 @@ function useGroupAlignLayerHandlers(input) {
|
|
|
6228
6228
|
if (!distAxis) {
|
|
6229
6229
|
return;
|
|
6230
6230
|
}
|
|
6231
|
-
const positions =
|
|
6231
|
+
const positions = chunkFJDZ7AEE_js.distributeElements(selectedElements, distAxis);
|
|
6232
6232
|
for (const [id, pos] of positions) {
|
|
6233
6233
|
const el = elementLookup.get(id);
|
|
6234
6234
|
if (!el) {
|
|
@@ -6245,7 +6245,7 @@ function useGroupAlignLayerHandlers(input) {
|
|
|
6245
6245
|
}
|
|
6246
6246
|
const id = selectedElement.id;
|
|
6247
6247
|
ops.updateActiveElements(
|
|
6248
|
-
(els) => direction === "forward" ?
|
|
6248
|
+
(els) => direction === "forward" ? chunkFJDZ7AEE_js.bringForward(els, id) : direction === "backward" ? chunkFJDZ7AEE_js.sendBackward(els, id) : els
|
|
6249
6249
|
);
|
|
6250
6250
|
history.markDirty();
|
|
6251
6251
|
};
|
|
@@ -6255,7 +6255,7 @@ function useGroupAlignLayerHandlers(input) {
|
|
|
6255
6255
|
}
|
|
6256
6256
|
const id = selectedElement.id;
|
|
6257
6257
|
ops.updateActiveElements(
|
|
6258
|
-
(els) => direction === "front" ?
|
|
6258
|
+
(els) => direction === "front" ? chunkFJDZ7AEE_js.bringToFront(els, id) : chunkFJDZ7AEE_js.sendToBack(els, id)
|
|
6259
6259
|
);
|
|
6260
6260
|
history.markDirty();
|
|
6261
6261
|
};
|
|
@@ -6386,7 +6386,7 @@ function useSlideManagement(input) {
|
|
|
6386
6386
|
theme
|
|
6387
6387
|
} = input;
|
|
6388
6388
|
const handleAddSlide = () => {
|
|
6389
|
-
const newSlide =
|
|
6389
|
+
const newSlide = chunkFJDZ7AEE_js.createBlankSlide(slides.length + 1);
|
|
6390
6390
|
ops.updateSlides((prev) => {
|
|
6391
6391
|
const next = [...prev];
|
|
6392
6392
|
next.splice(activeSlideIndex + 1, 0, newSlide);
|
|
@@ -6449,7 +6449,7 @@ function useSlideManagement(input) {
|
|
|
6449
6449
|
}
|
|
6450
6450
|
const clone = {
|
|
6451
6451
|
...src,
|
|
6452
|
-
id:
|
|
6452
|
+
id: chunkFJDZ7AEE_js.makeSlideId(),
|
|
6453
6453
|
elements: src.elements.map((el) => ({
|
|
6454
6454
|
...el,
|
|
6455
6455
|
id: `${el.id}-dup-${Math.random().toString(36).slice(2, 6)}`
|
|
@@ -6481,7 +6481,7 @@ function useSlideManagement(input) {
|
|
|
6481
6481
|
const handleInsertSlideFromLayout = (layoutPath, layoutName) => {
|
|
6482
6482
|
const insertAt = activeSlideIndex + 1;
|
|
6483
6483
|
const draft = {
|
|
6484
|
-
...
|
|
6484
|
+
...chunkFJDZ7AEE_js.createBlankSlide(slides.length + 1),
|
|
6485
6485
|
layoutPath,
|
|
6486
6486
|
...layoutName ? { layoutName } : {}
|
|
6487
6487
|
};
|
|
@@ -6514,9 +6514,9 @@ function useSlideManagement(input) {
|
|
|
6514
6514
|
};
|
|
6515
6515
|
const handleInsertSlideFromTemplate = (templateId) => {
|
|
6516
6516
|
const insertAt = activeSlideIndex + 1;
|
|
6517
|
-
const draft =
|
|
6517
|
+
const draft = chunkFJDZ7AEE_js.buildSlideTemplateSlide(templateId, chunkFJDZ7AEE_js.makeSlideId(), slides.length + 1, {
|
|
6518
6518
|
...canvasSize ? { slideWidth: canvasSize.width, slideHeight: canvasSize.height } : {},
|
|
6519
|
-
scheme:
|
|
6519
|
+
scheme: chunkFJDZ7AEE_js.templateSchemeFromTheme(theme?.colorScheme)
|
|
6520
6520
|
});
|
|
6521
6521
|
ops.updateSlides((prev) => insertSlideFromLayoutUpdater(prev, activeSlideIndex, draft));
|
|
6522
6522
|
setActiveSlideIndex(insertAt);
|
|
@@ -6553,7 +6553,7 @@ function createTableMergeHandlers(input) {
|
|
|
6553
6553
|
if (!nextCell || nextCell.hMerge || nextCell.vMerge) {
|
|
6554
6554
|
return;
|
|
6555
6555
|
}
|
|
6556
|
-
const newTableData =
|
|
6556
|
+
const newTableData = chunkFJDZ7AEE_js.mergeCells(
|
|
6557
6557
|
[
|
|
6558
6558
|
{ row: rowIndex, col: columnIndex },
|
|
6559
6559
|
{ row: rowIndex, col: nextColIdx }
|
|
@@ -6561,7 +6561,7 @@ function createTableMergeHandlers(input) {
|
|
|
6561
6561
|
td
|
|
6562
6562
|
);
|
|
6563
6563
|
const updates = { tableData: newTableData };
|
|
6564
|
-
const newRawXml =
|
|
6564
|
+
const newRawXml = chunkFJDZ7AEE_js.updateMergeAttrsInRawXml(selectedElement, newTableData);
|
|
6565
6565
|
if (newRawXml) {
|
|
6566
6566
|
updates.rawXml = newRawXml;
|
|
6567
6567
|
}
|
|
@@ -6587,7 +6587,7 @@ function createTableMergeHandlers(input) {
|
|
|
6587
6587
|
if (!targetNextCell || targetNextCell.hMerge || targetNextCell.vMerge) {
|
|
6588
6588
|
return;
|
|
6589
6589
|
}
|
|
6590
|
-
const newTableData =
|
|
6590
|
+
const newTableData = chunkFJDZ7AEE_js.mergeCells(
|
|
6591
6591
|
[
|
|
6592
6592
|
{ row: rowIndex, col: columnIndex },
|
|
6593
6593
|
{ row: targetNextRowIdx, col: columnIndex }
|
|
@@ -6595,7 +6595,7 @@ function createTableMergeHandlers(input) {
|
|
|
6595
6595
|
td
|
|
6596
6596
|
);
|
|
6597
6597
|
const updates = { tableData: newTableData };
|
|
6598
|
-
const newRawXml =
|
|
6598
|
+
const newRawXml = chunkFJDZ7AEE_js.updateMergeAttrsInRawXml(selectedElement, newTableData);
|
|
6599
6599
|
if (newRawXml) {
|
|
6600
6600
|
updates.rawXml = newRawXml;
|
|
6601
6601
|
}
|
|
@@ -6610,9 +6610,9 @@ function createTableMergeHandlers(input) {
|
|
|
6610
6610
|
return;
|
|
6611
6611
|
}
|
|
6612
6612
|
const td = selectedElement.tableData;
|
|
6613
|
-
const newTableData =
|
|
6613
|
+
const newTableData = chunkFJDZ7AEE_js.mergeCells(ts.selectedCells, td);
|
|
6614
6614
|
const updates = { tableData: newTableData };
|
|
6615
|
-
const newRawXml =
|
|
6615
|
+
const newRawXml = chunkFJDZ7AEE_js.updateMergeAttrsInRawXml(selectedElement, newTableData);
|
|
6616
6616
|
if (newRawXml) {
|
|
6617
6617
|
updates.rawXml = newRawXml;
|
|
6618
6618
|
}
|
|
@@ -6629,9 +6629,9 @@ function createTableMergeHandlers(input) {
|
|
|
6629
6629
|
}
|
|
6630
6630
|
const { rowIndex, columnIndex } = ts;
|
|
6631
6631
|
const td = selectedElement.tableData;
|
|
6632
|
-
const newTableData =
|
|
6632
|
+
const newTableData = chunkFJDZ7AEE_js.splitCell(rowIndex, columnIndex, td);
|
|
6633
6633
|
const updates = { tableData: newTableData };
|
|
6634
|
-
const newRawXml =
|
|
6634
|
+
const newRawXml = chunkFJDZ7AEE_js.updateMergeAttrsInRawXml(selectedElement, newTableData);
|
|
6635
6635
|
if (newRawXml) {
|
|
6636
6636
|
updates.rawXml = newRawXml;
|
|
6637
6637
|
}
|
|
@@ -6665,10 +6665,10 @@ function createTableStructHandlers(input) {
|
|
|
6665
6665
|
const text = transformCommittedText ? transformCommittedText(rawText) : rawText;
|
|
6666
6666
|
const updates = {};
|
|
6667
6667
|
if (el.tableData) {
|
|
6668
|
-
updates.tableData =
|
|
6668
|
+
updates.tableData = chunkFJDZ7AEE_js.setCellText(el, rowIndex, colIndex, text).tableData;
|
|
6669
6669
|
}
|
|
6670
6670
|
if (el.rawXml) {
|
|
6671
|
-
const newRawXml =
|
|
6671
|
+
const newRawXml = chunkFJDZ7AEE_js.updateCellTextInRawXml(el, rowIndex, colIndex, text);
|
|
6672
6672
|
if (newRawXml) {
|
|
6673
6673
|
updates.rawXml = newRawXml;
|
|
6674
6674
|
}
|
|
@@ -6692,7 +6692,7 @@ function createTableStructHandlers(input) {
|
|
|
6692
6692
|
const { rowIndex, columnIndex: colIndex } = ts;
|
|
6693
6693
|
const updates = {};
|
|
6694
6694
|
if (selectedElement.rawXml) {
|
|
6695
|
-
const newRawXml =
|
|
6695
|
+
const newRawXml = chunkFJDZ7AEE_js.updateCellTextStyleInRawXml(
|
|
6696
6696
|
selectedElement,
|
|
6697
6697
|
rowIndex,
|
|
6698
6698
|
colIndex,
|
|
@@ -6756,9 +6756,9 @@ function createTableStructHandlers(input) {
|
|
|
6756
6756
|
return;
|
|
6757
6757
|
}
|
|
6758
6758
|
const rowIdx = ts?.rowIndex ?? 0;
|
|
6759
|
-
const newTableData =
|
|
6759
|
+
const newTableData = chunkFJDZ7AEE_js.insertTableRow(selectedElement.tableData, rowIdx, position);
|
|
6760
6760
|
const updates = { tableData: newTableData };
|
|
6761
|
-
const newRawXml =
|
|
6761
|
+
const newRawXml = chunkFJDZ7AEE_js.rebuildTableStructureInRawXml(selectedElement, newTableData);
|
|
6762
6762
|
if (newRawXml) {
|
|
6763
6763
|
updates.rawXml = newRawXml;
|
|
6764
6764
|
}
|
|
@@ -6771,12 +6771,12 @@ function createTableStructHandlers(input) {
|
|
|
6771
6771
|
}
|
|
6772
6772
|
const td = selectedElement.tableData;
|
|
6773
6773
|
const rowIdx = ts?.rowIndex ?? 0;
|
|
6774
|
-
const newTableData =
|
|
6774
|
+
const newTableData = chunkFJDZ7AEE_js.deleteTableRow(td, rowIdx);
|
|
6775
6775
|
if (newTableData === td) {
|
|
6776
6776
|
return;
|
|
6777
6777
|
}
|
|
6778
6778
|
const updates = { tableData: newTableData };
|
|
6779
|
-
const newRawXml =
|
|
6779
|
+
const newRawXml = chunkFJDZ7AEE_js.rebuildTableStructureInRawXml(selectedElement, newTableData);
|
|
6780
6780
|
if (newRawXml) {
|
|
6781
6781
|
updates.rawXml = newRawXml;
|
|
6782
6782
|
}
|
|
@@ -6788,9 +6788,9 @@ function createTableStructHandlers(input) {
|
|
|
6788
6788
|
return;
|
|
6789
6789
|
}
|
|
6790
6790
|
const colIdx = ts?.columnIndex ?? 0;
|
|
6791
|
-
const newTableData =
|
|
6791
|
+
const newTableData = chunkFJDZ7AEE_js.insertTableColumn(selectedElement.tableData, colIdx, position);
|
|
6792
6792
|
const updates = { tableData: newTableData };
|
|
6793
|
-
const newRawXml =
|
|
6793
|
+
const newRawXml = chunkFJDZ7AEE_js.rebuildTableStructureInRawXml(selectedElement, newTableData);
|
|
6794
6794
|
if (newRawXml) {
|
|
6795
6795
|
updates.rawXml = newRawXml;
|
|
6796
6796
|
}
|
|
@@ -6803,12 +6803,12 @@ function createTableStructHandlers(input) {
|
|
|
6803
6803
|
}
|
|
6804
6804
|
const td = selectedElement.tableData;
|
|
6805
6805
|
const colIdx = ts?.columnIndex ?? 0;
|
|
6806
|
-
const newTableData =
|
|
6806
|
+
const newTableData = chunkFJDZ7AEE_js.deleteTableColumn(td, colIdx);
|
|
6807
6807
|
if (newTableData === td) {
|
|
6808
6808
|
return;
|
|
6809
6809
|
}
|
|
6810
6810
|
const updates = { tableData: newTableData };
|
|
6811
|
-
const newRawXml =
|
|
6811
|
+
const newRawXml = chunkFJDZ7AEE_js.rebuildTableStructureInRawXml(selectedElement, newTableData);
|
|
6812
6812
|
if (newRawXml) {
|
|
6813
6813
|
updates.rawXml = newRawXml;
|
|
6814
6814
|
}
|
|
@@ -6844,8 +6844,8 @@ async function renderToCanvas(element, options = {}) {
|
|
|
6844
6844
|
return html2canvasPro(element, {
|
|
6845
6845
|
...options,
|
|
6846
6846
|
onclone: async (doc, clonedEl) => {
|
|
6847
|
-
await
|
|
6848
|
-
|
|
6847
|
+
await chunkFJDZ7AEE_js.normalizeColorsForCapture(doc, clonedEl);
|
|
6848
|
+
chunkFJDZ7AEE_js.preprocessCssForCapture(clonedEl);
|
|
6849
6849
|
if (typeof userOnClone === "function") {
|
|
6850
6850
|
userOnClone(doc, clonedEl);
|
|
6851
6851
|
}
|
|
@@ -6883,13 +6883,13 @@ function useExportSaveAs(input) {
|
|
|
6883
6883
|
if (!handler) {
|
|
6884
6884
|
return;
|
|
6885
6885
|
}
|
|
6886
|
-
const downloadName =
|
|
6886
|
+
const downloadName = chunkFJDZ7AEE_js.savedPresentationFileName(filePath, format);
|
|
6887
6887
|
try {
|
|
6888
6888
|
const data = await buildSaveAsData(handler, format);
|
|
6889
6889
|
const blob = new Blob([data], {
|
|
6890
6890
|
type: "application/vnd.openxmlformats-officedocument.presentationml.presentation"
|
|
6891
6891
|
});
|
|
6892
|
-
|
|
6892
|
+
chunkFJDZ7AEE_js.downloadBlob(blob, downloadName);
|
|
6893
6893
|
} catch (err) {
|
|
6894
6894
|
console.error(`[PowerPointViewer] Save as .${format} failed:`, err);
|
|
6895
6895
|
}
|
|
@@ -6902,18 +6902,18 @@ function useExportSaveAs(input) {
|
|
|
6902
6902
|
const pptxGuides = guides.map((g) => ({
|
|
6903
6903
|
id: g.id,
|
|
6904
6904
|
orientation: g.axis === "h" ? "horz" : "vert",
|
|
6905
|
-
positionEmu:
|
|
6905
|
+
positionEmu: chunkFJDZ7AEE_js.guidePxToEmu(g.position)
|
|
6906
6906
|
}));
|
|
6907
6907
|
return {
|
|
6908
6908
|
...slide,
|
|
6909
6909
|
guides: pptxGuides.length > 0 ? pptxGuides : void 0
|
|
6910
6910
|
};
|
|
6911
6911
|
});
|
|
6912
|
-
const slidesToSave =
|
|
6912
|
+
const slidesToSave = chunkFJDZ7AEE_js.buildSaveSlides(slidesWithGuides, templateElementsBySlideId);
|
|
6913
6913
|
const saveOptions = {
|
|
6914
6914
|
// Save As shares Save's slide-size decision; leaving it out here is how
|
|
6915
6915
|
// a preset picked in the inspector reached one save path and not the other.
|
|
6916
|
-
slideSize:
|
|
6916
|
+
slideSize: chunkFJDZ7AEE_js.resolveSlideSizeSelection({ current: slideSizeEmu, canvas: canvasSize }).size,
|
|
6917
6917
|
headerFooter,
|
|
6918
6918
|
presentationProperties,
|
|
6919
6919
|
customShows: customShows.length > 0 ? customShows : void 0,
|
|
@@ -6927,13 +6927,13 @@ function useExportSaveAs(input) {
|
|
|
6927
6927
|
handoutMaster,
|
|
6928
6928
|
outputFormat: format
|
|
6929
6929
|
};
|
|
6930
|
-
return
|
|
6930
|
+
return chunkFJDZ7AEE_js.saveDeckWithPassword(handler, slidesToSave, saveOptions, password);
|
|
6931
6931
|
};
|
|
6932
6932
|
const handleExportJson = () => {
|
|
6933
6933
|
const sourceName = filePath ? filePath.replace(/\\/gu, "/").split("/").pop() : void 0;
|
|
6934
|
-
const slideSize =
|
|
6934
|
+
const slideSize = chunkFJDZ7AEE_js.resolveSlideSizeSelection({ current: slideSizeEmu, canvas: canvasSize }).size;
|
|
6935
6935
|
const data = {
|
|
6936
|
-
slides:
|
|
6936
|
+
slides: chunkFJDZ7AEE_js.buildSaveSlides(slides, templateElementsBySlideId),
|
|
6937
6937
|
width: canvasSize.width,
|
|
6938
6938
|
height: canvasSize.height,
|
|
6939
6939
|
widthEmu: slideSize.widthEmu,
|
|
@@ -6952,7 +6952,7 @@ function useExportSaveAs(input) {
|
|
|
6952
6952
|
handoutMaster
|
|
6953
6953
|
};
|
|
6954
6954
|
try {
|
|
6955
|
-
|
|
6955
|
+
chunkFJDZ7AEE_js.exportDeckJson(data, sourceName);
|
|
6956
6956
|
} catch (err) {
|
|
6957
6957
|
console.error("[PowerPointViewer] JSON export failed:", err);
|
|
6958
6958
|
}
|
|
@@ -7039,7 +7039,7 @@ async function exportSlideToPngBlob(slideElement, options = {}) {
|
|
|
7039
7039
|
}
|
|
7040
7040
|
async function exportSlideAsPng(slideElement, slideIndex, options = {}) {
|
|
7041
7041
|
const blob = await exportSlideToPngBlob(slideElement, options);
|
|
7042
|
-
|
|
7042
|
+
chunkFJDZ7AEE_js.downloadBlob(blob, `slide-${slideIndex + 1}.png`);
|
|
7043
7043
|
}
|
|
7044
7044
|
async function copySlideToClipboard(slideElement, options = {}) {
|
|
7045
7045
|
const blob = await exportSlideToPngBlob(slideElement, options);
|
|
@@ -7061,15 +7061,15 @@ async function exportAllSlidesAsPdf(slideStageRef, totalSlides, setActiveSlide,
|
|
|
7061
7061
|
continue;
|
|
7062
7062
|
}
|
|
7063
7063
|
const canvas = await renderElementToCanvas(stageEl, scale);
|
|
7064
|
-
images.push(
|
|
7064
|
+
images.push(chunkFJDZ7AEE_js.canvasToJpegData(canvas));
|
|
7065
7065
|
}
|
|
7066
7066
|
onProgress?.(totalSlides, totalSlides);
|
|
7067
7067
|
setActiveSlide(currentSlideIndex);
|
|
7068
7068
|
if (images.length === 0) {
|
|
7069
|
-
throw new Error(
|
|
7069
|
+
throw new Error(chunkALO4ZOHQ_js.translationsEn["pptx.export.errorNoSlidesPdf"]);
|
|
7070
7070
|
}
|
|
7071
|
-
const pdfBlobUrl =
|
|
7072
|
-
|
|
7071
|
+
const pdfBlobUrl = chunkB6UIVRFA_js.buildPdfFromImageData(images);
|
|
7072
|
+
chunkFJDZ7AEE_js.downloadDataUrl(pdfBlobUrl, filename);
|
|
7073
7073
|
}
|
|
7074
7074
|
async function captureAllSlidesAsPngDataUrls(slideStageRef, totalSlides, setActiveSlide, currentSlideIndex, options = {}) {
|
|
7075
7075
|
const { scale = 2, onProgress } = options;
|
|
@@ -7115,10 +7115,10 @@ async function exportAllSlidesAsNotesPdf(slideStageRef, totalSlides, setActiveSl
|
|
|
7115
7115
|
onProgress?.(totalSlides, totalSlides);
|
|
7116
7116
|
setActiveSlide(currentSlideIndex);
|
|
7117
7117
|
if (pages.length === 0) {
|
|
7118
|
-
throw new Error(
|
|
7118
|
+
throw new Error(chunkALO4ZOHQ_js.translationsEn["pptx.export.errorNoSlidesNotesPdf"]);
|
|
7119
7119
|
}
|
|
7120
|
-
const pdfDataUrl =
|
|
7121
|
-
|
|
7120
|
+
const pdfDataUrl = chunkB6UIVRFA_js.buildNotesPdf(pages);
|
|
7121
|
+
chunkFJDZ7AEE_js.downloadDataUrl(pdfDataUrl, filename);
|
|
7122
7122
|
}
|
|
7123
7123
|
|
|
7124
7124
|
// src/viewer/utils/export-video.ts
|
|
@@ -7149,7 +7149,7 @@ async function exportAllSlidesAsVideo(slideStageRef, totalSlides, setActiveSlide
|
|
|
7149
7149
|
}
|
|
7150
7150
|
setActiveSlide(currentSlideIndex);
|
|
7151
7151
|
if (slideCanvases.length === 0) {
|
|
7152
|
-
throw new Error(
|
|
7152
|
+
throw new Error(chunkALO4ZOHQ_js.translationsEn["pptx.export.errorNoSlidesVideo"]);
|
|
7153
7153
|
}
|
|
7154
7154
|
const firstCanvas = slideCanvases[0];
|
|
7155
7155
|
const recordingCanvas = document.createElement("canvas");
|
|
@@ -7157,12 +7157,12 @@ async function exportAllSlidesAsVideo(slideStageRef, totalSlides, setActiveSlide
|
|
|
7157
7157
|
recordingCanvas.height = firstCanvas.height;
|
|
7158
7158
|
const ctx = recordingCanvas.getContext("2d");
|
|
7159
7159
|
if (!ctx) {
|
|
7160
|
-
throw new Error(
|
|
7160
|
+
throw new Error(chunkALO4ZOHQ_js.translationsEn["pptx.export.errorNo2dContext"]);
|
|
7161
7161
|
}
|
|
7162
7162
|
const fps = 30;
|
|
7163
7163
|
const stream = recordingCanvas.captureStream(fps);
|
|
7164
7164
|
const recorder = new MediaRecorder(stream, {
|
|
7165
|
-
mimeType:
|
|
7165
|
+
mimeType: chunkFJDZ7AEE_js.pickSupportedMimeType([...chunkFJDZ7AEE_js.WEBM_MIME_CANDIDATES]),
|
|
7166
7166
|
videoBitsPerSecond: 5e6
|
|
7167
7167
|
});
|
|
7168
7168
|
const chunks = [];
|
|
@@ -7185,8 +7185,8 @@ async function exportAllSlidesAsVideo(slideStageRef, totalSlides, setActiveSlide
|
|
|
7185
7185
|
const duration = slideTimingsMs?.[i] ?? slideDurationMs;
|
|
7186
7186
|
ctx.clearRect(0, 0, recordingCanvas.width, recordingCanvas.height);
|
|
7187
7187
|
ctx.drawImage(slideCanvases[i], 0, 0);
|
|
7188
|
-
const frameInterval =
|
|
7189
|
-
const framesNeeded =
|
|
7188
|
+
const frameInterval = chunkFJDZ7AEE_js.fpsToFrameIntervalMs(fps);
|
|
7189
|
+
const framesNeeded = chunkFJDZ7AEE_js.segmentFrameCount(duration, fps);
|
|
7190
7190
|
for (let f = 0; f < framesNeeded; f++) {
|
|
7191
7191
|
if (signal?.aborted) {
|
|
7192
7192
|
recorder.stop();
|
|
@@ -7233,9 +7233,9 @@ async function exportAllSlidesAsGif(slideStageRef, totalSlides, setActiveSlide,
|
|
|
7233
7233
|
}
|
|
7234
7234
|
setActiveSlide(currentSlideIndex);
|
|
7235
7235
|
if (frames.length === 0) {
|
|
7236
|
-
throw new Error(
|
|
7236
|
+
throw new Error(chunkALO4ZOHQ_js.translationsEn["pptx.export.errorNoSlidesGif"]);
|
|
7237
7237
|
}
|
|
7238
|
-
const gifBytes =
|
|
7238
|
+
const gifBytes = chunkFJDZ7AEE_js.encodeGif(frames, Math.round(slideDurationMs / 10));
|
|
7239
7239
|
onProgress?.(totalSlides, totalSlides);
|
|
7240
7240
|
const buf = new ArrayBuffer(gifBytes.length);
|
|
7241
7241
|
new Uint8Array(buf).set(gifBytes);
|
|
@@ -7289,7 +7289,7 @@ function exportAllSlidesToSvg(data, options = {}) {
|
|
|
7289
7289
|
continue;
|
|
7290
7290
|
}
|
|
7291
7291
|
onProgress?.(processedCount, data.slides.length);
|
|
7292
|
-
let svg =
|
|
7292
|
+
let svg = chunkFJDZ7AEE_js.SvgExporter.exportSlide(slide, data.width, data.height, svgOptions);
|
|
7293
7293
|
if (embedFonts && fontFaces?.length) {
|
|
7294
7294
|
svg = injectFontFaces(svg, fontFaces);
|
|
7295
7295
|
}
|
|
@@ -7398,21 +7398,21 @@ function useExportHandlers(input) {
|
|
|
7398
7398
|
{
|
|
7399
7399
|
scale: imageExportScale,
|
|
7400
7400
|
onProgress: (current, total) => {
|
|
7401
|
-
setExportProgress(
|
|
7402
|
-
setExportStatusMessage(
|
|
7401
|
+
setExportProgress(chunkFJDZ7AEE_js.slideProgressPercent(current, total));
|
|
7402
|
+
setExportStatusMessage(chunkFJDZ7AEE_js.slideStatusLabel("Rendering", current, total));
|
|
7403
7403
|
},
|
|
7404
7404
|
signal: abortCtrl.signal
|
|
7405
7405
|
}
|
|
7406
7406
|
);
|
|
7407
|
-
setExportProgress(
|
|
7407
|
+
setExportProgress(chunkFJDZ7AEE_js.EXPORT_ASSEMBLING_PERCENT);
|
|
7408
7408
|
setExportStatusMessage("Building PDF...");
|
|
7409
7409
|
await new Promise((r) => {
|
|
7410
7410
|
setTimeout(r, 100);
|
|
7411
7411
|
});
|
|
7412
|
-
setExportProgress(
|
|
7412
|
+
setExportProgress(chunkFJDZ7AEE_js.EXPORT_DONE_PERCENT);
|
|
7413
7413
|
setExportStatusMessage("Done!");
|
|
7414
7414
|
} catch (err) {
|
|
7415
|
-
if (!
|
|
7415
|
+
if (!chunkFJDZ7AEE_js.isExportAbortError(err)) {
|
|
7416
7416
|
console.error("[PowerPointViewer] PDF export failed:", err);
|
|
7417
7417
|
}
|
|
7418
7418
|
} finally {
|
|
@@ -7442,21 +7442,21 @@ function useExportHandlers(input) {
|
|
|
7442
7442
|
{
|
|
7443
7443
|
scale: imageExportScale,
|
|
7444
7444
|
onProgress: (current, total) => {
|
|
7445
|
-
setExportProgress(
|
|
7446
|
-
setExportStatusMessage(
|
|
7445
|
+
setExportProgress(chunkFJDZ7AEE_js.slideProgressPercent(current, total));
|
|
7446
|
+
setExportStatusMessage(chunkFJDZ7AEE_js.slideStatusLabel("Rendering", current, total));
|
|
7447
7447
|
},
|
|
7448
7448
|
signal: abortCtrl.signal
|
|
7449
7449
|
}
|
|
7450
7450
|
);
|
|
7451
|
-
setExportProgress(
|
|
7451
|
+
setExportProgress(chunkFJDZ7AEE_js.EXPORT_ASSEMBLING_PERCENT);
|
|
7452
7452
|
setExportStatusMessage("Building PDF...");
|
|
7453
7453
|
await new Promise((r) => {
|
|
7454
7454
|
setTimeout(r, 100);
|
|
7455
7455
|
});
|
|
7456
|
-
setExportProgress(
|
|
7456
|
+
setExportProgress(chunkFJDZ7AEE_js.EXPORT_DONE_PERCENT);
|
|
7457
7457
|
setExportStatusMessage("Done!");
|
|
7458
7458
|
} catch (err) {
|
|
7459
|
-
if (!
|
|
7459
|
+
if (!chunkFJDZ7AEE_js.isExportAbortError(err)) {
|
|
7460
7460
|
console.error("[PowerPointViewer] Notes PDF export failed:", err);
|
|
7461
7461
|
}
|
|
7462
7462
|
} finally {
|
|
@@ -7498,22 +7498,22 @@ function useExportHandlers(input) {
|
|
|
7498
7498
|
scale: 1,
|
|
7499
7499
|
slideDurationMs: 3e3,
|
|
7500
7500
|
onProgress: (current, total) => {
|
|
7501
|
-
setExportProgress(
|
|
7502
|
-
setExportStatusMessage(
|
|
7501
|
+
setExportProgress(chunkFJDZ7AEE_js.slideProgressPercent(current, total, 45));
|
|
7502
|
+
setExportStatusMessage(chunkFJDZ7AEE_js.slideStatusLabel("Capturing", current, total));
|
|
7503
7503
|
},
|
|
7504
7504
|
onRecordProgress: (current, total) => {
|
|
7505
|
-
setExportProgress(
|
|
7506
|
-
setExportStatusMessage(
|
|
7505
|
+
setExportProgress(chunkFJDZ7AEE_js.recordProgressPercent(current, total));
|
|
7506
|
+
setExportStatusMessage(chunkFJDZ7AEE_js.slideStatusLabel("Recording", current, total));
|
|
7507
7507
|
},
|
|
7508
7508
|
signal: abortCtrl.signal
|
|
7509
7509
|
}
|
|
7510
7510
|
);
|
|
7511
|
-
setExportProgress(
|
|
7511
|
+
setExportProgress(chunkFJDZ7AEE_js.EXPORT_ASSEMBLING_PERCENT);
|
|
7512
7512
|
setExportStatusMessage("Saving file...");
|
|
7513
|
-
|
|
7514
|
-
setExportProgress(
|
|
7513
|
+
chunkFJDZ7AEE_js.downloadBlob(blob, "presentation.webm");
|
|
7514
|
+
setExportProgress(chunkFJDZ7AEE_js.EXPORT_DONE_PERCENT);
|
|
7515
7515
|
} catch (err) {
|
|
7516
|
-
if (!
|
|
7516
|
+
if (!chunkFJDZ7AEE_js.isExportAbortError(err)) {
|
|
7517
7517
|
console.error("[PowerPointViewer] Video export failed:", err);
|
|
7518
7518
|
}
|
|
7519
7519
|
} finally {
|
|
@@ -7541,18 +7541,18 @@ function useExportHandlers(input) {
|
|
|
7541
7541
|
scale: 0.5,
|
|
7542
7542
|
slideDurationMs: 2e3,
|
|
7543
7543
|
onProgress: (current, total) => {
|
|
7544
|
-
setExportProgress(
|
|
7545
|
-
setExportStatusMessage(
|
|
7544
|
+
setExportProgress(chunkFJDZ7AEE_js.slideProgressPercent(current, total));
|
|
7545
|
+
setExportStatusMessage(chunkFJDZ7AEE_js.slideStatusLabel("Encoding", current, total));
|
|
7546
7546
|
},
|
|
7547
7547
|
signal: abortCtrl.signal
|
|
7548
7548
|
}
|
|
7549
7549
|
);
|
|
7550
|
-
setExportProgress(
|
|
7550
|
+
setExportProgress(chunkFJDZ7AEE_js.EXPORT_ASSEMBLING_PERCENT);
|
|
7551
7551
|
setExportStatusMessage("Saving file...");
|
|
7552
|
-
|
|
7553
|
-
setExportProgress(
|
|
7552
|
+
chunkFJDZ7AEE_js.downloadBlob(blob, "presentation.gif");
|
|
7553
|
+
setExportProgress(chunkFJDZ7AEE_js.EXPORT_DONE_PERCENT);
|
|
7554
7554
|
} catch (err) {
|
|
7555
|
-
if (!
|
|
7555
|
+
if (!chunkFJDZ7AEE_js.isExportAbortError(err)) {
|
|
7556
7556
|
console.error("[PowerPointViewer] GIF export failed:", err);
|
|
7557
7557
|
}
|
|
7558
7558
|
} finally {
|
|
@@ -7585,7 +7585,7 @@ function useExportHandlers(input) {
|
|
|
7585
7585
|
exportStatusMessage
|
|
7586
7586
|
};
|
|
7587
7587
|
}
|
|
7588
|
-
var ViewerOptionsContext = react.createContext(
|
|
7588
|
+
var ViewerOptionsContext = react.createContext(chunkFJDZ7AEE_js.DEFAULT_VIEWER_OPTIONS);
|
|
7589
7589
|
function useViewerOptionsContext() {
|
|
7590
7590
|
return react.useContext(ViewerOptionsContext);
|
|
7591
7591
|
}
|
|
@@ -7597,13 +7597,13 @@ function usePrintHandlers(input) {
|
|
|
7597
7597
|
const { t } = reactI18next.useTranslation();
|
|
7598
7598
|
const viewerOptions = useViewerOptionsContext();
|
|
7599
7599
|
const includeHiddenSlides = viewerOptions.advanced.printHiddenSlides;
|
|
7600
|
-
const printRasterScale = (viewerOptions.advanced.printHighQuality ? 4 : 3) *
|
|
7600
|
+
const printRasterScale = (viewerOptions.advanced.printHighQuality ? 4 : 3) * chunkFJDZ7AEE_js.resolveImageResolutionScale(viewerOptions);
|
|
7601
7601
|
const handlePrint = () => {
|
|
7602
7602
|
setIsPrintDialogOpen(true);
|
|
7603
7603
|
};
|
|
7604
7604
|
const handlePrintSvg = async (settings) => {
|
|
7605
7605
|
setIsPrintDialogOpen(false);
|
|
7606
|
-
const printWindow =
|
|
7606
|
+
const printWindow = chunkFJDZ7AEE_js.openPendingPrintWindow(t("pptx.print.preparingToPrint"));
|
|
7607
7607
|
if (!printWindow) {
|
|
7608
7608
|
console.warn(
|
|
7609
7609
|
"[PowerPointViewer] Print window was blocked by the browser. Allow popups for this site to print."
|
|
@@ -7613,9 +7613,9 @@ function usePrintHandlers(input) {
|
|
|
7613
7613
|
if (!pptxData || settings.printWhat !== "slides") {
|
|
7614
7614
|
return runRasterPrint(printWindow, settings);
|
|
7615
7615
|
}
|
|
7616
|
-
const colorFilter =
|
|
7617
|
-
const slideIndices =
|
|
7618
|
-
|
|
7616
|
+
const colorFilter = chunkFJDZ7AEE_js.computeColorFilter(settings.colorMode);
|
|
7617
|
+
const slideIndices = chunkFJDZ7AEE_js.filterHiddenSlideIndices(
|
|
7618
|
+
chunkFJDZ7AEE_js.computeSlideIndices(
|
|
7619
7619
|
settings.slideRange,
|
|
7620
7620
|
activeSlideIndex,
|
|
7621
7621
|
slides.length,
|
|
@@ -7633,22 +7633,22 @@ function usePrintHandlers(input) {
|
|
|
7633
7633
|
printWindow.close();
|
|
7634
7634
|
return;
|
|
7635
7635
|
}
|
|
7636
|
-
const printDoc =
|
|
7636
|
+
const printDoc = chunkFJDZ7AEE_js.buildPrintDocument(svgs, pptxData.width, pptxData.height, {
|
|
7637
7637
|
title: "Slides (Vector)",
|
|
7638
7638
|
orientation: settings.orientation,
|
|
7639
7639
|
colorFilter,
|
|
7640
7640
|
scaleToFit: settings.scaleToFit
|
|
7641
7641
|
});
|
|
7642
|
-
|
|
7642
|
+
chunkFJDZ7AEE_js.finishPrintWindow(printWindow, printDoc);
|
|
7643
7643
|
} catch (err) {
|
|
7644
7644
|
console.warn("[PowerPointViewer] SVG print path failed, falling back to raster:", err);
|
|
7645
7645
|
return runRasterPrint(printWindow, settings);
|
|
7646
7646
|
}
|
|
7647
7647
|
};
|
|
7648
7648
|
const runRasterPrint = async (printWindow, settings) => {
|
|
7649
|
-
const colorFilter =
|
|
7650
|
-
const slideIndices =
|
|
7651
|
-
|
|
7649
|
+
const colorFilter = chunkFJDZ7AEE_js.computeColorFilter(settings.colorMode);
|
|
7650
|
+
const slideIndices = chunkFJDZ7AEE_js.filterHiddenSlideIndices(
|
|
7651
|
+
chunkFJDZ7AEE_js.computeSlideIndices(
|
|
7652
7652
|
settings.slideRange,
|
|
7653
7653
|
activeSlideIndex,
|
|
7654
7654
|
slides.length,
|
|
@@ -7659,11 +7659,11 @@ function usePrintHandlers(input) {
|
|
|
7659
7659
|
includeHiddenSlides
|
|
7660
7660
|
);
|
|
7661
7661
|
if (settings.printWhat === "outline") {
|
|
7662
|
-
|
|
7662
|
+
chunkFJDZ7AEE_js.finishPrintWindow(
|
|
7663
7663
|
printWindow,
|
|
7664
|
-
|
|
7664
|
+
chunkFJDZ7AEE_js.buildPrintHtmlDocument({
|
|
7665
7665
|
title: "Outline",
|
|
7666
|
-
bodyHtml: `<div class="outline-page">${
|
|
7666
|
+
bodyHtml: `<div class="outline-page">${chunkFJDZ7AEE_js.buildOutlineHtml(slideIndices, slides)}</div>`,
|
|
7667
7667
|
orientation: settings.orientation,
|
|
7668
7668
|
colorFilter,
|
|
7669
7669
|
frameSlides: settings.frameSlides,
|
|
@@ -7690,11 +7690,11 @@ function usePrintHandlers(input) {
|
|
|
7690
7690
|
}
|
|
7691
7691
|
const slideImages = slideIndices.map((idx) => allImages[idx]).filter(Boolean);
|
|
7692
7692
|
if (settings.printWhat === "slides") {
|
|
7693
|
-
|
|
7693
|
+
chunkFJDZ7AEE_js.finishPrintWindow(
|
|
7694
7694
|
printWindow,
|
|
7695
|
-
|
|
7695
|
+
chunkFJDZ7AEE_js.buildPrintHtmlDocument({
|
|
7696
7696
|
title: "Slides",
|
|
7697
|
-
bodyHtml:
|
|
7697
|
+
bodyHtml: chunkFJDZ7AEE_js.buildSlidesHtml(slideImages, slideIndices),
|
|
7698
7698
|
orientation: settings.orientation,
|
|
7699
7699
|
colorFilter,
|
|
7700
7700
|
frameSlides: settings.frameSlides,
|
|
@@ -7704,11 +7704,11 @@ function usePrintHandlers(input) {
|
|
|
7704
7704
|
return;
|
|
7705
7705
|
}
|
|
7706
7706
|
if (settings.printWhat === "notes") {
|
|
7707
|
-
|
|
7707
|
+
chunkFJDZ7AEE_js.finishPrintWindow(
|
|
7708
7708
|
printWindow,
|
|
7709
|
-
|
|
7709
|
+
chunkFJDZ7AEE_js.buildPrintHtmlDocument({
|
|
7710
7710
|
title: "Notes Pages",
|
|
7711
|
-
bodyHtml:
|
|
7711
|
+
bodyHtml: chunkFJDZ7AEE_js.buildNotesHtml(slideImages, slideIndices, slides),
|
|
7712
7712
|
orientation: "portrait",
|
|
7713
7713
|
colorFilter,
|
|
7714
7714
|
frameSlides: settings.frameSlides,
|
|
@@ -7719,11 +7719,11 @@ function usePrintHandlers(input) {
|
|
|
7719
7719
|
}
|
|
7720
7720
|
if (settings.printWhat === "handouts") {
|
|
7721
7721
|
const spp = settings.slidesPerPage;
|
|
7722
|
-
|
|
7722
|
+
chunkFJDZ7AEE_js.finishPrintWindow(
|
|
7723
7723
|
printWindow,
|
|
7724
|
-
|
|
7724
|
+
chunkFJDZ7AEE_js.buildPrintHtmlDocument({
|
|
7725
7725
|
title: `Handout ${spp} per page`,
|
|
7726
|
-
bodyHtml:
|
|
7726
|
+
bodyHtml: chunkFJDZ7AEE_js.buildHandoutsHtml(slideImages, slideIndices, spp),
|
|
7727
7727
|
orientation: "portrait",
|
|
7728
7728
|
colorFilter,
|
|
7729
7729
|
frameSlides: settings.frameSlides,
|
|
@@ -7737,7 +7737,7 @@ function usePrintHandlers(input) {
|
|
|
7737
7737
|
};
|
|
7738
7738
|
const handlePrintWithSettings = async (settings) => {
|
|
7739
7739
|
setIsPrintDialogOpen(false);
|
|
7740
|
-
const printWindow =
|
|
7740
|
+
const printWindow = chunkFJDZ7AEE_js.openPendingPrintWindow(t("pptx.print.preparingToPrint"));
|
|
7741
7741
|
if (!printWindow) {
|
|
7742
7742
|
console.warn(
|
|
7743
7743
|
"[PowerPointViewer] Print window was blocked by the browser. Allow popups for this site to print."
|
|
@@ -7800,8 +7800,8 @@ function useThemeHandlers(input) {
|
|
|
7800
7800
|
return;
|
|
7801
7801
|
}
|
|
7802
7802
|
await handler.updateThemeColorScheme(colorScheme);
|
|
7803
|
-
const previousMap = theme?.colorScheme ?
|
|
7804
|
-
setSlides((prev) =>
|
|
7803
|
+
const previousMap = theme?.colorScheme ? chunkFJDZ7AEE_js.buildThemeColorMap(theme.colorScheme) : {};
|
|
7804
|
+
setSlides((prev) => chunkFJDZ7AEE_js.reResolveSlideColors(prev, previousMap, colorScheme));
|
|
7805
7805
|
setTheme((prev) => prev ? { ...prev, colorScheme } : { colorScheme });
|
|
7806
7806
|
bumpHistory();
|
|
7807
7807
|
history.markDirty();
|
|
@@ -7906,7 +7906,7 @@ function useThemeSwitching(input) {
|
|
|
7906
7906
|
}
|
|
7907
7907
|
try {
|
|
7908
7908
|
await handler.applyTheme(preset.colorScheme, preset.fontScheme, preset.name);
|
|
7909
|
-
const newData =
|
|
7909
|
+
const newData = chunkFJDZ7AEE_js.applyThemeToData(data, preset.colorScheme, preset.fontScheme, preset.name);
|
|
7910
7910
|
onDataChange(newData);
|
|
7911
7911
|
onThemeChanged?.(preset);
|
|
7912
7912
|
} catch (error) {
|
|
@@ -7923,7 +7923,7 @@ function useThemeSwitching(input) {
|
|
|
7923
7923
|
}
|
|
7924
7924
|
try {
|
|
7925
7925
|
await handler.applyTheme(colorScheme, fontScheme ?? {}, themeName);
|
|
7926
|
-
const newData =
|
|
7926
|
+
const newData = chunkFJDZ7AEE_js.applyThemeToData(data, colorScheme, fontScheme, themeName);
|
|
7927
7927
|
onDataChange(newData);
|
|
7928
7928
|
} catch (error) {
|
|
7929
7929
|
console.error("Failed to switch to custom theme:", error);
|
|
@@ -7935,12 +7935,12 @@ function useThemeSwitching(input) {
|
|
|
7935
7935
|
if (!data?.theme?.colorScheme) {
|
|
7936
7936
|
return void 0;
|
|
7937
7937
|
}
|
|
7938
|
-
return
|
|
7939
|
-
(p) =>
|
|
7938
|
+
return chunkFJDZ7AEE_js.THEME_PRESETS.find(
|
|
7939
|
+
(p) => chunkFJDZ7AEE_js.themeColorSchemesEqual(data.theme?.colorScheme, p.colorScheme)
|
|
7940
7940
|
);
|
|
7941
7941
|
}, [data?.theme?.colorScheme]);
|
|
7942
7942
|
return {
|
|
7943
|
-
presets:
|
|
7943
|
+
presets: chunkFJDZ7AEE_js.THEME_PRESETS,
|
|
7944
7944
|
switchToPreset,
|
|
7945
7945
|
switchToCustom,
|
|
7946
7946
|
currentPreset
|
|
@@ -8015,7 +8015,7 @@ function usePropertyHandlers(input) {
|
|
|
8015
8015
|
}
|
|
8016
8016
|
try {
|
|
8017
8017
|
const ab = await file.arrayBuffer();
|
|
8018
|
-
const h = new
|
|
8018
|
+
const h = new chunkFJDZ7AEE_js.PptxHandler();
|
|
8019
8019
|
const other = await h.load(ab);
|
|
8020
8020
|
if (!other) {
|
|
8021
8021
|
return;
|
|
@@ -8025,7 +8025,7 @@ function usePropertyHandlers(input) {
|
|
|
8025
8025
|
width: canvasSize.width,
|
|
8026
8026
|
height: canvasSize.height
|
|
8027
8027
|
};
|
|
8028
|
-
setCompareResult(
|
|
8028
|
+
setCompareResult(chunkFJDZ7AEE_js.comparePresentation(cur, other));
|
|
8029
8029
|
setIsComparePanelOpen(true);
|
|
8030
8030
|
} catch (err) {
|
|
8031
8031
|
console.warn("Compare failed:", err);
|
|
@@ -8042,7 +8042,7 @@ function usePropertyHandlers(input) {
|
|
|
8042
8042
|
if (!diff || diff.status === "unchanged") {
|
|
8043
8043
|
return;
|
|
8044
8044
|
}
|
|
8045
|
-
setSlides((prev) =>
|
|
8045
|
+
setSlides((prev) => chunkFJDZ7AEE_js.applyAcceptSlide(prev, diff));
|
|
8046
8046
|
setIsDirty(true);
|
|
8047
8047
|
},
|
|
8048
8048
|
[compareResult, setSlides, setIsDirty]
|
|
@@ -8053,10 +8053,10 @@ function usePropertyHandlers(input) {
|
|
|
8053
8053
|
if (!compareResult) {
|
|
8054
8054
|
return;
|
|
8055
8055
|
}
|
|
8056
|
-
setSlides((prev) =>
|
|
8056
|
+
setSlides((prev) => chunkFJDZ7AEE_js.applyAcceptAllSlides(prev, compareResult));
|
|
8057
8057
|
setIsDirty(true);
|
|
8058
8058
|
}, [compareResult, setSlides, setIsDirty]);
|
|
8059
|
-
const usedFontFamilies = react.useMemo(() =>
|
|
8059
|
+
const usedFontFamilies = react.useMemo(() => chunkFJDZ7AEE_js.collectUsedFonts(slides), [slides]);
|
|
8060
8060
|
return {
|
|
8061
8061
|
handleUpdateNotes,
|
|
8062
8062
|
handleUpdateSlide,
|
|
@@ -8211,7 +8211,7 @@ function useViewerDialogs(input) {
|
|
|
8211
8211
|
);
|
|
8212
8212
|
const embeddedFontKey = (embeddedFontFamilies ?? []).join("\0");
|
|
8213
8213
|
const fontEmbedding = react.useMemo(
|
|
8214
|
-
() =>
|
|
8214
|
+
() => chunkFJDZ7AEE_js.describeFontEmbedding(embeddedFontKey ? embeddedFontKey.split("\0") : []),
|
|
8215
8215
|
[embeddedFontKey]
|
|
8216
8216
|
);
|
|
8217
8217
|
const [embedFontsEnabled, setEmbedFontsEnabled] = react.useState(fontEmbedding.initialEnabled);
|
|
@@ -8221,11 +8221,11 @@ function useViewerDialogs(input) {
|
|
|
8221
8221
|
setEmbedFontsEnabled(fontEmbedding.initialEnabled);
|
|
8222
8222
|
}
|
|
8223
8223
|
const [isNarrowViewport, setIsNarrowViewport] = react.useState(
|
|
8224
|
-
() => typeof window !== "undefined" ?
|
|
8224
|
+
() => typeof window !== "undefined" ? chunkFJDZ7AEE_js.isMobileViewport(window.innerWidth, window.innerHeight, viewportIsTouch()) : false
|
|
8225
8225
|
);
|
|
8226
8226
|
react.useEffect(() => {
|
|
8227
8227
|
const handleWindow = () => setIsNarrowViewport(
|
|
8228
|
-
|
|
8228
|
+
chunkFJDZ7AEE_js.isMobileViewport(window.innerWidth, window.innerHeight, viewportIsTouch())
|
|
8229
8229
|
);
|
|
8230
8230
|
window.addEventListener("resize", handleWindow);
|
|
8231
8231
|
return () => window.removeEventListener("resize", handleWindow);
|
|
@@ -8378,15 +8378,15 @@ function useViewerDialogs(input) {
|
|
|
8378
8378
|
};
|
|
8379
8379
|
}
|
|
8380
8380
|
function computeGridSpacingPx2(documentGridSpacing) {
|
|
8381
|
-
return
|
|
8381
|
+
return chunkFJDZ7AEE_js.computeGridSpacingPx(documentGridSpacing, chunkB6UIVRFA_js.GRID_SIZE);
|
|
8382
8382
|
}
|
|
8383
8383
|
function computeVisibleSlideIndexes(slides, activeCustomShowId, customShows) {
|
|
8384
8384
|
const activeShow = activeCustomShowId ? customShows.find((show) => show.id === activeCustomShowId) : void 0;
|
|
8385
|
-
return
|
|
8385
|
+
return chunkFJDZ7AEE_js.resolveShowSlideIndexes(slides, activeShow);
|
|
8386
8386
|
}
|
|
8387
8387
|
function computeSlideSectionGroups(slides, sections) {
|
|
8388
|
-
return
|
|
8389
|
-
id: group.section?.id ?? (sections.length > 0 ?
|
|
8388
|
+
return chunkFJDZ7AEE_js.groupSlidesBySection(sections, slides).map((group) => ({
|
|
8389
|
+
id: group.section?.id ?? (sections.length > 0 ? chunkB6UIVRFA_js.UNGROUPED_SECTION_ID : chunkB6UIVRFA_js.DEFAULT_SECTION_GROUP_ID),
|
|
8390
8390
|
label: group.section?.name ?? (sections.length > 0 ? "Ungrouped Slides" : "Slides"),
|
|
8391
8391
|
slideIndexes: group.slideIndexes,
|
|
8392
8392
|
...group.section?.color !== void 0 ? { color: group.section.color } : {},
|
|
@@ -8398,7 +8398,7 @@ function computeMasterPseudoSlide(mode, activeLayout, activeMaster) {
|
|
|
8398
8398
|
return void 0;
|
|
8399
8399
|
}
|
|
8400
8400
|
const document2 = activeLayout ? { slideMasters: [{ ...activeMaster, layouts: [activeLayout] }] } : { slideMasters: [activeMaster] };
|
|
8401
|
-
return
|
|
8401
|
+
return chunkFJDZ7AEE_js.masterViewPseudoSlide(document2, {
|
|
8402
8402
|
tab: "slides",
|
|
8403
8403
|
masterIndex: 0,
|
|
8404
8404
|
layoutIndex: activeLayout ? 0 : null
|
|
@@ -8426,10 +8426,10 @@ function useDerivedSlideState(input) {
|
|
|
8426
8426
|
);
|
|
8427
8427
|
const slideSectionGroups = react.useMemo(
|
|
8428
8428
|
() => computeSlideSectionGroups(slides, sections).map((group) => {
|
|
8429
|
-
if (group.id ===
|
|
8429
|
+
if (group.id === chunkB6UIVRFA_js.UNGROUPED_SECTION_ID && group.label === "Ungrouped Slides") {
|
|
8430
8430
|
return { ...group, label: t("pptx.slides.ungroupedSlides") };
|
|
8431
8431
|
}
|
|
8432
|
-
if (group.id ===
|
|
8432
|
+
if (group.id === chunkB6UIVRFA_js.DEFAULT_SECTION_GROUP_ID && group.label === "Slides") {
|
|
8433
8433
|
return { ...group, label: t("pptx.sections.slides") };
|
|
8434
8434
|
}
|
|
8435
8435
|
return group;
|
|
@@ -8529,13 +8529,13 @@ function useAnnotationHandlers(input) {
|
|
|
8529
8529
|
}, [annotations, setMode, setSlides, history]);
|
|
8530
8530
|
const handleSetMode = react.useCallback(
|
|
8531
8531
|
(nextMode) => {
|
|
8532
|
-
if (mode === "present" && nextMode !== "present" && !
|
|
8532
|
+
if (mode === "present" && nextMode !== "present" && !chunkFJDZ7AEE_js.mayLeaveSlideShow()) {
|
|
8533
8533
|
return;
|
|
8534
8534
|
}
|
|
8535
8535
|
if (nextMode === "present") {
|
|
8536
8536
|
presentation.enterPresentMode();
|
|
8537
8537
|
} else if (mode === "present" && annotations.hasAnyAnnotations) {
|
|
8538
|
-
|
|
8538
|
+
chunkFJDZ7AEE_js.stopAllPersistentAudio();
|
|
8539
8539
|
if (promptKeepInkAnnotations) {
|
|
8540
8540
|
pendingModeAfterAnnotationsRef.current = nextMode;
|
|
8541
8541
|
setShowKeepAnnotationsDialog(true);
|
|
@@ -8545,7 +8545,7 @@ function useAnnotationHandlers(input) {
|
|
|
8545
8545
|
}
|
|
8546
8546
|
} else {
|
|
8547
8547
|
if (mode === "present") {
|
|
8548
|
-
|
|
8548
|
+
chunkFJDZ7AEE_js.stopAllPersistentAudio();
|
|
8549
8549
|
}
|
|
8550
8550
|
setMode(nextMode);
|
|
8551
8551
|
}
|
|
@@ -8609,13 +8609,13 @@ function useSerialize(input) {
|
|
|
8609
8609
|
let processedSlide = slide;
|
|
8610
8610
|
if (pendingEditId) {
|
|
8611
8611
|
const updatedElements = slide.elements.map((el) => {
|
|
8612
|
-
if (el.id !== pendingEditId || !
|
|
8612
|
+
if (el.id !== pendingEditId || !chunkFJDZ7AEE_js.hasTextProperties(el)) {
|
|
8613
8613
|
return el;
|
|
8614
8614
|
}
|
|
8615
8615
|
return {
|
|
8616
8616
|
...el,
|
|
8617
8617
|
text: pendingEditText,
|
|
8618
|
-
textSegments:
|
|
8618
|
+
textSegments: chunkFJDZ7AEE_js.remapTextToSegments(pendingEditText, el.textSegments, el.textStyle)
|
|
8619
8619
|
};
|
|
8620
8620
|
});
|
|
8621
8621
|
if (updatedElements.some((el, i) => el !== slide.elements[i])) {
|
|
@@ -8628,19 +8628,19 @@ function useSerialize(input) {
|
|
|
8628
8628
|
const pptxGuides = guides.map((g) => ({
|
|
8629
8629
|
id: g.id,
|
|
8630
8630
|
orientation: g.axis === "h" ? "horz" : "vert",
|
|
8631
|
-
positionEmu:
|
|
8631
|
+
positionEmu: chunkFJDZ7AEE_js.guidePxToEmu(g.position)
|
|
8632
8632
|
}));
|
|
8633
8633
|
return {
|
|
8634
8634
|
...processedSlide,
|
|
8635
8635
|
guides: pptxGuides.length > 0 ? pptxGuides : void 0
|
|
8636
8636
|
};
|
|
8637
8637
|
});
|
|
8638
|
-
const slidesToSave =
|
|
8638
|
+
const slidesToSave = chunkFJDZ7AEE_js.buildSaveSlides(slidesWithGuides, templateElementsBySlideId);
|
|
8639
8639
|
const saveOptions = {
|
|
8640
8640
|
// Without this the Slide Size card edited a viewer-only pixel value and
|
|
8641
8641
|
// the saved `p:sldSz` never moved: passing `slideSize` is the only way a
|
|
8642
8642
|
// slide-size edit reaches the file.
|
|
8643
|
-
slideSize:
|
|
8643
|
+
slideSize: chunkFJDZ7AEE_js.resolveSlideSizeSelection({ current: slideSizeEmu, canvas: canvasSize }).size,
|
|
8644
8644
|
headerFooter,
|
|
8645
8645
|
presentationProperties,
|
|
8646
8646
|
customShows: customShows.length > 0 ? customShows : void 0,
|
|
@@ -8652,9 +8652,9 @@ function useSerialize(input) {
|
|
|
8652
8652
|
slideMasters,
|
|
8653
8653
|
notesMaster,
|
|
8654
8654
|
handoutMaster,
|
|
8655
|
-
...
|
|
8655
|
+
...chunkFJDZ7AEE_js.embeddedFontSaveOptions(embedFonts)
|
|
8656
8656
|
};
|
|
8657
|
-
return
|
|
8657
|
+
return chunkFJDZ7AEE_js.saveDeckWithPassword(handler, slidesToSave, saveOptions, { password, purpose });
|
|
8658
8658
|
}, [
|
|
8659
8659
|
slides,
|
|
8660
8660
|
templateElementsBySlideId,
|
|
@@ -8689,7 +8689,7 @@ function useRecoveryDetection(input) {
|
|
|
8689
8689
|
const onRestore = input.onRestore;
|
|
8690
8690
|
const openVersionHistory = input.openVersionHistory;
|
|
8691
8691
|
react.useEffect(() => {
|
|
8692
|
-
if (!
|
|
8692
|
+
if (!chunkFJDZ7AEE_js.shouldProbeAutosaveRecovery({
|
|
8693
8693
|
alreadyChecked: recoveryCheckedRef.current,
|
|
8694
8694
|
filePath,
|
|
8695
8695
|
loading,
|
|
@@ -8701,7 +8701,7 @@ function useRecoveryDetection(input) {
|
|
|
8701
8701
|
}
|
|
8702
8702
|
recoveryCheckedRef.current = true;
|
|
8703
8703
|
void (async () => {
|
|
8704
|
-
const offer = await
|
|
8704
|
+
const offer = await chunkFJDZ7AEE_js.probeAutosaveRecovery(filePath);
|
|
8705
8705
|
if (!offer) {
|
|
8706
8706
|
return;
|
|
8707
8707
|
}
|
|
@@ -8714,7 +8714,7 @@ function useRecoveryDetection(input) {
|
|
|
8714
8714
|
const record = recordRef.current;
|
|
8715
8715
|
setPrompt(null);
|
|
8716
8716
|
if (record && onRestore) {
|
|
8717
|
-
onRestore(
|
|
8717
|
+
onRestore(chunkFJDZ7AEE_js.acceptAutosaveRecovery(record));
|
|
8718
8718
|
}
|
|
8719
8719
|
recordRef.current = null;
|
|
8720
8720
|
}, [onRestore]);
|
|
@@ -8723,7 +8723,7 @@ function useRecoveryDetection(input) {
|
|
|
8723
8723
|
setPrompt(null);
|
|
8724
8724
|
recordRef.current = null;
|
|
8725
8725
|
if (record) {
|
|
8726
|
-
void
|
|
8726
|
+
void chunkFJDZ7AEE_js.discardAutosaveRecovery(record);
|
|
8727
8727
|
}
|
|
8728
8728
|
}, []);
|
|
8729
8729
|
return { prompt, restore, discard };
|
|
@@ -8762,11 +8762,11 @@ function usePresentationSetup(input) {
|
|
|
8762
8762
|
containerRef,
|
|
8763
8763
|
content,
|
|
8764
8764
|
onSetMode: (nextMode) => {
|
|
8765
|
-
if (mode === "present" && nextMode !== "present" && !
|
|
8765
|
+
if (mode === "present" && nextMode !== "present" && !chunkFJDZ7AEE_js.mayLeaveSlideShow()) {
|
|
8766
8766
|
return;
|
|
8767
8767
|
}
|
|
8768
8768
|
if (mode === "present" && nextMode !== "present") {
|
|
8769
|
-
|
|
8769
|
+
chunkFJDZ7AEE_js.stopAllPersistentAudio();
|
|
8770
8770
|
stopAnimationSound();
|
|
8771
8771
|
const exitHandler = exitModeHandlerRef.current;
|
|
8772
8772
|
if (exitHandler) {
|
|
@@ -8828,10 +8828,10 @@ function usePresentationSetup(input) {
|
|
|
8828
8828
|
onToggleToolbar: () => annotations.setToolbarVisible(!annotations.toolbarVisible),
|
|
8829
8829
|
onToggleSubtitles,
|
|
8830
8830
|
onSaveRehearsalTimings: (timings) => {
|
|
8831
|
-
setSlides((prev) =>
|
|
8831
|
+
setSlides((prev) => chunkFJDZ7AEE_js.applyRehearsalTimings(prev, timings));
|
|
8832
8832
|
history.markDirty();
|
|
8833
8833
|
},
|
|
8834
|
-
loopContinuously:
|
|
8834
|
+
loopContinuously: chunkFJDZ7AEE_js.shouldLoopContinuously(presentationProperties),
|
|
8835
8835
|
showWithAnimation: presentationProperties.showWithAnimation,
|
|
8836
8836
|
useTimings: presentationProperties.advanceMode !== "manual",
|
|
8837
8837
|
endWithBlackSlide
|
|
@@ -9032,7 +9032,7 @@ function useEditorOperations(input) {
|
|
|
9032
9032
|
const { formatPainterActive, setFormatPainterActive, elementLookup } = state;
|
|
9033
9033
|
react.useEffect(() => {
|
|
9034
9034
|
if (formatPainterActive && !prevFormatPainterRef.current && selectedElement) {
|
|
9035
|
-
copiedFormatRef.current =
|
|
9035
|
+
copiedFormatRef.current = chunkFJDZ7AEE_js.copyFormatFromElement(selectedElement);
|
|
9036
9036
|
} else if (!formatPainterActive) {
|
|
9037
9037
|
copiedFormatRef.current = null;
|
|
9038
9038
|
}
|
|
@@ -9058,12 +9058,12 @@ function useEditorOperations(input) {
|
|
|
9058
9058
|
e.stopPropagation();
|
|
9059
9059
|
const element = elementLookup.get(elementId);
|
|
9060
9060
|
if (element) {
|
|
9061
|
-
const updated =
|
|
9061
|
+
const updated = chunkFJDZ7AEE_js.applyFormatToElement(element, copiedFormatRef.current);
|
|
9062
9062
|
const updates = {};
|
|
9063
|
-
if (
|
|
9063
|
+
if (chunkFJDZ7AEE_js.hasShapeProperties(updated)) {
|
|
9064
9064
|
updates.shapeStyle = updated.shapeStyle;
|
|
9065
9065
|
}
|
|
9066
|
-
if (
|
|
9066
|
+
if (chunkFJDZ7AEE_js.hasTextProperties(updated)) {
|
|
9067
9067
|
updates.textStyle = updated.textStyle;
|
|
9068
9068
|
}
|
|
9069
9069
|
ops.updateElementById(elementId, updates);
|
|
@@ -9181,28 +9181,6 @@ function useIOHandlers(input) {
|
|
|
9181
9181
|
});
|
|
9182
9182
|
return { exportHandlers, printHandlers, themeHandlers, propertyHandlers };
|
|
9183
9183
|
}
|
|
9184
|
-
var GOOGLE_FONTS_AVAILABLE = {
|
|
9185
|
-
"Atkinson Hyperlegible": "Atkinson+Hyperlegible:wght@400;700",
|
|
9186
|
-
Roboto: "Roboto:wght@400;700",
|
|
9187
|
-
"Open Sans": "Open+Sans:wght@400;700",
|
|
9188
|
-
Lato: "Lato:wght@400;700",
|
|
9189
|
-
Montserrat: "Montserrat:wght@400;700",
|
|
9190
|
-
Poppins: "Poppins:wght@400;700",
|
|
9191
|
-
Raleway: "Raleway:wght@400;700",
|
|
9192
|
-
Nunito: "Nunito:wght@400;700",
|
|
9193
|
-
"Playfair Display": "Playfair+Display:wght@400;700",
|
|
9194
|
-
"Source Sans Pro": "Source+Sans+Pro:wght@400;700",
|
|
9195
|
-
"PT Sans": "PT+Sans:wght@400;700",
|
|
9196
|
-
Merriweather: "Merriweather:wght@400;700",
|
|
9197
|
-
Ubuntu: "Ubuntu:wght@400;700",
|
|
9198
|
-
Oswald: "Oswald:wght@400;700",
|
|
9199
|
-
"Noto Sans": "Noto+Sans:wght@400;700",
|
|
9200
|
-
"Fira Sans": "Fira+Sans:wght@400;700",
|
|
9201
|
-
Inter: "Inter:wght@400;700",
|
|
9202
|
-
"Work Sans": "Work+Sans:wght@400;700",
|
|
9203
|
-
Quicksand: "Quicksand:wght@400;700",
|
|
9204
|
-
Cabin: "Cabin:wght@400;700"
|
|
9205
|
-
};
|
|
9206
9184
|
var EMBEDDED_FONTS_STYLE_ID = "pptx-embedded-fonts";
|
|
9207
9185
|
var GOOGLE_FONTS_LINK_ID = "pptx-google-fonts";
|
|
9208
9186
|
var SYMBOL_FONTS_STYLE_ID = "pptx-symbol-font-fallback";
|
|
@@ -9213,21 +9191,6 @@ var SYMBOL_FONT_FAMILIES = [
|
|
|
9213
9191
|
"Symbol",
|
|
9214
9192
|
"Webdings"
|
|
9215
9193
|
];
|
|
9216
|
-
function collectReferencedFontFamilies(slides) {
|
|
9217
|
-
const families = /* @__PURE__ */ new Set();
|
|
9218
|
-
for (const slide of slides) {
|
|
9219
|
-
for (const el of slide.elements) {
|
|
9220
|
-
if (chunkYDEEINER_js.hasTextProperties(el) && el.textSegments) {
|
|
9221
|
-
for (const seg of el.textSegments) {
|
|
9222
|
-
if (seg.style.fontFamily) {
|
|
9223
|
-
families.add(seg.style.fontFamily);
|
|
9224
|
-
}
|
|
9225
|
-
}
|
|
9226
|
-
}
|
|
9227
|
-
}
|
|
9228
|
-
}
|
|
9229
|
-
return families;
|
|
9230
|
-
}
|
|
9231
9194
|
var FONT_NAME_UNSAFE_CHARS = /["\\\n\r;}<>]/u;
|
|
9232
9195
|
var FONT_FORMAT_ALLOWED = /* @__PURE__ */ new Set([
|
|
9233
9196
|
"truetype",
|
|
@@ -9286,33 +9249,31 @@ function useFontInjection({ embeddedFonts, slides }) {
|
|
|
9286
9249
|
}
|
|
9287
9250
|
};
|
|
9288
9251
|
}, [embeddedFonts]);
|
|
9289
|
-
const referencedFamilies = react.useMemo(() => collectReferencedFontFamilies(slides), [slides]);
|
|
9252
|
+
const referencedFamilies = react.useMemo(() => chunkFJDZ7AEE_js.collectReferencedFontFamilies(slides), [slides]);
|
|
9290
9253
|
react.useEffect(() => {
|
|
9291
|
-
|
|
9292
|
-
|
|
9293
|
-
|
|
9294
|
-
|
|
9295
|
-
continue;
|
|
9254
|
+
let cancelled = false;
|
|
9255
|
+
void chunkFJDZ7AEE_js.resolveGoogleWebfontHref(slides, embeddedFonts).then((href) => {
|
|
9256
|
+
if (cancelled) {
|
|
9257
|
+
return null;
|
|
9296
9258
|
}
|
|
9297
|
-
if (
|
|
9298
|
-
|
|
9259
|
+
if (!href || document.getElementById(GOOGLE_FONTS_LINK_ID)) {
|
|
9260
|
+
return null;
|
|
9299
9261
|
}
|
|
9300
|
-
|
|
9301
|
-
|
|
9302
|
-
|
|
9303
|
-
|
|
9304
|
-
|
|
9305
|
-
|
|
9306
|
-
|
|
9307
|
-
linkEl.href = `https://fonts.googleapis.com/css2?${googleFamilies.map((f) => `family=${encodeURIComponent(GOOGLE_FONTS_AVAILABLE[f])}`).join("&")}&display=swap`;
|
|
9308
|
-
document.head.appendChild(linkEl);
|
|
9262
|
+
const linkEl = document.createElement("link");
|
|
9263
|
+
linkEl.id = GOOGLE_FONTS_LINK_ID;
|
|
9264
|
+
linkEl.rel = "stylesheet";
|
|
9265
|
+
linkEl.href = href;
|
|
9266
|
+
document.head.appendChild(linkEl);
|
|
9267
|
+
return href;
|
|
9268
|
+
});
|
|
9309
9269
|
return () => {
|
|
9270
|
+
cancelled = true;
|
|
9310
9271
|
const existing = document.getElementById(GOOGLE_FONTS_LINK_ID);
|
|
9311
9272
|
if (existing) {
|
|
9312
9273
|
document.head.removeChild(existing);
|
|
9313
9274
|
}
|
|
9314
9275
|
};
|
|
9315
|
-
}, [embeddedFonts,
|
|
9276
|
+
}, [embeddedFonts, slides]);
|
|
9316
9277
|
react.useEffect(() => {
|
|
9317
9278
|
const neededSymbolFonts = SYMBOL_FONT_FAMILIES.filter((f) => referencedFamilies.has(f));
|
|
9318
9279
|
if (neededSymbolFonts.length === 0) {
|
|
@@ -9467,7 +9428,7 @@ function useKeyboardShortcuts(input) {
|
|
|
9467
9428
|
inputRef.current = input;
|
|
9468
9429
|
const handleKeyDown = react.useCallback((e) => {
|
|
9469
9430
|
const current = inputRef.current;
|
|
9470
|
-
const { action, dx, dy } =
|
|
9431
|
+
const { action, dx, dy } = chunkFJDZ7AEE_js.mapEditorKey(e, {
|
|
9471
9432
|
canEdit: current.canEdit,
|
|
9472
9433
|
// The Slide Master view is an editing surface, not a viewing one.
|
|
9473
9434
|
// Gating on `mode !== 'edit'` alone made `mapEditorKey` return
|
|
@@ -9480,7 +9441,7 @@ function useKeyboardShortcuts(input) {
|
|
|
9480
9441
|
hasSelection: current.hasSelection,
|
|
9481
9442
|
isEditingText: Boolean(current.inlineEditingElementId || current.tableEditorState?.isEditing),
|
|
9482
9443
|
isDrawing: current.activeTool !== "select",
|
|
9483
|
-
isTextInputTarget:
|
|
9444
|
+
isTextInputTarget: chunkFJDZ7AEE_js.isEditorTextInputTarget(e.target)
|
|
9484
9445
|
});
|
|
9485
9446
|
if (action === null) {
|
|
9486
9447
|
return;
|
|
@@ -9791,7 +9752,7 @@ function useViewerIntegration(input) {
|
|
|
9791
9752
|
return zoom.scale;
|
|
9792
9753
|
},
|
|
9793
9754
|
setZoom(level) {
|
|
9794
|
-
zoom.setScale(
|
|
9755
|
+
zoom.setScale(chunkFJDZ7AEE_js.clampZoomScale(level));
|
|
9795
9756
|
},
|
|
9796
9757
|
zoomIn() {
|
|
9797
9758
|
zoom.handleZoomIn();
|
|
@@ -10007,7 +9968,7 @@ function useReducedMotion() {
|
|
|
10007
9968
|
}
|
|
10008
9969
|
function useViewerOptions() {
|
|
10009
9970
|
const storeRef = react.useRef(null);
|
|
10010
|
-
storeRef.current ??=
|
|
9971
|
+
storeRef.current ??= chunkFJDZ7AEE_js.createViewerOptionsStore();
|
|
10011
9972
|
const store = storeRef.current;
|
|
10012
9973
|
const options = react.useSyncExternalStore(
|
|
10013
9974
|
(onStoreChange) => store.subscribe(onStoreChange),
|
|
@@ -10016,9 +9977,9 @@ function useViewerOptions() {
|
|
|
10016
9977
|
);
|
|
10017
9978
|
return { optionsStore: store, options };
|
|
10018
9979
|
}
|
|
10019
|
-
var KNOWN_TAB_IDS = new Set(
|
|
9980
|
+
var KNOWN_TAB_IDS = new Set(chunkFJDZ7AEE_js.TOOLBAR_TABS.map((tab) => tab.id));
|
|
10020
9981
|
function computeToolbarVisibility(hiddenActions, hiddenTabIds = []) {
|
|
10021
|
-
const isHidden = (id) =>
|
|
9982
|
+
const isHidden = (id) => chunkFJDZ7AEE_js.isActionHidden(id, hiddenActions);
|
|
10022
9983
|
const userHidden = new Set(hiddenTabIds);
|
|
10023
9984
|
userHidden.delete("file");
|
|
10024
9985
|
const isTabVisible = (id) => !KNOWN_TAB_IDS.has(id) || !isHidden(id) && !userHidden.has(id);
|
|
@@ -10110,12 +10071,12 @@ function useYjsDocumentSync({
|
|
|
10110
10071
|
return;
|
|
10111
10072
|
}
|
|
10112
10073
|
try {
|
|
10113
|
-
const handler = new
|
|
10074
|
+
const handler = new chunkFJDZ7AEE_js.PptxHandler();
|
|
10114
10075
|
await handler.load(sourceBytes.buffer);
|
|
10115
|
-
const currentSlides =
|
|
10076
|
+
const currentSlides = chunkFJDZ7AEE_js.readSlidesFromYDoc(
|
|
10116
10077
|
doc
|
|
10117
10078
|
);
|
|
10118
|
-
const slidesToSave =
|
|
10079
|
+
const slidesToSave = chunkFJDZ7AEE_js.buildSaveSlides(currentSlides, templateElementsBySlideId);
|
|
10119
10080
|
const bytes = await handler.save(slidesToSave);
|
|
10120
10081
|
config.onWriteBack(bytes);
|
|
10121
10082
|
} catch {
|
|
@@ -10130,10 +10091,10 @@ function useYjsDocumentSync({
|
|
|
10130
10091
|
if (!doc || !isConnected) {
|
|
10131
10092
|
return;
|
|
10132
10093
|
}
|
|
10133
|
-
const docSlides =
|
|
10094
|
+
const docSlides = chunkFJDZ7AEE_js.readSlidesFromYDoc(
|
|
10134
10095
|
doc
|
|
10135
10096
|
);
|
|
10136
|
-
if (!
|
|
10097
|
+
if (!chunkFJDZ7AEE_js.shouldRoomSlidesReplaceLoad(loadOrigin, docSlides.length)) {
|
|
10137
10098
|
return;
|
|
10138
10099
|
}
|
|
10139
10100
|
lastSyncedRef.current = JSON.stringify(docSlides);
|
|
@@ -10152,11 +10113,11 @@ function useYjsDocumentSync({
|
|
|
10152
10113
|
lastSyncedRef.current = serialized;
|
|
10153
10114
|
void (async () => {
|
|
10154
10115
|
const factories = await getFactories();
|
|
10155
|
-
|
|
10116
|
+
chunkFJDZ7AEE_js.reconcileSlidesInYDoc(
|
|
10156
10117
|
slides,
|
|
10157
10118
|
doc,
|
|
10158
10119
|
factories,
|
|
10159
|
-
|
|
10120
|
+
chunkFJDZ7AEE_js.LOCAL_SYNC_ORIGIN
|
|
10160
10121
|
);
|
|
10161
10122
|
scheduleWriteBack();
|
|
10162
10123
|
})();
|
|
@@ -10170,10 +10131,10 @@ function useYjsDocumentSync({
|
|
|
10170
10131
|
return;
|
|
10171
10132
|
}
|
|
10172
10133
|
const handleChange = (_events, transaction) => {
|
|
10173
|
-
if (transaction?.origin ===
|
|
10134
|
+
if (transaction?.origin === chunkFJDZ7AEE_js.LOCAL_SYNC_ORIGIN) {
|
|
10174
10135
|
return;
|
|
10175
10136
|
}
|
|
10176
|
-
const remoteSlides =
|
|
10137
|
+
const remoteSlides = chunkFJDZ7AEE_js.readSlidesFromYDoc(
|
|
10177
10138
|
doc
|
|
10178
10139
|
);
|
|
10179
10140
|
if (remoteSlides.length === 0) {
|
|
@@ -10189,7 +10150,7 @@ function useYjsDocumentSync({
|
|
|
10189
10150
|
isApplyingRemoteRef.current = false;
|
|
10190
10151
|
scheduleWriteBack();
|
|
10191
10152
|
};
|
|
10192
|
-
const unobserve =
|
|
10153
|
+
const unobserve = chunkFJDZ7AEE_js.observeYDocSlides(
|
|
10193
10154
|
doc,
|
|
10194
10155
|
handleChange
|
|
10195
10156
|
);
|
|
@@ -10227,7 +10188,7 @@ function useBroadcastFollower({
|
|
|
10227
10188
|
if (!broadcaster) {
|
|
10228
10189
|
return;
|
|
10229
10190
|
}
|
|
10230
|
-
if (!
|
|
10191
|
+
if (!chunkFJDZ7AEE_js.shouldAutoFollowBroadcaster({
|
|
10231
10192
|
localRole: collab.config.role,
|
|
10232
10193
|
broadcasterRole: broadcaster.role
|
|
10233
10194
|
})) {
|
|
@@ -10398,7 +10359,7 @@ function subscribeTouchCapability(callback) {
|
|
|
10398
10359
|
function useIsMobile() {
|
|
10399
10360
|
const isTouchDevice = react.useSyncExternalStore(
|
|
10400
10361
|
subscribeTouchCapability,
|
|
10401
|
-
|
|
10362
|
+
chunkFJDZ7AEE_js.detectTouchDevice,
|
|
10402
10363
|
() => false
|
|
10403
10364
|
// server snapshot
|
|
10404
10365
|
);
|
|
@@ -10408,7 +10369,7 @@ function useIsMobile() {
|
|
|
10408
10369
|
const [viewportHeight, setViewportHeight] = react.useState(
|
|
10409
10370
|
() => typeof window === "undefined" ? 768 : window.innerHeight
|
|
10410
10371
|
);
|
|
10411
|
-
const [orientation, setOrientation] = react.useState(
|
|
10372
|
+
const [orientation, setOrientation] = react.useState(chunkFJDZ7AEE_js.detectOrientation);
|
|
10412
10373
|
const [isVirtualKeyboardOpen, setIsVirtualKeyboardOpen] = react.useState(false);
|
|
10413
10374
|
const [initialViewportHeight] = react.useState(
|
|
10414
10375
|
() => typeof window !== "undefined" ? window.innerHeight : 800
|
|
@@ -10429,7 +10390,7 @@ function useIsMobile() {
|
|
|
10429
10390
|
return;
|
|
10430
10391
|
}
|
|
10431
10392
|
const handleOrientationChange = () => {
|
|
10432
|
-
setOrientation(
|
|
10393
|
+
setOrientation(chunkFJDZ7AEE_js.detectOrientation());
|
|
10433
10394
|
};
|
|
10434
10395
|
if (screen.orientation) {
|
|
10435
10396
|
screen.orientation.addEventListener("change", handleOrientationChange);
|
|
@@ -10459,7 +10420,7 @@ function useIsMobile() {
|
|
|
10459
10420
|
window.addEventListener("resize", handleResize);
|
|
10460
10421
|
return () => window.removeEventListener("resize", handleResize);
|
|
10461
10422
|
}, [isTouchDevice, initialViewportHeight]);
|
|
10462
|
-
const { isMobile, isTablet, isDesktop } =
|
|
10423
|
+
const { isMobile, isTablet, isDesktop } = chunkFJDZ7AEE_js.deriveViewportBreakpoints(
|
|
10463
10424
|
viewportWidth,
|
|
10464
10425
|
viewportHeight,
|
|
10465
10426
|
isTouchDevice
|
|
@@ -10490,10 +10451,10 @@ function useTouchGestures(input) {
|
|
|
10490
10451
|
if (!el || !enabled) {
|
|
10491
10452
|
return;
|
|
10492
10453
|
}
|
|
10493
|
-
const recognizer =
|
|
10454
|
+
const recognizer = chunkFJDZ7AEE_js.createTouchGestureRecognizer({
|
|
10494
10455
|
getScale: () => scaleRef.current,
|
|
10495
|
-
minScale:
|
|
10496
|
-
maxScale:
|
|
10456
|
+
minScale: chunkFJDZ7AEE_js.MIN_ZOOM_SCALE,
|
|
10457
|
+
maxScale: chunkFJDZ7AEE_js.MAX_ZOOM_SCALE,
|
|
10497
10458
|
callbacks: {
|
|
10498
10459
|
onPinchZoom: (newScale) => callbacksRef.current.onPinchZoom?.(newScale),
|
|
10499
10460
|
onSwipe: (direction) => callbacksRef.current.onSwipe?.(direction),
|
|
@@ -10533,7 +10494,7 @@ function scrollFocusedIntoView(keyboardInset) {
|
|
|
10533
10494
|
return;
|
|
10534
10495
|
}
|
|
10535
10496
|
const rect = active.getBoundingClientRect();
|
|
10536
|
-
const delta =
|
|
10497
|
+
const delta = chunkFJDZ7AEE_js.computeScrollDelta(
|
|
10537
10498
|
{ top: rect.top, bottom: rect.bottom },
|
|
10538
10499
|
window.innerHeight,
|
|
10539
10500
|
keyboardInset
|
|
@@ -10553,8 +10514,8 @@ function useKeyboardInsets(enabled = true) {
|
|
|
10553
10514
|
return;
|
|
10554
10515
|
}
|
|
10555
10516
|
const update = () => {
|
|
10556
|
-
const metrics =
|
|
10557
|
-
const inset = metrics ?
|
|
10517
|
+
const metrics = chunkFJDZ7AEE_js.readViewportMetrics(window);
|
|
10518
|
+
const inset = metrics ? chunkFJDZ7AEE_js.computeKeyboardInset(metrics) : 0;
|
|
10558
10519
|
setKeyboardInset(inset);
|
|
10559
10520
|
if (inset > 0) {
|
|
10560
10521
|
window.requestAnimationFrame(() => scrollFocusedIntoView(inset));
|
|
@@ -10565,8 +10526,8 @@ function useKeyboardInsets(enabled = true) {
|
|
|
10565
10526
|
vv.addEventListener("scroll", update);
|
|
10566
10527
|
const onFocusIn = () => {
|
|
10567
10528
|
window.requestAnimationFrame(() => {
|
|
10568
|
-
const metrics =
|
|
10569
|
-
const inset = metrics ?
|
|
10529
|
+
const metrics = chunkFJDZ7AEE_js.readViewportMetrics(window);
|
|
10530
|
+
const inset = metrics ? chunkFJDZ7AEE_js.computeKeyboardInset(metrics) : 0;
|
|
10570
10531
|
if (inset > 0) {
|
|
10571
10532
|
scrollFocusedIntoView(inset);
|
|
10572
10533
|
}
|
|
@@ -10579,7 +10540,7 @@ function useKeyboardInsets(enabled = true) {
|
|
|
10579
10540
|
document.removeEventListener("focusin", onFocusIn);
|
|
10580
10541
|
};
|
|
10581
10542
|
}, [enabled]);
|
|
10582
|
-
return { keyboardInset, isKeyboardOpen:
|
|
10543
|
+
return { keyboardInset, isKeyboardOpen: chunkFJDZ7AEE_js.isKeyboardOpen(keyboardInset) };
|
|
10583
10544
|
}
|
|
10584
10545
|
|
|
10585
10546
|
// src/viewer/hooks/useViewerBuildingBlocks-canvas-props.ts
|
|
@@ -10608,21 +10569,21 @@ function buildCanvasProps(input) {
|
|
|
10608
10569
|
} = input;
|
|
10609
10570
|
const effectiveSlide = mode === "master" ? masterPseudoSlide : activeSlide;
|
|
10610
10571
|
const effectiveTemplateElements = mode === "master" ? s.activeLayout ? s.activeMaster?.elements ?? [] : [] : templateElements;
|
|
10611
|
-
const fieldContext =
|
|
10572
|
+
const fieldContext = chunkFJDZ7AEE_js.buildFieldSubstitutionContext({
|
|
10612
10573
|
headerFooter: s.headerFooter,
|
|
10613
10574
|
customProperties: s.customProperties,
|
|
10614
10575
|
slide: activeSlide
|
|
10615
10576
|
});
|
|
10616
10577
|
const tableStyleContext = s.theme || s.tableStyleMap ? { theme: s.theme, tableStyleMap: s.tableStyleMap } : void 0;
|
|
10617
10578
|
const openExternalUrl = (url) => {
|
|
10618
|
-
if (
|
|
10579
|
+
if (chunkFJDZ7AEE_js.shouldConfirmExternalHyperlink(viewerOptions, url) && !window.confirm(buildHyperlinkConfirmMessage(url))) {
|
|
10619
10580
|
return;
|
|
10620
10581
|
}
|
|
10621
|
-
|
|
10582
|
+
chunkFJDZ7AEE_js.safeOpenUrl(url);
|
|
10622
10583
|
};
|
|
10623
10584
|
const handleActionClick = (_elementId, action) => {
|
|
10624
10585
|
if (mode === "present") {
|
|
10625
|
-
const resolved =
|
|
10586
|
+
const resolved = chunkFJDZ7AEE_js.resolvePresentationAction(action, { slideCount: slides.length });
|
|
10626
10587
|
if (resolved.intent.kind === "openUrl") {
|
|
10627
10588
|
openExternalUrl(resolved.intent.url);
|
|
10628
10589
|
return;
|
|
@@ -10633,9 +10594,9 @@ function buildCanvasProps(input) {
|
|
|
10633
10594
|
}
|
|
10634
10595
|
};
|
|
10635
10596
|
const handleHyperlinkClick = (url) => {
|
|
10636
|
-
if (
|
|
10597
|
+
if (chunkFJDZ7AEE_js.isPpactionUrl(url)) {
|
|
10637
10598
|
if (mode === "present") {
|
|
10638
|
-
const parsed =
|
|
10599
|
+
const parsed = chunkFJDZ7AEE_js.parsePpactionUrl(url);
|
|
10639
10600
|
if (parsed) {
|
|
10640
10601
|
presentation.handlePresentationAction({
|
|
10641
10602
|
action: parsed.action,
|
|
@@ -10741,7 +10702,7 @@ function buildCanvasProps(input) {
|
|
|
10741
10702
|
|
|
10742
10703
|
// src/viewer/hooks/useScopedLayoutOptions.ts
|
|
10743
10704
|
function scopeLayoutOptionsToActiveSlide(options, activeSlide) {
|
|
10744
|
-
return
|
|
10705
|
+
return chunkFJDZ7AEE_js.scopeLayoutOptionsToSlide(options, activeSlide?.layoutPath);
|
|
10745
10706
|
}
|
|
10746
10707
|
|
|
10747
10708
|
// src/viewer/hooks/useViewerBuildingBlocks-toolbar-handlers.ts
|
|
@@ -10754,7 +10715,7 @@ function buildToolbarAnimationHandlers(input) {
|
|
|
10754
10715
|
const current = activeSlide.animations ?? [];
|
|
10755
10716
|
if (group === "motionPath") {
|
|
10756
10717
|
propertyHandlers.handleUpdateSlide({
|
|
10757
|
-
animations:
|
|
10718
|
+
animations: chunkFJDZ7AEE_js.applyMotionPathPreset(current, selectedElement.id, preset)
|
|
10758
10719
|
});
|
|
10759
10720
|
return;
|
|
10760
10721
|
}
|
|
@@ -10948,7 +10909,7 @@ function buildToolbarProps(input) {
|
|
|
10948
10909
|
onOpenFile,
|
|
10949
10910
|
onOpenRecentFile,
|
|
10950
10911
|
onCreatePresentation: (templateId) => {
|
|
10951
|
-
s.setSlides(
|
|
10912
|
+
s.setSlides(chunkFJDZ7AEE_js.createBackstagePresentation(templateId));
|
|
10952
10913
|
s.setActiveSlideIndex(0);
|
|
10953
10914
|
s.setSelectedElementId(null);
|
|
10954
10915
|
s.setSelectedElementIds([]);
|
|
@@ -10977,7 +10938,7 @@ function buildToolbarProps(input) {
|
|
|
10977
10938
|
loadLayoutPreviews: input.loadLayoutPreviews,
|
|
10978
10939
|
onInsertSlideFromLayout: slideOps.handleInsertSlideFromLayout,
|
|
10979
10940
|
onInsertSlideFromTemplate: slideOps.handleInsertSlideFromTemplate,
|
|
10980
|
-
templateScheme:
|
|
10941
|
+
templateScheme: chunkFJDZ7AEE_js.templateSchemeFromTheme(s.theme?.colorScheme),
|
|
10981
10942
|
customShows: s.customShows,
|
|
10982
10943
|
activeCustomShowId: s.activeCustomShowId,
|
|
10983
10944
|
onSetActiveCustomShowId: s.setActiveCustomShowId,
|
|
@@ -11018,7 +10979,7 @@ function buildToolbarProps(input) {
|
|
|
11018
10979
|
isCommentsPanelOpen: s.isInspectorPaneOpen,
|
|
11019
10980
|
slideCommentCount: activeSlide?.comments?.length ?? 0,
|
|
11020
10981
|
formatPainterActive: s.formatPainterActive,
|
|
11021
|
-
canActivateFormatPainter:
|
|
10982
|
+
canActivateFormatPainter: chunkFJDZ7AEE_js.hasCopyableFormat(selectedElement),
|
|
11022
10983
|
onToggleFormatPainter: () => s.setFormatPainterActive((p) => !p),
|
|
11023
10984
|
isSelectionPaneOpen: s.isSelectionPaneOpen,
|
|
11024
10985
|
onToggleSelectionPane: () => s.setIsSelectionPaneOpen((p) => !p),
|
|
@@ -11092,7 +11053,7 @@ function useViewerBuildingBlocksCore(input) {
|
|
|
11092
11053
|
headerFooter: state.headerFooter,
|
|
11093
11054
|
loading,
|
|
11094
11055
|
error,
|
|
11095
|
-
maxHistoryEntries:
|
|
11056
|
+
maxHistoryEntries: chunkFJDZ7AEE_js.resolveHistoryDepth(viewerOptions),
|
|
11096
11057
|
hasActivePointerInteraction,
|
|
11097
11058
|
pointerCommitNonce: state.pointerCommitNonce,
|
|
11098
11059
|
setSlides: state.setSlides,
|
|
@@ -11157,7 +11118,7 @@ function useViewerBuildingBlocksCore(input) {
|
|
|
11157
11118
|
gridSpacingPx,
|
|
11158
11119
|
// Multiplied against the pre-existing 2x baseline; see the matching
|
|
11159
11120
|
// comment in `PowerPointViewer.tsx`.
|
|
11160
|
-
imageExportScale: 2 *
|
|
11121
|
+
imageExportScale: 2 * chunkFJDZ7AEE_js.resolveImageResolutionScale(viewerOptions),
|
|
11161
11122
|
viewerOptions
|
|
11162
11123
|
};
|
|
11163
11124
|
}
|
|
@@ -11327,7 +11288,7 @@ function useViewerBuildingBlocks(input) {
|
|
|
11327
11288
|
}, [incomingContent]);
|
|
11328
11289
|
const onOpenFile = react.useCallback(() => {
|
|
11329
11290
|
void (async () => {
|
|
11330
|
-
const picked = await
|
|
11291
|
+
const picked = await chunkFJDZ7AEE_js.openPptxFile();
|
|
11331
11292
|
if (picked) {
|
|
11332
11293
|
setContent(picked.buffer);
|
|
11333
11294
|
}
|
|
@@ -11335,7 +11296,7 @@ function useViewerBuildingBlocks(input) {
|
|
|
11335
11296
|
}, []);
|
|
11336
11297
|
const onOpenRecentFile = react.useCallback((key) => {
|
|
11337
11298
|
void (async () => {
|
|
11338
|
-
const bytes = await
|
|
11299
|
+
const bytes = await chunkFJDZ7AEE_js.readBackstageRecentFile(key);
|
|
11339
11300
|
if (bytes) {
|
|
11340
11301
|
setContent(bytes);
|
|
11341
11302
|
}
|