pptx-react-viewer 4.63.1 → 4.64.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (108) hide show
  1. package/CHANGELOG.md +59 -0
  2. package/dist/{AiChatPanel-7DESUEAZ.js → AiChatPanel-7AFFNYEN.js} +19 -19
  3. package/dist/AiChatPanel-7AFFNYEN.js.br +0 -0
  4. package/dist/AiChatPanel-7AFFNYEN.js.gz +0 -0
  5. package/dist/{AiChatPanel-GQ64SIYP.mjs → AiChatPanel-7U7IJRNY.mjs} +1 -1
  6. package/dist/AiChatPanel-7U7IJRNY.mjs.br +0 -0
  7. package/dist/AiChatPanel-7U7IJRNY.mjs.gz +0 -0
  8. package/dist/ai.js +2 -2
  9. package/dist/ai.js.br +1 -2
  10. package/dist/ai.js.gz +0 -0
  11. package/dist/ai.mjs +1 -1
  12. package/dist/ai.mjs.br +0 -0
  13. package/dist/ai.mjs.gz +0 -0
  14. package/dist/{chunk-5KFSMXI4.js → chunk-5DBKW7F3.js} +8 -3
  15. package/dist/chunk-5DBKW7F3.js.br +0 -0
  16. package/dist/{chunk-5KFSMXI4.js.gz → chunk-5DBKW7F3.js.gz} +0 -0
  17. package/dist/{chunk-MR3ZSEHS.mjs → chunk-5ZW3GP6C.mjs} +6 -5
  18. package/dist/chunk-5ZW3GP6C.mjs.br +0 -0
  19. package/dist/chunk-5ZW3GP6C.mjs.gz +0 -0
  20. package/dist/{chunk-FYQVCABH.mjs → chunk-G5JGUSBL.mjs} +253 -230
  21. package/dist/chunk-G5JGUSBL.mjs.br +0 -0
  22. package/dist/chunk-G5JGUSBL.mjs.gz +0 -0
  23. package/dist/{chunk-MWFBZ5SJ.js → chunk-GXL2XMST.js} +832 -651
  24. package/dist/chunk-GXL2XMST.js.br +0 -0
  25. package/dist/chunk-GXL2XMST.js.gz +0 -0
  26. package/dist/{chunk-H6KYXOKK.mjs → chunk-HZBEKG5R.mjs} +281 -100
  27. package/dist/chunk-HZBEKG5R.mjs.br +0 -0
  28. package/dist/chunk-HZBEKG5R.mjs.gz +0 -0
  29. package/dist/{chunk-F6WCYCHV.js → chunk-PNDORR6S.js} +1 -1
  30. package/dist/chunk-PNDORR6S.js.br +0 -0
  31. package/dist/chunk-PNDORR6S.js.gz +0 -0
  32. package/dist/{chunk-TXVGYIO6.js → chunk-VGU5S37T.js} +450 -428
  33. package/dist/chunk-VGU5S37T.js.br +0 -0
  34. package/dist/chunk-VGU5S37T.js.gz +0 -0
  35. package/dist/{chunk-NE5JQMED.mjs → chunk-WAIX4VJ2.mjs} +1 -1
  36. package/dist/chunk-WAIX4VJ2.mjs.br +0 -0
  37. package/dist/chunk-WAIX4VJ2.mjs.gz +0 -0
  38. package/dist/i18n/de.cjs +89 -43
  39. package/dist/i18n/de.cjs.br +0 -0
  40. package/dist/i18n/de.cjs.gz +0 -0
  41. package/dist/i18n/de.mjs +89 -43
  42. package/dist/i18n/de.mjs.br +0 -0
  43. package/dist/i18n/de.mjs.gz +0 -0
  44. package/dist/i18n/es.cjs +89 -43
  45. package/dist/i18n/es.cjs.br +0 -0
  46. package/dist/i18n/es.cjs.gz +0 -0
  47. package/dist/i18n/es.mjs +89 -43
  48. package/dist/i18n/es.mjs.br +0 -0
  49. package/dist/i18n/es.mjs.gz +0 -0
  50. package/dist/i18n/fr.cjs +89 -43
  51. package/dist/i18n/fr.cjs.br +0 -0
  52. package/dist/i18n/fr.cjs.gz +0 -0
  53. package/dist/i18n/fr.mjs +89 -43
  54. package/dist/i18n/fr.mjs.br +0 -0
  55. package/dist/i18n/fr.mjs.gz +0 -0
  56. package/dist/i18n/zh-CN.cjs +95 -49
  57. package/dist/i18n/zh-CN.cjs.br +0 -0
  58. package/dist/i18n/zh-CN.cjs.gz +0 -0
  59. package/dist/i18n/zh-CN.mjs +95 -49
  60. package/dist/i18n/zh-CN.mjs.br +0 -0
  61. package/dist/i18n/zh-CN.mjs.gz +0 -0
  62. package/dist/index.d.ts +10 -1
  63. package/dist/index.js +27 -27
  64. package/dist/index.js.br +0 -0
  65. package/dist/index.js.gz +0 -0
  66. package/dist/index.mjs +4 -4
  67. package/dist/index.mjs.br +0 -0
  68. package/dist/index.mjs.gz +0 -0
  69. package/dist/internals.d.ts +10 -0
  70. package/dist/internals.js +81 -81
  71. package/dist/internals.js.br +0 -0
  72. package/dist/internals.js.gz +0 -0
  73. package/dist/internals.mjs +2 -2
  74. package/dist/internals.mjs.br +0 -0
  75. package/dist/internals.mjs.gz +0 -0
  76. package/dist/pptx-viewer-canvas.css +1 -1
  77. package/dist/pptx-viewer-canvas.css.br +0 -0
  78. package/dist/pptx-viewer-canvas.css.gz +0 -0
  79. package/dist/pptx-viewer.css +1 -1
  80. package/dist/pptx-viewer.css.br +0 -0
  81. package/dist/pptx-viewer.css.gz +0 -0
  82. package/dist/viewer/index.d.ts +10 -1
  83. package/dist/viewer/index.js +21 -21
  84. package/dist/viewer/index.js.br +0 -0
  85. package/dist/viewer/index.js.gz +0 -0
  86. package/dist/viewer/index.mjs +4 -4
  87. package/dist/viewer/index.mjs.br +0 -0
  88. package/dist/viewer/index.mjs.gz +0 -0
  89. package/package.json +3 -3
  90. package/dist/AiChatPanel-7DESUEAZ.js.br +0 -0
  91. package/dist/AiChatPanel-7DESUEAZ.js.gz +0 -0
  92. package/dist/AiChatPanel-GQ64SIYP.mjs.br +0 -0
  93. package/dist/AiChatPanel-GQ64SIYP.mjs.gz +0 -0
  94. package/dist/chunk-5KFSMXI4.js.br +0 -0
  95. package/dist/chunk-F6WCYCHV.js.br +0 -0
  96. package/dist/chunk-F6WCYCHV.js.gz +0 -0
  97. package/dist/chunk-FYQVCABH.mjs.br +0 -0
  98. package/dist/chunk-FYQVCABH.mjs.gz +0 -0
  99. package/dist/chunk-H6KYXOKK.mjs.br +0 -0
  100. package/dist/chunk-H6KYXOKK.mjs.gz +0 -0
  101. package/dist/chunk-MR3ZSEHS.mjs.br +0 -0
  102. package/dist/chunk-MR3ZSEHS.mjs.gz +0 -0
  103. package/dist/chunk-MWFBZ5SJ.js.br +0 -0
  104. package/dist/chunk-MWFBZ5SJ.js.gz +0 -0
  105. package/dist/chunk-NE5JQMED.mjs.br +0 -0
  106. package/dist/chunk-NE5JQMED.mjs.gz +0 -0
  107. package/dist/chunk-TXVGYIO6.js.br +0 -0
  108. package/dist/chunk-TXVGYIO6.js.gz +0 -0
@@ -1,5 +1,5 @@
1
- import { cloneTemplateElementsBySlideId, cloneSlide, cloneHistorySnapshot, MIN_ELEMENT_SIZE, ZOOM_TO_SELECTION_PADDING, DEFAULT_CANVAS_HEIGHT, DEFAULT_CANVAS_WIDTH, useTranslation, partitionTemplateElements, isTemplateElementId, DEFAULT_TABLE_ROWS, DEFAULT_TABLE_COLUMNS, comparePresentation, UNGROUPED_SECTION_ID, DEFAULT_SECTION_GROUP_ID, stopAllPersistentAudio, buildSaveSlides, MAX_ZOOM_SCALE, MIN_ZOOM_SCALE, getImageEffectsOpacity, getImageEffectsFilter, getImageRenderStyle, cn, isEditableTextElement, getShapeVisualStyle, getTextStyleForElement, DEFAULT_TEXT_COLOR, renderVectorShape, isConnectorOrLineElement, build3DExtrusionData, getImageSurfaceStyle, getTextLayoutStyle, renderTableElement, renderMediaElement, shouldRenderFallbackLabel, getElementLabel, normalizeHexColor, makeCloneId, DEFAULT_TEXT_FONT_SIZE, buildPdfFromTiledImageData, GRID_SIZE, copyFormatFromElement, hasCopyableFormat, isImageTiled, getDuotoneColors, DEFAULT_STROKE_COLOR, DEFAULT_FILL_COLOR, buildCssGradientFromShapeStyle, getCropShapeClipPath, getElementTransform, hasDagDuotoneEffect, renderDagDuotoneSvgFilter, getImageSurfaceMaskStyle, getTextWarpStyle, getTextCompensationTransform, renderTextSegments, buildReactChartViewModel, renderChartElement, buildInkGroupStrokes, getInkReplayStyles, INK_REPLAY_KEYFRAMES, buildContentPartStrokes, getContentPartReplayStyles, buildTextBody3DSceneStyle, rerouteConnectorsForMovedElements, applyReroutedConnectors, updateCellTextStyleInRawXml, updateCellTextInRawXml, splitCell, updateMergeAttrsInRawXml, mergeCells, buildNotesPdf, canvasToJpegData, applyFormatToElement, isPpactionUrl, parsePpactionUrl, getImageTilingStyle, buildCacheKey, DEFAULT_COLOR_CHANGE_TOLERANCE, getCachedResult, applyColorChange, setCachedResult, colorWithOpacity, normalizeStrokeDashType, getSvgStrokeDasharray, getCompoundLineOffsets, getCompoundLineWidths, getConnectorPathGeometry, buildLineShadowCss, buildLineGlowFilter, renderConnectorMarker, getAriaRoleDescription as getAriaRoleDescription$1, getAriaLabel as getAriaLabel$1, getAriaRole, DEFAULT_FONT_FAMILY, ACTION_BUTTON_PRESETS, isUrlSafe, safeOpenUrl as safeOpenUrl$1, substituteFieldText, HYPERLINK_COLOR } from './chunk-MR3ZSEHS.mjs';
2
- import { defineThreeViewElement, MIN_TOUCH_TARGET_PX, computeVirtualRange, DEFAULT_VIRTUAL_OVERSCAN, createCollaborationSessionController, registerCollaborationTeardown, createPresenceProjector, BROADCAST_THROTTLE_MS, sanitizeColor, createEditorHistoryController, historyTheme, crossedHistoryTheme, createWheelStepBuffer, createViewerZoomStore, clampZoomScale, mapEditingWheel, createActiveAnimationGroup, cancelBuildReveal, clearPlaybackTimers, PresentationAnimationController, resolveMediaTimeNodeElementIds, resolveMediaBookmarkTimesMs, advanceMainSequence, playGroup, PRESENTATION_HASH, PRESENTATION_NONCE_KEY, PRESENTATION_CHANNEL_NAME, swapPresentationWindows, PRESENTATION_MESSAGE_ORIGIN, clearAudienceContent, buildPresentationAudienceUrl, resolveAudienceScreenPlacement, placeAudienceWindow, storeAudienceContent, isPresentationSessionMessage, endAudienceDisplay, createPresentationKeyBuffer, acceptsPresentationInput, resolveAutoAdvanceDelayMs, resolveShowBackward, resolveShowForward, beginZoomExcursion, buildZoomTransitionOverride, createPresenterShowGuard, firstShowSlideIndex, attachPresentationVisibilityPause, presentationEntrySlideIndex, buildMorphTransitionPlan, morphOptionToMode, buildMorphAnimationRules, INITIAL_FIND_REPLACE_SESSION, findReplaceSessionActions, visibleTemplateElements, createCollaborationLivePatcher, reportInlineTextDraft, initialInspectorOpen, createPresentationLoadResources, collectMediaElements, resolveMediaElementSource, collectImagePaths, applyImagePathPatches, resolveTableCellImageUrls, resolveTableStyleImageUrls, resolveTextFillBlipUrls, seedRecentColors, resolveAuthoredCustomShowId, GlyphOutlineFontCache, buildInitialGuides, readOnlyRecommendation, compatibilityWarningToasts, resolveInitialSlideIndex, pptxLoadErrorMessage, resolveAutosaveIntervalMs, createAutosaveController, saveAutosaveSnapshot, updateMasterViewElement, updateElement, masterViewElements, replaceMasterViewElements, addSection, renameSection, deleteSection, moveSectionUp, moveSectionDown, moveSlidesToSection, canMergeShapes, canInteractWithElement, prepareHtml2CanvasClone, html2canvasCaptureScope, slideProgressPercent, slideStatusLabel, EXPORT_ASSEMBLING_PERCENT, EXPORT_DONE_PERCENT, isExportAbortError, DEFAULT_VIEWER_OPTIONS, resolveImageResolutionScale, applyAcceptSlide, applyAcceptAllSlides, collectUsedFonts, describeFontEmbedding, isMobileViewport, resolveAuthoredSlideRange, mayLeaveSlideShow, buildDeckSaveOptions, resolveSlideSizeSelection, saveDeckWithPassword, createAutosaveRecoveryController, discardAutosaveRecovery, probeAutosaveRecovery, shouldLoopContinuously, applyRehearsalTimings, rasterResultToPngBlob, downloadBlob, elementPictureFilename, canEditElementPoints, resolveGoogleFontsCss2Base, selectTrustedEmbeddedFonts, resolveFontWeight, resolveFontItalic, collectReferencedFontFamilies, resolveGoogleWebfontHref, syncGoogleWebfontStylesheet, selectGoogleWebfontFamilies, fetchGoogleWebfontOutlineBytes, dispatchEditorKey, isFeatureEnabled, parentSelection, textFontSizePtToPx, stepFontSizePt, textFontSizePxToPt, cycleSelectableElement, createCustomizationController, prepareElementForInsertion, slideSpaceElement, autosaveStatusKind, createViewerOptionsStore, observeYDocSlides, LOCAL_SYNC_ORIGIN, readSlidesFromYDoc, shouldRoomSlidesReplaceLoad, reconcileSlidesInYDoc, shouldAutoFollowBroadcaster, detectTouchDevice, detectOrientation, deriveViewportBreakpoints, createTouchGestureRecognizer, isKeyboardOpen, scopeLayoutOptionsToSlide, collaborationHistoryReady, bindCollaborationHistory, INITIAL_READ_ONLY_SESSION, readOnlySessionActions, applyReadOnlySessionEvent, readOnlyBannerVisible, readOnlyLocked, viewerPreferencesFromViewProperties, DEFAULT_VIEWER_PREFERENCES, viewPropertiesPatchFromPreferences, resolveCollaborationConfig, openPptxFile, readBackstageRecentFile, resolveCollaborationShellEditability, resolveCollaborationShellState, getResizeHandleHitAreaStyle, resolveElementInteractivity, getBackgroundAnimationState, getShapeEffectLayerPlacement, buildTextStyleOverrideCss, isElementRendered, resolveElementAriaAttributes, isMediaFullscreenActive, shouldRenderHitTarget, elementHitTargetStyle, getShapeEffectAnimationLayerStyle, inlineElementPointerEvents, isHollowShapeElement, LINK_TOOLTIP_HOST_CLASS, resolvePalette as resolvePalette$1, mediaTransportVisible, oleActionsVisible, getGroupChildParentFill, deviceStrokeStageStyle, MORPH_CROSSFADE_GROUP_STYLE, MORPH_CROSSFADE_HALF_STYLE, getSlideTransitionAnimations, getFragmentedTransitionDescriptor, SLIDE_TRANSITION_KEYFRAMES, isActionHidden, buildInlineTextCommitPatch, resolveInlineEditAutoFitHeight, resolveInlineEditNormAutofitShrink, setPendingCaretPoint, resolveGroupDoubleClickTarget, filterInteractableIds, beginShapeAdjustment, buildElementClipboardPayload, generateCustomShowId, contextMenuInspectorAnchor, savedPresentationFileName, deliverSavedPresentation, exportDeckJson, mapCustomizedEditorKey, isEditorTextInputTarget, groupElements, generateElementId, ungroupElements, alignElements, distributeElements, newTableElement, createDefaultChartElement, readViewportMetrics, computeKeyboardInset, planMergeShapes, applyMergeShapesPlan, mapPresentationKey, lastShowSlideIndex, mapPresentationWheel, createBlankSlide, insertSlidePaste, applySlidePasteTemplates, makeSlideId, insertedLayoutCompletion, buildSlideTemplateSlide, templateSchemeFromTheme, queueThemeWrite, needsOwnedSession, openOwnedCollaboration, resolveViewportFitOptions, editorViewportFitFor, calculateViewportFit, observeViewportClientSize, scheduleAutoAdvanceChain, computeEntranceAnimationDelay, createPresentationSessionId, resolveTransitionDurationMs, resolveTransitionSoundAction, runPresentationAction, safeOpenUrl, buildRunProgramNotice, toggleStageElementMedia, resolveOleVerbTarget, downloadDataUrl, openUrlInNewTab, createPresenterTimer, createInitialPresentationSnapshot, mergePresentationSnapshot, resetPresenterTimer, presenterElapsed, stepPresenterZoom, togglePresenterTimer, addCommentToList, removeCommentFromList, editCommentInList, toggleCommentResolvedInList, slideSpaceMembers, remapTextToSegments, getInlineEditorSelectionResult, buildInlineListStylePatch, applyActiveInlineListFormatting, applyListStyleUpdate, setPendingSelectionRestore, applyTextStyleUpdate, toggleSelectionBullets, transformInlineListCase, applyCaseTransformToSegments, transformTextCase, createGestureController, resolveExportCaptureDecision, recordProgressPercent, computeGridSpacingPx as computeGridSpacingPx$1, resolveShowSlideIndexes, groupSlidesBySection, masterViewPseudoSlide, overlayMasterViewInlineSnapshot, overlayInlineTextSnapshot, rasterizeElement, cloneElementForPaste, applyPasteSpecialFormat, buildRasterPictureElement, cloneElementUpdates, assertElementUpdateTarget, prepareElementUpdateBatch, createWriteBackScheduler, writeBackReport, createSyncGate, observeExternalCollaborationReadiness, resolveHistoryDepth, lockExternalContentSetting, resolveAllowExternalContent, createBackstagePresentation, buildFieldSubstitutionContext, buildSlidesPaneFieldContext, buildSlidesPaneTableStyleContext, slidesPaneRehearsalTimings, openSlidesPaneLayoutGallery, getImageColorWashStyle, attachRotateHandlePlacement, getSelectionControlArtworkStyle, getSelectionOutlineColor, paintedStrokeWidth, ensureActionAffordanceStyles, resolveElementActionAffordance, actionAffordanceLabels, paintedElementSize, MEDIA_FULLSCREEN_OVERLAY_STYLE, elementContainerHeightStyle, getAnimationOpacity, resolveElementHighlightClick, applyHighlightClickStyle, getComputedEffectStyle, getSoftEdgeSvgFilter, getEffectStyleSource, getBevelLightingSvgFilter, buildStrokeOutline, buildHollowHitOutline, buildSubpathFillOverlay, strokeOutlineViewBox, buildSummaryZoomView, readEditableText, placeCaretAt, takePendingCaretPoint, getPendingSelectionRestore, restoreSegmentSelection, mapInlineTextFormatKey, mapInlineEditorChord, subscribeBarFacePicturePixelSamples, getBarFacePicturePixelSampleVersion, ensureChartInteractionStyles, applyChartPartHighlight, resolveRevealedChartData, formatAxisValue, chartFormatTargetFromEvent, resolveOleType, getOleAriaLabel, getOleTypeColor, getOleTypeLabel, filterRenderedElements, resolveGroupChildFill, isLinkedTextBox, getOverflowSegments, shouldUseSvgWarp, getTextBodyRotationTransform, placeholderPromptDescriptor, getAriaRoleDescription, getAriaLabel, elementIdSelector, TOOLBAR_TABS, resolveGroupPressTarget, scrollInspectorSectionIntoView, computeScrollDelta, buildOutlinePrintJobDocument, printJobRasterFallback, applyThemeByPath, withHistoryTheme, withHistoryMasterThemes, writeThemeParts, loadedThemeName, replyToCommentInList, removeTableElementColumn, insertTableElementColumn, removeTableElementRow, insertTableElementRow, withCellStyle, getCellText, setCellText, pickSupportedMimeType, WEBM_MIME_CANDIDATES, fpsToFrameIntervalMs, segmentFrameCount, stopCaptureStream, GIF_POST_CAPTURE_MAX_SIDE, encodeGif, rasterizeElementTiles, placeTileOnPage, PDF_SLIDES_PAGE_WIDTH_PT, PDF_SLIDES_PAGE_HEIGHT_PT, createSnapshotTextPositions, resolvePresentationAction, getImageSvgFilters, getCachedNativeImageSize, probeNativeImageSize, buildDuotoneCacheKey, getDuotoneCachedResult, applyDuotone, setDuotoneCachedResult, svgLineCap, screenStrokeWidth, connectorWrapperTransform, ACTION_INDICATOR_CLASS, ACTION_INDICATOR_ICON_PATH, LINK_TOOLTIP_CLASS, LINK_TOOLTIP_PANEL_CLASS, LINK_TOOLTIP_LABEL_CLASS, LINK_TOOLTIP_HINT_CLASS, modelDataToBlobUrl, resolveZoomNavigationTarget, inlineListBodyText, createInlineListSeed, readListActivationSelection, createInlineListModelObserver, attachCollaborationInlineEditor, bindInlineListParagraph, bindInlineListRun, attachInlineListController, restoreInlineListBodySelection, isBulletMarkerSegment, resolveChartThreeViewSpec, applyChart3DDrag, applyChart3DSelect, canDrillDown, findChartPartTarget, withChartTitle, resolveSmartArtThreeViewSpec, measureSvgViewportRect, isBrowserOpenableMime, formatBytes, getOleDisplayName, getOleBadgeLabel, hasGlyphEnvelope, buildGlyphEnvelopeBlock, getWarpPath, isWedgeCalloutPresetShape, getAriaRole as getAriaRole$1, isElementActionable, buildSmartArtPresetData, classifyMediaType, getDraggedShapeAdjustments, computeMarqueeHitIds, mergeAdditiveSelection, planPrintJob, openPrintWindow, buildVectorPrintJobDocument, openPendingPrintWindow, borrowExternalCollaborationAwareness, observeExternalCollaborationSession, publishLiveGeometry, rasterizeElementTiledToCanvas, clampGifDimensions, rasterResultToPngDataUrl, shouldConfirmExternalHyperlink, advanceChartMarkDrag, advanceChartValueDrag, resolveChartKind, buildChartMarkDragGeometry, beginChartMarkDrag, beginChartValueDrag, findSmartArtNodeText, commitSmartArtNodeFill, commitSmartArtNodeText, groupIntoParagraphs as groupIntoParagraphs$1, createGlyphOutlineLookup, finishPrintWindow, buildRasterPrintJobDocument, applyMotionPathPreset, resolveRevealedSmartArtNodes, resolveRevealedDrawingShapes, buildSmartArtA11y, computeSmartArtElementLayout, flattenNodes, computeInlineEditorRect, smartArtNodeAtPoint, SMARTART_DEFAULT_PALETTE, computeDrawingViewBox, projectDrawingShapes, resolveRevealedDrawingShapeNodeIds, styleShadowFilter, buildChromeStyle, refreshSmartArtPictureImage, centeredSvgTextLines, rebuildDrawingShapesIfCleared, shouldCommitSmartArtNodeText, bringForward, sendBackward, bringToFront, sendToBack } from 'ooxml-ui/pptx';
1
+ import { cloneTemplateElementsBySlideId, cloneSlide, cloneHistorySnapshot, MIN_ELEMENT_SIZE, ZOOM_TO_SELECTION_PADDING, DEFAULT_CANVAS_HEIGHT, DEFAULT_CANVAS_WIDTH, useTranslation, partitionTemplateElements, isTemplateElementId, DEFAULT_TABLE_ROWS, DEFAULT_TABLE_COLUMNS, comparePresentation, UNGROUPED_SECTION_ID, DEFAULT_SECTION_GROUP_ID, stopAllPersistentAudio, buildSaveSlides, MAX_ZOOM_SCALE, MIN_ZOOM_SCALE, getImageEffectsOpacity, getImageEffectsFilter, getImageRenderStyle, cn, isEditableTextElement, getShapeVisualStyle, getTextStyleForElement, DEFAULT_TEXT_COLOR, renderVectorShape, isConnectorOrLineElement, build3DExtrusionData, getImageSurfaceStyle, getTextLayoutStyle, renderTableElement, renderMediaElement, shouldRenderFallbackLabel, getElementLabel, normalizeHexColor, makeCloneId, DEFAULT_TEXT_FONT_SIZE, buildPdfFromTiledImageData, GRID_SIZE, copyFormatFromElement, hasCopyableFormat, isImageTiled, getDuotoneColors, DEFAULT_STROKE_COLOR, DEFAULT_FILL_COLOR, buildCssGradientFromShapeStyle, getCropShapeClipPath, getElementTransform, hasDagDuotoneEffect, renderDagDuotoneSvgFilter, getImageSurfaceMaskStyle, getTextWarpStyle, getTextCompensationTransform, getTextCompensationOrigin, renderTextSegments, buildReactChartViewModel, renderChartElement, buildInkGroupStrokes, getInkReplayStyles, INK_REPLAY_KEYFRAMES, buildContentPartStrokes, getContentPartReplayStyles, buildTextBody3DSceneStyle, rerouteConnectorsForMovedElements, applyReroutedConnectors, updateCellTextStyleInRawXml, updateCellTextInRawXml, splitCell, updateMergeAttrsInRawXml, mergeCells, buildNotesPdf, canvasToJpegData, applyFormatToElement, isPpactionUrl, parsePpactionUrl, getImageTilingStyle, buildCacheKey, DEFAULT_COLOR_CHANGE_TOLERANCE, getCachedResult, applyColorChange, setCachedResult, colorWithOpacity, normalizeStrokeDashType, getSvgStrokeDasharray, getCompoundLineOffsets, getCompoundLineWidths, getConnectorPathGeometry, buildLineShadowCss, buildLineGlowFilter, renderConnectorMarker, getAriaRoleDescription as getAriaRoleDescription$1, getAriaLabel as getAriaLabel$1, getAriaRole, DEFAULT_FONT_FAMILY, ACTION_BUTTON_PRESETS, isUrlSafe, substituteFieldText, HYPERLINK_COLOR } from './chunk-5ZW3GP6C.mjs';
2
+ import { defineThreeViewElement, MIN_TOUCH_TARGET_PX, computeVirtualRange, DEFAULT_VIRTUAL_OVERSCAN, createCollaborationSessionController, registerCollaborationTeardown, createPresenceProjector, BROADCAST_THROTTLE_MS, sanitizeColor, createEditorHistoryController, historyTheme, crossedHistoryTheme, createWheelStepBuffer, createViewerZoomStore, clampZoomScale, mapEditingWheel, createActiveAnimationGroup, cancelBuildReveal, clearPlaybackTimers, PresentationAnimationController, resolveMediaTimeNodeElementIds, resolveMediaBookmarkTimesMs, advanceMainSequence, playGroup, PRESENTATION_HASH, PRESENTATION_NONCE_KEY, PRESENTATION_CHANNEL_NAME, swapPresentationWindows, PRESENTATION_MESSAGE_ORIGIN, clearAudienceContent, buildPresentationAudienceUrl, resolveAudienceScreenPlacement, placeAudienceWindow, storeAudienceContent, isPresentationSessionMessage, endAudienceDisplay, createPresentationKeyBuffer, acceptsPresentationInput, resolveAutoAdvanceDelayMs, resolveShowBackward, resolveShowForward, beginZoomExcursion, buildZoomTransitionOverride, createPresenterShowGuard, firstShowSlideIndex, attachPresentationVisibilityPause, presentationEntrySlideIndex, buildMorphTransitionPlan, morphOptionToMode, buildMorphAnimationRules, INITIAL_FIND_REPLACE_SESSION, findReplaceSessionActions, visibleTemplateElements, createCollaborationLivePatcher, reportInlineTextDraft, initialInspectorOpen, createPresentationLoadResources, collectMediaElements, resolveMediaElementSource, collectImagePaths, applyImagePathPatches, resolveTableCellImageUrls, resolveTableStyleImageUrls, resolveTextFillBlipUrls, seedRecentColors, resolveAuthoredCustomShowId, GlyphOutlineFontCache, buildInitialGuides, readOnlyRecommendation, compatibilityWarningToasts, resolveInitialSlideIndex, pptxLoadErrorMessage, resolveAutosaveIntervalMs, createAutosaveController, saveAutosaveSnapshot, updateMasterViewElement, updateElement, masterViewElements, replaceMasterViewElements, addSection, renameSection, deleteSection, moveSectionUp, moveSectionDown, moveSlidesToSection, canMergeShapes, canInteractWithElement, prepareHtml2CanvasClone, html2canvasCaptureScope, slideProgressPercent, slideStatusLabel, EXPORT_ASSEMBLING_PERCENT, EXPORT_DONE_PERCENT, isExportAbortError, DEFAULT_VIEWER_OPTIONS, resolveImageResolutionScale, applyAcceptSlide, applyAcceptAllSlides, collectUsedFonts, describeFontEmbedding, isMobileViewport, resolveAuthoredSlideRange, mayLeaveSlideShow, buildDeckSaveOptions, resolveSlideSizeSelection, saveDeckWithPassword, createAutosaveRecoveryController, discardAutosaveRecovery, probeAutosaveRecovery, shouldLoopContinuously, applyRehearsalTimings, rasterResultToPngBlob, downloadBlob, elementPictureFilename, canEditElementPoints, resolveGoogleFontsCss2Base, selectTrustedEmbeddedFonts, resolveFontWeight, resolveFontItalic, collectReferencedFontFamilies, resolveGoogleWebfontHref, syncGoogleWebfontStylesheet, selectGoogleWebfontFamilies, fetchGoogleWebfontOutlineBytes, dispatchEditorKey, isFeatureEnabled, parentSelection, textFontSizePtToPx, stepFontSizePt, textFontSizePxToPt, cycleSelectableElement, createCustomizationController, gateViewerEdits, prepareElementForInsertion, slideSpaceElement, resolveReportedViewerMode, autosaveStatusKind, createViewerOptionsStore, observeYDocSlides, LOCAL_SYNC_ORIGIN, readSlidesFromYDoc, shouldRoomSlidesReplaceLoad, reconcileSlidesInYDoc, shouldAutoFollowBroadcaster, detectTouchDevice, detectOrientation, deriveViewportBreakpoints, createTouchGestureRecognizer, isKeyboardOpen, scopeLayoutOptionsToSlide, collaborationHistoryReady, bindCollaborationHistory, INITIAL_READ_ONLY_SESSION, readOnlySessionActions, applyReadOnlySessionEvent, readOnlyBannerVisible, readOnlyLocked, viewerPreferencesFromViewProperties, DEFAULT_VIEWER_PREFERENCES, viewPropertiesPatchFromPreferences, resolveCollaborationConfig, openPptxFile, readBackstageRecentFile, resolveCollaborationShellEditability, resolveCollaborationShellState, getResizeHandleHitAreaStyle, resolveElementInteractivity, getBackgroundAnimationState, getShapeEffectLayerPlacement, buildTextStyleOverrideCss, isElementRendered, resolveElementAriaAttributes, isMediaFullscreenActive, shouldRenderHitTarget, elementHitTargetStyle, getShapeEffectAnimationLayerStyle, inlineElementPointerEvents, isHollowShapeElement, LINK_TOOLTIP_HOST_CLASS, resolvePalette as resolvePalette$1, mediaTransportVisible, oleActionsVisible, getGroupChildParentFill, deviceStrokeStageStyle, morphOverlayElementSlots, buildMorphOutlineRules, MORPH_CROSSFADE_GROUP_STYLE, MORPH_CROSSFADE_HALF_STYLE, getSlideTransitionAnimations, getFragmentedTransitionDescriptor, SLIDE_TRANSITION_KEYFRAMES, isActionHidden, buildInlineTextCommitPatch, resolveInlineEditAutoFitHeight, resolveInlineEditNormAutofitShrink, setPendingCaretPoint, resolveGroupDoubleClickTarget, filterInteractableIds, beginShapeAdjustment, buildElementClipboardPayload, promptNameDialog, generateCustomShowId, confirmDeleteDialog, contextMenuInspectorAnchor, savedPresentationFileName, deliverSavedPresentation, exportDeckJson, mapCustomizedEditorKey, isEditorTextInputTarget, groupElements, generateElementId, ungroupElements, alignElements, distributeElements, newTableElement, createDefaultChartElement, readViewportMetrics, computeKeyboardInset, planMergeShapes, applyMergeShapesPlan, mapPresentationKey, lastShowSlideIndex, mapPresentationWheel, createBlankSlide, insertSlidePaste, applySlidePasteTemplates, makeSlideId, insertedLayoutCompletion, buildSlideTemplateSlide, templateSchemeFromTheme, queueThemeWrite, needsOwnedSession, openOwnedCollaboration, resolveViewportFitOptions, editorViewportFitFor, calculateViewportFit, observeViewportClientSize, scheduleAutoAdvanceChain, computeEntranceAnimationDelay, createPresentationSessionId, resolveTransitionDurationMs, resolveTransitionSoundAction, runPresentationAction, safeOpenUrl, buildRunProgramNotice, toggleStageElementMedia, resolveOleVerbTarget, downloadDataUrl, openUrlInNewTab, createPresenterTimer, createInitialPresentationSnapshot, mergePresentationSnapshot, resetPresenterTimer, presenterElapsed, stepPresenterZoom, togglePresenterTimer, addCommentToList, removeCommentFromList, editCommentInList, toggleCommentResolvedInList, slideSpaceMembers, remapTextToSegments, getInlineEditorSelectionResult, buildInlineListStylePatch, applyActiveInlineListFormatting, applyListStyleUpdate, setPendingSelectionRestore, applyTextStyleUpdate, toggleSelectionBullets, transformInlineListCase, applyCaseTransformToSegments, transformTextCase, createGestureController, resolveExportCaptureDecision, recordProgressPercent, computeGridSpacingPx as computeGridSpacingPx$1, resolveShowSlideIndexes, groupSlidesBySection, masterViewPseudoSlide, overlayMasterViewInlineSnapshot, overlayInlineTextSnapshot, rasterizeElement, cloneElementForPaste, applyPasteSpecialFormat, buildRasterPictureElement, cloneElementUpdates, assertElementUpdateTarget, prepareElementUpdateBatch, createWriteBackScheduler, writeBackReport, createSyncGate, observeExternalCollaborationReadiness, resolveHistoryDepth, lockExternalContentSetting, resolveAllowExternalContent, createBackstagePresentation, buildFieldSubstitutionContext, buildSlidesPaneFieldContext, buildSlidesPaneTableStyleContext, slidesPaneRehearsalTimings, openSlidesPaneLayoutGallery, getImageColorWashStyle, attachRotateHandlePlacement, getSelectionControlArtworkStyle, getSelectionOutlineColor, paintedStrokeWidth, ensureActionAffordanceStyles, resolveElementActionAffordance, actionAffordanceLabels, paintedElementSize, MEDIA_FULLSCREEN_OVERLAY_STYLE, elementContainerHeightStyle, getAnimationOpacity, abuttingEdgeBleedStyle, resolveElementHighlightClick, applyHighlightClickStyle, getComputedEffectStyle, getSoftEdgeSvgFilter, getEffectStyleSource, getBevelLightingSvgFilter, buildStrokeOutline, buildHollowHitOutline, buildSubpathFillOverlay, strokeOutlineViewBox, buildSummaryZoomView, readEditableText, placeCaretAt, takePendingCaretPoint, getPendingSelectionRestore, restoreSegmentSelection, mapInlineTextFormatKey, mapInlineEditorChord, subscribeBarFacePicturePixelSamples, getBarFacePicturePixelSampleVersion, ensureChartInteractionStyles, applyChartPartHighlight, resolveRevealedChartData, formatAxisValue, chartFormatTargetFromEvent, resolveOleType, getOleAriaLabel, getOleTypeColor, getOleTypeLabel, filterRenderedElements, resolveGroupChildFill, isLinkedTextBox, getOverflowSegments, shouldUseSvgWarp, getTextBodyRotationTransform, getTextCompensationStyle, placeholderPromptDescriptor, getAriaRoleDescription, getAriaLabel, elementIdSelector, TOOLBAR_TABS, resolveGroupPressTarget, scrollInspectorSectionIntoView, computeScrollDelta, buildOutlinePrintJobDocument, printJobRasterFallback, applyThemeByPath, withHistoryTheme, withHistoryMasterThemes, writeThemeParts, loadedThemeName, replyToCommentInList, removeTableElementColumn, insertTableElementColumn, removeTableElementRow, insertTableElementRow, withCellStyle, getCellText, setCellText, pickSupportedMimeType, WEBM_MIME_CANDIDATES, fpsToFrameIntervalMs, segmentFrameCount, stopCaptureStream, GIF_POST_CAPTURE_MAX_SIDE, encodeGif, rasterizeElementTiles, placeTileOnPage, PDF_SLIDES_PAGE_WIDTH_PT, PDF_SLIDES_PAGE_HEIGHT_PT, createSnapshotTextPositions, resolvePresentationAction, getImageSvgFilters, getCachedNativeImageSize, probeNativeImageSize, buildDuotoneCacheKey, getDuotoneCachedResult, applyDuotone, setDuotoneCachedResult, svgLineCap, connectorSnapTransform, connectorNeedsPath, connectorStrandScreenWidth, connectorWrapperTransform, ACTION_INDICATOR_CLASS, ACTION_INDICATOR_ICON_PATH, LINK_TOOLTIP_CLASS, LINK_TOOLTIP_PANEL_CLASS, LINK_TOOLTIP_LABEL_CLASS, LINK_TOOLTIP_HINT_CLASS, modelDataToBlobUrl, resolveZoomNavigationTarget, inlineListBodyText, createInlineListSeed, readListActivationSelection, createInlineListModelObserver, attachCollaborationInlineEditor, bindInlineListParagraph, bindInlineListRun, attachInlineListController, restoreInlineListBodySelection, isBulletMarkerSegment, resolveChartThreeViewSpec, applyChart3DDrag, applyChart3DSelect, canDrillDown, findChartPartTarget, withChartTitle, resolveSmartArtThreeViewSpec, measureSvgViewportRect, isBrowserOpenableMime, formatBytes, getOleDisplayName, getOleBadgeLabel, hasGlyphEnvelope, buildGlyphEnvelopeBlock, getWarpPath, isWedgeCalloutPresetShape, getAriaRole as getAriaRole$1, isElementActionable, buildSmartArtPresetData, classifyMediaType, getDraggedShapeAdjustments, computeMarqueeHitIds, mergeAdditiveSelection, planPrintJob, openPrintWindow, buildVectorPrintJobDocument, openPendingPrintWindow, borrowExternalCollaborationAwareness, observeExternalCollaborationSession, publishLiveGeometry, rasterizeElementTiledToCanvas, clampGifDimensions, rasterResultToPngDataUrl, openExternalHyperlinkConfirmed, advanceChartMarkDrag, advanceChartValueDrag, resolveChartKind, buildChartMarkDragGeometry, beginChartMarkDrag, beginChartValueDrag, findSmartArtNodeText, commitSmartArtNodeFill, commitSmartArtNodeText, groupIntoParagraphs as groupIntoParagraphs$1, createGlyphOutlineLookup, finishPrintWindow, buildRasterPrintJobDocument, applyMotionPathPreset, resolveRevealedSmartArtNodes, resolveRevealedDrawingShapes, buildSmartArtA11y, computeSmartArtElementLayout, flattenNodes, computeInlineEditorRect, smartArtNodeAtPoint, SMARTART_DEFAULT_PALETTE, computeDrawingViewBox, projectDrawingShapes, resolveRevealedDrawingShapeNodeIds, styleShadowFilter, buildChromeStyle, refreshSmartArtPictureImage, centeredSvgTextLines, rebuildDrawingShapesIfCleared, shouldCommitSmartArtNodeText, bringForward, sendBackward, bringToFront, sendToBack } from 'ooxml-ui/pptx';
3
3
  export { DUOTONE_PRESETS, MOBILE_BREAKPOINT, SLIDE_TRANSITION_KEYFRAMES, TABLET_BREAKPOINT, clearAudienceContent, computeVirtualRange, downloadBlob, getSlideTransitionAnimations, loadAudienceContent, storeAudienceContent } from 'ooxml-ui/pptx';
4
4
  import React17, { useRef, useState, useCallback, useEffect, useSyncExternalStore, useMemo, useContext, useLayoutEffect, createContext, useImperativeHandle, Suspense } from 'react';
5
5
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
@@ -902,6 +902,11 @@ function useEditorHistory(input) {
902
902
  const holdTracking = useCallback((held) => {
903
903
  trackingHeldRef.current = held;
904
904
  }, []);
905
+ const markSaved = useCallback(() => {
906
+ const snapshot = buildHistorySnapshot();
907
+ lastHistorySnapshotRef.current = snapshot;
908
+ lastHistorySerializedRef.current = serializeHistoryDocument(snapshot);
909
+ }, [buildHistorySnapshot]);
905
910
  return {
906
911
  commitSlides,
907
912
  holdTracking,
@@ -915,6 +920,7 @@ function useEditorHistory(input) {
915
920
  forgetHistory: history.forget,
916
921
  attachCollaboration: history.attachCollaboration,
917
922
  markDirty,
923
+ markSaved,
918
924
  withoutUndoStep,
919
925
  buildHistorySnapshot
920
926
  };
@@ -2910,9 +2916,13 @@ function usePresentationMode(input) {
2910
2916
  // `PresentationStage` stacks the incoming slide's elements above its
2911
2917
  // template shapes (`zIndex = templateElements.length + index`), so a
2912
2918
  // z-index journey has to start counting where the stage does.
2913
- { zIndexBase: incoming ? templateElementsBySlideId?.[incoming.id]?.length ?? 0 : 0 }
2919
+ // A turning flip is seen from the slide's centre (shared `morph-flip-turn`).
2920
+ {
2921
+ zIndexBase: incoming ? templateElementsBySlideId?.[incoming.id]?.length ?? 0 : 0,
2922
+ ...canvasSize ? { slideSize: canvasSize } : {}
2923
+ }
2914
2924
  );
2915
- }, [transitionOverlay, slides, templateElementsBySlideId]);
2925
+ }, [transitionOverlay, slides, templateElementsBySlideId, canvasSize]);
2916
2926
  const morphedElementStates = useMemo(() => {
2917
2927
  if (!morphPlan || morphPlan.incomingAnimations.size === 0) {
2918
2928
  return presentationElementStates;
@@ -7740,20 +7750,6 @@ function exportSlideToSvg(slide, width, height, options = {}) {
7740
7750
  }
7741
7751
  return svg;
7742
7752
  }
7743
- function safePrompt(message, defaultValue) {
7744
- try {
7745
- return window.prompt(message, defaultValue);
7746
- } catch {
7747
- return null;
7748
- }
7749
- }
7750
- function safeConfirm(message) {
7751
- try {
7752
- return window.confirm(message);
7753
- } catch {
7754
- return false;
7755
- }
7756
- }
7757
7753
 
7758
7754
  // src/viewer/hooks/useExportMediaHandlers.ts
7759
7755
  function useExportMediaHandlers(input) {
@@ -8626,6 +8622,7 @@ function usePropertyHandlers(input) {
8626
8622
  };
8627
8623
  }
8628
8624
  function useDialogCustomShows(input) {
8625
+ const { t } = useTranslation();
8629
8626
  const {
8630
8627
  activeSlide,
8631
8628
  customShows,
@@ -8645,16 +8642,20 @@ function useDialogCustomShows(input) {
8645
8642
  );
8646
8643
  history.markDirty();
8647
8644
  };
8648
- const handleCreateCustomShow = () => {
8649
- const name = safePrompt("Custom show name", "Custom Show");
8650
- const safeName = name?.trim() || `Custom Show ${customShows.length + 1}`;
8645
+ const handleCreateCustomShow = async () => {
8646
+ const name = await promptNameDialog(
8647
+ t("pptx.customShows.newNameLabel"),
8648
+ t("pptx.customShows.newDefaultName"),
8649
+ { t }
8650
+ );
8651
+ const safeName = name?.trim() || `${t("pptx.customShows.newDefaultName")} ${customShows.length + 1}`;
8651
8652
  const id = generateCustomShowId(customShows);
8652
8653
  const initialSlideRIds = activeSlide?.rId && activeSlide.rId.length > 0 ? [activeSlide.rId] : [];
8653
8654
  setCustomShows((prev) => [...prev, { id, name: safeName, slideRIds: initialSlideRIds }]);
8654
8655
  setActiveCustomShowId(id);
8655
8656
  history.markDirty();
8656
8657
  };
8657
- const handleRenameActiveCustomShow = () => {
8658
+ const handleRenameActiveCustomShow = async () => {
8658
8659
  if (!activeCustomShowId) {
8659
8660
  return;
8660
8661
  }
@@ -8662,14 +8663,14 @@ function useDialogCustomShows(input) {
8662
8663
  if (!show) {
8663
8664
  return;
8664
8665
  }
8665
- const nextName = safePrompt("Rename custom show", show.name)?.trim();
8666
+ const nextName = (await promptNameDialog(t("pptx.customShows.renamePrompt"), show.name, { t }))?.trim();
8666
8667
  if (!nextName) {
8667
8668
  return;
8668
8669
  }
8669
8670
  setCustomShows((prev) => prev.map((s) => s.id === show.id ? { ...s, name: nextName } : s));
8670
8671
  history.markDirty();
8671
8672
  };
8672
- const handleDeleteActiveCustomShow = () => {
8673
+ const handleDeleteActiveCustomShow = async () => {
8673
8674
  const showId = activeCustomShowId;
8674
8675
  if (!showId) {
8675
8676
  return;
@@ -8678,7 +8679,7 @@ function useDialogCustomShows(input) {
8678
8679
  if (!show) {
8679
8680
  return;
8680
8681
  }
8681
- if (!safeConfirm(`Delete custom show "${show.name}"?`)) {
8682
+ if (!await confirmDeleteDialog(t("pptx.customShows.deleteConfirm", { name: show.name }), { t })) {
8682
8683
  return;
8683
8684
  }
8684
8685
  setCustomShows((prev) => prev.filter((s) => s.id !== showId));
@@ -10389,6 +10390,27 @@ function useContentLifecycle(input) {
10389
10390
  };
10390
10391
  const serializeSlides = useSerialize(serializeInput);
10391
10392
  const serializeForRecovery = useSerialize({ ...serializeInput, purpose: "recovery-snapshot" });
10393
+ const getChangeSources = () => [
10394
+ slides,
10395
+ state.templateElementsBySlideId,
10396
+ state.guides,
10397
+ state.headerFooter,
10398
+ state.presentationProperties,
10399
+ state.customShows,
10400
+ state.sections,
10401
+ state.coreProperties,
10402
+ state.appProperties,
10403
+ state.customProperties,
10404
+ state.tagCollections,
10405
+ state.notesMaster,
10406
+ state.handoutMaster,
10407
+ state.embeddedFonts,
10408
+ embedFonts,
10409
+ password,
10410
+ state.inlineEditingElementIdRef.current,
10411
+ state.inlineEditingTextRef.current,
10412
+ state.inlineEditingSnapshotRef.current
10413
+ ];
10392
10414
  const { autosaveStatus } = useAutosave({
10393
10415
  isDirty: state.isDirty,
10394
10416
  filePath,
@@ -10396,36 +10418,12 @@ function useContentLifecycle(input) {
10396
10418
  serializeSlides: serializeForRecovery,
10397
10419
  enabled: autosaveEnabled,
10398
10420
  ...autosaveIntervalMs === void 0 ? {} : { intervalMs: autosaveIntervalMs },
10399
- // Everything `serializeForRecovery` reads that changes by REASSIGNMENT,
10400
- // so a poll that finds all of them unchanged can skip re-serializing a
10401
- // deck it has already snapshotted. The two refs are read by `.current`
10402
- // because an inline edit in progress lives there and nowhere else yet.
10403
10421
  onSaved: input.onAutosave,
10404
10422
  inlineDraftSinkRef: state.autosaveDraftSinkRef,
10405
10423
  getInlineEditingId: () => state.inlineEditingElementIdRef.current,
10406
- getChangeSources: () => [
10407
- slides,
10408
- state.templateElementsBySlideId,
10409
- state.guides,
10410
- state.headerFooter,
10411
- state.presentationProperties,
10412
- state.customShows,
10413
- state.sections,
10414
- state.coreProperties,
10415
- state.appProperties,
10416
- state.customProperties,
10417
- state.tagCollections,
10418
- state.notesMaster,
10419
- state.handoutMaster,
10420
- state.embeddedFonts,
10421
- embedFonts,
10422
- password,
10423
- state.inlineEditingElementIdRef.current,
10424
- state.inlineEditingTextRef.current,
10425
- state.inlineEditingSnapshotRef.current
10426
- ]
10424
+ getChangeSources
10427
10425
  });
10428
- return { handlerRef, serializeSlides, serializeForRecovery, autosaveStatus };
10426
+ return { handlerRef, serializeSlides, serializeForRecovery, autosaveStatus, getChangeSources };
10429
10427
  }
10430
10428
  function useKeyboardShortcuts(input) {
10431
10429
  const inputRef = useRef(input);
@@ -10770,7 +10768,7 @@ function useViewerIntegration(input) {
10770
10768
  });
10771
10769
  const [isEncryptedDialogOpen, setIsEncryptedDialogOpen] = useState(false);
10772
10770
  const [loadVersion, setLoadVersion] = useState(0);
10773
- const { handlerRef, serializeSlides, autosaveStatus } = useContentLifecycle({
10771
+ const { handlerRef, serializeSlides, autosaveStatus, getChangeSources } = useContentLifecycle({
10774
10772
  content,
10775
10773
  filePath,
10776
10774
  storage,
@@ -10853,164 +10851,167 @@ function useViewerIntegration(input) {
10853
10851
  });
10854
10852
  useImperativeHandle(
10855
10853
  ref,
10856
- () => latestHandleRef.current = {
10857
- ...customizationApi,
10858
- async getContent() {
10859
- const data = await serializeSlides();
10860
- if (data && onContentChange) {
10861
- onContentChange(data);
10862
- }
10863
- return data ?? new Uint8Array(0);
10864
- },
10865
- goTo(index) {
10866
- if (index >= 0 && index < slides.length) {
10867
- state.setActiveSlideIndex(index);
10868
- }
10869
- },
10870
- goPrev() {
10871
- const next = activeSlideIndex - 1;
10872
- if (next >= 0) {
10873
- state.setActiveSlideIndex(next);
10874
- }
10875
- },
10876
- goNext() {
10877
- const next = activeSlideIndex + 1;
10878
- if (next < slides.length) {
10879
- state.setActiveSlideIndex(next);
10880
- }
10881
- },
10882
- undo() {
10883
- history.handleUndo();
10884
- },
10885
- redo() {
10886
- history.handleRedo();
10887
- },
10888
- canUndo() {
10889
- return history.canUndo;
10890
- },
10891
- canRedo() {
10892
- return history.canRedo;
10893
- },
10894
- getZoom() {
10895
- return zoom.scale;
10896
- },
10897
- setZoom(level) {
10898
- zoom.setScale(clampZoomScale(level));
10899
- },
10900
- zoomIn() {
10901
- zoom.handleZoomIn();
10902
- },
10903
- zoomOut() {
10904
- zoom.handleZoomOut();
10905
- },
10906
- zoomReset() {
10907
- zoom.handleResetZoom();
10908
- },
10909
- getMode() {
10910
- return mode;
10911
- },
10912
- setMode(newMode) {
10913
- state.setMode(newMode);
10914
- },
10915
- getActiveSlideIndex() {
10916
- return activeSlideIndex;
10917
- },
10918
- getSlideCount() {
10919
- return slides.length;
10920
- },
10921
- isDirty() {
10922
- return state.isDirty;
10923
- },
10924
- getSelectedElementIds() {
10925
- return state.effectiveSelectedIds;
10926
- },
10927
- selectElements(ids) {
10928
- state.setSelectedElementIds(ids);
10929
- state.setSelectedElementId(ids[0] ?? null);
10930
- },
10931
- clearSelection() {
10932
- state.setSelectedElementIds([]);
10933
- state.setSelectedElementId(null);
10934
- },
10935
- // -- Active slide (alias) --
10936
- setActiveSlideIndex(index) {
10937
- if (index >= 0 && index < slides.length) {
10938
- state.setActiveSlideIndex(index);
10939
- }
10940
- },
10941
- // -- Slide access --
10942
- getSlides() {
10943
- return slides;
10944
- },
10945
- getSlide(index) {
10946
- return slides[index];
10947
- },
10948
- getActiveSlide() {
10949
- return slides[activeSlideIndex];
10950
- },
10951
- // -- Slide manipulation --
10952
- addSlide(afterIndex) {
10953
- if (afterIndex === void 0) {
10954
- editorOps.slideOps.handleAddSlide();
10955
- } else {
10956
- editorOps.slideOps.handleAddSlideAfter(afterIndex);
10957
- }
10958
- },
10959
- deleteSlides(indexes) {
10960
- editorOps.slideOps.handleDeleteSlides(indexes);
10961
- },
10962
- duplicateSlides(indexes) {
10963
- editorOps.slideOps.handleDuplicateSlides(indexes);
10964
- },
10965
- moveSlide(fromIndex, toIndex) {
10966
- editorOps.slideOps.handleMoveSlide(fromIndex, toIndex);
10967
- },
10968
- toggleHideSlides(indexes) {
10969
- editorOps.slideOps.handleToggleHideSlides(indexes);
10970
- },
10971
- // -- Element access --
10972
- getElements(slideIndex) {
10973
- const idx = slideIndex ?? activeSlideIndex;
10974
- const s = slides[idx];
10975
- return s?.elements ?? [];
10976
- },
10977
- getElementById(elementId, slideIndex) {
10978
- const idx = slideIndex ?? activeSlideIndex;
10979
- const s = slides[idx];
10980
- return s ? slideSpaceElement(s.elements, elementId) ?? void 0 : void 0;
10981
- },
10982
- // -- Element manipulation --
10983
- addElement(element) {
10984
- const inserted = prepareElementForInsertion(element, {
10985
- canEdit: canEdit && canInsertElement,
10986
- mode,
10987
- hasActiveSlide: !loading && !error && Boolean(activeSlide),
10988
- editTemplateMode: state.editTemplateMode
10989
- });
10990
- if (!inserted) {
10991
- return void 0;
10854
+ () => latestHandleRef.current = gateViewerEdits(
10855
+ {
10856
+ ...customizationApi,
10857
+ async getContent() {
10858
+ const data = await serializeSlides();
10859
+ if (data && onContentChange) {
10860
+ onContentChange(data);
10861
+ }
10862
+ return data ?? new Uint8Array(0);
10863
+ },
10864
+ goTo(index) {
10865
+ if (index >= 0 && index < slides.length) {
10866
+ state.setActiveSlideIndex(index);
10867
+ }
10868
+ },
10869
+ goPrev() {
10870
+ const next = activeSlideIndex - 1;
10871
+ if (next >= 0) {
10872
+ state.setActiveSlideIndex(next);
10873
+ }
10874
+ },
10875
+ goNext() {
10876
+ const next = activeSlideIndex + 1;
10877
+ if (next < slides.length) {
10878
+ state.setActiveSlideIndex(next);
10879
+ }
10880
+ },
10881
+ undo() {
10882
+ history.handleUndo();
10883
+ },
10884
+ redo() {
10885
+ history.handleRedo();
10886
+ },
10887
+ canUndo() {
10888
+ return history.canUndo;
10889
+ },
10890
+ canRedo() {
10891
+ return history.canRedo;
10892
+ },
10893
+ getZoom() {
10894
+ return zoom.scale;
10895
+ },
10896
+ setZoom(level) {
10897
+ zoom.setScale(clampZoomScale(level));
10898
+ },
10899
+ zoomIn() {
10900
+ zoom.handleZoomIn();
10901
+ },
10902
+ zoomOut() {
10903
+ zoom.handleZoomOut();
10904
+ },
10905
+ zoomReset() {
10906
+ zoom.handleResetZoom();
10907
+ },
10908
+ getMode() {
10909
+ return resolveReportedViewerMode(mode, canEdit);
10910
+ },
10911
+ setMode(newMode) {
10912
+ state.setMode(newMode);
10913
+ },
10914
+ getActiveSlideIndex() {
10915
+ return activeSlideIndex;
10916
+ },
10917
+ getSlideCount() {
10918
+ return slides.length;
10919
+ },
10920
+ isDirty() {
10921
+ return state.isDirty;
10922
+ },
10923
+ getSelectedElementIds() {
10924
+ return state.effectiveSelectedIds;
10925
+ },
10926
+ selectElements(ids) {
10927
+ state.setSelectedElementIds(ids);
10928
+ state.setSelectedElementId(ids[0] ?? null);
10929
+ },
10930
+ clearSelection() {
10931
+ state.setSelectedElementIds([]);
10932
+ state.setSelectedElementId(null);
10933
+ },
10934
+ // -- Active slide (alias) --
10935
+ setActiveSlideIndex(index) {
10936
+ if (index >= 0 && index < slides.length) {
10937
+ state.setActiveSlideIndex(index);
10938
+ }
10939
+ },
10940
+ // -- Slide access --
10941
+ getSlides() {
10942
+ return slides;
10943
+ },
10944
+ getSlide(index) {
10945
+ return slides[index];
10946
+ },
10947
+ getActiveSlide() {
10948
+ return slides[activeSlideIndex];
10949
+ },
10950
+ // -- Slide manipulation --
10951
+ addSlide(afterIndex) {
10952
+ if (afterIndex === void 0) {
10953
+ editorOps.slideOps.handleAddSlide();
10954
+ } else {
10955
+ editorOps.slideOps.handleAddSlideAfter(afterIndex);
10956
+ }
10957
+ },
10958
+ deleteSlides(indexes) {
10959
+ editorOps.slideOps.handleDeleteSlides(indexes);
10960
+ },
10961
+ duplicateSlides(indexes) {
10962
+ editorOps.slideOps.handleDuplicateSlides(indexes);
10963
+ },
10964
+ moveSlide(fromIndex, toIndex) {
10965
+ editorOps.slideOps.handleMoveSlide(fromIndex, toIndex);
10966
+ },
10967
+ toggleHideSlides(indexes) {
10968
+ editorOps.slideOps.handleToggleHideSlides(indexes);
10969
+ },
10970
+ // -- Element access --
10971
+ getElements(slideIndex) {
10972
+ const idx = slideIndex ?? activeSlideIndex;
10973
+ const s = slides[idx];
10974
+ return s?.elements ?? [];
10975
+ },
10976
+ getElementById(elementId, slideIndex) {
10977
+ const idx = slideIndex ?? activeSlideIndex;
10978
+ const s = slides[idx];
10979
+ return s ? slideSpaceElement(s.elements, elementId) ?? void 0 : void 0;
10980
+ },
10981
+ // -- Element manipulation --
10982
+ addElement(element) {
10983
+ const inserted = prepareElementForInsertion(element, {
10984
+ canEdit: canEdit && canInsertElement,
10985
+ mode,
10986
+ hasActiveSlide: !loading && !error && Boolean(activeSlide),
10987
+ editTemplateMode: state.editTemplateMode
10988
+ });
10989
+ if (!inserted) {
10990
+ return void 0;
10991
+ }
10992
+ editorOps.canvasHandlers.handleInlineEditCommit();
10993
+ editorOps.insertHandlers.addElement(inserted);
10994
+ editorOps.ops.applySelection(inserted.id, [inserted.id]);
10995
+ return inserted.id;
10996
+ },
10997
+ updateElements,
10998
+ updateElement(elementId, updates) {
10999
+ editorOps.ops.updateElementById(elementId, updates);
11000
+ },
11001
+ deleteElements(elementIds) {
11002
+ state.setSelectedElementIds(elementIds);
11003
+ state.setSelectedElementId(elementIds[0] ?? null);
11004
+ editorOps.manipulation.handleDelete();
11005
+ },
11006
+ duplicateElement(elementId) {
11007
+ state.setSelectedElementIds([elementId]);
11008
+ state.setSelectedElementId(elementId);
11009
+ editorOps.manipulation.handleDuplicate();
11010
+ return state.selectedElementIds[0];
10992
11011
  }
10993
- editorOps.canvasHandlers.handleInlineEditCommit();
10994
- editorOps.insertHandlers.addElement(inserted);
10995
- editorOps.ops.applySelection(inserted.id, [inserted.id]);
10996
- return inserted.id;
10997
- },
10998
- updateElements,
10999
- updateElement(elementId, updates) {
11000
- editorOps.ops.updateElementById(elementId, updates);
11001
11012
  },
11002
- deleteElements(elementIds) {
11003
- state.setSelectedElementIds(elementIds);
11004
- state.setSelectedElementId(elementIds[0] ?? null);
11005
- editorOps.manipulation.handleDelete();
11006
- },
11007
- duplicateElement(elementId) {
11008
- state.setSelectedElementIds([elementId]);
11009
- state.setSelectedElementId(elementId);
11010
- editorOps.manipulation.handleDuplicate();
11011
- return state.selectedElementIds[0];
11012
- }
11013
- },
11013
+ () => canEdit
11014
+ ),
11014
11015
  [
11015
11016
  updateElements,
11016
11017
  serializeSlides,
@@ -11095,6 +11096,7 @@ function useViewerIntegration(input) {
11095
11096
  handleEnterPresenterView,
11096
11097
  handleEnterRehearsalMode,
11097
11098
  autosaveStatus,
11099
+ getChangeSources,
11098
11100
  recovery,
11099
11101
  isEncryptedDialogOpen,
11100
11102
  setIsEncryptedDialogOpen,
@@ -11880,7 +11882,7 @@ function buildCanvasProps(input) {
11880
11882
  findResults,
11881
11883
  findResultIndex,
11882
11884
  viewerOptions,
11883
- buildHyperlinkConfirmMessage
11885
+ t
11884
11886
  } = input;
11885
11887
  const effectiveSlide = mode === "master" ? masterPseudoSlide : activeSlide;
11886
11888
  const effectiveTemplateElements = mode === "master" ? s.activeLayout ? s.activeMaster?.elements ?? [] : [] : templateElements;
@@ -11892,10 +11894,7 @@ function buildCanvasProps(input) {
11892
11894
  });
11893
11895
  const tableStyleContext = s.theme || s.tableStyleMap ? { theme: s.theme, tableStyleMap: s.tableStyleMap } : void 0;
11894
11896
  const openExternalUrl = (url, target) => {
11895
- if (shouldConfirmExternalHyperlink(viewerOptions, url) && !window.confirm(buildHyperlinkConfirmMessage(url))) {
11896
- return;
11897
- }
11898
- safeOpenUrl$1(url, target);
11897
+ void openExternalHyperlinkConfirmed(viewerOptions, url, { t }, target);
11899
11898
  };
11900
11899
  const handleActionClick = (elementId, action) => {
11901
11900
  if (mode === "present") {
@@ -13276,9 +13275,7 @@ function useViewerBuildingBlocks(input) {
13276
13275
  findResults: editorOps.findReplace.findResults,
13277
13276
  findResultIndex: editorOps.findReplace.findResultIndex,
13278
13277
  viewerOptions,
13279
- buildHyperlinkConfirmMessage: (url) => `${t("pptx.options.trust.confirmHyperlinks")}
13280
-
13281
- ${url}`
13278
+ t
13282
13279
  });
13283
13280
  canvasProps.collaborationOverlay = overlay;
13284
13281
  const slidesPaneProps = useSlidesPaneProps({
@@ -14506,6 +14503,12 @@ var ConnectorElementRendererMemo = /* @__PURE__ */ React17.memo(
14506
14503
  endY: viewHeight
14507
14504
  };
14508
14505
  const hitTargetWidth = Math.max(strokeWidth * 3, 14);
14506
+ const snapTransform = connectorSnapTransform(
14507
+ el,
14508
+ !connectorNeedsPath(shapeEl?.shapeType),
14509
+ compoundOffsets.length,
14510
+ strokeWidth
14511
+ );
14509
14512
  const selColor = selClr === "blue-400" ? "#60a5fa" : "#3b82f6";
14510
14513
  const lineShadow = buildLineShadowCss(el);
14511
14514
  const lineGlow = buildLineGlowFilter(el);
@@ -14623,6 +14626,7 @@ var ConnectorElementRendererMemo = /* @__PURE__ */ React17.memo(
14623
14626
  compoundOffsets.map((offset, idx) => /* @__PURE__ */ jsx(
14624
14627
  "path",
14625
14628
  {
14629
+ "data-pptx-line": "",
14626
14630
  d: pathGeometry.pathData,
14627
14631
  fill: "none",
14628
14632
  stroke: strokePaint,
@@ -14637,10 +14641,10 @@ var ConnectorElementRendererMemo = /* @__PURE__ */ React17.memo(
14637
14641
  style: {
14638
14642
  pointerEvents: "none",
14639
14643
  // Never under one device pixel on screen (shared `device-pixel-stroke`).
14640
- strokeWidth: screenStrokeWidth(Math.max(compoundWidths[idx] ?? strokeWidth, 1)),
14644
+ strokeWidth: connectorStrandScreenWidth(compoundWidths, strokeWidth, idx),
14641
14645
  ...offset !== 0 ? {
14642
14646
  transform: `translate(0, ${offset}px)`
14643
- } : {}
14647
+ } : snapTransform ? { transform: snapTransform } : {}
14644
14648
  }
14645
14649
  },
14646
14650
  idx
@@ -14783,7 +14787,8 @@ function getContainerStyle({
14783
14787
  animationState,
14784
14788
  shapeVisualStyle,
14785
14789
  has3DExtrusion,
14786
- templateEditing
14790
+ templateEditing,
14791
+ edgeBleed
14787
14792
  }) {
14788
14793
  const ss = hasShapeProperties(el) ? el.shapeStyle : void 0;
14789
14794
  const isPicture = el.type === "picture" || el.type === "image";
@@ -14794,7 +14799,7 @@ function getContainerStyle({
14794
14799
  const painted = paintedElementSize(el);
14795
14800
  const fs = MEDIA_FULLSCREEN_OVERLAY_STYLE;
14796
14801
  const heightStyle = isFullscreenMedia ? { height: fs.height } : el.type === "table" ? elementContainerHeightStyle(el, painted.height) : { height: painted.height };
14797
- return {
14802
+ const style = {
14798
14803
  left: isFullscreenMedia ? fs.left : el.x,
14799
14804
  top: isFullscreenMedia ? fs.top : el.y,
14800
14805
  width: isFullscreenMedia ? fs.width : painted.width,
@@ -14835,6 +14840,14 @@ function getContainerStyle({
14835
14840
  // set for normal slide content or while the mode is off.
14836
14841
  ...templateEditing ? { outline: "2px dashed rgb(217, 119, 6)", outlineOffset: "1px", opacity: opacity ?? 0.95 } : {}
14837
14842
  };
14843
+ return {
14844
+ ...style,
14845
+ ...abuttingEdgeBleedStyle(
14846
+ el,
14847
+ edgeBleed,
14848
+ style
14849
+ )
14850
+ };
14838
14851
  }
14839
14852
  function shapeParams(element) {
14840
14853
  const style = hasShapeProperties(element) ? element.shapeStyle : void 0;
@@ -15014,6 +15027,7 @@ function ShapeEffectOverlay({
15014
15027
  "svg",
15015
15028
  {
15016
15029
  className: "pptx-react-gradient-outline",
15030
+ "data-pptx-outline": "",
15017
15031
  "aria-hidden": "true",
15018
15032
  viewBox: strokeOutlineViewBox(element),
15019
15033
  preserveAspectRatio: "none",
@@ -15045,7 +15059,7 @@ function ShapeEffectOverlay({
15045
15059
  style: {
15046
15060
  // Never under one device pixel on screen (shared `device-pixel-stroke`).
15047
15061
  strokeWidth: strand.cssStrokeWidth,
15048
- transform: strand.offset !== 0 ? `translate(0, ${strand.offset}px)` : void 0
15062
+ transform: strand.cssTransform ?? (strand.offset !== 0 ? `translate(0, ${strand.offset}px)` : void 0)
15049
15063
  }
15050
15064
  },
15051
15065
  idx
@@ -15110,6 +15124,7 @@ var ElementRenderer = /* @__PURE__ */ React17.memo(
15110
15124
  opacity,
15111
15125
  templateEditing,
15112
15126
  zIndex,
15127
+ edgeBleed,
15113
15128
  imageAltText,
15114
15129
  showResizeHandles,
15115
15130
  renderInk: doInk,
@@ -15246,7 +15261,8 @@ var ElementRenderer = /* @__PURE__ */ React17.memo(
15246
15261
  animationState,
15247
15262
  shapeVisualStyle: backgroundAnimationState ? {} : ss,
15248
15263
  has3DExtrusion: extrusionData.hasExtrusion,
15249
- templateEditing
15264
+ templateEditing,
15265
+ edgeBleed
15250
15266
  });
15251
15267
  const interactionProps = getElementInteractionProps({
15252
15268
  element: el,
@@ -16079,7 +16095,7 @@ function InlineTextEditor({
16079
16095
  ...textStyle,
16080
16096
  ...warpStyle,
16081
16097
  transform: mergedTransform,
16082
- transformOrigin: warpStyle?.transformOrigin || "center"
16098
+ transformOrigin: warpStyle?.transformOrigin || (compensationTransform ? getTextCompensationOrigin(element) : "center")
16083
16099
  };
16084
16100
  const nextInlineStyleValue = (property) => {
16085
16101
  if (!hasTextProperties(element)) {
@@ -17622,7 +17638,8 @@ function renderTextElementBody(options) {
17622
17638
  );
17623
17639
  const scene3dStyle = hasTextProperties(el) ? buildTextBody3DSceneStyle(el.textStyle, { width: el.width, height: el.height }) : void 0;
17624
17640
  const rotationTransform = getTextBodyRotationTransform(el);
17625
- const composedTransform = [rotationTransform, getTextCompensationTransform(el), scene3dStyle?.transform].filter(Boolean).join(" ") || void 0;
17641
+ const compensation = getTextCompensationStyle(el);
17642
+ const composedTransform = [rotationTransform, compensation?.transform, scene3dStyle?.transform].filter(Boolean).join(" ") || void 0;
17626
17643
  const transformStyle = {
17627
17644
  transform: composedTransform,
17628
17645
  // A COM-measured homography (`scene3dStyle.transformOrigin === '0 0'`)
@@ -17633,7 +17650,7 @@ function renderTextElementBody(options) {
17633
17650
  // hardcoded to `'center'` unconditionally, silently clobbering
17634
17651
  // `scene3dStyle.transformOrigin` the same way Svelte's `ElementRenderer`
17635
17652
  // once re-clobbered `pointerEvents` from its own interactive flag.
17636
- transformOrigin: scene3dStyle?.transformOrigin ?? "center",
17653
+ transformOrigin: scene3dStyle?.transformOrigin ?? compensation?.transformOrigin ?? "center",
17637
17654
  ...scene3dStyle?.perspective ? { perspective: scene3dStyle.perspective } : {},
17638
17655
  // COM-calibrated off-axis correction for a handful of camera presets
17639
17656
  // (see `visual-3d-camera`'s module doc comment); only reachable when an
@@ -18151,7 +18168,7 @@ function getStaticElementVisualState(element, parentGroupFill) {
18151
18168
  element.type === "shape" && hasFill ? defaultTextColorForFill(fill) : DEFAULT_TEXT_COLOR
18152
18169
  );
18153
18170
  const isImage = element.type === "picture" || element.type === "image";
18154
- const letsTextOverflow = hasTextProperties(element) && element.textStyle?.autoFitMode === "shrink" && (element.type === "text" || element.locks?.txBox === true);
18171
+ const letsTextOverflow = hasTextProperties(element) && Boolean(element.text?.trim());
18155
18172
  const shapeType = hasShapeProperties(element) ? element.shapeType : void 0;
18156
18173
  const isCallout = isWedgeCalloutPresetShape(shapeType) || String(shapeType ?? "").toLowerCase().includes("callout");
18157
18174
  return {
@@ -18432,7 +18449,8 @@ function FragmentedTransitionLayer({
18432
18449
  );
18433
18450
  }
18434
18451
  function overlayEntries(plan, incomingSlide) {
18435
- return plan.overlayLayers.filter((layer) => layer.side === "outgoing" || incomingSlide !== void 0).flatMap((layer) => layer.elements.map((element) => ({ element, side: layer.side }))).map((entry, zIndex) => ({ ...entry, zIndex }));
18452
+ const slots = morphOverlayElementSlots(plan);
18453
+ return plan.overlayLayers.filter((layer) => layer.side === "outgoing" || incomingSlide !== void 0).flatMap((layer) => layer.elements.map((element) => ({ element, side: layer.side }))).map((entry, index) => ({ ...entry, zIndex: slots.elements.get(entry.element.id) ?? index }));
18436
18454
  }
18437
18455
  function MorphTransitionOverlay({
18438
18456
  canvasSize,
@@ -18442,6 +18460,7 @@ function MorphTransitionOverlay({
18442
18460
  incomingSlide,
18443
18461
  containerRef
18444
18462
  }) {
18463
+ const groupSlots = morphOverlayElementSlots(morphPlan).groups;
18445
18464
  return /* @__PURE__ */ jsxs(
18446
18465
  "div",
18447
18466
  {
@@ -18451,7 +18470,11 @@ function MorphTransitionOverlay({
18451
18470
  className: "pptx-react-transition-overlay absolute inset-0 pointer-events-none overflow-hidden",
18452
18471
  style: { zIndex: 40 },
18453
18472
  children: [
18454
- /* @__PURE__ */ jsx("style", { children: morphPlan.keyframesCss }),
18473
+ /* @__PURE__ */ jsx("style", { children: [
18474
+ morphPlan.keyframesCss,
18475
+ buildMorphOutlineRules(morphPlan, "data-pptx-morph-outgoing"),
18476
+ buildMorphOutlineRules(morphPlan, "data-pptx-morph-lifted")
18477
+ ].filter(Boolean).join("\n") }),
18455
18478
  /* @__PURE__ */ jsx("div", { className: "absolute inset-0 flex items-center justify-center", children: /* @__PURE__ */ jsxs(
18456
18479
  "div",
18457
18480
  {
@@ -18517,7 +18540,7 @@ function MorphTransitionOverlay({
18517
18540
  "data-pptx-morph-crossfade": group.incoming.id,
18518
18541
  style: {
18519
18542
  ...MORPH_CROSSFADE_GROUP_STYLE,
18520
- zIndex: morphPlan.outgoingElements.length + morphPlan.overlayIncomingElements.length + index
18543
+ zIndex: groupSlots[index] ?? morphPlan.outgoingElements.length + morphPlan.overlayIncomingElements.length + index
18521
18544
  },
18522
18545
  children: [
18523
18546
  /* @__PURE__ */ jsx(
@@ -18823,4 +18846,4 @@ function useResizablePanels() {
18823
18846
  };
18824
18847
  }
18825
18848
 
18826
- export { ACTION_VERB_MAP, ChartFormatContext, ChartPartSelectionProvider, CollaborationCursorOverlay, CollaborationProvider, ElementRenderer, FragmentedTransitionLayer, InlineCollaborationContext, MIN_TOUCH_TARGET, MorphTransitionOverlay, PresentationTransitionOverlay, RemoteSelectionOverlay, RemoteUserCursors, Rendering3DFlagsContext, ResizeHandles, SlideBackgroundImageLayer, SlideLayer, StaticElementRenderer, ViewerOptionsContext, ViewerOptionsStoreContext, computeToolbarVisibility, createReviewCommentsHost, detectTargetType, imgSrc, isAudienceTab, parseAudienceNonce, parseEmailUrl, parseSlideFromUrl, playAnimationSound, renderStrokeView, renderToCanvas, resolveSmartArtDataPalette, safePrompt, scopeLayoutOptionsToActiveSlide, useAnimationPlayback, useAnnotationHandlers, useAudienceMode, useAutosave, useBroadcastFollower, useCanvasInteractions, useChartFormatContext, useChartPartSelection, useClearSelectionOnSlideChange, useClipboardHandlers, useCollaboration, useCollaborationDocumentSync, useCollaborativeHistory, useCollaborativeState, useComments, useCompatibilityToastsState, useContentLifecycle, useController, useDerivedElementState, useDerivedSlideState, useDialogCustomShows, useEditorHistory, useEditorOperations, useElementManipulation, useElementOperations, useExportHandlers, useExportSaveAs, useFindReplace, useFollowMode, useFontInjection, useGroupAlignLayerHandlers, useIOHandlers, useInsertElements, useIsMobile, useKeyboardInsets, useKeyboardShortcutWiring, useKeyboardShortcuts, useLayoutSwitching, useLoadContent, useMergeShapesHandler, useModalDismissDrag, usePointerHandlers, usePresenceTracking, usePresentationAnnotations, usePresentationKeyboard, usePresentationMode, usePresentationSetup, usePresenterWindow, usePrintHandlers, usePropertyHandlers, useReadOnlyRecommendationState, useRecoveryDetection, useReducedMotion, useRehearsalTimings, useReportOnChange, useResizablePanels, useSectionOperations, useSerialize, useSheetDismissDrag, useSlideManagement, useSlideNavigation, useSwipeNavigation, useTableOperations, useThemeHandlers, useThemeSwitching, useToolbarVisibility, useTouchGestures, useViewPreferencesSync, useViewerBuildingBlocks, useViewerCoreState, useViewerDialogs, useViewerIntegration, useViewerOptions, useViewerOptionsContext, useViewerState, useViewerUIState, useVirtualizedSlides, useYjsDocumentSync, useYjsProvider, useZoomNavigation, useZoomViewport, withDisplayName };
18849
+ export { ACTION_VERB_MAP, ChartFormatContext, ChartPartSelectionProvider, CollaborationCursorOverlay, CollaborationProvider, ElementRenderer, FragmentedTransitionLayer, InlineCollaborationContext, MIN_TOUCH_TARGET, MorphTransitionOverlay, PresentationTransitionOverlay, RemoteSelectionOverlay, RemoteUserCursors, Rendering3DFlagsContext, ResizeHandles, SlideBackgroundImageLayer, SlideLayer, StaticElementRenderer, ViewerOptionsContext, ViewerOptionsStoreContext, computeToolbarVisibility, createReviewCommentsHost, detectTargetType, imgSrc, isAudienceTab, parseAudienceNonce, parseEmailUrl, parseSlideFromUrl, playAnimationSound, renderStrokeView, renderToCanvas, resolveSmartArtDataPalette, scopeLayoutOptionsToActiveSlide, useAnimationPlayback, useAnnotationHandlers, useAudienceMode, useAutosave, useBroadcastFollower, useCanvasInteractions, useChartFormatContext, useChartPartSelection, useClearSelectionOnSlideChange, useClipboardHandlers, useCollaboration, useCollaborationDocumentSync, useCollaborativeHistory, useCollaborativeState, useComments, useCompatibilityToastsState, useContentLifecycle, useController, useDerivedElementState, useDerivedSlideState, useDialogCustomShows, useEditorHistory, useEditorOperations, useElementManipulation, useElementOperations, useExportHandlers, useExportSaveAs, useFindReplace, useFollowMode, useFontInjection, useGroupAlignLayerHandlers, useIOHandlers, useInsertElements, useIsMobile, useKeyboardInsets, useKeyboardShortcutWiring, useKeyboardShortcuts, useLayoutSwitching, useLoadContent, useMergeShapesHandler, useModalDismissDrag, usePointerHandlers, usePresenceTracking, usePresentationAnnotations, usePresentationKeyboard, usePresentationMode, usePresentationSetup, usePresenterWindow, usePrintHandlers, usePropertyHandlers, useReadOnlyRecommendationState, useRecoveryDetection, useReducedMotion, useRehearsalTimings, useReportOnChange, useResizablePanels, useSectionOperations, useSerialize, useSheetDismissDrag, useSlideManagement, useSlideNavigation, useSwipeNavigation, useTableOperations, useThemeHandlers, useThemeSwitching, useToolbarVisibility, useTouchGestures, useViewPreferencesSync, useViewerBuildingBlocks, useViewerCoreState, useViewerDialogs, useViewerIntegration, useViewerOptions, useViewerOptionsContext, useViewerState, useViewerUIState, useVirtualizedSlides, useYjsDocumentSync, useYjsProvider, useZoomNavigation, useZoomViewport, withDisplayName };