pptx-react-viewer 2.3.0 → 2.5.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 (152) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/dist/{AiChatPanel-PXZYHJUB.mjs → AiChatPanel-EMF3UYCE.mjs} +4 -5
  3. package/dist/AiChatPanel-EMF3UYCE.mjs.br +0 -0
  4. package/dist/AiChatPanel-EMF3UYCE.mjs.gz +0 -0
  5. package/dist/{AiChatPanel-HC3CE3TL.js → AiChatPanel-OHSLJNYG.js} +23 -24
  6. package/dist/AiChatPanel-OHSLJNYG.js.br +0 -0
  7. package/dist/AiChatPanel-OHSLJNYG.js.gz +0 -0
  8. package/dist/{Model3DScene-37QZRHV5.js → Model3DScene-ULHIJPMU.js} +2 -3
  9. package/dist/Model3DScene-ULHIJPMU.js.br +0 -0
  10. package/dist/Model3DScene-ULHIJPMU.js.gz +0 -0
  11. package/dist/{Model3DScene-ZG4HTMPX.mjs → Model3DScene-X6QJTWHV.mjs} +1 -2
  12. package/dist/Model3DScene-X6QJTWHV.mjs.br +0 -0
  13. package/dist/Model3DScene-X6QJTWHV.mjs.gz +0 -0
  14. package/dist/{PowerPointViewer-gmU5rc7K.d.ts → PowerPointViewer-Cjn1RgSz.d.ts} +2 -2
  15. package/dist/{PowerPointViewer-gmU5rc7K.d.ts.map → PowerPointViewer-Cjn1RgSz.d.ts.map} +1 -1
  16. package/dist/{SurfaceChart3DScene-QIREQ66D.js → SurfaceChart3DScene-K7Q5NYZ4.js} +2 -3
  17. package/dist/SurfaceChart3DScene-K7Q5NYZ4.js.br +0 -0
  18. package/dist/SurfaceChart3DScene-K7Q5NYZ4.js.gz +0 -0
  19. package/dist/{SurfaceChart3DScene-Z7R6DZXN.mjs → SurfaceChart3DScene-PRCKQJQQ.mjs} +1 -2
  20. package/dist/SurfaceChart3DScene-PRCKQJQQ.mjs.br +0 -0
  21. package/dist/SurfaceChart3DScene-PRCKQJQQ.mjs.gz +0 -0
  22. package/dist/audience-content-store-BMlth_3U.d.ts +386 -0
  23. package/dist/audience-content-store-BMlth_3U.d.ts.map +1 -0
  24. package/dist/{chunk-YIFO3WQO.js → chunk-25VSL2BB.js} +1 -0
  25. package/dist/chunk-25VSL2BB.js.br +0 -0
  26. package/dist/chunk-25VSL2BB.js.gz +0 -0
  27. package/dist/{chunk-L7JNCVTF.js → chunk-7Q7AEPO7.js} +384 -332
  28. package/dist/chunk-7Q7AEPO7.js.br +0 -0
  29. package/dist/chunk-7Q7AEPO7.js.gz +0 -0
  30. package/dist/{chunk-ZLSVW5GP.js → chunk-I4AFCPUC.js} +876 -882
  31. package/dist/chunk-I4AFCPUC.js.br +0 -0
  32. package/dist/chunk-I4AFCPUC.js.gz +0 -0
  33. package/dist/{chunk-J5A22DZ7.mjs → chunk-JSFUU2BB.mjs} +36 -42
  34. package/dist/chunk-JSFUU2BB.mjs.br +0 -0
  35. package/dist/chunk-JSFUU2BB.mjs.gz +0 -0
  36. package/dist/{chunk-I5LEMC5C.mjs → chunk-LIQGO45T.mjs} +74 -22
  37. package/dist/chunk-LIQGO45T.mjs.br +0 -0
  38. package/dist/chunk-LIQGO45T.mjs.gz +0 -0
  39. package/dist/{chunk-JFNMD6TM.mjs → chunk-LTEDT475.js} +48579 -31703
  40. package/dist/chunk-LTEDT475.js.br +0 -0
  41. package/dist/chunk-LTEDT475.js.gz +0 -0
  42. package/dist/{chunk-EUIFPDXZ.js → chunk-MJAEB43A.js} +3 -3
  43. package/dist/chunk-MJAEB43A.js.br +0 -0
  44. package/dist/chunk-MJAEB43A.js.gz +0 -0
  45. package/dist/{chunk-P7UVBRFO.js → chunk-NVH3RIN7.js} +282 -291
  46. package/dist/chunk-NVH3RIN7.js.br +0 -0
  47. package/dist/chunk-NVH3RIN7.js.gz +0 -0
  48. package/dist/{chunk-VOHTAUN4.mjs → chunk-TGVID6BB.mjs} +41 -50
  49. package/dist/chunk-TGVID6BB.mjs.br +0 -0
  50. package/dist/chunk-TGVID6BB.mjs.gz +0 -0
  51. package/dist/{chunk-3TB45PVK.js → chunk-VOV2N3NY.mjs} +48075 -32275
  52. package/dist/chunk-VOV2N3NY.mjs.br +0 -0
  53. package/dist/chunk-VOV2N3NY.mjs.gz +0 -0
  54. package/dist/{chunk-M5YR3QSB.mjs → chunk-WJKMTDXS.mjs} +1 -1
  55. package/dist/chunk-WJKMTDXS.mjs.br +0 -0
  56. package/dist/chunk-WJKMTDXS.mjs.gz +0 -0
  57. package/dist/{chunk-PZTPX3HK.mjs → chunk-Z6HIZWIQ.mjs} +1 -0
  58. package/dist/chunk-Z6HIZWIQ.mjs.br +0 -0
  59. package/dist/chunk-Z6HIZWIQ.mjs.gz +0 -0
  60. package/dist/i18n.js +4 -4
  61. package/dist/i18n.js.br +0 -0
  62. package/dist/i18n.js.gz +0 -0
  63. package/dist/i18n.mjs +1 -1
  64. package/dist/i18n.mjs.br +0 -0
  65. package/dist/i18n.mjs.gz +0 -0
  66. package/dist/index.d.ts +112 -87
  67. package/dist/index.js +39 -40
  68. package/dist/index.js.br +0 -0
  69. package/dist/index.js.gz +0 -0
  70. package/dist/index.mjs +6 -7
  71. package/dist/index.mjs.br +0 -0
  72. package/dist/index.mjs.gz +0 -0
  73. package/dist/internals.d.ts +563 -514
  74. package/dist/internals.d.ts.map +1 -1
  75. package/dist/internals.js +79 -81
  76. package/dist/internals.js.br +0 -0
  77. package/dist/internals.js.gz +0 -0
  78. package/dist/internals.mjs +4 -6
  79. package/dist/internals.mjs.br +0 -0
  80. package/dist/internals.mjs.gz +0 -0
  81. package/dist/pptx-viewer.css +1 -1
  82. package/dist/pptx-viewer.css.br +0 -0
  83. package/dist/pptx-viewer.css.gz +0 -0
  84. package/dist/{animation-timeline-eb5z0SHW.d.ts → types-DciBT90G.d.ts} +4 -3
  85. package/dist/types-DciBT90G.d.ts.map +1 -0
  86. package/dist/{useViewerBuildingBlocks-CjureTRf.d.ts → useViewerBuildingBlocks-DMDZRawe.d.ts} +4 -4
  87. package/dist/{useViewerBuildingBlocks-CjureTRf.d.ts.map → useViewerBuildingBlocks-DMDZRawe.d.ts.map} +1 -1
  88. package/dist/viewer/index.d.ts +112 -88
  89. package/dist/viewer/index.js +22 -24
  90. package/dist/viewer/index.js.br +0 -0
  91. package/dist/viewer/index.js.gz +0 -0
  92. package/dist/viewer/index.mjs +6 -8
  93. package/dist/viewer/index.mjs.br +0 -0
  94. package/dist/viewer/index.mjs.gz +0 -0
  95. package/package.json +4 -4
  96. package/dist/AiChatPanel-HC3CE3TL.js.br +0 -0
  97. package/dist/AiChatPanel-HC3CE3TL.js.gz +0 -0
  98. package/dist/AiChatPanel-PXZYHJUB.mjs.br +0 -0
  99. package/dist/AiChatPanel-PXZYHJUB.mjs.gz +0 -0
  100. package/dist/Model3DScene-37QZRHV5.js.br +0 -0
  101. package/dist/Model3DScene-37QZRHV5.js.gz +0 -0
  102. package/dist/Model3DScene-ZG4HTMPX.mjs.br +0 -0
  103. package/dist/Model3DScene-ZG4HTMPX.mjs.gz +0 -0
  104. package/dist/SurfaceChart3DScene-QIREQ66D.js.br +0 -0
  105. package/dist/SurfaceChart3DScene-QIREQ66D.js.gz +0 -0
  106. package/dist/SurfaceChart3DScene-Z7R6DZXN.mjs.br +0 -0
  107. package/dist/SurfaceChart3DScene-Z7R6DZXN.mjs.gz +0 -0
  108. package/dist/animation-timeline-eb5z0SHW.d.ts.map +0 -1
  109. package/dist/chunk-3TB45PVK.js.br +0 -0
  110. package/dist/chunk-3TB45PVK.js.gz +0 -0
  111. package/dist/chunk-4AAFZFGH.mjs +0 -27633
  112. package/dist/chunk-4AAFZFGH.mjs.br +0 -0
  113. package/dist/chunk-4AAFZFGH.mjs.gz +0 -0
  114. package/dist/chunk-EUIFPDXZ.js.br +0 -0
  115. package/dist/chunk-EUIFPDXZ.js.gz +0 -0
  116. package/dist/chunk-I5LEMC5C.mjs.br +0 -0
  117. package/dist/chunk-I5LEMC5C.mjs.gz +0 -0
  118. package/dist/chunk-IKBO6CZC.js +0 -2
  119. package/dist/chunk-IKBO6CZC.js.br +0 -3
  120. package/dist/chunk-IKBO6CZC.js.gz +0 -0
  121. package/dist/chunk-J5A22DZ7.mjs.br +0 -0
  122. package/dist/chunk-J5A22DZ7.mjs.gz +0 -0
  123. package/dist/chunk-JFNMD6TM.mjs.br +0 -0
  124. package/dist/chunk-JFNMD6TM.mjs.gz +0 -0
  125. package/dist/chunk-KDW3LLG5.js +0 -28067
  126. package/dist/chunk-KDW3LLG5.js.br +0 -0
  127. package/dist/chunk-KDW3LLG5.js.gz +0 -0
  128. package/dist/chunk-L7JNCVTF.js.br +0 -0
  129. package/dist/chunk-L7JNCVTF.js.gz +0 -0
  130. package/dist/chunk-M5YR3QSB.mjs.br +0 -0
  131. package/dist/chunk-M5YR3QSB.mjs.gz +0 -0
  132. package/dist/chunk-P7UVBRFO.js.br +0 -0
  133. package/dist/chunk-P7UVBRFO.js.gz +0 -0
  134. package/dist/chunk-PZTPX3HK.mjs.br +0 -0
  135. package/dist/chunk-PZTPX3HK.mjs.gz +0 -0
  136. package/dist/chunk-T5U6P2JH.mjs +0 -1
  137. package/dist/chunk-T5U6P2JH.mjs.br +0 -0
  138. package/dist/chunk-T5U6P2JH.mjs.gz +0 -0
  139. package/dist/chunk-VOHTAUN4.mjs.br +0 -0
  140. package/dist/chunk-VOHTAUN4.mjs.gz +0 -0
  141. package/dist/chunk-YIFO3WQO.js.br +0 -0
  142. package/dist/chunk-YIFO3WQO.js.gz +0 -0
  143. package/dist/chunk-ZLSVW5GP.js.br +0 -0
  144. package/dist/chunk-ZLSVW5GP.js.gz +0 -0
  145. package/dist/dist-FTEVZZPM.js +0 -2283
  146. package/dist/dist-FTEVZZPM.js.br +0 -0
  147. package/dist/dist-FTEVZZPM.js.gz +0 -0
  148. package/dist/dist-L7GZVBMG.mjs +0 -2
  149. package/dist/dist-L7GZVBMG.mjs.br +0 -0
  150. package/dist/dist-L7GZVBMG.mjs.gz +0 -0
  151. package/dist/index-CDCSXtK3.d.ts +0 -685
  152. package/dist/index-CDCSXtK3.d.ts.map +0 -1
Binary file
Binary file
@@ -1,9 +1,8 @@
1
- import { computeFocusTargets, aiChangeAnimationCss, changeGhostStyle, createChatHistoryStore, toRenderableParts } from './chunk-M5YR3QSB.mjs';
2
- import { useReducedMotion, useViewerState, useViewerOptions, useIsMobile, useResizablePanels, useDerivedSlideState, useZoomViewport, useEditorHistory, usePresentationSetup, useTouchGestures, useViewerDialogs, useEditorOperations, useViewerIntegration, useYjsDocumentSync, useCollaborationLivePatch, useFollowMode, useBroadcastFollower, scopeLayoutOptionsToActiveSlide, useToolbarVisibility, useKeyboardInsets, useModalDismissDrag, useCollaborativeState, useVirtualizedSlides, useSwipeNavigation, useSheetDismissDrag, detectTargetType, parseEmailUrl, parseSlideFromUrl, ACTION_VERB_MAP, downloadBlob } from './chunk-I5LEMC5C.mjs';
3
- import { SHAPE_PRESETS, DEFAULT_STROKE_COLOR, getConnectorPathGeometry, buildLineShadowCss, buildLineGlowFilter, renderConnectorMarker, MIN_ELEMENT_SIZE, getShapeVisualStyle, getTextStyleForElement, DEFAULT_TEXT_COLOR, renderVectorShape, isConnectorOrLineElement, build3DExtrusionData, getImageRenderStyle, cn, ANIMATION_PRESET_OPTIONS, resolvePalette, resolveStyle, layoutToCategory, wrapChrome, DEFAULT_FILL_COLOR, hasDagDuotoneEffect, renderDagDuotoneSvgFilter, getTextLayoutStyle, renderTableElement, renderMediaElement, shouldRenderFallbackLabel, getCropShapeClipPath, SLIDE_TRANSITION_OPTIONS, SLIDE_NAV_THUMBNAIL_WIDTH, styleShadow, styleStroke, colour, fitFontSize, smartArtNodeGroupProps, chevronPoints, SmartArtNodeText, truncate, renderStepDownProcess, renderAlternatingFlow, renderDescendingProcess, renderPictureAccentList, renderVerticalBlockList, renderGroupedList, renderPyramidList, renderHorizontalPictureList, renderAccentProcess, renderVerticalChevronList, isImageTiled, getImageTilingStyle, getDuotoneColors, getTextWarpStyle, renderTextSegments, buildReactChartViewModel, renderChartElement, buildTextBody3DSceneStyle, TOOLBAR_SECTIONS, SHORTCUT_REFERENCE_ITEMS as SHORTCUT_REFERENCE_ITEMS$1, buildTree, treeWidth, treeDepth, nodeOpacity, gearPath, resolveSmartArtDataPalette, DEFAULT_TEXT_FONT_SIZE, DEFAULT_FONT_FAMILY, HYPERLINK_COLOR, GRID_SIZE, startPreviewAnimation, stopPreviewAnimation } from './chunk-VOHTAUN4.mjs';
4
- import { RULER_THICKNESS, RULER_FONT_SIZE, normalizeHexColor, colorWithOpacity, normalizeStrokeDashType, getSvgStrokeDasharray, getCompoundLineOffsets, getCompoundLineWidths, svgLineCap, getElementTransform, ACTION_BUTTON_PRESETS, isEditableTextElement, getAriaRole, getAriaLabel, getAriaRoleDescription, getImageEffectsOpacity, getImageEffectsFilter, getElementTransformWithoutRotation, EQUATION_TEMPLATES, convertLatexToOmml, convertOmmlToMathMl, sanitizeMathMl, DEFAULT_VIEWER_OPTIONS, buildUserFontFaceStyles, readStoredViewerPrefs, resolveThemeCatalogEntry, THEME_CATALOG, writeStoredViewerPrefs, openPptxFile, readBackstageRecentFile, viewerOptionsToPreferences, applyPreferenceToOptions, listAutosaveSnapshots, deleteAutosaveSnapshot, revealedSmartArtNodeCount, buildSmartArtA11y, buildCssGradientFromShapeStyle, resolveGroupChildFill, getGroupChildParentFill, getComputedEffectStyle, getSoftEdgeSvgFilter, getElementLabel, buildPreviewElements, themeToCssVars, DEFAULT_INSERT_CHART_TYPE, hasCopyableFormat, createBackstagePresentation, printPropertiesFrameSlides, printPropertiesSlidesPerPage, VIEWER_OPTIONS_TABS, DEFAULT_QUICK_ACCESS_COMMAND_IDS, buildJoinCollaborationConfig, buildCreateCollaborationConfig, generateBroadcastRoomId, DEFAULT_BROADCAST_SERVER_URL, buildBroadcastViewerUrl, resolveTransportForServerUrl, resolveDrawingShapeNodeId, buildSummaryZoomView, getImageColorWashStyle, getPendingSelectionRestore, restoreSegmentSelection, getTextCompensationTransform, applyChartBuildReveal, formatAxisValue, hasPressureVariation, getInkReplayStyles, INK_REPLAY_KEYFRAMES, resolveInkColor, resolveInkWidth, resolveInkOpacity, pressuresToWidths, getContentPartReplayStyles, resolveOleType, getOleTypeColor, getOleTypeLabel, shouldUseSvgWarp, getSlideBackgroundStyle, filterCommands, resolveTitleBarStatusKey, TITLE_BAR_CLASSES, TITLE_BAR_DEFAULT_FILE_KEY, shouldConfirmExternalHyperlink, safeOpenUrl, isPpactionUrl, parsePpactionUrl, formatVersionTimestamp, formatRelativeTime, scanAvailableFontFamilies, PRESETS, CATEGORIES, convertOmmlToLatex, clampPercent, HANDOUT_OPTIONS, TOOLBAR_TABS, SHORTCUT_REFERENCE_ITEMS, resolveViewerAddinRows, availableQuickAccessCommands, addQuickAccessCommand, removeQuickAccessCommand, moveQuickAccessCommand, activateModalFocus, buildCollaborationShareUrl, mobileElapsedSince, isFirstSlide, isLastSlide, formatMobileElapsed, mobileSlideCounter, presenterPaneAdvancesOnClick, formatElapsed, computeInlineEditorRect, findSmartArtNodeText, rebuildDrawingShapesIfCleared, shouldCommitSmartArtNodeText, getImageSvgFilters, buildDuotoneCacheKey, getDuotoneCachedResult, applyDuotone, setDuotoneCachedResult, buildCacheKey, DEFAULT_COLOR_CHANGE_TOLERANCE, getCachedResult, applyColorChange, setCachedResult, findChartPartTarget, dragValueForPart, withChartPointValue, dragAnchorViewY, withChartTitle, computeSmartArtLayout, buildSmartArt3DModel, extractPathPoints, generatePressureCircles, isBrowserOpenableMime, formatBytes, getOleBadgeLabel, openUrlInNewTab, getWarpPath, TAB_ROW_ACTION_CLASSES, listBackstageRecentFiles, BACKSTAGE_NAV, INSERT_CHART_TYPES, SLIDE_VIRTUALIZATION_THRESHOLD, getSlideTransitionAnimations, SLIDE_TRANSITION_KEYFRAMES, presentationInkPath, getShapeAdjustmentHandleDescriptor, formatSlideCounter, isUrlSafe, computeHandoutLayout, getPrintableArea, generateNoteLineCount, computeAllNotesPages, getNotesPrintableArea, QUICK_ACCESS_COMMAND_CATALOG, notesSegmentsToSpans, erasePresentationInkAt, movePresenterPointer, appendPresentationInkPoint, NOTES_FONT_SIZE_DEFAULT, formatTime, NOTES_FONT_SIZE_MIN, clampNotesFontSize, NOTES_FONT_SIZE_STEP, NOTES_FONT_SIZE_MAX, groupIntoParagraphs, substituteFieldText, BACKSTAGE_TEMPLATES, formatBackstageDate, formatBackstageSize, DEFAULT_VIEWER_PROFILE, resolveProfileInitial, AVATAR_COLOR_SWATCHES, getConnectionSites, generateTicks, getCommentMarkerPosition, buildThemeColorGrid, THEME_COLOR_LABELS, buildSmartArtPresetData, getLocalStorageUsageSummary, saveViewerProfile, clearAllLocalViewerData, TABLE_STYLE_PRESETS, withFrameSlides, withSlidesPerPage, formatCommentTimestamp, DIRECTIONAL_PRESETS, computeMergeCellRight, computeMergeCellDown, computeSplitCell, DUOTONE_PRESETS, ARTISTIC_EFFECTS, LBL, SEL, FILL_MODE_OPTIONS, SECTION_HEADING, NUM, GRADIENT_TYPE_OPTIONS, PATTERN_OPTIONS } from './chunk-4AAFZFGH.mjs';
5
- import { LOCALE_CATALOG, translationsEn } from './chunk-PZTPX3HK.mjs';
6
- import { hasShapeProperties, hasTextProperties, SWITCHABLE_LAYOUT_TYPES, isInkElement, isImageLikeElement, getLinkedTextBoxSegments, themeColorSchemesEqual, setSmartArtNodeStyle, updateSmartArtNodeText, getSubstituteFontFamily, THEME_COLOR_SCHEME_KEYS, chartDataChangeType, chartDataUpdatePoint, chartDataAddCategory, chartDataRemoveCategory, chartDataAddSeries, chartDataRemoveSeries, setChartAxisLogScale, setChartAxisTitleStyle, setChartAxisGridlineStyle, setChartSeriesMarker, setChartSeriesChartType, setChartDataPointFill, setChartDataPointExplosion, setChartDataPointMarker, setChartDataPointLabel, getOleObjectTypeLabel, pptxActionToElementAction, applyThemeOverrideToSlide, COLOR_MAP_ALIAS_KEYS, DEFAULT_COLOR_MAP, addSmartArtNodeAsChild, removeSmartArtNode, elementActionToPptxAction, switchSmartArtLayout, addSmartArtNode, demoteSmartArtNode, promoteSmartArtNode, reorderSmartArtNode } from './chunk-JFNMD6TM.mjs';
1
+ import { computeFocusTargets, aiChangeAnimationCss, changeGhostStyle, createChatHistoryStore, toRenderableParts } from './chunk-WJKMTDXS.mjs';
2
+ import { useReducedMotion, useViewerState, useViewerOptions, useIsMobile, useResizablePanels, useDerivedSlideState, useZoomViewport, useEditorHistory, usePresentationSetup, useTouchGestures, useViewerDialogs, useEditorOperations, useViewerIntegration, useYjsDocumentSync, useCollaborationLivePatch, useFollowMode, useBroadcastFollower, scopeLayoutOptionsToActiveSlide, useToolbarVisibility, useKeyboardInsets, useModalDismissDrag, useCollaborativeState, useVirtualizedSlides, useSwipeNavigation, useSheetDismissDrag, detectTargetType, parseEmailUrl, parseSlideFromUrl, ACTION_VERB_MAP, downloadBlob } from './chunk-LIQGO45T.mjs';
3
+ import { SHAPE_PRESETS, DEFAULT_STROKE_COLOR, getConnectorPathGeometry, buildLineShadowCss, buildLineGlowFilter, renderConnectorMarker, MIN_ELEMENT_SIZE, getShapeVisualStyle, getTextStyleForElement, DEFAULT_TEXT_COLOR, renderVectorShape, isConnectorOrLineElement, build3DExtrusionData, getImageRenderStyle, cn, ANIMATION_PRESET_OPTIONS, resolvePalette, resolveStyle, layoutToCategory, wrapChrome, DEFAULT_FILL_COLOR, hasDagDuotoneEffect, renderDagDuotoneSvgFilter, getTextLayoutStyle, renderTableElement, renderMediaElement, shouldRenderFallbackLabel, getCropShapeClipPath, SLIDE_TRANSITION_OPTIONS, SLIDE_NAV_THUMBNAIL_WIDTH, styleShadow, styleStroke, colour, fitFontSize, smartArtNodeGroupProps, chevronPoints, SmartArtNodeText, truncate, renderStepDownProcess, renderAlternatingFlow, renderDescendingProcess, renderPictureAccentList, renderVerticalBlockList, renderGroupedList, renderPyramidList, renderHorizontalPictureList, renderAccentProcess, renderVerticalChevronList, isImageTiled, getImageTilingStyle, getDuotoneColors, getTextWarpStyle, renderTextSegments, buildReactChartViewModel, renderChartElement, buildTextBody3DSceneStyle, TOOLBAR_SECTIONS, SHORTCUT_REFERENCE_ITEMS as SHORTCUT_REFERENCE_ITEMS$1, buildTree, treeWidth, treeDepth, nodeOpacity, gearPath, resolveSmartArtDataPalette, DEFAULT_TEXT_FONT_SIZE, DEFAULT_FONT_FAMILY, HYPERLINK_COLOR, GRID_SIZE, startPreviewAnimation, stopPreviewAnimation } from './chunk-TGVID6BB.mjs';
4
+ import { LOCALE_CATALOG, translationsEn } from './chunk-Z6HIZWIQ.mjs';
5
+ import { RULER_THICKNESS, RULER_FONT_SIZE, hasShapeProperties, normalizeHexColor, colorWithOpacity, normalizeStrokeDashType, getSvgStrokeDasharray, getCompoundLineOffsets, getCompoundLineWidths, svgLineCap, hasTextProperties, getElementTransform, ACTION_BUTTON_PRESETS, isEditableTextElement, getAriaRole, getAriaLabel, getAriaRoleDescription, getImageEffectsOpacity, getImageEffectsFilter, getElementTransformWithoutRotation, SWITCHABLE_LAYOUT_TYPES, EQUATION_TEMPLATES, convertLatexToOmml, convertOmmlToMathMl, sanitizeMathMl, DEFAULT_VIEWER_OPTIONS, buildUserFontFaceStyles, readStoredViewerPrefs, resolveThemeCatalogEntry, THEME_CATALOG, writeStoredViewerPrefs, openPptxFile, readBackstageRecentFile, viewerOptionsToPreferences, applyPreferenceToOptions, listAutosaveSnapshots, deleteAutosaveSnapshot, revealedSmartArtNodeCount, buildSmartArtA11y, buildCssGradientFromShapeStyle, resolveGroupChildFill, getGroupChildParentFill, getComputedEffectStyle, getSoftEdgeSvgFilter, isInkElement, getElementLabel, buildPreviewElements, themeToCssVars, DEFAULT_INSERT_CHART_TYPE, hasCopyableFormat, createBackstagePresentation, printPropertiesFrameSlides, printPropertiesSlidesPerPage, VIEWER_OPTIONS_TABS, DEFAULT_QUICK_ACCESS_COMMAND_IDS, buildJoinCollaborationConfig, buildCreateCollaborationConfig, generateBroadcastRoomId, DEFAULT_BROADCAST_SERVER_URL, buildBroadcastViewerUrl, resolveTransportForServerUrl, resolveDrawingShapeNodeId, buildSummaryZoomView, getImageColorWashStyle, isImageLikeElement, getPendingSelectionRestore, restoreSegmentSelection, getTextCompensationTransform, applyChartBuildReveal, formatAxisValue, hasPressureVariation, getInkReplayStyles, INK_REPLAY_KEYFRAMES, resolveInkColor, resolveInkWidth, resolveInkOpacity, pressuresToWidths, getContentPartReplayStyles, resolveOleType, getOleTypeColor, getOleTypeLabel, getLinkedTextBoxSegments, shouldUseSvgWarp, getSlideBackgroundStyle, filterCommands, resolveTitleBarStatusKey, TITLE_BAR_CLASSES, TITLE_BAR_DEFAULT_FILE_KEY, shouldConfirmExternalHyperlink, safeOpenUrl, isPpactionUrl, parsePpactionUrl, themeColorSchemesEqual, formatVersionTimestamp, formatRelativeTime, scanAvailableFontFamilies, PRESETS, CATEGORIES, convertOmmlToLatex, clampPercent, HANDOUT_OPTIONS, TOOLBAR_TABS, SHORTCUT_REFERENCE_ITEMS, resolveViewerAddinRows, availableQuickAccessCommands, addQuickAccessCommand, removeQuickAccessCommand, moveQuickAccessCommand, activateModalFocus, buildCollaborationShareUrl, mobileElapsedSince, isFirstSlide, isLastSlide, formatMobileElapsed, mobileSlideCounter, presenterPaneAdvancesOnClick, formatElapsed, computeInlineEditorRect, findSmartArtNodeText, setSmartArtNodeStyle, rebuildDrawingShapesIfCleared, shouldCommitSmartArtNodeText, updateSmartArtNodeText, getImageSvgFilters, buildDuotoneCacheKey, getDuotoneCachedResult, applyDuotone, setDuotoneCachedResult, buildCacheKey, DEFAULT_COLOR_CHANGE_TOLERANCE, getCachedResult, applyColorChange, setCachedResult, findChartPartTarget, dragValueForPart, withChartPointValue, dragAnchorViewY, withChartTitle, computeSmartArtLayout, buildSmartArt3DModel, extractPathPoints, generatePressureCircles, isBrowserOpenableMime, formatBytes, getOleBadgeLabel, openUrlInNewTab, getSubstituteFontFamily, getWarpPath, TAB_ROW_ACTION_CLASSES, listBackstageRecentFiles, BACKSTAGE_NAV, INSERT_CHART_TYPES, SLIDE_VIRTUALIZATION_THRESHOLD, getSlideTransitionAnimations, SLIDE_TRANSITION_KEYFRAMES, presentationInkPath, getShapeAdjustmentHandleDescriptor, formatSlideCounter, isUrlSafe, computeHandoutLayout, getPrintableArea, generateNoteLineCount, computeAllNotesPages, getNotesPrintableArea, QUICK_ACCESS_COMMAND_CATALOG, notesSegmentsToSpans, erasePresentationInkAt, movePresenterPointer, appendPresentationInkPoint, NOTES_FONT_SIZE_DEFAULT, formatTime, NOTES_FONT_SIZE_MIN, clampNotesFontSize, NOTES_FONT_SIZE_STEP, NOTES_FONT_SIZE_MAX, groupIntoParagraphs, substituteFieldText, BACKSTAGE_TEMPLATES, formatBackstageDate, formatBackstageSize, DEFAULT_VIEWER_PROFILE, resolveProfileInitial, AVATAR_COLOR_SWATCHES, getConnectionSites, generateTicks, getCommentMarkerPosition, buildThemeColorGrid, THEME_COLOR_SCHEME_KEYS, THEME_COLOR_LABELS, buildSmartArtPresetData, getLocalStorageUsageSummary, saveViewerProfile, clearAllLocalViewerData, TABLE_STYLE_PRESETS, chartDataChangeType, chartDataUpdatePoint, chartDataAddCategory, chartDataRemoveCategory, chartDataAddSeries, chartDataRemoveSeries, setChartAxisLogScale, setChartAxisTitleStyle, setChartAxisGridlineStyle, setChartSeriesMarker, setChartSeriesChartType, setChartDataPointFill, setChartDataPointExplosion, setChartDataPointMarker, setChartDataPointLabel, getOleObjectTypeLabel, pptxActionToElementAction, withFrameSlides, withSlidesPerPage, applyThemeOverrideToSlide, COLOR_MAP_ALIAS_KEYS, DEFAULT_COLOR_MAP, formatCommentTimestamp, DIRECTIONAL_PRESETS, computeMergeCellRight, computeMergeCellDown, computeSplitCell, addSmartArtNodeAsChild, removeSmartArtNode, DUOTONE_PRESETS, ARTISTIC_EFFECTS, elementActionToPptxAction, LBL, SEL, FILL_MODE_OPTIONS, SECTION_HEADING, NUM, switchSmartArtLayout, addSmartArtNode, demoteSmartArtNode, promoteSmartArtNode, reorderSmartArtNode, GRADIENT_TYPE_OPTIONS, PATTERN_OPTIONS } from './chunk-VOV2N3NY.mjs';
7
6
  import React32, { createContext, useMemo, useState, useCallback, lazy, forwardRef, useEffect, useRef, useContext, Suspense, useLayoutEffect, useDeferredValue } from 'react';
8
7
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
9
8
  import { useTranslation } from 'react-i18next';
@@ -1336,7 +1335,7 @@ function AccountPage() {
1336
1335
  return void 0;
1337
1336
  });
1338
1337
  };
1339
- const version = "2.2.1" ;
1338
+ const version = "2.4.0" ;
1340
1339
  return /* @__PURE__ */ jsxs("div", { className: "mt-8 max-w-[700px] space-y-6", children: [
1341
1340
  /* @__PURE__ */ jsxs("section", { className: cardClass, children: [
1342
1341
  /* @__PURE__ */ jsxs("h2", { className: "flex items-center gap-2 text-sm font-semibold", children: [
@@ -8340,7 +8339,7 @@ function FailedToLoad() {
8340
8339
  var LazyModel3DScene = React32.lazy(
8341
8340
  async () => {
8342
8341
  try {
8343
- return await import('./Model3DScene-ZG4HTMPX.mjs');
8342
+ return await import('./Model3DScene-X6QJTWHV.mjs');
8344
8343
  } catch {
8345
8344
  return { default: FailedToLoad };
8346
8345
  }
@@ -18067,6 +18066,19 @@ function PresentationAudienceEffects({ snapshot }) {
18067
18066
  snapshot.subtitlesVisible && snapshot.caption && /* @__PURE__ */ jsx("div", { className: "absolute inset-x-[10%] bottom-8 rounded-lg bg-black/80 px-6 py-3 text-center text-xl font-medium text-white", children: snapshot.caption })
18068
18067
  ] });
18069
18068
  }
18069
+ function PresentationEndOverlay({ onExit }) {
18070
+ const { t } = useTranslation();
18071
+ return /* @__PURE__ */ jsx(
18072
+ "button",
18073
+ {
18074
+ type: "button",
18075
+ "data-pptx-end-of-show": "",
18076
+ onClick: onExit,
18077
+ className: "absolute inset-0 z-[90] flex cursor-default items-start bg-black text-left",
18078
+ children: /* @__PURE__ */ jsx("span", { className: "px-4 py-3 text-[12px] text-white/70", children: t("pptx.presentation.endOfSlideShow", "End of slide show, click to exit.") })
18079
+ }
18080
+ );
18081
+ }
18070
18082
  function PresentationSubtitleBar({
18071
18083
  visible,
18072
18084
  onCaptionChange
@@ -18157,11 +18169,11 @@ function renderNotesSegments(segments) {
18157
18169
  );
18158
18170
  });
18159
18171
  }
18160
- var toolClass = (active) => `inline-flex h-9 min-w-9 items-center justify-center gap-2 rounded-md px-2 text-xs transition-colors ${active ? "bg-sky-500 text-slate-950" : "bg-white/7 text-slate-200 hover:bg-white/14"}`;
18172
+ var toolClass = (active) => `inline-flex h-9 min-w-9 items-center justify-center gap-2 rounded-md px-2 text-xs transition-colors ${active ? "bg-primary text-primary-foreground" : "bg-muted text-foreground hover:bg-accent"}`;
18161
18173
  function PresenterConsoleToolbar(props) {
18162
18174
  const pointerTool = props.snapshot.pointer?.tool ?? "none";
18163
18175
  const zoom = props.snapshot.zoom?.scale ?? 1;
18164
- return /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center gap-1 border-b border-white/10 bg-slate-950 px-3 py-2", children: [
18176
+ return /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center gap-1 border-b border-border bg-card px-3 py-2", children: [
18165
18177
  /* @__PURE__ */ jsx(
18166
18178
  "button",
18167
18179
  {
@@ -18172,7 +18184,7 @@ function PresenterConsoleToolbar(props) {
18172
18184
  }
18173
18185
  ),
18174
18186
  /* @__PURE__ */ jsx("button", { className: toolClass(false), onClick: props.onResetTimer, title: "Reset timer", children: /* @__PURE__ */ jsx(LuRotateCcw, {}) }),
18175
- /* @__PURE__ */ jsx("span", { className: "mx-1 h-6 w-px bg-white/15" }),
18187
+ /* @__PURE__ */ jsx("span", { className: "mx-1 h-6 w-px bg-border" }),
18176
18188
  /* @__PURE__ */ jsxs("button", { className: toolClass(false), onClick: props.onShowSlides, title: "See all slides", children: [
18177
18189
  /* @__PURE__ */ jsx(LuGrid2X2, {}),
18178
18190
  " Slides"
@@ -18180,7 +18192,7 @@ function PresenterConsoleToolbar(props) {
18180
18192
  /* @__PURE__ */ jsx("button", { className: toolClass(zoom > 1), onClick: () => props.onStepZoom(1), title: "Zoom in", children: /* @__PURE__ */ jsx(LuZoomIn, {}) }),
18181
18193
  /* @__PURE__ */ jsx("button", { className: toolClass(false), onClick: () => props.onStepZoom(-1), title: "Zoom out", children: /* @__PURE__ */ jsx(LuZoomOut, {}) }),
18182
18194
  /* @__PURE__ */ jsx("button", { className: toolClass(false), onClick: props.onResetZoom, title: "Reset zoom", children: /* @__PURE__ */ jsx(LuScan, {}) }),
18183
- /* @__PURE__ */ jsx("span", { className: "mx-1 h-6 w-px bg-white/15" }),
18195
+ /* @__PURE__ */ jsx("span", { className: "mx-1 h-6 w-px bg-border" }),
18184
18196
  ["laser", "pen", "highlighter", "eraser"].map((tool) => /* @__PURE__ */ jsx(
18185
18197
  "button",
18186
18198
  {
@@ -18191,7 +18203,7 @@ function PresenterConsoleToolbar(props) {
18191
18203
  },
18192
18204
  tool
18193
18205
  )),
18194
- /* @__PURE__ */ jsx("span", { className: "mx-1 h-6 w-px bg-white/15" }),
18206
+ /* @__PURE__ */ jsx("span", { className: "mx-1 h-6 w-px bg-border" }),
18195
18207
  /* @__PURE__ */ jsx(
18196
18208
  "button",
18197
18209
  {
@@ -18416,7 +18428,6 @@ function PresenterNotesRail({
18416
18428
  {
18417
18429
  type: "button",
18418
18430
  onClick: () => onMove(1),
18419
- disabled: current >= slides.length - 1,
18420
18431
  className: "inline-flex items-center gap-1 rounded bg-muted px-3 py-1.5 text-xs disabled:opacity-40",
18421
18432
  children: [
18422
18433
  t("pptx.presenter.next"),
@@ -18489,20 +18500,13 @@ function PresenterNotesRail({
18489
18500
  ] });
18490
18501
  }
18491
18502
  function PresenterSlideNavigator(props) {
18492
- return /* @__PURE__ */ jsxs("div", { className: "absolute inset-0 z-[120] flex flex-col bg-slate-950/98 text-slate-100", children: [
18493
- /* @__PURE__ */ jsxs("header", { className: "flex items-center justify-between border-b border-white/10 px-6 py-4", children: [
18503
+ return /* @__PURE__ */ jsxs("div", { className: "absolute inset-0 z-[120] flex flex-col bg-card/98 text-foreground", children: [
18504
+ /* @__PURE__ */ jsxs("header", { className: "flex items-center justify-between border-b border-border px-6 py-4", children: [
18494
18505
  /* @__PURE__ */ jsxs("div", { children: [
18495
18506
  /* @__PURE__ */ jsx("p", { className: "text-xs uppercase tracking-[0.22em] text-sky-300", children: "Slide navigator" }),
18496
18507
  /* @__PURE__ */ jsx("h2", { className: "text-xl font-semibold", children: "See all slides" })
18497
18508
  ] }),
18498
- /* @__PURE__ */ jsx(
18499
- "button",
18500
- {
18501
- className: "rounded-md bg-white/10 px-4 py-2 hover:bg-white/20",
18502
- onClick: props.onClose,
18503
- children: "Close"
18504
- }
18505
- )
18509
+ /* @__PURE__ */ jsx("button", { className: "rounded-md bg-muted px-4 py-2 hover:bg-accent", onClick: props.onClose, children: "Close" })
18506
18510
  ] }),
18507
18511
  /* @__PURE__ */ jsx("div", { className: "grid flex-1 grid-cols-[repeat(auto-fill,minmax(220px,1fr))] gap-5 overflow-auto p-6", children: props.slides.map((slide, index) => /* @__PURE__ */ jsxs(
18508
18512
  "button",
@@ -18518,7 +18522,7 @@ function PresenterSlideNavigator(props) {
18518
18522
  canvasSize: props.canvasSize
18519
18523
  }
18520
18524
  ),
18521
- /* @__PURE__ */ jsxs("span", { className: "mt-2 block text-xs tabular-nums text-slate-400", children: [
18525
+ /* @__PURE__ */ jsxs("span", { className: "mt-2 block text-xs tabular-nums text-muted-foreground", children: [
18522
18526
  index + 1,
18523
18527
  slide.hidden ? " - hidden" : ""
18524
18528
  ] })
@@ -18613,6 +18617,7 @@ function PresenterView({
18613
18617
  onOpenAudienceWindow,
18614
18618
  onCloseAudienceWindow,
18615
18619
  isAudienceWindowOpen,
18620
+ endOfShowVisible,
18616
18621
  snapshot,
18617
18622
  onNavigateToSlide,
18618
18623
  onToggleTimer,
@@ -18634,7 +18639,7 @@ function PresenterView({
18634
18639
  const elapsed = snapshot.elapsedMs ?? (presentationStartTime ? now - presentationStartTime : 0);
18635
18640
  const [showSlides, setShowSlides] = useState(false);
18636
18641
  const ink = usePresenterInk(snapshot, onUpdateSnapshot);
18637
- const paneAdvancesOnClick = presenterPaneAdvancesOnClick(snapshot.pointer?.tool);
18642
+ const paneAdvancesOnClick = presenterPaneAdvancesOnClick(snapshot.pointer?.tool) && !endOfShowVisible;
18638
18643
  const handleSlidePaneClick = useCallback(() => {
18639
18644
  if (!paneAdvancesOnClick) {
18640
18645
  return;
@@ -18652,7 +18657,7 @@ function PresenterView({
18652
18657
  const TIMER_SEGMENT_MS = 5 * 60 * 1e3;
18653
18658
  const timerProgress = Math.min(100, elapsed % TIMER_SEGMENT_MS / TIMER_SEGMENT_MS * 100);
18654
18659
  const timerSegment = Math.floor(elapsed / TIMER_SEGMENT_MS);
18655
- return /* @__PURE__ */ jsxs("div", { className: "absolute inset-0 z-50 flex flex-col bg-slate-950 text-slate-100", children: [
18660
+ return /* @__PURE__ */ jsxs("div", { className: "absolute inset-0 z-50 flex flex-col bg-card text-foreground", children: [
18656
18661
  /* @__PURE__ */ jsx(
18657
18662
  PresenterConsoleToolbar,
18658
18663
  {
@@ -18680,8 +18685,9 @@ function PresenterView({
18680
18685
  role: "presentation",
18681
18686
  "data-pptx-presenter-slide": true,
18682
18687
  onClick: handleSlidePaneClick,
18683
- className: `flex-[7] flex flex-col items-center justify-center bg-black p-6 min-w-0 overflow-hidden ${paneAdvancesOnClick ? "cursor-pointer" : ""}`,
18688
+ className: `relative flex-[7] flex flex-col items-center justify-center bg-black p-6 min-w-0 overflow-hidden ${paneAdvancesOnClick ? "cursor-pointer" : ""}`,
18684
18689
  children: [
18690
+ endOfShowVisible && /* @__PURE__ */ jsx(PresentationEndOverlay, { onExit: () => onMovePresentationSlide(1) }),
18685
18691
  /* @__PURE__ */ jsxs(
18686
18692
  PresenterSlideFrame,
18687
18693
  {
@@ -30812,6 +30818,7 @@ function ViewerPresentationLayer(props) {
30812
30818
  onOpenAudienceWindow: presentation.openAudienceWindow,
30813
30819
  onCloseAudienceWindow: presentation.closeAudienceWindow,
30814
30820
  isAudienceWindowOpen: presentation.isAudienceWindowOpen(),
30821
+ endOfShowVisible: presentation.endOfShowVisible,
30815
30822
  snapshot: presentation.presenterSnapshot,
30816
30823
  onNavigateToSlide: presentation.navigateToSlide,
30817
30824
  onToggleTimer: presentation.togglePresenterTimer,
@@ -31089,19 +31096,6 @@ function PresentationContextMenu(p) {
31089
31096
  )
31090
31097
  ] });
31091
31098
  }
31092
- function PresentationEndOverlay({ onExit }) {
31093
- const { t } = useTranslation();
31094
- return /* @__PURE__ */ jsx(
31095
- "button",
31096
- {
31097
- type: "button",
31098
- "data-pptx-end-of-show": "",
31099
- onClick: onExit,
31100
- className: "absolute inset-0 z-[90] flex cursor-default items-start bg-black text-left",
31101
- children: /* @__PURE__ */ jsx("span", { className: "px-4 py-3 text-[12px] text-white/70", children: t("pptx.presentation.endOfSlideShow", "End of slide show, click to exit.") })
31102
- }
31103
- );
31104
- }
31105
31099
  var ViewerOptionsContext = createContext(DEFAULT_VIEWER_OPTIONS);
31106
31100
  function useViewerOptionsContext() {
31107
31101
  return useContext(ViewerOptionsContext);
@@ -31549,7 +31543,7 @@ ${url}`)) {
31549
31543
  )
31550
31544
  );
31551
31545
  }
31552
- var AiChatPanel = lazy(() => import('./AiChatPanel-PXZYHJUB.mjs'));
31546
+ var AiChatPanel = lazy(() => import('./AiChatPanel-EMF3UYCE.mjs'));
31553
31547
  function AiChatPanelLazy(props) {
31554
31548
  return /* @__PURE__ */ jsx(
31555
31549
  Suspense,
Binary file
Binary file
@@ -1,7 +1,6 @@
1
- import { cloneHistorySnapshot, MAX_ZOOM_SCALE, MIN_ZOOM_SCALE, 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-VOHTAUN4.mjs';
2
- import { TOOLBAR_TABS, computeVirtualRange, DEFAULT_VIRTUAL_OVERSCAN, BROADCAST_THROTTLE_MS, createSyncGate, clearLocalAwareness, validateRoomId, createDepartureChannel, resolveTransportForServerUrl, isMixedContentBlocked, CONNECTION_TIMEOUT_MS, registerCollaborationTeardown, sanitizeColor, cloneTemplateElementsBySlideId, cloneSlide, PresentationAnimationController, computeEntranceAnimationDelay, PRESENTATION_HASH, PRESENTATION_NONCE_KEY, PRESENTATION_CHANNEL_NAME, swapPresentationWindows, PRESENTATION_MESSAGE_ORIGIN, clearAudienceContent, buildPresentationAudienceUrl, resolveAudienceScreenPlacement, placeAudienceWindow, storeAudienceContent, isPresentationSessionMessage, createPresentationKeyBuffer, createCollaborationLivePatcher, publishLiveInlineText, collectMediaElements, collectImagePaths, buildInitialGuides, saveAutosaveSnapshot, isTemplateElementId, 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, comparePresentation, applyAcceptSlide, applyAcceptAllSlides, collectUsedFonts, detectTouchDevice, detectOrientation, isMobileViewport, MOBILE_BREAKPOINT, TABLET_BREAKPOINT, remapTextToSegments, shouldLoopContinuously, applyRehearsalTimings, copyFormatFromElement, applyFormatToElement, createViewerOptionsStore, readSlidesFromYDoc, reconcileSlidesInYDoc, LOCAL_SYNC_ORIGIN, observeYDocSlides, shouldAutoFollowBroadcaster, createTouchGestureRecognizer, isKeyboardOpen, openPptxFile, readBackstageRecentFile, isActionHidden, buildElementClipboardPayload, generatePackageReadme, groupElements, generateElementId, makeCloneId, alignElements, distributeElements, bringForward, sendBackward, bringToFront, sendToBack, newTableElement, createDefaultChartElement, readViewportMetrics, computeKeyboardInset, derivePresenceList, mapPresentationKey, buildPrintDocument, buildOutlineHtml, buildSlidesHtml, buildNotesHtml, buildHandoutsHtml, createBlankSlide, makeSlideId, createPresentationSessionId, resolveTransitionDurationMs, isUrlSafe, createPresenterTimer, createInitialPresentationSnapshot, mergePresentationSnapshot, presenterElapsed, stepPresenterZoom, resetPresenterTimer, togglePresenterTimer, canvasToJpegData, downloadDataUrl, pickSupportedMimeType, WEBM_MIME_CANDIDATES, fpsToFrameIntervalMs, segmentFrameCount, encodeGif, groupSlidesBySection, hasCopyableFormat, createBackstagePresentation, cloneElementForPaste, computeScrollDelta, rerouteConnectorsForMovedElements, applyReroutedConnectors, buildPrintHtmlDocument, deleteTableColumn, insertTableColumn, deleteTableRow, insertTableRow, splitCell, mergeCells, isPpactionUrl, parsePpactionUrl, safeOpenUrl, ACTION_BUTTON_PRESETS, buildSmartArtPresetData, computeSnapToShape, publishLiveGeometry, computeMarqueeHitIds, mergeAdditiveSelection, applyResize, snapBoxToGrid } from './chunk-4AAFZFGH.mjs';
3
- import { translationsEn } from './chunk-PZTPX3HK.mjs';
4
- import { PptxHandler, EncryptedFileError, hasShapeProperties, hasTextProperties, applyThemeToData, THEME_PRESETS, themeColorSchemesEqual, guidePxToEmu, mergeShapes, buildThemeColorMap, reResolveSlideColors, getPresetShapeClipPath, svgPathToPolygons, polygonsToSvgPath, SvgExporter, rebuildTableStructureInRawXml, updateCellTextStyleInRawXml, updateCellTextInRawXml, updateMergeAttrsInRawXml, elementActionToPptxAction } from './chunk-JFNMD6TM.mjs';
1
+ import { cloneHistorySnapshot, MAX_ZOOM_SCALE, MIN_ZOOM_SCALE, 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-TGVID6BB.mjs';
2
+ import { translationsEn } from './chunk-Z6HIZWIQ.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, PresentationAnimationController, computeEntranceAnimationDelay, PRESENTATION_HASH, PRESENTATION_NONCE_KEY, PRESENTATION_CHANNEL_NAME, swapPresentationWindows, PRESENTATION_MESSAGE_ORIGIN, clearAudienceContent, buildPresentationAudienceUrl, resolveAudienceScreenPlacement, placeAudienceWindow, storeAudienceContent, isPresentationSessionMessage, endAudienceDisplay, createPresentationKeyBuffer, acceptsPresentationInput, 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, createViewerOptionsStore, readSlidesFromYDoc, reconcileSlidesInYDoc, LOCAL_SYNC_ORIGIN, observeYDocSlides, shouldAutoFollowBroadcaster, createTouchGestureRecognizer, 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, 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-VOV2N3NY.mjs';
5
4
  import { useRef, useState, useEffect, useCallback, useMemo, useSyncExternalStore, useImperativeHandle } from 'react';
6
5
  import JSZip from 'jszip';
7
6
  import { useTranslation } from 'react-i18next';
@@ -1016,6 +1015,7 @@ function useAnimationPlayback(input) {
1016
1015
  const presentationTimersRef = useRef([]);
1017
1016
  const controllerRef = useRef(null);
1018
1017
  const buildRafRef = useRef(null);
1018
+ const seededCompletedRef = useRef(false);
1019
1019
  const startBuildReveal = useCallback(
1020
1020
  (controller, group) => {
1021
1021
  driveBuildReveal(
@@ -1168,7 +1168,7 @@ function useAnimationPlayback(input) {
1168
1168
  controller.resetHover(shapeId);
1169
1169
  }, []);
1170
1170
  const runPresentationEntranceAnimations = useCallback(
1171
- (slideIndex) => {
1171
+ (slideIndex, options) => {
1172
1172
  clearPresentationTimers();
1173
1173
  if (!animationsEnabled) {
1174
1174
  controllerRef.current = null;
@@ -1185,6 +1185,17 @@ function useAnimationPlayback(input) {
1185
1185
  setPresentationAnimations([]);
1186
1186
  return;
1187
1187
  }
1188
+ seededCompletedRef.current = false;
1189
+ if (options?.completed) {
1190
+ const seeded = controllerRef.current;
1191
+ if (seeded) {
1192
+ seededCompletedRef.current = seeded.hasMoreSteps();
1193
+ seeded.completeAll();
1194
+ setPresentationElementStates(seeded.computeStates());
1195
+ }
1196
+ setPresentationAnimations([]);
1197
+ return;
1198
+ }
1188
1199
  const controller = controllerRef.current;
1189
1200
  if (controller && controller.hasMoreSteps()) {
1190
1201
  const firstGroup = controller.peekNext();
@@ -1253,6 +1264,7 @@ function useAnimationPlayback(input) {
1253
1264
  handleHoverStart,
1254
1265
  handleHoverEnd,
1255
1266
  runPresentationEntranceAnimations,
1267
+ isSeededCompleted: () => seededCompletedRef.current,
1256
1268
  presentationTimersRef
1257
1269
  };
1258
1270
  }
@@ -1483,7 +1495,14 @@ function usePresenterWindow(input) {
1483
1495
  };
1484
1496
  }
1485
1497
  function useAudienceMode(input) {
1486
- const { mode: _mode, onSetMode, onSetActiveSlideIndex, containerRef, onSnapshot } = input;
1498
+ const {
1499
+ mode: _mode,
1500
+ onSetMode,
1501
+ onSetActiveSlideIndex,
1502
+ containerRef,
1503
+ onSnapshot,
1504
+ onPresenterEnded
1505
+ } = input;
1487
1506
  const initialised = useRef(false);
1488
1507
  useEffect(() => {
1489
1508
  if (!isAudienceTab()) {
@@ -1507,6 +1526,8 @@ function useAudienceMode(input) {
1507
1526
  document.removeEventListener("keydown", requestAudienceFullscreen);
1508
1527
  };
1509
1528
  }, [containerRef, onSetMode]);
1529
+ const handlersRef = useRef({ onSetActiveSlideIndex, onSnapshot, onPresenterEnded });
1530
+ handlersRef.current = { onSetActiveSlideIndex, onSnapshot, onPresenterEnded };
1510
1531
  useEffect(() => {
1511
1532
  if (!isAudienceTab()) {
1512
1533
  return;
@@ -1526,21 +1547,20 @@ function useAudienceMode(input) {
1526
1547
  if (expectedSessionId && data.sessionId !== expectedSessionId) {
1527
1548
  return;
1528
1549
  }
1550
+ const handlers = handlersRef.current;
1529
1551
  if (data.type === "presenter-slide-change") {
1530
- onSetActiveSlideIndex(data.slideIndex);
1552
+ handlers.onSetActiveSlideIndex(data.slideIndex);
1531
1553
  }
1532
1554
  if (data.type === "presenter-state") {
1533
- onSetActiveSlideIndex(data.snapshot.slideIndex);
1534
- onSnapshot?.(data.snapshot);
1555
+ handlers.onSetActiveSlideIndex(data.snapshot.slideIndex);
1556
+ handlers.onSnapshot?.(data.snapshot);
1535
1557
  }
1536
1558
  if (data.type === "presenter-exit") {
1537
1559
  if (expectedSessionId) {
1538
1560
  void clearAudienceContent(expectedSessionId);
1539
1561
  }
1540
- onSetMode("edit");
1541
- try {
1542
- window.close();
1543
- } catch {
1562
+ if (endAudienceDisplay(window)) {
1563
+ handlers.onPresenterEnded?.();
1544
1564
  }
1545
1565
  }
1546
1566
  };
@@ -1557,7 +1577,7 @@ function useAudienceMode(input) {
1557
1577
  } catch {
1558
1578
  }
1559
1579
  };
1560
- }, [onSetMode, onSetActiveSlideIndex, onSnapshot]);
1580
+ }, []);
1561
1581
  }
1562
1582
  function usePresentationKeyboard(input) {
1563
1583
  const {
@@ -1580,7 +1600,7 @@ function usePresentationKeyboard(input) {
1580
1600
  } = input;
1581
1601
  const keyBufferRef = useRef(createPresentationKeyBuffer());
1582
1602
  useEffect(() => {
1583
- if (mode !== "present") {
1603
+ if (mode !== "present" || !acceptsPresentationInput()) {
1584
1604
  keyBufferRef.current = createPresentationKeyBuffer();
1585
1605
  return;
1586
1606
  }
@@ -1819,14 +1839,16 @@ function executeSlideTransition(nextSlideIndex, deps) {
1819
1839
  durationMs
1820
1840
  });
1821
1841
  const timer = window.setTimeout(() => {
1822
- deps.runPresentationEntranceAnimations(nextSlideIndex);
1842
+ deps.runPresentationEntranceAnimations(nextSlideIndex, {
1843
+ completed: deps.seedCompleted
1844
+ });
1823
1845
  deps.scheduleAutoAdvanceForSlide?.(nextSlideIndex);
1824
1846
  }, durationMs);
1825
1847
  deps.presentationTimersRef.current.push(timer);
1826
1848
  return;
1827
1849
  }
1828
1850
  deps.setTransitionOverlay(null);
1829
- deps.runPresentationEntranceAnimations(nextSlideIndex);
1851
+ deps.runPresentationEntranceAnimations(nextSlideIndex, { completed: deps.seedCompleted });
1830
1852
  deps.scheduleAutoAdvanceForSlide?.(nextSlideIndex);
1831
1853
  }
1832
1854
 
@@ -1936,7 +1958,9 @@ function useSlideNavigation(input) {
1936
1958
  presentationTimersRef,
1937
1959
  setTransitionOverlay,
1938
1960
  // PowerPoint plays a slide's transition only when advancing into it.
1939
- playTransition: direction === 1
1961
+ playTransition: direction === 1,
1962
+ // Stepping back onto a slide shows it with its builds already played.
1963
+ seedCompleted: direction === -1
1940
1964
  });
1941
1965
  },
1942
1966
  [
@@ -2139,6 +2163,7 @@ function usePresentationMode(input) {
2139
2163
  handleHoverStart,
2140
2164
  handleHoverEnd,
2141
2165
  runPresentationEntranceAnimations,
2166
+ isSeededCompleted,
2142
2167
  presentationTimersRef
2143
2168
  } = useAnimationPlayback({ slides, onPlayActionSound, showWithAnimation });
2144
2169
  const {
@@ -2161,6 +2186,11 @@ function usePresentationMode(input) {
2161
2186
  setPresentationStartTime,
2162
2187
  setPresenterMode
2163
2188
  });
2189
+ useEffect(() => {
2190
+ if (mode !== "present") {
2191
+ setPresenterMode(false);
2192
+ }
2193
+ }, [mode]);
2164
2194
  const handleAdvancePastLastSlide = useCallback(() => {
2165
2195
  if (endWithBlackSlide) {
2166
2196
  setEndOfShowVisible(true);
@@ -2196,6 +2226,9 @@ function usePresentationMode(input) {
2196
2226
  });
2197
2227
  const movePresentationSlide = useCallback(
2198
2228
  (direction, trigger = "explicit") => {
2229
+ if (!acceptsPresentationInput()) {
2230
+ return;
2231
+ }
2199
2232
  if (endOfShowVisible) {
2200
2233
  setEndOfShowVisible(false);
2201
2234
  if (direction === 1) {
@@ -2203,9 +2236,20 @@ function usePresentationMode(input) {
2203
2236
  }
2204
2237
  return;
2205
2238
  }
2239
+ if (direction === -1 && isSeededCompleted()) {
2240
+ runPresentationEntranceAnimations(presentationSlideIndex);
2241
+ return;
2242
+ }
2206
2243
  moveNavigationSlide(direction, trigger);
2207
2244
  },
2208
- [endOfShowVisible, moveNavigationSlide, onSetMode]
2245
+ [
2246
+ endOfShowVisible,
2247
+ isSeededCompleted,
2248
+ moveNavigationSlide,
2249
+ onSetMode,
2250
+ presentationSlideIndex,
2251
+ runPresentationEntranceAnimations
2252
+ ]
2209
2253
  );
2210
2254
  const { handleZoomClick, zoomReturnSlideIndex, returnToZoomSlide, clearZoomReturn } = useZoomNavigation({ navigateToSlide });
2211
2255
  const openAllSlides = useCallback(() => setAllSlidesOpen(true), []);
@@ -2231,7 +2275,10 @@ function usePresentationMode(input) {
2231
2275
  setPresentationSlideIndex(index);
2232
2276
  },
2233
2277
  containerRef,
2234
- onSnapshot: presenterConsole.applyAudienceSnapshot
2278
+ onSnapshot: presenterConsole.applyAudienceSnapshot,
2279
+ // The presenter ended the session but this tab could not close itself:
2280
+ // show the black end-of-slide-show screen rather than the editor.
2281
+ onPresenterEnded: () => setEndOfShowVisible(true)
2235
2282
  });
2236
2283
  const enterPresentMode = useCallback(() => {
2237
2284
  setPresenterMode(false);
@@ -8304,6 +8351,9 @@ function useAnnotationHandlers(input) {
8304
8351
  }, [annotations, setMode, setSlides, history]);
8305
8352
  const handleSetMode = useCallback(
8306
8353
  (nextMode) => {
8354
+ if (mode === "present" && nextMode !== "present" && !mayLeaveSlideShow()) {
8355
+ return;
8356
+ }
8307
8357
  if (nextMode === "present") {
8308
8358
  presentation.enterPresentMode();
8309
8359
  } else if (mode === "present" && annotations.hasAnyAnnotations) {
@@ -8577,6 +8627,9 @@ function usePresentationSetup(input) {
8577
8627
  containerRef,
8578
8628
  content,
8579
8629
  onSetMode: (nextMode) => {
8630
+ if (mode === "present" && nextMode !== "present" && !mayLeaveSlideShow()) {
8631
+ return;
8632
+ }
8580
8633
  if (mode === "present" && nextMode !== "present" && annotations.hasAnyAnnotations && promptKeepInkAnnotations) {
8581
8634
  pendingModeRef.current = nextMode;
8582
8635
  setShowKeepAnnotationsDialog(true);
@@ -9859,8 +9912,7 @@ function useYjsDocumentSync({
9859
9912
  return;
9860
9913
  }
9861
9914
  try {
9862
- const { PptxHandler: PptxHandler2 } = await import('./dist-L7GZVBMG.mjs');
9863
- const handler = new PptxHandler2();
9915
+ const handler = new PptxHandler();
9864
9916
  await handler.load(sourceBytes.buffer);
9865
9917
  const currentSlides = readSlidesFromYDoc(
9866
9918
  doc
Binary file
Binary file