pptx-react-viewer 2.17.0 → 2.18.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 (133) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/README.md +14 -14
  3. package/dist/{AiChatPanel-RZ4A7P4H.mjs → AiChatPanel-SSSBERWJ.mjs} +4 -4
  4. package/dist/AiChatPanel-SSSBERWJ.mjs.br +0 -0
  5. package/dist/AiChatPanel-SSSBERWJ.mjs.gz +0 -0
  6. package/dist/{AiChatPanel-HCHCVQN2.js → AiChatPanel-UN5DHPZY.js} +24 -24
  7. package/dist/AiChatPanel-UN5DHPZY.js.br +0 -0
  8. package/dist/AiChatPanel-UN5DHPZY.js.gz +0 -0
  9. package/dist/{Model3DScene-LK7LSQNH.js → Model3DScene-4RPYKC2I.js} +2 -2
  10. package/dist/Model3DScene-4RPYKC2I.js.br +0 -0
  11. package/dist/Model3DScene-4RPYKC2I.js.gz +0 -0
  12. package/dist/{Model3DScene-I7FR74AD.mjs → Model3DScene-LYEESYAI.mjs} +1 -1
  13. package/dist/Model3DScene-LYEESYAI.mjs.br +0 -0
  14. package/dist/Model3DScene-LYEESYAI.mjs.gz +0 -0
  15. package/dist/{PowerPointViewer-Du7u4INi.d.ts → PowerPointViewer-Cf4YHjdF.d.ts} +2 -2
  16. package/dist/{PowerPointViewer-Du7u4INi.d.ts.map → PowerPointViewer-Cf4YHjdF.d.ts.map} +1 -1
  17. package/dist/{SurfaceChart3DScene-ODQY77SZ.js → SurfaceChart3DScene-ACPKCWLJ.js} +2 -2
  18. package/dist/SurfaceChart3DScene-ACPKCWLJ.js.br +0 -0
  19. package/dist/SurfaceChart3DScene-ACPKCWLJ.js.gz +0 -0
  20. package/dist/{SurfaceChart3DScene-DEQP5O3U.mjs → SurfaceChart3DScene-JR62SOYO.mjs} +1 -1
  21. package/dist/{SurfaceChart3DScene-DEQP5O3U.mjs.br → SurfaceChart3DScene-JR62SOYO.mjs.br} +0 -0
  22. package/dist/SurfaceChart3DScene-JR62SOYO.mjs.gz +0 -0
  23. package/dist/{audience-content-store-BvqKy7Hf.d.ts → audience-content-store-CyS0oP6t.d.ts} +2 -2
  24. package/dist/{audience-content-store-BvqKy7Hf.d.ts.map → audience-content-store-CyS0oP6t.d.ts.map} +1 -1
  25. package/dist/{chunk-5BXATG54.js → chunk-4LWGAVAP.js} +239 -293
  26. package/dist/chunk-4LWGAVAP.js.br +0 -0
  27. package/dist/chunk-4LWGAVAP.js.gz +0 -0
  28. package/dist/{chunk-FXJOTEPO.mjs → chunk-7XF6S4AM.mjs} +1 -1
  29. package/dist/chunk-7XF6S4AM.mjs.br +0 -0
  30. package/dist/chunk-7XF6S4AM.mjs.gz +0 -0
  31. package/dist/{chunk-TCGXGD6E.js → chunk-ASKYZ5ZY.js} +544 -426
  32. package/dist/chunk-ASKYZ5ZY.js.br +0 -0
  33. package/dist/chunk-ASKYZ5ZY.js.gz +0 -0
  34. package/dist/{chunk-MQHC5TXI.mjs → chunk-BZOL6FXF.mjs} +25 -80
  35. package/dist/chunk-BZOL6FXF.mjs.br +0 -0
  36. package/dist/chunk-BZOL6FXF.mjs.gz +0 -0
  37. package/dist/{chunk-K2QU73KB.mjs → chunk-GODW6RNR.mjs} +9801 -6455
  38. package/dist/chunk-GODW6RNR.mjs.br +0 -0
  39. package/dist/chunk-GODW6RNR.mjs.gz +0 -0
  40. package/dist/{chunk-NQJPPIVH.js → chunk-ICZDMFF2.js} +1444 -1131
  41. package/dist/chunk-ICZDMFF2.js.br +0 -0
  42. package/dist/chunk-ICZDMFF2.js.gz +0 -0
  43. package/dist/{chunk-ATOUVRRQ.js → chunk-MAVLV56S.js} +3 -3
  44. package/dist/chunk-MAVLV56S.js.br +0 -0
  45. package/dist/chunk-MAVLV56S.js.gz +0 -0
  46. package/dist/{chunk-422DF424.mjs → chunk-O7FTUUXP.mjs} +464 -151
  47. package/dist/chunk-O7FTUUXP.mjs.br +0 -0
  48. package/dist/chunk-O7FTUUXP.mjs.gz +0 -0
  49. package/dist/{chunk-ZA5JONCW.mjs → chunk-QUB5OSKY.mjs} +193 -75
  50. package/dist/chunk-QUB5OSKY.mjs.br +0 -0
  51. package/dist/chunk-QUB5OSKY.mjs.gz +0 -0
  52. package/dist/{chunk-AONFHTTJ.js → chunk-RTUGI4HQ.js} +27 -4
  53. package/dist/chunk-RTUGI4HQ.js.br +0 -0
  54. package/dist/chunk-RTUGI4HQ.js.gz +0 -0
  55. package/dist/{chunk-S64T7C4V.mjs → chunk-SNL6LBRX.mjs} +27 -4
  56. package/dist/chunk-SNL6LBRX.mjs.br +0 -0
  57. package/dist/{chunk-S64T7C4V.mjs.gz → chunk-SNL6LBRX.mjs.gz} +0 -0
  58. package/dist/{chunk-7JPLVECA.js → chunk-WVDM36ZM.js} +9838 -6458
  59. package/dist/chunk-WVDM36ZM.js.br +0 -0
  60. package/dist/chunk-WVDM36ZM.js.gz +0 -0
  61. package/dist/i18n.js +4 -4
  62. package/dist/i18n.js.br +0 -0
  63. package/dist/i18n.js.gz +0 -0
  64. package/dist/i18n.mjs +1 -1
  65. package/dist/i18n.mjs.br +0 -0
  66. package/dist/i18n.mjs.gz +0 -0
  67. package/dist/index.d.ts +497 -16
  68. package/dist/index.d.ts.map +1 -1
  69. package/dist/index.js +65 -41
  70. package/dist/index.js.br +0 -0
  71. package/dist/index.js.gz +0 -0
  72. package/dist/index.mjs +6 -6
  73. package/dist/index.mjs.br +0 -0
  74. package/dist/index.mjs.gz +0 -0
  75. package/dist/internals.d.ts +543 -32
  76. package/dist/internals.d.ts.map +1 -1
  77. package/dist/internals.js +79 -79
  78. package/dist/internals.js.br +0 -0
  79. package/dist/internals.js.gz +0 -0
  80. package/dist/internals.mjs +4 -4
  81. package/dist/internals.mjs.br +0 -0
  82. package/dist/internals.mjs.gz +0 -0
  83. package/dist/pptx-viewer.css +1 -1
  84. package/dist/pptx-viewer.css.br +0 -0
  85. package/dist/pptx-viewer.css.gz +0 -0
  86. package/dist/{types-DU35aAJK.d.ts → types-C_CTI-QE.d.ts} +3 -31
  87. package/dist/types-C_CTI-QE.d.ts.map +1 -0
  88. package/dist/{useViewerBuildingBlocks-C9-prKYB.d.ts → useViewerBuildingBlocks-DItilDbP.d.ts} +16 -3
  89. package/dist/useViewerBuildingBlocks-DItilDbP.d.ts.map +1 -0
  90. package/dist/viewer/index.d.ts +427 -39
  91. package/dist/viewer/index.js +27 -27
  92. package/dist/viewer/index.js.br +0 -0
  93. package/dist/viewer/index.js.gz +0 -0
  94. package/dist/viewer/index.mjs +6 -6
  95. package/dist/viewer/index.mjs.br +0 -0
  96. package/dist/viewer/index.mjs.gz +0 -0
  97. package/package.json +2 -2
  98. package/dist/AiChatPanel-HCHCVQN2.js.br +0 -0
  99. package/dist/AiChatPanel-HCHCVQN2.js.gz +0 -0
  100. package/dist/AiChatPanel-RZ4A7P4H.mjs.br +0 -0
  101. package/dist/AiChatPanel-RZ4A7P4H.mjs.gz +0 -0
  102. package/dist/Model3DScene-I7FR74AD.mjs.br +0 -0
  103. package/dist/Model3DScene-I7FR74AD.mjs.gz +0 -0
  104. package/dist/Model3DScene-LK7LSQNH.js.br +0 -0
  105. package/dist/Model3DScene-LK7LSQNH.js.gz +0 -0
  106. package/dist/SurfaceChart3DScene-DEQP5O3U.mjs.gz +0 -0
  107. package/dist/SurfaceChart3DScene-ODQY77SZ.js.br +0 -0
  108. package/dist/SurfaceChart3DScene-ODQY77SZ.js.gz +0 -0
  109. package/dist/chunk-422DF424.mjs.br +0 -0
  110. package/dist/chunk-422DF424.mjs.gz +0 -0
  111. package/dist/chunk-5BXATG54.js.br +0 -0
  112. package/dist/chunk-5BXATG54.js.gz +0 -0
  113. package/dist/chunk-7JPLVECA.js.br +0 -0
  114. package/dist/chunk-7JPLVECA.js.gz +0 -0
  115. package/dist/chunk-AONFHTTJ.js.br +0 -0
  116. package/dist/chunk-AONFHTTJ.js.gz +0 -0
  117. package/dist/chunk-ATOUVRRQ.js.br +0 -0
  118. package/dist/chunk-ATOUVRRQ.js.gz +0 -0
  119. package/dist/chunk-FXJOTEPO.mjs.br +0 -0
  120. package/dist/chunk-FXJOTEPO.mjs.gz +0 -0
  121. package/dist/chunk-K2QU73KB.mjs.br +0 -0
  122. package/dist/chunk-K2QU73KB.mjs.gz +0 -0
  123. package/dist/chunk-MQHC5TXI.mjs.br +0 -0
  124. package/dist/chunk-MQHC5TXI.mjs.gz +0 -0
  125. package/dist/chunk-NQJPPIVH.js.br +0 -0
  126. package/dist/chunk-NQJPPIVH.js.gz +0 -0
  127. package/dist/chunk-S64T7C4V.mjs.br +0 -0
  128. package/dist/chunk-TCGXGD6E.js.br +0 -0
  129. package/dist/chunk-TCGXGD6E.js.gz +0 -0
  130. package/dist/chunk-ZA5JONCW.mjs.br +0 -0
  131. package/dist/chunk-ZA5JONCW.mjs.gz +0 -0
  132. package/dist/types-DU35aAJK.d.ts.map +0 -1
  133. package/dist/useViewerBuildingBlocks-C9-prKYB.d.ts.map +0 -1
@@ -1,8 +1,8 @@
1
- import { computeFocusTargets, aiChangeAnimationCss, changeGhostStyle, createChatHistoryStore, toRenderableParts } from './chunk-FXJOTEPO.mjs';
2
- import { useReducedMotion, useViewerState, useViewerOptions, useIsMobile, useResizablePanels, useDerivedSlideState, useZoomViewport, useEditorHistory, usePresentationSetup, useTouchGestures, useViewerDialogs, useEditorOperations, useViewerIntegration, useLayoutSwitching, useYjsDocumentSync, useCollaborationLivePatch, useFollowMode, useBroadcastFollower, scopeLayoutOptionsToActiveSlide, useToolbarVisibility, useKeyboardInsets, useModalDismissDrag, useCollaborativeState, useVirtualizedSlides, useSwipeNavigation, useSheetDismissDrag, detectTargetType, parseEmailUrl, parseSlideFromUrl, ACTION_VERB_MAP, downloadBlob } from './chunk-ZA5JONCW.mjs';
3
- import { MIN_ELEMENT_SIZE, DEFAULT_STROKE_COLOR, getConnectorPathGeometry, buildLineShadowCss, buildLineGlowFilter, renderConnectorMarker, getShapeVisualStyle, getTextStyleForElement, DEFAULT_TEXT_COLOR, renderVectorShape, isConnectorOrLineElement, build3DExtrusionData, getImageRenderStyle, cn, getTextLayoutStyle, renderTableElement, renderMediaElement, shouldRenderFallbackLabel, SHAPE_PRESETS, ANIMATION_PRESET_OPTIONS, DEFAULT_FILL_COLOR, hasDagDuotoneEffect, renderDagDuotoneSvgFilter, getCropShapeClipPath, getImageTilingStyle, getDuotoneColors, getTextWarpStyle, renderTextSegments, buildReactChartViewModel, renderChartElement, buildTextBody3DSceneStyle, SLIDE_NAV_THUMBNAIL_WIDTH, DEFAULT_TEXT_FONT_SIZE, DEFAULT_FONT_FAMILY, TOOLBAR_SECTIONS, SHORTCUT_REFERENCE_ITEMS as SHORTCUT_REFERENCE_ITEMS$1, HYPERLINK_COLOR, GRID_SIZE, CONNECTOR_ARROW_OPTIONS, ARROW_SIZE_OPTIONS, startMotionPathPreview, startPreviewAnimation, stopPreviewAnimation, THEME_COLOR_SWATCHES, STROKE_DASH_OPTIONS } from './chunk-MQHC5TXI.mjs';
4
- import { LOCALE_CATALOG, translationsEn } from './chunk-S64T7C4V.mjs';
5
- import { hasShapeProperties, normalizeHexColor, colorWithOpacity, normalizeStrokeDashType, getSvgStrokeDasharray, getCompoundLineOffsets, getCompoundLineWidths, svgLineCap, hasTextProperties, getElementTransform, getAriaRoleDescription, getAriaLabel, getAriaRole, resolveElementInteractivity, isEditableTextElement, isElementRendered, isElementActionable, getImageEffectsOpacity, getImageEffectsFilter, getElementTransformWithoutRotation, inlineElementPointerEvents, isHollowShapeElement, LINK_TOOLTIP_HOST_CLASS, ACTION_BUTTON_PRESETS, mediaTransportVisible, isInkElement, getGroupChildParentFill, getElementLabel, SWITCHABLE_LAYOUT_TYPES, DEFAULT_VIEWER_OPTIONS, compileEquationTemplateMathMl, buildUserFontFaceStyles, readStoredViewerPrefs, resolveThemeCatalogEntry, THEME_CATALOG, writeStoredViewerPrefs, openPptxFile, readBackstageRecentFile, viewerOptionsToPreferences, applyPreferenceToOptions, listAutosaveSnapshots, deleteAutosaveSnapshot, resolveAutosaveIntervalSeconds, paintedStrokeWidth, buildCssGradientFromShapeStyle, ensureActionAffordanceStyles, resolveElementActionAffordance, actionAffordanceLabels, getComputedEffectStyle, getSoftEdgeSvgFilter, buildStrokeOutline, buildHollowHitOutline, strokeOutlineViewBox, revealedSmartArtNodeCount, buildSmartArtA11y, computeSmartArtLayout, flattenNodes, buildSummaryZoomView, isImageTiled, getImageColorWashStyle, isImageLikeElement, placeCaretAtEnd, getPendingSelectionRestore, restoreSegmentSelection, getTextCompensationTransform, applyChartBuildReveal, formatAxisValue, hasPressureVariation, getInkReplayStyles, INK_REPLAY_KEYFRAMES, resolveInkColor, resolveInkWidth, resolveInkOpacity, pressuresToWidths, getContentPartReplayStyles, resolveOleType, getOleTypeColor, getOleTypeLabel, filterRenderedElements, resolveGroupChildFill, isLinkedTextBox, getOverflowSegments, shouldUseSvgWarp, RULER_THICKNESS, RULER_FONT_SIZE, buildPreviewElements, deriveSlideFieldContext, SLIDE_TRANSITION_OPTIONS, hiddenSlideCue, HIDDEN_SLIDE_SLASH_GRADIENT, HIDDEN_SLIDE_LABEL_KEY, themeToCssVars, applyMotionPathPreset, resetSlideLayoutPath, DEFAULT_INSERT_CHART_KIND, hasCopyableFormat, templateSchemeFromTheme, createBackstagePresentation, printPropertiesFrameSlides, printPropertiesSlidesPerPage, VIEWER_OPTIONS_TABS, DEFAULT_QUICK_ACCESS_COMMAND_IDS, buildJoinCollaborationConfig, buildCreateCollaborationConfig, generateBroadcastRoomId, DEFAULT_BROADCAST_SERVER_URL, buildBroadcastViewerUrl, resolveTransportForServerUrl, ACTION_INDICATOR_CLASS, ACTION_INDICATOR_ICON_PATH, LINK_TOOLTIP_CLASS, LINK_TOOLTIP_PANEL_CLASS, LINK_TOOLTIP_LABEL_CLASS, LINK_TOOLTIP_HINT_CLASS, DEFAULT_PALETTE2, resolvePalette, computeDrawingViewBox, projectDrawingShapes, styleShadowFilter, resolveDrawingShapeNodeId, getImageSvgFilters, buildDuotoneCacheKey, getDuotoneCachedResult, applyDuotone, setDuotoneCachedResult, buildCacheKey, DEFAULT_COLOR_CHANGE_TOLERANCE, getCachedResult, applyColorChange, setCachedResult, findChartPartTarget, dragValueForPart, withChartPointValue, dragAnchorViewY, withChartTitle, buildSmartArt3DModel, extractPathPoints, generatePressureCircles, isBrowserOpenableMime, formatBytes, getOleBadgeLabel, openUrlInNewTab, getSubstituteFontFamily, getWarpPath, getSlideBackgroundStyle, filterCommands, resolveTitleBarStatusKey, TITLE_BAR_CLASSES, TITLE_BAR_DEFAULT_FILE_KEY, buildFieldSubstitutionContext, shouldConfirmExternalHyperlink, safeOpenUrl, isPpactionUrl, parsePpactionUrl, isPresentationAdvanceClick, toggleBlackboard, PRESENT_TOOLBAR_CLASSES, buildContextMenuEntries, themeColorSchemesEqual, EXPANDED_MAX_HEIGHT, STATUS_BAR_CLASSES, formatVersionTimestamp, formatRelativeTime, scanAvailableFontFamilies, PRESETS, CATEGORIES, convertOmmlToLatex, compileLatexEquation, convertLatexToOmml, EQUATION_TEMPLATES, clampPercent, HANDOUT_OPTIONS, TOOLBAR_TABS, SHORTCUT_REFERENCE_ITEMS, resolveViewerAddinRows, availableQuickAccessCommands, addQuickAccessCommand, removeQuickAccessCommand, moveQuickAccessCommand, CUSTOM_FONT_ACCEPT, activateModalFocus, buildCollaborationShareUrl, canGoPrevious, formatSlideCounter, READING_VIEW_COUNTER_ATTR, canGoNext, READING_VIEW_ATTR, OUTLINE_LEVEL_ATTR, OUTLINE_SLIDE_ATTR, OUTLINE_ROW_ATTR, OUTLINE_VIEW_ATTR, mobileElapsedSince, nextPresentedSlide, presenterPrevDisabled, presenterNextDisabled, formatMobileElapsed, mobileSlideCounter, presenterPaneAdvancesOnClick, presenterTimerProgress, PRESENTER_CONSOLE_CLASSES, formatElapsed, centeredSvgTextLines, computeInlineEditorRect, findSmartArtNodeText, setSmartArtNodeStyle, rebuildDrawingShapesIfCleared, shouldCommitSmartArtNodeText, updateSmartArtNodeText, groupIntoParagraphs, substituteFieldText, extraQuickAccessCommands, TAB_ROW_ACTION_CLASSES, listBackstageRecentFiles, BACKSTAGE_NAV, INSERT_CHART_TYPES, CHARACTER_SPACING_OPTIONS, RIBBON_SHAPE_SWATCHES, shapeFillChange, shapeOutlineChange, readRibbonTransitionDraft, ribbonTransitionUpdates, RIBBON_TRANSITION_PRESETS, DEFAULT_MOTION_PATH_PRESET_ID, SLIDE_SHOW_OPTIONS, slideShowOptionChange, readSlideShowOption, SLIDE_VIRTUALIZATION_THRESHOLD, PRESENTATION_HIT_TEST_CSS, PRESENTATION_STAGE_ATTRIBUTE, getSlideTransitionAnimations, SLIDE_TRANSITION_KEYFRAMES, annotationOverlayZIndex, presentationInkPath, motionPathFor, setMotionPath, getShapeAdjustmentHandleDescriptor, PRESENTER_NAVIGATOR_LABEL_KEYS, PEN_COLORS, HIGHLIGHTER_COLORS, isBlackboardActive, resolveSelectionPaneRename, PRESET_THEMES, normalizeSegments, createPlainNotesSegments, segmentsToEditorHtml, DEBOUNCE_MS, parseSegmentsFromRichEditor, segmentsToPlainText, getCurrentParagraphIndex, segmentsToParagraphs, paragraphsToSegments, MAX_INDENT_LEVEL, INDENT_PX, isUrlSafe, escapeHtml2, sanitizeMathMl, computeHandoutLayout, getPrintableArea, generateNoteLineCount, computeAllNotesPages, getNotesPrintableArea, QUICK_ACCESS_COMMAND_CATALOG, registerCustomFont, openReadingView, applyReadingViewCommand, createPresentationKeyBuffer, readingViewFitScale, READING_VIEW_STAGE_ATTR, buildOutline, applyOutlineEdit, mapOutlineKey, notesSegmentsToSpans, erasePresentationInkAt, movePresenterPointer, appendPresentationInkPoint, PRESENTER_CONSOLE_CONTROLS, NOTES_FONT_SIZE_DEFAULT, formatTime, NOTES_FONT_SIZE_MIN, clampNotesFontSize, NOTES_FONT_SIZE_STEP, NOTES_FONT_SIZE_MAX, BACKSTAGE_TEMPLATES, formatBackstageDate, formatBackstageSize, backstageCardsFor, DEFAULT_VIEWER_PROFILE, resolveProfileInitial, AVATAR_COLOR_SWATCHES, resolveDefaultFontFamily, buildFontCatalog, ENTRANCE_PRESET_VALUES, EMPHASIS_PRESET_VALUES, EXIT_PRESET_VALUES, MOTION_PATH_FAMILIES, motionPathFamilyLabelKey, motionPathPresetsByFamily, motionPathPresetLabelKey, masterViewPseudoSlide, authorConnectorBetweenSites, generateTicks, rulerDragToGuidePosition, getCommentMarkerPosition, getConnectionSites, motionPathToSvgD, motionPathEndPixel, isEditableMotionPath, setMotionPathEnd, themeColorLabel, buildThemeColorGrid, THEME_COLOR_SCHEME_KEYS, COMMON_FONTS, buildSmartArtPresetData, handleReadingViewKey, getLocalStorageUsageSummary, saveViewerProfile, clearAllLocalViewerData, isCurrentLayout, SLIDE_TEMPLATES, isElementLocked, mergeSlideTransition, buildLayoutPreviewGeometry, buildSlideTemplateContent, elementLockTogglePatch, buildTableDataGrid, appendTableElementRow, removeLastTableElementRow, appendTableElementColumn, removeLastTableElementColumn, removeTableElementColumn, removeTableElementRow, setTableElementCellText, TABLE_STYLE_PRESETS, chartDataChangeType, setChartCategoryLabel, setChartCellValue, addChartCategory, removeChartCategory, addChartSeries, removeChartSeries, setChartAxisLogScale, setChartAxisTitleStyle, setChartAxisGridlineStyle, setChartSeriesMarker, setChartSeriesChartType, setChartDataPointFill, setChartDataPointExplosion, setChartDataPointMarker, setChartDataPointLabel, getOleObjectTypeLabel, sanitizeGradientStops, pptxActionToElementAction, withFrameSlides, withSlidesPerPage, applyThemeOverrideToSlide, COLOR_MAP_ALIAS_KEYS, DEFAULT_COLOR_MAP, schemaLabel, THEME_COLOR_SLOT_LABEL_KEYS, TRANSITION_VALID_DIRECTIONS, TRANSITION_ORIENTATION_TYPES, clampTransitionNumber, flattenTagCollections, formatCommentTimestamp, clearMotionPath, DIRECTIONAL_PRESETS, motionPathPresetIdForPath, computeMergeCellRight, computeMergeCellDown, computeSplitCell, SMARTART_COLOR_SCHEME_LABEL_KEYS, SMARTART_STYLE_LABEL_KEYS, addSmartArtNodeAsChild, removeSmartArtNode, clampCropValue, DUOTONE_PRESETS, ARTISTIC_EFFECTS, resolveActionType, ELEMENT_ACTION_TYPE_OPTIONS, toSlideIndex, elementActionToPptxAction, canCommitActionType, TRANSITION_DIR_ARROWS, buildDirectionGrid, updateTagInCollections, deleteTagFromCollections, addTagToCollections, animationEffectLabel, LBL, SEL, FILL_MODE_OPTIONS, SECTION_HEADING, NUM, switchSmartArtLayout, addSmartArtNode, demoteSmartArtNode, promoteSmartArtNode, reorderSmartArtNode, SHAPE_QUICK_STYLES, quickStyleSwatchCss, getPatternSvg, TEXT_WARP_PRESETS, warpPreviewPath, text3dPtToEmu, text3dEmuToPt, MATERIAL_PRESETS, GRADIENT_TYPE_OPTIONS, PATTERN_OPTIONS, FILL_PATTERN_LABEL_KEYS, openNativeEyeDropper, toggleText3dExtrusion, BEVEL_PRESETS } from './chunk-K2QU73KB.mjs';
1
+ import { computeFocusTargets, aiChangeAnimationCss, changeGhostStyle, createChatHistoryStore, toRenderableParts } from './chunk-7XF6S4AM.mjs';
2
+ import { useReducedMotion, useViewerState, useViewerOptions, useIsMobile, useResizablePanels, useDerivedSlideState, useZoomViewport, useEditorHistory, usePresentationSetup, useTouchGestures, useViewerDialogs, useEditorOperations, useViewerIntegration, useLayoutSwitching, useYjsDocumentSync, useCollaborationLivePatch, useFollowMode, useBroadcastFollower, scopeLayoutOptionsToActiveSlide, useToolbarVisibility, useKeyboardInsets, useModalDismissDrag, useCollaborativeState, useVirtualizedSlides, useSwipeNavigation, useSheetDismissDrag, detectTargetType, parseEmailUrl, parseSlideFromUrl, ACTION_VERB_MAP, downloadBlob } from './chunk-QUB5OSKY.mjs';
3
+ import { MIN_ELEMENT_SIZE, DEFAULT_STROKE_COLOR, getConnectorPathGeometry, buildLineShadowCss, buildLineGlowFilter, renderConnectorMarker, getShapeVisualStyle, getTextStyleForElement, DEFAULT_TEXT_COLOR, renderVectorShape, isConnectorOrLineElement, build3DExtrusionData, getImageRenderStyle, cn, getTextLayoutStyle, renderTableElement, renderMediaElement, shouldRenderFallbackLabel, SHAPE_PRESETS, ANIMATION_PRESET_OPTIONS, DEFAULT_FILL_COLOR, hasDagDuotoneEffect, renderDagDuotoneSvgFilter, getCropShapeClipPath, getImageTilingStyle, getDuotoneColors, getTextWarpStyle, renderTextSegments, buildReactChartViewModel, renderChartElement, buildTextBody3DSceneStyle, SLIDE_NAV_THUMBNAIL_WIDTH, DEFAULT_TEXT_FONT_SIZE, DEFAULT_FONT_FAMILY, TOOLBAR_SECTIONS, DEFAULT_SECTION_GROUP_ID, SHORTCUT_REFERENCE_ITEMS as SHORTCUT_REFERENCE_ITEMS$1, HYPERLINK_COLOR, GRID_SIZE, CONNECTOR_ARROW_OPTIONS, ARROW_SIZE_OPTIONS, startMotionPathPreview, startPreviewAnimation, stopPreviewAnimation, THEME_COLOR_SWATCHES, STROKE_DASH_OPTIONS } from './chunk-BZOL6FXF.mjs';
4
+ import { LOCALE_CATALOG, translationsEn } from './chunk-SNL6LBRX.mjs';
5
+ import { hasShapeProperties, normalizeHexColor, colorWithOpacity, normalizeStrokeDashType, getSvgStrokeDasharray, getCompoundLineOffsets, getCompoundLineWidths, svgLineCap, hasTextProperties, getElementTransform, getAriaRoleDescription, getAriaLabel, getAriaRole, resolveElementInteractivity, isEditableTextElement, isElementRendered, isElementActionable, getImageEffectsOpacity, getImageEffectsFilter, getElementTransformWithoutRotation, inlineElementPointerEvents, isHollowShapeElement, LINK_TOOLTIP_HOST_CLASS, ACTION_BUTTON_PRESETS, mediaTransportVisible, isInkElement, getGroupChildParentFill, getElementLabel, SWITCHABLE_LAYOUT_TYPES, DEFAULT_VIEWER_OPTIONS, compileEquationTemplateMathMl, buildUserFontFaceStyles, readStoredViewerPrefs, resolveThemeCatalogEntry, THEME_CATALOG, writeStoredViewerPrefs, openPptxFile, readBackstageRecentFile, viewerOptionsToPreferences, applyPreferenceToOptions, listAutosaveSnapshots, deleteAutosaveSnapshot, resolveAutosaveIntervalSeconds, paintedStrokeWidth, buildCssGradientFromShapeStyle, ensureActionAffordanceStyles, resolveElementActionAffordance, actionAffordanceLabels, getComputedEffectStyle, getSoftEdgeSvgFilter, buildStrokeOutline, buildHollowHitOutline, strokeOutlineViewBox, revealedSmartArtNodeCount, buildSmartArtA11y, computeSmartArtLayout, flattenNodes, buildSummaryZoomView, isImageTiled, getImageColorWashStyle, isImageLikeElement, placeCaretAtEnd, getPendingSelectionRestore, restoreSegmentSelection, getTextCompensationTransform, applyChartBuildReveal, formatAxisValue, hasPressureVariation, getInkReplayStyles, INK_REPLAY_KEYFRAMES, resolveInkColor, resolveInkWidth, resolveInkOpacity, pressuresToWidths, getContentPartReplayStyles, resolveOleType, getOleTypeColor, getOleTypeLabel, filterRenderedElements, resolveGroupChildFill, isLinkedTextBox, getOverflowSegments, shouldUseSvgWarp, getTextBodyRotationTransform, RULER_THICKNESS, RULER_FONT_SIZE, buildPreviewElements, deriveSlideFieldContext, SLIDE_TRANSITION_OPTIONS, hiddenSlideCue, HIDDEN_SLIDE_SLASH_GRADIENT, HIDDEN_SLIDE_LABEL_KEY, themeToCssVars, applyMotionPathPreset, resetSlideLayoutPath, DEFAULT_INSERT_CHART_KIND, hasCopyableFormat, templateSchemeFromTheme, createBackstagePresentation, setMasterViewBackgroundColor, printPropertiesFrameSlides, printPropertiesSlidesPerPage, VIEWER_OPTIONS_TABS, DEFAULT_QUICK_ACCESS_COMMAND_IDS, buildJoinCollaborationConfig, buildCreateCollaborationConfig, generateBroadcastRoomId, DEFAULT_BROADCAST_SERVER_URL, buildBroadcastViewerUrl, resolveTransportForServerUrl, ACTION_INDICATOR_CLASS, ACTION_INDICATOR_ICON_PATH, LINK_TOOLTIP_CLASS, LINK_TOOLTIP_PANEL_CLASS, LINK_TOOLTIP_LABEL_CLASS, LINK_TOOLTIP_HINT_CLASS, DEFAULT_PALETTE2, resolvePalette, computeDrawingViewBox, projectDrawingShapes, styleShadowFilter, resolveDrawingShapeNodeId, getImageSvgFilters, buildDuotoneCacheKey, getDuotoneCachedResult, applyDuotone, setDuotoneCachedResult, buildCacheKey, DEFAULT_COLOR_CHANGE_TOLERANCE, getCachedResult, applyColorChange, setCachedResult, findChartPartTarget, dragValueForPart, withChartPointValue, dragAnchorViewY, withChartTitle, buildSmartArt3DModel, extractPathPoints, generatePressureCircles, isBrowserOpenableMime, formatBytes, getOleBadgeLabel, openUrlInNewTab, getSubstituteFontFamily, getWarpPath, getSlideBackgroundStyle, filterCommands, resolveTitleBarStatusKey, TITLE_BAR_CLASSES, TITLE_BAR_DEFAULT_FILE_KEY, masterViewBackgroundColor, buildFieldSubstitutionContext, shouldConfirmExternalHyperlink, safeOpenUrl, isPpactionUrl, parsePpactionUrl, isPresentationAdvanceClick, toggleBlackboard, PRESENT_TOOLBAR_CLASSES, buildContextMenuEntries, themeColorSchemesEqual, EXPANDED_MAX_HEIGHT, STATUS_BAR_CLASSES, formatVersionTimestamp, formatRelativeTime, scanAvailableFontFamilies, PRESETS, CATEGORIES, convertOmmlToLatex, compileLatexEquation, convertLatexToOmml, EQUATION_TEMPLATES, clampPercent, HANDOUT_OPTIONS, TOOLBAR_TABS, SHORTCUT_REFERENCE_ITEMS, resolveViewerAddinRows, availableQuickAccessCommands, addQuickAccessCommand, removeQuickAccessCommand, moveQuickAccessCommand, CUSTOM_FONT_ACCEPT, activateModalFocus, buildCollaborationShareUrl, SORTER_MIN_ZOOM, SORTER_ZOOM_STEP, SORTER_MAX_ZOOM, canGoPrevious, formatSlideCounter, READING_VIEW_COUNTER_ATTR, canGoNext, READING_VIEW_ATTR, OUTLINE_LEVEL_ATTR, OUTLINE_SLIDE_ATTR, OUTLINE_ROW_ATTR, OUTLINE_VIEW_ATTR, mobileElapsedSince, nextPresentedSlide, presenterPrevDisabled, presenterNextDisabled, formatMobileElapsed, mobileSlideCounter, presenterPaneAdvancesOnClick, presenterTimerProgress, PRESENTER_CONSOLE_CLASSES, formatElapsed, centeredSvgTextLines, computeInlineEditorRect, findSmartArtNodeText, setSmartArtNodeStyle, rebuildDrawingShapesIfCleared, shouldCommitSmartArtNodeText, updateSmartArtNodeText, groupIntoParagraphs, substituteFieldText, extraQuickAccessCommands, TAB_ROW_ACTION_CLASSES, listBackstageRecentFiles, BACKSTAGE_NAV, INSERT_CHART_TYPES, CHARACTER_SPACING_OPTIONS, RIBBON_SHAPE_SWATCHES, shapeFillChange, shapeOutlineChange, readRibbonTransitionDraft, ribbonTransitionUpdates, playSlideTransitionPreview, RIBBON_TRANSITION_PRESETS, DEFAULT_MOTION_PATH_PRESET_ID, SLIDE_SHOW_OPTIONS, slideShowOptionChange, readSlideShowOption, SLIDE_VIRTUALIZATION_THRESHOLD, PRESENTATION_HIT_TEST_CSS, PRESENTATION_STAGE_ATTRIBUTE, getSlideTransitionAnimations, SLIDE_TRANSITION_KEYFRAMES, annotationOverlayZIndex, presentationInkPath, motionPathFor, setMotionPath, getShapeAdjustmentHandleDescriptors, PRESENTER_NAVIGATOR_LABEL_KEYS, PEN_COLORS, HIGHLIGHTER_COLORS, isBlackboardActive, slideSizeToCanvasPx, resolveSelectionPaneRename, PRESET_THEMES, normalizeSegments, createPlainNotesSegments, segmentsToEditorHtml, DEBOUNCE_MS, parseSegmentsFromRichEditor, segmentsToPlainText, getCurrentParagraphIndex, segmentsToParagraphs, paragraphsToSegments, MAX_INDENT_LEVEL, INDENT_PX, isUrlSafe, escapeHtml2, sanitizeMathMl, computeHandoutLayout, getPrintableArea, generateNoteLineCount, computeAllNotesPages, getNotesPrintableArea, QUICK_ACCESS_COMMAND_CATALOG, registerCustomFont, openReadingView, applyReadingViewCommand, createPresentationKeyBuffer, readingViewFitScale, READING_VIEW_STAGE_ATTR, buildOutline, applyOutlineEdit, mapOutlineKey, notesSegmentsToSpans, erasePresentationInkAt, movePresenterPointer, appendPresentationInkPoint, PRESENTER_CONSOLE_CONTROLS, NOTES_FONT_SIZE_DEFAULT, formatTime, NOTES_FONT_SIZE_MIN, clampNotesFontSize, NOTES_FONT_SIZE_STEP, NOTES_FONT_SIZE_MAX, BACKSTAGE_TEMPLATES, formatBackstageDate, formatBackstageSize, backstageCardsFor, DEFAULT_VIEWER_PROFILE, resolveProfileInitial, AVATAR_COLOR_SWATCHES, resolveDefaultFontFamily, buildFontCatalog, ENTRANCE_PRESET_VALUES, EMPHASIS_PRESET_VALUES, EXIT_PRESET_VALUES, MOTION_PATH_FAMILIES, motionPathFamilyLabelKey, motionPathPresetsByFamily, motionPathPresetLabelKey, masterViewPseudoSlide, authorConnectorBetweenSites, generateTicks, rulerDragToGuidePosition, getCommentMarkerPosition, collectConnectorSiteCandidates, getConnectorEndpointHandles, findConnectorSiteNear, motionPathToSvgD, motionPathEndPixel, isEditableMotionPath, setMotionPathEnd, themeColorLabel, buildThemeColorGrid, THEME_COLOR_SCHEME_KEYS, COMMON_FONTS, buildSmartArtPresetData, handleReadingViewKey, getLocalStorageUsageSummary, saveViewerProfile, clearAllLocalViewerData, isCurrentLayout, SLIDE_TEMPLATES, CONNECTOR_SITE_SNAP_PX, resolveConnectorEndpointUpdate, withConnectorEndpointUpdate, getShapeConnectionSites, isElementLocked, mergeSlideTransition, mapSlideSorterKey, isEditorTextInputTarget, clampSorterZoom, buildLayoutPreviewGeometry, buildSlideTemplateContent, elementLockTogglePatch, buildTableDataGrid, appendTableElementRow, removeLastTableElementRow, appendTableElementColumn, removeLastTableElementColumn, removeTableElementColumn, removeTableElementRow, setTableElementCellText, TABLE_STYLE_PRESETS, chartDataChangeType, setChartCategoryLabel, setChartCellValue, addChartCategory, removeChartCategory, addChartSeries, removeChartSeries, setChartAxisLogScale, setChartAxisTitleStyle, setChartAxisGridlineStyle, setChartSeriesMarker, setChartSeriesChartType, setChartDataPointFill, setChartDataPointExplosion, setChartDataPointMarker, setChartDataPointLabel, getOleObjectTypeLabel, sanitizeGradientStops, pptxActionToElementAction, withFrameSlides, withSlidesPerPage, applyThemeOverrideToSlide, COLOR_MAP_ALIAS_KEYS, DEFAULT_COLOR_MAP, schemaLabel, THEME_COLOR_SLOT_LABEL_KEYS, resolveSlideSizeSelection, SLIDE_SIZE_PRESETS, TRANSITION_VALID_DIRECTIONS, TRANSITION_ORIENTATION_TYPES, clampTransitionNumber, flattenTagCollections, formatCommentTimestamp, clearMotionPath, DIRECTIONAL_PRESETS, motionPathPresetIdForPath, computeMergeCellRight, computeMergeCellDown, computeSplitCell, SMARTART_COLOR_SCHEME_LABEL_KEYS, SMARTART_STYLE_LABEL_KEYS, addSmartArtNodeAsChild, removeSmartArtNode, clampCropValue, DUOTONE_PRESETS, ARTISTIC_EFFECTS, resolveActionType, ELEMENT_ACTION_TYPE_OPTIONS, toSlideIndex, elementActionToPptxAction, canCommitActionType, slideSizeFromPreset, withSlideSizeOrientation, TRANSITION_DIR_ARROWS, buildDirectionGrid, updateTagInCollections, deleteTagFromCollections, addTagToCollections, commentTextSegments, COMMENT_MENTION_CLASS, COMMENT_MENTION_ATTRIBUTE, animationEffectLabel, LBL, SEL, FILL_MODE_OPTIONS, SECTION_HEADING, NUM, switchSmartArtLayout, addSmartArtNode, demoteSmartArtNode, promoteSmartArtNode, reorderSmartArtNode, SHAPE_QUICK_STYLES, quickStyleSwatchCss, getPatternSvg, TEXT_WARP_PRESETS, warpPreviewPath, text3dPtToEmu, text3dEmuToPt, MATERIAL_PRESETS, GRADIENT_TYPE_OPTIONS, PATTERN_OPTIONS, FILL_PATTERN_LABEL_KEYS, openNativeEyeDropper, toggleText3dExtrusion, BEVEL_PRESETS } from './chunk-GODW6RNR.mjs';
6
6
  import React14, { createContext, useMemo, useState, useCallback, lazy, forwardRef, useEffect, useRef, Suspense, useLayoutEffect, useContext, Fragment as Fragment$1, useDeferredValue } from 'react';
7
7
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
8
8
  import { useTranslation } from 'react-i18next';
@@ -1060,7 +1060,7 @@ var EDGE_HANDLES = [
1060
1060
  ];
1061
1061
  function ResizeHandles({
1062
1062
  elementId,
1063
- adjustmentHandleDescriptor: adjH,
1063
+ adjustmentHandles,
1064
1064
  onResizePointerDown,
1065
1065
  onAdjustmentPointerDown,
1066
1066
  forcePointerEvents,
@@ -1178,16 +1178,17 @@ function ResizeHandles({
1178
1178
  ]
1179
1179
  }
1180
1180
  ) : null,
1181
- adjH ? /* @__PURE__ */ jsx(
1181
+ adjustmentHandles.map((adjH) => /* @__PURE__ */ jsx(
1182
1182
  "button",
1183
1183
  {
1184
1184
  type: "button",
1185
1185
  "aria-label": t("pptx.canvas.adjustShape"),
1186
+ "data-pptx-adjust-key": adjH.key,
1186
1187
  "data-pptx-compact": true,
1187
1188
  className: "absolute h-2.5 w-2.5 max-md:h-4 max-md:w-4 rotate-45 border border-amber-700 bg-amber-300 shadow z-10",
1188
1189
  style: {
1189
1190
  left: adjH.left - 5,
1190
- top: adjH.top,
1191
+ top: adjH.top - 5,
1191
1192
  cursor: adjH.cursor,
1192
1193
  ...HANDLE_TOUCH_ACTION,
1193
1194
  ...forcePointerEvents ? { pointerEvents: "auto" } : {}
@@ -1198,14 +1199,15 @@ function ResizeHandles({
1198
1199
  }
1199
1200
  e.stopPropagation();
1200
1201
  e.currentTarget.setPointerCapture?.(e.pointerId);
1201
- onAdjustmentPointerDown(elementId, e);
1202
+ onAdjustmentPointerDown(elementId, e, adjH);
1202
1203
  },
1203
1204
  onMouseDown: (e) => {
1204
1205
  e.stopPropagation();
1205
- onAdjustmentPointerDown(elementId, e);
1206
+ onAdjustmentPointerDown(elementId, e, adjH);
1206
1207
  }
1207
- }
1208
- ) : null
1208
+ },
1209
+ adjH.key
1210
+ ))
1209
1211
  ] });
1210
1212
  }
1211
1213
  var ConnectorElementRenderer = React14.memo(
@@ -1219,7 +1221,7 @@ var ConnectorElementRenderer = React14.memo(
1219
1221
  selectionColorClass: selClr,
1220
1222
  opacity,
1221
1223
  zIndex,
1222
- adjustmentHandleDescriptor: adjH,
1224
+ adjustmentHandles: adjH,
1223
1225
  onResizePointerDown,
1224
1226
  onAdjustmentPointerDown,
1225
1227
  animationState
@@ -1432,7 +1434,7 @@ var ConnectorElementRenderer = React14.memo(
1432
1434
  ResizeHandles,
1433
1435
  {
1434
1436
  elementId: el.id,
1435
- adjustmentHandleDescriptor: adjH,
1437
+ adjustmentHandles: adjH,
1436
1438
  onResizePointerDown,
1437
1439
  onAdjustmentPointerDown,
1438
1440
  forcePointerEvents: true
@@ -1770,7 +1772,7 @@ var ElementRenderer = React14.memo(
1770
1772
  showResizeHandles,
1771
1773
  renderInk: doInk,
1772
1774
  renderGroups: doGrp,
1773
- adjustmentHandleDescriptor: adjH,
1775
+ adjustmentHandles: adjH,
1774
1776
  onResizePointerDown,
1775
1777
  onAdjustmentPointerDown,
1776
1778
  onRotate,
@@ -1859,7 +1861,7 @@ var ElementRenderer = React14.memo(
1859
1861
  selectionColorClass: selClr,
1860
1862
  opacity,
1861
1863
  zIndex,
1862
- adjustmentHandleDescriptor: adjH,
1864
+ adjustmentHandles: adjH,
1863
1865
  onResizePointerDown,
1864
1866
  onAdjustmentPointerDown,
1865
1867
  animationState
@@ -2014,7 +2016,7 @@ var ElementRenderer = React14.memo(
2014
2016
  ResizeHandles,
2015
2017
  {
2016
2018
  elementId: el.id,
2017
- adjustmentHandleDescriptor: adjH,
2019
+ adjustmentHandles: adjH,
2018
2020
  onResizePointerDown,
2019
2021
  onAdjustmentPointerDown,
2020
2022
  rotation: el.rotation,
@@ -2586,7 +2588,7 @@ function FailedToLoad() {
2586
2588
  var LazyModel3DScene = React14.lazy(
2587
2589
  async () => {
2588
2590
  try {
2589
- return await import('./Model3DScene-I7FR74AD.mjs');
2591
+ return await import('./Model3DScene-LYEESYAI.mjs');
2590
2592
  } catch {
2591
2593
  return { default: FailedToLoad };
2592
2594
  }
@@ -3965,8 +3967,7 @@ function renderTextElementBody(options) {
3965
3967
  hasTextProperties(el) ? el.textStyle?.textWarpPreset : void 0
3966
3968
  );
3967
3969
  const scene3dStyle = hasTextProperties(el) ? buildTextBody3DSceneStyle(el.textStyle) : void 0;
3968
- const bodyRotation = hasTextProperties(el) ? el.textStyle?.textBodyRotation : void 0;
3969
- const rotationTransform = typeof bodyRotation === "number" && Number.isFinite(bodyRotation) && bodyRotation !== 0 ? `rotate(${bodyRotation}deg)` : void 0;
3970
+ const rotationTransform = getTextBodyRotationTransform(el);
3970
3971
  const composedTransform = [rotationTransform, getTextCompensationTransform(el), scene3dStyle?.transform].filter(Boolean).join(" ") || void 0;
3971
3972
  const transformStyle = {
3972
3973
  transform: composedTransform,
@@ -5491,11 +5492,7 @@ function TransitionsSection(p) {
5491
5492
  type: "button",
5492
5493
  className: pill,
5493
5494
  title: t("pptx.ribbon.previewTransition"),
5494
- onClick: () => {
5495
- if (p.activeSlide?.transition) {
5496
- commit({});
5497
- }
5498
- },
5495
+ onClick: () => playSlideTransitionPreview(p.activeSlide?.transition, document),
5499
5496
  children: [
5500
5497
  /* @__PURE__ */ jsx(LuPlay, { className: ics }),
5501
5498
  t("pptx.ribbon.preview")
@@ -5668,10 +5665,10 @@ function DesignSection(p) {
5668
5665
  }
5669
5666
  ),
5670
5667
  sep,
5671
- p.onOpenDocumentProperties && /* @__PURE__ */ jsxs(
5668
+ (p.onOpenSlideSize ?? p.onOpenDocumentProperties) && /* @__PURE__ */ jsxs(
5672
5669
  "button",
5673
5670
  {
5674
- onClick: p.onOpenDocumentProperties,
5671
+ onClick: p.onOpenSlideSize ?? p.onOpenDocumentProperties,
5675
5672
  className: pill,
5676
5673
  title: t("pptx.ribbon.slideSizeTitle"),
5677
5674
  children: [
@@ -5789,7 +5786,7 @@ function AccountPage() {
5789
5786
  return void 0;
5790
5787
  });
5791
5788
  };
5792
- const version = "2.16.10" ;
5789
+ const version = "2.17.0" ;
5793
5790
  return /* @__PURE__ */ jsxs("div", { className: "mt-8 max-w-[700px] space-y-6", children: [
5794
5791
  /* @__PURE__ */ jsxs("section", { className: cardClass, children: [
5795
5792
  /* @__PURE__ */ jsxs("h2", { className: "flex items-center gap-2 text-sm font-semibold", children: [
@@ -8823,6 +8820,7 @@ function MobileSectionBody({
8823
8820
  onToggleThemeEditor: p.onToggleThemeEditor,
8824
8821
  isThemeEditorOpen: p.isThemeEditorOpen,
8825
8822
  onOpenDocumentProperties: p.onOpenDocumentProperties,
8823
+ onOpenSlideSize: p.onOpenSlideSize,
8826
8824
  onToggleInspector: p.onToggleInspector,
8827
8825
  isInspectorPaneOpen: p.isInspectorPaneOpen
8828
8826
  }
@@ -10082,6 +10080,7 @@ function Toolbar(p) {
10082
10080
  onToggleThemeEditor: p.onToggleThemeEditor,
10083
10081
  isThemeEditorOpen: p.isThemeEditorOpen,
10084
10082
  onOpenDocumentProperties: p.onOpenDocumentProperties,
10083
+ onOpenSlideSize: p.onOpenSlideSize,
10085
10084
  onToggleInspector: p.onToggleInspector,
10086
10085
  isInspectorPaneOpen: p.isInspectorPaneOpen
10087
10086
  }
@@ -10328,6 +10327,118 @@ function CommentMarkersOverlay({
10328
10327
  );
10329
10328
  }) });
10330
10329
  }
10330
+ function ConnectorEndpointOverlay({
10331
+ connector,
10332
+ elements,
10333
+ editorScale,
10334
+ canvasStageRef,
10335
+ onUpdateElement
10336
+ }) {
10337
+ const { t } = useTranslation();
10338
+ const [drag, setDrag] = useState(null);
10339
+ const candidates = useMemo(
10340
+ () => collectConnectorSiteCandidates(elements.filter((el) => el.id !== connector.id)),
10341
+ [elements, connector.id]
10342
+ );
10343
+ const handles = getConnectorEndpointHandles(connector);
10344
+ const snap = drag ? findConnectorSiteNear(candidates, drag.x, drag.y) : null;
10345
+ const toSlidePoint = useCallback(
10346
+ (clientX, clientY) => {
10347
+ const rect = canvasStageRef.current?.getBoundingClientRect();
10348
+ const scale = editorScale || 1;
10349
+ return {
10350
+ x: (clientX - (rect?.left ?? 0)) / scale,
10351
+ y: (clientY - (rect?.top ?? 0)) / scale
10352
+ };
10353
+ },
10354
+ [canvasStageRef, editorScale]
10355
+ );
10356
+ useEffect(() => {
10357
+ if (!drag) {
10358
+ return;
10359
+ }
10360
+ const onMove = (event) => {
10361
+ const point = toSlidePoint(event.clientX, event.clientY);
10362
+ setDrag((prev) => prev ? { ...prev, ...point } : prev);
10363
+ };
10364
+ const onUp = (event) => {
10365
+ const point = toSlidePoint(event.clientX, event.clientY);
10366
+ const target = findConnectorSiteNear(candidates, point.x, point.y, CONNECTOR_SITE_SNAP_PX);
10367
+ const update = resolveConnectorEndpointUpdate(connector, elements, drag.kind, point, target);
10368
+ const next = withConnectorEndpointUpdate(connector, update);
10369
+ onUpdateElement(connector.id, {
10370
+ x: next.x,
10371
+ y: next.y,
10372
+ width: next.width,
10373
+ height: next.height,
10374
+ flipHorizontal: next.flipHorizontal,
10375
+ flipVertical: next.flipVertical,
10376
+ // Sent whole: a DETACHED end has had its binding key deleted, so a
10377
+ // merge of only the surviving keys would leave the stale one behind.
10378
+ shapeStyle: next.shapeStyle
10379
+ });
10380
+ setDrag(null);
10381
+ };
10382
+ window.addEventListener("pointermove", onMove);
10383
+ window.addEventListener("pointerup", onUp);
10384
+ window.addEventListener("pointercancel", onUp);
10385
+ return () => {
10386
+ window.removeEventListener("pointermove", onMove);
10387
+ window.removeEventListener("pointerup", onUp);
10388
+ window.removeEventListener("pointercancel", onUp);
10389
+ };
10390
+ }, [drag, candidates, connector, elements, onUpdateElement, toSlidePoint]);
10391
+ return /* @__PURE__ */ jsxs("div", { className: "absolute inset-0 z-[56] pointer-events-none", "data-pptx-connector-endpoints": true, children: [
10392
+ drag ? candidates.map((site) => /* @__PURE__ */ jsx(
10393
+ "div",
10394
+ {
10395
+ "aria-hidden": "true",
10396
+ "data-pptx-connection-site": true,
10397
+ className: "absolute rounded-full border-2 border-blue-500",
10398
+ style: {
10399
+ left: site.x - 4,
10400
+ top: site.y - 4,
10401
+ width: 8,
10402
+ height: 8,
10403
+ background: snap?.elementId === site.elementId && snap.siteIndex === site.siteIndex ? "#3b82f6" : "rgba(96,165,250,0.6)"
10404
+ }
10405
+ },
10406
+ `${site.elementId}-${site.siteIndex}`
10407
+ )) : null,
10408
+ handles.map((handle) => /* @__PURE__ */ jsx(
10409
+ "button",
10410
+ {
10411
+ type: "button",
10412
+ "data-pptx-connector-endpoint": handle.kind,
10413
+ "data-pptx-connector-attached": String(handle.attached),
10414
+ "aria-label": t(
10415
+ handle.kind === "start" ? "pptx.canvas.connectorEndpointStart" : "pptx.canvas.connectorEndpointEnd"
10416
+ ),
10417
+ className: "absolute rounded-full border-2 border-white shadow",
10418
+ style: {
10419
+ left: (drag?.kind === handle.kind ? drag.x : handle.x) - 5,
10420
+ top: (drag?.kind === handle.kind ? drag.y : handle.y) - 5,
10421
+ width: 10,
10422
+ height: 10,
10423
+ // A bound end is filled, a loose one hollow, so "is this
10424
+ // connector actually attached?" is answerable at a glance.
10425
+ background: handle.attached ? "#16a34a" : "#ffffff",
10426
+ boxShadow: "0 0 0 1px #16a34a",
10427
+ cursor: "crosshair",
10428
+ pointerEvents: "auto",
10429
+ touchAction: "none"
10430
+ },
10431
+ onPointerDown: (event) => {
10432
+ event.stopPropagation();
10433
+ event.preventDefault();
10434
+ const point = toSlidePoint(event.clientX, event.clientY);
10435
+ setDrag({ kind: handle.kind, ...point });
10436
+ }
10437
+ },
10438
+ handle.kind
10439
+ ))
10440
+ ] });
10441
+ }
10331
10442
  function ConnectorOverlay({
10332
10443
  activeSlide,
10333
10444
  canvasSize,
@@ -10346,26 +10457,24 @@ function ConnectorOverlay({
10346
10457
  onMouseUp: onConnectorDragEnd,
10347
10458
  style: { pointerEvents: connectorDragState ? "auto" : "none" },
10348
10459
  children: [
10349
- activeSlide.elements.filter((el) => el.type !== "connector").map((el) => {
10350
- const sites = getConnectionSites(el.width, el.height);
10351
- return sites.map((site) => /* @__PURE__ */ jsx(
10352
- "div",
10353
- {
10354
- className: "absolute rounded-full border-2 border-blue-500 bg-blue-400/60 hover:bg-blue-500 hover:scale-125 transition-transform cursor-crosshair",
10355
- style: {
10356
- left: el.x + site.x - 5,
10357
- top: el.y + site.y - 5,
10358
- width: 10,
10359
- height: 10,
10360
- pointerEvents: "auto",
10361
- zIndex: 56
10362
- },
10363
- onMouseDown: (e) => onConnectionSiteDown(el.id, site.index, e),
10364
- onMouseUp: () => connectorDragState ? onConnectionSiteDrop(el.id, site.index) : void 0
10460
+ collectConnectorSiteCandidates(activeSlide.elements).map((site) => /* @__PURE__ */ jsx(
10461
+ "div",
10462
+ {
10463
+ "data-pptx-connection-site": true,
10464
+ className: "absolute rounded-full border-2 border-blue-500 bg-blue-400/60 hover:bg-blue-500 hover:scale-125 transition-transform cursor-crosshair",
10465
+ style: {
10466
+ left: site.x - 5,
10467
+ top: site.y - 5,
10468
+ width: 10,
10469
+ height: 10,
10470
+ pointerEvents: "auto",
10471
+ zIndex: 56
10365
10472
  },
10366
- `${el.id}-site-${site.index}`
10367
- ));
10368
- }),
10473
+ onMouseDown: (e) => onConnectionSiteDown(site.elementId, site.siteIndex, e),
10474
+ onMouseUp: () => connectorDragState ? onConnectionSiteDrop(site.elementId, site.siteIndex) : void 0
10475
+ },
10476
+ `${site.elementId}-site-${site.siteIndex}`
10477
+ )),
10369
10478
  connectorDragState && /* @__PURE__ */ jsx(
10370
10479
  ConnectorDragPreview,
10371
10480
  {
@@ -10389,7 +10498,7 @@ function ConnectorDragPreview({
10389
10498
  if (!startEl) {
10390
10499
  return null;
10391
10500
  }
10392
- const startSites = getConnectionSites(startEl.width, startEl.height);
10501
+ const startSites = getShapeConnectionSites(startEl);
10393
10502
  const startSite = startSites[connectorDragState.startSiteIndex] ?? startSites[0];
10394
10503
  const sx = startEl.x + startSite.x;
10395
10504
  const sy = startEl.y + startSite.y;
@@ -11380,7 +11489,7 @@ function useStableCallbacks(callbacks) {
11380
11489
  []
11381
11490
  );
11382
11491
  const stableAdjustmentPointerDown = useCallback(
11383
- (elementId, e) => cbRef.current.onAdjustmentPointerDown(elementId, e),
11492
+ (elementId, e, descriptor) => cbRef.current.onAdjustmentPointerDown(elementId, e, descriptor),
11384
11493
  []
11385
11494
  );
11386
11495
  const stableRotate = useCallback(
@@ -11501,6 +11610,7 @@ function ActiveXControlOverlay({
11501
11610
  );
11502
11611
  }) });
11503
11612
  }
11613
+ var EMPTY_ADJUSTMENT_HANDLES = [];
11504
11614
  function SlideCanvas({
11505
11615
  activeSlide,
11506
11616
  templateElements,
@@ -11757,7 +11867,7 @@ function SlideCanvas({
11757
11867
  showResizeHandles: isEditableCanvas && selectedElementIdSet.has(element.id) && selectedElementIdSet.size <= 1 && !inlineEditingElementId,
11758
11868
  renderInk: false,
11759
11869
  renderGroups: true,
11760
- adjustmentHandleDescriptor: isEditableCanvas && selectedElement?.id === element.id ? getShapeAdjustmentHandleDescriptor(element) : null,
11870
+ adjustmentHandles: isEditableCanvas && selectedElement?.id === element.id ? getShapeAdjustmentHandleDescriptors(element) : EMPTY_ADJUSTMENT_HANDLES,
11761
11871
  onResizePointerDown: stableResizePointerDown,
11762
11872
  onAdjustmentPointerDown: stableAdjustmentPointerDown,
11763
11873
  onRotate: stableRotate,
@@ -11797,7 +11907,7 @@ function SlideCanvas({
11797
11907
  showResizeHandles: isEditableCanvas && selectedElementIdSet.has(element.id) && selectedElementIdSet.size <= 1 && !inlineEditingElementId,
11798
11908
  renderInk: true,
11799
11909
  renderGroups: true,
11800
- adjustmentHandleDescriptor: isEditableCanvas && selectedElement?.id === element.id ? getShapeAdjustmentHandleDescriptor(element) : null,
11910
+ adjustmentHandles: isEditableCanvas && selectedElement?.id === element.id ? getShapeAdjustmentHandleDescriptors(element) : EMPTY_ADJUSTMENT_HANDLES,
11801
11911
  onResizePointerDown: stableResizePointerDown,
11802
11912
  onAdjustmentPointerDown: stableAdjustmentPointerDown,
11803
11913
  onRotate: stableRotate,
@@ -11834,6 +11944,16 @@ function SlideCanvas({
11834
11944
  }
11835
11945
  ),
11836
11946
  /* @__PURE__ */ jsx(SnapLinesOverlay, { snapLines }),
11947
+ isEditableCanvas && selectedElement?.type === "connector" && activeSlide && /* @__PURE__ */ jsx(
11948
+ ConnectorEndpointOverlay,
11949
+ {
11950
+ connector: selectedElement,
11951
+ elements: activeSlide.elements,
11952
+ editorScale: zoom.editorScale,
11953
+ canvasStageRef: zoom.canvasStageRef,
11954
+ onUpdateElement: stableUpdateSmartArtElement
11955
+ }
11956
+ ),
11837
11957
  connectorCreationMode && activeSlide && /* @__PURE__ */ jsx(
11838
11958
  ConnectorOverlay,
11839
11959
  {
@@ -12848,7 +12968,7 @@ function SectionHeader({
12848
12968
  {
12849
12969
  type: "button",
12850
12970
  className: "flex w-full items-center gap-1 rounded px-1.5 py-1 text-[11px] uppercase tracking-wide text-muted-foreground hover:bg-muted/60 hover:text-foreground",
12851
- onClick: () => onToggle(sectionId),
12971
+ onClick: () => onToggle(sectionId, isCollapsed),
12852
12972
  onContextMenu: (e) => canEdit ? onContextMenu(e, sectionId, sectionIndex, totalSections) : void 0,
12853
12973
  onDoubleClick: (e) => {
12854
12974
  if (!canEdit) {
@@ -13134,7 +13254,7 @@ function SlideItemInner({
13134
13254
  );
13135
13255
  }
13136
13256
  var SlideItem = React14.memo(SlideItemInner);
13137
- function useSlidePaneCallbacks(onMoveSlide, onRenameSection) {
13257
+ function useSlidePaneCallbacks(onMoveSlide, onRenameSection, onToggleSectionCollapse) {
13138
13258
  const [collapsedSections, setCollapsedSections] = useState({});
13139
13259
  const [renamingSectionId, setRenamingSectionId] = useState(null);
13140
13260
  const [renameValue, setRenameValue] = useState("");
@@ -13172,12 +13292,16 @@ function useSlidePaneCallbacks(onMoveSlide, onRenameSection) {
13172
13292
  },
13173
13293
  [onMoveSlide]
13174
13294
  );
13175
- const toggleSection = useCallback((sectionId) => {
13176
- setCollapsedSections((prev) => ({
13177
- ...prev,
13178
- [sectionId]: !prev[sectionId]
13179
- }));
13180
- }, []);
13295
+ const toggleSection = useCallback(
13296
+ (sectionId, isCollapsed) => {
13297
+ setCollapsedSections((prev) => ({
13298
+ ...prev,
13299
+ [sectionId]: !isCollapsed
13300
+ }));
13301
+ onToggleSectionCollapse?.(sectionId);
13302
+ },
13303
+ [onToggleSectionCollapse]
13304
+ );
13181
13305
  const startRename = useCallback((sectionId, currentLabel) => {
13182
13306
  setRenamingSectionId(sectionId);
13183
13307
  setRenameValue(currentLabel);
@@ -13257,6 +13381,7 @@ function SlidesPaneSidebar({
13257
13381
  onDeleteSection,
13258
13382
  onMoveSectionUp,
13259
13383
  onMoveSectionDown,
13384
+ onToggleSectionCollapse,
13260
13385
  rehearsalTimings,
13261
13386
  panelWidth,
13262
13387
  fieldContext,
@@ -13287,7 +13412,7 @@ function SlidesPaneSidebar({
13287
13412
  () => estimateSlideItemHeight(canvasSize.width, canvasSize.height),
13288
13413
  [canvasSize.width, canvasSize.height]
13289
13414
  );
13290
- const showSectionHeaders = sectionGroups.length > 1;
13415
+ const showSectionHeaders = sectionGroups.some((group) => group.id !== DEFAULT_SECTION_GROUP_ID);
13291
13416
  const {
13292
13417
  collapsedSections,
13293
13418
  renamingSectionId,
@@ -13306,10 +13431,17 @@ function SlidesPaneSidebar({
13306
13431
  handleOpenSlideCtxMenu,
13307
13432
  closeSectionContextMenu,
13308
13433
  closeSlideCtxMenu
13309
- } = useSlidePaneCallbacks(onMoveSlide, onRenameSection);
13434
+ } = useSlidePaneCallbacks(onMoveSlide, onRenameSection, onToggleSectionCollapse);
13435
+ const effectiveCollapsed = useMemo(() => {
13436
+ const map = {};
13437
+ for (const group of sectionGroups) {
13438
+ map[group.id] = collapsedSections[group.id] ?? group.defaultCollapsed ?? false;
13439
+ }
13440
+ return map;
13441
+ }, [sectionGroups, collapsedSections]);
13310
13442
  const flatItems = useMemo(
13311
- () => buildFlatPaneItems(sectionGroups, showSectionHeaders, collapsedSections),
13312
- [sectionGroups, showSectionHeaders, collapsedSections]
13443
+ () => buildFlatPaneItems(sectionGroups, showSectionHeaders, effectiveCollapsed),
13444
+ [sectionGroups, showSectionHeaders, effectiveCollapsed]
13313
13445
  );
13314
13446
  const shouldVirtualize = slides.length >= VIRTUALIZATION_THRESHOLD;
13315
13447
  const { startIndex, endIndex, totalHeight, offsetY, scrollContainerRef, scrollToIndex } = useVirtualizedSlides({
@@ -13367,7 +13499,7 @@ function SlidesPaneSidebar({
13367
13499
  if (!section) {
13368
13500
  return null;
13369
13501
  }
13370
- const isCollapsed = collapsedSections[section.id] ?? false;
13502
+ const isCollapsed = effectiveCollapsed[section.id] ?? false;
13371
13503
  return /* @__PURE__ */ jsx(
13372
13504
  SectionHeader,
13373
13505
  {
@@ -13424,7 +13556,7 @@ function SlidesPaneSidebar({
13424
13556
  ) }) });
13425
13557
  };
13426
13558
  const renderNonVirtualized = () => /* @__PURE__ */ jsx("div", { className: "flex-1 space-y-1 overflow-y-auto px-1.5 pb-2", children: sectionGroups.map((section, sectionIndex) => {
13427
- const isCollapsed = collapsedSections[section.id] ?? false;
13559
+ const isCollapsed = effectiveCollapsed[section.id] ?? false;
13428
13560
  return /* @__PURE__ */ jsxs("div", { className: "space-y-1", children: [
13429
13561
  showSectionHeaders && /* @__PURE__ */ jsx(
13430
13562
  SectionHeader,
@@ -13658,11 +13790,14 @@ function SlideMastersList({
13658
13790
  const layouts = master.layouts ?? [];
13659
13791
  return /* @__PURE__ */ jsxs("div", { className: "space-y-1", children: [
13660
13792
  /* @__PURE__ */ jsxs(
13661
- "div",
13793
+ "button",
13662
13794
  {
13795
+ type: "button",
13663
13796
  ref: isMasterActive ? activeRef : void 0,
13797
+ "aria-pressed": isMasterActive,
13798
+ "aria-label": master.name || t("pptx.master.master"),
13664
13799
  className: cn(
13665
- "group relative cursor-pointer rounded-lg border-2 p-1 transition-all",
13800
+ "group relative block w-full cursor-pointer rounded-lg border-2 p-1 text-left transition-all",
13666
13801
  isMasterActive ? "border-amber-500 bg-amber-500/10" : "border-border bg-background/40 hover:border-border"
13667
13802
  ),
13668
13803
  onClick: () => onSelectMaster(masterIdx),
@@ -13691,11 +13826,14 @@ function SlideMastersList({
13691
13826
  layouts.length > 0 && /* @__PURE__ */ jsx("div", { className: "ml-3 space-y-1 border-l border-border/40 pl-2", children: layouts.map((layout, layoutIdx) => {
13692
13827
  const isLayoutActive = masterIdx === activeMasterIndex && layoutIdx === activeLayoutIndex;
13693
13828
  return /* @__PURE__ */ jsxs(
13694
- "div",
13829
+ "button",
13695
13830
  {
13831
+ type: "button",
13696
13832
  ref: isLayoutActive ? activeRef : void 0,
13833
+ "aria-pressed": isLayoutActive,
13834
+ "aria-label": layout.name || t("pptx.master.layout"),
13697
13835
  className: cn(
13698
- "group relative cursor-pointer rounded-md border-2 p-0.5 transition-all",
13836
+ "group relative block w-full cursor-pointer rounded-md border-2 p-0.5 text-left transition-all",
13699
13837
  isLayoutActive ? "border-primary bg-primary/10" : "border-border bg-background/40 hover:border-border"
13700
13838
  ),
13701
13839
  onClick: () => onSelectLayout(masterIdx, layoutIdx),
@@ -13742,16 +13880,22 @@ function MasterViewSidebar({
13742
13880
  notesMaster,
13743
13881
  handoutMaster,
13744
13882
  handoutSlidesPerPage,
13883
+ canEdit,
13745
13884
  onSelectMaster,
13746
13885
  onSelectLayout,
13747
13886
  onCollapse,
13748
13887
  onTabChange,
13749
13888
  onHandoutSlidesPerPageChange,
13750
13889
  onNotesMasterBackgroundChange,
13751
- onHandoutMasterBackgroundChange
13890
+ onHandoutMasterBackgroundChange,
13891
+ onSlidesBackgroundChange
13752
13892
  }) {
13753
13893
  const scrollRef = useRef(null);
13754
13894
  const { t } = useTranslation();
13895
+ const slidesBackground = masterViewBackgroundColor(
13896
+ { slideMasters },
13897
+ { tab: "slides", masterIndex: activeMasterIndex, layoutIndex: activeLayoutIndex }
13898
+ );
13755
13899
  const handleMasterClick = useCallback(
13756
13900
  (index) => {
13757
13901
  onSelectMaster(index);
@@ -13807,6 +13951,19 @@ function MasterViewSidebar({
13807
13951
  }
13808
13952
  ),
13809
13953
  /* @__PURE__ */ jsxs("div", { ref: scrollRef, className: "flex-1 space-y-2 overflow-y-auto px-1.5 pb-2 pt-1", children: [
13954
+ masterViewTab === "slides" && canEdit && /* @__PURE__ */ jsxs("section", { className: "space-y-1.5 rounded-md border border-border/60 p-2", children: [
13955
+ /* @__PURE__ */ jsx("div", { className: "text-[11px] text-muted-foreground", children: t("pptx.master.notesMasterBackground") }),
13956
+ /* @__PURE__ */ jsx(
13957
+ "input",
13958
+ {
13959
+ type: "color",
13960
+ "aria-label": t("pptx.master.backgroundColorLabel"),
13961
+ className: "h-7 w-full cursor-pointer rounded border border-border/60 bg-transparent",
13962
+ value: slidesBackground ?? "#ffffff",
13963
+ onChange: (event) => onSlidesBackgroundChange(event.target.value)
13964
+ }
13965
+ )
13966
+ ] }),
13810
13967
  masterViewTab === "slides" && /* @__PURE__ */ jsx(
13811
13968
  SlideMastersList,
13812
13969
  {
@@ -14521,10 +14678,10 @@ function SorterContextMenu({
14521
14678
  }
14522
14679
 
14523
14680
  // src/viewer/components/slide-sorter/types.ts
14524
- var MIN_ZOOM = 50;
14525
- var MAX_ZOOM = 200;
14681
+ var MIN_ZOOM = SORTER_MIN_ZOOM;
14682
+ var MAX_ZOOM = SORTER_MAX_ZOOM;
14526
14683
  var DEFAULT_ZOOM = 100;
14527
- var ZOOM_STEP = 10;
14684
+ var ZOOM_STEP = SORTER_ZOOM_STEP;
14528
14685
  function useKeyboardShortcuts(params) {
14529
14686
  const {
14530
14687
  slides,
@@ -14548,52 +14705,55 @@ function useKeyboardShortcuts(params) {
14548
14705
  if (contextMenu) {
14549
14706
  setContextMenu(null);
14550
14707
  }
14551
- const isCtrl = e.ctrlKey || e.metaKey;
14552
- if (e.key === "Escape") {
14553
- e.stopPropagation();
14554
- if (selectedSlideIds.length > 1) {
14555
- const activeSlide = slides[activeSlideIndex];
14556
- setSelectedSlideIds(activeSlide?.id ? [activeSlide.id] : []);
14557
- } else {
14558
- onClose();
14559
- }
14708
+ const { action } = mapSlideSorterKey(e, {
14709
+ canEdit,
14710
+ hasMultiSelection: selectedSlideIds.length > 1,
14711
+ isTextInputTarget: isEditorTextInputTarget(e.target)
14712
+ });
14713
+ if (action === null) {
14560
14714
  return;
14561
14715
  }
14562
- if ((e.key === "Delete" || e.key === "Backspace") && canEdit) {
14563
- e.preventDefault();
14564
- if (selectedIndexes.length > 0) {
14565
- handleDeleteSelected();
14716
+ switch (action) {
14717
+ case "collapseSelection": {
14718
+ e.stopPropagation();
14719
+ const activeSlide = slides[activeSlideIndex];
14720
+ setSelectedSlideIds(activeSlide?.id ? [activeSlide.id] : []);
14721
+ return;
14566
14722
  }
14567
- return;
14568
- }
14569
- if (isCtrl && e.key === "c") {
14570
- e.preventDefault();
14571
- handleCopySelected();
14572
- return;
14573
- }
14574
- if (isCtrl && e.key === "v" && canEdit) {
14575
- e.preventDefault();
14576
- handlePaste();
14577
- return;
14578
- }
14579
- if (isCtrl && e.key === "d" && canEdit) {
14580
- e.preventDefault();
14581
- handleDuplicateSelected();
14582
- return;
14583
- }
14584
- if (isCtrl && e.key === "a") {
14585
- e.preventDefault();
14586
- handleSelectAll();
14587
- return;
14588
- }
14589
- if (isCtrl && (e.key === "=" || e.key === "+")) {
14590
- e.preventDefault();
14591
- setZoom((z) => Math.min(MAX_ZOOM, z + ZOOM_STEP));
14592
- return;
14593
- }
14594
- if (isCtrl && e.key === "-") {
14595
- e.preventDefault();
14596
- setZoom((z) => Math.max(MIN_ZOOM, z - ZOOM_STEP));
14723
+ case "close":
14724
+ e.stopPropagation();
14725
+ onClose();
14726
+ return;
14727
+ case "delete":
14728
+ e.preventDefault();
14729
+ if (selectedIndexes.length > 0) {
14730
+ handleDeleteSelected();
14731
+ }
14732
+ return;
14733
+ case "copy":
14734
+ e.preventDefault();
14735
+ handleCopySelected();
14736
+ return;
14737
+ case "paste":
14738
+ e.preventDefault();
14739
+ handlePaste();
14740
+ return;
14741
+ case "duplicate":
14742
+ e.preventDefault();
14743
+ handleDuplicateSelected();
14744
+ return;
14745
+ case "selectAll":
14746
+ e.preventDefault();
14747
+ handleSelectAll();
14748
+ return;
14749
+ case "zoomIn":
14750
+ e.preventDefault();
14751
+ setZoom((z) => clampSorterZoom(z + ZOOM_STEP));
14752
+ return;
14753
+ case "zoomOut":
14754
+ e.preventDefault();
14755
+ setZoom((z) => clampSorterZoom(z - ZOOM_STEP));
14756
+ break;
14597
14757
  }
14598
14758
  };
14599
14759
  window.addEventListener("keydown", handleKeyDown);
@@ -18130,12 +18290,13 @@ function PresenterNotesRail({
18130
18290
  templateElements,
18131
18291
  now,
18132
18292
  elapsed,
18293
+ activeCustomShow,
18133
18294
  onMove,
18134
18295
  onUpdateNotes
18135
18296
  }) {
18136
18297
  const { t } = useTranslation();
18137
18298
  const slide = slides[current];
18138
- const nextSlide = nextPresentedSlide(slides, current);
18299
+ const nextSlide = nextPresentedSlide(slides, current, activeCustomShow);
18139
18300
  const notesText = slide?.notes ?? "";
18140
18301
  const notesSegments = slide?.notesSegments;
18141
18302
  const [notesDraft, setNotesDraft] = useState(notesText);
@@ -18380,6 +18541,7 @@ function PresenterView({
18380
18541
  canvasSize,
18381
18542
  templateElements,
18382
18543
  presentationStartTime,
18544
+ activeCustomShow,
18383
18545
  onMovePresentationSlide,
18384
18546
  onExit,
18385
18547
  onOpenAudienceWindow,
@@ -18490,6 +18652,7 @@ function PresenterView({
18490
18652
  current: currentSlideIndex,
18491
18653
  canvasSize,
18492
18654
  templateElements,
18655
+ activeCustomShow,
18493
18656
  now,
18494
18657
  elapsed,
18495
18658
  onMove: onMovePresentationSlide,
@@ -27273,6 +27436,27 @@ function ElementInspectorBody({
27273
27436
  /* @__PURE__ */ jsx(LayerOrderButtons, { canEdit, onMoveLayer })
27274
27437
  ] });
27275
27438
  }
27439
+ function CommentBody({ text, mentions, className }) {
27440
+ const segments = commentTextSegments(text, mentions);
27441
+ if (!segments.some((segment) => segment.kind === "mention")) {
27442
+ return /* @__PURE__ */ jsx("div", { className, children: text });
27443
+ }
27444
+ return /* @__PURE__ */ jsx("div", { className, children: segments.map(
27445
+ (segment, index) => segment.kind === "mention" ? /* @__PURE__ */ jsx(
27446
+ "span",
27447
+ {
27448
+ className: `${COMMENT_MENTION_CLASS} rounded bg-primary/15 px-0.5 font-semibold text-primary`,
27449
+ ...{ [COMMENT_MENTION_ATTRIBUTE]: segment.personId || "" },
27450
+ title: segment.authorName,
27451
+ children: segment.text
27452
+ },
27453
+ index
27454
+ ) : (
27455
+ // eslint-disable-next-line react/no-array-index-key -- segments are positional
27456
+ /* @__PURE__ */ jsx(React14.Fragment, { children: segment.text }, index)
27457
+ )
27458
+ ) });
27459
+ }
27276
27460
  function InspectorCommentRow({
27277
27461
  comment,
27278
27462
  canEdit,
@@ -27366,7 +27550,14 @@ function InspectorCommentRow({
27366
27550
  )
27367
27551
  ] })
27368
27552
  ] }) : /* @__PURE__ */ jsxs(Fragment, { children: [
27369
- /* @__PURE__ */ jsx("div", { className: "mt-1 whitespace-pre-wrap break-words text-[11px] text-foreground", children: comment.text }),
27553
+ /* @__PURE__ */ jsx(
27554
+ CommentBody,
27555
+ {
27556
+ text: comment.text,
27557
+ mentions: comment.mentions,
27558
+ className: "mt-1 whitespace-pre-wrap break-words text-[11px] text-foreground"
27559
+ }
27560
+ ),
27370
27561
  canEdit && /* @__PURE__ */ jsxs("div", { className: "mt-1.5 inline-flex items-center rounded bg-muted overflow-hidden", children: [
27371
27562
  /* @__PURE__ */ jsx(
27372
27563
  "button",
@@ -27894,6 +28085,83 @@ function DocumentPropertiesCard({
27894
28085
  ] })
27895
28086
  ] });
27896
28087
  }
28088
+ var CUSTOM_PRESET_VALUE = "";
28089
+ function SlideSizeCard({
28090
+ canvasSize,
28091
+ slideSizeEmu,
28092
+ canEdit,
28093
+ onUpdate,
28094
+ onUpdateSlideSize
28095
+ }) {
28096
+ const { t } = useTranslation();
28097
+ const selection = resolveSlideSizeSelection({ current: slideSizeEmu, canvas: canvasSize });
28098
+ const presetDisabled = !canEdit || !onUpdateSlideSize;
28099
+ const handlePreset = (labelKey) => {
28100
+ const preset = SLIDE_SIZE_PRESETS.find((candidate) => candidate.labelKey === labelKey);
28101
+ if (!preset) {
28102
+ return;
28103
+ }
28104
+ onUpdateSlideSize?.(slideSizeFromPreset(preset, selection.orientation));
28105
+ };
28106
+ const handleOrientation = (orientation) => {
28107
+ onUpdateSlideSize?.(withSlideSizeOrientation(selection.size, orientation));
28108
+ };
28109
+ return /* @__PURE__ */ jsxs("div", { className: CARD, children: [
28110
+ /* @__PURE__ */ jsx("div", { className: HEADING, children: t("pptx.slideSize.title") }),
28111
+ /* @__PURE__ */ jsxs("div", { className: "space-y-1.5 text-[11px]", children: [
28112
+ /* @__PURE__ */ jsxs("label", { className: "flex flex-col gap-1", children: [
28113
+ /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: t("pptx.slideSize.presets") }),
28114
+ /* @__PURE__ */ jsxs(
28115
+ "select",
28116
+ {
28117
+ "data-pptx-slide-size-preset": true,
28118
+ disabled: presetDisabled,
28119
+ className: INPUT,
28120
+ value: selection.preset?.labelKey ?? CUSTOM_PRESET_VALUE,
28121
+ onChange: (e) => handlePreset(e.target.value),
28122
+ children: [
28123
+ selection.preset === void 0 && /* @__PURE__ */ jsx("option", { value: CUSTOM_PRESET_VALUE, children: t("pptx.slideSize.customSize") }),
28124
+ SLIDE_SIZE_PRESETS.map((preset) => /* @__PURE__ */ jsx("option", { value: preset.labelKey, children: t(`pptx.slideSize.preset.${preset.labelKey}`) }, preset.labelKey))
28125
+ ]
28126
+ }
28127
+ )
28128
+ ] }),
28129
+ /* @__PURE__ */ jsxs("label", { className: "flex flex-col gap-1", children: [
28130
+ /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: t("pptx.slideSize.orientation") }),
28131
+ /* @__PURE__ */ jsxs(
28132
+ "select",
28133
+ {
28134
+ "data-pptx-slide-size-orientation": true,
28135
+ disabled: presetDisabled,
28136
+ className: INPUT,
28137
+ value: selection.orientation,
28138
+ onChange: (e) => handleOrientation(e.target.value),
28139
+ children: [
28140
+ /* @__PURE__ */ jsx("option", { value: "landscape", children: t("pptx.slideSize.landscape") }),
28141
+ /* @__PURE__ */ jsx("option", { value: "portrait", children: t("pptx.slideSize.portrait") })
28142
+ ]
28143
+ }
28144
+ )
28145
+ ] }),
28146
+ /* @__PURE__ */ jsx("div", { className: "grid grid-cols-2 gap-1.5", children: [
28147
+ ["W", "width"],
28148
+ ["H", "height"]
28149
+ ].map(([label, key]) => /* @__PURE__ */ jsxs("label", { className: "flex items-center gap-1", children: [
28150
+ /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: label }),
28151
+ /* @__PURE__ */ jsx(
28152
+ "input",
28153
+ {
28154
+ type: "number",
28155
+ className: INPUT,
28156
+ disabled: !canEdit,
28157
+ value: canvasSize[key],
28158
+ onChange: (e) => onUpdate({ ...canvasSize, [key]: Number(e.target.value) })
28159
+ }
28160
+ )
28161
+ ] }, key)) })
28162
+ ] })
28163
+ ] });
28164
+ }
27897
28165
  function CheckboxRow({
27898
28166
  label,
27899
28167
  disabled,
@@ -28051,32 +28319,6 @@ function ThemeSelectorCard({
28051
28319
  ] })
28052
28320
  ] });
28053
28321
  }
28054
- function SlideSizeCard({
28055
- canvasSize,
28056
- canEdit,
28057
- onUpdate
28058
- }) {
28059
- const { t } = useTranslation();
28060
- return /* @__PURE__ */ jsxs("div", { className: CARD, children: [
28061
- /* @__PURE__ */ jsx("div", { className: HEADING, children: t("pptx.slideSize.title") }),
28062
- /* @__PURE__ */ jsx("div", { className: "grid grid-cols-2 gap-1.5 text-[11px]", children: [
28063
- ["W", "width"],
28064
- ["H", "height"]
28065
- ].map(([label, key]) => /* @__PURE__ */ jsxs("label", { className: "flex items-center gap-1", children: [
28066
- /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: label }),
28067
- /* @__PURE__ */ jsx(
28068
- "input",
28069
- {
28070
- type: "number",
28071
- className: INPUT,
28072
- disabled: !canEdit,
28073
- value: canvasSize[key],
28074
- onChange: (e) => onUpdate({ ...canvasSize, [key]: Number(e.target.value) })
28075
- }
28076
- )
28077
- ] }, key)) })
28078
- ] });
28079
- }
28080
28322
  var ALIAS_LABELS = {
28081
28323
  bg1: "Background 1",
28082
28324
  tx1: "Text 1",
@@ -28538,6 +28780,8 @@ function PresentationPropertiesPanel({
28538
28780
  onUpdateSlide,
28539
28781
  canvasSize,
28540
28782
  onUpdateCanvasSize,
28783
+ slideSizeEmu,
28784
+ onUpdateSlideSize,
28541
28785
  notesCanvasSize,
28542
28786
  notesMaster,
28543
28787
  handoutMaster,
@@ -28590,7 +28834,16 @@ function PresentationPropertiesPanel({
28590
28834
  }
28591
28835
  )
28592
28836
  ] }),
28593
- /* @__PURE__ */ jsx(SlideSizeCard, { canvasSize, canEdit, onUpdate: onUpdateCanvasSize }),
28837
+ /* @__PURE__ */ jsx(
28838
+ SlideSizeCard,
28839
+ {
28840
+ canvasSize,
28841
+ slideSizeEmu,
28842
+ canEdit,
28843
+ onUpdate: onUpdateCanvasSize,
28844
+ onUpdateSlideSize
28845
+ }
28846
+ ),
28594
28847
  /* @__PURE__ */ jsx(
28595
28848
  SlideTransitionSection,
28596
28849
  {
@@ -28892,6 +29145,8 @@ function InspectorPane(props) {
28892
29145
  replyingToCommentId,
28893
29146
  replyDraftByCommentId,
28894
29147
  onUpdateCanvasSize,
29148
+ slideSizeEmu,
29149
+ onUpdateSlideSize,
28895
29150
  onUpdateElementStyle,
28896
29151
  onUpdateTextStyle,
28897
29152
  onUpdateSlide,
@@ -29011,6 +29266,8 @@ function InspectorPane(props) {
29011
29266
  tagCollections,
29012
29267
  onUpdateTagCollections,
29013
29268
  onUpdateCanvasSize,
29269
+ slideSizeEmu,
29270
+ onUpdateSlideSize,
29014
29271
  activeSlide,
29015
29272
  theme,
29016
29273
  onUpdateSlide
@@ -32088,6 +32345,8 @@ function ViewerInspector({
32088
32345
  onUpdateElement,
32089
32346
  onApplySelection,
32090
32347
  onSetCanvasSize,
32348
+ slideSizeEmu,
32349
+ onSetSlideSize,
32091
32350
  onMoveLayer,
32092
32351
  onMoveLayerToEdge,
32093
32352
  onDeleteElement,
@@ -32190,6 +32449,8 @@ function ViewerInspector({
32190
32449
  replyingToCommentId: comments.replyingToCommentId,
32191
32450
  replyDraftByCommentId: comments.replyDraftByCommentId,
32192
32451
  onUpdateCanvasSize: onSetCanvasSize,
32452
+ slideSizeEmu,
32453
+ onUpdateSlideSize: onSetSlideSize,
32193
32454
  editTemplateMode,
32194
32455
  slideMasters,
32195
32456
  onSetTemplateBackground,
@@ -32553,6 +32814,12 @@ function ViewerToolbarSection(props) {
32553
32814
  const handleAddSection = useCallback(() => {
32554
32815
  sectionOps?.addSection(t("pptx.sections.defaultName"), activeSlideIndex);
32555
32816
  }, [sectionOps, activeSlideIndex, t]);
32817
+ const handleOpenSlideSize = useCallback(() => {
32818
+ s.setSelectedElementId(null);
32819
+ s.setSelectedElementIds([]);
32820
+ s.setSidebarPanelMode("properties");
32821
+ s.setIsInspectorPaneOpen(true);
32822
+ }, [s]);
32556
32823
  const handleSelectAll = useCallback(() => {
32557
32824
  const allIds = activeSlide?.elements.map((element) => element.id) ?? [];
32558
32825
  if (allIds.length > 0) {
@@ -32671,7 +32938,7 @@ function ViewerToolbarSection(props) {
32671
32938
  s.setIsThemeGalleryOpen((p) => !p);
32672
32939
  break;
32673
32940
  case "slideSize":
32674
- dialogs.setIsSetUpSlideShowOpen(true);
32941
+ handleOpenSlideSize();
32675
32942
  break;
32676
32943
  }
32677
32944
  break;
@@ -32700,7 +32967,17 @@ function ViewerToolbarSection(props) {
32700
32967
  break;
32701
32968
  }
32702
32969
  },
32703
- [ops, insertHandlers, s, dialogs, zoom, onSetMode, onEnterPresenterView, manipulation]
32970
+ [
32971
+ ops,
32972
+ insertHandlers,
32973
+ s,
32974
+ dialogs,
32975
+ zoom,
32976
+ onSetMode,
32977
+ onEnterPresenterView,
32978
+ manipulation,
32979
+ handleOpenSlideSize
32980
+ ]
32704
32981
  );
32705
32982
  const handleQuickAccessCommand = useCallback(
32706
32983
  (id) => {
@@ -32893,6 +33170,7 @@ function ViewerToolbarSection(props) {
32893
33170
  onToggleVersionHistory: () => propertyHandlers.setIsVersionHistoryOpen((p) => !p),
32894
33171
  onOpenPasswordProtection: () => dialogs.setIsPasswordDialogOpen(true),
32895
33172
  onOpenDocumentProperties: () => dialogs.setIsDocPropsDialogOpen(true),
33173
+ onOpenSlideSize: handleOpenSlideSize,
32896
33174
  onOpenFontEmbedding: () => dialogs.setIsFontEmbeddingOpen(true),
32897
33175
  onOpenDigitalSignatures: () => dialogs.setIsDigitalSigDialogOpen(true),
32898
33176
  onEnterPresenterView,
@@ -33571,6 +33849,7 @@ function ViewerPresentationLayer(props) {
33571
33849
  canvasSize,
33572
33850
  templateElements,
33573
33851
  presentation,
33852
+ activeCustomShow,
33574
33853
  onExitPresentation,
33575
33854
  isMobile,
33576
33855
  onUpdateNotes
@@ -33595,6 +33874,7 @@ function ViewerPresentationLayer(props) {
33595
33874
  currentSlideIndex: presentation.presentationSlideIndex,
33596
33875
  canvasSize,
33597
33876
  templateElements,
33877
+ activeCustomShow,
33598
33878
  presentationStartTime: presentation.presentationStartTime,
33599
33879
  onMovePresentationSlide: presentation.movePresentationSlide,
33600
33880
  onExit: onExitPresentation,
@@ -33753,7 +34033,7 @@ function PresentationStage({
33753
34033
  showResizeHandles: false,
33754
34034
  renderInk: false,
33755
34035
  renderGroups: true,
33756
- adjustmentHandleDescriptor: null,
34036
+ adjustmentHandles: [],
33757
34037
  onResizePointerDown: noop2,
33758
34038
  onAdjustmentPointerDown: noop2,
33759
34039
  onInlineEditChange: noop2,
@@ -33790,7 +34070,7 @@ function PresentationStage({
33790
34070
  showResizeHandles: false,
33791
34071
  renderInk: true,
33792
34072
  renderGroups: true,
33793
- adjustmentHandleDescriptor: null,
34073
+ adjustmentHandles: [],
33794
34074
  onResizePointerDown: noop2,
33795
34075
  onAdjustmentPointerDown: noop2,
33796
34076
  onInlineEditChange: noop2,
@@ -34356,7 +34636,7 @@ ${url}`)) {
34356
34636
  var AiChatPanel = lazy(async () => {
34357
34637
  const [{ useChat }, { default: Panel }] = await Promise.all([
34358
34638
  import('@ai-sdk/react'),
34359
- import('./AiChatPanel-RZ4A7P4H.mjs')
34639
+ import('./AiChatPanel-SSSBERWJ.mjs')
34360
34640
  ]);
34361
34641
  function BoundAiChatPanel(props) {
34362
34642
  return /* @__PURE__ */ jsx(Panel, { ...props, useChat });
@@ -35261,6 +35541,11 @@ function ViewerSidePanels(props) {
35261
35541
  aiBridge,
35262
35542
  aiPanel
35263
35543
  } = props;
35544
+ const handleSetSlideSize = (size) => {
35545
+ s.setSlideSizeEmu(size);
35546
+ s.setCanvasSize(slideSizeToCanvasPx(size));
35547
+ history.markDirty();
35548
+ };
35264
35549
  const effectiveSlide = mode === "master" ? masterPseudoSlide : activeSlide;
35265
35550
  const currentBuiltInTheme = BUILT_IN_THEMES.find(
35266
35551
  (candidate) => themeColorSchemesEqual(s.theme?.colorScheme, candidate.colorScheme)
@@ -35289,6 +35574,8 @@ function ViewerSidePanels(props) {
35289
35574
  onUpdateElement: ops.updateSelectedElement,
35290
35575
  onApplySelection: ops.applySelection,
35291
35576
  onSetCanvasSize: s.setCanvasSize,
35577
+ slideSizeEmu: s.slideSizeEmu,
35578
+ onSetSlideSize: handleSetSlideSize,
35292
35579
  onMoveLayer: manipulation.handleMoveLayer,
35293
35580
  onMoveLayerToEdge: manipulation.handleMoveLayerToEdge,
35294
35581
  onDeleteElement: manipulation.handleDelete,
@@ -35480,6 +35767,7 @@ function ViewerMainContent(props) {
35480
35767
  onDeleteSection: sectionOps.deleteSection,
35481
35768
  onMoveSectionUp: sectionOps.moveSectionUp,
35482
35769
  onMoveSectionDown: sectionOps.moveSectionDown,
35770
+ onToggleSectionCollapse: sectionOps.toggleSectionCollapse,
35483
35771
  rehearsalTimings: Object.keys(presentation.recordedTimings).length > 0 ? presentation.recordedTimings : void 0,
35484
35772
  panelWidth: leftPanelWidth,
35485
35773
  fieldContext: thumbnailFieldContext,
@@ -35519,6 +35807,22 @@ function ViewerMainContent(props) {
35519
35807
  (master) => master ? { ...master, backgroundColor } : master
35520
35808
  );
35521
35809
  state.setIsDirty(true);
35810
+ },
35811
+ canEdit,
35812
+ onSlidesBackgroundChange: (backgroundColor) => {
35813
+ const write = setMasterViewBackgroundColor(
35814
+ { slideMasters: state.slideMasters },
35815
+ {
35816
+ tab: "slides",
35817
+ masterIndex: state.activeMasterIndex,
35818
+ layoutIndex: state.activeLayoutIndex
35819
+ },
35820
+ backgroundColor
35821
+ );
35822
+ if (write?.slideMasters) {
35823
+ state.setSlideMasters(write.slideMasters);
35824
+ state.setIsDirty(true);
35825
+ }
35522
35826
  }
35523
35827
  }
35524
35828
  ),
@@ -35886,6 +36190,7 @@ function MobileChromeOverlay(props) {
35886
36190
  onDeleteSection: editorOps.sectionOps.deleteSection,
35887
36191
  onMoveSectionUp: editorOps.sectionOps.moveSectionUp,
35888
36192
  onMoveSectionDown: editorOps.sectionOps.moveSectionDown,
36193
+ onToggleSectionCollapse: editorOps.sectionOps.toggleSectionCollapse,
35889
36194
  rehearsalTimings: Object.keys(presentation.recordedTimings).length > 0 ? presentation.recordedTimings : void 0
35890
36195
  }
35891
36196
  ),
@@ -37544,6 +37849,7 @@ var PowerPointViewer = forwardRef(
37544
37849
  activeMaster: state.activeMaster,
37545
37850
  presentationGridSpacing: state.presentationProperties.gridSpacing
37546
37851
  });
37852
+ const activeCustomShow = state.customShows.find((show) => show.id === state.activeCustomShowId) ?? null;
37547
37853
  const hasActivePointerInteraction = useCallback(
37548
37854
  () => Boolean(
37549
37855
  state.dragStateRef.current || state.resizeStateRef.current || state.marqueeStateRef.current || state.shapeAdjustmentDragStateRef.current || state.isDrawingRef.current
@@ -37602,7 +37908,13 @@ var PowerPointViewer = forwardRef(
37602
37908
  setMode: state.setMode,
37603
37909
  setActiveSlideIndex: state.setActiveSlideIndex,
37604
37910
  setSlides: state.setSlides,
37605
- history
37911
+ history,
37912
+ // PowerPoint's bare `J` during a show toggles live captions. It resolves
37913
+ // in the shared slide-show keymap; this is the state it has to reach.
37914
+ onToggleSubtitles: () => state.setPresentationProperties((prev) => ({
37915
+ ...prev,
37916
+ showSubtitles: !prev.showSubtitles
37917
+ }))
37606
37918
  });
37607
37919
  useTouchGestures({
37608
37920
  targetRef: zoom.canvasViewportRef,
@@ -38087,6 +38399,7 @@ var PowerPointViewer = forwardRef(
38087
38399
  canvasSize,
38088
38400
  templateElements: state.templateElements,
38089
38401
  presentation,
38402
+ activeCustomShow,
38090
38403
  onExitPresentation: () => handleSetMode("edit"),
38091
38404
  onUpdateNotes: propertyHandlers.handleUpdateNotes,
38092
38405
  isMobile