@file-viewer/core 3.2.2 → 3.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.en.md +12 -1
- package/README.md +36 -30
- package/README.zh-CN.md +171 -0
- package/dist/browser/controller.js +56 -15
- package/dist/browser/toolbar-focus.d.ts +1 -0
- package/dist/browser/toolbar-focus.js +43 -0
- package/dist/contracts/types.d.ts +9 -0
- package/dist/features/document/imageHandTool.d.ts +1 -0
- package/dist/features/document/imageHandTool.js +137 -0
- package/dist/headless.d.ts +2 -2
- package/dist/headless.js +1 -1
- package/dist/index.d.ts +4 -2
- package/dist/index.js +3 -1
- package/dist/lifecycle/operations.d.ts +1 -0
- package/dist/lifecycle/operations.js +11 -0
- package/dist/platform/assets.d.ts +1 -1
- package/dist/platform/assets.js +1 -1
- package/dist/presentation/colorScheme.d.ts +2 -0
- package/dist/presentation/colorScheme.js +39 -0
- package/dist/renderers/image.js +7 -3
- package/dist/source/loading.d.ts +8 -3
- package/dist/source/loading.js +16 -14
- package/dist/viewer/createViewer.js +2 -0
- package/package.json +10 -3
package/dist/index.js
CHANGED
|
@@ -167,11 +167,12 @@ export const parseEdaFile = async (buffer, type) => {
|
|
|
167
167
|
throw new Error('EDA parsing has moved out of @file-viewer/core. Import parseEdaFile from @file-viewer/renderer-eda instead.');
|
|
168
168
|
};
|
|
169
169
|
export { ADAPTER_PRINT_REQUIRED_EXTENSIONS, applyFileViewerZoomAvailability, createUnsupportedAvailability, DEFAULT_OPERATION_AVAILABILITY, DOM_PRINTABLE_EXTENSIONS, getRendererAvailability, isDomPrintableExtension, isKnownNonPrintableExtension, needsDedicatedPrintAdapter, NON_PRINTABLE_EXTENSIONS, resolvePrintAvailability, } from "./registry/capabilities.js";
|
|
170
|
-
export { FILE_VIEWER_LIFECYCLE_HOOKS, FILE_VIEWER_BEFORE_OPERATION_ERROR_PREFIX, DEFAULT_FILE_VIEWER_TOOLBAR_ORDER, FILE_VIEWER_LIFECYCLE_HOOK_ERROR_MESSAGE_PREFIX, FILE_VIEWER_OPERATION_LABELS, buildFileViewerLifecycleContext, buildFileViewerLifecycleContextFromNormalizedSource, buildFileViewerOperationContext, buildFileViewerOperationContextFromLifecycleState, cloneFileViewerOperationAvailability, createFileViewerLifecycleActions, createFileViewerLifecycleStateController, createFileViewerPublicApi, createFileViewerToolbarActions, createFileViewerToolbarControllerActionHandlers, createFileViewerToolbarZoomSyncSnapshot, DEFAULT_FILE_VIEWER_LIFECYCLE_HOOK_ERROR_LOGGER, DEFAULT_FILE_VIEWER_OPERATION_ERROR_LOGGER, dispatchFileViewerLifecycleEvent, dispatchFileViewerOperationContextEvent, dispatchFileViewerOperationAvailabilityChange, dispatchFileViewerZoomChange, emitFileViewerComponentLifecycleEvent, getFileViewerBeforeOperationHooks, getFileViewerLifecycleHookName, hasVisibleFileViewerToolbarActions, isFileViewerToolbarOperationPermitted, isFileViewerZoomButtonDisabled, normalizeFileViewerToolbar, reportFileViewerLifecycleHookError, reportFileViewerOperationError, resolveFileViewerLifecycleFallbackSource, resolveFileViewerLifecycleHookErrorMessage, resolveFileViewerBeforeOperationErrorMessage, resolveFileViewerOperationAvailability, resolveFileViewerToolbarOrder, resolveFileViewerToolbarState, resolveFileViewerToolbarPosition, resolveVisibleFileViewerToolbar, runFileViewerActiveUnloadComplete, runFileViewerActiveUnloadStart, runFileViewerBeforeOperation, runFileViewerLifecycleHook, runFileViewerToolbarAvailabilitySync, runFileViewerToolbarZoomSync, serializeFileViewerContext, } from "./lifecycle/operations.js";
|
|
170
|
+
export { FILE_VIEWER_LIFECYCLE_HOOKS, FILE_VIEWER_BEFORE_OPERATION_ERROR_PREFIX, DEFAULT_FILE_VIEWER_TOOLBAR_ORDER, FILE_VIEWER_LIFECYCLE_HOOK_ERROR_MESSAGE_PREFIX, FILE_VIEWER_OPERATION_LABELS, buildFileViewerLifecycleContext, buildFileViewerLifecycleContextFromNormalizedSource, buildFileViewerOperationContext, buildFileViewerOperationContextFromLifecycleState, cloneFileViewerOperationAvailability, createFileViewerLifecycleActions, createFileViewerLifecycleStateController, createFileViewerPublicApi, createFileViewerToolbarActions, createFileViewerToolbarControllerActionHandlers, createFileViewerToolbarZoomSyncSnapshot, DEFAULT_FILE_VIEWER_LIFECYCLE_HOOK_ERROR_LOGGER, DEFAULT_FILE_VIEWER_OPERATION_ERROR_LOGGER, dispatchFileViewerLifecycleEvent, dispatchFileViewerOperationContextEvent, dispatchFileViewerOperationAvailabilityChange, dispatchFileViewerZoomChange, emitFileViewerComponentLifecycleEvent, getFileViewerBeforeOperationHooks, getFileViewerLifecycleHookName, hasVisibleFileViewerToolbarActions, isFileViewerToolbarOperationPermitted, isFileViewerZoomButtonDisabled, normalizeFileViewerToolbar, reportFileViewerLifecycleHookError, reportFileViewerOperationError, resolveFileViewerLifecycleFallbackSource, resolveFileViewerLifecycleHookErrorMessage, resolveFileViewerBeforeOperationErrorMessage, resolveFileViewerOperationAvailability, resolveFileViewerToolbarZoomButtons, resolveFileViewerToolbarOrder, resolveFileViewerToolbarState, resolveFileViewerToolbarPosition, resolveVisibleFileViewerToolbar, runFileViewerActiveUnloadComplete, runFileViewerActiveUnloadStart, runFileViewerBeforeOperation, runFileViewerLifecycleHook, runFileViewerToolbarAvailabilitySync, runFileViewerToolbarZoomSync, serializeFileViewerContext, } from "./lifecycle/operations.js";
|
|
171
171
|
export { FALLBACK_FILE_VIEWER_LOADING_THEME, FILE_VIEWER_LOADING_THEME_MAP, applyFileViewerLoadingState, cloneFileViewerLoadingState, createFileViewerLoadingController, createFileViewerLoadingControllerActionHandlers, createFileViewerLoadingState, createFileViewerLoadingStyleVars, runFileViewerLoadingControllerAction, runFileViewerLoadingExtensionSync, resolveFileViewerLoadingTheme, syncFileViewerLoadingControllerState, } from "./viewer/loading.js";
|
|
172
172
|
export { createFileViewerLifecycleFacade, } from "./lifecycle/facade.js";
|
|
173
173
|
export { getFileViewerOptionsSearchParam, normalizeFileViewerUiDensity, normalizeFileViewerTheme, parseFileViewerOptions, resolveFileViewerColorScheme, resolveFileViewerUiDensity, sanitizeFileViewerOptions, serializeFileViewerOptions, setFileViewerOptionsSearchParam, toggleFileViewerColorScheme, } from "./config/options.js";
|
|
174
174
|
export { resolveFileViewerPresentationState, } from "./presentation/state.js";
|
|
175
|
+
export { observeFileViewerColorScheme } from "./presentation/colorScheme.js";
|
|
175
176
|
export { createFileViewerRendererDispatcher, } from "./rendering/dispatcher.js";
|
|
176
177
|
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";
|
|
177
178
|
export { DEFAULT_FILE_VIEWER_SOURCE_FILENAME, DEFAULT_FILE_VIEWER_TEXT_FALLBACK_ENCODING, createFileViewerTextDecoder, decodeFileViewerTextBuffer, decodeFilename, getExtension, normalizeFileExtension, normalizeFilename, isSingleByteFileViewerTextEncoding, isValidFileViewerUtf8, resolveFileViewerTextEncoding, resolveFileViewerSourceFilename, normalizeSource, readFileViewerBuffer, readFileViewerDataUrl, readFileViewerText, wrapFileViewerFileRef, } from "./source/index.js";
|
|
@@ -183,3 +184,4 @@ export { cancelFileViewerPreviewRequest, DEFAULT_FILE_VIEWER_STREAMING_PDF_FILEN
|
|
|
183
184
|
export { createViewer } from "./viewer/createViewer.js";
|
|
184
185
|
export { WorkerRefImpl, createFileViewerWorkerController, refWorker, } from "./platform/worker.js";
|
|
185
186
|
export { resolveFileViewerCopiedAssetUrl } from "./platform/copiedAssets.js";
|
|
187
|
+
export { installFileViewerImageHandTool } from "./features/document/imageHandTool.js";
|
|
@@ -282,6 +282,7 @@ export declare const resolveFileViewerOperationAvailability: ({ extension, hasOr
|
|
|
282
282
|
export declare const cloneFileViewerOperationAvailability: (availability: FileViewerOperationAvailability) => FileViewerOperationAvailability;
|
|
283
283
|
export declare const resolveVisibleFileViewerToolbar: (toolbar: FileViewerToolbarOptions, availability: FileViewerOperationAvailability, searchEnabled?: boolean) => FileViewerToolbarOptions;
|
|
284
284
|
export declare const hasVisibleFileViewerToolbarActions: (toolbar: FileViewerToolbarOptions) => boolean;
|
|
285
|
+
export declare const resolveFileViewerToolbarZoomButtons: ({ toolbar, zoomState, renderedReady, hasError, }: Pick<ResolveFileViewerToolbarStateInput, "toolbar" | "zoomState" | "renderedReady" | "hasError">) => Pick<FileViewerOperationAvailability, "zoomIn" | "zoomOut" | "zoomReset">;
|
|
285
286
|
export declare const isFileViewerZoomButtonDisabled: ({ toolbarDisabled, availability, zoomState, action, }: {
|
|
286
287
|
toolbarDisabled?: boolean;
|
|
287
288
|
availability: FileViewerOperationAvailability;
|
|
@@ -571,6 +571,15 @@ export const hasVisibleFileViewerToolbarActions = (toolbar) => {
|
|
|
571
571
|
toolbar.search ||
|
|
572
572
|
toolbar.theme);
|
|
573
573
|
};
|
|
574
|
+
export const resolveFileViewerToolbarZoomButtons = ({ toolbar, zoomState, renderedReady, hasError = false, }) => {
|
|
575
|
+
const visible = !!toolbar.zoom && renderedReady && !hasError &&
|
|
576
|
+
(zoomState.canZoomIn || zoomState.canZoomOut || zoomState.canReset);
|
|
577
|
+
return {
|
|
578
|
+
zoomIn: visible && isFileViewerToolbarOperationVisible(toolbar, 'zoom-in'),
|
|
579
|
+
zoomOut: visible && isFileViewerToolbarOperationVisible(toolbar, 'zoom-out'),
|
|
580
|
+
zoomReset: visible && isFileViewerToolbarOperationVisible(toolbar, 'zoom-reset'),
|
|
581
|
+
};
|
|
582
|
+
};
|
|
574
583
|
export const isFileViewerZoomButtonDisabled = ({ toolbarDisabled = false, availability, zoomState, action, }) => {
|
|
575
584
|
const operation = FILE_VIEWER_ZOOM_BUTTON_OPERATIONS[action];
|
|
576
585
|
const operationAllowed = operation === 'zoom-in'
|
|
@@ -586,6 +595,8 @@ export const isFileViewerToolbarDisabled = ({ loading = false, hasError = false,
|
|
|
586
595
|
export const resolveFileViewerToolbarState = ({ toolbar, options, searchAvailable = true, loading = false, ...availabilityInput }) => {
|
|
587
596
|
const operationAvailability = applyToolbarPermissionsToAvailability(resolveFileViewerOperationAvailability(availabilityInput), options === null || options === void 0 ? void 0 : options.toolbar);
|
|
588
597
|
const visibleToolbar = resolveVisibleFileViewerToolbar(toolbar, operationAvailability, (options === null || options === void 0 ? void 0 : options.search) !== false && searchAvailable);
|
|
598
|
+
const zoomButtons = resolveFileViewerToolbarZoomButtons({ toolbar, ...availabilityInput });
|
|
599
|
+
visibleToolbar.zoom = zoomButtons.zoomIn || zoomButtons.zoomOut || zoomButtons.zoomReset;
|
|
589
600
|
return {
|
|
590
601
|
operationAvailability,
|
|
591
602
|
visibleToolbar,
|
|
@@ -9,7 +9,7 @@ export declare const DEFAULT_FILE_VIEWER_CHM_WASM_PATH = "vendor/chm/chm_wasm_bg
|
|
|
9
9
|
export declare const DEFAULT_FILE_VIEWER_CHM_WASM_PACKAGE_PATH = "@file-viewer/renderer-chm/wasm/chm_wasm_bg.wasm";
|
|
10
10
|
export declare const DEFAULT_FILE_VIEWER_DOCX_WORKER_PATH = "vendor/docx/docx.worker.js";
|
|
11
11
|
export declare const DEFAULT_FILE_VIEWER_DOCX_WORKER_JSZIP_PATH = "vendor/docx/jszip.min.js";
|
|
12
|
-
export declare const DEFAULT_FILE_VIEWER_DOCX_RUNTIME_VERSION = "0.3.
|
|
12
|
+
export declare const DEFAULT_FILE_VIEWER_DOCX_RUNTIME_VERSION = "0.3.39";
|
|
13
13
|
export declare const DEFAULT_FILE_VIEWER_PRESENTATION_WORKER_PATH = "vendor/pptx/pptx.worker.js";
|
|
14
14
|
export declare const DEFAULT_FILE_VIEWER_PPT_RUNTIME_PATH = "vendor/ppt";
|
|
15
15
|
export declare const DEFAULT_FILE_VIEWER_PPT_RUNTIME_VERSION = "0.3.6";
|
package/dist/platform/assets.js
CHANGED
|
@@ -8,7 +8,7 @@ export const DEFAULT_FILE_VIEWER_CHM_WASM_PATH = 'vendor/chm/chm_wasm_bg.wasm';
|
|
|
8
8
|
export const DEFAULT_FILE_VIEWER_CHM_WASM_PACKAGE_PATH = '@file-viewer/renderer-chm/wasm/chm_wasm_bg.wasm';
|
|
9
9
|
export const DEFAULT_FILE_VIEWER_DOCX_WORKER_PATH = 'vendor/docx/docx.worker.js';
|
|
10
10
|
export const DEFAULT_FILE_VIEWER_DOCX_WORKER_JSZIP_PATH = 'vendor/docx/jszip.min.js';
|
|
11
|
-
export const DEFAULT_FILE_VIEWER_DOCX_RUNTIME_VERSION = '0.3.
|
|
11
|
+
export const DEFAULT_FILE_VIEWER_DOCX_RUNTIME_VERSION = '0.3.39';
|
|
12
12
|
export const DEFAULT_FILE_VIEWER_PRESENTATION_WORKER_PATH = 'vendor/pptx/pptx.worker.js';
|
|
13
13
|
export const DEFAULT_FILE_VIEWER_PPT_RUNTIME_PATH = 'vendor/ppt';
|
|
14
14
|
export const DEFAULT_FILE_VIEWER_PPT_RUNTIME_VERSION = '0.3.6';
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import type { FileViewerResolvedThemeMode, FileViewerThemeMode } from "../contracts/types.js";
|
|
2
|
+
export declare const observeFileViewerColorScheme: (target: HTMLElement, fallback: FileViewerThemeMode | undefined, apply: (theme: FileViewerResolvedThemeMode) => void) => () => void;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { resolveFileViewerColorScheme } from "../config/options.js";
|
|
2
|
+
export const observeFileViewerColorScheme = (target, fallback, apply) => {
|
|
3
|
+
var _a;
|
|
4
|
+
const view = target.ownerDocument.defaultView;
|
|
5
|
+
const media = (_a = view === null || view === void 0 ? void 0 : view.matchMedia) === null || _a === void 0 ? void 0 : _a.call(view, '(prefers-color-scheme: dark)');
|
|
6
|
+
const ancestors = [];
|
|
7
|
+
let element = target;
|
|
8
|
+
while (element) {
|
|
9
|
+
ancestors.push(element);
|
|
10
|
+
const root = element.getRootNode();
|
|
11
|
+
element = element.parentElement || root.host || null;
|
|
12
|
+
}
|
|
13
|
+
let current;
|
|
14
|
+
const update = () => {
|
|
15
|
+
var _a;
|
|
16
|
+
const inherited = ancestors
|
|
17
|
+
.map((node) => node.getAttribute('data-viewer-theme'))
|
|
18
|
+
.find((value) => value === 'light' || value === 'dark' || value === 'system');
|
|
19
|
+
const next = resolveFileViewerColorScheme(inherited || fallback, (_a = media === null || media === void 0 ? void 0 : media.matches) !== null && _a !== void 0 ? _a : false);
|
|
20
|
+
if (next !== current) {
|
|
21
|
+
current = next;
|
|
22
|
+
apply(next);
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
const observer = (view === null || view === void 0 ? void 0 : view.MutationObserver) ? new view.MutationObserver(update) : undefined;
|
|
26
|
+
ancestors.forEach((node) => observer === null || observer === void 0 ? void 0 : observer.observe(node, { attributes: true, attributeFilter: ['data-viewer-theme'] }));
|
|
27
|
+
if (media === null || media === void 0 ? void 0 : media.addEventListener)
|
|
28
|
+
media.addEventListener('change', update);
|
|
29
|
+
else
|
|
30
|
+
media === null || media === void 0 ? void 0 : media.addListener(update);
|
|
31
|
+
update();
|
|
32
|
+
return () => {
|
|
33
|
+
observer === null || observer === void 0 ? void 0 : observer.disconnect();
|
|
34
|
+
if (media === null || media === void 0 ? void 0 : media.removeEventListener)
|
|
35
|
+
media.removeEventListener('change', update);
|
|
36
|
+
else
|
|
37
|
+
media === null || media === void 0 ? void 0 : media.removeListener(update);
|
|
38
|
+
};
|
|
39
|
+
};
|
package/dist/renderers/image.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { registerFileViewerZoomProvider, unregisterFileViewerZoomProvider, } from "../features/document/dom/index.js";
|
|
2
|
+
import { installFileViewerImageHandTool } from "../features/document/imageHandTool.js";
|
|
2
3
|
import { resolveFileViewerFitScale, } from "../features/document/fit.js";
|
|
3
4
|
import { createFileViewerTranslator } from "../i18n/messages.js";
|
|
4
5
|
import { createFileViewerZoomChangeEmitter as createZoomChangeEmitter } from "../features/document/zoom.js";
|
|
@@ -20,7 +21,7 @@ const imageMimeMap = {
|
|
|
20
21
|
};
|
|
21
22
|
const imageStyle = `
|
|
22
23
|
.image-viewer{position:relative;width:100%;height:100%;overflow:auto;background:var(--file-viewer-render-surface-background,#eef1f4);box-sizing:border-box}
|
|
23
|
-
.image-stage{min-width:100%;min-height:100%;display:flex;align-items:center;justify-content:center;padding:24px;box-sizing:border-box}
|
|
24
|
+
.image-stage{width:max-content;min-width:100%;min-height:100%;display:flex;align-items:center;justify-content:center;padding:24px;box-sizing:border-box}
|
|
24
25
|
.image-stage img{display:block;width:auto;max-width:none;margin:0 auto;border:0;box-shadow:0 18px 48px rgba(15,23,42,.16);background:#fff;cursor:zoom-in}
|
|
25
26
|
.image-stage img:focus-visible{outline:3px solid #2563eb;outline-offset:4px}
|
|
26
27
|
.image-lightbox{position:absolute;inset:0;z-index:40;display:flex;align-items:center;justify-content:center;padding:40px;background:rgba(15,23,42,.9);box-sizing:border-box;opacity:0;visibility:hidden;pointer-events:none;transition:opacity .18s ease,visibility 0s linear .18s}
|
|
@@ -127,7 +128,7 @@ const createLightbox = (documentRef, src, t) => {
|
|
|
127
128
|
};
|
|
128
129
|
};
|
|
129
130
|
export default async function renderImage(buffer, target, type, context) {
|
|
130
|
-
var _a, _b;
|
|
131
|
+
var _a, _b, _c, _d;
|
|
131
132
|
const t = createFileViewerTranslator(context === null || context === void 0 ? void 0 : context.options);
|
|
132
133
|
const documentRef = target.ownerDocument || document;
|
|
133
134
|
const targetWindow = documentRef.defaultView;
|
|
@@ -155,6 +156,8 @@ export default async function renderImage(buffer, target, type, context) {
|
|
|
155
156
|
image.setAttribute('aria-haspopup', 'dialog');
|
|
156
157
|
stage.append(image);
|
|
157
158
|
root.append(stage);
|
|
159
|
+
const disposeHandTool = ((_c = (_b = context === null || context === void 0 ? void 0 : context.options) === null || _b === void 0 ? void 0 : _b.image) === null || _c === void 0 ? void 0 : _c.handTool) === true
|
|
160
|
+
? installFileViewerImageHandTool(root, context.signal) : () => { };
|
|
158
161
|
const lightbox = createLightbox(documentRef, src, t);
|
|
159
162
|
const openLightbox = () => lightbox.open(image);
|
|
160
163
|
const openLightboxFromKeyboard = (event) => {
|
|
@@ -290,7 +293,7 @@ export default async function renderImage(buffer, target, type, context) {
|
|
|
290
293
|
subscribe: zoomEmitter.subscribe,
|
|
291
294
|
});
|
|
292
295
|
target.replaceChildren(createStyle(documentRef), root);
|
|
293
|
-
(((
|
|
296
|
+
(((_d = context === null || context === void 0 ? void 0 : context.surface) === null || _d === void 0 ? void 0 : _d.shadowRoot) || target).append(lightbox.element);
|
|
294
297
|
updateViewportSize();
|
|
295
298
|
return {
|
|
296
299
|
$el: target,
|
|
@@ -303,6 +306,7 @@ export default async function renderImage(buffer, target, type, context) {
|
|
|
303
306
|
}
|
|
304
307
|
(_a = context === null || context === void 0 ? void 0 : context.registerThumbnailAdapter) === null || _a === void 0 ? void 0 : _a.call(context, null);
|
|
305
308
|
unregisterFileViewerZoomProvider(root);
|
|
309
|
+
disposeHandTool();
|
|
306
310
|
resizeObserver.disconnect();
|
|
307
311
|
image.removeEventListener('load', updateViewportSize);
|
|
308
312
|
image.removeEventListener('click', openLightbox);
|
package/dist/source/loading.d.ts
CHANGED
|
@@ -314,6 +314,8 @@ export declare const reportFileViewerPreviewLoadError: ({ onLogError, onErrorMes
|
|
|
314
314
|
export declare const reportFileViewerMissingRemoteData: ({ onErrorMessage, ...messageInput }?: ReportFileViewerMissingRemoteDataInput) => string;
|
|
315
315
|
export interface RunFileViewerRemoteFilePreviewInput<Session = unknown> {
|
|
316
316
|
url: string;
|
|
317
|
+
filename?: string;
|
|
318
|
+
type?: string;
|
|
317
319
|
version: number;
|
|
318
320
|
pageHref?: string;
|
|
319
321
|
streaming?: FileViewerPdfOptions['streaming'];
|
|
@@ -471,6 +473,8 @@ export interface CreateFileViewerSourceLoadingActionHandlersInput<Session = unkn
|
|
|
471
473
|
getFile: () => FileViewerFileRef | null | undefined;
|
|
472
474
|
getUrl: () => string | null | undefined;
|
|
473
475
|
getCurrentFilename?: () => string | undefined;
|
|
476
|
+
getSourceFilename?: () => string | undefined;
|
|
477
|
+
getSourceType?: () => string | undefined;
|
|
474
478
|
shouldStreamLocalFile?: (input: {
|
|
475
479
|
file: File;
|
|
476
480
|
filename: string;
|
|
@@ -550,8 +554,8 @@ export declare const commitFileViewerRenderCompleteState: <Session = unknown>({
|
|
|
550
554
|
export declare const runFileViewerReadAndRenderFile: <Session = unknown>({ file, version, signal, sourceUrl, source, fallbackFilename, previewTarget, isCurrent, mountRenderedContent, destroyRenderSession, buildRenderCompleteState, onSession, onActiveDocumentContext, onLifecycle, onClearLoadStarted, }: RunFileViewerReadAndRenderFileInput<Session>) => Promise<FileViewerReadAndRenderFileState<Session>>;
|
|
551
555
|
export declare const runFileViewerStreamingPdfPreview: <Session = unknown>({ url, version, filename, previewTarget, isCurrent, mountRenderedContent, destroyRenderSession, buildRenderCompleteState, loadingMessage, signal, typeOverride, i18n, onStartLoading, onSession, onActiveDocumentContext, onLifecycle, onClearLoadStarted, onStopLoading, onError, }: RunFileViewerStreamingPdfPreviewInput<Session>) => Promise<FileViewerStreamingPdfPreviewState<Session>>;
|
|
552
556
|
export declare const runFileViewerLocalFilePreview: <Session = unknown>({ source, version, currentFilename, fallbackFilename, shouldStreamLocalFile, requestController, previewTarget, isCurrent, mountRenderedContent, destroyRenderSession, buildLoadStartState, buildRenderCompleteState, onMarkLoadStarted, onStartLoading, onSession, onActiveDocumentContext, onLifecycle, onClearLoadStarted, onStopLoading, onError, }: RunFileViewerLocalFilePreviewInput<Session>) => Promise<FileViewerLocalFilePreviewState<Session>>;
|
|
553
|
-
export declare const runFileViewerRemoteFilePreview: <Session = unknown>({ url, version, pageHref, streaming, shouldStreamRemoteUrl, previewTarget, requestController, isCurrent, downloadFile, mountRenderedContent, destroyRenderSession, buildLoadStartState, buildRenderCompleteState, i18n, onMarkLoadStarted, onStartLoading, onSetLoadingMessage, onSession, onActiveDocumentContext, onLifecycle, onClearLoadStarted, onStopLoading, onMissingData, onError, }: RunFileViewerRemoteFilePreviewInput<Session>) => Promise<FileViewerRemoteFilePreviewState<Session>>;
|
|
554
|
-
export declare const createFileViewerSourceLoadingActionHandlers: <Session = unknown>({ getFile, getUrl, getCurrentFilename, shouldStreamLocalFile, getPdfStreaming, shouldStreamRemoteUrl, getI18n, getPageHref, previewTarget, requestController, downloadFile, mountRenderedContent, destroyRenderSession, buildLoadStartState, buildRenderCompleteState, formatErrorMessage, onMarkLoadStarted, onClearLoadStarted, onStartLoading, onSetLoadingMessage, onStopLoading, onShowError, onClearError, onResetLoading, onClearRenderedContent, onSession, onActiveDocumentContext, onLifecycle, }: CreateFileViewerSourceLoadingActionHandlersInput<Session>) => FileViewerSourceLoadingActionHandlers<Session>;
|
|
557
|
+
export declare const runFileViewerRemoteFilePreview: <Session = unknown>({ url, filename, type, version, pageHref, streaming, shouldStreamRemoteUrl, previewTarget, requestController, isCurrent, downloadFile, mountRenderedContent, destroyRenderSession, buildLoadStartState, buildRenderCompleteState, i18n, onMarkLoadStarted, onStartLoading, onSetLoadingMessage, onSession, onActiveDocumentContext, onLifecycle, onClearLoadStarted, onStopLoading, onMissingData, onError, }: RunFileViewerRemoteFilePreviewInput<Session>) => Promise<FileViewerRemoteFilePreviewState<Session>>;
|
|
558
|
+
export declare const createFileViewerSourceLoadingActionHandlers: <Session = unknown>({ getFile, getUrl, getCurrentFilename, getSourceFilename, getSourceType, shouldStreamLocalFile, getPdfStreaming, shouldStreamRemoteUrl, getI18n, getPageHref, previewTarget, requestController, downloadFile, mountRenderedContent, destroyRenderSession, buildLoadStartState, buildRenderCompleteState, formatErrorMessage, onMarkLoadStarted, onClearLoadStarted, onStartLoading, onSetLoadingMessage, onStopLoading, onShowError, onClearError, onResetLoading, onClearRenderedContent, onSession, onActiveDocumentContext, onLifecycle, }: CreateFileViewerSourceLoadingActionHandlersInput<Session>) => FileViewerSourceLoadingActionHandlers<Session>;
|
|
555
559
|
export declare const finalizeFileViewerPreviewLoadState: ({ version, isCurrent, onClearLoadStarted, onStopLoading, }: FinalizeFileViewerPreviewLoadStateInput) => void;
|
|
556
560
|
export declare const resolveFileViewerLoadStartMessage: (source: FileViewerLifecycleContext["source"], i18n?: FileViewerI18nInput) => string;
|
|
557
561
|
export declare const commitFileViewerLoadStartState: ({ version, filename, fallbackFilename, filenameTarget, buildState, onMarkLoadStarted, onLifecycle, onStartLoading, }: CommitFileViewerLoadStartStateInput) => FileViewerLoadStartState;
|
|
@@ -601,8 +605,9 @@ export interface FileViewerLocationLike {
|
|
|
601
605
|
href?: string | null;
|
|
602
606
|
}
|
|
603
607
|
export declare const resolveFileViewerPageHref: (locationLike?: FileViewerLocationLike) => string | undefined;
|
|
604
|
-
export declare const resolveFileViewerRemoteSourcePlan: ({ filename, fallbackFilename, pageHref, streaming, shouldStreamRemoteUrl, url, }: {
|
|
608
|
+
export declare const resolveFileViewerRemoteSourcePlan: ({ filename, type, fallbackFilename, pageHref, streaming, shouldStreamRemoteUrl, url, }: {
|
|
605
609
|
filename?: string;
|
|
610
|
+
type?: string;
|
|
606
611
|
fallbackFilename?: string;
|
|
607
612
|
pageHref?: string;
|
|
608
613
|
streaming?: FileViewerPdfOptions["streaming"];
|
package/dist/source/loading.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { buildFileViewerLifecycleContext, } from "../lifecycle/operations.js";
|
|
2
2
|
import { resolveFileViewerPreviewMessages, } from "../viewer/state.js";
|
|
3
3
|
import { translateFileViewerMessage } from "../i18n/messages.js";
|
|
4
|
-
import { DEFAULT_FILE_VIEWER_SOURCE_FILENAME, getExtension, normalizeFilename, readFileViewerBuffer, resolveFileViewerSourceFilename, wrapFileViewerFileRef, } from "./index.js";
|
|
4
|
+
import { DEFAULT_FILE_VIEWER_SOURCE_FILENAME, getExtension, normalizeFilename, normalizeFileExtension, readFileViewerBuffer, resolveFileViewerSourceFilename, wrapFileViewerFileRef, } from "./index.js";
|
|
5
5
|
export const DEFAULT_PDF_RANGE_CHUNK_SIZE = 64 * 1024;
|
|
6
6
|
export const DEFAULT_FILE_VIEWER_STREAMING_PDF_FILENAME = 'preview.pdf';
|
|
7
7
|
export const FILE_VIEWER_REMOTE_MISSING_DATA_ERROR_MESSAGE = '文件下载失败';
|
|
@@ -596,8 +596,10 @@ export const runFileViewerLocalFilePreview = async ({ source, version, currentFi
|
|
|
596
596
|
});
|
|
597
597
|
}
|
|
598
598
|
};
|
|
599
|
-
export const runFileViewerRemoteFilePreview = async ({ url, version, pageHref, streaming, shouldStreamRemoteUrl, previewTarget, requestController, isCurrent, downloadFile, mountRenderedContent, destroyRenderSession, buildLoadStartState, buildRenderCompleteState, i18n, onMarkLoadStarted, onStartLoading, onSetLoadingMessage, onSession, onActiveDocumentContext, onLifecycle, onClearLoadStarted, onStopLoading, onMissingData, onError, }) => {
|
|
599
|
+
export const runFileViewerRemoteFilePreview = async ({ url, filename, type, version, pageHref, streaming, shouldStreamRemoteUrl, previewTarget, requestController, isCurrent, downloadFile, mountRenderedContent, destroyRenderSession, buildLoadStartState, buildRenderCompleteState, i18n, onMarkLoadStarted, onStartLoading, onSetLoadingMessage, onSession, onActiveDocumentContext, onLifecycle, onClearLoadStarted, onStopLoading, onMissingData, onError, }) => {
|
|
600
600
|
let remoteSource = resolveFileViewerRemoteSourcePlan({
|
|
601
|
+
filename,
|
|
602
|
+
type,
|
|
601
603
|
pageHref,
|
|
602
604
|
streaming,
|
|
603
605
|
url,
|
|
@@ -664,7 +666,7 @@ export const runFileViewerRemoteFilePreview = async ({ url, version, pageHref, s
|
|
|
664
666
|
? undefined
|
|
665
667
|
: resolveFileViewerPreviewMessages(i18n).downloading,
|
|
666
668
|
signal: controller === null || controller === void 0 ? void 0 : controller.signal,
|
|
667
|
-
typeOverride: remoteSource.streamType,
|
|
669
|
+
typeOverride: remoteSource.streamPdf ? 'pdf' : remoteSource.streamType,
|
|
668
670
|
onStartLoading,
|
|
669
671
|
onSession,
|
|
670
672
|
onActiveDocumentContext,
|
|
@@ -808,7 +810,7 @@ export const runFileViewerRemoteFilePreview = async ({ url, version, pageHref, s
|
|
|
808
810
|
}
|
|
809
811
|
}
|
|
810
812
|
};
|
|
811
|
-
export const createFileViewerSourceLoadingActionHandlers = ({ getFile, getUrl, getCurrentFilename, shouldStreamLocalFile, getPdfStreaming, shouldStreamRemoteUrl, getI18n, getPageHref, previewTarget, requestController, downloadFile, mountRenderedContent, destroyRenderSession, buildLoadStartState, buildRenderCompleteState, formatErrorMessage, onMarkLoadStarted, onClearLoadStarted, onStartLoading, onSetLoadingMessage, onStopLoading, onShowError, onClearError, onResetLoading, onClearRenderedContent, onSession, onActiveDocumentContext, onLifecycle, }) => {
|
|
813
|
+
export const createFileViewerSourceLoadingActionHandlers = ({ getFile, getUrl, getCurrentFilename, getSourceFilename, getSourceType, shouldStreamLocalFile, getPdfStreaming, shouldStreamRemoteUrl, getI18n, getPageHref, previewTarget, requestController, downloadFile, mountRenderedContent, destroyRenderSession, buildLoadStartState, buildRenderCompleteState, formatErrorMessage, onMarkLoadStarted, onClearLoadStarted, onStartLoading, onSetLoadingMessage, onStopLoading, onShowError, onClearError, onResetLoading, onClearRenderedContent, onSession, onActiveDocumentContext, onLifecycle, }) => {
|
|
812
814
|
const isCurrentRequest = (version) => requestController.isCurrent(version);
|
|
813
815
|
const previewLocalFile = async (source, version) => {
|
|
814
816
|
var _a;
|
|
@@ -853,6 +855,8 @@ export const createFileViewerSourceLoadingActionHandlers = ({ getFile, getUrl, g
|
|
|
853
855
|
const previewRemoteFile = async (url, version) => {
|
|
854
856
|
return await runFileViewerRemoteFilePreview({
|
|
855
857
|
url,
|
|
858
|
+
filename: getSourceFilename === null || getSourceFilename === void 0 ? void 0 : getSourceFilename(),
|
|
859
|
+
type: getSourceType === null || getSourceType === void 0 ? void 0 : getSourceType(),
|
|
856
860
|
version,
|
|
857
861
|
pageHref: getPageHref === null || getPageHref === void 0 ? void 0 : getPageHref(),
|
|
858
862
|
streaming: getPdfStreaming === null || getPdfStreaming === void 0 ? void 0 : getPdfStreaming(),
|
|
@@ -1034,18 +1038,16 @@ export const shouldStreamPdfUrl = ({ extension, pageHref, streaming, url, }) =>
|
|
|
1034
1038
|
export const resolveFileViewerPageHref = (locationLike) => {
|
|
1035
1039
|
return (locationLike === null || locationLike === void 0 ? void 0 : locationLike.href) || undefined;
|
|
1036
1040
|
};
|
|
1037
|
-
export const resolveFileViewerRemoteSourcePlan = ({ filename, fallbackFilename = DEFAULT_FILE_VIEWER_SOURCE_FILENAME, pageHref, streaming, shouldStreamRemoteUrl, url, }) => {
|
|
1041
|
+
export const resolveFileViewerRemoteSourcePlan = ({ filename, type, fallbackFilename = DEFAULT_FILE_VIEWER_SOURCE_FILENAME, pageHref, streaming, shouldStreamRemoteUrl, url, }) => {
|
|
1038
1042
|
const sourceUrl = normalizeFileViewerSourceUrl(url) || url;
|
|
1039
1043
|
const nextFilename = normalizeFilename(filename || url, fallbackFilename);
|
|
1040
|
-
const extension = getExtension(nextFilename);
|
|
1041
|
-
const streamPdf =
|
|
1042
|
-
|
|
1043
|
-
|
|
1044
|
-
|
|
1045
|
-
|
|
1046
|
-
|
|
1047
|
-
})
|
|
1048
|
-
: false;
|
|
1044
|
+
const extension = normalizeFileExtension(type || getExtension(nextFilename));
|
|
1045
|
+
const streamPdf = shouldStreamPdfUrl({
|
|
1046
|
+
extension,
|
|
1047
|
+
pageHref: pageHref || '',
|
|
1048
|
+
streaming,
|
|
1049
|
+
url: sourceUrl,
|
|
1050
|
+
});
|
|
1049
1051
|
const streamDecision = !streamPdf
|
|
1050
1052
|
? shouldStreamRemoteUrl === null || shouldStreamRemoteUrl === void 0 ? void 0 : shouldStreamRemoteUrl({
|
|
1051
1053
|
url: sourceUrl,
|
|
@@ -259,6 +259,7 @@ export const createViewer = (container, createOptions = {}) => {
|
|
|
259
259
|
surface.container.style.height = '100%';
|
|
260
260
|
}
|
|
261
261
|
syncFileViewerRenderSurfaceBackground(target, options);
|
|
262
|
+
target.setAttribute('data-viewer-theme', options.theme || 'system');
|
|
262
263
|
currentRenderTarget = target;
|
|
263
264
|
return surface;
|
|
264
265
|
};
|
|
@@ -722,6 +723,7 @@ export const createViewer = (container, createOptions = {}) => {
|
|
|
722
723
|
...nextOptions,
|
|
723
724
|
};
|
|
724
725
|
syncFileViewerRenderSurfaceBackground(currentRenderTarget, options);
|
|
726
|
+
currentRenderTarget === null || currentRenderTarget === void 0 ? void 0 : currentRenderTarget.setAttribute('data-viewer-theme', options.theme || 'system');
|
|
725
727
|
syncWatermarkOverlay();
|
|
726
728
|
if ('fit' in nextOptions && nextOptions.fit !== previousFit) {
|
|
727
729
|
fitController.resetAutoFit();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@file-viewer/core",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.3.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"description": "Framework-neutral modular TypeScript core for File Viewer renderer orchestration, lifecycle APIs, search, zoom, print, and export",
|
|
@@ -84,6 +84,8 @@
|
|
|
84
84
|
"dist/browser.js",
|
|
85
85
|
"dist/browser/controller.d.ts",
|
|
86
86
|
"dist/browser/controller.js",
|
|
87
|
+
"dist/browser/toolbar-focus.d.ts",
|
|
88
|
+
"dist/browser/toolbar-focus.js",
|
|
87
89
|
"dist/config/options.d.ts",
|
|
88
90
|
"dist/config/options.js",
|
|
89
91
|
"dist/contracts/types.d.ts",
|
|
@@ -106,6 +108,8 @@
|
|
|
106
108
|
"dist/features/document/events.js",
|
|
107
109
|
"dist/features/document/fit.d.ts",
|
|
108
110
|
"dist/features/document/fit.js",
|
|
111
|
+
"dist/features/document/imageHandTool.d.ts",
|
|
112
|
+
"dist/features/document/imageHandTool.js",
|
|
109
113
|
"dist/features/document/model.d.ts",
|
|
110
114
|
"dist/features/document/model.js",
|
|
111
115
|
"dist/features/document/search.d.ts",
|
|
@@ -152,6 +156,8 @@
|
|
|
152
156
|
"dist/platform/copiedAssets.js",
|
|
153
157
|
"dist/platform/worker.d.ts",
|
|
154
158
|
"dist/platform/worker.js",
|
|
159
|
+
"dist/presentation/colorScheme.d.ts",
|
|
160
|
+
"dist/presentation/colorScheme.js",
|
|
155
161
|
"dist/presentation/state.d.ts",
|
|
156
162
|
"dist/presentation/state.js",
|
|
157
163
|
"dist/print-mask.d.ts",
|
|
@@ -196,10 +202,11 @@
|
|
|
196
202
|
"print-mask.d.ts",
|
|
197
203
|
"print-mask.js",
|
|
198
204
|
"README.en.md",
|
|
199
|
-
"README.md"
|
|
205
|
+
"README.md",
|
|
206
|
+
"README.zh-CN.md"
|
|
200
207
|
],
|
|
201
208
|
"dependencies": {
|
|
202
|
-
"dompurify": "3.4.
|
|
209
|
+
"dompurify": "3.4.17"
|
|
203
210
|
},
|
|
204
211
|
"license": "Apache-2.0",
|
|
205
212
|
"fileViewer": {
|