pptx-react-viewer 3.2.0 → 3.3.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 (155) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/dist/{AiChatPanel-C3E7NLX3.mjs → AiChatPanel-BNFDBP4S.mjs} +9 -8
  3. package/dist/AiChatPanel-BNFDBP4S.mjs.br +0 -0
  4. package/dist/AiChatPanel-BNFDBP4S.mjs.gz +0 -0
  5. package/dist/{AiChatPanel-TKBVSYD2.js → AiChatPanel-WNQCTQB5.js} +29 -28
  6. package/dist/AiChatPanel-WNQCTQB5.js.br +0 -0
  7. package/dist/AiChatPanel-WNQCTQB5.js.gz +0 -0
  8. package/dist/{Area3DChartScene-3A3CXKN3.js → Area3DChartScene-FXBSLIGX.js} +2 -2
  9. package/dist/Area3DChartScene-FXBSLIGX.js.br +0 -0
  10. package/dist/Area3DChartScene-FXBSLIGX.js.gz +0 -0
  11. package/dist/{Area3DChartScene-7YCFWEGX.mjs → Area3DChartScene-SAQVRYOH.mjs} +1 -1
  12. package/dist/Area3DChartScene-SAQVRYOH.mjs.br +0 -0
  13. package/dist/Area3DChartScene-SAQVRYOH.mjs.gz +0 -0
  14. package/dist/{Bar3DChartScene-BDUENAWJ.js → Bar3DChartScene-7HVUTP2E.js} +2 -2
  15. package/dist/Bar3DChartScene-7HVUTP2E.js.br +0 -0
  16. package/dist/Bar3DChartScene-7HVUTP2E.js.gz +0 -0
  17. package/dist/{Bar3DChartScene-7CNSJ35X.mjs → Bar3DChartScene-LUA6E2K6.mjs} +1 -1
  18. package/dist/Bar3DChartScene-LUA6E2K6.mjs.br +3 -0
  19. package/dist/Bar3DChartScene-LUA6E2K6.mjs.gz +0 -0
  20. package/dist/{Line3DChartScene-SMTHK6MD.mjs → Line3DChartScene-IW4JGH57.mjs} +1 -1
  21. package/dist/Line3DChartScene-IW4JGH57.mjs.br +0 -0
  22. package/dist/Line3DChartScene-IW4JGH57.mjs.gz +0 -0
  23. package/dist/{Line3DChartScene-R352CZ5U.js → Line3DChartScene-OVPULUTF.js} +2 -2
  24. package/dist/Line3DChartScene-OVPULUTF.js.br +0 -0
  25. package/dist/Line3DChartScene-OVPULUTF.js.gz +0 -0
  26. package/dist/{Model3DScene-Y4SGFQYW.js → Model3DScene-5KP6BVCV.js} +2 -2
  27. package/dist/Model3DScene-5KP6BVCV.js.br +0 -0
  28. package/dist/Model3DScene-5KP6BVCV.js.gz +0 -0
  29. package/dist/{Model3DScene-AUVJXXPV.mjs → Model3DScene-BERTZYCJ.mjs} +1 -1
  30. package/dist/Model3DScene-BERTZYCJ.mjs.br +0 -0
  31. package/dist/Model3DScene-BERTZYCJ.mjs.gz +0 -0
  32. package/dist/{PieChart3DScene-TK2VT4RS.js → PieChart3DScene-3R2ETTGA.js} +2 -2
  33. package/dist/PieChart3DScene-3R2ETTGA.js.br +0 -0
  34. package/dist/PieChart3DScene-3R2ETTGA.js.gz +0 -0
  35. package/dist/{PieChart3DScene-UD7GRH55.mjs → PieChart3DScene-O6FFK5L7.mjs} +1 -1
  36. package/dist/PieChart3DScene-O6FFK5L7.mjs.br +0 -0
  37. package/dist/PieChart3DScene-O6FFK5L7.mjs.gz +0 -0
  38. package/dist/{SurfaceChart3DScene-TXY6UZSW.mjs → SurfaceChart3DScene-OCR26R5D.mjs} +1 -1
  39. package/dist/SurfaceChart3DScene-OCR26R5D.mjs.br +0 -0
  40. package/dist/SurfaceChart3DScene-OCR26R5D.mjs.gz +0 -0
  41. package/dist/{SurfaceChart3DScene-ERFXZW2O.js → SurfaceChart3DScene-TGFAOLHL.js} +2 -2
  42. package/dist/SurfaceChart3DScene-TGFAOLHL.js.br +0 -0
  43. package/dist/SurfaceChart3DScene-TGFAOLHL.js.gz +0 -0
  44. package/dist/{chunk-RX6FE24O.mjs → chunk-2FTJAMFA.mjs} +294 -61
  45. package/dist/chunk-2FTJAMFA.mjs.br +0 -0
  46. package/dist/chunk-2FTJAMFA.mjs.gz +0 -0
  47. package/dist/{chunk-PPNXPEEZ.mjs → chunk-3B5FRKYU.mjs} +130 -437
  48. package/dist/chunk-3B5FRKYU.mjs.br +0 -0
  49. package/dist/chunk-3B5FRKYU.mjs.gz +0 -0
  50. package/dist/{chunk-ALO4ZOHQ.js → chunk-3P7FYHJH.js} +1 -0
  51. package/dist/chunk-3P7FYHJH.js.br +0 -0
  52. package/dist/chunk-3P7FYHJH.js.gz +0 -0
  53. package/dist/{chunk-B6UIVRFA.js → chunk-44CQ67GQ.js} +173 -262
  54. package/dist/chunk-44CQ67GQ.js.br +0 -0
  55. package/dist/chunk-44CQ67GQ.js.gz +0 -0
  56. package/dist/{chunk-RHSA5BW5.mjs → chunk-AMRT3AE4.mjs} +1 -0
  57. package/dist/chunk-AMRT3AE4.mjs.br +0 -0
  58. package/dist/chunk-AMRT3AE4.mjs.gz +0 -0
  59. package/dist/{chunk-G7UBIKAG.mjs → chunk-DM2IZCSD.mjs} +2429 -39
  60. package/dist/chunk-DM2IZCSD.mjs.br +0 -0
  61. package/dist/{chunk-G7UBIKAG.mjs.gz → chunk-DM2IZCSD.mjs.gz} +0 -0
  62. package/dist/{chunk-Q52HT4EZ.js → chunk-FSQCEAMG.js} +299 -63
  63. package/dist/chunk-FSQCEAMG.js.br +0 -0
  64. package/dist/chunk-FSQCEAMG.js.gz +0 -0
  65. package/dist/{chunk-ARQGUUYU.js → chunk-GR6SJJIT.js} +449 -723
  66. package/dist/chunk-GR6SJJIT.js.br +0 -0
  67. package/dist/chunk-GR6SJJIT.js.gz +0 -0
  68. package/dist/{chunk-FMEEIS6L.mjs → chunk-ITN5NYYM.mjs} +10 -98
  69. package/dist/chunk-ITN5NYYM.mjs.br +0 -0
  70. package/dist/chunk-ITN5NYYM.mjs.gz +0 -0
  71. package/dist/{chunk-FJDZ7AEE.js → chunk-K6R2JNCK.js} +2459 -45
  72. package/dist/chunk-K6R2JNCK.js.br +0 -0
  73. package/dist/{chunk-FJDZ7AEE.js.gz → chunk-K6R2JNCK.js.gz} +0 -0
  74. package/dist/{chunk-UHR7EYFM.mjs → chunk-QEEU4S4Z.mjs} +50 -324
  75. package/dist/chunk-QEEU4S4Z.mjs.br +0 -0
  76. package/dist/chunk-QEEU4S4Z.mjs.gz +0 -0
  77. package/dist/{chunk-RRAL4Y7V.js → chunk-QKSYKQEL.js} +1236 -1543
  78. package/dist/chunk-QKSYKQEL.js.br +0 -0
  79. package/dist/chunk-QKSYKQEL.js.gz +0 -0
  80. package/dist/i18n.js +4 -4
  81. package/dist/i18n.js.br +0 -0
  82. package/dist/i18n.js.gz +0 -0
  83. package/dist/i18n.mjs +1 -1
  84. package/dist/i18n.mjs.br +0 -0
  85. package/dist/i18n.mjs.gz +0 -0
  86. package/dist/index.js +47 -47
  87. package/dist/index.js.br +0 -0
  88. package/dist/index.js.gz +0 -0
  89. package/dist/index.mjs +6 -6
  90. package/dist/index.mjs.br +0 -0
  91. package/dist/index.mjs.gz +0 -0
  92. package/dist/internals.d.ts.map +1 -1
  93. package/dist/internals.js +79 -79
  94. package/dist/internals.js.br +4 -6
  95. package/dist/internals.js.gz +0 -0
  96. package/dist/internals.mjs +4 -4
  97. package/dist/internals.mjs.br +0 -0
  98. package/dist/internals.mjs.gz +0 -0
  99. package/dist/viewer/index.js +27 -27
  100. package/dist/viewer/index.js.br +0 -0
  101. package/dist/viewer/index.js.gz +0 -0
  102. package/dist/viewer/index.mjs +6 -6
  103. package/dist/viewer/index.mjs.br +0 -0
  104. package/dist/viewer/index.mjs.gz +0 -0
  105. package/package.json +1 -1
  106. package/dist/AiChatPanel-C3E7NLX3.mjs.br +0 -0
  107. package/dist/AiChatPanel-C3E7NLX3.mjs.gz +0 -0
  108. package/dist/AiChatPanel-TKBVSYD2.js.br +0 -0
  109. package/dist/AiChatPanel-TKBVSYD2.js.gz +0 -0
  110. package/dist/Area3DChartScene-3A3CXKN3.js.br +0 -0
  111. package/dist/Area3DChartScene-3A3CXKN3.js.gz +0 -0
  112. package/dist/Area3DChartScene-7YCFWEGX.mjs.br +0 -3
  113. package/dist/Area3DChartScene-7YCFWEGX.mjs.gz +0 -0
  114. package/dist/Bar3DChartScene-7CNSJ35X.mjs.br +0 -0
  115. package/dist/Bar3DChartScene-7CNSJ35X.mjs.gz +0 -0
  116. package/dist/Bar3DChartScene-BDUENAWJ.js.br +0 -0
  117. package/dist/Bar3DChartScene-BDUENAWJ.js.gz +0 -0
  118. package/dist/Line3DChartScene-R352CZ5U.js.br +0 -0
  119. package/dist/Line3DChartScene-R352CZ5U.js.gz +0 -0
  120. package/dist/Line3DChartScene-SMTHK6MD.mjs.br +0 -3
  121. package/dist/Line3DChartScene-SMTHK6MD.mjs.gz +0 -0
  122. package/dist/Model3DScene-AUVJXXPV.mjs.br +0 -0
  123. package/dist/Model3DScene-AUVJXXPV.mjs.gz +0 -0
  124. package/dist/Model3DScene-Y4SGFQYW.js.br +0 -0
  125. package/dist/Model3DScene-Y4SGFQYW.js.gz +0 -0
  126. package/dist/PieChart3DScene-TK2VT4RS.js.br +0 -0
  127. package/dist/PieChart3DScene-TK2VT4RS.js.gz +0 -0
  128. package/dist/PieChart3DScene-UD7GRH55.mjs.br +0 -0
  129. package/dist/PieChart3DScene-UD7GRH55.mjs.gz +0 -0
  130. package/dist/SurfaceChart3DScene-ERFXZW2O.js.br +0 -0
  131. package/dist/SurfaceChart3DScene-ERFXZW2O.js.gz +0 -0
  132. package/dist/SurfaceChart3DScene-TXY6UZSW.mjs.br +0 -0
  133. package/dist/SurfaceChart3DScene-TXY6UZSW.mjs.gz +0 -0
  134. package/dist/chunk-ALO4ZOHQ.js.br +0 -0
  135. package/dist/chunk-ALO4ZOHQ.js.gz +0 -0
  136. package/dist/chunk-ARQGUUYU.js.br +0 -0
  137. package/dist/chunk-ARQGUUYU.js.gz +0 -0
  138. package/dist/chunk-B6UIVRFA.js.br +0 -0
  139. package/dist/chunk-B6UIVRFA.js.gz +0 -0
  140. package/dist/chunk-FJDZ7AEE.js.br +0 -0
  141. package/dist/chunk-FMEEIS6L.mjs.br +0 -0
  142. package/dist/chunk-FMEEIS6L.mjs.gz +0 -0
  143. package/dist/chunk-G7UBIKAG.mjs.br +0 -0
  144. package/dist/chunk-PPNXPEEZ.mjs.br +0 -0
  145. package/dist/chunk-PPNXPEEZ.mjs.gz +0 -0
  146. package/dist/chunk-Q52HT4EZ.js.br +0 -0
  147. package/dist/chunk-Q52HT4EZ.js.gz +0 -0
  148. package/dist/chunk-RHSA5BW5.mjs.br +0 -0
  149. package/dist/chunk-RHSA5BW5.mjs.gz +0 -0
  150. package/dist/chunk-RRAL4Y7V.js.br +0 -0
  151. package/dist/chunk-RRAL4Y7V.js.gz +0 -0
  152. package/dist/chunk-RX6FE24O.mjs.br +0 -0
  153. package/dist/chunk-RX6FE24O.mjs.gz +0 -0
  154. package/dist/chunk-UHR7EYFM.mjs.br +0 -0
  155. package/dist/chunk-UHR7EYFM.mjs.gz +0 -0
Binary file
@@ -1,6 +1,6 @@
1
- import { cloneHistorySnapshot, MIN_ELEMENT_SIZE, ZOOM_TO_SELECTION_PADDING, DEFAULT_CANVAS_HEIGHT, DEFAULT_CANVAS_WIDTH, UNGROUPED_SECTION_ID, DEFAULT_SECTION_GROUP_ID, DEFAULT_TABLE_ROWS, DEFAULT_TABLE_COLUMNS, executeMediaCommand, buildPdfFromImageData, buildNotesPdf, GRID_SIZE, DEFAULT_TEXT_FONT_SIZE } from './chunk-FMEEIS6L.mjs';
2
- import { DEFAULT_VIEWER_OPTIONS, TOOLBAR_TABS, computeVirtualRange, DEFAULT_VIRTUAL_OVERSCAN, createPresenceProjector, BROADCAST_THROTTLE_MS, createSyncGate, clearLocalAwareness, validateRoomId, createDepartureChannel, resolveTransportForServerUrl, isMixedContentBlocked, CONNECTION_TIMEOUT_MS, registerCollaborationTeardown, sanitizeColor, cloneTemplateElementsBySlideId, cloneSlide, createWheelStepBuffer, createViewerZoomStore, clampZoomScale, mapEditingWheel, PresentationAnimationController, 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, createPresenterShowGuard, attachPresentationVisibilityPause, buildMorphTransitionPlan, morphOptionToMode, buildMorphAnimationRules, findInSlides, applyFindReplacements, createCollaborationLivePatcher, publishLiveInlineText, PptxHandler, collectMediaElements, collectImagePaths, collectTableCellImagePaths, applyTableCellImagePatches, collectTableStyleImagePaths, applyTableStyleImagePatches, partitionTemplateElements, resolveAuthoredCustomShowId, buildInitialGuides, EncryptedFileError, resolveAutosaveIntervalMs, shouldWriteAutosaveSnapshot, saveAutosaveSnapshot, autosaveSnapshotMark, updateMasterViewElement, isTemplateElementId, hasShapeProperties, hasTextProperties, getInlineEditorSelection, applyStyleToSelectedSegments, setPendingSelectionRestore, applyCaseTransformToSegments, transformTextCase, masterViewElements, replaceMasterViewElements, addSection, renameSection, deleteSection, moveSectionUp, moveSectionDown, moveSlidesToSection, normalizeColorsForCapture, preprocessCssForCapture, slideProgressPercent, slideStatusLabel, EXPORT_ASSEMBLING_PERCENT, EXPORT_DONE_PERCENT, isExportAbortError, recordProgressPercent, downloadBlob, resolveImageResolutionScale, applyThemeToData, THEME_PRESETS, themeColorSchemesEqual, comparePresentation, applyAcceptSlide, applyAcceptAllSlides, collectUsedFonts, describeFontEmbedding, isMobileViewport, mayLeaveSlideShow, stopAllPersistentAudio, remapTextToSegments, guidePxToEmu, buildSaveSlides, embeddedFontSaveOptions, resolveSlideSizeSelection, saveDeckWithPassword, shouldProbeAutosaveRecovery, probeAutosaveRecovery, acceptAutosaveRecovery, discardAutosaveRecovery, shouldLoopContinuously, applyRehearsalTimings, copyFormatFromElement, applyFormatToElement, collectReferencedFontFamilies, resolveGoogleWebfontHref, mapEditorKey, isEditorTextInputTarget, createViewerOptionsStore, readSlidesFromYDoc, shouldRoomSlidesReplaceLoad, reconcileSlidesInYDoc, LOCAL_SYNC_ORIGIN, observeYDocSlides, shouldAutoFollowBroadcaster, detectTouchDevice, detectOrientation, deriveViewportBreakpoints, createTouchGestureRecognizer, MAX_ZOOM_SCALE, MIN_ZOOM_SCALE, isKeyboardOpen, scopeLayoutOptionsToSlide, openPptxFile, readBackstageRecentFile, isActionHidden, resolveInlineEditAutoFitHeight, canInteractWithElement, filterInteractableIds, beginShapeAdjustment, buildElementClipboardPayload, savedPresentationFileName, exportDeckJson, groupElements, generateElementId, makeCloneId, ungroupElements, alignElements, distributeElements, bringForward, sendBackward, bringToFront, sendToBack, newTableElement, createDefaultChartElement, readViewportMetrics, computeKeyboardInset, mergeShapes, mapPresentationKey, lastShowSlideIndex, firstShowSlideIndex, mapPresentationWheel, openPendingPrintWindow, computeColorFilter, filterHiddenSlideIndices, computeSlideIndices, buildPrintDocument, finishPrintWindow, buildPrintHtmlDocument, buildOutlineHtml, buildSlidesHtml, buildNotesHtml, buildHandoutsHtml, createBlankSlide, makeSlideId, buildSlideTemplateSlide, templateSchemeFromTheme, buildThemeColorMap, reResolveSlideColors, computeEntranceAnimationDelay, createPresentationSessionId, resolveTransitionDurationMs, runPresentationAction, createPresenterTimer, createInitialPresentationSnapshot, mergePresentationSnapshot, resetPresenterTimer, presenterElapsed, stepPresenterZoom, togglePresenterTimer, addCommentToList, removeCommentFromList, editCommentInList, toggleCommentResolvedInList, replyToCommentInList, canvasToJpegData, downloadDataUrl, pickSupportedMimeType, WEBM_MIME_CANDIDATES, fpsToFrameIntervalMs, segmentFrameCount, encodeGif, computeGridSpacingPx, resolveShowSlideIndexes, groupSlidesBySection, masterViewPseudoSlide, resolveHistoryDepth, hasCopyableFormat, createBackstagePresentation, buildFieldSubstitutionContext, cloneElementForPaste, computeScrollDelta, getPresetShapeClipPath, svgPathToPolygons, polygonsToSvgPath, rerouteConnectorsForMovedElements, applyReroutedConnectors, SvgExporter, deleteTableColumn, rebuildTableStructureInRawXml, insertTableColumn, deleteTableRow, insertTableRow, updateCellTextStyleInRawXml, setCellText, updateCellTextInRawXml, splitCell, updateMergeAttrsInRawXml, mergeCells, isPpactionUrl, parsePpactionUrl, resolvePresentationAction, ACTION_BUTTON_PRESETS, elementActionToPptxAction, isUrlSafe, buildSmartArtPresetData, classifyMediaType, computeSnapToShape, publishLiveGeometry, getDraggedShapeAdjustments, computeMarqueeHitIds, mergeAdditiveSelection, shouldConfirmExternalHyperlink, safeOpenUrl, applyResize, snapBoxToGrid, applyMotionPathPreset } from './chunk-G7UBIKAG.mjs';
3
- import { translationsEn } from './chunk-RHSA5BW5.mjs';
1
+ import { cloneHistorySnapshot, MIN_ELEMENT_SIZE, ZOOM_TO_SELECTION_PADDING, DEFAULT_CANVAS_HEIGHT, DEFAULT_CANVAS_WIDTH, UNGROUPED_SECTION_ID, DEFAULT_SECTION_GROUP_ID, DEFAULT_TABLE_ROWS, DEFAULT_TABLE_COLUMNS, buildPdfFromImageData, buildNotesPdf, GRID_SIZE, DEFAULT_TEXT_FONT_SIZE } from './chunk-ITN5NYYM.mjs';
2
+ import { DEFAULT_VIEWER_OPTIONS, TOOLBAR_TABS, computeVirtualRange, DEFAULT_VIRTUAL_OVERSCAN, createPresenceProjector, BROADCAST_THROTTLE_MS, createSyncGate, clearLocalAwareness, validateRoomId, createDepartureChannel, resolveTransportForServerUrl, isMixedContentBlocked, CONNECTION_TIMEOUT_MS, registerCollaborationTeardown, sanitizeColor, cloneTemplateElementsBySlideId, cloneSlide, createWheelStepBuffer, createViewerZoomStore, clampZoomScale, mapEditingWheel, cancelBuildReveal, PresentationAnimationController, scheduleAutoAdvanceChain, playGroup, 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, createPresenterShowGuard, attachPresentationVisibilityPause, buildMorphTransitionPlan, morphOptionToMode, buildMorphAnimationRules, findInSlides, applyFindReplacements, createCollaborationLivePatcher, publishLiveInlineText, PptxHandler, collectMediaElements, collectImagePaths, applyImagePathPatches, resolveTableCellImageUrls, resolveTableStyleImageUrls, partitionTemplateElements, resolveAuthoredCustomShowId, buildInitialGuides, EncryptedFileError, resolveAutosaveIntervalMs, shouldWriteAutosaveSnapshot, saveAutosaveSnapshot, autosaveSnapshotMark, updateMasterViewElement, isTemplateElementId, updateElement, hasShapeProperties, hasTextProperties, getInlineEditorSelection, applyStyleToSelectedSegments, setPendingSelectionRestore, applyCaseTransformToSegments, transformTextCase, masterViewElements, replaceMasterViewElements, addSection, renameSection, deleteSection, moveSectionUp, moveSectionDown, moveSlidesToSection, normalizeColorsForCapture, preprocessCssForCapture, slideProgressPercent, slideStatusLabel, EXPORT_ASSEMBLING_PERCENT, EXPORT_DONE_PERCENT, isExportAbortError, recordProgressPercent, downloadBlob, resolveImageResolutionScale, applyThemeToData, THEME_PRESETS, themeColorSchemesEqual, comparePresentation, applyAcceptSlide, applyAcceptAllSlides, collectUsedFonts, describeFontEmbedding, isMobileViewport, mayLeaveSlideShow, stopAllPersistentAudio, remapTextToSegments, guidePxToEmu, buildSaveSlides, embeddedFontSaveOptions, resolveSlideSizeSelection, saveDeckWithPassword, shouldProbeAutosaveRecovery, probeAutosaveRecovery, acceptAutosaveRecovery, discardAutosaveRecovery, shouldLoopContinuously, applyRehearsalTimings, copyFormatFromElement, applyFormatToElement, collectReferencedFontFamilies, resolveGoogleWebfontHref, mapEditorKey, isEditorTextInputTarget, createViewerOptionsStore, readSlidesFromYDoc, shouldRoomSlidesReplaceLoad, reconcileSlidesInYDoc, LOCAL_SYNC_ORIGIN, observeYDocSlides, shouldAutoFollowBroadcaster, detectTouchDevice, detectOrientation, deriveViewportBreakpoints, createTouchGestureRecognizer, MAX_ZOOM_SCALE, MIN_ZOOM_SCALE, isKeyboardOpen, scopeLayoutOptionsToSlide, openPptxFile, readBackstageRecentFile, isActionHidden, resolveInlineEditAutoFitHeight, canInteractWithElement, filterInteractableIds, beginShapeAdjustment, buildElementClipboardPayload, savedPresentationFileName, exportDeckJson, groupElements, generateElementId, makeCloneId, ungroupElements, alignElements, distributeElements, bringForward, sendBackward, bringToFront, sendToBack, newTableElement, createDefaultChartElement, readViewportMetrics, computeKeyboardInset, mergeShapes, mapPresentationKey, lastShowSlideIndex, firstShowSlideIndex, mapPresentationWheel, openPendingPrintWindow, computeColorFilter, filterHiddenSlideIndices, computeSlideIndices, buildPrintDocument, finishPrintWindow, buildPrintHtmlDocument, buildOutlineHtml, buildSlidesHtml, buildNotesHtml, buildHandoutsHtml, createBlankSlide, makeSlideId, buildSlideTemplateSlide, templateSchemeFromTheme, buildThemeColorMap, reResolveSlideColors, computeEntranceAnimationDelay, createPresentationSessionId, resolveTransitionDurationMs, runPresentationAction, createPresenterTimer, createInitialPresentationSnapshot, mergePresentationSnapshot, resetPresenterTimer, presenterElapsed, stepPresenterZoom, togglePresenterTimer, addCommentToList, removeCommentFromList, editCommentInList, toggleCommentResolvedInList, replyToCommentInList, canvasToJpegData, downloadDataUrl, pickSupportedMimeType, WEBM_MIME_CANDIDATES, fpsToFrameIntervalMs, segmentFrameCount, encodeGif, computeGridSpacingPx, resolveShowSlideIndexes, groupSlidesBySection, masterViewPseudoSlide, resolveHistoryDepth, hasCopyableFormat, createBackstagePresentation, buildFieldSubstitutionContext, cloneElementForPaste, computeScrollDelta, getPresetShapeClipPath, svgPathToPolygons, polygonsToSvgPath, rerouteConnectorsForMovedElements, applyReroutedConnectors, SvgExporter, deleteTableColumn, rebuildTableStructureInRawXml, insertTableColumn, deleteTableRow, insertTableRow, updateCellTextStyleInRawXml, setCellText, updateCellTextInRawXml, splitCell, updateMergeAttrsInRawXml, mergeCells, isPpactionUrl, parsePpactionUrl, resolvePresentationAction, ACTION_BUTTON_PRESETS, elementActionToPptxAction, isUrlSafe, buildSmartArtPresetData, classifyMediaType, computeSnapToShape, publishLiveGeometry, getDraggedShapeAdjustments, computeMarqueeHitIds, mergeAdditiveSelection, shouldConfirmExternalHyperlink, safeOpenUrl, applyResize, lockResizeAspect, snapBoxToGrid, applyMotionPathPreset } from './chunk-DM2IZCSD.mjs';
3
+ import { translationsEn } from './chunk-AMRT3AE4.mjs';
4
4
  import { createContext, useRef, useState, useEffect, useCallback, useMemo, useLayoutEffect, useContext, useImperativeHandle, useSyncExternalStore } from 'react';
5
5
  import { useTranslation } from 'react-i18next';
6
6
 
@@ -969,67 +969,6 @@ function stopAnimationSound() {
969
969
  }
970
970
 
971
971
  // src/viewer/hooks/presentation-mode/animation-helpers.ts
972
- function applyAnimationGroupSteps(group, onPlayActionSound, setPresentationElementStates, presentationTimersRef) {
973
- for (const step of group.steps) {
974
- if (step.command) {
975
- const command = step.command;
976
- const timer = window.setTimeout(
977
- () => {
978
- executeMediaCommand(command);
979
- },
980
- Math.max(0, step.delayMs)
981
- );
982
- presentationTimersRef.current.push(timer);
983
- continue;
984
- }
985
- if (step.stopSound) {
986
- stopAnimationSound();
987
- } else if (step.soundPath && onPlayActionSound) {
988
- onPlayActionSound(step.soundPath);
989
- }
990
- }
991
- setPresentationElementStates((previousStates) => {
992
- const nextStates = new Map(previousStates);
993
- for (const step of group.steps) {
994
- if (step.command) {
995
- continue;
996
- }
997
- const currentState = nextStates.get(step.elementId) ?? {
998
- visible: true};
999
- const shouldBeVisible = step.presetClass === "exit" ? currentState.visible : true;
1000
- const colorTargets = step.colorTargets;
1001
- nextStates.set(step.elementId, {
1002
- visible: shouldBeVisible,
1003
- cssAnimation: step.cssAnimation,
1004
- animatesFill: colorTargets?.includes("fill") ? true : void 0,
1005
- animatesStroke: colorTargets?.includes("stroke") ? true : void 0
1006
- });
1007
- }
1008
- return nextStates;
1009
- });
1010
- for (const step of group.steps) {
1011
- if (step.command) {
1012
- continue;
1013
- }
1014
- const timer = window.setTimeout(
1015
- () => {
1016
- setPresentationElementStates((previousStates) => {
1017
- const nextStates = new Map(previousStates);
1018
- const currentState = nextStates.get(step.elementId) ?? {
1019
- visible: true};
1020
- const visibleAfterStep = step.presetClass === "exit" || step.hideAfterEffect ? false : currentState.visible;
1021
- nextStates.set(step.elementId, {
1022
- visible: visibleAfterStep,
1023
- cssAnimation: step.holdEndState ? step.cssAnimation : void 0
1024
- });
1025
- return nextStates;
1026
- });
1027
- },
1028
- Math.max(0, step.delayMs + step.durationMs + 8)
1029
- );
1030
- presentationTimersRef.current.push(timer);
1031
- }
1032
- }
1033
972
  function shouldSeekAnimationGroup(group, endAtMs, nowMs) {
1034
973
  return group?.seqNextAction === "seek" && nowMs < endAtMs;
1035
974
  }
@@ -1102,49 +1041,8 @@ function finishAnimationGroupSteps(group, setPresentationElementStates, complete
1102
1041
  });
1103
1042
  }
1104
1043
 
1105
- // src/viewer/hooks/presentation-mode/build-playback.ts
1106
- function cancelBuildReveal(handle) {
1107
- if (handle.current !== null) {
1108
- cancelAnimationFrame(handle.current);
1109
- handle.current = null;
1110
- }
1111
- }
1112
- function driveBuildReveal(controller, buildIds, setStates, handle) {
1113
- cancelBuildReveal(handle);
1114
- if (buildIds.length === 0 || typeof requestAnimationFrame !== "function") {
1115
- return;
1116
- }
1117
- const start = performance.now();
1118
- const tick = () => {
1119
- const elapsedMs = performance.now() - start;
1120
- const states = controller.computeStatesFor(buildIds, { elapsedMs });
1121
- setStates((prev) => {
1122
- const next = new Map(prev);
1123
- for (const id of buildIds) {
1124
- const build = states.get(id)?.build;
1125
- if (!build) {
1126
- continue;
1127
- }
1128
- const existing = next.get(id) ?? { visible: true, cssAnimation: void 0 };
1129
- next.set(id, { ...existing, build });
1130
- }
1131
- return next;
1132
- });
1133
- let pending = false;
1134
- for (const id of buildIds) {
1135
- const build = states.get(id)?.build;
1136
- if (build && build.progress < 1) {
1137
- pending = true;
1138
- break;
1139
- }
1140
- }
1141
- handle.current = pending ? requestAnimationFrame(tick) : null;
1142
- };
1143
- tick();
1144
- }
1145
-
1146
1044
  // src/viewer/hooks/presentation-mode/entrance-animation-timers.ts
1147
- function scheduleOpeningAutoPlayGroup(controller, deps) {
1045
+ function scheduleOpeningAutoPlayGroup(controller, ctx) {
1148
1046
  if (!controller.hasMoreSteps()) {
1149
1047
  return;
1150
1048
  }
@@ -1157,17 +1055,10 @@ function scheduleOpeningAutoPlayGroup(controller, deps) {
1157
1055
  if (!group) {
1158
1056
  return;
1159
1057
  }
1160
- applyAnimationGroupSteps(
1161
- group,
1162
- deps.onPlayActionSound,
1163
- deps.setPresentationElementStates,
1164
- deps.presentationTimersRef
1165
- );
1166
- deps.markAnimationGroupActive(group);
1167
- deps.startBuildReveal(controller, group);
1168
- deps.scheduleAutoAdvanceChain(controller);
1058
+ playGroup(controller, group, ctx);
1059
+ scheduleAutoAdvanceChain(controller, ctx);
1169
1060
  }, firstGroup.autoAdvanceDelayMs ?? 0);
1170
- deps.presentationTimersRef.current.push(timer);
1061
+ ctx.timers.push(timer);
1171
1062
  }
1172
1063
  function scheduleEntranceAnimationTimers(slide, setPresentationAnimations, presentationTimersRef) {
1173
1064
  const entranceAnimations = [...slide.animations || []].filter((animation) => Boolean(animation.entrance)).sort(
@@ -1214,17 +1105,16 @@ function useAnimationPlayback(input) {
1214
1105
  const activeAnimationEndAtRef = useRef(0);
1215
1106
  const seededCompletedRef = useRef(false);
1216
1107
  const lastSeedCompletedRef = useRef(false);
1217
- const startBuildReveal = useCallback(
1218
- (controller, group) => {
1219
- driveBuildReveal(
1220
- controller,
1221
- PresentationAnimationController.collectBuildStepIds(group),
1222
- setPresentationElementStates,
1223
- buildRafRef
1224
- );
1225
- },
1226
- []
1227
- );
1108
+ const buildPlaybackContext = useCallback(() => {
1109
+ return {
1110
+ setStates: setPresentationElementStates,
1111
+ timers: presentationTimersRef.current,
1112
+ buildHandle: buildRafRef,
1113
+ onPlayActionSound,
1114
+ playSound: playAnimationSound,
1115
+ stopSound: stopAnimationSound
1116
+ };
1117
+ }, [onPlayActionSound]);
1228
1118
  useEffect(() => {
1229
1119
  return () => {
1230
1120
  cancelBuildReveal(buildRafRef);
@@ -1243,45 +1133,6 @@ function useAnimationPlayback(input) {
1243
1133
  activeAnimationGroupRef.current = group;
1244
1134
  activeAnimationEndAtRef.current = performance.now() + Math.max(0, group.totalDurationMs);
1245
1135
  }, []);
1246
- const scheduleAutoAdvanceChain = useCallback(
1247
- (controller) => {
1248
- if (!controller.shouldAutoAdvance()) {
1249
- return;
1250
- }
1251
- const delay = controller.getAutoAdvanceDelay();
1252
- const previousGroup = controller.peekNext();
1253
- if (!previousGroup) {
1254
- return;
1255
- }
1256
- const totalDelay = delay + (previousGroup.autoAdvanceDelayMs ?? 0);
1257
- const timer = window.setTimeout(
1258
- () => {
1259
- const group = controller.advance();
1260
- if (!group) {
1261
- return;
1262
- }
1263
- applyAnimationGroupSteps(
1264
- group,
1265
- onPlayActionSound,
1266
- setPresentationElementStates,
1267
- presentationTimersRef
1268
- );
1269
- markAnimationGroupActive(group);
1270
- startBuildReveal(controller, group);
1271
- scheduleAutoAdvanceChain(controller);
1272
- },
1273
- Math.max(0, totalDelay)
1274
- );
1275
- presentationTimersRef.current.push(timer);
1276
- },
1277
- // `scheduleAutoAdvanceChain` recursively calls itself (line 190) to walk the
1278
- // auto-advance chain; it can't list itself as its own dependency (the const
1279
- // isn't assigned yet when the array is evaluated). The recursive call still
1280
- // resolves correctly because the setTimeout callback only reads the binding
1281
- // once the outer const has been assigned.
1282
- // oxlint-disable-next-line react/memo-dependencies -- see comment above
1283
- [markAnimationGroupActive, onPlayActionSound, startBuildReveal]
1284
- );
1285
1136
  const resetSlideTimeline = useCallback(
1286
1137
  (slideIndex) => {
1287
1138
  cancelBuildReveal(buildRafRef);
@@ -1315,7 +1166,7 @@ function useAnimationPlayback(input) {
1315
1166
  const completedStates = controller.computeStatesFor(buildIds);
1316
1167
  clearPresentationTimers();
1317
1168
  finishAnimationGroupSteps(activeGroup, setPresentationElementStates, completedStates);
1318
- scheduleAutoAdvanceChain(controller);
1169
+ scheduleAutoAdvanceChain(controller, buildPlaybackContext());
1319
1170
  return true;
1320
1171
  }
1321
1172
  if (!controller || !controller.hasMoreSteps()) {
@@ -1325,24 +1176,12 @@ function useAnimationPlayback(input) {
1325
1176
  if (!group) {
1326
1177
  return false;
1327
1178
  }
1328
- applyAnimationGroupSteps(
1329
- group,
1330
- onPlayActionSound,
1331
- setPresentationElementStates,
1332
- presentationTimersRef
1333
- );
1179
+ const ctx = buildPlaybackContext();
1180
+ playGroup(controller, group, ctx);
1334
1181
  markAnimationGroupActive(group);
1335
- startBuildReveal(controller, group);
1336
- scheduleAutoAdvanceChain(controller);
1182
+ scheduleAutoAdvanceChain(controller, ctx);
1337
1183
  return true;
1338
- }, [
1339
- animationsEnabled,
1340
- clearPresentationTimers,
1341
- markAnimationGroupActive,
1342
- onPlayActionSound,
1343
- scheduleAutoAdvanceChain,
1344
- startBuildReveal
1345
- ]);
1184
+ }, [animationsEnabled, buildPlaybackContext, clearPresentationTimers, markAnimationGroupActive]);
1346
1185
  const handleInteractiveShapeClick = useCallback(
1347
1186
  (shapeId) => {
1348
1187
  const controller = controllerRef.current;
@@ -1353,16 +1192,10 @@ function useAnimationPlayback(input) {
1353
1192
  if (!group) {
1354
1193
  return false;
1355
1194
  }
1356
- applyAnimationGroupSteps(
1357
- group,
1358
- onPlayActionSound,
1359
- setPresentationElementStates,
1360
- presentationTimersRef
1361
- );
1362
- startBuildReveal(controller, group);
1195
+ playGroup(controller, group, buildPlaybackContext());
1363
1196
  return true;
1364
1197
  },
1365
- [onPlayActionSound, startBuildReveal]
1198
+ [buildPlaybackContext]
1366
1199
  );
1367
1200
  const handleHoverStart = useCallback(
1368
1201
  (shapeId) => {
@@ -1378,16 +1211,10 @@ function useAnimationPlayback(input) {
1378
1211
  if (!group) {
1379
1212
  return false;
1380
1213
  }
1381
- applyAnimationGroupSteps(
1382
- group,
1383
- onPlayActionSound,
1384
- setPresentationElementStates,
1385
- presentationTimersRef
1386
- );
1387
- startBuildReveal(controller, group);
1214
+ playGroup(controller, group, buildPlaybackContext());
1388
1215
  return true;
1389
1216
  },
1390
- [animationsEnabled, onPlayActionSound, startBuildReveal]
1217
+ [animationsEnabled, buildPlaybackContext]
1391
1218
  );
1392
1219
  const handleHoverEnd = useCallback((shapeId) => {
1393
1220
  const controller = controllerRef.current;
@@ -1433,25 +1260,12 @@ function useAnimationPlayback(input) {
1433
1260
  }
1434
1261
  const controller = controllerRef.current;
1435
1262
  if (controller) {
1436
- scheduleOpeningAutoPlayGroup(controller, {
1437
- onPlayActionSound,
1438
- setPresentationElementStates,
1439
- presentationTimersRef,
1440
- startBuildReveal,
1441
- scheduleAutoAdvanceChain,
1442
- markAnimationGroupActive
1443
- });
1263
+ const ctx = buildPlaybackContext();
1264
+ scheduleOpeningAutoPlayGroup(controller, ctx);
1444
1265
  }
1445
1266
  scheduleEntranceAnimationTimers(slide, setPresentationAnimations, presentationTimersRef);
1446
1267
  },
1447
- [
1448
- animationsEnabled,
1449
- slides,
1450
- onPlayActionSound,
1451
- markAnimationGroupActive,
1452
- scheduleAutoAdvanceChain,
1453
- startBuildReveal
1454
- ]
1268
+ [animationsEnabled, slides, buildPlaybackContext]
1455
1269
  );
1456
1270
  const runPresentationEntranceAnimations = useCallback(
1457
1271
  (slideIndex, options) => {
@@ -3992,93 +3806,19 @@ function useLoadContent({
3992
3806
  }
3993
3807
  })
3994
3808
  );
3995
- const elementPatches = /* @__PURE__ */ new Map();
3996
- for (const ref of imageRefs) {
3997
- const url = resolvedMap.get(ref.path);
3998
- if (!url) {
3999
- continue;
4000
- }
4001
- const id = ref.element.id;
4002
- const existing = elementPatches.get(id) ?? {};
4003
- existing[ref.field] = url;
4004
- elementPatches.set(id, existing);
4005
- }
4006
- if (elementPatches.size > 0) {
4007
- const patchElements = (elements) => {
4008
- let mutated = false;
4009
- const next = elements.map((el) => {
4010
- let updated = el;
4011
- const patch = elementPatches.get(el.id);
4012
- if (patch) {
4013
- updated = { ...el, ...patch };
4014
- }
4015
- if (updated.type === "group" && updated.children?.length) {
4016
- const newChildren = patchElements(updated.children);
4017
- if (newChildren !== updated.children) {
4018
- updated = { ...updated, children: newChildren };
4019
- }
4020
- }
4021
- if (updated !== el) {
4022
- mutated = true;
4023
- }
4024
- return updated;
4025
- });
4026
- return mutated ? next : elements;
4027
- };
4028
- nextSlides = parsed.slides.map((s) => {
4029
- const newElements = patchElements(s.elements);
4030
- return newElements === s.elements ? s : { ...s, elements: newElements };
4031
- });
4032
- }
4033
- }
4034
- const { paths: tableImagePaths, refs: tableImageRefs } = collectTableCellImagePaths(nextSlides);
4035
- if (tableImagePaths.size > 0) {
4036
- const resolvedTableMap = /* @__PURE__ */ new Map();
4037
- await Promise.all(
4038
- Array.from(tableImagePaths).map(async (path) => {
4039
- try {
4040
- const url = await handler.getImageData(path);
4041
- if (url) {
4042
- resolvedTableMap.set(path, url);
4043
- }
4044
- } catch {
4045
- }
4046
- })
4047
- );
4048
- if (resolvedTableMap.size > 0) {
4049
- nextSlides = nextSlides.map((s) => {
4050
- const newElements = applyTableCellImagePatches(
4051
- s.elements,
4052
- resolvedTableMap,
4053
- tableImageRefs
4054
- );
4055
- return newElements === s.elements ? s : { ...s, elements: newElements };
4056
- });
4057
- }
4058
- }
4059
- let nextTableStyleMap = parsed.tableStyleMap;
4060
- const { paths: tableStyleImagePaths, refs: tableStyleImageRefs } = collectTableStyleImagePaths(nextTableStyleMap);
4061
- if (tableStyleImagePaths.size > 0) {
4062
- const resolvedStyleMap = /* @__PURE__ */ new Map();
4063
- await Promise.all(
4064
- Array.from(tableStyleImagePaths).map(async (path) => {
4065
- try {
4066
- const url = await handler.getImageData(path);
4067
- if (url) {
4068
- resolvedStyleMap.set(path, url);
4069
- }
4070
- } catch {
4071
- }
4072
- })
4073
- );
4074
- if (resolvedStyleMap.size > 0 && nextTableStyleMap) {
4075
- nextTableStyleMap = applyTableStyleImagePatches(
4076
- nextTableStyleMap,
4077
- resolvedStyleMap,
4078
- tableStyleImageRefs
4079
- );
4080
- }
3809
+ nextSlides = parsed.slides.map((s) => {
3810
+ const newElements = applyImagePathPatches(s.elements, resolvedMap, imageRefs);
3811
+ return newElements === s.elements ? s : { ...s, elements: newElements };
3812
+ });
4081
3813
  }
3814
+ nextSlides = await resolveTableCellImageUrls(
3815
+ nextSlides,
3816
+ (path) => handler.getImageData(path)
3817
+ );
3818
+ const nextTableStyleMap = await resolveTableStyleImageUrls(
3819
+ parsed.tableStyleMap,
3820
+ (path) => handler.getImageData(path)
3821
+ );
4082
3822
  handlerRef.current = handler;
4083
3823
  const partition = partitionTemplateElements(nextSlides);
4084
3824
  setSlides(partition.slides);
@@ -4312,19 +4052,7 @@ function useElementOperations(input) {
4312
4052
  }));
4313
4053
  }
4314
4054
  } else {
4315
- setSlides(
4316
- (prev) => prev.map(
4317
- (s, i) => i !== activeSlideIndex ? s : {
4318
- ...s,
4319
- elements: s.elements.map(
4320
- (el) => el.id === elementId ? {
4321
- ...el,
4322
- ...updates
4323
- } : el
4324
- )
4325
- }
4326
- )
4327
- );
4055
+ setSlides((prev) => updateElement(prev, activeSlideIndex, elementId, updates));
4328
4056
  }
4329
4057
  history.markDirty();
4330
4058
  },
@@ -4555,15 +4283,12 @@ function useSectionOperations(input) {
4555
4283
  }
4556
4284
 
4557
4285
  // src/viewer/hooks/pointer-move-handlers.ts
4558
- function computeResizeGeometry(handle, startX, startY, startWidth, startHeight, dx, dy, snapToGrid, gridSpacingPx) {
4559
- const resized = applyResize(
4560
- { x: startX, y: startY, width: startWidth, height: startHeight },
4561
- handle,
4562
- dx,
4563
- dy,
4564
- 1,
4565
- { minSize: MIN_ELEMENT_SIZE }
4566
- );
4286
+ function computeResizeGeometry(handle, startX, startY, startWidth, startHeight, dx, dy, snapToGrid, gridSpacingPx, lockAspect = false) {
4287
+ const startBox = { x: startX, y: startY, width: startWidth, height: startHeight };
4288
+ let resized = applyResize(startBox, handle, dx, dy, 1, { minSize: MIN_ELEMENT_SIZE });
4289
+ if (lockAspect) {
4290
+ resized = lockResizeAspect(resized, startBox, handle, MIN_ELEMENT_SIZE);
4291
+ }
4567
4292
  const box = { x: resized.x, y: resized.y, width: resized.width, height: resized.height };
4568
4293
  if (!snapToGrid) {
4569
4294
  return box;
@@ -4745,7 +4470,8 @@ function processResizeMove(e, rs, editorScale, snapToGrid, gridSpacingPx, live)
4745
4470
  dx,
4746
4471
  dy,
4747
4472
  snapToGrid,
4748
- gridSpacingPx
4473
+ gridSpacingPx,
4474
+ e.shiftKey
4749
4475
  );
4750
4476
  rs.lastX = geo.x;
4751
4477
  rs.lastY = geo.y;
Binary file
Binary file