pptx-react-viewer 2.10.0 → 2.11.1

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 (125) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/dist/{AiChatPanel-KTMWRUD5.js → AiChatPanel-E6W3EACA.js} +23 -23
  3. package/dist/AiChatPanel-E6W3EACA.js.br +0 -0
  4. package/dist/AiChatPanel-E6W3EACA.js.gz +0 -0
  5. package/dist/{AiChatPanel-35CHYS5N.mjs → AiChatPanel-RMQIJDUJ.mjs} +4 -4
  6. package/dist/AiChatPanel-RMQIJDUJ.mjs.br +0 -0
  7. package/dist/AiChatPanel-RMQIJDUJ.mjs.gz +0 -0
  8. package/dist/{Model3DScene-TMNUKCL6.js → Model3DScene-U4B4NZJT.js} +2 -2
  9. package/dist/Model3DScene-U4B4NZJT.js.br +0 -0
  10. package/dist/Model3DScene-U4B4NZJT.js.gz +0 -0
  11. package/dist/{Model3DScene-2VMN3B65.mjs → Model3DScene-WHSHBMR5.mjs} +1 -1
  12. package/dist/Model3DScene-WHSHBMR5.mjs.br +0 -0
  13. package/dist/Model3DScene-WHSHBMR5.mjs.gz +0 -0
  14. package/dist/{SurfaceChart3DScene-KPNP3QD5.js → SurfaceChart3DScene-5S43UBRD.js} +2 -2
  15. package/dist/SurfaceChart3DScene-5S43UBRD.js.br +0 -0
  16. package/dist/SurfaceChart3DScene-5S43UBRD.js.gz +0 -0
  17. package/dist/{SurfaceChart3DScene-GKRDDN2U.mjs → SurfaceChart3DScene-77JP5XH5.mjs} +1 -1
  18. package/dist/{SurfaceChart3DScene-GKRDDN2U.mjs.br → SurfaceChart3DScene-77JP5XH5.mjs.br} +0 -0
  19. package/dist/SurfaceChart3DScene-77JP5XH5.mjs.gz +0 -0
  20. package/dist/{chunk-FY2AFXKP.mjs → chunk-DD54KUDG.mjs} +29 -4
  21. package/dist/chunk-DD54KUDG.mjs.br +0 -0
  22. package/dist/chunk-DD54KUDG.mjs.gz +0 -0
  23. package/dist/{chunk-IJVDNQLG.js → chunk-FAP6OPLL.js} +275 -249
  24. package/dist/chunk-FAP6OPLL.js.br +0 -0
  25. package/dist/chunk-FAP6OPLL.js.gz +0 -0
  26. package/dist/{chunk-TJ55KUWH.mjs → chunk-FV7HEYCX.mjs} +1069 -114
  27. package/dist/chunk-FV7HEYCX.mjs.br +0 -0
  28. package/dist/chunk-FV7HEYCX.mjs.gz +0 -0
  29. package/dist/{chunk-LXTKPSIG.mjs → chunk-HF6L2CTF.mjs} +1 -1
  30. package/dist/chunk-HF6L2CTF.mjs.br +0 -0
  31. package/dist/chunk-HF6L2CTF.mjs.gz +0 -0
  32. package/dist/{chunk-MMK4K3QI.js → chunk-IOVOQ6ZJ.js} +136 -1
  33. package/dist/chunk-IOVOQ6ZJ.js.br +0 -0
  34. package/dist/chunk-IOVOQ6ZJ.js.gz +0 -0
  35. package/dist/{chunk-JWMXOYSX.js → chunk-IXBM3HWH.js} +2289 -1824
  36. package/dist/chunk-IXBM3HWH.js.br +0 -0
  37. package/dist/chunk-IXBM3HWH.js.gz +0 -0
  38. package/dist/{chunk-H74UXL4Q.js → chunk-KDJBWJJH.js} +1102 -113
  39. package/dist/chunk-KDJBWJJH.js.br +0 -0
  40. package/dist/chunk-KDJBWJJH.js.gz +0 -0
  41. package/dist/{chunk-OHPF2HTP.mjs → chunk-NJ4PTG4F.mjs} +40 -28
  42. package/dist/chunk-NJ4PTG4F.mjs.br +0 -0
  43. package/dist/chunk-NJ4PTG4F.mjs.gz +0 -0
  44. package/dist/{chunk-LCG7WBAG.mjs → chunk-PXYZFWDA.mjs} +625 -160
  45. package/dist/chunk-PXYZFWDA.mjs.br +0 -0
  46. package/dist/chunk-PXYZFWDA.mjs.gz +0 -0
  47. package/dist/{chunk-A7HLINZU.js → chunk-QT6BPOZM.js} +361 -349
  48. package/dist/chunk-QT6BPOZM.js.br +0 -0
  49. package/dist/chunk-QT6BPOZM.js.gz +0 -0
  50. package/dist/{chunk-SL3XPERE.mjs → chunk-RHR7GTDX.mjs} +136 -1
  51. package/dist/chunk-RHR7GTDX.mjs.br +0 -0
  52. package/dist/chunk-RHR7GTDX.mjs.gz +0 -0
  53. package/dist/{chunk-SPJR6MPI.js → chunk-X3SFCKAF.js} +3 -3
  54. package/dist/chunk-X3SFCKAF.js.br +0 -0
  55. package/dist/chunk-X3SFCKAF.js.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 +28 -3
  63. package/dist/index.d.ts.map +1 -1
  64. package/dist/index.js +36 -36
  65. package/dist/index.js.br +0 -0
  66. package/dist/index.js.gz +0 -0
  67. package/dist/index.mjs +6 -6
  68. package/dist/index.mjs.br +0 -0
  69. package/dist/index.mjs.gz +0 -0
  70. package/dist/internals.d.ts +38 -3
  71. package/dist/internals.d.ts.map +1 -1
  72. package/dist/internals.js +79 -79
  73. package/dist/internals.js.br +0 -0
  74. package/dist/internals.js.gz +0 -0
  75. package/dist/internals.mjs +4 -4
  76. package/dist/internals.mjs.br +0 -0
  77. package/dist/internals.mjs.gz +0 -0
  78. package/dist/pptx-viewer.css +1 -1
  79. package/dist/pptx-viewer.css.br +0 -0
  80. package/dist/pptx-viewer.css.gz +0 -0
  81. package/dist/{useViewerBuildingBlocks-CpUwhBD5.d.ts → useViewerBuildingBlocks-YvCYsxa3.d.ts} +21 -5
  82. package/dist/useViewerBuildingBlocks-YvCYsxa3.d.ts.map +1 -0
  83. package/dist/viewer/index.js +22 -22
  84. package/dist/viewer/index.js.br +0 -0
  85. package/dist/viewer/index.js.gz +0 -0
  86. package/dist/viewer/index.mjs +6 -6
  87. package/dist/viewer/index.mjs.br +0 -0
  88. package/dist/viewer/index.mjs.gz +0 -0
  89. package/package.json +1 -1
  90. package/dist/AiChatPanel-35CHYS5N.mjs.br +0 -0
  91. package/dist/AiChatPanel-35CHYS5N.mjs.gz +0 -0
  92. package/dist/AiChatPanel-KTMWRUD5.js.br +0 -0
  93. package/dist/AiChatPanel-KTMWRUD5.js.gz +0 -0
  94. package/dist/Model3DScene-2VMN3B65.mjs.br +0 -0
  95. package/dist/Model3DScene-2VMN3B65.mjs.gz +0 -0
  96. package/dist/Model3DScene-TMNUKCL6.js.br +0 -0
  97. package/dist/Model3DScene-TMNUKCL6.js.gz +0 -0
  98. package/dist/SurfaceChart3DScene-GKRDDN2U.mjs.gz +0 -0
  99. package/dist/SurfaceChart3DScene-KPNP3QD5.js.br +0 -0
  100. package/dist/SurfaceChart3DScene-KPNP3QD5.js.gz +0 -0
  101. package/dist/chunk-A7HLINZU.js.br +0 -0
  102. package/dist/chunk-A7HLINZU.js.gz +0 -0
  103. package/dist/chunk-FY2AFXKP.mjs.br +0 -0
  104. package/dist/chunk-FY2AFXKP.mjs.gz +0 -0
  105. package/dist/chunk-H74UXL4Q.js.br +0 -0
  106. package/dist/chunk-H74UXL4Q.js.gz +0 -0
  107. package/dist/chunk-IJVDNQLG.js.br +0 -0
  108. package/dist/chunk-IJVDNQLG.js.gz +0 -0
  109. package/dist/chunk-JWMXOYSX.js.br +0 -0
  110. package/dist/chunk-JWMXOYSX.js.gz +0 -0
  111. package/dist/chunk-LCG7WBAG.mjs.br +0 -0
  112. package/dist/chunk-LCG7WBAG.mjs.gz +0 -0
  113. package/dist/chunk-LXTKPSIG.mjs.br +0 -0
  114. package/dist/chunk-LXTKPSIG.mjs.gz +0 -0
  115. package/dist/chunk-MMK4K3QI.js.br +0 -0
  116. package/dist/chunk-MMK4K3QI.js.gz +0 -0
  117. package/dist/chunk-OHPF2HTP.mjs.br +0 -0
  118. package/dist/chunk-OHPF2HTP.mjs.gz +0 -0
  119. package/dist/chunk-SL3XPERE.mjs.br +0 -0
  120. package/dist/chunk-SL3XPERE.mjs.gz +0 -0
  121. package/dist/chunk-SPJR6MPI.js.br +0 -0
  122. package/dist/chunk-SPJR6MPI.js.gz +0 -0
  123. package/dist/chunk-TJ55KUWH.mjs.br +0 -0
  124. package/dist/chunk-TJ55KUWH.mjs.gz +0 -0
  125. package/dist/useViewerBuildingBlocks-CpUwhBD5.d.ts.map +0 -1
Binary file
Binary file
@@ -1,6 +1,6 @@
1
- import { cloneHistorySnapshot, MIN_ELEMENT_SIZE, ZOOM_TO_SELECTION_PADDING, DEFAULT_CANVAS_HEIGHT, DEFAULT_CANVAS_WIDTH, partitionTemplateElements, UNGROUPED_SECTION_ID, stopAllPersistentAudio, buildSaveSlides, DEFAULT_TABLE_ROWS, DEFAULT_TABLE_COLUMNS, executeMediaCommand, buildPdfFromImageData, buildNotesPdf, EMU_PER_PX, GRID_SIZE, DEFAULT_TEXT_FONT_SIZE } from './chunk-FY2AFXKP.mjs';
2
- import { translationsEn } from './chunk-SL3XPERE.mjs';
3
- import { TOOLBAR_TABS, computeVirtualRange, DEFAULT_VIRTUAL_OVERSCAN, BROADCAST_THROTTLE_MS, createSyncGate, clearLocalAwareness, validateRoomId, createDepartureChannel, resolveTransportForServerUrl, isMixedContentBlocked, CONNECTION_TIMEOUT_MS, registerCollaborationTeardown, sanitizeColor, cloneTemplateElementsBySlideId, cloneSlide, clampZoomScale, zoomInScale, zoomOutScale, PresentationAnimationController, computeEntranceAnimationDelay, PRESENTATION_HASH, PRESENTATION_NONCE_KEY, PRESENTATION_CHANNEL_NAME, swapPresentationWindows, PRESENTATION_MESSAGE_ORIGIN, clearAudienceContent, buildPresentationAudienceUrl, resolveAudienceScreenPlacement, placeAudienceWindow, storeAudienceContent, isPresentationSessionMessage, endAudienceDisplay, createPresentationKeyBuffer, acceptsPresentationInput, resolveAutoAdvanceDelayMs, buildMorphTransitionPlan, morphOptionToMode, createCollaborationLivePatcher, publishLiveInlineText, PptxHandler, collectMediaElements, collectImagePaths, buildInitialGuides, EncryptedFileError, saveAutosaveSnapshot, isTemplateElementId, hasShapeProperties, hasTextProperties, getInlineEditorSelection, applyStyleToSelectedSegments, setPendingSelectionRestore, applyCaseTransformToSegments, transformTextCase, addSection, renameSection, deleteSection, moveSectionUp, moveSectionDown, moveSlidesToSection, normalizeColorsForCapture, preprocessCssForCapture, downloadBlob, sanitizeDownloadFilename, slideProgressPercent, slideStatusLabel, EXPORT_ASSEMBLING_PERCENT, EXPORT_DONE_PERCENT, isExportAbortError, recordProgressPercent, applyThemeToData, THEME_PRESETS, themeColorSchemesEqual, comparePresentation, applyAcceptSlide, applyAcceptAllSlides, collectUsedFonts, detectTouchDevice, detectOrientation, isMobileViewport, MOBILE_BREAKPOINT, TABLET_BREAKPOINT, mayLeaveSlideShow, remapTextToSegments, guidePxToEmu, shouldLoopContinuously, applyRehearsalTimings, copyFormatFromElement, applyFormatToElement, mapEditorKey, isEditorTextInputTarget, createViewerOptionsStore, readSlidesFromYDoc, reconcileSlidesInYDoc, LOCAL_SYNC_ORIGIN, observeYDocSlides, shouldAutoFollowBroadcaster, createTouchGestureRecognizer, MAX_ZOOM_SCALE, MIN_ZOOM_SCALE, isKeyboardOpen, openPptxFile, readBackstageRecentFile, isActionHidden, buildElementClipboardPayload, generatePackageReadme, groupElements, generateElementId, makeCloneId, alignElements, distributeElements, bringForward, sendBackward, bringToFront, sendToBack, newTableElement, createDefaultChartElement, readViewportMetrics, computeKeyboardInset, mergeShapes, derivePresenceList, mapPresentationKey, buildPrintDocument, buildOutlineHtml, buildSlidesHtml, buildNotesHtml, buildHandoutsHtml, createBlankSlide, makeSlideId, buildThemeColorMap, reResolveSlideColors, createPresentationSessionId, resolveTransitionDurationMs, isUrlSafe, createPresenterTimer, createInitialPresentationSnapshot, mergePresentationSnapshot, presenterElapsed, stepPresenterZoom, resetPresenterTimer, togglePresenterTimer, canvasToJpegData, downloadDataUrl, pickSupportedMimeType, WEBM_MIME_CANDIDATES, fpsToFrameIntervalMs, segmentFrameCount, encodeGif, groupSlidesBySection, hasCopyableFormat, createBackstagePresentation, buildFieldSubstitutionContext, cloneElementForPaste, computeScrollDelta, getPresetShapeClipPath, svgPathToPolygons, polygonsToSvgPath, rerouteConnectorsForMovedElements, applyReroutedConnectors, SvgExporter, buildPrintHtmlDocument, deleteTableColumn, rebuildTableStructureInRawXml, insertTableColumn, deleteTableRow, insertTableRow, updateCellTextStyleInRawXml, updateCellTextInRawXml, splitCell, updateMergeAttrsInRawXml, mergeCells, isPpactionUrl, parsePpactionUrl, safeOpenUrl, ACTION_BUTTON_PRESETS, elementActionToPptxAction, buildSmartArtPresetData, computeSnapToShape, publishLiveGeometry, computeMarqueeHitIds, mergeAdditiveSelection, applyResize, snapBoxToGrid } from './chunk-TJ55KUWH.mjs';
1
+ import { cloneHistorySnapshot, MIN_ELEMENT_SIZE, ZOOM_TO_SELECTION_PADDING, DEFAULT_CANVAS_HEIGHT, DEFAULT_CANVAS_WIDTH, partitionTemplateElements, UNGROUPED_SECTION_ID, stopAllPersistentAudio, buildSaveSlides, DEFAULT_TABLE_ROWS, DEFAULT_TABLE_COLUMNS, executeMediaCommand, buildPdfFromImageData, buildNotesPdf, EMU_PER_PX, GRID_SIZE, DEFAULT_TEXT_FONT_SIZE } from './chunk-DD54KUDG.mjs';
2
+ import { translationsEn } from './chunk-RHR7GTDX.mjs';
3
+ import { TOOLBAR_TABS, computeVirtualRange, DEFAULT_VIRTUAL_OVERSCAN, BROADCAST_THROTTLE_MS, createSyncGate, clearLocalAwareness, validateRoomId, createDepartureChannel, resolveTransportForServerUrl, isMixedContentBlocked, CONNECTION_TIMEOUT_MS, registerCollaborationTeardown, sanitizeColor, cloneTemplateElementsBySlideId, cloneSlide, clampZoomScale, zoomInScale, zoomOutScale, PresentationAnimationController, computeEntranceAnimationDelay, PRESENTATION_HASH, PRESENTATION_NONCE_KEY, PRESENTATION_CHANNEL_NAME, swapPresentationWindows, PRESENTATION_MESSAGE_ORIGIN, clearAudienceContent, buildPresentationAudienceUrl, resolveAudienceScreenPlacement, placeAudienceWindow, storeAudienceContent, isPresentationSessionMessage, endAudienceDisplay, createPresentationKeyBuffer, acceptsPresentationInput, resolveAutoAdvanceDelayMs, hasShowSlideAfter, nextShowSlideIndex, previousShowSlideIndex, buildMorphTransitionPlan, morphOptionToMode, createCollaborationLivePatcher, publishLiveInlineText, PptxHandler, collectMediaElements, collectImagePaths, buildInitialGuides, EncryptedFileError, saveAutosaveSnapshot, isTemplateElementId, hasShapeProperties, hasTextProperties, getInlineEditorSelection, applyStyleToSelectedSegments, setPendingSelectionRestore, applyCaseTransformToSegments, transformTextCase, addSection, renameSection, deleteSection, moveSectionUp, moveSectionDown, moveSlidesToSection, normalizeColorsForCapture, preprocessCssForCapture, downloadBlob, sanitizeDownloadFilename, slideProgressPercent, slideStatusLabel, EXPORT_ASSEMBLING_PERCENT, EXPORT_DONE_PERCENT, isExportAbortError, recordProgressPercent, applyThemeToData, THEME_PRESETS, themeColorSchemesEqual, comparePresentation, applyAcceptSlide, applyAcceptAllSlides, collectUsedFonts, detectTouchDevice, detectOrientation, isMobileViewport, MOBILE_BREAKPOINT, TABLET_BREAKPOINT, mayLeaveSlideShow, remapTextToSegments, guidePxToEmu, shouldLoopContinuously, applyRehearsalTimings, copyFormatFromElement, applyFormatToElement, mapEditorKey, isEditorTextInputTarget, createViewerOptionsStore, readSlidesFromYDoc, reconcileSlidesInYDoc, LOCAL_SYNC_ORIGIN, observeYDocSlides, shouldAutoFollowBroadcaster, createTouchGestureRecognizer, MAX_ZOOM_SCALE, MIN_ZOOM_SCALE, isKeyboardOpen, openPptxFile, readBackstageRecentFile, isActionHidden, buildElementClipboardPayload, generatePackageReadme, groupElements, generateElementId, makeCloneId, alignElements, distributeElements, bringForward, sendBackward, bringToFront, sendToBack, newTableElement, createDefaultChartElement, readViewportMetrics, computeKeyboardInset, mergeShapes, derivePresenceList, mapPresentationKey, lastShowSlideIndex, firstShowSlideIndex, buildPrintDocument, buildOutlineHtml, buildSlidesHtml, buildNotesHtml, buildHandoutsHtml, createBlankSlide, makeSlideId, buildThemeColorMap, reResolveSlideColors, createPresentationSessionId, resolveTransitionDurationMs, isUrlSafe, createPresenterTimer, createInitialPresentationSnapshot, mergePresentationSnapshot, presenterElapsed, stepPresenterZoom, resetPresenterTimer, togglePresenterTimer, canvasToJpegData, downloadDataUrl, pickSupportedMimeType, WEBM_MIME_CANDIDATES, fpsToFrameIntervalMs, segmentFrameCount, encodeGif, resolveShowSlideIndexes, groupSlidesBySection, hasCopyableFormat, createBackstagePresentation, buildFieldSubstitutionContext, cloneElementForPaste, computeScrollDelta, getPresetShapeClipPath, svgPathToPolygons, polygonsToSvgPath, rerouteConnectorsForMovedElements, applyReroutedConnectors, SvgExporter, buildPrintHtmlDocument, deleteTableColumn, rebuildTableStructureInRawXml, insertTableColumn, deleteTableRow, insertTableRow, updateCellTextStyleInRawXml, updateCellTextInRawXml, splitCell, updateMergeAttrsInRawXml, mergeCells, isPpactionUrl, parsePpactionUrl, safeOpenUrl, ACTION_BUTTON_PRESETS, elementActionToPptxAction, buildSmartArtPresetData, computeSnapToShape, publishLiveGeometry, computeMarqueeHitIds, mergeAdditiveSelection, applyResize, snapBoxToGrid, applyMotionPathPreset } from './chunk-FV7HEYCX.mjs';
4
4
  import { useRef, useState, useEffect, useCallback, useMemo, useSyncExternalStore, useImperativeHandle } from 'react';
5
5
  import JSZip from 'jszip';
6
6
  import { useTranslation } from 'react-i18next';
@@ -1580,6 +1580,7 @@ function usePresentationKeyboard(input) {
1580
1580
  movePresentationSlide,
1581
1581
  navigateToSlide,
1582
1582
  slideCount,
1583
+ showSlideIndexes,
1583
1584
  onSetMode,
1584
1585
  onSetPointerTool,
1585
1586
  onEraseAnnotations,
@@ -1619,12 +1620,16 @@ function usePresentationKeyboard(input) {
1619
1620
  case "previous":
1620
1621
  movePresentationSlide(-1);
1621
1622
  return;
1622
- case "first":
1623
- navigateToSlide(0);
1623
+ case "first": {
1624
+ const first = firstShowSlideIndex(showSlideIndexes);
1625
+ navigateToSlide(first ?? 0);
1624
1626
  return;
1625
- case "last":
1626
- navigateToSlide(Math.max(0, slideCount - 1));
1627
+ }
1628
+ case "last": {
1629
+ const last = lastShowSlideIndex(showSlideIndexes);
1630
+ navigateToSlide(last ?? Math.max(0, slideCount - 1));
1627
1631
  return;
1632
+ }
1628
1633
  case "goto": {
1629
1634
  const index = mapped.slideNumber - 1;
1630
1635
  if (index >= 0 && index < slideCount) {
@@ -1664,6 +1669,7 @@ function usePresentationKeyboard(input) {
1664
1669
  movePresentationSlide,
1665
1670
  navigateToSlide,
1666
1671
  slideCount,
1672
+ showSlideIndexes,
1667
1673
  onSetMode,
1668
1674
  onSetPointerTool,
1669
1675
  onEraseAnnotations,
@@ -1900,10 +1906,8 @@ function useSlideNavigation(input) {
1900
1906
  if (availableSlideIndexes.length === 0) {
1901
1907
  return;
1902
1908
  }
1903
- const currentVisiblePosition = availableSlideIndexes.indexOf(presentationSlideIndex);
1904
- const normalizedCurrentPosition = currentVisiblePosition >= 0 ? currentVisiblePosition : 0;
1905
- const nextPosition = normalizedCurrentPosition + direction;
1906
- if (rehearsing && direction === 1 && nextPosition >= availableSlideIndexes.length) {
1909
+ const pastLastSlide = direction === 1 && !hasShowSlideAfter(presentationSlideIndex, availableSlideIndexes);
1910
+ if (rehearsing && pastLastSlide) {
1907
1911
  recordCurrentSlideTime(presentationSlideIndex);
1908
1912
  try {
1909
1913
  if (document.fullscreenElement) {
@@ -1916,17 +1920,13 @@ function useSlideNavigation(input) {
1916
1920
  setShowRehearsalSummary(true);
1917
1921
  return;
1918
1922
  }
1919
- if (!loopContinuously && !rehearsing && direction === 1 && nextPosition >= availableSlideIndexes.length && onAdvancePastLastSlide) {
1923
+ if (!loopContinuously && !rehearsing && pastLastSlide && onAdvancePastLastSlide) {
1920
1924
  onAdvancePastLastSlide();
1921
1925
  return;
1922
1926
  }
1923
- let resolvedPosition;
1924
- if (loopContinuously && !rehearsing && direction === 1 && nextPosition >= availableSlideIndexes.length) {
1925
- resolvedPosition = 0;
1926
- } else {
1927
- resolvedPosition = Math.min(availableSlideIndexes.length - 1, Math.max(0, nextPosition));
1928
- }
1929
- const nextSlideIndex = availableSlideIndexes[resolvedPosition];
1927
+ const nextSlideIndex = direction === 1 ? nextShowSlideIndex(presentationSlideIndex, availableSlideIndexes, {
1928
+ loop: Boolean(loopContinuously) && !rehearsing
1929
+ }) : previousShowSlideIndex(presentationSlideIndex, availableSlideIndexes);
1930
1930
  if (nextSlideIndex === void 0 || nextSlideIndex === presentationSlideIndex) {
1931
1931
  return;
1932
1932
  }
@@ -2325,6 +2325,7 @@ function usePresentationMode(input) {
2325
2325
  movePresentationSlide,
2326
2326
  navigateToSlide,
2327
2327
  slideCount: slides.length,
2328
+ showSlideIndexes: visibleSlideIndexes,
2328
2329
  onSetMode,
2329
2330
  onSetPointerTool,
2330
2331
  onEraseAnnotations,
@@ -3580,6 +3581,7 @@ function useViewerUIState() {
3580
3581
  const [sidebarPanelMode, setSidebarPanelMode] = useState("properties");
3581
3582
  const [showSlideSorter, setShowSlideSorter] = useState(false);
3582
3583
  const [showReadingView, setShowReadingView] = useState(false);
3584
+ const [showOutlineView, setShowOutlineView] = useState(false);
3583
3585
  const [isShortcutHelpOpen, setIsShortcutHelpOpen] = useState(false);
3584
3586
  const [isAccessibilityPanelOpen, setIsAccessibilityPanelOpen] = useState(false);
3585
3587
  const [accessibilityIssues, setAccessibilityIssues] = useState([]);
@@ -3628,6 +3630,8 @@ function useViewerUIState() {
3628
3630
  setShowSlideSorter,
3629
3631
  showReadingView,
3630
3632
  setShowReadingView,
3633
+ showOutlineView,
3634
+ setShowOutlineView,
3631
3635
  isShortcutHelpOpen,
3632
3636
  setIsShortcutHelpOpen,
3633
3637
  isAccessibilityPanelOpen,
@@ -8218,15 +8222,8 @@ function computeGridSpacingPx(presentationGridSpacing) {
8218
8222
  return GRID_SIZE;
8219
8223
  }
8220
8224
  function computeVisibleSlideIndexes(slides, activeCustomShowId, customShows) {
8221
- if (activeCustomShowId) {
8222
- const show = customShows.find((s) => s.id === activeCustomShowId);
8223
- if (show) {
8224
- const rIdToIndex = /* @__PURE__ */ new Map();
8225
- slides.forEach((s, i) => rIdToIndex.set(s.rId, i));
8226
- return show.slideRIds.map((rId) => rIdToIndex.get(rId)).filter((i) => i !== void 0);
8227
- }
8228
- }
8229
- return slides.map((_, i) => i).filter((i) => !slides[i]?.hidden);
8225
+ const activeShow = activeCustomShowId ? customShows.find((show) => show.id === activeCustomShowId) : void 0;
8226
+ return resolveShowSlideIndexes(slides, activeShow);
8230
8227
  }
8231
8228
  function computeSlideSectionGroups(slides, sections) {
8232
8229
  return groupSlidesBySection(sections, slides).map((group) => ({
@@ -10451,6 +10448,12 @@ function buildToolbarAnimationHandlers(input) {
10451
10448
  return;
10452
10449
  }
10453
10450
  const current = activeSlide.animations ?? [];
10451
+ if (group === "motionPath") {
10452
+ propertyHandlers.handleUpdateSlide({
10453
+ animations: applyMotionPathPreset(current, selectedElement.id, preset)
10454
+ });
10455
+ return;
10456
+ }
10454
10457
  const existing = current.find((a) => a.elementId === selectedElement.id);
10455
10458
  const presetValue = preset;
10456
10459
  if (existing) {
@@ -10508,6 +10511,7 @@ function buildToolbarProps(input) {
10508
10511
  state: s,
10509
10512
  selectedElement,
10510
10513
  activeSlide,
10514
+ activeSlideIndex,
10511
10515
  zoom,
10512
10516
  history,
10513
10517
  findReplace,
@@ -10659,6 +10663,7 @@ function buildToolbarProps(input) {
10659
10663
  onRunAccessibilityCheck: dialogs.handleRunAccessibilityCheck,
10660
10664
  onToggleSlideSorter: () => s.setShowSlideSorter((p) => !p),
10661
10665
  onOpenReadingView: () => s.setShowReadingView(true),
10666
+ onOpenOutlineView: () => s.setShowOutlineView(true),
10662
10667
  onUpdateTextStyle: ops.updateSelectedTextStyle,
10663
10668
  onTransformTextCase: ops.updateSelectedTextCase,
10664
10669
  isOverflowMenuOpen: s.isOverflowMenuOpen,
@@ -10703,6 +10708,10 @@ function buildToolbarProps(input) {
10703
10708
  eyedropperActive: s.eyedropperActive,
10704
10709
  onToggleEyedropper: () => s.setEyedropperActive((p) => !p),
10705
10710
  onOpenSetUpSlideShow: () => dialogs.setIsSetUpSlideShowOpen(true),
10711
+ // PowerPoint's Hide Slide: skip the active slide during the show while
10712
+ // leaving it in the deck, the rail and the sorter.
10713
+ onToggleHideSlide: () => slideOps.handleToggleHideSlides([activeSlideIndex]),
10714
+ activeSlideHidden: Boolean(activeSlide?.hidden),
10706
10715
  onOpenBroadcastDialog: () => dialogs.setIsBroadcastDialogOpen(true),
10707
10716
  onToggleSubtitles: dialogs.handleToggleSubtitles,
10708
10717
  showSubtitles: Boolean(s.presentationProperties.showSubtitles),
@@ -10772,10 +10781,12 @@ function useViewerBuildingBlocksCore(input) {
10772
10781
  activeMaster: state.activeMaster,
10773
10782
  presentationGridSpacing: state.presentationProperties.gridSpacing
10774
10783
  });
10784
+ const { options: viewerOptions } = useViewerOptions();
10775
10785
  const { presentation, annotations, actionSoundHandlerRef } = usePresentationSetup({
10776
10786
  mode,
10777
10787
  slides,
10778
10788
  visibleSlideIndexes,
10789
+ endWithBlackSlide: viewerOptions.advanced.slideShowEndWithBlackSlide,
10779
10790
  activeSlideIndex,
10780
10791
  containerRef,
10781
10792
  content,
@@ -11031,6 +11042,7 @@ function useViewerBuildingBlocks(input) {
11031
11042
  printHandlers,
11032
11043
  propertyHandlers,
11033
11044
  dialogs,
11045
+ activeSlideIndex,
11034
11046
  slideOps: editorOps.slideOps,
11035
11047
  ops: editorOps.ops,
11036
11048
  onSetMode: handleSetMode,
Binary file
Binary file