pptx-react-viewer 2.11.0 → 2.12.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 (124) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/dist/{AiChatPanel-EX2TBRJM.mjs → AiChatPanel-CS4CONUO.mjs} +4 -4
  3. package/dist/AiChatPanel-CS4CONUO.mjs.br +0 -0
  4. package/dist/AiChatPanel-CS4CONUO.mjs.gz +0 -0
  5. package/dist/{AiChatPanel-PJPSDMN4.js → AiChatPanel-JIXSOZXN.js} +23 -23
  6. package/dist/AiChatPanel-JIXSOZXN.js.br +0 -0
  7. package/dist/AiChatPanel-JIXSOZXN.js.gz +0 -0
  8. package/dist/{Model3DScene-UCBPTEAY.js → Model3DScene-5KMJ4JL6.js} +2 -2
  9. package/dist/Model3DScene-5KMJ4JL6.js.br +0 -0
  10. package/dist/Model3DScene-5KMJ4JL6.js.gz +0 -0
  11. package/dist/{Model3DScene-TTQFV7OS.mjs → Model3DScene-RWFPSN6B.mjs} +1 -1
  12. package/dist/Model3DScene-RWFPSN6B.mjs.br +0 -0
  13. package/dist/Model3DScene-RWFPSN6B.mjs.gz +0 -0
  14. package/dist/{SurfaceChart3DScene-5SZCRHZI.mjs → SurfaceChart3DScene-2GZQM3LN.mjs} +1 -1
  15. package/dist/{SurfaceChart3DScene-5SZCRHZI.mjs.br → SurfaceChart3DScene-2GZQM3LN.mjs.br} +0 -0
  16. package/dist/SurfaceChart3DScene-2GZQM3LN.mjs.gz +0 -0
  17. package/dist/{SurfaceChart3DScene-ADKCYYOQ.js → SurfaceChart3DScene-BIOKIETC.js} +2 -2
  18. package/dist/SurfaceChart3DScene-BIOKIETC.js.br +0 -0
  19. package/dist/SurfaceChart3DScene-BIOKIETC.js.gz +0 -0
  20. package/dist/{chunk-MM5RMRSP.js → chunk-2VUHJNWM.js} +243 -284
  21. package/dist/chunk-2VUHJNWM.js.br +0 -0
  22. package/dist/chunk-2VUHJNWM.js.gz +0 -0
  23. package/dist/{chunk-N6IHR6PS.js → chunk-3GNSGGY2.js} +377 -2
  24. package/dist/chunk-3GNSGGY2.js.br +0 -0
  25. package/dist/chunk-3GNSGGY2.js.gz +0 -0
  26. package/dist/{chunk-HK2UERUX.mjs → chunk-AOED5MFM.mjs} +45 -64
  27. package/dist/chunk-AOED5MFM.mjs.br +0 -0
  28. package/dist/chunk-AOED5MFM.mjs.gz +0 -0
  29. package/dist/{chunk-L2CM5EUD.mjs → chunk-BJQSHVYH.mjs} +220 -156
  30. package/dist/chunk-BJQSHVYH.mjs.br +0 -0
  31. package/dist/chunk-BJQSHVYH.mjs.gz +0 -0
  32. package/dist/{chunk-RJEY2KZH.mjs → chunk-CEUHGUZ4.mjs} +5 -46
  33. package/dist/chunk-CEUHGUZ4.mjs.br +0 -0
  34. package/dist/chunk-CEUHGUZ4.mjs.gz +0 -0
  35. package/dist/{chunk-53NXKDMZ.mjs → chunk-ECDKYPQ2.mjs} +377 -2
  36. package/dist/chunk-ECDKYPQ2.mjs.br +0 -0
  37. package/dist/chunk-ECDKYPQ2.mjs.gz +0 -0
  38. package/dist/{chunk-UZVRM6LD.mjs → chunk-EJRHYYKE.mjs} +1 -1
  39. package/dist/chunk-EJRHYYKE.mjs.br +0 -0
  40. package/dist/chunk-EJRHYYKE.mjs.gz +0 -0
  41. package/dist/{chunk-HMQVOPQH.js → chunk-PJUQQF3I.js} +538 -42
  42. package/dist/chunk-PJUQQF3I.js.br +0 -0
  43. package/dist/chunk-PJUQQF3I.js.gz +0 -0
  44. package/dist/{chunk-4J7SPY64.js → chunk-PTGTFXPU.js} +366 -385
  45. package/dist/chunk-PTGTFXPU.js.br +0 -0
  46. package/dist/chunk-PTGTFXPU.js.gz +0 -0
  47. package/dist/{chunk-C2UWTH42.mjs → chunk-QGHC65C4.mjs} +518 -43
  48. package/dist/chunk-QGHC65C4.mjs.br +0 -0
  49. package/dist/chunk-QGHC65C4.mjs.gz +0 -0
  50. package/dist/{chunk-E367QIKR.js → chunk-SP7U34QM.js} +1186 -1122
  51. package/dist/chunk-SP7U34QM.js.br +0 -0
  52. package/dist/chunk-SP7U34QM.js.gz +0 -0
  53. package/dist/{chunk-VNP627O5.js → chunk-ZIXSSQAZ.js} +3 -3
  54. package/dist/chunk-ZIXSSQAZ.js.br +0 -0
  55. package/dist/chunk-ZIXSSQAZ.js.gz +0 -0
  56. package/dist/i18n.js +4 -4
  57. package/dist/i18n.js.br +0 -0
  58. package/dist/i18n.js.gz +0 -0
  59. package/dist/i18n.mjs +1 -1
  60. package/dist/i18n.mjs.br +0 -0
  61. package/dist/i18n.mjs.gz +0 -0
  62. package/dist/index.d.ts +4 -0
  63. package/dist/index.js +36 -36
  64. package/dist/index.js.br +0 -0
  65. package/dist/index.js.gz +0 -0
  66. package/dist/index.mjs +6 -6
  67. package/dist/index.mjs.br +0 -0
  68. package/dist/index.mjs.gz +0 -0
  69. package/dist/internals.d.ts +12 -1
  70. package/dist/internals.d.ts.map +1 -1
  71. package/dist/internals.js +79 -79
  72. package/dist/internals.js.br +0 -0
  73. package/dist/internals.js.gz +0 -0
  74. package/dist/internals.mjs +4 -4
  75. package/dist/internals.mjs.br +0 -0
  76. package/dist/internals.mjs.gz +0 -0
  77. package/dist/pptx-viewer.css +1 -1
  78. package/dist/pptx-viewer.css.br +0 -0
  79. package/dist/pptx-viewer.css.gz +0 -0
  80. package/dist/{useViewerBuildingBlocks-Rqxm0pRS.d.ts → useViewerBuildingBlocks-YvCYsxa3.d.ts} +5 -1
  81. package/dist/useViewerBuildingBlocks-YvCYsxa3.d.ts.map +1 -0
  82. package/dist/viewer/index.js +22 -22
  83. package/dist/viewer/index.js.br +0 -0
  84. package/dist/viewer/index.js.gz +0 -0
  85. package/dist/viewer/index.mjs +6 -6
  86. package/dist/viewer/index.mjs.br +0 -0
  87. package/dist/viewer/index.mjs.gz +0 -0
  88. package/package.json +1 -1
  89. package/dist/AiChatPanel-EX2TBRJM.mjs.br +0 -0
  90. package/dist/AiChatPanel-EX2TBRJM.mjs.gz +0 -0
  91. package/dist/AiChatPanel-PJPSDMN4.js.br +0 -0
  92. package/dist/AiChatPanel-PJPSDMN4.js.gz +0 -0
  93. package/dist/Model3DScene-TTQFV7OS.mjs.br +0 -0
  94. package/dist/Model3DScene-TTQFV7OS.mjs.gz +0 -0
  95. package/dist/Model3DScene-UCBPTEAY.js.br +0 -0
  96. package/dist/Model3DScene-UCBPTEAY.js.gz +0 -0
  97. package/dist/SurfaceChart3DScene-5SZCRHZI.mjs.gz +0 -0
  98. package/dist/SurfaceChart3DScene-ADKCYYOQ.js.br +0 -0
  99. package/dist/SurfaceChart3DScene-ADKCYYOQ.js.gz +0 -0
  100. package/dist/chunk-4J7SPY64.js.br +0 -0
  101. package/dist/chunk-4J7SPY64.js.gz +0 -0
  102. package/dist/chunk-53NXKDMZ.mjs.br +0 -0
  103. package/dist/chunk-53NXKDMZ.mjs.gz +0 -0
  104. package/dist/chunk-C2UWTH42.mjs.br +0 -0
  105. package/dist/chunk-C2UWTH42.mjs.gz +0 -0
  106. package/dist/chunk-E367QIKR.js.br +0 -0
  107. package/dist/chunk-E367QIKR.js.gz +0 -0
  108. package/dist/chunk-HK2UERUX.mjs.br +0 -0
  109. package/dist/chunk-HK2UERUX.mjs.gz +0 -0
  110. package/dist/chunk-HMQVOPQH.js.br +0 -0
  111. package/dist/chunk-HMQVOPQH.js.gz +0 -0
  112. package/dist/chunk-L2CM5EUD.mjs.br +0 -0
  113. package/dist/chunk-L2CM5EUD.mjs.gz +0 -0
  114. package/dist/chunk-MM5RMRSP.js.br +0 -0
  115. package/dist/chunk-MM5RMRSP.js.gz +0 -0
  116. package/dist/chunk-N6IHR6PS.js.br +0 -0
  117. package/dist/chunk-N6IHR6PS.js.gz +0 -0
  118. package/dist/chunk-RJEY2KZH.mjs.br +0 -0
  119. package/dist/chunk-RJEY2KZH.mjs.gz +0 -0
  120. package/dist/chunk-UZVRM6LD.mjs.br +0 -0
  121. package/dist/chunk-UZVRM6LD.mjs.gz +0 -0
  122. package/dist/chunk-VNP627O5.js.br +0 -0
  123. package/dist/chunk-VNP627O5.js.gz +0 -0
  124. package/dist/useViewerBuildingBlocks-Rqxm0pRS.d.ts.map +0 -1
@@ -1,8 +1,8 @@
1
- import { computeFocusTargets, aiChangeAnimationCss, changeGhostStyle, createChatHistoryStore, toRenderableParts } from './chunk-UZVRM6LD.mjs';
2
- import { useReducedMotion, useViewerState, useViewerOptions, useIsMobile, useResizablePanels, useDerivedSlideState, useZoomViewport, useEditorHistory, usePresentationSetup, useTouchGestures, useViewerDialogs, useEditorOperations, useViewerIntegration, useYjsDocumentSync, useCollaborationLivePatch, useFollowMode, useBroadcastFollower, scopeLayoutOptionsToActiveSlide, useToolbarVisibility, useKeyboardInsets, useModalDismissDrag, useCollaborativeState, useVirtualizedSlides, useSwipeNavigation, useSheetDismissDrag, detectTargetType, parseEmailUrl, parseSlideFromUrl, ACTION_VERB_MAP, downloadBlob } from './chunk-HK2UERUX.mjs';
3
- import { SHAPE_PRESETS, DEFAULT_STROKE_COLOR, getConnectorPathGeometry, buildLineShadowCss, buildLineGlowFilter, renderConnectorMarker, MIN_ELEMENT_SIZE, getShapeVisualStyle, getTextStyleForElement, DEFAULT_TEXT_COLOR, renderVectorShape, isConnectorOrLineElement, build3DExtrusionData, getImageRenderStyle, cn, ANIMATION_PRESET_OPTIONS, resolvePalette, resolveStyle, layoutToCategory, wrapChrome, DEFAULT_FILL_COLOR, hasDagDuotoneEffect, renderDagDuotoneSvgFilter, getTextLayoutStyle, renderTableElement, renderMediaElement, shouldRenderFallbackLabel, getCropShapeClipPath, SLIDE_NAV_THUMBNAIL_WIDTH, styleShadow, styleStroke, colour, fitFontSize, smartArtNodeGroupProps, chevronPoints, SmartArtNodeText, truncate, renderStepDownProcess, renderAlternatingFlow, renderDescendingProcess, renderPictureAccentList, renderVerticalBlockList, renderGroupedList, renderPyramidList, renderHorizontalPictureList, renderAccentProcess, renderVerticalChevronList, isImageTiled, getImageTilingStyle, getDuotoneColors, getTextWarpStyle, renderTextSegments, buildReactChartViewModel, renderChartElement, buildTextBody3DSceneStyle, TOOLBAR_SECTIONS, SHORTCUT_REFERENCE_ITEMS as SHORTCUT_REFERENCE_ITEMS$1, buildTree, treeWidth, treeDepth, nodeOpacity, gearPath, resolveSmartArtDataPalette, DEFAULT_TEXT_FONT_SIZE, DEFAULT_FONT_FAMILY, HYPERLINK_COLOR, GRID_SIZE, CONNECTOR_ARROW_OPTIONS, ARROW_SIZE_OPTIONS, startMotionPathPreview, startPreviewAnimation, stopPreviewAnimation, THEME_COLOR_SWATCHES, STROKE_DASH_OPTIONS } from './chunk-RJEY2KZH.mjs';
4
- import { LOCALE_CATALOG, translationsEn } from './chunk-53NXKDMZ.mjs';
5
- import { hasShapeProperties, normalizeHexColor, colorWithOpacity, normalizeStrokeDashType, getSvgStrokeDasharray, getCompoundLineOffsets, getCompoundLineWidths, svgLineCap, hasTextProperties, getElementTransform, ACTION_BUTTON_PRESETS, isEditableTextElement, isElementRendered, isElementActionable, getAriaRole, getAriaLabel, getAriaRoleDescription, getImageEffectsOpacity, getImageEffectsFilter, getElementTransformWithoutRotation, SWITCHABLE_LAYOUT_TYPES, DEFAULT_VIEWER_OPTIONS, compileEquationTemplateMathMl, buildUserFontFaceStyles, readStoredViewerPrefs, resolveThemeCatalogEntry, THEME_CATALOG, writeStoredViewerPrefs, openPptxFile, readBackstageRecentFile, viewerOptionsToPreferences, applyPreferenceToOptions, listAutosaveSnapshots, deleteAutosaveSnapshot, RULER_THICKNESS, RULER_FONT_SIZE, revealedSmartArtNodeCount, buildSmartArtA11y, buildCssGradientFromShapeStyle, resolveGroupChildFill, getGroupChildParentFill, getComputedEffectStyle, getSoftEdgeSvgFilter, buildStrokeOutline, svgGradientFillRef, isInkElement, getElementLabel, buildPreviewElements, deriveSlideFieldContext, SLIDE_TRANSITION_OPTIONS, themeToCssVars, applyMotionPathPreset, DEFAULT_INSERT_CHART_TYPE, hasCopyableFormat, createBackstagePresentation, printPropertiesFrameSlides, printPropertiesSlidesPerPage, VIEWER_OPTIONS_TABS, DEFAULT_QUICK_ACCESS_COMMAND_IDS, buildJoinCollaborationConfig, buildCreateCollaborationConfig, generateBroadcastRoomId, DEFAULT_BROADCAST_SERVER_URL, buildBroadcastViewerUrl, resolveTransportForServerUrl, resolveDrawingShapeNodeId, buildSummaryZoomView, getImageColorWashStyle, isImageLikeElement, getPendingSelectionRestore, restoreSegmentSelection, getTextCompensationTransform, applyChartBuildReveal, formatAxisValue, hasPressureVariation, getInkReplayStyles, INK_REPLAY_KEYFRAMES, resolveInkColor, resolveInkWidth, resolveInkOpacity, pressuresToWidths, getContentPartReplayStyles, resolveOleType, getOleTypeColor, getOleTypeLabel, filterRenderedElements, isLinkedTextBox, getOverflowSegments, shouldUseSvgWarp, getSlideBackgroundStyle, filterCommands, resolveTitleBarStatusKey, TITLE_BAR_CLASSES, TITLE_BAR_DEFAULT_FILE_KEY, buildFieldSubstitutionContext, shouldConfirmExternalHyperlink, safeOpenUrl, isPpactionUrl, parsePpactionUrl, isPresentationAdvanceClick, buildContextMenuEntries, themeColorSchemesEqual, STATUS_BAR_CLASSES, formatVersionTimestamp, formatRelativeTime, scanAvailableFontFamilies, PRESETS, CATEGORIES, convertOmmlToLatex, compileLatexEquation, convertLatexToOmml, EQUATION_TEMPLATES, clampPercent, HANDOUT_OPTIONS, TOOLBAR_TABS, SHORTCUT_REFERENCE_ITEMS, resolveViewerAddinRows, availableQuickAccessCommands, addQuickAccessCommand, removeQuickAccessCommand, moveQuickAccessCommand, activateModalFocus, buildCollaborationShareUrl, canGoPrevious, formatSlideCounter, READING_VIEW_COUNTER_ATTR, canGoNext, READING_VIEW_ATTR, OUTLINE_LEVEL_ATTR, OUTLINE_SLIDE_ATTR, OUTLINE_ROW_ATTR, OUTLINE_VIEW_ATTR, mobileElapsedSince, isFirstSlide, isLastSlide, formatMobileElapsed, mobileSlideCounter, presenterPaneAdvancesOnClick, formatElapsed, computeInlineEditorRect, findSmartArtNodeText, setSmartArtNodeStyle, rebuildDrawingShapesIfCleared, shouldCommitSmartArtNodeText, updateSmartArtNodeText, getImageSvgFilters, buildDuotoneCacheKey, getDuotoneCachedResult, applyDuotone, setDuotoneCachedResult, buildCacheKey, DEFAULT_COLOR_CHANGE_TOLERANCE, getCachedResult, applyColorChange, setCachedResult, findChartPartTarget, dragValueForPart, withChartPointValue, dragAnchorViewY, withChartTitle, computeSmartArtLayout, buildSmartArt3DModel, extractPathPoints, generatePressureCircles, isBrowserOpenableMime, formatBytes, getOleBadgeLabel, openUrlInNewTab, getSubstituteFontFamily, getWarpPath, extraQuickAccessCommands, TAB_ROW_ACTION_CLASSES, listBackstageRecentFiles, BACKSTAGE_NAV, INSERT_CHART_TYPES, DEFAULT_MOTION_PATH_PRESET_ID, SLIDE_VIRTUALIZATION_THRESHOLD, getSlideTransitionAnimations, SLIDE_TRANSITION_KEYFRAMES, presentationInkPath, motionPathFor, setMotionPath, getShapeAdjustmentHandleDescriptor, PRESET_THEMES, isUrlSafe, sanitizeMathMl, computeHandoutLayout, getPrintableArea, generateNoteLineCount, computeAllNotesPages, getNotesPrintableArea, QUICK_ACCESS_COMMAND_CATALOG, openReadingView, applyReadingViewCommand, createPresentationKeyBuffer, readingViewFitScale, READING_VIEW_STAGE_ATTR, buildOutline, applyOutlineEdit, mapOutlineKey, notesSegmentsToSpans, erasePresentationInkAt, movePresenterPointer, appendPresentationInkPoint, NOTES_FONT_SIZE_DEFAULT, formatTime, NOTES_FONT_SIZE_MIN, clampNotesFontSize, NOTES_FONT_SIZE_STEP, NOTES_FONT_SIZE_MAX, groupIntoParagraphs, substituteFieldText, BACKSTAGE_TEMPLATES, formatBackstageDate, formatBackstageSize, backstageCardsFor, DEFAULT_VIEWER_PROFILE, resolveProfileInitial, AVATAR_COLOR_SWATCHES, ENTRANCE_PRESET_VALUES, EMPHASIS_PRESET_VALUES, EXIT_PRESET_VALUES, MOTION_PATH_FAMILIES, motionPathFamilyLabelKey, motionPathPresetsByFamily, motionPathPresetLabelKey, getConnectionSites, generateTicks, rulerDragToGuidePosition, getCommentMarkerPosition, motionPathToSvgD, motionPathEndPixel, isEditableMotionPath, setMotionPathEnd, buildThemeColorGrid, THEME_COLOR_SCHEME_KEYS, THEME_COLOR_LABELS, COMMON_FONTS, buildSmartArtPresetData, handleReadingViewKey, getLocalStorageUsageSummary, saveViewerProfile, clearAllLocalViewerData, mergeSlideTransition, buildTableDataGrid, appendTableElementRow, removeLastTableElementRow, appendTableElementColumn, removeLastTableElementColumn, removeTableElementColumn, removeTableElementRow, setTableElementCellText, TABLE_STYLE_PRESETS, chartDataChangeType, setChartCategoryLabel, setChartCellValue, addChartCategory, removeChartCategory, addChartSeries, removeChartSeries, setChartAxisLogScale, setChartAxisTitleStyle, setChartAxisGridlineStyle, setChartSeriesMarker, setChartSeriesChartType, setChartDataPointFill, setChartDataPointExplosion, setChartDataPointMarker, setChartDataPointLabel, getOleObjectTypeLabel, sanitizeGradientStops, pptxActionToElementAction, withFrameSlides, withSlidesPerPage, applyThemeOverrideToSlide, COLOR_MAP_ALIAS_KEYS, DEFAULT_COLOR_MAP, TRANSITION_VALID_DIRECTIONS, TRANSITION_ORIENTATION_TYPES, clampTransitionNumber, flattenTagCollections, formatCommentTimestamp, clearMotionPath, DIRECTIONAL_PRESETS, motionPathPresetIdForPath, computeMergeCellRight, computeMergeCellDown, computeSplitCell, addSmartArtNodeAsChild, removeSmartArtNode, clampCropValue, DUOTONE_PRESETS, ARTISTIC_EFFECTS, resolveActionType, ELEMENT_ACTION_TYPE_OPTIONS, toSlideIndex, elementActionToPptxAction, canCommitActionType, TRANSITION_DIR_ARROWS, buildDirectionGrid, updateTagInCollections, deleteTagFromCollections, addTagToCollections, LBL, SEL, FILL_MODE_OPTIONS, SECTION_HEADING, NUM, switchSmartArtLayout, addSmartArtNode, demoteSmartArtNode, promoteSmartArtNode, reorderSmartArtNode, SHAPE_QUICK_STYLES, quickStyleSwatchCss, getPatternSvg, TEXT_WARP_PRESETS, warpPreviewPath, text3dPtToEmu, text3dEmuToPt, MATERIAL_PRESETS, GRADIENT_TYPE_OPTIONS, PATTERN_OPTIONS, openNativeEyeDropper, toggleText3dExtrusion, BEVEL_PRESETS } from './chunk-C2UWTH42.mjs';
1
+ import { computeFocusTargets, aiChangeAnimationCss, changeGhostStyle, createChatHistoryStore, toRenderableParts } from './chunk-EJRHYYKE.mjs';
2
+ import { useReducedMotion, useViewerState, useViewerOptions, useIsMobile, useResizablePanels, useDerivedSlideState, useZoomViewport, useEditorHistory, usePresentationSetup, useTouchGestures, useViewerDialogs, useEditorOperations, useViewerIntegration, useYjsDocumentSync, useCollaborationLivePatch, useFollowMode, useBroadcastFollower, scopeLayoutOptionsToActiveSlide, useToolbarVisibility, useKeyboardInsets, useModalDismissDrag, useCollaborativeState, useVirtualizedSlides, useSwipeNavigation, useSheetDismissDrag, detectTargetType, parseEmailUrl, parseSlideFromUrl, ACTION_VERB_MAP, downloadBlob } from './chunk-AOED5MFM.mjs';
3
+ import { SHAPE_PRESETS, DEFAULT_STROKE_COLOR, getConnectorPathGeometry, buildLineShadowCss, buildLineGlowFilter, renderConnectorMarker, MIN_ELEMENT_SIZE, getShapeVisualStyle, getTextStyleForElement, DEFAULT_TEXT_COLOR, renderVectorShape, isConnectorOrLineElement, build3DExtrusionData, getImageRenderStyle, cn, ANIMATION_PRESET_OPTIONS, resolvePalette, resolveStyle, layoutToCategory, wrapChrome, DEFAULT_FILL_COLOR, hasDagDuotoneEffect, renderDagDuotoneSvgFilter, getTextLayoutStyle, renderTableElement, renderMediaElement, shouldRenderFallbackLabel, getCropShapeClipPath, SLIDE_NAV_THUMBNAIL_WIDTH, styleShadow, styleStroke, colour, fitFontSize, smartArtNodeGroupProps, chevronPoints, SmartArtNodeText, truncate, renderStepDownProcess, renderAlternatingFlow, renderDescendingProcess, renderPictureAccentList, renderVerticalBlockList, renderGroupedList, renderPyramidList, renderHorizontalPictureList, renderAccentProcess, renderVerticalChevronList, isImageTiled, getImageTilingStyle, getDuotoneColors, getTextWarpStyle, renderTextSegments, buildReactChartViewModel, renderChartElement, buildTextBody3DSceneStyle, TOOLBAR_SECTIONS, SHORTCUT_REFERENCE_ITEMS as SHORTCUT_REFERENCE_ITEMS$1, buildTree, treeWidth, treeDepth, nodeOpacity, gearPath, resolveSmartArtDataPalette, DEFAULT_TEXT_FONT_SIZE, DEFAULT_FONT_FAMILY, HYPERLINK_COLOR, GRID_SIZE, CONNECTOR_ARROW_OPTIONS, ARROW_SIZE_OPTIONS, startMotionPathPreview, startPreviewAnimation, stopPreviewAnimation, THEME_COLOR_SWATCHES, STROKE_DASH_OPTIONS } from './chunk-CEUHGUZ4.mjs';
4
+ import { LOCALE_CATALOG, translationsEn } from './chunk-ECDKYPQ2.mjs';
5
+ import { hasShapeProperties, normalizeHexColor, colorWithOpacity, normalizeStrokeDashType, getSvgStrokeDasharray, getCompoundLineOffsets, getCompoundLineWidths, svgLineCap, hasTextProperties, getElementTransform, ACTION_BUTTON_PRESETS, isEditableTextElement, isElementRendered, isElementActionable, getAriaRole, getAriaLabel, getAriaRoleDescription, getImageEffectsOpacity, getImageEffectsFilter, getElementTransformWithoutRotation, SWITCHABLE_LAYOUT_TYPES, DEFAULT_VIEWER_OPTIONS, compileEquationTemplateMathMl, buildUserFontFaceStyles, readStoredViewerPrefs, resolveThemeCatalogEntry, THEME_CATALOG, writeStoredViewerPrefs, openPptxFile, readBackstageRecentFile, viewerOptionsToPreferences, applyPreferenceToOptions, listAutosaveSnapshots, deleteAutosaveSnapshot, RULER_THICKNESS, RULER_FONT_SIZE, revealedSmartArtNodeCount, buildSmartArtA11y, buildCssGradientFromShapeStyle, resolveGroupChildFill, getGroupChildParentFill, getComputedEffectStyle, getSoftEdgeSvgFilter, buildStrokeOutline, svgGradientFillRef, isInkElement, getElementLabel, buildPreviewElements, deriveSlideFieldContext, SLIDE_TRANSITION_OPTIONS, hiddenSlideCue, HIDDEN_SLIDE_SLASH_GRADIENT, HIDDEN_SLIDE_LABEL_KEY, themeToCssVars, applyMotionPathPreset, DEFAULT_INSERT_CHART_TYPE, hasCopyableFormat, createBackstagePresentation, printPropertiesFrameSlides, printPropertiesSlidesPerPage, VIEWER_OPTIONS_TABS, DEFAULT_QUICK_ACCESS_COMMAND_IDS, buildJoinCollaborationConfig, buildCreateCollaborationConfig, generateBroadcastRoomId, DEFAULT_BROADCAST_SERVER_URL, buildBroadcastViewerUrl, resolveTransportForServerUrl, resolveDrawingShapeNodeId, buildSummaryZoomView, getImageColorWashStyle, isImageLikeElement, getPendingSelectionRestore, restoreSegmentSelection, getTextCompensationTransform, applyChartBuildReveal, formatAxisValue, hasPressureVariation, getInkReplayStyles, INK_REPLAY_KEYFRAMES, resolveInkColor, resolveInkWidth, resolveInkOpacity, pressuresToWidths, getContentPartReplayStyles, resolveOleType, getOleTypeColor, getOleTypeLabel, filterRenderedElements, isLinkedTextBox, getOverflowSegments, shouldUseSvgWarp, getSlideBackgroundStyle, filterCommands, resolveTitleBarStatusKey, TITLE_BAR_CLASSES, TITLE_BAR_DEFAULT_FILE_KEY, buildFieldSubstitutionContext, shouldConfirmExternalHyperlink, safeOpenUrl, isPpactionUrl, parsePpactionUrl, isPresentationAdvanceClick, PRESENT_TOOLBAR_CLASSES, buildContextMenuEntries, themeColorSchemesEqual, STATUS_BAR_CLASSES, formatVersionTimestamp, formatRelativeTime, scanAvailableFontFamilies, PRESETS, CATEGORIES, convertOmmlToLatex, compileLatexEquation, convertLatexToOmml, EQUATION_TEMPLATES, clampPercent, HANDOUT_OPTIONS, TOOLBAR_TABS, SHORTCUT_REFERENCE_ITEMS, resolveViewerAddinRows, availableQuickAccessCommands, addQuickAccessCommand, removeQuickAccessCommand, moveQuickAccessCommand, activateModalFocus, buildCollaborationShareUrl, canGoPrevious, formatSlideCounter, READING_VIEW_COUNTER_ATTR, canGoNext, READING_VIEW_ATTR, OUTLINE_LEVEL_ATTR, OUTLINE_SLIDE_ATTR, OUTLINE_ROW_ATTR, OUTLINE_VIEW_ATTR, mobileElapsedSince, nextPresentedSlide, isFirstSlide, isLastSlide, formatMobileElapsed, mobileSlideCounter, presenterPaneAdvancesOnClick, formatElapsed, computeInlineEditorRect, findSmartArtNodeText, setSmartArtNodeStyle, rebuildDrawingShapesIfCleared, shouldCommitSmartArtNodeText, updateSmartArtNodeText, getImageSvgFilters, buildDuotoneCacheKey, getDuotoneCachedResult, applyDuotone, setDuotoneCachedResult, buildCacheKey, DEFAULT_COLOR_CHANGE_TOLERANCE, getCachedResult, applyColorChange, setCachedResult, findChartPartTarget, dragValueForPart, withChartPointValue, dragAnchorViewY, withChartTitle, computeSmartArtLayout, buildSmartArt3DModel, extractPathPoints, generatePressureCircles, isBrowserOpenableMime, formatBytes, getOleBadgeLabel, openUrlInNewTab, getSubstituteFontFamily, getWarpPath, extraQuickAccessCommands, TAB_ROW_ACTION_CLASSES, listBackstageRecentFiles, BACKSTAGE_NAV, INSERT_CHART_TYPES, DEFAULT_MOTION_PATH_PRESET_ID, SLIDE_VIRTUALIZATION_THRESHOLD, getSlideTransitionAnimations, SLIDE_TRANSITION_KEYFRAMES, presentationInkPath, motionPathFor, setMotionPath, getShapeAdjustmentHandleDescriptor, PEN_COLORS, HIGHLIGHTER_COLORS, PRESET_THEMES, isUrlSafe, sanitizeMathMl, computeHandoutLayout, getPrintableArea, generateNoteLineCount, computeAllNotesPages, getNotesPrintableArea, QUICK_ACCESS_COMMAND_CATALOG, openReadingView, applyReadingViewCommand, createPresentationKeyBuffer, readingViewFitScale, READING_VIEW_STAGE_ATTR, buildOutline, applyOutlineEdit, mapOutlineKey, notesSegmentsToSpans, erasePresentationInkAt, movePresenterPointer, appendPresentationInkPoint, NOTES_FONT_SIZE_DEFAULT, formatTime, NOTES_FONT_SIZE_MIN, clampNotesFontSize, NOTES_FONT_SIZE_STEP, NOTES_FONT_SIZE_MAX, groupIntoParagraphs, substituteFieldText, BACKSTAGE_TEMPLATES, formatBackstageDate, formatBackstageSize, backstageCardsFor, DEFAULT_VIEWER_PROFILE, resolveProfileInitial, AVATAR_COLOR_SWATCHES, ENTRANCE_PRESET_VALUES, EMPHASIS_PRESET_VALUES, EXIT_PRESET_VALUES, MOTION_PATH_FAMILIES, motionPathFamilyLabelKey, motionPathPresetsByFamily, motionPathPresetLabelKey, getConnectionSites, generateTicks, rulerDragToGuidePosition, getCommentMarkerPosition, motionPathToSvgD, motionPathEndPixel, isEditableMotionPath, setMotionPathEnd, buildThemeColorGrid, THEME_COLOR_SCHEME_KEYS, THEME_COLOR_LABELS, COMMON_FONTS, buildSmartArtPresetData, handleReadingViewKey, getLocalStorageUsageSummary, saveViewerProfile, clearAllLocalViewerData, mergeSlideTransition, buildTableDataGrid, appendTableElementRow, removeLastTableElementRow, appendTableElementColumn, removeLastTableElementColumn, removeTableElementColumn, removeTableElementRow, setTableElementCellText, TABLE_STYLE_PRESETS, chartDataChangeType, setChartCategoryLabel, setChartCellValue, addChartCategory, removeChartCategory, addChartSeries, removeChartSeries, setChartAxisLogScale, setChartAxisTitleStyle, setChartAxisGridlineStyle, setChartSeriesMarker, setChartSeriesChartType, setChartDataPointFill, setChartDataPointExplosion, setChartDataPointMarker, setChartDataPointLabel, getOleObjectTypeLabel, sanitizeGradientStops, pptxActionToElementAction, withFrameSlides, withSlidesPerPage, applyThemeOverrideToSlide, COLOR_MAP_ALIAS_KEYS, DEFAULT_COLOR_MAP, schemaLabel, THEME_COLOR_SLOT_LABEL_KEYS, TRANSITION_VALID_DIRECTIONS, TRANSITION_ORIENTATION_TYPES, clampTransitionNumber, flattenTagCollections, formatCommentTimestamp, clearMotionPath, DIRECTIONAL_PRESETS, motionPathPresetIdForPath, computeMergeCellRight, computeMergeCellDown, computeSplitCell, SMARTART_COLOR_SCHEME_LABEL_KEYS, SMARTART_STYLE_LABEL_KEYS, addSmartArtNodeAsChild, removeSmartArtNode, clampCropValue, DUOTONE_PRESETS, ARTISTIC_EFFECTS, resolveActionType, ELEMENT_ACTION_TYPE_OPTIONS, toSlideIndex, elementActionToPptxAction, canCommitActionType, TRANSITION_DIR_ARROWS, buildDirectionGrid, updateTagInCollections, deleteTagFromCollections, addTagToCollections, animationEffectLabel, LBL, SEL, FILL_MODE_OPTIONS, SECTION_HEADING, NUM, switchSmartArtLayout, addSmartArtNode, demoteSmartArtNode, promoteSmartArtNode, reorderSmartArtNode, SHAPE_QUICK_STYLES, quickStyleSwatchCss, getPatternSvg, TEXT_WARP_PRESETS, warpPreviewPath, text3dPtToEmu, text3dEmuToPt, MATERIAL_PRESETS, GRADIENT_TYPE_OPTIONS, PATTERN_OPTIONS, FILL_PATTERN_LABEL_KEYS, openNativeEyeDropper, toggleText3dExtrusion, BEVEL_PRESETS } from './chunk-QGHC65C4.mjs';
6
6
  import React34, { createContext, useMemo, useState, useCallback, lazy, forwardRef, useEffect, useRef, useContext, Suspense, useLayoutEffect, Fragment as Fragment$1, useDeferredValue } from 'react';
7
7
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
8
8
  import { useTranslation } from 'react-i18next';
@@ -584,7 +584,8 @@ function RibbonCommand({
584
584
  disabled,
585
585
  active,
586
586
  compact = false,
587
- title
587
+ title,
588
+ pressed
588
589
  }) {
589
590
  return /* @__PURE__ */ jsxs(
590
591
  "button",
@@ -593,6 +594,7 @@ function RibbonCommand({
593
594
  onClick,
594
595
  disabled,
595
596
  title: title ?? label,
597
+ "aria-pressed": pressed,
596
598
  className: cn(
597
599
  "inline-flex rounded-sm text-foreground transition-colors hover:bg-accent disabled:cursor-not-allowed disabled:opacity-35",
598
600
  active && "bg-primary/15 text-primary ring-1 ring-primary/35",
@@ -1450,7 +1452,7 @@ function AccountPage() {
1450
1452
  return void 0;
1451
1453
  });
1452
1454
  };
1453
- const version = "2.10.0" ;
1455
+ const version = "2.11.1" ;
1454
1456
  return /* @__PURE__ */ jsxs("div", { className: "mt-8 max-w-[700px] space-y-6", children: [
1455
1457
  /* @__PURE__ */ jsxs("section", { className: cardClass, children: [
1456
1458
  /* @__PURE__ */ jsxs("h2", { className: "flex items-center gap-2 text-sm font-semibold", children: [
@@ -3053,7 +3055,9 @@ function SlideShowSection(p) {
3053
3055
  {
3054
3056
  label: t("pptx.slideShow.hideSlide", { defaultValue: "Hide Slide" }),
3055
3057
  icon: /* @__PURE__ */ jsx(LuEyeOff, {}),
3056
- disabled: true
3058
+ onClick: p.onToggleHideSlide,
3059
+ active: p.activeSlideHidden,
3060
+ pressed: p.activeSlideHidden
3057
3061
  }
3058
3062
  ),
3059
3063
  /* @__PURE__ */ jsx(
@@ -4374,6 +4378,9 @@ function MobileSectionBody({
4374
4378
  }),
4375
4379
  onOpenSetUpSlideShow: p.onOpenSetUpSlideShow ?? (() => {
4376
4380
  }),
4381
+ onToggleHideSlide: p.onToggleHideSlide ?? (() => {
4382
+ }),
4383
+ activeSlideHidden: p.activeSlideHidden ?? false,
4377
4384
  onOpenBroadcastDialog: p.onOpenBroadcastDialog ?? (() => {
4378
4385
  }),
4379
4386
  onToggleSubtitles: p.onToggleSubtitles ?? (() => {
@@ -5618,6 +5625,9 @@ function Toolbar(p) {
5618
5625
  }),
5619
5626
  onOpenSetUpSlideShow: p.onOpenSetUpSlideShow ?? (() => {
5620
5627
  }),
5628
+ onToggleHideSlide: p.onToggleHideSlide ?? (() => {
5629
+ }),
5630
+ activeSlideHidden: p.activeSlideHidden ?? false,
5621
5631
  onOpenBroadcastDialog: p.onOpenBroadcastDialog ?? (() => {
5622
5632
  }),
5623
5633
  onToggleSubtitles: p.onToggleSubtitles ?? (() => {
@@ -8698,7 +8708,7 @@ function FailedToLoad() {
8698
8708
  var LazyModel3DScene = React34.lazy(
8699
8709
  async () => {
8700
8710
  try {
8701
- return await import('./Model3DScene-TTQFV7OS.mjs');
8711
+ return await import('./Model3DScene-RWFPSN6B.mjs');
8702
8712
  } catch {
8703
8713
  return { default: FailedToLoad };
8704
8714
  }
@@ -11786,6 +11796,7 @@ var ElementRenderer = React34.memo(
11786
11796
  {
11787
11797
  "data-pptx-element": "true",
11788
11798
  "data-element-id": el.id,
11799
+ "data-pptx-action": isActionable ? "click" : void 0,
11789
11800
  role: ariaRole,
11790
11801
  "aria-label": ariaLabel,
11791
11802
  "aria-roledescription": ariaRoleDescription,
@@ -13510,7 +13521,9 @@ function SlideItemInner({
13510
13521
  onDrop,
13511
13522
  slideRef
13512
13523
  }) {
13524
+ const { t } = useTranslation();
13513
13525
  const isHidden = Boolean(slide.hidden);
13526
+ const cue = hiddenSlideCue(slide.hidden, "rail", slideIndex);
13514
13527
  const handleContextMenu = useCallback(
13515
13528
  (e) => {
13516
13529
  if (canEdit && onAddSection) {
@@ -13534,6 +13547,8 @@ function SlideItemInner({
13534
13547
  ref: slideRef,
13535
13548
  "aria-label": `Go to slide ${slideIndex + 1}`,
13536
13549
  "aria-current": isActive ? "true" : void 0,
13550
+ "aria-describedby": cue.labelId,
13551
+ "data-pptx-slide-hidden": cue.marker,
13537
13552
  className: cn(
13538
13553
  "group relative flex w-full items-center gap-1 cursor-pointer border-0 bg-transparent py-0.5 px-1 text-left transition-all",
13539
13554
  isActive && "bg-accent/40 before:absolute before:left-0 before:top-1 before:bottom-1 before:w-[3px] before:bg-primary before:rounded-r",
@@ -13554,6 +13569,7 @@ function SlideItemInner({
13554
13569
  "text-[10px] tabular-nums text-right select-none w-full",
13555
13570
  isActive ? "text-primary font-medium" : "text-muted-foreground"
13556
13571
  ),
13572
+ style: isHidden ? { backgroundImage: HIDDEN_SLIDE_SLASH_GRADIENT } : void 0,
13557
13573
  children: slideIndex + 1
13558
13574
  }
13559
13575
  ),
@@ -13591,7 +13607,10 @@ function SlideItemInner({
13591
13607
  /* @__PURE__ */ jsx(LuMessageSquare, { className: "w-2 h-2" }),
13592
13608
  slide.comments?.length
13593
13609
  ] }),
13594
- isHidden && /* @__PURE__ */ jsx("div", { className: "absolute bottom-0.5 right-0.5 z-10", children: /* @__PURE__ */ jsx(LuEyeOff, { className: "w-3 h-3 text-muted-foreground" }) }),
13610
+ isHidden && /* @__PURE__ */ jsxs("div", { className: "absolute bottom-0.5 right-0.5 z-10", id: cue.labelId, children: [
13611
+ /* @__PURE__ */ jsx(LuEyeOff, { className: "w-3 h-3 text-muted-foreground" }),
13612
+ /* @__PURE__ */ jsx("span", { className: "sr-only", children: t(HIDDEN_SLIDE_LABEL_KEY) })
13613
+ ] }),
13595
13614
  rehearsalTimings && typeof rehearsalTimings[slideIndex] === "number" && /* @__PURE__ */ jsx("div", { className: "absolute bottom-0.5 left-0.5 z-10", children: /* @__PURE__ */ jsx("span", { className: "text-[8px] font-mono text-amber-400/80 tabular-nums bg-black/50 px-0.5 rounded", children: formatTimingMs(rehearsalTimings[slideIndex]) }) })
13596
13615
  ]
13597
13616
  }
@@ -14791,6 +14810,8 @@ function SlideCardImpl({
14791
14810
  onDragLeave,
14792
14811
  onDrop
14793
14812
  }) {
14813
+ const { t } = useTranslation();
14814
+ const cue = hiddenSlideCue(slide.hidden, "sorter", index);
14794
14815
  return /* @__PURE__ */ jsxs(
14795
14816
  "div",
14796
14817
  {
@@ -14799,6 +14820,8 @@ function SlideCardImpl({
14799
14820
  isDragTarget ? "border-primary bg-primary/20" : isSelected ? "border-primary bg-primary/10 ring-1 ring-primary/50" : isActive ? "border-primary/50 bg-primary/5" : "border-border bg-background/50 hover:border-border",
14800
14821
  slide.hidden && "opacity-40"
14801
14822
  ),
14823
+ "data-pptx-slide-hidden": cue.marker,
14824
+ "aria-describedby": cue.labelId,
14802
14825
  onClick: (e) => onSlideClick(e, index),
14803
14826
  onDoubleClick: () => onDoubleClick(index),
14804
14827
  onContextMenu: (e) => onContextMenu(e, index),
@@ -14814,13 +14837,17 @@ function SlideCardImpl({
14814
14837
  "span",
14815
14838
  {
14816
14839
  className: cn(
14817
- "text-[11px] font-medium",
14840
+ "text-[11px] font-medium px-0.5",
14818
14841
  isSelected ? "text-primary" : isActive ? "text-primary/70" : "text-muted-foreground"
14819
14842
  ),
14843
+ style: cue.hidden ? { backgroundImage: HIDDEN_SLIDE_SLASH_GRADIENT } : void 0,
14820
14844
  children: index + 1
14821
14845
  }
14822
14846
  ),
14823
- slide.hidden && /* @__PURE__ */ jsx(LuEyeOff, { className: "h-3 w-3 text-muted-foreground" })
14847
+ cue.hidden && /* @__PURE__ */ jsxs("span", { className: "flex items-center gap-1", id: cue.labelId, children: [
14848
+ /* @__PURE__ */ jsx(LuEyeOff, { className: "h-3 w-3 text-muted-foreground" }),
14849
+ /* @__PURE__ */ jsx("span", { className: "text-[9px] uppercase tracking-wide text-muted-foreground", children: t(HIDDEN_SLIDE_LABEL_KEY) })
14850
+ ] })
14824
14851
  ] }),
14825
14852
  isSelected && selectedCount > 1 && /* @__PURE__ */ jsx("div", { className: "absolute top-2 right-2 flex h-5 w-5 items-center justify-center rounded-full bg-primary text-white text-[10px] font-bold", children: selectionOrder })
14826
14853
  ]
@@ -18920,7 +18947,7 @@ function PresenterNotesRail({
18920
18947
  }) {
18921
18948
  const { t } = useTranslation();
18922
18949
  const slide = slides[current];
18923
- const nextSlide = slides.slice(current + 1).find((candidate) => !candidate.hidden);
18950
+ const nextSlide = nextPresentedSlide(slides, current);
18924
18951
  const notesText = slide?.notes ?? "";
18925
18952
  const notesSegments = slide?.notesSegments;
18926
18953
  const [notesDraft, setNotesDraft] = useState(notesText);
@@ -19328,7 +19355,7 @@ function MobilePresenterView({
19328
19355
  }, []);
19329
19356
  const elapsed = mobileElapsedSince(presentationStartTime, now);
19330
19357
  const currentSlide = slides[currentSlideIndex];
19331
- const nextSlide = currentSlideIndex + 1 < slides.length ? slides[currentSlideIndex + 1] : void 0;
19358
+ const nextSlide = nextPresentedSlide(slides, currentSlideIndex);
19332
19359
  if (!currentSlide) {
19333
19360
  return /* @__PURE__ */ jsx("div", { className: "absolute inset-0 z-50 flex items-center justify-center bg-card text-muted-foreground", children: t("pptx.presenter.noSlides") });
19334
19361
  }
@@ -19815,15 +19842,13 @@ function animationTypeColor(anim) {
19815
19842
  }
19816
19843
  return "bg-muted-foreground/40";
19817
19844
  }
19818
- function animationTypeLabel(anim) {
19819
- return anim.entrance ?? anim.emphasis ?? anim.exit ?? "custom";
19820
- }
19821
19845
  function AnimationTimelineSection({
19822
19846
  selectedElementId,
19823
19847
  canEdit,
19824
19848
  handlers
19825
19849
  }) {
19826
19850
  const { t } = useTranslation();
19851
+ const effectLabel = (anim) => animationEffectLabel(anim, (key) => t(key));
19827
19852
  const {
19828
19853
  sortedAnimations,
19829
19854
  dragIndex,
@@ -19859,7 +19884,7 @@ function AnimationTimelineSection({
19859
19884
  left: `${bar.leftPercent}%`,
19860
19885
  width: `${Math.max(bar.widthPercent, 2)}%`
19861
19886
  },
19862
- title: `${getTimelineLabel(bar.anim)} - ${animationTypeLabel(bar.anim)} (${bar.anim.durationMs ?? 500}ms)`,
19887
+ title: `${getTimelineLabel(bar.anim)} - ${effectLabel(bar.anim)} (${bar.anim.durationMs ?? 500}ms)`,
19863
19888
  onMouseEnter: () => handleAnimationHover(bar.anim),
19864
19889
  onMouseLeave: handleAnimationHoverEnd
19865
19890
  },
@@ -26773,6 +26798,53 @@ function SmartArtNodeRow({
26773
26798
  }
26774
26799
  );
26775
26800
  }
26801
+ function SmartArtStyleControls({
26802
+ colorSchemes,
26803
+ styleOptions,
26804
+ colorScheme,
26805
+ style,
26806
+ canEdit,
26807
+ onChangeColorScheme,
26808
+ onChangeStyle
26809
+ }) {
26810
+ const { t } = useTranslation();
26811
+ const translate = React34.useCallback((key) => t(key), [t]);
26812
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
26813
+ /* @__PURE__ */ jsxs("label", { className: "flex flex-col gap-1 text-[11px]", children: [
26814
+ /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: t("pptx.smartart.colorScheme") }),
26815
+ /* @__PURE__ */ jsx(
26816
+ "select",
26817
+ {
26818
+ disabled: !canEdit,
26819
+ "data-testid": "smartart-color-scheme",
26820
+ "aria-label": t("pptx.smartart.colorScheme"),
26821
+ className: cn(INPUT, "w-full"),
26822
+ value: colorScheme,
26823
+ onChange: (e) => onChangeColorScheme(e.target.value),
26824
+ children: colorSchemes.map((cs) => /* @__PURE__ */ jsx("option", { value: cs, children: schemaLabel(SMARTART_COLOR_SCHEME_LABEL_KEYS, cs, translate) }, cs))
26825
+ }
26826
+ )
26827
+ ] }),
26828
+ /* @__PURE__ */ jsxs("label", { className: "flex flex-col gap-1 text-[11px]", children: [
26829
+ /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: t("pptx.smartart.style") }),
26830
+ /* @__PURE__ */ jsx("div", { className: "flex gap-1", role: "group", "aria-label": t("pptx.smartart.style"), children: styleOptions.map((s) => /* @__PURE__ */ jsx(
26831
+ "button",
26832
+ {
26833
+ type: "button",
26834
+ disabled: !canEdit,
26835
+ "aria-pressed": style === s,
26836
+ className: cn(
26837
+ "flex-1 px-2 py-1 text-[10px] rounded border transition-colors",
26838
+ style === s ? "border-primary bg-primary/20 text-primary" : "border-border text-muted-foreground hover:bg-muted"
26839
+ ),
26840
+ onClick: () => onChangeStyle(s),
26841
+ children: schemaLabel(SMARTART_STYLE_LABEL_KEYS, s, translate)
26842
+ },
26843
+ s
26844
+ )) })
26845
+ ] })
26846
+ ] });
26847
+ }
26776
26848
  var COLOR_SCHEMES = [
26777
26849
  "colorful1",
26778
26850
  "colorful2",
@@ -26909,39 +26981,18 @@ function SmartArtPropertiesPanel({
26909
26981
  onUpdateSmartArt: updateSmartArt
26910
26982
  }
26911
26983
  ),
26912
- /* @__PURE__ */ jsxs("label", { className: "flex flex-col gap-1 text-[11px]", children: [
26913
- /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: t("pptx.smartart.colorScheme") }),
26914
- /* @__PURE__ */ jsx(
26915
- "select",
26916
- {
26917
- disabled: !canEdit,
26918
- "data-testid": "smartart-color-scheme",
26919
- "aria-label": t("pptx.smartart.colorScheme"),
26920
- className: cn(INPUT, "w-full"),
26921
- value: smartArtData.colorScheme ?? "colorful1",
26922
- onChange: (e) => updateSmartArt({ colorScheme: e.target.value }),
26923
- children: COLOR_SCHEMES.map((cs) => /* @__PURE__ */ jsx("option", { value: cs, children: cs }, cs))
26924
- }
26925
- )
26926
- ] }),
26927
- /* @__PURE__ */ jsxs("label", { className: "flex flex-col gap-1 text-[11px]", children: [
26928
- /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: t("pptx.smartart.style") }),
26929
- /* @__PURE__ */ jsx("div", { className: "flex gap-1", role: "group", "aria-label": t("pptx.smartart.style"), children: STYLE_OPTIONS.map((s) => /* @__PURE__ */ jsx(
26930
- "button",
26931
- {
26932
- type: "button",
26933
- disabled: !canEdit,
26934
- "aria-pressed": (smartArtData.style ?? "flat") === s,
26935
- className: cn(
26936
- "flex-1 px-2 py-1 text-[10px] rounded border transition-colors",
26937
- (smartArtData.style ?? "flat") === s ? "border-primary bg-primary/20 text-primary" : "border-border text-muted-foreground hover:bg-muted"
26938
- ),
26939
- onClick: () => updateSmartArt({ style: s }),
26940
- children: s
26941
- },
26942
- s
26943
- )) })
26944
- ] }),
26984
+ /* @__PURE__ */ jsx(
26985
+ SmartArtStyleControls,
26986
+ {
26987
+ colorSchemes: COLOR_SCHEMES,
26988
+ styleOptions: STYLE_OPTIONS,
26989
+ colorScheme: smartArtData.colorScheme ?? "colorful1",
26990
+ style: smartArtData.style ?? "flat",
26991
+ canEdit,
26992
+ onChangeColorScheme: (colorScheme) => updateSmartArt({ colorScheme }),
26993
+ onChangeStyle: (style) => updateSmartArt({ style })
26994
+ }
26995
+ ),
26945
26996
  /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between", children: [
26946
26997
  /* @__PURE__ */ jsxs("span", { className: "text-[11px] text-muted-foreground", children: [
26947
26998
  t("pptx.smartart.textPane"),
@@ -27155,6 +27206,57 @@ function TableDataGrid({
27155
27206
  ] }) })
27156
27207
  ] }) });
27157
27208
  }
27209
+ function TableCellPatternFill({
27210
+ cellStyle,
27211
+ canEdit,
27212
+ onUpdateCellStyle
27213
+ }) {
27214
+ const { t } = useTranslation();
27215
+ const translate = (key) => t(key);
27216
+ return /* @__PURE__ */ jsxs("div", { className: "space-y-1.5", children: [
27217
+ /* @__PURE__ */ jsxs("label", { className: "flex flex-col gap-0.5", children: [
27218
+ /* @__PURE__ */ jsx("span", { className: LBL, children: t("pptx.table.patternPreset") }),
27219
+ /* @__PURE__ */ jsx(
27220
+ "select",
27221
+ {
27222
+ disabled: !canEdit,
27223
+ className: SEL,
27224
+ value: cellStyle.patternFillPreset ?? "ltDnDiag",
27225
+ onChange: (e) => onUpdateCellStyle({ patternFillPreset: e.target.value }),
27226
+ children: PATTERN_OPTIONS.map((p) => /* @__PURE__ */ jsx("option", { value: p, children: schemaLabel(FILL_PATTERN_LABEL_KEYS, p, translate) }, p))
27227
+ }
27228
+ )
27229
+ ] }),
27230
+ /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-2 gap-1.5", children: [
27231
+ /* @__PURE__ */ jsxs("label", { className: "flex flex-col gap-0.5", children: [
27232
+ /* @__PURE__ */ jsx("span", { className: LBL, children: t("pptx.table.patternForeground") }),
27233
+ /* @__PURE__ */ jsx(
27234
+ "input",
27235
+ {
27236
+ type: "color",
27237
+ disabled: !canEdit,
27238
+ className: "w-full h-7 rounded border border-border bg-transparent cursor-pointer",
27239
+ value: cellStyle.patternFillForeground ?? "#000000",
27240
+ onChange: (e) => onUpdateCellStyle({ patternFillForeground: e.target.value })
27241
+ }
27242
+ )
27243
+ ] }),
27244
+ /* @__PURE__ */ jsxs("label", { className: "flex flex-col gap-0.5", children: [
27245
+ /* @__PURE__ */ jsx("span", { className: LBL, children: t("pptx.table.patternBackground") }),
27246
+ /* @__PURE__ */ jsx(
27247
+ "input",
27248
+ {
27249
+ type: "color",
27250
+ disabled: !canEdit,
27251
+ className: "w-full h-7 rounded border border-border bg-transparent cursor-pointer",
27252
+ value: cellStyle.patternFillBackground ?? "#FFFFFF",
27253
+ onChange: (e) => onUpdateCellStyle({ patternFillBackground: e.target.value })
27254
+ }
27255
+ )
27256
+ ] })
27257
+ ] })
27258
+ ] });
27259
+ }
27158
27260
  function TableCellAdvancedFill({
27159
27261
  cellStyle,
27160
27262
  canEdit,
@@ -27208,7 +27310,7 @@ function TableCellAdvancedFill({
27208
27310
  }
27209
27311
  ),
27210
27312
  fillMode === "pattern" && /* @__PURE__ */ jsx(
27211
- PatternControls,
27313
+ TableCellPatternFill,
27212
27314
  {
27213
27315
  cellStyle,
27214
27316
  canEdit,
@@ -27334,62 +27436,6 @@ function GradientControls({
27334
27436
  )
27335
27437
  ] });
27336
27438
  }
27337
- function PatternControls({
27338
- cellStyle,
27339
- canEdit,
27340
- onUpdateCellStyle
27341
- }) {
27342
- const { t } = useTranslation();
27343
- return /* @__PURE__ */ jsxs("div", { className: "space-y-1.5", children: [
27344
- /* @__PURE__ */ jsxs("label", { className: "flex flex-col gap-0.5", children: [
27345
- /* @__PURE__ */ jsx("span", { className: LBL, children: t("pptx.table.patternPreset") }),
27346
- /* @__PURE__ */ jsx(
27347
- "select",
27348
- {
27349
- disabled: !canEdit,
27350
- className: SEL,
27351
- value: cellStyle.patternFillPreset ?? "ltDnDiag",
27352
- onChange: (e) => onUpdateCellStyle({
27353
- patternFillPreset: e.target.value
27354
- }),
27355
- children: PATTERN_OPTIONS.map((p) => /* @__PURE__ */ jsx("option", { value: p, children: p }, p))
27356
- }
27357
- )
27358
- ] }),
27359
- /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-2 gap-1.5", children: [
27360
- /* @__PURE__ */ jsxs("label", { className: "flex flex-col gap-0.5", children: [
27361
- /* @__PURE__ */ jsx("span", { className: LBL, children: t("pptx.table.patternForeground") }),
27362
- /* @__PURE__ */ jsx(
27363
- "input",
27364
- {
27365
- type: "color",
27366
- disabled: !canEdit,
27367
- className: "w-full h-7 rounded border border-border bg-transparent cursor-pointer",
27368
- value: cellStyle.patternFillForeground ?? "#000000",
27369
- onChange: (e) => onUpdateCellStyle({
27370
- patternFillForeground: e.target.value
27371
- })
27372
- }
27373
- )
27374
- ] }),
27375
- /* @__PURE__ */ jsxs("label", { className: "flex flex-col gap-0.5", children: [
27376
- /* @__PURE__ */ jsx("span", { className: LBL, children: t("pptx.table.patternBackground") }),
27377
- /* @__PURE__ */ jsx(
27378
- "input",
27379
- {
27380
- type: "color",
27381
- disabled: !canEdit,
27382
- className: "w-full h-7 rounded border border-border bg-transparent cursor-pointer",
27383
- value: cellStyle.patternFillBackground ?? "#FFFFFF",
27384
- onChange: (e) => onUpdateCellStyle({
27385
- patternFillBackground: e.target.value
27386
- })
27387
- }
27388
- )
27389
- ] })
27390
- ] })
27391
- ] });
27392
- }
27393
27439
  function TableCellFormattingPanel({
27394
27440
  tableData: td,
27395
27441
  tableEditorState,
@@ -28809,6 +28855,7 @@ function SlideThemeOverridePanel({
28809
28855
  onUpdateSlide
28810
28856
  }) {
28811
28857
  const { t } = useTranslation();
28858
+ const translate = useCallback((key) => t(key), [t]);
28812
28859
  const override = activeSlide?.clrMapOverride;
28813
28860
  const isOverrideActive = override !== void 0;
28814
28861
  const targetSlotOptions = useMemo(() => [...THEME_COLOR_SCHEME_KEYS], []);
@@ -28901,7 +28948,7 @@ function SlideThemeOverridePanel({
28901
28948
  className: "flex-1 bg-muted border border-border rounded px-1 py-0.5 text-[11px]",
28902
28949
  value: currentTarget,
28903
28950
  onChange: (e) => handleAliasChange(alias, e.target.value),
28904
- children: targetSlotOptions.map((slot) => /* @__PURE__ */ jsx("option", { value: slot, children: slot }, slot))
28951
+ children: targetSlotOptions.map((slot) => /* @__PURE__ */ jsx("option", { value: slot, children: schemaLabel(THEME_COLOR_SLOT_LABEL_KEYS, slot, translate) }, slot))
28905
28952
  }
28906
28953
  )
28907
28954
  ] }, alias);
@@ -29980,26 +30027,6 @@ function PresentationAnnotationOverlay({
29980
30027
  }
29981
30028
  );
29982
30029
  }
29983
- var PEN_COLORS = [
29984
- "#ff0000",
29985
- "#0000ff",
29986
- "#00aa00",
29987
- "#ff8800",
29988
- "#ffffff",
29989
- "#000000",
29990
- "#ff00ff",
29991
- "#00cccc"
29992
- ];
29993
- var HIGHLIGHTER_COLORS = [
29994
- "#ffff00",
29995
- "#00ff00",
29996
- "#ff69b4",
29997
- "#00bfff",
29998
- "#ff8c00",
29999
- "#adff2f",
30000
- "#ff6347",
30001
- "#87ceeb"
30002
- ];
30003
30030
  function PresentationToolbar({
30004
30031
  presentationTool,
30005
30032
  penColor,
@@ -30058,19 +30085,24 @@ function PresentationToolbar({
30058
30085
  setShowHighlighterColors((prev) => !prev);
30059
30086
  setShowPenColors(false);
30060
30087
  }, []);
30061
- const toolBtnClass = (tool) => `flex items-center justify-center w-9 h-9 rounded-md transition-colors ${presentationTool === tool ? "bg-white/25 text-white" : "text-white/70 hover:text-white hover:bg-white/10"}`;
30062
- const navBtnClass = "flex items-center justify-center w-9 h-9 rounded-md transition-colors text-white/70 hover:text-white hover:bg-white/10 disabled:text-white/20 disabled:cursor-not-allowed";
30088
+ const toolBtnClass = (tool) => presentationTool === tool ? PRESENT_TOOLBAR_CLASSES.toggleActive : PRESENT_TOOLBAR_CLASSES.toggle;
30089
+ const navBtnClass = PRESENT_TOOLBAR_CLASSES.button;
30063
30090
  return /* @__PURE__ */ jsxs(
30064
30091
  "div",
30065
30092
  {
30066
30093
  ref: toolbarRef,
30067
- className: "flex items-center gap-1 px-3 py-2 rounded-xl bg-neutral-900/90 backdrop-blur-md border border-white/15 shadow-2xl",
30094
+ "data-pptx-present-toolbar": true,
30095
+ role: "toolbar",
30096
+ tabIndex: -1,
30097
+ "aria-label": t("pptx.toolbar.presentationToolbarAria"),
30098
+ className: PRESENT_TOOLBAR_CLASSES.container,
30068
30099
  onClick: (e) => e.stopPropagation(),
30069
30100
  children: [
30070
30101
  /* @__PURE__ */ jsx(
30071
30102
  "button",
30072
30103
  {
30073
30104
  type: "button",
30105
+ "data-pptx-present-control": "previous",
30074
30106
  className: navBtnClass,
30075
30107
  onClick: () => onMovePresentationSlide(-1),
30076
30108
  disabled: currentSlideIndex === 0,
@@ -30079,11 +30111,12 @@ function PresentationToolbar({
30079
30111
  children: /* @__PURE__ */ jsx(LuChevronLeft, { size: 18 })
30080
30112
  }
30081
30113
  ),
30082
- /* @__PURE__ */ jsx("span", { className: "text-xs font-mono tabular-nums text-white/80 px-1.5 select-none min-w-[48px] text-center", children: formatSlideCounter(currentSlideIndex, totalSlides) }),
30114
+ /* @__PURE__ */ jsx("span", { "data-pptx-present-control": "counter", className: PRESENT_TOOLBAR_CLASSES.counter, children: formatSlideCounter(currentSlideIndex, totalSlides) }),
30083
30115
  /* @__PURE__ */ jsx(
30084
30116
  "button",
30085
30117
  {
30086
30118
  type: "button",
30119
+ "data-pptx-present-control": "next",
30087
30120
  className: navBtnClass,
30088
30121
  onClick: () => onMovePresentationSlide(1),
30089
30122
  disabled: currentSlideIndex >= totalSlides - 1,
@@ -30092,26 +30125,36 @@ function PresentationToolbar({
30092
30125
  children: /* @__PURE__ */ jsx(LuChevronRight, { size: 18 })
30093
30126
  }
30094
30127
  ),
30095
- /* @__PURE__ */ jsx("div", { className: "w-px h-6 bg-white/20 mx-1" }),
30128
+ /* @__PURE__ */ jsx(
30129
+ "div",
30130
+ {
30131
+ "data-pptx-present-control": "divider-navigation",
30132
+ className: PRESENT_TOOLBAR_CLASSES.divider
30133
+ }
30134
+ ),
30096
30135
  /* @__PURE__ */ jsxs(
30097
30136
  "div",
30098
30137
  {
30099
- className: "flex items-center gap-1.5 text-xs font-mono tabular-nums text-white/60 px-1 select-none",
30138
+ "data-pptx-present-control": "timer",
30139
+ className: PRESENT_TOOLBAR_CLASSES.timer,
30100
30140
  title: t("pptx.presenter.elapsed"),
30141
+ "aria-label": t("pptx.presenter.elapsed"),
30101
30142
  children: [
30102
30143
  /* @__PURE__ */ jsx(LuTimer, { size: 14 }),
30103
30144
  /* @__PURE__ */ jsx("span", { children: formatElapsed(elapsed) })
30104
30145
  ]
30105
30146
  }
30106
30147
  ),
30107
- /* @__PURE__ */ jsx("div", { className: "w-px h-6 bg-white/20 mx-1" }),
30148
+ /* @__PURE__ */ jsx("div", { "data-pptx-present-control": "divider-timer", className: PRESENT_TOOLBAR_CLASSES.divider }),
30108
30149
  /* @__PURE__ */ jsx(
30109
30150
  "button",
30110
30151
  {
30111
30152
  type: "button",
30153
+ "data-pptx-present-control": "laser",
30112
30154
  className: toolBtnClass("laser"),
30113
30155
  onClick: () => handleToolClick("laser"),
30114
30156
  title: t("pptx.presentation.laserPointer"),
30157
+ "aria-label": t("pptx.presentation.laserPointer"),
30115
30158
  children: /* @__PURE__ */ jsx(LuMousePointer2, { size: 18 })
30116
30159
  }
30117
30160
  ),
@@ -30120,16 +30163,18 @@ function PresentationToolbar({
30120
30163
  "button",
30121
30164
  {
30122
30165
  type: "button",
30166
+ "data-pptx-present-control": "pen",
30123
30167
  className: toolBtnClass("pen"),
30124
30168
  onClick: () => handleToolClick("pen"),
30125
30169
  onContextMenu: handlePenRightClick,
30126
30170
  title: t("pptx.presentation.pen"),
30171
+ "aria-label": t("pptx.presentation.pen"),
30127
30172
  children: [
30128
30173
  /* @__PURE__ */ jsx(LuPenTool, { size: 18 }),
30129
30174
  /* @__PURE__ */ jsx(
30130
30175
  "div",
30131
30176
  {
30132
- className: "absolute bottom-0.5 left-1/2 -translate-x-1/2 w-3 h-0.5 rounded-full",
30177
+ className: PRESENT_TOOLBAR_CLASSES.swatchBar,
30133
30178
  style: { backgroundColor: penColor }
30134
30179
  }
30135
30180
  )
@@ -30140,21 +30185,23 @@ function PresentationToolbar({
30140
30185
  "button",
30141
30186
  {
30142
30187
  type: "button",
30143
- className: "flex items-center justify-center w-7 h-9 -ml-1 rounded-r-md transition-colors text-white/50 hover:text-white hover:bg-white/10",
30188
+ "data-pptx-present-control": "pen-color",
30189
+ className: PRESENT_TOOLBAR_CLASSES.caret,
30144
30190
  onClick: () => {
30145
30191
  setShowPenColors((prev) => !prev);
30146
30192
  setShowHighlighterColors(false);
30147
30193
  },
30148
- title: `${t("pptx.presentation.pen")} \u2014 color`,
30194
+ title: t("pptx.presentationToolbar.penColor"),
30195
+ "aria-label": t("pptx.presentationToolbar.penColor"),
30149
30196
  children: /* @__PURE__ */ jsx(LuChevronDown, { size: 12 })
30150
30197
  }
30151
30198
  ),
30152
- showPenColors && /* @__PURE__ */ jsx("div", { className: "absolute bottom-full left-1/2 -translate-x-1/2 mb-2 p-3 bg-neutral-800 rounded-lg border border-white/20 shadow-xl grid grid-cols-4 gap-2", children: PEN_COLORS.map((color) => /* @__PURE__ */ jsx(
30199
+ showPenColors && /* @__PURE__ */ jsx("div", { className: PRESENT_TOOLBAR_CLASSES.palette, children: PEN_COLORS.map((color) => /* @__PURE__ */ jsx(
30153
30200
  "button",
30154
30201
  {
30155
30202
  type: "button",
30156
- "aria-label": `${t("pptx.presentation.pen")} ${color}`,
30157
- className: `w-9 h-9 rounded-full border-2 transition-transform hover:scale-110 ${penColor === color ? "border-white" : "border-white/20"}`,
30203
+ "aria-label": t("pptx.presentationToolbar.penColorValue", { color }),
30204
+ className: `${PRESENT_TOOLBAR_CLASSES.swatch} ${penColor === color ? "border-white" : "border-white/20"}`,
30158
30205
  style: { backgroundColor: color },
30159
30206
  onClick: () => {
30160
30207
  onSetPenColor(color);
@@ -30172,16 +30219,18 @@ function PresentationToolbar({
30172
30219
  "button",
30173
30220
  {
30174
30221
  type: "button",
30222
+ "data-pptx-present-control": "highlighter",
30175
30223
  className: toolBtnClass("highlighter"),
30176
30224
  onClick: () => handleToolClick("highlighter"),
30177
30225
  onContextMenu: handleHighlighterRightClick,
30178
30226
  title: t("pptx.presentation.highlighter"),
30227
+ "aria-label": t("pptx.presentation.highlighter"),
30179
30228
  children: [
30180
30229
  /* @__PURE__ */ jsx(LuHighlighter, { size: 18 }),
30181
30230
  /* @__PURE__ */ jsx(
30182
30231
  "div",
30183
30232
  {
30184
- className: "absolute bottom-0.5 left-1/2 -translate-x-1/2 w-3 h-0.5 rounded-full",
30233
+ className: PRESENT_TOOLBAR_CLASSES.swatchBar,
30185
30234
  style: { backgroundColor: highlighterColor }
30186
30235
  }
30187
30236
  )
@@ -30192,21 +30241,23 @@ function PresentationToolbar({
30192
30241
  "button",
30193
30242
  {
30194
30243
  type: "button",
30195
- className: "flex items-center justify-center w-7 h-9 -ml-1 rounded-r-md transition-colors text-white/50 hover:text-white hover:bg-white/10",
30244
+ "data-pptx-present-control": "highlighter-color",
30245
+ className: PRESENT_TOOLBAR_CLASSES.caret,
30196
30246
  onClick: () => {
30197
30247
  setShowHighlighterColors((prev) => !prev);
30198
30248
  setShowPenColors(false);
30199
30249
  },
30200
- title: `${t("pptx.presentation.highlighter")} \u2014 color`,
30250
+ title: t("pptx.presentationToolbar.highlighterColor"),
30251
+ "aria-label": t("pptx.presentationToolbar.highlighterColor"),
30201
30252
  children: /* @__PURE__ */ jsx(LuChevronDown, { size: 12 })
30202
30253
  }
30203
30254
  ),
30204
- showHighlighterColors && /* @__PURE__ */ jsx("div", { className: "absolute bottom-full left-1/2 -translate-x-1/2 mb-2 p-3 bg-neutral-800 rounded-lg border border-white/20 shadow-xl grid grid-cols-4 gap-2", children: HIGHLIGHTER_COLORS.map((color) => /* @__PURE__ */ jsx(
30255
+ showHighlighterColors && /* @__PURE__ */ jsx("div", { className: PRESENT_TOOLBAR_CLASSES.palette, children: HIGHLIGHTER_COLORS.map((color) => /* @__PURE__ */ jsx(
30205
30256
  "button",
30206
30257
  {
30207
30258
  type: "button",
30208
- "aria-label": `${t("pptx.presentation.highlighter")} ${color}`,
30209
- className: `w-9 h-9 rounded-full border-2 transition-transform hover:scale-110 ${highlighterColor === color ? "border-white" : "border-white/20"}`,
30259
+ "aria-label": t("pptx.presentationToolbar.highlighterColorValue", { color }),
30260
+ className: `${PRESENT_TOOLBAR_CLASSES.swatch} ${highlighterColor === color ? "border-white" : "border-white/20"}`,
30210
30261
  style: { backgroundColor: color },
30211
30262
  onClick: () => {
30212
30263
  onSetHighlighterColor(color);
@@ -30223,9 +30274,11 @@ function PresentationToolbar({
30223
30274
  "button",
30224
30275
  {
30225
30276
  type: "button",
30277
+ "data-pptx-present-control": "eraser",
30226
30278
  className: toolBtnClass("eraser"),
30227
30279
  onClick: () => handleToolClick("eraser"),
30228
30280
  title: t("pptx.presentation.eraser"),
30281
+ "aria-label": t("pptx.presentation.eraser"),
30229
30282
  children: /* @__PURE__ */ jsx(LuEraser, { size: 18 })
30230
30283
  }
30231
30284
  ),
@@ -30233,22 +30286,25 @@ function PresentationToolbar({
30233
30286
  "button",
30234
30287
  {
30235
30288
  type: "button",
30236
- className: `flex items-center justify-center w-9 h-9 rounded-md transition-colors ${hasAnnotations ? "text-white/70 hover:text-red-400 hover:bg-white/10" : "text-white/30 cursor-not-allowed"}`,
30289
+ "data-pptx-present-control": "clear",
30290
+ className: `${PRESENT_TOOLBAR_CLASSES.button} ${hasAnnotations ? "hover:text-red-400" : ""}`,
30237
30291
  onClick: hasAnnotations ? onClearAnnotations : void 0,
30238
30292
  title: t("pptx.presentation.clearAnnotations"),
30293
+ "aria-label": t("pptx.presentation.clearAnnotations"),
30239
30294
  disabled: !hasAnnotations,
30240
30295
  children: /* @__PURE__ */ jsx(LuTrash2, { size: 18 })
30241
30296
  }
30242
30297
  ),
30243
- /* @__PURE__ */ jsx("div", { className: "w-px h-6 bg-white/20 mx-1" }),
30298
+ /* @__PURE__ */ jsx("div", { "data-pptx-present-control": "divider-tools", className: PRESENT_TOOLBAR_CLASSES.divider }),
30244
30299
  onTogglePresenterView && /* @__PURE__ */ jsx(
30245
30300
  "button",
30246
30301
  {
30247
30302
  type: "button",
30248
- className: `flex items-center justify-center w-9 h-9 rounded-md transition-colors ${presenterMode ? "bg-white/25 text-white" : "text-white/70 hover:text-white hover:bg-white/10"}`,
30303
+ "data-pptx-present-control": "presenter-view",
30304
+ className: presenterMode ? PRESENT_TOOLBAR_CLASSES.toggleActive : PRESENT_TOOLBAR_CLASSES.toggle,
30249
30305
  onClick: onTogglePresenterView,
30250
- title: t("pptx.presenter.presenterView", { defaultValue: "Presenter view" }),
30251
- "aria-label": t("pptx.presenter.presenterView", { defaultValue: "Presenter view" }),
30306
+ title: t("pptx.presenter.presenterView"),
30307
+ "aria-label": t("pptx.presenter.presenterView"),
30252
30308
  children: /* @__PURE__ */ jsx(LuPanelRight, { size: 18 })
30253
30309
  }
30254
30310
  ),
@@ -30256,7 +30312,8 @@ function PresentationToolbar({
30256
30312
  "button",
30257
30313
  {
30258
30314
  type: "button",
30259
- className: "flex items-center justify-center w-9 h-9 rounded-md transition-colors text-white/70 hover:text-red-400 hover:bg-white/10",
30315
+ "data-pptx-present-control": "end",
30316
+ className: `${PRESENT_TOOLBAR_CLASSES.button} hover:text-red-400`,
30260
30317
  onClick: onEndPresentation,
30261
30318
  title: t("pptx.presenter.endPresentation"),
30262
30319
  "aria-label": t("pptx.presenter.endPresentation"),
@@ -33104,6 +33161,7 @@ function ViewerToolbarSection(props) {
33104
33161
  state: s,
33105
33162
  selectedElement,
33106
33163
  activeSlide,
33164
+ activeSlideIndex,
33107
33165
  zoom,
33108
33166
  history,
33109
33167
  findReplace,
@@ -33527,6 +33585,8 @@ function ViewerToolbarSection(props) {
33527
33585
  eyedropperActive: s.eyedropperActive,
33528
33586
  onToggleEyedropper: () => s.setEyedropperActive((p) => !p),
33529
33587
  onOpenSetUpSlideShow: () => dialogs.setIsSetUpSlideShowOpen(true),
33588
+ onToggleHideSlide: () => slideOps.handleToggleHideSlides([activeSlideIndex]),
33589
+ activeSlideHidden: Boolean(activeSlide?.hidden),
33530
33590
  onOpenBroadcastDialog: () => dialogs.setIsBroadcastDialogOpen(true),
33531
33591
  onToggleSubtitles: dialogs.handleToggleSubtitles,
33532
33592
  showSubtitles: Boolean(s.presentationProperties.showSubtitles),
@@ -34900,7 +34960,7 @@ ${url}`)) {
34900
34960
  mode === "present" && /* @__PURE__ */ jsx(
34901
34961
  "div",
34902
34962
  {
34903
- className: "absolute bottom-6 left-1/2 -translate-x-1/2 z-[80] transition-opacity duration-300",
34963
+ className: PRESENT_TOOLBAR_CLASSES.wrapper,
34904
34964
  style: {
34905
34965
  opacity: annotations.toolbarVisible ? 1 : 0,
34906
34966
  pointerEvents: annotations.toolbarVisible ? "auto" : "none"
@@ -34935,7 +34995,7 @@ ${url}`)) {
34935
34995
  )
34936
34996
  );
34937
34997
  }
34938
- var AiChatPanel = lazy(() => import('./AiChatPanel-EX2TBRJM.mjs'));
34998
+ var AiChatPanel = lazy(() => import('./AiChatPanel-CS4CONUO.mjs'));
34939
34999
  function AiChatPanelLazy(props) {
34940
35000
  return /* @__PURE__ */ jsx(
34941
35001
  Suspense,
@@ -38082,6 +38142,9 @@ var PowerPointViewer = forwardRef(
38082
38142
  mode,
38083
38143
  slides,
38084
38144
  visibleSlideIndexes,
38145
+ // File > Options > Advanced > "End with black slide". Off means the show
38146
+ // exits straight to the editor instead of raising the black end screen.
38147
+ endWithBlackSlide: viewerOptions.advanced.slideShowEndWithBlackSlide,
38085
38148
  activeSlideIndex,
38086
38149
  containerRef,
38087
38150
  content,
@@ -38294,6 +38357,7 @@ var PowerPointViewer = forwardRef(
38294
38357
  state,
38295
38358
  selectedElement,
38296
38359
  activeSlide,
38360
+ activeSlideIndex,
38297
38361
  zoom,
38298
38362
  history,
38299
38363
  findReplace: editorOps.findReplace,