pptx-react-viewer 2.12.1 → 2.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (102) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/dist/{AiChatPanel-CGGUPVQX.mjs → AiChatPanel-4YS6DEIT.mjs} +3 -3
  3. package/dist/AiChatPanel-4YS6DEIT.mjs.br +0 -0
  4. package/dist/AiChatPanel-4YS6DEIT.mjs.gz +0 -0
  5. package/dist/{AiChatPanel-UEFYTUJN.js → AiChatPanel-DEI3EQFM.js} +22 -22
  6. package/dist/AiChatPanel-DEI3EQFM.js.br +0 -0
  7. package/dist/AiChatPanel-DEI3EQFM.js.gz +0 -0
  8. package/dist/{Model3DScene-TU4NTHRM.mjs → Model3DScene-JSNQCKCJ.mjs} +1 -1
  9. package/dist/Model3DScene-JSNQCKCJ.mjs.br +0 -0
  10. package/dist/Model3DScene-JSNQCKCJ.mjs.gz +0 -0
  11. package/dist/{Model3DScene-QYXJNALP.js → Model3DScene-X4W7GZVY.js} +2 -2
  12. package/dist/Model3DScene-X4W7GZVY.js.br +0 -0
  13. package/dist/Model3DScene-X4W7GZVY.js.gz +0 -0
  14. package/dist/{SurfaceChart3DScene-VTJBKUQY.mjs → SurfaceChart3DScene-3MSU74YH.mjs} +1 -1
  15. package/dist/{SurfaceChart3DScene-VTJBKUQY.mjs.br → SurfaceChart3DScene-3MSU74YH.mjs.br} +0 -0
  16. package/dist/SurfaceChart3DScene-3MSU74YH.mjs.gz +0 -0
  17. package/dist/{SurfaceChart3DScene-4VCO3DRP.js → SurfaceChart3DScene-IZLUWT27.js} +2 -2
  18. package/dist/SurfaceChart3DScene-IZLUWT27.js.br +0 -0
  19. package/dist/SurfaceChart3DScene-IZLUWT27.js.gz +0 -0
  20. package/dist/{chunk-CABQXGPI.mjs → chunk-4TD7EINA.mjs} +770 -358
  21. package/dist/chunk-4TD7EINA.mjs.br +0 -0
  22. package/dist/chunk-4TD7EINA.mjs.gz +0 -0
  23. package/dist/{chunk-4GYNTY2G.mjs → chunk-6KRNQ2KF.mjs} +2 -2
  24. package/dist/chunk-6KRNQ2KF.mjs.br +0 -0
  25. package/dist/chunk-6KRNQ2KF.mjs.gz +0 -0
  26. package/dist/{chunk-TDUDH7S4.js → chunk-EFSQW6S5.js} +771 -357
  27. package/dist/chunk-EFSQW6S5.js.br +0 -0
  28. package/dist/chunk-EFSQW6S5.js.gz +0 -0
  29. package/dist/{chunk-UIWY4XJT.js → chunk-G2LZT5SV.js} +3 -3
  30. package/dist/chunk-G2LZT5SV.js.br +0 -0
  31. package/dist/chunk-G2LZT5SV.js.gz +0 -0
  32. package/dist/{chunk-YIPR3GKG.mjs → chunk-HRLF4REI.mjs} +34 -15
  33. package/dist/chunk-HRLF4REI.mjs.br +0 -0
  34. package/dist/chunk-HRLF4REI.mjs.gz +0 -0
  35. package/dist/{chunk-LE6YA5WB.js → chunk-IDW5UPXW.js} +264 -245
  36. package/dist/chunk-IDW5UPXW.js.br +0 -0
  37. package/dist/chunk-IDW5UPXW.js.gz +0 -0
  38. package/dist/{chunk-NUDH7TI2.js → chunk-RWIQHVZQ.js} +326 -326
  39. package/dist/chunk-RWIQHVZQ.js.br +0 -0
  40. package/dist/chunk-RWIQHVZQ.js.gz +0 -0
  41. package/dist/{chunk-GBKIWNW6.js → chunk-SHZ3GWOD.js} +1045 -1042
  42. package/dist/chunk-SHZ3GWOD.js.br +0 -0
  43. package/dist/chunk-SHZ3GWOD.js.gz +0 -0
  44. package/dist/{chunk-N3NKU7SC.mjs → chunk-WEU5EMKK.mjs} +1 -1
  45. package/dist/chunk-WEU5EMKK.mjs.br +0 -0
  46. package/dist/chunk-WEU5EMKK.mjs.gz +0 -0
  47. package/dist/{chunk-4SGXEGVL.mjs → chunk-YA7VFYTW.mjs} +17 -14
  48. package/dist/chunk-YA7VFYTW.mjs.br +0 -0
  49. package/dist/chunk-YA7VFYTW.mjs.gz +0 -0
  50. package/dist/index.d.ts +18 -0
  51. package/dist/index.js +34 -34
  52. package/dist/index.js.br +0 -0
  53. package/dist/index.js.gz +0 -0
  54. package/dist/index.mjs +5 -5
  55. package/dist/index.mjs.br +0 -0
  56. package/dist/index.mjs.gz +0 -0
  57. package/dist/internals.d.ts +18 -0
  58. package/dist/internals.js +78 -78
  59. package/dist/internals.js.br +0 -0
  60. package/dist/internals.js.gz +0 -0
  61. package/dist/internals.mjs +3 -3
  62. package/dist/internals.mjs.br +0 -0
  63. package/dist/internals.mjs.gz +0 -0
  64. package/dist/viewer/index.d.ts +18 -0
  65. package/dist/viewer/index.js +21 -21
  66. package/dist/viewer/index.js.br +0 -0
  67. package/dist/viewer/index.js.gz +0 -0
  68. package/dist/viewer/index.mjs +5 -5
  69. package/dist/viewer/index.mjs.br +0 -0
  70. package/dist/viewer/index.mjs.gz +0 -0
  71. package/package.json +1 -1
  72. package/dist/AiChatPanel-CGGUPVQX.mjs.br +0 -0
  73. package/dist/AiChatPanel-CGGUPVQX.mjs.gz +0 -0
  74. package/dist/AiChatPanel-UEFYTUJN.js.br +0 -0
  75. package/dist/AiChatPanel-UEFYTUJN.js.gz +0 -0
  76. package/dist/Model3DScene-QYXJNALP.js.br +0 -0
  77. package/dist/Model3DScene-QYXJNALP.js.gz +0 -0
  78. package/dist/Model3DScene-TU4NTHRM.mjs.br +0 -0
  79. package/dist/Model3DScene-TU4NTHRM.mjs.gz +0 -0
  80. package/dist/SurfaceChart3DScene-4VCO3DRP.js.br +0 -0
  81. package/dist/SurfaceChart3DScene-4VCO3DRP.js.gz +0 -0
  82. package/dist/SurfaceChart3DScene-VTJBKUQY.mjs.gz +0 -0
  83. package/dist/chunk-4GYNTY2G.mjs.br +0 -0
  84. package/dist/chunk-4GYNTY2G.mjs.gz +0 -0
  85. package/dist/chunk-4SGXEGVL.mjs.br +0 -0
  86. package/dist/chunk-4SGXEGVL.mjs.gz +0 -0
  87. package/dist/chunk-CABQXGPI.mjs.br +0 -0
  88. package/dist/chunk-CABQXGPI.mjs.gz +0 -0
  89. package/dist/chunk-GBKIWNW6.js.br +0 -0
  90. package/dist/chunk-GBKIWNW6.js.gz +0 -0
  91. package/dist/chunk-LE6YA5WB.js.br +0 -0
  92. package/dist/chunk-LE6YA5WB.js.gz +0 -0
  93. package/dist/chunk-N3NKU7SC.mjs.br +0 -0
  94. package/dist/chunk-N3NKU7SC.mjs.gz +0 -0
  95. package/dist/chunk-NUDH7TI2.js.br +0 -0
  96. package/dist/chunk-NUDH7TI2.js.gz +0 -0
  97. package/dist/chunk-TDUDH7S4.js.br +0 -0
  98. package/dist/chunk-TDUDH7S4.js.gz +0 -0
  99. package/dist/chunk-UIWY4XJT.js.br +0 -0
  100. package/dist/chunk-UIWY4XJT.js.gz +0 -0
  101. package/dist/chunk-YIPR3GKG.mjs.br +0 -0
  102. package/dist/chunk-YIPR3GKG.mjs.gz +0 -0
@@ -1,8 +1,8 @@
1
1
  'use strict';
2
2
 
3
- var chunkLE6YA5WB_js = require('./chunk-LE6YA5WB.js');
3
+ var chunkIDW5UPXW_js = require('./chunk-IDW5UPXW.js');
4
4
  var chunkBXAK3JFM_js = require('./chunk-BXAK3JFM.js');
5
- var chunkTDUDH7S4_js = require('./chunk-TDUDH7S4.js');
5
+ var chunkEFSQW6S5_js = require('./chunk-EFSQW6S5.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 = chunkTDUDH7S4_js.DEFAULT_VIRTUAL_OVERSCAN
17
+ overscan = chunkEFSQW6S5_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 = chunkTDUDH7S4_js.computeVirtualRange(totalItems, itemHeight, scrollTop, viewportHeight, overscan);
47
+ const range = chunkEFSQW6S5_js.computeVirtualRange(totalItems, itemHeight, scrollTop, viewportHeight, overscan);
48
48
  const safeItemHeight = Math.max(itemHeight, 1);
49
49
  const scrollToIndex = react.useCallback(
50
50
  (index, behavior = "smooth") => {
@@ -107,7 +107,7 @@ function usePresenceTracking({
107
107
  awareness.setLocalStateField("presence", state);
108
108
  lastBroadcastRef.current = Date.now();
109
109
  };
110
- if (elapsed >= chunkTDUDH7S4_js.BROADCAST_THROTTLE_MS) {
110
+ if (elapsed >= chunkEFSQW6S5_js.BROADCAST_THROTTLE_MS) {
111
111
  if (pendingBroadcastRef.current) {
112
112
  clearTimeout(pendingBroadcastRef.current);
113
113
  pendingBroadcastRef.current = null;
@@ -117,7 +117,7 @@ function usePresenceTracking({
117
117
  pendingBroadcastRef.current = setTimeout(() => {
118
118
  pendingBroadcastRef.current = null;
119
119
  flush();
120
- }, chunkTDUDH7S4_js.BROADCAST_THROTTLE_MS - elapsed);
120
+ }, chunkEFSQW6S5_js.BROADCAST_THROTTLE_MS - elapsed);
121
121
  }
122
122
  },
123
123
  [awareness, userName, userColor, userAvatar, role]
@@ -142,7 +142,7 @@ function usePresenceTracking({
142
142
  return;
143
143
  }
144
144
  const handleChange = () => {
145
- const users = chunkTDUDH7S4_js.derivePresenceList(
145
+ const users = chunkEFSQW6S5_js.derivePresenceList(
146
146
  awareness.getStates(),
147
147
  localClientId,
148
148
  canvasWidth,
@@ -194,7 +194,7 @@ function useYjsProvider({ config }) {
194
194
  const departureRef = react.useRef(null);
195
195
  const gateRef = react.useRef(null);
196
196
  if (!gateRef.current) {
197
- gateRef.current = chunkTDUDH7S4_js.createSyncGate(() => setSynced(true));
197
+ gateRef.current = chunkEFSQW6S5_js.createSyncGate(() => setSynced(true));
198
198
  }
199
199
  const teardown = react.useCallback(() => {
200
200
  if (timeoutRef.current) {
@@ -214,7 +214,7 @@ function useYjsProvider({ config }) {
214
214
  const buildCleanup = react.useCallback(
215
215
  (provider, yDoc) => () => {
216
216
  announceDeparture();
217
- chunkTDUDH7S4_js.clearLocalAwareness(provider.awareness);
217
+ chunkEFSQW6S5_js.clearLocalAwareness(provider.awareness);
218
218
  provider.destroy();
219
219
  yDoc.destroy();
220
220
  setDoc(null);
@@ -239,9 +239,9 @@ function useYjsProvider({ config }) {
239
239
  if (config.authToken) {
240
240
  opts.password = config.authToken;
241
241
  }
242
- const roomId = chunkTDUDH7S4_js.validateRoomId(config.roomId);
242
+ const roomId = chunkEFSQW6S5_js.validateRoomId(config.roomId);
243
243
  const provider = new WebrtcProvider(roomId, yDoc, opts);
244
- departureRef.current = chunkTDUDH7S4_js.createDepartureChannel(roomId, provider.awareness);
244
+ departureRef.current = chunkEFSQW6S5_js.createDepartureChannel(roomId, provider.awareness);
245
245
  setDoc(yDoc);
246
246
  setAwareness(provider.awareness);
247
247
  setClientId(provider.awareness.clientID);
@@ -283,13 +283,13 @@ function useYjsProvider({ config }) {
283
283
  if (!config) {
284
284
  return;
285
285
  }
286
- const roomId = chunkTDUDH7S4_js.validateRoomId(config.roomId);
287
- const transport = config.transport ?? chunkTDUDH7S4_js.resolveTransportForServerUrl(config.serverUrl);
286
+ const roomId = chunkEFSQW6S5_js.validateRoomId(config.roomId);
287
+ const transport = config.transport ?? chunkEFSQW6S5_js.resolveTransportForServerUrl(config.serverUrl);
288
288
  if (transport === "webrtc") {
289
289
  await initWebrtc();
290
290
  return;
291
291
  }
292
- if (chunkTDUDH7S4_js.isMixedContentBlocked(config.serverUrl)) {
292
+ if (chunkEFSQW6S5_js.isMixedContentBlocked(config.serverUrl)) {
293
293
  console.warn(
294
294
  `[pptx-viewer] Refusing to connect: insecure ws:// server "${config.serverUrl}" is blocked from a secure (https) page. Use a wss:// URL.`
295
295
  );
@@ -303,7 +303,7 @@ function useYjsProvider({ config }) {
303
303
  const provider = new WebsocketProvider(config.serverUrl, roomId, yDoc, {
304
304
  params: config.authToken ? { token: config.authToken } : void 0
305
305
  });
306
- departureRef.current = chunkTDUDH7S4_js.createDepartureChannel(roomId, provider.awareness);
306
+ departureRef.current = chunkEFSQW6S5_js.createDepartureChannel(roomId, provider.awareness);
307
307
  let connected = false;
308
308
  const handleStatus = (event) => {
309
309
  if (event.status === "connected") {
@@ -343,7 +343,7 @@ function useYjsProvider({ config }) {
343
343
  provider.off("status", handleStatus);
344
344
  provider.off("sync", handleSynced);
345
345
  announceDeparture();
346
- chunkTDUDH7S4_js.clearLocalAwareness(provider.awareness);
346
+ chunkEFSQW6S5_js.clearLocalAwareness(provider.awareness);
347
347
  provider.destroy();
348
348
  yDoc.destroy();
349
349
  setDoc(null);
@@ -352,7 +352,7 @@ function useYjsProvider({ config }) {
352
352
  cleanupRef.current = null;
353
353
  setStatus("error");
354
354
  }
355
- }, chunkTDUDH7S4_js.CONNECTION_TIMEOUT_MS);
355
+ }, chunkEFSQW6S5_js.CONNECTION_TIMEOUT_MS);
356
356
  }
357
357
  setDoc(yDoc);
358
358
  setAwareness(provider.awareness);
@@ -361,7 +361,7 @@ function useYjsProvider({ config }) {
361
361
  provider.off("status", handleStatus);
362
362
  provider.off("sync", handleSynced);
363
363
  announceDeparture();
364
- chunkTDUDH7S4_js.clearLocalAwareness(provider.awareness);
364
+ chunkEFSQW6S5_js.clearLocalAwareness(provider.awareness);
365
365
  provider.destroy();
366
366
  yDoc.destroy();
367
367
  setDoc(null);
@@ -387,7 +387,7 @@ function useYjsProvider({ config }) {
387
387
  ]);
388
388
  react.useEffect(() => {
389
389
  init();
390
- const disposeTeardown = chunkTDUDH7S4_js.registerCollaborationTeardown({
390
+ const disposeTeardown = chunkEFSQW6S5_js.registerCollaborationTeardown({
391
391
  leave: teardown,
392
392
  rejoin: init
393
393
  });
@@ -408,7 +408,7 @@ function useCollaborativeState({
408
408
  canvasWidth,
409
409
  canvasHeight
410
410
  }) {
411
- const userColor = chunkTDUDH7S4_js.sanitizeColor(config?.userColor, "#6366f1");
411
+ const userColor = chunkEFSQW6S5_js.sanitizeColor(config?.userColor, "#6366f1");
412
412
  const { status, awareness, doc, clientId, synced, retry } = useYjsProvider({ config });
413
413
  const { remoteUsers, broadcastPresence } = usePresenceTracking({
414
414
  awareness,
@@ -517,8 +517,8 @@ function useEditorHistory(input) {
517
517
  width: canvasSize.width,
518
518
  height: canvasSize.height,
519
519
  activeSlideIndex,
520
- slides: slides.map(chunkTDUDH7S4_js.cloneSlide),
521
- templateElementsBySlideId: chunkTDUDH7S4_js.cloneTemplateElementsBySlideId(templateElementsBySlideId),
520
+ slides: slides.map(chunkEFSQW6S5_js.cloneSlide),
521
+ templateElementsBySlideId: chunkEFSQW6S5_js.cloneTemplateElementsBySlideId(templateElementsBySlideId),
522
522
  ...actionLabel ? { actionLabel } : {}
523
523
  };
524
524
  },
@@ -531,9 +531,9 @@ function useEditorHistory(input) {
531
531
  width: snapshot.width,
532
532
  height: snapshot.height
533
533
  });
534
- setSlides(snapshot.slides.map(chunkTDUDH7S4_js.cloneSlide));
534
+ setSlides(snapshot.slides.map(chunkEFSQW6S5_js.cloneSlide));
535
535
  setTemplateElementsBySlideId(
536
- chunkTDUDH7S4_js.cloneTemplateElementsBySlideId(snapshot.templateElementsBySlideId)
536
+ chunkEFSQW6S5_js.cloneTemplateElementsBySlideId(snapshot.templateElementsBySlideId)
537
537
  );
538
538
  setActiveSlideIndex(Math.min(snapshot.activeSlideIndex, maxSlideIndex));
539
539
  setSelectedElementIds([]);
@@ -567,8 +567,8 @@ function useEditorHistory(input) {
567
567
  const currentSnapshot = buildHistorySnapshot();
568
568
  historyFutureRef.current.push(currentSnapshot);
569
569
  isApplyingHistoryRef.current = true;
570
- const nextSnapshot = chunkLE6YA5WB_js.cloneHistorySnapshot(previousSnapshot);
571
- lastHistorySnapshotRef.current = chunkLE6YA5WB_js.cloneHistorySnapshot(nextSnapshot);
570
+ const nextSnapshot = chunkIDW5UPXW_js.cloneHistorySnapshot(previousSnapshot);
571
+ lastHistorySnapshotRef.current = chunkIDW5UPXW_js.cloneHistorySnapshot(nextSnapshot);
572
572
  lastHistorySerializedRef.current = JSON.stringify(nextSnapshot);
573
573
  applyHistorySnapshot(nextSnapshot);
574
574
  updateHistoryAvailability();
@@ -589,8 +589,8 @@ function useEditorHistory(input) {
589
589
  const currentSnapshot = buildHistorySnapshot();
590
590
  historyPastRef.current.push(currentSnapshot);
591
591
  isApplyingHistoryRef.current = true;
592
- const targetSnapshot = chunkLE6YA5WB_js.cloneHistorySnapshot(nextSnapshot);
593
- lastHistorySnapshotRef.current = chunkLE6YA5WB_js.cloneHistorySnapshot(targetSnapshot);
592
+ const targetSnapshot = chunkIDW5UPXW_js.cloneHistorySnapshot(nextSnapshot);
593
+ lastHistorySnapshotRef.current = chunkIDW5UPXW_js.cloneHistorySnapshot(targetSnapshot);
594
594
  lastHistorySerializedRef.current = JSON.stringify(targetSnapshot);
595
595
  applyHistorySnapshot(targetSnapshot);
596
596
  updateHistoryAvailability();
@@ -608,7 +608,7 @@ function useEditorHistory(input) {
608
608
  historyPastRef.current = [];
609
609
  historyFutureRef.current = [];
610
610
  if (initialSnapshot) {
611
- const clonedInitial = chunkLE6YA5WB_js.cloneHistorySnapshot(initialSnapshot);
611
+ const clonedInitial = chunkIDW5UPXW_js.cloneHistorySnapshot(initialSnapshot);
612
612
  lastHistorySnapshotRef.current = clonedInitial;
613
613
  lastHistorySerializedRef.current = JSON.stringify(clonedInitial);
614
614
  } else {
@@ -649,18 +649,18 @@ function useEditorHistory(input) {
649
649
  }
650
650
  const previousSnapshot = lastHistorySnapshotRef.current;
651
651
  if (!previousSnapshot) {
652
- lastHistorySnapshotRef.current = chunkLE6YA5WB_js.cloneHistorySnapshot(snapshot);
652
+ lastHistorySnapshotRef.current = chunkIDW5UPXW_js.cloneHistorySnapshot(snapshot);
653
653
  lastHistorySerializedRef.current = serialized;
654
654
  lastCheapHashRef.current = cheapHash;
655
655
  updateHistoryAvailability();
656
656
  return;
657
657
  }
658
- historyPastRef.current.push(chunkLE6YA5WB_js.cloneHistorySnapshot(previousSnapshot));
658
+ historyPastRef.current.push(chunkIDW5UPXW_js.cloneHistorySnapshot(previousSnapshot));
659
659
  while (historyPastRef.current.length > Math.max(1, maxHistoryEntries)) {
660
660
  historyPastRef.current.shift();
661
661
  }
662
662
  historyFutureRef.current = [];
663
- lastHistorySnapshotRef.current = chunkLE6YA5WB_js.cloneHistorySnapshot(snapshot);
663
+ lastHistorySnapshotRef.current = chunkIDW5UPXW_js.cloneHistorySnapshot(snapshot);
664
664
  lastHistorySerializedRef.current = serialized;
665
665
  lastCheapHashRef.current = cheapHash;
666
666
  updateHistoryAvailability();
@@ -750,7 +750,7 @@ function useZoomViewport({
750
750
  if (!wrapper || !canvasViewport) {
751
751
  return;
752
752
  }
753
- const boundedScale = chunkTDUDH7S4_js.clampZoomScale(nextScale);
753
+ const boundedScale = chunkEFSQW6S5_js.clampZoomScale(nextScale);
754
754
  const nextEditorScale = fitScale * boundedScale;
755
755
  const centerX = (bounds.minX + bounds.maxX) / 2;
756
756
  const centerY = (bounds.minY + bounds.maxY) / 2;
@@ -765,10 +765,10 @@ function useZoomViewport({
765
765
  [fitScale]
766
766
  );
767
767
  const handleZoomIn = react.useCallback(() => {
768
- setScale((currentScale) => chunkTDUDH7S4_js.zoomInScale(currentScale));
768
+ setScale((currentScale) => chunkEFSQW6S5_js.zoomInScale(currentScale));
769
769
  }, []);
770
770
  const handleZoomOut = react.useCallback(() => {
771
- setScale((currentScale) => chunkTDUDH7S4_js.zoomOutScale(currentScale));
771
+ setScale((currentScale) => chunkEFSQW6S5_js.zoomOutScale(currentScale));
772
772
  }, []);
773
773
  const handleResetZoom = react.useCallback(() => {
774
774
  setScale(1);
@@ -787,29 +787,29 @@ function useZoomViewport({
787
787
  selectedElements.forEach((element) => {
788
788
  minX = Math.min(minX, element.x);
789
789
  minY = Math.min(minY, element.y);
790
- maxX = Math.max(maxX, element.x + Math.max(element.width, chunkLE6YA5WB_js.MIN_ELEMENT_SIZE));
791
- maxY = Math.max(maxY, element.y + Math.max(element.height, chunkLE6YA5WB_js.MIN_ELEMENT_SIZE));
790
+ maxX = Math.max(maxX, element.x + Math.max(element.width, chunkIDW5UPXW_js.MIN_ELEMENT_SIZE));
791
+ maxY = Math.max(maxY, element.y + Math.max(element.height, chunkIDW5UPXW_js.MIN_ELEMENT_SIZE));
792
792
  });
793
793
  if (!Number.isFinite(minX) || !Number.isFinite(minY) || !Number.isFinite(maxX) || !Number.isFinite(maxY)) {
794
794
  return;
795
795
  }
796
796
  const selectionBounds = { minX, minY, maxX, maxY };
797
- const boundsWidth = Math.max(selectionBounds.maxX - selectionBounds.minX, chunkLE6YA5WB_js.MIN_ELEMENT_SIZE);
798
- const boundsHeight = Math.max(selectionBounds.maxY - selectionBounds.minY, chunkLE6YA5WB_js.MIN_ELEMENT_SIZE);
797
+ const boundsWidth = Math.max(selectionBounds.maxX - selectionBounds.minX, chunkIDW5UPXW_js.MIN_ELEMENT_SIZE);
798
+ const boundsHeight = Math.max(selectionBounds.maxY - selectionBounds.minY, chunkIDW5UPXW_js.MIN_ELEMENT_SIZE);
799
799
  const availableWidth = Math.max(
800
- effectiveEditorDimensions.width - chunkLE6YA5WB_js.ZOOM_TO_SELECTION_PADDING,
801
- chunkLE6YA5WB_js.MIN_ELEMENT_SIZE
800
+ effectiveEditorDimensions.width - chunkIDW5UPXW_js.ZOOM_TO_SELECTION_PADDING,
801
+ chunkIDW5UPXW_js.MIN_ELEMENT_SIZE
802
802
  );
803
803
  const availableHeight = Math.max(
804
- effectiveEditorDimensions.height - chunkLE6YA5WB_js.ZOOM_TO_SELECTION_PADDING,
805
- chunkLE6YA5WB_js.MIN_ELEMENT_SIZE
804
+ effectiveEditorDimensions.height - chunkIDW5UPXW_js.ZOOM_TO_SELECTION_PADDING,
805
+ chunkIDW5UPXW_js.MIN_ELEMENT_SIZE
806
806
  );
807
807
  const targetEditorScale = Math.min(
808
808
  availableWidth / boundsWidth,
809
809
  availableHeight / boundsHeight
810
810
  );
811
811
  const safeFitScale = fitScale > Number.EPSILON ? fitScale : Number.EPSILON;
812
- const nextScale = chunkTDUDH7S4_js.clampZoomScale(targetEditorScale / safeFitScale);
812
+ const nextScale = chunkEFSQW6S5_js.clampZoomScale(targetEditorScale / safeFitScale);
813
813
  setScale(nextScale);
814
814
  window.requestAnimationFrame(() => {
815
815
  window.requestAnimationFrame(() => {
@@ -829,7 +829,7 @@ function useZoomViewport({
829
829
  }
830
830
  event.preventDefault();
831
831
  const delta = event.deltaY * -1e-3;
832
- setScale((currentScale) => chunkTDUDH7S4_js.clampZoomScale(currentScale + delta));
832
+ setScale((currentScale) => chunkEFSQW6S5_js.clampZoomScale(currentScale + delta));
833
833
  }, []);
834
834
  react.useEffect(() => {
835
835
  const viewport = canvasViewportRef.current;
@@ -906,7 +906,7 @@ function applyAnimationGroupSteps(group, onPlayActionSound, setPresentationEleme
906
906
  const command = step.command;
907
907
  const timer = window.setTimeout(
908
908
  () => {
909
- chunkLE6YA5WB_js.executeMediaCommand(command);
909
+ chunkIDW5UPXW_js.executeMediaCommand(command);
910
910
  },
911
911
  Math.max(0, step.delayMs)
912
912
  );
@@ -1022,7 +1022,7 @@ function useAnimationPlayback(input) {
1022
1022
  (controller, group) => {
1023
1023
  driveBuildReveal(
1024
1024
  controller,
1025
- chunkTDUDH7S4_js.PresentationAnimationController.collectBuildStepIds(group),
1025
+ chunkEFSQW6S5_js.PresentationAnimationController.collectBuildStepIds(group),
1026
1026
  setPresentationElementStates,
1027
1027
  buildRafRef
1028
1028
  );
@@ -1085,7 +1085,7 @@ function useAnimationPlayback(input) {
1085
1085
  setHoverTriggerShapeIds(/* @__PURE__ */ new Set());
1086
1086
  return;
1087
1087
  }
1088
- const controller = chunkTDUDH7S4_js.PresentationAnimationController.fromSlide(slide);
1088
+ const controller = chunkEFSQW6S5_js.PresentationAnimationController.fromSlide(slide);
1089
1089
  controllerRef.current = controller;
1090
1090
  setPresentationKeyframesCss(controller.keyframesCss);
1091
1091
  setInteractiveTriggerShapeIds(controller.interactiveTriggerShapeIds);
@@ -1233,7 +1233,7 @@ function useAnimationPlayback(input) {
1233
1233
  }))
1234
1234
  );
1235
1235
  entranceAnimations.forEach((animation, animationIndex) => {
1236
- const delay = chunkTDUDH7S4_js.computeEntranceAnimationDelay(animation.delayMs, animationIndex);
1236
+ const delay = chunkEFSQW6S5_js.computeEntranceAnimationDelay(animation.delayMs, animationIndex);
1237
1237
  const timer = window.setTimeout(() => {
1238
1238
  setPresentationAnimations(
1239
1239
  (previousAnimations) => previousAnimations.map(
@@ -1270,12 +1270,12 @@ function useAnimationPlayback(input) {
1270
1270
  presentationTimersRef
1271
1271
  };
1272
1272
  }
1273
- var PRESENTER_CHANNEL_NAME = chunkTDUDH7S4_js.PRESENTATION_CHANNEL_NAME;
1274
- var AUDIENCE_HASH = chunkTDUDH7S4_js.PRESENTATION_HASH;
1275
- var PRESENTER_MSG_ORIGIN = chunkTDUDH7S4_js.PRESENTATION_MESSAGE_ORIGIN;
1276
- var AUDIENCE_NONCE_KEY = chunkTDUDH7S4_js.PRESENTATION_NONCE_KEY;
1273
+ var PRESENTER_CHANNEL_NAME = chunkEFSQW6S5_js.PRESENTATION_CHANNEL_NAME;
1274
+ var AUDIENCE_HASH = chunkEFSQW6S5_js.PRESENTATION_HASH;
1275
+ var PRESENTER_MSG_ORIGIN = chunkEFSQW6S5_js.PRESENTATION_MESSAGE_ORIGIN;
1276
+ var AUDIENCE_NONCE_KEY = chunkEFSQW6S5_js.PRESENTATION_NONCE_KEY;
1277
1277
  function generateSessionId() {
1278
- return chunkTDUDH7S4_js.createPresentationSessionId();
1278
+ return chunkEFSQW6S5_js.createPresentationSessionId();
1279
1279
  }
1280
1280
  function parseAudienceNonce() {
1281
1281
  const hash = window.location.hash;
@@ -1311,7 +1311,7 @@ function usePresenterWindow(input) {
1311
1311
  }, []);
1312
1312
  const swapDisplays = react.useCallback(async () => {
1313
1313
  const audience = audienceWindowRef.current;
1314
- return audience && !audience.closed ? chunkTDUDH7S4_js.swapPresentationWindows(window, audience) : false;
1314
+ return audience && !audience.closed ? chunkEFSQW6S5_js.swapPresentationWindows(window, audience) : false;
1315
1315
  }, []);
1316
1316
  const syncSlideToAudience = react.useCallback(
1317
1317
  (slideIndex) => {
@@ -1375,7 +1375,7 @@ function usePresenterWindow(input) {
1375
1375
  pollTimerRef.current = null;
1376
1376
  }
1377
1377
  if (closingSessionId) {
1378
- void chunkTDUDH7S4_js.clearAudienceContent(closingSessionId);
1378
+ void chunkEFSQW6S5_js.clearAudienceContent(closingSessionId);
1379
1379
  }
1380
1380
  }, [getChannel]);
1381
1381
  const openAudienceWindow = react.useCallback(() => {
@@ -1393,10 +1393,10 @@ function usePresenterWindow(input) {
1393
1393
  audienceWindowRef.current = blankWin;
1394
1394
  const sessionId = generateSessionId();
1395
1395
  sessionIdRef.current = sessionId;
1396
- const audienceUrl = chunkTDUDH7S4_js.buildPresentationAudienceUrl(window.location.href, sessionId);
1397
- void chunkTDUDH7S4_js.resolveAudienceScreenPlacement(window).then((placement) => {
1396
+ const audienceUrl = chunkEFSQW6S5_js.buildPresentationAudienceUrl(window.location.href, sessionId);
1397
+ void chunkEFSQW6S5_js.resolveAudienceScreenPlacement(window).then((placement) => {
1398
1398
  if (placement && audienceWindowRef.current === blankWin && !blankWin.closed) {
1399
- chunkTDUDH7S4_js.placeAudienceWindow(blankWin, placement);
1399
+ chunkEFSQW6S5_js.placeAudienceWindow(blankWin, placement);
1400
1400
  }
1401
1401
  return void 0;
1402
1402
  });
@@ -1426,7 +1426,7 @@ function usePresenterWindow(input) {
1426
1426
  }
1427
1427
  };
1428
1428
  if (content) {
1429
- void chunkTDUDH7S4_js.storeAudienceContent(content, sessionId).then(() => navigateOrClose(true)).catch(() => navigateOrClose(false));
1429
+ void chunkEFSQW6S5_js.storeAudienceContent(content, sessionId).then(() => navigateOrClose(true)).catch(() => navigateOrClose(false));
1430
1430
  } else {
1431
1431
  navigateOrClose(true);
1432
1432
  }
@@ -1452,7 +1452,7 @@ function usePresenterWindow(input) {
1452
1452
  }
1453
1453
  const handleMessage = (event) => {
1454
1454
  const message = event.data;
1455
- if (chunkTDUDH7S4_js.isPresentationSessionMessage(message) && message.type === "audience-ready" && message.sessionId === sessionIdRef.current) {
1455
+ if (chunkEFSQW6S5_js.isPresentationSessionMessage(message) && message.type === "audience-ready" && message.sessionId === sessionIdRef.current) {
1456
1456
  syncStateToAudience(snapshotRef.current);
1457
1457
  }
1458
1458
  };
@@ -1481,7 +1481,7 @@ function usePresenterWindow(input) {
1481
1481
  react.useEffect(() => {
1482
1482
  const handleBeforeUnload = () => {
1483
1483
  if (sessionIdRef.current) {
1484
- void chunkTDUDH7S4_js.clearAudienceContent(sessionIdRef.current);
1484
+ void chunkEFSQW6S5_js.clearAudienceContent(sessionIdRef.current);
1485
1485
  }
1486
1486
  };
1487
1487
  window.addEventListener("beforeunload", handleBeforeUnload);
@@ -1543,7 +1543,7 @@ function useAudienceMode(input) {
1543
1543
  }
1544
1544
  channel.onmessage = (event) => {
1545
1545
  const data = event.data;
1546
- if (!chunkTDUDH7S4_js.isPresentationSessionMessage(data) || data.origin !== PRESENTER_MSG_ORIGIN) {
1546
+ if (!chunkEFSQW6S5_js.isPresentationSessionMessage(data) || data.origin !== PRESENTER_MSG_ORIGIN) {
1547
1547
  return;
1548
1548
  }
1549
1549
  if (expectedSessionId && data.sessionId !== expectedSessionId) {
@@ -1559,16 +1559,16 @@ function useAudienceMode(input) {
1559
1559
  }
1560
1560
  if (data.type === "presenter-exit") {
1561
1561
  if (expectedSessionId) {
1562
- void chunkTDUDH7S4_js.clearAudienceContent(expectedSessionId);
1562
+ void chunkEFSQW6S5_js.clearAudienceContent(expectedSessionId);
1563
1563
  }
1564
- if (chunkTDUDH7S4_js.endAudienceDisplay(window)) {
1564
+ if (chunkEFSQW6S5_js.endAudienceDisplay(window)) {
1565
1565
  handlers.onPresenterEnded?.();
1566
1566
  }
1567
1567
  }
1568
1568
  };
1569
1569
  if (expectedSessionId) {
1570
1570
  channel.postMessage({
1571
- origin: chunkTDUDH7S4_js.PRESENTATION_MESSAGE_ORIGIN,
1571
+ origin: chunkEFSQW6S5_js.PRESENTATION_MESSAGE_ORIGIN,
1572
1572
  type: "audience-ready",
1573
1573
  sessionId: expectedSessionId
1574
1574
  });
@@ -1601,14 +1601,14 @@ function usePresentationKeyboard(input) {
1601
1601
  presentationSlideIndex,
1602
1602
  setShowRehearsalSummary
1603
1603
  } = input;
1604
- const keyBufferRef = react.useRef(chunkTDUDH7S4_js.createPresentationKeyBuffer());
1604
+ const keyBufferRef = react.useRef(chunkEFSQW6S5_js.createPresentationKeyBuffer());
1605
1605
  react.useEffect(() => {
1606
- if (mode !== "present" || !chunkTDUDH7S4_js.acceptsPresentationInput()) {
1607
- keyBufferRef.current = chunkTDUDH7S4_js.createPresentationKeyBuffer();
1606
+ if (mode !== "present" || !chunkEFSQW6S5_js.acceptsPresentationInput()) {
1607
+ keyBufferRef.current = chunkEFSQW6S5_js.createPresentationKeyBuffer();
1608
1608
  return;
1609
1609
  }
1610
1610
  const handleKeyDown = (event) => {
1611
- const mapped = chunkTDUDH7S4_js.mapPresentationKey(event, keyBufferRef.current);
1611
+ const mapped = chunkEFSQW6S5_js.mapPresentationKey(event, keyBufferRef.current);
1612
1612
  if (mapped.action === "none") {
1613
1613
  return;
1614
1614
  }
@@ -1628,12 +1628,12 @@ function usePresentationKeyboard(input) {
1628
1628
  movePresentationSlide(-1);
1629
1629
  return;
1630
1630
  case "first": {
1631
- const first = chunkTDUDH7S4_js.firstShowSlideIndex(showSlideIndexes);
1631
+ const first = chunkEFSQW6S5_js.firstShowSlideIndex(showSlideIndexes);
1632
1632
  navigateToSlide(first ?? 0);
1633
1633
  return;
1634
1634
  }
1635
1635
  case "last": {
1636
- const last = chunkTDUDH7S4_js.lastShowSlideIndex(showSlideIndexes);
1636
+ const last = chunkEFSQW6S5_js.lastShowSlideIndex(showSlideIndexes);
1637
1637
  navigateToSlide(last ?? Math.max(0, slideCount - 1));
1638
1638
  return;
1639
1639
  }
@@ -1788,7 +1788,7 @@ function useRehearsalTimings(input) {
1788
1788
 
1789
1789
  // src/viewer/hooks/presentation-mode/presentation-actions.ts
1790
1790
  function handlePresentationActionImpl(action, deps) {
1791
- chunkTDUDH7S4_js.runPresentationAction(
1791
+ chunkEFSQW6S5_js.runPresentationAction(
1792
1792
  action,
1793
1793
  { slideCount: deps.slidesLength },
1794
1794
  {
@@ -1810,7 +1810,7 @@ function handlePresentationActionImpl(action, deps) {
1810
1810
  function executeSlideTransition(nextSlideIndex, deps) {
1811
1811
  const incomingSlide = deps.slides[nextSlideIndex];
1812
1812
  const transition = incomingSlide?.transition;
1813
- const durationMs = deps.playTransition ? chunkTDUDH7S4_js.resolveTransitionDurationMs(transition) : 0;
1813
+ const durationMs = deps.playTransition ? chunkEFSQW6S5_js.resolveTransitionDurationMs(transition) : 0;
1814
1814
  deps.clearPresentationTimers();
1815
1815
  deps.setPresentationSlideIndex(nextSlideIndex);
1816
1816
  deps.onSetActiveSlideIndex(nextSlideIndex);
@@ -1869,7 +1869,7 @@ function useSlideNavigation(input) {
1869
1869
  });
1870
1870
  const scheduleAutoAdvanceForSlide = react.useCallback(
1871
1871
  (slideIndex) => {
1872
- const delayMs = chunkTDUDH7S4_js.resolveAutoAdvanceDelayMs(slides[slideIndex], { useTimings });
1872
+ const delayMs = chunkEFSQW6S5_js.resolveAutoAdvanceDelayMs(slides[slideIndex], { useTimings });
1873
1873
  if (delayMs === void 0) {
1874
1874
  return;
1875
1875
  }
@@ -1892,7 +1892,7 @@ function useSlideNavigation(input) {
1892
1892
  if (availableSlideIndexes.length === 0) {
1893
1893
  return;
1894
1894
  }
1895
- const pastLastSlide = direction === 1 && !chunkTDUDH7S4_js.hasShowSlideAfter(presentationSlideIndex, availableSlideIndexes);
1895
+ const pastLastSlide = direction === 1 && !chunkEFSQW6S5_js.hasShowSlideAfter(presentationSlideIndex, availableSlideIndexes);
1896
1896
  if (rehearsing && pastLastSlide) {
1897
1897
  recordCurrentSlideTime(presentationSlideIndex);
1898
1898
  try {
@@ -1910,9 +1910,9 @@ function useSlideNavigation(input) {
1910
1910
  onAdvancePastLastSlide();
1911
1911
  return;
1912
1912
  }
1913
- const nextSlideIndex = direction === 1 ? chunkTDUDH7S4_js.nextShowSlideIndex(presentationSlideIndex, availableSlideIndexes, {
1913
+ const nextSlideIndex = direction === 1 ? chunkEFSQW6S5_js.nextShowSlideIndex(presentationSlideIndex, availableSlideIndexes, {
1914
1914
  loop: Boolean(loopContinuously) && !rehearsing
1915
- }) : chunkTDUDH7S4_js.previousShowSlideIndex(presentationSlideIndex, availableSlideIndexes);
1915
+ }) : chunkEFSQW6S5_js.previousShowSlideIndex(presentationSlideIndex, availableSlideIndexes);
1916
1916
  if (nextSlideIndex === void 0 || nextSlideIndex === presentationSlideIndex) {
1917
1917
  return;
1918
1918
  }
@@ -2053,17 +2053,17 @@ function useZoomNavigation(input) {
2053
2053
  };
2054
2054
  }
2055
2055
  function usePresenterConsole(slideIndex) {
2056
- const timerRef = react.useRef(chunkTDUDH7S4_js.createPresenterTimer());
2057
- const [snapshot, setSnapshot] = react.useState(() => chunkTDUDH7S4_js.createInitialPresentationSnapshot(slideIndex));
2056
+ const timerRef = react.useRef(chunkEFSQW6S5_js.createPresenterTimer());
2057
+ const [snapshot, setSnapshot] = react.useState(() => chunkEFSQW6S5_js.createInitialPresentationSnapshot(slideIndex));
2058
2058
  const patch = react.useCallback((value) => {
2059
- setSnapshot((current) => chunkTDUDH7S4_js.mergePresentationSnapshot(current, value));
2059
+ setSnapshot((current) => chunkEFSQW6S5_js.mergePresentationSnapshot(current, value));
2060
2060
  }, []);
2061
2061
  react.useEffect(() => patch({ slideIndex }), [patch, slideIndex]);
2062
2062
  react.useEffect(() => {
2063
2063
  const timer = window.setInterval(() => {
2064
2064
  patch({
2065
2065
  paused: timerRef.current.paused,
2066
- elapsedMs: chunkTDUDH7S4_js.presenterElapsed(timerRef.current)
2066
+ elapsedMs: chunkEFSQW6S5_js.presenterElapsed(timerRef.current)
2067
2067
  });
2068
2068
  }, 1e3);
2069
2069
  return () => window.clearInterval(timer);
@@ -2073,19 +2073,19 @@ function usePresenterConsole(slideIndex) {
2073
2073
  applyAudienceSnapshot: setSnapshot,
2074
2074
  setBlackout: (blackout) => patch({ blackout }),
2075
2075
  toggleTimer: () => {
2076
- timerRef.current = chunkTDUDH7S4_js.togglePresenterTimer(timerRef.current);
2076
+ timerRef.current = chunkEFSQW6S5_js.togglePresenterTimer(timerRef.current);
2077
2077
  patch({
2078
2078
  paused: timerRef.current.paused,
2079
- elapsedMs: chunkTDUDH7S4_js.presenterElapsed(timerRef.current)
2079
+ elapsedMs: chunkEFSQW6S5_js.presenterElapsed(timerRef.current)
2080
2080
  });
2081
2081
  },
2082
2082
  resetTimer: () => {
2083
- timerRef.current = chunkTDUDH7S4_js.resetPresenterTimer();
2083
+ timerRef.current = chunkEFSQW6S5_js.resetPresenterTimer();
2084
2084
  patch({ paused: false, elapsedMs: 0 });
2085
2085
  },
2086
2086
  stepZoom: (direction) => setSnapshot(
2087
- (current) => chunkTDUDH7S4_js.mergePresentationSnapshot(current, {
2088
- zoom: chunkTDUDH7S4_js.stepPresenterZoom(
2087
+ (current) => chunkEFSQW6S5_js.mergePresentationSnapshot(current, {
2088
+ zoom: chunkEFSQW6S5_js.stepPresenterZoom(
2089
2089
  current.zoom ?? { scale: 1, originX: 0.5, originY: 0.5 },
2090
2090
  direction
2091
2091
  )
@@ -2130,7 +2130,7 @@ function usePresentationMode(input) {
2130
2130
  const [allSlidesOpen, setAllSlidesOpen] = react.useState(false);
2131
2131
  const [endOfShowVisible, setEndOfShowVisible] = react.useState(false);
2132
2132
  const [presentationStartTime, setPresentationStartTime] = react.useState(null);
2133
- const showGuard = react.useMemo(() => chunkTDUDH7S4_js.createPresenterShowGuard(), []);
2133
+ const showGuard = react.useMemo(() => chunkEFSQW6S5_js.createPresenterShowGuard(), []);
2134
2134
  const {
2135
2135
  presentationAnimations,
2136
2136
  presentationElementStates,
@@ -2206,7 +2206,7 @@ function usePresentationMode(input) {
2206
2206
  });
2207
2207
  const movePresentationSlide = react.useCallback(
2208
2208
  (direction, trigger = "explicit") => {
2209
- if (!chunkTDUDH7S4_js.acceptsPresentationInput()) {
2209
+ if (!chunkEFSQW6S5_js.acceptsPresentationInput()) {
2210
2210
  return;
2211
2211
  }
2212
2212
  if (endOfShowVisible) {
@@ -2409,11 +2409,11 @@ function usePresentationMode(input) {
2409
2409
  if (!transitionOverlay || transitionOverlay.transition.type !== "morph") {
2410
2410
  return void 0;
2411
2411
  }
2412
- return chunkTDUDH7S4_js.buildMorphTransitionPlan(
2412
+ return chunkEFSQW6S5_js.buildMorphTransitionPlan(
2413
2413
  slides[transitionOverlay.outgoingSlideIndex],
2414
2414
  slides[transitionOverlay.incomingSlideIndex],
2415
2415
  transitionOverlay.durationMs,
2416
- chunkTDUDH7S4_js.morphOptionToMode(transitionOverlay.transition.morphOption)
2416
+ chunkEFSQW6S5_js.morphOptionToMode(transitionOverlay.transition.morphOption)
2417
2417
  );
2418
2418
  }, [transitionOverlay, slides]);
2419
2419
  const morphedElementStates = react.useMemo(() => {
@@ -2719,7 +2719,7 @@ function findInSlides(slides, findQuery, findMatchCase) {
2719
2719
  const normalised = findMatchCase ? findQuery : findQuery.toLowerCase();
2720
2720
  slides.forEach((slide, slideIndex) => {
2721
2721
  for (const element of slide.elements || []) {
2722
- if (!chunkTDUDH7S4_js.hasTextProperties(element)) {
2722
+ if (!chunkEFSQW6S5_js.hasTextProperties(element)) {
2723
2723
  continue;
2724
2724
  }
2725
2725
  const segments = element.textSegments ?? [];
@@ -2770,7 +2770,7 @@ function applyFindReplacements(slides, toReplace, replaceQuery) {
2770
2770
  continue;
2771
2771
  }
2772
2772
  const element = slide.elements[elIdx];
2773
- if (!chunkTDUDH7S4_js.hasTextProperties(element)) {
2773
+ if (!chunkEFSQW6S5_js.hasTextProperties(element)) {
2774
2774
  continue;
2775
2775
  }
2776
2776
  const segments = [...element.textSegments ?? []];
@@ -3368,7 +3368,7 @@ function useViewerCoreState(_input) {
3368
3368
  const shapeAdjustmentDragStateRef = react.useRef(null);
3369
3369
  const marqueeStateRef = react.useRef(null);
3370
3370
  const isDrawingRef = react.useRef(false);
3371
- const livePatcher = react.useMemo(() => chunkTDUDH7S4_js.createCollaborationLivePatcher(), []);
3371
+ const livePatcher = react.useMemo(() => chunkEFSQW6S5_js.createCollaborationLivePatcher(), []);
3372
3372
  react.useEffect(() => () => livePatcher.dispose(), [livePatcher]);
3373
3373
  const slidesRef = react.useRef([]);
3374
3374
  const [mode, setMode] = react.useState("edit");
@@ -3377,8 +3377,8 @@ function useViewerCoreState(_input) {
3377
3377
  const [slides, setSlides] = react.useState([]);
3378
3378
  const [templateElementsBySlideId, setTemplateElementsBySlideId] = react.useState({});
3379
3379
  const [canvasSize, setCanvasSize] = react.useState({
3380
- width: chunkLE6YA5WB_js.DEFAULT_CANVAS_WIDTH,
3381
- height: chunkLE6YA5WB_js.DEFAULT_CANVAS_HEIGHT
3380
+ width: chunkIDW5UPXW_js.DEFAULT_CANVAS_WIDTH,
3381
+ height: chunkIDW5UPXW_js.DEFAULT_CANVAS_HEIGHT
3382
3382
  });
3383
3383
  const [activeSlideIndex, setActiveSlideIndex] = react.useState(0);
3384
3384
  const [selectedElementId, setSelectedElementId] = react.useState(null);
@@ -3398,7 +3398,7 @@ function useViewerCoreState(_input) {
3398
3398
  const resolved = typeof value === "function" ? value(inlineEditingTextRef.current) : value;
3399
3399
  inlineEditingTextRef.current = resolved;
3400
3400
  setInlineEditingTextBase(value);
3401
- chunkTDUDH7S4_js.publishLiveInlineText(
3401
+ chunkEFSQW6S5_js.publishLiveInlineText(
3402
3402
  livePatcher,
3403
3403
  slidesRef.current[activeSlideIndexRef.current],
3404
3404
  inlineEditingElementIdRef.current,
@@ -3732,7 +3732,7 @@ function useLoadContent({
3732
3732
  );
3733
3733
  }
3734
3734
  const previousHandler = handlerRef.current;
3735
- const handler = new chunkTDUDH7S4_js.PptxHandler();
3735
+ const handler = new chunkEFSQW6S5_js.PptxHandler();
3736
3736
  const parsed = await handler.load(buffer);
3737
3737
  if (cancelled || token !== renderTokenRef.current) {
3738
3738
  handler.dispose();
@@ -3744,7 +3744,7 @@ function useLoadContent({
3744
3744
  handlerRef.current = null;
3745
3745
  const mediaElements = [];
3746
3746
  for (const slide of parsed.slides) {
3747
- chunkTDUDH7S4_js.collectMediaElements(slide.elements, mediaElements);
3747
+ chunkEFSQW6S5_js.collectMediaElements(slide.elements, mediaElements);
3748
3748
  }
3749
3749
  for (const url of mediaDataUrls.values()) {
3750
3750
  if (url.startsWith("blob:")) {
@@ -3785,7 +3785,7 @@ function useLoadContent({
3785
3785
  }
3786
3786
  })
3787
3787
  );
3788
- const { paths: imagePaths, refs: imageRefs } = chunkTDUDH7S4_js.collectImagePaths(parsed.slides);
3788
+ const { paths: imagePaths, refs: imageRefs } = chunkEFSQW6S5_js.collectImagePaths(parsed.slides);
3789
3789
  let nextSlides = parsed.slides;
3790
3790
  if (imagePaths.size > 0) {
3791
3791
  const resolvedMap = /* @__PURE__ */ new Map();
@@ -3840,12 +3840,12 @@ function useLoadContent({
3840
3840
  }
3841
3841
  }
3842
3842
  handlerRef.current = handler;
3843
- const partition = chunkLE6YA5WB_js.partitionTemplateElements(nextSlides);
3843
+ const partition = chunkIDW5UPXW_js.partitionTemplateElements(nextSlides);
3844
3844
  setSlides(partition.slides);
3845
3845
  setTemplateElementsBySlideId(partition.templateElementsBySlideId);
3846
3846
  setCanvasSize({
3847
- width: parsed.width ?? chunkLE6YA5WB_js.DEFAULT_CANVAS_WIDTH,
3848
- height: parsed.height ?? chunkLE6YA5WB_js.DEFAULT_CANVAS_HEIGHT
3847
+ width: parsed.width ?? chunkIDW5UPXW_js.DEFAULT_CANVAS_WIDTH,
3848
+ height: parsed.height ?? chunkIDW5UPXW_js.DEFAULT_CANVAS_HEIGHT
3849
3849
  });
3850
3850
  setHeaderFooter(parsed.headerFooter ?? {});
3851
3851
  setLayoutOptions(parsed.layoutOptions ?? []);
@@ -3874,7 +3874,7 @@ function useLoadContent({
3874
3874
  setHasMacros(parsed.hasMacros === true);
3875
3875
  setHasDigitalSignatures(parsed.hasDigitalSignatures === true);
3876
3876
  setDigitalSignatureCount(parsed.digitalSignatureCount ?? 0);
3877
- setGuides(chunkTDUDH7S4_js.buildInitialGuides(parsed.presentationGuides, parsed.slides[0]?.guides));
3877
+ setGuides(chunkEFSQW6S5_js.buildInitialGuides(parsed.presentationGuides, parsed.slides[0]?.guides));
3878
3878
  setActiveSlideIndex(0);
3879
3879
  clearSelection();
3880
3880
  setIsDirty(false);
@@ -3882,7 +3882,7 @@ function useLoadContent({
3882
3882
  onContentApplied?.();
3883
3883
  } catch (err) {
3884
3884
  if (!cancelled && token === renderTokenRef.current) {
3885
- if (err instanceof chunkTDUDH7S4_js.EncryptedFileError) {
3885
+ if (err instanceof chunkEFSQW6S5_js.EncryptedFileError) {
3886
3886
  setIsEncrypted(true);
3887
3887
  } else {
3888
3888
  setError(err instanceof Error ? err.message : String(err));
@@ -3959,7 +3959,7 @@ function useAutosave(input) {
3959
3959
  isSavingRef.current = false;
3960
3960
  return;
3961
3961
  }
3962
- await chunkTDUDH7S4_js.saveAutosaveSnapshot(filePathRef.current, data);
3962
+ await chunkEFSQW6S5_js.saveAutosaveSnapshot(filePathRef.current, data);
3963
3963
  setAutosaveStatus({ state: "saved", timestamp: Date.now() });
3964
3964
  } catch (err) {
3965
3965
  setAutosaveStatus({
@@ -4024,7 +4024,7 @@ function useElementOperations(input) {
4024
4024
  }, [applySelection, setInlineEditingElementId, setContextMenuState]);
4025
4025
  const updateElementById = react.useCallback(
4026
4026
  (elementId, updates) => {
4027
- if (chunkTDUDH7S4_js.isTemplateElementId(elementId)) {
4027
+ if (chunkEFSQW6S5_js.isTemplateElementId(elementId)) {
4028
4028
  const slideId = activeSlide?.id;
4029
4029
  if (slideId) {
4030
4030
  setTemplateElementsBySlideId((prev) => ({
@@ -4064,7 +4064,7 @@ function useElementOperations(input) {
4064
4064
  );
4065
4065
  const updateSelectedShapeStyle = react.useCallback(
4066
4066
  (updates) => {
4067
- if (!selectedElement || !chunkTDUDH7S4_js.hasShapeProperties(selectedElement)) {
4067
+ if (!selectedElement || !chunkEFSQW6S5_js.hasShapeProperties(selectedElement)) {
4068
4068
  return;
4069
4069
  }
4070
4070
  updateSelectedElement({
@@ -4075,17 +4075,17 @@ function useElementOperations(input) {
4075
4075
  );
4076
4076
  const updateSelectedTextStyle = react.useCallback(
4077
4077
  (updates) => {
4078
- if (!selectedElement || !chunkTDUDH7S4_js.hasTextProperties(selectedElement)) {
4078
+ if (!selectedElement || !chunkEFSQW6S5_js.hasTextProperties(selectedElement)) {
4079
4079
  return;
4080
4080
  }
4081
- const inlineSel = chunkTDUDH7S4_js.getInlineEditorSelection(selectedElement.textSegments);
4081
+ const inlineSel = chunkEFSQW6S5_js.getInlineEditorSelection(selectedElement.textSegments);
4082
4082
  if (inlineSel && selectedElement.textSegments) {
4083
- const { newSegments: newSegments2, newSelection } = chunkTDUDH7S4_js.applyStyleToSelectedSegments(
4083
+ const { newSegments: newSegments2, newSelection } = chunkEFSQW6S5_js.applyStyleToSelectedSegments(
4084
4084
  selectedElement.textSegments,
4085
4085
  inlineSel,
4086
4086
  updates
4087
4087
  );
4088
- chunkTDUDH7S4_js.setPendingSelectionRestore(newSelection);
4088
+ chunkEFSQW6S5_js.setPendingSelectionRestore(newSelection);
4089
4089
  updateSelectedElement({
4090
4090
  textSegments: newSegments2
4091
4091
  });
@@ -4105,12 +4105,12 @@ function useElementOperations(input) {
4105
4105
  );
4106
4106
  const updateSelectedTextCase = react.useCallback(
4107
4107
  (mode) => {
4108
- if (!selectedElement || !chunkTDUDH7S4_js.hasTextProperties(selectedElement)) {
4108
+ if (!selectedElement || !chunkEFSQW6S5_js.hasTextProperties(selectedElement)) {
4109
4109
  return;
4110
4110
  }
4111
- const inlineSel = chunkTDUDH7S4_js.getInlineEditorSelection(selectedElement.textSegments);
4111
+ const inlineSel = chunkEFSQW6S5_js.getInlineEditorSelection(selectedElement.textSegments);
4112
4112
  if (inlineSel && selectedElement.textSegments) {
4113
- const newSegments = chunkTDUDH7S4_js.applyCaseTransformToSegments(
4113
+ const newSegments = chunkEFSQW6S5_js.applyCaseTransformToSegments(
4114
4114
  selectedElement.textSegments,
4115
4115
  inlineSel,
4116
4116
  mode
@@ -4120,14 +4120,14 @@ function useElementOperations(input) {
4120
4120
  }
4121
4121
  const updates = {};
4122
4122
  if (selectedElement.textSegments && selectedElement.textSegments.length > 0) {
4123
- updates.textSegments = chunkTDUDH7S4_js.applyCaseTransformToSegments(
4123
+ updates.textSegments = chunkEFSQW6S5_js.applyCaseTransformToSegments(
4124
4124
  selectedElement.textSegments,
4125
4125
  null,
4126
4126
  mode
4127
4127
  );
4128
4128
  }
4129
4129
  if (typeof selectedElement.text === "string") {
4130
- updates.text = chunkTDUDH7S4_js.transformTextCase(selectedElement.text, mode);
4130
+ updates.text = chunkEFSQW6S5_js.transformTextCase(selectedElement.text, mode);
4131
4131
  }
4132
4132
  updateSelectedElement(updates);
4133
4133
  },
@@ -4182,7 +4182,7 @@ function useSectionOperations(input) {
4182
4182
  const { sections, setSections, slides, setSlides, markDirty } = input;
4183
4183
  const addSection2 = react.useCallback(
4184
4184
  (name, afterSlideIndex) => {
4185
- const result = chunkTDUDH7S4_js.addSection(sections, slides, name, afterSlideIndex);
4185
+ const result = chunkEFSQW6S5_js.addSection(sections, slides, name, afterSlideIndex);
4186
4186
  setSlides(result.slides);
4187
4187
  setSections(result.sections);
4188
4188
  markDirty();
@@ -4191,7 +4191,7 @@ function useSectionOperations(input) {
4191
4191
  );
4192
4192
  const renameSection2 = react.useCallback(
4193
4193
  (sectionId, newName) => {
4194
- const result = chunkTDUDH7S4_js.renameSection(sections, slides, sectionId, newName);
4194
+ const result = chunkEFSQW6S5_js.renameSection(sections, slides, sectionId, newName);
4195
4195
  setSections(result.sections);
4196
4196
  setSlides(result.slides);
4197
4197
  markDirty();
@@ -4200,7 +4200,7 @@ function useSectionOperations(input) {
4200
4200
  );
4201
4201
  const deleteSection2 = react.useCallback(
4202
4202
  (sectionId) => {
4203
- const result = chunkTDUDH7S4_js.deleteSection(sections, slides, sectionId);
4203
+ const result = chunkEFSQW6S5_js.deleteSection(sections, slides, sectionId);
4204
4204
  setSections(result.sections);
4205
4205
  setSlides(result.slides);
4206
4206
  markDirty();
@@ -4209,21 +4209,21 @@ function useSectionOperations(input) {
4209
4209
  );
4210
4210
  const moveSectionUp2 = react.useCallback(
4211
4211
  (sectionId) => {
4212
- setSections(chunkTDUDH7S4_js.moveSectionUp(sections, sectionId));
4212
+ setSections(chunkEFSQW6S5_js.moveSectionUp(sections, sectionId));
4213
4213
  markDirty();
4214
4214
  },
4215
4215
  [sections, setSections, markDirty]
4216
4216
  );
4217
4217
  const moveSectionDown2 = react.useCallback(
4218
4218
  (sectionId) => {
4219
- setSections(chunkTDUDH7S4_js.moveSectionDown(sections, sectionId));
4219
+ setSections(chunkEFSQW6S5_js.moveSectionDown(sections, sectionId));
4220
4220
  markDirty();
4221
4221
  },
4222
4222
  [sections, setSections, markDirty]
4223
4223
  );
4224
4224
  const moveSlidesToSection2 = react.useCallback(
4225
4225
  (slideIndexes, targetSectionId) => {
4226
- const result = chunkTDUDH7S4_js.moveSlidesToSection(sections, slides, slideIndexes, targetSectionId);
4226
+ const result = chunkEFSQW6S5_js.moveSlidesToSection(sections, slides, slideIndexes, targetSectionId);
4227
4227
  setSlides(result.slides);
4228
4228
  setSections(result.sections);
4229
4229
  markDirty();
@@ -4242,19 +4242,19 @@ function useSectionOperations(input) {
4242
4242
 
4243
4243
  // src/viewer/hooks/pointer-move-handlers.ts
4244
4244
  function computeResizeGeometry(handle, startX, startY, startWidth, startHeight, dx, dy, snapToGrid, gridSpacingPx) {
4245
- const resized = chunkTDUDH7S4_js.applyResize(
4245
+ const resized = chunkEFSQW6S5_js.applyResize(
4246
4246
  { x: startX, y: startY, width: startWidth, height: startHeight },
4247
4247
  handle,
4248
4248
  dx,
4249
4249
  dy,
4250
4250
  1,
4251
- { minSize: chunkLE6YA5WB_js.MIN_ELEMENT_SIZE }
4251
+ { minSize: chunkIDW5UPXW_js.MIN_ELEMENT_SIZE }
4252
4252
  );
4253
4253
  const box = { x: resized.x, y: resized.y, width: resized.width, height: resized.height };
4254
4254
  if (!snapToGrid) {
4255
4255
  return box;
4256
4256
  }
4257
- return chunkTDUDH7S4_js.snapBoxToGrid(box, handle, gridSpacingPx, chunkLE6YA5WB_js.MIN_ELEMENT_SIZE);
4257
+ return chunkEFSQW6S5_js.snapBoxToGrid(box, handle, gridSpacingPx, chunkIDW5UPXW_js.MIN_ELEMENT_SIZE);
4258
4258
  }
4259
4259
  function computeAdjustmentValue(startAdjustment, dx, startWidth) {
4260
4260
  const range = startWidth || 200;
@@ -4372,7 +4372,7 @@ function processDragMove(e, drag, editorScale, snapToGrid, snapToShape, gridSpac
4372
4372
  width: el.width,
4373
4373
  height: el.height
4374
4374
  }));
4375
- const snapResult = chunkTDUDH7S4_js.computeSnapToShape(
4375
+ const snapResult = chunkEFSQW6S5_js.computeSnapToShape(
4376
4376
  targetX,
4377
4377
  targetY,
4378
4378
  primaryEl.width,
@@ -4411,7 +4411,7 @@ function processDragMove(e, drag, editorScale, snapToGrid, snapToShape, gridSpac
4411
4411
  if (live) {
4412
4412
  for (const id of Object.keys(drag.startPositionsById)) {
4413
4413
  const start = drag.startPositionsById[id];
4414
- chunkTDUDH7S4_js.publishLiveGeometry(live.patcher, live.slideId, id, {
4414
+ chunkEFSQW6S5_js.publishLiveGeometry(live.patcher, live.slideId, id, {
4415
4415
  x: start.x + appliedDx,
4416
4416
  y: start.y + appliedDy
4417
4417
  });
@@ -4445,15 +4445,15 @@ function processResizeMove(e, rs, editorScale, snapToGrid, gridSpacingPx, live)
4445
4445
  if (rs.domEl) {
4446
4446
  rs.domEl.style.left = `${geo.x}px`;
4447
4447
  rs.domEl.style.top = `${geo.y}px`;
4448
- rs.domEl.style.width = `${Math.max(geo.width, chunkLE6YA5WB_js.MIN_ELEMENT_SIZE)}px`;
4449
- rs.domEl.style.height = `${Math.max(geo.height, chunkLE6YA5WB_js.MIN_ELEMENT_SIZE)}px`;
4448
+ rs.domEl.style.width = `${Math.max(geo.width, chunkIDW5UPXW_js.MIN_ELEMENT_SIZE)}px`;
4449
+ rs.domEl.style.height = `${Math.max(geo.height, chunkIDW5UPXW_js.MIN_ELEMENT_SIZE)}px`;
4450
4450
  }
4451
4451
  if (live) {
4452
- chunkTDUDH7S4_js.publishLiveGeometry(live.patcher, live.slideId, rs.elementId, {
4452
+ chunkEFSQW6S5_js.publishLiveGeometry(live.patcher, live.slideId, rs.elementId, {
4453
4453
  x: geo.x,
4454
4454
  y: geo.y,
4455
- width: Math.max(geo.width, chunkLE6YA5WB_js.MIN_ELEMENT_SIZE),
4456
- height: Math.max(geo.height, chunkLE6YA5WB_js.MIN_ELEMENT_SIZE)
4455
+ width: Math.max(geo.width, chunkIDW5UPXW_js.MIN_ELEMENT_SIZE),
4456
+ height: Math.max(geo.height, chunkIDW5UPXW_js.MIN_ELEMENT_SIZE)
4457
4457
  });
4458
4458
  }
4459
4459
  }
@@ -4533,13 +4533,13 @@ function processPointerUp(input) {
4533
4533
  if (i !== activeSlideIndex) {
4534
4534
  return s;
4535
4535
  }
4536
- const rerouted = chunkTDUDH7S4_js.rerouteConnectorsForMovedElements(s.elements, movedIds);
4536
+ const rerouted = chunkEFSQW6S5_js.rerouteConnectorsForMovedElements(s.elements, movedIds);
4537
4537
  if (rerouted.length === 0) {
4538
4538
  return s;
4539
4539
  }
4540
4540
  return {
4541
4541
  ...s,
4542
- elements: chunkTDUDH7S4_js.applyReroutedConnectors(s.elements, rerouted)
4542
+ elements: chunkEFSQW6S5_js.applyReroutedConnectors(s.elements, rerouted)
4543
4543
  };
4544
4544
  })
4545
4545
  );
@@ -4561,9 +4561,9 @@ function processPointerUp(input) {
4561
4561
  }
4562
4562
  function commitMarquee(marquee, editTemplateMode, templateElements, activeSlide, applySelection, clearSelection) {
4563
4563
  const sourceElements = editTemplateMode ? templateElements : activeSlide?.elements ?? [];
4564
- const hitIds = chunkTDUDH7S4_js.computeMarqueeHitIds(marquee, sourceElements);
4564
+ const hitIds = chunkEFSQW6S5_js.computeMarqueeHitIds(marquee, sourceElements);
4565
4565
  if (marquee.additive) {
4566
- const merged = chunkTDUDH7S4_js.mergeAdditiveSelection(marquee.baseSelectionIds, hitIds);
4566
+ const merged = chunkEFSQW6S5_js.mergeAdditiveSelection(marquee.baseSelectionIds, hitIds);
4567
4567
  if (merged.length > 0) {
4568
4568
  applySelection(merged[0], merged);
4569
4569
  } else {
@@ -4586,8 +4586,8 @@ function commitDrag(drag, editTemplateMode, activeSlide, activeSlideIndex, setTe
4586
4586
  }
4587
4587
  return { ...el, x: start.x + dx, y: start.y + dy };
4588
4588
  });
4589
- const rerouted = chunkTDUDH7S4_js.rerouteConnectorsForMovedElements(movedElements, movedIds);
4590
- return chunkTDUDH7S4_js.applyReroutedConnectors(movedElements, rerouted);
4589
+ const rerouted = chunkEFSQW6S5_js.rerouteConnectorsForMovedElements(movedElements, movedIds);
4590
+ return chunkEFSQW6S5_js.applyReroutedConnectors(movedElements, rerouted);
4591
4591
  };
4592
4592
  if (editTemplateMode) {
4593
4593
  const slideId = activeSlide?.id;
@@ -4743,9 +4743,9 @@ function useCanvasInteractions(input) {
4743
4743
  return;
4744
4744
  }
4745
4745
  const el = elementLookup.get(editId);
4746
- if (el && chunkTDUDH7S4_js.hasTextProperties(el)) {
4746
+ if (el && chunkEFSQW6S5_js.hasTextProperties(el)) {
4747
4747
  const committedText = transformCommittedText ? transformCommittedText(inlineEditingText) : inlineEditingText;
4748
- const newSegments = chunkTDUDH7S4_js.remapTextToSegments(committedText, el.textSegments, el.textStyle);
4748
+ const newSegments = chunkEFSQW6S5_js.remapTextToSegments(committedText, el.textSegments, el.textStyle);
4749
4749
  ops.updateElementById(editId, {
4750
4750
  text: committedText,
4751
4751
  textSegments: newSegments
@@ -4756,7 +4756,7 @@ function useCanvasInteractions(input) {
4756
4756
  setInlineEditingText("");
4757
4757
  };
4758
4758
  const openEquationEditorForElement = (el) => {
4759
- if (!chunkTDUDH7S4_js.hasTextProperties(el)) {
4759
+ if (!chunkEFSQW6S5_js.hasTextProperties(el)) {
4760
4760
  return false;
4761
4761
  }
4762
4762
  const eqSeg = el.textSegments?.find((seg) => seg.equationXml);
@@ -4785,7 +4785,7 @@ function useCanvasInteractions(input) {
4785
4785
  justSelectedRef.current = false;
4786
4786
  } else {
4787
4787
  const el = elementLookup.get(elementId);
4788
- if (el && chunkTDUDH7S4_js.hasTextProperties(el) && !el.locks?.noTextEdit) {
4788
+ if (el && chunkEFSQW6S5_js.hasTextProperties(el) && !el.locks?.noTextEdit) {
4789
4789
  if (!openEquationEditorForElement(el)) {
4790
4790
  setInlineEditingElementId(elementId);
4791
4791
  setInlineEditingText(el.text ?? "");
@@ -4804,7 +4804,7 @@ function useCanvasInteractions(input) {
4804
4804
  if (openEquationEditorForElement(el)) {
4805
4805
  return;
4806
4806
  }
4807
- if (chunkTDUDH7S4_js.hasTextProperties(el)) {
4807
+ if (chunkEFSQW6S5_js.hasTextProperties(el)) {
4808
4808
  setInlineEditingElementId(elementId);
4809
4809
  setInlineEditingText(el.text ?? "");
4810
4810
  }
@@ -4997,7 +4997,7 @@ function createFileHandlers(deps) {
4997
4997
  h = Math.round(h * scale);
4998
4998
  }
4999
4999
  addElement({
5000
- id: chunkTDUDH7S4_js.generateElementId(),
5000
+ id: chunkEFSQW6S5_js.generateElementId(),
5001
5001
  type: "image",
5002
5002
  x: Math.round((canvasSize.width - w) / 2),
5003
5003
  y: Math.round((canvasSize.height - h) / 2),
@@ -5008,7 +5008,7 @@ function createFileHandlers(deps) {
5008
5008
  };
5009
5009
  img.onerror = () => {
5010
5010
  addElement({
5011
- id: chunkTDUDH7S4_js.generateElementId(),
5011
+ id: chunkEFSQW6S5_js.generateElementId(),
5012
5012
  type: "image",
5013
5013
  x: 100,
5014
5014
  y: 100,
@@ -5034,7 +5034,7 @@ function createFileHandlers(deps) {
5034
5034
  const elFilePath = file.path;
5035
5035
  const insertMediaElement = (mediaSourceUrl, width, height) => {
5036
5036
  addElement({
5037
- id: chunkTDUDH7S4_js.generateElementId(),
5037
+ id: chunkEFSQW6S5_js.generateElementId(),
5038
5038
  type: "media",
5039
5039
  mediaType,
5040
5040
  mediaMimeType: file.type || void 0,
@@ -5209,13 +5209,13 @@ function createStructuredElementHandlers(deps) {
5209
5209
  return;
5210
5210
  }
5211
5211
  addElement({
5212
- id: chunkTDUDH7S4_js.generateElementId(),
5212
+ id: chunkEFSQW6S5_js.generateElementId(),
5213
5213
  type: "smartArt",
5214
5214
  x: 100,
5215
5215
  y: 120,
5216
5216
  width: 600,
5217
5217
  height: 340,
5218
- smartArtData: chunkTDUDH7S4_js.buildSmartArtPresetData(
5218
+ smartArtData: chunkEFSQW6S5_js.buildSmartArtPresetData(
5219
5219
  layout,
5220
5220
  defaultItems,
5221
5221
  (i) => `node-${Date.now()}-${i}-${Math.random().toString(36).slice(2, 8)}`
@@ -5227,7 +5227,7 @@ function createStructuredElementHandlers(deps) {
5227
5227
  return;
5228
5228
  }
5229
5229
  addElement({
5230
- id: chunkTDUDH7S4_js.generateElementId(),
5230
+ id: chunkEFSQW6S5_js.generateElementId(),
5231
5231
  type: "shape",
5232
5232
  x: 120,
5233
5233
  y: 200,
@@ -5286,7 +5286,7 @@ function createStructuredElementHandlers(deps) {
5286
5286
  const displayText = value || fieldTexts[fieldType] || fieldType;
5287
5287
  const fieldGuid = `{${crypto.randomUUID().toUpperCase()}}`;
5288
5288
  addElement({
5289
- id: chunkTDUDH7S4_js.generateElementId(),
5289
+ id: chunkEFSQW6S5_js.generateElementId(),
5290
5290
  type: "shape",
5291
5291
  x: 120,
5292
5292
  y: 200,
@@ -5308,11 +5308,11 @@ function createStructuredElementHandlers(deps) {
5308
5308
  if (!activeSlide) {
5309
5309
  return;
5310
5310
  }
5311
- const preset = chunkTDUDH7S4_js.ACTION_BUTTON_PRESETS.find((p) => p.shapeType === shapeType);
5311
+ const preset = chunkEFSQW6S5_js.ACTION_BUTTON_PRESETS.find((p) => p.shapeType === shapeType);
5312
5312
  if (!preset) {
5313
5313
  return;
5314
5314
  }
5315
- const defaultPptxAction = chunkTDUDH7S4_js.elementActionToPptxAction({
5315
+ const defaultPptxAction = chunkEFSQW6S5_js.elementActionToPptxAction({
5316
5316
  trigger: "click",
5317
5317
  type: preset.defaultAction
5318
5318
  });
@@ -5321,7 +5321,7 @@ function createStructuredElementHandlers(deps) {
5321
5321
  defaultPptxAction.highlightClick = true;
5322
5322
  }
5323
5323
  addElement({
5324
- id: chunkTDUDH7S4_js.generateElementId(),
5324
+ id: chunkEFSQW6S5_js.generateElementId(),
5325
5325
  type: "shape",
5326
5326
  x: 150,
5327
5327
  y: 150,
@@ -5388,14 +5388,14 @@ function useInsertElements(input) {
5388
5388
  return;
5389
5389
  }
5390
5390
  addElement({
5391
- id: chunkTDUDH7S4_js.generateElementId(),
5391
+ id: chunkEFSQW6S5_js.generateElementId(),
5392
5392
  type: "text",
5393
5393
  x: 100,
5394
5394
  y: 100,
5395
5395
  width: 300,
5396
5396
  height: 60,
5397
5397
  text: "",
5398
- textStyle: { fontSize: chunkLE6YA5WB_js.DEFAULT_TEXT_FONT_SIZE }
5398
+ textStyle: { fontSize: chunkIDW5UPXW_js.DEFAULT_TEXT_FONT_SIZE }
5399
5399
  });
5400
5400
  };
5401
5401
  const handleAddShape = () => {
@@ -5403,7 +5403,7 @@ function useInsertElements(input) {
5403
5403
  return;
5404
5404
  }
5405
5405
  addElement({
5406
- id: chunkTDUDH7S4_js.generateElementId(),
5406
+ id: chunkEFSQW6S5_js.generateElementId(),
5407
5407
  type: "shape",
5408
5408
  x: 150,
5409
5409
  y: 150,
@@ -5422,15 +5422,15 @@ function useInsertElements(input) {
5422
5422
  return;
5423
5423
  }
5424
5424
  addElement({
5425
- ...chunkTDUDH7S4_js.newTableElement(chunkLE6YA5WB_js.DEFAULT_TABLE_ROWS, chunkLE6YA5WB_js.DEFAULT_TABLE_COLUMNS, 100, 200),
5426
- id: chunkTDUDH7S4_js.generateElementId()
5425
+ ...chunkEFSQW6S5_js.newTableElement(chunkIDW5UPXW_js.DEFAULT_TABLE_ROWS, chunkIDW5UPXW_js.DEFAULT_TABLE_COLUMNS, 100, 200),
5426
+ id: chunkEFSQW6S5_js.generateElementId()
5427
5427
  });
5428
5428
  };
5429
5429
  const handleAddChart = (chartType) => {
5430
5430
  if (!activeSlide) {
5431
5431
  return;
5432
5432
  }
5433
- addElement(chunkTDUDH7S4_js.createDefaultChartElement(chartType));
5433
+ addElement(chunkEFSQW6S5_js.createDefaultChartElement(chartType));
5434
5434
  };
5435
5435
  const structured = createStructuredElementHandlers({
5436
5436
  activeSlide,
@@ -5500,7 +5500,7 @@ function useClipboardHandlers(input) {
5500
5500
  if (!selectedElement) {
5501
5501
  return;
5502
5502
  }
5503
- setClipboardPayload(chunkTDUDH7S4_js.buildElementClipboardPayload(selectedElement, editTemplateMode));
5503
+ setClipboardPayload(chunkEFSQW6S5_js.buildElementClipboardPayload(selectedElement, editTemplateMode));
5504
5504
  };
5505
5505
  const handleDelete = () => {
5506
5506
  const idsToDelete = effectiveSelectedIds;
@@ -5517,7 +5517,7 @@ function useClipboardHandlers(input) {
5517
5517
  handleDelete();
5518
5518
  };
5519
5519
  const insertClone = (source) => {
5520
- const clone = chunkTDUDH7S4_js.cloneElementForPaste(source, { intoTemplate: editTemplateMode });
5520
+ const clone = chunkEFSQW6S5_js.cloneElementForPaste(source, { intoTemplate: editTemplateMode });
5521
5521
  ops.updateActiveElements((els) => [...els, clone]);
5522
5522
  ops.applySelection(clone.id);
5523
5523
  history.markDirty();
@@ -5552,7 +5552,7 @@ function resolveShapePath(el) {
5552
5552
  return el.pathData;
5553
5553
  }
5554
5554
  if ("shapeType" in el && typeof el.shapeType === "string") {
5555
- const clipPath = chunkTDUDH7S4_js.getPresetShapeClipPath(el.shapeType);
5555
+ const clipPath = chunkEFSQW6S5_js.getPresetShapeClipPath(el.shapeType);
5556
5556
  if (clipPath) {
5557
5557
  const svgPath = clipPathToSvgPath(clipPath, el.width, el.height);
5558
5558
  if (svgPath) {
@@ -5603,7 +5603,7 @@ function clipPathToSvgPath(clipPath, width, height) {
5603
5603
  return parts.join(" ");
5604
5604
  }
5605
5605
  function transformPathToGlobal(pathData, el) {
5606
- const polys = chunkTDUDH7S4_js.svgPathToPolygons(pathData);
5606
+ const polys = chunkEFSQW6S5_js.svgPathToPolygons(pathData);
5607
5607
  if (polys.length === 0) {
5608
5608
  return pathData;
5609
5609
  }
@@ -5623,10 +5623,10 @@ function transformPathToGlobal(pathData, el) {
5623
5623
  y: pt.y * scaleY + el.y
5624
5624
  }))
5625
5625
  );
5626
- return chunkTDUDH7S4_js.polygonsToSvgPath(transformed);
5626
+ return chunkEFSQW6S5_js.polygonsToSvgPath(transformed);
5627
5627
  }
5628
5628
  function transformPathToLocal(pathData, x, y, _width, _height) {
5629
- const polys = chunkTDUDH7S4_js.svgPathToPolygons(pathData);
5629
+ const polys = chunkEFSQW6S5_js.svgPathToPolygons(pathData);
5630
5630
  if (polys.length === 0) {
5631
5631
  return pathData;
5632
5632
  }
@@ -5636,10 +5636,10 @@ function transformPathToLocal(pathData, x, y, _width, _height) {
5636
5636
  y: pt.y - y
5637
5637
  }))
5638
5638
  );
5639
- return chunkTDUDH7S4_js.polygonsToSvgPath(transformed);
5639
+ return chunkEFSQW6S5_js.polygonsToSvgPath(transformed);
5640
5640
  }
5641
5641
  function pathBounds(pathData) {
5642
- const polys = chunkTDUDH7S4_js.svgPathToPolygons(pathData);
5642
+ const polys = chunkEFSQW6S5_js.svgPathToPolygons(pathData);
5643
5643
  let minX = Infinity;
5644
5644
  let minY = Infinity;
5645
5645
  let maxX = -Infinity;
@@ -5698,7 +5698,7 @@ function useMergeShapesHandler(input) {
5698
5698
  let allFragments = [];
5699
5699
  let remaining = globalPaths[0];
5700
5700
  for (let i = 1; i < globalPaths.length; i++) {
5701
- const frags = chunkTDUDH7S4_js.mergeShapes("fragment", remaining, globalPaths[i]);
5701
+ const frags = chunkEFSQW6S5_js.mergeShapes("fragment", remaining, globalPaths[i]);
5702
5702
  if (Array.isArray(frags)) {
5703
5703
  allFragments = frags;
5704
5704
  }
@@ -5727,7 +5727,7 @@ function useMergeShapesHandler(input) {
5727
5727
  bounds.height
5728
5728
  );
5729
5729
  const newEl = {
5730
- id: chunkTDUDH7S4_js.generateElementId(),
5730
+ id: chunkEFSQW6S5_js.generateElementId(),
5731
5731
  type: "shape",
5732
5732
  x: bounds.x,
5733
5733
  y: bounds.y,
@@ -5765,7 +5765,7 @@ function useMergeShapesHandler(input) {
5765
5765
  } else {
5766
5766
  let resultPath = globalPaths[0];
5767
5767
  for (let i = 1; i < globalPaths.length; i++) {
5768
- const result = chunkTDUDH7S4_js.mergeShapes(operation, resultPath, globalPaths[i]);
5768
+ const result = chunkEFSQW6S5_js.mergeShapes(operation, resultPath, globalPaths[i]);
5769
5769
  if (typeof result === "string") {
5770
5770
  resultPath = result;
5771
5771
  }
@@ -5786,7 +5786,7 @@ function useMergeShapesHandler(input) {
5786
5786
  );
5787
5787
  const primary = targets[0];
5788
5788
  const newEl = {
5789
- id: chunkTDUDH7S4_js.generateElementId(),
5789
+ id: chunkEFSQW6S5_js.generateElementId(),
5790
5790
  type: "shape",
5791
5791
  x: bounds.x,
5792
5792
  y: bounds.y,
@@ -5849,7 +5849,7 @@ function useGroupAlignLayerHandlers(input) {
5849
5849
  if (ids.length < 2 || !activeSlide) {
5850
5850
  return;
5851
5851
  }
5852
- const { elements, groupId } = chunkTDUDH7S4_js.groupElements(ops.activeElements, ids, chunkTDUDH7S4_js.generateElementId());
5852
+ const { elements, groupId } = chunkEFSQW6S5_js.groupElements(ops.activeElements, ids, chunkEFSQW6S5_js.generateElementId());
5853
5853
  if (groupId === null) {
5854
5854
  return;
5855
5855
  }
@@ -5862,12 +5862,12 @@ function useGroupAlignLayerHandlers(input) {
5862
5862
  return;
5863
5863
  }
5864
5864
  const group = selectedElement;
5865
- const intoTemplate = chunkTDUDH7S4_js.isTemplateElementId(group.id);
5865
+ const intoTemplate = chunkEFSQW6S5_js.isTemplateElementId(group.id);
5866
5866
  const ungrouped = group.children.map((child) => ({
5867
5867
  ...structuredClone(child),
5868
5868
  // Keep child ids in the same store as the group so later edits route
5869
5869
  // correctly: template groups yield template-prefixed child ids.
5870
- id: intoTemplate ? chunkTDUDH7S4_js.makeCloneId(true, child.id || group.id) : child.id || chunkTDUDH7S4_js.generateElementId(),
5870
+ id: intoTemplate ? chunkEFSQW6S5_js.makeCloneId(true, child.id || group.id) : child.id || chunkEFSQW6S5_js.generateElementId(),
5871
5871
  x: child.x + group.x,
5872
5872
  y: child.y + group.y
5873
5873
  }));
@@ -5891,7 +5891,7 @@ function useGroupAlignLayerHandlers(input) {
5891
5891
  if (!edge) {
5892
5892
  return;
5893
5893
  }
5894
- const positions = chunkTDUDH7S4_js.alignElements(selectedElements, edge);
5894
+ const positions = chunkEFSQW6S5_js.alignElements(selectedElements, edge);
5895
5895
  for (const [id, pos] of positions) {
5896
5896
  const el = elementLookup.get(id);
5897
5897
  if (!el) {
@@ -5909,7 +5909,7 @@ function useGroupAlignLayerHandlers(input) {
5909
5909
  if (!distAxis) {
5910
5910
  return;
5911
5911
  }
5912
- const positions = chunkTDUDH7S4_js.distributeElements(selectedElements, distAxis);
5912
+ const positions = chunkEFSQW6S5_js.distributeElements(selectedElements, distAxis);
5913
5913
  for (const [id, pos] of positions) {
5914
5914
  const el = elementLookup.get(id);
5915
5915
  if (!el) {
@@ -5926,7 +5926,7 @@ function useGroupAlignLayerHandlers(input) {
5926
5926
  }
5927
5927
  const id = selectedElement.id;
5928
5928
  ops.updateActiveElements(
5929
- (els) => direction === "forward" ? chunkTDUDH7S4_js.bringForward(els, id) : direction === "backward" ? chunkTDUDH7S4_js.sendBackward(els, id) : els
5929
+ (els) => direction === "forward" ? chunkEFSQW6S5_js.bringForward(els, id) : direction === "backward" ? chunkEFSQW6S5_js.sendBackward(els, id) : els
5930
5930
  );
5931
5931
  history.markDirty();
5932
5932
  };
@@ -5936,7 +5936,7 @@ function useGroupAlignLayerHandlers(input) {
5936
5936
  }
5937
5937
  const id = selectedElement.id;
5938
5938
  ops.updateActiveElements(
5939
- (els) => direction === "front" ? chunkTDUDH7S4_js.bringToFront(els, id) : chunkTDUDH7S4_js.sendToBack(els, id)
5939
+ (els) => direction === "front" ? chunkEFSQW6S5_js.bringToFront(els, id) : chunkEFSQW6S5_js.sendToBack(els, id)
5940
5940
  );
5941
5941
  history.markDirty();
5942
5942
  };
@@ -6058,7 +6058,7 @@ function insertSlideFromLayoutUpdater(slides, activeIndex, draft) {
6058
6058
  function useSlideManagement(input) {
6059
6059
  const { slides, activeSlideIndex, setActiveSlideIndex, ops, history, handlerRef } = input;
6060
6060
  const handleAddSlide = () => {
6061
- const newSlide = chunkTDUDH7S4_js.createBlankSlide(slides.length + 1);
6061
+ const newSlide = chunkEFSQW6S5_js.createBlankSlide(slides.length + 1);
6062
6062
  ops.updateSlides((prev) => {
6063
6063
  const next = [...prev];
6064
6064
  next.splice(activeSlideIndex + 1, 0, newSlide);
@@ -6121,7 +6121,7 @@ function useSlideManagement(input) {
6121
6121
  }
6122
6122
  const clone = {
6123
6123
  ...src,
6124
- id: chunkTDUDH7S4_js.makeSlideId(),
6124
+ id: chunkEFSQW6S5_js.makeSlideId(),
6125
6125
  elements: src.elements.map((el) => ({
6126
6126
  ...el,
6127
6127
  id: `${el.id}-dup-${Math.random().toString(36).slice(2, 6)}`
@@ -6153,7 +6153,7 @@ function useSlideManagement(input) {
6153
6153
  const handleInsertSlideFromLayout = (layoutPath, layoutName) => {
6154
6154
  const insertAt = activeSlideIndex + 1;
6155
6155
  const draft = {
6156
- ...chunkTDUDH7S4_js.createBlankSlide(slides.length + 1),
6156
+ ...chunkEFSQW6S5_js.createBlankSlide(slides.length + 1),
6157
6157
  layoutPath,
6158
6158
  ...layoutName ? { layoutName } : {}
6159
6159
  };
@@ -6214,7 +6214,7 @@ function createTableMergeHandlers(input) {
6214
6214
  if (!nextCell || nextCell.hMerge || nextCell.vMerge) {
6215
6215
  return;
6216
6216
  }
6217
- const newTableData = chunkTDUDH7S4_js.mergeCells(
6217
+ const newTableData = chunkEFSQW6S5_js.mergeCells(
6218
6218
  [
6219
6219
  { row: rowIndex, col: columnIndex },
6220
6220
  { row: rowIndex, col: nextColIdx }
@@ -6222,7 +6222,7 @@ function createTableMergeHandlers(input) {
6222
6222
  td
6223
6223
  );
6224
6224
  const updates = { tableData: newTableData };
6225
- const newRawXml = chunkTDUDH7S4_js.updateMergeAttrsInRawXml(selectedElement, newTableData);
6225
+ const newRawXml = chunkEFSQW6S5_js.updateMergeAttrsInRawXml(selectedElement, newTableData);
6226
6226
  if (newRawXml) {
6227
6227
  updates.rawXml = newRawXml;
6228
6228
  }
@@ -6248,7 +6248,7 @@ function createTableMergeHandlers(input) {
6248
6248
  if (!targetNextCell || targetNextCell.hMerge || targetNextCell.vMerge) {
6249
6249
  return;
6250
6250
  }
6251
- const newTableData = chunkTDUDH7S4_js.mergeCells(
6251
+ const newTableData = chunkEFSQW6S5_js.mergeCells(
6252
6252
  [
6253
6253
  { row: rowIndex, col: columnIndex },
6254
6254
  { row: targetNextRowIdx, col: columnIndex }
@@ -6256,7 +6256,7 @@ function createTableMergeHandlers(input) {
6256
6256
  td
6257
6257
  );
6258
6258
  const updates = { tableData: newTableData };
6259
- const newRawXml = chunkTDUDH7S4_js.updateMergeAttrsInRawXml(selectedElement, newTableData);
6259
+ const newRawXml = chunkEFSQW6S5_js.updateMergeAttrsInRawXml(selectedElement, newTableData);
6260
6260
  if (newRawXml) {
6261
6261
  updates.rawXml = newRawXml;
6262
6262
  }
@@ -6271,9 +6271,9 @@ function createTableMergeHandlers(input) {
6271
6271
  return;
6272
6272
  }
6273
6273
  const td = selectedElement.tableData;
6274
- const newTableData = chunkTDUDH7S4_js.mergeCells(ts.selectedCells, td);
6274
+ const newTableData = chunkEFSQW6S5_js.mergeCells(ts.selectedCells, td);
6275
6275
  const updates = { tableData: newTableData };
6276
- const newRawXml = chunkTDUDH7S4_js.updateMergeAttrsInRawXml(selectedElement, newTableData);
6276
+ const newRawXml = chunkEFSQW6S5_js.updateMergeAttrsInRawXml(selectedElement, newTableData);
6277
6277
  if (newRawXml) {
6278
6278
  updates.rawXml = newRawXml;
6279
6279
  }
@@ -6290,9 +6290,9 @@ function createTableMergeHandlers(input) {
6290
6290
  }
6291
6291
  const { rowIndex, columnIndex } = ts;
6292
6292
  const td = selectedElement.tableData;
6293
- const newTableData = chunkTDUDH7S4_js.splitCell(rowIndex, columnIndex, td);
6293
+ const newTableData = chunkEFSQW6S5_js.splitCell(rowIndex, columnIndex, td);
6294
6294
  const updates = { tableData: newTableData };
6295
- const newRawXml = chunkTDUDH7S4_js.updateMergeAttrsInRawXml(selectedElement, newTableData);
6295
+ const newRawXml = chunkEFSQW6S5_js.updateMergeAttrsInRawXml(selectedElement, newTableData);
6296
6296
  if (newRawXml) {
6297
6297
  updates.rawXml = newRawXml;
6298
6298
  }
@@ -6336,7 +6336,7 @@ function createTableStructHandlers(input) {
6336
6336
  updates.tableData = { ...el.tableData, rows: newRows };
6337
6337
  }
6338
6338
  if (el.rawXml) {
6339
- const newRawXml = chunkTDUDH7S4_js.updateCellTextInRawXml(el, rowIndex, colIndex, text);
6339
+ const newRawXml = chunkEFSQW6S5_js.updateCellTextInRawXml(el, rowIndex, colIndex, text);
6340
6340
  if (newRawXml) {
6341
6341
  updates.rawXml = newRawXml;
6342
6342
  }
@@ -6360,7 +6360,7 @@ function createTableStructHandlers(input) {
6360
6360
  const { rowIndex, columnIndex: colIndex } = ts;
6361
6361
  const updates = {};
6362
6362
  if (selectedElement.rawXml) {
6363
- const newRawXml = chunkTDUDH7S4_js.updateCellTextStyleInRawXml(
6363
+ const newRawXml = chunkEFSQW6S5_js.updateCellTextStyleInRawXml(
6364
6364
  selectedElement,
6365
6365
  rowIndex,
6366
6366
  colIndex,
@@ -6424,9 +6424,9 @@ function createTableStructHandlers(input) {
6424
6424
  return;
6425
6425
  }
6426
6426
  const rowIdx = ts?.rowIndex ?? 0;
6427
- const newTableData = chunkTDUDH7S4_js.insertTableRow(selectedElement.tableData, rowIdx, position);
6427
+ const newTableData = chunkEFSQW6S5_js.insertTableRow(selectedElement.tableData, rowIdx, position);
6428
6428
  const updates = { tableData: newTableData };
6429
- const newRawXml = chunkTDUDH7S4_js.rebuildTableStructureInRawXml(selectedElement, newTableData);
6429
+ const newRawXml = chunkEFSQW6S5_js.rebuildTableStructureInRawXml(selectedElement, newTableData);
6430
6430
  if (newRawXml) {
6431
6431
  updates.rawXml = newRawXml;
6432
6432
  }
@@ -6439,12 +6439,12 @@ function createTableStructHandlers(input) {
6439
6439
  }
6440
6440
  const td = selectedElement.tableData;
6441
6441
  const rowIdx = ts?.rowIndex ?? 0;
6442
- const newTableData = chunkTDUDH7S4_js.deleteTableRow(td, rowIdx);
6442
+ const newTableData = chunkEFSQW6S5_js.deleteTableRow(td, rowIdx);
6443
6443
  if (newTableData === td) {
6444
6444
  return;
6445
6445
  }
6446
6446
  const updates = { tableData: newTableData };
6447
- const newRawXml = chunkTDUDH7S4_js.rebuildTableStructureInRawXml(selectedElement, newTableData);
6447
+ const newRawXml = chunkEFSQW6S5_js.rebuildTableStructureInRawXml(selectedElement, newTableData);
6448
6448
  if (newRawXml) {
6449
6449
  updates.rawXml = newRawXml;
6450
6450
  }
@@ -6456,9 +6456,9 @@ function createTableStructHandlers(input) {
6456
6456
  return;
6457
6457
  }
6458
6458
  const colIdx = ts?.columnIndex ?? 0;
6459
- const newTableData = chunkTDUDH7S4_js.insertTableColumn(selectedElement.tableData, colIdx, position);
6459
+ const newTableData = chunkEFSQW6S5_js.insertTableColumn(selectedElement.tableData, colIdx, position);
6460
6460
  const updates = { tableData: newTableData };
6461
- const newRawXml = chunkTDUDH7S4_js.rebuildTableStructureInRawXml(selectedElement, newTableData);
6461
+ const newRawXml = chunkEFSQW6S5_js.rebuildTableStructureInRawXml(selectedElement, newTableData);
6462
6462
  if (newRawXml) {
6463
6463
  updates.rawXml = newRawXml;
6464
6464
  }
@@ -6471,12 +6471,12 @@ function createTableStructHandlers(input) {
6471
6471
  }
6472
6472
  const td = selectedElement.tableData;
6473
6473
  const colIdx = ts?.columnIndex ?? 0;
6474
- const newTableData = chunkTDUDH7S4_js.deleteTableColumn(td, colIdx);
6474
+ const newTableData = chunkEFSQW6S5_js.deleteTableColumn(td, colIdx);
6475
6475
  if (newTableData === td) {
6476
6476
  return;
6477
6477
  }
6478
6478
  const updates = { tableData: newTableData };
6479
- const newRawXml = chunkTDUDH7S4_js.rebuildTableStructureInRawXml(selectedElement, newTableData);
6479
+ const newRawXml = chunkEFSQW6S5_js.rebuildTableStructureInRawXml(selectedElement, newTableData);
6480
6480
  if (newRawXml) {
6481
6481
  updates.rawXml = newRawXml;
6482
6482
  }
@@ -6512,8 +6512,8 @@ async function renderToCanvas(element, options = {}) {
6512
6512
  return html2canvasPro(element, {
6513
6513
  ...options,
6514
6514
  onclone: async (doc, clonedEl) => {
6515
- await chunkTDUDH7S4_js.normalizeColorsForCapture(doc, clonedEl);
6516
- chunkTDUDH7S4_js.preprocessCssForCapture(clonedEl);
6515
+ await chunkEFSQW6S5_js.normalizeColorsForCapture(doc, clonedEl);
6516
+ chunkEFSQW6S5_js.preprocessCssForCapture(clonedEl);
6517
6517
  if (typeof userOnClone === "function") {
6518
6518
  userOnClone(doc, clonedEl);
6519
6519
  }
@@ -6569,7 +6569,7 @@ async function exportSlideToPngBlob(slideElement, options = {}) {
6569
6569
  }
6570
6570
  async function exportSlideAsPng(slideElement, slideIndex, options = {}) {
6571
6571
  const blob = await exportSlideToPngBlob(slideElement, options);
6572
- chunkTDUDH7S4_js.downloadBlob(blob, `slide-${slideIndex + 1}.png`);
6572
+ chunkEFSQW6S5_js.downloadBlob(blob, `slide-${slideIndex + 1}.png`);
6573
6573
  }
6574
6574
  async function copySlideToClipboard(slideElement, options = {}) {
6575
6575
  const blob = await exportSlideToPngBlob(slideElement, options);
@@ -6591,15 +6591,15 @@ async function exportAllSlidesAsPdf(slideStageRef, totalSlides, setActiveSlide,
6591
6591
  continue;
6592
6592
  }
6593
6593
  const canvas = await renderElementToCanvas(stageEl, scale);
6594
- images.push(chunkTDUDH7S4_js.canvasToJpegData(canvas));
6594
+ images.push(chunkEFSQW6S5_js.canvasToJpegData(canvas));
6595
6595
  }
6596
6596
  onProgress?.(totalSlides, totalSlides);
6597
6597
  setActiveSlide(currentSlideIndex);
6598
6598
  if (images.length === 0) {
6599
6599
  throw new Error(chunkBXAK3JFM_js.translationsEn["pptx.export.errorNoSlidesPdf"]);
6600
6600
  }
6601
- const pdfBlobUrl = chunkLE6YA5WB_js.buildPdfFromImageData(images);
6602
- chunkTDUDH7S4_js.downloadDataUrl(pdfBlobUrl, filename);
6601
+ const pdfBlobUrl = chunkIDW5UPXW_js.buildPdfFromImageData(images);
6602
+ chunkEFSQW6S5_js.downloadDataUrl(pdfBlobUrl, filename);
6603
6603
  }
6604
6604
  async function captureAllSlidesAsPngDataUrls(slideStageRef, totalSlides, setActiveSlide, currentSlideIndex, options = {}) {
6605
6605
  const { scale = 2, onProgress } = options;
@@ -6647,8 +6647,8 @@ async function exportAllSlidesAsNotesPdf(slideStageRef, totalSlides, setActiveSl
6647
6647
  if (pages.length === 0) {
6648
6648
  throw new Error(chunkBXAK3JFM_js.translationsEn["pptx.export.errorNoSlidesNotesPdf"]);
6649
6649
  }
6650
- const pdfDataUrl = chunkLE6YA5WB_js.buildNotesPdf(pages);
6651
- chunkTDUDH7S4_js.downloadDataUrl(pdfDataUrl, filename);
6650
+ const pdfDataUrl = chunkIDW5UPXW_js.buildNotesPdf(pages);
6651
+ chunkEFSQW6S5_js.downloadDataUrl(pdfDataUrl, filename);
6652
6652
  }
6653
6653
 
6654
6654
  // src/viewer/utils/export-video.ts
@@ -6692,7 +6692,7 @@ async function exportAllSlidesAsVideo(slideStageRef, totalSlides, setActiveSlide
6692
6692
  const fps = 30;
6693
6693
  const stream = recordingCanvas.captureStream(fps);
6694
6694
  const recorder = new MediaRecorder(stream, {
6695
- mimeType: chunkTDUDH7S4_js.pickSupportedMimeType([...chunkTDUDH7S4_js.WEBM_MIME_CANDIDATES]),
6695
+ mimeType: chunkEFSQW6S5_js.pickSupportedMimeType([...chunkEFSQW6S5_js.WEBM_MIME_CANDIDATES]),
6696
6696
  videoBitsPerSecond: 5e6
6697
6697
  });
6698
6698
  const chunks = [];
@@ -6715,8 +6715,8 @@ async function exportAllSlidesAsVideo(slideStageRef, totalSlides, setActiveSlide
6715
6715
  const duration = slideTimingsMs?.[i] ?? slideDurationMs;
6716
6716
  ctx.clearRect(0, 0, recordingCanvas.width, recordingCanvas.height);
6717
6717
  ctx.drawImage(slideCanvases[i], 0, 0);
6718
- const frameInterval = chunkTDUDH7S4_js.fpsToFrameIntervalMs(fps);
6719
- const framesNeeded = chunkTDUDH7S4_js.segmentFrameCount(duration, fps);
6718
+ const frameInterval = chunkEFSQW6S5_js.fpsToFrameIntervalMs(fps);
6719
+ const framesNeeded = chunkEFSQW6S5_js.segmentFrameCount(duration, fps);
6720
6720
  for (let f = 0; f < framesNeeded; f++) {
6721
6721
  if (signal?.aborted) {
6722
6722
  recorder.stop();
@@ -6765,7 +6765,7 @@ async function exportAllSlidesAsGif(slideStageRef, totalSlides, setActiveSlide,
6765
6765
  if (frames.length === 0) {
6766
6766
  throw new Error(chunkBXAK3JFM_js.translationsEn["pptx.export.errorNoSlidesGif"]);
6767
6767
  }
6768
- const gifBytes = chunkTDUDH7S4_js.encodeGif(frames, Math.round(slideDurationMs / 10));
6768
+ const gifBytes = chunkEFSQW6S5_js.encodeGif(frames, Math.round(slideDurationMs / 10));
6769
6769
  onProgress?.(totalSlides, totalSlides);
6770
6770
  const buf = new ArrayBuffer(gifBytes.length);
6771
6771
  new Uint8Array(buf).set(gifBytes);
@@ -6819,7 +6819,7 @@ function exportAllSlidesToSvg(data, options = {}) {
6819
6819
  continue;
6820
6820
  }
6821
6821
  onProgress?.(processedCount, data.slides.length);
6822
- let svg = chunkTDUDH7S4_js.SvgExporter.exportSlide(slide, data.width, data.height, svgOptions);
6822
+ let svg = chunkEFSQW6S5_js.SvgExporter.exportSlide(slide, data.width, data.height, svgOptions);
6823
6823
  if (embedFonts && fontFaces?.length) {
6824
6824
  svg = injectFontFaces(svg, fontFaces);
6825
6825
  }
@@ -6879,7 +6879,7 @@ function useExportSaveAs(input) {
6879
6879
  }
6880
6880
  setExportProgress(70);
6881
6881
  setExportStatusMessage("Writing README...");
6882
- const readme = chunkTDUDH7S4_js.generatePackageReadme(pptxFilename);
6882
+ const readme = chunkEFSQW6S5_js.generatePackageReadme(pptxFilename);
6883
6883
  pkgFolder.file("README.txt", readme);
6884
6884
  if (abortCtrl.signal.aborted) {
6885
6885
  throw new DOMException("Export cancelled", "AbortError");
@@ -6890,7 +6890,7 @@ function useExportSaveAs(input) {
6890
6890
  setExportProgress(95);
6891
6891
  setExportStatusMessage("Downloading...");
6892
6892
  const baseName = pptxFilename.replace(/\.[^.]+$/u, "");
6893
- chunkTDUDH7S4_js.downloadBlob(zipBlob, `${baseName}-package.zip`);
6893
+ chunkEFSQW6S5_js.downloadBlob(zipBlob, `${baseName}-package.zip`);
6894
6894
  setExportProgress(100);
6895
6895
  } catch (err) {
6896
6896
  if (err.name !== "AbortError") {
@@ -6913,7 +6913,7 @@ function useExportSaveAs(input) {
6913
6913
  const blob = new Blob([data], {
6914
6914
  type: "application/vnd.openxmlformats-officedocument.presentationml.presentation"
6915
6915
  });
6916
- chunkTDUDH7S4_js.downloadBlob(blob, `${baseName}.${ext}`);
6916
+ chunkEFSQW6S5_js.downloadBlob(blob, `${baseName}.${ext}`);
6917
6917
  } catch (err) {
6918
6918
  console.error(`[PowerPointViewer] Save as .${ext} failed:`, err);
6919
6919
  }
@@ -6926,14 +6926,14 @@ function useExportSaveAs(input) {
6926
6926
  const pptxGuides = guides.map((g) => ({
6927
6927
  id: g.id,
6928
6928
  orientation: g.axis === "h" ? "horz" : "vert",
6929
- positionEmu: chunkTDUDH7S4_js.guidePxToEmu(g.position)
6929
+ positionEmu: chunkEFSQW6S5_js.guidePxToEmu(g.position)
6930
6930
  }));
6931
6931
  return {
6932
6932
  ...slide,
6933
6933
  guides: pptxGuides.length > 0 ? pptxGuides : void 0
6934
6934
  };
6935
6935
  });
6936
- const slidesToSave = chunkLE6YA5WB_js.buildSaveSlides(slidesWithGuides, templateElementsBySlideId);
6936
+ const slidesToSave = chunkIDW5UPXW_js.buildSaveSlides(slidesWithGuides, templateElementsBySlideId);
6937
6937
  const saveOptions = {
6938
6938
  headerFooter,
6939
6939
  presentationProperties,
@@ -6990,7 +6990,7 @@ function safeConfirm(message) {
6990
6990
  }
6991
6991
  }
6992
6992
  function downloadBlob2(blob, filename) {
6993
- chunkTDUDH7S4_js.downloadBlob(blob, chunkTDUDH7S4_js.sanitizeDownloadFilename(filename));
6993
+ chunkEFSQW6S5_js.downloadBlob(blob, chunkEFSQW6S5_js.sanitizeDownloadFilename(filename));
6994
6994
  }
6995
6995
 
6996
6996
  // src/viewer/hooks/useExportHandlers.ts
@@ -7091,21 +7091,21 @@ function useExportHandlers(input) {
7091
7091
  {
7092
7092
  scale: 2,
7093
7093
  onProgress: (current, total) => {
7094
- setExportProgress(chunkTDUDH7S4_js.slideProgressPercent(current, total));
7095
- setExportStatusMessage(chunkTDUDH7S4_js.slideStatusLabel("Rendering", current, total));
7094
+ setExportProgress(chunkEFSQW6S5_js.slideProgressPercent(current, total));
7095
+ setExportStatusMessage(chunkEFSQW6S5_js.slideStatusLabel("Rendering", current, total));
7096
7096
  },
7097
7097
  signal: abortCtrl.signal
7098
7098
  }
7099
7099
  );
7100
- setExportProgress(chunkTDUDH7S4_js.EXPORT_ASSEMBLING_PERCENT);
7100
+ setExportProgress(chunkEFSQW6S5_js.EXPORT_ASSEMBLING_PERCENT);
7101
7101
  setExportStatusMessage("Building PDF...");
7102
7102
  await new Promise((r) => {
7103
7103
  setTimeout(r, 100);
7104
7104
  });
7105
- setExportProgress(chunkTDUDH7S4_js.EXPORT_DONE_PERCENT);
7105
+ setExportProgress(chunkEFSQW6S5_js.EXPORT_DONE_PERCENT);
7106
7106
  setExportStatusMessage("Done!");
7107
7107
  } catch (err) {
7108
- if (!chunkTDUDH7S4_js.isExportAbortError(err)) {
7108
+ if (!chunkEFSQW6S5_js.isExportAbortError(err)) {
7109
7109
  console.error("[PowerPointViewer] PDF export failed:", err);
7110
7110
  }
7111
7111
  } finally {
@@ -7135,21 +7135,21 @@ function useExportHandlers(input) {
7135
7135
  {
7136
7136
  scale: 2,
7137
7137
  onProgress: (current, total) => {
7138
- setExportProgress(chunkTDUDH7S4_js.slideProgressPercent(current, total));
7139
- setExportStatusMessage(chunkTDUDH7S4_js.slideStatusLabel("Rendering", current, total));
7138
+ setExportProgress(chunkEFSQW6S5_js.slideProgressPercent(current, total));
7139
+ setExportStatusMessage(chunkEFSQW6S5_js.slideStatusLabel("Rendering", current, total));
7140
7140
  },
7141
7141
  signal: abortCtrl.signal
7142
7142
  }
7143
7143
  );
7144
- setExportProgress(chunkTDUDH7S4_js.EXPORT_ASSEMBLING_PERCENT);
7144
+ setExportProgress(chunkEFSQW6S5_js.EXPORT_ASSEMBLING_PERCENT);
7145
7145
  setExportStatusMessage("Building PDF...");
7146
7146
  await new Promise((r) => {
7147
7147
  setTimeout(r, 100);
7148
7148
  });
7149
- setExportProgress(chunkTDUDH7S4_js.EXPORT_DONE_PERCENT);
7149
+ setExportProgress(chunkEFSQW6S5_js.EXPORT_DONE_PERCENT);
7150
7150
  setExportStatusMessage("Done!");
7151
7151
  } catch (err) {
7152
- if (!chunkTDUDH7S4_js.isExportAbortError(err)) {
7152
+ if (!chunkEFSQW6S5_js.isExportAbortError(err)) {
7153
7153
  console.error("[PowerPointViewer] Notes PDF export failed:", err);
7154
7154
  }
7155
7155
  } finally {
@@ -7190,22 +7190,22 @@ function useExportHandlers(input) {
7190
7190
  scale: 1,
7191
7191
  slideDurationMs: 3e3,
7192
7192
  onProgress: (current, total) => {
7193
- setExportProgress(chunkTDUDH7S4_js.slideProgressPercent(current, total, 45));
7194
- setExportStatusMessage(chunkTDUDH7S4_js.slideStatusLabel("Capturing", current, total));
7193
+ setExportProgress(chunkEFSQW6S5_js.slideProgressPercent(current, total, 45));
7194
+ setExportStatusMessage(chunkEFSQW6S5_js.slideStatusLabel("Capturing", current, total));
7195
7195
  },
7196
7196
  onRecordProgress: (current, total) => {
7197
- setExportProgress(chunkTDUDH7S4_js.recordProgressPercent(current, total));
7198
- setExportStatusMessage(chunkTDUDH7S4_js.slideStatusLabel("Recording", current, total));
7197
+ setExportProgress(chunkEFSQW6S5_js.recordProgressPercent(current, total));
7198
+ setExportStatusMessage(chunkEFSQW6S5_js.slideStatusLabel("Recording", current, total));
7199
7199
  },
7200
7200
  signal: abortCtrl.signal
7201
7201
  }
7202
7202
  );
7203
- setExportProgress(chunkTDUDH7S4_js.EXPORT_ASSEMBLING_PERCENT);
7203
+ setExportProgress(chunkEFSQW6S5_js.EXPORT_ASSEMBLING_PERCENT);
7204
7204
  setExportStatusMessage("Saving file...");
7205
7205
  downloadBlob2(blob, "presentation.webm");
7206
- setExportProgress(chunkTDUDH7S4_js.EXPORT_DONE_PERCENT);
7206
+ setExportProgress(chunkEFSQW6S5_js.EXPORT_DONE_PERCENT);
7207
7207
  } catch (err) {
7208
- if (!chunkTDUDH7S4_js.isExportAbortError(err)) {
7208
+ if (!chunkEFSQW6S5_js.isExportAbortError(err)) {
7209
7209
  console.error("[PowerPointViewer] Video export failed:", err);
7210
7210
  }
7211
7211
  } finally {
@@ -7233,18 +7233,18 @@ function useExportHandlers(input) {
7233
7233
  scale: 0.5,
7234
7234
  slideDurationMs: 2e3,
7235
7235
  onProgress: (current, total) => {
7236
- setExportProgress(chunkTDUDH7S4_js.slideProgressPercent(current, total));
7237
- setExportStatusMessage(chunkTDUDH7S4_js.slideStatusLabel("Encoding", current, total));
7236
+ setExportProgress(chunkEFSQW6S5_js.slideProgressPercent(current, total));
7237
+ setExportStatusMessage(chunkEFSQW6S5_js.slideStatusLabel("Encoding", current, total));
7238
7238
  },
7239
7239
  signal: abortCtrl.signal
7240
7240
  }
7241
7241
  );
7242
- setExportProgress(chunkTDUDH7S4_js.EXPORT_ASSEMBLING_PERCENT);
7242
+ setExportProgress(chunkEFSQW6S5_js.EXPORT_ASSEMBLING_PERCENT);
7243
7243
  setExportStatusMessage("Saving file...");
7244
7244
  downloadBlob2(blob, "presentation.gif");
7245
- setExportProgress(chunkTDUDH7S4_js.EXPORT_DONE_PERCENT);
7245
+ setExportProgress(chunkEFSQW6S5_js.EXPORT_DONE_PERCENT);
7246
7246
  } catch (err) {
7247
- if (!chunkTDUDH7S4_js.isExportAbortError(err)) {
7247
+ if (!chunkEFSQW6S5_js.isExportAbortError(err)) {
7248
7248
  console.error("[PowerPointViewer] GIF export failed:", err);
7249
7249
  }
7250
7250
  } finally {
@@ -7284,7 +7284,7 @@ function openPrintWindow(title, bodyHtml, orientation, colorFilter, frameSlides)
7284
7284
  }
7285
7285
  printWindow.document.open();
7286
7286
  printWindow.document.write(
7287
- chunkTDUDH7S4_js.buildPrintHtmlDocument({ title, bodyHtml, orientation, colorFilter, frameSlides })
7287
+ chunkEFSQW6S5_js.buildPrintHtmlDocument({ title, bodyHtml, orientation, colorFilter, frameSlides })
7288
7288
  );
7289
7289
  printWindow.document.close();
7290
7290
  printWindow.focus();
@@ -7345,7 +7345,7 @@ function usePrintHandlers(input) {
7345
7345
  if (svgs.length === 0) {
7346
7346
  return;
7347
7347
  }
7348
- const printDoc = chunkTDUDH7S4_js.buildPrintDocument(svgs, pptxData.width, pptxData.height, {
7348
+ const printDoc = chunkEFSQW6S5_js.buildPrintDocument(svgs, pptxData.width, pptxData.height, {
7349
7349
  title: "Slides (Vector)",
7350
7350
  orientation: settings.orientation,
7351
7351
  colorFilter
@@ -7381,7 +7381,7 @@ function usePrintHandlers(input) {
7381
7381
  if (settings.printWhat === "outline") {
7382
7382
  openPrintWindow(
7383
7383
  "Outline",
7384
- `<div class="outline-page">${chunkTDUDH7S4_js.buildOutlineHtml(slideIndices, slides)}</div>`,
7384
+ `<div class="outline-page">${chunkEFSQW6S5_js.buildOutlineHtml(slideIndices, slides)}</div>`,
7385
7385
  settings.orientation,
7386
7386
  colorFilter,
7387
7387
  settings.frameSlides
@@ -7406,7 +7406,7 @@ function usePrintHandlers(input) {
7406
7406
  if (settings.printWhat === "slides") {
7407
7407
  openPrintWindow(
7408
7408
  "Slides",
7409
- chunkTDUDH7S4_js.buildSlidesHtml(slideImages, slideIndices),
7409
+ chunkEFSQW6S5_js.buildSlidesHtml(slideImages, slideIndices),
7410
7410
  settings.orientation,
7411
7411
  colorFilter,
7412
7412
  settings.frameSlides
@@ -7416,7 +7416,7 @@ function usePrintHandlers(input) {
7416
7416
  if (settings.printWhat === "notes") {
7417
7417
  openPrintWindow(
7418
7418
  "Notes Pages",
7419
- chunkTDUDH7S4_js.buildNotesHtml(slideImages, slideIndices, slides),
7419
+ chunkEFSQW6S5_js.buildNotesHtml(slideImages, slideIndices, slides),
7420
7420
  "portrait",
7421
7421
  colorFilter,
7422
7422
  settings.frameSlides
@@ -7427,7 +7427,7 @@ function usePrintHandlers(input) {
7427
7427
  const spp = settings.slidesPerPage;
7428
7428
  openPrintWindow(
7429
7429
  `Handout ${spp} per page`,
7430
- chunkTDUDH7S4_js.buildHandoutsHtml(slideImages, slideIndices, spp),
7430
+ chunkEFSQW6S5_js.buildHandoutsHtml(slideImages, slideIndices, spp),
7431
7431
  "portrait",
7432
7432
  colorFilter,
7433
7433
  settings.frameSlides
@@ -7491,8 +7491,8 @@ function useThemeHandlers(input) {
7491
7491
  return;
7492
7492
  }
7493
7493
  await handler.updateThemeColorScheme(colorScheme);
7494
- const previousMap = theme?.colorScheme ? chunkTDUDH7S4_js.buildThemeColorMap(theme.colorScheme) : {};
7495
- setSlides((prev) => chunkTDUDH7S4_js.reResolveSlideColors(prev, previousMap, colorScheme));
7494
+ const previousMap = theme?.colorScheme ? chunkEFSQW6S5_js.buildThemeColorMap(theme.colorScheme) : {};
7495
+ setSlides((prev) => chunkEFSQW6S5_js.reResolveSlideColors(prev, previousMap, colorScheme));
7496
7496
  setTheme((prev) => prev ? { ...prev, colorScheme } : { colorScheme });
7497
7497
  bumpHistory();
7498
7498
  history.markDirty();
@@ -7597,7 +7597,7 @@ function useThemeSwitching(input) {
7597
7597
  }
7598
7598
  try {
7599
7599
  await handler.applyTheme(preset.colorScheme, preset.fontScheme, preset.name);
7600
- const newData = chunkTDUDH7S4_js.applyThemeToData(data, preset.colorScheme, preset.fontScheme, preset.name);
7600
+ const newData = chunkEFSQW6S5_js.applyThemeToData(data, preset.colorScheme, preset.fontScheme, preset.name);
7601
7601
  onDataChange(newData);
7602
7602
  onThemeChanged?.(preset);
7603
7603
  } catch (error) {
@@ -7614,7 +7614,7 @@ function useThemeSwitching(input) {
7614
7614
  }
7615
7615
  try {
7616
7616
  await handler.applyTheme(colorScheme, fontScheme ?? {}, themeName);
7617
- const newData = chunkTDUDH7S4_js.applyThemeToData(data, colorScheme, fontScheme, themeName);
7617
+ const newData = chunkEFSQW6S5_js.applyThemeToData(data, colorScheme, fontScheme, themeName);
7618
7618
  onDataChange(newData);
7619
7619
  } catch (error) {
7620
7620
  console.error("Failed to switch to custom theme:", error);
@@ -7626,12 +7626,12 @@ function useThemeSwitching(input) {
7626
7626
  if (!data?.theme?.colorScheme) {
7627
7627
  return void 0;
7628
7628
  }
7629
- return chunkTDUDH7S4_js.THEME_PRESETS.find(
7630
- (p) => chunkTDUDH7S4_js.themeColorSchemesEqual(data.theme?.colorScheme, p.colorScheme)
7629
+ return chunkEFSQW6S5_js.THEME_PRESETS.find(
7630
+ (p) => chunkEFSQW6S5_js.themeColorSchemesEqual(data.theme?.colorScheme, p.colorScheme)
7631
7631
  );
7632
7632
  }, [data?.theme?.colorScheme]);
7633
7633
  return {
7634
- presets: chunkTDUDH7S4_js.THEME_PRESETS,
7634
+ presets: chunkEFSQW6S5_js.THEME_PRESETS,
7635
7635
  switchToPreset,
7636
7636
  switchToCustom,
7637
7637
  currentPreset
@@ -7706,7 +7706,7 @@ function usePropertyHandlers(input) {
7706
7706
  }
7707
7707
  try {
7708
7708
  const ab = await file.arrayBuffer();
7709
- const h = new chunkTDUDH7S4_js.PptxHandler();
7709
+ const h = new chunkEFSQW6S5_js.PptxHandler();
7710
7710
  const other = await h.load(ab);
7711
7711
  if (!other) {
7712
7712
  return;
@@ -7716,7 +7716,7 @@ function usePropertyHandlers(input) {
7716
7716
  width: canvasSize.width,
7717
7717
  height: canvasSize.height
7718
7718
  };
7719
- setCompareResult(chunkTDUDH7S4_js.comparePresentation(cur, other));
7719
+ setCompareResult(chunkEFSQW6S5_js.comparePresentation(cur, other));
7720
7720
  setIsComparePanelOpen(true);
7721
7721
  } catch (err) {
7722
7722
  console.warn("Compare failed:", err);
@@ -7733,7 +7733,7 @@ function usePropertyHandlers(input) {
7733
7733
  if (!diff || diff.status === "unchanged") {
7734
7734
  return;
7735
7735
  }
7736
- setSlides((prev) => chunkTDUDH7S4_js.applyAcceptSlide(prev, diff));
7736
+ setSlides((prev) => chunkEFSQW6S5_js.applyAcceptSlide(prev, diff));
7737
7737
  setIsDirty(true);
7738
7738
  },
7739
7739
  [compareResult, setSlides, setIsDirty]
@@ -7744,10 +7744,10 @@ function usePropertyHandlers(input) {
7744
7744
  if (!compareResult) {
7745
7745
  return;
7746
7746
  }
7747
- setSlides((prev) => chunkTDUDH7S4_js.applyAcceptAllSlides(prev, compareResult));
7747
+ setSlides((prev) => chunkEFSQW6S5_js.applyAcceptAllSlides(prev, compareResult));
7748
7748
  setIsDirty(true);
7749
7749
  }, [compareResult, setSlides, setIsDirty]);
7750
- const usedFontFamilies = react.useMemo(() => chunkTDUDH7S4_js.collectUsedFonts(slides), [slides]);
7750
+ const usedFontFamilies = react.useMemo(() => chunkEFSQW6S5_js.collectUsedFonts(slides), [slides]);
7751
7751
  return {
7752
7752
  handleUpdateNotes,
7753
7753
  handleUpdateSlide,
@@ -7866,7 +7866,7 @@ function useIsMobile(input) {
7866
7866
  const containerRef = input?.containerRef;
7867
7867
  const isTouchDevice = react.useSyncExternalStore(
7868
7868
  subscribeTouchCapability,
7869
- chunkTDUDH7S4_js.detectTouchDevice,
7869
+ chunkEFSQW6S5_js.detectTouchDevice,
7870
7870
  () => false
7871
7871
  // server snapshot
7872
7872
  );
@@ -7882,7 +7882,7 @@ function useIsMobile(input) {
7882
7882
  }
7883
7883
  return containerRef?.current?.clientHeight ?? window.innerHeight;
7884
7884
  });
7885
- const [orientation, setOrientation] = react.useState(chunkTDUDH7S4_js.detectOrientation);
7885
+ const [orientation, setOrientation] = react.useState(chunkEFSQW6S5_js.detectOrientation);
7886
7886
  const [isVirtualKeyboardOpen, setIsVirtualKeyboardOpen] = react.useState(false);
7887
7887
  const [initialViewportHeight] = react.useState(
7888
7888
  () => typeof window !== "undefined" ? window.innerHeight : 800
@@ -7926,7 +7926,7 @@ function useIsMobile(input) {
7926
7926
  return;
7927
7927
  }
7928
7928
  const handleOrientationChange = () => {
7929
- setOrientation(chunkTDUDH7S4_js.detectOrientation());
7929
+ setOrientation(chunkEFSQW6S5_js.detectOrientation());
7930
7930
  };
7931
7931
  if (screen.orientation) {
7932
7932
  screen.orientation.addEventListener("change", handleOrientationChange);
@@ -7956,9 +7956,9 @@ function useIsMobile(input) {
7956
7956
  window.addEventListener("resize", handleResize);
7957
7957
  return () => window.removeEventListener("resize", handleResize);
7958
7958
  }, [isTouchDevice, initialViewportHeight]);
7959
- const isMobile = chunkTDUDH7S4_js.isMobileViewport(containerWidth, containerHeight, isTouchDevice);
7960
- const isTablet = !isMobile && containerWidth >= chunkTDUDH7S4_js.MOBILE_BREAKPOINT && containerWidth < chunkTDUDH7S4_js.TABLET_BREAKPOINT;
7961
- const isDesktop = !isMobile && containerWidth >= chunkTDUDH7S4_js.TABLET_BREAKPOINT;
7959
+ const isMobile = chunkEFSQW6S5_js.isMobileViewport(containerWidth, containerHeight, isTouchDevice);
7960
+ const isTablet = !isMobile && containerWidth >= chunkEFSQW6S5_js.MOBILE_BREAKPOINT && containerWidth < chunkEFSQW6S5_js.TABLET_BREAKPOINT;
7961
+ const isDesktop = !isMobile && containerWidth >= chunkEFSQW6S5_js.TABLET_BREAKPOINT;
7962
7962
  return {
7963
7963
  isMobile,
7964
7964
  isTablet,
@@ -8019,11 +8019,11 @@ function useViewerDialogs(input) {
8019
8019
  );
8020
8020
  const [embedFontsEnabled, setEmbedFontsEnabled] = react.useState(false);
8021
8021
  const [isNarrowViewport, setIsNarrowViewport] = react.useState(
8022
- () => typeof window !== "undefined" ? chunkTDUDH7S4_js.isMobileViewport(window.innerWidth, window.innerHeight, viewportIsTouch()) : false
8022
+ () => typeof window !== "undefined" ? chunkEFSQW6S5_js.isMobileViewport(window.innerWidth, window.innerHeight, viewportIsTouch()) : false
8023
8023
  );
8024
8024
  react.useEffect(() => {
8025
8025
  const handleWindow = () => setIsNarrowViewport(
8026
- chunkTDUDH7S4_js.isMobileViewport(window.innerWidth, window.innerHeight, viewportIsTouch())
8026
+ chunkEFSQW6S5_js.isMobileViewport(window.innerWidth, window.innerHeight, viewportIsTouch())
8027
8027
  );
8028
8028
  let observer = null;
8029
8029
  let raf = 0;
@@ -8037,12 +8037,12 @@ function useViewerDialogs(input) {
8037
8037
  const entry = entries[0];
8038
8038
  if (entry) {
8039
8039
  setIsNarrowViewport(
8040
- chunkTDUDH7S4_js.isMobileViewport(entry.contentRect.width, entry.contentRect.height, viewportIsTouch())
8040
+ chunkEFSQW6S5_js.isMobileViewport(entry.contentRect.width, entry.contentRect.height, viewportIsTouch())
8041
8041
  );
8042
8042
  }
8043
8043
  });
8044
8044
  observer.observe(el);
8045
- setIsNarrowViewport(chunkTDUDH7S4_js.isMobileViewport(el.clientWidth, el.clientHeight, viewportIsTouch()));
8045
+ setIsNarrowViewport(chunkEFSQW6S5_js.isMobileViewport(el.clientWidth, el.clientHeight, viewportIsTouch()));
8046
8046
  };
8047
8047
  attach();
8048
8048
  window.addEventListener("resize", handleWindow);
@@ -8200,20 +8200,20 @@ function useViewerDialogs(input) {
8200
8200
  }
8201
8201
  function computeGridSpacingPx(presentationGridSpacing) {
8202
8202
  if (presentationGridSpacing) {
8203
- const px = Math.round(presentationGridSpacing.cx / chunkLE6YA5WB_js.EMU_PER_PX);
8203
+ const px = Math.round(presentationGridSpacing.cx / chunkIDW5UPXW_js.EMU_PER_PX);
8204
8204
  if (px > 0) {
8205
8205
  return px;
8206
8206
  }
8207
8207
  }
8208
- return chunkLE6YA5WB_js.GRID_SIZE;
8208
+ return chunkIDW5UPXW_js.GRID_SIZE;
8209
8209
  }
8210
8210
  function computeVisibleSlideIndexes(slides, activeCustomShowId, customShows) {
8211
8211
  const activeShow = activeCustomShowId ? customShows.find((show) => show.id === activeCustomShowId) : void 0;
8212
- return chunkTDUDH7S4_js.resolveShowSlideIndexes(slides, activeShow);
8212
+ return chunkEFSQW6S5_js.resolveShowSlideIndexes(slides, activeShow);
8213
8213
  }
8214
8214
  function computeSlideSectionGroups(slides, sections) {
8215
- return chunkTDUDH7S4_js.groupSlidesBySection(sections, slides).map((group) => ({
8216
- id: group.section?.id ?? (sections.length > 0 ? chunkLE6YA5WB_js.UNGROUPED_SECTION_ID : "default"),
8215
+ return chunkEFSQW6S5_js.groupSlidesBySection(sections, slides).map((group) => ({
8216
+ id: group.section?.id ?? (sections.length > 0 ? chunkIDW5UPXW_js.UNGROUPED_SECTION_ID : "default"),
8217
8217
  label: group.section?.name ?? (sections.length > 0 ? "Ungrouped Slides" : "Slides"),
8218
8218
  slideIndexes: group.slideIndexes,
8219
8219
  ...group.section?.color !== void 0 ? { color: group.section.color } : {},
@@ -8268,7 +8268,7 @@ function useDerivedSlideState(input) {
8268
8268
  );
8269
8269
  const slideSectionGroups = react.useMemo(
8270
8270
  () => computeSlideSectionGroups(slides, sections).map((group) => {
8271
- if (group.id === chunkLE6YA5WB_js.UNGROUPED_SECTION_ID && group.label === "Ungrouped Slides") {
8271
+ if (group.id === chunkIDW5UPXW_js.UNGROUPED_SECTION_ID && group.label === "Ungrouped Slides") {
8272
8272
  return { ...group, label: t("pptx.slides.ungroupedSlides") };
8273
8273
  }
8274
8274
  if (group.id === "default" && group.label === "Slides") {
@@ -8371,13 +8371,13 @@ function useAnnotationHandlers(input) {
8371
8371
  }, [annotations, setMode, setSlides, history]);
8372
8372
  const handleSetMode = react.useCallback(
8373
8373
  (nextMode) => {
8374
- if (mode === "present" && nextMode !== "present" && !chunkTDUDH7S4_js.mayLeaveSlideShow()) {
8374
+ if (mode === "present" && nextMode !== "present" && !chunkEFSQW6S5_js.mayLeaveSlideShow()) {
8375
8375
  return;
8376
8376
  }
8377
8377
  if (nextMode === "present") {
8378
8378
  presentation.enterPresentMode();
8379
8379
  } else if (mode === "present" && annotations.hasAnyAnnotations) {
8380
- chunkLE6YA5WB_js.stopAllPersistentAudio();
8380
+ chunkIDW5UPXW_js.stopAllPersistentAudio();
8381
8381
  pendingModeAfterAnnotationsRef.current = nextMode;
8382
8382
  if (promptKeepInkAnnotations) {
8383
8383
  setShowKeepAnnotationsDialog(true);
@@ -8386,7 +8386,7 @@ function useAnnotationHandlers(input) {
8386
8386
  }
8387
8387
  } else {
8388
8388
  if (mode === "present") {
8389
- chunkLE6YA5WB_js.stopAllPersistentAudio();
8389
+ chunkIDW5UPXW_js.stopAllPersistentAudio();
8390
8390
  }
8391
8391
  setMode(nextMode);
8392
8392
  }
@@ -8452,13 +8452,13 @@ function useSerialize(input) {
8452
8452
  let processedSlide = slide;
8453
8453
  if (pendingEditId) {
8454
8454
  const updatedElements = slide.elements.map((el) => {
8455
- if (el.id !== pendingEditId || !chunkTDUDH7S4_js.hasTextProperties(el)) {
8455
+ if (el.id !== pendingEditId || !chunkEFSQW6S5_js.hasTextProperties(el)) {
8456
8456
  return el;
8457
8457
  }
8458
8458
  return {
8459
8459
  ...el,
8460
8460
  text: pendingEditText,
8461
- textSegments: chunkTDUDH7S4_js.remapTextToSegments(pendingEditText, el.textSegments, el.textStyle)
8461
+ textSegments: chunkEFSQW6S5_js.remapTextToSegments(pendingEditText, el.textSegments, el.textStyle)
8462
8462
  };
8463
8463
  });
8464
8464
  if (updatedElements.some((el, i) => el !== slide.elements[i])) {
@@ -8471,14 +8471,14 @@ function useSerialize(input) {
8471
8471
  const pptxGuides = guides.map((g) => ({
8472
8472
  id: g.id,
8473
8473
  orientation: g.axis === "h" ? "horz" : "vert",
8474
- positionEmu: chunkTDUDH7S4_js.guidePxToEmu(g.position)
8474
+ positionEmu: chunkEFSQW6S5_js.guidePxToEmu(g.position)
8475
8475
  }));
8476
8476
  return {
8477
8477
  ...processedSlide,
8478
8478
  guides: pptxGuides.length > 0 ? pptxGuides : void 0
8479
8479
  };
8480
8480
  });
8481
- const slidesToSave = chunkLE6YA5WB_js.buildSaveSlides(slidesWithGuides, templateElementsBySlideId);
8481
+ const slidesToSave = chunkIDW5UPXW_js.buildSaveSlides(slidesWithGuides, templateElementsBySlideId);
8482
8482
  const saveOptions = {
8483
8483
  headerFooter,
8484
8484
  presentationProperties,
@@ -8647,7 +8647,7 @@ function usePresentationSetup(input) {
8647
8647
  containerRef,
8648
8648
  content,
8649
8649
  onSetMode: (nextMode) => {
8650
- if (mode === "present" && nextMode !== "present" && !chunkTDUDH7S4_js.mayLeaveSlideShow()) {
8650
+ if (mode === "present" && nextMode !== "present" && !chunkEFSQW6S5_js.mayLeaveSlideShow()) {
8651
8651
  return;
8652
8652
  }
8653
8653
  if (mode === "present" && nextMode !== "present" && annotations.hasAnyAnnotations && promptKeepInkAnnotations) {
@@ -8655,7 +8655,7 @@ function usePresentationSetup(input) {
8655
8655
  setShowKeepAnnotationsDialog(true);
8656
8656
  } else {
8657
8657
  if (mode === "present" && nextMode !== "present") {
8658
- chunkLE6YA5WB_js.stopAllPersistentAudio();
8658
+ chunkIDW5UPXW_js.stopAllPersistentAudio();
8659
8659
  stopAnimationSound();
8660
8660
  }
8661
8661
  setMode(nextMode);
@@ -8709,10 +8709,10 @@ function usePresentationSetup(input) {
8709
8709
  onToggleInkMarkup: () => annotations.setInkMarkupVisible(!annotations.inkMarkupVisible),
8710
8710
  onToggleToolbar: () => annotations.setToolbarVisible(!annotations.toolbarVisible),
8711
8711
  onSaveRehearsalTimings: (timings) => {
8712
- setSlides((prev) => chunkTDUDH7S4_js.applyRehearsalTimings(prev, timings));
8712
+ setSlides((prev) => chunkEFSQW6S5_js.applyRehearsalTimings(prev, timings));
8713
8713
  history.markDirty();
8714
8714
  },
8715
- loopContinuously: chunkTDUDH7S4_js.shouldLoopContinuously(presentationProperties),
8715
+ loopContinuously: chunkEFSQW6S5_js.shouldLoopContinuously(presentationProperties),
8716
8716
  showWithAnimation: presentationProperties.showWithAnimation,
8717
8717
  useTimings: presentationProperties.advanceMode !== "manual",
8718
8718
  endWithBlackSlide
@@ -8874,7 +8874,7 @@ function useEditorOperations(input) {
8874
8874
  const { formatPainterActive, setFormatPainterActive, elementLookup } = state;
8875
8875
  react.useEffect(() => {
8876
8876
  if (formatPainterActive && !prevFormatPainterRef.current && selectedElement) {
8877
- copiedFormatRef.current = chunkTDUDH7S4_js.copyFormatFromElement(selectedElement);
8877
+ copiedFormatRef.current = chunkEFSQW6S5_js.copyFormatFromElement(selectedElement);
8878
8878
  } else if (!formatPainterActive) {
8879
8879
  copiedFormatRef.current = null;
8880
8880
  }
@@ -8900,12 +8900,12 @@ function useEditorOperations(input) {
8900
8900
  e.stopPropagation();
8901
8901
  const element = elementLookup.get(elementId);
8902
8902
  if (element) {
8903
- const updated = chunkTDUDH7S4_js.applyFormatToElement(element, copiedFormatRef.current);
8903
+ const updated = chunkEFSQW6S5_js.applyFormatToElement(element, copiedFormatRef.current);
8904
8904
  const updates = {};
8905
- if (chunkTDUDH7S4_js.hasShapeProperties(updated)) {
8905
+ if (chunkEFSQW6S5_js.hasShapeProperties(updated)) {
8906
8906
  updates.shapeStyle = updated.shapeStyle;
8907
8907
  }
8908
- if (chunkTDUDH7S4_js.hasTextProperties(updated)) {
8908
+ if (chunkEFSQW6S5_js.hasTextProperties(updated)) {
8909
8909
  updates.textStyle = updated.textStyle;
8910
8910
  }
8911
8911
  ops.updateElementById(elementId, updates);
@@ -9052,7 +9052,7 @@ function collectReferencedFontFamilies(slides) {
9052
9052
  const families = /* @__PURE__ */ new Set();
9053
9053
  for (const slide of slides) {
9054
9054
  for (const el of slide.elements) {
9055
- if (chunkTDUDH7S4_js.hasTextProperties(el) && el.textSegments) {
9055
+ if (chunkEFSQW6S5_js.hasTextProperties(el) && el.textSegments) {
9056
9056
  for (const seg of el.textSegments) {
9057
9057
  if (seg.style.fontFamily) {
9058
9058
  families.add(seg.style.fontFamily);
@@ -9264,13 +9264,13 @@ function useKeyboardShortcuts(input) {
9264
9264
  inputRef.current = input;
9265
9265
  const handleKeyDown = react.useCallback((e) => {
9266
9266
  const current = inputRef.current;
9267
- const { action, dx, dy } = chunkTDUDH7S4_js.mapEditorKey(e, {
9267
+ const { action, dx, dy } = chunkEFSQW6S5_js.mapEditorKey(e, {
9268
9268
  canEdit: current.canEdit,
9269
9269
  isPresenting: current.mode !== "edit",
9270
9270
  hasSelection: current.hasSelection,
9271
9271
  isEditingText: Boolean(current.inlineEditingElementId || current.tableEditorState?.isEditing),
9272
9272
  isDrawing: current.activeTool !== "select",
9273
- isTextInputTarget: chunkTDUDH7S4_js.isEditorTextInputTarget(e.target)
9273
+ isTextInputTarget: chunkEFSQW6S5_js.isEditorTextInputTarget(e.target)
9274
9274
  });
9275
9275
  if (action === null) {
9276
9276
  return;
@@ -9563,7 +9563,7 @@ function useViewerIntegration(input) {
9563
9563
  return zoom.scale;
9564
9564
  },
9565
9565
  setZoom(level) {
9566
- zoom.setScale(chunkTDUDH7S4_js.clampZoomScale(level));
9566
+ zoom.setScale(chunkEFSQW6S5_js.clampZoomScale(level));
9567
9567
  },
9568
9568
  zoomIn() {
9569
9569
  zoom.handleZoomIn();
@@ -9778,7 +9778,7 @@ function useReducedMotion() {
9778
9778
  }
9779
9779
  function useViewerOptions() {
9780
9780
  const storeRef = react.useRef(null);
9781
- storeRef.current ??= chunkTDUDH7S4_js.createViewerOptionsStore();
9781
+ storeRef.current ??= chunkEFSQW6S5_js.createViewerOptionsStore();
9782
9782
  const store = storeRef.current;
9783
9783
  const options = react.useSyncExternalStore(
9784
9784
  (onStoreChange) => store.subscribe(onStoreChange),
@@ -9787,9 +9787,9 @@ function useViewerOptions() {
9787
9787
  );
9788
9788
  return { optionsStore: store, options };
9789
9789
  }
9790
- var KNOWN_TAB_IDS = new Set(chunkTDUDH7S4_js.TOOLBAR_TABS.map((tab) => tab.id));
9790
+ var KNOWN_TAB_IDS = new Set(chunkEFSQW6S5_js.TOOLBAR_TABS.map((tab) => tab.id));
9791
9791
  function computeToolbarVisibility(hiddenActions) {
9792
- const isHidden = (id) => chunkTDUDH7S4_js.isActionHidden(id, hiddenActions);
9792
+ const isHidden = (id) => chunkEFSQW6S5_js.isActionHidden(id, hiddenActions);
9793
9793
  const isTabVisible = (id) => !KNOWN_TAB_IDS.has(id) || !isHidden(id);
9794
9794
  return { isHidden, isTabVisible };
9795
9795
  }
@@ -9874,12 +9874,12 @@ function useYjsDocumentSync({
9874
9874
  return;
9875
9875
  }
9876
9876
  try {
9877
- const handler = new chunkTDUDH7S4_js.PptxHandler();
9877
+ const handler = new chunkEFSQW6S5_js.PptxHandler();
9878
9878
  await handler.load(sourceBytes.buffer);
9879
- const currentSlides = chunkTDUDH7S4_js.readSlidesFromYDoc(
9879
+ const currentSlides = chunkEFSQW6S5_js.readSlidesFromYDoc(
9880
9880
  doc
9881
9881
  );
9882
- const slidesToSave = chunkLE6YA5WB_js.buildSaveSlides(currentSlides, templateElementsBySlideId);
9882
+ const slidesToSave = chunkIDW5UPXW_js.buildSaveSlides(currentSlides, templateElementsBySlideId);
9883
9883
  const bytes = await handler.save(slidesToSave);
9884
9884
  config.onWriteBack(bytes);
9885
9885
  } catch {
@@ -9894,7 +9894,7 @@ function useYjsDocumentSync({
9894
9894
  if (!doc || !isConnected) {
9895
9895
  return;
9896
9896
  }
9897
- const docSlides = chunkTDUDH7S4_js.readSlidesFromYDoc(
9897
+ const docSlides = chunkEFSQW6S5_js.readSlidesFromYDoc(
9898
9898
  doc
9899
9899
  );
9900
9900
  if (docSlides.length === 0) {
@@ -9916,11 +9916,11 @@ function useYjsDocumentSync({
9916
9916
  lastSyncedRef.current = serialized;
9917
9917
  void (async () => {
9918
9918
  const factories = await getFactories();
9919
- chunkTDUDH7S4_js.reconcileSlidesInYDoc(
9919
+ chunkEFSQW6S5_js.reconcileSlidesInYDoc(
9920
9920
  slides,
9921
9921
  doc,
9922
9922
  factories,
9923
- chunkTDUDH7S4_js.LOCAL_SYNC_ORIGIN
9923
+ chunkEFSQW6S5_js.LOCAL_SYNC_ORIGIN
9924
9924
  );
9925
9925
  scheduleWriteBack();
9926
9926
  })();
@@ -9934,10 +9934,10 @@ function useYjsDocumentSync({
9934
9934
  return;
9935
9935
  }
9936
9936
  const handleChange = (_events, transaction) => {
9937
- if (transaction?.origin === chunkTDUDH7S4_js.LOCAL_SYNC_ORIGIN) {
9937
+ if (transaction?.origin === chunkEFSQW6S5_js.LOCAL_SYNC_ORIGIN) {
9938
9938
  return;
9939
9939
  }
9940
- const remoteSlides = chunkTDUDH7S4_js.readSlidesFromYDoc(
9940
+ const remoteSlides = chunkEFSQW6S5_js.readSlidesFromYDoc(
9941
9941
  doc
9942
9942
  );
9943
9943
  if (remoteSlides.length === 0) {
@@ -9953,7 +9953,7 @@ function useYjsDocumentSync({
9953
9953
  isApplyingRemoteRef.current = false;
9954
9954
  scheduleWriteBack();
9955
9955
  };
9956
- const unobserve = chunkTDUDH7S4_js.observeYDocSlides(
9956
+ const unobserve = chunkEFSQW6S5_js.observeYDocSlides(
9957
9957
  doc,
9958
9958
  handleChange
9959
9959
  );
@@ -9991,7 +9991,7 @@ function useBroadcastFollower({
9991
9991
  if (!broadcaster) {
9992
9992
  return;
9993
9993
  }
9994
- if (!chunkTDUDH7S4_js.shouldAutoFollowBroadcaster({
9994
+ if (!chunkEFSQW6S5_js.shouldAutoFollowBroadcaster({
9995
9995
  localRole: collab.config.role,
9996
9996
  broadcasterRole: broadcaster.role
9997
9997
  })) {
@@ -10151,10 +10151,10 @@ function useTouchGestures(input) {
10151
10151
  if (!el || !enabled) {
10152
10152
  return;
10153
10153
  }
10154
- const recognizer = chunkTDUDH7S4_js.createTouchGestureRecognizer({
10154
+ const recognizer = chunkEFSQW6S5_js.createTouchGestureRecognizer({
10155
10155
  getScale: () => scaleRef.current,
10156
- minScale: chunkTDUDH7S4_js.MIN_ZOOM_SCALE,
10157
- maxScale: chunkTDUDH7S4_js.MAX_ZOOM_SCALE,
10156
+ minScale: chunkEFSQW6S5_js.MIN_ZOOM_SCALE,
10157
+ maxScale: chunkEFSQW6S5_js.MAX_ZOOM_SCALE,
10158
10158
  callbacks: {
10159
10159
  onPinchZoom: (newScale) => callbacksRef.current.onPinchZoom?.(newScale),
10160
10160
  onSwipe: (direction) => callbacksRef.current.onSwipe?.(direction),
@@ -10194,7 +10194,7 @@ function scrollFocusedIntoView(keyboardInset) {
10194
10194
  return;
10195
10195
  }
10196
10196
  const rect = active.getBoundingClientRect();
10197
- const delta = chunkTDUDH7S4_js.computeScrollDelta(
10197
+ const delta = chunkEFSQW6S5_js.computeScrollDelta(
10198
10198
  { top: rect.top, bottom: rect.bottom },
10199
10199
  window.innerHeight,
10200
10200
  keyboardInset
@@ -10214,8 +10214,8 @@ function useKeyboardInsets(enabled = true) {
10214
10214
  return;
10215
10215
  }
10216
10216
  const update = () => {
10217
- const metrics = chunkTDUDH7S4_js.readViewportMetrics(window);
10218
- const inset = metrics ? chunkTDUDH7S4_js.computeKeyboardInset(metrics) : 0;
10217
+ const metrics = chunkEFSQW6S5_js.readViewportMetrics(window);
10218
+ const inset = metrics ? chunkEFSQW6S5_js.computeKeyboardInset(metrics) : 0;
10219
10219
  setKeyboardInset(inset);
10220
10220
  if (inset > 0) {
10221
10221
  window.requestAnimationFrame(() => scrollFocusedIntoView(inset));
@@ -10226,8 +10226,8 @@ function useKeyboardInsets(enabled = true) {
10226
10226
  vv.addEventListener("scroll", update);
10227
10227
  const onFocusIn = () => {
10228
10228
  window.requestAnimationFrame(() => {
10229
- const metrics = chunkTDUDH7S4_js.readViewportMetrics(window);
10230
- const inset = metrics ? chunkTDUDH7S4_js.computeKeyboardInset(metrics) : 0;
10229
+ const metrics = chunkEFSQW6S5_js.readViewportMetrics(window);
10230
+ const inset = metrics ? chunkEFSQW6S5_js.computeKeyboardInset(metrics) : 0;
10231
10231
  if (inset > 0) {
10232
10232
  scrollFocusedIntoView(inset);
10233
10233
  }
@@ -10240,7 +10240,7 @@ function useKeyboardInsets(enabled = true) {
10240
10240
  document.removeEventListener("focusin", onFocusIn);
10241
10241
  };
10242
10242
  }, [enabled]);
10243
- return { keyboardInset, isKeyboardOpen: chunkTDUDH7S4_js.isKeyboardOpen(keyboardInset) };
10243
+ return { keyboardInset, isKeyboardOpen: chunkEFSQW6S5_js.isKeyboardOpen(keyboardInset) };
10244
10244
  }
10245
10245
 
10246
10246
  // src/viewer/hooks/useViewerBuildingBlocks-canvas-props.ts
@@ -10267,7 +10267,7 @@ function buildCanvasProps(input) {
10267
10267
  } = input;
10268
10268
  const effectiveSlide = mode === "master" ? masterPseudoSlide : activeSlide;
10269
10269
  const effectiveTemplateElements = mode === "master" ? s.activeLayout ? s.activeMaster?.elements ?? [] : [] : templateElements;
10270
- const fieldContext = chunkTDUDH7S4_js.buildFieldSubstitutionContext({
10270
+ const fieldContext = chunkEFSQW6S5_js.buildFieldSubstitutionContext({
10271
10271
  headerFooter: s.headerFooter,
10272
10272
  customProperties: s.customProperties,
10273
10273
  slide: activeSlide
@@ -10277,13 +10277,13 @@ function buildCanvasProps(input) {
10277
10277
  if (mode === "present") {
10278
10278
  presentation.handlePresentationAction(action);
10279
10279
  } else if (action.url) {
10280
- chunkTDUDH7S4_js.safeOpenUrl(action.url);
10280
+ chunkEFSQW6S5_js.safeOpenUrl(action.url);
10281
10281
  }
10282
10282
  };
10283
10283
  const handleHyperlinkClick = (url) => {
10284
- if (chunkTDUDH7S4_js.isPpactionUrl(url)) {
10284
+ if (chunkEFSQW6S5_js.isPpactionUrl(url)) {
10285
10285
  if (mode === "present") {
10286
- const parsed = chunkTDUDH7S4_js.parsePpactionUrl(url);
10286
+ const parsed = chunkEFSQW6S5_js.parsePpactionUrl(url);
10287
10287
  if (parsed) {
10288
10288
  presentation.handlePresentationAction({
10289
10289
  action: parsed.action,
@@ -10293,7 +10293,7 @@ function buildCanvasProps(input) {
10293
10293
  }
10294
10294
  return;
10295
10295
  }
10296
- chunkTDUDH7S4_js.safeOpenUrl(url);
10296
+ chunkEFSQW6S5_js.safeOpenUrl(url);
10297
10297
  };
10298
10298
  return {
10299
10299
  activeSlide: effectiveSlide,
@@ -10436,7 +10436,7 @@ function buildToolbarAnimationHandlers(input) {
10436
10436
  const current = activeSlide.animations ?? [];
10437
10437
  if (group === "motionPath") {
10438
10438
  propertyHandlers.handleUpdateSlide({
10439
- animations: chunkTDUDH7S4_js.applyMotionPathPreset(current, selectedElement.id, preset)
10439
+ animations: chunkEFSQW6S5_js.applyMotionPathPreset(current, selectedElement.id, preset)
10440
10440
  });
10441
10441
  return;
10442
10442
  }
@@ -10630,7 +10630,7 @@ function buildToolbarProps(input) {
10630
10630
  onOpenFile,
10631
10631
  onOpenRecentFile,
10632
10632
  onCreatePresentation: (templateId) => {
10633
- s.setSlides(chunkTDUDH7S4_js.createBackstagePresentation(templateId));
10633
+ s.setSlides(chunkEFSQW6S5_js.createBackstagePresentation(templateId));
10634
10634
  s.setActiveSlideIndex(0);
10635
10635
  s.setSelectedElementId(null);
10636
10636
  s.setSelectedElementIds([]);
@@ -10687,7 +10687,7 @@ function buildToolbarProps(input) {
10687
10687
  isCommentsPanelOpen: s.isInspectorPaneOpen,
10688
10688
  slideCommentCount: activeSlide?.comments?.length ?? 0,
10689
10689
  formatPainterActive: s.formatPainterActive,
10690
- canActivateFormatPainter: chunkTDUDH7S4_js.hasCopyableFormat(selectedElement),
10690
+ canActivateFormatPainter: chunkEFSQW6S5_js.hasCopyableFormat(selectedElement),
10691
10691
  onToggleFormatPainter: () => s.setFormatPainterActive((p) => !p),
10692
10692
  isSelectionPaneOpen: s.isSelectionPaneOpen,
10693
10693
  onToggleSelectionPane: () => s.setIsSelectionPaneOpen((p) => !p),
@@ -10956,7 +10956,7 @@ function useViewerBuildingBlocks(input) {
10956
10956
  }, [incomingContent]);
10957
10957
  const onOpenFile = react.useCallback(() => {
10958
10958
  void (async () => {
10959
- const picked = await chunkTDUDH7S4_js.openPptxFile();
10959
+ const picked = await chunkEFSQW6S5_js.openPptxFile();
10960
10960
  if (picked) {
10961
10961
  setContent(picked.buffer);
10962
10962
  }
@@ -10964,7 +10964,7 @@ function useViewerBuildingBlocks(input) {
10964
10964
  }, []);
10965
10965
  const onOpenRecentFile = react.useCallback((key) => {
10966
10966
  void (async () => {
10967
- const bytes = await chunkTDUDH7S4_js.readBackstageRecentFile(key);
10967
+ const bytes = await chunkEFSQW6S5_js.readBackstageRecentFile(key);
10968
10968
  if (bytes) {
10969
10969
  setContent(bytes);
10970
10970
  }