pptx-react-viewer 1.23.0 → 1.24.1

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 (104) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +73 -21
  3. package/dist/{Model3DScene-4XNBDASE.mjs → Model3DScene-E7YIHJ2R.mjs} +2 -2
  4. package/dist/Model3DScene-E7YIHJ2R.mjs.br +0 -0
  5. package/dist/Model3DScene-E7YIHJ2R.mjs.gz +0 -0
  6. package/dist/{Model3DScene-AQS7KDM4.js → Model3DScene-RYR4SSOM.js} +3 -3
  7. package/dist/Model3DScene-RYR4SSOM.js.br +0 -0
  8. package/dist/Model3DScene-RYR4SSOM.js.gz +0 -0
  9. package/dist/{PowerPointViewer-DFTatVS4.d.ts → PowerPointViewer-CnADroqZ.d.ts} +2 -2
  10. package/dist/{PowerPointViewer-DFTatVS4.d.ts.map → PowerPointViewer-CnADroqZ.d.ts.map} +1 -1
  11. package/dist/{SurfaceChart3DScene-HA2SD6BY.js → SurfaceChart3DScene-PBSZVNAM.js} +3 -3
  12. package/dist/SurfaceChart3DScene-PBSZVNAM.js.br +0 -0
  13. package/dist/SurfaceChart3DScene-PBSZVNAM.js.gz +0 -0
  14. package/dist/{SurfaceChart3DScene-K7ZDXDBL.mjs → SurfaceChart3DScene-ZM3J67VQ.mjs} +2 -2
  15. package/dist/SurfaceChart3DScene-ZM3J67VQ.mjs.br +0 -0
  16. package/dist/SurfaceChart3DScene-ZM3J67VQ.mjs.gz +0 -0
  17. package/dist/{types-Da1M5VBY.d.ts → animation-timeline-CEJJLFqK.d.ts} +3 -3
  18. package/dist/animation-timeline-CEJJLFqK.d.ts.map +1 -0
  19. package/dist/{chunk-2DXNTVFV.js → chunk-275WERXZ.js} +71 -72
  20. package/dist/chunk-275WERXZ.js.br +0 -0
  21. package/dist/chunk-275WERXZ.js.gz +0 -0
  22. package/dist/{chunk-H5RREYCO.js → chunk-DPTDFK2L.js} +1306 -460
  23. package/dist/chunk-DPTDFK2L.js.br +0 -0
  24. package/dist/chunk-DPTDFK2L.js.gz +0 -0
  25. package/dist/{chunk-MS6S6YYR.js → chunk-KV3EOLP3.js} +50785 -50553
  26. package/dist/chunk-KV3EOLP3.js.br +0 -0
  27. package/dist/chunk-KV3EOLP3.js.gz +0 -0
  28. package/dist/{chunk-LS2AIX2H.js → chunk-KVTSERRP.js} +26715 -26748
  29. package/dist/chunk-KVTSERRP.js.br +0 -0
  30. package/dist/chunk-KVTSERRP.js.gz +0 -0
  31. package/dist/{chunk-AFWMAFWR.mjs → chunk-LDZQNYWL.mjs} +50784 -50554
  32. package/dist/chunk-LDZQNYWL.mjs.br +0 -0
  33. package/dist/chunk-LDZQNYWL.mjs.gz +0 -0
  34. package/dist/{chunk-I42XL2WU.mjs → chunk-MEVZNYJK.mjs} +42 -43
  35. package/dist/chunk-MEVZNYJK.mjs.br +0 -0
  36. package/dist/chunk-MEVZNYJK.mjs.gz +0 -0
  37. package/dist/{chunk-LFEVG3ED.mjs → chunk-UCFXE6YS.mjs} +855 -11
  38. package/dist/chunk-UCFXE6YS.mjs.br +0 -0
  39. package/dist/chunk-UCFXE6YS.mjs.gz +0 -0
  40. package/dist/{chunk-36NC56XG.mjs → chunk-UDM2SYE3.mjs} +26107 -26142
  41. package/dist/chunk-UDM2SYE3.mjs.br +0 -0
  42. package/dist/chunk-UDM2SYE3.mjs.gz +0 -0
  43. package/dist/{dist-5KQQ6GP2.mjs → dist-A3OATMOE.mjs} +1 -1
  44. package/dist/dist-A3OATMOE.mjs.br +0 -0
  45. package/dist/dist-A3OATMOE.mjs.gz +0 -0
  46. package/dist/{dist-CVSSAFDL.js → dist-XF3QJAEF.js} +568 -560
  47. package/dist/dist-XF3QJAEF.js.br +0 -0
  48. package/dist/dist-XF3QJAEF.js.gz +0 -0
  49. package/dist/hooks-unstable.d.ts +431 -39
  50. package/dist/hooks-unstable.d.ts.map +1 -1
  51. package/dist/hooks-unstable.js +80 -76
  52. package/dist/hooks-unstable.js.br +0 -0
  53. package/dist/hooks-unstable.js.gz +0 -0
  54. package/dist/hooks-unstable.mjs +3 -3
  55. package/dist/hooks-unstable.mjs.br +0 -0
  56. package/dist/hooks-unstable.mjs.gz +0 -0
  57. package/dist/{index-COgh2UTL.d.ts → index-waNAYwmr.d.ts} +12 -4
  58. package/dist/{index-COgh2UTL.d.ts.map → index-waNAYwmr.d.ts.map} +1 -1
  59. package/dist/index.d.ts +865 -7
  60. package/dist/index.d.ts.map +1 -1
  61. package/dist/index.js +42 -30
  62. package/dist/index.js.br +0 -0
  63. package/dist/index.js.gz +0 -0
  64. package/dist/index.mjs +4 -4
  65. package/dist/index.mjs.br +0 -0
  66. package/dist/index.mjs.gz +0 -0
  67. package/dist/useViewerBuildingBlocks-ll3_ncCH.d.ts +378 -0
  68. package/dist/useViewerBuildingBlocks-ll3_ncCH.d.ts.map +1 -0
  69. package/dist/viewer/index.js +20 -20
  70. package/dist/viewer/index.js.br +0 -0
  71. package/dist/viewer/index.js.gz +0 -0
  72. package/dist/viewer/index.mjs +4 -4
  73. package/dist/viewer/index.mjs.br +0 -0
  74. package/dist/viewer/index.mjs.gz +0 -0
  75. package/package.json +1 -1
  76. package/dist/Model3DScene-4XNBDASE.mjs.br +0 -0
  77. package/dist/Model3DScene-4XNBDASE.mjs.gz +0 -0
  78. package/dist/Model3DScene-AQS7KDM4.js.br +0 -0
  79. package/dist/Model3DScene-AQS7KDM4.js.gz +0 -0
  80. package/dist/SurfaceChart3DScene-HA2SD6BY.js.br +0 -0
  81. package/dist/SurfaceChart3DScene-HA2SD6BY.js.gz +0 -0
  82. package/dist/SurfaceChart3DScene-K7ZDXDBL.mjs.br +0 -0
  83. package/dist/SurfaceChart3DScene-K7ZDXDBL.mjs.gz +0 -0
  84. package/dist/chunk-2DXNTVFV.js.br +0 -0
  85. package/dist/chunk-2DXNTVFV.js.gz +0 -0
  86. package/dist/chunk-36NC56XG.mjs.br +0 -0
  87. package/dist/chunk-36NC56XG.mjs.gz +0 -0
  88. package/dist/chunk-AFWMAFWR.mjs.br +0 -0
  89. package/dist/chunk-AFWMAFWR.mjs.gz +0 -0
  90. package/dist/chunk-H5RREYCO.js.br +0 -0
  91. package/dist/chunk-H5RREYCO.js.gz +0 -0
  92. package/dist/chunk-I42XL2WU.mjs.br +0 -0
  93. package/dist/chunk-I42XL2WU.mjs.gz +0 -0
  94. package/dist/chunk-LFEVG3ED.mjs.br +0 -0
  95. package/dist/chunk-LFEVG3ED.mjs.gz +0 -0
  96. package/dist/chunk-LS2AIX2H.js.br +0 -0
  97. package/dist/chunk-LS2AIX2H.js.gz +0 -0
  98. package/dist/chunk-MS6S6YYR.js.br +0 -0
  99. package/dist/chunk-MS6S6YYR.js.gz +0 -0
  100. package/dist/dist-5KQQ6GP2.mjs.br +0 -0
  101. package/dist/dist-5KQQ6GP2.mjs.gz +0 -0
  102. package/dist/dist-CVSSAFDL.js.br +0 -0
  103. package/dist/dist-CVSSAFDL.js.gz +0 -0
  104. package/dist/types-Da1M5VBY.d.ts.map +0 -1
@@ -1,6 +1,6 @@
1
- import { SHAPE_PRESET_DEFS, TOOLBAR_TABS, computeValueRangeForChart, cloneTemplateElementsBySlideId, cloneSlide, countTextSegments, expandTextBuildAnimations, TimelineEngine, TEXT_BUILD_ID_SEP, computeEntranceAnimationDelay, storePresentationDeck, loadPresentationDeck, clearPresentationDeck, PRESENTATION_HASH, PRESENTATION_NONCE_KEY, PRESENTATION_CHANNEL_NAME, swapPresentationWindows, PRESENTATION_MESSAGE_ORIGIN, buildPresentationAudienceUrl, resolveAudienceScreenPlacement, placeAudienceWindow, isPresentationSessionMessage, collectMediaElements, collectImagePaths, buildInitialGuides, saveAutosaveSnapshot, getAnimationInitialStyle, normalizeHexColor, toCssWritingMode, toCssTextOrientation, toCssVerticalDirection, computeAutoFitTextStyle, resolveLineHeight, getKinsokuLineBreakStyles, buildTextBody3DSceneStyle, resolveParagraphRtl, resolveParagraphAlign, resolveCssTextAlign, colorWithOpacity, build3DExtrusionData, getResolvedShapeClipPath, normalizeStrokeDashType, buildCssGradientFromShapeStyle, buildShadowCssFromShapeStyle, buildInnerShadowCssFromShapeStyle, buildMultiLayerShadowCss, buildGlowBoxShadow, getCompoundLineBoxShadow, getEffectDagFilter, buildPatternFillCss, buildReflectionCss, getCssBorderDashStyle, getCompoundLineBorderWidth, getSvgStrokeDasharray, getCompoundLineOffsets, getCompoundLineWidths, clampCropValue, computeSelectionRect, rectToCells, isCellInRect, buildChartViewModel, buildPreviewAnimation, isTemplateElementId, getInlineEditorSelection, applyStyleToSelectedSegments, setPendingSelectionRestore, applyCaseTransformToSegments, transformTextCase, addSection, renameSection, deleteSection, moveSectionUp, moveSectionDown, moveSlidesToSection, normalizeColorsForCapture, preprocessCssForCapture, slideProgressPercent, slideStatusLabel, EXPORT_ASSEMBLING_PERCENT, EXPORT_DONE_PERCENT, isExportAbortError, recordProgressPercent, comparePresentation, applyAcceptSlide, applyAcceptAllSlides, collectUsedFonts, detectTouchDevice, detectOrientation, isMobileViewport, MOBILE_BREAKPOINT, TABLET_BREAKPOINT, remapTextToSegments, shouldLoopContinuously, applyRehearsalTimings, copyFormatFromElement, applyFormatToElement, createSyncGate, validateRoomId, resolveTransportForServerUrl, isMixedContentBlocked, CONNECTION_TIMEOUT_MS, BROADCAST_THROTTLE_MS, sanitizeColor, readSlidesFromYDoc, reconcileSlidesInYDoc, LOCAL_SYNC_ORIGIN, observeYDocSlides, computeVirtualRange, DEFAULT_VIRTUAL_OVERSCAN, createTouchGestureRecognizer, isKeyboardOpen, isActionHidden, buildElementClipboardPayload, generatePackageReadme, downloadBlob, groupElements, generateElementId, makeCloneId, alignElements, distributeElements, bringForward, sendBackward, bringToFront, sendToBack, newTableElement, createDefaultChartElement, readViewportMetrics, computeKeyboardInset, derivePresenceList, buildPrintDocument, buildOutlineHtml, buildSlidesHtml, buildNotesHtml, buildHandoutsHtml, createBlankSlide, makeSlideId, cloneHistorySnapshot, createPresentationSessionId, resolveTransitionDurationMs, isUrlSafe, createPresenterTimer, createInitialPresentationSnapshot, mergePresentationSnapshot, presenterElapsed, stepPresenterZoom, resetPresenterTimer, togglePresenterTimer, isTemplateElement, substituteFieldText, resolveUnderlineDecorationStyle, hasDistinctScriptFonts, buildTextReflectionCss, getTextAlphaOpacity, buildTextRunFilterChain, buildTextShadowCss, apply3dEffects, clampUnitInterval, getRoundRectRadiusPx, computeColumnBoundaries, parseDrawingColor, parseDrawingColorOpacity, getPatternSvg, ooxmlDashToCssBorderStyle, getChartStylePalette, computeLayout, valueToY, formatAxisValue, computeLayoutOptions, splitSeriesByAxis, computeValueRange, getSecondaryValueAxis, seriesColor, paletteColor, resolveRegionCode, normalizeValue, sequentialColorScale, canvasToJpegData, downloadDataUrl, pickSupportedMimeType, WEBM_MIME_CANDIDATES, fpsToFrameIntervalMs, segmentFrameCount, sanitizeDownloadFilename, encodeGif, groupSlidesBySection, cloneElementForPaste, computeScrollDelta, rerouteConnectorsForMovedElements, applyReroutedConnectors, buildPrintHtmlDocument, convertOmmlToMathMl, sanitizeMathMl, buildTextFillCss, resolvePictureBullet, computeResizedColumnWidths, computeResizedRowHeight, DEFAULT_ROW_HEIGHT, tintColor2, shadeColor2, deleteTableColumn, insertTableColumn, deleteTableRow, insertTableRow, splitCell, mergeCells, buildSlidesPdfBytes, buildNotesPdfBytes, ACTION_BUTTON_PRESETS, buildSmartArtPresetData, computeSnapToShape, computeMarqueeHitIds, mergeAdditiveSelection, segmentByScript, resolveFontForScript, generateLogTicks, formatAxisValueWithUnits, getDisplayUnitLabel, applyResize, snapBoxToGrid, chartPartToAttrs } from './chunk-I42XL2WU.mjs';
1
+ import { SHAPE_PRESET_DEFS, TOOLBAR_TABS, computeValueRangeForChart, cloneTemplateElementsBySlideId, cloneSlide, countTextSegments, expandTextBuildAnimations, TimelineEngine, TEXT_BUILD_ID_SEP, computeEntranceAnimationDelay, storePresentationDeck, loadPresentationDeck, clearPresentationDeck, PRESENTATION_HASH, PRESENTATION_NONCE_KEY, PRESENTATION_CHANNEL_NAME, swapPresentationWindows, PRESENTATION_MESSAGE_ORIGIN, buildPresentationAudienceUrl, resolveAudienceScreenPlacement, placeAudienceWindow, isPresentationSessionMessage, collectMediaElements, collectImagePaths, buildInitialGuides, saveAutosaveSnapshot, getAnimationInitialStyle, normalizeHexColor, toCssWritingMode, toCssTextOrientation, toCssVerticalDirection, computeAutoFitTextStyle, resolveLineHeight, getKinsokuLineBreakStyles, buildTextBody3DSceneStyle, resolveParagraphRtl, resolveParagraphAlign, resolveCssTextAlign, colorWithOpacity, build3DExtrusionData, getResolvedShapeClipPath, normalizeStrokeDashType, buildCssGradientFromShapeStyle, buildShadowCssFromShapeStyle, buildInnerShadowCssFromShapeStyle, buildMultiLayerShadowCss, buildGlowBoxShadow, getCompoundLineBoxShadow, getEffectDagFilter, buildPatternFillCss, buildReflectionCss, getCssBorderDashStyle, getCompoundLineBorderWidth, getSvgStrokeDasharray, getCompoundLineOffsets, getCompoundLineWidths, clampCropValue, computeSelectionRect, rectToCells, isCellInRect, buildChartViewModel, buildPreviewAnimation, isTemplateElementId, getInlineEditorSelection, applyStyleToSelectedSegments, setPendingSelectionRestore, applyCaseTransformToSegments, transformTextCase, addSection, renameSection, deleteSection, moveSectionUp, moveSectionDown, moveSlidesToSection, normalizeColorsForCapture, preprocessCssForCapture, slideProgressPercent, slideStatusLabel, EXPORT_ASSEMBLING_PERCENT, EXPORT_DONE_PERCENT, isExportAbortError, recordProgressPercent, comparePresentation, applyAcceptSlide, applyAcceptAllSlides, collectUsedFonts, detectTouchDevice, detectOrientation, isMobileViewport, MOBILE_BREAKPOINT, TABLET_BREAKPOINT, remapTextToSegments, shouldLoopContinuously, applyRehearsalTimings, copyFormatFromElement, applyFormatToElement, createSyncGate, validateRoomId, resolveTransportForServerUrl, isMixedContentBlocked, CONNECTION_TIMEOUT_MS, BROADCAST_THROTTLE_MS, sanitizeColor, readSlidesFromYDoc, reconcileSlidesInYDoc, LOCAL_SYNC_ORIGIN, observeYDocSlides, computeVirtualRange, DEFAULT_VIRTUAL_OVERSCAN, createTouchGestureRecognizer, isKeyboardOpen, openPptxFile, readBackstageRecentFile, isActionHidden, buildElementClipboardPayload, generatePackageReadme, downloadBlob, groupElements, generateElementId, makeCloneId, alignElements, distributeElements, bringForward, sendBackward, bringToFront, sendToBack, newTableElement, createDefaultChartElement, readViewportMetrics, computeKeyboardInset, derivePresenceList, buildPrintDocument, buildOutlineHtml, buildSlidesHtml, buildNotesHtml, buildHandoutsHtml, createBlankSlide, makeSlideId, cloneHistorySnapshot, createPresentationSessionId, resolveTransitionDurationMs, isUrlSafe, createPresenterTimer, createInitialPresentationSnapshot, mergePresentationSnapshot, presenterElapsed, stepPresenterZoom, resetPresenterTimer, togglePresenterTimer, isTemplateElement, substituteFieldText, resolveUnderlineDecorationStyle, hasDistinctScriptFonts, buildTextReflectionCss, getTextAlphaOpacity, buildTextRunFilterChain, buildTextShadowCss, apply3dEffects, clampUnitInterval, getRoundRectRadiusPx, computeColumnBoundaries, parseDrawingColor, parseDrawingColorOpacity, getPatternSvg, ooxmlDashToCssBorderStyle, getChartStylePalette, computeLayout, valueToY, formatAxisValue, computeLayoutOptions, splitSeriesByAxis, computeValueRange, getSecondaryValueAxis, seriesColor, paletteColor, resolveRegionCode, normalizeValue, sequentialColorScale, canvasToJpegData, downloadDataUrl, pickSupportedMimeType, WEBM_MIME_CANDIDATES, fpsToFrameIntervalMs, segmentFrameCount, sanitizeDownloadFilename, encodeGif, groupSlidesBySection, hasCopyableFormat, createBackstagePresentation, cloneElementForPaste, computeScrollDelta, rerouteConnectorsForMovedElements, applyReroutedConnectors, buildPrintHtmlDocument, convertOmmlToMathMl, sanitizeMathMl, buildTextFillCss, resolvePictureBullet, computeResizedColumnWidths, computeResizedRowHeight, DEFAULT_ROW_HEIGHT, tintColor2, shadeColor2, deleteTableColumn, insertTableColumn, deleteTableRow, insertTableRow, splitCell, mergeCells, buildSlidesPdfBytes, buildNotesPdfBytes, isPpactionUrl, parsePpactionUrl, safeOpenUrl, ACTION_BUTTON_PRESETS, buildSmartArtPresetData, computeSnapToShape, computeMarqueeHitIds, mergeAdditiveSelection, segmentByScript, resolveFontForScript, generateLogTicks, formatAxisValueWithUnits, getDisplayUnitLabel, applyResize, snapBoxToGrid, chartPartToAttrs } from './chunk-MEVZNYJK.mjs';
2
2
  import { translationsEn } from './chunk-E3KJKCSV.mjs';
3
- import { hasTextProperties, PptxHandler, EncryptedFileError, hasShapeProperties, isImageLikeElement, isCalloutShape, getCalloutLeaderLineGeometry, buildCalloutLeaderLineSvgPath, getCalloutViewBoxBounds, applyThemeToData, THEME_PRESETS, themeColorSchemesEqual, guidePxToEmu, mergeShapes, getSubstituteFontFamily, getPresetShapeClipPath, svgPathToPolygons, polygonsToSvgPath, SvgExporter, rebuildTableStructureInRawXml, updateCellTextStyleInRawXml, updateCellTextInRawXml, updateMergeAttrsInRawXml, elementActionToPptxAction } from './chunk-AFWMAFWR.mjs';
3
+ import { hasTextProperties, PptxHandler, EncryptedFileError, hasShapeProperties, isImageLikeElement, isCalloutShape, getCalloutLeaderLineGeometry, buildCalloutLeaderLineSvgPath, getCalloutViewBoxBounds, applyThemeToData, THEME_PRESETS, themeColorSchemesEqual, guidePxToEmu, mergeShapes, getSubstituteFontFamily, getPresetShapeClipPath, svgPathToPolygons, polygonsToSvgPath, SvgExporter, rebuildTableStructureInRawXml, updateCellTextStyleInRawXml, updateCellTextInRawXml, updateMergeAttrsInRawXml, elementActionToPptxAction } from './chunk-LDZQNYWL.mjs';
4
4
  import React3, { useState, useEffect, useMemo, Suspense, useRef, useCallback, useSyncExternalStore, useImperativeHandle, useLayoutEffect } from 'react';
5
5
  import { LuTriangle, LuPlus, LuMoveRight, LuMinus, LuDiamond, LuDatabase, LuCircle, LuSquare } from 'react-icons/lu';
6
6
  import { clsx } from 'clsx';
@@ -3338,7 +3338,8 @@ function useLoadContent({
3338
3338
  setLoading,
3339
3339
  setError,
3340
3340
  setIsDirty,
3341
- setIsEncrypted
3341
+ setIsEncrypted,
3342
+ onContentApplied
3342
3343
  }) {
3343
3344
  const handlerRef = useRef(null);
3344
3345
  const originalBufferRef = useRef(null);
@@ -3510,6 +3511,7 @@ function useLoadContent({
3510
3511
  clearSelection();
3511
3512
  setIsDirty(false);
3512
3513
  history.resetHistory();
3514
+ onContentApplied?.();
3513
3515
  } catch (err) {
3514
3516
  if (!cancelled && token === renderTokenRef.current) {
3515
3517
  if (err instanceof EncryptedFileError) {
@@ -8464,7 +8466,7 @@ function FailedToLoad() {
8464
8466
  var LazySurfaceChart3DScene = React3.lazy(
8465
8467
  async () => {
8466
8468
  try {
8467
- return await import('./SurfaceChart3DScene-K7ZDXDBL.mjs');
8469
+ return await import('./SurfaceChart3DScene-ZM3J67VQ.mjs');
8468
8470
  } catch {
8469
8471
  return { default: FailedToLoad };
8470
8472
  }
@@ -15956,7 +15958,8 @@ function useContentLifecycle(input) {
15956
15958
  ops,
15957
15959
  actionSoundHandlerRef,
15958
15960
  setIsEncryptedDialogOpen,
15959
- password
15961
+ password,
15962
+ onContentApplied
15960
15963
  } = input;
15961
15964
  const { handlerRef } = useLoadContent({
15962
15965
  content,
@@ -15991,7 +15994,8 @@ function useContentLifecycle(input) {
15991
15994
  setLoading: state.setLoading,
15992
15995
  setError: state.setError,
15993
15996
  setIsDirty: state.setIsDirty,
15994
- setIsEncrypted: setIsEncryptedDialogOpen
15997
+ setIsEncrypted: setIsEncryptedDialogOpen,
15998
+ onContentApplied
15995
15999
  });
15996
16000
  useEffect(() => {
15997
16001
  actionSoundHandlerRef.current = handlerRef.current;
@@ -16292,6 +16296,7 @@ function useViewerIntegration(input) {
16292
16296
  markDirty: history.markDirty
16293
16297
  });
16294
16298
  const [isEncryptedDialogOpen, setIsEncryptedDialogOpen] = useState(false);
16299
+ const [loadVersion, setLoadVersion] = useState(0);
16295
16300
  const { handlerRef, serializeSlides, autosaveStatus } = useContentLifecycle({
16296
16301
  content,
16297
16302
  filePath,
@@ -16302,7 +16307,8 @@ function useViewerIntegration(input) {
16302
16307
  ops: editorOps.ops,
16303
16308
  actionSoundHandlerRef,
16304
16309
  setIsEncryptedDialogOpen,
16305
- password: dialogs.presentationPassword ?? void 0
16310
+ password: dialogs.presentationPassword ?? void 0,
16311
+ onContentApplied: () => setLoadVersion((v) => v + 1)
16306
16312
  });
16307
16313
  const { exportHandlers, printHandlers, themeHandlers, propertyHandlers } = useIOHandlers({
16308
16314
  state,
@@ -16548,7 +16554,8 @@ function useViewerIntegration(input) {
16548
16554
  handleEnterRehearsalMode,
16549
16555
  autosaveStatus,
16550
16556
  isEncryptedDialogOpen,
16551
- setIsEncryptedDialogOpen
16557
+ setIsEncryptedDialogOpen,
16558
+ loadVersion
16552
16559
  };
16553
16560
  }
16554
16561
  function getSnapshot() {
@@ -16981,13 +16988,15 @@ function useYjsDocumentSync({
16981
16988
  isConnected,
16982
16989
  isSynced = true,
16983
16990
  config,
16984
- getSourceBytes
16991
+ getSourceBytes,
16992
+ loadVersion = 0
16985
16993
  }) {
16986
16994
  const isApplyingRemoteRef = useRef(false);
16987
16995
  const lastSyncedRef = useRef("");
16988
16996
  const hasInitializedRef = useRef(false);
16989
16997
  const writeBackTimerRef = useRef(null);
16990
16998
  const factoriesRef = useRef(null);
16999
+ const lastLoadVersionRef = useRef(loadVersion);
16991
17000
  const getFactories = useCallback(async () => {
16992
17001
  if (factoriesRef.current) {
16993
17002
  return factoriesRef.current;
@@ -17019,7 +17028,7 @@ function useYjsDocumentSync({
17019
17028
  return;
17020
17029
  }
17021
17030
  try {
17022
- const { PptxHandler: PptxHandler2 } = await import('./dist-5KQQ6GP2.mjs');
17031
+ const { PptxHandler: PptxHandler2 } = await import('./dist-A3OATMOE.mjs');
17023
17032
  const handler = new PptxHandler2();
17024
17033
  await handler.load(sourceBytes.buffer);
17025
17034
  const currentSlides = readSlidesFromYDoc(
@@ -17032,6 +17041,27 @@ function useYjsDocumentSync({
17032
17041
  }
17033
17042
  }, debounceMs);
17034
17043
  }, [doc, config, getSourceBytes, templateElementsBySlideId]);
17044
+ useEffect(() => {
17045
+ if (loadVersion === lastLoadVersionRef.current) {
17046
+ return;
17047
+ }
17048
+ lastLoadVersionRef.current = loadVersion;
17049
+ if (!doc || !isConnected) {
17050
+ return;
17051
+ }
17052
+ const docSlides = readSlidesFromYDoc(
17053
+ doc
17054
+ );
17055
+ if (docSlides.length === 0) {
17056
+ return;
17057
+ }
17058
+ lastSyncedRef.current = JSON.stringify(docSlides);
17059
+ isApplyingRemoteRef.current = true;
17060
+ setSlides(docSlides);
17061
+ requestAnimationFrame(() => {
17062
+ isApplyingRemoteRef.current = false;
17063
+ });
17064
+ }, [loadVersion, doc, isConnected, setSlides]);
17035
17065
  useEffect(() => {
17036
17066
  if (!isConnected || !isSynced || !doc || isApplyingRemoteRef.current || slides.length === 0) {
17037
17067
  return;
@@ -17396,6 +17426,820 @@ function useKeyboardInsets(enabled = true) {
17396
17426
  }, [enabled]);
17397
17427
  return { keyboardInset, isKeyboardOpen: isKeyboardOpen(keyboardInset) };
17398
17428
  }
17429
+
17430
+ // src/viewer/hooks/useViewerBuildingBlocks-canvas-props.ts
17431
+ function buildCanvasProps(input) {
17432
+ const {
17433
+ mode,
17434
+ canEdit,
17435
+ slides,
17436
+ activeSlide,
17437
+ masterPseudoSlide,
17438
+ templateElements,
17439
+ canvasSize,
17440
+ activeSlideIndex,
17441
+ gridSpacingPx,
17442
+ zoom,
17443
+ state: s,
17444
+ selectedElement,
17445
+ canvasHandlers,
17446
+ insertHandlers,
17447
+ tableOps,
17448
+ presentation,
17449
+ findResults,
17450
+ findResultIndex
17451
+ } = input;
17452
+ const effectiveSlide = mode === "master" ? masterPseudoSlide : activeSlide;
17453
+ const effectiveTemplateElements = mode === "master" ? s.activeLayout ? s.activeMaster?.elements ?? [] : [] : templateElements;
17454
+ let slideTitle;
17455
+ if (activeSlide) {
17456
+ for (const el of activeSlide.elements) {
17457
+ const phType = el.placeholderType;
17458
+ if (phType === "title" || phType === "ctrTitle") {
17459
+ const txt = el.text;
17460
+ if (txt) {
17461
+ slideTitle = txt;
17462
+ break;
17463
+ }
17464
+ }
17465
+ }
17466
+ }
17467
+ const hf = s.headerFooter;
17468
+ const fieldContext = {
17469
+ slideNumber: activeSlide?.slideNumber,
17470
+ dateTimeText: hf.dateTimeText,
17471
+ dateFormat: hf.dateFormat,
17472
+ footerText: hf.footerText,
17473
+ headerText: hf.headerText,
17474
+ slideTitle,
17475
+ customProperties: s.customProperties.map((p) => ({ name: p.name, value: p.value }))
17476
+ };
17477
+ const tableStyleContext = s.theme || s.tableStyleMap ? { theme: s.theme, tableStyleMap: s.tableStyleMap } : void 0;
17478
+ const handleActionClick = (_elementId, action) => {
17479
+ if (mode === "present") {
17480
+ presentation.handlePresentationAction(action);
17481
+ } else if (action.url) {
17482
+ safeOpenUrl(action.url);
17483
+ }
17484
+ };
17485
+ const handleHyperlinkClick = (url) => {
17486
+ if (isPpactionUrl(url)) {
17487
+ if (mode === "present") {
17488
+ const parsed = parsePpactionUrl(url);
17489
+ if (parsed) {
17490
+ presentation.handlePresentationAction({
17491
+ action: parsed.action,
17492
+ targetSlideIndex: parsed.targetSlideIndex
17493
+ });
17494
+ }
17495
+ }
17496
+ return;
17497
+ }
17498
+ safeOpenUrl(url);
17499
+ };
17500
+ return {
17501
+ activeSlide: effectiveSlide,
17502
+ templateElements: effectiveTemplateElements,
17503
+ canvasSize,
17504
+ zoom,
17505
+ mode,
17506
+ canEdit,
17507
+ editTemplateMode: mode === "master" || s.editTemplateMode,
17508
+ selectedElementIdSet: s.selectedElementIdSet,
17509
+ selectedElement,
17510
+ inlineEditingElementId: s.inlineEditingElementId,
17511
+ inlineEditingText: s.inlineEditingText,
17512
+ spellCheckEnabled: s.spellCheckEnabled,
17513
+ mediaDataUrls: s.mediaDataUrls,
17514
+ tableEditorState: s.tableEditorState,
17515
+ marqueeSelectionState: s.marqueeSelectionState,
17516
+ snapLines: s.snapLines,
17517
+ showGrid: s.showGrid,
17518
+ gridSpacingPx,
17519
+ showRulers: s.showRulers,
17520
+ guides: s.guides,
17521
+ presentationElementStates: mode === "present" ? presentation.presentationElementStates : void 0,
17522
+ presentationKeyframesCss: mode === "present" ? presentation.presentationKeyframesCss : void 0,
17523
+ onClick: canvasHandlers.handleElementClick,
17524
+ onDoubleClick: canvasHandlers.handleElementDoubleClick,
17525
+ onMouseDown: canvasHandlers.handleElementMouseDown,
17526
+ onContextMenu: canvasHandlers.handleElementContextMenu,
17527
+ onCanvasMouseDown: canvasHandlers.handleCanvasMouseDown,
17528
+ onResizePointerDown: canvasHandlers.handleResizePointerDown,
17529
+ onAdjustmentPointerDown: canvasHandlers.handleAdjustmentPointerDown,
17530
+ onRotate: canvasHandlers.handleRotate,
17531
+ onInlineEditChange: s.setInlineEditingText,
17532
+ onInlineEditCommit: canvasHandlers.handleInlineEditCommit,
17533
+ onInlineEditCancel: () => s.setInlineEditingElementId(null),
17534
+ onTableCellSelect: (cell, elementId) => s.setTableEditorState(cell ? { ...cell, elementId } : null),
17535
+ onCommitCellEdit: tableOps.handleCommitCellEdit,
17536
+ onUpdateSmartArtElement: canvasHandlers.handleUpdateSmartArtElement,
17537
+ onFormatText: canvasHandlers.handleFormatText,
17538
+ onResizeTableColumns: tableOps.handleResizeTableColumns,
17539
+ onResizeTableRow: tableOps.handleResizeTableRow,
17540
+ findResults,
17541
+ findResultIndex,
17542
+ activeSlideIndex,
17543
+ activeTool: s.activeTool,
17544
+ drawingColor: s.drawingColor,
17545
+ drawingWidth: s.drawingWidth,
17546
+ isDrawingRef: s.isDrawingRef,
17547
+ onAddInkElement: insertHandlers.handleAddInkElement,
17548
+ onAddFreeformShape: insertHandlers.handleAddFreeformShape,
17549
+ onEraseInkElement: insertHandlers.handleEraseInkElement,
17550
+ onActionClick: handleActionClick,
17551
+ onHyperlinkClick: handleHyperlinkClick,
17552
+ allSlides: mode === "present" ? slides : void 0,
17553
+ onZoomClick: mode === "present" ? presentation.handleZoomClick : void 0,
17554
+ sourceSlideIndex: mode === "present" ? activeSlideIndex : void 0,
17555
+ fieldContext,
17556
+ tableStyleContext,
17557
+ // Collaboration cursor/selection overlays require a `CollaborationProvider`
17558
+ // ancestor, which these building blocks intentionally don't render (hosts
17559
+ // that need collaboration should use `PowerPointViewer` directly).
17560
+ collaborationOverlay: void 0,
17561
+ comments: activeSlide?.comments,
17562
+ showCommentMarkers: s.sidebarPanelMode === "comments",
17563
+ onCommentMarkerClick: () => s.setSidebarPanelMode("comments"),
17564
+ onMoveGuide: (guideId, position) => {
17565
+ s.setGuides(
17566
+ (prev) => prev.map(
17567
+ (guide) => guide.id === guideId ? {
17568
+ ...guide,
17569
+ position: guide.axis === "h" ? Math.max(0, Math.min(canvasSize.height, position)) : Math.max(0, Math.min(canvasSize.width, position))
17570
+ } : guide
17571
+ )
17572
+ );
17573
+ },
17574
+ onDeleteGuide: (guideId) => {
17575
+ s.setGuides((prev) => prev.filter((guide) => guide.id !== guideId));
17576
+ },
17577
+ onCreateGuideFromRuler: (axis, positionPx) => {
17578
+ s.setGuides((prev) => [
17579
+ ...prev,
17580
+ {
17581
+ id: `guide-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`,
17582
+ axis,
17583
+ position: positionPx
17584
+ }
17585
+ ]);
17586
+ }
17587
+ };
17588
+ }
17589
+
17590
+ // src/viewer/hooks/useScopedLayoutOptions.ts
17591
+ function scopeLayoutOptionsToActiveSlide(options, activeSlide) {
17592
+ if (!activeSlide?.layoutPath) {
17593
+ return options;
17594
+ }
17595
+ const hasAnyMasterInfo = options.some((o) => o.masterPath);
17596
+ if (!hasAnyMasterInfo) {
17597
+ return options;
17598
+ }
17599
+ const activeOption = options.find((o) => o.path === activeSlide.layoutPath);
17600
+ const activeMaster = activeOption?.masterPath;
17601
+ if (!activeMaster) {
17602
+ return options;
17603
+ }
17604
+ const scoped = options.filter((o) => o.masterPath === activeMaster);
17605
+ const seen = /* @__PURE__ */ new Map();
17606
+ for (const opt of scoped) {
17607
+ const isActive = opt.path === activeSlide.layoutPath;
17608
+ const existing = seen.get(opt.name);
17609
+ if (!existing || isActive) {
17610
+ seen.set(opt.name, opt);
17611
+ }
17612
+ }
17613
+ const chosen = new Set(Array.from(seen.values()).map((o) => o.path));
17614
+ const result = [];
17615
+ const usedNames = /* @__PURE__ */ new Set();
17616
+ for (const opt of scoped) {
17617
+ if (!chosen.has(opt.path)) {
17618
+ continue;
17619
+ }
17620
+ if (usedNames.has(opt.name)) {
17621
+ continue;
17622
+ }
17623
+ usedNames.add(opt.name);
17624
+ result.push(opt);
17625
+ }
17626
+ return result;
17627
+ }
17628
+
17629
+ // src/viewer/hooks/useViewerBuildingBlocks-toolbar-handlers.ts
17630
+ function buildToolbarAnimationHandlers(input) {
17631
+ const { selectedElement, activeSlide, propertyHandlers, ops, history } = input;
17632
+ const handleAddAnimation = (preset, group) => {
17633
+ if (!selectedElement || !activeSlide) {
17634
+ return;
17635
+ }
17636
+ const current = activeSlide.animations ?? [];
17637
+ const existing = current.find((a) => a.elementId === selectedElement.id);
17638
+ const presetValue = preset;
17639
+ if (existing) {
17640
+ const updated = current.map(
17641
+ (a) => a.elementId === selectedElement.id ? { ...a, [group]: presetValue } : a
17642
+ );
17643
+ propertyHandlers.handleUpdateSlide({ animations: updated });
17644
+ } else {
17645
+ const newAnim = {
17646
+ elementId: selectedElement.id,
17647
+ [group]: presetValue,
17648
+ durationMs: 500,
17649
+ order: current.length,
17650
+ trigger: "onClick"
17651
+ };
17652
+ propertyHandlers.handleUpdateSlide({ animations: [...current, newAnim] });
17653
+ }
17654
+ };
17655
+ const handleRemoveAnimation = () => {
17656
+ if (!selectedElement || !activeSlide) {
17657
+ return;
17658
+ }
17659
+ const current = activeSlide.animations ?? [];
17660
+ const filtered = current.filter((a) => a.elementId !== selectedElement.id);
17661
+ propertyHandlers.handleUpdateSlide({ animations: filtered });
17662
+ };
17663
+ const handleTransitionChange = (updates) => {
17664
+ if (!activeSlide) {
17665
+ return;
17666
+ }
17667
+ const current = activeSlide.transition ?? { type: "none" };
17668
+ propertyHandlers.handleUpdateSlide({ transition: { ...current, ...updates } });
17669
+ };
17670
+ const handleApplyTransitionToAll = () => {
17671
+ const transition = activeSlide?.transition;
17672
+ if (!transition) {
17673
+ return;
17674
+ }
17675
+ ops.updateSlides((prev) => prev.map((sl) => ({ ...sl, transition })));
17676
+ history.markDirty();
17677
+ };
17678
+ return {
17679
+ handleAddAnimation,
17680
+ handleRemoveAnimation,
17681
+ handleTransitionChange,
17682
+ handleApplyTransitionToAll
17683
+ };
17684
+ }
17685
+
17686
+ // src/viewer/hooks/useViewerBuildingBlocks-toolbar-props.ts
17687
+ function buildToolbarProps(input) {
17688
+ const {
17689
+ mode,
17690
+ canEdit,
17691
+ state: s,
17692
+ selectedElement,
17693
+ activeSlide,
17694
+ zoom,
17695
+ history,
17696
+ findReplace,
17697
+ manipulation,
17698
+ insertHandlers,
17699
+ exportHandlers,
17700
+ printHandlers,
17701
+ propertyHandlers,
17702
+ dialogs,
17703
+ slideOps,
17704
+ ops,
17705
+ onSetMode,
17706
+ onEnterPresenterView,
17707
+ onEnterRehearsalMode,
17708
+ onOpenSettings,
17709
+ onOpenHeaderFooter,
17710
+ onOpenShareDialog,
17711
+ onOpenFile,
17712
+ onOpenRecentFile,
17713
+ fileName,
17714
+ hiddenActions
17715
+ } = input;
17716
+ const {
17717
+ handleAddAnimation,
17718
+ handleRemoveAnimation,
17719
+ handleTransitionChange,
17720
+ handleApplyTransitionToAll
17721
+ } = buildToolbarAnimationHandlers({
17722
+ selectedElement,
17723
+ activeSlide,
17724
+ propertyHandlers,
17725
+ ops,
17726
+ history
17727
+ });
17728
+ const scopedLayoutOptions = scopeLayoutOptionsToActiveSlide(s.layoutOptions, activeSlide);
17729
+ return {
17730
+ fileName,
17731
+ mode,
17732
+ canEdit,
17733
+ isNarrowViewport: dialogs.isNarrowViewport,
17734
+ isSidebarCollapsed: !s.isSlidesPaneOpen,
17735
+ isInspectorPaneOpen: s.isInspectorPaneOpen,
17736
+ isCompactToolbarOpen: s.isCompactToolbarOpen,
17737
+ toolbarSection: s.toolbarSection,
17738
+ scale: zoom.scale,
17739
+ canUndo: history.canUndo,
17740
+ canRedo: history.canRedo,
17741
+ undoLabel: history.undoLabel,
17742
+ redoLabel: history.redoLabel,
17743
+ findReplaceOpen: findReplace.findReplaceOpen,
17744
+ selectedElement,
17745
+ tableEditorState: s.tableEditorState,
17746
+ editTemplateMode: s.editTemplateMode,
17747
+ newShapeType: s.newShapeType,
17748
+ activeTool: s.activeTool,
17749
+ drawingColor: s.drawingColor,
17750
+ drawingWidth: s.drawingWidth,
17751
+ clipboardPayload: s.clipboardPayload,
17752
+ onSetMode,
17753
+ onToggleSidebar: () => s.setIsSlidesPaneOpen((p) => !p),
17754
+ onToggleInspector: () => s.setIsInspectorPaneOpen((p) => !p),
17755
+ onOpenAnimationPanel: () => {
17756
+ s.setIsInspectorPaneOpen(true);
17757
+ s.setSidebarPanelMode("properties");
17758
+ },
17759
+ onAddAnimation: handleAddAnimation,
17760
+ onRemoveAnimation: handleRemoveAnimation,
17761
+ onToggleCompactToolbar: () => s.setIsCompactToolbarOpen((p) => !p),
17762
+ onSetToolbarSection: s.setToolbarSection,
17763
+ onZoomIn: zoom.handleZoomIn,
17764
+ onZoomOut: zoom.handleZoomOut,
17765
+ onZoomToFit: zoom.handleZoomToFit,
17766
+ onUndo: history.handleUndo,
17767
+ onRedo: history.handleRedo,
17768
+ onToggleFindReplace: () => findReplace.setFindReplaceOpen(!findReplace.findReplaceOpen),
17769
+ onSetNewShapeType: s.setNewShapeType,
17770
+ onAddTextBox: insertHandlers.handleAddTextBox,
17771
+ onAddShape: insertHandlers.handleAddShape,
17772
+ onAddTable: insertHandlers.handleAddTable,
17773
+ onAddChart: insertHandlers.handleAddChart,
17774
+ onAddSmartArt: () => dialogs.setIsSmartArtDialogOpen(true),
17775
+ onAddEquation: () => {
17776
+ dialogs.setEditingEquationOmml(null);
17777
+ dialogs.setIsEquationDialogOpen(true);
17778
+ },
17779
+ onAddActionButton: insertHandlers.handleAddActionButton,
17780
+ onInsertField: insertHandlers.handleInsertField,
17781
+ onOpenHeaderFooter,
17782
+ onOpenImagePicker: () => s.imageInputRef.current?.click(),
17783
+ onOpenMediaPicker: () => s.mediaInputRef.current?.click(),
17784
+ onSetActiveTool: s.setActiveTool,
17785
+ onSetDrawingColor: s.setDrawingColor,
17786
+ onSetDrawingWidth: s.setDrawingWidth,
17787
+ onSetEditTemplateMode: s.setEditTemplateMode,
17788
+ spellCheckEnabled: s.spellCheckEnabled,
17789
+ showGrid: s.showGrid,
17790
+ showRulers: s.showRulers,
17791
+ snapToGrid: s.snapToGrid,
17792
+ snapToShape: s.snapToShape,
17793
+ onSetSpellCheckEnabled: s.setSpellCheckEnabled,
17794
+ onSetShowGrid: s.setShowGrid,
17795
+ onSetShowRulers: s.setShowRulers,
17796
+ onSetSnapToGrid: s.setSnapToGrid,
17797
+ onSetSnapToShape: s.setSnapToShape,
17798
+ onAddGuide: dialogs.handleAddGuide,
17799
+ onAlignElements: manipulation.handleAlignElements,
17800
+ onDistributeElements: manipulation.handleDistributeElements,
17801
+ canDistribute: manipulation.canDistribute,
17802
+ onCopy: manipulation.handleCopy,
17803
+ onCut: manipulation.handleCut,
17804
+ onPaste: manipulation.handlePaste,
17805
+ onFlip: manipulation.handleFlip,
17806
+ onMoveLayer: manipulation.handleMoveLayer,
17807
+ onMoveLayerToEdge: manipulation.handleMoveLayerToEdge,
17808
+ onDuplicate: manipulation.handleDuplicate,
17809
+ onDelete: manipulation.handleDelete,
17810
+ onExportPng: exportHandlers.handleExportPng,
17811
+ onExportPdf: exportHandlers.handleExportPdf,
17812
+ onExportVideo: exportHandlers.handleExportVideo,
17813
+ onExportGif: exportHandlers.handleExportGif,
17814
+ onPackageForSharing: exportHandlers.handlePackageForSharing,
17815
+ onOpenFile,
17816
+ onOpenRecentFile,
17817
+ onCreatePresentation: (templateId) => {
17818
+ s.setSlides(createBackstagePresentation(templateId));
17819
+ s.setActiveSlideIndex(0);
17820
+ s.setSelectedElementId(null);
17821
+ s.setSelectedElementIds([]);
17822
+ s.setTemplateElementsBySlideId({});
17823
+ s.setIsDirty(true);
17824
+ },
17825
+ onOpenShareDialog,
17826
+ onSaveAsPptx: exportHandlers.handleSaveAsPptx,
17827
+ onSaveAsPpsx: exportHandlers.handleSaveAsPpsx,
17828
+ onSaveAsPptm: exportHandlers.handleSaveAsPptm,
17829
+ hasMacros: s.hasMacros,
17830
+ onCopySlideAsImage: exportHandlers.handleCopySlideAsImage,
17831
+ onPrint: printHandlers.handlePrint,
17832
+ onToggleShortcuts: () => s.setIsShortcutHelpOpen((p) => !p),
17833
+ onOpenSettings,
17834
+ onRunAccessibilityCheck: dialogs.handleRunAccessibilityCheck,
17835
+ onToggleSlideSorter: () => s.setShowSlideSorter((p) => !p),
17836
+ onUpdateTextStyle: ops.updateSelectedTextStyle,
17837
+ onTransformTextCase: ops.updateSelectedTextCase,
17838
+ isOverflowMenuOpen: s.isOverflowMenuOpen,
17839
+ onSetOverflowMenuOpen: s.setIsOverflowMenuOpen,
17840
+ layoutOptions: scopedLayoutOptions,
17841
+ onInsertSlideFromLayout: slideOps.handleInsertSlideFromLayout,
17842
+ customShows: s.customShows,
17843
+ activeCustomShowId: s.activeCustomShowId,
17844
+ onSetActiveCustomShowId: s.setActiveCustomShowId,
17845
+ onCreateCustomShow: dialogs.handleCreateCustomShow,
17846
+ onRenameActiveCustomShow: dialogs.handleRenameActiveCustomShow,
17847
+ onDeleteActiveCustomShow: dialogs.handleDeleteActiveCustomShow,
17848
+ onToggleCurrentSlideInActiveShow: dialogs.handleToggleCurrentSlideInActiveShow,
17849
+ isCurrentSlideInActiveShow: dialogs.isCurrentSlideInActiveShow,
17850
+ onEnterMasterView: dialogs.handleEnterMasterView,
17851
+ onCloseMasterView: dialogs.handleCloseMasterView,
17852
+ onToggleVersionHistory: () => propertyHandlers.setIsVersionHistoryOpen((p) => !p),
17853
+ onOpenPasswordProtection: () => dialogs.setIsPasswordDialogOpen(true),
17854
+ onOpenDocumentProperties: () => dialogs.setIsDocPropsDialogOpen(true),
17855
+ onOpenFontEmbedding: () => dialogs.setIsFontEmbeddingOpen(true),
17856
+ onOpenDigitalSignatures: () => dialogs.setIsDigitalSigDialogOpen(true),
17857
+ onEnterPresenterView,
17858
+ onEnterRehearsalMode,
17859
+ onToggleThemeEditor: () => s.setIsThemeEditorOpen((p) => !p),
17860
+ isThemeEditorOpen: s.isThemeEditorOpen,
17861
+ onToggleThemeGallery: () => s.setIsThemeGalleryOpen((p) => !p),
17862
+ isThemeGalleryOpen: s.isThemeGalleryOpen,
17863
+ onCompare: propertyHandlers.handleCompare,
17864
+ onToggleComments: () => {
17865
+ s.setSidebarPanelMode("comments");
17866
+ if (!s.isInspectorPaneOpen) {
17867
+ s.setIsInspectorPaneOpen(true);
17868
+ }
17869
+ },
17870
+ isCommentsPanelOpen: s.isInspectorPaneOpen,
17871
+ slideCommentCount: activeSlide?.comments?.length ?? 0,
17872
+ formatPainterActive: s.formatPainterActive,
17873
+ canActivateFormatPainter: hasCopyableFormat(selectedElement),
17874
+ onToggleFormatPainter: () => s.setFormatPainterActive((p) => !p),
17875
+ isSelectionPaneOpen: s.isSelectionPaneOpen,
17876
+ onToggleSelectionPane: () => s.setIsSelectionPaneOpen((p) => !p),
17877
+ eyedropperActive: s.eyedropperActive,
17878
+ onToggleEyedropper: () => s.setEyedropperActive((p) => !p),
17879
+ onOpenSetUpSlideShow: () => dialogs.setIsSetUpSlideShowOpen(true),
17880
+ onOpenBroadcastDialog: () => dialogs.setIsBroadcastDialogOpen(true),
17881
+ onToggleSubtitles: dialogs.handleToggleSubtitles,
17882
+ showSubtitles: Boolean(s.presentationProperties.showSubtitles),
17883
+ activeSlide,
17884
+ onTransitionChange: handleTransitionChange,
17885
+ onApplyTransitionToAll: handleApplyTransitionToAll,
17886
+ hiddenActions
17887
+ };
17888
+ }
17889
+ function useViewerBuildingBlocksCore(input) {
17890
+ const { content} = input;
17891
+ const state = useViewerState();
17892
+ const {
17893
+ containerRef,
17894
+ mode,
17895
+ slides,
17896
+ canvasSize,
17897
+ loading,
17898
+ error,
17899
+ activeSlideIndex,
17900
+ selectedElementId,
17901
+ selectedElementIds,
17902
+ templateElementsBySlideId,
17903
+ activeSlide,
17904
+ selectedElement
17905
+ } = state;
17906
+ const hasActivePointerInteraction = useCallback(
17907
+ () => Boolean(
17908
+ state.dragStateRef.current || state.resizeStateRef.current || state.marqueeStateRef.current || state.shapeAdjustmentDragStateRef.current || state.isDrawingRef.current
17909
+ ),
17910
+ [
17911
+ state.dragStateRef,
17912
+ state.resizeStateRef,
17913
+ state.marqueeStateRef,
17914
+ state.shapeAdjustmentDragStateRef,
17915
+ state.isDrawingRef
17916
+ ]
17917
+ );
17918
+ const zoom = useZoomViewport({ canvasSize, selectedElements: state.selectedElements });
17919
+ const history = useEditorHistory({
17920
+ slides,
17921
+ canvasSize,
17922
+ activeSlideIndex,
17923
+ templateElementsBySlideId,
17924
+ editTemplateMode: state.editTemplateMode,
17925
+ headerFooter: state.headerFooter,
17926
+ loading,
17927
+ error,
17928
+ hasActivePointerInteraction,
17929
+ pointerCommitNonce: state.pointerCommitNonce,
17930
+ setSlides: state.setSlides,
17931
+ setCanvasSize: state.setCanvasSize,
17932
+ setActiveSlideIndex: state.setActiveSlideIndex,
17933
+ setTemplateElementsBySlideId: state.setTemplateElementsBySlideId,
17934
+ setSelectedElementId: state.setSelectedElementId,
17935
+ setSelectedElementIds: state.setSelectedElementIds,
17936
+ setEditTemplateMode: state.setEditTemplateMode,
17937
+ setHeaderFooter: state.setHeaderFooter
17938
+ });
17939
+ const { gridSpacingPx, visibleSlideIndexes, masterPseudoSlide } = useDerivedSlideState({
17940
+ slides,
17941
+ sections: state.sections,
17942
+ customShows: state.customShows,
17943
+ activeCustomShowId: state.activeCustomShowId,
17944
+ mode,
17945
+ activeLayout: state.activeLayout,
17946
+ activeMaster: state.activeMaster,
17947
+ presentationGridSpacing: state.presentationProperties.gridSpacing
17948
+ });
17949
+ const { presentation, annotations, actionSoundHandlerRef } = usePresentationSetup({
17950
+ mode,
17951
+ slides,
17952
+ visibleSlideIndexes,
17953
+ activeSlideIndex,
17954
+ containerRef,
17955
+ content,
17956
+ mediaDataUrls: state.mediaDataUrls,
17957
+ presentationProperties: state.presentationProperties,
17958
+ setMode: state.setMode,
17959
+ setActiveSlideIndex: state.setActiveSlideIndex,
17960
+ setSlides: state.setSlides,
17961
+ history
17962
+ });
17963
+ return {
17964
+ state,
17965
+ mode,
17966
+ slides,
17967
+ loading,
17968
+ error,
17969
+ activeSlideIndex,
17970
+ activeSlide,
17971
+ selectedElement,
17972
+ zoom,
17973
+ history,
17974
+ presentation,
17975
+ annotations,
17976
+ actionSoundHandlerRef,
17977
+ masterPseudoSlide,
17978
+ gridSpacingPx
17979
+ };
17980
+ }
17981
+ function useViewerBuildingBlocksState(input) {
17982
+ const { core, content, canEdit, filePath, autosaveEnabled, userName, handle, setContent } = input;
17983
+ const {
17984
+ onContentChange,
17985
+ onDirtyChange,
17986
+ onActiveSlideChange,
17987
+ onModeChange,
17988
+ onZoomChange,
17989
+ onSelectionChange,
17990
+ onSlideCountChange
17991
+ } = input;
17992
+ const {
17993
+ state,
17994
+ mode,
17995
+ slides,
17996
+ loading,
17997
+ error,
17998
+ activeSlideIndex,
17999
+ activeSlide,
18000
+ selectedElement,
18001
+ zoom,
18002
+ history,
18003
+ presentation,
18004
+ annotations,
18005
+ actionSoundHandlerRef,
18006
+ gridSpacingPx
18007
+ } = core;
18008
+ const dialogs = useViewerDialogs({
18009
+ mode,
18010
+ slides,
18011
+ activeSlide,
18012
+ canvasSize: state.canvasSize,
18013
+ containerRef: state.containerRef,
18014
+ customShows: state.customShows,
18015
+ activeCustomShowId: state.activeCustomShowId,
18016
+ setCustomShows: state.setCustomShows,
18017
+ setActiveCustomShowId: state.setActiveCustomShowId,
18018
+ setGuides: state.setGuides,
18019
+ setPresentationProperties: state.setPresentationProperties,
18020
+ setAccessibilityIssues: state.setAccessibilityIssues,
18021
+ setIsAccessibilityPanelOpen: state.setIsAccessibilityPanelOpen,
18022
+ setMode: state.setMode,
18023
+ setPreMasterMode: state.setPreMasterMode,
18024
+ setActiveMasterIndex: state.setActiveMasterIndex,
18025
+ setActiveLayoutIndex: state.setActiveLayoutIndex,
18026
+ setSelectedElementId: state.setSelectedElementId,
18027
+ setSelectedElementIds: state.setSelectedElementIds,
18028
+ preMasterMode: state.preMasterMode,
18029
+ hasDigitalSignatures: state.hasDigitalSignatures,
18030
+ isDirty: state.isDirty,
18031
+ history
18032
+ });
18033
+ useEffect(() => {
18034
+ state.setSelectedElementId(null);
18035
+ state.setSelectedElementIds([]);
18036
+ state.setInlineEditingElementId(null);
18037
+ }, [activeSlideIndex]);
18038
+ const editorOps = useEditorOperations({
18039
+ state,
18040
+ history,
18041
+ zoom,
18042
+ mode,
18043
+ canEdit,
18044
+ slides,
18045
+ activeSlide,
18046
+ activeSlideIndex,
18047
+ selectedElement,
18048
+ selectedElementId: state.selectedElementId,
18049
+ selectedElementIds: state.selectedElementIds,
18050
+ canvasSize: state.canvasSize,
18051
+ dialogs,
18052
+ presentation,
18053
+ userName,
18054
+ handlerRef: actionSoundHandlerRef
18055
+ });
18056
+ const {
18057
+ exportHandlers,
18058
+ printHandlers,
18059
+ propertyHandlers,
18060
+ handleSetMode,
18061
+ handleEnterPresenterView,
18062
+ handleEnterRehearsalMode,
18063
+ autosaveStatus
18064
+ } = useViewerIntegration({
18065
+ state,
18066
+ zoom,
18067
+ history,
18068
+ presentation,
18069
+ annotations,
18070
+ actionSoundHandlerRef,
18071
+ editorOps,
18072
+ dialogs,
18073
+ gridSpacingPx,
18074
+ content,
18075
+ filePath,
18076
+ autosaveEnabled,
18077
+ canEdit,
18078
+ mode,
18079
+ slides,
18080
+ activeSlide,
18081
+ activeSlideIndex,
18082
+ canvasSize: state.canvasSize,
18083
+ loading,
18084
+ error,
18085
+ ref: handle ?? null,
18086
+ setContent,
18087
+ onContentChange,
18088
+ onDirtyChange,
18089
+ onActiveSlideChange,
18090
+ onModeChange,
18091
+ onZoomChange,
18092
+ onSelectionChange,
18093
+ onSlideCountChange
18094
+ });
18095
+ return {
18096
+ dialogs,
18097
+ editorOps,
18098
+ exportHandlers,
18099
+ printHandlers,
18100
+ propertyHandlers,
18101
+ handleSetMode,
18102
+ handleEnterPresenterView,
18103
+ handleEnterRehearsalMode,
18104
+ autosaveStatus
18105
+ };
18106
+ }
18107
+
18108
+ // src/viewer/hooks/useViewerBuildingBlocks.ts
18109
+ function useViewerBuildingBlocks(input) {
18110
+ const {
18111
+ content: incomingContent,
18112
+ canEdit = false,
18113
+ filePath,
18114
+ fileName,
18115
+ autosaveEnabled = true,
18116
+ userName,
18117
+ hiddenActions,
18118
+ handle,
18119
+ onContentChange,
18120
+ onDirtyChange,
18121
+ onActiveSlideChange,
18122
+ onModeChange,
18123
+ onZoomChange,
18124
+ onSelectionChange,
18125
+ onSlideCountChange,
18126
+ onOpenSettings,
18127
+ onOpenHeaderFooter,
18128
+ onOpenShareDialog
18129
+ } = input;
18130
+ const [content, setContent] = useState(incomingContent ?? null);
18131
+ useEffect(() => {
18132
+ setContent(incomingContent ?? null);
18133
+ }, [incomingContent]);
18134
+ const onOpenFile = useCallback(() => {
18135
+ void (async () => {
18136
+ const picked = await openPptxFile();
18137
+ if (picked) {
18138
+ setContent(picked.buffer);
18139
+ }
18140
+ })();
18141
+ }, []);
18142
+ const onOpenRecentFile = useCallback((key) => {
18143
+ void (async () => {
18144
+ const bytes = await readBackstageRecentFile(key);
18145
+ if (bytes) {
18146
+ setContent(bytes);
18147
+ }
18148
+ })();
18149
+ }, []);
18150
+ const core = useViewerBuildingBlocksCore({ content});
18151
+ const {
18152
+ state,
18153
+ mode,
18154
+ slides,
18155
+ loading,
18156
+ error,
18157
+ activeSlideIndex,
18158
+ activeSlide,
18159
+ selectedElement,
18160
+ zoom,
18161
+ history,
18162
+ presentation,
18163
+ masterPseudoSlide,
18164
+ gridSpacingPx
18165
+ } = core;
18166
+ const {
18167
+ dialogs,
18168
+ editorOps,
18169
+ exportHandlers,
18170
+ printHandlers,
18171
+ propertyHandlers,
18172
+ handleSetMode,
18173
+ handleEnterPresenterView,
18174
+ handleEnterRehearsalMode,
18175
+ autosaveStatus
18176
+ } = useViewerBuildingBlocksState({
18177
+ core,
18178
+ content,
18179
+ canEdit,
18180
+ filePath,
18181
+ autosaveEnabled,
18182
+ userName,
18183
+ handle,
18184
+ setContent,
18185
+ onContentChange,
18186
+ onDirtyChange,
18187
+ onActiveSlideChange,
18188
+ onModeChange,
18189
+ onZoomChange,
18190
+ onSelectionChange,
18191
+ onSlideCountChange
18192
+ });
18193
+ const toolbarProps = buildToolbarProps({
18194
+ mode,
18195
+ canEdit,
18196
+ state,
18197
+ selectedElement,
18198
+ activeSlide,
18199
+ zoom,
18200
+ history,
18201
+ findReplace: editorOps.findReplace,
18202
+ manipulation: editorOps.manipulation,
18203
+ insertHandlers: editorOps.insertHandlers,
18204
+ exportHandlers,
18205
+ printHandlers,
18206
+ propertyHandlers,
18207
+ dialogs,
18208
+ slideOps: editorOps.slideOps,
18209
+ ops: editorOps.ops,
18210
+ onSetMode: handleSetMode,
18211
+ onEnterPresenterView: handleEnterPresenterView,
18212
+ onEnterRehearsalMode: handleEnterRehearsalMode,
18213
+ onOpenSettings,
18214
+ onOpenHeaderFooter,
18215
+ onOpenShareDialog,
18216
+ onOpenFile,
18217
+ onOpenRecentFile,
18218
+ fileName,
18219
+ hiddenActions
18220
+ });
18221
+ const canvasProps = buildCanvasProps({
18222
+ mode,
18223
+ canEdit,
18224
+ slides,
18225
+ activeSlide,
18226
+ masterPseudoSlide,
18227
+ templateElements: state.templateElements,
18228
+ canvasSize: state.canvasSize,
18229
+ activeSlideIndex,
18230
+ gridSpacingPx,
18231
+ zoom,
18232
+ state,
18233
+ selectedElement,
18234
+ canvasHandlers: editorOps.canvasHandlers,
18235
+ insertHandlers: editorOps.insertHandlers,
18236
+ tableOps: editorOps.tableOps,
18237
+ presentation,
18238
+ findResults: editorOps.findReplace.findResults,
18239
+ findResultIndex: editorOps.findReplace.findResultIndex
18240
+ });
18241
+ return { toolbarProps, canvasProps, mode, loading, error, autosaveStatus };
18242
+ }
17399
18243
  var LEFT_MIN = 120;
17400
18244
  var LEFT_MAX = 400;
17401
18245
  var LEFT_DEFAULT = 180;
@@ -17466,4 +18310,4 @@ function useSwipeNavigation(input) {
17466
18310
  return { onTouchStart, onTouchEnd };
17467
18311
  }
17468
18312
 
17469
- export { ACTION_VERB_MAP, ANIMATION_PRESET_OPTIONS, DEFAULT_FILL_COLOR, DEFAULT_FONT_FAMILY, DEFAULT_STROKE_COLOR, DEFAULT_TEXT_COLOR, DEFAULT_TEXT_FONT_SIZE, GRID_SIZE, HYPERLINK_COLOR, MIN_ELEMENT_SIZE, MIN_TOUCH_TARGET, SHAPE_PRESETS, SHORTCUT_REFERENCE_ITEMS, SLIDE_NAV_THUMBNAIL_WIDTH, SLIDE_TRANSITION_OPTIONS, SmartArtNodeText, TOOLBAR_SECTIONS, build3DExtrusionData2 as build3DExtrusionData, buildLineGlowFilter, buildLineShadowCss, buildReactChartViewModel, buildTextBody3DSceneStyle2 as buildTextBody3DSceneStyle, buildTree, chevronPoints, clearAudienceContent, cn, colour, computeToolbarVisibility, detectTargetType, fitFontSize, gearPath, getAnimationInitialStyle2 as getAnimationInitialStyle, getConnectorPathGeometry, getCropShapeClipPath, getDuotoneColors, getImageRenderStyle, getImageTilingStyle, getShapeVisualStyle, getTextLayoutStyle, getTextStyleForElement, getTextWarpStyle, hasDagDuotoneEffect, isAudienceTab, isConnectorOrLineElement, isImageTiled, layoutToCategory, loadAudienceContent, nodeOpacity, parseAudienceNonce, parseEmailUrl, parseSlideFromUrl, renderAccentProcess, renderAlternatingFlow, renderChartElement, renderConnectorMarker, renderDagDuotoneSvgFilter, renderDescendingProcess, renderGroupedList, renderHorizontalPictureList, renderMediaElement, renderPictureAccentList, renderPyramidList, renderStepDownProcess, renderTableElement, renderTextSegments, renderToCanvas, renderVectorShape, renderVerticalBlockList, renderVerticalChevronList, resolvePalette, resolveSmartArtDataPalette, resolveStyle, shouldRenderFallbackLabel, smartArtNodeGroupProps, startPreviewAnimation, stopPreviewAnimation, storeAudienceContent, styleShadow, styleStroke, treeDepth, treeWidth, truncate, useAnimationPlayback, useAnnotationHandlers, useAudienceMode, useAutosave, useBroadcastFollower, useCanvasInteractions, useClipboardHandlers, useCollaborativeHistory, useCollaborativeState, useComments, useContentLifecycle, useDerivedElementState, useDerivedSlideState, useDialogCustomShows, useEditorHistory, useEditorOperations, useElementManipulation, useElementOperations, useExportHandlers, useExportSaveAs, useFindReplace, useFollowMode, useFontInjection, useGroupAlignLayerHandlers, useIOHandlers, useInsertElements, useIsMobile, useKeyboardInsets, useKeyboardShortcutWiring, useKeyboardShortcuts, useLayoutSwitching, useLoadContent, useMergeShapesHandler, useModalDismissDrag, usePointerHandlers, usePresenceTracking, usePresentationAnnotations, usePresentationKeyboard, usePresentationMode, usePresentationSetup, usePresenterWindow, usePrintHandlers, usePropertyHandlers, useRecoveryDetection, useReducedMotion, useRehearsalTimings, useResizablePanels, useSectionOperations, useSerialize, useSheetDismissDrag, useSlideManagement, useSlideNavigation, useSwipeNavigation, useTableOperations, useThemeHandlers, useThemeSwitching, useToolbarVisibility, useTouchGestures, useViewerCoreState, useViewerDialogs, useViewerIntegration, useViewerState, useViewerUIState, useVirtualizedSlides, useYjsDocumentSync, useYjsProvider, useZoomNavigation, useZoomViewport, wrapChrome };
18313
+ export { ACTION_VERB_MAP, ANIMATION_PRESET_OPTIONS, DEFAULT_FILL_COLOR, DEFAULT_FONT_FAMILY, DEFAULT_STROKE_COLOR, DEFAULT_TEXT_COLOR, DEFAULT_TEXT_FONT_SIZE, GRID_SIZE, HYPERLINK_COLOR, MIN_ELEMENT_SIZE, MIN_TOUCH_TARGET, SHAPE_PRESETS, SHORTCUT_REFERENCE_ITEMS, SLIDE_NAV_THUMBNAIL_WIDTH, SLIDE_TRANSITION_OPTIONS, SmartArtNodeText, TOOLBAR_SECTIONS, build3DExtrusionData2 as build3DExtrusionData, buildLineGlowFilter, buildLineShadowCss, buildReactChartViewModel, buildTextBody3DSceneStyle2 as buildTextBody3DSceneStyle, buildTree, chevronPoints, clearAudienceContent, cn, colour, computeToolbarVisibility, detectTargetType, fitFontSize, gearPath, getAnimationInitialStyle2 as getAnimationInitialStyle, getConnectorPathGeometry, getCropShapeClipPath, getDuotoneColors, getImageRenderStyle, getImageTilingStyle, getShapeVisualStyle, getTextLayoutStyle, getTextStyleForElement, getTextWarpStyle, hasDagDuotoneEffect, isAudienceTab, isConnectorOrLineElement, isImageTiled, layoutToCategory, loadAudienceContent, nodeOpacity, parseAudienceNonce, parseEmailUrl, parseSlideFromUrl, renderAccentProcess, renderAlternatingFlow, renderChartElement, renderConnectorMarker, renderDagDuotoneSvgFilter, renderDescendingProcess, renderGroupedList, renderHorizontalPictureList, renderMediaElement, renderPictureAccentList, renderPyramidList, renderStepDownProcess, renderTableElement, renderTextSegments, renderToCanvas, renderVectorShape, renderVerticalBlockList, renderVerticalChevronList, resolvePalette, resolveSmartArtDataPalette, resolveStyle, scopeLayoutOptionsToActiveSlide, shouldRenderFallbackLabel, smartArtNodeGroupProps, startPreviewAnimation, stopPreviewAnimation, storeAudienceContent, styleShadow, styleStroke, treeDepth, treeWidth, truncate, useAnimationPlayback, useAnnotationHandlers, useAudienceMode, useAutosave, useBroadcastFollower, useCanvasInteractions, useClipboardHandlers, useCollaborativeHistory, useCollaborativeState, useComments, useContentLifecycle, useDerivedElementState, useDerivedSlideState, useDialogCustomShows, useEditorHistory, useEditorOperations, useElementManipulation, useElementOperations, useExportHandlers, useExportSaveAs, useFindReplace, useFollowMode, useFontInjection, useGroupAlignLayerHandlers, useIOHandlers, useInsertElements, useIsMobile, useKeyboardInsets, useKeyboardShortcutWiring, useKeyboardShortcuts, useLayoutSwitching, useLoadContent, useMergeShapesHandler, useModalDismissDrag, usePointerHandlers, usePresenceTracking, usePresentationAnnotations, usePresentationKeyboard, usePresentationMode, usePresentationSetup, usePresenterWindow, usePrintHandlers, usePropertyHandlers, useRecoveryDetection, useReducedMotion, useRehearsalTimings, useResizablePanels, useSectionOperations, useSerialize, useSheetDismissDrag, useSlideManagement, useSlideNavigation, useSwipeNavigation, useTableOperations, useThemeHandlers, useThemeSwitching, useToolbarVisibility, useTouchGestures, useViewerBuildingBlocks, useViewerCoreState, useViewerDialogs, useViewerIntegration, useViewerState, useViewerUIState, useVirtualizedSlides, useYjsDocumentSync, useYjsProvider, useZoomNavigation, useZoomViewport, wrapChrome };