@file-viewer/core 3.0.2 → 3.1.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.
@@ -13,6 +13,88 @@ const toViewerSourceInput = (options = {}) => ({
13
13
  type: options.type,
14
14
  size: options.size,
15
15
  });
16
+ // These options feed renderer selection or rendering itself. Viewer chrome,
17
+ // fitting, watermark, and operation callbacks update in place instead.
18
+ const RENDER_AFFECTING_VIEWER_OPTION_KEYS = [
19
+ 'theme',
20
+ 'rendererMode',
21
+ 'builtinRenderers',
22
+ 'autoRenderers',
23
+ 'preset',
24
+ 'presets',
25
+ 'renderers',
26
+ 'text',
27
+ 'archive',
28
+ 'chm',
29
+ 'pdf',
30
+ 'docx',
31
+ 'presentation',
32
+ 'spreadsheet',
33
+ 'iwork',
34
+ 'wordPerfect',
35
+ 'hangul',
36
+ 'typst',
37
+ 'geo',
38
+ 'data',
39
+ 'binary',
40
+ 'design',
41
+ 'drawing',
42
+ 'cad',
43
+ 'model',
44
+ ];
45
+ const isPlainViewerOptionRecord = (value) => {
46
+ const prototype = Object.getPrototypeOf(value);
47
+ return prototype === Object.prototype || prototype === null;
48
+ };
49
+ const areSameViewerOptionValues = (current, next, pairs = new WeakMap()) => {
50
+ if (Object.is(current, next)) {
51
+ return true;
52
+ }
53
+ if (current === null ||
54
+ next === null ||
55
+ typeof current !== 'object' ||
56
+ typeof next !== 'object') {
57
+ return false;
58
+ }
59
+ const existingPair = pairs.get(current);
60
+ if (existingPair) {
61
+ return existingPair === next;
62
+ }
63
+ pairs.set(current, next);
64
+ if (Array.isArray(current) || Array.isArray(next)) {
65
+ return Array.isArray(current) &&
66
+ Array.isArray(next) &&
67
+ current.length === next.length &&
68
+ current.every((value, index) => areSameViewerOptionValues(value, next[index], pairs));
69
+ }
70
+ if (!isPlainViewerOptionRecord(current) || !isPlainViewerOptionRecord(next)) {
71
+ return false;
72
+ }
73
+ const currentKeys = Object.keys(current).sort();
74
+ const nextKeys = Object.keys(next).sort();
75
+ return currentKeys.length === nextKeys.length &&
76
+ currentKeys.every((key, index) => {
77
+ return key === nextKeys[index] &&
78
+ areSameViewerOptionValues(current[key], next[key], pairs);
79
+ });
80
+ };
81
+ const hasViewerRenderingOptionsChanged = (current, next) => {
82
+ return RENDER_AFFECTING_VIEWER_OPTION_KEYS.some(key => {
83
+ return !areSameViewerOptionValues(current === null || current === void 0 ? void 0 : current[key], next === null || next === void 0 ? void 0 : next[key]);
84
+ });
85
+ };
86
+ const isSameViewerSource = (current, next) => {
87
+ if (!current || !next) {
88
+ return current === next;
89
+ }
90
+ return current.url === next.url &&
91
+ current.file === next.file &&
92
+ current.buffer === next.buffer &&
93
+ current.filename === next.filename &&
94
+ current.name === next.name &&
95
+ current.type === next.type &&
96
+ Object.is(current.size, next.size);
97
+ };
16
98
  const canUseFetch = () => typeof fetch === 'function';
17
99
  const defaultFetchFile = async ({ url, signal }) => {
18
100
  if (!canUseFetch()) {
@@ -326,7 +408,9 @@ export const mountViewer = (container, initialOptions = {}, coreOptions = {}) =>
326
408
  // customer's ShadowRoot. Reusing the ancestor would let that component's
327
409
  // resets override the toolbar and would make our :host rules mutate the
328
410
  // customer's outer custom element.
329
- renderRoot = container.attachShadow({ mode: 'open', delegatesFocus: true });
411
+ // Delegated focus makes Safari taps on renderer controls focus the first
412
+ // toolbar input instead, triggering keyboard zoom and viewport scrolling.
413
+ renderRoot = container.attachShadow({ mode: 'open' });
330
414
  ownedViewerShadowRoots.set(container, renderRoot);
331
415
  }
332
416
  catch {
@@ -345,7 +429,7 @@ export const mountViewer = (container, initialOptions = {}, coreOptions = {}) =>
345
429
  existingHostShadowRoot.appendChild(mountBoundary);
346
430
  if (shouldUseShadowRoot && typeof mountBoundary.attachShadow === 'function') {
347
431
  try {
348
- renderRoot = mountBoundary.attachShadow({ mode: 'open', delegatesFocus: true });
432
+ renderRoot = mountBoundary.attachShadow({ mode: 'open' });
349
433
  }
350
434
  catch {
351
435
  renderRoot = mountBoundary;
@@ -834,7 +918,10 @@ export const mountViewer = (container, initialOptions = {}, coreOptions = {}) =>
834
918
  }
835
919
  };
836
920
  if (currentSource) {
837
- void loadSource(currentSource);
921
+ // The initial declarative source has no caller awaiting it. State changes
922
+ // and the visible error surface remain authoritative without a global
923
+ // unhandled-rejection event for an expected rendering failure.
924
+ void loadSource(currentSource).catch(() => undefined);
838
925
  }
839
926
  controller = {
840
927
  container,
@@ -852,15 +939,33 @@ export const mountViewer = (container, initialOptions = {}, coreOptions = {}) =>
852
939
  var _a;
853
940
  if (disposed)
854
941
  return;
942
+ const nextViewerOptions = (_a = nextOptions.options) !== null && _a !== void 0 ? _a : currentOptions.options;
943
+ const renderingOptionsChanged = hasViewerRenderingOptionsChanged(currentOptions.options, nextViewerOptions);
855
944
  currentOptions = {
856
945
  ...currentOptions,
857
946
  ...nextOptions,
858
- options: (_a = nextOptions.options) !== null && _a !== void 0 ? _a : currentOptions.options,
947
+ options: nextViewerOptions,
859
948
  };
949
+ const nextSource = hasSource(currentOptions)
950
+ ? toViewerSourceInput(currentOptions)
951
+ : null;
952
+ const sameSource = isSameViewerSource(currentSource, nextSource);
953
+ const previousViewState = sameSource && renderingOptionsChanged
954
+ ? instance.getViewState()
955
+ : null;
860
956
  instance.updateOptions(currentOptions.options || {});
861
957
  renderToolbar();
862
- if (hasSource(currentOptions)) {
863
- await loadSource(toViewerSourceInput(currentOptions));
958
+ if (sameSource && !renderingOptionsChanged) {
959
+ return;
960
+ }
961
+ if (nextSource) {
962
+ const session = await loadSource(nextSource);
963
+ if (session && previousViewState) {
964
+ await instance.applyViewState(previousViewState, {
965
+ action: 'restore',
966
+ source: 'api',
967
+ });
968
+ }
864
969
  }
865
970
  else {
866
971
  currentSource = null;
@@ -3,7 +3,7 @@ export type FileViewerThemeMode = 'light' | 'dark' | 'system';
3
3
  export type FileViewerResolvedThemeMode = Exclude<FileViewerThemeMode, 'system'>;
4
4
  export type FileViewerLocale = 'auto' | 'zh-CN' | 'en-US' | 'ja-JP' | 'de-DE' | (string & {});
5
5
  export type FileViewerStyleIsolation = 'auto' | 'shadow' | 'scoped' | 'none';
6
- export type FileViewerMessageKey = 'toolbar.zoomGroup' | 'toolbar.zoomOut' | 'toolbar.zoomIn' | 'toolbar.zoomReset' | 'toolbar.download' | 'toolbar.downloadTitle' | 'toolbar.print' | 'toolbar.printTitle' | 'toolbar.printDirect' | 'toolbar.printMask' | 'toolbar.printMaskTitle' | 'toolbar.printMaskAdd' | 'toolbar.printMaskClear' | 'toolbar.printMaskCancel' | 'toolbar.printMaskConfirm' | 'toolbar.printMaskHint' | 'toolbar.printStampUpload' | 'toolbar.printStampRemove' | 'toolbar.printStampResize' | 'toolbar.exportHtml' | 'toolbar.exportHtmlTitle' | 'toolbar.search' | 'toolbar.searchPlaceholder' | 'toolbar.searchPrevious' | 'toolbar.searchNext' | 'toolbar.searchClear' | 'toolbar.theme' | 'toolbar.themeToLight' | 'toolbar.themeToDark' | 'state.ready.title' | 'state.ready.message' | 'state.empty.title' | 'state.empty.message' | 'state.unsupported.install.title' | 'state.unsupported.install.message' | 'state.unsupported.install.description' | 'state.unsupported.title' | 'state.unsupported.message' | 'state.unsupported.description' | 'state.error.title' | 'preview.downloading' | 'preview.streamingPdf' | 'preview.reading' | 'error.download' | 'error.print' | 'error.exportHtml' | 'error.noDownloadSource' | 'error.noExportContent' | 'error.printUnavailable' | 'error.printWindowBlocked' | 'error.remoteDownload' | 'error.localRead' | 'error.load' | 'error.stream' | 'error.beforeOperation' | 'error.unknown' | 'error.blobUnavailable' | 'error.sourceUnsupported' | 'error.fileReadArrayBuffer' | 'error.fileReadDataUrl' | 'error.fileReadText' | 'error.imageDataUrlRead' | 'operation.download' | 'operation.print' | 'operation.exportHtml' | 'operation.zoomIn' | 'operation.zoomOut' | 'operation.zoomReset' | 'pdf.toolbar.toggleNavigation' | 'pdf.toolbar.previousPage' | 'pdf.toolbar.nextPage' | 'pdf.toolbar.fitWidth' | 'pdf.toolbar.zoomOut' | 'pdf.toolbar.zoomIn' | 'pdf.toolbar.rotateLeft' | 'pdf.toolbar.rotateRight' | 'pdf.nav.typeLabel' | 'pdf.nav.pagesTab' | 'pdf.nav.outlineTab' | 'pdf.nav.pagesTitle' | 'pdf.nav.outlineTitle' | 'pdf.nav.pageCount' | 'pdf.nav.itemCount' | 'pdf.nav.pageLabel' | 'pdf.nav.outlineEmpty' | 'pdf.nav.outlineFallbackTitle' | 'pdf.thumbnail.alt' | 'pdf.state.loading' | 'pdf.error.browserWindow' | 'pdf.error.missingSource' | 'pdf.error.loadFailed' | 'pdf.error.notLoaded' | 'pdf.error.unloaded' | 'pdf.error.canvasUnavailable' | 'pdf.export.pageTitle' | 'spreadsheet.loading.kicker' | 'spreadsheet.loading.title' | 'spreadsheet.loading.hint' | 'spreadsheet.loading.streaming' | 'spreadsheet.tabs.ariaLabel' | 'spreadsheet.state.parsingWorkbook' | 'spreadsheet.state.preparingSheet' | 'spreadsheet.state.preparingSheetNamed' | 'spreadsheet.state.cachedRows' | 'spreadsheet.state.rows' | 'spreadsheet.state.rowsAndColumns' | 'spreadsheet.error.parseFailed' | 'spreadsheet.error.workerFailed' | 'word.error.invalidDocx' | 'word.error.missingOdfContent' | 'word.error.odfXmlParseFailed' | 'word.title.rtf' | 'word.title.openDocumentPresentation' | 'word.title.openDocumentText' | 'word.page.fallback' | 'word.page.empty' | 'word.body' | 'word.body.empty' | 'ofd.toolbar.pageNavigation' | 'ofd.toolbar.documentPages' | 'ofd.toolbar.previousPage' | 'ofd.toolbar.nextPage' | 'ofd.toolbar.pageStatus' | 'ofd.toolbar.noPages' | 'ofd.state.loading' | 'ofd.error.empty' | 'ofd.error.parseFailed' | 'presentation.state.loading' | 'presentation.error.title' | 'presentation.error.parseFailed' | 'presentation.ppt.state.loading' | 'presentation.ppt.error.title' | 'presentation.ppt.error.parseFailed' | 'presentation.ppt.error.assetHint' | 'presentation.slideshow.start' | 'presentation.slideshow.exit' | 'presentation.slideshow.hint' | 'archive.error.nestedUnsupported' | 'archive.loading.readingDirectory' | 'archive.loading.readingDirectoryHint' | 'archive.search.placeholder' | 'archive.sidebar.hide' | 'archive.sidebar.show' | 'archive.preview.title' | 'archive.preview.chooseFile' | 'archive.preview.downloadFile' | 'archive.error.title' | 'archive.stats.summary' | 'archive.warning.encrypted' | 'archive.password.title' | 'archive.password.description' | 'archive.password.placeholder' | 'archive.password.invalid' | 'archive.password.required' | 'archive.password.cancel' | 'archive.password.confirm' | 'archive.error.passwordRequired' | 'archive.error.encryptedRequiresWorker' | 'archive.empty.title' | 'archive.empty.message' | 'archive.loading.initializingCandidate' | 'archive.loading.initializingCandidateHint' | 'archive.error.candidateInitTimeout' | 'archive.error.encryptedCheckTimeout' | 'archive.loading.directoryReadyHint' | 'archive.error.candidateReadTimeout' | 'archive.loading.workerFallback' | 'archive.loading.workerFallbackHint' | 'archive.notice.workerFallback' | 'archive.error.tooLarge' | 'archive.loading.initializingWorker' | 'archive.loading.initializingWorkerHint' | 'archive.error.workerInitFailed' | 'archive.error.workerUnsupported' | 'archive.error.indexedDbUnavailable' | 'archive.error.entryTooLarge' | 'archive.loading.extracting' | 'archive.loading.rendering' | 'archive.loading.exporting' | 'media.audio.title' | 'media.audio.description' | 'media.audio.unsupported' | 'media.video.title' | 'media.video.unsupported' | 'media.video.hlsHint' | 'media.video.codecUnsupportedBadge' | 'media.video.codecUnsupportedTitle' | 'media.video.codecUnsupportedDescription' | 'media.video.codecUnsupportedAction' | 'media.video.softwareLoading' | 'media.video.softwareBadge' | 'media.video.play' | 'media.video.pause' | 'media.video.seek' | 'media.video.mute' | 'media.video.unmute' | 'media.video.fullscreen' | 'media.midi.title' | 'media.midi.loading' | 'media.midi.trackHeader' | 'media.midi.instrumentHeader' | 'media.midi.channelHeader' | 'media.midi.noteCountHeader' | 'media.midi.durationHeader' | 'media.midi.durationStat' | 'media.midi.trackStat' | 'media.midi.noteStat' | 'media.midi.parseFailed' | 'email.mbox.subject' | 'email.mbox.summary' | 'email.error.title' | 'email.meta.from' | 'email.meta.to' | 'email.meta.cc' | 'email.meta.date' | 'email.tabs.text' | 'email.tabs.headers' | 'email.attachments.title' | 'email.attachments.empty' | 'email.attachments.download' | 'email.attachments.opening' | 'email.attachments.nestedUnavailable' | 'email.loading.parsing' | 'data.font.sample' | 'data.error.fontFaceUnsupported' | 'data.title.font' | 'data.title.sqlite' | 'data.title.parquet' | 'data.title.avro' | 'data.title.wasm' | 'data.title.eps' | 'data.title.ai' | 'data.title.webarchive' | 'data.title.summary' | 'data.label.format' | 'data.label.size' | 'data.label.rendering' | 'data.label.objects' | 'data.label.sampleTable' | 'data.label.rows' | 'data.label.columns' | 'data.label.sampleRows' | 'data.label.imports' | 'data.label.exports' | 'data.label.magic' | 'data.label.note' | 'data.label.container' | 'data.value.schemaRead' | 'data.value.schemaUnread' | 'data.note.aiSummary' | 'data.note.postscriptSummary' | 'data.note.webarchive' | 'data.image.alt' | 'psd.title' | 'psd.action.fit' | 'psd.action.showAll' | 'psd.action.hideAll' | 'psd.layers.title' | 'psd.layers.redrawable' | 'psd.layers.empty' | 'psd.layers.hidden' | 'drawing.error.viewerLoadFailed' | 'drawing.error.excalidrawEmpty' | 'drawing.error.excalidrawTimeout' | 'drawing.error.drawioParseFailed' | 'drawing.error.drawioNoModel' | 'drawing.error.drawioNoElements' | 'drawing.error.viewerInitFailed' | 'drawing.error.drawioTimeout' | 'drawing.error.svgParseFailed' | 'drawing.error.plantumlRenderFailed' | 'drawing.title.excalidraw' | 'drawing.title.mermaid' | 'drawing.title.plantuml' | 'drawing.title.drawio' | 'drawing.toolbar.zoomOut' | 'drawing.toolbar.zoomIn' | 'drawing.toolbar.fit' | 'drawing.toolbar.fitWidth' | 'drawing.state.loading' | 'text.code.loadingHighlight' | 'text.code.formattedPreview' | 'text.code.showOriginal' | 'text.code.showFormatted' | 'text.code.indexingLargeFile' | 'text.code.virtualized' | 'text.code.firstSegment' | 'text.code.previousSegment' | 'text.code.nextSegment' | 'text.code.lastSegment' | 'ebook.toc' | 'ebook.reading' | 'ebook.itemCount' | 'epub.title' | 'epub.previousPage' | 'epub.nextPage' | 'epub.loading' | 'epub.chapterFallback' | 'epub.renderIncomplete' | 'umd.title' | 'umd.previousChapter' | 'umd.nextChapter' | 'umd.loading' | 'umd.emptyContent' | 'umd.chapterFallback' | 'umd.galleryFallback' | 'umd.warningBodyTooShort' | 'umd.error.unexpectedEnd' | 'umd.error.invalidFile' | 'typst.summaryRenderer' | 'typst.pageSummary.empty' | 'typst.pageSummary.ready' | 'typst.status.compiling' | 'typst.status.failed' | 'typst.status.rendered' | 'typst.loading.title' | 'typst.loading.hint' | 'typst.error.title' | 'typst.error.timeout' | 'typst.error.timeoutHint' | 'typst.error.assetHint' | 'typst.error.svgParseFailed' | 'typst.error.wasmLoadFailed' | 'xmind.toolbar.zoomOut' | 'xmind.toolbar.zoomIn' | 'xmind.toolbar.fit' | 'xmind.toolbar.fitTitle' | 'xmind.state.loading' | 'xmind.stats.nodes' | 'xmind.stats.depth' | 'xmind.stats.theme' | 'xmind.stats.template' | 'xmind.badge.paused' | 'xmind.badge.collapsed' | 'xmind.badge.floating' | 'xmind.badge.summary' | 'xmind.badge.callout' | 'xmind.imageResource' | 'xmind.error.unrecognized' | 'xmind.error.noCanvas' | 'cad.toolbar.fit' | 'cad.toolbar.zoomOut' | 'cad.toolbar.zoomIn' | 'cad.toolbar.colorSource' | 'cad.toolbar.monochrome' | 'cad.layers.title' | 'cad.layers.count' | 'cad.layers.merged' | 'cad.inspector.title' | 'cad.inspector.entities' | 'cad.inspector.blocks' | 'cad.inspector.pages' | 'cad.inspector.drawn' | 'cad.state.loadingViewer' | 'cad.state.parsing' | 'cad.error.parseFailed' | 'image.alt' | 'image.toolbar.rotation' | 'image.toolbar.rotateLeft' | 'image.toolbar.rotateRight' | 'image.lightbox.alt' | 'image.lightbox.close' | 'gitBundle.error.invalid' | 'gitBundle.error.missingPack' | 'gitBundle.notice.delta' | 'gitBundle.title.history' | 'gitBundle.title.fileTree' | 'gitBundle.file.choose' | 'gitBundle.file.noTree' | 'gitBundle.file.none' | 'gitBundle.history.empty' | 'gitBundle.toolbar.summary' | 'gitBundle.meta.bundle' | 'gitBundle.meta.refs' | 'gitBundle.meta.commits' | 'gitBundle.meta.objects' | 'gitBundle.meta.deltas' | 'gitBundle.meta.objectFormat' | 'gitBundle.meta.objectTypes' | 'geo.error.unrecognized' | 'geo.error.xmlParseFailed' | 'geo.error.unsupported' | 'geo.title' | 'geo.featureCount' | 'geo.bounds' | 'geo.geometryTypes' | 'geo.aria' | 'geo.loading' | 'geo.projection' | 'geo.engine' | 'geo.basemap' | 'geo.basemap.offline' | 'geo.basemap.custom' | 'geo.engine.maplibre' | 'geo.engine.svg' | 'geo.error.projection' | 'geo.action.fit' | 'model.toolbar.fit' | 'model.toolbar.rotate' | 'model.toolbar.wireframe' | 'model.toolbar.grid' | 'model.toolbar.axes' | 'model.state.loadingSummary' | 'model.state.loading' | 'model.state.loaded' | 'model.state.parseFailed' | 'model.summary.meshes' | 'model.summary.points' | 'model.error.daeEmpty' | 'model.error.unsupported' | 'model.error.parseFailed' | 'model.notice.signature' | 'loading.generic.label' | 'loading.generic.hint' | 'loading.word.label' | 'loading.word.hint' | 'loading.wordWorker.hint' | 'loading.sheet.label' | 'loading.sheet.hint' | 'loading.csv.label' | 'loading.csv.hint' | 'loading.presentation.label' | 'loading.presentation.hint' | 'loading.pdf.label' | 'loading.pdf.hint' | 'loading.ofd.label' | 'loading.ofd.hint' | 'loading.archive.label' | 'loading.archive.hint' | 'loading.email.label' | 'loading.email.hint' | 'loading.msg.hint' | 'loading.eda.label' | 'loading.eda.hint' | 'loading.cad.label' | 'loading.cad.hint' | 'loading.dwg.hint' | 'loading.dwf.hint' | 'loading.dwfx.hint' | 'loading.xps.hint' | 'loading.drawio.label' | 'loading.drawio.hint' | 'loading.excalidraw.label' | 'loading.excalidraw.hint' | 'loading.epub.label' | 'loading.epub.hint' | 'loading.umd.label' | 'loading.umd.hint' | 'loading.image.label' | 'loading.image.hint' | 'loading.video.label' | 'loading.video.hint' | 'loading.audio.label' | 'loading.audio.hint';
6
+ export type FileViewerMessageKey = 'toolbar.zoomGroup' | 'toolbar.zoomOut' | 'toolbar.zoomIn' | 'toolbar.zoomReset' | 'toolbar.download' | 'toolbar.downloadTitle' | 'toolbar.print' | 'toolbar.printTitle' | 'toolbar.printDirect' | 'toolbar.printMask' | 'toolbar.printMaskTitle' | 'toolbar.printMaskAdd' | 'toolbar.printMaskClear' | 'toolbar.printMaskCancel' | 'toolbar.printMaskConfirm' | 'toolbar.printMaskHint' | 'toolbar.printStampUpload' | 'toolbar.printStampRemove' | 'toolbar.printStampResize' | 'toolbar.exportHtml' | 'toolbar.exportHtmlTitle' | 'toolbar.search' | 'toolbar.searchPlaceholder' | 'toolbar.searchPrevious' | 'toolbar.searchNext' | 'toolbar.searchClear' | 'toolbar.searchClose' | 'toolbar.more' | 'toolbar.theme' | 'toolbar.themeToLight' | 'toolbar.themeToDark' | 'state.ready.title' | 'state.ready.message' | 'state.empty.title' | 'state.empty.message' | 'state.unsupported.install.title' | 'state.unsupported.install.message' | 'state.unsupported.install.description' | 'state.unsupported.title' | 'state.unsupported.message' | 'state.unsupported.description' | 'state.error.title' | 'preview.downloading' | 'preview.streamingPdf' | 'preview.reading' | 'error.download' | 'error.print' | 'error.exportHtml' | 'error.noDownloadSource' | 'error.noExportContent' | 'error.printUnavailable' | 'error.printWindowBlocked' | 'error.remoteDownload' | 'error.localRead' | 'error.load' | 'error.stream' | 'error.beforeOperation' | 'error.unknown' | 'error.blobUnavailable' | 'error.sourceUnsupported' | 'error.fileReadArrayBuffer' | 'error.fileReadDataUrl' | 'error.fileReadText' | 'error.imageDataUrlRead' | 'operation.download' | 'operation.print' | 'operation.exportHtml' | 'operation.zoomIn' | 'operation.zoomOut' | 'operation.zoomReset' | 'pdf.toolbar.toggleNavigation' | 'pdf.toolbar.previousPage' | 'pdf.toolbar.nextPage' | 'pdf.toolbar.fitWidth' | 'pdf.toolbar.zoomOut' | 'pdf.toolbar.zoomIn' | 'pdf.toolbar.rotateLeft' | 'pdf.toolbar.rotateRight' | 'pdf.nav.typeLabel' | 'pdf.nav.pagesTab' | 'pdf.nav.outlineTab' | 'pdf.nav.pagesTitle' | 'pdf.nav.outlineTitle' | 'pdf.nav.pageCount' | 'pdf.nav.itemCount' | 'pdf.nav.pageLabel' | 'pdf.nav.outlineEmpty' | 'pdf.nav.outlineFallbackTitle' | 'pdf.thumbnail.alt' | 'pdf.state.loading' | 'pdf.error.browserWindow' | 'pdf.error.missingSource' | 'pdf.error.loadFailed' | 'pdf.error.notLoaded' | 'pdf.error.unloaded' | 'pdf.error.canvasUnavailable' | 'pdf.export.pageTitle' | 'spreadsheet.loading.kicker' | 'spreadsheet.loading.title' | 'spreadsheet.loading.hint' | 'spreadsheet.loading.streaming' | 'spreadsheet.tabs.ariaLabel' | 'spreadsheet.state.parsingWorkbook' | 'spreadsheet.state.preparingSheet' | 'spreadsheet.state.preparingSheetNamed' | 'spreadsheet.state.cachedRows' | 'spreadsheet.state.rows' | 'spreadsheet.state.rowsAndColumns' | 'spreadsheet.error.parseFailed' | 'spreadsheet.error.workerFailed' | 'word.error.invalidDocx' | 'word.error.missingOdfContent' | 'word.error.odfXmlParseFailed' | 'word.title.rtf' | 'word.title.openDocumentPresentation' | 'word.title.openDocumentText' | 'word.page.fallback' | 'word.page.empty' | 'word.body' | 'word.body.empty' | 'ofd.toolbar.pageNavigation' | 'ofd.toolbar.documentPages' | 'ofd.toolbar.previousPage' | 'ofd.toolbar.nextPage' | 'ofd.toolbar.pageStatus' | 'ofd.toolbar.noPages' | 'ofd.state.loading' | 'ofd.error.empty' | 'ofd.error.parseFailed' | 'presentation.state.loading' | 'presentation.error.title' | 'presentation.error.parseFailed' | 'presentation.ppt.state.loading' | 'presentation.ppt.error.title' | 'presentation.ppt.error.parseFailed' | 'presentation.ppt.error.assetHint' | 'presentation.slideshow.start' | 'presentation.slideshow.exit' | 'presentation.slideshow.hint' | 'archive.error.nestedUnsupported' | 'archive.loading.readingDirectory' | 'archive.loading.readingDirectoryHint' | 'archive.search.placeholder' | 'archive.sidebar.hide' | 'archive.sidebar.show' | 'archive.preview.title' | 'archive.preview.chooseFile' | 'archive.preview.downloadFile' | 'archive.error.title' | 'archive.stats.summary' | 'archive.warning.encrypted' | 'archive.password.title' | 'archive.password.description' | 'archive.password.placeholder' | 'archive.password.invalid' | 'archive.password.required' | 'archive.password.cancel' | 'archive.password.confirm' | 'archive.error.passwordRequired' | 'archive.error.encryptedRequiresWorker' | 'archive.empty.title' | 'archive.empty.message' | 'archive.loading.initializingCandidate' | 'archive.loading.initializingCandidateHint' | 'archive.error.candidateInitTimeout' | 'archive.error.encryptedCheckTimeout' | 'archive.loading.directoryReadyHint' | 'archive.error.candidateReadTimeout' | 'archive.loading.workerFallback' | 'archive.loading.workerFallbackHint' | 'archive.notice.workerFallback' | 'archive.error.tooLarge' | 'archive.loading.initializingWorker' | 'archive.loading.initializingWorkerHint' | 'archive.error.workerInitFailed' | 'archive.error.workerUnsupported' | 'archive.error.indexedDbUnavailable' | 'archive.error.entryTooLarge' | 'archive.loading.extracting' | 'archive.loading.rendering' | 'archive.loading.exporting' | 'media.audio.title' | 'media.audio.description' | 'media.audio.unsupported' | 'media.video.title' | 'media.video.unsupported' | 'media.video.hlsHint' | 'media.video.codecUnsupportedBadge' | 'media.video.codecUnsupportedTitle' | 'media.video.codecUnsupportedDescription' | 'media.video.codecUnsupportedAction' | 'media.video.softwareLoading' | 'media.video.softwareBadge' | 'media.video.play' | 'media.video.pause' | 'media.video.seek' | 'media.video.mute' | 'media.video.unmute' | 'media.video.fullscreen' | 'media.midi.title' | 'media.midi.loading' | 'media.midi.trackHeader' | 'media.midi.instrumentHeader' | 'media.midi.channelHeader' | 'media.midi.noteCountHeader' | 'media.midi.durationHeader' | 'media.midi.durationStat' | 'media.midi.trackStat' | 'media.midi.noteStat' | 'media.midi.parseFailed' | 'email.mbox.subject' | 'email.mbox.summary' | 'email.error.title' | 'email.meta.from' | 'email.meta.to' | 'email.meta.cc' | 'email.meta.date' | 'email.tabs.text' | 'email.tabs.headers' | 'email.attachments.title' | 'email.attachments.empty' | 'email.attachments.download' | 'email.attachments.opening' | 'email.attachments.nestedUnavailable' | 'email.loading.parsing' | 'data.font.sample' | 'data.error.fontFaceUnsupported' | 'data.title.font' | 'data.title.sqlite' | 'data.title.parquet' | 'data.title.avro' | 'data.title.wasm' | 'data.title.eps' | 'data.title.ai' | 'data.title.webarchive' | 'data.title.summary' | 'data.label.format' | 'data.label.size' | 'data.label.rendering' | 'data.label.objects' | 'data.label.sampleTable' | 'data.label.rows' | 'data.label.columns' | 'data.label.sampleRows' | 'data.label.imports' | 'data.label.exports' | 'data.label.magic' | 'data.label.note' | 'data.label.container' | 'data.value.schemaRead' | 'data.value.schemaUnread' | 'data.note.aiSummary' | 'data.note.postscriptSummary' | 'data.note.webarchive' | 'data.image.alt' | 'psd.title' | 'psd.action.fit' | 'psd.action.showAll' | 'psd.action.hideAll' | 'psd.layers.title' | 'psd.layers.redrawable' | 'psd.layers.empty' | 'psd.layers.hidden' | 'drawing.error.viewerLoadFailed' | 'drawing.error.excalidrawEmpty' | 'drawing.error.excalidrawTimeout' | 'drawing.error.drawioParseFailed' | 'drawing.error.drawioNoModel' | 'drawing.error.drawioNoElements' | 'drawing.error.viewerInitFailed' | 'drawing.error.drawioTimeout' | 'drawing.error.svgParseFailed' | 'drawing.error.plantumlRenderFailed' | 'drawing.title.excalidraw' | 'drawing.title.mermaid' | 'drawing.title.plantuml' | 'drawing.title.drawio' | 'drawing.toolbar.zoomOut' | 'drawing.toolbar.zoomIn' | 'drawing.toolbar.fit' | 'drawing.toolbar.fitWidth' | 'drawing.state.loading' | 'text.code.loadingHighlight' | 'text.code.formattedPreview' | 'text.code.showOriginal' | 'text.html.preview' | 'text.html.source' | 'text.html.safePreview' | 'text.code.showFormatted' | 'text.code.indexingLargeFile' | 'text.code.virtualized' | 'text.code.firstSegment' | 'text.code.previousSegment' | 'text.code.nextSegment' | 'text.code.lastSegment' | 'ebook.toc' | 'ebook.reading' | 'ebook.itemCount' | 'epub.title' | 'epub.previousPage' | 'epub.nextPage' | 'epub.loading' | 'epub.chapterFallback' | 'epub.renderIncomplete' | 'umd.title' | 'umd.previousChapter' | 'umd.nextChapter' | 'umd.loading' | 'umd.emptyContent' | 'umd.chapterFallback' | 'umd.galleryFallback' | 'umd.warningBodyTooShort' | 'umd.error.unexpectedEnd' | 'umd.error.invalidFile' | 'typst.summaryRenderer' | 'typst.pageSummary.empty' | 'typst.pageSummary.ready' | 'typst.status.compiling' | 'typst.status.failed' | 'typst.status.rendered' | 'typst.loading.title' | 'typst.loading.hint' | 'typst.error.title' | 'typst.error.timeout' | 'typst.error.timeoutHint' | 'typst.error.assetHint' | 'typst.error.svgParseFailed' | 'typst.error.wasmLoadFailed' | 'xmind.toolbar.zoomOut' | 'xmind.toolbar.zoomIn' | 'xmind.toolbar.fit' | 'xmind.toolbar.fitTitle' | 'xmind.state.loading' | 'xmind.stats.nodes' | 'xmind.stats.depth' | 'xmind.stats.theme' | 'xmind.stats.template' | 'xmind.badge.paused' | 'xmind.badge.collapsed' | 'xmind.badge.floating' | 'xmind.badge.summary' | 'xmind.badge.callout' | 'xmind.imageResource' | 'xmind.error.unrecognized' | 'xmind.error.noCanvas' | 'cad.toolbar.fit' | 'cad.toolbar.zoomOut' | 'cad.toolbar.zoomIn' | 'cad.toolbar.colorSource' | 'cad.toolbar.monochrome' | 'cad.toolbar.exportImage' | 'cad.layers.title' | 'cad.layers.count' | 'cad.layers.merged' | 'cad.inspector.title' | 'cad.inspector.entities' | 'cad.inspector.blocks' | 'cad.inspector.pages' | 'cad.inspector.drawn' | 'cad.state.loadingViewer' | 'cad.state.parsing' | 'cad.error.parseFailed' | 'cad.error.exportFailed' | 'image.alt' | 'image.toolbar.rotation' | 'image.toolbar.rotateLeft' | 'image.toolbar.rotateRight' | 'image.lightbox.alt' | 'image.lightbox.close' | 'gitBundle.error.invalid' | 'gitBundle.error.missingPack' | 'gitBundle.notice.delta' | 'gitBundle.title.history' | 'gitBundle.title.fileTree' | 'gitBundle.file.choose' | 'gitBundle.file.noTree' | 'gitBundle.file.none' | 'gitBundle.history.empty' | 'gitBundle.toolbar.summary' | 'gitBundle.meta.bundle' | 'gitBundle.meta.refs' | 'gitBundle.meta.commits' | 'gitBundle.meta.objects' | 'gitBundle.meta.deltas' | 'gitBundle.meta.objectFormat' | 'gitBundle.meta.objectTypes' | 'geo.error.unrecognized' | 'geo.error.xmlParseFailed' | 'geo.error.unsupported' | 'geo.title' | 'geo.featureCount' | 'geo.bounds' | 'geo.geometryTypes' | 'geo.aria' | 'geo.loading' | 'geo.projection' | 'geo.engine' | 'geo.basemap' | 'geo.basemap.offline' | 'geo.basemap.custom' | 'geo.engine.maplibre' | 'geo.engine.svg' | 'geo.error.projection' | 'geo.action.fit' | 'model.toolbar.fit' | 'model.toolbar.rotate' | 'model.toolbar.wireframe' | 'model.toolbar.grid' | 'model.toolbar.axes' | 'model.state.loadingSummary' | 'model.state.loading' | 'model.state.loaded' | 'model.state.parseFailed' | 'model.summary.meshes' | 'model.summary.points' | 'model.error.daeEmpty' | 'model.error.unsupported' | 'model.error.parseFailed' | 'model.notice.signature' | 'loading.generic.label' | 'loading.generic.hint' | 'loading.word.label' | 'loading.word.hint' | 'loading.wordWorker.hint' | 'loading.sheet.label' | 'loading.sheet.hint' | 'loading.csv.label' | 'loading.csv.hint' | 'loading.presentation.label' | 'loading.presentation.hint' | 'loading.pdf.label' | 'loading.pdf.hint' | 'loading.ofd.label' | 'loading.ofd.hint' | 'loading.archive.label' | 'loading.archive.hint' | 'loading.email.label' | 'loading.email.hint' | 'loading.msg.hint' | 'loading.eda.label' | 'loading.eda.hint' | 'loading.cad.label' | 'loading.cad.hint' | 'loading.dwg.hint' | 'loading.dwf.hint' | 'loading.dwfx.hint' | 'loading.xps.hint' | 'loading.drawio.label' | 'loading.drawio.hint' | 'loading.excalidraw.label' | 'loading.excalidraw.hint' | 'loading.epub.label' | 'loading.epub.hint' | 'loading.umd.label' | 'loading.umd.hint' | 'loading.image.label' | 'loading.image.hint' | 'loading.video.label' | 'loading.video.hint' | 'loading.audio.label' | 'loading.audio.hint';
7
7
  export type FileViewerMessageParams = Record<string, string | number | boolean | null | undefined>;
8
8
  export type FileViewerMessageResolver = (key: FileViewerMessageKey, params: FileViewerMessageParams, locale: FileViewerLocale) => string | undefined;
9
9
  export type FileViewerMessages = Partial<Record<FileViewerMessageKey, string>> | FileViewerMessageResolver;
@@ -204,6 +204,8 @@ export interface FileViewerPdfBoundingBox {
204
204
  label?: string;
205
205
  }
206
206
  export interface FileViewerDocxOptions {
207
+ /** DOC/DOCX 默认保留插入和删除修订;final 显示定稿,original 显示修订前原稿。 */
208
+ reviewMode?: 'all' | 'final' | 'original';
207
209
  worker?: boolean;
208
210
  workerUrl?: string;
209
211
  workerJsZipUrl?: string;
@@ -371,6 +373,11 @@ export interface FileRenderContext {
371
373
  registerExportAdapter?: (adapter: FileRenderExportAdapter | null) => void;
372
374
  registerThumbnailAdapter?: (adapter: FileRenderThumbnailAdapter | null) => void;
373
375
  renderPurpose?: FileViewerRenderPurpose;
376
+ /** Derived-image download, guarded by the owning viewer's permissions, hooks and request version. */
377
+ requestSnapshotDownload?: (create: (watermark: FileViewerOptions['watermark']) => Promise<{
378
+ blob: Blob;
379
+ filename: string;
380
+ }>) => Promise<boolean>;
374
381
  onProgressiveRender?: () => void;
375
382
  renderNestedBuffer?: (buffer: ArrayBuffer, type: string, target: HTMLDivElement, context?: FileRenderContext) => Promise<FileViewerRenderedInstance | undefined>;
376
383
  }
@@ -422,6 +429,19 @@ export interface FileViewerModelOptions {
422
429
  export interface FileViewerDataOptions {
423
430
  sqlWasmUrl?: string;
424
431
  }
432
+ /** Limits for the explicit, read-only binary inspector renderer. */
433
+ export interface FileViewerBinaryInspectorOptions {
434
+ /** Whole-input ceiling before the renderer copies bytes into its Worker. Defaults to 16 MiB. */
435
+ maxFileBytes?: number;
436
+ /** Maximum time allowed for one structure-template pass. Defaults to 5 seconds. */
437
+ maxParseMilliseconds?: number;
438
+ /** Maximum structure nodes returned from the Worker. Defaults to 512. */
439
+ maxStructureNodes?: number;
440
+ /** Maximum structure-tree nesting depth. Defaults to 16. */
441
+ maxStructureDepth?: number;
442
+ /** Maximum decoded string bytes in one displayed field. Defaults to 4 KiB. */
443
+ maxStringBytes?: number;
444
+ }
425
445
  export type FileViewerIllustratorMode = 'auto' | 'pdf' | 'native';
426
446
  /** Resource budgets forwarded to the standalone illustrator-pgf Worker. */
427
447
  export interface FileViewerIllustratorLimits {
@@ -740,10 +760,12 @@ export interface FileViewerCadOptions {
740
760
  renderer?: FileViewerCadRenderer;
741
761
  /** Initial CAD color policy. `monochrome` applies one plot color without mutating source data. */
742
762
  colorMode?: FileViewerCadColorMode;
743
- /** CSS color used by monochrome mode. Defaults to the CAD foreground color. */
763
+ /** CSS color used by monochrome mode. Defaults to black (#000000). */
744
764
  monochromeColor?: string;
745
765
  /** Shows the CAD toolbar color-mode toggle. Defaults to true. */
746
766
  showColorModeToggle?: boolean;
767
+ /** Show native PNG/JPEG snapshot downloads. Download/export permissions still apply. */
768
+ showImageExport?: boolean;
747
769
  preferDwgWasm?: boolean;
748
770
  includePaperSpace?: boolean;
749
771
  maxInsertDepth?: number;
@@ -761,6 +783,7 @@ export interface FileViewerCadOptions {
761
783
  fitPadding?: number;
762
784
  dwfPreferWebgl?: boolean;
763
785
  dwfPreferWasm?: boolean;
786
+ /** Explicit DWF background override; otherwise follows the current color mode. */
764
787
  dwfBackground?: string;
765
788
  dwfMaxDevicePixelRatio?: number;
766
789
  dwfMaxCanvasPixels?: number;
@@ -771,6 +794,7 @@ export interface FileViewerCadOptions {
771
794
  dwfMaxOverviewStrokeCssPx?: number;
772
795
  dwfMinTextCssPx?: number;
773
796
  dwfMinFilledAreaCssPx?: number;
797
+ /** Default background is dark for source colors and white for monochrome. Explicit colors are retained. */
774
798
  canvasOptions?: Record<string, unknown>;
775
799
  }
776
800
  export type FileViewerRendererMode = 'extend' | 'replace';
@@ -802,6 +826,8 @@ export interface FileViewerAiOptions {
802
826
  chunkOverlap?: number;
803
827
  }
804
828
  export interface FileViewerTextOptions {
829
+ /** Initial HTML/HTM view. Preview is static, sandboxed, and offline; defaults to preview. */
830
+ htmlView?: 'preview' | 'source';
805
831
  /**
806
832
  * Source encoding. Defaults to `auto`: BOM and UTF-16 structure first,
807
833
  * then strict UTF-8, with GB18030 (including GBK) as the final fallback.
@@ -974,6 +1000,7 @@ export interface FileViewerOptions {
974
1000
  typst?: FileViewerTypstOptions;
975
1001
  geo?: FileViewerGeoOptions;
976
1002
  data?: FileViewerDataOptions;
1003
+ binary?: FileViewerBinaryInspectorOptions;
977
1004
  design?: FileViewerDesignOptions;
978
1005
  drawing?: FileViewerDrawingOptions;
979
1006
  cad?: FileViewerCadOptions;
@@ -22,8 +22,8 @@ export { DEFAULT_FILE_VIEWER_SOURCE_FILENAME, createFileViewerTextDecoder, decod
22
22
  export type { DecodedFileViewerText, FileViewerReadResult, FileViewerTextEncoding, ResolvedFileViewerTextEncoding, ResolvedFileViewerTextSource, } from './source';
23
23
  export { cancelFileViewerPreviewRequest, DEFAULT_FILE_VIEWER_PREVIEW_LOAD_ERROR_LOGGER, DEFAULT_FILE_VIEWER_STREAMING_PDF_FILENAME, DEFAULT_PDF_RANGE_CHUNK_SIZE, FILE_VIEWER_PREVIEW_LOAD_ERROR_PREFIXES, FILE_VIEWER_REMOTE_MISSING_DATA_ERROR_MESSAGE, applyFileViewerEmptyPreviewState, applyFileViewerPreviewFilenameState, applyFileViewerPreviewRequestResetState, applyFileViewerPreviewSourceUrlState, applyFileViewerReadPreviewState, applyFileViewerRenderReadinessState, commitFileViewerEmptyPreviewResetState, commitFileViewerLoadStartState, commitFileViewerPreviewRequestStartState, commitFileViewerRemoteDownloadState, createFileViewerEmptyPreviewState, createFileViewerLoadStartState, createFileViewerPreviewRequestResetState, createFileViewerPreviewStateTarget, createFileViewerReadPreviewState, createFileViewerRenderCompleteState, createFileViewerRequestController, createFileViewerRequestScope, createFileViewerSourceLoadingActionHandlers, createFileViewerStreamingPdfPlaceholderFile, finalizeFileViewerPreviewLoadState, hasFileViewerPreviewSource, isFileViewerAbortError, isSameOriginUrl, normalizeFileViewerSourceUrl, normalizePdfStreamingMode, reportFileViewerMissingRemoteData, reportFileViewerPreviewLoadError, resolveFileViewerFileRefSourcePlan, resolveFileViewerLoadStartMessage, resolveFileViewerMissingRemoteDataErrorMessage, resolveFileViewerPageHref, resolveFileViewerPreviewLoadErrorMessage, resolveFileViewerPreviewRequestReason, resolveFileViewerRemoteSourcePlan, runFileViewerLocalFilePreview, runFileViewerPreviewComponentUnmount, runFileViewerPreviewRequest, runFileViewerPreviewSourceChange, runFileViewerRemoteFilePreview, runFileViewerReadAndRenderFile, runFileViewerStreamingPdfPreview, shouldStreamPdfUrl, } from './source/loading';
24
24
  export type { CancelFileViewerPreviewRequestInput, CommitFileViewerEmptyPreviewResetStateInput, CommitFileViewerLoadStartStateInput, CommitFileViewerPreviewRequestStartStateInput, CommitFileViewerRenderCompleteStateInput, CommitFileViewerRemoteDownloadStateInput, CreateFileViewerLoadStartStateInput, CreateFileViewerPreviewStateTargetInput, CreateFileViewerReadPreviewStateInput, CreateFileViewerRenderCompleteStateInput, CreateFileViewerSourceLoadingActionHandlersInput, FileViewerEmptyPreviewState, FileViewerFileRefSourcePlan, FileViewerLocalFilePreviewState, FileViewerLoadStartState, FileViewerLocationLike, FileViewerMutableAccessor, FileViewerPreviewComponentUnmountState, FileViewerPreviewLoadErrorKind, FileViewerPreviewLoadErrorLogger, FileViewerPreviewLoadErrorPrefixes, FileViewerPreviewRequestResetState, FileViewerPreviewRequestRunState, FileViewerReadAndRenderFileState, FileViewerReadPreviewState, FileViewerRemoteDownloadState, FileViewerRemoteFileDownloadInput, FileViewerRemoteFilePreviewErrorKind, FileViewerRemoteFilePreviewState, FileViewerRemoteSourcePlan, FileViewerRenderCompleteState, FileViewerRenderReadinessState, FileViewerRequestController, FileViewerRequestScope, FileViewerSourceLoadingActionHandlers, FileViewerStreamingPdfPreviewState, FinalizeFileViewerPreviewLoadStateInput, MutableFileViewerPreviewFilenameState, MutableFileViewerPreviewRequestState, MutableFileViewerPreviewSourceUrlState, MutableFileViewerPreviewState, MutableFileViewerReadPreviewState, MutableFileViewerRenderReadinessState, ReportFileViewerMissingRemoteDataInput, ReportFileViewerPreviewLoadErrorInput, ResolveFileViewerFileRefSourcePlanInput, ResolveFileViewerMissingRemoteDataErrorMessageInput, ResolveFileViewerPreviewLoadErrorMessageInput, ResolveFileViewerPreviewRequestReasonInput, RunFileViewerLocalFilePreviewInput, RunFileViewerPreviewComponentUnmountInput, RunFileViewerPreviewRequestInput, RunFileViewerPreviewSourceChangeInput, RunFileViewerReadAndRenderFileInput, RunFileViewerRemoteFilePreviewInput, RunFileViewerStreamingPdfPreviewInput, } from './source/loading';
25
- export { DEFAULT_FILE_VIEWER_STATE_THEME, DEFAULT_FILE_VIEWER_UNSUPPORTED_DESCRIPTION, FILE_VIEWER_PREVIEW_MESSAGES, createFileViewerEmptyState, createFileViewerErrorState, createFileViewerPreviewLoadingState, createFileViewerReadyState, createFileViewerUnsupportedState, formatFileViewerErrorMessage, normalizeFileViewerErrorMessage, } from './viewer/state';
26
- export type { FileViewerErrorMessageFormatter, } from './viewer/state';
25
+ export { DEFAULT_FILE_VIEWER_STATE_THEME, DEFAULT_FILE_VIEWER_UNSUPPORTED_DESCRIPTION, FILE_VIEWER_ERROR_MESSAGE, FILE_VIEWER_PREVIEW_MESSAGES, attachFileViewerErrorMessage, createFileViewerEmptyState, createFileViewerErrorState, createFileViewerPreviewLoadingState, createFileViewerReadyState, createFileViewerUnsupportedState, formatFileViewerErrorMessage, normalizeFileViewerErrorMessage, } from './viewer/state';
26
+ export type { FileViewerErrorMessageCarrier, FileViewerErrorMessageFormatter, } from './viewer/state';
27
27
  export { buildFileViewerWatermarkBackgroundImage, buildFileViewerWatermarkInlineStyle, buildFileViewerWatermarkStyle, buildFileViewerWatermarkSvg, normalizeFileViewerWatermark, resolveFileViewerWatermarkPresentationState, } from './features/watermark';
28
28
  export type { FileViewerWatermarkPresentationState, FileViewerWatermarkStyle, } from './features/watermark';
29
29
  export type { FileRenderContext, FileRenderExportAdapter, FileRenderExportMode, FileRenderExportOptions, FileRenderHandler, FileRenderHandlerComposite, FileViewerBuiltinRendererPreset, FileViewerAiOptions, FileViewerArchiveEntryActionContext, FileViewerArchiveEntryActionPolicy, FileViewerArchiveEntryActionsOptions, FileViewerArchiveOptions, FileViewerChmOptions, FileViewerApplyViewStateOptions, FileViewerBeforeOperation, FileViewerCadColorMode, FileViewerCadDwfLineWeightMode, FileViewerCadOptions, FileViewerCadRenderer, FileViewerComponentEmits, FileViewerComponentEventMap, FileViewerComponentProps, FileViewerDocumentAnchor, FileViewerDocumentChunk, FileViewerDocxOptions, FileViewerDrawingOptions, FileViewerDownloadOptions, FileViewerEvent, FileViewerEventHandler, FileViewerEventType, FileViewerExportHtmlOptions, FileViewerFileRef, FileViewerFitMode, FileViewerFitOptions, FileViewerFitRequest, FileViewerFitResize, FileViewerFitResult, FileViewerFormatStatus, FileViewerFormatSupportLevel, FileViewerGeoOptions, FileViewerInstance, FileViewerLifecycleContext, FileViewerLifecycleHooks, FileViewerLifecyclePhase, FileViewerI18nOptions, FileViewerIworkEmbeddedPreviewMode, FileViewerIworkOptions, FileViewerHangulOptions, FileViewerDiagnostic, FileViewerLocale, FileViewerMessageKey, FileViewerMessageParams, FileViewerMessageResolver, FileViewerMessages, FileViewerNavigationState, FileViewerOperationAvailability, FileViewerOperationContext, FileViewerOperationType, FileViewerOptions, FileViewerPdfBoundingBox, FileViewerPdfBoundingBoxOrigin, FileViewerPdfBoundingBoxUnit, FileViewerPdfOptions, FileViewerPresentationOptions, FileViewerPrintMaskOptions, FileViewerPrintMaskRegion, FileViewerPrintOptions, FileViewerPrintStamp, FileViewerPublicApi, FileViewerRenderStateKind, FileViewerRenderedInstance, FileViewerRendererCategory, FileViewerSearchMatch, FileViewerSearchOptions, FileViewerSearchProvider, FileViewerSearchState, FileViewerSource, FileViewerSourceKind, FileViewerSpreadsheetOptions, FileViewerStateDescriptor, FileViewerStateTheme, FileViewerTextOptions, FileViewerResolvedThemeMode, FileViewerThemeMode, FileViewerToolbarActionMap, FileViewerToolbarItem, FileViewerToolbarOptions, FileViewerToolbarPosition, FileViewerResolvedToolbarItem, FileViewerUiDensity, FileViewerUiOptions, FileViewerTypstOptions, FileViewerViewScrollState, FileViewerViewState, FileViewerViewStateChange, FileViewerViewStateChangeAction, FileViewerViewStateChangeSource, FileViewerViewStateProvider, FileViewerWatermarkOptions, FileViewerWordPerfectOptions, FileViewerZoomProvider, FileViewerZoomState, NormalizedFileViewerSource, RenderSurface, RendererCapability, RendererDefinition, RendererLoadContext, RendererLoader, RendererPlugin, RendererRegistry, RendererSession, ViewerCapabilityState, ViewerLifecycleContext, ViewerOperationContext, } from './contracts/types';
package/dist/headless.js CHANGED
@@ -17,5 +17,5 @@ export { createFileViewerRendererDispatcher, } from './rendering/dispatcher.js';
17
17
  export { buildFileRenderContextFromLoadContext, createFileRenderHandlerRegistry, createFileRenderHandlerLoader, FILE_VIEWER_RENDER_SURFACE_BACKGROUND_PROPERTY, normalizeFileViewerRenderSurfaceBackground, syncFileViewerRenderSurfaceBackground, } from './rendering/handler.js';
18
18
  export { DEFAULT_FILE_VIEWER_SOURCE_FILENAME, createFileViewerTextDecoder, decodeFileViewerTextBuffer, decodeFilename, getExtension, normalizeFileExtension, normalizeFilename, normalizeSource, isValidFileViewerUtf8, resolveFileViewerTextEncoding, readFileViewerBuffer, readFileViewerDataUrl, readFileViewerText, resolveFileViewerSourceFilename, wrapFileViewerFileRef, } from './source/index.js';
19
19
  export { cancelFileViewerPreviewRequest, DEFAULT_FILE_VIEWER_PREVIEW_LOAD_ERROR_LOGGER, DEFAULT_FILE_VIEWER_STREAMING_PDF_FILENAME, DEFAULT_PDF_RANGE_CHUNK_SIZE, FILE_VIEWER_PREVIEW_LOAD_ERROR_PREFIXES, FILE_VIEWER_REMOTE_MISSING_DATA_ERROR_MESSAGE, applyFileViewerEmptyPreviewState, applyFileViewerPreviewFilenameState, applyFileViewerPreviewRequestResetState, applyFileViewerPreviewSourceUrlState, applyFileViewerReadPreviewState, applyFileViewerRenderReadinessState, commitFileViewerEmptyPreviewResetState, commitFileViewerLoadStartState, commitFileViewerPreviewRequestStartState, commitFileViewerRemoteDownloadState, createFileViewerEmptyPreviewState, createFileViewerLoadStartState, createFileViewerPreviewRequestResetState, createFileViewerPreviewStateTarget, createFileViewerReadPreviewState, createFileViewerRenderCompleteState, createFileViewerRequestController, createFileViewerRequestScope, createFileViewerSourceLoadingActionHandlers, createFileViewerStreamingPdfPlaceholderFile, finalizeFileViewerPreviewLoadState, hasFileViewerPreviewSource, isFileViewerAbortError, isSameOriginUrl, normalizeFileViewerSourceUrl, normalizePdfStreamingMode, reportFileViewerMissingRemoteData, reportFileViewerPreviewLoadError, resolveFileViewerFileRefSourcePlan, resolveFileViewerLoadStartMessage, resolveFileViewerMissingRemoteDataErrorMessage, resolveFileViewerPageHref, resolveFileViewerPreviewLoadErrorMessage, resolveFileViewerPreviewRequestReason, resolveFileViewerRemoteSourcePlan, runFileViewerLocalFilePreview, runFileViewerPreviewComponentUnmount, runFileViewerPreviewRequest, runFileViewerPreviewSourceChange, runFileViewerRemoteFilePreview, runFileViewerReadAndRenderFile, runFileViewerStreamingPdfPreview, shouldStreamPdfUrl, } from './source/loading.js';
20
- export { DEFAULT_FILE_VIEWER_STATE_THEME, DEFAULT_FILE_VIEWER_UNSUPPORTED_DESCRIPTION, FILE_VIEWER_PREVIEW_MESSAGES, createFileViewerEmptyState, createFileViewerErrorState, createFileViewerPreviewLoadingState, createFileViewerReadyState, createFileViewerUnsupportedState, formatFileViewerErrorMessage, normalizeFileViewerErrorMessage, } from './viewer/state.js';
20
+ export { DEFAULT_FILE_VIEWER_STATE_THEME, DEFAULT_FILE_VIEWER_UNSUPPORTED_DESCRIPTION, FILE_VIEWER_ERROR_MESSAGE, FILE_VIEWER_PREVIEW_MESSAGES, attachFileViewerErrorMessage, createFileViewerEmptyState, createFileViewerErrorState, createFileViewerPreviewLoadingState, createFileViewerReadyState, createFileViewerUnsupportedState, formatFileViewerErrorMessage, normalizeFileViewerErrorMessage, } from './viewer/state.js';
21
21
  export { buildFileViewerWatermarkBackgroundImage, buildFileViewerWatermarkInlineStyle, buildFileViewerWatermarkStyle, buildFileViewerWatermarkSvg, normalizeFileViewerWatermark, resolveFileViewerWatermarkPresentationState, } from './features/watermark.js';
@@ -29,6 +29,8 @@ export const DE_DE_MESSAGES = {
29
29
  "toolbar.searchPrevious": "Vorheriger Treffer",
30
30
  "toolbar.searchNext": "Nächster Treffer",
31
31
  "toolbar.searchClear": "Suche löschen",
32
+ "toolbar.searchClose": "Suche schließen",
33
+ "toolbar.more": "Weitere Aktionen",
32
34
  "toolbar.theme": "Thema",
33
35
  "toolbar.themeToLight": "Wechseln Sie in den Lichtmodus",
34
36
  "toolbar.themeToDark": "Wechseln Sie in den Dunkelmodus",
@@ -286,6 +288,9 @@ export const DE_DE_MESSAGES = {
286
288
  "text.code.loadingHighlight": "Syntaxhervorhebung wird geladen...",
287
289
  "text.code.formattedPreview": "Formatierte Vorschau",
288
290
  "text.code.showOriginal": "Originalquelltext anzeigen",
291
+ "text.html.preview": "Seitenvorschau",
292
+ "text.html.source": "HTML-Quelltext",
293
+ "text.html.safePreview": "Statische Vorschau. Skripte und externe Ressourcen sind gesperrt.",
289
294
  "text.code.showFormatted": "Formatierte Vorschau anzeigen",
290
295
  "text.code.indexingLargeFile": "Indizieren großer Dateien {progress}%",
291
296
  "text.code.virtualized": "Große Datei · virtuelles Scrollen · Hervorheben aus",
@@ -348,6 +353,7 @@ export const DE_DE_MESSAGES = {
348
353
  "cad.toolbar.zoomIn": "Vergrößern",
349
354
  "cad.toolbar.colorSource": "Originalfarben",
350
355
  "cad.toolbar.monochrome": "Monochrom",
356
+ "cad.toolbar.exportImage": "{format}-Bild herunterladen",
351
357
  "cad.layers.title": "Schichten",
352
358
  "cad.layers.count": "{count} Artikel",
353
359
  "cad.layers.merged": "{name} ({count} zusammengeführte Ebenen)",
@@ -359,6 +365,7 @@ export const DE_DE_MESSAGES = {
359
365
  "cad.state.loadingViewer": "CAD-Viewer wird geladen...",
360
366
  "cad.state.parsing": "CAD wird analysiert...",
361
367
  "cad.error.parseFailed": "Die CAD-Datei konnte nicht analysiert werden",
368
+ "cad.error.exportFailed": "Bildexport fehlgeschlagen: {message}",
362
369
  "image.alt": "Bild",
363
370
  "image.toolbar.rotation": "Bilddrehung",
364
371
  "image.toolbar.rotateLeft": "Bild nach links drehen",
@@ -30,6 +30,8 @@ export const JA_JP_MESSAGES = {
30
30
  'toolbar.searchPrevious': '前の一致',
31
31
  'toolbar.searchNext': '次の一致',
32
32
  'toolbar.searchClear': '検索をクリア',
33
+ 'toolbar.searchClose': '検索を閉じる',
34
+ 'toolbar.more': 'その他の操作',
33
35
  'toolbar.theme': 'テーマ',
34
36
  'toolbar.themeToLight': 'ライトモードに切り替え',
35
37
  'toolbar.themeToDark': 'ダークモードに切り替え',
@@ -287,6 +289,9 @@ export const JA_JP_MESSAGES = {
287
289
  'text.code.loadingHighlight': 'シンタックスハイライトを読み込んでいます...',
288
290
  'text.code.formattedPreview': '整形済みプレビュー',
289
291
  'text.code.showOriginal': '元のソースを表示',
292
+ 'text.html.preview': 'ページプレビュー',
293
+ 'text.html.source': 'HTML ソース',
294
+ 'text.html.safePreview': '静的プレビュー。スクリプトと外部リソースは無効です。',
290
295
  'text.code.showFormatted': '整形済みプレビューを表示',
291
296
  'text.code.indexingLargeFile': '大きなファイルを索引化しています {progress}%',
292
297
  'text.code.virtualized': '大きなファイル · 仮想スクロール · ハイライト無効',
@@ -349,6 +354,7 @@ export const JA_JP_MESSAGES = {
349
354
  'cad.toolbar.zoomIn': '拡大',
350
355
  'cad.toolbar.colorSource': '元の色',
351
356
  'cad.toolbar.monochrome': 'モノクロ',
357
+ 'cad.toolbar.exportImage': '{format} 画像をダウンロード',
352
358
  'cad.layers.title': 'レイヤー',
353
359
  'cad.layers.count': '{count} 件',
354
360
  'cad.layers.merged': '{name}(同名レイヤー {count} 件を統合)',
@@ -360,6 +366,7 @@ export const JA_JP_MESSAGES = {
360
366
  'cad.state.loadingViewer': 'CAD ビューアーを読み込んでいます...',
361
367
  'cad.state.parsing': 'CAD を解析しています...',
362
368
  'cad.error.parseFailed': 'CAD ファイルの解析に失敗しました',
369
+ 'cad.error.exportFailed': '画像を出力できませんでした: {message}',
363
370
  'image.alt': '画像',
364
371
  'image.toolbar.rotation': '画像の回転',
365
372
  'image.toolbar.rotateLeft': '画像を左に回転',
@@ -30,6 +30,8 @@ const ZH_CN_MESSAGES = {
30
30
  'toolbar.searchPrevious': '上一个匹配',
31
31
  'toolbar.searchNext': '下一个匹配',
32
32
  'toolbar.searchClear': '清除搜索',
33
+ 'toolbar.searchClose': '收起搜索',
34
+ 'toolbar.more': '更多操作',
33
35
  'toolbar.theme': '主题',
34
36
  'toolbar.themeToLight': '切换为浅色模式',
35
37
  'toolbar.themeToDark': '切换为深色模式',
@@ -287,6 +289,9 @@ const ZH_CN_MESSAGES = {
287
289
  'text.code.loadingHighlight': '正在加载高亮...',
288
290
  'text.code.formattedPreview': '格式化预览',
289
291
  'text.code.showOriginal': '查看原始源码',
292
+ 'text.html.preview': '页面预览',
293
+ 'text.html.source': 'HTML 源码',
294
+ 'text.html.safePreview': '静态预览,不执行脚本或加载外部资源',
290
295
  'text.code.showFormatted': '查看格式化预览',
291
296
  'text.code.indexingLargeFile': '正在建立大文件索引 {progress}%',
292
297
  'text.code.virtualized': '大文件 · 虚拟滚动 · 已关闭高亮',
@@ -349,6 +354,7 @@ const ZH_CN_MESSAGES = {
349
354
  'cad.toolbar.zoomIn': '放大',
350
355
  'cad.toolbar.colorSource': '彩色',
351
356
  'cad.toolbar.monochrome': '黑白',
357
+ 'cad.toolbar.exportImage': '下载 {format} 图片',
352
358
  'cad.layers.title': '图层',
353
359
  'cad.layers.count': '{count} 项',
354
360
  'cad.layers.merged': '{name}(已合并 {count} 个同名图层)',
@@ -360,6 +366,7 @@ const ZH_CN_MESSAGES = {
360
366
  'cad.state.loadingViewer': '正在加载 CAD 预览器...',
361
367
  'cad.state.parsing': '正在解析 CAD...',
362
368
  'cad.error.parseFailed': 'CAD 文件解析失败',
369
+ 'cad.error.exportFailed': '图片导出失败:{message}',
363
370
  'image.alt': '图片',
364
371
  'image.toolbar.rotation': '图片旋转',
365
372
  'image.toolbar.rotateLeft': '向左旋转图片',
@@ -486,6 +493,8 @@ const EN_US_MESSAGES = {
486
493
  'toolbar.searchPrevious': 'Previous match',
487
494
  'toolbar.searchNext': 'Next match',
488
495
  'toolbar.searchClear': 'Clear search',
496
+ 'toolbar.searchClose': 'Close search',
497
+ 'toolbar.more': 'More actions',
489
498
  'toolbar.theme': 'Theme',
490
499
  'toolbar.themeToLight': 'Switch to light mode',
491
500
  'toolbar.themeToDark': 'Switch to dark mode',
@@ -743,6 +752,9 @@ const EN_US_MESSAGES = {
743
752
  'text.code.loadingHighlight': 'Loading syntax highlighting...',
744
753
  'text.code.formattedPreview': 'Formatted preview',
745
754
  'text.code.showOriginal': 'Show original source',
755
+ 'text.html.preview': 'Page preview',
756
+ 'text.html.source': 'HTML source',
757
+ 'text.html.safePreview': 'Static preview. Scripts and external resources are blocked.',
746
758
  'text.code.showFormatted': 'Show formatted preview',
747
759
  'text.code.indexingLargeFile': 'Indexing large file {progress}%',
748
760
  'text.code.virtualized': 'Large file · virtual scrolling · highlighting off',
@@ -805,6 +817,7 @@ const EN_US_MESSAGES = {
805
817
  'cad.toolbar.zoomIn': 'Zoom in',
806
818
  'cad.toolbar.colorSource': 'Source colors',
807
819
  'cad.toolbar.monochrome': 'Monochrome',
820
+ 'cad.toolbar.exportImage': 'Download {format} image',
808
821
  'cad.layers.title': 'Layers',
809
822
  'cad.layers.count': '{count} items',
810
823
  'cad.layers.merged': '{name} ({count} merged layers)',
@@ -816,6 +829,7 @@ const EN_US_MESSAGES = {
816
829
  'cad.state.loadingViewer': 'Loading CAD viewer...',
817
830
  'cad.state.parsing': 'Parsing CAD...',
818
831
  'cad.error.parseFailed': 'Failed to parse CAD file',
832
+ 'cad.error.exportFailed': 'Image export failed: {message}',
819
833
  'image.alt': 'Image',
820
834
  'image.toolbar.rotation': 'Image rotation',
821
835
  'image.toolbar.rotateLeft': 'Rotate image left',
package/dist/index.d.ts CHANGED
@@ -16,6 +16,8 @@ export { cloneFileViewerViewState, createFileViewerViewStateChange, createFileVi
16
16
  export type { CreateFileViewerViewStateControllerOptions, FileViewerGenericViewStateProviderRegistration, FileViewerViewStateController, FileViewerViewStateControllerActionHandlers, RegisterFileViewerGenericViewStateProviderOptions, } from './features/document/viewState';
17
17
  export { DEFAULT_FILE_VIEWER_ANCHOR_EXCLUDE_SELECTOR, DEFAULT_FILE_VIEWER_ANCHOR_SELECTOR, DEFAULT_FILE_VIEWER_SCROLL_CONTAINER_CANDIDATE_SELECTOR, DEFAULT_FILE_VIEWER_SCROLL_CONTAINER_SELECTOR, DEFAULT_FILE_VIEWER_SCROLLABLE_OVERFLOW_VALUES, collectFileViewerDocumentAnchors, findFileViewerAnchorForElement, findFileViewerSearchProvider, findFileViewerViewStateProvider, findFileViewerZoomProvider, getCurrentFileViewerDocumentAnchor, getFileViewerScrollableRange, isFileViewerScrollableElement, registerFileViewerSearchProvider, registerFileViewerViewStateProvider, registerFileViewerZoomProvider, resolveFileViewerScrollContainer, scrollToFileViewerDocumentAnchor, unregisterFileViewerSearchProvider, unregisterFileViewerViewStateProvider, unregisterFileViewerZoomProvider, } from './features/document/dom';
18
18
  export { prepareFileViewerRenderedContentForSnapshot, inlineFileViewerBlobUrlsInHtml, replaceFileViewerCanvasWithImages, resolveFileViewerPrintStyle, triggerFileViewerBlobDownload, triggerFileViewerUrlDownload, waitForFileViewerImages, waitForFileViewerNextPaint, waitForFileViewerPrintWindowReady, } from './output/export';
19
+ export { createFileViewerCanvasImageBlob } from './output/canvasImage';
20
+ export { createFileViewerSnapshotDownload, isFileViewerSnapshotDownloadPermitted } from './output/snapshotDownload';
19
21
  export { applyPrintPageSize, buildPrintPageStyle, formatCssPixels, getElementPrintPageSize, } from './output/printLayout';
20
22
  export { assertFileViewerMermaidSourceHasNoExternalResources, sanitizeFileViewerSvgCss, sanitizeFileViewerSvgResources, } from './security/svgResources';
21
23
  export type { ApplyPrintPageSizeOptions, BuildPrintPageStyleOptions, PrintPageSize, } from './output/printLayout';
@@ -66,8 +68,8 @@ export { appendFileViewerStyle, buildFileRenderContextFromLoadContext, applyFile
66
68
  export type { AppendFileViewerStyleOptions, CreateFileViewerRenderSurfaceOptions, CreateFileViewerRenderSurfaceActionHandlersInput, CreateFileViewerRenderReadinessTargetInput, CreateFileViewerRenderSurfaceStateTargetInput, FileViewerStyleHandle, FileViewerRenderSurfaceActionHandlers, FileViewerRenderSurfaceClearState, FileViewerRenderSurfaceState, FileViewerRenderSurfaceMountContext, FileViewerRenderSessionDisposeErrorLogger, MutableFileViewerRenderSurfaceState, ReportFileViewerRenderSessionDisposeErrorInput, ResolvedFileViewerStyleIsolation, ResetFileViewerRenderSurfaceInput, ResolveFileViewerRenderSessionDisposeErrorMessageInput, RunFileViewerRenderSurfaceClearInput, RunFileViewerRenderSurfaceMountInput, } from './rendering/handler';
67
69
  export { DEFAULT_FILE_VIEWER_SOURCE_FILENAME, createFileViewerTextDecoder, decodeFileViewerTextBuffer, decodeFilename, getExtension, normalizeFileExtension, normalizeFilename, isValidFileViewerUtf8, resolveFileViewerTextEncoding, resolveFileViewerSourceFilename, normalizeSource, readFileViewerBuffer, readFileViewerDataUrl, readFileViewerText, wrapFileViewerFileRef, } from './source';
68
70
  export type { DecodedFileViewerText, FileViewerReadResult, FileViewerTextEncoding, ResolvedFileViewerTextEncoding, ResolvedFileViewerTextSource, } from './source';
69
- export { DEFAULT_FILE_VIEWER_STATE_THEME, DEFAULT_FILE_VIEWER_UNSUPPORTED_DESCRIPTION, FILE_VIEWER_PREVIEW_MESSAGES, createFileViewerEmptyState, createFileViewerErrorState, createFileViewerPreviewLoadingState, createFileViewerReadyState, createFileViewerUnsupportedState, formatFileViewerErrorMessage, normalizeFileViewerErrorMessage, resolveFileViewerRendererInstallHint, } from './viewer/state';
70
- export type { FileViewerErrorMessageFormatter, FileViewerRendererInstallHint, } from './viewer/state';
71
+ export { DEFAULT_FILE_VIEWER_STATE_THEME, DEFAULT_FILE_VIEWER_UNSUPPORTED_DESCRIPTION, FILE_VIEWER_ERROR_MESSAGE, FILE_VIEWER_PREVIEW_MESSAGES, attachFileViewerErrorMessage, createFileViewerEmptyState, createFileViewerErrorState, createFileViewerPreviewLoadingState, createFileViewerReadyState, createFileViewerUnsupportedState, formatFileViewerErrorMessage, normalizeFileViewerErrorMessage, resolveFileViewerRendererInstallHint, } from './viewer/state';
72
+ export type { FileViewerErrorMessageCarrier, FileViewerErrorMessageFormatter, FileViewerRendererInstallHint, } from './viewer/state';
71
73
  export { buildFileViewerWatermarkBackgroundImage, buildFileViewerWatermarkInlineStyle, buildFileViewerWatermarkStyle, buildFileViewerWatermarkSvg, normalizeFileViewerWatermark, resolveFileViewerWatermarkPresentationState, } from './features/watermark';
72
74
  export type { FileViewerWatermarkPresentationState, FileViewerWatermarkStyle, } from './features/watermark';
73
75
  export { buildFileViewerPrintMaskOverlayHtml, applyFileViewerPagePrintMasksToHtml, normalizeFileViewerPrintMaskOptions, normalizeFileViewerPrintMaskRegion, normalizeFileViewerPrintStamp, FILE_VIEWER_PRINT_MASK_STYLE, } from './features/printMask';
@@ -91,4 +93,5 @@ export type { CreateFileViewerZoomControllerOptions, FileViewerZoomOperation, }
91
93
  export type { CreateViewerOptions } from './viewer/createViewer';
92
94
  export type { BuildExportHtmlDocumentOptions, BuildFileViewerRenderedHtmlDocumentOptions, } from './exportDocument';
93
95
  export type { CreateFileViewerWorkerControllerOptions, FileViewerWorkerContext, FileViewerWorkerController, FileViewerWorkerErrorHook, FileViewerWorkerEventHandler, FileViewerWorkerFactory, FileViewerWorkerMessageHook, WorkerProvider, WorkerRef, } from './platform/worker';
94
- export type { FileViewerAiOptions, FileViewerArchiveEntryActionContext, FileViewerArchiveEntryActionPolicy, FileViewerArchiveEntryActionsOptions, FileViewerArchivePasswordRequestContext, FileViewerArchivePasswordRequestReason, FileViewerArchiveOptions, FileViewerChmOptions, FileViewerApplyViewStateOptions, FileViewerBeforeOperation, FileViewerCadColorMode, FileViewerCadDwfLineWeightMode, FileViewerCadOptions, FileViewerCadRenderer, FileViewerModelLinearUnit, FileViewerModelOptions, FileViewerComponentEmits, FileViewerComponentEventMap, FileViewerComponentProps, FileViewerDocumentAnchor, FileViewerDocumentChunk, FileViewerDownloadOptions, FileViewerDocxOptions, FileViewerDrawingOptions, FileViewerEvent, FileViewerEventHandler, FileViewerEventType, FileViewerExportHtmlOptions, FileViewerFileRef, FileViewerFitMode, FileViewerFitOptions, FileViewerFitRequest, FileViewerFitResize, FileViewerFitResult, FileViewerFormatStatus, FileViewerFormatSupportLevel, FileViewerGeoBasemapOptions, FileViewerGeoBasemapPreset, FileViewerGeoOptions, FileViewerTiandituMapStyle, FileRenderContext, FileRenderExportAdapter, FileRenderThumbnailAdapter, FileRenderExportMode, FileRenderExportOptions, FileRenderHandler, FileRenderHandlerComposite, FileViewerBuiltinRendererPreset, FileViewerInstance, FileViewerLoadOptions, FileViewerLifecycleContext, FileViewerLifecycleHooks, FileViewerLifecyclePhase, FileViewerI18nOptions, FileViewerIworkEmbeddedPreviewMode, FileViewerIworkOptions, FileViewerHangulOptions, FileViewerDiagnostic, FileViewerDesignOptions, FileViewerLocale, FileViewerMessageKey, FileViewerMessageParams, FileViewerMessageResolver, FileViewerMessages, FileViewerNavigationState, FileViewerOperationAvailability, FileViewerOperationContext, FileViewerOperationType, FileViewerOptions, FileViewerPdfBoundingBox, FileViewerPdfBoundingBoxOrigin, FileViewerPdfBoundingBoxUnit, FileViewerPdfOptions, FileViewerPresentationOptions, FileViewerPrintOptions, FileViewerPrintMaskOptions, FileViewerPrintMaskRegion, FileViewerPrintStamp, FileViewerPublicApi, FileViewerRenderedInstance, FileViewerRendererMode, FileViewerRendererPluginAssetKind, FileViewerRendererPluginAssetManifest, FileViewerRendererPluginAssetEntry, FileViewerRenderStateKind, FileViewerRenderPurpose, FileViewerRendererCategory, FileViewerRendererHandlerRegistration, FileViewerRendererInstallContext, FileViewerRendererPlugin, FileViewerRendererPluginInput, FileViewerRendererPresetInput, FileViewerRendererPresetName, FileViewerRendererPreset, FileViewerSearchMatch, FileViewerSearchOptions, FileViewerSearchProvider, FileViewerSearchState, FileViewerSource, FileViewerSourceKind, FileViewerThumbnailCaptureOptions, FileViewerThumbnailFit, FileViewerThumbnailFormat, FileViewerSpreadsheetOptions, FileViewerStateDescriptor, FileViewerStateTheme, FileViewerStyleIsolation, FileViewerTextOptions, FileViewerResolvedThemeMode, FileViewerThemeMode, FileViewerToolbarActionMap, FileViewerToolbarItem, FileViewerToolbarOptions, FileViewerToolbarPosition, FileViewerResolvedToolbarItem, FileViewerUiDensity, FileViewerUiOptions, FileViewerTypstOptions, FileViewerViewScrollState, FileViewerViewState, FileViewerViewStateChange, FileViewerViewStateChangeAction, FileViewerViewStateChangeSource, FileViewerViewStateProvider, FileViewerWatermarkOptions, FileViewerWordPerfectOptions, FileViewerZoomProvider, FileViewerZoomState, NormalizedFileViewerSource, RendererCapability, RendererDefinition, RendererPlugin, RendererLoadContext, RendererLoader, RendererRegistry, RendererSession, RenderSurface, ViewerCapabilityState, ViewerLifecycleContext, ViewerOperationContext, } from './contracts/types';
96
+ export type { FileViewerAiOptions, FileViewerArchiveEntryActionContext, FileViewerArchiveEntryActionPolicy, FileViewerArchiveEntryActionsOptions, FileViewerArchivePasswordRequestContext, FileViewerArchivePasswordRequestReason, FileViewerArchiveOptions, FileViewerBinaryInspectorOptions, FileViewerChmOptions, FileViewerApplyViewStateOptions, FileViewerBeforeOperation, FileViewerCadColorMode, FileViewerCadDwfLineWeightMode, FileViewerCadOptions, FileViewerCadRenderer, FileViewerModelLinearUnit, FileViewerModelOptions, FileViewerComponentEmits, FileViewerComponentEventMap, FileViewerComponentProps, FileViewerDocumentAnchor, FileViewerDocumentChunk, FileViewerDownloadOptions, FileViewerDocxOptions, FileViewerDrawingOptions, FileViewerEvent, FileViewerEventHandler, FileViewerEventType, FileViewerExportHtmlOptions, FileViewerFileRef, FileViewerFitMode, FileViewerFitOptions, FileViewerFitRequest, FileViewerFitResize, FileViewerFitResult, FileViewerFormatStatus, FileViewerFormatSupportLevel, FileViewerGeoBasemapOptions, FileViewerGeoBasemapPreset, FileViewerGeoOptions, FileViewerTiandituMapStyle, FileRenderContext, FileRenderExportAdapter, FileRenderThumbnailAdapter, FileRenderExportMode, FileRenderExportOptions, FileRenderHandler, FileRenderHandlerComposite, FileViewerBuiltinRendererPreset, FileViewerInstance, FileViewerLoadOptions, FileViewerLifecycleContext, FileViewerLifecycleHooks, FileViewerLifecyclePhase, FileViewerI18nOptions, FileViewerIworkEmbeddedPreviewMode, FileViewerIworkOptions, FileViewerHangulOptions, FileViewerDiagnostic, FileViewerDesignOptions, FileViewerLocale, FileViewerMessageKey, FileViewerMessageParams, FileViewerMessageResolver, FileViewerMessages, FileViewerNavigationState, FileViewerOperationAvailability, FileViewerOperationContext, FileViewerOperationType, FileViewerOptions, FileViewerPdfBoundingBox, FileViewerPdfBoundingBoxOrigin, FileViewerPdfBoundingBoxUnit, FileViewerPdfOptions, FileViewerPresentationOptions, FileViewerPrintOptions, FileViewerPrintMaskOptions, FileViewerPrintMaskRegion, FileViewerPrintStamp, FileViewerPublicApi, FileViewerRenderedInstance, FileViewerRendererMode, FileViewerRendererPluginAssetKind, FileViewerRendererPluginAssetManifest, FileViewerRendererPluginAssetEntry, FileViewerRenderStateKind, FileViewerRenderPurpose, FileViewerRendererCategory, FileViewerRendererHandlerRegistration, FileViewerRendererInstallContext, FileViewerRendererPlugin, FileViewerRendererPluginInput, FileViewerRendererPresetInput, FileViewerRendererPresetName, FileViewerRendererPreset, FileViewerSearchMatch, FileViewerSearchOptions, FileViewerSearchProvider, FileViewerSearchState, FileViewerSource, FileViewerSourceKind, FileViewerThumbnailCaptureOptions, FileViewerThumbnailFit, FileViewerThumbnailFormat, FileViewerSpreadsheetOptions, FileViewerStateDescriptor, FileViewerStateTheme, FileViewerStyleIsolation, FileViewerTextOptions, FileViewerResolvedThemeMode, FileViewerThemeMode, FileViewerToolbarActionMap, FileViewerToolbarItem, FileViewerToolbarOptions, FileViewerToolbarPosition, FileViewerResolvedToolbarItem, FileViewerUiDensity, FileViewerUiOptions, FileViewerTypstOptions, FileViewerViewScrollState, FileViewerViewState, FileViewerViewStateChange, FileViewerViewStateChangeAction, FileViewerViewStateChangeSource, FileViewerViewStateProvider, FileViewerWatermarkOptions, FileViewerWordPerfectOptions, FileViewerZoomProvider, FileViewerZoomState, NormalizedFileViewerSource, RendererCapability, RendererDefinition, RendererPlugin, RendererLoadContext, RendererLoader, RendererRegistry, RendererSession, RenderSurface, ViewerCapabilityState, ViewerLifecycleContext, ViewerOperationContext, } from './contracts/types';
97
+ export { resolveFileViewerCopiedAssetUrl } from './platform/copiedAssets';
package/dist/index.js CHANGED
@@ -9,6 +9,8 @@ export { FILE_VIEWER_FIT_MODES, FILE_VIEWER_FIT_RESIZE_MODES, createFileViewerFi
9
9
  export { cloneFileViewerViewState, createFileViewerViewStateChange, createFileViewerViewStateChangeEmitter, createFileViewerViewStateController, createFileViewerViewStateControllerActionHandlers, registerFileViewerGenericViewStateProvider, } from './features/document/viewState.js';
10
10
  export { DEFAULT_FILE_VIEWER_ANCHOR_EXCLUDE_SELECTOR, DEFAULT_FILE_VIEWER_ANCHOR_SELECTOR, DEFAULT_FILE_VIEWER_SCROLL_CONTAINER_CANDIDATE_SELECTOR, DEFAULT_FILE_VIEWER_SCROLL_CONTAINER_SELECTOR, DEFAULT_FILE_VIEWER_SCROLLABLE_OVERFLOW_VALUES, collectFileViewerDocumentAnchors, findFileViewerAnchorForElement, findFileViewerSearchProvider, findFileViewerViewStateProvider, findFileViewerZoomProvider, getCurrentFileViewerDocumentAnchor, getFileViewerScrollableRange, isFileViewerScrollableElement, registerFileViewerSearchProvider, registerFileViewerViewStateProvider, registerFileViewerZoomProvider, resolveFileViewerScrollContainer, scrollToFileViewerDocumentAnchor, unregisterFileViewerSearchProvider, unregisterFileViewerViewStateProvider, unregisterFileViewerZoomProvider, } from './features/document/dom/index.js';
11
11
  export { prepareFileViewerRenderedContentForSnapshot, inlineFileViewerBlobUrlsInHtml, replaceFileViewerCanvasWithImages, resolveFileViewerPrintStyle, triggerFileViewerBlobDownload, triggerFileViewerUrlDownload, waitForFileViewerImages, waitForFileViewerNextPaint, waitForFileViewerPrintWindowReady, } from './output/export.js';
12
+ export { createFileViewerCanvasImageBlob } from './output/canvasImage.js';
13
+ export { createFileViewerSnapshotDownload, isFileViewerSnapshotDownloadPermitted } from './output/snapshotDownload.js';
12
14
  export { applyPrintPageSize, buildPrintPageStyle, formatCssPixels, getElementPrintPageSize, } from './output/printLayout.js';
13
15
  export { assertFileViewerMermaidSourceHasNoExternalResources, sanitizeFileViewerSvgCss, sanitizeFileViewerSvgResources, } from './security/svgResources.js';
14
16
  export { DEFAULT_FILE_VIEWER_DOWNLOAD_FILENAME, DEFAULT_FILE_VIEWER_EXPORT_FILENAME, DEFAULT_FILE_VIEWER_PREVIEW_TITLE, FILE_VIEWER_OPERATION_ACTION_ERROR_PREFIXES, createFileViewerOperationActionHandlers, createFileViewerOriginalSourceState, createFileViewerOriginalSourceStateFromNormalizedSource, createFileViewerPublicOperationActionHandlers, executeFileViewerDownloadOperation, executeFileViewerExportHtmlOperation, executeFileViewerPrintOperation, hasFileViewerOriginalSource, resolveFileViewerDisplayFilename, resolveFileViewerOperationActionErrorMessage, resolveFileViewerOperationFilename, resolveFileViewerOriginalFilename, } from './viewer/operations.js';
@@ -173,10 +175,11 @@ export { resolveFileViewerPresentationState, } from './presentation/state.js';
173
175
  export { createFileViewerRendererDispatcher, } from './rendering/dispatcher.js';
174
176
  export { appendFileViewerStyle, buildFileRenderContextFromLoadContext, applyFileViewerRenderSurfaceState, clearFileViewerRenderSurface, createFileRenderHandlerRendererSession, createFileRenderHandlerRegistry, createFileRenderHandlerLoader, createFileViewerRenderSurfaceActionHandlers, createFileViewerRenderReadinessTarget, createFileViewerRenderSurface, createFileViewerRenderSurfaceState, createFileViewerRenderSurfaceStateTarget, createFileViewerRenderTarget, DEFAULT_FILE_VIEWER_RENDER_TARGET_CLASS, FILE_VIEWER_RENDER_SURFACE_BACKGROUND_PROPERTY, DEFAULT_FILE_VIEWER_RENDER_SESSION_DISPOSE_ERROR_LOGGER, FILE_VIEWER_RENDER_SESSION_DISPOSE_ERROR_MESSAGE, disposeActiveFileViewerRendererSession, disposeFileViewerRendered, disposeFileViewerRendererSession, getFileViewerShadowRootForNode, isFileViewerShadowRoot, normalizeFileViewerStyleIsolation, normalizeFileViewerRenderSurfaceBackground, removeFileViewerRenderTarget, reportFileViewerRenderSessionDisposeError, resetFileViewerRenderSurface, resolveFileViewerStyleIsolation, resolveFileViewerRenderSessionDisposeErrorMessage, runFileViewerRenderSurfaceClear, runFileViewerRenderSurfaceMount, syncFileViewerRenderSurfaceBackground, renderFileViewerHandler, } from './rendering/handler.js';
175
177
  export { DEFAULT_FILE_VIEWER_SOURCE_FILENAME, createFileViewerTextDecoder, decodeFileViewerTextBuffer, decodeFilename, getExtension, normalizeFileExtension, normalizeFilename, isValidFileViewerUtf8, resolveFileViewerTextEncoding, resolveFileViewerSourceFilename, normalizeSource, readFileViewerBuffer, readFileViewerDataUrl, readFileViewerText, wrapFileViewerFileRef, } from './source/index.js';
176
- export { DEFAULT_FILE_VIEWER_STATE_THEME, DEFAULT_FILE_VIEWER_UNSUPPORTED_DESCRIPTION, FILE_VIEWER_PREVIEW_MESSAGES, createFileViewerEmptyState, createFileViewerErrorState, createFileViewerPreviewLoadingState, createFileViewerReadyState, createFileViewerUnsupportedState, formatFileViewerErrorMessage, normalizeFileViewerErrorMessage, resolveFileViewerRendererInstallHint, } from './viewer/state.js';
178
+ export { DEFAULT_FILE_VIEWER_STATE_THEME, DEFAULT_FILE_VIEWER_UNSUPPORTED_DESCRIPTION, FILE_VIEWER_ERROR_MESSAGE, FILE_VIEWER_PREVIEW_MESSAGES, attachFileViewerErrorMessage, createFileViewerEmptyState, createFileViewerErrorState, createFileViewerPreviewLoadingState, createFileViewerReadyState, createFileViewerUnsupportedState, formatFileViewerErrorMessage, normalizeFileViewerErrorMessage, resolveFileViewerRendererInstallHint, } from './viewer/state.js';
177
179
  export { buildFileViewerWatermarkBackgroundImage, buildFileViewerWatermarkInlineStyle, buildFileViewerWatermarkStyle, buildFileViewerWatermarkSvg, normalizeFileViewerWatermark, resolveFileViewerWatermarkPresentationState, } from './features/watermark.js';
178
180
  export { buildFileViewerPrintMaskOverlayHtml, applyFileViewerPagePrintMasksToHtml, normalizeFileViewerPrintMaskOptions, normalizeFileViewerPrintMaskRegion, normalizeFileViewerPrintStamp, FILE_VIEWER_PRINT_MASK_STYLE, } from './features/printMask.js';
179
181
  export { openFileViewerPrintMaskDesignerAsync, } from './features/printMaskLoader.js';
180
182
  export { cancelFileViewerPreviewRequest, DEFAULT_FILE_VIEWER_STREAMING_PDF_FILENAME, DEFAULT_FILE_VIEWER_PREVIEW_LOAD_ERROR_LOGGER, DEFAULT_PDF_RANGE_CHUNK_SIZE, FILE_VIEWER_PREVIEW_LOAD_ERROR_PREFIXES, FILE_VIEWER_REMOTE_MISSING_DATA_ERROR_MESSAGE, applyFileViewerEmptyPreviewState, applyFileViewerPreviewFilenameState, applyFileViewerPreviewSourceUrlState, applyFileViewerReadPreviewState, applyFileViewerRenderReadinessState, applyFileViewerPreviewRequestResetState, commitFileViewerEmptyPreviewResetState, commitFileViewerLoadStartState, commitFileViewerPreviewRequestStartState, commitFileViewerRenderCompleteState, commitFileViewerRemoteDownloadState, createFileViewerEmptyPreviewState, createFileViewerLoadStartState, createFileViewerPreviewStateTarget, createFileViewerSourceLoadingActionHandlers, createFileViewerReadPreviewState, createFileViewerPreviewRequestResetState, createFileViewerRenderCompleteState, createFileViewerRequestController, createFileViewerRequestScope, createFileViewerStreamingPdfPlaceholderFile, finalizeFileViewerPreviewLoadState, hasFileViewerPreviewSource, isFileViewerAbortError, isSameOriginUrl, normalizeFileViewerSourceUrl, normalizePdfStreamingMode, resolveFileViewerFileRefSourcePlan, resolveFileViewerLoadStartMessage, resolveFileViewerMissingRemoteDataErrorMessage, resolveFileViewerPreviewLoadErrorMessage, resolveFileViewerPreviewRequestReason, resolveFileViewerRemoteSourcePlan, resolveFileViewerPageHref, reportFileViewerMissingRemoteData, reportFileViewerPreviewLoadError, runFileViewerLocalFilePreview, runFileViewerPreviewComponentUnmount, runFileViewerPreviewRequest, runFileViewerPreviewSourceChange, runFileViewerRemoteFilePreview, runFileViewerReadAndRenderFile, runFileViewerStreamingPdfPreview, shouldStreamPdfUrl, } from './source/loading.js';
181
183
  export { createViewer } from './viewer/createViewer.js';
182
184
  export { WorkerRefImpl, createFileViewerWorkerController, refWorker, } from './platform/worker.js';
185
+ export { resolveFileViewerCopiedAssetUrl } from './platform/copiedAssets.js';
@@ -0,0 +1,3 @@
1
+ import type { FileViewerWatermarkOptions } from '../contracts/types';
2
+ /** Encodes a detached snapshot without mutating the renderer or omitting its watermark. */
3
+ export declare function createFileViewerCanvasImageBlob(snapshot: HTMLCanvasElement, format: 'png' | 'jpeg', watermark?: boolean | FileViewerWatermarkOptions, pixelRatio?: number): Promise<Blob>;