pptx-react-viewer 2.12.0 → 2.12.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +2 -0
- package/dist/{AiChatPanel-CS4CONUO.mjs → AiChatPanel-CGGUPVQX.mjs} +4 -4
- package/dist/AiChatPanel-CGGUPVQX.mjs.br +0 -0
- package/dist/AiChatPanel-CGGUPVQX.mjs.gz +0 -0
- package/dist/{AiChatPanel-JIXSOZXN.js → AiChatPanel-UEFYTUJN.js} +23 -23
- package/dist/AiChatPanel-UEFYTUJN.js.br +0 -0
- package/dist/AiChatPanel-UEFYTUJN.js.gz +0 -0
- package/dist/{Model3DScene-5KMJ4JL6.js → Model3DScene-QYXJNALP.js} +2 -2
- package/dist/{Model3DScene-5KMJ4JL6.js.br → Model3DScene-QYXJNALP.js.br} +0 -0
- package/dist/Model3DScene-QYXJNALP.js.gz +0 -0
- package/dist/{Model3DScene-RWFPSN6B.mjs → Model3DScene-TU4NTHRM.mjs} +1 -1
- package/dist/Model3DScene-TU4NTHRM.mjs.br +0 -0
- package/dist/Model3DScene-TU4NTHRM.mjs.gz +0 -0
- package/dist/{SurfaceChart3DScene-BIOKIETC.js → SurfaceChart3DScene-4VCO3DRP.js} +2 -2
- package/dist/SurfaceChart3DScene-4VCO3DRP.js.br +0 -0
- package/dist/SurfaceChart3DScene-4VCO3DRP.js.gz +0 -0
- package/dist/{SurfaceChart3DScene-2GZQM3LN.mjs → SurfaceChart3DScene-VTJBKUQY.mjs} +1 -1
- package/dist/{SurfaceChart3DScene-2GZQM3LN.mjs.br → SurfaceChart3DScene-VTJBKUQY.mjs.br} +0 -0
- package/dist/SurfaceChart3DScene-VTJBKUQY.mjs.gz +0 -0
- package/dist/{chunk-AOED5MFM.mjs → chunk-4GYNTY2G.mjs} +13 -12
- package/dist/chunk-4GYNTY2G.mjs.br +0 -0
- package/dist/chunk-4GYNTY2G.mjs.gz +0 -0
- package/dist/{chunk-BJQSHVYH.mjs → chunk-4SGXEGVL.mjs} +261 -203
- package/dist/chunk-4SGXEGVL.mjs.br +0 -0
- package/dist/chunk-4SGXEGVL.mjs.gz +0 -0
- package/dist/{chunk-3GNSGGY2.js → chunk-BXAK3JFM.js} +13 -0
- package/dist/chunk-BXAK3JFM.js.br +0 -0
- package/dist/chunk-BXAK3JFM.js.gz +0 -0
- package/dist/{chunk-QGHC65C4.mjs → chunk-CABQXGPI.mjs} +302 -18
- package/dist/chunk-CABQXGPI.mjs.br +0 -0
- package/dist/{chunk-QGHC65C4.mjs.gz → chunk-CABQXGPI.mjs.gz} +0 -0
- package/dist/{chunk-SP7U34QM.js → chunk-GBKIWNW6.js} +1996 -1938
- package/dist/chunk-GBKIWNW6.js.br +0 -0
- package/dist/chunk-GBKIWNW6.js.gz +0 -0
- package/dist/{chunk-2VUHJNWM.js → chunk-LE6YA5WB.js} +261 -254
- package/dist/chunk-LE6YA5WB.js.br +0 -0
- package/dist/chunk-LE6YA5WB.js.gz +0 -0
- package/dist/{chunk-EJRHYYKE.mjs → chunk-N3NKU7SC.mjs} +1 -1
- package/dist/chunk-N3NKU7SC.mjs.br +0 -0
- package/dist/chunk-N3NKU7SC.mjs.gz +0 -0
- package/dist/{chunk-PTGTFXPU.js → chunk-NUDH7TI2.js} +341 -340
- package/dist/chunk-NUDH7TI2.js.br +0 -0
- package/dist/chunk-NUDH7TI2.js.gz +0 -0
- package/dist/{chunk-PJUQQF3I.js → chunk-TDUDH7S4.js} +320 -19
- package/dist/chunk-TDUDH7S4.js.br +0 -0
- package/dist/{chunk-PJUQQF3I.js.gz → chunk-TDUDH7S4.js.gz} +0 -0
- package/dist/{chunk-ECDKYPQ2.mjs → chunk-TEXIGSA6.mjs} +13 -0
- package/dist/chunk-TEXIGSA6.mjs.br +0 -0
- package/dist/chunk-TEXIGSA6.mjs.gz +0 -0
- package/dist/{chunk-ZIXSSQAZ.js → chunk-UIWY4XJT.js} +3 -3
- package/dist/chunk-UIWY4XJT.js.br +0 -0
- package/dist/chunk-UIWY4XJT.js.gz +0 -0
- package/dist/{chunk-CEUHGUZ4.mjs → chunk-YIPR3GKG.mjs} +22 -15
- package/dist/chunk-YIPR3GKG.mjs.br +0 -0
- package/dist/chunk-YIPR3GKG.mjs.gz +0 -0
- package/dist/i18n.js +4 -4
- package/dist/i18n.js.br +0 -0
- package/dist/i18n.js.gz +0 -0
- package/dist/i18n.mjs +1 -1
- package/dist/i18n.mjs.br +0 -0
- package/dist/i18n.mjs.gz +0 -0
- package/dist/index.js +36 -36
- package/dist/index.js.br +0 -0
- package/dist/index.js.gz +0 -0
- package/dist/index.mjs +6 -6
- package/dist/index.mjs.br +0 -0
- package/dist/index.mjs.gz +0 -0
- package/dist/internals.d.ts.map +1 -1
- package/dist/internals.js +79 -79
- package/dist/internals.js.br +0 -0
- package/dist/internals.js.gz +0 -0
- package/dist/internals.mjs +4 -4
- package/dist/internals.mjs.br +0 -0
- package/dist/internals.mjs.gz +0 -0
- package/dist/pptx-viewer.css +1 -1
- package/dist/pptx-viewer.css.br +0 -0
- package/dist/pptx-viewer.css.gz +0 -0
- package/dist/viewer/index.js +22 -22
- package/dist/viewer/index.js.br +0 -0
- package/dist/viewer/index.js.gz +0 -0
- package/dist/viewer/index.mjs +6 -6
- package/dist/viewer/index.mjs.br +0 -0
- package/dist/viewer/index.mjs.gz +0 -0
- package/package.json +1 -1
- package/dist/AiChatPanel-CS4CONUO.mjs.br +0 -0
- package/dist/AiChatPanel-CS4CONUO.mjs.gz +0 -0
- package/dist/AiChatPanel-JIXSOZXN.js.br +0 -0
- package/dist/AiChatPanel-JIXSOZXN.js.gz +0 -0
- package/dist/Model3DScene-5KMJ4JL6.js.gz +0 -0
- package/dist/Model3DScene-RWFPSN6B.mjs.br +0 -0
- package/dist/Model3DScene-RWFPSN6B.mjs.gz +0 -0
- package/dist/SurfaceChart3DScene-2GZQM3LN.mjs.gz +0 -0
- package/dist/SurfaceChart3DScene-BIOKIETC.js.br +0 -0
- package/dist/SurfaceChart3DScene-BIOKIETC.js.gz +0 -0
- package/dist/chunk-2VUHJNWM.js.br +0 -0
- package/dist/chunk-2VUHJNWM.js.gz +0 -0
- package/dist/chunk-3GNSGGY2.js.br +0 -0
- package/dist/chunk-3GNSGGY2.js.gz +0 -0
- package/dist/chunk-AOED5MFM.mjs.br +0 -0
- package/dist/chunk-AOED5MFM.mjs.gz +0 -0
- package/dist/chunk-BJQSHVYH.mjs.br +0 -0
- package/dist/chunk-BJQSHVYH.mjs.gz +0 -0
- package/dist/chunk-CEUHGUZ4.mjs.br +0 -0
- package/dist/chunk-CEUHGUZ4.mjs.gz +0 -0
- package/dist/chunk-ECDKYPQ2.mjs.br +0 -0
- package/dist/chunk-ECDKYPQ2.mjs.gz +0 -0
- package/dist/chunk-EJRHYYKE.mjs.br +0 -0
- package/dist/chunk-EJRHYYKE.mjs.gz +0 -0
- package/dist/chunk-PJUQQF3I.js.br +0 -0
- package/dist/chunk-PTGTFXPU.js.br +0 -0
- package/dist/chunk-PTGTFXPU.js.gz +0 -0
- package/dist/chunk-QGHC65C4.mjs.br +0 -0
- package/dist/chunk-SP7U34QM.js.br +0 -0
- package/dist/chunk-SP7U34QM.js.gz +0 -0
- package/dist/chunk-ZIXSSQAZ.js.br +0 -0
- package/dist/chunk-ZIXSSQAZ.js.gz +0 -0
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { computeFocusTargets, aiChangeAnimationCss, changeGhostStyle, createChatHistoryStore, toRenderableParts } from './chunk-
|
|
2
|
-
import { useReducedMotion, useViewerState, useViewerOptions, useIsMobile, useResizablePanels, useDerivedSlideState, useZoomViewport, useEditorHistory, usePresentationSetup, useTouchGestures, useViewerDialogs, useEditorOperations, useViewerIntegration, useYjsDocumentSync, useCollaborationLivePatch, useFollowMode, useBroadcastFollower, scopeLayoutOptionsToActiveSlide, useToolbarVisibility, useKeyboardInsets, useModalDismissDrag, useCollaborativeState, useVirtualizedSlides, useSwipeNavigation, useSheetDismissDrag, detectTargetType, parseEmailUrl, parseSlideFromUrl, ACTION_VERB_MAP, downloadBlob } from './chunk-
|
|
3
|
-
import { SHAPE_PRESETS, DEFAULT_STROKE_COLOR, getConnectorPathGeometry, buildLineShadowCss, buildLineGlowFilter, renderConnectorMarker, MIN_ELEMENT_SIZE, getShapeVisualStyle, getTextStyleForElement, DEFAULT_TEXT_COLOR, renderVectorShape, isConnectorOrLineElement, build3DExtrusionData, getImageRenderStyle, cn, ANIMATION_PRESET_OPTIONS, resolvePalette, resolveStyle, layoutToCategory, wrapChrome, DEFAULT_FILL_COLOR, hasDagDuotoneEffect, renderDagDuotoneSvgFilter, getTextLayoutStyle, renderTableElement, renderMediaElement, shouldRenderFallbackLabel, getCropShapeClipPath, SLIDE_NAV_THUMBNAIL_WIDTH, styleShadow, styleStroke, colour, fitFontSize, smartArtNodeGroupProps, chevronPoints, SmartArtNodeText, truncate, renderStepDownProcess, renderAlternatingFlow, renderDescendingProcess, renderPictureAccentList, renderVerticalBlockList, renderGroupedList, renderPyramidList, renderHorizontalPictureList, renderAccentProcess, renderVerticalChevronList, isImageTiled, getImageTilingStyle, getDuotoneColors, getTextWarpStyle, renderTextSegments, buildReactChartViewModel, renderChartElement, buildTextBody3DSceneStyle, TOOLBAR_SECTIONS, SHORTCUT_REFERENCE_ITEMS as SHORTCUT_REFERENCE_ITEMS$1, buildTree, treeWidth, treeDepth, nodeOpacity, gearPath, resolveSmartArtDataPalette, DEFAULT_TEXT_FONT_SIZE, DEFAULT_FONT_FAMILY, HYPERLINK_COLOR, GRID_SIZE, CONNECTOR_ARROW_OPTIONS, ARROW_SIZE_OPTIONS, startMotionPathPreview, startPreviewAnimation, stopPreviewAnimation, THEME_COLOR_SWATCHES, STROKE_DASH_OPTIONS } from './chunk-
|
|
4
|
-
import { LOCALE_CATALOG, translationsEn } from './chunk-
|
|
5
|
-
import { hasShapeProperties, normalizeHexColor, colorWithOpacity, normalizeStrokeDashType, getSvgStrokeDasharray, getCompoundLineOffsets, getCompoundLineWidths, svgLineCap, hasTextProperties, getElementTransform, ACTION_BUTTON_PRESETS, isEditableTextElement, isElementRendered, isElementActionable, getAriaRole, getAriaLabel, getAriaRoleDescription, getImageEffectsOpacity, getImageEffectsFilter, getElementTransformWithoutRotation, SWITCHABLE_LAYOUT_TYPES, DEFAULT_VIEWER_OPTIONS, compileEquationTemplateMathMl, buildUserFontFaceStyles, readStoredViewerPrefs, resolveThemeCatalogEntry, THEME_CATALOG, writeStoredViewerPrefs, openPptxFile, readBackstageRecentFile, viewerOptionsToPreferences, applyPreferenceToOptions, listAutosaveSnapshots, deleteAutosaveSnapshot, RULER_THICKNESS, RULER_FONT_SIZE, revealedSmartArtNodeCount, buildSmartArtA11y, buildCssGradientFromShapeStyle, resolveGroupChildFill, getGroupChildParentFill, getComputedEffectStyle, getSoftEdgeSvgFilter, buildStrokeOutline, svgGradientFillRef, isInkElement, getElementLabel, buildPreviewElements, deriveSlideFieldContext, SLIDE_TRANSITION_OPTIONS, hiddenSlideCue, HIDDEN_SLIDE_SLASH_GRADIENT, HIDDEN_SLIDE_LABEL_KEY, themeToCssVars, applyMotionPathPreset, DEFAULT_INSERT_CHART_TYPE, hasCopyableFormat, createBackstagePresentation, printPropertiesFrameSlides, printPropertiesSlidesPerPage, VIEWER_OPTIONS_TABS, DEFAULT_QUICK_ACCESS_COMMAND_IDS, buildJoinCollaborationConfig, buildCreateCollaborationConfig, generateBroadcastRoomId, DEFAULT_BROADCAST_SERVER_URL, buildBroadcastViewerUrl, resolveTransportForServerUrl, resolveDrawingShapeNodeId, buildSummaryZoomView, getImageColorWashStyle, isImageLikeElement, getPendingSelectionRestore, restoreSegmentSelection, getTextCompensationTransform, applyChartBuildReveal, formatAxisValue, hasPressureVariation, getInkReplayStyles, INK_REPLAY_KEYFRAMES, resolveInkColor, resolveInkWidth, resolveInkOpacity, pressuresToWidths, getContentPartReplayStyles, resolveOleType, getOleTypeColor, getOleTypeLabel, filterRenderedElements, isLinkedTextBox, getOverflowSegments, shouldUseSvgWarp, getSlideBackgroundStyle, filterCommands, resolveTitleBarStatusKey, TITLE_BAR_CLASSES, TITLE_BAR_DEFAULT_FILE_KEY, buildFieldSubstitutionContext, shouldConfirmExternalHyperlink, safeOpenUrl, isPpactionUrl, parsePpactionUrl, isPresentationAdvanceClick, PRESENT_TOOLBAR_CLASSES, buildContextMenuEntries, themeColorSchemesEqual, 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, 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,
|
|
6
|
-
import
|
|
1
|
+
import { computeFocusTargets, aiChangeAnimationCss, changeGhostStyle, createChatHistoryStore, toRenderableParts } from './chunk-N3NKU7SC.mjs';
|
|
2
|
+
import { useReducedMotion, useViewerState, useViewerOptions, useIsMobile, useResizablePanels, useDerivedSlideState, useZoomViewport, useEditorHistory, usePresentationSetup, useTouchGestures, useViewerDialogs, useEditorOperations, useViewerIntegration, useYjsDocumentSync, useCollaborationLivePatch, useFollowMode, useBroadcastFollower, scopeLayoutOptionsToActiveSlide, useToolbarVisibility, useKeyboardInsets, useModalDismissDrag, useCollaborativeState, useVirtualizedSlides, useSwipeNavigation, useSheetDismissDrag, detectTargetType, parseEmailUrl, parseSlideFromUrl, ACTION_VERB_MAP, downloadBlob } from './chunk-4GYNTY2G.mjs';
|
|
3
|
+
import { SHAPE_PRESETS, DEFAULT_STROKE_COLOR, getConnectorPathGeometry, buildLineShadowCss, buildLineGlowFilter, renderConnectorMarker, MIN_ELEMENT_SIZE, getShapeVisualStyle, getTextStyleForElement, DEFAULT_TEXT_COLOR, renderVectorShape, isConnectorOrLineElement, build3DExtrusionData, getImageRenderStyle, cn, ANIMATION_PRESET_OPTIONS, resolvePalette, resolveStyle, layoutToCategory, wrapChrome, DEFAULT_FILL_COLOR, hasDagDuotoneEffect, renderDagDuotoneSvgFilter, getTextLayoutStyle, renderTableElement, renderMediaElement, shouldRenderFallbackLabel, getCropShapeClipPath, SLIDE_NAV_THUMBNAIL_WIDTH, styleShadow, styleStroke, colour, fitFontSize, smartArtNodeGroupProps, chevronPoints, SmartArtNodeText, truncate, renderStepDownProcess, renderAlternatingFlow, renderDescendingProcess, renderPictureAccentList, renderVerticalBlockList, renderGroupedList, renderPyramidList, renderHorizontalPictureList, renderAccentProcess, renderVerticalChevronList, isImageTiled, getImageTilingStyle, getDuotoneColors, getTextWarpStyle, renderTextSegments, buildReactChartViewModel, renderChartElement, buildTextBody3DSceneStyle, TOOLBAR_SECTIONS, SHORTCUT_REFERENCE_ITEMS as SHORTCUT_REFERENCE_ITEMS$1, buildTree, treeWidth, treeDepth, nodeOpacity, gearPath, resolveSmartArtDataPalette, DEFAULT_TEXT_FONT_SIZE, DEFAULT_FONT_FAMILY, HYPERLINK_COLOR, GRID_SIZE, CONNECTOR_ARROW_OPTIONS, ARROW_SIZE_OPTIONS, startMotionPathPreview, startPreviewAnimation, stopPreviewAnimation, THEME_COLOR_SWATCHES, STROKE_DASH_OPTIONS } from './chunk-YIPR3GKG.mjs';
|
|
4
|
+
import { LOCALE_CATALOG, translationsEn } from './chunk-TEXIGSA6.mjs';
|
|
5
|
+
import { hasShapeProperties, normalizeHexColor, colorWithOpacity, normalizeStrokeDashType, getSvgStrokeDasharray, getCompoundLineOffsets, getCompoundLineWidths, svgLineCap, hasTextProperties, getElementTransform, ACTION_BUTTON_PRESETS, isEditableTextElement, isElementRendered, isElementActionable, getAriaRole, getAriaLabel, getAriaRoleDescription, getImageEffectsOpacity, getImageEffectsFilter, getElementTransformWithoutRotation, LINK_TOOLTIP_HOST_CLASS, SWITCHABLE_LAYOUT_TYPES, DEFAULT_VIEWER_OPTIONS, compileEquationTemplateMathMl, buildUserFontFaceStyles, readStoredViewerPrefs, resolveThemeCatalogEntry, THEME_CATALOG, writeStoredViewerPrefs, openPptxFile, readBackstageRecentFile, viewerOptionsToPreferences, applyPreferenceToOptions, listAutosaveSnapshots, deleteAutosaveSnapshot, RULER_THICKNESS, RULER_FONT_SIZE, revealedSmartArtNodeCount, buildSmartArtA11y, buildCssGradientFromShapeStyle, resolveGroupChildFill, getGroupChildParentFill, ensureActionAffordanceStyles, resolveElementActionAffordance, actionAffordanceLabels, getComputedEffectStyle, getSoftEdgeSvgFilter, buildStrokeOutline, svgGradientFillRef, mediaTransportVisible, isInkElement, getElementLabel, buildPreviewElements, deriveSlideFieldContext, SLIDE_TRANSITION_OPTIONS, hiddenSlideCue, HIDDEN_SLIDE_SLASH_GRADIENT, HIDDEN_SLIDE_LABEL_KEY, themeToCssVars, applyMotionPathPreset, DEFAULT_INSERT_CHART_TYPE, hasCopyableFormat, createBackstagePresentation, printPropertiesFrameSlides, printPropertiesSlidesPerPage, VIEWER_OPTIONS_TABS, DEFAULT_QUICK_ACCESS_COMMAND_IDS, buildJoinCollaborationConfig, buildCreateCollaborationConfig, generateBroadcastRoomId, DEFAULT_BROADCAST_SERVER_URL, buildBroadcastViewerUrl, resolveTransportForServerUrl, resolveDrawingShapeNodeId, buildSummaryZoomView, getImageColorWashStyle, isImageLikeElement, getPendingSelectionRestore, restoreSegmentSelection, getTextCompensationTransform, applyChartBuildReveal, formatAxisValue, hasPressureVariation, getInkReplayStyles, INK_REPLAY_KEYFRAMES, resolveInkColor, resolveInkWidth, resolveInkOpacity, pressuresToWidths, getContentPartReplayStyles, resolveOleType, getOleTypeColor, getOleTypeLabel, filterRenderedElements, isLinkedTextBox, getOverflowSegments, shouldUseSvgWarp, ACTION_INDICATOR_CLASS, ACTION_INDICATOR_ICON_PATH, LINK_TOOLTIP_CLASS, LINK_TOOLTIP_PANEL_CLASS, LINK_TOOLTIP_LABEL_CLASS, LINK_TOOLTIP_HINT_CLASS, getSlideBackgroundStyle, filterCommands, resolveTitleBarStatusKey, TITLE_BAR_CLASSES, TITLE_BAR_DEFAULT_FILE_KEY, buildFieldSubstitutionContext, shouldConfirmExternalHyperlink, safeOpenUrl, isPpactionUrl, parsePpactionUrl, isPresentationAdvanceClick, PRESENT_TOOLBAR_CLASSES, buildContextMenuEntries, themeColorSchemesEqual, 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, 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, computeInlineEditorRect, findSmartArtNodeText, setSmartArtNodeStyle, rebuildDrawingShapesIfCleared, shouldCommitSmartArtNodeText, updateSmartArtNodeText, getImageSvgFilters, buildDuotoneCacheKey, getDuotoneCachedResult, applyDuotone, setDuotoneCachedResult, buildCacheKey, DEFAULT_COLOR_CHANGE_TOLERANCE, getCachedResult, applyColorChange, setCachedResult, findChartPartTarget, dragValueForPart, withChartPointValue, dragAnchorViewY, withChartTitle, computeSmartArtLayout, buildSmartArt3DModel, extractPathPoints, generatePressureCircles, isBrowserOpenableMime, formatBytes, getOleBadgeLabel, openUrlInNewTab, getSubstituteFontFamily, getWarpPath, extraQuickAccessCommands, TAB_ROW_ACTION_CLASSES, listBackstageRecentFiles, BACKSTAGE_NAV, INSERT_CHART_TYPES, DEFAULT_MOTION_PATH_PRESET_ID, SLIDE_VIRTUALIZATION_THRESHOLD, getSlideTransitionAnimations, SLIDE_TRANSITION_KEYFRAMES, presentationInkPath, motionPathFor, setMotionPath, getShapeAdjustmentHandleDescriptor, PRESENTER_NAVIGATOR_LABEL_KEYS, PEN_COLORS, HIGHLIGHTER_COLORS, PRESET_THEMES, isUrlSafe, sanitizeMathMl, computeHandoutLayout, getPrintableArea, generateNoteLineCount, computeAllNotesPages, getNotesPrintableArea, QUICK_ACCESS_COMMAND_CATALOG, 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, groupIntoParagraphs, substituteFieldText, BACKSTAGE_TEMPLATES, formatBackstageDate, formatBackstageSize, backstageCardsFor, DEFAULT_VIEWER_PROFILE, resolveProfileInitial, AVATAR_COLOR_SWATCHES, ENTRANCE_PRESET_VALUES, EMPHASIS_PRESET_VALUES, EXIT_PRESET_VALUES, MOTION_PATH_FAMILIES, motionPathFamilyLabelKey, motionPathPresetsByFamily, motionPathPresetLabelKey, getConnectionSites, generateTicks, rulerDragToGuidePosition, getCommentMarkerPosition, motionPathToSvgD, motionPathEndPixel, isEditableMotionPath, setMotionPathEnd, buildThemeColorGrid, THEME_COLOR_SCHEME_KEYS, THEME_COLOR_LABELS, COMMON_FONTS, buildSmartArtPresetData, handleReadingViewKey, getLocalStorageUsageSummary, saveViewerProfile, clearAllLocalViewerData, mergeSlideTransition, 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-CABQXGPI.mjs';
|
|
6
|
+
import React35, { createContext, useMemo, useState, useCallback, lazy, forwardRef, useEffect, useRef, useContext, Suspense, useLayoutEffect, Fragment as Fragment$1, useDeferredValue } from 'react';
|
|
7
7
|
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
8
8
|
import { useTranslation } from 'react-i18next';
|
|
9
|
-
import { LuRotateCw, LuMessageSquare, LuEyeOff, LuSettings, LuX, LuCalendarDays, LuHash, LuText, LuCast, LuSave, LuUndo, LuRedo, LuSearch, LuShieldCheck, LuPlus, LuPanelLeftClose, LuStickyNote, LuMonitor, LuColumns2, LuPresentation, LuMinus, LuLayers, LuSettings2, LuClock, LuDownload, LuTrash2, LuCheck, LuLock, LuEye, LuFileText, LuType, LuLoader, LuShieldAlert, LuSignature, LuInfo, LuTriangleAlert, LuPrinter, LuPenTool, LuBug, LuChevronUp, LuChevronDown, 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, LuUpload, LuBold, LuItalic, LuUnderline, LuStrikethrough, LuLink, LuGrid2X2, LuCopyPlus, LuCirclePlay, LuCirclePause,
|
|
9
|
+
import { LuRotateCw, LuMessageSquare, LuEyeOff, LuSettings, LuX, LuCalendarDays, LuHash, LuText, LuCast, LuSave, LuUndo, LuRedo, LuSearch, LuShieldCheck, LuPlus, LuPanelLeftClose, LuStickyNote, LuMonitor, LuColumns2, LuPresentation, LuMinus, LuLayers, LuSettings2, LuClock, LuDownload, LuTrash2, LuCheck, LuLock, LuEye, LuFileText, LuType, LuLoader, LuShieldAlert, LuSignature, LuInfo, LuTriangleAlert, LuPrinter, LuPenTool, LuBug, LuChevronUp, LuChevronDown, 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, LuUpload, LuBold, LuItalic, LuUnderline, LuStrikethrough, LuLink, LuGrid2X2, LuCopyPlus, LuScan, LuMonitorOff, LuCirclePlay, LuCirclePause, LuArrowLeftRight, LuClipboardCopy, LuWand, LuTextCursorInput, LuFile, LuEllipsis, LuUserRound, LuFilePlus2, LuHouse, LuPackage, LuBox, LuFileImage, LuUser, LuHardDrive, LuLogIn, LuFolderPlus, LuAlignLeft, LuAlignCenter, LuAlignRight, LuAlignJustify, LuColumns3, LuSpline, LuAlignHorizontalSpaceAround, LuAlignVerticalSpaceAround, LuGroup, LuUngroup, LuMove, LuRadio, LuLockOpen, LuArrowDown, LuArrowUp, LuArrowRight, LuReply, LuBookmark } from 'react-icons/lu';
|
|
10
10
|
|
|
11
11
|
var ViewerThemeContext = createContext(void 0);
|
|
12
12
|
function ViewerThemeProvider({ theme, children }) {
|
|
@@ -1246,11 +1246,11 @@ var TRANSITION_PRESETS = [
|
|
|
1246
1246
|
];
|
|
1247
1247
|
function TransitionsSection(p) {
|
|
1248
1248
|
const { t } = useTranslation();
|
|
1249
|
-
const [selected, setSelected] =
|
|
1250
|
-
const [duration, setDuration] =
|
|
1251
|
-
const [advanceOnClick, setAdvanceOnClick] =
|
|
1252
|
-
const [advanceAfter, setAdvanceAfter] =
|
|
1253
|
-
const [advanceAfterSeconds, setAdvanceAfterSeconds] =
|
|
1249
|
+
const [selected, setSelected] = React35.useState("none");
|
|
1250
|
+
const [duration, setDuration] = React35.useState("00.50");
|
|
1251
|
+
const [advanceOnClick, setAdvanceOnClick] = React35.useState(true);
|
|
1252
|
+
const [advanceAfter, setAdvanceAfter] = React35.useState(false);
|
|
1253
|
+
const [advanceAfterSeconds, setAdvanceAfterSeconds] = React35.useState("00:00.00");
|
|
1254
1254
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
1255
1255
|
/* @__PURE__ */ jsxs("button", { type: "button", className: pill, title: t("pptx.ribbon.previewTransition"), children: [
|
|
1256
1256
|
/* @__PURE__ */ jsx(LuPlay, { className: ics }),
|
|
@@ -1452,7 +1452,7 @@ function AccountPage() {
|
|
|
1452
1452
|
return void 0;
|
|
1453
1453
|
});
|
|
1454
1454
|
};
|
|
1455
|
-
const version = "2.
|
|
1455
|
+
const version = "2.12.0" ;
|
|
1456
1456
|
return /* @__PURE__ */ jsxs("div", { className: "mt-8 max-w-[700px] space-y-6", children: [
|
|
1457
1457
|
/* @__PURE__ */ jsxs("section", { className: cardClass, children: [
|
|
1458
1458
|
/* @__PURE__ */ jsxs("h2", { className: "flex items-center gap-2 text-sm font-semibold", children: [
|
|
@@ -6175,7 +6175,7 @@ function HorizontalRulerView({ ticks, widthPx, highlight }) {
|
|
|
6175
6175
|
}
|
|
6176
6176
|
);
|
|
6177
6177
|
}
|
|
6178
|
-
var HorizontalRuler =
|
|
6178
|
+
var HorizontalRuler = React35.memo(HorizontalRulerView);
|
|
6179
6179
|
HorizontalRuler.displayName = "HorizontalRuler";
|
|
6180
6180
|
function VerticalRulerView({ ticks, heightPx, highlight }) {
|
|
6181
6181
|
return /* @__PURE__ */ jsxs(
|
|
@@ -6247,7 +6247,7 @@ function VerticalRulerView({ ticks, heightPx, highlight }) {
|
|
|
6247
6247
|
}
|
|
6248
6248
|
);
|
|
6249
6249
|
}
|
|
6250
|
-
var VerticalRuler =
|
|
6250
|
+
var VerticalRuler = React35.memo(VerticalRulerView);
|
|
6251
6251
|
VerticalRuler.displayName = "VerticalRuler";
|
|
6252
6252
|
function Ruler({
|
|
6253
6253
|
canvasSize,
|
|
@@ -6951,6 +6951,39 @@ function useStableCallbacks(callbacks) {
|
|
|
6951
6951
|
stableResizeTableRow
|
|
6952
6952
|
};
|
|
6953
6953
|
}
|
|
6954
|
+
function useActionAffordance(element, canInteract) {
|
|
6955
|
+
const { t } = useTranslation();
|
|
6956
|
+
ensureActionAffordanceStyles();
|
|
6957
|
+
return useMemo(
|
|
6958
|
+
() => resolveElementActionAffordance(element, {
|
|
6959
|
+
canInteract,
|
|
6960
|
+
// Wrapped rather than passed by reference: i18next's `TFunction` is
|
|
6961
|
+
// heavily overloaded and does not assign to a plain key -> string.
|
|
6962
|
+
labels: actionAffordanceLabels((key) => t(key))
|
|
6963
|
+
}),
|
|
6964
|
+
[element, canInteract, t]
|
|
6965
|
+
);
|
|
6966
|
+
}
|
|
6967
|
+
function ActionIndicator({ title }) {
|
|
6968
|
+
return /* @__PURE__ */ jsx("div", { className: ACTION_INDICATOR_CLASS, title, children: /* @__PURE__ */ jsx("svg", { viewBox: "0 0 24 24", fill: "currentColor", "aria-hidden": "true", children: /* @__PURE__ */ jsx("path", { d: ACTION_INDICATOR_ICON_PATH }) }) });
|
|
6969
|
+
}
|
|
6970
|
+
function LinkTooltip({ label, hint }) {
|
|
6971
|
+
return /* @__PURE__ */ jsx("div", { className: LINK_TOOLTIP_CLASS, children: /* @__PURE__ */ jsxs("div", { className: LINK_TOOLTIP_PANEL_CLASS, children: [
|
|
6972
|
+
/* @__PURE__ */ jsx("div", { className: LINK_TOOLTIP_LABEL_CLASS, children: label }),
|
|
6973
|
+
/* @__PURE__ */ jsx("div", { className: LINK_TOOLTIP_HINT_CLASS, children: hint })
|
|
6974
|
+
] }) });
|
|
6975
|
+
}
|
|
6976
|
+
function ActionAffordances({
|
|
6977
|
+
affordance
|
|
6978
|
+
}) {
|
|
6979
|
+
if (!affordance.showIndicator && !affordance.showLinkTooltip) {
|
|
6980
|
+
return null;
|
|
6981
|
+
}
|
|
6982
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
6983
|
+
affordance.showIndicator && /* @__PURE__ */ jsx(ActionIndicator, { title: affordance.indicatorTitle }),
|
|
6984
|
+
affordance.showLinkTooltip && /* @__PURE__ */ jsx(LinkTooltip, { label: affordance.linkTooltipLabel, hint: affordance.linkTooltipHint })
|
|
6985
|
+
] });
|
|
6986
|
+
}
|
|
6954
6987
|
function ConnectorTextOverlay({
|
|
6955
6988
|
connectorText,
|
|
6956
6989
|
connectorTextSegments,
|
|
@@ -7199,7 +7232,7 @@ function ResizeHandles({
|
|
|
7199
7232
|
) : null
|
|
7200
7233
|
] });
|
|
7201
7234
|
}
|
|
7202
|
-
var ConnectorElementRenderer =
|
|
7235
|
+
var ConnectorElementRenderer = React35.memo(
|
|
7203
7236
|
({
|
|
7204
7237
|
el,
|
|
7205
7238
|
isSelected,
|
|
@@ -7495,6 +7528,8 @@ function getElementInteractionProps({
|
|
|
7495
7528
|
title: canInteract && element.actionClick ? void 0 : element.actionClick?.tooltip || element.actionHover?.tooltip || void 0
|
|
7496
7529
|
};
|
|
7497
7530
|
}
|
|
7531
|
+
|
|
7532
|
+
// src/viewer/components/elements/element-renderer-helpers.tsx
|
|
7498
7533
|
function renderDagDuotoneFilterForElement(el) {
|
|
7499
7534
|
if (!hasDagDuotoneEffect(el)) {
|
|
7500
7535
|
return null;
|
|
@@ -7545,19 +7580,6 @@ function getContainerStyle({
|
|
|
7545
7580
|
...templateEditing ? { outline: "2px dashed rgb(217, 119, 6)", outlineOffset: "1px", opacity: opacity ?? 0.95 } : {}
|
|
7546
7581
|
};
|
|
7547
7582
|
}
|
|
7548
|
-
function ActionIndicator({
|
|
7549
|
-
clickTooltip,
|
|
7550
|
-
hoverTooltip
|
|
7551
|
-
}) {
|
|
7552
|
-
return /* @__PURE__ */ jsx(
|
|
7553
|
-
"div",
|
|
7554
|
-
{
|
|
7555
|
-
className: "absolute -top-1 -right-1 z-20 w-4 h-4 rounded-full bg-amber-500 flex items-center justify-center shadow",
|
|
7556
|
-
title: clickTooltip || hoverTooltip || "Has action",
|
|
7557
|
-
children: /* @__PURE__ */ jsx("svg", { className: "w-2.5 h-2.5 text-white", viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ jsx("path", { d: "M13 2L3 14h9l-1 8 10-12h-9l1-8z" }) })
|
|
7558
|
-
}
|
|
7559
|
-
);
|
|
7560
|
-
}
|
|
7561
7583
|
|
|
7562
7584
|
// src/viewer/components/elements/element-shape-params.ts
|
|
7563
7585
|
function shapeParams(element) {
|
|
@@ -8705,10 +8727,10 @@ function InlineTextEditor({
|
|
|
8705
8727
|
function FailedToLoad() {
|
|
8706
8728
|
return null;
|
|
8707
8729
|
}
|
|
8708
|
-
var LazyModel3DScene =
|
|
8730
|
+
var LazyModel3DScene = React35.lazy(
|
|
8709
8731
|
async () => {
|
|
8710
8732
|
try {
|
|
8711
|
-
return await import('./Model3DScene-
|
|
8733
|
+
return await import('./Model3DScene-TU4NTHRM.mjs');
|
|
8712
8734
|
} catch {
|
|
8713
8735
|
return { default: FailedToLoad };
|
|
8714
8736
|
}
|
|
@@ -8791,7 +8813,7 @@ function PosterFallback({
|
|
|
8791
8813
|
}
|
|
8792
8814
|
);
|
|
8793
8815
|
}
|
|
8794
|
-
var Model3DErrorBoundary = class extends
|
|
8816
|
+
var Model3DErrorBoundary = class extends React35.Component {
|
|
8795
8817
|
constructor(props) {
|
|
8796
8818
|
super(props);
|
|
8797
8819
|
this.state = { hasError: false };
|
|
@@ -8982,10 +9004,10 @@ function SmartArtInlineNodeEditor({
|
|
|
8982
9004
|
onCancel
|
|
8983
9005
|
}) {
|
|
8984
9006
|
const { t } = useTranslation();
|
|
8985
|
-
const ref =
|
|
8986
|
-
const [value, setValue] =
|
|
8987
|
-
const settled =
|
|
8988
|
-
|
|
9007
|
+
const ref = React35.useRef(null);
|
|
9008
|
+
const [value, setValue] = React35.useState(initialText);
|
|
9009
|
+
const settled = React35.useRef(false);
|
|
9010
|
+
React35.useEffect(() => {
|
|
8989
9011
|
const el = ref.current;
|
|
8990
9012
|
if (el) {
|
|
8991
9013
|
el.focus();
|
|
@@ -9077,16 +9099,16 @@ function findNodeIdFromEvent(target) {
|
|
|
9077
9099
|
return null;
|
|
9078
9100
|
}
|
|
9079
9101
|
function useSmartArtHoverState(containerRef) {
|
|
9080
|
-
const [hoveredNodeId, setHoveredNodeId] =
|
|
9081
|
-
const [hoveredNodeRect, setHoveredNodeRect] =
|
|
9082
|
-
const hideTimeoutRef =
|
|
9083
|
-
const cancelPendingHide =
|
|
9102
|
+
const [hoveredNodeId, setHoveredNodeId] = React35.useState(null);
|
|
9103
|
+
const [hoveredNodeRect, setHoveredNodeRect] = React35.useState(null);
|
|
9104
|
+
const hideTimeoutRef = React35.useRef(null);
|
|
9105
|
+
const cancelPendingHide = React35.useCallback(() => {
|
|
9084
9106
|
if (hideTimeoutRef.current !== null) {
|
|
9085
9107
|
window.clearTimeout(hideTimeoutRef.current);
|
|
9086
9108
|
hideTimeoutRef.current = null;
|
|
9087
9109
|
}
|
|
9088
9110
|
}, []);
|
|
9089
|
-
const handleMouseMove =
|
|
9111
|
+
const handleMouseMove = React35.useCallback(
|
|
9090
9112
|
(e, ignoreRef) => {
|
|
9091
9113
|
const nodeEl = findNodeIdFromEvent(e.target);
|
|
9092
9114
|
const container = containerRef.current;
|
|
@@ -9114,12 +9136,12 @@ function useSmartArtHoverState(containerRef) {
|
|
|
9114
9136
|
},
|
|
9115
9137
|
[containerRef, cancelPendingHide]
|
|
9116
9138
|
);
|
|
9117
|
-
const clearHover =
|
|
9139
|
+
const clearHover = React35.useCallback(() => {
|
|
9118
9140
|
cancelPendingHide();
|
|
9119
9141
|
setHoveredNodeId(null);
|
|
9120
9142
|
setHoveredNodeRect(null);
|
|
9121
9143
|
}, [cancelPendingHide]);
|
|
9122
|
-
|
|
9144
|
+
React35.useEffect(() => cancelPendingHide, [cancelPendingHide]);
|
|
9123
9145
|
return { hoveredNodeId, hoveredNodeRect, handleMouseMove, clearHover };
|
|
9124
9146
|
}
|
|
9125
9147
|
var EDITOR_PADDING = 4;
|
|
@@ -9134,11 +9156,11 @@ function SmartArtEditableLayer({
|
|
|
9134
9156
|
onChangeNodeStyle,
|
|
9135
9157
|
children
|
|
9136
9158
|
}) {
|
|
9137
|
-
const containerRef =
|
|
9138
|
-
const styleBarRef =
|
|
9139
|
-
const [edit, setEdit] =
|
|
9159
|
+
const containerRef = React35.useRef(null);
|
|
9160
|
+
const styleBarRef = React35.useRef(null);
|
|
9161
|
+
const [edit, setEdit] = React35.useState(null);
|
|
9140
9162
|
const { hoveredNodeId, hoveredNodeRect, handleMouseMove, clearHover } = useSmartArtHoverState(containerRef);
|
|
9141
|
-
const openEditor =
|
|
9163
|
+
const openEditor = React35.useCallback(
|
|
9142
9164
|
(target) => {
|
|
9143
9165
|
const nodeEl = findNodeIdFromEvent(target);
|
|
9144
9166
|
const container = containerRef.current;
|
|
@@ -10678,11 +10700,11 @@ function arePropsEqual(prev, next) {
|
|
|
10678
10700
|
}
|
|
10679
10701
|
return true;
|
|
10680
10702
|
}
|
|
10681
|
-
var SmartArtRenderer =
|
|
10703
|
+
var SmartArtRenderer = React35.memo(SmartArtRendererImpl, arePropsEqual);
|
|
10682
10704
|
function FailedToLoad2() {
|
|
10683
10705
|
return null;
|
|
10684
10706
|
}
|
|
10685
|
-
var LazySmartArt3DScene =
|
|
10707
|
+
var LazySmartArt3DScene = React35.lazy(
|
|
10686
10708
|
async () => {
|
|
10687
10709
|
try {
|
|
10688
10710
|
return await import('./SmartArt3DScene-XCFVGCXE.mjs');
|
|
@@ -10691,7 +10713,7 @@ var LazySmartArt3DScene = React34.lazy(
|
|
|
10691
10713
|
}
|
|
10692
10714
|
}
|
|
10693
10715
|
);
|
|
10694
|
-
var SceneErrorBoundary = class extends
|
|
10716
|
+
var SceneErrorBoundary = class extends React35.Component {
|
|
10695
10717
|
constructor(props) {
|
|
10696
10718
|
super(props);
|
|
10697
10719
|
this.state = { hasError: false };
|
|
@@ -11325,6 +11347,7 @@ function renderBody(options) {
|
|
|
11325
11347
|
onColResize,
|
|
11326
11348
|
onRowResize,
|
|
11327
11349
|
isPresentationPassive,
|
|
11350
|
+
isStaticSurface,
|
|
11328
11351
|
handleMediaPlayStateChange,
|
|
11329
11352
|
allSlides,
|
|
11330
11353
|
onZoomClick,
|
|
@@ -11424,6 +11447,13 @@ function renderBody(options) {
|
|
|
11424
11447
|
autoPlay: isPresentationPassive,
|
|
11425
11448
|
fullScreen: isPresentationPassive && Boolean(el.fullScreen),
|
|
11426
11449
|
isPresentationMode: isPresentationPassive,
|
|
11450
|
+
// A still of a slide never carries a transport, whatever the canvas
|
|
11451
|
+
// does. The rule is shared so the five bindings cannot drift on it.
|
|
11452
|
+
showTransport: mediaTransportVisible({
|
|
11453
|
+
presenting: isPresentationPassive === true,
|
|
11454
|
+
preview: isStaticSurface === true,
|
|
11455
|
+
canvasTransport: true
|
|
11456
|
+
}),
|
|
11427
11457
|
onPlayStateChange: handleMediaPlayStateChange
|
|
11428
11458
|
});
|
|
11429
11459
|
}
|
|
@@ -11450,7 +11480,7 @@ function renderBody(options) {
|
|
|
11450
11480
|
}
|
|
11451
11481
|
return renderTextElementBody(options);
|
|
11452
11482
|
}
|
|
11453
|
-
var Extrusion3DOverlay =
|
|
11483
|
+
var Extrusion3DOverlay = React35.memo(({ data }) => {
|
|
11454
11484
|
if (!data.hasExtrusion || data.panels.length === 0) {
|
|
11455
11485
|
return null;
|
|
11456
11486
|
}
|
|
@@ -11483,12 +11513,6 @@ var Extrusion3DOverlay = React34.memo(({ data }) => {
|
|
|
11483
11513
|
] });
|
|
11484
11514
|
});
|
|
11485
11515
|
Extrusion3DOverlay.displayName = "Extrusion3DOverlay";
|
|
11486
|
-
function LinkTooltip({ label, hasUrl }) {
|
|
11487
|
-
return /* @__PURE__ */ jsx("div", { className: "pointer-events-none absolute left-1 top-full z-[9999] mt-1 max-w-64 opacity-0 transition-opacity duration-150 group-hover/link:opacity-100", children: /* @__PURE__ */ jsxs("div", { className: "rounded border border-border bg-popover px-2.5 py-1.5 shadow-lg", children: [
|
|
11488
|
-
/* @__PURE__ */ jsx("div", { className: "truncate text-xs text-foreground", children: label }),
|
|
11489
|
-
/* @__PURE__ */ jsx("div", { className: "mt-0.5 text-[10px] text-muted-foreground", children: hasUrl ? "Ctrl+Click to follow link" : "Active in presentation mode" })
|
|
11490
|
-
] }) });
|
|
11491
|
-
}
|
|
11492
11516
|
|
|
11493
11517
|
// src/viewer/components/elements/scoped-element-handlers.ts
|
|
11494
11518
|
function getScopedElementHandlers(elementId, options) {
|
|
@@ -11555,6 +11579,7 @@ function StaticElementRendererImpl({
|
|
|
11555
11579
|
{
|
|
11556
11580
|
"data-static-element-type": element.type,
|
|
11557
11581
|
"data-element-id": exposeElementId ? element.id : void 0,
|
|
11582
|
+
"data-pptx-element": exposeElementId ? "true" : void 0,
|
|
11558
11583
|
"data-pptx-action": isActionable ? "click" : void 0,
|
|
11559
11584
|
className: `${positioned ? "absolute" : "relative"} overflow-hidden ${isActionable ? "pointer-events-auto cursor-pointer" : "pointer-events-none"}`,
|
|
11560
11585
|
role: contractRole,
|
|
@@ -11631,6 +11656,11 @@ function StaticElementRendererImpl({
|
|
|
11631
11656
|
onCommit: noop,
|
|
11632
11657
|
onCancel: noop,
|
|
11633
11658
|
isPresentationPassive: false,
|
|
11659
|
+
// This renderer only ever paints a STILL of a slide (presenter
|
|
11660
|
+
// console panes, thumbnails, previews). It is not in presentation
|
|
11661
|
+
// mode, so without saying so a video here would carry Chrome's
|
|
11662
|
+
// scrubber over a slide nobody can play.
|
|
11663
|
+
isStaticSurface: true,
|
|
11634
11664
|
slideElements: activeSlide?.elements,
|
|
11635
11665
|
allSlides,
|
|
11636
11666
|
sourceSlideIndex,
|
|
@@ -11643,9 +11673,9 @@ function StaticElementRendererImpl({
|
|
|
11643
11673
|
}
|
|
11644
11674
|
);
|
|
11645
11675
|
}
|
|
11646
|
-
var StaticElementRenderer =
|
|
11676
|
+
var StaticElementRenderer = React35.memo(StaticElementRendererImpl);
|
|
11647
11677
|
StaticElementRenderer.displayName = "StaticElementRenderer";
|
|
11648
|
-
var ElementRenderer =
|
|
11678
|
+
var ElementRenderer = React35.memo(
|
|
11649
11679
|
// oxlint-disable-next-line prefer-arrow-callback -- named fn gives the memo component its displayName
|
|
11650
11680
|
function ElementRendererInner({
|
|
11651
11681
|
element: el,
|
|
@@ -11735,6 +11765,7 @@ var ElementRenderer = React34.memo(
|
|
|
11735
11765
|
() => build3DExtrusionData(shapeStyle3d?.shape3d, shapeStyle3d?.scene3d, fc, el.width, el.height),
|
|
11736
11766
|
[shapeStyle3d?.shape3d, shapeStyle3d?.scene3d, fc, el.width, el.height]
|
|
11737
11767
|
);
|
|
11768
|
+
const actionAffordance = useActionAffordance(el, canInteract);
|
|
11738
11769
|
const [isMediaPlaying, setIsMediaPlaying] = useState(false);
|
|
11739
11770
|
const handleMediaPlayStateChange = useCallback((playing) => {
|
|
11740
11771
|
setIsMediaPlaying(playing);
|
|
@@ -11809,7 +11840,10 @@ var ElementRenderer = React34.memo(
|
|
|
11809
11840
|
effectiveCanInteract || isActionable ? "" : "pointer-events-none",
|
|
11810
11841
|
isFullscreenMedia ? "pointer-events-auto" : "",
|
|
11811
11842
|
selB,
|
|
11812
|
-
|
|
11843
|
+
// Shared class the tooltip's `:hover` rule keys off (see
|
|
11844
|
+
// `ACTION_AFFORDANCE_CSS`), replacing React's Tailwind `group/link`
|
|
11845
|
+
// so the four non-Tailwind bindings reveal it the same way.
|
|
11846
|
+
actionAffordance.showLinkTooltip && LINK_TOOLTIP_HOST_CLASS
|
|
11813
11847
|
),
|
|
11814
11848
|
style: getContainerStyle({
|
|
11815
11849
|
el,
|
|
@@ -11887,20 +11921,7 @@ var ElementRenderer = React34.memo(
|
|
|
11887
11921
|
onUpdateChartElement: chartUpdateHandler,
|
|
11888
11922
|
onFormatText
|
|
11889
11923
|
}),
|
|
11890
|
-
|
|
11891
|
-
ActionIndicator,
|
|
11892
|
-
{
|
|
11893
|
-
clickTooltip: el.actionClick?.tooltip,
|
|
11894
|
-
hoverTooltip: el.actionHover?.tooltip
|
|
11895
|
-
}
|
|
11896
|
-
),
|
|
11897
|
-
effectiveCanInteract && el.actionClick && /* @__PURE__ */ jsx(
|
|
11898
|
-
LinkTooltip,
|
|
11899
|
-
{
|
|
11900
|
-
label: el.actionClick.tooltip || el.actionClick.url || el.actionClick.action || "Link",
|
|
11901
|
-
hasUrl: Boolean(el.actionClick.url)
|
|
11902
|
-
}
|
|
11903
|
-
),
|
|
11924
|
+
/* @__PURE__ */ jsx(ActionAffordances, { affordance: actionAffordance }),
|
|
11904
11925
|
effectiveShowResizeHandles && !effectiveIsInlineEditing && /* @__PURE__ */ jsx(
|
|
11905
11926
|
ResizeHandles,
|
|
11906
11927
|
{
|
|
@@ -12916,7 +12937,7 @@ function arePropsEqual2(prev, next) {
|
|
|
12916
12937
|
}
|
|
12917
12938
|
return true;
|
|
12918
12939
|
}
|
|
12919
|
-
var SlideThumbnail =
|
|
12940
|
+
var SlideThumbnail = React35.memo(SlideThumbnailImpl, arePropsEqual2);
|
|
12920
12941
|
|
|
12921
12942
|
// src/viewer/components/context-menu-dispatch.ts
|
|
12922
12943
|
function tableCell(props) {
|
|
@@ -13465,7 +13486,7 @@ function LazyThumbnailInner({
|
|
|
13465
13486
|
}
|
|
13466
13487
|
) });
|
|
13467
13488
|
}
|
|
13468
|
-
var LazyThumbnail =
|
|
13489
|
+
var LazyThumbnail = React35.memo(LazyThumbnailInner);
|
|
13469
13490
|
|
|
13470
13491
|
// src/viewer/components/slides-pane/utils.ts
|
|
13471
13492
|
function formatTimingMs(ms) {
|
|
@@ -13619,7 +13640,7 @@ function SlideItemInner({
|
|
|
13619
13640
|
}
|
|
13620
13641
|
);
|
|
13621
13642
|
}
|
|
13622
|
-
var SlideItem =
|
|
13643
|
+
var SlideItem = React35.memo(SlideItemInner);
|
|
13623
13644
|
function useSlidePaneCallbacks(onMoveSlide, onRenameSection) {
|
|
13624
13645
|
const [collapsedSections, setCollapsedSections] = useState({});
|
|
13625
13646
|
const [renamingSectionId, setRenamingSectionId] = useState(null);
|
|
@@ -14896,7 +14917,7 @@ function arePropsEqual3(prev, next) {
|
|
|
14896
14917
|
}
|
|
14897
14918
|
return true;
|
|
14898
14919
|
}
|
|
14899
|
-
var SlideCard =
|
|
14920
|
+
var SlideCard = React35.memo(SlideCardImpl, arePropsEqual3);
|
|
14900
14921
|
function SorterContextMenu({
|
|
14901
14922
|
x,
|
|
14902
14923
|
y,
|
|
@@ -18725,102 +18746,121 @@ function PresentationSubtitleBar({
|
|
|
18725
18746
|
function renderNotesSegments(segments) {
|
|
18726
18747
|
return notesSegmentsToSpans(segments).map((span) => {
|
|
18727
18748
|
if (span.kind === "break") {
|
|
18728
|
-
return
|
|
18749
|
+
return React35.createElement("br", { key: span.key });
|
|
18729
18750
|
}
|
|
18730
|
-
return
|
|
18751
|
+
return React35.createElement(
|
|
18731
18752
|
"span",
|
|
18732
18753
|
{ key: span.key, style: span.style },
|
|
18733
18754
|
span.text
|
|
18734
18755
|
);
|
|
18735
18756
|
});
|
|
18736
18757
|
}
|
|
18737
|
-
var
|
|
18758
|
+
var CONSOLE_ICONS = {
|
|
18759
|
+
"arrow-left-right": LuArrowLeftRight,
|
|
18760
|
+
captions: LuCaptions,
|
|
18761
|
+
"circle-pause": LuCirclePause,
|
|
18762
|
+
"circle-play": LuCirclePlay,
|
|
18763
|
+
eraser: LuEraser,
|
|
18764
|
+
"grid-2x2": LuGrid2X2,
|
|
18765
|
+
highlighter: LuHighlighter,
|
|
18766
|
+
monitor: LuMonitor,
|
|
18767
|
+
"monitor-off": LuMonitorOff,
|
|
18768
|
+
"mouse-pointer-2": LuMousePointer2,
|
|
18769
|
+
"pen-tool": LuPenTool,
|
|
18770
|
+
"rotate-ccw": LuRotateCcw,
|
|
18771
|
+
scan: LuScan,
|
|
18772
|
+
x: LuX,
|
|
18773
|
+
"zoom-in": LuZoomIn,
|
|
18774
|
+
"zoom-out": LuZoomOut
|
|
18775
|
+
};
|
|
18776
|
+
var POINTER_TOOLS = {
|
|
18777
|
+
laser: "laser",
|
|
18778
|
+
pen: "pen",
|
|
18779
|
+
highlighter: "highlighter",
|
|
18780
|
+
eraser: "eraser"
|
|
18781
|
+
};
|
|
18782
|
+
function slotState(control, props) {
|
|
18783
|
+
const snapshot = props.snapshot;
|
|
18784
|
+
const pointerTool = snapshot.pointer?.tool ?? "none";
|
|
18785
|
+
const tool = POINTER_TOOLS[control.id];
|
|
18786
|
+
if (tool) {
|
|
18787
|
+
return {
|
|
18788
|
+
active: pointerTool === tool,
|
|
18789
|
+
onClick: () => props.onPointerTool(pointerTool === tool ? "none" : tool)
|
|
18790
|
+
};
|
|
18791
|
+
}
|
|
18792
|
+
switch (control.id) {
|
|
18793
|
+
case "timer-toggle":
|
|
18794
|
+
return { active: Boolean(snapshot.paused), onClick: props.onToggleTimer };
|
|
18795
|
+
case "timer-reset":
|
|
18796
|
+
return { active: false, onClick: props.onResetTimer };
|
|
18797
|
+
case "all-slides":
|
|
18798
|
+
return { active: false, onClick: props.onShowSlides };
|
|
18799
|
+
case "zoom-in":
|
|
18800
|
+
return { active: (snapshot.zoom?.scale ?? 1) > 1, onClick: () => props.onStepZoom(1) };
|
|
18801
|
+
case "zoom-out":
|
|
18802
|
+
return { active: false, onClick: () => props.onStepZoom(-1) };
|
|
18803
|
+
case "zoom-reset":
|
|
18804
|
+
return { active: false, onClick: props.onResetZoom };
|
|
18805
|
+
case "blackout-black":
|
|
18806
|
+
return {
|
|
18807
|
+
active: snapshot.blackout === "black",
|
|
18808
|
+
onClick: () => props.onBlackout(snapshot.blackout === "black" ? "none" : "black")
|
|
18809
|
+
};
|
|
18810
|
+
case "blackout-white":
|
|
18811
|
+
return {
|
|
18812
|
+
active: snapshot.blackout === "white",
|
|
18813
|
+
onClick: () => props.onBlackout(snapshot.blackout === "white" ? "none" : "white")
|
|
18814
|
+
};
|
|
18815
|
+
case "captions":
|
|
18816
|
+
return { active: Boolean(snapshot.subtitlesVisible), onClick: props.onToggleSubtitles };
|
|
18817
|
+
case "audience":
|
|
18818
|
+
return { active: props.audienceOpen, onClick: props.onToggleAudience };
|
|
18819
|
+
case "swap-displays":
|
|
18820
|
+
return { active: false, onClick: props.onSwapDisplays, disabled: !props.audienceOpen };
|
|
18821
|
+
case "end":
|
|
18822
|
+
return { active: false, onClick: props.onExit };
|
|
18823
|
+
default:
|
|
18824
|
+
return { active: false, onClick: () => void 0 };
|
|
18825
|
+
}
|
|
18826
|
+
}
|
|
18738
18827
|
function PresenterConsoleToolbar(props) {
|
|
18739
|
-
const
|
|
18740
|
-
|
|
18741
|
-
|
|
18742
|
-
|
|
18743
|
-
|
|
18744
|
-
|
|
18745
|
-
|
|
18746
|
-
|
|
18747
|
-
|
|
18748
|
-
|
|
18749
|
-
|
|
18750
|
-
|
|
18751
|
-
|
|
18752
|
-
|
|
18753
|
-
|
|
18754
|
-
|
|
18755
|
-
|
|
18756
|
-
|
|
18757
|
-
/* @__PURE__ */ jsx("button", { className: toolClass(zoom > 1), onClick: () => props.onStepZoom(1), title: "Zoom in", children: /* @__PURE__ */ jsx(LuZoomIn, {}) }),
|
|
18758
|
-
/* @__PURE__ */ jsx("button", { className: toolClass(false), onClick: () => props.onStepZoom(-1), title: "Zoom out", children: /* @__PURE__ */ jsx(LuZoomOut, {}) }),
|
|
18759
|
-
/* @__PURE__ */ jsx("button", { className: toolClass(false), onClick: props.onResetZoom, title: "Reset zoom", children: /* @__PURE__ */ jsx(LuScan, {}) }),
|
|
18760
|
-
/* @__PURE__ */ jsx("span", { className: "mx-1 h-6 w-px bg-border" }),
|
|
18761
|
-
["laser", "pen", "highlighter", "eraser"].map((tool) => /* @__PURE__ */ jsx(
|
|
18828
|
+
const { t } = useTranslation();
|
|
18829
|
+
return /* @__PURE__ */ jsx("div", { className: PRESENTER_CONSOLE_CLASSES.strip, "data-pptx-presenter-toolbar": true, children: PRESENTER_CONSOLE_CONTROLS.map((control) => {
|
|
18830
|
+
if (control.kind === "divider" || control.kind === "spacer") {
|
|
18831
|
+
return /* @__PURE__ */ jsx(
|
|
18832
|
+
"span",
|
|
18833
|
+
{
|
|
18834
|
+
"data-pptx-presenter-control": control.id,
|
|
18835
|
+
className: control.kind === "divider" ? PRESENTER_CONSOLE_CLASSES.divider : PRESENTER_CONSOLE_CLASSES.spacer
|
|
18836
|
+
},
|
|
18837
|
+
control.id
|
|
18838
|
+
);
|
|
18839
|
+
}
|
|
18840
|
+
const state = slotState(control, props);
|
|
18841
|
+
const labelKey = state.active && control.activeLabelKey ? control.activeLabelKey : control.labelKey;
|
|
18842
|
+
const iconName = state.active && control.activeIcon ? control.activeIcon : control.icon;
|
|
18843
|
+
const Icon = iconName === void 0 ? void 0 : CONSOLE_ICONS[iconName];
|
|
18844
|
+
const label = labelKey === void 0 ? void 0 : t(labelKey);
|
|
18845
|
+
return /* @__PURE__ */ jsxs(
|
|
18762
18846
|
"button",
|
|
18763
18847
|
{
|
|
18764
|
-
|
|
18765
|
-
|
|
18766
|
-
|
|
18767
|
-
|
|
18848
|
+
type: "button",
|
|
18849
|
+
"data-pptx-presenter-control": control.id,
|
|
18850
|
+
className: state.active ? PRESENTER_CONSOLE_CLASSES.controlActive : PRESENTER_CONSOLE_CLASSES.control,
|
|
18851
|
+
onClick: state.onClick,
|
|
18852
|
+
disabled: state.disabled,
|
|
18853
|
+
"aria-label": label,
|
|
18854
|
+
title: label,
|
|
18855
|
+
"aria-pressed": control.kind === "toggle" ? state.active : void 0,
|
|
18856
|
+
children: [
|
|
18857
|
+
Icon ? /* @__PURE__ */ jsx(Icon, {}) : null,
|
|
18858
|
+
control.glyph
|
|
18859
|
+
]
|
|
18768
18860
|
},
|
|
18769
|
-
|
|
18770
|
-
)
|
|
18771
|
-
|
|
18772
|
-
/* @__PURE__ */ jsx(
|
|
18773
|
-
"button",
|
|
18774
|
-
{
|
|
18775
|
-
className: toolClass(props.snapshot.blackout === "black"),
|
|
18776
|
-
onClick: () => props.onBlackout(props.snapshot.blackout === "black" ? "none" : "black"),
|
|
18777
|
-
title: "Black screen",
|
|
18778
|
-
children: "B"
|
|
18779
|
-
}
|
|
18780
|
-
),
|
|
18781
|
-
/* @__PURE__ */ jsx(
|
|
18782
|
-
"button",
|
|
18783
|
-
{
|
|
18784
|
-
className: toolClass(props.snapshot.blackout === "white"),
|
|
18785
|
-
onClick: () => props.onBlackout(props.snapshot.blackout === "white" ? "none" : "white"),
|
|
18786
|
-
title: "White screen",
|
|
18787
|
-
children: "W"
|
|
18788
|
-
}
|
|
18789
|
-
),
|
|
18790
|
-
/* @__PURE__ */ jsx(
|
|
18791
|
-
"button",
|
|
18792
|
-
{
|
|
18793
|
-
className: toolClass(Boolean(props.snapshot.subtitlesVisible)),
|
|
18794
|
-
onClick: props.onToggleSubtitles,
|
|
18795
|
-
title: "Toggle subtitles",
|
|
18796
|
-
children: /* @__PURE__ */ jsx(LuCaptions, {})
|
|
18797
|
-
}
|
|
18798
|
-
),
|
|
18799
|
-
/* @__PURE__ */ jsx("div", { className: "flex-1" }),
|
|
18800
|
-
/* @__PURE__ */ jsx(
|
|
18801
|
-
"button",
|
|
18802
|
-
{
|
|
18803
|
-
className: toolClass(props.audienceOpen),
|
|
18804
|
-
onClick: props.onToggleAudience,
|
|
18805
|
-
title: "Audience display",
|
|
18806
|
-
children: props.audienceOpen ? /* @__PURE__ */ jsx(LuMonitorOff, {}) : /* @__PURE__ */ jsx(LuMonitor, {})
|
|
18807
|
-
}
|
|
18808
|
-
),
|
|
18809
|
-
/* @__PURE__ */ jsx(
|
|
18810
|
-
"button",
|
|
18811
|
-
{
|
|
18812
|
-
className: toolClass(false),
|
|
18813
|
-
onClick: props.onSwapDisplays,
|
|
18814
|
-
disabled: !props.audienceOpen,
|
|
18815
|
-
title: "Swap displays",
|
|
18816
|
-
children: "Swap"
|
|
18817
|
-
}
|
|
18818
|
-
),
|
|
18819
|
-
/* @__PURE__ */ jsxs("button", { className: toolClass(false), onClick: props.onExit, title: "End slide show", children: [
|
|
18820
|
-
/* @__PURE__ */ jsx(LuX, {}),
|
|
18821
|
-
" End"
|
|
18822
|
-
] })
|
|
18823
|
-
] });
|
|
18861
|
+
control.id
|
|
18862
|
+
);
|
|
18863
|
+
}) });
|
|
18824
18864
|
}
|
|
18825
18865
|
function ScaledSlidePreviewImpl({
|
|
18826
18866
|
slide,
|
|
@@ -18934,7 +18974,7 @@ function arePropsEqual4(prev, next) {
|
|
|
18934
18974
|
}
|
|
18935
18975
|
return true;
|
|
18936
18976
|
}
|
|
18937
|
-
var ScaledSlidePreview =
|
|
18977
|
+
var ScaledSlidePreview = React35.memo(ScaledSlidePreviewImpl, arePropsEqual4);
|
|
18938
18978
|
function PresenterNotesRail({
|
|
18939
18979
|
slides,
|
|
18940
18980
|
current,
|
|
@@ -18957,14 +18997,14 @@ function PresenterNotesRail({
|
|
|
18957
18997
|
() => notesSegments?.length ? renderNotesSegments(notesSegments) : notesText.trim() ? notesText : /* @__PURE__ */ jsx("span", { className: "italic text-muted-foreground", children: t("pptx.presenter.noNotes") }),
|
|
18958
18998
|
[notesSegments, notesText, t]
|
|
18959
18999
|
);
|
|
18960
|
-
return /* @__PURE__ */ jsxs("aside", { className:
|
|
19000
|
+
return /* @__PURE__ */ jsxs("aside", { className: PRESENTER_CONSOLE_CLASSES.rail, children: [
|
|
18961
19001
|
/* @__PURE__ */ jsxs("header", { className: "flex items-center justify-between border-b border-border/60 px-4 py-3", children: [
|
|
18962
19002
|
/* @__PURE__ */ jsxs("div", { children: [
|
|
18963
|
-
/* @__PURE__ */ jsx("div", { className:
|
|
19003
|
+
/* @__PURE__ */ jsx("div", { className: PRESENTER_CONSOLE_CLASSES.railHeading, children: t("pptx.presenter.currentTime") }),
|
|
18964
19004
|
/* @__PURE__ */ jsx("div", { className: "font-mono text-lg tabular-nums", children: formatTime(new Date(now)) })
|
|
18965
19005
|
] }),
|
|
18966
19006
|
/* @__PURE__ */ jsxs("div", { className: "text-right", children: [
|
|
18967
|
-
/* @__PURE__ */ jsx("div", { className:
|
|
19007
|
+
/* @__PURE__ */ jsx("div", { className: PRESENTER_CONSOLE_CLASSES.railHeading, children: t("pptx.presenter.elapsed") }),
|
|
18968
19008
|
/* @__PURE__ */ jsx("div", { className: "font-mono text-lg tabular-nums text-primary", children: formatElapsed(elapsed) })
|
|
18969
19009
|
] })
|
|
18970
19010
|
] }),
|
|
@@ -18974,7 +19014,8 @@ function PresenterNotesRail({
|
|
|
18974
19014
|
{
|
|
18975
19015
|
type: "button",
|
|
18976
19016
|
onClick: () => onMove(-1),
|
|
18977
|
-
disabled: current
|
|
19017
|
+
disabled: presenterPrevDisabled(current),
|
|
19018
|
+
"data-pptx-presenter-control": "prev",
|
|
18978
19019
|
className: "inline-flex items-center gap-1 rounded bg-muted px-3 py-1.5 text-xs disabled:opacity-40",
|
|
18979
19020
|
children: [
|
|
18980
19021
|
/* @__PURE__ */ jsx(LuChevronLeft, {}),
|
|
@@ -18993,6 +19034,8 @@ function PresenterNotesRail({
|
|
|
18993
19034
|
{
|
|
18994
19035
|
type: "button",
|
|
18995
19036
|
onClick: () => onMove(1),
|
|
19037
|
+
disabled: presenterNextDisabled(),
|
|
19038
|
+
"data-pptx-presenter-control": "next",
|
|
18996
19039
|
className: "inline-flex items-center gap-1 rounded bg-muted px-3 py-1.5 text-xs disabled:opacity-40",
|
|
18997
19040
|
children: [
|
|
18998
19041
|
t("pptx.presenter.next"),
|
|
@@ -19002,8 +19045,8 @@ function PresenterNotesRail({
|
|
|
19002
19045
|
}
|
|
19003
19046
|
)
|
|
19004
19047
|
] }),
|
|
19005
|
-
/* @__PURE__ */ jsxs("section", { className: "border-b border-border/60 px-4 py-3", children: [
|
|
19006
|
-
/* @__PURE__ */ jsx("div", { className:
|
|
19048
|
+
/* @__PURE__ */ jsxs("section", { className: "border-b border-border/60 px-4 py-3", "data-pptx-presenter-next-preview": true, children: [
|
|
19049
|
+
/* @__PURE__ */ jsx("div", { className: `mb-2 ${PRESENTER_CONSOLE_CLASSES.railHeading}`, children: t("pptx.presenter.nextSlidePreview") }),
|
|
19007
19050
|
nextSlide ? /* @__PURE__ */ jsx(
|
|
19008
19051
|
ScaledSlidePreview,
|
|
19009
19052
|
{
|
|
@@ -19013,9 +19056,9 @@ function PresenterNotesRail({
|
|
|
19013
19056
|
}
|
|
19014
19057
|
) : /* @__PURE__ */ jsx("div", { className: "flex h-16 items-center justify-center rounded bg-muted/40 text-xs italic text-muted-foreground", children: t("pptx.presenter.endOfPresentation") })
|
|
19015
19058
|
] }),
|
|
19016
|
-
/* @__PURE__ */ jsxs("section", { className: "flex min-h-0 flex-1 flex-col px-4 py-3", children: [
|
|
19059
|
+
/* @__PURE__ */ jsxs("section", { className: "flex min-h-0 flex-1 flex-col px-4 py-3", "data-pptx-presenter-notes": true, children: [
|
|
19017
19060
|
/* @__PURE__ */ jsxs("div", { className: "mb-2 flex items-center justify-between", children: [
|
|
19018
|
-
/* @__PURE__ */ jsx("div", { className:
|
|
19061
|
+
/* @__PURE__ */ jsx("div", { className: PRESENTER_CONSOLE_CLASSES.railHeading, children: t("pptx.presenter.speakerNotes") }),
|
|
19019
19062
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1", children: [
|
|
19020
19063
|
/* @__PURE__ */ jsx(
|
|
19021
19064
|
"button",
|
|
@@ -19023,6 +19066,7 @@ function PresenterNotesRail({
|
|
|
19023
19066
|
type: "button",
|
|
19024
19067
|
onClick: () => setFontSize(clampNotesFontSize(fontSize - NOTES_FONT_SIZE_STEP)),
|
|
19025
19068
|
disabled: fontSize <= NOTES_FONT_SIZE_MIN,
|
|
19069
|
+
"data-pptx-presenter-control": "notes-font-decrease",
|
|
19026
19070
|
"aria-label": t("pptx.presenter.decreaseFontSize"),
|
|
19027
19071
|
children: /* @__PURE__ */ jsx(LuMinus, {})
|
|
19028
19072
|
}
|
|
@@ -19037,6 +19081,7 @@ function PresenterNotesRail({
|
|
|
19037
19081
|
type: "button",
|
|
19038
19082
|
onClick: () => setFontSize(clampNotesFontSize(fontSize + NOTES_FONT_SIZE_STEP)),
|
|
19039
19083
|
disabled: fontSize >= NOTES_FONT_SIZE_MAX,
|
|
19084
|
+
"data-pptx-presenter-control": "notes-font-increase",
|
|
19040
19085
|
"aria-label": t("pptx.presenter.increaseFontSize"),
|
|
19041
19086
|
children: /* @__PURE__ */ jsx(LuPlus, {})
|
|
19042
19087
|
}
|
|
@@ -19065,17 +19110,27 @@ function PresenterNotesRail({
|
|
|
19065
19110
|
] });
|
|
19066
19111
|
}
|
|
19067
19112
|
function PresenterSlideNavigator(props) {
|
|
19068
|
-
|
|
19069
|
-
|
|
19113
|
+
const { t } = useTranslation();
|
|
19114
|
+
return /* @__PURE__ */ jsxs("div", { className: `${PRESENTER_CONSOLE_CLASSES.navigator} text-foreground`, children: [
|
|
19115
|
+
/* @__PURE__ */ jsxs("header", { className: "mb-4 flex items-center justify-between border-b border-border pb-4", children: [
|
|
19070
19116
|
/* @__PURE__ */ jsxs("div", { children: [
|
|
19071
|
-
/* @__PURE__ */ jsx("p", { className: "text-xs uppercase tracking-[0.22em] text-sky-300", children:
|
|
19072
|
-
/* @__PURE__ */ jsx("h2", { className: "text-xl font-semibold", children:
|
|
19117
|
+
/* @__PURE__ */ jsx("p", { className: "text-xs uppercase tracking-[0.22em] text-sky-300", children: t(PRESENTER_NAVIGATOR_LABEL_KEYS.title) }),
|
|
19118
|
+
/* @__PURE__ */ jsx("h2", { className: "text-xl font-semibold", children: t(PRESENTER_NAVIGATOR_LABEL_KEYS.subtitle) })
|
|
19073
19119
|
] }),
|
|
19074
|
-
/* @__PURE__ */ jsx(
|
|
19120
|
+
/* @__PURE__ */ jsx(
|
|
19121
|
+
"button",
|
|
19122
|
+
{
|
|
19123
|
+
type: "button",
|
|
19124
|
+
className: "rounded-md bg-muted px-4 py-2 hover:bg-accent",
|
|
19125
|
+
onClick: props.onClose,
|
|
19126
|
+
children: t(PRESENTER_NAVIGATOR_LABEL_KEYS.close)
|
|
19127
|
+
}
|
|
19128
|
+
)
|
|
19075
19129
|
] }),
|
|
19076
|
-
/* @__PURE__ */ jsx("div", { className:
|
|
19130
|
+
/* @__PURE__ */ jsx("div", { className: PRESENTER_CONSOLE_CLASSES.navigatorGrid, children: props.slides.map((slide, index) => /* @__PURE__ */ jsxs(
|
|
19077
19131
|
"button",
|
|
19078
19132
|
{
|
|
19133
|
+
type: "button",
|
|
19079
19134
|
className: `group text-left ${index === props.current ? "ring-2 ring-sky-400" : ""} ${slide.hidden ? "opacity-45" : ""}`,
|
|
19080
19135
|
onClick: () => props.onSelect(index),
|
|
19081
19136
|
children: [
|
|
@@ -19219,10 +19274,8 @@ function PresenterView({
|
|
|
19219
19274
|
if (!currentSlide) {
|
|
19220
19275
|
return /* @__PURE__ */ jsx("div", { className: "absolute inset-0 z-50 flex items-center justify-center bg-card text-muted-foreground", children: t("pptx.presenter.noSlides") });
|
|
19221
19276
|
}
|
|
19222
|
-
const
|
|
19223
|
-
|
|
19224
|
-
const timerSegment = Math.floor(elapsed / TIMER_SEGMENT_MS);
|
|
19225
|
-
return /* @__PURE__ */ jsxs("div", { className: "absolute inset-0 z-50 flex flex-col bg-card text-foreground", children: [
|
|
19277
|
+
const timerProgress = presenterTimerProgress(elapsed);
|
|
19278
|
+
return /* @__PURE__ */ jsxs("div", { className: PRESENTER_CONSOLE_CLASSES.root, children: [
|
|
19226
19279
|
/* @__PURE__ */ jsx(
|
|
19227
19280
|
PresenterConsoleToolbar,
|
|
19228
19281
|
{
|
|
@@ -19243,14 +19296,14 @@ function PresenterView({
|
|
|
19243
19296
|
onExit
|
|
19244
19297
|
}
|
|
19245
19298
|
),
|
|
19246
|
-
/* @__PURE__ */ jsxs("div", { className:
|
|
19299
|
+
/* @__PURE__ */ jsxs("div", { className: PRESENTER_CONSOLE_CLASSES.body, children: [
|
|
19247
19300
|
/* @__PURE__ */ jsxs(
|
|
19248
19301
|
"div",
|
|
19249
19302
|
{
|
|
19250
19303
|
role: "presentation",
|
|
19251
19304
|
"data-pptx-presenter-slide": true,
|
|
19252
19305
|
onClick: handleSlidePaneClick,
|
|
19253
|
-
className:
|
|
19306
|
+
className: `${PRESENTER_CONSOLE_CLASSES.main} ${paneAdvancesOnClick ? "cursor-pointer" : ""}`,
|
|
19254
19307
|
children: [
|
|
19255
19308
|
endOfShowVisible && /* @__PURE__ */ jsx(PresentationEndOverlay, { onExit: () => onMovePresentationSlide(1) }),
|
|
19256
19309
|
/* @__PURE__ */ jsxs(
|
|
@@ -19320,18 +19373,21 @@ function PresenterView({
|
|
|
19320
19373
|
/* @__PURE__ */ jsx(
|
|
19321
19374
|
"div",
|
|
19322
19375
|
{
|
|
19323
|
-
className:
|
|
19376
|
+
className: PRESENTER_CONSOLE_CLASSES.progressTrack,
|
|
19324
19377
|
role: "progressbar",
|
|
19325
|
-
"aria-valuenow": Math.round(timerProgress),
|
|
19378
|
+
"aria-valuenow": Math.round(timerProgress.percent),
|
|
19326
19379
|
"aria-valuemin": 0,
|
|
19327
19380
|
"aria-valuemax": 100,
|
|
19328
19381
|
"aria-label": t("pptx.presenter.timerProgress"),
|
|
19329
|
-
title:
|
|
19382
|
+
title: t("pptx.presenter.timerTitle", {
|
|
19383
|
+
elapsed: formatElapsed(elapsed),
|
|
19384
|
+
segment: timerProgress.segment + 1
|
|
19385
|
+
}),
|
|
19330
19386
|
children: /* @__PURE__ */ jsx(
|
|
19331
19387
|
"div",
|
|
19332
19388
|
{
|
|
19333
|
-
className:
|
|
19334
|
-
style: { width: `${timerProgress}%` }
|
|
19389
|
+
className: PRESENTER_CONSOLE_CLASSES.progressFill,
|
|
19390
|
+
style: { width: `${timerProgress.percent}%` }
|
|
19335
19391
|
}
|
|
19336
19392
|
)
|
|
19337
19393
|
}
|
|
@@ -19362,8 +19418,8 @@ function MobilePresenterView({
|
|
|
19362
19418
|
const notesText = currentSlide.notes ?? "";
|
|
19363
19419
|
const notesSegments = currentSlide.notesSegments;
|
|
19364
19420
|
const hasRichNotes = notesSegments && notesSegments.length > 0;
|
|
19365
|
-
const
|
|
19366
|
-
const
|
|
19421
|
+
const prevDisabled = presenterPrevDisabled(currentSlideIndex);
|
|
19422
|
+
const nextDisabled = presenterNextDisabled();
|
|
19367
19423
|
const insetStyle = {
|
|
19368
19424
|
paddingTop: "env(safe-area-inset-top, 0px)",
|
|
19369
19425
|
paddingBottom: "env(safe-area-inset-bottom, 0px)",
|
|
@@ -19417,8 +19473,9 @@ function MobilePresenterView({
|
|
|
19417
19473
|
"button",
|
|
19418
19474
|
{
|
|
19419
19475
|
type: "button",
|
|
19476
|
+
"data-pptx-presenter-control": "prev",
|
|
19420
19477
|
onClick: () => onMovePresentationSlide(-1),
|
|
19421
|
-
disabled:
|
|
19478
|
+
disabled: prevDisabled,
|
|
19422
19479
|
className: "inline-flex items-center justify-center gap-1.5 flex-1 h-11 rounded bg-muted hover:bg-accent disabled:opacity-40 disabled:cursor-not-allowed text-sm transition-colors",
|
|
19423
19480
|
title: t("pptx.presenter.previousSlide"),
|
|
19424
19481
|
"aria-label": t("pptx.presenter.previousSlide"),
|
|
@@ -19432,8 +19489,9 @@ function MobilePresenterView({
|
|
|
19432
19489
|
"button",
|
|
19433
19490
|
{
|
|
19434
19491
|
type: "button",
|
|
19492
|
+
"data-pptx-presenter-control": "next",
|
|
19435
19493
|
onClick: () => onMovePresentationSlide(1),
|
|
19436
|
-
disabled:
|
|
19494
|
+
disabled: nextDisabled,
|
|
19437
19495
|
className: "inline-flex items-center justify-center gap-1.5 flex-1 h-11 rounded bg-muted hover:bg-accent disabled:opacity-40 disabled:cursor-not-allowed text-sm transition-colors",
|
|
19438
19496
|
title: t("pptx.presenter.nextSlide"),
|
|
19439
19497
|
"aria-label": t("pptx.presenter.nextSlide"),
|
|
@@ -22426,7 +22484,7 @@ function ConnectorArrowsSection({
|
|
|
22426
22484
|
["Start", "End"].map((end) => {
|
|
22427
22485
|
const widthKey = end === "Start" ? "connectorStartArrowWidth" : "connectorEndArrowWidth";
|
|
22428
22486
|
const lengthKey = end === "Start" ? "connectorStartArrowLength" : "connectorEndArrowLength";
|
|
22429
|
-
return /* @__PURE__ */ jsxs(
|
|
22487
|
+
return /* @__PURE__ */ jsxs(React35.Fragment, { children: [
|
|
22430
22488
|
/* @__PURE__ */ jsxs("label", { className: "flex flex-col gap-1", children: [
|
|
22431
22489
|
/* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: t(END_LABEL_KEYS[end].width) }),
|
|
22432
22490
|
/* @__PURE__ */ jsx(
|
|
@@ -25255,7 +25313,7 @@ function StrokeEffectsSection({
|
|
|
25255
25313
|
] }),
|
|
25256
25314
|
EFFECT_CONFIGS.map((cfg) => {
|
|
25257
25315
|
const on = cfg.isOn(style);
|
|
25258
|
-
return /* @__PURE__ */ jsxs(
|
|
25316
|
+
return /* @__PURE__ */ jsxs(React35.Fragment, { children: [
|
|
25259
25317
|
/* @__PURE__ */ jsxs("label", { className: `inline-flex items-center gap-2 text-foreground ${COL2}`, children: [
|
|
25260
25318
|
/* @__PURE__ */ jsx(
|
|
25261
25319
|
"input",
|
|
@@ -26092,7 +26150,7 @@ function TextWarpGallery({
|
|
|
26092
26150
|
onUpdateTextStyle
|
|
26093
26151
|
}) {
|
|
26094
26152
|
const { t } = useTranslation();
|
|
26095
|
-
const [expanded, setExpanded] =
|
|
26153
|
+
const [expanded, setExpanded] = React35.useState(false);
|
|
26096
26154
|
const currentPreset = ts?.textWarpPreset || "textNoShape";
|
|
26097
26155
|
return /* @__PURE__ */ jsxs("div", { className: "mt-2 rounded border border-border bg-card p-2 space-y-2", children: [
|
|
26098
26156
|
/* @__PURE__ */ jsxs(
|
|
@@ -26808,7 +26866,7 @@ function SmartArtStyleControls({
|
|
|
26808
26866
|
onChangeStyle
|
|
26809
26867
|
}) {
|
|
26810
26868
|
const { t } = useTranslation();
|
|
26811
|
-
const translate =
|
|
26869
|
+
const translate = React35.useCallback((key) => t(key), [t]);
|
|
26812
26870
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
26813
26871
|
/* @__PURE__ */ jsxs("label", { className: "flex flex-col gap-1 text-[11px]", children: [
|
|
26814
26872
|
/* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: t("pptx.smartart.colorScheme") }),
|
|
@@ -26864,9 +26922,9 @@ function SmartArtPropertiesPanel({
|
|
|
26864
26922
|
const nodes = smartArtData.nodes ?? [];
|
|
26865
26923
|
const layout = smartArtData.resolvedLayoutType;
|
|
26866
26924
|
const topLevelCount = nodes.filter((n) => !n.parentId).length;
|
|
26867
|
-
const inputRefs =
|
|
26868
|
-
const pendingFocusId =
|
|
26869
|
-
|
|
26925
|
+
const inputRefs = React35.useRef(/* @__PURE__ */ new Map());
|
|
26926
|
+
const pendingFocusId = React35.useRef(null);
|
|
26927
|
+
React35.useEffect(() => {
|
|
26870
26928
|
const id = pendingFocusId.current;
|
|
26871
26929
|
if (id) {
|
|
26872
26930
|
inputRefs.current.get(id)?.focus();
|
|
@@ -29308,7 +29366,7 @@ function PresentationPropertiesPanel({
|
|
|
29308
29366
|
onUpdateTagCollections
|
|
29309
29367
|
}) {
|
|
29310
29368
|
const { t } = useTranslation();
|
|
29311
|
-
const handleTransitionChange =
|
|
29369
|
+
const handleTransitionChange = React35.useCallback(
|
|
29312
29370
|
(updates) => {
|
|
29313
29371
|
onUpdateSlide({
|
|
29314
29372
|
transition: mergeSlideTransition(activeSlide?.transition, updates)
|
|
@@ -33241,7 +33299,7 @@ function ViewerToolbarSection(props) {
|
|
|
33241
33299
|
},
|
|
33242
33300
|
[activeSlide, propertyHandlers]
|
|
33243
33301
|
);
|
|
33244
|
-
const scopedLayoutOptions =
|
|
33302
|
+
const scopedLayoutOptions = React35.useMemo(
|
|
33245
33303
|
() => scopeLayoutOptionsToActiveSlide(s.layoutOptions, activeSlide),
|
|
33246
33304
|
[s.layoutOptions, activeSlide]
|
|
33247
33305
|
);
|
|
@@ -34995,7 +35053,7 @@ ${url}`)) {
|
|
|
34995
35053
|
)
|
|
34996
35054
|
);
|
|
34997
35055
|
}
|
|
34998
|
-
var AiChatPanel = lazy(() => import('./AiChatPanel-
|
|
35056
|
+
var AiChatPanel = lazy(() => import('./AiChatPanel-CGGUPVQX.mjs'));
|
|
34999
35057
|
function AiChatPanelLazy(props) {
|
|
35000
35058
|
return /* @__PURE__ */ jsx(
|
|
35001
35059
|
Suspense,
|