pptx-react-viewer 4.16.1 → 4.17.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 +10 -0
- package/dist/{AiChatPanel-K3PL6O3M.mjs → AiChatPanel-2VX4EF2E.mjs} +4 -4
- package/dist/AiChatPanel-2VX4EF2E.mjs.br +0 -0
- package/dist/AiChatPanel-2VX4EF2E.mjs.gz +0 -0
- package/dist/{AiChatPanel-DFZSMXJB.js → AiChatPanel-BVWU7HDV.js} +28 -28
- package/dist/AiChatPanel-BVWU7HDV.js.br +0 -0
- package/dist/AiChatPanel-BVWU7HDV.js.gz +0 -0
- package/dist/{Model3DScene-ZYC5U7NY.js → Model3DScene-6FW74F37.js} +2 -2
- package/dist/Model3DScene-6FW74F37.js.br +0 -0
- package/dist/Model3DScene-6FW74F37.js.gz +0 -0
- package/dist/{Model3DScene-EOKTWVG7.mjs → Model3DScene-PR3MSU7A.mjs} +1 -1
- package/dist/Model3DScene-PR3MSU7A.mjs.br +2 -0
- package/dist/Model3DScene-PR3MSU7A.mjs.gz +0 -0
- package/dist/{chunk-XVJSAY7C.js → chunk-7KKE5JM3.js} +875 -826
- package/dist/chunk-7KKE5JM3.js.br +0 -0
- package/dist/chunk-7KKE5JM3.js.gz +0 -0
- package/dist/{chunk-4VV5HJXQ.js → chunk-A56VH5AT.js} +6363 -3381
- package/dist/chunk-A56VH5AT.js.br +0 -0
- package/dist/chunk-A56VH5AT.js.gz +0 -0
- package/dist/{chunk-VUI3VE7K.mjs → chunk-AC4V4C43.mjs} +59 -10
- package/dist/chunk-AC4V4C43.mjs.br +0 -0
- package/dist/chunk-AC4V4C43.mjs.gz +0 -0
- package/dist/{chunk-KK2CFTKC.mjs → chunk-CRHNHNQL.mjs} +2 -2
- package/dist/chunk-CRHNHNQL.mjs.br +0 -0
- package/dist/chunk-CRHNHNQL.mjs.gz +0 -0
- package/dist/{chunk-33XJSD62.mjs → chunk-GLLEZR4U.mjs} +8 -0
- package/dist/chunk-GLLEZR4U.mjs.br +0 -0
- package/dist/{chunk-33XJSD62.mjs.gz → chunk-GLLEZR4U.mjs.gz} +0 -0
- package/dist/{chunk-CWVPHCMJ.js → chunk-N5EJL7SU.js} +5 -5
- package/dist/chunk-N5EJL7SU.js.br +0 -0
- package/dist/chunk-N5EJL7SU.js.gz +0 -0
- package/dist/{chunk-VUNRFZRR.mjs → chunk-NMYQ4XT2.mjs} +6343 -3365
- package/dist/chunk-NMYQ4XT2.mjs.br +0 -0
- package/dist/chunk-NMYQ4XT2.mjs.gz +0 -0
- package/dist/{chunk-QZSA3E4L.mjs → chunk-PU6X5LPR.mjs} +1 -1
- package/dist/chunk-PU6X5LPR.mjs.br +0 -0
- package/dist/chunk-PU6X5LPR.mjs.gz +0 -0
- package/dist/{chunk-LJEI7O6S.js → chunk-QWQADOJZ.js} +8 -0
- package/dist/chunk-QWQADOJZ.js.br +0 -0
- package/dist/{chunk-LJEI7O6S.js.gz → chunk-QWQADOJZ.js.gz} +0 -0
- package/dist/{chunk-VVGYZBF5.js → chunk-UN4FCEZI.js} +2568 -3768
- package/dist/chunk-UN4FCEZI.js.br +0 -0
- package/dist/chunk-UN4FCEZI.js.gz +0 -0
- package/dist/{chunk-RE6NDQH7.js → chunk-XUT6KCC4.js} +197 -197
- package/dist/chunk-XUT6KCC4.js.br +0 -0
- package/dist/chunk-XUT6KCC4.js.gz +0 -0
- package/dist/{chunk-6PWT46Y4.mjs → chunk-Y5JCGX5P.mjs} +604 -1804
- package/dist/chunk-Y5JCGX5P.mjs.br +0 -0
- package/dist/chunk-Y5JCGX5P.mjs.gz +0 -0
- package/dist/i18n/de.cjs +9 -1
- package/dist/i18n/de.cjs.br +0 -0
- package/dist/i18n/de.cjs.gz +0 -0
- package/dist/i18n/de.mjs +9 -1
- package/dist/i18n/de.mjs.br +0 -0
- package/dist/i18n/de.mjs.gz +0 -0
- package/dist/i18n/es.cjs +9 -1
- package/dist/i18n/es.cjs.br +0 -0
- package/dist/i18n/es.cjs.gz +0 -0
- package/dist/i18n/es.mjs +9 -1
- package/dist/i18n/es.mjs.br +0 -0
- package/dist/i18n/es.mjs.gz +0 -0
- package/dist/i18n/fr.cjs +9 -1
- package/dist/i18n/fr.cjs.br +0 -0
- package/dist/i18n/fr.cjs.gz +0 -0
- package/dist/i18n/fr.mjs +9 -1
- package/dist/i18n/fr.mjs.br +0 -0
- package/dist/i18n/fr.mjs.gz +0 -0
- package/dist/i18n/zh-CN.cjs +9 -1
- package/dist/i18n/zh-CN.cjs.br +0 -0
- package/dist/i18n/zh-CN.cjs.gz +0 -0
- package/dist/i18n/zh-CN.mjs +9 -1
- package/dist/i18n/zh-CN.mjs.br +0 -0
- package/dist/i18n/zh-CN.mjs.gz +0 -0
- package/dist/i18n.js +4 -4
- package/dist/i18n.js.br +0 -0
- package/dist/i18n.js.gz +0 -0
- package/dist/i18n.mjs +1 -1
- package/dist/i18n.mjs.br +0 -0
- package/dist/i18n.mjs.gz +0 -0
- package/dist/index.d.ts +158 -12185
- package/dist/index.js +63 -63
- 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 +162 -12196
- package/dist/internals.js +105 -105
- package/dist/internals.js.br +0 -0
- package/dist/internals.js.gz +0 -0
- package/dist/internals.mjs +4 -4
- package/dist/internals.mjs.br +0 -0
- package/dist/internals.mjs.gz +0 -0
- package/dist/pptx-viewer.css +1 -1
- package/dist/pptx-viewer.css.br +0 -0
- package/dist/pptx-viewer.css.gz +0 -0
- package/dist/viewer/index.d.ts +156 -12183
- 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 +1 -1
- package/dist/AiChatPanel-DFZSMXJB.js.br +0 -0
- package/dist/AiChatPanel-DFZSMXJB.js.gz +0 -0
- package/dist/AiChatPanel-K3PL6O3M.mjs.br +0 -0
- package/dist/AiChatPanel-K3PL6O3M.mjs.gz +0 -0
- package/dist/Model3DScene-EOKTWVG7.mjs.br +0 -0
- package/dist/Model3DScene-EOKTWVG7.mjs.gz +0 -0
- package/dist/Model3DScene-ZYC5U7NY.js.br +0 -0
- package/dist/Model3DScene-ZYC5U7NY.js.gz +0 -0
- package/dist/chunk-33XJSD62.mjs.br +0 -0
- package/dist/chunk-4VV5HJXQ.js.br +0 -0
- package/dist/chunk-4VV5HJXQ.js.gz +0 -0
- package/dist/chunk-6PWT46Y4.mjs.br +0 -0
- package/dist/chunk-6PWT46Y4.mjs.gz +0 -0
- package/dist/chunk-CWVPHCMJ.js.br +0 -0
- package/dist/chunk-CWVPHCMJ.js.gz +0 -0
- package/dist/chunk-KK2CFTKC.mjs.br +0 -0
- package/dist/chunk-KK2CFTKC.mjs.gz +0 -0
- package/dist/chunk-LJEI7O6S.js.br +0 -0
- package/dist/chunk-QZSA3E4L.mjs.br +0 -0
- package/dist/chunk-QZSA3E4L.mjs.gz +0 -0
- package/dist/chunk-RE6NDQH7.js.br +0 -0
- package/dist/chunk-RE6NDQH7.js.gz +0 -0
- package/dist/chunk-VUI3VE7K.mjs.br +0 -0
- package/dist/chunk-VUI3VE7K.mjs.gz +0 -0
- package/dist/chunk-VUNRFZRR.mjs.br +0 -0
- package/dist/chunk-VUNRFZRR.mjs.gz +0 -0
- package/dist/chunk-VVGYZBF5.js.br +0 -0
- package/dist/chunk-VVGYZBF5.js.gz +0 -0
- package/dist/chunk-XVJSAY7C.js.br +0 -0
- package/dist/chunk-XVJSAY7C.js.gz +0 -0
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { computeFocusTargets, deckDataFieldChanged, aiChangeAnimationCss, changeGhostStyle, createChatHistoryStore, collectStoredChats, exportAiChatLogs, applyElementUpdate } from './chunk-
|
|
2
|
-
import { useViewerOptions, useReadOnlyRecommendationState, useCompatibilityToastsState, useReducedMotion, useViewerState, useIsMobile, useResizablePanels, useDerivedSlideState, useZoomViewport, useEditorHistory, usePresentationSetup, useTouchGestures, useViewerDialogs, useEditorOperations, useViewerIntegration, useViewPreferencesSync, useLayoutSwitching, Rendering3DFlagsContext, CollaborationProvider, useCollaboration, useCollaborationDocumentSync, useFollowMode, useBroadcastFollower, SlideBackgroundImageLayer, StaticElementRenderer, safePrompt, scopeLayoutOptionsToActiveSlide, ChartPartSelectionProvider, useToolbarVisibility, useKeyboardInsets, useModalDismissDrag, ViewerOptionsStoreContext, ViewerOptionsContext, useViewerOptionsContext, useVirtualizedSlides, useSwipeNavigation, PresentationTransitionOverlay, RemoteSelectionOverlay, CollaborationCursorOverlay, useSheetDismissDrag, detectTargetType, parseEmailUrl, parseSlideFromUrl, ACTION_VERB_MAP, ElementRenderer, InlineCollaborationContext, SmartArtRenderer, playAnimationSound, ResizeHandles, imgSrc, renderStrokeView, useChartPartSelection, resolveSmartArtDataPalette } from './chunk-
|
|
3
|
-
import { SHAPE_PRESETS, ANIMATION_PRESET_OPTIONS, cn, SLIDE_NAV_THUMBNAIL_WIDTH, DEFAULT_SECTION_GROUP_ID, SHORTCUT_REFERENCE_ITEMS as SHORTCUT_REFERENCE_ITEMS$1, TOOLBAR_SECTIONS, isConnectorOrLineElement, GRID_SIZE, MIN_ELEMENT_SIZE, CONNECTOR_ARROW_OPTIONS, ARROW_SIZE_OPTIONS, DEFAULT_FILL_COLOR, startMotionPathPreview, startPreviewAnimation, stopPreviewAnimation, DEFAULT_STROKE_COLOR, STROKE_DASH_OPTIONS } from './chunk-
|
|
4
|
-
import { EMPTY_RESOLVED_CUSTOMIZATION, FIXED_TAB_GALLERIES, ANIMATION_DIRECTION_LABEL_KEYS, SWITCHABLE_LAYOUT_TYPES, compileEquationTemplateMathMl, buildUserFontFaceStyles, readStoredViewerPrefs, resolveThemeCatalogEntry, THEME_CATALOG, writeStoredViewerPrefs, openPptxFile, readBackstageRecentFile, isFeatureEnabled, isDialogAvailable, resolveAutosaveActivation, buildThemeColorMap, viewerOptionsToPreferences, applyPreferenceToOptions, resolveHistoryDepth, applyAutoCorrect, resolveImageResolutionScale, resolveAutosaveIntervalMs, resolveAutosaveIntervalSeconds, isPanelVisible, shouldShowAutosaveRecoveryPrompt, resolveOptionRootClasses, RIBBON_SCOPE_ATTR, resolve3DRenderingFlags, resolveSlideSizeSelection, RULER_THICKNESS, RULER_FONT_SIZE, editorThumbnailHeight, buildPreviewElements, deriveSlideFieldContext, SLIDE_TRANSITION_OPTIONS, hiddenSlideCue, EDITOR_THUMBNAIL_WIDTH, HIDDEN_SLIDE_SLASH_GRADIENT, HIDDEN_SLIDE_LABEL_KEY, visibleTemplateElements, normalizeHexColor, themeToCssVars, createCustomizationController, resolveEffectiveHiddenActions, listAutosaveSnapshots, resolveExpiredAutosaveSnapshots, deleteAutosaveSnapshot, masterViewCrudActions, applyMasterViewCrudAction, masterViewCrudFailureKey, EDITOR_CHROME_CSS, ribbonCustomizationCss, applyMotionPathPreset, resetSlideLayoutPath, DEFAULT_INSERT_CHART_KIND, hasCopyableFormat, templateSchemeFromTheme, createBackstagePresentation, playFeedbackSound, shouldDiscardAutosaveOnSuccessfulSave, setMasterViewBackgroundColor, canUseClipboard, runProgramNoticeStackStyle, compatToastStackStyle, printPropertiesFrameSlides, printPropertiesSlidesPerPage, PASTE_SPECIAL_OPTIONS, getDensePanelTouchTargetPx, shouldStickyActionRow, customizeOptionsTabs, VIEWER_OPTIONS_TABS, isOptionsPageVisible, DEFAULT_QUICK_ACCESS_COMMAND_IDS, isHeaderFooterDateTextVisible, isHeaderFooterHeaderTextVisible, isHeaderFooterFooterTextVisible, buildJoinCollaborationConfig, buildCreateCollaborationConfig, generateBroadcastRoomId, DEFAULT_BROADCAST_SERVER_URL, buildBroadcastViewerUrl, resolveTransportForServerUrl, getSlideBackgroundStyle, pushRecentColor, mruColorsPatch, shouldClearAutosaveCacheOnClose, canCropElement, cropSessionChanged, cancelCropUpdate, startCropSession, filterCommands, resolveTitleBarStatusKey, TITLE_BAR_CLASSES, TITLE_BAR_DEFAULT_FILE_KEY, editorThumbnailWidth, masterViewBackgroundColor, buildFieldSubstitutionContext, shouldConfirmExternalHyperlink, safeOpenUrl, resolvePresentationAction, isPpactionUrl, parsePpactionUrl, isPresentationAdvanceClick, toggleBlackboard, PRESENT_TOOLBAR_CLASSES, resolveEditPointsAvailability, isCurrentLayout, themeColorSchemesEqual, observeElementHeight, EXPANDED_MAX_HEIGHT, STATUS_BAR_CLASSES, buildBarActions, formatVersionTimestamp, formatRelativeTime, scanAvailableFontFamilies, PRESETS, CATEGORIES, convertOmmlToLatex, compileLatexEquation, convertLatexToOmml, EQUATION_TEMPLATES, clampPercent2, resolveDefaultPrintSettings, HANDOUT_OPTIONS, TOOLBAR_TABS, SHORTCUT_REFERENCE_ITEMS, resolveViewerAddinRows, availableQuickAccessCommands, addQuickAccessCommand, removeQuickAccessCommand, moveQuickAccessCommand, CUSTOM_FONT_ACCEPT, activateModalFocus, buildCollaborationShareUrl, buildActiveSessionUsers, SORTER_MIN_ZOOM, SORTER_ZOOM_STEP, SORTER_MAX_ZOOM, canGoPrevious, formatSlideCounter, READING_VIEW_COUNTER_ATTR, canGoNext, READING_VIEW_ATTR, OUTLINE_LEVEL_ATTR, OUTLINE_SLIDE_ATTR, OUTLINE_ROW_ATTR, OUTLINE_VIEW_ATTR, mobileElapsedSince, nextPresentedSlide, presenterPrevDisabled, presenterNextDisabled, formatMobileElapsed, mobileSlideCounter, presenterPaneAdvancesOnClick, presenterTimerProgress, PRESENTER_CONSOLE_CLASSES, formatElapsed, cropModeKeyAction, extraQuickAccessCommands, visibleContextualTabs, resolveActiveRibbonTab, resolveScreenTip, contextualTabLabelKey, RIBBON_CONTEXTUAL_TAB_ATTR, TAB_ROW_ACTION_CLASSES, customizeBackstageNav, BACKSTAGE_NAV, listBackstageRecentFiles, BACKSTAGE_BACK_CLASSES, BACKSTAGE_NAV_CLASSES, hasTextProperties, textFontSizePtToPx, INSERT_CHART_TYPES, ACTION_BUTTON_PRESETS, hasShapeProperties, shapeFillChange, shapeOutlineChange, DESIGN_RIBBON_GROUPS, DESIGN_RIBBON_COMMANDS, designCommandState, CONTEXTUAL_TAB_GROUPS, editorThumbnailStep, resolveSlidePaneClick, SLIDE_VIRTUALIZATION_THRESHOLD, buildSlidePaneContextMenuEntries, isEditPointsEnabled, PRESENTATION_HIT_TEST_CSS, PRESENTATION_STAGE_ATTRIBUTE, buildStrokePathD, cursorForTool, annotationOverlayZIndex, presentationInkPath, resolveNotesSchematicBodyFontSizePx, PRESENTER_NAVIGATOR_LABEL_KEYS, subtitleRecognitionLanguage, subtitleSettingsFromOptions, getSpeechRecognitionCtor, mergeCaptionResults, PEN_COLORS, HIGHLIGHTER_COLORS, isBlackboardActive, customizeContextMenuEntries, buildContextMenuEntries, customizeCanvasContextMenuEntries, buildCanvasContextMenuEntries, buildLayoutPreviewGeometry, scaleSlidesForSizeChange, slideSizeToCanvasPx, resolveSelectionPaneRename, themeEditorLabels, resolveNotesSegments, segmentsToEditorHtml, DEBOUNCE_MS, createPlainNotesSegments, parseSegmentsFromRichEditor, segmentsToPlainText, getCurrentParagraphIndex, segmentsToParagraphs, paragraphsToSegments, MAX_INDENT_LEVEL, INDENT_PX, isUrlSafe, buildNotesPrintHtml, MIN_TOUCH_TARGET_PX, toggleSheet, SMARTART_PREVIEW_ELEMENT_HEIGHT, SMARTART_PREVIEW_ELEMENT_WIDTH, buildSmartArtPreviewElement, sanitizeMathMl, computeHandoutLayout, getPrintableArea, generateNoteLineCount, computeAllNotesPages, getNotesPrintableArea, downloadBlob, clampOptionNumber, QUICK_ACCESS_COMMAND_CATALOG, registerCustomFont, openReadingView, applyReadingViewCommand, createPresentationKeyBuffer, readingViewFitScale, READING_VIEW_STAGE_ATTR, buildOutline, applyOutlineEdit, mapOutlineKey, notesSegmentsToSpans, erasePresentationInkAt, movePresenterPointer, appendPresentationInkPoint, PRESENTER_CONSOLE_CONTROLS, NOTES_FONT_SIZE_DEFAULT, formatTime, NOTES_FONT_SIZE_MIN, clampNotesFontSize, NOTES_FONT_SIZE_STEP, NOTES_FONT_SIZE_MAX, BACKSTAGE_TEMPLATES, formatBackstageDate, formatBackstageSize, customizeBackstageCards, backstageCardsFor, DEFAULT_VIEWER_PROFILE, resolveProfileInitial, AVATAR_COLOR_SWATCHES, resolveDefaultFontFamily, textFontSizePxToPt, buildFontCatalog, COMMON_FONT_SIZES, RIBBON_CONTROL_ATTR, FREEFORM_TOOL_IDS, isDrawingToolVisible, FREEFORM_TOOL_LABEL_KEYS, getSelectionTextStyleFlags, getInlineEditorSelectionResult, selectedParagraphBulletKind, elementBulletKind, selectionBulletKind, TEXT_DECORATION_FLAGS, nextToggleValue, CHARACTER_SPACING_OPTIONS, OFFICE_COLOR_SWATCHES, RIBBON_GROUP_ATTR, RIBBON_SHAPE_SWATCHES, buildRibbonGallery, canGroupSelection, canUngroupSelection, canSetStrokeWidth, strokeWidthOf, readRibbonTransitionDraft, ribbonTransitionUpdates, playSlideTransitionPreview, RIBBON_TRANSITION_PRESETS, transitionSoundOptions, transitionSoundSelectedValue, DEFAULT_MOTION_PATH_PRESET_ID, SLIDE_SHOW_COMMAND_GROUPS, RECORD_COMMAND_GROUPS, buildReviewRibbon, HELP_RIBBON_COMMANDS, galleryTextLabel, masterViewPseudoSlide, PRESENTATION_ANIM_TRIGGER_ATTRIBUTE, motionPathFor, setMotionPath, getShapeAdjustmentHandleDescriptors, shouldShowElementHandles, clampFlyoutPosition, computeAnchoredPopupPosition, applyTableStyleDelete, applyTableStyleMapChange, handleReadingViewKey, getLocalStorageUsageSummary, saveViewerProfile, clearAllLocalViewerData, SLIDE_TEMPLATES, buildThemeColorSwatchGrid, themeColorSwatchRows, findSelectedThemeSwatch, themeSwatchCommit, applyRibbonGalleryItem, MERGE_SHAPES_LABEL_KEY, MERGE_SHAPES_HINT_KEY, MERGE_SHAPES_MENU_ITEMS, CROP_LABEL_KEY, CROP_ASPECT_LABEL_KEY, CROP_ASPECT_GROUP_LABEL_KEYS, CROP_ASPECT_PRESETS, CROP_FILL_LABEL_KEY, CROP_FIT_LABEL_KEY, readSoundFileAsDataUrl, applyTransitionSoundFile, TRANSITION_SOUND_OTHER_VALUE, TRANSITION_SOUND_NONE_VALUE, clearTransitionSound, applyTransitionStockSound, transitionStockSoundId, getEffectSoundAsset, playAnimationRibbonPreview, ENTRANCE_PRESET_VALUES, EMPHASIS_PRESET_VALUES, EXIT_PRESET_VALUES, MOTION_PATH_FAMILIES, motionPathFamilyLabelKey, motionPathPresetsByFamily, motionPathPresetLabelKey, SLIDE_SHOW_OPTIONS, createViewerOptionsStore, subtitleSettingsLabels, attachEditorImagePaste, authorConnectorBetweenSites, findEraserHitElementId, generateTicks, rulerDragToGuidePosition, resolveElementInteractivity, getElementTransformWithoutRotation, getElementTransform, buildChartQuickActionsDescriptor, applyChartElementToggle, CHART_QUICK_ACTION_BUTTON_SIZE, applyChartStylePreset, hideChartSeries, restoreFilteredSeries, buildCropOverlay, CROP_HANDLE_ARIA_KEY, getActiveXControlOverlayView, buildCommentMarkers, COMMENT_MARKER_SIZE, collectConnectorSiteCandidates, getConnectorEndpointHandles, findConnectorSiteNear, motionPathToSvgD, motionPathEndPixel, isEditableMotionPath, setMotionPathEnd, canEditElementPoints, hasMultipleSelectedTableCells, isElementLocked, isImageLikeElement, mergeSlideTransition, getElementLabel, effectiveDirection, TRIGGER_OPTIONS, effectiveTimingCurve, mapSlideSorterKey, isEditorTextInputTarget, clampSorterZoom, buildSlideTemplateContent, updateSubtitleSettings, buildFreeformShapeElement, buildLiveInkStrokeView, beginCropDrag, CONNECTOR_SITE_SNAP_PX, resolveConnectorEndpointUpdate, withConnectorEndpointUpdate, getShapeConnectionSites, FreeformToolSession, attachOverlayKeyboard, EditPointsSession, EDIT_POINTS_STYLE, elementLockTogglePatch, buildTableDataGrid, getDenseGridLayoutPlan, appendTableElementRow, removeLastTableElementRow, appendTableElementColumn, removeLastTableElementColumn, removeTableElementColumn, removeTableElementRow, setTableElementCellText, TABLE_STYLE_PRESETS, applyTableStylePreset, tableStyleAssignmentUpdate, evenColumnWidths, redistributeColumnWidth, evenRowHeights, patchChartData, collapseChartTitleRunsForEdit, chartGridlinesState, chartGridlinesPatch, seriesSecondaryAxisPatch, setChartCategoryLabel, setChartCellValue, addChartCategory, removeChartCategory, addChartSeries, removeChartSeries, setDataLabelsRangeCache, setChartAxisLogScale, setChartAxisTitleStyle, setChartAxisGridlineStyle, setChartSeriesMarker, setChartSeriesChartType, setChartDataPointFill, setChartDataPointExplosion, setChartDataPointMarker, setChartDataPointLabel, describeSmartArtBounds, canAddTopLevelNode, classifyExtraConnections, siblingIndex, siblingCount, canRemoveTopLevelNode, canInteractWithElement, buildOleObjectNamePatch, getOleObjectTypeLabel, sanitizeGradientStops, shouldShowAccessibilitySection, pptxActionToElementAction, withFrameSlides, withSlidesPerPage, THEME_COLOR_SCHEME_KEYS, applyThemeOverrideToSlide, COLOR_MAP_ALIAS_KEYS, DEFAULT_COLOR_MAP, schemaLabel, THEME_COLOR_SLOT_LABEL_KEYS, SLIDE_SIZE_PRESETS, TRANSITION_VALID_DIRECTIONS, TRANSITION_ORIENTATION_TYPES, TRANSITION_PATTERN_OPTIONS, TRANSITION_THRUBLK_TYPES, clampTransitionNumber, TRANSITION_SPEED_OPTIONS, TRANSITION_MORPH_OPTIONS, flattenTagCollections, resolveTemplateBackgroundRows, formatCommentTimestamp, commentMentionQuery, matchCommentMentionAuthors, buildAnimationTimelineRows, clearMotionPath, setTrigger, setTriggerBookmark, getEffectSoundState, setEffectSound, setEffectStockSound, setAfterAnimation, setAfterAnimationColor, directionValuesFor, buildAnimationTimelineBars, motionPathPresetIdForPath, EFFECT_SOUND_CATALOGUE, listMediaBookmarkOptions, selectedBookmarkOptionValue, hasTiltData, toElementAxes, dragCropHandle, panCropImage, clientToSlidePoint, EDIT_POINTS_TARGET_ATTR, normalizeTableStyleGuid, describeTableStyleEditor, TABLE_STYLE_EDITOR_PARTS, computeMergeCellRight, computeMergeCellDown, computeSplitCell, updateMergeAttrsInRawXml, resolveDisplayedChartType, CHART_TYPE_OPTIONS, chartDataLabelsTogglePatch, BAR3D_SHAPE_OPTIONS, bar3DShapePatch, RADAR_STYLE_OPTIONS, radarStylePatch, SURFACE_WIREFRAME_OPTIONS, surfaceWireframePatch, isSeriesUsingSecondaryAxis, listChartUserShapeRows, withChartUserShapeAdded, createDefaultChartUserShape, withChartUserShapeRowRemoved, withChartUserShapeRowTextUpdated, SMARTART_COLOR_SCHEME_LABEL_KEYS, SMARTART_STYLE_LABEL_KEYS, addSmartArtNodeAsChild, setSmartArtNodeStyle, removeSmartArtNode, addSiblingAfter, removeEmptyNode, demote, promote, updateSmartArtNodeText, reorder, clampCropValue, DUOTONE_PRESETS, ARTISTIC_EFFECTS, mediaTrimEndSeconds, trimmedMediaDurationMs, mediaTrimEndAbsoluteMs, mediaTrimEndMsFromAbsoluteMs, buildOleEditDialogDescriptor, buildOleContentUpdatePatch, applyOleSheetCellEdit, getOleSheetGrid, applyOleDocumentParagraphEdit, getOleDocumentParagraphs, applyOleNestedDeckElementTextEdit, getOleNestedDeckDetail, replaceOleFile, getNonVisualDescriptionFields, resolveActionType, ELEMENT_ACTION_TYPE_OPTIONS, elementActionToPptxAction, canCommitActionType, slideSizeFromPreset, withSlideSizeOrientation, TRANSITION_DIR_ARROWS, buildDirectionGrid, getSlideTransitionAnimations, SLIDE_TRANSITION_KEYFRAMES, updateTagInCollections, deleteTagFromCollections, addTagToCollections, commentTextSegments, COMMENT_MENTION_CLASS, COMMENT_MENTION_ATTRIBUTE, insertCommentMention, reorderAnimationTimelineRows, applyAnimationTimelineOrder, animationEffectLabel, overlayPointerInput, TABLE_STYLE_BORDER_SIDES, applyTableStyleFieldEdit, createTableStyleEntry, addTableStyleToMap, deleteTableStyleFromMap, LBL, SEL, FILL_MODE_OPTIONS, SECTION_HEADING, NUM, getChartUserShapeGroupTransform, withChartUserShapeGroupChildAdded, createDefaultChartUserShapeGroupChild, withChartUserShapeRowUpdated, getChartUserShapeRowChartBox, withChartUserShapeRowFlipUpdated, withChartUserShapeRowRotationUpdated, withChartUserShapeRowChartBoxUpdated, switchSmartArtLayout, rebuildDrawingShapesIfCleared, mediaTrimEndMsFromSeconds, validateMediaTrimRange, SHAPE_QUICK_STYLES, quickStyleSwatchCss, PATTERN_PRESET_OPTIONS, getPatternSvg, COMPOUND_LINE_OPTIONS, LINE_JOIN_OPTIONS, LINE_CAP_OPTIONS, TEXT_WARP_PRESETS, warpPreviewPath, text3dPtToEmu, text3dEmuToPt, MATERIAL_PRESETS, toSlideIndex, TABLE_STYLE_BORDER_SIDE_LABEL_KEYS, TABLE_STYLE_DASH_PRESETS, GRADIENT_TYPE_OPTIONS, PATTERN_OPTIONS, FILL_PATTERN_LABEL_KEYS, openNativeEyeDropper, toggleText3dExtrusion, BEVEL_PRESETS, cropFit, cropFill, cropToAspectRatio } from './chunk-VUNRFZRR.mjs';
|
|
5
|
-
import { LOCALE_CATALOG, ALIGNMENT_LABEL_KEYS } from './chunk-
|
|
6
|
-
import
|
|
1
|
+
import { computeFocusTargets, deckDataFieldChanged, aiChangeAnimationCss, changeGhostStyle, createChatHistoryStore, collectStoredChats, exportAiChatLogs, applyElementUpdate } from './chunk-PU6X5LPR.mjs';
|
|
2
|
+
import { useViewerOptions, useReadOnlyRecommendationState, useCompatibilityToastsState, useReducedMotion, useViewerState, useIsMobile, useResizablePanels, useDerivedSlideState, useZoomViewport, useEditorHistory, usePresentationSetup, useTouchGestures, useViewerDialogs, useEditorOperations, useViewerIntegration, useViewPreferencesSync, useLayoutSwitching, Rendering3DFlagsContext, CollaborationProvider, useCollaboration, useCollaborationDocumentSync, useFollowMode, useBroadcastFollower, SlideBackgroundImageLayer, StaticElementRenderer, safePrompt, scopeLayoutOptionsToActiveSlide, ChartPartSelectionProvider, useToolbarVisibility, useKeyboardInsets, useModalDismissDrag, ViewerOptionsStoreContext, ViewerOptionsContext, useViewerOptionsContext, useVirtualizedSlides, useSwipeNavigation, PresentationTransitionOverlay, RemoteSelectionOverlay, CollaborationCursorOverlay, useSheetDismissDrag, detectTargetType, parseEmailUrl, parseSlideFromUrl, ACTION_VERB_MAP, ElementRenderer, InlineCollaborationContext, SmartArtRenderer, playAnimationSound, ResizeHandles, imgSrc, renderStrokeView, useChartPartSelection, resolveSmartArtDataPalette } from './chunk-AC4V4C43.mjs';
|
|
3
|
+
import { SHAPE_PRESETS, ANIMATION_PRESET_OPTIONS, cn, SLIDE_NAV_THUMBNAIL_WIDTH, DEFAULT_SECTION_GROUP_ID, SHORTCUT_REFERENCE_ITEMS as SHORTCUT_REFERENCE_ITEMS$1, TOOLBAR_SECTIONS, isConnectorOrLineElement, GRID_SIZE, MIN_ELEMENT_SIZE, CONNECTOR_ARROW_OPTIONS, ARROW_SIZE_OPTIONS, DEFAULT_FILL_COLOR, startMotionPathPreview, startPreviewAnimation, stopPreviewAnimation, DEFAULT_STROKE_COLOR, STROKE_DASH_OPTIONS } from './chunk-CRHNHNQL.mjs';
|
|
4
|
+
import { EMPTY_RESOLVED_CUSTOMIZATION, FIXED_TAB_GALLERIES, editingHomeControls, ANIMATION_DIRECTION_LABEL_KEYS, SWITCHABLE_LAYOUT_TYPES, compileEquationTemplateMathMl, buildUserFontFaceStyles, readStoredViewerPrefs, resolveThemeCatalogEntry, THEME_CATALOG, writeStoredViewerPrefs, openPptxFile, readBackstageRecentFile, isFeatureEnabled, isDialogAvailable, resolveAutosaveActivation, buildThemeColorMap, viewerOptionsToPreferences, applyPreferenceToOptions, resolveHistoryDepth, applyAutoCorrect, resolveImageResolutionScale, resolveAutosaveIntervalMs, resolveAutosaveIntervalSeconds, isPanelVisible, shouldShowAutosaveRecoveryPrompt, resolveOptionRootClasses, RIBBON_SCOPE_ATTR, resolve3DRenderingFlags, resolveSlideSizeSelection, RULER_THICKNESS, RULER_FONT_SIZE, editorThumbnailHeight, buildPreviewElements, deriveSlideFieldContext, SLIDE_TRANSITION_OPTIONS, hiddenSlideCue, EDITOR_THUMBNAIL_WIDTH, HIDDEN_SLIDE_SLASH_GRADIENT, HIDDEN_SLIDE_LABEL_KEY, visibleTemplateElements, normalizeHexColor, themeToCssVars, createCustomizationController, resolveEffectiveHiddenActions, listAutosaveSnapshots, resolveExpiredAutosaveSnapshots, deleteAutosaveSnapshot, masterViewCrudActions, applyMasterViewCrudAction, masterViewCrudFailureKey, EDITOR_CHROME_CSS, ribbonCustomizationCss, applyMotionPathPreset, resetSlideLayoutPath, DEFAULT_INSERT_CHART_KIND, hasCopyableFormat, templateSchemeFromTheme, createBackstagePresentation, playFeedbackSound, shouldDiscardAutosaveOnSuccessfulSave, setMasterViewBackgroundColor, canUseClipboard, runProgramNoticeStackStyle, compatToastStackStyle, printPropertiesFrameSlides, printPropertiesSlidesPerPage, PASTE_SPECIAL_OPTIONS, getDensePanelTouchTargetPx, shouldStickyActionRow, customizeOptionsTabs, VIEWER_OPTIONS_TABS, isOptionsPageVisible, DEFAULT_QUICK_ACCESS_COMMAND_IDS, isHeaderFooterDateTextVisible, isHeaderFooterHeaderTextVisible, isHeaderFooterFooterTextVisible, buildJoinCollaborationConfig, buildCreateCollaborationConfig, generateBroadcastRoomId, DEFAULT_BROADCAST_SERVER_URL, buildBroadcastViewerUrl, resolveTransportForServerUrl, getSlideBackgroundStyle, pushRecentColor, mruColorsPatch, shouldClearAutosaveCacheOnClose, canCropElement, cropSessionChanged, cancelCropUpdate, startCropSession, filterCommands, resolveTitleBarStatusKey, TITLE_BAR_CLASSES, TITLE_BAR_DEFAULT_FILE_KEY, editorThumbnailWidth, masterViewBackgroundColor, buildFieldSubstitutionContext, shouldConfirmExternalHyperlink, safeOpenUrl, resolvePresentationAction, isPpactionUrl, parsePpactionUrl, isPresentationAdvanceClick, toggleBlackboard, PRESENT_TOOLBAR_CLASSES, resolveEditPointsAvailability, isCurrentLayout, themeColorSchemesEqual, observeElementHeight, EXPANDED_MAX_HEIGHT, STATUS_BAR_CLASSES, buildBarActions, formatVersionTimestamp, formatRelativeTime, scanAvailableFontFamilies, PRESETS, CATEGORIES, convertOmmlToLatex, compileLatexEquation, convertLatexToOmml, EQUATION_TEMPLATES, clampPercent2, resolveDefaultPrintSettings, HANDOUT_OPTIONS, TOOLBAR_TABS, SHORTCUT_REFERENCE_ITEMS, resolveViewerAddinRows, availableQuickAccessCommands, addQuickAccessCommand, removeQuickAccessCommand, moveQuickAccessCommand, CUSTOM_FONT_ACCEPT, activateModalFocus, buildCollaborationShareUrl, buildActiveSessionUsers, SORTER_MIN_ZOOM, SORTER_ZOOM_STEP, SORTER_MAX_ZOOM, canGoPrevious, formatSlideCounter, READING_VIEW_COUNTER_ATTR, canGoNext, READING_VIEW_ATTR, OUTLINE_LEVEL_ATTR, OUTLINE_SLIDE_ATTR, OUTLINE_ROW_ATTR, OUTLINE_VIEW_ATTR, mobileElapsedSince, nextPresentedSlide, presenterPrevDisabled, presenterNextDisabled, formatMobileElapsed, mobileSlideCounter, presenterPaneAdvancesOnClick, presenterTimerProgress, PRESENTER_CONSOLE_CLASSES, formatElapsed, cropModeKeyAction, extraQuickAccessCommands, visibleContextualTabs, resolveActiveRibbonTab, resolveScreenTip, contextualTabLabelKey, RIBBON_CONTEXTUAL_TAB_ATTR, TAB_ROW_ACTION_CLASSES, customizeBackstageNav, BACKSTAGE_NAV, listBackstageRecentFiles, BACKSTAGE_BACK_CLASSES, BACKSTAGE_NAV_CLASSES, hasTextProperties, textFontSizePtToPx, FREEFORM_TOOL_IDS, isDrawingToolVisible, hasShapeProperties, shapeFillChange, shapeOutlineChange, DESIGN_RIBBON_GROUPS, DESIGN_RIBBON_COMMANDS, designCommandState, CONTEXTUAL_TAB_GROUPS, editorThumbnailStep, resolveSlidePaneClick, SLIDE_VIRTUALIZATION_THRESHOLD, buildSlidePaneContextMenuEntries, isEditPointsEnabled, PRESENTATION_HIT_TEST_CSS, PRESENTATION_STAGE_ATTRIBUTE, buildStrokePathD, cursorForTool, annotationOverlayZIndex, presentationInkPath, resolveNotesSchematicBodyFontSizePx, PRESENTER_NAVIGATOR_LABEL_KEYS, subtitleRecognitionLanguage, subtitleSettingsFromOptions, getSpeechRecognitionCtor, mergeCaptionResults, PEN_COLORS, HIGHLIGHTER_COLORS, isBlackboardActive, customizeContextMenuEntries, buildContextMenuEntries, customizeCanvasContextMenuEntries, buildCanvasContextMenuEntries, buildLayoutPreviewGeometry, scaleSlidesForSizeChange, slideSizeToCanvasPx, resolveSelectionPaneRename, themeEditorLabels, resolveNotesSegments, segmentsToEditorHtml, DEBOUNCE_MS, createPlainNotesSegments, parseSegmentsFromRichEditor, segmentsToPlainText, getCurrentParagraphIndex, segmentsToParagraphs, paragraphsToSegments, MAX_INDENT_LEVEL, INDENT_PX, isUrlSafe, buildNotesPrintHtml, MIN_TOUCH_TARGET_PX, toggleSheet, SMARTART_PREVIEW_ELEMENT_HEIGHT, SMARTART_PREVIEW_ELEMENT_WIDTH, buildSmartArtPreviewElement, sanitizeMathMl, computeHandoutLayout, getPrintableArea, generateNoteLineCount, computeAllNotesPages, getNotesPrintableArea, downloadBlob, clampOptionNumber, QUICK_ACCESS_COMMAND_CATALOG, registerCustomFont, openReadingView, applyReadingViewCommand, createPresentationKeyBuffer, readingViewFitScale, READING_VIEW_STAGE_ATTR, buildOutline, applyOutlineEdit, mapOutlineKey, notesSegmentsToSpans, erasePresentationInkAt, movePresenterPointer, appendPresentationInkPoint, PRESENTER_CONSOLE_CONTROLS, NOTES_FONT_SIZE_DEFAULT, formatTime, NOTES_FONT_SIZE_MIN, clampNotesFontSize, NOTES_FONT_SIZE_STEP, NOTES_FONT_SIZE_MAX, BACKSTAGE_TEMPLATES, formatBackstageDate, formatBackstageSize, customizeBackstageCards, backstageCardsFor, DEFAULT_VIEWER_PROFILE, resolveProfileInitial, AVATAR_COLOR_SWATCHES, resolveDefaultFontFamily, textFontSizePxToPt, clipboardHomeControls, buildFontCatalog, COMMON_FONT_SIZES, getInlineEditorSelectionResult, selectedParagraphBulletKind, elementBulletKind, selectionBulletKind, fontHomeControls, nextToggleValue, CHARACTER_SPACING_OPTIONS, OFFICE_COLOR_SWATCHES, RIBBON_GROUP_ATTR, paragraphHomeAlign, paragraphHomeControls, paragraphHomeAction, RIBBON_CONTROL_ATTR, RIBBON_SHAPE_SWATCHES, buildRibbonGallery, canGroupSelection, canUngroupSelection, canSetStrokeWidth, strokeWidthOf, readRibbonTransitionDraft, SLIDE_SHOW_COMMAND_GROUPS, RECORD_COMMAND_GROUPS, buildReviewRibbon, HELP_RIBBON_COMMANDS, galleryTextLabel, masterViewPseudoSlide, PRESENTATION_ANIM_TRIGGER_ATTRIBUTE, parentSelection, slideSpaceElement, isGroupMember, motionPathFor, setMotionPath, getShapeAdjustmentHandleDescriptors, shouldShowElementHandles, clampFlyoutPosition, computeAnchoredPopupPosition, applyTableStyleDelete, applyTableStyleMapChange, handleReadingViewKey, getLocalStorageUsageSummary, saveViewerProfile, clearAllLocalViewerData, SLIDE_TEMPLATES, getSelectionTextStyleFlags, TEXT_DECORATION_FLAGS, buildThemeColorSwatchGrid, themeColorSwatchRows, findSelectedThemeSwatch, themeSwatchCommit, applyRibbonGalleryItem, MERGE_SHAPES_LABEL_KEY, MERGE_SHAPES_HINT_KEY, MERGE_SHAPES_MENU_ITEMS, CROP_LABEL_KEY, CROP_ASPECT_LABEL_KEY, CROP_ASPECT_GROUP_LABEL_KEYS, CROP_ASPECT_PRESETS, CROP_FILL_LABEL_KEY, CROP_FIT_LABEL_KEY, ribbonTransitionsDraftPatch, ribbonTransitionUpdates, ribbonTransitionsSoundChange, ribbonTransitionStockSoundUrl, playSlideTransitionPreview, playAnimationRibbonPreview, SLIDE_SHOW_OPTIONS, createViewerOptionsStore, subtitleSettingsLabels, attachEditorImagePaste, authorConnectorBetweenSites, findEraserHitElementId, generateTicks, rulerDragToGuidePosition, resolveElementInteractivity, getElementTransformWithoutRotation, getElementTransform, buildChartQuickActionsDescriptor, applyChartElementToggle, CHART_QUICK_ACTION_BUTTON_SIZE, applyChartStylePreset, hideChartSeries, restoreFilteredSeries, buildCropOverlay, CROP_HANDLE_ARIA_KEY, getActiveXControlOverlayView, buildCommentMarkers, COMMENT_MARKER_SIZE, collectConnectorSiteCandidates, getConnectorEndpointHandles, findConnectorSiteNear, motionPathToSvgD, motionPathEndPixel, isEditableMotionPath, setMotionPathEnd, canEditElementPoints, hasMultipleSelectedTableCells, isElementLocked, isImageLikeElement, mergeSlideTransition, getElementLabel, effectiveDirection, TRIGGER_OPTIONS, effectiveTimingCurve, mapSlideSorterKey, isEditorTextInputTarget, clampSorterZoom, buildSlideTemplateContent, updateSubtitleSettings, buildFreeformShapeElement, buildLiveInkStrokeView, beginCropDrag, CONNECTOR_SITE_SNAP_PX, resolveConnectorEndpointUpdate, withConnectorEndpointUpdate, getShapeConnectionSites, FreeformToolSession, attachOverlayKeyboard, EditPointsSession, EDIT_POINTS_STYLE, elementLockTogglePatch, buildTableDataGrid, getDenseGridLayoutPlan, appendTableElementRow, removeLastTableElementRow, appendTableElementColumn, removeLastTableElementColumn, removeTableElementColumn, removeTableElementRow, setTableElementCellText, TABLE_STYLE_PRESETS, applyTableStylePreset, tableStyleAssignmentUpdate, evenColumnWidths, redistributeColumnWidth, evenRowHeights, patchChartData, collapseChartTitleRunsForEdit, chartGridlinesState, chartGridlinesPatch, seriesSecondaryAxisPatch, setChartCategoryLabel, setChartCellValue, addChartCategory, removeChartCategory, addChartSeries, removeChartSeries, setDataLabelsRangeCache, setChartAxisLogScale, setChartAxisTitleStyle, setChartAxisGridlineStyle, setChartSeriesMarker, setChartSeriesChartType, setChartDataPointFill, setChartDataPointExplosion, setChartDataPointMarker, setChartDataPointLabel, describeSmartArtBounds, canAddTopLevelNode, classifyExtraConnections, siblingIndex, siblingCount, canRemoveTopLevelNode, canInteractWithElement, buildOleObjectNamePatch, getOleObjectTypeLabel, sanitizeGradientStops, shouldShowAccessibilitySection, pptxActionToElementAction, withFrameSlides, withSlidesPerPage, THEME_COLOR_SCHEME_KEYS, applyThemeOverrideToSlide, COLOR_MAP_ALIAS_KEYS, DEFAULT_COLOR_MAP, schemaLabel, THEME_COLOR_SLOT_LABEL_KEYS, SLIDE_SIZE_PRESETS, TRANSITION_VALID_DIRECTIONS, TRANSITION_ORIENTATION_TYPES, TRANSITION_PATTERN_OPTIONS, TRANSITION_THRUBLK_TYPES, clampTransitionNumber, TRANSITION_SPEED_OPTIONS, TRANSITION_MORPH_OPTIONS, flattenTagCollections, resolveTemplateBackgroundRows, formatCommentTimestamp, commentMentionQuery, matchCommentMentionAuthors, buildAnimationTimelineRows, clearMotionPath, setTrigger, setTriggerBookmark, getEffectSoundState, setEffectSound, setEffectStockSound, setAfterAnimation, setAfterAnimationColor, directionValuesFor, buildAnimationTimelineBars, motionPathPresetIdForPath, MOTION_PATH_FAMILIES, motionPathPresetsByFamily, motionPathPresetLabelKey, motionPathFamilyLabelKey, EFFECT_SOUND_CATALOGUE, listMediaBookmarkOptions, selectedBookmarkOptionValue, hasTiltData, toElementAxes, dragCropHandle, panCropImage, clientToSlidePoint, EDIT_POINTS_TARGET_ATTR, normalizeTableStyleGuid, describeTableStyleEditor, TABLE_STYLE_EDITOR_PARTS, computeMergeCellRight, computeMergeCellDown, computeSplitCell, updateMergeAttrsInRawXml, resolveDisplayedChartType, CHART_TYPE_OPTIONS, chartDataLabelsTogglePatch, BAR3D_SHAPE_OPTIONS, bar3DShapePatch, RADAR_STYLE_OPTIONS, radarStylePatch, SURFACE_WIREFRAME_OPTIONS, surfaceWireframePatch, isSeriesUsingSecondaryAxis, listChartUserShapeRows, withChartUserShapeAdded, createDefaultChartUserShape, withChartUserShapeRowRemoved, withChartUserShapeRowTextUpdated, SMARTART_COLOR_SCHEME_LABEL_KEYS, SMARTART_STYLE_LABEL_KEYS, addSmartArtNodeAsChild, setSmartArtNodeStyle, removeSmartArtNode, addSiblingAfter, removeEmptyNode, demote, promote, updateSmartArtNodeText, reorder, clampCropValue, DUOTONE_PRESETS, ARTISTIC_EFFECTS, mediaTrimEndSeconds, trimmedMediaDurationMs, mediaTrimEndAbsoluteMs, mediaTrimEndMsFromAbsoluteMs, buildOleEditDialogDescriptor, buildOleContentUpdatePatch, applyOleSheetCellEdit, getOleSheetGrid, applyOleDocumentParagraphEdit, getOleDocumentParagraphs, applyOleNestedDeckElementTextEdit, getOleNestedDeckDetail, replaceOleFile, getNonVisualDescriptionFields, resolveActionType, ELEMENT_ACTION_TYPE_OPTIONS, elementActionToPptxAction, canCommitActionType, slideSizeFromPreset, withSlideSizeOrientation, TRANSITION_DIR_ARROWS, buildDirectionGrid, getSlideTransitionAnimations, SLIDE_TRANSITION_KEYFRAMES, updateTagInCollections, deleteTagFromCollections, addTagToCollections, commentTextSegments, COMMENT_MENTION_CLASS, COMMENT_MENTION_ATTRIBUTE, insertCommentMention, reorderAnimationTimelineRows, applyAnimationTimelineOrder, getEffectSoundAsset, animationEffectLabel, overlayPointerInput, TABLE_STYLE_BORDER_SIDES, applyTableStyleFieldEdit, createTableStyleEntry, addTableStyleToMap, deleteTableStyleFromMap, LBL, SEL, FILL_MODE_OPTIONS, SECTION_HEADING, NUM, getChartUserShapeGroupTransform, withChartUserShapeGroupChildAdded, createDefaultChartUserShapeGroupChild, withChartUserShapeRowUpdated, getChartUserShapeRowChartBox, withChartUserShapeRowFlipUpdated, withChartUserShapeRowRotationUpdated, withChartUserShapeRowChartBoxUpdated, switchSmartArtLayout, rebuildDrawingShapesIfCleared, mediaTrimEndMsFromSeconds, validateMediaTrimRange, SHAPE_QUICK_STYLES, quickStyleSwatchCss, PATTERN_PRESET_OPTIONS, getPatternSvg, COMPOUND_LINE_OPTIONS, LINE_JOIN_OPTIONS, LINE_CAP_OPTIONS, TEXT_WARP_PRESETS, warpPreviewPath, text3dPtToEmu, text3dEmuToPt, MATERIAL_PRESETS, toSlideIndex, TABLE_STYLE_BORDER_SIDE_LABEL_KEYS, TABLE_STYLE_DASH_PRESETS, GRADIENT_TYPE_OPTIONS, PATTERN_OPTIONS, FILL_PATTERN_LABEL_KEYS, openNativeEyeDropper, toggleText3dExtrusion, BEVEL_PRESETS, cropFit, cropFill, cropToAspectRatio } from './chunk-NMYQ4XT2.mjs';
|
|
5
|
+
import { LOCALE_CATALOG, ALIGNMENT_LABEL_KEYS } from './chunk-GLLEZR4U.mjs';
|
|
6
|
+
import React95, { createContext, lazy, forwardRef, useEffect, useState, useCallback, useMemo, useRef, useLayoutEffect, useSyncExternalStore, useId, useContext, useDeferredValue, Fragment as Fragment$1, Suspense, useReducer } from 'react';
|
|
7
7
|
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
8
8
|
import { useTranslation } from 'react-i18next';
|
|
9
|
-
import { LuArrowDown, LuArrowUp, LuArrowRight, LuArrowLeft, LuArrowDownRight, LuArrowDownLeft, LuArrowUpRight, LuArrowUpLeft, LuMessageSquare, LuEyeOff, LuHistory, LuTrash2, LuSettings, LuX, LuCalendarDays, LuClock, LuHash, LuFileText, LuText, LuCast, LuSave, LuUndo, LuRedo, LuSearch, LuShieldCheck, LuPlus, LuPanelLeftClose, LuStickyNote, LuMonitor, LuColumns2, LuPresentation, LuMinus, LuSettings2, LuLayers, LuDownload, LuCheck, LuLock, LuEye, LuType, LuLoader, LuShieldAlert, LuSignature, LuInfo, LuTriangleAlert, LuPrinter, LuPenTool, LuBug, LuChevronUp, LuChevronDown, LuUpload, LuWifi, LuWifiOff, LuUsers, LuCopy, LuChevronLeft, LuChevronRight, LuPlay, LuPause, LuZoomOut, LuZoomIn, LuSpellCheck, LuFileDown, LuMenu, LuSparkles, LuShare2, LuPanelLeft, LuPanelRight, LuFolderOpen,
|
|
9
|
+
import { LuArrowDown, LuArrowUp, LuArrowRight, LuArrowLeft, LuArrowDownRight, LuArrowDownLeft, LuArrowUpRight, LuArrowUpLeft, LuMessageSquare, LuEyeOff, LuHistory, LuTrash2, LuSettings, LuX, LuCalendarDays, LuClock, LuHash, LuFileText, LuText, LuCast, LuSave, LuUndo, LuRedo, LuSearch, LuShieldCheck, LuPlus, LuPanelLeftClose, LuStickyNote, LuMonitor, LuColumns2, LuPresentation, LuMinus, LuSettings2, LuLayers, LuDownload, LuCheck, LuLock, LuEye, LuType, LuLoader, LuShieldAlert, LuSignature, LuInfo, LuTriangleAlert, LuPrinter, LuPenTool, LuBug, LuChevronUp, LuChevronDown, LuUpload, LuWifi, LuWifiOff, LuUsers, LuCopy, LuChevronLeft, LuChevronRight, LuPlay, LuPause, LuZoomOut, LuZoomIn, LuSpellCheck, LuFileDown, LuMenu, LuSparkles, LuShare2, LuPanelLeft, LuPanelRight, LuFolderOpen, LuMousePointer2, LuShapes, LuPaintBucket, LuPenLine, LuPalette, LuPaintbrush, LuCaseSensitive, LuReplace, LuTimer, LuHighlighter, LuEraser, LuGripVertical, LuLoaderCircle, LuBold, LuItalic, LuUnderline, LuStrikethrough, LuList, LuListOrdered, LuIndentIncrease, LuIndentDecrease, LuLink, LuGrid2X2, LuClipboardPaste, LuCopyPlus, LuScan, LuRotateCcw, LuMonitorOff, LuCirclePlay, LuCirclePause, LuCaptions, LuArrowLeftRight, LuClipboardCopy, LuLayoutGrid, LuWand, LuTextCursorInput, LuFile, LuEllipsis, LuUserRound, LuFilePlus2, LuHouse, LuFileJson, LuBox, LuVideo, LuFileImage, LuDatabase, LuClock3, LuUser, LuHardDrive, LuLogIn, LuLayoutTemplate, LuFolderPlus, LuAlignLeft, LuAlignCenter, LuAlignRight, LuAlignHorizontalSpaceAround, LuAlignVerticalSpaceAround, LuGroup, LuUngroup, LuMove, LuRadio, LuImage, LuColumns3, LuCombine, LuCrop, LuFilter, LuLockOpen, LuPencil, LuReply, LuMoveRight, LuRotateCw, LuScissors, LuBookmark, LuPipette } from 'react-icons/lu';
|
|
10
10
|
|
|
11
11
|
var ViewerThemeContext = createContext(void 0);
|
|
12
12
|
function ViewerThemeProvider({ theme, children }) {
|
|
@@ -464,99 +464,57 @@ function SlideTemplateGalleryDialog({
|
|
|
464
464
|
)
|
|
465
465
|
] });
|
|
466
466
|
}
|
|
467
|
-
|
|
468
|
-
{
|
|
469
|
-
group: "entrance",
|
|
470
|
-
labelKey: "pptx.animation.entrance",
|
|
471
|
-
tone: "text-emerald-500",
|
|
472
|
-
presets: ENTRANCE_PRESET_VALUES
|
|
473
|
-
},
|
|
474
|
-
{
|
|
475
|
-
group: "emphasis",
|
|
476
|
-
labelKey: "pptx.animation.emphasis",
|
|
477
|
-
tone: "text-amber-500",
|
|
478
|
-
presets: EMPHASIS_PRESET_VALUES
|
|
479
|
-
},
|
|
480
|
-
{
|
|
481
|
-
group: "exit",
|
|
482
|
-
labelKey: "pptx.animation.exit",
|
|
483
|
-
tone: "text-red-500",
|
|
484
|
-
presets: EXIT_PRESET_VALUES
|
|
485
|
-
}
|
|
486
|
-
];
|
|
487
|
-
function AnimationPresetGallery({
|
|
488
|
-
disabled,
|
|
489
|
-
onAddAnimation
|
|
490
|
-
}) {
|
|
467
|
+
function AnimationsSection(p) {
|
|
491
468
|
const { t } = useTranslation();
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
/* @__PURE__ */ jsx("div", { className: "flex max-w-[150px] flex-wrap gap-0.5", children: category.presets.map((preset) => {
|
|
500
|
-
const label = t(`pptx.animation.preset.${preset}`);
|
|
501
|
-
return /* @__PURE__ */ jsxs(
|
|
502
|
-
"button",
|
|
503
|
-
{
|
|
504
|
-
type: "button",
|
|
505
|
-
disabled,
|
|
506
|
-
onClick: () => onAddAnimation?.(preset, category.group),
|
|
507
|
-
title: label,
|
|
508
|
-
className: "inline-flex items-center gap-0.5 rounded-sm px-1 py-0.5 text-[9px] leading-3 text-foreground transition-colors hover:bg-accent disabled:opacity-35",
|
|
509
|
-
children: [
|
|
510
|
-
/* @__PURE__ */ jsx(
|
|
511
|
-
LuStar,
|
|
512
|
-
{
|
|
513
|
-
className: `h-2.5 w-2.5 fill-current ${category.tone}`,
|
|
514
|
-
"aria-hidden": "true"
|
|
515
|
-
}
|
|
516
|
-
),
|
|
517
|
-
/* @__PURE__ */ jsx("span", { className: "whitespace-nowrap", children: label })
|
|
518
|
-
]
|
|
519
|
-
},
|
|
520
|
-
preset
|
|
521
|
-
);
|
|
522
|
-
}) })
|
|
523
|
-
] }, category.group))
|
|
524
|
-
}
|
|
469
|
+
const ref = useRef(null);
|
|
470
|
+
const [previewActive, setPreviewActive] = useState(false);
|
|
471
|
+
const timer = useRef(void 0);
|
|
472
|
+
const disabled = !p.canEdit || p.selectedElement === null;
|
|
473
|
+
const selectedAnimation = useMemo(
|
|
474
|
+
() => p.selectedElement ? (p.activeSlide?.animations ?? []).find((a) => a.elementId === p.selectedElement?.id) : void 0,
|
|
475
|
+
[p.activeSlide?.animations, p.selectedElement]
|
|
525
476
|
);
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
const { t } = useTranslation();
|
|
532
|
-
return /* @__PURE__ */ jsx(
|
|
533
|
-
"div",
|
|
534
|
-
{
|
|
535
|
-
className: "flex max-h-[62px] items-start gap-2 overflow-y-auto rounded-sm border border-border/60 bg-muted/30 px-1.5 py-1",
|
|
536
|
-
"aria-label": t("pptx.animations.motionPathGalleryAria"),
|
|
537
|
-
children: MOTION_PATH_FAMILIES.map((family) => /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-0.5", children: [
|
|
538
|
-
/* @__PURE__ */ jsx("span", { className: "text-[9px] font-semibold leading-3 text-muted-foreground", children: t(motionPathFamilyLabelKey(family)) }),
|
|
539
|
-
/* @__PURE__ */ jsx("div", { className: "flex max-w-[150px] flex-wrap gap-0.5", children: motionPathPresetsByFamily(family).map((preset) => {
|
|
540
|
-
const label = t(motionPathPresetLabelKey(preset.id));
|
|
541
|
-
return /* @__PURE__ */ jsxs(
|
|
542
|
-
"button",
|
|
543
|
-
{
|
|
544
|
-
type: "button",
|
|
545
|
-
disabled,
|
|
546
|
-
onClick: () => onApplyMotionPath?.(preset.id),
|
|
547
|
-
title: label,
|
|
548
|
-
className: "inline-flex items-center gap-0.5 rounded-sm px-1 py-0.5 text-[9px] leading-3 text-foreground transition-colors hover:bg-accent disabled:opacity-35",
|
|
549
|
-
children: [
|
|
550
|
-
/* @__PURE__ */ jsx(LuMoveRight, { className: "h-2.5 w-2.5 text-sky-500", "aria-hidden": "true" }),
|
|
551
|
-
/* @__PURE__ */ jsx("span", { className: "whitespace-nowrap", children: label })
|
|
552
|
-
]
|
|
553
|
-
},
|
|
554
|
-
preset.id
|
|
555
|
-
);
|
|
556
|
-
}) })
|
|
557
|
-
] }, family))
|
|
477
|
+
useEffect(() => () => clearTimeout(timer.current), []);
|
|
478
|
+
useEffect(() => {
|
|
479
|
+
const host = ref.current;
|
|
480
|
+
if (!host) {
|
|
481
|
+
return;
|
|
558
482
|
}
|
|
559
|
-
|
|
483
|
+
host.state = {
|
|
484
|
+
editable: p.canEdit,
|
|
485
|
+
hasSelection: p.selectedElement !== null,
|
|
486
|
+
paneOpen: p.isInspectorPaneOpen,
|
|
487
|
+
previewActive,
|
|
488
|
+
translate: t
|
|
489
|
+
};
|
|
490
|
+
}, [p.canEdit, p.selectedElement, p.isInspectorPaneOpen, previewActive, t]);
|
|
491
|
+
useEffect(() => {
|
|
492
|
+
const host = ref.current;
|
|
493
|
+
if (!host) {
|
|
494
|
+
return;
|
|
495
|
+
}
|
|
496
|
+
const request = (event) => {
|
|
497
|
+
const intent = event.detail;
|
|
498
|
+
if (intent.kind === "add") {
|
|
499
|
+
p.onAddAnimation?.(intent.preset, intent.group);
|
|
500
|
+
} else if (intent.value === "remove") {
|
|
501
|
+
p.onRemoveAnimation?.();
|
|
502
|
+
} else if (intent.value === "preview") {
|
|
503
|
+
if (disabled) {
|
|
504
|
+
return;
|
|
505
|
+
}
|
|
506
|
+
setPreviewActive(true);
|
|
507
|
+
clearTimeout(timer.current);
|
|
508
|
+
timer.current = setTimeout(() => setPreviewActive(false), 1200);
|
|
509
|
+
playAnimationRibbonPreview(document, selectedAnimation);
|
|
510
|
+
} else {
|
|
511
|
+
(p.onOpenAnimationPanel ?? p.onToggleInspector)();
|
|
512
|
+
}
|
|
513
|
+
};
|
|
514
|
+
host.addEventListener("animations-request", request);
|
|
515
|
+
return () => host.removeEventListener("animations-request", request);
|
|
516
|
+
}, [p, disabled, selectedAnimation]);
|
|
517
|
+
return /* @__PURE__ */ jsx("pptx-ui-ribbon-animations", { ref });
|
|
560
518
|
}
|
|
561
519
|
function controlAttr(id) {
|
|
562
520
|
return id ? { [RIBBON_CONTROL_ATTR]: id } : {};
|
|
@@ -570,291 +528,6 @@ function RibbonGroupScope({
|
|
|
570
528
|
}) {
|
|
571
529
|
return /* @__PURE__ */ jsx("div", { className: "contents", ...groupAttr(id), children });
|
|
572
530
|
}
|
|
573
|
-
function RibbonGroup({
|
|
574
|
-
label,
|
|
575
|
-
children,
|
|
576
|
-
className,
|
|
577
|
-
groupId
|
|
578
|
-
}) {
|
|
579
|
-
return /* @__PURE__ */ jsxs(
|
|
580
|
-
"section",
|
|
581
|
-
{
|
|
582
|
-
...groupAttr(groupId),
|
|
583
|
-
className: cn(
|
|
584
|
-
"relative flex min-h-[78px] self-stretch shrink-0 items-start gap-1 border-r border-border/60 px-2 pb-4 pt-1 last:border-r-0",
|
|
585
|
-
className
|
|
586
|
-
),
|
|
587
|
-
"aria-label": label,
|
|
588
|
-
children: [
|
|
589
|
-
children,
|
|
590
|
-
/* @__PURE__ */ jsx("span", { className: "pointer-events-none absolute inset-x-1 bottom-0.5 truncate text-center text-[9px] leading-3 text-muted-foreground", children: label })
|
|
591
|
-
]
|
|
592
|
-
}
|
|
593
|
-
);
|
|
594
|
-
}
|
|
595
|
-
function RibbonCommand({
|
|
596
|
-
label,
|
|
597
|
-
icon,
|
|
598
|
-
onClick,
|
|
599
|
-
disabled,
|
|
600
|
-
active,
|
|
601
|
-
compact = false,
|
|
602
|
-
title,
|
|
603
|
-
pressed,
|
|
604
|
-
controlId
|
|
605
|
-
}) {
|
|
606
|
-
return /* @__PURE__ */ jsxs(
|
|
607
|
-
"button",
|
|
608
|
-
{
|
|
609
|
-
type: "button",
|
|
610
|
-
...controlAttr(controlId),
|
|
611
|
-
onClick,
|
|
612
|
-
disabled,
|
|
613
|
-
title: title ?? label,
|
|
614
|
-
"aria-pressed": pressed,
|
|
615
|
-
className: cn(
|
|
616
|
-
"inline-flex rounded-sm text-foreground transition-colors hover:bg-accent disabled:cursor-not-allowed disabled:opacity-35",
|
|
617
|
-
active && "bg-primary/15 text-primary ring-1 ring-primary/35",
|
|
618
|
-
compact ? "h-[26px] min-w-[88px] items-center gap-1.5 px-1.5 text-left text-[10px] leading-3" : "h-[58px] min-w-[54px] max-w-[72px] flex-col items-center justify-start gap-0.5 px-1 py-1 text-center text-[9px] leading-[11px]"
|
|
619
|
-
),
|
|
620
|
-
children: [
|
|
621
|
-
/* @__PURE__ */ jsx(
|
|
622
|
-
"span",
|
|
623
|
-
{
|
|
624
|
-
className: cn(
|
|
625
|
-
"grid shrink-0 place-items-center text-primary",
|
|
626
|
-
compact ? "h-4 w-4 [&>svg]:h-4 [&>svg]:w-4" : "h-7 w-7 [&>svg]:h-6 [&>svg]:w-6"
|
|
627
|
-
),
|
|
628
|
-
"aria-hidden": "true",
|
|
629
|
-
children: icon
|
|
630
|
-
}
|
|
631
|
-
),
|
|
632
|
-
/* @__PURE__ */ jsx("span", { children: label })
|
|
633
|
-
]
|
|
634
|
-
}
|
|
635
|
-
);
|
|
636
|
-
}
|
|
637
|
-
function RibbonCommandStack({
|
|
638
|
-
children
|
|
639
|
-
}) {
|
|
640
|
-
return /* @__PURE__ */ jsx("div", { className: "flex flex-col justify-start gap-0.5", children });
|
|
641
|
-
}
|
|
642
|
-
function RibbonToggle({
|
|
643
|
-
label,
|
|
644
|
-
checked,
|
|
645
|
-
onChange,
|
|
646
|
-
disabled,
|
|
647
|
-
title,
|
|
648
|
-
controlId
|
|
649
|
-
}) {
|
|
650
|
-
return /* @__PURE__ */ jsxs(
|
|
651
|
-
"label",
|
|
652
|
-
{
|
|
653
|
-
...controlAttr(controlId),
|
|
654
|
-
title,
|
|
655
|
-
className: cn(
|
|
656
|
-
"flex h-[19px] items-center gap-1 whitespace-nowrap rounded-sm px-1 text-[10px] text-foreground",
|
|
657
|
-
checked && "bg-primary/15 text-primary"
|
|
658
|
-
),
|
|
659
|
-
children: [
|
|
660
|
-
/* @__PURE__ */ jsx(
|
|
661
|
-
"input",
|
|
662
|
-
{
|
|
663
|
-
type: "checkbox",
|
|
664
|
-
checked,
|
|
665
|
-
disabled,
|
|
666
|
-
onChange: (event) => onChange?.(event.target.checked),
|
|
667
|
-
className: "h-3 w-3 accent-primary disabled:opacity-35"
|
|
668
|
-
}
|
|
669
|
-
),
|
|
670
|
-
label
|
|
671
|
-
]
|
|
672
|
-
}
|
|
673
|
-
);
|
|
674
|
-
}
|
|
675
|
-
function AnimationsSection(p) {
|
|
676
|
-
const { t } = useTranslation();
|
|
677
|
-
const [previewActive, setPreviewActive] = useState(false);
|
|
678
|
-
const disabled = !p.canEdit || p.selectedElement === null;
|
|
679
|
-
const selectedAnimation = useMemo(
|
|
680
|
-
() => p.selectedElement ? (p.activeSlide?.animations ?? []).find((a) => a.elementId === p.selectedElement?.id) : void 0,
|
|
681
|
-
[p.activeSlide?.animations, p.selectedElement]
|
|
682
|
-
);
|
|
683
|
-
const preview = () => {
|
|
684
|
-
if (disabled) {
|
|
685
|
-
return;
|
|
686
|
-
}
|
|
687
|
-
setPreviewActive(true);
|
|
688
|
-
setTimeout(() => setPreviewActive(false), 1200);
|
|
689
|
-
playAnimationRibbonPreview(document, selectedAnimation);
|
|
690
|
-
};
|
|
691
|
-
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
692
|
-
/* @__PURE__ */ jsx(RibbonGroup, { label: t("pptx.animations.preview"), groupId: "animations.preview", children: /* @__PURE__ */ jsx(
|
|
693
|
-
RibbonCommand,
|
|
694
|
-
{
|
|
695
|
-
controlId: "animations.preview.preview",
|
|
696
|
-
label: t("pptx.animations.preview"),
|
|
697
|
-
icon: /* @__PURE__ */ jsx(LuPlay, {}),
|
|
698
|
-
onClick: preview,
|
|
699
|
-
disabled,
|
|
700
|
-
active: previewActive,
|
|
701
|
-
title: t("pptx.animations.previewTooltip")
|
|
702
|
-
}
|
|
703
|
-
) }),
|
|
704
|
-
/* @__PURE__ */ jsx(
|
|
705
|
-
RibbonGroup,
|
|
706
|
-
{
|
|
707
|
-
label: t("pptx.animations.animation", { defaultValue: "Animation" }),
|
|
708
|
-
className: "max-w-[500px] overflow-hidden",
|
|
709
|
-
groupId: "animations.animation",
|
|
710
|
-
children: /* @__PURE__ */ jsx("div", { className: "contents", ...controlAttr("animations.animation.gallery"), children: /* @__PURE__ */ jsx(AnimationPresetGallery, { disabled, onAddAnimation: p.onAddAnimation }) })
|
|
711
|
-
}
|
|
712
|
-
),
|
|
713
|
-
/* @__PURE__ */ jsx(
|
|
714
|
-
RibbonGroup,
|
|
715
|
-
{
|
|
716
|
-
label: t("pptx.animation.motionPath"),
|
|
717
|
-
className: "max-w-[420px] overflow-hidden",
|
|
718
|
-
groupId: "animations.motionPath",
|
|
719
|
-
children: /* @__PURE__ */ jsx("div", { className: "contents", ...controlAttr("animations.motionPath.gallery"), children: /* @__PURE__ */ jsx(
|
|
720
|
-
MotionPathGallery,
|
|
721
|
-
{
|
|
722
|
-
disabled,
|
|
723
|
-
onApplyMotionPath: (presetId) => p.onAddAnimation?.(presetId, "motionPath")
|
|
724
|
-
}
|
|
725
|
-
) })
|
|
726
|
-
}
|
|
727
|
-
),
|
|
728
|
-
/* @__PURE__ */ jsxs(
|
|
729
|
-
RibbonGroup,
|
|
730
|
-
{
|
|
731
|
-
label: t("pptx.animations.advanced", { defaultValue: "Advanced Animation" }),
|
|
732
|
-
groupId: "animations.advancedAnimation",
|
|
733
|
-
children: [
|
|
734
|
-
/* @__PURE__ */ jsx(
|
|
735
|
-
RibbonCommand,
|
|
736
|
-
{
|
|
737
|
-
label: t("pptx.animations.exitEffects", { defaultValue: "Exit Effects" }),
|
|
738
|
-
icon: /* @__PURE__ */ jsx(LuStar, { className: "text-red-500" }),
|
|
739
|
-
onClick: () => p.onAddAnimation?.("fadeOut", "exit"),
|
|
740
|
-
disabled
|
|
741
|
-
}
|
|
742
|
-
),
|
|
743
|
-
/* @__PURE__ */ jsx(
|
|
744
|
-
RibbonCommand,
|
|
745
|
-
{
|
|
746
|
-
label: t("pptx.animations.pathAnimation", { defaultValue: "Path Animation" }),
|
|
747
|
-
icon: /* @__PURE__ */ jsx(LuMoveRight, {}),
|
|
748
|
-
onClick: () => p.onAddAnimation?.(DEFAULT_MOTION_PATH_PRESET_ID, "motionPath"),
|
|
749
|
-
disabled
|
|
750
|
-
}
|
|
751
|
-
),
|
|
752
|
-
/* @__PURE__ */ jsxs(RibbonCommandStack, { children: [
|
|
753
|
-
/* @__PURE__ */ jsx(
|
|
754
|
-
RibbonCommand,
|
|
755
|
-
{
|
|
756
|
-
compact: true,
|
|
757
|
-
controlId: "animations.animation.effectOptions",
|
|
758
|
-
label: t("pptx.animations.effectOptions", { defaultValue: "Effect Options" }),
|
|
759
|
-
icon: /* @__PURE__ */ jsx(LuSparkles, {}),
|
|
760
|
-
onClick: p.onOpenAnimationPanel ?? p.onToggleInspector,
|
|
761
|
-
disabled
|
|
762
|
-
}
|
|
763
|
-
),
|
|
764
|
-
/* @__PURE__ */ jsx(
|
|
765
|
-
RibbonCommand,
|
|
766
|
-
{
|
|
767
|
-
compact: true,
|
|
768
|
-
controlId: "animations.advancedAnimation.animationPane",
|
|
769
|
-
label: t("pptx.animations.animationPanel"),
|
|
770
|
-
icon: /* @__PURE__ */ jsx(LuPanelRight, {}),
|
|
771
|
-
onClick: p.onOpenAnimationPanel ?? p.onToggleInspector,
|
|
772
|
-
active: p.isInspectorPaneOpen,
|
|
773
|
-
title: t("pptx.animations.openPanelTooltip")
|
|
774
|
-
}
|
|
775
|
-
)
|
|
776
|
-
] }),
|
|
777
|
-
/* @__PURE__ */ jsxs(RibbonCommandStack, { children: [
|
|
778
|
-
/* @__PURE__ */ jsx(
|
|
779
|
-
RibbonCommand,
|
|
780
|
-
{
|
|
781
|
-
compact: true,
|
|
782
|
-
controlId: "animations.advancedAnimation.trigger",
|
|
783
|
-
label: t("pptx.animations.trigger", { defaultValue: "Trigger" }),
|
|
784
|
-
icon: /* @__PURE__ */ jsx(LuMousePointerClick, {}),
|
|
785
|
-
onClick: p.onOpenAnimationPanel ?? p.onToggleInspector,
|
|
786
|
-
disabled
|
|
787
|
-
}
|
|
788
|
-
),
|
|
789
|
-
/* @__PURE__ */ jsx(
|
|
790
|
-
RibbonCommand,
|
|
791
|
-
{
|
|
792
|
-
compact: true,
|
|
793
|
-
controlId: "animations.advancedAnimation.animationPainter",
|
|
794
|
-
label: t("pptx.animations.painter", { defaultValue: "Animation Painter" }),
|
|
795
|
-
icon: /* @__PURE__ */ jsx(LuPaintbrush, {}),
|
|
796
|
-
disabled: true
|
|
797
|
-
}
|
|
798
|
-
)
|
|
799
|
-
] }),
|
|
800
|
-
/* @__PURE__ */ jsx(
|
|
801
|
-
RibbonCommand,
|
|
802
|
-
{
|
|
803
|
-
controlId: "animations.advancedAnimation.remove",
|
|
804
|
-
label: t("pptx.animations.remove"),
|
|
805
|
-
icon: /* @__PURE__ */ jsx(LuTrash2, {}),
|
|
806
|
-
onClick: p.onRemoveAnimation,
|
|
807
|
-
disabled,
|
|
808
|
-
title: t("pptx.animations.removeTooltip")
|
|
809
|
-
}
|
|
810
|
-
)
|
|
811
|
-
]
|
|
812
|
-
}
|
|
813
|
-
),
|
|
814
|
-
/* @__PURE__ */ jsx(
|
|
815
|
-
RibbonGroup,
|
|
816
|
-
{
|
|
817
|
-
label: t("pptx.animations.timing", { defaultValue: "Timing" }),
|
|
818
|
-
groupId: "animations.timing",
|
|
819
|
-
children: /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-[48px_82px] items-center gap-x-1 gap-y-1 text-[10px]", children: [
|
|
820
|
-
/* @__PURE__ */ jsx("label", { htmlFor: "pptx-animation-start", children: t("pptx.animations.start", { defaultValue: "Start" }) }),
|
|
821
|
-
/* @__PURE__ */ jsxs(
|
|
822
|
-
"select",
|
|
823
|
-
{
|
|
824
|
-
id: "pptx-animation-start",
|
|
825
|
-
...controlAttr("animations.timing.start"),
|
|
826
|
-
disabled: true,
|
|
827
|
-
className: "h-6 rounded-sm border border-border bg-muted px-1 text-[10px]",
|
|
828
|
-
children: [
|
|
829
|
-
/* @__PURE__ */ jsx("option", { children: t("pptx.animations.onClick", { defaultValue: "On Click" }) }),
|
|
830
|
-
/* @__PURE__ */ jsx("option", { children: t("pptx.animations.withPrevious", { defaultValue: "With Previous" }) }),
|
|
831
|
-
/* @__PURE__ */ jsx("option", { children: t("pptx.animations.afterPrevious", { defaultValue: "After Previous" }) })
|
|
832
|
-
]
|
|
833
|
-
}
|
|
834
|
-
),
|
|
835
|
-
/* @__PURE__ */ jsxs("span", { className: "flex items-center gap-1", children: [
|
|
836
|
-
/* @__PURE__ */ jsx(LuClock3, {}),
|
|
837
|
-
" ",
|
|
838
|
-
t("pptx.animations.duration", { defaultValue: "Duration" })
|
|
839
|
-
] }),
|
|
840
|
-
/* @__PURE__ */ jsx(
|
|
841
|
-
"input",
|
|
842
|
-
{
|
|
843
|
-
type: "number",
|
|
844
|
-
min: "0",
|
|
845
|
-
step: "0.1",
|
|
846
|
-
defaultValue: "0.5",
|
|
847
|
-
disabled: true,
|
|
848
|
-
"aria-label": t("pptx.animations.duration", { defaultValue: "Duration" }),
|
|
849
|
-
...controlAttr("animations.timing.duration"),
|
|
850
|
-
className: "h-6 rounded-sm border border-border bg-muted px-1 text-[10px]"
|
|
851
|
-
}
|
|
852
|
-
)
|
|
853
|
-
] })
|
|
854
|
-
}
|
|
855
|
-
)
|
|
856
|
-
] });
|
|
857
|
-
}
|
|
858
531
|
var ShapeFormatContext = createContext(null);
|
|
859
532
|
function useShapeFormatContext() {
|
|
860
533
|
return useContext(ShapeFormatContext);
|
|
@@ -915,38 +588,6 @@ var DISTRIBUTE_BTNS = [
|
|
|
915
588
|
{ k: "horizontal", el: /* @__PURE__ */ jsx(LuAlignHorizontalSpaceAround, { className: ic }) },
|
|
916
589
|
{ k: "vertical", el: /* @__PURE__ */ jsx(LuAlignVerticalSpaceAround, { className: ic }) }
|
|
917
590
|
];
|
|
918
|
-
var DRAW_TOOLS = [
|
|
919
|
-
{
|
|
920
|
-
id: "select",
|
|
921
|
-
icon: /* @__PURE__ */ jsx(LuMoveRight, { className: ic }),
|
|
922
|
-
labelKey: "pptx.ribbon.tool.select",
|
|
923
|
-
ac: "bg-primary text-white"
|
|
924
|
-
},
|
|
925
|
-
{
|
|
926
|
-
id: "pen",
|
|
927
|
-
icon: /* @__PURE__ */ jsx(LuPencil, { className: ic }),
|
|
928
|
-
labelKey: "pptx.ribbon.tool.pen",
|
|
929
|
-
ac: "bg-primary text-white"
|
|
930
|
-
},
|
|
931
|
-
{
|
|
932
|
-
id: "highlighter",
|
|
933
|
-
icon: /* @__PURE__ */ jsx(LuType, { className: ic }),
|
|
934
|
-
labelKey: "pptx.ribbon.tool.highlighter",
|
|
935
|
-
ac: "bg-yellow-600 text-white"
|
|
936
|
-
},
|
|
937
|
-
{
|
|
938
|
-
id: "eraser",
|
|
939
|
-
icon: /* @__PURE__ */ jsx(LuMinus, { className: ic }),
|
|
940
|
-
labelKey: "pptx.ribbon.tool.eraser",
|
|
941
|
-
ac: "bg-red-600 text-white"
|
|
942
|
-
},
|
|
943
|
-
{
|
|
944
|
-
id: "freeform",
|
|
945
|
-
icon: /* @__PURE__ */ jsx(LuSpline, { className: ic }),
|
|
946
|
-
labelKey: "pptx.ribbon.tool.freeform",
|
|
947
|
-
ac: "bg-primary text-white"
|
|
948
|
-
}
|
|
949
|
-
];
|
|
950
591
|
var OV = [
|
|
951
592
|
{
|
|
952
593
|
k: "png",
|
|
@@ -1038,22 +679,6 @@ var OV = [
|
|
|
1038
679
|
i: /* @__PURE__ */ jsx(LuShieldAlert, { className: `${ics} text-muted-foreground` })
|
|
1039
680
|
}
|
|
1040
681
|
];
|
|
1041
|
-
var FMT = [
|
|
1042
|
-
{ id: "bold", i: /* @__PURE__ */ jsx(LuBold, { className: ic }), labelKey: "pptx.textPanel.bold" },
|
|
1043
|
-
{ id: "italic", i: /* @__PURE__ */ jsx(LuItalic, { className: ic }), labelKey: "pptx.textPanel.italic" },
|
|
1044
|
-
{ id: "underline", i: /* @__PURE__ */ jsx(LuUnderline, { className: ic }), labelKey: "pptx.textPanel.underline" },
|
|
1045
|
-
{
|
|
1046
|
-
id: "strikethrough",
|
|
1047
|
-
i: /* @__PURE__ */ jsx(LuStrikethrough, { className: ic }),
|
|
1048
|
-
labelKey: "pptx.textPanel.strikethrough"
|
|
1049
|
-
}
|
|
1050
|
-
];
|
|
1051
|
-
var ATXT = [
|
|
1052
|
-
{ id: "left", i: /* @__PURE__ */ jsx(LuAlignLeft, { className: ic }), labelKey: "pptx.ribbon.alignLeft" },
|
|
1053
|
-
{ id: "center", i: /* @__PURE__ */ jsx(LuAlignCenter, { className: ic }), labelKey: "pptx.ribbon.alignCenter" },
|
|
1054
|
-
{ id: "right", i: /* @__PURE__ */ jsx(LuAlignRight, { className: ic }), labelKey: "pptx.ribbon.alignRight" },
|
|
1055
|
-
{ id: "justify", i: /* @__PURE__ */ jsx(LuAlignJustify, { className: ic }), labelKey: "pptx.ribbon.justify" }
|
|
1056
|
-
];
|
|
1057
682
|
function useRibbonDropdown() {
|
|
1058
683
|
const [open, setOpen] = useState(false);
|
|
1059
684
|
const ref = useRef(null);
|
|
@@ -1587,295 +1212,66 @@ function WebRibbonToggle({
|
|
|
1587
1212
|
}
|
|
1588
1213
|
);
|
|
1589
1214
|
}
|
|
1590
|
-
function useTransitionSoundPicker(activeSlide, onTransitionChange) {
|
|
1591
|
-
const soundFileInputRef = React7.useRef(null);
|
|
1592
|
-
const handleSoundFilePicked = React7.useCallback(
|
|
1593
|
-
(file) => {
|
|
1594
|
-
void readSoundFileAsDataUrl(file).then((dataUrl) => {
|
|
1595
|
-
if (dataUrl) {
|
|
1596
|
-
onTransitionChange(applyTransitionSoundFile({ name: file.name, dataUrl }));
|
|
1597
|
-
}
|
|
1598
|
-
return void 0;
|
|
1599
|
-
});
|
|
1600
|
-
},
|
|
1601
|
-
[onTransitionChange]
|
|
1602
|
-
);
|
|
1603
|
-
const handleSoundSelectChange = React7.useCallback(
|
|
1604
|
-
(event) => {
|
|
1605
|
-
const value = event.target.value;
|
|
1606
|
-
if (value === TRANSITION_SOUND_OTHER_VALUE) {
|
|
1607
|
-
soundFileInputRef.current?.click();
|
|
1608
|
-
event.target.value = transitionSoundSelectedValue(activeSlide?.transition);
|
|
1609
|
-
return;
|
|
1610
|
-
}
|
|
1611
|
-
if (value === TRANSITION_SOUND_NONE_VALUE) {
|
|
1612
|
-
onTransitionChange(clearTransitionSound());
|
|
1613
|
-
return;
|
|
1614
|
-
}
|
|
1615
|
-
const patch = applyTransitionStockSound(value);
|
|
1616
|
-
if (patch) {
|
|
1617
|
-
onTransitionChange(patch);
|
|
1618
|
-
}
|
|
1619
|
-
},
|
|
1620
|
-
[activeSlide, onTransitionChange]
|
|
1621
|
-
);
|
|
1622
|
-
const handleSoundFileChange = React7.useCallback(
|
|
1623
|
-
(event) => {
|
|
1624
|
-
const file = event.target.files?.[0];
|
|
1625
|
-
if (file) {
|
|
1626
|
-
handleSoundFilePicked(file);
|
|
1627
|
-
}
|
|
1628
|
-
event.target.value = "";
|
|
1629
|
-
},
|
|
1630
|
-
[handleSoundFilePicked]
|
|
1631
|
-
);
|
|
1632
|
-
const stockSoundId = transitionStockSoundId(activeSlide?.transition);
|
|
1633
|
-
const handleSoundPreview = React7.useCallback(() => {
|
|
1634
|
-
if (!stockSoundId) {
|
|
1635
|
-
return;
|
|
1636
|
-
}
|
|
1637
|
-
const asset = getEffectSoundAsset(stockSoundId);
|
|
1638
|
-
if (asset) {
|
|
1639
|
-
playAnimationSound(asset.dataUrl);
|
|
1640
|
-
}
|
|
1641
|
-
}, [stockSoundId]);
|
|
1642
|
-
return {
|
|
1643
|
-
soundFileInputRef,
|
|
1644
|
-
stockSoundId,
|
|
1645
|
-
handleSoundSelectChange,
|
|
1646
|
-
handleSoundFileChange,
|
|
1647
|
-
handleSoundPreview
|
|
1648
|
-
};
|
|
1649
|
-
}
|
|
1650
1215
|
function TransitionsSection(p) {
|
|
1651
1216
|
const { t } = useTranslation();
|
|
1652
|
-
const
|
|
1653
|
-
const draft =
|
|
1654
|
-
const
|
|
1655
|
-
const
|
|
1656
|
-
|
|
1657
|
-
|
|
1658
|
-
|
|
1659
|
-
|
|
1660
|
-
|
|
1661
|
-
|
|
1662
|
-
|
|
1663
|
-
|
|
1664
|
-
|
|
1665
|
-
|
|
1666
|
-
|
|
1667
|
-
|
|
1668
|
-
|
|
1669
|
-
|
|
1670
|
-
|
|
1671
|
-
|
|
1672
|
-
|
|
1673
|
-
|
|
1674
|
-
|
|
1675
|
-
|
|
1676
|
-
|
|
1677
|
-
...
|
|
1678
|
-
|
|
1679
|
-
/* @__PURE__ */ jsx(LuPlay, { className: ics }),
|
|
1680
|
-
t("pptx.ribbon.preview")
|
|
1681
|
-
]
|
|
1682
|
-
}
|
|
1683
|
-
) }),
|
|
1684
|
-
sep,
|
|
1685
|
-
/* @__PURE__ */ jsx(RibbonGroupScope, { id: "transitions.transitionToThisSlide", children: /* @__PURE__ */ jsx(
|
|
1686
|
-
"div",
|
|
1687
|
-
{
|
|
1688
|
-
className: "inline-flex items-center gap-0.5 overflow-x-auto max-w-[420px]",
|
|
1689
|
-
...controlAttr("transitions.transitionToThisSlide.gallery"),
|
|
1690
|
-
children: RIBBON_TRANSITION_PRESETS.map((preset) => /* @__PURE__ */ jsx(
|
|
1691
|
-
"button",
|
|
1692
|
-
{
|
|
1693
|
-
type: "button",
|
|
1694
|
-
disabled: !canEdit,
|
|
1695
|
-
onClick: () => commit({ type: preset.type }),
|
|
1696
|
-
className: cn(
|
|
1697
|
-
"flex-shrink-0 px-2 py-1 max-md:min-h-[44px] rounded border text-[11px] leading-tight transition-colors",
|
|
1698
|
-
draft.type === preset.type ? "border-primary bg-primary/10 text-primary font-medium" : "border-border bg-muted hover:bg-accent text-foreground"
|
|
1699
|
-
),
|
|
1700
|
-
title: t("pptx.ribbon.transitionTitle", { name: t(preset.labelKey) }),
|
|
1701
|
-
children: t(preset.labelKey)
|
|
1702
|
-
},
|
|
1703
|
-
preset.type
|
|
1704
|
-
))
|
|
1217
|
+
const ref = useRef(null);
|
|
1218
|
+
const draft = useMemo(() => readRibbonTransitionDraft(p.activeSlide), [p.activeSlide]);
|
|
1219
|
+
const transition = p.activeSlide?.transition;
|
|
1220
|
+
const editable = p.canEdit !== false;
|
|
1221
|
+
useEffect(() => {
|
|
1222
|
+
const host = ref.current;
|
|
1223
|
+
if (host) {
|
|
1224
|
+
host.state = {
|
|
1225
|
+
draft,
|
|
1226
|
+
transition,
|
|
1227
|
+
editable,
|
|
1228
|
+
inspectorOpen: p.isInspectorPaneOpen,
|
|
1229
|
+
translate: t
|
|
1230
|
+
};
|
|
1231
|
+
}
|
|
1232
|
+
}, [draft, transition, editable, p.isInspectorPaneOpen, t]);
|
|
1233
|
+
useEffect(() => {
|
|
1234
|
+
const host = ref.current;
|
|
1235
|
+
if (!host) {
|
|
1236
|
+
return;
|
|
1237
|
+
}
|
|
1238
|
+
const request = (event) => {
|
|
1239
|
+
const intent = event.detail;
|
|
1240
|
+
const patch = ribbonTransitionsDraftPatch(intent);
|
|
1241
|
+
if (patch) {
|
|
1242
|
+
p.onTransitionChange(ribbonTransitionUpdates({ ...draft, ...patch }));
|
|
1243
|
+
return;
|
|
1705
1244
|
}
|
|
1706
|
-
|
|
1707
|
-
|
|
1708
|
-
|
|
1709
|
-
|
|
1710
|
-
"
|
|
1711
|
-
|
|
1712
|
-
|
|
1713
|
-
|
|
1714
|
-
|
|
1715
|
-
|
|
1716
|
-
|
|
1717
|
-
|
|
1718
|
-
|
|
1719
|
-
|
|
1720
|
-
min: 0,
|
|
1721
|
-
max: 20,
|
|
1722
|
-
step: 0.25,
|
|
1723
|
-
disabled: !canEdit,
|
|
1724
|
-
value: durationBuffer ?? String(draft.durationSec),
|
|
1725
|
-
onChange: (e) => {
|
|
1726
|
-
setDurationBuffer(e.target.value);
|
|
1727
|
-
const seconds = Number(e.target.value);
|
|
1728
|
-
if (Number.isFinite(seconds) && e.target.value !== "") {
|
|
1729
|
-
commit({ durationSec: seconds });
|
|
1730
|
-
}
|
|
1731
|
-
},
|
|
1732
|
-
onBlur: () => setDurationBuffer(null),
|
|
1733
|
-
className: "w-16 px-1.5 py-1 rounded border border-border bg-muted text-xs text-foreground text-center",
|
|
1734
|
-
title: t("pptx.ribbon.transitionDurationTitle")
|
|
1735
|
-
}
|
|
1736
|
-
)
|
|
1737
|
-
]
|
|
1738
|
-
}
|
|
1739
|
-
),
|
|
1740
|
-
sep,
|
|
1741
|
-
/* @__PURE__ */ jsxs(
|
|
1742
|
-
"label",
|
|
1743
|
-
{
|
|
1744
|
-
className: "inline-flex items-center gap-1.5 text-xs text-muted-foreground",
|
|
1745
|
-
...controlAttr("transitions.timing.sound"),
|
|
1746
|
-
children: [
|
|
1747
|
-
/* @__PURE__ */ jsx("span", { className: "whitespace-nowrap", children: t("pptx.ribbon.sound") }),
|
|
1748
|
-
/* @__PURE__ */ jsx(
|
|
1749
|
-
"select",
|
|
1750
|
-
{
|
|
1751
|
-
"aria-label": t("pptx.ribbon.sound"),
|
|
1752
|
-
className: "w-24 px-1.5 py-1 rounded border border-border bg-muted text-xs text-foreground disabled:opacity-50",
|
|
1753
|
-
disabled: !canEdit,
|
|
1754
|
-
value: transitionSoundSelectedValue(p.activeSlide?.transition),
|
|
1755
|
-
onChange: handleSoundSelectChange,
|
|
1756
|
-
children: transitionSoundOptions(p.activeSlide?.transition).map((option) => /* @__PURE__ */ jsx("option", { value: option.value, children: option.i18nKey ? t(option.i18nKey) : option.label }, option.value))
|
|
1757
|
-
}
|
|
1758
|
-
),
|
|
1759
|
-
/* @__PURE__ */ jsx(
|
|
1760
|
-
"button",
|
|
1761
|
-
{
|
|
1762
|
-
type: "button",
|
|
1763
|
-
"aria-label": t("pptx.animation.sound.preview"),
|
|
1764
|
-
onClick: handleSoundPreview,
|
|
1765
|
-
disabled: !stockSoundId,
|
|
1766
|
-
className: "shrink-0 rounded border border-border bg-muted p-1 disabled:opacity-40",
|
|
1767
|
-
children: /* @__PURE__ */ jsx(LuPlay, { className: "h-3 w-3" })
|
|
1768
|
-
}
|
|
1769
|
-
),
|
|
1770
|
-
/* @__PURE__ */ jsx(
|
|
1771
|
-
"input",
|
|
1772
|
-
{
|
|
1773
|
-
ref: soundFileInputRef,
|
|
1774
|
-
type: "file",
|
|
1775
|
-
accept: "audio/*",
|
|
1776
|
-
className: "hidden",
|
|
1777
|
-
onChange: handleSoundFileChange
|
|
1778
|
-
}
|
|
1779
|
-
)
|
|
1780
|
-
]
|
|
1781
|
-
}
|
|
1782
|
-
),
|
|
1783
|
-
sep,
|
|
1784
|
-
/* @__PURE__ */ jsxs(
|
|
1785
|
-
"button",
|
|
1786
|
-
{
|
|
1787
|
-
type: "button",
|
|
1788
|
-
disabled: !canEdit,
|
|
1789
|
-
className: pill,
|
|
1790
|
-
title: t("pptx.ribbon.applyTransitionToAll"),
|
|
1791
|
-
...controlAttr("transitions.timing.applyToAll"),
|
|
1792
|
-
onClick: p.onApplyTransitionToAll,
|
|
1793
|
-
children: [
|
|
1794
|
-
/* @__PURE__ */ jsx(LuCopy, { className: ics }),
|
|
1795
|
-
t("pptx.headerFooter.applyToAll")
|
|
1796
|
-
]
|
|
1797
|
-
}
|
|
1798
|
-
),
|
|
1799
|
-
sep,
|
|
1800
|
-
/* @__PURE__ */ jsxs("div", { className: "inline-flex flex-col gap-1 text-xs text-muted-foreground", children: [
|
|
1801
|
-
/* @__PURE__ */ jsx("span", { className: "text-[10px] font-medium text-foreground", children: t("pptx.ribbon.advanceSlide") }),
|
|
1802
|
-
/* @__PURE__ */ jsxs(
|
|
1803
|
-
"label",
|
|
1804
|
-
{
|
|
1805
|
-
className: "inline-flex items-center gap-1.5 cursor-pointer",
|
|
1806
|
-
...controlAttr("transitions.timing.advanceOnClick"),
|
|
1807
|
-
children: [
|
|
1808
|
-
/* @__PURE__ */ jsx(
|
|
1809
|
-
"input",
|
|
1810
|
-
{
|
|
1811
|
-
type: "checkbox",
|
|
1812
|
-
disabled: !canEdit,
|
|
1813
|
-
checked: draft.advanceOnClick,
|
|
1814
|
-
onChange: (e) => commit({ advanceOnClick: e.target.checked }),
|
|
1815
|
-
className: "accent-primary h-3 w-3"
|
|
1816
|
-
}
|
|
1817
|
-
),
|
|
1818
|
-
/* @__PURE__ */ jsx("span", { className: "whitespace-nowrap", children: t("pptx.ribbon.onMouseClick") })
|
|
1819
|
-
]
|
|
1820
|
-
}
|
|
1821
|
-
),
|
|
1822
|
-
/* @__PURE__ */ jsxs(
|
|
1823
|
-
"label",
|
|
1824
|
-
{
|
|
1825
|
-
className: "inline-flex items-center gap-1.5 cursor-pointer",
|
|
1826
|
-
...controlAttr("transitions.timing.advanceAfter"),
|
|
1827
|
-
children: [
|
|
1828
|
-
/* @__PURE__ */ jsx(
|
|
1829
|
-
"input",
|
|
1830
|
-
{
|
|
1831
|
-
type: "checkbox",
|
|
1832
|
-
"aria-label": t("pptx.ribbon.afterDuration"),
|
|
1833
|
-
disabled: !canEdit,
|
|
1834
|
-
checked: draft.advanceAfter,
|
|
1835
|
-
onChange: (e) => commit({ advanceAfter: e.target.checked }),
|
|
1836
|
-
className: "accent-primary h-3 w-3"
|
|
1837
|
-
}
|
|
1838
|
-
),
|
|
1839
|
-
/* @__PURE__ */ jsx("span", { className: "whitespace-nowrap", children: t("pptx.ribbon.afterDuration") }),
|
|
1840
|
-
/* @__PURE__ */ jsx(
|
|
1841
|
-
"input",
|
|
1842
|
-
{
|
|
1843
|
-
type: "text",
|
|
1844
|
-
"aria-label": t("pptx.ribbon.advanceAfterSeconds"),
|
|
1845
|
-
value: advanceBuffer ?? draft.advanceAfterText,
|
|
1846
|
-
onChange: (e) => {
|
|
1847
|
-
setAdvanceBuffer(e.target.value);
|
|
1848
|
-
commit({ advanceAfter: true, advanceAfterText: e.target.value });
|
|
1849
|
-
},
|
|
1850
|
-
onBlur: () => setAdvanceBuffer(null),
|
|
1851
|
-
disabled: !canEdit || !draft.advanceAfter,
|
|
1852
|
-
className: "w-16 px-1 py-0.5 rounded border border-border bg-muted text-xs text-foreground text-center disabled:opacity-50",
|
|
1853
|
-
title: t("pptx.ribbon.advanceAfterSeconds")
|
|
1854
|
-
}
|
|
1855
|
-
)
|
|
1856
|
-
]
|
|
1245
|
+
switch (intent.kind) {
|
|
1246
|
+
case "preview":
|
|
1247
|
+
playSlideTransitionPreview(transition, document);
|
|
1248
|
+
break;
|
|
1249
|
+
case "applyToAll":
|
|
1250
|
+
p.onApplyTransitionToAll();
|
|
1251
|
+
break;
|
|
1252
|
+
case "inspector":
|
|
1253
|
+
p.onToggleInspector();
|
|
1254
|
+
break;
|
|
1255
|
+
case "soundPreview": {
|
|
1256
|
+
const url = ribbonTransitionStockSoundUrl(transition);
|
|
1257
|
+
if (url) {
|
|
1258
|
+
playAnimationSound(url);
|
|
1857
1259
|
}
|
|
1858
|
-
|
|
1859
|
-
|
|
1860
|
-
|
|
1861
|
-
|
|
1862
|
-
|
|
1863
|
-
|
|
1864
|
-
|
|
1865
|
-
|
|
1866
|
-
|
|
1867
|
-
className: cn(
|
|
1868
|
-
pill,
|
|
1869
|
-
p.isInspectorPaneOpen ? "bg-primary hover:bg-primary/80 text-white" : ""
|
|
1870
|
-
),
|
|
1871
|
-
title: t("pptx.ribbon.openInspectorTransitions"),
|
|
1872
|
-
children: [
|
|
1873
|
-
/* @__PURE__ */ jsx(LuPanelRight, { className: ic }),
|
|
1874
|
-
t("pptx.ribbon.inspector")
|
|
1875
|
-
]
|
|
1260
|
+
break;
|
|
1261
|
+
}
|
|
1262
|
+
default:
|
|
1263
|
+
void ribbonTransitionsSoundChange(intent).then((change) => {
|
|
1264
|
+
if (change) {
|
|
1265
|
+
p.onTransitionChange(change);
|
|
1266
|
+
}
|
|
1267
|
+
return void 0;
|
|
1268
|
+
});
|
|
1876
1269
|
}
|
|
1877
|
-
|
|
1878
|
-
|
|
1270
|
+
};
|
|
1271
|
+
host.addEventListener("transitions-request", request);
|
|
1272
|
+
return () => host.removeEventListener("transitions-request", request);
|
|
1273
|
+
}, [draft, transition, p]);
|
|
1274
|
+
return /* @__PURE__ */ jsx("pptx-ui-ribbon-transitions", { ref });
|
|
1879
1275
|
}
|
|
1880
1276
|
function DesignSection(p) {
|
|
1881
1277
|
const { t } = useTranslation();
|
|
@@ -1936,88 +1332,52 @@ var RecentColorsProvider = RecentColorsContext.Provider;
|
|
|
1936
1332
|
function useRecentColors() {
|
|
1937
1333
|
return useContext(RecentColorsContext);
|
|
1938
1334
|
}
|
|
1939
|
-
var DRAW_TOOL_CONTROL = {
|
|
1940
|
-
select: "draw.tools.select",
|
|
1941
|
-
pen: "draw.tools.pen",
|
|
1942
|
-
highlighter: "draw.tools.highlighter",
|
|
1943
|
-
eraser: "draw.tools.eraser"
|
|
1944
|
-
};
|
|
1945
1335
|
function DrawSection(p) {
|
|
1946
1336
|
const { t } = useTranslation();
|
|
1947
|
-
const { pushColor } = useRecentColors();
|
|
1948
|
-
const
|
|
1337
|
+
const { pushColor, recentColors } = useRecentColors();
|
|
1338
|
+
const ref = useRef(null);
|
|
1949
1339
|
useEffect(() => {
|
|
1950
|
-
const
|
|
1951
|
-
if (!
|
|
1340
|
+
const host = ref.current;
|
|
1341
|
+
if (!host) {
|
|
1952
1342
|
return;
|
|
1953
1343
|
}
|
|
1954
|
-
|
|
1955
|
-
|
|
1956
|
-
|
|
1957
|
-
|
|
1958
|
-
|
|
1959
|
-
|
|
1960
|
-
|
|
1961
|
-
|
|
1962
|
-
|
|
1963
|
-
|
|
1964
|
-
|
|
1965
|
-
|
|
1966
|
-
|
|
1967
|
-
|
|
1968
|
-
|
|
1969
|
-
|
|
1970
|
-
|
|
1971
|
-
}
|
|
1972
|
-
|
|
1973
|
-
|
|
1974
|
-
|
|
1975
|
-
|
|
1976
|
-
|
|
1977
|
-
|
|
1978
|
-
|
|
1979
|
-
|
|
1980
|
-
|
|
1981
|
-
|
|
1982
|
-
|
|
1983
|
-
|
|
1984
|
-
|
|
1985
|
-
|
|
1986
|
-
|
|
1987
|
-
|
|
1988
|
-
|
|
1989
|
-
|
|
1990
|
-
|
|
1991
|
-
}
|
|
1992
|
-
)
|
|
1993
|
-
]
|
|
1994
|
-
}
|
|
1995
|
-
),
|
|
1996
|
-
/* @__PURE__ */ jsxs(
|
|
1997
|
-
"label",
|
|
1998
|
-
{
|
|
1999
|
-
className: "inline-flex items-center gap-1 text-muted-foreground",
|
|
2000
|
-
title: t("pptx.ribbon.strokeWidth"),
|
|
2001
|
-
...controlAttr("draw.tools.penWidth"),
|
|
2002
|
-
children: [
|
|
2003
|
-
t("pptx.ribbon.width"),
|
|
2004
|
-
/* @__PURE__ */ jsx(
|
|
2005
|
-
"input",
|
|
2006
|
-
{
|
|
2007
|
-
type: "range",
|
|
2008
|
-
min: 1,
|
|
2009
|
-
max: 12,
|
|
2010
|
-
value: p.drawingWidth,
|
|
2011
|
-
onChange: (e) => p.onSetDrawingWidth(Number(e.target.value)),
|
|
2012
|
-
className: "w-16 h-1 accent-primary"
|
|
2013
|
-
}
|
|
2014
|
-
),
|
|
2015
|
-
/* @__PURE__ */ jsx("span", { className: "text-foreground w-4 text-right", children: p.drawingWidth })
|
|
2016
|
-
]
|
|
2017
|
-
}
|
|
2018
|
-
)
|
|
2019
|
-
] })
|
|
2020
|
-
] });
|
|
1344
|
+
host.state = {
|
|
1345
|
+
tool: p.activeTool,
|
|
1346
|
+
color: p.drawingColor,
|
|
1347
|
+
width: p.drawingWidth,
|
|
1348
|
+
editable: p.canEdit !== false,
|
|
1349
|
+
recentColors,
|
|
1350
|
+
translate: t
|
|
1351
|
+
};
|
|
1352
|
+
}, [p, recentColors, t]);
|
|
1353
|
+
useEffect(() => {
|
|
1354
|
+
const host = ref.current;
|
|
1355
|
+
if (!host) {
|
|
1356
|
+
return;
|
|
1357
|
+
}
|
|
1358
|
+
const request = (event) => {
|
|
1359
|
+
if (p.canEdit === false) {
|
|
1360
|
+
return;
|
|
1361
|
+
}
|
|
1362
|
+
const intent = event.detail;
|
|
1363
|
+
switch (intent.kind) {
|
|
1364
|
+
case "tool":
|
|
1365
|
+
p.onSetActiveTool(intent.value);
|
|
1366
|
+
break;
|
|
1367
|
+
case "width":
|
|
1368
|
+
p.onSetDrawingWidth(intent.value);
|
|
1369
|
+
break;
|
|
1370
|
+
case "color":
|
|
1371
|
+
p.onSetDrawingColor(intent.value);
|
|
1372
|
+
if (intent.committed) {
|
|
1373
|
+
pushColor(intent.value);
|
|
1374
|
+
}
|
|
1375
|
+
}
|
|
1376
|
+
};
|
|
1377
|
+
host.addEventListener("draw-request", request);
|
|
1378
|
+
return () => host.removeEventListener("draw-request", request);
|
|
1379
|
+
}, [p, pushColor]);
|
|
1380
|
+
return /* @__PURE__ */ jsx("pptx-ui-ribbon-draw", { ref });
|
|
2021
1381
|
}
|
|
2022
1382
|
var ViewerCustomizationContext = createContext(
|
|
2023
1383
|
EMPTY_RESOLVED_CUSTOMIZATION
|
|
@@ -2139,7 +1499,7 @@ function AccountPage() {
|
|
|
2139
1499
|
return void 0;
|
|
2140
1500
|
});
|
|
2141
1501
|
};
|
|
2142
|
-
const version = "4.16.
|
|
1502
|
+
const version = "4.16.1" ;
|
|
2143
1503
|
return /* @__PURE__ */ jsxs("div", { className: "mt-8 max-w-[700px] space-y-6", children: [
|
|
2144
1504
|
/* @__PURE__ */ jsxs("section", { className: cardClass, children: [
|
|
2145
1505
|
/* @__PURE__ */ jsxs("h2", { className: "flex items-center gap-2 text-sm font-semibold", children: [
|
|
@@ -2541,76 +1901,69 @@ function FileSection(p) {
|
|
|
2541
1901
|
}
|
|
2542
1902
|
);
|
|
2543
1903
|
}
|
|
2544
|
-
function
|
|
1904
|
+
function WebHomeControls({
|
|
1905
|
+
family,
|
|
1906
|
+
controls,
|
|
1907
|
+
onRequest
|
|
1908
|
+
}) {
|
|
2545
1909
|
const { t } = useTranslation();
|
|
2546
|
-
const
|
|
2547
|
-
|
|
2548
|
-
|
|
2549
|
-
|
|
2550
|
-
|
|
2551
|
-
|
|
2552
|
-
|
|
2553
|
-
|
|
2554
|
-
|
|
2555
|
-
|
|
2556
|
-
|
|
2557
|
-
|
|
2558
|
-
|
|
2559
|
-
|
|
2560
|
-
|
|
2561
|
-
|
|
2562
|
-
|
|
2563
|
-
|
|
2564
|
-
|
|
2565
|
-
|
|
2566
|
-
|
|
2567
|
-
|
|
2568
|
-
|
|
2569
|
-
|
|
2570
|
-
|
|
2571
|
-
|
|
2572
|
-
|
|
2573
|
-
|
|
2574
|
-
|
|
2575
|
-
|
|
2576
|
-
|
|
2577
|
-
|
|
2578
|
-
|
|
2579
|
-
|
|
2580
|
-
|
|
2581
|
-
|
|
2582
|
-
|
|
2583
|
-
|
|
2584
|
-
|
|
2585
|
-
|
|
2586
|
-
|
|
2587
|
-
|
|
2588
|
-
|
|
2589
|
-
|
|
2590
|
-
|
|
2591
|
-
|
|
2592
|
-
|
|
2593
|
-
|
|
2594
|
-
|
|
2595
|
-
|
|
2596
|
-
|
|
2597
|
-
|
|
2598
|
-
|
|
2599
|
-
|
|
2600
|
-
|
|
2601
|
-
|
|
2602
|
-
|
|
2603
|
-
gL,
|
|
2604
|
-
p.formatPainterActive ? "bg-amber-600 hover:bg-amber-500 text-amber-50" : ""
|
|
2605
|
-
),
|
|
2606
|
-
title: t("pptx.arrange.formatPainter"),
|
|
2607
|
-
...controlAttr("home.clipboard.formatPainter"),
|
|
2608
|
-
children: /* @__PURE__ */ jsx(LuPaintbrush, { className: ic })
|
|
2609
|
-
}
|
|
2610
|
-
)
|
|
2611
|
-
] }),
|
|
2612
|
-
/* @__PURE__ */ jsx("span", { className: "text-[9px] text-muted-foreground leading-none", children: t("pptx.ribbon.clipboard") })
|
|
2613
|
-
] });
|
|
1910
|
+
const ref = useRef(null);
|
|
1911
|
+
useEffect(() => {
|
|
1912
|
+
if (ref.current) {
|
|
1913
|
+
ref.current.state = { controls, translate: t };
|
|
1914
|
+
}
|
|
1915
|
+
}, [controls, t]);
|
|
1916
|
+
useEffect(() => {
|
|
1917
|
+
const host = ref.current;
|
|
1918
|
+
if (!host) {
|
|
1919
|
+
return;
|
|
1920
|
+
}
|
|
1921
|
+
const listener = (event) => onRequest(event.detail.id);
|
|
1922
|
+
host.addEventListener("home-request", listener);
|
|
1923
|
+
return () => host.removeEventListener("home-request", listener);
|
|
1924
|
+
}, [onRequest]);
|
|
1925
|
+
return React95.createElement(`pptx-ui-ribbon-home-${family}`, { ref });
|
|
1926
|
+
}
|
|
1927
|
+
function ClipboardGroup(p) {
|
|
1928
|
+
const { canEdit, hasSelection, canPaste: canPaste2, formatPainterActive, canActivateFormatPainter } = p;
|
|
1929
|
+
const { onPaste, onCut, onCopy, onToggleFormatPainter } = p;
|
|
1930
|
+
const controls = useMemo(
|
|
1931
|
+
() => clipboardHomeControls({
|
|
1932
|
+
editable: canEdit,
|
|
1933
|
+
hasSelection,
|
|
1934
|
+
hasClipboard: canPaste2,
|
|
1935
|
+
formatPainterActive: Boolean(formatPainterActive),
|
|
1936
|
+
canFormatPaint: canActivateFormatPainter !== false,
|
|
1937
|
+
showFormatPainter: Boolean(onToggleFormatPainter)
|
|
1938
|
+
}),
|
|
1939
|
+
[
|
|
1940
|
+
canEdit,
|
|
1941
|
+
hasSelection,
|
|
1942
|
+
canPaste2,
|
|
1943
|
+
formatPainterActive,
|
|
1944
|
+
canActivateFormatPainter,
|
|
1945
|
+
onToggleFormatPainter
|
|
1946
|
+
]
|
|
1947
|
+
);
|
|
1948
|
+
const request = useCallback(
|
|
1949
|
+
(id) => {
|
|
1950
|
+
switch (id) {
|
|
1951
|
+
case "home.clipboard.paste":
|
|
1952
|
+
onPaste();
|
|
1953
|
+
break;
|
|
1954
|
+
case "home.clipboard.cut":
|
|
1955
|
+
onCut();
|
|
1956
|
+
break;
|
|
1957
|
+
case "home.clipboard.copy":
|
|
1958
|
+
onCopy();
|
|
1959
|
+
break;
|
|
1960
|
+
case "home.clipboard.formatPainter":
|
|
1961
|
+
onToggleFormatPainter?.();
|
|
1962
|
+
}
|
|
1963
|
+
},
|
|
1964
|
+
[onPaste, onCut, onCopy, onToggleFormatPainter]
|
|
1965
|
+
);
|
|
1966
|
+
return /* @__PURE__ */ jsx(WebHomeControls, { family: "clipboard", controls, onRequest: request });
|
|
2614
1967
|
}
|
|
2615
1968
|
function FontPickers(p) {
|
|
2616
1969
|
const { t } = useTranslation();
|
|
@@ -3153,425 +2506,83 @@ function DateTimeFieldDialog(p) {
|
|
|
3153
2506
|
}
|
|
3154
2507
|
);
|
|
3155
2508
|
}
|
|
3156
|
-
var ICONS3 = {
|
|
3157
|
-
freeformShape: LuPenTool,
|
|
3158
|
-
curve: LuSpline
|
|
3159
|
-
};
|
|
3160
|
-
function FreeformToolButtons({
|
|
3161
|
-
canEdit,
|
|
3162
|
-
activeTool,
|
|
3163
|
-
onArm
|
|
3164
|
-
}) {
|
|
3165
|
-
const { t } = useTranslation();
|
|
3166
|
-
const customization = useViewerCustomizationContext();
|
|
3167
|
-
const tools = FREEFORM_TOOL_IDS.filter((tool) => isDrawingToolVisible(customization, tool));
|
|
3168
|
-
if (tools.length === 0) {
|
|
3169
|
-
return null;
|
|
3170
|
-
}
|
|
3171
|
-
return /* @__PURE__ */ jsx(Fragment, { children: tools.map((tool) => {
|
|
3172
|
-
const Icon = ICONS3[tool];
|
|
3173
|
-
const active = activeTool === tool;
|
|
3174
|
-
return /* @__PURE__ */ jsxs(
|
|
3175
|
-
"button",
|
|
3176
|
-
{
|
|
3177
|
-
type: "button",
|
|
3178
|
-
disabled: !canEdit,
|
|
3179
|
-
"aria-pressed": active,
|
|
3180
|
-
"data-pptx-drawing-tool": tool,
|
|
3181
|
-
className: cn(pill, active && "bg-primary/15 text-primary"),
|
|
3182
|
-
title: t(FREEFORM_TOOL_LABEL_KEYS[tool]),
|
|
3183
|
-
onClick: () => onArm(active ? null : tool),
|
|
3184
|
-
children: [
|
|
3185
|
-
/* @__PURE__ */ jsx(Icon, { className: ic }),
|
|
3186
|
-
t(FREEFORM_TOOL_LABEL_KEYS[tool])
|
|
3187
|
-
]
|
|
3188
|
-
},
|
|
3189
|
-
tool
|
|
3190
|
-
);
|
|
3191
|
-
}) });
|
|
3192
|
-
}
|
|
3193
|
-
function InsertHyperlinkButton(p) {
|
|
3194
|
-
const { t } = useTranslation();
|
|
3195
|
-
return /* @__PURE__ */ jsxs(
|
|
3196
|
-
"button",
|
|
3197
|
-
{
|
|
3198
|
-
type: "button",
|
|
3199
|
-
onClick: p.onOpenHyperlinkDialog,
|
|
3200
|
-
disabled: !p.hasSelection,
|
|
3201
|
-
className: pill,
|
|
3202
|
-
title: t("pptx.hyperlinkDialog.title"),
|
|
3203
|
-
...controlAttr("insert.links.link"),
|
|
3204
|
-
children: [
|
|
3205
|
-
/* @__PURE__ */ jsx(LuLink, { className: ic }),
|
|
3206
|
-
t("pptx.hyperlinkDialog.title")
|
|
3207
|
-
]
|
|
3208
|
-
}
|
|
3209
|
-
);
|
|
3210
|
-
}
|
|
3211
2509
|
function InsertSection(p) {
|
|
3212
2510
|
const { t } = useTranslation();
|
|
3213
|
-
const
|
|
2511
|
+
const customization = useViewerCustomizationContext();
|
|
2512
|
+
const ref = useRef(null);
|
|
3214
2513
|
const [datePickerOpen, setDatePickerOpen] = useState(false);
|
|
3215
|
-
const [
|
|
3216
|
-
|
|
3217
|
-
|
|
3218
|
-
|
|
3219
|
-
|
|
3220
|
-
|
|
3221
|
-
|
|
3222
|
-
|
|
3223
|
-
|
|
3224
|
-
|
|
3225
|
-
|
|
3226
|
-
|
|
3227
|
-
|
|
3228
|
-
|
|
3229
|
-
|
|
3230
|
-
|
|
3231
|
-
|
|
3232
|
-
|
|
3233
|
-
|
|
3234
|
-
|
|
3235
|
-
|
|
3236
|
-
|
|
3237
|
-
|
|
3238
|
-
|
|
3239
|
-
|
|
3240
|
-
|
|
3241
|
-
|
|
3242
|
-
|
|
3243
|
-
|
|
3244
|
-
|
|
3245
|
-
|
|
3246
|
-
|
|
3247
|
-
|
|
3248
|
-
|
|
3249
|
-
|
|
3250
|
-
|
|
3251
|
-
|
|
3252
|
-
|
|
3253
|
-
|
|
3254
|
-
|
|
3255
|
-
t("pptx.insert.shape")
|
|
3256
|
-
]
|
|
3257
|
-
}
|
|
3258
|
-
)
|
|
3259
|
-
] }),
|
|
3260
|
-
p.onArmFreeformTool && /* @__PURE__ */ jsx(
|
|
3261
|
-
FreeformToolButtons,
|
|
3262
|
-
{
|
|
3263
|
-
canEdit,
|
|
3264
|
-
activeTool: p.activeFreeformTool,
|
|
3265
|
-
onArm: p.onArmFreeformTool
|
|
2514
|
+
const [chartKind, setChartKind] = useState(DEFAULT_INSERT_CHART_KIND);
|
|
2515
|
+
useEffect(() => {
|
|
2516
|
+
const host = ref.current;
|
|
2517
|
+
if (!host) {
|
|
2518
|
+
return;
|
|
2519
|
+
}
|
|
2520
|
+
host.state = {
|
|
2521
|
+
editable: p.canEdit,
|
|
2522
|
+
hasSelection: p.hasSelection,
|
|
2523
|
+
shapeType: p.newShapeType,
|
|
2524
|
+
chartKind,
|
|
2525
|
+
activeFreeformTool: p.activeFreeformTool ?? null,
|
|
2526
|
+
freeformTools: p.onArmFreeformTool ? FREEFORM_TOOL_IDS.filter((tool) => isDrawingToolVisible(customization, tool)) : [],
|
|
2527
|
+
chartAvailable: Boolean(p.onAddChart),
|
|
2528
|
+
fieldAvailable: Boolean(p.onInsertField),
|
|
2529
|
+
headerFooterAvailable: Boolean(p.onOpenHeaderFooter),
|
|
2530
|
+
translate: t
|
|
2531
|
+
};
|
|
2532
|
+
}, [p, chartKind, customization, t]);
|
|
2533
|
+
useEffect(() => {
|
|
2534
|
+
const host = ref.current;
|
|
2535
|
+
if (!host) {
|
|
2536
|
+
return;
|
|
2537
|
+
}
|
|
2538
|
+
const request = (event) => {
|
|
2539
|
+
const intent = event.detail;
|
|
2540
|
+
switch (intent.kind) {
|
|
2541
|
+
case "command": {
|
|
2542
|
+
const commands = {
|
|
2543
|
+
textBox: p.onAddTextBox,
|
|
2544
|
+
table: p.onAddTable,
|
|
2545
|
+
image: p.onOpenImagePicker,
|
|
2546
|
+
media: p.onOpenMediaPicker,
|
|
2547
|
+
smartArt: p.onAddSmartArt,
|
|
2548
|
+
equation: p.onAddEquation,
|
|
2549
|
+
link: p.onOpenHyperlinkDialog,
|
|
2550
|
+
headerFooter: p.onOpenHeaderFooter
|
|
2551
|
+
};
|
|
2552
|
+
commands[intent.value]?.();
|
|
2553
|
+
break;
|
|
3266
2554
|
}
|
|
3267
|
-
|
|
3268
|
-
|
|
3269
|
-
|
|
3270
|
-
|
|
3271
|
-
|
|
3272
|
-
|
|
3273
|
-
|
|
3274
|
-
|
|
3275
|
-
|
|
3276
|
-
|
|
3277
|
-
|
|
3278
|
-
|
|
3279
|
-
|
|
3280
|
-
|
|
3281
|
-
|
|
3282
|
-
|
|
3283
|
-
|
|
3284
|
-
|
|
3285
|
-
|
|
3286
|
-
|
|
3287
|
-
|
|
3288
|
-
|
|
3289
|
-
|
|
3290
|
-
...controlAttr("insert.media.media"),
|
|
3291
|
-
children: [
|
|
3292
|
-
/* @__PURE__ */ jsx(LuVideo, { className: ic }),
|
|
3293
|
-
t("pptx.ribbon.media")
|
|
3294
|
-
]
|
|
3295
|
-
}
|
|
3296
|
-
) }),
|
|
3297
|
-
/* @__PURE__ */ jsx(RibbonGroupScope, { id: "insert.tables", children: /* @__PURE__ */ jsxs(
|
|
3298
|
-
"button",
|
|
3299
|
-
{
|
|
3300
|
-
onClick: p.onAddTable,
|
|
3301
|
-
disabled: !canEdit,
|
|
3302
|
-
className: pill,
|
|
3303
|
-
title: t("pptx.insert.insertTable"),
|
|
3304
|
-
...controlAttr("insert.tables.table"),
|
|
3305
|
-
children: [
|
|
3306
|
-
/* @__PURE__ */ jsx(LuDatabase, { className: ic }),
|
|
3307
|
-
t("pptx.ribbon.table")
|
|
3308
|
-
]
|
|
3309
|
-
}
|
|
3310
|
-
) }),
|
|
3311
|
-
/* @__PURE__ */ jsxs(RibbonGroupScope, { id: "insert.illustrations", children: [
|
|
3312
|
-
p.onAddChart && /* @__PURE__ */ jsxs("div", { className: grp, ...controlAttr("insert.illustrations.chart"), children: [
|
|
3313
|
-
/* @__PURE__ */ jsx(
|
|
3314
|
-
"select",
|
|
3315
|
-
{
|
|
3316
|
-
value: newChartKind,
|
|
3317
|
-
onChange: (e) => {
|
|
3318
|
-
const kind = INSERT_CHART_TYPES.find((ct) => ct.id === e.target.value)?.id;
|
|
3319
|
-
setNewChartKind(kind ?? DEFAULT_INSERT_CHART_KIND);
|
|
3320
|
-
},
|
|
3321
|
-
className: "bg-transparent py-1.5 pl-2 pr-1 outline-none text-xs",
|
|
3322
|
-
title: t("pptx.ribbon.chartType"),
|
|
3323
|
-
children: INSERT_CHART_TYPES.map((ct) => /* @__PURE__ */ jsx("option", { value: ct.id, className: "bg-background", children: t(ct.labelKey) }, ct.id))
|
|
3324
|
-
}
|
|
3325
|
-
),
|
|
3326
|
-
/* @__PURE__ */ jsxs(
|
|
3327
|
-
"button",
|
|
3328
|
-
{
|
|
3329
|
-
onClick: () => p.onAddChart(newChartKind),
|
|
3330
|
-
disabled: !canEdit,
|
|
3331
|
-
className: "inline-flex items-center gap-1.5 px-2.5 py-1.5 border-l border-border hover:bg-accent transition-colors text-xs",
|
|
3332
|
-
title: t("pptx.ribbon.insertChart"),
|
|
3333
|
-
children: [
|
|
3334
|
-
/* @__PURE__ */ jsxs(
|
|
3335
|
-
"svg",
|
|
3336
|
-
{
|
|
3337
|
-
className: ic,
|
|
3338
|
-
viewBox: "0 0 24 24",
|
|
3339
|
-
fill: "none",
|
|
3340
|
-
stroke: "currentColor",
|
|
3341
|
-
strokeWidth: "2",
|
|
3342
|
-
strokeLinecap: "round",
|
|
3343
|
-
strokeLinejoin: "round",
|
|
3344
|
-
children: [
|
|
3345
|
-
/* @__PURE__ */ jsx("path", { d: "M3 3v18h18" }),
|
|
3346
|
-
/* @__PURE__ */ jsx("rect", { x: "7", y: "11", width: "3", height: "6" }),
|
|
3347
|
-
/* @__PURE__ */ jsx("rect", { x: "12", y: "7", width: "3", height: "10" }),
|
|
3348
|
-
/* @__PURE__ */ jsx("rect", { x: "17", y: "13", width: "3", height: "4" })
|
|
3349
|
-
]
|
|
3350
|
-
}
|
|
3351
|
-
),
|
|
3352
|
-
t("pptx.ribbon.chart")
|
|
3353
|
-
]
|
|
2555
|
+
case "shapeType":
|
|
2556
|
+
p.onSetNewShapeType(intent.value);
|
|
2557
|
+
break;
|
|
2558
|
+
case "shape":
|
|
2559
|
+
p.onAddShape();
|
|
2560
|
+
break;
|
|
2561
|
+
case "chartType":
|
|
2562
|
+
setChartKind(intent.value);
|
|
2563
|
+
break;
|
|
2564
|
+
case "chart":
|
|
2565
|
+
p.onAddChart?.(intent.value);
|
|
2566
|
+
break;
|
|
2567
|
+
case "freeform":
|
|
2568
|
+
p.onArmFreeformTool?.(intent.value);
|
|
2569
|
+
break;
|
|
2570
|
+
case "actionButton":
|
|
2571
|
+
p.onAddActionButton(intent.value);
|
|
2572
|
+
break;
|
|
2573
|
+
case "field":
|
|
2574
|
+
if (intent.value === "datetime") {
|
|
2575
|
+
setDatePickerOpen(true);
|
|
2576
|
+
} else {
|
|
2577
|
+
p.onInsertField?.(intent.value);
|
|
3354
2578
|
}
|
|
3355
|
-
)
|
|
3356
|
-
] }),
|
|
3357
|
-
/* @__PURE__ */ jsxs(
|
|
3358
|
-
"button",
|
|
3359
|
-
{
|
|
3360
|
-
onClick: p.onAddSmartArt,
|
|
3361
|
-
disabled: !canEdit,
|
|
3362
|
-
className: pill,
|
|
3363
|
-
title: t("pptx.insert.insertSmartArt"),
|
|
3364
|
-
...controlAttr("insert.illustrations.smartArt"),
|
|
3365
|
-
children: [
|
|
3366
|
-
/* @__PURE__ */ jsx(LuLayers, { className: ic }),
|
|
3367
|
-
t("pptx.ribbon.smartArt")
|
|
3368
|
-
]
|
|
3369
|
-
}
|
|
3370
|
-
)
|
|
3371
|
-
] }),
|
|
3372
|
-
/* @__PURE__ */ jsx(RibbonGroupScope, { id: "insert.symbols", children: /* @__PURE__ */ jsxs(
|
|
3373
|
-
"button",
|
|
3374
|
-
{
|
|
3375
|
-
onClick: p.onAddEquation,
|
|
3376
|
-
disabled: !canEdit,
|
|
3377
|
-
className: pill,
|
|
3378
|
-
title: t("pptx.insert.insertEquation"),
|
|
3379
|
-
...controlAttr("insert.symbols.equation"),
|
|
3380
|
-
children: [
|
|
3381
|
-
/* @__PURE__ */ jsx(
|
|
3382
|
-
"svg",
|
|
3383
|
-
{
|
|
3384
|
-
className: ic,
|
|
3385
|
-
viewBox: "0 0 24 24",
|
|
3386
|
-
fill: "none",
|
|
3387
|
-
stroke: "currentColor",
|
|
3388
|
-
strokeWidth: "2",
|
|
3389
|
-
strokeLinecap: "round",
|
|
3390
|
-
strokeLinejoin: "round",
|
|
3391
|
-
children: /* @__PURE__ */ jsx("path", { d: "M4 17h6M7 14v6M14 7l4.5 10M15.5 14h5" })
|
|
3392
|
-
}
|
|
3393
|
-
),
|
|
3394
|
-
t("pptx.ribbon.equation")
|
|
3395
|
-
]
|
|
3396
|
-
}
|
|
3397
|
-
) }),
|
|
3398
|
-
/* @__PURE__ */ jsx(RibbonGroupScope, { id: "insert.links", children: /* @__PURE__ */ jsxs(
|
|
3399
|
-
"div",
|
|
3400
|
-
{
|
|
3401
|
-
className: "relative group inline-flex items-center",
|
|
3402
|
-
ref: actionMenuRef,
|
|
3403
|
-
...controlAttr("insert.links.action"),
|
|
3404
|
-
children: [
|
|
3405
|
-
/* @__PURE__ */ jsxs(
|
|
3406
|
-
"button",
|
|
3407
|
-
{
|
|
3408
|
-
type: "button",
|
|
3409
|
-
disabled: !canEdit,
|
|
3410
|
-
className: pill,
|
|
3411
|
-
title: t("pptx.ribbon.insertActionButton"),
|
|
3412
|
-
children: [
|
|
3413
|
-
/* @__PURE__ */ jsxs(
|
|
3414
|
-
"svg",
|
|
3415
|
-
{
|
|
3416
|
-
className: ic,
|
|
3417
|
-
viewBox: "0 0 24 24",
|
|
3418
|
-
fill: "none",
|
|
3419
|
-
stroke: "currentColor",
|
|
3420
|
-
strokeWidth: "2",
|
|
3421
|
-
strokeLinecap: "round",
|
|
3422
|
-
strokeLinejoin: "round",
|
|
3423
|
-
children: [
|
|
3424
|
-
/* @__PURE__ */ jsx("rect", { x: "3", y: "3", width: "18", height: "18", rx: "2" }),
|
|
3425
|
-
/* @__PURE__ */ jsx("path", { d: "M13 7l4 5-4 5" })
|
|
3426
|
-
]
|
|
3427
|
-
}
|
|
3428
|
-
),
|
|
3429
|
-
t("pptx.ribbon.action"),
|
|
3430
|
-
/* @__PURE__ */ jsx(LuChevronDown, { className: "w-3 h-3" })
|
|
3431
|
-
]
|
|
3432
|
-
}
|
|
3433
|
-
),
|
|
3434
|
-
/* @__PURE__ */ jsx(
|
|
3435
|
-
RibbonMenu,
|
|
3436
|
-
{
|
|
3437
|
-
anchorRef: actionMenuRef,
|
|
3438
|
-
className: "hidden group-hover:flex flex-col w-40 pt-1",
|
|
3439
|
-
children: /* @__PURE__ */ jsx("div", { className: "rounded-lg border border-border bg-popover backdrop-blur-lg shadow-2xl py-1", children: ACTION_BUTTON_PRESETS.map((preset) => /* @__PURE__ */ jsxs(
|
|
3440
|
-
"button",
|
|
3441
|
-
{
|
|
3442
|
-
type: "button",
|
|
3443
|
-
disabled: !canEdit,
|
|
3444
|
-
className: "flex items-center gap-2 w-full px-3 py-1.5 text-xs text-foreground hover:bg-muted transition-colors",
|
|
3445
|
-
onClick: () => p.onAddActionButton(preset.shapeType),
|
|
3446
|
-
children: [
|
|
3447
|
-
/* @__PURE__ */ jsx(
|
|
3448
|
-
"svg",
|
|
3449
|
-
{
|
|
3450
|
-
className: "w-4 h-4 flex-shrink-0",
|
|
3451
|
-
viewBox: "0 0 24 24",
|
|
3452
|
-
fill: "none",
|
|
3453
|
-
stroke: "currentColor",
|
|
3454
|
-
strokeWidth: "2",
|
|
3455
|
-
strokeLinecap: "round",
|
|
3456
|
-
strokeLinejoin: "round",
|
|
3457
|
-
children: /* @__PURE__ */ jsx("path", { d: preset.iconPath })
|
|
3458
|
-
}
|
|
3459
|
-
),
|
|
3460
|
-
preset.label
|
|
3461
|
-
]
|
|
3462
|
-
},
|
|
3463
|
-
preset.shapeType
|
|
3464
|
-
)) })
|
|
3465
|
-
}
|
|
3466
|
-
)
|
|
3467
|
-
]
|
|
3468
|
-
}
|
|
3469
|
-
) }),
|
|
3470
|
-
/* @__PURE__ */ jsx(RibbonGroupScope, { id: "insert.text", children: p.onInsertField && /* @__PURE__ */ jsxs(
|
|
3471
|
-
"div",
|
|
3472
|
-
{
|
|
3473
|
-
className: "relative group inline-flex items-center",
|
|
3474
|
-
ref: fieldMenuRef,
|
|
3475
|
-
...controlAttr("insert.text.field"),
|
|
3476
|
-
children: [
|
|
3477
|
-
/* @__PURE__ */ jsxs(
|
|
3478
|
-
"button",
|
|
3479
|
-
{
|
|
3480
|
-
type: "button",
|
|
3481
|
-
disabled: !canEdit,
|
|
3482
|
-
className: pill,
|
|
3483
|
-
title: t("pptx.field.insertField"),
|
|
3484
|
-
children: [
|
|
3485
|
-
/* @__PURE__ */ jsxs(
|
|
3486
|
-
"svg",
|
|
3487
|
-
{
|
|
3488
|
-
className: ic,
|
|
3489
|
-
viewBox: "0 0 24 24",
|
|
3490
|
-
fill: "none",
|
|
3491
|
-
stroke: "currentColor",
|
|
3492
|
-
strokeWidth: "2",
|
|
3493
|
-
strokeLinecap: "round",
|
|
3494
|
-
strokeLinejoin: "round",
|
|
3495
|
-
children: [
|
|
3496
|
-
/* @__PURE__ */ jsx("path", { d: "M4 7h16M4 12h10M4 17h12" }),
|
|
3497
|
-
/* @__PURE__ */ jsx("circle", { cx: "19", cy: "15", r: "3" })
|
|
3498
|
-
]
|
|
3499
|
-
}
|
|
3500
|
-
),
|
|
3501
|
-
t("pptx.field.field"),
|
|
3502
|
-
/* @__PURE__ */ jsx(LuChevronDown, { className: "w-3 h-3" })
|
|
3503
|
-
]
|
|
3504
|
-
}
|
|
3505
|
-
),
|
|
3506
|
-
/* @__PURE__ */ jsx(
|
|
3507
|
-
RibbonMenu,
|
|
3508
|
-
{
|
|
3509
|
-
anchorRef: fieldMenuRef,
|
|
3510
|
-
className: "hidden group-hover:flex flex-col w-44 pt-1",
|
|
3511
|
-
children: /* @__PURE__ */ jsxs("div", { className: "rounded-lg border border-border bg-popover backdrop-blur-lg shadow-2xl py-1", children: [
|
|
3512
|
-
/* @__PURE__ */ jsx(
|
|
3513
|
-
"button",
|
|
3514
|
-
{
|
|
3515
|
-
type: "button",
|
|
3516
|
-
disabled: !canEdit,
|
|
3517
|
-
className: "flex items-center gap-2 w-full px-3 py-1.5 text-xs text-foreground hover:bg-muted transition-colors",
|
|
3518
|
-
onClick: () => p.onInsertField("slidenum"),
|
|
3519
|
-
children: t("pptx.field.slideNumber")
|
|
3520
|
-
}
|
|
3521
|
-
),
|
|
3522
|
-
/* @__PURE__ */ jsx(
|
|
3523
|
-
"button",
|
|
3524
|
-
{
|
|
3525
|
-
type: "button",
|
|
3526
|
-
disabled: !canEdit,
|
|
3527
|
-
className: "flex items-center gap-2 w-full px-3 py-1.5 text-xs text-foreground hover:bg-muted transition-colors",
|
|
3528
|
-
onClick: openDatePicker,
|
|
3529
|
-
children: t("pptx.field.dateTime")
|
|
3530
|
-
}
|
|
3531
|
-
),
|
|
3532
|
-
/* @__PURE__ */ jsx(
|
|
3533
|
-
"button",
|
|
3534
|
-
{
|
|
3535
|
-
type: "button",
|
|
3536
|
-
disabled: !canEdit,
|
|
3537
|
-
className: "flex items-center gap-2 w-full px-3 py-1.5 text-xs text-foreground hover:bg-muted transition-colors",
|
|
3538
|
-
onClick: () => p.onInsertField("header"),
|
|
3539
|
-
children: t("pptx.field.header")
|
|
3540
|
-
}
|
|
3541
|
-
),
|
|
3542
|
-
/* @__PURE__ */ jsx(
|
|
3543
|
-
"button",
|
|
3544
|
-
{
|
|
3545
|
-
type: "button",
|
|
3546
|
-
disabled: !canEdit,
|
|
3547
|
-
className: "flex items-center gap-2 w-full px-3 py-1.5 text-xs text-foreground hover:bg-muted transition-colors",
|
|
3548
|
-
onClick: () => p.onInsertField("footer"),
|
|
3549
|
-
children: t("pptx.field.footer")
|
|
3550
|
-
}
|
|
3551
|
-
)
|
|
3552
|
-
] })
|
|
3553
|
-
}
|
|
3554
|
-
)
|
|
3555
|
-
]
|
|
3556
|
-
}
|
|
3557
|
-
) }),
|
|
3558
|
-
/* @__PURE__ */ jsx(RibbonGroupScope, { id: "insert.links", children: /* @__PURE__ */ jsx(
|
|
3559
|
-
InsertHyperlinkButton,
|
|
3560
|
-
{
|
|
3561
|
-
hasSelection: p.hasSelection,
|
|
3562
|
-
onOpenHyperlinkDialog: p.onOpenHyperlinkDialog
|
|
3563
|
-
}
|
|
3564
|
-
) }),
|
|
3565
|
-
/* @__PURE__ */ jsx(RibbonGroupScope, { id: "insert.text", children: p.onOpenHeaderFooter && /* @__PURE__ */ jsx(
|
|
3566
|
-
"button",
|
|
3567
|
-
{
|
|
3568
|
-
type: "button",
|
|
3569
|
-
disabled: !canEdit,
|
|
3570
|
-
className: cn(pill, "whitespace-nowrap"),
|
|
3571
|
-
onClick: p.onOpenHeaderFooter,
|
|
3572
|
-
children: t("pptx.headerFooter.title")
|
|
3573
2579
|
}
|
|
3574
|
-
|
|
2580
|
+
};
|
|
2581
|
+
host.addEventListener("insert-request", request);
|
|
2582
|
+
return () => host.removeEventListener("insert-request", request);
|
|
2583
|
+
}, [p]);
|
|
2584
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
2585
|
+
/* @__PURE__ */ jsx("pptx-ui-ribbon-insert", { ref }),
|
|
3575
2586
|
datePickerOpen && p.onInsertField && /* @__PURE__ */ jsx(
|
|
3576
2587
|
DateTimeFieldDialog,
|
|
3577
2588
|
{
|
|
@@ -3871,6 +2882,124 @@ function SlideShowSection(p) {
|
|
|
3871
2882
|
) })
|
|
3872
2883
|
] });
|
|
3873
2884
|
}
|
|
2885
|
+
|
|
2886
|
+
// src/viewer/components/toolbar/text-section-state.ts
|
|
2887
|
+
function getEffectiveTextStyle(element, tableEditorState) {
|
|
2888
|
+
if (!element) {
|
|
2889
|
+
return void 0;
|
|
2890
|
+
}
|
|
2891
|
+
if (hasTextProperties(element)) {
|
|
2892
|
+
return element.textStyle;
|
|
2893
|
+
}
|
|
2894
|
+
if (element.type === "table" && tableEditorState && element.tableData) {
|
|
2895
|
+
const cell = element.tableData.rows[tableEditorState.rowIndex]?.cells[tableEditorState.columnIndex];
|
|
2896
|
+
return cell?.style;
|
|
2897
|
+
}
|
|
2898
|
+
return void 0;
|
|
2899
|
+
}
|
|
2900
|
+
function isTextDecorationFlag(id) {
|
|
2901
|
+
return TEXT_DECORATION_FLAGS.includes(id);
|
|
2902
|
+
}
|
|
2903
|
+
function textSectionFlags(element, tableEditorState, readSelection) {
|
|
2904
|
+
if (element && hasTextProperties(element)) {
|
|
2905
|
+
const result = readSelection ? getInlineEditorSelectionResult(element.textSegments) : null;
|
|
2906
|
+
const current = result?.kind === "supported" && (!result.snapshot || result.snapshot.elementId === element.id) ? result : null;
|
|
2907
|
+
return getSelectionTextStyleFlags(
|
|
2908
|
+
current?.snapshot?.textSegments ?? element.textSegments,
|
|
2909
|
+
current?.selection ?? null,
|
|
2910
|
+
element.textStyle
|
|
2911
|
+
);
|
|
2912
|
+
}
|
|
2913
|
+
return getSelectionTextStyleFlags(
|
|
2914
|
+
void 0,
|
|
2915
|
+
null,
|
|
2916
|
+
getEffectiveTextStyle(element, tableEditorState)
|
|
2917
|
+
);
|
|
2918
|
+
}
|
|
2919
|
+
function textSectionBulletKind(element, tableEditorState) {
|
|
2920
|
+
if (element && hasTextProperties(element)) {
|
|
2921
|
+
const result = getInlineEditorSelectionResult(element.textSegments, { preserveCaret: true });
|
|
2922
|
+
return result.kind === "supported" && (!result.snapshot || result.snapshot.elementId === element.id) ? selectionBulletKind(element, result.selection, result.snapshot?.textSegments) : elementBulletKind(element);
|
|
2923
|
+
}
|
|
2924
|
+
return getEffectiveTextStyle(element, tableEditorState)?.listType ?? "none";
|
|
2925
|
+
}
|
|
2926
|
+
var TEXT_SHADOW_ON = {
|
|
2927
|
+
textShadowColor: "#000000",
|
|
2928
|
+
textShadowBlur: 2,
|
|
2929
|
+
textShadowOffsetX: 1,
|
|
2930
|
+
textShadowOffsetY: 1,
|
|
2931
|
+
textShadowOpacity: 0.5
|
|
2932
|
+
};
|
|
2933
|
+
var TEXT_SHADOW_OFF = {
|
|
2934
|
+
textShadowColor: void 0,
|
|
2935
|
+
textShadowBlur: void 0,
|
|
2936
|
+
textShadowOffsetX: void 0,
|
|
2937
|
+
textShadowOffsetY: void 0
|
|
2938
|
+
};
|
|
2939
|
+
function FontFormatGroup(p) {
|
|
2940
|
+
const { canMut, canFormat, isTextEl, selectedElement, tableEditorState, effectiveTs } = p;
|
|
2941
|
+
const { onUpdateTextStyle } = p;
|
|
2942
|
+
const flags = textSectionFlags(selectedElement, tableEditorState, false);
|
|
2943
|
+
const shadow = Boolean(effectiveTs?.textShadowColor);
|
|
2944
|
+
const controls = useMemo(
|
|
2945
|
+
() => fontHomeControls({
|
|
2946
|
+
enabled: canMut && canFormat,
|
|
2947
|
+
bold: flags.bold === "on",
|
|
2948
|
+
italic: flags.italic === "on",
|
|
2949
|
+
underline: flags.underline === "on",
|
|
2950
|
+
strikethrough: flags.strikethrough === "on",
|
|
2951
|
+
shadow
|
|
2952
|
+
}),
|
|
2953
|
+
[canMut, canFormat, flags.bold, flags.italic, flags.underline, flags.strikethrough, shadow]
|
|
2954
|
+
);
|
|
2955
|
+
const request = useCallback(
|
|
2956
|
+
(id) => {
|
|
2957
|
+
if (!canFormat || !selectedElement) {
|
|
2958
|
+
return;
|
|
2959
|
+
}
|
|
2960
|
+
const flag = id.replace("home.font.", "");
|
|
2961
|
+
if (isTextDecorationFlag(flag)) {
|
|
2962
|
+
const current2 = textSectionFlags(selectedElement, tableEditorState, true);
|
|
2963
|
+
onUpdateTextStyle({ [flag]: nextToggleValue(current2[flag]) });
|
|
2964
|
+
return;
|
|
2965
|
+
}
|
|
2966
|
+
const textual = isTextEl;
|
|
2967
|
+
const current = effectiveTs?.fontSize ?? (textual ? textFontSizePtToPx(18) : 18);
|
|
2968
|
+
const delta = textual ? textFontSizePtToPx(2) : 2;
|
|
2969
|
+
switch (id) {
|
|
2970
|
+
case "home.font.shadow":
|
|
2971
|
+
onUpdateTextStyle(shadow ? TEXT_SHADOW_OFF : TEXT_SHADOW_ON);
|
|
2972
|
+
break;
|
|
2973
|
+
case "home.font.increaseFontSize":
|
|
2974
|
+
onUpdateTextStyle({ fontSize: current + delta });
|
|
2975
|
+
break;
|
|
2976
|
+
case "home.font.decreaseFontSize":
|
|
2977
|
+
onUpdateTextStyle({
|
|
2978
|
+
fontSize: Math.max(textual ? textFontSizePtToPx(1) : 1, current - delta)
|
|
2979
|
+
});
|
|
2980
|
+
break;
|
|
2981
|
+
case "home.font.clearFormatting":
|
|
2982
|
+
onUpdateTextStyle({
|
|
2983
|
+
bold: false,
|
|
2984
|
+
italic: false,
|
|
2985
|
+
underline: false,
|
|
2986
|
+
strikethrough: false,
|
|
2987
|
+
highlightColor: void 0
|
|
2988
|
+
});
|
|
2989
|
+
}
|
|
2990
|
+
},
|
|
2991
|
+
[
|
|
2992
|
+
canFormat,
|
|
2993
|
+
selectedElement,
|
|
2994
|
+
tableEditorState,
|
|
2995
|
+
isTextEl,
|
|
2996
|
+
effectiveTs,
|
|
2997
|
+
shadow,
|
|
2998
|
+
onUpdateTextStyle
|
|
2999
|
+
]
|
|
3000
|
+
);
|
|
3001
|
+
return /* @__PURE__ */ jsx(WebHomeControls, { family: "font", controls, onRequest: request });
|
|
3002
|
+
}
|
|
3874
3003
|
var LINE_SPACING_OPTIONS = [
|
|
3875
3004
|
{ label: "1.0", value: 1 },
|
|
3876
3005
|
{ label: "1.15", value: 1.15 },
|
|
@@ -4031,12 +3160,6 @@ function ColumnsDropdown(p) {
|
|
|
4031
3160
|
] });
|
|
4032
3161
|
}
|
|
4033
3162
|
var ON = "bg-primary/20 ring-1 ring-primary";
|
|
4034
|
-
var ALIGN_CONTROL = {
|
|
4035
|
-
left: "home.paragraph.alignLeft",
|
|
4036
|
-
center: "home.paragraph.alignCenter",
|
|
4037
|
-
right: "home.paragraph.alignRight",
|
|
4038
|
-
justify: "home.paragraph.justify"
|
|
4039
|
-
};
|
|
4040
3163
|
function fixedGallery(control) {
|
|
4041
3164
|
return FIXED_TAB_GALLERIES.find((placement) => placement.control === control);
|
|
4042
3165
|
}
|
|
@@ -4044,14 +3167,27 @@ var BULLETS_GALLERY = fixedGallery("home.paragraph.bullets");
|
|
|
4044
3167
|
var NUMBERING_GALLERY = fixedGallery("home.paragraph.numbering");
|
|
4045
3168
|
function ParagraphGroup(p) {
|
|
4046
3169
|
const { t } = useTranslation();
|
|
4047
|
-
const { canMut, canFormat } = p;
|
|
4048
|
-
const
|
|
4049
|
-
|
|
4050
|
-
|
|
4051
|
-
|
|
4052
|
-
|
|
4053
|
-
|
|
4054
|
-
|
|
3170
|
+
const { canMut, canFormat, effectiveTs, onUpdateTextStyle } = p;
|
|
3171
|
+
const align = paragraphHomeAlign(effectiveTs?.align);
|
|
3172
|
+
const paragraphControls = useMemo(
|
|
3173
|
+
() => paragraphHomeControls({ enabled: canMut && canFormat, align }),
|
|
3174
|
+
[canMut, canFormat, align]
|
|
3175
|
+
);
|
|
3176
|
+
const requestParagraph = useCallback(
|
|
3177
|
+
(id) => {
|
|
3178
|
+
const action = paragraphHomeAction(id);
|
|
3179
|
+
if (!canFormat || !action) {
|
|
3180
|
+
return;
|
|
3181
|
+
}
|
|
3182
|
+
if (action.kind === "indent") {
|
|
3183
|
+
const current = effectiveTs?.paragraphMarginLeft ?? 0;
|
|
3184
|
+
onUpdateTextStyle({ paragraphMarginLeft: Math.max(0, current + action.delta) });
|
|
3185
|
+
} else {
|
|
3186
|
+
onUpdateTextStyle({ align: action.align });
|
|
3187
|
+
}
|
|
3188
|
+
},
|
|
3189
|
+
[canFormat, effectiveTs, onUpdateTextStyle]
|
|
3190
|
+
);
|
|
4055
3191
|
const listToggle = (kind, placement, title, icon) => /* @__PURE__ */ jsxs("div", { className: grp, ...controlAttr(placement?.control), children: [
|
|
4056
3192
|
/* @__PURE__ */ jsx(
|
|
4057
3193
|
"button",
|
|
@@ -4082,52 +3218,14 @@ function ParagraphGroup(p) {
|
|
|
4082
3218
|
t("pptx.text.numberedList"),
|
|
4083
3219
|
/* @__PURE__ */ jsx(LuListOrdered, { className: ic })
|
|
4084
3220
|
),
|
|
4085
|
-
/* @__PURE__ */
|
|
4086
|
-
|
|
4087
|
-
"button",
|
|
4088
|
-
{
|
|
4089
|
-
type: "button",
|
|
4090
|
-
disabled: !canMut,
|
|
4091
|
-
onMouseDown: (e) => e.preventDefault(),
|
|
4092
|
-
onClick: () => indent(-24),
|
|
4093
|
-
className: gB,
|
|
4094
|
-
title: t("pptx.text.decreaseIndent"),
|
|
4095
|
-
...controlAttr("home.paragraph.decreaseIndent"),
|
|
4096
|
-
children: /* @__PURE__ */ jsx(LuIndentDecrease, { className: ic })
|
|
4097
|
-
}
|
|
4098
|
-
),
|
|
4099
|
-
/* @__PURE__ */ jsx(
|
|
4100
|
-
"button",
|
|
4101
|
-
{
|
|
4102
|
-
type: "button",
|
|
4103
|
-
disabled: !canMut,
|
|
4104
|
-
onMouseDown: (e) => e.preventDefault(),
|
|
4105
|
-
onClick: () => indent(24),
|
|
4106
|
-
className: gL,
|
|
4107
|
-
title: t("pptx.text.increaseIndent"),
|
|
4108
|
-
...controlAttr("home.paragraph.increaseIndent"),
|
|
4109
|
-
children: /* @__PURE__ */ jsx(LuIndentIncrease, { className: ic })
|
|
4110
|
-
}
|
|
4111
|
-
)
|
|
4112
|
-
] }),
|
|
4113
|
-
/* @__PURE__ */ jsx("div", { className: grp, children: ATXT.map((b, i, a) => /* @__PURE__ */ jsx(
|
|
4114
|
-
"button",
|
|
3221
|
+
/* @__PURE__ */ jsx(
|
|
3222
|
+
WebHomeControls,
|
|
4115
3223
|
{
|
|
4116
|
-
|
|
4117
|
-
|
|
4118
|
-
|
|
4119
|
-
|
|
4120
|
-
|
|
4121
|
-
p.onUpdateTextStyle({ align: b.id });
|
|
4122
|
-
}
|
|
4123
|
-
},
|
|
4124
|
-
className: i < a.length - 1 ? gB : gL,
|
|
4125
|
-
title: t(b.labelKey),
|
|
4126
|
-
...controlAttr(ALIGN_CONTROL[b.id]),
|
|
4127
|
-
children: b.i
|
|
4128
|
-
},
|
|
4129
|
-
b.id
|
|
4130
|
-
)) }),
|
|
3224
|
+
family: "paragraph",
|
|
3225
|
+
controls: paragraphControls,
|
|
3226
|
+
onRequest: requestParagraph
|
|
3227
|
+
}
|
|
3228
|
+
),
|
|
4131
3229
|
/* @__PURE__ */ jsx(
|
|
4132
3230
|
LineSpacingDropdown,
|
|
4133
3231
|
{
|
|
@@ -4157,47 +3255,6 @@ function ParagraphGroup(p) {
|
|
|
4157
3255
|
/* @__PURE__ */ jsx("span", { className: "text-[9px] text-muted-foreground leading-none", children: t("pptx.ribbon.paragraph") })
|
|
4158
3256
|
] });
|
|
4159
3257
|
}
|
|
4160
|
-
|
|
4161
|
-
// src/viewer/components/toolbar/text-section-state.ts
|
|
4162
|
-
function getEffectiveTextStyle(element, tableEditorState) {
|
|
4163
|
-
if (!element) {
|
|
4164
|
-
return void 0;
|
|
4165
|
-
}
|
|
4166
|
-
if (hasTextProperties(element)) {
|
|
4167
|
-
return element.textStyle;
|
|
4168
|
-
}
|
|
4169
|
-
if (element.type === "table" && tableEditorState && element.tableData) {
|
|
4170
|
-
const cell = element.tableData.rows[tableEditorState.rowIndex]?.cells[tableEditorState.columnIndex];
|
|
4171
|
-
return cell?.style;
|
|
4172
|
-
}
|
|
4173
|
-
return void 0;
|
|
4174
|
-
}
|
|
4175
|
-
function isTextDecorationFlag(id) {
|
|
4176
|
-
return TEXT_DECORATION_FLAGS.includes(id);
|
|
4177
|
-
}
|
|
4178
|
-
function textSectionFlags(element, tableEditorState, readSelection) {
|
|
4179
|
-
if (element && hasTextProperties(element)) {
|
|
4180
|
-
const result = readSelection ? getInlineEditorSelectionResult(element.textSegments) : null;
|
|
4181
|
-
const current = result?.kind === "supported" && (!result.snapshot || result.snapshot.elementId === element.id) ? result : null;
|
|
4182
|
-
return getSelectionTextStyleFlags(
|
|
4183
|
-
current?.snapshot?.textSegments ?? element.textSegments,
|
|
4184
|
-
current?.selection ?? null,
|
|
4185
|
-
element.textStyle
|
|
4186
|
-
);
|
|
4187
|
-
}
|
|
4188
|
-
return getSelectionTextStyleFlags(
|
|
4189
|
-
void 0,
|
|
4190
|
-
null,
|
|
4191
|
-
getEffectiveTextStyle(element, tableEditorState)
|
|
4192
|
-
);
|
|
4193
|
-
}
|
|
4194
|
-
function textSectionBulletKind(element, tableEditorState) {
|
|
4195
|
-
if (element && hasTextProperties(element)) {
|
|
4196
|
-
const result = getInlineEditorSelectionResult(element.textSegments, { preserveCaret: true });
|
|
4197
|
-
return result.kind === "supported" && (!result.snapshot || result.snapshot.elementId === element.id) ? selectionBulletKind(element, result.selection, result.snapshot?.textSegments) : elementBulletKind(element);
|
|
4198
|
-
}
|
|
4199
|
-
return getEffectiveTextStyle(element, tableEditorState)?.listType ?? "none";
|
|
4200
|
-
}
|
|
4201
3258
|
function RecentColorsRow({
|
|
4202
3259
|
prefix,
|
|
4203
3260
|
disabled,
|
|
@@ -4595,13 +3652,6 @@ function useParagraphListKind(element) {
|
|
|
4595
3652
|
const readServer = useCallback(() => element ? elementBulletKind(element) : "none", [element]);
|
|
4596
3653
|
return useSyncExternalStore(subscribe, read, readServer);
|
|
4597
3654
|
}
|
|
4598
|
-
var ON2 = "bg-primary/20 ring-1 ring-primary";
|
|
4599
|
-
var FONT_TOGGLE_CONTROL = {
|
|
4600
|
-
bold: "home.font.bold",
|
|
4601
|
-
italic: "home.font.italic",
|
|
4602
|
-
underline: "home.font.underline",
|
|
4603
|
-
strikethrough: "home.font.strikethrough"
|
|
4604
|
-
};
|
|
4605
3655
|
function TextSection(p) {
|
|
4606
3656
|
const { t } = useTranslation();
|
|
4607
3657
|
const hasSel = Boolean(p.selectedElement);
|
|
@@ -4610,7 +3660,6 @@ function TextSection(p) {
|
|
|
4610
3660
|
const isTable = hasSel && p.selectedElement?.type === "table";
|
|
4611
3661
|
const canFormat = isTextEl || isTable;
|
|
4612
3662
|
const effectiveTs = getEffectiveTextStyle(p.selectedElement, p.tableEditorState);
|
|
4613
|
-
const pressedFlags = textSectionFlags(p.selectedElement, p.tableEditorState, false);
|
|
4614
3663
|
const selectedListKind = useParagraphListKind(p.selectedElement);
|
|
4615
3664
|
const bulletKind = isTextEl ? selectedListKind : textSectionBulletKind(p.selectedElement, p.tableEditorState);
|
|
4616
3665
|
const toggleBullets = (kind) => {
|
|
@@ -4650,158 +3699,18 @@ function TextSection(p) {
|
|
|
4650
3699
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
4651
3700
|
/* @__PURE__ */ jsxs("div", { className: "flex flex-col items-center gap-0.5", ...groupAttr("home.font"), children: [
|
|
4652
3701
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1", "data-pptx-chrome": "font-controls", children: [
|
|
4653
|
-
/* @__PURE__ */ jsx("div", { className: grp, "data-pptx-chrome": "control-cluster", children: FMT.map((b, i, a) => {
|
|
4654
|
-
const flag = isTextDecorationFlag(b.id) ? b.id : void 0;
|
|
4655
|
-
const handleClick = () => {
|
|
4656
|
-
if (!canFormat || !p.selectedElement || !flag) {
|
|
4657
|
-
return;
|
|
4658
|
-
}
|
|
4659
|
-
const flags = textSectionFlags(p.selectedElement, p.tableEditorState, true);
|
|
4660
|
-
p.onUpdateTextStyle({ [flag]: nextToggleValue(flags[flag]) });
|
|
4661
|
-
};
|
|
4662
|
-
const pressed = flag !== void 0 && pressedFlags[flag] === "on";
|
|
4663
|
-
return /* @__PURE__ */ jsx(
|
|
4664
|
-
"button",
|
|
4665
|
-
{
|
|
4666
|
-
type: "button",
|
|
4667
|
-
disabled: !canMut,
|
|
4668
|
-
"aria-pressed": pressed,
|
|
4669
|
-
onMouseDown: (e) => e.preventDefault(),
|
|
4670
|
-
onClick: handleClick,
|
|
4671
|
-
className: `${i < a.length - 1 ? gB : gL}${pressed ? ` ${ON2}` : ""}`,
|
|
4672
|
-
title: t(b.labelKey),
|
|
4673
|
-
...controlAttr(FONT_TOGGLE_CONTROL[b.id]),
|
|
4674
|
-
children: b.i
|
|
4675
|
-
},
|
|
4676
|
-
b.id
|
|
4677
|
-
);
|
|
4678
|
-
}) }),
|
|
4679
3702
|
/* @__PURE__ */ jsx(
|
|
4680
|
-
|
|
3703
|
+
FontFormatGroup,
|
|
4681
3704
|
{
|
|
4682
|
-
|
|
4683
|
-
|
|
4684
|
-
|
|
4685
|
-
|
|
4686
|
-
|
|
4687
|
-
|
|
4688
|
-
|
|
4689
|
-
const hasShadow = Boolean(effectiveTs?.textShadowColor);
|
|
4690
|
-
p.onUpdateTextStyle(
|
|
4691
|
-
hasShadow ? {
|
|
4692
|
-
textShadowColor: void 0,
|
|
4693
|
-
textShadowBlur: void 0,
|
|
4694
|
-
textShadowOffsetX: void 0,
|
|
4695
|
-
textShadowOffsetY: void 0
|
|
4696
|
-
} : {
|
|
4697
|
-
textShadowColor: "#000000",
|
|
4698
|
-
textShadowBlur: 2,
|
|
4699
|
-
textShadowOffsetX: 1,
|
|
4700
|
-
textShadowOffsetY: 1,
|
|
4701
|
-
textShadowOpacity: 0.5
|
|
4702
|
-
}
|
|
4703
|
-
);
|
|
4704
|
-
},
|
|
4705
|
-
className: pill,
|
|
4706
|
-
title: t("pptx.textEffects.shadow"),
|
|
4707
|
-
"aria-label": t("pptx.textEffects.shadow"),
|
|
4708
|
-
...controlAttr("home.font.shadow"),
|
|
4709
|
-
children: /* @__PURE__ */ jsxs(
|
|
4710
|
-
"svg",
|
|
4711
|
-
{
|
|
4712
|
-
className: ic,
|
|
4713
|
-
viewBox: "0 0 24 24",
|
|
4714
|
-
fill: "none",
|
|
4715
|
-
stroke: "currentColor",
|
|
4716
|
-
strokeWidth: "2",
|
|
4717
|
-
children: [
|
|
4718
|
-
/* @__PURE__ */ jsx("text", { x: "6", y: "17", fontSize: "16", fontWeight: "bold", fill: "currentColor", stroke: "none", children: "S" }),
|
|
4719
|
-
/* @__PURE__ */ jsx(
|
|
4720
|
-
"text",
|
|
4721
|
-
{
|
|
4722
|
-
x: "7.5",
|
|
4723
|
-
y: "18.5",
|
|
4724
|
-
fontSize: "16",
|
|
4725
|
-
fontWeight: "bold",
|
|
4726
|
-
fill: "none",
|
|
4727
|
-
stroke: "currentColor",
|
|
4728
|
-
strokeWidth: "0.5",
|
|
4729
|
-
opacity: "0.4",
|
|
4730
|
-
children: "S"
|
|
4731
|
-
}
|
|
4732
|
-
)
|
|
4733
|
-
]
|
|
4734
|
-
}
|
|
4735
|
-
)
|
|
3705
|
+
canMut,
|
|
3706
|
+
canFormat,
|
|
3707
|
+
isTextEl,
|
|
3708
|
+
selectedElement: p.selectedElement,
|
|
3709
|
+
tableEditorState: p.tableEditorState,
|
|
3710
|
+
effectiveTs,
|
|
3711
|
+
onUpdateTextStyle: p.onUpdateTextStyle
|
|
4736
3712
|
}
|
|
4737
3713
|
),
|
|
4738
|
-
/* @__PURE__ */ jsxs("div", { className: grp, "data-pptx-chrome": "control-cluster", children: [
|
|
4739
|
-
/* @__PURE__ */ jsx(
|
|
4740
|
-
"button",
|
|
4741
|
-
{
|
|
4742
|
-
type: "button",
|
|
4743
|
-
disabled: !canMut,
|
|
4744
|
-
onMouseDown: (e) => e.preventDefault(),
|
|
4745
|
-
onClick: () => {
|
|
4746
|
-
if (!canFormat || !p.selectedElement) {
|
|
4747
|
-
return;
|
|
4748
|
-
}
|
|
4749
|
-
const current = effectiveTs?.fontSize ?? (isTextEl ? textFontSizePtToPx(18) : 18);
|
|
4750
|
-
const delta = isTextEl ? textFontSizePtToPx(2) : 2;
|
|
4751
|
-
p.onUpdateTextStyle({ fontSize: current + delta });
|
|
4752
|
-
},
|
|
4753
|
-
className: gB,
|
|
4754
|
-
title: t("pptx.text.increaseFontSize"),
|
|
4755
|
-
...controlAttr("home.font.increaseFontSize"),
|
|
4756
|
-
children: /* @__PURE__ */ jsx(LuAArrowUp, { className: ic })
|
|
4757
|
-
}
|
|
4758
|
-
),
|
|
4759
|
-
/* @__PURE__ */ jsx(
|
|
4760
|
-
"button",
|
|
4761
|
-
{
|
|
4762
|
-
type: "button",
|
|
4763
|
-
disabled: !canMut,
|
|
4764
|
-
onMouseDown: (e) => e.preventDefault(),
|
|
4765
|
-
onClick: () => {
|
|
4766
|
-
if (!canFormat || !p.selectedElement) {
|
|
4767
|
-
return;
|
|
4768
|
-
}
|
|
4769
|
-
const current = effectiveTs?.fontSize ?? (isTextEl ? textFontSizePtToPx(18) : 18);
|
|
4770
|
-
const delta = isTextEl ? textFontSizePtToPx(2) : 2;
|
|
4771
|
-
const minimum = isTextEl ? textFontSizePtToPx(1) : 1;
|
|
4772
|
-
p.onUpdateTextStyle({ fontSize: Math.max(minimum, current - delta) });
|
|
4773
|
-
},
|
|
4774
|
-
className: gB,
|
|
4775
|
-
title: t("pptx.text.decreaseFontSize"),
|
|
4776
|
-
...controlAttr("home.font.decreaseFontSize"),
|
|
4777
|
-
children: /* @__PURE__ */ jsx(LuAArrowDown, { className: ic })
|
|
4778
|
-
}
|
|
4779
|
-
),
|
|
4780
|
-
/* @__PURE__ */ jsx(
|
|
4781
|
-
"button",
|
|
4782
|
-
{
|
|
4783
|
-
type: "button",
|
|
4784
|
-
disabled: !canMut,
|
|
4785
|
-
onMouseDown: (e) => e.preventDefault(),
|
|
4786
|
-
onClick: () => {
|
|
4787
|
-
if (!canFormat) {
|
|
4788
|
-
return;
|
|
4789
|
-
}
|
|
4790
|
-
p.onUpdateTextStyle({
|
|
4791
|
-
bold: false,
|
|
4792
|
-
italic: false,
|
|
4793
|
-
underline: false,
|
|
4794
|
-
strikethrough: false,
|
|
4795
|
-
highlightColor: void 0
|
|
4796
|
-
});
|
|
4797
|
-
},
|
|
4798
|
-
className: gL,
|
|
4799
|
-
title: t("pptx.text.clearFormatting"),
|
|
4800
|
-
...controlAttr("home.font.clearFormatting"),
|
|
4801
|
-
children: /* @__PURE__ */ jsx(LuRemoveFormatting, { className: ic })
|
|
4802
|
-
}
|
|
4803
|
-
)
|
|
4804
|
-
] }),
|
|
4805
3714
|
/* @__PURE__ */ jsx(
|
|
4806
3715
|
TextSpacingCaseMenus,
|
|
4807
3716
|
{
|
|
@@ -4842,228 +3751,62 @@ function TextSection(p) {
|
|
|
4842
3751
|
}
|
|
4843
3752
|
function ViewSection(p) {
|
|
4844
3753
|
const { t } = useTranslation();
|
|
4845
|
-
|
|
4846
|
-
|
|
4847
|
-
|
|
4848
|
-
|
|
4849
|
-
|
|
4850
|
-
|
|
4851
|
-
|
|
4852
|
-
|
|
4853
|
-
|
|
4854
|
-
|
|
4855
|
-
|
|
4856
|
-
|
|
4857
|
-
|
|
4858
|
-
|
|
4859
|
-
|
|
4860
|
-
|
|
4861
|
-
|
|
4862
|
-
|
|
4863
|
-
|
|
4864
|
-
|
|
4865
|
-
|
|
4866
|
-
|
|
4867
|
-
|
|
4868
|
-
|
|
4869
|
-
|
|
4870
|
-
|
|
4871
|
-
|
|
4872
|
-
|
|
4873
|
-
|
|
4874
|
-
|
|
4875
|
-
|
|
4876
|
-
|
|
4877
|
-
|
|
4878
|
-
|
|
4879
|
-
|
|
4880
|
-
|
|
4881
|
-
|
|
4882
|
-
|
|
4883
|
-
|
|
4884
|
-
|
|
4885
|
-
|
|
4886
|
-
|
|
4887
|
-
|
|
4888
|
-
|
|
4889
|
-
|
|
4890
|
-
|
|
4891
|
-
|
|
4892
|
-
|
|
4893
|
-
|
|
4894
|
-
|
|
4895
|
-
|
|
4896
|
-
|
|
4897
|
-
|
|
4898
|
-
|
|
4899
|
-
|
|
4900
|
-
|
|
4901
|
-
RibbonCommand,
|
|
4902
|
-
{
|
|
4903
|
-
controlId: "view.masterViews.handoutMaster",
|
|
4904
|
-
label: t("pptx.master.handoutMasterTitle", { defaultValue: "Handout Master" }),
|
|
4905
|
-
icon: /* @__PURE__ */ jsx(LuGrid3X3, {}),
|
|
4906
|
-
disabled: true
|
|
4907
|
-
}
|
|
4908
|
-
),
|
|
4909
|
-
/* @__PURE__ */ jsx(
|
|
4910
|
-
RibbonCommand,
|
|
4911
|
-
{
|
|
4912
|
-
controlId: "view.masterViews.notesMaster",
|
|
4913
|
-
label: t("pptx.master.notesMasterTitle", { defaultValue: "Notes Master" }),
|
|
4914
|
-
icon: /* @__PURE__ */ jsx(LuStickyNote, {}),
|
|
4915
|
-
disabled: true
|
|
4916
|
-
}
|
|
4917
|
-
)
|
|
4918
|
-
] }),
|
|
4919
|
-
/* @__PURE__ */ jsxs(RibbonGroup, { label: t("pptx.view.show", { defaultValue: "Show" }), groupId: "view.show", children: [
|
|
4920
|
-
/* @__PURE__ */ jsxs(RibbonCommandStack, { children: [
|
|
4921
|
-
/* @__PURE__ */ jsx(
|
|
4922
|
-
RibbonToggle,
|
|
4923
|
-
{
|
|
4924
|
-
controlId: "view.show.ruler",
|
|
4925
|
-
label: t("pptx.ruler.rulers"),
|
|
4926
|
-
checked: p.showRulers,
|
|
4927
|
-
onChange: p.onSetShowRulers
|
|
4928
|
-
}
|
|
4929
|
-
),
|
|
4930
|
-
/* @__PURE__ */ jsx(
|
|
4931
|
-
RibbonToggle,
|
|
4932
|
-
{
|
|
4933
|
-
controlId: "view.show.gridlines",
|
|
4934
|
-
label: t("pptx.grid.grid"),
|
|
4935
|
-
checked: p.showGrid,
|
|
4936
|
-
onChange: p.onSetShowGrid,
|
|
4937
|
-
title: t("pptx.grid.toggleGrid")
|
|
4938
|
-
}
|
|
4939
|
-
),
|
|
4940
|
-
/* @__PURE__ */ jsx(
|
|
4941
|
-
RibbonToggle,
|
|
4942
|
-
{
|
|
4943
|
-
controlId: "view.show.guides",
|
|
4944
|
-
label: t("pptx.view.guides", { defaultValue: "Guides" }),
|
|
4945
|
-
checked: p.showGuides,
|
|
4946
|
-
onChange: p.onSetShowGuides,
|
|
4947
|
-
title: t("pptx.ribbon.toggleGuides")
|
|
4948
|
-
}
|
|
4949
|
-
),
|
|
4950
|
-
/* @__PURE__ */ jsx(
|
|
4951
|
-
RibbonToggle,
|
|
4952
|
-
{
|
|
4953
|
-
controlId: "view.show.snapToGrid",
|
|
4954
|
-
label: t("pptx.settings.snapToGrid"),
|
|
4955
|
-
checked: p.snapToGrid,
|
|
4956
|
-
onChange: p.onSetSnapToGrid
|
|
4957
|
-
}
|
|
4958
|
-
)
|
|
4959
|
-
] }),
|
|
4960
|
-
/* @__PURE__ */ jsxs(RibbonCommandStack, { children: [
|
|
4961
|
-
/* @__PURE__ */ jsx(
|
|
4962
|
-
RibbonCommand,
|
|
4963
|
-
{
|
|
4964
|
-
compact: true,
|
|
4965
|
-
controlId: "view.show.selectionPane",
|
|
4966
|
-
label: t("pptx.view.selection"),
|
|
4967
|
-
icon: /* @__PURE__ */ jsx(LuList, {}),
|
|
4968
|
-
onClick: p.onToggleSelectionPane,
|
|
4969
|
-
active: p.isSelectionPaneOpen,
|
|
4970
|
-
title: t("pptx.selectionPane.title")
|
|
4971
|
-
}
|
|
4972
|
-
),
|
|
4973
|
-
/* @__PURE__ */ jsx(
|
|
4974
|
-
RibbonCommand,
|
|
4975
|
-
{
|
|
4976
|
-
compact: true,
|
|
4977
|
-
controlId: "view.show.eyedropper",
|
|
4978
|
-
label: t("pptx.ribbon.eyedropper"),
|
|
4979
|
-
icon: /* @__PURE__ */ jsx(LuPipette, {}),
|
|
4980
|
-
onClick: p.onToggleEyedropper,
|
|
4981
|
-
active: p.eyedropperActive,
|
|
4982
|
-
disabled: !p.canEdit
|
|
4983
|
-
}
|
|
4984
|
-
),
|
|
4985
|
-
/* @__PURE__ */ jsx(
|
|
4986
|
-
RibbonCommand,
|
|
4987
|
-
{
|
|
4988
|
-
compact: true,
|
|
4989
|
-
controlId: "view.show.snapToShape",
|
|
4990
|
-
label: t("pptx.view.snapToShape"),
|
|
4991
|
-
icon: /* @__PURE__ */ jsx(LuGrid3X3, {}),
|
|
4992
|
-
onClick: () => p.onSetSnapToShape(!p.snapToShape),
|
|
4993
|
-
active: p.snapToShape,
|
|
4994
|
-
title: t("pptx.view.snapToShape")
|
|
4995
|
-
}
|
|
4996
|
-
),
|
|
4997
|
-
/* @__PURE__ */ jsx(
|
|
4998
|
-
RibbonCommand,
|
|
4999
|
-
{
|
|
5000
|
-
compact: true,
|
|
5001
|
-
controlId: "view.show.addGuide",
|
|
5002
|
-
label: t("pptx.view.hGuide"),
|
|
5003
|
-
icon: /* @__PURE__ */ jsx(LuRuler, {}),
|
|
5004
|
-
onClick: () => p.onAddGuide("h"),
|
|
5005
|
-
title: t("pptx.view.addHorizontalGuide")
|
|
5006
|
-
}
|
|
5007
|
-
),
|
|
5008
|
-
/* @__PURE__ */ jsx(
|
|
5009
|
-
RibbonCommand,
|
|
5010
|
-
{
|
|
5011
|
-
compact: true,
|
|
5012
|
-
controlId: "view.show.addGuide",
|
|
5013
|
-
label: t("pptx.view.vGuide"),
|
|
5014
|
-
icon: /* @__PURE__ */ jsx(LuRuler, {}),
|
|
5015
|
-
onClick: () => p.onAddGuide("v"),
|
|
5016
|
-
title: t("pptx.view.addVerticalGuide")
|
|
5017
|
-
}
|
|
5018
|
-
)
|
|
5019
|
-
] })
|
|
5020
|
-
] }),
|
|
5021
|
-
/* @__PURE__ */ jsxs(RibbonGroup, { label: t("pptx.slideSorter.zoom"), groupId: "view.zoom", children: [
|
|
5022
|
-
/* @__PURE__ */ jsx(
|
|
5023
|
-
RibbonCommand,
|
|
5024
|
-
{
|
|
5025
|
-
controlId: "view.zoom.zoom",
|
|
5026
|
-
label: t("pptx.slideSorter.zoom"),
|
|
5027
|
-
icon: /* @__PURE__ */ jsx(LuZoomIn, {}),
|
|
5028
|
-
disabled: true
|
|
5029
|
-
}
|
|
5030
|
-
),
|
|
5031
|
-
/* @__PURE__ */ jsx(
|
|
5032
|
-
RibbonCommand,
|
|
5033
|
-
{
|
|
5034
|
-
controlId: "view.zoom.fitToWindow",
|
|
5035
|
-
label: t("pptx.view.zoomToFit"),
|
|
5036
|
-
icon: /* @__PURE__ */ jsx(LuMaximize2, {}),
|
|
5037
|
-
onClick: p.onZoomToFit
|
|
5038
|
-
}
|
|
5039
|
-
)
|
|
5040
|
-
] }),
|
|
5041
|
-
/* @__PURE__ */ jsxs(RibbonGroup, { label: t("pptx.view.window", { defaultValue: "Window" }), groupId: "view.window", children: [
|
|
5042
|
-
/* @__PURE__ */ jsx(
|
|
5043
|
-
RibbonCommand,
|
|
5044
|
-
{
|
|
5045
|
-
controlId: "view.window.templateEditing",
|
|
5046
|
-
label: t(p.editTemplateMode ? "pptx.ribbon.templatesOn" : "pptx.ribbon.templatesOff"),
|
|
5047
|
-
icon: /* @__PURE__ */ jsx(LuRuler, {}),
|
|
5048
|
-
onClick: () => p.onSetEditTemplateMode(!p.editTemplateMode),
|
|
5049
|
-
active: p.editTemplateMode,
|
|
5050
|
-
disabled: !p.canEdit,
|
|
5051
|
-
title: t("pptx.view.templateEditingTooltip", {
|
|
5052
|
-
defaultValue: "Toggle template/master element editing"
|
|
5053
|
-
})
|
|
5054
|
-
}
|
|
5055
|
-
),
|
|
5056
|
-
/* @__PURE__ */ jsx(
|
|
5057
|
-
RibbonCommand,
|
|
5058
|
-
{
|
|
5059
|
-
controlId: "view.window.macros",
|
|
5060
|
-
label: t("pptx.view.macros", { defaultValue: "Macros" }),
|
|
5061
|
-
icon: /* @__PURE__ */ jsx(LuCode, {}),
|
|
5062
|
-
disabled: true
|
|
5063
|
-
}
|
|
5064
|
-
)
|
|
5065
|
-
] })
|
|
5066
|
-
] });
|
|
3754
|
+
const ref = useRef(null);
|
|
3755
|
+
useEffect(() => {
|
|
3756
|
+
const host = ref.current;
|
|
3757
|
+
if (!host) {
|
|
3758
|
+
return;
|
|
3759
|
+
}
|
|
3760
|
+
host.state = {
|
|
3761
|
+
editable: p.canEdit,
|
|
3762
|
+
showRulers: p.showRulers,
|
|
3763
|
+
showGrid: p.showGrid,
|
|
3764
|
+
showGuides: p.showGuides,
|
|
3765
|
+
snapToGrid: p.snapToGrid,
|
|
3766
|
+
snapToShape: p.snapToShape,
|
|
3767
|
+
templateEditing: p.editTemplateMode,
|
|
3768
|
+
selectionPaneOpen: p.isSelectionPaneOpen,
|
|
3769
|
+
eyedropperActive: p.eyedropperActive,
|
|
3770
|
+
translate: t
|
|
3771
|
+
};
|
|
3772
|
+
}, [p, t]);
|
|
3773
|
+
useEffect(() => {
|
|
3774
|
+
const host = ref.current;
|
|
3775
|
+
if (!host) {
|
|
3776
|
+
return;
|
|
3777
|
+
}
|
|
3778
|
+
const request = (event) => {
|
|
3779
|
+
const intent = event.detail;
|
|
3780
|
+
if (intent.kind === "guide") {
|
|
3781
|
+
p.onAddGuide(intent.axis);
|
|
3782
|
+
} else if (intent.kind === "option") {
|
|
3783
|
+
const setters = {
|
|
3784
|
+
showRulers: p.onSetShowRulers,
|
|
3785
|
+
showGrid: p.onSetShowGrid,
|
|
3786
|
+
showGuides: p.onSetShowGuides,
|
|
3787
|
+
snapToGrid: p.onSetSnapToGrid,
|
|
3788
|
+
snapToShape: p.onSetSnapToShape,
|
|
3789
|
+
templateEditing: p.onSetEditTemplateMode
|
|
3790
|
+
};
|
|
3791
|
+
setters[intent.value](intent.enabled);
|
|
3792
|
+
} else {
|
|
3793
|
+
const commands = {
|
|
3794
|
+
normal: p.onGoToNormalView,
|
|
3795
|
+
slideSorter: p.onToggleSlideSorter,
|
|
3796
|
+
outline: p.onOpenOutlineView,
|
|
3797
|
+
readingView: p.onOpenReadingView,
|
|
3798
|
+
slideMaster: p.onEnterMasterView,
|
|
3799
|
+
selectionPane: p.onToggleSelectionPane,
|
|
3800
|
+
eyedropper: p.onToggleEyedropper,
|
|
3801
|
+
zoomToFit: p.onZoomToFit
|
|
3802
|
+
};
|
|
3803
|
+
commands[intent.value]?.();
|
|
3804
|
+
}
|
|
3805
|
+
};
|
|
3806
|
+
host.addEventListener("view-request", request);
|
|
3807
|
+
return () => host.removeEventListener("view-request", request);
|
|
3808
|
+
}, [p]);
|
|
3809
|
+
return /* @__PURE__ */ jsx("pptx-ui-ribbon-view", { ref });
|
|
5067
3810
|
}
|
|
5068
3811
|
function MobileSheet({
|
|
5069
3812
|
open,
|
|
@@ -5260,6 +4003,7 @@ function MobileSectionBody({
|
|
|
5260
4003
|
return /* @__PURE__ */ jsx("div", { className: wrap, children: /* @__PURE__ */ jsx(
|
|
5261
4004
|
DrawSection,
|
|
5262
4005
|
{
|
|
4006
|
+
canEdit: p.canEdit,
|
|
5263
4007
|
activeTool: p.activeTool,
|
|
5264
4008
|
drawingColor: p.drawingColor,
|
|
5265
4009
|
drawingWidth: p.drawingWidth,
|
|
@@ -5794,6 +4538,7 @@ function DrawingGroup(p) {
|
|
|
5794
4538
|
sep
|
|
5795
4539
|
] });
|
|
5796
4540
|
}
|
|
4541
|
+
var editingControls = editingHomeControls();
|
|
5797
4542
|
function EditingSection(p) {
|
|
5798
4543
|
const { t } = useTranslation();
|
|
5799
4544
|
const [selectMenuOpen, setSelectMenuOpen] = useState(false);
|
|
@@ -5814,32 +4559,14 @@ function EditingSection(p) {
|
|
|
5814
4559
|
sep,
|
|
5815
4560
|
/* @__PURE__ */ jsxs("div", { className: "flex flex-col items-center gap-0.5", ...groupAttr("home.editing"), children: [
|
|
5816
4561
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1", children: [
|
|
5817
|
-
/* @__PURE__ */
|
|
5818
|
-
|
|
5819
|
-
|
|
5820
|
-
|
|
5821
|
-
|
|
5822
|
-
|
|
5823
|
-
|
|
5824
|
-
|
|
5825
|
-
title: t("pptx.editing.find"),
|
|
5826
|
-
...controlAttr("home.editing.find"),
|
|
5827
|
-
children: /* @__PURE__ */ jsx(LuSearch, { className: ic })
|
|
5828
|
-
}
|
|
5829
|
-
),
|
|
5830
|
-
/* @__PURE__ */ jsx(
|
|
5831
|
-
"button",
|
|
5832
|
-
{
|
|
5833
|
-
type: "button",
|
|
5834
|
-
onMouseDown: (e) => e.preventDefault(),
|
|
5835
|
-
onClick: p.onToggleFindReplace,
|
|
5836
|
-
className: gL,
|
|
5837
|
-
title: t("pptx.ribbon.replace"),
|
|
5838
|
-
...controlAttr("home.editing.replace"),
|
|
5839
|
-
children: /* @__PURE__ */ jsx(LuReplace, { className: ic })
|
|
5840
|
-
}
|
|
5841
|
-
)
|
|
5842
|
-
] }),
|
|
4562
|
+
/* @__PURE__ */ jsx(
|
|
4563
|
+
WebHomeControls,
|
|
4564
|
+
{
|
|
4565
|
+
family: "editing",
|
|
4566
|
+
controls: editingControls,
|
|
4567
|
+
onRequest: p.onToggleFindReplace
|
|
4568
|
+
}
|
|
4569
|
+
),
|
|
5843
4570
|
/* @__PURE__ */ jsxs("div", { className: "relative", ref: menuRef, ...controlAttr("home.editing.select"), children: [
|
|
5844
4571
|
/* @__PURE__ */ jsx(
|
|
5845
4572
|
"button",
|
|
@@ -6808,6 +5535,7 @@ function Toolbar(p) {
|
|
|
6808
5535
|
sDrw && /* @__PURE__ */ jsx(
|
|
6809
5536
|
DrawSection,
|
|
6810
5537
|
{
|
|
5538
|
+
canEdit: p.canEdit,
|
|
6811
5539
|
activeTool: p.activeTool,
|
|
6812
5540
|
drawingColor: p.drawingColor,
|
|
6813
5541
|
drawingWidth: p.drawingWidth,
|
|
@@ -7079,7 +5807,7 @@ var EXPLOSION_SUPPORTED_TYPES = /* @__PURE__ */ new Set([
|
|
|
7079
5807
|
"doughnut",
|
|
7080
5808
|
"ofPie"
|
|
7081
5809
|
]);
|
|
7082
|
-
var
|
|
5810
|
+
var ICONS3 = {
|
|
7083
5811
|
elements: LuPlus,
|
|
7084
5812
|
styles: LuPaintbrush,
|
|
7085
5813
|
filters: LuFilter
|
|
@@ -7122,7 +5850,7 @@ function ChartQuickActionsOverlay({
|
|
|
7122
5850
|
"data-export-ignore": "true",
|
|
7123
5851
|
style: { position: "absolute", left: 0, top: 0, zIndex: 59 },
|
|
7124
5852
|
onMouseDown: (e) => e.stopPropagation(),
|
|
7125
|
-
children: descriptor.buttons.map((button) => /* @__PURE__ */ jsxs(
|
|
5853
|
+
children: descriptor.buttons.map((button) => /* @__PURE__ */ jsxs(React95.Fragment, { children: [
|
|
7126
5854
|
/* @__PURE__ */ jsx(
|
|
7127
5855
|
"button",
|
|
7128
5856
|
{
|
|
@@ -7142,7 +5870,7 @@ function ChartQuickActionsOverlay({
|
|
|
7142
5870
|
transformOrigin: "top left"
|
|
7143
5871
|
},
|
|
7144
5872
|
className: "flex items-center justify-center rounded bg-white border border-gray-300 shadow-sm hover:bg-gray-100 text-gray-700",
|
|
7145
|
-
children:
|
|
5873
|
+
children: React95.createElement(ICONS3[button.id], { className: "size-3.5" })
|
|
7146
5874
|
}
|
|
7147
5875
|
),
|
|
7148
5876
|
open === button.id && button.id === "elements" && /* @__PURE__ */ jsxs(
|
|
@@ -8292,7 +7020,7 @@ function HorizontalRulerView({ ticks, widthPx, highlight }) {
|
|
|
8292
7020
|
}
|
|
8293
7021
|
);
|
|
8294
7022
|
}
|
|
8295
|
-
var HorizontalRuler =
|
|
7023
|
+
var HorizontalRuler = React95.memo(HorizontalRulerView);
|
|
8296
7024
|
HorizontalRuler.displayName = "HorizontalRuler";
|
|
8297
7025
|
function VerticalRulerView({ ticks, heightPx, highlight }) {
|
|
8298
7026
|
return /* @__PURE__ */ jsxs(
|
|
@@ -8364,7 +7092,7 @@ function VerticalRulerView({ ticks, heightPx, highlight }) {
|
|
|
8364
7092
|
}
|
|
8365
7093
|
);
|
|
8366
7094
|
}
|
|
8367
|
-
var VerticalRuler =
|
|
7095
|
+
var VerticalRuler = React95.memo(VerticalRulerView);
|
|
8368
7096
|
VerticalRuler.displayName = "VerticalRuler";
|
|
8369
7097
|
function Ruler({
|
|
8370
7098
|
canvasSize,
|
|
@@ -9243,6 +7971,9 @@ function ActiveXControlOverlay({
|
|
|
9243
7971
|
}) });
|
|
9244
7972
|
}
|
|
9245
7973
|
var EMPTY_ADJUSTMENT_HANDLES = [];
|
|
7974
|
+
function cssAttr(id) {
|
|
7975
|
+
return id.replace(/\\/g, "\\\\").replace(/"/g, '\\"');
|
|
7976
|
+
}
|
|
9246
7977
|
function SlideCanvas(props) {
|
|
9247
7978
|
const latest = useRef(props);
|
|
9248
7979
|
latest.current = props;
|
|
@@ -9407,6 +8138,22 @@ function SlideCanvasContent({
|
|
|
9407
8138
|
zoom,
|
|
9408
8139
|
onMoveGuide
|
|
9409
8140
|
});
|
|
8141
|
+
const slideElements = activeSlide?.elements;
|
|
8142
|
+
const enteredGroup = useMemo(() => {
|
|
8143
|
+
if (!slideElements || !selectedElement) {
|
|
8144
|
+
return null;
|
|
8145
|
+
}
|
|
8146
|
+
const parentId = parentSelection(slideElements, selectedElement.id);
|
|
8147
|
+
return parentId ? slideSpaceElement(slideElements, parentId) : null;
|
|
8148
|
+
}, [slideElements, selectedElement]);
|
|
8149
|
+
const editingMember = useMemo(() => {
|
|
8150
|
+
if (!slideElements || !inlineEditingElementId || !isGroupMember(slideElements, inlineEditingElementId)) {
|
|
8151
|
+
return null;
|
|
8152
|
+
}
|
|
8153
|
+
const member = slideSpaceElement(slideElements, inlineEditingElementId);
|
|
8154
|
+
const parentId = parentSelection(slideElements, inlineEditingElementId);
|
|
8155
|
+
return member && parentId ? { member, parentId } : null;
|
|
8156
|
+
}, [slideElements, inlineEditingElementId]);
|
|
9410
8157
|
const selectedMotionPath = selectedElement ? motionPathFor(activeSlide?.animations ?? [], selectedElement.id) : void 0;
|
|
9411
8158
|
const handleMotionPathChange = useCallback(
|
|
9412
8159
|
(path) => {
|
|
@@ -9618,6 +8365,59 @@ function SlideCanvasContent({
|
|
|
9618
8365
|
},
|
|
9619
8366
|
element.id
|
|
9620
8367
|
)),
|
|
8368
|
+
enteredGroup && /* @__PURE__ */ jsx(
|
|
8369
|
+
"div",
|
|
8370
|
+
{
|
|
8371
|
+
"data-pptx-entered-group": true,
|
|
8372
|
+
"aria-hidden": true,
|
|
8373
|
+
className: "absolute pointer-events-none outline outline-1 outline-dashed outline-blue-500/70",
|
|
8374
|
+
style: {
|
|
8375
|
+
left: enteredGroup.x,
|
|
8376
|
+
top: enteredGroup.y,
|
|
8377
|
+
width: enteredGroup.width,
|
|
8378
|
+
height: enteredGroup.height,
|
|
8379
|
+
zIndex: templateElements.length + (activeSlide?.elements.length ?? 0) + 1
|
|
8380
|
+
}
|
|
8381
|
+
}
|
|
8382
|
+
),
|
|
8383
|
+
editingMember && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
8384
|
+
/* @__PURE__ */ jsx("style", { children: `[data-element-id="${cssAttr(editingMember.parentId)}"] [data-element-id="${cssAttr(editingMember.member.id)}"]{visibility:hidden}` }),
|
|
8385
|
+
/* @__PURE__ */ jsx(
|
|
8386
|
+
ElementRenderer,
|
|
8387
|
+
{
|
|
8388
|
+
element: editingMember.member,
|
|
8389
|
+
activeSlide,
|
|
8390
|
+
isSelected: true,
|
|
8391
|
+
isInlineEditing: true,
|
|
8392
|
+
inlineEditingText,
|
|
8393
|
+
canInteract: isEditableCanvas,
|
|
8394
|
+
spellCheckEnabled,
|
|
8395
|
+
mediaDataUrls,
|
|
8396
|
+
selectionColorClass: "blue-500",
|
|
8397
|
+
showHoverBorder: false,
|
|
8398
|
+
zIndex: templateElements.length + (activeSlide?.elements.length ?? 0) + 2,
|
|
8399
|
+
imageAltText: "Slide element",
|
|
8400
|
+
showResizeHandles: false,
|
|
8401
|
+
renderInk: true,
|
|
8402
|
+
renderGroups: true,
|
|
8403
|
+
adjustmentHandles: EMPTY_ADJUSTMENT_HANDLES,
|
|
8404
|
+
onResizePointerDown: stableResizePointerDown,
|
|
8405
|
+
onAdjustmentPointerDown: stableAdjustmentPointerDown,
|
|
8406
|
+
onRotate: stableRotate,
|
|
8407
|
+
onInlineEditChange: stableInlineEditChange,
|
|
8408
|
+
onInlineEditCommit: stableInlineEditCommit,
|
|
8409
|
+
onInlineEditCancel: stableInlineEditCancel,
|
|
8410
|
+
onUpdateSmartArtElement: stableUpdateSmartArtElement,
|
|
8411
|
+
onFormatText: stableFormatText,
|
|
8412
|
+
onHyperlinkClick,
|
|
8413
|
+
allSlides,
|
|
8414
|
+
sourceSlideIndex,
|
|
8415
|
+
fieldContext,
|
|
8416
|
+
tableStyleContext
|
|
8417
|
+
},
|
|
8418
|
+
`group-member-edit-${editingMember.member.id}`
|
|
8419
|
+
)
|
|
8420
|
+
] }),
|
|
9621
8421
|
selectedElement && selectedElement.id !== cropElement?.id && shouldShowElementHandles(isEditableCanvas, true, selectedElementIdSet.size) && !isConnectorOrLineElement(selectedElement) && outlineAuthoring?.editPointsElementId !== selectedElement.id && /* @__PURE__ */ jsx(
|
|
9622
8422
|
SelectionHandleOverlay,
|
|
9623
8423
|
{
|
|
@@ -10290,7 +9090,7 @@ function slideThumbnailPropsEqual(prev, next) {
|
|
|
10290
9090
|
}
|
|
10291
9091
|
return true;
|
|
10292
9092
|
}
|
|
10293
|
-
var SlideThumbnail =
|
|
9093
|
+
var SlideThumbnail = React95.memo(SlideThumbnailImpl, slideThumbnailPropsEqual);
|
|
10294
9094
|
|
|
10295
9095
|
// src/viewer/components/context-menu-dispatch.ts
|
|
10296
9096
|
function tableCell(props) {
|
|
@@ -11051,7 +9851,7 @@ function LazyThumbnailInner({
|
|
|
11051
9851
|
}
|
|
11052
9852
|
) });
|
|
11053
9853
|
}
|
|
11054
|
-
var LazyThumbnail =
|
|
9854
|
+
var LazyThumbnail = React95.memo(LazyThumbnailInner);
|
|
11055
9855
|
|
|
11056
9856
|
// src/viewer/components/slides-pane/utils.ts
|
|
11057
9857
|
function formatTimingMs(ms) {
|
|
@@ -11213,7 +10013,7 @@ function SlideItemInner({
|
|
|
11213
10013
|
}
|
|
11214
10014
|
);
|
|
11215
10015
|
}
|
|
11216
|
-
var SlideItem =
|
|
10016
|
+
var SlideItem = React95.memo(SlideItemInner);
|
|
11217
10017
|
function useSlidePaneCallbacks(onMoveSlide, onRenameSection, onToggleSectionCollapse) {
|
|
11218
10018
|
const [collapsedSections, setCollapsedSections] = useState({});
|
|
11219
10019
|
const [renamingSectionId, setRenamingSectionId] = useState(null);
|
|
@@ -12622,7 +11422,7 @@ function arePropsEqual(prev, next) {
|
|
|
12622
11422
|
}
|
|
12623
11423
|
return true;
|
|
12624
11424
|
}
|
|
12625
|
-
var SlideCard =
|
|
11425
|
+
var SlideCard = React95.memo(SlideCardImpl, arePropsEqual);
|
|
12626
11426
|
function SorterContextMenu({
|
|
12627
11427
|
x,
|
|
12628
11428
|
y,
|
|
@@ -14181,8 +12981,8 @@ function SlideNotesPanel({
|
|
|
14181
12981
|
onHeightChange
|
|
14182
12982
|
}) {
|
|
14183
12983
|
const { t } = useTranslation();
|
|
14184
|
-
const rootRef =
|
|
14185
|
-
|
|
12984
|
+
const rootRef = React95.useRef(null);
|
|
12985
|
+
React95.useEffect(() => {
|
|
14186
12986
|
const el = rootRef.current;
|
|
14187
12987
|
if (!el || !onHeightChange) {
|
|
14188
12988
|
return void 0;
|
|
@@ -16074,9 +14874,9 @@ function PresentationSubtitleBar({
|
|
|
16074
14874
|
function renderNotesSegments(segments) {
|
|
16075
14875
|
return notesSegmentsToSpans(segments).map((span) => {
|
|
16076
14876
|
if (span.kind === "break") {
|
|
16077
|
-
return
|
|
14877
|
+
return React95.createElement("br", { key: span.key });
|
|
16078
14878
|
}
|
|
16079
|
-
return
|
|
14879
|
+
return React95.createElement(
|
|
16080
14880
|
"span",
|
|
16081
14881
|
{ key: span.key, style: span.style },
|
|
16082
14882
|
span.text
|
|
@@ -16308,7 +15108,7 @@ function scaledSlidePreviewPropsEqual(prev, next) {
|
|
|
16308
15108
|
}
|
|
16309
15109
|
return true;
|
|
16310
15110
|
}
|
|
16311
|
-
var ScaledSlidePreview =
|
|
15111
|
+
var ScaledSlidePreview = React95.memo(ScaledSlidePreviewImpl, scaledSlidePreviewPropsEqual);
|
|
16312
15112
|
function PresenterNotesRail({
|
|
16313
15113
|
slides,
|
|
16314
15114
|
current,
|
|
@@ -17546,7 +16346,7 @@ function EffectSoundRow({
|
|
|
17546
16346
|
onPickStock
|
|
17547
16347
|
}) {
|
|
17548
16348
|
const { t } = useTranslation();
|
|
17549
|
-
const fileInputRef =
|
|
16349
|
+
const fileInputRef = React95.useRef(null);
|
|
17550
16350
|
const selectedValue = soundState.catalogueId ?? (soundState.hasSound ? CURRENT_VALUE : NONE_VALUE);
|
|
17551
16351
|
const handleSelectChange = (event) => {
|
|
17552
16352
|
const value = event.target.value;
|
|
@@ -21132,7 +19932,7 @@ function ConnectorArrowsSection({
|
|
|
21132
19932
|
["Start", "End"].map((end) => {
|
|
21133
19933
|
const widthKey = end === "Start" ? "connectorStartArrowWidth" : "connectorEndArrowWidth";
|
|
21134
19934
|
const lengthKey = end === "Start" ? "connectorStartArrowLength" : "connectorEndArrowLength";
|
|
21135
|
-
return /* @__PURE__ */ jsxs(
|
|
19935
|
+
return /* @__PURE__ */ jsxs(React95.Fragment, { children: [
|
|
21136
19936
|
/* @__PURE__ */ jsxs("label", { className: "flex flex-col gap-1", children: [
|
|
21137
19937
|
/* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: t(END_LABEL_KEYS[end].width) }),
|
|
21138
19938
|
/* @__PURE__ */ jsx(
|
|
@@ -24009,7 +22809,7 @@ function StrokeEffectsSection({
|
|
|
24009
22809
|
] }),
|
|
24010
22810
|
EFFECT_CONFIGS.map((cfg) => {
|
|
24011
22811
|
const on = cfg.isOn(style);
|
|
24012
|
-
return /* @__PURE__ */ jsxs(
|
|
22812
|
+
return /* @__PURE__ */ jsxs(React95.Fragment, { children: [
|
|
24013
22813
|
/* @__PURE__ */ jsxs("label", { className: `inline-flex items-center gap-2 text-foreground ${COL2}`, children: [
|
|
24014
22814
|
/* @__PURE__ */ jsx(
|
|
24015
22815
|
WebCheckbox,
|
|
@@ -24877,7 +23677,7 @@ function TextWarpGallery({
|
|
|
24877
23677
|
onUpdateTextStyle
|
|
24878
23678
|
}) {
|
|
24879
23679
|
const { t } = useTranslation();
|
|
24880
|
-
const [expanded, setExpanded] =
|
|
23680
|
+
const [expanded, setExpanded] = React95.useState(false);
|
|
24881
23681
|
const currentPreset = ts?.textWarpPreset || "textNoShape";
|
|
24882
23682
|
return /* @__PURE__ */ jsxs("div", { className: "mt-2 rounded border border-border bg-card p-2 space-y-2", children: [
|
|
24883
23683
|
/* @__PURE__ */ jsxs(
|
|
@@ -25528,7 +24328,7 @@ function SmartArtStyleControls({
|
|
|
25528
24328
|
onChangeStyle
|
|
25529
24329
|
}) {
|
|
25530
24330
|
const { t } = useTranslation();
|
|
25531
|
-
const translate =
|
|
24331
|
+
const translate = React95.useCallback((key) => t(key), [t]);
|
|
25532
24332
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
25533
24333
|
/* @__PURE__ */ jsxs("label", { className: "flex flex-col gap-1 text-[11px]", children: [
|
|
25534
24334
|
/* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: t("pptx.smartart.colorScheme") }),
|
|
@@ -25583,9 +24383,9 @@ function SmartArtPropertiesPanel({
|
|
|
25583
24383
|
const nodes = smartArtData.nodes ?? [];
|
|
25584
24384
|
const layout = smartArtData.resolvedLayoutType;
|
|
25585
24385
|
const topLevelCount = nodes.filter((n) => !n.parentId).length;
|
|
25586
|
-
const inputRefs =
|
|
25587
|
-
const pendingFocusId =
|
|
25588
|
-
|
|
24386
|
+
const inputRefs = React95.useRef(/* @__PURE__ */ new Map());
|
|
24387
|
+
const pendingFocusId = React95.useRef(null);
|
|
24388
|
+
React95.useEffect(() => {
|
|
25589
24389
|
const id = pendingFocusId.current;
|
|
25590
24390
|
if (id) {
|
|
25591
24391
|
inputRefs.current.get(id)?.focus();
|
|
@@ -27199,7 +25999,7 @@ function CommentBody({ text, mentions, className }) {
|
|
|
27199
25999
|
index
|
|
27200
26000
|
) : (
|
|
27201
26001
|
// eslint-disable-next-line react/no-array-index-key -- segments are positional
|
|
27202
|
-
/* @__PURE__ */ jsx(
|
|
26002
|
+
/* @__PURE__ */ jsx(React95.Fragment, { children: segment.text }, index)
|
|
27203
26003
|
)
|
|
27204
26004
|
) });
|
|
27205
26005
|
}
|
|
@@ -28718,7 +27518,7 @@ function PresentationPropertiesPanel({
|
|
|
28718
27518
|
onUpdateTagCollections
|
|
28719
27519
|
}) {
|
|
28720
27520
|
const { t } = useTranslation();
|
|
28721
|
-
const handleTransitionChange =
|
|
27521
|
+
const handleTransitionChange = React95.useCallback(
|
|
28722
27522
|
(updates) => {
|
|
28723
27523
|
onUpdateSlide({
|
|
28724
27524
|
transition: mergeSlideTransition(activeSlide?.transition, updates)
|
|
@@ -32637,7 +31437,7 @@ function ViewerToolbarSection(props) {
|
|
|
32637
31437
|
},
|
|
32638
31438
|
[activeSlide, propertyHandlers]
|
|
32639
31439
|
);
|
|
32640
|
-
const scopedLayoutOptions =
|
|
31440
|
+
const scopedLayoutOptions = React95.useMemo(
|
|
32641
31441
|
() => scopeLayoutOptionsToActiveSlide(s.layoutOptions, activeSlide),
|
|
32642
31442
|
[s.layoutOptions, activeSlide]
|
|
32643
31443
|
);
|
|
@@ -34609,7 +33409,7 @@ function useTableStyleMapHandlers(input) {
|
|
|
34609
33409
|
var AiChatPanel = lazy(async () => {
|
|
34610
33410
|
const [{ useChat }, { default: Panel }] = await Promise.all([
|
|
34611
33411
|
import('@ai-sdk/react'),
|
|
34612
|
-
import('./AiChatPanel-
|
|
33412
|
+
import('./AiChatPanel-2VX4EF2E.mjs')
|
|
34613
33413
|
]);
|
|
34614
33414
|
function BoundAiChatPanel(props) {
|
|
34615
33415
|
return /* @__PURE__ */ jsx(Panel, { ...props, useChat });
|