@file-viewer/core 2.1.16 → 2.1.17
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.
|
@@ -575,6 +575,10 @@ export interface FileViewerDocumentChunk {
|
|
|
575
575
|
export interface FileViewerComponentProps {
|
|
576
576
|
file?: FileViewerFileRef;
|
|
577
577
|
url?: string;
|
|
578
|
+
name?: string;
|
|
579
|
+
filename?: string;
|
|
580
|
+
type?: string;
|
|
581
|
+
size?: number;
|
|
578
582
|
options?: FileViewerOptions;
|
|
579
583
|
}
|
|
580
584
|
export interface FileViewerComponentEventMap {
|
|
@@ -29,6 +29,9 @@ export const clearFileViewerRenderSurface = (container) => {
|
|
|
29
29
|
export const createFileViewerRenderTarget = (container, options = {}) => {
|
|
30
30
|
const target = container.ownerDocument.createElement('div');
|
|
31
31
|
target.className = options.className || DEFAULT_FILE_VIEWER_RENDER_TARGET_CLASS;
|
|
32
|
+
target.style.width = '100%';
|
|
33
|
+
target.style.minWidth = '0';
|
|
34
|
+
target.style.minHeight = '0';
|
|
32
35
|
container.appendChild(target);
|
|
33
36
|
return target;
|
|
34
37
|
};
|
|
@@ -12,7 +12,7 @@ import { DEFAULT_FILE_VIEWER_DOWNLOAD_FILENAME, DEFAULT_FILE_VIEWER_EXPORT_FILEN
|
|
|
12
12
|
import { applyFileViewerZoomAvailability, createUnsupportedAvailability, getRendererAvailability, } from '../registry/capabilities.js';
|
|
13
13
|
import { buildFileViewerLifecycleContextFromNormalizedSource, buildFileViewerOperationContext, runFileViewerBeforeOperation, runFileViewerLifecycleHook, } from '../lifecycle/operations.js';
|
|
14
14
|
import { collectFileViewerRendererPlugins, createRendererRegistry, getFileViewerAutoRendererPresetVersion, hasFileViewerRendererPresetName, installFileViewerRendererPlugins, listFileViewerAutoRendererPresets, resolveFileViewerRendererPresetInputs, } from '../registry/registry.js';
|
|
15
|
-
import { createFileRenderHandlerLoader, applyFileViewerRenderSurfaceState, createFileViewerRenderSurfaceState, } from '../rendering/handler.js';
|
|
15
|
+
import { createFileRenderHandlerLoader, applyFileViewerRenderSurfaceState, createFileViewerRenderSurfaceState, createFileViewerRenderTarget, removeFileViewerRenderTarget, } from '../rendering/handler.js';
|
|
16
16
|
import { createFileViewerCoreRendererRegistry } from '../renderers/index.js';
|
|
17
17
|
import { createFileViewerRequestScope } from '../source/loading.js';
|
|
18
18
|
import { normalizeSource } from '../source/index.js';
|
|
@@ -93,6 +93,7 @@ export const createViewer = (container, createOptions = {}) => {
|
|
|
93
93
|
let installedAutoRenderersEnabled = resolveAutoRenderersEnabled(options);
|
|
94
94
|
let installedAutoRendererVersion = -1;
|
|
95
95
|
let currentSource = null;
|
|
96
|
+
let currentRenderTarget = null;
|
|
96
97
|
const renderSurfaceState = createFileViewerRenderSurfaceState();
|
|
97
98
|
const requestScope = createFileViewerRequestScope();
|
|
98
99
|
const documentTarget = {
|
|
@@ -179,6 +180,32 @@ export const createViewer = (container, createOptions = {}) => {
|
|
|
179
180
|
forcedWatermarkContainerPosition = false;
|
|
180
181
|
}
|
|
181
182
|
};
|
|
183
|
+
const removeRenderTarget = (target = currentRenderTarget) => {
|
|
184
|
+
if (!target) {
|
|
185
|
+
return;
|
|
186
|
+
}
|
|
187
|
+
removeFileViewerRenderTarget(container, target);
|
|
188
|
+
if (currentRenderTarget === target) {
|
|
189
|
+
currentRenderTarget = null;
|
|
190
|
+
}
|
|
191
|
+
};
|
|
192
|
+
const createRenderTarget = (fillHeight = true) => {
|
|
193
|
+
const target = createFileViewerRenderTarget(container);
|
|
194
|
+
if (fillHeight) {
|
|
195
|
+
target.style.height = '100%';
|
|
196
|
+
}
|
|
197
|
+
currentRenderTarget = target;
|
|
198
|
+
return target;
|
|
199
|
+
};
|
|
200
|
+
const disposeStaleSession = async (session, target) => {
|
|
201
|
+
var _a;
|
|
202
|
+
try {
|
|
203
|
+
await ((_a = session === null || session === void 0 ? void 0 : session.destroy) === null || _a === void 0 ? void 0 : _a.call(session));
|
|
204
|
+
}
|
|
205
|
+
finally {
|
|
206
|
+
removeRenderTarget(target);
|
|
207
|
+
}
|
|
208
|
+
};
|
|
182
209
|
const syncWatermarkOverlay = () => {
|
|
183
210
|
const inlineStyle = buildFileViewerWatermarkInlineStyle(options.watermark);
|
|
184
211
|
if (!inlineStyle) {
|
|
@@ -352,15 +379,20 @@ export const createViewer = (container, createOptions = {}) => {
|
|
|
352
379
|
zoomController.observe();
|
|
353
380
|
viewStateController.observe();
|
|
354
381
|
const destroyCurrent = async (reason = 'replace') => {
|
|
355
|
-
var _a
|
|
356
|
-
|
|
382
|
+
var _a;
|
|
383
|
+
const session = renderSurfaceState.session;
|
|
384
|
+
const target = currentRenderTarget;
|
|
385
|
+
if (!currentSource && !session && !target) {
|
|
357
386
|
return;
|
|
358
387
|
}
|
|
359
388
|
const source = currentSource;
|
|
360
389
|
const startedAt = Date.now();
|
|
361
390
|
const version = requestScope.getCurrentVersion();
|
|
362
|
-
|
|
363
|
-
|
|
391
|
+
if (source) {
|
|
392
|
+
await emitLifecycle(options, createOptions.onEvent, 'unload-start', source, version, startedAt, reason);
|
|
393
|
+
}
|
|
394
|
+
await ((_a = session === null || session === void 0 ? void 0 : session.destroy) === null || _a === void 0 ? void 0 : _a.call(session));
|
|
395
|
+
removeRenderTarget(target || undefined);
|
|
364
396
|
currentSource = null;
|
|
365
397
|
applyFileViewerRenderSurfaceState(renderSurfaceState, {
|
|
366
398
|
session: null,
|
|
@@ -371,36 +403,59 @@ export const createViewer = (container, createOptions = {}) => {
|
|
|
371
403
|
zoomController.clearProvider();
|
|
372
404
|
viewStateController.clearProvider();
|
|
373
405
|
emitZoomAndOperationAvailabilityChange();
|
|
374
|
-
|
|
406
|
+
if (source) {
|
|
407
|
+
await emitLifecycle(options, createOptions.onEvent, 'unload-complete', source, version, startedAt, reason);
|
|
408
|
+
}
|
|
375
409
|
};
|
|
376
410
|
return {
|
|
377
411
|
container,
|
|
378
412
|
async load(source) {
|
|
413
|
+
const version = requestScope.requestController.createVersion();
|
|
379
414
|
await destroyCurrent('replace');
|
|
380
415
|
await ensureRendererPluginsInstalled();
|
|
416
|
+
if (!requestScope.isCurrentRequest(version)) {
|
|
417
|
+
return null;
|
|
418
|
+
}
|
|
381
419
|
const normalized = normalizeSource(source);
|
|
382
420
|
currentSource = normalized;
|
|
383
|
-
const version = requestScope.requestController.createVersion();
|
|
384
421
|
const renderer = registry.getByExtension(normalized.extension);
|
|
385
422
|
const startedAt = Date.now();
|
|
386
423
|
await emitLifecycle(options, createOptions.onEvent, 'load-start', normalized, version, startedAt);
|
|
424
|
+
const target = createRenderTarget((renderer === null || renderer === void 0 ? void 0 : renderer.id) !== 'office-presentation');
|
|
387
425
|
if (!(renderer === null || renderer === void 0 ? void 0 : renderer.load)) {
|
|
388
|
-
renderMissingRendererState(
|
|
426
|
+
renderMissingRendererState(target, normalized.extension, options);
|
|
389
427
|
applyFileViewerRenderSurfaceState(renderSurfaceState, { session: null });
|
|
390
428
|
syncWatermarkOverlay();
|
|
391
429
|
emitZoomAndOperationAvailabilityChange();
|
|
392
430
|
await emitLifecycle(options, createOptions.onEvent, 'load-complete', normalized, version, startedAt);
|
|
393
431
|
return null;
|
|
394
432
|
}
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
433
|
+
let session;
|
|
434
|
+
try {
|
|
435
|
+
session = await renderer.load({
|
|
436
|
+
source: normalized,
|
|
437
|
+
surface: { container: target },
|
|
438
|
+
options,
|
|
439
|
+
signal: createOptions.signal,
|
|
440
|
+
registerExportAdapter: adapter => {
|
|
441
|
+
if (requestScope.isCurrentRequest(version)) {
|
|
442
|
+
applyFileViewerRenderSurfaceState(renderSurfaceState, { exportAdapter: adapter });
|
|
443
|
+
}
|
|
444
|
+
},
|
|
445
|
+
});
|
|
446
|
+
}
|
|
447
|
+
catch (error) {
|
|
448
|
+
if (!requestScope.isCurrentRequest(version)) {
|
|
449
|
+
removeRenderTarget(target);
|
|
450
|
+
return null;
|
|
451
|
+
}
|
|
452
|
+
removeRenderTarget(target);
|
|
453
|
+
throw error;
|
|
454
|
+
}
|
|
455
|
+
if (!requestScope.isCurrentRequest(version)) {
|
|
456
|
+
await disposeStaleSession(session, target);
|
|
457
|
+
return null;
|
|
458
|
+
}
|
|
404
459
|
applyFileViewerRenderSurfaceState(renderSurfaceState, { session });
|
|
405
460
|
syncWatermarkOverlay();
|
|
406
461
|
zoomController.refreshProvider();
|
|
@@ -411,6 +466,7 @@ export const createViewer = (container, createOptions = {}) => {
|
|
|
411
466
|
return session;
|
|
412
467
|
},
|
|
413
468
|
async destroy(reason = 'component-unmount') {
|
|
469
|
+
requestScope.requestController.createVersion();
|
|
414
470
|
await destroyCurrent(reason);
|
|
415
471
|
documentActions.destroyDocumentFeatures();
|
|
416
472
|
zoomController.destroy();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@file-viewer/core",
|
|
3
|
-
"version": "2.1.
|
|
3
|
+
"version": "2.1.17",
|
|
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",
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
},
|
|
36
36
|
"funding": {
|
|
37
37
|
"type": "individual",
|
|
38
|
-
"url": "https://dev.flyfish.group/
|
|
38
|
+
"url": "https://dev.flyfish.group/donate?source=npm"
|
|
39
39
|
},
|
|
40
40
|
"homepage": "https://doc.file-viewer.app/",
|
|
41
41
|
"main": "./dist/index.js",
|