pptx-react-viewer 1.24.0 → 1.25.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 (92) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +46 -21
  3. package/dist/{Model3DScene-RD4XEC3F.js → Model3DScene-G434BPF4.js} +2 -2
  4. package/dist/Model3DScene-G434BPF4.js.br +0 -0
  5. package/dist/Model3DScene-G434BPF4.js.gz +0 -0
  6. package/dist/{Model3DScene-QTNGCODM.mjs → Model3DScene-GGNUAOGD.mjs} +1 -1
  7. package/dist/Model3DScene-GGNUAOGD.mjs.br +0 -0
  8. package/dist/Model3DScene-GGNUAOGD.mjs.gz +0 -0
  9. package/dist/PowerPointViewer-CnADroqZ.d.ts.map +1 -1
  10. package/dist/{SurfaceChart3DScene-VKS3ELTU.mjs → SurfaceChart3DScene-JU737NN5.mjs} +1 -1
  11. package/dist/SurfaceChart3DScene-JU737NN5.mjs.br +0 -0
  12. package/dist/SurfaceChart3DScene-JU737NN5.mjs.gz +0 -0
  13. package/dist/{SurfaceChart3DScene-YR3GX4X6.js → SurfaceChart3DScene-UFFJ3P6T.js} +2 -2
  14. package/dist/{SurfaceChart3DScene-YR3GX4X6.js.br → SurfaceChart3DScene-UFFJ3P6T.js.br} +0 -0
  15. package/dist/SurfaceChart3DScene-UFFJ3P6T.js.gz +0 -0
  16. package/dist/{chunk-ZISXRMDJ.js → chunk-2EFVXYNA.js} +187 -1
  17. package/dist/chunk-2EFVXYNA.js.br +0 -0
  18. package/dist/{chunk-ZISXRMDJ.js.gz → chunk-2EFVXYNA.js.gz} +0 -0
  19. package/dist/{chunk-3YMK5VLS.js → chunk-EM77GISR.js} +1675 -1033
  20. package/dist/chunk-EM77GISR.js.br +0 -0
  21. package/dist/chunk-EM77GISR.js.gz +0 -0
  22. package/dist/{chunk-GKST4OS7.js → chunk-IHHK6WEQ.js} +555 -446
  23. package/dist/chunk-IHHK6WEQ.js.br +0 -0
  24. package/dist/chunk-IHHK6WEQ.js.gz +0 -0
  25. package/dist/{chunk-E3KJKCSV.mjs → chunk-M3SIFXWD.mjs} +187 -1
  26. package/dist/chunk-M3SIFXWD.mjs.br +0 -0
  27. package/dist/{chunk-E3KJKCSV.mjs.gz → chunk-M3SIFXWD.mjs.gz} +0 -0
  28. package/dist/{chunk-PUQ6GIOM.mjs → chunk-NKSIDFYP.mjs} +972 -330
  29. package/dist/chunk-NKSIDFYP.mjs.br +0 -0
  30. package/dist/chunk-NKSIDFYP.mjs.gz +0 -0
  31. package/dist/{chunk-KPT54MHG.mjs → chunk-QOBKJKLT.mjs} +861 -10
  32. package/dist/chunk-QOBKJKLT.mjs.br +0 -0
  33. package/dist/{chunk-KPT54MHG.mjs.gz → chunk-QOBKJKLT.mjs.gz} +0 -0
  34. package/dist/{chunk-YJVMOX2Y.mjs → chunk-VDALVGDT.mjs} +151 -43
  35. package/dist/chunk-VDALVGDT.mjs.br +0 -0
  36. package/dist/chunk-VDALVGDT.mjs.gz +0 -0
  37. package/dist/{chunk-I5SO5OV4.js → chunk-VKOVFVDJ.js} +876 -10
  38. package/dist/chunk-VKOVFVDJ.js.br +0 -0
  39. package/dist/{chunk-I5SO5OV4.js.gz → chunk-VKOVFVDJ.js.gz} +0 -0
  40. package/dist/hooks-unstable.d.ts +231 -4
  41. package/dist/hooks-unstable.d.ts.map +1 -1
  42. package/dist/hooks-unstable.js +81 -77
  43. package/dist/hooks-unstable.js.br +0 -0
  44. package/dist/hooks-unstable.js.gz +0 -0
  45. package/dist/hooks-unstable.mjs +3 -3
  46. package/dist/hooks-unstable.mjs.br +0 -0
  47. package/dist/hooks-unstable.mjs.gz +0 -0
  48. package/dist/i18n.js +4 -4
  49. package/dist/i18n.js.br +0 -0
  50. package/dist/i18n.js.gz +0 -0
  51. package/dist/i18n.mjs +1 -1
  52. package/dist/i18n.mjs.br +0 -0
  53. package/dist/i18n.mjs.gz +0 -0
  54. package/dist/{index-hm2FF-FU.d.ts → index-DWvM1PBB.d.ts} +25 -2
  55. package/dist/index-DWvM1PBB.d.ts.map +1 -0
  56. package/dist/index.d.ts +146 -26
  57. package/dist/index.js +34 -34
  58. package/dist/index.js.br +0 -0
  59. package/dist/index.js.gz +0 -0
  60. package/dist/index.mjs +4 -4
  61. package/dist/index.mjs.br +0 -0
  62. package/dist/index.mjs.gz +0 -0
  63. package/dist/pptx-viewer.css +1 -1
  64. package/dist/pptx-viewer.css.br +0 -0
  65. package/dist/pptx-viewer.css.gz +0 -0
  66. package/dist/viewer/index.js +20 -20
  67. package/dist/viewer/index.js.br +0 -0
  68. package/dist/viewer/index.js.gz +0 -0
  69. package/dist/viewer/index.mjs +4 -4
  70. package/dist/viewer/index.mjs.br +0 -0
  71. package/dist/viewer/index.mjs.gz +0 -0
  72. package/package.json +1 -1
  73. package/dist/Model3DScene-QTNGCODM.mjs.br +0 -0
  74. package/dist/Model3DScene-QTNGCODM.mjs.gz +0 -0
  75. package/dist/Model3DScene-RD4XEC3F.js.br +0 -0
  76. package/dist/Model3DScene-RD4XEC3F.js.gz +0 -0
  77. package/dist/SurfaceChart3DScene-VKS3ELTU.mjs.br +0 -0
  78. package/dist/SurfaceChart3DScene-VKS3ELTU.mjs.gz +0 -0
  79. package/dist/SurfaceChart3DScene-YR3GX4X6.js.gz +0 -0
  80. package/dist/chunk-3YMK5VLS.js.br +0 -0
  81. package/dist/chunk-3YMK5VLS.js.gz +0 -0
  82. package/dist/chunk-E3KJKCSV.mjs.br +0 -0
  83. package/dist/chunk-GKST4OS7.js.br +0 -0
  84. package/dist/chunk-GKST4OS7.js.gz +0 -0
  85. package/dist/chunk-I5SO5OV4.js.br +0 -0
  86. package/dist/chunk-KPT54MHG.mjs.br +0 -0
  87. package/dist/chunk-PUQ6GIOM.mjs.br +0 -0
  88. package/dist/chunk-PUQ6GIOM.mjs.gz +0 -0
  89. package/dist/chunk-YJVMOX2Y.mjs.br +0 -0
  90. package/dist/chunk-YJVMOX2Y.mjs.gz +0 -0
  91. package/dist/chunk-ZISXRMDJ.js.br +0 -0
  92. package/dist/index-hm2FF-FU.d.ts.map +0 -1
Binary file
@@ -1,5 +1,5 @@
1
- import { SHAPE_PRESET_DEFS, TOOLBAR_TABS, computeValueRangeForChart, cloneTemplateElementsBySlideId, cloneSlide, countTextSegments, expandTextBuildAnimations, TimelineEngine, TEXT_BUILD_ID_SEP, computeEntranceAnimationDelay, storePresentationDeck, loadPresentationDeck, clearPresentationDeck, PRESENTATION_HASH, PRESENTATION_NONCE_KEY, PRESENTATION_CHANNEL_NAME, swapPresentationWindows, PRESENTATION_MESSAGE_ORIGIN, buildPresentationAudienceUrl, resolveAudienceScreenPlacement, placeAudienceWindow, isPresentationSessionMessage, collectMediaElements, collectImagePaths, buildInitialGuides, saveAutosaveSnapshot, getAnimationInitialStyle, normalizeHexColor, toCssWritingMode, toCssTextOrientation, toCssVerticalDirection, computeAutoFitTextStyle, resolveLineHeight, getKinsokuLineBreakStyles, buildTextBody3DSceneStyle, resolveParagraphRtl, resolveParagraphAlign, resolveCssTextAlign, colorWithOpacity, build3DExtrusionData, getResolvedShapeClipPath, normalizeStrokeDashType, buildCssGradientFromShapeStyle, buildShadowCssFromShapeStyle, buildInnerShadowCssFromShapeStyle, buildMultiLayerShadowCss, buildGlowBoxShadow, getCompoundLineBoxShadow, getEffectDagFilter, buildPatternFillCss, buildReflectionCss, getCssBorderDashStyle, getCompoundLineBorderWidth, getSvgStrokeDasharray, getCompoundLineOffsets, getCompoundLineWidths, clampCropValue, computeSelectionRect, rectToCells, isCellInRect, buildChartViewModel, buildPreviewAnimation, isTemplateElementId, getInlineEditorSelection, applyStyleToSelectedSegments, setPendingSelectionRestore, applyCaseTransformToSegments, transformTextCase, addSection, renameSection, deleteSection, moveSectionUp, moveSectionDown, moveSlidesToSection, normalizeColorsForCapture, preprocessCssForCapture, slideProgressPercent, slideStatusLabel, EXPORT_ASSEMBLING_PERCENT, EXPORT_DONE_PERCENT, isExportAbortError, recordProgressPercent, comparePresentation, applyAcceptSlide, applyAcceptAllSlides, collectUsedFonts, detectTouchDevice, detectOrientation, isMobileViewport, MOBILE_BREAKPOINT, TABLET_BREAKPOINT, remapTextToSegments, shouldLoopContinuously, applyRehearsalTimings, copyFormatFromElement, applyFormatToElement, createSyncGate, validateRoomId, resolveTransportForServerUrl, isMixedContentBlocked, CONNECTION_TIMEOUT_MS, BROADCAST_THROTTLE_MS, sanitizeColor, readSlidesFromYDoc, reconcileSlidesInYDoc, LOCAL_SYNC_ORIGIN, observeYDocSlides, computeVirtualRange, DEFAULT_VIRTUAL_OVERSCAN, createTouchGestureRecognizer, isKeyboardOpen, openPptxFile, readBackstageRecentFile, isActionHidden, buildElementClipboardPayload, generatePackageReadme, downloadBlob, groupElements, generateElementId, makeCloneId, alignElements, distributeElements, bringForward, sendBackward, bringToFront, sendToBack, newTableElement, createDefaultChartElement, readViewportMetrics, computeKeyboardInset, derivePresenceList, buildPrintDocument, buildOutlineHtml, buildSlidesHtml, buildNotesHtml, buildHandoutsHtml, createBlankSlide, makeSlideId, cloneHistorySnapshot, createPresentationSessionId, resolveTransitionDurationMs, isUrlSafe, createPresenterTimer, createInitialPresentationSnapshot, mergePresentationSnapshot, presenterElapsed, stepPresenterZoom, resetPresenterTimer, togglePresenterTimer, isTemplateElement, substituteFieldText, resolveUnderlineDecorationStyle, hasDistinctScriptFonts, buildTextReflectionCss, getTextAlphaOpacity, buildTextRunFilterChain, buildTextShadowCss, apply3dEffects, clampUnitInterval, getRoundRectRadiusPx, computeColumnBoundaries, parseDrawingColor, parseDrawingColorOpacity, getPatternSvg, ooxmlDashToCssBorderStyle, getChartStylePalette, computeLayout, valueToY, formatAxisValue, computeLayoutOptions, splitSeriesByAxis, computeValueRange, getSecondaryValueAxis, seriesColor, paletteColor, resolveRegionCode, normalizeValue, sequentialColorScale, canvasToJpegData, downloadDataUrl, pickSupportedMimeType, WEBM_MIME_CANDIDATES, fpsToFrameIntervalMs, segmentFrameCount, sanitizeDownloadFilename, encodeGif, groupSlidesBySection, hasCopyableFormat, createBackstagePresentation, cloneElementForPaste, computeScrollDelta, rerouteConnectorsForMovedElements, applyReroutedConnectors, buildPrintHtmlDocument, convertOmmlToMathMl, sanitizeMathMl, buildTextFillCss, resolvePictureBullet, computeResizedColumnWidths, computeResizedRowHeight, DEFAULT_ROW_HEIGHT, tintColor2, shadeColor2, deleteTableColumn, insertTableColumn, deleteTableRow, insertTableRow, splitCell, mergeCells, buildSlidesPdfBytes, buildNotesPdfBytes, isPpactionUrl, parsePpactionUrl, safeOpenUrl, ACTION_BUTTON_PRESETS, buildSmartArtPresetData, computeSnapToShape, computeMarqueeHitIds, mergeAdditiveSelection, segmentByScript, resolveFontForScript, generateLogTicks, formatAxisValueWithUnits, getDisplayUnitLabel, applyResize, snapBoxToGrid, chartPartToAttrs } from './chunk-KPT54MHG.mjs';
2
- import { translationsEn } from './chunk-E3KJKCSV.mjs';
1
+ import { SHAPE_PRESET_DEFS, TOOLBAR_TABS, computeValueRangeForChart, cloneTemplateElementsBySlideId, cloneSlide, countTextSegments, expandTextBuildAnimations, TimelineEngine, TEXT_BUILD_ID_SEP, computeEntranceAnimationDelay, storePresentationDeck, loadPresentationDeck, clearPresentationDeck, PRESENTATION_HASH, PRESENTATION_NONCE_KEY, PRESENTATION_CHANNEL_NAME, swapPresentationWindows, PRESENTATION_MESSAGE_ORIGIN, buildPresentationAudienceUrl, resolveAudienceScreenPlacement, placeAudienceWindow, isPresentationSessionMessage, collectMediaElements, collectImagePaths, buildInitialGuides, saveAutosaveSnapshot, getAnimationInitialStyle, normalizeHexColor, toCssWritingMode, toCssTextOrientation, toCssVerticalDirection, computeAutoFitTextStyle, resolveLineHeight, getKinsokuLineBreakStyles, buildTextBody3DSceneStyle, resolveParagraphRtl, resolveParagraphAlign, resolveCssTextAlign, colorWithOpacity, build3DExtrusionData, getResolvedShapeClipPath, normalizeStrokeDashType, buildCssGradientFromShapeStyle, buildShadowCssFromShapeStyle, buildInnerShadowCssFromShapeStyle, buildMultiLayerShadowCss, buildGlowBoxShadow, getCompoundLineBoxShadow, getEffectDagFilter, buildPatternFillCss, buildReflectionCss, getCssBorderDashStyle, getCompoundLineBorderWidth, getSvgStrokeDasharray, getCompoundLineOffsets, getCompoundLineWidths, clampCropValue, computeSelectionRect, rectToCells, isCellInRect, buildChartViewModel, buildPreviewAnimation, isTemplateElementId, getInlineEditorSelection, applyStyleToSelectedSegments, setPendingSelectionRestore, applyCaseTransformToSegments, transformTextCase, addSection, renameSection, deleteSection, moveSectionUp, moveSectionDown, moveSlidesToSection, normalizeColorsForCapture, preprocessCssForCapture, slideProgressPercent, slideStatusLabel, EXPORT_ASSEMBLING_PERCENT, EXPORT_DONE_PERCENT, isExportAbortError, recordProgressPercent, comparePresentation, applyAcceptSlide, applyAcceptAllSlides, collectUsedFonts, detectTouchDevice, detectOrientation, isMobileViewport, MOBILE_BREAKPOINT, TABLET_BREAKPOINT, remapTextToSegments, shouldLoopContinuously, applyRehearsalTimings, copyFormatFromElement, applyFormatToElement, createViewerOptionsStore, createSyncGate, validateRoomId, resolveTransportForServerUrl, isMixedContentBlocked, CONNECTION_TIMEOUT_MS, BROADCAST_THROTTLE_MS, sanitizeColor, readSlidesFromYDoc, reconcileSlidesInYDoc, LOCAL_SYNC_ORIGIN, observeYDocSlides, computeVirtualRange, DEFAULT_VIRTUAL_OVERSCAN, createTouchGestureRecognizer, isKeyboardOpen, openPptxFile, readBackstageRecentFile, isActionHidden, buildElementClipboardPayload, generatePackageReadme, downloadBlob, groupElements, generateElementId, makeCloneId, alignElements, distributeElements, bringForward, sendBackward, bringToFront, sendToBack, newTableElement, createDefaultChartElement, readViewportMetrics, computeKeyboardInset, derivePresenceList, buildPrintDocument, buildOutlineHtml, buildSlidesHtml, buildNotesHtml, buildHandoutsHtml, createBlankSlide, makeSlideId, cloneHistorySnapshot, createPresentationSessionId, resolveTransitionDurationMs, isUrlSafe, createPresenterTimer, createInitialPresentationSnapshot, mergePresentationSnapshot, presenterElapsed, stepPresenterZoom, resetPresenterTimer, togglePresenterTimer, isTemplateElement, substituteFieldText, resolveUnderlineDecorationStyle, hasDistinctScriptFonts, buildTextReflectionCss, getTextAlphaOpacity, buildTextRunFilterChain, buildTextShadowCss, apply3dEffects, clampUnitInterval, getRoundRectRadiusPx, computeColumnBoundaries, parseDrawingColor, parseDrawingColorOpacity, getPatternSvg, ooxmlDashToCssBorderStyle, getChartStylePalette, computeLayout, valueToY, formatAxisValue, computeLayoutOptions, splitSeriesByAxis, computeValueRange, getSecondaryValueAxis, seriesColor, paletteColor, resolveRegionCode, normalizeValue, sequentialColorScale, canvasToJpegData, downloadDataUrl, pickSupportedMimeType, WEBM_MIME_CANDIDATES, fpsToFrameIntervalMs, segmentFrameCount, sanitizeDownloadFilename, encodeGif, groupSlidesBySection, hasCopyableFormat, createBackstagePresentation, cloneElementForPaste, computeScrollDelta, rerouteConnectorsForMovedElements, applyReroutedConnectors, buildPrintHtmlDocument, convertOmmlToMathMl, sanitizeMathMl, buildTextFillCss, resolvePictureBullet, computeResizedColumnWidths, computeResizedRowHeight, DEFAULT_ROW_HEIGHT, tintColor2, shadeColor2, deleteTableColumn, insertTableColumn, deleteTableRow, insertTableRow, splitCell, mergeCells, buildSlidesPdfBytes, buildNotesPdfBytes, isPpactionUrl, parsePpactionUrl, safeOpenUrl, ACTION_BUTTON_PRESETS, buildSmartArtPresetData, computeSnapToShape, computeMarqueeHitIds, mergeAdditiveSelection, segmentByScript, resolveFontForScript, generateLogTicks, formatAxisValueWithUnits, getDisplayUnitLabel, applyResize, snapBoxToGrid, chartPartToAttrs } from './chunk-QOBKJKLT.mjs';
2
+ import { translationsEn } from './chunk-M3SIFXWD.mjs';
3
3
  import { hasTextProperties, PptxHandler, EncryptedFileError, hasShapeProperties, isImageLikeElement, isCalloutShape, getCalloutLeaderLineGeometry, buildCalloutLeaderLineSvgPath, getCalloutViewBoxBounds, applyThemeToData, THEME_PRESETS, themeColorSchemesEqual, guidePxToEmu, mergeShapes, getSubstituteFontFamily, getPresetShapeClipPath, svgPathToPolygons, polygonsToSvgPath, SvgExporter, rebuildTableStructureInRawXml, updateCellTextStyleInRawXml, updateCellTextInRawXml, updateMergeAttrsInRawXml, elementActionToPptxAction } from './chunk-LDZQNYWL.mjs';
4
4
  import React3, { useState, useEffect, useMemo, Suspense, useRef, useCallback, useSyncExternalStore, useImperativeHandle, useLayoutEffect } from 'react';
5
5
  import { LuTriangle, LuPlus, LuMoveRight, LuMinus, LuDiamond, LuDatabase, LuCircle, LuSquare } from 'react-icons/lu';
@@ -15,7 +15,7 @@ function cloneHistorySnapshot2(snapshot) {
15
15
  }
16
16
 
17
17
  // src/viewer/hooks/useEditorHistory.ts
18
- var MAX_HISTORY_ENTRIES = 120;
18
+ var DEFAULT_MAX_HISTORY_ENTRIES = 120;
19
19
  function useEditorHistory(input) {
20
20
  const {
21
21
  slides,
@@ -24,6 +24,7 @@ function useEditorHistory(input) {
24
24
  templateElementsBySlideId,
25
25
  loading,
26
26
  error,
27
+ maxHistoryEntries = DEFAULT_MAX_HISTORY_ENTRIES,
27
28
  hasActivePointerInteraction,
28
29
  pointerCommitNonce,
29
30
  setSlides,
@@ -198,7 +199,7 @@ function useEditorHistory(input) {
198
199
  return;
199
200
  }
200
201
  historyPastRef.current.push(cloneHistorySnapshot2(previousSnapshot));
201
- if (historyPastRef.current.length > MAX_HISTORY_ENTRIES) {
202
+ while (historyPastRef.current.length > Math.max(1, maxHistoryEntries)) {
202
203
  historyPastRef.current.shift();
203
204
  }
204
205
  historyFutureRef.current = [];
@@ -214,6 +215,7 @@ function useEditorHistory(input) {
214
215
  error,
215
216
  hasActivePointerInteraction,
216
217
  loading,
218
+ maxHistoryEntries,
217
219
  pointerCommitNonce,
218
220
  slides,
219
221
  updateHistoryAvailability
@@ -1544,6 +1546,7 @@ function useSlideNavigation(input) {
1544
1546
  onPlayActionSound,
1545
1547
  loopContinuously,
1546
1548
  useTimings,
1549
+ onAdvancePastLastSlide,
1547
1550
  playNextAnimationGroup,
1548
1551
  clearPresentationTimers,
1549
1552
  runPresentationEntranceAnimations,
@@ -1599,6 +1602,10 @@ function useSlideNavigation(input) {
1599
1602
  setShowRehearsalSummary(true);
1600
1603
  return;
1601
1604
  }
1605
+ if (!loopContinuously && !rehearsing && direction === 1 && nextPosition >= availableSlideIndexes.length && onAdvancePastLastSlide) {
1606
+ onAdvancePastLastSlide();
1607
+ return;
1608
+ }
1602
1609
  let resolvedPosition;
1603
1610
  if (loopContinuously && !rehearsing && direction === 1 && nextPosition >= availableSlideIndexes.length) {
1604
1611
  resolvedPosition = 0;
@@ -1631,6 +1638,7 @@ function useSlideNavigation(input) {
1631
1638
  [
1632
1639
  clearPresentationTimers,
1633
1640
  loopContinuously,
1641
+ onAdvancePastLastSlide,
1634
1642
  onPlayActionSound,
1635
1643
  onSetActiveSlideIndex,
1636
1644
  onSetMode,
@@ -1801,7 +1809,8 @@ function usePresentationMode(input) {
1801
1809
  onSaveRehearsalTimings,
1802
1810
  loopContinuously,
1803
1811
  showWithAnimation,
1804
- useTimings
1812
+ useTimings,
1813
+ endWithBlackSlide = true
1805
1814
  } = input;
1806
1815
  const [presentationSlideIndex, setPresentationSlideIndex] = useState(0);
1807
1816
  const [presentationSlideVisible, setPresentationSlideVisible] = useState(true);
@@ -1810,6 +1819,7 @@ function usePresentationMode(input) {
1810
1819
  setTransitionOverlay(null);
1811
1820
  }, []);
1812
1821
  const [presenterMode, setPresenterMode] = useState(false);
1822
+ const [endOfShowVisible, setEndOfShowVisible] = useState(false);
1813
1823
  const [presentationStartTime, setPresentationStartTime] = useState(null);
1814
1824
  const switchingToPresenterRef = useRef(false);
1815
1825
  const {
@@ -1846,8 +1856,15 @@ function usePresentationMode(input) {
1846
1856
  setPresentationStartTime,
1847
1857
  setPresenterMode
1848
1858
  });
1859
+ const handleAdvancePastLastSlide = useCallback(() => {
1860
+ if (endWithBlackSlide) {
1861
+ setEndOfShowVisible(true);
1862
+ } else {
1863
+ onSetMode("edit");
1864
+ }
1865
+ }, [endWithBlackSlide, onSetMode]);
1849
1866
  const {
1850
- movePresentationSlide,
1867
+ movePresentationSlide: moveNavigationSlide,
1851
1868
  navigateToSlide,
1852
1869
  handlePresentationAction,
1853
1870
  scheduleAutoAdvanceForSlide
@@ -1863,6 +1880,7 @@ function usePresentationMode(input) {
1863
1880
  onPlayActionSound,
1864
1881
  loopContinuously,
1865
1882
  useTimings,
1883
+ onAdvancePastLastSlide: handleAdvancePastLastSlide,
1866
1884
  playNextAnimationGroup,
1867
1885
  clearPresentationTimers,
1868
1886
  runPresentationEntranceAnimations,
@@ -1871,6 +1889,19 @@ function usePresentationMode(input) {
1871
1889
  recordCurrentSlideTime,
1872
1890
  setShowRehearsalSummary
1873
1891
  });
1892
+ const movePresentationSlide = useCallback(
1893
+ (direction) => {
1894
+ if (endOfShowVisible) {
1895
+ setEndOfShowVisible(false);
1896
+ if (direction === 1) {
1897
+ onSetMode("edit");
1898
+ }
1899
+ return;
1900
+ }
1901
+ moveNavigationSlide(direction);
1902
+ },
1903
+ [endOfShowVisible, moveNavigationSlide, onSetMode]
1904
+ );
1874
1905
  const { handleZoomClick, zoomReturnSlideIndex, returnToZoomSlide, clearZoomReturn } = useZoomNavigation({ navigateToSlide });
1875
1906
  const presenterConsole = usePresenterConsole(presentationSlideIndex);
1876
1907
  const {
@@ -1976,6 +2007,7 @@ function usePresentationMode(input) {
1976
2007
  } else {
1977
2008
  setTransitionOverlay(null);
1978
2009
  }
2010
+ setEndOfShowVisible(false);
1979
2011
  }, [mode]);
1980
2012
  useEffect(() => {
1981
2013
  if (mode !== "present") {
@@ -2047,6 +2079,7 @@ function usePresentationMode(input) {
2047
2079
  presentationKeyframesCss,
2048
2080
  clearPresentationTimers,
2049
2081
  runPresentationEntranceAnimations,
2082
+ endOfShowVisible,
2050
2083
  movePresentationSlide,
2051
2084
  navigateToSlide,
2052
2085
  handlePresentationAction,
@@ -2100,7 +2133,7 @@ function nextStrokeId() {
2100
2133
  return `stroke-${strokeIdCounter}`;
2101
2134
  }
2102
2135
  function usePresentationAnnotations(input) {
2103
- const { isActive, activeSlideIndex } = input;
2136
+ const { isActive, activeSlideIndex, popupToolbarEnabled = true } = input;
2104
2137
  const [presentationTool, setPresentationToolState] = useState("none");
2105
2138
  const [penColor, setPenColor] = useState("#ff0000");
2106
2139
  const [highlighterColor, setHighlighterColor] = useState("#ffff00");
@@ -2253,6 +2286,9 @@ function usePresentationAnnotations(input) {
2253
2286
  setLaserPosition(null);
2254
2287
  return;
2255
2288
  }
2289
+ if (!popupToolbarEnabled) {
2290
+ return;
2291
+ }
2256
2292
  const handleMouseMove = () => {
2257
2293
  setToolbarVisible(true);
2258
2294
  window.clearTimeout(toolbarTimerRef.current);
@@ -2265,7 +2301,7 @@ function usePresentationAnnotations(input) {
2265
2301
  window.removeEventListener("mousemove", handleMouseMove);
2266
2302
  window.clearTimeout(toolbarTimerRef.current);
2267
2303
  };
2268
- }, [isActive]);
2304
+ }, [isActive, popupToolbarEnabled]);
2269
2305
  const getAllSlideAnnotations = useCallback(() => {
2270
2306
  const map = new Map(slideAnnotationsRef.current);
2271
2307
  if (annotationStrokes.length > 0) {
@@ -3338,7 +3374,8 @@ function useLoadContent({
3338
3374
  setLoading,
3339
3375
  setError,
3340
3376
  setIsDirty,
3341
- setIsEncrypted
3377
+ setIsEncrypted,
3378
+ onContentApplied
3342
3379
  }) {
3343
3380
  const handlerRef = useRef(null);
3344
3381
  const originalBufferRef = useRef(null);
@@ -3510,6 +3547,7 @@ function useLoadContent({
3510
3547
  clearSelection();
3511
3548
  setIsDirty(false);
3512
3549
  history.resetHistory();
3550
+ onContentApplied?.();
3513
3551
  } catch (err) {
3514
3552
  if (!cancelled && token === renderTokenRef.current) {
3515
3553
  if (err instanceof EncryptedFileError) {
@@ -8464,7 +8502,7 @@ function FailedToLoad() {
8464
8502
  var LazySurfaceChart3DScene = React3.lazy(
8465
8503
  async () => {
8466
8504
  try {
8467
- return await import('./SurfaceChart3DScene-VKS3ELTU.mjs');
8505
+ return await import('./SurfaceChart3DScene-JU737NN5.mjs');
8468
8506
  } catch {
8469
8507
  return { default: FailedToLoad };
8470
8508
  }
@@ -11554,7 +11592,8 @@ function useCanvasInteractions(input) {
11554
11592
  presentationHandleAction,
11555
11593
  setEditingEquationOmml,
11556
11594
  setIsEquationDialogOpen,
11557
- setPointerCommitNonce
11595
+ setPointerCommitNonce,
11596
+ transformCommittedText
11558
11597
  } = input;
11559
11598
  const justSelectedRef = useRef(false);
11560
11599
  const handleInlineEditCommit = () => {
@@ -11564,9 +11603,10 @@ function useCanvasInteractions(input) {
11564
11603
  }
11565
11604
  const el = elementLookup.get(editId);
11566
11605
  if (el && hasTextProperties(el)) {
11567
- const newSegments = remapTextToSegments(inlineEditingText, el.textSegments, el.textStyle);
11606
+ const committedText = transformCommittedText ? transformCommittedText(inlineEditingText) : inlineEditingText;
11607
+ const newSegments = remapTextToSegments(committedText, el.textSegments, el.textStyle);
11568
11608
  ops.updateElementById(editId, {
11569
- text: inlineEditingText,
11609
+ text: committedText,
11570
11610
  textSegments: newSegments
11571
11611
  });
11572
11612
  history.markDirty();
@@ -11668,6 +11708,9 @@ function useCanvasInteractions(input) {
11668
11708
  setSnapLines([]);
11669
11709
  };
11670
11710
  const handleElementContextMenu = (elementId, e) => {
11711
+ if (mode === "present") {
11712
+ return;
11713
+ }
11671
11714
  e.preventDefault();
11672
11715
  e.stopPropagation();
11673
11716
  if (!selectedElementIdSet.has(elementId)) {
@@ -15104,26 +15147,17 @@ function useDerivedSlideState(input) {
15104
15147
  };
15105
15148
  }
15106
15149
  function useAnnotationHandlers(input) {
15107
- const { mode, presentation, annotations, history, setMode, setSlides } = input;
15150
+ const {
15151
+ mode,
15152
+ presentation,
15153
+ annotations,
15154
+ history,
15155
+ setMode,
15156
+ setSlides,
15157
+ promptKeepInkAnnotations = true
15158
+ } = input;
15108
15159
  const [showKeepAnnotationsDialog, setShowKeepAnnotationsDialog] = useState(false);
15109
15160
  const pendingModeAfterAnnotationsRef = useRef("edit");
15110
- const handleSetMode = useCallback(
15111
- (nextMode) => {
15112
- if (nextMode === "present") {
15113
- presentation.enterPresentMode();
15114
- } else if (mode === "present" && annotations.hasAnyAnnotations) {
15115
- stopAllPersistentAudio();
15116
- pendingModeAfterAnnotationsRef.current = nextMode;
15117
- setShowKeepAnnotationsDialog(true);
15118
- } else {
15119
- if (mode === "present") {
15120
- stopAllPersistentAudio();
15121
- }
15122
- setMode(nextMode);
15123
- }
15124
- },
15125
- [presentation, mode, annotations.hasAnyAnnotations, setMode]
15126
- );
15127
15161
  const handleKeepAnnotations = useCallback(() => {
15128
15162
  const annotationMap = annotations.allSlideAnnotations;
15129
15163
  if (annotationMap.size === 0) {
@@ -15192,6 +15226,34 @@ function useAnnotationHandlers(input) {
15192
15226
  setShowKeepAnnotationsDialog(false);
15193
15227
  setMode(pendingModeAfterAnnotationsRef.current);
15194
15228
  }, [annotations, setMode, setSlides, history]);
15229
+ const handleSetMode = useCallback(
15230
+ (nextMode) => {
15231
+ if (nextMode === "present") {
15232
+ presentation.enterPresentMode();
15233
+ } else if (mode === "present" && annotations.hasAnyAnnotations) {
15234
+ stopAllPersistentAudio();
15235
+ pendingModeAfterAnnotationsRef.current = nextMode;
15236
+ if (promptKeepInkAnnotations) {
15237
+ setShowKeepAnnotationsDialog(true);
15238
+ } else {
15239
+ handleKeepAnnotations();
15240
+ }
15241
+ } else {
15242
+ if (mode === "present") {
15243
+ stopAllPersistentAudio();
15244
+ }
15245
+ setMode(nextMode);
15246
+ }
15247
+ },
15248
+ [
15249
+ presentation,
15250
+ mode,
15251
+ annotations.hasAnyAnnotations,
15252
+ promptKeepInkAnnotations,
15253
+ handleKeepAnnotations,
15254
+ setMode
15255
+ ]
15256
+ );
15195
15257
  const handleDiscardAnnotations = useCallback(() => {
15196
15258
  annotations.clearAllAnnotations();
15197
15259
  setShowKeepAnnotationsDialog(false);
@@ -15418,14 +15480,18 @@ function usePresentationSetup(input) {
15418
15480
  setMode,
15419
15481
  setActiveSlideIndex,
15420
15482
  setSlides,
15421
- history
15483
+ history,
15484
+ endWithBlackSlide = true,
15485
+ promptKeepInkAnnotations = true,
15486
+ popupToolbarEnabled = true
15422
15487
  } = input;
15423
15488
  const actionSoundHandlerRef = useRef(null);
15424
15489
  const [, setShowKeepAnnotationsDialog] = useState(false);
15425
15490
  const pendingModeRef = useRef("edit");
15426
15491
  const annotations = usePresentationAnnotations({
15427
15492
  isActive: mode === "present",
15428
- activeSlideIndex
15493
+ activeSlideIndex,
15494
+ popupToolbarEnabled
15429
15495
  });
15430
15496
  const presentation = usePresentationMode({
15431
15497
  mode,
@@ -15435,7 +15501,7 @@ function usePresentationSetup(input) {
15435
15501
  containerRef,
15436
15502
  content,
15437
15503
  onSetMode: (nextMode) => {
15438
- if (mode === "present" && nextMode !== "present" && annotations.hasAnyAnnotations) {
15504
+ if (mode === "present" && nextMode !== "present" && annotations.hasAnyAnnotations && promptKeepInkAnnotations) {
15439
15505
  pendingModeRef.current = nextMode;
15440
15506
  setShowKeepAnnotationsDialog(true);
15441
15507
  } else {
@@ -15488,7 +15554,8 @@ function usePresentationSetup(input) {
15488
15554
  },
15489
15555
  loopContinuously: shouldLoopContinuously(presentationProperties),
15490
15556
  showWithAnimation: presentationProperties.showWithAnimation,
15491
- useTimings: presentationProperties.advanceMode !== "manual"
15557
+ useTimings: presentationProperties.advanceMode !== "manual",
15558
+ endWithBlackSlide
15492
15559
  });
15493
15560
  return { presentation, annotations, actionSoundHandlerRef };
15494
15561
  }
@@ -15509,7 +15576,8 @@ function useEditorOperations(input) {
15509
15576
  dialogs,
15510
15577
  presentation,
15511
15578
  userName,
15512
- handlerRef
15579
+ handlerRef,
15580
+ transformCommittedText
15513
15581
  } = input;
15514
15582
  const ops = useElementOperations({
15515
15583
  activeSlide,
@@ -15578,7 +15646,8 @@ function useEditorOperations(input) {
15578
15646
  presentationHandleAction: presentation.handlePresentationAction,
15579
15647
  setEditingEquationOmml: dialogs.setEditingEquationOmml,
15580
15648
  setIsEquationDialogOpen: dialogs.setIsEquationDialogOpen,
15581
- setPointerCommitNonce: state.setPointerCommitNonce
15649
+ setPointerCommitNonce: state.setPointerCommitNonce,
15650
+ transformCommittedText
15582
15651
  });
15583
15652
  const insertHandlers = useInsertElements({
15584
15653
  activeSlide,
@@ -15956,7 +16025,8 @@ function useContentLifecycle(input) {
15956
16025
  ops,
15957
16026
  actionSoundHandlerRef,
15958
16027
  setIsEncryptedDialogOpen,
15959
- password
16028
+ password,
16029
+ onContentApplied
15960
16030
  } = input;
15961
16031
  const { handlerRef } = useLoadContent({
15962
16032
  content,
@@ -15991,7 +16061,8 @@ function useContentLifecycle(input) {
15991
16061
  setLoading: state.setLoading,
15992
16062
  setError: state.setError,
15993
16063
  setIsDirty: state.setIsDirty,
15994
- setIsEncrypted: setIsEncryptedDialogOpen
16064
+ setIsEncrypted: setIsEncryptedDialogOpen,
16065
+ onContentApplied
15995
16066
  });
15996
16067
  useEffect(() => {
15997
16068
  actionSoundHandlerRef.current = handlerRef.current;
@@ -16292,6 +16363,7 @@ function useViewerIntegration(input) {
16292
16363
  markDirty: history.markDirty
16293
16364
  });
16294
16365
  const [isEncryptedDialogOpen, setIsEncryptedDialogOpen] = useState(false);
16366
+ const [loadVersion, setLoadVersion] = useState(0);
16295
16367
  const { handlerRef, serializeSlides, autosaveStatus } = useContentLifecycle({
16296
16368
  content,
16297
16369
  filePath,
@@ -16302,7 +16374,8 @@ function useViewerIntegration(input) {
16302
16374
  ops: editorOps.ops,
16303
16375
  actionSoundHandlerRef,
16304
16376
  setIsEncryptedDialogOpen,
16305
- password: dialogs.presentationPassword ?? void 0
16377
+ password: dialogs.presentationPassword ?? void 0,
16378
+ onContentApplied: () => setLoadVersion((v) => v + 1)
16306
16379
  });
16307
16380
  const { exportHandlers, printHandlers, themeHandlers, propertyHandlers } = useIOHandlers({
16308
16381
  state,
@@ -16548,7 +16621,8 @@ function useViewerIntegration(input) {
16548
16621
  handleEnterRehearsalMode,
16549
16622
  autosaveStatus,
16550
16623
  isEncryptedDialogOpen,
16551
- setIsEncryptedDialogOpen
16624
+ setIsEncryptedDialogOpen,
16625
+ loadVersion
16552
16626
  };
16553
16627
  }
16554
16628
  function getSnapshot() {
@@ -16595,6 +16669,17 @@ function useReducedMotion() {
16595
16669
  setManualReducedMotion
16596
16670
  };
16597
16671
  }
16672
+ function useViewerOptions() {
16673
+ const storeRef = useRef(null);
16674
+ storeRef.current ??= createViewerOptionsStore();
16675
+ const store = storeRef.current;
16676
+ const options = useSyncExternalStore(
16677
+ (onStoreChange) => store.subscribe(onStoreChange),
16678
+ () => store.getOptions(),
16679
+ () => store.getOptions()
16680
+ );
16681
+ return { optionsStore: store, options };
16682
+ }
16598
16683
  var KNOWN_TAB_IDS = new Set(TOOLBAR_TABS.map((tab) => tab.id));
16599
16684
  function computeToolbarVisibility(hiddenActions) {
16600
16685
  const isHidden = (id) => isActionHidden(id, hiddenActions);
@@ -16981,13 +17066,15 @@ function useYjsDocumentSync({
16981
17066
  isConnected,
16982
17067
  isSynced = true,
16983
17068
  config,
16984
- getSourceBytes
17069
+ getSourceBytes,
17070
+ loadVersion = 0
16985
17071
  }) {
16986
17072
  const isApplyingRemoteRef = useRef(false);
16987
17073
  const lastSyncedRef = useRef("");
16988
17074
  const hasInitializedRef = useRef(false);
16989
17075
  const writeBackTimerRef = useRef(null);
16990
17076
  const factoriesRef = useRef(null);
17077
+ const lastLoadVersionRef = useRef(loadVersion);
16991
17078
  const getFactories = useCallback(async () => {
16992
17079
  if (factoriesRef.current) {
16993
17080
  return factoriesRef.current;
@@ -17032,6 +17119,27 @@ function useYjsDocumentSync({
17032
17119
  }
17033
17120
  }, debounceMs);
17034
17121
  }, [doc, config, getSourceBytes, templateElementsBySlideId]);
17122
+ useEffect(() => {
17123
+ if (loadVersion === lastLoadVersionRef.current) {
17124
+ return;
17125
+ }
17126
+ lastLoadVersionRef.current = loadVersion;
17127
+ if (!doc || !isConnected) {
17128
+ return;
17129
+ }
17130
+ const docSlides = readSlidesFromYDoc(
17131
+ doc
17132
+ );
17133
+ if (docSlides.length === 0) {
17134
+ return;
17135
+ }
17136
+ lastSyncedRef.current = JSON.stringify(docSlides);
17137
+ isApplyingRemoteRef.current = true;
17138
+ setSlides(docSlides);
17139
+ requestAnimationFrame(() => {
17140
+ isApplyingRemoteRef.current = false;
17141
+ });
17142
+ }, [loadVersion, doc, isConnected, setSlides]);
17035
17143
  useEffect(() => {
17036
17144
  if (!isConnected || !isSynced || !doc || isApplyingRemoteRef.current || slides.length === 0) {
17037
17145
  return;
@@ -18280,4 +18388,4 @@ function useSwipeNavigation(input) {
18280
18388
  return { onTouchStart, onTouchEnd };
18281
18389
  }
18282
18390
 
18283
- export { ACTION_VERB_MAP, ANIMATION_PRESET_OPTIONS, DEFAULT_FILL_COLOR, DEFAULT_FONT_FAMILY, DEFAULT_STROKE_COLOR, DEFAULT_TEXT_COLOR, DEFAULT_TEXT_FONT_SIZE, GRID_SIZE, HYPERLINK_COLOR, MIN_ELEMENT_SIZE, MIN_TOUCH_TARGET, SHAPE_PRESETS, SHORTCUT_REFERENCE_ITEMS, SLIDE_NAV_THUMBNAIL_WIDTH, SLIDE_TRANSITION_OPTIONS, SmartArtNodeText, TOOLBAR_SECTIONS, build3DExtrusionData2 as build3DExtrusionData, buildLineGlowFilter, buildLineShadowCss, buildReactChartViewModel, buildTextBody3DSceneStyle2 as buildTextBody3DSceneStyle, buildTree, chevronPoints, clearAudienceContent, cn, colour, computeToolbarVisibility, detectTargetType, fitFontSize, gearPath, getAnimationInitialStyle2 as getAnimationInitialStyle, getConnectorPathGeometry, getCropShapeClipPath, getDuotoneColors, getImageRenderStyle, getImageTilingStyle, getShapeVisualStyle, getTextLayoutStyle, getTextStyleForElement, getTextWarpStyle, hasDagDuotoneEffect, isAudienceTab, isConnectorOrLineElement, isImageTiled, layoutToCategory, loadAudienceContent, nodeOpacity, parseAudienceNonce, parseEmailUrl, parseSlideFromUrl, renderAccentProcess, renderAlternatingFlow, renderChartElement, renderConnectorMarker, renderDagDuotoneSvgFilter, renderDescendingProcess, renderGroupedList, renderHorizontalPictureList, renderMediaElement, renderPictureAccentList, renderPyramidList, renderStepDownProcess, renderTableElement, renderTextSegments, renderToCanvas, renderVectorShape, renderVerticalBlockList, renderVerticalChevronList, resolvePalette, resolveSmartArtDataPalette, resolveStyle, scopeLayoutOptionsToActiveSlide, shouldRenderFallbackLabel, smartArtNodeGroupProps, startPreviewAnimation, stopPreviewAnimation, storeAudienceContent, styleShadow, styleStroke, treeDepth, treeWidth, truncate, useAnimationPlayback, useAnnotationHandlers, useAudienceMode, useAutosave, useBroadcastFollower, useCanvasInteractions, useClipboardHandlers, useCollaborativeHistory, useCollaborativeState, useComments, useContentLifecycle, useDerivedElementState, useDerivedSlideState, useDialogCustomShows, useEditorHistory, useEditorOperations, useElementManipulation, useElementOperations, useExportHandlers, useExportSaveAs, useFindReplace, useFollowMode, useFontInjection, useGroupAlignLayerHandlers, useIOHandlers, useInsertElements, useIsMobile, useKeyboardInsets, useKeyboardShortcutWiring, useKeyboardShortcuts, useLayoutSwitching, useLoadContent, useMergeShapesHandler, useModalDismissDrag, usePointerHandlers, usePresenceTracking, usePresentationAnnotations, usePresentationKeyboard, usePresentationMode, usePresentationSetup, usePresenterWindow, usePrintHandlers, usePropertyHandlers, useRecoveryDetection, useReducedMotion, useRehearsalTimings, useResizablePanels, useSectionOperations, useSerialize, useSheetDismissDrag, useSlideManagement, useSlideNavigation, useSwipeNavigation, useTableOperations, useThemeHandlers, useThemeSwitching, useToolbarVisibility, useTouchGestures, useViewerBuildingBlocks, useViewerCoreState, useViewerDialogs, useViewerIntegration, useViewerState, useViewerUIState, useVirtualizedSlides, useYjsDocumentSync, useYjsProvider, useZoomNavigation, useZoomViewport, wrapChrome };
18391
+ export { ACTION_VERB_MAP, ANIMATION_PRESET_OPTIONS, DEFAULT_FILL_COLOR, DEFAULT_FONT_FAMILY, DEFAULT_STROKE_COLOR, DEFAULT_TEXT_COLOR, DEFAULT_TEXT_FONT_SIZE, GRID_SIZE, HYPERLINK_COLOR, MIN_ELEMENT_SIZE, MIN_TOUCH_TARGET, SHAPE_PRESETS, SHORTCUT_REFERENCE_ITEMS, SLIDE_NAV_THUMBNAIL_WIDTH, SLIDE_TRANSITION_OPTIONS, SmartArtNodeText, TOOLBAR_SECTIONS, build3DExtrusionData2 as build3DExtrusionData, buildLineGlowFilter, buildLineShadowCss, buildReactChartViewModel, buildTextBody3DSceneStyle2 as buildTextBody3DSceneStyle, buildTree, chevronPoints, clearAudienceContent, cn, colour, computeToolbarVisibility, detectTargetType, fitFontSize, gearPath, getAnimationInitialStyle2 as getAnimationInitialStyle, getConnectorPathGeometry, getCropShapeClipPath, getDuotoneColors, getImageRenderStyle, getImageTilingStyle, getShapeVisualStyle, getTextLayoutStyle, getTextStyleForElement, getTextWarpStyle, hasDagDuotoneEffect, isAudienceTab, isConnectorOrLineElement, isImageTiled, layoutToCategory, loadAudienceContent, nodeOpacity, parseAudienceNonce, parseEmailUrl, parseSlideFromUrl, renderAccentProcess, renderAlternatingFlow, renderChartElement, renderConnectorMarker, renderDagDuotoneSvgFilter, renderDescendingProcess, renderGroupedList, renderHorizontalPictureList, renderMediaElement, renderPictureAccentList, renderPyramidList, renderStepDownProcess, renderTableElement, renderTextSegments, renderToCanvas, renderVectorShape, renderVerticalBlockList, renderVerticalChevronList, resolvePalette, resolveSmartArtDataPalette, resolveStyle, scopeLayoutOptionsToActiveSlide, shouldRenderFallbackLabel, smartArtNodeGroupProps, startPreviewAnimation, stopPreviewAnimation, storeAudienceContent, styleShadow, styleStroke, treeDepth, treeWidth, truncate, useAnimationPlayback, useAnnotationHandlers, useAudienceMode, useAutosave, useBroadcastFollower, useCanvasInteractions, useClipboardHandlers, useCollaborativeHistory, useCollaborativeState, useComments, useContentLifecycle, useDerivedElementState, useDerivedSlideState, useDialogCustomShows, useEditorHistory, useEditorOperations, useElementManipulation, useElementOperations, useExportHandlers, useExportSaveAs, useFindReplace, useFollowMode, useFontInjection, useGroupAlignLayerHandlers, useIOHandlers, useInsertElements, useIsMobile, useKeyboardInsets, useKeyboardShortcutWiring, useKeyboardShortcuts, useLayoutSwitching, useLoadContent, useMergeShapesHandler, useModalDismissDrag, usePointerHandlers, usePresenceTracking, usePresentationAnnotations, usePresentationKeyboard, usePresentationMode, usePresentationSetup, usePresenterWindow, usePrintHandlers, usePropertyHandlers, useRecoveryDetection, useReducedMotion, useRehearsalTimings, useResizablePanels, useSectionOperations, useSerialize, useSheetDismissDrag, useSlideManagement, useSlideNavigation, useSwipeNavigation, useTableOperations, useThemeHandlers, useThemeSwitching, useToolbarVisibility, useTouchGestures, useViewerBuildingBlocks, useViewerCoreState, useViewerDialogs, useViewerIntegration, useViewerOptions, useViewerState, useViewerUIState, useVirtualizedSlides, useYjsDocumentSync, useYjsProvider, useZoomNavigation, useZoomViewport, wrapChrome };
Binary file
Binary file