pptx-react-viewer 2.12.0 → 2.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +4 -0
- package/dist/{AiChatPanel-CS4CONUO.mjs → AiChatPanel-4YS6DEIT.mjs} +4 -4
- package/dist/AiChatPanel-4YS6DEIT.mjs.br +0 -0
- package/dist/AiChatPanel-4YS6DEIT.mjs.gz +0 -0
- package/dist/{AiChatPanel-JIXSOZXN.js → AiChatPanel-DEI3EQFM.js} +23 -23
- package/dist/AiChatPanel-DEI3EQFM.js.br +0 -0
- package/dist/AiChatPanel-DEI3EQFM.js.gz +0 -0
- package/dist/{Model3DScene-RWFPSN6B.mjs → Model3DScene-JSNQCKCJ.mjs} +1 -1
- package/dist/Model3DScene-JSNQCKCJ.mjs.br +0 -0
- package/dist/Model3DScene-JSNQCKCJ.mjs.gz +0 -0
- package/dist/{Model3DScene-5KMJ4JL6.js → Model3DScene-X4W7GZVY.js} +2 -2
- package/dist/Model3DScene-X4W7GZVY.js.br +0 -0
- package/dist/Model3DScene-X4W7GZVY.js.gz +0 -0
- package/dist/{SurfaceChart3DScene-2GZQM3LN.mjs → SurfaceChart3DScene-3MSU74YH.mjs} +1 -1
- package/dist/{SurfaceChart3DScene-2GZQM3LN.mjs.br → SurfaceChart3DScene-3MSU74YH.mjs.br} +0 -0
- package/dist/SurfaceChart3DScene-3MSU74YH.mjs.gz +0 -0
- package/dist/{SurfaceChart3DScene-BIOKIETC.js → SurfaceChart3DScene-IZLUWT27.js} +2 -2
- package/dist/SurfaceChart3DScene-IZLUWT27.js.br +0 -0
- package/dist/SurfaceChart3DScene-IZLUWT27.js.gz +0 -0
- package/dist/{chunk-QGHC65C4.mjs → chunk-4TD7EINA.mjs} +1071 -375
- package/dist/chunk-4TD7EINA.mjs.br +0 -0
- package/dist/chunk-4TD7EINA.mjs.gz +0 -0
- package/dist/{chunk-AOED5MFM.mjs → chunk-6KRNQ2KF.mjs} +13 -12
- package/dist/chunk-6KRNQ2KF.mjs.br +0 -0
- package/dist/chunk-6KRNQ2KF.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-PJUQQF3I.js → chunk-EFSQW6S5.js} +1091 -376
- package/dist/chunk-EFSQW6S5.js.br +0 -0
- package/dist/chunk-EFSQW6S5.js.gz +0 -0
- package/dist/{chunk-ZIXSSQAZ.js → chunk-G2LZT5SV.js} +3 -3
- package/dist/chunk-G2LZT5SV.js.br +0 -0
- package/dist/chunk-G2LZT5SV.js.gz +0 -0
- package/dist/{chunk-CEUHGUZ4.mjs → chunk-HRLF4REI.mjs} +54 -28
- package/dist/chunk-HRLF4REI.mjs.br +0 -0
- package/dist/chunk-HRLF4REI.mjs.gz +0 -0
- package/dist/{chunk-2VUHJNWM.js → chunk-IDW5UPXW.js} +292 -266
- package/dist/chunk-IDW5UPXW.js.br +0 -0
- package/dist/chunk-IDW5UPXW.js.gz +0 -0
- package/dist/{chunk-PTGTFXPU.js → chunk-RWIQHVZQ.js} +341 -340
- package/dist/chunk-RWIQHVZQ.js.br +0 -0
- package/dist/chunk-RWIQHVZQ.js.gz +0 -0
- package/dist/{chunk-SP7U34QM.js → chunk-SHZ3GWOD.js} +2004 -1943
- package/dist/chunk-SHZ3GWOD.js.br +0 -0
- package/dist/chunk-SHZ3GWOD.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-EJRHYYKE.mjs → chunk-WEU5EMKK.mjs} +1 -1
- package/dist/chunk-WEU5EMKK.mjs.br +0 -0
- package/dist/chunk-WEU5EMKK.mjs.gz +0 -0
- package/dist/{chunk-BJQSHVYH.mjs → chunk-YA7VFYTW.mjs} +271 -210
- package/dist/chunk-YA7VFYTW.mjs.br +0 -0
- package/dist/chunk-YA7VFYTW.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.d.ts +18 -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 +18 -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.d.ts +18 -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.br +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-PJUQQF3I.js.gz +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-QGHC65C4.mjs.gz +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,
|
|
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-WEU5EMKK.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-6KRNQ2KF.mjs';
|
|
3
|
+
import { SHAPE_PRESETS, MIN_ELEMENT_SIZE, DEFAULT_STROKE_COLOR, getConnectorPathGeometry, buildLineShadowCss, buildLineGlowFilter, renderConnectorMarker, 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-HRLF4REI.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-4TD7EINA.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.1" ;
|
|
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,8 +7232,9 @@ function ResizeHandles({
|
|
|
7199
7232
|
) : null
|
|
7200
7233
|
] });
|
|
7201
7234
|
}
|
|
7202
|
-
var ConnectorElementRenderer =
|
|
7203
|
-
|
|
7235
|
+
var ConnectorElementRenderer = React35.memo(
|
|
7236
|
+
// oxlint-disable-next-line prefer-arrow-callback -- named fn gives the memo component its displayName
|
|
7237
|
+
function ConnectorElementRendererInner({
|
|
7204
7238
|
el,
|
|
7205
7239
|
isSelected,
|
|
7206
7240
|
canInteract,
|
|
@@ -7213,10 +7247,12 @@ var ConnectorElementRenderer = React34.memo(
|
|
|
7213
7247
|
onResizePointerDown,
|
|
7214
7248
|
onAdjustmentPointerDown,
|
|
7215
7249
|
animationState
|
|
7216
|
-
})
|
|
7250
|
+
}) {
|
|
7217
7251
|
const shapeEl = hasShapeProperties(el) ? el : void 0;
|
|
7218
|
-
const
|
|
7219
|
-
const
|
|
7252
|
+
const boxWidth = Math.max(el.width, MIN_ELEMENT_SIZE);
|
|
7253
|
+
const boxHeight = Math.max(el.height, MIN_ELEMENT_SIZE);
|
|
7254
|
+
const viewWidth = Math.max(el.width, 0);
|
|
7255
|
+
const viewHeight = Math.max(el.height, 0);
|
|
7220
7256
|
const ss = shapeEl?.shapeStyle;
|
|
7221
7257
|
const strokeWidth = Math.max(0, ss?.strokeWidth ?? 2);
|
|
7222
7258
|
const strokeColor = normalizeHexColor(ss?.strokeColor, DEFAULT_STROKE_COLOR);
|
|
@@ -7260,8 +7296,8 @@ var ConnectorElementRenderer = React34.memo(
|
|
|
7260
7296
|
style: {
|
|
7261
7297
|
left: el.x,
|
|
7262
7298
|
top: el.y,
|
|
7263
|
-
width:
|
|
7264
|
-
height:
|
|
7299
|
+
width: boxWidth,
|
|
7300
|
+
height: boxHeight,
|
|
7265
7301
|
transform: getElementTransform(el),
|
|
7266
7302
|
transformOrigin: "center",
|
|
7267
7303
|
background: "transparent",
|
|
@@ -7277,7 +7313,7 @@ var ConnectorElementRenderer = React34.memo(
|
|
|
7277
7313
|
/* @__PURE__ */ jsxs(
|
|
7278
7314
|
"svg",
|
|
7279
7315
|
{
|
|
7280
|
-
viewBox: `0 0 ${
|
|
7316
|
+
viewBox: `0 0 ${boxWidth} ${boxHeight}`,
|
|
7281
7317
|
className: "w-full h-full",
|
|
7282
7318
|
preserveAspectRatio: "none",
|
|
7283
7319
|
style: { overflow: "visible", pointerEvents: "none" },
|
|
@@ -7495,6 +7531,8 @@ function getElementInteractionProps({
|
|
|
7495
7531
|
title: canInteract && element.actionClick ? void 0 : element.actionClick?.tooltip || element.actionHover?.tooltip || void 0
|
|
7496
7532
|
};
|
|
7497
7533
|
}
|
|
7534
|
+
|
|
7535
|
+
// src/viewer/components/elements/element-renderer-helpers.tsx
|
|
7498
7536
|
function renderDagDuotoneFilterForElement(el) {
|
|
7499
7537
|
if (!hasDagDuotoneEffect(el)) {
|
|
7500
7538
|
return null;
|
|
@@ -7545,19 +7583,6 @@ function getContainerStyle({
|
|
|
7545
7583
|
...templateEditing ? { outline: "2px dashed rgb(217, 119, 6)", outlineOffset: "1px", opacity: opacity ?? 0.95 } : {}
|
|
7546
7584
|
};
|
|
7547
7585
|
}
|
|
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
7586
|
|
|
7562
7587
|
// src/viewer/components/elements/element-shape-params.ts
|
|
7563
7588
|
function shapeParams(element) {
|
|
@@ -8705,10 +8730,10 @@ function InlineTextEditor({
|
|
|
8705
8730
|
function FailedToLoad() {
|
|
8706
8731
|
return null;
|
|
8707
8732
|
}
|
|
8708
|
-
var LazyModel3DScene =
|
|
8733
|
+
var LazyModel3DScene = React35.lazy(
|
|
8709
8734
|
async () => {
|
|
8710
8735
|
try {
|
|
8711
|
-
return await import('./Model3DScene-
|
|
8736
|
+
return await import('./Model3DScene-JSNQCKCJ.mjs');
|
|
8712
8737
|
} catch {
|
|
8713
8738
|
return { default: FailedToLoad };
|
|
8714
8739
|
}
|
|
@@ -8791,7 +8816,7 @@ function PosterFallback({
|
|
|
8791
8816
|
}
|
|
8792
8817
|
);
|
|
8793
8818
|
}
|
|
8794
|
-
var Model3DErrorBoundary = class extends
|
|
8819
|
+
var Model3DErrorBoundary = class extends React35.Component {
|
|
8795
8820
|
constructor(props) {
|
|
8796
8821
|
super(props);
|
|
8797
8822
|
this.state = { hasError: false };
|
|
@@ -8982,10 +9007,10 @@ function SmartArtInlineNodeEditor({
|
|
|
8982
9007
|
onCancel
|
|
8983
9008
|
}) {
|
|
8984
9009
|
const { t } = useTranslation();
|
|
8985
|
-
const ref =
|
|
8986
|
-
const [value, setValue] =
|
|
8987
|
-
const settled =
|
|
8988
|
-
|
|
9010
|
+
const ref = React35.useRef(null);
|
|
9011
|
+
const [value, setValue] = React35.useState(initialText);
|
|
9012
|
+
const settled = React35.useRef(false);
|
|
9013
|
+
React35.useEffect(() => {
|
|
8989
9014
|
const el = ref.current;
|
|
8990
9015
|
if (el) {
|
|
8991
9016
|
el.focus();
|
|
@@ -9077,16 +9102,16 @@ function findNodeIdFromEvent(target) {
|
|
|
9077
9102
|
return null;
|
|
9078
9103
|
}
|
|
9079
9104
|
function useSmartArtHoverState(containerRef) {
|
|
9080
|
-
const [hoveredNodeId, setHoveredNodeId] =
|
|
9081
|
-
const [hoveredNodeRect, setHoveredNodeRect] =
|
|
9082
|
-
const hideTimeoutRef =
|
|
9083
|
-
const cancelPendingHide =
|
|
9105
|
+
const [hoveredNodeId, setHoveredNodeId] = React35.useState(null);
|
|
9106
|
+
const [hoveredNodeRect, setHoveredNodeRect] = React35.useState(null);
|
|
9107
|
+
const hideTimeoutRef = React35.useRef(null);
|
|
9108
|
+
const cancelPendingHide = React35.useCallback(() => {
|
|
9084
9109
|
if (hideTimeoutRef.current !== null) {
|
|
9085
9110
|
window.clearTimeout(hideTimeoutRef.current);
|
|
9086
9111
|
hideTimeoutRef.current = null;
|
|
9087
9112
|
}
|
|
9088
9113
|
}, []);
|
|
9089
|
-
const handleMouseMove =
|
|
9114
|
+
const handleMouseMove = React35.useCallback(
|
|
9090
9115
|
(e, ignoreRef) => {
|
|
9091
9116
|
const nodeEl = findNodeIdFromEvent(e.target);
|
|
9092
9117
|
const container = containerRef.current;
|
|
@@ -9114,12 +9139,12 @@ function useSmartArtHoverState(containerRef) {
|
|
|
9114
9139
|
},
|
|
9115
9140
|
[containerRef, cancelPendingHide]
|
|
9116
9141
|
);
|
|
9117
|
-
const clearHover =
|
|
9142
|
+
const clearHover = React35.useCallback(() => {
|
|
9118
9143
|
cancelPendingHide();
|
|
9119
9144
|
setHoveredNodeId(null);
|
|
9120
9145
|
setHoveredNodeRect(null);
|
|
9121
9146
|
}, [cancelPendingHide]);
|
|
9122
|
-
|
|
9147
|
+
React35.useEffect(() => cancelPendingHide, [cancelPendingHide]);
|
|
9123
9148
|
return { hoveredNodeId, hoveredNodeRect, handleMouseMove, clearHover };
|
|
9124
9149
|
}
|
|
9125
9150
|
var EDITOR_PADDING = 4;
|
|
@@ -9134,11 +9159,11 @@ function SmartArtEditableLayer({
|
|
|
9134
9159
|
onChangeNodeStyle,
|
|
9135
9160
|
children
|
|
9136
9161
|
}) {
|
|
9137
|
-
const containerRef =
|
|
9138
|
-
const styleBarRef =
|
|
9139
|
-
const [edit, setEdit] =
|
|
9162
|
+
const containerRef = React35.useRef(null);
|
|
9163
|
+
const styleBarRef = React35.useRef(null);
|
|
9164
|
+
const [edit, setEdit] = React35.useState(null);
|
|
9140
9165
|
const { hoveredNodeId, hoveredNodeRect, handleMouseMove, clearHover } = useSmartArtHoverState(containerRef);
|
|
9141
|
-
const openEditor =
|
|
9166
|
+
const openEditor = React35.useCallback(
|
|
9142
9167
|
(target) => {
|
|
9143
9168
|
const nodeEl = findNodeIdFromEvent(target);
|
|
9144
9169
|
const container = containerRef.current;
|
|
@@ -10678,11 +10703,11 @@ function arePropsEqual(prev, next) {
|
|
|
10678
10703
|
}
|
|
10679
10704
|
return true;
|
|
10680
10705
|
}
|
|
10681
|
-
var SmartArtRenderer =
|
|
10706
|
+
var SmartArtRenderer = React35.memo(SmartArtRendererImpl, arePropsEqual);
|
|
10682
10707
|
function FailedToLoad2() {
|
|
10683
10708
|
return null;
|
|
10684
10709
|
}
|
|
10685
|
-
var LazySmartArt3DScene =
|
|
10710
|
+
var LazySmartArt3DScene = React35.lazy(
|
|
10686
10711
|
async () => {
|
|
10687
10712
|
try {
|
|
10688
10713
|
return await import('./SmartArt3DScene-XCFVGCXE.mjs');
|
|
@@ -10691,7 +10716,7 @@ var LazySmartArt3DScene = React34.lazy(
|
|
|
10691
10716
|
}
|
|
10692
10717
|
}
|
|
10693
10718
|
);
|
|
10694
|
-
var SceneErrorBoundary = class extends
|
|
10719
|
+
var SceneErrorBoundary = class extends React35.Component {
|
|
10695
10720
|
constructor(props) {
|
|
10696
10721
|
super(props);
|
|
10697
10722
|
this.state = { hasError: false };
|
|
@@ -11325,6 +11350,7 @@ function renderBody(options) {
|
|
|
11325
11350
|
onColResize,
|
|
11326
11351
|
onRowResize,
|
|
11327
11352
|
isPresentationPassive,
|
|
11353
|
+
isStaticSurface,
|
|
11328
11354
|
handleMediaPlayStateChange,
|
|
11329
11355
|
allSlides,
|
|
11330
11356
|
onZoomClick,
|
|
@@ -11424,6 +11450,13 @@ function renderBody(options) {
|
|
|
11424
11450
|
autoPlay: isPresentationPassive,
|
|
11425
11451
|
fullScreen: isPresentationPassive && Boolean(el.fullScreen),
|
|
11426
11452
|
isPresentationMode: isPresentationPassive,
|
|
11453
|
+
// A still of a slide never carries a transport, whatever the canvas
|
|
11454
|
+
// does. The rule is shared so the five bindings cannot drift on it.
|
|
11455
|
+
showTransport: mediaTransportVisible({
|
|
11456
|
+
presenting: isPresentationPassive === true,
|
|
11457
|
+
preview: isStaticSurface === true,
|
|
11458
|
+
canvasTransport: true
|
|
11459
|
+
}),
|
|
11427
11460
|
onPlayStateChange: handleMediaPlayStateChange
|
|
11428
11461
|
});
|
|
11429
11462
|
}
|
|
@@ -11450,7 +11483,7 @@ function renderBody(options) {
|
|
|
11450
11483
|
}
|
|
11451
11484
|
return renderTextElementBody(options);
|
|
11452
11485
|
}
|
|
11453
|
-
var Extrusion3DOverlay =
|
|
11486
|
+
var Extrusion3DOverlay = React35.memo(({ data }) => {
|
|
11454
11487
|
if (!data.hasExtrusion || data.panels.length === 0) {
|
|
11455
11488
|
return null;
|
|
11456
11489
|
}
|
|
@@ -11483,12 +11516,6 @@ var Extrusion3DOverlay = React34.memo(({ data }) => {
|
|
|
11483
11516
|
] });
|
|
11484
11517
|
});
|
|
11485
11518
|
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
11519
|
|
|
11493
11520
|
// src/viewer/components/elements/scoped-element-handlers.ts
|
|
11494
11521
|
function getScopedElementHandlers(elementId, options) {
|
|
@@ -11555,6 +11582,7 @@ function StaticElementRendererImpl({
|
|
|
11555
11582
|
{
|
|
11556
11583
|
"data-static-element-type": element.type,
|
|
11557
11584
|
"data-element-id": exposeElementId ? element.id : void 0,
|
|
11585
|
+
"data-pptx-element": exposeElementId ? "true" : void 0,
|
|
11558
11586
|
"data-pptx-action": isActionable ? "click" : void 0,
|
|
11559
11587
|
className: `${positioned ? "absolute" : "relative"} overflow-hidden ${isActionable ? "pointer-events-auto cursor-pointer" : "pointer-events-none"}`,
|
|
11560
11588
|
role: contractRole,
|
|
@@ -11631,6 +11659,11 @@ function StaticElementRendererImpl({
|
|
|
11631
11659
|
onCommit: noop,
|
|
11632
11660
|
onCancel: noop,
|
|
11633
11661
|
isPresentationPassive: false,
|
|
11662
|
+
// This renderer only ever paints a STILL of a slide (presenter
|
|
11663
|
+
// console panes, thumbnails, previews). It is not in presentation
|
|
11664
|
+
// mode, so without saying so a video here would carry Chrome's
|
|
11665
|
+
// scrubber over a slide nobody can play.
|
|
11666
|
+
isStaticSurface: true,
|
|
11634
11667
|
slideElements: activeSlide?.elements,
|
|
11635
11668
|
allSlides,
|
|
11636
11669
|
sourceSlideIndex,
|
|
@@ -11643,9 +11676,9 @@ function StaticElementRendererImpl({
|
|
|
11643
11676
|
}
|
|
11644
11677
|
);
|
|
11645
11678
|
}
|
|
11646
|
-
var StaticElementRenderer =
|
|
11679
|
+
var StaticElementRenderer = React35.memo(StaticElementRendererImpl);
|
|
11647
11680
|
StaticElementRenderer.displayName = "StaticElementRenderer";
|
|
11648
|
-
var ElementRenderer =
|
|
11681
|
+
var ElementRenderer = React35.memo(
|
|
11649
11682
|
// oxlint-disable-next-line prefer-arrow-callback -- named fn gives the memo component its displayName
|
|
11650
11683
|
function ElementRendererInner({
|
|
11651
11684
|
element: el,
|
|
@@ -11735,6 +11768,7 @@ var ElementRenderer = React34.memo(
|
|
|
11735
11768
|
() => build3DExtrusionData(shapeStyle3d?.shape3d, shapeStyle3d?.scene3d, fc, el.width, el.height),
|
|
11736
11769
|
[shapeStyle3d?.shape3d, shapeStyle3d?.scene3d, fc, el.width, el.height]
|
|
11737
11770
|
);
|
|
11771
|
+
const actionAffordance = useActionAffordance(el, canInteract);
|
|
11738
11772
|
const [isMediaPlaying, setIsMediaPlaying] = useState(false);
|
|
11739
11773
|
const handleMediaPlayStateChange = useCallback((playing) => {
|
|
11740
11774
|
setIsMediaPlaying(playing);
|
|
@@ -11809,7 +11843,10 @@ var ElementRenderer = React34.memo(
|
|
|
11809
11843
|
effectiveCanInteract || isActionable ? "" : "pointer-events-none",
|
|
11810
11844
|
isFullscreenMedia ? "pointer-events-auto" : "",
|
|
11811
11845
|
selB,
|
|
11812
|
-
|
|
11846
|
+
// Shared class the tooltip's `:hover` rule keys off (see
|
|
11847
|
+
// `ACTION_AFFORDANCE_CSS`), replacing React's Tailwind `group/link`
|
|
11848
|
+
// so the four non-Tailwind bindings reveal it the same way.
|
|
11849
|
+
actionAffordance.showLinkTooltip && LINK_TOOLTIP_HOST_CLASS
|
|
11813
11850
|
),
|
|
11814
11851
|
style: getContainerStyle({
|
|
11815
11852
|
el,
|
|
@@ -11887,20 +11924,7 @@ var ElementRenderer = React34.memo(
|
|
|
11887
11924
|
onUpdateChartElement: chartUpdateHandler,
|
|
11888
11925
|
onFormatText
|
|
11889
11926
|
}),
|
|
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
|
-
),
|
|
11927
|
+
/* @__PURE__ */ jsx(ActionAffordances, { affordance: actionAffordance }),
|
|
11904
11928
|
effectiveShowResizeHandles && !effectiveIsInlineEditing && /* @__PURE__ */ jsx(
|
|
11905
11929
|
ResizeHandles,
|
|
11906
11930
|
{
|
|
@@ -12916,7 +12940,7 @@ function arePropsEqual2(prev, next) {
|
|
|
12916
12940
|
}
|
|
12917
12941
|
return true;
|
|
12918
12942
|
}
|
|
12919
|
-
var SlideThumbnail =
|
|
12943
|
+
var SlideThumbnail = React35.memo(SlideThumbnailImpl, arePropsEqual2);
|
|
12920
12944
|
|
|
12921
12945
|
// src/viewer/components/context-menu-dispatch.ts
|
|
12922
12946
|
function tableCell(props) {
|
|
@@ -13465,7 +13489,7 @@ function LazyThumbnailInner({
|
|
|
13465
13489
|
}
|
|
13466
13490
|
) });
|
|
13467
13491
|
}
|
|
13468
|
-
var LazyThumbnail =
|
|
13492
|
+
var LazyThumbnail = React35.memo(LazyThumbnailInner);
|
|
13469
13493
|
|
|
13470
13494
|
// src/viewer/components/slides-pane/utils.ts
|
|
13471
13495
|
function formatTimingMs(ms) {
|
|
@@ -13619,7 +13643,7 @@ function SlideItemInner({
|
|
|
13619
13643
|
}
|
|
13620
13644
|
);
|
|
13621
13645
|
}
|
|
13622
|
-
var SlideItem =
|
|
13646
|
+
var SlideItem = React35.memo(SlideItemInner);
|
|
13623
13647
|
function useSlidePaneCallbacks(onMoveSlide, onRenameSection) {
|
|
13624
13648
|
const [collapsedSections, setCollapsedSections] = useState({});
|
|
13625
13649
|
const [renamingSectionId, setRenamingSectionId] = useState(null);
|
|
@@ -14896,7 +14920,7 @@ function arePropsEqual3(prev, next) {
|
|
|
14896
14920
|
}
|
|
14897
14921
|
return true;
|
|
14898
14922
|
}
|
|
14899
|
-
var SlideCard =
|
|
14923
|
+
var SlideCard = React35.memo(SlideCardImpl, arePropsEqual3);
|
|
14900
14924
|
function SorterContextMenu({
|
|
14901
14925
|
x,
|
|
14902
14926
|
y,
|
|
@@ -18725,102 +18749,121 @@ function PresentationSubtitleBar({
|
|
|
18725
18749
|
function renderNotesSegments(segments) {
|
|
18726
18750
|
return notesSegmentsToSpans(segments).map((span) => {
|
|
18727
18751
|
if (span.kind === "break") {
|
|
18728
|
-
return
|
|
18752
|
+
return React35.createElement("br", { key: span.key });
|
|
18729
18753
|
}
|
|
18730
|
-
return
|
|
18754
|
+
return React35.createElement(
|
|
18731
18755
|
"span",
|
|
18732
18756
|
{ key: span.key, style: span.style },
|
|
18733
18757
|
span.text
|
|
18734
18758
|
);
|
|
18735
18759
|
});
|
|
18736
18760
|
}
|
|
18737
|
-
var
|
|
18761
|
+
var CONSOLE_ICONS = {
|
|
18762
|
+
"arrow-left-right": LuArrowLeftRight,
|
|
18763
|
+
captions: LuCaptions,
|
|
18764
|
+
"circle-pause": LuCirclePause,
|
|
18765
|
+
"circle-play": LuCirclePlay,
|
|
18766
|
+
eraser: LuEraser,
|
|
18767
|
+
"grid-2x2": LuGrid2X2,
|
|
18768
|
+
highlighter: LuHighlighter,
|
|
18769
|
+
monitor: LuMonitor,
|
|
18770
|
+
"monitor-off": LuMonitorOff,
|
|
18771
|
+
"mouse-pointer-2": LuMousePointer2,
|
|
18772
|
+
"pen-tool": LuPenTool,
|
|
18773
|
+
"rotate-ccw": LuRotateCcw,
|
|
18774
|
+
scan: LuScan,
|
|
18775
|
+
x: LuX,
|
|
18776
|
+
"zoom-in": LuZoomIn,
|
|
18777
|
+
"zoom-out": LuZoomOut
|
|
18778
|
+
};
|
|
18779
|
+
var POINTER_TOOLS = {
|
|
18780
|
+
laser: "laser",
|
|
18781
|
+
pen: "pen",
|
|
18782
|
+
highlighter: "highlighter",
|
|
18783
|
+
eraser: "eraser"
|
|
18784
|
+
};
|
|
18785
|
+
function slotState(control, props) {
|
|
18786
|
+
const snapshot = props.snapshot;
|
|
18787
|
+
const pointerTool = snapshot.pointer?.tool ?? "none";
|
|
18788
|
+
const tool = POINTER_TOOLS[control.id];
|
|
18789
|
+
if (tool) {
|
|
18790
|
+
return {
|
|
18791
|
+
active: pointerTool === tool,
|
|
18792
|
+
onClick: () => props.onPointerTool(pointerTool === tool ? "none" : tool)
|
|
18793
|
+
};
|
|
18794
|
+
}
|
|
18795
|
+
switch (control.id) {
|
|
18796
|
+
case "timer-toggle":
|
|
18797
|
+
return { active: Boolean(snapshot.paused), onClick: props.onToggleTimer };
|
|
18798
|
+
case "timer-reset":
|
|
18799
|
+
return { active: false, onClick: props.onResetTimer };
|
|
18800
|
+
case "all-slides":
|
|
18801
|
+
return { active: false, onClick: props.onShowSlides };
|
|
18802
|
+
case "zoom-in":
|
|
18803
|
+
return { active: (snapshot.zoom?.scale ?? 1) > 1, onClick: () => props.onStepZoom(1) };
|
|
18804
|
+
case "zoom-out":
|
|
18805
|
+
return { active: false, onClick: () => props.onStepZoom(-1) };
|
|
18806
|
+
case "zoom-reset":
|
|
18807
|
+
return { active: false, onClick: props.onResetZoom };
|
|
18808
|
+
case "blackout-black":
|
|
18809
|
+
return {
|
|
18810
|
+
active: snapshot.blackout === "black",
|
|
18811
|
+
onClick: () => props.onBlackout(snapshot.blackout === "black" ? "none" : "black")
|
|
18812
|
+
};
|
|
18813
|
+
case "blackout-white":
|
|
18814
|
+
return {
|
|
18815
|
+
active: snapshot.blackout === "white",
|
|
18816
|
+
onClick: () => props.onBlackout(snapshot.blackout === "white" ? "none" : "white")
|
|
18817
|
+
};
|
|
18818
|
+
case "captions":
|
|
18819
|
+
return { active: Boolean(snapshot.subtitlesVisible), onClick: props.onToggleSubtitles };
|
|
18820
|
+
case "audience":
|
|
18821
|
+
return { active: props.audienceOpen, onClick: props.onToggleAudience };
|
|
18822
|
+
case "swap-displays":
|
|
18823
|
+
return { active: false, onClick: props.onSwapDisplays, disabled: !props.audienceOpen };
|
|
18824
|
+
case "end":
|
|
18825
|
+
return { active: false, onClick: props.onExit };
|
|
18826
|
+
default:
|
|
18827
|
+
return { active: false, onClick: () => void 0 };
|
|
18828
|
+
}
|
|
18829
|
+
}
|
|
18738
18830
|
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(
|
|
18831
|
+
const { t } = useTranslation();
|
|
18832
|
+
return /* @__PURE__ */ jsx("div", { className: PRESENTER_CONSOLE_CLASSES.strip, "data-pptx-presenter-toolbar": true, children: PRESENTER_CONSOLE_CONTROLS.map((control) => {
|
|
18833
|
+
if (control.kind === "divider" || control.kind === "spacer") {
|
|
18834
|
+
return /* @__PURE__ */ jsx(
|
|
18835
|
+
"span",
|
|
18836
|
+
{
|
|
18837
|
+
"data-pptx-presenter-control": control.id,
|
|
18838
|
+
className: control.kind === "divider" ? PRESENTER_CONSOLE_CLASSES.divider : PRESENTER_CONSOLE_CLASSES.spacer
|
|
18839
|
+
},
|
|
18840
|
+
control.id
|
|
18841
|
+
);
|
|
18842
|
+
}
|
|
18843
|
+
const state = slotState(control, props);
|
|
18844
|
+
const labelKey = state.active && control.activeLabelKey ? control.activeLabelKey : control.labelKey;
|
|
18845
|
+
const iconName = state.active && control.activeIcon ? control.activeIcon : control.icon;
|
|
18846
|
+
const Icon = iconName === void 0 ? void 0 : CONSOLE_ICONS[iconName];
|
|
18847
|
+
const label = labelKey === void 0 ? void 0 : t(labelKey);
|
|
18848
|
+
return /* @__PURE__ */ jsxs(
|
|
18762
18849
|
"button",
|
|
18763
18850
|
{
|
|
18764
|
-
|
|
18765
|
-
|
|
18766
|
-
|
|
18767
|
-
|
|
18851
|
+
type: "button",
|
|
18852
|
+
"data-pptx-presenter-control": control.id,
|
|
18853
|
+
className: state.active ? PRESENTER_CONSOLE_CLASSES.controlActive : PRESENTER_CONSOLE_CLASSES.control,
|
|
18854
|
+
onClick: state.onClick,
|
|
18855
|
+
disabled: state.disabled,
|
|
18856
|
+
"aria-label": label,
|
|
18857
|
+
title: label,
|
|
18858
|
+
"aria-pressed": control.kind === "toggle" ? state.active : void 0,
|
|
18859
|
+
children: [
|
|
18860
|
+
Icon ? /* @__PURE__ */ jsx(Icon, {}) : null,
|
|
18861
|
+
control.glyph
|
|
18862
|
+
]
|
|
18768
18863
|
},
|
|
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
|
-
] });
|
|
18864
|
+
control.id
|
|
18865
|
+
);
|
|
18866
|
+
}) });
|
|
18824
18867
|
}
|
|
18825
18868
|
function ScaledSlidePreviewImpl({
|
|
18826
18869
|
slide,
|
|
@@ -18934,7 +18977,7 @@ function arePropsEqual4(prev, next) {
|
|
|
18934
18977
|
}
|
|
18935
18978
|
return true;
|
|
18936
18979
|
}
|
|
18937
|
-
var ScaledSlidePreview =
|
|
18980
|
+
var ScaledSlidePreview = React35.memo(ScaledSlidePreviewImpl, arePropsEqual4);
|
|
18938
18981
|
function PresenterNotesRail({
|
|
18939
18982
|
slides,
|
|
18940
18983
|
current,
|
|
@@ -18957,14 +19000,14 @@ function PresenterNotesRail({
|
|
|
18957
19000
|
() => notesSegments?.length ? renderNotesSegments(notesSegments) : notesText.trim() ? notesText : /* @__PURE__ */ jsx("span", { className: "italic text-muted-foreground", children: t("pptx.presenter.noNotes") }),
|
|
18958
19001
|
[notesSegments, notesText, t]
|
|
18959
19002
|
);
|
|
18960
|
-
return /* @__PURE__ */ jsxs("aside", { className:
|
|
19003
|
+
return /* @__PURE__ */ jsxs("aside", { className: PRESENTER_CONSOLE_CLASSES.rail, children: [
|
|
18961
19004
|
/* @__PURE__ */ jsxs("header", { className: "flex items-center justify-between border-b border-border/60 px-4 py-3", children: [
|
|
18962
19005
|
/* @__PURE__ */ jsxs("div", { children: [
|
|
18963
|
-
/* @__PURE__ */ jsx("div", { className:
|
|
19006
|
+
/* @__PURE__ */ jsx("div", { className: PRESENTER_CONSOLE_CLASSES.railHeading, children: t("pptx.presenter.currentTime") }),
|
|
18964
19007
|
/* @__PURE__ */ jsx("div", { className: "font-mono text-lg tabular-nums", children: formatTime(new Date(now)) })
|
|
18965
19008
|
] }),
|
|
18966
19009
|
/* @__PURE__ */ jsxs("div", { className: "text-right", children: [
|
|
18967
|
-
/* @__PURE__ */ jsx("div", { className:
|
|
19010
|
+
/* @__PURE__ */ jsx("div", { className: PRESENTER_CONSOLE_CLASSES.railHeading, children: t("pptx.presenter.elapsed") }),
|
|
18968
19011
|
/* @__PURE__ */ jsx("div", { className: "font-mono text-lg tabular-nums text-primary", children: formatElapsed(elapsed) })
|
|
18969
19012
|
] })
|
|
18970
19013
|
] }),
|
|
@@ -18974,7 +19017,8 @@ function PresenterNotesRail({
|
|
|
18974
19017
|
{
|
|
18975
19018
|
type: "button",
|
|
18976
19019
|
onClick: () => onMove(-1),
|
|
18977
|
-
disabled: current
|
|
19020
|
+
disabled: presenterPrevDisabled(current),
|
|
19021
|
+
"data-pptx-presenter-control": "prev",
|
|
18978
19022
|
className: "inline-flex items-center gap-1 rounded bg-muted px-3 py-1.5 text-xs disabled:opacity-40",
|
|
18979
19023
|
children: [
|
|
18980
19024
|
/* @__PURE__ */ jsx(LuChevronLeft, {}),
|
|
@@ -18993,6 +19037,8 @@ function PresenterNotesRail({
|
|
|
18993
19037
|
{
|
|
18994
19038
|
type: "button",
|
|
18995
19039
|
onClick: () => onMove(1),
|
|
19040
|
+
disabled: presenterNextDisabled(),
|
|
19041
|
+
"data-pptx-presenter-control": "next",
|
|
18996
19042
|
className: "inline-flex items-center gap-1 rounded bg-muted px-3 py-1.5 text-xs disabled:opacity-40",
|
|
18997
19043
|
children: [
|
|
18998
19044
|
t("pptx.presenter.next"),
|
|
@@ -19002,8 +19048,8 @@ function PresenterNotesRail({
|
|
|
19002
19048
|
}
|
|
19003
19049
|
)
|
|
19004
19050
|
] }),
|
|
19005
|
-
/* @__PURE__ */ jsxs("section", { className: "border-b border-border/60 px-4 py-3", children: [
|
|
19006
|
-
/* @__PURE__ */ jsx("div", { className:
|
|
19051
|
+
/* @__PURE__ */ jsxs("section", { className: "border-b border-border/60 px-4 py-3", "data-pptx-presenter-next-preview": true, children: [
|
|
19052
|
+
/* @__PURE__ */ jsx("div", { className: `mb-2 ${PRESENTER_CONSOLE_CLASSES.railHeading}`, children: t("pptx.presenter.nextSlidePreview") }),
|
|
19007
19053
|
nextSlide ? /* @__PURE__ */ jsx(
|
|
19008
19054
|
ScaledSlidePreview,
|
|
19009
19055
|
{
|
|
@@ -19013,9 +19059,9 @@ function PresenterNotesRail({
|
|
|
19013
19059
|
}
|
|
19014
19060
|
) : /* @__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
19061
|
] }),
|
|
19016
|
-
/* @__PURE__ */ jsxs("section", { className: "flex min-h-0 flex-1 flex-col px-4 py-3", children: [
|
|
19062
|
+
/* @__PURE__ */ jsxs("section", { className: "flex min-h-0 flex-1 flex-col px-4 py-3", "data-pptx-presenter-notes": true, children: [
|
|
19017
19063
|
/* @__PURE__ */ jsxs("div", { className: "mb-2 flex items-center justify-between", children: [
|
|
19018
|
-
/* @__PURE__ */ jsx("div", { className:
|
|
19064
|
+
/* @__PURE__ */ jsx("div", { className: PRESENTER_CONSOLE_CLASSES.railHeading, children: t("pptx.presenter.speakerNotes") }),
|
|
19019
19065
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1", children: [
|
|
19020
19066
|
/* @__PURE__ */ jsx(
|
|
19021
19067
|
"button",
|
|
@@ -19023,6 +19069,7 @@ function PresenterNotesRail({
|
|
|
19023
19069
|
type: "button",
|
|
19024
19070
|
onClick: () => setFontSize(clampNotesFontSize(fontSize - NOTES_FONT_SIZE_STEP)),
|
|
19025
19071
|
disabled: fontSize <= NOTES_FONT_SIZE_MIN,
|
|
19072
|
+
"data-pptx-presenter-control": "notes-font-decrease",
|
|
19026
19073
|
"aria-label": t("pptx.presenter.decreaseFontSize"),
|
|
19027
19074
|
children: /* @__PURE__ */ jsx(LuMinus, {})
|
|
19028
19075
|
}
|
|
@@ -19037,6 +19084,7 @@ function PresenterNotesRail({
|
|
|
19037
19084
|
type: "button",
|
|
19038
19085
|
onClick: () => setFontSize(clampNotesFontSize(fontSize + NOTES_FONT_SIZE_STEP)),
|
|
19039
19086
|
disabled: fontSize >= NOTES_FONT_SIZE_MAX,
|
|
19087
|
+
"data-pptx-presenter-control": "notes-font-increase",
|
|
19040
19088
|
"aria-label": t("pptx.presenter.increaseFontSize"),
|
|
19041
19089
|
children: /* @__PURE__ */ jsx(LuPlus, {})
|
|
19042
19090
|
}
|
|
@@ -19065,17 +19113,27 @@ function PresenterNotesRail({
|
|
|
19065
19113
|
] });
|
|
19066
19114
|
}
|
|
19067
19115
|
function PresenterSlideNavigator(props) {
|
|
19068
|
-
|
|
19069
|
-
|
|
19116
|
+
const { t } = useTranslation();
|
|
19117
|
+
return /* @__PURE__ */ jsxs("div", { className: `${PRESENTER_CONSOLE_CLASSES.navigator} text-foreground`, children: [
|
|
19118
|
+
/* @__PURE__ */ jsxs("header", { className: "mb-4 flex items-center justify-between border-b border-border pb-4", children: [
|
|
19070
19119
|
/* @__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:
|
|
19120
|
+
/* @__PURE__ */ jsx("p", { className: "text-xs uppercase tracking-[0.22em] text-sky-300", children: t(PRESENTER_NAVIGATOR_LABEL_KEYS.title) }),
|
|
19121
|
+
/* @__PURE__ */ jsx("h2", { className: "text-xl font-semibold", children: t(PRESENTER_NAVIGATOR_LABEL_KEYS.subtitle) })
|
|
19073
19122
|
] }),
|
|
19074
|
-
/* @__PURE__ */ jsx(
|
|
19123
|
+
/* @__PURE__ */ jsx(
|
|
19124
|
+
"button",
|
|
19125
|
+
{
|
|
19126
|
+
type: "button",
|
|
19127
|
+
className: "rounded-md bg-muted px-4 py-2 hover:bg-accent",
|
|
19128
|
+
onClick: props.onClose,
|
|
19129
|
+
children: t(PRESENTER_NAVIGATOR_LABEL_KEYS.close)
|
|
19130
|
+
}
|
|
19131
|
+
)
|
|
19075
19132
|
] }),
|
|
19076
|
-
/* @__PURE__ */ jsx("div", { className:
|
|
19133
|
+
/* @__PURE__ */ jsx("div", { className: PRESENTER_CONSOLE_CLASSES.navigatorGrid, children: props.slides.map((slide, index) => /* @__PURE__ */ jsxs(
|
|
19077
19134
|
"button",
|
|
19078
19135
|
{
|
|
19136
|
+
type: "button",
|
|
19079
19137
|
className: `group text-left ${index === props.current ? "ring-2 ring-sky-400" : ""} ${slide.hidden ? "opacity-45" : ""}`,
|
|
19080
19138
|
onClick: () => props.onSelect(index),
|
|
19081
19139
|
children: [
|
|
@@ -19219,10 +19277,8 @@ function PresenterView({
|
|
|
19219
19277
|
if (!currentSlide) {
|
|
19220
19278
|
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
19279
|
}
|
|
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: [
|
|
19280
|
+
const timerProgress = presenterTimerProgress(elapsed);
|
|
19281
|
+
return /* @__PURE__ */ jsxs("div", { className: PRESENTER_CONSOLE_CLASSES.root, children: [
|
|
19226
19282
|
/* @__PURE__ */ jsx(
|
|
19227
19283
|
PresenterConsoleToolbar,
|
|
19228
19284
|
{
|
|
@@ -19243,14 +19299,14 @@ function PresenterView({
|
|
|
19243
19299
|
onExit
|
|
19244
19300
|
}
|
|
19245
19301
|
),
|
|
19246
|
-
/* @__PURE__ */ jsxs("div", { className:
|
|
19302
|
+
/* @__PURE__ */ jsxs("div", { className: PRESENTER_CONSOLE_CLASSES.body, children: [
|
|
19247
19303
|
/* @__PURE__ */ jsxs(
|
|
19248
19304
|
"div",
|
|
19249
19305
|
{
|
|
19250
19306
|
role: "presentation",
|
|
19251
19307
|
"data-pptx-presenter-slide": true,
|
|
19252
19308
|
onClick: handleSlidePaneClick,
|
|
19253
|
-
className:
|
|
19309
|
+
className: `${PRESENTER_CONSOLE_CLASSES.main} ${paneAdvancesOnClick ? "cursor-pointer" : ""}`,
|
|
19254
19310
|
children: [
|
|
19255
19311
|
endOfShowVisible && /* @__PURE__ */ jsx(PresentationEndOverlay, { onExit: () => onMovePresentationSlide(1) }),
|
|
19256
19312
|
/* @__PURE__ */ jsxs(
|
|
@@ -19320,18 +19376,21 @@ function PresenterView({
|
|
|
19320
19376
|
/* @__PURE__ */ jsx(
|
|
19321
19377
|
"div",
|
|
19322
19378
|
{
|
|
19323
|
-
className:
|
|
19379
|
+
className: PRESENTER_CONSOLE_CLASSES.progressTrack,
|
|
19324
19380
|
role: "progressbar",
|
|
19325
|
-
"aria-valuenow": Math.round(timerProgress),
|
|
19381
|
+
"aria-valuenow": Math.round(timerProgress.percent),
|
|
19326
19382
|
"aria-valuemin": 0,
|
|
19327
19383
|
"aria-valuemax": 100,
|
|
19328
19384
|
"aria-label": t("pptx.presenter.timerProgress"),
|
|
19329
|
-
title:
|
|
19385
|
+
title: t("pptx.presenter.timerTitle", {
|
|
19386
|
+
elapsed: formatElapsed(elapsed),
|
|
19387
|
+
segment: timerProgress.segment + 1
|
|
19388
|
+
}),
|
|
19330
19389
|
children: /* @__PURE__ */ jsx(
|
|
19331
19390
|
"div",
|
|
19332
19391
|
{
|
|
19333
|
-
className:
|
|
19334
|
-
style: { width: `${timerProgress}%` }
|
|
19392
|
+
className: PRESENTER_CONSOLE_CLASSES.progressFill,
|
|
19393
|
+
style: { width: `${timerProgress.percent}%` }
|
|
19335
19394
|
}
|
|
19336
19395
|
)
|
|
19337
19396
|
}
|
|
@@ -19362,8 +19421,8 @@ function MobilePresenterView({
|
|
|
19362
19421
|
const notesText = currentSlide.notes ?? "";
|
|
19363
19422
|
const notesSegments = currentSlide.notesSegments;
|
|
19364
19423
|
const hasRichNotes = notesSegments && notesSegments.length > 0;
|
|
19365
|
-
const
|
|
19366
|
-
const
|
|
19424
|
+
const prevDisabled = presenterPrevDisabled(currentSlideIndex);
|
|
19425
|
+
const nextDisabled = presenterNextDisabled();
|
|
19367
19426
|
const insetStyle = {
|
|
19368
19427
|
paddingTop: "env(safe-area-inset-top, 0px)",
|
|
19369
19428
|
paddingBottom: "env(safe-area-inset-bottom, 0px)",
|
|
@@ -19417,8 +19476,9 @@ function MobilePresenterView({
|
|
|
19417
19476
|
"button",
|
|
19418
19477
|
{
|
|
19419
19478
|
type: "button",
|
|
19479
|
+
"data-pptx-presenter-control": "prev",
|
|
19420
19480
|
onClick: () => onMovePresentationSlide(-1),
|
|
19421
|
-
disabled:
|
|
19481
|
+
disabled: prevDisabled,
|
|
19422
19482
|
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
19483
|
title: t("pptx.presenter.previousSlide"),
|
|
19424
19484
|
"aria-label": t("pptx.presenter.previousSlide"),
|
|
@@ -19432,8 +19492,9 @@ function MobilePresenterView({
|
|
|
19432
19492
|
"button",
|
|
19433
19493
|
{
|
|
19434
19494
|
type: "button",
|
|
19495
|
+
"data-pptx-presenter-control": "next",
|
|
19435
19496
|
onClick: () => onMovePresentationSlide(1),
|
|
19436
|
-
disabled:
|
|
19497
|
+
disabled: nextDisabled,
|
|
19437
19498
|
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
19499
|
title: t("pptx.presenter.nextSlide"),
|
|
19439
19500
|
"aria-label": t("pptx.presenter.nextSlide"),
|
|
@@ -22426,7 +22487,7 @@ function ConnectorArrowsSection({
|
|
|
22426
22487
|
["Start", "End"].map((end) => {
|
|
22427
22488
|
const widthKey = end === "Start" ? "connectorStartArrowWidth" : "connectorEndArrowWidth";
|
|
22428
22489
|
const lengthKey = end === "Start" ? "connectorStartArrowLength" : "connectorEndArrowLength";
|
|
22429
|
-
return /* @__PURE__ */ jsxs(
|
|
22490
|
+
return /* @__PURE__ */ jsxs(React35.Fragment, { children: [
|
|
22430
22491
|
/* @__PURE__ */ jsxs("label", { className: "flex flex-col gap-1", children: [
|
|
22431
22492
|
/* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: t(END_LABEL_KEYS[end].width) }),
|
|
22432
22493
|
/* @__PURE__ */ jsx(
|
|
@@ -25255,7 +25316,7 @@ function StrokeEffectsSection({
|
|
|
25255
25316
|
] }),
|
|
25256
25317
|
EFFECT_CONFIGS.map((cfg) => {
|
|
25257
25318
|
const on = cfg.isOn(style);
|
|
25258
|
-
return /* @__PURE__ */ jsxs(
|
|
25319
|
+
return /* @__PURE__ */ jsxs(React35.Fragment, { children: [
|
|
25259
25320
|
/* @__PURE__ */ jsxs("label", { className: `inline-flex items-center gap-2 text-foreground ${COL2}`, children: [
|
|
25260
25321
|
/* @__PURE__ */ jsx(
|
|
25261
25322
|
"input",
|
|
@@ -26092,7 +26153,7 @@ function TextWarpGallery({
|
|
|
26092
26153
|
onUpdateTextStyle
|
|
26093
26154
|
}) {
|
|
26094
26155
|
const { t } = useTranslation();
|
|
26095
|
-
const [expanded, setExpanded] =
|
|
26156
|
+
const [expanded, setExpanded] = React35.useState(false);
|
|
26096
26157
|
const currentPreset = ts?.textWarpPreset || "textNoShape";
|
|
26097
26158
|
return /* @__PURE__ */ jsxs("div", { className: "mt-2 rounded border border-border bg-card p-2 space-y-2", children: [
|
|
26098
26159
|
/* @__PURE__ */ jsxs(
|
|
@@ -26808,7 +26869,7 @@ function SmartArtStyleControls({
|
|
|
26808
26869
|
onChangeStyle
|
|
26809
26870
|
}) {
|
|
26810
26871
|
const { t } = useTranslation();
|
|
26811
|
-
const translate =
|
|
26872
|
+
const translate = React35.useCallback((key) => t(key), [t]);
|
|
26812
26873
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
26813
26874
|
/* @__PURE__ */ jsxs("label", { className: "flex flex-col gap-1 text-[11px]", children: [
|
|
26814
26875
|
/* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: t("pptx.smartart.colorScheme") }),
|
|
@@ -26864,9 +26925,9 @@ function SmartArtPropertiesPanel({
|
|
|
26864
26925
|
const nodes = smartArtData.nodes ?? [];
|
|
26865
26926
|
const layout = smartArtData.resolvedLayoutType;
|
|
26866
26927
|
const topLevelCount = nodes.filter((n) => !n.parentId).length;
|
|
26867
|
-
const inputRefs =
|
|
26868
|
-
const pendingFocusId =
|
|
26869
|
-
|
|
26928
|
+
const inputRefs = React35.useRef(/* @__PURE__ */ new Map());
|
|
26929
|
+
const pendingFocusId = React35.useRef(null);
|
|
26930
|
+
React35.useEffect(() => {
|
|
26870
26931
|
const id = pendingFocusId.current;
|
|
26871
26932
|
if (id) {
|
|
26872
26933
|
inputRefs.current.get(id)?.focus();
|
|
@@ -29308,7 +29369,7 @@ function PresentationPropertiesPanel({
|
|
|
29308
29369
|
onUpdateTagCollections
|
|
29309
29370
|
}) {
|
|
29310
29371
|
const { t } = useTranslation();
|
|
29311
|
-
const handleTransitionChange =
|
|
29372
|
+
const handleTransitionChange = React35.useCallback(
|
|
29312
29373
|
(updates) => {
|
|
29313
29374
|
onUpdateSlide({
|
|
29314
29375
|
transition: mergeSlideTransition(activeSlide?.transition, updates)
|
|
@@ -33241,7 +33302,7 @@ function ViewerToolbarSection(props) {
|
|
|
33241
33302
|
},
|
|
33242
33303
|
[activeSlide, propertyHandlers]
|
|
33243
33304
|
);
|
|
33244
|
-
const scopedLayoutOptions =
|
|
33305
|
+
const scopedLayoutOptions = React35.useMemo(
|
|
33245
33306
|
() => scopeLayoutOptionsToActiveSlide(s.layoutOptions, activeSlide),
|
|
33246
33307
|
[s.layoutOptions, activeSlide]
|
|
33247
33308
|
);
|
|
@@ -34995,7 +35056,7 @@ ${url}`)) {
|
|
|
34995
35056
|
)
|
|
34996
35057
|
);
|
|
34997
35058
|
}
|
|
34998
|
-
var AiChatPanel = lazy(() => import('./AiChatPanel-
|
|
35059
|
+
var AiChatPanel = lazy(() => import('./AiChatPanel-4YS6DEIT.mjs'));
|
|
34999
35060
|
function AiChatPanelLazy(props) {
|
|
35000
35061
|
return /* @__PURE__ */ jsx(
|
|
35001
35062
|
Suspense,
|