pptx-react-viewer 2.9.0 → 2.10.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 (120) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/dist/{AiChatPanel-6W6ZBAGU.mjs → AiChatPanel-35CHYS5N.mjs} +4 -4
  3. package/dist/AiChatPanel-35CHYS5N.mjs.br +0 -0
  4. package/dist/AiChatPanel-35CHYS5N.mjs.gz +0 -0
  5. package/dist/{AiChatPanel-MALC32TM.js → AiChatPanel-KTMWRUD5.js} +23 -23
  6. package/dist/AiChatPanel-KTMWRUD5.js.br +0 -0
  7. package/dist/AiChatPanel-KTMWRUD5.js.gz +0 -0
  8. package/dist/{Model3DScene-57HZ4NVD.mjs → Model3DScene-2VMN3B65.mjs} +1 -1
  9. package/dist/Model3DScene-2VMN3B65.mjs.br +0 -0
  10. package/dist/Model3DScene-2VMN3B65.mjs.gz +0 -0
  11. package/dist/{Model3DScene-76R2YXSO.js → Model3DScene-TMNUKCL6.js} +2 -2
  12. package/dist/Model3DScene-TMNUKCL6.js.br +0 -0
  13. package/dist/Model3DScene-TMNUKCL6.js.gz +0 -0
  14. package/dist/{SurfaceChart3DScene-JGOQNHSU.mjs → SurfaceChart3DScene-GKRDDN2U.mjs} +1 -1
  15. package/dist/{SurfaceChart3DScene-JGOQNHSU.mjs.br → SurfaceChart3DScene-GKRDDN2U.mjs.br} +0 -0
  16. package/dist/SurfaceChart3DScene-GKRDDN2U.mjs.gz +0 -0
  17. package/dist/{SurfaceChart3DScene-2QZZTBV4.js → SurfaceChart3DScene-KPNP3QD5.js} +2 -2
  18. package/dist/SurfaceChart3DScene-KPNP3QD5.js.br +0 -0
  19. package/dist/SurfaceChart3DScene-KPNP3QD5.js.gz +0 -0
  20. package/dist/{chunk-D6SHCB4V.js → chunk-A7HLINZU.js} +328 -324
  21. package/dist/chunk-A7HLINZU.js.br +0 -0
  22. package/dist/chunk-A7HLINZU.js.gz +0 -0
  23. package/dist/{chunk-JPTO6P5K.mjs → chunk-FY2AFXKP.mjs} +8 -47
  24. package/dist/chunk-FY2AFXKP.mjs.br +0 -0
  25. package/dist/chunk-FY2AFXKP.mjs.gz +0 -0
  26. package/dist/{chunk-IKISUZKE.js → chunk-H74UXL4Q.js} +340 -17
  27. package/dist/chunk-H74UXL4Q.js.br +0 -0
  28. package/dist/{chunk-IKISUZKE.js.gz → chunk-H74UXL4Q.js.gz} +0 -0
  29. package/dist/{chunk-34BUZNKO.js → chunk-IJVDNQLG.js} +252 -291
  30. package/dist/chunk-IJVDNQLG.js.br +0 -0
  31. package/dist/chunk-IJVDNQLG.js.gz +0 -0
  32. package/dist/{chunk-6UXRNLHD.js → chunk-JWMXOYSX.js} +1330 -968
  33. package/dist/chunk-JWMXOYSX.js.br +0 -0
  34. package/dist/chunk-JWMXOYSX.js.gz +0 -0
  35. package/dist/{chunk-NQLVK23T.mjs → chunk-LCG7WBAG.mjs} +403 -41
  36. package/dist/chunk-LCG7WBAG.mjs.br +0 -0
  37. package/dist/chunk-LCG7WBAG.mjs.gz +0 -0
  38. package/dist/{chunk-6OLS3EJW.mjs → chunk-LXTKPSIG.mjs} +1 -1
  39. package/dist/chunk-LXTKPSIG.mjs.br +0 -0
  40. package/dist/chunk-LXTKPSIG.mjs.gz +0 -0
  41. package/dist/{chunk-2JDWFMIK.js → chunk-MMK4K3QI.js} +1 -0
  42. package/dist/chunk-MMK4K3QI.js.br +0 -0
  43. package/dist/{chunk-2JDWFMIK.js.gz → chunk-MMK4K3QI.js.gz} +0 -0
  44. package/dist/{chunk-4FO4JMTN.mjs → chunk-OHPF2HTP.mjs} +7 -3
  45. package/dist/chunk-OHPF2HTP.mjs.br +0 -0
  46. package/dist/chunk-OHPF2HTP.mjs.gz +0 -0
  47. package/dist/{chunk-CD434OFE.mjs → chunk-SL3XPERE.mjs} +1 -0
  48. package/dist/chunk-SL3XPERE.mjs.br +0 -0
  49. package/dist/{chunk-CD434OFE.mjs.gz → chunk-SL3XPERE.mjs.gz} +0 -0
  50. package/dist/{chunk-YEM2VOAP.js → chunk-SPJR6MPI.js} +3 -3
  51. package/dist/chunk-SPJR6MPI.js.br +0 -0
  52. package/dist/chunk-SPJR6MPI.js.gz +0 -0
  53. package/dist/{chunk-L47Y62L6.mjs → chunk-TJ55KUWH.mjs} +320 -17
  54. package/dist/chunk-TJ55KUWH.mjs.br +0 -0
  55. package/dist/{chunk-L47Y62L6.mjs.gz → chunk-TJ55KUWH.mjs.gz} +0 -0
  56. package/dist/i18n.js +4 -4
  57. package/dist/i18n.js.br +0 -0
  58. package/dist/i18n.js.gz +0 -0
  59. package/dist/i18n.mjs +1 -1
  60. package/dist/i18n.mjs.br +0 -0
  61. package/dist/i18n.mjs.gz +0 -0
  62. package/dist/index.d.ts +2 -0
  63. package/dist/index.js +36 -36
  64. package/dist/index.js.br +0 -0
  65. package/dist/index.js.gz +0 -0
  66. package/dist/index.mjs +6 -6
  67. package/dist/index.mjs.br +0 -0
  68. package/dist/index.mjs.gz +0 -0
  69. package/dist/internals.d.ts +4 -0
  70. package/dist/internals.d.ts.map +1 -1
  71. package/dist/internals.js +79 -79
  72. package/dist/internals.js.br +0 -0
  73. package/dist/internals.js.gz +0 -0
  74. package/dist/internals.mjs +4 -4
  75. package/dist/internals.mjs.br +0 -0
  76. package/dist/internals.mjs.gz +0 -0
  77. package/dist/pptx-viewer.css +1 -1
  78. package/dist/pptx-viewer.css.br +0 -0
  79. package/dist/pptx-viewer.css.gz +0 -0
  80. package/dist/{useViewerBuildingBlocks-C59NY1qZ.d.ts → useViewerBuildingBlocks-CpUwhBD5.d.ts} +3 -1
  81. package/dist/useViewerBuildingBlocks-CpUwhBD5.d.ts.map +1 -0
  82. package/dist/viewer/index.js +22 -22
  83. package/dist/viewer/index.js.br +0 -0
  84. package/dist/viewer/index.js.gz +0 -0
  85. package/dist/viewer/index.mjs +6 -6
  86. package/dist/viewer/index.mjs.br +0 -0
  87. package/dist/viewer/index.mjs.gz +0 -0
  88. package/package.json +1 -1
  89. package/dist/AiChatPanel-6W6ZBAGU.mjs.br +0 -0
  90. package/dist/AiChatPanel-6W6ZBAGU.mjs.gz +0 -0
  91. package/dist/AiChatPanel-MALC32TM.js.br +0 -0
  92. package/dist/AiChatPanel-MALC32TM.js.gz +0 -0
  93. package/dist/Model3DScene-57HZ4NVD.mjs.br +0 -0
  94. package/dist/Model3DScene-57HZ4NVD.mjs.gz +0 -0
  95. package/dist/Model3DScene-76R2YXSO.js.br +0 -0
  96. package/dist/Model3DScene-76R2YXSO.js.gz +0 -0
  97. package/dist/SurfaceChart3DScene-2QZZTBV4.js.br +0 -0
  98. package/dist/SurfaceChart3DScene-2QZZTBV4.js.gz +0 -0
  99. package/dist/SurfaceChart3DScene-JGOQNHSU.mjs.gz +0 -0
  100. package/dist/chunk-2JDWFMIK.js.br +0 -0
  101. package/dist/chunk-34BUZNKO.js.br +0 -0
  102. package/dist/chunk-34BUZNKO.js.gz +0 -0
  103. package/dist/chunk-4FO4JMTN.mjs.br +0 -0
  104. package/dist/chunk-4FO4JMTN.mjs.gz +0 -0
  105. package/dist/chunk-6OLS3EJW.mjs.br +0 -0
  106. package/dist/chunk-6OLS3EJW.mjs.gz +0 -0
  107. package/dist/chunk-6UXRNLHD.js.br +0 -0
  108. package/dist/chunk-6UXRNLHD.js.gz +0 -0
  109. package/dist/chunk-CD434OFE.mjs.br +0 -0
  110. package/dist/chunk-D6SHCB4V.js.br +0 -0
  111. package/dist/chunk-D6SHCB4V.js.gz +0 -0
  112. package/dist/chunk-IKISUZKE.js.br +0 -0
  113. package/dist/chunk-JPTO6P5K.mjs.br +0 -0
  114. package/dist/chunk-JPTO6P5K.mjs.gz +0 -0
  115. package/dist/chunk-L47Y62L6.mjs.br +0 -0
  116. package/dist/chunk-NQLVK23T.mjs.br +0 -0
  117. package/dist/chunk-NQLVK23T.mjs.gz +0 -0
  118. package/dist/chunk-YEM2VOAP.js.br +0 -0
  119. package/dist/chunk-YEM2VOAP.js.gz +0 -0
  120. package/dist/useViewerBuildingBlocks-C59NY1qZ.d.ts.map +0 -1
@@ -1,8 +1,8 @@
1
1
  'use strict';
2
2
 
3
- var chunk34BUZNKO_js = require('./chunk-34BUZNKO.js');
4
- var chunk2JDWFMIK_js = require('./chunk-2JDWFMIK.js');
5
- var chunkIKISUZKE_js = require('./chunk-IKISUZKE.js');
3
+ var chunkIJVDNQLG_js = require('./chunk-IJVDNQLG.js');
4
+ var chunkMMK4K3QI_js = require('./chunk-MMK4K3QI.js');
5
+ var chunkH74UXL4Q_js = require('./chunk-H74UXL4Q.js');
6
6
  var react = require('react');
7
7
  var JSZip = require('jszip');
8
8
  var reactI18next = require('react-i18next');
@@ -14,7 +14,7 @@ var JSZip__default = /*#__PURE__*/_interopDefault(JSZip);
14
14
  function useVirtualizedSlides({
15
15
  totalItems,
16
16
  itemHeight,
17
- overscan = chunkIKISUZKE_js.DEFAULT_VIRTUAL_OVERSCAN
17
+ overscan = chunkH74UXL4Q_js.DEFAULT_VIRTUAL_OVERSCAN
18
18
  }) {
19
19
  const scrollContainerRef = react.useRef(null);
20
20
  const [scrollTop, setScrollTop] = react.useState(0);
@@ -44,7 +44,7 @@ function useVirtualizedSlides({
44
44
  resizeObserver?.disconnect();
45
45
  };
46
46
  }, []);
47
- const range = chunkIKISUZKE_js.computeVirtualRange(totalItems, itemHeight, scrollTop, viewportHeight, overscan);
47
+ const range = chunkH74UXL4Q_js.computeVirtualRange(totalItems, itemHeight, scrollTop, viewportHeight, overscan);
48
48
  const safeItemHeight = Math.max(itemHeight, 1);
49
49
  const scrollToIndex = react.useCallback(
50
50
  (index, behavior = "smooth") => {
@@ -107,7 +107,7 @@ function usePresenceTracking({
107
107
  awareness.setLocalStateField("presence", state);
108
108
  lastBroadcastRef.current = Date.now();
109
109
  };
110
- if (elapsed >= chunkIKISUZKE_js.BROADCAST_THROTTLE_MS) {
110
+ if (elapsed >= chunkH74UXL4Q_js.BROADCAST_THROTTLE_MS) {
111
111
  if (pendingBroadcastRef.current) {
112
112
  clearTimeout(pendingBroadcastRef.current);
113
113
  pendingBroadcastRef.current = null;
@@ -117,7 +117,7 @@ function usePresenceTracking({
117
117
  pendingBroadcastRef.current = setTimeout(() => {
118
118
  pendingBroadcastRef.current = null;
119
119
  flush();
120
- }, chunkIKISUZKE_js.BROADCAST_THROTTLE_MS - elapsed);
120
+ }, chunkH74UXL4Q_js.BROADCAST_THROTTLE_MS - elapsed);
121
121
  }
122
122
  },
123
123
  [awareness, userName, userColor, userAvatar, role]
@@ -142,7 +142,7 @@ function usePresenceTracking({
142
142
  return;
143
143
  }
144
144
  const handleChange = () => {
145
- const users = chunkIKISUZKE_js.derivePresenceList(
145
+ const users = chunkH74UXL4Q_js.derivePresenceList(
146
146
  awareness.getStates(),
147
147
  localClientId,
148
148
  canvasWidth,
@@ -194,7 +194,7 @@ function useYjsProvider({ config }) {
194
194
  const departureRef = react.useRef(null);
195
195
  const gateRef = react.useRef(null);
196
196
  if (!gateRef.current) {
197
- gateRef.current = chunkIKISUZKE_js.createSyncGate(() => setSynced(true));
197
+ gateRef.current = chunkH74UXL4Q_js.createSyncGate(() => setSynced(true));
198
198
  }
199
199
  const teardown = react.useCallback(() => {
200
200
  if (timeoutRef.current) {
@@ -214,7 +214,7 @@ function useYjsProvider({ config }) {
214
214
  const buildCleanup = react.useCallback(
215
215
  (provider, yDoc) => () => {
216
216
  announceDeparture();
217
- chunkIKISUZKE_js.clearLocalAwareness(provider.awareness);
217
+ chunkH74UXL4Q_js.clearLocalAwareness(provider.awareness);
218
218
  provider.destroy();
219
219
  yDoc.destroy();
220
220
  setDoc(null);
@@ -239,9 +239,9 @@ function useYjsProvider({ config }) {
239
239
  if (config.authToken) {
240
240
  opts.password = config.authToken;
241
241
  }
242
- const roomId = chunkIKISUZKE_js.validateRoomId(config.roomId);
242
+ const roomId = chunkH74UXL4Q_js.validateRoomId(config.roomId);
243
243
  const provider = new WebrtcProvider(roomId, yDoc, opts);
244
- departureRef.current = chunkIKISUZKE_js.createDepartureChannel(roomId, provider.awareness);
244
+ departureRef.current = chunkH74UXL4Q_js.createDepartureChannel(roomId, provider.awareness);
245
245
  setDoc(yDoc);
246
246
  setAwareness(provider.awareness);
247
247
  setClientId(provider.awareness.clientID);
@@ -283,13 +283,13 @@ function useYjsProvider({ config }) {
283
283
  if (!config) {
284
284
  return;
285
285
  }
286
- const roomId = chunkIKISUZKE_js.validateRoomId(config.roomId);
287
- const transport = config.transport ?? chunkIKISUZKE_js.resolveTransportForServerUrl(config.serverUrl);
286
+ const roomId = chunkH74UXL4Q_js.validateRoomId(config.roomId);
287
+ const transport = config.transport ?? chunkH74UXL4Q_js.resolveTransportForServerUrl(config.serverUrl);
288
288
  if (transport === "webrtc") {
289
289
  await initWebrtc();
290
290
  return;
291
291
  }
292
- if (chunkIKISUZKE_js.isMixedContentBlocked(config.serverUrl)) {
292
+ if (chunkH74UXL4Q_js.isMixedContentBlocked(config.serverUrl)) {
293
293
  console.warn(
294
294
  `[pptx-viewer] Refusing to connect: insecure ws:// server "${config.serverUrl}" is blocked from a secure (https) page. Use a wss:// URL.`
295
295
  );
@@ -303,7 +303,7 @@ function useYjsProvider({ config }) {
303
303
  const provider = new WebsocketProvider(config.serverUrl, roomId, yDoc, {
304
304
  params: config.authToken ? { token: config.authToken } : void 0
305
305
  });
306
- departureRef.current = chunkIKISUZKE_js.createDepartureChannel(roomId, provider.awareness);
306
+ departureRef.current = chunkH74UXL4Q_js.createDepartureChannel(roomId, provider.awareness);
307
307
  let connected = false;
308
308
  const handleStatus = (event) => {
309
309
  if (event.status === "connected") {
@@ -343,7 +343,7 @@ function useYjsProvider({ config }) {
343
343
  provider.off("status", handleStatus);
344
344
  provider.off("sync", handleSynced);
345
345
  announceDeparture();
346
- chunkIKISUZKE_js.clearLocalAwareness(provider.awareness);
346
+ chunkH74UXL4Q_js.clearLocalAwareness(provider.awareness);
347
347
  provider.destroy();
348
348
  yDoc.destroy();
349
349
  setDoc(null);
@@ -352,7 +352,7 @@ function useYjsProvider({ config }) {
352
352
  cleanupRef.current = null;
353
353
  setStatus("error");
354
354
  }
355
- }, chunkIKISUZKE_js.CONNECTION_TIMEOUT_MS);
355
+ }, chunkH74UXL4Q_js.CONNECTION_TIMEOUT_MS);
356
356
  }
357
357
  setDoc(yDoc);
358
358
  setAwareness(provider.awareness);
@@ -361,7 +361,7 @@ function useYjsProvider({ config }) {
361
361
  provider.off("status", handleStatus);
362
362
  provider.off("sync", handleSynced);
363
363
  announceDeparture();
364
- chunkIKISUZKE_js.clearLocalAwareness(provider.awareness);
364
+ chunkH74UXL4Q_js.clearLocalAwareness(provider.awareness);
365
365
  provider.destroy();
366
366
  yDoc.destroy();
367
367
  setDoc(null);
@@ -387,7 +387,7 @@ function useYjsProvider({ config }) {
387
387
  ]);
388
388
  react.useEffect(() => {
389
389
  init();
390
- const disposeTeardown = chunkIKISUZKE_js.registerCollaborationTeardown({
390
+ const disposeTeardown = chunkH74UXL4Q_js.registerCollaborationTeardown({
391
391
  leave: teardown,
392
392
  rejoin: init
393
393
  });
@@ -408,7 +408,7 @@ function useCollaborativeState({
408
408
  canvasWidth,
409
409
  canvasHeight
410
410
  }) {
411
- const userColor = chunkIKISUZKE_js.sanitizeColor(config?.userColor, "#6366f1");
411
+ const userColor = chunkH74UXL4Q_js.sanitizeColor(config?.userColor, "#6366f1");
412
412
  const { status, awareness, doc, clientId, synced, retry } = useYjsProvider({ config });
413
413
  const { remoteUsers, broadcastPresence } = usePresenceTracking({
414
414
  awareness,
@@ -517,8 +517,8 @@ function useEditorHistory(input) {
517
517
  width: canvasSize.width,
518
518
  height: canvasSize.height,
519
519
  activeSlideIndex,
520
- slides: slides.map(chunkIKISUZKE_js.cloneSlide),
521
- templateElementsBySlideId: chunkIKISUZKE_js.cloneTemplateElementsBySlideId(templateElementsBySlideId),
520
+ slides: slides.map(chunkH74UXL4Q_js.cloneSlide),
521
+ templateElementsBySlideId: chunkH74UXL4Q_js.cloneTemplateElementsBySlideId(templateElementsBySlideId),
522
522
  ...actionLabel ? { actionLabel } : {}
523
523
  };
524
524
  },
@@ -531,9 +531,9 @@ function useEditorHistory(input) {
531
531
  width: snapshot.width,
532
532
  height: snapshot.height
533
533
  });
534
- setSlides(snapshot.slides.map(chunkIKISUZKE_js.cloneSlide));
534
+ setSlides(snapshot.slides.map(chunkH74UXL4Q_js.cloneSlide));
535
535
  setTemplateElementsBySlideId(
536
- chunkIKISUZKE_js.cloneTemplateElementsBySlideId(snapshot.templateElementsBySlideId)
536
+ chunkH74UXL4Q_js.cloneTemplateElementsBySlideId(snapshot.templateElementsBySlideId)
537
537
  );
538
538
  setActiveSlideIndex(Math.min(snapshot.activeSlideIndex, maxSlideIndex));
539
539
  setSelectedElementIds([]);
@@ -567,8 +567,8 @@ function useEditorHistory(input) {
567
567
  const currentSnapshot = buildHistorySnapshot();
568
568
  historyFutureRef.current.push(currentSnapshot);
569
569
  isApplyingHistoryRef.current = true;
570
- const nextSnapshot = chunk34BUZNKO_js.cloneHistorySnapshot(previousSnapshot);
571
- lastHistorySnapshotRef.current = chunk34BUZNKO_js.cloneHistorySnapshot(nextSnapshot);
570
+ const nextSnapshot = chunkIJVDNQLG_js.cloneHistorySnapshot(previousSnapshot);
571
+ lastHistorySnapshotRef.current = chunkIJVDNQLG_js.cloneHistorySnapshot(nextSnapshot);
572
572
  lastHistorySerializedRef.current = JSON.stringify(nextSnapshot);
573
573
  applyHistorySnapshot(nextSnapshot);
574
574
  updateHistoryAvailability();
@@ -589,8 +589,8 @@ function useEditorHistory(input) {
589
589
  const currentSnapshot = buildHistorySnapshot();
590
590
  historyPastRef.current.push(currentSnapshot);
591
591
  isApplyingHistoryRef.current = true;
592
- const targetSnapshot = chunk34BUZNKO_js.cloneHistorySnapshot(nextSnapshot);
593
- lastHistorySnapshotRef.current = chunk34BUZNKO_js.cloneHistorySnapshot(targetSnapshot);
592
+ const targetSnapshot = chunkIJVDNQLG_js.cloneHistorySnapshot(nextSnapshot);
593
+ lastHistorySnapshotRef.current = chunkIJVDNQLG_js.cloneHistorySnapshot(targetSnapshot);
594
594
  lastHistorySerializedRef.current = JSON.stringify(targetSnapshot);
595
595
  applyHistorySnapshot(targetSnapshot);
596
596
  updateHistoryAvailability();
@@ -608,7 +608,7 @@ function useEditorHistory(input) {
608
608
  historyPastRef.current = [];
609
609
  historyFutureRef.current = [];
610
610
  if (initialSnapshot) {
611
- const clonedInitial = chunk34BUZNKO_js.cloneHistorySnapshot(initialSnapshot);
611
+ const clonedInitial = chunkIJVDNQLG_js.cloneHistorySnapshot(initialSnapshot);
612
612
  lastHistorySnapshotRef.current = clonedInitial;
613
613
  lastHistorySerializedRef.current = JSON.stringify(clonedInitial);
614
614
  } else {
@@ -649,18 +649,18 @@ function useEditorHistory(input) {
649
649
  }
650
650
  const previousSnapshot = lastHistorySnapshotRef.current;
651
651
  if (!previousSnapshot) {
652
- lastHistorySnapshotRef.current = chunk34BUZNKO_js.cloneHistorySnapshot(snapshot);
652
+ lastHistorySnapshotRef.current = chunkIJVDNQLG_js.cloneHistorySnapshot(snapshot);
653
653
  lastHistorySerializedRef.current = serialized;
654
654
  lastCheapHashRef.current = cheapHash;
655
655
  updateHistoryAvailability();
656
656
  return;
657
657
  }
658
- historyPastRef.current.push(chunk34BUZNKO_js.cloneHistorySnapshot(previousSnapshot));
658
+ historyPastRef.current.push(chunkIJVDNQLG_js.cloneHistorySnapshot(previousSnapshot));
659
659
  while (historyPastRef.current.length > Math.max(1, maxHistoryEntries)) {
660
660
  historyPastRef.current.shift();
661
661
  }
662
662
  historyFutureRef.current = [];
663
- lastHistorySnapshotRef.current = chunk34BUZNKO_js.cloneHistorySnapshot(snapshot);
663
+ lastHistorySnapshotRef.current = chunkIJVDNQLG_js.cloneHistorySnapshot(snapshot);
664
664
  lastHistorySerializedRef.current = serialized;
665
665
  lastCheapHashRef.current = cheapHash;
666
666
  updateHistoryAvailability();
@@ -749,7 +749,7 @@ function useZoomViewport({
749
749
  if (!wrapper || !canvasViewport) {
750
750
  return;
751
751
  }
752
- const boundedScale = chunkIKISUZKE_js.clampZoomScale(nextScale);
752
+ const boundedScale = chunkH74UXL4Q_js.clampZoomScale(nextScale);
753
753
  const nextEditorScale = fitScale * boundedScale;
754
754
  const centerX = (bounds.minX + bounds.maxX) / 2;
755
755
  const centerY = (bounds.minY + bounds.maxY) / 2;
@@ -764,10 +764,10 @@ function useZoomViewport({
764
764
  [fitScale]
765
765
  );
766
766
  const handleZoomIn = react.useCallback(() => {
767
- setScale((currentScale) => chunkIKISUZKE_js.zoomInScale(currentScale));
767
+ setScale((currentScale) => chunkH74UXL4Q_js.zoomInScale(currentScale));
768
768
  }, []);
769
769
  const handleZoomOut = react.useCallback(() => {
770
- setScale((currentScale) => chunkIKISUZKE_js.zoomOutScale(currentScale));
770
+ setScale((currentScale) => chunkH74UXL4Q_js.zoomOutScale(currentScale));
771
771
  }, []);
772
772
  const handleResetZoom = react.useCallback(() => {
773
773
  setScale(1);
@@ -786,29 +786,29 @@ function useZoomViewport({
786
786
  selectedElements.forEach((element) => {
787
787
  minX = Math.min(minX, element.x);
788
788
  minY = Math.min(minY, element.y);
789
- maxX = Math.max(maxX, element.x + Math.max(element.width, chunk34BUZNKO_js.MIN_ELEMENT_SIZE));
790
- maxY = Math.max(maxY, element.y + Math.max(element.height, chunk34BUZNKO_js.MIN_ELEMENT_SIZE));
789
+ maxX = Math.max(maxX, element.x + Math.max(element.width, chunkIJVDNQLG_js.MIN_ELEMENT_SIZE));
790
+ maxY = Math.max(maxY, element.y + Math.max(element.height, chunkIJVDNQLG_js.MIN_ELEMENT_SIZE));
791
791
  });
792
792
  if (!Number.isFinite(minX) || !Number.isFinite(minY) || !Number.isFinite(maxX) || !Number.isFinite(maxY)) {
793
793
  return;
794
794
  }
795
795
  const selectionBounds = { minX, minY, maxX, maxY };
796
- const boundsWidth = Math.max(selectionBounds.maxX - selectionBounds.minX, chunk34BUZNKO_js.MIN_ELEMENT_SIZE);
797
- const boundsHeight = Math.max(selectionBounds.maxY - selectionBounds.minY, chunk34BUZNKO_js.MIN_ELEMENT_SIZE);
796
+ const boundsWidth = Math.max(selectionBounds.maxX - selectionBounds.minX, chunkIJVDNQLG_js.MIN_ELEMENT_SIZE);
797
+ const boundsHeight = Math.max(selectionBounds.maxY - selectionBounds.minY, chunkIJVDNQLG_js.MIN_ELEMENT_SIZE);
798
798
  const availableWidth = Math.max(
799
- effectiveEditorDimensions.width - chunk34BUZNKO_js.ZOOM_TO_SELECTION_PADDING,
800
- chunk34BUZNKO_js.MIN_ELEMENT_SIZE
799
+ effectiveEditorDimensions.width - chunkIJVDNQLG_js.ZOOM_TO_SELECTION_PADDING,
800
+ chunkIJVDNQLG_js.MIN_ELEMENT_SIZE
801
801
  );
802
802
  const availableHeight = Math.max(
803
- effectiveEditorDimensions.height - chunk34BUZNKO_js.ZOOM_TO_SELECTION_PADDING,
804
- chunk34BUZNKO_js.MIN_ELEMENT_SIZE
803
+ effectiveEditorDimensions.height - chunkIJVDNQLG_js.ZOOM_TO_SELECTION_PADDING,
804
+ chunkIJVDNQLG_js.MIN_ELEMENT_SIZE
805
805
  );
806
806
  const targetEditorScale = Math.min(
807
807
  availableWidth / boundsWidth,
808
808
  availableHeight / boundsHeight
809
809
  );
810
810
  const safeFitScale = fitScale > Number.EPSILON ? fitScale : Number.EPSILON;
811
- const nextScale = chunkIKISUZKE_js.clampZoomScale(targetEditorScale / safeFitScale);
811
+ const nextScale = chunkH74UXL4Q_js.clampZoomScale(targetEditorScale / safeFitScale);
812
812
  setScale(nextScale);
813
813
  window.requestAnimationFrame(() => {
814
814
  window.requestAnimationFrame(() => {
@@ -828,7 +828,7 @@ function useZoomViewport({
828
828
  }
829
829
  event.preventDefault();
830
830
  const delta = event.deltaY * -1e-3;
831
- setScale((currentScale) => chunkIKISUZKE_js.clampZoomScale(currentScale + delta));
831
+ setScale((currentScale) => chunkH74UXL4Q_js.clampZoomScale(currentScale + delta));
832
832
  }, []);
833
833
  react.useEffect(() => {
834
834
  const viewport = canvasViewportRef.current;
@@ -905,7 +905,7 @@ function applyAnimationGroupSteps(group, onPlayActionSound, setPresentationEleme
905
905
  const command = step.command;
906
906
  const timer = window.setTimeout(
907
907
  () => {
908
- chunk34BUZNKO_js.executeMediaCommand(command);
908
+ chunkIJVDNQLG_js.executeMediaCommand(command);
909
909
  },
910
910
  Math.max(0, step.delayMs)
911
911
  );
@@ -1021,7 +1021,7 @@ function useAnimationPlayback(input) {
1021
1021
  (controller, group) => {
1022
1022
  driveBuildReveal(
1023
1023
  controller,
1024
- chunkIKISUZKE_js.PresentationAnimationController.collectBuildStepIds(group),
1024
+ chunkH74UXL4Q_js.PresentationAnimationController.collectBuildStepIds(group),
1025
1025
  setPresentationElementStates,
1026
1026
  buildRafRef
1027
1027
  );
@@ -1084,7 +1084,7 @@ function useAnimationPlayback(input) {
1084
1084
  setHoverTriggerShapeIds(/* @__PURE__ */ new Set());
1085
1085
  return;
1086
1086
  }
1087
- const controller = chunkIKISUZKE_js.PresentationAnimationController.fromSlide(slide);
1087
+ const controller = chunkH74UXL4Q_js.PresentationAnimationController.fromSlide(slide);
1088
1088
  controllerRef.current = controller;
1089
1089
  setPresentationKeyframesCss(controller.keyframesCss);
1090
1090
  setInteractiveTriggerShapeIds(controller.interactiveTriggerShapeIds);
@@ -1232,7 +1232,7 @@ function useAnimationPlayback(input) {
1232
1232
  }))
1233
1233
  );
1234
1234
  entranceAnimations.forEach((animation, animationIndex) => {
1235
- const delay = chunkIKISUZKE_js.computeEntranceAnimationDelay(animation.delayMs, animationIndex);
1235
+ const delay = chunkH74UXL4Q_js.computeEntranceAnimationDelay(animation.delayMs, animationIndex);
1236
1236
  const timer = window.setTimeout(() => {
1237
1237
  setPresentationAnimations(
1238
1238
  (previousAnimations) => previousAnimations.map(
@@ -1269,12 +1269,12 @@ function useAnimationPlayback(input) {
1269
1269
  presentationTimersRef
1270
1270
  };
1271
1271
  }
1272
- var PRESENTER_CHANNEL_NAME = chunkIKISUZKE_js.PRESENTATION_CHANNEL_NAME;
1273
- var AUDIENCE_HASH = chunkIKISUZKE_js.PRESENTATION_HASH;
1274
- var PRESENTER_MSG_ORIGIN = chunkIKISUZKE_js.PRESENTATION_MESSAGE_ORIGIN;
1275
- var AUDIENCE_NONCE_KEY = chunkIKISUZKE_js.PRESENTATION_NONCE_KEY;
1272
+ var PRESENTER_CHANNEL_NAME = chunkH74UXL4Q_js.PRESENTATION_CHANNEL_NAME;
1273
+ var AUDIENCE_HASH = chunkH74UXL4Q_js.PRESENTATION_HASH;
1274
+ var PRESENTER_MSG_ORIGIN = chunkH74UXL4Q_js.PRESENTATION_MESSAGE_ORIGIN;
1275
+ var AUDIENCE_NONCE_KEY = chunkH74UXL4Q_js.PRESENTATION_NONCE_KEY;
1276
1276
  function generateSessionId() {
1277
- return chunkIKISUZKE_js.createPresentationSessionId();
1277
+ return chunkH74UXL4Q_js.createPresentationSessionId();
1278
1278
  }
1279
1279
  function parseAudienceNonce() {
1280
1280
  const hash = window.location.hash;
@@ -1310,7 +1310,7 @@ function usePresenterWindow(input) {
1310
1310
  }, []);
1311
1311
  const swapDisplays = react.useCallback(async () => {
1312
1312
  const audience = audienceWindowRef.current;
1313
- return audience && !audience.closed ? chunkIKISUZKE_js.swapPresentationWindows(window, audience) : false;
1313
+ return audience && !audience.closed ? chunkH74UXL4Q_js.swapPresentationWindows(window, audience) : false;
1314
1314
  }, []);
1315
1315
  const syncSlideToAudience = react.useCallback(
1316
1316
  (slideIndex) => {
@@ -1374,7 +1374,7 @@ function usePresenterWindow(input) {
1374
1374
  pollTimerRef.current = null;
1375
1375
  }
1376
1376
  if (closingSessionId) {
1377
- void chunkIKISUZKE_js.clearAudienceContent(closingSessionId);
1377
+ void chunkH74UXL4Q_js.clearAudienceContent(closingSessionId);
1378
1378
  }
1379
1379
  }, [getChannel]);
1380
1380
  const openAudienceWindow = react.useCallback(() => {
@@ -1392,10 +1392,10 @@ function usePresenterWindow(input) {
1392
1392
  audienceWindowRef.current = blankWin;
1393
1393
  const sessionId = generateSessionId();
1394
1394
  sessionIdRef.current = sessionId;
1395
- const audienceUrl = chunkIKISUZKE_js.buildPresentationAudienceUrl(window.location.href, sessionId);
1396
- void chunkIKISUZKE_js.resolveAudienceScreenPlacement(window).then((placement) => {
1395
+ const audienceUrl = chunkH74UXL4Q_js.buildPresentationAudienceUrl(window.location.href, sessionId);
1396
+ void chunkH74UXL4Q_js.resolveAudienceScreenPlacement(window).then((placement) => {
1397
1397
  if (placement && audienceWindowRef.current === blankWin && !blankWin.closed) {
1398
- chunkIKISUZKE_js.placeAudienceWindow(blankWin, placement);
1398
+ chunkH74UXL4Q_js.placeAudienceWindow(blankWin, placement);
1399
1399
  }
1400
1400
  return void 0;
1401
1401
  });
@@ -1425,7 +1425,7 @@ function usePresenterWindow(input) {
1425
1425
  }
1426
1426
  };
1427
1427
  if (content) {
1428
- void chunkIKISUZKE_js.storeAudienceContent(content, sessionId).then(() => navigateOrClose(true)).catch(() => navigateOrClose(false));
1428
+ void chunkH74UXL4Q_js.storeAudienceContent(content, sessionId).then(() => navigateOrClose(true)).catch(() => navigateOrClose(false));
1429
1429
  } else {
1430
1430
  navigateOrClose(true);
1431
1431
  }
@@ -1451,7 +1451,7 @@ function usePresenterWindow(input) {
1451
1451
  }
1452
1452
  const handleMessage = (event) => {
1453
1453
  const message = event.data;
1454
- if (chunkIKISUZKE_js.isPresentationSessionMessage(message) && message.type === "audience-ready" && message.sessionId === sessionIdRef.current) {
1454
+ if (chunkH74UXL4Q_js.isPresentationSessionMessage(message) && message.type === "audience-ready" && message.sessionId === sessionIdRef.current) {
1455
1455
  syncStateToAudience(snapshotRef.current);
1456
1456
  }
1457
1457
  };
@@ -1480,7 +1480,7 @@ function usePresenterWindow(input) {
1480
1480
  react.useEffect(() => {
1481
1481
  const handleBeforeUnload = () => {
1482
1482
  if (sessionIdRef.current) {
1483
- void chunkIKISUZKE_js.clearAudienceContent(sessionIdRef.current);
1483
+ void chunkH74UXL4Q_js.clearAudienceContent(sessionIdRef.current);
1484
1484
  }
1485
1485
  };
1486
1486
  window.addEventListener("beforeunload", handleBeforeUnload);
@@ -1542,7 +1542,7 @@ function useAudienceMode(input) {
1542
1542
  }
1543
1543
  channel.onmessage = (event) => {
1544
1544
  const data = event.data;
1545
- if (!chunkIKISUZKE_js.isPresentationSessionMessage(data) || data.origin !== PRESENTER_MSG_ORIGIN) {
1545
+ if (!chunkH74UXL4Q_js.isPresentationSessionMessage(data) || data.origin !== PRESENTER_MSG_ORIGIN) {
1546
1546
  return;
1547
1547
  }
1548
1548
  if (expectedSessionId && data.sessionId !== expectedSessionId) {
@@ -1558,16 +1558,16 @@ function useAudienceMode(input) {
1558
1558
  }
1559
1559
  if (data.type === "presenter-exit") {
1560
1560
  if (expectedSessionId) {
1561
- void chunkIKISUZKE_js.clearAudienceContent(expectedSessionId);
1561
+ void chunkH74UXL4Q_js.clearAudienceContent(expectedSessionId);
1562
1562
  }
1563
- if (chunkIKISUZKE_js.endAudienceDisplay(window)) {
1563
+ if (chunkH74UXL4Q_js.endAudienceDisplay(window)) {
1564
1564
  handlers.onPresenterEnded?.();
1565
1565
  }
1566
1566
  }
1567
1567
  };
1568
1568
  if (expectedSessionId) {
1569
1569
  channel.postMessage({
1570
- origin: chunkIKISUZKE_js.PRESENTATION_MESSAGE_ORIGIN,
1570
+ origin: chunkH74UXL4Q_js.PRESENTATION_MESSAGE_ORIGIN,
1571
1571
  type: "audience-ready",
1572
1572
  sessionId: expectedSessionId
1573
1573
  });
@@ -1599,14 +1599,14 @@ function usePresentationKeyboard(input) {
1599
1599
  presentationSlideIndex,
1600
1600
  setShowRehearsalSummary
1601
1601
  } = input;
1602
- const keyBufferRef = react.useRef(chunkIKISUZKE_js.createPresentationKeyBuffer());
1602
+ const keyBufferRef = react.useRef(chunkH74UXL4Q_js.createPresentationKeyBuffer());
1603
1603
  react.useEffect(() => {
1604
- if (mode !== "present" || !chunkIKISUZKE_js.acceptsPresentationInput()) {
1605
- keyBufferRef.current = chunkIKISUZKE_js.createPresentationKeyBuffer();
1604
+ if (mode !== "present" || !chunkH74UXL4Q_js.acceptsPresentationInput()) {
1605
+ keyBufferRef.current = chunkH74UXL4Q_js.createPresentationKeyBuffer();
1606
1606
  return;
1607
1607
  }
1608
1608
  const handleKeyDown = (event) => {
1609
- const mapped = chunkIKISUZKE_js.mapPresentationKey(event, keyBufferRef.current);
1609
+ const mapped = chunkH74UXL4Q_js.mapPresentationKey(event, keyBufferRef.current);
1610
1610
  if (mapped.action === "none") {
1611
1611
  return;
1612
1612
  }
@@ -1814,7 +1814,7 @@ function handlePresentationActionImpl(action, deps) {
1814
1814
  return;
1815
1815
  }
1816
1816
  if (action.url && !actionStr.includes("hlinksldjump")) {
1817
- if (chunkIKISUZKE_js.isUrlSafe(action.url)) {
1817
+ if (chunkH74UXL4Q_js.isUrlSafe(action.url)) {
1818
1818
  window.open(action.url, "_blank", "noopener,noreferrer");
1819
1819
  }
1820
1820
  }
@@ -1824,7 +1824,7 @@ function handlePresentationActionImpl(action, deps) {
1824
1824
  function executeSlideTransition(nextSlideIndex, deps) {
1825
1825
  const incomingSlide = deps.slides[nextSlideIndex];
1826
1826
  const transition = incomingSlide?.transition;
1827
- const durationMs = deps.playTransition ? chunkIKISUZKE_js.resolveTransitionDurationMs(transition) : 0;
1827
+ const durationMs = deps.playTransition ? chunkH74UXL4Q_js.resolveTransitionDurationMs(transition) : 0;
1828
1828
  deps.clearPresentationTimers();
1829
1829
  deps.setPresentationSlideIndex(nextSlideIndex);
1830
1830
  deps.onSetActiveSlideIndex(nextSlideIndex);
@@ -1883,7 +1883,7 @@ function useSlideNavigation(input) {
1883
1883
  });
1884
1884
  const scheduleAutoAdvanceForSlide = react.useCallback(
1885
1885
  (slideIndex) => {
1886
- const delayMs = chunkIKISUZKE_js.resolveAutoAdvanceDelayMs(slides[slideIndex], { useTimings });
1886
+ const delayMs = chunkH74UXL4Q_js.resolveAutoAdvanceDelayMs(slides[slideIndex], { useTimings });
1887
1887
  if (delayMs === void 0) {
1888
1888
  return;
1889
1889
  }
@@ -2073,17 +2073,17 @@ function useZoomNavigation(input) {
2073
2073
  };
2074
2074
  }
2075
2075
  function usePresenterConsole(slideIndex) {
2076
- const timerRef = react.useRef(chunkIKISUZKE_js.createPresenterTimer());
2077
- const [snapshot, setSnapshot] = react.useState(() => chunkIKISUZKE_js.createInitialPresentationSnapshot(slideIndex));
2076
+ const timerRef = react.useRef(chunkH74UXL4Q_js.createPresenterTimer());
2077
+ const [snapshot, setSnapshot] = react.useState(() => chunkH74UXL4Q_js.createInitialPresentationSnapshot(slideIndex));
2078
2078
  const patch = react.useCallback((value) => {
2079
- setSnapshot((current) => chunkIKISUZKE_js.mergePresentationSnapshot(current, value));
2079
+ setSnapshot((current) => chunkH74UXL4Q_js.mergePresentationSnapshot(current, value));
2080
2080
  }, []);
2081
2081
  react.useEffect(() => patch({ slideIndex }), [patch, slideIndex]);
2082
2082
  react.useEffect(() => {
2083
2083
  const timer = window.setInterval(() => {
2084
2084
  patch({
2085
2085
  paused: timerRef.current.paused,
2086
- elapsedMs: chunkIKISUZKE_js.presenterElapsed(timerRef.current)
2086
+ elapsedMs: chunkH74UXL4Q_js.presenterElapsed(timerRef.current)
2087
2087
  });
2088
2088
  }, 1e3);
2089
2089
  return () => window.clearInterval(timer);
@@ -2093,19 +2093,19 @@ function usePresenterConsole(slideIndex) {
2093
2093
  applyAudienceSnapshot: setSnapshot,
2094
2094
  setBlackout: (blackout) => patch({ blackout }),
2095
2095
  toggleTimer: () => {
2096
- timerRef.current = chunkIKISUZKE_js.togglePresenterTimer(timerRef.current);
2096
+ timerRef.current = chunkH74UXL4Q_js.togglePresenterTimer(timerRef.current);
2097
2097
  patch({
2098
2098
  paused: timerRef.current.paused,
2099
- elapsedMs: chunkIKISUZKE_js.presenterElapsed(timerRef.current)
2099
+ elapsedMs: chunkH74UXL4Q_js.presenterElapsed(timerRef.current)
2100
2100
  });
2101
2101
  },
2102
2102
  resetTimer: () => {
2103
- timerRef.current = chunkIKISUZKE_js.resetPresenterTimer();
2103
+ timerRef.current = chunkH74UXL4Q_js.resetPresenterTimer();
2104
2104
  patch({ paused: false, elapsedMs: 0 });
2105
2105
  },
2106
2106
  stepZoom: (direction) => setSnapshot(
2107
- (current) => chunkIKISUZKE_js.mergePresentationSnapshot(current, {
2108
- zoom: chunkIKISUZKE_js.stepPresenterZoom(
2107
+ (current) => chunkH74UXL4Q_js.mergePresentationSnapshot(current, {
2108
+ zoom: chunkH74UXL4Q_js.stepPresenterZoom(
2109
2109
  current.zoom ?? { scale: 1, originX: 0.5, originY: 0.5 },
2110
2110
  direction
2111
2111
  )
@@ -2226,7 +2226,7 @@ function usePresentationMode(input) {
2226
2226
  });
2227
2227
  const movePresentationSlide = react.useCallback(
2228
2228
  (direction, trigger = "explicit") => {
2229
- if (!chunkIKISUZKE_js.acceptsPresentationInput()) {
2229
+ if (!chunkH74UXL4Q_js.acceptsPresentationInput()) {
2230
2230
  return;
2231
2231
  }
2232
2232
  if (endOfShowVisible) {
@@ -2428,11 +2428,11 @@ function usePresentationMode(input) {
2428
2428
  if (!transitionOverlay || transitionOverlay.transition.type !== "morph") {
2429
2429
  return void 0;
2430
2430
  }
2431
- return chunkIKISUZKE_js.buildMorphTransitionPlan(
2431
+ return chunkH74UXL4Q_js.buildMorphTransitionPlan(
2432
2432
  slides[transitionOverlay.outgoingSlideIndex],
2433
2433
  slides[transitionOverlay.incomingSlideIndex],
2434
2434
  transitionOverlay.durationMs,
2435
- chunkIKISUZKE_js.morphOptionToMode(transitionOverlay.transition.morphOption)
2435
+ chunkH74UXL4Q_js.morphOptionToMode(transitionOverlay.transition.morphOption)
2436
2436
  );
2437
2437
  }, [transitionOverlay, slides]);
2438
2438
  const morphedElementStates = react.useMemo(() => {
@@ -2738,7 +2738,7 @@ function findInSlides(slides, findQuery, findMatchCase) {
2738
2738
  const normalised = findMatchCase ? findQuery : findQuery.toLowerCase();
2739
2739
  slides.forEach((slide, slideIndex) => {
2740
2740
  for (const element of slide.elements || []) {
2741
- if (!chunkIKISUZKE_js.hasTextProperties(element)) {
2741
+ if (!chunkH74UXL4Q_js.hasTextProperties(element)) {
2742
2742
  continue;
2743
2743
  }
2744
2744
  const segments = element.textSegments ?? [];
@@ -2789,7 +2789,7 @@ function applyFindReplacements(slides, toReplace, replaceQuery) {
2789
2789
  continue;
2790
2790
  }
2791
2791
  const element = slide.elements[elIdx];
2792
- if (!chunkIKISUZKE_js.hasTextProperties(element)) {
2792
+ if (!chunkH74UXL4Q_js.hasTextProperties(element)) {
2793
2793
  continue;
2794
2794
  }
2795
2795
  const segments = [...element.textSegments ?? []];
@@ -3387,7 +3387,7 @@ function useViewerCoreState(_input) {
3387
3387
  const shapeAdjustmentDragStateRef = react.useRef(null);
3388
3388
  const marqueeStateRef = react.useRef(null);
3389
3389
  const isDrawingRef = react.useRef(false);
3390
- const livePatcher = react.useMemo(() => chunkIKISUZKE_js.createCollaborationLivePatcher(), []);
3390
+ const livePatcher = react.useMemo(() => chunkH74UXL4Q_js.createCollaborationLivePatcher(), []);
3391
3391
  react.useEffect(() => () => livePatcher.dispose(), [livePatcher]);
3392
3392
  const slidesRef = react.useRef([]);
3393
3393
  const [mode, setMode] = react.useState("edit");
@@ -3396,8 +3396,8 @@ function useViewerCoreState(_input) {
3396
3396
  const [slides, setSlides] = react.useState([]);
3397
3397
  const [templateElementsBySlideId, setTemplateElementsBySlideId] = react.useState({});
3398
3398
  const [canvasSize, setCanvasSize] = react.useState({
3399
- width: chunk34BUZNKO_js.DEFAULT_CANVAS_WIDTH,
3400
- height: chunk34BUZNKO_js.DEFAULT_CANVAS_HEIGHT
3399
+ width: chunkIJVDNQLG_js.DEFAULT_CANVAS_WIDTH,
3400
+ height: chunkIJVDNQLG_js.DEFAULT_CANVAS_HEIGHT
3401
3401
  });
3402
3402
  const [activeSlideIndex, setActiveSlideIndex] = react.useState(0);
3403
3403
  const [selectedElementId, setSelectedElementId] = react.useState(null);
@@ -3417,7 +3417,7 @@ function useViewerCoreState(_input) {
3417
3417
  const resolved = typeof value === "function" ? value(inlineEditingTextRef.current) : value;
3418
3418
  inlineEditingTextRef.current = resolved;
3419
3419
  setInlineEditingTextBase(value);
3420
- chunkIKISUZKE_js.publishLiveInlineText(
3420
+ chunkH74UXL4Q_js.publishLiveInlineText(
3421
3421
  livePatcher,
3422
3422
  slidesRef.current[activeSlideIndexRef.current],
3423
3423
  inlineEditingElementIdRef.current,
@@ -3585,6 +3585,7 @@ function useViewerUIState() {
3585
3585
  const [isSidebarCollapsed, setIsSidebarCollapsed] = react.useState(false);
3586
3586
  const [sidebarPanelMode, setSidebarPanelMode] = react.useState("properties");
3587
3587
  const [showSlideSorter, setShowSlideSorter] = react.useState(false);
3588
+ const [showReadingView, setShowReadingView] = react.useState(false);
3588
3589
  const [isShortcutHelpOpen, setIsShortcutHelpOpen] = react.useState(false);
3589
3590
  const [isAccessibilityPanelOpen, setIsAccessibilityPanelOpen] = react.useState(false);
3590
3591
  const [accessibilityIssues, setAccessibilityIssues] = react.useState([]);
@@ -3631,6 +3632,8 @@ function useViewerUIState() {
3631
3632
  setSidebarPanelMode,
3632
3633
  showSlideSorter,
3633
3634
  setShowSlideSorter,
3635
+ showReadingView,
3636
+ setShowReadingView,
3634
3637
  isShortcutHelpOpen,
3635
3638
  setIsShortcutHelpOpen,
3636
3639
  isAccessibilityPanelOpen,
@@ -3745,7 +3748,7 @@ function useLoadContent({
3745
3748
  );
3746
3749
  }
3747
3750
  const previousHandler = handlerRef.current;
3748
- const handler = new chunkIKISUZKE_js.PptxHandler();
3751
+ const handler = new chunkH74UXL4Q_js.PptxHandler();
3749
3752
  const parsed = await handler.load(buffer);
3750
3753
  if (cancelled || token !== renderTokenRef.current) {
3751
3754
  handler.dispose();
@@ -3757,7 +3760,7 @@ function useLoadContent({
3757
3760
  handlerRef.current = null;
3758
3761
  const mediaElements = [];
3759
3762
  for (const slide of parsed.slides) {
3760
- chunkIKISUZKE_js.collectMediaElements(slide.elements, mediaElements);
3763
+ chunkH74UXL4Q_js.collectMediaElements(slide.elements, mediaElements);
3761
3764
  }
3762
3765
  for (const url of mediaDataUrls.values()) {
3763
3766
  if (url.startsWith("blob:")) {
@@ -3798,7 +3801,7 @@ function useLoadContent({
3798
3801
  }
3799
3802
  })
3800
3803
  );
3801
- const { paths: imagePaths, refs: imageRefs } = chunkIKISUZKE_js.collectImagePaths(parsed.slides);
3804
+ const { paths: imagePaths, refs: imageRefs } = chunkH74UXL4Q_js.collectImagePaths(parsed.slides);
3802
3805
  let nextSlides = parsed.slides;
3803
3806
  if (imagePaths.size > 0) {
3804
3807
  const resolvedMap = /* @__PURE__ */ new Map();
@@ -3853,12 +3856,12 @@ function useLoadContent({
3853
3856
  }
3854
3857
  }
3855
3858
  handlerRef.current = handler;
3856
- const partition = chunk34BUZNKO_js.partitionTemplateElements(nextSlides);
3859
+ const partition = chunkIJVDNQLG_js.partitionTemplateElements(nextSlides);
3857
3860
  setSlides(partition.slides);
3858
3861
  setTemplateElementsBySlideId(partition.templateElementsBySlideId);
3859
3862
  setCanvasSize({
3860
- width: parsed.width ?? chunk34BUZNKO_js.DEFAULT_CANVAS_WIDTH,
3861
- height: parsed.height ?? chunk34BUZNKO_js.DEFAULT_CANVAS_HEIGHT
3863
+ width: parsed.width ?? chunkIJVDNQLG_js.DEFAULT_CANVAS_WIDTH,
3864
+ height: parsed.height ?? chunkIJVDNQLG_js.DEFAULT_CANVAS_HEIGHT
3862
3865
  });
3863
3866
  setHeaderFooter(parsed.headerFooter ?? {});
3864
3867
  setLayoutOptions(parsed.layoutOptions ?? []);
@@ -3887,7 +3890,7 @@ function useLoadContent({
3887
3890
  setHasMacros(parsed.hasMacros === true);
3888
3891
  setHasDigitalSignatures(parsed.hasDigitalSignatures === true);
3889
3892
  setDigitalSignatureCount(parsed.digitalSignatureCount ?? 0);
3890
- setGuides(chunkIKISUZKE_js.buildInitialGuides(parsed.presentationGuides, parsed.slides[0]?.guides));
3893
+ setGuides(chunkH74UXL4Q_js.buildInitialGuides(parsed.presentationGuides, parsed.slides[0]?.guides));
3891
3894
  setActiveSlideIndex(0);
3892
3895
  clearSelection();
3893
3896
  setIsDirty(false);
@@ -3895,7 +3898,7 @@ function useLoadContent({
3895
3898
  onContentApplied?.();
3896
3899
  } catch (err) {
3897
3900
  if (!cancelled && token === renderTokenRef.current) {
3898
- if (err instanceof chunkIKISUZKE_js.EncryptedFileError) {
3901
+ if (err instanceof chunkH74UXL4Q_js.EncryptedFileError) {
3899
3902
  setIsEncrypted(true);
3900
3903
  } else {
3901
3904
  setError(err instanceof Error ? err.message : String(err));
@@ -3972,7 +3975,7 @@ function useAutosave(input) {
3972
3975
  isSavingRef.current = false;
3973
3976
  return;
3974
3977
  }
3975
- await chunkIKISUZKE_js.saveAutosaveSnapshot(filePathRef.current, data);
3978
+ await chunkH74UXL4Q_js.saveAutosaveSnapshot(filePathRef.current, data);
3976
3979
  setAutosaveStatus({ state: "saved", timestamp: Date.now() });
3977
3980
  } catch (err) {
3978
3981
  setAutosaveStatus({
@@ -4037,7 +4040,7 @@ function useElementOperations(input) {
4037
4040
  }, [applySelection, setInlineEditingElementId, setContextMenuState]);
4038
4041
  const updateElementById = react.useCallback(
4039
4042
  (elementId, updates) => {
4040
- if (chunkIKISUZKE_js.isTemplateElementId(elementId)) {
4043
+ if (chunkH74UXL4Q_js.isTemplateElementId(elementId)) {
4041
4044
  const slideId = activeSlide?.id;
4042
4045
  if (slideId) {
4043
4046
  setTemplateElementsBySlideId((prev) => ({
@@ -4077,7 +4080,7 @@ function useElementOperations(input) {
4077
4080
  );
4078
4081
  const updateSelectedShapeStyle = react.useCallback(
4079
4082
  (updates) => {
4080
- if (!selectedElement || !chunkIKISUZKE_js.hasShapeProperties(selectedElement)) {
4083
+ if (!selectedElement || !chunkH74UXL4Q_js.hasShapeProperties(selectedElement)) {
4081
4084
  return;
4082
4085
  }
4083
4086
  updateSelectedElement({
@@ -4088,17 +4091,17 @@ function useElementOperations(input) {
4088
4091
  );
4089
4092
  const updateSelectedTextStyle = react.useCallback(
4090
4093
  (updates) => {
4091
- if (!selectedElement || !chunkIKISUZKE_js.hasTextProperties(selectedElement)) {
4094
+ if (!selectedElement || !chunkH74UXL4Q_js.hasTextProperties(selectedElement)) {
4092
4095
  return;
4093
4096
  }
4094
- const inlineSel = chunkIKISUZKE_js.getInlineEditorSelection(selectedElement.textSegments);
4097
+ const inlineSel = chunkH74UXL4Q_js.getInlineEditorSelection(selectedElement.textSegments);
4095
4098
  if (inlineSel && selectedElement.textSegments) {
4096
- const { newSegments: newSegments2, newSelection } = chunkIKISUZKE_js.applyStyleToSelectedSegments(
4099
+ const { newSegments: newSegments2, newSelection } = chunkH74UXL4Q_js.applyStyleToSelectedSegments(
4097
4100
  selectedElement.textSegments,
4098
4101
  inlineSel,
4099
4102
  updates
4100
4103
  );
4101
- chunkIKISUZKE_js.setPendingSelectionRestore(newSelection);
4104
+ chunkH74UXL4Q_js.setPendingSelectionRestore(newSelection);
4102
4105
  updateSelectedElement({
4103
4106
  textSegments: newSegments2
4104
4107
  });
@@ -4118,12 +4121,12 @@ function useElementOperations(input) {
4118
4121
  );
4119
4122
  const updateSelectedTextCase = react.useCallback(
4120
4123
  (mode) => {
4121
- if (!selectedElement || !chunkIKISUZKE_js.hasTextProperties(selectedElement)) {
4124
+ if (!selectedElement || !chunkH74UXL4Q_js.hasTextProperties(selectedElement)) {
4122
4125
  return;
4123
4126
  }
4124
- const inlineSel = chunkIKISUZKE_js.getInlineEditorSelection(selectedElement.textSegments);
4127
+ const inlineSel = chunkH74UXL4Q_js.getInlineEditorSelection(selectedElement.textSegments);
4125
4128
  if (inlineSel && selectedElement.textSegments) {
4126
- const newSegments = chunkIKISUZKE_js.applyCaseTransformToSegments(
4129
+ const newSegments = chunkH74UXL4Q_js.applyCaseTransformToSegments(
4127
4130
  selectedElement.textSegments,
4128
4131
  inlineSel,
4129
4132
  mode
@@ -4133,14 +4136,14 @@ function useElementOperations(input) {
4133
4136
  }
4134
4137
  const updates = {};
4135
4138
  if (selectedElement.textSegments && selectedElement.textSegments.length > 0) {
4136
- updates.textSegments = chunkIKISUZKE_js.applyCaseTransformToSegments(
4139
+ updates.textSegments = chunkH74UXL4Q_js.applyCaseTransformToSegments(
4137
4140
  selectedElement.textSegments,
4138
4141
  null,
4139
4142
  mode
4140
4143
  );
4141
4144
  }
4142
4145
  if (typeof selectedElement.text === "string") {
4143
- updates.text = chunkIKISUZKE_js.transformTextCase(selectedElement.text, mode);
4146
+ updates.text = chunkH74UXL4Q_js.transformTextCase(selectedElement.text, mode);
4144
4147
  }
4145
4148
  updateSelectedElement(updates);
4146
4149
  },
@@ -4195,7 +4198,7 @@ function useSectionOperations(input) {
4195
4198
  const { sections, setSections, slides, setSlides, markDirty } = input;
4196
4199
  const addSection2 = react.useCallback(
4197
4200
  (name, afterSlideIndex) => {
4198
- const result = chunkIKISUZKE_js.addSection(sections, slides, name, afterSlideIndex);
4201
+ const result = chunkH74UXL4Q_js.addSection(sections, slides, name, afterSlideIndex);
4199
4202
  setSlides(result.slides);
4200
4203
  setSections(result.sections);
4201
4204
  markDirty();
@@ -4204,7 +4207,7 @@ function useSectionOperations(input) {
4204
4207
  );
4205
4208
  const renameSection2 = react.useCallback(
4206
4209
  (sectionId, newName) => {
4207
- const result = chunkIKISUZKE_js.renameSection(sections, slides, sectionId, newName);
4210
+ const result = chunkH74UXL4Q_js.renameSection(sections, slides, sectionId, newName);
4208
4211
  setSections(result.sections);
4209
4212
  setSlides(result.slides);
4210
4213
  markDirty();
@@ -4213,7 +4216,7 @@ function useSectionOperations(input) {
4213
4216
  );
4214
4217
  const deleteSection2 = react.useCallback(
4215
4218
  (sectionId) => {
4216
- const result = chunkIKISUZKE_js.deleteSection(sections, slides, sectionId);
4219
+ const result = chunkH74UXL4Q_js.deleteSection(sections, slides, sectionId);
4217
4220
  setSections(result.sections);
4218
4221
  setSlides(result.slides);
4219
4222
  markDirty();
@@ -4222,21 +4225,21 @@ function useSectionOperations(input) {
4222
4225
  );
4223
4226
  const moveSectionUp2 = react.useCallback(
4224
4227
  (sectionId) => {
4225
- setSections(chunkIKISUZKE_js.moveSectionUp(sections, sectionId));
4228
+ setSections(chunkH74UXL4Q_js.moveSectionUp(sections, sectionId));
4226
4229
  markDirty();
4227
4230
  },
4228
4231
  [sections, setSections, markDirty]
4229
4232
  );
4230
4233
  const moveSectionDown2 = react.useCallback(
4231
4234
  (sectionId) => {
4232
- setSections(chunkIKISUZKE_js.moveSectionDown(sections, sectionId));
4235
+ setSections(chunkH74UXL4Q_js.moveSectionDown(sections, sectionId));
4233
4236
  markDirty();
4234
4237
  },
4235
4238
  [sections, setSections, markDirty]
4236
4239
  );
4237
4240
  const moveSlidesToSection2 = react.useCallback(
4238
4241
  (slideIndexes, targetSectionId) => {
4239
- const result = chunkIKISUZKE_js.moveSlidesToSection(sections, slides, slideIndexes, targetSectionId);
4242
+ const result = chunkH74UXL4Q_js.moveSlidesToSection(sections, slides, slideIndexes, targetSectionId);
4240
4243
  setSlides(result.slides);
4241
4244
  setSections(result.sections);
4242
4245
  markDirty();
@@ -4255,19 +4258,19 @@ function useSectionOperations(input) {
4255
4258
 
4256
4259
  // src/viewer/hooks/pointer-move-handlers.ts
4257
4260
  function computeResizeGeometry(handle, startX, startY, startWidth, startHeight, dx, dy, snapToGrid, gridSpacingPx) {
4258
- const resized = chunkIKISUZKE_js.applyResize(
4261
+ const resized = chunkH74UXL4Q_js.applyResize(
4259
4262
  { x: startX, y: startY, width: startWidth, height: startHeight },
4260
4263
  handle,
4261
4264
  dx,
4262
4265
  dy,
4263
4266
  1,
4264
- { minSize: chunk34BUZNKO_js.MIN_ELEMENT_SIZE }
4267
+ { minSize: chunkIJVDNQLG_js.MIN_ELEMENT_SIZE }
4265
4268
  );
4266
4269
  const box = { x: resized.x, y: resized.y, width: resized.width, height: resized.height };
4267
4270
  if (!snapToGrid) {
4268
4271
  return box;
4269
4272
  }
4270
- return chunkIKISUZKE_js.snapBoxToGrid(box, handle, gridSpacingPx, chunk34BUZNKO_js.MIN_ELEMENT_SIZE);
4273
+ return chunkH74UXL4Q_js.snapBoxToGrid(box, handle, gridSpacingPx, chunkIJVDNQLG_js.MIN_ELEMENT_SIZE);
4271
4274
  }
4272
4275
  function computeAdjustmentValue(startAdjustment, dx, startWidth) {
4273
4276
  const range = startWidth || 200;
@@ -4385,7 +4388,7 @@ function processDragMove(e, drag, editorScale, snapToGrid, snapToShape, gridSpac
4385
4388
  width: el.width,
4386
4389
  height: el.height
4387
4390
  }));
4388
- const snapResult = chunkIKISUZKE_js.computeSnapToShape(
4391
+ const snapResult = chunkH74UXL4Q_js.computeSnapToShape(
4389
4392
  targetX,
4390
4393
  targetY,
4391
4394
  primaryEl.width,
@@ -4424,7 +4427,7 @@ function processDragMove(e, drag, editorScale, snapToGrid, snapToShape, gridSpac
4424
4427
  if (live) {
4425
4428
  for (const id of Object.keys(drag.startPositionsById)) {
4426
4429
  const start = drag.startPositionsById[id];
4427
- chunkIKISUZKE_js.publishLiveGeometry(live.patcher, live.slideId, id, {
4430
+ chunkH74UXL4Q_js.publishLiveGeometry(live.patcher, live.slideId, id, {
4428
4431
  x: start.x + appliedDx,
4429
4432
  y: start.y + appliedDy
4430
4433
  });
@@ -4458,15 +4461,15 @@ function processResizeMove(e, rs, editorScale, snapToGrid, gridSpacingPx, live)
4458
4461
  if (rs.domEl) {
4459
4462
  rs.domEl.style.left = `${geo.x}px`;
4460
4463
  rs.domEl.style.top = `${geo.y}px`;
4461
- rs.domEl.style.width = `${Math.max(geo.width, chunk34BUZNKO_js.MIN_ELEMENT_SIZE)}px`;
4462
- rs.domEl.style.height = `${Math.max(geo.height, chunk34BUZNKO_js.MIN_ELEMENT_SIZE)}px`;
4464
+ rs.domEl.style.width = `${Math.max(geo.width, chunkIJVDNQLG_js.MIN_ELEMENT_SIZE)}px`;
4465
+ rs.domEl.style.height = `${Math.max(geo.height, chunkIJVDNQLG_js.MIN_ELEMENT_SIZE)}px`;
4463
4466
  }
4464
4467
  if (live) {
4465
- chunkIKISUZKE_js.publishLiveGeometry(live.patcher, live.slideId, rs.elementId, {
4468
+ chunkH74UXL4Q_js.publishLiveGeometry(live.patcher, live.slideId, rs.elementId, {
4466
4469
  x: geo.x,
4467
4470
  y: geo.y,
4468
- width: Math.max(geo.width, chunk34BUZNKO_js.MIN_ELEMENT_SIZE),
4469
- height: Math.max(geo.height, chunk34BUZNKO_js.MIN_ELEMENT_SIZE)
4471
+ width: Math.max(geo.width, chunkIJVDNQLG_js.MIN_ELEMENT_SIZE),
4472
+ height: Math.max(geo.height, chunkIJVDNQLG_js.MIN_ELEMENT_SIZE)
4470
4473
  });
4471
4474
  }
4472
4475
  }
@@ -4546,13 +4549,13 @@ function processPointerUp(input) {
4546
4549
  if (i !== activeSlideIndex) {
4547
4550
  return s;
4548
4551
  }
4549
- const rerouted = chunkIKISUZKE_js.rerouteConnectorsForMovedElements(s.elements, movedIds);
4552
+ const rerouted = chunkH74UXL4Q_js.rerouteConnectorsForMovedElements(s.elements, movedIds);
4550
4553
  if (rerouted.length === 0) {
4551
4554
  return s;
4552
4555
  }
4553
4556
  return {
4554
4557
  ...s,
4555
- elements: chunkIKISUZKE_js.applyReroutedConnectors(s.elements, rerouted)
4558
+ elements: chunkH74UXL4Q_js.applyReroutedConnectors(s.elements, rerouted)
4556
4559
  };
4557
4560
  })
4558
4561
  );
@@ -4574,9 +4577,9 @@ function processPointerUp(input) {
4574
4577
  }
4575
4578
  function commitMarquee(marquee, editTemplateMode, templateElements, activeSlide, applySelection, clearSelection) {
4576
4579
  const sourceElements = editTemplateMode ? templateElements : activeSlide?.elements ?? [];
4577
- const hitIds = chunkIKISUZKE_js.computeMarqueeHitIds(marquee, sourceElements);
4580
+ const hitIds = chunkH74UXL4Q_js.computeMarqueeHitIds(marquee, sourceElements);
4578
4581
  if (marquee.additive) {
4579
- const merged = chunkIKISUZKE_js.mergeAdditiveSelection(marquee.baseSelectionIds, hitIds);
4582
+ const merged = chunkH74UXL4Q_js.mergeAdditiveSelection(marquee.baseSelectionIds, hitIds);
4580
4583
  if (merged.length > 0) {
4581
4584
  applySelection(merged[0], merged);
4582
4585
  } else {
@@ -4599,8 +4602,8 @@ function commitDrag(drag, editTemplateMode, activeSlide, activeSlideIndex, setTe
4599
4602
  }
4600
4603
  return { ...el, x: start.x + dx, y: start.y + dy };
4601
4604
  });
4602
- const rerouted = chunkIKISUZKE_js.rerouteConnectorsForMovedElements(movedElements, movedIds);
4603
- return chunkIKISUZKE_js.applyReroutedConnectors(movedElements, rerouted);
4605
+ const rerouted = chunkH74UXL4Q_js.rerouteConnectorsForMovedElements(movedElements, movedIds);
4606
+ return chunkH74UXL4Q_js.applyReroutedConnectors(movedElements, rerouted);
4604
4607
  };
4605
4608
  if (editTemplateMode) {
4606
4609
  const slideId = activeSlide?.id;
@@ -4756,9 +4759,9 @@ function useCanvasInteractions(input) {
4756
4759
  return;
4757
4760
  }
4758
4761
  const el = elementLookup.get(editId);
4759
- if (el && chunkIKISUZKE_js.hasTextProperties(el)) {
4762
+ if (el && chunkH74UXL4Q_js.hasTextProperties(el)) {
4760
4763
  const committedText = transformCommittedText ? transformCommittedText(inlineEditingText) : inlineEditingText;
4761
- const newSegments = chunkIKISUZKE_js.remapTextToSegments(committedText, el.textSegments, el.textStyle);
4764
+ const newSegments = chunkH74UXL4Q_js.remapTextToSegments(committedText, el.textSegments, el.textStyle);
4762
4765
  ops.updateElementById(editId, {
4763
4766
  text: committedText,
4764
4767
  textSegments: newSegments
@@ -4769,7 +4772,7 @@ function useCanvasInteractions(input) {
4769
4772
  setInlineEditingText("");
4770
4773
  };
4771
4774
  const openEquationEditorForElement = (el) => {
4772
- if (!chunkIKISUZKE_js.hasTextProperties(el)) {
4775
+ if (!chunkH74UXL4Q_js.hasTextProperties(el)) {
4773
4776
  return false;
4774
4777
  }
4775
4778
  const eqSeg = el.textSegments?.find((seg) => seg.equationXml);
@@ -4798,7 +4801,7 @@ function useCanvasInteractions(input) {
4798
4801
  justSelectedRef.current = false;
4799
4802
  } else {
4800
4803
  const el = elementLookup.get(elementId);
4801
- if (el && chunkIKISUZKE_js.hasTextProperties(el) && !el.locks?.noTextEdit) {
4804
+ if (el && chunkH74UXL4Q_js.hasTextProperties(el) && !el.locks?.noTextEdit) {
4802
4805
  if (!openEquationEditorForElement(el)) {
4803
4806
  setInlineEditingElementId(elementId);
4804
4807
  setInlineEditingText(el.text ?? "");
@@ -4817,7 +4820,7 @@ function useCanvasInteractions(input) {
4817
4820
  if (openEquationEditorForElement(el)) {
4818
4821
  return;
4819
4822
  }
4820
- if (chunkIKISUZKE_js.hasTextProperties(el)) {
4823
+ if (chunkH74UXL4Q_js.hasTextProperties(el)) {
4821
4824
  setInlineEditingElementId(elementId);
4822
4825
  setInlineEditingText(el.text ?? "");
4823
4826
  }
@@ -5010,7 +5013,7 @@ function createFileHandlers(deps) {
5010
5013
  h = Math.round(h * scale);
5011
5014
  }
5012
5015
  addElement({
5013
- id: chunkIKISUZKE_js.generateElementId(),
5016
+ id: chunkH74UXL4Q_js.generateElementId(),
5014
5017
  type: "image",
5015
5018
  x: Math.round((canvasSize.width - w) / 2),
5016
5019
  y: Math.round((canvasSize.height - h) / 2),
@@ -5021,7 +5024,7 @@ function createFileHandlers(deps) {
5021
5024
  };
5022
5025
  img.onerror = () => {
5023
5026
  addElement({
5024
- id: chunkIKISUZKE_js.generateElementId(),
5027
+ id: chunkH74UXL4Q_js.generateElementId(),
5025
5028
  type: "image",
5026
5029
  x: 100,
5027
5030
  y: 100,
@@ -5047,7 +5050,7 @@ function createFileHandlers(deps) {
5047
5050
  const elFilePath = file.path;
5048
5051
  const insertMediaElement = (mediaSourceUrl, width, height) => {
5049
5052
  addElement({
5050
- id: chunkIKISUZKE_js.generateElementId(),
5053
+ id: chunkH74UXL4Q_js.generateElementId(),
5051
5054
  type: "media",
5052
5055
  mediaType,
5053
5056
  mediaMimeType: file.type || void 0,
@@ -5222,13 +5225,13 @@ function createStructuredElementHandlers(deps) {
5222
5225
  return;
5223
5226
  }
5224
5227
  addElement({
5225
- id: chunkIKISUZKE_js.generateElementId(),
5228
+ id: chunkH74UXL4Q_js.generateElementId(),
5226
5229
  type: "smartArt",
5227
5230
  x: 100,
5228
5231
  y: 120,
5229
5232
  width: 600,
5230
5233
  height: 340,
5231
- smartArtData: chunkIKISUZKE_js.buildSmartArtPresetData(
5234
+ smartArtData: chunkH74UXL4Q_js.buildSmartArtPresetData(
5232
5235
  layout,
5233
5236
  defaultItems,
5234
5237
  (i) => `node-${Date.now()}-${i}-${Math.random().toString(36).slice(2, 8)}`
@@ -5240,7 +5243,7 @@ function createStructuredElementHandlers(deps) {
5240
5243
  return;
5241
5244
  }
5242
5245
  addElement({
5243
- id: chunkIKISUZKE_js.generateElementId(),
5246
+ id: chunkH74UXL4Q_js.generateElementId(),
5244
5247
  type: "shape",
5245
5248
  x: 120,
5246
5249
  y: 200,
@@ -5299,7 +5302,7 @@ function createStructuredElementHandlers(deps) {
5299
5302
  const displayText = value || fieldTexts[fieldType] || fieldType;
5300
5303
  const fieldGuid = `{${crypto.randomUUID().toUpperCase()}}`;
5301
5304
  addElement({
5302
- id: chunkIKISUZKE_js.generateElementId(),
5305
+ id: chunkH74UXL4Q_js.generateElementId(),
5303
5306
  type: "shape",
5304
5307
  x: 120,
5305
5308
  y: 200,
@@ -5321,11 +5324,11 @@ function createStructuredElementHandlers(deps) {
5321
5324
  if (!activeSlide) {
5322
5325
  return;
5323
5326
  }
5324
- const preset = chunkIKISUZKE_js.ACTION_BUTTON_PRESETS.find((p) => p.shapeType === shapeType);
5327
+ const preset = chunkH74UXL4Q_js.ACTION_BUTTON_PRESETS.find((p) => p.shapeType === shapeType);
5325
5328
  if (!preset) {
5326
5329
  return;
5327
5330
  }
5328
- const defaultPptxAction = chunkIKISUZKE_js.elementActionToPptxAction({
5331
+ const defaultPptxAction = chunkH74UXL4Q_js.elementActionToPptxAction({
5329
5332
  trigger: "click",
5330
5333
  type: preset.defaultAction
5331
5334
  });
@@ -5334,7 +5337,7 @@ function createStructuredElementHandlers(deps) {
5334
5337
  defaultPptxAction.highlightClick = true;
5335
5338
  }
5336
5339
  addElement({
5337
- id: chunkIKISUZKE_js.generateElementId(),
5340
+ id: chunkH74UXL4Q_js.generateElementId(),
5338
5341
  type: "shape",
5339
5342
  x: 150,
5340
5343
  y: 150,
@@ -5401,14 +5404,14 @@ function useInsertElements(input) {
5401
5404
  return;
5402
5405
  }
5403
5406
  addElement({
5404
- id: chunkIKISUZKE_js.generateElementId(),
5407
+ id: chunkH74UXL4Q_js.generateElementId(),
5405
5408
  type: "text",
5406
5409
  x: 100,
5407
5410
  y: 100,
5408
5411
  width: 300,
5409
5412
  height: 60,
5410
5413
  text: "",
5411
- textStyle: { fontSize: chunk34BUZNKO_js.DEFAULT_TEXT_FONT_SIZE }
5414
+ textStyle: { fontSize: chunkIJVDNQLG_js.DEFAULT_TEXT_FONT_SIZE }
5412
5415
  });
5413
5416
  };
5414
5417
  const handleAddShape = () => {
@@ -5416,7 +5419,7 @@ function useInsertElements(input) {
5416
5419
  return;
5417
5420
  }
5418
5421
  addElement({
5419
- id: chunkIKISUZKE_js.generateElementId(),
5422
+ id: chunkH74UXL4Q_js.generateElementId(),
5420
5423
  type: "shape",
5421
5424
  x: 150,
5422
5425
  y: 150,
@@ -5435,15 +5438,15 @@ function useInsertElements(input) {
5435
5438
  return;
5436
5439
  }
5437
5440
  addElement({
5438
- ...chunkIKISUZKE_js.newTableElement(chunk34BUZNKO_js.DEFAULT_TABLE_ROWS, chunk34BUZNKO_js.DEFAULT_TABLE_COLUMNS, 100, 200),
5439
- id: chunkIKISUZKE_js.generateElementId()
5441
+ ...chunkH74UXL4Q_js.newTableElement(chunkIJVDNQLG_js.DEFAULT_TABLE_ROWS, chunkIJVDNQLG_js.DEFAULT_TABLE_COLUMNS, 100, 200),
5442
+ id: chunkH74UXL4Q_js.generateElementId()
5440
5443
  });
5441
5444
  };
5442
5445
  const handleAddChart = (chartType) => {
5443
5446
  if (!activeSlide) {
5444
5447
  return;
5445
5448
  }
5446
- addElement(chunkIKISUZKE_js.createDefaultChartElement(chartType));
5449
+ addElement(chunkH74UXL4Q_js.createDefaultChartElement(chartType));
5447
5450
  };
5448
5451
  const structured = createStructuredElementHandlers({
5449
5452
  activeSlide,
@@ -5513,7 +5516,7 @@ function useClipboardHandlers(input) {
5513
5516
  if (!selectedElement) {
5514
5517
  return;
5515
5518
  }
5516
- setClipboardPayload(chunkIKISUZKE_js.buildElementClipboardPayload(selectedElement, editTemplateMode));
5519
+ setClipboardPayload(chunkH74UXL4Q_js.buildElementClipboardPayload(selectedElement, editTemplateMode));
5517
5520
  };
5518
5521
  const handleDelete = () => {
5519
5522
  const idsToDelete = effectiveSelectedIds;
@@ -5530,7 +5533,7 @@ function useClipboardHandlers(input) {
5530
5533
  handleDelete();
5531
5534
  };
5532
5535
  const insertClone = (source) => {
5533
- const clone = chunkIKISUZKE_js.cloneElementForPaste(source, { intoTemplate: editTemplateMode });
5536
+ const clone = chunkH74UXL4Q_js.cloneElementForPaste(source, { intoTemplate: editTemplateMode });
5534
5537
  ops.updateActiveElements((els) => [...els, clone]);
5535
5538
  ops.applySelection(clone.id);
5536
5539
  history.markDirty();
@@ -5565,7 +5568,7 @@ function resolveShapePath(el) {
5565
5568
  return el.pathData;
5566
5569
  }
5567
5570
  if ("shapeType" in el && typeof el.shapeType === "string") {
5568
- const clipPath = chunkIKISUZKE_js.getPresetShapeClipPath(el.shapeType);
5571
+ const clipPath = chunkH74UXL4Q_js.getPresetShapeClipPath(el.shapeType);
5569
5572
  if (clipPath) {
5570
5573
  const svgPath = clipPathToSvgPath(clipPath, el.width, el.height);
5571
5574
  if (svgPath) {
@@ -5616,7 +5619,7 @@ function clipPathToSvgPath(clipPath, width, height) {
5616
5619
  return parts.join(" ");
5617
5620
  }
5618
5621
  function transformPathToGlobal(pathData, el) {
5619
- const polys = chunkIKISUZKE_js.svgPathToPolygons(pathData);
5622
+ const polys = chunkH74UXL4Q_js.svgPathToPolygons(pathData);
5620
5623
  if (polys.length === 0) {
5621
5624
  return pathData;
5622
5625
  }
@@ -5636,10 +5639,10 @@ function transformPathToGlobal(pathData, el) {
5636
5639
  y: pt.y * scaleY + el.y
5637
5640
  }))
5638
5641
  );
5639
- return chunkIKISUZKE_js.polygonsToSvgPath(transformed);
5642
+ return chunkH74UXL4Q_js.polygonsToSvgPath(transformed);
5640
5643
  }
5641
5644
  function transformPathToLocal(pathData, x, y, _width, _height) {
5642
- const polys = chunkIKISUZKE_js.svgPathToPolygons(pathData);
5645
+ const polys = chunkH74UXL4Q_js.svgPathToPolygons(pathData);
5643
5646
  if (polys.length === 0) {
5644
5647
  return pathData;
5645
5648
  }
@@ -5649,10 +5652,10 @@ function transformPathToLocal(pathData, x, y, _width, _height) {
5649
5652
  y: pt.y - y
5650
5653
  }))
5651
5654
  );
5652
- return chunkIKISUZKE_js.polygonsToSvgPath(transformed);
5655
+ return chunkH74UXL4Q_js.polygonsToSvgPath(transformed);
5653
5656
  }
5654
5657
  function pathBounds(pathData) {
5655
- const polys = chunkIKISUZKE_js.svgPathToPolygons(pathData);
5658
+ const polys = chunkH74UXL4Q_js.svgPathToPolygons(pathData);
5656
5659
  let minX = Infinity;
5657
5660
  let minY = Infinity;
5658
5661
  let maxX = -Infinity;
@@ -5711,7 +5714,7 @@ function useMergeShapesHandler(input) {
5711
5714
  let allFragments = [];
5712
5715
  let remaining = globalPaths[0];
5713
5716
  for (let i = 1; i < globalPaths.length; i++) {
5714
- const frags = chunkIKISUZKE_js.mergeShapes("fragment", remaining, globalPaths[i]);
5717
+ const frags = chunkH74UXL4Q_js.mergeShapes("fragment", remaining, globalPaths[i]);
5715
5718
  if (Array.isArray(frags)) {
5716
5719
  allFragments = frags;
5717
5720
  }
@@ -5740,7 +5743,7 @@ function useMergeShapesHandler(input) {
5740
5743
  bounds.height
5741
5744
  );
5742
5745
  const newEl = {
5743
- id: chunkIKISUZKE_js.generateElementId(),
5746
+ id: chunkH74UXL4Q_js.generateElementId(),
5744
5747
  type: "shape",
5745
5748
  x: bounds.x,
5746
5749
  y: bounds.y,
@@ -5778,7 +5781,7 @@ function useMergeShapesHandler(input) {
5778
5781
  } else {
5779
5782
  let resultPath = globalPaths[0];
5780
5783
  for (let i = 1; i < globalPaths.length; i++) {
5781
- const result = chunkIKISUZKE_js.mergeShapes(operation, resultPath, globalPaths[i]);
5784
+ const result = chunkH74UXL4Q_js.mergeShapes(operation, resultPath, globalPaths[i]);
5782
5785
  if (typeof result === "string") {
5783
5786
  resultPath = result;
5784
5787
  }
@@ -5799,7 +5802,7 @@ function useMergeShapesHandler(input) {
5799
5802
  );
5800
5803
  const primary = targets[0];
5801
5804
  const newEl = {
5802
- id: chunkIKISUZKE_js.generateElementId(),
5805
+ id: chunkH74UXL4Q_js.generateElementId(),
5803
5806
  type: "shape",
5804
5807
  x: bounds.x,
5805
5808
  y: bounds.y,
@@ -5862,7 +5865,7 @@ function useGroupAlignLayerHandlers(input) {
5862
5865
  if (ids.length < 2 || !activeSlide) {
5863
5866
  return;
5864
5867
  }
5865
- const { elements, groupId } = chunkIKISUZKE_js.groupElements(ops.activeElements, ids, chunkIKISUZKE_js.generateElementId());
5868
+ const { elements, groupId } = chunkH74UXL4Q_js.groupElements(ops.activeElements, ids, chunkH74UXL4Q_js.generateElementId());
5866
5869
  if (groupId === null) {
5867
5870
  return;
5868
5871
  }
@@ -5875,12 +5878,12 @@ function useGroupAlignLayerHandlers(input) {
5875
5878
  return;
5876
5879
  }
5877
5880
  const group = selectedElement;
5878
- const intoTemplate = chunkIKISUZKE_js.isTemplateElementId(group.id);
5881
+ const intoTemplate = chunkH74UXL4Q_js.isTemplateElementId(group.id);
5879
5882
  const ungrouped = group.children.map((child) => ({
5880
5883
  ...structuredClone(child),
5881
5884
  // Keep child ids in the same store as the group so later edits route
5882
5885
  // correctly: template groups yield template-prefixed child ids.
5883
- id: intoTemplate ? chunkIKISUZKE_js.makeCloneId(true, child.id || group.id) : child.id || chunkIKISUZKE_js.generateElementId(),
5886
+ id: intoTemplate ? chunkH74UXL4Q_js.makeCloneId(true, child.id || group.id) : child.id || chunkH74UXL4Q_js.generateElementId(),
5884
5887
  x: child.x + group.x,
5885
5888
  y: child.y + group.y
5886
5889
  }));
@@ -5904,7 +5907,7 @@ function useGroupAlignLayerHandlers(input) {
5904
5907
  if (!edge) {
5905
5908
  return;
5906
5909
  }
5907
- const positions = chunkIKISUZKE_js.alignElements(selectedElements, edge);
5910
+ const positions = chunkH74UXL4Q_js.alignElements(selectedElements, edge);
5908
5911
  for (const [id, pos] of positions) {
5909
5912
  const el = elementLookup.get(id);
5910
5913
  if (!el) {
@@ -5922,7 +5925,7 @@ function useGroupAlignLayerHandlers(input) {
5922
5925
  if (!distAxis) {
5923
5926
  return;
5924
5927
  }
5925
- const positions = chunkIKISUZKE_js.distributeElements(selectedElements, distAxis);
5928
+ const positions = chunkH74UXL4Q_js.distributeElements(selectedElements, distAxis);
5926
5929
  for (const [id, pos] of positions) {
5927
5930
  const el = elementLookup.get(id);
5928
5931
  if (!el) {
@@ -5939,7 +5942,7 @@ function useGroupAlignLayerHandlers(input) {
5939
5942
  }
5940
5943
  const id = selectedElement.id;
5941
5944
  ops.updateActiveElements(
5942
- (els) => direction === "forward" ? chunkIKISUZKE_js.bringForward(els, id) : direction === "backward" ? chunkIKISUZKE_js.sendBackward(els, id) : els
5945
+ (els) => direction === "forward" ? chunkH74UXL4Q_js.bringForward(els, id) : direction === "backward" ? chunkH74UXL4Q_js.sendBackward(els, id) : els
5943
5946
  );
5944
5947
  history.markDirty();
5945
5948
  };
@@ -5949,7 +5952,7 @@ function useGroupAlignLayerHandlers(input) {
5949
5952
  }
5950
5953
  const id = selectedElement.id;
5951
5954
  ops.updateActiveElements(
5952
- (els) => direction === "front" ? chunkIKISUZKE_js.bringToFront(els, id) : chunkIKISUZKE_js.sendToBack(els, id)
5955
+ (els) => direction === "front" ? chunkH74UXL4Q_js.bringToFront(els, id) : chunkH74UXL4Q_js.sendToBack(els, id)
5953
5956
  );
5954
5957
  history.markDirty();
5955
5958
  };
@@ -6071,7 +6074,7 @@ function insertSlideFromLayoutUpdater(slides, activeIndex, draft) {
6071
6074
  function useSlideManagement(input) {
6072
6075
  const { slides, activeSlideIndex, setActiveSlideIndex, ops, history, handlerRef } = input;
6073
6076
  const handleAddSlide = () => {
6074
- const newSlide = chunkIKISUZKE_js.createBlankSlide(slides.length + 1);
6077
+ const newSlide = chunkH74UXL4Q_js.createBlankSlide(slides.length + 1);
6075
6078
  ops.updateSlides((prev) => {
6076
6079
  const next = [...prev];
6077
6080
  next.splice(activeSlideIndex + 1, 0, newSlide);
@@ -6134,7 +6137,7 @@ function useSlideManagement(input) {
6134
6137
  }
6135
6138
  const clone = {
6136
6139
  ...src,
6137
- id: chunkIKISUZKE_js.makeSlideId(),
6140
+ id: chunkH74UXL4Q_js.makeSlideId(),
6138
6141
  elements: src.elements.map((el) => ({
6139
6142
  ...el,
6140
6143
  id: `${el.id}-dup-${Math.random().toString(36).slice(2, 6)}`
@@ -6166,7 +6169,7 @@ function useSlideManagement(input) {
6166
6169
  const handleInsertSlideFromLayout = (layoutPath, layoutName) => {
6167
6170
  const insertAt = activeSlideIndex + 1;
6168
6171
  const draft = {
6169
- ...chunkIKISUZKE_js.createBlankSlide(slides.length + 1),
6172
+ ...chunkH74UXL4Q_js.createBlankSlide(slides.length + 1),
6170
6173
  layoutPath,
6171
6174
  ...layoutName ? { layoutName } : {}
6172
6175
  };
@@ -6227,7 +6230,7 @@ function createTableMergeHandlers(input) {
6227
6230
  if (!nextCell || nextCell.hMerge || nextCell.vMerge) {
6228
6231
  return;
6229
6232
  }
6230
- const newTableData = chunkIKISUZKE_js.mergeCells(
6233
+ const newTableData = chunkH74UXL4Q_js.mergeCells(
6231
6234
  [
6232
6235
  { row: rowIndex, col: columnIndex },
6233
6236
  { row: rowIndex, col: nextColIdx }
@@ -6235,7 +6238,7 @@ function createTableMergeHandlers(input) {
6235
6238
  td
6236
6239
  );
6237
6240
  const updates = { tableData: newTableData };
6238
- const newRawXml = chunkIKISUZKE_js.updateMergeAttrsInRawXml(selectedElement, newTableData);
6241
+ const newRawXml = chunkH74UXL4Q_js.updateMergeAttrsInRawXml(selectedElement, newTableData);
6239
6242
  if (newRawXml) {
6240
6243
  updates.rawXml = newRawXml;
6241
6244
  }
@@ -6261,7 +6264,7 @@ function createTableMergeHandlers(input) {
6261
6264
  if (!targetNextCell || targetNextCell.hMerge || targetNextCell.vMerge) {
6262
6265
  return;
6263
6266
  }
6264
- const newTableData = chunkIKISUZKE_js.mergeCells(
6267
+ const newTableData = chunkH74UXL4Q_js.mergeCells(
6265
6268
  [
6266
6269
  { row: rowIndex, col: columnIndex },
6267
6270
  { row: targetNextRowIdx, col: columnIndex }
@@ -6269,7 +6272,7 @@ function createTableMergeHandlers(input) {
6269
6272
  td
6270
6273
  );
6271
6274
  const updates = { tableData: newTableData };
6272
- const newRawXml = chunkIKISUZKE_js.updateMergeAttrsInRawXml(selectedElement, newTableData);
6275
+ const newRawXml = chunkH74UXL4Q_js.updateMergeAttrsInRawXml(selectedElement, newTableData);
6273
6276
  if (newRawXml) {
6274
6277
  updates.rawXml = newRawXml;
6275
6278
  }
@@ -6284,9 +6287,9 @@ function createTableMergeHandlers(input) {
6284
6287
  return;
6285
6288
  }
6286
6289
  const td = selectedElement.tableData;
6287
- const newTableData = chunkIKISUZKE_js.mergeCells(ts.selectedCells, td);
6290
+ const newTableData = chunkH74UXL4Q_js.mergeCells(ts.selectedCells, td);
6288
6291
  const updates = { tableData: newTableData };
6289
- const newRawXml = chunkIKISUZKE_js.updateMergeAttrsInRawXml(selectedElement, newTableData);
6292
+ const newRawXml = chunkH74UXL4Q_js.updateMergeAttrsInRawXml(selectedElement, newTableData);
6290
6293
  if (newRawXml) {
6291
6294
  updates.rawXml = newRawXml;
6292
6295
  }
@@ -6303,9 +6306,9 @@ function createTableMergeHandlers(input) {
6303
6306
  }
6304
6307
  const { rowIndex, columnIndex } = ts;
6305
6308
  const td = selectedElement.tableData;
6306
- const newTableData = chunkIKISUZKE_js.splitCell(rowIndex, columnIndex, td);
6309
+ const newTableData = chunkH74UXL4Q_js.splitCell(rowIndex, columnIndex, td);
6307
6310
  const updates = { tableData: newTableData };
6308
- const newRawXml = chunkIKISUZKE_js.updateMergeAttrsInRawXml(selectedElement, newTableData);
6311
+ const newRawXml = chunkH74UXL4Q_js.updateMergeAttrsInRawXml(selectedElement, newTableData);
6309
6312
  if (newRawXml) {
6310
6313
  updates.rawXml = newRawXml;
6311
6314
  }
@@ -6349,7 +6352,7 @@ function createTableStructHandlers(input) {
6349
6352
  updates.tableData = { ...el.tableData, rows: newRows };
6350
6353
  }
6351
6354
  if (el.rawXml) {
6352
- const newRawXml = chunkIKISUZKE_js.updateCellTextInRawXml(el, rowIndex, colIndex, text);
6355
+ const newRawXml = chunkH74UXL4Q_js.updateCellTextInRawXml(el, rowIndex, colIndex, text);
6353
6356
  if (newRawXml) {
6354
6357
  updates.rawXml = newRawXml;
6355
6358
  }
@@ -6373,7 +6376,7 @@ function createTableStructHandlers(input) {
6373
6376
  const { rowIndex, columnIndex: colIndex } = ts;
6374
6377
  const updates = {};
6375
6378
  if (selectedElement.rawXml) {
6376
- const newRawXml = chunkIKISUZKE_js.updateCellTextStyleInRawXml(
6379
+ const newRawXml = chunkH74UXL4Q_js.updateCellTextStyleInRawXml(
6377
6380
  selectedElement,
6378
6381
  rowIndex,
6379
6382
  colIndex,
@@ -6437,9 +6440,9 @@ function createTableStructHandlers(input) {
6437
6440
  return;
6438
6441
  }
6439
6442
  const rowIdx = ts?.rowIndex ?? 0;
6440
- const newTableData = chunkIKISUZKE_js.insertTableRow(selectedElement.tableData, rowIdx, position);
6443
+ const newTableData = chunkH74UXL4Q_js.insertTableRow(selectedElement.tableData, rowIdx, position);
6441
6444
  const updates = { tableData: newTableData };
6442
- const newRawXml = chunkIKISUZKE_js.rebuildTableStructureInRawXml(selectedElement, newTableData);
6445
+ const newRawXml = chunkH74UXL4Q_js.rebuildTableStructureInRawXml(selectedElement, newTableData);
6443
6446
  if (newRawXml) {
6444
6447
  updates.rawXml = newRawXml;
6445
6448
  }
@@ -6452,12 +6455,12 @@ function createTableStructHandlers(input) {
6452
6455
  }
6453
6456
  const td = selectedElement.tableData;
6454
6457
  const rowIdx = ts?.rowIndex ?? 0;
6455
- const newTableData = chunkIKISUZKE_js.deleteTableRow(td, rowIdx);
6458
+ const newTableData = chunkH74UXL4Q_js.deleteTableRow(td, rowIdx);
6456
6459
  if (newTableData === td) {
6457
6460
  return;
6458
6461
  }
6459
6462
  const updates = { tableData: newTableData };
6460
- const newRawXml = chunkIKISUZKE_js.rebuildTableStructureInRawXml(selectedElement, newTableData);
6463
+ const newRawXml = chunkH74UXL4Q_js.rebuildTableStructureInRawXml(selectedElement, newTableData);
6461
6464
  if (newRawXml) {
6462
6465
  updates.rawXml = newRawXml;
6463
6466
  }
@@ -6469,9 +6472,9 @@ function createTableStructHandlers(input) {
6469
6472
  return;
6470
6473
  }
6471
6474
  const colIdx = ts?.columnIndex ?? 0;
6472
- const newTableData = chunkIKISUZKE_js.insertTableColumn(selectedElement.tableData, colIdx, position);
6475
+ const newTableData = chunkH74UXL4Q_js.insertTableColumn(selectedElement.tableData, colIdx, position);
6473
6476
  const updates = { tableData: newTableData };
6474
- const newRawXml = chunkIKISUZKE_js.rebuildTableStructureInRawXml(selectedElement, newTableData);
6477
+ const newRawXml = chunkH74UXL4Q_js.rebuildTableStructureInRawXml(selectedElement, newTableData);
6475
6478
  if (newRawXml) {
6476
6479
  updates.rawXml = newRawXml;
6477
6480
  }
@@ -6484,12 +6487,12 @@ function createTableStructHandlers(input) {
6484
6487
  }
6485
6488
  const td = selectedElement.tableData;
6486
6489
  const colIdx = ts?.columnIndex ?? 0;
6487
- const newTableData = chunkIKISUZKE_js.deleteTableColumn(td, colIdx);
6490
+ const newTableData = chunkH74UXL4Q_js.deleteTableColumn(td, colIdx);
6488
6491
  if (newTableData === td) {
6489
6492
  return;
6490
6493
  }
6491
6494
  const updates = { tableData: newTableData };
6492
- const newRawXml = chunkIKISUZKE_js.rebuildTableStructureInRawXml(selectedElement, newTableData);
6495
+ const newRawXml = chunkH74UXL4Q_js.rebuildTableStructureInRawXml(selectedElement, newTableData);
6493
6496
  if (newRawXml) {
6494
6497
  updates.rawXml = newRawXml;
6495
6498
  }
@@ -6525,8 +6528,8 @@ async function renderToCanvas(element, options = {}) {
6525
6528
  return html2canvasPro(element, {
6526
6529
  ...options,
6527
6530
  onclone: async (doc, clonedEl) => {
6528
- await chunkIKISUZKE_js.normalizeColorsForCapture(doc, clonedEl);
6529
- chunkIKISUZKE_js.preprocessCssForCapture(clonedEl);
6531
+ await chunkH74UXL4Q_js.normalizeColorsForCapture(doc, clonedEl);
6532
+ chunkH74UXL4Q_js.preprocessCssForCapture(clonedEl);
6530
6533
  if (typeof userOnClone === "function") {
6531
6534
  userOnClone(doc, clonedEl);
6532
6535
  }
@@ -6582,7 +6585,7 @@ async function exportSlideToPngBlob(slideElement, options = {}) {
6582
6585
  }
6583
6586
  async function exportSlideAsPng(slideElement, slideIndex, options = {}) {
6584
6587
  const blob = await exportSlideToPngBlob(slideElement, options);
6585
- chunkIKISUZKE_js.downloadBlob(blob, `slide-${slideIndex + 1}.png`);
6588
+ chunkH74UXL4Q_js.downloadBlob(blob, `slide-${slideIndex + 1}.png`);
6586
6589
  }
6587
6590
  async function copySlideToClipboard(slideElement, options = {}) {
6588
6591
  const blob = await exportSlideToPngBlob(slideElement, options);
@@ -6604,15 +6607,15 @@ async function exportAllSlidesAsPdf(slideStageRef, totalSlides, setActiveSlide,
6604
6607
  continue;
6605
6608
  }
6606
6609
  const canvas = await renderElementToCanvas(stageEl, scale);
6607
- images.push(chunkIKISUZKE_js.canvasToJpegData(canvas));
6610
+ images.push(chunkH74UXL4Q_js.canvasToJpegData(canvas));
6608
6611
  }
6609
6612
  onProgress?.(totalSlides, totalSlides);
6610
6613
  setActiveSlide(currentSlideIndex);
6611
6614
  if (images.length === 0) {
6612
- throw new Error(chunk2JDWFMIK_js.translationsEn["pptx.export.errorNoSlidesPdf"]);
6615
+ throw new Error(chunkMMK4K3QI_js.translationsEn["pptx.export.errorNoSlidesPdf"]);
6613
6616
  }
6614
- const pdfBlobUrl = chunk34BUZNKO_js.buildPdfFromImageData(images);
6615
- chunkIKISUZKE_js.downloadDataUrl(pdfBlobUrl, filename);
6617
+ const pdfBlobUrl = chunkIJVDNQLG_js.buildPdfFromImageData(images);
6618
+ chunkH74UXL4Q_js.downloadDataUrl(pdfBlobUrl, filename);
6616
6619
  }
6617
6620
  async function captureAllSlidesAsPngDataUrls(slideStageRef, totalSlides, setActiveSlide, currentSlideIndex, options = {}) {
6618
6621
  const { scale = 2, onProgress } = options;
@@ -6658,10 +6661,10 @@ async function exportAllSlidesAsNotesPdf(slideStageRef, totalSlides, setActiveSl
6658
6661
  onProgress?.(totalSlides, totalSlides);
6659
6662
  setActiveSlide(currentSlideIndex);
6660
6663
  if (pages.length === 0) {
6661
- throw new Error(chunk2JDWFMIK_js.translationsEn["pptx.export.errorNoSlidesNotesPdf"]);
6664
+ throw new Error(chunkMMK4K3QI_js.translationsEn["pptx.export.errorNoSlidesNotesPdf"]);
6662
6665
  }
6663
- const pdfDataUrl = chunk34BUZNKO_js.buildNotesPdf(pages);
6664
- chunkIKISUZKE_js.downloadDataUrl(pdfDataUrl, filename);
6666
+ const pdfDataUrl = chunkIJVDNQLG_js.buildNotesPdf(pages);
6667
+ chunkH74UXL4Q_js.downloadDataUrl(pdfDataUrl, filename);
6665
6668
  }
6666
6669
 
6667
6670
  // src/viewer/utils/export-video.ts
@@ -6692,7 +6695,7 @@ async function exportAllSlidesAsVideo(slideStageRef, totalSlides, setActiveSlide
6692
6695
  }
6693
6696
  setActiveSlide(currentSlideIndex);
6694
6697
  if (slideCanvases.length === 0) {
6695
- throw new Error(chunk2JDWFMIK_js.translationsEn["pptx.export.errorNoSlidesVideo"]);
6698
+ throw new Error(chunkMMK4K3QI_js.translationsEn["pptx.export.errorNoSlidesVideo"]);
6696
6699
  }
6697
6700
  const firstCanvas = slideCanvases[0];
6698
6701
  const recordingCanvas = document.createElement("canvas");
@@ -6700,12 +6703,12 @@ async function exportAllSlidesAsVideo(slideStageRef, totalSlides, setActiveSlide
6700
6703
  recordingCanvas.height = firstCanvas.height;
6701
6704
  const ctx = recordingCanvas.getContext("2d");
6702
6705
  if (!ctx) {
6703
- throw new Error(chunk2JDWFMIK_js.translationsEn["pptx.export.errorNo2dContext"]);
6706
+ throw new Error(chunkMMK4K3QI_js.translationsEn["pptx.export.errorNo2dContext"]);
6704
6707
  }
6705
6708
  const fps = 30;
6706
6709
  const stream = recordingCanvas.captureStream(fps);
6707
6710
  const recorder = new MediaRecorder(stream, {
6708
- mimeType: chunkIKISUZKE_js.pickSupportedMimeType([...chunkIKISUZKE_js.WEBM_MIME_CANDIDATES]),
6711
+ mimeType: chunkH74UXL4Q_js.pickSupportedMimeType([...chunkH74UXL4Q_js.WEBM_MIME_CANDIDATES]),
6709
6712
  videoBitsPerSecond: 5e6
6710
6713
  });
6711
6714
  const chunks = [];
@@ -6728,8 +6731,8 @@ async function exportAllSlidesAsVideo(slideStageRef, totalSlides, setActiveSlide
6728
6731
  const duration = slideTimingsMs?.[i] ?? slideDurationMs;
6729
6732
  ctx.clearRect(0, 0, recordingCanvas.width, recordingCanvas.height);
6730
6733
  ctx.drawImage(slideCanvases[i], 0, 0);
6731
- const frameInterval = chunkIKISUZKE_js.fpsToFrameIntervalMs(fps);
6732
- const framesNeeded = chunkIKISUZKE_js.segmentFrameCount(duration, fps);
6734
+ const frameInterval = chunkH74UXL4Q_js.fpsToFrameIntervalMs(fps);
6735
+ const framesNeeded = chunkH74UXL4Q_js.segmentFrameCount(duration, fps);
6733
6736
  for (let f = 0; f < framesNeeded; f++) {
6734
6737
  if (signal?.aborted) {
6735
6738
  recorder.stop();
@@ -6776,9 +6779,9 @@ async function exportAllSlidesAsGif(slideStageRef, totalSlides, setActiveSlide,
6776
6779
  }
6777
6780
  setActiveSlide(currentSlideIndex);
6778
6781
  if (frames.length === 0) {
6779
- throw new Error(chunk2JDWFMIK_js.translationsEn["pptx.export.errorNoSlidesGif"]);
6782
+ throw new Error(chunkMMK4K3QI_js.translationsEn["pptx.export.errorNoSlidesGif"]);
6780
6783
  }
6781
- const gifBytes = chunkIKISUZKE_js.encodeGif(frames, Math.round(slideDurationMs / 10));
6784
+ const gifBytes = chunkH74UXL4Q_js.encodeGif(frames, Math.round(slideDurationMs / 10));
6782
6785
  onProgress?.(totalSlides, totalSlides);
6783
6786
  const buf = new ArrayBuffer(gifBytes.length);
6784
6787
  new Uint8Array(buf).set(gifBytes);
@@ -6832,7 +6835,7 @@ function exportAllSlidesToSvg(data, options = {}) {
6832
6835
  continue;
6833
6836
  }
6834
6837
  onProgress?.(processedCount, data.slides.length);
6835
- let svg = chunkIKISUZKE_js.SvgExporter.exportSlide(slide, data.width, data.height, svgOptions);
6838
+ let svg = chunkH74UXL4Q_js.SvgExporter.exportSlide(slide, data.width, data.height, svgOptions);
6836
6839
  if (embedFonts && fontFaces?.length) {
6837
6840
  svg = injectFontFaces(svg, fontFaces);
6838
6841
  }
@@ -6892,7 +6895,7 @@ function useExportSaveAs(input) {
6892
6895
  }
6893
6896
  setExportProgress(70);
6894
6897
  setExportStatusMessage("Writing README...");
6895
- const readme = chunkIKISUZKE_js.generatePackageReadme(pptxFilename);
6898
+ const readme = chunkH74UXL4Q_js.generatePackageReadme(pptxFilename);
6896
6899
  pkgFolder.file("README.txt", readme);
6897
6900
  if (abortCtrl.signal.aborted) {
6898
6901
  throw new DOMException("Export cancelled", "AbortError");
@@ -6903,7 +6906,7 @@ function useExportSaveAs(input) {
6903
6906
  setExportProgress(95);
6904
6907
  setExportStatusMessage("Downloading...");
6905
6908
  const baseName = pptxFilename.replace(/\.[^.]+$/u, "");
6906
- chunkIKISUZKE_js.downloadBlob(zipBlob, `${baseName}-package.zip`);
6909
+ chunkH74UXL4Q_js.downloadBlob(zipBlob, `${baseName}-package.zip`);
6907
6910
  setExportProgress(100);
6908
6911
  } catch (err) {
6909
6912
  if (err.name !== "AbortError") {
@@ -6926,7 +6929,7 @@ function useExportSaveAs(input) {
6926
6929
  const blob = new Blob([data], {
6927
6930
  type: "application/vnd.openxmlformats-officedocument.presentationml.presentation"
6928
6931
  });
6929
- chunkIKISUZKE_js.downloadBlob(blob, `${baseName}.${ext}`);
6932
+ chunkH74UXL4Q_js.downloadBlob(blob, `${baseName}.${ext}`);
6930
6933
  } catch (err) {
6931
6934
  console.error(`[PowerPointViewer] Save as .${ext} failed:`, err);
6932
6935
  }
@@ -6939,14 +6942,14 @@ function useExportSaveAs(input) {
6939
6942
  const pptxGuides = guides.map((g) => ({
6940
6943
  id: g.id,
6941
6944
  orientation: g.axis === "h" ? "horz" : "vert",
6942
- positionEmu: chunkIKISUZKE_js.guidePxToEmu(g.position)
6945
+ positionEmu: chunkH74UXL4Q_js.guidePxToEmu(g.position)
6943
6946
  }));
6944
6947
  return {
6945
6948
  ...slide,
6946
6949
  guides: pptxGuides.length > 0 ? pptxGuides : void 0
6947
6950
  };
6948
6951
  });
6949
- const slidesToSave = chunk34BUZNKO_js.buildSaveSlides(slidesWithGuides, templateElementsBySlideId);
6952
+ const slidesToSave = chunkIJVDNQLG_js.buildSaveSlides(slidesWithGuides, templateElementsBySlideId);
6950
6953
  const saveOptions = {
6951
6954
  headerFooter,
6952
6955
  presentationProperties,
@@ -7003,7 +7006,7 @@ function safeConfirm(message) {
7003
7006
  }
7004
7007
  }
7005
7008
  function downloadBlob2(blob, filename) {
7006
- chunkIKISUZKE_js.downloadBlob(blob, chunkIKISUZKE_js.sanitizeDownloadFilename(filename));
7009
+ chunkH74UXL4Q_js.downloadBlob(blob, chunkH74UXL4Q_js.sanitizeDownloadFilename(filename));
7007
7010
  }
7008
7011
 
7009
7012
  // src/viewer/hooks/useExportHandlers.ts
@@ -7104,21 +7107,21 @@ function useExportHandlers(input) {
7104
7107
  {
7105
7108
  scale: 2,
7106
7109
  onProgress: (current, total) => {
7107
- setExportProgress(chunkIKISUZKE_js.slideProgressPercent(current, total));
7108
- setExportStatusMessage(chunkIKISUZKE_js.slideStatusLabel("Rendering", current, total));
7110
+ setExportProgress(chunkH74UXL4Q_js.slideProgressPercent(current, total));
7111
+ setExportStatusMessage(chunkH74UXL4Q_js.slideStatusLabel("Rendering", current, total));
7109
7112
  },
7110
7113
  signal: abortCtrl.signal
7111
7114
  }
7112
7115
  );
7113
- setExportProgress(chunkIKISUZKE_js.EXPORT_ASSEMBLING_PERCENT);
7116
+ setExportProgress(chunkH74UXL4Q_js.EXPORT_ASSEMBLING_PERCENT);
7114
7117
  setExportStatusMessage("Building PDF...");
7115
7118
  await new Promise((r) => {
7116
7119
  setTimeout(r, 100);
7117
7120
  });
7118
- setExportProgress(chunkIKISUZKE_js.EXPORT_DONE_PERCENT);
7121
+ setExportProgress(chunkH74UXL4Q_js.EXPORT_DONE_PERCENT);
7119
7122
  setExportStatusMessage("Done!");
7120
7123
  } catch (err) {
7121
- if (!chunkIKISUZKE_js.isExportAbortError(err)) {
7124
+ if (!chunkH74UXL4Q_js.isExportAbortError(err)) {
7122
7125
  console.error("[PowerPointViewer] PDF export failed:", err);
7123
7126
  }
7124
7127
  } finally {
@@ -7148,21 +7151,21 @@ function useExportHandlers(input) {
7148
7151
  {
7149
7152
  scale: 2,
7150
7153
  onProgress: (current, total) => {
7151
- setExportProgress(chunkIKISUZKE_js.slideProgressPercent(current, total));
7152
- setExportStatusMessage(chunkIKISUZKE_js.slideStatusLabel("Rendering", current, total));
7154
+ setExportProgress(chunkH74UXL4Q_js.slideProgressPercent(current, total));
7155
+ setExportStatusMessage(chunkH74UXL4Q_js.slideStatusLabel("Rendering", current, total));
7153
7156
  },
7154
7157
  signal: abortCtrl.signal
7155
7158
  }
7156
7159
  );
7157
- setExportProgress(chunkIKISUZKE_js.EXPORT_ASSEMBLING_PERCENT);
7160
+ setExportProgress(chunkH74UXL4Q_js.EXPORT_ASSEMBLING_PERCENT);
7158
7161
  setExportStatusMessage("Building PDF...");
7159
7162
  await new Promise((r) => {
7160
7163
  setTimeout(r, 100);
7161
7164
  });
7162
- setExportProgress(chunkIKISUZKE_js.EXPORT_DONE_PERCENT);
7165
+ setExportProgress(chunkH74UXL4Q_js.EXPORT_DONE_PERCENT);
7163
7166
  setExportStatusMessage("Done!");
7164
7167
  } catch (err) {
7165
- if (!chunkIKISUZKE_js.isExportAbortError(err)) {
7168
+ if (!chunkH74UXL4Q_js.isExportAbortError(err)) {
7166
7169
  console.error("[PowerPointViewer] Notes PDF export failed:", err);
7167
7170
  }
7168
7171
  } finally {
@@ -7203,22 +7206,22 @@ function useExportHandlers(input) {
7203
7206
  scale: 1,
7204
7207
  slideDurationMs: 3e3,
7205
7208
  onProgress: (current, total) => {
7206
- setExportProgress(chunkIKISUZKE_js.slideProgressPercent(current, total, 45));
7207
- setExportStatusMessage(chunkIKISUZKE_js.slideStatusLabel("Capturing", current, total));
7209
+ setExportProgress(chunkH74UXL4Q_js.slideProgressPercent(current, total, 45));
7210
+ setExportStatusMessage(chunkH74UXL4Q_js.slideStatusLabel("Capturing", current, total));
7208
7211
  },
7209
7212
  onRecordProgress: (current, total) => {
7210
- setExportProgress(chunkIKISUZKE_js.recordProgressPercent(current, total));
7211
- setExportStatusMessage(chunkIKISUZKE_js.slideStatusLabel("Recording", current, total));
7213
+ setExportProgress(chunkH74UXL4Q_js.recordProgressPercent(current, total));
7214
+ setExportStatusMessage(chunkH74UXL4Q_js.slideStatusLabel("Recording", current, total));
7212
7215
  },
7213
7216
  signal: abortCtrl.signal
7214
7217
  }
7215
7218
  );
7216
- setExportProgress(chunkIKISUZKE_js.EXPORT_ASSEMBLING_PERCENT);
7219
+ setExportProgress(chunkH74UXL4Q_js.EXPORT_ASSEMBLING_PERCENT);
7217
7220
  setExportStatusMessage("Saving file...");
7218
7221
  downloadBlob2(blob, "presentation.webm");
7219
- setExportProgress(chunkIKISUZKE_js.EXPORT_DONE_PERCENT);
7222
+ setExportProgress(chunkH74UXL4Q_js.EXPORT_DONE_PERCENT);
7220
7223
  } catch (err) {
7221
- if (!chunkIKISUZKE_js.isExportAbortError(err)) {
7224
+ if (!chunkH74UXL4Q_js.isExportAbortError(err)) {
7222
7225
  console.error("[PowerPointViewer] Video export failed:", err);
7223
7226
  }
7224
7227
  } finally {
@@ -7246,18 +7249,18 @@ function useExportHandlers(input) {
7246
7249
  scale: 0.5,
7247
7250
  slideDurationMs: 2e3,
7248
7251
  onProgress: (current, total) => {
7249
- setExportProgress(chunkIKISUZKE_js.slideProgressPercent(current, total));
7250
- setExportStatusMessage(chunkIKISUZKE_js.slideStatusLabel("Encoding", current, total));
7252
+ setExportProgress(chunkH74UXL4Q_js.slideProgressPercent(current, total));
7253
+ setExportStatusMessage(chunkH74UXL4Q_js.slideStatusLabel("Encoding", current, total));
7251
7254
  },
7252
7255
  signal: abortCtrl.signal
7253
7256
  }
7254
7257
  );
7255
- setExportProgress(chunkIKISUZKE_js.EXPORT_ASSEMBLING_PERCENT);
7258
+ setExportProgress(chunkH74UXL4Q_js.EXPORT_ASSEMBLING_PERCENT);
7256
7259
  setExportStatusMessage("Saving file...");
7257
7260
  downloadBlob2(blob, "presentation.gif");
7258
- setExportProgress(chunkIKISUZKE_js.EXPORT_DONE_PERCENT);
7261
+ setExportProgress(chunkH74UXL4Q_js.EXPORT_DONE_PERCENT);
7259
7262
  } catch (err) {
7260
- if (!chunkIKISUZKE_js.isExportAbortError(err)) {
7263
+ if (!chunkH74UXL4Q_js.isExportAbortError(err)) {
7261
7264
  console.error("[PowerPointViewer] GIF export failed:", err);
7262
7265
  }
7263
7266
  } finally {
@@ -7297,7 +7300,7 @@ function openPrintWindow(title, bodyHtml, orientation, colorFilter, frameSlides)
7297
7300
  }
7298
7301
  printWindow.document.open();
7299
7302
  printWindow.document.write(
7300
- chunkIKISUZKE_js.buildPrintHtmlDocument({ title, bodyHtml, orientation, colorFilter, frameSlides })
7303
+ chunkH74UXL4Q_js.buildPrintHtmlDocument({ title, bodyHtml, orientation, colorFilter, frameSlides })
7301
7304
  );
7302
7305
  printWindow.document.close();
7303
7306
  printWindow.focus();
@@ -7358,7 +7361,7 @@ function usePrintHandlers(input) {
7358
7361
  if (svgs.length === 0) {
7359
7362
  return;
7360
7363
  }
7361
- const printDoc = chunkIKISUZKE_js.buildPrintDocument(svgs, pptxData.width, pptxData.height, {
7364
+ const printDoc = chunkH74UXL4Q_js.buildPrintDocument(svgs, pptxData.width, pptxData.height, {
7362
7365
  title: "Slides (Vector)",
7363
7366
  orientation: settings.orientation,
7364
7367
  colorFilter
@@ -7394,7 +7397,7 @@ function usePrintHandlers(input) {
7394
7397
  if (settings.printWhat === "outline") {
7395
7398
  openPrintWindow(
7396
7399
  "Outline",
7397
- `<div class="outline-page">${chunkIKISUZKE_js.buildOutlineHtml(slideIndices, slides)}</div>`,
7400
+ `<div class="outline-page">${chunkH74UXL4Q_js.buildOutlineHtml(slideIndices, slides)}</div>`,
7398
7401
  settings.orientation,
7399
7402
  colorFilter,
7400
7403
  settings.frameSlides
@@ -7419,7 +7422,7 @@ function usePrintHandlers(input) {
7419
7422
  if (settings.printWhat === "slides") {
7420
7423
  openPrintWindow(
7421
7424
  "Slides",
7422
- chunkIKISUZKE_js.buildSlidesHtml(slideImages, slideIndices),
7425
+ chunkH74UXL4Q_js.buildSlidesHtml(slideImages, slideIndices),
7423
7426
  settings.orientation,
7424
7427
  colorFilter,
7425
7428
  settings.frameSlides
@@ -7429,7 +7432,7 @@ function usePrintHandlers(input) {
7429
7432
  if (settings.printWhat === "notes") {
7430
7433
  openPrintWindow(
7431
7434
  "Notes Pages",
7432
- chunkIKISUZKE_js.buildNotesHtml(slideImages, slideIndices, slides),
7435
+ chunkH74UXL4Q_js.buildNotesHtml(slideImages, slideIndices, slides),
7433
7436
  "portrait",
7434
7437
  colorFilter,
7435
7438
  settings.frameSlides
@@ -7440,7 +7443,7 @@ function usePrintHandlers(input) {
7440
7443
  const spp = settings.slidesPerPage;
7441
7444
  openPrintWindow(
7442
7445
  `Handout ${spp} per page`,
7443
- chunkIKISUZKE_js.buildHandoutsHtml(slideImages, slideIndices, spp),
7446
+ chunkH74UXL4Q_js.buildHandoutsHtml(slideImages, slideIndices, spp),
7444
7447
  "portrait",
7445
7448
  colorFilter,
7446
7449
  settings.frameSlides
@@ -7504,8 +7507,8 @@ function useThemeHandlers(input) {
7504
7507
  return;
7505
7508
  }
7506
7509
  await handler.updateThemeColorScheme(colorScheme);
7507
- const previousMap = theme?.colorScheme ? chunkIKISUZKE_js.buildThemeColorMap(theme.colorScheme) : {};
7508
- setSlides((prev) => chunkIKISUZKE_js.reResolveSlideColors(prev, previousMap, colorScheme));
7510
+ const previousMap = theme?.colorScheme ? chunkH74UXL4Q_js.buildThemeColorMap(theme.colorScheme) : {};
7511
+ setSlides((prev) => chunkH74UXL4Q_js.reResolveSlideColors(prev, previousMap, colorScheme));
7509
7512
  setTheme((prev) => prev ? { ...prev, colorScheme } : { colorScheme });
7510
7513
  bumpHistory();
7511
7514
  history.markDirty();
@@ -7610,7 +7613,7 @@ function useThemeSwitching(input) {
7610
7613
  }
7611
7614
  try {
7612
7615
  await handler.applyTheme(preset.colorScheme, preset.fontScheme, preset.name);
7613
- const newData = chunkIKISUZKE_js.applyThemeToData(data, preset.colorScheme, preset.fontScheme, preset.name);
7616
+ const newData = chunkH74UXL4Q_js.applyThemeToData(data, preset.colorScheme, preset.fontScheme, preset.name);
7614
7617
  onDataChange(newData);
7615
7618
  onThemeChanged?.(preset);
7616
7619
  } catch (error) {
@@ -7627,7 +7630,7 @@ function useThemeSwitching(input) {
7627
7630
  }
7628
7631
  try {
7629
7632
  await handler.applyTheme(colorScheme, fontScheme ?? {}, themeName);
7630
- const newData = chunkIKISUZKE_js.applyThemeToData(data, colorScheme, fontScheme, themeName);
7633
+ const newData = chunkH74UXL4Q_js.applyThemeToData(data, colorScheme, fontScheme, themeName);
7631
7634
  onDataChange(newData);
7632
7635
  } catch (error) {
7633
7636
  console.error("Failed to switch to custom theme:", error);
@@ -7639,12 +7642,12 @@ function useThemeSwitching(input) {
7639
7642
  if (!data?.theme?.colorScheme) {
7640
7643
  return void 0;
7641
7644
  }
7642
- return chunkIKISUZKE_js.THEME_PRESETS.find(
7643
- (p) => chunkIKISUZKE_js.themeColorSchemesEqual(data.theme?.colorScheme, p.colorScheme)
7645
+ return chunkH74UXL4Q_js.THEME_PRESETS.find(
7646
+ (p) => chunkH74UXL4Q_js.themeColorSchemesEqual(data.theme?.colorScheme, p.colorScheme)
7644
7647
  );
7645
7648
  }, [data?.theme?.colorScheme]);
7646
7649
  return {
7647
- presets: chunkIKISUZKE_js.THEME_PRESETS,
7650
+ presets: chunkH74UXL4Q_js.THEME_PRESETS,
7648
7651
  switchToPreset,
7649
7652
  switchToCustom,
7650
7653
  currentPreset
@@ -7719,7 +7722,7 @@ function usePropertyHandlers(input) {
7719
7722
  }
7720
7723
  try {
7721
7724
  const ab = await file.arrayBuffer();
7722
- const h = new chunkIKISUZKE_js.PptxHandler();
7725
+ const h = new chunkH74UXL4Q_js.PptxHandler();
7723
7726
  const other = await h.load(ab);
7724
7727
  if (!other) {
7725
7728
  return;
@@ -7729,7 +7732,7 @@ function usePropertyHandlers(input) {
7729
7732
  width: canvasSize.width,
7730
7733
  height: canvasSize.height
7731
7734
  };
7732
- setCompareResult(chunkIKISUZKE_js.comparePresentation(cur, other));
7735
+ setCompareResult(chunkH74UXL4Q_js.comparePresentation(cur, other));
7733
7736
  setIsComparePanelOpen(true);
7734
7737
  } catch (err) {
7735
7738
  console.warn("Compare failed:", err);
@@ -7746,7 +7749,7 @@ function usePropertyHandlers(input) {
7746
7749
  if (!diff || diff.status === "unchanged") {
7747
7750
  return;
7748
7751
  }
7749
- setSlides((prev) => chunkIKISUZKE_js.applyAcceptSlide(prev, diff));
7752
+ setSlides((prev) => chunkH74UXL4Q_js.applyAcceptSlide(prev, diff));
7750
7753
  setIsDirty(true);
7751
7754
  },
7752
7755
  [compareResult, setSlides, setIsDirty]
@@ -7757,10 +7760,10 @@ function usePropertyHandlers(input) {
7757
7760
  if (!compareResult) {
7758
7761
  return;
7759
7762
  }
7760
- setSlides((prev) => chunkIKISUZKE_js.applyAcceptAllSlides(prev, compareResult));
7763
+ setSlides((prev) => chunkH74UXL4Q_js.applyAcceptAllSlides(prev, compareResult));
7761
7764
  setIsDirty(true);
7762
7765
  }, [compareResult, setSlides, setIsDirty]);
7763
- const usedFontFamilies = react.useMemo(() => chunkIKISUZKE_js.collectUsedFonts(slides), [slides]);
7766
+ const usedFontFamilies = react.useMemo(() => chunkH74UXL4Q_js.collectUsedFonts(slides), [slides]);
7764
7767
  return {
7765
7768
  handleUpdateNotes,
7766
7769
  handleUpdateSlide,
@@ -7879,7 +7882,7 @@ function useIsMobile(input) {
7879
7882
  const containerRef = input?.containerRef;
7880
7883
  const isTouchDevice = react.useSyncExternalStore(
7881
7884
  subscribeTouchCapability,
7882
- chunkIKISUZKE_js.detectTouchDevice,
7885
+ chunkH74UXL4Q_js.detectTouchDevice,
7883
7886
  () => false
7884
7887
  // server snapshot
7885
7888
  );
@@ -7895,7 +7898,7 @@ function useIsMobile(input) {
7895
7898
  }
7896
7899
  return containerRef?.current?.clientHeight ?? window.innerHeight;
7897
7900
  });
7898
- const [orientation, setOrientation] = react.useState(chunkIKISUZKE_js.detectOrientation);
7901
+ const [orientation, setOrientation] = react.useState(chunkH74UXL4Q_js.detectOrientation);
7899
7902
  const [isVirtualKeyboardOpen, setIsVirtualKeyboardOpen] = react.useState(false);
7900
7903
  const [initialViewportHeight] = react.useState(
7901
7904
  () => typeof window !== "undefined" ? window.innerHeight : 800
@@ -7939,7 +7942,7 @@ function useIsMobile(input) {
7939
7942
  return;
7940
7943
  }
7941
7944
  const handleOrientationChange = () => {
7942
- setOrientation(chunkIKISUZKE_js.detectOrientation());
7945
+ setOrientation(chunkH74UXL4Q_js.detectOrientation());
7943
7946
  };
7944
7947
  if (screen.orientation) {
7945
7948
  screen.orientation.addEventListener("change", handleOrientationChange);
@@ -7969,9 +7972,9 @@ function useIsMobile(input) {
7969
7972
  window.addEventListener("resize", handleResize);
7970
7973
  return () => window.removeEventListener("resize", handleResize);
7971
7974
  }, [isTouchDevice, initialViewportHeight]);
7972
- const isMobile = chunkIKISUZKE_js.isMobileViewport(containerWidth, containerHeight, isTouchDevice);
7973
- const isTablet = !isMobile && containerWidth >= chunkIKISUZKE_js.MOBILE_BREAKPOINT && containerWidth < chunkIKISUZKE_js.TABLET_BREAKPOINT;
7974
- const isDesktop = !isMobile && containerWidth >= chunkIKISUZKE_js.TABLET_BREAKPOINT;
7975
+ const isMobile = chunkH74UXL4Q_js.isMobileViewport(containerWidth, containerHeight, isTouchDevice);
7976
+ const isTablet = !isMobile && containerWidth >= chunkH74UXL4Q_js.MOBILE_BREAKPOINT && containerWidth < chunkH74UXL4Q_js.TABLET_BREAKPOINT;
7977
+ const isDesktop = !isMobile && containerWidth >= chunkH74UXL4Q_js.TABLET_BREAKPOINT;
7975
7978
  return {
7976
7979
  isMobile,
7977
7980
  isTablet,
@@ -8032,11 +8035,11 @@ function useViewerDialogs(input) {
8032
8035
  );
8033
8036
  const [embedFontsEnabled, setEmbedFontsEnabled] = react.useState(false);
8034
8037
  const [isNarrowViewport, setIsNarrowViewport] = react.useState(
8035
- () => typeof window !== "undefined" ? chunkIKISUZKE_js.isMobileViewport(window.innerWidth, window.innerHeight, viewportIsTouch()) : false
8038
+ () => typeof window !== "undefined" ? chunkH74UXL4Q_js.isMobileViewport(window.innerWidth, window.innerHeight, viewportIsTouch()) : false
8036
8039
  );
8037
8040
  react.useEffect(() => {
8038
8041
  const handleWindow = () => setIsNarrowViewport(
8039
- chunkIKISUZKE_js.isMobileViewport(window.innerWidth, window.innerHeight, viewportIsTouch())
8042
+ chunkH74UXL4Q_js.isMobileViewport(window.innerWidth, window.innerHeight, viewportIsTouch())
8040
8043
  );
8041
8044
  let observer = null;
8042
8045
  let raf = 0;
@@ -8050,12 +8053,12 @@ function useViewerDialogs(input) {
8050
8053
  const entry = entries[0];
8051
8054
  if (entry) {
8052
8055
  setIsNarrowViewport(
8053
- chunkIKISUZKE_js.isMobileViewport(entry.contentRect.width, entry.contentRect.height, viewportIsTouch())
8056
+ chunkH74UXL4Q_js.isMobileViewport(entry.contentRect.width, entry.contentRect.height, viewportIsTouch())
8054
8057
  );
8055
8058
  }
8056
8059
  });
8057
8060
  observer.observe(el);
8058
- setIsNarrowViewport(chunkIKISUZKE_js.isMobileViewport(el.clientWidth, el.clientHeight, viewportIsTouch()));
8061
+ setIsNarrowViewport(chunkH74UXL4Q_js.isMobileViewport(el.clientWidth, el.clientHeight, viewportIsTouch()));
8059
8062
  };
8060
8063
  attach();
8061
8064
  window.addEventListener("resize", handleWindow);
@@ -8213,12 +8216,12 @@ function useViewerDialogs(input) {
8213
8216
  }
8214
8217
  function computeGridSpacingPx(presentationGridSpacing) {
8215
8218
  if (presentationGridSpacing) {
8216
- const px = Math.round(presentationGridSpacing.cx / chunk34BUZNKO_js.EMU_PER_PX);
8219
+ const px = Math.round(presentationGridSpacing.cx / chunkIJVDNQLG_js.EMU_PER_PX);
8217
8220
  if (px > 0) {
8218
8221
  return px;
8219
8222
  }
8220
8223
  }
8221
- return chunk34BUZNKO_js.GRID_SIZE;
8224
+ return chunkIJVDNQLG_js.GRID_SIZE;
8222
8225
  }
8223
8226
  function computeVisibleSlideIndexes(slides, activeCustomShowId, customShows) {
8224
8227
  if (activeCustomShowId) {
@@ -8232,8 +8235,8 @@ function computeVisibleSlideIndexes(slides, activeCustomShowId, customShows) {
8232
8235
  return slides.map((_, i) => i).filter((i) => !slides[i]?.hidden);
8233
8236
  }
8234
8237
  function computeSlideSectionGroups(slides, sections) {
8235
- return chunkIKISUZKE_js.groupSlidesBySection(sections, slides).map((group) => ({
8236
- id: group.section?.id ?? (sections.length > 0 ? chunk34BUZNKO_js.UNGROUPED_SECTION_ID : "default"),
8238
+ return chunkH74UXL4Q_js.groupSlidesBySection(sections, slides).map((group) => ({
8239
+ id: group.section?.id ?? (sections.length > 0 ? chunkIJVDNQLG_js.UNGROUPED_SECTION_ID : "default"),
8237
8240
  label: group.section?.name ?? (sections.length > 0 ? "Ungrouped Slides" : "Slides"),
8238
8241
  slideIndexes: group.slideIndexes,
8239
8242
  ...group.section?.color !== void 0 ? { color: group.section.color } : {},
@@ -8288,7 +8291,7 @@ function useDerivedSlideState(input) {
8288
8291
  );
8289
8292
  const slideSectionGroups = react.useMemo(
8290
8293
  () => computeSlideSectionGroups(slides, sections).map((group) => {
8291
- if (group.id === chunk34BUZNKO_js.UNGROUPED_SECTION_ID && group.label === "Ungrouped Slides") {
8294
+ if (group.id === chunkIJVDNQLG_js.UNGROUPED_SECTION_ID && group.label === "Ungrouped Slides") {
8292
8295
  return { ...group, label: t("pptx.slides.ungroupedSlides") };
8293
8296
  }
8294
8297
  if (group.id === "default" && group.label === "Slides") {
@@ -8391,13 +8394,13 @@ function useAnnotationHandlers(input) {
8391
8394
  }, [annotations, setMode, setSlides, history]);
8392
8395
  const handleSetMode = react.useCallback(
8393
8396
  (nextMode) => {
8394
- if (mode === "present" && nextMode !== "present" && !chunkIKISUZKE_js.mayLeaveSlideShow()) {
8397
+ if (mode === "present" && nextMode !== "present" && !chunkH74UXL4Q_js.mayLeaveSlideShow()) {
8395
8398
  return;
8396
8399
  }
8397
8400
  if (nextMode === "present") {
8398
8401
  presentation.enterPresentMode();
8399
8402
  } else if (mode === "present" && annotations.hasAnyAnnotations) {
8400
- chunk34BUZNKO_js.stopAllPersistentAudio();
8403
+ chunkIJVDNQLG_js.stopAllPersistentAudio();
8401
8404
  pendingModeAfterAnnotationsRef.current = nextMode;
8402
8405
  if (promptKeepInkAnnotations) {
8403
8406
  setShowKeepAnnotationsDialog(true);
@@ -8406,7 +8409,7 @@ function useAnnotationHandlers(input) {
8406
8409
  }
8407
8410
  } else {
8408
8411
  if (mode === "present") {
8409
- chunk34BUZNKO_js.stopAllPersistentAudio();
8412
+ chunkIJVDNQLG_js.stopAllPersistentAudio();
8410
8413
  }
8411
8414
  setMode(nextMode);
8412
8415
  }
@@ -8472,13 +8475,13 @@ function useSerialize(input) {
8472
8475
  let processedSlide = slide;
8473
8476
  if (pendingEditId) {
8474
8477
  const updatedElements = slide.elements.map((el) => {
8475
- if (el.id !== pendingEditId || !chunkIKISUZKE_js.hasTextProperties(el)) {
8478
+ if (el.id !== pendingEditId || !chunkH74UXL4Q_js.hasTextProperties(el)) {
8476
8479
  return el;
8477
8480
  }
8478
8481
  return {
8479
8482
  ...el,
8480
8483
  text: pendingEditText,
8481
- textSegments: chunkIKISUZKE_js.remapTextToSegments(pendingEditText, el.textSegments, el.textStyle)
8484
+ textSegments: chunkH74UXL4Q_js.remapTextToSegments(pendingEditText, el.textSegments, el.textStyle)
8482
8485
  };
8483
8486
  });
8484
8487
  if (updatedElements.some((el, i) => el !== slide.elements[i])) {
@@ -8491,14 +8494,14 @@ function useSerialize(input) {
8491
8494
  const pptxGuides = guides.map((g) => ({
8492
8495
  id: g.id,
8493
8496
  orientation: g.axis === "h" ? "horz" : "vert",
8494
- positionEmu: chunkIKISUZKE_js.guidePxToEmu(g.position)
8497
+ positionEmu: chunkH74UXL4Q_js.guidePxToEmu(g.position)
8495
8498
  }));
8496
8499
  return {
8497
8500
  ...processedSlide,
8498
8501
  guides: pptxGuides.length > 0 ? pptxGuides : void 0
8499
8502
  };
8500
8503
  });
8501
- const slidesToSave = chunk34BUZNKO_js.buildSaveSlides(slidesWithGuides, templateElementsBySlideId);
8504
+ const slidesToSave = chunkIJVDNQLG_js.buildSaveSlides(slidesWithGuides, templateElementsBySlideId);
8502
8505
  const saveOptions = {
8503
8506
  headerFooter,
8504
8507
  presentationProperties,
@@ -8667,7 +8670,7 @@ function usePresentationSetup(input) {
8667
8670
  containerRef,
8668
8671
  content,
8669
8672
  onSetMode: (nextMode) => {
8670
- if (mode === "present" && nextMode !== "present" && !chunkIKISUZKE_js.mayLeaveSlideShow()) {
8673
+ if (mode === "present" && nextMode !== "present" && !chunkH74UXL4Q_js.mayLeaveSlideShow()) {
8671
8674
  return;
8672
8675
  }
8673
8676
  if (mode === "present" && nextMode !== "present" && annotations.hasAnyAnnotations && promptKeepInkAnnotations) {
@@ -8675,7 +8678,7 @@ function usePresentationSetup(input) {
8675
8678
  setShowKeepAnnotationsDialog(true);
8676
8679
  } else {
8677
8680
  if (mode === "present" && nextMode !== "present") {
8678
- chunk34BUZNKO_js.stopAllPersistentAudio();
8681
+ chunkIJVDNQLG_js.stopAllPersistentAudio();
8679
8682
  stopAnimationSound();
8680
8683
  }
8681
8684
  setMode(nextMode);
@@ -8729,10 +8732,10 @@ function usePresentationSetup(input) {
8729
8732
  onToggleInkMarkup: () => annotations.setInkMarkupVisible(!annotations.inkMarkupVisible),
8730
8733
  onToggleToolbar: () => annotations.setToolbarVisible(!annotations.toolbarVisible),
8731
8734
  onSaveRehearsalTimings: (timings) => {
8732
- setSlides((prev) => chunkIKISUZKE_js.applyRehearsalTimings(prev, timings));
8735
+ setSlides((prev) => chunkH74UXL4Q_js.applyRehearsalTimings(prev, timings));
8733
8736
  history.markDirty();
8734
8737
  },
8735
- loopContinuously: chunkIKISUZKE_js.shouldLoopContinuously(presentationProperties),
8738
+ loopContinuously: chunkH74UXL4Q_js.shouldLoopContinuously(presentationProperties),
8736
8739
  showWithAnimation: presentationProperties.showWithAnimation,
8737
8740
  useTimings: presentationProperties.advanceMode !== "manual",
8738
8741
  endWithBlackSlide
@@ -8894,7 +8897,7 @@ function useEditorOperations(input) {
8894
8897
  const { formatPainterActive, setFormatPainterActive, elementLookup } = state;
8895
8898
  react.useEffect(() => {
8896
8899
  if (formatPainterActive && !prevFormatPainterRef.current && selectedElement) {
8897
- copiedFormatRef.current = chunkIKISUZKE_js.copyFormatFromElement(selectedElement);
8900
+ copiedFormatRef.current = chunkH74UXL4Q_js.copyFormatFromElement(selectedElement);
8898
8901
  } else if (!formatPainterActive) {
8899
8902
  copiedFormatRef.current = null;
8900
8903
  }
@@ -8920,12 +8923,12 @@ function useEditorOperations(input) {
8920
8923
  e.stopPropagation();
8921
8924
  const element = elementLookup.get(elementId);
8922
8925
  if (element) {
8923
- const updated = chunkIKISUZKE_js.applyFormatToElement(element, copiedFormatRef.current);
8926
+ const updated = chunkH74UXL4Q_js.applyFormatToElement(element, copiedFormatRef.current);
8924
8927
  const updates = {};
8925
- if (chunkIKISUZKE_js.hasShapeProperties(updated)) {
8928
+ if (chunkH74UXL4Q_js.hasShapeProperties(updated)) {
8926
8929
  updates.shapeStyle = updated.shapeStyle;
8927
8930
  }
8928
- if (chunkIKISUZKE_js.hasTextProperties(updated)) {
8931
+ if (chunkH74UXL4Q_js.hasTextProperties(updated)) {
8929
8932
  updates.textStyle = updated.textStyle;
8930
8933
  }
8931
8934
  ops.updateElementById(elementId, updates);
@@ -9072,7 +9075,7 @@ function collectReferencedFontFamilies(slides) {
9072
9075
  const families = /* @__PURE__ */ new Set();
9073
9076
  for (const slide of slides) {
9074
9077
  for (const el of slide.elements) {
9075
- if (chunkIKISUZKE_js.hasTextProperties(el) && el.textSegments) {
9078
+ if (chunkH74UXL4Q_js.hasTextProperties(el) && el.textSegments) {
9076
9079
  for (const seg of el.textSegments) {
9077
9080
  if (seg.style.fontFamily) {
9078
9081
  families.add(seg.style.fontFamily);
@@ -9284,13 +9287,13 @@ function useKeyboardShortcuts(input) {
9284
9287
  inputRef.current = input;
9285
9288
  const handleKeyDown = react.useCallback((e) => {
9286
9289
  const current = inputRef.current;
9287
- const { action, dx, dy } = chunkIKISUZKE_js.mapEditorKey(e, {
9290
+ const { action, dx, dy } = chunkH74UXL4Q_js.mapEditorKey(e, {
9288
9291
  canEdit: current.canEdit,
9289
9292
  isPresenting: current.mode !== "edit",
9290
9293
  hasSelection: current.hasSelection,
9291
9294
  isEditingText: Boolean(current.inlineEditingElementId || current.tableEditorState?.isEditing),
9292
9295
  isDrawing: current.activeTool !== "select",
9293
- isTextInputTarget: chunkIKISUZKE_js.isEditorTextInputTarget(e.target)
9296
+ isTextInputTarget: chunkH74UXL4Q_js.isEditorTextInputTarget(e.target)
9294
9297
  });
9295
9298
  if (action === null) {
9296
9299
  return;
@@ -9583,7 +9586,7 @@ function useViewerIntegration(input) {
9583
9586
  return zoom.scale;
9584
9587
  },
9585
9588
  setZoom(level) {
9586
- zoom.setScale(chunkIKISUZKE_js.clampZoomScale(level));
9589
+ zoom.setScale(chunkH74UXL4Q_js.clampZoomScale(level));
9587
9590
  },
9588
9591
  zoomIn() {
9589
9592
  zoom.handleZoomIn();
@@ -9798,7 +9801,7 @@ function useReducedMotion() {
9798
9801
  }
9799
9802
  function useViewerOptions() {
9800
9803
  const storeRef = react.useRef(null);
9801
- storeRef.current ??= chunkIKISUZKE_js.createViewerOptionsStore();
9804
+ storeRef.current ??= chunkH74UXL4Q_js.createViewerOptionsStore();
9802
9805
  const store = storeRef.current;
9803
9806
  const options = react.useSyncExternalStore(
9804
9807
  (onStoreChange) => store.subscribe(onStoreChange),
@@ -9807,9 +9810,9 @@ function useViewerOptions() {
9807
9810
  );
9808
9811
  return { optionsStore: store, options };
9809
9812
  }
9810
- var KNOWN_TAB_IDS = new Set(chunkIKISUZKE_js.TOOLBAR_TABS.map((tab) => tab.id));
9813
+ var KNOWN_TAB_IDS = new Set(chunkH74UXL4Q_js.TOOLBAR_TABS.map((tab) => tab.id));
9811
9814
  function computeToolbarVisibility(hiddenActions) {
9812
- const isHidden = (id) => chunkIKISUZKE_js.isActionHidden(id, hiddenActions);
9815
+ const isHidden = (id) => chunkH74UXL4Q_js.isActionHidden(id, hiddenActions);
9813
9816
  const isTabVisible = (id) => !KNOWN_TAB_IDS.has(id) || !isHidden(id);
9814
9817
  return { isHidden, isTabVisible };
9815
9818
  }
@@ -9894,12 +9897,12 @@ function useYjsDocumentSync({
9894
9897
  return;
9895
9898
  }
9896
9899
  try {
9897
- const handler = new chunkIKISUZKE_js.PptxHandler();
9900
+ const handler = new chunkH74UXL4Q_js.PptxHandler();
9898
9901
  await handler.load(sourceBytes.buffer);
9899
- const currentSlides = chunkIKISUZKE_js.readSlidesFromYDoc(
9902
+ const currentSlides = chunkH74UXL4Q_js.readSlidesFromYDoc(
9900
9903
  doc
9901
9904
  );
9902
- const slidesToSave = chunk34BUZNKO_js.buildSaveSlides(currentSlides, templateElementsBySlideId);
9905
+ const slidesToSave = chunkIJVDNQLG_js.buildSaveSlides(currentSlides, templateElementsBySlideId);
9903
9906
  const bytes = await handler.save(slidesToSave);
9904
9907
  config.onWriteBack(bytes);
9905
9908
  } catch {
@@ -9914,7 +9917,7 @@ function useYjsDocumentSync({
9914
9917
  if (!doc || !isConnected) {
9915
9918
  return;
9916
9919
  }
9917
- const docSlides = chunkIKISUZKE_js.readSlidesFromYDoc(
9920
+ const docSlides = chunkH74UXL4Q_js.readSlidesFromYDoc(
9918
9921
  doc
9919
9922
  );
9920
9923
  if (docSlides.length === 0) {
@@ -9936,11 +9939,11 @@ function useYjsDocumentSync({
9936
9939
  lastSyncedRef.current = serialized;
9937
9940
  void (async () => {
9938
9941
  const factories = await getFactories();
9939
- chunkIKISUZKE_js.reconcileSlidesInYDoc(
9942
+ chunkH74UXL4Q_js.reconcileSlidesInYDoc(
9940
9943
  slides,
9941
9944
  doc,
9942
9945
  factories,
9943
- chunkIKISUZKE_js.LOCAL_SYNC_ORIGIN
9946
+ chunkH74UXL4Q_js.LOCAL_SYNC_ORIGIN
9944
9947
  );
9945
9948
  scheduleWriteBack();
9946
9949
  })();
@@ -9954,10 +9957,10 @@ function useYjsDocumentSync({
9954
9957
  return;
9955
9958
  }
9956
9959
  const handleChange = (_events, transaction) => {
9957
- if (transaction?.origin === chunkIKISUZKE_js.LOCAL_SYNC_ORIGIN) {
9960
+ if (transaction?.origin === chunkH74UXL4Q_js.LOCAL_SYNC_ORIGIN) {
9958
9961
  return;
9959
9962
  }
9960
- const remoteSlides = chunkIKISUZKE_js.readSlidesFromYDoc(
9963
+ const remoteSlides = chunkH74UXL4Q_js.readSlidesFromYDoc(
9961
9964
  doc
9962
9965
  );
9963
9966
  if (remoteSlides.length === 0) {
@@ -9973,7 +9976,7 @@ function useYjsDocumentSync({
9973
9976
  isApplyingRemoteRef.current = false;
9974
9977
  scheduleWriteBack();
9975
9978
  };
9976
- const unobserve = chunkIKISUZKE_js.observeYDocSlides(
9979
+ const unobserve = chunkH74UXL4Q_js.observeYDocSlides(
9977
9980
  doc,
9978
9981
  handleChange
9979
9982
  );
@@ -10011,7 +10014,7 @@ function useBroadcastFollower({
10011
10014
  if (!broadcaster) {
10012
10015
  return;
10013
10016
  }
10014
- if (!chunkIKISUZKE_js.shouldAutoFollowBroadcaster({
10017
+ if (!chunkH74UXL4Q_js.shouldAutoFollowBroadcaster({
10015
10018
  localRole: collab.config.role,
10016
10019
  broadcasterRole: broadcaster.role
10017
10020
  })) {
@@ -10171,10 +10174,10 @@ function useTouchGestures(input) {
10171
10174
  if (!el || !enabled) {
10172
10175
  return;
10173
10176
  }
10174
- const recognizer = chunkIKISUZKE_js.createTouchGestureRecognizer({
10177
+ const recognizer = chunkH74UXL4Q_js.createTouchGestureRecognizer({
10175
10178
  getScale: () => scaleRef.current,
10176
- minScale: chunkIKISUZKE_js.MIN_ZOOM_SCALE,
10177
- maxScale: chunkIKISUZKE_js.MAX_ZOOM_SCALE,
10179
+ minScale: chunkH74UXL4Q_js.MIN_ZOOM_SCALE,
10180
+ maxScale: chunkH74UXL4Q_js.MAX_ZOOM_SCALE,
10178
10181
  callbacks: {
10179
10182
  onPinchZoom: (newScale) => callbacksRef.current.onPinchZoom?.(newScale),
10180
10183
  onSwipe: (direction) => callbacksRef.current.onSwipe?.(direction),
@@ -10214,7 +10217,7 @@ function scrollFocusedIntoView(keyboardInset) {
10214
10217
  return;
10215
10218
  }
10216
10219
  const rect = active.getBoundingClientRect();
10217
- const delta = chunkIKISUZKE_js.computeScrollDelta(
10220
+ const delta = chunkH74UXL4Q_js.computeScrollDelta(
10218
10221
  { top: rect.top, bottom: rect.bottom },
10219
10222
  window.innerHeight,
10220
10223
  keyboardInset
@@ -10234,8 +10237,8 @@ function useKeyboardInsets(enabled = true) {
10234
10237
  return;
10235
10238
  }
10236
10239
  const update = () => {
10237
- const metrics = chunkIKISUZKE_js.readViewportMetrics(window);
10238
- const inset = metrics ? chunkIKISUZKE_js.computeKeyboardInset(metrics) : 0;
10240
+ const metrics = chunkH74UXL4Q_js.readViewportMetrics(window);
10241
+ const inset = metrics ? chunkH74UXL4Q_js.computeKeyboardInset(metrics) : 0;
10239
10242
  setKeyboardInset(inset);
10240
10243
  if (inset > 0) {
10241
10244
  window.requestAnimationFrame(() => scrollFocusedIntoView(inset));
@@ -10246,8 +10249,8 @@ function useKeyboardInsets(enabled = true) {
10246
10249
  vv.addEventListener("scroll", update);
10247
10250
  const onFocusIn = () => {
10248
10251
  window.requestAnimationFrame(() => {
10249
- const metrics = chunkIKISUZKE_js.readViewportMetrics(window);
10250
- const inset = metrics ? chunkIKISUZKE_js.computeKeyboardInset(metrics) : 0;
10252
+ const metrics = chunkH74UXL4Q_js.readViewportMetrics(window);
10253
+ const inset = metrics ? chunkH74UXL4Q_js.computeKeyboardInset(metrics) : 0;
10251
10254
  if (inset > 0) {
10252
10255
  scrollFocusedIntoView(inset);
10253
10256
  }
@@ -10260,7 +10263,7 @@ function useKeyboardInsets(enabled = true) {
10260
10263
  document.removeEventListener("focusin", onFocusIn);
10261
10264
  };
10262
10265
  }, [enabled]);
10263
- return { keyboardInset, isKeyboardOpen: chunkIKISUZKE_js.isKeyboardOpen(keyboardInset) };
10266
+ return { keyboardInset, isKeyboardOpen: chunkH74UXL4Q_js.isKeyboardOpen(keyboardInset) };
10264
10267
  }
10265
10268
 
10266
10269
  // src/viewer/hooks/useViewerBuildingBlocks-canvas-props.ts
@@ -10287,7 +10290,7 @@ function buildCanvasProps(input) {
10287
10290
  } = input;
10288
10291
  const effectiveSlide = mode === "master" ? masterPseudoSlide : activeSlide;
10289
10292
  const effectiveTemplateElements = mode === "master" ? s.activeLayout ? s.activeMaster?.elements ?? [] : [] : templateElements;
10290
- const fieldContext = chunkIKISUZKE_js.buildFieldSubstitutionContext({
10293
+ const fieldContext = chunkH74UXL4Q_js.buildFieldSubstitutionContext({
10291
10294
  headerFooter: s.headerFooter,
10292
10295
  customProperties: s.customProperties,
10293
10296
  slide: activeSlide
@@ -10297,13 +10300,13 @@ function buildCanvasProps(input) {
10297
10300
  if (mode === "present") {
10298
10301
  presentation.handlePresentationAction(action);
10299
10302
  } else if (action.url) {
10300
- chunkIKISUZKE_js.safeOpenUrl(action.url);
10303
+ chunkH74UXL4Q_js.safeOpenUrl(action.url);
10301
10304
  }
10302
10305
  };
10303
10306
  const handleHyperlinkClick = (url) => {
10304
- if (chunkIKISUZKE_js.isPpactionUrl(url)) {
10307
+ if (chunkH74UXL4Q_js.isPpactionUrl(url)) {
10305
10308
  if (mode === "present") {
10306
- const parsed = chunkIKISUZKE_js.parsePpactionUrl(url);
10309
+ const parsed = chunkH74UXL4Q_js.parsePpactionUrl(url);
10307
10310
  if (parsed) {
10308
10311
  presentation.handlePresentationAction({
10309
10312
  action: parsed.action,
@@ -10313,7 +10316,7 @@ function buildCanvasProps(input) {
10313
10316
  }
10314
10317
  return;
10315
10318
  }
10316
- chunkIKISUZKE_js.safeOpenUrl(url);
10319
+ chunkH74UXL4Q_js.safeOpenUrl(url);
10317
10320
  };
10318
10321
  return {
10319
10322
  activeSlide: effectiveSlide,
@@ -10643,7 +10646,7 @@ function buildToolbarProps(input) {
10643
10646
  onOpenFile,
10644
10647
  onOpenRecentFile,
10645
10648
  onCreatePresentation: (templateId) => {
10646
- s.setSlides(chunkIKISUZKE_js.createBackstagePresentation(templateId));
10649
+ s.setSlides(chunkH74UXL4Q_js.createBackstagePresentation(templateId));
10647
10650
  s.setActiveSlideIndex(0);
10648
10651
  s.setSelectedElementId(null);
10649
10652
  s.setSelectedElementIds([]);
@@ -10661,6 +10664,7 @@ function buildToolbarProps(input) {
10661
10664
  onOpenSettings,
10662
10665
  onRunAccessibilityCheck: dialogs.handleRunAccessibilityCheck,
10663
10666
  onToggleSlideSorter: () => s.setShowSlideSorter((p) => !p),
10667
+ onOpenReadingView: () => s.setShowReadingView(true),
10664
10668
  onUpdateTextStyle: ops.updateSelectedTextStyle,
10665
10669
  onTransformTextCase: ops.updateSelectedTextCase,
10666
10670
  isOverflowMenuOpen: s.isOverflowMenuOpen,
@@ -10698,7 +10702,7 @@ function buildToolbarProps(input) {
10698
10702
  isCommentsPanelOpen: s.isInspectorPaneOpen,
10699
10703
  slideCommentCount: activeSlide?.comments?.length ?? 0,
10700
10704
  formatPainterActive: s.formatPainterActive,
10701
- canActivateFormatPainter: chunkIKISUZKE_js.hasCopyableFormat(selectedElement),
10705
+ canActivateFormatPainter: chunkH74UXL4Q_js.hasCopyableFormat(selectedElement),
10702
10706
  onToggleFormatPainter: () => s.setFormatPainterActive((p) => !p),
10703
10707
  isSelectionPaneOpen: s.isSelectionPaneOpen,
10704
10708
  onToggleSelectionPane: () => s.setIsSelectionPaneOpen((p) => !p),
@@ -10961,7 +10965,7 @@ function useViewerBuildingBlocks(input) {
10961
10965
  }, [incomingContent]);
10962
10966
  const onOpenFile = react.useCallback(() => {
10963
10967
  void (async () => {
10964
- const picked = await chunkIKISUZKE_js.openPptxFile();
10968
+ const picked = await chunkH74UXL4Q_js.openPptxFile();
10965
10969
  if (picked) {
10966
10970
  setContent(picked.buffer);
10967
10971
  }
@@ -10969,7 +10973,7 @@ function useViewerBuildingBlocks(input) {
10969
10973
  }, []);
10970
10974
  const onOpenRecentFile = react.useCallback((key) => {
10971
10975
  void (async () => {
10972
- const bytes = await chunkIKISUZKE_js.readBackstageRecentFile(key);
10976
+ const bytes = await chunkH74UXL4Q_js.readBackstageRecentFile(key);
10973
10977
  if (bytes) {
10974
10978
  setContent(bytes);
10975
10979
  }