pptx-react-viewer 2.16.2 → 2.16.4
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 +14 -0
- package/dist/{AiChatPanel-WJXPCHQK.mjs → AiChatPanel-7DDN4QUA.mjs} +4 -4
- package/dist/AiChatPanel-7DDN4QUA.mjs.br +0 -0
- package/dist/AiChatPanel-7DDN4QUA.mjs.gz +0 -0
- package/dist/{AiChatPanel-MCGNCS7Q.js → AiChatPanel-KEORKCTT.js} +23 -23
- package/dist/AiChatPanel-KEORKCTT.js.br +0 -0
- package/dist/AiChatPanel-KEORKCTT.js.gz +0 -0
- package/dist/{Model3DScene-IXW2AKAU.mjs → Model3DScene-DEAQMMUS.mjs} +1 -1
- package/dist/{Model3DScene-IXW2AKAU.mjs.br → Model3DScene-DEAQMMUS.mjs.br} +0 -0
- package/dist/Model3DScene-DEAQMMUS.mjs.gz +0 -0
- package/dist/{Model3DScene-Q2DTGVQ7.js → Model3DScene-SBUYEWHL.js} +2 -2
- package/dist/Model3DScene-SBUYEWHL.js.br +0 -0
- package/dist/Model3DScene-SBUYEWHL.js.gz +0 -0
- package/dist/{SurfaceChart3DScene-AD43LAOO.js → SurfaceChart3DScene-I5D54YQ3.js} +2 -2
- package/dist/SurfaceChart3DScene-I5D54YQ3.js.br +0 -0
- package/dist/SurfaceChart3DScene-I5D54YQ3.js.gz +0 -0
- package/dist/{SurfaceChart3DScene-MODEHQ6G.mjs → SurfaceChart3DScene-TXGS2PBK.mjs} +1 -1
- package/dist/{SurfaceChart3DScene-MODEHQ6G.mjs.br → SurfaceChart3DScene-TXGS2PBK.mjs.br} +0 -0
- package/dist/SurfaceChart3DScene-TXGS2PBK.mjs.gz +0 -0
- package/dist/{audience-content-store-DaABTAcQ.d.ts → audience-content-store-BvqKy7Hf.d.ts} +2 -2
- package/dist/{audience-content-store-DaABTAcQ.d.ts.map → audience-content-store-BvqKy7Hf.d.ts.map} +1 -1
- package/dist/{chunk-MDFCBYEM.mjs → chunk-23WSCMWN.mjs} +133 -68
- package/dist/chunk-23WSCMWN.mjs.br +0 -0
- package/dist/chunk-23WSCMWN.mjs.gz +0 -0
- package/dist/{chunk-5YV26HMJ.mjs → chunk-5IUEPQTK.mjs} +1 -0
- package/dist/chunk-5IUEPQTK.mjs.br +0 -0
- package/dist/chunk-5IUEPQTK.mjs.gz +0 -0
- package/dist/{chunk-3ISYPBSX.js → chunk-DVZF4ARG.js} +1 -0
- package/dist/chunk-DVZF4ARG.js.br +0 -0
- package/dist/chunk-DVZF4ARG.js.gz +0 -0
- package/dist/{chunk-OYF6ISXZ.mjs → chunk-DWIIYEOG.mjs} +4 -4
- package/dist/chunk-DWIIYEOG.mjs.br +0 -0
- package/dist/{chunk-OYF6ISXZ.mjs.gz → chunk-DWIIYEOG.mjs.gz} +0 -0
- package/dist/{chunk-JV6DI7AK.js → chunk-FQ3FTNKV.js} +1062 -1062
- package/dist/chunk-FQ3FTNKV.js.br +0 -0
- package/dist/chunk-FQ3FTNKV.js.gz +0 -0
- package/dist/{chunk-3OYWYONZ.mjs → chunk-FXGO5KLU.mjs} +3 -3
- package/dist/chunk-FXGO5KLU.mjs.br +0 -0
- package/dist/chunk-FXGO5KLU.mjs.gz +0 -0
- package/dist/{chunk-LDD2UVCV.mjs → chunk-GSAOP4Z4.mjs} +10 -10
- package/dist/chunk-GSAOP4Z4.mjs.br +0 -0
- package/dist/chunk-GSAOP4Z4.mjs.gz +0 -0
- package/dist/{chunk-CIK6XUOH.js → chunk-GZ2V3PWN.js} +3 -3
- package/dist/chunk-GZ2V3PWN.js.br +0 -0
- package/dist/chunk-GZ2V3PWN.js.gz +0 -0
- package/dist/{chunk-P6KM7RO5.js → chunk-HAQDKQ52.js} +266 -266
- package/dist/chunk-HAQDKQ52.js.br +0 -0
- package/dist/chunk-HAQDKQ52.js.gz +0 -0
- package/dist/{chunk-QI2JCXTH.mjs → chunk-J4QZVO3S.mjs} +1 -1
- package/dist/chunk-J4QZVO3S.mjs.br +0 -0
- package/dist/chunk-J4QZVO3S.mjs.gz +0 -0
- package/dist/{chunk-UWYHBCLM.mjs → chunk-LLTUDPRE.mjs} +18 -8
- package/dist/chunk-LLTUDPRE.mjs.br +0 -0
- package/dist/chunk-LLTUDPRE.mjs.gz +0 -0
- package/dist/{chunk-4GX347MG.js → chunk-MZ47MV52.js} +133 -68
- package/dist/chunk-MZ47MV52.js.br +0 -0
- package/dist/chunk-MZ47MV52.js.gz +0 -0
- package/dist/{chunk-PYV6FIYK.js → chunk-NB7M4XBG.js} +38 -38
- package/dist/chunk-NB7M4XBG.js.br +0 -0
- package/dist/chunk-NB7M4XBG.js.gz +0 -0
- package/dist/{chunk-Z4CS2ZYN.mjs → chunk-PLBS7OL2.mjs} +3 -3
- package/dist/chunk-PLBS7OL2.mjs.br +0 -0
- package/dist/chunk-PLBS7OL2.mjs.gz +0 -0
- package/dist/{chunk-NKE64XVV.js → chunk-RBQUSVYR.js} +361 -351
- package/dist/chunk-RBQUSVYR.js.br +0 -0
- package/dist/chunk-RBQUSVYR.js.gz +0 -0
- package/dist/{chunk-MMFM7JRT.js → chunk-ZYQT7I5C.js} +4 -4
- package/dist/chunk-ZYQT7I5C.js.br +0 -0
- package/dist/chunk-ZYQT7I5C.js.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.js +41 -41
- 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 +30 -1
- 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 +1 -1
- 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/dist/{y-webrtc-DGVURJIF.mjs → y-webrtc-7DLWG3LJ.mjs} +5 -5
- package/dist/y-webrtc-7DLWG3LJ.mjs.br +0 -0
- package/dist/y-webrtc-7DLWG3LJ.mjs.gz +0 -0
- package/dist/{y-webrtc-YN53KW3J.js → y-webrtc-TAJBJIKH.js} +107 -107
- package/dist/y-webrtc-TAJBJIKH.js.br +0 -0
- package/dist/y-webrtc-TAJBJIKH.js.gz +0 -0
- package/dist/{y-websocket-P5LTAJ5T.mjs → y-websocket-DCTJ76B7.mjs} +4 -4
- package/dist/y-websocket-DCTJ76B7.mjs.br +0 -0
- package/dist/y-websocket-DCTJ76B7.mjs.gz +0 -0
- package/dist/{y-websocket-HZCIQLM6.js → y-websocket-DQLOWGV6.js} +81 -81
- package/dist/y-websocket-DQLOWGV6.js.br +0 -0
- package/dist/y-websocket-DQLOWGV6.js.gz +0 -0
- package/dist/{yjs-FKGX4QHS.mjs → yjs-4ED7E5CZ.mjs} +1 -1
- package/dist/yjs-4ED7E5CZ.mjs.br +0 -0
- package/dist/yjs-4ED7E5CZ.mjs.gz +0 -0
- package/dist/{yjs-HBLSEMHP.js → yjs-OWUA3UHD.js} +104 -104
- package/dist/yjs-OWUA3UHD.js.br +0 -0
- package/dist/yjs-OWUA3UHD.js.gz +0 -0
- package/package.json +7 -7
- package/dist/AiChatPanel-MCGNCS7Q.js.br +0 -0
- package/dist/AiChatPanel-MCGNCS7Q.js.gz +0 -0
- package/dist/AiChatPanel-WJXPCHQK.mjs.br +0 -0
- package/dist/AiChatPanel-WJXPCHQK.mjs.gz +0 -0
- package/dist/Model3DScene-IXW2AKAU.mjs.gz +0 -0
- package/dist/Model3DScene-Q2DTGVQ7.js.br +0 -0
- package/dist/Model3DScene-Q2DTGVQ7.js.gz +0 -0
- package/dist/SurfaceChart3DScene-AD43LAOO.js.br +0 -0
- package/dist/SurfaceChart3DScene-AD43LAOO.js.gz +0 -0
- package/dist/SurfaceChart3DScene-MODEHQ6G.mjs.gz +0 -0
- package/dist/chunk-3ISYPBSX.js.br +0 -0
- package/dist/chunk-3ISYPBSX.js.gz +0 -0
- package/dist/chunk-3OYWYONZ.mjs.br +0 -0
- package/dist/chunk-3OYWYONZ.mjs.gz +0 -0
- package/dist/chunk-4GX347MG.js.br +0 -0
- package/dist/chunk-4GX347MG.js.gz +0 -0
- package/dist/chunk-5YV26HMJ.mjs.br +0 -0
- package/dist/chunk-5YV26HMJ.mjs.gz +0 -0
- package/dist/chunk-CIK6XUOH.js.br +0 -0
- package/dist/chunk-CIK6XUOH.js.gz +0 -0
- package/dist/chunk-JV6DI7AK.js.br +0 -0
- package/dist/chunk-JV6DI7AK.js.gz +0 -0
- package/dist/chunk-LDD2UVCV.mjs.br +0 -0
- package/dist/chunk-LDD2UVCV.mjs.gz +0 -0
- package/dist/chunk-MDFCBYEM.mjs.br +0 -0
- package/dist/chunk-MDFCBYEM.mjs.gz +0 -0
- package/dist/chunk-MMFM7JRT.js.br +0 -0
- package/dist/chunk-MMFM7JRT.js.gz +0 -0
- package/dist/chunk-NKE64XVV.js.br +0 -0
- package/dist/chunk-NKE64XVV.js.gz +0 -0
- package/dist/chunk-OYF6ISXZ.mjs.br +0 -0
- package/dist/chunk-P6KM7RO5.js.br +0 -0
- package/dist/chunk-P6KM7RO5.js.gz +0 -0
- package/dist/chunk-PYV6FIYK.js.br +0 -0
- package/dist/chunk-PYV6FIYK.js.gz +0 -0
- package/dist/chunk-QI2JCXTH.mjs.br +0 -0
- package/dist/chunk-QI2JCXTH.mjs.gz +0 -0
- package/dist/chunk-UWYHBCLM.mjs.br +0 -0
- package/dist/chunk-UWYHBCLM.mjs.gz +0 -0
- package/dist/chunk-Z4CS2ZYN.mjs.br +0 -0
- package/dist/chunk-Z4CS2ZYN.mjs.gz +0 -0
- package/dist/y-webrtc-DGVURJIF.mjs.br +0 -0
- package/dist/y-webrtc-DGVURJIF.mjs.gz +0 -0
- package/dist/y-webrtc-YN53KW3J.js.br +0 -0
- package/dist/y-webrtc-YN53KW3J.js.gz +0 -0
- package/dist/y-websocket-HZCIQLM6.js.br +0 -0
- package/dist/y-websocket-HZCIQLM6.js.gz +0 -0
- package/dist/y-websocket-P5LTAJ5T.mjs.br +0 -0
- package/dist/y-websocket-P5LTAJ5T.mjs.gz +0 -0
- package/dist/yjs-FKGX4QHS.mjs.br +0 -0
- package/dist/yjs-FKGX4QHS.mjs.gz +0 -0
- package/dist/yjs-HBLSEMHP.js.br +0 -0
- package/dist/yjs-HBLSEMHP.js.gz +0 -0
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
var
|
|
5
|
-
var
|
|
3
|
+
var chunkHAQDKQ52_js = require('./chunk-HAQDKQ52.js');
|
|
4
|
+
var chunkDVZF4ARG_js = require('./chunk-DVZF4ARG.js');
|
|
5
|
+
var chunkMZ47MV52_js = require('./chunk-MZ47MV52.js');
|
|
6
6
|
var react = require('react');
|
|
7
7
|
var JSZip = require('jszip');
|
|
8
8
|
var reactI18next = require('react-i18next');
|
|
@@ -14,7 +14,7 @@ var JSZip__default = /*#__PURE__*/_interopDefault(JSZip);
|
|
|
14
14
|
function useVirtualizedSlides({
|
|
15
15
|
totalItems,
|
|
16
16
|
itemHeight,
|
|
17
|
-
overscan =
|
|
17
|
+
overscan = chunkMZ47MV52_js.DEFAULT_VIRTUAL_OVERSCAN
|
|
18
18
|
}) {
|
|
19
19
|
const scrollContainerRef = react.useRef(null);
|
|
20
20
|
const [scrollTop, setScrollTop] = react.useState(0);
|
|
@@ -44,7 +44,7 @@ function useVirtualizedSlides({
|
|
|
44
44
|
resizeObserver?.disconnect();
|
|
45
45
|
};
|
|
46
46
|
}, []);
|
|
47
|
-
const range =
|
|
47
|
+
const range = chunkMZ47MV52_js.computeVirtualRange(totalItems, itemHeight, scrollTop, viewportHeight, overscan);
|
|
48
48
|
const safeItemHeight = Math.max(itemHeight, 1);
|
|
49
49
|
const scrollToIndex = react.useCallback(
|
|
50
50
|
(index, behavior = "smooth") => {
|
|
@@ -85,7 +85,7 @@ function usePresenceTracking({
|
|
|
85
85
|
}) {
|
|
86
86
|
const [remoteUsers, setRemoteUsers] = react.useState([]);
|
|
87
87
|
const projectorRef = react.useRef(null);
|
|
88
|
-
projectorRef.current ??=
|
|
88
|
+
projectorRef.current ??= chunkMZ47MV52_js.createPresenceProjector();
|
|
89
89
|
const projector = projectorRef.current;
|
|
90
90
|
const lastBroadcastRef = react.useRef(0);
|
|
91
91
|
const pendingBroadcastRef = react.useRef(null);
|
|
@@ -110,7 +110,7 @@ function usePresenceTracking({
|
|
|
110
110
|
awareness.setLocalStateField("presence", state);
|
|
111
111
|
lastBroadcastRef.current = Date.now();
|
|
112
112
|
};
|
|
113
|
-
if (elapsed >=
|
|
113
|
+
if (elapsed >= chunkMZ47MV52_js.BROADCAST_THROTTLE_MS) {
|
|
114
114
|
if (pendingBroadcastRef.current) {
|
|
115
115
|
clearTimeout(pendingBroadcastRef.current);
|
|
116
116
|
pendingBroadcastRef.current = null;
|
|
@@ -120,7 +120,7 @@ function usePresenceTracking({
|
|
|
120
120
|
pendingBroadcastRef.current = setTimeout(() => {
|
|
121
121
|
pendingBroadcastRef.current = null;
|
|
122
122
|
flush();
|
|
123
|
-
},
|
|
123
|
+
}, chunkMZ47MV52_js.BROADCAST_THROTTLE_MS - elapsed);
|
|
124
124
|
}
|
|
125
125
|
},
|
|
126
126
|
[awareness, userName, userColor, userAvatar, role]
|
|
@@ -200,7 +200,7 @@ function useYjsProvider({ config }) {
|
|
|
200
200
|
const departureRef = react.useRef(null);
|
|
201
201
|
const gateRef = react.useRef(null);
|
|
202
202
|
if (!gateRef.current) {
|
|
203
|
-
gateRef.current =
|
|
203
|
+
gateRef.current = chunkMZ47MV52_js.createSyncGate(() => setSynced(true));
|
|
204
204
|
}
|
|
205
205
|
const teardown = react.useCallback(() => {
|
|
206
206
|
if (timeoutRef.current) {
|
|
@@ -220,7 +220,7 @@ function useYjsProvider({ config }) {
|
|
|
220
220
|
const buildCleanup = react.useCallback(
|
|
221
221
|
(provider, yDoc) => () => {
|
|
222
222
|
announceDeparture();
|
|
223
|
-
|
|
223
|
+
chunkMZ47MV52_js.clearLocalAwareness(provider.awareness);
|
|
224
224
|
provider.destroy();
|
|
225
225
|
yDoc.destroy();
|
|
226
226
|
setDoc(null);
|
|
@@ -236,7 +236,7 @@ function useYjsProvider({ config }) {
|
|
|
236
236
|
}
|
|
237
237
|
setStatus("connecting");
|
|
238
238
|
try {
|
|
239
|
-
const [Y, { WebrtcProvider }] = await Promise.all([import('./yjs-
|
|
239
|
+
const [Y, { WebrtcProvider }] = await Promise.all([import('./yjs-OWUA3UHD.js'), import('./y-webrtc-TAJBJIKH.js')]);
|
|
240
240
|
const yDoc = new Y.Doc();
|
|
241
241
|
const opts = {};
|
|
242
242
|
if (config.signaling && config.signaling.length > 0) {
|
|
@@ -245,9 +245,9 @@ function useYjsProvider({ config }) {
|
|
|
245
245
|
if (config.authToken) {
|
|
246
246
|
opts.password = config.authToken;
|
|
247
247
|
}
|
|
248
|
-
const roomId =
|
|
248
|
+
const roomId = chunkMZ47MV52_js.validateRoomId(config.roomId);
|
|
249
249
|
const provider = new WebrtcProvider(roomId, yDoc, opts);
|
|
250
|
-
departureRef.current =
|
|
250
|
+
departureRef.current = chunkMZ47MV52_js.createDepartureChannel(roomId, provider.awareness);
|
|
251
251
|
setDoc(yDoc);
|
|
252
252
|
setAwareness(provider.awareness);
|
|
253
253
|
setClientId(provider.awareness.clientID);
|
|
@@ -289,13 +289,13 @@ function useYjsProvider({ config }) {
|
|
|
289
289
|
if (!config) {
|
|
290
290
|
return;
|
|
291
291
|
}
|
|
292
|
-
const roomId =
|
|
293
|
-
const transport = config.transport ??
|
|
292
|
+
const roomId = chunkMZ47MV52_js.validateRoomId(config.roomId);
|
|
293
|
+
const transport = config.transport ?? chunkMZ47MV52_js.resolveTransportForServerUrl(config.serverUrl);
|
|
294
294
|
if (transport === "webrtc") {
|
|
295
295
|
await initWebrtc();
|
|
296
296
|
return;
|
|
297
297
|
}
|
|
298
|
-
if (
|
|
298
|
+
if (chunkMZ47MV52_js.isMixedContentBlocked(config.serverUrl)) {
|
|
299
299
|
console.warn(
|
|
300
300
|
`[pptx-viewer] Refusing to connect: insecure ws:// server "${config.serverUrl}" is blocked from a secure (https) page. Use a wss:// URL.`
|
|
301
301
|
);
|
|
@@ -304,12 +304,12 @@ function useYjsProvider({ config }) {
|
|
|
304
304
|
}
|
|
305
305
|
setStatus("connecting");
|
|
306
306
|
try {
|
|
307
|
-
const [Y, { WebsocketProvider }] = await Promise.all([import('./yjs-
|
|
307
|
+
const [Y, { WebsocketProvider }] = await Promise.all([import('./yjs-OWUA3UHD.js'), import('./y-websocket-DQLOWGV6.js')]);
|
|
308
308
|
const yDoc = new Y.Doc();
|
|
309
309
|
const provider = new WebsocketProvider(config.serverUrl, roomId, yDoc, {
|
|
310
310
|
params: config.authToken ? { token: config.authToken } : void 0
|
|
311
311
|
});
|
|
312
|
-
departureRef.current =
|
|
312
|
+
departureRef.current = chunkMZ47MV52_js.createDepartureChannel(roomId, provider.awareness);
|
|
313
313
|
let connected = false;
|
|
314
314
|
const handleStatus = (event) => {
|
|
315
315
|
if (event.status === "connected") {
|
|
@@ -349,7 +349,7 @@ function useYjsProvider({ config }) {
|
|
|
349
349
|
provider.off("status", handleStatus);
|
|
350
350
|
provider.off("sync", handleSynced);
|
|
351
351
|
announceDeparture();
|
|
352
|
-
|
|
352
|
+
chunkMZ47MV52_js.clearLocalAwareness(provider.awareness);
|
|
353
353
|
provider.destroy();
|
|
354
354
|
yDoc.destroy();
|
|
355
355
|
setDoc(null);
|
|
@@ -358,7 +358,7 @@ function useYjsProvider({ config }) {
|
|
|
358
358
|
cleanupRef.current = null;
|
|
359
359
|
setStatus("error");
|
|
360
360
|
}
|
|
361
|
-
},
|
|
361
|
+
}, chunkMZ47MV52_js.CONNECTION_TIMEOUT_MS);
|
|
362
362
|
}
|
|
363
363
|
setDoc(yDoc);
|
|
364
364
|
setAwareness(provider.awareness);
|
|
@@ -367,7 +367,7 @@ function useYjsProvider({ config }) {
|
|
|
367
367
|
provider.off("status", handleStatus);
|
|
368
368
|
provider.off("sync", handleSynced);
|
|
369
369
|
announceDeparture();
|
|
370
|
-
|
|
370
|
+
chunkMZ47MV52_js.clearLocalAwareness(provider.awareness);
|
|
371
371
|
provider.destroy();
|
|
372
372
|
yDoc.destroy();
|
|
373
373
|
setDoc(null);
|
|
@@ -393,7 +393,7 @@ function useYjsProvider({ config }) {
|
|
|
393
393
|
]);
|
|
394
394
|
react.useEffect(() => {
|
|
395
395
|
init();
|
|
396
|
-
const disposeTeardown =
|
|
396
|
+
const disposeTeardown = chunkMZ47MV52_js.registerCollaborationTeardown({
|
|
397
397
|
leave: teardown,
|
|
398
398
|
rejoin: init
|
|
399
399
|
});
|
|
@@ -414,7 +414,7 @@ function useCollaborativeState({
|
|
|
414
414
|
canvasWidth,
|
|
415
415
|
canvasHeight
|
|
416
416
|
}) {
|
|
417
|
-
const userColor =
|
|
417
|
+
const userColor = chunkMZ47MV52_js.sanitizeColor(config?.userColor, "#6366f1");
|
|
418
418
|
const { status, awareness, doc, clientId, synced, retry } = useYjsProvider({ config });
|
|
419
419
|
const { remoteUsers, broadcastPresence } = usePresenceTracking({
|
|
420
420
|
awareness,
|
|
@@ -523,8 +523,8 @@ function useEditorHistory(input) {
|
|
|
523
523
|
width: canvasSize.width,
|
|
524
524
|
height: canvasSize.height,
|
|
525
525
|
activeSlideIndex,
|
|
526
|
-
slides: slides.map(
|
|
527
|
-
templateElementsBySlideId:
|
|
526
|
+
slides: slides.map(chunkMZ47MV52_js.cloneSlide),
|
|
527
|
+
templateElementsBySlideId: chunkMZ47MV52_js.cloneTemplateElementsBySlideId(templateElementsBySlideId),
|
|
528
528
|
...actionLabel ? { actionLabel } : {}
|
|
529
529
|
};
|
|
530
530
|
},
|
|
@@ -537,9 +537,9 @@ function useEditorHistory(input) {
|
|
|
537
537
|
width: snapshot.width,
|
|
538
538
|
height: snapshot.height
|
|
539
539
|
});
|
|
540
|
-
setSlides(snapshot.slides.map(
|
|
540
|
+
setSlides(snapshot.slides.map(chunkMZ47MV52_js.cloneSlide));
|
|
541
541
|
setTemplateElementsBySlideId(
|
|
542
|
-
|
|
542
|
+
chunkMZ47MV52_js.cloneTemplateElementsBySlideId(snapshot.templateElementsBySlideId)
|
|
543
543
|
);
|
|
544
544
|
setActiveSlideIndex(Math.min(snapshot.activeSlideIndex, maxSlideIndex));
|
|
545
545
|
setSelectedElementIds([]);
|
|
@@ -573,8 +573,8 @@ function useEditorHistory(input) {
|
|
|
573
573
|
const currentSnapshot = buildHistorySnapshot();
|
|
574
574
|
historyFutureRef.current.push(currentSnapshot);
|
|
575
575
|
isApplyingHistoryRef.current = true;
|
|
576
|
-
const nextSnapshot =
|
|
577
|
-
lastHistorySnapshotRef.current =
|
|
576
|
+
const nextSnapshot = chunkHAQDKQ52_js.cloneHistorySnapshot(previousSnapshot);
|
|
577
|
+
lastHistorySnapshotRef.current = chunkHAQDKQ52_js.cloneHistorySnapshot(nextSnapshot);
|
|
578
578
|
lastHistorySerializedRef.current = JSON.stringify(nextSnapshot);
|
|
579
579
|
applyHistorySnapshot(nextSnapshot);
|
|
580
580
|
updateHistoryAvailability();
|
|
@@ -595,8 +595,8 @@ function useEditorHistory(input) {
|
|
|
595
595
|
const currentSnapshot = buildHistorySnapshot();
|
|
596
596
|
historyPastRef.current.push(currentSnapshot);
|
|
597
597
|
isApplyingHistoryRef.current = true;
|
|
598
|
-
const targetSnapshot =
|
|
599
|
-
lastHistorySnapshotRef.current =
|
|
598
|
+
const targetSnapshot = chunkHAQDKQ52_js.cloneHistorySnapshot(nextSnapshot);
|
|
599
|
+
lastHistorySnapshotRef.current = chunkHAQDKQ52_js.cloneHistorySnapshot(targetSnapshot);
|
|
600
600
|
lastHistorySerializedRef.current = JSON.stringify(targetSnapshot);
|
|
601
601
|
applyHistorySnapshot(targetSnapshot);
|
|
602
602
|
updateHistoryAvailability();
|
|
@@ -614,7 +614,7 @@ function useEditorHistory(input) {
|
|
|
614
614
|
historyPastRef.current = [];
|
|
615
615
|
historyFutureRef.current = [];
|
|
616
616
|
if (initialSnapshot) {
|
|
617
|
-
const clonedInitial =
|
|
617
|
+
const clonedInitial = chunkHAQDKQ52_js.cloneHistorySnapshot(initialSnapshot);
|
|
618
618
|
lastHistorySnapshotRef.current = clonedInitial;
|
|
619
619
|
lastHistorySerializedRef.current = JSON.stringify(clonedInitial);
|
|
620
620
|
} else {
|
|
@@ -655,18 +655,18 @@ function useEditorHistory(input) {
|
|
|
655
655
|
}
|
|
656
656
|
const previousSnapshot = lastHistorySnapshotRef.current;
|
|
657
657
|
if (!previousSnapshot) {
|
|
658
|
-
lastHistorySnapshotRef.current =
|
|
658
|
+
lastHistorySnapshotRef.current = chunkHAQDKQ52_js.cloneHistorySnapshot(snapshot);
|
|
659
659
|
lastHistorySerializedRef.current = serialized;
|
|
660
660
|
lastCheapHashRef.current = cheapHash;
|
|
661
661
|
updateHistoryAvailability();
|
|
662
662
|
return;
|
|
663
663
|
}
|
|
664
|
-
historyPastRef.current.push(
|
|
664
|
+
historyPastRef.current.push(chunkHAQDKQ52_js.cloneHistorySnapshot(previousSnapshot));
|
|
665
665
|
while (historyPastRef.current.length > Math.max(1, maxHistoryEntries)) {
|
|
666
666
|
historyPastRef.current.shift();
|
|
667
667
|
}
|
|
668
668
|
historyFutureRef.current = [];
|
|
669
|
-
lastHistorySnapshotRef.current =
|
|
669
|
+
lastHistorySnapshotRef.current = chunkHAQDKQ52_js.cloneHistorySnapshot(snapshot);
|
|
670
670
|
lastHistorySerializedRef.current = serialized;
|
|
671
671
|
lastCheapHashRef.current = cheapHash;
|
|
672
672
|
updateHistoryAvailability();
|
|
@@ -726,9 +726,9 @@ function useZoomViewport({
|
|
|
726
726
|
const canvasStageRef = react.useRef(null);
|
|
727
727
|
const canvasViewportRef = react.useRef(null);
|
|
728
728
|
const renderScaleRef = react.useRef(1);
|
|
729
|
-
const wheelBufferRef = react.useRef(
|
|
729
|
+
const wheelBufferRef = react.useRef(chunkMZ47MV52_js.createWheelStepBuffer());
|
|
730
730
|
const storeRef = react.useRef(null);
|
|
731
|
-
storeRef.current ??=
|
|
731
|
+
storeRef.current ??= chunkMZ47MV52_js.createViewerZoomStore();
|
|
732
732
|
const store = storeRef.current;
|
|
733
733
|
const scale = useViewerStore(store, selectZoom);
|
|
734
734
|
const setScale = react.useCallback(
|
|
@@ -789,7 +789,7 @@ function useZoomViewport({
|
|
|
789
789
|
if (!wrapper || !canvasViewport) {
|
|
790
790
|
return;
|
|
791
791
|
}
|
|
792
|
-
const boundedScale =
|
|
792
|
+
const boundedScale = chunkMZ47MV52_js.clampZoomScale(nextScale);
|
|
793
793
|
const nextEditorScale = fitScale * boundedScale;
|
|
794
794
|
const centerX = (bounds.minX + bounds.maxX) / 2;
|
|
795
795
|
const centerY = (bounds.minY + bounds.maxY) / 2;
|
|
@@ -826,29 +826,29 @@ function useZoomViewport({
|
|
|
826
826
|
selectedElements.forEach((element) => {
|
|
827
827
|
minX = Math.min(minX, element.x);
|
|
828
828
|
minY = Math.min(minY, element.y);
|
|
829
|
-
maxX = Math.max(maxX, element.x + Math.max(element.width,
|
|
830
|
-
maxY = Math.max(maxY, element.y + Math.max(element.height,
|
|
829
|
+
maxX = Math.max(maxX, element.x + Math.max(element.width, chunkHAQDKQ52_js.MIN_ELEMENT_SIZE));
|
|
830
|
+
maxY = Math.max(maxY, element.y + Math.max(element.height, chunkHAQDKQ52_js.MIN_ELEMENT_SIZE));
|
|
831
831
|
});
|
|
832
832
|
if (!Number.isFinite(minX) || !Number.isFinite(minY) || !Number.isFinite(maxX) || !Number.isFinite(maxY)) {
|
|
833
833
|
return;
|
|
834
834
|
}
|
|
835
835
|
const selectionBounds = { minX, minY, maxX, maxY };
|
|
836
|
-
const boundsWidth = Math.max(selectionBounds.maxX - selectionBounds.minX,
|
|
837
|
-
const boundsHeight = Math.max(selectionBounds.maxY - selectionBounds.minY,
|
|
836
|
+
const boundsWidth = Math.max(selectionBounds.maxX - selectionBounds.minX, chunkHAQDKQ52_js.MIN_ELEMENT_SIZE);
|
|
837
|
+
const boundsHeight = Math.max(selectionBounds.maxY - selectionBounds.minY, chunkHAQDKQ52_js.MIN_ELEMENT_SIZE);
|
|
838
838
|
const availableWidth = Math.max(
|
|
839
|
-
effectiveEditorDimensions.width -
|
|
840
|
-
|
|
839
|
+
effectiveEditorDimensions.width - chunkHAQDKQ52_js.ZOOM_TO_SELECTION_PADDING,
|
|
840
|
+
chunkHAQDKQ52_js.MIN_ELEMENT_SIZE
|
|
841
841
|
);
|
|
842
842
|
const availableHeight = Math.max(
|
|
843
|
-
effectiveEditorDimensions.height -
|
|
844
|
-
|
|
843
|
+
effectiveEditorDimensions.height - chunkHAQDKQ52_js.ZOOM_TO_SELECTION_PADDING,
|
|
844
|
+
chunkHAQDKQ52_js.MIN_ELEMENT_SIZE
|
|
845
845
|
);
|
|
846
846
|
const targetEditorScale = Math.min(
|
|
847
847
|
availableWidth / boundsWidth,
|
|
848
848
|
availableHeight / boundsHeight
|
|
849
849
|
);
|
|
850
850
|
const safeFitScale = fitScale > Number.EPSILON ? fitScale : Number.EPSILON;
|
|
851
|
-
const nextScale =
|
|
851
|
+
const nextScale = chunkMZ47MV52_js.clampZoomScale(targetEditorScale / safeFitScale);
|
|
852
852
|
setScale(nextScale);
|
|
853
853
|
window.requestAnimationFrame(() => {
|
|
854
854
|
window.requestAnimationFrame(() => {
|
|
@@ -865,14 +865,14 @@ function useZoomViewport({
|
|
|
865
865
|
]);
|
|
866
866
|
const handleWheel = react.useCallback(
|
|
867
867
|
(event) => {
|
|
868
|
-
const mapped =
|
|
868
|
+
const mapped = chunkMZ47MV52_js.mapEditingWheel(event, wheelBufferRef.current, true);
|
|
869
869
|
if (mapped.intent !== "zoom") {
|
|
870
870
|
return;
|
|
871
871
|
}
|
|
872
872
|
event.preventDefault();
|
|
873
873
|
store.dispatch({
|
|
874
874
|
type: "set-zoom",
|
|
875
|
-
zoom:
|
|
875
|
+
zoom: chunkMZ47MV52_js.clampZoomScale(store.getState().zoom + mapped.deltaScale)
|
|
876
876
|
});
|
|
877
877
|
},
|
|
878
878
|
[store]
|
|
@@ -960,7 +960,7 @@ function applyAnimationGroupSteps(group, onPlayActionSound, setPresentationEleme
|
|
|
960
960
|
const command = step.command;
|
|
961
961
|
const timer = window.setTimeout(
|
|
962
962
|
() => {
|
|
963
|
-
|
|
963
|
+
chunkHAQDKQ52_js.executeMediaCommand(command);
|
|
964
964
|
},
|
|
965
965
|
Math.max(0, step.delayMs)
|
|
966
966
|
);
|
|
@@ -1097,7 +1097,7 @@ function scheduleEntranceAnimationTimers(slide, setPresentationAnimations, prese
|
|
|
1097
1097
|
}))
|
|
1098
1098
|
);
|
|
1099
1099
|
entranceAnimations.forEach((animation, animationIndex) => {
|
|
1100
|
-
const delay =
|
|
1100
|
+
const delay = chunkMZ47MV52_js.computeEntranceAnimationDelay(animation.delayMs, animationIndex);
|
|
1101
1101
|
const timer = window.setTimeout(() => {
|
|
1102
1102
|
setPresentationAnimations(
|
|
1103
1103
|
(previousAnimations) => previousAnimations.map(
|
|
@@ -1129,7 +1129,7 @@ function useAnimationPlayback(input) {
|
|
|
1129
1129
|
(controller, group) => {
|
|
1130
1130
|
driveBuildReveal(
|
|
1131
1131
|
controller,
|
|
1132
|
-
|
|
1132
|
+
chunkMZ47MV52_js.PresentationAnimationController.collectBuildStepIds(group),
|
|
1133
1133
|
setPresentationElementStates,
|
|
1134
1134
|
buildRafRef
|
|
1135
1135
|
);
|
|
@@ -1192,7 +1192,7 @@ function useAnimationPlayback(input) {
|
|
|
1192
1192
|
setHoverTriggerShapeIds(/* @__PURE__ */ new Set());
|
|
1193
1193
|
return;
|
|
1194
1194
|
}
|
|
1195
|
-
const controller =
|
|
1195
|
+
const controller = chunkMZ47MV52_js.PresentationAnimationController.fromSlide(slide);
|
|
1196
1196
|
controllerRef.current = controller;
|
|
1197
1197
|
setPresentationKeyframesCss(controller.keyframesCss);
|
|
1198
1198
|
setInteractiveTriggerShapeIds(controller.interactiveTriggerShapeIds);
|
|
@@ -1350,12 +1350,12 @@ function useAnimationPlayback(input) {
|
|
|
1350
1350
|
presentationTimersRef
|
|
1351
1351
|
};
|
|
1352
1352
|
}
|
|
1353
|
-
var PRESENTER_CHANNEL_NAME =
|
|
1354
|
-
var AUDIENCE_HASH =
|
|
1355
|
-
var PRESENTER_MSG_ORIGIN =
|
|
1356
|
-
var AUDIENCE_NONCE_KEY =
|
|
1353
|
+
var PRESENTER_CHANNEL_NAME = chunkMZ47MV52_js.PRESENTATION_CHANNEL_NAME;
|
|
1354
|
+
var AUDIENCE_HASH = chunkMZ47MV52_js.PRESENTATION_HASH;
|
|
1355
|
+
var PRESENTER_MSG_ORIGIN = chunkMZ47MV52_js.PRESENTATION_MESSAGE_ORIGIN;
|
|
1356
|
+
var AUDIENCE_NONCE_KEY = chunkMZ47MV52_js.PRESENTATION_NONCE_KEY;
|
|
1357
1357
|
function generateSessionId() {
|
|
1358
|
-
return
|
|
1358
|
+
return chunkMZ47MV52_js.createPresentationSessionId();
|
|
1359
1359
|
}
|
|
1360
1360
|
function parseAudienceNonce() {
|
|
1361
1361
|
const hash = window.location.hash;
|
|
@@ -1391,7 +1391,7 @@ function usePresenterWindow(input) {
|
|
|
1391
1391
|
}, []);
|
|
1392
1392
|
const swapDisplays = react.useCallback(async () => {
|
|
1393
1393
|
const audience = audienceWindowRef.current;
|
|
1394
|
-
return audience && !audience.closed ?
|
|
1394
|
+
return audience && !audience.closed ? chunkMZ47MV52_js.swapPresentationWindows(window, audience) : false;
|
|
1395
1395
|
}, []);
|
|
1396
1396
|
const syncSlideToAudience = react.useCallback(
|
|
1397
1397
|
(slideIndex) => {
|
|
@@ -1455,7 +1455,7 @@ function usePresenterWindow(input) {
|
|
|
1455
1455
|
pollTimerRef.current = null;
|
|
1456
1456
|
}
|
|
1457
1457
|
if (closingSessionId) {
|
|
1458
|
-
void
|
|
1458
|
+
void chunkMZ47MV52_js.clearAudienceContent(closingSessionId);
|
|
1459
1459
|
}
|
|
1460
1460
|
}, [getChannel]);
|
|
1461
1461
|
const openAudienceWindow = react.useCallback(() => {
|
|
@@ -1473,10 +1473,10 @@ function usePresenterWindow(input) {
|
|
|
1473
1473
|
audienceWindowRef.current = blankWin;
|
|
1474
1474
|
const sessionId = generateSessionId();
|
|
1475
1475
|
sessionIdRef.current = sessionId;
|
|
1476
|
-
const audienceUrl =
|
|
1477
|
-
void
|
|
1476
|
+
const audienceUrl = chunkMZ47MV52_js.buildPresentationAudienceUrl(window.location.href, sessionId);
|
|
1477
|
+
void chunkMZ47MV52_js.resolveAudienceScreenPlacement(window).then((placement) => {
|
|
1478
1478
|
if (placement && audienceWindowRef.current === blankWin && !blankWin.closed) {
|
|
1479
|
-
|
|
1479
|
+
chunkMZ47MV52_js.placeAudienceWindow(blankWin, placement);
|
|
1480
1480
|
}
|
|
1481
1481
|
return void 0;
|
|
1482
1482
|
});
|
|
@@ -1506,7 +1506,7 @@ function usePresenterWindow(input) {
|
|
|
1506
1506
|
}
|
|
1507
1507
|
};
|
|
1508
1508
|
if (content) {
|
|
1509
|
-
void
|
|
1509
|
+
void chunkMZ47MV52_js.storeAudienceContent(content, sessionId).then(() => navigateOrClose(true)).catch(() => navigateOrClose(false));
|
|
1510
1510
|
} else {
|
|
1511
1511
|
navigateOrClose(true);
|
|
1512
1512
|
}
|
|
@@ -1532,7 +1532,7 @@ function usePresenterWindow(input) {
|
|
|
1532
1532
|
}
|
|
1533
1533
|
const handleMessage = (event) => {
|
|
1534
1534
|
const message = event.data;
|
|
1535
|
-
if (
|
|
1535
|
+
if (chunkMZ47MV52_js.isPresentationSessionMessage(message) && message.type === "audience-ready" && message.sessionId === sessionIdRef.current) {
|
|
1536
1536
|
syncStateToAudience(snapshotRef.current);
|
|
1537
1537
|
}
|
|
1538
1538
|
};
|
|
@@ -1561,7 +1561,7 @@ function usePresenterWindow(input) {
|
|
|
1561
1561
|
react.useEffect(() => {
|
|
1562
1562
|
const handleBeforeUnload = () => {
|
|
1563
1563
|
if (sessionIdRef.current) {
|
|
1564
|
-
void
|
|
1564
|
+
void chunkMZ47MV52_js.clearAudienceContent(sessionIdRef.current);
|
|
1565
1565
|
}
|
|
1566
1566
|
};
|
|
1567
1567
|
window.addEventListener("beforeunload", handleBeforeUnload);
|
|
@@ -1623,7 +1623,7 @@ function useAudienceMode(input) {
|
|
|
1623
1623
|
}
|
|
1624
1624
|
channel.onmessage = (event) => {
|
|
1625
1625
|
const data = event.data;
|
|
1626
|
-
if (!
|
|
1626
|
+
if (!chunkMZ47MV52_js.isPresentationSessionMessage(data) || data.origin !== PRESENTER_MSG_ORIGIN) {
|
|
1627
1627
|
return;
|
|
1628
1628
|
}
|
|
1629
1629
|
if (expectedSessionId && data.sessionId !== expectedSessionId) {
|
|
@@ -1639,16 +1639,16 @@ function useAudienceMode(input) {
|
|
|
1639
1639
|
}
|
|
1640
1640
|
if (data.type === "presenter-exit") {
|
|
1641
1641
|
if (expectedSessionId) {
|
|
1642
|
-
void
|
|
1642
|
+
void chunkMZ47MV52_js.clearAudienceContent(expectedSessionId);
|
|
1643
1643
|
}
|
|
1644
|
-
if (
|
|
1644
|
+
if (chunkMZ47MV52_js.endAudienceDisplay(window)) {
|
|
1645
1645
|
handlers.onPresenterEnded?.();
|
|
1646
1646
|
}
|
|
1647
1647
|
}
|
|
1648
1648
|
};
|
|
1649
1649
|
if (expectedSessionId) {
|
|
1650
1650
|
channel.postMessage({
|
|
1651
|
-
origin:
|
|
1651
|
+
origin: chunkMZ47MV52_js.PRESENTATION_MESSAGE_ORIGIN,
|
|
1652
1652
|
type: "audience-ready",
|
|
1653
1653
|
sessionId: expectedSessionId
|
|
1654
1654
|
});
|
|
@@ -1662,7 +1662,7 @@ function useAudienceMode(input) {
|
|
|
1662
1662
|
}, []);
|
|
1663
1663
|
}
|
|
1664
1664
|
function usePresentationKeyboard(input) {
|
|
1665
|
-
const wheelBufferRef = react.useRef(
|
|
1665
|
+
const wheelBufferRef = react.useRef(chunkMZ47MV52_js.createWheelStepBuffer());
|
|
1666
1666
|
const {
|
|
1667
1667
|
mode,
|
|
1668
1668
|
movePresentationSlide,
|
|
@@ -1682,14 +1682,14 @@ function usePresentationKeyboard(input) {
|
|
|
1682
1682
|
presentationSlideIndex,
|
|
1683
1683
|
setShowRehearsalSummary
|
|
1684
1684
|
} = input;
|
|
1685
|
-
const keyBufferRef = react.useRef(
|
|
1685
|
+
const keyBufferRef = react.useRef(chunkMZ47MV52_js.createPresentationKeyBuffer());
|
|
1686
1686
|
react.useEffect(() => {
|
|
1687
|
-
if (mode !== "present" || !
|
|
1688
|
-
keyBufferRef.current =
|
|
1687
|
+
if (mode !== "present" || !chunkMZ47MV52_js.acceptsPresentationInput()) {
|
|
1688
|
+
keyBufferRef.current = chunkMZ47MV52_js.createPresentationKeyBuffer();
|
|
1689
1689
|
return;
|
|
1690
1690
|
}
|
|
1691
1691
|
const handleKeyDown = (event) => {
|
|
1692
|
-
const mapped =
|
|
1692
|
+
const mapped = chunkMZ47MV52_js.mapPresentationKey(event, keyBufferRef.current);
|
|
1693
1693
|
if (mapped.action === "none") {
|
|
1694
1694
|
return;
|
|
1695
1695
|
}
|
|
@@ -1709,12 +1709,12 @@ function usePresentationKeyboard(input) {
|
|
|
1709
1709
|
movePresentationSlide(-1);
|
|
1710
1710
|
return;
|
|
1711
1711
|
case "first": {
|
|
1712
|
-
const first =
|
|
1712
|
+
const first = chunkMZ47MV52_js.firstShowSlideIndex(showSlideIndexes);
|
|
1713
1713
|
navigateToSlide(first ?? 0);
|
|
1714
1714
|
return;
|
|
1715
1715
|
}
|
|
1716
1716
|
case "last": {
|
|
1717
|
-
const last =
|
|
1717
|
+
const last = chunkMZ47MV52_js.lastShowSlideIndex(showSlideIndexes);
|
|
1718
1718
|
navigateToSlide(last ?? Math.max(0, slideCount - 1));
|
|
1719
1719
|
return;
|
|
1720
1720
|
}
|
|
@@ -1749,10 +1749,10 @@ function usePresentationKeyboard(input) {
|
|
|
1749
1749
|
}
|
|
1750
1750
|
};
|
|
1751
1751
|
const handleWheel = (event) => {
|
|
1752
|
-
if (mode !== "present" || !
|
|
1752
|
+
if (mode !== "present" || !chunkMZ47MV52_js.acceptsPresentationInput()) {
|
|
1753
1753
|
return;
|
|
1754
1754
|
}
|
|
1755
|
-
const mapped =
|
|
1755
|
+
const mapped = chunkMZ47MV52_js.mapPresentationWheel(event, wheelBufferRef.current);
|
|
1756
1756
|
if (mapped.intent === "next-slide") {
|
|
1757
1757
|
event.preventDefault();
|
|
1758
1758
|
movePresentationSlide(1);
|
|
@@ -1884,7 +1884,7 @@ function useRehearsalTimings(input) {
|
|
|
1884
1884
|
|
|
1885
1885
|
// src/viewer/hooks/presentation-mode/presentation-actions.ts
|
|
1886
1886
|
function handlePresentationActionImpl(action, deps) {
|
|
1887
|
-
|
|
1887
|
+
chunkMZ47MV52_js.runPresentationAction(
|
|
1888
1888
|
action,
|
|
1889
1889
|
{ slideCount: deps.slidesLength },
|
|
1890
1890
|
{
|
|
@@ -1906,7 +1906,7 @@ function handlePresentationActionImpl(action, deps) {
|
|
|
1906
1906
|
function executeSlideTransition(nextSlideIndex, deps) {
|
|
1907
1907
|
const incomingSlide = deps.slides[nextSlideIndex];
|
|
1908
1908
|
const transition = incomingSlide?.transition;
|
|
1909
|
-
const durationMs = deps.playTransition ?
|
|
1909
|
+
const durationMs = deps.playTransition ? chunkMZ47MV52_js.resolveTransitionDurationMs(transition) : 0;
|
|
1910
1910
|
deps.clearPresentationTimers();
|
|
1911
1911
|
deps.setPresentationSlideIndex(nextSlideIndex);
|
|
1912
1912
|
deps.onSetActiveSlideIndex(nextSlideIndex);
|
|
@@ -1965,7 +1965,7 @@ function useSlideNavigation(input) {
|
|
|
1965
1965
|
});
|
|
1966
1966
|
const scheduleAutoAdvanceForSlide = react.useCallback(
|
|
1967
1967
|
(slideIndex) => {
|
|
1968
|
-
const delayMs =
|
|
1968
|
+
const delayMs = chunkMZ47MV52_js.resolveAutoAdvanceDelayMs(slides[slideIndex], { useTimings });
|
|
1969
1969
|
if (delayMs === void 0) {
|
|
1970
1970
|
return;
|
|
1971
1971
|
}
|
|
@@ -1988,7 +1988,7 @@ function useSlideNavigation(input) {
|
|
|
1988
1988
|
if (availableSlideIndexes.length === 0) {
|
|
1989
1989
|
return;
|
|
1990
1990
|
}
|
|
1991
|
-
const pastLastSlide = direction === 1 && !
|
|
1991
|
+
const pastLastSlide = direction === 1 && !chunkMZ47MV52_js.hasShowSlideAfter(presentationSlideIndex, availableSlideIndexes);
|
|
1992
1992
|
if (rehearsing && pastLastSlide) {
|
|
1993
1993
|
recordCurrentSlideTime(presentationSlideIndex);
|
|
1994
1994
|
try {
|
|
@@ -2006,9 +2006,9 @@ function useSlideNavigation(input) {
|
|
|
2006
2006
|
onAdvancePastLastSlide();
|
|
2007
2007
|
return;
|
|
2008
2008
|
}
|
|
2009
|
-
const nextSlideIndex = direction === 1 ?
|
|
2009
|
+
const nextSlideIndex = direction === 1 ? chunkMZ47MV52_js.nextShowSlideIndex(presentationSlideIndex, availableSlideIndexes, {
|
|
2010
2010
|
loop: Boolean(loopContinuously) && !rehearsing
|
|
2011
|
-
}) :
|
|
2011
|
+
}) : chunkMZ47MV52_js.previousShowSlideIndex(presentationSlideIndex, availableSlideIndexes);
|
|
2012
2012
|
if (nextSlideIndex === void 0 || nextSlideIndex === presentationSlideIndex) {
|
|
2013
2013
|
return;
|
|
2014
2014
|
}
|
|
@@ -2153,22 +2153,22 @@ function useZoomNavigation(input) {
|
|
|
2153
2153
|
};
|
|
2154
2154
|
}
|
|
2155
2155
|
function usePresenterConsole(slideIndex, active) {
|
|
2156
|
-
const timerRef = react.useRef(
|
|
2157
|
-
const [snapshot, setSnapshot] = react.useState(() =>
|
|
2156
|
+
const timerRef = react.useRef(chunkMZ47MV52_js.createPresenterTimer());
|
|
2157
|
+
const [snapshot, setSnapshot] = react.useState(() => chunkMZ47MV52_js.createInitialPresentationSnapshot(slideIndex));
|
|
2158
2158
|
const patch = react.useCallback((value) => {
|
|
2159
|
-
setSnapshot((current) =>
|
|
2159
|
+
setSnapshot((current) => chunkMZ47MV52_js.mergePresentationSnapshot(current, value));
|
|
2160
2160
|
}, []);
|
|
2161
2161
|
react.useEffect(() => patch({ slideIndex }), [patch, slideIndex]);
|
|
2162
2162
|
react.useEffect(() => {
|
|
2163
2163
|
if (!active) {
|
|
2164
2164
|
return;
|
|
2165
2165
|
}
|
|
2166
|
-
timerRef.current =
|
|
2166
|
+
timerRef.current = chunkMZ47MV52_js.resetPresenterTimer();
|
|
2167
2167
|
patch({ paused: false, elapsedMs: 0 });
|
|
2168
2168
|
const timer = window.setInterval(() => {
|
|
2169
2169
|
patch({
|
|
2170
2170
|
paused: timerRef.current.paused,
|
|
2171
|
-
elapsedMs:
|
|
2171
|
+
elapsedMs: chunkMZ47MV52_js.presenterElapsed(timerRef.current)
|
|
2172
2172
|
});
|
|
2173
2173
|
}, 1e3);
|
|
2174
2174
|
return () => window.clearInterval(timer);
|
|
@@ -2178,19 +2178,19 @@ function usePresenterConsole(slideIndex, active) {
|
|
|
2178
2178
|
applyAudienceSnapshot: setSnapshot,
|
|
2179
2179
|
setBlackout: (blackout) => patch({ blackout }),
|
|
2180
2180
|
toggleTimer: () => {
|
|
2181
|
-
timerRef.current =
|
|
2181
|
+
timerRef.current = chunkMZ47MV52_js.togglePresenterTimer(timerRef.current);
|
|
2182
2182
|
patch({
|
|
2183
2183
|
paused: timerRef.current.paused,
|
|
2184
|
-
elapsedMs:
|
|
2184
|
+
elapsedMs: chunkMZ47MV52_js.presenterElapsed(timerRef.current)
|
|
2185
2185
|
});
|
|
2186
2186
|
},
|
|
2187
2187
|
resetTimer: () => {
|
|
2188
|
-
timerRef.current =
|
|
2188
|
+
timerRef.current = chunkMZ47MV52_js.resetPresenterTimer();
|
|
2189
2189
|
patch({ paused: false, elapsedMs: 0 });
|
|
2190
2190
|
},
|
|
2191
2191
|
stepZoom: (direction) => setSnapshot(
|
|
2192
|
-
(current) =>
|
|
2193
|
-
zoom:
|
|
2192
|
+
(current) => chunkMZ47MV52_js.mergePresentationSnapshot(current, {
|
|
2193
|
+
zoom: chunkMZ47MV52_js.stepPresenterZoom(
|
|
2194
2194
|
current.zoom ?? { scale: 1, originX: 0.5, originY: 0.5 },
|
|
2195
2195
|
direction
|
|
2196
2196
|
)
|
|
@@ -2235,7 +2235,7 @@ function usePresentationMode(input) {
|
|
|
2235
2235
|
const [allSlidesOpen, setAllSlidesOpen] = react.useState(false);
|
|
2236
2236
|
const [endOfShowVisible, setEndOfShowVisible] = react.useState(false);
|
|
2237
2237
|
const [presentationStartTime, setPresentationStartTime] = react.useState(null);
|
|
2238
|
-
const showGuard = react.useMemo(() =>
|
|
2238
|
+
const showGuard = react.useMemo(() => chunkMZ47MV52_js.createPresenterShowGuard(), []);
|
|
2239
2239
|
const {
|
|
2240
2240
|
presentationAnimations,
|
|
2241
2241
|
presentationElementStates,
|
|
@@ -2314,7 +2314,7 @@ function usePresentationMode(input) {
|
|
|
2314
2314
|
});
|
|
2315
2315
|
const movePresentationSlide = react.useCallback(
|
|
2316
2316
|
(direction, trigger = "explicit") => {
|
|
2317
|
-
if (!
|
|
2317
|
+
if (!chunkMZ47MV52_js.acceptsPresentationInput()) {
|
|
2318
2318
|
return;
|
|
2319
2319
|
}
|
|
2320
2320
|
if (endOfShowVisible) {
|
|
@@ -2451,7 +2451,7 @@ function usePresentationMode(input) {
|
|
|
2451
2451
|
if (mode !== "present") {
|
|
2452
2452
|
return;
|
|
2453
2453
|
}
|
|
2454
|
-
return
|
|
2454
|
+
return chunkMZ47MV52_js.attachPresentationVisibilityPause({
|
|
2455
2455
|
root: containerRef.current ?? void 0,
|
|
2456
2456
|
onHidden: () => clearPresentationTimersRef.current(),
|
|
2457
2457
|
onVisible: () => scheduleAutoAdvanceRef.current(presentationSlideIndexRef.current)
|
|
@@ -2531,11 +2531,11 @@ function usePresentationMode(input) {
|
|
|
2531
2531
|
if (!transitionOverlay || transitionOverlay.transition.type !== "morph") {
|
|
2532
2532
|
return void 0;
|
|
2533
2533
|
}
|
|
2534
|
-
return
|
|
2534
|
+
return chunkMZ47MV52_js.buildMorphTransitionPlan(
|
|
2535
2535
|
slides[transitionOverlay.outgoingSlideIndex],
|
|
2536
2536
|
slides[transitionOverlay.incomingSlideIndex],
|
|
2537
2537
|
transitionOverlay.durationMs,
|
|
2538
|
-
|
|
2538
|
+
chunkMZ47MV52_js.morphOptionToMode(transitionOverlay.transition.morphOption)
|
|
2539
2539
|
);
|
|
2540
2540
|
}, [transitionOverlay, slides]);
|
|
2541
2541
|
const morphedElementStates = react.useMemo(() => {
|
|
@@ -2556,7 +2556,7 @@ function usePresentationMode(input) {
|
|
|
2556
2556
|
if (!morphPlan) {
|
|
2557
2557
|
return presentationKeyframesCss;
|
|
2558
2558
|
}
|
|
2559
|
-
const imageRules =
|
|
2559
|
+
const imageRules = chunkMZ47MV52_js.buildMorphAnimationRules(morphPlan, "", "incoming", "image");
|
|
2560
2560
|
return `${presentationKeyframesCss ?? ""}
|
|
2561
2561
|
${morphPlan.keyframesCss}
|
|
2562
2562
|
${imageRules}`;
|
|
@@ -2845,7 +2845,7 @@ function findInSlides(slides, findQuery, findMatchCase) {
|
|
|
2845
2845
|
const normalised = findMatchCase ? findQuery : findQuery.toLowerCase();
|
|
2846
2846
|
slides.forEach((slide, slideIndex) => {
|
|
2847
2847
|
for (const element of slide.elements || []) {
|
|
2848
|
-
if (!
|
|
2848
|
+
if (!chunkMZ47MV52_js.hasTextProperties(element)) {
|
|
2849
2849
|
continue;
|
|
2850
2850
|
}
|
|
2851
2851
|
const segments = element.textSegments ?? [];
|
|
@@ -2896,7 +2896,7 @@ function applyFindReplacements(slides, toReplace, replaceQuery) {
|
|
|
2896
2896
|
continue;
|
|
2897
2897
|
}
|
|
2898
2898
|
const element = slide.elements[elIdx];
|
|
2899
|
-
if (!
|
|
2899
|
+
if (!chunkMZ47MV52_js.hasTextProperties(element)) {
|
|
2900
2900
|
continue;
|
|
2901
2901
|
}
|
|
2902
2902
|
const segments = [...element.textSegments ?? []];
|
|
@@ -3494,7 +3494,8 @@ function useViewerCoreState(_input) {
|
|
|
3494
3494
|
const shapeAdjustmentDragStateRef = react.useRef(null);
|
|
3495
3495
|
const marqueeStateRef = react.useRef(null);
|
|
3496
3496
|
const isDrawingRef = react.useRef(false);
|
|
3497
|
-
const
|
|
3497
|
+
const justInteractedRef = react.useRef(false);
|
|
3498
|
+
const livePatcher = react.useMemo(() => chunkMZ47MV52_js.createCollaborationLivePatcher(), []);
|
|
3498
3499
|
react.useEffect(() => () => livePatcher.dispose(), [livePatcher]);
|
|
3499
3500
|
const slidesRef = react.useRef([]);
|
|
3500
3501
|
const [mode, setMode] = react.useState("edit");
|
|
@@ -3503,8 +3504,8 @@ function useViewerCoreState(_input) {
|
|
|
3503
3504
|
const [slides, setSlides] = react.useState([]);
|
|
3504
3505
|
const [templateElementsBySlideId, setTemplateElementsBySlideId] = react.useState({});
|
|
3505
3506
|
const [canvasSize, setCanvasSize] = react.useState({
|
|
3506
|
-
width:
|
|
3507
|
-
height:
|
|
3507
|
+
width: chunkHAQDKQ52_js.DEFAULT_CANVAS_WIDTH,
|
|
3508
|
+
height: chunkHAQDKQ52_js.DEFAULT_CANVAS_HEIGHT
|
|
3508
3509
|
});
|
|
3509
3510
|
const [activeSlideIndex, setActiveSlideIndex] = react.useState(0);
|
|
3510
3511
|
const [selectedElementId, setSelectedElementId] = react.useState(null);
|
|
@@ -3524,7 +3525,7 @@ function useViewerCoreState(_input) {
|
|
|
3524
3525
|
const resolved = typeof value === "function" ? value(inlineEditingTextRef.current) : value;
|
|
3525
3526
|
inlineEditingTextRef.current = resolved;
|
|
3526
3527
|
setInlineEditingTextBase(value);
|
|
3527
|
-
|
|
3528
|
+
chunkMZ47MV52_js.publishLiveInlineText(
|
|
3528
3529
|
livePatcher,
|
|
3529
3530
|
slidesRef.current[activeSlideIndexRef.current],
|
|
3530
3531
|
inlineEditingElementIdRef.current,
|
|
@@ -3590,6 +3591,7 @@ function useViewerCoreState(_input) {
|
|
|
3590
3591
|
shapeAdjustmentDragStateRef,
|
|
3591
3592
|
marqueeStateRef,
|
|
3592
3593
|
isDrawingRef,
|
|
3594
|
+
justInteractedRef,
|
|
3593
3595
|
livePatcher,
|
|
3594
3596
|
mode,
|
|
3595
3597
|
setMode,
|
|
@@ -3858,7 +3860,7 @@ function useLoadContent({
|
|
|
3858
3860
|
);
|
|
3859
3861
|
}
|
|
3860
3862
|
const previousHandler = handlerRef.current;
|
|
3861
|
-
const handler = new
|
|
3863
|
+
const handler = new chunkMZ47MV52_js.PptxHandler();
|
|
3862
3864
|
const parsed = await handler.load(buffer);
|
|
3863
3865
|
if (cancelled || token !== renderTokenRef.current) {
|
|
3864
3866
|
handler.dispose();
|
|
@@ -3870,7 +3872,7 @@ function useLoadContent({
|
|
|
3870
3872
|
handlerRef.current = null;
|
|
3871
3873
|
const mediaElements = [];
|
|
3872
3874
|
for (const slide of parsed.slides) {
|
|
3873
|
-
|
|
3875
|
+
chunkMZ47MV52_js.collectMediaElements(slide.elements, mediaElements);
|
|
3874
3876
|
}
|
|
3875
3877
|
for (const url of mediaDataUrls.values()) {
|
|
3876
3878
|
if (url.startsWith("blob:")) {
|
|
@@ -3911,7 +3913,7 @@ function useLoadContent({
|
|
|
3911
3913
|
}
|
|
3912
3914
|
})
|
|
3913
3915
|
);
|
|
3914
|
-
const { paths: imagePaths, refs: imageRefs } =
|
|
3916
|
+
const { paths: imagePaths, refs: imageRefs } = chunkMZ47MV52_js.collectImagePaths(parsed.slides);
|
|
3915
3917
|
let nextSlides = parsed.slides;
|
|
3916
3918
|
if (imagePaths.size > 0) {
|
|
3917
3919
|
const resolvedMap = /* @__PURE__ */ new Map();
|
|
@@ -3966,12 +3968,12 @@ function useLoadContent({
|
|
|
3966
3968
|
}
|
|
3967
3969
|
}
|
|
3968
3970
|
handlerRef.current = handler;
|
|
3969
|
-
const partition =
|
|
3971
|
+
const partition = chunkHAQDKQ52_js.partitionTemplateElements(nextSlides);
|
|
3970
3972
|
setSlides(partition.slides);
|
|
3971
3973
|
setTemplateElementsBySlideId(partition.templateElementsBySlideId);
|
|
3972
3974
|
setCanvasSize({
|
|
3973
|
-
width: parsed.width ??
|
|
3974
|
-
height: parsed.height ??
|
|
3975
|
+
width: parsed.width ?? chunkHAQDKQ52_js.DEFAULT_CANVAS_WIDTH,
|
|
3976
|
+
height: parsed.height ?? chunkHAQDKQ52_js.DEFAULT_CANVAS_HEIGHT
|
|
3975
3977
|
});
|
|
3976
3978
|
setHeaderFooter(parsed.headerFooter ?? {});
|
|
3977
3979
|
setLayoutOptions(parsed.layoutOptions ?? []);
|
|
@@ -4000,7 +4002,7 @@ function useLoadContent({
|
|
|
4000
4002
|
setHasMacros(parsed.hasMacros === true);
|
|
4001
4003
|
setHasDigitalSignatures(parsed.hasDigitalSignatures === true);
|
|
4002
4004
|
setDigitalSignatureCount(parsed.digitalSignatureCount ?? 0);
|
|
4003
|
-
setGuides(
|
|
4005
|
+
setGuides(chunkMZ47MV52_js.buildInitialGuides(parsed.presentationGuides, parsed.slides[0]?.guides));
|
|
4004
4006
|
setActiveSlideIndex(0);
|
|
4005
4007
|
clearSelection();
|
|
4006
4008
|
setIsDirty(false);
|
|
@@ -4008,7 +4010,7 @@ function useLoadContent({
|
|
|
4008
4010
|
onContentApplied?.();
|
|
4009
4011
|
} catch (err) {
|
|
4010
4012
|
if (!cancelled && token === renderTokenRef.current) {
|
|
4011
|
-
if (err instanceof
|
|
4013
|
+
if (err instanceof chunkMZ47MV52_js.EncryptedFileError) {
|
|
4012
4014
|
setIsEncrypted(true);
|
|
4013
4015
|
} else {
|
|
4014
4016
|
setError(err instanceof Error ? err.message : String(err));
|
|
@@ -4085,7 +4087,7 @@ function useAutosave(input) {
|
|
|
4085
4087
|
isSavingRef.current = false;
|
|
4086
4088
|
return;
|
|
4087
4089
|
}
|
|
4088
|
-
await
|
|
4090
|
+
await chunkMZ47MV52_js.saveAutosaveSnapshot(filePathRef.current, data);
|
|
4089
4091
|
setAutosaveStatus({ state: "saved", timestamp: Date.now() });
|
|
4090
4092
|
} catch (err) {
|
|
4091
4093
|
setAutosaveStatus({
|
|
@@ -4150,7 +4152,7 @@ function useElementOperations(input) {
|
|
|
4150
4152
|
}, [applySelection, setInlineEditingElementId, setContextMenuState]);
|
|
4151
4153
|
const updateElementById = react.useCallback(
|
|
4152
4154
|
(elementId, updates) => {
|
|
4153
|
-
if (
|
|
4155
|
+
if (chunkMZ47MV52_js.isTemplateElementId(elementId)) {
|
|
4154
4156
|
const slideId = activeSlide?.id;
|
|
4155
4157
|
if (slideId) {
|
|
4156
4158
|
setTemplateElementsBySlideId((prev) => ({
|
|
@@ -4190,7 +4192,7 @@ function useElementOperations(input) {
|
|
|
4190
4192
|
);
|
|
4191
4193
|
const updateSelectedShapeStyle = react.useCallback(
|
|
4192
4194
|
(updates) => {
|
|
4193
|
-
if (!selectedElement || !
|
|
4195
|
+
if (!selectedElement || !chunkMZ47MV52_js.hasShapeProperties(selectedElement)) {
|
|
4194
4196
|
return;
|
|
4195
4197
|
}
|
|
4196
4198
|
updateSelectedElement({
|
|
@@ -4201,17 +4203,17 @@ function useElementOperations(input) {
|
|
|
4201
4203
|
);
|
|
4202
4204
|
const updateSelectedTextStyle = react.useCallback(
|
|
4203
4205
|
(updates) => {
|
|
4204
|
-
if (!selectedElement || !
|
|
4206
|
+
if (!selectedElement || !chunkMZ47MV52_js.hasTextProperties(selectedElement)) {
|
|
4205
4207
|
return;
|
|
4206
4208
|
}
|
|
4207
|
-
const inlineSel =
|
|
4209
|
+
const inlineSel = chunkMZ47MV52_js.getInlineEditorSelection(selectedElement.textSegments);
|
|
4208
4210
|
if (inlineSel && selectedElement.textSegments) {
|
|
4209
|
-
const { newSegments: newSegments2, newSelection } =
|
|
4211
|
+
const { newSegments: newSegments2, newSelection } = chunkMZ47MV52_js.applyStyleToSelectedSegments(
|
|
4210
4212
|
selectedElement.textSegments,
|
|
4211
4213
|
inlineSel,
|
|
4212
4214
|
updates
|
|
4213
4215
|
);
|
|
4214
|
-
|
|
4216
|
+
chunkMZ47MV52_js.setPendingSelectionRestore(newSelection);
|
|
4215
4217
|
updateSelectedElement({
|
|
4216
4218
|
textSegments: newSegments2
|
|
4217
4219
|
});
|
|
@@ -4231,12 +4233,12 @@ function useElementOperations(input) {
|
|
|
4231
4233
|
);
|
|
4232
4234
|
const updateSelectedTextCase = react.useCallback(
|
|
4233
4235
|
(mode) => {
|
|
4234
|
-
if (!selectedElement || !
|
|
4236
|
+
if (!selectedElement || !chunkMZ47MV52_js.hasTextProperties(selectedElement)) {
|
|
4235
4237
|
return;
|
|
4236
4238
|
}
|
|
4237
|
-
const inlineSel =
|
|
4239
|
+
const inlineSel = chunkMZ47MV52_js.getInlineEditorSelection(selectedElement.textSegments);
|
|
4238
4240
|
if (inlineSel && selectedElement.textSegments) {
|
|
4239
|
-
const newSegments =
|
|
4241
|
+
const newSegments = chunkMZ47MV52_js.applyCaseTransformToSegments(
|
|
4240
4242
|
selectedElement.textSegments,
|
|
4241
4243
|
inlineSel,
|
|
4242
4244
|
mode
|
|
@@ -4246,14 +4248,14 @@ function useElementOperations(input) {
|
|
|
4246
4248
|
}
|
|
4247
4249
|
const updates = {};
|
|
4248
4250
|
if (selectedElement.textSegments && selectedElement.textSegments.length > 0) {
|
|
4249
|
-
updates.textSegments =
|
|
4251
|
+
updates.textSegments = chunkMZ47MV52_js.applyCaseTransformToSegments(
|
|
4250
4252
|
selectedElement.textSegments,
|
|
4251
4253
|
null,
|
|
4252
4254
|
mode
|
|
4253
4255
|
);
|
|
4254
4256
|
}
|
|
4255
4257
|
if (typeof selectedElement.text === "string") {
|
|
4256
|
-
updates.text =
|
|
4258
|
+
updates.text = chunkMZ47MV52_js.transformTextCase(selectedElement.text, mode);
|
|
4257
4259
|
}
|
|
4258
4260
|
updateSelectedElement(updates);
|
|
4259
4261
|
},
|
|
@@ -4308,7 +4310,7 @@ function useSectionOperations(input) {
|
|
|
4308
4310
|
const { sections, setSections, slides, setSlides, markDirty } = input;
|
|
4309
4311
|
const addSection2 = react.useCallback(
|
|
4310
4312
|
(name, afterSlideIndex) => {
|
|
4311
|
-
const result =
|
|
4313
|
+
const result = chunkMZ47MV52_js.addSection(sections, slides, name, afterSlideIndex);
|
|
4312
4314
|
setSlides(result.slides);
|
|
4313
4315
|
setSections(result.sections);
|
|
4314
4316
|
markDirty();
|
|
@@ -4317,7 +4319,7 @@ function useSectionOperations(input) {
|
|
|
4317
4319
|
);
|
|
4318
4320
|
const renameSection2 = react.useCallback(
|
|
4319
4321
|
(sectionId, newName) => {
|
|
4320
|
-
const result =
|
|
4322
|
+
const result = chunkMZ47MV52_js.renameSection(sections, slides, sectionId, newName);
|
|
4321
4323
|
setSections(result.sections);
|
|
4322
4324
|
setSlides(result.slides);
|
|
4323
4325
|
markDirty();
|
|
@@ -4326,7 +4328,7 @@ function useSectionOperations(input) {
|
|
|
4326
4328
|
);
|
|
4327
4329
|
const deleteSection2 = react.useCallback(
|
|
4328
4330
|
(sectionId) => {
|
|
4329
|
-
const result =
|
|
4331
|
+
const result = chunkMZ47MV52_js.deleteSection(sections, slides, sectionId);
|
|
4330
4332
|
setSections(result.sections);
|
|
4331
4333
|
setSlides(result.slides);
|
|
4332
4334
|
markDirty();
|
|
@@ -4335,21 +4337,21 @@ function useSectionOperations(input) {
|
|
|
4335
4337
|
);
|
|
4336
4338
|
const moveSectionUp2 = react.useCallback(
|
|
4337
4339
|
(sectionId) => {
|
|
4338
|
-
setSections(
|
|
4340
|
+
setSections(chunkMZ47MV52_js.moveSectionUp(sections, sectionId));
|
|
4339
4341
|
markDirty();
|
|
4340
4342
|
},
|
|
4341
4343
|
[sections, setSections, markDirty]
|
|
4342
4344
|
);
|
|
4343
4345
|
const moveSectionDown2 = react.useCallback(
|
|
4344
4346
|
(sectionId) => {
|
|
4345
|
-
setSections(
|
|
4347
|
+
setSections(chunkMZ47MV52_js.moveSectionDown(sections, sectionId));
|
|
4346
4348
|
markDirty();
|
|
4347
4349
|
},
|
|
4348
4350
|
[sections, setSections, markDirty]
|
|
4349
4351
|
);
|
|
4350
4352
|
const moveSlidesToSection2 = react.useCallback(
|
|
4351
4353
|
(slideIndexes, targetSectionId) => {
|
|
4352
|
-
const result =
|
|
4354
|
+
const result = chunkMZ47MV52_js.moveSlidesToSection(sections, slides, slideIndexes, targetSectionId);
|
|
4353
4355
|
setSlides(result.slides);
|
|
4354
4356
|
setSections(result.sections);
|
|
4355
4357
|
markDirty();
|
|
@@ -4368,19 +4370,19 @@ function useSectionOperations(input) {
|
|
|
4368
4370
|
|
|
4369
4371
|
// src/viewer/hooks/pointer-move-handlers.ts
|
|
4370
4372
|
function computeResizeGeometry(handle, startX, startY, startWidth, startHeight, dx, dy, snapToGrid, gridSpacingPx) {
|
|
4371
|
-
const resized =
|
|
4373
|
+
const resized = chunkMZ47MV52_js.applyResize(
|
|
4372
4374
|
{ x: startX, y: startY, width: startWidth, height: startHeight },
|
|
4373
4375
|
handle,
|
|
4374
4376
|
dx,
|
|
4375
4377
|
dy,
|
|
4376
4378
|
1,
|
|
4377
|
-
{ minSize:
|
|
4379
|
+
{ minSize: chunkHAQDKQ52_js.MIN_ELEMENT_SIZE }
|
|
4378
4380
|
);
|
|
4379
4381
|
const box = { x: resized.x, y: resized.y, width: resized.width, height: resized.height };
|
|
4380
4382
|
if (!snapToGrid) {
|
|
4381
4383
|
return box;
|
|
4382
4384
|
}
|
|
4383
|
-
return
|
|
4385
|
+
return chunkMZ47MV52_js.snapBoxToGrid(box, handle, gridSpacingPx, chunkHAQDKQ52_js.MIN_ELEMENT_SIZE);
|
|
4384
4386
|
}
|
|
4385
4387
|
function computeAdjustmentValue(startAdjustment, dx, startWidth) {
|
|
4386
4388
|
const range = startWidth || 200;
|
|
@@ -4498,7 +4500,7 @@ function processDragMove(e, drag, editorScale, snapToGrid, snapToShape, gridSpac
|
|
|
4498
4500
|
width: el.width,
|
|
4499
4501
|
height: el.height
|
|
4500
4502
|
}));
|
|
4501
|
-
const snapResult =
|
|
4503
|
+
const snapResult = chunkMZ47MV52_js.computeSnapToShape(
|
|
4502
4504
|
targetX,
|
|
4503
4505
|
targetY,
|
|
4504
4506
|
primaryEl.width,
|
|
@@ -4537,7 +4539,7 @@ function processDragMove(e, drag, editorScale, snapToGrid, snapToShape, gridSpac
|
|
|
4537
4539
|
if (live) {
|
|
4538
4540
|
for (const id of Object.keys(drag.startPositionsById)) {
|
|
4539
4541
|
const start = drag.startPositionsById[id];
|
|
4540
|
-
|
|
4542
|
+
chunkMZ47MV52_js.publishLiveGeometry(live.patcher, live.slideId, id, {
|
|
4541
4543
|
x: start.x + appliedDx,
|
|
4542
4544
|
y: start.y + appliedDy
|
|
4543
4545
|
});
|
|
@@ -4571,15 +4573,15 @@ function processResizeMove(e, rs, editorScale, snapToGrid, gridSpacingPx, live)
|
|
|
4571
4573
|
if (rs.domEl) {
|
|
4572
4574
|
rs.domEl.style.left = `${geo.x}px`;
|
|
4573
4575
|
rs.domEl.style.top = `${geo.y}px`;
|
|
4574
|
-
rs.domEl.style.width = `${Math.max(geo.width,
|
|
4575
|
-
rs.domEl.style.height = `${Math.max(geo.height,
|
|
4576
|
+
rs.domEl.style.width = `${Math.max(geo.width, chunkHAQDKQ52_js.MIN_ELEMENT_SIZE)}px`;
|
|
4577
|
+
rs.domEl.style.height = `${Math.max(geo.height, chunkHAQDKQ52_js.MIN_ELEMENT_SIZE)}px`;
|
|
4576
4578
|
}
|
|
4577
4579
|
if (live) {
|
|
4578
|
-
|
|
4580
|
+
chunkMZ47MV52_js.publishLiveGeometry(live.patcher, live.slideId, rs.elementId, {
|
|
4579
4581
|
x: geo.x,
|
|
4580
4582
|
y: geo.y,
|
|
4581
|
-
width: Math.max(geo.width,
|
|
4582
|
-
height: Math.max(geo.height,
|
|
4583
|
+
width: Math.max(geo.width, chunkHAQDKQ52_js.MIN_ELEMENT_SIZE),
|
|
4584
|
+
height: Math.max(geo.height, chunkHAQDKQ52_js.MIN_ELEMENT_SIZE)
|
|
4583
4585
|
});
|
|
4584
4586
|
}
|
|
4585
4587
|
}
|
|
@@ -4607,6 +4609,7 @@ function processPointerUp(input) {
|
|
|
4607
4609
|
dragStateRef,
|
|
4608
4610
|
resizeStateRef,
|
|
4609
4611
|
shapeAdjustmentDragStateRef,
|
|
4612
|
+
justInteractedRef,
|
|
4610
4613
|
setMarqueeSelectionState,
|
|
4611
4614
|
setSnapLines,
|
|
4612
4615
|
setTemplateElementsBySlideId,
|
|
@@ -4659,18 +4662,21 @@ function processPointerUp(input) {
|
|
|
4659
4662
|
if (i !== activeSlideIndex) {
|
|
4660
4663
|
return s;
|
|
4661
4664
|
}
|
|
4662
|
-
const rerouted =
|
|
4665
|
+
const rerouted = chunkMZ47MV52_js.rerouteConnectorsForMovedElements(s.elements, movedIds);
|
|
4663
4666
|
if (rerouted.length === 0) {
|
|
4664
4667
|
return s;
|
|
4665
4668
|
}
|
|
4666
4669
|
return {
|
|
4667
4670
|
...s,
|
|
4668
|
-
elements:
|
|
4671
|
+
elements: chunkMZ47MV52_js.applyReroutedConnectors(s.elements, rerouted)
|
|
4669
4672
|
};
|
|
4670
4673
|
})
|
|
4671
4674
|
);
|
|
4672
4675
|
}
|
|
4673
4676
|
const wasMoved = drag?.moved || rs?.moved || adj?.moved;
|
|
4677
|
+
if (wasMoved) {
|
|
4678
|
+
justInteractedRef.current = true;
|
|
4679
|
+
}
|
|
4674
4680
|
if (wasMoved) {
|
|
4675
4681
|
livePatcher?.flush();
|
|
4676
4682
|
}
|
|
@@ -4687,9 +4693,9 @@ function processPointerUp(input) {
|
|
|
4687
4693
|
}
|
|
4688
4694
|
function commitMarquee(marquee, editTemplateMode, templateElements, activeSlide, applySelection, clearSelection) {
|
|
4689
4695
|
const sourceElements = editTemplateMode ? templateElements : activeSlide?.elements ?? [];
|
|
4690
|
-
const hitIds =
|
|
4696
|
+
const hitIds = chunkMZ47MV52_js.computeMarqueeHitIds(marquee, sourceElements);
|
|
4691
4697
|
if (marquee.additive) {
|
|
4692
|
-
const merged =
|
|
4698
|
+
const merged = chunkMZ47MV52_js.mergeAdditiveSelection(marquee.baseSelectionIds, hitIds);
|
|
4693
4699
|
if (merged.length > 0) {
|
|
4694
4700
|
applySelection(merged[0], merged);
|
|
4695
4701
|
} else {
|
|
@@ -4712,8 +4718,8 @@ function commitDrag(drag, editTemplateMode, activeSlide, activeSlideIndex, setTe
|
|
|
4712
4718
|
}
|
|
4713
4719
|
return { ...el, x: start.x + dx, y: start.y + dy };
|
|
4714
4720
|
});
|
|
4715
|
-
const rerouted =
|
|
4716
|
-
return
|
|
4721
|
+
const rerouted = chunkMZ47MV52_js.rerouteConnectorsForMovedElements(movedElements, movedIds);
|
|
4722
|
+
return chunkMZ47MV52_js.applyReroutedConnectors(movedElements, rerouted);
|
|
4717
4723
|
};
|
|
4718
4724
|
if (editTemplateMode) {
|
|
4719
4725
|
const slideId = activeSlide?.id;
|
|
@@ -4848,6 +4854,7 @@ function useCanvasInteractions(input) {
|
|
|
4848
4854
|
resizeStateRef,
|
|
4849
4855
|
shapeAdjustmentDragStateRef,
|
|
4850
4856
|
marqueeStateRef,
|
|
4857
|
+
justInteractedRef,
|
|
4851
4858
|
setInlineEditingElementId,
|
|
4852
4859
|
setInlineEditingText,
|
|
4853
4860
|
setContextMenuState,
|
|
@@ -4869,9 +4876,9 @@ function useCanvasInteractions(input) {
|
|
|
4869
4876
|
return;
|
|
4870
4877
|
}
|
|
4871
4878
|
const el = elementLookup.get(editId);
|
|
4872
|
-
if (el &&
|
|
4879
|
+
if (el && chunkMZ47MV52_js.hasTextProperties(el)) {
|
|
4873
4880
|
const committedText = transformCommittedText ? transformCommittedText(inlineEditingText) : inlineEditingText;
|
|
4874
|
-
const newSegments =
|
|
4881
|
+
const newSegments = chunkMZ47MV52_js.remapTextToSegments(committedText, el.textSegments, el.textStyle);
|
|
4875
4882
|
ops.updateElementById(editId, {
|
|
4876
4883
|
text: committedText,
|
|
4877
4884
|
textSegments: newSegments
|
|
@@ -4882,7 +4889,7 @@ function useCanvasInteractions(input) {
|
|
|
4882
4889
|
setInlineEditingText("");
|
|
4883
4890
|
};
|
|
4884
4891
|
const openEquationEditorForElement = (el) => {
|
|
4885
|
-
if (!
|
|
4892
|
+
if (!chunkMZ47MV52_js.hasTextProperties(el)) {
|
|
4886
4893
|
return false;
|
|
4887
4894
|
}
|
|
4888
4895
|
const eqSeg = el.textSegments?.find((seg) => seg.equationXml);
|
|
@@ -4907,11 +4914,12 @@ function useCanvasInteractions(input) {
|
|
|
4907
4914
|
const newIds = ids.includes(elementId) ? ids.filter((id) => id !== elementId) : [...ids, elementId];
|
|
4908
4915
|
ops.applySelection(newIds[0] ?? null, newIds);
|
|
4909
4916
|
} else if (selectedElementIdSet.has(elementId) && !inlineEditingElementId) {
|
|
4910
|
-
if (justSelectedRef.current) {
|
|
4917
|
+
if (justSelectedRef.current || justInteractedRef.current) {
|
|
4911
4918
|
justSelectedRef.current = false;
|
|
4919
|
+
justInteractedRef.current = false;
|
|
4912
4920
|
} else {
|
|
4913
4921
|
const el = elementLookup.get(elementId);
|
|
4914
|
-
if (el &&
|
|
4922
|
+
if (el && chunkMZ47MV52_js.hasTextProperties(el) && !el.locks?.noTextEdit) {
|
|
4915
4923
|
if (!openEquationEditorForElement(el)) {
|
|
4916
4924
|
setInlineEditingElementId(elementId);
|
|
4917
4925
|
setInlineEditingText(el.text ?? "");
|
|
@@ -4930,7 +4938,7 @@ function useCanvasInteractions(input) {
|
|
|
4930
4938
|
if (openEquationEditorForElement(el)) {
|
|
4931
4939
|
return;
|
|
4932
4940
|
}
|
|
4933
|
-
if (
|
|
4941
|
+
if (chunkMZ47MV52_js.hasTextProperties(el)) {
|
|
4934
4942
|
setInlineEditingElementId(elementId);
|
|
4935
4943
|
setInlineEditingText(el.text ?? "");
|
|
4936
4944
|
}
|
|
@@ -5123,7 +5131,7 @@ function createFileHandlers(deps) {
|
|
|
5123
5131
|
h = Math.round(h * scale);
|
|
5124
5132
|
}
|
|
5125
5133
|
addElement({
|
|
5126
|
-
id:
|
|
5134
|
+
id: chunkMZ47MV52_js.generateElementId(),
|
|
5127
5135
|
type: "image",
|
|
5128
5136
|
x: Math.round((canvasSize.width - w) / 2),
|
|
5129
5137
|
y: Math.round((canvasSize.height - h) / 2),
|
|
@@ -5134,7 +5142,7 @@ function createFileHandlers(deps) {
|
|
|
5134
5142
|
};
|
|
5135
5143
|
img.onerror = () => {
|
|
5136
5144
|
addElement({
|
|
5137
|
-
id:
|
|
5145
|
+
id: chunkMZ47MV52_js.generateElementId(),
|
|
5138
5146
|
type: "image",
|
|
5139
5147
|
x: 100,
|
|
5140
5148
|
y: 100,
|
|
@@ -5160,7 +5168,7 @@ function createFileHandlers(deps) {
|
|
|
5160
5168
|
const elFilePath = file.path;
|
|
5161
5169
|
const insertMediaElement = (mediaSourceUrl, width, height) => {
|
|
5162
5170
|
addElement({
|
|
5163
|
-
id:
|
|
5171
|
+
id: chunkMZ47MV52_js.generateElementId(),
|
|
5164
5172
|
type: "media",
|
|
5165
5173
|
mediaType,
|
|
5166
5174
|
mediaMimeType: file.type || void 0,
|
|
@@ -5335,13 +5343,13 @@ function createStructuredElementHandlers(deps) {
|
|
|
5335
5343
|
return;
|
|
5336
5344
|
}
|
|
5337
5345
|
addElement({
|
|
5338
|
-
id:
|
|
5346
|
+
id: chunkMZ47MV52_js.generateElementId(),
|
|
5339
5347
|
type: "smartArt",
|
|
5340
5348
|
x: 100,
|
|
5341
5349
|
y: 120,
|
|
5342
5350
|
width: 600,
|
|
5343
5351
|
height: 340,
|
|
5344
|
-
smartArtData:
|
|
5352
|
+
smartArtData: chunkMZ47MV52_js.buildSmartArtPresetData(
|
|
5345
5353
|
layout,
|
|
5346
5354
|
defaultItems,
|
|
5347
5355
|
(i) => `node-${Date.now()}-${i}-${Math.random().toString(36).slice(2, 8)}`
|
|
@@ -5353,7 +5361,7 @@ function createStructuredElementHandlers(deps) {
|
|
|
5353
5361
|
return;
|
|
5354
5362
|
}
|
|
5355
5363
|
addElement({
|
|
5356
|
-
id:
|
|
5364
|
+
id: chunkMZ47MV52_js.generateElementId(),
|
|
5357
5365
|
type: "shape",
|
|
5358
5366
|
x: 120,
|
|
5359
5367
|
y: 200,
|
|
@@ -5412,7 +5420,7 @@ function createStructuredElementHandlers(deps) {
|
|
|
5412
5420
|
const displayText = value || fieldTexts[fieldType] || fieldType;
|
|
5413
5421
|
const fieldGuid = `{${crypto.randomUUID().toUpperCase()}}`;
|
|
5414
5422
|
addElement({
|
|
5415
|
-
id:
|
|
5423
|
+
id: chunkMZ47MV52_js.generateElementId(),
|
|
5416
5424
|
type: "shape",
|
|
5417
5425
|
x: 120,
|
|
5418
5426
|
y: 200,
|
|
@@ -5434,11 +5442,11 @@ function createStructuredElementHandlers(deps) {
|
|
|
5434
5442
|
if (!activeSlide) {
|
|
5435
5443
|
return;
|
|
5436
5444
|
}
|
|
5437
|
-
const preset =
|
|
5445
|
+
const preset = chunkMZ47MV52_js.ACTION_BUTTON_PRESETS.find((p) => p.shapeType === shapeType);
|
|
5438
5446
|
if (!preset) {
|
|
5439
5447
|
return;
|
|
5440
5448
|
}
|
|
5441
|
-
const defaultPptxAction =
|
|
5449
|
+
const defaultPptxAction = chunkMZ47MV52_js.elementActionToPptxAction({
|
|
5442
5450
|
trigger: "click",
|
|
5443
5451
|
type: preset.defaultAction
|
|
5444
5452
|
});
|
|
@@ -5447,7 +5455,7 @@ function createStructuredElementHandlers(deps) {
|
|
|
5447
5455
|
defaultPptxAction.highlightClick = true;
|
|
5448
5456
|
}
|
|
5449
5457
|
addElement({
|
|
5450
|
-
id:
|
|
5458
|
+
id: chunkMZ47MV52_js.generateElementId(),
|
|
5451
5459
|
type: "shape",
|
|
5452
5460
|
x: 150,
|
|
5453
5461
|
y: 150,
|
|
@@ -5514,14 +5522,14 @@ function useInsertElements(input) {
|
|
|
5514
5522
|
return;
|
|
5515
5523
|
}
|
|
5516
5524
|
addElement({
|
|
5517
|
-
id:
|
|
5525
|
+
id: chunkMZ47MV52_js.generateElementId(),
|
|
5518
5526
|
type: "text",
|
|
5519
5527
|
x: 100,
|
|
5520
5528
|
y: 100,
|
|
5521
5529
|
width: 300,
|
|
5522
5530
|
height: 60,
|
|
5523
5531
|
text: "",
|
|
5524
|
-
textStyle: { fontSize:
|
|
5532
|
+
textStyle: { fontSize: chunkHAQDKQ52_js.DEFAULT_TEXT_FONT_SIZE }
|
|
5525
5533
|
});
|
|
5526
5534
|
};
|
|
5527
5535
|
const handleAddShape = () => {
|
|
@@ -5529,7 +5537,7 @@ function useInsertElements(input) {
|
|
|
5529
5537
|
return;
|
|
5530
5538
|
}
|
|
5531
5539
|
addElement({
|
|
5532
|
-
id:
|
|
5540
|
+
id: chunkMZ47MV52_js.generateElementId(),
|
|
5533
5541
|
type: "shape",
|
|
5534
5542
|
x: 150,
|
|
5535
5543
|
y: 150,
|
|
@@ -5548,15 +5556,15 @@ function useInsertElements(input) {
|
|
|
5548
5556
|
return;
|
|
5549
5557
|
}
|
|
5550
5558
|
addElement({
|
|
5551
|
-
...
|
|
5552
|
-
id:
|
|
5559
|
+
...chunkMZ47MV52_js.newTableElement(chunkHAQDKQ52_js.DEFAULT_TABLE_ROWS, chunkHAQDKQ52_js.DEFAULT_TABLE_COLUMNS, 100, 200),
|
|
5560
|
+
id: chunkMZ47MV52_js.generateElementId()
|
|
5553
5561
|
});
|
|
5554
5562
|
};
|
|
5555
5563
|
const handleAddChart = (chartKind) => {
|
|
5556
5564
|
if (!activeSlide) {
|
|
5557
5565
|
return;
|
|
5558
5566
|
}
|
|
5559
|
-
addElement(
|
|
5567
|
+
addElement(chunkMZ47MV52_js.createDefaultChartElement(chartKind));
|
|
5560
5568
|
};
|
|
5561
5569
|
const structured = createStructuredElementHandlers({
|
|
5562
5570
|
activeSlide,
|
|
@@ -5626,7 +5634,7 @@ function useClipboardHandlers(input) {
|
|
|
5626
5634
|
if (!selectedElement) {
|
|
5627
5635
|
return;
|
|
5628
5636
|
}
|
|
5629
|
-
setClipboardPayload(
|
|
5637
|
+
setClipboardPayload(chunkMZ47MV52_js.buildElementClipboardPayload(selectedElement, editTemplateMode));
|
|
5630
5638
|
};
|
|
5631
5639
|
const handleDelete = () => {
|
|
5632
5640
|
const idsToDelete = effectiveSelectedIds;
|
|
@@ -5643,7 +5651,7 @@ function useClipboardHandlers(input) {
|
|
|
5643
5651
|
handleDelete();
|
|
5644
5652
|
};
|
|
5645
5653
|
const insertClone = (source) => {
|
|
5646
|
-
const clone =
|
|
5654
|
+
const clone = chunkMZ47MV52_js.cloneElementForPaste(source, { intoTemplate: editTemplateMode });
|
|
5647
5655
|
ops.updateActiveElements((els) => [...els, clone]);
|
|
5648
5656
|
ops.applySelection(clone.id);
|
|
5649
5657
|
history.markDirty();
|
|
@@ -5678,7 +5686,7 @@ function resolveShapePath(el) {
|
|
|
5678
5686
|
return el.pathData;
|
|
5679
5687
|
}
|
|
5680
5688
|
if ("shapeType" in el && typeof el.shapeType === "string") {
|
|
5681
|
-
const clipPath =
|
|
5689
|
+
const clipPath = chunkMZ47MV52_js.getPresetShapeClipPath(el.shapeType);
|
|
5682
5690
|
if (clipPath) {
|
|
5683
5691
|
const svgPath = clipPathToSvgPath(clipPath, el.width, el.height);
|
|
5684
5692
|
if (svgPath) {
|
|
@@ -5729,7 +5737,7 @@ function clipPathToSvgPath(clipPath, width, height) {
|
|
|
5729
5737
|
return parts.join(" ");
|
|
5730
5738
|
}
|
|
5731
5739
|
function transformPathToGlobal(pathData, el) {
|
|
5732
|
-
const polys =
|
|
5740
|
+
const polys = chunkMZ47MV52_js.svgPathToPolygons(pathData);
|
|
5733
5741
|
if (polys.length === 0) {
|
|
5734
5742
|
return pathData;
|
|
5735
5743
|
}
|
|
@@ -5749,10 +5757,10 @@ function transformPathToGlobal(pathData, el) {
|
|
|
5749
5757
|
y: pt.y * scaleY + el.y
|
|
5750
5758
|
}))
|
|
5751
5759
|
);
|
|
5752
|
-
return
|
|
5760
|
+
return chunkMZ47MV52_js.polygonsToSvgPath(transformed);
|
|
5753
5761
|
}
|
|
5754
5762
|
function transformPathToLocal(pathData, x, y, _width, _height) {
|
|
5755
|
-
const polys =
|
|
5763
|
+
const polys = chunkMZ47MV52_js.svgPathToPolygons(pathData);
|
|
5756
5764
|
if (polys.length === 0) {
|
|
5757
5765
|
return pathData;
|
|
5758
5766
|
}
|
|
@@ -5762,10 +5770,10 @@ function transformPathToLocal(pathData, x, y, _width, _height) {
|
|
|
5762
5770
|
y: pt.y - y
|
|
5763
5771
|
}))
|
|
5764
5772
|
);
|
|
5765
|
-
return
|
|
5773
|
+
return chunkMZ47MV52_js.polygonsToSvgPath(transformed);
|
|
5766
5774
|
}
|
|
5767
5775
|
function pathBounds(pathData) {
|
|
5768
|
-
const polys =
|
|
5776
|
+
const polys = chunkMZ47MV52_js.svgPathToPolygons(pathData);
|
|
5769
5777
|
let minX = Infinity;
|
|
5770
5778
|
let minY = Infinity;
|
|
5771
5779
|
let maxX = -Infinity;
|
|
@@ -5824,7 +5832,7 @@ function useMergeShapesHandler(input) {
|
|
|
5824
5832
|
let allFragments = [];
|
|
5825
5833
|
let remaining = globalPaths[0];
|
|
5826
5834
|
for (let i = 1; i < globalPaths.length; i++) {
|
|
5827
|
-
const frags =
|
|
5835
|
+
const frags = chunkMZ47MV52_js.mergeShapes("fragment", remaining, globalPaths[i]);
|
|
5828
5836
|
if (Array.isArray(frags)) {
|
|
5829
5837
|
allFragments = frags;
|
|
5830
5838
|
}
|
|
@@ -5853,7 +5861,7 @@ function useMergeShapesHandler(input) {
|
|
|
5853
5861
|
bounds.height
|
|
5854
5862
|
);
|
|
5855
5863
|
const newEl = {
|
|
5856
|
-
id:
|
|
5864
|
+
id: chunkMZ47MV52_js.generateElementId(),
|
|
5857
5865
|
type: "shape",
|
|
5858
5866
|
x: bounds.x,
|
|
5859
5867
|
y: bounds.y,
|
|
@@ -5891,7 +5899,7 @@ function useMergeShapesHandler(input) {
|
|
|
5891
5899
|
} else {
|
|
5892
5900
|
let resultPath = globalPaths[0];
|
|
5893
5901
|
for (let i = 1; i < globalPaths.length; i++) {
|
|
5894
|
-
const result =
|
|
5902
|
+
const result = chunkMZ47MV52_js.mergeShapes(operation, resultPath, globalPaths[i]);
|
|
5895
5903
|
if (typeof result === "string") {
|
|
5896
5904
|
resultPath = result;
|
|
5897
5905
|
}
|
|
@@ -5912,7 +5920,7 @@ function useMergeShapesHandler(input) {
|
|
|
5912
5920
|
);
|
|
5913
5921
|
const primary = targets[0];
|
|
5914
5922
|
const newEl = {
|
|
5915
|
-
id:
|
|
5923
|
+
id: chunkMZ47MV52_js.generateElementId(),
|
|
5916
5924
|
type: "shape",
|
|
5917
5925
|
x: bounds.x,
|
|
5918
5926
|
y: bounds.y,
|
|
@@ -5975,7 +5983,7 @@ function useGroupAlignLayerHandlers(input) {
|
|
|
5975
5983
|
if (ids.length < 2 || !activeSlide) {
|
|
5976
5984
|
return;
|
|
5977
5985
|
}
|
|
5978
|
-
const { elements, groupId } =
|
|
5986
|
+
const { elements, groupId } = chunkMZ47MV52_js.groupElements(ops.activeElements, ids, chunkMZ47MV52_js.generateElementId());
|
|
5979
5987
|
if (groupId === null) {
|
|
5980
5988
|
return;
|
|
5981
5989
|
}
|
|
@@ -5988,12 +5996,12 @@ function useGroupAlignLayerHandlers(input) {
|
|
|
5988
5996
|
return;
|
|
5989
5997
|
}
|
|
5990
5998
|
const group = selectedElement;
|
|
5991
|
-
const intoTemplate =
|
|
5999
|
+
const intoTemplate = chunkMZ47MV52_js.isTemplateElementId(group.id);
|
|
5992
6000
|
const ungrouped = group.children.map((child) => ({
|
|
5993
6001
|
...structuredClone(child),
|
|
5994
6002
|
// Keep child ids in the same store as the group so later edits route
|
|
5995
6003
|
// correctly: template groups yield template-prefixed child ids.
|
|
5996
|
-
id: intoTemplate ?
|
|
6004
|
+
id: intoTemplate ? chunkMZ47MV52_js.makeCloneId(true, child.id || group.id) : child.id || chunkMZ47MV52_js.generateElementId(),
|
|
5997
6005
|
x: child.x + group.x,
|
|
5998
6006
|
y: child.y + group.y
|
|
5999
6007
|
}));
|
|
@@ -6017,7 +6025,7 @@ function useGroupAlignLayerHandlers(input) {
|
|
|
6017
6025
|
if (!edge) {
|
|
6018
6026
|
return;
|
|
6019
6027
|
}
|
|
6020
|
-
const positions =
|
|
6028
|
+
const positions = chunkMZ47MV52_js.alignElements(selectedElements, edge);
|
|
6021
6029
|
for (const [id, pos] of positions) {
|
|
6022
6030
|
const el = elementLookup.get(id);
|
|
6023
6031
|
if (!el) {
|
|
@@ -6035,7 +6043,7 @@ function useGroupAlignLayerHandlers(input) {
|
|
|
6035
6043
|
if (!distAxis) {
|
|
6036
6044
|
return;
|
|
6037
6045
|
}
|
|
6038
|
-
const positions =
|
|
6046
|
+
const positions = chunkMZ47MV52_js.distributeElements(selectedElements, distAxis);
|
|
6039
6047
|
for (const [id, pos] of positions) {
|
|
6040
6048
|
const el = elementLookup.get(id);
|
|
6041
6049
|
if (!el) {
|
|
@@ -6052,7 +6060,7 @@ function useGroupAlignLayerHandlers(input) {
|
|
|
6052
6060
|
}
|
|
6053
6061
|
const id = selectedElement.id;
|
|
6054
6062
|
ops.updateActiveElements(
|
|
6055
|
-
(els) => direction === "forward" ?
|
|
6063
|
+
(els) => direction === "forward" ? chunkMZ47MV52_js.bringForward(els, id) : direction === "backward" ? chunkMZ47MV52_js.sendBackward(els, id) : els
|
|
6056
6064
|
);
|
|
6057
6065
|
history.markDirty();
|
|
6058
6066
|
};
|
|
@@ -6062,7 +6070,7 @@ function useGroupAlignLayerHandlers(input) {
|
|
|
6062
6070
|
}
|
|
6063
6071
|
const id = selectedElement.id;
|
|
6064
6072
|
ops.updateActiveElements(
|
|
6065
|
-
(els) => direction === "front" ?
|
|
6073
|
+
(els) => direction === "front" ? chunkMZ47MV52_js.bringToFront(els, id) : chunkMZ47MV52_js.sendToBack(els, id)
|
|
6066
6074
|
);
|
|
6067
6075
|
history.markDirty();
|
|
6068
6076
|
};
|
|
@@ -6193,7 +6201,7 @@ function useSlideManagement(input) {
|
|
|
6193
6201
|
theme
|
|
6194
6202
|
} = input;
|
|
6195
6203
|
const handleAddSlide = () => {
|
|
6196
|
-
const newSlide =
|
|
6204
|
+
const newSlide = chunkMZ47MV52_js.createBlankSlide(slides.length + 1);
|
|
6197
6205
|
ops.updateSlides((prev) => {
|
|
6198
6206
|
const next = [...prev];
|
|
6199
6207
|
next.splice(activeSlideIndex + 1, 0, newSlide);
|
|
@@ -6256,7 +6264,7 @@ function useSlideManagement(input) {
|
|
|
6256
6264
|
}
|
|
6257
6265
|
const clone = {
|
|
6258
6266
|
...src,
|
|
6259
|
-
id:
|
|
6267
|
+
id: chunkMZ47MV52_js.makeSlideId(),
|
|
6260
6268
|
elements: src.elements.map((el) => ({
|
|
6261
6269
|
...el,
|
|
6262
6270
|
id: `${el.id}-dup-${Math.random().toString(36).slice(2, 6)}`
|
|
@@ -6288,7 +6296,7 @@ function useSlideManagement(input) {
|
|
|
6288
6296
|
const handleInsertSlideFromLayout = (layoutPath, layoutName) => {
|
|
6289
6297
|
const insertAt = activeSlideIndex + 1;
|
|
6290
6298
|
const draft = {
|
|
6291
|
-
...
|
|
6299
|
+
...chunkMZ47MV52_js.createBlankSlide(slides.length + 1),
|
|
6292
6300
|
layoutPath,
|
|
6293
6301
|
...layoutName ? { layoutName } : {}
|
|
6294
6302
|
};
|
|
@@ -6321,9 +6329,9 @@ function useSlideManagement(input) {
|
|
|
6321
6329
|
};
|
|
6322
6330
|
const handleInsertSlideFromTemplate = (templateId) => {
|
|
6323
6331
|
const insertAt = activeSlideIndex + 1;
|
|
6324
|
-
const draft =
|
|
6332
|
+
const draft = chunkMZ47MV52_js.buildSlideTemplateSlide(templateId, chunkMZ47MV52_js.makeSlideId(), slides.length + 1, {
|
|
6325
6333
|
...canvasSize ? { slideWidth: canvasSize.width, slideHeight: canvasSize.height } : {},
|
|
6326
|
-
scheme:
|
|
6334
|
+
scheme: chunkMZ47MV52_js.templateSchemeFromTheme(theme?.colorScheme)
|
|
6327
6335
|
});
|
|
6328
6336
|
ops.updateSlides((prev) => insertSlideFromLayoutUpdater(prev, activeSlideIndex, draft));
|
|
6329
6337
|
setActiveSlideIndex(insertAt);
|
|
@@ -6360,7 +6368,7 @@ function createTableMergeHandlers(input) {
|
|
|
6360
6368
|
if (!nextCell || nextCell.hMerge || nextCell.vMerge) {
|
|
6361
6369
|
return;
|
|
6362
6370
|
}
|
|
6363
|
-
const newTableData =
|
|
6371
|
+
const newTableData = chunkMZ47MV52_js.mergeCells(
|
|
6364
6372
|
[
|
|
6365
6373
|
{ row: rowIndex, col: columnIndex },
|
|
6366
6374
|
{ row: rowIndex, col: nextColIdx }
|
|
@@ -6368,7 +6376,7 @@ function createTableMergeHandlers(input) {
|
|
|
6368
6376
|
td
|
|
6369
6377
|
);
|
|
6370
6378
|
const updates = { tableData: newTableData };
|
|
6371
|
-
const newRawXml =
|
|
6379
|
+
const newRawXml = chunkMZ47MV52_js.updateMergeAttrsInRawXml(selectedElement, newTableData);
|
|
6372
6380
|
if (newRawXml) {
|
|
6373
6381
|
updates.rawXml = newRawXml;
|
|
6374
6382
|
}
|
|
@@ -6394,7 +6402,7 @@ function createTableMergeHandlers(input) {
|
|
|
6394
6402
|
if (!targetNextCell || targetNextCell.hMerge || targetNextCell.vMerge) {
|
|
6395
6403
|
return;
|
|
6396
6404
|
}
|
|
6397
|
-
const newTableData =
|
|
6405
|
+
const newTableData = chunkMZ47MV52_js.mergeCells(
|
|
6398
6406
|
[
|
|
6399
6407
|
{ row: rowIndex, col: columnIndex },
|
|
6400
6408
|
{ row: targetNextRowIdx, col: columnIndex }
|
|
@@ -6402,7 +6410,7 @@ function createTableMergeHandlers(input) {
|
|
|
6402
6410
|
td
|
|
6403
6411
|
);
|
|
6404
6412
|
const updates = { tableData: newTableData };
|
|
6405
|
-
const newRawXml =
|
|
6413
|
+
const newRawXml = chunkMZ47MV52_js.updateMergeAttrsInRawXml(selectedElement, newTableData);
|
|
6406
6414
|
if (newRawXml) {
|
|
6407
6415
|
updates.rawXml = newRawXml;
|
|
6408
6416
|
}
|
|
@@ -6417,9 +6425,9 @@ function createTableMergeHandlers(input) {
|
|
|
6417
6425
|
return;
|
|
6418
6426
|
}
|
|
6419
6427
|
const td = selectedElement.tableData;
|
|
6420
|
-
const newTableData =
|
|
6428
|
+
const newTableData = chunkMZ47MV52_js.mergeCells(ts.selectedCells, td);
|
|
6421
6429
|
const updates = { tableData: newTableData };
|
|
6422
|
-
const newRawXml =
|
|
6430
|
+
const newRawXml = chunkMZ47MV52_js.updateMergeAttrsInRawXml(selectedElement, newTableData);
|
|
6423
6431
|
if (newRawXml) {
|
|
6424
6432
|
updates.rawXml = newRawXml;
|
|
6425
6433
|
}
|
|
@@ -6436,9 +6444,9 @@ function createTableMergeHandlers(input) {
|
|
|
6436
6444
|
}
|
|
6437
6445
|
const { rowIndex, columnIndex } = ts;
|
|
6438
6446
|
const td = selectedElement.tableData;
|
|
6439
|
-
const newTableData =
|
|
6447
|
+
const newTableData = chunkMZ47MV52_js.splitCell(rowIndex, columnIndex, td);
|
|
6440
6448
|
const updates = { tableData: newTableData };
|
|
6441
|
-
const newRawXml =
|
|
6449
|
+
const newRawXml = chunkMZ47MV52_js.updateMergeAttrsInRawXml(selectedElement, newTableData);
|
|
6442
6450
|
if (newRawXml) {
|
|
6443
6451
|
updates.rawXml = newRawXml;
|
|
6444
6452
|
}
|
|
@@ -6482,7 +6490,7 @@ function createTableStructHandlers(input) {
|
|
|
6482
6490
|
updates.tableData = { ...el.tableData, rows: newRows };
|
|
6483
6491
|
}
|
|
6484
6492
|
if (el.rawXml) {
|
|
6485
|
-
const newRawXml =
|
|
6493
|
+
const newRawXml = chunkMZ47MV52_js.updateCellTextInRawXml(el, rowIndex, colIndex, text);
|
|
6486
6494
|
if (newRawXml) {
|
|
6487
6495
|
updates.rawXml = newRawXml;
|
|
6488
6496
|
}
|
|
@@ -6506,7 +6514,7 @@ function createTableStructHandlers(input) {
|
|
|
6506
6514
|
const { rowIndex, columnIndex: colIndex } = ts;
|
|
6507
6515
|
const updates = {};
|
|
6508
6516
|
if (selectedElement.rawXml) {
|
|
6509
|
-
const newRawXml =
|
|
6517
|
+
const newRawXml = chunkMZ47MV52_js.updateCellTextStyleInRawXml(
|
|
6510
6518
|
selectedElement,
|
|
6511
6519
|
rowIndex,
|
|
6512
6520
|
colIndex,
|
|
@@ -6570,9 +6578,9 @@ function createTableStructHandlers(input) {
|
|
|
6570
6578
|
return;
|
|
6571
6579
|
}
|
|
6572
6580
|
const rowIdx = ts?.rowIndex ?? 0;
|
|
6573
|
-
const newTableData =
|
|
6581
|
+
const newTableData = chunkMZ47MV52_js.insertTableRow(selectedElement.tableData, rowIdx, position);
|
|
6574
6582
|
const updates = { tableData: newTableData };
|
|
6575
|
-
const newRawXml =
|
|
6583
|
+
const newRawXml = chunkMZ47MV52_js.rebuildTableStructureInRawXml(selectedElement, newTableData);
|
|
6576
6584
|
if (newRawXml) {
|
|
6577
6585
|
updates.rawXml = newRawXml;
|
|
6578
6586
|
}
|
|
@@ -6585,12 +6593,12 @@ function createTableStructHandlers(input) {
|
|
|
6585
6593
|
}
|
|
6586
6594
|
const td = selectedElement.tableData;
|
|
6587
6595
|
const rowIdx = ts?.rowIndex ?? 0;
|
|
6588
|
-
const newTableData =
|
|
6596
|
+
const newTableData = chunkMZ47MV52_js.deleteTableRow(td, rowIdx);
|
|
6589
6597
|
if (newTableData === td) {
|
|
6590
6598
|
return;
|
|
6591
6599
|
}
|
|
6592
6600
|
const updates = { tableData: newTableData };
|
|
6593
|
-
const newRawXml =
|
|
6601
|
+
const newRawXml = chunkMZ47MV52_js.rebuildTableStructureInRawXml(selectedElement, newTableData);
|
|
6594
6602
|
if (newRawXml) {
|
|
6595
6603
|
updates.rawXml = newRawXml;
|
|
6596
6604
|
}
|
|
@@ -6602,9 +6610,9 @@ function createTableStructHandlers(input) {
|
|
|
6602
6610
|
return;
|
|
6603
6611
|
}
|
|
6604
6612
|
const colIdx = ts?.columnIndex ?? 0;
|
|
6605
|
-
const newTableData =
|
|
6613
|
+
const newTableData = chunkMZ47MV52_js.insertTableColumn(selectedElement.tableData, colIdx, position);
|
|
6606
6614
|
const updates = { tableData: newTableData };
|
|
6607
|
-
const newRawXml =
|
|
6615
|
+
const newRawXml = chunkMZ47MV52_js.rebuildTableStructureInRawXml(selectedElement, newTableData);
|
|
6608
6616
|
if (newRawXml) {
|
|
6609
6617
|
updates.rawXml = newRawXml;
|
|
6610
6618
|
}
|
|
@@ -6617,12 +6625,12 @@ function createTableStructHandlers(input) {
|
|
|
6617
6625
|
}
|
|
6618
6626
|
const td = selectedElement.tableData;
|
|
6619
6627
|
const colIdx = ts?.columnIndex ?? 0;
|
|
6620
|
-
const newTableData =
|
|
6628
|
+
const newTableData = chunkMZ47MV52_js.deleteTableColumn(td, colIdx);
|
|
6621
6629
|
if (newTableData === td) {
|
|
6622
6630
|
return;
|
|
6623
6631
|
}
|
|
6624
6632
|
const updates = { tableData: newTableData };
|
|
6625
|
-
const newRawXml =
|
|
6633
|
+
const newRawXml = chunkMZ47MV52_js.rebuildTableStructureInRawXml(selectedElement, newTableData);
|
|
6626
6634
|
if (newRawXml) {
|
|
6627
6635
|
updates.rawXml = newRawXml;
|
|
6628
6636
|
}
|
|
@@ -6658,8 +6666,8 @@ async function renderToCanvas(element, options = {}) {
|
|
|
6658
6666
|
return html2canvasPro(element, {
|
|
6659
6667
|
...options,
|
|
6660
6668
|
onclone: async (doc, clonedEl) => {
|
|
6661
|
-
await
|
|
6662
|
-
|
|
6669
|
+
await chunkMZ47MV52_js.normalizeColorsForCapture(doc, clonedEl);
|
|
6670
|
+
chunkMZ47MV52_js.preprocessCssForCapture(clonedEl);
|
|
6663
6671
|
if (typeof userOnClone === "function") {
|
|
6664
6672
|
userOnClone(doc, clonedEl);
|
|
6665
6673
|
}
|
|
@@ -6715,7 +6723,7 @@ async function exportSlideToPngBlob(slideElement, options = {}) {
|
|
|
6715
6723
|
}
|
|
6716
6724
|
async function exportSlideAsPng(slideElement, slideIndex, options = {}) {
|
|
6717
6725
|
const blob = await exportSlideToPngBlob(slideElement, options);
|
|
6718
|
-
|
|
6726
|
+
chunkMZ47MV52_js.downloadBlob(blob, `slide-${slideIndex + 1}.png`);
|
|
6719
6727
|
}
|
|
6720
6728
|
async function copySlideToClipboard(slideElement, options = {}) {
|
|
6721
6729
|
const blob = await exportSlideToPngBlob(slideElement, options);
|
|
@@ -6737,15 +6745,15 @@ async function exportAllSlidesAsPdf(slideStageRef, totalSlides, setActiveSlide,
|
|
|
6737
6745
|
continue;
|
|
6738
6746
|
}
|
|
6739
6747
|
const canvas = await renderElementToCanvas(stageEl, scale);
|
|
6740
|
-
images.push(
|
|
6748
|
+
images.push(chunkMZ47MV52_js.canvasToJpegData(canvas));
|
|
6741
6749
|
}
|
|
6742
6750
|
onProgress?.(totalSlides, totalSlides);
|
|
6743
6751
|
setActiveSlide(currentSlideIndex);
|
|
6744
6752
|
if (images.length === 0) {
|
|
6745
|
-
throw new Error(
|
|
6753
|
+
throw new Error(chunkDVZF4ARG_js.translationsEn["pptx.export.errorNoSlidesPdf"]);
|
|
6746
6754
|
}
|
|
6747
|
-
const pdfBlobUrl =
|
|
6748
|
-
|
|
6755
|
+
const pdfBlobUrl = chunkHAQDKQ52_js.buildPdfFromImageData(images);
|
|
6756
|
+
chunkMZ47MV52_js.downloadDataUrl(pdfBlobUrl, filename);
|
|
6749
6757
|
}
|
|
6750
6758
|
async function captureAllSlidesAsPngDataUrls(slideStageRef, totalSlides, setActiveSlide, currentSlideIndex, options = {}) {
|
|
6751
6759
|
const { scale = 2, onProgress } = options;
|
|
@@ -6791,10 +6799,10 @@ async function exportAllSlidesAsNotesPdf(slideStageRef, totalSlides, setActiveSl
|
|
|
6791
6799
|
onProgress?.(totalSlides, totalSlides);
|
|
6792
6800
|
setActiveSlide(currentSlideIndex);
|
|
6793
6801
|
if (pages.length === 0) {
|
|
6794
|
-
throw new Error(
|
|
6802
|
+
throw new Error(chunkDVZF4ARG_js.translationsEn["pptx.export.errorNoSlidesNotesPdf"]);
|
|
6795
6803
|
}
|
|
6796
|
-
const pdfDataUrl =
|
|
6797
|
-
|
|
6804
|
+
const pdfDataUrl = chunkHAQDKQ52_js.buildNotesPdf(pages);
|
|
6805
|
+
chunkMZ47MV52_js.downloadDataUrl(pdfDataUrl, filename);
|
|
6798
6806
|
}
|
|
6799
6807
|
|
|
6800
6808
|
// src/viewer/utils/export-video.ts
|
|
@@ -6825,7 +6833,7 @@ async function exportAllSlidesAsVideo(slideStageRef, totalSlides, setActiveSlide
|
|
|
6825
6833
|
}
|
|
6826
6834
|
setActiveSlide(currentSlideIndex);
|
|
6827
6835
|
if (slideCanvases.length === 0) {
|
|
6828
|
-
throw new Error(
|
|
6836
|
+
throw new Error(chunkDVZF4ARG_js.translationsEn["pptx.export.errorNoSlidesVideo"]);
|
|
6829
6837
|
}
|
|
6830
6838
|
const firstCanvas = slideCanvases[0];
|
|
6831
6839
|
const recordingCanvas = document.createElement("canvas");
|
|
@@ -6833,12 +6841,12 @@ async function exportAllSlidesAsVideo(slideStageRef, totalSlides, setActiveSlide
|
|
|
6833
6841
|
recordingCanvas.height = firstCanvas.height;
|
|
6834
6842
|
const ctx = recordingCanvas.getContext("2d");
|
|
6835
6843
|
if (!ctx) {
|
|
6836
|
-
throw new Error(
|
|
6844
|
+
throw new Error(chunkDVZF4ARG_js.translationsEn["pptx.export.errorNo2dContext"]);
|
|
6837
6845
|
}
|
|
6838
6846
|
const fps = 30;
|
|
6839
6847
|
const stream = recordingCanvas.captureStream(fps);
|
|
6840
6848
|
const recorder = new MediaRecorder(stream, {
|
|
6841
|
-
mimeType:
|
|
6849
|
+
mimeType: chunkMZ47MV52_js.pickSupportedMimeType([...chunkMZ47MV52_js.WEBM_MIME_CANDIDATES]),
|
|
6842
6850
|
videoBitsPerSecond: 5e6
|
|
6843
6851
|
});
|
|
6844
6852
|
const chunks = [];
|
|
@@ -6861,8 +6869,8 @@ async function exportAllSlidesAsVideo(slideStageRef, totalSlides, setActiveSlide
|
|
|
6861
6869
|
const duration = slideTimingsMs?.[i] ?? slideDurationMs;
|
|
6862
6870
|
ctx.clearRect(0, 0, recordingCanvas.width, recordingCanvas.height);
|
|
6863
6871
|
ctx.drawImage(slideCanvases[i], 0, 0);
|
|
6864
|
-
const frameInterval =
|
|
6865
|
-
const framesNeeded =
|
|
6872
|
+
const frameInterval = chunkMZ47MV52_js.fpsToFrameIntervalMs(fps);
|
|
6873
|
+
const framesNeeded = chunkMZ47MV52_js.segmentFrameCount(duration, fps);
|
|
6866
6874
|
for (let f = 0; f < framesNeeded; f++) {
|
|
6867
6875
|
if (signal?.aborted) {
|
|
6868
6876
|
recorder.stop();
|
|
@@ -6909,9 +6917,9 @@ async function exportAllSlidesAsGif(slideStageRef, totalSlides, setActiveSlide,
|
|
|
6909
6917
|
}
|
|
6910
6918
|
setActiveSlide(currentSlideIndex);
|
|
6911
6919
|
if (frames.length === 0) {
|
|
6912
|
-
throw new Error(
|
|
6920
|
+
throw new Error(chunkDVZF4ARG_js.translationsEn["pptx.export.errorNoSlidesGif"]);
|
|
6913
6921
|
}
|
|
6914
|
-
const gifBytes =
|
|
6922
|
+
const gifBytes = chunkMZ47MV52_js.encodeGif(frames, Math.round(slideDurationMs / 10));
|
|
6915
6923
|
onProgress?.(totalSlides, totalSlides);
|
|
6916
6924
|
const buf = new ArrayBuffer(gifBytes.length);
|
|
6917
6925
|
new Uint8Array(buf).set(gifBytes);
|
|
@@ -6965,7 +6973,7 @@ function exportAllSlidesToSvg(data, options = {}) {
|
|
|
6965
6973
|
continue;
|
|
6966
6974
|
}
|
|
6967
6975
|
onProgress?.(processedCount, data.slides.length);
|
|
6968
|
-
let svg =
|
|
6976
|
+
let svg = chunkMZ47MV52_js.SvgExporter.exportSlide(slide, data.width, data.height, svgOptions);
|
|
6969
6977
|
if (embedFonts && fontFaces?.length) {
|
|
6970
6978
|
svg = injectFontFaces(svg, fontFaces);
|
|
6971
6979
|
}
|
|
@@ -7027,7 +7035,7 @@ function useExportSaveAs(input) {
|
|
|
7027
7035
|
}
|
|
7028
7036
|
setExportProgress(70);
|
|
7029
7037
|
setExportStatusMessage("Writing README...");
|
|
7030
|
-
const readme =
|
|
7038
|
+
const readme = chunkMZ47MV52_js.generatePackageReadme(pptxFilename);
|
|
7031
7039
|
pkgFolder.file("README.txt", readme);
|
|
7032
7040
|
if (abortCtrl.signal.aborted) {
|
|
7033
7041
|
throw new DOMException("Export cancelled", "AbortError");
|
|
@@ -7038,7 +7046,7 @@ function useExportSaveAs(input) {
|
|
|
7038
7046
|
setExportProgress(95);
|
|
7039
7047
|
setExportStatusMessage("Downloading...");
|
|
7040
7048
|
const baseName = pptxFilename.replace(/\.[^.]+$/u, "");
|
|
7041
|
-
|
|
7049
|
+
chunkMZ47MV52_js.downloadBlob(zipBlob, `${baseName}-package.zip`);
|
|
7042
7050
|
setExportProgress(100);
|
|
7043
7051
|
} catch (err) {
|
|
7044
7052
|
if (err.name !== "AbortError") {
|
|
@@ -7061,7 +7069,7 @@ function useExportSaveAs(input) {
|
|
|
7061
7069
|
const blob = new Blob([data], {
|
|
7062
7070
|
type: "application/vnd.openxmlformats-officedocument.presentationml.presentation"
|
|
7063
7071
|
});
|
|
7064
|
-
|
|
7072
|
+
chunkMZ47MV52_js.downloadBlob(blob, `${baseName}.${ext}`);
|
|
7065
7073
|
} catch (err) {
|
|
7066
7074
|
console.error(`[PowerPointViewer] Save as .${ext} failed:`, err);
|
|
7067
7075
|
}
|
|
@@ -7074,14 +7082,14 @@ function useExportSaveAs(input) {
|
|
|
7074
7082
|
const pptxGuides = guides.map((g) => ({
|
|
7075
7083
|
id: g.id,
|
|
7076
7084
|
orientation: g.axis === "h" ? "horz" : "vert",
|
|
7077
|
-
positionEmu:
|
|
7085
|
+
positionEmu: chunkMZ47MV52_js.guidePxToEmu(g.position)
|
|
7078
7086
|
}));
|
|
7079
7087
|
return {
|
|
7080
7088
|
...slide,
|
|
7081
7089
|
guides: pptxGuides.length > 0 ? pptxGuides : void 0
|
|
7082
7090
|
};
|
|
7083
7091
|
});
|
|
7084
|
-
const slidesToSave =
|
|
7092
|
+
const slidesToSave = chunkHAQDKQ52_js.buildSaveSlides(slidesWithGuides, templateElementsBySlideId);
|
|
7085
7093
|
const saveOptions = {
|
|
7086
7094
|
headerFooter,
|
|
7087
7095
|
presentationProperties,
|
|
@@ -7107,11 +7115,11 @@ function useExportSaveAs(input) {
|
|
|
7107
7115
|
const handleExportJson = () => {
|
|
7108
7116
|
const sourceName = filePath ? filePath.replace(/\\/gu, "/").split("/").pop() : void 0;
|
|
7109
7117
|
const data = {
|
|
7110
|
-
slides:
|
|
7118
|
+
slides: chunkHAQDKQ52_js.buildSaveSlides(slides, templateElementsBySlideId),
|
|
7111
7119
|
width: canvasSize.width,
|
|
7112
7120
|
height: canvasSize.height,
|
|
7113
|
-
widthEmu:
|
|
7114
|
-
heightEmu:
|
|
7121
|
+
widthEmu: chunkMZ47MV52_js.guidePxToEmu(canvasSize.width),
|
|
7122
|
+
heightEmu: chunkMZ47MV52_js.guidePxToEmu(canvasSize.height),
|
|
7115
7123
|
theme,
|
|
7116
7124
|
headerFooter,
|
|
7117
7125
|
presentationProperties,
|
|
@@ -7125,7 +7133,7 @@ function useExportSaveAs(input) {
|
|
|
7125
7133
|
handoutMaster
|
|
7126
7134
|
};
|
|
7127
7135
|
try {
|
|
7128
|
-
|
|
7136
|
+
chunkMZ47MV52_js.exportDeckJson(data, sourceName);
|
|
7129
7137
|
} catch (err) {
|
|
7130
7138
|
console.error("[PowerPointViewer] JSON export failed:", err);
|
|
7131
7139
|
}
|
|
@@ -7165,7 +7173,7 @@ function safeConfirm(message) {
|
|
|
7165
7173
|
}
|
|
7166
7174
|
}
|
|
7167
7175
|
function downloadBlob2(blob, filename) {
|
|
7168
|
-
|
|
7176
|
+
chunkMZ47MV52_js.downloadBlob(blob, chunkMZ47MV52_js.sanitizeDownloadFilename(filename));
|
|
7169
7177
|
}
|
|
7170
7178
|
|
|
7171
7179
|
// src/viewer/hooks/useExportHandlers.ts
|
|
@@ -7271,21 +7279,21 @@ function useExportHandlers(input) {
|
|
|
7271
7279
|
{
|
|
7272
7280
|
scale: 2,
|
|
7273
7281
|
onProgress: (current, total) => {
|
|
7274
|
-
setExportProgress(
|
|
7275
|
-
setExportStatusMessage(
|
|
7282
|
+
setExportProgress(chunkMZ47MV52_js.slideProgressPercent(current, total));
|
|
7283
|
+
setExportStatusMessage(chunkMZ47MV52_js.slideStatusLabel("Rendering", current, total));
|
|
7276
7284
|
},
|
|
7277
7285
|
signal: abortCtrl.signal
|
|
7278
7286
|
}
|
|
7279
7287
|
);
|
|
7280
|
-
setExportProgress(
|
|
7288
|
+
setExportProgress(chunkMZ47MV52_js.EXPORT_ASSEMBLING_PERCENT);
|
|
7281
7289
|
setExportStatusMessage("Building PDF...");
|
|
7282
7290
|
await new Promise((r) => {
|
|
7283
7291
|
setTimeout(r, 100);
|
|
7284
7292
|
});
|
|
7285
|
-
setExportProgress(
|
|
7293
|
+
setExportProgress(chunkMZ47MV52_js.EXPORT_DONE_PERCENT);
|
|
7286
7294
|
setExportStatusMessage("Done!");
|
|
7287
7295
|
} catch (err) {
|
|
7288
|
-
if (!
|
|
7296
|
+
if (!chunkMZ47MV52_js.isExportAbortError(err)) {
|
|
7289
7297
|
console.error("[PowerPointViewer] PDF export failed:", err);
|
|
7290
7298
|
}
|
|
7291
7299
|
} finally {
|
|
@@ -7315,21 +7323,21 @@ function useExportHandlers(input) {
|
|
|
7315
7323
|
{
|
|
7316
7324
|
scale: 2,
|
|
7317
7325
|
onProgress: (current, total) => {
|
|
7318
|
-
setExportProgress(
|
|
7319
|
-
setExportStatusMessage(
|
|
7326
|
+
setExportProgress(chunkMZ47MV52_js.slideProgressPercent(current, total));
|
|
7327
|
+
setExportStatusMessage(chunkMZ47MV52_js.slideStatusLabel("Rendering", current, total));
|
|
7320
7328
|
},
|
|
7321
7329
|
signal: abortCtrl.signal
|
|
7322
7330
|
}
|
|
7323
7331
|
);
|
|
7324
|
-
setExportProgress(
|
|
7332
|
+
setExportProgress(chunkMZ47MV52_js.EXPORT_ASSEMBLING_PERCENT);
|
|
7325
7333
|
setExportStatusMessage("Building PDF...");
|
|
7326
7334
|
await new Promise((r) => {
|
|
7327
7335
|
setTimeout(r, 100);
|
|
7328
7336
|
});
|
|
7329
|
-
setExportProgress(
|
|
7337
|
+
setExportProgress(chunkMZ47MV52_js.EXPORT_DONE_PERCENT);
|
|
7330
7338
|
setExportStatusMessage("Done!");
|
|
7331
7339
|
} catch (err) {
|
|
7332
|
-
if (!
|
|
7340
|
+
if (!chunkMZ47MV52_js.isExportAbortError(err)) {
|
|
7333
7341
|
console.error("[PowerPointViewer] Notes PDF export failed:", err);
|
|
7334
7342
|
}
|
|
7335
7343
|
} finally {
|
|
@@ -7370,22 +7378,22 @@ function useExportHandlers(input) {
|
|
|
7370
7378
|
scale: 1,
|
|
7371
7379
|
slideDurationMs: 3e3,
|
|
7372
7380
|
onProgress: (current, total) => {
|
|
7373
|
-
setExportProgress(
|
|
7374
|
-
setExportStatusMessage(
|
|
7381
|
+
setExportProgress(chunkMZ47MV52_js.slideProgressPercent(current, total, 45));
|
|
7382
|
+
setExportStatusMessage(chunkMZ47MV52_js.slideStatusLabel("Capturing", current, total));
|
|
7375
7383
|
},
|
|
7376
7384
|
onRecordProgress: (current, total) => {
|
|
7377
|
-
setExportProgress(
|
|
7378
|
-
setExportStatusMessage(
|
|
7385
|
+
setExportProgress(chunkMZ47MV52_js.recordProgressPercent(current, total));
|
|
7386
|
+
setExportStatusMessage(chunkMZ47MV52_js.slideStatusLabel("Recording", current, total));
|
|
7379
7387
|
},
|
|
7380
7388
|
signal: abortCtrl.signal
|
|
7381
7389
|
}
|
|
7382
7390
|
);
|
|
7383
|
-
setExportProgress(
|
|
7391
|
+
setExportProgress(chunkMZ47MV52_js.EXPORT_ASSEMBLING_PERCENT);
|
|
7384
7392
|
setExportStatusMessage("Saving file...");
|
|
7385
7393
|
downloadBlob2(blob, "presentation.webm");
|
|
7386
|
-
setExportProgress(
|
|
7394
|
+
setExportProgress(chunkMZ47MV52_js.EXPORT_DONE_PERCENT);
|
|
7387
7395
|
} catch (err) {
|
|
7388
|
-
if (!
|
|
7396
|
+
if (!chunkMZ47MV52_js.isExportAbortError(err)) {
|
|
7389
7397
|
console.error("[PowerPointViewer] Video export failed:", err);
|
|
7390
7398
|
}
|
|
7391
7399
|
} finally {
|
|
@@ -7413,18 +7421,18 @@ function useExportHandlers(input) {
|
|
|
7413
7421
|
scale: 0.5,
|
|
7414
7422
|
slideDurationMs: 2e3,
|
|
7415
7423
|
onProgress: (current, total) => {
|
|
7416
|
-
setExportProgress(
|
|
7417
|
-
setExportStatusMessage(
|
|
7424
|
+
setExportProgress(chunkMZ47MV52_js.slideProgressPercent(current, total));
|
|
7425
|
+
setExportStatusMessage(chunkMZ47MV52_js.slideStatusLabel("Encoding", current, total));
|
|
7418
7426
|
},
|
|
7419
7427
|
signal: abortCtrl.signal
|
|
7420
7428
|
}
|
|
7421
7429
|
);
|
|
7422
|
-
setExportProgress(
|
|
7430
|
+
setExportProgress(chunkMZ47MV52_js.EXPORT_ASSEMBLING_PERCENT);
|
|
7423
7431
|
setExportStatusMessage("Saving file...");
|
|
7424
7432
|
downloadBlob2(blob, "presentation.gif");
|
|
7425
|
-
setExportProgress(
|
|
7433
|
+
setExportProgress(chunkMZ47MV52_js.EXPORT_DONE_PERCENT);
|
|
7426
7434
|
} catch (err) {
|
|
7427
|
-
if (!
|
|
7435
|
+
if (!chunkMZ47MV52_js.isExportAbortError(err)) {
|
|
7428
7436
|
console.error("[PowerPointViewer] GIF export failed:", err);
|
|
7429
7437
|
}
|
|
7430
7438
|
} finally {
|
|
@@ -7465,7 +7473,7 @@ function openPrintWindow(title, bodyHtml, orientation, colorFilter, frameSlides)
|
|
|
7465
7473
|
}
|
|
7466
7474
|
printWindow.document.open();
|
|
7467
7475
|
printWindow.document.write(
|
|
7468
|
-
|
|
7476
|
+
chunkMZ47MV52_js.buildPrintHtmlDocument({ title, bodyHtml, orientation, colorFilter, frameSlides })
|
|
7469
7477
|
);
|
|
7470
7478
|
printWindow.document.close();
|
|
7471
7479
|
printWindow.focus();
|
|
@@ -7526,7 +7534,7 @@ function usePrintHandlers(input) {
|
|
|
7526
7534
|
if (svgs.length === 0) {
|
|
7527
7535
|
return;
|
|
7528
7536
|
}
|
|
7529
|
-
const printDoc =
|
|
7537
|
+
const printDoc = chunkMZ47MV52_js.buildPrintDocument(svgs, pptxData.width, pptxData.height, {
|
|
7530
7538
|
title: "Slides (Vector)",
|
|
7531
7539
|
orientation: settings.orientation,
|
|
7532
7540
|
colorFilter
|
|
@@ -7562,7 +7570,7 @@ function usePrintHandlers(input) {
|
|
|
7562
7570
|
if (settings.printWhat === "outline") {
|
|
7563
7571
|
openPrintWindow(
|
|
7564
7572
|
"Outline",
|
|
7565
|
-
`<div class="outline-page">${
|
|
7573
|
+
`<div class="outline-page">${chunkMZ47MV52_js.buildOutlineHtml(slideIndices, slides)}</div>`,
|
|
7566
7574
|
settings.orientation,
|
|
7567
7575
|
colorFilter,
|
|
7568
7576
|
settings.frameSlides
|
|
@@ -7587,7 +7595,7 @@ function usePrintHandlers(input) {
|
|
|
7587
7595
|
if (settings.printWhat === "slides") {
|
|
7588
7596
|
openPrintWindow(
|
|
7589
7597
|
"Slides",
|
|
7590
|
-
|
|
7598
|
+
chunkMZ47MV52_js.buildSlidesHtml(slideImages, slideIndices),
|
|
7591
7599
|
settings.orientation,
|
|
7592
7600
|
colorFilter,
|
|
7593
7601
|
settings.frameSlides
|
|
@@ -7597,7 +7605,7 @@ function usePrintHandlers(input) {
|
|
|
7597
7605
|
if (settings.printWhat === "notes") {
|
|
7598
7606
|
openPrintWindow(
|
|
7599
7607
|
"Notes Pages",
|
|
7600
|
-
|
|
7608
|
+
chunkMZ47MV52_js.buildNotesHtml(slideImages, slideIndices, slides),
|
|
7601
7609
|
"portrait",
|
|
7602
7610
|
colorFilter,
|
|
7603
7611
|
settings.frameSlides
|
|
@@ -7608,7 +7616,7 @@ function usePrintHandlers(input) {
|
|
|
7608
7616
|
const spp = settings.slidesPerPage;
|
|
7609
7617
|
openPrintWindow(
|
|
7610
7618
|
`Handout ${spp} per page`,
|
|
7611
|
-
|
|
7619
|
+
chunkMZ47MV52_js.buildHandoutsHtml(slideImages, slideIndices, spp),
|
|
7612
7620
|
"portrait",
|
|
7613
7621
|
colorFilter,
|
|
7614
7622
|
settings.frameSlides
|
|
@@ -7672,8 +7680,8 @@ function useThemeHandlers(input) {
|
|
|
7672
7680
|
return;
|
|
7673
7681
|
}
|
|
7674
7682
|
await handler.updateThemeColorScheme(colorScheme);
|
|
7675
|
-
const previousMap = theme?.colorScheme ?
|
|
7676
|
-
setSlides((prev) =>
|
|
7683
|
+
const previousMap = theme?.colorScheme ? chunkMZ47MV52_js.buildThemeColorMap(theme.colorScheme) : {};
|
|
7684
|
+
setSlides((prev) => chunkMZ47MV52_js.reResolveSlideColors(prev, previousMap, colorScheme));
|
|
7677
7685
|
setTheme((prev) => prev ? { ...prev, colorScheme } : { colorScheme });
|
|
7678
7686
|
bumpHistory();
|
|
7679
7687
|
history.markDirty();
|
|
@@ -7778,7 +7786,7 @@ function useThemeSwitching(input) {
|
|
|
7778
7786
|
}
|
|
7779
7787
|
try {
|
|
7780
7788
|
await handler.applyTheme(preset.colorScheme, preset.fontScheme, preset.name);
|
|
7781
|
-
const newData =
|
|
7789
|
+
const newData = chunkMZ47MV52_js.applyThemeToData(data, preset.colorScheme, preset.fontScheme, preset.name);
|
|
7782
7790
|
onDataChange(newData);
|
|
7783
7791
|
onThemeChanged?.(preset);
|
|
7784
7792
|
} catch (error) {
|
|
@@ -7795,7 +7803,7 @@ function useThemeSwitching(input) {
|
|
|
7795
7803
|
}
|
|
7796
7804
|
try {
|
|
7797
7805
|
await handler.applyTheme(colorScheme, fontScheme ?? {}, themeName);
|
|
7798
|
-
const newData =
|
|
7806
|
+
const newData = chunkMZ47MV52_js.applyThemeToData(data, colorScheme, fontScheme, themeName);
|
|
7799
7807
|
onDataChange(newData);
|
|
7800
7808
|
} catch (error) {
|
|
7801
7809
|
console.error("Failed to switch to custom theme:", error);
|
|
@@ -7807,12 +7815,12 @@ function useThemeSwitching(input) {
|
|
|
7807
7815
|
if (!data?.theme?.colorScheme) {
|
|
7808
7816
|
return void 0;
|
|
7809
7817
|
}
|
|
7810
|
-
return
|
|
7811
|
-
(p) =>
|
|
7818
|
+
return chunkMZ47MV52_js.THEME_PRESETS.find(
|
|
7819
|
+
(p) => chunkMZ47MV52_js.themeColorSchemesEqual(data.theme?.colorScheme, p.colorScheme)
|
|
7812
7820
|
);
|
|
7813
7821
|
}, [data?.theme?.colorScheme]);
|
|
7814
7822
|
return {
|
|
7815
|
-
presets:
|
|
7823
|
+
presets: chunkMZ47MV52_js.THEME_PRESETS,
|
|
7816
7824
|
switchToPreset,
|
|
7817
7825
|
switchToCustom,
|
|
7818
7826
|
currentPreset
|
|
@@ -7887,7 +7895,7 @@ function usePropertyHandlers(input) {
|
|
|
7887
7895
|
}
|
|
7888
7896
|
try {
|
|
7889
7897
|
const ab = await file.arrayBuffer();
|
|
7890
|
-
const h = new
|
|
7898
|
+
const h = new chunkMZ47MV52_js.PptxHandler();
|
|
7891
7899
|
const other = await h.load(ab);
|
|
7892
7900
|
if (!other) {
|
|
7893
7901
|
return;
|
|
@@ -7897,7 +7905,7 @@ function usePropertyHandlers(input) {
|
|
|
7897
7905
|
width: canvasSize.width,
|
|
7898
7906
|
height: canvasSize.height
|
|
7899
7907
|
};
|
|
7900
|
-
setCompareResult(
|
|
7908
|
+
setCompareResult(chunkMZ47MV52_js.comparePresentation(cur, other));
|
|
7901
7909
|
setIsComparePanelOpen(true);
|
|
7902
7910
|
} catch (err) {
|
|
7903
7911
|
console.warn("Compare failed:", err);
|
|
@@ -7914,7 +7922,7 @@ function usePropertyHandlers(input) {
|
|
|
7914
7922
|
if (!diff || diff.status === "unchanged") {
|
|
7915
7923
|
return;
|
|
7916
7924
|
}
|
|
7917
|
-
setSlides((prev) =>
|
|
7925
|
+
setSlides((prev) => chunkMZ47MV52_js.applyAcceptSlide(prev, diff));
|
|
7918
7926
|
setIsDirty(true);
|
|
7919
7927
|
},
|
|
7920
7928
|
[compareResult, setSlides, setIsDirty]
|
|
@@ -7925,10 +7933,10 @@ function usePropertyHandlers(input) {
|
|
|
7925
7933
|
if (!compareResult) {
|
|
7926
7934
|
return;
|
|
7927
7935
|
}
|
|
7928
|
-
setSlides((prev) =>
|
|
7936
|
+
setSlides((prev) => chunkMZ47MV52_js.applyAcceptAllSlides(prev, compareResult));
|
|
7929
7937
|
setIsDirty(true);
|
|
7930
7938
|
}, [compareResult, setSlides, setIsDirty]);
|
|
7931
|
-
const usedFontFamilies = react.useMemo(() =>
|
|
7939
|
+
const usedFontFamilies = react.useMemo(() => chunkMZ47MV52_js.collectUsedFonts(slides), [slides]);
|
|
7932
7940
|
return {
|
|
7933
7941
|
handleUpdateNotes,
|
|
7934
7942
|
handleUpdateSlide,
|
|
@@ -8047,7 +8055,7 @@ function useIsMobile(input) {
|
|
|
8047
8055
|
const containerRef = input?.containerRef;
|
|
8048
8056
|
const isTouchDevice = react.useSyncExternalStore(
|
|
8049
8057
|
subscribeTouchCapability,
|
|
8050
|
-
|
|
8058
|
+
chunkMZ47MV52_js.detectTouchDevice,
|
|
8051
8059
|
() => false
|
|
8052
8060
|
// server snapshot
|
|
8053
8061
|
);
|
|
@@ -8063,7 +8071,7 @@ function useIsMobile(input) {
|
|
|
8063
8071
|
}
|
|
8064
8072
|
return containerRef?.current?.clientHeight ?? window.innerHeight;
|
|
8065
8073
|
});
|
|
8066
|
-
const [orientation, setOrientation] = react.useState(
|
|
8074
|
+
const [orientation, setOrientation] = react.useState(chunkMZ47MV52_js.detectOrientation);
|
|
8067
8075
|
const [isVirtualKeyboardOpen, setIsVirtualKeyboardOpen] = react.useState(false);
|
|
8068
8076
|
const [initialViewportHeight] = react.useState(
|
|
8069
8077
|
() => typeof window !== "undefined" ? window.innerHeight : 800
|
|
@@ -8107,7 +8115,7 @@ function useIsMobile(input) {
|
|
|
8107
8115
|
return;
|
|
8108
8116
|
}
|
|
8109
8117
|
const handleOrientationChange = () => {
|
|
8110
|
-
setOrientation(
|
|
8118
|
+
setOrientation(chunkMZ47MV52_js.detectOrientation());
|
|
8111
8119
|
};
|
|
8112
8120
|
if (screen.orientation) {
|
|
8113
8121
|
screen.orientation.addEventListener("change", handleOrientationChange);
|
|
@@ -8137,9 +8145,9 @@ function useIsMobile(input) {
|
|
|
8137
8145
|
window.addEventListener("resize", handleResize);
|
|
8138
8146
|
return () => window.removeEventListener("resize", handleResize);
|
|
8139
8147
|
}, [isTouchDevice, initialViewportHeight]);
|
|
8140
|
-
const isMobile =
|
|
8141
|
-
const isTablet = !isMobile && containerWidth >=
|
|
8142
|
-
const isDesktop = !isMobile && containerWidth >=
|
|
8148
|
+
const isMobile = chunkMZ47MV52_js.isMobileViewport(containerWidth, containerHeight, isTouchDevice);
|
|
8149
|
+
const isTablet = !isMobile && containerWidth >= chunkMZ47MV52_js.MOBILE_BREAKPOINT && containerWidth < chunkMZ47MV52_js.TABLET_BREAKPOINT;
|
|
8150
|
+
const isDesktop = !isMobile && containerWidth >= chunkMZ47MV52_js.TABLET_BREAKPOINT;
|
|
8143
8151
|
return {
|
|
8144
8152
|
isMobile,
|
|
8145
8153
|
isTablet,
|
|
@@ -8200,11 +8208,11 @@ function useViewerDialogs(input) {
|
|
|
8200
8208
|
);
|
|
8201
8209
|
const [embedFontsEnabled, setEmbedFontsEnabled] = react.useState(false);
|
|
8202
8210
|
const [isNarrowViewport, setIsNarrowViewport] = react.useState(
|
|
8203
|
-
() => typeof window !== "undefined" ?
|
|
8211
|
+
() => typeof window !== "undefined" ? chunkMZ47MV52_js.isMobileViewport(window.innerWidth, window.innerHeight, viewportIsTouch()) : false
|
|
8204
8212
|
);
|
|
8205
8213
|
react.useEffect(() => {
|
|
8206
8214
|
const handleWindow = () => setIsNarrowViewport(
|
|
8207
|
-
|
|
8215
|
+
chunkMZ47MV52_js.isMobileViewport(window.innerWidth, window.innerHeight, viewportIsTouch())
|
|
8208
8216
|
);
|
|
8209
8217
|
let observer = null;
|
|
8210
8218
|
let raf = 0;
|
|
@@ -8218,12 +8226,12 @@ function useViewerDialogs(input) {
|
|
|
8218
8226
|
const entry = entries[0];
|
|
8219
8227
|
if (entry) {
|
|
8220
8228
|
setIsNarrowViewport(
|
|
8221
|
-
|
|
8229
|
+
chunkMZ47MV52_js.isMobileViewport(entry.contentRect.width, entry.contentRect.height, viewportIsTouch())
|
|
8222
8230
|
);
|
|
8223
8231
|
}
|
|
8224
8232
|
});
|
|
8225
8233
|
observer.observe(el);
|
|
8226
|
-
setIsNarrowViewport(
|
|
8234
|
+
setIsNarrowViewport(chunkMZ47MV52_js.isMobileViewport(el.clientWidth, el.clientHeight, viewportIsTouch()));
|
|
8227
8235
|
};
|
|
8228
8236
|
attach();
|
|
8229
8237
|
window.addEventListener("resize", handleWindow);
|
|
@@ -8381,20 +8389,20 @@ function useViewerDialogs(input) {
|
|
|
8381
8389
|
}
|
|
8382
8390
|
function computeGridSpacingPx(presentationGridSpacing) {
|
|
8383
8391
|
if (presentationGridSpacing) {
|
|
8384
|
-
const px = Math.round(presentationGridSpacing.cx /
|
|
8392
|
+
const px = Math.round(presentationGridSpacing.cx / chunkHAQDKQ52_js.EMU_PER_PX);
|
|
8385
8393
|
if (px > 0) {
|
|
8386
8394
|
return px;
|
|
8387
8395
|
}
|
|
8388
8396
|
}
|
|
8389
|
-
return
|
|
8397
|
+
return chunkHAQDKQ52_js.GRID_SIZE;
|
|
8390
8398
|
}
|
|
8391
8399
|
function computeVisibleSlideIndexes(slides, activeCustomShowId, customShows) {
|
|
8392
8400
|
const activeShow = activeCustomShowId ? customShows.find((show) => show.id === activeCustomShowId) : void 0;
|
|
8393
|
-
return
|
|
8401
|
+
return chunkMZ47MV52_js.resolveShowSlideIndexes(slides, activeShow);
|
|
8394
8402
|
}
|
|
8395
8403
|
function computeSlideSectionGroups(slides, sections) {
|
|
8396
|
-
return
|
|
8397
|
-
id: group.section?.id ?? (sections.length > 0 ?
|
|
8404
|
+
return chunkMZ47MV52_js.groupSlidesBySection(sections, slides).map((group) => ({
|
|
8405
|
+
id: group.section?.id ?? (sections.length > 0 ? chunkHAQDKQ52_js.UNGROUPED_SECTION_ID : "default"),
|
|
8398
8406
|
label: group.section?.name ?? (sections.length > 0 ? "Ungrouped Slides" : "Slides"),
|
|
8399
8407
|
slideIndexes: group.slideIndexes,
|
|
8400
8408
|
...group.section?.color !== void 0 ? { color: group.section.color } : {},
|
|
@@ -8449,7 +8457,7 @@ function useDerivedSlideState(input) {
|
|
|
8449
8457
|
);
|
|
8450
8458
|
const slideSectionGroups = react.useMemo(
|
|
8451
8459
|
() => computeSlideSectionGroups(slides, sections).map((group) => {
|
|
8452
|
-
if (group.id ===
|
|
8460
|
+
if (group.id === chunkHAQDKQ52_js.UNGROUPED_SECTION_ID && group.label === "Ungrouped Slides") {
|
|
8453
8461
|
return { ...group, label: t("pptx.slides.ungroupedSlides") };
|
|
8454
8462
|
}
|
|
8455
8463
|
if (group.id === "default" && group.label === "Slides") {
|
|
@@ -8552,13 +8560,13 @@ function useAnnotationHandlers(input) {
|
|
|
8552
8560
|
}, [annotations, setMode, setSlides, history]);
|
|
8553
8561
|
const handleSetMode = react.useCallback(
|
|
8554
8562
|
(nextMode) => {
|
|
8555
|
-
if (mode === "present" && nextMode !== "present" && !
|
|
8563
|
+
if (mode === "present" && nextMode !== "present" && !chunkMZ47MV52_js.mayLeaveSlideShow()) {
|
|
8556
8564
|
return;
|
|
8557
8565
|
}
|
|
8558
8566
|
if (nextMode === "present") {
|
|
8559
8567
|
presentation.enterPresentMode();
|
|
8560
8568
|
} else if (mode === "present" && annotations.hasAnyAnnotations) {
|
|
8561
|
-
|
|
8569
|
+
chunkMZ47MV52_js.stopAllPersistentAudio();
|
|
8562
8570
|
pendingModeAfterAnnotationsRef.current = nextMode;
|
|
8563
8571
|
if (promptKeepInkAnnotations) {
|
|
8564
8572
|
setShowKeepAnnotationsDialog(true);
|
|
@@ -8567,7 +8575,7 @@ function useAnnotationHandlers(input) {
|
|
|
8567
8575
|
}
|
|
8568
8576
|
} else {
|
|
8569
8577
|
if (mode === "present") {
|
|
8570
|
-
|
|
8578
|
+
chunkMZ47MV52_js.stopAllPersistentAudio();
|
|
8571
8579
|
}
|
|
8572
8580
|
setMode(nextMode);
|
|
8573
8581
|
}
|
|
@@ -8633,13 +8641,13 @@ function useSerialize(input) {
|
|
|
8633
8641
|
let processedSlide = slide;
|
|
8634
8642
|
if (pendingEditId) {
|
|
8635
8643
|
const updatedElements = slide.elements.map((el) => {
|
|
8636
|
-
if (el.id !== pendingEditId || !
|
|
8644
|
+
if (el.id !== pendingEditId || !chunkMZ47MV52_js.hasTextProperties(el)) {
|
|
8637
8645
|
return el;
|
|
8638
8646
|
}
|
|
8639
8647
|
return {
|
|
8640
8648
|
...el,
|
|
8641
8649
|
text: pendingEditText,
|
|
8642
|
-
textSegments:
|
|
8650
|
+
textSegments: chunkMZ47MV52_js.remapTextToSegments(pendingEditText, el.textSegments, el.textStyle)
|
|
8643
8651
|
};
|
|
8644
8652
|
});
|
|
8645
8653
|
if (updatedElements.some((el, i) => el !== slide.elements[i])) {
|
|
@@ -8652,14 +8660,14 @@ function useSerialize(input) {
|
|
|
8652
8660
|
const pptxGuides = guides.map((g) => ({
|
|
8653
8661
|
id: g.id,
|
|
8654
8662
|
orientation: g.axis === "h" ? "horz" : "vert",
|
|
8655
|
-
positionEmu:
|
|
8663
|
+
positionEmu: chunkMZ47MV52_js.guidePxToEmu(g.position)
|
|
8656
8664
|
}));
|
|
8657
8665
|
return {
|
|
8658
8666
|
...processedSlide,
|
|
8659
8667
|
guides: pptxGuides.length > 0 ? pptxGuides : void 0
|
|
8660
8668
|
};
|
|
8661
8669
|
});
|
|
8662
|
-
const slidesToSave =
|
|
8670
|
+
const slidesToSave = chunkHAQDKQ52_js.buildSaveSlides(slidesWithGuides, templateElementsBySlideId);
|
|
8663
8671
|
const saveOptions = {
|
|
8664
8672
|
headerFooter,
|
|
8665
8673
|
presentationProperties,
|
|
@@ -8828,7 +8836,7 @@ function usePresentationSetup(input) {
|
|
|
8828
8836
|
containerRef,
|
|
8829
8837
|
content,
|
|
8830
8838
|
onSetMode: (nextMode) => {
|
|
8831
|
-
if (mode === "present" && nextMode !== "present" && !
|
|
8839
|
+
if (mode === "present" && nextMode !== "present" && !chunkMZ47MV52_js.mayLeaveSlideShow()) {
|
|
8832
8840
|
return;
|
|
8833
8841
|
}
|
|
8834
8842
|
if (mode === "present" && nextMode !== "present" && annotations.hasAnyAnnotations && promptKeepInkAnnotations) {
|
|
@@ -8836,7 +8844,7 @@ function usePresentationSetup(input) {
|
|
|
8836
8844
|
setShowKeepAnnotationsDialog(true);
|
|
8837
8845
|
} else {
|
|
8838
8846
|
if (mode === "present" && nextMode !== "present") {
|
|
8839
|
-
|
|
8847
|
+
chunkMZ47MV52_js.stopAllPersistentAudio();
|
|
8840
8848
|
stopAnimationSound();
|
|
8841
8849
|
}
|
|
8842
8850
|
setMode(nextMode);
|
|
@@ -8890,10 +8898,10 @@ function usePresentationSetup(input) {
|
|
|
8890
8898
|
onToggleInkMarkup: () => annotations.setInkMarkupVisible(!annotations.inkMarkupVisible),
|
|
8891
8899
|
onToggleToolbar: () => annotations.setToolbarVisible(!annotations.toolbarVisible),
|
|
8892
8900
|
onSaveRehearsalTimings: (timings) => {
|
|
8893
|
-
setSlides((prev) =>
|
|
8901
|
+
setSlides((prev) => chunkMZ47MV52_js.applyRehearsalTimings(prev, timings));
|
|
8894
8902
|
history.markDirty();
|
|
8895
8903
|
},
|
|
8896
|
-
loopContinuously:
|
|
8904
|
+
loopContinuously: chunkMZ47MV52_js.shouldLoopContinuously(presentationProperties),
|
|
8897
8905
|
showWithAnimation: presentationProperties.showWithAnimation,
|
|
8898
8906
|
useTimings: presentationProperties.advanceMode !== "manual",
|
|
8899
8907
|
endWithBlackSlide
|
|
@@ -8976,6 +8984,7 @@ function useEditorOperations(input) {
|
|
|
8976
8984
|
resizeStateRef: state.resizeStateRef,
|
|
8977
8985
|
shapeAdjustmentDragStateRef: state.shapeAdjustmentDragStateRef,
|
|
8978
8986
|
marqueeStateRef: state.marqueeStateRef,
|
|
8987
|
+
justInteractedRef: state.justInteractedRef,
|
|
8979
8988
|
setInlineEditingElementId: state.setInlineEditingElementId,
|
|
8980
8989
|
setInlineEditingText: state.setInlineEditingText,
|
|
8981
8990
|
setContextMenuState: state.setContextMenuState,
|
|
@@ -9057,7 +9066,7 @@ function useEditorOperations(input) {
|
|
|
9057
9066
|
const { formatPainterActive, setFormatPainterActive, elementLookup } = state;
|
|
9058
9067
|
react.useEffect(() => {
|
|
9059
9068
|
if (formatPainterActive && !prevFormatPainterRef.current && selectedElement) {
|
|
9060
|
-
copiedFormatRef.current =
|
|
9069
|
+
copiedFormatRef.current = chunkMZ47MV52_js.copyFormatFromElement(selectedElement);
|
|
9061
9070
|
} else if (!formatPainterActive) {
|
|
9062
9071
|
copiedFormatRef.current = null;
|
|
9063
9072
|
}
|
|
@@ -9083,12 +9092,12 @@ function useEditorOperations(input) {
|
|
|
9083
9092
|
e.stopPropagation();
|
|
9084
9093
|
const element = elementLookup.get(elementId);
|
|
9085
9094
|
if (element) {
|
|
9086
|
-
const updated =
|
|
9095
|
+
const updated = chunkMZ47MV52_js.applyFormatToElement(element, copiedFormatRef.current);
|
|
9087
9096
|
const updates = {};
|
|
9088
|
-
if (
|
|
9097
|
+
if (chunkMZ47MV52_js.hasShapeProperties(updated)) {
|
|
9089
9098
|
updates.shapeStyle = updated.shapeStyle;
|
|
9090
9099
|
}
|
|
9091
|
-
if (
|
|
9100
|
+
if (chunkMZ47MV52_js.hasTextProperties(updated)) {
|
|
9092
9101
|
updates.textStyle = updated.textStyle;
|
|
9093
9102
|
}
|
|
9094
9103
|
ops.updateElementById(elementId, updates);
|
|
@@ -9237,7 +9246,7 @@ function collectReferencedFontFamilies(slides) {
|
|
|
9237
9246
|
const families = /* @__PURE__ */ new Set();
|
|
9238
9247
|
for (const slide of slides) {
|
|
9239
9248
|
for (const el of slide.elements) {
|
|
9240
|
-
if (
|
|
9249
|
+
if (chunkMZ47MV52_js.hasTextProperties(el) && el.textSegments) {
|
|
9241
9250
|
for (const seg of el.textSegments) {
|
|
9242
9251
|
if (seg.style.fontFamily) {
|
|
9243
9252
|
families.add(seg.style.fontFamily);
|
|
@@ -9449,13 +9458,13 @@ function useKeyboardShortcuts(input) {
|
|
|
9449
9458
|
inputRef.current = input;
|
|
9450
9459
|
const handleKeyDown = react.useCallback((e) => {
|
|
9451
9460
|
const current = inputRef.current;
|
|
9452
|
-
const { action, dx, dy } =
|
|
9461
|
+
const { action, dx, dy } = chunkMZ47MV52_js.mapEditorKey(e, {
|
|
9453
9462
|
canEdit: current.canEdit,
|
|
9454
9463
|
isPresenting: current.mode !== "edit",
|
|
9455
9464
|
hasSelection: current.hasSelection,
|
|
9456
9465
|
isEditingText: Boolean(current.inlineEditingElementId || current.tableEditorState?.isEditing),
|
|
9457
9466
|
isDrawing: current.activeTool !== "select",
|
|
9458
|
-
isTextInputTarget:
|
|
9467
|
+
isTextInputTarget: chunkMZ47MV52_js.isEditorTextInputTarget(e.target)
|
|
9459
9468
|
});
|
|
9460
9469
|
if (action === null) {
|
|
9461
9470
|
return;
|
|
@@ -9635,6 +9644,7 @@ function useViewerIntegration(input) {
|
|
|
9635
9644
|
resizeStateRef: state.resizeStateRef,
|
|
9636
9645
|
shapeAdjustmentDragStateRef: state.shapeAdjustmentDragStateRef,
|
|
9637
9646
|
marqueeStateRef: state.marqueeStateRef,
|
|
9647
|
+
justInteractedRef: state.justInteractedRef,
|
|
9638
9648
|
editTemplateMode: state.editTemplateMode,
|
|
9639
9649
|
snapToGrid: state.snapToGrid,
|
|
9640
9650
|
snapToShape: state.snapToShape,
|
|
@@ -9748,7 +9758,7 @@ function useViewerIntegration(input) {
|
|
|
9748
9758
|
return zoom.scale;
|
|
9749
9759
|
},
|
|
9750
9760
|
setZoom(level) {
|
|
9751
|
-
zoom.setScale(
|
|
9761
|
+
zoom.setScale(chunkMZ47MV52_js.clampZoomScale(level));
|
|
9752
9762
|
},
|
|
9753
9763
|
zoomIn() {
|
|
9754
9764
|
zoom.handleZoomIn();
|
|
@@ -9963,7 +9973,7 @@ function useReducedMotion() {
|
|
|
9963
9973
|
}
|
|
9964
9974
|
function useViewerOptions() {
|
|
9965
9975
|
const storeRef = react.useRef(null);
|
|
9966
|
-
storeRef.current ??=
|
|
9976
|
+
storeRef.current ??= chunkMZ47MV52_js.createViewerOptionsStore();
|
|
9967
9977
|
const store = storeRef.current;
|
|
9968
9978
|
const options = react.useSyncExternalStore(
|
|
9969
9979
|
(onStoreChange) => store.subscribe(onStoreChange),
|
|
@@ -9972,9 +9982,9 @@ function useViewerOptions() {
|
|
|
9972
9982
|
);
|
|
9973
9983
|
return { optionsStore: store, options };
|
|
9974
9984
|
}
|
|
9975
|
-
var KNOWN_TAB_IDS = new Set(
|
|
9985
|
+
var KNOWN_TAB_IDS = new Set(chunkMZ47MV52_js.TOOLBAR_TABS.map((tab) => tab.id));
|
|
9976
9986
|
function computeToolbarVisibility(hiddenActions) {
|
|
9977
|
-
const isHidden = (id) =>
|
|
9987
|
+
const isHidden = (id) => chunkMZ47MV52_js.isActionHidden(id, hiddenActions);
|
|
9978
9988
|
const isTabVisible = (id) => !KNOWN_TAB_IDS.has(id) || !isHidden(id);
|
|
9979
9989
|
return { isHidden, isTabVisible };
|
|
9980
9990
|
}
|
|
@@ -10032,7 +10042,7 @@ function useYjsDocumentSync({
|
|
|
10032
10042
|
if (factoriesRef.current) {
|
|
10033
10043
|
return factoriesRef.current;
|
|
10034
10044
|
}
|
|
10035
|
-
const Y = await import('./yjs-
|
|
10045
|
+
const Y = await import('./yjs-OWUA3UHD.js');
|
|
10036
10046
|
const factories = {
|
|
10037
10047
|
createMap: () => new Y.Map(),
|
|
10038
10048
|
createArray: () => new Y.Array(),
|
|
@@ -10059,12 +10069,12 @@ function useYjsDocumentSync({
|
|
|
10059
10069
|
return;
|
|
10060
10070
|
}
|
|
10061
10071
|
try {
|
|
10062
|
-
const handler = new
|
|
10072
|
+
const handler = new chunkMZ47MV52_js.PptxHandler();
|
|
10063
10073
|
await handler.load(sourceBytes.buffer);
|
|
10064
|
-
const currentSlides =
|
|
10074
|
+
const currentSlides = chunkMZ47MV52_js.readSlidesFromYDoc(
|
|
10065
10075
|
doc
|
|
10066
10076
|
);
|
|
10067
|
-
const slidesToSave =
|
|
10077
|
+
const slidesToSave = chunkHAQDKQ52_js.buildSaveSlides(currentSlides, templateElementsBySlideId);
|
|
10068
10078
|
const bytes = await handler.save(slidesToSave);
|
|
10069
10079
|
config.onWriteBack(bytes);
|
|
10070
10080
|
} catch {
|
|
@@ -10079,7 +10089,7 @@ function useYjsDocumentSync({
|
|
|
10079
10089
|
if (!doc || !isConnected) {
|
|
10080
10090
|
return;
|
|
10081
10091
|
}
|
|
10082
|
-
const docSlides =
|
|
10092
|
+
const docSlides = chunkMZ47MV52_js.readSlidesFromYDoc(
|
|
10083
10093
|
doc
|
|
10084
10094
|
);
|
|
10085
10095
|
if (docSlides.length === 0) {
|
|
@@ -10101,11 +10111,11 @@ function useYjsDocumentSync({
|
|
|
10101
10111
|
lastSyncedRef.current = serialized;
|
|
10102
10112
|
void (async () => {
|
|
10103
10113
|
const factories = await getFactories();
|
|
10104
|
-
|
|
10114
|
+
chunkMZ47MV52_js.reconcileSlidesInYDoc(
|
|
10105
10115
|
slides,
|
|
10106
10116
|
doc,
|
|
10107
10117
|
factories,
|
|
10108
|
-
|
|
10118
|
+
chunkMZ47MV52_js.LOCAL_SYNC_ORIGIN
|
|
10109
10119
|
);
|
|
10110
10120
|
scheduleWriteBack();
|
|
10111
10121
|
})();
|
|
@@ -10119,10 +10129,10 @@ function useYjsDocumentSync({
|
|
|
10119
10129
|
return;
|
|
10120
10130
|
}
|
|
10121
10131
|
const handleChange = (_events, transaction) => {
|
|
10122
|
-
if (transaction?.origin ===
|
|
10132
|
+
if (transaction?.origin === chunkMZ47MV52_js.LOCAL_SYNC_ORIGIN) {
|
|
10123
10133
|
return;
|
|
10124
10134
|
}
|
|
10125
|
-
const remoteSlides =
|
|
10135
|
+
const remoteSlides = chunkMZ47MV52_js.readSlidesFromYDoc(
|
|
10126
10136
|
doc
|
|
10127
10137
|
);
|
|
10128
10138
|
if (remoteSlides.length === 0) {
|
|
@@ -10138,7 +10148,7 @@ function useYjsDocumentSync({
|
|
|
10138
10148
|
isApplyingRemoteRef.current = false;
|
|
10139
10149
|
scheduleWriteBack();
|
|
10140
10150
|
};
|
|
10141
|
-
const unobserve =
|
|
10151
|
+
const unobserve = chunkMZ47MV52_js.observeYDocSlides(
|
|
10142
10152
|
doc,
|
|
10143
10153
|
handleChange
|
|
10144
10154
|
);
|
|
@@ -10176,7 +10186,7 @@ function useBroadcastFollower({
|
|
|
10176
10186
|
if (!broadcaster) {
|
|
10177
10187
|
return;
|
|
10178
10188
|
}
|
|
10179
|
-
if (!
|
|
10189
|
+
if (!chunkMZ47MV52_js.shouldAutoFollowBroadcaster({
|
|
10180
10190
|
localRole: collab.config.role,
|
|
10181
10191
|
broadcasterRole: broadcaster.role
|
|
10182
10192
|
})) {
|
|
@@ -10248,7 +10258,7 @@ function useCollaborationLivePatch({
|
|
|
10248
10258
|
}
|
|
10249
10259
|
let cancelled = false;
|
|
10250
10260
|
void (async () => {
|
|
10251
|
-
const Y = await import('./yjs-
|
|
10261
|
+
const Y = await import('./yjs-OWUA3UHD.js');
|
|
10252
10262
|
if (cancelled) {
|
|
10253
10263
|
return;
|
|
10254
10264
|
}
|
|
@@ -10336,10 +10346,10 @@ function useTouchGestures(input) {
|
|
|
10336
10346
|
if (!el || !enabled) {
|
|
10337
10347
|
return;
|
|
10338
10348
|
}
|
|
10339
|
-
const recognizer =
|
|
10349
|
+
const recognizer = chunkMZ47MV52_js.createTouchGestureRecognizer({
|
|
10340
10350
|
getScale: () => scaleRef.current,
|
|
10341
|
-
minScale:
|
|
10342
|
-
maxScale:
|
|
10351
|
+
minScale: chunkMZ47MV52_js.MIN_ZOOM_SCALE,
|
|
10352
|
+
maxScale: chunkMZ47MV52_js.MAX_ZOOM_SCALE,
|
|
10343
10353
|
callbacks: {
|
|
10344
10354
|
onPinchZoom: (newScale) => callbacksRef.current.onPinchZoom?.(newScale),
|
|
10345
10355
|
onSwipe: (direction) => callbacksRef.current.onSwipe?.(direction),
|
|
@@ -10379,7 +10389,7 @@ function scrollFocusedIntoView(keyboardInset) {
|
|
|
10379
10389
|
return;
|
|
10380
10390
|
}
|
|
10381
10391
|
const rect = active.getBoundingClientRect();
|
|
10382
|
-
const delta =
|
|
10392
|
+
const delta = chunkMZ47MV52_js.computeScrollDelta(
|
|
10383
10393
|
{ top: rect.top, bottom: rect.bottom },
|
|
10384
10394
|
window.innerHeight,
|
|
10385
10395
|
keyboardInset
|
|
@@ -10399,8 +10409,8 @@ function useKeyboardInsets(enabled = true) {
|
|
|
10399
10409
|
return;
|
|
10400
10410
|
}
|
|
10401
10411
|
const update = () => {
|
|
10402
|
-
const metrics =
|
|
10403
|
-
const inset = metrics ?
|
|
10412
|
+
const metrics = chunkMZ47MV52_js.readViewportMetrics(window);
|
|
10413
|
+
const inset = metrics ? chunkMZ47MV52_js.computeKeyboardInset(metrics) : 0;
|
|
10404
10414
|
setKeyboardInset(inset);
|
|
10405
10415
|
if (inset > 0) {
|
|
10406
10416
|
window.requestAnimationFrame(() => scrollFocusedIntoView(inset));
|
|
@@ -10411,8 +10421,8 @@ function useKeyboardInsets(enabled = true) {
|
|
|
10411
10421
|
vv.addEventListener("scroll", update);
|
|
10412
10422
|
const onFocusIn = () => {
|
|
10413
10423
|
window.requestAnimationFrame(() => {
|
|
10414
|
-
const metrics =
|
|
10415
|
-
const inset = metrics ?
|
|
10424
|
+
const metrics = chunkMZ47MV52_js.readViewportMetrics(window);
|
|
10425
|
+
const inset = metrics ? chunkMZ47MV52_js.computeKeyboardInset(metrics) : 0;
|
|
10416
10426
|
if (inset > 0) {
|
|
10417
10427
|
scrollFocusedIntoView(inset);
|
|
10418
10428
|
}
|
|
@@ -10425,7 +10435,7 @@ function useKeyboardInsets(enabled = true) {
|
|
|
10425
10435
|
document.removeEventListener("focusin", onFocusIn);
|
|
10426
10436
|
};
|
|
10427
10437
|
}, [enabled]);
|
|
10428
|
-
return { keyboardInset, isKeyboardOpen:
|
|
10438
|
+
return { keyboardInset, isKeyboardOpen: chunkMZ47MV52_js.isKeyboardOpen(keyboardInset) };
|
|
10429
10439
|
}
|
|
10430
10440
|
|
|
10431
10441
|
// src/viewer/hooks/useViewerBuildingBlocks-canvas-props.ts
|
|
@@ -10452,7 +10462,7 @@ function buildCanvasProps(input) {
|
|
|
10452
10462
|
} = input;
|
|
10453
10463
|
const effectiveSlide = mode === "master" ? masterPseudoSlide : activeSlide;
|
|
10454
10464
|
const effectiveTemplateElements = mode === "master" ? s.activeLayout ? s.activeMaster?.elements ?? [] : [] : templateElements;
|
|
10455
|
-
const fieldContext =
|
|
10465
|
+
const fieldContext = chunkMZ47MV52_js.buildFieldSubstitutionContext({
|
|
10456
10466
|
headerFooter: s.headerFooter,
|
|
10457
10467
|
customProperties: s.customProperties,
|
|
10458
10468
|
slide: activeSlide
|
|
@@ -10462,13 +10472,13 @@ function buildCanvasProps(input) {
|
|
|
10462
10472
|
if (mode === "present") {
|
|
10463
10473
|
presentation.handlePresentationAction(action);
|
|
10464
10474
|
} else if (action.url) {
|
|
10465
|
-
|
|
10475
|
+
chunkMZ47MV52_js.safeOpenUrl(action.url);
|
|
10466
10476
|
}
|
|
10467
10477
|
};
|
|
10468
10478
|
const handleHyperlinkClick = (url) => {
|
|
10469
|
-
if (
|
|
10479
|
+
if (chunkMZ47MV52_js.isPpactionUrl(url)) {
|
|
10470
10480
|
if (mode === "present") {
|
|
10471
|
-
const parsed =
|
|
10481
|
+
const parsed = chunkMZ47MV52_js.parsePpactionUrl(url);
|
|
10472
10482
|
if (parsed) {
|
|
10473
10483
|
presentation.handlePresentationAction({
|
|
10474
10484
|
action: parsed.action,
|
|
@@ -10478,7 +10488,7 @@ function buildCanvasProps(input) {
|
|
|
10478
10488
|
}
|
|
10479
10489
|
return;
|
|
10480
10490
|
}
|
|
10481
|
-
|
|
10491
|
+
chunkMZ47MV52_js.safeOpenUrl(url);
|
|
10482
10492
|
};
|
|
10483
10493
|
return {
|
|
10484
10494
|
activeSlide: effectiveSlide,
|
|
@@ -10621,7 +10631,7 @@ function buildToolbarAnimationHandlers(input) {
|
|
|
10621
10631
|
const current = activeSlide.animations ?? [];
|
|
10622
10632
|
if (group === "motionPath") {
|
|
10623
10633
|
propertyHandlers.handleUpdateSlide({
|
|
10624
|
-
animations:
|
|
10634
|
+
animations: chunkMZ47MV52_js.applyMotionPathPreset(current, selectedElement.id, preset)
|
|
10625
10635
|
});
|
|
10626
10636
|
return;
|
|
10627
10637
|
}
|
|
@@ -10816,7 +10826,7 @@ function buildToolbarProps(input) {
|
|
|
10816
10826
|
onOpenFile,
|
|
10817
10827
|
onOpenRecentFile,
|
|
10818
10828
|
onCreatePresentation: (templateId) => {
|
|
10819
|
-
s.setSlides(
|
|
10829
|
+
s.setSlides(chunkMZ47MV52_js.createBackstagePresentation(templateId));
|
|
10820
10830
|
s.setActiveSlideIndex(0);
|
|
10821
10831
|
s.setSelectedElementId(null);
|
|
10822
10832
|
s.setSelectedElementIds([]);
|
|
@@ -10843,7 +10853,7 @@ function buildToolbarProps(input) {
|
|
|
10843
10853
|
layoutOptions: scopedLayoutOptions,
|
|
10844
10854
|
onInsertSlideFromLayout: slideOps.handleInsertSlideFromLayout,
|
|
10845
10855
|
onInsertSlideFromTemplate: slideOps.handleInsertSlideFromTemplate,
|
|
10846
|
-
templateScheme:
|
|
10856
|
+
templateScheme: chunkMZ47MV52_js.templateSchemeFromTheme(s.theme?.colorScheme),
|
|
10847
10857
|
customShows: s.customShows,
|
|
10848
10858
|
activeCustomShowId: s.activeCustomShowId,
|
|
10849
10859
|
onSetActiveCustomShowId: s.setActiveCustomShowId,
|
|
@@ -10875,7 +10885,7 @@ function buildToolbarProps(input) {
|
|
|
10875
10885
|
isCommentsPanelOpen: s.isInspectorPaneOpen,
|
|
10876
10886
|
slideCommentCount: activeSlide?.comments?.length ?? 0,
|
|
10877
10887
|
formatPainterActive: s.formatPainterActive,
|
|
10878
|
-
canActivateFormatPainter:
|
|
10888
|
+
canActivateFormatPainter: chunkMZ47MV52_js.hasCopyableFormat(selectedElement),
|
|
10879
10889
|
onToggleFormatPainter: () => s.setFormatPainterActive((p) => !p),
|
|
10880
10890
|
isSelectionPaneOpen: s.isSelectionPaneOpen,
|
|
10881
10891
|
onToggleSelectionPane: () => s.setIsSelectionPaneOpen((p) => !p),
|
|
@@ -11144,7 +11154,7 @@ function useViewerBuildingBlocks(input) {
|
|
|
11144
11154
|
}, [incomingContent]);
|
|
11145
11155
|
const onOpenFile = react.useCallback(() => {
|
|
11146
11156
|
void (async () => {
|
|
11147
|
-
const picked = await
|
|
11157
|
+
const picked = await chunkMZ47MV52_js.openPptxFile();
|
|
11148
11158
|
if (picked) {
|
|
11149
11159
|
setContent(picked.buffer);
|
|
11150
11160
|
}
|
|
@@ -11152,7 +11162,7 @@ function useViewerBuildingBlocks(input) {
|
|
|
11152
11162
|
}, []);
|
|
11153
11163
|
const onOpenRecentFile = react.useCallback((key) => {
|
|
11154
11164
|
void (async () => {
|
|
11155
|
-
const bytes = await
|
|
11165
|
+
const bytes = await chunkMZ47MV52_js.readBackstageRecentFile(key);
|
|
11156
11166
|
if (bytes) {
|
|
11157
11167
|
setContent(bytes);
|
|
11158
11168
|
}
|