pptx-react-viewer 3.10.0 → 3.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (136) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/dist/{AiChatPanel-NSVSBJC7.js → AiChatPanel-A3ZMMVUA.js} +24 -24
  3. package/dist/AiChatPanel-A3ZMMVUA.js.br +0 -0
  4. package/dist/AiChatPanel-A3ZMMVUA.js.gz +0 -0
  5. package/dist/{AiChatPanel-BQSUE2OO.mjs → AiChatPanel-L5H455NZ.mjs} +3 -3
  6. package/dist/AiChatPanel-L5H455NZ.mjs.br +0 -0
  7. package/dist/AiChatPanel-L5H455NZ.mjs.gz +0 -0
  8. package/dist/{Area3DChartScene-2FQHPGNE.mjs → Area3DChartScene-OAD36KIX.mjs} +1 -1
  9. package/dist/{Area3DChartScene-2FQHPGNE.mjs.br → Area3DChartScene-OAD36KIX.mjs.br} +0 -0
  10. package/dist/Area3DChartScene-OAD36KIX.mjs.gz +0 -0
  11. package/dist/{Area3DChartScene-V3W2V7N5.js → Area3DChartScene-R2CKCYCB.js} +2 -2
  12. package/dist/{Area3DChartScene-V3W2V7N5.js.br → Area3DChartScene-R2CKCYCB.js.br} +0 -0
  13. package/dist/Area3DChartScene-R2CKCYCB.js.gz +0 -0
  14. package/dist/{Bar3DChartScene-55XMAUC7.js → Bar3DChartScene-CRRPMXGQ.js} +2 -2
  15. package/dist/Bar3DChartScene-CRRPMXGQ.js.br +0 -0
  16. package/dist/Bar3DChartScene-CRRPMXGQ.js.gz +0 -0
  17. package/dist/{Bar3DChartScene-PSJEVANA.mjs → Bar3DChartScene-XNNXF26T.mjs} +1 -1
  18. package/dist/{Bar3DChartScene-PSJEVANA.mjs.br → Bar3DChartScene-XNNXF26T.mjs.br} +0 -0
  19. package/dist/Bar3DChartScene-XNNXF26T.mjs.gz +0 -0
  20. package/dist/{Line3DChartScene-5KACYRSQ.js → Line3DChartScene-44PLZML2.js} +2 -2
  21. package/dist/Line3DChartScene-44PLZML2.js.br +0 -0
  22. package/dist/Line3DChartScene-44PLZML2.js.gz +0 -0
  23. package/dist/{Line3DChartScene-BUVNUFNO.mjs → Line3DChartScene-MNNPB3LZ.mjs} +1 -1
  24. package/dist/{Line3DChartScene-BUVNUFNO.mjs.br → Line3DChartScene-MNNPB3LZ.mjs.br} +0 -0
  25. package/dist/Line3DChartScene-MNNPB3LZ.mjs.gz +0 -0
  26. package/dist/{Model3DScene-REKMR2L6.mjs → Model3DScene-5MUREFLY.mjs} +1 -1
  27. package/dist/{Model3DScene-REKMR2L6.mjs.br → Model3DScene-5MUREFLY.mjs.br} +0 -0
  28. package/dist/Model3DScene-5MUREFLY.mjs.gz +0 -0
  29. package/dist/{Model3DScene-6U6TN36M.js → Model3DScene-RYPYQPJH.js} +2 -2
  30. package/dist/Model3DScene-RYPYQPJH.js.br +0 -0
  31. package/dist/Model3DScene-RYPYQPJH.js.gz +0 -0
  32. package/dist/{PieChart3DScene-MV3JF7EM.js → PieChart3DScene-GACYCSSQ.js} +2 -2
  33. package/dist/{PieChart3DScene-MV3JF7EM.js.br → PieChart3DScene-GACYCSSQ.js.br} +0 -0
  34. package/dist/PieChart3DScene-GACYCSSQ.js.gz +0 -0
  35. package/dist/{PieChart3DScene-4L2VVIUJ.mjs → PieChart3DScene-KYZSSG5X.mjs} +1 -1
  36. package/dist/PieChart3DScene-KYZSSG5X.mjs.br +0 -0
  37. package/dist/PieChart3DScene-KYZSSG5X.mjs.gz +0 -0
  38. package/dist/{SurfaceChart3DScene-SFIOK3G3.js → SurfaceChart3DScene-RI5G4BHS.js} +2 -2
  39. package/dist/{SurfaceChart3DScene-SFIOK3G3.js.br → SurfaceChart3DScene-RI5G4BHS.js.br} +0 -0
  40. package/dist/SurfaceChart3DScene-RI5G4BHS.js.gz +0 -0
  41. package/dist/{SurfaceChart3DScene-ARE7OBFI.mjs → SurfaceChart3DScene-ZUP4PRUZ.mjs} +1 -1
  42. package/dist/SurfaceChart3DScene-ZUP4PRUZ.mjs.br +0 -0
  43. package/dist/SurfaceChart3DScene-ZUP4PRUZ.mjs.gz +0 -0
  44. package/dist/{chunk-DZ3HWACD.js → chunk-4PL3GBSD.js} +1256 -1256
  45. package/dist/chunk-4PL3GBSD.js.br +0 -0
  46. package/dist/chunk-4PL3GBSD.js.gz +0 -0
  47. package/dist/{chunk-M6GIPAY4.mjs → chunk-5T4Y4QPV.mjs} +1 -1
  48. package/dist/chunk-5T4Y4QPV.mjs.br +0 -0
  49. package/dist/chunk-5T4Y4QPV.mjs.gz +0 -0
  50. package/dist/{chunk-UKPGYJ7G.mjs → chunk-6BNPHEEX.mjs} +998 -549
  51. package/dist/chunk-6BNPHEEX.mjs.br +0 -0
  52. package/dist/chunk-6BNPHEEX.mjs.gz +0 -0
  53. package/dist/{chunk-HYUPPQJW.js → chunk-BX4XVY5X.js} +5 -5
  54. package/dist/chunk-BX4XVY5X.js.br +0 -0
  55. package/dist/chunk-BX4XVY5X.js.gz +0 -0
  56. package/dist/{chunk-XW46A7DN.js → chunk-IK25LY4C.js} +167 -167
  57. package/dist/chunk-IK25LY4C.js.br +0 -0
  58. package/dist/chunk-IK25LY4C.js.gz +0 -0
  59. package/dist/{chunk-2Q2NFPXA.js → chunk-LY5535CF.js} +998 -549
  60. package/dist/chunk-LY5535CF.js.br +0 -0
  61. package/dist/chunk-LY5535CF.js.gz +0 -0
  62. package/dist/{chunk-FHOUTYMB.js → chunk-MRBHJ26I.js} +434 -434
  63. package/dist/chunk-MRBHJ26I.js.br +0 -0
  64. package/dist/chunk-MRBHJ26I.js.gz +0 -0
  65. package/dist/{chunk-KWHURCVT.mjs → chunk-N75WRHON.mjs} +12 -12
  66. package/dist/chunk-N75WRHON.mjs.br +0 -0
  67. package/dist/chunk-N75WRHON.mjs.gz +0 -0
  68. package/dist/{chunk-T4ZRSRQZ.mjs → chunk-SUEZMQRT.mjs} +1 -1
  69. package/dist/chunk-SUEZMQRT.mjs.br +0 -0
  70. package/dist/chunk-SUEZMQRT.mjs.gz +0 -0
  71. package/dist/{chunk-HJZA3O3S.mjs → chunk-VHFPZBUW.mjs} +2 -2
  72. package/dist/chunk-VHFPZBUW.mjs.br +0 -0
  73. package/dist/chunk-VHFPZBUW.mjs.gz +0 -0
  74. package/dist/index.d.ts +30 -17
  75. package/dist/index.js +45 -45
  76. package/dist/index.js.br +0 -0
  77. package/dist/index.js.gz +0 -0
  78. package/dist/index.mjs +5 -5
  79. package/dist/index.mjs.br +0 -0
  80. package/dist/index.mjs.gz +0 -0
  81. package/dist/internals.d.ts +30 -17
  82. package/dist/internals.js +78 -78
  83. package/dist/internals.js.br +0 -0
  84. package/dist/internals.js.gz +0 -0
  85. package/dist/internals.mjs +3 -3
  86. package/dist/internals.mjs.br +0 -0
  87. package/dist/internals.mjs.gz +0 -0
  88. package/dist/viewer/index.d.ts +30 -17
  89. package/dist/viewer/index.js +26 -26
  90. package/dist/viewer/index.js.br +0 -0
  91. package/dist/viewer/index.js.gz +0 -0
  92. package/dist/viewer/index.mjs +5 -5
  93. package/dist/viewer/index.mjs.br +0 -0
  94. package/dist/viewer/index.mjs.gz +0 -0
  95. package/package.json +2 -2
  96. package/dist/AiChatPanel-BQSUE2OO.mjs.br +0 -0
  97. package/dist/AiChatPanel-BQSUE2OO.mjs.gz +0 -0
  98. package/dist/AiChatPanel-NSVSBJC7.js.br +0 -0
  99. package/dist/AiChatPanel-NSVSBJC7.js.gz +0 -0
  100. package/dist/Area3DChartScene-2FQHPGNE.mjs.gz +0 -0
  101. package/dist/Area3DChartScene-V3W2V7N5.js.gz +0 -0
  102. package/dist/Bar3DChartScene-55XMAUC7.js.br +0 -0
  103. package/dist/Bar3DChartScene-55XMAUC7.js.gz +0 -0
  104. package/dist/Bar3DChartScene-PSJEVANA.mjs.gz +0 -0
  105. package/dist/Line3DChartScene-5KACYRSQ.js.br +0 -0
  106. package/dist/Line3DChartScene-5KACYRSQ.js.gz +0 -0
  107. package/dist/Line3DChartScene-BUVNUFNO.mjs.gz +0 -0
  108. package/dist/Model3DScene-6U6TN36M.js.br +0 -0
  109. package/dist/Model3DScene-6U6TN36M.js.gz +0 -0
  110. package/dist/Model3DScene-REKMR2L6.mjs.gz +0 -0
  111. package/dist/PieChart3DScene-4L2VVIUJ.mjs.br +0 -0
  112. package/dist/PieChart3DScene-4L2VVIUJ.mjs.gz +0 -0
  113. package/dist/PieChart3DScene-MV3JF7EM.js.gz +0 -0
  114. package/dist/SurfaceChart3DScene-ARE7OBFI.mjs.br +0 -0
  115. package/dist/SurfaceChart3DScene-ARE7OBFI.mjs.gz +0 -0
  116. package/dist/SurfaceChart3DScene-SFIOK3G3.js.gz +0 -0
  117. package/dist/chunk-2Q2NFPXA.js.br +0 -0
  118. package/dist/chunk-2Q2NFPXA.js.gz +0 -0
  119. package/dist/chunk-DZ3HWACD.js.br +0 -0
  120. package/dist/chunk-DZ3HWACD.js.gz +0 -0
  121. package/dist/chunk-FHOUTYMB.js.br +0 -0
  122. package/dist/chunk-FHOUTYMB.js.gz +0 -0
  123. package/dist/chunk-HJZA3O3S.mjs.br +0 -0
  124. package/dist/chunk-HJZA3O3S.mjs.gz +0 -0
  125. package/dist/chunk-HYUPPQJW.js.br +0 -0
  126. package/dist/chunk-HYUPPQJW.js.gz +0 -0
  127. package/dist/chunk-KWHURCVT.mjs.br +0 -0
  128. package/dist/chunk-KWHURCVT.mjs.gz +0 -0
  129. package/dist/chunk-M6GIPAY4.mjs.br +0 -0
  130. package/dist/chunk-M6GIPAY4.mjs.gz +0 -0
  131. package/dist/chunk-T4ZRSRQZ.mjs.br +0 -0
  132. package/dist/chunk-T4ZRSRQZ.mjs.gz +0 -0
  133. package/dist/chunk-UKPGYJ7G.mjs.br +0 -0
  134. package/dist/chunk-UKPGYJ7G.mjs.gz +0 -0
  135. package/dist/chunk-XW46A7DN.js.br +0 -0
  136. package/dist/chunk-XW46A7DN.js.gz +0 -0
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
- var chunkXW46A7DN_js = require('./chunk-XW46A7DN.js');
4
- var chunk2Q2NFPXA_js = require('./chunk-2Q2NFPXA.js');
3
+ var chunkIK25LY4C_js = require('./chunk-IK25LY4C.js');
4
+ var chunkLY5535CF_js = require('./chunk-LY5535CF.js');
5
5
  var chunkY6GG2OOW_js = require('./chunk-Y6GG2OOW.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 = chunk2Q2NFPXA_js.DEFAULT_VIRTUAL_OVERSCAN
12
+ overscan = chunkLY5535CF_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 = chunk2Q2NFPXA_js.computeVirtualRange(totalItems, itemHeight, scrollTop, viewportHeight, overscan);
42
+ const range = chunkLY5535CF_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 ??= chunk2Q2NFPXA_js.createPresenceProjector();
83
+ projectorRef.current ??= chunkLY5535CF_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 >= chunk2Q2NFPXA_js.BROADCAST_THROTTLE_MS) {
108
+ if (elapsed >= chunkLY5535CF_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
- }, chunk2Q2NFPXA_js.BROADCAST_THROTTLE_MS - elapsed);
118
+ }, chunkLY5535CF_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 = chunk2Q2NFPXA_js.createSyncGate(() => setSynced(true));
198
+ gateRef.current = chunkLY5535CF_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
- chunk2Q2NFPXA_js.clearLocalAwareness(provider.awareness);
218
+ chunkLY5535CF_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 = chunk2Q2NFPXA_js.validateRoomId(config.roomId);
243
+ const roomId = chunkLY5535CF_js.validateRoomId(config.roomId);
244
244
  const provider = new WebrtcProvider(roomId, yDoc, opts);
245
- departureRef.current = chunk2Q2NFPXA_js.createDepartureChannel(roomId, provider.awareness);
245
+ departureRef.current = chunkLY5535CF_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 = chunk2Q2NFPXA_js.validateRoomId(config.roomId);
288
- const transport = config.transport ?? chunk2Q2NFPXA_js.resolveTransportForServerUrl(config.serverUrl);
287
+ const roomId = chunkLY5535CF_js.validateRoomId(config.roomId);
288
+ const transport = config.transport ?? chunkLY5535CF_js.resolveTransportForServerUrl(config.serverUrl);
289
289
  if (transport === "webrtc") {
290
290
  await initWebrtc();
291
291
  return;
292
292
  }
293
- if (chunk2Q2NFPXA_js.isMixedContentBlocked(config.serverUrl)) {
293
+ if (chunkLY5535CF_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 = chunk2Q2NFPXA_js.createDepartureChannel(roomId, provider.awareness);
307
+ departureRef.current = chunkLY5535CF_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
- chunk2Q2NFPXA_js.clearLocalAwareness(provider.awareness);
347
+ chunkLY5535CF_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
- }, chunk2Q2NFPXA_js.CONNECTION_TIMEOUT_MS);
356
+ }, chunkLY5535CF_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
- chunk2Q2NFPXA_js.clearLocalAwareness(provider.awareness);
365
+ chunkLY5535CF_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 = chunk2Q2NFPXA_js.registerCollaborationTeardown({
391
+ const disposeTeardown = chunkLY5535CF_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 = chunk2Q2NFPXA_js.sanitizeColor(config?.userColor, "#6366f1");
412
+ const userColor = chunkLY5535CF_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(chunk2Q2NFPXA_js.cloneSlide),
531
- templateElementsBySlideId: chunk2Q2NFPXA_js.cloneTemplateElementsBySlideId(templateElementsBySlideId),
530
+ slides: slides.map(chunkLY5535CF_js.cloneSlide),
531
+ templateElementsBySlideId: chunkLY5535CF_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(chunk2Q2NFPXA_js.cloneSlide));
544
+ setSlides(snapshot.slides.map(chunkLY5535CF_js.cloneSlide));
545
545
  setTemplateElementsBySlideId(
546
- chunk2Q2NFPXA_js.cloneTemplateElementsBySlideId(snapshot.templateElementsBySlideId)
546
+ chunkLY5535CF_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 = chunkXW46A7DN_js.cloneHistorySnapshot(previousSnapshot);
586
- lastHistorySnapshotRef.current = chunkXW46A7DN_js.cloneHistorySnapshot(nextSnapshot);
585
+ const nextSnapshot = chunkIK25LY4C_js.cloneHistorySnapshot(previousSnapshot);
586
+ lastHistorySnapshotRef.current = chunkIK25LY4C_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 = chunkXW46A7DN_js.cloneHistorySnapshot(nextSnapshot);
608
- lastHistorySnapshotRef.current = chunkXW46A7DN_js.cloneHistorySnapshot(targetSnapshot);
607
+ const targetSnapshot = chunkIK25LY4C_js.cloneHistorySnapshot(nextSnapshot);
608
+ lastHistorySnapshotRef.current = chunkIK25LY4C_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 = chunkXW46A7DN_js.cloneHistorySnapshot(initialSnapshot);
626
+ const clonedInitial = chunkIK25LY4C_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 = chunkXW46A7DN_js.cloneHistorySnapshot(snapshot);
674
+ lastHistorySnapshotRef.current = chunkIK25LY4C_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(chunkXW46A7DN_js.cloneHistorySnapshot(previousSnapshot));
681
+ historyPastRef.current.push(chunkIK25LY4C_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 = chunkXW46A7DN_js.cloneHistorySnapshot(snapshot);
686
+ lastHistorySnapshotRef.current = chunkIK25LY4C_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(chunk2Q2NFPXA_js.createWheelStepBuffer());
746
+ const wheelBufferRef = react.useRef(chunkLY5535CF_js.createWheelStepBuffer());
747
747
  const storeRef = react.useRef(null);
748
- storeRef.current ??= chunk2Q2NFPXA_js.createViewerZoomStore();
748
+ storeRef.current ??= chunkLY5535CF_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 = chunk2Q2NFPXA_js.clampZoomScale(nextScale);
809
+ const boundedScale = chunkLY5535CF_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, chunkXW46A7DN_js.MIN_ELEMENT_SIZE));
847
- maxY = Math.max(maxY, element.y + Math.max(element.height, chunkXW46A7DN_js.MIN_ELEMENT_SIZE));
846
+ maxX = Math.max(maxX, element.x + Math.max(element.width, chunkIK25LY4C_js.MIN_ELEMENT_SIZE));
847
+ maxY = Math.max(maxY, element.y + Math.max(element.height, chunkIK25LY4C_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, chunkXW46A7DN_js.MIN_ELEMENT_SIZE);
854
- const boundsHeight = Math.max(selectionBounds.maxY - selectionBounds.minY, chunkXW46A7DN_js.MIN_ELEMENT_SIZE);
853
+ const boundsWidth = Math.max(selectionBounds.maxX - selectionBounds.minX, chunkIK25LY4C_js.MIN_ELEMENT_SIZE);
854
+ const boundsHeight = Math.max(selectionBounds.maxY - selectionBounds.minY, chunkIK25LY4C_js.MIN_ELEMENT_SIZE);
855
855
  const availableWidth = Math.max(
856
- effectiveEditorDimensions.width - chunkXW46A7DN_js.ZOOM_TO_SELECTION_PADDING,
857
- chunkXW46A7DN_js.MIN_ELEMENT_SIZE
856
+ effectiveEditorDimensions.width - chunkIK25LY4C_js.ZOOM_TO_SELECTION_PADDING,
857
+ chunkIK25LY4C_js.MIN_ELEMENT_SIZE
858
858
  );
859
859
  const availableHeight = Math.max(
860
- effectiveEditorDimensions.height - chunkXW46A7DN_js.ZOOM_TO_SELECTION_PADDING,
861
- chunkXW46A7DN_js.MIN_ELEMENT_SIZE
860
+ effectiveEditorDimensions.height - chunkIK25LY4C_js.ZOOM_TO_SELECTION_PADDING,
861
+ chunkIK25LY4C_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 = chunk2Q2NFPXA_js.clampZoomScale(targetEditorScale / safeFitScale);
868
+ const nextScale = chunkLY5535CF_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 = chunk2Q2NFPXA_js.mapEditingWheel(event, wheelBufferRef.current, true);
885
+ const mapped = chunkLY5535CF_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: chunk2Q2NFPXA_js.clampZoomScale(store.getState().zoom + mapped.deltaScale)
892
+ zoom: chunkLY5535CF_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
- chunk2Q2NFPXA_js.playGroup(controller, group, ctx);
988
- chunk2Q2NFPXA_js.scheduleAutoAdvanceChain(controller, ctx);
987
+ chunkLY5535CF_js.playGroup(controller, group, ctx);
988
+ chunkLY5535CF_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 = chunk2Q2NFPXA_js.computeEntranceAnimationDelay(animation.delayMs, animationIndex);
1007
+ const delay = chunkLY5535CF_js.computeEntranceAnimationDelay(animation.delayMs, animationIndex);
1008
1008
  const timer = window.setTimeout(() => {
1009
1009
  setPresentationAnimations(
1010
1010
  (previousAnimations) => previousAnimations.map(
@@ -1030,7 +1030,7 @@ function useAnimationPlayback(input) {
1030
1030
  const presentationTimersRef = react.useRef([]);
1031
1031
  const controllerRef = react.useRef(null);
1032
1032
  const buildRafRef = react.useRef(null);
1033
- const activeAnimationGroupRef = react.useRef(chunk2Q2NFPXA_js.createActiveAnimationGroup());
1033
+ const activeAnimationGroupRef = react.useRef(chunkLY5535CF_js.createActiveAnimationGroup());
1034
1034
  const seededCompletedRef = react.useRef(false);
1035
1035
  const mediaTimeNodeElementIdsRef = react.useRef(/* @__PURE__ */ new Map());
1036
1036
  const lastSeedCompletedRef = react.useRef(false);
@@ -1047,15 +1047,15 @@ function useAnimationPlayback(input) {
1047
1047
  }, [onPlayActionSound]);
1048
1048
  react.useEffect(() => {
1049
1049
  return () => {
1050
- chunk2Q2NFPXA_js.cancelBuildReveal(buildRafRef);
1050
+ chunkLY5535CF_js.cancelBuildReveal(buildRafRef);
1051
1051
  };
1052
1052
  }, []);
1053
1053
  const clearPresentationTimers = react.useCallback(() => {
1054
- chunk2Q2NFPXA_js.clearPlaybackTimers(buildPlaybackContext(), activeAnimationGroupRef.current);
1054
+ chunkLY5535CF_js.clearPlaybackTimers(buildPlaybackContext(), activeAnimationGroupRef.current);
1055
1055
  }, [buildPlaybackContext]);
1056
1056
  const resetSlideTimeline = react.useCallback(
1057
1057
  (slideIndex) => {
1058
- chunk2Q2NFPXA_js.cancelBuildReveal(buildRafRef);
1058
+ chunkLY5535CF_js.cancelBuildReveal(buildRafRef);
1059
1059
  const slide = slides[slideIndex];
1060
1060
  if (!slide) {
1061
1061
  controllerRef.current = null;
@@ -1066,13 +1066,13 @@ function useAnimationPlayback(input) {
1066
1066
  setHoverTriggerShapeIds(/* @__PURE__ */ new Set());
1067
1067
  return;
1068
1068
  }
1069
- const controller = chunk2Q2NFPXA_js.PresentationAnimationController.fromSlide(slide, {
1069
+ const controller = chunkLY5535CF_js.PresentationAnimationController.fromSlide(slide, {
1070
1070
  slideHeightPx: canvasSize?.height,
1071
1071
  slideWidthPx: canvasSize?.width,
1072
1072
  themeColorMap
1073
1073
  });
1074
1074
  controllerRef.current = controller;
1075
- mediaTimeNodeElementIdsRef.current = chunk2Q2NFPXA_js.resolveMediaTimeNodeElementIds(
1075
+ mediaTimeNodeElementIdsRef.current = chunkLY5535CF_js.resolveMediaTimeNodeElementIds(
1076
1076
  slide.nativeAnimations ?? []
1077
1077
  );
1078
1078
  setPresentationKeyframesCss(controller.keyframesCss);
@@ -1086,7 +1086,7 @@ function useAnimationPlayback(input) {
1086
1086
  if (!animationsEnabled) {
1087
1087
  return false;
1088
1088
  }
1089
- return chunk2Q2NFPXA_js.advanceMainSequence(
1089
+ return chunkLY5535CF_js.advanceMainSequence(
1090
1090
  controllerRef.current,
1091
1091
  buildPlaybackContext(),
1092
1092
  activeAnimationGroupRef.current
@@ -1102,7 +1102,7 @@ function useAnimationPlayback(input) {
1102
1102
  if (!group) {
1103
1103
  return false;
1104
1104
  }
1105
- chunk2Q2NFPXA_js.playGroup(controller, group, buildPlaybackContext());
1105
+ chunkLY5535CF_js.playGroup(controller, group, buildPlaybackContext());
1106
1106
  return true;
1107
1107
  },
1108
1108
  [buildPlaybackContext]
@@ -1121,7 +1121,7 @@ function useAnimationPlayback(input) {
1121
1121
  if (!group) {
1122
1122
  return false;
1123
1123
  }
1124
- chunk2Q2NFPXA_js.playGroup(controller, group, buildPlaybackContext());
1124
+ chunkLY5535CF_js.playGroup(controller, group, buildPlaybackContext());
1125
1125
  return true;
1126
1126
  },
1127
1127
  [animationsEnabled, buildPlaybackContext]
@@ -1202,12 +1202,12 @@ function useAnimationPlayback(input) {
1202
1202
  presentationTimersRef
1203
1203
  };
1204
1204
  }
1205
- var PRESENTER_CHANNEL_NAME = chunk2Q2NFPXA_js.PRESENTATION_CHANNEL_NAME;
1206
- var AUDIENCE_HASH = chunk2Q2NFPXA_js.PRESENTATION_HASH;
1207
- var PRESENTER_MSG_ORIGIN = chunk2Q2NFPXA_js.PRESENTATION_MESSAGE_ORIGIN;
1208
- var AUDIENCE_NONCE_KEY = chunk2Q2NFPXA_js.PRESENTATION_NONCE_KEY;
1205
+ var PRESENTER_CHANNEL_NAME = chunkLY5535CF_js.PRESENTATION_CHANNEL_NAME;
1206
+ var AUDIENCE_HASH = chunkLY5535CF_js.PRESENTATION_HASH;
1207
+ var PRESENTER_MSG_ORIGIN = chunkLY5535CF_js.PRESENTATION_MESSAGE_ORIGIN;
1208
+ var AUDIENCE_NONCE_KEY = chunkLY5535CF_js.PRESENTATION_NONCE_KEY;
1209
1209
  function generateSessionId() {
1210
- return chunk2Q2NFPXA_js.createPresentationSessionId();
1210
+ return chunkLY5535CF_js.createPresentationSessionId();
1211
1211
  }
1212
1212
  function parseAudienceNonce() {
1213
1213
  const hash = window.location.hash;
@@ -1243,7 +1243,7 @@ function usePresenterWindow(input) {
1243
1243
  }, []);
1244
1244
  const swapDisplays = react.useCallback(async () => {
1245
1245
  const audience = audienceWindowRef.current;
1246
- return audience && !audience.closed ? chunk2Q2NFPXA_js.swapPresentationWindows(window, audience) : false;
1246
+ return audience && !audience.closed ? chunkLY5535CF_js.swapPresentationWindows(window, audience) : false;
1247
1247
  }, []);
1248
1248
  const syncSlideToAudience = react.useCallback(
1249
1249
  (slideIndex) => {
@@ -1307,7 +1307,7 @@ function usePresenterWindow(input) {
1307
1307
  pollTimerRef.current = null;
1308
1308
  }
1309
1309
  if (closingSessionId) {
1310
- void chunk2Q2NFPXA_js.clearAudienceContent(closingSessionId);
1310
+ void chunkLY5535CF_js.clearAudienceContent(closingSessionId);
1311
1311
  }
1312
1312
  }, [getChannel]);
1313
1313
  const openAudienceWindow = react.useCallback(() => {
@@ -1325,10 +1325,10 @@ function usePresenterWindow(input) {
1325
1325
  audienceWindowRef.current = blankWin;
1326
1326
  const sessionId = generateSessionId();
1327
1327
  sessionIdRef.current = sessionId;
1328
- const audienceUrl = chunk2Q2NFPXA_js.buildPresentationAudienceUrl(window.location.href, sessionId);
1329
- void chunk2Q2NFPXA_js.resolveAudienceScreenPlacement(window).then((placement) => {
1328
+ const audienceUrl = chunkLY5535CF_js.buildPresentationAudienceUrl(window.location.href, sessionId);
1329
+ void chunkLY5535CF_js.resolveAudienceScreenPlacement(window).then((placement) => {
1330
1330
  if (placement && audienceWindowRef.current === blankWin && !blankWin.closed) {
1331
- chunk2Q2NFPXA_js.placeAudienceWindow(blankWin, placement);
1331
+ chunkLY5535CF_js.placeAudienceWindow(blankWin, placement);
1332
1332
  }
1333
1333
  return void 0;
1334
1334
  });
@@ -1358,7 +1358,7 @@ function usePresenterWindow(input) {
1358
1358
  }
1359
1359
  };
1360
1360
  if (content) {
1361
- void chunk2Q2NFPXA_js.storeAudienceContent(content, sessionId).then(() => navigateOrClose(true)).catch(() => navigateOrClose(false));
1361
+ void chunkLY5535CF_js.storeAudienceContent(content, sessionId).then(() => navigateOrClose(true)).catch(() => navigateOrClose(false));
1362
1362
  } else {
1363
1363
  navigateOrClose(true);
1364
1364
  }
@@ -1384,7 +1384,7 @@ function usePresenterWindow(input) {
1384
1384
  }
1385
1385
  const handleMessage = (event) => {
1386
1386
  const message = event.data;
1387
- if (chunk2Q2NFPXA_js.isPresentationSessionMessage(message) && message.type === "audience-ready" && message.sessionId === sessionIdRef.current) {
1387
+ if (chunkLY5535CF_js.isPresentationSessionMessage(message) && message.type === "audience-ready" && message.sessionId === sessionIdRef.current) {
1388
1388
  syncStateToAudience(snapshotRef.current);
1389
1389
  }
1390
1390
  };
@@ -1413,7 +1413,7 @@ function usePresenterWindow(input) {
1413
1413
  react.useEffect(() => {
1414
1414
  const handleBeforeUnload = () => {
1415
1415
  if (sessionIdRef.current) {
1416
- void chunk2Q2NFPXA_js.clearAudienceContent(sessionIdRef.current);
1416
+ void chunkLY5535CF_js.clearAudienceContent(sessionIdRef.current);
1417
1417
  }
1418
1418
  };
1419
1419
  window.addEventListener("beforeunload", handleBeforeUnload);
@@ -1475,7 +1475,7 @@ function useAudienceMode(input) {
1475
1475
  }
1476
1476
  channel.onmessage = (event) => {
1477
1477
  const data = event.data;
1478
- if (!chunk2Q2NFPXA_js.isPresentationSessionMessage(data) || data.origin !== PRESENTER_MSG_ORIGIN) {
1478
+ if (!chunkLY5535CF_js.isPresentationSessionMessage(data) || data.origin !== PRESENTER_MSG_ORIGIN) {
1479
1479
  return;
1480
1480
  }
1481
1481
  if (expectedSessionId && data.sessionId !== expectedSessionId) {
@@ -1491,16 +1491,16 @@ function useAudienceMode(input) {
1491
1491
  }
1492
1492
  if (data.type === "presenter-exit") {
1493
1493
  if (expectedSessionId) {
1494
- void chunk2Q2NFPXA_js.clearAudienceContent(expectedSessionId);
1494
+ void chunkLY5535CF_js.clearAudienceContent(expectedSessionId);
1495
1495
  }
1496
- if (chunk2Q2NFPXA_js.endAudienceDisplay(window)) {
1496
+ if (chunkLY5535CF_js.endAudienceDisplay(window)) {
1497
1497
  handlers.onPresenterEnded?.();
1498
1498
  }
1499
1499
  }
1500
1500
  };
1501
1501
  if (expectedSessionId) {
1502
1502
  channel.postMessage({
1503
- origin: chunk2Q2NFPXA_js.PRESENTATION_MESSAGE_ORIGIN,
1503
+ origin: chunkLY5535CF_js.PRESENTATION_MESSAGE_ORIGIN,
1504
1504
  type: "audience-ready",
1505
1505
  sessionId: expectedSessionId
1506
1506
  });
@@ -1514,7 +1514,7 @@ function useAudienceMode(input) {
1514
1514
  }, []);
1515
1515
  }
1516
1516
  function usePresentationKeyboard(input) {
1517
- const wheelBufferRef = react.useRef(chunk2Q2NFPXA_js.createWheelStepBuffer());
1517
+ const wheelBufferRef = react.useRef(chunkLY5535CF_js.createWheelStepBuffer());
1518
1518
  const {
1519
1519
  mode,
1520
1520
  movePresentationSlide,
@@ -1535,14 +1535,14 @@ function usePresentationKeyboard(input) {
1535
1535
  presentationSlideIndex,
1536
1536
  setShowRehearsalSummary
1537
1537
  } = input;
1538
- const keyBufferRef = react.useRef(chunk2Q2NFPXA_js.createPresentationKeyBuffer());
1538
+ const keyBufferRef = react.useRef(chunkLY5535CF_js.createPresentationKeyBuffer());
1539
1539
  react.useEffect(() => {
1540
- if (mode !== "present" || !chunk2Q2NFPXA_js.acceptsPresentationInput()) {
1541
- keyBufferRef.current = chunk2Q2NFPXA_js.createPresentationKeyBuffer();
1540
+ if (mode !== "present" || !chunkLY5535CF_js.acceptsPresentationInput()) {
1541
+ keyBufferRef.current = chunkLY5535CF_js.createPresentationKeyBuffer();
1542
1542
  return;
1543
1543
  }
1544
1544
  const handleKeyDown = (event) => {
1545
- const mapped = chunk2Q2NFPXA_js.mapPresentationKey(event, keyBufferRef.current);
1545
+ const mapped = chunkLY5535CF_js.mapPresentationKey(event, keyBufferRef.current);
1546
1546
  if (mapped.action === "none") {
1547
1547
  return;
1548
1548
  }
@@ -1562,12 +1562,12 @@ function usePresentationKeyboard(input) {
1562
1562
  movePresentationSlide(-1);
1563
1563
  return;
1564
1564
  case "first": {
1565
- const first = chunk2Q2NFPXA_js.firstShowSlideIndex(showSlideIndexes);
1565
+ const first = chunkLY5535CF_js.firstShowSlideIndex(showSlideIndexes);
1566
1566
  navigateToSlide(first ?? 0);
1567
1567
  return;
1568
1568
  }
1569
1569
  case "last": {
1570
- const last = chunk2Q2NFPXA_js.lastShowSlideIndex(showSlideIndexes);
1570
+ const last = chunkLY5535CF_js.lastShowSlideIndex(showSlideIndexes);
1571
1571
  navigateToSlide(last ?? Math.max(0, slideCount - 1));
1572
1572
  return;
1573
1573
  }
@@ -1605,10 +1605,10 @@ function usePresentationKeyboard(input) {
1605
1605
  }
1606
1606
  };
1607
1607
  const handleWheel = (event) => {
1608
- if (mode !== "present" || !chunk2Q2NFPXA_js.acceptsPresentationInput()) {
1608
+ if (mode !== "present" || !chunkLY5535CF_js.acceptsPresentationInput()) {
1609
1609
  return;
1610
1610
  }
1611
- const mapped = chunk2Q2NFPXA_js.mapPresentationWheel(event, wheelBufferRef.current);
1611
+ const mapped = chunkLY5535CF_js.mapPresentationWheel(event, wheelBufferRef.current);
1612
1612
  if (mapped.intent === "next-slide") {
1613
1613
  event.preventDefault();
1614
1614
  movePresentationSlide(1);
@@ -1741,7 +1741,7 @@ function useRehearsalTimings(input) {
1741
1741
 
1742
1742
  // src/viewer/hooks/presentation-mode/presentation-actions.ts
1743
1743
  function handlePresentationActionImpl(action, deps) {
1744
- chunk2Q2NFPXA_js.runPresentationAction(
1744
+ chunkLY5535CF_js.runPresentationAction(
1745
1745
  action,
1746
1746
  { slideCount: deps.slidesLength, ...deps.elementId ? { elementId: deps.elementId } : {} },
1747
1747
  {
@@ -1769,13 +1769,13 @@ function handlePresentationActionImpl(action, deps) {
1769
1769
  function executeSlideTransition(nextSlideIndex, deps) {
1770
1770
  const incomingSlide = deps.slides[nextSlideIndex];
1771
1771
  const transition = deps.reverse ? deps.slides[deps.currentSlideIndex]?.transition : incomingSlide?.transition;
1772
- const durationMs = deps.playTransition ? chunk2Q2NFPXA_js.resolveTransitionDurationMs(transition) : 0;
1772
+ const durationMs = deps.playTransition ? chunkLY5535CF_js.resolveTransitionDurationMs(transition) : 0;
1773
1773
  deps.clearPresentationTimers();
1774
1774
  deps.setPresentationSlideIndex(nextSlideIndex);
1775
1775
  deps.onSetActiveSlideIndex(nextSlideIndex);
1776
1776
  deps.setPresentationSlideVisible(true);
1777
1777
  deps.seedSlideAnimations(nextSlideIndex, { completed: deps.seedCompleted });
1778
- const soundAction = chunk2Q2NFPXA_js.resolveTransitionSoundAction(transition);
1778
+ const soundAction = chunkLY5535CF_js.resolveTransitionSoundAction(transition);
1779
1779
  if (soundAction.kind === "play" && deps.onPlayActionSound) {
1780
1780
  deps.onPlayActionSound(soundAction.soundPath, { loop: soundAction.loop });
1781
1781
  } else if (soundAction.kind === "stop" && deps.onStopActionSound) {
@@ -1838,7 +1838,7 @@ function useSlideNavigation(input) {
1838
1838
  });
1839
1839
  const scheduleAutoAdvanceForSlide = react.useCallback(
1840
1840
  (slideIndex) => {
1841
- const delayMs = chunk2Q2NFPXA_js.resolveAutoAdvanceDelayMs(slides[slideIndex], { useTimings });
1841
+ const delayMs = chunkLY5535CF_js.resolveAutoAdvanceDelayMs(slides[slideIndex], { useTimings });
1842
1842
  if (delayMs === void 0) {
1843
1843
  return;
1844
1844
  }
@@ -1861,7 +1861,7 @@ function useSlideNavigation(input) {
1861
1861
  if (availableSlideIndexes.length === 0) {
1862
1862
  return;
1863
1863
  }
1864
- const pastLastSlide = direction === 1 && !chunk2Q2NFPXA_js.hasShowSlideAfter(presentationSlideIndex, availableSlideIndexes);
1864
+ const pastLastSlide = direction === 1 && !chunkLY5535CF_js.hasShowSlideAfter(presentationSlideIndex, availableSlideIndexes);
1865
1865
  if (rehearsing && pastLastSlide) {
1866
1866
  recordCurrentSlideTime(presentationSlideIndex);
1867
1867
  try {
@@ -1879,9 +1879,9 @@ function useSlideNavigation(input) {
1879
1879
  onAdvancePastLastSlide();
1880
1880
  return;
1881
1881
  }
1882
- const nextSlideIndex = direction === 1 ? chunk2Q2NFPXA_js.nextShowSlideIndex(presentationSlideIndex, availableSlideIndexes, {
1882
+ const nextSlideIndex = direction === 1 ? chunkLY5535CF_js.nextShowSlideIndex(presentationSlideIndex, availableSlideIndexes, {
1883
1883
  loop: Boolean(loopContinuously) && !rehearsing
1884
- }) : chunk2Q2NFPXA_js.previousShowSlideIndex(presentationSlideIndex, availableSlideIndexes);
1884
+ }) : chunkLY5535CF_js.previousShowSlideIndex(presentationSlideIndex, availableSlideIndexes);
1885
1885
  if (nextSlideIndex === void 0 || nextSlideIndex === presentationSlideIndex) {
1886
1886
  return;
1887
1887
  }
@@ -2060,7 +2060,7 @@ function createCustomShowRunner(deps) {
2060
2060
  return;
2061
2061
  }
2062
2062
  origin = returnAfter ? { showId: deps.getActiveCustomShowId(), slideIndex: deps.getPresentationSlideIndex() } : null;
2063
- const first = chunk2Q2NFPXA_js.firstShowSlideIndex(chunk2Q2NFPXA_js.resolveShowSlideIndexes(deps.getSlides(), target));
2063
+ const first = chunkLY5535CF_js.firstShowSlideIndex(chunkLY5535CF_js.resolveShowSlideIndexes(deps.getSlides(), target));
2064
2064
  deps.setActiveCustomShowId(customShowId);
2065
2065
  if (first !== void 0) {
2066
2066
  deps.navigateToSlide(first);
@@ -2137,27 +2137,27 @@ function usePresentationActionExtensions(input) {
2137
2137
  }
2138
2138
  }, [navigateToSlideViaRef]);
2139
2139
  const onOpenFile = react.useCallback((target) => {
2140
- chunk2Q2NFPXA_js.safeOpenUrl(target);
2140
+ chunkLY5535CF_js.safeOpenUrl(target);
2141
2141
  }, []);
2142
2142
  const onOpenPresentation = react.useCallback((target) => {
2143
- chunk2Q2NFPXA_js.safeOpenUrl(target);
2143
+ chunkLY5535CF_js.safeOpenUrl(target);
2144
2144
  }, []);
2145
2145
  const onPlayMedia = react.useCallback(
2146
2146
  (elementId) => {
2147
- chunk2Q2NFPXA_js.toggleStageElementMedia(containerRef.current, elementId);
2147
+ chunkLY5535CF_js.toggleStageElementMedia(containerRef.current, elementId);
2148
2148
  },
2149
2149
  [containerRef]
2150
2150
  );
2151
2151
  const onOleVerb = react.useCallback(
2152
2152
  (verb, elementId) => {
2153
- const target = chunk2Q2NFPXA_js.resolveOleVerbTarget(slides[presentationSlideIndex], elementId, verb);
2153
+ const target = chunkLY5535CF_js.resolveOleVerbTarget(slides[presentationSlideIndex], elementId, verb);
2154
2154
  if (!target) {
2155
2155
  return;
2156
2156
  }
2157
2157
  if (target.action === "download") {
2158
- chunk2Q2NFPXA_js.downloadDataUrl(target.url, target.fileName ?? "download");
2158
+ chunkLY5535CF_js.downloadDataUrl(target.url, target.fileName ?? "download");
2159
2159
  } else {
2160
- chunk2Q2NFPXA_js.openUrlInNewTab(target.url);
2160
+ chunkLY5535CF_js.openUrlInNewTab(target.url);
2161
2161
  }
2162
2162
  },
2163
2163
  [slides, presentationSlideIndex]
@@ -2187,22 +2187,22 @@ function usePresentationActionExtensions(input) {
2187
2187
  };
2188
2188
  }
2189
2189
  function usePresenterConsole(slideIndex, active) {
2190
- const timerRef = react.useRef(chunk2Q2NFPXA_js.createPresenterTimer());
2191
- const [snapshot, setSnapshot] = react.useState(() => chunk2Q2NFPXA_js.createInitialPresentationSnapshot(slideIndex));
2190
+ const timerRef = react.useRef(chunkLY5535CF_js.createPresenterTimer());
2191
+ const [snapshot, setSnapshot] = react.useState(() => chunkLY5535CF_js.createInitialPresentationSnapshot(slideIndex));
2192
2192
  const patch = react.useCallback((value) => {
2193
- setSnapshot((current) => chunk2Q2NFPXA_js.mergePresentationSnapshot(current, value));
2193
+ setSnapshot((current) => chunkLY5535CF_js.mergePresentationSnapshot(current, value));
2194
2194
  }, []);
2195
2195
  react.useEffect(() => patch({ slideIndex }), [patch, slideIndex]);
2196
2196
  react.useEffect(() => {
2197
2197
  if (!active) {
2198
2198
  return;
2199
2199
  }
2200
- timerRef.current = chunk2Q2NFPXA_js.resetPresenterTimer();
2200
+ timerRef.current = chunkLY5535CF_js.resetPresenterTimer();
2201
2201
  patch({ paused: false, elapsedMs: 0 });
2202
2202
  const timer = window.setInterval(() => {
2203
2203
  patch({
2204
2204
  paused: timerRef.current.paused,
2205
- elapsedMs: chunk2Q2NFPXA_js.presenterElapsed(timerRef.current)
2205
+ elapsedMs: chunkLY5535CF_js.presenterElapsed(timerRef.current)
2206
2206
  });
2207
2207
  }, 1e3);
2208
2208
  return () => window.clearInterval(timer);
@@ -2212,19 +2212,19 @@ function usePresenterConsole(slideIndex, active) {
2212
2212
  applyAudienceSnapshot: setSnapshot,
2213
2213
  setBlackout: (blackout) => patch({ blackout }),
2214
2214
  toggleTimer: () => {
2215
- timerRef.current = chunk2Q2NFPXA_js.togglePresenterTimer(timerRef.current);
2215
+ timerRef.current = chunkLY5535CF_js.togglePresenterTimer(timerRef.current);
2216
2216
  patch({
2217
2217
  paused: timerRef.current.paused,
2218
- elapsedMs: chunk2Q2NFPXA_js.presenterElapsed(timerRef.current)
2218
+ elapsedMs: chunkLY5535CF_js.presenterElapsed(timerRef.current)
2219
2219
  });
2220
2220
  },
2221
2221
  resetTimer: () => {
2222
- timerRef.current = chunk2Q2NFPXA_js.resetPresenterTimer();
2222
+ timerRef.current = chunkLY5535CF_js.resetPresenterTimer();
2223
2223
  patch({ paused: false, elapsedMs: 0 });
2224
2224
  },
2225
2225
  stepZoom: (direction) => setSnapshot(
2226
- (current) => chunk2Q2NFPXA_js.mergePresentationSnapshot(current, {
2227
- zoom: chunk2Q2NFPXA_js.stepPresenterZoom(
2226
+ (current) => chunkLY5535CF_js.mergePresentationSnapshot(current, {
2227
+ zoom: chunkLY5535CF_js.stepPresenterZoom(
2228
2228
  current.zoom ?? { scale: 1, originX: 0.5, originY: 0.5 },
2229
2229
  direction
2230
2230
  )
@@ -2277,7 +2277,7 @@ function usePresentationMode(input) {
2277
2277
  const [allSlidesOpen, setAllSlidesOpen] = react.useState(false);
2278
2278
  const [endOfShowVisible, setEndOfShowVisible] = react.useState(false);
2279
2279
  const [presentationStartTime, setPresentationStartTime] = react.useState(null);
2280
- const showGuard = react.useMemo(() => chunk2Q2NFPXA_js.createPresenterShowGuard(), []);
2280
+ const showGuard = react.useMemo(() => chunkLY5535CF_js.createPresenterShowGuard(), []);
2281
2281
  const {
2282
2282
  presentationAnimations,
2283
2283
  presentationElementStates,
@@ -2374,7 +2374,7 @@ function usePresentationMode(input) {
2374
2374
  actionExtensions.bindNavigateToSlide(navigateToSlide);
2375
2375
  const movePresentationSlide = react.useCallback(
2376
2376
  (direction, trigger = "explicit") => {
2377
- if (!chunk2Q2NFPXA_js.acceptsPresentationInput()) {
2377
+ if (!chunkLY5535CF_js.acceptsPresentationInput()) {
2378
2378
  return;
2379
2379
  }
2380
2380
  if (endOfShowVisible) {
@@ -2443,7 +2443,7 @@ function usePresentationMode(input) {
2443
2443
  onSetMode("present");
2444
2444
  }, [containerRef, onSetMode, setRehearsing]);
2445
2445
  const enterPresentModeFromBeginning = react.useCallback(() => {
2446
- const first = chunk2Q2NFPXA_js.firstShowSlideIndex(visibleSlideIndexes);
2446
+ const first = chunkLY5535CF_js.firstShowSlideIndex(visibleSlideIndexes);
2447
2447
  if (first !== void 0) {
2448
2448
  onSetActiveSlideIndex(first);
2449
2449
  }
@@ -2523,7 +2523,7 @@ function usePresentationMode(input) {
2523
2523
  if (mode !== "present") {
2524
2524
  return;
2525
2525
  }
2526
- return chunk2Q2NFPXA_js.attachPresentationVisibilityPause({
2526
+ return chunkLY5535CF_js.attachPresentationVisibilityPause({
2527
2527
  root: containerRef.current ?? void 0,
2528
2528
  onHidden: () => clearPresentationTimersRef.current(),
2529
2529
  onVisible: () => scheduleAutoAdvanceRef.current(presentationSlideIndexRef.current)
@@ -2531,7 +2531,7 @@ function usePresentationMode(input) {
2531
2531
  }, [mode, containerRef]);
2532
2532
  react.useLayoutEffect(() => {
2533
2533
  if (mode === "present") {
2534
- const idx = chunk2Q2NFPXA_js.presentationEntrySlideIndex(
2534
+ const idx = chunkLY5535CF_js.presentationEntrySlideIndex(
2535
2535
  activeSlideIndexRef.current,
2536
2536
  visibleSlideIndexesRef.current
2537
2537
  );
@@ -2610,11 +2610,11 @@ function usePresentationMode(input) {
2610
2610
  return void 0;
2611
2611
  }
2612
2612
  const incoming = slides[transitionOverlay.incomingSlideIndex];
2613
- return chunk2Q2NFPXA_js.buildMorphTransitionPlan(
2613
+ return chunkLY5535CF_js.buildMorphTransitionPlan(
2614
2614
  slides[transitionOverlay.outgoingSlideIndex],
2615
2615
  incoming,
2616
2616
  transitionOverlay.durationMs,
2617
- chunk2Q2NFPXA_js.morphOptionToMode(transitionOverlay.transition.morphOption),
2617
+ chunkLY5535CF_js.morphOptionToMode(transitionOverlay.transition.morphOption),
2618
2618
  // `PresentationStage` stacks the incoming slide's elements above its
2619
2619
  // template shapes (`zIndex = templateElements.length + index`), so a
2620
2620
  // z-index journey has to start counting where the stage does.
@@ -2639,7 +2639,7 @@ function usePresentationMode(input) {
2639
2639
  if (!morphPlan) {
2640
2640
  return presentationKeyframesCss;
2641
2641
  }
2642
- const imageRules = chunk2Q2NFPXA_js.buildMorphAnimationRules(morphPlan, "", "incoming", "image");
2642
+ const imageRules = chunkLY5535CF_js.buildMorphAnimationRules(morphPlan, "", "incoming", "image");
2643
2643
  return `${presentationKeyframesCss ?? ""}
2644
2644
  ${morphPlan.keyframesCss}
2645
2645
  ${imageRules}`;
@@ -2936,7 +2936,7 @@ function useFindReplace({
2936
2936
  const [findResults, setFindResults] = react.useState([]);
2937
2937
  const [findResultIndex, setFindResultIndex] = react.useState(-1);
2938
2938
  const performFind = react.useCallback(() => {
2939
- const results = chunk2Q2NFPXA_js.findInSlides(slides, findQuery, { matchCase: findMatchCase });
2939
+ const results = chunkLY5535CF_js.findInSlides(slides, findQuery, { matchCase: findMatchCase });
2940
2940
  if (!findQuery) {
2941
2941
  setFindResults([]);
2942
2942
  setFindResultIndex(-1);
@@ -2970,7 +2970,7 @@ function useFindReplace({
2970
2970
  return;
2971
2971
  }
2972
2972
  onUpdateSlides(
2973
- (prevSlides) => chunk2Q2NFPXA_js.applyFindReplacements(prevSlides, toReplace, replaceQuery).slides
2973
+ (prevSlides) => chunkLY5535CF_js.applyFindReplacements(prevSlides, toReplace, replaceQuery).slides
2974
2974
  );
2975
2975
  onMarkDirty();
2976
2976
  },
@@ -2992,9 +2992,9 @@ function useFindReplace({
2992
2992
  }, [findResults, applyReplacements, performFind]);
2993
2993
  react.useEffect(() => {
2994
2994
  const handler = (event) => {
2995
- const { action } = chunk2Q2NFPXA_js.mapEditorKey(event, {
2995
+ const { action } = chunkLY5535CF_js.mapEditorKey(event, {
2996
2996
  canEdit: mode === "edit",
2997
- isTextInputTarget: chunk2Q2NFPXA_js.isEditorTextInputTarget(event.target)
2997
+ isTextInputTarget: chunkLY5535CF_js.isEditorTextInputTarget(event.target)
2998
2998
  });
2999
2999
  if (action !== "find") {
3000
3000
  return;
@@ -3105,7 +3105,7 @@ function addCommentToSlide(slides, slideIndex, text, authorName, elementId, ment
3105
3105
  if (!slide) {
3106
3106
  return { slides, didAdd: false };
3107
3107
  }
3108
- const next = chunk2Q2NFPXA_js.addCommentToList(
3108
+ const next = chunkLY5535CF_js.addCommentToList(
3109
3109
  slide.comments || [],
3110
3110
  text,
3111
3111
  authorName,
@@ -3126,7 +3126,7 @@ function removeCommentFromSlide(slides, slideIndex, commentId) {
3126
3126
  if (!slide) {
3127
3127
  return { slides, didDelete: false };
3128
3128
  }
3129
- const next = chunk2Q2NFPXA_js.removeCommentFromList(slide.comments || [], commentId);
3129
+ const next = chunkLY5535CF_js.removeCommentFromList(slide.comments || [], commentId);
3130
3130
  if (!next) {
3131
3131
  return { slides, didDelete: false };
3132
3132
  }
@@ -3137,7 +3137,7 @@ function editCommentInSlide(slides, slideIndex, commentId, newText) {
3137
3137
  if (!slide) {
3138
3138
  return { slides, didUpdate: false };
3139
3139
  }
3140
- const next = chunk2Q2NFPXA_js.editCommentInList(slide.comments || [], commentId, newText);
3140
+ const next = chunkLY5535CF_js.editCommentInList(slide.comments || [], commentId, newText);
3141
3141
  if (!next) {
3142
3142
  return { slides, didUpdate: false };
3143
3143
  }
@@ -3148,7 +3148,7 @@ function toggleResolvedInSlide(slides, slideIndex, commentId) {
3148
3148
  if (!slide) {
3149
3149
  return { slides, didUpdate: false };
3150
3150
  }
3151
- const next = chunk2Q2NFPXA_js.toggleCommentResolvedInList(slide.comments || [], commentId);
3151
+ const next = chunkLY5535CF_js.toggleCommentResolvedInList(slide.comments || [], commentId);
3152
3152
  if (!next) {
3153
3153
  return { slides, didUpdate: false };
3154
3154
  }
@@ -3159,7 +3159,7 @@ function addReplyToSlide(slides, slideIndex, parentId, text, authorName, mention
3159
3159
  if (!slide) {
3160
3160
  return { slides, didAdd: false };
3161
3161
  }
3162
- const next = chunk2Q2NFPXA_js.replyToCommentInList(slide.comments || [], parentId, text, authorName);
3162
+ const next = chunkLY5535CF_js.replyToCommentInList(slide.comments || [], parentId, text, authorName);
3163
3163
  if (!next) {
3164
3164
  return { slides, didAdd: false };
3165
3165
  }
@@ -3546,7 +3546,7 @@ function useDerivedElementState(input) {
3546
3546
  return [];
3547
3547
  }
3548
3548
  return [
3549
- ...chunk2Q2NFPXA_js.visibleTemplateElements(activeSlide, templateElementsBySlideId[activeSlide.id] ?? [])
3549
+ ...chunkLY5535CF_js.visibleTemplateElements(activeSlide, templateElementsBySlideId[activeSlide.id] ?? [])
3550
3550
  ];
3551
3551
  }, [activeSlide, templateElementsBySlideId]);
3552
3552
  const activeMaster = slideMasters[activeMasterIndex];
@@ -3613,7 +3613,7 @@ function useViewerCoreState(_input) {
3613
3613
  const marqueeStateRef = react.useRef(null);
3614
3614
  const isDrawingRef = react.useRef(false);
3615
3615
  const justInteractedRef = react.useRef(false);
3616
- const livePatcher = react.useMemo(() => chunk2Q2NFPXA_js.createCollaborationLivePatcher(), []);
3616
+ const livePatcher = react.useMemo(() => chunkLY5535CF_js.createCollaborationLivePatcher(), []);
3617
3617
  react.useEffect(() => () => livePatcher.dispose(), [livePatcher]);
3618
3618
  const slidesRef = react.useRef([]);
3619
3619
  const [mode, setMode] = react.useState("edit");
@@ -3622,8 +3622,8 @@ function useViewerCoreState(_input) {
3622
3622
  const [slides, setSlides] = react.useState([]);
3623
3623
  const [templateElementsBySlideId, setTemplateElementsBySlideId] = react.useState({});
3624
3624
  const [canvasSize, setCanvasSize] = react.useState({
3625
- width: chunkXW46A7DN_js.DEFAULT_CANVAS_WIDTH,
3626
- height: chunkXW46A7DN_js.DEFAULT_CANVAS_HEIGHT
3625
+ width: chunkIK25LY4C_js.DEFAULT_CANVAS_WIDTH,
3626
+ height: chunkIK25LY4C_js.DEFAULT_CANVAS_HEIGHT
3627
3627
  });
3628
3628
  const [slideSizeEmu, setSlideSizeEmu] = react.useState();
3629
3629
  const [activeSlideIndex, setActiveSlideIndex] = react.useState(0);
@@ -3644,7 +3644,7 @@ function useViewerCoreState(_input) {
3644
3644
  const resolved = typeof value === "function" ? value(inlineEditingTextRef.current) : value;
3645
3645
  inlineEditingTextRef.current = resolved;
3646
3646
  setInlineEditingTextBase(value);
3647
- chunk2Q2NFPXA_js.publishLiveInlineText(
3647
+ chunkLY5535CF_js.publishLiveInlineText(
3648
3648
  livePatcher,
3649
3649
  slidesRef.current[activeSlideIndexRef.current],
3650
3650
  inlineEditingElementIdRef.current,
@@ -4007,7 +4007,7 @@ function useLoadContent({
4007
4007
  );
4008
4008
  }
4009
4009
  const previousHandler = handlerRef.current;
4010
- const handler = new chunk2Q2NFPXA_js.PptxHandler();
4010
+ const handler = new chunkLY5535CF_js.PptxHandler();
4011
4011
  const parsed = await handler.load(buffer, { allowExternalImages });
4012
4012
  if (cancelled || token !== renderTokenRef.current) {
4013
4013
  handler.dispose();
@@ -4019,7 +4019,7 @@ function useLoadContent({
4019
4019
  handlerRef.current = null;
4020
4020
  const mediaElements = [];
4021
4021
  for (const slide of parsed.slides) {
4022
- chunk2Q2NFPXA_js.collectMediaElements(slide.elements, mediaElements);
4022
+ chunkLY5535CF_js.collectMediaElements(slide.elements, mediaElements);
4023
4023
  }
4024
4024
  for (const url of mediaDataUrls.values()) {
4025
4025
  if (url.startsWith("blob:")) {
@@ -4029,7 +4029,7 @@ function useLoadContent({
4029
4029
  mediaDataUrls.clear();
4030
4030
  await Promise.all(
4031
4031
  mediaElements.map(async (mediaElement) => {
4032
- const resolved = await chunk2Q2NFPXA_js.resolveMediaElementSource(mediaElement, handler);
4032
+ const resolved = await chunkLY5535CF_js.resolveMediaElementSource(mediaElement, handler);
4033
4033
  if (resolved.missing || !resolved.mediaPath || !resolved.url) {
4034
4034
  mediaElement.mediaMissing = true;
4035
4035
  return;
@@ -4040,7 +4040,7 @@ function useLoadContent({
4040
4040
  }
4041
4041
  })
4042
4042
  );
4043
- const { paths: imagePaths, refs: imageRefs } = chunk2Q2NFPXA_js.collectImagePaths(parsed.slides);
4043
+ const { paths: imagePaths, refs: imageRefs } = chunkLY5535CF_js.collectImagePaths(parsed.slides);
4044
4044
  let nextSlides = parsed.slides;
4045
4045
  if (imagePaths.size > 0) {
4046
4046
  const resolvedMap = /* @__PURE__ */ new Map();
@@ -4056,25 +4056,25 @@ function useLoadContent({
4056
4056
  })
4057
4057
  );
4058
4058
  nextSlides = parsed.slides.map((s) => {
4059
- const newElements = chunk2Q2NFPXA_js.applyImagePathPatches(s.elements, resolvedMap, imageRefs);
4059
+ const newElements = chunkLY5535CF_js.applyImagePathPatches(s.elements, resolvedMap, imageRefs);
4060
4060
  return newElements === s.elements ? s : { ...s, elements: newElements };
4061
4061
  });
4062
4062
  }
4063
- nextSlides = await chunk2Q2NFPXA_js.resolveTableCellImageUrls(
4063
+ nextSlides = await chunkLY5535CF_js.resolveTableCellImageUrls(
4064
4064
  nextSlides,
4065
4065
  (path) => handler.getImageData(path)
4066
4066
  );
4067
- const nextTableStyleMap = await chunk2Q2NFPXA_js.resolveTableStyleImageUrls(
4067
+ const nextTableStyleMap = await chunkLY5535CF_js.resolveTableStyleImageUrls(
4068
4068
  parsed.tableStyleMap,
4069
4069
  (path) => handler.getImageData(path)
4070
4070
  );
4071
4071
  handlerRef.current = handler;
4072
- const partition = chunk2Q2NFPXA_js.partitionTemplateElements(nextSlides);
4072
+ const partition = chunkLY5535CF_js.partitionTemplateElements(nextSlides);
4073
4073
  setSlides(partition.slides);
4074
4074
  setTemplateElementsBySlideId(partition.templateElementsBySlideId);
4075
4075
  setCanvasSize({
4076
- width: parsed.width ?? chunkXW46A7DN_js.DEFAULT_CANVAS_WIDTH,
4077
- height: parsed.height ?? chunkXW46A7DN_js.DEFAULT_CANVAS_HEIGHT
4076
+ width: parsed.width ?? chunkIK25LY4C_js.DEFAULT_CANVAS_WIDTH,
4077
+ height: parsed.height ?? chunkIK25LY4C_js.DEFAULT_CANVAS_HEIGHT
4078
4078
  });
4079
4079
  setSlideSizeEmu(
4080
4080
  typeof parsed.widthEmu === "number" && typeof parsed.heightEmu === "number" && parsed.widthEmu > 0 && parsed.heightEmu > 0 ? {
@@ -4087,7 +4087,7 @@ function useLoadContent({
4087
4087
  setLayoutOptions(parsed.layoutOptions ?? []);
4088
4088
  setSlideMasters(parsed.slideMasters ?? []);
4089
4089
  setModernCommentAuthors(parsed.modernCommentAuthors ?? []);
4090
- setRecentColors(chunk2Q2NFPXA_js.seedRecentColors({ mruColors: parsed.mruColors }));
4090
+ setRecentColors(chunkLY5535CF_js.seedRecentColors({ mruColors: parsed.mruColors }));
4091
4091
  setTheme(parsed.theme);
4092
4092
  setTableStyleMap(nextTableStyleMap);
4093
4093
  setTableStylesDefaultId(parsed.tableStylesDefaultId);
@@ -4095,7 +4095,7 @@ function useLoadContent({
4095
4095
  setThemeOptions(parsed.themeOptions ?? []);
4096
4096
  setCustomShows(parsed.customShows ?? []);
4097
4097
  setActiveCustomShowId(
4098
- chunk2Q2NFPXA_js.resolveAuthoredCustomShowId(parsed.presentationProperties, parsed.customShows) ?? null
4098
+ chunkLY5535CF_js.resolveAuthoredCustomShowId(parsed.presentationProperties, parsed.customShows) ?? null
4099
4099
  );
4100
4100
  setSections(parsed.sections ?? []);
4101
4101
  setPresentationProperties(parsed.presentationProperties ?? {});
@@ -4118,11 +4118,11 @@ function useLoadContent({
4118
4118
  setHasMacros(parsed.hasMacros === true);
4119
4119
  setHasDigitalSignatures(parsed.hasDigitalSignatures === true);
4120
4120
  setDigitalSignatureCount(parsed.digitalSignatureCount ?? 0);
4121
- setGuides(chunk2Q2NFPXA_js.buildInitialGuides(parsed.presentationGuides, parsed.slides[0]?.guides));
4122
- setReadOnlyRecommendation(chunk2Q2NFPXA_js.readOnlyRecommendation(parsed));
4121
+ setGuides(chunkLY5535CF_js.buildInitialGuides(parsed.presentationGuides, parsed.slides[0]?.guides));
4122
+ setReadOnlyRecommendation(chunkLY5535CF_js.readOnlyRecommendation(parsed));
4123
4123
  setModifyVerifier(parsed.modifyVerifier ?? void 0);
4124
4124
  setCompatToasts(
4125
- chunk2Q2NFPXA_js.compatibilityWarningToasts([
4125
+ chunkLY5535CF_js.compatibilityWarningToasts([
4126
4126
  ...parsed.warnings ?? [],
4127
4127
  ...parsed.slides.flatMap((slide) => slide.warnings ?? [])
4128
4128
  ])
@@ -4134,7 +4134,7 @@ function useLoadContent({
4134
4134
  onContentApplied?.();
4135
4135
  } catch (err) {
4136
4136
  if (!cancelled && token === renderTokenRef.current) {
4137
- if (err instanceof chunk2Q2NFPXA_js.EncryptedFileError) {
4137
+ if (err instanceof chunkLY5535CF_js.EncryptedFileError) {
4138
4138
  setIsEncrypted(true);
4139
4139
  } else {
4140
4140
  console.error("[pptx] Failed to load presentation content:", err);
@@ -4162,7 +4162,7 @@ function useLoadContent({
4162
4162
  }
4163
4163
  function useAutosave(input) {
4164
4164
  const { isDirty, filePath, serializeSlides, enabled = true, getChangeSources } = input;
4165
- const intervalMs = chunk2Q2NFPXA_js.resolveAutosaveIntervalMs({
4165
+ const intervalMs = chunkLY5535CF_js.resolveAutosaveIntervalMs({
4166
4166
  hostIntervalMs: input.intervalMs,
4167
4167
  optionsIntervalSeconds: input.intervalSeconds
4168
4168
  });
@@ -4193,7 +4193,7 @@ function useAutosave(input) {
4193
4193
  return;
4194
4194
  }
4195
4195
  const sources = changeSourcesRef.current?.() ?? [];
4196
- if (!chunk2Q2NFPXA_js.shouldWriteAutosaveSnapshot({
4196
+ if (!chunkLY5535CF_js.shouldWriteAutosaveSnapshot({
4197
4197
  filePath: path,
4198
4198
  isDirty: isDirtyRef.current,
4199
4199
  saving: isSavingRef.current,
@@ -4211,8 +4211,8 @@ function useAutosave(input) {
4211
4211
  isSavingRef.current = false;
4212
4212
  return;
4213
4213
  }
4214
- await chunk2Q2NFPXA_js.saveAutosaveSnapshot(path, data);
4215
- lastSnapshotRef.current = chunk2Q2NFPXA_js.autosaveSnapshotMark(path, sources);
4214
+ await chunkLY5535CF_js.saveAutosaveSnapshot(path, data);
4215
+ lastSnapshotRef.current = chunkLY5535CF_js.autosaveSnapshotMark(path, sources);
4216
4216
  setAutosaveStatus({ state: "saved", timestamp: Date.now() });
4217
4217
  } catch (err) {
4218
4218
  setAutosaveStatus({
@@ -4266,13 +4266,13 @@ function useElementOperations(input) {
4266
4266
  inlineEditingText
4267
4267
  } = input;
4268
4268
  const liveTextSegments = react.useCallback(() => {
4269
- if (!selectedElement || !chunk2Q2NFPXA_js.hasTextProperties(selectedElement)) {
4269
+ if (!selectedElement || !chunkLY5535CF_js.hasTextProperties(selectedElement)) {
4270
4270
  return void 0;
4271
4271
  }
4272
4272
  if (selectedElement.id !== inlineEditingElementId) {
4273
4273
  return selectedElement.textSegments;
4274
4274
  }
4275
- return chunk2Q2NFPXA_js.remapTextToSegments(
4275
+ return chunkLY5535CF_js.remapTextToSegments(
4276
4276
  inlineEditingText,
4277
4277
  selectedElement.textSegments,
4278
4278
  selectedElement.textStyle
@@ -4313,11 +4313,11 @@ function useElementOperations(input) {
4313
4313
  (elementId, updates) => {
4314
4314
  if (masterView?.target) {
4315
4315
  applyMasterViewWrite(
4316
- chunk2Q2NFPXA_js.updateMasterViewElement(masterView, masterView.target, elementId, updates)
4316
+ chunkLY5535CF_js.updateMasterViewElement(masterView, masterView.target, elementId, updates)
4317
4317
  );
4318
4318
  return;
4319
4319
  }
4320
- if (chunk2Q2NFPXA_js.isTemplateElementId(elementId)) {
4320
+ if (chunkLY5535CF_js.isTemplateElementId(elementId)) {
4321
4321
  const slideId = activeSlide?.id;
4322
4322
  if (slideId) {
4323
4323
  setTemplateElementsBySlideId((prev) => ({
@@ -4328,7 +4328,7 @@ function useElementOperations(input) {
4328
4328
  }));
4329
4329
  }
4330
4330
  } else {
4331
- setSlides((prev) => chunk2Q2NFPXA_js.updateElement(prev, activeSlideIndex, elementId, updates));
4331
+ setSlides((prev) => chunkLY5535CF_js.updateElement(prev, activeSlideIndex, elementId, updates));
4332
4332
  }
4333
4333
  history.markDirty();
4334
4334
  },
@@ -4353,7 +4353,7 @@ function useElementOperations(input) {
4353
4353
  );
4354
4354
  const updateSelectedShapeStyle = react.useCallback(
4355
4355
  (updates) => {
4356
- if (!selectedElement || !chunk2Q2NFPXA_js.hasShapeProperties(selectedElement)) {
4356
+ if (!selectedElement || !chunkLY5535CF_js.hasShapeProperties(selectedElement)) {
4357
4357
  return;
4358
4358
  }
4359
4359
  updateSelectedElement({
@@ -4364,19 +4364,19 @@ function useElementOperations(input) {
4364
4364
  );
4365
4365
  const updateSelectedTextStyle = react.useCallback(
4366
4366
  (updates) => {
4367
- if (!selectedElement || !chunk2Q2NFPXA_js.hasTextProperties(selectedElement)) {
4367
+ if (!selectedElement || !chunkLY5535CF_js.hasTextProperties(selectedElement)) {
4368
4368
  return;
4369
4369
  }
4370
4370
  const isLiveEditing = selectedElement.id === inlineEditingElementId;
4371
4371
  const currentSegments = liveTextSegments();
4372
- const inlineSel = chunk2Q2NFPXA_js.getInlineEditorSelection(currentSegments);
4372
+ const inlineSel = chunkLY5535CF_js.getInlineEditorSelection(currentSegments);
4373
4373
  if (inlineSel && currentSegments) {
4374
- const { newSegments: newSegments2, newSelection } = chunk2Q2NFPXA_js.applyStyleToSelectedSegments(
4374
+ const { newSegments: newSegments2, newSelection } = chunkLY5535CF_js.applyStyleToSelectedSegments(
4375
4375
  currentSegments,
4376
4376
  inlineSel,
4377
4377
  updates
4378
4378
  );
4379
- chunk2Q2NFPXA_js.setPendingSelectionRestore(newSelection);
4379
+ chunkLY5535CF_js.setPendingSelectionRestore(newSelection);
4380
4380
  updateSelectedElement({
4381
4381
  textSegments: newSegments2,
4382
4382
  ...isLiveEditing ? { text: inlineEditingText } : {}
@@ -4404,14 +4404,14 @@ function useElementOperations(input) {
4404
4404
  );
4405
4405
  const updateSelectedTextCase = react.useCallback(
4406
4406
  (mode) => {
4407
- if (!selectedElement || !chunk2Q2NFPXA_js.hasTextProperties(selectedElement)) {
4407
+ if (!selectedElement || !chunkLY5535CF_js.hasTextProperties(selectedElement)) {
4408
4408
  return;
4409
4409
  }
4410
4410
  const isLiveEditing = selectedElement.id === inlineEditingElementId;
4411
4411
  const currentSegments = liveTextSegments();
4412
- const inlineSel = chunk2Q2NFPXA_js.getInlineEditorSelection(currentSegments);
4412
+ const inlineSel = chunkLY5535CF_js.getInlineEditorSelection(currentSegments);
4413
4413
  if (inlineSel && currentSegments) {
4414
- const newSegments = chunk2Q2NFPXA_js.applyCaseTransformToSegments(currentSegments, inlineSel, mode);
4414
+ const newSegments = chunkLY5535CF_js.applyCaseTransformToSegments(currentSegments, inlineSel, mode);
4415
4415
  updateSelectedElement({
4416
4416
  textSegments: newSegments,
4417
4417
  ...isLiveEditing ? { text: inlineEditingText } : {}
@@ -4420,7 +4420,7 @@ function useElementOperations(input) {
4420
4420
  }
4421
4421
  const updates = {};
4422
4422
  if (currentSegments && currentSegments.length > 0) {
4423
- updates.textSegments = chunk2Q2NFPXA_js.applyCaseTransformToSegments(
4423
+ updates.textSegments = chunkLY5535CF_js.applyCaseTransformToSegments(
4424
4424
  currentSegments,
4425
4425
  null,
4426
4426
  mode
@@ -4428,7 +4428,7 @@ function useElementOperations(input) {
4428
4428
  }
4429
4429
  const baseText = isLiveEditing ? inlineEditingText : selectedElement.text;
4430
4430
  if (typeof baseText === "string") {
4431
- updates.text = chunk2Q2NFPXA_js.transformTextCase(baseText, mode);
4431
+ updates.text = chunkLY5535CF_js.transformTextCase(baseText, mode);
4432
4432
  }
4433
4433
  updateSelectedElement(updates);
4434
4434
  },
@@ -4447,15 +4447,15 @@ function useElementOperations(input) {
4447
4447
  [setSlides]
4448
4448
  );
4449
4449
  const masterViewTarget = masterView?.target ?? null;
4450
- const activeElements = masterViewTarget ? chunk2Q2NFPXA_js.masterViewElements(masterView, masterViewTarget) : editTemplateMode ? templateElements : activeSlide?.elements ?? [];
4450
+ const activeElements = masterViewTarget ? chunkLY5535CF_js.masterViewElements(masterView, masterViewTarget) : editTemplateMode ? templateElements : activeSlide?.elements ?? [];
4451
4451
  const updateActiveElements = react.useCallback(
4452
4452
  (updater) => {
4453
4453
  if (masterView?.target) {
4454
4454
  applyMasterViewWrite(
4455
- chunk2Q2NFPXA_js.replaceMasterViewElements(
4455
+ chunkLY5535CF_js.replaceMasterViewElements(
4456
4456
  masterView,
4457
4457
  masterView.target,
4458
- updater(chunk2Q2NFPXA_js.masterViewElements(masterView, masterView.target))
4458
+ updater(chunkLY5535CF_js.masterViewElements(masterView, masterView.target))
4459
4459
  )
4460
4460
  );
4461
4461
  return;
@@ -4508,7 +4508,7 @@ function useSectionOperations(input) {
4508
4508
  const { sections, setSections, slides, setSlides, markDirty } = input;
4509
4509
  const addSection2 = react.useCallback(
4510
4510
  (name, afterSlideIndex) => {
4511
- const result = chunk2Q2NFPXA_js.addSection(sections, slides, name, afterSlideIndex);
4511
+ const result = chunkLY5535CF_js.addSection(sections, slides, name, afterSlideIndex);
4512
4512
  setSlides(result.slides);
4513
4513
  setSections(result.sections);
4514
4514
  markDirty();
@@ -4517,7 +4517,7 @@ function useSectionOperations(input) {
4517
4517
  );
4518
4518
  const renameSection2 = react.useCallback(
4519
4519
  (sectionId, newName) => {
4520
- const result = chunk2Q2NFPXA_js.renameSection(sections, slides, sectionId, newName);
4520
+ const result = chunkLY5535CF_js.renameSection(sections, slides, sectionId, newName);
4521
4521
  setSections(result.sections);
4522
4522
  setSlides(result.slides);
4523
4523
  markDirty();
@@ -4526,7 +4526,7 @@ function useSectionOperations(input) {
4526
4526
  );
4527
4527
  const deleteSection2 = react.useCallback(
4528
4528
  (sectionId) => {
4529
- const result = chunk2Q2NFPXA_js.deleteSection(sections, slides, sectionId);
4529
+ const result = chunkLY5535CF_js.deleteSection(sections, slides, sectionId);
4530
4530
  setSections(result.sections);
4531
4531
  setSlides(result.slides);
4532
4532
  markDirty();
@@ -4535,21 +4535,21 @@ function useSectionOperations(input) {
4535
4535
  );
4536
4536
  const moveSectionUp2 = react.useCallback(
4537
4537
  (sectionId) => {
4538
- setSections(chunk2Q2NFPXA_js.moveSectionUp(sections, sectionId));
4538
+ setSections(chunkLY5535CF_js.moveSectionUp(sections, sectionId));
4539
4539
  markDirty();
4540
4540
  },
4541
4541
  [sections, setSections, markDirty]
4542
4542
  );
4543
4543
  const moveSectionDown2 = react.useCallback(
4544
4544
  (sectionId) => {
4545
- setSections(chunk2Q2NFPXA_js.moveSectionDown(sections, sectionId));
4545
+ setSections(chunkLY5535CF_js.moveSectionDown(sections, sectionId));
4546
4546
  markDirty();
4547
4547
  },
4548
4548
  [sections, setSections, markDirty]
4549
4549
  );
4550
4550
  const moveSlidesToSection2 = react.useCallback(
4551
4551
  (slideIndexes, targetSectionId) => {
4552
- const result = chunk2Q2NFPXA_js.moveSlidesToSection(sections, slides, slideIndexes, targetSectionId);
4552
+ const result = chunkLY5535CF_js.moveSlidesToSection(sections, slides, slideIndexes, targetSectionId);
4553
4553
  setSlides(result.slides);
4554
4554
  setSections(result.sections);
4555
4555
  markDirty();
@@ -4615,15 +4615,15 @@ function syncSelectionHandleOverlay(elementNode, elementId, geometry) {
4615
4615
  // src/viewer/hooks/pointer-move-handlers.ts
4616
4616
  function computeResizeGeometry(handle, startX, startY, startWidth, startHeight, dx, dy, snapToGrid, gridSpacingPx, lockAspect = false) {
4617
4617
  const startBox = { x: startX, y: startY, width: startWidth, height: startHeight };
4618
- let resized = chunk2Q2NFPXA_js.applyResize(startBox, handle, dx, dy, 1, { minSize: chunkXW46A7DN_js.MIN_ELEMENT_SIZE });
4618
+ let resized = chunkLY5535CF_js.applyResize(startBox, handle, dx, dy, 1, { minSize: chunkIK25LY4C_js.MIN_ELEMENT_SIZE });
4619
4619
  if (lockAspect) {
4620
- resized = chunk2Q2NFPXA_js.lockResizeAspect(resized, startBox, handle, chunkXW46A7DN_js.MIN_ELEMENT_SIZE);
4620
+ resized = chunkLY5535CF_js.lockResizeAspect(resized, startBox, handle, chunkIK25LY4C_js.MIN_ELEMENT_SIZE);
4621
4621
  }
4622
4622
  const box = { x: resized.x, y: resized.y, width: resized.width, height: resized.height };
4623
4623
  if (!snapToGrid) {
4624
4624
  return box;
4625
4625
  }
4626
- return chunk2Q2NFPXA_js.snapBoxToGrid(box, handle, gridSpacingPx, chunkXW46A7DN_js.MIN_ELEMENT_SIZE);
4626
+ return chunkLY5535CF_js.snapBoxToGrid(box, handle, gridSpacingPx, chunkIK25LY4C_js.MIN_ELEMENT_SIZE);
4627
4627
  }
4628
4628
  function resolveLiveTarget(input) {
4629
4629
  const { livePatcher, editTemplateMode, activeSlide } = input;
@@ -4736,7 +4736,7 @@ function processDragMove(e, drag, editorScale, snapToGrid, snapToShape, gridSpac
4736
4736
  width: el.width,
4737
4737
  height: el.height
4738
4738
  }));
4739
- const snapResult = chunk2Q2NFPXA_js.computeSnapToShape(
4739
+ const snapResult = chunkLY5535CF_js.computeSnapToShape(
4740
4740
  targetX,
4741
4741
  targetY,
4742
4742
  primaryEl.width,
@@ -4778,7 +4778,7 @@ function processDragMove(e, drag, editorScale, snapToGrid, snapToShape, gridSpac
4778
4778
  if (live) {
4779
4779
  for (const id of Object.keys(drag.startPositionsById)) {
4780
4780
  const start = drag.startPositionsById[id];
4781
- chunk2Q2NFPXA_js.publishLiveGeometry(live.patcher, live.slideId, id, {
4781
+ chunkLY5535CF_js.publishLiveGeometry(live.patcher, live.slideId, id, {
4782
4782
  x: start.x + appliedDx,
4783
4783
  y: start.y + appliedDy
4784
4784
  });
@@ -4810,8 +4810,8 @@ function processResizeMove(e, rs, editorScale, snapToGrid, gridSpacingPx, live)
4810
4810
  rs.lastY = geo.y;
4811
4811
  rs.lastWidth = geo.width;
4812
4812
  rs.lastHeight = geo.height;
4813
- const width = Math.max(geo.width, chunkXW46A7DN_js.MIN_ELEMENT_SIZE);
4814
- const height = Math.max(geo.height, chunkXW46A7DN_js.MIN_ELEMENT_SIZE);
4813
+ const width = Math.max(geo.width, chunkIK25LY4C_js.MIN_ELEMENT_SIZE);
4814
+ const height = Math.max(geo.height, chunkIK25LY4C_js.MIN_ELEMENT_SIZE);
4815
4815
  if (rs.domEl) {
4816
4816
  rs.domEl.style.left = `${geo.x}px`;
4817
4817
  rs.domEl.style.top = `${geo.y}px`;
@@ -4820,7 +4820,7 @@ function processResizeMove(e, rs, editorScale, snapToGrid, gridSpacingPx, live)
4820
4820
  syncSelectionHandleOverlay(rs.domEl, rs.elementId, { x: geo.x, y: geo.y, width, height });
4821
4821
  }
4822
4822
  if (live) {
4823
- chunk2Q2NFPXA_js.publishLiveGeometry(live.patcher, live.slideId, rs.elementId, {
4823
+ chunkLY5535CF_js.publishLiveGeometry(live.patcher, live.slideId, rs.elementId, {
4824
4824
  x: geo.x,
4825
4825
  y: geo.y,
4826
4826
  width,
@@ -4831,7 +4831,7 @@ function processResizeMove(e, rs, editorScale, snapToGrid, gridSpacingPx, live)
4831
4831
  function processAdjustmentMove(e, adj, editorScale, updateElementById) {
4832
4832
  const dx = (e.clientX - adj.startClientX) / editorScale;
4833
4833
  const dy = (e.clientY - adj.startClientY) / editorScale;
4834
- const adjustments = chunk2Q2NFPXA_js.getDraggedShapeAdjustments(adj, dx, dy);
4834
+ const adjustments = chunkLY5535CF_js.getDraggedShapeAdjustments(adj, dx, dy);
4835
4835
  if (!adj.moved && Math.hypot(dx, dy) > 2) {
4836
4836
  adj.moved = true;
4837
4837
  }
@@ -4906,13 +4906,13 @@ function processPointerUp(input) {
4906
4906
  if (i !== activeSlideIndex) {
4907
4907
  return s;
4908
4908
  }
4909
- const rerouted = chunk2Q2NFPXA_js.rerouteConnectorsForMovedElements(s.elements, movedIds);
4909
+ const rerouted = chunkLY5535CF_js.rerouteConnectorsForMovedElements(s.elements, movedIds);
4910
4910
  if (rerouted.length === 0) {
4911
4911
  return s;
4912
4912
  }
4913
4913
  return {
4914
4914
  ...s,
4915
- elements: chunk2Q2NFPXA_js.applyReroutedConnectors(s.elements, rerouted)
4915
+ elements: chunkLY5535CF_js.applyReroutedConnectors(s.elements, rerouted)
4916
4916
  };
4917
4917
  })
4918
4918
  );
@@ -4937,9 +4937,9 @@ function processPointerUp(input) {
4937
4937
  }
4938
4938
  function commitMarquee(marquee, editTemplateMode, templateElements, activeSlide, applySelection, clearSelection) {
4939
4939
  const sourceElements = editTemplateMode ? templateElements : activeSlide?.elements ?? [];
4940
- const hitIds = chunk2Q2NFPXA_js.computeMarqueeHitIds(marquee, sourceElements);
4940
+ const hitIds = chunkLY5535CF_js.computeMarqueeHitIds(marquee, sourceElements);
4941
4941
  if (marquee.additive) {
4942
- const merged = chunk2Q2NFPXA_js.mergeAdditiveSelection(marquee.baseSelectionIds, hitIds);
4942
+ const merged = chunkLY5535CF_js.mergeAdditiveSelection(marquee.baseSelectionIds, hitIds);
4943
4943
  if (merged.length > 0) {
4944
4944
  applySelection(merged[0], merged);
4945
4945
  } else {
@@ -4962,8 +4962,8 @@ function commitDrag(drag, editTemplateMode, activeSlide, activeSlideIndex, setTe
4962
4962
  }
4963
4963
  return { ...el, x: start.x + dx, y: start.y + dy };
4964
4964
  });
4965
- const rerouted = chunk2Q2NFPXA_js.rerouteConnectorsForMovedElements(movedElements, movedIds);
4966
- return chunk2Q2NFPXA_js.applyReroutedConnectors(movedElements, rerouted);
4965
+ const rerouted = chunkLY5535CF_js.rerouteConnectorsForMovedElements(movedElements, movedIds);
4966
+ return chunkLY5535CF_js.applyReroutedConnectors(movedElements, rerouted);
4967
4967
  };
4968
4968
  if (editTemplateMode) {
4969
4969
  const slideId = activeSlide?.id;
@@ -5119,12 +5119,12 @@ function useCanvasInteractions(input) {
5119
5119
  return;
5120
5120
  }
5121
5121
  const el = elementLookup.get(editId);
5122
- if (el && chunk2Q2NFPXA_js.hasTextProperties(el)) {
5122
+ if (el && chunkLY5535CF_js.hasTextProperties(el)) {
5123
5123
  const committedText = transformCommittedText ? transformCommittedText(inlineEditingText) : inlineEditingText;
5124
- const newSegments = chunk2Q2NFPXA_js.remapTextToSegments(committedText, el.textSegments, el.textStyle);
5124
+ const newSegments = chunkLY5535CF_js.remapTextToSegments(committedText, el.textSegments, el.textStyle);
5125
5125
  const editorEl = document.querySelector("[data-inline-editor]");
5126
- const newHeight = chunk2Q2NFPXA_js.resolveInlineEditAutoFitHeight(el.textStyle, el.height, editorEl);
5127
- const shrink = chunk2Q2NFPXA_js.resolveInlineEditNormAutofitShrink(el.textStyle, el.height, editorEl);
5126
+ const newHeight = chunkLY5535CF_js.resolveInlineEditAutoFitHeight(el.textStyle, el.height, editorEl);
5127
+ const shrink = chunkLY5535CF_js.resolveInlineEditNormAutofitShrink(el.textStyle, el.height, editorEl);
5128
5128
  ops.updateElementById(editId, {
5129
5129
  text: committedText,
5130
5130
  textSegments: newSegments,
@@ -5143,7 +5143,7 @@ function useCanvasInteractions(input) {
5143
5143
  setInlineEditingText("");
5144
5144
  };
5145
5145
  const openEquationEditorForElement = (el) => {
5146
- if (!chunk2Q2NFPXA_js.hasTextProperties(el)) {
5146
+ if (!chunkLY5535CF_js.hasTextProperties(el)) {
5147
5147
  return false;
5148
5148
  }
5149
5149
  const eqSeg = el.textSegments?.find((seg) => seg.equationXml);
@@ -5173,7 +5173,7 @@ function useCanvasInteractions(input) {
5173
5173
  justInteractedRef.current = false;
5174
5174
  } else {
5175
5175
  const el = elementLookup.get(elementId);
5176
- if (el && chunk2Q2NFPXA_js.hasTextProperties(el) && chunk2Q2NFPXA_js.canInteractWithElement(el, "textEdit")) {
5176
+ if (el && chunkLY5535CF_js.hasTextProperties(el) && chunkLY5535CF_js.canInteractWithElement(el, "textEdit")) {
5177
5177
  if (!openEquationEditorForElement(el)) {
5178
5178
  setInlineEditingElementId(elementId);
5179
5179
  setInlineEditingText(el.text ?? "");
@@ -5192,7 +5192,7 @@ function useCanvasInteractions(input) {
5192
5192
  if (openEquationEditorForElement(el)) {
5193
5193
  return;
5194
5194
  }
5195
- if (chunk2Q2NFPXA_js.hasTextProperties(el) && chunk2Q2NFPXA_js.canInteractWithElement(el, "textEdit")) {
5195
+ if (chunkLY5535CF_js.hasTextProperties(el) && chunkLY5535CF_js.canInteractWithElement(el, "textEdit")) {
5196
5196
  setInlineEditingElementId(elementId);
5197
5197
  setInlineEditingText(el.text ?? "");
5198
5198
  }
@@ -5215,7 +5215,7 @@ function useCanvasInteractions(input) {
5215
5215
  justSelectedRef.current = false;
5216
5216
  }
5217
5217
  const ids = !wasSelected ? [elementId] : effectiveSelectedIds.length ? effectiveSelectedIds : [elementId];
5218
- const movableIds = chunk2Q2NFPXA_js.filterInteractableIds(ids, (id) => elementLookup.get(id), "move");
5218
+ const movableIds = chunkLY5535CF_js.filterInteractableIds(ids, (id) => elementLookup.get(id), "move");
5219
5219
  if (movableIds.length === 0) {
5220
5220
  return;
5221
5221
  }
@@ -5285,7 +5285,7 @@ function useCanvasInteractions(input) {
5285
5285
  const handleResizePointerDown = (elementId, e, handle) => {
5286
5286
  e.stopPropagation();
5287
5287
  const el = elementLookup.get(elementId);
5288
- if (!el || !chunk2Q2NFPXA_js.canInteractWithElement(el, "resize")) {
5288
+ if (!el || !chunkLY5535CF_js.canInteractWithElement(el, "resize")) {
5289
5289
  return;
5290
5290
  }
5291
5291
  resizeStateRef.current = {
@@ -5307,7 +5307,7 @@ function useCanvasInteractions(input) {
5307
5307
  };
5308
5308
  const handleRotate = (elementId, rotationDeg) => {
5309
5309
  const el = elementLookup.get(elementId);
5310
- if (!el || !chunk2Q2NFPXA_js.canInteractWithElement(el, "rotate")) {
5310
+ if (!el || !chunkLY5535CF_js.canInteractWithElement(el, "rotate")) {
5311
5311
  return;
5312
5312
  }
5313
5313
  ops.updateElementById(elementId, { rotation: rotationDeg });
@@ -5327,10 +5327,10 @@ function useCanvasInteractions(input) {
5327
5327
  const handleAdjustmentPointerDown = (elementId, e, descriptor) => {
5328
5328
  e.stopPropagation();
5329
5329
  const el = elementLookup.get(elementId);
5330
- if (!el || !chunk2Q2NFPXA_js.canInteractWithElement(el, "adjustHandle")) {
5330
+ if (!el || !chunkLY5535CF_js.canInteractWithElement(el, "adjustHandle")) {
5331
5331
  return;
5332
5332
  }
5333
- shapeAdjustmentDragStateRef.current = chunk2Q2NFPXA_js.beginShapeAdjustment(
5333
+ shapeAdjustmentDragStateRef.current = chunkLY5535CF_js.beginShapeAdjustment(
5334
5334
  el,
5335
5335
  descriptor,
5336
5336
  e.clientX,
@@ -5377,7 +5377,7 @@ function createFileHandlers(deps) {
5377
5377
  h = Math.round(h * scale);
5378
5378
  }
5379
5379
  addElement({
5380
- id: chunk2Q2NFPXA_js.generateElementId(),
5380
+ id: chunkLY5535CF_js.generateElementId(),
5381
5381
  type: "image",
5382
5382
  x: Math.round((canvasSize.width - w) / 2),
5383
5383
  y: Math.round((canvasSize.height - h) / 2),
@@ -5388,7 +5388,7 @@ function createFileHandlers(deps) {
5388
5388
  };
5389
5389
  img.onerror = () => {
5390
5390
  addElement({
5391
- id: chunk2Q2NFPXA_js.generateElementId(),
5391
+ id: chunkLY5535CF_js.generateElementId(),
5392
5392
  type: "image",
5393
5393
  x: 100,
5394
5394
  y: 100,
@@ -5407,14 +5407,14 @@ function createFileHandlers(deps) {
5407
5407
  return;
5408
5408
  }
5409
5409
  e.target.value = "";
5410
- const mediaType = chunk2Q2NFPXA_js.classifyMediaType(file.type);
5410
+ const mediaType = chunkLY5535CF_js.classifyMediaType(file.type);
5411
5411
  if (!mediaType) {
5412
5412
  return;
5413
5413
  }
5414
5414
  const elFilePath = file.path;
5415
5415
  const insertMediaElement = (mediaSourceUrl, width, height) => {
5416
5416
  addElement({
5417
- id: chunk2Q2NFPXA_js.generateElementId(),
5417
+ id: chunkLY5535CF_js.generateElementId(),
5418
5418
  type: "media",
5419
5419
  mediaType,
5420
5420
  mediaMimeType: file.type || void 0,
@@ -5589,13 +5589,13 @@ function createStructuredElementHandlers(deps) {
5589
5589
  return;
5590
5590
  }
5591
5591
  addElement({
5592
- id: chunk2Q2NFPXA_js.generateElementId(),
5592
+ id: chunkLY5535CF_js.generateElementId(),
5593
5593
  type: "smartArt",
5594
5594
  x: 100,
5595
5595
  y: 120,
5596
5596
  width: 600,
5597
5597
  height: 340,
5598
- smartArtData: chunk2Q2NFPXA_js.buildSmartArtPresetData(
5598
+ smartArtData: chunkLY5535CF_js.buildSmartArtPresetData(
5599
5599
  layout,
5600
5600
  defaultItems,
5601
5601
  (i) => `node-${Date.now()}-${i}-${Math.random().toString(36).slice(2, 8)}`
@@ -5607,7 +5607,7 @@ function createStructuredElementHandlers(deps) {
5607
5607
  return;
5608
5608
  }
5609
5609
  addElement({
5610
- id: chunk2Q2NFPXA_js.generateElementId(),
5610
+ id: chunkLY5535CF_js.generateElementId(),
5611
5611
  type: "shape",
5612
5612
  x: 120,
5613
5613
  y: 200,
@@ -5645,7 +5645,7 @@ function createStructuredElementHandlers(deps) {
5645
5645
  return;
5646
5646
  }
5647
5647
  const resolved = resolveHyperlinkEditResult(data);
5648
- if (resolved.url && !chunk2Q2NFPXA_js.isUrlSafe(resolved.url)) {
5648
+ if (resolved.url && !chunkLY5535CF_js.isUrlSafe(resolved.url)) {
5649
5649
  return;
5650
5650
  }
5651
5651
  const actionClick = {
@@ -5669,7 +5669,7 @@ function createStructuredElementHandlers(deps) {
5669
5669
  const displayText = value || fieldTexts[fieldType] || fieldType;
5670
5670
  const fieldGuid = `{${crypto.randomUUID().toUpperCase()}}`;
5671
5671
  addElement({
5672
- id: chunk2Q2NFPXA_js.generateElementId(),
5672
+ id: chunkLY5535CF_js.generateElementId(),
5673
5673
  type: "shape",
5674
5674
  x: 120,
5675
5675
  y: 200,
@@ -5691,11 +5691,11 @@ function createStructuredElementHandlers(deps) {
5691
5691
  if (!activeSlide) {
5692
5692
  return;
5693
5693
  }
5694
- const preset = chunk2Q2NFPXA_js.ACTION_BUTTON_PRESETS.find((p) => p.shapeType === shapeType);
5694
+ const preset = chunkLY5535CF_js.ACTION_BUTTON_PRESETS.find((p) => p.shapeType === shapeType);
5695
5695
  if (!preset) {
5696
5696
  return;
5697
5697
  }
5698
- const defaultPptxAction = chunk2Q2NFPXA_js.elementActionToPptxAction({
5698
+ const defaultPptxAction = chunkLY5535CF_js.elementActionToPptxAction({
5699
5699
  trigger: "click",
5700
5700
  type: preset.defaultAction
5701
5701
  });
@@ -5704,7 +5704,7 @@ function createStructuredElementHandlers(deps) {
5704
5704
  defaultPptxAction.highlightClick = true;
5705
5705
  }
5706
5706
  addElement({
5707
- id: chunk2Q2NFPXA_js.generateElementId(),
5707
+ id: chunkLY5535CF_js.generateElementId(),
5708
5708
  type: "shape",
5709
5709
  x: 150,
5710
5710
  y: 150,
@@ -5771,14 +5771,14 @@ function useInsertElements(input) {
5771
5771
  return;
5772
5772
  }
5773
5773
  addElement({
5774
- id: chunk2Q2NFPXA_js.generateElementId(),
5774
+ id: chunkLY5535CF_js.generateElementId(),
5775
5775
  type: "text",
5776
5776
  x: 100,
5777
5777
  y: 100,
5778
5778
  width: 300,
5779
5779
  height: 60,
5780
5780
  text: "",
5781
- textStyle: { fontSize: chunkXW46A7DN_js.DEFAULT_TEXT_FONT_SIZE }
5781
+ textStyle: { fontSize: chunkIK25LY4C_js.DEFAULT_TEXT_FONT_SIZE }
5782
5782
  });
5783
5783
  };
5784
5784
  const handleAddShape = () => {
@@ -5786,7 +5786,7 @@ function useInsertElements(input) {
5786
5786
  return;
5787
5787
  }
5788
5788
  addElement({
5789
- id: chunk2Q2NFPXA_js.generateElementId(),
5789
+ id: chunkLY5535CF_js.generateElementId(),
5790
5790
  type: "shape",
5791
5791
  x: 150,
5792
5792
  y: 150,
@@ -5805,15 +5805,15 @@ function useInsertElements(input) {
5805
5805
  return;
5806
5806
  }
5807
5807
  addElement({
5808
- ...chunk2Q2NFPXA_js.newTableElement(chunkXW46A7DN_js.DEFAULT_TABLE_ROWS, chunkXW46A7DN_js.DEFAULT_TABLE_COLUMNS, 100, 200),
5809
- id: chunk2Q2NFPXA_js.generateElementId()
5808
+ ...chunkLY5535CF_js.newTableElement(chunkIK25LY4C_js.DEFAULT_TABLE_ROWS, chunkIK25LY4C_js.DEFAULT_TABLE_COLUMNS, 100, 200),
5809
+ id: chunkLY5535CF_js.generateElementId()
5810
5810
  });
5811
5811
  };
5812
5812
  const handleAddChart = (chartKind) => {
5813
5813
  if (!activeSlide) {
5814
5814
  return;
5815
5815
  }
5816
- addElement(chunk2Q2NFPXA_js.createDefaultChartElement(chartKind));
5816
+ addElement(chunkLY5535CF_js.createDefaultChartElement(chartKind));
5817
5817
  };
5818
5818
  const structured = createStructuredElementHandlers({
5819
5819
  activeSlide,
@@ -5883,7 +5883,7 @@ function useClipboardHandlers(input) {
5883
5883
  if (!selectedElement) {
5884
5884
  return;
5885
5885
  }
5886
- setClipboardPayload(chunk2Q2NFPXA_js.buildElementClipboardPayload(selectedElement, editTemplateMode));
5886
+ setClipboardPayload(chunkLY5535CF_js.buildElementClipboardPayload(selectedElement, editTemplateMode));
5887
5887
  };
5888
5888
  const handleDelete = () => {
5889
5889
  const idsToDelete = effectiveSelectedIds;
@@ -5900,7 +5900,7 @@ function useClipboardHandlers(input) {
5900
5900
  handleDelete();
5901
5901
  };
5902
5902
  const insertClone = (source) => {
5903
- const clone = chunk2Q2NFPXA_js.cloneElementForPaste(source, { intoTemplate: editTemplateMode });
5903
+ const clone = chunkLY5535CF_js.cloneElementForPaste(source, { intoTemplate: editTemplateMode });
5904
5904
  ops.updateActiveElements((els) => [...els, clone]);
5905
5905
  ops.applySelection(clone.id);
5906
5906
  history.markDirty();
@@ -5935,7 +5935,7 @@ function resolveShapePath(el) {
5935
5935
  return el.pathData;
5936
5936
  }
5937
5937
  if ("shapeType" in el && typeof el.shapeType === "string") {
5938
- const clipPath = chunk2Q2NFPXA_js.getPresetShapeClipPath(el.shapeType);
5938
+ const clipPath = chunkLY5535CF_js.getPresetShapeClipPath(el.shapeType);
5939
5939
  if (clipPath) {
5940
5940
  const svgPath = clipPathToSvgPath(clipPath, el.width, el.height);
5941
5941
  if (svgPath) {
@@ -5986,7 +5986,7 @@ function clipPathToSvgPath(clipPath, width, height) {
5986
5986
  return parts.join(" ");
5987
5987
  }
5988
5988
  function transformPathToGlobal(pathData, el) {
5989
- const polys = chunk2Q2NFPXA_js.svgPathToPolygons(pathData);
5989
+ const polys = chunkLY5535CF_js.svgPathToPolygons(pathData);
5990
5990
  if (polys.length === 0) {
5991
5991
  return pathData;
5992
5992
  }
@@ -6006,10 +6006,10 @@ function transformPathToGlobal(pathData, el) {
6006
6006
  y: pt.y * scaleY + el.y
6007
6007
  }))
6008
6008
  );
6009
- return chunk2Q2NFPXA_js.polygonsToSvgPath(transformed);
6009
+ return chunkLY5535CF_js.polygonsToSvgPath(transformed);
6010
6010
  }
6011
6011
  function transformPathToLocal(pathData, x, y, _width, _height) {
6012
- const polys = chunk2Q2NFPXA_js.svgPathToPolygons(pathData);
6012
+ const polys = chunkLY5535CF_js.svgPathToPolygons(pathData);
6013
6013
  if (polys.length === 0) {
6014
6014
  return pathData;
6015
6015
  }
@@ -6019,10 +6019,10 @@ function transformPathToLocal(pathData, x, y, _width, _height) {
6019
6019
  y: pt.y - y
6020
6020
  }))
6021
6021
  );
6022
- return chunk2Q2NFPXA_js.polygonsToSvgPath(transformed);
6022
+ return chunkLY5535CF_js.polygonsToSvgPath(transformed);
6023
6023
  }
6024
6024
  function pathBounds(pathData) {
6025
- const polys = chunk2Q2NFPXA_js.svgPathToPolygons(pathData);
6025
+ const polys = chunkLY5535CF_js.svgPathToPolygons(pathData);
6026
6026
  let minX = Infinity;
6027
6027
  let minY = Infinity;
6028
6028
  let maxX = -Infinity;
@@ -6081,7 +6081,7 @@ function useMergeShapesHandler(input) {
6081
6081
  let allFragments = [];
6082
6082
  let remaining = globalPaths[0];
6083
6083
  for (let i = 1; i < globalPaths.length; i++) {
6084
- const frags = chunk2Q2NFPXA_js.mergeShapes("fragment", remaining, globalPaths[i]);
6084
+ const frags = chunkLY5535CF_js.mergeShapes("fragment", remaining, globalPaths[i]);
6085
6085
  if (Array.isArray(frags)) {
6086
6086
  allFragments = frags;
6087
6087
  }
@@ -6110,7 +6110,7 @@ function useMergeShapesHandler(input) {
6110
6110
  bounds.height
6111
6111
  );
6112
6112
  const newEl = {
6113
- id: chunk2Q2NFPXA_js.generateElementId(),
6113
+ id: chunkLY5535CF_js.generateElementId(),
6114
6114
  type: "shape",
6115
6115
  x: bounds.x,
6116
6116
  y: bounds.y,
@@ -6148,7 +6148,7 @@ function useMergeShapesHandler(input) {
6148
6148
  } else {
6149
6149
  let resultPath = globalPaths[0];
6150
6150
  for (let i = 1; i < globalPaths.length; i++) {
6151
- const result = chunk2Q2NFPXA_js.mergeShapes(operation, resultPath, globalPaths[i]);
6151
+ const result = chunkLY5535CF_js.mergeShapes(operation, resultPath, globalPaths[i]);
6152
6152
  if (typeof result === "string") {
6153
6153
  resultPath = result;
6154
6154
  }
@@ -6169,7 +6169,7 @@ function useMergeShapesHandler(input) {
6169
6169
  );
6170
6170
  const primary = targets[0];
6171
6171
  const newEl = {
6172
- id: chunk2Q2NFPXA_js.generateElementId(),
6172
+ id: chunkLY5535CF_js.generateElementId(),
6173
6173
  type: "shape",
6174
6174
  x: bounds.x,
6175
6175
  y: bounds.y,
@@ -6232,10 +6232,10 @@ function useGroupAlignLayerHandlers(input) {
6232
6232
  if (ids.length < 2 || !activeSlide) {
6233
6233
  return;
6234
6234
  }
6235
- if (!selectedElements.every((el) => chunk2Q2NFPXA_js.canInteractWithElement(el, "group"))) {
6235
+ if (!selectedElements.every((el) => chunkLY5535CF_js.canInteractWithElement(el, "group"))) {
6236
6236
  return;
6237
6237
  }
6238
- const { elements, groupId } = chunk2Q2NFPXA_js.groupElements(ops.activeElements, ids, chunk2Q2NFPXA_js.generateElementId());
6238
+ const { elements, groupId } = chunkLY5535CF_js.groupElements(ops.activeElements, ids, chunkLY5535CF_js.generateElementId());
6239
6239
  if (groupId === null) {
6240
6240
  return;
6241
6241
  }
@@ -6247,15 +6247,15 @@ function useGroupAlignLayerHandlers(input) {
6247
6247
  if (!selectedElement || selectedElement.type !== "group" || !activeSlide) {
6248
6248
  return;
6249
6249
  }
6250
- if (!chunk2Q2NFPXA_js.canInteractWithElement(selectedElement, "group")) {
6250
+ if (!chunkLY5535CF_js.canInteractWithElement(selectedElement, "group")) {
6251
6251
  return;
6252
6252
  }
6253
6253
  const group = selectedElement;
6254
- const intoTemplate = chunk2Q2NFPXA_js.isTemplateElementId(group.id);
6254
+ const intoTemplate = chunkLY5535CF_js.isTemplateElementId(group.id);
6255
6255
  const childIds = group.children.map(
6256
- (child) => intoTemplate ? chunk2Q2NFPXA_js.makeCloneId(true, child.id || group.id) : child.id || chunk2Q2NFPXA_js.generateElementId()
6256
+ (child) => intoTemplate ? chunkLY5535CF_js.makeCloneId(true, child.id || group.id) : child.id || chunkLY5535CF_js.generateElementId()
6257
6257
  );
6258
- const { elements, childIds: usedIds } = chunk2Q2NFPXA_js.ungroupElements(
6258
+ const { elements, childIds: usedIds } = chunkLY5535CF_js.ungroupElements(
6259
6259
  ops.activeElements,
6260
6260
  group.id,
6261
6261
  childIds,
@@ -6284,7 +6284,7 @@ function useGroupAlignLayerHandlers(input) {
6284
6284
  if (!edge) {
6285
6285
  return;
6286
6286
  }
6287
- const positions = chunk2Q2NFPXA_js.alignElements(selectedElements, edge);
6287
+ const positions = chunkLY5535CF_js.alignElements(selectedElements, edge);
6288
6288
  for (const [id, pos] of positions) {
6289
6289
  const el = elementLookup.get(id);
6290
6290
  if (!el) {
@@ -6302,7 +6302,7 @@ function useGroupAlignLayerHandlers(input) {
6302
6302
  if (!distAxis) {
6303
6303
  return;
6304
6304
  }
6305
- const positions = chunk2Q2NFPXA_js.distributeElements(selectedElements, distAxis);
6305
+ const positions = chunkLY5535CF_js.distributeElements(selectedElements, distAxis);
6306
6306
  for (const [id, pos] of positions) {
6307
6307
  const el = elementLookup.get(id);
6308
6308
  if (!el) {
@@ -6313,14 +6313,14 @@ function useGroupAlignLayerHandlers(input) {
6313
6313
  history.markDirty();
6314
6314
  };
6315
6315
  const canDistribute = selectedElements.length >= 3;
6316
- const selectionGroupable = selectedElements.every((el) => chunk2Q2NFPXA_js.canInteractWithElement(el, "group"));
6316
+ const selectionGroupable = selectedElements.every((el) => chunkLY5535CF_js.canInteractWithElement(el, "group"));
6317
6317
  const handleMoveLayer = (direction) => {
6318
6318
  if (!selectedElement || !activeSlide) {
6319
6319
  return;
6320
6320
  }
6321
6321
  const id = selectedElement.id;
6322
6322
  ops.updateActiveElements(
6323
- (els) => direction === "forward" ? chunk2Q2NFPXA_js.bringForward(els, id) : direction === "backward" ? chunk2Q2NFPXA_js.sendBackward(els, id) : els
6323
+ (els) => direction === "forward" ? chunkLY5535CF_js.bringForward(els, id) : direction === "backward" ? chunkLY5535CF_js.sendBackward(els, id) : els
6324
6324
  );
6325
6325
  history.markDirty();
6326
6326
  };
@@ -6330,7 +6330,7 @@ function useGroupAlignLayerHandlers(input) {
6330
6330
  }
6331
6331
  const id = selectedElement.id;
6332
6332
  ops.updateActiveElements(
6333
- (els) => direction === "front" ? chunk2Q2NFPXA_js.bringToFront(els, id) : chunk2Q2NFPXA_js.sendToBack(els, id)
6333
+ (els) => direction === "front" ? chunkLY5535CF_js.bringToFront(els, id) : chunkLY5535CF_js.sendToBack(els, id)
6334
6334
  );
6335
6335
  history.markDirty();
6336
6336
  };
@@ -6464,7 +6464,7 @@ function useSlideManagement(input) {
6464
6464
  theme
6465
6465
  } = input;
6466
6466
  const handleAddSlide = () => {
6467
- const newSlide = chunk2Q2NFPXA_js.createBlankSlide(slides.length + 1);
6467
+ const newSlide = chunkLY5535CF_js.createBlankSlide(slides.length + 1);
6468
6468
  ops.updateSlides((prev) => {
6469
6469
  const next = [...prev];
6470
6470
  next.splice(activeSlideIndex + 1, 0, newSlide);
@@ -6527,7 +6527,7 @@ function useSlideManagement(input) {
6527
6527
  }
6528
6528
  const clone = {
6529
6529
  ...src,
6530
- id: chunk2Q2NFPXA_js.makeSlideId(),
6530
+ id: chunkLY5535CF_js.makeSlideId(),
6531
6531
  elements: src.elements.map((el) => ({
6532
6532
  ...el,
6533
6533
  id: `${el.id}-dup-${Math.random().toString(36).slice(2, 6)}`
@@ -6559,7 +6559,7 @@ function useSlideManagement(input) {
6559
6559
  const handleInsertSlideFromLayout = (layoutPath, layoutName) => {
6560
6560
  const insertAt = activeSlideIndex + 1;
6561
6561
  const draft = {
6562
- ...chunk2Q2NFPXA_js.createBlankSlide(slides.length + 1),
6562
+ ...chunkLY5535CF_js.createBlankSlide(slides.length + 1),
6563
6563
  layoutPath,
6564
6564
  ...layoutName ? { layoutName } : {}
6565
6565
  };
@@ -6592,9 +6592,9 @@ function useSlideManagement(input) {
6592
6592
  };
6593
6593
  const handleInsertSlideFromTemplate = (templateId) => {
6594
6594
  const insertAt = activeSlideIndex + 1;
6595
- const draft = chunk2Q2NFPXA_js.buildSlideTemplateSlide(templateId, chunk2Q2NFPXA_js.makeSlideId(), slides.length + 1, {
6595
+ const draft = chunkLY5535CF_js.buildSlideTemplateSlide(templateId, chunkLY5535CF_js.makeSlideId(), slides.length + 1, {
6596
6596
  ...canvasSize ? { slideWidth: canvasSize.width, slideHeight: canvasSize.height } : {},
6597
- scheme: chunk2Q2NFPXA_js.templateSchemeFromTheme(theme?.colorScheme)
6597
+ scheme: chunkLY5535CF_js.templateSchemeFromTheme(theme?.colorScheme)
6598
6598
  });
6599
6599
  ops.updateSlides((prev) => insertSlideFromLayoutUpdater(prev, activeSlideIndex, draft));
6600
6600
  setActiveSlideIndex(insertAt);
@@ -6631,7 +6631,7 @@ function createTableMergeHandlers(input) {
6631
6631
  if (!nextCell || nextCell.hMerge || nextCell.vMerge) {
6632
6632
  return;
6633
6633
  }
6634
- const newTableData = chunk2Q2NFPXA_js.mergeCells(
6634
+ const newTableData = chunkLY5535CF_js.mergeCells(
6635
6635
  [
6636
6636
  { row: rowIndex, col: columnIndex },
6637
6637
  { row: rowIndex, col: nextColIdx }
@@ -6639,7 +6639,7 @@ function createTableMergeHandlers(input) {
6639
6639
  td
6640
6640
  );
6641
6641
  const updates = { tableData: newTableData };
6642
- const newRawXml = chunk2Q2NFPXA_js.updateMergeAttrsInRawXml(selectedElement, newTableData);
6642
+ const newRawXml = chunkLY5535CF_js.updateMergeAttrsInRawXml(selectedElement, newTableData);
6643
6643
  if (newRawXml) {
6644
6644
  updates.rawXml = newRawXml;
6645
6645
  }
@@ -6665,7 +6665,7 @@ function createTableMergeHandlers(input) {
6665
6665
  if (!targetNextCell || targetNextCell.hMerge || targetNextCell.vMerge) {
6666
6666
  return;
6667
6667
  }
6668
- const newTableData = chunk2Q2NFPXA_js.mergeCells(
6668
+ const newTableData = chunkLY5535CF_js.mergeCells(
6669
6669
  [
6670
6670
  { row: rowIndex, col: columnIndex },
6671
6671
  { row: targetNextRowIdx, col: columnIndex }
@@ -6673,7 +6673,7 @@ function createTableMergeHandlers(input) {
6673
6673
  td
6674
6674
  );
6675
6675
  const updates = { tableData: newTableData };
6676
- const newRawXml = chunk2Q2NFPXA_js.updateMergeAttrsInRawXml(selectedElement, newTableData);
6676
+ const newRawXml = chunkLY5535CF_js.updateMergeAttrsInRawXml(selectedElement, newTableData);
6677
6677
  if (newRawXml) {
6678
6678
  updates.rawXml = newRawXml;
6679
6679
  }
@@ -6688,9 +6688,9 @@ function createTableMergeHandlers(input) {
6688
6688
  return;
6689
6689
  }
6690
6690
  const td = selectedElement.tableData;
6691
- const newTableData = chunk2Q2NFPXA_js.mergeCells(ts.selectedCells, td);
6691
+ const newTableData = chunkLY5535CF_js.mergeCells(ts.selectedCells, td);
6692
6692
  const updates = { tableData: newTableData };
6693
- const newRawXml = chunk2Q2NFPXA_js.updateMergeAttrsInRawXml(selectedElement, newTableData);
6693
+ const newRawXml = chunkLY5535CF_js.updateMergeAttrsInRawXml(selectedElement, newTableData);
6694
6694
  if (newRawXml) {
6695
6695
  updates.rawXml = newRawXml;
6696
6696
  }
@@ -6707,9 +6707,9 @@ function createTableMergeHandlers(input) {
6707
6707
  }
6708
6708
  const { rowIndex, columnIndex } = ts;
6709
6709
  const td = selectedElement.tableData;
6710
- const newTableData = chunk2Q2NFPXA_js.splitCell(rowIndex, columnIndex, td);
6710
+ const newTableData = chunkLY5535CF_js.splitCell(rowIndex, columnIndex, td);
6711
6711
  const updates = { tableData: newTableData };
6712
- const newRawXml = chunk2Q2NFPXA_js.updateMergeAttrsInRawXml(selectedElement, newTableData);
6712
+ const newRawXml = chunkLY5535CF_js.updateMergeAttrsInRawXml(selectedElement, newTableData);
6713
6713
  if (newRawXml) {
6714
6714
  updates.rawXml = newRawXml;
6715
6715
  }
@@ -6743,10 +6743,10 @@ function createTableStructHandlers(input) {
6743
6743
  const text = transformCommittedText ? transformCommittedText(rawText) : rawText;
6744
6744
  const updates = {};
6745
6745
  if (el.tableData) {
6746
- updates.tableData = chunk2Q2NFPXA_js.setCellText(el, rowIndex, colIndex, text).tableData;
6746
+ updates.tableData = chunkLY5535CF_js.setCellText(el, rowIndex, colIndex, text).tableData;
6747
6747
  }
6748
6748
  if (el.rawXml) {
6749
- const newRawXml = chunk2Q2NFPXA_js.updateCellTextInRawXml(el, rowIndex, colIndex, text);
6749
+ const newRawXml = chunkLY5535CF_js.updateCellTextInRawXml(el, rowIndex, colIndex, text);
6750
6750
  if (newRawXml) {
6751
6751
  updates.rawXml = newRawXml;
6752
6752
  }
@@ -6770,7 +6770,7 @@ function createTableStructHandlers(input) {
6770
6770
  const { rowIndex, columnIndex: colIndex } = ts;
6771
6771
  const updates = {};
6772
6772
  if (selectedElement.rawXml) {
6773
- const newRawXml = chunk2Q2NFPXA_js.updateCellTextStyleInRawXml(
6773
+ const newRawXml = chunkLY5535CF_js.updateCellTextStyleInRawXml(
6774
6774
  selectedElement,
6775
6775
  rowIndex,
6776
6776
  colIndex,
@@ -6834,9 +6834,9 @@ function createTableStructHandlers(input) {
6834
6834
  return;
6835
6835
  }
6836
6836
  const rowIdx = ts?.rowIndex ?? 0;
6837
- const newTableData = chunk2Q2NFPXA_js.insertTableRow(selectedElement.tableData, rowIdx, position);
6837
+ const newTableData = chunkLY5535CF_js.insertTableRow(selectedElement.tableData, rowIdx, position);
6838
6838
  const updates = { tableData: newTableData };
6839
- const newRawXml = chunk2Q2NFPXA_js.rebuildTableStructureInRawXml(selectedElement, newTableData);
6839
+ const newRawXml = chunkLY5535CF_js.rebuildTableStructureInRawXml(selectedElement, newTableData);
6840
6840
  if (newRawXml) {
6841
6841
  updates.rawXml = newRawXml;
6842
6842
  }
@@ -6849,12 +6849,12 @@ function createTableStructHandlers(input) {
6849
6849
  }
6850
6850
  const td = selectedElement.tableData;
6851
6851
  const rowIdx = ts?.rowIndex ?? 0;
6852
- const newTableData = chunk2Q2NFPXA_js.deleteTableRow(td, rowIdx);
6852
+ const newTableData = chunkLY5535CF_js.deleteTableRow(td, rowIdx);
6853
6853
  if (newTableData === td) {
6854
6854
  return;
6855
6855
  }
6856
6856
  const updates = { tableData: newTableData };
6857
- const newRawXml = chunk2Q2NFPXA_js.rebuildTableStructureInRawXml(selectedElement, newTableData);
6857
+ const newRawXml = chunkLY5535CF_js.rebuildTableStructureInRawXml(selectedElement, newTableData);
6858
6858
  if (newRawXml) {
6859
6859
  updates.rawXml = newRawXml;
6860
6860
  }
@@ -6866,9 +6866,9 @@ function createTableStructHandlers(input) {
6866
6866
  return;
6867
6867
  }
6868
6868
  const colIdx = ts?.columnIndex ?? 0;
6869
- const newTableData = chunk2Q2NFPXA_js.insertTableColumn(selectedElement.tableData, colIdx, position);
6869
+ const newTableData = chunkLY5535CF_js.insertTableColumn(selectedElement.tableData, colIdx, position);
6870
6870
  const updates = { tableData: newTableData };
6871
- const newRawXml = chunk2Q2NFPXA_js.rebuildTableStructureInRawXml(selectedElement, newTableData);
6871
+ const newRawXml = chunkLY5535CF_js.rebuildTableStructureInRawXml(selectedElement, newTableData);
6872
6872
  if (newRawXml) {
6873
6873
  updates.rawXml = newRawXml;
6874
6874
  }
@@ -6881,12 +6881,12 @@ function createTableStructHandlers(input) {
6881
6881
  }
6882
6882
  const td = selectedElement.tableData;
6883
6883
  const colIdx = ts?.columnIndex ?? 0;
6884
- const newTableData = chunk2Q2NFPXA_js.deleteTableColumn(td, colIdx);
6884
+ const newTableData = chunkLY5535CF_js.deleteTableColumn(td, colIdx);
6885
6885
  if (newTableData === td) {
6886
6886
  return;
6887
6887
  }
6888
6888
  const updates = { tableData: newTableData };
6889
- const newRawXml = chunk2Q2NFPXA_js.rebuildTableStructureInRawXml(selectedElement, newTableData);
6889
+ const newRawXml = chunkLY5535CF_js.rebuildTableStructureInRawXml(selectedElement, newTableData);
6890
6890
  if (newRawXml) {
6891
6891
  updates.rawXml = newRawXml;
6892
6892
  }
@@ -6922,8 +6922,8 @@ async function renderToCanvas(element, options = {}) {
6922
6922
  return html2canvasPro(element, {
6923
6923
  ...options,
6924
6924
  onclone: async (doc, clonedEl) => {
6925
- await chunk2Q2NFPXA_js.normalizeColorsForCapture(doc, clonedEl);
6926
- chunk2Q2NFPXA_js.preprocessCssForCapture(clonedEl);
6925
+ await chunkLY5535CF_js.normalizeColorsForCapture(doc, clonedEl);
6926
+ chunkLY5535CF_js.preprocessCssForCapture(clonedEl);
6927
6927
  if (typeof userOnClone === "function") {
6928
6928
  userOnClone(doc, clonedEl);
6929
6929
  }
@@ -6953,7 +6953,7 @@ function useExportSaveAs(input) {
6953
6953
  slideSizeEmu
6954
6954
  } = input;
6955
6955
  const handleSaveAsFormat = async (format) => {
6956
- const downloadName = chunk2Q2NFPXA_js.savedPresentationFileName(filePath, format);
6956
+ const downloadName = chunkLY5535CF_js.savedPresentationFileName(filePath, format);
6957
6957
  try {
6958
6958
  const data = await serializeSlides(format);
6959
6959
  if (!data) {
@@ -6961,16 +6961,16 @@ function useExportSaveAs(input) {
6961
6961
  }
6962
6962
  const mimeType = format === "ppt" ? "application/vnd.ms-powerpoint" : "application/vnd.openxmlformats-officedocument.presentationml.presentation";
6963
6963
  const blob = new Blob([data], { type: mimeType });
6964
- chunk2Q2NFPXA_js.downloadBlob(blob, downloadName);
6964
+ chunkLY5535CF_js.downloadBlob(blob, downloadName);
6965
6965
  } catch (err) {
6966
6966
  console.error(`[PowerPointViewer] Save as .${format} failed:`, err);
6967
6967
  }
6968
6968
  };
6969
6969
  const handleExportJson = () => {
6970
6970
  const sourceName = filePath ? filePath.replace(/\\/gu, "/").split("/").pop() : void 0;
6971
- const slideSize = chunk2Q2NFPXA_js.resolveSlideSizeSelection({ current: slideSizeEmu, canvas: canvasSize }).size;
6971
+ const slideSize = chunkLY5535CF_js.resolveSlideSizeSelection({ current: slideSizeEmu, canvas: canvasSize }).size;
6972
6972
  const data = {
6973
- slides: chunk2Q2NFPXA_js.buildSaveSlides(slides, templateElementsBySlideId),
6973
+ slides: chunkLY5535CF_js.buildSaveSlides(slides, templateElementsBySlideId),
6974
6974
  width: canvasSize.width,
6975
6975
  height: canvasSize.height,
6976
6976
  widthEmu: slideSize.widthEmu,
@@ -6989,7 +6989,7 @@ function useExportSaveAs(input) {
6989
6989
  handoutMaster
6990
6990
  };
6991
6991
  try {
6992
- chunk2Q2NFPXA_js.exportDeckJson(data, sourceName);
6992
+ chunkLY5535CF_js.exportDeckJson(data, sourceName);
6993
6993
  } catch (err) {
6994
6994
  console.error("[PowerPointViewer] JSON export failed:", err);
6995
6995
  }
@@ -7080,7 +7080,7 @@ async function exportSlideToPngBlob(slideElement, options = {}) {
7080
7080
  }
7081
7081
  async function exportSlideAsPng(slideElement, slideIndex, options = {}) {
7082
7082
  const blob = await exportSlideToPngBlob(slideElement, options);
7083
- chunk2Q2NFPXA_js.downloadBlob(blob, `slide-${slideIndex + 1}.png`);
7083
+ chunkLY5535CF_js.downloadBlob(blob, `slide-${slideIndex + 1}.png`);
7084
7084
  }
7085
7085
  async function copySlideToClipboard(slideElement, options = {}) {
7086
7086
  const blob = await exportSlideToPngBlob(slideElement, options);
@@ -7102,15 +7102,15 @@ async function exportAllSlidesAsPdf(slideStageRef, totalSlides, setActiveSlide,
7102
7102
  continue;
7103
7103
  }
7104
7104
  const canvas = await renderElementToCanvas(stageEl, scale);
7105
- images.push(chunk2Q2NFPXA_js.canvasToJpegData(canvas));
7105
+ images.push(chunkLY5535CF_js.canvasToJpegData(canvas));
7106
7106
  }
7107
7107
  onProgress?.(totalSlides, totalSlides);
7108
7108
  setActiveSlide(currentSlideIndex);
7109
7109
  if (images.length === 0) {
7110
7110
  throw new Error(chunkY6GG2OOW_js.translationsEn["pptx.export.errorNoSlidesPdf"]);
7111
7111
  }
7112
- const pdfBlobUrl = chunkXW46A7DN_js.buildPdfFromImageData(images);
7113
- chunk2Q2NFPXA_js.downloadDataUrl(pdfBlobUrl, filename);
7112
+ const pdfBlobUrl = chunkIK25LY4C_js.buildPdfFromImageData(images);
7113
+ chunkLY5535CF_js.downloadDataUrl(pdfBlobUrl, filename);
7114
7114
  }
7115
7115
  async function captureAllSlidesAsPngDataUrls(slideStageRef, totalSlides, setActiveSlide, currentSlideIndex, options = {}) {
7116
7116
  const { scale = 2, onProgress } = options;
@@ -7158,8 +7158,8 @@ async function exportAllSlidesAsNotesPdf(slideStageRef, totalSlides, setActiveSl
7158
7158
  if (pages.length === 0) {
7159
7159
  throw new Error(chunkY6GG2OOW_js.translationsEn["pptx.export.errorNoSlidesNotesPdf"]);
7160
7160
  }
7161
- const pdfDataUrl = chunkXW46A7DN_js.buildNotesPdf(pages);
7162
- chunk2Q2NFPXA_js.downloadDataUrl(pdfDataUrl, filename);
7161
+ const pdfDataUrl = chunkIK25LY4C_js.buildNotesPdf(pages);
7162
+ chunkLY5535CF_js.downloadDataUrl(pdfDataUrl, filename);
7163
7163
  }
7164
7164
 
7165
7165
  // src/viewer/utils/export-video.ts
@@ -7203,7 +7203,7 @@ async function exportAllSlidesAsVideo(slideStageRef, totalSlides, setActiveSlide
7203
7203
  const fps = 30;
7204
7204
  const stream = recordingCanvas.captureStream(fps);
7205
7205
  const recorder = new MediaRecorder(stream, {
7206
- mimeType: chunk2Q2NFPXA_js.pickSupportedMimeType([...chunk2Q2NFPXA_js.WEBM_MIME_CANDIDATES]),
7206
+ mimeType: chunkLY5535CF_js.pickSupportedMimeType([...chunkLY5535CF_js.WEBM_MIME_CANDIDATES]),
7207
7207
  videoBitsPerSecond: 5e6
7208
7208
  });
7209
7209
  const chunks = [];
@@ -7226,8 +7226,8 @@ async function exportAllSlidesAsVideo(slideStageRef, totalSlides, setActiveSlide
7226
7226
  const duration = slideTimingsMs?.[i] ?? slideDurationMs;
7227
7227
  ctx.clearRect(0, 0, recordingCanvas.width, recordingCanvas.height);
7228
7228
  ctx.drawImage(slideCanvases[i], 0, 0);
7229
- const frameInterval = chunk2Q2NFPXA_js.fpsToFrameIntervalMs(fps);
7230
- const framesNeeded = chunk2Q2NFPXA_js.segmentFrameCount(duration, fps);
7229
+ const frameInterval = chunkLY5535CF_js.fpsToFrameIntervalMs(fps);
7230
+ const framesNeeded = chunkLY5535CF_js.segmentFrameCount(duration, fps);
7231
7231
  for (let f = 0; f < framesNeeded; f++) {
7232
7232
  if (signal?.aborted) {
7233
7233
  recorder.stop();
@@ -7276,7 +7276,7 @@ async function exportAllSlidesAsGif(slideStageRef, totalSlides, setActiveSlide,
7276
7276
  if (frames.length === 0) {
7277
7277
  throw new Error(chunkY6GG2OOW_js.translationsEn["pptx.export.errorNoSlidesGif"]);
7278
7278
  }
7279
- const gifBytes = chunk2Q2NFPXA_js.encodeGif(frames, Math.round(slideDurationMs / 10));
7279
+ const gifBytes = chunkLY5535CF_js.encodeGif(frames, Math.round(slideDurationMs / 10));
7280
7280
  onProgress?.(totalSlides, totalSlides);
7281
7281
  const buf = new ArrayBuffer(gifBytes.length);
7282
7282
  new Uint8Array(buf).set(gifBytes);
@@ -7330,7 +7330,7 @@ function exportAllSlidesToSvg(data, options = {}) {
7330
7330
  continue;
7331
7331
  }
7332
7332
  onProgress?.(processedCount, data.slides.length);
7333
- let svg = chunk2Q2NFPXA_js.SvgExporter.exportSlide(slide, data.width, data.height, svgOptions);
7333
+ let svg = chunkLY5535CF_js.SvgExporter.exportSlide(slide, data.width, data.height, svgOptions);
7334
7334
  if (embedFonts && fontFaces?.length) {
7335
7335
  svg = injectFontFaces(svg, fontFaces);
7336
7336
  }
@@ -7432,21 +7432,21 @@ function useExportHandlers(input) {
7432
7432
  {
7433
7433
  scale: imageExportScale,
7434
7434
  onProgress: (current, total) => {
7435
- setExportProgress(chunk2Q2NFPXA_js.slideProgressPercent(current, total));
7436
- setExportStatusMessage(chunk2Q2NFPXA_js.slideStatusLabel("Rendering", current, total));
7435
+ setExportProgress(chunkLY5535CF_js.slideProgressPercent(current, total));
7436
+ setExportStatusMessage(chunkLY5535CF_js.slideStatusLabel("Rendering", current, total));
7437
7437
  },
7438
7438
  signal: abortCtrl.signal
7439
7439
  }
7440
7440
  );
7441
- setExportProgress(chunk2Q2NFPXA_js.EXPORT_ASSEMBLING_PERCENT);
7441
+ setExportProgress(chunkLY5535CF_js.EXPORT_ASSEMBLING_PERCENT);
7442
7442
  setExportStatusMessage("Building PDF...");
7443
7443
  await new Promise((r) => {
7444
7444
  setTimeout(r, 100);
7445
7445
  });
7446
- setExportProgress(chunk2Q2NFPXA_js.EXPORT_DONE_PERCENT);
7446
+ setExportProgress(chunkLY5535CF_js.EXPORT_DONE_PERCENT);
7447
7447
  setExportStatusMessage("Done!");
7448
7448
  } catch (err) {
7449
- if (!chunk2Q2NFPXA_js.isExportAbortError(err)) {
7449
+ if (!chunkLY5535CF_js.isExportAbortError(err)) {
7450
7450
  console.error("[PowerPointViewer] PDF export failed:", err);
7451
7451
  }
7452
7452
  } finally {
@@ -7476,21 +7476,21 @@ function useExportHandlers(input) {
7476
7476
  {
7477
7477
  scale: imageExportScale,
7478
7478
  onProgress: (current, total) => {
7479
- setExportProgress(chunk2Q2NFPXA_js.slideProgressPercent(current, total));
7480
- setExportStatusMessage(chunk2Q2NFPXA_js.slideStatusLabel("Rendering", current, total));
7479
+ setExportProgress(chunkLY5535CF_js.slideProgressPercent(current, total));
7480
+ setExportStatusMessage(chunkLY5535CF_js.slideStatusLabel("Rendering", current, total));
7481
7481
  },
7482
7482
  signal: abortCtrl.signal
7483
7483
  }
7484
7484
  );
7485
- setExportProgress(chunk2Q2NFPXA_js.EXPORT_ASSEMBLING_PERCENT);
7485
+ setExportProgress(chunkLY5535CF_js.EXPORT_ASSEMBLING_PERCENT);
7486
7486
  setExportStatusMessage("Building PDF...");
7487
7487
  await new Promise((r) => {
7488
7488
  setTimeout(r, 100);
7489
7489
  });
7490
- setExportProgress(chunk2Q2NFPXA_js.EXPORT_DONE_PERCENT);
7490
+ setExportProgress(chunkLY5535CF_js.EXPORT_DONE_PERCENT);
7491
7491
  setExportStatusMessage("Done!");
7492
7492
  } catch (err) {
7493
- if (!chunk2Q2NFPXA_js.isExportAbortError(err)) {
7493
+ if (!chunkLY5535CF_js.isExportAbortError(err)) {
7494
7494
  console.error("[PowerPointViewer] Notes PDF export failed:", err);
7495
7495
  }
7496
7496
  } finally {
@@ -7532,22 +7532,22 @@ function useExportHandlers(input) {
7532
7532
  scale: 1,
7533
7533
  slideDurationMs: 3e3,
7534
7534
  onProgress: (current, total) => {
7535
- setExportProgress(chunk2Q2NFPXA_js.slideProgressPercent(current, total, 45));
7536
- setExportStatusMessage(chunk2Q2NFPXA_js.slideStatusLabel("Capturing", current, total));
7535
+ setExportProgress(chunkLY5535CF_js.slideProgressPercent(current, total, 45));
7536
+ setExportStatusMessage(chunkLY5535CF_js.slideStatusLabel("Capturing", current, total));
7537
7537
  },
7538
7538
  onRecordProgress: (current, total) => {
7539
- setExportProgress(chunk2Q2NFPXA_js.recordProgressPercent(current, total));
7540
- setExportStatusMessage(chunk2Q2NFPXA_js.slideStatusLabel("Recording", current, total));
7539
+ setExportProgress(chunkLY5535CF_js.recordProgressPercent(current, total));
7540
+ setExportStatusMessage(chunkLY5535CF_js.slideStatusLabel("Recording", current, total));
7541
7541
  },
7542
7542
  signal: abortCtrl.signal
7543
7543
  }
7544
7544
  );
7545
- setExportProgress(chunk2Q2NFPXA_js.EXPORT_ASSEMBLING_PERCENT);
7545
+ setExportProgress(chunkLY5535CF_js.EXPORT_ASSEMBLING_PERCENT);
7546
7546
  setExportStatusMessage("Saving file...");
7547
- chunk2Q2NFPXA_js.downloadBlob(blob, "presentation.webm");
7548
- setExportProgress(chunk2Q2NFPXA_js.EXPORT_DONE_PERCENT);
7547
+ chunkLY5535CF_js.downloadBlob(blob, "presentation.webm");
7548
+ setExportProgress(chunkLY5535CF_js.EXPORT_DONE_PERCENT);
7549
7549
  } catch (err) {
7550
- if (!chunk2Q2NFPXA_js.isExportAbortError(err)) {
7550
+ if (!chunkLY5535CF_js.isExportAbortError(err)) {
7551
7551
  console.error("[PowerPointViewer] Video export failed:", err);
7552
7552
  }
7553
7553
  } finally {
@@ -7575,18 +7575,18 @@ function useExportHandlers(input) {
7575
7575
  scale: 0.5,
7576
7576
  slideDurationMs: 2e3,
7577
7577
  onProgress: (current, total) => {
7578
- setExportProgress(chunk2Q2NFPXA_js.slideProgressPercent(current, total));
7579
- setExportStatusMessage(chunk2Q2NFPXA_js.slideStatusLabel("Encoding", current, total));
7578
+ setExportProgress(chunkLY5535CF_js.slideProgressPercent(current, total));
7579
+ setExportStatusMessage(chunkLY5535CF_js.slideStatusLabel("Encoding", current, total));
7580
7580
  },
7581
7581
  signal: abortCtrl.signal
7582
7582
  }
7583
7583
  );
7584
- setExportProgress(chunk2Q2NFPXA_js.EXPORT_ASSEMBLING_PERCENT);
7584
+ setExportProgress(chunkLY5535CF_js.EXPORT_ASSEMBLING_PERCENT);
7585
7585
  setExportStatusMessage("Saving file...");
7586
- chunk2Q2NFPXA_js.downloadBlob(blob, "presentation.gif");
7587
- setExportProgress(chunk2Q2NFPXA_js.EXPORT_DONE_PERCENT);
7586
+ chunkLY5535CF_js.downloadBlob(blob, "presentation.gif");
7587
+ setExportProgress(chunkLY5535CF_js.EXPORT_DONE_PERCENT);
7588
7588
  } catch (err) {
7589
- if (!chunk2Q2NFPXA_js.isExportAbortError(err)) {
7589
+ if (!chunkLY5535CF_js.isExportAbortError(err)) {
7590
7590
  console.error("[PowerPointViewer] GIF export failed:", err);
7591
7591
  }
7592
7592
  } finally {
@@ -7620,7 +7620,7 @@ function useExportHandlers(input) {
7620
7620
  exportStatusMessage
7621
7621
  };
7622
7622
  }
7623
- var ViewerOptionsContext = react.createContext(chunk2Q2NFPXA_js.DEFAULT_VIEWER_OPTIONS);
7623
+ var ViewerOptionsContext = react.createContext(chunkLY5535CF_js.DEFAULT_VIEWER_OPTIONS);
7624
7624
  function useViewerOptionsContext() {
7625
7625
  return react.useContext(ViewerOptionsContext);
7626
7626
  }
@@ -7632,13 +7632,13 @@ function usePrintHandlers(input) {
7632
7632
  const { t } = reactI18next.useTranslation();
7633
7633
  const viewerOptions = useViewerOptionsContext();
7634
7634
  const includeHiddenSlides = viewerOptions.advanced.printHiddenSlides;
7635
- const printRasterScale = (viewerOptions.advanced.printHighQuality ? 4 : 3) * chunk2Q2NFPXA_js.resolveImageResolutionScale(viewerOptions);
7635
+ const printRasterScale = (viewerOptions.advanced.printHighQuality ? 4 : 3) * chunkLY5535CF_js.resolveImageResolutionScale(viewerOptions);
7636
7636
  const handlePrint = () => {
7637
7637
  setIsPrintDialogOpen(true);
7638
7638
  };
7639
7639
  const handlePrintSvg = async (settings) => {
7640
7640
  setIsPrintDialogOpen(false);
7641
- const printWindow = chunk2Q2NFPXA_js.openPendingPrintWindow(t("pptx.print.preparingToPrint"));
7641
+ const printWindow = chunkLY5535CF_js.openPendingPrintWindow(t("pptx.print.preparingToPrint"));
7642
7642
  if (!printWindow) {
7643
7643
  console.warn(
7644
7644
  "[PowerPointViewer] Print window was blocked by the browser. Allow popups for this site to print."
@@ -7648,9 +7648,9 @@ function usePrintHandlers(input) {
7648
7648
  if (!pptxData || settings.printWhat !== "slides") {
7649
7649
  return runRasterPrint(printWindow, settings);
7650
7650
  }
7651
- const colorFilter = chunk2Q2NFPXA_js.computeColorFilter(settings.colorMode);
7652
- const slideIndices = chunk2Q2NFPXA_js.filterHiddenSlideIndices(
7653
- chunk2Q2NFPXA_js.computeSlideIndices(
7651
+ const colorFilter = chunkLY5535CF_js.computeColorFilter(settings.colorMode);
7652
+ const slideIndices = chunkLY5535CF_js.filterHiddenSlideIndices(
7653
+ chunkLY5535CF_js.computeSlideIndices(
7654
7654
  settings.slideRange,
7655
7655
  activeSlideIndex,
7656
7656
  slides.length,
@@ -7668,22 +7668,22 @@ function usePrintHandlers(input) {
7668
7668
  printWindow.close();
7669
7669
  return;
7670
7670
  }
7671
- const printDoc = chunk2Q2NFPXA_js.buildPrintDocument(svgs, pptxData.width, pptxData.height, {
7671
+ const printDoc = chunkLY5535CF_js.buildPrintDocument(svgs, pptxData.width, pptxData.height, {
7672
7672
  title: "Slides (Vector)",
7673
7673
  orientation: settings.orientation,
7674
7674
  colorFilter,
7675
7675
  scaleToFit: settings.scaleToFit
7676
7676
  });
7677
- chunk2Q2NFPXA_js.finishPrintWindow(printWindow, printDoc);
7677
+ chunkLY5535CF_js.finishPrintWindow(printWindow, printDoc);
7678
7678
  } catch (err) {
7679
7679
  console.warn("[PowerPointViewer] SVG print path failed, falling back to raster:", err);
7680
7680
  return runRasterPrint(printWindow, settings);
7681
7681
  }
7682
7682
  };
7683
7683
  const runRasterPrint = async (printWindow, settings) => {
7684
- const colorFilter = chunk2Q2NFPXA_js.computeColorFilter(settings.colorMode);
7685
- const slideIndices = chunk2Q2NFPXA_js.filterHiddenSlideIndices(
7686
- chunk2Q2NFPXA_js.computeSlideIndices(
7684
+ const colorFilter = chunkLY5535CF_js.computeColorFilter(settings.colorMode);
7685
+ const slideIndices = chunkLY5535CF_js.filterHiddenSlideIndices(
7686
+ chunkLY5535CF_js.computeSlideIndices(
7687
7687
  settings.slideRange,
7688
7688
  activeSlideIndex,
7689
7689
  slides.length,
@@ -7694,11 +7694,11 @@ function usePrintHandlers(input) {
7694
7694
  includeHiddenSlides
7695
7695
  );
7696
7696
  if (settings.printWhat === "outline") {
7697
- chunk2Q2NFPXA_js.finishPrintWindow(
7697
+ chunkLY5535CF_js.finishPrintWindow(
7698
7698
  printWindow,
7699
- chunk2Q2NFPXA_js.buildPrintHtmlDocument({
7699
+ chunkLY5535CF_js.buildPrintHtmlDocument({
7700
7700
  title: "Outline",
7701
- bodyHtml: `<div class="outline-page">${chunk2Q2NFPXA_js.buildOutlineHtml(slideIndices, slides)}</div>`,
7701
+ bodyHtml: `<div class="outline-page">${chunkLY5535CF_js.buildOutlineHtml(slideIndices, slides)}</div>`,
7702
7702
  orientation: settings.orientation,
7703
7703
  colorFilter,
7704
7704
  frameSlides: settings.frameSlides,
@@ -7725,11 +7725,11 @@ function usePrintHandlers(input) {
7725
7725
  }
7726
7726
  const slideImages = slideIndices.map((idx) => allImages[idx]).filter(Boolean);
7727
7727
  if (settings.printWhat === "slides") {
7728
- chunk2Q2NFPXA_js.finishPrintWindow(
7728
+ chunkLY5535CF_js.finishPrintWindow(
7729
7729
  printWindow,
7730
- chunk2Q2NFPXA_js.buildPrintHtmlDocument({
7730
+ chunkLY5535CF_js.buildPrintHtmlDocument({
7731
7731
  title: "Slides",
7732
- bodyHtml: chunk2Q2NFPXA_js.buildSlidesHtml(slideImages, slideIndices),
7732
+ bodyHtml: chunkLY5535CF_js.buildSlidesHtml(slideImages, slideIndices),
7733
7733
  orientation: settings.orientation,
7734
7734
  colorFilter,
7735
7735
  frameSlides: settings.frameSlides,
@@ -7739,11 +7739,11 @@ function usePrintHandlers(input) {
7739
7739
  return;
7740
7740
  }
7741
7741
  if (settings.printWhat === "notes") {
7742
- chunk2Q2NFPXA_js.finishPrintWindow(
7742
+ chunkLY5535CF_js.finishPrintWindow(
7743
7743
  printWindow,
7744
- chunk2Q2NFPXA_js.buildPrintHtmlDocument({
7744
+ chunkLY5535CF_js.buildPrintHtmlDocument({
7745
7745
  title: "Notes Pages",
7746
- bodyHtml: chunk2Q2NFPXA_js.buildNotesHtml(slideImages, slideIndices, slides),
7746
+ bodyHtml: chunkLY5535CF_js.buildNotesHtml(slideImages, slideIndices, slides),
7747
7747
  orientation: "portrait",
7748
7748
  colorFilter,
7749
7749
  frameSlides: settings.frameSlides,
@@ -7754,11 +7754,11 @@ function usePrintHandlers(input) {
7754
7754
  }
7755
7755
  if (settings.printWhat === "handouts") {
7756
7756
  const spp = settings.slidesPerPage;
7757
- chunk2Q2NFPXA_js.finishPrintWindow(
7757
+ chunkLY5535CF_js.finishPrintWindow(
7758
7758
  printWindow,
7759
- chunk2Q2NFPXA_js.buildPrintHtmlDocument({
7759
+ chunkLY5535CF_js.buildPrintHtmlDocument({
7760
7760
  title: `Handout ${spp} per page`,
7761
- bodyHtml: chunk2Q2NFPXA_js.buildHandoutsHtml(slideImages, slideIndices, spp, pptxData?.handoutMaster),
7761
+ bodyHtml: chunkLY5535CF_js.buildHandoutsHtml(slideImages, slideIndices, spp, pptxData?.handoutMaster),
7762
7762
  orientation: "portrait",
7763
7763
  colorFilter,
7764
7764
  frameSlides: settings.frameSlides,
@@ -7772,7 +7772,7 @@ function usePrintHandlers(input) {
7772
7772
  };
7773
7773
  const handlePrintWithSettings = async (settings) => {
7774
7774
  setIsPrintDialogOpen(false);
7775
- const printWindow = chunk2Q2NFPXA_js.openPendingPrintWindow(t("pptx.print.preparingToPrint"));
7775
+ const printWindow = chunkLY5535CF_js.openPendingPrintWindow(t("pptx.print.preparingToPrint"));
7776
7776
  if (!printWindow) {
7777
7777
  console.warn(
7778
7778
  "[PowerPointViewer] Print window was blocked by the browser. Allow popups for this site to print."
@@ -7837,13 +7837,13 @@ function useThemeHandlers(input) {
7837
7837
  return;
7838
7838
  }
7839
7839
  await handler.updateThemeColorScheme(colorScheme);
7840
- const previousMap = theme?.colorScheme ? chunk2Q2NFPXA_js.buildThemeColorMap(theme.colorScheme) : {};
7841
- setSlides((prev) => chunk2Q2NFPXA_js.reResolveSlideColors(prev, previousMap, colorScheme));
7840
+ const previousMap = theme?.colorScheme ? chunkLY5535CF_js.buildThemeColorMap(theme.colorScheme) : {};
7841
+ setSlides((prev) => chunkLY5535CF_js.reResolveSlideColors(prev, previousMap, colorScheme));
7842
7842
  if (Object.keys(templateElementsBySlideId).length > 0) {
7843
7843
  setTemplateElementsBySlideId((prev) => {
7844
7844
  const next = {};
7845
7845
  for (const [slideId, elements] of Object.entries(prev)) {
7846
- next[slideId] = chunk2Q2NFPXA_js.reResolveElementColors(elements, previousMap, colorScheme);
7846
+ next[slideId] = chunkLY5535CF_js.reResolveElementColors(elements, previousMap, colorScheme);
7847
7847
  }
7848
7848
  return next;
7849
7849
  });
@@ -7952,7 +7952,7 @@ function useThemeSwitching(input) {
7952
7952
  }
7953
7953
  try {
7954
7954
  await handler.applyTheme(preset.colorScheme, preset.fontScheme, preset.name);
7955
- const newData = chunk2Q2NFPXA_js.applyThemeToData(data, preset.colorScheme, preset.fontScheme, preset.name);
7955
+ const newData = chunkLY5535CF_js.applyThemeToData(data, preset.colorScheme, preset.fontScheme, preset.name);
7956
7956
  onDataChange(newData);
7957
7957
  onThemeChanged?.(preset);
7958
7958
  } catch (error) {
@@ -7969,7 +7969,7 @@ function useThemeSwitching(input) {
7969
7969
  }
7970
7970
  try {
7971
7971
  await handler.applyTheme(colorScheme, fontScheme ?? {}, themeName);
7972
- const newData = chunk2Q2NFPXA_js.applyThemeToData(data, colorScheme, fontScheme, themeName);
7972
+ const newData = chunkLY5535CF_js.applyThemeToData(data, colorScheme, fontScheme, themeName);
7973
7973
  onDataChange(newData);
7974
7974
  } catch (error) {
7975
7975
  console.error("Failed to switch to custom theme:", error);
@@ -7981,12 +7981,12 @@ function useThemeSwitching(input) {
7981
7981
  if (!data?.theme?.colorScheme) {
7982
7982
  return void 0;
7983
7983
  }
7984
- return chunk2Q2NFPXA_js.THEME_PRESETS.find(
7985
- (p) => chunk2Q2NFPXA_js.themeColorSchemesEqual(data.theme?.colorScheme, p.colorScheme)
7984
+ return chunkLY5535CF_js.THEME_PRESETS.find(
7985
+ (p) => chunkLY5535CF_js.themeColorSchemesEqual(data.theme?.colorScheme, p.colorScheme)
7986
7986
  );
7987
7987
  }, [data?.theme?.colorScheme]);
7988
7988
  return {
7989
- presets: chunk2Q2NFPXA_js.THEME_PRESETS,
7989
+ presets: chunkLY5535CF_js.THEME_PRESETS,
7990
7990
  switchToPreset,
7991
7991
  switchToCustom,
7992
7992
  currentPreset
@@ -8061,7 +8061,7 @@ function usePropertyHandlers(input) {
8061
8061
  }
8062
8062
  try {
8063
8063
  const ab = await file.arrayBuffer();
8064
- const h = new chunk2Q2NFPXA_js.PptxHandler();
8064
+ const h = new chunkLY5535CF_js.PptxHandler();
8065
8065
  const other = await h.load(ab);
8066
8066
  if (!other) {
8067
8067
  return;
@@ -8071,7 +8071,7 @@ function usePropertyHandlers(input) {
8071
8071
  width: canvasSize.width,
8072
8072
  height: canvasSize.height
8073
8073
  };
8074
- setCompareResult(chunk2Q2NFPXA_js.comparePresentation(cur, other));
8074
+ setCompareResult(chunkLY5535CF_js.comparePresentation(cur, other));
8075
8075
  setIsComparePanelOpen(true);
8076
8076
  } catch (err) {
8077
8077
  console.warn("Compare failed:", err);
@@ -8088,7 +8088,7 @@ function usePropertyHandlers(input) {
8088
8088
  if (!diff || diff.status === "unchanged") {
8089
8089
  return;
8090
8090
  }
8091
- setSlides((prev) => chunk2Q2NFPXA_js.applyAcceptSlide(prev, diff));
8091
+ setSlides((prev) => chunkLY5535CF_js.applyAcceptSlide(prev, diff));
8092
8092
  setIsDirty(true);
8093
8093
  },
8094
8094
  [compareResult, setSlides, setIsDirty]
@@ -8099,10 +8099,10 @@ function usePropertyHandlers(input) {
8099
8099
  if (!compareResult) {
8100
8100
  return;
8101
8101
  }
8102
- setSlides((prev) => chunk2Q2NFPXA_js.applyAcceptAllSlides(prev, compareResult));
8102
+ setSlides((prev) => chunkLY5535CF_js.applyAcceptAllSlides(prev, compareResult));
8103
8103
  setIsDirty(true);
8104
8104
  }, [compareResult, setSlides, setIsDirty]);
8105
- const usedFontFamilies = react.useMemo(() => chunk2Q2NFPXA_js.collectUsedFonts(slides), [slides]);
8105
+ const usedFontFamilies = react.useMemo(() => chunkLY5535CF_js.collectUsedFonts(slides), [slides]);
8106
8106
  return {
8107
8107
  handleUpdateNotes,
8108
8108
  handleUpdateSlide,
@@ -8257,7 +8257,7 @@ function useViewerDialogs(input) {
8257
8257
  );
8258
8258
  const embeddedFontKey = (embeddedFontFamilies ?? []).join("\0");
8259
8259
  const fontEmbedding = react.useMemo(
8260
- () => chunk2Q2NFPXA_js.describeFontEmbedding(embeddedFontKey ? embeddedFontKey.split("\0") : []),
8260
+ () => chunkLY5535CF_js.describeFontEmbedding(embeddedFontKey ? embeddedFontKey.split("\0") : []),
8261
8261
  [embeddedFontKey]
8262
8262
  );
8263
8263
  const [embedFontsEnabled, setEmbedFontsEnabled] = react.useState(fontEmbedding.initialEnabled);
@@ -8267,11 +8267,11 @@ function useViewerDialogs(input) {
8267
8267
  setEmbedFontsEnabled(fontEmbedding.initialEnabled);
8268
8268
  }
8269
8269
  const [isNarrowViewport, setIsNarrowViewport] = react.useState(
8270
- () => typeof window !== "undefined" ? chunk2Q2NFPXA_js.isMobileViewport(window.innerWidth, window.innerHeight, viewportIsTouch()) : false
8270
+ () => typeof window !== "undefined" ? chunkLY5535CF_js.isMobileViewport(window.innerWidth, window.innerHeight, viewportIsTouch()) : false
8271
8271
  );
8272
8272
  react.useEffect(() => {
8273
8273
  const handleWindow = () => setIsNarrowViewport(
8274
- chunk2Q2NFPXA_js.isMobileViewport(window.innerWidth, window.innerHeight, viewportIsTouch())
8274
+ chunkLY5535CF_js.isMobileViewport(window.innerWidth, window.innerHeight, viewportIsTouch())
8275
8275
  );
8276
8276
  window.addEventListener("resize", handleWindow);
8277
8277
  return () => window.removeEventListener("resize", handleWindow);
@@ -8424,16 +8424,16 @@ function useViewerDialogs(input) {
8424
8424
  };
8425
8425
  }
8426
8426
  function computeGridSpacingPx2(documentGridSpacing) {
8427
- return chunk2Q2NFPXA_js.computeGridSpacingPx(documentGridSpacing, chunkXW46A7DN_js.GRID_SIZE);
8427
+ return chunkLY5535CF_js.computeGridSpacingPx(documentGridSpacing, chunkIK25LY4C_js.GRID_SIZE);
8428
8428
  }
8429
8429
  function computeVisibleSlideIndexes(slides, activeCustomShowId, customShows, presentationProperties) {
8430
8430
  const activeShow = activeCustomShowId ? customShows.find((show) => show.id === activeCustomShowId) : void 0;
8431
- const authoredRange = chunk2Q2NFPXA_js.resolveAuthoredSlideRange(presentationProperties, slides.length);
8432
- return chunk2Q2NFPXA_js.resolveShowSlideIndexes(slides, activeShow, authoredRange);
8431
+ const authoredRange = chunkLY5535CF_js.resolveAuthoredSlideRange(presentationProperties, slides.length);
8432
+ return chunkLY5535CF_js.resolveShowSlideIndexes(slides, activeShow, authoredRange);
8433
8433
  }
8434
8434
  function computeSlideSectionGroups(slides, sections) {
8435
- return chunk2Q2NFPXA_js.groupSlidesBySection(sections, slides).map((group) => ({
8436
- id: group.section?.id ?? (sections.length > 0 ? chunkXW46A7DN_js.UNGROUPED_SECTION_ID : chunkXW46A7DN_js.DEFAULT_SECTION_GROUP_ID),
8435
+ return chunkLY5535CF_js.groupSlidesBySection(sections, slides).map((group) => ({
8436
+ id: group.section?.id ?? (sections.length > 0 ? chunkIK25LY4C_js.UNGROUPED_SECTION_ID : chunkIK25LY4C_js.DEFAULT_SECTION_GROUP_ID),
8437
8437
  label: group.section?.name ?? (sections.length > 0 ? "Ungrouped Slides" : "Slides"),
8438
8438
  slideIndexes: group.slideIndexes,
8439
8439
  ...group.section?.color !== void 0 ? { color: group.section.color } : {},
@@ -8445,7 +8445,7 @@ function computeMasterPseudoSlide(mode, activeLayout, activeMaster) {
8445
8445
  return void 0;
8446
8446
  }
8447
8447
  const document2 = activeLayout ? { slideMasters: [{ ...activeMaster, layouts: [activeLayout] }] } : { slideMasters: [activeMaster] };
8448
- return chunk2Q2NFPXA_js.masterViewPseudoSlide(document2, {
8448
+ return chunkLY5535CF_js.masterViewPseudoSlide(document2, {
8449
8449
  tab: "slides",
8450
8450
  masterIndex: 0,
8451
8451
  layoutIndex: activeLayout ? 0 : null
@@ -8473,15 +8473,15 @@ function useDerivedSlideState(input) {
8473
8473
  [slides, activeCustomShowId, customShows, presentationProperties]
8474
8474
  );
8475
8475
  const authoredRange = react.useMemo(
8476
- () => chunk2Q2NFPXA_js.resolveAuthoredSlideRange(presentationProperties, slides.length),
8476
+ () => chunkLY5535CF_js.resolveAuthoredSlideRange(presentationProperties, slides.length),
8477
8477
  [presentationProperties, slides.length]
8478
8478
  );
8479
8479
  const slideSectionGroups = react.useMemo(
8480
8480
  () => computeSlideSectionGroups(slides, sections).map((group) => {
8481
- if (group.id === chunkXW46A7DN_js.UNGROUPED_SECTION_ID && group.label === "Ungrouped Slides") {
8481
+ if (group.id === chunkIK25LY4C_js.UNGROUPED_SECTION_ID && group.label === "Ungrouped Slides") {
8482
8482
  return { ...group, label: t("pptx.slides.ungroupedSlides") };
8483
8483
  }
8484
- if (group.id === chunkXW46A7DN_js.DEFAULT_SECTION_GROUP_ID && group.label === "Slides") {
8484
+ if (group.id === chunkIK25LY4C_js.DEFAULT_SECTION_GROUP_ID && group.label === "Slides") {
8485
8485
  return { ...group, label: t("pptx.sections.slides") };
8486
8486
  }
8487
8487
  return group;
@@ -8582,13 +8582,13 @@ function useAnnotationHandlers(input) {
8582
8582
  }, [annotations, setMode, setSlides, history]);
8583
8583
  const handleSetMode = react.useCallback(
8584
8584
  (nextMode) => {
8585
- if (mode === "present" && nextMode !== "present" && !chunk2Q2NFPXA_js.mayLeaveSlideShow()) {
8585
+ if (mode === "present" && nextMode !== "present" && !chunkLY5535CF_js.mayLeaveSlideShow()) {
8586
8586
  return;
8587
8587
  }
8588
8588
  if (nextMode === "present") {
8589
8589
  presentation.enterPresentMode();
8590
8590
  } else if (mode === "present" && annotations.hasAnyAnnotations) {
8591
- chunk2Q2NFPXA_js.stopAllPersistentAudio();
8591
+ chunkLY5535CF_js.stopAllPersistentAudio();
8592
8592
  if (promptKeepInkAnnotations) {
8593
8593
  pendingModeAfterAnnotationsRef.current = nextMode;
8594
8594
  setShowKeepAnnotationsDialog(true);
@@ -8598,7 +8598,7 @@ function useAnnotationHandlers(input) {
8598
8598
  }
8599
8599
  } else {
8600
8600
  if (mode === "present") {
8601
- chunk2Q2NFPXA_js.stopAllPersistentAudio();
8601
+ chunkLY5535CF_js.stopAllPersistentAudio();
8602
8602
  }
8603
8603
  setMode(nextMode);
8604
8604
  }
@@ -8667,13 +8667,13 @@ function useSerialize(input) {
8667
8667
  let processedSlide = slide;
8668
8668
  if (pendingEditId) {
8669
8669
  const updatedElements = slide.elements.map((el) => {
8670
- if (el.id !== pendingEditId || !chunk2Q2NFPXA_js.hasTextProperties(el)) {
8670
+ if (el.id !== pendingEditId || !chunkLY5535CF_js.hasTextProperties(el)) {
8671
8671
  return el;
8672
8672
  }
8673
8673
  return {
8674
8674
  ...el,
8675
8675
  text: pendingEditText,
8676
- textSegments: chunk2Q2NFPXA_js.remapTextToSegments(pendingEditText, el.textSegments, el.textStyle)
8676
+ textSegments: chunkLY5535CF_js.remapTextToSegments(pendingEditText, el.textSegments, el.textStyle)
8677
8677
  };
8678
8678
  });
8679
8679
  if (updatedElements.some((el, i) => el !== slide.elements[i])) {
@@ -8686,19 +8686,19 @@ function useSerialize(input) {
8686
8686
  const pptxGuides = guides.map((g) => ({
8687
8687
  id: g.id,
8688
8688
  orientation: g.axis === "h" ? "horz" : "vert",
8689
- positionEmu: chunk2Q2NFPXA_js.guidePxToEmu(g.position)
8689
+ positionEmu: chunkLY5535CF_js.guidePxToEmu(g.position)
8690
8690
  }));
8691
8691
  return {
8692
8692
  ...processedSlide,
8693
8693
  guides: pptxGuides.length > 0 ? pptxGuides : void 0
8694
8694
  };
8695
8695
  });
8696
- const slidesToSave = chunk2Q2NFPXA_js.buildSaveSlides(slidesWithGuides, templateElementsBySlideId);
8697
- const saveOptions = chunk2Q2NFPXA_js.buildDeckSaveOptions({
8696
+ const slidesToSave = chunkLY5535CF_js.buildSaveSlides(slidesWithGuides, templateElementsBySlideId);
8697
+ const saveOptions = chunkLY5535CF_js.buildDeckSaveOptions({
8698
8698
  // Without this the Slide Size card edited a viewer-only pixel value and
8699
8699
  // the saved `p:sldSz` never moved: passing `slideSize` is the only way a
8700
8700
  // slide-size edit reaches the file.
8701
- slideSize: chunk2Q2NFPXA_js.resolveSlideSizeSelection({ current: slideSizeEmu, canvas: canvasSize }).size,
8701
+ slideSize: chunkLY5535CF_js.resolveSlideSizeSelection({ current: slideSizeEmu, canvas: canvasSize }).size,
8702
8702
  headerFooter,
8703
8703
  presentationProperties,
8704
8704
  viewProperties,
@@ -8717,7 +8717,7 @@ function useSerialize(input) {
8717
8717
  embedFonts,
8718
8718
  outputFormat: format
8719
8719
  });
8720
- return chunk2Q2NFPXA_js.saveDeckWithPassword(handler, slidesToSave, saveOptions, { password, purpose });
8720
+ return chunkLY5535CF_js.saveDeckWithPassword(handler, slidesToSave, saveOptions, { password, purpose });
8721
8721
  },
8722
8722
  [
8723
8723
  slides,
@@ -8758,7 +8758,7 @@ function useRecoveryDetection(input) {
8758
8758
  const onRestore = input.onRestore;
8759
8759
  const openVersionHistory = input.openVersionHistory;
8760
8760
  react.useEffect(() => {
8761
- if (!chunk2Q2NFPXA_js.shouldProbeAutosaveRecovery({
8761
+ if (!chunkLY5535CF_js.shouldProbeAutosaveRecovery({
8762
8762
  alreadyChecked: recoveryCheckedRef.current,
8763
8763
  filePath,
8764
8764
  loading,
@@ -8770,7 +8770,7 @@ function useRecoveryDetection(input) {
8770
8770
  }
8771
8771
  recoveryCheckedRef.current = true;
8772
8772
  void (async () => {
8773
- const offer = await chunk2Q2NFPXA_js.probeAutosaveRecovery(filePath);
8773
+ const offer = await chunkLY5535CF_js.probeAutosaveRecovery(filePath);
8774
8774
  if (!offer) {
8775
8775
  return;
8776
8776
  }
@@ -8783,7 +8783,7 @@ function useRecoveryDetection(input) {
8783
8783
  const record = recordRef.current;
8784
8784
  setPrompt(null);
8785
8785
  if (record && onRestore) {
8786
- onRestore(chunk2Q2NFPXA_js.acceptAutosaveRecovery(record));
8786
+ onRestore(chunkLY5535CF_js.acceptAutosaveRecovery(record));
8787
8787
  }
8788
8788
  recordRef.current = null;
8789
8789
  }, [onRestore]);
@@ -8792,7 +8792,7 @@ function useRecoveryDetection(input) {
8792
8792
  setPrompt(null);
8793
8793
  recordRef.current = null;
8794
8794
  if (record) {
8795
- void chunk2Q2NFPXA_js.discardAutosaveRecovery(record);
8795
+ void chunkLY5535CF_js.discardAutosaveRecovery(record);
8796
8796
  }
8797
8797
  }, []);
8798
8798
  return { prompt, restore, discard };
@@ -8840,11 +8840,11 @@ function usePresentationSetup(input) {
8840
8840
  containerRef,
8841
8841
  content,
8842
8842
  onSetMode: (nextMode) => {
8843
- if (mode === "present" && nextMode !== "present" && !chunk2Q2NFPXA_js.mayLeaveSlideShow()) {
8843
+ if (mode === "present" && nextMode !== "present" && !chunkLY5535CF_js.mayLeaveSlideShow()) {
8844
8844
  return;
8845
8845
  }
8846
8846
  if (mode === "present" && nextMode !== "present") {
8847
- chunk2Q2NFPXA_js.stopAllPersistentAudio();
8847
+ chunkLY5535CF_js.stopAllPersistentAudio();
8848
8848
  stopAnimationSound();
8849
8849
  const exitHandler = exitModeHandlerRef.current;
8850
8850
  if (exitHandler) {
@@ -8912,10 +8912,10 @@ function usePresentationSetup(input) {
8912
8912
  onToggleToolbar: () => annotations.setToolbarVisible(!annotations.toolbarVisible),
8913
8913
  onToggleSubtitles,
8914
8914
  onSaveRehearsalTimings: (timings) => {
8915
- setSlides((prev) => chunk2Q2NFPXA_js.applyRehearsalTimings(prev, timings));
8915
+ setSlides((prev) => chunkLY5535CF_js.applyRehearsalTimings(prev, timings));
8916
8916
  history.markDirty();
8917
8917
  },
8918
- loopContinuously: chunk2Q2NFPXA_js.shouldLoopContinuously(presentationProperties),
8918
+ loopContinuously: chunkLY5535CF_js.shouldLoopContinuously(presentationProperties),
8919
8919
  showWithAnimation: presentationProperties.showWithAnimation,
8920
8920
  useTimings: presentationProperties.advanceMode !== "manual",
8921
8921
  endWithBlackSlide,
@@ -9121,7 +9121,7 @@ function useEditorOperations(input) {
9121
9121
  const { formatPainterActive, setFormatPainterActive, elementLookup } = state;
9122
9122
  react.useEffect(() => {
9123
9123
  if (formatPainterActive && !prevFormatPainterRef.current && selectedElement) {
9124
- copiedFormatRef.current = chunk2Q2NFPXA_js.copyFormatFromElement(selectedElement);
9124
+ copiedFormatRef.current = chunkLY5535CF_js.copyFormatFromElement(selectedElement);
9125
9125
  } else if (!formatPainterActive) {
9126
9126
  copiedFormatRef.current = null;
9127
9127
  }
@@ -9147,12 +9147,12 @@ function useEditorOperations(input) {
9147
9147
  e.stopPropagation();
9148
9148
  const element = elementLookup.get(elementId);
9149
9149
  if (element) {
9150
- const updated = chunk2Q2NFPXA_js.applyFormatToElement(element, copiedFormatRef.current);
9150
+ const updated = chunkLY5535CF_js.applyFormatToElement(element, copiedFormatRef.current);
9151
9151
  const updates = {};
9152
- if (chunk2Q2NFPXA_js.hasShapeProperties(updated)) {
9152
+ if (chunkLY5535CF_js.hasShapeProperties(updated)) {
9153
9153
  updates.shapeStyle = updated.shapeStyle;
9154
9154
  }
9155
- if (chunk2Q2NFPXA_js.hasTextProperties(updated)) {
9155
+ if (chunkLY5535CF_js.hasTextProperties(updated)) {
9156
9156
  updates.textStyle = updated.textStyle;
9157
9157
  }
9158
9158
  ops.updateElementById(elementId, updates);
@@ -9336,10 +9336,10 @@ function useFontInjection({ embeddedFonts, slides }) {
9336
9336
  }
9337
9337
  };
9338
9338
  }, [embeddedFonts]);
9339
- const referencedFamilies = react.useMemo(() => chunk2Q2NFPXA_js.collectReferencedFontFamilies(slides), [slides]);
9339
+ const referencedFamilies = react.useMemo(() => chunkLY5535CF_js.collectReferencedFontFamilies(slides), [slides]);
9340
9340
  react.useEffect(() => {
9341
9341
  let cancelled = false;
9342
- void chunk2Q2NFPXA_js.resolveGoogleWebfontHref(slides, embeddedFonts).then((href) => {
9342
+ void chunkLY5535CF_js.resolveGoogleWebfontHref(slides, embeddedFonts).then((href) => {
9343
9343
  if (cancelled) {
9344
9344
  return null;
9345
9345
  }
@@ -9529,7 +9529,7 @@ function useKeyboardShortcuts(input) {
9529
9529
  inputRef.current = input;
9530
9530
  const handleKeyDown = react.useCallback((e) => {
9531
9531
  const current = inputRef.current;
9532
- const startAction = chunk2Q2NFPXA_js.mapSlideShowStartKey(e, { isPresenting: current.mode === "present" });
9532
+ const startAction = chunkLY5535CF_js.mapSlideShowStartKey(e, { isPresenting: current.mode === "present" });
9533
9533
  if (startAction !== null) {
9534
9534
  e.preventDefault();
9535
9535
  if (startAction === "fromBeginning") {
@@ -9539,7 +9539,7 @@ function useKeyboardShortcuts(input) {
9539
9539
  }
9540
9540
  return;
9541
9541
  }
9542
- const { action, dx, dy } = chunk2Q2NFPXA_js.mapEditorKey(e, {
9542
+ const { action, dx, dy } = chunkLY5535CF_js.mapEditorKey(e, {
9543
9543
  canEdit: current.canEdit,
9544
9544
  // The Slide Master view is an editing surface, not a viewing one.
9545
9545
  // Gating on `mode !== 'edit'` alone made `mapEditorKey` return
@@ -9552,7 +9552,7 @@ function useKeyboardShortcuts(input) {
9552
9552
  hasSelection: current.hasSelection,
9553
9553
  isEditingText: Boolean(current.inlineEditingElementId || current.tableEditorState?.isEditing),
9554
9554
  isDrawing: current.activeTool !== "select",
9555
- isTextInputTarget: chunk2Q2NFPXA_js.isEditorTextInputTarget(e.target)
9555
+ isTextInputTarget: chunkLY5535CF_js.isEditorTextInputTarget(e.target)
9556
9556
  });
9557
9557
  if (action === null) {
9558
9558
  return;
@@ -9882,7 +9882,7 @@ function useViewerIntegration(input) {
9882
9882
  return zoom.scale;
9883
9883
  },
9884
9884
  setZoom(level) {
9885
- zoom.setScale(chunk2Q2NFPXA_js.clampZoomScale(level));
9885
+ zoom.setScale(chunkLY5535CF_js.clampZoomScale(level));
9886
9886
  },
9887
9887
  zoomIn() {
9888
9888
  zoom.handleZoomIn();
@@ -10100,7 +10100,7 @@ function useReducedMotion() {
10100
10100
  }
10101
10101
  function useViewerOptions() {
10102
10102
  const storeRef = react.useRef(null);
10103
- storeRef.current ??= chunk2Q2NFPXA_js.createViewerOptionsStore();
10103
+ storeRef.current ??= chunkLY5535CF_js.createViewerOptionsStore();
10104
10104
  const store = storeRef.current;
10105
10105
  const options = react.useSyncExternalStore(
10106
10106
  (onStoreChange) => store.subscribe(onStoreChange),
@@ -10109,9 +10109,9 @@ function useViewerOptions() {
10109
10109
  );
10110
10110
  return { optionsStore: store, options };
10111
10111
  }
10112
- var KNOWN_TAB_IDS = new Set(chunk2Q2NFPXA_js.TOOLBAR_TABS.map((tab) => tab.id));
10112
+ var KNOWN_TAB_IDS = new Set(chunkLY5535CF_js.TOOLBAR_TABS.map((tab) => tab.id));
10113
10113
  function computeToolbarVisibility(hiddenActions, hiddenTabIds = []) {
10114
- const isHidden = (id) => chunk2Q2NFPXA_js.isActionHidden(id, hiddenActions);
10114
+ const isHidden = (id) => chunkLY5535CF_js.isActionHidden(id, hiddenActions);
10115
10115
  const userHidden = new Set(hiddenTabIds);
10116
10116
  userHidden.delete("file");
10117
10117
  const isTabVisible = (id) => !KNOWN_TAB_IDS.has(id) || !isHidden(id) && !userHidden.has(id);
@@ -10204,12 +10204,12 @@ function useYjsDocumentSync({
10204
10204
  return;
10205
10205
  }
10206
10206
  try {
10207
- const handler = new chunk2Q2NFPXA_js.PptxHandler();
10207
+ const handler = new chunkLY5535CF_js.PptxHandler();
10208
10208
  await handler.load(sourceBytes.buffer);
10209
- const currentSlides = chunk2Q2NFPXA_js.readSlidesFromYDoc(
10209
+ const currentSlides = chunkLY5535CF_js.readSlidesFromYDoc(
10210
10210
  doc
10211
10211
  );
10212
- const slidesToSave = chunk2Q2NFPXA_js.buildSaveSlides(currentSlides, templateElementsBySlideId);
10212
+ const slidesToSave = chunkLY5535CF_js.buildSaveSlides(currentSlides, templateElementsBySlideId);
10213
10213
  const bytes = await handler.save(slidesToSave, getSaveOptions?.());
10214
10214
  config.onWriteBack(bytes);
10215
10215
  } catch {
@@ -10224,10 +10224,10 @@ function useYjsDocumentSync({
10224
10224
  if (!doc || !isConnected) {
10225
10225
  return;
10226
10226
  }
10227
- const docSlides = chunk2Q2NFPXA_js.readSlidesFromYDoc(
10227
+ const docSlides = chunkLY5535CF_js.readSlidesFromYDoc(
10228
10228
  doc
10229
10229
  );
10230
- if (!chunk2Q2NFPXA_js.shouldRoomSlidesReplaceLoad(loadOrigin, docSlides.length)) {
10230
+ if (!chunkLY5535CF_js.shouldRoomSlidesReplaceLoad(loadOrigin, docSlides.length)) {
10231
10231
  return;
10232
10232
  }
10233
10233
  lastSyncedRef.current = JSON.stringify(docSlides);
@@ -10246,11 +10246,11 @@ function useYjsDocumentSync({
10246
10246
  lastSyncedRef.current = serialized;
10247
10247
  void (async () => {
10248
10248
  const factories = await getFactories();
10249
- chunk2Q2NFPXA_js.reconcileSlidesInYDoc(
10249
+ chunkLY5535CF_js.reconcileSlidesInYDoc(
10250
10250
  slides,
10251
10251
  doc,
10252
10252
  factories,
10253
- chunk2Q2NFPXA_js.LOCAL_SYNC_ORIGIN
10253
+ chunkLY5535CF_js.LOCAL_SYNC_ORIGIN
10254
10254
  );
10255
10255
  scheduleWriteBack();
10256
10256
  })();
@@ -10264,10 +10264,10 @@ function useYjsDocumentSync({
10264
10264
  return;
10265
10265
  }
10266
10266
  const handleChange = (_events, transaction) => {
10267
- if (transaction?.origin === chunk2Q2NFPXA_js.LOCAL_SYNC_ORIGIN) {
10267
+ if (transaction?.origin === chunkLY5535CF_js.LOCAL_SYNC_ORIGIN) {
10268
10268
  return;
10269
10269
  }
10270
- const remoteSlides = chunk2Q2NFPXA_js.readSlidesFromYDoc(
10270
+ const remoteSlides = chunkLY5535CF_js.readSlidesFromYDoc(
10271
10271
  doc
10272
10272
  );
10273
10273
  if (remoteSlides.length === 0) {
@@ -10283,7 +10283,7 @@ function useYjsDocumentSync({
10283
10283
  isApplyingRemoteRef.current = false;
10284
10284
  scheduleWriteBack();
10285
10285
  };
10286
- const unobserve = chunk2Q2NFPXA_js.observeYDocSlides(
10286
+ const unobserve = chunkLY5535CF_js.observeYDocSlides(
10287
10287
  doc,
10288
10288
  handleChange
10289
10289
  );
@@ -10321,7 +10321,7 @@ function useBroadcastFollower({
10321
10321
  if (!broadcaster) {
10322
10322
  return;
10323
10323
  }
10324
- if (!chunk2Q2NFPXA_js.shouldAutoFollowBroadcaster({
10324
+ if (!chunkLY5535CF_js.shouldAutoFollowBroadcaster({
10325
10325
  localRole: collab.config.role,
10326
10326
  broadcasterRole: broadcaster.role
10327
10327
  })) {
@@ -10492,7 +10492,7 @@ function subscribeTouchCapability(callback) {
10492
10492
  function useIsMobile() {
10493
10493
  const isTouchDevice = react.useSyncExternalStore(
10494
10494
  subscribeTouchCapability,
10495
- chunk2Q2NFPXA_js.detectTouchDevice,
10495
+ chunkLY5535CF_js.detectTouchDevice,
10496
10496
  () => false
10497
10497
  // server snapshot
10498
10498
  );
@@ -10502,7 +10502,7 @@ function useIsMobile() {
10502
10502
  const [viewportHeight, setViewportHeight] = react.useState(
10503
10503
  () => typeof window === "undefined" ? 768 : window.innerHeight
10504
10504
  );
10505
- const [orientation, setOrientation] = react.useState(chunk2Q2NFPXA_js.detectOrientation);
10505
+ const [orientation, setOrientation] = react.useState(chunkLY5535CF_js.detectOrientation);
10506
10506
  const [isVirtualKeyboardOpen, setIsVirtualKeyboardOpen] = react.useState(false);
10507
10507
  const [initialViewportHeight] = react.useState(
10508
10508
  () => typeof window !== "undefined" ? window.innerHeight : 800
@@ -10523,7 +10523,7 @@ function useIsMobile() {
10523
10523
  return;
10524
10524
  }
10525
10525
  const handleOrientationChange = () => {
10526
- setOrientation(chunk2Q2NFPXA_js.detectOrientation());
10526
+ setOrientation(chunkLY5535CF_js.detectOrientation());
10527
10527
  };
10528
10528
  if (screen.orientation) {
10529
10529
  screen.orientation.addEventListener("change", handleOrientationChange);
@@ -10553,7 +10553,7 @@ function useIsMobile() {
10553
10553
  window.addEventListener("resize", handleResize);
10554
10554
  return () => window.removeEventListener("resize", handleResize);
10555
10555
  }, [isTouchDevice, initialViewportHeight]);
10556
- const { isMobile, isTablet, isDesktop } = chunk2Q2NFPXA_js.deriveViewportBreakpoints(
10556
+ const { isMobile, isTablet, isDesktop } = chunkLY5535CF_js.deriveViewportBreakpoints(
10557
10557
  viewportWidth,
10558
10558
  viewportHeight,
10559
10559
  isTouchDevice
@@ -10584,10 +10584,10 @@ function useTouchGestures(input) {
10584
10584
  if (!el || !enabled) {
10585
10585
  return;
10586
10586
  }
10587
- const recognizer = chunk2Q2NFPXA_js.createTouchGestureRecognizer({
10587
+ const recognizer = chunkLY5535CF_js.createTouchGestureRecognizer({
10588
10588
  getScale: () => scaleRef.current,
10589
- minScale: chunk2Q2NFPXA_js.MIN_ZOOM_SCALE,
10590
- maxScale: chunk2Q2NFPXA_js.MAX_ZOOM_SCALE,
10589
+ minScale: chunkLY5535CF_js.MIN_ZOOM_SCALE,
10590
+ maxScale: chunkLY5535CF_js.MAX_ZOOM_SCALE,
10591
10591
  callbacks: {
10592
10592
  onPinchZoom: (newScale) => callbacksRef.current.onPinchZoom?.(newScale),
10593
10593
  onSwipe: (direction) => callbacksRef.current.onSwipe?.(direction),
@@ -10627,7 +10627,7 @@ function scrollFocusedIntoView(keyboardInset) {
10627
10627
  return;
10628
10628
  }
10629
10629
  const rect = active.getBoundingClientRect();
10630
- const delta = chunk2Q2NFPXA_js.computeScrollDelta(
10630
+ const delta = chunkLY5535CF_js.computeScrollDelta(
10631
10631
  { top: rect.top, bottom: rect.bottom },
10632
10632
  window.innerHeight,
10633
10633
  keyboardInset
@@ -10647,8 +10647,8 @@ function useKeyboardInsets(enabled = true) {
10647
10647
  return;
10648
10648
  }
10649
10649
  const update = () => {
10650
- const metrics = chunk2Q2NFPXA_js.readViewportMetrics(window);
10651
- const inset = metrics ? chunk2Q2NFPXA_js.computeKeyboardInset(metrics) : 0;
10650
+ const metrics = chunkLY5535CF_js.readViewportMetrics(window);
10651
+ const inset = metrics ? chunkLY5535CF_js.computeKeyboardInset(metrics) : 0;
10652
10652
  setKeyboardInset(inset);
10653
10653
  if (inset > 0) {
10654
10654
  window.requestAnimationFrame(() => scrollFocusedIntoView(inset));
@@ -10659,8 +10659,8 @@ function useKeyboardInsets(enabled = true) {
10659
10659
  vv.addEventListener("scroll", update);
10660
10660
  const onFocusIn = () => {
10661
10661
  window.requestAnimationFrame(() => {
10662
- const metrics = chunk2Q2NFPXA_js.readViewportMetrics(window);
10663
- const inset = metrics ? chunk2Q2NFPXA_js.computeKeyboardInset(metrics) : 0;
10662
+ const metrics = chunkLY5535CF_js.readViewportMetrics(window);
10663
+ const inset = metrics ? chunkLY5535CF_js.computeKeyboardInset(metrics) : 0;
10664
10664
  if (inset > 0) {
10665
10665
  scrollFocusedIntoView(inset);
10666
10666
  }
@@ -10673,7 +10673,7 @@ function useKeyboardInsets(enabled = true) {
10673
10673
  document.removeEventListener("focusin", onFocusIn);
10674
10674
  };
10675
10675
  }, [enabled]);
10676
- return { keyboardInset, isKeyboardOpen: chunk2Q2NFPXA_js.isKeyboardOpen(keyboardInset) };
10676
+ return { keyboardInset, isKeyboardOpen: chunkLY5535CF_js.isKeyboardOpen(keyboardInset) };
10677
10677
  }
10678
10678
 
10679
10679
  // src/viewer/hooks/useViewerBuildingBlocks-canvas-props.ts
@@ -10702,21 +10702,21 @@ function buildCanvasProps(input) {
10702
10702
  } = input;
10703
10703
  const effectiveSlide = mode === "master" ? masterPseudoSlide : activeSlide;
10704
10704
  const effectiveTemplateElements = mode === "master" ? s.activeLayout ? s.activeMaster?.elements ?? [] : [] : templateElements;
10705
- const fieldContext = chunk2Q2NFPXA_js.buildFieldSubstitutionContext({
10705
+ const fieldContext = chunkLY5535CF_js.buildFieldSubstitutionContext({
10706
10706
  headerFooter: s.headerFooter,
10707
10707
  customProperties: s.customProperties,
10708
10708
  slide: activeSlide
10709
10709
  });
10710
10710
  const tableStyleContext = s.theme || s.tableStyleMap ? { theme: s.theme, tableStyleMap: s.tableStyleMap } : void 0;
10711
10711
  const openExternalUrl = (url, target) => {
10712
- if (chunk2Q2NFPXA_js.shouldConfirmExternalHyperlink(viewerOptions, url) && !window.confirm(buildHyperlinkConfirmMessage(url))) {
10712
+ if (chunkLY5535CF_js.shouldConfirmExternalHyperlink(viewerOptions, url) && !window.confirm(buildHyperlinkConfirmMessage(url))) {
10713
10713
  return;
10714
10714
  }
10715
- chunk2Q2NFPXA_js.safeOpenUrl(url, target);
10715
+ chunkLY5535CF_js.safeOpenUrl(url, target);
10716
10716
  };
10717
10717
  const handleActionClick = (elementId, action) => {
10718
10718
  if (mode === "present") {
10719
- const resolved = chunk2Q2NFPXA_js.resolvePresentationAction(action, { slideCount: slides.length });
10719
+ const resolved = chunkLY5535CF_js.resolvePresentationAction(action, { slideCount: slides.length });
10720
10720
  if (resolved.intent.kind === "openUrl") {
10721
10721
  openExternalUrl(resolved.intent.url);
10722
10722
  return;
@@ -10727,9 +10727,9 @@ function buildCanvasProps(input) {
10727
10727
  }
10728
10728
  };
10729
10729
  const handleHyperlinkClick = (url, target) => {
10730
- if (chunk2Q2NFPXA_js.isPpactionUrl(url)) {
10730
+ if (chunkLY5535CF_js.isPpactionUrl(url)) {
10731
10731
  if (mode === "present") {
10732
- const parsed = chunk2Q2NFPXA_js.parsePpactionUrl(url);
10732
+ const parsed = chunkLY5535CF_js.parsePpactionUrl(url);
10733
10733
  if (parsed) {
10734
10734
  presentation.handlePresentationAction({
10735
10735
  action: parsed.action,
@@ -10835,7 +10835,7 @@ function buildCanvasProps(input) {
10835
10835
 
10836
10836
  // src/viewer/hooks/useScopedLayoutOptions.ts
10837
10837
  function scopeLayoutOptionsToActiveSlide(options, activeSlide) {
10838
- return chunk2Q2NFPXA_js.scopeLayoutOptionsToSlide(options, activeSlide?.layoutPath);
10838
+ return chunkLY5535CF_js.scopeLayoutOptionsToSlide(options, activeSlide?.layoutPath);
10839
10839
  }
10840
10840
 
10841
10841
  // src/viewer/hooks/useViewerBuildingBlocks-toolbar-handlers.ts
@@ -10848,7 +10848,7 @@ function buildToolbarAnimationHandlers(input) {
10848
10848
  const current = activeSlide.animations ?? [];
10849
10849
  if (group === "motionPath") {
10850
10850
  propertyHandlers.handleUpdateSlide({
10851
- animations: chunk2Q2NFPXA_js.applyMotionPathPreset(current, selectedElement.id, preset)
10851
+ animations: chunkLY5535CF_js.applyMotionPathPreset(current, selectedElement.id, preset)
10852
10852
  });
10853
10853
  return;
10854
10854
  }
@@ -11044,7 +11044,7 @@ function buildToolbarProps(input) {
11044
11044
  onOpenFile,
11045
11045
  onOpenRecentFile,
11046
11046
  onCreatePresentation: (templateId) => {
11047
- s.setSlides(chunk2Q2NFPXA_js.createBackstagePresentation(templateId));
11047
+ s.setSlides(chunkLY5535CF_js.createBackstagePresentation(templateId));
11048
11048
  s.setActiveSlideIndex(0);
11049
11049
  s.setSelectedElementId(null);
11050
11050
  s.setSelectedElementIds([]);
@@ -11074,7 +11074,7 @@ function buildToolbarProps(input) {
11074
11074
  loadLayoutPreviews: input.loadLayoutPreviews,
11075
11075
  onInsertSlideFromLayout: slideOps.handleInsertSlideFromLayout,
11076
11076
  onInsertSlideFromTemplate: slideOps.handleInsertSlideFromTemplate,
11077
- templateScheme: chunk2Q2NFPXA_js.templateSchemeFromTheme(s.theme?.colorScheme),
11077
+ templateScheme: chunkLY5535CF_js.templateSchemeFromTheme(s.theme?.colorScheme),
11078
11078
  customShows: s.customShows,
11079
11079
  activeCustomShowId: s.activeCustomShowId,
11080
11080
  onSetActiveCustomShowId: s.setActiveCustomShowId,
@@ -11115,7 +11115,7 @@ function buildToolbarProps(input) {
11115
11115
  isCommentsPanelOpen: s.isInspectorPaneOpen,
11116
11116
  slideCommentCount: activeSlide?.comments?.length ?? 0,
11117
11117
  formatPainterActive: s.formatPainterActive,
11118
- canActivateFormatPainter: chunk2Q2NFPXA_js.hasCopyableFormat(selectedElement),
11118
+ canActivateFormatPainter: chunkLY5535CF_js.hasCopyableFormat(selectedElement),
11119
11119
  onToggleFormatPainter: () => s.setFormatPainterActive((p) => !p),
11120
11120
  isSelectionPaneOpen: s.isSelectionPaneOpen,
11121
11121
  onToggleSelectionPane: () => s.setIsSelectionPaneOpen((p) => !p),
@@ -11193,7 +11193,7 @@ function useViewerBuildingBlocksCore(input) {
11193
11193
  headerFooter: state.headerFooter,
11194
11194
  loading,
11195
11195
  error,
11196
- maxHistoryEntries: chunk2Q2NFPXA_js.resolveHistoryDepth(viewerOptions),
11196
+ maxHistoryEntries: chunkLY5535CF_js.resolveHistoryDepth(viewerOptions),
11197
11197
  hasActivePointerInteraction,
11198
11198
  pointerCommitNonce: state.pointerCommitNonce,
11199
11199
  onDirty: markDocumentDirty,
@@ -11218,7 +11218,7 @@ function useViewerBuildingBlocksCore(input) {
11218
11218
  documentGridSpacing: state.viewProperties?.gridSpacing
11219
11219
  });
11220
11220
  const themeColorMap = react.useMemo(
11221
- () => state.theme?.colorScheme ? chunk2Q2NFPXA_js.buildThemeColorMap(state.theme.colorScheme) : void 0,
11221
+ () => state.theme?.colorScheme ? chunkLY5535CF_js.buildThemeColorMap(state.theme.colorScheme) : void 0,
11222
11222
  [state.theme?.colorScheme]
11223
11223
  );
11224
11224
  const { presentation, annotations, actionSoundHandlerRef, setExitModeHandler } = usePresentationSetup({
@@ -11267,7 +11267,7 @@ function useViewerBuildingBlocksCore(input) {
11267
11267
  gridSpacingPx,
11268
11268
  // Multiplied against the pre-existing 2x baseline; see the matching
11269
11269
  // comment in `PowerPointViewer.tsx`.
11270
- imageExportScale: 2 * chunk2Q2NFPXA_js.resolveImageResolutionScale(viewerOptions),
11270
+ imageExportScale: 2 * chunkLY5535CF_js.resolveImageResolutionScale(viewerOptions),
11271
11271
  viewerOptions
11272
11272
  };
11273
11273
  }
@@ -11283,7 +11283,7 @@ function useCompatibilityToastsState() {
11283
11283
  }
11284
11284
  function useReadOnlyRecommendationState(content) {
11285
11285
  const [recommendation, setRecommendation] = react.useState(
11286
- () => chunk2Q2NFPXA_js.readOnlyRecommendation(void 0)
11286
+ () => chunkLY5535CF_js.readOnlyRecommendation(void 0)
11287
11287
  );
11288
11288
  const [modifyVerifier, setModifyVerifier] = react.useState(void 0);
11289
11289
  const [bannerHidden, setBannerHidden] = react.useState(false);
@@ -11323,7 +11323,7 @@ function useReadOnlyRecommendationState(content) {
11323
11323
  async (password) => {
11324
11324
  setCheckingPassword(true);
11325
11325
  try {
11326
- const result = await chunk2Q2NFPXA_js.checkModifyPassword(modifyVerifier, password);
11326
+ const result = await chunkLY5535CF_js.checkModifyPassword(modifyVerifier, password);
11327
11327
  if (result.ok) {
11328
11328
  unlock();
11329
11329
  } else {
@@ -11368,9 +11368,9 @@ function useViewPreferencesSync(input) {
11368
11368
  setShowGuides
11369
11369
  } = input;
11370
11370
  react.useEffect(() => {
11371
- const seeded = chunk2Q2NFPXA_js.viewerPreferencesFromViewProperties(
11371
+ const seeded = chunkLY5535CF_js.viewerPreferencesFromViewProperties(
11372
11372
  { viewProperties },
11373
- { ...chunk2Q2NFPXA_js.DEFAULT_VIEWER_PREFERENCES, snapToGrid, snapToObjects: snapToShape, showGuides }
11373
+ { ...chunkLY5535CF_js.DEFAULT_VIEWER_PREFERENCES, snapToGrid, snapToObjects: snapToShape, showGuides }
11374
11374
  );
11375
11375
  setSnapToGrid(seeded.snapToGrid);
11376
11376
  setSnapToShape(seeded.snapToObjects ?? snapToShape);
@@ -11380,7 +11380,7 @@ function useViewPreferencesSync(input) {
11380
11380
  (prefsOverride) => {
11381
11381
  setViewProperties((prev) => {
11382
11382
  const merged = {
11383
- ...chunk2Q2NFPXA_js.DEFAULT_VIEWER_PREFERENCES,
11383
+ ...chunkLY5535CF_js.DEFAULT_VIEWER_PREFERENCES,
11384
11384
  snapToGrid,
11385
11385
  snapToObjects: snapToShape,
11386
11386
  showGuides,
@@ -11388,7 +11388,7 @@ function useViewPreferencesSync(input) {
11388
11388
  gridSpacingCy: prev?.gridSpacing?.cy,
11389
11389
  ...prefsOverride
11390
11390
  };
11391
- const patch = chunk2Q2NFPXA_js.viewPropertiesPatchFromPreferences(merged);
11391
+ const patch = chunkLY5535CF_js.viewPropertiesPatchFromPreferences(merged);
11392
11392
  return {
11393
11393
  ...prev,
11394
11394
  slideViewPr: { ...prev?.slideViewPr, ...patch.slideViewPr },
@@ -11607,7 +11607,7 @@ function useViewerBuildingBlocks(input) {
11607
11607
  }, [incomingContent]);
11608
11608
  const onOpenFile = react.useCallback(() => {
11609
11609
  void (async () => {
11610
- const picked = await chunk2Q2NFPXA_js.openPptxFile();
11610
+ const picked = await chunkLY5535CF_js.openPptxFile();
11611
11611
  if (picked) {
11612
11612
  setContent(picked.buffer);
11613
11613
  }
@@ -11615,7 +11615,7 @@ function useViewerBuildingBlocks(input) {
11615
11615
  }, []);
11616
11616
  const onOpenRecentFile = react.useCallback((key) => {
11617
11617
  void (async () => {
11618
- const bytes = await chunk2Q2NFPXA_js.readBackstageRecentFile(key);
11618
+ const bytes = await chunkLY5535CF_js.readBackstageRecentFile(key);
11619
11619
  if (bytes) {
11620
11620
  setContent(bytes);
11621
11621
  }