@file-viewer/core 2.1.26 → 2.1.27
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/dist/contracts/types.d.ts +35 -1
- package/dist/index.d.ts +1 -1
- package/dist/registry/formats.d.ts +1 -1
- package/dist/renderers/image.js +7 -2
- package/dist/rendering/handler.d.ts +5 -3
- package/dist/rendering/handler.js +19 -4
- package/dist/viewer/createViewer.d.ts +2 -1
- package/dist/viewer/createViewer.js +50 -2
- package/package.json +1 -1
|
@@ -186,6 +186,28 @@ export interface FileViewerPresentationOptions {
|
|
|
186
186
|
workerType?: WorkerType;
|
|
187
187
|
}
|
|
188
188
|
export type FileRenderExportMode = 'export' | 'print';
|
|
189
|
+
export type FileViewerRenderPurpose = 'preview' | 'thumbnail';
|
|
190
|
+
export type FileViewerThumbnailFormat = 'webp' | 'jpeg' | 'png';
|
|
191
|
+
export type FileViewerThumbnailFit = 'contain' | 'cover';
|
|
192
|
+
export interface FileViewerThumbnailCaptureOptions {
|
|
193
|
+
width: number;
|
|
194
|
+
height: number;
|
|
195
|
+
format: FileViewerThumbnailFormat;
|
|
196
|
+
quality: number;
|
|
197
|
+
fit: FileViewerThumbnailFit;
|
|
198
|
+
background: string;
|
|
199
|
+
signal?: AbortSignal;
|
|
200
|
+
}
|
|
201
|
+
export interface FileRenderThumbnailAdapter {
|
|
202
|
+
/** Prepare lazy content immediately before capture. */
|
|
203
|
+
beforeCapture?: (options: FileViewerThumbnailCaptureOptions) => void | Promise<void>;
|
|
204
|
+
/** Identifies a capture result that comes from packaged metadata rather than rendered content. */
|
|
205
|
+
captureSource?: 'embedded' | 'rendered';
|
|
206
|
+
/** A renderer-native fast path. Returning null delegates to the DOM fallback. */
|
|
207
|
+
capture?: (options: FileViewerThumbnailCaptureOptions) => Blob | null | Promise<Blob | null>;
|
|
208
|
+
/** The first page/slide/sheet/cover element used by the DOM fallback. */
|
|
209
|
+
getTarget?: (options: FileViewerThumbnailCaptureOptions) => Element | null | Promise<Element | null>;
|
|
210
|
+
}
|
|
189
211
|
export interface FileRenderExportOptions {
|
|
190
212
|
mode: FileRenderExportMode;
|
|
191
213
|
title: string;
|
|
@@ -202,9 +224,12 @@ export interface FileRenderContext {
|
|
|
202
224
|
filename?: string;
|
|
203
225
|
url?: string;
|
|
204
226
|
streamUrl?: string;
|
|
227
|
+
signal?: AbortSignal;
|
|
205
228
|
options?: FileViewerOptions;
|
|
206
229
|
surface?: RenderSurface;
|
|
207
230
|
registerExportAdapter?: (adapter: FileRenderExportAdapter | null) => void;
|
|
231
|
+
registerThumbnailAdapter?: (adapter: FileRenderThumbnailAdapter | null) => void;
|
|
232
|
+
renderPurpose?: FileViewerRenderPurpose;
|
|
208
233
|
onProgressiveRender?: () => void;
|
|
209
234
|
renderNestedBuffer?: (buffer: ArrayBuffer, type: string, target: HTMLDivElement, context?: FileRenderContext) => Promise<FileViewerRenderedInstance | undefined>;
|
|
210
235
|
}
|
|
@@ -846,6 +871,7 @@ export interface RendererLoadContext {
|
|
|
846
871
|
options: FileViewerOptions;
|
|
847
872
|
signal?: AbortSignal;
|
|
848
873
|
registerExportAdapter?: (adapter: FileRenderExportAdapter | null) => void;
|
|
874
|
+
registerThumbnailAdapter?: (adapter: FileRenderThumbnailAdapter | null) => void;
|
|
849
875
|
renderContext?: FileRenderContext;
|
|
850
876
|
}
|
|
851
877
|
export interface RendererSession {
|
|
@@ -897,9 +923,15 @@ export interface FileViewerRendererPreset<Handler = FileRenderHandler> {
|
|
|
897
923
|
}
|
|
898
924
|
export type FileViewerRendererPluginInput<Handler = FileRenderHandler> = FileViewerRendererPlugin<Handler> | FileViewerRendererPreset<Handler> | readonly FileViewerRendererPluginInput<Handler>[];
|
|
899
925
|
export type FileViewerRendererPresetInput<Handler = FileRenderHandler> = FileViewerRendererPresetName | FileViewerRendererPluginInput<Handler> | readonly FileViewerRendererPresetInput<Handler>[];
|
|
926
|
+
export interface FileViewerLoadOptions {
|
|
927
|
+
signal?: AbortSignal;
|
|
928
|
+
}
|
|
900
929
|
export interface FileViewerInstance {
|
|
901
930
|
readonly container: HTMLElement;
|
|
902
|
-
|
|
931
|
+
/** Installs configured renderer plugins without loading a document. */
|
|
932
|
+
prepare?(): Promise<void>;
|
|
933
|
+
load(source: FileViewerSource, options?: FileViewerLoadOptions): Promise<RendererSession | null>;
|
|
934
|
+
unload?(reason?: FileViewerLifecycleContext['reason']): Promise<void>;
|
|
903
935
|
destroy(reason?: FileViewerLifecycleContext['reason']): Promise<void>;
|
|
904
936
|
updateOptions(options: Partial<FileViewerOptions>): void;
|
|
905
937
|
getCapabilities(extension?: string): FileViewerOperationAvailability;
|
|
@@ -907,6 +939,8 @@ export interface FileViewerInstance {
|
|
|
907
939
|
getSource(): NormalizedFileViewerSource | null;
|
|
908
940
|
registerExportAdapter(adapter: FileRenderExportAdapter | null): void;
|
|
909
941
|
getExportAdapter(): FileRenderExportAdapter | null;
|
|
942
|
+
registerThumbnailAdapter?(adapter: FileRenderThumbnailAdapter | null): void;
|
|
943
|
+
getThumbnailAdapter?(): FileRenderThumbnailAdapter | null;
|
|
910
944
|
download(options?: FileViewerDownloadOptions): Promise<void>;
|
|
911
945
|
exportHtml(options?: FileViewerExportHtmlOptions): Promise<string>;
|
|
912
946
|
print(options?: FileViewerPrintOptions): Promise<void>;
|
package/dist/index.d.ts
CHANGED
|
@@ -88,4 +88,4 @@ export type { CreateFileViewerZoomControllerOptions, FileViewerZoomOperation, }
|
|
|
88
88
|
export type { CreateViewerOptions } from './viewer/createViewer';
|
|
89
89
|
export type { BuildExportHtmlDocumentOptions, BuildFileViewerRenderedHtmlDocumentOptions, } from './output/export';
|
|
90
90
|
export type { CreateFileViewerWorkerControllerOptions, FileViewerWorkerContext, FileViewerWorkerController, FileViewerWorkerErrorHook, FileViewerWorkerEventHandler, FileViewerWorkerFactory, FileViewerWorkerMessageHook, WorkerProvider, WorkerRef, } from './platform/worker';
|
|
91
|
-
export type { FileViewerAiOptions, FileViewerArchiveEntryActionContext, FileViewerArchiveEntryActionPolicy, FileViewerArchiveEntryActionsOptions, FileViewerArchivePasswordRequestContext, FileViewerArchivePasswordRequestReason, FileViewerArchiveOptions, FileViewerApplyViewStateOptions, FileViewerBeforeOperation, FileViewerCadDwfLineWeightMode, FileViewerCadOptions, FileViewerCadRenderer, FileViewerComponentEmits, FileViewerComponentEventMap, FileViewerComponentProps, FileViewerDocumentAnchor, FileViewerDocumentChunk, FileViewerDownloadOptions, FileViewerDocxOptions, FileViewerDrawingOptions, FileViewerEvent, FileViewerEventHandler, FileViewerEventType, FileViewerExportHtmlOptions, FileViewerFileRef, FileViewerFitMode, FileViewerFitOptions, FileViewerFitRequest, FileViewerFitResize, FileViewerFitResult, FileViewerGeoBasemapOptions, FileViewerGeoBasemapPreset, FileViewerGeoOptions, FileRenderContext, FileRenderExportAdapter, FileRenderExportMode, FileRenderExportOptions, FileRenderHandler, FileRenderHandlerComposite, FileViewerBuiltinRendererPreset, FileViewerInstance, FileViewerLifecycleContext, FileViewerLifecycleHooks, FileViewerLifecyclePhase, FileViewerI18nOptions, FileViewerLocale, FileViewerMessageKey, FileViewerMessageParams, FileViewerMessageResolver, FileViewerMessages, FileViewerNavigationState, FileViewerOperationAvailability, FileViewerOperationContext, FileViewerOperationType, FileViewerOptions, FileViewerPdfOptions, FileViewerPresentationOptions, FileViewerPrintOptions, FileViewerPublicApi, FileViewerRenderedInstance, FileViewerRendererMode, FileViewerRendererPluginAssetKind, FileViewerRendererPluginAssetManifest, FileViewerRendererPluginAssetEntry, FileViewerRenderStateKind, FileViewerRendererCategory, FileViewerRendererHandlerRegistration, FileViewerRendererInstallContext, FileViewerRendererPlugin, FileViewerRendererPluginInput, FileViewerRendererPresetInput, FileViewerRendererPresetName, FileViewerRendererPreset, FileViewerSearchMatch, FileViewerSearchOptions, FileViewerSearchProvider, FileViewerSearchState, FileViewerSource, FileViewerSourceKind, FileViewerSpreadsheetOptions, FileViewerStateDescriptor, FileViewerStateTheme, FileViewerStyleIsolation, FileViewerTextOptions, FileViewerResolvedThemeMode, FileViewerThemeMode, FileViewerToolbarActionMap, FileViewerToolbarItem, FileViewerToolbarOptions, FileViewerToolbarPosition, FileViewerResolvedToolbarItem, FileViewerUiDensity, FileViewerUiOptions, FileViewerTypstOptions, FileViewerViewScrollState, FileViewerViewState, FileViewerViewStateChange, FileViewerViewStateChangeAction, FileViewerViewStateChangeSource, FileViewerViewStateProvider, FileViewerWatermarkOptions, FileViewerZoomProvider, FileViewerZoomState, NormalizedFileViewerSource, RendererCapability, RendererDefinition, RendererPlugin, RendererLoadContext, RendererLoader, RendererRegistry, RendererSession, RenderSurface, ViewerCapabilityState, ViewerLifecycleContext, ViewerOperationContext, } from './contracts/types';
|
|
91
|
+
export type { FileViewerAiOptions, FileViewerArchiveEntryActionContext, FileViewerArchiveEntryActionPolicy, FileViewerArchiveEntryActionsOptions, FileViewerArchivePasswordRequestContext, FileViewerArchivePasswordRequestReason, FileViewerArchiveOptions, FileViewerApplyViewStateOptions, FileViewerBeforeOperation, FileViewerCadDwfLineWeightMode, FileViewerCadOptions, FileViewerCadRenderer, FileViewerComponentEmits, FileViewerComponentEventMap, FileViewerComponentProps, FileViewerDocumentAnchor, FileViewerDocumentChunk, FileViewerDownloadOptions, FileViewerDocxOptions, FileViewerDrawingOptions, FileViewerEvent, FileViewerEventHandler, FileViewerEventType, FileViewerExportHtmlOptions, FileViewerFileRef, FileViewerFitMode, FileViewerFitOptions, FileViewerFitRequest, FileViewerFitResize, FileViewerFitResult, FileViewerGeoBasemapOptions, FileViewerGeoBasemapPreset, FileViewerGeoOptions, FileRenderContext, FileRenderExportAdapter, FileRenderThumbnailAdapter, FileRenderExportMode, FileRenderExportOptions, FileRenderHandler, FileRenderHandlerComposite, FileViewerBuiltinRendererPreset, FileViewerInstance, FileViewerLoadOptions, FileViewerLifecycleContext, FileViewerLifecycleHooks, FileViewerLifecyclePhase, FileViewerI18nOptions, FileViewerLocale, FileViewerMessageKey, FileViewerMessageParams, FileViewerMessageResolver, FileViewerMessages, FileViewerNavigationState, FileViewerOperationAvailability, FileViewerOperationContext, FileViewerOperationType, FileViewerOptions, FileViewerPdfOptions, FileViewerPresentationOptions, FileViewerPrintOptions, 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, FileViewerZoomProvider, FileViewerZoomState, NormalizedFileViewerSource, RendererCapability, RendererDefinition, RendererPlugin, RendererLoadContext, RendererLoader, RendererRegistry, RendererSession, RenderSurface, ViewerCapabilityState, ViewerLifecycleContext, ViewerOperationContext, } from './contracts/types';
|
|
@@ -315,4 +315,4 @@ export declare const DEFAULT_RENDERER_DEFINITIONS: readonly [{
|
|
|
315
315
|
readonly search: true;
|
|
316
316
|
};
|
|
317
317
|
}];
|
|
318
|
-
export declare const DEFAULT_SUPPORTED_EXTENSIONS: readonly ("markdown" | "xyz" | "wasm" | "pdf" | "typst" | "zip" | "zipx" | "7z" | "rar" | "tar" | "gz" | "gzip" | "tgz" | "bz2" | "bzip2" | "tbz" | "tbz2" | "xz" | "txz" | "lzma" | "zst" | "tzst" | "cab" | "ar" | "cpio" | "iso" | "xar" | "lha" | "lzh" | "jar" | "war" | "ear" | "apk" | "cbz" | "cbr" | "glb" | "gltf" | "obj" | "stl" | "ply" | "fbx" | "dae" | "3ds" | "3mf" | "amf" | "usd" | "usda" | "usdc" | "usdz" | "kmz" | "step" | "stp" | "iges" | "igs" | "ifc" | "3dm" | "brep" | "pcd" | "wrl" | "vrml" | "vtk" | "vtp" | "txt" | "json" | "js" | "mjs" | "cjs" | "css" | "java" | "py" | "html" | "htm" | "jsx" | "ts" | "tsx" | "xml" | "log" | "vue" | "yaml" | "yml" | "ini" | "sh" | "bash" | "sql" | "go" | "rs" | "php" | "c" | "cpp" | "cc" | "h" | "hpp" | "cs" | "diff" | "patch" | "bundle" | "bdl" | "jsonc" | "json5" | "ipynb" | "toml" | "proto" | "hcl" | "tex" | "gv" | "http" | "react" | "rb" | "swift" | "kt" | "gif" | "jpg" | "
|
|
318
|
+
export declare const DEFAULT_SUPPORTED_EXTENSIONS: readonly ("markdown" | "webp" | "jpeg" | "png" | "xyz" | "wasm" | "pdf" | "typst" | "zip" | "zipx" | "7z" | "rar" | "tar" | "gz" | "gzip" | "tgz" | "bz2" | "bzip2" | "tbz" | "tbz2" | "xz" | "txz" | "lzma" | "zst" | "tzst" | "cab" | "ar" | "cpio" | "iso" | "xar" | "lha" | "lzh" | "jar" | "war" | "ear" | "apk" | "cbz" | "cbr" | "glb" | "gltf" | "obj" | "stl" | "ply" | "fbx" | "dae" | "3ds" | "3mf" | "amf" | "usd" | "usda" | "usdc" | "usdz" | "kmz" | "step" | "stp" | "iges" | "igs" | "ifc" | "3dm" | "brep" | "pcd" | "wrl" | "vrml" | "vtk" | "vtp" | "txt" | "json" | "js" | "mjs" | "cjs" | "css" | "java" | "py" | "html" | "htm" | "jsx" | "ts" | "tsx" | "xml" | "log" | "vue" | "yaml" | "yml" | "ini" | "sh" | "bash" | "sql" | "go" | "rs" | "php" | "c" | "cpp" | "cc" | "h" | "hpp" | "cs" | "diff" | "patch" | "bundle" | "bdl" | "jsonc" | "json5" | "ipynb" | "toml" | "proto" | "hcl" | "tex" | "gv" | "http" | "react" | "rb" | "swift" | "kt" | "gif" | "jpg" | "bmp" | "tiff" | "tif" | "svg" | "avif" | "ico" | "heic" | "heif" | "jxl" | "docx" | "docm" | "dotx" | "dotm" | "doc" | "dot" | "pptx" | "pptm" | "potx" | "potm" | "ppsx" | "ppsm" | "rtf" | "odt" | "odp" | "xlsx" | "xltx" | "xlsm" | "xlsb" | "xls" | "xlt" | "xltm" | "csv" | "ods" | "fods" | "numbers" | "ofd" | "typ" | "eml" | "msg" | "mbox" | "olb" | "dra" | "gds" | "oas" | "oasis" | "dxf" | "dwg" | "dwf" | "dwfx" | "xps" | "geojson" | "kml" | "gpx" | "shp" | "excalidraw" | "drawio" | "dio" | "mermaid" | "mmd" | "plantuml" | "puml" | "xmind" | "epub" | "umd" | "md" | "mp4" | "webm" | "m3u8" | "mp3" | "mpeg" | "wav" | "ogg" | "oga" | "opus" | "m4a" | "aac" | "flac" | "weba" | "midi" | "mid" | "ttf" | "otf" | "woff" | "woff2" | "psd" | "ai" | "eps" | "sqlite" | "parquet" | "avro" | "webarchive")[];
|
package/dist/renderers/image.js
CHANGED
|
@@ -102,10 +102,13 @@ const createLightbox = (documentRef, src, t) => {
|
|
|
102
102
|
};
|
|
103
103
|
};
|
|
104
104
|
export default async function renderImage(buffer, target, type, context) {
|
|
105
|
-
var _a;
|
|
105
|
+
var _a, _b;
|
|
106
106
|
const t = createFileViewerTranslator(context === null || context === void 0 ? void 0 : context.options);
|
|
107
107
|
const documentRef = target.ownerDocument || document;
|
|
108
108
|
const src = await resolveImageUrl(buffer, type);
|
|
109
|
+
(_a = context === null || context === void 0 ? void 0 : context.registerThumbnailAdapter) === null || _a === void 0 ? void 0 : _a.call(context, {
|
|
110
|
+
capture: () => new Blob([buffer], { type: getImageBlobType(type) }),
|
|
111
|
+
});
|
|
109
112
|
let userZoom = 1;
|
|
110
113
|
let fitScale = 1;
|
|
111
114
|
let currentScale = 1;
|
|
@@ -236,11 +239,13 @@ export default async function renderImage(buffer, target, type, context) {
|
|
|
236
239
|
subscribe: zoomEmitter.subscribe,
|
|
237
240
|
});
|
|
238
241
|
target.replaceChildren(createStyle(documentRef), root);
|
|
239
|
-
(((
|
|
242
|
+
(((_b = context === null || context === void 0 ? void 0 : context.surface) === null || _b === void 0 ? void 0 : _b.shadowRoot) || target).append(lightbox.element);
|
|
240
243
|
updateViewportSize();
|
|
241
244
|
return {
|
|
242
245
|
$el: target,
|
|
243
246
|
unmount() {
|
|
247
|
+
var _a;
|
|
248
|
+
(_a = context === null || context === void 0 ? void 0 : context.registerThumbnailAdapter) === null || _a === void 0 ? void 0 : _a.call(context, null);
|
|
244
249
|
unregisterFileViewerZoomProvider(root);
|
|
245
250
|
resizeObserver.disconnect();
|
|
246
251
|
image.removeEventListener('load', updateViewportSize);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { FileViewerRendererDispatcher } from './dispatcher';
|
|
2
2
|
import { type FileViewerMutableAccessor, type MutableFileViewerRenderReadinessState } from '../source/loading';
|
|
3
|
-
import type { FileRenderExportAdapter, FileRenderContext, FileRenderHandler, FileViewerLifecycleContext, FileViewerOptions, FileViewerStyleIsolation, RenderSurface, RendererDefinition, RendererLoadContext, RendererLoader, RendererRegistry, RendererSession } from '../contracts/types';
|
|
3
|
+
import type { FileRenderExportAdapter, FileRenderThumbnailAdapter, FileRenderContext, FileRenderHandler, FileViewerLifecycleContext, FileViewerOptions, FileViewerStyleIsolation, RenderSurface, RendererDefinition, RendererLoadContext, RendererLoader, RendererRegistry, RendererSession } from '../contracts/types';
|
|
4
4
|
export declare const FILE_VIEWER_RENDER_SESSION_DISPOSE_ERROR_MESSAGE = "\u9884\u89C8\u5185\u5BB9\u5378\u8F7D\u5931\u8D25";
|
|
5
5
|
export interface ResolveFileViewerRenderSessionDisposeErrorMessageInput {
|
|
6
6
|
message?: string;
|
|
@@ -34,6 +34,7 @@ export interface DisposeFileViewerRendererSessionOptions {
|
|
|
34
34
|
export interface FileViewerRenderSurfaceState<Session extends RendererSession = RendererSession> {
|
|
35
35
|
session: Session | null;
|
|
36
36
|
exportAdapter: FileRenderExportAdapter | null;
|
|
37
|
+
thumbnailAdapter: FileRenderThumbnailAdapter | null;
|
|
37
38
|
}
|
|
38
39
|
export type MutableFileViewerRenderSurfaceState<Session extends RendererSession = RendererSession> = FileViewerRenderSurfaceState<Session>;
|
|
39
40
|
export interface CreateFileViewerRenderReadinessTargetInput {
|
|
@@ -43,6 +44,7 @@ export interface CreateFileViewerRenderReadinessTargetInput {
|
|
|
43
44
|
export interface CreateFileViewerRenderSurfaceStateTargetInput<Session extends RendererSession = RendererSession> {
|
|
44
45
|
session: FileViewerMutableAccessor<Session | null>;
|
|
45
46
|
exportAdapter: FileViewerMutableAccessor<FileRenderExportAdapter | null>;
|
|
47
|
+
thumbnailAdapter?: FileViewerMutableAccessor<FileRenderThumbnailAdapter | null>;
|
|
46
48
|
}
|
|
47
49
|
export interface CreateFileViewerRenderTargetOptions {
|
|
48
50
|
className?: string;
|
|
@@ -171,7 +173,7 @@ export declare const appendFileViewerStyle: (target: HTMLElement | ShadowRoot, c
|
|
|
171
173
|
export declare const removeFileViewerRenderTarget: (container: HTMLElement, target: HTMLElement) => boolean;
|
|
172
174
|
export declare const createFileViewerRenderSurfaceState: <Session extends RendererSession = RendererSession>() => FileViewerRenderSurfaceState<Session>;
|
|
173
175
|
export declare const createFileViewerRenderReadinessTarget: ({ renderedReady, progressiveReady, }: CreateFileViewerRenderReadinessTargetInput) => MutableFileViewerRenderReadinessState;
|
|
174
|
-
export declare const createFileViewerRenderSurfaceStateTarget: <Session extends RendererSession = RendererSession>({ session, exportAdapter, }: CreateFileViewerRenderSurfaceStateTargetInput<Session>) => MutableFileViewerRenderSurfaceState<Session>;
|
|
176
|
+
export declare const createFileViewerRenderSurfaceStateTarget: <Session extends RendererSession = RendererSession>({ session, exportAdapter, thumbnailAdapter, }: CreateFileViewerRenderSurfaceStateTargetInput<Session>) => MutableFileViewerRenderSurfaceState<Session>;
|
|
175
177
|
export declare const applyFileViewerRenderSurfaceState: <Session extends RendererSession, Target extends MutableFileViewerRenderSurfaceState<Session>>(target: Target, state: Partial<FileViewerRenderSurfaceState<Session>>) => Target;
|
|
176
178
|
export declare const createFileRenderHandlerRendererSession: <Rendered = unknown>(rendered: Rendered, destroy?: () => void | Promise<void>) => FileRenderHandlerRendererSession<Rendered>;
|
|
177
179
|
export interface CreateFileRenderHandlerRegistryOptions<Rendered = unknown, Target extends HTMLElement = HTMLElement> extends Omit<CreateFileRenderHandlerLoaderOptions<Rendered, Target>, 'handler'> {
|
|
@@ -196,7 +198,7 @@ export declare const resetFileViewerRenderSurface: <Session extends RendererSess
|
|
|
196
198
|
export declare const runFileViewerRenderSurfaceClear: <Session extends RendererSession, UnloadContext = FileViewerLifecycleContext | null>({ reason, surfaceState, readinessState, container, disposeOptions, onUnloadStart, onUnloadComplete, onClearActiveDocumentContext, onClearDocumentState, onStopZoomObserver, onClearZoomProvider, onStopFitObserver, onStopViewStateObserver, onClearViewStateProvider, }: RunFileViewerRenderSurfaceClearInput<Session, UnloadContext>) => FileViewerRenderSurfaceClearState<Session, UnloadContext>;
|
|
197
199
|
export declare const runFileViewerRenderSurfaceMount: <Session extends RendererSession>({ buffer, file, version, sourceUrl, streamUrl, getContainer, surfaceState, readinessState, isCurrent, clearRenderedContent, render, waitForContainer, waitForPaint, disposeSession, onStartZoomObserver, onStartFitObserver, onStartViewStateObserver, onApplyInitialFit, onRefreshDocumentIndex, onRefreshZoomProvider, onRefreshViewStateProvider, }: RunFileViewerRenderSurfaceMountInput<Session>) => Promise<Session | undefined>;
|
|
198
200
|
export declare const createFileViewerRenderSurfaceActionHandlers: <Session extends RendererSession, UnloadContext = FileViewerLifecycleContext | null>({ getContainer, surfaceState, readinessState, isCurrent, render, waitForContainer, waitForPaint, disposeOptions, onUnloadStart, onUnloadComplete, onClearActiveDocumentContext, onClearDocumentState, onStartZoomObserver, onStopZoomObserver, onClearZoomProvider, onStartFitObserver, onStopFitObserver, onStartViewStateObserver, onStopViewStateObserver, onClearViewStateProvider, onApplyInitialFit, onRefreshDocumentIndex, onRefreshZoomProvider, onRefreshViewStateProvider, }: CreateFileViewerRenderSurfaceActionHandlersInput<Session, UnloadContext>) => FileViewerRenderSurfaceActionHandlers<Session, UnloadContext>;
|
|
199
|
-
export declare const buildFileRenderContextFromLoadContext: ({ source, surface, options, registerExportAdapter, renderContext, }: RendererLoadContext) => FileRenderContext;
|
|
201
|
+
export declare const buildFileRenderContextFromLoadContext: ({ source, surface, options, signal, registerExportAdapter, registerThumbnailAdapter, renderContext, }: RendererLoadContext) => FileRenderContext;
|
|
200
202
|
export declare const renderFileViewerHandler: <Rendered = unknown, Target extends HTMLElement = HTMLElement>({ dispatcher, buffer, target, type, context, throwOnMissingHandler, }: RenderFileViewerHandlerInput<Rendered, Target>) => Promise<Rendered | undefined>;
|
|
201
203
|
export declare const createFileRenderHandlerLoader: <Rendered = unknown, Target extends HTMLElement = HTMLElement>({ handler, rendererId, getTarget, createContext, destroy, }: CreateFileRenderHandlerLoaderOptions<Rendered, Target>) => RendererLoader;
|
|
202
204
|
export declare const createFileRenderHandlerRegistry: <Rendered = unknown, Target extends HTMLElement = HTMLElement>({ definitions, handlers, getTarget, createContext, destroy, }: CreateFileRenderHandlerRegistryOptions<Rendered, Target>) => FileRenderHandlerRegistryResult<Rendered, Target>;
|
|
@@ -157,6 +157,7 @@ export const removeFileViewerRenderTarget = (container, target) => {
|
|
|
157
157
|
export const createFileViewerRenderSurfaceState = () => ({
|
|
158
158
|
session: null,
|
|
159
159
|
exportAdapter: null,
|
|
160
|
+
thumbnailAdapter: null,
|
|
160
161
|
});
|
|
161
162
|
export const createFileViewerRenderReadinessTarget = ({ renderedReady, progressiveReady, }) => {
|
|
162
163
|
return {
|
|
@@ -174,7 +175,8 @@ export const createFileViewerRenderReadinessTarget = ({ renderedReady, progressi
|
|
|
174
175
|
},
|
|
175
176
|
};
|
|
176
177
|
};
|
|
177
|
-
export const createFileViewerRenderSurfaceStateTarget = ({ session, exportAdapter, }) => {
|
|
178
|
+
export const createFileViewerRenderSurfaceStateTarget = ({ session, exportAdapter, thumbnailAdapter, }) => {
|
|
179
|
+
let localThumbnailAdapter = null;
|
|
178
180
|
return {
|
|
179
181
|
get session() {
|
|
180
182
|
return session.get();
|
|
@@ -188,16 +190,27 @@ export const createFileViewerRenderSurfaceStateTarget = ({ session, exportAdapte
|
|
|
188
190
|
set exportAdapter(value) {
|
|
189
191
|
exportAdapter.set(value);
|
|
190
192
|
},
|
|
193
|
+
get thumbnailAdapter() {
|
|
194
|
+
var _a;
|
|
195
|
+
return (_a = thumbnailAdapter === null || thumbnailAdapter === void 0 ? void 0 : thumbnailAdapter.get()) !== null && _a !== void 0 ? _a : localThumbnailAdapter;
|
|
196
|
+
},
|
|
197
|
+
set thumbnailAdapter(value) {
|
|
198
|
+
localThumbnailAdapter = value;
|
|
199
|
+
thumbnailAdapter === null || thumbnailAdapter === void 0 ? void 0 : thumbnailAdapter.set(value);
|
|
200
|
+
},
|
|
191
201
|
};
|
|
192
202
|
};
|
|
193
203
|
export const applyFileViewerRenderSurfaceState = (target, state) => {
|
|
194
|
-
var _a, _b;
|
|
204
|
+
var _a, _b, _c;
|
|
195
205
|
if ('session' in state) {
|
|
196
206
|
target.session = (_a = state.session) !== null && _a !== void 0 ? _a : null;
|
|
197
207
|
}
|
|
198
208
|
if ('exportAdapter' in state) {
|
|
199
209
|
target.exportAdapter = (_b = state.exportAdapter) !== null && _b !== void 0 ? _b : null;
|
|
200
210
|
}
|
|
211
|
+
if ('thumbnailAdapter' in state) {
|
|
212
|
+
target.thumbnailAdapter = (_c = state.thumbnailAdapter) !== null && _c !== void 0 ? _c : null;
|
|
213
|
+
}
|
|
201
214
|
return target;
|
|
202
215
|
};
|
|
203
216
|
export const createFileRenderHandlerRendererSession = (rendered, destroy) => ({
|
|
@@ -265,7 +278,7 @@ export const disposeActiveFileViewerRendererSession = (target, options = {}) =>
|
|
|
265
278
|
};
|
|
266
279
|
export const resetFileViewerRenderSurface = ({ surfaceState, readinessState, container, disposeOptions, }) => {
|
|
267
280
|
const session = disposeActiveFileViewerRendererSession(surfaceState, disposeOptions);
|
|
268
|
-
applyFileViewerRenderSurfaceState(surfaceState, { exportAdapter: null });
|
|
281
|
+
applyFileViewerRenderSurfaceState(surfaceState, { exportAdapter: null, thumbnailAdapter: null });
|
|
269
282
|
applyFileViewerRenderReadinessState(readinessState, {
|
|
270
283
|
renderedReady: false,
|
|
271
284
|
progressiveReady: false,
|
|
@@ -430,13 +443,15 @@ export const createFileViewerRenderSurfaceActionHandlers = ({ getContainer, surf
|
|
|
430
443
|
mountRenderedContent,
|
|
431
444
|
};
|
|
432
445
|
};
|
|
433
|
-
export const buildFileRenderContextFromLoadContext = ({ source, surface, options, registerExportAdapter, renderContext, }) => ({
|
|
446
|
+
export const buildFileRenderContextFromLoadContext = ({ source, surface, options, signal, registerExportAdapter, registerThumbnailAdapter, renderContext, }) => ({
|
|
434
447
|
filename: source.filename,
|
|
435
448
|
url: source.url,
|
|
436
449
|
streamUrl: source.url,
|
|
450
|
+
signal,
|
|
437
451
|
options,
|
|
438
452
|
surface,
|
|
439
453
|
registerExportAdapter,
|
|
454
|
+
registerThumbnailAdapter,
|
|
440
455
|
...renderContext,
|
|
441
456
|
});
|
|
442
457
|
export const renderFileViewerHandler = async ({ dispatcher, buffer, target, type = '', context, throwOnMissingHandler = false, }) => {
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import type { FileViewerEventHandler, FileViewerInstance, FileViewerOptions, RendererRegistry } from '../contracts/types';
|
|
1
|
+
import type { FileViewerEventHandler, FileViewerInstance, FileViewerOptions, FileViewerRenderPurpose, RendererRegistry } from '../contracts/types';
|
|
2
2
|
export interface CreateViewerOptions {
|
|
3
3
|
registry?: RendererRegistry;
|
|
4
4
|
options?: FileViewerOptions;
|
|
5
5
|
signal?: AbortSignal;
|
|
6
6
|
onEvent?: FileViewerEventHandler;
|
|
7
|
+
renderPurpose?: FileViewerRenderPurpose;
|
|
7
8
|
}
|
|
8
9
|
export declare const createViewer: (container: HTMLElement, createOptions?: CreateViewerOptions) => FileViewerInstance;
|
|
@@ -56,6 +56,27 @@ const resolveAutoRenderersEnabled = (options) => {
|
|
|
56
56
|
}
|
|
57
57
|
return (options.rendererMode || 'extend') !== 'replace';
|
|
58
58
|
};
|
|
59
|
+
const createFileViewerLoadSignal = (controller, signals) => {
|
|
60
|
+
if (!controller) {
|
|
61
|
+
return signals.find(signal => signal);
|
|
62
|
+
}
|
|
63
|
+
const removeListeners = [];
|
|
64
|
+
const cleanup = () => removeListeners.splice(0).forEach(remove => remove());
|
|
65
|
+
controller.signal.addEventListener('abort', cleanup, { once: true });
|
|
66
|
+
for (const signal of signals) {
|
|
67
|
+
if (!signal) {
|
|
68
|
+
continue;
|
|
69
|
+
}
|
|
70
|
+
if (signal.aborted) {
|
|
71
|
+
controller.abort(signal.reason);
|
|
72
|
+
break;
|
|
73
|
+
}
|
|
74
|
+
const onAbort = () => controller.abort(signal.reason);
|
|
75
|
+
signal.addEventListener('abort', onAbort, { once: true });
|
|
76
|
+
removeListeners.push(() => signal.removeEventListener('abort', onAbort));
|
|
77
|
+
}
|
|
78
|
+
return controller.signal;
|
|
79
|
+
};
|
|
59
80
|
const renderMissingRendererState = (container, type, options) => {
|
|
60
81
|
const documentRef = container.ownerDocument;
|
|
61
82
|
const state = createFileViewerUnsupportedState(type, undefined, options);
|
|
@@ -427,6 +448,7 @@ export const createViewer = (container, createOptions = {}) => {
|
|
|
427
448
|
applyFileViewerRenderSurfaceState(renderSurfaceState, {
|
|
428
449
|
session: null,
|
|
429
450
|
exportAdapter: null,
|
|
451
|
+
thumbnailAdapter: null,
|
|
430
452
|
});
|
|
431
453
|
removeWatermarkOverlay();
|
|
432
454
|
await documentActions.clearDocumentState();
|
|
@@ -440,8 +462,16 @@ export const createViewer = (container, createOptions = {}) => {
|
|
|
440
462
|
};
|
|
441
463
|
const instance = {
|
|
442
464
|
container,
|
|
443
|
-
async
|
|
465
|
+
async prepare() {
|
|
466
|
+
await ensureRendererPluginsInstalled();
|
|
467
|
+
},
|
|
468
|
+
async load(source, loadOptions = {}) {
|
|
444
469
|
const version = requestScope.requestController.createVersion();
|
|
470
|
+
const requestAbortController = requestScope.requestController.createAbortController();
|
|
471
|
+
const loadSignal = createFileViewerLoadSignal(requestAbortController, [
|
|
472
|
+
createOptions.signal,
|
|
473
|
+
loadOptions.signal,
|
|
474
|
+
]);
|
|
445
475
|
await destroyCurrent('replace');
|
|
446
476
|
await ensureRendererPluginsInstalled();
|
|
447
477
|
if (!requestScope.isCurrentRequest(version)) {
|
|
@@ -470,12 +500,20 @@ export const createViewer = (container, createOptions = {}) => {
|
|
|
470
500
|
source: normalized,
|
|
471
501
|
surface,
|
|
472
502
|
options,
|
|
473
|
-
signal:
|
|
503
|
+
signal: loadSignal,
|
|
474
504
|
registerExportAdapter: adapter => {
|
|
475
505
|
if (requestScope.isCurrentRequest(version)) {
|
|
476
506
|
applyFileViewerRenderSurfaceState(renderSurfaceState, { exportAdapter: adapter });
|
|
477
507
|
}
|
|
478
508
|
},
|
|
509
|
+
registerThumbnailAdapter: adapter => {
|
|
510
|
+
if (requestScope.isCurrentRequest(version)) {
|
|
511
|
+
applyFileViewerRenderSurfaceState(renderSurfaceState, { thumbnailAdapter: adapter });
|
|
512
|
+
}
|
|
513
|
+
},
|
|
514
|
+
renderContext: {
|
|
515
|
+
renderPurpose: createOptions.renderPurpose || 'preview',
|
|
516
|
+
},
|
|
479
517
|
});
|
|
480
518
|
}
|
|
481
519
|
catch (error) {
|
|
@@ -504,6 +542,10 @@ export const createViewer = (container, createOptions = {}) => {
|
|
|
504
542
|
await emitLifecycle(options, createOptions.onEvent, 'load-complete', normalized, version, startedAt);
|
|
505
543
|
return session;
|
|
506
544
|
},
|
|
545
|
+
async unload(reason = 'replace') {
|
|
546
|
+
requestScope.requestController.createVersion();
|
|
547
|
+
await destroyCurrent(reason);
|
|
548
|
+
},
|
|
507
549
|
async destroy(reason = 'component-unmount') {
|
|
508
550
|
requestScope.requestController.createVersion();
|
|
509
551
|
await destroyCurrent(reason);
|
|
@@ -540,6 +582,12 @@ export const createViewer = (container, createOptions = {}) => {
|
|
|
540
582
|
getExportAdapter() {
|
|
541
583
|
return renderSurfaceState.exportAdapter;
|
|
542
584
|
},
|
|
585
|
+
registerThumbnailAdapter(adapter) {
|
|
586
|
+
applyFileViewerRenderSurfaceState(renderSurfaceState, { thumbnailAdapter: adapter });
|
|
587
|
+
},
|
|
588
|
+
getThumbnailAdapter() {
|
|
589
|
+
return renderSurfaceState.thumbnailAdapter;
|
|
590
|
+
},
|
|
543
591
|
async download(downloadOptions = {}) {
|
|
544
592
|
const source = createFileViewerOriginalSourceStateFromNormalizedSource(currentSource);
|
|
545
593
|
await executeFileViewerDownloadOperation({
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@file-viewer/core",
|
|
3
|
-
"version": "2.1.
|
|
3
|
+
"version": "2.1.27",
|
|
4
4
|
"private": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"description": "Framework-neutral modular TypeScript core for Flyfish File Viewer renderer orchestration, lifecycle APIs, search, zoom, print, and export",
|