pptx-react-viewer 3.6.0 → 3.8.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 (164) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/dist/{AiChatPanel-WRQGJJVD.mjs → AiChatPanel-A5DCEHTO.mjs} +4 -4
  3. package/dist/AiChatPanel-A5DCEHTO.mjs.br +0 -0
  4. package/dist/AiChatPanel-A5DCEHTO.mjs.gz +0 -0
  5. package/dist/{AiChatPanel-LEOEDIW2.js → AiChatPanel-XLQM4BQJ.js} +25 -25
  6. package/dist/AiChatPanel-XLQM4BQJ.js.br +0 -0
  7. package/dist/AiChatPanel-XLQM4BQJ.js.gz +0 -0
  8. package/dist/{Area3DChartScene-SJC2ZB6R.mjs → Area3DChartScene-5CMEMIBI.mjs} +1 -1
  9. package/dist/Area3DChartScene-5CMEMIBI.mjs.br +0 -0
  10. package/dist/Area3DChartScene-5CMEMIBI.mjs.gz +0 -0
  11. package/dist/{Area3DChartScene-3TJ2GTGI.js → Area3DChartScene-RZ3V3WOR.js} +2 -2
  12. package/dist/Area3DChartScene-RZ3V3WOR.js.br +0 -0
  13. package/dist/Area3DChartScene-RZ3V3WOR.js.gz +0 -0
  14. package/dist/{Bar3DChartScene-SPER4LQA.mjs → Bar3DChartScene-H3MYUJKV.mjs} +1 -1
  15. package/dist/Bar3DChartScene-H3MYUJKV.mjs.br +0 -0
  16. package/dist/Bar3DChartScene-H3MYUJKV.mjs.gz +0 -0
  17. package/dist/{Bar3DChartScene-2ZGOMOZO.js → Bar3DChartScene-KHCQ6TEC.js} +2 -2
  18. package/dist/Bar3DChartScene-KHCQ6TEC.js.br +0 -0
  19. package/dist/Bar3DChartScene-KHCQ6TEC.js.gz +0 -0
  20. package/dist/{Line3DChartScene-42FYFGLU.js → Line3DChartScene-QEACF3U3.js} +2 -2
  21. package/dist/Line3DChartScene-QEACF3U3.js.br +0 -0
  22. package/dist/Line3DChartScene-QEACF3U3.js.gz +0 -0
  23. package/dist/{Line3DChartScene-FH3YHPXE.mjs → Line3DChartScene-YFRPJHDX.mjs} +1 -1
  24. package/dist/Line3DChartScene-YFRPJHDX.mjs.br +0 -0
  25. package/dist/Line3DChartScene-YFRPJHDX.mjs.gz +0 -0
  26. package/dist/{Model3DScene-2BCR2YYD.mjs → Model3DScene-O24KP723.mjs} +1 -1
  27. package/dist/Model3DScene-O24KP723.mjs.br +0 -0
  28. package/dist/Model3DScene-O24KP723.mjs.gz +0 -0
  29. package/dist/{Model3DScene-EIU2GVUZ.js → Model3DScene-QQWKGJ3T.js} +2 -2
  30. package/dist/Model3DScene-QQWKGJ3T.js.br +0 -0
  31. package/dist/Model3DScene-QQWKGJ3T.js.gz +0 -0
  32. package/dist/{PieChart3DScene-QFQUJFDP.mjs → PieChart3DScene-CI6CW22C.mjs} +1 -1
  33. package/dist/PieChart3DScene-CI6CW22C.mjs.br +0 -0
  34. package/dist/PieChart3DScene-CI6CW22C.mjs.gz +0 -0
  35. package/dist/{PieChart3DScene-VQOHZPHI.js → PieChart3DScene-L3MHKQHW.js} +2 -2
  36. package/dist/PieChart3DScene-L3MHKQHW.js.br +0 -0
  37. package/dist/PieChart3DScene-L3MHKQHW.js.gz +0 -0
  38. package/dist/PowerPointViewer-Cl6jBPNw.d.ts.map +1 -1
  39. package/dist/{SurfaceChart3DScene-FTVXZN6O.js → SurfaceChart3DScene-5IER6VFW.js} +2 -2
  40. package/dist/SurfaceChart3DScene-5IER6VFW.js.br +0 -0
  41. package/dist/SurfaceChart3DScene-5IER6VFW.js.gz +0 -0
  42. package/dist/{SurfaceChart3DScene-CGXMRBCL.mjs → SurfaceChart3DScene-JUXRC3K2.mjs} +1 -1
  43. package/dist/SurfaceChart3DScene-JUXRC3K2.mjs.br +0 -0
  44. package/dist/SurfaceChart3DScene-JUXRC3K2.mjs.gz +0 -0
  45. package/dist/{audience-content-store-bR7Gs_1S.d.ts → audience-content-store-CB2WVM1K.d.ts} +12 -3
  46. package/dist/{audience-content-store-bR7Gs_1S.d.ts.map → audience-content-store-CB2WVM1K.d.ts.map} +1 -1
  47. package/dist/{chunk-NFOOONND.js → chunk-4222CHFH.js} +1944 -1299
  48. package/dist/chunk-4222CHFH.js.br +0 -0
  49. package/dist/chunk-4222CHFH.js.gz +0 -0
  50. package/dist/{chunk-ZUSYUWOV.mjs → chunk-6IMB5DNJ.mjs} +8927 -4870
  51. package/dist/chunk-6IMB5DNJ.mjs.br +0 -0
  52. package/dist/chunk-6IMB5DNJ.mjs.gz +0 -0
  53. package/dist/{chunk-ZHSBMG37.js → chunk-DE3S3UHX.js} +557 -682
  54. package/dist/chunk-DE3S3UHX.js.br +0 -0
  55. package/dist/chunk-DE3S3UHX.js.gz +0 -0
  56. package/dist/{chunk-ZWPHUPL4.js → chunk-F5NPGNMA.js} +9 -5
  57. package/dist/chunk-F5NPGNMA.js.br +0 -0
  58. package/dist/chunk-F5NPGNMA.js.gz +0 -0
  59. package/dist/{chunk-TGCSZXOG.mjs → chunk-FRZIBZTE.mjs} +57 -27
  60. package/dist/chunk-FRZIBZTE.mjs.br +0 -0
  61. package/dist/chunk-FRZIBZTE.mjs.gz +0 -0
  62. package/dist/{chunk-MZI4DG3S.js → chunk-L3ZIBQEB.js} +57 -27
  63. package/dist/chunk-L3ZIBQEB.js.br +0 -0
  64. package/dist/chunk-L3ZIBQEB.js.gz +0 -0
  65. package/dist/{chunk-FG5VQFWP.mjs → chunk-PFPKBNNZ.mjs} +761 -116
  66. package/dist/chunk-PFPKBNNZ.mjs.br +0 -0
  67. package/dist/chunk-PFPKBNNZ.mjs.gz +0 -0
  68. package/dist/{chunk-7VPDHSWF.js → chunk-QWA5YEIZ.js} +234 -241
  69. package/dist/chunk-QWA5YEIZ.js.br +0 -0
  70. package/dist/chunk-QWA5YEIZ.js.gz +0 -0
  71. package/dist/{chunk-WX7AFFBZ.mjs → chunk-RHWQKZLB.mjs} +63 -69
  72. package/dist/chunk-RHWQKZLB.mjs.br +0 -0
  73. package/dist/chunk-RHWQKZLB.mjs.gz +0 -0
  74. package/dist/{chunk-T3V5FBXJ.mjs → chunk-RNP5HP4L.mjs} +5 -2
  75. package/dist/chunk-RNP5HP4L.mjs.br +0 -0
  76. package/dist/chunk-RNP5HP4L.mjs.gz +0 -0
  77. package/dist/{chunk-AL2KLPOJ.js → chunk-SN5EUDIT.js} +8959 -4873
  78. package/dist/chunk-SN5EUDIT.js.br +0 -0
  79. package/dist/chunk-SN5EUDIT.js.gz +0 -0
  80. package/dist/{chunk-VYNICQ4O.mjs → chunk-UPJW34YG.mjs} +133 -258
  81. package/dist/chunk-UPJW34YG.mjs.br +0 -0
  82. package/dist/chunk-UPJW34YG.mjs.gz +0 -0
  83. package/dist/i18n.js +4 -4
  84. package/dist/i18n.js.br +0 -0
  85. package/dist/i18n.js.gz +0 -0
  86. package/dist/i18n.mjs +1 -1
  87. package/dist/i18n.mjs.br +0 -0
  88. package/dist/i18n.mjs.gz +0 -0
  89. package/dist/index.d.ts +595 -38
  90. package/dist/index.js +47 -47
  91. package/dist/index.js.br +0 -0
  92. package/dist/index.js.gz +0 -0
  93. package/dist/index.mjs +6 -6
  94. package/dist/index.mjs.br +0 -0
  95. package/dist/index.mjs.gz +0 -0
  96. package/dist/internals.d.ts +768 -186
  97. package/dist/internals.d.ts.map +1 -1
  98. package/dist/internals.js +79 -79
  99. package/dist/internals.js.br +0 -0
  100. package/dist/internals.js.gz +0 -0
  101. package/dist/internals.mjs +4 -4
  102. package/dist/internals.mjs.br +0 -0
  103. package/dist/internals.mjs.gz +0 -0
  104. package/dist/types-Bzdkiakq.d.ts.map +1 -1
  105. package/dist/viewer/index.d.ts +534 -38
  106. package/dist/viewer/index.js +27 -27
  107. package/dist/viewer/index.js.br +0 -0
  108. package/dist/viewer/index.js.gz +0 -0
  109. package/dist/viewer/index.mjs +6 -6
  110. package/dist/viewer/index.mjs.br +0 -0
  111. package/dist/viewer/index.mjs.gz +0 -0
  112. package/package.json +2 -2
  113. package/dist/AiChatPanel-LEOEDIW2.js.br +0 -0
  114. package/dist/AiChatPanel-LEOEDIW2.js.gz +0 -0
  115. package/dist/AiChatPanel-WRQGJJVD.mjs.br +0 -0
  116. package/dist/AiChatPanel-WRQGJJVD.mjs.gz +0 -0
  117. package/dist/Area3DChartScene-3TJ2GTGI.js.br +0 -0
  118. package/dist/Area3DChartScene-3TJ2GTGI.js.gz +0 -0
  119. package/dist/Area3DChartScene-SJC2ZB6R.mjs.br +0 -2
  120. package/dist/Area3DChartScene-SJC2ZB6R.mjs.gz +0 -0
  121. package/dist/Bar3DChartScene-2ZGOMOZO.js.br +0 -0
  122. package/dist/Bar3DChartScene-2ZGOMOZO.js.gz +0 -0
  123. package/dist/Bar3DChartScene-SPER4LQA.mjs.br +0 -0
  124. package/dist/Bar3DChartScene-SPER4LQA.mjs.gz +0 -0
  125. package/dist/Line3DChartScene-42FYFGLU.js.br +0 -0
  126. package/dist/Line3DChartScene-42FYFGLU.js.gz +0 -0
  127. package/dist/Line3DChartScene-FH3YHPXE.mjs.br +0 -2
  128. package/dist/Line3DChartScene-FH3YHPXE.mjs.gz +0 -0
  129. package/dist/Model3DScene-2BCR2YYD.mjs.br +0 -0
  130. package/dist/Model3DScene-2BCR2YYD.mjs.gz +0 -0
  131. package/dist/Model3DScene-EIU2GVUZ.js.br +0 -0
  132. package/dist/Model3DScene-EIU2GVUZ.js.gz +0 -0
  133. package/dist/PieChart3DScene-QFQUJFDP.mjs.br +0 -0
  134. package/dist/PieChart3DScene-QFQUJFDP.mjs.gz +0 -0
  135. package/dist/PieChart3DScene-VQOHZPHI.js.br +0 -0
  136. package/dist/PieChart3DScene-VQOHZPHI.js.gz +0 -0
  137. package/dist/SurfaceChart3DScene-CGXMRBCL.mjs.br +0 -0
  138. package/dist/SurfaceChart3DScene-CGXMRBCL.mjs.gz +0 -0
  139. package/dist/SurfaceChart3DScene-FTVXZN6O.js.br +0 -0
  140. package/dist/SurfaceChart3DScene-FTVXZN6O.js.gz +0 -0
  141. package/dist/chunk-7VPDHSWF.js.br +0 -0
  142. package/dist/chunk-7VPDHSWF.js.gz +0 -0
  143. package/dist/chunk-AL2KLPOJ.js.br +0 -0
  144. package/dist/chunk-AL2KLPOJ.js.gz +0 -0
  145. package/dist/chunk-FG5VQFWP.mjs.br +0 -0
  146. package/dist/chunk-FG5VQFWP.mjs.gz +0 -0
  147. package/dist/chunk-MZI4DG3S.js.br +0 -0
  148. package/dist/chunk-MZI4DG3S.js.gz +0 -0
  149. package/dist/chunk-NFOOONND.js.br +0 -0
  150. package/dist/chunk-NFOOONND.js.gz +0 -0
  151. package/dist/chunk-T3V5FBXJ.mjs.br +0 -0
  152. package/dist/chunk-T3V5FBXJ.mjs.gz +0 -0
  153. package/dist/chunk-TGCSZXOG.mjs.br +0 -0
  154. package/dist/chunk-TGCSZXOG.mjs.gz +0 -0
  155. package/dist/chunk-VYNICQ4O.mjs.br +0 -0
  156. package/dist/chunk-VYNICQ4O.mjs.gz +0 -0
  157. package/dist/chunk-WX7AFFBZ.mjs.br +0 -0
  158. package/dist/chunk-WX7AFFBZ.mjs.gz +0 -0
  159. package/dist/chunk-ZHSBMG37.js.br +0 -0
  160. package/dist/chunk-ZHSBMG37.js.gz +0 -0
  161. package/dist/chunk-ZUSYUWOV.mjs.br +0 -0
  162. package/dist/chunk-ZUSYUWOV.mjs.gz +0 -0
  163. package/dist/chunk-ZWPHUPL4.js.br +0 -0
  164. package/dist/chunk-ZWPHUPL4.js.gz +0 -0
@@ -1,8 +1,8 @@
1
- import { computeFocusTargets, aiChangeAnimationCss, changeGhostStyle, createChatHistoryStore, collectStoredChats, exportAiChatLogs, applyElementUpdate } from './chunk-T3V5FBXJ.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-VYNICQ4O.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-WX7AFFBZ.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, 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, revealedSmartArtNodeCount, 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, 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, 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-ZUSYUWOV.mjs';
5
- import { LOCALE_CATALOG, translationsEn } from './chunk-TGCSZXOG.mjs';
1
+ import { computeFocusTargets, deckDataFieldChanged, aiChangeAnimationCss, changeGhostStyle, createChatHistoryStore, collectStoredChats, exportAiChatLogs, applyElementUpdate } from './chunk-RNP5HP4L.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-UPJW34YG.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-RHWQKZLB.mjs';
4
+ import { hasShapeProperties, normalizeHexColor, colorWithOpacity, normalizeStrokeDashType, getSvgStrokeDasharray, getCompoundLineOffsets, getCompoundLineWidths, svgLineCap, hasTextProperties, connectorWrapperTransform, getAriaRoleDescription, getAriaLabel, getAriaRole, resolveElementInteractivity, isEditableTextElement, buildTextStyleOverrideCss, 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, resolveSlideSizeSelection, buildDeckSaveOptions, 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, advanceChartMarkDrag, advanceChartValueDrag, buildChartMarkDragGeometry, beginChartMarkDrag, 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, applyTableStyleDelete, applyTableStyleMapChange, 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, tableStyleAssignmentUpdate, evenColumnWidths, redistributeColumnWidth, evenRowHeights, patchChartData, collapseChartTitleRunsForEdit, 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, 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, normalizeTableStyleGuid, describeTableStyleEditor, TABLE_STYLE_EDITOR_PARTS, 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, getNonVisualDescriptionFields, 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, TABLE_STYLE_BORDER_SIDES, applyTableStyleFieldEdit, createTableStyleEntry, addTableStyleToMap, deleteTableStyleFromMap, 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, TABLE_STYLE_BORDER_SIDE_LABEL_KEYS, TABLE_STYLE_DASH_PRESETS, GRADIENT_TYPE_OPTIONS, PATTERN_OPTIONS, FILL_PATTERN_LABEL_KEYS, openNativeEyeDropper, toggleText3dExtrusion, BEVEL_PRESETS } from './chunk-6IMB5DNJ.mjs';
5
+ import { LOCALE_CATALOG, translationsEn } from './chunk-FRZIBZTE.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-SJC2ZB6R.mjs');
517
+ return await import('./Area3DChartScene-5CMEMIBI.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-SPER4LQA.mjs');
573
+ return await import('./Bar3DChartScene-H3MYUJKV.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-FH3YHPXE.mjs');
629
+ return await import('./Line3DChartScene-YFRPJHDX.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-QFQUJFDP.mjs');
685
+ return await import('./PieChart3DScene-CI6CW22C.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-CGXMRBCL.mjs');
741
+ return await import('./SurfaceChart3DScene-JUXRC3K2.mjs');
742
742
  } catch {
743
743
  return { default: FailedToLoad5 };
744
744
  }
@@ -797,6 +797,7 @@ function ChartElementView({
797
797
  }) {
798
798
  const wrapperRef = useRef(null);
799
799
  const dragRef = useRef(null);
800
+ const markDragRef = useRef(null);
800
801
  const { selection, setSelection } = useChartPartSelection();
801
802
  const [previewData, setPreviewData] = useState(null);
802
803
  const [dragValue, setDragValue] = useState(null);
@@ -831,11 +832,18 @@ function ChartElementView({
831
832
  });
832
833
  const endDrag = (commit) => {
833
834
  const active = dragRef.current;
835
+ const markActive = markDragRef.current;
834
836
  dragRef.current = null;
837
+ markDragRef.current = null;
835
838
  setPreviewData(null);
836
839
  setDragValue(null);
837
- if (commit && active?.moved && active.lastData && onUpdateElement) {
840
+ if (!commit || !onUpdateElement) {
841
+ return;
842
+ }
843
+ if (active?.moved && active.lastData) {
838
844
  onUpdateElement({ chartData: active.lastData });
845
+ } else if (markActive?.moved && markActive.lastData) {
846
+ onUpdateElement({ chartData: markActive.lastData });
839
847
  }
840
848
  };
841
849
  useEffect(() => {
@@ -863,13 +871,44 @@ function ChartElementView({
863
871
  if (!viewModel || !element.chartData) {
864
872
  return;
865
873
  }
866
- const started = beginChartValueDrag({
867
- part,
868
- viewModel,
869
- chartData: element.chartData,
870
- clientY: e.clientY
871
- });
872
- if (!started) {
874
+ let captured = false;
875
+ const chartKind = resolveChartKind(element.chartData.chartType ?? "bar");
876
+ if (part.pointIndex !== void 0 && chartKind !== "unsupported") {
877
+ const markGeometry = buildChartMarkDragGeometry({
878
+ kind: chartKind,
879
+ element,
880
+ chartData: element.chartData,
881
+ categoryLabels: element.chartData.categories,
882
+ seriesIndex: part.seriesIndex,
883
+ pointIndex: part.pointIndex
884
+ });
885
+ const startedMark = beginChartMarkDrag({
886
+ part,
887
+ geometry: markGeometry,
888
+ chartData: element.chartData,
889
+ svgWidth: viewModel.svgWidth,
890
+ svgHeight: viewModel.svgHeight,
891
+ clientX: e.clientX,
892
+ clientY: e.clientY
893
+ });
894
+ if (startedMark) {
895
+ markDragRef.current = startedMark;
896
+ captured = true;
897
+ }
898
+ }
899
+ if (!captured) {
900
+ const started = beginChartValueDrag({
901
+ part,
902
+ viewModel,
903
+ chartData: element.chartData,
904
+ clientY: e.clientY
905
+ });
906
+ if (started) {
907
+ dragRef.current = started;
908
+ captured = true;
909
+ }
910
+ }
911
+ if (!captured) {
873
912
  return;
874
913
  }
875
914
  e.preventDefault();
@@ -877,9 +916,22 @@ function ChartElementView({
877
916
  e.currentTarget.setPointerCapture?.(e.pointerId);
878
917
  } catch {
879
918
  }
880
- dragRef.current = started;
881
919
  };
882
920
  const handlePointerMove = (e) => {
921
+ const markActive = markDragRef.current;
922
+ if (markActive) {
923
+ const rect = wrapperRef.current?.querySelector("svg")?.getBoundingClientRect();
924
+ if (!rect) {
925
+ return;
926
+ }
927
+ const step2 = advanceChartMarkDrag(markActive, e.clientX, e.clientY, rect);
928
+ if (!step2) {
929
+ return;
930
+ }
931
+ setPreviewData(step2.chartData);
932
+ setDragValue(step2.value);
933
+ return;
934
+ }
883
935
  const active = dragRef.current;
884
936
  if (!active) {
885
937
  return;
@@ -893,7 +945,7 @@ function ChartElementView({
893
945
  setDragValue(step.value);
894
946
  };
895
947
  const handlePointerUp = () => {
896
- if (dragRef.current) {
948
+ if (dragRef.current || markDragRef.current) {
897
949
  endDrag(true);
898
950
  }
899
951
  };
@@ -1502,7 +1554,8 @@ var ConnectorElementRenderer = React19.memo(
1502
1554
  adjustmentHandles: adjH,
1503
1555
  onResizePointerDown,
1504
1556
  onAdjustmentPointerDown,
1505
- animationState
1557
+ animationState,
1558
+ textStyleOverrideCss
1506
1559
  }) {
1507
1560
  const shapeEl = hasShapeProperties(el) ? el : void 0;
1508
1561
  const boxWidth = Math.max(el.width, MIN_ELEMENT_SIZE);
@@ -1570,6 +1623,7 @@ var ConnectorElementRenderer = React19.memo(
1570
1623
  ...lineGlow ? { filter: lineGlow } : {}
1571
1624
  },
1572
1625
  children: [
1626
+ textStyleOverrideCss && /* @__PURE__ */ jsx("style", { children: textStyleOverrideCss }),
1573
1627
  /* @__PURE__ */ jsxs(
1574
1628
  "svg",
1575
1629
  {
@@ -1932,6 +1986,9 @@ function renderOutlinePaint(paint) {
1932
1986
  }
1933
1987
  );
1934
1988
  }
1989
+ if (paint.kind === "rectPath") {
1990
+ 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" }) });
1991
+ }
1935
1992
  const stops = paint.stops.map((stop, idx) => /* @__PURE__ */ jsx(
1936
1993
  "stop",
1937
1994
  {
@@ -2183,6 +2240,7 @@ var ElementRenderer = React19.memo(
2183
2240
  const visualAnimationState = backgroundAnimationState ?? animationState;
2184
2241
  const isTxt = isEditableTextElement(el) && allow.textEditable;
2185
2242
  const txtSE = hasTextProperties(el) ? el.textStyle : void 0;
2243
+ const textStyleOverrideCss = buildTextStyleOverrideCss(el.id, visualAnimationState?.textStyle);
2186
2244
  const ss = getShapeVisualStyle(
2187
2245
  el,
2188
2246
  hf,
@@ -2233,7 +2291,8 @@ var ElementRenderer = React19.memo(
2233
2291
  adjustmentHandles: adjH,
2234
2292
  onResizePointerDown,
2235
2293
  onAdjustmentPointerDown,
2236
- animationState
2294
+ animationState,
2295
+ textStyleOverrideCss
2237
2296
  }
2238
2297
  );
2239
2298
  }
@@ -2316,6 +2375,7 @@ var ElementRenderer = React19.memo(
2316
2375
  ...interactionProps,
2317
2376
  children: [
2318
2377
  renderDagDuotoneFilterForElement(el),
2378
+ textStyleOverrideCss && /* @__PURE__ */ jsx("style", { children: textStyleOverrideCss }),
2319
2379
  backgroundAnimationState ? /* @__PURE__ */ jsxs(
2320
2380
  "div",
2321
2381
  {
@@ -3025,7 +3085,7 @@ function FailedToLoad6() {
3025
3085
  var LazyModel3DScene = React19.lazy(
3026
3086
  async () => {
3027
3087
  try {
3028
- return await import('./Model3DScene-2BCR2YYD.mjs');
3088
+ return await import('./Model3DScene-O24KP723.mjs');
3029
3089
  } catch {
3030
3090
  return { default: FailedToLoad6 };
3031
3091
  }
@@ -3732,13 +3792,15 @@ function shapeBody(shape) {
3732
3792
  function DrawingShapeRenderer({
3733
3793
  elementId,
3734
3794
  shapes,
3795
+ allShapes = shapes,
3735
3796
  style,
3736
3797
  palette,
3737
3798
  nodes,
3738
3799
  nodeLabels
3739
3800
  }) {
3740
- const viewBox = computeDrawingViewBox(shapes);
3801
+ const viewBox = computeDrawingViewBox(allShapes);
3741
3802
  const rendered = projectDrawingShapes(elementId, shapes, viewBox, palette, style);
3803
+ const nodeIds = nodes ? resolveRevealedDrawingShapeNodeIds(allShapes, shapes, nodes) : void 0;
3742
3804
  const shadow = styleShadowFilter(style);
3743
3805
  return /* @__PURE__ */ jsx(
3744
3806
  "svg",
@@ -3748,7 +3810,7 @@ function DrawingShapeRenderer({
3748
3810
  preserveAspectRatio: "xMidYMid meet",
3749
3811
  "data-testid": "smartart-drawing-shapes",
3750
3812
  children: rendered.map((shape, i) => {
3751
- const nodeId = nodes ? resolveDrawingShapeNodeId(shapes[i], i, shapes, nodes) : void 0;
3813
+ const nodeId = nodeIds?.[i];
3752
3814
  const nodeLabel = nodeId ? nodeLabels?.get(nodeId) : void 0;
3753
3815
  const groupProps = nodeId ? smartArtNodeGroupProps(nodeId, shadow, nodeLabel) : { style: { filter: shadow } };
3754
3816
  return /* @__PURE__ */ jsxs("g", { ...groupProps, children: [
@@ -3913,14 +3975,12 @@ function SmartArtRendererImpl({
3913
3975
  }
3914
3976
  const smartArtData = element.smartArtData;
3915
3977
  const { nodes, drawingShapes, chrome } = smartArtData;
3916
- const diagramBuild = animationState?.build?.kind === "diagram" ? animationState.build : void 0;
3917
- const shownNodeCount = diagramBuild ? revealedSmartArtNodeCount(nodes, diagramBuild) : nodes.length;
3918
- const isPartialBuild = diagramBuild !== void 0 && shownNodeCount < nodes.length;
3919
- const revealedNodes = isPartialBuild ? nodes.slice(0, shownNodeCount) : nodes;
3920
- const revealedShapes = isPartialBuild && drawingShapes && drawingShapes.length > 0 ? drawingShapes.slice(
3921
- 0,
3922
- Math.ceil(shownNodeCount / Math.max(nodes.length, 1) * drawingShapes.length)
3923
- ) : drawingShapes;
3978
+ const { nodes: revealedNodes } = resolveRevealedSmartArtNodes(
3979
+ nodes,
3980
+ animationState,
3981
+ smartArtData.presLayoutVars
3982
+ );
3983
+ const revealedShapes = drawingShapes && drawingShapes.length > 0 ? resolveRevealedDrawingShapes(drawingShapes, nodes, animationState) : drawingShapes;
3924
3984
  if (nodes.length === 0) {
3925
3985
  return /* @__PURE__ */ jsx(
3926
3986
  "div",
@@ -3976,6 +4036,7 @@ function SmartArtRendererImpl({
3976
4036
  {
3977
4037
  elementId: element.id,
3978
4038
  shapes: revealedShapes,
4039
+ allShapes: drawingShapes,
3979
4040
  style,
3980
4041
  palette,
3981
4042
  nodes,
@@ -4039,6 +4100,28 @@ function arePropsEqual(prev, next) {
4039
4100
  if (prevBuild?.kind !== nextBuild?.kind || prevBuild?.mode !== nextBuild?.mode || prevBuild?.progress !== nextBuild?.progress) {
4040
4101
  return false;
4041
4102
  }
4103
+ return sameDiagramReveal(prev.animationState?.diagramReveal, next.animationState?.diagramReveal);
4104
+ }
4105
+ function sameDiagramReveal(prev, next) {
4106
+ if (prev === next) {
4107
+ return true;
4108
+ }
4109
+ if (!prev || !next) {
4110
+ return false;
4111
+ }
4112
+ if (prev.mode !== next.mode || prev.descriptor.background !== next.descriptor.background) {
4113
+ return false;
4114
+ }
4115
+ const prevIds = prev.descriptor.nodeIds;
4116
+ const nextIds = next.descriptor.nodeIds;
4117
+ if (prevIds.size !== nextIds.size) {
4118
+ return false;
4119
+ }
4120
+ for (const id of prevIds) {
4121
+ if (!nextIds.has(id)) {
4122
+ return false;
4123
+ }
4124
+ }
4042
4125
  return true;
4043
4126
  }
4044
4127
  var SmartArtRenderer = React19.memo(SmartArtRendererImpl, arePropsEqual);
@@ -4110,7 +4193,8 @@ function SmartArt3DRenderer({
4110
4193
  );
4111
4194
  return buildSmartArt3DModel(layoutResult, {
4112
4195
  background: chrome?.backgroundColor,
4113
- spatial: true
4196
+ spatial: true,
4197
+ coherent3DOffNodeIds: collectCoherent3DOffNodeIds(nodes)
4114
4198
  });
4115
4199
  }, [element]);
4116
4200
  const svgFallback = /* @__PURE__ */ jsx(SmartArtRenderer, { element, className });
@@ -6306,7 +6390,7 @@ function AccountPage() {
6306
6390
  return void 0;
6307
6391
  });
6308
6392
  };
6309
- const version = "3.5.4" ;
6393
+ const version = "3.7.0" ;
6310
6394
  return /* @__PURE__ */ jsxs("div", { className: "mt-8 max-w-[700px] space-y-6", children: [
6311
6395
  /* @__PURE__ */ jsxs("section", { className: cardClass, children: [
6312
6396
  /* @__PURE__ */ jsxs("h2", { className: "flex items-center gap-2 text-sm font-semibold", children: [
@@ -8187,6 +8271,52 @@ function RecentColorsRow({
8187
8271
  }
8188
8272
  );
8189
8273
  }
8274
+ var ThemeColorMapContext = createContext(void 0);
8275
+ var ThemeColorMapProvider = ThemeColorMapContext.Provider;
8276
+ function useThemeColorMap() {
8277
+ return useContext(ThemeColorMapContext);
8278
+ }
8279
+ function ThemeColorSwatchGrid({
8280
+ prefix,
8281
+ disabled,
8282
+ selectedRef,
8283
+ selectedHex,
8284
+ onPick
8285
+ }) {
8286
+ const { t } = useTranslation();
8287
+ const themeColorMap = useThemeColorMap();
8288
+ const columns = useMemo(() => buildThemeColorSwatchGrid(themeColorMap), [themeColorMap]);
8289
+ const rows = useMemo(() => themeColorSwatchRows(columns), [columns]);
8290
+ const selected = useMemo(
8291
+ () => findSelectedThemeSwatch(columns, selectedRef, selectedHex),
8292
+ [columns, selectedRef, selectedHex]
8293
+ );
8294
+ if (columns.length === 0) {
8295
+ return null;
8296
+ }
8297
+ return /* @__PURE__ */ jsxs("div", { className: "mt-1", children: [
8298
+ /* @__PURE__ */ jsx("div", { className: "text-[10px] text-muted-foreground mb-1", children: t("pptx.colorPicker.themeColors") }),
8299
+ /* @__PURE__ */ jsx("div", { className: "flex flex-col gap-0.5", children: rows.map((row, rowIndex) => (
8300
+ // eslint-disable-next-line react/no-array-index-key
8301
+ /* @__PURE__ */ jsx("div", { className: "flex gap-0.5", children: row.map(
8302
+ (swatch, colIndex) => swatch ? /* @__PURE__ */ jsx(
8303
+ "button",
8304
+ {
8305
+ type: "button",
8306
+ disabled,
8307
+ "data-pptx-compact": true,
8308
+ title: swatch.label,
8309
+ "aria-label": swatch.label,
8310
+ 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"}`,
8311
+ style: { backgroundColor: swatch.hex },
8312
+ onClick: () => onPick(themeSwatchCommit(swatch))
8313
+ },
8314
+ `${prefix}-theme-${swatch.ref.scheme}-${rowIndex}`
8315
+ ) : /* @__PURE__ */ jsx("div", { className: "h-4 w-4" }, `${prefix}-theme-empty-${rowIndex}-${colIndex}`)
8316
+ ) }, `${prefix}-theme-row-${rowIndex}`)
8317
+ )) })
8318
+ ] });
8319
+ }
8190
8320
  var LINE_SPACING_OPTIONS = [
8191
8321
  { label: "1.0", value: 1 },
8192
8322
  { label: "1.15", value: 1.15 },
@@ -8359,18 +8489,6 @@ function getEffectiveTextStyle(element, tableEditorState) {
8359
8489
  }
8360
8490
  return void 0;
8361
8491
  }
8362
- var FONT_COLOR_PRESETS = [
8363
- "#000000",
8364
- "#ffffff",
8365
- "#ff0000",
8366
- "#00aa00",
8367
- "#0000ff",
8368
- "#ff8800",
8369
- "#8800cc",
8370
- "#00cccc",
8371
- "#ff69b4",
8372
- "#808080"
8373
- ];
8374
8492
  var HIGHLIGHT_COLOR_PRESETS = [
8375
8493
  "#ffff00",
8376
8494
  "#00ff00",
@@ -8392,6 +8510,7 @@ function TextSection(p) {
8392
8510
  const canFormat = isTextEl || isTable;
8393
8511
  const effectiveTs = getEffectiveTextStyle(p.selectedElement, p.tableEditorState);
8394
8512
  const currentColor = isTextEl && p.selectedElement && hasTextProperties(p.selectedElement) ? p.selectedElement.textSegments?.[0]?.style?.color ?? p.selectedElement.textStyle?.color ?? "#000000" : effectiveTs?.color ?? "#000000";
8513
+ const currentColorThemeRef = isTextEl && p.selectedElement && hasTextProperties(p.selectedElement) ? p.selectedElement.textSegments?.[0]?.style?.colorRef ?? p.selectedElement.textStyle?.colorRef : void 0;
8395
8514
  const currentHighlight = isTextEl && p.selectedElement && hasTextProperties(p.selectedElement) ? p.selectedElement.textSegments?.[0]?.style?.highlightColor ?? p.selectedElement.textStyle?.highlightColor ?? "#ffff00" : "#ffff00";
8396
8515
  const colorInputRef = useRef(null);
8397
8516
  const highlightInputRef = useRef(null);
@@ -8401,11 +8520,11 @@ function TextSection(p) {
8401
8520
  const highlightMenuRef = useRef(null);
8402
8521
  const { pushColor } = useRecentColors();
8403
8522
  const handleColorChange = useCallback(
8404
- (color) => {
8523
+ (color, ref) => {
8405
8524
  if (!canFormat) {
8406
8525
  return;
8407
8526
  }
8408
- p.onUpdateTextStyle({ color });
8527
+ p.onUpdateTextStyle({ color, colorRef: ref });
8409
8528
  pushColor(color);
8410
8529
  },
8411
8530
  [canFormat, p, pushColor]
@@ -8736,19 +8855,31 @@ function TextSection(p) {
8736
8855
  ]
8737
8856
  }
8738
8857
  ),
8739
- /* @__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: [
8740
- /* @__PURE__ */ jsx("div", { className: "grid grid-cols-5 gap-1.5 mb-2", children: FONT_COLOR_PRESETS.map((c) => /* @__PURE__ */ jsx(
8858
+ /* @__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: [
8859
+ /* @__PURE__ */ jsx(
8860
+ ThemeColorSwatchGrid,
8861
+ {
8862
+ prefix: "font-color",
8863
+ disabled: !canMut,
8864
+ selectedRef: currentColorThemeRef,
8865
+ selectedHex: currentColor,
8866
+ onPick: (c) => handleColorChange(c.hex, c.ref)
8867
+ }
8868
+ ),
8869
+ /* @__PURE__ */ jsx("div", { className: "text-[10px] text-muted-foreground mt-1 mb-1", children: t("pptx.colorPicker.standardColors") }),
8870
+ /* @__PURE__ */ jsx("div", { className: "grid grid-cols-5 gap-1.5 mb-2", children: OFFICE_COLOR_SWATCHES.map((c) => /* @__PURE__ */ jsx(
8741
8871
  "button",
8742
8872
  {
8743
8873
  type: "button",
8744
- "aria-label": c,
8874
+ "aria-label": c.label,
8875
+ title: c.label,
8745
8876
  "data-pptx-compact": true,
8746
- className: `w-5 h-5 rounded-full border transition-transform hover:scale-125 ${currentColor?.toLowerCase() === c ? "border-primary ring-1 ring-primary" : "border-border"}`,
8747
- style: { backgroundColor: c },
8877
+ 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"}`,
8878
+ style: { backgroundColor: c.hex },
8748
8879
  onMouseDown: (e) => e.preventDefault(),
8749
- onClick: () => handleColorChange(c)
8880
+ onClick: () => handleColorChange(c.hex)
8750
8881
  },
8751
- c
8882
+ c.hex
8752
8883
  )) }),
8753
8884
  /* @__PURE__ */ jsx(
8754
8885
  "button",
@@ -9634,12 +9765,29 @@ function ShapeColorPopover({
9634
9765
  onToggle,
9635
9766
  disabled,
9636
9767
  swatchAriaLabel,
9768
+ selectedRef,
9769
+ selectedHex,
9637
9770
  onApply,
9638
9771
  onClose
9639
9772
  }) {
9773
+ const { t } = useTranslation();
9640
9774
  return /* @__PURE__ */ jsxs("div", { className: "relative", ref: anchorRef, children: [
9641
9775
  /* @__PURE__ */ jsx("button", { type: "button", disabled, className: pill, title, onClick: onToggle, children: icon }),
9642
9776
  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: [
9777
+ /* @__PURE__ */ jsx(
9778
+ ThemeColorSwatchGrid,
9779
+ {
9780
+ prefix,
9781
+ disabled,
9782
+ selectedRef,
9783
+ selectedHex,
9784
+ onPick: (c) => {
9785
+ onApply(c.hex, c.ref);
9786
+ onClose();
9787
+ }
9788
+ }
9789
+ ),
9790
+ /* @__PURE__ */ jsx("div", { className: "mt-1 text-[10px] text-muted-foreground mb-1", children: t("pptx.colorPicker.standardColors") }),
9643
9791
  /* @__PURE__ */ jsx("div", { className: "grid grid-cols-6 gap-1", children: RIBBON_SHAPE_SWATCHES.map((c) => /* @__PURE__ */ jsx(
9644
9792
  "button",
9645
9793
  {
@@ -9674,6 +9822,7 @@ var TOP_SHAPES = SHAPE_PRESETS.slice(0, 12);
9674
9822
  function DrawingGroup(p) {
9675
9823
  const { t } = useTranslation();
9676
9824
  const { pushColor } = useRecentColors();
9825
+ const selectedShapeStyle = p.selectedElement && hasShapeProperties(p.selectedElement) ? p.selectedElement.shapeStyle : void 0;
9677
9826
  const [shapesOpen, setShapesOpen] = useState(false);
9678
9827
  const [arrangeOpen, setArrangeOpen] = useState(false);
9679
9828
  const [fillOpen, setFillOpen] = useState(false);
@@ -9846,8 +9995,10 @@ function DrawingGroup(p) {
9846
9995
  onToggle: () => setFillOpen((v) => !v),
9847
9996
  disabled: !p.canEdit || !p.selectedElement,
9848
9997
  swatchAriaLabel: "Fill colour",
9849
- onApply: (c) => {
9850
- p.onUpdateElementStyle?.(shapeFillChange(c));
9998
+ selectedRef: selectedShapeStyle?.fillColorRef,
9999
+ selectedHex: selectedShapeStyle?.fillColor,
10000
+ onApply: (c, ref) => {
10001
+ p.onUpdateElementStyle?.(shapeFillChange(c, ref));
9851
10002
  pushColor(c);
9852
10003
  },
9853
10004
  onClose: () => setFillOpen(false)
@@ -9864,8 +10015,10 @@ function DrawingGroup(p) {
9864
10015
  onToggle: () => setOutlineOpen((v) => !v),
9865
10016
  disabled: !p.canEdit || !p.selectedElement,
9866
10017
  swatchAriaLabel: "Outline colour",
9867
- onApply: (c) => {
9868
- p.onUpdateElementStyle?.(shapeOutlineChange(c));
10018
+ selectedRef: selectedShapeStyle?.strokeColorRef,
10019
+ selectedHex: selectedShapeStyle?.strokeColor,
10020
+ onApply: (c, ref) => {
10021
+ p.onUpdateElementStyle?.(shapeOutlineChange(c, ref));
9869
10022
  pushColor(c);
9870
10023
  },
9871
10024
  onClose: () => setOutlineOpen(false)
@@ -22534,7 +22687,8 @@ function ChartTypeSelector({
22534
22687
  seriesCount,
22535
22688
  categoryCount,
22536
22689
  canEdit,
22537
- onUpdateChartData
22690
+ onUpdateChartData,
22691
+ onTitleChange
22538
22692
  }) {
22539
22693
  const { t } = useTranslation();
22540
22694
  const supportsGrouping = GROUPING_SUPPORTED_TYPES.has(chartType);
@@ -22558,7 +22712,7 @@ function ChartTypeSelector({
22558
22712
  disabled: !canEdit,
22559
22713
  className: INPUT2,
22560
22714
  value: title ?? "",
22561
- onChange: (e) => onUpdateChartData({ title: e.target.value })
22715
+ onChange: (e) => onTitleChange(e.target.value)
22562
22716
  }
22563
22717
  )
22564
22718
  ] }),
@@ -22747,6 +22901,15 @@ function ChartDataPanel({ selectedElement, canEdit, onUpdateElement }) {
22747
22901
  },
22748
22902
  [chartData, replaceChartData]
22749
22903
  );
22904
+ const updateTitle = useCallback(
22905
+ (text) => {
22906
+ if (!chartData) {
22907
+ return;
22908
+ }
22909
+ updateChartData(collapseChartTitleRunsForEdit(chartData, text));
22910
+ },
22911
+ [chartData, updateChartData]
22912
+ );
22750
22913
  const updateStyle = useCallback(
22751
22914
  (patch) => {
22752
22915
  if (!chartData) {
@@ -22947,7 +23110,8 @@ function ChartDataPanel({ selectedElement, canEdit, onUpdateElement }) {
22947
23110
  seriesCount: series.length,
22948
23111
  categoryCount: categories.length,
22949
23112
  canEdit,
22950
- onUpdateChartData: updateChartData
23113
+ onUpdateChartData: updateChartData,
23114
+ onTitleChange: updateTitle
22951
23115
  }
22952
23116
  ),
22953
23117
  /* @__PURE__ */ jsx(
@@ -24777,6 +24941,48 @@ function MediaPropertiesPanel({
24777
24941
  )
24778
24942
  ] });
24779
24943
  }
24944
+ function AccessibilityTextSection({
24945
+ selectedElement,
24946
+ canEdit,
24947
+ onUpdateElement
24948
+ }) {
24949
+ const { t } = useTranslation();
24950
+ const fields = getNonVisualDescriptionFields(selectedElement);
24951
+ if (!fields.showAltText && !fields.showTitle) {
24952
+ return null;
24953
+ }
24954
+ return /* @__PURE__ */ jsxs("div", { className: CARD, "data-pptx-accessibility-text": true, children: [
24955
+ /* @__PURE__ */ jsx("div", { className: HEADING, children: t("pptx.accessibility.heading", "Accessibility") }),
24956
+ fields.showAltText && /* @__PURE__ */ jsxs("label", { className: "flex flex-col gap-1 text-[11px]", children: [
24957
+ /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: t("pptx.elementAccessibility.altText") }),
24958
+ /* @__PURE__ */ jsx(
24959
+ "textarea",
24960
+ {
24961
+ rows: 2,
24962
+ disabled: !canEdit,
24963
+ placeholder: t("pptx.elementAccessibility.altTextPlaceholder"),
24964
+ className: cn(INPUT, "resize-none text-[11px]"),
24965
+ value: fields.altText,
24966
+ onChange: (e) => onUpdateElement({ altText: e.target.value })
24967
+ }
24968
+ )
24969
+ ] }),
24970
+ fields.showTitle && /* @__PURE__ */ jsxs("label", { className: "flex flex-col gap-1 text-[11px]", children: [
24971
+ /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: t("pptx.elementAccessibility.title") }),
24972
+ /* @__PURE__ */ jsx(
24973
+ "input",
24974
+ {
24975
+ type: "text",
24976
+ disabled: !canEdit,
24977
+ placeholder: t("pptx.elementAccessibility.titlePlaceholder"),
24978
+ className: cn(INPUT, "text-[11px]"),
24979
+ value: fields.title,
24980
+ onChange: (e) => onUpdateElement({ title: e.target.value })
24981
+ }
24982
+ )
24983
+ ] })
24984
+ ] });
24985
+ }
24780
24986
 
24781
24987
  // src/viewer/components/inspector/fill-stroke-options.ts
24782
24988
  var COMPOUND_LINE_OPTIONS2 = COMPOUND_LINE_OPTIONS;
@@ -25470,14 +25676,15 @@ function SelectRow({
25470
25676
  function ColorPickerRow({
25471
25677
  label,
25472
25678
  value,
25679
+ selectedRef,
25473
25680
  disabled,
25474
25681
  prefix,
25475
25682
  onChange
25476
25683
  }) {
25477
25684
  const { t } = useTranslation();
25478
25685
  const { pushColor } = useRecentColors();
25479
- const commit = (color) => {
25480
- onChange(color);
25686
+ const commit = (color, ref) => {
25687
+ onChange(color, ref);
25481
25688
  pushColor(color);
25482
25689
  };
25483
25690
  const handleEyedropper = async () => {
@@ -25514,20 +25721,33 @@ function ColorPickerRow({
25514
25721
  }
25515
25722
  )
25516
25723
  ] }),
25517
- /* @__PURE__ */ jsx("div", { className: "mt-1 flex flex-wrap gap-1", children: THEME_COLOR_SWATCHES.map((c) => /* @__PURE__ */ jsx(
25518
- "button",
25724
+ /* @__PURE__ */ jsx(
25725
+ ThemeColorSwatchGrid,
25519
25726
  {
25520
- type: "button",
25521
- className: `${SWATCH} ${DIS}`,
25522
- style: { backgroundColor: c },
25523
- title: `${label} ${c}`,
25524
- "aria-label": `${label} ${c}`,
25525
- "data-pptx-compact": true,
25727
+ prefix,
25526
25728
  disabled,
25527
- onClick: () => commit(c)
25528
- },
25529
- `${prefix}-theme-${c}`
25530
- )) }),
25729
+ selectedRef,
25730
+ selectedHex: value,
25731
+ onPick: (c) => commit(c.hex, c.ref)
25732
+ }
25733
+ ),
25734
+ /* @__PURE__ */ jsxs("div", { className: "mt-1", children: [
25735
+ /* @__PURE__ */ jsx("div", { className: "text-[10px] text-muted-foreground mb-1", children: t("pptx.colorPicker.standardColors") }),
25736
+ /* @__PURE__ */ jsx("div", { className: "flex flex-wrap gap-1", children: OFFICE_COLOR_SWATCHES.map((c) => /* @__PURE__ */ jsx(
25737
+ "button",
25738
+ {
25739
+ type: "button",
25740
+ className: `${SWATCH} ${DIS}`,
25741
+ style: { backgroundColor: c.hex },
25742
+ title: `${label} ${c.label}`,
25743
+ "aria-label": `${label} ${c.label}`,
25744
+ "data-pptx-compact": true,
25745
+ disabled,
25746
+ onClick: () => commit(c.hex)
25747
+ },
25748
+ `${prefix}-standard-${c.hex}`
25749
+ )) })
25750
+ ] }),
25531
25751
  /* @__PURE__ */ jsx(RecentColorsRow, { prefix, disabled, onCommit: commit })
25532
25752
  ] });
25533
25753
  }
@@ -25553,7 +25773,7 @@ function GradientStopRow({
25553
25773
  value: normalizeHexColor(stop.color, "#3b82f6"),
25554
25774
  onChange: (e) => {
25555
25775
  const hex = normalizeHexColor(e.target.value, "#3b82f6");
25556
- patchStop({ color: hex });
25776
+ patchStop({ color: hex, colorRef: void 0 });
25557
25777
  pushColor(hex);
25558
25778
  },
25559
25779
  className: "h-7 w-10 rounded border border-border bg-muted"
@@ -25581,6 +25801,18 @@ function GradientStopRow({
25581
25801
  }
25582
25802
  )
25583
25803
  ] }),
25804
+ /* @__PURE__ */ jsx(
25805
+ ThemeColorSwatchGrid,
25806
+ {
25807
+ prefix: `gradient-stop-${index}`,
25808
+ selectedRef: stop.colorRef,
25809
+ selectedHex: stop.color,
25810
+ onPick: (c) => {
25811
+ patchStop({ color: c.hex, colorRef: c.ref });
25812
+ pushColor(c.hex);
25813
+ }
25814
+ }
25815
+ ),
25584
25816
  /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-[auto,1fr,auto] items-center gap-2 pl-1", children: [
25585
25817
  /* @__PURE__ */ jsx("span", { className: "text-[10px] text-muted-foreground w-10 text-center", children: "Opacity" }),
25586
25818
  /* @__PURE__ */ jsx(
@@ -25821,6 +26053,7 @@ function StrokeEffectsSection({
25821
26053
  label: t("pptx.inspector.stroke"),
25822
26054
  prefix: "stroke",
25823
26055
  value: normalizeHexColor(style?.strokeColor, DEFAULT_STROKE_COLOR),
26056
+ selectedRef: style?.strokeColorRef,
25824
26057
  onChange: onSetStrokeColor
25825
26058
  }
25826
26059
  ),
@@ -26029,6 +26262,7 @@ function FillStrokeProperties({
26029
26262
  label: t("pptx.fill.fill"),
26030
26263
  prefix: "fill",
26031
26264
  value: normalizeHexColor(style?.fillColor, DEFAULT_FILL_COLOR),
26265
+ selectedRef: style?.fillColorRef,
26032
26266
  disabled: line,
26033
26267
  onChange: onSetFillColor
26034
26268
  }
@@ -26881,8 +27115,8 @@ function ShapeTextPanels({
26881
27115
  ),
26882
27116
  canEdit,
26883
27117
  onUpdateShapeStyle: onUpdateElementStyle,
26884
- onSetFillColor: (hex) => onUpdateElementStyle({ fillColor: hex, fillMode: "solid" }),
26885
- onSetStrokeColor: (hex) => onUpdateElementStyle({ strokeColor: hex })
27118
+ onSetFillColor: (hex, ref) => onUpdateElementStyle({ fillColor: hex, fillMode: "solid", fillColorRef: ref }),
27119
+ onSetStrokeColor: (hex, ref) => onUpdateElementStyle({ strokeColor: hex, strokeColorRef: ref })
26886
27120
  }
26887
27121
  )
26888
27122
  ] }),
@@ -26914,16 +27148,26 @@ function ShapeTextPanels({
26914
27148
  ariaLabel: "Text Color",
26915
27149
  value: normalizeHexColor(selectedElement.textStyle?.color, "#000000"),
26916
27150
  className: "w-full h-7 rounded border border-border bg-transparent cursor-pointer",
26917
- onCommit: (hex) => onUpdateTextStyle({ color: hex })
27151
+ onCommit: (hex) => onUpdateTextStyle({ color: hex, colorRef: void 0 })
26918
27152
  }
26919
27153
  )
26920
27154
  ] }),
27155
+ /* @__PURE__ */ jsx("div", { className: "col-span-2", children: /* @__PURE__ */ jsx(
27156
+ ThemeColorSwatchGrid,
27157
+ {
27158
+ prefix: "text-color",
27159
+ disabled: !canEdit,
27160
+ selectedRef: selectedElement.textStyle?.colorRef,
27161
+ selectedHex: selectedElement.textStyle?.color,
27162
+ onPick: (c) => onUpdateTextStyle({ color: c.hex, colorRef: c.ref })
27163
+ }
27164
+ ) }),
26921
27165
  /* @__PURE__ */ jsx("div", { className: "col-span-2", children: /* @__PURE__ */ jsx(
26922
27166
  RecentColorsRow,
26923
27167
  {
26924
27168
  prefix: "text-color",
26925
27169
  disabled: !canEdit,
26926
- onCommit: (hex) => onUpdateTextStyle({ color: hex })
27170
+ onCommit: (hex) => onUpdateTextStyle({ color: hex, colorRef: void 0 })
26927
27171
  }
26928
27172
  ) }),
26929
27173
  /* @__PURE__ */ jsxs("div", { className: "flex gap-1 col-span-2", children: [
@@ -26970,6 +27214,14 @@ function ShapeTextPanels({
26970
27214
  canEdit,
26971
27215
  onUpdateTextStyle
26972
27216
  }
27217
+ ),
27218
+ (selectedElement.type === "text" || selectedElement.type === "shape" || selectedElement.type === "connector") && /* @__PURE__ */ jsx(
27219
+ AccessibilityTextSection,
27220
+ {
27221
+ selectedElement,
27222
+ canEdit,
27223
+ onUpdateElement
27224
+ }
26973
27225
  )
26974
27226
  ] });
26975
27227
  }
@@ -28050,6 +28302,39 @@ function GradientControls({
28050
28302
  )
28051
28303
  ] });
28052
28304
  }
28305
+ function TableCellColorField({
28306
+ label,
28307
+ prefix,
28308
+ value,
28309
+ fallback,
28310
+ selectedRef,
28311
+ disabled,
28312
+ onCommit
28313
+ }) {
28314
+ const hex = normalizeHexColor(value, fallback);
28315
+ return /* @__PURE__ */ jsxs("label", { className: "flex flex-col gap-1", children: [
28316
+ /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: label }),
28317
+ /* @__PURE__ */ jsx(
28318
+ DebouncedColorInput,
28319
+ {
28320
+ disabled,
28321
+ value: hex,
28322
+ className: "w-full h-7 rounded border border-border bg-transparent cursor-pointer",
28323
+ onCommit: (next) => onCommit(next, void 0)
28324
+ }
28325
+ ),
28326
+ /* @__PURE__ */ jsx(
28327
+ ThemeColorSwatchGrid,
28328
+ {
28329
+ prefix,
28330
+ disabled,
28331
+ selectedRef,
28332
+ selectedHex: hex,
28333
+ onPick: (c) => onCommit(c.hex, c.ref)
28334
+ }
28335
+ )
28336
+ ] });
28337
+ }
28053
28338
  function TableCellFormattingPanel({
28054
28339
  tableData: td,
28055
28340
  tableEditorState,
@@ -28099,30 +28384,30 @@ function TableCellFormattingPanel({
28099
28384
  )
28100
28385
  ] }),
28101
28386
  /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-2 gap-1.5", children: [
28102
- /* @__PURE__ */ jsxs("label", { className: "flex flex-col gap-1", children: [
28103
- /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: t("pptx.table.color") }),
28104
- /* @__PURE__ */ jsx(
28105
- DebouncedColorInput,
28106
- {
28107
- disabled: !canEdit,
28108
- value: normalizeHexColor(cs.color, "#000000"),
28109
- className: "w-full h-7 rounded border border-border bg-transparent cursor-pointer",
28110
- onCommit: (hex) => updateCellStyle({ color: hex })
28111
- }
28112
- )
28113
- ] }),
28114
- /* @__PURE__ */ jsxs("label", { className: "flex flex-col gap-1", children: [
28115
- /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: t("pptx.table.background") }),
28116
- /* @__PURE__ */ jsx(
28117
- DebouncedColorInput,
28118
- {
28119
- disabled: !canEdit,
28120
- value: normalizeHexColor(cs.backgroundColor, "#ffffff"),
28121
- className: "w-full h-7 rounded border border-border bg-transparent cursor-pointer",
28122
- onCommit: (hex) => updateCellStyle({ backgroundColor: hex })
28123
- }
28124
- )
28125
- ] })
28387
+ /* @__PURE__ */ jsx(
28388
+ TableCellColorField,
28389
+ {
28390
+ label: t("pptx.table.color"),
28391
+ prefix: "table-cell-text",
28392
+ value: cs.color,
28393
+ fallback: "#000000",
28394
+ selectedRef: cs.colorRef,
28395
+ disabled: !canEdit,
28396
+ onCommit: (hex, ref) => updateCellStyle({ color: hex, colorRef: ref })
28397
+ }
28398
+ ),
28399
+ /* @__PURE__ */ jsx(
28400
+ TableCellColorField,
28401
+ {
28402
+ label: t("pptx.table.background"),
28403
+ prefix: "table-cell-bg",
28404
+ value: cs.backgroundColor,
28405
+ fallback: "#ffffff",
28406
+ selectedRef: cs.backgroundColorRef,
28407
+ disabled: !canEdit,
28408
+ onCommit: (hex, ref) => updateCellStyle({ backgroundColor: hex, backgroundColorRef: ref })
28409
+ }
28410
+ )
28126
28411
  ] }),
28127
28412
  /* @__PURE__ */ jsx(
28128
28413
  TableCellAdvancedFill,
@@ -28271,13 +28556,252 @@ function TableCellFormattingPanel({
28271
28556
  ] })
28272
28557
  ] });
28273
28558
  }
28559
+ function TableStyleEditorFields({
28560
+ descriptor,
28561
+ canEdit,
28562
+ onEdit
28563
+ }) {
28564
+ const { t } = useTranslation();
28565
+ return /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
28566
+ /* @__PURE__ */ jsxs("div", { className: "space-y-1", children: [
28567
+ /* @__PURE__ */ jsx("div", { className: HEADING, children: t("pptx.tableStyleEditor.fillSection") }),
28568
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 text-[11px]", children: [
28569
+ /* @__PURE__ */ jsx(
28570
+ "input",
28571
+ {
28572
+ type: "color",
28573
+ disabled: !canEdit,
28574
+ value: descriptor.fill.color.hex,
28575
+ onChange: (e) => onEdit({ kind: "fillColor", hex: e.target.value, ref: void 0 }),
28576
+ className: "h-6 w-8 rounded border border-border bg-transparent cursor-pointer"
28577
+ }
28578
+ ),
28579
+ /* @__PURE__ */ jsxs("label", { className: "flex items-center gap-1", children: [
28580
+ /* @__PURE__ */ jsx(
28581
+ "input",
28582
+ {
28583
+ type: "checkbox",
28584
+ disabled: !canEdit,
28585
+ checked: descriptor.fill.noFill,
28586
+ onChange: (e) => onEdit({ kind: "fillNone", noFill: e.target.checked })
28587
+ }
28588
+ ),
28589
+ t("pptx.tableStyleEditor.noFill")
28590
+ ] })
28591
+ ] }),
28592
+ /* @__PURE__ */ jsx(
28593
+ ThemeColorSwatchGrid,
28594
+ {
28595
+ prefix: "table-style-fill",
28596
+ disabled: !canEdit,
28597
+ selectedRef: descriptor.fill.color.ref,
28598
+ selectedHex: descriptor.fill.color.hex,
28599
+ onPick: (c) => onEdit({ kind: "fillColor", hex: c.hex, ref: c.ref })
28600
+ }
28601
+ )
28602
+ ] }),
28603
+ descriptor.hasTextAndBorders && /* @__PURE__ */ jsxs(Fragment, { children: [
28604
+ /* @__PURE__ */ jsxs("div", { className: "space-y-1", children: [
28605
+ /* @__PURE__ */ jsx("div", { className: HEADING, children: t("pptx.tableStyleEditor.textSection") }),
28606
+ /* @__PURE__ */ jsx("div", { className: "flex gap-1", children: ["bold", "italic", "underline"].map((flag) => /* @__PURE__ */ jsx(
28607
+ "button",
28608
+ {
28609
+ type: "button",
28610
+ disabled: !canEdit,
28611
+ className: `${BTN} ${descriptor.text[flag] ? "bg-accent" : ""}`,
28612
+ onClick: () => onEdit(textFlagEdit(flag, !descriptor.text[flag])),
28613
+ children: t(`pptx.format.${flag}`)
28614
+ },
28615
+ flag
28616
+ )) }),
28617
+ /* @__PURE__ */ jsxs("label", { className: "flex items-center gap-2 text-[11px]", children: [
28618
+ /* @__PURE__ */ jsx("span", { children: t("pptx.tableStyleEditor.textColor") }),
28619
+ /* @__PURE__ */ jsx(
28620
+ "input",
28621
+ {
28622
+ type: "color",
28623
+ disabled: !canEdit,
28624
+ value: descriptor.text.color.hex,
28625
+ onChange: (e) => onEdit({ kind: "textColor", hex: e.target.value, ref: void 0 }),
28626
+ className: "h-6 w-8 rounded border border-border bg-transparent cursor-pointer"
28627
+ }
28628
+ )
28629
+ ] }),
28630
+ /* @__PURE__ */ jsx(
28631
+ ThemeColorSwatchGrid,
28632
+ {
28633
+ prefix: "table-style-text",
28634
+ disabled: !canEdit,
28635
+ selectedRef: descriptor.text.color.ref,
28636
+ selectedHex: descriptor.text.color.hex,
28637
+ onPick: (c) => onEdit({ kind: "textColor", hex: c.hex, ref: c.ref })
28638
+ }
28639
+ )
28640
+ ] }),
28641
+ /* @__PURE__ */ jsxs("div", { className: "space-y-1", children: [
28642
+ /* @__PURE__ */ jsx("div", { className: HEADING, children: t("pptx.tableStyleEditor.bordersSection") }),
28643
+ TABLE_STYLE_BORDER_SIDES.map((side) => /* @__PURE__ */ jsx(
28644
+ BorderSideRow,
28645
+ {
28646
+ side,
28647
+ state: descriptor.borders[side],
28648
+ canEdit,
28649
+ onEdit
28650
+ },
28651
+ side
28652
+ ))
28653
+ ] })
28654
+ ] })
28655
+ ] });
28656
+ }
28657
+ function textFlagEdit(flag, value) {
28658
+ if (flag === "bold") {
28659
+ return { kind: "textBold", value };
28660
+ }
28661
+ if (flag === "italic") {
28662
+ return { kind: "textItalic", value };
28663
+ }
28664
+ return { kind: "textUnderline", value };
28665
+ }
28666
+ function BorderSideRow({
28667
+ side,
28668
+ state,
28669
+ canEdit,
28670
+ onEdit
28671
+ }) {
28672
+ const { t } = useTranslation();
28673
+ return /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1.5 text-[11px]", children: [
28674
+ /* @__PURE__ */ jsx("span", { className: "w-28 shrink-0 text-muted-foreground", children: t(TABLE_STYLE_BORDER_SIDE_LABEL_KEYS[side]) }),
28675
+ /* @__PURE__ */ jsx(
28676
+ "input",
28677
+ {
28678
+ type: "color",
28679
+ disabled: !canEdit,
28680
+ value: state.color.hex,
28681
+ onChange: (e) => onEdit({ kind: "borderColor", side, hex: e.target.value, ref: void 0 }),
28682
+ className: "h-6 w-7 rounded border border-border bg-transparent cursor-pointer"
28683
+ }
28684
+ ),
28685
+ /* @__PURE__ */ jsx(
28686
+ "input",
28687
+ {
28688
+ type: "number",
28689
+ min: 0,
28690
+ max: 20,
28691
+ disabled: !canEdit,
28692
+ value: state.width,
28693
+ onChange: (e) => onEdit({ kind: "borderWidth", side, width: Number(e.target.value) }),
28694
+ className: `${INPUT} w-12`
28695
+ }
28696
+ ),
28697
+ /* @__PURE__ */ jsx(
28698
+ "select",
28699
+ {
28700
+ disabled: !canEdit,
28701
+ value: state.dash,
28702
+ onChange: (e) => onEdit({ kind: "borderDash", side, dash: e.target.value }),
28703
+ className: INPUT,
28704
+ children: TABLE_STYLE_DASH_PRESETS.map((dash) => /* @__PURE__ */ jsx("option", { value: dash, children: dash }, dash))
28705
+ }
28706
+ ),
28707
+ /* @__PURE__ */ jsxs("label", { className: "flex items-center gap-1 shrink-0", children: [
28708
+ /* @__PURE__ */ jsx(
28709
+ "input",
28710
+ {
28711
+ type: "checkbox",
28712
+ disabled: !canEdit,
28713
+ checked: state.noFill,
28714
+ onChange: (e) => onEdit({ kind: "borderNone", side, noFill: e.target.checked })
28715
+ }
28716
+ ),
28717
+ t("pptx.tableStyleEditor.noBorder")
28718
+ ] })
28719
+ ] });
28720
+ }
28721
+ function TableStyleEditor({
28722
+ styleMap,
28723
+ styleId,
28724
+ canEdit,
28725
+ onStyleMapChange,
28726
+ onDeleteStyle,
28727
+ onAssignStyle,
28728
+ onClose
28729
+ }) {
28730
+ const { t } = useTranslation();
28731
+ const themeColorMap = useThemeColorMap();
28732
+ const [activeStyleId, setActiveStyleId] = useState(
28733
+ styleId ? normalizeTableStyleGuid(styleId) : ""
28734
+ );
28735
+ const [selectedPart, setSelectedPart] = useState("wholeTbl");
28736
+ const entry = activeStyleId ? styleMap?.[activeStyleId] : void 0;
28737
+ const descriptor = describeTableStyleEditor(entry, selectedPart, themeColorMap);
28738
+ function edit(fieldEdit) {
28739
+ if (!entry || !styleMap) {
28740
+ return;
28741
+ }
28742
+ const { entry: nextEntry } = applyTableStyleFieldEdit(entry, selectedPart, fieldEdit);
28743
+ onStyleMapChange({ ...styleMap, [nextEntry.styleId]: nextEntry });
28744
+ }
28745
+ function createFromCurrent() {
28746
+ const name = window.prompt(
28747
+ t("pptx.tableStyleEditor.newStyleNamePrompt"),
28748
+ entry ? `${entry.styleName ?? ""} Copy`.trim() : ""
28749
+ );
28750
+ if (!name) {
28751
+ return;
28752
+ }
28753
+ const nextMap = { ...styleMap ?? {} };
28754
+ const created = createTableStyleEntry(nextMap, { styleName: name, basedOn: entry });
28755
+ addTableStyleToMap(nextMap, created);
28756
+ onStyleMapChange(nextMap);
28757
+ setActiveStyleId(created.styleId);
28758
+ onAssignStyle?.(created.styleId);
28759
+ }
28760
+ function handleDelete() {
28761
+ if (!entry || !styleMap || !window.confirm(t("pptx.tableStyleEditor.deleteConfirm"))) {
28762
+ return;
28763
+ }
28764
+ const nextMap = { ...styleMap };
28765
+ deleteTableStyleFromMap(nextMap, entry.styleId);
28766
+ onStyleMapChange(nextMap);
28767
+ onDeleteStyle(entry.styleId);
28768
+ onClose();
28769
+ }
28770
+ return /* @__PURE__ */ jsxs("div", { className: CARD, "data-testid": "table-style-editor", children: [
28771
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between", children: [
28772
+ /* @__PURE__ */ jsx("div", { className: HEADING, children: t("pptx.tableStyleEditor.title") }),
28773
+ /* @__PURE__ */ jsx("button", { type: "button", className: BTN, onClick: onClose, children: t("pptx.tableStyleEditor.close") })
28774
+ ] }),
28775
+ !entry && /* @__PURE__ */ jsx("div", { className: "text-[11px] text-muted-foreground", children: t("pptx.tableStyleEditor.noStyleSelected") }),
28776
+ entry && /* @__PURE__ */ jsx("div", { className: "flex flex-wrap gap-1", children: TABLE_STYLE_EDITOR_PARTS.map((part) => /* @__PURE__ */ jsx(
28777
+ "button",
28778
+ {
28779
+ type: "button",
28780
+ disabled: !canEdit,
28781
+ className: `${BTN} ${selectedPart === part.id ? "bg-accent" : ""}`,
28782
+ onClick: () => setSelectedPart(part.id),
28783
+ children: t(part.labelKey)
28784
+ },
28785
+ part.id
28786
+ )) }),
28787
+ descriptor && /* @__PURE__ */ jsx(TableStyleEditorFields, { descriptor, canEdit, onEdit: edit }),
28788
+ /* @__PURE__ */ jsxs("div", { className: "flex gap-1.5 pt-1 border-t border-border", children: [
28789
+ /* @__PURE__ */ jsx("button", { type: "button", className: BTN, disabled: !canEdit, onClick: createFromCurrent, children: entry ? t("pptx.tableStyleEditor.newFromCurrent") : t("pptx.tableStyleEditor.newStyle") }),
28790
+ entry && /* @__PURE__ */ jsx("button", { type: "button", className: BTN, disabled: !canEdit, onClick: handleDelete, children: t("pptx.tableStyleEditor.deleteStyle") })
28791
+ ] })
28792
+ ] });
28793
+ }
28274
28794
  function TablePropertiesPanel({
28275
28795
  tableElement,
28276
28796
  canEdit,
28277
28797
  onUpdateElement,
28278
- tableEditorState
28798
+ tableEditorState,
28799
+ tableStyleMap,
28800
+ onTableStyleMapChange,
28801
+ onDeleteTableStyle
28279
28802
  }) {
28280
28803
  const { t } = useTranslation();
28804
+ const [showStyleEditor, setShowStyleEditor] = useState(false);
28281
28805
  const td = tableElement.tableData;
28282
28806
  if (!td) {
28283
28807
  return null;
@@ -28368,8 +28892,30 @@ function TablePropertiesPanel({
28368
28892
  ] })
28369
28893
  },
28370
28894
  preset.id
28371
- )) })
28895
+ )) }),
28896
+ onTableStyleMapChange && /* @__PURE__ */ jsx(
28897
+ "button",
28898
+ {
28899
+ type: "button",
28900
+ className: `${BTN} mt-1.5`,
28901
+ disabled: !canEdit,
28902
+ onClick: () => setShowStyleEditor((v) => !v),
28903
+ children: t("pptx.tableStyleEditor.editButton")
28904
+ }
28905
+ )
28372
28906
  ] }),
28907
+ showStyleEditor && onTableStyleMapChange && /* @__PURE__ */ jsx(
28908
+ TableStyleEditor,
28909
+ {
28910
+ styleMap: tableStyleMap,
28911
+ styleId: td.tableStyleId,
28912
+ canEdit,
28913
+ onStyleMapChange: onTableStyleMapChange,
28914
+ onDeleteStyle: (styleId) => onDeleteTableStyle?.(styleId),
28915
+ onAssignStyle: (styleId) => updateTableData(tableStyleAssignmentUpdate(styleId)),
28916
+ onClose: () => setShowStyleEditor(false)
28917
+ }
28918
+ ),
28373
28919
  /* @__PURE__ */ jsxs("div", { className: CARD, children: [
28374
28920
  /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between mb-1", children: [
28375
28921
  /* @__PURE__ */ jsx("div", { className: HEADING, children: t("pptx.table.columnWidths") }),
@@ -28467,6 +29013,9 @@ function ElementInspectorBody({
28467
29013
  customShows,
28468
29014
  tableEditorState,
28469
29015
  mediaDataUrls,
29016
+ tableStyleMap,
29017
+ onTableStyleMapChange,
29018
+ onDeleteTableStyle,
28470
29019
  onUpdateElement,
28471
29020
  onUpdateElementStyle,
28472
29021
  onUpdateTextStyle,
@@ -28528,7 +29077,10 @@ function ElementInspectorBody({
28528
29077
  tableElement: selectedElement,
28529
29078
  canEdit,
28530
29079
  onUpdateElement,
28531
- tableEditorState
29080
+ tableEditorState,
29081
+ tableStyleMap,
29082
+ onTableStyleMapChange,
29083
+ onDeleteTableStyle
28532
29084
  }
28533
29085
  )
28534
29086
  ] }),
@@ -30567,6 +31119,9 @@ function InspectorPane(props) {
30567
31119
  onGetTemplateBackgroundColor,
30568
31120
  mediaDataUrls,
30569
31121
  theme,
31122
+ tableStyleMap,
31123
+ onTableStyleMapChange,
31124
+ onDeleteTableStyle,
30570
31125
  panelWidth
30571
31126
  } = props;
30572
31127
  const hasSelection = selectedElement !== null;
@@ -30649,6 +31204,9 @@ function InspectorPane(props) {
30649
31204
  customShows,
30650
31205
  tableEditorState,
30651
31206
  mediaDataUrls,
31207
+ tableStyleMap,
31208
+ onTableStyleMapChange,
31209
+ onDeleteTableStyle,
30652
31210
  onUpdateElement,
30653
31211
  onUpdateElementStyle,
30654
31212
  onUpdateTextStyle,
@@ -33840,6 +34398,9 @@ function ViewerInspector({
33840
34398
  onGetTemplateBackgroundColor,
33841
34399
  mediaDataUrls,
33842
34400
  theme,
34401
+ tableStyleMap,
34402
+ onTableStyleMapChange,
34403
+ onDeleteTableStyle,
33843
34404
  panelWidth
33844
34405
  }) {
33845
34406
  const { t } = useTranslation();
@@ -33929,6 +34490,9 @@ function ViewerInspector({
33929
34490
  onGetTemplateBackgroundColor,
33930
34491
  mediaDataUrls,
33931
34492
  theme,
34493
+ tableStyleMap,
34494
+ onTableStyleMapChange,
34495
+ onDeleteTableStyle,
33932
34496
  panelWidth
33933
34497
  }
33934
34498
  )
@@ -36071,10 +36635,26 @@ ${url}`)) {
36071
36635
  )
36072
36636
  );
36073
36637
  }
36638
+
36639
+ // src/viewer/hooks/useTableStyleMapHandlers.ts
36640
+ function useTableStyleMapHandlers(input) {
36641
+ const { tableStyleMap, setTableStyleMap, tableStylesToDelete, setTableStylesToDelete } = input;
36642
+ const handleTableStyleMapChange = (nextMap) => {
36643
+ const result = applyTableStyleMapChange({ tableStyleMap, tableStylesToDelete }, nextMap);
36644
+ setTableStyleMap(result.tableStyleMap);
36645
+ setTableStylesToDelete(result.tableStylesToDelete);
36646
+ };
36647
+ const handleDeleteTableStyle = (styleId) => {
36648
+ const result = applyTableStyleDelete({ tableStyleMap, tableStylesToDelete }, styleId);
36649
+ setTableStyleMap(result.tableStyleMap);
36650
+ setTableStylesToDelete(result.tableStylesToDelete);
36651
+ };
36652
+ return { handleTableStyleMapChange, handleDeleteTableStyle };
36653
+ }
36074
36654
  var AiChatPanel = lazy(async () => {
36075
36655
  const [{ useChat }, { default: Panel }] = await Promise.all([
36076
36656
  import('@ai-sdk/react'),
36077
- import('./AiChatPanel-WRQGJJVD.mjs')
36657
+ import('./AiChatPanel-A5DCEHTO.mjs')
36078
36658
  ]);
36079
36659
  function BoundAiChatPanel(props) {
36080
36660
  return /* @__PURE__ */ jsx(Panel, { ...props, useChat });
@@ -36989,6 +37569,12 @@ function ViewerSidePanels(props) {
36989
37569
  s.setCanvasSize(slideSizeToCanvasPx(size));
36990
37570
  history.markDirty();
36991
37571
  };
37572
+ const { handleTableStyleMapChange, handleDeleteTableStyle } = useTableStyleMapHandlers({
37573
+ tableStyleMap: s.tableStyleMap,
37574
+ setTableStyleMap: s.setTableStyleMap,
37575
+ tableStylesToDelete: s.tableStylesToDelete,
37576
+ setTableStylesToDelete: s.setTableStylesToDelete
37577
+ });
36992
37578
  const effectiveSlide = mode === "master" ? masterPseudoSlide : activeSlide;
36993
37579
  const currentBuiltInTheme = BUILT_IN_THEMES.find(
36994
37580
  (candidate) => themeColorSchemesEqual(s.theme?.colorScheme, candidate.colorScheme)
@@ -37046,6 +37632,9 @@ function ViewerSidePanels(props) {
37046
37632
  onGetTemplateBackgroundColor: themeHandlers.handleGetTemplateBackgroundColor,
37047
37633
  mediaDataUrls: s.mediaDataUrls,
37048
37634
  theme: s.theme,
37635
+ tableStyleMap: s.tableStyleMap,
37636
+ onTableStyleMapChange: handleTableStyleMapChange,
37637
+ onDeleteTableStyle: handleDeleteTableStyle,
37049
37638
  panelWidth
37050
37639
  }
37051
37640
  ),
@@ -38824,9 +39413,13 @@ function useAiBridge(input) {
38824
39413
  presentationProperties: live.presentationProperties,
38825
39414
  customProperties: live.customProperties,
38826
39415
  coreProperties: live.coreProperties,
38827
- appProperties: live.appProperties
39416
+ appProperties: live.appProperties,
39417
+ viewProperties: live.viewProperties,
39418
+ tableStyleMap: live.tableStyleMap,
39419
+ tableStylesDefaultId: live.tableStylesDefaultId,
39420
+ tags: live.tagCollections
38828
39421
  });
38829
- const differs = (a, b) => JSON.stringify(a) !== JSON.stringify(b);
39422
+ const differs = deckDataFieldChanged;
38830
39423
  return {
38831
39424
  getDeckMeta() {
38832
39425
  const live = ref.current;
@@ -38900,6 +39493,19 @@ function useAiBridge(input) {
38900
39493
  if (differs(before.appProperties, after.appProperties)) {
38901
39494
  live.setAppProperties(after.appProperties);
38902
39495
  }
39496
+ if (differs(before.viewProperties, after.viewProperties)) {
39497
+ live.setViewProperties(after.viewProperties);
39498
+ }
39499
+ if (differs(before.tableStyleMap, after.tableStyleMap)) {
39500
+ live.setTableStyleMap(after.tableStyleMap);
39501
+ }
39502
+ if (differs(before.tableStylesDefaultId, after.tableStylesDefaultId)) {
39503
+ live.setTableStylesDefaultId(after.tableStylesDefaultId);
39504
+ }
39505
+ const nextTags = after.tags ?? before.tags ?? [];
39506
+ if (differs(before.tags, nextTags)) {
39507
+ live.setTagCollections(nextTags);
39508
+ }
38903
39509
  live.markDirty();
38904
39510
  },
38905
39511
  getFocusedTargets() {
@@ -39326,6 +39932,10 @@ var PowerPointViewer = forwardRef(
39326
39932
  () => ({ recentColors: state.recentColors, pushColor }),
39327
39933
  [state.recentColors, pushColor]
39328
39934
  );
39935
+ const themeColorMapValue = useMemo(
39936
+ () => state.theme?.colorScheme ? buildThemeColorMap(state.theme.colorScheme) : void 0,
39937
+ [state.theme?.colorScheme]
39938
+ );
39329
39939
  const settings = useMemo(
39330
39940
  () => ({
39331
39941
  autoSave: autosaveEnabled,
@@ -39789,12 +40399,20 @@ var PowerPointViewer = forwardRef(
39789
40399
  customProperties: state.customProperties,
39790
40400
  coreProperties: state.coreProperties,
39791
40401
  appProperties: state.appProperties,
40402
+ viewProperties: state.viewProperties,
40403
+ tableStyleMap: state.tableStyleMap,
40404
+ tableStylesDefaultId: state.tableStylesDefaultId,
40405
+ tagCollections: state.tagCollections,
39792
40406
  setCanvasSize: state.setCanvasSize,
39793
40407
  setSections: state.setSections,
39794
40408
  setPresentationProperties: state.setPresentationProperties,
39795
40409
  setCustomProperties: state.setCustomProperties,
39796
40410
  setCoreProperties: state.setCoreProperties,
39797
40411
  setAppProperties: state.setAppProperties,
40412
+ setViewProperties: state.setViewProperties,
40413
+ setTableStyleMap: state.setTableStyleMap,
40414
+ setTableStylesDefaultId: state.setTableStylesDefaultId,
40415
+ setTagCollections: state.setTagCollections,
39798
40416
  setSlides: state.setSlides,
39799
40417
  setActiveSlideIndex: state.setActiveSlideIndex,
39800
40418
  applySelection: editorOps.ops.applySelection,
@@ -39826,7 +40444,7 @@ var PowerPointViewer = forwardRef(
39826
40444
  ref: containerRef,
39827
40445
  tabIndex: 0,
39828
40446
  className: "h-full w-full flex flex-col overflow-hidden outline-none",
39829
- children: loading ? /* @__PURE__ */ jsx(LoadingState, {}) : error ? /* @__PURE__ */ jsx(ErrorState, { error }) : /* @__PURE__ */ jsxs(RecentColorsProvider, { value: recentColorsValue, children: [
40447
+ children: loading ? /* @__PURE__ */ jsx(LoadingState, {}) : error ? /* @__PURE__ */ jsx(ErrorState, { error }) : /* @__PURE__ */ jsx(ThemeColorMapProvider, { value: themeColorMapValue, children: /* @__PURE__ */ jsxs(RecentColorsProvider, { value: recentColorsValue, children: [
39830
40448
  mode !== "present" && /* @__PURE__ */ jsx(
39831
40449
  ViewerToolbarSection,
39832
40450
  {
@@ -39969,7 +40587,7 @@ var PowerPointViewer = forwardRef(
39969
40587
  commentCount: activeSlide?.comments?.length ?? 0
39970
40588
  }
39971
40589
  )
39972
- ] })
40590
+ ] }) })
39973
40591
  }
39974
40592
  ),
39975
40593
  mode !== "present" && /* @__PURE__ */ jsx(
@@ -40172,7 +40790,29 @@ var PowerPointViewer = forwardRef(
40172
40790
  content,
40173
40791
  loadVersion,
40174
40792
  loadOrigin,
40175
- livePatcher: state.livePatcher
40793
+ livePatcher: state.livePatcher,
40794
+ deckSaveState: {
40795
+ headerFooter: state.headerFooter,
40796
+ presentationProperties: state.presentationProperties,
40797
+ viewProperties: state.viewProperties,
40798
+ customShows: state.customShows,
40799
+ sections: state.sections,
40800
+ coreProperties: state.coreProperties,
40801
+ appProperties: state.appProperties,
40802
+ customProperties: state.customProperties,
40803
+ tagCollections: state.tagCollections,
40804
+ slideMasters: state.slideMasters,
40805
+ notesMaster: state.notesMaster,
40806
+ handoutMaster: state.handoutMaster,
40807
+ slideSize: resolveSlideSizeSelection({
40808
+ current: state.slideSizeEmu,
40809
+ canvas: canvasSize
40810
+ }).size,
40811
+ tableStyleMap: state.tableStyleMap,
40812
+ tableStylesDefaultId: state.tableStylesDefaultId,
40813
+ tableStylesToDelete: state.tableStylesToDelete,
40814
+ embedFonts: dialogs.embedFontsEnabled
40815
+ }
40176
40816
  }
40177
40817
  ),
40178
40818
  /* @__PURE__ */ jsx(
@@ -40213,7 +40853,8 @@ function CollaborationDocumentSync({
40213
40853
  content,
40214
40854
  loadVersion,
40215
40855
  loadOrigin,
40216
- livePatcher
40856
+ livePatcher,
40857
+ deckSaveState
40217
40858
  }) {
40218
40859
  const collab = useCollaboration();
40219
40860
  const contentRef = useRef(content);
@@ -40225,6 +40866,9 @@ function CollaborationDocumentSync({
40225
40866
  }
40226
40867
  return bytes instanceof Uint8Array ? bytes : new Uint8Array(bytes);
40227
40868
  }, []);
40869
+ const deckSaveStateRef = useRef(deckSaveState);
40870
+ deckSaveStateRef.current = deckSaveState;
40871
+ const getSaveOptions = useCallback(() => buildDeckSaveOptions(deckSaveStateRef.current), []);
40228
40872
  useYjsDocumentSync({
40229
40873
  doc: collab?.doc ?? null,
40230
40874
  slides,
@@ -40234,6 +40878,7 @@ function CollaborationDocumentSync({
40234
40878
  isSynced: collab?.synced ?? true,
40235
40879
  config,
40236
40880
  getSourceBytes,
40881
+ getSaveOptions,
40237
40882
  loadVersion,
40238
40883
  loadOrigin
40239
40884
  });