pptx-react-viewer 3.16.3 → 3.16.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (132) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/{AiChatPanel-G33WODR7.js → AiChatPanel-QJKB2BL3.js} +24 -24
  3. package/dist/AiChatPanel-QJKB2BL3.js.br +0 -0
  4. package/dist/AiChatPanel-QJKB2BL3.js.gz +0 -0
  5. package/dist/{AiChatPanel-X7NUNEJO.mjs → AiChatPanel-YWYME2RM.mjs} +3 -3
  6. package/dist/AiChatPanel-YWYME2RM.mjs.br +0 -0
  7. package/dist/AiChatPanel-YWYME2RM.mjs.gz +0 -0
  8. package/dist/{Area3DChartScene-HBTW5EQP.mjs → Area3DChartScene-47SQRQTD.mjs} +1 -1
  9. package/dist/Area3DChartScene-47SQRQTD.mjs.br +0 -0
  10. package/dist/Area3DChartScene-47SQRQTD.mjs.gz +0 -0
  11. package/dist/{Area3DChartScene-R3P4NSR5.js → Area3DChartScene-DEWKUQUS.js} +2 -2
  12. package/dist/{Area3DChartScene-R3P4NSR5.js.br → Area3DChartScene-DEWKUQUS.js.br} +0 -0
  13. package/dist/Area3DChartScene-DEWKUQUS.js.gz +0 -0
  14. package/dist/{Bar3DChartScene-6IKIGGD7.js → Bar3DChartScene-HRCZHDNT.js} +2 -2
  15. package/dist/Bar3DChartScene-HRCZHDNT.js.br +0 -0
  16. package/dist/Bar3DChartScene-HRCZHDNT.js.gz +0 -0
  17. package/dist/{Bar3DChartScene-RTHG6TVC.mjs → Bar3DChartScene-JXXBIKLB.mjs} +1 -1
  18. package/dist/{Bar3DChartScene-RTHG6TVC.mjs.br → Bar3DChartScene-JXXBIKLB.mjs.br} +0 -0
  19. package/dist/Bar3DChartScene-JXXBIKLB.mjs.gz +0 -0
  20. package/dist/{Line3DChartScene-HNNC2O66.js → Line3DChartScene-JPHU2WGC.js} +2 -2
  21. package/dist/{Line3DChartScene-HNNC2O66.js.br → Line3DChartScene-JPHU2WGC.js.br} +0 -0
  22. package/dist/Line3DChartScene-JPHU2WGC.js.gz +0 -0
  23. package/dist/{Line3DChartScene-WQIUFVLB.mjs → Line3DChartScene-S2SV5HCH.mjs} +1 -1
  24. package/dist/{Line3DChartScene-WQIUFVLB.mjs.br → Line3DChartScene-S2SV5HCH.mjs.br} +0 -0
  25. package/dist/Line3DChartScene-S2SV5HCH.mjs.gz +0 -0
  26. package/dist/{Model3DScene-BPHGVJQG.mjs → Model3DScene-4MOLASW6.mjs} +1 -1
  27. package/dist/Model3DScene-4MOLASW6.mjs.br +0 -0
  28. package/dist/Model3DScene-4MOLASW6.mjs.gz +0 -0
  29. package/dist/{Model3DScene-AAMDGTRI.js → Model3DScene-JP4ICMLY.js} +2 -2
  30. package/dist/Model3DScene-JP4ICMLY.js.br +0 -0
  31. package/dist/Model3DScene-JP4ICMLY.js.gz +0 -0
  32. package/dist/{PieChart3DScene-S5OWDFJN.mjs → PieChart3DScene-PV7BN7MS.mjs} +1 -1
  33. package/dist/{PieChart3DScene-S5OWDFJN.mjs.br → PieChart3DScene-PV7BN7MS.mjs.br} +0 -0
  34. package/dist/PieChart3DScene-PV7BN7MS.mjs.gz +0 -0
  35. package/dist/{PieChart3DScene-LO6IJAWY.js → PieChart3DScene-QYWGHJGG.js} +2 -2
  36. package/dist/{PieChart3DScene-LO6IJAWY.js.br → PieChart3DScene-QYWGHJGG.js.br} +0 -0
  37. package/dist/PieChart3DScene-QYWGHJGG.js.gz +0 -0
  38. package/dist/{SurfaceChart3DScene-7CKYX5HW.mjs → SurfaceChart3DScene-7ONY7OIY.mjs} +1 -1
  39. package/dist/SurfaceChart3DScene-7ONY7OIY.mjs.br +0 -0
  40. package/dist/SurfaceChart3DScene-7ONY7OIY.mjs.gz +0 -0
  41. package/dist/{SurfaceChart3DScene-FLQRXC6F.js → SurfaceChart3DScene-KAD2GVBY.js} +2 -2
  42. package/dist/{SurfaceChart3DScene-FLQRXC6F.js.br → SurfaceChart3DScene-KAD2GVBY.js.br} +0 -0
  43. package/dist/SurfaceChart3DScene-KAD2GVBY.js.gz +0 -0
  44. package/dist/{chunk-CVS2CHLU.js → chunk-4WGGCKLD.js} +5 -5
  45. package/dist/chunk-4WGGCKLD.js.br +0 -0
  46. package/dist/chunk-4WGGCKLD.js.gz +0 -0
  47. package/dist/{chunk-VA2JFII4.mjs → chunk-6TGJ5RGQ.mjs} +1 -1
  48. package/dist/chunk-6TGJ5RGQ.mjs.br +0 -0
  49. package/dist/{chunk-VA2JFII4.mjs.gz → chunk-6TGJ5RGQ.mjs.gz} +0 -0
  50. package/dist/{chunk-QMLJFL7G.js → chunk-EDCU5EK5.js} +451 -451
  51. package/dist/chunk-EDCU5EK5.js.br +0 -0
  52. package/dist/chunk-EDCU5EK5.js.gz +0 -0
  53. package/dist/{chunk-WTPGQ3K7.mjs → chunk-IKQY2ZU2.mjs} +1 -1
  54. package/dist/chunk-IKQY2ZU2.mjs.br +0 -0
  55. package/dist/chunk-IKQY2ZU2.mjs.gz +0 -0
  56. package/dist/{chunk-VVAXSNG5.mjs → chunk-ISXUHV3L.mjs} +2 -2
  57. package/dist/chunk-ISXUHV3L.mjs.br +0 -0
  58. package/dist/chunk-ISXUHV3L.mjs.gz +0 -0
  59. package/dist/{chunk-4CLG3TRU.js → chunk-NMSZ3NSG.js} +169 -169
  60. package/dist/chunk-NMSZ3NSG.js.br +0 -0
  61. package/dist/chunk-NMSZ3NSG.js.gz +0 -0
  62. package/dist/{chunk-3TPQY6WR.js → chunk-PABSSYRA.js} +134 -103
  63. package/dist/chunk-PABSSYRA.js.br +0 -0
  64. package/dist/chunk-PABSSYRA.js.gz +0 -0
  65. package/dist/{chunk-4U3OI6J3.mjs → chunk-R5CW64K4.mjs} +134 -103
  66. package/dist/chunk-R5CW64K4.mjs.br +0 -0
  67. package/dist/chunk-R5CW64K4.mjs.gz +0 -0
  68. package/dist/{chunk-2G2MMJRA.mjs → chunk-USQGKC4A.mjs} +12 -12
  69. package/dist/chunk-USQGKC4A.mjs.br +0 -0
  70. package/dist/chunk-USQGKC4A.mjs.gz +0 -0
  71. package/dist/{chunk-AAVKRMQA.js → chunk-ZWZGKJ4E.js} +1290 -1290
  72. package/dist/chunk-ZWZGKJ4E.js.br +0 -0
  73. package/dist/chunk-ZWZGKJ4E.js.gz +0 -0
  74. package/dist/index.js +45 -45
  75. package/dist/index.js.br +0 -0
  76. package/dist/index.js.gz +0 -0
  77. package/dist/index.mjs +5 -5
  78. package/dist/index.mjs.br +0 -0
  79. package/dist/index.mjs.gz +0 -0
  80. package/dist/internals.js +78 -78
  81. package/dist/internals.js.br +0 -0
  82. package/dist/internals.js.gz +0 -0
  83. package/dist/internals.mjs +3 -3
  84. package/dist/internals.mjs.br +0 -0
  85. package/dist/internals.mjs.gz +0 -0
  86. package/dist/viewer/index.js +26 -26
  87. package/dist/viewer/index.js.br +0 -0
  88. package/dist/viewer/index.js.gz +0 -0
  89. package/dist/viewer/index.mjs +5 -5
  90. package/dist/viewer/index.mjs.br +0 -0
  91. package/dist/viewer/index.mjs.gz +0 -0
  92. package/package.json +1 -1
  93. package/dist/AiChatPanel-G33WODR7.js.br +0 -0
  94. package/dist/AiChatPanel-G33WODR7.js.gz +0 -0
  95. package/dist/AiChatPanel-X7NUNEJO.mjs.br +0 -0
  96. package/dist/AiChatPanel-X7NUNEJO.mjs.gz +0 -0
  97. package/dist/Area3DChartScene-HBTW5EQP.mjs.br +0 -0
  98. package/dist/Area3DChartScene-HBTW5EQP.mjs.gz +0 -0
  99. package/dist/Area3DChartScene-R3P4NSR5.js.gz +0 -0
  100. package/dist/Bar3DChartScene-6IKIGGD7.js.br +0 -0
  101. package/dist/Bar3DChartScene-6IKIGGD7.js.gz +0 -0
  102. package/dist/Bar3DChartScene-RTHG6TVC.mjs.gz +0 -0
  103. package/dist/Line3DChartScene-HNNC2O66.js.gz +0 -0
  104. package/dist/Line3DChartScene-WQIUFVLB.mjs.gz +0 -0
  105. package/dist/Model3DScene-AAMDGTRI.js.br +0 -0
  106. package/dist/Model3DScene-AAMDGTRI.js.gz +0 -0
  107. package/dist/Model3DScene-BPHGVJQG.mjs.br +0 -0
  108. package/dist/Model3DScene-BPHGVJQG.mjs.gz +0 -0
  109. package/dist/PieChart3DScene-LO6IJAWY.js.gz +0 -0
  110. package/dist/PieChart3DScene-S5OWDFJN.mjs.gz +0 -0
  111. package/dist/SurfaceChart3DScene-7CKYX5HW.mjs.br +0 -0
  112. package/dist/SurfaceChart3DScene-7CKYX5HW.mjs.gz +0 -0
  113. package/dist/SurfaceChart3DScene-FLQRXC6F.js.gz +0 -0
  114. package/dist/chunk-2G2MMJRA.mjs.br +0 -0
  115. package/dist/chunk-2G2MMJRA.mjs.gz +0 -0
  116. package/dist/chunk-3TPQY6WR.js.br +0 -0
  117. package/dist/chunk-3TPQY6WR.js.gz +0 -0
  118. package/dist/chunk-4CLG3TRU.js.br +0 -0
  119. package/dist/chunk-4CLG3TRU.js.gz +0 -0
  120. package/dist/chunk-4U3OI6J3.mjs.br +0 -0
  121. package/dist/chunk-4U3OI6J3.mjs.gz +0 -0
  122. package/dist/chunk-AAVKRMQA.js.br +0 -0
  123. package/dist/chunk-AAVKRMQA.js.gz +0 -0
  124. package/dist/chunk-CVS2CHLU.js.br +0 -0
  125. package/dist/chunk-CVS2CHLU.js.gz +0 -0
  126. package/dist/chunk-QMLJFL7G.js.br +0 -0
  127. package/dist/chunk-QMLJFL7G.js.gz +0 -0
  128. package/dist/chunk-VA2JFII4.mjs.br +0 -0
  129. package/dist/chunk-VVAXSNG5.mjs.br +0 -0
  130. package/dist/chunk-VVAXSNG5.mjs.gz +0 -0
  131. package/dist/chunk-WTPGQ3K7.mjs.br +0 -0
  132. package/dist/chunk-WTPGQ3K7.mjs.gz +0 -0
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
- var chunk4CLG3TRU_js = require('./chunk-4CLG3TRU.js');
4
- var chunk3TPQY6WR_js = require('./chunk-3TPQY6WR.js');
3
+ var chunkNMSZ3NSG_js = require('./chunk-NMSZ3NSG.js');
4
+ var chunkPABSSYRA_js = require('./chunk-PABSSYRA.js');
5
5
  var chunk3AJ54EAB_js = require('./chunk-3AJ54EAB.js');
6
6
  var react = require('react');
7
7
  var reactI18next = require('react-i18next');
@@ -9,7 +9,7 @@ var reactI18next = require('react-i18next');
9
9
  function useVirtualizedSlides({
10
10
  totalItems,
11
11
  itemHeight,
12
- overscan = chunk3TPQY6WR_js.DEFAULT_VIRTUAL_OVERSCAN
12
+ overscan = chunkPABSSYRA_js.DEFAULT_VIRTUAL_OVERSCAN
13
13
  }) {
14
14
  const scrollContainerRef = react.useRef(null);
15
15
  const [scrollTop, setScrollTop] = react.useState(0);
@@ -39,7 +39,7 @@ function useVirtualizedSlides({
39
39
  resizeObserver?.disconnect();
40
40
  };
41
41
  }, []);
42
- const range = chunk3TPQY6WR_js.computeVirtualRange(totalItems, itemHeight, scrollTop, viewportHeight, overscan);
42
+ const range = chunkPABSSYRA_js.computeVirtualRange(totalItems, itemHeight, scrollTop, viewportHeight, overscan);
43
43
  const safeItemHeight = Math.max(itemHeight, 1);
44
44
  const scrollToIndex = react.useCallback(
45
45
  (index, behavior = "smooth") => {
@@ -80,7 +80,7 @@ function usePresenceTracking({
80
80
  }) {
81
81
  const [remoteUsers, setRemoteUsers] = react.useState([]);
82
82
  const projectorRef = react.useRef(null);
83
- projectorRef.current ??= chunk3TPQY6WR_js.createPresenceProjector();
83
+ projectorRef.current ??= chunkPABSSYRA_js.createPresenceProjector();
84
84
  const projector = projectorRef.current;
85
85
  const lastBroadcastRef = react.useRef(0);
86
86
  const pendingBroadcastRef = react.useRef(null);
@@ -105,7 +105,7 @@ function usePresenceTracking({
105
105
  awareness.setLocalStateField("presence", state);
106
106
  lastBroadcastRef.current = Date.now();
107
107
  };
108
- if (elapsed >= chunk3TPQY6WR_js.BROADCAST_THROTTLE_MS) {
108
+ if (elapsed >= chunkPABSSYRA_js.BROADCAST_THROTTLE_MS) {
109
109
  if (pendingBroadcastRef.current) {
110
110
  clearTimeout(pendingBroadcastRef.current);
111
111
  pendingBroadcastRef.current = null;
@@ -115,7 +115,7 @@ function usePresenceTracking({
115
115
  pendingBroadcastRef.current = setTimeout(() => {
116
116
  pendingBroadcastRef.current = null;
117
117
  flush();
118
- }, chunk3TPQY6WR_js.BROADCAST_THROTTLE_MS - elapsed);
118
+ }, chunkPABSSYRA_js.BROADCAST_THROTTLE_MS - elapsed);
119
119
  }
120
120
  },
121
121
  [awareness, userName, userColor, userAvatar, role]
@@ -195,7 +195,7 @@ function useYjsProvider({ config }) {
195
195
  const departureRef = react.useRef(null);
196
196
  const gateRef = react.useRef(null);
197
197
  if (!gateRef.current) {
198
- gateRef.current = chunk3TPQY6WR_js.createSyncGate(() => setSynced(true));
198
+ gateRef.current = chunkPABSSYRA_js.createSyncGate(() => setSynced(true));
199
199
  }
200
200
  const teardown = react.useCallback(() => {
201
201
  if (timeoutRef.current) {
@@ -215,7 +215,7 @@ function useYjsProvider({ config }) {
215
215
  const buildCleanup = react.useCallback(
216
216
  (provider, yDoc) => () => {
217
217
  announceDeparture();
218
- chunk3TPQY6WR_js.clearLocalAwareness(provider.awareness);
218
+ chunkPABSSYRA_js.clearLocalAwareness(provider.awareness);
219
219
  provider.destroy();
220
220
  yDoc.destroy();
221
221
  setDoc(null);
@@ -240,9 +240,9 @@ function useYjsProvider({ config }) {
240
240
  if (config.authToken) {
241
241
  opts.password = config.authToken;
242
242
  }
243
- const roomId = chunk3TPQY6WR_js.validateRoomId(config.roomId);
243
+ const roomId = chunkPABSSYRA_js.validateRoomId(config.roomId);
244
244
  const provider = new WebrtcProvider(roomId, yDoc, opts);
245
- departureRef.current = chunk3TPQY6WR_js.createDepartureChannel(roomId, provider.awareness);
245
+ departureRef.current = chunkPABSSYRA_js.createDepartureChannel(roomId, provider.awareness);
246
246
  setDoc(yDoc);
247
247
  setAwareness(provider.awareness);
248
248
  setClientId(provider.awareness.clientID);
@@ -284,13 +284,13 @@ function useYjsProvider({ config }) {
284
284
  if (!config) {
285
285
  return;
286
286
  }
287
- const roomId = chunk3TPQY6WR_js.validateRoomId(config.roomId);
288
- const transport = config.transport ?? chunk3TPQY6WR_js.resolveTransportForServerUrl(config.serverUrl);
287
+ const roomId = chunkPABSSYRA_js.validateRoomId(config.roomId);
288
+ const transport = config.transport ?? chunkPABSSYRA_js.resolveTransportForServerUrl(config.serverUrl);
289
289
  if (transport === "webrtc") {
290
290
  await initWebrtc();
291
291
  return;
292
292
  }
293
- if (chunk3TPQY6WR_js.isMixedContentBlocked(config.serverUrl)) {
293
+ if (chunkPABSSYRA_js.isMixedContentBlocked(config.serverUrl)) {
294
294
  console.warn(
295
295
  `[pptx-viewer] Refusing to connect: insecure ws:// server "${config.serverUrl}" is blocked from a secure (https) page. Use a wss:// URL.`
296
296
  );
@@ -304,7 +304,7 @@ function useYjsProvider({ config }) {
304
304
  const provider = new WebsocketProvider(config.serverUrl, roomId, yDoc, {
305
305
  params: config.authToken ? { token: config.authToken } : void 0
306
306
  });
307
- departureRef.current = chunk3TPQY6WR_js.createDepartureChannel(roomId, provider.awareness);
307
+ departureRef.current = chunkPABSSYRA_js.createDepartureChannel(roomId, provider.awareness);
308
308
  let connected = false;
309
309
  const handleStatus = (event) => {
310
310
  if (event.status === "connected") {
@@ -344,7 +344,7 @@ function useYjsProvider({ config }) {
344
344
  provider.off("status", handleStatus);
345
345
  provider.off("sync", handleSynced);
346
346
  announceDeparture();
347
- chunk3TPQY6WR_js.clearLocalAwareness(provider.awareness);
347
+ chunkPABSSYRA_js.clearLocalAwareness(provider.awareness);
348
348
  provider.destroy();
349
349
  yDoc.destroy();
350
350
  setDoc(null);
@@ -353,7 +353,7 @@ function useYjsProvider({ config }) {
353
353
  cleanupRef.current = null;
354
354
  setStatus("error");
355
355
  }
356
- }, chunk3TPQY6WR_js.CONNECTION_TIMEOUT_MS);
356
+ }, chunkPABSSYRA_js.CONNECTION_TIMEOUT_MS);
357
357
  }
358
358
  setDoc(yDoc);
359
359
  setAwareness(provider.awareness);
@@ -362,7 +362,7 @@ function useYjsProvider({ config }) {
362
362
  provider.off("status", handleStatus);
363
363
  provider.off("sync", handleSynced);
364
364
  announceDeparture();
365
- chunk3TPQY6WR_js.clearLocalAwareness(provider.awareness);
365
+ chunkPABSSYRA_js.clearLocalAwareness(provider.awareness);
366
366
  provider.destroy();
367
367
  yDoc.destroy();
368
368
  setDoc(null);
@@ -388,7 +388,7 @@ function useYjsProvider({ config }) {
388
388
  ]);
389
389
  react.useEffect(() => {
390
390
  init();
391
- const disposeTeardown = chunk3TPQY6WR_js.registerCollaborationTeardown({
391
+ const disposeTeardown = chunkPABSSYRA_js.registerCollaborationTeardown({
392
392
  leave: teardown,
393
393
  rejoin: init
394
394
  });
@@ -409,7 +409,7 @@ function useCollaborativeState({
409
409
  canvasWidth,
410
410
  canvasHeight
411
411
  }) {
412
- const userColor = chunk3TPQY6WR_js.sanitizeColor(config?.userColor, "#6366f1");
412
+ const userColor = chunkPABSSYRA_js.sanitizeColor(config?.userColor, "#6366f1");
413
413
  const { status, awareness, doc, clientId, synced, retry } = useYjsProvider({ config });
414
414
  const { remoteUsers, broadcastPresence } = usePresenceTracking({
415
415
  awareness,
@@ -527,8 +527,8 @@ function useEditorHistory(input) {
527
527
  width: canvasSize.width,
528
528
  height: canvasSize.height,
529
529
  activeSlideIndex,
530
- slides: slides.map(chunk3TPQY6WR_js.cloneSlide),
531
- templateElementsBySlideId: chunk3TPQY6WR_js.cloneTemplateElementsBySlideId(templateElementsBySlideId),
530
+ slides: slides.map(chunkPABSSYRA_js.cloneSlide),
531
+ templateElementsBySlideId: chunkPABSSYRA_js.cloneTemplateElementsBySlideId(templateElementsBySlideId),
532
532
  ...actionLabel ? { actionLabel } : {}
533
533
  };
534
534
  },
@@ -541,9 +541,9 @@ function useEditorHistory(input) {
541
541
  width: snapshot.width,
542
542
  height: snapshot.height
543
543
  });
544
- setSlides(snapshot.slides.map(chunk3TPQY6WR_js.cloneSlide));
544
+ setSlides(snapshot.slides.map(chunkPABSSYRA_js.cloneSlide));
545
545
  setTemplateElementsBySlideId(
546
- chunk3TPQY6WR_js.cloneTemplateElementsBySlideId(snapshot.templateElementsBySlideId)
546
+ chunkPABSSYRA_js.cloneTemplateElementsBySlideId(snapshot.templateElementsBySlideId)
547
547
  );
548
548
  setActiveSlideIndex(Math.min(snapshot.activeSlideIndex, maxSlideIndex));
549
549
  setSelectedElementIds([]);
@@ -582,8 +582,8 @@ function useEditorHistory(input) {
582
582
  const currentSnapshot = buildHistorySnapshot();
583
583
  historyFutureRef.current.push(currentSnapshot);
584
584
  isApplyingHistoryRef.current = true;
585
- const nextSnapshot = chunk4CLG3TRU_js.cloneHistorySnapshot(previousSnapshot);
586
- lastHistorySnapshotRef.current = chunk4CLG3TRU_js.cloneHistorySnapshot(nextSnapshot);
585
+ const nextSnapshot = chunkNMSZ3NSG_js.cloneHistorySnapshot(previousSnapshot);
586
+ lastHistorySnapshotRef.current = chunkNMSZ3NSG_js.cloneHistorySnapshot(nextSnapshot);
587
587
  lastHistorySerializedRef.current = serializeDocument(nextSnapshot);
588
588
  applyHistorySnapshot(nextSnapshot);
589
589
  updateHistoryAvailability();
@@ -604,8 +604,8 @@ function useEditorHistory(input) {
604
604
  const currentSnapshot = buildHistorySnapshot();
605
605
  historyPastRef.current.push(currentSnapshot);
606
606
  isApplyingHistoryRef.current = true;
607
- const targetSnapshot = chunk4CLG3TRU_js.cloneHistorySnapshot(nextSnapshot);
608
- lastHistorySnapshotRef.current = chunk4CLG3TRU_js.cloneHistorySnapshot(targetSnapshot);
607
+ const targetSnapshot = chunkNMSZ3NSG_js.cloneHistorySnapshot(nextSnapshot);
608
+ lastHistorySnapshotRef.current = chunkNMSZ3NSG_js.cloneHistorySnapshot(targetSnapshot);
609
609
  lastHistorySerializedRef.current = serializeDocument(targetSnapshot);
610
610
  applyHistorySnapshot(targetSnapshot);
611
611
  updateHistoryAvailability();
@@ -623,7 +623,7 @@ function useEditorHistory(input) {
623
623
  historyPastRef.current = [];
624
624
  historyFutureRef.current = [];
625
625
  if (initialSnapshot) {
626
- const clonedInitial = chunk4CLG3TRU_js.cloneHistorySnapshot(initialSnapshot);
626
+ const clonedInitial = chunkNMSZ3NSG_js.cloneHistorySnapshot(initialSnapshot);
627
627
  lastHistorySnapshotRef.current = clonedInitial;
628
628
  lastHistorySerializedRef.current = serializeDocument(clonedInitial);
629
629
  } else {
@@ -671,19 +671,19 @@ function useEditorHistory(input) {
671
671
  }
672
672
  const previousSnapshot = lastHistorySnapshotRef.current;
673
673
  if (!previousSnapshot) {
674
- lastHistorySnapshotRef.current = chunk4CLG3TRU_js.cloneHistorySnapshot(snapshot);
674
+ lastHistorySnapshotRef.current = chunkNMSZ3NSG_js.cloneHistorySnapshot(snapshot);
675
675
  lastHistorySerializedRef.current = serialized;
676
676
  lastCheapHashRef.current = cheapHash;
677
677
  updateHistoryAvailability();
678
678
  return;
679
679
  }
680
680
  onDirtyRef.current?.();
681
- historyPastRef.current.push(chunk4CLG3TRU_js.cloneHistorySnapshot(previousSnapshot));
681
+ historyPastRef.current.push(chunkNMSZ3NSG_js.cloneHistorySnapshot(previousSnapshot));
682
682
  while (historyPastRef.current.length > Math.max(1, maxHistoryEntries)) {
683
683
  historyPastRef.current.shift();
684
684
  }
685
685
  historyFutureRef.current = [];
686
- lastHistorySnapshotRef.current = chunk4CLG3TRU_js.cloneHistorySnapshot(snapshot);
686
+ lastHistorySnapshotRef.current = chunkNMSZ3NSG_js.cloneHistorySnapshot(snapshot);
687
687
  lastHistorySerializedRef.current = serialized;
688
688
  lastCheapHashRef.current = cheapHash;
689
689
  updateHistoryAvailability();
@@ -743,9 +743,9 @@ function useZoomViewport({
743
743
  const canvasStageRef = react.useRef(null);
744
744
  const canvasViewportRef = react.useRef(null);
745
745
  const renderScaleRef = react.useRef(1);
746
- const wheelBufferRef = react.useRef(chunk3TPQY6WR_js.createWheelStepBuffer());
746
+ const wheelBufferRef = react.useRef(chunkPABSSYRA_js.createWheelStepBuffer());
747
747
  const storeRef = react.useRef(null);
748
- storeRef.current ??= chunk3TPQY6WR_js.createViewerZoomStore();
748
+ storeRef.current ??= chunkPABSSYRA_js.createViewerZoomStore();
749
749
  const store = storeRef.current;
750
750
  const scale = useViewerStore(store, selectZoom);
751
751
  const setScale = react.useCallback(
@@ -806,7 +806,7 @@ function useZoomViewport({
806
806
  if (!wrapper || !canvasViewport) {
807
807
  return;
808
808
  }
809
- const boundedScale = chunk3TPQY6WR_js.clampZoomScale(nextScale);
809
+ const boundedScale = chunkPABSSYRA_js.clampZoomScale(nextScale);
810
810
  const nextEditorScale = fitScale * boundedScale;
811
811
  const centerX = (bounds.minX + bounds.maxX) / 2;
812
812
  const centerY = (bounds.minY + bounds.maxY) / 2;
@@ -843,29 +843,29 @@ function useZoomViewport({
843
843
  selectedElements.forEach((element) => {
844
844
  minX = Math.min(minX, element.x);
845
845
  minY = Math.min(minY, element.y);
846
- maxX = Math.max(maxX, element.x + Math.max(element.width, chunk4CLG3TRU_js.MIN_ELEMENT_SIZE));
847
- maxY = Math.max(maxY, element.y + Math.max(element.height, chunk4CLG3TRU_js.MIN_ELEMENT_SIZE));
846
+ maxX = Math.max(maxX, element.x + Math.max(element.width, chunkNMSZ3NSG_js.MIN_ELEMENT_SIZE));
847
+ maxY = Math.max(maxY, element.y + Math.max(element.height, chunkNMSZ3NSG_js.MIN_ELEMENT_SIZE));
848
848
  });
849
849
  if (!Number.isFinite(minX) || !Number.isFinite(minY) || !Number.isFinite(maxX) || !Number.isFinite(maxY)) {
850
850
  return;
851
851
  }
852
852
  const selectionBounds = { minX, minY, maxX, maxY };
853
- const boundsWidth = Math.max(selectionBounds.maxX - selectionBounds.minX, chunk4CLG3TRU_js.MIN_ELEMENT_SIZE);
854
- const boundsHeight = Math.max(selectionBounds.maxY - selectionBounds.minY, chunk4CLG3TRU_js.MIN_ELEMENT_SIZE);
853
+ const boundsWidth = Math.max(selectionBounds.maxX - selectionBounds.minX, chunkNMSZ3NSG_js.MIN_ELEMENT_SIZE);
854
+ const boundsHeight = Math.max(selectionBounds.maxY - selectionBounds.minY, chunkNMSZ3NSG_js.MIN_ELEMENT_SIZE);
855
855
  const availableWidth = Math.max(
856
- effectiveEditorDimensions.width - chunk4CLG3TRU_js.ZOOM_TO_SELECTION_PADDING,
857
- chunk4CLG3TRU_js.MIN_ELEMENT_SIZE
856
+ effectiveEditorDimensions.width - chunkNMSZ3NSG_js.ZOOM_TO_SELECTION_PADDING,
857
+ chunkNMSZ3NSG_js.MIN_ELEMENT_SIZE
858
858
  );
859
859
  const availableHeight = Math.max(
860
- effectiveEditorDimensions.height - chunk4CLG3TRU_js.ZOOM_TO_SELECTION_PADDING,
861
- chunk4CLG3TRU_js.MIN_ELEMENT_SIZE
860
+ effectiveEditorDimensions.height - chunkNMSZ3NSG_js.ZOOM_TO_SELECTION_PADDING,
861
+ chunkNMSZ3NSG_js.MIN_ELEMENT_SIZE
862
862
  );
863
863
  const targetEditorScale = Math.min(
864
864
  availableWidth / boundsWidth,
865
865
  availableHeight / boundsHeight
866
866
  );
867
867
  const safeFitScale = fitScale > Number.EPSILON ? fitScale : Number.EPSILON;
868
- const nextScale = chunk3TPQY6WR_js.clampZoomScale(targetEditorScale / safeFitScale);
868
+ const nextScale = chunkPABSSYRA_js.clampZoomScale(targetEditorScale / safeFitScale);
869
869
  setScale(nextScale);
870
870
  window.requestAnimationFrame(() => {
871
871
  window.requestAnimationFrame(() => {
@@ -882,14 +882,14 @@ function useZoomViewport({
882
882
  ]);
883
883
  const handleWheel = react.useCallback(
884
884
  (event) => {
885
- const mapped = chunk3TPQY6WR_js.mapEditingWheel(event, wheelBufferRef.current, true);
885
+ const mapped = chunkPABSSYRA_js.mapEditingWheel(event, wheelBufferRef.current, true);
886
886
  if (mapped.intent !== "zoom") {
887
887
  return;
888
888
  }
889
889
  event.preventDefault();
890
890
  store.dispatch({
891
891
  type: "set-zoom",
892
- zoom: chunk3TPQY6WR_js.clampZoomScale(store.getState().zoom + mapped.deltaScale)
892
+ zoom: chunkPABSSYRA_js.clampZoomScale(store.getState().zoom + mapped.deltaScale)
893
893
  });
894
894
  },
895
895
  [store]
@@ -984,8 +984,8 @@ function scheduleOpeningAutoPlayGroup(controller, ctx) {
984
984
  if (!group) {
985
985
  return;
986
986
  }
987
- chunk3TPQY6WR_js.playGroup(controller, group, ctx);
988
- chunk3TPQY6WR_js.scheduleAutoAdvanceChain(controller, ctx);
987
+ chunkPABSSYRA_js.playGroup(controller, group, ctx);
988
+ chunkPABSSYRA_js.scheduleAutoAdvanceChain(controller, ctx);
989
989
  }, firstGroup.autoAdvanceDelayMs ?? 0);
990
990
  ctx.timers.push(timer);
991
991
  }
@@ -1004,7 +1004,7 @@ function scheduleEntranceAnimationTimers(slide, setPresentationAnimations, prese
1004
1004
  }))
1005
1005
  );
1006
1006
  entranceAnimations.forEach((animation, animationIndex) => {
1007
- const delay = chunk3TPQY6WR_js.computeEntranceAnimationDelay(animation.delayMs, animationIndex);
1007
+ const delay = chunkPABSSYRA_js.computeEntranceAnimationDelay(animation.delayMs, animationIndex);
1008
1008
  const timer = window.setTimeout(() => {
1009
1009
  setPresentationAnimations(
1010
1010
  (previousAnimations) => previousAnimations.map(
@@ -1037,7 +1037,7 @@ function useAnimationPlayback(input) {
1037
1037
  const presentationTimersRef = react.useRef([]);
1038
1038
  const controllerRef = react.useRef(null);
1039
1039
  const buildRafRef = react.useRef(null);
1040
- const activeAnimationGroupRef = react.useRef(chunk3TPQY6WR_js.createActiveAnimationGroup());
1040
+ const activeAnimationGroupRef = react.useRef(chunkPABSSYRA_js.createActiveAnimationGroup());
1041
1041
  const seededCompletedRef = react.useRef(false);
1042
1042
  const mediaTimeNodeElementIdsRef = react.useRef(/* @__PURE__ */ new Map());
1043
1043
  const lastSeedCompletedRef = react.useRef(false);
@@ -1054,15 +1054,15 @@ function useAnimationPlayback(input) {
1054
1054
  }, [onPlayActionSound]);
1055
1055
  react.useEffect(() => {
1056
1056
  return () => {
1057
- chunk3TPQY6WR_js.cancelBuildReveal(buildRafRef);
1057
+ chunkPABSSYRA_js.cancelBuildReveal(buildRafRef);
1058
1058
  };
1059
1059
  }, []);
1060
1060
  const clearPresentationTimers = react.useCallback(() => {
1061
- chunk3TPQY6WR_js.clearPlaybackTimers(buildPlaybackContext(), activeAnimationGroupRef.current);
1061
+ chunkPABSSYRA_js.clearPlaybackTimers(buildPlaybackContext(), activeAnimationGroupRef.current);
1062
1062
  }, [buildPlaybackContext]);
1063
1063
  const resetSlideTimeline = react.useCallback(
1064
1064
  (slideIndex) => {
1065
- chunk3TPQY6WR_js.cancelBuildReveal(buildRafRef);
1065
+ chunkPABSSYRA_js.cancelBuildReveal(buildRafRef);
1066
1066
  const slide = slides[slideIndex];
1067
1067
  if (!slide) {
1068
1068
  controllerRef.current = null;
@@ -1073,14 +1073,14 @@ function useAnimationPlayback(input) {
1073
1073
  setHoverTriggerShapeIds(/* @__PURE__ */ new Set());
1074
1074
  return;
1075
1075
  }
1076
- const controller = chunk3TPQY6WR_js.PresentationAnimationController.fromSlide(slide, {
1076
+ const controller = chunkPABSSYRA_js.PresentationAnimationController.fromSlide(slide, {
1077
1077
  slideHeightPx: canvasSize?.height,
1078
1078
  slideWidthPx: canvasSize?.width,
1079
1079
  themeColorMap,
1080
1080
  pixelateMosaic: pixelateMosaicAnimation
1081
1081
  });
1082
1082
  controllerRef.current = controller;
1083
- mediaTimeNodeElementIdsRef.current = chunk3TPQY6WR_js.resolveMediaTimeNodeElementIds(
1083
+ mediaTimeNodeElementIdsRef.current = chunkPABSSYRA_js.resolveMediaTimeNodeElementIds(
1084
1084
  slide.nativeAnimations ?? []
1085
1085
  );
1086
1086
  setPresentationKeyframesCss(controller.keyframesCss);
@@ -1094,7 +1094,7 @@ function useAnimationPlayback(input) {
1094
1094
  if (!animationsEnabled) {
1095
1095
  return false;
1096
1096
  }
1097
- return chunk3TPQY6WR_js.advanceMainSequence(
1097
+ return chunkPABSSYRA_js.advanceMainSequence(
1098
1098
  controllerRef.current,
1099
1099
  buildPlaybackContext(),
1100
1100
  activeAnimationGroupRef.current
@@ -1110,7 +1110,7 @@ function useAnimationPlayback(input) {
1110
1110
  if (!group) {
1111
1111
  return false;
1112
1112
  }
1113
- chunk3TPQY6WR_js.playGroup(controller, group, buildPlaybackContext());
1113
+ chunkPABSSYRA_js.playGroup(controller, group, buildPlaybackContext());
1114
1114
  return true;
1115
1115
  },
1116
1116
  [buildPlaybackContext]
@@ -1129,7 +1129,7 @@ function useAnimationPlayback(input) {
1129
1129
  if (!group) {
1130
1130
  return false;
1131
1131
  }
1132
- chunk3TPQY6WR_js.playGroup(controller, group, buildPlaybackContext());
1132
+ chunkPABSSYRA_js.playGroup(controller, group, buildPlaybackContext());
1133
1133
  return true;
1134
1134
  },
1135
1135
  [animationsEnabled, buildPlaybackContext]
@@ -1210,12 +1210,12 @@ function useAnimationPlayback(input) {
1210
1210
  presentationTimersRef
1211
1211
  };
1212
1212
  }
1213
- var PRESENTER_CHANNEL_NAME = chunk3TPQY6WR_js.PRESENTATION_CHANNEL_NAME;
1214
- var AUDIENCE_HASH = chunk3TPQY6WR_js.PRESENTATION_HASH;
1215
- var PRESENTER_MSG_ORIGIN = chunk3TPQY6WR_js.PRESENTATION_MESSAGE_ORIGIN;
1216
- var AUDIENCE_NONCE_KEY = chunk3TPQY6WR_js.PRESENTATION_NONCE_KEY;
1213
+ var PRESENTER_CHANNEL_NAME = chunkPABSSYRA_js.PRESENTATION_CHANNEL_NAME;
1214
+ var AUDIENCE_HASH = chunkPABSSYRA_js.PRESENTATION_HASH;
1215
+ var PRESENTER_MSG_ORIGIN = chunkPABSSYRA_js.PRESENTATION_MESSAGE_ORIGIN;
1216
+ var AUDIENCE_NONCE_KEY = chunkPABSSYRA_js.PRESENTATION_NONCE_KEY;
1217
1217
  function generateSessionId() {
1218
- return chunk3TPQY6WR_js.createPresentationSessionId();
1218
+ return chunkPABSSYRA_js.createPresentationSessionId();
1219
1219
  }
1220
1220
  function parseAudienceNonce() {
1221
1221
  const hash = window.location.hash;
@@ -1251,7 +1251,7 @@ function usePresenterWindow(input) {
1251
1251
  }, []);
1252
1252
  const swapDisplays = react.useCallback(async () => {
1253
1253
  const audience = audienceWindowRef.current;
1254
- return audience && !audience.closed ? chunk3TPQY6WR_js.swapPresentationWindows(window, audience) : false;
1254
+ return audience && !audience.closed ? chunkPABSSYRA_js.swapPresentationWindows(window, audience) : false;
1255
1255
  }, []);
1256
1256
  const syncSlideToAudience = react.useCallback(
1257
1257
  (slideIndex) => {
@@ -1315,7 +1315,7 @@ function usePresenterWindow(input) {
1315
1315
  pollTimerRef.current = null;
1316
1316
  }
1317
1317
  if (closingSessionId) {
1318
- void chunk3TPQY6WR_js.clearAudienceContent(closingSessionId);
1318
+ void chunkPABSSYRA_js.clearAudienceContent(closingSessionId);
1319
1319
  }
1320
1320
  }, [getChannel]);
1321
1321
  const openAudienceWindow = react.useCallback(() => {
@@ -1333,10 +1333,10 @@ function usePresenterWindow(input) {
1333
1333
  audienceWindowRef.current = blankWin;
1334
1334
  const sessionId = generateSessionId();
1335
1335
  sessionIdRef.current = sessionId;
1336
- const audienceUrl = chunk3TPQY6WR_js.buildPresentationAudienceUrl(window.location.href, sessionId);
1337
- void chunk3TPQY6WR_js.resolveAudienceScreenPlacement(window).then((placement) => {
1336
+ const audienceUrl = chunkPABSSYRA_js.buildPresentationAudienceUrl(window.location.href, sessionId);
1337
+ void chunkPABSSYRA_js.resolveAudienceScreenPlacement(window).then((placement) => {
1338
1338
  if (placement && audienceWindowRef.current === blankWin && !blankWin.closed) {
1339
- chunk3TPQY6WR_js.placeAudienceWindow(blankWin, placement);
1339
+ chunkPABSSYRA_js.placeAudienceWindow(blankWin, placement);
1340
1340
  }
1341
1341
  return void 0;
1342
1342
  });
@@ -1366,7 +1366,7 @@ function usePresenterWindow(input) {
1366
1366
  }
1367
1367
  };
1368
1368
  if (content) {
1369
- void chunk3TPQY6WR_js.storeAudienceContent(content, sessionId).then(() => navigateOrClose(true)).catch(() => navigateOrClose(false));
1369
+ void chunkPABSSYRA_js.storeAudienceContent(content, sessionId).then(() => navigateOrClose(true)).catch(() => navigateOrClose(false));
1370
1370
  } else {
1371
1371
  navigateOrClose(true);
1372
1372
  }
@@ -1392,7 +1392,7 @@ function usePresenterWindow(input) {
1392
1392
  }
1393
1393
  const handleMessage = (event) => {
1394
1394
  const message = event.data;
1395
- if (chunk3TPQY6WR_js.isPresentationSessionMessage(message) && message.type === "audience-ready" && message.sessionId === sessionIdRef.current) {
1395
+ if (chunkPABSSYRA_js.isPresentationSessionMessage(message) && message.type === "audience-ready" && message.sessionId === sessionIdRef.current) {
1396
1396
  syncStateToAudience(snapshotRef.current);
1397
1397
  }
1398
1398
  };
@@ -1421,7 +1421,7 @@ function usePresenterWindow(input) {
1421
1421
  react.useEffect(() => {
1422
1422
  const handleBeforeUnload = () => {
1423
1423
  if (sessionIdRef.current) {
1424
- void chunk3TPQY6WR_js.clearAudienceContent(sessionIdRef.current);
1424
+ void chunkPABSSYRA_js.clearAudienceContent(sessionIdRef.current);
1425
1425
  }
1426
1426
  };
1427
1427
  window.addEventListener("beforeunload", handleBeforeUnload);
@@ -1483,7 +1483,7 @@ function useAudienceMode(input) {
1483
1483
  }
1484
1484
  channel.onmessage = (event) => {
1485
1485
  const data = event.data;
1486
- if (!chunk3TPQY6WR_js.isPresentationSessionMessage(data) || data.origin !== PRESENTER_MSG_ORIGIN) {
1486
+ if (!chunkPABSSYRA_js.isPresentationSessionMessage(data) || data.origin !== PRESENTER_MSG_ORIGIN) {
1487
1487
  return;
1488
1488
  }
1489
1489
  if (expectedSessionId && data.sessionId !== expectedSessionId) {
@@ -1499,16 +1499,16 @@ function useAudienceMode(input) {
1499
1499
  }
1500
1500
  if (data.type === "presenter-exit") {
1501
1501
  if (expectedSessionId) {
1502
- void chunk3TPQY6WR_js.clearAudienceContent(expectedSessionId);
1502
+ void chunkPABSSYRA_js.clearAudienceContent(expectedSessionId);
1503
1503
  }
1504
- if (chunk3TPQY6WR_js.endAudienceDisplay(window)) {
1504
+ if (chunkPABSSYRA_js.endAudienceDisplay(window)) {
1505
1505
  handlers.onPresenterEnded?.();
1506
1506
  }
1507
1507
  }
1508
1508
  };
1509
1509
  if (expectedSessionId) {
1510
1510
  channel.postMessage({
1511
- origin: chunk3TPQY6WR_js.PRESENTATION_MESSAGE_ORIGIN,
1511
+ origin: chunkPABSSYRA_js.PRESENTATION_MESSAGE_ORIGIN,
1512
1512
  type: "audience-ready",
1513
1513
  sessionId: expectedSessionId
1514
1514
  });
@@ -1522,7 +1522,7 @@ function useAudienceMode(input) {
1522
1522
  }, []);
1523
1523
  }
1524
1524
  function usePresentationKeyboard(input) {
1525
- const wheelBufferRef = react.useRef(chunk3TPQY6WR_js.createWheelStepBuffer());
1525
+ const wheelBufferRef = react.useRef(chunkPABSSYRA_js.createWheelStepBuffer());
1526
1526
  const {
1527
1527
  mode,
1528
1528
  movePresentationSlide,
@@ -1543,14 +1543,14 @@ function usePresentationKeyboard(input) {
1543
1543
  presentationSlideIndex,
1544
1544
  setShowRehearsalSummary
1545
1545
  } = input;
1546
- const keyBufferRef = react.useRef(chunk3TPQY6WR_js.createPresentationKeyBuffer());
1546
+ const keyBufferRef = react.useRef(chunkPABSSYRA_js.createPresentationKeyBuffer());
1547
1547
  react.useEffect(() => {
1548
- if (mode !== "present" || !chunk3TPQY6WR_js.acceptsPresentationInput()) {
1549
- keyBufferRef.current = chunk3TPQY6WR_js.createPresentationKeyBuffer();
1548
+ if (mode !== "present" || !chunkPABSSYRA_js.acceptsPresentationInput()) {
1549
+ keyBufferRef.current = chunkPABSSYRA_js.createPresentationKeyBuffer();
1550
1550
  return;
1551
1551
  }
1552
1552
  const handleKeyDown = (event) => {
1553
- const mapped = chunk3TPQY6WR_js.mapPresentationKey(event, keyBufferRef.current);
1553
+ const mapped = chunkPABSSYRA_js.mapPresentationKey(event, keyBufferRef.current);
1554
1554
  if (mapped.action === "none") {
1555
1555
  return;
1556
1556
  }
@@ -1570,12 +1570,12 @@ function usePresentationKeyboard(input) {
1570
1570
  movePresentationSlide(-1);
1571
1571
  return;
1572
1572
  case "first": {
1573
- const first = chunk3TPQY6WR_js.firstShowSlideIndex(showSlideIndexes);
1573
+ const first = chunkPABSSYRA_js.firstShowSlideIndex(showSlideIndexes);
1574
1574
  navigateToSlide(first ?? 0);
1575
1575
  return;
1576
1576
  }
1577
1577
  case "last": {
1578
- const last = chunk3TPQY6WR_js.lastShowSlideIndex(showSlideIndexes);
1578
+ const last = chunkPABSSYRA_js.lastShowSlideIndex(showSlideIndexes);
1579
1579
  navigateToSlide(last ?? Math.max(0, slideCount - 1));
1580
1580
  return;
1581
1581
  }
@@ -1613,10 +1613,10 @@ function usePresentationKeyboard(input) {
1613
1613
  }
1614
1614
  };
1615
1615
  const handleWheel = (event) => {
1616
- if (mode !== "present" || !chunk3TPQY6WR_js.acceptsPresentationInput()) {
1616
+ if (mode !== "present" || !chunkPABSSYRA_js.acceptsPresentationInput()) {
1617
1617
  return;
1618
1618
  }
1619
- const mapped = chunk3TPQY6WR_js.mapPresentationWheel(event, wheelBufferRef.current);
1619
+ const mapped = chunkPABSSYRA_js.mapPresentationWheel(event, wheelBufferRef.current);
1620
1620
  if (mapped.intent === "next-slide") {
1621
1621
  event.preventDefault();
1622
1622
  movePresentationSlide(1);
@@ -1749,7 +1749,7 @@ function useRehearsalTimings(input) {
1749
1749
 
1750
1750
  // src/viewer/hooks/presentation-mode/presentation-actions.ts
1751
1751
  function handlePresentationActionImpl(action, deps) {
1752
- chunk3TPQY6WR_js.runPresentationAction(
1752
+ chunkPABSSYRA_js.runPresentationAction(
1753
1753
  action,
1754
1754
  { slideCount: deps.slidesLength, ...deps.elementId ? { elementId: deps.elementId } : {} },
1755
1755
  {
@@ -1778,13 +1778,13 @@ function handlePresentationActionImpl(action, deps) {
1778
1778
  function executeSlideTransition(nextSlideIndex, deps) {
1779
1779
  const incomingSlide = deps.slides[nextSlideIndex];
1780
1780
  const transition = deps.reverse ? deps.slides[deps.currentSlideIndex]?.transition : incomingSlide?.transition;
1781
- const durationMs = deps.playTransition ? chunk3TPQY6WR_js.resolveTransitionDurationMs(transition) : 0;
1781
+ const durationMs = deps.playTransition ? chunkPABSSYRA_js.resolveTransitionDurationMs(transition) : 0;
1782
1782
  deps.clearPresentationTimers();
1783
1783
  deps.setPresentationSlideIndex(nextSlideIndex);
1784
1784
  deps.onSetActiveSlideIndex(nextSlideIndex);
1785
1785
  deps.setPresentationSlideVisible(true);
1786
1786
  deps.seedSlideAnimations(nextSlideIndex, { completed: deps.seedCompleted });
1787
- const soundAction = chunk3TPQY6WR_js.resolveTransitionSoundAction(transition);
1787
+ const soundAction = chunkPABSSYRA_js.resolveTransitionSoundAction(transition);
1788
1788
  if (soundAction.kind === "play" && deps.onPlayActionSound) {
1789
1789
  deps.onPlayActionSound(soundAction.soundPath, { loop: soundAction.loop });
1790
1790
  } else if (soundAction.kind === "stop" && deps.onStopActionSound) {
@@ -1848,7 +1848,7 @@ function useSlideNavigation(input) {
1848
1848
  });
1849
1849
  const scheduleAutoAdvanceForSlide = react.useCallback(
1850
1850
  (slideIndex) => {
1851
- const delayMs = chunk3TPQY6WR_js.resolveAutoAdvanceDelayMs(slides[slideIndex], { useTimings });
1851
+ const delayMs = chunkPABSSYRA_js.resolveAutoAdvanceDelayMs(slides[slideIndex], { useTimings });
1852
1852
  if (delayMs === void 0) {
1853
1853
  return;
1854
1854
  }
@@ -1871,7 +1871,7 @@ function useSlideNavigation(input) {
1871
1871
  if (availableSlideIndexes.length === 0) {
1872
1872
  return;
1873
1873
  }
1874
- const pastLastSlide = direction === 1 && !chunk3TPQY6WR_js.hasShowSlideAfter(presentationSlideIndex, availableSlideIndexes);
1874
+ const pastLastSlide = direction === 1 && !chunkPABSSYRA_js.hasShowSlideAfter(presentationSlideIndex, availableSlideIndexes);
1875
1875
  if (rehearsing && pastLastSlide) {
1876
1876
  recordCurrentSlideTime(presentationSlideIndex);
1877
1877
  try {
@@ -1889,9 +1889,9 @@ function useSlideNavigation(input) {
1889
1889
  onAdvancePastLastSlide();
1890
1890
  return;
1891
1891
  }
1892
- const nextSlideIndex = direction === 1 ? chunk3TPQY6WR_js.nextShowSlideIndex(presentationSlideIndex, availableSlideIndexes, {
1892
+ const nextSlideIndex = direction === 1 ? chunkPABSSYRA_js.nextShowSlideIndex(presentationSlideIndex, availableSlideIndexes, {
1893
1893
  loop: Boolean(loopContinuously) && !rehearsing
1894
- }) : chunk3TPQY6WR_js.previousShowSlideIndex(presentationSlideIndex, availableSlideIndexes);
1894
+ }) : chunkPABSSYRA_js.previousShowSlideIndex(presentationSlideIndex, availableSlideIndexes);
1895
1895
  if (nextSlideIndex === void 0 || nextSlideIndex === presentationSlideIndex) {
1896
1896
  return;
1897
1897
  }
@@ -2072,7 +2072,7 @@ function createCustomShowRunner(deps) {
2072
2072
  return;
2073
2073
  }
2074
2074
  origin = returnAfter ? { showId: deps.getActiveCustomShowId(), slideIndex: deps.getPresentationSlideIndex() } : null;
2075
- const first = chunk3TPQY6WR_js.firstShowSlideIndex(chunk3TPQY6WR_js.resolveShowSlideIndexes(deps.getSlides(), target));
2075
+ const first = chunkPABSSYRA_js.firstShowSlideIndex(chunkPABSSYRA_js.resolveShowSlideIndexes(deps.getSlides(), target));
2076
2076
  deps.setActiveCustomShowId(customShowId);
2077
2077
  if (first !== void 0) {
2078
2078
  deps.navigateToSlide(first);
@@ -2150,33 +2150,33 @@ function usePresentationActionExtensions(input) {
2150
2150
  }
2151
2151
  }, [navigateToSlideViaRef]);
2152
2152
  const onOpenFile = react.useCallback((target) => {
2153
- chunk3TPQY6WR_js.safeOpenUrl(target);
2153
+ chunkPABSSYRA_js.safeOpenUrl(target);
2154
2154
  }, []);
2155
2155
  const onOpenPresentation = react.useCallback((target) => {
2156
- chunk3TPQY6WR_js.safeOpenUrl(target);
2156
+ chunkPABSSYRA_js.safeOpenUrl(target);
2157
2157
  }, []);
2158
2158
  const onRunProgram = react.useCallback(
2159
2159
  (target) => {
2160
- onAddRunProgramNotice?.(chunk3TPQY6WR_js.buildRunProgramNotice(target));
2160
+ onAddRunProgramNotice?.(chunkPABSSYRA_js.buildRunProgramNotice(target));
2161
2161
  },
2162
2162
  [onAddRunProgramNotice]
2163
2163
  );
2164
2164
  const onPlayMedia = react.useCallback(
2165
2165
  (elementId) => {
2166
- chunk3TPQY6WR_js.toggleStageElementMedia(containerRef.current, elementId);
2166
+ chunkPABSSYRA_js.toggleStageElementMedia(containerRef.current, elementId);
2167
2167
  },
2168
2168
  [containerRef]
2169
2169
  );
2170
2170
  const onOleVerb = react.useCallback(
2171
2171
  (verb, elementId) => {
2172
- const target = chunk3TPQY6WR_js.resolveOleVerbTarget(slides[presentationSlideIndex], elementId, verb);
2172
+ const target = chunkPABSSYRA_js.resolveOleVerbTarget(slides[presentationSlideIndex], elementId, verb);
2173
2173
  if (!target) {
2174
2174
  return;
2175
2175
  }
2176
2176
  if (target.action === "download") {
2177
- chunk3TPQY6WR_js.downloadDataUrl(target.url, target.fileName ?? "download");
2177
+ chunkPABSSYRA_js.downloadDataUrl(target.url, target.fileName ?? "download");
2178
2178
  } else {
2179
- chunk3TPQY6WR_js.openUrlInNewTab(target.url);
2179
+ chunkPABSSYRA_js.openUrlInNewTab(target.url);
2180
2180
  }
2181
2181
  },
2182
2182
  [slides, presentationSlideIndex]
@@ -2207,22 +2207,22 @@ function usePresentationActionExtensions(input) {
2207
2207
  };
2208
2208
  }
2209
2209
  function usePresenterConsole(slideIndex, active) {
2210
- const timerRef = react.useRef(chunk3TPQY6WR_js.createPresenterTimer());
2211
- const [snapshot, setSnapshot] = react.useState(() => chunk3TPQY6WR_js.createInitialPresentationSnapshot(slideIndex));
2210
+ const timerRef = react.useRef(chunkPABSSYRA_js.createPresenterTimer());
2211
+ const [snapshot, setSnapshot] = react.useState(() => chunkPABSSYRA_js.createInitialPresentationSnapshot(slideIndex));
2212
2212
  const patch = react.useCallback((value) => {
2213
- setSnapshot((current) => chunk3TPQY6WR_js.mergePresentationSnapshot(current, value));
2213
+ setSnapshot((current) => chunkPABSSYRA_js.mergePresentationSnapshot(current, value));
2214
2214
  }, []);
2215
2215
  react.useEffect(() => patch({ slideIndex }), [patch, slideIndex]);
2216
2216
  react.useEffect(() => {
2217
2217
  if (!active) {
2218
2218
  return;
2219
2219
  }
2220
- timerRef.current = chunk3TPQY6WR_js.resetPresenterTimer();
2220
+ timerRef.current = chunkPABSSYRA_js.resetPresenterTimer();
2221
2221
  patch({ paused: false, elapsedMs: 0 });
2222
2222
  const timer = window.setInterval(() => {
2223
2223
  patch({
2224
2224
  paused: timerRef.current.paused,
2225
- elapsedMs: chunk3TPQY6WR_js.presenterElapsed(timerRef.current)
2225
+ elapsedMs: chunkPABSSYRA_js.presenterElapsed(timerRef.current)
2226
2226
  });
2227
2227
  }, 1e3);
2228
2228
  return () => window.clearInterval(timer);
@@ -2232,19 +2232,19 @@ function usePresenterConsole(slideIndex, active) {
2232
2232
  applyAudienceSnapshot: setSnapshot,
2233
2233
  setBlackout: (blackout) => patch({ blackout }),
2234
2234
  toggleTimer: () => {
2235
- timerRef.current = chunk3TPQY6WR_js.togglePresenterTimer(timerRef.current);
2235
+ timerRef.current = chunkPABSSYRA_js.togglePresenterTimer(timerRef.current);
2236
2236
  patch({
2237
2237
  paused: timerRef.current.paused,
2238
- elapsedMs: chunk3TPQY6WR_js.presenterElapsed(timerRef.current)
2238
+ elapsedMs: chunkPABSSYRA_js.presenterElapsed(timerRef.current)
2239
2239
  });
2240
2240
  },
2241
2241
  resetTimer: () => {
2242
- timerRef.current = chunk3TPQY6WR_js.resetPresenterTimer();
2242
+ timerRef.current = chunkPABSSYRA_js.resetPresenterTimer();
2243
2243
  patch({ paused: false, elapsedMs: 0 });
2244
2244
  },
2245
2245
  stepZoom: (direction) => setSnapshot(
2246
- (current) => chunk3TPQY6WR_js.mergePresentationSnapshot(current, {
2247
- zoom: chunk3TPQY6WR_js.stepPresenterZoom(
2246
+ (current) => chunkPABSSYRA_js.mergePresentationSnapshot(current, {
2247
+ zoom: chunkPABSSYRA_js.stepPresenterZoom(
2248
2248
  current.zoom ?? { scale: 1, originX: 0.5, originY: 0.5 },
2249
2249
  direction
2250
2250
  )
@@ -2299,7 +2299,7 @@ function usePresentationMode(input) {
2299
2299
  const [allSlidesOpen, setAllSlidesOpen] = react.useState(false);
2300
2300
  const [endOfShowVisible, setEndOfShowVisible] = react.useState(false);
2301
2301
  const [presentationStartTime, setPresentationStartTime] = react.useState(null);
2302
- const showGuard = react.useMemo(() => chunk3TPQY6WR_js.createPresenterShowGuard(), []);
2302
+ const showGuard = react.useMemo(() => chunkPABSSYRA_js.createPresenterShowGuard(), []);
2303
2303
  const {
2304
2304
  presentationAnimations,
2305
2305
  presentationElementStates,
@@ -2399,7 +2399,7 @@ function usePresentationMode(input) {
2399
2399
  actionExtensions.bindNavigateToSlide(navigateToSlide);
2400
2400
  const movePresentationSlide = react.useCallback(
2401
2401
  (direction, trigger = "explicit") => {
2402
- if (!chunk3TPQY6WR_js.acceptsPresentationInput()) {
2402
+ if (!chunkPABSSYRA_js.acceptsPresentationInput()) {
2403
2403
  return;
2404
2404
  }
2405
2405
  if (endOfShowVisible) {
@@ -2468,7 +2468,7 @@ function usePresentationMode(input) {
2468
2468
  onSetMode("present");
2469
2469
  }, [containerRef, onSetMode, setRehearsing]);
2470
2470
  const enterPresentModeFromBeginning = react.useCallback(() => {
2471
- const first = chunk3TPQY6WR_js.firstShowSlideIndex(visibleSlideIndexes);
2471
+ const first = chunkPABSSYRA_js.firstShowSlideIndex(visibleSlideIndexes);
2472
2472
  if (first !== void 0) {
2473
2473
  onSetActiveSlideIndex(first);
2474
2474
  }
@@ -2548,7 +2548,7 @@ function usePresentationMode(input) {
2548
2548
  if (mode !== "present") {
2549
2549
  return;
2550
2550
  }
2551
- return chunk3TPQY6WR_js.attachPresentationVisibilityPause({
2551
+ return chunkPABSSYRA_js.attachPresentationVisibilityPause({
2552
2552
  root: containerRef.current ?? void 0,
2553
2553
  onHidden: () => clearPresentationTimersRef.current(),
2554
2554
  onVisible: () => scheduleAutoAdvanceRef.current(presentationSlideIndexRef.current)
@@ -2556,7 +2556,7 @@ function usePresentationMode(input) {
2556
2556
  }, [mode, containerRef]);
2557
2557
  react.useLayoutEffect(() => {
2558
2558
  if (mode === "present") {
2559
- const idx = chunk3TPQY6WR_js.presentationEntrySlideIndex(
2559
+ const idx = chunkPABSSYRA_js.presentationEntrySlideIndex(
2560
2560
  activeSlideIndexRef.current,
2561
2561
  visibleSlideIndexesRef.current
2562
2562
  );
@@ -2635,11 +2635,11 @@ function usePresentationMode(input) {
2635
2635
  return void 0;
2636
2636
  }
2637
2637
  const incoming = slides[transitionOverlay.incomingSlideIndex];
2638
- return chunk3TPQY6WR_js.buildMorphTransitionPlan(
2638
+ return chunkPABSSYRA_js.buildMorphTransitionPlan(
2639
2639
  slides[transitionOverlay.outgoingSlideIndex],
2640
2640
  incoming,
2641
2641
  transitionOverlay.durationMs,
2642
- chunk3TPQY6WR_js.morphOptionToMode(transitionOverlay.transition.morphOption),
2642
+ chunkPABSSYRA_js.morphOptionToMode(transitionOverlay.transition.morphOption),
2643
2643
  // `PresentationStage` stacks the incoming slide's elements above its
2644
2644
  // template shapes (`zIndex = templateElements.length + index`), so a
2645
2645
  // z-index journey has to start counting where the stage does.
@@ -2664,7 +2664,7 @@ function usePresentationMode(input) {
2664
2664
  if (!morphPlan) {
2665
2665
  return presentationKeyframesCss;
2666
2666
  }
2667
- const imageRules = chunk3TPQY6WR_js.buildMorphAnimationRules(morphPlan, "", "incoming", "image");
2667
+ const imageRules = chunkPABSSYRA_js.buildMorphAnimationRules(morphPlan, "", "incoming", "image");
2668
2668
  return `${presentationKeyframesCss ?? ""}
2669
2669
  ${morphPlan.keyframesCss}
2670
2670
  ${imageRules}`;
@@ -2961,7 +2961,7 @@ function useFindReplace({
2961
2961
  const [findResults, setFindResults] = react.useState([]);
2962
2962
  const [findResultIndex, setFindResultIndex] = react.useState(-1);
2963
2963
  const performFind = react.useCallback(() => {
2964
- const results = chunk3TPQY6WR_js.findInSlides(slides, findQuery, { matchCase: findMatchCase });
2964
+ const results = chunkPABSSYRA_js.findInSlides(slides, findQuery, { matchCase: findMatchCase });
2965
2965
  if (!findQuery) {
2966
2966
  setFindResults([]);
2967
2967
  setFindResultIndex(-1);
@@ -2995,7 +2995,7 @@ function useFindReplace({
2995
2995
  return;
2996
2996
  }
2997
2997
  onUpdateSlides(
2998
- (prevSlides) => chunk3TPQY6WR_js.applyFindReplacements(prevSlides, toReplace, replaceQuery).slides
2998
+ (prevSlides) => chunkPABSSYRA_js.applyFindReplacements(prevSlides, toReplace, replaceQuery).slides
2999
2999
  );
3000
3000
  onMarkDirty();
3001
3001
  },
@@ -3017,9 +3017,9 @@ function useFindReplace({
3017
3017
  }, [findResults, applyReplacements, performFind]);
3018
3018
  react.useEffect(() => {
3019
3019
  const handler = (event) => {
3020
- const { action } = chunk3TPQY6WR_js.mapEditorKey(event, {
3020
+ const { action } = chunkPABSSYRA_js.mapEditorKey(event, {
3021
3021
  canEdit: mode === "edit",
3022
- isTextInputTarget: chunk3TPQY6WR_js.isEditorTextInputTarget(event.target)
3022
+ isTextInputTarget: chunkPABSSYRA_js.isEditorTextInputTarget(event.target)
3023
3023
  });
3024
3024
  if (action !== "find") {
3025
3025
  return;
@@ -3130,7 +3130,7 @@ function addCommentToSlide(slides, slideIndex, text, authorName, elementId, ment
3130
3130
  if (!slide) {
3131
3131
  return { slides, didAdd: false };
3132
3132
  }
3133
- const next = chunk3TPQY6WR_js.addCommentToList(
3133
+ const next = chunkPABSSYRA_js.addCommentToList(
3134
3134
  slide.comments || [],
3135
3135
  text,
3136
3136
  authorName,
@@ -3151,7 +3151,7 @@ function removeCommentFromSlide(slides, slideIndex, commentId) {
3151
3151
  if (!slide) {
3152
3152
  return { slides, didDelete: false };
3153
3153
  }
3154
- const next = chunk3TPQY6WR_js.removeCommentFromList(slide.comments || [], commentId);
3154
+ const next = chunkPABSSYRA_js.removeCommentFromList(slide.comments || [], commentId);
3155
3155
  if (!next) {
3156
3156
  return { slides, didDelete: false };
3157
3157
  }
@@ -3162,7 +3162,7 @@ function editCommentInSlide(slides, slideIndex, commentId, newText) {
3162
3162
  if (!slide) {
3163
3163
  return { slides, didUpdate: false };
3164
3164
  }
3165
- const next = chunk3TPQY6WR_js.editCommentInList(slide.comments || [], commentId, newText);
3165
+ const next = chunkPABSSYRA_js.editCommentInList(slide.comments || [], commentId, newText);
3166
3166
  if (!next) {
3167
3167
  return { slides, didUpdate: false };
3168
3168
  }
@@ -3173,7 +3173,7 @@ function toggleResolvedInSlide(slides, slideIndex, commentId) {
3173
3173
  if (!slide) {
3174
3174
  return { slides, didUpdate: false };
3175
3175
  }
3176
- const next = chunk3TPQY6WR_js.toggleCommentResolvedInList(slide.comments || [], commentId);
3176
+ const next = chunkPABSSYRA_js.toggleCommentResolvedInList(slide.comments || [], commentId);
3177
3177
  if (!next) {
3178
3178
  return { slides, didUpdate: false };
3179
3179
  }
@@ -3184,7 +3184,7 @@ function addReplyToSlide(slides, slideIndex, parentId, text, authorName, mention
3184
3184
  if (!slide) {
3185
3185
  return { slides, didAdd: false };
3186
3186
  }
3187
- const next = chunk3TPQY6WR_js.replyToCommentInList(slide.comments || [], parentId, text, authorName);
3187
+ const next = chunkPABSSYRA_js.replyToCommentInList(slide.comments || [], parentId, text, authorName);
3188
3188
  if (!next) {
3189
3189
  return { slides, didAdd: false };
3190
3190
  }
@@ -3571,7 +3571,7 @@ function useDerivedElementState(input) {
3571
3571
  return [];
3572
3572
  }
3573
3573
  return [
3574
- ...chunk3TPQY6WR_js.visibleTemplateElements(activeSlide, templateElementsBySlideId[activeSlide.id] ?? [])
3574
+ ...chunkPABSSYRA_js.visibleTemplateElements(activeSlide, templateElementsBySlideId[activeSlide.id] ?? [])
3575
3575
  ];
3576
3576
  }, [activeSlide, templateElementsBySlideId]);
3577
3577
  const activeMaster = slideMasters[activeMasterIndex];
@@ -3638,7 +3638,7 @@ function useViewerCoreState(_input) {
3638
3638
  const marqueeStateRef = react.useRef(null);
3639
3639
  const isDrawingRef = react.useRef(false);
3640
3640
  const justInteractedRef = react.useRef(false);
3641
- const livePatcher = react.useMemo(() => chunk3TPQY6WR_js.createCollaborationLivePatcher(), []);
3641
+ const livePatcher = react.useMemo(() => chunkPABSSYRA_js.createCollaborationLivePatcher(), []);
3642
3642
  react.useEffect(() => () => livePatcher.dispose(), [livePatcher]);
3643
3643
  const slidesRef = react.useRef([]);
3644
3644
  const [mode, setMode] = react.useState("edit");
@@ -3647,8 +3647,8 @@ function useViewerCoreState(_input) {
3647
3647
  const [slides, setSlides] = react.useState([]);
3648
3648
  const [templateElementsBySlideId, setTemplateElementsBySlideId] = react.useState({});
3649
3649
  const [canvasSize, setCanvasSize] = react.useState({
3650
- width: chunk4CLG3TRU_js.DEFAULT_CANVAS_WIDTH,
3651
- height: chunk4CLG3TRU_js.DEFAULT_CANVAS_HEIGHT
3650
+ width: chunkNMSZ3NSG_js.DEFAULT_CANVAS_WIDTH,
3651
+ height: chunkNMSZ3NSG_js.DEFAULT_CANVAS_HEIGHT
3652
3652
  });
3653
3653
  const [slideSizeEmu, setSlideSizeEmu] = react.useState();
3654
3654
  const [activeSlideIndex, setActiveSlideIndex] = react.useState(0);
@@ -3669,7 +3669,7 @@ function useViewerCoreState(_input) {
3669
3669
  const resolved = typeof value === "function" ? value(inlineEditingTextRef.current) : value;
3670
3670
  inlineEditingTextRef.current = resolved;
3671
3671
  setInlineEditingTextBase(value);
3672
- chunk3TPQY6WR_js.publishLiveInlineText(
3672
+ chunkPABSSYRA_js.publishLiveInlineText(
3673
3673
  livePatcher,
3674
3674
  slidesRef.current[activeSlideIndexRef.current],
3675
3675
  inlineEditingElementIdRef.current,
@@ -3964,8 +3964,8 @@ function useViewerState(input) {
3964
3964
  }
3965
3965
 
3966
3966
  // src/viewer/utils/glyph-outline-cache.ts
3967
- var glyphOutlineFontCache = new chunk3TPQY6WR_js.GlyphOutlineFontCache();
3968
- var getGlyphOutline = chunk3TPQY6WR_js.createGlyphOutlineLookup(glyphOutlineFontCache);
3967
+ var glyphOutlineFontCache = new chunkPABSSYRA_js.GlyphOutlineFontCache();
3968
+ var getGlyphOutline = chunkPABSSYRA_js.createGlyphOutlineLookup(glyphOutlineFontCache);
3969
3969
 
3970
3970
  // src/viewer/hooks/useLoadContent.ts
3971
3971
  function useLoadContent({
@@ -4024,8 +4024,8 @@ function useLoadContent({
4024
4024
  }
4025
4025
  let cancelled = false;
4026
4026
  const token = ++renderTokenRef.current;
4027
- const handler = new chunk3TPQY6WR_js.PptxHandler();
4028
- const resources = chunk3TPQY6WR_js.createPresentationLoadResources(handler);
4027
+ const handler = new chunkPABSSYRA_js.PptxHandler();
4028
+ const resources = chunkPABSSYRA_js.createPresentationLoadResources(handler);
4029
4029
  const loadBlobUrls = resources.blobUrls;
4030
4030
  (async () => {
4031
4031
  try {
@@ -4046,12 +4046,12 @@ function useLoadContent({
4046
4046
  }
4047
4047
  const mediaElements = [];
4048
4048
  for (const slide of parsed.slides) {
4049
- chunk3TPQY6WR_js.collectMediaElements(slide.elements, mediaElements);
4049
+ chunkPABSSYRA_js.collectMediaElements(slide.elements, mediaElements);
4050
4050
  }
4051
4051
  const nextMediaUrls = /* @__PURE__ */ new Map();
4052
4052
  await Promise.all(
4053
4053
  mediaElements.map(async (mediaElement) => {
4054
- const resolved = await chunk3TPQY6WR_js.resolveMediaElementSource(mediaElement, handler);
4054
+ const resolved = await chunkPABSSYRA_js.resolveMediaElementSource(mediaElement, handler);
4055
4055
  if (resolved.missing || !resolved.mediaPath || !resolved.url) {
4056
4056
  mediaElement.mediaMissing = true;
4057
4057
  return;
@@ -4062,7 +4062,7 @@ function useLoadContent({
4062
4062
  }
4063
4063
  })
4064
4064
  );
4065
- const { paths: imagePaths, refs: imageRefs } = chunk3TPQY6WR_js.collectImagePaths(parsed.slides);
4065
+ const { paths: imagePaths, refs: imageRefs } = chunkPABSSYRA_js.collectImagePaths(parsed.slides);
4066
4066
  let nextSlides = parsed.slides;
4067
4067
  if (imagePaths.size > 0) {
4068
4068
  const resolvedMap = /* @__PURE__ */ new Map();
@@ -4078,15 +4078,15 @@ function useLoadContent({
4078
4078
  })
4079
4079
  );
4080
4080
  nextSlides = parsed.slides.map((s) => {
4081
- const newElements = chunk3TPQY6WR_js.applyImagePathPatches(s.elements, resolvedMap, imageRefs);
4081
+ const newElements = chunkPABSSYRA_js.applyImagePathPatches(s.elements, resolvedMap, imageRefs);
4082
4082
  return newElements === s.elements ? s : { ...s, elements: newElements };
4083
4083
  });
4084
4084
  }
4085
- nextSlides = await chunk3TPQY6WR_js.resolveTableCellImageUrls(
4085
+ nextSlides = await chunkPABSSYRA_js.resolveTableCellImageUrls(
4086
4086
  nextSlides,
4087
4087
  (path) => handler.getImageData(path)
4088
4088
  );
4089
- const nextTableStyleMap = await chunk3TPQY6WR_js.resolveTableStyleImageUrls(
4089
+ const nextTableStyleMap = await chunkPABSSYRA_js.resolveTableStyleImageUrls(
4090
4090
  parsed.tableStyleMap,
4091
4091
  (path) => handler.getImageData(path)
4092
4092
  );
@@ -4105,12 +4105,12 @@ function useLoadContent({
4105
4105
  }
4106
4106
  resources.commit();
4107
4107
  handlerRef.current = handler;
4108
- const partition = chunk3TPQY6WR_js.partitionTemplateElements(nextSlides);
4108
+ const partition = chunkPABSSYRA_js.partitionTemplateElements(nextSlides);
4109
4109
  setSlides(partition.slides);
4110
4110
  setTemplateElementsBySlideId(partition.templateElementsBySlideId);
4111
4111
  setCanvasSize({
4112
- width: parsed.width ?? chunk4CLG3TRU_js.DEFAULT_CANVAS_WIDTH,
4113
- height: parsed.height ?? chunk4CLG3TRU_js.DEFAULT_CANVAS_HEIGHT
4112
+ width: parsed.width ?? chunkNMSZ3NSG_js.DEFAULT_CANVAS_WIDTH,
4113
+ height: parsed.height ?? chunkNMSZ3NSG_js.DEFAULT_CANVAS_HEIGHT
4114
4114
  });
4115
4115
  setSlideSizeEmu(
4116
4116
  typeof parsed.widthEmu === "number" && typeof parsed.heightEmu === "number" && parsed.widthEmu > 0 && parsed.heightEmu > 0 ? {
@@ -4123,7 +4123,7 @@ function useLoadContent({
4123
4123
  setLayoutOptions(parsed.layoutOptions ?? []);
4124
4124
  setSlideMasters(parsed.slideMasters ?? []);
4125
4125
  setModernCommentAuthors(parsed.modernCommentAuthors ?? []);
4126
- setRecentColors(chunk3TPQY6WR_js.seedRecentColors({ mruColors: parsed.mruColors }));
4126
+ setRecentColors(chunkPABSSYRA_js.seedRecentColors({ mruColors: parsed.mruColors }));
4127
4127
  setTheme(parsed.theme);
4128
4128
  setTableStyleMap(nextTableStyleMap);
4129
4129
  setTableStylesDefaultId(parsed.tableStylesDefaultId);
@@ -4131,7 +4131,7 @@ function useLoadContent({
4131
4131
  setThemeOptions(parsed.themeOptions ?? []);
4132
4132
  setCustomShows(parsed.customShows ?? []);
4133
4133
  setActiveCustomShowId(
4134
- chunk3TPQY6WR_js.resolveAuthoredCustomShowId(parsed.presentationProperties, parsed.customShows) ?? null
4134
+ chunkPABSSYRA_js.resolveAuthoredCustomShowId(parsed.presentationProperties, parsed.customShows) ?? null
4135
4135
  );
4136
4136
  setSections(parsed.sections ?? []);
4137
4137
  setPresentationProperties(parsed.presentationProperties ?? {});
@@ -4155,11 +4155,11 @@ function useLoadContent({
4155
4155
  setHasMacros(parsed.hasMacros === true);
4156
4156
  setHasDigitalSignatures(parsed.hasDigitalSignatures === true);
4157
4157
  setDigitalSignatureCount(parsed.digitalSignatureCount ?? 0);
4158
- setGuides(chunk3TPQY6WR_js.buildInitialGuides(parsed.presentationGuides, parsed.slides[0]?.guides));
4159
- setReadOnlyRecommendation(chunk3TPQY6WR_js.readOnlyRecommendation(parsed));
4158
+ setGuides(chunkPABSSYRA_js.buildInitialGuides(parsed.presentationGuides, parsed.slides[0]?.guides));
4159
+ setReadOnlyRecommendation(chunkPABSSYRA_js.readOnlyRecommendation(parsed));
4160
4160
  setModifyVerifier(parsed.modifyVerifier ?? void 0);
4161
4161
  setCompatToasts(
4162
- chunk3TPQY6WR_js.compatibilityWarningToasts([
4162
+ chunkPABSSYRA_js.compatibilityWarningToasts([
4163
4163
  ...parsed.warnings ?? [],
4164
4164
  ...parsed.slides.flatMap((slide) => slide.warnings ?? [])
4165
4165
  ])
@@ -4171,7 +4171,7 @@ function useLoadContent({
4171
4171
  onContentApplied?.();
4172
4172
  } catch (err) {
4173
4173
  if (!cancelled && token === renderTokenRef.current) {
4174
- if (err instanceof chunk3TPQY6WR_js.EncryptedFileError) {
4174
+ if (err instanceof chunkPABSSYRA_js.EncryptedFileError) {
4175
4175
  setIsEncrypted(true);
4176
4176
  } else {
4177
4177
  console.error("[pptx] Failed to load presentation content:", err);
@@ -4200,7 +4200,7 @@ function useLoadContent({
4200
4200
  }
4201
4201
  function useAutosave(input) {
4202
4202
  const { isDirty, filePath, serializeSlides, enabled = true, getChangeSources } = input;
4203
- const intervalMs = chunk3TPQY6WR_js.resolveAutosaveIntervalMs({
4203
+ const intervalMs = chunkPABSSYRA_js.resolveAutosaveIntervalMs({
4204
4204
  hostIntervalMs: input.intervalMs,
4205
4205
  optionsIntervalSeconds: input.intervalSeconds
4206
4206
  });
@@ -4231,7 +4231,7 @@ function useAutosave(input) {
4231
4231
  return;
4232
4232
  }
4233
4233
  const sources = changeSourcesRef.current?.() ?? [];
4234
- if (!chunk3TPQY6WR_js.shouldWriteAutosaveSnapshot({
4234
+ if (!chunkPABSSYRA_js.shouldWriteAutosaveSnapshot({
4235
4235
  filePath: path,
4236
4236
  isDirty: isDirtyRef.current,
4237
4237
  saving: isSavingRef.current,
@@ -4249,8 +4249,8 @@ function useAutosave(input) {
4249
4249
  isSavingRef.current = false;
4250
4250
  return;
4251
4251
  }
4252
- await chunk3TPQY6WR_js.saveAutosaveSnapshot(path, data);
4253
- lastSnapshotRef.current = chunk3TPQY6WR_js.autosaveSnapshotMark(path, sources);
4252
+ await chunkPABSSYRA_js.saveAutosaveSnapshot(path, data);
4253
+ lastSnapshotRef.current = chunkPABSSYRA_js.autosaveSnapshotMark(path, sources);
4254
4254
  setAutosaveStatus({ state: "saved", timestamp: Date.now() });
4255
4255
  } catch (err) {
4256
4256
  setAutosaveStatus({
@@ -4304,13 +4304,13 @@ function useElementOperations(input) {
4304
4304
  inlineEditingText
4305
4305
  } = input;
4306
4306
  const liveTextSegments = react.useCallback(() => {
4307
- if (!selectedElement || !chunk3TPQY6WR_js.hasTextProperties(selectedElement)) {
4307
+ if (!selectedElement || !chunkPABSSYRA_js.hasTextProperties(selectedElement)) {
4308
4308
  return void 0;
4309
4309
  }
4310
4310
  if (selectedElement.id !== inlineEditingElementId) {
4311
4311
  return selectedElement.textSegments;
4312
4312
  }
4313
- return chunk3TPQY6WR_js.remapTextToSegments(
4313
+ return chunkPABSSYRA_js.remapTextToSegments(
4314
4314
  inlineEditingText,
4315
4315
  selectedElement.textSegments,
4316
4316
  selectedElement.textStyle
@@ -4351,11 +4351,11 @@ function useElementOperations(input) {
4351
4351
  (elementId, updates) => {
4352
4352
  if (masterView?.target) {
4353
4353
  applyMasterViewWrite(
4354
- chunk3TPQY6WR_js.updateMasterViewElement(masterView, masterView.target, elementId, updates)
4354
+ chunkPABSSYRA_js.updateMasterViewElement(masterView, masterView.target, elementId, updates)
4355
4355
  );
4356
4356
  return;
4357
4357
  }
4358
- if (chunk3TPQY6WR_js.isTemplateElementId(elementId)) {
4358
+ if (chunkPABSSYRA_js.isTemplateElementId(elementId)) {
4359
4359
  const slideId = activeSlide?.id;
4360
4360
  if (slideId) {
4361
4361
  setTemplateElementsBySlideId((prev) => ({
@@ -4366,7 +4366,7 @@ function useElementOperations(input) {
4366
4366
  }));
4367
4367
  }
4368
4368
  } else {
4369
- setSlides((prev) => chunk3TPQY6WR_js.updateElement(prev, activeSlideIndex, elementId, updates));
4369
+ setSlides((prev) => chunkPABSSYRA_js.updateElement(prev, activeSlideIndex, elementId, updates));
4370
4370
  }
4371
4371
  history.markDirty();
4372
4372
  },
@@ -4391,7 +4391,7 @@ function useElementOperations(input) {
4391
4391
  );
4392
4392
  const updateSelectedShapeStyle = react.useCallback(
4393
4393
  (updates) => {
4394
- if (!selectedElement || !chunk3TPQY6WR_js.hasShapeProperties(selectedElement)) {
4394
+ if (!selectedElement || !chunkPABSSYRA_js.hasShapeProperties(selectedElement)) {
4395
4395
  return;
4396
4396
  }
4397
4397
  updateSelectedElement({
@@ -4402,19 +4402,19 @@ function useElementOperations(input) {
4402
4402
  );
4403
4403
  const updateSelectedTextStyle = react.useCallback(
4404
4404
  (updates) => {
4405
- if (!selectedElement || !chunk3TPQY6WR_js.hasTextProperties(selectedElement)) {
4405
+ if (!selectedElement || !chunkPABSSYRA_js.hasTextProperties(selectedElement)) {
4406
4406
  return;
4407
4407
  }
4408
4408
  const isLiveEditing = selectedElement.id === inlineEditingElementId;
4409
4409
  const currentSegments = liveTextSegments();
4410
- const inlineSel = chunk3TPQY6WR_js.getInlineEditorSelection(currentSegments);
4410
+ const inlineSel = chunkPABSSYRA_js.getInlineEditorSelection(currentSegments);
4411
4411
  if (inlineSel && currentSegments) {
4412
- const { newSegments: newSegments2, newSelection } = chunk3TPQY6WR_js.applyStyleToSelectedSegments(
4412
+ const { newSegments: newSegments2, newSelection } = chunkPABSSYRA_js.applyStyleToSelectedSegments(
4413
4413
  currentSegments,
4414
4414
  inlineSel,
4415
4415
  updates
4416
4416
  );
4417
- chunk3TPQY6WR_js.setPendingSelectionRestore(newSelection);
4417
+ chunkPABSSYRA_js.setPendingSelectionRestore(newSelection);
4418
4418
  updateSelectedElement({
4419
4419
  textSegments: newSegments2,
4420
4420
  ...isLiveEditing ? { text: inlineEditingText } : {}
@@ -4442,14 +4442,14 @@ function useElementOperations(input) {
4442
4442
  );
4443
4443
  const updateSelectedTextCase = react.useCallback(
4444
4444
  (mode) => {
4445
- if (!selectedElement || !chunk3TPQY6WR_js.hasTextProperties(selectedElement)) {
4445
+ if (!selectedElement || !chunkPABSSYRA_js.hasTextProperties(selectedElement)) {
4446
4446
  return;
4447
4447
  }
4448
4448
  const isLiveEditing = selectedElement.id === inlineEditingElementId;
4449
4449
  const currentSegments = liveTextSegments();
4450
- const inlineSel = chunk3TPQY6WR_js.getInlineEditorSelection(currentSegments);
4450
+ const inlineSel = chunkPABSSYRA_js.getInlineEditorSelection(currentSegments);
4451
4451
  if (inlineSel && currentSegments) {
4452
- const newSegments = chunk3TPQY6WR_js.applyCaseTransformToSegments(currentSegments, inlineSel, mode);
4452
+ const newSegments = chunkPABSSYRA_js.applyCaseTransformToSegments(currentSegments, inlineSel, mode);
4453
4453
  updateSelectedElement({
4454
4454
  textSegments: newSegments,
4455
4455
  ...isLiveEditing ? { text: inlineEditingText } : {}
@@ -4458,7 +4458,7 @@ function useElementOperations(input) {
4458
4458
  }
4459
4459
  const updates = {};
4460
4460
  if (currentSegments && currentSegments.length > 0) {
4461
- updates.textSegments = chunk3TPQY6WR_js.applyCaseTransformToSegments(
4461
+ updates.textSegments = chunkPABSSYRA_js.applyCaseTransformToSegments(
4462
4462
  currentSegments,
4463
4463
  null,
4464
4464
  mode
@@ -4466,7 +4466,7 @@ function useElementOperations(input) {
4466
4466
  }
4467
4467
  const baseText = isLiveEditing ? inlineEditingText : selectedElement.text;
4468
4468
  if (typeof baseText === "string") {
4469
- updates.text = chunk3TPQY6WR_js.transformTextCase(baseText, mode);
4469
+ updates.text = chunkPABSSYRA_js.transformTextCase(baseText, mode);
4470
4470
  }
4471
4471
  updateSelectedElement(updates);
4472
4472
  },
@@ -4485,15 +4485,15 @@ function useElementOperations(input) {
4485
4485
  [setSlides]
4486
4486
  );
4487
4487
  const masterViewTarget = masterView?.target ?? null;
4488
- const activeElements = masterViewTarget ? chunk3TPQY6WR_js.masterViewElements(masterView, masterViewTarget) : editTemplateMode ? templateElements : activeSlide?.elements ?? [];
4488
+ const activeElements = masterViewTarget ? chunkPABSSYRA_js.masterViewElements(masterView, masterViewTarget) : editTemplateMode ? templateElements : activeSlide?.elements ?? [];
4489
4489
  const updateActiveElements = react.useCallback(
4490
4490
  (updater) => {
4491
4491
  if (masterView?.target) {
4492
4492
  applyMasterViewWrite(
4493
- chunk3TPQY6WR_js.replaceMasterViewElements(
4493
+ chunkPABSSYRA_js.replaceMasterViewElements(
4494
4494
  masterView,
4495
4495
  masterView.target,
4496
- updater(chunk3TPQY6WR_js.masterViewElements(masterView, masterView.target))
4496
+ updater(chunkPABSSYRA_js.masterViewElements(masterView, masterView.target))
4497
4497
  )
4498
4498
  );
4499
4499
  return;
@@ -4546,7 +4546,7 @@ function useSectionOperations(input) {
4546
4546
  const { sections, setSections, slides, setSlides, markDirty } = input;
4547
4547
  const addSection2 = react.useCallback(
4548
4548
  (name, afterSlideIndex) => {
4549
- const result = chunk3TPQY6WR_js.addSection(sections, slides, name, afterSlideIndex);
4549
+ const result = chunkPABSSYRA_js.addSection(sections, slides, name, afterSlideIndex);
4550
4550
  setSlides(result.slides);
4551
4551
  setSections(result.sections);
4552
4552
  markDirty();
@@ -4555,7 +4555,7 @@ function useSectionOperations(input) {
4555
4555
  );
4556
4556
  const renameSection2 = react.useCallback(
4557
4557
  (sectionId, newName) => {
4558
- const result = chunk3TPQY6WR_js.renameSection(sections, slides, sectionId, newName);
4558
+ const result = chunkPABSSYRA_js.renameSection(sections, slides, sectionId, newName);
4559
4559
  setSections(result.sections);
4560
4560
  setSlides(result.slides);
4561
4561
  markDirty();
@@ -4564,7 +4564,7 @@ function useSectionOperations(input) {
4564
4564
  );
4565
4565
  const deleteSection2 = react.useCallback(
4566
4566
  (sectionId) => {
4567
- const result = chunk3TPQY6WR_js.deleteSection(sections, slides, sectionId);
4567
+ const result = chunkPABSSYRA_js.deleteSection(sections, slides, sectionId);
4568
4568
  setSections(result.sections);
4569
4569
  setSlides(result.slides);
4570
4570
  markDirty();
@@ -4573,21 +4573,21 @@ function useSectionOperations(input) {
4573
4573
  );
4574
4574
  const moveSectionUp2 = react.useCallback(
4575
4575
  (sectionId) => {
4576
- setSections(chunk3TPQY6WR_js.moveSectionUp(sections, sectionId));
4576
+ setSections(chunkPABSSYRA_js.moveSectionUp(sections, sectionId));
4577
4577
  markDirty();
4578
4578
  },
4579
4579
  [sections, setSections, markDirty]
4580
4580
  );
4581
4581
  const moveSectionDown2 = react.useCallback(
4582
4582
  (sectionId) => {
4583
- setSections(chunk3TPQY6WR_js.moveSectionDown(sections, sectionId));
4583
+ setSections(chunkPABSSYRA_js.moveSectionDown(sections, sectionId));
4584
4584
  markDirty();
4585
4585
  },
4586
4586
  [sections, setSections, markDirty]
4587
4587
  );
4588
4588
  const moveSlidesToSection2 = react.useCallback(
4589
4589
  (slideIndexes, targetSectionId) => {
4590
- const result = chunk3TPQY6WR_js.moveSlidesToSection(sections, slides, slideIndexes, targetSectionId);
4590
+ const result = chunkPABSSYRA_js.moveSlidesToSection(sections, slides, slideIndexes, targetSectionId);
4591
4591
  setSlides(result.slides);
4592
4592
  setSections(result.sections);
4593
4593
  markDirty();
@@ -4653,15 +4653,15 @@ function syncSelectionHandleOverlay(elementNode, elementId, geometry) {
4653
4653
  // src/viewer/hooks/pointer-move-handlers.ts
4654
4654
  function computeResizeGeometry(handle, startX, startY, startWidth, startHeight, dx, dy, snapToGrid, gridSpacingPx, lockAspect = false) {
4655
4655
  const startBox = { x: startX, y: startY, width: startWidth, height: startHeight };
4656
- let resized = chunk3TPQY6WR_js.applyResize(startBox, handle, dx, dy, 1, { minSize: chunk4CLG3TRU_js.MIN_ELEMENT_SIZE });
4656
+ let resized = chunkPABSSYRA_js.applyResize(startBox, handle, dx, dy, 1, { minSize: chunkNMSZ3NSG_js.MIN_ELEMENT_SIZE });
4657
4657
  if (lockAspect) {
4658
- resized = chunk3TPQY6WR_js.lockResizeAspect(resized, startBox, handle, chunk4CLG3TRU_js.MIN_ELEMENT_SIZE);
4658
+ resized = chunkPABSSYRA_js.lockResizeAspect(resized, startBox, handle, chunkNMSZ3NSG_js.MIN_ELEMENT_SIZE);
4659
4659
  }
4660
4660
  const box = { x: resized.x, y: resized.y, width: resized.width, height: resized.height };
4661
4661
  if (!snapToGrid) {
4662
4662
  return box;
4663
4663
  }
4664
- return chunk3TPQY6WR_js.snapBoxToGrid(box, handle, gridSpacingPx, chunk4CLG3TRU_js.MIN_ELEMENT_SIZE);
4664
+ return chunkPABSSYRA_js.snapBoxToGrid(box, handle, gridSpacingPx, chunkNMSZ3NSG_js.MIN_ELEMENT_SIZE);
4665
4665
  }
4666
4666
  function resolveLiveTarget(input) {
4667
4667
  const { livePatcher, editTemplateMode, activeSlide } = input;
@@ -4774,7 +4774,7 @@ function processDragMove(e, drag, editorScale, snapToGrid, snapToShape, gridSpac
4774
4774
  width: el.width,
4775
4775
  height: el.height
4776
4776
  }));
4777
- const snapResult = chunk3TPQY6WR_js.computeSnapToShape(
4777
+ const snapResult = chunkPABSSYRA_js.computeSnapToShape(
4778
4778
  targetX,
4779
4779
  targetY,
4780
4780
  primaryEl.width,
@@ -4816,7 +4816,7 @@ function processDragMove(e, drag, editorScale, snapToGrid, snapToShape, gridSpac
4816
4816
  if (live) {
4817
4817
  for (const id of Object.keys(drag.startPositionsById)) {
4818
4818
  const start = drag.startPositionsById[id];
4819
- chunk3TPQY6WR_js.publishLiveGeometry(live.patcher, live.slideId, id, {
4819
+ chunkPABSSYRA_js.publishLiveGeometry(live.patcher, live.slideId, id, {
4820
4820
  x: start.x + appliedDx,
4821
4821
  y: start.y + appliedDy
4822
4822
  });
@@ -4848,8 +4848,8 @@ function processResizeMove(e, rs, editorScale, snapToGrid, gridSpacingPx, live)
4848
4848
  rs.lastY = geo.y;
4849
4849
  rs.lastWidth = geo.width;
4850
4850
  rs.lastHeight = geo.height;
4851
- const width = Math.max(geo.width, chunk4CLG3TRU_js.MIN_ELEMENT_SIZE);
4852
- const height = Math.max(geo.height, chunk4CLG3TRU_js.MIN_ELEMENT_SIZE);
4851
+ const width = Math.max(geo.width, chunkNMSZ3NSG_js.MIN_ELEMENT_SIZE);
4852
+ const height = Math.max(geo.height, chunkNMSZ3NSG_js.MIN_ELEMENT_SIZE);
4853
4853
  if (rs.domEl) {
4854
4854
  rs.domEl.style.left = `${geo.x}px`;
4855
4855
  rs.domEl.style.top = `${geo.y}px`;
@@ -4858,7 +4858,7 @@ function processResizeMove(e, rs, editorScale, snapToGrid, gridSpacingPx, live)
4858
4858
  syncSelectionHandleOverlay(rs.domEl, rs.elementId, { x: geo.x, y: geo.y, width, height });
4859
4859
  }
4860
4860
  if (live) {
4861
- chunk3TPQY6WR_js.publishLiveGeometry(live.patcher, live.slideId, rs.elementId, {
4861
+ chunkPABSSYRA_js.publishLiveGeometry(live.patcher, live.slideId, rs.elementId, {
4862
4862
  x: geo.x,
4863
4863
  y: geo.y,
4864
4864
  width,
@@ -4869,7 +4869,7 @@ function processResizeMove(e, rs, editorScale, snapToGrid, gridSpacingPx, live)
4869
4869
  function processAdjustmentMove(e, adj, editorScale, updateElementById) {
4870
4870
  const dx = (e.clientX - adj.startClientX) / editorScale;
4871
4871
  const dy = (e.clientY - adj.startClientY) / editorScale;
4872
- const adjustments = chunk3TPQY6WR_js.getDraggedShapeAdjustments(adj, dx, dy);
4872
+ const adjustments = chunkPABSSYRA_js.getDraggedShapeAdjustments(adj, dx, dy);
4873
4873
  if (!adj.moved && Math.hypot(dx, dy) > 2) {
4874
4874
  adj.moved = true;
4875
4875
  }
@@ -4944,13 +4944,13 @@ function processPointerUp(input) {
4944
4944
  if (i !== activeSlideIndex) {
4945
4945
  return s;
4946
4946
  }
4947
- const rerouted = chunk3TPQY6WR_js.rerouteConnectorsForMovedElements(s.elements, movedIds);
4947
+ const rerouted = chunkPABSSYRA_js.rerouteConnectorsForMovedElements(s.elements, movedIds);
4948
4948
  if (rerouted.length === 0) {
4949
4949
  return s;
4950
4950
  }
4951
4951
  return {
4952
4952
  ...s,
4953
- elements: chunk3TPQY6WR_js.applyReroutedConnectors(s.elements, rerouted)
4953
+ elements: chunkPABSSYRA_js.applyReroutedConnectors(s.elements, rerouted)
4954
4954
  };
4955
4955
  })
4956
4956
  );
@@ -4975,9 +4975,9 @@ function processPointerUp(input) {
4975
4975
  }
4976
4976
  function commitMarquee(marquee, editTemplateMode, templateElements, activeSlide, applySelection, clearSelection) {
4977
4977
  const sourceElements = editTemplateMode ? templateElements : activeSlide?.elements ?? [];
4978
- const hitIds = chunk3TPQY6WR_js.computeMarqueeHitIds(marquee, sourceElements);
4978
+ const hitIds = chunkPABSSYRA_js.computeMarqueeHitIds(marquee, sourceElements);
4979
4979
  if (marquee.additive) {
4980
- const merged = chunk3TPQY6WR_js.mergeAdditiveSelection(marquee.baseSelectionIds, hitIds);
4980
+ const merged = chunkPABSSYRA_js.mergeAdditiveSelection(marquee.baseSelectionIds, hitIds);
4981
4981
  if (merged.length > 0) {
4982
4982
  applySelection(merged[0], merged);
4983
4983
  } else {
@@ -5000,8 +5000,8 @@ function commitDrag(drag, editTemplateMode, activeSlide, activeSlideIndex, setTe
5000
5000
  }
5001
5001
  return { ...el, x: start.x + dx, y: start.y + dy };
5002
5002
  });
5003
- const rerouted = chunk3TPQY6WR_js.rerouteConnectorsForMovedElements(movedElements, movedIds);
5004
- return chunk3TPQY6WR_js.applyReroutedConnectors(movedElements, rerouted);
5003
+ const rerouted = chunkPABSSYRA_js.rerouteConnectorsForMovedElements(movedElements, movedIds);
5004
+ return chunkPABSSYRA_js.applyReroutedConnectors(movedElements, rerouted);
5005
5005
  };
5006
5006
  if (editTemplateMode) {
5007
5007
  const slideId = activeSlide?.id;
@@ -5157,17 +5157,17 @@ function useCanvasInteractions(input) {
5157
5157
  return;
5158
5158
  }
5159
5159
  const el = elementLookup.get(editId);
5160
- if (el && chunk3TPQY6WR_js.hasTextProperties(el)) {
5160
+ if (el && chunkPABSSYRA_js.hasTextProperties(el)) {
5161
5161
  const committedText = transformCommittedText ? transformCommittedText(inlineEditingText) : inlineEditingText;
5162
- const textPatch = chunk3TPQY6WR_js.buildInlineTextCommitPatch(el, committedText);
5162
+ const textPatch = chunkPABSSYRA_js.buildInlineTextCommitPatch(el, committedText);
5163
5163
  if (!textPatch) {
5164
5164
  setInlineEditingElementId(null);
5165
5165
  setInlineEditingText("");
5166
5166
  return;
5167
5167
  }
5168
5168
  const editorEl = document.querySelector("[data-inline-editor]");
5169
- const newHeight = chunk3TPQY6WR_js.resolveInlineEditAutoFitHeight(el.textStyle, el.height, editorEl);
5170
- const shrink = chunk3TPQY6WR_js.resolveInlineEditNormAutofitShrink(el.textStyle, el.height, editorEl);
5169
+ const newHeight = chunkPABSSYRA_js.resolveInlineEditAutoFitHeight(el.textStyle, el.height, editorEl);
5170
+ const shrink = chunkPABSSYRA_js.resolveInlineEditNormAutofitShrink(el.textStyle, el.height, editorEl);
5171
5171
  ops.updateElementById(editId, {
5172
5172
  ...textPatch,
5173
5173
  ...newHeight !== void 0 ? { height: newHeight } : {},
@@ -5185,7 +5185,7 @@ function useCanvasInteractions(input) {
5185
5185
  setInlineEditingText("");
5186
5186
  };
5187
5187
  const openEquationEditorForElement = (el) => {
5188
- if (!chunk3TPQY6WR_js.hasTextProperties(el)) {
5188
+ if (!chunkPABSSYRA_js.hasTextProperties(el)) {
5189
5189
  return false;
5190
5190
  }
5191
5191
  const eqSeg = el.textSegments?.find((seg) => seg.equationXml);
@@ -5215,7 +5215,7 @@ function useCanvasInteractions(input) {
5215
5215
  justInteractedRef.current = false;
5216
5216
  } else {
5217
5217
  const el = elementLookup.get(elementId);
5218
- if (el && chunk3TPQY6WR_js.hasTextProperties(el) && chunk3TPQY6WR_js.canInteractWithElement(el, "textEdit")) {
5218
+ if (el && chunkPABSSYRA_js.hasTextProperties(el) && chunkPABSSYRA_js.canInteractWithElement(el, "textEdit")) {
5219
5219
  if (!openEquationEditorForElement(el)) {
5220
5220
  setInlineEditingElementId(elementId);
5221
5221
  setInlineEditingText(el.text ?? "");
@@ -5234,7 +5234,7 @@ function useCanvasInteractions(input) {
5234
5234
  if (openEquationEditorForElement(el)) {
5235
5235
  return;
5236
5236
  }
5237
- if (chunk3TPQY6WR_js.hasTextProperties(el) && chunk3TPQY6WR_js.canInteractWithElement(el, "textEdit")) {
5237
+ if (chunkPABSSYRA_js.hasTextProperties(el) && chunkPABSSYRA_js.canInteractWithElement(el, "textEdit")) {
5238
5238
  setInlineEditingElementId(elementId);
5239
5239
  setInlineEditingText(el.text ?? "");
5240
5240
  }
@@ -5257,7 +5257,7 @@ function useCanvasInteractions(input) {
5257
5257
  justSelectedRef.current = false;
5258
5258
  }
5259
5259
  const ids = !wasSelected ? [elementId] : effectiveSelectedIds.length ? effectiveSelectedIds : [elementId];
5260
- const movableIds = chunk3TPQY6WR_js.filterInteractableIds(ids, (id) => elementLookup.get(id), "move");
5260
+ const movableIds = chunkPABSSYRA_js.filterInteractableIds(ids, (id) => elementLookup.get(id), "move");
5261
5261
  if (movableIds.length === 0) {
5262
5262
  return;
5263
5263
  }
@@ -5327,7 +5327,7 @@ function useCanvasInteractions(input) {
5327
5327
  const handleResizePointerDown = (elementId, e, handle) => {
5328
5328
  e.stopPropagation();
5329
5329
  const el = elementLookup.get(elementId);
5330
- if (!el || !chunk3TPQY6WR_js.canInteractWithElement(el, "resize")) {
5330
+ if (!el || !chunkPABSSYRA_js.canInteractWithElement(el, "resize")) {
5331
5331
  return;
5332
5332
  }
5333
5333
  resizeStateRef.current = {
@@ -5349,7 +5349,7 @@ function useCanvasInteractions(input) {
5349
5349
  };
5350
5350
  const handleRotate = (elementId, rotationDeg) => {
5351
5351
  const el = elementLookup.get(elementId);
5352
- if (!el || !chunk3TPQY6WR_js.canInteractWithElement(el, "rotate")) {
5352
+ if (!el || !chunkPABSSYRA_js.canInteractWithElement(el, "rotate")) {
5353
5353
  return;
5354
5354
  }
5355
5355
  ops.updateElementById(elementId, { rotation: rotationDeg });
@@ -5369,10 +5369,10 @@ function useCanvasInteractions(input) {
5369
5369
  const handleAdjustmentPointerDown = (elementId, e, descriptor) => {
5370
5370
  e.stopPropagation();
5371
5371
  const el = elementLookup.get(elementId);
5372
- if (!el || !chunk3TPQY6WR_js.canInteractWithElement(el, "adjustHandle")) {
5372
+ if (!el || !chunkPABSSYRA_js.canInteractWithElement(el, "adjustHandle")) {
5373
5373
  return;
5374
5374
  }
5375
- shapeAdjustmentDragStateRef.current = chunk3TPQY6WR_js.beginShapeAdjustment(
5375
+ shapeAdjustmentDragStateRef.current = chunkPABSSYRA_js.beginShapeAdjustment(
5376
5376
  el,
5377
5377
  descriptor,
5378
5378
  e.clientX,
@@ -5419,7 +5419,7 @@ function createFileHandlers(deps) {
5419
5419
  h = Math.round(h * scale);
5420
5420
  }
5421
5421
  addElement({
5422
- id: chunk3TPQY6WR_js.generateElementId(),
5422
+ id: chunkPABSSYRA_js.generateElementId(),
5423
5423
  type: "image",
5424
5424
  x: Math.round((canvasSize.width - w) / 2),
5425
5425
  y: Math.round((canvasSize.height - h) / 2),
@@ -5430,7 +5430,7 @@ function createFileHandlers(deps) {
5430
5430
  };
5431
5431
  img.onerror = () => {
5432
5432
  addElement({
5433
- id: chunk3TPQY6WR_js.generateElementId(),
5433
+ id: chunkPABSSYRA_js.generateElementId(),
5434
5434
  type: "image",
5435
5435
  x: 100,
5436
5436
  y: 100,
@@ -5449,14 +5449,14 @@ function createFileHandlers(deps) {
5449
5449
  return;
5450
5450
  }
5451
5451
  e.target.value = "";
5452
- const mediaType = chunk3TPQY6WR_js.classifyMediaType(file.type);
5452
+ const mediaType = chunkPABSSYRA_js.classifyMediaType(file.type);
5453
5453
  if (!mediaType) {
5454
5454
  return;
5455
5455
  }
5456
5456
  const elFilePath = file.path;
5457
5457
  const insertMediaElement = (mediaSourceUrl, width, height) => {
5458
5458
  addElement({
5459
- id: chunk3TPQY6WR_js.generateElementId(),
5459
+ id: chunkPABSSYRA_js.generateElementId(),
5460
5460
  type: "media",
5461
5461
  mediaType,
5462
5462
  mediaMimeType: file.type || void 0,
@@ -5631,13 +5631,13 @@ function createStructuredElementHandlers(deps) {
5631
5631
  return;
5632
5632
  }
5633
5633
  addElement({
5634
- id: chunk3TPQY6WR_js.generateElementId(),
5634
+ id: chunkPABSSYRA_js.generateElementId(),
5635
5635
  type: "smartArt",
5636
5636
  x: 100,
5637
5637
  y: 120,
5638
5638
  width: 600,
5639
5639
  height: 340,
5640
- smartArtData: chunk3TPQY6WR_js.buildSmartArtPresetData(
5640
+ smartArtData: chunkPABSSYRA_js.buildSmartArtPresetData(
5641
5641
  layout,
5642
5642
  defaultItems,
5643
5643
  (i) => `node-${Date.now()}-${i}-${Math.random().toString(36).slice(2, 8)}`
@@ -5649,7 +5649,7 @@ function createStructuredElementHandlers(deps) {
5649
5649
  return;
5650
5650
  }
5651
5651
  addElement({
5652
- id: chunk3TPQY6WR_js.generateElementId(),
5652
+ id: chunkPABSSYRA_js.generateElementId(),
5653
5653
  type: "shape",
5654
5654
  x: 120,
5655
5655
  y: 200,
@@ -5687,7 +5687,7 @@ function createStructuredElementHandlers(deps) {
5687
5687
  return;
5688
5688
  }
5689
5689
  const resolved = resolveHyperlinkEditResult(data);
5690
- if (resolved.url && !chunk3TPQY6WR_js.isUrlSafe(resolved.url)) {
5690
+ if (resolved.url && !chunkPABSSYRA_js.isUrlSafe(resolved.url)) {
5691
5691
  return;
5692
5692
  }
5693
5693
  const actionClick = {
@@ -5711,7 +5711,7 @@ function createStructuredElementHandlers(deps) {
5711
5711
  const displayText = value || fieldTexts[fieldType] || fieldType;
5712
5712
  const fieldGuid = `{${crypto.randomUUID().toUpperCase()}}`;
5713
5713
  addElement({
5714
- id: chunk3TPQY6WR_js.generateElementId(),
5714
+ id: chunkPABSSYRA_js.generateElementId(),
5715
5715
  type: "shape",
5716
5716
  x: 120,
5717
5717
  y: 200,
@@ -5733,11 +5733,11 @@ function createStructuredElementHandlers(deps) {
5733
5733
  if (!activeSlide) {
5734
5734
  return;
5735
5735
  }
5736
- const preset = chunk3TPQY6WR_js.ACTION_BUTTON_PRESETS.find((p) => p.shapeType === shapeType);
5736
+ const preset = chunkPABSSYRA_js.ACTION_BUTTON_PRESETS.find((p) => p.shapeType === shapeType);
5737
5737
  if (!preset) {
5738
5738
  return;
5739
5739
  }
5740
- const defaultPptxAction = chunk3TPQY6WR_js.elementActionToPptxAction({
5740
+ const defaultPptxAction = chunkPABSSYRA_js.elementActionToPptxAction({
5741
5741
  trigger: "click",
5742
5742
  type: preset.defaultAction
5743
5743
  });
@@ -5746,7 +5746,7 @@ function createStructuredElementHandlers(deps) {
5746
5746
  defaultPptxAction.highlightClick = true;
5747
5747
  }
5748
5748
  addElement({
5749
- id: chunk3TPQY6WR_js.generateElementId(),
5749
+ id: chunkPABSSYRA_js.generateElementId(),
5750
5750
  type: "shape",
5751
5751
  x: 150,
5752
5752
  y: 150,
@@ -5813,14 +5813,14 @@ function useInsertElements(input) {
5813
5813
  return;
5814
5814
  }
5815
5815
  addElement({
5816
- id: chunk3TPQY6WR_js.generateElementId(),
5816
+ id: chunkPABSSYRA_js.generateElementId(),
5817
5817
  type: "text",
5818
5818
  x: 100,
5819
5819
  y: 100,
5820
5820
  width: 300,
5821
5821
  height: 60,
5822
5822
  text: "",
5823
- textStyle: { fontSize: chunk4CLG3TRU_js.DEFAULT_TEXT_FONT_SIZE }
5823
+ textStyle: { fontSize: chunkNMSZ3NSG_js.DEFAULT_TEXT_FONT_SIZE }
5824
5824
  });
5825
5825
  };
5826
5826
  const handleAddShape = () => {
@@ -5828,7 +5828,7 @@ function useInsertElements(input) {
5828
5828
  return;
5829
5829
  }
5830
5830
  addElement({
5831
- id: chunk3TPQY6WR_js.generateElementId(),
5831
+ id: chunkPABSSYRA_js.generateElementId(),
5832
5832
  type: "shape",
5833
5833
  x: 150,
5834
5834
  y: 150,
@@ -5847,15 +5847,15 @@ function useInsertElements(input) {
5847
5847
  return;
5848
5848
  }
5849
5849
  addElement({
5850
- ...chunk3TPQY6WR_js.newTableElement(chunk4CLG3TRU_js.DEFAULT_TABLE_ROWS, chunk4CLG3TRU_js.DEFAULT_TABLE_COLUMNS, 100, 200),
5851
- id: chunk3TPQY6WR_js.generateElementId()
5850
+ ...chunkPABSSYRA_js.newTableElement(chunkNMSZ3NSG_js.DEFAULT_TABLE_ROWS, chunkNMSZ3NSG_js.DEFAULT_TABLE_COLUMNS, 100, 200),
5851
+ id: chunkPABSSYRA_js.generateElementId()
5852
5852
  });
5853
5853
  };
5854
5854
  const handleAddChart = (chartKind) => {
5855
5855
  if (!activeSlide) {
5856
5856
  return;
5857
5857
  }
5858
- addElement(chunk3TPQY6WR_js.createDefaultChartElement(chartKind));
5858
+ addElement(chunkPABSSYRA_js.createDefaultChartElement(chartKind));
5859
5859
  };
5860
5860
  const structured = createStructuredElementHandlers({
5861
5861
  activeSlide,
@@ -5925,7 +5925,7 @@ function useClipboardHandlers(input) {
5925
5925
  if (!selectedElement) {
5926
5926
  return;
5927
5927
  }
5928
- setClipboardPayload(chunk3TPQY6WR_js.buildElementClipboardPayload(selectedElement, editTemplateMode));
5928
+ setClipboardPayload(chunkPABSSYRA_js.buildElementClipboardPayload(selectedElement, editTemplateMode));
5929
5929
  };
5930
5930
  const handleDelete = () => {
5931
5931
  const idsToDelete = effectiveSelectedIds;
@@ -5942,7 +5942,7 @@ function useClipboardHandlers(input) {
5942
5942
  handleDelete();
5943
5943
  };
5944
5944
  const insertClone = (source) => {
5945
- const clone = chunk3TPQY6WR_js.cloneElementForPaste(source, { intoTemplate: editTemplateMode });
5945
+ const clone = chunkPABSSYRA_js.cloneElementForPaste(source, { intoTemplate: editTemplateMode });
5946
5946
  ops.updateActiveElements((els) => [...els, clone]);
5947
5947
  ops.applySelection(clone.id);
5948
5948
  history.markDirty();
@@ -5977,7 +5977,7 @@ function resolveShapePath(el) {
5977
5977
  return el.pathData;
5978
5978
  }
5979
5979
  if ("shapeType" in el && typeof el.shapeType === "string") {
5980
- const clipPath = chunk3TPQY6WR_js.getPresetShapeClipPath(el.shapeType);
5980
+ const clipPath = chunkPABSSYRA_js.getPresetShapeClipPath(el.shapeType);
5981
5981
  if (clipPath) {
5982
5982
  const svgPath = clipPathToSvgPath(clipPath, el.width, el.height);
5983
5983
  if (svgPath) {
@@ -6028,7 +6028,7 @@ function clipPathToSvgPath(clipPath, width, height) {
6028
6028
  return parts.join(" ");
6029
6029
  }
6030
6030
  function transformPathToGlobal(pathData, el) {
6031
- const polys = chunk3TPQY6WR_js.svgPathToPolygons(pathData);
6031
+ const polys = chunkPABSSYRA_js.svgPathToPolygons(pathData);
6032
6032
  if (polys.length === 0) {
6033
6033
  return pathData;
6034
6034
  }
@@ -6048,10 +6048,10 @@ function transformPathToGlobal(pathData, el) {
6048
6048
  y: pt.y * scaleY + el.y
6049
6049
  }))
6050
6050
  );
6051
- return chunk3TPQY6WR_js.polygonsToSvgPath(transformed);
6051
+ return chunkPABSSYRA_js.polygonsToSvgPath(transformed);
6052
6052
  }
6053
6053
  function transformPathToLocal(pathData, x, y, _width, _height) {
6054
- const polys = chunk3TPQY6WR_js.svgPathToPolygons(pathData);
6054
+ const polys = chunkPABSSYRA_js.svgPathToPolygons(pathData);
6055
6055
  if (polys.length === 0) {
6056
6056
  return pathData;
6057
6057
  }
@@ -6061,10 +6061,10 @@ function transformPathToLocal(pathData, x, y, _width, _height) {
6061
6061
  y: pt.y - y
6062
6062
  }))
6063
6063
  );
6064
- return chunk3TPQY6WR_js.polygonsToSvgPath(transformed);
6064
+ return chunkPABSSYRA_js.polygonsToSvgPath(transformed);
6065
6065
  }
6066
6066
  function pathBounds(pathData) {
6067
- const polys = chunk3TPQY6WR_js.svgPathToPolygons(pathData);
6067
+ const polys = chunkPABSSYRA_js.svgPathToPolygons(pathData);
6068
6068
  let minX = Infinity;
6069
6069
  let minY = Infinity;
6070
6070
  let maxX = -Infinity;
@@ -6123,7 +6123,7 @@ function useMergeShapesHandler(input) {
6123
6123
  let allFragments = [];
6124
6124
  let remaining = globalPaths[0];
6125
6125
  for (let i = 1; i < globalPaths.length; i++) {
6126
- const frags = chunk3TPQY6WR_js.mergeShapes("fragment", remaining, globalPaths[i]);
6126
+ const frags = chunkPABSSYRA_js.mergeShapes("fragment", remaining, globalPaths[i]);
6127
6127
  if (Array.isArray(frags)) {
6128
6128
  allFragments = frags;
6129
6129
  }
@@ -6152,7 +6152,7 @@ function useMergeShapesHandler(input) {
6152
6152
  bounds.height
6153
6153
  );
6154
6154
  const newEl = {
6155
- id: chunk3TPQY6WR_js.generateElementId(),
6155
+ id: chunkPABSSYRA_js.generateElementId(),
6156
6156
  type: "shape",
6157
6157
  x: bounds.x,
6158
6158
  y: bounds.y,
@@ -6190,7 +6190,7 @@ function useMergeShapesHandler(input) {
6190
6190
  } else {
6191
6191
  let resultPath = globalPaths[0];
6192
6192
  for (let i = 1; i < globalPaths.length; i++) {
6193
- const result = chunk3TPQY6WR_js.mergeShapes(operation, resultPath, globalPaths[i]);
6193
+ const result = chunkPABSSYRA_js.mergeShapes(operation, resultPath, globalPaths[i]);
6194
6194
  if (typeof result === "string") {
6195
6195
  resultPath = result;
6196
6196
  }
@@ -6211,7 +6211,7 @@ function useMergeShapesHandler(input) {
6211
6211
  );
6212
6212
  const primary = targets[0];
6213
6213
  const newEl = {
6214
- id: chunk3TPQY6WR_js.generateElementId(),
6214
+ id: chunkPABSSYRA_js.generateElementId(),
6215
6215
  type: "shape",
6216
6216
  x: bounds.x,
6217
6217
  y: bounds.y,
@@ -6274,10 +6274,10 @@ function useGroupAlignLayerHandlers(input) {
6274
6274
  if (ids.length < 2 || !activeSlide) {
6275
6275
  return;
6276
6276
  }
6277
- if (!selectedElements.every((el) => chunk3TPQY6WR_js.canInteractWithElement(el, "group"))) {
6277
+ if (!selectedElements.every((el) => chunkPABSSYRA_js.canInteractWithElement(el, "group"))) {
6278
6278
  return;
6279
6279
  }
6280
- const { elements, groupId } = chunk3TPQY6WR_js.groupElements(ops.activeElements, ids, chunk3TPQY6WR_js.generateElementId());
6280
+ const { elements, groupId } = chunkPABSSYRA_js.groupElements(ops.activeElements, ids, chunkPABSSYRA_js.generateElementId());
6281
6281
  if (groupId === null) {
6282
6282
  return;
6283
6283
  }
@@ -6289,15 +6289,15 @@ function useGroupAlignLayerHandlers(input) {
6289
6289
  if (!selectedElement || selectedElement.type !== "group" || !activeSlide) {
6290
6290
  return;
6291
6291
  }
6292
- if (!chunk3TPQY6WR_js.canInteractWithElement(selectedElement, "group")) {
6292
+ if (!chunkPABSSYRA_js.canInteractWithElement(selectedElement, "group")) {
6293
6293
  return;
6294
6294
  }
6295
6295
  const group = selectedElement;
6296
- const intoTemplate = chunk3TPQY6WR_js.isTemplateElementId(group.id);
6296
+ const intoTemplate = chunkPABSSYRA_js.isTemplateElementId(group.id);
6297
6297
  const childIds = group.children.map(
6298
- (child) => intoTemplate ? chunk3TPQY6WR_js.makeCloneId(true, child.id || group.id) : child.id || chunk3TPQY6WR_js.generateElementId()
6298
+ (child) => intoTemplate ? chunkPABSSYRA_js.makeCloneId(true, child.id || group.id) : child.id || chunkPABSSYRA_js.generateElementId()
6299
6299
  );
6300
- const { elements, childIds: usedIds } = chunk3TPQY6WR_js.ungroupElements(
6300
+ const { elements, childIds: usedIds } = chunkPABSSYRA_js.ungroupElements(
6301
6301
  ops.activeElements,
6302
6302
  group.id,
6303
6303
  childIds,
@@ -6326,7 +6326,7 @@ function useGroupAlignLayerHandlers(input) {
6326
6326
  if (!edge) {
6327
6327
  return;
6328
6328
  }
6329
- const positions = chunk3TPQY6WR_js.alignElements(selectedElements, edge);
6329
+ const positions = chunkPABSSYRA_js.alignElements(selectedElements, edge);
6330
6330
  for (const [id, pos] of positions) {
6331
6331
  const el = elementLookup.get(id);
6332
6332
  if (!el) {
@@ -6344,7 +6344,7 @@ function useGroupAlignLayerHandlers(input) {
6344
6344
  if (!distAxis) {
6345
6345
  return;
6346
6346
  }
6347
- const positions = chunk3TPQY6WR_js.distributeElements(selectedElements, distAxis);
6347
+ const positions = chunkPABSSYRA_js.distributeElements(selectedElements, distAxis);
6348
6348
  for (const [id, pos] of positions) {
6349
6349
  const el = elementLookup.get(id);
6350
6350
  if (!el) {
@@ -6355,14 +6355,14 @@ function useGroupAlignLayerHandlers(input) {
6355
6355
  history.markDirty();
6356
6356
  };
6357
6357
  const canDistribute = selectedElements.length >= 3;
6358
- const selectionGroupable = selectedElements.every((el) => chunk3TPQY6WR_js.canInteractWithElement(el, "group"));
6358
+ const selectionGroupable = selectedElements.every((el) => chunkPABSSYRA_js.canInteractWithElement(el, "group"));
6359
6359
  const handleMoveLayer = (direction) => {
6360
6360
  if (!selectedElement || !activeSlide) {
6361
6361
  return;
6362
6362
  }
6363
6363
  const id = selectedElement.id;
6364
6364
  ops.updateActiveElements(
6365
- (els) => direction === "forward" ? chunk3TPQY6WR_js.bringForward(els, id) : direction === "backward" ? chunk3TPQY6WR_js.sendBackward(els, id) : els
6365
+ (els) => direction === "forward" ? chunkPABSSYRA_js.bringForward(els, id) : direction === "backward" ? chunkPABSSYRA_js.sendBackward(els, id) : els
6366
6366
  );
6367
6367
  history.markDirty();
6368
6368
  };
@@ -6372,7 +6372,7 @@ function useGroupAlignLayerHandlers(input) {
6372
6372
  }
6373
6373
  const id = selectedElement.id;
6374
6374
  ops.updateActiveElements(
6375
- (els) => direction === "front" ? chunk3TPQY6WR_js.bringToFront(els, id) : chunk3TPQY6WR_js.sendToBack(els, id)
6375
+ (els) => direction === "front" ? chunkPABSSYRA_js.bringToFront(els, id) : chunkPABSSYRA_js.sendToBack(els, id)
6376
6376
  );
6377
6377
  history.markDirty();
6378
6378
  };
@@ -6507,7 +6507,7 @@ function useSlideManagement(input) {
6507
6507
  } = input;
6508
6508
  const handleAddSlideAfter = (afterIndex) => {
6509
6509
  const insertAt = Math.max(0, Math.min(afterIndex + 1, slides.length));
6510
- const newSlide = chunk3TPQY6WR_js.createBlankSlide(slides.length + 1);
6510
+ const newSlide = chunkPABSSYRA_js.createBlankSlide(slides.length + 1);
6511
6511
  ops.updateSlides((prev) => {
6512
6512
  const next = [...prev];
6513
6513
  next.splice(insertAt, 0, newSlide);
@@ -6571,7 +6571,7 @@ function useSlideManagement(input) {
6571
6571
  }
6572
6572
  const clone = {
6573
6573
  ...src,
6574
- id: chunk3TPQY6WR_js.makeSlideId(),
6574
+ id: chunkPABSSYRA_js.makeSlideId(),
6575
6575
  elements: src.elements.map((el) => ({
6576
6576
  ...el,
6577
6577
  id: `${el.id}-dup-${Math.random().toString(36).slice(2, 6)}`
@@ -6603,7 +6603,7 @@ function useSlideManagement(input) {
6603
6603
  const handleInsertSlideFromLayout = (layoutPath, layoutName) => {
6604
6604
  const insertAt = activeSlideIndex + 1;
6605
6605
  const draft = {
6606
- ...chunk3TPQY6WR_js.createBlankSlide(slides.length + 1),
6606
+ ...chunkPABSSYRA_js.createBlankSlide(slides.length + 1),
6607
6607
  layoutPath,
6608
6608
  ...layoutName ? { layoutName } : {}
6609
6609
  };
@@ -6636,9 +6636,9 @@ function useSlideManagement(input) {
6636
6636
  };
6637
6637
  const handleInsertSlideFromTemplate = (templateId) => {
6638
6638
  const insertAt = activeSlideIndex + 1;
6639
- const draft = chunk3TPQY6WR_js.buildSlideTemplateSlide(templateId, chunk3TPQY6WR_js.makeSlideId(), slides.length + 1, {
6639
+ const draft = chunkPABSSYRA_js.buildSlideTemplateSlide(templateId, chunkPABSSYRA_js.makeSlideId(), slides.length + 1, {
6640
6640
  ...canvasSize ? { slideWidth: canvasSize.width, slideHeight: canvasSize.height } : {},
6641
- scheme: chunk3TPQY6WR_js.templateSchemeFromTheme(theme?.colorScheme)
6641
+ scheme: chunkPABSSYRA_js.templateSchemeFromTheme(theme?.colorScheme)
6642
6642
  });
6643
6643
  ops.updateSlides((prev) => insertSlideFromLayoutUpdater(prev, activeSlideIndex, draft));
6644
6644
  setActiveSlideIndex(insertAt);
@@ -6676,7 +6676,7 @@ function createTableMergeHandlers(input) {
6676
6676
  if (!nextCell || nextCell.hMerge || nextCell.vMerge) {
6677
6677
  return;
6678
6678
  }
6679
- const newTableData = chunk3TPQY6WR_js.mergeCells(
6679
+ const newTableData = chunkPABSSYRA_js.mergeCells(
6680
6680
  [
6681
6681
  { row: rowIndex, col: columnIndex },
6682
6682
  { row: rowIndex, col: nextColIdx }
@@ -6684,7 +6684,7 @@ function createTableMergeHandlers(input) {
6684
6684
  td
6685
6685
  );
6686
6686
  const updates = { tableData: newTableData };
6687
- const newRawXml = chunk3TPQY6WR_js.updateMergeAttrsInRawXml(selectedElement, newTableData);
6687
+ const newRawXml = chunkPABSSYRA_js.updateMergeAttrsInRawXml(selectedElement, newTableData);
6688
6688
  if (newRawXml) {
6689
6689
  updates.rawXml = newRawXml;
6690
6690
  }
@@ -6710,7 +6710,7 @@ function createTableMergeHandlers(input) {
6710
6710
  if (!targetNextCell || targetNextCell.hMerge || targetNextCell.vMerge) {
6711
6711
  return;
6712
6712
  }
6713
- const newTableData = chunk3TPQY6WR_js.mergeCells(
6713
+ const newTableData = chunkPABSSYRA_js.mergeCells(
6714
6714
  [
6715
6715
  { row: rowIndex, col: columnIndex },
6716
6716
  { row: targetNextRowIdx, col: columnIndex }
@@ -6718,7 +6718,7 @@ function createTableMergeHandlers(input) {
6718
6718
  td
6719
6719
  );
6720
6720
  const updates = { tableData: newTableData };
6721
- const newRawXml = chunk3TPQY6WR_js.updateMergeAttrsInRawXml(selectedElement, newTableData);
6721
+ const newRawXml = chunkPABSSYRA_js.updateMergeAttrsInRawXml(selectedElement, newTableData);
6722
6722
  if (newRawXml) {
6723
6723
  updates.rawXml = newRawXml;
6724
6724
  }
@@ -6733,9 +6733,9 @@ function createTableMergeHandlers(input) {
6733
6733
  return;
6734
6734
  }
6735
6735
  const td = selectedElement.tableData;
6736
- const newTableData = chunk3TPQY6WR_js.mergeCells(ts.selectedCells, td);
6736
+ const newTableData = chunkPABSSYRA_js.mergeCells(ts.selectedCells, td);
6737
6737
  const updates = { tableData: newTableData };
6738
- const newRawXml = chunk3TPQY6WR_js.updateMergeAttrsInRawXml(selectedElement, newTableData);
6738
+ const newRawXml = chunkPABSSYRA_js.updateMergeAttrsInRawXml(selectedElement, newTableData);
6739
6739
  if (newRawXml) {
6740
6740
  updates.rawXml = newRawXml;
6741
6741
  }
@@ -6752,9 +6752,9 @@ function createTableMergeHandlers(input) {
6752
6752
  }
6753
6753
  const { rowIndex, columnIndex } = ts;
6754
6754
  const td = selectedElement.tableData;
6755
- const newTableData = chunk3TPQY6WR_js.splitCell(rowIndex, columnIndex, td);
6755
+ const newTableData = chunkPABSSYRA_js.splitCell(rowIndex, columnIndex, td);
6756
6756
  const updates = { tableData: newTableData };
6757
- const newRawXml = chunk3TPQY6WR_js.updateMergeAttrsInRawXml(selectedElement, newTableData);
6757
+ const newRawXml = chunkPABSSYRA_js.updateMergeAttrsInRawXml(selectedElement, newTableData);
6758
6758
  if (newRawXml) {
6759
6759
  updates.rawXml = newRawXml;
6760
6760
  }
@@ -6788,10 +6788,10 @@ function createTableStructHandlers(input) {
6788
6788
  const text = transformCommittedText ? transformCommittedText(rawText) : rawText;
6789
6789
  const updates = {};
6790
6790
  if (el.tableData) {
6791
- updates.tableData = chunk3TPQY6WR_js.setCellText(el, rowIndex, colIndex, text).tableData;
6791
+ updates.tableData = chunkPABSSYRA_js.setCellText(el, rowIndex, colIndex, text).tableData;
6792
6792
  }
6793
6793
  if (el.rawXml) {
6794
- const newRawXml = chunk3TPQY6WR_js.updateCellTextInRawXml(el, rowIndex, colIndex, text);
6794
+ const newRawXml = chunkPABSSYRA_js.updateCellTextInRawXml(el, rowIndex, colIndex, text);
6795
6795
  if (newRawXml) {
6796
6796
  updates.rawXml = newRawXml;
6797
6797
  }
@@ -6815,7 +6815,7 @@ function createTableStructHandlers(input) {
6815
6815
  const { rowIndex, columnIndex: colIndex } = ts;
6816
6816
  const updates = {};
6817
6817
  if (selectedElement.rawXml) {
6818
- const newRawXml = chunk3TPQY6WR_js.updateCellTextStyleInRawXml(
6818
+ const newRawXml = chunkPABSSYRA_js.updateCellTextStyleInRawXml(
6819
6819
  selectedElement,
6820
6820
  rowIndex,
6821
6821
  colIndex,
@@ -6879,7 +6879,7 @@ function createTableStructHandlers(input) {
6879
6879
  return;
6880
6880
  }
6881
6881
  const rowIdx = ts?.rowIndex ?? 0;
6882
- const next = chunk3TPQY6WR_js.insertTableElementRow(selectedElement, rowIdx, position);
6882
+ const next = chunkPABSSYRA_js.insertTableElementRow(selectedElement, rowIdx, position);
6883
6883
  ops.updateSelectedElement({ tableData: next.tableData, rawXml: next.rawXml });
6884
6884
  history.markDirty();
6885
6885
  };
@@ -6888,7 +6888,7 @@ function createTableStructHandlers(input) {
6888
6888
  return;
6889
6889
  }
6890
6890
  const rowIdx = ts?.rowIndex ?? 0;
6891
- const next = chunk3TPQY6WR_js.removeTableElementRow(selectedElement, rowIdx);
6891
+ const next = chunkPABSSYRA_js.removeTableElementRow(selectedElement, rowIdx);
6892
6892
  if (next === selectedElement) {
6893
6893
  return;
6894
6894
  }
@@ -6900,7 +6900,7 @@ function createTableStructHandlers(input) {
6900
6900
  return;
6901
6901
  }
6902
6902
  const colIdx = ts?.columnIndex ?? 0;
6903
- const next = chunk3TPQY6WR_js.insertTableElementColumn(selectedElement, colIdx, position);
6903
+ const next = chunkPABSSYRA_js.insertTableElementColumn(selectedElement, colIdx, position);
6904
6904
  ops.updateSelectedElement({ tableData: next.tableData, rawXml: next.rawXml });
6905
6905
  history.markDirty();
6906
6906
  };
@@ -6909,7 +6909,7 @@ function createTableStructHandlers(input) {
6909
6909
  return;
6910
6910
  }
6911
6911
  const colIdx = ts?.columnIndex ?? 0;
6912
- const next = chunk3TPQY6WR_js.removeTableElementColumn(selectedElement, colIdx);
6912
+ const next = chunkPABSSYRA_js.removeTableElementColumn(selectedElement, colIdx);
6913
6913
  if (next === selectedElement) {
6914
6914
  return;
6915
6915
  }
@@ -6945,8 +6945,8 @@ async function renderToCanvas(element, options = {}) {
6945
6945
  return html2canvasPro(element, {
6946
6946
  ...options,
6947
6947
  onclone: async (doc, clonedEl) => {
6948
- await chunk3TPQY6WR_js.normalizeColorsForCapture(doc, clonedEl);
6949
- chunk3TPQY6WR_js.preprocessCssForCapture(clonedEl);
6948
+ await chunkPABSSYRA_js.normalizeColorsForCapture(doc, clonedEl);
6949
+ chunkPABSSYRA_js.preprocessCssForCapture(clonedEl);
6950
6950
  if (typeof userOnClone === "function") {
6951
6951
  userOnClone(doc, clonedEl);
6952
6952
  }
@@ -6976,7 +6976,7 @@ function useExportSaveAs(input) {
6976
6976
  slideSizeEmu
6977
6977
  } = input;
6978
6978
  const handleSaveAsFormat = async (format) => {
6979
- const downloadName = chunk3TPQY6WR_js.savedPresentationFileName(filePath, format);
6979
+ const downloadName = chunkPABSSYRA_js.savedPresentationFileName(filePath, format);
6980
6980
  try {
6981
6981
  const data = await serializeSlides(format);
6982
6982
  if (!data) {
@@ -6984,16 +6984,16 @@ function useExportSaveAs(input) {
6984
6984
  }
6985
6985
  const mimeType = format === "ppt" ? "application/vnd.ms-powerpoint" : "application/vnd.openxmlformats-officedocument.presentationml.presentation";
6986
6986
  const blob = new Blob([data], { type: mimeType });
6987
- chunk3TPQY6WR_js.downloadBlob(blob, downloadName);
6987
+ chunkPABSSYRA_js.downloadBlob(blob, downloadName);
6988
6988
  } catch (err) {
6989
6989
  console.error(`[PowerPointViewer] Save as .${format} failed:`, err);
6990
6990
  }
6991
6991
  };
6992
6992
  const handleExportJson = () => {
6993
6993
  const sourceName = filePath ? filePath.replace(/\\/gu, "/").split("/").pop() : void 0;
6994
- const slideSize = chunk3TPQY6WR_js.resolveSlideSizeSelection({ current: slideSizeEmu, canvas: canvasSize }).size;
6994
+ const slideSize = chunkPABSSYRA_js.resolveSlideSizeSelection({ current: slideSizeEmu, canvas: canvasSize }).size;
6995
6995
  const data = {
6996
- slides: chunk3TPQY6WR_js.buildSaveSlides(slides, templateElementsBySlideId),
6996
+ slides: chunkPABSSYRA_js.buildSaveSlides(slides, templateElementsBySlideId),
6997
6997
  width: canvasSize.width,
6998
6998
  height: canvasSize.height,
6999
6999
  widthEmu: slideSize.widthEmu,
@@ -7012,7 +7012,7 @@ function useExportSaveAs(input) {
7012
7012
  handoutMaster
7013
7013
  };
7014
7014
  try {
7015
- chunk3TPQY6WR_js.exportDeckJson(data, sourceName);
7015
+ chunkPABSSYRA_js.exportDeckJson(data, sourceName);
7016
7016
  } catch (err) {
7017
7017
  console.error("[PowerPointViewer] JSON export failed:", err);
7018
7018
  }
@@ -7077,7 +7077,7 @@ function buildRasterOptions(element, scale, backgroundColor, mode) {
7077
7077
  }
7078
7078
  async function renderElementToRaster(element, scale = 2, backgroundColor, mode = "auto") {
7079
7079
  const { width, height } = measureNaturalSize(element);
7080
- return chunk3TPQY6WR_js.rasterizeElement(
7080
+ return chunkPABSSYRA_js.rasterizeElement(
7081
7081
  element,
7082
7082
  width,
7083
7083
  height,
@@ -7087,7 +7087,7 @@ async function renderElementToRaster(element, scale = 2, backgroundColor, mode =
7087
7087
  }
7088
7088
  async function renderElementToTiles(element, scale = 2, backgroundColor, mode = "auto") {
7089
7089
  const { width, height } = measureNaturalSize(element);
7090
- return chunk3TPQY6WR_js.rasterizeElementTiles(
7090
+ return chunkPABSSYRA_js.rasterizeElementTiles(
7091
7091
  element,
7092
7092
  width,
7093
7093
  height,
@@ -7097,7 +7097,7 @@ async function renderElementToTiles(element, scale = 2, backgroundColor, mode =
7097
7097
  }
7098
7098
  async function renderElementToTiledCanvas(element, scale = 2, backgroundColor, mode = "auto") {
7099
7099
  const { width, height } = measureNaturalSize(element);
7100
- return chunk3TPQY6WR_js.rasterizeElementTiledToCanvas(
7100
+ return chunkPABSSYRA_js.rasterizeElementTiledToCanvas(
7101
7101
  element,
7102
7102
  width,
7103
7103
  height,
@@ -7119,11 +7119,11 @@ function waitForRender(ms = 100) {
7119
7119
  async function exportSlideToPngBlob(slideElement, options = {}) {
7120
7120
  const { scale = 2, backgroundColor } = options;
7121
7121
  const result = await renderElementToRaster(slideElement, scale, backgroundColor);
7122
- return chunk3TPQY6WR_js.rasterResultToPngBlob(result);
7122
+ return chunkPABSSYRA_js.rasterResultToPngBlob(result);
7123
7123
  }
7124
7124
  async function exportSlideAsPng(slideElement, slideIndex, options = {}) {
7125
7125
  const blob = await exportSlideToPngBlob(slideElement, options);
7126
- chunk3TPQY6WR_js.downloadBlob(blob, `slide-${slideIndex + 1}.png`);
7126
+ chunkPABSSYRA_js.downloadBlob(blob, `slide-${slideIndex + 1}.png`);
7127
7127
  }
7128
7128
  async function copySlideToClipboard(slideElement, options = {}) {
7129
7129
  const blob = await exportSlideToPngBlob(slideElement, options);
@@ -7152,13 +7152,13 @@ async function captureAllSlidesAsPngDataUrls(slideStageRef, totalSlides, setActi
7152
7152
  // src/viewer/utils/export-pdf.ts
7153
7153
  function tilesToPdfPage(tilesResult) {
7154
7154
  return tilesResult.tiles.map((tile) => ({
7155
- image: chunk3TPQY6WR_js.canvasToJpegData(tile.canvas),
7156
- placement: chunk3TPQY6WR_js.placeTileOnPage(
7155
+ image: chunkPABSSYRA_js.canvasToJpegData(tile.canvas),
7156
+ placement: chunkPABSSYRA_js.placeTileOnPage(
7157
7157
  tile,
7158
7158
  tilesResult.fullWidth,
7159
7159
  tilesResult.fullHeight,
7160
- chunk3TPQY6WR_js.PDF_SLIDES_PAGE_WIDTH_PT,
7161
- chunk3TPQY6WR_js.PDF_SLIDES_PAGE_HEIGHT_PT
7160
+ chunkPABSSYRA_js.PDF_SLIDES_PAGE_WIDTH_PT,
7161
+ chunkPABSSYRA_js.PDF_SLIDES_PAGE_HEIGHT_PT
7162
7162
  )
7163
7163
  }));
7164
7164
  }
@@ -7185,8 +7185,8 @@ async function exportAllSlidesAsPdf(slideStageRef, totalSlides, setActiveSlide,
7185
7185
  if (pages.length === 0) {
7186
7186
  throw new Error(chunk3AJ54EAB_js.translationsEn["pptx.export.errorNoSlidesPdf"]);
7187
7187
  }
7188
- const pdfBlobUrl = chunk4CLG3TRU_js.buildPdfFromTiledImageData(pages);
7189
- chunk3TPQY6WR_js.downloadDataUrl(pdfBlobUrl, filename);
7188
+ const pdfBlobUrl = chunkNMSZ3NSG_js.buildPdfFromTiledImageData(pages);
7189
+ chunkPABSSYRA_js.downloadDataUrl(pdfBlobUrl, filename);
7190
7190
  }
7191
7191
  async function exportAllSlidesAsNotesPdf(slideStageRef, totalSlides, setActiveSlide, currentSlideIndex, slideNotes, filename = "presentation-notes.pdf", options = {}) {
7192
7192
  const { scale = 2, onProgress, signal } = options;
@@ -7215,8 +7215,8 @@ async function exportAllSlidesAsNotesPdf(slideStageRef, totalSlides, setActiveSl
7215
7215
  if (pages.length === 0) {
7216
7216
  throw new Error(chunk3AJ54EAB_js.translationsEn["pptx.export.errorNoSlidesNotesPdf"]);
7217
7217
  }
7218
- const pdfDataUrl = chunk4CLG3TRU_js.buildNotesPdf(pages);
7219
- chunk3TPQY6WR_js.downloadDataUrl(pdfDataUrl, filename);
7218
+ const pdfDataUrl = chunkNMSZ3NSG_js.buildNotesPdf(pages);
7219
+ chunkPABSSYRA_js.downloadDataUrl(pdfDataUrl, filename);
7220
7220
  }
7221
7221
 
7222
7222
  // src/viewer/utils/export-video.ts
@@ -7260,7 +7260,7 @@ async function exportAllSlidesAsVideo(slideStageRef, totalSlides, setActiveSlide
7260
7260
  const fps = 30;
7261
7261
  const stream = recordingCanvas.captureStream(fps);
7262
7262
  const recorder = new MediaRecorder(stream, {
7263
- mimeType: chunk3TPQY6WR_js.pickSupportedMimeType([...chunk3TPQY6WR_js.WEBM_MIME_CANDIDATES]),
7263
+ mimeType: chunkPABSSYRA_js.pickSupportedMimeType([...chunkPABSSYRA_js.WEBM_MIME_CANDIDATES]),
7264
7264
  videoBitsPerSecond: 5e6
7265
7265
  });
7266
7266
  const chunks = [];
@@ -7283,8 +7283,8 @@ async function exportAllSlidesAsVideo(slideStageRef, totalSlides, setActiveSlide
7283
7283
  const duration = slideTimingsMs?.[i] ?? slideDurationMs;
7284
7284
  ctx.clearRect(0, 0, recordingCanvas.width, recordingCanvas.height);
7285
7285
  ctx.drawImage(slideCanvases[i], 0, 0);
7286
- const frameInterval = chunk3TPQY6WR_js.fpsToFrameIntervalMs(fps);
7287
- const framesNeeded = chunk3TPQY6WR_js.segmentFrameCount(duration, fps);
7286
+ const frameInterval = chunkPABSSYRA_js.fpsToFrameIntervalMs(fps);
7287
+ const framesNeeded = chunkPABSSYRA_js.segmentFrameCount(duration, fps);
7288
7288
  for (let f = 0; f < framesNeeded; f++) {
7289
7289
  if (signal?.aborted) {
7290
7290
  recorder.stop();
@@ -7304,7 +7304,7 @@ async function exportAllSlidesAsVideo(slideStageRef, totalSlides, setActiveSlide
7304
7304
 
7305
7305
  // src/viewer/utils/export-gif.ts
7306
7306
  function frameFromCanvas(canvas, maxSide) {
7307
- const { width, height } = chunk3TPQY6WR_js.clampGifDimensions(canvas.width, canvas.height, maxSide);
7307
+ const { width, height } = chunkPABSSYRA_js.clampGifDimensions(canvas.width, canvas.height, maxSide);
7308
7308
  let source = canvas;
7309
7309
  if (width !== canvas.width || height !== canvas.height) {
7310
7310
  const scaled = canvas.ownerDocument.createElement("canvas");
@@ -7327,7 +7327,7 @@ async function exportAllSlidesAsGif(slideStageRef, totalSlides, setActiveSlide,
7327
7327
  const {
7328
7328
  scale = 0.5,
7329
7329
  slideDurationMs = 2e3,
7330
- maxSide = chunk3TPQY6WR_js.GIF_POST_CAPTURE_MAX_SIDE,
7330
+ maxSide = chunkPABSSYRA_js.GIF_POST_CAPTURE_MAX_SIDE,
7331
7331
  onProgress,
7332
7332
  signal
7333
7333
  } = options;
@@ -7354,7 +7354,7 @@ async function exportAllSlidesAsGif(slideStageRef, totalSlides, setActiveSlide,
7354
7354
  if (frames.length === 0) {
7355
7355
  throw new Error(chunk3AJ54EAB_js.translationsEn["pptx.export.errorNoSlidesGif"]);
7356
7356
  }
7357
- const gifBytes = chunk3TPQY6WR_js.encodeGif(frames, Math.round(slideDurationMs / 10));
7357
+ const gifBytes = chunkPABSSYRA_js.encodeGif(frames, Math.round(slideDurationMs / 10));
7358
7358
  onProgress?.(totalSlides, totalSlides);
7359
7359
  const buf = new ArrayBuffer(gifBytes.length);
7360
7360
  new Uint8Array(buf).set(gifBytes);
@@ -7408,7 +7408,7 @@ function exportAllSlidesToSvg(data, options = {}) {
7408
7408
  continue;
7409
7409
  }
7410
7410
  onProgress?.(processedCount, data.slides.length);
7411
- let svg = chunk3TPQY6WR_js.SvgExporter.exportSlide(slide, data.width, data.height, svgOptions);
7411
+ let svg = chunkPABSSYRA_js.SvgExporter.exportSlide(slide, data.width, data.height, svgOptions);
7412
7412
  if (embedFonts && fontFaces?.length) {
7413
7413
  svg = injectFontFaces(svg, fontFaces);
7414
7414
  }
@@ -7460,7 +7460,7 @@ function useExportMediaHandlers(input) {
7460
7460
  setExportProgress(0);
7461
7461
  setExportModalOpen(true);
7462
7462
  try {
7463
- const { scale } = chunk3TPQY6WR_js.resolveExportCaptureDecision(imageResolutionScale, "video");
7463
+ const { scale } = chunkPABSSYRA_js.resolveExportCaptureDecision(imageResolutionScale, "video");
7464
7464
  const blob = await exportAllSlidesAsVideo(
7465
7465
  canvasStageRef,
7466
7466
  slides.length,
@@ -7470,22 +7470,22 @@ function useExportMediaHandlers(input) {
7470
7470
  scale,
7471
7471
  slideDurationMs: 3e3,
7472
7472
  onProgress: (current, total) => {
7473
- setExportProgress(chunk3TPQY6WR_js.slideProgressPercent(current, total, 45));
7474
- setExportStatusMessage(chunk3TPQY6WR_js.slideStatusLabel("Capturing", current, total));
7473
+ setExportProgress(chunkPABSSYRA_js.slideProgressPercent(current, total, 45));
7474
+ setExportStatusMessage(chunkPABSSYRA_js.slideStatusLabel("Capturing", current, total));
7475
7475
  },
7476
7476
  onRecordProgress: (current, total) => {
7477
- setExportProgress(chunk3TPQY6WR_js.recordProgressPercent(current, total));
7478
- setExportStatusMessage(chunk3TPQY6WR_js.slideStatusLabel("Recording", current, total));
7477
+ setExportProgress(chunkPABSSYRA_js.recordProgressPercent(current, total));
7478
+ setExportStatusMessage(chunkPABSSYRA_js.slideStatusLabel("Recording", current, total));
7479
7479
  },
7480
7480
  signal: abortCtrl.signal
7481
7481
  }
7482
7482
  );
7483
- setExportProgress(chunk3TPQY6WR_js.EXPORT_ASSEMBLING_PERCENT);
7483
+ setExportProgress(chunkPABSSYRA_js.EXPORT_ASSEMBLING_PERCENT);
7484
7484
  setExportStatusMessage("Saving file...");
7485
- chunk3TPQY6WR_js.downloadBlob(blob, "presentation.webm");
7486
- setExportProgress(chunk3TPQY6WR_js.EXPORT_DONE_PERCENT);
7485
+ chunkPABSSYRA_js.downloadBlob(blob, "presentation.webm");
7486
+ setExportProgress(chunkPABSSYRA_js.EXPORT_DONE_PERCENT);
7487
7487
  } catch (err) {
7488
- if (!chunk3TPQY6WR_js.isExportAbortError(err)) {
7488
+ if (!chunkPABSSYRA_js.isExportAbortError(err)) {
7489
7489
  console.error("[PowerPointViewer] Video export failed:", err);
7490
7490
  }
7491
7491
  } finally {
@@ -7515,7 +7515,7 @@ function useExportMediaHandlers(input) {
7515
7515
  setExportProgress(0);
7516
7516
  setExportModalOpen(true);
7517
7517
  try {
7518
- const { scale, postCaptureMaxSide } = chunk3TPQY6WR_js.resolveExportCaptureDecision(
7518
+ const { scale, postCaptureMaxSide } = chunkPABSSYRA_js.resolveExportCaptureDecision(
7519
7519
  imageResolutionScale,
7520
7520
  "gif"
7521
7521
  );
@@ -7529,18 +7529,18 @@ function useExportMediaHandlers(input) {
7529
7529
  maxSide: postCaptureMaxSide,
7530
7530
  slideDurationMs: 2e3,
7531
7531
  onProgress: (current, total) => {
7532
- setExportProgress(chunk3TPQY6WR_js.slideProgressPercent(current, total));
7533
- setExportStatusMessage(chunk3TPQY6WR_js.slideStatusLabel("Encoding", current, total));
7532
+ setExportProgress(chunkPABSSYRA_js.slideProgressPercent(current, total));
7533
+ setExportStatusMessage(chunkPABSSYRA_js.slideStatusLabel("Encoding", current, total));
7534
7534
  },
7535
7535
  signal: abortCtrl.signal
7536
7536
  }
7537
7537
  );
7538
- setExportProgress(chunk3TPQY6WR_js.EXPORT_ASSEMBLING_PERCENT);
7538
+ setExportProgress(chunkPABSSYRA_js.EXPORT_ASSEMBLING_PERCENT);
7539
7539
  setExportStatusMessage("Saving file...");
7540
- chunk3TPQY6WR_js.downloadBlob(blob, "presentation.gif");
7541
- setExportProgress(chunk3TPQY6WR_js.EXPORT_DONE_PERCENT);
7540
+ chunkPABSSYRA_js.downloadBlob(blob, "presentation.gif");
7541
+ setExportProgress(chunkPABSSYRA_js.EXPORT_DONE_PERCENT);
7542
7542
  } catch (err) {
7543
- if (!chunk3TPQY6WR_js.isExportAbortError(err)) {
7543
+ if (!chunkPABSSYRA_js.isExportAbortError(err)) {
7544
7544
  console.error("[PowerPointViewer] GIF export failed:", err);
7545
7545
  }
7546
7546
  } finally {
@@ -7666,21 +7666,21 @@ function useExportHandlers(input) {
7666
7666
  {
7667
7667
  scale: imageExportScale,
7668
7668
  onProgress: (current, total) => {
7669
- setExportProgress(chunk3TPQY6WR_js.slideProgressPercent(current, total));
7670
- setExportStatusMessage(chunk3TPQY6WR_js.slideStatusLabel("Rendering", current, total));
7669
+ setExportProgress(chunkPABSSYRA_js.slideProgressPercent(current, total));
7670
+ setExportStatusMessage(chunkPABSSYRA_js.slideStatusLabel("Rendering", current, total));
7671
7671
  },
7672
7672
  signal: abortCtrl.signal
7673
7673
  }
7674
7674
  );
7675
- setExportProgress(chunk3TPQY6WR_js.EXPORT_ASSEMBLING_PERCENT);
7675
+ setExportProgress(chunkPABSSYRA_js.EXPORT_ASSEMBLING_PERCENT);
7676
7676
  setExportStatusMessage("Building PDF...");
7677
7677
  await new Promise((r) => {
7678
7678
  setTimeout(r, 100);
7679
7679
  });
7680
- setExportProgress(chunk3TPQY6WR_js.EXPORT_DONE_PERCENT);
7680
+ setExportProgress(chunkPABSSYRA_js.EXPORT_DONE_PERCENT);
7681
7681
  setExportStatusMessage("Done!");
7682
7682
  } catch (err) {
7683
- if (!chunk3TPQY6WR_js.isExportAbortError(err)) {
7683
+ if (!chunkPABSSYRA_js.isExportAbortError(err)) {
7684
7684
  console.error("[PowerPointViewer] PDF export failed:", err);
7685
7685
  }
7686
7686
  } finally {
@@ -7710,21 +7710,21 @@ function useExportHandlers(input) {
7710
7710
  {
7711
7711
  scale: imageExportScale,
7712
7712
  onProgress: (current, total) => {
7713
- setExportProgress(chunk3TPQY6WR_js.slideProgressPercent(current, total));
7714
- setExportStatusMessage(chunk3TPQY6WR_js.slideStatusLabel("Rendering", current, total));
7713
+ setExportProgress(chunkPABSSYRA_js.slideProgressPercent(current, total));
7714
+ setExportStatusMessage(chunkPABSSYRA_js.slideStatusLabel("Rendering", current, total));
7715
7715
  },
7716
7716
  signal: abortCtrl.signal
7717
7717
  }
7718
7718
  );
7719
- setExportProgress(chunk3TPQY6WR_js.EXPORT_ASSEMBLING_PERCENT);
7719
+ setExportProgress(chunkPABSSYRA_js.EXPORT_ASSEMBLING_PERCENT);
7720
7720
  setExportStatusMessage("Building PDF...");
7721
7721
  await new Promise((r) => {
7722
7722
  setTimeout(r, 100);
7723
7723
  });
7724
- setExportProgress(chunk3TPQY6WR_js.EXPORT_DONE_PERCENT);
7724
+ setExportProgress(chunkPABSSYRA_js.EXPORT_DONE_PERCENT);
7725
7725
  setExportStatusMessage("Done!");
7726
7726
  } catch (err) {
7727
- if (!chunk3TPQY6WR_js.isExportAbortError(err)) {
7727
+ if (!chunkPABSSYRA_js.isExportAbortError(err)) {
7728
7728
  console.error("[PowerPointViewer] Notes PDF export failed:", err);
7729
7729
  }
7730
7730
  } finally {
@@ -7772,7 +7772,7 @@ function useExportHandlers(input) {
7772
7772
  exportStatusMessage
7773
7773
  };
7774
7774
  }
7775
- var ViewerOptionsContext = react.createContext(chunk3TPQY6WR_js.DEFAULT_VIEWER_OPTIONS);
7775
+ var ViewerOptionsContext = react.createContext(chunkPABSSYRA_js.DEFAULT_VIEWER_OPTIONS);
7776
7776
  function useViewerOptionsContext() {
7777
7777
  return react.useContext(ViewerOptionsContext);
7778
7778
  }
@@ -7784,13 +7784,13 @@ function usePrintHandlers(input) {
7784
7784
  const { t } = reactI18next.useTranslation();
7785
7785
  const viewerOptions = useViewerOptionsContext();
7786
7786
  const includeHiddenSlides = viewerOptions.advanced.printHiddenSlides;
7787
- const printRasterScale = (viewerOptions.advanced.printHighQuality ? 4 : 3) * chunk3TPQY6WR_js.resolveImageResolutionScale(viewerOptions);
7787
+ const printRasterScale = (viewerOptions.advanced.printHighQuality ? 4 : 3) * chunkPABSSYRA_js.resolveImageResolutionScale(viewerOptions);
7788
7788
  const handlePrint = () => {
7789
7789
  setIsPrintDialogOpen(true);
7790
7790
  };
7791
7791
  const handlePrintSvg = async (settings) => {
7792
7792
  setIsPrintDialogOpen(false);
7793
- const printWindow = chunk3TPQY6WR_js.openPendingPrintWindow(t("pptx.print.preparingToPrint"));
7793
+ const printWindow = chunkPABSSYRA_js.openPendingPrintWindow(t("pptx.print.preparingToPrint"));
7794
7794
  if (!printWindow) {
7795
7795
  console.warn(
7796
7796
  "[PowerPointViewer] Print window was blocked by the browser. Allow popups for this site to print."
@@ -7800,9 +7800,9 @@ function usePrintHandlers(input) {
7800
7800
  if (!pptxData || settings.printWhat !== "slides") {
7801
7801
  return runRasterPrint(printWindow, settings);
7802
7802
  }
7803
- const colorFilter = chunk3TPQY6WR_js.computeColorFilter(settings.colorMode);
7804
- const slideIndices = chunk3TPQY6WR_js.filterHiddenSlideIndices(
7805
- chunk3TPQY6WR_js.computeSlideIndices(
7803
+ const colorFilter = chunkPABSSYRA_js.computeColorFilter(settings.colorMode);
7804
+ const slideIndices = chunkPABSSYRA_js.filterHiddenSlideIndices(
7805
+ chunkPABSSYRA_js.computeSlideIndices(
7806
7806
  settings.slideRange,
7807
7807
  activeSlideIndex,
7808
7808
  slides.length,
@@ -7820,22 +7820,22 @@ function usePrintHandlers(input) {
7820
7820
  printWindow.close();
7821
7821
  return;
7822
7822
  }
7823
- const printDoc = chunk3TPQY6WR_js.buildPrintDocument(svgs, pptxData.width, pptxData.height, {
7823
+ const printDoc = chunkPABSSYRA_js.buildPrintDocument(svgs, pptxData.width, pptxData.height, {
7824
7824
  title: "Slides (Vector)",
7825
7825
  orientation: settings.orientation,
7826
7826
  colorFilter,
7827
7827
  scaleToFit: settings.scaleToFit
7828
7828
  });
7829
- chunk3TPQY6WR_js.finishPrintWindow(printWindow, printDoc);
7829
+ chunkPABSSYRA_js.finishPrintWindow(printWindow, printDoc);
7830
7830
  } catch (err) {
7831
7831
  console.warn("[PowerPointViewer] SVG print path failed, falling back to raster:", err);
7832
7832
  return runRasterPrint(printWindow, settings);
7833
7833
  }
7834
7834
  };
7835
7835
  const runRasterPrint = async (printWindow, settings) => {
7836
- const colorFilter = chunk3TPQY6WR_js.computeColorFilter(settings.colorMode);
7837
- const slideIndices = chunk3TPQY6WR_js.filterHiddenSlideIndices(
7838
- chunk3TPQY6WR_js.computeSlideIndices(
7836
+ const colorFilter = chunkPABSSYRA_js.computeColorFilter(settings.colorMode);
7837
+ const slideIndices = chunkPABSSYRA_js.filterHiddenSlideIndices(
7838
+ chunkPABSSYRA_js.computeSlideIndices(
7839
7839
  settings.slideRange,
7840
7840
  activeSlideIndex,
7841
7841
  slides.length,
@@ -7846,11 +7846,11 @@ function usePrintHandlers(input) {
7846
7846
  includeHiddenSlides
7847
7847
  );
7848
7848
  if (settings.printWhat === "outline") {
7849
- chunk3TPQY6WR_js.finishPrintWindow(
7849
+ chunkPABSSYRA_js.finishPrintWindow(
7850
7850
  printWindow,
7851
- chunk3TPQY6WR_js.buildPrintHtmlDocument({
7851
+ chunkPABSSYRA_js.buildPrintHtmlDocument({
7852
7852
  title: "Outline",
7853
- bodyHtml: `<div class="outline-page">${chunk3TPQY6WR_js.buildOutlineHtml(slideIndices, slides)}</div>`,
7853
+ bodyHtml: `<div class="outline-page">${chunkPABSSYRA_js.buildOutlineHtml(slideIndices, slides)}</div>`,
7854
7854
  orientation: settings.orientation,
7855
7855
  colorFilter,
7856
7856
  frameSlides: settings.frameSlides,
@@ -7877,11 +7877,11 @@ function usePrintHandlers(input) {
7877
7877
  }
7878
7878
  const slideImages = slideIndices.map((idx) => allImages[idx]).filter(Boolean);
7879
7879
  if (settings.printWhat === "slides") {
7880
- chunk3TPQY6WR_js.finishPrintWindow(
7880
+ chunkPABSSYRA_js.finishPrintWindow(
7881
7881
  printWindow,
7882
- chunk3TPQY6WR_js.buildPrintHtmlDocument({
7882
+ chunkPABSSYRA_js.buildPrintHtmlDocument({
7883
7883
  title: "Slides",
7884
- bodyHtml: chunk3TPQY6WR_js.buildSlidesHtml(slideImages, slideIndices),
7884
+ bodyHtml: chunkPABSSYRA_js.buildSlidesHtml(slideImages, slideIndices),
7885
7885
  orientation: settings.orientation,
7886
7886
  colorFilter,
7887
7887
  frameSlides: settings.frameSlides,
@@ -7891,11 +7891,11 @@ function usePrintHandlers(input) {
7891
7891
  return;
7892
7892
  }
7893
7893
  if (settings.printWhat === "notes") {
7894
- chunk3TPQY6WR_js.finishPrintWindow(
7894
+ chunkPABSSYRA_js.finishPrintWindow(
7895
7895
  printWindow,
7896
- chunk3TPQY6WR_js.buildPrintHtmlDocument({
7896
+ chunkPABSSYRA_js.buildPrintHtmlDocument({
7897
7897
  title: "Notes Pages",
7898
- bodyHtml: chunk3TPQY6WR_js.buildNotesHtml(slideImages, slideIndices, slides),
7898
+ bodyHtml: chunkPABSSYRA_js.buildNotesHtml(slideImages, slideIndices, slides),
7899
7899
  orientation: "portrait",
7900
7900
  colorFilter,
7901
7901
  frameSlides: settings.frameSlides,
@@ -7906,11 +7906,11 @@ function usePrintHandlers(input) {
7906
7906
  }
7907
7907
  if (settings.printWhat === "handouts") {
7908
7908
  const spp = settings.slidesPerPage;
7909
- chunk3TPQY6WR_js.finishPrintWindow(
7909
+ chunkPABSSYRA_js.finishPrintWindow(
7910
7910
  printWindow,
7911
- chunk3TPQY6WR_js.buildPrintHtmlDocument({
7911
+ chunkPABSSYRA_js.buildPrintHtmlDocument({
7912
7912
  title: `Handout ${spp} per page`,
7913
- bodyHtml: chunk3TPQY6WR_js.buildHandoutsHtml(slideImages, slideIndices, spp, pptxData?.handoutMaster),
7913
+ bodyHtml: chunkPABSSYRA_js.buildHandoutsHtml(slideImages, slideIndices, spp, pptxData?.handoutMaster),
7914
7914
  orientation: "portrait",
7915
7915
  colorFilter,
7916
7916
  frameSlides: settings.frameSlides,
@@ -7924,7 +7924,7 @@ function usePrintHandlers(input) {
7924
7924
  };
7925
7925
  const handlePrintWithSettings = async (settings) => {
7926
7926
  setIsPrintDialogOpen(false);
7927
- const printWindow = chunk3TPQY6WR_js.openPendingPrintWindow(t("pptx.print.preparingToPrint"));
7927
+ const printWindow = chunkPABSSYRA_js.openPendingPrintWindow(t("pptx.print.preparingToPrint"));
7928
7928
  if (!printWindow) {
7929
7929
  console.warn(
7930
7930
  "[PowerPointViewer] Print window was blocked by the browser. Allow popups for this site to print."
@@ -7989,13 +7989,13 @@ function useThemeHandlers(input) {
7989
7989
  return;
7990
7990
  }
7991
7991
  await handler.updateThemeColorScheme(colorScheme);
7992
- const previousMap = theme?.colorScheme ? chunk3TPQY6WR_js.buildThemeColorMap(theme.colorScheme) : {};
7993
- setSlides((prev) => chunk3TPQY6WR_js.reResolveSlideColors(prev, previousMap, colorScheme));
7992
+ const previousMap = theme?.colorScheme ? chunkPABSSYRA_js.buildThemeColorMap(theme.colorScheme) : {};
7993
+ setSlides((prev) => chunkPABSSYRA_js.reResolveSlideColors(prev, previousMap, colorScheme));
7994
7994
  if (Object.keys(templateElementsBySlideId).length > 0) {
7995
7995
  setTemplateElementsBySlideId((prev) => {
7996
7996
  const next = {};
7997
7997
  for (const [slideId, elements] of Object.entries(prev)) {
7998
- next[slideId] = chunk3TPQY6WR_js.reResolveElementColors(elements, previousMap, colorScheme);
7998
+ next[slideId] = chunkPABSSYRA_js.reResolveElementColors(elements, previousMap, colorScheme);
7999
7999
  }
8000
8000
  return next;
8001
8001
  });
@@ -8104,7 +8104,7 @@ function useThemeSwitching(input) {
8104
8104
  }
8105
8105
  try {
8106
8106
  await handler.applyTheme(preset.colorScheme, preset.fontScheme, preset.name);
8107
- const newData = chunk3TPQY6WR_js.applyThemeToData(data, preset.colorScheme, preset.fontScheme, preset.name);
8107
+ const newData = chunkPABSSYRA_js.applyThemeToData(data, preset.colorScheme, preset.fontScheme, preset.name);
8108
8108
  onDataChange(newData);
8109
8109
  onThemeChanged?.(preset);
8110
8110
  } catch (error) {
@@ -8121,7 +8121,7 @@ function useThemeSwitching(input) {
8121
8121
  }
8122
8122
  try {
8123
8123
  await handler.applyTheme(colorScheme, fontScheme ?? {}, themeName);
8124
- const newData = chunk3TPQY6WR_js.applyThemeToData(data, colorScheme, fontScheme, themeName);
8124
+ const newData = chunkPABSSYRA_js.applyThemeToData(data, colorScheme, fontScheme, themeName);
8125
8125
  onDataChange(newData);
8126
8126
  } catch (error) {
8127
8127
  console.error("Failed to switch to custom theme:", error);
@@ -8133,12 +8133,12 @@ function useThemeSwitching(input) {
8133
8133
  if (!data?.theme?.colorScheme) {
8134
8134
  return void 0;
8135
8135
  }
8136
- return chunk3TPQY6WR_js.THEME_PRESETS.find(
8137
- (p) => chunk3TPQY6WR_js.themeColorSchemesEqual(data.theme?.colorScheme, p.colorScheme)
8136
+ return chunkPABSSYRA_js.THEME_PRESETS.find(
8137
+ (p) => chunkPABSSYRA_js.themeColorSchemesEqual(data.theme?.colorScheme, p.colorScheme)
8138
8138
  );
8139
8139
  }, [data?.theme?.colorScheme]);
8140
8140
  return {
8141
- presets: chunk3TPQY6WR_js.THEME_PRESETS,
8141
+ presets: chunkPABSSYRA_js.THEME_PRESETS,
8142
8142
  switchToPreset,
8143
8143
  switchToCustom,
8144
8144
  currentPreset
@@ -8213,7 +8213,7 @@ function usePropertyHandlers(input) {
8213
8213
  }
8214
8214
  try {
8215
8215
  const ab = await file.arrayBuffer();
8216
- const h = new chunk3TPQY6WR_js.PptxHandler();
8216
+ const h = new chunkPABSSYRA_js.PptxHandler();
8217
8217
  const other = await h.load(ab);
8218
8218
  if (!other) {
8219
8219
  return;
@@ -8223,7 +8223,7 @@ function usePropertyHandlers(input) {
8223
8223
  width: canvasSize.width,
8224
8224
  height: canvasSize.height
8225
8225
  };
8226
- setCompareResult(chunk3TPQY6WR_js.comparePresentation(cur, other));
8226
+ setCompareResult(chunkPABSSYRA_js.comparePresentation(cur, other));
8227
8227
  setIsComparePanelOpen(true);
8228
8228
  } catch (err) {
8229
8229
  console.warn("Compare failed:", err);
@@ -8240,7 +8240,7 @@ function usePropertyHandlers(input) {
8240
8240
  if (!diff || diff.status === "unchanged") {
8241
8241
  return;
8242
8242
  }
8243
- setSlides((prev) => chunk3TPQY6WR_js.applyAcceptSlide(prev, diff));
8243
+ setSlides((prev) => chunkPABSSYRA_js.applyAcceptSlide(prev, diff));
8244
8244
  setIsDirty(true);
8245
8245
  },
8246
8246
  [compareResult, setSlides, setIsDirty]
@@ -8251,10 +8251,10 @@ function usePropertyHandlers(input) {
8251
8251
  if (!compareResult) {
8252
8252
  return;
8253
8253
  }
8254
- setSlides((prev) => chunk3TPQY6WR_js.applyAcceptAllSlides(prev, compareResult));
8254
+ setSlides((prev) => chunkPABSSYRA_js.applyAcceptAllSlides(prev, compareResult));
8255
8255
  setIsDirty(true);
8256
8256
  }, [compareResult, setSlides, setIsDirty]);
8257
- const usedFontFamilies = react.useMemo(() => chunk3TPQY6WR_js.collectUsedFonts(slides), [slides]);
8257
+ const usedFontFamilies = react.useMemo(() => chunkPABSSYRA_js.collectUsedFonts(slides), [slides]);
8258
8258
  return {
8259
8259
  handleUpdateNotes,
8260
8260
  handleUpdateSlide,
@@ -8409,7 +8409,7 @@ function useViewerDialogs(input) {
8409
8409
  );
8410
8410
  const embeddedFontKey = (embeddedFontFamilies ?? []).join("\0");
8411
8411
  const fontEmbedding = react.useMemo(
8412
- () => chunk3TPQY6WR_js.describeFontEmbedding(embeddedFontKey ? embeddedFontKey.split("\0") : []),
8412
+ () => chunkPABSSYRA_js.describeFontEmbedding(embeddedFontKey ? embeddedFontKey.split("\0") : []),
8413
8413
  [embeddedFontKey]
8414
8414
  );
8415
8415
  const [embedFontsEnabled, setEmbedFontsEnabled] = react.useState(fontEmbedding.initialEnabled);
@@ -8419,11 +8419,11 @@ function useViewerDialogs(input) {
8419
8419
  setEmbedFontsEnabled(fontEmbedding.initialEnabled);
8420
8420
  }
8421
8421
  const [isNarrowViewport, setIsNarrowViewport] = react.useState(
8422
- () => typeof window !== "undefined" ? chunk3TPQY6WR_js.isMobileViewport(window.innerWidth, window.innerHeight, viewportIsTouch()) : false
8422
+ () => typeof window !== "undefined" ? chunkPABSSYRA_js.isMobileViewport(window.innerWidth, window.innerHeight, viewportIsTouch()) : false
8423
8423
  );
8424
8424
  react.useEffect(() => {
8425
8425
  const handleWindow = () => setIsNarrowViewport(
8426
- chunk3TPQY6WR_js.isMobileViewport(window.innerWidth, window.innerHeight, viewportIsTouch())
8426
+ chunkPABSSYRA_js.isMobileViewport(window.innerWidth, window.innerHeight, viewportIsTouch())
8427
8427
  );
8428
8428
  window.addEventListener("resize", handleWindow);
8429
8429
  return () => window.removeEventListener("resize", handleWindow);
@@ -8576,16 +8576,16 @@ function useViewerDialogs(input) {
8576
8576
  };
8577
8577
  }
8578
8578
  function computeGridSpacingPx2(documentGridSpacing) {
8579
- return chunk3TPQY6WR_js.computeGridSpacingPx(documentGridSpacing, chunk4CLG3TRU_js.GRID_SIZE);
8579
+ return chunkPABSSYRA_js.computeGridSpacingPx(documentGridSpacing, chunkNMSZ3NSG_js.GRID_SIZE);
8580
8580
  }
8581
8581
  function computeVisibleSlideIndexes(slides, activeCustomShowId, customShows, presentationProperties) {
8582
8582
  const activeShow = activeCustomShowId ? customShows.find((show) => show.id === activeCustomShowId) : void 0;
8583
- const authoredRange = chunk3TPQY6WR_js.resolveAuthoredSlideRange(presentationProperties, slides.length);
8584
- return chunk3TPQY6WR_js.resolveShowSlideIndexes(slides, activeShow, authoredRange);
8583
+ const authoredRange = chunkPABSSYRA_js.resolveAuthoredSlideRange(presentationProperties, slides.length);
8584
+ return chunkPABSSYRA_js.resolveShowSlideIndexes(slides, activeShow, authoredRange);
8585
8585
  }
8586
8586
  function computeSlideSectionGroups(slides, sections) {
8587
- return chunk3TPQY6WR_js.groupSlidesBySection(sections, slides).map((group) => ({
8588
- id: group.section?.id ?? (sections.length > 0 ? chunk4CLG3TRU_js.UNGROUPED_SECTION_ID : chunk4CLG3TRU_js.DEFAULT_SECTION_GROUP_ID),
8587
+ return chunkPABSSYRA_js.groupSlidesBySection(sections, slides).map((group) => ({
8588
+ id: group.section?.id ?? (sections.length > 0 ? chunkNMSZ3NSG_js.UNGROUPED_SECTION_ID : chunkNMSZ3NSG_js.DEFAULT_SECTION_GROUP_ID),
8589
8589
  label: group.section?.name ?? (sections.length > 0 ? "Ungrouped Slides" : "Slides"),
8590
8590
  slideIndexes: group.slideIndexes,
8591
8591
  ...group.section?.color !== void 0 ? { color: group.section.color } : {},
@@ -8597,7 +8597,7 @@ function computeMasterPseudoSlide(mode, activeLayout, activeMaster) {
8597
8597
  return void 0;
8598
8598
  }
8599
8599
  const document2 = activeLayout ? { slideMasters: [{ ...activeMaster, layouts: [activeLayout] }] } : { slideMasters: [activeMaster] };
8600
- return chunk3TPQY6WR_js.masterViewPseudoSlide(document2, {
8600
+ return chunkPABSSYRA_js.masterViewPseudoSlide(document2, {
8601
8601
  tab: "slides",
8602
8602
  masterIndex: 0,
8603
8603
  layoutIndex: activeLayout ? 0 : null
@@ -8625,15 +8625,15 @@ function useDerivedSlideState(input) {
8625
8625
  [slides, activeCustomShowId, customShows, presentationProperties]
8626
8626
  );
8627
8627
  const authoredRange = react.useMemo(
8628
- () => chunk3TPQY6WR_js.resolveAuthoredSlideRange(presentationProperties, slides.length),
8628
+ () => chunkPABSSYRA_js.resolveAuthoredSlideRange(presentationProperties, slides.length),
8629
8629
  [presentationProperties, slides.length]
8630
8630
  );
8631
8631
  const slideSectionGroups = react.useMemo(
8632
8632
  () => computeSlideSectionGroups(slides, sections).map((group) => {
8633
- if (group.id === chunk4CLG3TRU_js.UNGROUPED_SECTION_ID && group.label === "Ungrouped Slides") {
8633
+ if (group.id === chunkNMSZ3NSG_js.UNGROUPED_SECTION_ID && group.label === "Ungrouped Slides") {
8634
8634
  return { ...group, label: t("pptx.slides.ungroupedSlides") };
8635
8635
  }
8636
- if (group.id === chunk4CLG3TRU_js.DEFAULT_SECTION_GROUP_ID && group.label === "Slides") {
8636
+ if (group.id === chunkNMSZ3NSG_js.DEFAULT_SECTION_GROUP_ID && group.label === "Slides") {
8637
8637
  return { ...group, label: t("pptx.sections.slides") };
8638
8638
  }
8639
8639
  return group;
@@ -8734,13 +8734,13 @@ function useAnnotationHandlers(input) {
8734
8734
  }, [annotations, setMode, setSlides, history]);
8735
8735
  const handleSetMode = react.useCallback(
8736
8736
  (nextMode) => {
8737
- if (mode === "present" && nextMode !== "present" && !chunk3TPQY6WR_js.mayLeaveSlideShow()) {
8737
+ if (mode === "present" && nextMode !== "present" && !chunkPABSSYRA_js.mayLeaveSlideShow()) {
8738
8738
  return;
8739
8739
  }
8740
8740
  if (nextMode === "present") {
8741
8741
  presentation.enterPresentMode();
8742
8742
  } else if (mode === "present" && annotations.hasAnyAnnotations) {
8743
- chunk3TPQY6WR_js.stopAllPersistentAudio();
8743
+ chunkPABSSYRA_js.stopAllPersistentAudio();
8744
8744
  if (promptKeepInkAnnotations) {
8745
8745
  pendingModeAfterAnnotationsRef.current = nextMode;
8746
8746
  setShowKeepAnnotationsDialog(true);
@@ -8750,7 +8750,7 @@ function useAnnotationHandlers(input) {
8750
8750
  }
8751
8751
  } else {
8752
8752
  if (mode === "present") {
8753
- chunk3TPQY6WR_js.stopAllPersistentAudio();
8753
+ chunkPABSSYRA_js.stopAllPersistentAudio();
8754
8754
  }
8755
8755
  setMode(nextMode);
8756
8756
  }
@@ -8819,13 +8819,13 @@ function useSerialize(input) {
8819
8819
  let processedSlide = slide;
8820
8820
  if (pendingEditId) {
8821
8821
  const updatedElements = slide.elements.map((el) => {
8822
- if (el.id !== pendingEditId || !chunk3TPQY6WR_js.hasTextProperties(el)) {
8822
+ if (el.id !== pendingEditId || !chunkPABSSYRA_js.hasTextProperties(el)) {
8823
8823
  return el;
8824
8824
  }
8825
8825
  return {
8826
8826
  ...el,
8827
8827
  text: pendingEditText,
8828
- textSegments: chunk3TPQY6WR_js.remapTextToSegments(pendingEditText, el.textSegments, el.textStyle)
8828
+ textSegments: chunkPABSSYRA_js.remapTextToSegments(pendingEditText, el.textSegments, el.textStyle)
8829
8829
  };
8830
8830
  });
8831
8831
  if (updatedElements.some((el, i) => el !== slide.elements[i])) {
@@ -8838,19 +8838,19 @@ function useSerialize(input) {
8838
8838
  const pptxGuides = guides.map((g) => ({
8839
8839
  id: g.id,
8840
8840
  orientation: g.axis === "h" ? "horz" : "vert",
8841
- positionEmu: chunk3TPQY6WR_js.guidePxToEmu(g.position)
8841
+ positionEmu: chunkPABSSYRA_js.guidePxToEmu(g.position)
8842
8842
  }));
8843
8843
  return {
8844
8844
  ...processedSlide,
8845
8845
  guides: pptxGuides.length > 0 ? pptxGuides : void 0
8846
8846
  };
8847
8847
  });
8848
- const slidesToSave = chunk3TPQY6WR_js.buildSaveSlides(slidesWithGuides, templateElementsBySlideId);
8849
- const saveOptions = chunk3TPQY6WR_js.buildDeckSaveOptions({
8848
+ const slidesToSave = chunkPABSSYRA_js.buildSaveSlides(slidesWithGuides, templateElementsBySlideId);
8849
+ const saveOptions = chunkPABSSYRA_js.buildDeckSaveOptions({
8850
8850
  // Without this the Slide Size card edited a viewer-only pixel value and
8851
8851
  // the saved `p:sldSz` never moved: passing `slideSize` is the only way a
8852
8852
  // slide-size edit reaches the file.
8853
- slideSize: chunk3TPQY6WR_js.resolveSlideSizeSelection({ current: slideSizeEmu, canvas: canvasSize }).size,
8853
+ slideSize: chunkPABSSYRA_js.resolveSlideSizeSelection({ current: slideSizeEmu, canvas: canvasSize }).size,
8854
8854
  headerFooter,
8855
8855
  presentationProperties,
8856
8856
  viewProperties,
@@ -8869,7 +8869,7 @@ function useSerialize(input) {
8869
8869
  embedFonts,
8870
8870
  outputFormat: format
8871
8871
  });
8872
- return chunk3TPQY6WR_js.saveDeckWithPassword(handler, slidesToSave, saveOptions, { password, purpose });
8872
+ return chunkPABSSYRA_js.saveDeckWithPassword(handler, slidesToSave, saveOptions, { password, purpose });
8873
8873
  },
8874
8874
  [
8875
8875
  slides,
@@ -8910,7 +8910,7 @@ function useRecoveryDetection(input) {
8910
8910
  const onRestore = input.onRestore;
8911
8911
  const openVersionHistory = input.openVersionHistory;
8912
8912
  react.useEffect(() => {
8913
- if (!chunk3TPQY6WR_js.shouldProbeAutosaveRecovery({
8913
+ if (!chunkPABSSYRA_js.shouldProbeAutosaveRecovery({
8914
8914
  alreadyChecked: recoveryCheckedRef.current,
8915
8915
  filePath,
8916
8916
  loading,
@@ -8922,7 +8922,7 @@ function useRecoveryDetection(input) {
8922
8922
  }
8923
8923
  recoveryCheckedRef.current = true;
8924
8924
  void (async () => {
8925
- const offer = await chunk3TPQY6WR_js.probeAutosaveRecovery(filePath);
8925
+ const offer = await chunkPABSSYRA_js.probeAutosaveRecovery(filePath);
8926
8926
  if (!offer) {
8927
8927
  return;
8928
8928
  }
@@ -8935,7 +8935,7 @@ function useRecoveryDetection(input) {
8935
8935
  const record = recordRef.current;
8936
8936
  setPrompt(null);
8937
8937
  if (record && onRestore) {
8938
- onRestore(chunk3TPQY6WR_js.acceptAutosaveRecovery(record));
8938
+ onRestore(chunkPABSSYRA_js.acceptAutosaveRecovery(record));
8939
8939
  }
8940
8940
  recordRef.current = null;
8941
8941
  }, [onRestore]);
@@ -8944,7 +8944,7 @@ function useRecoveryDetection(input) {
8944
8944
  setPrompt(null);
8945
8945
  recordRef.current = null;
8946
8946
  if (record) {
8947
- void chunk3TPQY6WR_js.discardAutosaveRecovery(record);
8947
+ void chunkPABSSYRA_js.discardAutosaveRecovery(record);
8948
8948
  }
8949
8949
  }, []);
8950
8950
  return { prompt, restore, discard };
@@ -8995,11 +8995,11 @@ function usePresentationSetup(input) {
8995
8995
  containerRef,
8996
8996
  content,
8997
8997
  onSetMode: (nextMode) => {
8998
- if (mode === "present" && nextMode !== "present" && !chunk3TPQY6WR_js.mayLeaveSlideShow()) {
8998
+ if (mode === "present" && nextMode !== "present" && !chunkPABSSYRA_js.mayLeaveSlideShow()) {
8999
8999
  return;
9000
9000
  }
9001
9001
  if (mode === "present" && nextMode !== "present") {
9002
- chunk3TPQY6WR_js.stopAllPersistentAudio();
9002
+ chunkPABSSYRA_js.stopAllPersistentAudio();
9003
9003
  stopAnimationSound();
9004
9004
  const exitHandler = exitModeHandlerRef.current;
9005
9005
  if (exitHandler) {
@@ -9067,10 +9067,10 @@ function usePresentationSetup(input) {
9067
9067
  onToggleToolbar: () => annotations.setToolbarVisible(!annotations.toolbarVisible),
9068
9068
  onToggleSubtitles,
9069
9069
  onSaveRehearsalTimings: (timings) => {
9070
- setSlides((prev) => chunk3TPQY6WR_js.applyRehearsalTimings(prev, timings));
9070
+ setSlides((prev) => chunkPABSSYRA_js.applyRehearsalTimings(prev, timings));
9071
9071
  history.markDirty();
9072
9072
  },
9073
- loopContinuously: chunk3TPQY6WR_js.shouldLoopContinuously(presentationProperties),
9073
+ loopContinuously: chunkPABSSYRA_js.shouldLoopContinuously(presentationProperties),
9074
9074
  showWithAnimation: presentationProperties.showWithAnimation,
9075
9075
  useTimings: presentationProperties.advanceMode !== "manual",
9076
9076
  endWithBlackSlide,
@@ -9277,7 +9277,7 @@ function useEditorOperations(input) {
9277
9277
  const { formatPainterActive, setFormatPainterActive, elementLookup } = state;
9278
9278
  react.useEffect(() => {
9279
9279
  if (formatPainterActive && !prevFormatPainterRef.current && selectedElement) {
9280
- copiedFormatRef.current = chunk3TPQY6WR_js.copyFormatFromElement(selectedElement);
9280
+ copiedFormatRef.current = chunkPABSSYRA_js.copyFormatFromElement(selectedElement);
9281
9281
  } else if (!formatPainterActive) {
9282
9282
  copiedFormatRef.current = null;
9283
9283
  }
@@ -9303,12 +9303,12 @@ function useEditorOperations(input) {
9303
9303
  e.stopPropagation();
9304
9304
  const element = elementLookup.get(elementId);
9305
9305
  if (element) {
9306
- const updated = chunk3TPQY6WR_js.applyFormatToElement(element, copiedFormatRef.current);
9306
+ const updated = chunkPABSSYRA_js.applyFormatToElement(element, copiedFormatRef.current);
9307
9307
  const updates = {};
9308
- if (chunk3TPQY6WR_js.hasShapeProperties(updated)) {
9308
+ if (chunkPABSSYRA_js.hasShapeProperties(updated)) {
9309
9309
  updates.shapeStyle = updated.shapeStyle;
9310
9310
  }
9311
- if (chunk3TPQY6WR_js.hasTextProperties(updated)) {
9311
+ if (chunkPABSSYRA_js.hasTextProperties(updated)) {
9312
9312
  updates.textStyle = updated.textStyle;
9313
9313
  }
9314
9314
  ops.updateElementById(elementId, updates);
@@ -9494,10 +9494,10 @@ function useFontInjection({ embeddedFonts, slides }) {
9494
9494
  }
9495
9495
  };
9496
9496
  }, [embeddedFonts]);
9497
- const referencedFamilies = react.useMemo(() => chunk3TPQY6WR_js.collectReferencedFontFamilies(slides), [slides]);
9497
+ const referencedFamilies = react.useMemo(() => chunkPABSSYRA_js.collectReferencedFontFamilies(slides), [slides]);
9498
9498
  react.useEffect(() => {
9499
9499
  let cancelled = false;
9500
- void chunk3TPQY6WR_js.resolveGoogleWebfontHref(slides, embeddedFonts).then((href) => {
9500
+ void chunkPABSSYRA_js.resolveGoogleWebfontHref(slides, embeddedFonts).then((href) => {
9501
9501
  if (cancelled) {
9502
9502
  return null;
9503
9503
  }
@@ -9522,15 +9522,15 @@ function useFontInjection({ embeddedFonts, slides }) {
9522
9522
  const [, setOutlineFontsTick] = react.useState(0);
9523
9523
  react.useEffect(() => {
9524
9524
  let cancelled = false;
9525
- const referenced = chunk3TPQY6WR_js.collectReferencedFontFamilies(slides);
9526
- const candidates = chunk3TPQY6WR_js.selectGoogleWebfontFamilies(
9525
+ const referenced = chunkPABSSYRA_js.collectReferencedFontFamilies(slides);
9526
+ const candidates = chunkPABSSYRA_js.selectGoogleWebfontFamilies(
9527
9527
  referenced,
9528
9528
  embeddedFonts.map((font) => font.name)
9529
9529
  );
9530
9530
  if (candidates.length === 0) {
9531
9531
  return;
9532
9532
  }
9533
- void chunk3TPQY6WR_js.resolveGoogleWebfontHref(slides, embeddedFonts).then(async (href) => {
9533
+ void chunkPABSSYRA_js.resolveGoogleWebfontHref(slides, embeddedFonts).then(async (href) => {
9534
9534
  if (cancelled || !href) {
9535
9535
  return;
9536
9536
  }
@@ -9544,7 +9544,7 @@ function useFontInjection({ embeddedFonts, slides }) {
9544
9544
  if (cancelled) {
9545
9545
  return;
9546
9546
  }
9547
- const bytes = await chunk3TPQY6WR_js.fetchGoogleWebfontOutlineBytes(
9547
+ const bytes = await chunkPABSSYRA_js.fetchGoogleWebfontOutlineBytes(
9548
9548
  href,
9549
9549
  family,
9550
9550
  variant.bold,
@@ -9733,7 +9733,7 @@ function useKeyboardShortcuts(input) {
9733
9733
  inputRef.current = input;
9734
9734
  const handleKeyDown = react.useCallback((e) => {
9735
9735
  const current = inputRef.current;
9736
- const startAction = chunk3TPQY6WR_js.mapSlideShowStartKey(e, { isPresenting: current.mode === "present" });
9736
+ const startAction = chunkPABSSYRA_js.mapSlideShowStartKey(e, { isPresenting: current.mode === "present" });
9737
9737
  if (startAction !== null) {
9738
9738
  e.preventDefault();
9739
9739
  if (startAction === "fromBeginning") {
@@ -9743,7 +9743,7 @@ function useKeyboardShortcuts(input) {
9743
9743
  }
9744
9744
  return;
9745
9745
  }
9746
- const { action, dx, dy } = chunk3TPQY6WR_js.mapEditorKey(e, {
9746
+ const { action, dx, dy } = chunkPABSSYRA_js.mapEditorKey(e, {
9747
9747
  canEdit: current.canEdit,
9748
9748
  // The Slide Master view is an editing surface, not a viewing one.
9749
9749
  // Gating on `mode !== 'edit'` alone made `mapEditorKey` return
@@ -9756,7 +9756,7 @@ function useKeyboardShortcuts(input) {
9756
9756
  hasSelection: current.hasSelection,
9757
9757
  isEditingText: Boolean(current.inlineEditingElementId || current.tableEditorState?.isEditing),
9758
9758
  isDrawing: current.activeTool !== "select",
9759
- isTextInputTarget: chunk3TPQY6WR_js.isEditorTextInputTarget(e.target)
9759
+ isTextInputTarget: chunkPABSSYRA_js.isEditorTextInputTarget(e.target)
9760
9760
  });
9761
9761
  if (action === null) {
9762
9762
  return;
@@ -10088,7 +10088,7 @@ function useViewerIntegration(input) {
10088
10088
  return zoom.scale;
10089
10089
  },
10090
10090
  setZoom(level) {
10091
- zoom.setScale(chunk3TPQY6WR_js.clampZoomScale(level));
10091
+ zoom.setScale(chunkPABSSYRA_js.clampZoomScale(level));
10092
10092
  },
10093
10093
  zoomIn() {
10094
10094
  zoom.handleZoomIn();
@@ -10310,7 +10310,7 @@ function useReducedMotion() {
10310
10310
  }
10311
10311
  function useViewerOptions() {
10312
10312
  const storeRef = react.useRef(null);
10313
- storeRef.current ??= chunk3TPQY6WR_js.createViewerOptionsStore();
10313
+ storeRef.current ??= chunkPABSSYRA_js.createViewerOptionsStore();
10314
10314
  const store = storeRef.current;
10315
10315
  const options = react.useSyncExternalStore(
10316
10316
  (onStoreChange) => store.subscribe(onStoreChange),
@@ -10319,9 +10319,9 @@ function useViewerOptions() {
10319
10319
  );
10320
10320
  return { optionsStore: store, options };
10321
10321
  }
10322
- var KNOWN_TAB_IDS = new Set(chunk3TPQY6WR_js.TOOLBAR_TABS.map((tab) => tab.id));
10322
+ var KNOWN_TAB_IDS = new Set(chunkPABSSYRA_js.TOOLBAR_TABS.map((tab) => tab.id));
10323
10323
  function computeToolbarVisibility(hiddenActions, hiddenTabIds = []) {
10324
- const isHidden = (id) => chunk3TPQY6WR_js.isActionHidden(id, hiddenActions);
10324
+ const isHidden = (id) => chunkPABSSYRA_js.isActionHidden(id, hiddenActions);
10325
10325
  const userHidden = new Set(hiddenTabIds);
10326
10326
  userHidden.delete("file");
10327
10327
  const isTabVisible = (id) => !KNOWN_TAB_IDS.has(id) || !isHidden(id) && !userHidden.has(id);
@@ -10414,12 +10414,12 @@ function useYjsDocumentSync({
10414
10414
  return;
10415
10415
  }
10416
10416
  try {
10417
- const handler = new chunk3TPQY6WR_js.PptxHandler();
10417
+ const handler = new chunkPABSSYRA_js.PptxHandler();
10418
10418
  await handler.load(sourceBytes.buffer);
10419
- const currentSlides = chunk3TPQY6WR_js.readSlidesFromYDoc(
10419
+ const currentSlides = chunkPABSSYRA_js.readSlidesFromYDoc(
10420
10420
  doc
10421
10421
  );
10422
- const slidesToSave = chunk3TPQY6WR_js.buildSaveSlides(currentSlides, templateElementsBySlideId);
10422
+ const slidesToSave = chunkPABSSYRA_js.buildSaveSlides(currentSlides, templateElementsBySlideId);
10423
10423
  const bytes = await handler.save(slidesToSave, getSaveOptions?.());
10424
10424
  config.onWriteBack(bytes);
10425
10425
  } catch {
@@ -10434,10 +10434,10 @@ function useYjsDocumentSync({
10434
10434
  if (!doc || !isConnected) {
10435
10435
  return;
10436
10436
  }
10437
- const docSlides = chunk3TPQY6WR_js.readSlidesFromYDoc(
10437
+ const docSlides = chunkPABSSYRA_js.readSlidesFromYDoc(
10438
10438
  doc
10439
10439
  );
10440
- if (!chunk3TPQY6WR_js.shouldRoomSlidesReplaceLoad(loadOrigin, docSlides.length)) {
10440
+ if (!chunkPABSSYRA_js.shouldRoomSlidesReplaceLoad(loadOrigin, docSlides.length)) {
10441
10441
  return;
10442
10442
  }
10443
10443
  lastSyncedRef.current = JSON.stringify(docSlides);
@@ -10456,11 +10456,11 @@ function useYjsDocumentSync({
10456
10456
  lastSyncedRef.current = serialized;
10457
10457
  void (async () => {
10458
10458
  const factories = await getFactories();
10459
- chunk3TPQY6WR_js.reconcileSlidesInYDoc(
10459
+ chunkPABSSYRA_js.reconcileSlidesInYDoc(
10460
10460
  slides,
10461
10461
  doc,
10462
10462
  factories,
10463
- chunk3TPQY6WR_js.LOCAL_SYNC_ORIGIN
10463
+ chunkPABSSYRA_js.LOCAL_SYNC_ORIGIN
10464
10464
  );
10465
10465
  scheduleWriteBack();
10466
10466
  })();
@@ -10474,10 +10474,10 @@ function useYjsDocumentSync({
10474
10474
  return;
10475
10475
  }
10476
10476
  const handleChange = (_events, transaction) => {
10477
- if (transaction?.origin === chunk3TPQY6WR_js.LOCAL_SYNC_ORIGIN) {
10477
+ if (transaction?.origin === chunkPABSSYRA_js.LOCAL_SYNC_ORIGIN) {
10478
10478
  return;
10479
10479
  }
10480
- const remoteSlides = chunk3TPQY6WR_js.readSlidesFromYDoc(
10480
+ const remoteSlides = chunkPABSSYRA_js.readSlidesFromYDoc(
10481
10481
  doc
10482
10482
  );
10483
10483
  if (remoteSlides.length === 0) {
@@ -10493,7 +10493,7 @@ function useYjsDocumentSync({
10493
10493
  isApplyingRemoteRef.current = false;
10494
10494
  scheduleWriteBack();
10495
10495
  };
10496
- const unobserve = chunk3TPQY6WR_js.observeYDocSlides(
10496
+ const unobserve = chunkPABSSYRA_js.observeYDocSlides(
10497
10497
  doc,
10498
10498
  handleChange
10499
10499
  );
@@ -10531,7 +10531,7 @@ function useBroadcastFollower({
10531
10531
  if (!broadcaster) {
10532
10532
  return;
10533
10533
  }
10534
- if (!chunk3TPQY6WR_js.shouldAutoFollowBroadcaster({
10534
+ if (!chunkPABSSYRA_js.shouldAutoFollowBroadcaster({
10535
10535
  localRole: collab.config.role,
10536
10536
  broadcasterRole: broadcaster.role
10537
10537
  })) {
@@ -10689,7 +10689,7 @@ function useLayoutSwitching(input) {
10689
10689
  currentLayoutPath
10690
10690
  };
10691
10691
  }
10692
- var MIN_TOUCH_TARGET = chunk3TPQY6WR_js.MIN_TOUCH_TARGET_PX;
10692
+ var MIN_TOUCH_TARGET = chunkPABSSYRA_js.MIN_TOUCH_TARGET_PX;
10693
10693
  function subscribeTouchCapability(callback) {
10694
10694
  if (typeof window === "undefined") {
10695
10695
  return () => {
@@ -10702,7 +10702,7 @@ function subscribeTouchCapability(callback) {
10702
10702
  function useIsMobile() {
10703
10703
  const isTouchDevice = react.useSyncExternalStore(
10704
10704
  subscribeTouchCapability,
10705
- chunk3TPQY6WR_js.detectTouchDevice,
10705
+ chunkPABSSYRA_js.detectTouchDevice,
10706
10706
  () => false
10707
10707
  // server snapshot
10708
10708
  );
@@ -10712,7 +10712,7 @@ function useIsMobile() {
10712
10712
  const [viewportHeight, setViewportHeight] = react.useState(
10713
10713
  () => typeof window === "undefined" ? 768 : window.innerHeight
10714
10714
  );
10715
- const [orientation, setOrientation] = react.useState(chunk3TPQY6WR_js.detectOrientation);
10715
+ const [orientation, setOrientation] = react.useState(chunkPABSSYRA_js.detectOrientation);
10716
10716
  const [isVirtualKeyboardOpen, setIsVirtualKeyboardOpen] = react.useState(false);
10717
10717
  const [initialViewportHeight] = react.useState(
10718
10718
  () => typeof window !== "undefined" ? window.innerHeight : 800
@@ -10733,7 +10733,7 @@ function useIsMobile() {
10733
10733
  return;
10734
10734
  }
10735
10735
  const handleOrientationChange = () => {
10736
- setOrientation(chunk3TPQY6WR_js.detectOrientation());
10736
+ setOrientation(chunkPABSSYRA_js.detectOrientation());
10737
10737
  };
10738
10738
  if (screen.orientation) {
10739
10739
  screen.orientation.addEventListener("change", handleOrientationChange);
@@ -10763,7 +10763,7 @@ function useIsMobile() {
10763
10763
  window.addEventListener("resize", handleResize);
10764
10764
  return () => window.removeEventListener("resize", handleResize);
10765
10765
  }, [isTouchDevice, initialViewportHeight]);
10766
- const { isMobile, isTablet, isDesktop } = chunk3TPQY6WR_js.deriveViewportBreakpoints(
10766
+ const { isMobile, isTablet, isDesktop } = chunkPABSSYRA_js.deriveViewportBreakpoints(
10767
10767
  viewportWidth,
10768
10768
  viewportHeight,
10769
10769
  isTouchDevice
@@ -10796,10 +10796,10 @@ function useTouchGestures(input) {
10796
10796
  if (!el || !enabled) {
10797
10797
  return;
10798
10798
  }
10799
- const recognizer = chunk3TPQY6WR_js.createTouchGestureRecognizer({
10799
+ const recognizer = chunkPABSSYRA_js.createTouchGestureRecognizer({
10800
10800
  getScale: () => scaleRef.current,
10801
- minScale: chunk3TPQY6WR_js.MIN_ZOOM_SCALE,
10802
- maxScale: chunk3TPQY6WR_js.MAX_ZOOM_SCALE,
10801
+ minScale: chunkPABSSYRA_js.MIN_ZOOM_SCALE,
10802
+ maxScale: chunkPABSSYRA_js.MAX_ZOOM_SCALE,
10803
10803
  callbacks: {
10804
10804
  onPinchZoom: (newScale) => callbacksRef.current.onPinchZoom?.(newScale),
10805
10805
  onSwipe: (direction) => callbacksRef.current.onSwipe?.(direction),
@@ -10839,7 +10839,7 @@ function scrollFocusedIntoView(keyboardInset) {
10839
10839
  return;
10840
10840
  }
10841
10841
  const rect = active.getBoundingClientRect();
10842
- const delta = chunk3TPQY6WR_js.computeScrollDelta(
10842
+ const delta = chunkPABSSYRA_js.computeScrollDelta(
10843
10843
  { top: rect.top, bottom: rect.bottom },
10844
10844
  window.innerHeight,
10845
10845
  keyboardInset
@@ -10859,8 +10859,8 @@ function useKeyboardInsets(enabled = true) {
10859
10859
  return;
10860
10860
  }
10861
10861
  const update = () => {
10862
- const metrics = chunk3TPQY6WR_js.readViewportMetrics(window);
10863
- const inset = metrics ? chunk3TPQY6WR_js.computeKeyboardInset(metrics) : 0;
10862
+ const metrics = chunkPABSSYRA_js.readViewportMetrics(window);
10863
+ const inset = metrics ? chunkPABSSYRA_js.computeKeyboardInset(metrics) : 0;
10864
10864
  setKeyboardInset(inset);
10865
10865
  if (inset > 0) {
10866
10866
  window.requestAnimationFrame(() => scrollFocusedIntoView(inset));
@@ -10871,8 +10871,8 @@ function useKeyboardInsets(enabled = true) {
10871
10871
  vv.addEventListener("scroll", update);
10872
10872
  const onFocusIn = () => {
10873
10873
  window.requestAnimationFrame(() => {
10874
- const metrics = chunk3TPQY6WR_js.readViewportMetrics(window);
10875
- const inset = metrics ? chunk3TPQY6WR_js.computeKeyboardInset(metrics) : 0;
10874
+ const metrics = chunkPABSSYRA_js.readViewportMetrics(window);
10875
+ const inset = metrics ? chunkPABSSYRA_js.computeKeyboardInset(metrics) : 0;
10876
10876
  if (inset > 0) {
10877
10877
  scrollFocusedIntoView(inset);
10878
10878
  }
@@ -10885,7 +10885,7 @@ function useKeyboardInsets(enabled = true) {
10885
10885
  document.removeEventListener("focusin", onFocusIn);
10886
10886
  };
10887
10887
  }, [enabled]);
10888
- return { keyboardInset, isKeyboardOpen: chunk3TPQY6WR_js.isKeyboardOpen(keyboardInset) };
10888
+ return { keyboardInset, isKeyboardOpen: chunkPABSSYRA_js.isKeyboardOpen(keyboardInset) };
10889
10889
  }
10890
10890
 
10891
10891
  // src/viewer/hooks/useViewerBuildingBlocks-canvas-props.ts
@@ -10914,21 +10914,21 @@ function buildCanvasProps(input) {
10914
10914
  } = input;
10915
10915
  const effectiveSlide = mode === "master" ? masterPseudoSlide : activeSlide;
10916
10916
  const effectiveTemplateElements = mode === "master" ? s.activeLayout ? s.activeMaster?.elements ?? [] : [] : templateElements;
10917
- const fieldContext = chunk3TPQY6WR_js.buildFieldSubstitutionContext({
10917
+ const fieldContext = chunkPABSSYRA_js.buildFieldSubstitutionContext({
10918
10918
  headerFooter: s.headerFooter,
10919
10919
  customProperties: s.customProperties,
10920
10920
  slide: activeSlide
10921
10921
  });
10922
10922
  const tableStyleContext = s.theme || s.tableStyleMap ? { theme: s.theme, tableStyleMap: s.tableStyleMap } : void 0;
10923
10923
  const openExternalUrl = (url, target) => {
10924
- if (chunk3TPQY6WR_js.shouldConfirmExternalHyperlink(viewerOptions, url) && !window.confirm(buildHyperlinkConfirmMessage(url))) {
10924
+ if (chunkPABSSYRA_js.shouldConfirmExternalHyperlink(viewerOptions, url) && !window.confirm(buildHyperlinkConfirmMessage(url))) {
10925
10925
  return;
10926
10926
  }
10927
- chunk3TPQY6WR_js.safeOpenUrl(url, target);
10927
+ chunkPABSSYRA_js.safeOpenUrl(url, target);
10928
10928
  };
10929
10929
  const handleActionClick = (elementId, action) => {
10930
10930
  if (mode === "present") {
10931
- const resolved = chunk3TPQY6WR_js.resolvePresentationAction(action, { slideCount: slides.length });
10931
+ const resolved = chunkPABSSYRA_js.resolvePresentationAction(action, { slideCount: slides.length });
10932
10932
  if (resolved.intent.kind === "openUrl") {
10933
10933
  openExternalUrl(resolved.intent.url);
10934
10934
  return;
@@ -10939,9 +10939,9 @@ function buildCanvasProps(input) {
10939
10939
  }
10940
10940
  };
10941
10941
  const handleHyperlinkClick = (url, target) => {
10942
- if (chunk3TPQY6WR_js.isPpactionUrl(url)) {
10942
+ if (chunkPABSSYRA_js.isPpactionUrl(url)) {
10943
10943
  if (mode === "present") {
10944
- const parsed = chunk3TPQY6WR_js.parsePpactionUrl(url);
10944
+ const parsed = chunkPABSSYRA_js.parsePpactionUrl(url);
10945
10945
  if (parsed) {
10946
10946
  presentation.handlePresentationAction({
10947
10947
  action: parsed.action,
@@ -11047,7 +11047,7 @@ function buildCanvasProps(input) {
11047
11047
 
11048
11048
  // src/viewer/hooks/useScopedLayoutOptions.ts
11049
11049
  function scopeLayoutOptionsToActiveSlide(options, activeSlide) {
11050
- return chunk3TPQY6WR_js.scopeLayoutOptionsToSlide(options, activeSlide?.layoutPath);
11050
+ return chunkPABSSYRA_js.scopeLayoutOptionsToSlide(options, activeSlide?.layoutPath);
11051
11051
  }
11052
11052
 
11053
11053
  // src/viewer/hooks/useViewerBuildingBlocks-toolbar-handlers.ts
@@ -11060,7 +11060,7 @@ function buildToolbarAnimationHandlers(input) {
11060
11060
  const current = activeSlide.animations ?? [];
11061
11061
  if (group === "motionPath") {
11062
11062
  propertyHandlers.handleUpdateSlide({
11063
- animations: chunk3TPQY6WR_js.applyMotionPathPreset(current, selectedElement.id, preset)
11063
+ animations: chunkPABSSYRA_js.applyMotionPathPreset(current, selectedElement.id, preset)
11064
11064
  });
11065
11065
  return;
11066
11066
  }
@@ -11256,7 +11256,7 @@ function buildToolbarProps(input) {
11256
11256
  onOpenFile,
11257
11257
  onOpenRecentFile,
11258
11258
  onCreatePresentation: (templateId) => {
11259
- s.setSlides(chunk3TPQY6WR_js.createBackstagePresentation(templateId));
11259
+ s.setSlides(chunkPABSSYRA_js.createBackstagePresentation(templateId));
11260
11260
  s.setActiveSlideIndex(0);
11261
11261
  s.setSelectedElementId(null);
11262
11262
  s.setSelectedElementIds([]);
@@ -11286,7 +11286,7 @@ function buildToolbarProps(input) {
11286
11286
  loadLayoutPreviews: input.loadLayoutPreviews,
11287
11287
  onInsertSlideFromLayout: slideOps.handleInsertSlideFromLayout,
11288
11288
  onInsertSlideFromTemplate: slideOps.handleInsertSlideFromTemplate,
11289
- templateScheme: chunk3TPQY6WR_js.templateSchemeFromTheme(s.theme?.colorScheme),
11289
+ templateScheme: chunkPABSSYRA_js.templateSchemeFromTheme(s.theme?.colorScheme),
11290
11290
  customShows: s.customShows,
11291
11291
  activeCustomShowId: s.activeCustomShowId,
11292
11292
  onSetActiveCustomShowId: s.setActiveCustomShowId,
@@ -11327,7 +11327,7 @@ function buildToolbarProps(input) {
11327
11327
  isCommentsPanelOpen: s.isInspectorPaneOpen,
11328
11328
  slideCommentCount: activeSlide?.comments?.length ?? 0,
11329
11329
  formatPainterActive: s.formatPainterActive,
11330
- canActivateFormatPainter: chunk3TPQY6WR_js.hasCopyableFormat(selectedElement),
11330
+ canActivateFormatPainter: chunkPABSSYRA_js.hasCopyableFormat(selectedElement),
11331
11331
  onToggleFormatPainter: () => s.setFormatPainterActive((p) => !p),
11332
11332
  isSelectionPaneOpen: s.isSelectionPaneOpen,
11333
11333
  onToggleSelectionPane: () => s.setIsSelectionPaneOpen((p) => !p),
@@ -11405,7 +11405,7 @@ function useViewerBuildingBlocksCore(input) {
11405
11405
  headerFooter: state.headerFooter,
11406
11406
  loading,
11407
11407
  error,
11408
- maxHistoryEntries: chunk3TPQY6WR_js.resolveHistoryDepth(viewerOptions),
11408
+ maxHistoryEntries: chunkPABSSYRA_js.resolveHistoryDepth(viewerOptions),
11409
11409
  hasActivePointerInteraction,
11410
11410
  pointerCommitNonce: state.pointerCommitNonce,
11411
11411
  onDirty: markDocumentDirty,
@@ -11430,7 +11430,7 @@ function useViewerBuildingBlocksCore(input) {
11430
11430
  documentGridSpacing: state.viewProperties?.gridSpacing
11431
11431
  });
11432
11432
  const themeColorMap = react.useMemo(
11433
- () => state.theme?.colorScheme ? chunk3TPQY6WR_js.buildThemeColorMap(state.theme.colorScheme) : void 0,
11433
+ () => state.theme?.colorScheme ? chunkPABSSYRA_js.buildThemeColorMap(state.theme.colorScheme) : void 0,
11434
11434
  [state.theme?.colorScheme]
11435
11435
  );
11436
11436
  const { presentation, annotations, actionSoundHandlerRef, setExitModeHandler } = usePresentationSetup({
@@ -11479,8 +11479,8 @@ function useViewerBuildingBlocksCore(input) {
11479
11479
  gridSpacingPx,
11480
11480
  // Multiplied against the pre-existing 2x baseline; see the matching
11481
11481
  // comment in `PowerPointViewer.tsx`.
11482
- imageExportScale: 2 * chunk3TPQY6WR_js.resolveImageResolutionScale(viewerOptions),
11483
- imageResolutionScale: chunk3TPQY6WR_js.resolveImageResolutionScale(viewerOptions),
11482
+ imageExportScale: 2 * chunkPABSSYRA_js.resolveImageResolutionScale(viewerOptions),
11483
+ imageResolutionScale: chunkPABSSYRA_js.resolveImageResolutionScale(viewerOptions),
11484
11484
  viewerOptions
11485
11485
  };
11486
11486
  }
@@ -11496,7 +11496,7 @@ function useCompatibilityToastsState() {
11496
11496
  }
11497
11497
  function useReadOnlyRecommendationState(content) {
11498
11498
  const [recommendation, setRecommendation] = react.useState(
11499
- () => chunk3TPQY6WR_js.readOnlyRecommendation(void 0)
11499
+ () => chunkPABSSYRA_js.readOnlyRecommendation(void 0)
11500
11500
  );
11501
11501
  const [modifyVerifier, setModifyVerifier] = react.useState(void 0);
11502
11502
  const [bannerHidden, setBannerHidden] = react.useState(false);
@@ -11536,7 +11536,7 @@ function useReadOnlyRecommendationState(content) {
11536
11536
  async (password) => {
11537
11537
  setCheckingPassword(true);
11538
11538
  try {
11539
- const result = await chunk3TPQY6WR_js.checkModifyPassword(modifyVerifier, password);
11539
+ const result = await chunkPABSSYRA_js.checkModifyPassword(modifyVerifier, password);
11540
11540
  if (result.ok) {
11541
11541
  unlock();
11542
11542
  } else {
@@ -11581,9 +11581,9 @@ function useViewPreferencesSync(input) {
11581
11581
  setShowGuides
11582
11582
  } = input;
11583
11583
  react.useEffect(() => {
11584
- const seeded = chunk3TPQY6WR_js.viewerPreferencesFromViewProperties(
11584
+ const seeded = chunkPABSSYRA_js.viewerPreferencesFromViewProperties(
11585
11585
  { viewProperties },
11586
- { ...chunk3TPQY6WR_js.DEFAULT_VIEWER_PREFERENCES, snapToGrid, snapToObjects: snapToShape, showGuides }
11586
+ { ...chunkPABSSYRA_js.DEFAULT_VIEWER_PREFERENCES, snapToGrid, snapToObjects: snapToShape, showGuides }
11587
11587
  );
11588
11588
  setSnapToGrid(seeded.snapToGrid);
11589
11589
  setSnapToShape(seeded.snapToObjects ?? snapToShape);
@@ -11593,7 +11593,7 @@ function useViewPreferencesSync(input) {
11593
11593
  (prefsOverride) => {
11594
11594
  setViewProperties((prev) => {
11595
11595
  const merged = {
11596
- ...chunk3TPQY6WR_js.DEFAULT_VIEWER_PREFERENCES,
11596
+ ...chunkPABSSYRA_js.DEFAULT_VIEWER_PREFERENCES,
11597
11597
  snapToGrid,
11598
11598
  snapToObjects: snapToShape,
11599
11599
  showGuides,
@@ -11601,7 +11601,7 @@ function useViewPreferencesSync(input) {
11601
11601
  gridSpacingCy: prev?.gridSpacing?.cy,
11602
11602
  ...prefsOverride
11603
11603
  };
11604
- const patch = chunk3TPQY6WR_js.viewPropertiesPatchFromPreferences(merged);
11604
+ const patch = chunkPABSSYRA_js.viewPropertiesPatchFromPreferences(merged);
11605
11605
  return {
11606
11606
  ...prev,
11607
11607
  slideViewPr: { ...prev?.slideViewPr, ...patch.slideViewPr },
@@ -11822,7 +11822,7 @@ function useViewerBuildingBlocks(input) {
11822
11822
  }, [incomingContent]);
11823
11823
  const onOpenFile = react.useCallback(() => {
11824
11824
  void (async () => {
11825
- const picked = await chunk3TPQY6WR_js.openPptxFile();
11825
+ const picked = await chunkPABSSYRA_js.openPptxFile();
11826
11826
  if (picked) {
11827
11827
  setContent(picked.buffer);
11828
11828
  }
@@ -11830,7 +11830,7 @@ function useViewerBuildingBlocks(input) {
11830
11830
  }, []);
11831
11831
  const onOpenRecentFile = react.useCallback((key) => {
11832
11832
  void (async () => {
11833
- const bytes = await chunk3TPQY6WR_js.readBackstageRecentFile(key);
11833
+ const bytes = await chunkPABSSYRA_js.readBackstageRecentFile(key);
11834
11834
  if (bytes) {
11835
11835
  setContent(bytes);
11836
11836
  }