pptx-react-viewer 3.5.4 → 3.7.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.
Files changed (163) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/dist/{AiChatPanel-CCJNQGER.mjs → AiChatPanel-L5QGWVZK.mjs} +4 -4
  3. package/dist/AiChatPanel-L5QGWVZK.mjs.br +0 -0
  4. package/dist/AiChatPanel-L5QGWVZK.mjs.gz +0 -0
  5. package/dist/{AiChatPanel-LPZWDNVU.js → AiChatPanel-M3AHKYPS.js} +25 -25
  6. package/dist/AiChatPanel-M3AHKYPS.js.br +0 -0
  7. package/dist/AiChatPanel-M3AHKYPS.js.gz +0 -0
  8. package/dist/{Area3DChartScene-P6YM6ZL7.mjs → Area3DChartScene-AE2XYKDW.mjs} +1 -1
  9. package/dist/Area3DChartScene-AE2XYKDW.mjs.br +1 -0
  10. package/dist/Area3DChartScene-AE2XYKDW.mjs.gz +0 -0
  11. package/dist/{Area3DChartScene-LJCWBNQ3.js → Area3DChartScene-ZQLQK6L4.js} +2 -2
  12. package/dist/Area3DChartScene-ZQLQK6L4.js.br +0 -0
  13. package/dist/Area3DChartScene-ZQLQK6L4.js.gz +0 -0
  14. package/dist/{Bar3DChartScene-DIVOJURZ.mjs → Bar3DChartScene-FQV62XOI.mjs} +1 -1
  15. package/dist/Bar3DChartScene-FQV62XOI.mjs.br +2 -0
  16. package/dist/Bar3DChartScene-FQV62XOI.mjs.gz +0 -0
  17. package/dist/{Bar3DChartScene-7DNQ4X5T.js → Bar3DChartScene-TZ6ADFBS.js} +2 -2
  18. package/dist/Bar3DChartScene-TZ6ADFBS.js.br +0 -0
  19. package/dist/Bar3DChartScene-TZ6ADFBS.js.gz +0 -0
  20. package/dist/{Line3DChartScene-UF6DHP36.js → Line3DChartScene-5CKPAX63.js} +2 -2
  21. package/dist/Line3DChartScene-5CKPAX63.js.br +0 -0
  22. package/dist/Line3DChartScene-5CKPAX63.js.gz +0 -0
  23. package/dist/{Line3DChartScene-ZZVNUKIJ.mjs → Line3DChartScene-FEUY3PCE.mjs} +1 -1
  24. package/dist/Line3DChartScene-FEUY3PCE.mjs.br +1 -0
  25. package/dist/Line3DChartScene-FEUY3PCE.mjs.gz +0 -0
  26. package/dist/{Model3DScene-C7MZ22DH.js → Model3DScene-BLXEALM6.js} +2 -2
  27. package/dist/Model3DScene-BLXEALM6.js.br +0 -0
  28. package/dist/Model3DScene-BLXEALM6.js.gz +0 -0
  29. package/dist/{Model3DScene-XXMAAKBR.mjs → Model3DScene-V3DHIISV.mjs} +1 -1
  30. package/dist/Model3DScene-V3DHIISV.mjs.br +0 -0
  31. package/dist/Model3DScene-V3DHIISV.mjs.gz +0 -0
  32. package/dist/{PieChart3DScene-N2Y25VG5.js → PieChart3DScene-GHHT3PDV.js} +2 -2
  33. package/dist/PieChart3DScene-GHHT3PDV.js.br +0 -0
  34. package/dist/PieChart3DScene-GHHT3PDV.js.gz +0 -0
  35. package/dist/{PieChart3DScene-7LX3IL2Q.mjs → PieChart3DScene-VZI2VARG.mjs} +1 -1
  36. package/dist/{PieChart3DScene-7LX3IL2Q.mjs.br → PieChart3DScene-VZI2VARG.mjs.br} +0 -0
  37. package/dist/PieChart3DScene-VZI2VARG.mjs.gz +0 -0
  38. package/dist/PowerPointViewer-Cl6jBPNw.d.ts.map +1 -1
  39. package/dist/{SurfaceChart3DScene-ADA7NUIW.mjs → SurfaceChart3DScene-T36E2HBA.mjs} +1 -1
  40. package/dist/SurfaceChart3DScene-T36E2HBA.mjs.br +0 -0
  41. package/dist/SurfaceChart3DScene-T36E2HBA.mjs.gz +0 -0
  42. package/dist/{SurfaceChart3DScene-WXJHYOGJ.js → SurfaceChart3DScene-WWIMQ65D.js} +2 -2
  43. package/dist/SurfaceChart3DScene-WWIMQ65D.js.br +0 -0
  44. package/dist/SurfaceChart3DScene-WWIMQ65D.js.gz +0 -0
  45. package/dist/{chunk-UOMFINNJ.js → chunk-3EJFZ7TE.js} +33 -5
  46. package/dist/chunk-3EJFZ7TE.js.br +0 -0
  47. package/dist/chunk-3EJFZ7TE.js.gz +0 -0
  48. package/dist/{chunk-YQOK4E2A.js → chunk-DCNHUEWQ.js} +35917 -23497
  49. package/dist/chunk-DCNHUEWQ.js.br +0 -0
  50. package/dist/chunk-DCNHUEWQ.js.gz +0 -0
  51. package/dist/{chunk-JCJ3EPG6.mjs → chunk-FGTMS7LR.mjs} +14 -23
  52. package/dist/chunk-FGTMS7LR.mjs.br +0 -0
  53. package/dist/chunk-FGTMS7LR.mjs.gz +0 -0
  54. package/dist/{chunk-U52MKWVA.mjs → chunk-JANUSAEK.mjs} +189 -225
  55. package/dist/chunk-JANUSAEK.mjs.br +0 -0
  56. package/dist/chunk-JANUSAEK.mjs.gz +0 -0
  57. package/dist/{chunk-NM652EZS.mjs → chunk-NV55GU5V.mjs} +35881 -23494
  58. package/dist/chunk-NV55GU5V.mjs.br +0 -0
  59. package/dist/chunk-NV55GU5V.mjs.gz +0 -0
  60. package/dist/{chunk-2FMQ7M3L.js → chunk-OBE4TB76.js} +494 -575
  61. package/dist/chunk-OBE4TB76.js.br +0 -0
  62. package/dist/chunk-OBE4TB76.js.gz +0 -0
  63. package/dist/{chunk-EVVWCF2M.mjs → chunk-PC62KGU3.mjs} +67 -148
  64. package/dist/chunk-PC62KGU3.mjs.br +0 -0
  65. package/dist/chunk-PC62KGU3.mjs.gz +0 -0
  66. package/dist/{chunk-HHJZK26I.js → chunk-TUSALM3A.js} +1603 -1310
  67. package/dist/chunk-TUSALM3A.js.br +0 -0
  68. package/dist/chunk-TUSALM3A.js.gz +0 -0
  69. package/dist/{chunk-IWQSAKPM.mjs → chunk-TXY2E7VQ.mjs} +445 -152
  70. package/dist/chunk-TXY2E7VQ.mjs.br +0 -0
  71. package/dist/chunk-TXY2E7VQ.mjs.gz +0 -0
  72. package/dist/{chunk-UTMTXJGM.js → chunk-VIFDZIVX.js} +375 -412
  73. package/dist/chunk-VIFDZIVX.js.br +0 -0
  74. package/dist/chunk-VIFDZIVX.js.gz +0 -0
  75. package/dist/{chunk-UTIMT5CZ.js → chunk-W24OJ7H5.js} +14 -23
  76. package/dist/chunk-W24OJ7H5.js.br +0 -0
  77. package/dist/chunk-W24OJ7H5.js.gz +0 -0
  78. package/dist/{chunk-IVPT3U5C.mjs → chunk-WKODF5ZU.mjs} +29 -1
  79. package/dist/chunk-WKODF5ZU.mjs.br +0 -0
  80. package/dist/chunk-WKODF5ZU.mjs.gz +0 -0
  81. package/dist/i18n.js +4 -4
  82. package/dist/i18n.js.br +0 -0
  83. package/dist/i18n.js.gz +0 -0
  84. package/dist/i18n.mjs +1 -1
  85. package/dist/i18n.mjs.br +0 -0
  86. package/dist/i18n.mjs.gz +0 -0
  87. package/dist/index.d.ts +1012 -45
  88. package/dist/index.js +47 -47
  89. package/dist/index.js.br +0 -0
  90. package/dist/index.js.gz +0 -0
  91. package/dist/index.mjs +6 -6
  92. package/dist/index.mjs.br +0 -0
  93. package/dist/index.mjs.gz +0 -0
  94. package/dist/internals.d.ts +1023 -45
  95. package/dist/internals.d.ts.map +1 -1
  96. package/dist/internals.js +79 -79
  97. package/dist/internals.js.br +0 -0
  98. package/dist/internals.js.gz +0 -0
  99. package/dist/internals.mjs +4 -4
  100. package/dist/internals.mjs.br +0 -0
  101. package/dist/internals.mjs.gz +0 -0
  102. package/dist/{useViewerBuildingBlocks-f6oNGKMX.d.ts → useViewerBuildingBlocks-C8F_4Pzb.d.ts} +3 -1
  103. package/dist/useViewerBuildingBlocks-C8F_4Pzb.d.ts.map +1 -0
  104. package/dist/viewer/index.d.ts +933 -45
  105. package/dist/viewer/index.js +27 -27
  106. package/dist/viewer/index.js.br +0 -0
  107. package/dist/viewer/index.js.gz +0 -0
  108. package/dist/viewer/index.mjs +6 -6
  109. package/dist/viewer/index.mjs.br +0 -0
  110. package/dist/viewer/index.mjs.gz +0 -0
  111. package/package.json +2 -2
  112. package/dist/AiChatPanel-CCJNQGER.mjs.br +0 -0
  113. package/dist/AiChatPanel-CCJNQGER.mjs.gz +0 -0
  114. package/dist/AiChatPanel-LPZWDNVU.js.br +0 -0
  115. package/dist/AiChatPanel-LPZWDNVU.js.gz +0 -0
  116. package/dist/Area3DChartScene-LJCWBNQ3.js.br +0 -0
  117. package/dist/Area3DChartScene-LJCWBNQ3.js.gz +0 -0
  118. package/dist/Area3DChartScene-P6YM6ZL7.mjs.br +0 -0
  119. package/dist/Area3DChartScene-P6YM6ZL7.mjs.gz +0 -0
  120. package/dist/Bar3DChartScene-7DNQ4X5T.js.br +0 -1
  121. package/dist/Bar3DChartScene-7DNQ4X5T.js.gz +0 -0
  122. package/dist/Bar3DChartScene-DIVOJURZ.mjs.br +0 -0
  123. package/dist/Bar3DChartScene-DIVOJURZ.mjs.gz +0 -0
  124. package/dist/Line3DChartScene-UF6DHP36.js.br +0 -0
  125. package/dist/Line3DChartScene-UF6DHP36.js.gz +0 -0
  126. package/dist/Line3DChartScene-ZZVNUKIJ.mjs.br +0 -0
  127. package/dist/Line3DChartScene-ZZVNUKIJ.mjs.gz +0 -0
  128. package/dist/Model3DScene-C7MZ22DH.js.br +0 -0
  129. package/dist/Model3DScene-C7MZ22DH.js.gz +0 -0
  130. package/dist/Model3DScene-XXMAAKBR.mjs.br +0 -0
  131. package/dist/Model3DScene-XXMAAKBR.mjs.gz +0 -0
  132. package/dist/PieChart3DScene-7LX3IL2Q.mjs.gz +0 -0
  133. package/dist/PieChart3DScene-N2Y25VG5.js.br +0 -0
  134. package/dist/PieChart3DScene-N2Y25VG5.js.gz +0 -0
  135. package/dist/SurfaceChart3DScene-ADA7NUIW.mjs.br +0 -0
  136. package/dist/SurfaceChart3DScene-ADA7NUIW.mjs.gz +0 -0
  137. package/dist/SurfaceChart3DScene-WXJHYOGJ.js.br +0 -0
  138. package/dist/SurfaceChart3DScene-WXJHYOGJ.js.gz +0 -0
  139. package/dist/chunk-2FMQ7M3L.js.br +0 -0
  140. package/dist/chunk-2FMQ7M3L.js.gz +0 -0
  141. package/dist/chunk-EVVWCF2M.mjs.br +0 -0
  142. package/dist/chunk-EVVWCF2M.mjs.gz +0 -0
  143. package/dist/chunk-HHJZK26I.js.br +0 -0
  144. package/dist/chunk-HHJZK26I.js.gz +0 -0
  145. package/dist/chunk-IVPT3U5C.mjs.br +0 -0
  146. package/dist/chunk-IVPT3U5C.mjs.gz +0 -0
  147. package/dist/chunk-IWQSAKPM.mjs.br +0 -0
  148. package/dist/chunk-IWQSAKPM.mjs.gz +0 -0
  149. package/dist/chunk-JCJ3EPG6.mjs.br +0 -0
  150. package/dist/chunk-JCJ3EPG6.mjs.gz +0 -0
  151. package/dist/chunk-NM652EZS.mjs.br +0 -0
  152. package/dist/chunk-NM652EZS.mjs.gz +0 -0
  153. package/dist/chunk-U52MKWVA.mjs.br +0 -0
  154. package/dist/chunk-U52MKWVA.mjs.gz +0 -0
  155. package/dist/chunk-UOMFINNJ.js.br +0 -0
  156. package/dist/chunk-UOMFINNJ.js.gz +0 -0
  157. package/dist/chunk-UTIMT5CZ.js.br +0 -0
  158. package/dist/chunk-UTIMT5CZ.js.gz +0 -0
  159. package/dist/chunk-UTMTXJGM.js.br +0 -0
  160. package/dist/chunk-UTMTXJGM.js.gz +0 -0
  161. package/dist/chunk-YQOK4E2A.js.br +0 -0
  162. package/dist/chunk-YQOK4E2A.js.gz +0 -0
  163. package/dist/useViewerBuildingBlocks-f6oNGKMX.d.ts.map +0 -1
@@ -1,8 +1,8 @@
1
- import { computeFocusTargets, aiChangeAnimationCss, changeGhostStyle, createChatHistoryStore, collectStoredChats, exportAiChatLogs, applyElementUpdate } from './chunk-IVPT3U5C.mjs';
2
- import { useViewerOptions, useReadOnlyRecommendationState, useCompatibilityToastsState, useReducedMotion, useViewerState, useIsMobile, useResizablePanels, useDerivedSlideState, useZoomViewport, useEditorHistory, usePresentationSetup, useTouchGestures, useViewerDialogs, useEditorOperations, useViewerIntegration, useViewPreferencesSync, useLayoutSwitching, ViewerOptionsContext, useYjsDocumentSync, useCollaborationLivePatch, useFollowMode, useBroadcastFollower, safePrompt, scopeLayoutOptionsToActiveSlide, useToolbarVisibility, useKeyboardInsets, useModalDismissDrag, useCollaborativeState, useViewerOptionsContext, useVirtualizedSlides, useSwipeNavigation, useSheetDismissDrag, detectTargetType, parseEmailUrl, parseSlideFromUrl, ACTION_VERB_MAP, syncSelectionHandleOverlay } from './chunk-EVVWCF2M.mjs';
3
- import { MIN_ELEMENT_SIZE, DEFAULT_STROKE_COLOR, getConnectorPathGeometry, buildLineShadowCss, buildLineGlowFilter, renderConnectorMarker, getShapeVisualStyle, getTextStyleForElement, DEFAULT_TEXT_COLOR, renderVectorShape, isConnectorOrLineElement, build3DExtrusionData, getImageRenderStyle, cn, getImageSurfaceStyle, getTextLayoutStyle, renderTableElement, renderMediaElement, shouldRenderFallbackLabel, SHAPE_PRESETS, ANIMATION_PRESET_OPTIONS, DEFAULT_FILL_COLOR, hasDagDuotoneEffect, renderDagDuotoneSvgFilter, getImageSurfaceMaskStyle, getCropShapeClipPath, getImageTilingStyle, getDuotoneColors, getTextWarpStyle, renderTextSegments, buildReactChartViewModel, renderChartElement, buildTextBody3DSceneStyle, SLIDE_NAV_THUMBNAIL_WIDTH, DEFAULT_TEXT_FONT_SIZE, DEFAULT_FONT_FAMILY, TOOLBAR_SECTIONS, DEFAULT_SECTION_GROUP_ID, SHORTCUT_REFERENCE_ITEMS as SHORTCUT_REFERENCE_ITEMS$1, HYPERLINK_COLOR, GRID_SIZE, CONNECTOR_ARROW_OPTIONS, ARROW_SIZE_OPTIONS, startMotionPathPreview, startPreviewAnimation, stopPreviewAnimation, THEME_COLOR_SWATCHES, STROKE_DASH_OPTIONS } from './chunk-U52MKWVA.mjs';
4
- import { hasShapeProperties, normalizeHexColor, colorWithOpacity, normalizeStrokeDashType, getSvgStrokeDasharray, getCompoundLineOffsets, getCompoundLineWidths, svgLineCap, hasTextProperties, getElementTransform, getAriaRoleDescription, getAriaLabel, getAriaRole, resolveElementInteractivity, isEditableTextElement, isElementRendered, isElementActionable, getImageEffectsOpacity, getImageEffectsFilter, inlineElementPointerEvents, isHollowShapeElement, LINK_TOOLTIP_HOST_CLASS, ACTION_BUTTON_PRESETS, mediaTransportVisible, isInkElement, getGroupChildParentFill, getElementLabel, SWITCHABLE_LAYOUT_TYPES, compileEquationTemplateMathMl, buildUserFontFaceStyles, readStoredViewerPrefs, resolveThemeCatalogEntry, THEME_CATALOG, writeStoredViewerPrefs, openPptxFile, readBackstageRecentFile, resolveAutosaveActivation, viewerOptionsToPreferences, applyPreferenceToOptions, listAutosaveSnapshots, deleteAutosaveSnapshot, resolveExpiredAutosaveSnapshots, resolveHistoryDepth, applyAutoCorrect, resolveImageResolutionScale, resolveAutosaveIntervalMs, resolveAutosaveIntervalSeconds, shouldShowAutosaveRecoveryPrompt, resolveOptionRootClasses, resolve3DRenderingFlags, paintedStrokeWidth, buildCssGradientFromShapeStyle, ensureActionAffordanceStyles, resolveElementActionAffordance, actionAffordanceLabels, getComputedEffectStyle, getSoftEdgeSvgFilter, buildStrokeOutline, buildHollowHitOutline, buildSubpathFillOverlay, isImageLikeElement, getComputedFillStyle, strokeOutlineViewBox, revealedSmartArtNodeCount, buildSmartArtA11y, computeSmartArtElementLayout, flattenNodes, buildSummaryZoomView, isImageTiled, getImageColorWashStyle, readEditableText, placeCaretAtEnd, getPendingSelectionRestore, restoreSegmentSelection, getTextCompensationTransform, resolveChartKind, ensureChartInteractionStyles, applyChartPartHighlight, applyChartBuildReveal, formatAxisValue, hasPressureVariation, getInkReplayStyles, INK_REPLAY_KEYFRAMES, resolveInkColor, resolveInkWidth, resolveInkOpacity, pressuresToWidths, getContentPartReplayStyles, resolveOleType, getOleAriaLabel, getOleTypeColor, getOleTypeLabel, filterRenderedElements, resolveGroupChildFill, isLinkedTextBox, getOverflowSegments, shouldUseSvgWarp, getTextBodyRotationTransform, placeholderPromptDescriptor, isWedgeCalloutPresetShape, RULER_THICKNESS, RULER_FONT_SIZE, buildPreviewElements, deriveSlideFieldContext, SLIDE_TRANSITION_OPTIONS, hiddenSlideCue, HIDDEN_SLIDE_SLASH_GRADIENT, HIDDEN_SLIDE_LABEL_KEY, visibleTemplateElements, themeToCssVars, shouldClearAutosaveCacheOnClose, masterViewCrudActions, applyMasterViewCrudAction, masterViewCrudFailureKey, applyMotionPathPreset, resetSlideLayoutPath, DEFAULT_INSERT_CHART_KIND, hasCopyableFormat, templateSchemeFromTheme, createBackstagePresentation, playFeedbackSound, shouldDiscardAutosaveOnSuccessfulSave, setMasterViewBackgroundColor, compatToastStackStyle, printPropertiesFrameSlides, printPropertiesSlidesPerPage, VIEWER_OPTIONS_TABS, DEFAULT_QUICK_ACCESS_COMMAND_IDS, isHeaderFooterDateTextVisible, isHeaderFooterHeaderTextVisible, isHeaderFooterFooterTextVisible, buildJoinCollaborationConfig, buildCreateCollaborationConfig, generateBroadcastRoomId, DEFAULT_BROADCAST_SERVER_URL, buildBroadcastViewerUrl, resolveTransportForServerUrl, elementIdSelector, ACTION_INDICATOR_CLASS, ACTION_INDICATOR_ICON_PATH, LINK_TOOLTIP_CLASS, LINK_TOOLTIP_PANEL_CLASS, LINK_TOOLTIP_LABEL_CLASS, LINK_TOOLTIP_HINT_CLASS, DEFAULT_PALETTE2, resolvePalette, computeDrawingViewBox, projectDrawingShapes, styleShadowFilter, resolveDrawingShapeNodeId, buildChromeStyle, modelDataToBlobUrl, getImageSvgFilters, buildDuotoneCacheKey, getDuotoneCachedResult, applyDuotone, setDuotoneCachedResult, buildCacheKey, DEFAULT_COLOR_CHANGE_TOLERANCE, getCachedResult, applyColorChange, setCachedResult, getInlineEditorSelection, findChartPartTarget, advanceChartValueDrag, beginChartValueDrag, buildSurfaceChart3DDataForElement, buildBarChart3DDataForElement, buildLineChart3DDataForElement, buildAreaChart3DDataForElement, buildPieChart3DDataForElement, withChartTitle, buildSmartArt3DModel, extractPathPoints, generatePressureCircles, generateNibMarks, isBrowserOpenableMime, formatBytes, getOleDisplayName, getOleBadgeLabel, openUrlInNewTab, getSubstituteFontFamily, getWarpPath, getSlideBackgroundStyle, pushRecentColor, mruColorsPatch, filterCommands, resolveTitleBarStatusKey, TITLE_BAR_CLASSES, TITLE_BAR_DEFAULT_FILE_KEY, resolveScreenTip, masterViewBackgroundColor, buildFieldSubstitutionContext, shouldConfirmExternalHyperlink, safeOpenUrl, resolvePresentationAction, isPpactionUrl, parsePpactionUrl, isPresentationAdvanceClick, toggleBlackboard, PRESENT_TOOLBAR_CLASSES, buildContextMenuEntries, themeColorSchemesEqual, EXPANDED_MAX_HEIGHT, STATUS_BAR_CLASSES, buildBarActions, formatVersionTimestamp, formatRelativeTime, scanAvailableFontFamilies, PRESETS, CATEGORIES, convertOmmlToLatex, compileLatexEquation, convertLatexToOmml, EQUATION_TEMPLATES, 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, centeredSvgTextLines, computeInlineEditorRect, findSmartArtNodeText, setSmartArtNodeStyle, rebuildDrawingShapesIfCleared, shouldCommitSmartArtNodeText, updateSmartArtNodeText, groupIntoParagraphs, substituteFieldText, extraQuickAccessCommands, TAB_ROW_ACTION_CLASSES, listBackstageRecentFiles, BACKSTAGE_NAV, COMMON_FONT_SIZES, textFontSizePtToPx, INSERT_CHART_TYPES, CHARACTER_SPACING_OPTIONS, shapeFillChange, shapeOutlineChange, readRibbonTransitionDraft, ribbonTransitionUpdates, readSoundFileAsDataUrl, applyTransitionSoundFile, playSlideTransitionPreview, RIBBON_TRANSITION_PRESETS, transitionSoundOptions, transitionSoundSelectedValue, DEFAULT_MOTION_PATH_PRESET_ID, SLIDE_SHOW_OPTIONS, slideShowOptionChange, readSlideShowOption, SLIDE_VIRTUALIZATION_THRESHOLD, PRESENTATION_HIT_TEST_CSS, PRESENTATION_STAGE_ATTRIBUTE, getSlideTransitionAnimations, MORPH_CROSSFADE_GROUP_STYLE, MORPH_CROSSFADE_HALF_STYLE, SLIDE_TRANSITION_KEYFRAMES, buildStrokePathD, cursorForTool, annotationOverlayZIndex, presentationInkPath, resolveNotesSchematicBodyFontSizePx, motionPathFor, setMotionPath, getShapeAdjustmentHandleDescriptors, shouldShowElementHandles, PRESENTER_NAVIGATOR_LABEL_KEYS, PEN_COLORS, HIGHLIGHTER_COLORS, isBlackboardActive, scaleSlidesForSizeChange, slideSizeToCanvasPx, resolveSelectionPaneRename, PRESET_THEMES, resolveNotesSegments, segmentsToEditorHtml, DEBOUNCE_MS, createPlainNotesSegments, parseSegmentsFromRichEditor, segmentsToPlainText, getCurrentParagraphIndex, segmentsToParagraphs, paragraphsToSegments, MAX_INDENT_LEVEL, INDENT_PX, isUrlSafe, buildNotesPrintHtml, 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, backstageCardsFor, DEFAULT_VIEWER_PROFILE, resolveProfileInitial, AVATAR_COLOR_SWATCHES, resolveDefaultFontFamily, textFontSizePxToPt, buildFontCatalog, RIBBON_SHAPE_SWATCHES, canGroupSelection, canUngroupSelection, canSetStrokeWidth, strokeWidthOf, TRANSITION_SOUND_OTHER_VALUE, TRANSITION_SOUND_NONE_VALUE, clearTransitionSound, ENTRANCE_PRESET_VALUES, EMPHASIS_PRESET_VALUES, EXIT_PRESET_VALUES, MOTION_PATH_FAMILIES, motionPathFamilyLabelKey, motionPathPresetsByFamily, motionPathPresetLabelKey, masterViewPseudoSlide, authorConnectorBetweenSites, findEraserHitElementId, generateTicks, rulerDragToGuidePosition, getElementTransformWithoutRotation, getActiveXControlOverlayView, buildCommentMarkers, COMMENT_MARKER_SIZE, collectConnectorSiteCandidates, getConnectorEndpointHandles, findConnectorSiteNear, motionPathToSvgD, motionPathEndPixel, isEditableMotionPath, setMotionPathEnd, themeColorLabel, buildThemeColorGrid, THEME_COLOR_SCHEME_KEYS, COMMON_FONTS, handleReadingViewKey, getLocalStorageUsageSummary, saveViewerProfile, clearAllLocalViewerData, isCurrentLayout, SLIDE_TEMPLATES, computeAnchoredPopupPosition, CONNECTOR_SITE_SNAP_PX, resolveConnectorEndpointUpdate, withConnectorEndpointUpdate, getShapeConnectionSites, isElementLocked, mergeSlideTransition, mapSlideSorterKey, isEditorTextInputTarget, clampSorterZoom, buildLayoutPreviewGeometry, buildSlideTemplateContent, elementLockTogglePatch, buildTableDataGrid, appendTableElementRow, removeLastTableElementRow, appendTableElementColumn, removeLastTableElementColumn, removeTableElementColumn, removeTableElementRow, setTableElementCellText, TABLE_STYLE_PRESETS, applyTableStylePreset, evenColumnWidths, redistributeColumnWidth, evenRowHeights, patchChartData, chartGridlinesState, chartGridlinesPatch, seriesSecondaryAxisPatch, setChartCategoryLabel, setChartCellValue, addChartCategory, removeChartCategory, addChartSeries, removeChartSeries, setChartAxisLogScale, setChartAxisTitleStyle, setChartAxisGridlineStyle, setChartSeriesMarker, setChartSeriesChartType, setChartDataPointFill, setChartDataPointExplosion, setChartDataPointMarker, setChartDataPointLabel, describeSmartArtBounds, canAddTopLevelNode, classifyExtraConnections, siblingIndex, siblingCount, canRemoveTopLevelNode, buildOleObjectNamePatch, getOleObjectTypeLabel, sanitizeGradientStops, pptxActionToElementAction, withFrameSlides, withSlidesPerPage, applyThemeOverrideToSlide, COLOR_MAP_ALIAS_KEYS, DEFAULT_COLOR_MAP, schemaLabel, THEME_COLOR_SLOT_LABEL_KEYS, resolveSlideSizeSelection, SLIDE_SIZE_PRESETS, TRANSITION_VALID_DIRECTIONS, TRANSITION_ORIENTATION_TYPES, clampTransitionNumber, TRANSITION_SPEED_OPTIONS, TRANSITION_MORPH_OPTIONS, flattenTagCollections, resolveTemplateBackgroundRows, formatCommentTimestamp, commentMentionQuery, matchCommentMentionAuthors, buildAnimationTimelineRows, clearMotionPath, getEffectSoundState, setEffectSound, setAfterAnimation, setAfterAnimationColor, DIRECTIONAL_PRESETS, buildAnimationTimelineBars, motionPathPresetIdForPath, computeMergeCellRight, computeMergeCellDown, computeSplitCell, CHART_TYPE_OPTIONS, BAR3D_SHAPE_OPTIONS, bar3DShapePatch, RADAR_STYLE_OPTIONS, radarStylePatch, SURFACE_WIREFRAME_OPTIONS, surfaceWireframePatch, isSeriesUsingSecondaryAxis, SMARTART_COLOR_SCHEME_LABEL_KEYS, SMARTART_STYLE_LABEL_KEYS, addSmartArtNodeAsChild, removeSmartArtNode, addSiblingAfter, removeEmptyNode, demote, promote, reorder, clampCropValue, DUOTONE_PRESETS, ARTISTIC_EFFECTS, resolveActionType, ELEMENT_ACTION_TYPE_OPTIONS, elementActionToPptxAction, canCommitActionType, slideSizeFromPreset, withSlideSizeOrientation, TRANSITION_DIR_ARROWS, buildDirectionGrid, updateTagInCollections, deleteTagFromCollections, addTagToCollections, commentTextSegments, COMMENT_MENTION_CLASS, COMMENT_MENTION_ATTRIBUTE, insertCommentMention, reorderAnimationTimelineRows, applyAnimationTimelineOrder, animationEffectLabel, LBL, SEL, FILL_MODE_OPTIONS, SECTION_HEADING, NUM, switchSmartArtLayout, 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, GRADIENT_TYPE_OPTIONS, PATTERN_OPTIONS, FILL_PATTERN_LABEL_KEYS, openNativeEyeDropper, toggleText3dExtrusion, BEVEL_PRESETS } from './chunk-NM652EZS.mjs';
5
- import { LOCALE_CATALOG, translationsEn } from './chunk-JCJ3EPG6.mjs';
1
+ import { computeFocusTargets, aiChangeAnimationCss, changeGhostStyle, createChatHistoryStore, collectStoredChats, exportAiChatLogs, applyElementUpdate } from './chunk-WKODF5ZU.mjs';
2
+ import { useViewerOptions, useReadOnlyRecommendationState, useCompatibilityToastsState, useReducedMotion, useViewerState, useIsMobile, useResizablePanels, useDerivedSlideState, useZoomViewport, useEditorHistory, usePresentationSetup, useTouchGestures, useViewerDialogs, useEditorOperations, useViewerIntegration, useViewPreferencesSync, useLayoutSwitching, ViewerOptionsContext, useYjsDocumentSync, useCollaborationLivePatch, useFollowMode, useBroadcastFollower, safePrompt, scopeLayoutOptionsToActiveSlide, useToolbarVisibility, useKeyboardInsets, useModalDismissDrag, useCollaborativeState, useViewerOptionsContext, useVirtualizedSlides, useSwipeNavigation, useSheetDismissDrag, detectTargetType, parseEmailUrl, parseSlideFromUrl, ACTION_VERB_MAP, syncSelectionHandleOverlay } from './chunk-PC62KGU3.mjs';
3
+ import { MIN_ELEMENT_SIZE, DEFAULT_STROKE_COLOR, getConnectorPathGeometry, buildLineShadowCss, buildLineGlowFilter, renderConnectorMarker, getShapeVisualStyle, getTextStyleForElement, DEFAULT_TEXT_COLOR, renderVectorShape, isConnectorOrLineElement, build3DExtrusionData, getImageRenderStyle, cn, getImageSurfaceStyle, getTextLayoutStyle, renderTableElement, renderMediaElement, shouldRenderFallbackLabel, SHAPE_PRESETS, ANIMATION_PRESET_OPTIONS, DEFAULT_FILL_COLOR, hasDagDuotoneEffect, renderDagDuotoneSvgFilter, getImageSurfaceMaskStyle, getCropShapeClipPath, getImageTilingStyle, getDuotoneColors, getTextWarpStyle, renderTextSegments, buildReactChartViewModel, renderChartElement, buildTextBody3DSceneStyle, SLIDE_NAV_THUMBNAIL_WIDTH, DEFAULT_TEXT_FONT_SIZE, DEFAULT_FONT_FAMILY, TOOLBAR_SECTIONS, DEFAULT_SECTION_GROUP_ID, SHORTCUT_REFERENCE_ITEMS as SHORTCUT_REFERENCE_ITEMS$1, HYPERLINK_COLOR, GRID_SIZE, CONNECTOR_ARROW_OPTIONS, ARROW_SIZE_OPTIONS, startMotionPathPreview, startPreviewAnimation, stopPreviewAnimation, STROKE_DASH_OPTIONS } from './chunk-JANUSAEK.mjs';
4
+ import { hasShapeProperties, normalizeHexColor, colorWithOpacity, normalizeStrokeDashType, getSvgStrokeDasharray, getCompoundLineOffsets, getCompoundLineWidths, svgLineCap, hasTextProperties, connectorWrapperTransform, getAriaRoleDescription, getAriaLabel, getAriaRole, resolveElementInteractivity, isEditableTextElement, isElementRendered, resolveElementAriaAttributes, getImageEffectsOpacity, getImageEffectsFilter, inlineElementPointerEvents, isHollowShapeElement, LINK_TOOLTIP_HOST_CLASS, ACTION_BUTTON_PRESETS, mediaTransportVisible, isInkElement, getGroupChildParentFill, getElementLabel, SWITCHABLE_LAYOUT_TYPES, compileEquationTemplateMathMl, buildUserFontFaceStyles, readStoredViewerPrefs, resolveThemeCatalogEntry, THEME_CATALOG, writeStoredViewerPrefs, openPptxFile, readBackstageRecentFile, resolveAutosaveActivation, buildThemeColorMap, viewerOptionsToPreferences, applyPreferenceToOptions, listAutosaveSnapshots, deleteAutosaveSnapshot, resolveExpiredAutosaveSnapshots, resolveHistoryDepth, applyAutoCorrect, resolveImageResolutionScale, resolveAutosaveIntervalMs, resolveAutosaveIntervalSeconds, shouldShowAutosaveRecoveryPrompt, resolveOptionRootClasses, resolve3DRenderingFlags, paintedStrokeWidth, buildCssGradientFromShapeStyle, ensureActionAffordanceStyles, resolveElementActionAffordance, actionAffordanceLabels, resolveElementHighlightClick, applyHighlightClickStyle, getComputedEffectStyle, getSoftEdgeSvgFilter, buildStrokeOutline, buildHollowHitOutline, buildSubpathFillOverlay, isImageLikeElement, getComputedFillStyle, strokeOutlineViewBox, getElementTransform, resolveRevealedSmartArtNodes, resolveRevealedDrawingShapes, buildSmartArtA11y, canDrillDown, computeSmartArtElementLayout, flattenNodes, buildSummaryZoomView, isImageTiled, getImageColorWashStyle, readEditableText, placeCaretAtEnd, getPendingSelectionRestore, restoreSegmentSelection, getTextCompensationTransform, resolveChartKind, ensureChartInteractionStyles, applyChartPartHighlight, resolveRevealedChartData, formatAxisValue, hasPressureVariation, getInkReplayStyles, INK_REPLAY_KEYFRAMES, resolveInkColor, resolveInkWidth, resolveInkOpacity, pressuresToWidths, getContentPartReplayStyles, resolveOleType, getOleAriaLabel, getOleTypeColor, getOleTypeLabel, filterRenderedElements, resolveGroupChildFill, isLinkedTextBox, getOverflowSegments, shouldUseSvgWarp, getTextBodyRotationTransform, placeholderPromptDescriptor, isWedgeCalloutPresetShape, isElementActionable, RULER_THICKNESS, RULER_FONT_SIZE, buildPreviewElements, deriveSlideFieldContext, SLIDE_TRANSITION_OPTIONS, hiddenSlideCue, HIDDEN_SLIDE_SLASH_GRADIENT, HIDDEN_SLIDE_LABEL_KEY, visibleTemplateElements, themeToCssVars, shouldClearAutosaveCacheOnClose, masterViewCrudActions, applyMasterViewCrudAction, masterViewCrudFailureKey, applyMotionPathPreset, resetSlideLayoutPath, DEFAULT_INSERT_CHART_KIND, hasCopyableFormat, templateSchemeFromTheme, createBackstagePresentation, playFeedbackSound, shouldDiscardAutosaveOnSuccessfulSave, setMasterViewBackgroundColor, compatToastStackStyle, printPropertiesFrameSlides, printPropertiesSlidesPerPage, VIEWER_OPTIONS_TABS, DEFAULT_QUICK_ACCESS_COMMAND_IDS, isHeaderFooterDateTextVisible, isHeaderFooterHeaderTextVisible, isHeaderFooterFooterTextVisible, buildJoinCollaborationConfig, buildCreateCollaborationConfig, generateBroadcastRoomId, DEFAULT_BROADCAST_SERVER_URL, buildBroadcastViewerUrl, resolveTransportForServerUrl, elementIdSelector, ACTION_INDICATOR_CLASS, ACTION_INDICATOR_ICON_PATH, LINK_TOOLTIP_CLASS, LINK_TOOLTIP_PANEL_CLASS, LINK_TOOLTIP_LABEL_CLASS, LINK_TOOLTIP_HINT_CLASS, DEFAULT_PALETTE2, resolvePalette, computeDrawingViewBox, projectDrawingShapes, resolveRevealedDrawingShapeNodeIds, styleShadowFilter, buildChromeStyle, modelDataToBlobUrl, getImageSvgFilters, buildDuotoneCacheKey, getDuotoneCachedResult, applyDuotone, setDuotoneCachedResult, buildCacheKey, DEFAULT_COLOR_CHANGE_TOLERANCE, getCachedResult, applyColorChange, setCachedResult, getInlineEditorSelection, findChartPartTarget, advanceChartValueDrag, beginChartValueDrag, buildSurfaceChart3DDataForElement, buildBarChart3DDataForElement, buildLineChart3DDataForElement, buildAreaChart3DDataForElement, buildPieChart3DDataForElement, withChartTitle, buildSmartArt3DModel, collectCoherent3DOffNodeIds, extractPathPoints, generatePressureCircles, generateNibMarks, isBrowserOpenableMime, formatBytes, getOleDisplayName, getOleBadgeLabel, openUrlInNewTab, getSubstituteFontFamily, getWarpPath, getSlideBackgroundStyle, pushRecentColor, mruColorsPatch, filterCommands, resolveTitleBarStatusKey, TITLE_BAR_CLASSES, TITLE_BAR_DEFAULT_FILE_KEY, resolveScreenTip, masterViewBackgroundColor, buildFieldSubstitutionContext, shouldConfirmExternalHyperlink, safeOpenUrl, resolvePresentationAction, isPpactionUrl, parsePpactionUrl, isPresentationAdvanceClick, toggleBlackboard, PRESENT_TOOLBAR_CLASSES, buildContextMenuEntries, themeColorSchemesEqual, EXPANDED_MAX_HEIGHT, STATUS_BAR_CLASSES, buildBarActions, formatVersionTimestamp, formatRelativeTime, scanAvailableFontFamilies, PRESETS, CATEGORIES, convertOmmlToLatex, compileLatexEquation, convertLatexToOmml, EQUATION_TEMPLATES, 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, centeredSvgTextLines, computeInlineEditorRect, findSmartArtNodeText, setSmartArtNodeStyle, rebuildDrawingShapesIfCleared, shouldCommitSmartArtNodeText, updateSmartArtNodeText, groupIntoParagraphs, substituteFieldText, extraQuickAccessCommands, TAB_ROW_ACTION_CLASSES, listBackstageRecentFiles, BACKSTAGE_NAV, COMMON_FONT_SIZES, textFontSizePtToPx, INSERT_CHART_TYPES, CHARACTER_SPACING_OPTIONS, OFFICE_COLOR_SWATCHES, shapeFillChange, shapeOutlineChange, readRibbonTransitionDraft, ribbonTransitionUpdates, readSoundFileAsDataUrl, applyTransitionSoundFile, playSlideTransitionPreview, RIBBON_TRANSITION_PRESETS, transitionSoundOptions, transitionSoundSelectedValue, DEFAULT_MOTION_PATH_PRESET_ID, SLIDE_SHOW_OPTIONS, slideShowOptionChange, readSlideShowOption, SLIDE_VIRTUALIZATION_THRESHOLD, PRESENTATION_HIT_TEST_CSS, PRESENTATION_STAGE_ATTRIBUTE, getSlideTransitionAnimations, MORPH_CROSSFADE_GROUP_STYLE, MORPH_CROSSFADE_HALF_STYLE, SLIDE_TRANSITION_KEYFRAMES, buildStrokePathD, cursorForTool, annotationOverlayZIndex, presentationInkPath, resolveNotesSchematicBodyFontSizePx, motionPathFor, setMotionPath, getShapeAdjustmentHandleDescriptors, shouldShowElementHandles, PRESENTER_NAVIGATOR_LABEL_KEYS, PEN_COLORS, HIGHLIGHTER_COLORS, isBlackboardActive, scaleSlidesForSizeChange, slideSizeToCanvasPx, resolveSelectionPaneRename, PRESET_THEMES, resolveNotesSegments, segmentsToEditorHtml, DEBOUNCE_MS, createPlainNotesSegments, parseSegmentsFromRichEditor, segmentsToPlainText, getCurrentParagraphIndex, segmentsToParagraphs, paragraphsToSegments, MAX_INDENT_LEVEL, INDENT_PX, isUrlSafe, buildNotesPrintHtml, 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, backstageCardsFor, DEFAULT_VIEWER_PROFILE, resolveProfileInitial, AVATAR_COLOR_SWATCHES, resolveDefaultFontFamily, textFontSizePxToPt, buildFontCatalog, buildThemeColorSwatchGrid, themeColorSwatchRows, findSelectedThemeSwatch, themeSwatchCommit, RIBBON_SHAPE_SWATCHES, canGroupSelection, canUngroupSelection, canSetStrokeWidth, strokeWidthOf, TRANSITION_SOUND_OTHER_VALUE, TRANSITION_SOUND_NONE_VALUE, clearTransitionSound, ENTRANCE_PRESET_VALUES, EMPHASIS_PRESET_VALUES, EXIT_PRESET_VALUES, MOTION_PATH_FAMILIES, motionPathFamilyLabelKey, motionPathPresetsByFamily, motionPathPresetLabelKey, masterViewPseudoSlide, authorConnectorBetweenSites, findEraserHitElementId, generateTicks, rulerDragToGuidePosition, getElementTransformWithoutRotation, getActiveXControlOverlayView, buildCommentMarkers, COMMENT_MARKER_SIZE, collectConnectorSiteCandidates, getConnectorEndpointHandles, findConnectorSiteNear, motionPathToSvgD, motionPathEndPixel, isEditableMotionPath, setMotionPathEnd, themeColorLabel, buildThemeColorGrid, THEME_COLOR_SCHEME_KEYS, COMMON_FONTS, handleReadingViewKey, getLocalStorageUsageSummary, saveViewerProfile, clearAllLocalViewerData, isCurrentLayout, SLIDE_TEMPLATES, computeAnchoredPopupPosition, CONNECTOR_SITE_SNAP_PX, resolveConnectorEndpointUpdate, withConnectorEndpointUpdate, getShapeConnectionSites, isElementLocked, mergeSlideTransition, mapSlideSorterKey, isEditorTextInputTarget, clampSorterZoom, buildLayoutPreviewGeometry, buildSlideTemplateContent, elementLockTogglePatch, buildTableDataGrid, appendTableElementRow, removeLastTableElementRow, appendTableElementColumn, removeLastTableElementColumn, removeTableElementColumn, removeTableElementRow, setTableElementCellText, TABLE_STYLE_PRESETS, applyTableStylePreset, evenColumnWidths, redistributeColumnWidth, evenRowHeights, patchChartData, chartGridlinesState, chartGridlinesPatch, seriesSecondaryAxisPatch, setChartCategoryLabel, setChartCellValue, addChartCategory, removeChartCategory, addChartSeries, removeChartSeries, setChartAxisLogScale, setChartAxisTitleStyle, setChartAxisGridlineStyle, setChartSeriesMarker, setChartSeriesChartType, setChartDataPointFill, setChartDataPointExplosion, setChartDataPointMarker, setChartDataPointLabel, describeSmartArtBounds, canAddTopLevelNode, classifyExtraConnections, siblingIndex, siblingCount, canRemoveTopLevelNode, canInteractWithElement, buildOleObjectNamePatch, getOleObjectTypeLabel, sanitizeGradientStops, pptxActionToElementAction, withFrameSlides, withSlidesPerPage, applyThemeOverrideToSlide, COLOR_MAP_ALIAS_KEYS, DEFAULT_COLOR_MAP, schemaLabel, THEME_COLOR_SLOT_LABEL_KEYS, resolveSlideSizeSelection, SLIDE_SIZE_PRESETS, TRANSITION_VALID_DIRECTIONS, TRANSITION_ORIENTATION_TYPES, clampTransitionNumber, TRANSITION_SPEED_OPTIONS, TRANSITION_MORPH_OPTIONS, flattenTagCollections, resolveTemplateBackgroundRows, formatCommentTimestamp, commentMentionQuery, matchCommentMentionAuthors, buildAnimationTimelineRows, clearMotionPath, getEffectSoundState, setEffectSound, setAfterAnimation, setAfterAnimationColor, DIRECTIONAL_PRESETS, buildAnimationTimelineBars, motionPathPresetIdForPath, computeMergeCellRight, computeMergeCellDown, computeSplitCell, CHART_TYPE_OPTIONS, BAR3D_SHAPE_OPTIONS, bar3DShapePatch, RADAR_STYLE_OPTIONS, radarStylePatch, SURFACE_WIREFRAME_OPTIONS, surfaceWireframePatch, isSeriesUsingSecondaryAxis, listChartUserShapeDescriptors, withChartUserShapeAdded, createDefaultChartUserShape, withChartUserShapeRemoved, withChartUserShapeUpdated, SMARTART_COLOR_SCHEME_LABEL_KEYS, SMARTART_STYLE_LABEL_KEYS, addSmartArtNodeAsChild, removeSmartArtNode, addSiblingAfter, removeEmptyNode, demote, promote, reorder, clampCropValue, DUOTONE_PRESETS, ARTISTIC_EFFECTS, mediaTrimEndSeconds, trimmedMediaDurationMs, mediaTrimEndAbsoluteMs, mediaTrimEndMsFromAbsoluteMs, resolveActionType, ELEMENT_ACTION_TYPE_OPTIONS, elementActionToPptxAction, canCommitActionType, slideSizeFromPreset, withSlideSizeOrientation, TRANSITION_DIR_ARROWS, buildDirectionGrid, updateTagInCollections, deleteTagFromCollections, addTagToCollections, commentTextSegments, COMMENT_MENTION_CLASS, COMMENT_MENTION_ATTRIBUTE, insertCommentMention, reorderAnimationTimelineRows, applyAnimationTimelineOrder, animationEffectLabel, LBL, SEL, FILL_MODE_OPTIONS, SECTION_HEADING, NUM, switchSmartArtLayout, 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, GRADIENT_TYPE_OPTIONS, PATTERN_OPTIONS, FILL_PATTERN_LABEL_KEYS, openNativeEyeDropper, toggleText3dExtrusion, BEVEL_PRESETS } from './chunk-NV55GU5V.mjs';
5
+ import { LOCALE_CATALOG, translationsEn } from './chunk-FGTMS7LR.mjs';
6
6
  import React19, { createContext, useMemo, useState, useCallback, lazy, forwardRef, useEffect, useRef, Suspense, useLayoutEffect, useContext, Fragment as Fragment$1, useDeferredValue } from 'react';
7
7
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
8
8
  import { useTranslation } from 'react-i18next';
@@ -514,7 +514,7 @@ function FailedToLoad() {
514
514
  var LazyArea3DChartScene = React19.lazy(
515
515
  async () => {
516
516
  try {
517
- return await import('./Area3DChartScene-P6YM6ZL7.mjs');
517
+ return await import('./Area3DChartScene-AE2XYKDW.mjs');
518
518
  } catch {
519
519
  return { default: FailedToLoad };
520
520
  }
@@ -570,7 +570,7 @@ function FailedToLoad2() {
570
570
  var LazyBar3DChartScene = React19.lazy(
571
571
  async () => {
572
572
  try {
573
- return await import('./Bar3DChartScene-DIVOJURZ.mjs');
573
+ return await import('./Bar3DChartScene-FQV62XOI.mjs');
574
574
  } catch {
575
575
  return { default: FailedToLoad2 };
576
576
  }
@@ -626,7 +626,7 @@ function FailedToLoad3() {
626
626
  var LazyLine3DChartScene = React19.lazy(
627
627
  async () => {
628
628
  try {
629
- return await import('./Line3DChartScene-ZZVNUKIJ.mjs');
629
+ return await import('./Line3DChartScene-FEUY3PCE.mjs');
630
630
  } catch {
631
631
  return { default: FailedToLoad3 };
632
632
  }
@@ -682,7 +682,7 @@ function FailedToLoad4() {
682
682
  var LazyPieChart3DScene = React19.lazy(
683
683
  async () => {
684
684
  try {
685
- return await import('./PieChart3DScene-7LX3IL2Q.mjs');
685
+ return await import('./PieChart3DScene-VZI2VARG.mjs');
686
686
  } catch {
687
687
  return { default: FailedToLoad4 };
688
688
  }
@@ -738,7 +738,7 @@ function FailedToLoad5() {
738
738
  var LazySurfaceChart3DScene = React19.lazy(
739
739
  async () => {
740
740
  try {
741
- return await import('./SurfaceChart3DScene-ADA7NUIW.mjs');
741
+ return await import('./SurfaceChart3DScene-T36E2HBA.mjs');
742
742
  } catch {
743
743
  return { default: FailedToLoad5 };
744
744
  }
@@ -898,7 +898,7 @@ function ChartElementView({
898
898
  }
899
899
  };
900
900
  const handleDoubleClick = (e) => {
901
- if (!canEdit) {
901
+ if (!canEdit || !canDrillDown(element)) {
902
902
  return;
903
903
  }
904
904
  const target = e.target;
@@ -923,8 +923,7 @@ function ChartElementView({
923
923
  setTitleDraft(null);
924
924
  };
925
925
  const baseChartData = previewData ?? element.chartData;
926
- const chartBuild = animationState?.build?.kind === "chart" ? animationState.build : void 0;
927
- const revealedChartData = chartBuild && baseChartData ? applyChartBuildReveal(baseChartData, chartBuild) : baseChartData;
926
+ const revealedChartData = baseChartData ? resolveRevealedChartData(baseChartData, animationState) : baseChartData;
928
927
  const renderedElement = revealedChartData === element.chartData ? element : { ...element, chartData: revealedChartData };
929
928
  return /* @__PURE__ */ jsxs(
930
929
  "div",
@@ -1559,7 +1558,7 @@ var ConnectorElementRenderer = React19.memo(
1559
1558
  top: el.y,
1560
1559
  width: boxWidth,
1561
1560
  height: boxHeight,
1562
- transform: getElementTransform(el),
1561
+ transform: connectorWrapperTransform(el),
1563
1562
  transformOrigin: "center",
1564
1563
  background: "transparent",
1565
1564
  border: "none",
@@ -1738,6 +1737,8 @@ function getElementInteractionProps({
1738
1737
  onActionClick
1739
1738
  }) {
1740
1739
  const hasHoverAction = Boolean(element.actionHover);
1740
+ const highlight = resolveElementHighlightClick(element.actionClick, element.actionHover);
1741
+ const hoverLeaveStyle = highlight.hover?.leaveStyle;
1741
1742
  return {
1742
1743
  onKeyDown: (event) => {
1743
1744
  if (event.key === "Enter" && isEditableText && canInteract && !isInlineEditing) {
@@ -1764,30 +1765,26 @@ function getElementInteractionProps({
1764
1765
  }
1765
1766
  event.stopPropagation();
1766
1767
  event.preventDefault();
1767
- if (element.actionClick.highlightClick) {
1768
+ if (highlight.click) {
1768
1769
  const target = event.currentTarget;
1769
- target.style.filter = "brightness(1.18)";
1770
- target.style.outline = "2px solid rgba(59, 130, 246, 0.6)";
1770
+ const { style, clearStyle, durationMs } = highlight.click;
1771
+ applyHighlightClickStyle(target, style);
1771
1772
  window.setTimeout(() => {
1772
- target.style.filter = "";
1773
- target.style.outline = "";
1774
- }, 320);
1773
+ applyHighlightClickStyle(target, clearStyle);
1774
+ }, durationMs);
1775
1775
  }
1776
1776
  onActionClick(element.id, element.actionClick);
1777
1777
  },
1778
1778
  onMouseEnter: (event) => {
1779
- if (element.actionHover?.highlightClick) {
1780
- const target = event.currentTarget;
1781
- target.style.filter = "brightness(1.15)";
1782
- target.style.outline = "2px solid rgba(59, 130, 246, 0.5)";
1779
+ if (highlight.hover) {
1780
+ applyHighlightClickStyle(event.currentTarget, highlight.hover.enterStyle);
1783
1781
  }
1784
1782
  if (isPresentationPassive && element.actionHover && onActionClick && (element.actionHover.url || element.actionHover.targetSlideIndex !== void 0)) {
1785
1783
  onActionClick(element.id, element.actionHover);
1786
1784
  }
1787
1785
  },
1788
- onMouseLeave: hasHoverAction && element.actionHover?.highlightClick ? (event) => {
1789
- event.currentTarget.style.filter = "";
1790
- event.currentTarget.style.outline = "";
1786
+ onMouseLeave: hasHoverAction && hoverLeaveStyle ? (event) => {
1787
+ applyHighlightClickStyle(event.currentTarget, hoverLeaveStyle);
1791
1788
  } : void 0,
1792
1789
  title: canInteract && element.actionClick ? void 0 : element.actionClick?.tooltip || element.actionHover?.tooltip || void 0
1793
1790
  };
@@ -1935,6 +1932,9 @@ function renderOutlinePaint(paint) {
1935
1932
  }
1936
1933
  );
1937
1934
  }
1935
+ if (paint.kind === "rectPath") {
1936
+ return /* @__PURE__ */ jsx("pattern", { id: paint.id, patternUnits: "objectBoundingBox", width: 1, height: 1, children: /* @__PURE__ */ jsx("image", { href: paint.href, x: 0, y: 0, width: 1, height: 1, preserveAspectRatio: "none" }) });
1937
+ }
1938
1938
  const stops = paint.stops.map((stop, idx) => /* @__PURE__ */ jsx(
1939
1939
  "stop",
1940
1940
  {
@@ -2246,18 +2246,16 @@ var ElementRenderer = React19.memo(
2246
2246
  const canEditChart = effectiveCanInteract;
2247
2247
  const hasAction = Boolean(el.actionClick && onActionClick);
2248
2248
  const isZoom = el.type === "zoom" && Boolean(onZoomClick);
2249
- const isActionable = isElementActionable(el, {
2249
+ const aria = resolveElementAriaAttributes(el, {
2250
2250
  hasActionHandler: Boolean(onActionClick),
2251
2251
  hasHyperlinkHandler: Boolean(onHyperlinkClick),
2252
2252
  hasZoomHandler: Boolean(onZoomClick)
2253
2253
  });
2254
+ const isActionable = aria.actionable;
2254
2255
  const selB = isSelected ? `outline-1 -outline-offset-1 outline-${selClr} ring-2 ring-${selClr}/50` : showHoverBorder ? "outline-1 -outline-offset-1 outline-transparent hover:outline-primary/40" : "";
2255
2256
  const cur = effectiveIsInlineEditing ? "cursor-text" : effectiveCanInteract ? !allow.movable ? "cursor-default" : "cursor-move" : hasAction || isZoom ? "cursor-pointer" : "";
2256
2257
  const isPresentationPassive = presenting === true;
2257
2258
  const isFullscreenMedia = el.type === "media" && Boolean(el.fullScreen) && isPresentationPassive && isMediaPlaying;
2258
- const ariaRole = getAriaRole(el, { actionable: isActionable });
2259
- const ariaLabel = getAriaLabel(el);
2260
- const ariaRoleDescription = getAriaRoleDescription(el);
2261
2259
  const isFocusable = effectiveCanInteract || isActionable;
2262
2260
  const interactionProps = getElementInteractionProps({
2263
2261
  element: el,
@@ -2275,9 +2273,10 @@ var ElementRenderer = React19.memo(
2275
2273
  "data-pptx-element": "true",
2276
2274
  "data-element-id": el.id,
2277
2275
  "data-pptx-action": isActionable ? "click" : void 0,
2278
- role: ariaRole,
2279
- "aria-label": ariaLabel,
2280
- "aria-roledescription": ariaRoleDescription,
2276
+ role: aria.role,
2277
+ "aria-label": aria.label,
2278
+ "aria-roledescription": aria.roleDescription,
2279
+ "aria-hidden": aria.hidden ? true : void 0,
2281
2280
  "aria-selected": isSelected ? true : void 0,
2282
2281
  tabIndex: isFocusable ? 0 : -1,
2283
2282
  className: cn(
@@ -3029,7 +3028,7 @@ function FailedToLoad6() {
3029
3028
  var LazyModel3DScene = React19.lazy(
3030
3029
  async () => {
3031
3030
  try {
3032
- return await import('./Model3DScene-XXMAAKBR.mjs');
3031
+ return await import('./Model3DScene-V3DHIISV.mjs');
3033
3032
  } catch {
3034
3033
  return { default: FailedToLoad6 };
3035
3034
  }
@@ -3736,13 +3735,15 @@ function shapeBody(shape) {
3736
3735
  function DrawingShapeRenderer({
3737
3736
  elementId,
3738
3737
  shapes,
3738
+ allShapes = shapes,
3739
3739
  style,
3740
3740
  palette,
3741
3741
  nodes,
3742
3742
  nodeLabels
3743
3743
  }) {
3744
- const viewBox = computeDrawingViewBox(shapes);
3744
+ const viewBox = computeDrawingViewBox(allShapes);
3745
3745
  const rendered = projectDrawingShapes(elementId, shapes, viewBox, palette, style);
3746
+ const nodeIds = nodes ? resolveRevealedDrawingShapeNodeIds(allShapes, shapes, nodes) : void 0;
3746
3747
  const shadow = styleShadowFilter(style);
3747
3748
  return /* @__PURE__ */ jsx(
3748
3749
  "svg",
@@ -3752,7 +3753,7 @@ function DrawingShapeRenderer({
3752
3753
  preserveAspectRatio: "xMidYMid meet",
3753
3754
  "data-testid": "smartart-drawing-shapes",
3754
3755
  children: rendered.map((shape, i) => {
3755
- const nodeId = nodes ? resolveDrawingShapeNodeId(shapes[i], i, shapes, nodes) : void 0;
3756
+ const nodeId = nodeIds?.[i];
3756
3757
  const nodeLabel = nodeId ? nodeLabels?.get(nodeId) : void 0;
3757
3758
  const groupProps = nodeId ? smartArtNodeGroupProps(nodeId, shadow, nodeLabel) : { style: { filter: shadow } };
3758
3759
  return /* @__PURE__ */ jsxs("g", { ...groupProps, children: [
@@ -3917,14 +3918,12 @@ function SmartArtRendererImpl({
3917
3918
  }
3918
3919
  const smartArtData = element.smartArtData;
3919
3920
  const { nodes, drawingShapes, chrome } = smartArtData;
3920
- const diagramBuild = animationState?.build?.kind === "diagram" ? animationState.build : void 0;
3921
- const shownNodeCount = diagramBuild ? revealedSmartArtNodeCount(nodes, diagramBuild) : nodes.length;
3922
- const isPartialBuild = diagramBuild !== void 0 && shownNodeCount < nodes.length;
3923
- const revealedNodes = isPartialBuild ? nodes.slice(0, shownNodeCount) : nodes;
3924
- const revealedShapes = isPartialBuild && drawingShapes && drawingShapes.length > 0 ? drawingShapes.slice(
3925
- 0,
3926
- Math.ceil(shownNodeCount / Math.max(nodes.length, 1) * drawingShapes.length)
3927
- ) : drawingShapes;
3921
+ const { nodes: revealedNodes } = resolveRevealedSmartArtNodes(
3922
+ nodes,
3923
+ animationState,
3924
+ smartArtData.presLayoutVars
3925
+ );
3926
+ const revealedShapes = drawingShapes && drawingShapes.length > 0 ? resolveRevealedDrawingShapes(drawingShapes, nodes, animationState) : drawingShapes;
3928
3927
  if (nodes.length === 0) {
3929
3928
  return /* @__PURE__ */ jsx(
3930
3929
  "div",
@@ -3938,7 +3937,7 @@ function SmartArtRendererImpl({
3938
3937
  const style = resolveStyle(element);
3939
3938
  const a11y = buildSmartArtA11y(smartArtData);
3940
3939
  const nodeLabels = new Map(a11y.nodes.map((n) => [n.id, n.label]));
3941
- const editable = canEdit && Boolean(onUpdateElement);
3940
+ const editable = canEdit && Boolean(onUpdateElement) && canDrillDown(element);
3942
3941
  const handleCommitNodeText = (nodeId, text) => {
3943
3942
  if (!onUpdateElement || !shouldCommitSmartArtNodeText(smartArtData, nodeId, text)) {
3944
3943
  return;
@@ -3980,6 +3979,7 @@ function SmartArtRendererImpl({
3980
3979
  {
3981
3980
  elementId: element.id,
3982
3981
  shapes: revealedShapes,
3982
+ allShapes: drawingShapes,
3983
3983
  style,
3984
3984
  palette,
3985
3985
  nodes,
@@ -4043,6 +4043,28 @@ function arePropsEqual(prev, next) {
4043
4043
  if (prevBuild?.kind !== nextBuild?.kind || prevBuild?.mode !== nextBuild?.mode || prevBuild?.progress !== nextBuild?.progress) {
4044
4044
  return false;
4045
4045
  }
4046
+ return sameDiagramReveal(prev.animationState?.diagramReveal, next.animationState?.diagramReveal);
4047
+ }
4048
+ function sameDiagramReveal(prev, next) {
4049
+ if (prev === next) {
4050
+ return true;
4051
+ }
4052
+ if (!prev || !next) {
4053
+ return false;
4054
+ }
4055
+ if (prev.mode !== next.mode || prev.descriptor.background !== next.descriptor.background) {
4056
+ return false;
4057
+ }
4058
+ const prevIds = prev.descriptor.nodeIds;
4059
+ const nextIds = next.descriptor.nodeIds;
4060
+ if (prevIds.size !== nextIds.size) {
4061
+ return false;
4062
+ }
4063
+ for (const id of prevIds) {
4064
+ if (!nextIds.has(id)) {
4065
+ return false;
4066
+ }
4067
+ }
4046
4068
  return true;
4047
4069
  }
4048
4070
  var SmartArtRenderer = React19.memo(SmartArtRendererImpl, arePropsEqual);
@@ -4114,7 +4136,8 @@ function SmartArt3DRenderer({
4114
4136
  );
4115
4137
  return buildSmartArt3DModel(layoutResult, {
4116
4138
  background: chrome?.backgroundColor,
4117
- spatial: true
4139
+ spatial: true,
4140
+ coherent3DOffNodeIds: collectCoherent3DOffNodeIds(nodes)
4118
4141
  });
4119
4142
  }, [element]);
4120
4143
  const svgFallback = /* @__PURE__ */ jsx(SmartArtRenderer, { element, className });
@@ -5722,7 +5745,7 @@ var ATXT = [
5722
5745
  ];
5723
5746
  function ShapeArrangeExtras(p) {
5724
5747
  const { t } = useTranslation();
5725
- const canGroup = canGroupSelection(p.canEdit, p.selectedCount);
5748
+ const canGroup = canGroupSelection(p.canEdit, p.selectedCount, p.selectionGroupable);
5726
5749
  const canUngroup = canUngroupSelection(p.canEdit, p.selectedElement);
5727
5750
  const canStrokeWidth = canSetStrokeWidth(p.canEdit, p.selectedElement);
5728
5751
  const strokeWidth = strokeWidthOf(p.selectedElement);
@@ -5854,6 +5877,7 @@ function ArrangeSection(p) {
5854
5877
  canEdit: p.canEdit,
5855
5878
  selectedElement: p.selectedElement,
5856
5879
  selectedCount: p.selectedCount,
5880
+ selectionGroupable: p.selectionGroupable,
5857
5881
  onGroupElements: p.onGroupElements,
5858
5882
  onUngroupElement: p.onUngroupElement,
5859
5883
  onUpdateElementStyle: p.onUpdateElementStyle
@@ -6309,7 +6333,7 @@ function AccountPage() {
6309
6333
  return void 0;
6310
6334
  });
6311
6335
  };
6312
- const version = "3.5.3" ;
6336
+ const version = "3.6.0" ;
6313
6337
  return /* @__PURE__ */ jsxs("div", { className: "mt-8 max-w-[700px] space-y-6", children: [
6314
6338
  /* @__PURE__ */ jsxs("section", { className: cardClass, children: [
6315
6339
  /* @__PURE__ */ jsxs("h2", { className: "flex items-center gap-2 text-sm font-semibold", children: [
@@ -8190,6 +8214,52 @@ function RecentColorsRow({
8190
8214
  }
8191
8215
  );
8192
8216
  }
8217
+ var ThemeColorMapContext = createContext(void 0);
8218
+ var ThemeColorMapProvider = ThemeColorMapContext.Provider;
8219
+ function useThemeColorMap() {
8220
+ return useContext(ThemeColorMapContext);
8221
+ }
8222
+ function ThemeColorSwatchGrid({
8223
+ prefix,
8224
+ disabled,
8225
+ selectedRef,
8226
+ selectedHex,
8227
+ onPick
8228
+ }) {
8229
+ const { t } = useTranslation();
8230
+ const themeColorMap = useThemeColorMap();
8231
+ const columns = useMemo(() => buildThemeColorSwatchGrid(themeColorMap), [themeColorMap]);
8232
+ const rows = useMemo(() => themeColorSwatchRows(columns), [columns]);
8233
+ const selected = useMemo(
8234
+ () => findSelectedThemeSwatch(columns, selectedRef, selectedHex),
8235
+ [columns, selectedRef, selectedHex]
8236
+ );
8237
+ if (columns.length === 0) {
8238
+ return null;
8239
+ }
8240
+ return /* @__PURE__ */ jsxs("div", { className: "mt-1", children: [
8241
+ /* @__PURE__ */ jsx("div", { className: "text-[10px] text-muted-foreground mb-1", children: t("pptx.colorPicker.themeColors") }),
8242
+ /* @__PURE__ */ jsx("div", { className: "flex flex-col gap-0.5", children: rows.map((row, rowIndex) => (
8243
+ // eslint-disable-next-line react/no-array-index-key
8244
+ /* @__PURE__ */ jsx("div", { className: "flex gap-0.5", children: row.map(
8245
+ (swatch, colIndex) => swatch ? /* @__PURE__ */ jsx(
8246
+ "button",
8247
+ {
8248
+ type: "button",
8249
+ disabled,
8250
+ "data-pptx-compact": true,
8251
+ title: swatch.label,
8252
+ "aria-label": swatch.label,
8253
+ className: `h-4 w-4 rounded-sm border transition-transform hover:scale-110 disabled:opacity-40 disabled:cursor-not-allowed ${selected === swatch ? "border-primary ring-1 ring-primary" : "border-border"}`,
8254
+ style: { backgroundColor: swatch.hex },
8255
+ onClick: () => onPick(themeSwatchCommit(swatch))
8256
+ },
8257
+ `${prefix}-theme-${swatch.ref.scheme}-${rowIndex}`
8258
+ ) : /* @__PURE__ */ jsx("div", { className: "h-4 w-4" }, `${prefix}-theme-empty-${rowIndex}-${colIndex}`)
8259
+ ) }, `${prefix}-theme-row-${rowIndex}`)
8260
+ )) })
8261
+ ] });
8262
+ }
8193
8263
  var LINE_SPACING_OPTIONS = [
8194
8264
  { label: "1.0", value: 1 },
8195
8265
  { label: "1.15", value: 1.15 },
@@ -8362,18 +8432,6 @@ function getEffectiveTextStyle(element, tableEditorState) {
8362
8432
  }
8363
8433
  return void 0;
8364
8434
  }
8365
- var FONT_COLOR_PRESETS = [
8366
- "#000000",
8367
- "#ffffff",
8368
- "#ff0000",
8369
- "#00aa00",
8370
- "#0000ff",
8371
- "#ff8800",
8372
- "#8800cc",
8373
- "#00cccc",
8374
- "#ff69b4",
8375
- "#808080"
8376
- ];
8377
8435
  var HIGHLIGHT_COLOR_PRESETS = [
8378
8436
  "#ffff00",
8379
8437
  "#00ff00",
@@ -8395,6 +8453,7 @@ function TextSection(p) {
8395
8453
  const canFormat = isTextEl || isTable;
8396
8454
  const effectiveTs = getEffectiveTextStyle(p.selectedElement, p.tableEditorState);
8397
8455
  const currentColor = isTextEl && p.selectedElement && hasTextProperties(p.selectedElement) ? p.selectedElement.textSegments?.[0]?.style?.color ?? p.selectedElement.textStyle?.color ?? "#000000" : effectiveTs?.color ?? "#000000";
8456
+ const currentColorThemeRef = isTextEl && p.selectedElement && hasTextProperties(p.selectedElement) ? p.selectedElement.textSegments?.[0]?.style?.colorRef ?? p.selectedElement.textStyle?.colorRef : void 0;
8398
8457
  const currentHighlight = isTextEl && p.selectedElement && hasTextProperties(p.selectedElement) ? p.selectedElement.textSegments?.[0]?.style?.highlightColor ?? p.selectedElement.textStyle?.highlightColor ?? "#ffff00" : "#ffff00";
8399
8458
  const colorInputRef = useRef(null);
8400
8459
  const highlightInputRef = useRef(null);
@@ -8404,11 +8463,11 @@ function TextSection(p) {
8404
8463
  const highlightMenuRef = useRef(null);
8405
8464
  const { pushColor } = useRecentColors();
8406
8465
  const handleColorChange = useCallback(
8407
- (color) => {
8466
+ (color, ref) => {
8408
8467
  if (!canFormat) {
8409
8468
  return;
8410
8469
  }
8411
- p.onUpdateTextStyle({ color });
8470
+ p.onUpdateTextStyle({ color, colorRef: ref });
8412
8471
  pushColor(color);
8413
8472
  },
8414
8473
  [canFormat, p, pushColor]
@@ -8739,19 +8798,31 @@ function TextSection(p) {
8739
8798
  ]
8740
8799
  }
8741
8800
  ),
8742
- /* @__PURE__ */ jsx(RibbonMenu, { anchorRef: fontColorRef, className: "hidden group-hover:block pt-1", children: /* @__PURE__ */ jsxs("div", { className: "rounded-lg border border-border bg-popover backdrop-blur-lg shadow-2xl p-2 w-36", children: [
8743
- /* @__PURE__ */ jsx("div", { className: "grid grid-cols-5 gap-1.5 mb-2", children: FONT_COLOR_PRESETS.map((c) => /* @__PURE__ */ jsx(
8801
+ /* @__PURE__ */ jsx(RibbonMenu, { anchorRef: fontColorRef, className: "hidden group-hover:block pt-1", children: /* @__PURE__ */ jsxs("div", { className: "rounded-lg border border-border bg-popover backdrop-blur-lg shadow-2xl p-2 w-48", children: [
8802
+ /* @__PURE__ */ jsx(
8803
+ ThemeColorSwatchGrid,
8804
+ {
8805
+ prefix: "font-color",
8806
+ disabled: !canMut,
8807
+ selectedRef: currentColorThemeRef,
8808
+ selectedHex: currentColor,
8809
+ onPick: (c) => handleColorChange(c.hex, c.ref)
8810
+ }
8811
+ ),
8812
+ /* @__PURE__ */ jsx("div", { className: "text-[10px] text-muted-foreground mt-1 mb-1", children: t("pptx.colorPicker.standardColors") }),
8813
+ /* @__PURE__ */ jsx("div", { className: "grid grid-cols-5 gap-1.5 mb-2", children: OFFICE_COLOR_SWATCHES.map((c) => /* @__PURE__ */ jsx(
8744
8814
  "button",
8745
8815
  {
8746
8816
  type: "button",
8747
- "aria-label": c,
8817
+ "aria-label": c.label,
8818
+ title: c.label,
8748
8819
  "data-pptx-compact": true,
8749
- className: `w-5 h-5 rounded-full border transition-transform hover:scale-125 ${currentColor?.toLowerCase() === c ? "border-primary ring-1 ring-primary" : "border-border"}`,
8750
- style: { backgroundColor: c },
8820
+ className: `w-5 h-5 rounded-full border transition-transform hover:scale-125 ${currentColor?.toLowerCase() === c.hex ? "border-primary ring-1 ring-primary" : "border-border"}`,
8821
+ style: { backgroundColor: c.hex },
8751
8822
  onMouseDown: (e) => e.preventDefault(),
8752
- onClick: () => handleColorChange(c)
8823
+ onClick: () => handleColorChange(c.hex)
8753
8824
  },
8754
- c
8825
+ c.hex
8755
8826
  )) }),
8756
8827
  /* @__PURE__ */ jsx(
8757
8828
  "button",
@@ -9367,6 +9438,7 @@ function MobileSectionBody({
9367
9438
  canEdit: p.canEdit,
9368
9439
  selectedElement: p.selectedElement,
9369
9440
  selectedCount: p.selectedCount,
9441
+ selectionGroupable: p.selectionGroupable,
9370
9442
  onAlignElements: p.onAlignElements,
9371
9443
  onDistributeElements: p.onDistributeElements,
9372
9444
  canDistribute: p.canDistribute,
@@ -9636,12 +9708,29 @@ function ShapeColorPopover({
9636
9708
  onToggle,
9637
9709
  disabled,
9638
9710
  swatchAriaLabel,
9711
+ selectedRef,
9712
+ selectedHex,
9639
9713
  onApply,
9640
9714
  onClose
9641
9715
  }) {
9716
+ const { t } = useTranslation();
9642
9717
  return /* @__PURE__ */ jsxs("div", { className: "relative", ref: anchorRef, children: [
9643
9718
  /* @__PURE__ */ jsx("button", { type: "button", disabled, className: pill, title, onClick: onToggle, children: icon }),
9644
9719
  open && /* @__PURE__ */ jsx(RibbonMenu, { anchorRef, className: "pt-1", children: /* @__PURE__ */ jsxs("div", { className: "rounded-lg border border-border bg-popover backdrop-blur-lg shadow-2xl p-2", children: [
9720
+ /* @__PURE__ */ jsx(
9721
+ ThemeColorSwatchGrid,
9722
+ {
9723
+ prefix,
9724
+ disabled,
9725
+ selectedRef,
9726
+ selectedHex,
9727
+ onPick: (c) => {
9728
+ onApply(c.hex, c.ref);
9729
+ onClose();
9730
+ }
9731
+ }
9732
+ ),
9733
+ /* @__PURE__ */ jsx("div", { className: "mt-1 text-[10px] text-muted-foreground mb-1", children: t("pptx.colorPicker.standardColors") }),
9645
9734
  /* @__PURE__ */ jsx("div", { className: "grid grid-cols-6 gap-1", children: RIBBON_SHAPE_SWATCHES.map((c) => /* @__PURE__ */ jsx(
9646
9735
  "button",
9647
9736
  {
@@ -9676,6 +9765,7 @@ var TOP_SHAPES = SHAPE_PRESETS.slice(0, 12);
9676
9765
  function DrawingGroup(p) {
9677
9766
  const { t } = useTranslation();
9678
9767
  const { pushColor } = useRecentColors();
9768
+ const selectedShapeStyle = p.selectedElement && hasShapeProperties(p.selectedElement) ? p.selectedElement.shapeStyle : void 0;
9679
9769
  const [shapesOpen, setShapesOpen] = useState(false);
9680
9770
  const [arrangeOpen, setArrangeOpen] = useState(false);
9681
9771
  const [fillOpen, setFillOpen] = useState(false);
@@ -9848,8 +9938,10 @@ function DrawingGroup(p) {
9848
9938
  onToggle: () => setFillOpen((v) => !v),
9849
9939
  disabled: !p.canEdit || !p.selectedElement,
9850
9940
  swatchAriaLabel: "Fill colour",
9851
- onApply: (c) => {
9852
- p.onUpdateElementStyle?.(shapeFillChange(c));
9941
+ selectedRef: selectedShapeStyle?.fillColorRef,
9942
+ selectedHex: selectedShapeStyle?.fillColor,
9943
+ onApply: (c, ref) => {
9944
+ p.onUpdateElementStyle?.(shapeFillChange(c, ref));
9853
9945
  pushColor(c);
9854
9946
  },
9855
9947
  onClose: () => setFillOpen(false)
@@ -9866,8 +9958,10 @@ function DrawingGroup(p) {
9866
9958
  onToggle: () => setOutlineOpen((v) => !v),
9867
9959
  disabled: !p.canEdit || !p.selectedElement,
9868
9960
  swatchAriaLabel: "Outline colour",
9869
- onApply: (c) => {
9870
- p.onUpdateElementStyle?.(shapeOutlineChange(c));
9961
+ selectedRef: selectedShapeStyle?.strokeColorRef,
9962
+ selectedHex: selectedShapeStyle?.strokeColor,
9963
+ onApply: (c, ref) => {
9964
+ p.onUpdateElementStyle?.(shapeOutlineChange(c, ref));
9871
9965
  pushColor(c);
9872
9966
  },
9873
9967
  onClose: () => setOutlineOpen(false)
@@ -10719,6 +10813,7 @@ function Toolbar(p) {
10719
10813
  canEdit: p.canEdit,
10720
10814
  selectedElement: p.selectedElement,
10721
10815
  selectedCount: p.selectedCount,
10816
+ selectionGroupable: p.selectionGroupable,
10722
10817
  onAlignElements: p.onAlignElements,
10723
10818
  onDistributeElements: p.onDistributeElements,
10724
10819
  canDistribute: p.canDistribute,
@@ -13323,6 +13418,7 @@ function contextMenuContext(props) {
13323
13418
  elementType: props.selectedElement?.type ?? null,
13324
13419
  table: tableCell(props),
13325
13420
  hasMultiSelection: Boolean(props.hasMultiSelection),
13421
+ selectionGroupable: props.selectionGroupable,
13326
13422
  // Both AI entries appear together or not at all, so a viewer that wired
13327
13423
  // only one of them does not produce a menu the other bindings cannot match.
13328
13424
  aiEnabled: Boolean(props.onAskAi) && Boolean(props.onFixAi)
@@ -22596,6 +22692,129 @@ function ChartTypeSelector({
22596
22692
  ] })
22597
22693
  ] });
22598
22694
  }
22695
+ function ChartUserShapeOptions({
22696
+ chartData,
22697
+ canEdit,
22698
+ onUpdateChartData
22699
+ }) {
22700
+ const { t } = useTranslation();
22701
+ const shapes = chartData.userShapes;
22702
+ const descriptors = listChartUserShapeDescriptors(shapes);
22703
+ const kindLabel = (kind) => {
22704
+ const key = `pptx.chart.userShapeKind${kind.charAt(0).toUpperCase()}${kind.slice(1)}`;
22705
+ return t(key);
22706
+ };
22707
+ return /* @__PURE__ */ jsxs("div", { className: CARD2, children: [
22708
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between", children: [
22709
+ /* @__PURE__ */ jsx("div", { className: HEADING2, children: t("pptx.chart.userShapes") }),
22710
+ /* @__PURE__ */ jsx(
22711
+ "button",
22712
+ {
22713
+ type: "button",
22714
+ disabled: !canEdit,
22715
+ className: BTN2,
22716
+ onClick: () => onUpdateChartData({
22717
+ userShapes: withChartUserShapeAdded(shapes, createDefaultChartUserShape())
22718
+ }),
22719
+ children: t("pptx.chart.userShapeAddTextBox")
22720
+ }
22721
+ )
22722
+ ] }),
22723
+ descriptors.length === 0 ? /* @__PURE__ */ jsx("div", { className: "text-[11px] text-muted-foreground", children: t("pptx.chart.userShapesEmpty") }) : /* @__PURE__ */ jsx("div", { className: "space-y-2", children: descriptors.map((d) => /* @__PURE__ */ jsxs("div", { className: "space-y-1 rounded border border-border p-1.5", children: [
22724
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 text-[11px]", children: [
22725
+ /* @__PURE__ */ jsxs("span", { className: "flex-1 truncate", children: [
22726
+ kindLabel(d.kind),
22727
+ d.text ? ` - ${d.text}` : ""
22728
+ ] }),
22729
+ /* @__PURE__ */ jsx(
22730
+ "button",
22731
+ {
22732
+ type: "button",
22733
+ disabled: !canEdit,
22734
+ "aria-label": t("pptx.chart.userShapeDelete"),
22735
+ className: BTN2,
22736
+ onClick: () => onUpdateChartData({ userShapes: withChartUserShapeRemoved(shapes, d.index) }),
22737
+ children: "\u2715"
22738
+ }
22739
+ )
22740
+ ] }),
22741
+ d.editable ? /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1 text-[11px]", children: [
22742
+ /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: t("pptx.chart.userShapeFrom") }),
22743
+ /* @__PURE__ */ jsx(
22744
+ "input",
22745
+ {
22746
+ type: "number",
22747
+ step: "0.01",
22748
+ min: 0,
22749
+ max: 1,
22750
+ disabled: !canEdit,
22751
+ className: INPUT2,
22752
+ value: d.from.x,
22753
+ onChange: (e) => onUpdateChartData({
22754
+ userShapes: withChartUserShapeUpdated(shapes, d.index, {
22755
+ from: { ...d.from, x: Number(e.target.value) }
22756
+ })
22757
+ })
22758
+ }
22759
+ ),
22760
+ /* @__PURE__ */ jsx(
22761
+ "input",
22762
+ {
22763
+ type: "number",
22764
+ step: "0.01",
22765
+ min: 0,
22766
+ max: 1,
22767
+ disabled: !canEdit,
22768
+ className: INPUT2,
22769
+ value: d.from.y,
22770
+ onChange: (e) => onUpdateChartData({
22771
+ userShapes: withChartUserShapeUpdated(shapes, d.index, {
22772
+ from: { ...d.from, y: Number(e.target.value) }
22773
+ })
22774
+ })
22775
+ }
22776
+ ),
22777
+ d.anchor === "rel" && d.to ? /* @__PURE__ */ jsxs(Fragment, { children: [
22778
+ /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: t("pptx.chart.userShapeTo") }),
22779
+ /* @__PURE__ */ jsx(
22780
+ "input",
22781
+ {
22782
+ type: "number",
22783
+ step: "0.01",
22784
+ min: 0,
22785
+ max: 1,
22786
+ disabled: !canEdit,
22787
+ className: INPUT2,
22788
+ value: d.to.x,
22789
+ onChange: (e) => onUpdateChartData({
22790
+ userShapes: withChartUserShapeUpdated(shapes, d.index, {
22791
+ to: { ...d.to, x: Number(e.target.value) }
22792
+ })
22793
+ })
22794
+ }
22795
+ ),
22796
+ /* @__PURE__ */ jsx(
22797
+ "input",
22798
+ {
22799
+ type: "number",
22800
+ step: "0.01",
22801
+ min: 0,
22802
+ max: 1,
22803
+ disabled: !canEdit,
22804
+ className: INPUT2,
22805
+ value: d.to.y,
22806
+ onChange: (e) => onUpdateChartData({
22807
+ userShapes: withChartUserShapeUpdated(shapes, d.index, {
22808
+ to: { ...d.to, y: Number(e.target.value) }
22809
+ })
22810
+ })
22811
+ }
22812
+ )
22813
+ ] }) : null
22814
+ ] }) : /* @__PURE__ */ jsx("div", { className: "text-[10px] italic text-muted-foreground", children: t("pptx.chart.userShapeNotEditable") })
22815
+ ] }, d.index)) })
22816
+ ] });
22817
+ }
22599
22818
  function ChartDataPanel({ selectedElement, canEdit, onUpdateElement }) {
22600
22819
  const chartData = selectedElement.chartData;
22601
22820
  const followDataPoint = useViewerOptionsContext().advanced.chartPropertiesFollowDataPoint;
@@ -22924,6 +23143,14 @@ function ChartDataPanel({ selectedElement, canEdit, onUpdateElement }) {
22924
23143
  onToggleSecondaryAxis: toggleSecondaryAxis
22925
23144
  }
22926
23145
  ),
23146
+ /* @__PURE__ */ jsx(
23147
+ ChartUserShapeOptions,
23148
+ {
23149
+ chartData,
23150
+ canEdit,
23151
+ onUpdateChartData: updateChartData
23152
+ }
23153
+ ),
22927
23154
  /* @__PURE__ */ jsx(
22928
23155
  ChartDataGrid,
22929
23156
  {
@@ -23048,7 +23275,7 @@ function ConnectorPanel({
23048
23275
  ConnectorArrowsSection,
23049
23276
  {
23050
23277
  selectedShapeStyle: selectedElement.shapeStyle,
23051
- canEdit,
23278
+ canEdit: canEdit && canInteractWithElement(selectedElement, "changeArrowheads"),
23052
23279
  onUpdateShapeStyle: onUpdateElementStyle
23053
23280
  }
23054
23281
  )
@@ -23619,6 +23846,7 @@ function ImageCropSection({
23619
23846
  if (!isImageLikeElement(selectedElement)) {
23620
23847
  return null;
23621
23848
  }
23849
+ const croppable = canEdit && canInteractWithElement(selectedElement, "crop");
23622
23850
  return /* @__PURE__ */ jsxs("div", { className: "space-y-1.5", "data-pptx-image-crop": true, children: [
23623
23851
  CROP_SIDES.map((side) => {
23624
23852
  const key = `crop${side}`;
@@ -23633,7 +23861,7 @@ function ImageCropSection({
23633
23861
  type: "range",
23634
23862
  min: 0,
23635
23863
  max: MAX_CROP_PERCENT,
23636
- disabled: !canEdit,
23864
+ disabled: !croppable,
23637
23865
  className: "accent-primary",
23638
23866
  value: Math.round(clampCropValue(selectedElement[key]) * 100),
23639
23867
  onChange: (e) => onUpdateElement({
@@ -23647,7 +23875,7 @@ function ImageCropSection({
23647
23875
  "button",
23648
23876
  {
23649
23877
  type: "button",
23650
- disabled: !canEdit,
23878
+ disabled: !croppable,
23651
23879
  className: `${BTN_CLS} w-full`,
23652
23880
  onClick: () => onUpdateElement({
23653
23881
  cropLeft: 0,
@@ -23856,23 +24084,14 @@ function mmSsToMs(value) {
23856
24084
  }
23857
24085
  return seconds * 1e3;
23858
24086
  }
24087
+ var TRIM_ERROR_KEYS = {
24088
+ negative: "pptx.media.trimErrorNegative",
24089
+ startAfterEnd: "pptx.media.trimErrorStartAfterEnd",
24090
+ beyondDuration: "pptx.media.trimErrorBeyondDuration"
24091
+ };
23859
24092
  function validateTrimRange(trimStartMs, trimEndMs, durationMs) {
23860
- if (trimStartMs < 0) {
23861
- return "pptx.media.trimErrorNegative";
23862
- }
23863
- if (trimEndMs < 0) {
23864
- return "pptx.media.trimErrorNegative";
23865
- }
23866
- if (trimEndMs > 0 && trimStartMs >= trimEndMs) {
23867
- return "pptx.media.trimErrorStartAfterEnd";
23868
- }
23869
- if (durationMs > 0 && trimStartMs > durationMs) {
23870
- return "pptx.media.trimErrorBeyondDuration";
23871
- }
23872
- if (durationMs > 0 && trimEndMs > durationMs) {
23873
- return "pptx.media.trimErrorBeyondDuration";
23874
- }
23875
- return null;
24093
+ const error = validateMediaTrimRange(trimStartMs, trimEndMs, durationMs);
24094
+ return error ? TRIM_ERROR_KEYS[error] : null;
23876
24095
  }
23877
24096
  function TrimTimeInput({
23878
24097
  label,
@@ -23942,14 +24161,11 @@ function MediaInspector({
23942
24161
  const trimStartMs = element.trimStartMs ?? 0;
23943
24162
  const trimEndMs = element.trimEndMs ?? 0;
23944
24163
  const durationMs = durationSeconds * 1e3;
23945
- const trimmedDuration = useMemo(() => {
23946
- const effectiveStart = trimStartMs;
23947
- const effectiveEnd = trimEndMs > 0 ? trimEndMs : durationMs;
23948
- if (effectiveEnd <= effectiveStart || durationMs <= 0) {
23949
- return msToMmSs(durationMs);
23950
- }
23951
- return msToMmSs(effectiveEnd - effectiveStart);
23952
- }, [trimStartMs, trimEndMs, durationMs]);
24164
+ const trimmedDuration = useMemo(
24165
+ () => msToMmSs(trimmedMediaDurationMs(trimStartMs, trimEndMs, durationMs)),
24166
+ [trimStartMs, trimEndMs, durationMs]
24167
+ );
24168
+ const trimEndAbsoluteMs = mediaTrimEndAbsoluteMs(durationMs, trimEndMs);
23953
24169
  const validationError = useMemo(
23954
24170
  () => validateTrimRange(trimStartMs, trimEndMs, durationMs),
23955
24171
  [trimStartMs, trimEndMs, durationMs]
@@ -23966,10 +24182,10 @@ function MediaInspector({
23966
24182
  const handleTrimEndChange = useCallback(
23967
24183
  (ms) => {
23968
24184
  onUpdateElement({
23969
- trimEndMs: ms
24185
+ trimEndMs: durationMs > 0 ? mediaTrimEndMsFromAbsoluteMs(durationMs, ms) : ms
23970
24186
  });
23971
24187
  },
23972
- [onUpdateElement]
24188
+ [durationMs, onUpdateElement]
23973
24189
  );
23974
24190
  const handleResetTrim = useCallback(() => {
23975
24191
  onUpdateElement({
@@ -23997,7 +24213,7 @@ function MediaInspector({
23997
24213
  TrimTimeInput,
23998
24214
  {
23999
24215
  label: t("pptx.media.trimEndTime"),
24000
- valueMs: trimEndMs,
24216
+ valueMs: trimEndAbsoluteMs,
24001
24217
  maxMs: durationMs,
24002
24218
  disabled: !canEdit,
24003
24219
  onChange: handleTrimEndChange
@@ -24043,7 +24259,7 @@ function TrimTimeline({
24043
24259
  const barRef = useRef(null);
24044
24260
  const [dragging, setDragging] = useState(null);
24045
24261
  const trimStartSec = trimStartMs / 1e3;
24046
- const trimEndSec = trimEndMs > 0 ? trimEndMs / 1e3 : duration;
24262
+ const trimEndSec = mediaTrimEndSeconds(duration, trimEndMs);
24047
24263
  const safeDuration = duration > 0 ? duration : 1;
24048
24264
  const startPct = trimStartSec / safeDuration * 100;
24049
24265
  const endPct = trimEndSec / safeDuration * 100;
@@ -24071,7 +24287,7 @@ function TrimTimeline({
24071
24287
  onTrimChange(Math.max(0, newStart) * 1e3, trimEndMs);
24072
24288
  } else {
24073
24289
  const newEnd = Math.max(t, trimStartSec + 0.1);
24074
- onTrimChange(trimStartMs, Math.min(newEnd, duration) * 1e3);
24290
+ onTrimChange(trimStartMs, mediaTrimEndMsFromSeconds(duration, newEnd));
24075
24291
  }
24076
24292
  };
24077
24293
  const handlePointerUp = () => {
@@ -25350,14 +25566,15 @@ function SelectRow({
25350
25566
  function ColorPickerRow({
25351
25567
  label,
25352
25568
  value,
25569
+ selectedRef,
25353
25570
  disabled,
25354
25571
  prefix,
25355
25572
  onChange
25356
25573
  }) {
25357
25574
  const { t } = useTranslation();
25358
25575
  const { pushColor } = useRecentColors();
25359
- const commit = (color) => {
25360
- onChange(color);
25576
+ const commit = (color, ref) => {
25577
+ onChange(color, ref);
25361
25578
  pushColor(color);
25362
25579
  };
25363
25580
  const handleEyedropper = async () => {
@@ -25394,20 +25611,33 @@ function ColorPickerRow({
25394
25611
  }
25395
25612
  )
25396
25613
  ] }),
25397
- /* @__PURE__ */ jsx("div", { className: "mt-1 flex flex-wrap gap-1", children: THEME_COLOR_SWATCHES.map((c) => /* @__PURE__ */ jsx(
25398
- "button",
25614
+ /* @__PURE__ */ jsx(
25615
+ ThemeColorSwatchGrid,
25399
25616
  {
25400
- type: "button",
25401
- className: `${SWATCH} ${DIS}`,
25402
- style: { backgroundColor: c },
25403
- title: `${label} ${c}`,
25404
- "aria-label": `${label} ${c}`,
25405
- "data-pptx-compact": true,
25617
+ prefix,
25406
25618
  disabled,
25407
- onClick: () => commit(c)
25408
- },
25409
- `${prefix}-theme-${c}`
25410
- )) }),
25619
+ selectedRef,
25620
+ selectedHex: value,
25621
+ onPick: (c) => commit(c.hex, c.ref)
25622
+ }
25623
+ ),
25624
+ /* @__PURE__ */ jsxs("div", { className: "mt-1", children: [
25625
+ /* @__PURE__ */ jsx("div", { className: "text-[10px] text-muted-foreground mb-1", children: t("pptx.colorPicker.standardColors") }),
25626
+ /* @__PURE__ */ jsx("div", { className: "flex flex-wrap gap-1", children: OFFICE_COLOR_SWATCHES.map((c) => /* @__PURE__ */ jsx(
25627
+ "button",
25628
+ {
25629
+ type: "button",
25630
+ className: `${SWATCH} ${DIS}`,
25631
+ style: { backgroundColor: c.hex },
25632
+ title: `${label} ${c.label}`,
25633
+ "aria-label": `${label} ${c.label}`,
25634
+ "data-pptx-compact": true,
25635
+ disabled,
25636
+ onClick: () => commit(c.hex)
25637
+ },
25638
+ `${prefix}-standard-${c.hex}`
25639
+ )) })
25640
+ ] }),
25411
25641
  /* @__PURE__ */ jsx(RecentColorsRow, { prefix, disabled, onCommit: commit })
25412
25642
  ] });
25413
25643
  }
@@ -25433,7 +25663,7 @@ function GradientStopRow({
25433
25663
  value: normalizeHexColor(stop.color, "#3b82f6"),
25434
25664
  onChange: (e) => {
25435
25665
  const hex = normalizeHexColor(e.target.value, "#3b82f6");
25436
- patchStop({ color: hex });
25666
+ patchStop({ color: hex, colorRef: void 0 });
25437
25667
  pushColor(hex);
25438
25668
  },
25439
25669
  className: "h-7 w-10 rounded border border-border bg-muted"
@@ -25461,6 +25691,18 @@ function GradientStopRow({
25461
25691
  }
25462
25692
  )
25463
25693
  ] }),
25694
+ /* @__PURE__ */ jsx(
25695
+ ThemeColorSwatchGrid,
25696
+ {
25697
+ prefix: `gradient-stop-${index}`,
25698
+ selectedRef: stop.colorRef,
25699
+ selectedHex: stop.color,
25700
+ onPick: (c) => {
25701
+ patchStop({ color: c.hex, colorRef: c.ref });
25702
+ pushColor(c.hex);
25703
+ }
25704
+ }
25705
+ ),
25464
25706
  /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-[auto,1fr,auto] items-center gap-2 pl-1", children: [
25465
25707
  /* @__PURE__ */ jsx("span", { className: "text-[10px] text-muted-foreground w-10 text-center", children: "Opacity" }),
25466
25708
  /* @__PURE__ */ jsx(
@@ -25701,6 +25943,7 @@ function StrokeEffectsSection({
25701
25943
  label: t("pptx.inspector.stroke"),
25702
25944
  prefix: "stroke",
25703
25945
  value: normalizeHexColor(style?.strokeColor, DEFAULT_STROKE_COLOR),
25946
+ selectedRef: style?.strokeColorRef,
25704
25947
  onChange: onSetStrokeColor
25705
25948
  }
25706
25949
  ),
@@ -25909,6 +26152,7 @@ function FillStrokeProperties({
25909
26152
  label: t("pptx.fill.fill"),
25910
26153
  prefix: "fill",
25911
26154
  value: normalizeHexColor(style?.fillColor, DEFAULT_FILL_COLOR),
26155
+ selectedRef: style?.fillColorRef,
25912
26156
  disabled: line,
25913
26157
  onChange: onSetFillColor
25914
26158
  }
@@ -26761,8 +27005,8 @@ function ShapeTextPanels({
26761
27005
  ),
26762
27006
  canEdit,
26763
27007
  onUpdateShapeStyle: onUpdateElementStyle,
26764
- onSetFillColor: (hex) => onUpdateElementStyle({ fillColor: hex, fillMode: "solid" }),
26765
- onSetStrokeColor: (hex) => onUpdateElementStyle({ strokeColor: hex })
27008
+ onSetFillColor: (hex, ref) => onUpdateElementStyle({ fillColor: hex, fillMode: "solid", fillColorRef: ref }),
27009
+ onSetStrokeColor: (hex, ref) => onUpdateElementStyle({ strokeColor: hex, strokeColorRef: ref })
26766
27010
  }
26767
27011
  )
26768
27012
  ] }),
@@ -26794,16 +27038,26 @@ function ShapeTextPanels({
26794
27038
  ariaLabel: "Text Color",
26795
27039
  value: normalizeHexColor(selectedElement.textStyle?.color, "#000000"),
26796
27040
  className: "w-full h-7 rounded border border-border bg-transparent cursor-pointer",
26797
- onCommit: (hex) => onUpdateTextStyle({ color: hex })
27041
+ onCommit: (hex) => onUpdateTextStyle({ color: hex, colorRef: void 0 })
26798
27042
  }
26799
27043
  )
26800
27044
  ] }),
27045
+ /* @__PURE__ */ jsx("div", { className: "col-span-2", children: /* @__PURE__ */ jsx(
27046
+ ThemeColorSwatchGrid,
27047
+ {
27048
+ prefix: "text-color",
27049
+ disabled: !canEdit,
27050
+ selectedRef: selectedElement.textStyle?.colorRef,
27051
+ selectedHex: selectedElement.textStyle?.color,
27052
+ onPick: (c) => onUpdateTextStyle({ color: c.hex, colorRef: c.ref })
27053
+ }
27054
+ ) }),
26801
27055
  /* @__PURE__ */ jsx("div", { className: "col-span-2", children: /* @__PURE__ */ jsx(
26802
27056
  RecentColorsRow,
26803
27057
  {
26804
27058
  prefix: "text-color",
26805
27059
  disabled: !canEdit,
26806
- onCommit: (hex) => onUpdateTextStyle({ color: hex })
27060
+ onCommit: (hex) => onUpdateTextStyle({ color: hex, colorRef: void 0 })
26807
27061
  }
26808
27062
  ) }),
26809
27063
  /* @__PURE__ */ jsxs("div", { className: "flex gap-1 col-span-2", children: [
@@ -27930,6 +28184,39 @@ function GradientControls({
27930
28184
  )
27931
28185
  ] });
27932
28186
  }
28187
+ function TableCellColorField({
28188
+ label,
28189
+ prefix,
28190
+ value,
28191
+ fallback,
28192
+ selectedRef,
28193
+ disabled,
28194
+ onCommit
28195
+ }) {
28196
+ const hex = normalizeHexColor(value, fallback);
28197
+ return /* @__PURE__ */ jsxs("label", { className: "flex flex-col gap-1", children: [
28198
+ /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: label }),
28199
+ /* @__PURE__ */ jsx(
28200
+ DebouncedColorInput,
28201
+ {
28202
+ disabled,
28203
+ value: hex,
28204
+ className: "w-full h-7 rounded border border-border bg-transparent cursor-pointer",
28205
+ onCommit: (next) => onCommit(next, void 0)
28206
+ }
28207
+ ),
28208
+ /* @__PURE__ */ jsx(
28209
+ ThemeColorSwatchGrid,
28210
+ {
28211
+ prefix,
28212
+ disabled,
28213
+ selectedRef,
28214
+ selectedHex: hex,
28215
+ onPick: (c) => onCommit(c.hex, c.ref)
28216
+ }
28217
+ )
28218
+ ] });
28219
+ }
27933
28220
  function TableCellFormattingPanel({
27934
28221
  tableData: td,
27935
28222
  tableEditorState,
@@ -27979,30 +28266,30 @@ function TableCellFormattingPanel({
27979
28266
  )
27980
28267
  ] }),
27981
28268
  /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-2 gap-1.5", children: [
27982
- /* @__PURE__ */ jsxs("label", { className: "flex flex-col gap-1", children: [
27983
- /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: t("pptx.table.color") }),
27984
- /* @__PURE__ */ jsx(
27985
- DebouncedColorInput,
27986
- {
27987
- disabled: !canEdit,
27988
- value: normalizeHexColor(cs.color, "#000000"),
27989
- className: "w-full h-7 rounded border border-border bg-transparent cursor-pointer",
27990
- onCommit: (hex) => updateCellStyle({ color: hex })
27991
- }
27992
- )
27993
- ] }),
27994
- /* @__PURE__ */ jsxs("label", { className: "flex flex-col gap-1", children: [
27995
- /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: t("pptx.table.background") }),
27996
- /* @__PURE__ */ jsx(
27997
- DebouncedColorInput,
27998
- {
27999
- disabled: !canEdit,
28000
- value: normalizeHexColor(cs.backgroundColor, "#ffffff"),
28001
- className: "w-full h-7 rounded border border-border bg-transparent cursor-pointer",
28002
- onCommit: (hex) => updateCellStyle({ backgroundColor: hex })
28003
- }
28004
- )
28005
- ] })
28269
+ /* @__PURE__ */ jsx(
28270
+ TableCellColorField,
28271
+ {
28272
+ label: t("pptx.table.color"),
28273
+ prefix: "table-cell-text",
28274
+ value: cs.color,
28275
+ fallback: "#000000",
28276
+ selectedRef: cs.colorRef,
28277
+ disabled: !canEdit,
28278
+ onCommit: (hex, ref) => updateCellStyle({ color: hex, colorRef: ref })
28279
+ }
28280
+ ),
28281
+ /* @__PURE__ */ jsx(
28282
+ TableCellColorField,
28283
+ {
28284
+ label: t("pptx.table.background"),
28285
+ prefix: "table-cell-bg",
28286
+ value: cs.backgroundColor,
28287
+ fallback: "#ffffff",
28288
+ selectedRef: cs.backgroundColorRef,
28289
+ disabled: !canEdit,
28290
+ onCommit: (hex, ref) => updateCellStyle({ backgroundColor: hex, backgroundColorRef: ref })
28291
+ }
28292
+ )
28006
28293
  ] }),
28007
28294
  /* @__PURE__ */ jsx(
28008
28295
  TableCellAdvancedFill,
@@ -34431,6 +34718,7 @@ function ViewerToolbarSection(props) {
34431
34718
  onUngroupElement: manipulation.handleUngroupElement,
34432
34719
  onUpdateElementStyle: ops.updateSelectedShapeStyle,
34433
34720
  selectedCount: s.selectedElementIds.length > 0 ? s.selectedElementIds.length : selectedElement ? 1 : 0,
34721
+ selectionGroupable: manipulation.selectionGroupable,
34434
34722
  onOpenHyperlinkDialog: () => dialogs.setIsHyperlinkDialogOpen(true),
34435
34723
  onDuplicate: manipulation.handleDuplicate,
34436
34724
  onDelete: manipulation.handleDelete,
@@ -35953,7 +36241,7 @@ ${url}`)) {
35953
36241
  var AiChatPanel = lazy(async () => {
35954
36242
  const [{ useChat }, { default: Panel }] = await Promise.all([
35955
36243
  import('@ai-sdk/react'),
35956
- import('./AiChatPanel-CCJNQGER.mjs')
36244
+ import('./AiChatPanel-L5QGWVZK.mjs')
35957
36245
  ]);
35958
36246
  function BoundAiChatPanel(props) {
35959
36247
  return /* @__PURE__ */ jsx(Panel, { ...props, useChat });
@@ -37201,6 +37489,7 @@ function ViewerMainContent(props) {
37201
37489
  selectedElement,
37202
37490
  tableEditorState: state.tableEditorState,
37203
37491
  hasMultiSelection: state.effectiveSelectedIds.length > 1,
37492
+ selectionGroupable: manipulation.selectionGroupable,
37204
37493
  onAction: manipulation.handleContextMenuAction,
37205
37494
  onInsertTableRow: tableOps.handleInsertTableRow,
37206
37495
  onDeleteTableRow: tableOps.handleDeleteTableRow,
@@ -39204,6 +39493,10 @@ var PowerPointViewer = forwardRef(
39204
39493
  () => ({ recentColors: state.recentColors, pushColor }),
39205
39494
  [state.recentColors, pushColor]
39206
39495
  );
39496
+ const themeColorMapValue = useMemo(
39497
+ () => state.theme?.colorScheme ? buildThemeColorMap(state.theme.colorScheme) : void 0,
39498
+ [state.theme?.colorScheme]
39499
+ );
39207
39500
  const settings = useMemo(
39208
39501
  () => ({
39209
39502
  autoSave: autosaveEnabled,
@@ -39704,7 +39997,7 @@ var PowerPointViewer = forwardRef(
39704
39997
  ref: containerRef,
39705
39998
  tabIndex: 0,
39706
39999
  className: "h-full w-full flex flex-col overflow-hidden outline-none",
39707
- children: loading ? /* @__PURE__ */ jsx(LoadingState, {}) : error ? /* @__PURE__ */ jsx(ErrorState, { error }) : /* @__PURE__ */ jsxs(RecentColorsProvider, { value: recentColorsValue, children: [
40000
+ children: loading ? /* @__PURE__ */ jsx(LoadingState, {}) : error ? /* @__PURE__ */ jsx(ErrorState, { error }) : /* @__PURE__ */ jsx(ThemeColorMapProvider, { value: themeColorMapValue, children: /* @__PURE__ */ jsxs(RecentColorsProvider, { value: recentColorsValue, children: [
39708
40001
  mode !== "present" && /* @__PURE__ */ jsx(
39709
40002
  ViewerToolbarSection,
39710
40003
  {
@@ -39847,7 +40140,7 @@ var PowerPointViewer = forwardRef(
39847
40140
  commentCount: activeSlide?.comments?.length ?? 0
39848
40141
  }
39849
40142
  )
39850
- ] })
40143
+ ] }) })
39851
40144
  }
39852
40145
  ),
39853
40146
  mode !== "present" && /* @__PURE__ */ jsx(