pptx-react-viewer 2.19.5 → 2.19.7

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.
Files changed (89) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/dist/{AiChatPanel-F4X3OZFG.js → AiChatPanel-MAC2Z5SK.js} +23 -23
  3. package/dist/AiChatPanel-MAC2Z5SK.js.br +0 -0
  4. package/dist/AiChatPanel-MAC2Z5SK.js.gz +0 -0
  5. package/dist/{AiChatPanel-P663354U.mjs → AiChatPanel-WVO66CKC.mjs} +3 -3
  6. package/dist/AiChatPanel-WVO66CKC.mjs.br +0 -0
  7. package/dist/AiChatPanel-WVO66CKC.mjs.gz +0 -0
  8. package/dist/{Model3DScene-TGGZF6XI.js → Model3DScene-CU4WGIMH.js} +2 -2
  9. package/dist/Model3DScene-CU4WGIMH.js.br +0 -0
  10. package/dist/Model3DScene-CU4WGIMH.js.gz +0 -0
  11. package/dist/{Model3DScene-F6FAHPW7.mjs → Model3DScene-PTCZUGIT.mjs} +1 -1
  12. package/dist/{Model3DScene-F6FAHPW7.mjs.br → Model3DScene-PTCZUGIT.mjs.br} +0 -0
  13. package/dist/Model3DScene-PTCZUGIT.mjs.gz +0 -0
  14. package/dist/{chunk-GNSYA6W3.mjs → chunk-5BG5BANR.mjs} +31 -50
  15. package/dist/chunk-5BG5BANR.mjs.br +0 -0
  16. package/dist/chunk-5BG5BANR.mjs.gz +0 -0
  17. package/dist/{chunk-FWX6HUVA.mjs → chunk-DZHCLAH3.mjs} +1 -1
  18. package/dist/chunk-DZHCLAH3.mjs.br +0 -0
  19. package/dist/chunk-DZHCLAH3.mjs.gz +0 -0
  20. package/dist/{chunk-PEGZP2W2.js → chunk-EVM5OFAD.js} +3 -3
  21. package/dist/chunk-EVM5OFAD.js.br +0 -0
  22. package/dist/chunk-EVM5OFAD.js.gz +0 -0
  23. package/dist/{chunk-IJY5WNZK.js → chunk-GUGHIQ4P.js} +169 -31
  24. package/dist/chunk-GUGHIQ4P.js.br +0 -0
  25. package/dist/chunk-GUGHIQ4P.js.gz +0 -0
  26. package/dist/{chunk-C4LQ7ZWL.js → chunk-JENKEQZP.js} +1045 -1064
  27. package/dist/chunk-JENKEQZP.js.br +0 -0
  28. package/dist/chunk-JENKEQZP.js.gz +0 -0
  29. package/dist/{chunk-3WR2D4AJ.mjs → chunk-LP3Y4NXE.mjs} +2 -2
  30. package/dist/chunk-LP3Y4NXE.mjs.br +0 -0
  31. package/dist/chunk-LP3Y4NXE.mjs.gz +0 -0
  32. package/dist/{chunk-2HNIYZ3O.mjs → chunk-QZV7XDQG.mjs} +1 -1
  33. package/dist/chunk-QZV7XDQG.mjs.br +0 -0
  34. package/dist/chunk-QZV7XDQG.mjs.gz +0 -0
  35. package/dist/{chunk-D4LINQVA.js → chunk-V5PW4QCE.js} +146 -146
  36. package/dist/chunk-V5PW4QCE.js.br +0 -0
  37. package/dist/chunk-V5PW4QCE.js.gz +0 -0
  38. package/dist/{chunk-FDZNVVQ7.js → chunk-XDF76VFA.js} +373 -373
  39. package/dist/chunk-XDF76VFA.js.br +0 -0
  40. package/dist/chunk-XDF76VFA.js.gz +0 -0
  41. package/dist/{chunk-J3JFXIDN.mjs → chunk-ZPNLWBED.mjs} +169 -32
  42. package/dist/chunk-ZPNLWBED.mjs.br +0 -0
  43. package/dist/chunk-ZPNLWBED.mjs.gz +0 -0
  44. package/dist/index.js +45 -45
  45. package/dist/index.js.br +0 -0
  46. package/dist/index.js.gz +0 -0
  47. package/dist/index.mjs +5 -5
  48. package/dist/index.mjs.br +0 -0
  49. package/dist/index.mjs.gz +0 -0
  50. package/dist/internals.js +78 -78
  51. package/dist/internals.js.br +0 -0
  52. package/dist/internals.js.gz +0 -0
  53. package/dist/internals.mjs +3 -3
  54. package/dist/internals.mjs.br +0 -0
  55. package/dist/internals.mjs.gz +0 -0
  56. package/dist/viewer/index.js +26 -26
  57. package/dist/viewer/index.js.br +0 -0
  58. package/dist/viewer/index.js.gz +0 -0
  59. package/dist/viewer/index.mjs +5 -5
  60. package/dist/viewer/index.mjs.br +0 -0
  61. package/dist/viewer/index.mjs.gz +0 -0
  62. package/package.json +1 -1
  63. package/dist/AiChatPanel-F4X3OZFG.js.br +0 -0
  64. package/dist/AiChatPanel-F4X3OZFG.js.gz +0 -0
  65. package/dist/AiChatPanel-P663354U.mjs.br +0 -0
  66. package/dist/AiChatPanel-P663354U.mjs.gz +0 -0
  67. package/dist/Model3DScene-F6FAHPW7.mjs.gz +0 -0
  68. package/dist/Model3DScene-TGGZF6XI.js.br +0 -0
  69. package/dist/Model3DScene-TGGZF6XI.js.gz +0 -0
  70. package/dist/chunk-2HNIYZ3O.mjs.br +0 -0
  71. package/dist/chunk-2HNIYZ3O.mjs.gz +0 -0
  72. package/dist/chunk-3WR2D4AJ.mjs.br +0 -0
  73. package/dist/chunk-3WR2D4AJ.mjs.gz +0 -0
  74. package/dist/chunk-C4LQ7ZWL.js.br +0 -0
  75. package/dist/chunk-C4LQ7ZWL.js.gz +0 -0
  76. package/dist/chunk-D4LINQVA.js.br +0 -0
  77. package/dist/chunk-D4LINQVA.js.gz +0 -0
  78. package/dist/chunk-FDZNVVQ7.js.br +0 -0
  79. package/dist/chunk-FDZNVVQ7.js.gz +0 -0
  80. package/dist/chunk-FWX6HUVA.mjs.br +0 -0
  81. package/dist/chunk-FWX6HUVA.mjs.gz +0 -0
  82. package/dist/chunk-GNSYA6W3.mjs.br +0 -0
  83. package/dist/chunk-GNSYA6W3.mjs.gz +0 -0
  84. package/dist/chunk-IJY5WNZK.js.br +0 -0
  85. package/dist/chunk-IJY5WNZK.js.gz +0 -0
  86. package/dist/chunk-J3JFXIDN.mjs.br +0 -0
  87. package/dist/chunk-J3JFXIDN.mjs.gz +0 -0
  88. package/dist/chunk-PEGZP2W2.js.br +0 -0
  89. package/dist/chunk-PEGZP2W2.js.gz +0 -0
@@ -1,8 +1,8 @@
1
1
  'use strict';
2
2
 
3
- var chunkD4LINQVA_js = require('./chunk-D4LINQVA.js');
3
+ var chunkV5PW4QCE_js = require('./chunk-V5PW4QCE.js');
4
4
  var chunkMVKRI3CZ_js = require('./chunk-MVKRI3CZ.js');
5
- var chunkIJY5WNZK_js = require('./chunk-IJY5WNZK.js');
5
+ var chunkGUGHIQ4P_js = require('./chunk-GUGHIQ4P.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 = chunkIJY5WNZK_js.DEFAULT_VIRTUAL_OVERSCAN
17
+ overscan = chunkGUGHIQ4P_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 = chunkIJY5WNZK_js.computeVirtualRange(totalItems, itemHeight, scrollTop, viewportHeight, overscan);
47
+ const range = chunkGUGHIQ4P_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 ??= chunkIJY5WNZK_js.createPresenceProjector();
88
+ projectorRef.current ??= chunkGUGHIQ4P_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 >= chunkIJY5WNZK_js.BROADCAST_THROTTLE_MS) {
113
+ if (elapsed >= chunkGUGHIQ4P_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
- }, chunkIJY5WNZK_js.BROADCAST_THROTTLE_MS - elapsed);
123
+ }, chunkGUGHIQ4P_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 = chunkIJY5WNZK_js.createSyncGate(() => setSynced(true));
203
+ gateRef.current = chunkGUGHIQ4P_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
- chunkIJY5WNZK_js.clearLocalAwareness(provider.awareness);
223
+ chunkGUGHIQ4P_js.clearLocalAwareness(provider.awareness);
224
224
  provider.destroy();
225
225
  yDoc.destroy();
226
226
  setDoc(null);
@@ -245,9 +245,9 @@ function useYjsProvider({ config }) {
245
245
  if (config.authToken) {
246
246
  opts.password = config.authToken;
247
247
  }
248
- const roomId = chunkIJY5WNZK_js.validateRoomId(config.roomId);
248
+ const roomId = chunkGUGHIQ4P_js.validateRoomId(config.roomId);
249
249
  const provider = new WebrtcProvider(roomId, yDoc, opts);
250
- departureRef.current = chunkIJY5WNZK_js.createDepartureChannel(roomId, provider.awareness);
250
+ departureRef.current = chunkGUGHIQ4P_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 = chunkIJY5WNZK_js.validateRoomId(config.roomId);
293
- const transport = config.transport ?? chunkIJY5WNZK_js.resolveTransportForServerUrl(config.serverUrl);
292
+ const roomId = chunkGUGHIQ4P_js.validateRoomId(config.roomId);
293
+ const transport = config.transport ?? chunkGUGHIQ4P_js.resolveTransportForServerUrl(config.serverUrl);
294
294
  if (transport === "webrtc") {
295
295
  await initWebrtc();
296
296
  return;
297
297
  }
298
- if (chunkIJY5WNZK_js.isMixedContentBlocked(config.serverUrl)) {
298
+ if (chunkGUGHIQ4P_js.isMixedContentBlocked(config.serverUrl)) {
299
299
  console.warn(
300
300
  `[pptx-viewer] Refusing to connect: insecure ws:// server "${config.serverUrl}" is blocked from a secure (https) page. Use a wss:// URL.`
301
301
  );
@@ -309,7 +309,7 @@ function useYjsProvider({ config }) {
309
309
  const provider = new WebsocketProvider(config.serverUrl, roomId, yDoc, {
310
310
  params: config.authToken ? { token: config.authToken } : void 0
311
311
  });
312
- departureRef.current = chunkIJY5WNZK_js.createDepartureChannel(roomId, provider.awareness);
312
+ departureRef.current = chunkGUGHIQ4P_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
- chunkIJY5WNZK_js.clearLocalAwareness(provider.awareness);
352
+ chunkGUGHIQ4P_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
- }, chunkIJY5WNZK_js.CONNECTION_TIMEOUT_MS);
361
+ }, chunkGUGHIQ4P_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
- chunkIJY5WNZK_js.clearLocalAwareness(provider.awareness);
370
+ chunkGUGHIQ4P_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 = chunkIJY5WNZK_js.registerCollaborationTeardown({
396
+ const disposeTeardown = chunkGUGHIQ4P_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 = chunkIJY5WNZK_js.sanitizeColor(config?.userColor, "#6366f1");
417
+ const userColor = chunkGUGHIQ4P_js.sanitizeColor(config?.userColor, "#6366f1");
418
418
  const { status, awareness, doc, clientId, synced, retry } = useYjsProvider({ config });
419
419
  const { remoteUsers, broadcastPresence } = usePresenceTracking({
420
420
  awareness,
@@ -532,8 +532,8 @@ function useEditorHistory(input) {
532
532
  width: canvasSize.width,
533
533
  height: canvasSize.height,
534
534
  activeSlideIndex,
535
- slides: slides.map(chunkIJY5WNZK_js.cloneSlide),
536
- templateElementsBySlideId: chunkIJY5WNZK_js.cloneTemplateElementsBySlideId(templateElementsBySlideId),
535
+ slides: slides.map(chunkGUGHIQ4P_js.cloneSlide),
536
+ templateElementsBySlideId: chunkGUGHIQ4P_js.cloneTemplateElementsBySlideId(templateElementsBySlideId),
537
537
  ...actionLabel ? { actionLabel } : {}
538
538
  };
539
539
  },
@@ -546,9 +546,9 @@ function useEditorHistory(input) {
546
546
  width: snapshot.width,
547
547
  height: snapshot.height
548
548
  });
549
- setSlides(snapshot.slides.map(chunkIJY5WNZK_js.cloneSlide));
549
+ setSlides(snapshot.slides.map(chunkGUGHIQ4P_js.cloneSlide));
550
550
  setTemplateElementsBySlideId(
551
- chunkIJY5WNZK_js.cloneTemplateElementsBySlideId(snapshot.templateElementsBySlideId)
551
+ chunkGUGHIQ4P_js.cloneTemplateElementsBySlideId(snapshot.templateElementsBySlideId)
552
552
  );
553
553
  setActiveSlideIndex(Math.min(snapshot.activeSlideIndex, maxSlideIndex));
554
554
  setSelectedElementIds([]);
@@ -587,8 +587,8 @@ function useEditorHistory(input) {
587
587
  const currentSnapshot = buildHistorySnapshot();
588
588
  historyFutureRef.current.push(currentSnapshot);
589
589
  isApplyingHistoryRef.current = true;
590
- const nextSnapshot = chunkD4LINQVA_js.cloneHistorySnapshot(previousSnapshot);
591
- lastHistorySnapshotRef.current = chunkD4LINQVA_js.cloneHistorySnapshot(nextSnapshot);
590
+ const nextSnapshot = chunkV5PW4QCE_js.cloneHistorySnapshot(previousSnapshot);
591
+ lastHistorySnapshotRef.current = chunkV5PW4QCE_js.cloneHistorySnapshot(nextSnapshot);
592
592
  lastHistorySerializedRef.current = serializeDocument(nextSnapshot);
593
593
  applyHistorySnapshot(nextSnapshot);
594
594
  updateHistoryAvailability();
@@ -609,8 +609,8 @@ function useEditorHistory(input) {
609
609
  const currentSnapshot = buildHistorySnapshot();
610
610
  historyPastRef.current.push(currentSnapshot);
611
611
  isApplyingHistoryRef.current = true;
612
- const targetSnapshot = chunkD4LINQVA_js.cloneHistorySnapshot(nextSnapshot);
613
- lastHistorySnapshotRef.current = chunkD4LINQVA_js.cloneHistorySnapshot(targetSnapshot);
612
+ const targetSnapshot = chunkV5PW4QCE_js.cloneHistorySnapshot(nextSnapshot);
613
+ lastHistorySnapshotRef.current = chunkV5PW4QCE_js.cloneHistorySnapshot(targetSnapshot);
614
614
  lastHistorySerializedRef.current = serializeDocument(targetSnapshot);
615
615
  applyHistorySnapshot(targetSnapshot);
616
616
  updateHistoryAvailability();
@@ -628,7 +628,7 @@ function useEditorHistory(input) {
628
628
  historyPastRef.current = [];
629
629
  historyFutureRef.current = [];
630
630
  if (initialSnapshot) {
631
- const clonedInitial = chunkD4LINQVA_js.cloneHistorySnapshot(initialSnapshot);
631
+ const clonedInitial = chunkV5PW4QCE_js.cloneHistorySnapshot(initialSnapshot);
632
632
  lastHistorySnapshotRef.current = clonedInitial;
633
633
  lastHistorySerializedRef.current = serializeDocument(clonedInitial);
634
634
  } else {
@@ -676,19 +676,19 @@ function useEditorHistory(input) {
676
676
  }
677
677
  const previousSnapshot = lastHistorySnapshotRef.current;
678
678
  if (!previousSnapshot) {
679
- lastHistorySnapshotRef.current = chunkD4LINQVA_js.cloneHistorySnapshot(snapshot);
679
+ lastHistorySnapshotRef.current = chunkV5PW4QCE_js.cloneHistorySnapshot(snapshot);
680
680
  lastHistorySerializedRef.current = serialized;
681
681
  lastCheapHashRef.current = cheapHash;
682
682
  updateHistoryAvailability();
683
683
  return;
684
684
  }
685
685
  onDirtyRef.current?.();
686
- historyPastRef.current.push(chunkD4LINQVA_js.cloneHistorySnapshot(previousSnapshot));
686
+ historyPastRef.current.push(chunkV5PW4QCE_js.cloneHistorySnapshot(previousSnapshot));
687
687
  while (historyPastRef.current.length > Math.max(1, maxHistoryEntries)) {
688
688
  historyPastRef.current.shift();
689
689
  }
690
690
  historyFutureRef.current = [];
691
- lastHistorySnapshotRef.current = chunkD4LINQVA_js.cloneHistorySnapshot(snapshot);
691
+ lastHistorySnapshotRef.current = chunkV5PW4QCE_js.cloneHistorySnapshot(snapshot);
692
692
  lastHistorySerializedRef.current = serialized;
693
693
  lastCheapHashRef.current = cheapHash;
694
694
  updateHistoryAvailability();
@@ -748,9 +748,9 @@ function useZoomViewport({
748
748
  const canvasStageRef = react.useRef(null);
749
749
  const canvasViewportRef = react.useRef(null);
750
750
  const renderScaleRef = react.useRef(1);
751
- const wheelBufferRef = react.useRef(chunkIJY5WNZK_js.createWheelStepBuffer());
751
+ const wheelBufferRef = react.useRef(chunkGUGHIQ4P_js.createWheelStepBuffer());
752
752
  const storeRef = react.useRef(null);
753
- storeRef.current ??= chunkIJY5WNZK_js.createViewerZoomStore();
753
+ storeRef.current ??= chunkGUGHIQ4P_js.createViewerZoomStore();
754
754
  const store = storeRef.current;
755
755
  const scale = useViewerStore(store, selectZoom);
756
756
  const setScale = react.useCallback(
@@ -811,7 +811,7 @@ function useZoomViewport({
811
811
  if (!wrapper || !canvasViewport) {
812
812
  return;
813
813
  }
814
- const boundedScale = chunkIJY5WNZK_js.clampZoomScale(nextScale);
814
+ const boundedScale = chunkGUGHIQ4P_js.clampZoomScale(nextScale);
815
815
  const nextEditorScale = fitScale * boundedScale;
816
816
  const centerX = (bounds.minX + bounds.maxX) / 2;
817
817
  const centerY = (bounds.minY + bounds.maxY) / 2;
@@ -848,29 +848,29 @@ function useZoomViewport({
848
848
  selectedElements.forEach((element) => {
849
849
  minX = Math.min(minX, element.x);
850
850
  minY = Math.min(minY, element.y);
851
- maxX = Math.max(maxX, element.x + Math.max(element.width, chunkD4LINQVA_js.MIN_ELEMENT_SIZE));
852
- maxY = Math.max(maxY, element.y + Math.max(element.height, chunkD4LINQVA_js.MIN_ELEMENT_SIZE));
851
+ maxX = Math.max(maxX, element.x + Math.max(element.width, chunkV5PW4QCE_js.MIN_ELEMENT_SIZE));
852
+ maxY = Math.max(maxY, element.y + Math.max(element.height, chunkV5PW4QCE_js.MIN_ELEMENT_SIZE));
853
853
  });
854
854
  if (!Number.isFinite(minX) || !Number.isFinite(minY) || !Number.isFinite(maxX) || !Number.isFinite(maxY)) {
855
855
  return;
856
856
  }
857
857
  const selectionBounds = { minX, minY, maxX, maxY };
858
- const boundsWidth = Math.max(selectionBounds.maxX - selectionBounds.minX, chunkD4LINQVA_js.MIN_ELEMENT_SIZE);
859
- const boundsHeight = Math.max(selectionBounds.maxY - selectionBounds.minY, chunkD4LINQVA_js.MIN_ELEMENT_SIZE);
858
+ const boundsWidth = Math.max(selectionBounds.maxX - selectionBounds.minX, chunkV5PW4QCE_js.MIN_ELEMENT_SIZE);
859
+ const boundsHeight = Math.max(selectionBounds.maxY - selectionBounds.minY, chunkV5PW4QCE_js.MIN_ELEMENT_SIZE);
860
860
  const availableWidth = Math.max(
861
- effectiveEditorDimensions.width - chunkD4LINQVA_js.ZOOM_TO_SELECTION_PADDING,
862
- chunkD4LINQVA_js.MIN_ELEMENT_SIZE
861
+ effectiveEditorDimensions.width - chunkV5PW4QCE_js.ZOOM_TO_SELECTION_PADDING,
862
+ chunkV5PW4QCE_js.MIN_ELEMENT_SIZE
863
863
  );
864
864
  const availableHeight = Math.max(
865
- effectiveEditorDimensions.height - chunkD4LINQVA_js.ZOOM_TO_SELECTION_PADDING,
866
- chunkD4LINQVA_js.MIN_ELEMENT_SIZE
865
+ effectiveEditorDimensions.height - chunkV5PW4QCE_js.ZOOM_TO_SELECTION_PADDING,
866
+ chunkV5PW4QCE_js.MIN_ELEMENT_SIZE
867
867
  );
868
868
  const targetEditorScale = Math.min(
869
869
  availableWidth / boundsWidth,
870
870
  availableHeight / boundsHeight
871
871
  );
872
872
  const safeFitScale = fitScale > Number.EPSILON ? fitScale : Number.EPSILON;
873
- const nextScale = chunkIJY5WNZK_js.clampZoomScale(targetEditorScale / safeFitScale);
873
+ const nextScale = chunkGUGHIQ4P_js.clampZoomScale(targetEditorScale / safeFitScale);
874
874
  setScale(nextScale);
875
875
  window.requestAnimationFrame(() => {
876
876
  window.requestAnimationFrame(() => {
@@ -887,14 +887,14 @@ function useZoomViewport({
887
887
  ]);
888
888
  const handleWheel = react.useCallback(
889
889
  (event) => {
890
- const mapped = chunkIJY5WNZK_js.mapEditingWheel(event, wheelBufferRef.current, true);
890
+ const mapped = chunkGUGHIQ4P_js.mapEditingWheel(event, wheelBufferRef.current, true);
891
891
  if (mapped.intent !== "zoom") {
892
892
  return;
893
893
  }
894
894
  event.preventDefault();
895
895
  store.dispatch({
896
896
  type: "set-zoom",
897
- zoom: chunkIJY5WNZK_js.clampZoomScale(store.getState().zoom + mapped.deltaScale)
897
+ zoom: chunkGUGHIQ4P_js.clampZoomScale(store.getState().zoom + mapped.deltaScale)
898
898
  });
899
899
  },
900
900
  [store]
@@ -982,7 +982,7 @@ function applyAnimationGroupSteps(group, onPlayActionSound, setPresentationEleme
982
982
  const command = step.command;
983
983
  const timer = window.setTimeout(
984
984
  () => {
985
- chunkD4LINQVA_js.executeMediaCommand(command);
985
+ chunkV5PW4QCE_js.executeMediaCommand(command);
986
986
  },
987
987
  Math.max(0, step.delayMs)
988
988
  );
@@ -1119,7 +1119,7 @@ function scheduleEntranceAnimationTimers(slide, setPresentationAnimations, prese
1119
1119
  }))
1120
1120
  );
1121
1121
  entranceAnimations.forEach((animation, animationIndex) => {
1122
- const delay = chunkIJY5WNZK_js.computeEntranceAnimationDelay(animation.delayMs, animationIndex);
1122
+ const delay = chunkGUGHIQ4P_js.computeEntranceAnimationDelay(animation.delayMs, animationIndex);
1123
1123
  const timer = window.setTimeout(() => {
1124
1124
  setPresentationAnimations(
1125
1125
  (previousAnimations) => previousAnimations.map(
@@ -1151,7 +1151,7 @@ function useAnimationPlayback(input) {
1151
1151
  (controller, group) => {
1152
1152
  driveBuildReveal(
1153
1153
  controller,
1154
- chunkIJY5WNZK_js.PresentationAnimationController.collectBuildStepIds(group),
1154
+ chunkGUGHIQ4P_js.PresentationAnimationController.collectBuildStepIds(group),
1155
1155
  setPresentationElementStates,
1156
1156
  buildRafRef
1157
1157
  );
@@ -1214,7 +1214,7 @@ function useAnimationPlayback(input) {
1214
1214
  setHoverTriggerShapeIds(/* @__PURE__ */ new Set());
1215
1215
  return;
1216
1216
  }
1217
- const controller = chunkIJY5WNZK_js.PresentationAnimationController.fromSlide(slide);
1217
+ const controller = chunkGUGHIQ4P_js.PresentationAnimationController.fromSlide(slide);
1218
1218
  controllerRef.current = controller;
1219
1219
  setPresentationKeyframesCss(controller.keyframesCss);
1220
1220
  setInteractiveTriggerShapeIds(controller.interactiveTriggerShapeIds);
@@ -1372,12 +1372,12 @@ function useAnimationPlayback(input) {
1372
1372
  presentationTimersRef
1373
1373
  };
1374
1374
  }
1375
- var PRESENTER_CHANNEL_NAME = chunkIJY5WNZK_js.PRESENTATION_CHANNEL_NAME;
1376
- var AUDIENCE_HASH = chunkIJY5WNZK_js.PRESENTATION_HASH;
1377
- var PRESENTER_MSG_ORIGIN = chunkIJY5WNZK_js.PRESENTATION_MESSAGE_ORIGIN;
1378
- var AUDIENCE_NONCE_KEY = chunkIJY5WNZK_js.PRESENTATION_NONCE_KEY;
1375
+ var PRESENTER_CHANNEL_NAME = chunkGUGHIQ4P_js.PRESENTATION_CHANNEL_NAME;
1376
+ var AUDIENCE_HASH = chunkGUGHIQ4P_js.PRESENTATION_HASH;
1377
+ var PRESENTER_MSG_ORIGIN = chunkGUGHIQ4P_js.PRESENTATION_MESSAGE_ORIGIN;
1378
+ var AUDIENCE_NONCE_KEY = chunkGUGHIQ4P_js.PRESENTATION_NONCE_KEY;
1379
1379
  function generateSessionId() {
1380
- return chunkIJY5WNZK_js.createPresentationSessionId();
1380
+ return chunkGUGHIQ4P_js.createPresentationSessionId();
1381
1381
  }
1382
1382
  function parseAudienceNonce() {
1383
1383
  const hash = window.location.hash;
@@ -1413,7 +1413,7 @@ function usePresenterWindow(input) {
1413
1413
  }, []);
1414
1414
  const swapDisplays = react.useCallback(async () => {
1415
1415
  const audience = audienceWindowRef.current;
1416
- return audience && !audience.closed ? chunkIJY5WNZK_js.swapPresentationWindows(window, audience) : false;
1416
+ return audience && !audience.closed ? chunkGUGHIQ4P_js.swapPresentationWindows(window, audience) : false;
1417
1417
  }, []);
1418
1418
  const syncSlideToAudience = react.useCallback(
1419
1419
  (slideIndex) => {
@@ -1477,7 +1477,7 @@ function usePresenterWindow(input) {
1477
1477
  pollTimerRef.current = null;
1478
1478
  }
1479
1479
  if (closingSessionId) {
1480
- void chunkIJY5WNZK_js.clearAudienceContent(closingSessionId);
1480
+ void chunkGUGHIQ4P_js.clearAudienceContent(closingSessionId);
1481
1481
  }
1482
1482
  }, [getChannel]);
1483
1483
  const openAudienceWindow = react.useCallback(() => {
@@ -1495,10 +1495,10 @@ function usePresenterWindow(input) {
1495
1495
  audienceWindowRef.current = blankWin;
1496
1496
  const sessionId = generateSessionId();
1497
1497
  sessionIdRef.current = sessionId;
1498
- const audienceUrl = chunkIJY5WNZK_js.buildPresentationAudienceUrl(window.location.href, sessionId);
1499
- void chunkIJY5WNZK_js.resolveAudienceScreenPlacement(window).then((placement) => {
1498
+ const audienceUrl = chunkGUGHIQ4P_js.buildPresentationAudienceUrl(window.location.href, sessionId);
1499
+ void chunkGUGHIQ4P_js.resolveAudienceScreenPlacement(window).then((placement) => {
1500
1500
  if (placement && audienceWindowRef.current === blankWin && !blankWin.closed) {
1501
- chunkIJY5WNZK_js.placeAudienceWindow(blankWin, placement);
1501
+ chunkGUGHIQ4P_js.placeAudienceWindow(blankWin, placement);
1502
1502
  }
1503
1503
  return void 0;
1504
1504
  });
@@ -1528,7 +1528,7 @@ function usePresenterWindow(input) {
1528
1528
  }
1529
1529
  };
1530
1530
  if (content) {
1531
- void chunkIJY5WNZK_js.storeAudienceContent(content, sessionId).then(() => navigateOrClose(true)).catch(() => navigateOrClose(false));
1531
+ void chunkGUGHIQ4P_js.storeAudienceContent(content, sessionId).then(() => navigateOrClose(true)).catch(() => navigateOrClose(false));
1532
1532
  } else {
1533
1533
  navigateOrClose(true);
1534
1534
  }
@@ -1554,7 +1554,7 @@ function usePresenterWindow(input) {
1554
1554
  }
1555
1555
  const handleMessage = (event) => {
1556
1556
  const message = event.data;
1557
- if (chunkIJY5WNZK_js.isPresentationSessionMessage(message) && message.type === "audience-ready" && message.sessionId === sessionIdRef.current) {
1557
+ if (chunkGUGHIQ4P_js.isPresentationSessionMessage(message) && message.type === "audience-ready" && message.sessionId === sessionIdRef.current) {
1558
1558
  syncStateToAudience(snapshotRef.current);
1559
1559
  }
1560
1560
  };
@@ -1583,7 +1583,7 @@ function usePresenterWindow(input) {
1583
1583
  react.useEffect(() => {
1584
1584
  const handleBeforeUnload = () => {
1585
1585
  if (sessionIdRef.current) {
1586
- void chunkIJY5WNZK_js.clearAudienceContent(sessionIdRef.current);
1586
+ void chunkGUGHIQ4P_js.clearAudienceContent(sessionIdRef.current);
1587
1587
  }
1588
1588
  };
1589
1589
  window.addEventListener("beforeunload", handleBeforeUnload);
@@ -1645,7 +1645,7 @@ function useAudienceMode(input) {
1645
1645
  }
1646
1646
  channel.onmessage = (event) => {
1647
1647
  const data = event.data;
1648
- if (!chunkIJY5WNZK_js.isPresentationSessionMessage(data) || data.origin !== PRESENTER_MSG_ORIGIN) {
1648
+ if (!chunkGUGHIQ4P_js.isPresentationSessionMessage(data) || data.origin !== PRESENTER_MSG_ORIGIN) {
1649
1649
  return;
1650
1650
  }
1651
1651
  if (expectedSessionId && data.sessionId !== expectedSessionId) {
@@ -1661,16 +1661,16 @@ function useAudienceMode(input) {
1661
1661
  }
1662
1662
  if (data.type === "presenter-exit") {
1663
1663
  if (expectedSessionId) {
1664
- void chunkIJY5WNZK_js.clearAudienceContent(expectedSessionId);
1664
+ void chunkGUGHIQ4P_js.clearAudienceContent(expectedSessionId);
1665
1665
  }
1666
- if (chunkIJY5WNZK_js.endAudienceDisplay(window)) {
1666
+ if (chunkGUGHIQ4P_js.endAudienceDisplay(window)) {
1667
1667
  handlers.onPresenterEnded?.();
1668
1668
  }
1669
1669
  }
1670
1670
  };
1671
1671
  if (expectedSessionId) {
1672
1672
  channel.postMessage({
1673
- origin: chunkIJY5WNZK_js.PRESENTATION_MESSAGE_ORIGIN,
1673
+ origin: chunkGUGHIQ4P_js.PRESENTATION_MESSAGE_ORIGIN,
1674
1674
  type: "audience-ready",
1675
1675
  sessionId: expectedSessionId
1676
1676
  });
@@ -1684,7 +1684,7 @@ function useAudienceMode(input) {
1684
1684
  }, []);
1685
1685
  }
1686
1686
  function usePresentationKeyboard(input) {
1687
- const wheelBufferRef = react.useRef(chunkIJY5WNZK_js.createWheelStepBuffer());
1687
+ const wheelBufferRef = react.useRef(chunkGUGHIQ4P_js.createWheelStepBuffer());
1688
1688
  const {
1689
1689
  mode,
1690
1690
  movePresentationSlide,
@@ -1705,14 +1705,14 @@ function usePresentationKeyboard(input) {
1705
1705
  presentationSlideIndex,
1706
1706
  setShowRehearsalSummary
1707
1707
  } = input;
1708
- const keyBufferRef = react.useRef(chunkIJY5WNZK_js.createPresentationKeyBuffer());
1708
+ const keyBufferRef = react.useRef(chunkGUGHIQ4P_js.createPresentationKeyBuffer());
1709
1709
  react.useEffect(() => {
1710
- if (mode !== "present" || !chunkIJY5WNZK_js.acceptsPresentationInput()) {
1711
- keyBufferRef.current = chunkIJY5WNZK_js.createPresentationKeyBuffer();
1710
+ if (mode !== "present" || !chunkGUGHIQ4P_js.acceptsPresentationInput()) {
1711
+ keyBufferRef.current = chunkGUGHIQ4P_js.createPresentationKeyBuffer();
1712
1712
  return;
1713
1713
  }
1714
1714
  const handleKeyDown = (event) => {
1715
- const mapped = chunkIJY5WNZK_js.mapPresentationKey(event, keyBufferRef.current);
1715
+ const mapped = chunkGUGHIQ4P_js.mapPresentationKey(event, keyBufferRef.current);
1716
1716
  if (mapped.action === "none") {
1717
1717
  return;
1718
1718
  }
@@ -1732,12 +1732,12 @@ function usePresentationKeyboard(input) {
1732
1732
  movePresentationSlide(-1);
1733
1733
  return;
1734
1734
  case "first": {
1735
- const first = chunkIJY5WNZK_js.firstShowSlideIndex(showSlideIndexes);
1735
+ const first = chunkGUGHIQ4P_js.firstShowSlideIndex(showSlideIndexes);
1736
1736
  navigateToSlide(first ?? 0);
1737
1737
  return;
1738
1738
  }
1739
1739
  case "last": {
1740
- const last = chunkIJY5WNZK_js.lastShowSlideIndex(showSlideIndexes);
1740
+ const last = chunkGUGHIQ4P_js.lastShowSlideIndex(showSlideIndexes);
1741
1741
  navigateToSlide(last ?? Math.max(0, slideCount - 1));
1742
1742
  return;
1743
1743
  }
@@ -1775,10 +1775,10 @@ function usePresentationKeyboard(input) {
1775
1775
  }
1776
1776
  };
1777
1777
  const handleWheel = (event) => {
1778
- if (mode !== "present" || !chunkIJY5WNZK_js.acceptsPresentationInput()) {
1778
+ if (mode !== "present" || !chunkGUGHIQ4P_js.acceptsPresentationInput()) {
1779
1779
  return;
1780
1780
  }
1781
- const mapped = chunkIJY5WNZK_js.mapPresentationWheel(event, wheelBufferRef.current);
1781
+ const mapped = chunkGUGHIQ4P_js.mapPresentationWheel(event, wheelBufferRef.current);
1782
1782
  if (mapped.intent === "next-slide") {
1783
1783
  event.preventDefault();
1784
1784
  movePresentationSlide(1);
@@ -1911,7 +1911,7 @@ function useRehearsalTimings(input) {
1911
1911
 
1912
1912
  // src/viewer/hooks/presentation-mode/presentation-actions.ts
1913
1913
  function handlePresentationActionImpl(action, deps) {
1914
- chunkIJY5WNZK_js.runPresentationAction(
1914
+ chunkGUGHIQ4P_js.runPresentationAction(
1915
1915
  action,
1916
1916
  { slideCount: deps.slidesLength },
1917
1917
  {
@@ -1933,7 +1933,7 @@ function handlePresentationActionImpl(action, deps) {
1933
1933
  function executeSlideTransition(nextSlideIndex, deps) {
1934
1934
  const incomingSlide = deps.slides[nextSlideIndex];
1935
1935
  const transition = incomingSlide?.transition;
1936
- const durationMs = deps.playTransition ? chunkIJY5WNZK_js.resolveTransitionDurationMs(transition) : 0;
1936
+ const durationMs = deps.playTransition ? chunkGUGHIQ4P_js.resolveTransitionDurationMs(transition) : 0;
1937
1937
  deps.clearPresentationTimers();
1938
1938
  deps.setPresentationSlideIndex(nextSlideIndex);
1939
1939
  deps.onSetActiveSlideIndex(nextSlideIndex);
@@ -1992,7 +1992,7 @@ function useSlideNavigation(input) {
1992
1992
  });
1993
1993
  const scheduleAutoAdvanceForSlide = react.useCallback(
1994
1994
  (slideIndex) => {
1995
- const delayMs = chunkIJY5WNZK_js.resolveAutoAdvanceDelayMs(slides[slideIndex], { useTimings });
1995
+ const delayMs = chunkGUGHIQ4P_js.resolveAutoAdvanceDelayMs(slides[slideIndex], { useTimings });
1996
1996
  if (delayMs === void 0) {
1997
1997
  return;
1998
1998
  }
@@ -2015,7 +2015,7 @@ function useSlideNavigation(input) {
2015
2015
  if (availableSlideIndexes.length === 0) {
2016
2016
  return;
2017
2017
  }
2018
- const pastLastSlide = direction === 1 && !chunkIJY5WNZK_js.hasShowSlideAfter(presentationSlideIndex, availableSlideIndexes);
2018
+ const pastLastSlide = direction === 1 && !chunkGUGHIQ4P_js.hasShowSlideAfter(presentationSlideIndex, availableSlideIndexes);
2019
2019
  if (rehearsing && pastLastSlide) {
2020
2020
  recordCurrentSlideTime(presentationSlideIndex);
2021
2021
  try {
@@ -2033,9 +2033,9 @@ function useSlideNavigation(input) {
2033
2033
  onAdvancePastLastSlide();
2034
2034
  return;
2035
2035
  }
2036
- const nextSlideIndex = direction === 1 ? chunkIJY5WNZK_js.nextShowSlideIndex(presentationSlideIndex, availableSlideIndexes, {
2036
+ const nextSlideIndex = direction === 1 ? chunkGUGHIQ4P_js.nextShowSlideIndex(presentationSlideIndex, availableSlideIndexes, {
2037
2037
  loop: Boolean(loopContinuously) && !rehearsing
2038
- }) : chunkIJY5WNZK_js.previousShowSlideIndex(presentationSlideIndex, availableSlideIndexes);
2038
+ }) : chunkGUGHIQ4P_js.previousShowSlideIndex(presentationSlideIndex, availableSlideIndexes);
2039
2039
  if (nextSlideIndex === void 0 || nextSlideIndex === presentationSlideIndex) {
2040
2040
  return;
2041
2041
  }
@@ -2180,22 +2180,22 @@ function useZoomNavigation(input) {
2180
2180
  };
2181
2181
  }
2182
2182
  function usePresenterConsole(slideIndex, active) {
2183
- const timerRef = react.useRef(chunkIJY5WNZK_js.createPresenterTimer());
2184
- const [snapshot, setSnapshot] = react.useState(() => chunkIJY5WNZK_js.createInitialPresentationSnapshot(slideIndex));
2183
+ const timerRef = react.useRef(chunkGUGHIQ4P_js.createPresenterTimer());
2184
+ const [snapshot, setSnapshot] = react.useState(() => chunkGUGHIQ4P_js.createInitialPresentationSnapshot(slideIndex));
2185
2185
  const patch = react.useCallback((value) => {
2186
- setSnapshot((current) => chunkIJY5WNZK_js.mergePresentationSnapshot(current, value));
2186
+ setSnapshot((current) => chunkGUGHIQ4P_js.mergePresentationSnapshot(current, value));
2187
2187
  }, []);
2188
2188
  react.useEffect(() => patch({ slideIndex }), [patch, slideIndex]);
2189
2189
  react.useEffect(() => {
2190
2190
  if (!active) {
2191
2191
  return;
2192
2192
  }
2193
- timerRef.current = chunkIJY5WNZK_js.resetPresenterTimer();
2193
+ timerRef.current = chunkGUGHIQ4P_js.resetPresenterTimer();
2194
2194
  patch({ paused: false, elapsedMs: 0 });
2195
2195
  const timer = window.setInterval(() => {
2196
2196
  patch({
2197
2197
  paused: timerRef.current.paused,
2198
- elapsedMs: chunkIJY5WNZK_js.presenterElapsed(timerRef.current)
2198
+ elapsedMs: chunkGUGHIQ4P_js.presenterElapsed(timerRef.current)
2199
2199
  });
2200
2200
  }, 1e3);
2201
2201
  return () => window.clearInterval(timer);
@@ -2205,19 +2205,19 @@ function usePresenterConsole(slideIndex, active) {
2205
2205
  applyAudienceSnapshot: setSnapshot,
2206
2206
  setBlackout: (blackout) => patch({ blackout }),
2207
2207
  toggleTimer: () => {
2208
- timerRef.current = chunkIJY5WNZK_js.togglePresenterTimer(timerRef.current);
2208
+ timerRef.current = chunkGUGHIQ4P_js.togglePresenterTimer(timerRef.current);
2209
2209
  patch({
2210
2210
  paused: timerRef.current.paused,
2211
- elapsedMs: chunkIJY5WNZK_js.presenterElapsed(timerRef.current)
2211
+ elapsedMs: chunkGUGHIQ4P_js.presenterElapsed(timerRef.current)
2212
2212
  });
2213
2213
  },
2214
2214
  resetTimer: () => {
2215
- timerRef.current = chunkIJY5WNZK_js.resetPresenterTimer();
2215
+ timerRef.current = chunkGUGHIQ4P_js.resetPresenterTimer();
2216
2216
  patch({ paused: false, elapsedMs: 0 });
2217
2217
  },
2218
2218
  stepZoom: (direction) => setSnapshot(
2219
- (current) => chunkIJY5WNZK_js.mergePresentationSnapshot(current, {
2220
- zoom: chunkIJY5WNZK_js.stepPresenterZoom(
2219
+ (current) => chunkGUGHIQ4P_js.mergePresentationSnapshot(current, {
2220
+ zoom: chunkGUGHIQ4P_js.stepPresenterZoom(
2221
2221
  current.zoom ?? { scale: 1, originX: 0.5, originY: 0.5 },
2222
2222
  direction
2223
2223
  )
@@ -2263,7 +2263,7 @@ function usePresentationMode(input) {
2263
2263
  const [allSlidesOpen, setAllSlidesOpen] = react.useState(false);
2264
2264
  const [endOfShowVisible, setEndOfShowVisible] = react.useState(false);
2265
2265
  const [presentationStartTime, setPresentationStartTime] = react.useState(null);
2266
- const showGuard = react.useMemo(() => chunkIJY5WNZK_js.createPresenterShowGuard(), []);
2266
+ const showGuard = react.useMemo(() => chunkGUGHIQ4P_js.createPresenterShowGuard(), []);
2267
2267
  const {
2268
2268
  presentationAnimations,
2269
2269
  presentationElementStates,
@@ -2342,7 +2342,7 @@ function usePresentationMode(input) {
2342
2342
  });
2343
2343
  const movePresentationSlide = react.useCallback(
2344
2344
  (direction, trigger = "explicit") => {
2345
- if (!chunkIJY5WNZK_js.acceptsPresentationInput()) {
2345
+ if (!chunkGUGHIQ4P_js.acceptsPresentationInput()) {
2346
2346
  return;
2347
2347
  }
2348
2348
  if (endOfShowVisible) {
@@ -2480,7 +2480,7 @@ function usePresentationMode(input) {
2480
2480
  if (mode !== "present") {
2481
2481
  return;
2482
2482
  }
2483
- return chunkIJY5WNZK_js.attachPresentationVisibilityPause({
2483
+ return chunkGUGHIQ4P_js.attachPresentationVisibilityPause({
2484
2484
  root: containerRef.current ?? void 0,
2485
2485
  onHidden: () => clearPresentationTimersRef.current(),
2486
2486
  onVisible: () => scheduleAutoAdvanceRef.current(presentationSlideIndexRef.current)
@@ -2560,11 +2560,11 @@ function usePresentationMode(input) {
2560
2560
  if (!transitionOverlay || transitionOverlay.transition.type !== "morph") {
2561
2561
  return void 0;
2562
2562
  }
2563
- return chunkIJY5WNZK_js.buildMorphTransitionPlan(
2563
+ return chunkGUGHIQ4P_js.buildMorphTransitionPlan(
2564
2564
  slides[transitionOverlay.outgoingSlideIndex],
2565
2565
  slides[transitionOverlay.incomingSlideIndex],
2566
2566
  transitionOverlay.durationMs,
2567
- chunkIJY5WNZK_js.morphOptionToMode(transitionOverlay.transition.morphOption)
2567
+ chunkGUGHIQ4P_js.morphOptionToMode(transitionOverlay.transition.morphOption)
2568
2568
  );
2569
2569
  }, [transitionOverlay, slides]);
2570
2570
  const morphedElementStates = react.useMemo(() => {
@@ -2585,7 +2585,7 @@ function usePresentationMode(input) {
2585
2585
  if (!morphPlan) {
2586
2586
  return presentationKeyframesCss;
2587
2587
  }
2588
- const imageRules = chunkIJY5WNZK_js.buildMorphAnimationRules(morphPlan, "", "incoming", "image");
2588
+ const imageRules = chunkGUGHIQ4P_js.buildMorphAnimationRules(morphPlan, "", "incoming", "image");
2589
2589
  return `${presentationKeyframesCss ?? ""}
2590
2590
  ${morphPlan.keyframesCss}
2591
2591
  ${imageRules}`;
@@ -2881,7 +2881,7 @@ function useFindReplace({
2881
2881
  const [findResults, setFindResults] = react.useState([]);
2882
2882
  const [findResultIndex, setFindResultIndex] = react.useState(-1);
2883
2883
  const performFind = react.useCallback(() => {
2884
- const results = chunkIJY5WNZK_js.findInSlides(slides, findQuery, { matchCase: findMatchCase });
2884
+ const results = chunkGUGHIQ4P_js.findInSlides(slides, findQuery, { matchCase: findMatchCase });
2885
2885
  if (!findQuery) {
2886
2886
  setFindResults([]);
2887
2887
  setFindResultIndex(-1);
@@ -2915,7 +2915,7 @@ function useFindReplace({
2915
2915
  return;
2916
2916
  }
2917
2917
  onUpdateSlides(
2918
- (prevSlides) => chunkIJY5WNZK_js.applyFindReplacements(prevSlides, toReplace, replaceQuery).slides
2918
+ (prevSlides) => chunkGUGHIQ4P_js.applyFindReplacements(prevSlides, toReplace, replaceQuery).slides
2919
2919
  );
2920
2920
  onMarkDirty();
2921
2921
  },
@@ -2937,9 +2937,9 @@ function useFindReplace({
2937
2937
  }, [findResults, applyReplacements, performFind]);
2938
2938
  react.useEffect(() => {
2939
2939
  const handler = (event) => {
2940
- const { action } = chunkIJY5WNZK_js.mapEditorKey(event, {
2940
+ const { action } = chunkGUGHIQ4P_js.mapEditorKey(event, {
2941
2941
  canEdit: mode === "edit",
2942
- isTextInputTarget: chunkIJY5WNZK_js.isEditorTextInputTarget(event.target)
2942
+ isTextInputTarget: chunkGUGHIQ4P_js.isEditorTextInputTarget(event.target)
2943
2943
  });
2944
2944
  if (action !== "find") {
2945
2945
  return;
@@ -3449,7 +3449,7 @@ function useViewerCoreState(_input) {
3449
3449
  const marqueeStateRef = react.useRef(null);
3450
3450
  const isDrawingRef = react.useRef(false);
3451
3451
  const justInteractedRef = react.useRef(false);
3452
- const livePatcher = react.useMemo(() => chunkIJY5WNZK_js.createCollaborationLivePatcher(), []);
3452
+ const livePatcher = react.useMemo(() => chunkGUGHIQ4P_js.createCollaborationLivePatcher(), []);
3453
3453
  react.useEffect(() => () => livePatcher.dispose(), [livePatcher]);
3454
3454
  const slidesRef = react.useRef([]);
3455
3455
  const [mode, setMode] = react.useState("edit");
@@ -3458,8 +3458,8 @@ function useViewerCoreState(_input) {
3458
3458
  const [slides, setSlides] = react.useState([]);
3459
3459
  const [templateElementsBySlideId, setTemplateElementsBySlideId] = react.useState({});
3460
3460
  const [canvasSize, setCanvasSize] = react.useState({
3461
- width: chunkD4LINQVA_js.DEFAULT_CANVAS_WIDTH,
3462
- height: chunkD4LINQVA_js.DEFAULT_CANVAS_HEIGHT
3461
+ width: chunkV5PW4QCE_js.DEFAULT_CANVAS_WIDTH,
3462
+ height: chunkV5PW4QCE_js.DEFAULT_CANVAS_HEIGHT
3463
3463
  });
3464
3464
  const [slideSizeEmu, setSlideSizeEmu] = react.useState();
3465
3465
  const [activeSlideIndex, setActiveSlideIndex] = react.useState(0);
@@ -3480,7 +3480,7 @@ function useViewerCoreState(_input) {
3480
3480
  const resolved = typeof value === "function" ? value(inlineEditingTextRef.current) : value;
3481
3481
  inlineEditingTextRef.current = resolved;
3482
3482
  setInlineEditingTextBase(value);
3483
- chunkIJY5WNZK_js.publishLiveInlineText(
3483
+ chunkGUGHIQ4P_js.publishLiveInlineText(
3484
3484
  livePatcher,
3485
3485
  slidesRef.current[activeSlideIndexRef.current],
3486
3486
  inlineEditingElementIdRef.current,
@@ -3819,7 +3819,7 @@ function useLoadContent({
3819
3819
  );
3820
3820
  }
3821
3821
  const previousHandler = handlerRef.current;
3822
- const handler = new chunkIJY5WNZK_js.PptxHandler();
3822
+ const handler = new chunkGUGHIQ4P_js.PptxHandler();
3823
3823
  const parsed = await handler.load(buffer);
3824
3824
  if (cancelled || token !== renderTokenRef.current) {
3825
3825
  handler.dispose();
@@ -3831,7 +3831,7 @@ function useLoadContent({
3831
3831
  handlerRef.current = null;
3832
3832
  const mediaElements = [];
3833
3833
  for (const slide of parsed.slides) {
3834
- chunkIJY5WNZK_js.collectMediaElements(slide.elements, mediaElements);
3834
+ chunkGUGHIQ4P_js.collectMediaElements(slide.elements, mediaElements);
3835
3835
  }
3836
3836
  for (const url of mediaDataUrls.values()) {
3837
3837
  if (url.startsWith("blob:")) {
@@ -3872,7 +3872,7 @@ function useLoadContent({
3872
3872
  }
3873
3873
  })
3874
3874
  );
3875
- const { paths: imagePaths, refs: imageRefs } = chunkIJY5WNZK_js.collectImagePaths(parsed.slides);
3875
+ const { paths: imagePaths, refs: imageRefs } = chunkGUGHIQ4P_js.collectImagePaths(parsed.slides);
3876
3876
  let nextSlides = parsed.slides;
3877
3877
  if (imagePaths.size > 0) {
3878
3878
  const resolvedMap = /* @__PURE__ */ new Map();
@@ -3927,12 +3927,12 @@ function useLoadContent({
3927
3927
  }
3928
3928
  }
3929
3929
  handlerRef.current = handler;
3930
- const partition = chunkIJY5WNZK_js.partitionTemplateElements(nextSlides);
3930
+ const partition = chunkGUGHIQ4P_js.partitionTemplateElements(nextSlides);
3931
3931
  setSlides(partition.slides);
3932
3932
  setTemplateElementsBySlideId(partition.templateElementsBySlideId);
3933
3933
  setCanvasSize({
3934
- width: parsed.width ?? chunkD4LINQVA_js.DEFAULT_CANVAS_WIDTH,
3935
- height: parsed.height ?? chunkD4LINQVA_js.DEFAULT_CANVAS_HEIGHT
3934
+ width: parsed.width ?? chunkV5PW4QCE_js.DEFAULT_CANVAS_WIDTH,
3935
+ height: parsed.height ?? chunkV5PW4QCE_js.DEFAULT_CANVAS_HEIGHT
3936
3936
  });
3937
3937
  setSlideSizeEmu(
3938
3938
  typeof parsed.widthEmu === "number" && typeof parsed.heightEmu === "number" && parsed.widthEmu > 0 && parsed.heightEmu > 0 ? {
@@ -3949,7 +3949,7 @@ function useLoadContent({
3949
3949
  setThemeOptions(parsed.themeOptions ?? []);
3950
3950
  setCustomShows(parsed.customShows ?? []);
3951
3951
  setActiveCustomShowId(
3952
- chunkIJY5WNZK_js.resolveAuthoredCustomShowId(parsed.presentationProperties, parsed.customShows) ?? null
3952
+ chunkGUGHIQ4P_js.resolveAuthoredCustomShowId(parsed.presentationProperties, parsed.customShows) ?? null
3953
3953
  );
3954
3954
  setSections(parsed.sections ?? []);
3955
3955
  setPresentationProperties(parsed.presentationProperties ?? {});
@@ -3971,7 +3971,7 @@ function useLoadContent({
3971
3971
  setHasMacros(parsed.hasMacros === true);
3972
3972
  setHasDigitalSignatures(parsed.hasDigitalSignatures === true);
3973
3973
  setDigitalSignatureCount(parsed.digitalSignatureCount ?? 0);
3974
- setGuides(chunkIJY5WNZK_js.buildInitialGuides(parsed.presentationGuides, parsed.slides[0]?.guides));
3974
+ setGuides(chunkGUGHIQ4P_js.buildInitialGuides(parsed.presentationGuides, parsed.slides[0]?.guides));
3975
3975
  setActiveSlideIndex(0);
3976
3976
  clearSelection();
3977
3977
  setIsDirty(false);
@@ -3979,7 +3979,7 @@ function useLoadContent({
3979
3979
  onContentApplied?.();
3980
3980
  } catch (err) {
3981
3981
  if (!cancelled && token === renderTokenRef.current) {
3982
- if (err instanceof chunkIJY5WNZK_js.EncryptedFileError) {
3982
+ if (err instanceof chunkGUGHIQ4P_js.EncryptedFileError) {
3983
3983
  setIsEncrypted(true);
3984
3984
  } else {
3985
3985
  setError(err instanceof Error ? err.message : String(err));
@@ -4006,7 +4006,7 @@ function useLoadContent({
4006
4006
  }
4007
4007
  function useAutosave(input) {
4008
4008
  const { isDirty, filePath, serializeSlides, enabled = true, getChangeSources } = input;
4009
- const intervalMs = chunkIJY5WNZK_js.resolveAutosaveIntervalMs({
4009
+ const intervalMs = chunkGUGHIQ4P_js.resolveAutosaveIntervalMs({
4010
4010
  hostIntervalMs: input.intervalMs,
4011
4011
  optionsIntervalSeconds: input.intervalSeconds
4012
4012
  });
@@ -4037,7 +4037,7 @@ function useAutosave(input) {
4037
4037
  return;
4038
4038
  }
4039
4039
  const sources = changeSourcesRef.current?.() ?? [];
4040
- if (!chunkIJY5WNZK_js.shouldWriteAutosaveSnapshot({
4040
+ if (!chunkGUGHIQ4P_js.shouldWriteAutosaveSnapshot({
4041
4041
  filePath: path,
4042
4042
  isDirty: isDirtyRef.current,
4043
4043
  saving: isSavingRef.current,
@@ -4055,8 +4055,8 @@ function useAutosave(input) {
4055
4055
  isSavingRef.current = false;
4056
4056
  return;
4057
4057
  }
4058
- await chunkIJY5WNZK_js.saveAutosaveSnapshot(path, data);
4059
- lastSnapshotRef.current = chunkIJY5WNZK_js.autosaveSnapshotMark(path, sources);
4058
+ await chunkGUGHIQ4P_js.saveAutosaveSnapshot(path, data);
4059
+ lastSnapshotRef.current = chunkGUGHIQ4P_js.autosaveSnapshotMark(path, sources);
4060
4060
  setAutosaveStatus({ state: "saved", timestamp: Date.now() });
4061
4061
  } catch (err) {
4062
4062
  setAutosaveStatus({
@@ -4142,11 +4142,11 @@ function useElementOperations(input) {
4142
4142
  (elementId, updates) => {
4143
4143
  if (masterView?.target) {
4144
4144
  applyMasterViewWrite(
4145
- chunkIJY5WNZK_js.updateMasterViewElement(masterView, masterView.target, elementId, updates)
4145
+ chunkGUGHIQ4P_js.updateMasterViewElement(masterView, masterView.target, elementId, updates)
4146
4146
  );
4147
4147
  return;
4148
4148
  }
4149
- if (chunkIJY5WNZK_js.isTemplateElementId(elementId)) {
4149
+ if (chunkGUGHIQ4P_js.isTemplateElementId(elementId)) {
4150
4150
  const slideId = activeSlide?.id;
4151
4151
  if (slideId) {
4152
4152
  setTemplateElementsBySlideId((prev) => ({
@@ -4194,7 +4194,7 @@ function useElementOperations(input) {
4194
4194
  );
4195
4195
  const updateSelectedShapeStyle = react.useCallback(
4196
4196
  (updates) => {
4197
- if (!selectedElement || !chunkIJY5WNZK_js.hasShapeProperties(selectedElement)) {
4197
+ if (!selectedElement || !chunkGUGHIQ4P_js.hasShapeProperties(selectedElement)) {
4198
4198
  return;
4199
4199
  }
4200
4200
  updateSelectedElement({
@@ -4205,17 +4205,17 @@ function useElementOperations(input) {
4205
4205
  );
4206
4206
  const updateSelectedTextStyle = react.useCallback(
4207
4207
  (updates) => {
4208
- if (!selectedElement || !chunkIJY5WNZK_js.hasTextProperties(selectedElement)) {
4208
+ if (!selectedElement || !chunkGUGHIQ4P_js.hasTextProperties(selectedElement)) {
4209
4209
  return;
4210
4210
  }
4211
- const inlineSel = chunkIJY5WNZK_js.getInlineEditorSelection(selectedElement.textSegments);
4211
+ const inlineSel = chunkGUGHIQ4P_js.getInlineEditorSelection(selectedElement.textSegments);
4212
4212
  if (inlineSel && selectedElement.textSegments) {
4213
- const { newSegments: newSegments2, newSelection } = chunkIJY5WNZK_js.applyStyleToSelectedSegments(
4213
+ const { newSegments: newSegments2, newSelection } = chunkGUGHIQ4P_js.applyStyleToSelectedSegments(
4214
4214
  selectedElement.textSegments,
4215
4215
  inlineSel,
4216
4216
  updates
4217
4217
  );
4218
- chunkIJY5WNZK_js.setPendingSelectionRestore(newSelection);
4218
+ chunkGUGHIQ4P_js.setPendingSelectionRestore(newSelection);
4219
4219
  updateSelectedElement({
4220
4220
  textSegments: newSegments2
4221
4221
  });
@@ -4235,12 +4235,12 @@ function useElementOperations(input) {
4235
4235
  );
4236
4236
  const updateSelectedTextCase = react.useCallback(
4237
4237
  (mode) => {
4238
- if (!selectedElement || !chunkIJY5WNZK_js.hasTextProperties(selectedElement)) {
4238
+ if (!selectedElement || !chunkGUGHIQ4P_js.hasTextProperties(selectedElement)) {
4239
4239
  return;
4240
4240
  }
4241
- const inlineSel = chunkIJY5WNZK_js.getInlineEditorSelection(selectedElement.textSegments);
4241
+ const inlineSel = chunkGUGHIQ4P_js.getInlineEditorSelection(selectedElement.textSegments);
4242
4242
  if (inlineSel && selectedElement.textSegments) {
4243
- const newSegments = chunkIJY5WNZK_js.applyCaseTransformToSegments(
4243
+ const newSegments = chunkGUGHIQ4P_js.applyCaseTransformToSegments(
4244
4244
  selectedElement.textSegments,
4245
4245
  inlineSel,
4246
4246
  mode
@@ -4250,14 +4250,14 @@ function useElementOperations(input) {
4250
4250
  }
4251
4251
  const updates = {};
4252
4252
  if (selectedElement.textSegments && selectedElement.textSegments.length > 0) {
4253
- updates.textSegments = chunkIJY5WNZK_js.applyCaseTransformToSegments(
4253
+ updates.textSegments = chunkGUGHIQ4P_js.applyCaseTransformToSegments(
4254
4254
  selectedElement.textSegments,
4255
4255
  null,
4256
4256
  mode
4257
4257
  );
4258
4258
  }
4259
4259
  if (typeof selectedElement.text === "string") {
4260
- updates.text = chunkIJY5WNZK_js.transformTextCase(selectedElement.text, mode);
4260
+ updates.text = chunkGUGHIQ4P_js.transformTextCase(selectedElement.text, mode);
4261
4261
  }
4262
4262
  updateSelectedElement(updates);
4263
4263
  },
@@ -4270,15 +4270,15 @@ function useElementOperations(input) {
4270
4270
  [setSlides]
4271
4271
  );
4272
4272
  const masterViewTarget = masterView?.target ?? null;
4273
- const activeElements = masterViewTarget ? chunkIJY5WNZK_js.masterViewElements(masterView, masterViewTarget) : editTemplateMode ? templateElements : activeSlide?.elements ?? [];
4273
+ const activeElements = masterViewTarget ? chunkGUGHIQ4P_js.masterViewElements(masterView, masterViewTarget) : editTemplateMode ? templateElements : activeSlide?.elements ?? [];
4274
4274
  const updateActiveElements = react.useCallback(
4275
4275
  (updater) => {
4276
4276
  if (masterView?.target) {
4277
4277
  applyMasterViewWrite(
4278
- chunkIJY5WNZK_js.replaceMasterViewElements(
4278
+ chunkGUGHIQ4P_js.replaceMasterViewElements(
4279
4279
  masterView,
4280
4280
  masterView.target,
4281
- updater(chunkIJY5WNZK_js.masterViewElements(masterView, masterView.target))
4281
+ updater(chunkGUGHIQ4P_js.masterViewElements(masterView, masterView.target))
4282
4282
  )
4283
4283
  );
4284
4284
  return;
@@ -4331,7 +4331,7 @@ function useSectionOperations(input) {
4331
4331
  const { sections, setSections, slides, setSlides, markDirty } = input;
4332
4332
  const addSection2 = react.useCallback(
4333
4333
  (name, afterSlideIndex) => {
4334
- const result = chunkIJY5WNZK_js.addSection(sections, slides, name, afterSlideIndex);
4334
+ const result = chunkGUGHIQ4P_js.addSection(sections, slides, name, afterSlideIndex);
4335
4335
  setSlides(result.slides);
4336
4336
  setSections(result.sections);
4337
4337
  markDirty();
@@ -4340,7 +4340,7 @@ function useSectionOperations(input) {
4340
4340
  );
4341
4341
  const renameSection2 = react.useCallback(
4342
4342
  (sectionId, newName) => {
4343
- const result = chunkIJY5WNZK_js.renameSection(sections, slides, sectionId, newName);
4343
+ const result = chunkGUGHIQ4P_js.renameSection(sections, slides, sectionId, newName);
4344
4344
  setSections(result.sections);
4345
4345
  setSlides(result.slides);
4346
4346
  markDirty();
@@ -4349,7 +4349,7 @@ function useSectionOperations(input) {
4349
4349
  );
4350
4350
  const deleteSection2 = react.useCallback(
4351
4351
  (sectionId) => {
4352
- const result = chunkIJY5WNZK_js.deleteSection(sections, slides, sectionId);
4352
+ const result = chunkGUGHIQ4P_js.deleteSection(sections, slides, sectionId);
4353
4353
  setSections(result.sections);
4354
4354
  setSlides(result.slides);
4355
4355
  markDirty();
@@ -4358,21 +4358,21 @@ function useSectionOperations(input) {
4358
4358
  );
4359
4359
  const moveSectionUp2 = react.useCallback(
4360
4360
  (sectionId) => {
4361
- setSections(chunkIJY5WNZK_js.moveSectionUp(sections, sectionId));
4361
+ setSections(chunkGUGHIQ4P_js.moveSectionUp(sections, sectionId));
4362
4362
  markDirty();
4363
4363
  },
4364
4364
  [sections, setSections, markDirty]
4365
4365
  );
4366
4366
  const moveSectionDown2 = react.useCallback(
4367
4367
  (sectionId) => {
4368
- setSections(chunkIJY5WNZK_js.moveSectionDown(sections, sectionId));
4368
+ setSections(chunkGUGHIQ4P_js.moveSectionDown(sections, sectionId));
4369
4369
  markDirty();
4370
4370
  },
4371
4371
  [sections, setSections, markDirty]
4372
4372
  );
4373
4373
  const moveSlidesToSection2 = react.useCallback(
4374
4374
  (slideIndexes, targetSectionId) => {
4375
- const result = chunkIJY5WNZK_js.moveSlidesToSection(sections, slides, slideIndexes, targetSectionId);
4375
+ const result = chunkGUGHIQ4P_js.moveSlidesToSection(sections, slides, slideIndexes, targetSectionId);
4376
4376
  setSlides(result.slides);
4377
4377
  setSections(result.sections);
4378
4378
  markDirty();
@@ -4401,19 +4401,19 @@ function useSectionOperations(input) {
4401
4401
 
4402
4402
  // src/viewer/hooks/pointer-move-handlers.ts
4403
4403
  function computeResizeGeometry(handle, startX, startY, startWidth, startHeight, dx, dy, snapToGrid, gridSpacingPx) {
4404
- const resized = chunkIJY5WNZK_js.applyResize(
4404
+ const resized = chunkGUGHIQ4P_js.applyResize(
4405
4405
  { x: startX, y: startY, width: startWidth, height: startHeight },
4406
4406
  handle,
4407
4407
  dx,
4408
4408
  dy,
4409
4409
  1,
4410
- { minSize: chunkD4LINQVA_js.MIN_ELEMENT_SIZE }
4410
+ { minSize: chunkV5PW4QCE_js.MIN_ELEMENT_SIZE }
4411
4411
  );
4412
4412
  const box = { x: resized.x, y: resized.y, width: resized.width, height: resized.height };
4413
4413
  if (!snapToGrid) {
4414
4414
  return box;
4415
4415
  }
4416
- return chunkIJY5WNZK_js.snapBoxToGrid(box, handle, gridSpacingPx, chunkD4LINQVA_js.MIN_ELEMENT_SIZE);
4416
+ return chunkGUGHIQ4P_js.snapBoxToGrid(box, handle, gridSpacingPx, chunkV5PW4QCE_js.MIN_ELEMENT_SIZE);
4417
4417
  }
4418
4418
  function resolveLiveTarget(input) {
4419
4419
  const { livePatcher, editTemplateMode, activeSlide } = input;
@@ -4526,7 +4526,7 @@ function processDragMove(e, drag, editorScale, snapToGrid, snapToShape, gridSpac
4526
4526
  width: el.width,
4527
4527
  height: el.height
4528
4528
  }));
4529
- const snapResult = chunkIJY5WNZK_js.computeSnapToShape(
4529
+ const snapResult = chunkGUGHIQ4P_js.computeSnapToShape(
4530
4530
  targetX,
4531
4531
  targetY,
4532
4532
  primaryEl.width,
@@ -4565,7 +4565,7 @@ function processDragMove(e, drag, editorScale, snapToGrid, snapToShape, gridSpac
4565
4565
  if (live) {
4566
4566
  for (const id of Object.keys(drag.startPositionsById)) {
4567
4567
  const start = drag.startPositionsById[id];
4568
- chunkIJY5WNZK_js.publishLiveGeometry(live.patcher, live.slideId, id, {
4568
+ chunkGUGHIQ4P_js.publishLiveGeometry(live.patcher, live.slideId, id, {
4569
4569
  x: start.x + appliedDx,
4570
4570
  y: start.y + appliedDy
4571
4571
  });
@@ -4599,22 +4599,22 @@ function processResizeMove(e, rs, editorScale, snapToGrid, gridSpacingPx, live)
4599
4599
  if (rs.domEl) {
4600
4600
  rs.domEl.style.left = `${geo.x}px`;
4601
4601
  rs.domEl.style.top = `${geo.y}px`;
4602
- rs.domEl.style.width = `${Math.max(geo.width, chunkD4LINQVA_js.MIN_ELEMENT_SIZE)}px`;
4603
- rs.domEl.style.height = `${Math.max(geo.height, chunkD4LINQVA_js.MIN_ELEMENT_SIZE)}px`;
4602
+ rs.domEl.style.width = `${Math.max(geo.width, chunkV5PW4QCE_js.MIN_ELEMENT_SIZE)}px`;
4603
+ rs.domEl.style.height = `${Math.max(geo.height, chunkV5PW4QCE_js.MIN_ELEMENT_SIZE)}px`;
4604
4604
  }
4605
4605
  if (live) {
4606
- chunkIJY5WNZK_js.publishLiveGeometry(live.patcher, live.slideId, rs.elementId, {
4606
+ chunkGUGHIQ4P_js.publishLiveGeometry(live.patcher, live.slideId, rs.elementId, {
4607
4607
  x: geo.x,
4608
4608
  y: geo.y,
4609
- width: Math.max(geo.width, chunkD4LINQVA_js.MIN_ELEMENT_SIZE),
4610
- height: Math.max(geo.height, chunkD4LINQVA_js.MIN_ELEMENT_SIZE)
4609
+ width: Math.max(geo.width, chunkV5PW4QCE_js.MIN_ELEMENT_SIZE),
4610
+ height: Math.max(geo.height, chunkV5PW4QCE_js.MIN_ELEMENT_SIZE)
4611
4611
  });
4612
4612
  }
4613
4613
  }
4614
4614
  function processAdjustmentMove(e, adj, editorScale, updateElementById) {
4615
4615
  const dx = (e.clientX - adj.startClientX) / editorScale;
4616
4616
  const dy = (e.clientY - adj.startClientY) / editorScale;
4617
- const adjustments = chunkIJY5WNZK_js.getDraggedShapeAdjustments(adj, dx, dy);
4617
+ const adjustments = chunkGUGHIQ4P_js.getDraggedShapeAdjustments(adj, dx, dy);
4618
4618
  if (!adj.moved && Math.hypot(dx, dy) > 2) {
4619
4619
  adj.moved = true;
4620
4620
  }
@@ -4689,13 +4689,13 @@ function processPointerUp(input) {
4689
4689
  if (i !== activeSlideIndex) {
4690
4690
  return s;
4691
4691
  }
4692
- const rerouted = chunkIJY5WNZK_js.rerouteConnectorsForMovedElements(s.elements, movedIds);
4692
+ const rerouted = chunkGUGHIQ4P_js.rerouteConnectorsForMovedElements(s.elements, movedIds);
4693
4693
  if (rerouted.length === 0) {
4694
4694
  return s;
4695
4695
  }
4696
4696
  return {
4697
4697
  ...s,
4698
- elements: chunkIJY5WNZK_js.applyReroutedConnectors(s.elements, rerouted)
4698
+ elements: chunkGUGHIQ4P_js.applyReroutedConnectors(s.elements, rerouted)
4699
4699
  };
4700
4700
  })
4701
4701
  );
@@ -4720,9 +4720,9 @@ function processPointerUp(input) {
4720
4720
  }
4721
4721
  function commitMarquee(marquee, editTemplateMode, templateElements, activeSlide, applySelection, clearSelection) {
4722
4722
  const sourceElements = editTemplateMode ? templateElements : activeSlide?.elements ?? [];
4723
- const hitIds = chunkIJY5WNZK_js.computeMarqueeHitIds(marquee, sourceElements);
4723
+ const hitIds = chunkGUGHIQ4P_js.computeMarqueeHitIds(marquee, sourceElements);
4724
4724
  if (marquee.additive) {
4725
- const merged = chunkIJY5WNZK_js.mergeAdditiveSelection(marquee.baseSelectionIds, hitIds);
4725
+ const merged = chunkGUGHIQ4P_js.mergeAdditiveSelection(marquee.baseSelectionIds, hitIds);
4726
4726
  if (merged.length > 0) {
4727
4727
  applySelection(merged[0], merged);
4728
4728
  } else {
@@ -4745,8 +4745,8 @@ function commitDrag(drag, editTemplateMode, activeSlide, activeSlideIndex, setTe
4745
4745
  }
4746
4746
  return { ...el, x: start.x + dx, y: start.y + dy };
4747
4747
  });
4748
- const rerouted = chunkIJY5WNZK_js.rerouteConnectorsForMovedElements(movedElements, movedIds);
4749
- return chunkIJY5WNZK_js.applyReroutedConnectors(movedElements, rerouted);
4748
+ const rerouted = chunkGUGHIQ4P_js.rerouteConnectorsForMovedElements(movedElements, movedIds);
4749
+ return chunkGUGHIQ4P_js.applyReroutedConnectors(movedElements, rerouted);
4750
4750
  };
4751
4751
  if (editTemplateMode) {
4752
4752
  const slideId = activeSlide?.id;
@@ -4903,9 +4903,9 @@ function useCanvasInteractions(input) {
4903
4903
  return;
4904
4904
  }
4905
4905
  const el = elementLookup.get(editId);
4906
- if (el && chunkIJY5WNZK_js.hasTextProperties(el)) {
4906
+ if (el && chunkGUGHIQ4P_js.hasTextProperties(el)) {
4907
4907
  const committedText = transformCommittedText ? transformCommittedText(inlineEditingText) : inlineEditingText;
4908
- const newSegments = chunkIJY5WNZK_js.remapTextToSegments(committedText, el.textSegments, el.textStyle);
4908
+ const newSegments = chunkGUGHIQ4P_js.remapTextToSegments(committedText, el.textSegments, el.textStyle);
4909
4909
  ops.updateElementById(editId, {
4910
4910
  text: committedText,
4911
4911
  textSegments: newSegments
@@ -4916,7 +4916,7 @@ function useCanvasInteractions(input) {
4916
4916
  setInlineEditingText("");
4917
4917
  };
4918
4918
  const openEquationEditorForElement = (el) => {
4919
- if (!chunkIJY5WNZK_js.hasTextProperties(el)) {
4919
+ if (!chunkGUGHIQ4P_js.hasTextProperties(el)) {
4920
4920
  return false;
4921
4921
  }
4922
4922
  const eqSeg = el.textSegments?.find((seg) => seg.equationXml);
@@ -4946,7 +4946,7 @@ function useCanvasInteractions(input) {
4946
4946
  justInteractedRef.current = false;
4947
4947
  } else {
4948
4948
  const el = elementLookup.get(elementId);
4949
- if (el && chunkIJY5WNZK_js.hasTextProperties(el) && chunkIJY5WNZK_js.canInteractWithElement(el, "textEdit")) {
4949
+ if (el && chunkGUGHIQ4P_js.hasTextProperties(el) && chunkGUGHIQ4P_js.canInteractWithElement(el, "textEdit")) {
4950
4950
  if (!openEquationEditorForElement(el)) {
4951
4951
  setInlineEditingElementId(elementId);
4952
4952
  setInlineEditingText(el.text ?? "");
@@ -4965,7 +4965,7 @@ function useCanvasInteractions(input) {
4965
4965
  if (openEquationEditorForElement(el)) {
4966
4966
  return;
4967
4967
  }
4968
- if (chunkIJY5WNZK_js.hasTextProperties(el) && chunkIJY5WNZK_js.canInteractWithElement(el, "textEdit")) {
4968
+ if (chunkGUGHIQ4P_js.hasTextProperties(el) && chunkGUGHIQ4P_js.canInteractWithElement(el, "textEdit")) {
4969
4969
  setInlineEditingElementId(elementId);
4970
4970
  setInlineEditingText(el.text ?? "");
4971
4971
  }
@@ -4988,7 +4988,7 @@ function useCanvasInteractions(input) {
4988
4988
  justSelectedRef.current = false;
4989
4989
  }
4990
4990
  const ids = !wasSelected ? [elementId] : effectiveSelectedIds.length ? effectiveSelectedIds : [elementId];
4991
- const movableIds = chunkIJY5WNZK_js.filterInteractableIds(ids, (id) => elementLookup.get(id), "move");
4991
+ const movableIds = chunkGUGHIQ4P_js.filterInteractableIds(ids, (id) => elementLookup.get(id), "move");
4992
4992
  if (movableIds.length === 0) {
4993
4993
  return;
4994
4994
  }
@@ -5058,7 +5058,7 @@ function useCanvasInteractions(input) {
5058
5058
  const handleResizePointerDown = (elementId, e, handle) => {
5059
5059
  e.stopPropagation();
5060
5060
  const el = elementLookup.get(elementId);
5061
- if (!el || !chunkIJY5WNZK_js.canInteractWithElement(el, "resize")) {
5061
+ if (!el || !chunkGUGHIQ4P_js.canInteractWithElement(el, "resize")) {
5062
5062
  return;
5063
5063
  }
5064
5064
  resizeStateRef.current = {
@@ -5080,7 +5080,7 @@ function useCanvasInteractions(input) {
5080
5080
  };
5081
5081
  const handleRotate = (elementId, rotationDeg) => {
5082
5082
  const el = elementLookup.get(elementId);
5083
- if (!el || !chunkIJY5WNZK_js.canInteractWithElement(el, "rotate")) {
5083
+ if (!el || !chunkGUGHIQ4P_js.canInteractWithElement(el, "rotate")) {
5084
5084
  return;
5085
5085
  }
5086
5086
  ops.updateElementById(elementId, { rotation: rotationDeg });
@@ -5100,10 +5100,10 @@ function useCanvasInteractions(input) {
5100
5100
  const handleAdjustmentPointerDown = (elementId, e, descriptor) => {
5101
5101
  e.stopPropagation();
5102
5102
  const el = elementLookup.get(elementId);
5103
- if (!el || !chunkIJY5WNZK_js.canInteractWithElement(el, "adjustHandle")) {
5103
+ if (!el || !chunkGUGHIQ4P_js.canInteractWithElement(el, "adjustHandle")) {
5104
5104
  return;
5105
5105
  }
5106
- shapeAdjustmentDragStateRef.current = chunkIJY5WNZK_js.beginShapeAdjustment(
5106
+ shapeAdjustmentDragStateRef.current = chunkGUGHIQ4P_js.beginShapeAdjustment(
5107
5107
  el,
5108
5108
  descriptor,
5109
5109
  e.clientX,
@@ -5150,7 +5150,7 @@ function createFileHandlers(deps) {
5150
5150
  h = Math.round(h * scale);
5151
5151
  }
5152
5152
  addElement({
5153
- id: chunkIJY5WNZK_js.generateElementId(),
5153
+ id: chunkGUGHIQ4P_js.generateElementId(),
5154
5154
  type: "image",
5155
5155
  x: Math.round((canvasSize.width - w) / 2),
5156
5156
  y: Math.round((canvasSize.height - h) / 2),
@@ -5161,7 +5161,7 @@ function createFileHandlers(deps) {
5161
5161
  };
5162
5162
  img.onerror = () => {
5163
5163
  addElement({
5164
- id: chunkIJY5WNZK_js.generateElementId(),
5164
+ id: chunkGUGHIQ4P_js.generateElementId(),
5165
5165
  type: "image",
5166
5166
  x: 100,
5167
5167
  y: 100,
@@ -5187,7 +5187,7 @@ function createFileHandlers(deps) {
5187
5187
  const elFilePath = file.path;
5188
5188
  const insertMediaElement = (mediaSourceUrl, width, height) => {
5189
5189
  addElement({
5190
- id: chunkIJY5WNZK_js.generateElementId(),
5190
+ id: chunkGUGHIQ4P_js.generateElementId(),
5191
5191
  type: "media",
5192
5192
  mediaType,
5193
5193
  mediaMimeType: file.type || void 0,
@@ -5362,13 +5362,13 @@ function createStructuredElementHandlers(deps) {
5362
5362
  return;
5363
5363
  }
5364
5364
  addElement({
5365
- id: chunkIJY5WNZK_js.generateElementId(),
5365
+ id: chunkGUGHIQ4P_js.generateElementId(),
5366
5366
  type: "smartArt",
5367
5367
  x: 100,
5368
5368
  y: 120,
5369
5369
  width: 600,
5370
5370
  height: 340,
5371
- smartArtData: chunkIJY5WNZK_js.buildSmartArtPresetData(
5371
+ smartArtData: chunkGUGHIQ4P_js.buildSmartArtPresetData(
5372
5372
  layout,
5373
5373
  defaultItems,
5374
5374
  (i) => `node-${Date.now()}-${i}-${Math.random().toString(36).slice(2, 8)}`
@@ -5380,7 +5380,7 @@ function createStructuredElementHandlers(deps) {
5380
5380
  return;
5381
5381
  }
5382
5382
  addElement({
5383
- id: chunkIJY5WNZK_js.generateElementId(),
5383
+ id: chunkGUGHIQ4P_js.generateElementId(),
5384
5384
  type: "shape",
5385
5385
  x: 120,
5386
5386
  y: 200,
@@ -5439,7 +5439,7 @@ function createStructuredElementHandlers(deps) {
5439
5439
  const displayText = value || fieldTexts[fieldType] || fieldType;
5440
5440
  const fieldGuid = `{${crypto.randomUUID().toUpperCase()}}`;
5441
5441
  addElement({
5442
- id: chunkIJY5WNZK_js.generateElementId(),
5442
+ id: chunkGUGHIQ4P_js.generateElementId(),
5443
5443
  type: "shape",
5444
5444
  x: 120,
5445
5445
  y: 200,
@@ -5461,11 +5461,11 @@ function createStructuredElementHandlers(deps) {
5461
5461
  if (!activeSlide) {
5462
5462
  return;
5463
5463
  }
5464
- const preset = chunkIJY5WNZK_js.ACTION_BUTTON_PRESETS.find((p) => p.shapeType === shapeType);
5464
+ const preset = chunkGUGHIQ4P_js.ACTION_BUTTON_PRESETS.find((p) => p.shapeType === shapeType);
5465
5465
  if (!preset) {
5466
5466
  return;
5467
5467
  }
5468
- const defaultPptxAction = chunkIJY5WNZK_js.elementActionToPptxAction({
5468
+ const defaultPptxAction = chunkGUGHIQ4P_js.elementActionToPptxAction({
5469
5469
  trigger: "click",
5470
5470
  type: preset.defaultAction
5471
5471
  });
@@ -5474,7 +5474,7 @@ function createStructuredElementHandlers(deps) {
5474
5474
  defaultPptxAction.highlightClick = true;
5475
5475
  }
5476
5476
  addElement({
5477
- id: chunkIJY5WNZK_js.generateElementId(),
5477
+ id: chunkGUGHIQ4P_js.generateElementId(),
5478
5478
  type: "shape",
5479
5479
  x: 150,
5480
5480
  y: 150,
@@ -5541,14 +5541,14 @@ function useInsertElements(input) {
5541
5541
  return;
5542
5542
  }
5543
5543
  addElement({
5544
- id: chunkIJY5WNZK_js.generateElementId(),
5544
+ id: chunkGUGHIQ4P_js.generateElementId(),
5545
5545
  type: "text",
5546
5546
  x: 100,
5547
5547
  y: 100,
5548
5548
  width: 300,
5549
5549
  height: 60,
5550
5550
  text: "",
5551
- textStyle: { fontSize: chunkD4LINQVA_js.DEFAULT_TEXT_FONT_SIZE }
5551
+ textStyle: { fontSize: chunkV5PW4QCE_js.DEFAULT_TEXT_FONT_SIZE }
5552
5552
  });
5553
5553
  };
5554
5554
  const handleAddShape = () => {
@@ -5556,7 +5556,7 @@ function useInsertElements(input) {
5556
5556
  return;
5557
5557
  }
5558
5558
  addElement({
5559
- id: chunkIJY5WNZK_js.generateElementId(),
5559
+ id: chunkGUGHIQ4P_js.generateElementId(),
5560
5560
  type: "shape",
5561
5561
  x: 150,
5562
5562
  y: 150,
@@ -5575,15 +5575,15 @@ function useInsertElements(input) {
5575
5575
  return;
5576
5576
  }
5577
5577
  addElement({
5578
- ...chunkIJY5WNZK_js.newTableElement(chunkD4LINQVA_js.DEFAULT_TABLE_ROWS, chunkD4LINQVA_js.DEFAULT_TABLE_COLUMNS, 100, 200),
5579
- id: chunkIJY5WNZK_js.generateElementId()
5578
+ ...chunkGUGHIQ4P_js.newTableElement(chunkV5PW4QCE_js.DEFAULT_TABLE_ROWS, chunkV5PW4QCE_js.DEFAULT_TABLE_COLUMNS, 100, 200),
5579
+ id: chunkGUGHIQ4P_js.generateElementId()
5580
5580
  });
5581
5581
  };
5582
5582
  const handleAddChart = (chartKind) => {
5583
5583
  if (!activeSlide) {
5584
5584
  return;
5585
5585
  }
5586
- addElement(chunkIJY5WNZK_js.createDefaultChartElement(chartKind));
5586
+ addElement(chunkGUGHIQ4P_js.createDefaultChartElement(chartKind));
5587
5587
  };
5588
5588
  const structured = createStructuredElementHandlers({
5589
5589
  activeSlide,
@@ -5653,7 +5653,7 @@ function useClipboardHandlers(input) {
5653
5653
  if (!selectedElement) {
5654
5654
  return;
5655
5655
  }
5656
- setClipboardPayload(chunkIJY5WNZK_js.buildElementClipboardPayload(selectedElement, editTemplateMode));
5656
+ setClipboardPayload(chunkGUGHIQ4P_js.buildElementClipboardPayload(selectedElement, editTemplateMode));
5657
5657
  };
5658
5658
  const handleDelete = () => {
5659
5659
  const idsToDelete = effectiveSelectedIds;
@@ -5670,7 +5670,7 @@ function useClipboardHandlers(input) {
5670
5670
  handleDelete();
5671
5671
  };
5672
5672
  const insertClone = (source) => {
5673
- const clone = chunkIJY5WNZK_js.cloneElementForPaste(source, { intoTemplate: editTemplateMode });
5673
+ const clone = chunkGUGHIQ4P_js.cloneElementForPaste(source, { intoTemplate: editTemplateMode });
5674
5674
  ops.updateActiveElements((els) => [...els, clone]);
5675
5675
  ops.applySelection(clone.id);
5676
5676
  history.markDirty();
@@ -5705,7 +5705,7 @@ function resolveShapePath(el) {
5705
5705
  return el.pathData;
5706
5706
  }
5707
5707
  if ("shapeType" in el && typeof el.shapeType === "string") {
5708
- const clipPath = chunkIJY5WNZK_js.getPresetShapeClipPath(el.shapeType);
5708
+ const clipPath = chunkGUGHIQ4P_js.getPresetShapeClipPath(el.shapeType);
5709
5709
  if (clipPath) {
5710
5710
  const svgPath = clipPathToSvgPath(clipPath, el.width, el.height);
5711
5711
  if (svgPath) {
@@ -5756,7 +5756,7 @@ function clipPathToSvgPath(clipPath, width, height) {
5756
5756
  return parts.join(" ");
5757
5757
  }
5758
5758
  function transformPathToGlobal(pathData, el) {
5759
- const polys = chunkIJY5WNZK_js.svgPathToPolygons(pathData);
5759
+ const polys = chunkGUGHIQ4P_js.svgPathToPolygons(pathData);
5760
5760
  if (polys.length === 0) {
5761
5761
  return pathData;
5762
5762
  }
@@ -5776,10 +5776,10 @@ function transformPathToGlobal(pathData, el) {
5776
5776
  y: pt.y * scaleY + el.y
5777
5777
  }))
5778
5778
  );
5779
- return chunkIJY5WNZK_js.polygonsToSvgPath(transformed);
5779
+ return chunkGUGHIQ4P_js.polygonsToSvgPath(transformed);
5780
5780
  }
5781
5781
  function transformPathToLocal(pathData, x, y, _width, _height) {
5782
- const polys = chunkIJY5WNZK_js.svgPathToPolygons(pathData);
5782
+ const polys = chunkGUGHIQ4P_js.svgPathToPolygons(pathData);
5783
5783
  if (polys.length === 0) {
5784
5784
  return pathData;
5785
5785
  }
@@ -5789,10 +5789,10 @@ function transformPathToLocal(pathData, x, y, _width, _height) {
5789
5789
  y: pt.y - y
5790
5790
  }))
5791
5791
  );
5792
- return chunkIJY5WNZK_js.polygonsToSvgPath(transformed);
5792
+ return chunkGUGHIQ4P_js.polygonsToSvgPath(transformed);
5793
5793
  }
5794
5794
  function pathBounds(pathData) {
5795
- const polys = chunkIJY5WNZK_js.svgPathToPolygons(pathData);
5795
+ const polys = chunkGUGHIQ4P_js.svgPathToPolygons(pathData);
5796
5796
  let minX = Infinity;
5797
5797
  let minY = Infinity;
5798
5798
  let maxX = -Infinity;
@@ -5851,7 +5851,7 @@ function useMergeShapesHandler(input) {
5851
5851
  let allFragments = [];
5852
5852
  let remaining = globalPaths[0];
5853
5853
  for (let i = 1; i < globalPaths.length; i++) {
5854
- const frags = chunkIJY5WNZK_js.mergeShapes("fragment", remaining, globalPaths[i]);
5854
+ const frags = chunkGUGHIQ4P_js.mergeShapes("fragment", remaining, globalPaths[i]);
5855
5855
  if (Array.isArray(frags)) {
5856
5856
  allFragments = frags;
5857
5857
  }
@@ -5880,7 +5880,7 @@ function useMergeShapesHandler(input) {
5880
5880
  bounds.height
5881
5881
  );
5882
5882
  const newEl = {
5883
- id: chunkIJY5WNZK_js.generateElementId(),
5883
+ id: chunkGUGHIQ4P_js.generateElementId(),
5884
5884
  type: "shape",
5885
5885
  x: bounds.x,
5886
5886
  y: bounds.y,
@@ -5918,7 +5918,7 @@ function useMergeShapesHandler(input) {
5918
5918
  } else {
5919
5919
  let resultPath = globalPaths[0];
5920
5920
  for (let i = 1; i < globalPaths.length; i++) {
5921
- const result = chunkIJY5WNZK_js.mergeShapes(operation, resultPath, globalPaths[i]);
5921
+ const result = chunkGUGHIQ4P_js.mergeShapes(operation, resultPath, globalPaths[i]);
5922
5922
  if (typeof result === "string") {
5923
5923
  resultPath = result;
5924
5924
  }
@@ -5939,7 +5939,7 @@ function useMergeShapesHandler(input) {
5939
5939
  );
5940
5940
  const primary = targets[0];
5941
5941
  const newEl = {
5942
- id: chunkIJY5WNZK_js.generateElementId(),
5942
+ id: chunkGUGHIQ4P_js.generateElementId(),
5943
5943
  type: "shape",
5944
5944
  x: bounds.x,
5945
5945
  y: bounds.y,
@@ -6002,7 +6002,7 @@ function useGroupAlignLayerHandlers(input) {
6002
6002
  if (ids.length < 2 || !activeSlide) {
6003
6003
  return;
6004
6004
  }
6005
- const { elements, groupId } = chunkIJY5WNZK_js.groupElements(ops.activeElements, ids, chunkIJY5WNZK_js.generateElementId());
6005
+ const { elements, groupId } = chunkGUGHIQ4P_js.groupElements(ops.activeElements, ids, chunkGUGHIQ4P_js.generateElementId());
6006
6006
  if (groupId === null) {
6007
6007
  return;
6008
6008
  }
@@ -6015,11 +6015,11 @@ function useGroupAlignLayerHandlers(input) {
6015
6015
  return;
6016
6016
  }
6017
6017
  const group = selectedElement;
6018
- const intoTemplate = chunkIJY5WNZK_js.isTemplateElementId(group.id);
6018
+ const intoTemplate = chunkGUGHIQ4P_js.isTemplateElementId(group.id);
6019
6019
  const childIds = group.children.map(
6020
- (child) => intoTemplate ? chunkIJY5WNZK_js.makeCloneId(true, child.id || group.id) : child.id || chunkIJY5WNZK_js.generateElementId()
6020
+ (child) => intoTemplate ? chunkGUGHIQ4P_js.makeCloneId(true, child.id || group.id) : child.id || chunkGUGHIQ4P_js.generateElementId()
6021
6021
  );
6022
- const { elements, childIds: usedIds } = chunkIJY5WNZK_js.ungroupElements(
6022
+ const { elements, childIds: usedIds } = chunkGUGHIQ4P_js.ungroupElements(
6023
6023
  ops.activeElements,
6024
6024
  group.id,
6025
6025
  childIds,
@@ -6048,7 +6048,7 @@ function useGroupAlignLayerHandlers(input) {
6048
6048
  if (!edge) {
6049
6049
  return;
6050
6050
  }
6051
- const positions = chunkIJY5WNZK_js.alignElements(selectedElements, edge);
6051
+ const positions = chunkGUGHIQ4P_js.alignElements(selectedElements, edge);
6052
6052
  for (const [id, pos] of positions) {
6053
6053
  const el = elementLookup.get(id);
6054
6054
  if (!el) {
@@ -6066,7 +6066,7 @@ function useGroupAlignLayerHandlers(input) {
6066
6066
  if (!distAxis) {
6067
6067
  return;
6068
6068
  }
6069
- const positions = chunkIJY5WNZK_js.distributeElements(selectedElements, distAxis);
6069
+ const positions = chunkGUGHIQ4P_js.distributeElements(selectedElements, distAxis);
6070
6070
  for (const [id, pos] of positions) {
6071
6071
  const el = elementLookup.get(id);
6072
6072
  if (!el) {
@@ -6083,7 +6083,7 @@ function useGroupAlignLayerHandlers(input) {
6083
6083
  }
6084
6084
  const id = selectedElement.id;
6085
6085
  ops.updateActiveElements(
6086
- (els) => direction === "forward" ? chunkIJY5WNZK_js.bringForward(els, id) : direction === "backward" ? chunkIJY5WNZK_js.sendBackward(els, id) : els
6086
+ (els) => direction === "forward" ? chunkGUGHIQ4P_js.bringForward(els, id) : direction === "backward" ? chunkGUGHIQ4P_js.sendBackward(els, id) : els
6087
6087
  );
6088
6088
  history.markDirty();
6089
6089
  };
@@ -6093,7 +6093,7 @@ function useGroupAlignLayerHandlers(input) {
6093
6093
  }
6094
6094
  const id = selectedElement.id;
6095
6095
  ops.updateActiveElements(
6096
- (els) => direction === "front" ? chunkIJY5WNZK_js.bringToFront(els, id) : chunkIJY5WNZK_js.sendToBack(els, id)
6096
+ (els) => direction === "front" ? chunkGUGHIQ4P_js.bringToFront(els, id) : chunkGUGHIQ4P_js.sendToBack(els, id)
6097
6097
  );
6098
6098
  history.markDirty();
6099
6099
  };
@@ -6224,7 +6224,7 @@ function useSlideManagement(input) {
6224
6224
  theme
6225
6225
  } = input;
6226
6226
  const handleAddSlide = () => {
6227
- const newSlide = chunkIJY5WNZK_js.createBlankSlide(slides.length + 1);
6227
+ const newSlide = chunkGUGHIQ4P_js.createBlankSlide(slides.length + 1);
6228
6228
  ops.updateSlides((prev) => {
6229
6229
  const next = [...prev];
6230
6230
  next.splice(activeSlideIndex + 1, 0, newSlide);
@@ -6287,7 +6287,7 @@ function useSlideManagement(input) {
6287
6287
  }
6288
6288
  const clone = {
6289
6289
  ...src,
6290
- id: chunkIJY5WNZK_js.makeSlideId(),
6290
+ id: chunkGUGHIQ4P_js.makeSlideId(),
6291
6291
  elements: src.elements.map((el) => ({
6292
6292
  ...el,
6293
6293
  id: `${el.id}-dup-${Math.random().toString(36).slice(2, 6)}`
@@ -6319,7 +6319,7 @@ function useSlideManagement(input) {
6319
6319
  const handleInsertSlideFromLayout = (layoutPath, layoutName) => {
6320
6320
  const insertAt = activeSlideIndex + 1;
6321
6321
  const draft = {
6322
- ...chunkIJY5WNZK_js.createBlankSlide(slides.length + 1),
6322
+ ...chunkGUGHIQ4P_js.createBlankSlide(slides.length + 1),
6323
6323
  layoutPath,
6324
6324
  ...layoutName ? { layoutName } : {}
6325
6325
  };
@@ -6352,9 +6352,9 @@ function useSlideManagement(input) {
6352
6352
  };
6353
6353
  const handleInsertSlideFromTemplate = (templateId) => {
6354
6354
  const insertAt = activeSlideIndex + 1;
6355
- const draft = chunkIJY5WNZK_js.buildSlideTemplateSlide(templateId, chunkIJY5WNZK_js.makeSlideId(), slides.length + 1, {
6355
+ const draft = chunkGUGHIQ4P_js.buildSlideTemplateSlide(templateId, chunkGUGHIQ4P_js.makeSlideId(), slides.length + 1, {
6356
6356
  ...canvasSize ? { slideWidth: canvasSize.width, slideHeight: canvasSize.height } : {},
6357
- scheme: chunkIJY5WNZK_js.templateSchemeFromTheme(theme?.colorScheme)
6357
+ scheme: chunkGUGHIQ4P_js.templateSchemeFromTheme(theme?.colorScheme)
6358
6358
  });
6359
6359
  ops.updateSlides((prev) => insertSlideFromLayoutUpdater(prev, activeSlideIndex, draft));
6360
6360
  setActiveSlideIndex(insertAt);
@@ -6391,7 +6391,7 @@ function createTableMergeHandlers(input) {
6391
6391
  if (!nextCell || nextCell.hMerge || nextCell.vMerge) {
6392
6392
  return;
6393
6393
  }
6394
- const newTableData = chunkIJY5WNZK_js.mergeCells(
6394
+ const newTableData = chunkGUGHIQ4P_js.mergeCells(
6395
6395
  [
6396
6396
  { row: rowIndex, col: columnIndex },
6397
6397
  { row: rowIndex, col: nextColIdx }
@@ -6399,7 +6399,7 @@ function createTableMergeHandlers(input) {
6399
6399
  td
6400
6400
  );
6401
6401
  const updates = { tableData: newTableData };
6402
- const newRawXml = chunkIJY5WNZK_js.updateMergeAttrsInRawXml(selectedElement, newTableData);
6402
+ const newRawXml = chunkGUGHIQ4P_js.updateMergeAttrsInRawXml(selectedElement, newTableData);
6403
6403
  if (newRawXml) {
6404
6404
  updates.rawXml = newRawXml;
6405
6405
  }
@@ -6425,7 +6425,7 @@ function createTableMergeHandlers(input) {
6425
6425
  if (!targetNextCell || targetNextCell.hMerge || targetNextCell.vMerge) {
6426
6426
  return;
6427
6427
  }
6428
- const newTableData = chunkIJY5WNZK_js.mergeCells(
6428
+ const newTableData = chunkGUGHIQ4P_js.mergeCells(
6429
6429
  [
6430
6430
  { row: rowIndex, col: columnIndex },
6431
6431
  { row: targetNextRowIdx, col: columnIndex }
@@ -6433,7 +6433,7 @@ function createTableMergeHandlers(input) {
6433
6433
  td
6434
6434
  );
6435
6435
  const updates = { tableData: newTableData };
6436
- const newRawXml = chunkIJY5WNZK_js.updateMergeAttrsInRawXml(selectedElement, newTableData);
6436
+ const newRawXml = chunkGUGHIQ4P_js.updateMergeAttrsInRawXml(selectedElement, newTableData);
6437
6437
  if (newRawXml) {
6438
6438
  updates.rawXml = newRawXml;
6439
6439
  }
@@ -6448,9 +6448,9 @@ function createTableMergeHandlers(input) {
6448
6448
  return;
6449
6449
  }
6450
6450
  const td = selectedElement.tableData;
6451
- const newTableData = chunkIJY5WNZK_js.mergeCells(ts.selectedCells, td);
6451
+ const newTableData = chunkGUGHIQ4P_js.mergeCells(ts.selectedCells, td);
6452
6452
  const updates = { tableData: newTableData };
6453
- const newRawXml = chunkIJY5WNZK_js.updateMergeAttrsInRawXml(selectedElement, newTableData);
6453
+ const newRawXml = chunkGUGHIQ4P_js.updateMergeAttrsInRawXml(selectedElement, newTableData);
6454
6454
  if (newRawXml) {
6455
6455
  updates.rawXml = newRawXml;
6456
6456
  }
@@ -6467,9 +6467,9 @@ function createTableMergeHandlers(input) {
6467
6467
  }
6468
6468
  const { rowIndex, columnIndex } = ts;
6469
6469
  const td = selectedElement.tableData;
6470
- const newTableData = chunkIJY5WNZK_js.splitCell(rowIndex, columnIndex, td);
6470
+ const newTableData = chunkGUGHIQ4P_js.splitCell(rowIndex, columnIndex, td);
6471
6471
  const updates = { tableData: newTableData };
6472
- const newRawXml = chunkIJY5WNZK_js.updateMergeAttrsInRawXml(selectedElement, newTableData);
6472
+ const newRawXml = chunkGUGHIQ4P_js.updateMergeAttrsInRawXml(selectedElement, newTableData);
6473
6473
  if (newRawXml) {
6474
6474
  updates.rawXml = newRawXml;
6475
6475
  }
@@ -6501,10 +6501,10 @@ function createTableStructHandlers(input) {
6501
6501
  }
6502
6502
  const updates = {};
6503
6503
  if (el.tableData) {
6504
- updates.tableData = chunkIJY5WNZK_js.setCellText(el, rowIndex, colIndex, text).tableData;
6504
+ updates.tableData = chunkGUGHIQ4P_js.setCellText(el, rowIndex, colIndex, text).tableData;
6505
6505
  }
6506
6506
  if (el.rawXml) {
6507
- const newRawXml = chunkIJY5WNZK_js.updateCellTextInRawXml(el, rowIndex, colIndex, text);
6507
+ const newRawXml = chunkGUGHIQ4P_js.updateCellTextInRawXml(el, rowIndex, colIndex, text);
6508
6508
  if (newRawXml) {
6509
6509
  updates.rawXml = newRawXml;
6510
6510
  }
@@ -6528,7 +6528,7 @@ function createTableStructHandlers(input) {
6528
6528
  const { rowIndex, columnIndex: colIndex } = ts;
6529
6529
  const updates = {};
6530
6530
  if (selectedElement.rawXml) {
6531
- const newRawXml = chunkIJY5WNZK_js.updateCellTextStyleInRawXml(
6531
+ const newRawXml = chunkGUGHIQ4P_js.updateCellTextStyleInRawXml(
6532
6532
  selectedElement,
6533
6533
  rowIndex,
6534
6534
  colIndex,
@@ -6592,9 +6592,9 @@ function createTableStructHandlers(input) {
6592
6592
  return;
6593
6593
  }
6594
6594
  const rowIdx = ts?.rowIndex ?? 0;
6595
- const newTableData = chunkIJY5WNZK_js.insertTableRow(selectedElement.tableData, rowIdx, position);
6595
+ const newTableData = chunkGUGHIQ4P_js.insertTableRow(selectedElement.tableData, rowIdx, position);
6596
6596
  const updates = { tableData: newTableData };
6597
- const newRawXml = chunkIJY5WNZK_js.rebuildTableStructureInRawXml(selectedElement, newTableData);
6597
+ const newRawXml = chunkGUGHIQ4P_js.rebuildTableStructureInRawXml(selectedElement, newTableData);
6598
6598
  if (newRawXml) {
6599
6599
  updates.rawXml = newRawXml;
6600
6600
  }
@@ -6607,12 +6607,12 @@ function createTableStructHandlers(input) {
6607
6607
  }
6608
6608
  const td = selectedElement.tableData;
6609
6609
  const rowIdx = ts?.rowIndex ?? 0;
6610
- const newTableData = chunkIJY5WNZK_js.deleteTableRow(td, rowIdx);
6610
+ const newTableData = chunkGUGHIQ4P_js.deleteTableRow(td, rowIdx);
6611
6611
  if (newTableData === td) {
6612
6612
  return;
6613
6613
  }
6614
6614
  const updates = { tableData: newTableData };
6615
- const newRawXml = chunkIJY5WNZK_js.rebuildTableStructureInRawXml(selectedElement, newTableData);
6615
+ const newRawXml = chunkGUGHIQ4P_js.rebuildTableStructureInRawXml(selectedElement, newTableData);
6616
6616
  if (newRawXml) {
6617
6617
  updates.rawXml = newRawXml;
6618
6618
  }
@@ -6624,9 +6624,9 @@ function createTableStructHandlers(input) {
6624
6624
  return;
6625
6625
  }
6626
6626
  const colIdx = ts?.columnIndex ?? 0;
6627
- const newTableData = chunkIJY5WNZK_js.insertTableColumn(selectedElement.tableData, colIdx, position);
6627
+ const newTableData = chunkGUGHIQ4P_js.insertTableColumn(selectedElement.tableData, colIdx, position);
6628
6628
  const updates = { tableData: newTableData };
6629
- const newRawXml = chunkIJY5WNZK_js.rebuildTableStructureInRawXml(selectedElement, newTableData);
6629
+ const newRawXml = chunkGUGHIQ4P_js.rebuildTableStructureInRawXml(selectedElement, newTableData);
6630
6630
  if (newRawXml) {
6631
6631
  updates.rawXml = newRawXml;
6632
6632
  }
@@ -6639,12 +6639,12 @@ function createTableStructHandlers(input) {
6639
6639
  }
6640
6640
  const td = selectedElement.tableData;
6641
6641
  const colIdx = ts?.columnIndex ?? 0;
6642
- const newTableData = chunkIJY5WNZK_js.deleteTableColumn(td, colIdx);
6642
+ const newTableData = chunkGUGHIQ4P_js.deleteTableColumn(td, colIdx);
6643
6643
  if (newTableData === td) {
6644
6644
  return;
6645
6645
  }
6646
6646
  const updates = { tableData: newTableData };
6647
- const newRawXml = chunkIJY5WNZK_js.rebuildTableStructureInRawXml(selectedElement, newTableData);
6647
+ const newRawXml = chunkGUGHIQ4P_js.rebuildTableStructureInRawXml(selectedElement, newTableData);
6648
6648
  if (newRawXml) {
6649
6649
  updates.rawXml = newRawXml;
6650
6650
  }
@@ -6680,8 +6680,8 @@ async function renderToCanvas(element, options = {}) {
6680
6680
  return html2canvasPro(element, {
6681
6681
  ...options,
6682
6682
  onclone: async (doc, clonedEl) => {
6683
- await chunkIJY5WNZK_js.normalizeColorsForCapture(doc, clonedEl);
6684
- chunkIJY5WNZK_js.preprocessCssForCapture(clonedEl);
6683
+ await chunkGUGHIQ4P_js.normalizeColorsForCapture(doc, clonedEl);
6684
+ chunkGUGHIQ4P_js.preprocessCssForCapture(clonedEl);
6685
6685
  if (typeof userOnClone === "function") {
6686
6686
  userOnClone(doc, clonedEl);
6687
6687
  }
@@ -6737,7 +6737,7 @@ async function exportSlideToPngBlob(slideElement, options = {}) {
6737
6737
  }
6738
6738
  async function exportSlideAsPng(slideElement, slideIndex, options = {}) {
6739
6739
  const blob = await exportSlideToPngBlob(slideElement, options);
6740
- chunkIJY5WNZK_js.downloadBlob(blob, `slide-${slideIndex + 1}.png`);
6740
+ chunkGUGHIQ4P_js.downloadBlob(blob, `slide-${slideIndex + 1}.png`);
6741
6741
  }
6742
6742
  async function copySlideToClipboard(slideElement, options = {}) {
6743
6743
  const blob = await exportSlideToPngBlob(slideElement, options);
@@ -6759,15 +6759,15 @@ async function exportAllSlidesAsPdf(slideStageRef, totalSlides, setActiveSlide,
6759
6759
  continue;
6760
6760
  }
6761
6761
  const canvas = await renderElementToCanvas(stageEl, scale);
6762
- images.push(chunkIJY5WNZK_js.canvasToJpegData(canvas));
6762
+ images.push(chunkGUGHIQ4P_js.canvasToJpegData(canvas));
6763
6763
  }
6764
6764
  onProgress?.(totalSlides, totalSlides);
6765
6765
  setActiveSlide(currentSlideIndex);
6766
6766
  if (images.length === 0) {
6767
6767
  throw new Error(chunkMVKRI3CZ_js.translationsEn["pptx.export.errorNoSlidesPdf"]);
6768
6768
  }
6769
- const pdfBlobUrl = chunkD4LINQVA_js.buildPdfFromImageData(images);
6770
- chunkIJY5WNZK_js.downloadDataUrl(pdfBlobUrl, filename);
6769
+ const pdfBlobUrl = chunkV5PW4QCE_js.buildPdfFromImageData(images);
6770
+ chunkGUGHIQ4P_js.downloadDataUrl(pdfBlobUrl, filename);
6771
6771
  }
6772
6772
  async function captureAllSlidesAsPngDataUrls(slideStageRef, totalSlides, setActiveSlide, currentSlideIndex, options = {}) {
6773
6773
  const { scale = 2, onProgress } = options;
@@ -6815,8 +6815,8 @@ async function exportAllSlidesAsNotesPdf(slideStageRef, totalSlides, setActiveSl
6815
6815
  if (pages.length === 0) {
6816
6816
  throw new Error(chunkMVKRI3CZ_js.translationsEn["pptx.export.errorNoSlidesNotesPdf"]);
6817
6817
  }
6818
- const pdfDataUrl = chunkD4LINQVA_js.buildNotesPdf(pages);
6819
- chunkIJY5WNZK_js.downloadDataUrl(pdfDataUrl, filename);
6818
+ const pdfDataUrl = chunkV5PW4QCE_js.buildNotesPdf(pages);
6819
+ chunkGUGHIQ4P_js.downloadDataUrl(pdfDataUrl, filename);
6820
6820
  }
6821
6821
 
6822
6822
  // src/viewer/utils/export-video.ts
@@ -6860,7 +6860,7 @@ async function exportAllSlidesAsVideo(slideStageRef, totalSlides, setActiveSlide
6860
6860
  const fps = 30;
6861
6861
  const stream = recordingCanvas.captureStream(fps);
6862
6862
  const recorder = new MediaRecorder(stream, {
6863
- mimeType: chunkIJY5WNZK_js.pickSupportedMimeType([...chunkIJY5WNZK_js.WEBM_MIME_CANDIDATES]),
6863
+ mimeType: chunkGUGHIQ4P_js.pickSupportedMimeType([...chunkGUGHIQ4P_js.WEBM_MIME_CANDIDATES]),
6864
6864
  videoBitsPerSecond: 5e6
6865
6865
  });
6866
6866
  const chunks = [];
@@ -6883,8 +6883,8 @@ async function exportAllSlidesAsVideo(slideStageRef, totalSlides, setActiveSlide
6883
6883
  const duration = slideTimingsMs?.[i] ?? slideDurationMs;
6884
6884
  ctx.clearRect(0, 0, recordingCanvas.width, recordingCanvas.height);
6885
6885
  ctx.drawImage(slideCanvases[i], 0, 0);
6886
- const frameInterval = chunkIJY5WNZK_js.fpsToFrameIntervalMs(fps);
6887
- const framesNeeded = chunkIJY5WNZK_js.segmentFrameCount(duration, fps);
6886
+ const frameInterval = chunkGUGHIQ4P_js.fpsToFrameIntervalMs(fps);
6887
+ const framesNeeded = chunkGUGHIQ4P_js.segmentFrameCount(duration, fps);
6888
6888
  for (let f = 0; f < framesNeeded; f++) {
6889
6889
  if (signal?.aborted) {
6890
6890
  recorder.stop();
@@ -6933,7 +6933,7 @@ async function exportAllSlidesAsGif(slideStageRef, totalSlides, setActiveSlide,
6933
6933
  if (frames.length === 0) {
6934
6934
  throw new Error(chunkMVKRI3CZ_js.translationsEn["pptx.export.errorNoSlidesGif"]);
6935
6935
  }
6936
- const gifBytes = chunkIJY5WNZK_js.encodeGif(frames, Math.round(slideDurationMs / 10));
6936
+ const gifBytes = chunkGUGHIQ4P_js.encodeGif(frames, Math.round(slideDurationMs / 10));
6937
6937
  onProgress?.(totalSlides, totalSlides);
6938
6938
  const buf = new ArrayBuffer(gifBytes.length);
6939
6939
  new Uint8Array(buf).set(gifBytes);
@@ -6987,7 +6987,7 @@ function exportAllSlidesToSvg(data, options = {}) {
6987
6987
  continue;
6988
6988
  }
6989
6989
  onProgress?.(processedCount, data.slides.length);
6990
- let svg = chunkIJY5WNZK_js.SvgExporter.exportSlide(slide, data.width, data.height, svgOptions);
6990
+ let svg = chunkGUGHIQ4P_js.SvgExporter.exportSlide(slide, data.width, data.height, svgOptions);
6991
6991
  if (embedFonts && fontFaces?.length) {
6992
6992
  svg = injectFontFaces(svg, fontFaces);
6993
6993
  }
@@ -7045,13 +7045,13 @@ function useExportSaveAs(input) {
7045
7045
  setExportProgress(10);
7046
7046
  setExportStatusMessage("Adding presentation...");
7047
7047
  const pptxData = await serializeSlides();
7048
- const pptxFilename = chunkIJY5WNZK_js.savedPresentationFileName(filePath);
7048
+ const pptxFilename = chunkGUGHIQ4P_js.savedPresentationFileName(filePath);
7049
7049
  if (pptxData) {
7050
7050
  pkgFolder.file(pptxFilename, pptxData);
7051
7051
  }
7052
7052
  setExportProgress(70);
7053
7053
  setExportStatusMessage("Writing README...");
7054
- const readme = chunkIJY5WNZK_js.generatePackageReadme(pptxFilename);
7054
+ const readme = chunkGUGHIQ4P_js.generatePackageReadme(pptxFilename);
7055
7055
  pkgFolder.file("README.txt", readme);
7056
7056
  if (abortCtrl.signal.aborted) {
7057
7057
  throw new DOMException("Export cancelled", "AbortError");
@@ -7061,7 +7061,7 @@ function useExportSaveAs(input) {
7061
7061
  const zipBlob = await zip.generateAsync({ type: "blob" });
7062
7062
  setExportProgress(95);
7063
7063
  setExportStatusMessage("Downloading...");
7064
- chunkIJY5WNZK_js.downloadBlob(zipBlob, `${chunkIJY5WNZK_js.presentationBaseName(pptxFilename)}-package.zip`);
7064
+ chunkGUGHIQ4P_js.downloadBlob(zipBlob, `${chunkGUGHIQ4P_js.presentationBaseName(pptxFilename)}-package.zip`);
7065
7065
  setExportProgress(100);
7066
7066
  } catch (err) {
7067
7067
  if (err.name !== "AbortError") {
@@ -7077,13 +7077,13 @@ function useExportSaveAs(input) {
7077
7077
  if (!handler) {
7078
7078
  return;
7079
7079
  }
7080
- const downloadName = chunkIJY5WNZK_js.savedPresentationFileName(filePath, format);
7080
+ const downloadName = chunkGUGHIQ4P_js.savedPresentationFileName(filePath, format);
7081
7081
  try {
7082
7082
  const data = await buildSaveAsData(handler, format);
7083
7083
  const blob = new Blob([data], {
7084
7084
  type: "application/vnd.openxmlformats-officedocument.presentationml.presentation"
7085
7085
  });
7086
- chunkIJY5WNZK_js.downloadBlob(blob, downloadName);
7086
+ chunkGUGHIQ4P_js.downloadBlob(blob, downloadName);
7087
7087
  } catch (err) {
7088
7088
  console.error(`[PowerPointViewer] Save as .${format} failed:`, err);
7089
7089
  }
@@ -7096,18 +7096,18 @@ function useExportSaveAs(input) {
7096
7096
  const pptxGuides = guides.map((g) => ({
7097
7097
  id: g.id,
7098
7098
  orientation: g.axis === "h" ? "horz" : "vert",
7099
- positionEmu: chunkIJY5WNZK_js.guidePxToEmu(g.position)
7099
+ positionEmu: chunkGUGHIQ4P_js.guidePxToEmu(g.position)
7100
7100
  }));
7101
7101
  return {
7102
7102
  ...slide,
7103
7103
  guides: pptxGuides.length > 0 ? pptxGuides : void 0
7104
7104
  };
7105
7105
  });
7106
- const slidesToSave = chunkIJY5WNZK_js.buildSaveSlides(slidesWithGuides, templateElementsBySlideId);
7106
+ const slidesToSave = chunkGUGHIQ4P_js.buildSaveSlides(slidesWithGuides, templateElementsBySlideId);
7107
7107
  const saveOptions = {
7108
7108
  // Save As shares Save's slide-size decision; leaving it out here is how
7109
7109
  // a preset picked in the inspector reached one save path and not the other.
7110
- slideSize: chunkIJY5WNZK_js.resolveSlideSizeSelection({ current: slideSizeEmu, canvas: canvasSize }).size,
7110
+ slideSize: chunkGUGHIQ4P_js.resolveSlideSizeSelection({ current: slideSizeEmu, canvas: canvasSize }).size,
7111
7111
  headerFooter,
7112
7112
  presentationProperties,
7113
7113
  customShows: customShows.length > 0 ? customShows : void 0,
@@ -7121,13 +7121,13 @@ function useExportSaveAs(input) {
7121
7121
  handoutMaster,
7122
7122
  outputFormat: format
7123
7123
  };
7124
- return chunkIJY5WNZK_js.saveDeckWithPassword(handler, slidesToSave, saveOptions, password);
7124
+ return chunkGUGHIQ4P_js.saveDeckWithPassword(handler, slidesToSave, saveOptions, password);
7125
7125
  };
7126
7126
  const handleExportJson = () => {
7127
7127
  const sourceName = filePath ? filePath.replace(/\\/gu, "/").split("/").pop() : void 0;
7128
- const slideSize = chunkIJY5WNZK_js.resolveSlideSizeSelection({ current: slideSizeEmu, canvas: canvasSize }).size;
7128
+ const slideSize = chunkGUGHIQ4P_js.resolveSlideSizeSelection({ current: slideSizeEmu, canvas: canvasSize }).size;
7129
7129
  const data = {
7130
- slides: chunkIJY5WNZK_js.buildSaveSlides(slides, templateElementsBySlideId),
7130
+ slides: chunkGUGHIQ4P_js.buildSaveSlides(slides, templateElementsBySlideId),
7131
7131
  width: canvasSize.width,
7132
7132
  height: canvasSize.height,
7133
7133
  widthEmu: slideSize.widthEmu,
@@ -7146,7 +7146,7 @@ function useExportSaveAs(input) {
7146
7146
  handoutMaster
7147
7147
  };
7148
7148
  try {
7149
- chunkIJY5WNZK_js.exportDeckJson(data, sourceName);
7149
+ chunkGUGHIQ4P_js.exportDeckJson(data, sourceName);
7150
7150
  } catch (err) {
7151
7151
  console.error("[PowerPointViewer] JSON export failed:", err);
7152
7152
  }
@@ -7186,7 +7186,7 @@ function safeConfirm(message) {
7186
7186
  }
7187
7187
  }
7188
7188
  function downloadBlob2(blob, filename) {
7189
- chunkIJY5WNZK_js.downloadBlob(blob, chunkIJY5WNZK_js.sanitizeDownloadFilename(filename));
7189
+ chunkGUGHIQ4P_js.downloadBlob(blob, chunkGUGHIQ4P_js.sanitizeDownloadFilename(filename));
7190
7190
  }
7191
7191
 
7192
7192
  // src/viewer/hooks/useExportHandlers.ts
@@ -7296,21 +7296,21 @@ function useExportHandlers(input) {
7296
7296
  {
7297
7297
  scale: 2,
7298
7298
  onProgress: (current, total) => {
7299
- setExportProgress(chunkIJY5WNZK_js.slideProgressPercent(current, total));
7300
- setExportStatusMessage(chunkIJY5WNZK_js.slideStatusLabel("Rendering", current, total));
7299
+ setExportProgress(chunkGUGHIQ4P_js.slideProgressPercent(current, total));
7300
+ setExportStatusMessage(chunkGUGHIQ4P_js.slideStatusLabel("Rendering", current, total));
7301
7301
  },
7302
7302
  signal: abortCtrl.signal
7303
7303
  }
7304
7304
  );
7305
- setExportProgress(chunkIJY5WNZK_js.EXPORT_ASSEMBLING_PERCENT);
7305
+ setExportProgress(chunkGUGHIQ4P_js.EXPORT_ASSEMBLING_PERCENT);
7306
7306
  setExportStatusMessage("Building PDF...");
7307
7307
  await new Promise((r) => {
7308
7308
  setTimeout(r, 100);
7309
7309
  });
7310
- setExportProgress(chunkIJY5WNZK_js.EXPORT_DONE_PERCENT);
7310
+ setExportProgress(chunkGUGHIQ4P_js.EXPORT_DONE_PERCENT);
7311
7311
  setExportStatusMessage("Done!");
7312
7312
  } catch (err) {
7313
- if (!chunkIJY5WNZK_js.isExportAbortError(err)) {
7313
+ if (!chunkGUGHIQ4P_js.isExportAbortError(err)) {
7314
7314
  console.error("[PowerPointViewer] PDF export failed:", err);
7315
7315
  }
7316
7316
  } finally {
@@ -7340,21 +7340,21 @@ function useExportHandlers(input) {
7340
7340
  {
7341
7341
  scale: 2,
7342
7342
  onProgress: (current, total) => {
7343
- setExportProgress(chunkIJY5WNZK_js.slideProgressPercent(current, total));
7344
- setExportStatusMessage(chunkIJY5WNZK_js.slideStatusLabel("Rendering", current, total));
7343
+ setExportProgress(chunkGUGHIQ4P_js.slideProgressPercent(current, total));
7344
+ setExportStatusMessage(chunkGUGHIQ4P_js.slideStatusLabel("Rendering", current, total));
7345
7345
  },
7346
7346
  signal: abortCtrl.signal
7347
7347
  }
7348
7348
  );
7349
- setExportProgress(chunkIJY5WNZK_js.EXPORT_ASSEMBLING_PERCENT);
7349
+ setExportProgress(chunkGUGHIQ4P_js.EXPORT_ASSEMBLING_PERCENT);
7350
7350
  setExportStatusMessage("Building PDF...");
7351
7351
  await new Promise((r) => {
7352
7352
  setTimeout(r, 100);
7353
7353
  });
7354
- setExportProgress(chunkIJY5WNZK_js.EXPORT_DONE_PERCENT);
7354
+ setExportProgress(chunkGUGHIQ4P_js.EXPORT_DONE_PERCENT);
7355
7355
  setExportStatusMessage("Done!");
7356
7356
  } catch (err) {
7357
- if (!chunkIJY5WNZK_js.isExportAbortError(err)) {
7357
+ if (!chunkGUGHIQ4P_js.isExportAbortError(err)) {
7358
7358
  console.error("[PowerPointViewer] Notes PDF export failed:", err);
7359
7359
  }
7360
7360
  } finally {
@@ -7395,22 +7395,22 @@ function useExportHandlers(input) {
7395
7395
  scale: 1,
7396
7396
  slideDurationMs: 3e3,
7397
7397
  onProgress: (current, total) => {
7398
- setExportProgress(chunkIJY5WNZK_js.slideProgressPercent(current, total, 45));
7399
- setExportStatusMessage(chunkIJY5WNZK_js.slideStatusLabel("Capturing", current, total));
7398
+ setExportProgress(chunkGUGHIQ4P_js.slideProgressPercent(current, total, 45));
7399
+ setExportStatusMessage(chunkGUGHIQ4P_js.slideStatusLabel("Capturing", current, total));
7400
7400
  },
7401
7401
  onRecordProgress: (current, total) => {
7402
- setExportProgress(chunkIJY5WNZK_js.recordProgressPercent(current, total));
7403
- setExportStatusMessage(chunkIJY5WNZK_js.slideStatusLabel("Recording", current, total));
7402
+ setExportProgress(chunkGUGHIQ4P_js.recordProgressPercent(current, total));
7403
+ setExportStatusMessage(chunkGUGHIQ4P_js.slideStatusLabel("Recording", current, total));
7404
7404
  },
7405
7405
  signal: abortCtrl.signal
7406
7406
  }
7407
7407
  );
7408
- setExportProgress(chunkIJY5WNZK_js.EXPORT_ASSEMBLING_PERCENT);
7408
+ setExportProgress(chunkGUGHIQ4P_js.EXPORT_ASSEMBLING_PERCENT);
7409
7409
  setExportStatusMessage("Saving file...");
7410
7410
  downloadBlob2(blob, "presentation.webm");
7411
- setExportProgress(chunkIJY5WNZK_js.EXPORT_DONE_PERCENT);
7411
+ setExportProgress(chunkGUGHIQ4P_js.EXPORT_DONE_PERCENT);
7412
7412
  } catch (err) {
7413
- if (!chunkIJY5WNZK_js.isExportAbortError(err)) {
7413
+ if (!chunkGUGHIQ4P_js.isExportAbortError(err)) {
7414
7414
  console.error("[PowerPointViewer] Video export failed:", err);
7415
7415
  }
7416
7416
  } finally {
@@ -7438,18 +7438,18 @@ function useExportHandlers(input) {
7438
7438
  scale: 0.5,
7439
7439
  slideDurationMs: 2e3,
7440
7440
  onProgress: (current, total) => {
7441
- setExportProgress(chunkIJY5WNZK_js.slideProgressPercent(current, total));
7442
- setExportStatusMessage(chunkIJY5WNZK_js.slideStatusLabel("Encoding", current, total));
7441
+ setExportProgress(chunkGUGHIQ4P_js.slideProgressPercent(current, total));
7442
+ setExportStatusMessage(chunkGUGHIQ4P_js.slideStatusLabel("Encoding", current, total));
7443
7443
  },
7444
7444
  signal: abortCtrl.signal
7445
7445
  }
7446
7446
  );
7447
- setExportProgress(chunkIJY5WNZK_js.EXPORT_ASSEMBLING_PERCENT);
7447
+ setExportProgress(chunkGUGHIQ4P_js.EXPORT_ASSEMBLING_PERCENT);
7448
7448
  setExportStatusMessage("Saving file...");
7449
7449
  downloadBlob2(blob, "presentation.gif");
7450
- setExportProgress(chunkIJY5WNZK_js.EXPORT_DONE_PERCENT);
7450
+ setExportProgress(chunkGUGHIQ4P_js.EXPORT_DONE_PERCENT);
7451
7451
  } catch (err) {
7452
- if (!chunkIJY5WNZK_js.isExportAbortError(err)) {
7452
+ if (!chunkGUGHIQ4P_js.isExportAbortError(err)) {
7453
7453
  console.error("[PowerPointViewer] GIF export failed:", err);
7454
7454
  }
7455
7455
  } finally {
@@ -7490,7 +7490,7 @@ function openPrintWindow(title, bodyHtml, orientation, colorFilter, frameSlides)
7490
7490
  }
7491
7491
  printWindow.document.open();
7492
7492
  printWindow.document.write(
7493
- chunkIJY5WNZK_js.buildPrintHtmlDocument({ title, bodyHtml, orientation, colorFilter, frameSlides })
7493
+ chunkGUGHIQ4P_js.buildPrintHtmlDocument({ title, bodyHtml, orientation, colorFilter, frameSlides })
7494
7494
  );
7495
7495
  printWindow.document.close();
7496
7496
  printWindow.focus();
@@ -7551,7 +7551,7 @@ function usePrintHandlers(input) {
7551
7551
  if (svgs.length === 0) {
7552
7552
  return;
7553
7553
  }
7554
- const printDoc = chunkIJY5WNZK_js.buildPrintDocument(svgs, pptxData.width, pptxData.height, {
7554
+ const printDoc = chunkGUGHIQ4P_js.buildPrintDocument(svgs, pptxData.width, pptxData.height, {
7555
7555
  title: "Slides (Vector)",
7556
7556
  orientation: settings.orientation,
7557
7557
  colorFilter
@@ -7587,7 +7587,7 @@ function usePrintHandlers(input) {
7587
7587
  if (settings.printWhat === "outline") {
7588
7588
  openPrintWindow(
7589
7589
  "Outline",
7590
- `<div class="outline-page">${chunkIJY5WNZK_js.buildOutlineHtml(slideIndices, slides)}</div>`,
7590
+ `<div class="outline-page">${chunkGUGHIQ4P_js.buildOutlineHtml(slideIndices, slides)}</div>`,
7591
7591
  settings.orientation,
7592
7592
  colorFilter,
7593
7593
  settings.frameSlides
@@ -7612,7 +7612,7 @@ function usePrintHandlers(input) {
7612
7612
  if (settings.printWhat === "slides") {
7613
7613
  openPrintWindow(
7614
7614
  "Slides",
7615
- chunkIJY5WNZK_js.buildSlidesHtml(slideImages, slideIndices),
7615
+ chunkGUGHIQ4P_js.buildSlidesHtml(slideImages, slideIndices),
7616
7616
  settings.orientation,
7617
7617
  colorFilter,
7618
7618
  settings.frameSlides
@@ -7622,7 +7622,7 @@ function usePrintHandlers(input) {
7622
7622
  if (settings.printWhat === "notes") {
7623
7623
  openPrintWindow(
7624
7624
  "Notes Pages",
7625
- chunkIJY5WNZK_js.buildNotesHtml(slideImages, slideIndices, slides),
7625
+ chunkGUGHIQ4P_js.buildNotesHtml(slideImages, slideIndices, slides),
7626
7626
  "portrait",
7627
7627
  colorFilter,
7628
7628
  settings.frameSlides
@@ -7633,7 +7633,7 @@ function usePrintHandlers(input) {
7633
7633
  const spp = settings.slidesPerPage;
7634
7634
  openPrintWindow(
7635
7635
  `Handout ${spp} per page`,
7636
- chunkIJY5WNZK_js.buildHandoutsHtml(slideImages, slideIndices, spp),
7636
+ chunkGUGHIQ4P_js.buildHandoutsHtml(slideImages, slideIndices, spp),
7637
7637
  "portrait",
7638
7638
  colorFilter,
7639
7639
  settings.frameSlides
@@ -7697,8 +7697,8 @@ function useThemeHandlers(input) {
7697
7697
  return;
7698
7698
  }
7699
7699
  await handler.updateThemeColorScheme(colorScheme);
7700
- const previousMap = theme?.colorScheme ? chunkIJY5WNZK_js.buildThemeColorMap(theme.colorScheme) : {};
7701
- setSlides((prev) => chunkIJY5WNZK_js.reResolveSlideColors(prev, previousMap, colorScheme));
7700
+ const previousMap = theme?.colorScheme ? chunkGUGHIQ4P_js.buildThemeColorMap(theme.colorScheme) : {};
7701
+ setSlides((prev) => chunkGUGHIQ4P_js.reResolveSlideColors(prev, previousMap, colorScheme));
7702
7702
  setTheme((prev) => prev ? { ...prev, colorScheme } : { colorScheme });
7703
7703
  bumpHistory();
7704
7704
  history.markDirty();
@@ -7803,7 +7803,7 @@ function useThemeSwitching(input) {
7803
7803
  }
7804
7804
  try {
7805
7805
  await handler.applyTheme(preset.colorScheme, preset.fontScheme, preset.name);
7806
- const newData = chunkIJY5WNZK_js.applyThemeToData(data, preset.colorScheme, preset.fontScheme, preset.name);
7806
+ const newData = chunkGUGHIQ4P_js.applyThemeToData(data, preset.colorScheme, preset.fontScheme, preset.name);
7807
7807
  onDataChange(newData);
7808
7808
  onThemeChanged?.(preset);
7809
7809
  } catch (error) {
@@ -7820,7 +7820,7 @@ function useThemeSwitching(input) {
7820
7820
  }
7821
7821
  try {
7822
7822
  await handler.applyTheme(colorScheme, fontScheme ?? {}, themeName);
7823
- const newData = chunkIJY5WNZK_js.applyThemeToData(data, colorScheme, fontScheme, themeName);
7823
+ const newData = chunkGUGHIQ4P_js.applyThemeToData(data, colorScheme, fontScheme, themeName);
7824
7824
  onDataChange(newData);
7825
7825
  } catch (error) {
7826
7826
  console.error("Failed to switch to custom theme:", error);
@@ -7832,12 +7832,12 @@ function useThemeSwitching(input) {
7832
7832
  if (!data?.theme?.colorScheme) {
7833
7833
  return void 0;
7834
7834
  }
7835
- return chunkIJY5WNZK_js.THEME_PRESETS.find(
7836
- (p) => chunkIJY5WNZK_js.themeColorSchemesEqual(data.theme?.colorScheme, p.colorScheme)
7835
+ return chunkGUGHIQ4P_js.THEME_PRESETS.find(
7836
+ (p) => chunkGUGHIQ4P_js.themeColorSchemesEqual(data.theme?.colorScheme, p.colorScheme)
7837
7837
  );
7838
7838
  }, [data?.theme?.colorScheme]);
7839
7839
  return {
7840
- presets: chunkIJY5WNZK_js.THEME_PRESETS,
7840
+ presets: chunkGUGHIQ4P_js.THEME_PRESETS,
7841
7841
  switchToPreset,
7842
7842
  switchToCustom,
7843
7843
  currentPreset
@@ -7912,7 +7912,7 @@ function usePropertyHandlers(input) {
7912
7912
  }
7913
7913
  try {
7914
7914
  const ab = await file.arrayBuffer();
7915
- const h = new chunkIJY5WNZK_js.PptxHandler();
7915
+ const h = new chunkGUGHIQ4P_js.PptxHandler();
7916
7916
  const other = await h.load(ab);
7917
7917
  if (!other) {
7918
7918
  return;
@@ -7922,7 +7922,7 @@ function usePropertyHandlers(input) {
7922
7922
  width: canvasSize.width,
7923
7923
  height: canvasSize.height
7924
7924
  };
7925
- setCompareResult(chunkIJY5WNZK_js.comparePresentation(cur, other));
7925
+ setCompareResult(chunkGUGHIQ4P_js.comparePresentation(cur, other));
7926
7926
  setIsComparePanelOpen(true);
7927
7927
  } catch (err) {
7928
7928
  console.warn("Compare failed:", err);
@@ -7939,7 +7939,7 @@ function usePropertyHandlers(input) {
7939
7939
  if (!diff || diff.status === "unchanged") {
7940
7940
  return;
7941
7941
  }
7942
- setSlides((prev) => chunkIJY5WNZK_js.applyAcceptSlide(prev, diff));
7942
+ setSlides((prev) => chunkGUGHIQ4P_js.applyAcceptSlide(prev, diff));
7943
7943
  setIsDirty(true);
7944
7944
  },
7945
7945
  [compareResult, setSlides, setIsDirty]
@@ -7950,10 +7950,10 @@ function usePropertyHandlers(input) {
7950
7950
  if (!compareResult) {
7951
7951
  return;
7952
7952
  }
7953
- setSlides((prev) => chunkIJY5WNZK_js.applyAcceptAllSlides(prev, compareResult));
7953
+ setSlides((prev) => chunkGUGHIQ4P_js.applyAcceptAllSlides(prev, compareResult));
7954
7954
  setIsDirty(true);
7955
7955
  }, [compareResult, setSlides, setIsDirty]);
7956
- const usedFontFamilies = react.useMemo(() => chunkIJY5WNZK_js.collectUsedFonts(slides), [slides]);
7956
+ const usedFontFamilies = react.useMemo(() => chunkGUGHIQ4P_js.collectUsedFonts(slides), [slides]);
7957
7957
  return {
7958
7958
  handleUpdateNotes,
7959
7959
  handleUpdateSlide,
@@ -8072,7 +8072,7 @@ function useIsMobile(input) {
8072
8072
  const containerRef = input?.containerRef;
8073
8073
  const isTouchDevice = react.useSyncExternalStore(
8074
8074
  subscribeTouchCapability,
8075
- chunkIJY5WNZK_js.detectTouchDevice,
8075
+ chunkGUGHIQ4P_js.detectTouchDevice,
8076
8076
  () => false
8077
8077
  // server snapshot
8078
8078
  );
@@ -8088,7 +8088,7 @@ function useIsMobile(input) {
8088
8088
  }
8089
8089
  return containerRef?.current?.clientHeight ?? window.innerHeight;
8090
8090
  });
8091
- const [orientation, setOrientation] = react.useState(chunkIJY5WNZK_js.detectOrientation);
8091
+ const [orientation, setOrientation] = react.useState(chunkGUGHIQ4P_js.detectOrientation);
8092
8092
  const [isVirtualKeyboardOpen, setIsVirtualKeyboardOpen] = react.useState(false);
8093
8093
  const [initialViewportHeight] = react.useState(
8094
8094
  () => typeof window !== "undefined" ? window.innerHeight : 800
@@ -8132,7 +8132,7 @@ function useIsMobile(input) {
8132
8132
  return;
8133
8133
  }
8134
8134
  const handleOrientationChange = () => {
8135
- setOrientation(chunkIJY5WNZK_js.detectOrientation());
8135
+ setOrientation(chunkGUGHIQ4P_js.detectOrientation());
8136
8136
  };
8137
8137
  if (screen.orientation) {
8138
8138
  screen.orientation.addEventListener("change", handleOrientationChange);
@@ -8162,9 +8162,9 @@ function useIsMobile(input) {
8162
8162
  window.addEventListener("resize", handleResize);
8163
8163
  return () => window.removeEventListener("resize", handleResize);
8164
8164
  }, [isTouchDevice, initialViewportHeight]);
8165
- const isMobile = chunkIJY5WNZK_js.isMobileViewport(containerWidth, containerHeight, isTouchDevice);
8166
- const isTablet = !isMobile && containerWidth >= chunkIJY5WNZK_js.MOBILE_BREAKPOINT && containerWidth < chunkIJY5WNZK_js.TABLET_BREAKPOINT;
8167
- const isDesktop = !isMobile && containerWidth >= chunkIJY5WNZK_js.TABLET_BREAKPOINT;
8165
+ const isMobile = chunkGUGHIQ4P_js.isMobileViewport(containerWidth, containerHeight, isTouchDevice);
8166
+ const isTablet = !isMobile && containerWidth >= chunkGUGHIQ4P_js.MOBILE_BREAKPOINT && containerWidth < chunkGUGHIQ4P_js.TABLET_BREAKPOINT;
8167
+ const isDesktop = !isMobile && containerWidth >= chunkGUGHIQ4P_js.TABLET_BREAKPOINT;
8168
8168
  return {
8169
8169
  isMobile,
8170
8170
  isTablet,
@@ -8226,7 +8226,7 @@ function useViewerDialogs(input) {
8226
8226
  );
8227
8227
  const embeddedFontKey = (embeddedFontFamilies ?? []).join("\0");
8228
8228
  const fontEmbedding = react.useMemo(
8229
- () => chunkIJY5WNZK_js.describeFontEmbedding(embeddedFontKey ? embeddedFontKey.split("\0") : []),
8229
+ () => chunkGUGHIQ4P_js.describeFontEmbedding(embeddedFontKey ? embeddedFontKey.split("\0") : []),
8230
8230
  [embeddedFontKey]
8231
8231
  );
8232
8232
  const [embedFontsEnabled, setEmbedFontsEnabled] = react.useState(fontEmbedding.initialEnabled);
@@ -8234,11 +8234,11 @@ function useViewerDialogs(input) {
8234
8234
  setEmbedFontsEnabled(fontEmbedding.initialEnabled);
8235
8235
  }, [fontEmbedding]);
8236
8236
  const [isNarrowViewport, setIsNarrowViewport] = react.useState(
8237
- () => typeof window !== "undefined" ? chunkIJY5WNZK_js.isMobileViewport(window.innerWidth, window.innerHeight, viewportIsTouch()) : false
8237
+ () => typeof window !== "undefined" ? chunkGUGHIQ4P_js.isMobileViewport(window.innerWidth, window.innerHeight, viewportIsTouch()) : false
8238
8238
  );
8239
8239
  react.useEffect(() => {
8240
8240
  const handleWindow = () => setIsNarrowViewport(
8241
- chunkIJY5WNZK_js.isMobileViewport(window.innerWidth, window.innerHeight, viewportIsTouch())
8241
+ chunkGUGHIQ4P_js.isMobileViewport(window.innerWidth, window.innerHeight, viewportIsTouch())
8242
8242
  );
8243
8243
  let observer = null;
8244
8244
  let raf = 0;
@@ -8252,12 +8252,12 @@ function useViewerDialogs(input) {
8252
8252
  const entry = entries[0];
8253
8253
  if (entry) {
8254
8254
  setIsNarrowViewport(
8255
- chunkIJY5WNZK_js.isMobileViewport(entry.contentRect.width, entry.contentRect.height, viewportIsTouch())
8255
+ chunkGUGHIQ4P_js.isMobileViewport(entry.contentRect.width, entry.contentRect.height, viewportIsTouch())
8256
8256
  );
8257
8257
  }
8258
8258
  });
8259
8259
  observer.observe(el);
8260
- setIsNarrowViewport(chunkIJY5WNZK_js.isMobileViewport(el.clientWidth, el.clientHeight, viewportIsTouch()));
8260
+ setIsNarrowViewport(chunkGUGHIQ4P_js.isMobileViewport(el.clientWidth, el.clientHeight, viewportIsTouch()));
8261
8261
  };
8262
8262
  attach();
8263
8263
  window.addEventListener("resize", handleWindow);
@@ -8416,20 +8416,20 @@ function useViewerDialogs(input) {
8416
8416
  }
8417
8417
  function computeGridSpacingPx(presentationGridSpacing) {
8418
8418
  if (presentationGridSpacing) {
8419
- const px = Math.round(presentationGridSpacing.cx / chunkD4LINQVA_js.EMU_PER_PX);
8419
+ const px = Math.round(presentationGridSpacing.cx / chunkV5PW4QCE_js.EMU_PER_PX);
8420
8420
  if (px > 0) {
8421
8421
  return px;
8422
8422
  }
8423
8423
  }
8424
- return chunkD4LINQVA_js.GRID_SIZE;
8424
+ return chunkV5PW4QCE_js.GRID_SIZE;
8425
8425
  }
8426
8426
  function computeVisibleSlideIndexes(slides, activeCustomShowId, customShows) {
8427
8427
  const activeShow = activeCustomShowId ? customShows.find((show) => show.id === activeCustomShowId) : void 0;
8428
- return chunkIJY5WNZK_js.resolveShowSlideIndexes(slides, activeShow);
8428
+ return chunkGUGHIQ4P_js.resolveShowSlideIndexes(slides, activeShow);
8429
8429
  }
8430
8430
  function computeSlideSectionGroups(slides, sections) {
8431
- return chunkIJY5WNZK_js.groupSlidesBySection(sections, slides).map((group) => ({
8432
- id: group.section?.id ?? (sections.length > 0 ? chunkD4LINQVA_js.UNGROUPED_SECTION_ID : chunkD4LINQVA_js.DEFAULT_SECTION_GROUP_ID),
8431
+ return chunkGUGHIQ4P_js.groupSlidesBySection(sections, slides).map((group) => ({
8432
+ id: group.section?.id ?? (sections.length > 0 ? chunkV5PW4QCE_js.UNGROUPED_SECTION_ID : chunkV5PW4QCE_js.DEFAULT_SECTION_GROUP_ID),
8433
8433
  label: group.section?.name ?? (sections.length > 0 ? "Ungrouped Slides" : "Slides"),
8434
8434
  slideIndexes: group.slideIndexes,
8435
8435
  ...group.section?.color !== void 0 ? { color: group.section.color } : {},
@@ -8441,7 +8441,7 @@ function computeMasterPseudoSlide(mode, activeLayout, activeMaster) {
8441
8441
  return void 0;
8442
8442
  }
8443
8443
  const document2 = activeLayout ? { slideMasters: [{ ...activeMaster, layouts: [activeLayout] }] } : { slideMasters: [activeMaster] };
8444
- return chunkIJY5WNZK_js.masterViewPseudoSlide(document2, {
8444
+ return chunkGUGHIQ4P_js.masterViewPseudoSlide(document2, {
8445
8445
  tab: "slides",
8446
8446
  masterIndex: 0,
8447
8447
  layoutIndex: activeLayout ? 0 : null
@@ -8469,10 +8469,10 @@ function useDerivedSlideState(input) {
8469
8469
  );
8470
8470
  const slideSectionGroups = react.useMemo(
8471
8471
  () => computeSlideSectionGroups(slides, sections).map((group) => {
8472
- if (group.id === chunkD4LINQVA_js.UNGROUPED_SECTION_ID && group.label === "Ungrouped Slides") {
8472
+ if (group.id === chunkV5PW4QCE_js.UNGROUPED_SECTION_ID && group.label === "Ungrouped Slides") {
8473
8473
  return { ...group, label: t("pptx.slides.ungroupedSlides") };
8474
8474
  }
8475
- if (group.id === chunkD4LINQVA_js.DEFAULT_SECTION_GROUP_ID && group.label === "Slides") {
8475
+ if (group.id === chunkV5PW4QCE_js.DEFAULT_SECTION_GROUP_ID && group.label === "Slides") {
8476
8476
  return { ...group, label: t("pptx.sections.slides") };
8477
8477
  }
8478
8478
  return group;
@@ -8572,13 +8572,13 @@ function useAnnotationHandlers(input) {
8572
8572
  }, [annotations, setMode, setSlides, history]);
8573
8573
  const handleSetMode = react.useCallback(
8574
8574
  (nextMode) => {
8575
- if (mode === "present" && nextMode !== "present" && !chunkIJY5WNZK_js.mayLeaveSlideShow()) {
8575
+ if (mode === "present" && nextMode !== "present" && !chunkGUGHIQ4P_js.mayLeaveSlideShow()) {
8576
8576
  return;
8577
8577
  }
8578
8578
  if (nextMode === "present") {
8579
8579
  presentation.enterPresentMode();
8580
8580
  } else if (mode === "present" && annotations.hasAnyAnnotations) {
8581
- chunkIJY5WNZK_js.stopAllPersistentAudio();
8581
+ chunkGUGHIQ4P_js.stopAllPersistentAudio();
8582
8582
  pendingModeAfterAnnotationsRef.current = nextMode;
8583
8583
  if (promptKeepInkAnnotations) {
8584
8584
  setShowKeepAnnotationsDialog(true);
@@ -8587,7 +8587,7 @@ function useAnnotationHandlers(input) {
8587
8587
  }
8588
8588
  } else {
8589
8589
  if (mode === "present") {
8590
- chunkIJY5WNZK_js.stopAllPersistentAudio();
8590
+ chunkGUGHIQ4P_js.stopAllPersistentAudio();
8591
8591
  }
8592
8592
  setMode(nextMode);
8593
8593
  }
@@ -8658,13 +8658,13 @@ function useSerialize(input) {
8658
8658
  let processedSlide = slide;
8659
8659
  if (pendingEditId) {
8660
8660
  const updatedElements = slide.elements.map((el) => {
8661
- if (el.id !== pendingEditId || !chunkIJY5WNZK_js.hasTextProperties(el)) {
8661
+ if (el.id !== pendingEditId || !chunkGUGHIQ4P_js.hasTextProperties(el)) {
8662
8662
  return el;
8663
8663
  }
8664
8664
  return {
8665
8665
  ...el,
8666
8666
  text: pendingEditText,
8667
- textSegments: chunkIJY5WNZK_js.remapTextToSegments(pendingEditText, el.textSegments, el.textStyle)
8667
+ textSegments: chunkGUGHIQ4P_js.remapTextToSegments(pendingEditText, el.textSegments, el.textStyle)
8668
8668
  };
8669
8669
  });
8670
8670
  if (updatedElements.some((el, i) => el !== slide.elements[i])) {
@@ -8677,19 +8677,19 @@ function useSerialize(input) {
8677
8677
  const pptxGuides = guides.map((g) => ({
8678
8678
  id: g.id,
8679
8679
  orientation: g.axis === "h" ? "horz" : "vert",
8680
- positionEmu: chunkIJY5WNZK_js.guidePxToEmu(g.position)
8680
+ positionEmu: chunkGUGHIQ4P_js.guidePxToEmu(g.position)
8681
8681
  }));
8682
8682
  return {
8683
8683
  ...processedSlide,
8684
8684
  guides: pptxGuides.length > 0 ? pptxGuides : void 0
8685
8685
  };
8686
8686
  });
8687
- const slidesToSave = chunkIJY5WNZK_js.buildSaveSlides(slidesWithGuides, templateElementsBySlideId);
8687
+ const slidesToSave = chunkGUGHIQ4P_js.buildSaveSlides(slidesWithGuides, templateElementsBySlideId);
8688
8688
  const saveOptions = {
8689
8689
  // Without this the Slide Size card edited a viewer-only pixel value and
8690
8690
  // the saved `p:sldSz` never moved: passing `slideSize` is the only way a
8691
8691
  // slide-size edit reaches the file.
8692
- slideSize: chunkIJY5WNZK_js.resolveSlideSizeSelection({ current: slideSizeEmu, canvas: canvasSize }).size,
8692
+ slideSize: chunkGUGHIQ4P_js.resolveSlideSizeSelection({ current: slideSizeEmu, canvas: canvasSize }).size,
8693
8693
  headerFooter,
8694
8694
  presentationProperties,
8695
8695
  customShows: customShows.length > 0 ? customShows : void 0,
@@ -8701,9 +8701,9 @@ function useSerialize(input) {
8701
8701
  slideMasters,
8702
8702
  notesMaster,
8703
8703
  handoutMaster,
8704
- ...chunkIJY5WNZK_js.embeddedFontSaveOptions(embedFonts)
8704
+ ...chunkGUGHIQ4P_js.embeddedFontSaveOptions(embedFonts)
8705
8705
  };
8706
- return chunkIJY5WNZK_js.saveDeckWithPassword(handler, slidesToSave, saveOptions, { password, purpose });
8706
+ return chunkGUGHIQ4P_js.saveDeckWithPassword(handler, slidesToSave, saveOptions, { password, purpose });
8707
8707
  }, [
8708
8708
  slides,
8709
8709
  templateElementsBySlideId,
@@ -8738,7 +8738,7 @@ function useRecoveryDetection(input) {
8738
8738
  const onRestore = input.onRestore;
8739
8739
  const openVersionHistory = input.openVersionHistory;
8740
8740
  react.useEffect(() => {
8741
- if (!chunkIJY5WNZK_js.shouldProbeAutosaveRecovery({
8741
+ if (!chunkGUGHIQ4P_js.shouldProbeAutosaveRecovery({
8742
8742
  alreadyChecked: recoveryCheckedRef.current,
8743
8743
  filePath,
8744
8744
  loading,
@@ -8750,7 +8750,7 @@ function useRecoveryDetection(input) {
8750
8750
  }
8751
8751
  recoveryCheckedRef.current = true;
8752
8752
  void (async () => {
8753
- const offer = await chunkIJY5WNZK_js.probeAutosaveRecovery(filePath);
8753
+ const offer = await chunkGUGHIQ4P_js.probeAutosaveRecovery(filePath);
8754
8754
  if (!offer) {
8755
8755
  return;
8756
8756
  }
@@ -8763,7 +8763,7 @@ function useRecoveryDetection(input) {
8763
8763
  const record = recordRef.current;
8764
8764
  setPrompt(null);
8765
8765
  if (record && onRestore) {
8766
- onRestore(chunkIJY5WNZK_js.acceptAutosaveRecovery(record));
8766
+ onRestore(chunkGUGHIQ4P_js.acceptAutosaveRecovery(record));
8767
8767
  }
8768
8768
  recordRef.current = null;
8769
8769
  }, [onRestore]);
@@ -8772,7 +8772,7 @@ function useRecoveryDetection(input) {
8772
8772
  setPrompt(null);
8773
8773
  recordRef.current = null;
8774
8774
  if (record) {
8775
- void chunkIJY5WNZK_js.discardAutosaveRecovery(record);
8775
+ void chunkGUGHIQ4P_js.discardAutosaveRecovery(record);
8776
8776
  }
8777
8777
  }, []);
8778
8778
  return { prompt, restore, discard };
@@ -8812,7 +8812,7 @@ function usePresentationSetup(input) {
8812
8812
  containerRef,
8813
8813
  content,
8814
8814
  onSetMode: (nextMode) => {
8815
- if (mode === "present" && nextMode !== "present" && !chunkIJY5WNZK_js.mayLeaveSlideShow()) {
8815
+ if (mode === "present" && nextMode !== "present" && !chunkGUGHIQ4P_js.mayLeaveSlideShow()) {
8816
8816
  return;
8817
8817
  }
8818
8818
  if (mode === "present" && nextMode !== "present" && annotations.hasAnyAnnotations && promptKeepInkAnnotations) {
@@ -8820,7 +8820,7 @@ function usePresentationSetup(input) {
8820
8820
  setShowKeepAnnotationsDialog(true);
8821
8821
  } else {
8822
8822
  if (mode === "present" && nextMode !== "present") {
8823
- chunkIJY5WNZK_js.stopAllPersistentAudio();
8823
+ chunkGUGHIQ4P_js.stopAllPersistentAudio();
8824
8824
  stopAnimationSound();
8825
8825
  }
8826
8826
  setMode(nextMode);
@@ -8875,10 +8875,10 @@ function usePresentationSetup(input) {
8875
8875
  onToggleToolbar: () => annotations.setToolbarVisible(!annotations.toolbarVisible),
8876
8876
  onToggleSubtitles,
8877
8877
  onSaveRehearsalTimings: (timings) => {
8878
- setSlides((prev) => chunkIJY5WNZK_js.applyRehearsalTimings(prev, timings));
8878
+ setSlides((prev) => chunkGUGHIQ4P_js.applyRehearsalTimings(prev, timings));
8879
8879
  history.markDirty();
8880
8880
  },
8881
- loopContinuously: chunkIJY5WNZK_js.shouldLoopContinuously(presentationProperties),
8881
+ loopContinuously: chunkGUGHIQ4P_js.shouldLoopContinuously(presentationProperties),
8882
8882
  showWithAnimation: presentationProperties.showWithAnimation,
8883
8883
  useTimings: presentationProperties.advanceMode !== "manual",
8884
8884
  endWithBlackSlide
@@ -9071,7 +9071,7 @@ function useEditorOperations(input) {
9071
9071
  const { formatPainterActive, setFormatPainterActive, elementLookup } = state;
9072
9072
  react.useEffect(() => {
9073
9073
  if (formatPainterActive && !prevFormatPainterRef.current && selectedElement) {
9074
- copiedFormatRef.current = chunkIJY5WNZK_js.copyFormatFromElement(selectedElement);
9074
+ copiedFormatRef.current = chunkGUGHIQ4P_js.copyFormatFromElement(selectedElement);
9075
9075
  } else if (!formatPainterActive) {
9076
9076
  copiedFormatRef.current = null;
9077
9077
  }
@@ -9097,12 +9097,12 @@ function useEditorOperations(input) {
9097
9097
  e.stopPropagation();
9098
9098
  const element = elementLookup.get(elementId);
9099
9099
  if (element) {
9100
- const updated = chunkIJY5WNZK_js.applyFormatToElement(element, copiedFormatRef.current);
9100
+ const updated = chunkGUGHIQ4P_js.applyFormatToElement(element, copiedFormatRef.current);
9101
9101
  const updates = {};
9102
- if (chunkIJY5WNZK_js.hasShapeProperties(updated)) {
9102
+ if (chunkGUGHIQ4P_js.hasShapeProperties(updated)) {
9103
9103
  updates.shapeStyle = updated.shapeStyle;
9104
9104
  }
9105
- if (chunkIJY5WNZK_js.hasTextProperties(updated)) {
9105
+ if (chunkGUGHIQ4P_js.hasTextProperties(updated)) {
9106
9106
  updates.textStyle = updated.textStyle;
9107
9107
  }
9108
9108
  ops.updateElementById(elementId, updates);
@@ -9256,7 +9256,7 @@ function collectReferencedFontFamilies(slides) {
9256
9256
  const families = /* @__PURE__ */ new Set();
9257
9257
  for (const slide of slides) {
9258
9258
  for (const el of slide.elements) {
9259
- if (chunkIJY5WNZK_js.hasTextProperties(el) && el.textSegments) {
9259
+ if (chunkGUGHIQ4P_js.hasTextProperties(el) && el.textSegments) {
9260
9260
  for (const seg of el.textSegments) {
9261
9261
  if (seg.style.fontFamily) {
9262
9262
  families.add(seg.style.fontFamily);
@@ -9503,7 +9503,7 @@ function useKeyboardShortcuts(input) {
9503
9503
  inputRef.current = input;
9504
9504
  const handleKeyDown = react.useCallback((e) => {
9505
9505
  const current = inputRef.current;
9506
- const { action, dx, dy } = chunkIJY5WNZK_js.mapEditorKey(e, {
9506
+ const { action, dx, dy } = chunkGUGHIQ4P_js.mapEditorKey(e, {
9507
9507
  canEdit: current.canEdit,
9508
9508
  // The Slide Master view is an editing surface, not a viewing one.
9509
9509
  // Gating on `mode !== 'edit'` alone made `mapEditorKey` return
@@ -9516,7 +9516,7 @@ function useKeyboardShortcuts(input) {
9516
9516
  hasSelection: current.hasSelection,
9517
9517
  isEditingText: Boolean(current.inlineEditingElementId || current.tableEditorState?.isEditing),
9518
9518
  isDrawing: current.activeTool !== "select",
9519
- isTextInputTarget: chunkIJY5WNZK_js.isEditorTextInputTarget(e.target)
9519
+ isTextInputTarget: chunkGUGHIQ4P_js.isEditorTextInputTarget(e.target)
9520
9520
  });
9521
9521
  if (action === null) {
9522
9522
  return;
@@ -9822,7 +9822,7 @@ function useViewerIntegration(input) {
9822
9822
  return zoom.scale;
9823
9823
  },
9824
9824
  setZoom(level) {
9825
- zoom.setScale(chunkIJY5WNZK_js.clampZoomScale(level));
9825
+ zoom.setScale(chunkGUGHIQ4P_js.clampZoomScale(level));
9826
9826
  },
9827
9827
  zoomIn() {
9828
9828
  zoom.handleZoomIn();
@@ -10038,7 +10038,7 @@ function useReducedMotion() {
10038
10038
  }
10039
10039
  function useViewerOptions() {
10040
10040
  const storeRef = react.useRef(null);
10041
- storeRef.current ??= chunkIJY5WNZK_js.createViewerOptionsStore();
10041
+ storeRef.current ??= chunkGUGHIQ4P_js.createViewerOptionsStore();
10042
10042
  const store = storeRef.current;
10043
10043
  const options = react.useSyncExternalStore(
10044
10044
  (onStoreChange) => store.subscribe(onStoreChange),
@@ -10047,9 +10047,9 @@ function useViewerOptions() {
10047
10047
  );
10048
10048
  return { optionsStore: store, options };
10049
10049
  }
10050
- var KNOWN_TAB_IDS = new Set(chunkIJY5WNZK_js.TOOLBAR_TABS.map((tab) => tab.id));
10050
+ var KNOWN_TAB_IDS = new Set(chunkGUGHIQ4P_js.TOOLBAR_TABS.map((tab) => tab.id));
10051
10051
  function computeToolbarVisibility(hiddenActions) {
10052
- const isHidden = (id) => chunkIJY5WNZK_js.isActionHidden(id, hiddenActions);
10052
+ const isHidden = (id) => chunkGUGHIQ4P_js.isActionHidden(id, hiddenActions);
10053
10053
  const isTabVisible = (id) => !KNOWN_TAB_IDS.has(id) || !isHidden(id);
10054
10054
  return { isHidden, isTabVisible };
10055
10055
  }
@@ -10135,12 +10135,12 @@ function useYjsDocumentSync({
10135
10135
  return;
10136
10136
  }
10137
10137
  try {
10138
- const handler = new chunkIJY5WNZK_js.PptxHandler();
10138
+ const handler = new chunkGUGHIQ4P_js.PptxHandler();
10139
10139
  await handler.load(sourceBytes.buffer);
10140
- const currentSlides = chunkIJY5WNZK_js.readSlidesFromYDoc(
10140
+ const currentSlides = chunkGUGHIQ4P_js.readSlidesFromYDoc(
10141
10141
  doc
10142
10142
  );
10143
- const slidesToSave = chunkIJY5WNZK_js.buildSaveSlides(currentSlides, templateElementsBySlideId);
10143
+ const slidesToSave = chunkGUGHIQ4P_js.buildSaveSlides(currentSlides, templateElementsBySlideId);
10144
10144
  const bytes = await handler.save(slidesToSave);
10145
10145
  config.onWriteBack(bytes);
10146
10146
  } catch {
@@ -10155,10 +10155,10 @@ function useYjsDocumentSync({
10155
10155
  if (!doc || !isConnected) {
10156
10156
  return;
10157
10157
  }
10158
- const docSlides = chunkIJY5WNZK_js.readSlidesFromYDoc(
10158
+ const docSlides = chunkGUGHIQ4P_js.readSlidesFromYDoc(
10159
10159
  doc
10160
10160
  );
10161
- if (!chunkIJY5WNZK_js.shouldRoomSlidesReplaceLoad(loadOrigin, docSlides.length)) {
10161
+ if (!chunkGUGHIQ4P_js.shouldRoomSlidesReplaceLoad(loadOrigin, docSlides.length)) {
10162
10162
  return;
10163
10163
  }
10164
10164
  lastSyncedRef.current = JSON.stringify(docSlides);
@@ -10177,11 +10177,11 @@ function useYjsDocumentSync({
10177
10177
  lastSyncedRef.current = serialized;
10178
10178
  void (async () => {
10179
10179
  const factories = await getFactories();
10180
- chunkIJY5WNZK_js.reconcileSlidesInYDoc(
10180
+ chunkGUGHIQ4P_js.reconcileSlidesInYDoc(
10181
10181
  slides,
10182
10182
  doc,
10183
10183
  factories,
10184
- chunkIJY5WNZK_js.LOCAL_SYNC_ORIGIN
10184
+ chunkGUGHIQ4P_js.LOCAL_SYNC_ORIGIN
10185
10185
  );
10186
10186
  scheduleWriteBack();
10187
10187
  })();
@@ -10195,10 +10195,10 @@ function useYjsDocumentSync({
10195
10195
  return;
10196
10196
  }
10197
10197
  const handleChange = (_events, transaction) => {
10198
- if (transaction?.origin === chunkIJY5WNZK_js.LOCAL_SYNC_ORIGIN) {
10198
+ if (transaction?.origin === chunkGUGHIQ4P_js.LOCAL_SYNC_ORIGIN) {
10199
10199
  return;
10200
10200
  }
10201
- const remoteSlides = chunkIJY5WNZK_js.readSlidesFromYDoc(
10201
+ const remoteSlides = chunkGUGHIQ4P_js.readSlidesFromYDoc(
10202
10202
  doc
10203
10203
  );
10204
10204
  if (remoteSlides.length === 0) {
@@ -10214,7 +10214,7 @@ function useYjsDocumentSync({
10214
10214
  isApplyingRemoteRef.current = false;
10215
10215
  scheduleWriteBack();
10216
10216
  };
10217
- const unobserve = chunkIJY5WNZK_js.observeYDocSlides(
10217
+ const unobserve = chunkGUGHIQ4P_js.observeYDocSlides(
10218
10218
  doc,
10219
10219
  handleChange
10220
10220
  );
@@ -10252,7 +10252,7 @@ function useBroadcastFollower({
10252
10252
  if (!broadcaster) {
10253
10253
  return;
10254
10254
  }
10255
- if (!chunkIJY5WNZK_js.shouldAutoFollowBroadcaster({
10255
+ if (!chunkGUGHIQ4P_js.shouldAutoFollowBroadcaster({
10256
10256
  localRole: collab.config.role,
10257
10257
  broadcasterRole: broadcaster.role
10258
10258
  })) {
@@ -10423,10 +10423,10 @@ function useTouchGestures(input) {
10423
10423
  if (!el || !enabled) {
10424
10424
  return;
10425
10425
  }
10426
- const recognizer = chunkIJY5WNZK_js.createTouchGestureRecognizer({
10426
+ const recognizer = chunkGUGHIQ4P_js.createTouchGestureRecognizer({
10427
10427
  getScale: () => scaleRef.current,
10428
- minScale: chunkIJY5WNZK_js.MIN_ZOOM_SCALE,
10429
- maxScale: chunkIJY5WNZK_js.MAX_ZOOM_SCALE,
10428
+ minScale: chunkGUGHIQ4P_js.MIN_ZOOM_SCALE,
10429
+ maxScale: chunkGUGHIQ4P_js.MAX_ZOOM_SCALE,
10430
10430
  callbacks: {
10431
10431
  onPinchZoom: (newScale) => callbacksRef.current.onPinchZoom?.(newScale),
10432
10432
  onSwipe: (direction) => callbacksRef.current.onSwipe?.(direction),
@@ -10466,7 +10466,7 @@ function scrollFocusedIntoView(keyboardInset) {
10466
10466
  return;
10467
10467
  }
10468
10468
  const rect = active.getBoundingClientRect();
10469
- const delta = chunkIJY5WNZK_js.computeScrollDelta(
10469
+ const delta = chunkGUGHIQ4P_js.computeScrollDelta(
10470
10470
  { top: rect.top, bottom: rect.bottom },
10471
10471
  window.innerHeight,
10472
10472
  keyboardInset
@@ -10486,8 +10486,8 @@ function useKeyboardInsets(enabled = true) {
10486
10486
  return;
10487
10487
  }
10488
10488
  const update = () => {
10489
- const metrics = chunkIJY5WNZK_js.readViewportMetrics(window);
10490
- const inset = metrics ? chunkIJY5WNZK_js.computeKeyboardInset(metrics) : 0;
10489
+ const metrics = chunkGUGHIQ4P_js.readViewportMetrics(window);
10490
+ const inset = metrics ? chunkGUGHIQ4P_js.computeKeyboardInset(metrics) : 0;
10491
10491
  setKeyboardInset(inset);
10492
10492
  if (inset > 0) {
10493
10493
  window.requestAnimationFrame(() => scrollFocusedIntoView(inset));
@@ -10498,8 +10498,8 @@ function useKeyboardInsets(enabled = true) {
10498
10498
  vv.addEventListener("scroll", update);
10499
10499
  const onFocusIn = () => {
10500
10500
  window.requestAnimationFrame(() => {
10501
- const metrics = chunkIJY5WNZK_js.readViewportMetrics(window);
10502
- const inset = metrics ? chunkIJY5WNZK_js.computeKeyboardInset(metrics) : 0;
10501
+ const metrics = chunkGUGHIQ4P_js.readViewportMetrics(window);
10502
+ const inset = metrics ? chunkGUGHIQ4P_js.computeKeyboardInset(metrics) : 0;
10503
10503
  if (inset > 0) {
10504
10504
  scrollFocusedIntoView(inset);
10505
10505
  }
@@ -10512,7 +10512,7 @@ function useKeyboardInsets(enabled = true) {
10512
10512
  document.removeEventListener("focusin", onFocusIn);
10513
10513
  };
10514
10514
  }, [enabled]);
10515
- return { keyboardInset, isKeyboardOpen: chunkIJY5WNZK_js.isKeyboardOpen(keyboardInset) };
10515
+ return { keyboardInset, isKeyboardOpen: chunkGUGHIQ4P_js.isKeyboardOpen(keyboardInset) };
10516
10516
  }
10517
10517
 
10518
10518
  // src/viewer/hooks/useViewerBuildingBlocks-canvas-props.ts
@@ -10539,7 +10539,7 @@ function buildCanvasProps(input) {
10539
10539
  } = input;
10540
10540
  const effectiveSlide = mode === "master" ? masterPseudoSlide : activeSlide;
10541
10541
  const effectiveTemplateElements = mode === "master" ? s.activeLayout ? s.activeMaster?.elements ?? [] : [] : templateElements;
10542
- const fieldContext = chunkIJY5WNZK_js.buildFieldSubstitutionContext({
10542
+ const fieldContext = chunkGUGHIQ4P_js.buildFieldSubstitutionContext({
10543
10543
  headerFooter: s.headerFooter,
10544
10544
  customProperties: s.customProperties,
10545
10545
  slide: activeSlide
@@ -10549,13 +10549,13 @@ function buildCanvasProps(input) {
10549
10549
  if (mode === "present") {
10550
10550
  presentation.handlePresentationAction(action);
10551
10551
  } else if (action.url) {
10552
- chunkIJY5WNZK_js.safeOpenUrl(action.url);
10552
+ chunkGUGHIQ4P_js.safeOpenUrl(action.url);
10553
10553
  }
10554
10554
  };
10555
10555
  const handleHyperlinkClick = (url) => {
10556
- if (chunkIJY5WNZK_js.isPpactionUrl(url)) {
10556
+ if (chunkGUGHIQ4P_js.isPpactionUrl(url)) {
10557
10557
  if (mode === "present") {
10558
- const parsed = chunkIJY5WNZK_js.parsePpactionUrl(url);
10558
+ const parsed = chunkGUGHIQ4P_js.parsePpactionUrl(url);
10559
10559
  if (parsed) {
10560
10560
  presentation.handlePresentationAction({
10561
10561
  action: parsed.action,
@@ -10565,7 +10565,7 @@ function buildCanvasProps(input) {
10565
10565
  }
10566
10566
  return;
10567
10567
  }
10568
- chunkIJY5WNZK_js.safeOpenUrl(url);
10568
+ chunkGUGHIQ4P_js.safeOpenUrl(url);
10569
10569
  };
10570
10570
  return {
10571
10571
  activeSlide: effectiveSlide,
@@ -10661,7 +10661,7 @@ function buildCanvasProps(input) {
10661
10661
 
10662
10662
  // src/viewer/hooks/useScopedLayoutOptions.ts
10663
10663
  function scopeLayoutOptionsToActiveSlide(options, activeSlide) {
10664
- return chunkIJY5WNZK_js.scopeLayoutOptionsToSlide(options, activeSlide?.layoutPath);
10664
+ return chunkGUGHIQ4P_js.scopeLayoutOptionsToSlide(options, activeSlide?.layoutPath);
10665
10665
  }
10666
10666
 
10667
10667
  // src/viewer/hooks/useViewerBuildingBlocks-toolbar-handlers.ts
@@ -10674,7 +10674,7 @@ function buildToolbarAnimationHandlers(input) {
10674
10674
  const current = activeSlide.animations ?? [];
10675
10675
  if (group === "motionPath") {
10676
10676
  propertyHandlers.handleUpdateSlide({
10677
- animations: chunkIJY5WNZK_js.applyMotionPathPreset(current, selectedElement.id, preset)
10677
+ animations: chunkGUGHIQ4P_js.applyMotionPathPreset(current, selectedElement.id, preset)
10678
10678
  });
10679
10679
  return;
10680
10680
  }
@@ -10869,7 +10869,7 @@ function buildToolbarProps(input) {
10869
10869
  onOpenFile,
10870
10870
  onOpenRecentFile,
10871
10871
  onCreatePresentation: (templateId) => {
10872
- s.setSlides(chunkIJY5WNZK_js.createBackstagePresentation(templateId));
10872
+ s.setSlides(chunkGUGHIQ4P_js.createBackstagePresentation(templateId));
10873
10873
  s.setActiveSlideIndex(0);
10874
10874
  s.setSelectedElementId(null);
10875
10875
  s.setSelectedElementIds([]);
@@ -10898,7 +10898,7 @@ function buildToolbarProps(input) {
10898
10898
  loadLayoutPreviews: input.loadLayoutPreviews,
10899
10899
  onInsertSlideFromLayout: slideOps.handleInsertSlideFromLayout,
10900
10900
  onInsertSlideFromTemplate: slideOps.handleInsertSlideFromTemplate,
10901
- templateScheme: chunkIJY5WNZK_js.templateSchemeFromTheme(s.theme?.colorScheme),
10901
+ templateScheme: chunkGUGHIQ4P_js.templateSchemeFromTheme(s.theme?.colorScheme),
10902
10902
  customShows: s.customShows,
10903
10903
  activeCustomShowId: s.activeCustomShowId,
10904
10904
  onSetActiveCustomShowId: s.setActiveCustomShowId,
@@ -10939,7 +10939,7 @@ function buildToolbarProps(input) {
10939
10939
  isCommentsPanelOpen: s.isInspectorPaneOpen,
10940
10940
  slideCommentCount: activeSlide?.comments?.length ?? 0,
10941
10941
  formatPainterActive: s.formatPainterActive,
10942
- canActivateFormatPainter: chunkIJY5WNZK_js.hasCopyableFormat(selectedElement),
10942
+ canActivateFormatPainter: chunkGUGHIQ4P_js.hasCopyableFormat(selectedElement),
10943
10943
  onToggleFormatPainter: () => s.setFormatPainterActive((p) => !p),
10944
10944
  isSelectionPaneOpen: s.isSelectionPaneOpen,
10945
10945
  onToggleSelectionPane: () => s.setIsSelectionPaneOpen((p) => !p),
@@ -11227,7 +11227,7 @@ function useViewerBuildingBlocks(input) {
11227
11227
  }, [incomingContent]);
11228
11228
  const onOpenFile = react.useCallback(() => {
11229
11229
  void (async () => {
11230
- const picked = await chunkIJY5WNZK_js.openPptxFile();
11230
+ const picked = await chunkGUGHIQ4P_js.openPptxFile();
11231
11231
  if (picked) {
11232
11232
  setContent(picked.buffer);
11233
11233
  }
@@ -11235,7 +11235,7 @@ function useViewerBuildingBlocks(input) {
11235
11235
  }, []);
11236
11236
  const onOpenRecentFile = react.useCallback((key) => {
11237
11237
  void (async () => {
11238
- const bytes = await chunkIJY5WNZK_js.readBackstageRecentFile(key);
11238
+ const bytes = await chunkGUGHIQ4P_js.readBackstageRecentFile(key);
11239
11239
  if (bytes) {
11240
11240
  setContent(bytes);
11241
11241
  }