pptx-react-viewer 4.5.0 → 4.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (132) hide show
  1. package/CHANGELOG.md +44 -0
  2. package/README.md +34 -33
  3. package/dist/{AiChatPanel-P2N6X2KB.js → AiChatPanel-3C7GM6ZF.js} +28 -28
  4. package/dist/AiChatPanel-3C7GM6ZF.js.br +0 -0
  5. package/dist/AiChatPanel-3C7GM6ZF.js.gz +0 -0
  6. package/dist/{AiChatPanel-HXGCZPUX.mjs → AiChatPanel-L7DBCWE3.mjs} +4 -4
  7. package/dist/AiChatPanel-L7DBCWE3.mjs.br +0 -0
  8. package/dist/AiChatPanel-L7DBCWE3.mjs.gz +0 -0
  9. package/dist/{Model3DScene-QXMMJRV3.mjs → Model3DScene-IJ7YYTYU.mjs} +1 -1
  10. package/dist/Model3DScene-IJ7YYTYU.mjs.br +0 -0
  11. package/dist/Model3DScene-IJ7YYTYU.mjs.gz +0 -0
  12. package/dist/{Model3DScene-PIFMH2TU.js → Model3DScene-USKNPWWH.js} +2 -2
  13. package/dist/Model3DScene-USKNPWWH.js.br +0 -0
  14. package/dist/Model3DScene-USKNPWWH.js.gz +0 -0
  15. package/dist/{chunk-UMQV2432.js → chunk-3JUZOKFI.js} +1 -0
  16. package/dist/chunk-3JUZOKFI.js.br +0 -0
  17. package/dist/{chunk-UMQV2432.js.gz → chunk-3JUZOKFI.js.gz} +0 -0
  18. package/dist/{chunk-T35BGKZG.js → chunk-5V5SMT5A.js} +5 -5
  19. package/dist/chunk-5V5SMT5A.js.br +0 -0
  20. package/dist/chunk-5V5SMT5A.js.gz +0 -0
  21. package/dist/{chunk-UZFCFYK6.js → chunk-DFSWCVRW.js} +1278 -1129
  22. package/dist/chunk-DFSWCVRW.js.br +0 -0
  23. package/dist/chunk-DFSWCVRW.js.gz +0 -0
  24. package/dist/{chunk-LYZQLV7R.js → chunk-FZSYLXJT.js} +783 -38
  25. package/dist/chunk-FZSYLXJT.js.br +0 -0
  26. package/dist/chunk-FZSYLXJT.js.gz +0 -0
  27. package/dist/{chunk-Y4VRYQQS.js → chunk-IBHIXBC5.js} +865 -844
  28. package/dist/chunk-IBHIXBC5.js.br +0 -0
  29. package/dist/chunk-IBHIXBC5.js.gz +0 -0
  30. package/dist/{chunk-VZNIVS3X.mjs → chunk-ICEZL4TM.mjs} +755 -38
  31. package/dist/chunk-ICEZL4TM.mjs.br +0 -0
  32. package/dist/chunk-ICEZL4TM.mjs.gz +0 -0
  33. package/dist/{chunk-PRXJ3J5W.mjs → chunk-INX3E37P.mjs} +53 -32
  34. package/dist/chunk-INX3E37P.mjs.br +0 -0
  35. package/dist/chunk-INX3E37P.mjs.gz +0 -0
  36. package/dist/{chunk-ZF5S3HHW.mjs → chunk-K6QHGABT.mjs} +2 -2
  37. package/dist/chunk-K6QHGABT.mjs.br +0 -0
  38. package/dist/chunk-K6QHGABT.mjs.gz +0 -0
  39. package/dist/{chunk-APAVAD2A.mjs → chunk-OOO4JL2N.mjs} +1 -0
  40. package/dist/chunk-OOO4JL2N.mjs.br +0 -0
  41. package/dist/{chunk-APAVAD2A.mjs.gz → chunk-OOO4JL2N.mjs.gz} +0 -0
  42. package/dist/{chunk-DX2JCSQ4.mjs → chunk-VCAQSSGD.mjs} +1 -1
  43. package/dist/chunk-VCAQSSGD.mjs.br +0 -0
  44. package/dist/chunk-VCAQSSGD.mjs.gz +0 -0
  45. package/dist/{chunk-6FVYG27J.js → chunk-Y4QUVWZC.js} +188 -188
  46. package/dist/chunk-Y4QUVWZC.js.br +0 -0
  47. package/dist/chunk-Y4QUVWZC.js.gz +0 -0
  48. package/dist/{chunk-IDV2ITXM.mjs → chunk-ZAQFTO4P.mjs} +220 -71
  49. package/dist/chunk-ZAQFTO4P.mjs.br +0 -0
  50. package/dist/chunk-ZAQFTO4P.mjs.gz +0 -0
  51. package/dist/i18n/de.cjs +1 -0
  52. package/dist/i18n/de.cjs.br +0 -0
  53. package/dist/i18n/de.cjs.gz +0 -0
  54. package/dist/i18n/de.mjs +1 -0
  55. package/dist/i18n/de.mjs.br +0 -0
  56. package/dist/i18n/de.mjs.gz +0 -0
  57. package/dist/i18n/es.cjs +1 -0
  58. package/dist/i18n/es.cjs.br +0 -0
  59. package/dist/i18n/es.cjs.gz +0 -0
  60. package/dist/i18n/es.mjs +1 -0
  61. package/dist/i18n/es.mjs.br +0 -0
  62. package/dist/i18n/es.mjs.gz +0 -0
  63. package/dist/i18n/fr.cjs +1 -0
  64. package/dist/i18n/fr.cjs.br +0 -0
  65. package/dist/i18n/fr.cjs.gz +0 -0
  66. package/dist/i18n/fr.mjs +1 -0
  67. package/dist/i18n/fr.mjs.br +0 -0
  68. package/dist/i18n/fr.mjs.gz +0 -0
  69. package/dist/i18n/zh-CN.cjs +1 -0
  70. package/dist/i18n/zh-CN.cjs.br +0 -0
  71. package/dist/i18n/zh-CN.cjs.gz +0 -0
  72. package/dist/i18n/zh-CN.mjs +1 -0
  73. package/dist/i18n/zh-CN.mjs.br +0 -0
  74. package/dist/i18n/zh-CN.mjs.gz +0 -0
  75. package/dist/i18n.js +4 -4
  76. package/dist/i18n.js.br +0 -0
  77. package/dist/i18n.js.gz +0 -0
  78. package/dist/i18n.mjs +1 -1
  79. package/dist/i18n.mjs.br +0 -0
  80. package/dist/i18n.mjs.gz +0 -0
  81. package/dist/index.d.ts +266 -3
  82. package/dist/index.js +105 -49
  83. package/dist/index.js.br +0 -0
  84. package/dist/index.js.gz +0 -0
  85. package/dist/index.mjs +6 -6
  86. package/dist/index.mjs.br +0 -0
  87. package/dist/index.mjs.gz +0 -0
  88. package/dist/internals.d.ts +273 -2
  89. package/dist/internals.js +105 -105
  90. package/dist/internals.js.br +0 -0
  91. package/dist/internals.js.gz +0 -0
  92. package/dist/internals.mjs +4 -4
  93. package/dist/internals.mjs.br +0 -0
  94. package/dist/internals.mjs.gz +0 -0
  95. package/dist/viewer/index.d.ts +368 -1
  96. package/dist/viewer/index.js +27 -27
  97. package/dist/viewer/index.js.br +0 -0
  98. package/dist/viewer/index.js.gz +0 -0
  99. package/dist/viewer/index.mjs +6 -6
  100. package/dist/viewer/index.mjs.br +3 -4
  101. package/dist/viewer/index.mjs.gz +0 -0
  102. package/package.json +1 -1
  103. package/dist/AiChatPanel-HXGCZPUX.mjs.br +0 -0
  104. package/dist/AiChatPanel-HXGCZPUX.mjs.gz +0 -0
  105. package/dist/AiChatPanel-P2N6X2KB.js.br +0 -0
  106. package/dist/AiChatPanel-P2N6X2KB.js.gz +0 -0
  107. package/dist/Model3DScene-PIFMH2TU.js.br +0 -0
  108. package/dist/Model3DScene-PIFMH2TU.js.gz +0 -0
  109. package/dist/Model3DScene-QXMMJRV3.mjs.br +0 -0
  110. package/dist/Model3DScene-QXMMJRV3.mjs.gz +0 -0
  111. package/dist/chunk-6FVYG27J.js.br +0 -0
  112. package/dist/chunk-6FVYG27J.js.gz +0 -0
  113. package/dist/chunk-APAVAD2A.mjs.br +0 -0
  114. package/dist/chunk-DX2JCSQ4.mjs.br +0 -0
  115. package/dist/chunk-DX2JCSQ4.mjs.gz +0 -0
  116. package/dist/chunk-IDV2ITXM.mjs.br +0 -0
  117. package/dist/chunk-IDV2ITXM.mjs.gz +0 -0
  118. package/dist/chunk-LYZQLV7R.js.br +0 -0
  119. package/dist/chunk-LYZQLV7R.js.gz +0 -0
  120. package/dist/chunk-PRXJ3J5W.mjs.br +0 -0
  121. package/dist/chunk-PRXJ3J5W.mjs.gz +0 -0
  122. package/dist/chunk-T35BGKZG.js.br +0 -0
  123. package/dist/chunk-T35BGKZG.js.gz +0 -0
  124. package/dist/chunk-UMQV2432.js.br +0 -0
  125. package/dist/chunk-UZFCFYK6.js.br +0 -0
  126. package/dist/chunk-UZFCFYK6.js.gz +0 -0
  127. package/dist/chunk-VZNIVS3X.mjs.br +0 -0
  128. package/dist/chunk-VZNIVS3X.mjs.gz +0 -0
  129. package/dist/chunk-Y4VRYQQS.js.br +0 -0
  130. package/dist/chunk-Y4VRYQQS.js.gz +0 -0
  131. package/dist/chunk-ZF5S3HHW.mjs.br +0 -0
  132. package/dist/chunk-ZF5S3HHW.mjs.gz +0 -0
@@ -1,9 +1,9 @@
1
- import { computeFocusTargets, deckDataFieldChanged, aiChangeAnimationCss, changeGhostStyle, createChatHistoryStore, collectStoredChats, exportAiChatLogs, applyElementUpdate } from './chunk-DX2JCSQ4.mjs';
2
- import { useViewerOptions, useReadOnlyRecommendationState, useCompatibilityToastsState, useReducedMotion, useViewerState, useIsMobile, useResizablePanels, useDerivedSlideState, useZoomViewport, useEditorHistory, usePresentationSetup, useTouchGestures, useViewerDialogs, useEditorOperations, useViewerIntegration, useViewPreferencesSync, useLayoutSwitching, ViewerOptionsContext, Rendering3DFlagsContext, CollaborationProvider, useCollaboration, useCollaborationDocumentSync, useFollowMode, useBroadcastFollower, SlideBackgroundImageLayer, StaticElementRenderer, safePrompt, scopeLayoutOptionsToActiveSlide, ChartPartSelectionProvider, useToolbarVisibility, useKeyboardInsets, useModalDismissDrag, useViewerOptionsContext, useVirtualizedSlides, useSwipeNavigation, PresentationTransitionOverlay, RemoteSelectionOverlay, CollaborationCursorOverlay, useSheetDismissDrag, detectTargetType, parseEmailUrl, parseSlideFromUrl, ACTION_VERB_MAP, ElementRenderer, InlineCollaborationContext, SmartArtRenderer, playAnimationSound, ResizeHandles, renderStrokeView, useChartPartSelection, resolveSmartArtDataPalette } from './chunk-PRXJ3J5W.mjs';
3
- import { SHAPE_PRESETS, ANIMATION_PRESET_OPTIONS, cn, SLIDE_NAV_THUMBNAIL_WIDTH, TOOLBAR_SECTIONS, DEFAULT_SECTION_GROUP_ID, SHORTCUT_REFERENCE_ITEMS as SHORTCUT_REFERENCE_ITEMS$1, isConnectorOrLineElement, GRID_SIZE, MIN_ELEMENT_SIZE, CONNECTOR_ARROW_OPTIONS, ARROW_SIZE_OPTIONS, DEFAULT_FILL_COLOR, startMotionPathPreview, startPreviewAnimation, stopPreviewAnimation, DEFAULT_STROKE_COLOR, STROKE_DASH_OPTIONS } from './chunk-ZF5S3HHW.mjs';
4
- import { SWITCHABLE_LAYOUT_TYPES, compileEquationTemplateMathMl, buildUserFontFaceStyles, readStoredViewerPrefs, resolveThemeCatalogEntry, THEME_CATALOG, writeStoredViewerPrefs, openPptxFile, readBackstageRecentFile, resolveAutosaveActivation, buildThemeColorMap, viewerOptionsToPreferences, applyPreferenceToOptions, resolveHistoryDepth, applyAutoCorrect, resolveImageResolutionScale, resolveAutosaveIntervalMs, resolveAutosaveIntervalSeconds, shouldShowAutosaveRecoveryPrompt, resolveOptionRootClasses, resolve3DRenderingFlags, resolveSlideSizeSelection, RULER_THICKNESS, RULER_FONT_SIZE, buildPreviewElements, deriveSlideFieldContext, SLIDE_TRANSITION_OPTIONS, hiddenSlideCue, HIDDEN_SLIDE_SLASH_GRADIENT, HIDDEN_SLIDE_LABEL_KEY, visibleTemplateElements, normalizeHexColor, themeToCssVars, listAutosaveSnapshots, resolveExpiredAutosaveSnapshots, deleteAutosaveSnapshot, masterViewCrudActions, applyMasterViewCrudAction, masterViewCrudFailureKey, applyMotionPathPreset, resetSlideLayoutPath, DEFAULT_INSERT_CHART_KIND, hasCopyableFormat, templateSchemeFromTheme, createBackstagePresentation, playFeedbackSound, shouldDiscardAutosaveOnSuccessfulSave, setMasterViewBackgroundColor, canUseClipboard, runProgramNoticeStackStyle, compatToastStackStyle, printPropertiesFrameSlides, printPropertiesSlidesPerPage, PASTE_SPECIAL_OPTIONS, getDensePanelTouchTargetPx, shouldStickyActionRow, VIEWER_OPTIONS_TABS, DEFAULT_QUICK_ACCESS_COMMAND_IDS, isHeaderFooterDateTextVisible, isHeaderFooterHeaderTextVisible, isHeaderFooterFooterTextVisible, buildJoinCollaborationConfig, buildCreateCollaborationConfig, generateBroadcastRoomId, DEFAULT_BROADCAST_SERVER_URL, buildBroadcastViewerUrl, resolveTransportForServerUrl, getSlideBackgroundStyle, pushRecentColor, mruColorsPatch, shouldClearAutosaveCacheOnClose, filterCommands, resolveTitleBarStatusKey, TITLE_BAR_CLASSES, TITLE_BAR_DEFAULT_FILE_KEY, resolveScreenTip, masterViewBackgroundColor, buildFieldSubstitutionContext, shouldConfirmExternalHyperlink, safeOpenUrl, resolvePresentationAction, isPpactionUrl, parsePpactionUrl, isPresentationAdvanceClick, toggleBlackboard, PRESENT_TOOLBAR_CLASSES, buildContextMenuEntries, buildCanvasContextMenuEntries, isCurrentLayout, themeColorSchemesEqual, observeElementHeight, EXPANDED_MAX_HEIGHT, STATUS_BAR_CLASSES, buildBarActions, formatVersionTimestamp, formatRelativeTime, scanAvailableFontFamilies, PRESETS, CATEGORIES, convertOmmlToLatex, compileLatexEquation, convertLatexToOmml, EQUATION_TEMPLATES, clampPercent2, resolveDefaultPrintSettings, HANDOUT_OPTIONS, TOOLBAR_TABS, SHORTCUT_REFERENCE_ITEMS, resolveViewerAddinRows, availableQuickAccessCommands, addQuickAccessCommand, removeQuickAccessCommand, moveQuickAccessCommand, CUSTOM_FONT_ACCEPT, activateModalFocus, buildCollaborationShareUrl, buildActiveSessionUsers, 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, extraQuickAccessCommands, TAB_ROW_ACTION_CLASSES, listBackstageRecentFiles, BACKSTAGE_NAV, BACKSTAGE_BACK_CLASSES, BACKSTAGE_NAV_CLASSES, hasTextProperties, COMMON_FONT_SIZES, textFontSizePtToPx, INSERT_CHART_TYPES, ACTION_BUTTON_PRESETS, CHARACTER_SPACING_OPTIONS, OFFICE_COLOR_SWATCHES, hasShapeProperties, shapeFillChange, shapeOutlineChange, readRibbonTransitionDraft, ribbonTransitionUpdates, playSlideTransitionPreview, RIBBON_TRANSITION_PRESETS, transitionSoundOptions, transitionSoundSelectedValue, DEFAULT_MOTION_PATH_PRESET_ID, SLIDE_SHOW_OPTIONS, slideShowOptionChange, readSlideShowOption, resolveSlidePaneClick, SLIDE_VIRTUALIZATION_THRESHOLD, buildSlidePaneContextMenuEntries, PRESENTATION_HIT_TEST_CSS, PRESENTATION_STAGE_ATTRIBUTE, buildStrokePathD, cursorForTool, annotationOverlayZIndex, presentationInkPath, resolveNotesSchematicBodyFontSizePx, PRESENTER_NAVIGATOR_LABEL_KEYS, PEN_COLORS, HIGHLIGHTER_COLORS, isBlackboardActive, buildLayoutPreviewGeometry, scaleSlidesForSizeChange, slideSizeToCanvasPx, resolveSelectionPaneRename, PRESET_THEMES, resolveNotesSegments, segmentsToEditorHtml, DEBOUNCE_MS, createPlainNotesSegments, parseSegmentsFromRichEditor, segmentsToPlainText, getCurrentParagraphIndex, segmentsToParagraphs, paragraphsToSegments, MAX_INDENT_LEVEL, INDENT_PX, isUrlSafe, buildNotesPrintHtml, MIN_TOUCH_TARGET_PX, toggleSheet, SMARTART_PREVIEW_ELEMENT_HEIGHT, SMARTART_PREVIEW_ELEMENT_WIDTH, buildSmartArtPreviewElement, sanitizeMathMl, computeHandoutLayout, getPrintableArea, generateNoteLineCount, computeAllNotesPages, getNotesPrintableArea, downloadBlob, clampOptionNumber, 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, textFontSizePxToPt, buildFontCatalog, getSelectionTextStyleFlags, getInlineEditorSelectionResult, selectedParagraphBulletKind, elementBulletKind, selectionBulletKind, TEXT_DECORATION_FLAGS, nextToggleValue, buildThemeColorSwatchGrid, themeColorSwatchRows, findSelectedThemeSwatch, themeSwatchCommit, RIBBON_SHAPE_SWATCHES, canGroupSelection, canUngroupSelection, canSetStrokeWidth, strokeWidthOf, readSoundFileAsDataUrl, applyTransitionSoundFile, TRANSITION_SOUND_OTHER_VALUE, TRANSITION_SOUND_NONE_VALUE, clearTransitionSound, applyTransitionStockSound, transitionStockSoundId, getEffectSoundAsset, playAnimationRibbonPreview, ENTRANCE_PRESET_VALUES, EMPHASIS_PRESET_VALUES, EXIT_PRESET_VALUES, MOTION_PATH_FAMILIES, motionPathFamilyLabelKey, motionPathPresetsByFamily, motionPathPresetLabelKey, masterViewPseudoSlide, motionPathFor, setMotionPath, getShapeAdjustmentHandleDescriptors, shouldShowElementHandles, hasMultipleSelectedTableCells, computeAnchoredPopupPosition, applyTableStyleDelete, applyTableStyleMapChange, themeColorLabel, buildThemeColorGrid, THEME_COLOR_SCHEME_KEYS, COMMON_FONTS, handleReadingViewKey, getLocalStorageUsageSummary, saveViewerProfile, clearAllLocalViewerData, SLIDE_TEMPLATES, attachEditorImagePaste, authorConnectorBetweenSites, findEraserHitElementId, generateTicks, rulerDragToGuidePosition, resolveElementInteractivity, getElementTransformWithoutRotation, getElementTransform, buildChartQuickActionsDescriptor, applyChartElementToggle, CHART_QUICK_ACTION_BUTTON_SIZE, applyChartStylePreset, hideChartSeries, restoreFilteredSeries, getActiveXControlOverlayView, buildCommentMarkers, COMMENT_MARKER_SIZE, collectConnectorSiteCandidates, getConnectorEndpointHandles, findConnectorSiteNear, motionPathToSvgD, motionPathEndPixel, isEditableMotionPath, setMotionPathEnd, isElementLocked, isImageLikeElement, mergeSlideTransition, getElementLabel, TRIGGER_OPTIONS, mapSlideSorterKey, isEditorTextInputTarget, clampSorterZoom, buildSlideTemplateContent, buildFreeformShapeElement, buildLiveInkStrokeView, CONNECTOR_SITE_SNAP_PX, resolveConnectorEndpointUpdate, withConnectorEndpointUpdate, getShapeConnectionSites, elementLockTogglePatch, buildTableDataGrid, getDenseGridLayoutPlan, appendTableElementRow, removeLastTableElementRow, appendTableElementColumn, removeLastTableElementColumn, removeTableElementColumn, removeTableElementRow, setTableElementCellText, TABLE_STYLE_PRESETS, applyTableStylePreset, tableStyleAssignmentUpdate, evenColumnWidths, redistributeColumnWidth, evenRowHeights, patchChartData, collapseChartTitleRunsForEdit, chartGridlinesState, chartGridlinesPatch, seriesSecondaryAxisPatch, setChartCategoryLabel, setChartCellValue, addChartCategory, removeChartCategory, addChartSeries, removeChartSeries, setDataLabelsRangeCache, setChartAxisLogScale, setChartAxisTitleStyle, setChartAxisGridlineStyle, setChartSeriesMarker, setChartSeriesChartType, setChartDataPointFill, setChartDataPointExplosion, setChartDataPointMarker, setChartDataPointLabel, describeSmartArtBounds, canAddTopLevelNode, classifyExtraConnections, siblingIndex, siblingCount, canRemoveTopLevelNode, canInteractWithElement, buildOleObjectNamePatch, getOleObjectTypeLabel, sanitizeGradientStops, shouldShowAccessibilitySection, pptxActionToElementAction, withFrameSlides, withSlidesPerPage, applyThemeOverrideToSlide, COLOR_MAP_ALIAS_KEYS, DEFAULT_COLOR_MAP, schemaLabel, THEME_COLOR_SLOT_LABEL_KEYS, SLIDE_SIZE_PRESETS, TRANSITION_VALID_DIRECTIONS, TRANSITION_ORIENTATION_TYPES, TRANSITION_PATTERN_OPTIONS, TRANSITION_THRUBLK_TYPES, clampTransitionNumber, TRANSITION_SPEED_OPTIONS, TRANSITION_MORPH_OPTIONS, flattenTagCollections, resolveTemplateBackgroundRows, formatCommentTimestamp, commentMentionQuery, matchCommentMentionAuthors, buildAnimationTimelineRows, clearMotionPath, getEffectSoundState, setEffectSound, setEffectStockSound, setAfterAnimation, setAfterAnimationColor, DIRECTIONAL_PRESETS, buildAnimationTimelineBars, motionPathPresetIdForPath, EFFECT_SOUND_CATALOGUE, hasTiltData, normalizeTableStyleGuid, describeTableStyleEditor, TABLE_STYLE_EDITOR_PARTS, computeMergeCellRight, computeMergeCellDown, computeSplitCell, updateMergeAttrsInRawXml, resolveDisplayedChartType, CHART_TYPE_OPTIONS, chartDataLabelsTogglePatch, BAR3D_SHAPE_OPTIONS, bar3DShapePatch, RADAR_STYLE_OPTIONS, radarStylePatch, SURFACE_WIREFRAME_OPTIONS, surfaceWireframePatch, isSeriesUsingSecondaryAxis, listChartUserShapeRows, withChartUserShapeAdded, createDefaultChartUserShape, withChartUserShapeRowRemoved, withChartUserShapeRowTextUpdated, SMARTART_COLOR_SCHEME_LABEL_KEYS, SMARTART_STYLE_LABEL_KEYS, addSmartArtNodeAsChild, setSmartArtNodeStyle, removeSmartArtNode, addSiblingAfter, removeEmptyNode, demote, promote, updateSmartArtNodeText, reorder, clampCropValue, DUOTONE_PRESETS, ARTISTIC_EFFECTS, mediaTrimEndSeconds, trimmedMediaDurationMs, mediaTrimEndAbsoluteMs, mediaTrimEndMsFromAbsoluteMs, buildOleEditDialogDescriptor, buildOleContentUpdatePatch, applyOleSheetCellEdit, getOleSheetGrid, applyOleDocumentParagraphEdit, getOleDocumentParagraphs, applyOleNestedDeckElementTextEdit, getOleNestedDeckDetail, replaceOleFile, getNonVisualDescriptionFields, resolveActionType, ELEMENT_ACTION_TYPE_OPTIONS, elementActionToPptxAction, canCommitActionType, slideSizeFromPreset, withSlideSizeOrientation, TRANSITION_DIR_ARROWS, buildDirectionGrid, getSlideTransitionAnimations, SLIDE_TRANSITION_KEYFRAMES, updateTagInCollections, deleteTagFromCollections, addTagToCollections, commentTextSegments, COMMENT_MENTION_CLASS, COMMENT_MENTION_ATTRIBUTE, insertCommentMention, reorderAnimationTimelineRows, applyAnimationTimelineOrder, animationEffectLabel, TABLE_STYLE_BORDER_SIDES, applyTableStyleFieldEdit, createTableStyleEntry, addTableStyleToMap, deleteTableStyleFromMap, LBL, SEL, FILL_MODE_OPTIONS, SECTION_HEADING, NUM, getChartUserShapeGroupTransform, withChartUserShapeGroupChildAdded, createDefaultChartUserShapeGroupChild, withChartUserShapeRowUpdated, getChartUserShapeRowChartBox, withChartUserShapeRowFlipUpdated, withChartUserShapeRowRotationUpdated, withChartUserShapeRowChartBoxUpdated, switchSmartArtLayout, rebuildDrawingShapesIfCleared, mediaTrimEndMsFromSeconds, validateMediaTrimRange, SHAPE_QUICK_STYLES, quickStyleSwatchCss, PATTERN_PRESET_OPTIONS, getPatternSvg, COMPOUND_LINE_OPTIONS, LINE_JOIN_OPTIONS, LINE_CAP_OPTIONS, TEXT_WARP_PRESETS, warpPreviewPath, text3dPtToEmu, text3dEmuToPt, MATERIAL_PRESETS, toSlideIndex, TABLE_STYLE_BORDER_SIDE_LABEL_KEYS, TABLE_STYLE_DASH_PRESETS, GRADIENT_TYPE_OPTIONS, PATTERN_OPTIONS, FILL_PATTERN_LABEL_KEYS, openNativeEyeDropper, toggleText3dExtrusion, BEVEL_PRESETS } from './chunk-VZNIVS3X.mjs';
5
- import { LOCALE_CATALOG, ALIGNMENT_LABEL_KEYS } from './chunk-APAVAD2A.mjs';
6
- import React4, { createContext, lazy, forwardRef, useEffect, useState, useCallback, useMemo, useRef, useId, Fragment as Fragment$1, useDeferredValue, useLayoutEffect, Suspense, useContext, useSyncExternalStore } from 'react';
1
+ import { computeFocusTargets, deckDataFieldChanged, aiChangeAnimationCss, changeGhostStyle, createChatHistoryStore, collectStoredChats, exportAiChatLogs, applyElementUpdate } from './chunk-VCAQSSGD.mjs';
2
+ import { useViewerOptions, useReadOnlyRecommendationState, useCompatibilityToastsState, useReducedMotion, useViewerState, useIsMobile, useResizablePanels, useDerivedSlideState, useZoomViewport, useEditorHistory, usePresentationSetup, useTouchGestures, useViewerDialogs, useEditorOperations, useViewerIntegration, useViewPreferencesSync, useLayoutSwitching, ViewerOptionsContext, Rendering3DFlagsContext, CollaborationProvider, useCollaboration, useCollaborationDocumentSync, useFollowMode, useBroadcastFollower, SlideBackgroundImageLayer, StaticElementRenderer, safePrompt, scopeLayoutOptionsToActiveSlide, ChartPartSelectionProvider, useToolbarVisibility, useKeyboardInsets, useModalDismissDrag, useViewerOptionsContext, useVirtualizedSlides, useSwipeNavigation, PresentationTransitionOverlay, RemoteSelectionOverlay, CollaborationCursorOverlay, useSheetDismissDrag, detectTargetType, parseEmailUrl, parseSlideFromUrl, ACTION_VERB_MAP, ElementRenderer, InlineCollaborationContext, SmartArtRenderer, playAnimationSound, ResizeHandles, renderStrokeView, useChartPartSelection, resolveSmartArtDataPalette } from './chunk-INX3E37P.mjs';
3
+ import { SHAPE_PRESETS, ANIMATION_PRESET_OPTIONS, cn, SLIDE_NAV_THUMBNAIL_WIDTH, TOOLBAR_SECTIONS, DEFAULT_SECTION_GROUP_ID, SHORTCUT_REFERENCE_ITEMS as SHORTCUT_REFERENCE_ITEMS$1, isConnectorOrLineElement, GRID_SIZE, MIN_ELEMENT_SIZE, CONNECTOR_ARROW_OPTIONS, ARROW_SIZE_OPTIONS, DEFAULT_FILL_COLOR, startMotionPathPreview, startPreviewAnimation, stopPreviewAnimation, DEFAULT_STROKE_COLOR, STROKE_DASH_OPTIONS } from './chunk-K6QHGABT.mjs';
4
+ import { EMPTY_RESOLVED_CUSTOMIZATION, SWITCHABLE_LAYOUT_TYPES, compileEquationTemplateMathMl, buildUserFontFaceStyles, readStoredViewerPrefs, resolveThemeCatalogEntry, THEME_CATALOG, writeStoredViewerPrefs, openPptxFile, readBackstageRecentFile, isFeatureEnabled, isDialogAvailable, resolveAutosaveActivation, buildThemeColorMap, viewerOptionsToPreferences, applyPreferenceToOptions, resolveHistoryDepth, applyAutoCorrect, resolveImageResolutionScale, resolveAutosaveIntervalMs, resolveAutosaveIntervalSeconds, isPanelVisible, shouldShowAutosaveRecoveryPrompt, resolveOptionRootClasses, resolve3DRenderingFlags, resolveSlideSizeSelection, RULER_THICKNESS, RULER_FONT_SIZE, buildPreviewElements, deriveSlideFieldContext, SLIDE_TRANSITION_OPTIONS, hiddenSlideCue, HIDDEN_SLIDE_SLASH_GRADIENT, HIDDEN_SLIDE_LABEL_KEY, visibleTemplateElements, normalizeHexColor, themeToCssVars, createCustomizationController, resolveEffectiveHiddenActions, listAutosaveSnapshots, resolveExpiredAutosaveSnapshots, deleteAutosaveSnapshot, masterViewCrudActions, applyMasterViewCrudAction, masterViewCrudFailureKey, applyMotionPathPreset, resetSlideLayoutPath, DEFAULT_INSERT_CHART_KIND, hasCopyableFormat, templateSchemeFromTheme, createBackstagePresentation, playFeedbackSound, shouldDiscardAutosaveOnSuccessfulSave, setMasterViewBackgroundColor, canUseClipboard, runProgramNoticeStackStyle, compatToastStackStyle, printPropertiesFrameSlides, printPropertiesSlidesPerPage, PASTE_SPECIAL_OPTIONS, getDensePanelTouchTargetPx, shouldStickyActionRow, customizeOptionsTabs, VIEWER_OPTIONS_TABS, isOptionsPageVisible, DEFAULT_QUICK_ACCESS_COMMAND_IDS, isHeaderFooterDateTextVisible, isHeaderFooterHeaderTextVisible, isHeaderFooterFooterTextVisible, buildJoinCollaborationConfig, buildCreateCollaborationConfig, generateBroadcastRoomId, DEFAULT_BROADCAST_SERVER_URL, buildBroadcastViewerUrl, resolveTransportForServerUrl, getSlideBackgroundStyle, pushRecentColor, mruColorsPatch, shouldClearAutosaveCacheOnClose, filterCommands, resolveTitleBarStatusKey, TITLE_BAR_CLASSES, TITLE_BAR_DEFAULT_FILE_KEY, resolveScreenTip, masterViewBackgroundColor, buildFieldSubstitutionContext, shouldConfirmExternalHyperlink, safeOpenUrl, resolvePresentationAction, isPpactionUrl, parsePpactionUrl, isPresentationAdvanceClick, toggleBlackboard, PRESENT_TOOLBAR_CLASSES, customizeContextMenuEntries, buildContextMenuEntries, customizeCanvasContextMenuEntries, buildCanvasContextMenuEntries, isCurrentLayout, themeColorSchemesEqual, observeElementHeight, EXPANDED_MAX_HEIGHT, STATUS_BAR_CLASSES, buildBarActions, formatVersionTimestamp, formatRelativeTime, scanAvailableFontFamilies, PRESETS, CATEGORIES, convertOmmlToLatex, compileLatexEquation, convertLatexToOmml, EQUATION_TEMPLATES, clampPercent2, resolveDefaultPrintSettings, HANDOUT_OPTIONS, TOOLBAR_TABS, SHORTCUT_REFERENCE_ITEMS, resolveViewerAddinRows, availableQuickAccessCommands, addQuickAccessCommand, removeQuickAccessCommand, moveQuickAccessCommand, CUSTOM_FONT_ACCEPT, activateModalFocus, buildCollaborationShareUrl, buildActiveSessionUsers, 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, extraQuickAccessCommands, TAB_ROW_ACTION_CLASSES, customizeBackstageNav, BACKSTAGE_NAV, listBackstageRecentFiles, BACKSTAGE_BACK_CLASSES, BACKSTAGE_NAV_CLASSES, hasTextProperties, COMMON_FONT_SIZES, textFontSizePtToPx, INSERT_CHART_TYPES, ACTION_BUTTON_PRESETS, CHARACTER_SPACING_OPTIONS, OFFICE_COLOR_SWATCHES, hasShapeProperties, shapeFillChange, shapeOutlineChange, readRibbonTransitionDraft, ribbonTransitionUpdates, playSlideTransitionPreview, RIBBON_TRANSITION_PRESETS, transitionSoundOptions, transitionSoundSelectedValue, DEFAULT_MOTION_PATH_PRESET_ID, SLIDE_SHOW_OPTIONS, slideShowOptionChange, readSlideShowOption, resolveSlidePaneClick, SLIDE_VIRTUALIZATION_THRESHOLD, buildSlidePaneContextMenuEntries, PRESENTATION_HIT_TEST_CSS, PRESENTATION_STAGE_ATTRIBUTE, buildStrokePathD, cursorForTool, annotationOverlayZIndex, presentationInkPath, resolveNotesSchematicBodyFontSizePx, PRESENTER_NAVIGATOR_LABEL_KEYS, PEN_COLORS, HIGHLIGHTER_COLORS, isBlackboardActive, clampFlyoutPosition, buildLayoutPreviewGeometry, scaleSlidesForSizeChange, slideSizeToCanvasPx, resolveSelectionPaneRename, PRESET_THEMES, resolveNotesSegments, segmentsToEditorHtml, DEBOUNCE_MS, createPlainNotesSegments, parseSegmentsFromRichEditor, segmentsToPlainText, getCurrentParagraphIndex, segmentsToParagraphs, paragraphsToSegments, MAX_INDENT_LEVEL, INDENT_PX, isUrlSafe, buildNotesPrintHtml, MIN_TOUCH_TARGET_PX, toggleSheet, SMARTART_PREVIEW_ELEMENT_HEIGHT, SMARTART_PREVIEW_ELEMENT_WIDTH, buildSmartArtPreviewElement, sanitizeMathMl, computeHandoutLayout, getPrintableArea, generateNoteLineCount, computeAllNotesPages, getNotesPrintableArea, downloadBlob, clampOptionNumber, 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, customizeBackstageCards, backstageCardsFor, DEFAULT_VIEWER_PROFILE, resolveProfileInitial, AVATAR_COLOR_SWATCHES, resolveDefaultFontFamily, textFontSizePxToPt, buildFontCatalog, getSelectionTextStyleFlags, getInlineEditorSelectionResult, selectedParagraphBulletKind, elementBulletKind, selectionBulletKind, TEXT_DECORATION_FLAGS, nextToggleValue, buildThemeColorSwatchGrid, themeColorSwatchRows, findSelectedThemeSwatch, themeSwatchCommit, RIBBON_SHAPE_SWATCHES, canGroupSelection, canUngroupSelection, canSetStrokeWidth, strokeWidthOf, readSoundFileAsDataUrl, applyTransitionSoundFile, TRANSITION_SOUND_OTHER_VALUE, TRANSITION_SOUND_NONE_VALUE, clearTransitionSound, applyTransitionStockSound, transitionStockSoundId, getEffectSoundAsset, playAnimationRibbonPreview, ENTRANCE_PRESET_VALUES, EMPHASIS_PRESET_VALUES, EXIT_PRESET_VALUES, MOTION_PATH_FAMILIES, motionPathFamilyLabelKey, motionPathPresetsByFamily, motionPathPresetLabelKey, masterViewPseudoSlide, motionPathFor, setMotionPath, getShapeAdjustmentHandleDescriptors, shouldShowElementHandles, hasMultipleSelectedTableCells, computeAnchoredPopupPosition, applyTableStyleDelete, applyTableStyleMapChange, themeColorLabel, buildThemeColorGrid, THEME_COLOR_SCHEME_KEYS, COMMON_FONTS, handleReadingViewKey, getLocalStorageUsageSummary, saveViewerProfile, clearAllLocalViewerData, SLIDE_TEMPLATES, attachEditorImagePaste, authorConnectorBetweenSites, findEraserHitElementId, generateTicks, rulerDragToGuidePosition, resolveElementInteractivity, getElementTransformWithoutRotation, getElementTransform, buildChartQuickActionsDescriptor, applyChartElementToggle, CHART_QUICK_ACTION_BUTTON_SIZE, applyChartStylePreset, hideChartSeries, restoreFilteredSeries, getActiveXControlOverlayView, buildCommentMarkers, COMMENT_MARKER_SIZE, collectConnectorSiteCandidates, getConnectorEndpointHandles, findConnectorSiteNear, motionPathToSvgD, motionPathEndPixel, isEditableMotionPath, setMotionPathEnd, isElementLocked, isImageLikeElement, mergeSlideTransition, getElementLabel, TRIGGER_OPTIONS, mapSlideSorterKey, isEditorTextInputTarget, clampSorterZoom, buildSlideTemplateContent, buildFreeformShapeElement, buildLiveInkStrokeView, CONNECTOR_SITE_SNAP_PX, resolveConnectorEndpointUpdate, withConnectorEndpointUpdate, getShapeConnectionSites, elementLockTogglePatch, buildTableDataGrid, getDenseGridLayoutPlan, appendTableElementRow, removeLastTableElementRow, appendTableElementColumn, removeLastTableElementColumn, removeTableElementColumn, removeTableElementRow, setTableElementCellText, TABLE_STYLE_PRESETS, applyTableStylePreset, tableStyleAssignmentUpdate, evenColumnWidths, redistributeColumnWidth, evenRowHeights, patchChartData, collapseChartTitleRunsForEdit, chartGridlinesState, chartGridlinesPatch, seriesSecondaryAxisPatch, setChartCategoryLabel, setChartCellValue, addChartCategory, removeChartCategory, addChartSeries, removeChartSeries, setDataLabelsRangeCache, setChartAxisLogScale, setChartAxisTitleStyle, setChartAxisGridlineStyle, setChartSeriesMarker, setChartSeriesChartType, setChartDataPointFill, setChartDataPointExplosion, setChartDataPointMarker, setChartDataPointLabel, describeSmartArtBounds, canAddTopLevelNode, classifyExtraConnections, siblingIndex, siblingCount, canRemoveTopLevelNode, canInteractWithElement, buildOleObjectNamePatch, getOleObjectTypeLabel, sanitizeGradientStops, shouldShowAccessibilitySection, pptxActionToElementAction, withFrameSlides, withSlidesPerPage, applyThemeOverrideToSlide, COLOR_MAP_ALIAS_KEYS, DEFAULT_COLOR_MAP, schemaLabel, THEME_COLOR_SLOT_LABEL_KEYS, SLIDE_SIZE_PRESETS, TRANSITION_VALID_DIRECTIONS, TRANSITION_ORIENTATION_TYPES, TRANSITION_PATTERN_OPTIONS, TRANSITION_THRUBLK_TYPES, clampTransitionNumber, TRANSITION_SPEED_OPTIONS, TRANSITION_MORPH_OPTIONS, flattenTagCollections, resolveTemplateBackgroundRows, formatCommentTimestamp, commentMentionQuery, matchCommentMentionAuthors, buildAnimationTimelineRows, clearMotionPath, getEffectSoundState, setEffectSound, setEffectStockSound, setAfterAnimation, setAfterAnimationColor, DIRECTIONAL_PRESETS, buildAnimationTimelineBars, motionPathPresetIdForPath, EFFECT_SOUND_CATALOGUE, hasTiltData, normalizeTableStyleGuid, describeTableStyleEditor, TABLE_STYLE_EDITOR_PARTS, computeMergeCellRight, computeMergeCellDown, computeSplitCell, updateMergeAttrsInRawXml, resolveDisplayedChartType, CHART_TYPE_OPTIONS, chartDataLabelsTogglePatch, BAR3D_SHAPE_OPTIONS, bar3DShapePatch, RADAR_STYLE_OPTIONS, radarStylePatch, SURFACE_WIREFRAME_OPTIONS, surfaceWireframePatch, isSeriesUsingSecondaryAxis, listChartUserShapeRows, withChartUserShapeAdded, createDefaultChartUserShape, withChartUserShapeRowRemoved, withChartUserShapeRowTextUpdated, SMARTART_COLOR_SCHEME_LABEL_KEYS, SMARTART_STYLE_LABEL_KEYS, addSmartArtNodeAsChild, setSmartArtNodeStyle, removeSmartArtNode, addSiblingAfter, removeEmptyNode, demote, promote, updateSmartArtNodeText, reorder, clampCropValue, DUOTONE_PRESETS, ARTISTIC_EFFECTS, mediaTrimEndSeconds, trimmedMediaDurationMs, mediaTrimEndAbsoluteMs, mediaTrimEndMsFromAbsoluteMs, buildOleEditDialogDescriptor, buildOleContentUpdatePatch, applyOleSheetCellEdit, getOleSheetGrid, applyOleDocumentParagraphEdit, getOleDocumentParagraphs, applyOleNestedDeckElementTextEdit, getOleNestedDeckDetail, replaceOleFile, getNonVisualDescriptionFields, resolveActionType, ELEMENT_ACTION_TYPE_OPTIONS, elementActionToPptxAction, canCommitActionType, slideSizeFromPreset, withSlideSizeOrientation, TRANSITION_DIR_ARROWS, buildDirectionGrid, getSlideTransitionAnimations, SLIDE_TRANSITION_KEYFRAMES, updateTagInCollections, deleteTagFromCollections, addTagToCollections, commentTextSegments, COMMENT_MENTION_CLASS, COMMENT_MENTION_ATTRIBUTE, insertCommentMention, reorderAnimationTimelineRows, applyAnimationTimelineOrder, animationEffectLabel, TABLE_STYLE_BORDER_SIDES, applyTableStyleFieldEdit, createTableStyleEntry, addTableStyleToMap, deleteTableStyleFromMap, LBL, SEL, FILL_MODE_OPTIONS, SECTION_HEADING, NUM, getChartUserShapeGroupTransform, withChartUserShapeGroupChildAdded, createDefaultChartUserShapeGroupChild, withChartUserShapeRowUpdated, getChartUserShapeRowChartBox, withChartUserShapeRowFlipUpdated, withChartUserShapeRowRotationUpdated, withChartUserShapeRowChartBoxUpdated, switchSmartArtLayout, rebuildDrawingShapesIfCleared, mediaTrimEndMsFromSeconds, validateMediaTrimRange, SHAPE_QUICK_STYLES, quickStyleSwatchCss, PATTERN_PRESET_OPTIONS, getPatternSvg, COMPOUND_LINE_OPTIONS, LINE_JOIN_OPTIONS, LINE_CAP_OPTIONS, TEXT_WARP_PRESETS, warpPreviewPath, text3dPtToEmu, text3dEmuToPt, MATERIAL_PRESETS, toSlideIndex, TABLE_STYLE_BORDER_SIDE_LABEL_KEYS, TABLE_STYLE_DASH_PRESETS, GRADIENT_TYPE_OPTIONS, PATTERN_OPTIONS, FILL_PATTERN_LABEL_KEYS, openNativeEyeDropper, toggleText3dExtrusion, BEVEL_PRESETS } from './chunk-ICEZL4TM.mjs';
5
+ import { LOCALE_CATALOG, ALIGNMENT_LABEL_KEYS } from './chunk-OOO4JL2N.mjs';
6
+ import React4, { createContext, lazy, forwardRef, useEffect, useState, useCallback, useMemo, useRef, useLayoutEffect, useSyncExternalStore, useId, useContext, Fragment as Fragment$1, useDeferredValue, Suspense } from 'react';
7
7
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
8
8
  import { useTranslation } from 'react-i18next';
9
9
  import { LuMessageSquare, LuEyeOff, LuHistory, LuTrash2, LuSettings, LuX, LuCalendarDays, LuClock, LuHash, LuFileText, LuText, LuCast, LuSave, LuUndo, LuRedo, LuSearch, LuShieldCheck, LuPlus, LuPanelLeftClose, LuStickyNote, LuMonitor, LuColumns2, LuPresentation, LuMinus, LuSettings2, LuLayers, LuDownload, LuCheck, LuLock, LuEye, LuType, LuLoader, LuShieldAlert, LuSignature, LuInfo, LuTriangleAlert, LuPrinter, LuPenTool, LuBug, LuChevronUp, LuChevronDown, LuUpload, LuWifi, LuWifiOff, LuUsers, LuCopy, LuChevronLeft, LuChevronRight, LuPlay, LuPause, LuZoomOut, LuZoomIn, LuSpellCheck, LuFileDown, LuMenu, LuSparkles, LuShare2, LuPanelLeft, LuPanelRight, LuArrowLeft, LuFolderOpen, LuClipboardPaste, LuScissors, LuPaintbrush, LuSquare, LuImage, LuVideo, LuDatabase, LuAArrowUp, LuAArrowDown, LuRemoveFormatting, LuHighlighter, LuList, LuListOrdered, LuIndentDecrease, LuIndentIncrease, LuReplace, LuMousePointer2, LuShapes, LuPaintBucket, LuPenLine, LuPalette, LuPencil, LuStar, LuMoveRight, LuMousePointerClick, LuClock3, LuMonitorPlay, LuListVideo, LuCaptions, LuCamera, LuEraser, LuRotateCcw, LuCircleHelp, LuBookOpen, LuLanguages, LuGlobe, LuGitCompare, LuMessageSquarePlus, LuLockKeyhole, LuPanelTop, LuLayoutGrid, LuGrid3X3, LuPipette, LuRuler, LuMaximize2, LuCode, LuCaseSensitive, LuTimer, LuGripVertical, LuLoaderCircle, LuBold, LuItalic, LuUnderline, LuStrikethrough, LuLink, LuGrid2X2, LuCopyPlus, LuScan, LuMonitorOff, LuCirclePlay, LuCirclePause, LuArrowLeftRight, LuClipboardCopy, LuWand, LuTextCursorInput, LuFile, LuEllipsis, LuUserRound, LuFilePlus2, LuHouse, LuFileJson, LuBox, LuFileImage, LuUser, LuHardDrive, LuLogIn, LuLayoutTemplate, LuFolderPlus, LuAlignLeft, LuAlignCenter, LuAlignRight, LuAlignJustify, LuColumns3, LuSpline, LuAlignHorizontalSpaceAround, LuAlignVerticalSpaceAround, LuGroup, LuUngroup, LuMove, LuRadio, LuFilter, LuLockOpen, LuArrowDown, LuArrowUp, LuArrowRight, LuReply, LuRotateCw, LuBookmark } from 'react-icons/lu';
@@ -1574,6 +1574,12 @@ function DrawSection(p) {
1574
1574
  ] })
1575
1575
  ] });
1576
1576
  }
1577
+ var ViewerCustomizationContext = createContext(
1578
+ EMPTY_RESOLVED_CUSTOMIZATION
1579
+ );
1580
+ function useViewerCustomizationContext() {
1581
+ return useContext(ViewerCustomizationContext);
1582
+ }
1577
1583
  function useHostEvent(ref, type, handler) {
1578
1584
  useEffect(() => {
1579
1585
  const host = ref.current;
@@ -1688,7 +1694,7 @@ function AccountPage() {
1688
1694
  return void 0;
1689
1695
  });
1690
1696
  };
1691
- const version = "4.4.0" ;
1697
+ const version = "4.5.0" ;
1692
1698
  return /* @__PURE__ */ jsxs("div", { className: "mt-8 max-w-[700px] space-y-6", children: [
1693
1699
  /* @__PURE__ */ jsxs("section", { className: cardClass, children: [
1694
1700
  /* @__PURE__ */ jsxs("h2", { className: "flex items-center gap-2 text-sm font-semibold", children: [
@@ -1902,8 +1908,10 @@ function BackstageCards({
1902
1908
  print: props.onPrint,
1903
1909
  share: props.onOpenShareDialog
1904
1910
  };
1905
- const cards = backstageCardsFor(page).filter(
1906
- (card) => card.id !== "saveAsPptm" || props.hasMacros
1911
+ const customization = useViewerCustomizationContext();
1912
+ const cards = customizeBackstageCards(
1913
+ backstageCardsFor(page).filter((card) => card.id !== "saveAsPptm" || props.hasMacros),
1914
+ customization
1907
1915
  );
1908
1916
  if (cards.length === 0) {
1909
1917
  return null;
@@ -1943,7 +1951,10 @@ function BackstageNavIcon({ page }) {
1943
1951
  }
1944
1952
  function FileSection(p) {
1945
1953
  const { t } = useTranslation();
1946
- const [page, setPage] = useState("home");
1954
+ const [requestedPage, setRequestedPage] = useState("home");
1955
+ const nav = customizeBackstageNav(BACKSTAGE_NAV, useViewerCustomizationContext());
1956
+ const offered = (id) => nav.some((item) => item.id === id);
1957
+ const page = offered(requestedPage) ? requestedPage : offered("home") ? "home" : nav.find((item) => item.id !== "save" && item.id !== "close")?.id ?? "home";
1947
1958
  const [query, setQuery] = useState("");
1948
1959
  const [recent, setRecent] = useState([]);
1949
1960
  const { isHidden } = useToolbarVisibility(p.hiddenActions);
@@ -1961,7 +1972,7 @@ function FileSection(p) {
1961
1972
  p.onClose();
1962
1973
  }
1963
1974
  };
1964
- const current = BACKSTAGE_NAV.find((item) => item.id === page);
1975
+ const current = nav.find((item) => item.id === page);
1965
1976
  const title = current ? t(current.labelKey, { defaultValue: current.label }) : t("pptx.backstage.nav.home");
1966
1977
  return /* @__PURE__ */ jsxs(
1967
1978
  "div",
@@ -1983,15 +1994,13 @@ function FileSection(p) {
1983
1994
  }
1984
1995
  ) }),
1985
1996
  /* @__PURE__ */ jsxs("nav", { className: "flex min-h-0 flex-1 flex-col overflow-y-auto pb-2 max-md:flex-row max-md:items-center max-md:overflow-y-visible max-md:pb-0", children: [
1986
- BACKSTAGE_NAV.filter(
1987
- (item) => !item.group && !(item.id === "export" && exportHidden)
1988
- ).map((item) => /* @__PURE__ */ jsxs(
1997
+ nav.filter((item) => !item.group && !(item.id === "export" && exportHidden)).map((item) => /* @__PURE__ */ jsxs(
1989
1998
  "button",
1990
1999
  {
1991
2000
  type: "button",
1992
2001
  "data-pptx-backstage-nav-item": true,
1993
2002
  "aria-current": page === item.id ? "page" : void 0,
1994
- onClick: () => item.id === "close" ? p.onClose() : item.id === "save" ? run(p.onSaveAsPptx) : setPage(item.id),
2003
+ onClick: () => item.id === "close" ? p.onClose() : item.id === "save" ? run(p.onSaveAsPptx) : setRequestedPage(item.id),
1995
2004
  className: `${BACKSTAGE_NAV_CLASSES.row} ${page === item.id ? BACKSTAGE_NAV_CLASSES.active : BACKSTAGE_NAV_CLASSES.inactive}`,
1996
2005
  children: [
1997
2006
  /* @__PURE__ */ jsx(BackstageNavIcon, { page: item.id }),
@@ -2001,13 +2010,13 @@ function FileSection(p) {
2001
2010
  item.id
2002
2011
  )),
2003
2012
  /* @__PURE__ */ jsx("div", { className: "flex-1 max-md:hidden" }),
2004
- BACKSTAGE_NAV.filter((item) => item.group).map((item) => /* @__PURE__ */ jsxs(
2013
+ nav.filter((item) => item.group).map((item) => /* @__PURE__ */ jsxs(
2005
2014
  "button",
2006
2015
  {
2007
2016
  type: "button",
2008
2017
  "data-pptx-backstage-nav-item": true,
2009
2018
  "aria-current": page === item.id ? "page" : void 0,
2010
- onClick: () => item.id === "options" && p.onOpenSettings ? run(p.onOpenSettings) : setPage(item.id),
2019
+ onClick: () => item.id === "options" && p.onOpenSettings ? run(p.onOpenSettings) : setRequestedPage(item.id),
2011
2020
  className: `${BACKSTAGE_NAV_CLASSES.row} ${page === item.id ? BACKSTAGE_NAV_CLASSES.active : BACKSTAGE_NAV_CLASSES.inactive}`,
2012
2021
  children: [
2013
2022
  /* @__PURE__ */ jsx(BackstageNavIcon, { page: item.id }),
@@ -3181,6 +3190,7 @@ function ReviewSection(p) {
3181
3190
  {
3182
3191
  label: t("pptx.review.language"),
3183
3192
  icon: /* @__PURE__ */ jsx(LuGlobe, {}),
3193
+ disabled: !p.onSetLanguage,
3184
3194
  onClick: p.onSetLanguage
3185
3195
  }
3186
3196
  )
@@ -5491,8 +5501,9 @@ function EditingSection(p) {
5491
5501
  }
5492
5502
  function HelpSection(p) {
5493
5503
  const { t } = useTranslation();
5504
+ const showSettings = isDialogAvailable(useViewerCustomizationContext(), "options");
5494
5505
  return /* @__PURE__ */ jsxs(Fragment, { children: [
5495
- /* @__PURE__ */ jsx(
5506
+ showSettings && /* @__PURE__ */ jsx(
5496
5507
  "button",
5497
5508
  {
5498
5509
  type: "button",
@@ -5823,8 +5834,23 @@ function ModeSwitcher({
5823
5834
  }
5824
5835
  );
5825
5836
  }
5837
+ var EXPORT_CARD_OF = {
5838
+ png: "png",
5839
+ pdf: "pdf",
5840
+ video: "video",
5841
+ gif: "gif",
5842
+ copyImg: "copyImage"
5843
+ };
5826
5844
  function OverflowMenu(p) {
5827
5845
  const { t } = useTranslation();
5846
+ const customization = useViewerCustomizationContext();
5847
+ const offered = (k) => {
5848
+ const card = EXPORT_CARD_OF[k];
5849
+ if (card) {
5850
+ return !customization.hiddenBackstageCards.has(card);
5851
+ }
5852
+ return k !== "print" || isDialogAvailable(customization, "print");
5853
+ };
5828
5854
  const ovAct = (k) => {
5829
5855
  p.onSetOverflowMenuOpen(false);
5830
5856
  ({
@@ -5872,7 +5898,7 @@ function OverflowMenu(p) {
5872
5898
  onClick: () => p.onSetOverflowMenuOpen(false)
5873
5899
  }
5874
5900
  ),
5875
- /* @__PURE__ */ jsx("div", { className: "absolute right-0 top-full mt-1 z-50 w-44 rounded-lg border border-border bg-popover backdrop-blur-lg shadow-2xl py-1", children: OV.filter((o) => o.k !== "pptm" || p.hasMacros).map(
5901
+ /* @__PURE__ */ jsx("div", { className: "absolute right-0 top-full mt-1 z-50 w-44 rounded-lg border border-border bg-popover backdrop-blur-lg shadow-2xl py-1", children: OV.filter((o) => (o.k !== "pptm" || p.hasMacros) && offered(o.k)).map(
5876
5902
  (o) => o.k.startsWith("---") ? /* @__PURE__ */ jsx("div", { className: "my-1 border-t border-border/60" }, o.k) : /* @__PURE__ */ jsxs(
5877
5903
  "button",
5878
5904
  {
@@ -5901,9 +5927,15 @@ function ToolbarPrimaryRow(p) {
5901
5927
  onToggleInspector
5902
5928
  } = p;
5903
5929
  const collab = useCollaboration();
5930
+ const customization = useViewerCustomizationContext();
5931
+ const showSlidesToggle = isPanelVisible(customization, "slidesPane");
5932
+ const showInspectorToggle = isPanelVisible(customization, "inspector");
5933
+ const showComments = isFeatureEnabled(customization, "comments");
5934
+ const showShare = isDialogAvailable(customization, "share");
5935
+ const showSettings = isDialogAvailable(customization, "options");
5904
5936
  const qab = "p-1 max-md:p-2 max-md:min-h-[40px] max-md:min-w-[40px] rounded-sm transition-colors hover:bg-accent/60 disabled:opacity-40 disabled:cursor-not-allowed active:scale-90 active:opacity-70";
5905
5937
  return /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-0.5 max-md:gap-0 px-1.5 py-0.5 max-md:px-1", children: [
5906
- mode !== "present" && /* @__PURE__ */ jsx(
5938
+ mode !== "present" && showSlidesToggle && /* @__PURE__ */ jsx(
5907
5939
  "button",
5908
5940
  {
5909
5941
  type: "button",
@@ -5915,7 +5947,7 @@ function ToolbarPrimaryRow(p) {
5915
5947
  }
5916
5948
  ),
5917
5949
  /* @__PURE__ */ jsx("div", { className: "flex-1 min-w-2 max-md:min-w-1" }),
5918
- (mode === "edit" || mode === "master") && /* @__PURE__ */ jsxs(
5950
+ (mode === "edit" || mode === "master") && showComments && /* @__PURE__ */ jsxs(
5919
5951
  "button",
5920
5952
  {
5921
5953
  type: "button",
@@ -5933,7 +5965,7 @@ function ToolbarPrimaryRow(p) {
5933
5965
  ]
5934
5966
  }
5935
5967
  ),
5936
- collab && (collab.status === "connected" || collab.status === "connecting") && collab.remoteUsers.length > 0 && /* @__PURE__ */ jsx(
5968
+ collab && showShare && (collab.status === "connected" || collab.status === "connecting") && collab.remoteUsers.length > 0 && /* @__PURE__ */ jsx(
5937
5969
  "button",
5938
5970
  {
5939
5971
  type: "button",
@@ -5982,7 +6014,7 @@ function ToolbarPrimaryRow(p) {
5982
6014
  }
5983
6015
  ),
5984
6016
  sep,
5985
- (mode === "edit" || mode === "master") && /* @__PURE__ */ jsx(
6017
+ (mode === "edit" || mode === "master") && showInspectorToggle && /* @__PURE__ */ jsx(
5986
6018
  "button",
5987
6019
  {
5988
6020
  type: "button",
@@ -6004,7 +6036,7 @@ function ToolbarPrimaryRow(p) {
6004
6036
  children: /* @__PURE__ */ jsx(LuSparkles, { className: ic })
6005
6037
  }
6006
6038
  ),
6007
- /* @__PURE__ */ jsx(
6039
+ showSettings && /* @__PURE__ */ jsx(
6008
6040
  "button",
6009
6041
  {
6010
6042
  type: "button",
@@ -6033,6 +6065,7 @@ function Toolbar(p) {
6033
6065
  const { t } = useTranslation();
6034
6066
  const { isTabVisible } = useToolbarVisibility(p.hiddenActions);
6035
6067
  const viewerOptions = useViewerOptionsContext();
6068
+ const customization = useViewerCustomizationContext();
6036
6069
  if (isNarrowViewport && mode !== "present") {
6037
6070
  return /* @__PURE__ */ jsx(MobileToolbar, { ...p });
6038
6071
  }
@@ -6108,7 +6141,7 @@ function Toolbar(p) {
6108
6141
  ]
6109
6142
  }
6110
6143
  ),
6111
- showRibbon && viewerOptions.quickAccess.position === "below" && /* @__PURE__ */ jsx("div", { className: "flex items-center gap-0.5 border-b border-border/60 px-2 py-1", children: /* @__PURE__ */ jsx(
6144
+ showRibbon && viewerOptions.quickAccess.position === "below" && isPanelVisible(customization, "quickAccessToolbar") && /* @__PURE__ */ jsx("div", { className: "flex items-center gap-0.5 border-b border-border/60 px-2 py-1", children: /* @__PURE__ */ jsx(
6112
6145
  TitleBarQuickExtras,
6113
6146
  {
6114
6147
  quickAccess: viewerOptions.quickAccess,
@@ -9288,6 +9321,7 @@ function contextMenuContext(props) {
9288
9321
  table: tableCell(props),
9289
9322
  hasMultiSelection: Boolean(props.hasMultiSelection),
9290
9323
  selectionGroupable: props.selectionGroupable,
9324
+ hasClipboard: props.hasClipboard,
9291
9325
  // Both AI entries appear together or not at all, so a viewer that wired
9292
9326
  // only one of them does not produce a menu the other bindings cannot match.
9293
9327
  aiEnabled: Boolean(props.onAskAi) && Boolean(props.onFixAi)
@@ -9361,10 +9395,36 @@ function ContextMenuItem({
9361
9395
  function ContextMenuSeparator() {
9362
9396
  return /* @__PURE__ */ jsx("div", { role: "separator", "aria-orientation": "horizontal", className: "my-1 border-t border-border" });
9363
9397
  }
9398
+ function useClampedMenuPosition(x, y) {
9399
+ const [size, setSize] = useState({ width: 0, height: 0 });
9400
+ const ref = useCallback((node) => {
9401
+ if (!node) {
9402
+ return;
9403
+ }
9404
+ const rect = node.getBoundingClientRect();
9405
+ setSize(
9406
+ (previous) => previous.width === rect.width && previous.height === rect.height ? previous : { width: rect.width, height: rect.height }
9407
+ );
9408
+ }, []);
9409
+ const { left, top } = clampFlyoutPosition({
9410
+ x,
9411
+ y,
9412
+ width: size.width,
9413
+ height: size.height,
9414
+ viewportWidth: typeof window === "undefined" ? 0 : window.innerWidth,
9415
+ viewportHeight: typeof window === "undefined" ? 0 : window.innerHeight
9416
+ });
9417
+ return { ref, left, top };
9418
+ }
9364
9419
  function ContextMenu(props) {
9365
9420
  const { contextMenuState, mode, onClose } = props;
9366
9421
  const { t } = useTranslation();
9422
+ const customization = useViewerCustomizationContext();
9367
9423
  const open = Boolean(contextMenuState) && mode === "edit";
9424
+ const menuPosition = useClampedMenuPosition(
9425
+ contextMenuState?.x ?? 0,
9426
+ contextMenuState?.y ?? 0
9427
+ );
9368
9428
  useEffect(() => {
9369
9429
  if (!open) {
9370
9430
  return;
@@ -9382,7 +9442,13 @@ function ContextMenu(props) {
9382
9442
  return null;
9383
9443
  }
9384
9444
  const handlers = contextMenuHandlers(props);
9385
- const entries = buildContextMenuEntries(contextMenuContext(props));
9445
+ const entries = customizeContextMenuEntries(
9446
+ buildContextMenuEntries(contextMenuContext(props)),
9447
+ customization
9448
+ );
9449
+ if (entries.length === 0) {
9450
+ return null;
9451
+ }
9386
9452
  return /* @__PURE__ */ jsxs(Fragment, { children: [
9387
9453
  /* @__PURE__ */ jsx(
9388
9454
  "div",
@@ -9398,13 +9464,14 @@ function ContextMenu(props) {
9398
9464
  /* @__PURE__ */ jsx(
9399
9465
  "div",
9400
9466
  {
9467
+ ref: menuPosition.ref,
9401
9468
  "data-pptx-context-menu": "true",
9402
9469
  role: "menu",
9403
9470
  "aria-label": t("pptx.contextMenu.ariaLabel"),
9404
9471
  className: "fixed z-[120] min-w-[180px] rounded border border-border bg-popover shadow-2xl py-1.5 text-xs text-foreground",
9405
9472
  style: {
9406
- left: Math.max(contextMenuState.x, 8),
9407
- top: Math.max(contextMenuState.y, 8)
9473
+ left: menuPosition.left,
9474
+ top: menuPosition.top
9408
9475
  },
9409
9476
  children: entries.map((entry) => {
9410
9477
  const run = handlers[entry.id];
@@ -9452,7 +9519,12 @@ function canvasContextMenuHandlers(props) {
9452
9519
  function CanvasContextMenu(props) {
9453
9520
  const { canvasContextMenuState, mode, onClose } = props;
9454
9521
  const { t } = useTranslation();
9522
+ const customization = useViewerCustomizationContext();
9455
9523
  const open = Boolean(canvasContextMenuState) && mode === "edit";
9524
+ const menuPosition = useClampedMenuPosition(
9525
+ canvasContextMenuState?.x ?? 0,
9526
+ canvasContextMenuState?.y ?? 0
9527
+ );
9456
9528
  useEffect(() => {
9457
9529
  if (!open) {
9458
9530
  return;
@@ -9470,7 +9542,13 @@ function CanvasContextMenu(props) {
9470
9542
  return null;
9471
9543
  }
9472
9544
  const handlers = canvasContextMenuHandlers(props);
9473
- const entries = buildCanvasContextMenuEntries(canvasContextMenuContext(props));
9545
+ const entries = customizeCanvasContextMenuEntries(
9546
+ buildCanvasContextMenuEntries(canvasContextMenuContext(props)),
9547
+ customization
9548
+ );
9549
+ if (entries.length === 0) {
9550
+ return null;
9551
+ }
9474
9552
  return /* @__PURE__ */ jsxs(Fragment, { children: [
9475
9553
  /* @__PURE__ */ jsx(
9476
9554
  "div",
@@ -9486,13 +9564,14 @@ function CanvasContextMenu(props) {
9486
9564
  /* @__PURE__ */ jsx(
9487
9565
  "div",
9488
9566
  {
9567
+ ref: menuPosition.ref,
9489
9568
  "data-pptx-canvas-context-menu": "true",
9490
9569
  role: "menu",
9491
9570
  "aria-label": t("pptx.canvasContextMenu.ariaLabel"),
9492
9571
  className: "fixed z-[120] min-w-[180px] rounded border border-border bg-popover shadow-2xl py-1.5 text-xs text-foreground",
9493
9572
  style: {
9494
- left: Math.max(canvasContextMenuState.x, 8),
9495
- top: Math.max(canvasContextMenuState.y, 8)
9573
+ left: menuPosition.left,
9574
+ top: menuPosition.top
9496
9575
  },
9497
9576
  children: entries.map((entry) => {
9498
9577
  const run = handlers[entry.id];
@@ -30982,9 +31061,11 @@ function ViewerBottomPanels({
30982
31061
  onNotesHeightChange
30983
31062
  }) {
30984
31063
  const { isHidden } = useToolbarVisibility(hiddenActions);
31064
+ const customization = useViewerCustomizationContext();
31065
+ const showNotes = isPanelVisible(customization, "notes");
30985
31066
  return /* @__PURE__ */ jsxs(Fragment, { children: [
30986
- onResizeBottom && !isSlideNotesCollapsed && /* @__PURE__ */ jsx(ResizeHandle, { direction: "vertical", onResize: onResizeBottom }),
30987
- /* @__PURE__ */ jsx(
31067
+ showNotes && onResizeBottom && !isSlideNotesCollapsed && /* @__PURE__ */ jsx(ResizeHandle, { direction: "vertical", onResize: onResizeBottom }),
31068
+ showNotes && /* @__PURE__ */ jsx(
30988
31069
  SlideNotesPanel,
30989
31070
  {
30990
31071
  activeSlide,
@@ -30998,7 +31079,7 @@ function ViewerBottomPanels({
30998
31079
  onHeightChange: onNotesHeightChange
30999
31080
  }
31000
31081
  ),
31001
- !hideStatusBar && /* @__PURE__ */ jsx(
31082
+ !hideStatusBar && isPanelVisible(customization, "statusBar") && /* @__PURE__ */ jsx(
31002
31083
  StatusBar,
31003
31084
  {
31004
31085
  slideCount,
@@ -31016,7 +31097,7 @@ function ViewerBottomPanels({
31016
31097
  onToggleSlideSorter,
31017
31098
  collaborationSlot,
31018
31099
  hideZoomControls: isHidden("zoom"),
31019
- hideNotesToggle: isHidden("notes"),
31100
+ hideNotesToggle: isHidden("notes") || !showNotes,
31020
31101
  hideFullscreenToggle: isHidden("fullscreen")
31021
31102
  }
31022
31103
  )
@@ -31177,6 +31258,7 @@ function TitleBar(p) {
31177
31258
  const editing = (p.mode === "edit" || p.mode === "master") && p.canEdit;
31178
31259
  const { isHidden } = useToolbarVisibility(p.hiddenActions);
31179
31260
  const quickAccess = useViewerOptionsContext().quickAccess;
31261
+ const showQuickAccess = isPanelVisible(useViewerCustomizationContext(), "quickAccessToolbar");
31180
31262
  const [searchQuery, setSearchQuery] = useState("");
31181
31263
  const [searchFocused, setSearchFocused] = useState(false);
31182
31264
  const searchRef = useRef(null);
@@ -31252,7 +31334,7 @@ function TitleBar(p) {
31252
31334
  /* @__PURE__ */ jsx("span", { className: TITLE_BAR_CLASSES.autosaveLabel, children: t(p.autosaveEnabled ? "pptx.titleBar.autoSaveOn" : "pptx.titleBar.autoSaveOff") })
31253
31335
  ] }),
31254
31336
  /* @__PURE__ */ jsx("div", { className: TITLE_BAR_CLASSES.separator }),
31255
- p.onSave && /* @__PURE__ */ jsx(
31337
+ showQuickAccess && p.onSave && /* @__PURE__ */ jsx(
31256
31338
  "button",
31257
31339
  {
31258
31340
  type: "button",
@@ -31263,7 +31345,7 @@ function TitleBar(p) {
31263
31345
  children: /* @__PURE__ */ jsx(LuSave, { className: "w-3.5 h-3.5" })
31264
31346
  }
31265
31347
  ),
31266
- !isHidden("undo") && /* @__PURE__ */ jsx(
31348
+ showQuickAccess && !isHidden("undo") && /* @__PURE__ */ jsx(
31267
31349
  "button",
31268
31350
  {
31269
31351
  type: "button",
@@ -31275,7 +31357,7 @@ function TitleBar(p) {
31275
31357
  children: /* @__PURE__ */ jsx(LuUndo, { className: "w-3.5 h-3.5" })
31276
31358
  }
31277
31359
  ),
31278
- !isHidden("redo") && /* @__PURE__ */ jsx(
31360
+ showQuickAccess && !isHidden("redo") && /* @__PURE__ */ jsx(
31279
31361
  "button",
31280
31362
  {
31281
31363
  type: "button",
@@ -31287,8 +31369,8 @@ function TitleBar(p) {
31287
31369
  children: /* @__PURE__ */ jsx(LuRedo, { className: "w-3.5 h-3.5" })
31288
31370
  }
31289
31371
  ),
31290
- quickAccess.position !== "below" && /* @__PURE__ */ jsx(TitleBarQuickExtras, { quickAccess, onCommand: p.onQuickCommand }),
31291
- /* @__PURE__ */ jsx("div", { className: TITLE_BAR_CLASSES.separator })
31372
+ showQuickAccess && quickAccess.position !== "below" && /* @__PURE__ */ jsx(TitleBarQuickExtras, { quickAccess, onCommand: p.onQuickCommand }),
31373
+ showQuickAccess && /* @__PURE__ */ jsx("div", { className: TITLE_BAR_CLASSES.separator })
31292
31374
  ] }),
31293
31375
  /* @__PURE__ */ jsxs("span", { className: TITLE_BAR_CLASSES.fileGroup, children: [
31294
31376
  /* @__PURE__ */ jsx("span", { className: TITLE_BAR_CLASSES.fileName, children: p.fileName || t(TITLE_BAR_DEFAULT_FILE_KEY) }),
@@ -31414,6 +31496,7 @@ function ViewerToolbarSection(props) {
31414
31496
  onSetShowGuides
31415
31497
  } = props;
31416
31498
  const { t } = useTranslation();
31499
+ const customization = useViewerCustomizationContext();
31417
31500
  const handleAddAnimation = useCallback(
31418
31501
  (preset, group) => {
31419
31502
  if (!selectedElement || !activeSlide) {
@@ -31659,7 +31742,7 @@ function ViewerToolbarSection(props) {
31659
31742
  [onSetMode, onPresentFromBeginning, printHandlers, exportHandlers, slideOps, s, zoom]
31660
31743
  );
31661
31744
  return /* @__PURE__ */ jsxs(Fragment, { children: [
31662
- !dialogs.isNarrowViewport && /* @__PURE__ */ jsx(
31745
+ !dialogs.isNarrowViewport && isPanelVisible(customization, "titleBar") && /* @__PURE__ */ jsx(
31663
31746
  TitleBar,
31664
31747
  {
31665
31748
  mode,
@@ -32340,6 +32423,7 @@ function ViewerDialogGroup(props) {
32340
32423
  onKeepAnnotations,
32341
32424
  onDiscardAnnotations
32342
32425
  } = props;
32426
+ const printAvailable = isDialogAvailable(useViewerCustomizationContext(), "print");
32343
32427
  return /* @__PURE__ */ jsxs(Fragment, { children: [
32344
32428
  /* @__PURE__ */ jsx(
32345
32429
  VersionHistoryPanel,
@@ -32480,7 +32564,7 @@ function ViewerDialogGroup(props) {
32480
32564
  /* @__PURE__ */ jsx(
32481
32565
  PrintDialog,
32482
32566
  {
32483
- open: printHandlers.isPrintDialogOpen,
32567
+ open: printHandlers.isPrintDialogOpen && printAvailable,
32484
32568
  onClose: () => printHandlers.setIsPrintDialogOpen(false),
32485
32569
  onPrint: printHandlers.handlePrintSvg,
32486
32570
  slides,
@@ -33157,6 +33241,7 @@ ${url}`)) {
33157
33241
  onMouseDown: handleElementMouseDown,
33158
33242
  onContextMenu: canvasHandlers.handleElementContextMenu,
33159
33243
  onCanvasMouseDown: canvasHandlers.handleCanvasMouseDown,
33244
+ onCanvasContextMenu: canvasHandlers.handleCanvasContextMenu,
33160
33245
  onResizePointerDown: canvasHandlers.handleResizePointerDown,
33161
33246
  onAdjustmentPointerDown: canvasHandlers.handleAdjustmentPointerDown,
33162
33247
  onRotate: canvasHandlers.handleRotate,
@@ -33335,7 +33420,7 @@ function useTableStyleMapHandlers(input) {
33335
33420
  var AiChatPanel = lazy(async () => {
33336
33421
  const [{ useChat }, { default: Panel }] = await Promise.all([
33337
33422
  import('@ai-sdk/react'),
33338
- import('./AiChatPanel-HXGCZPUX.mjs')
33423
+ import('./AiChatPanel-L7DBCWE3.mjs')
33339
33424
  ]);
33340
33425
  function BoundAiChatPanel(props) {
33341
33426
  return /* @__PURE__ */ jsx(Panel, { ...props, useChat });
@@ -34258,15 +34343,17 @@ function ViewerSidePanels(props) {
34258
34343
  setTableStylesToDelete: s.setTableStylesToDelete
34259
34344
  });
34260
34345
  const effectiveSlide = mode === "master" ? masterPseudoSlide : activeSlide;
34346
+ const customization = useViewerCustomizationContext();
34347
+ const inspectorOpen = (mode === "edit" || mode === "master") && s.isInspectorPaneOpen && isPanelVisible(customization, "inspector");
34261
34348
  const currentBuiltInTheme = BUILT_IN_THEMES.find(
34262
34349
  (candidate) => themeColorSchemesEqual(s.theme?.colorScheme, candidate.colorScheme)
34263
34350
  ) ?? null;
34264
34351
  return /* @__PURE__ */ jsxs(Fragment, { children: [
34265
- (mode === "edit" || mode === "master") && s.isInspectorPaneOpen && onResizeRight && /* @__PURE__ */ jsx(ResizeHandle, { direction: "horizontal", onResize: onResizeRight }),
34352
+ inspectorOpen && onResizeRight && /* @__PURE__ */ jsx(ResizeHandle, { direction: "horizontal", onResize: onResizeRight }),
34266
34353
  /* @__PURE__ */ jsx(
34267
34354
  ViewerInspector,
34268
34355
  {
34269
- isOpen: (mode === "edit" || mode === "master") && s.isInspectorPaneOpen,
34356
+ isOpen: inspectorOpen,
34270
34357
  canEdit,
34271
34358
  mode,
34272
34359
  activeSlide: effectiveSlide,
@@ -34611,6 +34698,7 @@ function ViewerMainContent(props) {
34611
34698
  tableEditorState: state.tableEditorState,
34612
34699
  hasMultiSelection: state.effectiveSelectedIds.length > 1,
34613
34700
  selectionGroupable: manipulation.selectionGroupable,
34701
+ hasClipboard: Boolean(state.clipboardPayload),
34614
34702
  onAction: manipulation.handleContextMenuAction,
34615
34703
  onInsertTableRow: tableOps.handleInsertTableRow,
34616
34704
  onDeleteTableRow: tableOps.handleDeleteTableRow,
@@ -35464,10 +35552,11 @@ function readValue(options, control) {
35464
35552
  function InfoTip({ text }) {
35465
35553
  return /* @__PURE__ */ jsx("span", { title: text, className: "inline-flex cursor-help align-middle", children: /* @__PURE__ */ jsx(LuInfo, { className: "ml-1 h-3.5 w-3.5 text-primary/70", "aria-label": text }) });
35466
35554
  }
35555
+ var IGNORE_CHANGE = () => void 0;
35467
35556
  function ControlRow({
35468
35557
  control,
35469
35558
  options,
35470
- onOptionChange
35559
+ onOptionChange: emitChange
35471
35560
  }) {
35472
35561
  const { t } = useTranslation();
35473
35562
  const { viewportWidth } = useIsMobile();
@@ -35477,6 +35566,9 @@ function ControlRow({
35477
35566
  const info = control.infoKey ? /* @__PURE__ */ jsx(InfoTip, { text: t(control.infoKey) }) : null;
35478
35567
  const rowClass = cn("flex items-center justify-between gap-3 py-1.5", control.indent && "pl-6");
35479
35568
  const rowStyle = { minHeight: fieldMinHeight };
35569
+ const locked = control.readOnly === true;
35570
+ const lockedTitle = locked ? t("pptx.options.lockedByHost") : void 0;
35571
+ const onOptionChange = locked ? IGNORE_CHANGE : emitChange;
35480
35572
  if (control.kind === "toggle") {
35481
35573
  return /* @__PURE__ */ jsxs("label", { className: cn(rowClass, "cursor-pointer select-none"), style: rowStyle, children: [
35482
35574
  /* @__PURE__ */ jsxs("span", { className: "text-sm text-foreground", children: [
@@ -35488,6 +35580,8 @@ function ControlRow({
35488
35580
  {
35489
35581
  checked: value === true,
35490
35582
  "aria-label": label,
35583
+ disabled: locked,
35584
+ title: lockedTitle,
35491
35585
  onChange: (event) => onOptionChange(
35492
35586
  control.group,
35493
35587
  control.key,
@@ -35507,6 +35601,8 @@ function ControlRow({
35507
35601
  WebSelect,
35508
35602
  {
35509
35603
  "aria-label": label,
35604
+ disabled: locked,
35605
+ title: lockedTitle,
35510
35606
  style: { minHeight: fieldMinHeight },
35511
35607
  value: typeof value === "string" ? value : "",
35512
35608
  onChange: (event) => onOptionChange(
@@ -35531,6 +35627,8 @@ function ControlRow({
35531
35627
  {
35532
35628
  type: "number",
35533
35629
  "aria-label": label,
35630
+ disabled: locked,
35631
+ title: lockedTitle,
35534
35632
  style: { minHeight: fieldMinHeight },
35535
35633
  className: "w-20 rounded border border-border bg-background px-2 py-1 text-right text-xs text-foreground",
35536
35634
  min: control.min,
@@ -35559,6 +35657,8 @@ function ControlRow({
35559
35657
  {
35560
35658
  type: "text",
35561
35659
  "aria-label": label,
35660
+ disabled: locked,
35661
+ title: lockedTitle,
35562
35662
  style: { minHeight: fieldMinHeight },
35563
35663
  className: "w-48 max-w-[55%] rounded border border-border bg-background px-2 py-1 text-xs text-foreground",
35564
35664
  maxLength: control.maxLength,
@@ -36070,6 +36170,7 @@ function SettingsDialog({
36070
36170
  }) {
36071
36171
  const [activeTabId, setActiveTabId] = useState("general");
36072
36172
  const { t } = useTranslation();
36173
+ const customization = useViewerCustomizationContext();
36073
36174
  const { panelStyle, handlers: dragHandlers } = useModalDismissDrag(onClose);
36074
36175
  const { viewportWidth, viewportHeight } = useIsMobile();
36075
36176
  const touchTargetPx = getDensePanelTouchTargetPx(viewportWidth);
@@ -36108,10 +36209,14 @@ function SettingsDialog({
36108
36209
  if (!isOpen) {
36109
36210
  return null;
36110
36211
  }
36111
- const activeTab = VIEWER_OPTIONS_TABS.find((tab) => tab.id === activeTabId) ?? VIEWER_OPTIONS_TABS[0];
36212
+ const tabs = customizeOptionsTabs(VIEWER_OPTIONS_TABS, customization);
36213
+ const showAiTab = Boolean(aiEnabled) && isOptionsPageVisible(customization, AI_TAB_ID);
36214
+ const activeTab = tabs.find((tab) => tab.id === activeTabId) ?? tabs[0];
36215
+ const aiActive = activeTabId === AI_TAB_ID && showAiTab;
36112
36216
  if (!activeTab) {
36113
36217
  return null;
36114
36218
  }
36219
+ const currentTabId = aiActive ? AI_TAB_ID : activeTab.id;
36115
36220
  return /* @__PURE__ */ jsxs(Fragment, { children: [
36116
36221
  /* @__PURE__ */ jsx(
36117
36222
  "button",
@@ -36168,31 +36273,31 @@ function SettingsDialog({
36168
36273
  "aria-label": t("pptx.options.title"),
36169
36274
  className: "w-44 shrink-0 space-y-0.5 overflow-y-auto border-r border-border/60 p-2 max-md:flex max-md:w-full max-md:space-y-0 max-md:gap-1 max-md:overflow-x-auto max-md:border-b max-md:border-r-0",
36170
36275
  children: [
36171
- VIEWER_OPTIONS_TABS.map((tab) => /* @__PURE__ */ jsx(
36276
+ tabs.map((tab) => /* @__PURE__ */ jsx(
36172
36277
  "button",
36173
36278
  {
36174
36279
  type: "button",
36175
36280
  onClick: () => setActiveTabId(tab.id),
36176
- "aria-current": activeTabId === tab.id,
36281
+ "aria-current": currentTabId === tab.id,
36177
36282
  style: navBtnStyle,
36178
36283
  className: cn(
36179
36284
  "flex w-full items-center whitespace-nowrap rounded px-3 py-2 text-left text-sm transition-colors max-md:w-auto",
36180
- activeTabId === tab.id ? "bg-primary/10 font-medium text-primary" : "text-foreground hover:bg-accent"
36285
+ currentTabId === tab.id ? "bg-primary/10 font-medium text-primary" : "text-foreground hover:bg-accent"
36181
36286
  ),
36182
36287
  children: t(tab.labelKey)
36183
36288
  },
36184
36289
  tab.id
36185
36290
  )),
36186
- aiEnabled && /* @__PURE__ */ jsx(
36291
+ showAiTab && /* @__PURE__ */ jsx(
36187
36292
  "button",
36188
36293
  {
36189
36294
  type: "button",
36190
36295
  onClick: () => setActiveTabId(AI_TAB_ID),
36191
- "aria-current": activeTabId === AI_TAB_ID,
36296
+ "aria-current": aiActive,
36192
36297
  style: navBtnStyle,
36193
36298
  className: cn(
36194
36299
  "flex w-full items-center whitespace-nowrap rounded px-3 py-2 text-left text-sm transition-colors max-md:w-auto",
36195
- activeTabId === AI_TAB_ID ? "bg-primary/10 font-medium text-primary" : "text-foreground hover:bg-accent"
36300
+ aiActive ? "bg-primary/10 font-medium text-primary" : "text-foreground hover:bg-accent"
36196
36301
  ),
36197
36302
  children: t("pptx.ai.settingsSectionTitle")
36198
36303
  }
@@ -36200,7 +36305,7 @@ function SettingsDialog({
36200
36305
  ]
36201
36306
  }
36202
36307
  ),
36203
- /* @__PURE__ */ jsx("div", { className: "min-h-0 flex-1 overflow-y-auto px-5 py-4", children: activeTabId === AI_TAB_ID ? /* @__PURE__ */ jsxs("div", { className: "space-y-4", children: [
36308
+ /* @__PURE__ */ jsx("div", { className: "min-h-0 flex-1 overflow-y-auto px-5 py-4", children: aiActive ? /* @__PURE__ */ jsxs("div", { className: "space-y-4", children: [
36204
36309
  /* @__PURE__ */ jsx("p", { className: "text-sm font-medium text-foreground", children: t("pptx.ai.settingsSectionTitle") }),
36205
36310
  /* @__PURE__ */ jsx(SettingsAiTab, { store: chatStore })
36206
36311
  ] }) : activeTab.custom === "language" ? /* @__PURE__ */ jsxs("div", { className: "space-y-4", children: [
@@ -36733,6 +36838,41 @@ function useRunProgramNoticesState() {
36733
36838
  }, []);
36734
36839
  return { notices, addNotice, dismiss, dismissAll };
36735
36840
  }
36841
+ function useViewerCustomization(customization, legacyHiddenActions, optionsStore) {
36842
+ const controllerRef = useRef(null);
36843
+ controllerRef.current ??= createCustomizationController(customization);
36844
+ const controller = controllerRef.current;
36845
+ const appliedRef = useRef(customization);
36846
+ useLayoutEffect(() => {
36847
+ if (appliedRef.current === customization) {
36848
+ return;
36849
+ }
36850
+ appliedRef.current = customization;
36851
+ controller.api.setCustomization(customization ?? {});
36852
+ }, [controller, customization]);
36853
+ const resolved = useSyncExternalStore(
36854
+ controller.subscribe,
36855
+ controller.getResolved,
36856
+ controller.getResolved
36857
+ );
36858
+ const appliedConstraintsRef = useRef(null);
36859
+ useLayoutEffect(() => {
36860
+ const key = JSON.stringify([resolved.lockedSettings, resolved.defaultSettings]);
36861
+ if (appliedConstraintsRef.current === key) {
36862
+ return;
36863
+ }
36864
+ appliedConstraintsRef.current = key;
36865
+ optionsStore.setConstraints({
36866
+ locked: resolved.lockedSettings,
36867
+ defaults: resolved.defaultSettings
36868
+ });
36869
+ }, [optionsStore, resolved]);
36870
+ const hiddenActions = useMemo(
36871
+ () => resolveEffectiveHiddenActions(resolved, legacyHiddenActions),
36872
+ [resolved, legacyHiddenActions]
36873
+ );
36874
+ return { resolved, api: controller.api, hiddenActions };
36875
+ }
36736
36876
  var PowerPointViewer = forwardRef(
36737
36877
  // oxlint-disable-next-line prefer-arrow-callback -- named fn gives the forwardRef component its displayName
36738
36878
  function PowerPointViewer2(props, ref) {
@@ -36771,8 +36911,9 @@ var PowerPointViewer = forwardRef(
36771
36911
  lineChart3D = false,
36772
36912
  areaChart3D = false,
36773
36913
  pieChart3D = false,
36774
- hiddenActions,
36775
- ai
36914
+ hiddenActions: legacyHiddenActions,
36915
+ ai,
36916
+ customization
36776
36917
  } = props;
36777
36918
  useEffect(() => {
36778
36919
  const css = buildUserFontFaceStyles(fonts);
@@ -36871,6 +37012,11 @@ var PowerPointViewer = forwardRef(
36871
37012
  })();
36872
37013
  }, []);
36873
37014
  const { optionsStore, options: viewerOptions } = useViewerOptions();
37015
+ const custom = useViewerCustomization(customization, legacyHiddenActions, optionsStore);
37016
+ const { resolved: customizationResolved, hiddenActions } = custom;
37017
+ const aiEnabled = Boolean(ai) && isFeatureEnabled(customizationResolved, "ai");
37018
+ const optionsAvailable = isDialogAvailable(customizationResolved, "options");
37019
+ const shareAvailable = isDialogAvailable(customizationResolved, "share");
36874
37020
  const [protectedViewOverridden, setProtectedViewOverridden] = useState(false);
36875
37021
  useEffect(() => {
36876
37022
  setProtectedViewOverridden(false);
@@ -37204,7 +37350,8 @@ var PowerPointViewer = forwardRef(
37204
37350
  userName: authorName ?? collaboration?.userName ?? (viewerOptions.general.userName || void 0),
37205
37351
  handlerRef: actionSoundHandlerRef,
37206
37352
  // Options > Proofing > AutoCorrect, applied to committed inline-edit text.
37207
- transformCommittedText: (text) => applyAutoCorrect(text, viewerOptions.proofing)
37353
+ transformCommittedText: (text) => applyAutoCorrect(text, viewerOptions.proofing),
37354
+ keyboard: customizationResolved.keyboard
37208
37355
  });
37209
37356
  const {
37210
37357
  exportHandlers: rawExportHandlers,
@@ -37281,7 +37428,9 @@ var PowerPointViewer = forwardRef(
37281
37428
  onModeChange,
37282
37429
  onZoomChange,
37283
37430
  onSelectionChange,
37284
- onSlideCountChange
37431
+ onSlideCountChange,
37432
+ customizationApi: custom.api,
37433
+ customization: customizationResolved
37285
37434
  });
37286
37435
  const viewPreferencesSync = useViewPreferencesSync({
37287
37436
  loadVersion,
@@ -37402,7 +37551,7 @@ var PowerPointViewer = forwardRef(
37402
37551
  markDirty: history.markDirty,
37403
37552
  applyThemeUpdates: applyAiTheme
37404
37553
  });
37405
- const showSlidesPane = mode === "edit" && !isMobile && !dialogs.isNarrowViewport && state.isSlidesPaneOpen;
37554
+ const showSlidesPane = mode === "edit" && !isMobile && !dialogs.isNarrowViewport && state.isSlidesPaneOpen && isPanelVisible(customizationResolved, "slidesPane");
37406
37555
  const showMasterPane = mode === "master" && !isMobile && state.isSlidesPaneOpen;
37407
37556
  const addinStatus = {
37408
37557
  smartArt3d: smartArt3D && !viewerOptions.advanced.disable3DRendering,
@@ -37455,7 +37604,7 @@ var PowerPointViewer = forwardRef(
37455
37604
  onPresentFromBeginning: presentation.enterPresentModeFromBeginning,
37456
37605
  onEnterPresenterView: handleEnterPresenterView,
37457
37606
  onEnterRehearsalMode: handleEnterRehearsalMode,
37458
- onOpenSettings: () => setIsSettingsOpen(true),
37607
+ onOpenSettings: optionsAvailable ? () => setIsSettingsOpen(true) : void 0,
37459
37608
  onOpenHeaderFooter: () => setIsHeaderFooterOpen(true),
37460
37609
  onOpenShareDialog: () => setIsShareDialogOpen(true),
37461
37610
  onOpenFile: handleOpenFile,
@@ -37470,7 +37619,7 @@ var PowerPointViewer = forwardRef(
37470
37619
  },
37471
37620
  hiddenActions,
37472
37621
  recentPresentationsCount: viewerOptions.advanced.recentPresentationsCount,
37473
- aiEnabled: Boolean(ai),
37622
+ aiEnabled,
37474
37623
  isAiPanelOpen: aiPanel.isOpen,
37475
37624
  onToggleAiPanel: aiPanel.toggle,
37476
37625
  isProtectedView,
@@ -37545,9 +37694,9 @@ var PowerPointViewer = forwardRef(
37545
37694
  rightPanelWidth: isMobile ? void 0 : resizablePanels.rightWidth,
37546
37695
  onResizeRight: isMobile ? void 0 : resizablePanels.onResizeRight,
37547
37696
  hiddenActions,
37548
- aiConfig: ai,
37549
- aiBridge: ai ? aiBridge : void 0,
37550
- aiPanel: ai ? aiPanel : void 0
37697
+ aiConfig: aiEnabled ? ai : void 0,
37698
+ aiBridge: aiEnabled ? aiBridge : void 0,
37699
+ aiPanel: aiEnabled ? aiPanel : void 0
37551
37700
  }
37552
37701
  ),
37553
37702
  mode !== "present" && (!isVirtualKeyboardOpen || !state.isSlideNotesCollapsed) && /* @__PURE__ */ jsx(
@@ -37563,7 +37712,7 @@ var PowerPointViewer = forwardRef(
37563
37712
  autosaveStatus,
37564
37713
  onToggleNotes: () => state.setIsSlideNotesCollapsed((p) => !p),
37565
37714
  onUpdateNotes: propertyHandlers.handleUpdateNotes,
37566
- collaborationSlot: collaboration ? /* @__PURE__ */ jsx(CollaborationStatusStrip, {}) : void 0,
37715
+ collaborationSlot: collaboration && shareAvailable ? /* @__PURE__ */ jsx(CollaborationStatusStrip, {}) : void 0,
37567
37716
  notesPanelHeight: isMobile ? void 0 : resizablePanels.bottomHeight,
37568
37717
  onResizeBottom: isMobile ? void 0 : resizablePanels.onResizeBottom,
37569
37718
  scale: zoom.scale,
@@ -37671,7 +37820,7 @@ var PowerPointViewer = forwardRef(
37671
37820
  /* @__PURE__ */ jsx(
37672
37821
  SettingsDialog,
37673
37822
  {
37674
- isOpen: isSettingsOpen,
37823
+ isOpen: isSettingsOpen && optionsAvailable,
37675
37824
  onClose: () => setIsSettingsOpen(false),
37676
37825
  options: viewerOptions,
37677
37826
  onOptionChange: (group, key, value) => optionsStore.setValue(group, key, value),
@@ -37687,7 +37836,7 @@ var PowerPointViewer = forwardRef(
37687
37836
  localeCode,
37688
37837
  availableLocales: resolvedLocales,
37689
37838
  onSelectLocale: handleLocaleChange,
37690
- aiEnabled: Boolean(ai),
37839
+ aiEnabled,
37691
37840
  customFontFamilies,
37692
37841
  onCustomFontRegistered: handleCustomFontRegistered
37693
37842
  }
@@ -37711,7 +37860,7 @@ var PowerPointViewer = forwardRef(
37711
37860
  /* @__PURE__ */ jsx(
37712
37861
  ShareDialog,
37713
37862
  {
37714
- open: isShareDialogOpen,
37863
+ open: isShareDialogOpen && shareAvailable,
37715
37864
  onClose: () => setIsShareDialogOpen(false),
37716
37865
  activeCollaboration: collaboration,
37717
37866
  onStartCollaboration,
@@ -37725,7 +37874,7 @@ var PowerPointViewer = forwardRef(
37725
37874
  /* @__PURE__ */ jsx(
37726
37875
  BroadcastDialog,
37727
37876
  {
37728
- open: dialogs.isBroadcastDialogOpen,
37877
+ open: dialogs.isBroadcastDialogOpen && isDialogAvailable(customizationResolved, "broadcast"),
37729
37878
  onClose: () => dialogs.setIsBroadcastDialogOpen(false),
37730
37879
  onStartBroadcast: onStartCollaboration,
37731
37880
  onStopBroadcast: onStopCollaboration,
@@ -37803,7 +37952,7 @@ var PowerPointViewer = forwardRef(
37803
37952
  // Nothing previously provided it, so every one of those consumers was
37804
37953
  // silently reading `DEFAULT_VIEWER_OPTIONS` forever, no matter what
37805
37954
  // the user changed in the Options dialog.
37806
- /* @__PURE__ */ jsx(ViewerOptionsContext.Provider, { value: viewerOptions, children: /* @__PURE__ */ jsx(AccountAuthContext.Provider, { value: accountAuth, children: /* @__PURE__ */ jsx(Rendering3DFlagsContext.Provider, { value: effective3D, children: /* @__PURE__ */ jsx(ViewerThemeProvider, { theme: effectiveTheme, children: /* @__PURE__ */ jsxs(
37955
+ /* @__PURE__ */ jsx(ViewerOptionsContext.Provider, { value: viewerOptions, children: /* @__PURE__ */ jsx(ViewerCustomizationContext.Provider, { value: customizationResolved, children: /* @__PURE__ */ jsx(AccountAuthContext.Provider, { value: accountAuth, children: /* @__PURE__ */ jsx(Rendering3DFlagsContext.Provider, { value: effective3D, children: /* @__PURE__ */ jsx(ViewerThemeProvider, { theme: effectiveTheme, children: /* @__PURE__ */ jsxs(
37807
37956
  CollaborationProvider,
37808
37957
  {
37809
37958
  config: collaboration,
@@ -37856,7 +38005,7 @@ var PowerPointViewer = forwardRef(
37856
38005
  viewerContent
37857
38006
  ]
37858
38007
  }
37859
- ) }) }) }) })
38008
+ ) }) }) }) }) })
37860
38009
  );
37861
38010
  }
37862
38011
  );