pptx-react-viewer 1.17.0 → 1.18.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 (120) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/README.md +1 -1
  3. package/dist/{Model3DScene-YA4F63DT.js → Model3DScene-GVWQ6SOM.js} +3 -3
  4. package/dist/Model3DScene-GVWQ6SOM.js.br +0 -0
  5. package/dist/Model3DScene-GVWQ6SOM.js.gz +0 -0
  6. package/dist/{Model3DScene-QHDYQXL2.mjs → Model3DScene-JGVLIDLD.mjs} +2 -2
  7. package/dist/Model3DScene-JGVLIDLD.mjs.br +0 -0
  8. package/dist/Model3DScene-JGVLIDLD.mjs.gz +0 -0
  9. package/dist/{SurfaceChart3DScene-GUAS2NWQ.mjs → SurfaceChart3DScene-DBWSDSKI.mjs} +2 -2
  10. package/dist/SurfaceChart3DScene-DBWSDSKI.mjs.br +0 -0
  11. package/dist/SurfaceChart3DScene-DBWSDSKI.mjs.gz +0 -0
  12. package/dist/{SurfaceChart3DScene-TGNJHTJQ.js → SurfaceChart3DScene-ZOTOHOIE.js} +3 -3
  13. package/dist/SurfaceChart3DScene-ZOTOHOIE.js.br +0 -0
  14. package/dist/SurfaceChart3DScene-ZOTOHOIE.js.gz +0 -0
  15. package/dist/{chunk-XW5OMXW6.js → chunk-73ST7AC6.js} +2269 -1651
  16. package/dist/chunk-73ST7AC6.js.br +0 -0
  17. package/dist/chunk-73ST7AC6.js.gz +0 -0
  18. package/dist/{chunk-WGLJ32FW.js → chunk-AALZCSY4.js} +8 -1
  19. package/dist/chunk-AALZCSY4.js.br +0 -0
  20. package/dist/chunk-AALZCSY4.js.gz +0 -0
  21. package/dist/{chunk-MGLRKGCH.js → chunk-EXDUEXTO.js} +26101 -15360
  22. package/dist/chunk-EXDUEXTO.js.br +0 -0
  23. package/dist/chunk-EXDUEXTO.js.gz +0 -0
  24. package/dist/{chunk-JWS3RQKN.js → chunk-HBXPK572.js} +584 -144
  25. package/dist/chunk-HBXPK572.js.br +0 -0
  26. package/dist/chunk-HBXPK572.js.gz +0 -0
  27. package/dist/{chunk-G22EWPLH.mjs → chunk-HHTZQHKZ.mjs} +532 -119
  28. package/dist/chunk-HHTZQHKZ.mjs.br +0 -0
  29. package/dist/chunk-HHTZQHKZ.mjs.gz +0 -0
  30. package/dist/{chunk-3P6O7ZDM.js → chunk-JDRC3PSY.js} +655 -491
  31. package/dist/chunk-JDRC3PSY.js.br +0 -0
  32. package/dist/chunk-JDRC3PSY.js.gz +0 -0
  33. package/dist/{chunk-LNSHC2Z5.mjs → chunk-KMLIWCNL.mjs} +1460 -842
  34. package/dist/chunk-KMLIWCNL.mjs.br +0 -0
  35. package/dist/chunk-KMLIWCNL.mjs.gz +0 -0
  36. package/dist/{chunk-HJQZJ3VE.mjs → chunk-RIRK64DM.mjs} +8 -1
  37. package/dist/chunk-RIRK64DM.mjs.br +0 -0
  38. package/dist/chunk-RIRK64DM.mjs.gz +0 -0
  39. package/dist/{chunk-XRYREYXC.mjs → chunk-SBNTEQUA.mjs} +26062 -15360
  40. package/dist/chunk-SBNTEQUA.mjs.br +0 -0
  41. package/dist/chunk-SBNTEQUA.mjs.gz +0 -0
  42. package/dist/{chunk-LLHFNGAF.mjs → chunk-Z4MDCPAY.mjs} +223 -59
  43. package/dist/chunk-Z4MDCPAY.mjs.br +0 -0
  44. package/dist/chunk-Z4MDCPAY.mjs.gz +0 -0
  45. package/dist/{dist-2ZAH7U6U.js → dist-KRRXYUGI.js} +663 -507
  46. package/dist/dist-KRRXYUGI.js.br +0 -0
  47. package/dist/dist-KRRXYUGI.js.gz +0 -0
  48. package/dist/dist-N6PAPXK6.mjs +2 -0
  49. package/dist/dist-N6PAPXK6.mjs.br +0 -0
  50. package/dist/dist-N6PAPXK6.mjs.gz +0 -0
  51. package/dist/hooks-unstable.d.ts +484 -117
  52. package/dist/hooks-unstable.d.ts.map +1 -1
  53. package/dist/hooks-unstable.js +75 -75
  54. package/dist/hooks-unstable.js.br +0 -0
  55. package/dist/hooks-unstable.js.gz +0 -0
  56. package/dist/hooks-unstable.mjs +4 -4
  57. package/dist/hooks-unstable.mjs.br +0 -0
  58. package/dist/hooks-unstable.mjs.gz +0 -0
  59. package/dist/i18n.js +3 -3
  60. package/dist/i18n.js.br +0 -0
  61. package/dist/i18n.js.gz +0 -0
  62. package/dist/i18n.mjs +1 -1
  63. package/dist/i18n.mjs.br +0 -0
  64. package/dist/i18n.mjs.gz +0 -0
  65. package/dist/{index-XGt7MZpa.d.ts → index-DmHVR48M.d.ts} +25 -3
  66. package/dist/index-DmHVR48M.d.ts.map +1 -0
  67. package/dist/index.d.ts +412 -117
  68. package/dist/index.d.ts.map +1 -1
  69. package/dist/index.js +19 -19
  70. package/dist/index.js.br +3 -1
  71. package/dist/index.js.gz +0 -0
  72. package/dist/index.mjs +5 -5
  73. package/dist/index.mjs.br +3 -4
  74. package/dist/index.mjs.gz +0 -0
  75. package/dist/pptx-viewer.css +1 -1
  76. package/dist/pptx-viewer.css.br +0 -0
  77. package/dist/pptx-viewer.css.gz +0 -0
  78. package/dist/viewer/index.d.ts +438 -121
  79. package/dist/viewer/index.d.ts.map +1 -1
  80. package/dist/viewer/index.js +24 -20
  81. package/dist/viewer/index.js.br +0 -0
  82. package/dist/viewer/index.js.gz +0 -0
  83. package/dist/viewer/index.mjs +5 -5
  84. package/dist/viewer/index.mjs.br +0 -0
  85. package/dist/viewer/index.mjs.gz +0 -0
  86. package/package.json +1 -1
  87. package/dist/Model3DScene-QHDYQXL2.mjs.br +0 -0
  88. package/dist/Model3DScene-QHDYQXL2.mjs.gz +0 -0
  89. package/dist/Model3DScene-YA4F63DT.js.br +0 -0
  90. package/dist/Model3DScene-YA4F63DT.js.gz +0 -0
  91. package/dist/SurfaceChart3DScene-GUAS2NWQ.mjs.br +0 -0
  92. package/dist/SurfaceChart3DScene-GUAS2NWQ.mjs.gz +0 -0
  93. package/dist/SurfaceChart3DScene-TGNJHTJQ.js.br +0 -0
  94. package/dist/SurfaceChart3DScene-TGNJHTJQ.js.gz +0 -0
  95. package/dist/chunk-3P6O7ZDM.js.br +0 -0
  96. package/dist/chunk-3P6O7ZDM.js.gz +0 -0
  97. package/dist/chunk-G22EWPLH.mjs.br +0 -0
  98. package/dist/chunk-G22EWPLH.mjs.gz +0 -0
  99. package/dist/chunk-HJQZJ3VE.mjs.br +0 -0
  100. package/dist/chunk-HJQZJ3VE.mjs.gz +0 -0
  101. package/dist/chunk-JWS3RQKN.js.br +0 -0
  102. package/dist/chunk-JWS3RQKN.js.gz +0 -0
  103. package/dist/chunk-LLHFNGAF.mjs.br +0 -0
  104. package/dist/chunk-LLHFNGAF.mjs.gz +0 -0
  105. package/dist/chunk-LNSHC2Z5.mjs.br +0 -0
  106. package/dist/chunk-LNSHC2Z5.mjs.gz +0 -0
  107. package/dist/chunk-MGLRKGCH.js.br +0 -0
  108. package/dist/chunk-MGLRKGCH.js.gz +0 -0
  109. package/dist/chunk-WGLJ32FW.js.br +0 -0
  110. package/dist/chunk-WGLJ32FW.js.gz +0 -0
  111. package/dist/chunk-XRYREYXC.mjs.br +0 -0
  112. package/dist/chunk-XRYREYXC.mjs.gz +0 -0
  113. package/dist/chunk-XW5OMXW6.js.br +0 -0
  114. package/dist/chunk-XW5OMXW6.js.gz +0 -0
  115. package/dist/dist-2ZAH7U6U.js.br +0 -0
  116. package/dist/dist-2ZAH7U6U.js.gz +0 -0
  117. package/dist/dist-MXDC6YTS.mjs +0 -2
  118. package/dist/dist-MXDC6YTS.mjs.br +0 -0
  119. package/dist/dist-MXDC6YTS.mjs.gz +0 -0
  120. package/dist/index-XGt7MZpa.d.ts.map +0 -1
Binary file
Binary file
@@ -1,13 +1,12 @@
1
- import { SHAPE_PRESET_DEFS, computeValueRangeForChart, cloneTemplateElementsBySlideId, cloneSlide, countTextSegments, expandTextBuildAnimations, TimelineEngine, TEXT_BUILD_ID_SEP, 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, parseDrawingColor, parseDrawingColorOpacity, getPatternSvg, ooxmlDashToCssBorderStyle, 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, detectTouchDevice, detectOrientation, isMobileViewport, MOBILE_BREAKPOINT, TABLET_BREAKPOINT, remapTextToSegments, copyFormatFromElement, applyFormatToElement, createSyncGate, validateRoomId, resolveTransportForServerUrl, isMixedContentBlocked, CONNECTION_TIMEOUT_MS, BROADCAST_THROTTLE_MS, sanitizeColor, readSlidesFromYDoc, reconcileSlidesInYDoc, LOCAL_SYNC_ORIGIN, observeYDocSlides, createTouchGestureRecognizer, isKeyboardOpen, buildElementClipboardPayload, downloadBlob, groupElements, generateElementId, makeCloneId, alignElements, distributeElements, bringForward, sendBackward, bringToFront, sendToBack, newTableElement, createDefaultChartElement, readViewportMetrics, computeKeyboardInset, derivePresenceList, buildPrintDocument, buildOutlineHtml, buildSlidesHtml, buildNotesHtml, buildHandoutsHtml, createBlankSlide, makeSlideId, cloneHistorySnapshot, secureRandomUuid, resolveTransitionDurationMs, isUrlSafe, isTemplateElement, substituteFieldText, resolveUnderlineDecorationStyle, hasDistinctScriptFonts, buildTextReflectionCss, getTextAlphaOpacity, buildTextRunFilterChain, buildTextShadowCss, apply3dEffects, clampUnitInterval, getRoundRectRadiusPx, tintColor2, shadeColor2, computeColumnBoundaries, getChartStylePalette, computeLayout, valueToY, formatAxisValue, computeLayoutOptions, splitSeriesByAxis, computeValueRange, getSecondaryValueAxis, seriesColor, paletteColor, resolveRegionCode, normalizeValue, sequentialColorScale, canvasToJpegData, downloadDataUrl, pickSupportedMimeType, WEBM_MIME_CANDIDATES, fpsToFrameIntervalMs, segmentFrameCount, sanitizeDownloadFilename, encodeGif, cloneElementForPaste, computeScrollDelta, rerouteConnectorsForMovedElements, applyReroutedConnectors, buildPrintHtmlDocument, convertOmmlToMathMl, sanitizeMathMl, buildTextFillCss, computeResizedColumnWidths, computeResizedRowHeight, DEFAULT_ROW_HEIGHT, 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-G22EWPLH.mjs';
2
- import { translationsEn } from './chunk-HJQZJ3VE.mjs';
3
- import { hasTextProperties, PptxHandler, EncryptedFileError, hasShapeProperties, isImageLikeElement, isCalloutShape, getCalloutLeaderLineGeometry, buildCalloutLeaderLineSvgPath, getCalloutViewBoxBounds, applyThemeToData, THEME_PRESETS, guidePxToEmu, mergeShapes, getSubstituteFontFamily, getPresetShapeClipPath, svgPathToPolygons, polygonsToSvgPath, SvgExporter, rebuildTableStructureInRawXml, updateCellTextStyleInRawXml, updateCellTextInRawXml, updateMergeAttrsInRawXml, elementActionToPptxAction } from './chunk-XRYREYXC.mjs';
1
+ import { SHAPE_PRESET_DEFS, computeValueRangeForChart, cloneTemplateElementsBySlideId, cloneSlide, countTextSegments, expandTextBuildAnimations, TimelineEngine, TEXT_BUILD_ID_SEP, 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, parseDrawingColor, parseDrawingColorOpacity, getPatternSvg, ooxmlDashToCssBorderStyle, 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, detectTouchDevice, detectOrientation, isMobileViewport, MOBILE_BREAKPOINT, TABLET_BREAKPOINT, remapTextToSegments, copyFormatFromElement, applyFormatToElement, createSyncGate, validateRoomId, resolveTransportForServerUrl, isMixedContentBlocked, CONNECTION_TIMEOUT_MS, BROADCAST_THROTTLE_MS, sanitizeColor, readSlidesFromYDoc, reconcileSlidesInYDoc, LOCAL_SYNC_ORIGIN, observeYDocSlides, createTouchGestureRecognizer, isKeyboardOpen, buildElementClipboardPayload, 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, tintColor2, shadeColor2, computeColumnBoundaries, getChartStylePalette, computeLayout, valueToY, formatAxisValue, computeLayoutOptions, splitSeriesByAxis, computeValueRange, getSecondaryValueAxis, seriesColor, paletteColor, resolveRegionCode, normalizeValue, sequentialColorScale, canvasToJpegData, downloadDataUrl, pickSupportedMimeType, WEBM_MIME_CANDIDATES, fpsToFrameIntervalMs, segmentFrameCount, sanitizeDownloadFilename, encodeGif, cloneElementForPaste, computeScrollDelta, rerouteConnectorsForMovedElements, applyReroutedConnectors, buildPrintHtmlDocument, convertOmmlToMathMl, sanitizeMathMl, buildTextFillCss, computeResizedColumnWidths, computeResizedRowHeight, DEFAULT_ROW_HEIGHT, 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-HHTZQHKZ.mjs';
2
+ import { translationsEn } from './chunk-RIRK64DM.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-SBNTEQUA.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';
7
7
  import { twMerge } from 'tailwind-merge';
8
8
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
9
9
  import { useTranslation } from 'react-i18next';
10
- import html2canvasPro from 'html2canvas-pro';
11
10
  import JSZip from 'jszip';
12
11
 
13
12
  // src/viewer/utils/clone.ts
@@ -879,7 +878,10 @@ function openDb() {
879
878
  request.onerror = () => reject(request.error);
880
879
  });
881
880
  }
882
- async function storeAudienceContent(content) {
881
+ async function storeAudienceContent(content, sessionId) {
882
+ if (sessionId) {
883
+ return storePresentationDeck(sessionId, content);
884
+ }
883
885
  const db = await openDb();
884
886
  return new Promise((resolve, reject) => {
885
887
  const tx = db.transaction(STORE_NAME, "readwrite");
@@ -897,7 +899,10 @@ async function storeAudienceContent(content) {
897
899
  };
898
900
  });
899
901
  }
900
- async function loadAudienceContent() {
902
+ async function loadAudienceContent(sessionId) {
903
+ if (sessionId) {
904
+ return loadPresentationDeck(sessionId);
905
+ }
901
906
  try {
902
907
  const db = await openDb();
903
908
  return new Promise((resolve, reject) => {
@@ -935,7 +940,10 @@ async function loadAudienceContent() {
935
940
  return null;
936
941
  }
937
942
  }
938
- async function clearAudienceContent() {
943
+ async function clearAudienceContent(sessionId) {
944
+ if (sessionId) {
945
+ return clearPresentationDeck(sessionId);
946
+ }
939
947
  try {
940
948
  const db = await openDb();
941
949
  return new Promise((resolve) => {
@@ -954,12 +962,12 @@ async function clearAudienceContent() {
954
962
  } catch {
955
963
  }
956
964
  }
957
- var PRESENTER_CHANNEL_NAME = "pptx-viewer-presenter";
958
- var AUDIENCE_HASH = "#pptx-audience";
959
- var PRESENTER_MSG_ORIGIN = "pptx-viewer-presenter";
960
- var AUDIENCE_NONCE_KEY = "nonce";
965
+ var PRESENTER_CHANNEL_NAME = PRESENTATION_CHANNEL_NAME;
966
+ var AUDIENCE_HASH = PRESENTATION_HASH;
967
+ var PRESENTER_MSG_ORIGIN = PRESENTATION_MESSAGE_ORIGIN;
968
+ var AUDIENCE_NONCE_KEY = PRESENTATION_NONCE_KEY;
961
969
  function generateSessionId() {
962
- return secureRandomUuid();
970
+ return createPresentationSessionId();
963
971
  }
964
972
  function parseAudienceNonce() {
965
973
  const hash = window.location.hash;
@@ -977,11 +985,13 @@ function isAudienceTab() {
977
985
  return window.location.hash.startsWith(AUDIENCE_HASH);
978
986
  }
979
987
  function usePresenterWindow(input) {
980
- const { currentSlideIndex, isPresenterMode, content } = input;
988
+ const { isPresenterMode, content, snapshot } = input;
981
989
  const audienceWindowRef = useRef(null);
982
990
  const channelRef = useRef(null);
983
991
  const pollTimerRef = useRef(null);
984
992
  const sessionIdRef = useRef("");
993
+ const snapshotRef = useRef(snapshot);
994
+ snapshotRef.current = snapshot;
985
995
  const getChannel = useCallback(() => {
986
996
  if (!channelRef.current) {
987
997
  channelRef.current = new BroadcastChannel(PRESENTER_CHANNEL_NAME);
@@ -991,6 +1001,10 @@ function usePresenterWindow(input) {
991
1001
  const isAudienceWindowOpen = useCallback(() => {
992
1002
  return audienceWindowRef.current !== null && !audienceWindowRef.current.closed;
993
1003
  }, []);
1004
+ const swapDisplays = useCallback(async () => {
1005
+ const audience = audienceWindowRef.current;
1006
+ return audience && !audience.closed ? swapPresentationWindows(window, audience) : false;
1007
+ }, []);
994
1008
  const syncSlideToAudience = useCallback(
995
1009
  (slideIndex) => {
996
1010
  if (!sessionIdRef.current) {
@@ -1009,7 +1023,25 @@ function usePresenterWindow(input) {
1009
1023
  },
1010
1024
  [getChannel]
1011
1025
  );
1026
+ const syncStateToAudience = useCallback(
1027
+ (nextSnapshot) => {
1028
+ if (!sessionIdRef.current) {
1029
+ return;
1030
+ }
1031
+ try {
1032
+ getChannel().postMessage({
1033
+ origin: PRESENTER_MSG_ORIGIN,
1034
+ type: "presenter-state",
1035
+ sessionId: sessionIdRef.current,
1036
+ snapshot: nextSnapshot
1037
+ });
1038
+ } catch {
1039
+ }
1040
+ },
1041
+ [getChannel]
1042
+ );
1012
1043
  const closeAudienceWindow = useCallback(() => {
1044
+ const closingSessionId = sessionIdRef.current;
1013
1045
  if (sessionIdRef.current) {
1014
1046
  try {
1015
1047
  const exitMsg = {
@@ -1034,23 +1066,32 @@ function usePresenterWindow(input) {
1034
1066
  clearInterval(pollTimerRef.current);
1035
1067
  pollTimerRef.current = null;
1036
1068
  }
1037
- void clearAudienceContent();
1069
+ if (closingSessionId) {
1070
+ void clearAudienceContent(closingSessionId);
1071
+ }
1038
1072
  }, [getChannel]);
1039
1073
  const openAudienceWindow = useCallback(() => {
1040
1074
  if (isAudienceWindowOpen()) {
1041
1075
  closeAudienceWindow();
1042
1076
  }
1043
- const blankWin = window.open("about:blank", "_blank");
1077
+ const blankWin = window.open(
1078
+ "about:blank",
1079
+ "pptx-viewer-audience",
1080
+ "popup=yes,width=1280,height=720"
1081
+ );
1044
1082
  if (!blankWin) {
1045
1083
  return false;
1046
1084
  }
1047
1085
  audienceWindowRef.current = blankWin;
1048
1086
  const sessionId = generateSessionId();
1049
1087
  sessionIdRef.current = sessionId;
1050
- const audienceUrl = new URL(window.location.href);
1051
- const params = new URLSearchParams();
1052
- params.set(AUDIENCE_NONCE_KEY, sessionId);
1053
- audienceUrl.hash = `${AUDIENCE_HASH}&${params.toString()}`;
1088
+ const audienceUrl = buildPresentationAudienceUrl(window.location.href, sessionId);
1089
+ void resolveAudienceScreenPlacement(window).then((placement) => {
1090
+ if (placement && audienceWindowRef.current === blankWin && !blankWin.closed) {
1091
+ placeAudienceWindow(blankWin, placement);
1092
+ }
1093
+ return void 0;
1094
+ });
1054
1095
  const navigateOrClose = (ok) => {
1055
1096
  const win = audienceWindowRef.current;
1056
1097
  if (!win || win.closed) {
@@ -1066,7 +1107,7 @@ function usePresenterWindow(input) {
1066
1107
  return;
1067
1108
  }
1068
1109
  try {
1069
- win.location.replace(audienceUrl.toString());
1110
+ win.location.replace(audienceUrl);
1070
1111
  } catch {
1071
1112
  try {
1072
1113
  win.close();
@@ -1077,11 +1118,10 @@ function usePresenterWindow(input) {
1077
1118
  }
1078
1119
  };
1079
1120
  if (content) {
1080
- void storeAudienceContent(content).then(() => navigateOrClose(true)).catch(() => navigateOrClose(false));
1121
+ void storeAudienceContent(content, sessionId).then(() => navigateOrClose(true)).catch(() => navigateOrClose(false));
1081
1122
  } else {
1082
1123
  navigateOrClose(true);
1083
1124
  }
1084
- window.setTimeout(() => syncSlideToAudience(currentSlideIndex), 1500);
1085
1125
  pollTimerRef.current = setInterval(() => {
1086
1126
  const win = audienceWindowRef.current;
1087
1127
  if (!win || win.closed) {
@@ -1094,12 +1134,28 @@ function usePresenterWindow(input) {
1094
1134
  }
1095
1135
  }, 1e3);
1096
1136
  return true;
1097
- }, [isAudienceWindowOpen, closeAudienceWindow, syncSlideToAudience, currentSlideIndex, content]);
1137
+ }, [isAudienceWindowOpen, closeAudienceWindow, content]);
1138
+ useEffect(() => {
1139
+ let channel;
1140
+ try {
1141
+ channel = getChannel();
1142
+ } catch {
1143
+ return;
1144
+ }
1145
+ const handleMessage = (event) => {
1146
+ const message = event.data;
1147
+ if (isPresentationSessionMessage(message) && message.type === "audience-ready" && message.sessionId === sessionIdRef.current) {
1148
+ syncStateToAudience(snapshotRef.current);
1149
+ }
1150
+ };
1151
+ channel.addEventListener("message", handleMessage);
1152
+ return () => channel.removeEventListener("message", handleMessage);
1153
+ }, [getChannel, syncStateToAudience]);
1098
1154
  useEffect(() => {
1099
1155
  if (isPresenterMode && isAudienceWindowOpen()) {
1100
- syncSlideToAudience(currentSlideIndex);
1156
+ syncStateToAudience(snapshot);
1101
1157
  }
1102
- }, [currentSlideIndex, isPresenterMode, isAudienceWindowOpen, syncSlideToAudience]);
1158
+ }, [snapshot, isPresenterMode, isAudienceWindowOpen, syncStateToAudience]);
1103
1159
  useEffect(() => {
1104
1160
  return () => {
1105
1161
  closeAudienceWindow();
@@ -1116,7 +1172,9 @@ function usePresenterWindow(input) {
1116
1172
  }, [isPresenterMode, closeAudienceWindow]);
1117
1173
  useEffect(() => {
1118
1174
  const handleBeforeUnload = () => {
1119
- void clearAudienceContent();
1175
+ if (sessionIdRef.current) {
1176
+ void clearAudienceContent(sessionIdRef.current);
1177
+ }
1120
1178
  };
1121
1179
  window.addEventListener("beforeunload", handleBeforeUnload);
1122
1180
  return () => window.removeEventListener("beforeunload", handleBeforeUnload);
@@ -1125,11 +1183,13 @@ function usePresenterWindow(input) {
1125
1183
  openAudienceWindow,
1126
1184
  closeAudienceWindow,
1127
1185
  isAudienceWindowOpen,
1128
- syncSlideToAudience
1186
+ syncSlideToAudience,
1187
+ syncStateToAudience,
1188
+ swapDisplays
1129
1189
  };
1130
1190
  }
1131
1191
  function useAudienceMode(input) {
1132
- const { mode: _mode, onSetMode, onSetActiveSlideIndex, containerRef } = input;
1192
+ const { mode: _mode, onSetMode, onSetActiveSlideIndex, containerRef, onSnapshot } = input;
1133
1193
  const initialised = useRef(false);
1134
1194
  useEffect(() => {
1135
1195
  if (!isAudienceTab()) {
@@ -1139,18 +1199,19 @@ function useAudienceMode(input) {
1139
1199
  return;
1140
1200
  }
1141
1201
  initialised.current = true;
1142
- const timer = window.setTimeout(() => {
1143
- try {
1144
- const wrapper = containerRef.current;
1145
- if (wrapper && typeof wrapper.requestFullscreen === "function") {
1146
- void wrapper.requestFullscreen().catch(() => {
1147
- });
1148
- }
1149
- } catch {
1202
+ onSetMode("present");
1203
+ const requestAudienceFullscreen = () => {
1204
+ const wrapper = containerRef.current;
1205
+ if (!document.fullscreenElement && wrapper?.requestFullscreen) {
1206
+ void wrapper.requestFullscreen().catch(() => void 0);
1150
1207
  }
1151
- onSetMode("present");
1152
- }, 800);
1153
- return () => window.clearTimeout(timer);
1208
+ };
1209
+ document.addEventListener("pointerdown", requestAudienceFullscreen, { once: true });
1210
+ document.addEventListener("keydown", requestAudienceFullscreen, { once: true });
1211
+ return () => {
1212
+ document.removeEventListener("pointerdown", requestAudienceFullscreen);
1213
+ document.removeEventListener("keydown", requestAudienceFullscreen);
1214
+ };
1154
1215
  }, [containerRef, onSetMode]);
1155
1216
  useEffect(() => {
1156
1217
  if (!isAudienceTab()) {
@@ -1165,7 +1226,7 @@ function useAudienceMode(input) {
1165
1226
  }
1166
1227
  channel.onmessage = (event) => {
1167
1228
  const data = event.data;
1168
- if (!data || data.origin !== PRESENTER_MSG_ORIGIN) {
1229
+ if (!isPresentationSessionMessage(data) || data.origin !== PRESENTER_MSG_ORIGIN) {
1169
1230
  return;
1170
1231
  }
1171
1232
  if (expectedSessionId && data.sessionId !== expectedSessionId) {
@@ -1174,8 +1235,14 @@ function useAudienceMode(input) {
1174
1235
  if (data.type === "presenter-slide-change") {
1175
1236
  onSetActiveSlideIndex(data.slideIndex);
1176
1237
  }
1238
+ if (data.type === "presenter-state") {
1239
+ onSetActiveSlideIndex(data.snapshot.slideIndex);
1240
+ onSnapshot?.(data.snapshot);
1241
+ }
1177
1242
  if (data.type === "presenter-exit") {
1178
- void clearAudienceContent();
1243
+ if (expectedSessionId) {
1244
+ void clearAudienceContent(expectedSessionId);
1245
+ }
1179
1246
  onSetMode("edit");
1180
1247
  try {
1181
1248
  window.close();
@@ -1183,13 +1250,20 @@ function useAudienceMode(input) {
1183
1250
  }
1184
1251
  }
1185
1252
  };
1253
+ if (expectedSessionId) {
1254
+ channel.postMessage({
1255
+ origin: PRESENTATION_MESSAGE_ORIGIN,
1256
+ type: "audience-ready",
1257
+ sessionId: expectedSessionId
1258
+ });
1259
+ }
1186
1260
  return () => {
1187
1261
  try {
1188
1262
  channel.close();
1189
1263
  } catch {
1190
1264
  }
1191
1265
  };
1192
- }, [onSetMode, onSetActiveSlideIndex]);
1266
+ }, [onSetMode, onSetActiveSlideIndex, onSnapshot]);
1193
1267
  }
1194
1268
 
1195
1269
  // src/viewer/hooks/presentation-mode/keyboard-helpers.ts
@@ -1212,6 +1286,12 @@ function mapKeyToPresentationAction(key, ctrlKey) {
1212
1286
  if (key === "e" || key === "E") {
1213
1287
  return { action: "toggleEraser" };
1214
1288
  }
1289
+ if (key === "b" || key === "B") {
1290
+ return { action: "toggleBlackScreen" };
1291
+ }
1292
+ if (key === "w" || key === "W") {
1293
+ return { action: "toggleWhiteScreen" };
1294
+ }
1215
1295
  if (key === "m" && ctrlKey) {
1216
1296
  return { action: "toggleToolbar" };
1217
1297
  }
@@ -1232,6 +1312,8 @@ function usePresentationKeyboard(input) {
1232
1312
  onToggleEraser,
1233
1313
  onToggleToolbar,
1234
1314
  onTogglePresenterView,
1315
+ onToggleBlackScreen,
1316
+ onToggleWhiteScreen,
1235
1317
  rehearsing,
1236
1318
  recordCurrentSlideTime,
1237
1319
  presentationSlideIndex,
@@ -1276,6 +1358,12 @@ function usePresentationKeyboard(input) {
1276
1358
  case "togglePresenterView":
1277
1359
  onTogglePresenterView?.();
1278
1360
  break;
1361
+ case "toggleBlackScreen":
1362
+ onToggleBlackScreen?.();
1363
+ break;
1364
+ case "toggleWhiteScreen":
1365
+ onToggleWhiteScreen?.();
1366
+ break;
1279
1367
  }
1280
1368
  };
1281
1369
  window.addEventListener("keydown", handleKeyDown);
@@ -1291,6 +1379,8 @@ function usePresentationKeyboard(input) {
1291
1379
  onToggleEraser,
1292
1380
  onToggleToolbar,
1293
1381
  onTogglePresenterView,
1382
+ onToggleBlackScreen,
1383
+ onToggleWhiteScreen,
1294
1384
  rehearsing,
1295
1385
  recordCurrentSlideTime,
1296
1386
  presentationSlideIndex,
@@ -1670,6 +1760,53 @@ function useZoomNavigation(input) {
1670
1760
  clearZoomReturn
1671
1761
  };
1672
1762
  }
1763
+ function usePresenterConsole(slideIndex) {
1764
+ const timerRef = useRef(createPresenterTimer());
1765
+ const [snapshot, setSnapshot] = useState(() => createInitialPresentationSnapshot(slideIndex));
1766
+ const patch = useCallback((value) => {
1767
+ setSnapshot((current) => mergePresentationSnapshot(current, value));
1768
+ }, []);
1769
+ useEffect(() => patch({ slideIndex }), [patch, slideIndex]);
1770
+ useEffect(() => {
1771
+ const timer = window.setInterval(() => {
1772
+ patch({
1773
+ paused: timerRef.current.paused,
1774
+ elapsedMs: presenterElapsed(timerRef.current)
1775
+ });
1776
+ }, 1e3);
1777
+ return () => window.clearInterval(timer);
1778
+ }, [patch]);
1779
+ return {
1780
+ snapshot,
1781
+ applyAudienceSnapshot: setSnapshot,
1782
+ setBlackout: (blackout) => patch({ blackout }),
1783
+ toggleTimer: () => {
1784
+ timerRef.current = togglePresenterTimer(timerRef.current);
1785
+ patch({
1786
+ paused: timerRef.current.paused,
1787
+ elapsedMs: presenterElapsed(timerRef.current)
1788
+ });
1789
+ },
1790
+ resetTimer: () => {
1791
+ timerRef.current = resetPresenterTimer();
1792
+ patch({ paused: false, elapsedMs: 0 });
1793
+ },
1794
+ stepZoom: (direction) => setSnapshot(
1795
+ (current) => mergePresentationSnapshot(current, {
1796
+ zoom: stepPresenterZoom(
1797
+ current.zoom ?? { scale: 1, originX: 0.5, originY: 0.5 },
1798
+ direction
1799
+ )
1800
+ })
1801
+ ),
1802
+ resetZoom: () => patch({ zoom: { scale: 1, originX: 0.5, originY: 0.5 } }),
1803
+ setCaption: (caption) => patch({ caption }),
1804
+ setSubtitlesVisible: (subtitlesVisible) => patch({ subtitlesVisible }),
1805
+ updateSnapshot: patch
1806
+ };
1807
+ }
1808
+
1809
+ // src/viewer/hooks/usePresentationMode.ts
1673
1810
  function usePresentationMode(input) {
1674
1811
  const {
1675
1812
  mode,
@@ -1759,16 +1896,28 @@ function usePresentationMode(input) {
1759
1896
  setShowRehearsalSummary
1760
1897
  });
1761
1898
  const { handleZoomClick, zoomReturnSlideIndex, returnToZoomSlide, clearZoomReturn } = useZoomNavigation({ navigateToSlide });
1762
- const { openAudienceWindow, closeAudienceWindow, isAudienceWindowOpen, syncSlideToAudience } = usePresenterWindow({
1763
- currentSlideIndex: presentationSlideIndex,
1899
+ const presenterConsole = usePresenterConsole(presentationSlideIndex);
1900
+ const {
1901
+ openAudienceWindow,
1902
+ closeAudienceWindow,
1903
+ isAudienceWindowOpen,
1904
+ syncSlideToAudience,
1905
+ syncStateToAudience,
1906
+ swapDisplays
1907
+ } = usePresenterWindow({
1764
1908
  isPresenterMode: presenterMode,
1765
- content
1909
+ content,
1910
+ snapshot: presenterConsole.snapshot
1766
1911
  });
1767
1912
  useAudienceMode({
1768
1913
  mode,
1769
1914
  onSetMode,
1770
- onSetActiveSlideIndex,
1771
- containerRef
1915
+ onSetActiveSlideIndex: (index) => {
1916
+ onSetActiveSlideIndex(index);
1917
+ setPresentationSlideIndex(index);
1918
+ },
1919
+ containerRef,
1920
+ onSnapshot: presenterConsole.applyAudienceSnapshot
1772
1921
  });
1773
1922
  const enterPresentMode = useCallback(() => {
1774
1923
  setPresenterMode(false);
@@ -1825,6 +1974,12 @@ function usePresentationMode(input) {
1825
1974
  onToggleEraser,
1826
1975
  onToggleToolbar,
1827
1976
  onTogglePresenterView: togglePresenterView,
1977
+ onToggleBlackScreen: () => presenterConsole.setBlackout(
1978
+ presenterConsole.snapshot.blackout === "black" ? "none" : "black"
1979
+ ),
1980
+ onToggleWhiteScreen: () => presenterConsole.setBlackout(
1981
+ presenterConsole.snapshot.blackout === "white" ? "none" : "white"
1982
+ ),
1828
1983
  rehearsing,
1829
1984
  recordCurrentSlideTime,
1830
1985
  presentationSlideIndex,
@@ -1945,7 +2100,18 @@ function usePresentationMode(input) {
1945
2100
  openAudienceWindow,
1946
2101
  closeAudienceWindow,
1947
2102
  isAudienceWindowOpen,
1948
- syncSlideToAudience
2103
+ syncSlideToAudience,
2104
+ syncStateToAudience,
2105
+ swapPresenterDisplays: swapDisplays,
2106
+ presenterSnapshot: presenterConsole.snapshot,
2107
+ setPresenterBlackout: presenterConsole.setBlackout,
2108
+ togglePresenterTimer: presenterConsole.toggleTimer,
2109
+ resetPresenterTimer: presenterConsole.resetTimer,
2110
+ stepPresenterZoom: presenterConsole.stepZoom,
2111
+ resetPresenterZoom: presenterConsole.resetZoom,
2112
+ setPresenterCaption: presenterConsole.setCaption,
2113
+ setPresenterSubtitlesVisible: presenterConsole.setSubtitlesVisible,
2114
+ updatePresenterSnapshot: presenterConsole.updateSnapshot
1949
2115
  };
1950
2116
  }
1951
2117
  var PEN_WIDTH = 2.5;
@@ -8487,7 +8653,7 @@ function FailedToLoad() {
8487
8653
  var LazySurfaceChart3DScene = React3.lazy(
8488
8654
  async () => {
8489
8655
  try {
8490
- return await import('./SurfaceChart3DScene-GUAS2NWQ.mjs');
8656
+ return await import('./SurfaceChart3DScene-DBWSDSKI.mjs');
8491
8657
  } catch {
8492
8658
  return { default: FailedToLoad };
8493
8659
  }
@@ -13700,8 +13866,11 @@ function useTableOperations(input) {
13700
13866
  ...mergeHandlers
13701
13867
  };
13702
13868
  }
13869
+
13870
+ // src/lib/canvas-export.ts
13703
13871
  async function renderToCanvas(element, options = {}) {
13704
13872
  const userOnClone = options.onclone;
13873
+ const { default: html2canvasPro } = await import('html2canvas-pro');
13705
13874
  return html2canvasPro(element, {
13706
13875
  ...options,
13707
13876
  onclone: async (doc, clonedEl) => {
@@ -14788,13 +14957,6 @@ function useThemeHandlers(input) {
14788
14957
  handleSwitchTheme
14789
14958
  };
14790
14959
  }
14791
- function colorSchemesMatch(a, b) {
14792
- if (!a) {
14793
- return false;
14794
- }
14795
- const normalize = (hex) => hex.replace(/^#/u, "").toUpperCase().slice(0, 6);
14796
- return normalize(a.dk1) === normalize(b.dk1) && normalize(a.lt1) === normalize(b.lt1) && normalize(a.dk2) === normalize(b.dk2) && normalize(a.lt2) === normalize(b.lt2) && normalize(a.accent1) === normalize(b.accent1) && normalize(a.accent2) === normalize(b.accent2) && normalize(a.accent3) === normalize(b.accent3) && normalize(a.accent4) === normalize(b.accent4) && normalize(a.accent5) === normalize(b.accent5) && normalize(a.accent6) === normalize(b.accent6) && normalize(a.hlink) === normalize(b.hlink) && normalize(a.folHlink) === normalize(b.folHlink);
14797
- }
14798
14960
  function useThemeSwitching(input) {
14799
14961
  const { handlerRef, data, onDataChange, onThemeChanged } = input;
14800
14962
  const switchToPreset = useCallback(
@@ -14834,7 +14996,9 @@ function useThemeSwitching(input) {
14834
14996
  if (!data?.theme?.colorScheme) {
14835
14997
  return void 0;
14836
14998
  }
14837
- return THEME_PRESETS.find((p) => colorSchemesMatch(data.theme?.colorScheme, p.colorScheme));
14999
+ return THEME_PRESETS.find(
15000
+ (p) => themeColorSchemesEqual(data.theme?.colorScheme, p.colorScheme)
15001
+ );
14838
15002
  }, [data?.theme?.colorScheme]);
14839
15003
  return {
14840
15004
  presets: THEME_PRESETS,
@@ -17513,7 +17677,7 @@ function useYjsDocumentSync({
17513
17677
  return;
17514
17678
  }
17515
17679
  try {
17516
- const { PptxHandler: PptxHandler2 } = await import('./dist-MXDC6YTS.mjs');
17680
+ const { PptxHandler: PptxHandler2 } = await import('./dist-N6PAPXK6.mjs');
17517
17681
  const handler = new PptxHandler2();
17518
17682
  await handler.load(sourceBytes.buffer);
17519
17683
  const currentSlides = readSlidesFromYDoc(
@@ -17989,4 +18153,4 @@ function useSwipeNavigation(input) {
17989
18153
  return { onTouchStart, onTouchEnd };
17990
18154
  }
17991
18155
 
17992
- export { ACTION_VERB_MAP, ANIMATION_PRESET_OPTIONS, DEFAULT_FILL_COLOR, DEFAULT_FONT_FAMILY, DEFAULT_STROKE_COLOR, DEFAULT_TEXT_COLOR, DEFAULT_TEXT_FONT_SIZE, EMU_PER_PX, 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, cellStyleToCss, chevronPoints, clearAudienceContent, cn, colour, computeVirtualRange, detectTargetType, ensureArrayValue, extractCellText, extractTableCellStyle, fitFontSize, gearPath, getAnimationInitialStyle2 as getAnimationInitialStyle, getConnectorPathGeometry, getCropShapeClipPath, getDuotoneColors, getImageRenderStyle, getImageTilingStyle, getShapeVisualStyle, getTableCellBandStyle, getTextLayoutStyle, getTextStyleForElement, getTextWarpStyle, hasDagDuotoneEffect, isAudienceTab, isConnectorOrLineElement, isImageTiled, layoutToCategory, loadAudienceContent, nodeOpacity, parseEmailUrl, parseSlideFromUrl, parseTableElementData, renderAccentProcess, renderAlternatingFlow, renderArtisticEffectSvgFilter, renderChartElement, renderConnectorMarker, renderDagDuotoneSvgFilter, renderDescendingProcess, renderDuotoneSvgFilter, renderGroupedList, renderHorizontalPictureList, renderImageAlphaSvgFilter, 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, useTouchGestures, useViewerCoreState, useViewerDialogs, useViewerIntegration, useViewerState, useViewerUIState, useVirtualizedSlides, useYjsDocumentSync, useYjsProvider, useZoomNavigation, useZoomViewport, wrapChrome };
18156
+ export { ACTION_VERB_MAP, ANIMATION_PRESET_OPTIONS, DEFAULT_FILL_COLOR, DEFAULT_FONT_FAMILY, DEFAULT_STROKE_COLOR, DEFAULT_TEXT_COLOR, DEFAULT_TEXT_FONT_SIZE, EMU_PER_PX, 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, cellStyleToCss, chevronPoints, clearAudienceContent, cn, colour, computeVirtualRange, detectTargetType, ensureArrayValue, extractCellText, extractTableCellStyle, fitFontSize, gearPath, getAnimationInitialStyle2 as getAnimationInitialStyle, getConnectorPathGeometry, getCropShapeClipPath, getDuotoneColors, getImageRenderStyle, getImageTilingStyle, getShapeVisualStyle, getTableCellBandStyle, getTextLayoutStyle, getTextStyleForElement, getTextWarpStyle, hasDagDuotoneEffect, isAudienceTab, isConnectorOrLineElement, isImageTiled, layoutToCategory, loadAudienceContent, nodeOpacity, parseAudienceNonce, parseEmailUrl, parseSlideFromUrl, parseTableElementData, renderAccentProcess, renderAlternatingFlow, renderArtisticEffectSvgFilter, renderChartElement, renderConnectorMarker, renderDagDuotoneSvgFilter, renderDescendingProcess, renderDuotoneSvgFilter, renderGroupedList, renderHorizontalPictureList, renderImageAlphaSvgFilter, 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, useTouchGestures, useViewerCoreState, useViewerDialogs, useViewerIntegration, useViewerState, useViewerUIState, useVirtualizedSlides, useYjsDocumentSync, useYjsProvider, useZoomNavigation, useZoomViewport, wrapChrome };
Binary file
Binary file