pptx-react-viewer 3.13.0 → 3.14.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 (144) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/dist/{AiChatPanel-E53JJRZX.js → AiChatPanel-42X7I5I2.js} +32 -32
  3. package/dist/AiChatPanel-42X7I5I2.js.br +0 -0
  4. package/dist/AiChatPanel-42X7I5I2.js.gz +0 -0
  5. package/dist/{AiChatPanel-JTXC5WWH.mjs → AiChatPanel-NJBUCO4X.mjs} +11 -11
  6. package/dist/AiChatPanel-NJBUCO4X.mjs.br +0 -0
  7. package/dist/AiChatPanel-NJBUCO4X.mjs.gz +0 -0
  8. package/dist/{Area3DChartScene-J7G54OH4.js → Area3DChartScene-IDS5APPJ.js} +2 -2
  9. package/dist/Area3DChartScene-IDS5APPJ.js.br +0 -0
  10. package/dist/Area3DChartScene-IDS5APPJ.js.gz +0 -0
  11. package/dist/{Area3DChartScene-JQ2VU73H.mjs → Area3DChartScene-TFZPHEZ6.mjs} +1 -1
  12. package/dist/Area3DChartScene-TFZPHEZ6.mjs.br +0 -0
  13. package/dist/Area3DChartScene-TFZPHEZ6.mjs.gz +0 -0
  14. package/dist/{Bar3DChartScene-JV3A2P6O.js → Bar3DChartScene-C3CQCKB6.js} +2 -2
  15. package/dist/Bar3DChartScene-C3CQCKB6.js.br +0 -0
  16. package/dist/Bar3DChartScene-C3CQCKB6.js.gz +0 -0
  17. package/dist/{Bar3DChartScene-5HC7LYBH.mjs → Bar3DChartScene-L3VXO7BS.mjs} +1 -1
  18. package/dist/Bar3DChartScene-L3VXO7BS.mjs.br +0 -0
  19. package/dist/Bar3DChartScene-L3VXO7BS.mjs.gz +0 -0
  20. package/dist/{Line3DChartScene-4ZAOOU7U.mjs → Line3DChartScene-UM4ZJJSY.mjs} +1 -1
  21. package/dist/Line3DChartScene-UM4ZJJSY.mjs.br +0 -0
  22. package/dist/Line3DChartScene-UM4ZJJSY.mjs.gz +0 -0
  23. package/dist/{Line3DChartScene-7SN7TVKQ.js → Line3DChartScene-YU4M3VMW.js} +2 -2
  24. package/dist/Line3DChartScene-YU4M3VMW.js.br +0 -0
  25. package/dist/Line3DChartScene-YU4M3VMW.js.gz +0 -0
  26. package/dist/{Model3DScene-GWIBUQ2U.mjs → Model3DScene-YEWZQAN5.mjs} +1 -1
  27. package/dist/Model3DScene-YEWZQAN5.mjs.br +0 -0
  28. package/dist/Model3DScene-YEWZQAN5.mjs.gz +0 -0
  29. package/dist/{Model3DScene-GQANXXQD.js → Model3DScene-YRRNSOYK.js} +2 -2
  30. package/dist/Model3DScene-YRRNSOYK.js.br +0 -0
  31. package/dist/Model3DScene-YRRNSOYK.js.gz +0 -0
  32. package/dist/{PieChart3DScene-RDTOLFTD.mjs → PieChart3DScene-2OBYYK55.mjs} +1 -1
  33. package/dist/PieChart3DScene-2OBYYK55.mjs.br +0 -0
  34. package/dist/PieChart3DScene-2OBYYK55.mjs.gz +0 -0
  35. package/dist/{PieChart3DScene-QPFDRMEA.js → PieChart3DScene-GH4X3W3E.js} +2 -2
  36. package/dist/PieChart3DScene-GH4X3W3E.js.br +0 -0
  37. package/dist/PieChart3DScene-GH4X3W3E.js.gz +0 -0
  38. package/dist/{SurfaceChart3DScene-5JQCRWA5.mjs → SurfaceChart3DScene-DYG5I5UP.mjs} +1 -1
  39. package/dist/SurfaceChart3DScene-DYG5I5UP.mjs.br +0 -0
  40. package/dist/SurfaceChart3DScene-DYG5I5UP.mjs.gz +0 -0
  41. package/dist/{SurfaceChart3DScene-JLYGC7QU.js → SurfaceChart3DScene-J5CAPHVA.js} +2 -2
  42. package/dist/SurfaceChart3DScene-J5CAPHVA.js.br +0 -0
  43. package/dist/SurfaceChart3DScene-J5CAPHVA.js.gz +0 -0
  44. package/dist/{chunk-UGVPKJSU.js → chunk-7OMXJNYI.js} +1568 -1416
  45. package/dist/chunk-7OMXJNYI.js.br +0 -0
  46. package/dist/chunk-7OMXJNYI.js.gz +0 -0
  47. package/dist/{chunk-H3GHGSGW.js → chunk-7Z7AY4MH.js} +688 -546
  48. package/dist/chunk-7Z7AY4MH.js.br +0 -0
  49. package/dist/chunk-7Z7AY4MH.js.gz +0 -0
  50. package/dist/{chunk-PKHTTHA2.mjs → chunk-EZ3EI2VM.mjs} +323 -171
  51. package/dist/chunk-EZ3EI2VM.mjs.br +0 -0
  52. package/dist/chunk-EZ3EI2VM.mjs.gz +0 -0
  53. package/dist/{chunk-M7SNS3DQ.mjs → chunk-GQMVEUHM.mjs} +263 -122
  54. package/dist/chunk-GQMVEUHM.mjs.br +0 -0
  55. package/dist/chunk-GQMVEUHM.mjs.gz +0 -0
  56. package/dist/{chunk-IVCYND7A.js → chunk-H4LMXJ2Z.js} +167 -167
  57. package/dist/chunk-H4LMXJ2Z.js.br +0 -0
  58. package/dist/chunk-H4LMXJ2Z.js.gz +0 -0
  59. package/dist/{chunk-TS2DHMBS.mjs → chunk-HADPGII2.mjs} +43955 -43185
  60. package/dist/chunk-HADPGII2.mjs.br +0 -0
  61. package/dist/chunk-HADPGII2.mjs.gz +0 -0
  62. package/dist/{chunk-G2Z7QULX.js → chunk-INKQT4SQ.js} +5 -5
  63. package/dist/chunk-INKQT4SQ.js.br +0 -0
  64. package/dist/chunk-INKQT4SQ.js.gz +0 -0
  65. package/dist/{chunk-TWUAZRCG.js → chunk-MH4VFSDL.js} +43966 -43185
  66. package/dist/chunk-MH4VFSDL.js.br +0 -0
  67. package/dist/chunk-MH4VFSDL.js.gz +0 -0
  68. package/dist/{chunk-Y3SA5H5H.mjs → chunk-OVOXRK7D.mjs} +1 -1
  69. package/dist/chunk-OVOXRK7D.mjs.br +0 -0
  70. package/dist/chunk-OVOXRK7D.mjs.gz +0 -0
  71. package/dist/{chunk-HB7DJENT.mjs → chunk-YFYSY7ZL.mjs} +1 -1
  72. package/dist/chunk-YFYSY7ZL.mjs.br +0 -0
  73. package/dist/{chunk-HB7DJENT.mjs.gz → chunk-YFYSY7ZL.mjs.gz} +0 -0
  74. package/dist/index.js +45 -45
  75. package/dist/index.js.br +0 -0
  76. package/dist/index.js.gz +0 -0
  77. package/dist/index.mjs +5 -5
  78. package/dist/index.mjs.br +0 -0
  79. package/dist/index.mjs.gz +0 -0
  80. package/dist/internals.d.ts +33 -1
  81. package/dist/internals.d.ts.map +1 -1
  82. package/dist/internals.js +78 -78
  83. package/dist/internals.js.br +0 -0
  84. package/dist/internals.js.gz +0 -0
  85. package/dist/internals.mjs +3 -3
  86. package/dist/internals.mjs.br +0 -0
  87. package/dist/internals.mjs.gz +0 -0
  88. package/dist/pptx-viewer.css +1 -1
  89. package/dist/pptx-viewer.css.br +0 -0
  90. package/dist/pptx-viewer.css.gz +0 -0
  91. package/dist/viewer/index.js +26 -26
  92. package/dist/viewer/index.js.br +0 -0
  93. package/dist/viewer/index.js.gz +0 -0
  94. package/dist/viewer/index.mjs +5 -5
  95. package/dist/viewer/index.mjs.br +0 -0
  96. package/dist/viewer/index.mjs.gz +0 -0
  97. package/package.json +3 -1
  98. package/dist/AiChatPanel-E53JJRZX.js.br +0 -0
  99. package/dist/AiChatPanel-E53JJRZX.js.gz +0 -0
  100. package/dist/AiChatPanel-JTXC5WWH.mjs.br +0 -0
  101. package/dist/AiChatPanel-JTXC5WWH.mjs.gz +0 -0
  102. package/dist/Area3DChartScene-J7G54OH4.js.br +0 -0
  103. package/dist/Area3DChartScene-J7G54OH4.js.gz +0 -0
  104. package/dist/Area3DChartScene-JQ2VU73H.mjs.br +0 -0
  105. package/dist/Area3DChartScene-JQ2VU73H.mjs.gz +0 -0
  106. package/dist/Bar3DChartScene-5HC7LYBH.mjs.br +0 -0
  107. package/dist/Bar3DChartScene-5HC7LYBH.mjs.gz +0 -0
  108. package/dist/Bar3DChartScene-JV3A2P6O.js.br +0 -0
  109. package/dist/Bar3DChartScene-JV3A2P6O.js.gz +0 -0
  110. package/dist/Line3DChartScene-4ZAOOU7U.mjs.br +0 -0
  111. package/dist/Line3DChartScene-4ZAOOU7U.mjs.gz +0 -0
  112. package/dist/Line3DChartScene-7SN7TVKQ.js.br +0 -0
  113. package/dist/Line3DChartScene-7SN7TVKQ.js.gz +0 -0
  114. package/dist/Model3DScene-GQANXXQD.js.br +0 -0
  115. package/dist/Model3DScene-GQANXXQD.js.gz +0 -0
  116. package/dist/Model3DScene-GWIBUQ2U.mjs.br +0 -0
  117. package/dist/Model3DScene-GWIBUQ2U.mjs.gz +0 -0
  118. package/dist/PieChart3DScene-QPFDRMEA.js.br +0 -0
  119. package/dist/PieChart3DScene-QPFDRMEA.js.gz +0 -0
  120. package/dist/PieChart3DScene-RDTOLFTD.mjs.br +0 -0
  121. package/dist/PieChart3DScene-RDTOLFTD.mjs.gz +0 -0
  122. package/dist/SurfaceChart3DScene-5JQCRWA5.mjs.br +0 -0
  123. package/dist/SurfaceChart3DScene-5JQCRWA5.mjs.gz +0 -0
  124. package/dist/SurfaceChart3DScene-JLYGC7QU.js.br +0 -0
  125. package/dist/SurfaceChart3DScene-JLYGC7QU.js.gz +0 -0
  126. package/dist/chunk-G2Z7QULX.js.br +0 -0
  127. package/dist/chunk-G2Z7QULX.js.gz +0 -0
  128. package/dist/chunk-H3GHGSGW.js.br +0 -0
  129. package/dist/chunk-H3GHGSGW.js.gz +0 -0
  130. package/dist/chunk-HB7DJENT.mjs.br +0 -0
  131. package/dist/chunk-IVCYND7A.js.br +0 -0
  132. package/dist/chunk-IVCYND7A.js.gz +0 -0
  133. package/dist/chunk-M7SNS3DQ.mjs.br +0 -0
  134. package/dist/chunk-M7SNS3DQ.mjs.gz +0 -0
  135. package/dist/chunk-PKHTTHA2.mjs.br +0 -0
  136. package/dist/chunk-PKHTTHA2.mjs.gz +0 -0
  137. package/dist/chunk-TS2DHMBS.mjs.br +0 -0
  138. package/dist/chunk-TS2DHMBS.mjs.gz +0 -0
  139. package/dist/chunk-TWUAZRCG.js.br +0 -0
  140. package/dist/chunk-TWUAZRCG.js.gz +0 -0
  141. package/dist/chunk-UGVPKJSU.js.br +0 -0
  142. package/dist/chunk-UGVPKJSU.js.gz +0 -0
  143. package/dist/chunk-Y3SA5H5H.mjs.br +0 -0
  144. package/dist/chunk-Y3SA5H5H.mjs.gz +0 -0
Binary file
Binary file
@@ -1,5 +1,5 @@
1
- import { cloneHistorySnapshot, MIN_ELEMENT_SIZE, ZOOM_TO_SELECTION_PADDING, DEFAULT_CANVAS_HEIGHT, DEFAULT_CANVAS_WIDTH, UNGROUPED_SECTION_ID, DEFAULT_SECTION_GROUP_ID, DEFAULT_TABLE_ROWS, DEFAULT_TABLE_COLUMNS, buildPdfFromTiledImageData, buildNotesPdf, GRID_SIZE, DEFAULT_TEXT_FONT_SIZE } from './chunk-Y3SA5H5H.mjs';
2
- import { DEFAULT_VIEWER_OPTIONS, TOOLBAR_TABS, computeVirtualRange, DEFAULT_VIRTUAL_OVERSCAN, createPresenceProjector, BROADCAST_THROTTLE_MS, createSyncGate, clearLocalAwareness, validateRoomId, createDepartureChannel, resolveTransportForServerUrl, isMixedContentBlocked, CONNECTION_TIMEOUT_MS, registerCollaborationTeardown, sanitizeColor, cloneTemplateElementsBySlideId, cloneSlide, createWheelStepBuffer, createViewerZoomStore, clampZoomScale, mapEditingWheel, createActiveAnimationGroup, cancelBuildReveal, clearPlaybackTimers, PresentationAnimationController, resolveMediaTimeNodeElementIds, advanceMainSequence, playGroup, PRESENTATION_HASH, PRESENTATION_NONCE_KEY, PRESENTATION_CHANNEL_NAME, swapPresentationWindows, PRESENTATION_MESSAGE_ORIGIN, clearAudienceContent, buildPresentationAudienceUrl, resolveAudienceScreenPlacement, placeAudienceWindow, storeAudienceContent, isPresentationSessionMessage, endAudienceDisplay, createPresentationKeyBuffer, acceptsPresentationInput, resolveAutoAdvanceDelayMs, hasShowSlideAfter, nextShowSlideIndex, previousShowSlideIndex, createPresenterShowGuard, firstShowSlideIndex, attachPresentationVisibilityPause, presentationEntrySlideIndex, buildMorphTransitionPlan, morphOptionToMode, buildMorphAnimationRules, findInSlides, applyFindReplacements, visibleTemplateElements, createCollaborationLivePatcher, publishLiveInlineText, PptxHandler, collectMediaElements, resolveMediaElementSource, collectImagePaths, applyImagePathPatches, resolveTableCellImageUrls, resolveTableStyleImageUrls, partitionTemplateElements, seedRecentColors, resolveAuthoredCustomShowId, buildInitialGuides, readOnlyRecommendation, compatibilityWarningToasts, EncryptedFileError, resolveAutosaveIntervalMs, shouldWriteAutosaveSnapshot, saveAutosaveSnapshot, autosaveSnapshotMark, hasTextProperties, remapTextToSegments, updateMasterViewElement, isTemplateElementId, updateElement, hasShapeProperties, getInlineEditorSelection, applyStyleToSelectedSegments, setPendingSelectionRestore, applyCaseTransformToSegments, transformTextCase, masterViewElements, replaceMasterViewElements, addSection, renameSection, deleteSection, moveSectionUp, moveSectionDown, moveSlidesToSection, canInteractWithElement, normalizeColorsForCapture, preprocessCssForCapture, slideProgressPercent, slideStatusLabel, EXPORT_ASSEMBLING_PERCENT, EXPORT_DONE_PERCENT, isExportAbortError, recordProgressPercent, downloadBlob, resolveImageResolutionScale, applyThemeToData, THEME_PRESETS, themeColorSchemesEqual, comparePresentation, applyAcceptSlide, applyAcceptAllSlides, collectUsedFonts, describeFontEmbedding, isMobileViewport, resolveAuthoredSlideRange, mayLeaveSlideShow, stopAllPersistentAudio, guidePxToEmu, buildSaveSlides, buildDeckSaveOptions, resolveSlideSizeSelection, saveDeckWithPassword, shouldProbeAutosaveRecovery, probeAutosaveRecovery, acceptAutosaveRecovery, discardAutosaveRecovery, shouldLoopContinuously, applyRehearsalTimings, copyFormatFromElement, applyFormatToElement, collectReferencedFontFamilies, resolveGoogleWebfontHref, mapSlideShowStartKey, mapEditorKey, isEditorTextInputTarget, createViewerOptionsStore, readSlidesFromYDoc, shouldRoomSlidesReplaceLoad, reconcileSlidesInYDoc, LOCAL_SYNC_ORIGIN, observeYDocSlides, shouldAutoFollowBroadcaster, detectTouchDevice, detectOrientation, deriveViewportBreakpoints, createTouchGestureRecognizer, MAX_ZOOM_SCALE, MIN_ZOOM_SCALE, isKeyboardOpen, scopeLayoutOptionsToSlide, checkModifyPassword, viewerPreferencesFromViewProperties, DEFAULT_VIEWER_PREFERENCES, viewPropertiesPatchFromPreferences, openPptxFile, readBackstageRecentFile, isActionHidden, buildInlineTextCommitPatch, resolveInlineEditAutoFitHeight, resolveInlineEditNormAutofitShrink, filterInteractableIds, beginShapeAdjustment, buildElementClipboardPayload, savedPresentationFileName, exportDeckJson, groupElements, generateElementId, makeCloneId, ungroupElements, alignElements, distributeElements, bringForward, sendBackward, bringToFront, sendToBack, newTableElement, createDefaultChartElement, readViewportMetrics, computeKeyboardInset, mergeShapes, mapPresentationKey, lastShowSlideIndex, mapPresentationWheel, openPendingPrintWindow, computeColorFilter, filterHiddenSlideIndices, computeSlideIndices, buildPrintDocument, finishPrintWindow, buildPrintHtmlDocument, buildOutlineHtml, buildSlidesHtml, buildNotesHtml, buildHandoutsHtml, createBlankSlide, makeSlideId, buildSlideTemplateSlide, templateSchemeFromTheme, buildThemeColorMap, reResolveSlideColors, reResolveElementColors, scheduleAutoAdvanceChain, computeEntranceAnimationDelay, createPresentationSessionId, resolveTransitionDurationMs, resolveTransitionSoundAction, runPresentationAction, safeOpenUrl, buildRunProgramNotice, toggleStageElementMedia, resolveOleVerbTarget, downloadDataUrl, openUrlInNewTab, createPresenterTimer, createInitialPresentationSnapshot, mergePresentationSnapshot, resetPresenterTimer, presenterElapsed, stepPresenterZoom, togglePresenterTimer, addCommentToList, removeCommentFromList, editCommentInList, toggleCommentResolvedInList, pickSupportedMimeType, WEBM_MIME_CANDIDATES, fpsToFrameIntervalMs, segmentFrameCount, encodeGif, computeGridSpacingPx, resolveShowSlideIndexes, groupSlidesBySection, masterViewPseudoSlide, resolveHistoryDepth, hasCopyableFormat, createBackstagePresentation, buildFieldSubstitutionContext, cloneElementForPaste, computeScrollDelta, getPresetShapeClipPath, svgPathToPolygons, polygonsToSvgPath, rerouteConnectorsForMovedElements, applyReroutedConnectors, SvgExporter, replyToCommentInList, deleteTableColumn, rebuildTableStructureInRawXml, insertTableColumn, deleteTableRow, insertTableRow, updateCellTextStyleInRawXml, setCellText, updateCellTextInRawXml, splitCell, updateMergeAttrsInRawXml, mergeCells, rasterResultToPngBlob, rasterizeElementTiles, placeTileOnPage, PDF_SLIDES_PAGE_WIDTH_PT, PDF_SLIDES_PAGE_HEIGHT_PT, canvasToJpegData, rasterizeElementClampedToCanvas, isPpactionUrl, parsePpactionUrl, resolvePresentationAction, ACTION_BUTTON_PRESETS, elementActionToPptxAction, isUrlSafe, buildSmartArtPresetData, classifyMediaType, computeSnapToShape, publishLiveGeometry, getDraggedShapeAdjustments, computeMarqueeHitIds, mergeAdditiveSelection, rasterizeElement, shouldConfirmExternalHyperlink, applyResize, lockResizeAspect, snapBoxToGrid, applyMotionPathPreset } from './chunk-TS2DHMBS.mjs';
1
+ import { cloneHistorySnapshot, MIN_ELEMENT_SIZE, ZOOM_TO_SELECTION_PADDING, DEFAULT_CANVAS_HEIGHT, DEFAULT_CANVAS_WIDTH, UNGROUPED_SECTION_ID, DEFAULT_SECTION_GROUP_ID, DEFAULT_TABLE_ROWS, DEFAULT_TABLE_COLUMNS, buildPdfFromTiledImageData, buildNotesPdf, GRID_SIZE, DEFAULT_TEXT_FONT_SIZE } from './chunk-OVOXRK7D.mjs';
2
+ import { GlyphOutlineFontCache, createGlyphOutlineLookup, DEFAULT_VIEWER_OPTIONS, TOOLBAR_TABS, MIN_TOUCH_TARGET_PX, computeVirtualRange, DEFAULT_VIRTUAL_OVERSCAN, createPresenceProjector, BROADCAST_THROTTLE_MS, createSyncGate, clearLocalAwareness, validateRoomId, createDepartureChannel, resolveTransportForServerUrl, isMixedContentBlocked, CONNECTION_TIMEOUT_MS, registerCollaborationTeardown, sanitizeColor, cloneTemplateElementsBySlideId, cloneSlide, createWheelStepBuffer, createViewerZoomStore, clampZoomScale, mapEditingWheel, createActiveAnimationGroup, cancelBuildReveal, clearPlaybackTimers, PresentationAnimationController, resolveMediaTimeNodeElementIds, advanceMainSequence, playGroup, PRESENTATION_HASH, PRESENTATION_NONCE_KEY, PRESENTATION_CHANNEL_NAME, swapPresentationWindows, PRESENTATION_MESSAGE_ORIGIN, clearAudienceContent, buildPresentationAudienceUrl, resolveAudienceScreenPlacement, placeAudienceWindow, storeAudienceContent, isPresentationSessionMessage, endAudienceDisplay, createPresentationKeyBuffer, acceptsPresentationInput, resolveAutoAdvanceDelayMs, hasShowSlideAfter, nextShowSlideIndex, previousShowSlideIndex, createPresenterShowGuard, firstShowSlideIndex, attachPresentationVisibilityPause, presentationEntrySlideIndex, buildMorphTransitionPlan, morphOptionToMode, buildMorphAnimationRules, findInSlides, applyFindReplacements, visibleTemplateElements, createCollaborationLivePatcher, publishLiveInlineText, PptxHandler, collectMediaElements, resolveMediaElementSource, collectImagePaths, applyImagePathPatches, resolveTableCellImageUrls, resolveTableStyleImageUrls, partitionTemplateElements, seedRecentColors, resolveAuthoredCustomShowId, buildInitialGuides, readOnlyRecommendation, compatibilityWarningToasts, EncryptedFileError, resolveAutosaveIntervalMs, shouldWriteAutosaveSnapshot, saveAutosaveSnapshot, autosaveSnapshotMark, hasTextProperties, remapTextToSegments, updateMasterViewElement, isTemplateElementId, updateElement, hasShapeProperties, getInlineEditorSelection, applyStyleToSelectedSegments, setPendingSelectionRestore, applyCaseTransformToSegments, transformTextCase, masterViewElements, replaceMasterViewElements, addSection, renameSection, deleteSection, moveSectionUp, moveSectionDown, moveSlidesToSection, canInteractWithElement, normalizeColorsForCapture, preprocessCssForCapture, slideProgressPercent, slideStatusLabel, EXPORT_ASSEMBLING_PERCENT, EXPORT_DONE_PERCENT, isExportAbortError, resolveImageResolutionScale, applyThemeToData, THEME_PRESETS, themeColorSchemesEqual, comparePresentation, applyAcceptSlide, applyAcceptAllSlides, collectUsedFonts, describeFontEmbedding, isMobileViewport, resolveAuthoredSlideRange, mayLeaveSlideShow, stopAllPersistentAudio, guidePxToEmu, buildSaveSlides, buildDeckSaveOptions, resolveSlideSizeSelection, saveDeckWithPassword, shouldProbeAutosaveRecovery, probeAutosaveRecovery, acceptAutosaveRecovery, discardAutosaveRecovery, shouldLoopContinuously, applyRehearsalTimings, copyFormatFromElement, applyFormatToElement, collectReferencedFontFamilies, resolveGoogleWebfontHref, selectGoogleWebfontFamilies, fetchGoogleWebfontOutlineBytes, mapSlideShowStartKey, mapEditorKey, isEditorTextInputTarget, createViewerOptionsStore, readSlidesFromYDoc, shouldRoomSlidesReplaceLoad, reconcileSlidesInYDoc, LOCAL_SYNC_ORIGIN, observeYDocSlides, shouldAutoFollowBroadcaster, detectTouchDevice, detectOrientation, deriveViewportBreakpoints, createTouchGestureRecognizer, MAX_ZOOM_SCALE, MIN_ZOOM_SCALE, isKeyboardOpen, scopeLayoutOptionsToSlide, checkModifyPassword, viewerPreferencesFromViewProperties, DEFAULT_VIEWER_PREFERENCES, viewPropertiesPatchFromPreferences, openPptxFile, readBackstageRecentFile, isActionHidden, buildInlineTextCommitPatch, resolveInlineEditAutoFitHeight, resolveInlineEditNormAutofitShrink, filterInteractableIds, beginShapeAdjustment, buildElementClipboardPayload, savedPresentationFileName, downloadBlob, exportDeckJson, groupElements, generateElementId, makeCloneId, ungroupElements, alignElements, distributeElements, bringForward, sendBackward, bringToFront, sendToBack, newTableElement, createDefaultChartElement, readViewportMetrics, computeKeyboardInset, mergeShapes, mapPresentationKey, lastShowSlideIndex, mapPresentationWheel, openPendingPrintWindow, computeColorFilter, filterHiddenSlideIndices, computeSlideIndices, buildPrintDocument, finishPrintWindow, buildPrintHtmlDocument, buildOutlineHtml, buildSlidesHtml, buildNotesHtml, buildHandoutsHtml, createBlankSlide, makeSlideId, buildSlideTemplateSlide, templateSchemeFromTheme, buildThemeColorMap, reResolveSlideColors, reResolveElementColors, scheduleAutoAdvanceChain, computeEntranceAnimationDelay, createPresentationSessionId, resolveTransitionDurationMs, resolveTransitionSoundAction, runPresentationAction, safeOpenUrl, buildRunProgramNotice, toggleStageElementMedia, resolveOleVerbTarget, downloadDataUrl, openUrlInNewTab, createPresenterTimer, createInitialPresentationSnapshot, mergePresentationSnapshot, resetPresenterTimer, presenterElapsed, stepPresenterZoom, togglePresenterTimer, addCommentToList, removeCommentFromList, editCommentInList, toggleCommentResolvedInList, resolveExportCaptureDecision, recordProgressPercent, computeGridSpacingPx, resolveShowSlideIndexes, groupSlidesBySection, masterViewPseudoSlide, resolveHistoryDepth, hasCopyableFormat, createBackstagePresentation, buildFieldSubstitutionContext, cloneElementForPaste, computeScrollDelta, getPresetShapeClipPath, svgPathToPolygons, polygonsToSvgPath, rerouteConnectorsForMovedElements, applyReroutedConnectors, SvgExporter, replyToCommentInList, deleteTableColumn, rebuildTableStructureInRawXml, insertTableColumn, deleteTableRow, insertTableRow, updateCellTextStyleInRawXml, setCellText, updateCellTextInRawXml, splitCell, updateMergeAttrsInRawXml, mergeCells, pickSupportedMimeType, WEBM_MIME_CANDIDATES, fpsToFrameIntervalMs, segmentFrameCount, GIF_POST_CAPTURE_MAX_SIDE, encodeGif, rasterResultToPngBlob, rasterizeElementTiles, placeTileOnPage, PDF_SLIDES_PAGE_WIDTH_PT, PDF_SLIDES_PAGE_HEIGHT_PT, canvasToJpegData, rasterizeElementTiledToCanvas, isPpactionUrl, parsePpactionUrl, resolvePresentationAction, ACTION_BUTTON_PRESETS, elementActionToPptxAction, isUrlSafe, buildSmartArtPresetData, classifyMediaType, computeSnapToShape, publishLiveGeometry, getDraggedShapeAdjustments, computeMarqueeHitIds, mergeAdditiveSelection, clampGifDimensions, rasterizeElement, shouldConfirmExternalHyperlink, applyResize, lockResizeAspect, snapBoxToGrid, applyMotionPathPreset } from './chunk-HADPGII2.mjs';
3
3
  import { translationsEn } from './chunk-HMX3MQR7.mjs';
4
4
  import { createContext, useRef, useState, useEffect, useCallback, useMemo, useLayoutEffect, useContext, useImperativeHandle, useSyncExternalStore } from 'react';
5
5
  import { useTranslation } from 'react-i18next';
@@ -3960,6 +3960,12 @@ function useViewerState(input) {
3960
3960
  const ui = useViewerUIState();
3961
3961
  return { ...core, ...ui };
3962
3962
  }
3963
+
3964
+ // src/viewer/utils/glyph-outline-cache.ts
3965
+ var glyphOutlineFontCache = new GlyphOutlineFontCache();
3966
+ var getGlyphOutline = createGlyphOutlineLookup(glyphOutlineFontCache);
3967
+
3968
+ // src/viewer/hooks/useLoadContent.ts
3963
3969
  function useLoadContent({
3964
3970
  content,
3965
3971
  clearSelection,
@@ -4138,6 +4144,7 @@ function useLoadContent({
4138
4144
  setCoreProperties(parsed.coreProperties);
4139
4145
  setAppProperties(parsed.appProperties);
4140
4146
  setEmbeddedFonts(parsed.embeddedFonts ?? []);
4147
+ glyphOutlineFontCache.registerEmbeddedFonts(parsed.embeddedFonts ?? []);
4141
4148
  setHasMacros(parsed.hasMacros === true);
4142
4149
  setHasDigitalSignatures(parsed.hasDigitalSignatures === true);
4143
4150
  setDigitalSignatureCount(parsed.digitalSignatureCount ?? 0);
@@ -7043,22 +7050,6 @@ function useExportSaveAs(input) {
7043
7050
  };
7044
7051
  }
7045
7052
 
7046
- // src/viewer/utils/dom-helpers.ts
7047
- function safePrompt(message, defaultValue) {
7048
- try {
7049
- return window.prompt(message, defaultValue);
7050
- } catch {
7051
- return null;
7052
- }
7053
- }
7054
- function safeConfirm(message) {
7055
- try {
7056
- return window.confirm(message);
7057
- } catch {
7058
- return false;
7059
- }
7060
- }
7061
-
7062
7053
  // src/viewer/utils/export-helpers.ts
7063
7054
  function ignoreExportOverlayElements(el) {
7064
7055
  const htmlEl = el;
@@ -7115,9 +7106,9 @@ async function renderElementToTiles(element, scale = 2, backgroundColor, mode =
7115
7106
  buildRasterOptions(element, scale, backgroundColor, mode)
7116
7107
  );
7117
7108
  }
7118
- async function renderElementToClampedCanvas(element, scale = 2, backgroundColor, mode = "auto") {
7109
+ async function renderElementToTiledCanvas(element, scale = 2, backgroundColor, mode = "auto") {
7119
7110
  const { width, height } = measureNaturalSize(element);
7120
- return rasterizeElementClampedToCanvas(
7111
+ return rasterizeElementTiledToCanvas(
7121
7112
  element,
7122
7113
  width,
7123
7114
  height,
@@ -7161,7 +7152,7 @@ async function captureAllSlidesAsPngDataUrls(slideStageRef, totalSlides, setActi
7161
7152
  console.warn(`[export] Could not find slide stage element for slide ${i}`);
7162
7153
  continue;
7163
7154
  }
7164
- const { canvas } = await renderElementToClampedCanvas(stageEl, scale);
7155
+ const { canvas } = await renderElementToTiledCanvas(stageEl, scale);
7165
7156
  dataUrls.push(canvas.toDataURL("image/png"));
7166
7157
  }
7167
7158
  onProgress?.(totalSlides, totalSlides);
@@ -7223,7 +7214,7 @@ async function exportAllSlidesAsNotesPdf(slideStageRef, totalSlides, setActiveSl
7223
7214
  console.warn(`[export] Could not find slide stage element for slide ${i}`);
7224
7215
  continue;
7225
7216
  }
7226
- const { canvas } = await renderElementToClampedCanvas(stageEl, scale);
7217
+ const { canvas } = await renderElementToTiledCanvas(stageEl, scale);
7227
7218
  pages.push({
7228
7219
  canvas,
7229
7220
  notes: slideNotes[i],
@@ -7262,7 +7253,7 @@ async function exportAllSlidesAsVideo(slideStageRef, totalSlides, setActiveSlide
7262
7253
  console.warn(`[export] Could not find slide stage element for slide ${i}`);
7263
7254
  continue;
7264
7255
  }
7265
- const { canvas } = await renderElementToClampedCanvas(stageEl, scale);
7256
+ const { canvas } = await renderElementToTiledCanvas(stageEl, scale);
7266
7257
  slideCanvases.push(canvas);
7267
7258
  }
7268
7259
  setActiveSlide(currentSlideIndex);
@@ -7323,8 +7314,34 @@ async function exportAllSlidesAsVideo(slideStageRef, totalSlides, setActiveSlide
7323
7314
  }
7324
7315
 
7325
7316
  // src/viewer/utils/export-gif.ts
7317
+ function frameFromCanvas(canvas, maxSide) {
7318
+ const { width, height } = clampGifDimensions(canvas.width, canvas.height, maxSide);
7319
+ let source = canvas;
7320
+ if (width !== canvas.width || height !== canvas.height) {
7321
+ const scaled = canvas.ownerDocument.createElement("canvas");
7322
+ scaled.width = width;
7323
+ scaled.height = height;
7324
+ const scaledCtx = scaled.getContext("2d");
7325
+ if (!scaledCtx) {
7326
+ return void 0;
7327
+ }
7328
+ scaledCtx.drawImage(canvas, 0, 0, width, height);
7329
+ source = scaled;
7330
+ }
7331
+ const ctx = source.getContext("2d");
7332
+ if (!ctx) {
7333
+ return void 0;
7334
+ }
7335
+ return { imageData: ctx.getImageData(0, 0, width, height), width, height };
7336
+ }
7326
7337
  async function exportAllSlidesAsGif(slideStageRef, totalSlides, setActiveSlide, currentSlideIndex, options = {}) {
7327
- const { scale = 0.5, slideDurationMs = 2e3, onProgress, signal } = options;
7338
+ const {
7339
+ scale = 0.5,
7340
+ slideDurationMs = 2e3,
7341
+ maxSide = GIF_POST_CAPTURE_MAX_SIDE,
7342
+ onProgress,
7343
+ signal
7344
+ } = options;
7328
7345
  const frames = [];
7329
7346
  for (let i = 0; i < totalSlides; i++) {
7330
7347
  if (signal?.aborted) {
@@ -7337,17 +7354,12 @@ async function exportAllSlidesAsGif(slideStageRef, totalSlides, setActiveSlide,
7337
7354
  if (!stageEl) {
7338
7355
  continue;
7339
7356
  }
7340
- const { canvas } = await renderElementToClampedCanvas(stageEl, scale);
7341
- const ctx = canvas.getContext("2d");
7342
- if (!ctx) {
7357
+ const { canvas } = await renderElementToTiledCanvas(stageEl, scale);
7358
+ const frame = frameFromCanvas(canvas, maxSide);
7359
+ if (!frame) {
7343
7360
  continue;
7344
7361
  }
7345
- const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
7346
- frames.push({
7347
- imageData,
7348
- width: canvas.width,
7349
- height: canvas.height
7350
- });
7362
+ frames.push(frame);
7351
7363
  }
7352
7364
  setActiveSlide(currentSlideIndex);
7353
7365
  if (frames.length === 0) {
@@ -7418,6 +7430,149 @@ function exportAllSlidesToSvg(data, options = {}) {
7418
7430
  return results;
7419
7431
  }
7420
7432
 
7433
+ // src/viewer/utils/dom-helpers.ts
7434
+ function safePrompt(message, defaultValue) {
7435
+ try {
7436
+ return window.prompt(message, defaultValue);
7437
+ } catch {
7438
+ return null;
7439
+ }
7440
+ }
7441
+ function safeConfirm(message) {
7442
+ try {
7443
+ return window.confirm(message);
7444
+ } catch {
7445
+ return false;
7446
+ }
7447
+ }
7448
+
7449
+ // src/viewer/hooks/useExportMediaHandlers.ts
7450
+ function useExportMediaHandlers(input) {
7451
+ const {
7452
+ slides,
7453
+ activeSlideIndex,
7454
+ canvasStageRef,
7455
+ setActiveSlideIndex,
7456
+ imageResolutionScale = 1,
7457
+ exportAbortRef,
7458
+ setExportModalOpen,
7459
+ setExportModalTitle,
7460
+ setExportProgress,
7461
+ setExportStatusMessage
7462
+ } = input;
7463
+ const handleExportVideo = useCallback(async () => {
7464
+ if (!canvasStageRef.current) {
7465
+ return;
7466
+ }
7467
+ const abortCtrl = new AbortController();
7468
+ exportAbortRef.current = abortCtrl;
7469
+ setExportModalTitle("Export as Video");
7470
+ setExportStatusMessage("Capturing slides...");
7471
+ setExportProgress(0);
7472
+ setExportModalOpen(true);
7473
+ try {
7474
+ const { scale } = resolveExportCaptureDecision(imageResolutionScale, "video");
7475
+ const blob = await exportAllSlidesAsVideo(
7476
+ canvasStageRef,
7477
+ slides.length,
7478
+ setActiveSlideIndex,
7479
+ activeSlideIndex,
7480
+ {
7481
+ scale,
7482
+ slideDurationMs: 3e3,
7483
+ onProgress: (current, total) => {
7484
+ setExportProgress(slideProgressPercent(current, total, 45));
7485
+ setExportStatusMessage(slideStatusLabel("Capturing", current, total));
7486
+ },
7487
+ onRecordProgress: (current, total) => {
7488
+ setExportProgress(recordProgressPercent(current, total));
7489
+ setExportStatusMessage(slideStatusLabel("Recording", current, total));
7490
+ },
7491
+ signal: abortCtrl.signal
7492
+ }
7493
+ );
7494
+ setExportProgress(EXPORT_ASSEMBLING_PERCENT);
7495
+ setExportStatusMessage("Saving file...");
7496
+ downloadBlob(blob, "presentation.webm");
7497
+ setExportProgress(EXPORT_DONE_PERCENT);
7498
+ } catch (err) {
7499
+ if (!isExportAbortError(err)) {
7500
+ console.error("[PowerPointViewer] Video export failed:", err);
7501
+ }
7502
+ } finally {
7503
+ exportAbortRef.current = null;
7504
+ setExportModalOpen(false);
7505
+ }
7506
+ }, [
7507
+ canvasStageRef,
7508
+ slides.length,
7509
+ setActiveSlideIndex,
7510
+ activeSlideIndex,
7511
+ imageResolutionScale,
7512
+ exportAbortRef,
7513
+ setExportModalOpen,
7514
+ setExportModalTitle,
7515
+ setExportProgress,
7516
+ setExportStatusMessage
7517
+ ]);
7518
+ const handleExportGif = useCallback(async () => {
7519
+ if (!canvasStageRef.current) {
7520
+ return;
7521
+ }
7522
+ const abortCtrl = new AbortController();
7523
+ exportAbortRef.current = abortCtrl;
7524
+ setExportModalTitle("Export as GIF");
7525
+ setExportStatusMessage("Capturing slides...");
7526
+ setExportProgress(0);
7527
+ setExportModalOpen(true);
7528
+ try {
7529
+ const { scale, postCaptureMaxSide } = resolveExportCaptureDecision(
7530
+ imageResolutionScale,
7531
+ "gif"
7532
+ );
7533
+ const blob = await exportAllSlidesAsGif(
7534
+ canvasStageRef,
7535
+ slides.length,
7536
+ setActiveSlideIndex,
7537
+ activeSlideIndex,
7538
+ {
7539
+ scale,
7540
+ maxSide: postCaptureMaxSide,
7541
+ slideDurationMs: 2e3,
7542
+ onProgress: (current, total) => {
7543
+ setExportProgress(slideProgressPercent(current, total));
7544
+ setExportStatusMessage(slideStatusLabel("Encoding", current, total));
7545
+ },
7546
+ signal: abortCtrl.signal
7547
+ }
7548
+ );
7549
+ setExportProgress(EXPORT_ASSEMBLING_PERCENT);
7550
+ setExportStatusMessage("Saving file...");
7551
+ downloadBlob(blob, "presentation.gif");
7552
+ setExportProgress(EXPORT_DONE_PERCENT);
7553
+ } catch (err) {
7554
+ if (!isExportAbortError(err)) {
7555
+ console.error("[PowerPointViewer] GIF export failed:", err);
7556
+ }
7557
+ } finally {
7558
+ exportAbortRef.current = null;
7559
+ setExportModalOpen(false);
7560
+ }
7561
+ }, [
7562
+ canvasStageRef,
7563
+ slides.length,
7564
+ setActiveSlideIndex,
7565
+ activeSlideIndex,
7566
+ imageResolutionScale,
7567
+ exportAbortRef,
7568
+ setExportModalOpen,
7569
+ setExportModalTitle,
7570
+ setExportProgress,
7571
+ setExportStatusMessage
7572
+ ]);
7573
+ return { handleExportVideo, handleExportGif };
7574
+ }
7575
+
7421
7576
  // src/viewer/hooks/useExportHandlers.ts
7422
7577
  function useExportHandlers(input) {
7423
7578
  const {
@@ -7442,13 +7597,26 @@ function useExportHandlers(input) {
7442
7597
  theme,
7443
7598
  canvasSize,
7444
7599
  slideSizeEmu,
7445
- imageExportScale
7600
+ imageExportScale,
7601
+ imageResolutionScale
7446
7602
  } = input;
7447
7603
  const [exportModalOpen, setExportModalOpen] = useState(false);
7448
7604
  const [exportModalTitle, setExportModalTitle] = useState("");
7449
7605
  const [exportProgress, setExportProgress] = useState(0);
7450
7606
  const [exportStatusMessage, setExportStatusMessage] = useState("");
7451
7607
  const exportAbortRef = useRef(null);
7608
+ const { handleExportVideo, handleExportGif } = useExportMediaHandlers({
7609
+ slides,
7610
+ activeSlideIndex,
7611
+ canvasStageRef,
7612
+ setActiveSlideIndex,
7613
+ imageResolutionScale,
7614
+ exportAbortRef,
7615
+ setExportModalOpen,
7616
+ setExportModalTitle,
7617
+ setExportProgress,
7618
+ setExportStatusMessage
7619
+ });
7452
7620
  const {
7453
7621
  handleExportJson,
7454
7622
  handleSaveAsFormat,
@@ -7589,88 +7757,6 @@ function useExportHandlers(input) {
7589
7757
  console.error("[PowerPointViewer] Copy slide as image failed:", err);
7590
7758
  }
7591
7759
  }, [canvasStageRef, activeSlide?.backgroundColor, imageExportScale]);
7592
- const handleExportVideo = useCallback(async () => {
7593
- if (!canvasStageRef.current) {
7594
- return;
7595
- }
7596
- const abortCtrl = new AbortController();
7597
- exportAbortRef.current = abortCtrl;
7598
- setExportModalTitle("Export as Video");
7599
- setExportStatusMessage("Capturing slides...");
7600
- setExportProgress(0);
7601
- setExportModalOpen(true);
7602
- try {
7603
- const blob = await exportAllSlidesAsVideo(
7604
- canvasStageRef,
7605
- slides.length,
7606
- setActiveSlideIndex,
7607
- activeSlideIndex,
7608
- {
7609
- scale: 1,
7610
- slideDurationMs: 3e3,
7611
- onProgress: (current, total) => {
7612
- setExportProgress(slideProgressPercent(current, total, 45));
7613
- setExportStatusMessage(slideStatusLabel("Capturing", current, total));
7614
- },
7615
- onRecordProgress: (current, total) => {
7616
- setExportProgress(recordProgressPercent(current, total));
7617
- setExportStatusMessage(slideStatusLabel("Recording", current, total));
7618
- },
7619
- signal: abortCtrl.signal
7620
- }
7621
- );
7622
- setExportProgress(EXPORT_ASSEMBLING_PERCENT);
7623
- setExportStatusMessage("Saving file...");
7624
- downloadBlob(blob, "presentation.webm");
7625
- setExportProgress(EXPORT_DONE_PERCENT);
7626
- } catch (err) {
7627
- if (!isExportAbortError(err)) {
7628
- console.error("[PowerPointViewer] Video export failed:", err);
7629
- }
7630
- } finally {
7631
- exportAbortRef.current = null;
7632
- setExportModalOpen(false);
7633
- }
7634
- }, [canvasStageRef, slides.length, setActiveSlideIndex, activeSlideIndex]);
7635
- const handleExportGif = useCallback(async () => {
7636
- if (!canvasStageRef.current) {
7637
- return;
7638
- }
7639
- const abortCtrl = new AbortController();
7640
- exportAbortRef.current = abortCtrl;
7641
- setExportModalTitle("Export as GIF");
7642
- setExportStatusMessage("Capturing slides...");
7643
- setExportProgress(0);
7644
- setExportModalOpen(true);
7645
- try {
7646
- const blob = await exportAllSlidesAsGif(
7647
- canvasStageRef,
7648
- slides.length,
7649
- setActiveSlideIndex,
7650
- activeSlideIndex,
7651
- {
7652
- scale: 0.5,
7653
- slideDurationMs: 2e3,
7654
- onProgress: (current, total) => {
7655
- setExportProgress(slideProgressPercent(current, total));
7656
- setExportStatusMessage(slideStatusLabel("Encoding", current, total));
7657
- },
7658
- signal: abortCtrl.signal
7659
- }
7660
- );
7661
- setExportProgress(EXPORT_ASSEMBLING_PERCENT);
7662
- setExportStatusMessage("Saving file...");
7663
- downloadBlob(blob, "presentation.gif");
7664
- setExportProgress(EXPORT_DONE_PERCENT);
7665
- } catch (err) {
7666
- if (!isExportAbortError(err)) {
7667
- console.error("[PowerPointViewer] GIF export failed:", err);
7668
- }
7669
- } finally {
7670
- exportAbortRef.current = null;
7671
- setExportModalOpen(false);
7672
- }
7673
- }, [canvasStageRef, slides.length, setActiveSlideIndex, activeSlideIndex]);
7674
7760
  const handleCancelExport = useCallback(() => {
7675
7761
  exportAbortRef.current?.abort();
7676
7762
  exportAbortRef.current = null;
@@ -9284,7 +9370,8 @@ function useIOHandlers(input) {
9284
9370
  serializeForRecovery,
9285
9371
  setContent,
9286
9372
  onContentChange,
9287
- imageExportScale
9373
+ imageExportScale,
9374
+ imageResolutionScale
9288
9375
  } = input;
9289
9376
  const exportHandlers = useExportHandlers({
9290
9377
  slides,
@@ -9308,7 +9395,8 @@ function useIOHandlers(input) {
9308
9395
  theme: state.theme,
9309
9396
  canvasSize,
9310
9397
  slideSizeEmu: state.slideSizeEmu,
9311
- imageExportScale
9398
+ imageExportScale,
9399
+ imageResolutionScale
9312
9400
  });
9313
9401
  const printHandlers = usePrintHandlers({
9314
9402
  slides,
@@ -9442,6 +9530,52 @@ function useFontInjection({ embeddedFonts, slides }) {
9442
9530
  }
9443
9531
  };
9444
9532
  }, [embeddedFonts, slides]);
9533
+ const [, setOutlineFontsTick] = useState(0);
9534
+ useEffect(() => {
9535
+ let cancelled = false;
9536
+ const referenced = collectReferencedFontFamilies(slides);
9537
+ const candidates = selectGoogleWebfontFamilies(
9538
+ referenced,
9539
+ embeddedFonts.map((font) => font.name)
9540
+ );
9541
+ if (candidates.length === 0) {
9542
+ return;
9543
+ }
9544
+ void resolveGoogleWebfontHref(slides, embeddedFonts).then(async (href) => {
9545
+ if (cancelled || !href) {
9546
+ return;
9547
+ }
9548
+ const boldItalicVariants = [
9549
+ { bold: false, italic: false },
9550
+ { bold: true, italic: false }
9551
+ ];
9552
+ let registeredAny = false;
9553
+ for (const family of candidates) {
9554
+ for (const variant of boldItalicVariants) {
9555
+ if (cancelled) {
9556
+ return;
9557
+ }
9558
+ const bytes = await fetchGoogleWebfontOutlineBytes(
9559
+ href,
9560
+ family,
9561
+ variant.bold,
9562
+ variant.italic,
9563
+ fetch
9564
+ );
9565
+ if (bytes && glyphOutlineFontCache.registerFontBytes(family, variant.bold, variant.italic, bytes)) {
9566
+ registeredAny = true;
9567
+ }
9568
+ }
9569
+ }
9570
+ if (registeredAny && !cancelled) {
9571
+ setOutlineFontsTick((tick) => tick + 1);
9572
+ }
9573
+ return void 0;
9574
+ });
9575
+ return () => {
9576
+ cancelled = true;
9577
+ };
9578
+ }, [embeddedFonts, slides]);
9445
9579
  useEffect(() => {
9446
9580
  const neededSymbolFonts = SYMBOL_FONT_FAMILIES.filter((f) => referencedFamilies.has(f));
9447
9581
  if (neededSymbolFonts.length === 0) {
@@ -9809,6 +9943,7 @@ function useViewerIntegration(input) {
9809
9943
  canEdit,
9810
9944
  promptKeepInkAnnotations,
9811
9945
  imageExportScale,
9946
+ imageResolutionScale,
9812
9947
  mode,
9813
9948
  slides,
9814
9949
  activeSlide,
@@ -9894,7 +10029,8 @@ function useViewerIntegration(input) {
9894
10029
  serializeForRecovery,
9895
10030
  setContent,
9896
10031
  onContentChange,
9897
- imageExportScale
10032
+ imageExportScale,
10033
+ imageResolutionScale
9898
10034
  });
9899
10035
  const {
9900
10036
  showKeepAnnotationsDialog,
@@ -10560,7 +10696,7 @@ function useLayoutSwitching(input) {
10560
10696
  currentLayoutPath
10561
10697
  };
10562
10698
  }
10563
- var MIN_TOUCH_TARGET = 44;
10699
+ var MIN_TOUCH_TARGET = MIN_TOUCH_TARGET_PX;
10564
10700
  function subscribeTouchCapability(callback) {
10565
10701
  if (typeof window === "undefined") {
10566
10702
  return () => {
@@ -10645,7 +10781,9 @@ function useIsMobile() {
10645
10781
  isDesktop,
10646
10782
  isTouchDevice,
10647
10783
  orientation,
10648
- isVirtualKeyboardOpen
10784
+ isVirtualKeyboardOpen,
10785
+ viewportWidth,
10786
+ viewportHeight
10649
10787
  };
10650
10788
  }
10651
10789
  function useTouchGestures(input) {
@@ -11349,6 +11487,7 @@ function useViewerBuildingBlocksCore(input) {
11349
11487
  // Multiplied against the pre-existing 2x baseline; see the matching
11350
11488
  // comment in `PowerPointViewer.tsx`.
11351
11489
  imageExportScale: 2 * resolveImageResolutionScale(viewerOptions),
11490
+ imageResolutionScale: resolveImageResolutionScale(viewerOptions),
11352
11491
  viewerOptions
11353
11492
  };
11354
11493
  }
@@ -11531,6 +11670,7 @@ function useViewerBuildingBlocksState(input) {
11531
11670
  actionSoundHandlerRef,
11532
11671
  gridSpacingPx,
11533
11672
  imageExportScale,
11673
+ imageResolutionScale,
11534
11674
  setExitModeHandler,
11535
11675
  viewerOptions
11536
11676
  } = core;
@@ -11616,6 +11756,7 @@ function useViewerBuildingBlocksState(input) {
11616
11756
  canEdit,
11617
11757
  promptKeepInkAnnotations: viewerOptions.advanced.slideShowPromptKeepInkAnnotations,
11618
11758
  imageExportScale,
11759
+ imageResolutionScale,
11619
11760
  mode,
11620
11761
  slides,
11621
11762
  activeSlide,
@@ -11873,4 +12014,4 @@ function useResizablePanels() {
11873
12014
  };
11874
12015
  }
11875
12016
 
11876
- export { ACTION_VERB_MAP, MIN_TOUCH_TARGET, ViewerOptionsContext, computeToolbarVisibility, detectTargetType, isAudienceTab, parseAudienceNonce, parseEmailUrl, parseSlideFromUrl, playAnimationSound, renderToCanvas, safePrompt, scopeLayoutOptionsToActiveSlide, syncSelectionHandleOverlay, useAnimationPlayback, useAnnotationHandlers, useAudienceMode, useAutosave, useBroadcastFollower, useCanvasInteractions, useClipboardHandlers, useCollaborationLivePatch, useCollaborativeHistory, useCollaborativeState, useComments, useCompatibilityToastsState, 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, useReadOnlyRecommendationState, useRecoveryDetection, useReducedMotion, useRehearsalTimings, useResizablePanels, useSectionOperations, useSerialize, useSheetDismissDrag, useSlideManagement, useSlideNavigation, useSwipeNavigation, useTableOperations, useThemeHandlers, useThemeSwitching, useToolbarVisibility, useTouchGestures, useViewPreferencesSync, useViewerBuildingBlocks, useViewerCoreState, useViewerDialogs, useViewerIntegration, useViewerOptions, useViewerOptionsContext, useViewerState, useViewerUIState, useVirtualizedSlides, useYjsDocumentSync, useYjsProvider, useZoomNavigation, useZoomViewport };
12017
+ export { ACTION_VERB_MAP, MIN_TOUCH_TARGET, ViewerOptionsContext, computeToolbarVisibility, detectTargetType, getGlyphOutline, isAudienceTab, parseAudienceNonce, parseEmailUrl, parseSlideFromUrl, playAnimationSound, renderToCanvas, safePrompt, scopeLayoutOptionsToActiveSlide, syncSelectionHandleOverlay, useAnimationPlayback, useAnnotationHandlers, useAudienceMode, useAutosave, useBroadcastFollower, useCanvasInteractions, useClipboardHandlers, useCollaborationLivePatch, useCollaborativeHistory, useCollaborativeState, useComments, useCompatibilityToastsState, 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, useReadOnlyRecommendationState, useRecoveryDetection, useReducedMotion, useRehearsalTimings, useResizablePanels, useSectionOperations, useSerialize, useSheetDismissDrag, useSlideManagement, useSlideNavigation, useSwipeNavigation, useTableOperations, useThemeHandlers, useThemeSwitching, useToolbarVisibility, useTouchGestures, useViewPreferencesSync, useViewerBuildingBlocks, useViewerCoreState, useViewerDialogs, useViewerIntegration, useViewerOptions, useViewerOptionsContext, useViewerState, useViewerUIState, useVirtualizedSlides, useYjsDocumentSync, useYjsProvider, useZoomNavigation, useZoomViewport };
Binary file
Binary file