pptx-react-viewer 3.5.3 → 3.6.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 +12 -0
  2. package/dist/{AiChatPanel-ZEM3ZVA6.js → AiChatPanel-LEOEDIW2.js} +25 -25
  3. package/dist/AiChatPanel-LEOEDIW2.js.br +0 -0
  4. package/dist/AiChatPanel-LEOEDIW2.js.gz +0 -0
  5. package/dist/{AiChatPanel-L2HGGEND.mjs → AiChatPanel-WRQGJJVD.mjs} +4 -4
  6. package/dist/AiChatPanel-WRQGJJVD.mjs.br +0 -0
  7. package/dist/AiChatPanel-WRQGJJVD.mjs.gz +0 -0
  8. package/dist/{Area3DChartScene-I7LMTNK5.js → Area3DChartScene-3TJ2GTGI.js} +2 -2
  9. package/dist/Area3DChartScene-3TJ2GTGI.js.br +0 -0
  10. package/dist/Area3DChartScene-3TJ2GTGI.js.gz +0 -0
  11. package/dist/{Area3DChartScene-EYNCHRB3.mjs → Area3DChartScene-SJC2ZB6R.mjs} +1 -1
  12. package/dist/{Line3DChartScene-QYBKXNOD.mjs.br → Area3DChartScene-SJC2ZB6R.mjs.br} +1 -1
  13. package/dist/Area3DChartScene-SJC2ZB6R.mjs.gz +0 -0
  14. package/dist/{Bar3DChartScene-VPKQDPIO.js → Bar3DChartScene-2ZGOMOZO.js} +2 -2
  15. package/dist/Bar3DChartScene-2ZGOMOZO.js.br +0 -0
  16. package/dist/Bar3DChartScene-2ZGOMOZO.js.gz +0 -0
  17. package/dist/{Bar3DChartScene-6HQ6QWNB.mjs → Bar3DChartScene-SPER4LQA.mjs} +1 -1
  18. package/dist/{Bar3DChartScene-6HQ6QWNB.mjs.br → Bar3DChartScene-SPER4LQA.mjs.br} +0 -0
  19. package/dist/Bar3DChartScene-SPER4LQA.mjs.gz +0 -0
  20. package/dist/{Line3DChartScene-VV362RMX.js → Line3DChartScene-42FYFGLU.js} +2 -2
  21. package/dist/Line3DChartScene-42FYFGLU.js.br +0 -0
  22. package/dist/Line3DChartScene-42FYFGLU.js.gz +0 -0
  23. package/dist/{Line3DChartScene-QYBKXNOD.mjs → Line3DChartScene-FH3YHPXE.mjs} +1 -1
  24. package/dist/{Area3DChartScene-EYNCHRB3.mjs.br → Line3DChartScene-FH3YHPXE.mjs.br} +1 -1
  25. package/dist/Line3DChartScene-FH3YHPXE.mjs.gz +0 -0
  26. package/dist/{Model3DScene-YTLWTG52.mjs → Model3DScene-2BCR2YYD.mjs} +1 -1
  27. package/dist/{Model3DScene-YTLWTG52.mjs.br → Model3DScene-2BCR2YYD.mjs.br} +0 -0
  28. package/dist/Model3DScene-2BCR2YYD.mjs.gz +0 -0
  29. package/dist/{Model3DScene-XA57KXA5.js → Model3DScene-EIU2GVUZ.js} +2 -2
  30. package/dist/Model3DScene-EIU2GVUZ.js.br +0 -0
  31. package/dist/Model3DScene-EIU2GVUZ.js.gz +0 -0
  32. package/dist/{PieChart3DScene-INBL4F5Z.mjs → PieChart3DScene-QFQUJFDP.mjs} +1 -1
  33. package/dist/{PieChart3DScene-INBL4F5Z.mjs.br → PieChart3DScene-QFQUJFDP.mjs.br} +0 -0
  34. package/dist/PieChart3DScene-QFQUJFDP.mjs.gz +0 -0
  35. package/dist/{PieChart3DScene-IFZMTN5H.js → PieChart3DScene-VQOHZPHI.js} +2 -2
  36. package/dist/PieChart3DScene-VQOHZPHI.js.br +0 -0
  37. package/dist/PieChart3DScene-VQOHZPHI.js.gz +0 -0
  38. package/dist/{SurfaceChart3DScene-EV6DBPJS.mjs → SurfaceChart3DScene-CGXMRBCL.mjs} +1 -1
  39. package/dist/{SurfaceChart3DScene-EV6DBPJS.mjs.br → SurfaceChart3DScene-CGXMRBCL.mjs.br} +0 -0
  40. package/dist/SurfaceChart3DScene-CGXMRBCL.mjs.gz +0 -0
  41. package/dist/{SurfaceChart3DScene-FRSZVIVB.js → SurfaceChart3DScene-FTVXZN6O.js} +2 -2
  42. package/dist/SurfaceChart3DScene-FTVXZN6O.js.br +0 -0
  43. package/dist/SurfaceChart3DScene-FTVXZN6O.js.gz +0 -0
  44. package/dist/{chunk-QA573RUB.js → chunk-7VPDHSWF.js} +330 -349
  45. package/dist/chunk-7VPDHSWF.js.br +0 -0
  46. package/dist/chunk-7VPDHSWF.js.gz +0 -0
  47. package/dist/{chunk-HHDPQJF3.js → chunk-AL2KLPOJ.js} +32437 -22179
  48. package/dist/chunk-AL2KLPOJ.js.br +0 -0
  49. package/dist/chunk-AL2KLPOJ.js.gz +0 -0
  50. package/dist/{chunk-7AL6KAFX.mjs → chunk-FG5VQFWP.mjs} +193 -71
  51. package/dist/chunk-FG5VQFWP.mjs.br +0 -0
  52. package/dist/chunk-FG5VQFWP.mjs.gz +0 -0
  53. package/dist/{chunk-UTIMT5CZ.js → chunk-MZI4DG3S.js} +12 -0
  54. package/dist/chunk-MZI4DG3S.js.br +0 -0
  55. package/dist/{chunk-UTIMT5CZ.js.gz → chunk-MZI4DG3S.js.gz} +0 -0
  56. package/dist/{chunk-PPL3WBC7.js → chunk-NFOOONND.js} +1359 -1237
  57. package/dist/chunk-NFOOONND.js.br +0 -0
  58. package/dist/chunk-NFOOONND.js.gz +0 -0
  59. package/dist/{chunk-MSRRBA7G.mjs → chunk-T3V5FBXJ.mjs} +29 -1
  60. package/dist/chunk-T3V5FBXJ.mjs.br +0 -0
  61. package/dist/chunk-T3V5FBXJ.mjs.gz +0 -0
  62. package/dist/{chunk-JCJ3EPG6.mjs → chunk-TGCSZXOG.mjs} +12 -0
  63. package/dist/chunk-TGCSZXOG.mjs.br +0 -0
  64. package/dist/{chunk-JCJ3EPG6.mjs.gz → chunk-TGCSZXOG.mjs.gz} +0 -0
  65. package/dist/{chunk-3WM5TUY7.mjs → chunk-VYNICQ4O.mjs} +58 -37
  66. package/dist/chunk-VYNICQ4O.mjs.br +0 -0
  67. package/dist/chunk-VYNICQ4O.mjs.gz +0 -0
  68. package/dist/{chunk-KOLCCOTS.mjs → chunk-WX7AFFBZ.mjs} +142 -161
  69. package/dist/chunk-WX7AFFBZ.mjs.br +0 -0
  70. package/dist/chunk-WX7AFFBZ.mjs.gz +0 -0
  71. package/dist/{chunk-SIM2LXO2.js → chunk-ZHSBMG37.js} +490 -469
  72. package/dist/chunk-ZHSBMG37.js.br +0 -0
  73. package/dist/chunk-ZHSBMG37.js.gz +0 -0
  74. package/dist/{chunk-QPHGHUUJ.mjs → chunk-ZUSYUWOV.mjs} +32414 -22179
  75. package/dist/chunk-ZUSYUWOV.mjs.br +0 -0
  76. package/dist/chunk-ZUSYUWOV.mjs.gz +0 -0
  77. package/dist/{chunk-BBSFZLYI.js → chunk-ZWPHUPL4.js} +33 -5
  78. package/dist/chunk-ZWPHUPL4.js.br +0 -0
  79. package/dist/chunk-ZWPHUPL4.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.d.ts +599 -33
  87. package/dist/index.js +47 -47
  88. package/dist/index.js.br +0 -0
  89. package/dist/index.js.gz +0 -0
  90. package/dist/index.mjs +6 -6
  91. package/dist/index.mjs.br +0 -0
  92. package/dist/index.mjs.gz +0 -0
  93. package/dist/internals.d.ts +610 -33
  94. package/dist/internals.d.ts.map +1 -1
  95. package/dist/internals.js +79 -79
  96. package/dist/internals.js.br +0 -0
  97. package/dist/internals.js.gz +0 -0
  98. package/dist/internals.mjs +4 -4
  99. package/dist/internals.mjs.br +0 -0
  100. package/dist/internals.mjs.gz +0 -0
  101. package/dist/{useViewerBuildingBlocks-f6oNGKMX.d.ts → useViewerBuildingBlocks-C8F_4Pzb.d.ts} +3 -1
  102. package/dist/useViewerBuildingBlocks-C8F_4Pzb.d.ts.map +1 -0
  103. package/dist/viewer/index.d.ts +552 -33
  104. package/dist/viewer/index.js +27 -27
  105. package/dist/viewer/index.js.br +0 -0
  106. package/dist/viewer/index.js.gz +0 -0
  107. package/dist/viewer/index.mjs +6 -6
  108. package/dist/viewer/index.mjs.br +0 -0
  109. package/dist/viewer/index.mjs.gz +0 -0
  110. package/package.json +1 -1
  111. package/dist/AiChatPanel-L2HGGEND.mjs.br +0 -0
  112. package/dist/AiChatPanel-L2HGGEND.mjs.gz +0 -0
  113. package/dist/AiChatPanel-ZEM3ZVA6.js.br +0 -0
  114. package/dist/AiChatPanel-ZEM3ZVA6.js.gz +0 -0
  115. package/dist/Area3DChartScene-EYNCHRB3.mjs.gz +0 -0
  116. package/dist/Area3DChartScene-I7LMTNK5.js.br +0 -0
  117. package/dist/Area3DChartScene-I7LMTNK5.js.gz +0 -0
  118. package/dist/Bar3DChartScene-6HQ6QWNB.mjs.gz +0 -0
  119. package/dist/Bar3DChartScene-VPKQDPIO.js.br +0 -0
  120. package/dist/Bar3DChartScene-VPKQDPIO.js.gz +0 -0
  121. package/dist/Line3DChartScene-QYBKXNOD.mjs.gz +0 -0
  122. package/dist/Line3DChartScene-VV362RMX.js.br +0 -0
  123. package/dist/Line3DChartScene-VV362RMX.js.gz +0 -0
  124. package/dist/Model3DScene-XA57KXA5.js.br +0 -0
  125. package/dist/Model3DScene-XA57KXA5.js.gz +0 -0
  126. package/dist/Model3DScene-YTLWTG52.mjs.gz +0 -0
  127. package/dist/PieChart3DScene-IFZMTN5H.js.br +0 -0
  128. package/dist/PieChart3DScene-IFZMTN5H.js.gz +0 -0
  129. package/dist/PieChart3DScene-INBL4F5Z.mjs.gz +0 -0
  130. package/dist/SurfaceChart3DScene-EV6DBPJS.mjs.gz +0 -0
  131. package/dist/SurfaceChart3DScene-FRSZVIVB.js.br +0 -0
  132. package/dist/SurfaceChart3DScene-FRSZVIVB.js.gz +0 -0
  133. package/dist/chunk-3WM5TUY7.mjs.br +0 -0
  134. package/dist/chunk-3WM5TUY7.mjs.gz +0 -0
  135. package/dist/chunk-7AL6KAFX.mjs.br +0 -0
  136. package/dist/chunk-7AL6KAFX.mjs.gz +0 -0
  137. package/dist/chunk-BBSFZLYI.js.br +0 -0
  138. package/dist/chunk-BBSFZLYI.js.gz +0 -0
  139. package/dist/chunk-HHDPQJF3.js.br +0 -0
  140. package/dist/chunk-HHDPQJF3.js.gz +0 -0
  141. package/dist/chunk-JCJ3EPG6.mjs.br +0 -0
  142. package/dist/chunk-KOLCCOTS.mjs.br +0 -0
  143. package/dist/chunk-KOLCCOTS.mjs.gz +0 -0
  144. package/dist/chunk-MSRRBA7G.mjs.br +0 -0
  145. package/dist/chunk-MSRRBA7G.mjs.gz +0 -0
  146. package/dist/chunk-PPL3WBC7.js.br +0 -0
  147. package/dist/chunk-PPL3WBC7.js.gz +0 -0
  148. package/dist/chunk-QA573RUB.js.br +0 -0
  149. package/dist/chunk-QA573RUB.js.gz +0 -0
  150. package/dist/chunk-QPHGHUUJ.mjs.br +0 -0
  151. package/dist/chunk-QPHGHUUJ.mjs.gz +0 -0
  152. package/dist/chunk-SIM2LXO2.js.br +0 -0
  153. package/dist/chunk-SIM2LXO2.js.gz +0 -0
  154. package/dist/chunk-UTIMT5CZ.js.br +0 -0
  155. package/dist/useViewerBuildingBlocks-f6oNGKMX.d.ts.map +0 -1
Binary file
Binary file
@@ -1,4 +1,4 @@
1
- import { ThemePresets, PptxMarkdownConverter, hasTextProperties, hasShapeProperties } from './chunk-QPHGHUUJ.mjs';
1
+ import { ThemePresets, PptxMarkdownConverter, hasTextProperties, hasShapeProperties } from './chunk-ZUSYUWOV.mjs';
2
2
  import { __export } from './chunk-XGB3TDIC.mjs';
3
3
  import * as mcp from 'pptx-viewer-mcp';
4
4
  import * as mcpSchemas from 'pptx-viewer-mcp/schemas';
@@ -15790,6 +15790,34 @@ var MCP_TOOL_ENTRIES = {
15790
15790
  "slides",
15791
15791
  "Update chart data"
15792
15792
  ),
15793
+ chart_user_shape_list: entry(
15794
+ "List a chart's drawing-overlay shapes (c:userShapes).",
15795
+ mcpSchemas.ListChartUserShapesSchema,
15796
+ mcp.listChartUserShapesT,
15797
+ "read",
15798
+ "List chart overlay shapes"
15799
+ ),
15800
+ chart_user_shape_add: entry(
15801
+ "Add a drawing-overlay shape (text box or connector) to a chart's c:userShapes.",
15802
+ mcpSchemas.AddChartUserShapeSchema,
15803
+ mcp.addChartUserShapeT,
15804
+ "slides",
15805
+ "Add chart overlay shape"
15806
+ ),
15807
+ chart_user_shape_update: entry(
15808
+ "Move, resize, or restyle one of a chart's drawing-overlay shapes by index.",
15809
+ mcpSchemas.UpdateChartUserShapeSchema,
15810
+ mcp.updateChartUserShapeT,
15811
+ "slides",
15812
+ "Update chart overlay shape"
15813
+ ),
15814
+ chart_user_shape_remove: entry(
15815
+ "Remove one of a chart's drawing-overlay shapes by index.",
15816
+ mcpSchemas.RemoveChartUserShapeSchema,
15817
+ mcp.removeChartUserShapeT,
15818
+ "slides",
15819
+ "Remove chart overlay shape"
15820
+ ),
15793
15821
  manage_smart_art: entry(
15794
15822
  "Manage SmartArt: get, add, remove, reorder, promote/demote nodes, or decompose to shapes.",
15795
15823
  mcpSchemas.ManageSmartArtSchema,
Binary file
Binary file
@@ -3690,6 +3690,18 @@ var translationsEn = {
3690
3690
  "pptx.chart.bar3DShapeLabel": "Column shape",
3691
3691
  "pptx.chart.radarStyleLabel": "Radar style",
3692
3692
  "pptx.chart.surfaceWireframeLabel": "Surface",
3693
+ "pptx.chart.userShapes": "Overlay shapes",
3694
+ "pptx.chart.userShapesEmpty": "No overlay shapes on this chart.",
3695
+ "pptx.chart.userShapeAddTextBox": "Add text box",
3696
+ "pptx.chart.userShapeDelete": "Delete overlay shape",
3697
+ "pptx.chart.userShapeFrom": "From",
3698
+ "pptx.chart.userShapeTo": "To",
3699
+ "pptx.chart.userShapeNotEditable": "This overlay shape type can be viewed but not edited here.",
3700
+ "pptx.chart.userShapeKindSp": "Shape",
3701
+ "pptx.chart.userShapeKindCxnSp": "Connector",
3702
+ "pptx.chart.userShapeKindPic": "Picture",
3703
+ "pptx.chart.userShapeKindGrpSp": "Group",
3704
+ "pptx.chart.userShapeKindGraphicFrame": "Embedded object",
3693
3705
  "pptx.masterView.addLayout": "Insert Layout",
3694
3706
  "pptx.masterView.duplicateLayout": "Duplicate Layout",
3695
3707
  "pptx.masterView.deleteLayout": "Delete Layout",
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, buildPdfFromImageData, buildNotesPdf, GRID_SIZE, DEFAULT_TEXT_FONT_SIZE } from './chunk-KOLCCOTS.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, firstShowSlideIndex, attachPresentationVisibilityPause, presentationEntrySlideIndex, buildMorphTransitionPlan, morphOptionToMode, buildMorphAnimationRules, findInSlides, applyFindReplacements, visibleTemplateElements, createCollaborationLivePatcher, publishLiveInlineText, PptxHandler, collectMediaElements, collectImagePaths, applyImagePathPatches, resolveTableCellImageUrls, resolveTableStyleImageUrls, partitionTemplateElements, seedRecentColors, resolveAuthoredCustomShowId, buildInitialGuides, readOnlyRecommendation, compatibilityWarningToasts, EncryptedFileError, resolveAutosaveIntervalMs, shouldWriteAutosaveSnapshot, saveAutosaveSnapshot, autosaveSnapshotMark, hasTextProperties, remapTextToSegments, updateMasterViewElement, isTemplateElementId, updateElement, hasShapeProperties, 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, resolveAuthoredSlideRange, mayLeaveSlideShow, stopAllPersistentAudio, guidePxToEmu, buildSaveSlides, embeddedFontSaveOptions, resolveSlideSizeSelection, saveDeckWithPassword, shouldProbeAutosaveRecovery, probeAutosaveRecovery, acceptAutosaveRecovery, discardAutosaveRecovery, shouldLoopContinuously, applyRehearsalTimings, copyFormatFromElement, applyFormatToElement, collectReferencedFontFamilies, resolveGoogleWebfontHref, mapSlideShowStartKey, mapEditorKey, isEditorTextInputTarget, createViewerOptionsStore, readSlidesFromYDoc, shouldRoomSlidesReplaceLoad, reconcileSlidesInYDoc, LOCAL_SYNC_ORIGIN, observeYDocSlides, shouldAutoFollowBroadcaster, detectTouchDevice, detectOrientation, deriveViewportBreakpoints, createTouchGestureRecognizer, MAX_ZOOM_SCALE, MIN_ZOOM_SCALE, isKeyboardOpen, scopeLayoutOptionsToSlide, viewerPreferencesFromViewProperties, DEFAULT_VIEWER_PREFERENCES, viewPropertiesPatchFromPreferences, 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, mapPresentationWheel, openPendingPrintWindow, computeColorFilter, filterHiddenSlideIndices, computeSlideIndices, buildPrintDocument, finishPrintWindow, buildPrintHtmlDocument, buildOutlineHtml, buildSlidesHtml, buildNotesHtml, buildHandoutsHtml, createBlankSlide, makeSlideId, buildSlideTemplateSlide, templateSchemeFromTheme, buildThemeColorMap, reResolveSlideColors, reResolveElementColors, computeEntranceAnimationDelay, createPresentationSessionId, resolveTransitionDurationMs, runPresentationAction, safeOpenUrl, toggleStageElementMedia, resolveOleVerbTarget, openUrlInNewTab, createPresenterTimer, createInitialPresentationSnapshot, mergePresentationSnapshot, resetPresenterTimer, presenterElapsed, stepPresenterZoom, togglePresenterTimer, addCommentToList, removeCommentFromList, editCommentInList, toggleCommentResolvedInList, 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, replyToCommentInList, 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, applyResize, lockResizeAspect, snapBoxToGrid, applyMotionPathPreset } from './chunk-QPHGHUUJ.mjs';
3
- import { translationsEn } from './chunk-JCJ3EPG6.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-WX7AFFBZ.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, resolveMediaTimeNodeElementIds, 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, firstShowSlideIndex, attachPresentationVisibilityPause, presentationEntrySlideIndex, buildMorphTransitionPlan, morphOptionToMode, buildMorphAnimationRules, findInSlides, applyFindReplacements, visibleTemplateElements, createCollaborationLivePatcher, publishLiveInlineText, PptxHandler, collectMediaElements, resolveMediaElementSource, collectImagePaths, applyImagePathPatches, resolveTableCellImageUrls, resolveTableStyleImageUrls, partitionTemplateElements, seedRecentColors, resolveAuthoredCustomShowId, buildInitialGuides, readOnlyRecommendation, compatibilityWarningToasts, EncryptedFileError, resolveAutosaveIntervalMs, shouldWriteAutosaveSnapshot, saveAutosaveSnapshot, autosaveSnapshotMark, hasTextProperties, remapTextToSegments, updateMasterViewElement, isTemplateElementId, updateElement, hasShapeProperties, getInlineEditorSelection, applyStyleToSelectedSegments, setPendingSelectionRestore, applyCaseTransformToSegments, transformTextCase, masterViewElements, replaceMasterViewElements, addSection, renameSection, deleteSection, moveSectionUp, moveSectionDown, moveSlidesToSection, canInteractWithElement, normalizeColorsForCapture, preprocessCssForCapture, slideProgressPercent, slideStatusLabel, EXPORT_ASSEMBLING_PERCENT, EXPORT_DONE_PERCENT, isExportAbortError, recordProgressPercent, downloadBlob, resolveImageResolutionScale, applyThemeToData, THEME_PRESETS, themeColorSchemesEqual, comparePresentation, applyAcceptSlide, applyAcceptAllSlides, collectUsedFonts, describeFontEmbedding, isMobileViewport, resolveAuthoredSlideRange, mayLeaveSlideShow, stopAllPersistentAudio, guidePxToEmu, buildSaveSlides, embeddedFontSaveOptions, resolveSlideSizeSelection, saveDeckWithPassword, shouldProbeAutosaveRecovery, probeAutosaveRecovery, acceptAutosaveRecovery, discardAutosaveRecovery, shouldLoopContinuously, applyRehearsalTimings, copyFormatFromElement, applyFormatToElement, collectReferencedFontFamilies, resolveGoogleWebfontHref, mapSlideShowStartKey, mapEditorKey, isEditorTextInputTarget, createViewerOptionsStore, readSlidesFromYDoc, shouldRoomSlidesReplaceLoad, reconcileSlidesInYDoc, LOCAL_SYNC_ORIGIN, observeYDocSlides, shouldAutoFollowBroadcaster, detectTouchDevice, detectOrientation, deriveViewportBreakpoints, createTouchGestureRecognizer, MAX_ZOOM_SCALE, MIN_ZOOM_SCALE, isKeyboardOpen, scopeLayoutOptionsToSlide, viewerPreferencesFromViewProperties, DEFAULT_VIEWER_PREFERENCES, viewPropertiesPatchFromPreferences, openPptxFile, readBackstageRecentFile, isActionHidden, resolveInlineEditAutoFitHeight, resolveInlineEditNormAutofitShrink, filterInteractableIds, beginShapeAdjustment, buildElementClipboardPayload, savedPresentationFileName, exportDeckJson, groupElements, generateElementId, makeCloneId, ungroupElements, alignElements, distributeElements, bringForward, sendBackward, bringToFront, sendToBack, newTableElement, createDefaultChartElement, readViewportMetrics, computeKeyboardInset, mergeShapes, mapPresentationKey, lastShowSlideIndex, mapPresentationWheel, openPendingPrintWindow, computeColorFilter, filterHiddenSlideIndices, computeSlideIndices, buildPrintDocument, finishPrintWindow, buildPrintHtmlDocument, buildOutlineHtml, buildSlidesHtml, buildNotesHtml, buildHandoutsHtml, createBlankSlide, makeSlideId, buildSlideTemplateSlide, templateSchemeFromTheme, buildThemeColorMap, reResolveSlideColors, reResolveElementColors, computeEntranceAnimationDelay, createPresentationSessionId, resolveTransitionDurationMs, resolveTransitionSoundAction, runPresentationAction, safeOpenUrl, toggleStageElementMedia, resolveOleVerbTarget, openUrlInNewTab, createPresenterTimer, createInitialPresentationSnapshot, mergePresentationSnapshot, resetPresenterTimer, presenterElapsed, stepPresenterZoom, togglePresenterTimer, addCommentToList, removeCommentFromList, editCommentInList, toggleCommentResolvedInList, 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, replyToCommentInList, 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, applyResize, lockResizeAspect, snapBoxToGrid, applyMotionPathPreset } from './chunk-ZUSYUWOV.mjs';
3
+ import { translationsEn } from './chunk-TGCSZXOG.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
 
@@ -1104,6 +1104,7 @@ function useAnimationPlayback(input) {
1104
1104
  const activeAnimationGroupRef = useRef(null);
1105
1105
  const activeAnimationEndAtRef = useRef(0);
1106
1106
  const seededCompletedRef = useRef(false);
1107
+ const mediaTimeNodeElementIdsRef = useRef(/* @__PURE__ */ new Map());
1107
1108
  const lastSeedCompletedRef = useRef(false);
1108
1109
  const buildPlaybackContext = useCallback(() => {
1109
1110
  return {
@@ -1112,7 +1113,8 @@ function useAnimationPlayback(input) {
1112
1113
  buildHandle: buildRafRef,
1113
1114
  onPlayActionSound,
1114
1115
  playSound: playAnimationSound,
1115
- stopSound: stopAnimationSound
1116
+ stopSound: stopAnimationSound,
1117
+ mediaTimeNodeElementIds: mediaTimeNodeElementIdsRef.current
1116
1118
  };
1117
1119
  }, [onPlayActionSound]);
1118
1120
  useEffect(() => {
@@ -1139,6 +1141,7 @@ function useAnimationPlayback(input) {
1139
1141
  const slide = slides[slideIndex];
1140
1142
  if (!slide) {
1141
1143
  controllerRef.current = null;
1144
+ mediaTimeNodeElementIdsRef.current = /* @__PURE__ */ new Map();
1142
1145
  setPresentationElementStates(/* @__PURE__ */ new Map());
1143
1146
  setPresentationKeyframesCss("");
1144
1147
  setInteractiveTriggerShapeIds(/* @__PURE__ */ new Set());
@@ -1147,6 +1150,9 @@ function useAnimationPlayback(input) {
1147
1150
  }
1148
1151
  const controller = PresentationAnimationController.fromSlide(slide);
1149
1152
  controllerRef.current = controller;
1153
+ mediaTimeNodeElementIdsRef.current = resolveMediaTimeNodeElementIds(
1154
+ slide.nativeAnimations ?? []
1155
+ );
1150
1156
  setPresentationKeyframesCss(controller.keyframesCss);
1151
1157
  setInteractiveTriggerShapeIds(controller.interactiveTriggerShapeIds);
1152
1158
  setHoverTriggerShapeIds(controller.hoverTriggerShapeIds);
@@ -1865,10 +1871,13 @@ function executeSlideTransition(nextSlideIndex, deps) {
1865
1871
  deps.onSetActiveSlideIndex(nextSlideIndex);
1866
1872
  deps.setPresentationSlideVisible(true);
1867
1873
  deps.seedSlideAnimations(nextSlideIndex, { completed: deps.seedCompleted });
1874
+ const soundAction = resolveTransitionSoundAction(transition);
1875
+ if (soundAction.kind === "play" && deps.onPlayActionSound) {
1876
+ deps.onPlayActionSound(soundAction.soundPath, { loop: soundAction.loop });
1877
+ } else if (soundAction.kind === "stop" && deps.onStopActionSound) {
1878
+ deps.onStopActionSound();
1879
+ }
1868
1880
  if (durationMs > 0 && transition) {
1869
- if (transition.soundPath && deps.onPlayActionSound) {
1870
- deps.onPlayActionSound(transition.soundPath, { loop: transition.soundLoop === true });
1871
- }
1872
1881
  deps.setTransitionOverlay({
1873
1882
  outgoingSlideIndex: deps.currentSlideIndex,
1874
1883
  incomingSlideIndex: nextSlideIndex,
@@ -1902,6 +1911,7 @@ function useSlideNavigation(input) {
1902
1911
  onSetMode,
1903
1912
  onSetActiveSlideIndex,
1904
1913
  onPlayActionSound,
1914
+ onStopActionSound,
1905
1915
  loopContinuously,
1906
1916
  useTimings,
1907
1917
  onAdvancePastLastSlide,
@@ -1978,6 +1988,7 @@ function useSlideNavigation(input) {
1978
1988
  slides,
1979
1989
  currentSlideIndex: presentationSlideIndex,
1980
1990
  onPlayActionSound,
1991
+ onStopActionSound,
1981
1992
  setPresentationSlideVisible,
1982
1993
  clearPresentationTimers,
1983
1994
  setPresentationSlideIndex,
@@ -2001,6 +2012,7 @@ function useSlideNavigation(input) {
2001
2012
  loopContinuously,
2002
2013
  onAdvancePastLastSlide,
2003
2014
  onPlayActionSound,
2015
+ onStopActionSound,
2004
2016
  onSetActiveSlideIndex,
2005
2017
  onSetMode,
2006
2018
  playNextAnimationGroup,
@@ -2032,6 +2044,7 @@ function useSlideNavigation(input) {
2032
2044
  slides,
2033
2045
  currentSlideIndex: presentationSlideIndex,
2034
2046
  onPlayActionSound,
2047
+ onStopActionSound,
2035
2048
  setPresentationSlideVisible,
2036
2049
  clearPresentationTimers,
2037
2050
  setPresentationSlideIndex,
@@ -2054,6 +2067,7 @@ function useSlideNavigation(input) {
2054
2067
  [
2055
2068
  clearPresentationTimers,
2056
2069
  onPlayActionSound,
2070
+ onStopActionSound,
2057
2071
  onSetActiveSlideIndex,
2058
2072
  presentationSlideIndex,
2059
2073
  presentationTimersRef,
@@ -2327,6 +2341,7 @@ function usePresentationMode(input) {
2327
2341
  onSetMode,
2328
2342
  onSetActiveSlideIndex,
2329
2343
  onPlayActionSound,
2344
+ onStopActionSound,
2330
2345
  onSetPointerTool,
2331
2346
  onEraseAnnotations,
2332
2347
  onToggleInkMarkup,
@@ -2420,6 +2435,7 @@ function usePresentationMode(input) {
2420
2435
  onSetMode,
2421
2436
  onSetActiveSlideIndex,
2422
2437
  onPlayActionSound,
2438
+ onStopActionSound,
2423
2439
  loopContinuously,
2424
2440
  useTimings,
2425
2441
  onAdvancePastLastSlide: actionExtensions.handleAdvancePastLastSlide,
@@ -4087,34 +4103,14 @@ function useLoadContent({
4087
4103
  mediaDataUrls.clear();
4088
4104
  await Promise.all(
4089
4105
  mediaElements.map(async (mediaElement) => {
4090
- const mediaPath = mediaElement.mediaPath;
4091
- if (!mediaPath) {
4106
+ const resolved = await resolveMediaElementSource(mediaElement, handler);
4107
+ if (resolved.missing || !resolved.mediaPath || !resolved.url) {
4092
4108
  mediaElement.mediaMissing = true;
4093
4109
  return;
4094
4110
  }
4095
- try {
4096
- const isAudioVideo = mediaElement.mediaType === "audio" || mediaElement.mediaType === "video";
4097
- if (isAudioVideo) {
4098
- const arrayBuffer = await handler.getMediaArrayBuffer(mediaPath);
4099
- if (arrayBuffer) {
4100
- const mimeType = mediaElement.mediaMimeType || "application/octet-stream";
4101
- const blob = new Blob([arrayBuffer], { type: mimeType });
4102
- const blobUrl = URL.createObjectURL(blob);
4103
- loadBlobUrls.push(blobUrl);
4104
- mediaDataUrls.set(mediaPath, blobUrl);
4105
- } else {
4106
- mediaElement.mediaMissing = true;
4107
- }
4108
- } else {
4109
- const dataUrl = await handler.getImageData(mediaPath);
4110
- if (dataUrl) {
4111
- mediaDataUrls.set(mediaPath, dataUrl);
4112
- } else {
4113
- mediaElement.mediaMissing = true;
4114
- }
4115
- }
4116
- } catch {
4117
- mediaElement.mediaMissing = true;
4111
+ mediaDataUrls.set(resolved.mediaPath, resolved.url);
4112
+ if (resolved.isBlobUrl) {
4113
+ loadBlobUrls.push(resolved.url);
4118
4114
  }
4119
4115
  })
4120
4116
  );
@@ -5199,10 +5195,18 @@ function useCanvasInteractions(input) {
5199
5195
  const newSegments = remapTextToSegments(committedText, el.textSegments, el.textStyle);
5200
5196
  const editorEl = document.querySelector("[data-inline-editor]");
5201
5197
  const newHeight = resolveInlineEditAutoFitHeight(el.textStyle, el.height, editorEl);
5198
+ const shrink = resolveInlineEditNormAutofitShrink(el.textStyle, el.height, editorEl);
5202
5199
  ops.updateElementById(editId, {
5203
5200
  text: committedText,
5204
5201
  textSegments: newSegments,
5205
- ...newHeight !== void 0 ? { height: newHeight } : {}
5202
+ ...newHeight !== void 0 ? { height: newHeight } : {},
5203
+ ...shrink !== "unchanged" ? {
5204
+ textStyle: {
5205
+ ...el.textStyle,
5206
+ autoFitFontScale: shrink.fontScale,
5207
+ autoFitLineSpacingReduction: shrink.lnSpcReduction
5208
+ }
5209
+ } : {}
5206
5210
  });
5207
5211
  history.markDirty();
5208
5212
  }
@@ -6299,6 +6303,9 @@ function useGroupAlignLayerHandlers(input) {
6299
6303
  if (ids.length < 2 || !activeSlide) {
6300
6304
  return;
6301
6305
  }
6306
+ if (!selectedElements.every((el) => canInteractWithElement(el, "group"))) {
6307
+ return;
6308
+ }
6302
6309
  const { elements, groupId } = groupElements(ops.activeElements, ids, generateElementId());
6303
6310
  if (groupId === null) {
6304
6311
  return;
@@ -6311,6 +6318,9 @@ function useGroupAlignLayerHandlers(input) {
6311
6318
  if (!selectedElement || selectedElement.type !== "group" || !activeSlide) {
6312
6319
  return;
6313
6320
  }
6321
+ if (!canInteractWithElement(selectedElement, "group")) {
6322
+ return;
6323
+ }
6314
6324
  const group = selectedElement;
6315
6325
  const intoTemplate = isTemplateElementId(group.id);
6316
6326
  const childIds = group.children.map(
@@ -6374,6 +6384,7 @@ function useGroupAlignLayerHandlers(input) {
6374
6384
  history.markDirty();
6375
6385
  };
6376
6386
  const canDistribute = selectedElements.length >= 3;
6387
+ const selectionGroupable = selectedElements.every((el) => canInteractWithElement(el, "group"));
6377
6388
  const handleMoveLayer = (direction) => {
6378
6389
  if (!selectedElement || !activeSlide) {
6379
6390
  return;
@@ -6410,6 +6421,7 @@ function useGroupAlignLayerHandlers(input) {
6410
6421
  handleAlignElements,
6411
6422
  handleDistributeElements,
6412
6423
  canDistribute,
6424
+ selectionGroupable,
6413
6425
  handleMoveLayer,
6414
6426
  handleMoveLayerToEdge,
6415
6427
  handleMergeShapes,
@@ -6428,6 +6440,7 @@ function useElementManipulation(input) {
6428
6440
  handleAlignElements,
6429
6441
  handleDistributeElements,
6430
6442
  canDistribute,
6443
+ selectionGroupable,
6431
6444
  handleMoveLayer,
6432
6445
  handleMoveLayerToEdge,
6433
6446
  handleMergeShapes,
@@ -6494,6 +6507,7 @@ function useElementManipulation(input) {
6494
6507
  handleAlignElements,
6495
6508
  handleDistributeElements,
6496
6509
  canDistribute,
6510
+ selectionGroupable,
6497
6511
  handleMoveLayer,
6498
6512
  handleMoveLayerToEdge,
6499
6513
  handleMergeShapes,
@@ -8941,6 +8955,12 @@ function usePresentationSetup(input) {
8941
8955
  setMode(nextMode);
8942
8956
  },
8943
8957
  onSetActiveSlideIndex: setActiveSlideIndex,
8958
+ // `p:sndAc/p:endSnd` ("Stop Previous Sound"): silences whatever transition
8959
+ // sound is currently looping. A non-looping transition sound plays through
8960
+ // its own ad hoc `Audio` below rather than this singleton (it finishes on
8961
+ // its own in a few seconds either way), so only the loop case is stoppable
8962
+ // here - matching the common "Loop Until Next Sound... then Stop" pairing.
8963
+ onStopActionSound: () => stopAnimationSound(),
8944
8964
  onPlayActionSound: (soundPath, options) => {
8945
8965
  void (async () => {
8946
8966
  if (!soundPath) {
@@ -10779,11 +10799,11 @@ function buildCanvasProps(input) {
10779
10799
  slide: activeSlide
10780
10800
  });
10781
10801
  const tableStyleContext = s.theme || s.tableStyleMap ? { theme: s.theme, tableStyleMap: s.tableStyleMap } : void 0;
10782
- const openExternalUrl = (url) => {
10802
+ const openExternalUrl = (url, target) => {
10783
10803
  if (shouldConfirmExternalHyperlink(viewerOptions, url) && !window.confirm(buildHyperlinkConfirmMessage(url))) {
10784
10804
  return;
10785
10805
  }
10786
- safeOpenUrl(url);
10806
+ safeOpenUrl(url, target);
10787
10807
  };
10788
10808
  const handleActionClick = (elementId, action) => {
10789
10809
  if (mode === "present") {
@@ -10797,7 +10817,7 @@ function buildCanvasProps(input) {
10797
10817
  openExternalUrl(action.url);
10798
10818
  }
10799
10819
  };
10800
- const handleHyperlinkClick = (url) => {
10820
+ const handleHyperlinkClick = (url, target) => {
10801
10821
  if (isPpactionUrl(url)) {
10802
10822
  if (mode === "present") {
10803
10823
  const parsed = parsePpactionUrl(url);
@@ -10810,7 +10830,7 @@ function buildCanvasProps(input) {
10810
10830
  }
10811
10831
  return;
10812
10832
  }
10813
- openExternalUrl(url);
10833
+ openExternalUrl(url, target);
10814
10834
  };
10815
10835
  return {
10816
10836
  activeSlide: effectiveSlide,
@@ -11103,6 +11123,7 @@ function buildToolbarProps(input) {
11103
11123
  onUngroupElement: manipulation.handleUngroupElement,
11104
11124
  onUpdateElementStyle: ops.updateSelectedShapeStyle,
11105
11125
  selectedCount: s.selectedElementIds.length > 0 ? s.selectedElementIds.length : selectionSize,
11126
+ selectionGroupable: manipulation.selectionGroupable,
11106
11127
  onOpenHyperlinkDialog: () => dialogs.setIsHyperlinkDialogOpen(true),
11107
11128
  onDuplicate: manipulation.handleDuplicate,
11108
11129
  onDelete: manipulation.handleDelete,
Binary file
Binary file