pptx-react-viewer 2.10.0 → 2.11.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 +4 -0
- package/dist/{AiChatPanel-KTMWRUD5.js → AiChatPanel-E6W3EACA.js} +23 -23
- package/dist/AiChatPanel-E6W3EACA.js.br +0 -0
- package/dist/AiChatPanel-E6W3EACA.js.gz +0 -0
- package/dist/{AiChatPanel-35CHYS5N.mjs → AiChatPanel-RMQIJDUJ.mjs} +4 -4
- package/dist/AiChatPanel-RMQIJDUJ.mjs.br +0 -0
- package/dist/AiChatPanel-RMQIJDUJ.mjs.gz +0 -0
- package/dist/{Model3DScene-TMNUKCL6.js → Model3DScene-U4B4NZJT.js} +2 -2
- package/dist/Model3DScene-U4B4NZJT.js.br +0 -0
- package/dist/Model3DScene-U4B4NZJT.js.gz +0 -0
- package/dist/{Model3DScene-2VMN3B65.mjs → Model3DScene-WHSHBMR5.mjs} +1 -1
- package/dist/Model3DScene-WHSHBMR5.mjs.br +0 -0
- package/dist/Model3DScene-WHSHBMR5.mjs.gz +0 -0
- package/dist/{SurfaceChart3DScene-KPNP3QD5.js → SurfaceChart3DScene-5S43UBRD.js} +2 -2
- package/dist/SurfaceChart3DScene-5S43UBRD.js.br +0 -0
- package/dist/SurfaceChart3DScene-5S43UBRD.js.gz +0 -0
- package/dist/{SurfaceChart3DScene-GKRDDN2U.mjs → SurfaceChart3DScene-77JP5XH5.mjs} +1 -1
- package/dist/{SurfaceChart3DScene-GKRDDN2U.mjs.br → SurfaceChart3DScene-77JP5XH5.mjs.br} +0 -0
- package/dist/SurfaceChart3DScene-77JP5XH5.mjs.gz +0 -0
- package/dist/{chunk-FY2AFXKP.mjs → chunk-DD54KUDG.mjs} +29 -4
- package/dist/chunk-DD54KUDG.mjs.br +0 -0
- package/dist/chunk-DD54KUDG.mjs.gz +0 -0
- package/dist/{chunk-IJVDNQLG.js → chunk-FAP6OPLL.js} +275 -249
- package/dist/chunk-FAP6OPLL.js.br +0 -0
- package/dist/chunk-FAP6OPLL.js.gz +0 -0
- package/dist/{chunk-TJ55KUWH.mjs → chunk-FV7HEYCX.mjs} +1069 -114
- package/dist/chunk-FV7HEYCX.mjs.br +0 -0
- package/dist/chunk-FV7HEYCX.mjs.gz +0 -0
- package/dist/{chunk-LXTKPSIG.mjs → chunk-HF6L2CTF.mjs} +1 -1
- package/dist/chunk-HF6L2CTF.mjs.br +0 -0
- package/dist/chunk-HF6L2CTF.mjs.gz +0 -0
- package/dist/{chunk-MMK4K3QI.js → chunk-IOVOQ6ZJ.js} +136 -1
- package/dist/chunk-IOVOQ6ZJ.js.br +0 -0
- package/dist/chunk-IOVOQ6ZJ.js.gz +0 -0
- package/dist/{chunk-JWMXOYSX.js → chunk-IXBM3HWH.js} +2289 -1824
- package/dist/chunk-IXBM3HWH.js.br +0 -0
- package/dist/chunk-IXBM3HWH.js.gz +0 -0
- package/dist/{chunk-H74UXL4Q.js → chunk-KDJBWJJH.js} +1102 -113
- package/dist/chunk-KDJBWJJH.js.br +0 -0
- package/dist/chunk-KDJBWJJH.js.gz +0 -0
- package/dist/{chunk-OHPF2HTP.mjs → chunk-NJ4PTG4F.mjs} +40 -28
- package/dist/chunk-NJ4PTG4F.mjs.br +0 -0
- package/dist/chunk-NJ4PTG4F.mjs.gz +0 -0
- package/dist/{chunk-LCG7WBAG.mjs → chunk-PXYZFWDA.mjs} +625 -160
- package/dist/chunk-PXYZFWDA.mjs.br +0 -0
- package/dist/chunk-PXYZFWDA.mjs.gz +0 -0
- package/dist/{chunk-A7HLINZU.js → chunk-QT6BPOZM.js} +361 -349
- package/dist/chunk-QT6BPOZM.js.br +0 -0
- package/dist/chunk-QT6BPOZM.js.gz +0 -0
- package/dist/{chunk-SL3XPERE.mjs → chunk-RHR7GTDX.mjs} +136 -1
- package/dist/chunk-RHR7GTDX.mjs.br +0 -0
- package/dist/chunk-RHR7GTDX.mjs.gz +0 -0
- package/dist/{chunk-SPJR6MPI.js → chunk-X3SFCKAF.js} +3 -3
- package/dist/chunk-X3SFCKAF.js.br +0 -0
- package/dist/chunk-X3SFCKAF.js.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.d.ts +28 -3
- package/dist/index.d.ts.map +1 -1
- 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 +38 -3
- 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/{useViewerBuildingBlocks-CpUwhBD5.d.ts → useViewerBuildingBlocks-YvCYsxa3.d.ts} +21 -5
- package/dist/useViewerBuildingBlocks-YvCYsxa3.d.ts.map +1 -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-35CHYS5N.mjs.br +0 -0
- package/dist/AiChatPanel-35CHYS5N.mjs.gz +0 -0
- package/dist/AiChatPanel-KTMWRUD5.js.br +0 -0
- package/dist/AiChatPanel-KTMWRUD5.js.gz +0 -0
- package/dist/Model3DScene-2VMN3B65.mjs.br +0 -0
- package/dist/Model3DScene-2VMN3B65.mjs.gz +0 -0
- package/dist/Model3DScene-TMNUKCL6.js.br +0 -0
- package/dist/Model3DScene-TMNUKCL6.js.gz +0 -0
- package/dist/SurfaceChart3DScene-GKRDDN2U.mjs.gz +0 -0
- package/dist/SurfaceChart3DScene-KPNP3QD5.js.br +0 -0
- package/dist/SurfaceChart3DScene-KPNP3QD5.js.gz +0 -0
- package/dist/chunk-A7HLINZU.js.br +0 -0
- package/dist/chunk-A7HLINZU.js.gz +0 -0
- package/dist/chunk-FY2AFXKP.mjs.br +0 -0
- package/dist/chunk-FY2AFXKP.mjs.gz +0 -0
- package/dist/chunk-H74UXL4Q.js.br +0 -0
- package/dist/chunk-H74UXL4Q.js.gz +0 -0
- package/dist/chunk-IJVDNQLG.js.br +0 -0
- package/dist/chunk-IJVDNQLG.js.gz +0 -0
- package/dist/chunk-JWMXOYSX.js.br +0 -0
- package/dist/chunk-JWMXOYSX.js.gz +0 -0
- package/dist/chunk-LCG7WBAG.mjs.br +0 -0
- package/dist/chunk-LCG7WBAG.mjs.gz +0 -0
- package/dist/chunk-LXTKPSIG.mjs.br +0 -0
- package/dist/chunk-LXTKPSIG.mjs.gz +0 -0
- package/dist/chunk-MMK4K3QI.js.br +0 -0
- package/dist/chunk-MMK4K3QI.js.gz +0 -0
- package/dist/chunk-OHPF2HTP.mjs.br +0 -0
- package/dist/chunk-OHPF2HTP.mjs.gz +0 -0
- package/dist/chunk-SL3XPERE.mjs.br +0 -0
- package/dist/chunk-SL3XPERE.mjs.gz +0 -0
- package/dist/chunk-SPJR6MPI.js.br +0 -0
- package/dist/chunk-SPJR6MPI.js.gz +0 -0
- package/dist/chunk-TJ55KUWH.mjs.br +0 -0
- package/dist/chunk-TJ55KUWH.mjs.gz +0 -0
- package/dist/useViewerBuildingBlocks-CpUwhBD5.d.ts.map +0 -1
|
@@ -1,9 +1,9 @@
|
|
|
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, 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, themeToCssVars, 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, 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, mobileElapsedSince, isFirstSlide, isLastSlide, formatMobileElapsed, mobileSlideCounter, presenterPaneAdvancesOnClick, 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, SLIDE_VIRTUALIZATION_THRESHOLD, getSlideTransitionAnimations, SLIDE_TRANSITION_KEYFRAMES, presentationInkPath, getShapeAdjustmentHandleDescriptor, PRESET_THEMES, isUrlSafe, sanitizeMathMl, computeHandoutLayout, getPrintableArea, generateNoteLineCount, computeAllNotesPages, getNotesPrintableArea, QUICK_ACCESS_COMMAND_CATALOG, openReadingView, applyReadingViewCommand, createPresentationKeyBuffer, readingViewFitScale, READING_VIEW_STAGE_ATTR, notesSegmentsToSpans, erasePresentationInkAt, movePresenterPointer, appendPresentationInkPoint, 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, getConnectionSites, generateTicks, rulerDragToGuidePosition, getCommentMarkerPosition, 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, TRANSITION_VALID_DIRECTIONS, TRANSITION_ORIENTATION_TYPES, clampTransitionNumber, flattenTagCollections, formatCommentTimestamp, DIRECTIONAL_PRESETS, computeMergeCellRight, computeMergeCellDown, computeSplitCell, addSmartArtNodeAsChild, removeSmartArtNode, clampCropValue, DUOTONE_PRESETS, ARTISTIC_EFFECTS, resolveActionType, ELEMENT_ACTION_TYPE_OPTIONS, toSlideIndex, elementActionToPptxAction, canCommitActionType, TRANSITION_DIR_ARROWS, buildDirectionGrid, updateTagInCollections, deleteTagFromCollections, addTagToCollections, 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, openNativeEyeDropper, toggleText3dExtrusion, BEVEL_PRESETS } from './chunk-
|
|
6
|
-
import
|
|
1
|
+
import { computeFocusTargets, aiChangeAnimationCss, changeGhostStyle, createChatHistoryStore, toRenderableParts } from './chunk-HF6L2CTF.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-NJ4PTG4F.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-DD54KUDG.mjs';
|
|
4
|
+
import { LOCALE_CATALOG, translationsEn } from './chunk-RHR7GTDX.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, 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, 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, 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, isFirstSlide, isLastSlide, formatMobileElapsed, mobileSlideCounter, presenterPaneAdvancesOnClick, 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, 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, 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, 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-FV7HEYCX.mjs';
|
|
6
|
+
import React34, { 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
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, LuScan, LuMonitorOff, 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';
|
|
@@ -523,6 +523,40 @@ function AnimationPresetGallery({
|
|
|
523
523
|
}
|
|
524
524
|
);
|
|
525
525
|
}
|
|
526
|
+
function MotionPathGallery({
|
|
527
|
+
disabled,
|
|
528
|
+
onApplyMotionPath
|
|
529
|
+
}) {
|
|
530
|
+
const { t } = useTranslation();
|
|
531
|
+
return /* @__PURE__ */ jsx(
|
|
532
|
+
"div",
|
|
533
|
+
{
|
|
534
|
+
className: "flex max-h-[62px] items-start gap-2 overflow-y-auto rounded-sm border border-border/60 bg-muted/30 px-1.5 py-1",
|
|
535
|
+
"aria-label": t("pptx.animations.motionPathGalleryAria"),
|
|
536
|
+
children: MOTION_PATH_FAMILIES.map((family) => /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-0.5", children: [
|
|
537
|
+
/* @__PURE__ */ jsx("span", { className: "text-[9px] font-semibold leading-3 text-muted-foreground", children: t(motionPathFamilyLabelKey(family)) }),
|
|
538
|
+
/* @__PURE__ */ jsx("div", { className: "flex max-w-[150px] flex-wrap gap-0.5", children: motionPathPresetsByFamily(family).map((preset) => {
|
|
539
|
+
const label = t(motionPathPresetLabelKey(preset.id));
|
|
540
|
+
return /* @__PURE__ */ jsxs(
|
|
541
|
+
"button",
|
|
542
|
+
{
|
|
543
|
+
type: "button",
|
|
544
|
+
disabled,
|
|
545
|
+
onClick: () => onApplyMotionPath?.(preset.id),
|
|
546
|
+
title: label,
|
|
547
|
+
className: "inline-flex items-center gap-0.5 rounded-sm px-1 py-0.5 text-[9px] leading-3 text-foreground transition-colors hover:bg-accent disabled:opacity-35",
|
|
548
|
+
children: [
|
|
549
|
+
/* @__PURE__ */ jsx(LuMoveRight, { className: "h-2.5 w-2.5 text-sky-500", "aria-hidden": "true" }),
|
|
550
|
+
/* @__PURE__ */ jsx("span", { className: "whitespace-nowrap", children: label })
|
|
551
|
+
]
|
|
552
|
+
},
|
|
553
|
+
preset.id
|
|
554
|
+
);
|
|
555
|
+
}) })
|
|
556
|
+
] }, family))
|
|
557
|
+
}
|
|
558
|
+
);
|
|
559
|
+
}
|
|
526
560
|
function RibbonGroup({
|
|
527
561
|
label,
|
|
528
562
|
children,
|
|
@@ -550,7 +584,8 @@ function RibbonCommand({
|
|
|
550
584
|
disabled,
|
|
551
585
|
active,
|
|
552
586
|
compact = false,
|
|
553
|
-
title
|
|
587
|
+
title,
|
|
588
|
+
pressed
|
|
554
589
|
}) {
|
|
555
590
|
return /* @__PURE__ */ jsxs(
|
|
556
591
|
"button",
|
|
@@ -559,6 +594,7 @@ function RibbonCommand({
|
|
|
559
594
|
onClick,
|
|
560
595
|
disabled,
|
|
561
596
|
title: title ?? label,
|
|
597
|
+
"aria-pressed": pressed,
|
|
562
598
|
className: cn(
|
|
563
599
|
"inline-flex rounded-sm text-foreground transition-colors hover:bg-accent disabled:cursor-not-allowed disabled:opacity-35",
|
|
564
600
|
active && "bg-primary/15 text-primary ring-1 ring-primary/35",
|
|
@@ -648,6 +684,13 @@ function AnimationsSection(p) {
|
|
|
648
684
|
children: /* @__PURE__ */ jsx(AnimationPresetGallery, { disabled, onAddAnimation: p.onAddAnimation })
|
|
649
685
|
}
|
|
650
686
|
),
|
|
687
|
+
/* @__PURE__ */ jsx(RibbonGroup, { label: t("pptx.animation.motionPath"), className: "max-w-[420px] overflow-hidden", children: /* @__PURE__ */ jsx(
|
|
688
|
+
MotionPathGallery,
|
|
689
|
+
{
|
|
690
|
+
disabled,
|
|
691
|
+
onApplyMotionPath: (presetId) => p.onAddAnimation?.(presetId, "motionPath")
|
|
692
|
+
}
|
|
693
|
+
) }),
|
|
651
694
|
/* @__PURE__ */ jsxs(RibbonGroup, { label: t("pptx.animations.advanced", { defaultValue: "Advanced Animation" }), children: [
|
|
652
695
|
/* @__PURE__ */ jsx(
|
|
653
696
|
RibbonCommand,
|
|
@@ -663,7 +706,7 @@ function AnimationsSection(p) {
|
|
|
663
706
|
{
|
|
664
707
|
label: t("pptx.animations.pathAnimation", { defaultValue: "Path Animation" }),
|
|
665
708
|
icon: /* @__PURE__ */ jsx(LuMoveRight, {}),
|
|
666
|
-
onClick: () => p.onAddAnimation?.(
|
|
709
|
+
onClick: () => p.onAddAnimation?.(DEFAULT_MOTION_PATH_PRESET_ID, "motionPath"),
|
|
667
710
|
disabled
|
|
668
711
|
}
|
|
669
712
|
),
|
|
@@ -1203,11 +1246,11 @@ var TRANSITION_PRESETS = [
|
|
|
1203
1246
|
];
|
|
1204
1247
|
function TransitionsSection(p) {
|
|
1205
1248
|
const { t } = useTranslation();
|
|
1206
|
-
const [selected, setSelected] =
|
|
1207
|
-
const [duration, setDuration] =
|
|
1208
|
-
const [advanceOnClick, setAdvanceOnClick] =
|
|
1209
|
-
const [advanceAfter, setAdvanceAfter] =
|
|
1210
|
-
const [advanceAfterSeconds, setAdvanceAfterSeconds] =
|
|
1249
|
+
const [selected, setSelected] = React34.useState("none");
|
|
1250
|
+
const [duration, setDuration] = React34.useState("00.50");
|
|
1251
|
+
const [advanceOnClick, setAdvanceOnClick] = React34.useState(true);
|
|
1252
|
+
const [advanceAfter, setAdvanceAfter] = React34.useState(false);
|
|
1253
|
+
const [advanceAfterSeconds, setAdvanceAfterSeconds] = React34.useState("00:00.00");
|
|
1211
1254
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
1212
1255
|
/* @__PURE__ */ jsxs("button", { type: "button", className: pill, title: t("pptx.ribbon.previewTransition"), children: [
|
|
1213
1256
|
/* @__PURE__ */ jsx(LuPlay, { className: ics }),
|
|
@@ -1409,7 +1452,7 @@ function AccountPage() {
|
|
|
1409
1452
|
return void 0;
|
|
1410
1453
|
});
|
|
1411
1454
|
};
|
|
1412
|
-
const version = "2.
|
|
1455
|
+
const version = "2.11.0" ;
|
|
1413
1456
|
return /* @__PURE__ */ jsxs("div", { className: "mt-8 max-w-[700px] space-y-6", children: [
|
|
1414
1457
|
/* @__PURE__ */ jsxs("section", { className: cardClass, children: [
|
|
1415
1458
|
/* @__PURE__ */ jsxs("h2", { className: "flex items-center gap-2 text-sm font-semibold", children: [
|
|
@@ -3012,7 +3055,9 @@ function SlideShowSection(p) {
|
|
|
3012
3055
|
{
|
|
3013
3056
|
label: t("pptx.slideShow.hideSlide", { defaultValue: "Hide Slide" }),
|
|
3014
3057
|
icon: /* @__PURE__ */ jsx(LuEyeOff, {}),
|
|
3015
|
-
|
|
3058
|
+
onClick: p.onToggleHideSlide,
|
|
3059
|
+
active: p.activeSlideHidden,
|
|
3060
|
+
pressed: p.activeSlideHidden
|
|
3016
3061
|
}
|
|
3017
3062
|
),
|
|
3018
3063
|
/* @__PURE__ */ jsx(
|
|
@@ -3891,6 +3936,15 @@ function ViewSection(p) {
|
|
|
3891
3936
|
title: t("pptx.view.slideSorterTooltip")
|
|
3892
3937
|
}
|
|
3893
3938
|
),
|
|
3939
|
+
/* @__PURE__ */ jsx(
|
|
3940
|
+
RibbonCommand,
|
|
3941
|
+
{
|
|
3942
|
+
label: t("pptx.view.outlineView"),
|
|
3943
|
+
icon: /* @__PURE__ */ jsx(LuIndentIncrease, {}),
|
|
3944
|
+
onClick: p.onOpenOutlineView,
|
|
3945
|
+
title: t("pptx.view.outlineViewTooltip")
|
|
3946
|
+
}
|
|
3947
|
+
),
|
|
3894
3948
|
/* @__PURE__ */ jsx(
|
|
3895
3949
|
RibbonCommand,
|
|
3896
3950
|
{
|
|
@@ -4324,6 +4378,9 @@ function MobileSectionBody({
|
|
|
4324
4378
|
}),
|
|
4325
4379
|
onOpenSetUpSlideShow: p.onOpenSetUpSlideShow ?? (() => {
|
|
4326
4380
|
}),
|
|
4381
|
+
onToggleHideSlide: p.onToggleHideSlide ?? (() => {
|
|
4382
|
+
}),
|
|
4383
|
+
activeSlideHidden: p.activeSlideHidden ?? false,
|
|
4327
4384
|
onOpenBroadcastDialog: p.onOpenBroadcastDialog ?? (() => {
|
|
4328
4385
|
}),
|
|
4329
4386
|
onToggleSubtitles: p.onToggleSubtitles ?? (() => {
|
|
@@ -5568,6 +5625,9 @@ function Toolbar(p) {
|
|
|
5568
5625
|
}),
|
|
5569
5626
|
onOpenSetUpSlideShow: p.onOpenSetUpSlideShow ?? (() => {
|
|
5570
5627
|
}),
|
|
5628
|
+
onToggleHideSlide: p.onToggleHideSlide ?? (() => {
|
|
5629
|
+
}),
|
|
5630
|
+
activeSlideHidden: p.activeSlideHidden ?? false,
|
|
5571
5631
|
onOpenBroadcastDialog: p.onOpenBroadcastDialog ?? (() => {
|
|
5572
5632
|
}),
|
|
5573
5633
|
onToggleSubtitles: p.onToggleSubtitles ?? (() => {
|
|
@@ -5627,6 +5687,7 @@ function Toolbar(p) {
|
|
|
5627
5687
|
onToggleEyedropper: p.onToggleEyedropper,
|
|
5628
5688
|
onToggleSlideSorter: p.onToggleSlideSorter,
|
|
5629
5689
|
onOpenReadingView: p.onOpenReadingView,
|
|
5690
|
+
onOpenOutlineView: p.onOpenOutlineView,
|
|
5630
5691
|
onZoomToFit: p.onZoomToFit
|
|
5631
5692
|
}
|
|
5632
5693
|
),
|
|
@@ -5930,6 +5991,127 @@ function GridOverlay({ canvasSize, gridSpacingPx = GRID_SIZE, visible }) {
|
|
|
5930
5991
|
}
|
|
5931
5992
|
);
|
|
5932
5993
|
}
|
|
5994
|
+
function MotionPathOverlay({
|
|
5995
|
+
element,
|
|
5996
|
+
path,
|
|
5997
|
+
canvasSize,
|
|
5998
|
+
scale,
|
|
5999
|
+
canEdit,
|
|
6000
|
+
onChangePath
|
|
6001
|
+
}) {
|
|
6002
|
+
const { t } = useTranslation();
|
|
6003
|
+
const dragRef = useRef(null);
|
|
6004
|
+
const frame = {
|
|
6005
|
+
originX: element.x + element.width / 2,
|
|
6006
|
+
originY: element.y + element.height / 2,
|
|
6007
|
+
slideWidth: canvasSize.width,
|
|
6008
|
+
slideHeight: canvasSize.height
|
|
6009
|
+
};
|
|
6010
|
+
const d = motionPathToSvgD(path, frame);
|
|
6011
|
+
const end = motionPathEndPixel(path, frame);
|
|
6012
|
+
const editable = canEdit && Boolean(onChangePath) && isEditableMotionPath(path);
|
|
6013
|
+
const handlePointerDown = useCallback(
|
|
6014
|
+
(event) => {
|
|
6015
|
+
if (!editable) {
|
|
6016
|
+
return;
|
|
6017
|
+
}
|
|
6018
|
+
event.stopPropagation();
|
|
6019
|
+
event.preventDefault();
|
|
6020
|
+
event.currentTarget.setPointerCapture(event.pointerId);
|
|
6021
|
+
dragRef.current = {
|
|
6022
|
+
pointerId: event.pointerId,
|
|
6023
|
+
startX: event.clientX,
|
|
6024
|
+
startY: event.clientY
|
|
6025
|
+
};
|
|
6026
|
+
},
|
|
6027
|
+
[editable]
|
|
6028
|
+
);
|
|
6029
|
+
const handlePointerMove = useCallback(
|
|
6030
|
+
(event) => {
|
|
6031
|
+
const drag = dragRef.current;
|
|
6032
|
+
if (!drag || drag.pointerId !== event.pointerId || !onChangePath) {
|
|
6033
|
+
return;
|
|
6034
|
+
}
|
|
6035
|
+
event.stopPropagation();
|
|
6036
|
+
const dxPx = (event.clientX - drag.startX) / (scale || 1);
|
|
6037
|
+
const dyPx = (event.clientY - drag.startY) / (scale || 1);
|
|
6038
|
+
const nextX = (end.x + dxPx - frame.originX) / frame.slideWidth;
|
|
6039
|
+
const nextY = (end.y + dyPx - frame.originY) / frame.slideHeight;
|
|
6040
|
+
const next = setMotionPathEnd(path, nextX, nextY);
|
|
6041
|
+
if (next !== path) {
|
|
6042
|
+
dragRef.current = {
|
|
6043
|
+
pointerId: event.pointerId,
|
|
6044
|
+
startX: event.clientX,
|
|
6045
|
+
startY: event.clientY
|
|
6046
|
+
};
|
|
6047
|
+
onChangePath(next);
|
|
6048
|
+
}
|
|
6049
|
+
},
|
|
6050
|
+
[
|
|
6051
|
+
end.x,
|
|
6052
|
+
end.y,
|
|
6053
|
+
frame.originX,
|
|
6054
|
+
frame.originY,
|
|
6055
|
+
frame.slideWidth,
|
|
6056
|
+
frame.slideHeight,
|
|
6057
|
+
onChangePath,
|
|
6058
|
+
path,
|
|
6059
|
+
scale
|
|
6060
|
+
]
|
|
6061
|
+
);
|
|
6062
|
+
const handlePointerUp = useCallback((event) => {
|
|
6063
|
+
if (dragRef.current?.pointerId === event.pointerId) {
|
|
6064
|
+
event.currentTarget.releasePointerCapture(event.pointerId);
|
|
6065
|
+
dragRef.current = null;
|
|
6066
|
+
}
|
|
6067
|
+
}, []);
|
|
6068
|
+
if (!d) {
|
|
6069
|
+
return null;
|
|
6070
|
+
}
|
|
6071
|
+
return /* @__PURE__ */ jsxs(
|
|
6072
|
+
"svg",
|
|
6073
|
+
{
|
|
6074
|
+
className: "pointer-events-none absolute left-0 top-0 z-[45]",
|
|
6075
|
+
width: canvasSize.width,
|
|
6076
|
+
height: canvasSize.height,
|
|
6077
|
+
role: "img",
|
|
6078
|
+
"aria-label": t("pptx.animation.motionPath.overlay"),
|
|
6079
|
+
"data-pptx-motion-path-overlay": "true",
|
|
6080
|
+
children: [
|
|
6081
|
+
/* @__PURE__ */ jsx(
|
|
6082
|
+
"path",
|
|
6083
|
+
{
|
|
6084
|
+
d,
|
|
6085
|
+
fill: "none",
|
|
6086
|
+
stroke: "#0ea5e9",
|
|
6087
|
+
strokeWidth: 2,
|
|
6088
|
+
strokeDasharray: "6 4",
|
|
6089
|
+
vectorEffect: "non-scaling-stroke"
|
|
6090
|
+
}
|
|
6091
|
+
),
|
|
6092
|
+
/* @__PURE__ */ jsx("circle", { cx: frame.originX, cy: frame.originY, r: 5, fill: "#0ea5e9", opacity: 0.55 }),
|
|
6093
|
+
/* @__PURE__ */ jsx(
|
|
6094
|
+
"circle",
|
|
6095
|
+
{
|
|
6096
|
+
cx: end.x,
|
|
6097
|
+
cy: end.y,
|
|
6098
|
+
r: 7,
|
|
6099
|
+
fill: "#ffffff",
|
|
6100
|
+
stroke: "#0ea5e9",
|
|
6101
|
+
strokeWidth: 2,
|
|
6102
|
+
className: editable ? "pointer-events-auto cursor-move" : "",
|
|
6103
|
+
"aria-label": t("pptx.animation.motionPath.endHandle"),
|
|
6104
|
+
"data-pptx-motion-path-handle": "end",
|
|
6105
|
+
onPointerDown: handlePointerDown,
|
|
6106
|
+
onPointerMove: handlePointerMove,
|
|
6107
|
+
onPointerUp: handlePointerUp,
|
|
6108
|
+
onPointerCancel: handlePointerUp
|
|
6109
|
+
}
|
|
6110
|
+
)
|
|
6111
|
+
]
|
|
6112
|
+
}
|
|
6113
|
+
);
|
|
6114
|
+
}
|
|
5933
6115
|
function HorizontalRulerView({ ticks, widthPx, highlight }) {
|
|
5934
6116
|
return /* @__PURE__ */ jsxs(
|
|
5935
6117
|
"svg",
|
|
@@ -5993,7 +6175,7 @@ function HorizontalRulerView({ ticks, widthPx, highlight }) {
|
|
|
5993
6175
|
}
|
|
5994
6176
|
);
|
|
5995
6177
|
}
|
|
5996
|
-
var HorizontalRuler =
|
|
6178
|
+
var HorizontalRuler = React34.memo(HorizontalRulerView);
|
|
5997
6179
|
HorizontalRuler.displayName = "HorizontalRuler";
|
|
5998
6180
|
function VerticalRulerView({ ticks, heightPx, highlight }) {
|
|
5999
6181
|
return /* @__PURE__ */ jsxs(
|
|
@@ -6065,7 +6247,7 @@ function VerticalRulerView({ ticks, heightPx, highlight }) {
|
|
|
6065
6247
|
}
|
|
6066
6248
|
);
|
|
6067
6249
|
}
|
|
6068
|
-
var VerticalRuler =
|
|
6250
|
+
var VerticalRuler = React34.memo(VerticalRulerView);
|
|
6069
6251
|
VerticalRuler.displayName = "VerticalRuler";
|
|
6070
6252
|
function Ruler({
|
|
6071
6253
|
canvasSize,
|
|
@@ -7017,7 +7199,7 @@ function ResizeHandles({
|
|
|
7017
7199
|
) : null
|
|
7018
7200
|
] });
|
|
7019
7201
|
}
|
|
7020
|
-
var ConnectorElementRenderer =
|
|
7202
|
+
var ConnectorElementRenderer = React34.memo(
|
|
7021
7203
|
({
|
|
7022
7204
|
el,
|
|
7023
7205
|
isSelected,
|
|
@@ -8523,10 +8705,10 @@ function InlineTextEditor({
|
|
|
8523
8705
|
function FailedToLoad() {
|
|
8524
8706
|
return null;
|
|
8525
8707
|
}
|
|
8526
|
-
var LazyModel3DScene =
|
|
8708
|
+
var LazyModel3DScene = React34.lazy(
|
|
8527
8709
|
async () => {
|
|
8528
8710
|
try {
|
|
8529
|
-
return await import('./Model3DScene-
|
|
8711
|
+
return await import('./Model3DScene-WHSHBMR5.mjs');
|
|
8530
8712
|
} catch {
|
|
8531
8713
|
return { default: FailedToLoad };
|
|
8532
8714
|
}
|
|
@@ -8609,7 +8791,7 @@ function PosterFallback({
|
|
|
8609
8791
|
}
|
|
8610
8792
|
);
|
|
8611
8793
|
}
|
|
8612
|
-
var Model3DErrorBoundary = class extends
|
|
8794
|
+
var Model3DErrorBoundary = class extends React34.Component {
|
|
8613
8795
|
constructor(props) {
|
|
8614
8796
|
super(props);
|
|
8615
8797
|
this.state = { hasError: false };
|
|
@@ -8800,10 +8982,10 @@ function SmartArtInlineNodeEditor({
|
|
|
8800
8982
|
onCancel
|
|
8801
8983
|
}) {
|
|
8802
8984
|
const { t } = useTranslation();
|
|
8803
|
-
const ref =
|
|
8804
|
-
const [value, setValue] =
|
|
8805
|
-
const settled =
|
|
8806
|
-
|
|
8985
|
+
const ref = React34.useRef(null);
|
|
8986
|
+
const [value, setValue] = React34.useState(initialText);
|
|
8987
|
+
const settled = React34.useRef(false);
|
|
8988
|
+
React34.useEffect(() => {
|
|
8807
8989
|
const el = ref.current;
|
|
8808
8990
|
if (el) {
|
|
8809
8991
|
el.focus();
|
|
@@ -8895,16 +9077,16 @@ function findNodeIdFromEvent(target) {
|
|
|
8895
9077
|
return null;
|
|
8896
9078
|
}
|
|
8897
9079
|
function useSmartArtHoverState(containerRef) {
|
|
8898
|
-
const [hoveredNodeId, setHoveredNodeId] =
|
|
8899
|
-
const [hoveredNodeRect, setHoveredNodeRect] =
|
|
8900
|
-
const hideTimeoutRef =
|
|
8901
|
-
const cancelPendingHide =
|
|
9080
|
+
const [hoveredNodeId, setHoveredNodeId] = React34.useState(null);
|
|
9081
|
+
const [hoveredNodeRect, setHoveredNodeRect] = React34.useState(null);
|
|
9082
|
+
const hideTimeoutRef = React34.useRef(null);
|
|
9083
|
+
const cancelPendingHide = React34.useCallback(() => {
|
|
8902
9084
|
if (hideTimeoutRef.current !== null) {
|
|
8903
9085
|
window.clearTimeout(hideTimeoutRef.current);
|
|
8904
9086
|
hideTimeoutRef.current = null;
|
|
8905
9087
|
}
|
|
8906
9088
|
}, []);
|
|
8907
|
-
const handleMouseMove =
|
|
9089
|
+
const handleMouseMove = React34.useCallback(
|
|
8908
9090
|
(e, ignoreRef) => {
|
|
8909
9091
|
const nodeEl = findNodeIdFromEvent(e.target);
|
|
8910
9092
|
const container = containerRef.current;
|
|
@@ -8932,12 +9114,12 @@ function useSmartArtHoverState(containerRef) {
|
|
|
8932
9114
|
},
|
|
8933
9115
|
[containerRef, cancelPendingHide]
|
|
8934
9116
|
);
|
|
8935
|
-
const clearHover =
|
|
9117
|
+
const clearHover = React34.useCallback(() => {
|
|
8936
9118
|
cancelPendingHide();
|
|
8937
9119
|
setHoveredNodeId(null);
|
|
8938
9120
|
setHoveredNodeRect(null);
|
|
8939
9121
|
}, [cancelPendingHide]);
|
|
8940
|
-
|
|
9122
|
+
React34.useEffect(() => cancelPendingHide, [cancelPendingHide]);
|
|
8941
9123
|
return { hoveredNodeId, hoveredNodeRect, handleMouseMove, clearHover };
|
|
8942
9124
|
}
|
|
8943
9125
|
var EDITOR_PADDING = 4;
|
|
@@ -8952,11 +9134,11 @@ function SmartArtEditableLayer({
|
|
|
8952
9134
|
onChangeNodeStyle,
|
|
8953
9135
|
children
|
|
8954
9136
|
}) {
|
|
8955
|
-
const containerRef =
|
|
8956
|
-
const styleBarRef =
|
|
8957
|
-
const [edit, setEdit] =
|
|
9137
|
+
const containerRef = React34.useRef(null);
|
|
9138
|
+
const styleBarRef = React34.useRef(null);
|
|
9139
|
+
const [edit, setEdit] = React34.useState(null);
|
|
8958
9140
|
const { hoveredNodeId, hoveredNodeRect, handleMouseMove, clearHover } = useSmartArtHoverState(containerRef);
|
|
8959
|
-
const openEditor =
|
|
9141
|
+
const openEditor = React34.useCallback(
|
|
8960
9142
|
(target) => {
|
|
8961
9143
|
const nodeEl = findNodeIdFromEvent(target);
|
|
8962
9144
|
const container = containerRef.current;
|
|
@@ -10496,11 +10678,11 @@ function arePropsEqual(prev, next) {
|
|
|
10496
10678
|
}
|
|
10497
10679
|
return true;
|
|
10498
10680
|
}
|
|
10499
|
-
var SmartArtRenderer =
|
|
10681
|
+
var SmartArtRenderer = React34.memo(SmartArtRendererImpl, arePropsEqual);
|
|
10500
10682
|
function FailedToLoad2() {
|
|
10501
10683
|
return null;
|
|
10502
10684
|
}
|
|
10503
|
-
var LazySmartArt3DScene =
|
|
10685
|
+
var LazySmartArt3DScene = React34.lazy(
|
|
10504
10686
|
async () => {
|
|
10505
10687
|
try {
|
|
10506
10688
|
return await import('./SmartArt3DScene-XCFVGCXE.mjs');
|
|
@@ -10509,7 +10691,7 @@ var LazySmartArt3DScene = React33.lazy(
|
|
|
10509
10691
|
}
|
|
10510
10692
|
}
|
|
10511
10693
|
);
|
|
10512
|
-
var SceneErrorBoundary = class extends
|
|
10694
|
+
var SceneErrorBoundary = class extends React34.Component {
|
|
10513
10695
|
constructor(props) {
|
|
10514
10696
|
super(props);
|
|
10515
10697
|
this.state = { hasError: false };
|
|
@@ -11268,7 +11450,7 @@ function renderBody(options) {
|
|
|
11268
11450
|
}
|
|
11269
11451
|
return renderTextElementBody(options);
|
|
11270
11452
|
}
|
|
11271
|
-
var Extrusion3DOverlay =
|
|
11453
|
+
var Extrusion3DOverlay = React34.memo(({ data }) => {
|
|
11272
11454
|
if (!data.hasExtrusion || data.panels.length === 0) {
|
|
11273
11455
|
return null;
|
|
11274
11456
|
}
|
|
@@ -11461,9 +11643,9 @@ function StaticElementRendererImpl({
|
|
|
11461
11643
|
}
|
|
11462
11644
|
);
|
|
11463
11645
|
}
|
|
11464
|
-
var StaticElementRenderer =
|
|
11646
|
+
var StaticElementRenderer = React34.memo(StaticElementRendererImpl);
|
|
11465
11647
|
StaticElementRenderer.displayName = "StaticElementRenderer";
|
|
11466
|
-
var ElementRenderer =
|
|
11648
|
+
var ElementRenderer = React34.memo(
|
|
11467
11649
|
// oxlint-disable-next-line prefer-arrow-callback -- named fn gives the memo component its displayName
|
|
11468
11650
|
function ElementRendererInner({
|
|
11469
11651
|
element: el,
|
|
@@ -11864,6 +12046,7 @@ function SlideCanvas({
|
|
|
11864
12046
|
onCreateGuideFromRuler,
|
|
11865
12047
|
connectorCreationMode = false,
|
|
11866
12048
|
onCreateConnector,
|
|
12049
|
+
onUpdateSlideAnimations,
|
|
11867
12050
|
allSlides,
|
|
11868
12051
|
onZoomClick,
|
|
11869
12052
|
sourceSlideIndex,
|
|
@@ -11927,6 +12110,18 @@ function SlideCanvas({
|
|
|
11927
12110
|
zoom,
|
|
11928
12111
|
onMoveGuide
|
|
11929
12112
|
});
|
|
12113
|
+
const selectedMotionPath = selectedElement ? motionPathFor(activeSlide?.animations ?? [], selectedElement.id) : void 0;
|
|
12114
|
+
const handleMotionPathChange = useCallback(
|
|
12115
|
+
(path) => {
|
|
12116
|
+
if (!selectedElement || !onUpdateSlideAnimations) {
|
|
12117
|
+
return;
|
|
12118
|
+
}
|
|
12119
|
+
onUpdateSlideAnimations(
|
|
12120
|
+
setMotionPath(activeSlide?.animations ?? [], selectedElement.id, path)
|
|
12121
|
+
);
|
|
12122
|
+
},
|
|
12123
|
+
[activeSlide?.animations, onUpdateSlideAnimations, selectedElement]
|
|
12124
|
+
);
|
|
11930
12125
|
const {
|
|
11931
12126
|
connectorDragState,
|
|
11932
12127
|
handleConnectionSiteDown,
|
|
@@ -11996,6 +12191,10 @@ function SlideCanvas({
|
|
|
11996
12191
|
height: canvasSize.height,
|
|
11997
12192
|
transform: `scale(${zoom.editorScale})`,
|
|
11998
12193
|
transformOrigin: "top left",
|
|
12194
|
+
// Motion-path keyframes translate by a fraction of the SLIDE, so
|
|
12195
|
+
// the stage publishes its own size for those calc() offsets.
|
|
12196
|
+
["--pptx-slide-w"]: `${canvasSize.width}px`,
|
|
12197
|
+
["--pptx-slide-h"]: `${canvasSize.height}px`,
|
|
11999
12198
|
marginTop: rulerOffset,
|
|
12000
12199
|
marginLeft: rulerOffset,
|
|
12001
12200
|
// In edit/master mode the stage must own all touch gestures so
|
|
@@ -12133,6 +12332,17 @@ function SlideCanvas({
|
|
|
12133
12332
|
onConnectorDragEnd: handleConnectorDragEnd
|
|
12134
12333
|
}
|
|
12135
12334
|
),
|
|
12335
|
+
isEditableCanvas && selectedElement && selectedMotionPath && /* @__PURE__ */ jsx(
|
|
12336
|
+
MotionPathOverlay,
|
|
12337
|
+
{
|
|
12338
|
+
element: selectedElement,
|
|
12339
|
+
path: selectedMotionPath,
|
|
12340
|
+
canvasSize,
|
|
12341
|
+
scale: zoom.editorScale,
|
|
12342
|
+
canEdit,
|
|
12343
|
+
onChangePath: handleMotionPathChange
|
|
12344
|
+
}
|
|
12345
|
+
),
|
|
12136
12346
|
isDrawing && /* @__PURE__ */ jsx(
|
|
12137
12347
|
DrawingOverlaySvg,
|
|
12138
12348
|
{
|
|
@@ -12705,7 +12915,7 @@ function arePropsEqual2(prev, next) {
|
|
|
12705
12915
|
}
|
|
12706
12916
|
return true;
|
|
12707
12917
|
}
|
|
12708
|
-
var SlideThumbnail =
|
|
12918
|
+
var SlideThumbnail = React34.memo(SlideThumbnailImpl, arePropsEqual2);
|
|
12709
12919
|
|
|
12710
12920
|
// src/viewer/components/context-menu-dispatch.ts
|
|
12711
12921
|
function tableCell(props) {
|
|
@@ -13254,7 +13464,7 @@ function LazyThumbnailInner({
|
|
|
13254
13464
|
}
|
|
13255
13465
|
) });
|
|
13256
13466
|
}
|
|
13257
|
-
var LazyThumbnail =
|
|
13467
|
+
var LazyThumbnail = React34.memo(LazyThumbnailInner);
|
|
13258
13468
|
|
|
13259
13469
|
// src/viewer/components/slides-pane/utils.ts
|
|
13260
13470
|
function formatTimingMs(ms) {
|
|
@@ -13400,7 +13610,7 @@ function SlideItemInner({
|
|
|
13400
13610
|
}
|
|
13401
13611
|
);
|
|
13402
13612
|
}
|
|
13403
|
-
var SlideItem =
|
|
13613
|
+
var SlideItem = React34.memo(SlideItemInner);
|
|
13404
13614
|
function useSlidePaneCallbacks(onMoveSlide, onRenameSection) {
|
|
13405
13615
|
const [collapsedSections, setCollapsedSections] = useState({});
|
|
13406
13616
|
const [renamingSectionId, setRenamingSectionId] = useState(null);
|
|
@@ -14669,7 +14879,7 @@ function arePropsEqual3(prev, next) {
|
|
|
14669
14879
|
}
|
|
14670
14880
|
return true;
|
|
14671
14881
|
}
|
|
14672
|
-
var SlideCard =
|
|
14882
|
+
var SlideCard = React34.memo(SlideCardImpl, arePropsEqual3);
|
|
14673
14883
|
function SorterContextMenu({
|
|
14674
14884
|
x,
|
|
14675
14885
|
y,
|
|
@@ -15301,6 +15511,130 @@ function SlideSorterOverlay({
|
|
|
15301
15511
|
}
|
|
15302
15512
|
);
|
|
15303
15513
|
}
|
|
15514
|
+
function useOutlineView(input) {
|
|
15515
|
+
const { slides, canvasSize, canEdit, setSlides, setActiveSlideIndex, bumpHistory } = input;
|
|
15516
|
+
const rows = useMemo(() => buildOutline(slides), [slides]);
|
|
15517
|
+
const containerRef = useRef(null);
|
|
15518
|
+
const pendingFocusRef = useRef(null);
|
|
15519
|
+
const run = useCallback(
|
|
15520
|
+
(edit) => {
|
|
15521
|
+
if (!canEdit) {
|
|
15522
|
+
return;
|
|
15523
|
+
}
|
|
15524
|
+
const result = applyOutlineEdit(slides, edit, { canvas: canvasSize });
|
|
15525
|
+
if (!result.changed) {
|
|
15526
|
+
return;
|
|
15527
|
+
}
|
|
15528
|
+
setSlides(result.slides);
|
|
15529
|
+
setActiveSlideIndex(result.activeSlideIndex);
|
|
15530
|
+
bumpHistory();
|
|
15531
|
+
pendingFocusRef.current = result.focusKey;
|
|
15532
|
+
},
|
|
15533
|
+
[bumpHistory, canEdit, canvasSize, setActiveSlideIndex, setSlides, slides]
|
|
15534
|
+
);
|
|
15535
|
+
const onRowKeyDown = useCallback(
|
|
15536
|
+
(event, rowKey) => {
|
|
15537
|
+
const { edit, preventDefault } = mapOutlineKey(event, rowKey);
|
|
15538
|
+
if (preventDefault) {
|
|
15539
|
+
event.preventDefault();
|
|
15540
|
+
}
|
|
15541
|
+
if (edit) {
|
|
15542
|
+
run(edit);
|
|
15543
|
+
}
|
|
15544
|
+
},
|
|
15545
|
+
[run]
|
|
15546
|
+
);
|
|
15547
|
+
useEffect(() => {
|
|
15548
|
+
const key = pendingFocusRef.current;
|
|
15549
|
+
if (!key) {
|
|
15550
|
+
return;
|
|
15551
|
+
}
|
|
15552
|
+
pendingFocusRef.current = null;
|
|
15553
|
+
const selector = `[${OUTLINE_ROW_ATTR}="${CSS.escape(key)}"]`;
|
|
15554
|
+
const target = containerRef.current?.querySelector(selector);
|
|
15555
|
+
if (target && document.activeElement !== target) {
|
|
15556
|
+
target.focus();
|
|
15557
|
+
target.setSelectionRange(target.value.length, target.value.length);
|
|
15558
|
+
}
|
|
15559
|
+
}, [rows]);
|
|
15560
|
+
return { rows, containerRef, run, onRowKeyDown };
|
|
15561
|
+
}
|
|
15562
|
+
var INDENT_PX = 22;
|
|
15563
|
+
function OutlineViewOverlay({
|
|
15564
|
+
slides,
|
|
15565
|
+
canvasSize,
|
|
15566
|
+
canEdit,
|
|
15567
|
+
setSlides,
|
|
15568
|
+
setActiveSlideIndex,
|
|
15569
|
+
bumpHistory,
|
|
15570
|
+
onClose
|
|
15571
|
+
}) {
|
|
15572
|
+
const { t } = useTranslation();
|
|
15573
|
+
const { rows, containerRef, run, onRowKeyDown } = useOutlineView({
|
|
15574
|
+
slides,
|
|
15575
|
+
canvasSize,
|
|
15576
|
+
canEdit,
|
|
15577
|
+
setSlides,
|
|
15578
|
+
setActiveSlideIndex,
|
|
15579
|
+
bumpHistory
|
|
15580
|
+
});
|
|
15581
|
+
return /* @__PURE__ */ jsxs(
|
|
15582
|
+
"div",
|
|
15583
|
+
{
|
|
15584
|
+
...{ [OUTLINE_VIEW_ATTR]: "true" },
|
|
15585
|
+
role: "region",
|
|
15586
|
+
"aria-label": t("pptx.view.outlineView"),
|
|
15587
|
+
className: "fixed inset-0 z-[1300] flex flex-col bg-neutral-900 text-neutral-100",
|
|
15588
|
+
children: [
|
|
15589
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3 border-b border-white/10 px-4 py-2", children: [
|
|
15590
|
+
/* @__PURE__ */ jsx("span", { className: "text-sm font-semibold", children: t("pptx.view.outlineView") }),
|
|
15591
|
+
/* @__PURE__ */ jsx("span", { className: "flex-1 truncate text-[11px] text-white/50", children: t("pptx.outline.hint") }),
|
|
15592
|
+
/* @__PURE__ */ jsx(
|
|
15593
|
+
"button",
|
|
15594
|
+
{
|
|
15595
|
+
type: "button",
|
|
15596
|
+
className: "inline-flex h-8 w-8 items-center justify-center rounded text-white/80 transition-colors hover:bg-white/15 hover:text-white",
|
|
15597
|
+
"aria-label": t("pptx.statusBar.normalView"),
|
|
15598
|
+
title: t("pptx.statusBar.normalView"),
|
|
15599
|
+
onClick: onClose,
|
|
15600
|
+
children: /* @__PURE__ */ jsx(LuX, {})
|
|
15601
|
+
}
|
|
15602
|
+
)
|
|
15603
|
+
] }),
|
|
15604
|
+
/* @__PURE__ */ jsx("div", { ref: containerRef, className: "min-h-0 flex-1 overflow-auto px-4 py-3", children: rows.map((row) => /* @__PURE__ */ jsxs(
|
|
15605
|
+
"div",
|
|
15606
|
+
{
|
|
15607
|
+
className: "flex items-center gap-2 py-0.5",
|
|
15608
|
+
style: { paddingLeft: row.level * INDENT_PX },
|
|
15609
|
+
children: [
|
|
15610
|
+
/* @__PURE__ */ jsx("span", { className: "w-6 shrink-0 text-right text-[10px] tabular-nums text-white/40", children: row.kind === "title" ? row.slideIndex + 1 : "" }),
|
|
15611
|
+
/* @__PURE__ */ jsx(
|
|
15612
|
+
"input",
|
|
15613
|
+
{
|
|
15614
|
+
...{
|
|
15615
|
+
[OUTLINE_ROW_ATTR]: row.key,
|
|
15616
|
+
[OUTLINE_SLIDE_ATTR]: String(row.slideIndex + 1),
|
|
15617
|
+
[OUTLINE_LEVEL_ATTR]: String(row.level)
|
|
15618
|
+
},
|
|
15619
|
+
type: "text",
|
|
15620
|
+
value: row.text,
|
|
15621
|
+
readOnly: !canEdit,
|
|
15622
|
+
"aria-label": t(
|
|
15623
|
+
row.kind === "title" ? "pptx.outline.titleLine" : "pptx.outline.bodyLine"
|
|
15624
|
+
),
|
|
15625
|
+
className: row.kind === "title" ? "w-full rounded bg-transparent px-1 py-0.5 text-sm font-semibold outline-none focus:bg-white/10" : "w-full rounded bg-transparent px-1 py-0.5 text-[13px] text-white/80 outline-none focus:bg-white/10",
|
|
15626
|
+
onChange: (event) => run({ type: "setText", key: row.key, text: event.target.value }),
|
|
15627
|
+
onKeyDown: (event) => onRowKeyDown(event, row.key)
|
|
15628
|
+
}
|
|
15629
|
+
)
|
|
15630
|
+
]
|
|
15631
|
+
},
|
|
15632
|
+
row.key
|
|
15633
|
+
)) })
|
|
15634
|
+
]
|
|
15635
|
+
}
|
|
15636
|
+
);
|
|
15637
|
+
}
|
|
15304
15638
|
function ReadingViewStage({
|
|
15305
15639
|
slide,
|
|
15306
15640
|
templateElements,
|
|
@@ -15509,7 +15843,7 @@ var DEBOUNCE_MS = 600;
|
|
|
15509
15843
|
var EXPANDED_MAX_HEIGHT = 200;
|
|
15510
15844
|
var PX_TO_PT = 0.75;
|
|
15511
15845
|
var MAX_INDENT_LEVEL = 4;
|
|
15512
|
-
var
|
|
15846
|
+
var INDENT_PX2 = 24;
|
|
15513
15847
|
function escapeHtml(value) {
|
|
15514
15848
|
return value.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """).replace(/'/g, "'");
|
|
15515
15849
|
}
|
|
@@ -15564,7 +15898,7 @@ function buildParagraph(segments) {
|
|
|
15564
15898
|
if (first?.style.paragraphMarginLeft) {
|
|
15565
15899
|
indentLevel = Math.min(
|
|
15566
15900
|
MAX_INDENT_LEVEL,
|
|
15567
|
-
Math.max(0, Math.round(first.style.paragraphMarginLeft /
|
|
15901
|
+
Math.max(0, Math.round(first.style.paragraphMarginLeft / INDENT_PX2))
|
|
15568
15902
|
);
|
|
15569
15903
|
}
|
|
15570
15904
|
return {
|
|
@@ -15609,7 +15943,7 @@ function paragraphsToSegments(paragraphs) {
|
|
|
15609
15943
|
para.segments.forEach((seg, sIdx) => {
|
|
15610
15944
|
const updated = { ...seg, style: { ...seg.style } };
|
|
15611
15945
|
if (para.indentLevel > 0) {
|
|
15612
|
-
updated.style.paragraphMarginLeft = para.indentLevel *
|
|
15946
|
+
updated.style.paragraphMarginLeft = para.indentLevel * INDENT_PX2;
|
|
15613
15947
|
} else {
|
|
15614
15948
|
delete updated.style.paragraphMarginLeft;
|
|
15615
15949
|
}
|
|
@@ -15766,7 +16100,7 @@ function parseSegmentsFromRichEditor(root) {
|
|
|
15766
16100
|
if (paraIndent > 0) {
|
|
15767
16101
|
segments[i].style = {
|
|
15768
16102
|
...segments[i].style,
|
|
15769
|
-
paragraphMarginLeft: paraIndent *
|
|
16103
|
+
paragraphMarginLeft: paraIndent * INDENT_PX2
|
|
15770
16104
|
};
|
|
15771
16105
|
}
|
|
15772
16106
|
break;
|
|
@@ -15830,7 +16164,7 @@ function segmentsToEditorHtml(segments) {
|
|
|
15830
16164
|
if (para.indentLevel > 0) {
|
|
15831
16165
|
attrs.push(`data-indent-level="${para.indentLevel}"`);
|
|
15832
16166
|
}
|
|
15833
|
-
const indent = para.indentLevel *
|
|
16167
|
+
const indent = para.indentLevel * INDENT_PX2;
|
|
15834
16168
|
const divStyles = [];
|
|
15835
16169
|
if (indent > 0) {
|
|
15836
16170
|
divStyles.push(`padding-left:${indent}px`);
|
|
@@ -15858,7 +16192,7 @@ function renderRichNotesSegments(segments) {
|
|
|
15858
16192
|
}
|
|
15859
16193
|
const divStyle = {};
|
|
15860
16194
|
if (para.indentLevel > 0) {
|
|
15861
|
-
divStyle.paddingLeft = para.indentLevel *
|
|
16195
|
+
divStyle.paddingLeft = para.indentLevel * INDENT_PX2;
|
|
15862
16196
|
}
|
|
15863
16197
|
const children = [];
|
|
15864
16198
|
if (para.bulletType === "bullet") {
|
|
@@ -18374,9 +18708,9 @@ function PresentationSubtitleBar({
|
|
|
18374
18708
|
function renderNotesSegments(segments) {
|
|
18375
18709
|
return notesSegmentsToSpans(segments).map((span) => {
|
|
18376
18710
|
if (span.kind === "break") {
|
|
18377
|
-
return
|
|
18711
|
+
return React34.createElement("br", { key: span.key });
|
|
18378
18712
|
}
|
|
18379
|
-
return
|
|
18713
|
+
return React34.createElement(
|
|
18380
18714
|
"span",
|
|
18381
18715
|
{ key: span.key, style: span.style },
|
|
18382
18716
|
span.text
|
|
@@ -18583,7 +18917,7 @@ function arePropsEqual4(prev, next) {
|
|
|
18583
18917
|
}
|
|
18584
18918
|
return true;
|
|
18585
18919
|
}
|
|
18586
|
-
var ScaledSlidePreview =
|
|
18920
|
+
var ScaledSlidePreview = React34.memo(ScaledSlidePreviewImpl, arePropsEqual4);
|
|
18587
18921
|
function PresenterNotesRail({
|
|
18588
18922
|
slides,
|
|
18589
18923
|
current,
|
|
@@ -18596,7 +18930,7 @@ function PresenterNotesRail({
|
|
|
18596
18930
|
}) {
|
|
18597
18931
|
const { t } = useTranslation();
|
|
18598
18932
|
const slide = slides[current];
|
|
18599
|
-
const nextSlide = slides
|
|
18933
|
+
const nextSlide = nextPresentedSlide(slides, current);
|
|
18600
18934
|
const notesText = slide?.notes ?? "";
|
|
18601
18935
|
const notesSegments = slide?.notesSegments;
|
|
18602
18936
|
const [notesDraft, setNotesDraft] = useState(notesText);
|
|
@@ -19004,7 +19338,7 @@ function MobilePresenterView({
|
|
|
19004
19338
|
}, []);
|
|
19005
19339
|
const elapsed = mobileElapsedSince(presentationStartTime, now);
|
|
19006
19340
|
const currentSlide = slides[currentSlideIndex];
|
|
19007
|
-
const nextSlide =
|
|
19341
|
+
const nextSlide = nextPresentedSlide(slides, currentSlideIndex);
|
|
19008
19342
|
if (!currentSlide) {
|
|
19009
19343
|
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") });
|
|
19010
19344
|
}
|
|
@@ -19614,6 +19948,33 @@ function AnimationTimelineSection({
|
|
|
19614
19948
|
] })
|
|
19615
19949
|
] });
|
|
19616
19950
|
}
|
|
19951
|
+
function MotionPathRow({
|
|
19952
|
+
motionPath,
|
|
19953
|
+
canEdit,
|
|
19954
|
+
onChange
|
|
19955
|
+
}) {
|
|
19956
|
+
const { t } = useTranslation();
|
|
19957
|
+
const presetId = motionPathPresetIdForPath(motionPath);
|
|
19958
|
+
const isCustom = Boolean(motionPath) && !presetId;
|
|
19959
|
+
return /* @__PURE__ */ jsxs("label", { className: "flex flex-col gap-1", children: [
|
|
19960
|
+
/* @__PURE__ */ jsx("span", { className: "text-muted-foreground text-[11px]", children: t("pptx.animation.motionPath.label") }),
|
|
19961
|
+
/* @__PURE__ */ jsxs(
|
|
19962
|
+
"select",
|
|
19963
|
+
{
|
|
19964
|
+
value: isCustom ? "custom" : presetId ?? "none",
|
|
19965
|
+
onChange: (event) => onChange(event.target.value),
|
|
19966
|
+
disabled: !canEdit,
|
|
19967
|
+
className: SELECT_CLS,
|
|
19968
|
+
children: [
|
|
19969
|
+
/* @__PURE__ */ jsx("option", { value: "none", children: t("pptx.animation.motionPath.none") }),
|
|
19970
|
+
isCustom && /* @__PURE__ */ jsx("option", { value: "custom", children: t("pptx.animation.motionPath.custom") }),
|
|
19971
|
+
MOTION_PATH_FAMILIES.map((family) => /* @__PURE__ */ jsx("optgroup", { label: t(motionPathFamilyLabelKey(family)), children: motionPathPresetsByFamily(family).map((preset) => /* @__PURE__ */ jsx("option", { value: preset.id, children: t(motionPathPresetLabelKey(preset.id)) }, preset.id)) }, family))
|
|
19972
|
+
]
|
|
19973
|
+
}
|
|
19974
|
+
),
|
|
19975
|
+
motionPath && /* @__PURE__ */ jsx("span", { className: "text-[10px] text-muted-foreground", children: t("pptx.animation.motionPath.editHint") })
|
|
19976
|
+
] });
|
|
19977
|
+
}
|
|
19617
19978
|
function useAnimationDragDrop({
|
|
19618
19979
|
canEdit,
|
|
19619
19980
|
updateAnimations
|
|
@@ -19720,6 +20081,14 @@ function useAnimationPreview({
|
|
|
19720
20081
|
selectedElementAnimation
|
|
19721
20082
|
}) {
|
|
19722
20083
|
const handleAnimationHover = useCallback((anim) => {
|
|
20084
|
+
if (anim.motionPath) {
|
|
20085
|
+
startMotionPathPreview(anim.elementId, anim.motionPath, {
|
|
20086
|
+
durationMs: anim.durationMs,
|
|
20087
|
+
delayMs: anim.delayMs,
|
|
20088
|
+
timingCurve: anim.timingCurve
|
|
20089
|
+
});
|
|
20090
|
+
return;
|
|
20091
|
+
}
|
|
19723
20092
|
const preset = anim.entrance ?? anim.emphasis ?? anim.exit;
|
|
19724
20093
|
if (!preset || preset === "none") {
|
|
19725
20094
|
return;
|
|
@@ -19735,6 +20104,14 @@ function useAnimationPreview({
|
|
|
19735
20104
|
if (!selectedElementAnimation) {
|
|
19736
20105
|
return;
|
|
19737
20106
|
}
|
|
20107
|
+
if (selectedElementAnimation.motionPath) {
|
|
20108
|
+
startMotionPathPreview(selectedElementId, selectedElementAnimation.motionPath, {
|
|
20109
|
+
durationMs: selectedElementAnimation.durationMs,
|
|
20110
|
+
delayMs: selectedElementAnimation.delayMs,
|
|
20111
|
+
timingCurve: selectedElementAnimation.timingCurve
|
|
20112
|
+
});
|
|
20113
|
+
return;
|
|
20114
|
+
}
|
|
19738
20115
|
const preset = selectedElementAnimation.entrance ?? selectedElementAnimation.emphasis ?? selectedElementAnimation.exit;
|
|
19739
20116
|
if (!preset || preset === "none") {
|
|
19740
20117
|
return;
|
|
@@ -19794,7 +20171,7 @@ function useAnimationHandlers({
|
|
|
19794
20171
|
const idx = anims.findIndex((a) => a.elementId === selectedElement.id);
|
|
19795
20172
|
const hasEffect = entrance || exit || emphasis;
|
|
19796
20173
|
if (idx >= 0) {
|
|
19797
|
-
if (!hasEffect) {
|
|
20174
|
+
if (!hasEffect && !anims[idx].motionPath) {
|
|
19798
20175
|
return anims.filter((a) => a.elementId !== selectedElement.id);
|
|
19799
20176
|
}
|
|
19800
20177
|
anims[idx] = {
|
|
@@ -19852,6 +20229,20 @@ function useAnimationHandlers({
|
|
|
19852
20229
|
},
|
|
19853
20230
|
[setAnimationPreset, selectedElementAnimation]
|
|
19854
20231
|
);
|
|
20232
|
+
const handleMotionPathChange = useCallback(
|
|
20233
|
+
(presetId) => {
|
|
20234
|
+
if (!canEdit) {
|
|
20235
|
+
return;
|
|
20236
|
+
}
|
|
20237
|
+
if (presetId === "custom") {
|
|
20238
|
+
return;
|
|
20239
|
+
}
|
|
20240
|
+
updateAnimations(
|
|
20241
|
+
(anims) => presetId === "none" ? clearMotionPath(anims, selectedElement.id) : applyMotionPathPreset(anims, selectedElement.id, presetId)
|
|
20242
|
+
);
|
|
20243
|
+
},
|
|
20244
|
+
[canEdit, updateAnimations, selectedElement.id]
|
|
20245
|
+
);
|
|
19855
20246
|
const handleTriggerChange = useCallback(
|
|
19856
20247
|
(event) => {
|
|
19857
20248
|
const newTrigger = event.target.value;
|
|
@@ -19917,7 +20308,7 @@ function useAnimationHandlers({
|
|
|
19917
20308
|
[activeSlide.elements]
|
|
19918
20309
|
);
|
|
19919
20310
|
const hasAnimation = Boolean(
|
|
19920
|
-
selectedElementAnimation?.entrance || selectedElementAnimation?.exit || selectedElementAnimation?.emphasis
|
|
20311
|
+
selectedElementAnimation?.entrance || selectedElementAnimation?.exit || selectedElementAnimation?.emphasis || selectedElementAnimation?.motionPath
|
|
19921
20312
|
);
|
|
19922
20313
|
const showDirectionPicker = hasAnimation && (DIRECTIONAL_PRESETS.has(selectedElementAnimation?.entrance ?? "") || DIRECTIONAL_PRESETS.has(selectedElementAnimation?.exit ?? ""));
|
|
19923
20314
|
const timelineBarData = useMemo(() => {
|
|
@@ -19959,6 +20350,7 @@ function useAnimationHandlers({
|
|
|
19959
20350
|
handleRepeatModeChange,
|
|
19960
20351
|
handleDirectionChange,
|
|
19961
20352
|
handleSequenceChange,
|
|
20353
|
+
handleMotionPathChange,
|
|
19962
20354
|
getTimelineLabel,
|
|
19963
20355
|
...preview,
|
|
19964
20356
|
...dragDrop
|
|
@@ -19993,6 +20385,7 @@ function AnimationPanel({
|
|
|
19993
20385
|
handleRepeatModeChange,
|
|
19994
20386
|
handleDirectionChange,
|
|
19995
20387
|
handleSequenceChange,
|
|
20388
|
+
handleMotionPathChange,
|
|
19996
20389
|
handlePreviewClick
|
|
19997
20390
|
} = handlers;
|
|
19998
20391
|
return /* @__PURE__ */ jsxs("div", { className: "rounded border border-border bg-card p-2 space-y-2", children: [
|
|
@@ -20060,6 +20453,14 @@ function AnimationPanel({
|
|
|
20060
20453
|
}
|
|
20061
20454
|
)
|
|
20062
20455
|
] }),
|
|
20456
|
+
/* @__PURE__ */ jsx(
|
|
20457
|
+
MotionPathRow,
|
|
20458
|
+
{
|
|
20459
|
+
motionPath: selectedElementAnimation?.motionPath,
|
|
20460
|
+
canEdit,
|
|
20461
|
+
onChange: handleMotionPathChange
|
|
20462
|
+
}
|
|
20463
|
+
),
|
|
20063
20464
|
hasAnimation && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
20064
20465
|
showDirectionPicker && /* @__PURE__ */ jsxs("div", { className: "pt-1 border-t border-border", children: [
|
|
20065
20466
|
/* @__PURE__ */ jsx("span", { className: "text-muted-foreground text-[11px] block mb-1", children: t("pptx.animation.direction") }),
|
|
@@ -22010,7 +22411,7 @@ function ConnectorArrowsSection({
|
|
|
22010
22411
|
["Start", "End"].map((end) => {
|
|
22011
22412
|
const widthKey = end === "Start" ? "connectorStartArrowWidth" : "connectorEndArrowWidth";
|
|
22012
22413
|
const lengthKey = end === "Start" ? "connectorStartArrowLength" : "connectorEndArrowLength";
|
|
22013
|
-
return /* @__PURE__ */ jsxs(
|
|
22414
|
+
return /* @__PURE__ */ jsxs(React34.Fragment, { children: [
|
|
22014
22415
|
/* @__PURE__ */ jsxs("label", { className: "flex flex-col gap-1", children: [
|
|
22015
22416
|
/* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: t(END_LABEL_KEYS[end].width) }),
|
|
22016
22417
|
/* @__PURE__ */ jsx(
|
|
@@ -24839,7 +25240,7 @@ function StrokeEffectsSection({
|
|
|
24839
25240
|
] }),
|
|
24840
25241
|
EFFECT_CONFIGS.map((cfg) => {
|
|
24841
25242
|
const on = cfg.isOn(style);
|
|
24842
|
-
return /* @__PURE__ */ jsxs(
|
|
25243
|
+
return /* @__PURE__ */ jsxs(React34.Fragment, { children: [
|
|
24843
25244
|
/* @__PURE__ */ jsxs("label", { className: `inline-flex items-center gap-2 text-foreground ${COL2}`, children: [
|
|
24844
25245
|
/* @__PURE__ */ jsx(
|
|
24845
25246
|
"input",
|
|
@@ -25676,7 +26077,7 @@ function TextWarpGallery({
|
|
|
25676
26077
|
onUpdateTextStyle
|
|
25677
26078
|
}) {
|
|
25678
26079
|
const { t } = useTranslation();
|
|
25679
|
-
const [expanded, setExpanded] =
|
|
26080
|
+
const [expanded, setExpanded] = React34.useState(false);
|
|
25680
26081
|
const currentPreset = ts?.textWarpPreset || "textNoShape";
|
|
25681
26082
|
return /* @__PURE__ */ jsxs("div", { className: "mt-2 rounded border border-border bg-card p-2 space-y-2", children: [
|
|
25682
26083
|
/* @__PURE__ */ jsxs(
|
|
@@ -26382,6 +26783,53 @@ function SmartArtNodeRow({
|
|
|
26382
26783
|
}
|
|
26383
26784
|
);
|
|
26384
26785
|
}
|
|
26786
|
+
function SmartArtStyleControls({
|
|
26787
|
+
colorSchemes,
|
|
26788
|
+
styleOptions,
|
|
26789
|
+
colorScheme,
|
|
26790
|
+
style,
|
|
26791
|
+
canEdit,
|
|
26792
|
+
onChangeColorScheme,
|
|
26793
|
+
onChangeStyle
|
|
26794
|
+
}) {
|
|
26795
|
+
const { t } = useTranslation();
|
|
26796
|
+
const translate = React34.useCallback((key) => t(key), [t]);
|
|
26797
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
26798
|
+
/* @__PURE__ */ jsxs("label", { className: "flex flex-col gap-1 text-[11px]", children: [
|
|
26799
|
+
/* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: t("pptx.smartart.colorScheme") }),
|
|
26800
|
+
/* @__PURE__ */ jsx(
|
|
26801
|
+
"select",
|
|
26802
|
+
{
|
|
26803
|
+
disabled: !canEdit,
|
|
26804
|
+
"data-testid": "smartart-color-scheme",
|
|
26805
|
+
"aria-label": t("pptx.smartart.colorScheme"),
|
|
26806
|
+
className: cn(INPUT, "w-full"),
|
|
26807
|
+
value: colorScheme,
|
|
26808
|
+
onChange: (e) => onChangeColorScheme(e.target.value),
|
|
26809
|
+
children: colorSchemes.map((cs) => /* @__PURE__ */ jsx("option", { value: cs, children: schemaLabel(SMARTART_COLOR_SCHEME_LABEL_KEYS, cs, translate) }, cs))
|
|
26810
|
+
}
|
|
26811
|
+
)
|
|
26812
|
+
] }),
|
|
26813
|
+
/* @__PURE__ */ jsxs("label", { className: "flex flex-col gap-1 text-[11px]", children: [
|
|
26814
|
+
/* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: t("pptx.smartart.style") }),
|
|
26815
|
+
/* @__PURE__ */ jsx("div", { className: "flex gap-1", role: "group", "aria-label": t("pptx.smartart.style"), children: styleOptions.map((s) => /* @__PURE__ */ jsx(
|
|
26816
|
+
"button",
|
|
26817
|
+
{
|
|
26818
|
+
type: "button",
|
|
26819
|
+
disabled: !canEdit,
|
|
26820
|
+
"aria-pressed": style === s,
|
|
26821
|
+
className: cn(
|
|
26822
|
+
"flex-1 px-2 py-1 text-[10px] rounded border transition-colors",
|
|
26823
|
+
style === s ? "border-primary bg-primary/20 text-primary" : "border-border text-muted-foreground hover:bg-muted"
|
|
26824
|
+
),
|
|
26825
|
+
onClick: () => onChangeStyle(s),
|
|
26826
|
+
children: schemaLabel(SMARTART_STYLE_LABEL_KEYS, s, translate)
|
|
26827
|
+
},
|
|
26828
|
+
s
|
|
26829
|
+
)) })
|
|
26830
|
+
] })
|
|
26831
|
+
] });
|
|
26832
|
+
}
|
|
26385
26833
|
var COLOR_SCHEMES = [
|
|
26386
26834
|
"colorful1",
|
|
26387
26835
|
"colorful2",
|
|
@@ -26401,9 +26849,9 @@ function SmartArtPropertiesPanel({
|
|
|
26401
26849
|
const nodes = smartArtData.nodes ?? [];
|
|
26402
26850
|
const layout = smartArtData.resolvedLayoutType;
|
|
26403
26851
|
const topLevelCount = nodes.filter((n) => !n.parentId).length;
|
|
26404
|
-
const inputRefs =
|
|
26405
|
-
const pendingFocusId =
|
|
26406
|
-
|
|
26852
|
+
const inputRefs = React34.useRef(/* @__PURE__ */ new Map());
|
|
26853
|
+
const pendingFocusId = React34.useRef(null);
|
|
26854
|
+
React34.useEffect(() => {
|
|
26407
26855
|
const id = pendingFocusId.current;
|
|
26408
26856
|
if (id) {
|
|
26409
26857
|
inputRefs.current.get(id)?.focus();
|
|
@@ -26518,39 +26966,18 @@ function SmartArtPropertiesPanel({
|
|
|
26518
26966
|
onUpdateSmartArt: updateSmartArt
|
|
26519
26967
|
}
|
|
26520
26968
|
),
|
|
26521
|
-
/* @__PURE__ */
|
|
26522
|
-
|
|
26523
|
-
|
|
26524
|
-
|
|
26525
|
-
|
|
26526
|
-
|
|
26527
|
-
|
|
26528
|
-
|
|
26529
|
-
|
|
26530
|
-
|
|
26531
|
-
|
|
26532
|
-
|
|
26533
|
-
}
|
|
26534
|
-
)
|
|
26535
|
-
] }),
|
|
26536
|
-
/* @__PURE__ */ jsxs("label", { className: "flex flex-col gap-1 text-[11px]", children: [
|
|
26537
|
-
/* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: t("pptx.smartart.style") }),
|
|
26538
|
-
/* @__PURE__ */ jsx("div", { className: "flex gap-1", role: "group", "aria-label": t("pptx.smartart.style"), children: STYLE_OPTIONS.map((s) => /* @__PURE__ */ jsx(
|
|
26539
|
-
"button",
|
|
26540
|
-
{
|
|
26541
|
-
type: "button",
|
|
26542
|
-
disabled: !canEdit,
|
|
26543
|
-
"aria-pressed": (smartArtData.style ?? "flat") === s,
|
|
26544
|
-
className: cn(
|
|
26545
|
-
"flex-1 px-2 py-1 text-[10px] rounded border transition-colors",
|
|
26546
|
-
(smartArtData.style ?? "flat") === s ? "border-primary bg-primary/20 text-primary" : "border-border text-muted-foreground hover:bg-muted"
|
|
26547
|
-
),
|
|
26548
|
-
onClick: () => updateSmartArt({ style: s }),
|
|
26549
|
-
children: s
|
|
26550
|
-
},
|
|
26551
|
-
s
|
|
26552
|
-
)) })
|
|
26553
|
-
] }),
|
|
26969
|
+
/* @__PURE__ */ jsx(
|
|
26970
|
+
SmartArtStyleControls,
|
|
26971
|
+
{
|
|
26972
|
+
colorSchemes: COLOR_SCHEMES,
|
|
26973
|
+
styleOptions: STYLE_OPTIONS,
|
|
26974
|
+
colorScheme: smartArtData.colorScheme ?? "colorful1",
|
|
26975
|
+
style: smartArtData.style ?? "flat",
|
|
26976
|
+
canEdit,
|
|
26977
|
+
onChangeColorScheme: (colorScheme) => updateSmartArt({ colorScheme }),
|
|
26978
|
+
onChangeStyle: (style) => updateSmartArt({ style })
|
|
26979
|
+
}
|
|
26980
|
+
),
|
|
26554
26981
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between", children: [
|
|
26555
26982
|
/* @__PURE__ */ jsxs("span", { className: "text-[11px] text-muted-foreground", children: [
|
|
26556
26983
|
t("pptx.smartart.textPane"),
|
|
@@ -26764,6 +27191,57 @@ function TableDataGrid({
|
|
|
26764
27191
|
] }) })
|
|
26765
27192
|
] }) });
|
|
26766
27193
|
}
|
|
27194
|
+
function TableCellPatternFill({
|
|
27195
|
+
cellStyle,
|
|
27196
|
+
canEdit,
|
|
27197
|
+
onUpdateCellStyle
|
|
27198
|
+
}) {
|
|
27199
|
+
const { t } = useTranslation();
|
|
27200
|
+
const translate = (key) => t(key);
|
|
27201
|
+
return /* @__PURE__ */ jsxs("div", { className: "space-y-1.5", children: [
|
|
27202
|
+
/* @__PURE__ */ jsxs("label", { className: "flex flex-col gap-0.5", children: [
|
|
27203
|
+
/* @__PURE__ */ jsx("span", { className: LBL, children: t("pptx.table.patternPreset") }),
|
|
27204
|
+
/* @__PURE__ */ jsx(
|
|
27205
|
+
"select",
|
|
27206
|
+
{
|
|
27207
|
+
disabled: !canEdit,
|
|
27208
|
+
className: SEL,
|
|
27209
|
+
value: cellStyle.patternFillPreset ?? "ltDnDiag",
|
|
27210
|
+
onChange: (e) => onUpdateCellStyle({ patternFillPreset: e.target.value }),
|
|
27211
|
+
children: PATTERN_OPTIONS.map((p) => /* @__PURE__ */ jsx("option", { value: p, children: schemaLabel(FILL_PATTERN_LABEL_KEYS, p, translate) }, p))
|
|
27212
|
+
}
|
|
27213
|
+
)
|
|
27214
|
+
] }),
|
|
27215
|
+
/* @__PURE__ */ jsxs("div", { className: "grid grid-cols-2 gap-1.5", children: [
|
|
27216
|
+
/* @__PURE__ */ jsxs("label", { className: "flex flex-col gap-0.5", children: [
|
|
27217
|
+
/* @__PURE__ */ jsx("span", { className: LBL, children: t("pptx.table.patternForeground") }),
|
|
27218
|
+
/* @__PURE__ */ jsx(
|
|
27219
|
+
"input",
|
|
27220
|
+
{
|
|
27221
|
+
type: "color",
|
|
27222
|
+
disabled: !canEdit,
|
|
27223
|
+
className: "w-full h-7 rounded border border-border bg-transparent cursor-pointer",
|
|
27224
|
+
value: cellStyle.patternFillForeground ?? "#000000",
|
|
27225
|
+
onChange: (e) => onUpdateCellStyle({ patternFillForeground: e.target.value })
|
|
27226
|
+
}
|
|
27227
|
+
)
|
|
27228
|
+
] }),
|
|
27229
|
+
/* @__PURE__ */ jsxs("label", { className: "flex flex-col gap-0.5", children: [
|
|
27230
|
+
/* @__PURE__ */ jsx("span", { className: LBL, children: t("pptx.table.patternBackground") }),
|
|
27231
|
+
/* @__PURE__ */ jsx(
|
|
27232
|
+
"input",
|
|
27233
|
+
{
|
|
27234
|
+
type: "color",
|
|
27235
|
+
disabled: !canEdit,
|
|
27236
|
+
className: "w-full h-7 rounded border border-border bg-transparent cursor-pointer",
|
|
27237
|
+
value: cellStyle.patternFillBackground ?? "#FFFFFF",
|
|
27238
|
+
onChange: (e) => onUpdateCellStyle({ patternFillBackground: e.target.value })
|
|
27239
|
+
}
|
|
27240
|
+
)
|
|
27241
|
+
] })
|
|
27242
|
+
] })
|
|
27243
|
+
] });
|
|
27244
|
+
}
|
|
26767
27245
|
function TableCellAdvancedFill({
|
|
26768
27246
|
cellStyle,
|
|
26769
27247
|
canEdit,
|
|
@@ -26817,7 +27295,7 @@ function TableCellAdvancedFill({
|
|
|
26817
27295
|
}
|
|
26818
27296
|
),
|
|
26819
27297
|
fillMode === "pattern" && /* @__PURE__ */ jsx(
|
|
26820
|
-
|
|
27298
|
+
TableCellPatternFill,
|
|
26821
27299
|
{
|
|
26822
27300
|
cellStyle,
|
|
26823
27301
|
canEdit,
|
|
@@ -26943,62 +27421,6 @@ function GradientControls({
|
|
|
26943
27421
|
)
|
|
26944
27422
|
] });
|
|
26945
27423
|
}
|
|
26946
|
-
function PatternControls({
|
|
26947
|
-
cellStyle,
|
|
26948
|
-
canEdit,
|
|
26949
|
-
onUpdateCellStyle
|
|
26950
|
-
}) {
|
|
26951
|
-
const { t } = useTranslation();
|
|
26952
|
-
return /* @__PURE__ */ jsxs("div", { className: "space-y-1.5", children: [
|
|
26953
|
-
/* @__PURE__ */ jsxs("label", { className: "flex flex-col gap-0.5", children: [
|
|
26954
|
-
/* @__PURE__ */ jsx("span", { className: LBL, children: t("pptx.table.patternPreset") }),
|
|
26955
|
-
/* @__PURE__ */ jsx(
|
|
26956
|
-
"select",
|
|
26957
|
-
{
|
|
26958
|
-
disabled: !canEdit,
|
|
26959
|
-
className: SEL,
|
|
26960
|
-
value: cellStyle.patternFillPreset ?? "ltDnDiag",
|
|
26961
|
-
onChange: (e) => onUpdateCellStyle({
|
|
26962
|
-
patternFillPreset: e.target.value
|
|
26963
|
-
}),
|
|
26964
|
-
children: PATTERN_OPTIONS.map((p) => /* @__PURE__ */ jsx("option", { value: p, children: p }, p))
|
|
26965
|
-
}
|
|
26966
|
-
)
|
|
26967
|
-
] }),
|
|
26968
|
-
/* @__PURE__ */ jsxs("div", { className: "grid grid-cols-2 gap-1.5", children: [
|
|
26969
|
-
/* @__PURE__ */ jsxs("label", { className: "flex flex-col gap-0.5", children: [
|
|
26970
|
-
/* @__PURE__ */ jsx("span", { className: LBL, children: t("pptx.table.patternForeground") }),
|
|
26971
|
-
/* @__PURE__ */ jsx(
|
|
26972
|
-
"input",
|
|
26973
|
-
{
|
|
26974
|
-
type: "color",
|
|
26975
|
-
disabled: !canEdit,
|
|
26976
|
-
className: "w-full h-7 rounded border border-border bg-transparent cursor-pointer",
|
|
26977
|
-
value: cellStyle.patternFillForeground ?? "#000000",
|
|
26978
|
-
onChange: (e) => onUpdateCellStyle({
|
|
26979
|
-
patternFillForeground: e.target.value
|
|
26980
|
-
})
|
|
26981
|
-
}
|
|
26982
|
-
)
|
|
26983
|
-
] }),
|
|
26984
|
-
/* @__PURE__ */ jsxs("label", { className: "flex flex-col gap-0.5", children: [
|
|
26985
|
-
/* @__PURE__ */ jsx("span", { className: LBL, children: t("pptx.table.patternBackground") }),
|
|
26986
|
-
/* @__PURE__ */ jsx(
|
|
26987
|
-
"input",
|
|
26988
|
-
{
|
|
26989
|
-
type: "color",
|
|
26990
|
-
disabled: !canEdit,
|
|
26991
|
-
className: "w-full h-7 rounded border border-border bg-transparent cursor-pointer",
|
|
26992
|
-
value: cellStyle.patternFillBackground ?? "#FFFFFF",
|
|
26993
|
-
onChange: (e) => onUpdateCellStyle({
|
|
26994
|
-
patternFillBackground: e.target.value
|
|
26995
|
-
})
|
|
26996
|
-
}
|
|
26997
|
-
)
|
|
26998
|
-
] })
|
|
26999
|
-
] })
|
|
27000
|
-
] });
|
|
27001
|
-
}
|
|
27002
27424
|
function TableCellFormattingPanel({
|
|
27003
27425
|
tableData: td,
|
|
27004
27426
|
tableEditorState,
|
|
@@ -28418,6 +28840,7 @@ function SlideThemeOverridePanel({
|
|
|
28418
28840
|
onUpdateSlide
|
|
28419
28841
|
}) {
|
|
28420
28842
|
const { t } = useTranslation();
|
|
28843
|
+
const translate = useCallback((key) => t(key), [t]);
|
|
28421
28844
|
const override = activeSlide?.clrMapOverride;
|
|
28422
28845
|
const isOverrideActive = override !== void 0;
|
|
28423
28846
|
const targetSlotOptions = useMemo(() => [...THEME_COLOR_SCHEME_KEYS], []);
|
|
@@ -28510,7 +28933,7 @@ function SlideThemeOverridePanel({
|
|
|
28510
28933
|
className: "flex-1 bg-muted border border-border rounded px-1 py-0.5 text-[11px]",
|
|
28511
28934
|
value: currentTarget,
|
|
28512
28935
|
onChange: (e) => handleAliasChange(alias, e.target.value),
|
|
28513
|
-
children: targetSlotOptions.map((slot) => /* @__PURE__ */ jsx("option", { value: slot, children: slot }, slot))
|
|
28936
|
+
children: targetSlotOptions.map((slot) => /* @__PURE__ */ jsx("option", { value: slot, children: schemaLabel(THEME_COLOR_SLOT_LABEL_KEYS, slot, translate) }, slot))
|
|
28514
28937
|
}
|
|
28515
28938
|
)
|
|
28516
28939
|
] }, alias);
|
|
@@ -28870,7 +29293,7 @@ function PresentationPropertiesPanel({
|
|
|
28870
29293
|
onUpdateTagCollections
|
|
28871
29294
|
}) {
|
|
28872
29295
|
const { t } = useTranslation();
|
|
28873
|
-
const handleTransitionChange =
|
|
29296
|
+
const handleTransitionChange = React34.useCallback(
|
|
28874
29297
|
(updates) => {
|
|
28875
29298
|
onUpdateSlide({
|
|
28876
29299
|
transition: mergeSlideTransition(activeSlide?.transition, updates)
|
|
@@ -32183,6 +32606,7 @@ function ViewerOverlays({
|
|
|
32183
32606
|
isAccessibilityPanelOpen,
|
|
32184
32607
|
showSlideSorter,
|
|
32185
32608
|
showReadingView,
|
|
32609
|
+
showOutlineView,
|
|
32186
32610
|
templateElements,
|
|
32187
32611
|
accessibilityIssues,
|
|
32188
32612
|
slides,
|
|
@@ -32199,10 +32623,14 @@ function ViewerOverlays({
|
|
|
32199
32623
|
onToggleHideSlides,
|
|
32200
32624
|
onCloseSorter,
|
|
32201
32625
|
onCloseReadingView,
|
|
32626
|
+
onCloseOutlineView,
|
|
32627
|
+
setSlides,
|
|
32628
|
+
setActiveSlideIndex,
|
|
32629
|
+
bumpHistory,
|
|
32202
32630
|
reducedMotion,
|
|
32203
32631
|
onToggleReducedMotion
|
|
32204
32632
|
}) {
|
|
32205
|
-
const hasOverlay = isShortcutHelpOpen || isAccessibilityPanelOpen || showSlideSorter || showReadingView;
|
|
32633
|
+
const hasOverlay = isShortcutHelpOpen || isAccessibilityPanelOpen || showSlideSorter || showReadingView || showOutlineView;
|
|
32206
32634
|
if (!hasOverlay) {
|
|
32207
32635
|
return null;
|
|
32208
32636
|
}
|
|
@@ -32243,6 +32671,18 @@ function ViewerOverlays({
|
|
|
32243
32671
|
activeSlideIndex,
|
|
32244
32672
|
onExit: onCloseReadingView
|
|
32245
32673
|
}
|
|
32674
|
+
),
|
|
32675
|
+
showOutlineView && /* @__PURE__ */ jsx(
|
|
32676
|
+
OutlineViewOverlay,
|
|
32677
|
+
{
|
|
32678
|
+
slides,
|
|
32679
|
+
canvasSize,
|
|
32680
|
+
canEdit,
|
|
32681
|
+
setSlides,
|
|
32682
|
+
setActiveSlideIndex,
|
|
32683
|
+
bumpHistory,
|
|
32684
|
+
onClose: onCloseOutlineView
|
|
32685
|
+
}
|
|
32246
32686
|
)
|
|
32247
32687
|
] });
|
|
32248
32688
|
}
|
|
@@ -32696,6 +33136,7 @@ function ViewerToolbarSection(props) {
|
|
|
32696
33136
|
state: s,
|
|
32697
33137
|
selectedElement,
|
|
32698
33138
|
activeSlide,
|
|
33139
|
+
activeSlideIndex,
|
|
32699
33140
|
zoom,
|
|
32700
33141
|
history,
|
|
32701
33142
|
findReplace,
|
|
@@ -32731,6 +33172,12 @@ function ViewerToolbarSection(props) {
|
|
|
32731
33172
|
return;
|
|
32732
33173
|
}
|
|
32733
33174
|
const current = activeSlide.animations ?? [];
|
|
33175
|
+
if (group === "motionPath") {
|
|
33176
|
+
propertyHandlers.handleUpdateSlide({
|
|
33177
|
+
animations: applyMotionPathPreset(current, selectedElement.id, preset)
|
|
33178
|
+
});
|
|
33179
|
+
return;
|
|
33180
|
+
}
|
|
32734
33181
|
const existing = current.find((a) => a.elementId === selectedElement.id);
|
|
32735
33182
|
const presetValue = preset;
|
|
32736
33183
|
if (existing) {
|
|
@@ -32769,7 +33216,7 @@ function ViewerToolbarSection(props) {
|
|
|
32769
33216
|
},
|
|
32770
33217
|
[activeSlide, propertyHandlers]
|
|
32771
33218
|
);
|
|
32772
|
-
const scopedLayoutOptions =
|
|
33219
|
+
const scopedLayoutOptions = React34.useMemo(
|
|
32773
33220
|
() => scopeLayoutOptionsToActiveSlide(s.layoutOptions, activeSlide),
|
|
32774
33221
|
[s.layoutOptions, activeSlide]
|
|
32775
33222
|
);
|
|
@@ -33068,6 +33515,7 @@ function ViewerToolbarSection(props) {
|
|
|
33068
33515
|
onRunAccessibilityCheck: dialogs.handleRunAccessibilityCheck,
|
|
33069
33516
|
onToggleSlideSorter: () => s.setShowSlideSorter((p) => !p),
|
|
33070
33517
|
onOpenReadingView: () => s.setShowReadingView(true),
|
|
33518
|
+
onOpenOutlineView: () => s.setShowOutlineView(true),
|
|
33071
33519
|
onUpdateTextStyle: ops.updateSelectedTextStyle,
|
|
33072
33520
|
onTransformTextCase: ops.updateSelectedTextCase,
|
|
33073
33521
|
isOverflowMenuOpen: s.isOverflowMenuOpen,
|
|
@@ -33112,6 +33560,8 @@ function ViewerToolbarSection(props) {
|
|
|
33112
33560
|
eyedropperActive: s.eyedropperActive,
|
|
33113
33561
|
onToggleEyedropper: () => s.setEyedropperActive((p) => !p),
|
|
33114
33562
|
onOpenSetUpSlideShow: () => dialogs.setIsSetUpSlideShowOpen(true),
|
|
33563
|
+
onToggleHideSlide: () => slideOps.handleToggleHideSlides([activeSlideIndex]),
|
|
33564
|
+
activeSlideHidden: Boolean(activeSlide?.hidden),
|
|
33115
33565
|
onOpenBroadcastDialog: () => dialogs.setIsBroadcastDialogOpen(true),
|
|
33116
33566
|
onToggleSubtitles: dialogs.handleToggleSubtitles,
|
|
33117
33567
|
showSubtitles: Boolean(s.presentationProperties.showSubtitles),
|
|
@@ -33909,6 +34359,10 @@ function PresentationStage({
|
|
|
33909
34359
|
height: safeHeight,
|
|
33910
34360
|
transform: `scale(${scale})`,
|
|
33911
34361
|
transformOrigin: "top left",
|
|
34362
|
+
// Motion-path keyframes translate by a fraction of the SLIDE, so
|
|
34363
|
+
// the stage publishes its own size for those calc() offsets.
|
|
34364
|
+
"--pptx-slide-w": `${safeWidth}px`,
|
|
34365
|
+
"--pptx-slide-h": `${safeHeight}px`,
|
|
33912
34366
|
...getReactSlideBackgroundStyle(activeSlide)
|
|
33913
34367
|
},
|
|
33914
34368
|
children: [
|
|
@@ -34333,6 +34787,7 @@ ${url}`)) {
|
|
|
34333
34787
|
) : /* @__PURE__ */ jsx(
|
|
34334
34788
|
SlideCanvas,
|
|
34335
34789
|
{
|
|
34790
|
+
onUpdateSlideAnimations: props.onUpdateSlideAnimations,
|
|
34336
34791
|
activeSlide: effectiveSlide,
|
|
34337
34792
|
templateElements: effectiveTemplateElements,
|
|
34338
34793
|
canvasSize,
|
|
@@ -34515,7 +34970,7 @@ ${url}`)) {
|
|
|
34515
34970
|
)
|
|
34516
34971
|
);
|
|
34517
34972
|
}
|
|
34518
|
-
var AiChatPanel = lazy(() => import('./AiChatPanel-
|
|
34973
|
+
var AiChatPanel = lazy(() => import('./AiChatPanel-RMQIJDUJ.mjs'));
|
|
34519
34974
|
function AiChatPanelLazy(props) {
|
|
34520
34975
|
return /* @__PURE__ */ jsx(
|
|
34521
34976
|
Suspense,
|
|
@@ -35677,6 +36132,7 @@ function ViewerMainContent(props) {
|
|
|
35677
36132
|
/* @__PURE__ */ jsx(
|
|
35678
36133
|
ViewerCanvasArea,
|
|
35679
36134
|
{
|
|
36135
|
+
onUpdateSlideAnimations: (animations) => propertyHandlers.handleUpdateSlide({ animations }),
|
|
35680
36136
|
mode,
|
|
35681
36137
|
canEdit,
|
|
35682
36138
|
slides,
|
|
@@ -37661,6 +38117,9 @@ var PowerPointViewer = forwardRef(
|
|
|
37661
38117
|
mode,
|
|
37662
38118
|
slides,
|
|
37663
38119
|
visibleSlideIndexes,
|
|
38120
|
+
// File > Options > Advanced > "End with black slide". Off means the show
|
|
38121
|
+
// exits straight to the editor instead of raising the black end screen.
|
|
38122
|
+
endWithBlackSlide: viewerOptions.advanced.slideShowEndWithBlackSlide,
|
|
37664
38123
|
activeSlideIndex,
|
|
37665
38124
|
containerRef,
|
|
37666
38125
|
content,
|
|
@@ -37873,6 +38332,7 @@ var PowerPointViewer = forwardRef(
|
|
|
37873
38332
|
state,
|
|
37874
38333
|
selectedElement,
|
|
37875
38334
|
activeSlide,
|
|
38335
|
+
activeSlideIndex,
|
|
37876
38336
|
zoom,
|
|
37877
38337
|
history,
|
|
37878
38338
|
findReplace: editorOps.findReplace,
|
|
@@ -38090,6 +38550,7 @@ var PowerPointViewer = forwardRef(
|
|
|
38090
38550
|
isAccessibilityPanelOpen: state.isAccessibilityPanelOpen,
|
|
38091
38551
|
showSlideSorter: state.showSlideSorter,
|
|
38092
38552
|
showReadingView: state.showReadingView,
|
|
38553
|
+
showOutlineView: state.showOutlineView,
|
|
38093
38554
|
templateElements: state.templateElements,
|
|
38094
38555
|
accessibilityIssues: state.accessibilityIssues,
|
|
38095
38556
|
slides,
|
|
@@ -38112,6 +38573,10 @@ var PowerPointViewer = forwardRef(
|
|
|
38112
38573
|
state.setShowReadingView(false);
|
|
38113
38574
|
state.setActiveSlideIndex(slideIndex);
|
|
38114
38575
|
},
|
|
38576
|
+
onCloseOutlineView: () => state.setShowOutlineView(false),
|
|
38577
|
+
setSlides: state.setSlides,
|
|
38578
|
+
setActiveSlideIndex: state.setActiveSlideIndex,
|
|
38579
|
+
bumpHistory: () => state.setPointerCommitNonce((n) => n + 1),
|
|
38115
38580
|
reducedMotion,
|
|
38116
38581
|
onToggleReducedMotion: toggleReducedMotion
|
|
38117
38582
|
}
|