pptx-react-viewer 3.0.3 → 3.1.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 +19 -0
- package/dist/{AiChatPanel-DYOBY6OG.mjs → AiChatPanel-5LCCN7FG.mjs} +4 -4
- package/dist/AiChatPanel-5LCCN7FG.mjs.br +0 -0
- package/dist/AiChatPanel-5LCCN7FG.mjs.gz +0 -0
- package/dist/{AiChatPanel-235ZZA3Y.js → AiChatPanel-WVORGKRT.js} +24 -24
- package/dist/AiChatPanel-WVORGKRT.js.br +0 -0
- package/dist/AiChatPanel-WVORGKRT.js.gz +0 -0
- package/dist/Area3DChartScene-DY5CSLE2.js +47 -0
- package/dist/Area3DChartScene-DY5CSLE2.js.br +0 -0
- package/dist/Area3DChartScene-DY5CSLE2.js.gz +0 -0
- package/dist/Area3DChartScene-W6UZTRDP.mjs +45 -0
- package/dist/Area3DChartScene-W6UZTRDP.mjs.br +0 -0
- package/dist/Area3DChartScene-W6UZTRDP.mjs.gz +0 -0
- package/dist/Bar3DChartScene-7HZSPYG4.js +47 -0
- package/dist/Bar3DChartScene-7HZSPYG4.js.br +0 -0
- package/dist/Bar3DChartScene-7HZSPYG4.js.gz +0 -0
- package/dist/Bar3DChartScene-FCWQEQLH.mjs +45 -0
- package/dist/Bar3DChartScene-FCWQEQLH.mjs.br +0 -0
- package/dist/Bar3DChartScene-FCWQEQLH.mjs.gz +0 -0
- package/dist/Line3DChartScene-BKO24WYO.js +47 -0
- package/dist/Line3DChartScene-BKO24WYO.js.br +0 -0
- package/dist/Line3DChartScene-BKO24WYO.js.gz +0 -0
- package/dist/Line3DChartScene-EPPWQOHS.mjs +45 -0
- package/dist/Line3DChartScene-EPPWQOHS.mjs.br +0 -0
- package/dist/Line3DChartScene-EPPWQOHS.mjs.gz +0 -0
- package/dist/{Model3DScene-A3652H7T.mjs → Model3DScene-IAY33GO2.mjs} +1 -1
- package/dist/Model3DScene-IAY33GO2.mjs.br +0 -0
- package/dist/Model3DScene-IAY33GO2.mjs.gz +0 -0
- package/dist/{Model3DScene-5QDYQF55.js → Model3DScene-JFVRE5VL.js} +2 -2
- package/dist/Model3DScene-JFVRE5VL.js.br +0 -0
- package/dist/Model3DScene-JFVRE5VL.js.gz +0 -0
- package/dist/PieChart3DScene-IPH7GLKU.js +47 -0
- package/dist/PieChart3DScene-IPH7GLKU.js.br +0 -0
- package/dist/PieChart3DScene-IPH7GLKU.js.gz +0 -0
- package/dist/PieChart3DScene-ZP5TSL62.mjs +45 -0
- package/dist/PieChart3DScene-ZP5TSL62.mjs.br +0 -0
- package/dist/PieChart3DScene-ZP5TSL62.mjs.gz +0 -0
- package/dist/{PowerPointViewer-SkkxAGKa.d.ts → PowerPointViewer-Cl6jBPNw.d.ts} +2 -2
- package/dist/PowerPointViewer-Cl6jBPNw.d.ts.map +1 -0
- package/dist/{SurfaceChart3DScene-N66TY4SW.mjs → SurfaceChart3DScene-DOMJGPAD.mjs} +1 -1
- package/dist/SurfaceChart3DScene-DOMJGPAD.mjs.br +0 -0
- package/dist/SurfaceChart3DScene-DOMJGPAD.mjs.gz +0 -0
- package/dist/{SurfaceChart3DScene-QHENN3AF.js → SurfaceChart3DScene-TGDBVJSW.js} +2 -2
- package/dist/SurfaceChart3DScene-TGDBVJSW.js.br +0 -0
- package/dist/SurfaceChart3DScene-TGDBVJSW.js.gz +0 -0
- package/dist/{audience-content-store-Bx4Yj2pN.d.ts → audience-content-store-bR7Gs_1S.d.ts} +2 -2
- package/dist/{audience-content-store-Bx4Yj2pN.d.ts.map → audience-content-store-bR7Gs_1S.d.ts.map} +1 -1
- package/dist/{chunk-UU6NFFRR.js → chunk-7JZLE56X.js} +170 -169
- package/dist/chunk-7JZLE56X.js.br +0 -0
- package/dist/chunk-7JZLE56X.js.gz +0 -0
- package/dist/{chunk-Z4RY432D.js → chunk-A5EUD6UU.js} +2575 -1965
- package/dist/chunk-A5EUD6UU.js.br +0 -0
- package/dist/chunk-A5EUD6UU.js.gz +0 -0
- package/dist/{chunk-M2TISD4A.mjs → chunk-BP2L2KOZ.mjs} +6183 -2447
- package/dist/chunk-BP2L2KOZ.mjs.br +0 -0
- package/dist/chunk-BP2L2KOZ.mjs.gz +0 -0
- package/dist/{chunk-L5MNLIQF.mjs → chunk-MKPSUHUH.mjs} +25 -0
- package/dist/chunk-MKPSUHUH.mjs.br +0 -0
- package/dist/chunk-MKPSUHUH.mjs.gz +0 -0
- package/dist/{chunk-U6A5FWWE.js → chunk-PIUB7R2K.js} +25 -0
- package/dist/chunk-PIUB7R2K.js.br +0 -0
- package/dist/chunk-PIUB7R2K.js.gz +0 -0
- package/dist/{chunk-7HUYHWQS.js → chunk-POAZ53L5.js} +480 -532
- package/dist/chunk-POAZ53L5.js.br +0 -0
- package/dist/chunk-POAZ53L5.js.gz +0 -0
- package/dist/{chunk-EVXT7HLY.mjs → chunk-PQNZCSB7.mjs} +1 -1
- package/dist/chunk-PQNZCSB7.mjs.br +0 -0
- package/dist/{chunk-EVXT7HLY.mjs.gz → chunk-PQNZCSB7.mjs.gz} +0 -0
- package/dist/{chunk-QG7TXWXP.mjs → chunk-SNWAM2XJ.mjs} +17 -16
- package/dist/chunk-SNWAM2XJ.mjs.br +0 -0
- package/dist/chunk-SNWAM2XJ.mjs.gz +0 -0
- package/dist/{chunk-35YJ5RLU.js → chunk-T7BAPZBY.js} +6214 -2447
- package/dist/chunk-T7BAPZBY.js.br +0 -0
- package/dist/chunk-T7BAPZBY.js.gz +0 -0
- package/dist/{chunk-CY24IMMZ.mjs → chunk-TIEUZCYQ.mjs} +761 -151
- package/dist/chunk-TIEUZCYQ.mjs.br +0 -0
- package/dist/chunk-TIEUZCYQ.mjs.gz +0 -0
- package/dist/{chunk-YISXETNN.mjs → chunk-VMLKJDA5.mjs} +97 -149
- package/dist/chunk-VMLKJDA5.mjs.br +0 -0
- package/dist/chunk-VMLKJDA5.mjs.gz +0 -0
- package/dist/{chunk-GJ7E44BG.js → chunk-VQVC27WL.js} +3 -3
- package/dist/chunk-VQVC27WL.js.br +0 -0
- package/dist/chunk-VQVC27WL.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 +202 -9
- package/dist/index.js +47 -47
- 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 +164 -20
- package/dist/internals.d.ts.map +1 -1
- package/dist/internals.js +79 -79
- package/dist/internals.js.br +7 -3
- 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/{types-kLpvSPxq.d.ts → types-Bzdkiakq.d.ts} +44 -1
- package/dist/{types-kLpvSPxq.d.ts.map → types-Bzdkiakq.d.ts.map} +1 -1
- package/dist/{useViewerBuildingBlocks-fh7rq4jc.d.ts → useViewerBuildingBlocks-DC1O_op4.d.ts} +2 -2
- package/dist/{useViewerBuildingBlocks-fh7rq4jc.d.ts.map → useViewerBuildingBlocks-DC1O_op4.d.ts.map} +1 -1
- package/dist/viewer/index.d.ts +196 -6
- package/dist/viewer/index.js +27 -27
- 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 +5 -5
- package/dist/AiChatPanel-235ZZA3Y.js.br +0 -0
- package/dist/AiChatPanel-235ZZA3Y.js.gz +0 -0
- package/dist/AiChatPanel-DYOBY6OG.mjs.br +0 -0
- package/dist/AiChatPanel-DYOBY6OG.mjs.gz +0 -0
- package/dist/Model3DScene-5QDYQF55.js.br +0 -0
- package/dist/Model3DScene-5QDYQF55.js.gz +0 -0
- package/dist/Model3DScene-A3652H7T.mjs.br +0 -0
- package/dist/Model3DScene-A3652H7T.mjs.gz +0 -0
- package/dist/PowerPointViewer-SkkxAGKa.d.ts.map +0 -1
- package/dist/SurfaceChart3DScene-N66TY4SW.mjs.br +0 -0
- package/dist/SurfaceChart3DScene-N66TY4SW.mjs.gz +0 -0
- package/dist/SurfaceChart3DScene-QHENN3AF.js.br +0 -0
- package/dist/SurfaceChart3DScene-QHENN3AF.js.gz +0 -0
- package/dist/chunk-35YJ5RLU.js.br +0 -0
- package/dist/chunk-35YJ5RLU.js.gz +0 -0
- package/dist/chunk-7HUYHWQS.js.br +0 -0
- package/dist/chunk-7HUYHWQS.js.gz +0 -0
- package/dist/chunk-CY24IMMZ.mjs.br +0 -0
- package/dist/chunk-CY24IMMZ.mjs.gz +0 -0
- package/dist/chunk-EVXT7HLY.mjs.br +0 -0
- package/dist/chunk-GJ7E44BG.js.br +0 -0
- package/dist/chunk-GJ7E44BG.js.gz +0 -0
- package/dist/chunk-L5MNLIQF.mjs.br +0 -0
- package/dist/chunk-L5MNLIQF.mjs.gz +0 -0
- package/dist/chunk-M2TISD4A.mjs.br +0 -0
- package/dist/chunk-M2TISD4A.mjs.gz +0 -0
- package/dist/chunk-QG7TXWXP.mjs.br +0 -0
- package/dist/chunk-QG7TXWXP.mjs.gz +0 -0
- package/dist/chunk-U6A5FWWE.js.br +0 -0
- package/dist/chunk-U6A5FWWE.js.gz +0 -0
- package/dist/chunk-UU6NFFRR.js.br +0 -0
- package/dist/chunk-UU6NFFRR.js.gz +0 -0
- package/dist/chunk-YISXETNN.mjs.br +0 -0
- package/dist/chunk-YISXETNN.mjs.gz +0 -0
- package/dist/chunk-Z4RY432D.js.br +0 -0
- package/dist/chunk-Z4RY432D.js.gz +0 -0
|
@@ -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, useLayoutSwitching, useYjsDocumentSync, useCollaborationLivePatch, useFollowMode, useBroadcastFollower, scopeLayoutOptionsToActiveSlide, useToolbarVisibility, useKeyboardInsets, useModalDismissDrag, useCollaborativeState, useVirtualizedSlides, useSwipeNavigation, useSheetDismissDrag, detectTargetType, parseEmailUrl, parseSlideFromUrl, ACTION_VERB_MAP } from './chunk-
|
|
3
|
-
import { MIN_ELEMENT_SIZE, DEFAULT_STROKE_COLOR, getConnectorPathGeometry, buildLineShadowCss, buildLineGlowFilter, renderConnectorMarker, getShapeVisualStyle, getTextStyleForElement, DEFAULT_TEXT_COLOR, renderVectorShape, isConnectorOrLineElement, build3DExtrusionData, getImageRenderStyle, cn, getTextLayoutStyle, renderTableElement, renderMediaElement, shouldRenderFallbackLabel, SHAPE_PRESETS, ANIMATION_PRESET_OPTIONS, DEFAULT_FILL_COLOR, hasDagDuotoneEffect, renderDagDuotoneSvgFilter, getCropShapeClipPath, getImageTilingStyle, getDuotoneColors, getTextWarpStyle, renderTextSegments, buildReactChartViewModel, renderChartElement, buildTextBody3DSceneStyle, SLIDE_NAV_THUMBNAIL_WIDTH, DEFAULT_TEXT_FONT_SIZE, DEFAULT_FONT_FAMILY, TOOLBAR_SECTIONS, DEFAULT_SECTION_GROUP_ID, SHORTCUT_REFERENCE_ITEMS as SHORTCUT_REFERENCE_ITEMS$1, HYPERLINK_COLOR, GRID_SIZE, CONNECTOR_ARROW_OPTIONS, ARROW_SIZE_OPTIONS, startMotionPathPreview, startPreviewAnimation, stopPreviewAnimation, THEME_COLOR_SWATCHES, STROKE_DASH_OPTIONS } from './chunk-
|
|
4
|
-
import { LOCALE_CATALOG, translationsEn } from './chunk-
|
|
5
|
-
import { hasShapeProperties, normalizeHexColor, colorWithOpacity, normalizeStrokeDashType, getSvgStrokeDasharray, getCompoundLineOffsets, getCompoundLineWidths, svgLineCap, hasTextProperties, getElementTransform, getAriaRoleDescription, getAriaLabel, getAriaRole, resolveElementInteractivity, isEditableTextElement, isElementRendered, isElementActionable, getImageEffectsOpacity, getImageEffectsFilter, inlineElementPointerEvents, isHollowShapeElement, LINK_TOOLTIP_HOST_CLASS, ACTION_BUTTON_PRESETS, mediaTransportVisible, isInkElement, getGroupChildParentFill, getElementLabel, SWITCHABLE_LAYOUT_TYPES, DEFAULT_VIEWER_OPTIONS, compileEquationTemplateMathMl, buildUserFontFaceStyles, readStoredViewerPrefs, resolveThemeCatalogEntry, THEME_CATALOG, writeStoredViewerPrefs, openPptxFile, readBackstageRecentFile, resolveAutosaveActivation, viewerOptionsToPreferences, applyPreferenceToOptions, listAutosaveSnapshots, deleteAutosaveSnapshot, resolveAutosaveIntervalMs, resolveAutosaveIntervalSeconds, shouldShowAutosaveRecoveryPrompt, paintedStrokeWidth, buildCssGradientFromShapeStyle, ensureActionAffordanceStyles, resolveElementActionAffordance, actionAffordanceLabels, getComputedEffectStyle, getSoftEdgeSvgFilter, buildStrokeOutline, buildHollowHitOutline, buildSubpathFillOverlay, isImageLikeElement, getComputedFillStyle, strokeOutlineViewBox, revealedSmartArtNodeCount, buildSmartArtA11y, computeSmartArtElementLayout, flattenNodes, buildSummaryZoomView, isImageTiled, getImageColorWashStyle, placeCaretAtEnd, getPendingSelectionRestore, restoreSegmentSelection, getTextCompensationTransform, resolveChartKind, ensureChartInteractionStyles, applyChartPartHighlight, applyChartBuildReveal, formatAxisValue, hasPressureVariation, getInkReplayStyles, INK_REPLAY_KEYFRAMES, resolveInkColor, resolveInkWidth, resolveInkOpacity, pressuresToWidths, getContentPartReplayStyles, resolveOleType, getOleTypeColor, getOleTypeLabel, filterRenderedElements, resolveGroupChildFill, isLinkedTextBox, getOverflowSegments, shouldUseSvgWarp, getTextBodyRotationTransform, RULER_THICKNESS, RULER_FONT_SIZE, buildPreviewElements, deriveSlideFieldContext, SLIDE_TRANSITION_OPTIONS, hiddenSlideCue, HIDDEN_SLIDE_SLASH_GRADIENT, HIDDEN_SLIDE_LABEL_KEY, themeToCssVars, applyMotionPathPreset, resetSlideLayoutPath, DEFAULT_INSERT_CHART_KIND, hasCopyableFormat, templateSchemeFromTheme, createBackstagePresentation, setMasterViewBackgroundColor, printPropertiesFrameSlides, printPropertiesSlidesPerPage, VIEWER_OPTIONS_TABS, DEFAULT_QUICK_ACCESS_COMMAND_IDS, buildJoinCollaborationConfig, buildCreateCollaborationConfig, generateBroadcastRoomId, DEFAULT_BROADCAST_SERVER_URL, buildBroadcastViewerUrl, resolveTransportForServerUrl, ACTION_INDICATOR_CLASS, ACTION_INDICATOR_ICON_PATH, LINK_TOOLTIP_CLASS, LINK_TOOLTIP_PANEL_CLASS, LINK_TOOLTIP_LABEL_CLASS, LINK_TOOLTIP_HINT_CLASS, DEFAULT_PALETTE2, resolvePalette, computeDrawingViewBox, projectDrawingShapes, styleShadowFilter, resolveDrawingShapeNodeId, buildChromeStyle, getImageSvgFilters, buildDuotoneCacheKey, getDuotoneCachedResult, applyDuotone, setDuotoneCachedResult, buildCacheKey, DEFAULT_COLOR_CHANGE_TOLERANCE, getCachedResult, applyColorChange, setCachedResult, findChartPartTarget, advanceChartValueDrag, beginChartValueDrag, buildSurfaceChart3DDataForElement, withChartTitle, buildSmartArt3DModel, extractPathPoints, generatePressureCircles, isBrowserOpenableMime, formatBytes, getOleBadgeLabel, openUrlInNewTab, getSubstituteFontFamily, getWarpPath, getSlideBackgroundStyle, filterCommands, resolveTitleBarStatusKey, TITLE_BAR_CLASSES, TITLE_BAR_DEFAULT_FILE_KEY, masterViewBackgroundColor, buildFieldSubstitutionContext, shouldConfirmExternalHyperlink, safeOpenUrl, isPpactionUrl, parsePpactionUrl, isPresentationAdvanceClick, toggleBlackboard, PRESENT_TOOLBAR_CLASSES, buildContextMenuEntries, themeColorSchemesEqual, EXPANDED_MAX_HEIGHT, STATUS_BAR_CLASSES, buildBarActions, formatVersionTimestamp, formatRelativeTime, scanAvailableFontFamilies, PRESETS, CATEGORIES, convertOmmlToLatex, compileLatexEquation, convertLatexToOmml, EQUATION_TEMPLATES, clampPercent, HANDOUT_OPTIONS, TOOLBAR_TABS, SHORTCUT_REFERENCE_ITEMS, resolveViewerAddinRows, availableQuickAccessCommands, addQuickAccessCommand, removeQuickAccessCommand, moveQuickAccessCommand, CUSTOM_FONT_ACCEPT, activateModalFocus, buildCollaborationShareUrl, buildActiveSessionUsers, SORTER_MIN_ZOOM, SORTER_ZOOM_STEP, SORTER_MAX_ZOOM, canGoPrevious, formatSlideCounter, READING_VIEW_COUNTER_ATTR, canGoNext, READING_VIEW_ATTR, OUTLINE_LEVEL_ATTR, OUTLINE_SLIDE_ATTR, OUTLINE_ROW_ATTR, OUTLINE_VIEW_ATTR, mobileElapsedSince, nextPresentedSlide, presenterPrevDisabled, presenterNextDisabled, formatMobileElapsed, mobileSlideCounter, presenterPaneAdvancesOnClick, presenterTimerProgress, PRESENTER_CONSOLE_CLASSES, formatElapsed, centeredSvgTextLines, computeInlineEditorRect, findSmartArtNodeText, setSmartArtNodeStyle, rebuildDrawingShapesIfCleared, shouldCommitSmartArtNodeText, updateSmartArtNodeText, groupIntoParagraphs, substituteFieldText, extraQuickAccessCommands, TAB_ROW_ACTION_CLASSES, listBackstageRecentFiles, BACKSTAGE_NAV, INSERT_CHART_TYPES, CHARACTER_SPACING_OPTIONS, RIBBON_SHAPE_SWATCHES, shapeFillChange, shapeOutlineChange, readRibbonTransitionDraft, ribbonTransitionUpdates, playSlideTransitionPreview, RIBBON_TRANSITION_PRESETS, DEFAULT_MOTION_PATH_PRESET_ID, SLIDE_SHOW_OPTIONS, slideShowOptionChange, readSlideShowOption, SLIDE_VIRTUALIZATION_THRESHOLD, PRESENTATION_HIT_TEST_CSS, PRESENTATION_STAGE_ATTRIBUTE, getSlideTransitionAnimations, MORPH_CROSSFADE_GROUP_STYLE, MORPH_CROSSFADE_HALF_STYLE, SLIDE_TRANSITION_KEYFRAMES, annotationOverlayZIndex, presentationInkPath, resolveNotesSchematicBodyFontSizePx, motionPathFor, setMotionPath, getShapeAdjustmentHandleDescriptors, PRESENTER_NAVIGATOR_LABEL_KEYS, PEN_COLORS, HIGHLIGHTER_COLORS, isBlackboardActive, slideSizeToCanvasPx, resolveSelectionPaneRename, PRESET_THEMES, resolveNotesSegments, segmentsToEditorHtml, DEBOUNCE_MS, createPlainNotesSegments, parseSegmentsFromRichEditor, segmentsToPlainText, getCurrentParagraphIndex, segmentsToParagraphs, paragraphsToSegments, MAX_INDENT_LEVEL, INDENT_PX, isUrlSafe, buildNotesPrintHtml, toggleSheet, sanitizeMathMl, computeHandoutLayout, getPrintableArea, generateNoteLineCount, computeAllNotesPages, getNotesPrintableArea, downloadBlob, clampOptionNumber, QUICK_ACCESS_COMMAND_CATALOG, registerCustomFont, openReadingView, applyReadingViewCommand, createPresentationKeyBuffer, readingViewFitScale, READING_VIEW_STAGE_ATTR, buildOutline, applyOutlineEdit, mapOutlineKey, notesSegmentsToSpans, erasePresentationInkAt, movePresenterPointer, appendPresentationInkPoint, PRESENTER_CONSOLE_CONTROLS, NOTES_FONT_SIZE_DEFAULT, formatTime, NOTES_FONT_SIZE_MIN, clampNotesFontSize, NOTES_FONT_SIZE_STEP, NOTES_FONT_SIZE_MAX, BACKSTAGE_TEMPLATES, formatBackstageDate, formatBackstageSize, backstageCardsFor, DEFAULT_VIEWER_PROFILE, resolveProfileInitial, AVATAR_COLOR_SWATCHES, resolveDefaultFontFamily, buildFontCatalog, ENTRANCE_PRESET_VALUES, EMPHASIS_PRESET_VALUES, EXIT_PRESET_VALUES, MOTION_PATH_FAMILIES, motionPathFamilyLabelKey, motionPathPresetsByFamily, motionPathPresetLabelKey, masterViewPseudoSlide, authorConnectorBetweenSites, generateTicks, rulerDragToGuidePosition, getElementTransformWithoutRotation, buildCommentMarkers, COMMENT_MARKER_SIZE, collectConnectorSiteCandidates, getConnectorEndpointHandles, findConnectorSiteNear, motionPathToSvgD, motionPathEndPixel, isEditableMotionPath, setMotionPathEnd, themeColorLabel, buildThemeColorGrid, THEME_COLOR_SCHEME_KEYS, COMMON_FONTS, buildSmartArtPresetData, handleReadingViewKey, getLocalStorageUsageSummary, saveViewerProfile, clearAllLocalViewerData, isCurrentLayout, SLIDE_TEMPLATES, CONNECTOR_SITE_SNAP_PX, resolveConnectorEndpointUpdate, withConnectorEndpointUpdate, getShapeConnectionSites, isElementLocked, mergeSlideTransition, mapSlideSorterKey, isEditorTextInputTarget, clampSorterZoom, buildLayoutPreviewGeometry, buildSlideTemplateContent, elementLockTogglePatch, buildTableDataGrid, appendTableElementRow, removeLastTableElementRow, appendTableElementColumn, removeLastTableElementColumn, removeTableElementColumn, removeTableElementRow, setTableElementCellText, TABLE_STYLE_PRESETS, applyTableStylePreset, evenColumnWidths, redistributeColumnWidth, evenRowHeights, patchChartData, setChartCategoryLabel, setChartCellValue, addChartCategory, removeChartCategory, addChartSeries, removeChartSeries, setChartAxisLogScale, setChartAxisTitleStyle, setChartAxisGridlineStyle, setChartSeriesMarker, setChartSeriesChartType, setChartDataPointFill, setChartDataPointExplosion, setChartDataPointMarker, setChartDataPointLabel, describeSmartArtBounds, canAddTopLevelNode, classifyExtraConnections, siblingIndex, siblingCount, canRemoveTopLevelNode, getOleObjectTypeLabel, sanitizeGradientStops, pptxActionToElementAction, withFrameSlides, withSlidesPerPage, applyThemeOverrideToSlide, COLOR_MAP_ALIAS_KEYS, DEFAULT_COLOR_MAP, schemaLabel, THEME_COLOR_SLOT_LABEL_KEYS, resolveSlideSizeSelection, SLIDE_SIZE_PRESETS, TRANSITION_VALID_DIRECTIONS, TRANSITION_ORIENTATION_TYPES, clampTransitionNumber, flattenTagCollections, resolveTemplateBackgroundRows, formatCommentTimestamp, clearMotionPath, DIRECTIONAL_PRESETS, buildAnimationTimelineBars, motionPathPresetIdForPath, computeMergeCellRight, computeMergeCellDown, computeSplitCell, CHART_TYPE_OPTIONS, SMARTART_COLOR_SCHEME_LABEL_KEYS, SMARTART_STYLE_LABEL_KEYS, addSmartArtNodeAsChild, removeSmartArtNode, addSiblingAfter, removeEmptyNode, demote, promote, reorder, clampCropValue, DUOTONE_PRESETS, ARTISTIC_EFFECTS, resolveActionType, ELEMENT_ACTION_TYPE_OPTIONS, toSlideIndex, elementActionToPptxAction, canCommitActionType, slideSizeFromPreset, withSlideSizeOrientation, TRANSITION_DIR_ARROWS, buildDirectionGrid, updateTagInCollections, deleteTagFromCollections, addTagToCollections, commentTextSegments, COMMENT_MENTION_CLASS, COMMENT_MENTION_ATTRIBUTE, reorderAnimationTo, animationEffectLabel, LBL, SEL, FILL_MODE_OPTIONS, SECTION_HEADING, NUM, switchSmartArtLayout, 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-M2TISD4A.mjs';
|
|
6
|
-
import
|
|
1
|
+
import { computeFocusTargets, aiChangeAnimationCss, changeGhostStyle, createChatHistoryStore, toRenderableParts } from './chunk-PQNZCSB7.mjs';
|
|
2
|
+
import { useReducedMotion, useViewerState, useViewerOptions, useIsMobile, useResizablePanels, useDerivedSlideState, useZoomViewport, useEditorHistory, usePresentationSetup, useTouchGestures, useViewerDialogs, useEditorOperations, useViewerIntegration, useLayoutSwitching, useYjsDocumentSync, useCollaborationLivePatch, useFollowMode, useBroadcastFollower, scopeLayoutOptionsToActiveSlide, useToolbarVisibility, useKeyboardInsets, useModalDismissDrag, useCollaborativeState, useVirtualizedSlides, useSwipeNavigation, useSheetDismissDrag, detectTargetType, parseEmailUrl, parseSlideFromUrl, ACTION_VERB_MAP } from './chunk-VMLKJDA5.mjs';
|
|
3
|
+
import { MIN_ELEMENT_SIZE, DEFAULT_STROKE_COLOR, getConnectorPathGeometry, buildLineShadowCss, buildLineGlowFilter, renderConnectorMarker, getShapeVisualStyle, getTextStyleForElement, DEFAULT_TEXT_COLOR, renderVectorShape, isConnectorOrLineElement, build3DExtrusionData, getImageRenderStyle, cn, getTextLayoutStyle, renderTableElement, renderMediaElement, shouldRenderFallbackLabel, SHAPE_PRESETS, ANIMATION_PRESET_OPTIONS, DEFAULT_FILL_COLOR, hasDagDuotoneEffect, renderDagDuotoneSvgFilter, getCropShapeClipPath, getImageTilingStyle, getDuotoneColors, getTextWarpStyle, renderTextSegments, buildReactChartViewModel, renderChartElement, buildTextBody3DSceneStyle, SLIDE_NAV_THUMBNAIL_WIDTH, DEFAULT_TEXT_FONT_SIZE, DEFAULT_FONT_FAMILY, TOOLBAR_SECTIONS, DEFAULT_SECTION_GROUP_ID, SHORTCUT_REFERENCE_ITEMS as SHORTCUT_REFERENCE_ITEMS$1, HYPERLINK_COLOR, GRID_SIZE, CONNECTOR_ARROW_OPTIONS, ARROW_SIZE_OPTIONS, startMotionPathPreview, startPreviewAnimation, stopPreviewAnimation, THEME_COLOR_SWATCHES, STROKE_DASH_OPTIONS } from './chunk-SNWAM2XJ.mjs';
|
|
4
|
+
import { LOCALE_CATALOG, translationsEn } from './chunk-MKPSUHUH.mjs';
|
|
5
|
+
import { hasShapeProperties, normalizeHexColor, colorWithOpacity, normalizeStrokeDashType, getSvgStrokeDasharray, getCompoundLineOffsets, getCompoundLineWidths, svgLineCap, hasTextProperties, getElementTransform, getAriaRoleDescription, getAriaLabel, getAriaRole, resolveElementInteractivity, isEditableTextElement, isElementRendered, isElementActionable, getImageEffectsOpacity, getImageEffectsFilter, inlineElementPointerEvents, isHollowShapeElement, LINK_TOOLTIP_HOST_CLASS, ACTION_BUTTON_PRESETS, mediaTransportVisible, isInkElement, getGroupChildParentFill, getElementLabel, SWITCHABLE_LAYOUT_TYPES, DEFAULT_VIEWER_OPTIONS, compileEquationTemplateMathMl, buildUserFontFaceStyles, readStoredViewerPrefs, resolveThemeCatalogEntry, THEME_CATALOG, writeStoredViewerPrefs, openPptxFile, readBackstageRecentFile, resolveAutosaveActivation, viewerOptionsToPreferences, applyPreferenceToOptions, listAutosaveSnapshots, deleteAutosaveSnapshot, resolveAutosaveIntervalMs, resolveAutosaveIntervalSeconds, shouldShowAutosaveRecoveryPrompt, paintedStrokeWidth, buildCssGradientFromShapeStyle, ensureActionAffordanceStyles, resolveElementActionAffordance, actionAffordanceLabels, getComputedEffectStyle, getSoftEdgeSvgFilter, buildStrokeOutline, buildHollowHitOutline, buildSubpathFillOverlay, isImageLikeElement, getComputedFillStyle, strokeOutlineViewBox, revealedSmartArtNodeCount, buildSmartArtA11y, computeSmartArtElementLayout, flattenNodes, buildSummaryZoomView, isImageTiled, getImageColorWashStyle, placeCaretAtEnd, getPendingSelectionRestore, restoreSegmentSelection, getTextCompensationTransform, resolveChartKind, ensureChartInteractionStyles, applyChartPartHighlight, applyChartBuildReveal, formatAxisValue, hasPressureVariation, getInkReplayStyles, INK_REPLAY_KEYFRAMES, resolveInkColor, resolveInkWidth, resolveInkOpacity, pressuresToWidths, getContentPartReplayStyles, resolveOleType, getOleAriaLabel, getOleTypeColor, getOleTypeLabel, filterRenderedElements, resolveGroupChildFill, isLinkedTextBox, getOverflowSegments, shouldUseSvgWarp, getTextBodyRotationTransform, RULER_THICKNESS, RULER_FONT_SIZE, buildPreviewElements, deriveSlideFieldContext, SLIDE_TRANSITION_OPTIONS, hiddenSlideCue, HIDDEN_SLIDE_SLASH_GRADIENT, HIDDEN_SLIDE_LABEL_KEY, themeToCssVars, applyMotionPathPreset, resetSlideLayoutPath, DEFAULT_INSERT_CHART_KIND, hasCopyableFormat, templateSchemeFromTheme, createBackstagePresentation, setMasterViewBackgroundColor, printPropertiesFrameSlides, printPropertiesSlidesPerPage, VIEWER_OPTIONS_TABS, DEFAULT_QUICK_ACCESS_COMMAND_IDS, buildJoinCollaborationConfig, buildCreateCollaborationConfig, generateBroadcastRoomId, DEFAULT_BROADCAST_SERVER_URL, buildBroadcastViewerUrl, resolveTransportForServerUrl, ACTION_INDICATOR_CLASS, ACTION_INDICATOR_ICON_PATH, LINK_TOOLTIP_CLASS, LINK_TOOLTIP_PANEL_CLASS, LINK_TOOLTIP_LABEL_CLASS, LINK_TOOLTIP_HINT_CLASS, DEFAULT_PALETTE2, resolvePalette, computeDrawingViewBox, projectDrawingShapes, styleShadowFilter, resolveDrawingShapeNodeId, buildChromeStyle, getImageSvgFilters, buildDuotoneCacheKey, getDuotoneCachedResult, applyDuotone, setDuotoneCachedResult, buildCacheKey, DEFAULT_COLOR_CHANGE_TOLERANCE, getCachedResult, applyColorChange, setCachedResult, findChartPartTarget, advanceChartValueDrag, beginChartValueDrag, buildSurfaceChart3DDataForElement, buildBarChart3DDataForElement, buildLineChart3DDataForElement, buildAreaChart3DDataForElement, buildPieChart3DDataForElement, withChartTitle, buildSmartArt3DModel, extractPathPoints, generatePressureCircles, generateNibMarks, isBrowserOpenableMime, formatBytes, getOleDisplayName, getOleBadgeLabel, openUrlInNewTab, getSubstituteFontFamily, getWarpPath, getSlideBackgroundStyle, filterCommands, resolveTitleBarStatusKey, TITLE_BAR_CLASSES, TITLE_BAR_DEFAULT_FILE_KEY, masterViewBackgroundColor, buildFieldSubstitutionContext, shouldConfirmExternalHyperlink, safeOpenUrl, isPpactionUrl, parsePpactionUrl, isPresentationAdvanceClick, toggleBlackboard, PRESENT_TOOLBAR_CLASSES, buildContextMenuEntries, themeColorSchemesEqual, EXPANDED_MAX_HEIGHT, STATUS_BAR_CLASSES, buildBarActions, formatVersionTimestamp, formatRelativeTime, scanAvailableFontFamilies, PRESETS, CATEGORIES, convertOmmlToLatex, compileLatexEquation, convertLatexToOmml, EQUATION_TEMPLATES, clampPercent, HANDOUT_OPTIONS, TOOLBAR_TABS, SHORTCUT_REFERENCE_ITEMS, resolveViewerAddinRows, availableQuickAccessCommands, addQuickAccessCommand, removeQuickAccessCommand, moveQuickAccessCommand, CUSTOM_FONT_ACCEPT, activateModalFocus, buildCollaborationShareUrl, buildActiveSessionUsers, SORTER_MIN_ZOOM, SORTER_ZOOM_STEP, SORTER_MAX_ZOOM, canGoPrevious, formatSlideCounter, READING_VIEW_COUNTER_ATTR, canGoNext, READING_VIEW_ATTR, OUTLINE_LEVEL_ATTR, OUTLINE_SLIDE_ATTR, OUTLINE_ROW_ATTR, OUTLINE_VIEW_ATTR, mobileElapsedSince, nextPresentedSlide, presenterPrevDisabled, presenterNextDisabled, formatMobileElapsed, mobileSlideCounter, presenterPaneAdvancesOnClick, presenterTimerProgress, PRESENTER_CONSOLE_CLASSES, formatElapsed, centeredSvgTextLines, computeInlineEditorRect, findSmartArtNodeText, setSmartArtNodeStyle, rebuildDrawingShapesIfCleared, shouldCommitSmartArtNodeText, updateSmartArtNodeText, groupIntoParagraphs, substituteFieldText, extraQuickAccessCommands, TAB_ROW_ACTION_CLASSES, listBackstageRecentFiles, BACKSTAGE_NAV, INSERT_CHART_TYPES, CHARACTER_SPACING_OPTIONS, RIBBON_SHAPE_SWATCHES, shapeFillChange, shapeOutlineChange, readRibbonTransitionDraft, ribbonTransitionUpdates, readSoundFileAsDataUrl, applyTransitionSoundFile, playSlideTransitionPreview, RIBBON_TRANSITION_PRESETS, transitionSoundOptions, transitionSoundSelectedValue, DEFAULT_MOTION_PATH_PRESET_ID, SLIDE_SHOW_OPTIONS, slideShowOptionChange, readSlideShowOption, SLIDE_VIRTUALIZATION_THRESHOLD, PRESENTATION_HIT_TEST_CSS, PRESENTATION_STAGE_ATTRIBUTE, getSlideTransitionAnimations, MORPH_CROSSFADE_GROUP_STYLE, MORPH_CROSSFADE_HALF_STYLE, SLIDE_TRANSITION_KEYFRAMES, annotationOverlayZIndex, presentationInkPath, resolveNotesSchematicBodyFontSizePx, motionPathFor, setMotionPath, getShapeAdjustmentHandleDescriptors, PRESENTER_NAVIGATOR_LABEL_KEYS, PEN_COLORS, HIGHLIGHTER_COLORS, isBlackboardActive, slideSizeToCanvasPx, resolveSelectionPaneRename, PRESET_THEMES, resolveNotesSegments, segmentsToEditorHtml, DEBOUNCE_MS, createPlainNotesSegments, parseSegmentsFromRichEditor, segmentsToPlainText, getCurrentParagraphIndex, segmentsToParagraphs, paragraphsToSegments, MAX_INDENT_LEVEL, INDENT_PX, isUrlSafe, buildNotesPrintHtml, toggleSheet, sanitizeMathMl, computeHandoutLayout, getPrintableArea, generateNoteLineCount, computeAllNotesPages, getNotesPrintableArea, downloadBlob, clampOptionNumber, QUICK_ACCESS_COMMAND_CATALOG, registerCustomFont, openReadingView, applyReadingViewCommand, createPresentationKeyBuffer, readingViewFitScale, READING_VIEW_STAGE_ATTR, buildOutline, applyOutlineEdit, mapOutlineKey, notesSegmentsToSpans, erasePresentationInkAt, movePresenterPointer, appendPresentationInkPoint, PRESENTER_CONSOLE_CONTROLS, NOTES_FONT_SIZE_DEFAULT, formatTime, NOTES_FONT_SIZE_MIN, clampNotesFontSize, NOTES_FONT_SIZE_STEP, NOTES_FONT_SIZE_MAX, BACKSTAGE_TEMPLATES, formatBackstageDate, formatBackstageSize, backstageCardsFor, DEFAULT_VIEWER_PROFILE, resolveProfileInitial, AVATAR_COLOR_SWATCHES, resolveDefaultFontFamily, buildFontCatalog, TRANSITION_SOUND_OTHER_VALUE, TRANSITION_SOUND_NONE_VALUE, clearTransitionSound, ENTRANCE_PRESET_VALUES, EMPHASIS_PRESET_VALUES, EXIT_PRESET_VALUES, MOTION_PATH_FAMILIES, motionPathFamilyLabelKey, motionPathPresetsByFamily, motionPathPresetLabelKey, masterViewPseudoSlide, authorConnectorBetweenSites, findEraserHitElementId, generateTicks, rulerDragToGuidePosition, getElementTransformWithoutRotation, buildCommentMarkers, COMMENT_MARKER_SIZE, collectConnectorSiteCandidates, getConnectorEndpointHandles, findConnectorSiteNear, motionPathToSvgD, motionPathEndPixel, isEditableMotionPath, setMotionPathEnd, themeColorLabel, buildThemeColorGrid, THEME_COLOR_SCHEME_KEYS, COMMON_FONTS, buildSmartArtPresetData, handleReadingViewKey, getLocalStorageUsageSummary, saveViewerProfile, clearAllLocalViewerData, isCurrentLayout, SLIDE_TEMPLATES, computeAnchoredPopupPosition, CONNECTOR_SITE_SNAP_PX, resolveConnectorEndpointUpdate, withConnectorEndpointUpdate, getShapeConnectionSites, isElementLocked, mergeSlideTransition, mapSlideSorterKey, isEditorTextInputTarget, clampSorterZoom, buildLayoutPreviewGeometry, buildSlideTemplateContent, elementLockTogglePatch, buildTableDataGrid, appendTableElementRow, removeLastTableElementRow, appendTableElementColumn, removeLastTableElementColumn, removeTableElementColumn, removeTableElementRow, setTableElementCellText, TABLE_STYLE_PRESETS, applyTableStylePreset, evenColumnWidths, redistributeColumnWidth, evenRowHeights, patchChartData, setChartCategoryLabel, setChartCellValue, addChartCategory, removeChartCategory, addChartSeries, removeChartSeries, setChartAxisLogScale, setChartAxisTitleStyle, setChartAxisGridlineStyle, setChartSeriesMarker, setChartSeriesChartType, setChartDataPointFill, setChartDataPointExplosion, setChartDataPointMarker, setChartDataPointLabel, describeSmartArtBounds, canAddTopLevelNode, classifyExtraConnections, siblingIndex, siblingCount, canRemoveTopLevelNode, buildOleObjectNamePatch, getOleObjectTypeLabel, sanitizeGradientStops, pptxActionToElementAction, withFrameSlides, withSlidesPerPage, applyThemeOverrideToSlide, COLOR_MAP_ALIAS_KEYS, DEFAULT_COLOR_MAP, schemaLabel, THEME_COLOR_SLOT_LABEL_KEYS, resolveSlideSizeSelection, SLIDE_SIZE_PRESETS, TRANSITION_VALID_DIRECTIONS, TRANSITION_ORIENTATION_TYPES, clampTransitionNumber, TRANSITION_SPEED_OPTIONS, TRANSITION_MORPH_OPTIONS, flattenTagCollections, resolveTemplateBackgroundRows, formatCommentTimestamp, buildAnimationTimelineRows, clearMotionPath, getEffectSoundState, setEffectSound, setAfterAnimation, setAfterAnimationColor, DIRECTIONAL_PRESETS, buildAnimationTimelineBars, motionPathPresetIdForPath, computeMergeCellRight, computeMergeCellDown, computeSplitCell, CHART_TYPE_OPTIONS, SMARTART_COLOR_SCHEME_LABEL_KEYS, SMARTART_STYLE_LABEL_KEYS, addSmartArtNodeAsChild, removeSmartArtNode, addSiblingAfter, removeEmptyNode, demote, promote, reorder, clampCropValue, DUOTONE_PRESETS, ARTISTIC_EFFECTS, resolveActionType, ELEMENT_ACTION_TYPE_OPTIONS, toSlideIndex, elementActionToPptxAction, canCommitActionType, slideSizeFromPreset, withSlideSizeOrientation, TRANSITION_DIR_ARROWS, buildDirectionGrid, updateTagInCollections, deleteTagFromCollections, addTagToCollections, commentTextSegments, COMMENT_MENTION_CLASS, COMMENT_MENTION_ATTRIBUTE, reorderAnimationTimelineRows, applyAnimationTimelineOrder, animationEffectLabel, LBL, SEL, FILL_MODE_OPTIONS, SECTION_HEADING, NUM, switchSmartArtLayout, 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-BP2L2KOZ.mjs';
|
|
6
|
+
import React19, { createContext, useMemo, useState, useCallback, lazy, forwardRef, useEffect, useRef, Suspense, useLayoutEffect, useContext, Fragment as Fragment$1, useDeferredValue } from 'react';
|
|
7
7
|
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
8
8
|
import { useTranslation } from 'react-i18next';
|
|
9
9
|
import { LuRotateCw, LuMessageSquare, LuEyeOff, LuHistory, LuTrash2, LuSettings, LuX, LuCalendarDays, LuHash, LuText, LuCast, LuSave, LuUndo, LuRedo, LuSearch, LuShieldCheck, LuPlus, LuPanelLeftClose, LuStickyNote, LuMonitor, LuColumns2, LuPresentation, LuMinus, LuSettings2, LuLayers, LuClock, LuDownload, LuCheck, LuLock, LuEye, LuFileText, LuType, LuLoader, LuShieldAlert, LuSignature, LuInfo, LuTriangleAlert, LuPrinter, LuPenTool, LuBug, LuChevronUp, LuChevronDown, LuUpload, LuWifi, LuWifiOff, LuUsers, LuCopy, LuChevronLeft, LuChevronRight, LuPlay, LuPause, LuZoomOut, LuZoomIn, LuSpellCheck, LuFileDown, LuMenu, LuSparkles, LuShare2, LuPanelLeft, LuPanelRight, LuArrowLeft, LuFolderOpen, LuClipboardPaste, LuScissors, LuPaintbrush, LuSquare, LuImage, LuVideo, LuDatabase, LuAArrowUp, LuAArrowDown, LuRemoveFormatting, LuHighlighter, LuList, LuListOrdered, LuIndentDecrease, LuIndentIncrease, LuReplace, LuMousePointer2, LuShapes, LuPaintBucket, LuPenLine, LuPalette, LuPencil, LuStar, LuMoveRight, LuMousePointerClick, LuClock3, LuMonitorPlay, LuListVideo, LuCaptions, LuCamera, LuEraser, LuRotateCcw, LuCircleHelp, LuBookOpen, LuLanguages, LuGlobe, LuGitCompare, LuMessageSquarePlus, LuLockKeyhole, LuPanelTop, LuLayoutGrid, LuGrid3X3, LuPipette, LuRuler, LuMaximize2, LuCode, LuCaseSensitive, LuTimer, LuGripVertical, LuLoaderCircle, LuBold, LuItalic, LuUnderline, LuStrikethrough, LuLink, LuGrid2X2, LuCopyPlus, LuScan, LuMonitorOff, LuCirclePlay, LuCirclePause, LuArrowLeftRight, LuClipboardCopy, LuWand, LuTextCursorInput, LuFile, LuEllipsis, LuUserRound, LuFilePlus2, LuHouse, LuPackage, LuFileJson, LuBox, LuFileImage, LuUser, LuHardDrive, LuLogIn, LuLayoutTemplate, LuFolderPlus, LuAlignLeft, LuAlignCenter, LuAlignRight, LuAlignJustify, LuColumns3, LuSpline, LuAlignHorizontalSpaceAround, LuAlignVerticalSpaceAround, LuGroup, LuUngroup, LuMove, LuRadio, LuLockOpen, LuArrowDown, LuArrowUp, LuArrowRight, LuReply, LuBookmark } from 'react-icons/lu';
|
|
@@ -478,20 +478,244 @@ function ChartPartSelectionProvider({
|
|
|
478
478
|
function useChartPartSelection() {
|
|
479
479
|
return useContext(ChartPartSelectionContext);
|
|
480
480
|
}
|
|
481
|
-
var
|
|
481
|
+
var AreaChart3DContext = createContext(false);
|
|
482
482
|
function FailedToLoad() {
|
|
483
483
|
return null;
|
|
484
484
|
}
|
|
485
|
-
var
|
|
485
|
+
var LazyArea3DChartScene = React19.lazy(
|
|
486
486
|
async () => {
|
|
487
487
|
try {
|
|
488
|
-
return await import('./
|
|
488
|
+
return await import('./Area3DChartScene-W6UZTRDP.mjs');
|
|
489
489
|
} catch {
|
|
490
490
|
return { default: FailedToLoad };
|
|
491
491
|
}
|
|
492
492
|
}
|
|
493
493
|
);
|
|
494
|
-
var SceneErrorBoundary = class extends
|
|
494
|
+
var SceneErrorBoundary = class extends React19.Component {
|
|
495
|
+
constructor(props) {
|
|
496
|
+
super(props);
|
|
497
|
+
this.state = { hasError: false };
|
|
498
|
+
}
|
|
499
|
+
static getDerivedStateFromError() {
|
|
500
|
+
return { hasError: true };
|
|
501
|
+
}
|
|
502
|
+
render() {
|
|
503
|
+
return this.state.hasError ? this.props.fallback : this.props.children;
|
|
504
|
+
}
|
|
505
|
+
};
|
|
506
|
+
function Area3DChartRenderer({ element }) {
|
|
507
|
+
const [threeAvailable, setThreeAvailable] = useState(null);
|
|
508
|
+
useEffect(() => {
|
|
509
|
+
let cancelled = false;
|
|
510
|
+
import('./three.module-AC7ESV4W.mjs').then(() => {
|
|
511
|
+
if (!cancelled) {
|
|
512
|
+
setThreeAvailable(true);
|
|
513
|
+
}
|
|
514
|
+
return void 0;
|
|
515
|
+
}).catch(() => {
|
|
516
|
+
if (!cancelled) {
|
|
517
|
+
setThreeAvailable(false);
|
|
518
|
+
}
|
|
519
|
+
});
|
|
520
|
+
return () => {
|
|
521
|
+
cancelled = true;
|
|
522
|
+
};
|
|
523
|
+
}, []);
|
|
524
|
+
const options = useMemo(
|
|
525
|
+
() => buildAreaChart3DDataForElement(element, { width: element.width, height: element.height }),
|
|
526
|
+
[element]
|
|
527
|
+
);
|
|
528
|
+
const svgFallback = /* @__PURE__ */ jsx(Fragment, { children: renderChartElement(element) });
|
|
529
|
+
if (!options || threeAvailable === false) {
|
|
530
|
+
return svgFallback;
|
|
531
|
+
}
|
|
532
|
+
if (threeAvailable === null) {
|
|
533
|
+
return svgFallback;
|
|
534
|
+
}
|
|
535
|
+
return /* @__PURE__ */ jsx(SceneErrorBoundary, { fallback: svgFallback, children: /* @__PURE__ */ jsx(Suspense, { fallback: svgFallback, children: /* @__PURE__ */ jsx(LazyArea3DChartScene, { options }) }) });
|
|
536
|
+
}
|
|
537
|
+
var BarChart3DContext = createContext(false);
|
|
538
|
+
function FailedToLoad2() {
|
|
539
|
+
return null;
|
|
540
|
+
}
|
|
541
|
+
var LazyBar3DChartScene = React19.lazy(
|
|
542
|
+
async () => {
|
|
543
|
+
try {
|
|
544
|
+
return await import('./Bar3DChartScene-FCWQEQLH.mjs');
|
|
545
|
+
} catch {
|
|
546
|
+
return { default: FailedToLoad2 };
|
|
547
|
+
}
|
|
548
|
+
}
|
|
549
|
+
);
|
|
550
|
+
var SceneErrorBoundary2 = class extends React19.Component {
|
|
551
|
+
constructor(props) {
|
|
552
|
+
super(props);
|
|
553
|
+
this.state = { hasError: false };
|
|
554
|
+
}
|
|
555
|
+
static getDerivedStateFromError() {
|
|
556
|
+
return { hasError: true };
|
|
557
|
+
}
|
|
558
|
+
render() {
|
|
559
|
+
return this.state.hasError ? this.props.fallback : this.props.children;
|
|
560
|
+
}
|
|
561
|
+
};
|
|
562
|
+
function Bar3DChartRenderer({ element }) {
|
|
563
|
+
const [threeAvailable, setThreeAvailable] = useState(null);
|
|
564
|
+
useEffect(() => {
|
|
565
|
+
let cancelled = false;
|
|
566
|
+
import('./three.module-AC7ESV4W.mjs').then(() => {
|
|
567
|
+
if (!cancelled) {
|
|
568
|
+
setThreeAvailable(true);
|
|
569
|
+
}
|
|
570
|
+
return void 0;
|
|
571
|
+
}).catch(() => {
|
|
572
|
+
if (!cancelled) {
|
|
573
|
+
setThreeAvailable(false);
|
|
574
|
+
}
|
|
575
|
+
});
|
|
576
|
+
return () => {
|
|
577
|
+
cancelled = true;
|
|
578
|
+
};
|
|
579
|
+
}, []);
|
|
580
|
+
const options = useMemo(
|
|
581
|
+
() => buildBarChart3DDataForElement(element, { width: element.width, height: element.height }),
|
|
582
|
+
[element]
|
|
583
|
+
);
|
|
584
|
+
const svgFallback = /* @__PURE__ */ jsx(Fragment, { children: renderChartElement(element) });
|
|
585
|
+
if (!options || threeAvailable === false) {
|
|
586
|
+
return svgFallback;
|
|
587
|
+
}
|
|
588
|
+
if (threeAvailable === null) {
|
|
589
|
+
return svgFallback;
|
|
590
|
+
}
|
|
591
|
+
return /* @__PURE__ */ jsx(SceneErrorBoundary2, { fallback: svgFallback, children: /* @__PURE__ */ jsx(Suspense, { fallback: svgFallback, children: /* @__PURE__ */ jsx(LazyBar3DChartScene, { options }) }) });
|
|
592
|
+
}
|
|
593
|
+
var LineChart3DContext = createContext(false);
|
|
594
|
+
function FailedToLoad3() {
|
|
595
|
+
return null;
|
|
596
|
+
}
|
|
597
|
+
var LazyLine3DChartScene = React19.lazy(
|
|
598
|
+
async () => {
|
|
599
|
+
try {
|
|
600
|
+
return await import('./Line3DChartScene-EPPWQOHS.mjs');
|
|
601
|
+
} catch {
|
|
602
|
+
return { default: FailedToLoad3 };
|
|
603
|
+
}
|
|
604
|
+
}
|
|
605
|
+
);
|
|
606
|
+
var SceneErrorBoundary3 = class extends React19.Component {
|
|
607
|
+
constructor(props) {
|
|
608
|
+
super(props);
|
|
609
|
+
this.state = { hasError: false };
|
|
610
|
+
}
|
|
611
|
+
static getDerivedStateFromError() {
|
|
612
|
+
return { hasError: true };
|
|
613
|
+
}
|
|
614
|
+
render() {
|
|
615
|
+
return this.state.hasError ? this.props.fallback : this.props.children;
|
|
616
|
+
}
|
|
617
|
+
};
|
|
618
|
+
function Line3DChartRenderer({ element }) {
|
|
619
|
+
const [threeAvailable, setThreeAvailable] = useState(null);
|
|
620
|
+
useEffect(() => {
|
|
621
|
+
let cancelled = false;
|
|
622
|
+
import('./three.module-AC7ESV4W.mjs').then(() => {
|
|
623
|
+
if (!cancelled) {
|
|
624
|
+
setThreeAvailable(true);
|
|
625
|
+
}
|
|
626
|
+
return void 0;
|
|
627
|
+
}).catch(() => {
|
|
628
|
+
if (!cancelled) {
|
|
629
|
+
setThreeAvailable(false);
|
|
630
|
+
}
|
|
631
|
+
});
|
|
632
|
+
return () => {
|
|
633
|
+
cancelled = true;
|
|
634
|
+
};
|
|
635
|
+
}, []);
|
|
636
|
+
const options = useMemo(
|
|
637
|
+
() => buildLineChart3DDataForElement(element, { width: element.width, height: element.height }),
|
|
638
|
+
[element]
|
|
639
|
+
);
|
|
640
|
+
const svgFallback = /* @__PURE__ */ jsx(Fragment, { children: renderChartElement(element) });
|
|
641
|
+
if (!options || threeAvailable === false) {
|
|
642
|
+
return svgFallback;
|
|
643
|
+
}
|
|
644
|
+
if (threeAvailable === null) {
|
|
645
|
+
return svgFallback;
|
|
646
|
+
}
|
|
647
|
+
return /* @__PURE__ */ jsx(SceneErrorBoundary3, { fallback: svgFallback, children: /* @__PURE__ */ jsx(Suspense, { fallback: svgFallback, children: /* @__PURE__ */ jsx(LazyLine3DChartScene, { options }) }) });
|
|
648
|
+
}
|
|
649
|
+
var PieChart3DContext = createContext(false);
|
|
650
|
+
function FailedToLoad4() {
|
|
651
|
+
return null;
|
|
652
|
+
}
|
|
653
|
+
var LazyPieChart3DScene = React19.lazy(
|
|
654
|
+
async () => {
|
|
655
|
+
try {
|
|
656
|
+
return await import('./PieChart3DScene-ZP5TSL62.mjs');
|
|
657
|
+
} catch {
|
|
658
|
+
return { default: FailedToLoad4 };
|
|
659
|
+
}
|
|
660
|
+
}
|
|
661
|
+
);
|
|
662
|
+
var SceneErrorBoundary4 = class extends React19.Component {
|
|
663
|
+
constructor(props) {
|
|
664
|
+
super(props);
|
|
665
|
+
this.state = { hasError: false };
|
|
666
|
+
}
|
|
667
|
+
static getDerivedStateFromError() {
|
|
668
|
+
return { hasError: true };
|
|
669
|
+
}
|
|
670
|
+
render() {
|
|
671
|
+
return this.state.hasError ? this.props.fallback : this.props.children;
|
|
672
|
+
}
|
|
673
|
+
};
|
|
674
|
+
function PieChart3DRenderer({ element }) {
|
|
675
|
+
const [threeAvailable, setThreeAvailable] = useState(null);
|
|
676
|
+
useEffect(() => {
|
|
677
|
+
let cancelled = false;
|
|
678
|
+
import('./three.module-AC7ESV4W.mjs').then(() => {
|
|
679
|
+
if (!cancelled) {
|
|
680
|
+
setThreeAvailable(true);
|
|
681
|
+
}
|
|
682
|
+
return void 0;
|
|
683
|
+
}).catch(() => {
|
|
684
|
+
if (!cancelled) {
|
|
685
|
+
setThreeAvailable(false);
|
|
686
|
+
}
|
|
687
|
+
});
|
|
688
|
+
return () => {
|
|
689
|
+
cancelled = true;
|
|
690
|
+
};
|
|
691
|
+
}, []);
|
|
692
|
+
const options = useMemo(
|
|
693
|
+
() => buildPieChart3DDataForElement(element, { width: element.width, height: element.height }),
|
|
694
|
+
[element]
|
|
695
|
+
);
|
|
696
|
+
const svgFallback = /* @__PURE__ */ jsx(Fragment, { children: renderChartElement(element) });
|
|
697
|
+
if (!options || threeAvailable === false) {
|
|
698
|
+
return svgFallback;
|
|
699
|
+
}
|
|
700
|
+
if (threeAvailable === null) {
|
|
701
|
+
return svgFallback;
|
|
702
|
+
}
|
|
703
|
+
return /* @__PURE__ */ jsx(SceneErrorBoundary4, { fallback: svgFallback, children: /* @__PURE__ */ jsx(Suspense, { fallback: svgFallback, children: /* @__PURE__ */ jsx(LazyPieChart3DScene, { options }) }) });
|
|
704
|
+
}
|
|
705
|
+
var SurfaceChart3DContext = createContext(false);
|
|
706
|
+
function FailedToLoad5() {
|
|
707
|
+
return null;
|
|
708
|
+
}
|
|
709
|
+
var LazySurfaceChart3DScene = React19.lazy(
|
|
710
|
+
async () => {
|
|
711
|
+
try {
|
|
712
|
+
return await import('./SurfaceChart3DScene-DOMJGPAD.mjs');
|
|
713
|
+
} catch {
|
|
714
|
+
return { default: FailedToLoad5 };
|
|
715
|
+
}
|
|
716
|
+
}
|
|
717
|
+
);
|
|
718
|
+
var SceneErrorBoundary5 = class extends React19.Component {
|
|
495
719
|
constructor(props) {
|
|
496
720
|
super(props);
|
|
497
721
|
this.state = { hasError: false };
|
|
@@ -534,7 +758,7 @@ function SurfaceChart3DRenderer({
|
|
|
534
758
|
if (threeAvailable === null) {
|
|
535
759
|
return svgFallback;
|
|
536
760
|
}
|
|
537
|
-
return /* @__PURE__ */ jsx(
|
|
761
|
+
return /* @__PURE__ */ jsx(SceneErrorBoundary5, { fallback: svgFallback, children: /* @__PURE__ */ jsx(Suspense, { fallback: svgFallback, children: /* @__PURE__ */ jsx(LazySurfaceChart3DScene, { options }) }) });
|
|
538
762
|
}
|
|
539
763
|
function ChartElementView({
|
|
540
764
|
element,
|
|
@@ -552,6 +776,14 @@ function ChartElementView({
|
|
|
552
776
|
const canEdit = editable && Boolean(onUpdateElement);
|
|
553
777
|
const use3D = useContext(SurfaceChart3DContext);
|
|
554
778
|
const isSurfaceKind = resolveChartKind(element.chartData?.chartType ?? "bar") === "surface";
|
|
779
|
+
const use3DBar = useContext(BarChart3DContext);
|
|
780
|
+
const isBar3DKind = element.chartData?.chartType === "bar3D";
|
|
781
|
+
const use3DLine = useContext(LineChart3DContext);
|
|
782
|
+
const isLine3DKind = element.chartData?.chartType === "line3D";
|
|
783
|
+
const use3DArea = useContext(AreaChart3DContext);
|
|
784
|
+
const isArea3DKind = element.chartData?.chartType === "area3D";
|
|
785
|
+
const use3DPie = useContext(PieChart3DContext);
|
|
786
|
+
const isPie3DKind = element.chartData?.chartType === "pie3D";
|
|
555
787
|
const viewModel = useMemo(
|
|
556
788
|
() => canEdit ? buildReactChartViewModel(element) : null,
|
|
557
789
|
[canEdit, element]
|
|
@@ -675,7 +907,7 @@ function ChartElementView({
|
|
|
675
907
|
onPointerUp: handlePointerUp,
|
|
676
908
|
onDoubleClick: handleDoubleClick,
|
|
677
909
|
children: [
|
|
678
|
-
use3D && isSurfaceKind ? /* @__PURE__ */ jsx(SurfaceChart3DRenderer, { element: renderedElement }) : renderChartElement(renderedElement),
|
|
910
|
+
use3D && isSurfaceKind ? /* @__PURE__ */ jsx(SurfaceChart3DRenderer, { element: renderedElement }) : use3DBar && isBar3DKind ? /* @__PURE__ */ jsx(Bar3DChartRenderer, { element: renderedElement }) : use3DLine && isLine3DKind ? /* @__PURE__ */ jsx(Line3DChartRenderer, { element: renderedElement }) : use3DArea && isArea3DKind ? /* @__PURE__ */ jsx(Area3DChartRenderer, { element: renderedElement }) : use3DPie && isPie3DKind ? /* @__PURE__ */ jsx(PieChart3DRenderer, { element: renderedElement }) : renderChartElement(renderedElement),
|
|
679
911
|
dragValue !== null && /* @__PURE__ */ jsx("div", { className: "absolute top-1 right-1 z-10 rounded bg-primary/90 px-1.5 py-0.5 text-[10px] font-medium text-white pointer-events-none", children: formatAxisValue(dragValue) }),
|
|
680
912
|
titleDraft !== null && /* @__PURE__ */ jsx(
|
|
681
913
|
"input",
|
|
@@ -1227,7 +1459,7 @@ function ResizeHandles({
|
|
|
1227
1459
|
))
|
|
1228
1460
|
] });
|
|
1229
1461
|
}
|
|
1230
|
-
var ConnectorElementRenderer =
|
|
1462
|
+
var ConnectorElementRenderer = React19.memo(
|
|
1231
1463
|
// oxlint-disable-next-line prefer-arrow-callback -- named fn gives the memo component its displayName
|
|
1232
1464
|
function ConnectorElementRendererInner({
|
|
1233
1465
|
el,
|
|
@@ -1597,7 +1829,7 @@ function shapeParams(element) {
|
|
|
1597
1829
|
const hasFill = style?.fillColor !== void 0 && style.fillColor !== "transparent" || Boolean(buildCssGradientFromShapeStyle(style) || style?.fillGradient) || style?.fillMode === "pattern" && Boolean(style.fillPatternPreset);
|
|
1598
1830
|
return { hf: hasFill, fc: fillColor, sw: strokeWidth, sc: strokeColor };
|
|
1599
1831
|
}
|
|
1600
|
-
var Extrusion3DOverlay =
|
|
1832
|
+
var Extrusion3DOverlay = React19.memo(
|
|
1601
1833
|
// oxlint-disable-next-line prefer-arrow-callback -- named fn gives the memo component its displayName
|
|
1602
1834
|
function Extrusion3DOverlayInner({ data }) {
|
|
1603
1835
|
if (!data.hasExtrusion || data.panels.length === 0) {
|
|
@@ -1816,7 +2048,7 @@ function ShapeEffectOverlay({
|
|
|
1816
2048
|
) : null
|
|
1817
2049
|
] });
|
|
1818
2050
|
}
|
|
1819
|
-
var ElementRenderer =
|
|
2051
|
+
var ElementRenderer = React19.memo(
|
|
1820
2052
|
// oxlint-disable-next-line prefer-arrow-callback -- named fn gives the memo component its displayName
|
|
1821
2053
|
function ElementRendererInner({
|
|
1822
2054
|
element: el,
|
|
@@ -2090,6 +2322,26 @@ function renderPressureStroke(pathD, widths, baseWidth, color, opacity, keyPrefi
|
|
|
2090
2322
|
});
|
|
2091
2323
|
return /* @__PURE__ */ jsx("g", { opacity, children: circles.map((c, j) => /* @__PURE__ */ jsx("circle", { cx: c.cx, cy: c.cy, r: c.r, fill: color }, `${keyPrefix}-pc-${j}`)) });
|
|
2092
2324
|
}
|
|
2325
|
+
function renderNibMarkStroke(pathD, widths, tiltAngles, tiltMagnitudes, baseWidth, color, opacity, keyPrefix) {
|
|
2326
|
+
const points = extractPathPoints(pathD);
|
|
2327
|
+
const marks = generateNibMarks(points, widths, tiltAngles, tiltMagnitudes, {
|
|
2328
|
+
baseWidth,
|
|
2329
|
+
minRadius: 0.5,
|
|
2330
|
+
maxRadius: baseWidth * 1.5
|
|
2331
|
+
});
|
|
2332
|
+
return /* @__PURE__ */ jsx("g", { opacity, children: marks.map((m, j) => /* @__PURE__ */ jsx(
|
|
2333
|
+
"ellipse",
|
|
2334
|
+
{
|
|
2335
|
+
cx: m.cx,
|
|
2336
|
+
cy: m.cy,
|
|
2337
|
+
rx: m.rPerp,
|
|
2338
|
+
ry: m.rTilt,
|
|
2339
|
+
transform: `rotate(${m.rotationDeg} ${m.cx} ${m.cy})`,
|
|
2340
|
+
fill: color
|
|
2341
|
+
},
|
|
2342
|
+
`${keyPrefix}-nib-${j}`
|
|
2343
|
+
)) });
|
|
2344
|
+
}
|
|
2093
2345
|
function renderInk(el, options) {
|
|
2094
2346
|
const replay = options?.replay ?? false;
|
|
2095
2347
|
Boolean(el.inkPointPressures) && el.inkPointPressures.length > 0;
|
|
@@ -2235,6 +2487,20 @@ function renderContentPart(el, options) {
|
|
|
2235
2487
|
children: [
|
|
2236
2488
|
replay && /* @__PURE__ */ jsx("style", { children: INK_REPLAY_KEYFRAMES }),
|
|
2237
2489
|
el.inkStrokes.map((stroke, i) => {
|
|
2490
|
+
if (stroke.tiltAngles && stroke.tiltAngles.length > 0) {
|
|
2491
|
+
const magnitudes = stroke.tiltMagnitudes ?? stroke.tiltAngles.map(() => 0.5);
|
|
2492
|
+
const widths = stroke.pressures && stroke.pressures.length > 1 && hasPressureVariation(stroke.pressures) ? pressuresToWidths(stroke.pressures, stroke.width) : [stroke.width];
|
|
2493
|
+
return /* @__PURE__ */ jsx("g", { children: renderNibMarkStroke(
|
|
2494
|
+
stroke.path,
|
|
2495
|
+
widths,
|
|
2496
|
+
stroke.tiltAngles,
|
|
2497
|
+
magnitudes,
|
|
2498
|
+
stroke.width,
|
|
2499
|
+
stroke.color,
|
|
2500
|
+
stroke.opacity,
|
|
2501
|
+
`${el.id}-cp-ink-${i}`
|
|
2502
|
+
) }, `${el.id}-cp-ink-${i}`);
|
|
2503
|
+
}
|
|
2238
2504
|
if (pressureSensitive && stroke.pressures && stroke.pressures.length > 1 && hasPressureVariation(stroke.pressures)) {
|
|
2239
2505
|
const pointWidths = pressuresToWidths(stroke.pressures, stroke.width);
|
|
2240
2506
|
return /* @__PURE__ */ jsx("g", { children: renderPressureStroke(
|
|
@@ -2447,14 +2713,6 @@ function getOleIcon(type, color, size = 32) {
|
|
|
2447
2713
|
return GenericOleIcon(color, size);
|
|
2448
2714
|
}
|
|
2449
2715
|
}
|
|
2450
|
-
function getOleAriaLabel(el) {
|
|
2451
|
-
const oleType = resolveOleType(el);
|
|
2452
|
-
const typeLabel = getOleTypeLabel(oleType);
|
|
2453
|
-
if (el.fileName) {
|
|
2454
|
-
return `${typeLabel}: ${el.fileName}`;
|
|
2455
|
-
}
|
|
2456
|
-
return typeLabel;
|
|
2457
|
-
}
|
|
2458
2716
|
function renderOleBadge(oleType) {
|
|
2459
2717
|
const color = getOleTypeColor(oleType);
|
|
2460
2718
|
const shortLabel = getOleBadgeLabel(oleType);
|
|
@@ -2634,15 +2892,15 @@ function InlineTextEditor({
|
|
|
2634
2892
|
}
|
|
2635
2893
|
);
|
|
2636
2894
|
}
|
|
2637
|
-
function
|
|
2895
|
+
function FailedToLoad6() {
|
|
2638
2896
|
return null;
|
|
2639
2897
|
}
|
|
2640
|
-
var LazyModel3DScene =
|
|
2898
|
+
var LazyModel3DScene = React19.lazy(
|
|
2641
2899
|
async () => {
|
|
2642
2900
|
try {
|
|
2643
|
-
return await import('./Model3DScene-
|
|
2901
|
+
return await import('./Model3DScene-IAY33GO2.mjs');
|
|
2644
2902
|
} catch {
|
|
2645
|
-
return { default:
|
|
2903
|
+
return { default: FailedToLoad6 };
|
|
2646
2904
|
}
|
|
2647
2905
|
}
|
|
2648
2906
|
);
|
|
@@ -2723,7 +2981,7 @@ function PosterFallback({
|
|
|
2723
2981
|
}
|
|
2724
2982
|
);
|
|
2725
2983
|
}
|
|
2726
|
-
var Model3DErrorBoundary = class extends
|
|
2984
|
+
var Model3DErrorBoundary = class extends React19.Component {
|
|
2727
2985
|
constructor(props) {
|
|
2728
2986
|
super(props);
|
|
2729
2987
|
this.state = { hasError: false };
|
|
@@ -2785,6 +3043,7 @@ function buildEmbedInfo(el) {
|
|
|
2785
3043
|
const canDownload = Boolean(el.oleEmbeddedData);
|
|
2786
3044
|
return {
|
|
2787
3045
|
fileName: el.oleEmbeddedFileName ?? el.fileName,
|
|
3046
|
+
displayName: getOleDisplayName(el),
|
|
2788
3047
|
readableSize: formatBytes(el.oleEmbeddedByteSize),
|
|
2789
3048
|
progId: el.oleProgId,
|
|
2790
3049
|
typeLabel: getOleTypeLabel(resolveOleType(el)),
|
|
@@ -2793,7 +3052,7 @@ function buildEmbedInfo(el) {
|
|
|
2793
3052
|
};
|
|
2794
3053
|
}
|
|
2795
3054
|
function buildTooltip(info) {
|
|
2796
|
-
const parts = [info.
|
|
3055
|
+
const parts = [info.displayName, info.typeLabel];
|
|
2797
3056
|
if (info.readableSize) {
|
|
2798
3057
|
parts.push(info.readableSize);
|
|
2799
3058
|
}
|
|
@@ -2881,7 +3140,7 @@ function OleRenderer({ element: el }) {
|
|
|
2881
3140
|
}
|
|
2882
3141
|
const color = getOleTypeColor(oleType);
|
|
2883
3142
|
const label = getOleTypeLabel(oleType);
|
|
2884
|
-
const displayName = info.
|
|
3143
|
+
const displayName = info.displayName;
|
|
2885
3144
|
return /* @__PURE__ */ jsxs(
|
|
2886
3145
|
"div",
|
|
2887
3146
|
{
|
|
@@ -2928,10 +3187,10 @@ function SmartArtInlineNodeEditor({
|
|
|
2928
3187
|
onCancel
|
|
2929
3188
|
}) {
|
|
2930
3189
|
const { t } = useTranslation();
|
|
2931
|
-
const ref =
|
|
2932
|
-
const [value, setValue] =
|
|
2933
|
-
const settled =
|
|
2934
|
-
|
|
3190
|
+
const ref = React19.useRef(null);
|
|
3191
|
+
const [value, setValue] = React19.useState(initialText);
|
|
3192
|
+
const settled = React19.useRef(false);
|
|
3193
|
+
React19.useEffect(() => {
|
|
2935
3194
|
const el = ref.current;
|
|
2936
3195
|
if (el) {
|
|
2937
3196
|
el.focus();
|
|
@@ -3023,16 +3282,16 @@ function findNodeIdFromEvent(target) {
|
|
|
3023
3282
|
return null;
|
|
3024
3283
|
}
|
|
3025
3284
|
function useSmartArtHoverState(containerRef) {
|
|
3026
|
-
const [hoveredNodeId, setHoveredNodeId] =
|
|
3027
|
-
const [hoveredNodeRect, setHoveredNodeRect] =
|
|
3028
|
-
const hideTimeoutRef =
|
|
3029
|
-
const cancelPendingHide =
|
|
3285
|
+
const [hoveredNodeId, setHoveredNodeId] = React19.useState(null);
|
|
3286
|
+
const [hoveredNodeRect, setHoveredNodeRect] = React19.useState(null);
|
|
3287
|
+
const hideTimeoutRef = React19.useRef(null);
|
|
3288
|
+
const cancelPendingHide = React19.useCallback(() => {
|
|
3030
3289
|
if (hideTimeoutRef.current !== null) {
|
|
3031
3290
|
window.clearTimeout(hideTimeoutRef.current);
|
|
3032
3291
|
hideTimeoutRef.current = null;
|
|
3033
3292
|
}
|
|
3034
3293
|
}, []);
|
|
3035
|
-
const handleMouseMove =
|
|
3294
|
+
const handleMouseMove = React19.useCallback(
|
|
3036
3295
|
(e, ignoreRef) => {
|
|
3037
3296
|
const nodeEl = findNodeIdFromEvent(e.target);
|
|
3038
3297
|
const container = containerRef.current;
|
|
@@ -3060,12 +3319,12 @@ function useSmartArtHoverState(containerRef) {
|
|
|
3060
3319
|
},
|
|
3061
3320
|
[containerRef, cancelPendingHide]
|
|
3062
3321
|
);
|
|
3063
|
-
const clearHover =
|
|
3322
|
+
const clearHover = React19.useCallback(() => {
|
|
3064
3323
|
cancelPendingHide();
|
|
3065
3324
|
setHoveredNodeId(null);
|
|
3066
3325
|
setHoveredNodeRect(null);
|
|
3067
3326
|
}, [cancelPendingHide]);
|
|
3068
|
-
|
|
3327
|
+
React19.useEffect(() => cancelPendingHide, [cancelPendingHide]);
|
|
3069
3328
|
return { hoveredNodeId, hoveredNodeRect, handleMouseMove, clearHover };
|
|
3070
3329
|
}
|
|
3071
3330
|
var EDITOR_PADDING = 4;
|
|
@@ -3080,11 +3339,11 @@ function SmartArtEditableLayer({
|
|
|
3080
3339
|
onChangeNodeStyle,
|
|
3081
3340
|
children
|
|
3082
3341
|
}) {
|
|
3083
|
-
const containerRef =
|
|
3084
|
-
const styleBarRef =
|
|
3085
|
-
const [edit, setEdit] =
|
|
3342
|
+
const containerRef = React19.useRef(null);
|
|
3343
|
+
const styleBarRef = React19.useRef(null);
|
|
3344
|
+
const [edit, setEdit] = React19.useState(null);
|
|
3086
3345
|
const { hoveredNodeId, hoveredNodeRect, handleMouseMove, clearHover } = useSmartArtHoverState(containerRef);
|
|
3087
|
-
const openEditor =
|
|
3346
|
+
const openEditor = React19.useCallback(
|
|
3088
3347
|
(target) => {
|
|
3089
3348
|
const nodeEl = findNodeIdFromEvent(target);
|
|
3090
3349
|
const container = containerRef.current;
|
|
@@ -3667,20 +3926,20 @@ function arePropsEqual(prev, next) {
|
|
|
3667
3926
|
}
|
|
3668
3927
|
return true;
|
|
3669
3928
|
}
|
|
3670
|
-
var SmartArtRenderer =
|
|
3671
|
-
function
|
|
3929
|
+
var SmartArtRenderer = React19.memo(SmartArtRendererImpl, arePropsEqual);
|
|
3930
|
+
function FailedToLoad7() {
|
|
3672
3931
|
return null;
|
|
3673
3932
|
}
|
|
3674
|
-
var LazySmartArt3DScene =
|
|
3933
|
+
var LazySmartArt3DScene = React19.lazy(
|
|
3675
3934
|
async () => {
|
|
3676
3935
|
try {
|
|
3677
3936
|
return await import('./SmartArt3DScene-XCFVGCXE.mjs');
|
|
3678
3937
|
} catch {
|
|
3679
|
-
return { default:
|
|
3938
|
+
return { default: FailedToLoad7 };
|
|
3680
3939
|
}
|
|
3681
3940
|
}
|
|
3682
3941
|
);
|
|
3683
|
-
var
|
|
3942
|
+
var SceneErrorBoundary6 = class extends React19.Component {
|
|
3684
3943
|
constructor(props) {
|
|
3685
3944
|
super(props);
|
|
3686
3945
|
this.state = { hasError: false };
|
|
@@ -3746,7 +4005,7 @@ function SmartArt3DRenderer({
|
|
|
3746
4005
|
if (threeAvailable === null) {
|
|
3747
4006
|
return svgFallback;
|
|
3748
4007
|
}
|
|
3749
|
-
const sceneNode = /* @__PURE__ */ jsx(
|
|
4008
|
+
const sceneNode = /* @__PURE__ */ jsx(SceneErrorBoundary6, { fallback: svgFallback, children: /* @__PURE__ */ jsx(Suspense, { fallback: svgFallback, children: /* @__PURE__ */ jsx(
|
|
3750
4009
|
LazySmartArt3DScene,
|
|
3751
4010
|
{
|
|
3752
4011
|
model,
|
|
@@ -4599,7 +4858,7 @@ function StaticElementRendererImpl({
|
|
|
4599
4858
|
}
|
|
4600
4859
|
);
|
|
4601
4860
|
}
|
|
4602
|
-
var StaticElementRenderer =
|
|
4861
|
+
var StaticElementRenderer = React19.memo(StaticElementRendererImpl);
|
|
4603
4862
|
StaticElementRenderer.displayName = "StaticElementRenderer";
|
|
4604
4863
|
var PREVIEW_CANVAS_WIDTH = 1280;
|
|
4605
4864
|
var PREVIEW_CANVAS_HEIGHT = 720;
|
|
@@ -5521,15 +5780,38 @@ function ArrangeSection(p) {
|
|
|
5521
5780
|
function TransitionsSection(p) {
|
|
5522
5781
|
const { t } = useTranslation();
|
|
5523
5782
|
const canEdit = p.canEdit !== false;
|
|
5524
|
-
const draft =
|
|
5525
|
-
const [durationBuffer, setDurationBuffer] =
|
|
5526
|
-
const [advanceBuffer, setAdvanceBuffer] =
|
|
5527
|
-
const commit =
|
|
5783
|
+
const draft = React19.useMemo(() => readRibbonTransitionDraft(p.activeSlide), [p.activeSlide]);
|
|
5784
|
+
const [durationBuffer, setDurationBuffer] = React19.useState(null);
|
|
5785
|
+
const [advanceBuffer, setAdvanceBuffer] = React19.useState(null);
|
|
5786
|
+
const commit = React19.useCallback(
|
|
5528
5787
|
(changes) => {
|
|
5529
5788
|
p.onTransitionChange(ribbonTransitionUpdates({ ...draft, ...changes }));
|
|
5530
5789
|
},
|
|
5531
5790
|
[draft, p]
|
|
5532
5791
|
);
|
|
5792
|
+
const soundFileInputRef = React19.useRef(null);
|
|
5793
|
+
const handleSoundFilePicked = React19.useCallback(
|
|
5794
|
+
(file) => {
|
|
5795
|
+
void readSoundFileAsDataUrl(file).then((dataUrl) => {
|
|
5796
|
+
if (dataUrl) {
|
|
5797
|
+
p.onTransitionChange(applyTransitionSoundFile({ name: file.name, dataUrl }));
|
|
5798
|
+
}
|
|
5799
|
+
return void 0;
|
|
5800
|
+
});
|
|
5801
|
+
},
|
|
5802
|
+
[p]
|
|
5803
|
+
);
|
|
5804
|
+
const handleSoundSelectChange = (event) => {
|
|
5805
|
+
const value = event.target.value;
|
|
5806
|
+
if (value === TRANSITION_SOUND_OTHER_VALUE) {
|
|
5807
|
+
soundFileInputRef.current?.click();
|
|
5808
|
+
event.target.value = transitionSoundSelectedValue(p.activeSlide?.transition);
|
|
5809
|
+
return;
|
|
5810
|
+
}
|
|
5811
|
+
if (value === TRANSITION_SOUND_NONE_VALUE) {
|
|
5812
|
+
p.onTransitionChange(clearTransitionSound());
|
|
5813
|
+
}
|
|
5814
|
+
};
|
|
5533
5815
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
5534
5816
|
/* @__PURE__ */ jsxs(
|
|
5535
5817
|
"button",
|
|
@@ -5593,9 +5875,26 @@ function TransitionsSection(p) {
|
|
|
5593
5875
|
{
|
|
5594
5876
|
"aria-label": t("pptx.ribbon.sound"),
|
|
5595
5877
|
className: "w-24 px-1.5 py-1 rounded border border-border bg-muted text-xs text-foreground disabled:opacity-50",
|
|
5596
|
-
|
|
5597
|
-
|
|
5598
|
-
|
|
5878
|
+
disabled: !canEdit,
|
|
5879
|
+
value: transitionSoundSelectedValue(p.activeSlide?.transition),
|
|
5880
|
+
onChange: handleSoundSelectChange,
|
|
5881
|
+
children: transitionSoundOptions(p.activeSlide?.transition).map((option) => /* @__PURE__ */ jsx("option", { value: option.value, children: option.i18nKey ? t(option.i18nKey) : option.label }, option.value))
|
|
5882
|
+
}
|
|
5883
|
+
),
|
|
5884
|
+
/* @__PURE__ */ jsx(
|
|
5885
|
+
"input",
|
|
5886
|
+
{
|
|
5887
|
+
ref: soundFileInputRef,
|
|
5888
|
+
type: "file",
|
|
5889
|
+
accept: "audio/*",
|
|
5890
|
+
className: "hidden",
|
|
5891
|
+
onChange: (e) => {
|
|
5892
|
+
const file = e.target.files?.[0];
|
|
5893
|
+
if (file) {
|
|
5894
|
+
handleSoundFilePicked(file);
|
|
5895
|
+
}
|
|
5896
|
+
e.target.value = "";
|
|
5897
|
+
}
|
|
5599
5898
|
}
|
|
5600
5899
|
)
|
|
5601
5900
|
] }),
|
|
@@ -5834,7 +6133,7 @@ function AccountPage() {
|
|
|
5834
6133
|
return void 0;
|
|
5835
6134
|
});
|
|
5836
6135
|
};
|
|
5837
|
-
const version = "3.0.
|
|
6136
|
+
const version = "3.0.4" ;
|
|
5838
6137
|
return /* @__PURE__ */ jsxs("div", { className: "mt-8 max-w-[700px] space-y-6", children: [
|
|
5839
6138
|
/* @__PURE__ */ jsxs("section", { className: cardClass, children: [
|
|
5840
6139
|
/* @__PURE__ */ jsxs("h2", { className: "flex items-center gap-2 text-sm font-semibold", children: [
|
|
@@ -6243,9 +6542,9 @@ function RibbonMenu({
|
|
|
6243
6542
|
return;
|
|
6244
6543
|
}
|
|
6245
6544
|
const update = () => {
|
|
6246
|
-
const
|
|
6545
|
+
const { left, top } = computeAnchoredPopupPosition(anchor.getBoundingClientRect());
|
|
6247
6546
|
setPos(
|
|
6248
|
-
(prev) => prev && prev.left ===
|
|
6547
|
+
(prev) => prev && prev.left === left && prev.top === top ? prev : { left: left ?? 0, top }
|
|
6249
6548
|
);
|
|
6250
6549
|
};
|
|
6251
6550
|
update();
|
|
@@ -6274,7 +6573,7 @@ function FontFamilyMenu(p) {
|
|
|
6274
6573
|
embeddedFonts: p.embeddedFonts,
|
|
6275
6574
|
customFonts: p.customFonts
|
|
6276
6575
|
});
|
|
6277
|
-
return /* @__PURE__ */ jsx(RibbonMenu, { anchorRef: p.anchorRef, className: "flex flex-col w-64 pt-1", children: /* @__PURE__ */ jsx("div", { className: "rounded-lg border border-border bg-popover backdrop-blur-lg shadow-2xl py-1 max-h-80 overflow-y-auto", children: groups.map((group, groupIndex) => /* @__PURE__ */ jsxs(
|
|
6576
|
+
return /* @__PURE__ */ jsx(RibbonMenu, { anchorRef: p.anchorRef, className: "flex flex-col w-64 pt-1", children: /* @__PURE__ */ jsx("div", { className: "rounded-lg border border-border bg-popover backdrop-blur-lg shadow-2xl py-1 max-h-80 overflow-y-auto", children: groups.map((group, groupIndex) => /* @__PURE__ */ jsxs(React19.Fragment, { children: [
|
|
6278
6577
|
/* @__PURE__ */ jsx(
|
|
6279
6578
|
"div",
|
|
6280
6579
|
{
|
|
@@ -10831,7 +11130,7 @@ function HorizontalRulerView({ ticks, widthPx, highlight }) {
|
|
|
10831
11130
|
}
|
|
10832
11131
|
);
|
|
10833
11132
|
}
|
|
10834
|
-
var HorizontalRuler =
|
|
11133
|
+
var HorizontalRuler = React19.memo(HorizontalRulerView);
|
|
10835
11134
|
HorizontalRuler.displayName = "HorizontalRuler";
|
|
10836
11135
|
function VerticalRulerView({ ticks, heightPx, highlight }) {
|
|
10837
11136
|
return /* @__PURE__ */ jsxs(
|
|
@@ -10903,7 +11202,7 @@ function VerticalRulerView({ ticks, heightPx, highlight }) {
|
|
|
10903
11202
|
}
|
|
10904
11203
|
);
|
|
10905
11204
|
}
|
|
10906
|
-
var VerticalRuler =
|
|
11205
|
+
var VerticalRuler = React19.memo(VerticalRulerView);
|
|
10907
11206
|
VerticalRuler.displayName = "VerticalRuler";
|
|
10908
11207
|
function Ruler({
|
|
10909
11208
|
canvasSize,
|
|
@@ -11417,15 +11716,9 @@ function useDrawingOverlay({
|
|
|
11417
11716
|
if (!pt2) {
|
|
11418
11717
|
return;
|
|
11419
11718
|
}
|
|
11420
|
-
const
|
|
11421
|
-
|
|
11422
|
-
|
|
11423
|
-
continue;
|
|
11424
|
-
}
|
|
11425
|
-
if (pt2.x >= el.x - HIT_RADIUS && pt2.x <= el.x + el.width + HIT_RADIUS && pt2.y >= el.y - HIT_RADIUS && pt2.y <= el.y + el.height + HIT_RADIUS) {
|
|
11426
|
-
onEraseInkElement?.(el.id);
|
|
11427
|
-
break;
|
|
11428
|
-
}
|
|
11719
|
+
const hitId = findEraserHitElementId(activeSlide.elements, pt2);
|
|
11720
|
+
if (hitId) {
|
|
11721
|
+
onEraseInkElement?.(hitId);
|
|
11429
11722
|
}
|
|
11430
11723
|
return;
|
|
11431
11724
|
}
|
|
@@ -12663,7 +12956,7 @@ function arePropsEqual2(prev, next) {
|
|
|
12663
12956
|
}
|
|
12664
12957
|
return true;
|
|
12665
12958
|
}
|
|
12666
|
-
var SlideThumbnail =
|
|
12959
|
+
var SlideThumbnail = React19.memo(SlideThumbnailImpl, arePropsEqual2);
|
|
12667
12960
|
|
|
12668
12961
|
// src/viewer/components/context-menu-dispatch.ts
|
|
12669
12962
|
function tableCell(props) {
|
|
@@ -13212,7 +13505,7 @@ function LazyThumbnailInner({
|
|
|
13212
13505
|
}
|
|
13213
13506
|
) });
|
|
13214
13507
|
}
|
|
13215
|
-
var LazyThumbnail =
|
|
13508
|
+
var LazyThumbnail = React19.memo(LazyThumbnailInner);
|
|
13216
13509
|
|
|
13217
13510
|
// src/viewer/components/slides-pane/utils.ts
|
|
13218
13511
|
function formatTimingMs(ms) {
|
|
@@ -13366,7 +13659,7 @@ function SlideItemInner({
|
|
|
13366
13659
|
}
|
|
13367
13660
|
);
|
|
13368
13661
|
}
|
|
13369
|
-
var SlideItem =
|
|
13662
|
+
var SlideItem = React19.memo(SlideItemInner);
|
|
13370
13663
|
function useSlidePaneCallbacks(onMoveSlide, onRenameSection, onToggleSectionCollapse) {
|
|
13371
13664
|
const [collapsedSections, setCollapsedSections] = useState({});
|
|
13372
13665
|
const [renamingSectionId, setRenamingSectionId] = useState(null);
|
|
@@ -14672,7 +14965,7 @@ function arePropsEqual3(prev, next) {
|
|
|
14672
14965
|
}
|
|
14673
14966
|
return true;
|
|
14674
14967
|
}
|
|
14675
|
-
var SlideCard =
|
|
14968
|
+
var SlideCard = React19.memo(SlideCardImpl, arePropsEqual3);
|
|
14676
14969
|
function SorterContextMenu({
|
|
14677
14970
|
x,
|
|
14678
14971
|
y,
|
|
@@ -18116,9 +18409,9 @@ function PresentationSubtitleBar({
|
|
|
18116
18409
|
function renderNotesSegments(segments) {
|
|
18117
18410
|
return notesSegmentsToSpans(segments).map((span) => {
|
|
18118
18411
|
if (span.kind === "break") {
|
|
18119
|
-
return
|
|
18412
|
+
return React19.createElement("br", { key: span.key });
|
|
18120
18413
|
}
|
|
18121
|
-
return
|
|
18414
|
+
return React19.createElement(
|
|
18122
18415
|
"span",
|
|
18123
18416
|
{ key: span.key, style: span.style },
|
|
18124
18417
|
span.text
|
|
@@ -18344,7 +18637,7 @@ function arePropsEqual4(prev, next) {
|
|
|
18344
18637
|
}
|
|
18345
18638
|
return true;
|
|
18346
18639
|
}
|
|
18347
|
-
var ScaledSlidePreview =
|
|
18640
|
+
var ScaledSlidePreview = React19.memo(ScaledSlidePreviewImpl, arePropsEqual4);
|
|
18348
18641
|
function PresenterNotesRail({
|
|
18349
18642
|
slides,
|
|
18350
18643
|
current,
|
|
@@ -19303,6 +19596,51 @@ var SEQUENCE_OPTIONS = [
|
|
|
19303
19596
|
{ value: "byWord", labelKey: "pptx.animation.sequence.byWord" },
|
|
19304
19597
|
{ value: "byLetter", labelKey: "pptx.animation.sequence.byLetter" }
|
|
19305
19598
|
];
|
|
19599
|
+
var AFTER_ANIMATION_OPTIONS = [
|
|
19600
|
+
{ value: "none", labelKey: "pptx.animation.afterAnimation.none" },
|
|
19601
|
+
{ value: "dimToColor", labelKey: "pptx.animation.afterAnimation.dimToColor" },
|
|
19602
|
+
{ value: "hideAfterAnimation", labelKey: "pptx.animation.afterAnimation.hideAfterAnimation" },
|
|
19603
|
+
{ value: "hideOnNextClick", labelKey: "pptx.animation.afterAnimation.hideOnNextClick" }
|
|
19604
|
+
];
|
|
19605
|
+
function AfterAnimationRow({
|
|
19606
|
+
action,
|
|
19607
|
+
color,
|
|
19608
|
+
canEdit,
|
|
19609
|
+
onActionChange,
|
|
19610
|
+
onColorChange
|
|
19611
|
+
}) {
|
|
19612
|
+
const { t } = useTranslation();
|
|
19613
|
+
return /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-1", children: [
|
|
19614
|
+
/* @__PURE__ */ jsxs("label", { className: "flex flex-col gap-1", children: [
|
|
19615
|
+
/* @__PURE__ */ jsx("span", { className: "text-muted-foreground text-[11px]", children: t("pptx.animation.afterAnimation") }),
|
|
19616
|
+
/* @__PURE__ */ jsx(
|
|
19617
|
+
"select",
|
|
19618
|
+
{
|
|
19619
|
+
"aria-label": t("pptx.animation.afterAnimation"),
|
|
19620
|
+
value: action,
|
|
19621
|
+
onChange: (event) => onActionChange(event.target.value),
|
|
19622
|
+
disabled: !canEdit,
|
|
19623
|
+
className: SELECT_CLS,
|
|
19624
|
+
children: AFTER_ANIMATION_OPTIONS.map((option) => /* @__PURE__ */ jsx("option", { value: option.value, children: t(option.labelKey) }, option.value))
|
|
19625
|
+
}
|
|
19626
|
+
)
|
|
19627
|
+
] }),
|
|
19628
|
+
action === "dimToColor" && /* @__PURE__ */ jsxs("label", { className: "flex items-center gap-2", children: [
|
|
19629
|
+
/* @__PURE__ */ jsx("span", { className: "text-muted-foreground text-[11px]", children: t("pptx.animation.afterAnimation.color") }),
|
|
19630
|
+
/* @__PURE__ */ jsx(
|
|
19631
|
+
"input",
|
|
19632
|
+
{
|
|
19633
|
+
type: "color",
|
|
19634
|
+
"aria-label": t("pptx.animation.afterAnimation.color"),
|
|
19635
|
+
value: color ?? "#808080",
|
|
19636
|
+
onChange: (event) => onColorChange(event.target.value),
|
|
19637
|
+
disabled: !canEdit,
|
|
19638
|
+
className: "h-6 w-10 rounded border border-border bg-transparent p-0"
|
|
19639
|
+
}
|
|
19640
|
+
)
|
|
19641
|
+
] })
|
|
19642
|
+
] });
|
|
19643
|
+
}
|
|
19306
19644
|
function animationTypeColor(anim) {
|
|
19307
19645
|
if (anim.entrance) {
|
|
19308
19646
|
return "bg-green-500/60";
|
|
@@ -19324,6 +19662,7 @@ function AnimationTimelineSection({
|
|
|
19324
19662
|
const effectLabel = (anim) => animationEffectLabel(anim, (key) => t(key));
|
|
19325
19663
|
const {
|
|
19326
19664
|
sortedAnimations,
|
|
19665
|
+
timelineRows,
|
|
19327
19666
|
dragIndex,
|
|
19328
19667
|
dragOverIndex,
|
|
19329
19668
|
timelineBarData,
|
|
@@ -19337,11 +19676,13 @@ function AnimationTimelineSection({
|
|
|
19337
19676
|
handleDragEnd,
|
|
19338
19677
|
handleMoveUp,
|
|
19339
19678
|
handleMoveDown,
|
|
19340
|
-
getTimelineLabel
|
|
19679
|
+
getTimelineLabel,
|
|
19680
|
+
getNativeRowLabel
|
|
19341
19681
|
} = handlers;
|
|
19342
|
-
if (
|
|
19682
|
+
if (timelineRows.length === 0 && timelineBarData.length === 0) {
|
|
19343
19683
|
return null;
|
|
19344
19684
|
}
|
|
19685
|
+
const animationByElementId = new Map(sortedAnimations.map((anim) => [anim.elementId, anim]));
|
|
19345
19686
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
19346
19687
|
timelineBarData.length > 0 && /* @__PURE__ */ jsxs("div", { className: "mt-2 pt-2 border-t border-border", children: [
|
|
19347
19688
|
/* @__PURE__ */ jsx("div", { className: "text-[10px] uppercase tracking-wide text-muted-foreground mb-1", children: t("pptx.animation.timelineBar") }),
|
|
@@ -19364,12 +19705,46 @@ function AnimationTimelineSection({
|
|
|
19364
19705
|
bar.anim.elementId
|
|
19365
19706
|
)) })
|
|
19366
19707
|
] }),
|
|
19367
|
-
|
|
19708
|
+
timelineRows.length > 0 && /* @__PURE__ */ jsxs("div", { className: "mt-2 pt-2 border-t border-border", children: [
|
|
19368
19709
|
/* @__PURE__ */ jsx("div", { className: "text-[10px] uppercase tracking-wide text-muted-foreground mb-1", children: t("pptx.animation.timeline") }),
|
|
19369
|
-
/* @__PURE__ */ jsx("div", { className: "space-y-0.5 max-h-40 overflow-y-auto", children:
|
|
19710
|
+
/* @__PURE__ */ jsx("div", { className: "space-y-0.5 max-h-40 overflow-y-auto", children: timelineRows.map((row, index) => {
|
|
19711
|
+
const isDragOver = dragOverIndex === index;
|
|
19712
|
+
if (row.kind === "native") {
|
|
19713
|
+
return /* @__PURE__ */ jsxs(
|
|
19714
|
+
"div",
|
|
19715
|
+
{
|
|
19716
|
+
onDragOver: (e) => handleDragOver(index, e),
|
|
19717
|
+
onDragEnter: () => handleDragEnter(index),
|
|
19718
|
+
onDragLeave: handleDragLeave,
|
|
19719
|
+
onDrop: (e) => handleDrop(index, e),
|
|
19720
|
+
title: t("pptx.animation.nativeEffectHint"),
|
|
19721
|
+
className: cn(
|
|
19722
|
+
"flex items-center gap-1 px-1 py-0.5 rounded text-[10px] italic",
|
|
19723
|
+
"bg-muted/20 text-muted-foreground/70",
|
|
19724
|
+
isDragOver && "border-t-2 border-primary"
|
|
19725
|
+
),
|
|
19726
|
+
children: [
|
|
19727
|
+
/* @__PURE__ */ jsx("span", { className: "w-3 h-3 shrink-0" }),
|
|
19728
|
+
/* @__PURE__ */ jsxs("span", { className: "text-muted-foreground/70 w-4 shrink-0", children: [
|
|
19729
|
+
index + 1,
|
|
19730
|
+
"."
|
|
19731
|
+
] }),
|
|
19732
|
+
/* @__PURE__ */ jsxs("span", { className: "truncate flex-1", children: [
|
|
19733
|
+
t("pptx.animation.nativeEffect"),
|
|
19734
|
+
": ",
|
|
19735
|
+
getNativeRowLabel(row.targetIds)
|
|
19736
|
+
] })
|
|
19737
|
+
]
|
|
19738
|
+
},
|
|
19739
|
+
row.key
|
|
19740
|
+
);
|
|
19741
|
+
}
|
|
19742
|
+
const anim = animationByElementId.get(row.elementId);
|
|
19743
|
+
if (!anim) {
|
|
19744
|
+
return null;
|
|
19745
|
+
}
|
|
19370
19746
|
const isSelected = selectedElementId === anim.elementId;
|
|
19371
19747
|
const isDragging = dragIndex === index;
|
|
19372
|
-
const isDragOver = dragOverIndex === index;
|
|
19373
19748
|
return /* @__PURE__ */ jsxs(
|
|
19374
19749
|
"div",
|
|
19375
19750
|
{
|
|
@@ -19417,7 +19792,7 @@ function AnimationTimelineSection({
|
|
|
19417
19792
|
"button",
|
|
19418
19793
|
{
|
|
19419
19794
|
type: "button",
|
|
19420
|
-
disabled: index ===
|
|
19795
|
+
disabled: index === timelineRows.length - 1,
|
|
19421
19796
|
className: "text-muted-foreground hover:text-foreground disabled:opacity-30 transition-colors",
|
|
19422
19797
|
onClick: (e) => {
|
|
19423
19798
|
e.stopPropagation();
|
|
@@ -19430,12 +19805,70 @@ function AnimationTimelineSection({
|
|
|
19430
19805
|
] })
|
|
19431
19806
|
]
|
|
19432
19807
|
},
|
|
19433
|
-
|
|
19808
|
+
row.key
|
|
19434
19809
|
);
|
|
19435
19810
|
}) })
|
|
19436
19811
|
] })
|
|
19437
19812
|
] });
|
|
19438
19813
|
}
|
|
19814
|
+
function EffectSoundRow({
|
|
19815
|
+
soundState,
|
|
19816
|
+
canEdit,
|
|
19817
|
+
onPick
|
|
19818
|
+
}) {
|
|
19819
|
+
const { t } = useTranslation();
|
|
19820
|
+
const fileInputRef = React19.useRef(null);
|
|
19821
|
+
const handleSelectChange = (event) => {
|
|
19822
|
+
if (event.target.value === "custom") {
|
|
19823
|
+
fileInputRef.current?.click();
|
|
19824
|
+
return;
|
|
19825
|
+
}
|
|
19826
|
+
onPick(void 0);
|
|
19827
|
+
};
|
|
19828
|
+
const handleFileChange = (event) => {
|
|
19829
|
+
const file = event.target.files?.[0];
|
|
19830
|
+
event.target.value = "";
|
|
19831
|
+
if (!file) {
|
|
19832
|
+
return;
|
|
19833
|
+
}
|
|
19834
|
+
const reader = new FileReader();
|
|
19835
|
+
reader.onload = () => {
|
|
19836
|
+
if (typeof reader.result === "string") {
|
|
19837
|
+
onPick({ dataUrl: reader.result, fileName: file.name });
|
|
19838
|
+
}
|
|
19839
|
+
};
|
|
19840
|
+
reader.readAsDataURL(file);
|
|
19841
|
+
};
|
|
19842
|
+
return /* @__PURE__ */ jsxs("label", { className: "flex flex-col gap-1", children: [
|
|
19843
|
+
/* @__PURE__ */ jsx("span", { className: "text-muted-foreground text-[11px]", children: t("pptx.animation.sound") }),
|
|
19844
|
+
/* @__PURE__ */ jsxs(
|
|
19845
|
+
"select",
|
|
19846
|
+
{
|
|
19847
|
+
"aria-label": t("pptx.animation.sound"),
|
|
19848
|
+
value: soundState.hasSound ? "custom" : "none",
|
|
19849
|
+
onChange: handleSelectChange,
|
|
19850
|
+
disabled: !canEdit,
|
|
19851
|
+
className: SELECT_CLS,
|
|
19852
|
+
children: [
|
|
19853
|
+
/* @__PURE__ */ jsx("option", { value: "none", children: t("pptx.animation.sound.none") }),
|
|
19854
|
+
/* @__PURE__ */ jsx("option", { value: "custom", children: soundState.hasSound && soundState.fileName ? soundState.fileName : t("pptx.animation.sound.custom") })
|
|
19855
|
+
]
|
|
19856
|
+
}
|
|
19857
|
+
),
|
|
19858
|
+
/* @__PURE__ */ jsx(
|
|
19859
|
+
"input",
|
|
19860
|
+
{
|
|
19861
|
+
ref: fileInputRef,
|
|
19862
|
+
type: "file",
|
|
19863
|
+
accept: "audio/*",
|
|
19864
|
+
"aria-label": t("pptx.animation.sound.chooseFile"),
|
|
19865
|
+
className: "hidden",
|
|
19866
|
+
onChange: handleFileChange,
|
|
19867
|
+
tabIndex: -1
|
|
19868
|
+
}
|
|
19869
|
+
)
|
|
19870
|
+
] });
|
|
19871
|
+
}
|
|
19439
19872
|
function MotionPathRow({
|
|
19440
19873
|
motionPath,
|
|
19441
19874
|
canEdit,
|
|
@@ -19466,6 +19899,7 @@ function MotionPathRow({
|
|
|
19466
19899
|
}
|
|
19467
19900
|
function useAnimationDragDrop({
|
|
19468
19901
|
canEdit,
|
|
19902
|
+
rows,
|
|
19469
19903
|
updateAnimations
|
|
19470
19904
|
}) {
|
|
19471
19905
|
const [dragIndex, setDragIndex] = useState(null);
|
|
@@ -19473,14 +19907,14 @@ function useAnimationDragDrop({
|
|
|
19473
19907
|
const dragCounterRef = useRef(0);
|
|
19474
19908
|
const handleDragStart = useCallback(
|
|
19475
19909
|
(index, event) => {
|
|
19476
|
-
if (!canEdit) {
|
|
19910
|
+
if (!canEdit || rows[index]?.kind !== "editor") {
|
|
19477
19911
|
return;
|
|
19478
19912
|
}
|
|
19479
19913
|
setDragIndex(index);
|
|
19480
19914
|
event.dataTransfer.effectAllowed = "move";
|
|
19481
19915
|
event.dataTransfer.setData("text/plain", String(index));
|
|
19482
19916
|
},
|
|
19483
|
-
[canEdit]
|
|
19917
|
+
[canEdit, rows]
|
|
19484
19918
|
);
|
|
19485
19919
|
const handleDragOver = useCallback((_index, event) => {
|
|
19486
19920
|
event.preventDefault();
|
|
@@ -19498,13 +19932,16 @@ function useAnimationDragDrop({
|
|
|
19498
19932
|
dragCounterRef.current = 0;
|
|
19499
19933
|
}
|
|
19500
19934
|
}, []);
|
|
19501
|
-
const
|
|
19935
|
+
const reorderRows = useCallback(
|
|
19502
19936
|
(sourceIndex, targetIndex) => {
|
|
19503
|
-
|
|
19504
|
-
|
|
19505
|
-
|
|
19937
|
+
const sourceRow = rows[sourceIndex];
|
|
19938
|
+
if (!sourceRow || sourceRow.kind !== "editor") {
|
|
19939
|
+
return;
|
|
19940
|
+
}
|
|
19941
|
+
const nextRows = reorderAnimationTimelineRows(rows, sourceRow.key, targetIndex);
|
|
19942
|
+
updateAnimations((anims) => applyAnimationTimelineOrder(anims, nextRows));
|
|
19506
19943
|
},
|
|
19507
|
-
[updateAnimations]
|
|
19944
|
+
[rows, updateAnimations]
|
|
19508
19945
|
);
|
|
19509
19946
|
const handleDrop = useCallback(
|
|
19510
19947
|
(targetIndex, event) => {
|
|
@@ -19516,9 +19953,9 @@ function useAnimationDragDrop({
|
|
|
19516
19953
|
if (sourceIndex === null || sourceIndex === targetIndex) {
|
|
19517
19954
|
return;
|
|
19518
19955
|
}
|
|
19519
|
-
|
|
19956
|
+
reorderRows(sourceIndex, targetIndex);
|
|
19520
19957
|
},
|
|
19521
|
-
[dragIndex,
|
|
19958
|
+
[dragIndex, reorderRows]
|
|
19522
19959
|
);
|
|
19523
19960
|
const handleDragEnd = useCallback(() => {
|
|
19524
19961
|
setDragIndex(null);
|
|
@@ -19526,19 +19963,19 @@ function useAnimationDragDrop({
|
|
|
19526
19963
|
dragCounterRef.current = 0;
|
|
19527
19964
|
}, []);
|
|
19528
19965
|
const handleMoveUp = useCallback(
|
|
19529
|
-
(
|
|
19530
|
-
if (
|
|
19966
|
+
(rowIndex) => {
|
|
19967
|
+
if (rowIndex <= 0) {
|
|
19531
19968
|
return;
|
|
19532
19969
|
}
|
|
19533
|
-
|
|
19970
|
+
reorderRows(rowIndex, rowIndex - 1);
|
|
19534
19971
|
},
|
|
19535
|
-
[
|
|
19972
|
+
[reorderRows]
|
|
19536
19973
|
);
|
|
19537
19974
|
const handleMoveDown = useCallback(
|
|
19538
|
-
(
|
|
19539
|
-
|
|
19975
|
+
(rowIndex) => {
|
|
19976
|
+
reorderRows(rowIndex, rowIndex + 1);
|
|
19540
19977
|
},
|
|
19541
|
-
[
|
|
19978
|
+
[reorderRows]
|
|
19542
19979
|
);
|
|
19543
19980
|
return {
|
|
19544
19981
|
dragIndex,
|
|
@@ -19621,6 +20058,13 @@ function useAnimationHandlers({
|
|
|
19621
20058
|
() => [...activeSlide.animations ?? []].sort((a, b) => (a.order ?? 0) - (b.order ?? 0)),
|
|
19622
20059
|
[activeSlide.animations]
|
|
19623
20060
|
);
|
|
20061
|
+
const timelineRows = useMemo(
|
|
20062
|
+
() => buildAnimationTimelineRows(
|
|
20063
|
+
activeSlide.animations ?? [],
|
|
20064
|
+
activeSlide.animationTimelineAnchors ?? []
|
|
20065
|
+
),
|
|
20066
|
+
[activeSlide.animations, activeSlide.animationTimelineAnchors]
|
|
20067
|
+
);
|
|
19624
20068
|
const updateAnimations = useCallback(
|
|
19625
20069
|
(updater) => {
|
|
19626
20070
|
if (!canEdit) {
|
|
@@ -19768,11 +20212,42 @@ function useAnimationHandlers({
|
|
|
19768
20212
|
(e) => updateAnimationField("sequence", e.target.value),
|
|
19769
20213
|
[updateAnimationField]
|
|
19770
20214
|
);
|
|
20215
|
+
const effectSoundState = useMemo(
|
|
20216
|
+
() => getEffectSoundState(activeSlide.animations ?? [], selectedElement.id),
|
|
20217
|
+
[activeSlide.animations, selectedElement.id]
|
|
20218
|
+
);
|
|
20219
|
+
const handleEffectSoundPick = useCallback(
|
|
20220
|
+
(pick) => {
|
|
20221
|
+
if (!canEdit) {
|
|
20222
|
+
return;
|
|
20223
|
+
}
|
|
20224
|
+
updateAnimations((anims) => setEffectSound(anims, selectedElement.id, pick));
|
|
20225
|
+
},
|
|
20226
|
+
[canEdit, updateAnimations, selectedElement.id]
|
|
20227
|
+
);
|
|
20228
|
+
const handleAfterAnimationChange = useCallback(
|
|
20229
|
+
(action) => {
|
|
20230
|
+
if (!canEdit) {
|
|
20231
|
+
return;
|
|
20232
|
+
}
|
|
20233
|
+
updateAnimations((anims) => setAfterAnimation(anims, selectedElement.id, action));
|
|
20234
|
+
},
|
|
20235
|
+
[canEdit, updateAnimations, selectedElement.id]
|
|
20236
|
+
);
|
|
20237
|
+
const handleAfterAnimationColorChange = useCallback(
|
|
20238
|
+
(color) => {
|
|
20239
|
+
if (!canEdit) {
|
|
20240
|
+
return;
|
|
20241
|
+
}
|
|
20242
|
+
updateAnimations((anims) => setAfterAnimationColor(anims, selectedElement.id, color));
|
|
20243
|
+
},
|
|
20244
|
+
[canEdit, updateAnimations, selectedElement.id]
|
|
20245
|
+
);
|
|
19771
20246
|
const preview = useAnimationPreview({
|
|
19772
20247
|
selectedElementId: selectedElement.id,
|
|
19773
20248
|
selectedElementAnimation
|
|
19774
20249
|
});
|
|
19775
|
-
const dragDrop = useAnimationDragDrop({ canEdit, updateAnimations });
|
|
20250
|
+
const dragDrop = useAnimationDragDrop({ canEdit, rows: timelineRows, updateAnimations });
|
|
19776
20251
|
const getTimelineLabel = useCallback(
|
|
19777
20252
|
(anim) => {
|
|
19778
20253
|
const el = activeSlide.elements?.find((e) => e.id === anim.elementId);
|
|
@@ -19784,6 +20259,17 @@ function useAnimationHandlers({
|
|
|
19784
20259
|
},
|
|
19785
20260
|
[activeSlide.elements]
|
|
19786
20261
|
);
|
|
20262
|
+
const getNativeRowLabel = useCallback(
|
|
20263
|
+
(targetIds) => targetIds.map((id) => {
|
|
20264
|
+
const el = activeSlide.elements?.find((e) => e.id === id);
|
|
20265
|
+
if (!el) {
|
|
20266
|
+
return id.slice(0, 8);
|
|
20267
|
+
}
|
|
20268
|
+
const text = hasTextProperties(el) ? el.text : void 0;
|
|
20269
|
+
return text || getElementLabel(el);
|
|
20270
|
+
}).join(", "),
|
|
20271
|
+
[activeSlide.elements]
|
|
20272
|
+
);
|
|
19787
20273
|
const hasAnimation = Boolean(
|
|
19788
20274
|
selectedElementAnimation?.entrance || selectedElementAnimation?.exit || selectedElementAnimation?.emphasis || selectedElementAnimation?.motionPath
|
|
19789
20275
|
);
|
|
@@ -19799,6 +20285,7 @@ function useAnimationHandlers({
|
|
|
19799
20285
|
return {
|
|
19800
20286
|
selectedElementAnimation,
|
|
19801
20287
|
sortedAnimations,
|
|
20288
|
+
timelineRows,
|
|
19802
20289
|
hasAnimation,
|
|
19803
20290
|
showDirectionPicker,
|
|
19804
20291
|
timelineBarData,
|
|
@@ -19815,7 +20302,12 @@ function useAnimationHandlers({
|
|
|
19815
20302
|
handleDirectionChange,
|
|
19816
20303
|
handleSequenceChange,
|
|
19817
20304
|
handleMotionPathChange,
|
|
20305
|
+
effectSoundState,
|
|
20306
|
+
handleEffectSoundPick,
|
|
20307
|
+
handleAfterAnimationChange,
|
|
20308
|
+
handleAfterAnimationColorChange,
|
|
19818
20309
|
getTimelineLabel,
|
|
20310
|
+
getNativeRowLabel,
|
|
19819
20311
|
...preview,
|
|
19820
20312
|
...dragDrop
|
|
19821
20313
|
};
|
|
@@ -19850,6 +20342,10 @@ function AnimationPanel({
|
|
|
19850
20342
|
handleDirectionChange,
|
|
19851
20343
|
handleSequenceChange,
|
|
19852
20344
|
handleMotionPathChange,
|
|
20345
|
+
effectSoundState,
|
|
20346
|
+
handleEffectSoundPick,
|
|
20347
|
+
handleAfterAnimationChange,
|
|
20348
|
+
handleAfterAnimationColorChange,
|
|
19853
20349
|
handlePreviewClick
|
|
19854
20350
|
} = handlers;
|
|
19855
20351
|
return /* @__PURE__ */ jsxs("div", { className: "rounded border border-border bg-card p-2 space-y-2", children: [
|
|
@@ -19965,6 +20461,26 @@ function AnimationPanel({
|
|
|
19965
20461
|
}
|
|
19966
20462
|
)
|
|
19967
20463
|
] }),
|
|
20464
|
+
/* @__PURE__ */ jsxs("div", { className: "pt-1 border-t border-border flex flex-col gap-2", children: [
|
|
20465
|
+
/* @__PURE__ */ jsx(
|
|
20466
|
+
EffectSoundRow,
|
|
20467
|
+
{
|
|
20468
|
+
soundState: effectSoundState,
|
|
20469
|
+
canEdit,
|
|
20470
|
+
onPick: handleEffectSoundPick
|
|
20471
|
+
}
|
|
20472
|
+
),
|
|
20473
|
+
/* @__PURE__ */ jsx(
|
|
20474
|
+
AfterAnimationRow,
|
|
20475
|
+
{
|
|
20476
|
+
action: selectedElementAnimation?.afterAnimation ?? "none",
|
|
20477
|
+
color: selectedElementAnimation?.afterAnimationColor,
|
|
20478
|
+
canEdit,
|
|
20479
|
+
onActionChange: handleAfterAnimationChange,
|
|
20480
|
+
onColorChange: handleAfterAnimationColorChange
|
|
20481
|
+
}
|
|
20482
|
+
)
|
|
20483
|
+
] }),
|
|
19968
20484
|
/* @__PURE__ */ jsx("div", { className: "text-[11px] uppercase tracking-wide text-muted-foreground pt-1 border-t border-border", children: t("pptx.animation.timing") }),
|
|
19969
20485
|
/* @__PURE__ */ jsxs("label", { className: "flex flex-col gap-1", children: [
|
|
19970
20486
|
/* @__PURE__ */ jsx("span", { className: "text-muted-foreground text-[11px]", children: t("pptx.animation.trigger") }),
|
|
@@ -21871,7 +22387,7 @@ function ConnectorArrowsSection({
|
|
|
21871
22387
|
["Start", "End"].map((end) => {
|
|
21872
22388
|
const widthKey = end === "Start" ? "connectorStartArrowWidth" : "connectorEndArrowWidth";
|
|
21873
22389
|
const lengthKey = end === "Start" ? "connectorStartArrowLength" : "connectorEndArrowLength";
|
|
21874
|
-
return /* @__PURE__ */ jsxs(
|
|
22390
|
+
return /* @__PURE__ */ jsxs(React19.Fragment, { children: [
|
|
21875
22391
|
/* @__PURE__ */ jsxs("label", { className: "flex flex-col gap-1", children: [
|
|
21876
22392
|
/* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: t(END_LABEL_KEYS[end].width) }),
|
|
21877
22393
|
/* @__PURE__ */ jsx(
|
|
@@ -21948,7 +22464,9 @@ function GroupInfoPanel({
|
|
|
21948
22464
|
] });
|
|
21949
22465
|
}
|
|
21950
22466
|
function OlePropertiesPanel({
|
|
21951
|
-
selectedElement
|
|
22467
|
+
selectedElement,
|
|
22468
|
+
canEdit,
|
|
22469
|
+
onUpdateElement
|
|
21952
22470
|
}) {
|
|
21953
22471
|
const { t } = useTranslation();
|
|
21954
22472
|
if (selectedElement.type !== "ole") {
|
|
@@ -21958,6 +22476,20 @@ function OlePropertiesPanel({
|
|
|
21958
22476
|
return /* @__PURE__ */ jsxs("div", { className: CARD, children: [
|
|
21959
22477
|
/* @__PURE__ */ jsx("div", { className: HEADING, children: t("pptx.ole.title") }),
|
|
21960
22478
|
/* @__PURE__ */ jsxs("div", { className: "space-y-1.5 text-[11px]", children: [
|
|
22479
|
+
/* @__PURE__ */ jsxs("label", { className: "flex flex-col gap-1", children: [
|
|
22480
|
+
/* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: t("pptx.ole.objectName") }),
|
|
22481
|
+
/* @__PURE__ */ jsx(
|
|
22482
|
+
"input",
|
|
22483
|
+
{
|
|
22484
|
+
type: "text",
|
|
22485
|
+
disabled: !canEdit,
|
|
22486
|
+
className: INPUT,
|
|
22487
|
+
value: ole.oleName ?? "",
|
|
22488
|
+
placeholder: t("pptx.ole.objectNamePlaceholder"),
|
|
22489
|
+
onChange: (e) => onUpdateElement(buildOleObjectNamePatch(e.target.value))
|
|
22490
|
+
}
|
|
22491
|
+
)
|
|
22492
|
+
] }),
|
|
21961
22493
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-2", children: [
|
|
21962
22494
|
/* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: t("pptx.ole.type") }),
|
|
21963
22495
|
/* @__PURE__ */ jsx("span", { className: "text-foreground truncate", children: getOleObjectTypeLabel(ole.oleObjectType) })
|
|
@@ -24739,7 +25271,7 @@ function StrokeEffectsSection({
|
|
|
24739
25271
|
] }),
|
|
24740
25272
|
EFFECT_CONFIGS.map((cfg) => {
|
|
24741
25273
|
const on = cfg.isOn(style);
|
|
24742
|
-
return /* @__PURE__ */ jsxs(
|
|
25274
|
+
return /* @__PURE__ */ jsxs(React19.Fragment, { children: [
|
|
24743
25275
|
/* @__PURE__ */ jsxs("label", { className: `inline-flex items-center gap-2 text-foreground ${COL2}`, children: [
|
|
24744
25276
|
/* @__PURE__ */ jsx(
|
|
24745
25277
|
"input",
|
|
@@ -25579,7 +26111,7 @@ function TextWarpGallery({
|
|
|
25579
26111
|
onUpdateTextStyle
|
|
25580
26112
|
}) {
|
|
25581
26113
|
const { t } = useTranslation();
|
|
25582
|
-
const [expanded, setExpanded] =
|
|
26114
|
+
const [expanded, setExpanded] = React19.useState(false);
|
|
25583
26115
|
const currentPreset = ts?.textWarpPreset || "textNoShape";
|
|
25584
26116
|
return /* @__PURE__ */ jsxs("div", { className: "mt-2 rounded border border-border bg-card p-2 space-y-2", children: [
|
|
25585
26117
|
/* @__PURE__ */ jsxs(
|
|
@@ -26197,7 +26729,7 @@ function SmartArtStyleControls({
|
|
|
26197
26729
|
onChangeStyle
|
|
26198
26730
|
}) {
|
|
26199
26731
|
const { t } = useTranslation();
|
|
26200
|
-
const translate =
|
|
26732
|
+
const translate = React19.useCallback((key) => t(key), [t]);
|
|
26201
26733
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
26202
26734
|
/* @__PURE__ */ jsxs("label", { className: "flex flex-col gap-1 text-[11px]", children: [
|
|
26203
26735
|
/* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: t("pptx.smartart.colorScheme") }),
|
|
@@ -26252,9 +26784,9 @@ function SmartArtPropertiesPanel({
|
|
|
26252
26784
|
const nodes = smartArtData.nodes ?? [];
|
|
26253
26785
|
const layout = smartArtData.resolvedLayoutType;
|
|
26254
26786
|
const topLevelCount = nodes.filter((n) => !n.parentId).length;
|
|
26255
|
-
const inputRefs =
|
|
26256
|
-
const pendingFocusId =
|
|
26257
|
-
|
|
26787
|
+
const inputRefs = React19.useRef(/* @__PURE__ */ new Map());
|
|
26788
|
+
const pendingFocusId = React19.useRef(null);
|
|
26789
|
+
React19.useEffect(() => {
|
|
26258
26790
|
const id = pendingFocusId.current;
|
|
26259
26791
|
if (id) {
|
|
26260
26792
|
inputRefs.current.get(id)?.focus();
|
|
@@ -27349,7 +27881,14 @@ function ElementInspectorBody({
|
|
|
27349
27881
|
}
|
|
27350
27882
|
),
|
|
27351
27883
|
/* @__PURE__ */ jsx(GroupInfoPanel, { selectedElement }),
|
|
27352
|
-
/* @__PURE__ */ jsx(
|
|
27884
|
+
/* @__PURE__ */ jsx(
|
|
27885
|
+
OlePropertiesPanel,
|
|
27886
|
+
{
|
|
27887
|
+
selectedElement,
|
|
27888
|
+
canEdit,
|
|
27889
|
+
onUpdateElement
|
|
27890
|
+
}
|
|
27891
|
+
),
|
|
27353
27892
|
/* @__PURE__ */ jsx(
|
|
27354
27893
|
ShapeTextPanels,
|
|
27355
27894
|
{
|
|
@@ -27397,7 +27936,7 @@ function CommentBody({ text, mentions, className }) {
|
|
|
27397
27936
|
index
|
|
27398
27937
|
) : (
|
|
27399
27938
|
// eslint-disable-next-line react/no-array-index-key -- segments are positional
|
|
27400
|
-
/* @__PURE__ */ jsx(
|
|
27939
|
+
/* @__PURE__ */ jsx(React19.Fragment, { children: segment.text }, index)
|
|
27401
27940
|
)
|
|
27402
27941
|
) });
|
|
27403
27942
|
}
|
|
@@ -28522,6 +29061,7 @@ function SlideTransitionSection({
|
|
|
28522
29061
|
const hasDirections = validDirections !== void 0 && validDirections.length > 0;
|
|
28523
29062
|
const usesOrientation = TRANSITION_ORIENTATION_TYPES.has(transitionType);
|
|
28524
29063
|
const isWheel = transitionType === "wheel";
|
|
29064
|
+
const isMorph = transitionType === "morph";
|
|
28525
29065
|
return /* @__PURE__ */ jsxs(
|
|
28526
29066
|
"div",
|
|
28527
29067
|
{
|
|
@@ -28614,6 +29154,38 @@ function SlideTransitionSection({
|
|
|
28614
29154
|
}
|
|
28615
29155
|
)
|
|
28616
29156
|
] }),
|
|
29157
|
+
/* @__PURE__ */ jsxs("label", { className: "flex flex-col gap-1", children: [
|
|
29158
|
+
/* @__PURE__ */ jsx("span", { className: "text-muted-foreground text-xs", children: t("pptx.transition.speed") }),
|
|
29159
|
+
/* @__PURE__ */ jsx(
|
|
29160
|
+
"select",
|
|
29161
|
+
{
|
|
29162
|
+
value: activeSlide.transition?.speed ?? "fast",
|
|
29163
|
+
disabled: !canEdit,
|
|
29164
|
+
"aria-label": t("pptx.transition.speed"),
|
|
29165
|
+
onChange: (e) => onTransitionChange({
|
|
29166
|
+
speed: e.target.value
|
|
29167
|
+
}),
|
|
29168
|
+
className: "bg-muted border border-border rounded px-2 py-1",
|
|
29169
|
+
children: TRANSITION_SPEED_OPTIONS.map((option) => /* @__PURE__ */ jsx("option", { value: option.value, children: t(option.i18nKey) }, option.value))
|
|
29170
|
+
}
|
|
29171
|
+
)
|
|
29172
|
+
] }),
|
|
29173
|
+
isMorph && /* @__PURE__ */ jsxs("label", { className: "flex flex-col gap-1", children: [
|
|
29174
|
+
/* @__PURE__ */ jsx("span", { className: "text-muted-foreground text-xs", children: t("pptx.transition.morphOption") }),
|
|
29175
|
+
/* @__PURE__ */ jsx(
|
|
29176
|
+
"select",
|
|
29177
|
+
{
|
|
29178
|
+
value: activeSlide.transition?.morphOption ?? "byObject",
|
|
29179
|
+
disabled: !canEdit,
|
|
29180
|
+
"aria-label": t("pptx.transition.morphOption"),
|
|
29181
|
+
onChange: (e) => onTransitionChange({
|
|
29182
|
+
morphOption: e.target.value
|
|
29183
|
+
}),
|
|
29184
|
+
className: "bg-muted border border-border rounded px-2 py-1",
|
|
29185
|
+
children: TRANSITION_MORPH_OPTIONS.map((option) => /* @__PURE__ */ jsx("option", { value: option.value, children: t(option.i18nKey) }, option.value))
|
|
29186
|
+
}
|
|
29187
|
+
)
|
|
29188
|
+
] }),
|
|
28617
29189
|
/* @__PURE__ */ jsxs("label", { className: "inline-flex items-center gap-2 text-foreground text-xs", children: [
|
|
28618
29190
|
/* @__PURE__ */ jsx(
|
|
28619
29191
|
"input",
|
|
@@ -28743,7 +29315,7 @@ function PresentationPropertiesPanel({
|
|
|
28743
29315
|
onUpdateTagCollections
|
|
28744
29316
|
}) {
|
|
28745
29317
|
const { t } = useTranslation();
|
|
28746
|
-
const handleTransitionChange =
|
|
29318
|
+
const handleTransitionChange = React19.useCallback(
|
|
28747
29319
|
(updates) => {
|
|
28748
29320
|
onUpdateSlide({
|
|
28749
29321
|
transition: mergeSlideTransition(activeSlide?.transition, updates)
|
|
@@ -32761,7 +33333,7 @@ function ViewerToolbarSection(props) {
|
|
|
32761
33333
|
},
|
|
32762
33334
|
[activeSlide, propertyHandlers]
|
|
32763
33335
|
);
|
|
32764
|
-
const scopedLayoutOptions =
|
|
33336
|
+
const scopedLayoutOptions = React19.useMemo(
|
|
32765
33337
|
() => scopeLayoutOptionsToActiveSlide(s.layoutOptions, activeSlide),
|
|
32766
33338
|
[s.layoutOptions, activeSlide]
|
|
32767
33339
|
);
|
|
@@ -34596,7 +35168,7 @@ ${url}`)) {
|
|
|
34596
35168
|
var AiChatPanel = lazy(async () => {
|
|
34597
35169
|
const [{ useChat }, { default: Panel }] = await Promise.all([
|
|
34598
35170
|
import('@ai-sdk/react'),
|
|
34599
|
-
import('./AiChatPanel-
|
|
35171
|
+
import('./AiChatPanel-5LCCN7FG.mjs')
|
|
34600
35172
|
]);
|
|
34601
35173
|
function BoundAiChatPanel(props) {
|
|
34602
35174
|
return /* @__PURE__ */ jsx(Panel, { ...props, useChat });
|
|
@@ -37666,6 +38238,10 @@ var PowerPointViewer = forwardRef(
|
|
|
37666
38238
|
shareDefaults,
|
|
37667
38239
|
smartArt3D = false,
|
|
37668
38240
|
surfaceChart3D = false,
|
|
38241
|
+
barChart3D = false,
|
|
38242
|
+
lineChart3D = false,
|
|
38243
|
+
areaChart3D = false,
|
|
38244
|
+
pieChart3D = false,
|
|
37669
38245
|
hiddenActions,
|
|
37670
38246
|
ai
|
|
37671
38247
|
} = props;
|
|
@@ -37881,7 +38457,7 @@ var PowerPointViewer = forwardRef(
|
|
|
37881
38457
|
await Promise.all(snapshots.map((entry) => deleteAutosaveSnapshot(entry.key)));
|
|
37882
38458
|
})();
|
|
37883
38459
|
}, []);
|
|
37884
|
-
const mobile = useIsMobile(
|
|
38460
|
+
const mobile = useIsMobile();
|
|
37885
38461
|
const { isMobile, isTouchDevice, isVirtualKeyboardOpen } = mobile;
|
|
37886
38462
|
const resizablePanels = useResizablePanels();
|
|
37887
38463
|
const { gridSpacingPx, visibleSlideIndexes, slideSectionGroups, masterPseudoSlide } = useDerivedSlideState({
|
|
@@ -38474,38 +39050,72 @@ var PowerPointViewer = forwardRef(
|
|
|
38474
39050
|
]
|
|
38475
39051
|
}
|
|
38476
39052
|
);
|
|
38477
|
-
return /* @__PURE__ */ jsx(AccountAuthContext.Provider, { value: accountAuth, children: /* @__PURE__ */ jsx(SmartArt3DContext.Provider, { value: smartArt3D, children: /* @__PURE__ */ jsx(SurfaceChart3DContext.Provider, { value: surfaceChart3D, children: /* @__PURE__ */
|
|
38478
|
-
|
|
38479
|
-
|
|
38480
|
-
|
|
38481
|
-
|
|
38482
|
-
|
|
38483
|
-
|
|
38484
|
-
|
|
38485
|
-
|
|
38486
|
-
|
|
38487
|
-
|
|
38488
|
-
|
|
38489
|
-
|
|
38490
|
-
|
|
38491
|
-
|
|
38492
|
-
|
|
38493
|
-
|
|
38494
|
-
|
|
38495
|
-
|
|
38496
|
-
|
|
38497
|
-
|
|
38498
|
-
|
|
38499
|
-
|
|
38500
|
-
|
|
38501
|
-
|
|
38502
|
-
|
|
38503
|
-
|
|
38504
|
-
|
|
38505
|
-
|
|
38506
|
-
|
|
38507
|
-
|
|
38508
|
-
|
|
39053
|
+
return /* @__PURE__ */ jsx(AccountAuthContext.Provider, { value: accountAuth, children: /* @__PURE__ */ jsx(SmartArt3DContext.Provider, { value: smartArt3D, children: /* @__PURE__ */ jsx(SurfaceChart3DContext.Provider, { value: surfaceChart3D, children: /* @__PURE__ */ jsxs(BarChart3DContext.Provider, { value: barChart3D, children: [
|
|
39054
|
+
/* @__PURE__ */ jsx(LineChart3DContext.Provider, { value: lineChart3D, children: /* @__PURE__ */ jsx(AreaChart3DContext.Provider, { value: areaChart3D, children: /* @__PURE__ */ jsx(ViewerThemeProvider, { theme: effectiveTheme, children: /* @__PURE__ */ jsxs(
|
|
39055
|
+
CollaborationProvider,
|
|
39056
|
+
{
|
|
39057
|
+
config: collaboration,
|
|
39058
|
+
canvasWidth: canvasSize.width,
|
|
39059
|
+
canvasHeight: canvasSize.height,
|
|
39060
|
+
children: [
|
|
39061
|
+
/* @__PURE__ */ jsx(
|
|
39062
|
+
CollaborationDocumentSync,
|
|
39063
|
+
{
|
|
39064
|
+
slides,
|
|
39065
|
+
templateElementsBySlideId,
|
|
39066
|
+
setSlides: state.setSlides,
|
|
39067
|
+
config: collaboration,
|
|
39068
|
+
content,
|
|
39069
|
+
loadVersion,
|
|
39070
|
+
loadOrigin,
|
|
39071
|
+
livePatcher: state.livePatcher
|
|
39072
|
+
}
|
|
39073
|
+
),
|
|
39074
|
+
/* @__PURE__ */ jsx(
|
|
39075
|
+
CollaborationFollowLayer,
|
|
39076
|
+
{
|
|
39077
|
+
activeSlideIndex,
|
|
39078
|
+
setActiveSlideIndex: state.setActiveSlideIndex,
|
|
39079
|
+
slideCount: slides.length
|
|
39080
|
+
}
|
|
39081
|
+
),
|
|
39082
|
+
viewerContent
|
|
39083
|
+
]
|
|
39084
|
+
}
|
|
39085
|
+
) }) }) }),
|
|
39086
|
+
/* @__PURE__ */ jsx(PieChart3DContext.Provider, { value: pieChart3D, children: /* @__PURE__ */ jsx(ViewerThemeProvider, { theme: effectiveTheme, children: /* @__PURE__ */ jsxs(
|
|
39087
|
+
CollaborationProvider,
|
|
39088
|
+
{
|
|
39089
|
+
config: collaboration,
|
|
39090
|
+
canvasWidth: canvasSize.width,
|
|
39091
|
+
canvasHeight: canvasSize.height,
|
|
39092
|
+
children: [
|
|
39093
|
+
/* @__PURE__ */ jsx(
|
|
39094
|
+
CollaborationDocumentSync,
|
|
39095
|
+
{
|
|
39096
|
+
slides,
|
|
39097
|
+
templateElementsBySlideId,
|
|
39098
|
+
setSlides: state.setSlides,
|
|
39099
|
+
config: collaboration,
|
|
39100
|
+
content,
|
|
39101
|
+
loadVersion,
|
|
39102
|
+
loadOrigin,
|
|
39103
|
+
livePatcher: state.livePatcher
|
|
39104
|
+
}
|
|
39105
|
+
),
|
|
39106
|
+
/* @__PURE__ */ jsx(
|
|
39107
|
+
CollaborationFollowLayer,
|
|
39108
|
+
{
|
|
39109
|
+
activeSlideIndex,
|
|
39110
|
+
setActiveSlideIndex: state.setActiveSlideIndex,
|
|
39111
|
+
slideCount: slides.length
|
|
39112
|
+
}
|
|
39113
|
+
),
|
|
39114
|
+
viewerContent
|
|
39115
|
+
]
|
|
39116
|
+
}
|
|
39117
|
+
) }) })
|
|
39118
|
+
] }) }) }) });
|
|
38509
39119
|
}
|
|
38510
39120
|
);
|
|
38511
39121
|
PowerPointViewer.displayName = "PowerPointViewer";
|