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.
- package/CHANGELOG.md +18 -0
- package/dist/{AiChatPanel-E53JJRZX.js → AiChatPanel-42X7I5I2.js} +32 -32
- package/dist/AiChatPanel-42X7I5I2.js.br +0 -0
- package/dist/AiChatPanel-42X7I5I2.js.gz +0 -0
- package/dist/{AiChatPanel-JTXC5WWH.mjs → AiChatPanel-NJBUCO4X.mjs} +11 -11
- package/dist/AiChatPanel-NJBUCO4X.mjs.br +0 -0
- package/dist/AiChatPanel-NJBUCO4X.mjs.gz +0 -0
- package/dist/{Area3DChartScene-J7G54OH4.js → Area3DChartScene-IDS5APPJ.js} +2 -2
- package/dist/Area3DChartScene-IDS5APPJ.js.br +0 -0
- package/dist/Area3DChartScene-IDS5APPJ.js.gz +0 -0
- package/dist/{Area3DChartScene-JQ2VU73H.mjs → Area3DChartScene-TFZPHEZ6.mjs} +1 -1
- package/dist/Area3DChartScene-TFZPHEZ6.mjs.br +0 -0
- package/dist/Area3DChartScene-TFZPHEZ6.mjs.gz +0 -0
- package/dist/{Bar3DChartScene-JV3A2P6O.js → Bar3DChartScene-C3CQCKB6.js} +2 -2
- package/dist/Bar3DChartScene-C3CQCKB6.js.br +0 -0
- package/dist/Bar3DChartScene-C3CQCKB6.js.gz +0 -0
- package/dist/{Bar3DChartScene-5HC7LYBH.mjs → Bar3DChartScene-L3VXO7BS.mjs} +1 -1
- package/dist/Bar3DChartScene-L3VXO7BS.mjs.br +0 -0
- package/dist/Bar3DChartScene-L3VXO7BS.mjs.gz +0 -0
- package/dist/{Line3DChartScene-4ZAOOU7U.mjs → Line3DChartScene-UM4ZJJSY.mjs} +1 -1
- package/dist/Line3DChartScene-UM4ZJJSY.mjs.br +0 -0
- package/dist/Line3DChartScene-UM4ZJJSY.mjs.gz +0 -0
- package/dist/{Line3DChartScene-7SN7TVKQ.js → Line3DChartScene-YU4M3VMW.js} +2 -2
- package/dist/Line3DChartScene-YU4M3VMW.js.br +0 -0
- package/dist/Line3DChartScene-YU4M3VMW.js.gz +0 -0
- package/dist/{Model3DScene-GWIBUQ2U.mjs → Model3DScene-YEWZQAN5.mjs} +1 -1
- package/dist/Model3DScene-YEWZQAN5.mjs.br +0 -0
- package/dist/Model3DScene-YEWZQAN5.mjs.gz +0 -0
- package/dist/{Model3DScene-GQANXXQD.js → Model3DScene-YRRNSOYK.js} +2 -2
- package/dist/Model3DScene-YRRNSOYK.js.br +0 -0
- package/dist/Model3DScene-YRRNSOYK.js.gz +0 -0
- package/dist/{PieChart3DScene-RDTOLFTD.mjs → PieChart3DScene-2OBYYK55.mjs} +1 -1
- package/dist/PieChart3DScene-2OBYYK55.mjs.br +0 -0
- package/dist/PieChart3DScene-2OBYYK55.mjs.gz +0 -0
- package/dist/{PieChart3DScene-QPFDRMEA.js → PieChart3DScene-GH4X3W3E.js} +2 -2
- package/dist/PieChart3DScene-GH4X3W3E.js.br +0 -0
- package/dist/PieChart3DScene-GH4X3W3E.js.gz +0 -0
- package/dist/{SurfaceChart3DScene-5JQCRWA5.mjs → SurfaceChart3DScene-DYG5I5UP.mjs} +1 -1
- package/dist/SurfaceChart3DScene-DYG5I5UP.mjs.br +0 -0
- package/dist/SurfaceChart3DScene-DYG5I5UP.mjs.gz +0 -0
- package/dist/{SurfaceChart3DScene-JLYGC7QU.js → SurfaceChart3DScene-J5CAPHVA.js} +2 -2
- package/dist/SurfaceChart3DScene-J5CAPHVA.js.br +0 -0
- package/dist/SurfaceChart3DScene-J5CAPHVA.js.gz +0 -0
- package/dist/{chunk-UGVPKJSU.js → chunk-7OMXJNYI.js} +1568 -1416
- package/dist/chunk-7OMXJNYI.js.br +0 -0
- package/dist/chunk-7OMXJNYI.js.gz +0 -0
- package/dist/{chunk-H3GHGSGW.js → chunk-7Z7AY4MH.js} +688 -546
- package/dist/chunk-7Z7AY4MH.js.br +0 -0
- package/dist/chunk-7Z7AY4MH.js.gz +0 -0
- package/dist/{chunk-PKHTTHA2.mjs → chunk-EZ3EI2VM.mjs} +323 -171
- package/dist/chunk-EZ3EI2VM.mjs.br +0 -0
- package/dist/chunk-EZ3EI2VM.mjs.gz +0 -0
- package/dist/{chunk-M7SNS3DQ.mjs → chunk-GQMVEUHM.mjs} +263 -122
- package/dist/chunk-GQMVEUHM.mjs.br +0 -0
- package/dist/chunk-GQMVEUHM.mjs.gz +0 -0
- package/dist/{chunk-IVCYND7A.js → chunk-H4LMXJ2Z.js} +167 -167
- package/dist/chunk-H4LMXJ2Z.js.br +0 -0
- package/dist/chunk-H4LMXJ2Z.js.gz +0 -0
- package/dist/{chunk-TS2DHMBS.mjs → chunk-HADPGII2.mjs} +43955 -43185
- package/dist/chunk-HADPGII2.mjs.br +0 -0
- package/dist/chunk-HADPGII2.mjs.gz +0 -0
- package/dist/{chunk-G2Z7QULX.js → chunk-INKQT4SQ.js} +5 -5
- package/dist/chunk-INKQT4SQ.js.br +0 -0
- package/dist/chunk-INKQT4SQ.js.gz +0 -0
- package/dist/{chunk-TWUAZRCG.js → chunk-MH4VFSDL.js} +43966 -43185
- package/dist/chunk-MH4VFSDL.js.br +0 -0
- package/dist/chunk-MH4VFSDL.js.gz +0 -0
- package/dist/{chunk-Y3SA5H5H.mjs → chunk-OVOXRK7D.mjs} +1 -1
- package/dist/chunk-OVOXRK7D.mjs.br +0 -0
- package/dist/chunk-OVOXRK7D.mjs.gz +0 -0
- package/dist/{chunk-HB7DJENT.mjs → chunk-YFYSY7ZL.mjs} +1 -1
- package/dist/chunk-YFYSY7ZL.mjs.br +0 -0
- package/dist/{chunk-HB7DJENT.mjs.gz → chunk-YFYSY7ZL.mjs.gz} +0 -0
- package/dist/index.js +45 -45
- package/dist/index.js.br +0 -0
- package/dist/index.js.gz +0 -0
- package/dist/index.mjs +5 -5
- package/dist/index.mjs.br +0 -0
- package/dist/index.mjs.gz +0 -0
- package/dist/internals.d.ts +33 -1
- package/dist/internals.d.ts.map +1 -1
- package/dist/internals.js +78 -78
- package/dist/internals.js.br +0 -0
- package/dist/internals.js.gz +0 -0
- package/dist/internals.mjs +3 -3
- package/dist/internals.mjs.br +0 -0
- package/dist/internals.mjs.gz +0 -0
- package/dist/pptx-viewer.css +1 -1
- package/dist/pptx-viewer.css.br +0 -0
- package/dist/pptx-viewer.css.gz +0 -0
- package/dist/viewer/index.js +26 -26
- package/dist/viewer/index.js.br +0 -0
- package/dist/viewer/index.js.gz +0 -0
- package/dist/viewer/index.mjs +5 -5
- package/dist/viewer/index.mjs.br +0 -0
- package/dist/viewer/index.mjs.gz +0 -0
- package/package.json +3 -1
- package/dist/AiChatPanel-E53JJRZX.js.br +0 -0
- package/dist/AiChatPanel-E53JJRZX.js.gz +0 -0
- package/dist/AiChatPanel-JTXC5WWH.mjs.br +0 -0
- package/dist/AiChatPanel-JTXC5WWH.mjs.gz +0 -0
- package/dist/Area3DChartScene-J7G54OH4.js.br +0 -0
- package/dist/Area3DChartScene-J7G54OH4.js.gz +0 -0
- package/dist/Area3DChartScene-JQ2VU73H.mjs.br +0 -0
- package/dist/Area3DChartScene-JQ2VU73H.mjs.gz +0 -0
- package/dist/Bar3DChartScene-5HC7LYBH.mjs.br +0 -0
- package/dist/Bar3DChartScene-5HC7LYBH.mjs.gz +0 -0
- package/dist/Bar3DChartScene-JV3A2P6O.js.br +0 -0
- package/dist/Bar3DChartScene-JV3A2P6O.js.gz +0 -0
- package/dist/Line3DChartScene-4ZAOOU7U.mjs.br +0 -0
- package/dist/Line3DChartScene-4ZAOOU7U.mjs.gz +0 -0
- package/dist/Line3DChartScene-7SN7TVKQ.js.br +0 -0
- package/dist/Line3DChartScene-7SN7TVKQ.js.gz +0 -0
- package/dist/Model3DScene-GQANXXQD.js.br +0 -0
- package/dist/Model3DScene-GQANXXQD.js.gz +0 -0
- package/dist/Model3DScene-GWIBUQ2U.mjs.br +0 -0
- package/dist/Model3DScene-GWIBUQ2U.mjs.gz +0 -0
- package/dist/PieChart3DScene-QPFDRMEA.js.br +0 -0
- package/dist/PieChart3DScene-QPFDRMEA.js.gz +0 -0
- package/dist/PieChart3DScene-RDTOLFTD.mjs.br +0 -0
- package/dist/PieChart3DScene-RDTOLFTD.mjs.gz +0 -0
- package/dist/SurfaceChart3DScene-5JQCRWA5.mjs.br +0 -0
- package/dist/SurfaceChart3DScene-5JQCRWA5.mjs.gz +0 -0
- package/dist/SurfaceChart3DScene-JLYGC7QU.js.br +0 -0
- package/dist/SurfaceChart3DScene-JLYGC7QU.js.gz +0 -0
- package/dist/chunk-G2Z7QULX.js.br +0 -0
- package/dist/chunk-G2Z7QULX.js.gz +0 -0
- package/dist/chunk-H3GHGSGW.js.br +0 -0
- package/dist/chunk-H3GHGSGW.js.gz +0 -0
- package/dist/chunk-HB7DJENT.mjs.br +0 -0
- package/dist/chunk-IVCYND7A.js.br +0 -0
- package/dist/chunk-IVCYND7A.js.gz +0 -0
- package/dist/chunk-M7SNS3DQ.mjs.br +0 -0
- package/dist/chunk-M7SNS3DQ.mjs.gz +0 -0
- package/dist/chunk-PKHTTHA2.mjs.br +0 -0
- package/dist/chunk-PKHTTHA2.mjs.gz +0 -0
- package/dist/chunk-TS2DHMBS.mjs.br +0 -0
- package/dist/chunk-TS2DHMBS.mjs.gz +0 -0
- package/dist/chunk-TWUAZRCG.js.br +0 -0
- package/dist/chunk-TWUAZRCG.js.gz +0 -0
- package/dist/chunk-UGVPKJSU.js.br +0 -0
- package/dist/chunk-UGVPKJSU.js.gz +0 -0
- package/dist/chunk-Y3SA5H5H.mjs.br +0 -0
- 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-
|
|
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,
|
|
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
|
|
7109
|
+
async function renderElementToTiledCanvas(element, scale = 2, backgroundColor, mode = "auto") {
|
|
7119
7110
|
const { width, height } = measureNaturalSize(element);
|
|
7120
|
-
return
|
|
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
|
|
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
|
|
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
|
|
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 {
|
|
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
|
|
7341
|
-
const
|
|
7342
|
-
if (!
|
|
7357
|
+
const { canvas } = await renderElementToTiledCanvas(stageEl, scale);
|
|
7358
|
+
const frame = frameFromCanvas(canvas, maxSide);
|
|
7359
|
+
if (!frame) {
|
|
7343
7360
|
continue;
|
|
7344
7361
|
}
|
|
7345
|
-
|
|
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 =
|
|
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
|