@file-viewer/core 3.1.2 → 3.2.1
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 +3 -121
- package/README.md +3 -126
- package/dist/assets.d.ts +2 -2
- package/dist/assets.js +1 -5
- package/dist/browser/controller.d.ts +1 -2
- package/dist/browser/controller.js +2 -34
- package/dist/browser.d.ts +2 -2
- package/dist/browser.js +2 -2
- package/dist/config/options.d.ts +1 -1
- package/dist/contracts/types.d.ts +26 -423
- package/dist/contracts/xml.d.ts +0 -11
- package/dist/export.d.ts +3 -10
- package/dist/export.js +2 -9
- package/dist/exportDocument.d.ts +1 -12
- package/dist/exportDocument.js +7 -31
- package/dist/features/document/dom/anchors.d.ts +1 -1
- package/dist/features/document/dom/index.d.ts +5 -5
- package/dist/features/document/dom/index.js +3 -3
- package/dist/features/document/dom/providers.d.ts +1 -1
- package/dist/features/document/events.d.ts +2 -2
- package/dist/features/document/events.js +3 -3
- package/dist/features/document/fit.d.ts +1 -1
- package/dist/features/document/fit.js +1 -1
- package/dist/features/document/model.d.ts +1 -1
- package/dist/features/document/search.d.ts +1 -1
- package/dist/features/document/search.js +2 -2
- package/dist/features/document/viewState.d.ts +1 -1
- package/dist/features/document/viewState.js +2 -2
- package/dist/features/document/zoom.d.ts +3 -2
- package/dist/features/document/zoom.js +19 -3
- package/dist/features/document/zoomGestures.d.ts +11 -0
- package/dist/features/document/zoomGestures.js +111 -0
- package/dist/features/printMask.d.ts +1 -1
- package/dist/features/printMaskDesigner.d.ts +2 -6
- package/dist/features/printMaskDesigner.js +2 -11
- package/dist/features/printMaskLoader.d.ts +1 -7
- package/dist/features/printMaskLoader.js +1 -7
- package/dist/features/watermark.d.ts +1 -1
- package/dist/headless.d.ts +29 -29
- package/dist/headless.js +16 -21
- package/dist/i18n/messages.d.ts +1 -1
- package/dist/i18n/messages.de.d.ts +1 -5
- package/dist/i18n/messages.de.js +0 -4
- package/dist/i18n/messages.ja.d.ts +1 -6
- package/dist/i18n/messages.ja.js +0 -5
- package/dist/i18n/messages.js +2 -2
- package/dist/index.d.ts +74 -74
- package/dist/index.js +37 -37
- package/dist/lifecycle/facade.d.ts +4 -4
- package/dist/lifecycle/facade.js +2 -2
- package/dist/lifecycle/operations.d.ts +4 -4
- package/dist/lifecycle/operations.js +4 -9
- package/dist/output/canvasImage.d.ts +1 -2
- package/dist/output/canvasImage.js +1 -4
- package/dist/output/export.d.ts +2 -4
- package/dist/output/export.js +133 -81
- package/dist/output/printLayout.d.ts +2 -5
- package/dist/output/printLayout.js +37 -9
- package/dist/output/snapshotDownload.d.ts +1 -2
- package/dist/output/snapshotDownload.js +2 -3
- package/dist/platform/assets.d.ts +9 -16
- package/dist/platform/assets.js +60 -17
- package/dist/platform/copiedAssets.d.ts +0 -1
- package/dist/platform/copiedAssets.js +1 -2
- package/dist/presentation/state.d.ts +1 -1
- package/dist/presentation/state.js +3 -3
- package/dist/print-mask.d.ts +2 -2
- package/dist/print-mask.js +1 -1
- package/dist/registry/capabilities.d.ts +3 -16
- package/dist/registry/capabilities.js +2 -15
- package/dist/registry/formats.d.ts +5 -5
- package/dist/registry/formats.generated.d.ts +7 -8
- package/dist/registry/formats.generated.js +7 -4
- package/dist/registry/formats.js +2 -2
- package/dist/registry/registry.d.ts +6 -15
- package/dist/registry/registry.js +24 -10
- package/dist/renderers/image.d.ts +1 -1
- package/dist/renderers/image.js +26 -5
- package/dist/renderers/index.d.ts +11 -11
- package/dist/renderers/index.js +5 -11
- package/dist/rendering/dispatcher.d.ts +1 -6
- package/dist/rendering/dispatcher.js +3 -3
- package/dist/rendering/handler.d.ts +10 -15
- package/dist/rendering/handler.js +20 -27
- package/dist/security/svgResources.d.ts +0 -10
- package/dist/security/svgResources.js +2 -11
- package/dist/source/index.d.ts +3 -3
- package/dist/source/index.js +1 -1
- package/dist/source/loading.d.ts +56 -15
- package/dist/source/loading.js +177 -87
- package/dist/source/precheck.d.ts +1 -13
- package/dist/source/precheck.js +2 -9
- package/dist/source/textEncoding.d.ts +6 -3
- package/dist/source/textEncoding.js +58 -8
- package/dist/viewer/createViewer.d.ts +1 -1
- package/dist/viewer/createViewer.js +103 -33
- package/dist/viewer/loading.d.ts +2 -6
- package/dist/viewer/loading.js +1 -9
- package/dist/viewer/operations.d.ts +3 -3
- package/dist/viewer/operations.js +6 -14
- package/dist/viewer/state.d.ts +2 -6
- package/dist/viewer/state.js +3 -8
- package/package.json +127 -19
|
@@ -1,26 +1,20 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
18
|
-
import { createFileViewerCoreRendererRegistry } from '../renderers/index.js';
|
|
19
|
-
import { createFileViewerRequestScope } from '../source/loading.js';
|
|
20
|
-
import { normalizeSource } from '../source/index.js';
|
|
21
|
-
import { buildFileViewerWatermarkInlineStyle } from '../features/watermark.js';
|
|
22
|
-
import { createFileViewerSnapshotDownload } from '../output/snapshotDownload.js';
|
|
23
|
-
import { createFileViewerErrorState, createFileViewerUnsupportedState } from './state.js';
|
|
1
|
+
import { createEmptyFileViewerSearchState, } from "../features/document/model.js";
|
|
2
|
+
import { createFileViewerDocumentFeatureControllerActionHandlers, } from "../features/document/events.js";
|
|
3
|
+
import { createFileViewerZoomController } from "../features/document/zoom.js";
|
|
4
|
+
import { createFileViewerViewStateController } from "../features/document/viewState.js";
|
|
5
|
+
import { createFileViewerFitController, hasFileViewerExplicitInitialViewState, } from "../features/document/fit.js";
|
|
6
|
+
import { DEFAULT_FILE_VIEWER_DOWNLOAD_FILENAME, DEFAULT_FILE_VIEWER_EXPORT_FILENAME, DEFAULT_FILE_VIEWER_PREVIEW_TITLE, createFileViewerOriginalSourceStateFromNormalizedSource, executeFileViewerDownloadOperation, executeFileViewerExportHtmlOperation, executeFileViewerPrintOperation, resolveFileViewerDisplayFilename, resolveFileViewerOperationFilename, } from "./operations.js";
|
|
7
|
+
import { openFileViewerPrintMaskDesignerAsync } from "../features/printMaskLoader.js";
|
|
8
|
+
import { applyFileViewerZoomAvailability, createUnsupportedAvailability, getRendererAvailability, } from "../registry/capabilities.js";
|
|
9
|
+
import { buildFileViewerLifecycleContextFromNormalizedSource, buildFileViewerOperationContext, runFileViewerBeforeOperation, runFileViewerLifecycleHook, } from "../lifecycle/operations.js";
|
|
10
|
+
import { collectFileViewerRendererPlugins, createRendererRegistry, getFileViewerAutoRendererPresetVersion, hasFileViewerRendererPresetName, installFileViewerRendererPlugins, listFileViewerAutoRendererPresets, resolveFileViewerRendererPresetInputs, resolveFileViewerRendererDefinition, } from "../registry/registry.js";
|
|
11
|
+
import { createFileRenderHandlerLoader, applyFileViewerRenderSurfaceState, createFileViewerRenderSurfaceState, createFileViewerRenderSurface, removeFileViewerRenderTarget, syncFileViewerRenderSurfaceBackground, } from "../rendering/handler.js";
|
|
12
|
+
import { createFileViewerCoreRendererRegistry } from "../renderers/index.js";
|
|
13
|
+
import { createFileViewerRequestScope } from "../source/loading.js";
|
|
14
|
+
import { normalizeSource } from "../source/index.js";
|
|
15
|
+
import { buildFileViewerWatermarkInlineStyle } from "../features/watermark.js";
|
|
16
|
+
import { createFileViewerSnapshotDownload } from "../output/snapshotDownload.js";
|
|
17
|
+
import { createFileViewerErrorState, createFileViewerUnsupportedState } from "./state.js";
|
|
24
18
|
const emitLifecycle = async (options, onEvent, phase, source, version, startedAt, reason) => {
|
|
25
19
|
const now = Date.now();
|
|
26
20
|
const context = buildFileViewerLifecycleContextFromNormalizedSource({
|
|
@@ -157,6 +151,7 @@ export const createViewer = (container, createOptions = {}) => {
|
|
|
157
151
|
let installedAutoRenderersEnabled = resolveAutoRenderersEnabled(options);
|
|
158
152
|
let installedAutoRendererVersion = -1;
|
|
159
153
|
let currentSource = null;
|
|
154
|
+
let currentRendererId = null;
|
|
160
155
|
let currentRenderTarget = null;
|
|
161
156
|
let currentDocumentRoot = null;
|
|
162
157
|
const renderSurfaceState = createFileViewerRenderSurfaceState();
|
|
@@ -350,6 +345,7 @@ export const createViewer = (container, createOptions = {}) => {
|
|
|
350
345
|
load: createFileRenderHandlerLoader({
|
|
351
346
|
handler: registration.handler,
|
|
352
347
|
rendererId: definition.id,
|
|
348
|
+
allowUrlSource: definition.sourceAccess === 'stream-preferred',
|
|
353
349
|
getTarget: context => context.surface.container,
|
|
354
350
|
}),
|
|
355
351
|
});
|
|
@@ -360,6 +356,26 @@ export const createViewer = (container, createOptions = {}) => {
|
|
|
360
356
|
registerHandler,
|
|
361
357
|
});
|
|
362
358
|
};
|
|
359
|
+
const resolveDetectedSourceType = async (source, signal) => {
|
|
360
|
+
var _a;
|
|
361
|
+
for (const definition of registry.list()) {
|
|
362
|
+
if (!definition.resolveSourceType)
|
|
363
|
+
continue;
|
|
364
|
+
const detected = await definition.resolveSourceType({
|
|
365
|
+
filename: source.filename,
|
|
366
|
+
extension: source.extension,
|
|
367
|
+
url: source.url,
|
|
368
|
+
file: source.file,
|
|
369
|
+
buffer: source.buffer,
|
|
370
|
+
mimeType: (_a = source.file) === null || _a === void 0 ? void 0 : _a.type,
|
|
371
|
+
signal,
|
|
372
|
+
});
|
|
373
|
+
if (typeof detected === 'string' && detected.trim()) {
|
|
374
|
+
return detected.trim();
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
return source.extension;
|
|
378
|
+
};
|
|
363
379
|
const renderNestedBuffer = async (buffer, type, target, context) => {
|
|
364
380
|
var _a;
|
|
365
381
|
const inheritedOptions = (context === null || context === void 0 ? void 0 : context.options) || options;
|
|
@@ -367,9 +383,6 @@ export const createViewer = (container, createOptions = {}) => {
|
|
|
367
383
|
registry,
|
|
368
384
|
options: {
|
|
369
385
|
...inheritedOptions,
|
|
370
|
-
// The parent already resolved its renderer assembly into `registry`.
|
|
371
|
-
// Reuse that exact registry without reinstalling presets or mutating a
|
|
372
|
-
// shared registry while an attachment is open.
|
|
373
386
|
autoRenderers: false,
|
|
374
387
|
rendererMode: 'extend',
|
|
375
388
|
renderers: undefined,
|
|
@@ -436,7 +449,16 @@ export const createViewer = (container, createOptions = {}) => {
|
|
|
436
449
|
};
|
|
437
450
|
const getCapabilitiesForExtension = (extension) => {
|
|
438
451
|
const targetExtension = extension || (currentSource === null || currentSource === void 0 ? void 0 : currentSource.extension) || '';
|
|
439
|
-
const renderer =
|
|
452
|
+
const renderer = extension
|
|
453
|
+
? resolveFileViewerRendererDefinition(registry, {
|
|
454
|
+
extension,
|
|
455
|
+
})
|
|
456
|
+
: currentRendererId
|
|
457
|
+
? registry.getById(currentRendererId)
|
|
458
|
+
: resolveFileViewerRendererDefinition(registry, {
|
|
459
|
+
filename: currentSource === null || currentSource === void 0 ? void 0 : currentSource.filename,
|
|
460
|
+
extension: targetExtension,
|
|
461
|
+
});
|
|
440
462
|
const zoomState = zoomController.getState();
|
|
441
463
|
if (!renderer) {
|
|
442
464
|
return applyFileViewerZoomAvailability(createUnsupportedAvailability(targetExtension), zoomState);
|
|
@@ -470,6 +492,7 @@ export const createViewer = (container, createOptions = {}) => {
|
|
|
470
492
|
};
|
|
471
493
|
const zoomController = createFileViewerZoomController({
|
|
472
494
|
root: () => currentDocumentRoot || container,
|
|
495
|
+
gestures: () => options.zoomGestures,
|
|
473
496
|
beforeZoom: runBeforeViewerOperation,
|
|
474
497
|
onChange: state => emitZoomAndOperationAvailabilityChange(state),
|
|
475
498
|
});
|
|
@@ -527,6 +550,7 @@ export const createViewer = (container, createOptions = {}) => {
|
|
|
527
550
|
await ((_a = session === null || session === void 0 ? void 0 : session.destroy) === null || _a === void 0 ? void 0 : _a.call(session));
|
|
528
551
|
removeRenderTarget(target || undefined);
|
|
529
552
|
currentSource = null;
|
|
553
|
+
currentRendererId = null;
|
|
530
554
|
currentDocumentRoot = null;
|
|
531
555
|
applyFileViewerRenderSurfaceState(renderSurfaceState, {
|
|
532
556
|
session: null,
|
|
@@ -561,8 +585,30 @@ export const createViewer = (container, createOptions = {}) => {
|
|
|
561
585
|
return null;
|
|
562
586
|
}
|
|
563
587
|
const normalized = normalizeSource(source);
|
|
588
|
+
let resolvedExtension;
|
|
589
|
+
try {
|
|
590
|
+
resolvedExtension = await resolveDetectedSourceType(normalized, loadSignal);
|
|
591
|
+
}
|
|
592
|
+
catch (error) {
|
|
593
|
+
requestScope.requestController.clearAbortController(requestAbortController);
|
|
594
|
+
if (!requestScope.isCurrentRequest(version) || (loadSignal === null || loadSignal === void 0 ? void 0 : loadSignal.aborted) || isAbortError(error)) {
|
|
595
|
+
return null;
|
|
596
|
+
}
|
|
597
|
+
throw error;
|
|
598
|
+
}
|
|
599
|
+
if (!requestScope.isCurrentRequest(version) || (loadSignal === null || loadSignal === void 0 ? void 0 : loadSignal.aborted)) {
|
|
600
|
+
requestScope.requestController.clearAbortController(requestAbortController);
|
|
601
|
+
return null;
|
|
602
|
+
}
|
|
603
|
+
const renderer = resolveFileViewerRendererDefinition(registry, {
|
|
604
|
+
filename: normalized.filename,
|
|
605
|
+
extension: resolvedExtension,
|
|
606
|
+
});
|
|
607
|
+
const routedSource = resolvedExtension === normalized.extension
|
|
608
|
+
? normalized
|
|
609
|
+
: { ...normalized, extension: resolvedExtension };
|
|
564
610
|
currentSource = normalized;
|
|
565
|
-
|
|
611
|
+
currentRendererId = (renderer === null || renderer === void 0 ? void 0 : renderer.id) || null;
|
|
566
612
|
const startedAt = Date.now();
|
|
567
613
|
await emitLifecycle(options, createOptions.onEvent, 'load-start', normalized, version, startedAt);
|
|
568
614
|
const surface = createRenderTarget((renderer === null || renderer === void 0 ? void 0 : renderer.id) !== 'office-presentation' && (renderer === null || renderer === void 0 ? void 0 : renderer.id) !== 'office-presentation-binary');
|
|
@@ -570,7 +616,7 @@ export const createViewer = (container, createOptions = {}) => {
|
|
|
570
616
|
const targetHost = surface.host || target;
|
|
571
617
|
currentDocumentRoot = target;
|
|
572
618
|
if (!(renderer === null || renderer === void 0 ? void 0 : renderer.load)) {
|
|
573
|
-
renderMissingRendererState(target,
|
|
619
|
+
renderMissingRendererState(target, resolvedExtension, options);
|
|
574
620
|
applyFileViewerRenderSurfaceState(renderSurfaceState, { session: null });
|
|
575
621
|
syncWatermarkOverlay();
|
|
576
622
|
emitZoomAndOperationAvailabilityChange();
|
|
@@ -580,7 +626,7 @@ export const createViewer = (container, createOptions = {}) => {
|
|
|
580
626
|
let session;
|
|
581
627
|
try {
|
|
582
628
|
session = await renderer.load({
|
|
583
|
-
source:
|
|
629
|
+
source: routedSource,
|
|
584
630
|
surface,
|
|
585
631
|
options,
|
|
586
632
|
signal: loadSignal,
|
|
@@ -616,22 +662,40 @@ export const createViewer = (container, createOptions = {}) => {
|
|
|
616
662
|
thumbnailAdapter: null,
|
|
617
663
|
});
|
|
618
664
|
removeWatermarkOverlay();
|
|
619
|
-
renderFileViewerErrorState(target,
|
|
665
|
+
renderFileViewerErrorState(target, resolvedExtension, error, options);
|
|
620
666
|
emitZoomAndOperationAvailabilityChange();
|
|
621
667
|
throw error;
|
|
622
668
|
}
|
|
623
|
-
if (!requestScope.isCurrentRequest(version)) {
|
|
669
|
+
if (!requestScope.isCurrentRequest(version) || (loadSignal === null || loadSignal === void 0 ? void 0 : loadSignal.aborted)) {
|
|
624
670
|
await disposeStaleSession(session, targetHost);
|
|
671
|
+
requestScope.requestController.clearAbortController(requestAbortController);
|
|
625
672
|
return null;
|
|
626
673
|
}
|
|
627
674
|
applyFileViewerRenderSurfaceState(renderSurfaceState, { session });
|
|
628
675
|
syncWatermarkOverlay();
|
|
629
676
|
zoomController.refreshProvider();
|
|
630
677
|
viewStateController.refreshProvider();
|
|
678
|
+
const finishStaleLoad = async () => {
|
|
679
|
+
if (renderSurfaceState.session === session && currentRenderTarget === targetHost) {
|
|
680
|
+
await destroyCurrent('replace');
|
|
681
|
+
}
|
|
682
|
+
else {
|
|
683
|
+
removeRenderTarget(targetHost);
|
|
684
|
+
}
|
|
685
|
+
requestScope.requestController.clearAbortController(requestAbortController);
|
|
686
|
+
};
|
|
631
687
|
await documentActions.refreshDocumentIndex({ notify: false });
|
|
688
|
+
if (!requestScope.isCurrentRequest(version) || (loadSignal === null || loadSignal === void 0 ? void 0 : loadSignal.aborted)) {
|
|
689
|
+
await finishStaleLoad();
|
|
690
|
+
return null;
|
|
691
|
+
}
|
|
632
692
|
await fitController.applyInitialFit({
|
|
633
693
|
skip: hasFileViewerExplicitInitialViewState(options.initialViewState),
|
|
634
694
|
});
|
|
695
|
+
if (!requestScope.isCurrentRequest(version) || (loadSignal === null || loadSignal === void 0 ? void 0 : loadSignal.aborted)) {
|
|
696
|
+
await finishStaleLoad();
|
|
697
|
+
return null;
|
|
698
|
+
}
|
|
635
699
|
zoomController.refreshProvider();
|
|
636
700
|
viewStateController.refreshProvider();
|
|
637
701
|
emitZoomAndOperationAvailabilityChange();
|
|
@@ -668,7 +732,13 @@ export const createViewer = (container, createOptions = {}) => {
|
|
|
668
732
|
return getCapabilitiesForExtension(extension);
|
|
669
733
|
},
|
|
670
734
|
getRenderer(extension) {
|
|
671
|
-
|
|
735
|
+
if (!extension && currentRendererId) {
|
|
736
|
+
return registry.getById(currentRendererId);
|
|
737
|
+
}
|
|
738
|
+
return resolveFileViewerRendererDefinition(registry, {
|
|
739
|
+
filename: extension ? undefined : currentSource === null || currentSource === void 0 ? void 0 : currentSource.filename,
|
|
740
|
+
extension: extension || (currentSource === null || currentSource === void 0 ? void 0 : currentSource.extension) || '',
|
|
741
|
+
});
|
|
672
742
|
},
|
|
673
743
|
getSource() {
|
|
674
744
|
return currentSource;
|
package/dist/viewer/loading.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { type FileViewerI18nInput } from
|
|
2
|
-
import type { FileViewerStateTheme } from
|
|
1
|
+
import { type FileViewerI18nInput } from "../i18n/messages.js";
|
|
2
|
+
import type { FileViewerStateTheme } from "../contracts/types.js";
|
|
3
3
|
export type FileViewerLoadingTheme = FileViewerStateTheme;
|
|
4
4
|
export interface FileViewerLoadingState {
|
|
5
5
|
loading: boolean;
|
|
@@ -51,8 +51,4 @@ export declare const syncFileViewerLoadingControllerState: <Target extends Mutab
|
|
|
51
51
|
export declare const runFileViewerLoadingControllerAction: <Target extends MutableFileViewerLoadingState>(target: Target, action: () => FileViewerLoadingState) => Target;
|
|
52
52
|
export declare const runFileViewerLoadingExtensionSync: <Target extends MutableFileViewerLoadingState>({ target, controller, extension, }: RunFileViewerLoadingExtensionSyncInput<Target>) => Target;
|
|
53
53
|
export declare const createFileViewerLoadingControllerActionHandlers: <Target extends MutableFileViewerLoadingState>(target: Target, controller: FileViewerLoadingController) => FileViewerLoadingControllerActionHandlers;
|
|
54
|
-
/**
|
|
55
|
-
* 统一管理加载、错误、文案和主题色。
|
|
56
|
-
* wrapper 只负责把这个加载状态映射到各自框架的响应式系统。
|
|
57
|
-
*/
|
|
58
54
|
export declare const createFileViewerLoadingController: (extend?: string, initialI18n?: FileViewerI18nInput) => FileViewerLoadingController;
|
package/dist/viewer/loading.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { translateFileViewerMessage, } from
|
|
1
|
+
import { translateFileViewerMessage, } from "../i18n/messages.js";
|
|
2
2
|
export const FALLBACK_FILE_VIEWER_LOADING_THEME = {
|
|
3
3
|
accent: '#5f6f82',
|
|
4
4
|
soft: 'rgba(95, 111, 130, 0.12)',
|
|
@@ -418,10 +418,6 @@ const FILE_VIEWER_LOADING_COPY_KEYS = {
|
|
|
418
418
|
flac: { label: 'loading.audio.label', hint: 'loading.audio.hint' },
|
|
419
419
|
weba: { label: 'loading.audio.label', hint: 'loading.audio.hint' },
|
|
420
420
|
};
|
|
421
|
-
/**
|
|
422
|
-
* 根据扩展名返回统一的加载主题。
|
|
423
|
-
* 这样不同预览器可以复用同一套视觉语义,避免颜色、图标和文案各写一份。
|
|
424
|
-
*/
|
|
425
421
|
const localizeFileViewerLoadingTheme = (theme, extend = '', i18n) => {
|
|
426
422
|
const normalized = extend.trim().toLowerCase();
|
|
427
423
|
const keys = FILE_VIEWER_LOADING_COPY_KEYS[normalized] || {
|
|
@@ -511,10 +507,6 @@ export const createFileViewerLoadingControllerActionHandlers = (target, controll
|
|
|
511
507
|
},
|
|
512
508
|
};
|
|
513
509
|
};
|
|
514
|
-
/**
|
|
515
|
-
* 统一管理加载、错误、文案和主题色。
|
|
516
|
-
* wrapper 只负责把这个加载状态映射到各自框架的响应式系统。
|
|
517
|
-
*/
|
|
518
510
|
export const createFileViewerLoadingController = (extend = '', initialI18n) => {
|
|
519
511
|
let currentExtend = extend;
|
|
520
512
|
let currentI18n = initialI18n;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type { FileViewerErrorMessageFormatter } from
|
|
2
|
-
import { type FileViewerI18nInput } from
|
|
3
|
-
import type { FileRenderExportAdapter, FileViewerDownloadOptions, FileViewerExportHtmlOptions, FileViewerOperationType, FileViewerPrintOptions, NormalizedFileViewerSource } from
|
|
1
|
+
import type { FileViewerErrorMessageFormatter } from "./state.js";
|
|
2
|
+
import { type FileViewerI18nInput } from "../i18n/messages.js";
|
|
3
|
+
import type { FileRenderExportAdapter, FileViewerDownloadOptions, FileViewerExportHtmlOptions, FileViewerOperationType, FileViewerPrintOptions, NormalizedFileViewerSource } from "../contracts/types.js";
|
|
4
4
|
export interface FileViewerOriginalSourceState {
|
|
5
5
|
buffer?: ArrayBuffer | null;
|
|
6
6
|
file?: File | Blob | null;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { triggerFileViewerBlobDownload, triggerFileViewerUrlDownload, waitForFileViewerPrintWindowReady, } from
|
|
2
|
-
import { DEFAULT_FILE_VIEWER_SOURCE_FILENAME } from
|
|
3
|
-
import { translateFileViewerMessage, } from
|
|
1
|
+
import { triggerFileViewerBlobDownload, triggerFileViewerUrlDownload, waitForFileViewerPrintWindowReady, } from "../output/export.js";
|
|
2
|
+
import { DEFAULT_FILE_VIEWER_SOURCE_FILENAME } from "../source/index.js";
|
|
3
|
+
import { translateFileViewerMessage, } from "../i18n/messages.js";
|
|
4
4
|
export const DEFAULT_FILE_VIEWER_PREVIEW_TITLE = 'file-viewer-preview';
|
|
5
5
|
export const DEFAULT_FILE_VIEWER_EXPORT_FILENAME = 'preview';
|
|
6
6
|
export const DEFAULT_FILE_VIEWER_DOWNLOAD_FILENAME = DEFAULT_FILE_VIEWER_SOURCE_FILENAME;
|
|
@@ -65,7 +65,7 @@ const buildRenderedHtmlDocumentFromOperation = async (mode, { source, title, fil
|
|
|
65
65
|
if (!source) {
|
|
66
66
|
throw new Error(translateFileViewerMessage(i18n, 'error.noExportContent'));
|
|
67
67
|
}
|
|
68
|
-
const { buildFileViewerRenderedHtmlDocument } = await import(
|
|
68
|
+
const { buildFileViewerRenderedHtmlDocument } = await import("../export.js");
|
|
69
69
|
return buildFileViewerRenderedHtmlDocument({
|
|
70
70
|
source,
|
|
71
71
|
mode,
|
|
@@ -82,7 +82,7 @@ const buildRenderedDomDocumentFromOperation = async ({ source, title, filename,
|
|
|
82
82
|
if (!source) {
|
|
83
83
|
throw new Error(translateFileViewerMessage(i18n, 'error.noExportContent'));
|
|
84
84
|
}
|
|
85
|
-
const { buildFileViewerRenderedDomDocument } = await import(
|
|
85
|
+
const { buildFileViewerRenderedDomDocument } = await import("../export.js");
|
|
86
86
|
return buildFileViewerRenderedDomDocument({
|
|
87
87
|
source,
|
|
88
88
|
mode: 'print',
|
|
@@ -157,11 +157,6 @@ export const executeFileViewerDownloadOperation = async ({ source, filename, bef
|
|
|
157
157
|
source,
|
|
158
158
|
fallback: DEFAULT_FILE_VIEWER_DOWNLOAD_FILENAME,
|
|
159
159
|
});
|
|
160
|
-
// PDF.js transfers ArrayBuffer-backed data to its worker. After a successful
|
|
161
|
-
// render the original buffer can therefore be detached (byteLength === 0),
|
|
162
|
-
// while the File or URL retained by the viewer is still the complete source.
|
|
163
|
-
// Preserve the existing buffer-first contract for non-empty buffers, but do
|
|
164
|
-
// not turn a detached buffer into a zero-byte download.
|
|
165
160
|
if (source.buffer &&
|
|
166
161
|
(source.buffer.byteLength > 0 || (!source.file && !source.url))) {
|
|
167
162
|
triggerFileViewerBlobDownload(new Blob([source.buffer], { type: source.mimeType || ((_a = source.file) === null || _a === void 0 ? void 0 : _a.type) || 'application/octet-stream' }), resolvedFilename);
|
|
@@ -175,8 +170,6 @@ export const executeFileViewerDownloadOperation = async ({ source, filename, bef
|
|
|
175
170
|
triggerFileViewerUrlDownload(source.url, resolvedFilename);
|
|
176
171
|
return true;
|
|
177
172
|
}
|
|
178
|
-
// Empty local files are valid sources. These final fallbacks preserve their
|
|
179
|
-
// intentional zero-byte downloads when no complete File or URL is available.
|
|
180
173
|
if (source.file) {
|
|
181
174
|
triggerFileViewerBlobDownload(source.file, resolvedFilename);
|
|
182
175
|
return true;
|
|
@@ -210,7 +203,6 @@ export const executeFileViewerPrintOperation = async ({ autoPrint = true, before
|
|
|
210
203
|
if (beforeResult === false) {
|
|
211
204
|
return false;
|
|
212
205
|
}
|
|
213
|
-
// Preserve the browser's transient user activation while the snapshot is built.
|
|
214
206
|
const ownsPrintWindow = !printWindow;
|
|
215
207
|
const targetWindow = printWindow ||
|
|
216
208
|
(openWindow === null || openWindow === void 0 ? void 0 : openWindow()) ||
|
|
@@ -348,7 +340,7 @@ export const createFileViewerOperationActionHandlers = ({ getBuffer, getFile, ge
|
|
|
348
340
|
if (!source) {
|
|
349
341
|
throw new Error(translateFileViewerMessage(resolveI18n(), 'error.noExportContent'));
|
|
350
342
|
}
|
|
351
|
-
const { openFileViewerPrintMaskDesignerAsync } = await import(
|
|
343
|
+
const { openFileViewerPrintMaskDesignerAsync } = await import("../features/printMaskLoader.js");
|
|
352
344
|
const adapter = (_a = getAdapter === null || getAdapter === void 0 ? void 0 : getAdapter()) !== null && _a !== void 0 ? _a : null;
|
|
353
345
|
const result = await openFileViewerPrintMaskDesignerAsync({
|
|
354
346
|
root: source,
|
package/dist/viewer/state.d.ts
CHANGED
|
@@ -1,10 +1,6 @@
|
|
|
1
|
-
import { type FileViewerI18nInput } from
|
|
2
|
-
import type { FileViewerRendererCategory, FileViewerStateDescriptor, FileViewerStateTheme } from
|
|
1
|
+
import { type FileViewerI18nInput } from "../i18n/messages.js";
|
|
2
|
+
import type { FileViewerRendererCategory, FileViewerStateDescriptor, FileViewerStateTheme } from "../contracts/types.js";
|
|
3
3
|
export type FileViewerErrorMessageFormatter = (prefix: string, error: unknown, i18n?: FileViewerI18nInput) => string;
|
|
4
|
-
/**
|
|
5
|
-
* Renderers can attach a localized, user-safe explanation without replacing
|
|
6
|
-
* the original error object that hosts use for diagnostics and recovery.
|
|
7
|
-
*/
|
|
8
4
|
export declare const FILE_VIEWER_ERROR_MESSAGE: "fileViewerErrorMessage";
|
|
9
5
|
export interface FileViewerErrorMessageCarrier {
|
|
10
6
|
[FILE_VIEWER_ERROR_MESSAGE]?: string;
|
package/dist/viewer/state.js
CHANGED
|
@@ -1,10 +1,6 @@
|
|
|
1
|
-
import { normalizeFileExtension } from
|
|
2
|
-
import { DEFAULT_RENDERER_DEFINITIONS } from
|
|
3
|
-
import { resolveFileViewerLocale, translateFileViewerMessage, } from
|
|
4
|
-
/**
|
|
5
|
-
* Renderers can attach a localized, user-safe explanation without replacing
|
|
6
|
-
* the original error object that hosts use for diagnostics and recovery.
|
|
7
|
-
*/
|
|
1
|
+
import { normalizeFileExtension } from "../source/index.js";
|
|
2
|
+
import { DEFAULT_RENDERER_DEFINITIONS } from "../registry/formats.js";
|
|
3
|
+
import { resolveFileViewerLocale, translateFileViewerMessage, } from "../i18n/messages.js";
|
|
8
4
|
export const FILE_VIEWER_ERROR_MESSAGE = 'fileViewerErrorMessage';
|
|
9
5
|
export const attachFileViewerErrorMessage = (error, message) => {
|
|
10
6
|
const normalizedMessage = message.trim();
|
|
@@ -20,7 +16,6 @@ export const attachFileViewerErrorMessage = (error, message) => {
|
|
|
20
16
|
return error;
|
|
21
17
|
}
|
|
22
18
|
catch {
|
|
23
|
-
// Frozen cross-realm errors retain their original value as the cause below.
|
|
24
19
|
}
|
|
25
20
|
}
|
|
26
21
|
const presented = new Error(normalizedMessage);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@file-viewer/core",
|
|
3
|
-
"version": "3.1
|
|
3
|
+
"version": "3.2.1",
|
|
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",
|
|
@@ -27,8 +27,7 @@
|
|
|
27
27
|
},
|
|
28
28
|
"repository": {
|
|
29
29
|
"type": "git",
|
|
30
|
-
"url": "git+https://github.com/flyfish-dev/file-viewer.git"
|
|
31
|
-
"directory": "packages/core"
|
|
30
|
+
"url": "git+https://github.com/flyfish-dev/file-viewer.git"
|
|
32
31
|
},
|
|
33
32
|
"bugs": {
|
|
34
33
|
"url": "https://github.com/flyfish-dev/file-viewer/issues"
|
|
@@ -75,29 +74,138 @@
|
|
|
75
74
|
"./package.json": "./package.json"
|
|
76
75
|
},
|
|
77
76
|
"files": [
|
|
78
|
-
"assets.js",
|
|
79
77
|
"assets.d.ts",
|
|
80
|
-
"
|
|
78
|
+
"assets.js",
|
|
81
79
|
"browser.d.ts",
|
|
82
|
-
"
|
|
83
|
-
"
|
|
80
|
+
"browser.js",
|
|
81
|
+
"dist/assets.d.ts",
|
|
82
|
+
"dist/assets.js",
|
|
83
|
+
"dist/browser.d.ts",
|
|
84
|
+
"dist/browser.js",
|
|
85
|
+
"dist/browser/controller.d.ts",
|
|
86
|
+
"dist/browser/controller.js",
|
|
87
|
+
"dist/config/options.d.ts",
|
|
88
|
+
"dist/config/options.js",
|
|
89
|
+
"dist/contracts/types.d.ts",
|
|
90
|
+
"dist/contracts/types.js",
|
|
91
|
+
"dist/contracts/xml.d.ts",
|
|
92
|
+
"dist/contracts/xml.js",
|
|
93
|
+
"dist/export.d.ts",
|
|
94
|
+
"dist/export.js",
|
|
95
|
+
"dist/exportDocument.d.ts",
|
|
96
|
+
"dist/exportDocument.js",
|
|
97
|
+
"dist/features/document/dom/anchors.d.ts",
|
|
98
|
+
"dist/features/document/dom/anchors.js",
|
|
99
|
+
"dist/features/document/dom/index.d.ts",
|
|
100
|
+
"dist/features/document/dom/index.js",
|
|
101
|
+
"dist/features/document/dom/providers.d.ts",
|
|
102
|
+
"dist/features/document/dom/providers.js",
|
|
103
|
+
"dist/features/document/dom/scroll.d.ts",
|
|
104
|
+
"dist/features/document/dom/scroll.js",
|
|
105
|
+
"dist/features/document/events.d.ts",
|
|
106
|
+
"dist/features/document/events.js",
|
|
107
|
+
"dist/features/document/fit.d.ts",
|
|
108
|
+
"dist/features/document/fit.js",
|
|
109
|
+
"dist/features/document/model.d.ts",
|
|
110
|
+
"dist/features/document/model.js",
|
|
111
|
+
"dist/features/document/search.d.ts",
|
|
112
|
+
"dist/features/document/search.js",
|
|
113
|
+
"dist/features/document/viewState.d.ts",
|
|
114
|
+
"dist/features/document/viewState.js",
|
|
115
|
+
"dist/features/document/zoom.d.ts",
|
|
116
|
+
"dist/features/document/zoom.js",
|
|
117
|
+
"dist/features/document/zoomGestures.d.ts",
|
|
118
|
+
"dist/features/document/zoomGestures.js",
|
|
119
|
+
"dist/features/printMask.d.ts",
|
|
120
|
+
"dist/features/printMask.js",
|
|
121
|
+
"dist/features/printMaskDesigner.d.ts",
|
|
122
|
+
"dist/features/printMaskDesigner.js",
|
|
123
|
+
"dist/features/printMaskLoader.d.ts",
|
|
124
|
+
"dist/features/printMaskLoader.js",
|
|
125
|
+
"dist/features/watermark.d.ts",
|
|
126
|
+
"dist/features/watermark.js",
|
|
127
|
+
"dist/headless.d.ts",
|
|
128
|
+
"dist/headless.js",
|
|
129
|
+
"dist/i18n/messages.d.ts",
|
|
130
|
+
"dist/i18n/messages.de.d.ts",
|
|
131
|
+
"dist/i18n/messages.de.js",
|
|
132
|
+
"dist/i18n/messages.ja.d.ts",
|
|
133
|
+
"dist/i18n/messages.ja.js",
|
|
134
|
+
"dist/i18n/messages.js",
|
|
135
|
+
"dist/index.d.ts",
|
|
136
|
+
"dist/index.js",
|
|
137
|
+
"dist/lifecycle/facade.d.ts",
|
|
138
|
+
"dist/lifecycle/facade.js",
|
|
139
|
+
"dist/lifecycle/operations.d.ts",
|
|
140
|
+
"dist/lifecycle/operations.js",
|
|
141
|
+
"dist/output/canvasImage.d.ts",
|
|
142
|
+
"dist/output/canvasImage.js",
|
|
143
|
+
"dist/output/export.d.ts",
|
|
144
|
+
"dist/output/export.js",
|
|
145
|
+
"dist/output/printLayout.d.ts",
|
|
146
|
+
"dist/output/printLayout.js",
|
|
147
|
+
"dist/output/snapshotDownload.d.ts",
|
|
148
|
+
"dist/output/snapshotDownload.js",
|
|
149
|
+
"dist/platform/assets.d.ts",
|
|
150
|
+
"dist/platform/assets.js",
|
|
151
|
+
"dist/platform/copiedAssets.d.ts",
|
|
152
|
+
"dist/platform/copiedAssets.js",
|
|
153
|
+
"dist/platform/worker.d.ts",
|
|
154
|
+
"dist/platform/worker.js",
|
|
155
|
+
"dist/presentation/state.d.ts",
|
|
156
|
+
"dist/presentation/state.js",
|
|
157
|
+
"dist/print-mask.d.ts",
|
|
158
|
+
"dist/print-mask.js",
|
|
159
|
+
"dist/registry/capabilities.d.ts",
|
|
160
|
+
"dist/registry/capabilities.js",
|
|
161
|
+
"dist/registry/formats.d.ts",
|
|
162
|
+
"dist/registry/formats.generated.d.ts",
|
|
163
|
+
"dist/registry/formats.generated.js",
|
|
164
|
+
"dist/registry/formats.js",
|
|
165
|
+
"dist/registry/registry.d.ts",
|
|
166
|
+
"dist/registry/registry.js",
|
|
167
|
+
"dist/renderers/image.d.ts",
|
|
168
|
+
"dist/renderers/image.js",
|
|
169
|
+
"dist/renderers/index.d.ts",
|
|
170
|
+
"dist/renderers/index.js",
|
|
171
|
+
"dist/rendering/dispatcher.d.ts",
|
|
172
|
+
"dist/rendering/dispatcher.js",
|
|
173
|
+
"dist/rendering/handler.d.ts",
|
|
174
|
+
"dist/rendering/handler.js",
|
|
175
|
+
"dist/security/svgResources.d.ts",
|
|
176
|
+
"dist/security/svgResources.js",
|
|
177
|
+
"dist/source/index.d.ts",
|
|
178
|
+
"dist/source/index.js",
|
|
179
|
+
"dist/source/loading.d.ts",
|
|
180
|
+
"dist/source/loading.js",
|
|
181
|
+
"dist/source/precheck.d.ts",
|
|
182
|
+
"dist/source/precheck.js",
|
|
183
|
+
"dist/source/textEncoding.d.ts",
|
|
184
|
+
"dist/source/textEncoding.js",
|
|
185
|
+
"dist/viewer/createViewer.d.ts",
|
|
186
|
+
"dist/viewer/createViewer.js",
|
|
187
|
+
"dist/viewer/loading.d.ts",
|
|
188
|
+
"dist/viewer/loading.js",
|
|
189
|
+
"dist/viewer/operations.d.ts",
|
|
190
|
+
"dist/viewer/operations.js",
|
|
191
|
+
"dist/viewer/state.d.ts",
|
|
192
|
+
"dist/viewer/state.js",
|
|
84
193
|
"headless.d.ts",
|
|
85
|
-
"
|
|
194
|
+
"headless.js",
|
|
195
|
+
"LICENSE",
|
|
86
196
|
"print-mask.d.ts",
|
|
87
|
-
"
|
|
88
|
-
"README.md",
|
|
197
|
+
"print-mask.js",
|
|
89
198
|
"README.en.md",
|
|
90
|
-
"
|
|
199
|
+
"README.md"
|
|
91
200
|
],
|
|
92
201
|
"dependencies": {
|
|
93
|
-
"dompurify": "3.4.
|
|
94
|
-
},
|
|
95
|
-
"devDependencies": {
|
|
96
|
-
"typescript": "^6.0.3"
|
|
202
|
+
"dompurify": "3.4.16"
|
|
97
203
|
},
|
|
98
204
|
"license": "Apache-2.0",
|
|
99
|
-
"
|
|
100
|
-
"
|
|
101
|
-
|
|
205
|
+
"fileViewer": {
|
|
206
|
+
"distribution": {
|
|
207
|
+
"schemaVersion": 1,
|
|
208
|
+
"mode": "runtime-only"
|
|
209
|
+
}
|
|
102
210
|
}
|
|
103
|
-
}
|
|
211
|
+
}
|