@file-viewer/core 3.1.1 → 3.2.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.
Files changed (104) hide show
  1. package/README.en.md +3 -121
  2. package/README.md +3 -126
  3. package/dist/assets.d.ts +2 -2
  4. package/dist/assets.js +1 -5
  5. package/dist/browser/controller.d.ts +1 -2
  6. package/dist/browser/controller.js +2 -34
  7. package/dist/browser.d.ts +2 -2
  8. package/dist/browser.js +2 -2
  9. package/dist/config/options.d.ts +1 -1
  10. package/dist/contracts/types.d.ts +30 -416
  11. package/dist/contracts/xml.d.ts +48 -0
  12. package/dist/contracts/xml.js +1 -0
  13. package/dist/export.d.ts +3 -10
  14. package/dist/export.js +2 -9
  15. package/dist/exportDocument.d.ts +1 -12
  16. package/dist/exportDocument.js +7 -31
  17. package/dist/features/document/dom/anchors.d.ts +1 -1
  18. package/dist/features/document/dom/index.d.ts +5 -5
  19. package/dist/features/document/dom/index.js +3 -3
  20. package/dist/features/document/dom/providers.d.ts +1 -1
  21. package/dist/features/document/events.d.ts +2 -2
  22. package/dist/features/document/events.js +3 -3
  23. package/dist/features/document/fit.d.ts +1 -1
  24. package/dist/features/document/fit.js +1 -1
  25. package/dist/features/document/model.d.ts +1 -1
  26. package/dist/features/document/search.d.ts +1 -1
  27. package/dist/features/document/search.js +2 -2
  28. package/dist/features/document/viewState.d.ts +1 -1
  29. package/dist/features/document/viewState.js +2 -2
  30. package/dist/features/document/zoom.d.ts +3 -2
  31. package/dist/features/document/zoom.js +19 -3
  32. package/dist/features/document/zoomGestures.d.ts +11 -0
  33. package/dist/features/document/zoomGestures.js +111 -0
  34. package/dist/features/printMask.d.ts +1 -1
  35. package/dist/features/printMaskDesigner.d.ts +2 -6
  36. package/dist/features/printMaskDesigner.js +2 -11
  37. package/dist/features/printMaskLoader.d.ts +1 -7
  38. package/dist/features/printMaskLoader.js +1 -7
  39. package/dist/features/watermark.d.ts +1 -1
  40. package/dist/headless.d.ts +29 -29
  41. package/dist/headless.js +16 -21
  42. package/dist/i18n/messages.d.ts +1 -1
  43. package/dist/i18n/messages.de.d.ts +1 -5
  44. package/dist/i18n/messages.de.js +0 -4
  45. package/dist/i18n/messages.ja.d.ts +1 -6
  46. package/dist/i18n/messages.ja.js +0 -5
  47. package/dist/i18n/messages.js +2 -2
  48. package/dist/index.d.ts +74 -73
  49. package/dist/index.js +37 -37
  50. package/dist/lifecycle/facade.d.ts +4 -4
  51. package/dist/lifecycle/facade.js +2 -2
  52. package/dist/lifecycle/operations.d.ts +4 -4
  53. package/dist/lifecycle/operations.js +4 -9
  54. package/dist/output/canvasImage.d.ts +1 -2
  55. package/dist/output/canvasImage.js +1 -4
  56. package/dist/output/export.d.ts +2 -4
  57. package/dist/output/export.js +133 -81
  58. package/dist/output/printLayout.d.ts +2 -5
  59. package/dist/output/printLayout.js +37 -9
  60. package/dist/output/snapshotDownload.d.ts +1 -2
  61. package/dist/output/snapshotDownload.js +2 -3
  62. package/dist/platform/assets.d.ts +9 -16
  63. package/dist/platform/assets.js +60 -17
  64. package/dist/platform/copiedAssets.d.ts +0 -1
  65. package/dist/platform/copiedAssets.js +1 -2
  66. package/dist/presentation/state.d.ts +1 -1
  67. package/dist/presentation/state.js +3 -3
  68. package/dist/print-mask.d.ts +2 -2
  69. package/dist/print-mask.js +1 -1
  70. package/dist/registry/capabilities.d.ts +3 -16
  71. package/dist/registry/capabilities.js +2 -15
  72. package/dist/registry/formats.d.ts +5 -5
  73. package/dist/registry/formats.generated.d.ts +26 -8
  74. package/dist/registry/formats.generated.js +36 -4
  75. package/dist/registry/formats.js +2 -2
  76. package/dist/registry/registry.d.ts +6 -15
  77. package/dist/registry/registry.js +24 -10
  78. package/dist/renderers/image.d.ts +1 -1
  79. package/dist/renderers/image.js +26 -5
  80. package/dist/renderers/index.d.ts +30 -11
  81. package/dist/renderers/index.js +5 -11
  82. package/dist/rendering/dispatcher.d.ts +1 -6
  83. package/dist/rendering/dispatcher.js +3 -3
  84. package/dist/rendering/handler.d.ts +10 -15
  85. package/dist/rendering/handler.js +20 -27
  86. package/dist/security/svgResources.d.ts +0 -10
  87. package/dist/security/svgResources.js +2 -11
  88. package/dist/source/index.d.ts +3 -3
  89. package/dist/source/index.js +1 -1
  90. package/dist/source/loading.d.ts +56 -15
  91. package/dist/source/loading.js +177 -87
  92. package/dist/source/precheck.d.ts +1 -13
  93. package/dist/source/precheck.js +2 -9
  94. package/dist/source/textEncoding.d.ts +6 -3
  95. package/dist/source/textEncoding.js +58 -8
  96. package/dist/viewer/createViewer.d.ts +1 -1
  97. package/dist/viewer/createViewer.js +103 -33
  98. package/dist/viewer/loading.d.ts +2 -6
  99. package/dist/viewer/loading.js +1 -9
  100. package/dist/viewer/operations.d.ts +3 -3
  101. package/dist/viewer/operations.js +6 -14
  102. package/dist/viewer/state.d.ts +2 -6
  103. package/dist/viewer/state.js +3 -8
  104. package/package.json +127 -19
@@ -1,17 +1,12 @@
1
- // Rendering orchestration layer.
2
- //
3
- // This module adapts registry entries into disposable renderer sessions. It is
4
- // the only place that should bridge raw buffers, DOM targets, render contexts,
5
- // export adapters, and readiness state.
6
- import { DEFAULT_RENDERER_DEFINITIONS } from '../registry/formats.js';
7
- import { waitForFileViewerNextPaint } from '../output/export.js';
8
- import { createFileViewerRendererDispatcher } from './dispatcher.js';
9
- import { resolveFileViewerRendererRedirectId } from './dispatcher.js';
10
- import { createRendererRegistry } from '../registry/registry.js';
11
- import { getExtension, normalizeFileExtension } from '../source/index.js';
12
- import { applyFileViewerRenderReadinessState, } from '../source/loading.js';
13
- import { findFileViewerViewStateProvider } from '../features/document/dom/index.js';
14
- import { registerFileViewerGenericViewStateProvider } from '../features/document/viewState.js';
1
+ import { DEFAULT_RENDERER_DEFINITIONS } from "../registry/formats.js";
2
+ import { waitForFileViewerNextPaint } from "../output/export.js";
3
+ import { createFileViewerRendererDispatcher } from "./dispatcher.js";
4
+ import { resolveFileViewerRendererRedirectId } from "./dispatcher.js";
5
+ import { createRendererRegistry } from "../registry/registry.js";
6
+ import { getExtension, normalizeFileExtension } from "../source/index.js";
7
+ import { applyFileViewerRenderReadinessState, } from "../source/loading.js";
8
+ import { findFileViewerViewStateProvider } from "../features/document/dom/index.js";
9
+ import { registerFileViewerGenericViewStateProvider } from "../features/document/viewState.js";
15
10
  export const FILE_VIEWER_RENDER_SESSION_DISPOSE_ERROR_MESSAGE = '预览内容卸载失败';
16
11
  export const DEFAULT_FILE_VIEWER_RENDER_TARGET_CLASS = 'file-render';
17
12
  export const FILE_VIEWER_RENDER_SURFACE_BACKGROUND_PROPERTY = '--file-viewer-render-surface-background';
@@ -24,11 +19,6 @@ export const normalizeFileViewerRenderSurfaceBackground = (value) => {
24
19
  const normalized = value.trim();
25
20
  return normalized && normalized.toLowerCase() !== 'auto' ? normalized : null;
26
21
  };
27
- /**
28
- * Keeps the public UI option and the renderer-facing CSS custom property in
29
- * sync. Custom properties inherit through Shadow DOM, so setting this on the
30
- * render host covers both scoped and shadow-isolated renderer targets.
31
- */
32
22
  export const syncFileViewerRenderSurfaceBackground = (target, options) => {
33
23
  var _a;
34
24
  if (!target) {
@@ -161,8 +151,6 @@ export const appendFileViewerStyle = (target, css, options = {}) => {
161
151
  const shadowRoot = getFileViewerShadowRootForNode(target);
162
152
  const StyleSheet = shadowRoot ? getConstructableStyleSheet(shadowRoot) : null;
163
153
  if (options.adoptedStyleSheet && shadowRoot && StyleSheet) {
164
- // Use the target document's constructor. A stylesheet constructed in the
165
- // parent window cannot be adopted by a ShadowRoot owned by an iframe.
166
154
  const sheet = new StyleSheet();
167
155
  sheet.replaceSync(css);
168
156
  shadowRoot.adoptedStyleSheets = [...shadowRoot.adoptedStyleSheets, sheet];
@@ -348,7 +336,7 @@ export const runFileViewerRenderSurfaceClear = ({ reason = 'replace', surfaceSta
348
336
  session,
349
337
  };
350
338
  };
351
- export const runFileViewerRenderSurfaceMount = async ({ buffer, file, version, sourceUrl, streamUrl, getContainer, surfaceState, readinessState, isCurrent, clearRenderedContent, render, waitForContainer, waitForPaint = waitForFileViewerNextPaint, disposeSession = disposeFileViewerRendererSession, onStartZoomObserver, onStartFitObserver, onStartViewStateObserver, onApplyInitialFit, onRefreshDocumentIndex, onRefreshZoomProvider, onRefreshViewStateProvider, }) => {
339
+ export const runFileViewerRenderSurfaceMount = async ({ buffer, file, version, sourceUrl, streamUrl, signal, typeOverride, getContainer, surfaceState, readinessState, isCurrent, clearRenderedContent, render, waitForContainer, waitForPaint = waitForFileViewerNextPaint, disposeSession = disposeFileViewerRendererSession, onStartZoomObserver, onStartFitObserver, onStartViewStateObserver, onApplyInitialFit, onRefreshDocumentIndex, onRefreshZoomProvider, onRefreshViewStateProvider, }) => {
352
340
  if (!getContainer()) {
353
341
  await (waitForContainer === null || waitForContainer === void 0 ? void 0 : waitForContainer());
354
342
  }
@@ -380,11 +368,12 @@ export const runFileViewerRenderSurfaceMount = async ({ buffer, file, version, s
380
368
  buffer,
381
369
  file,
382
370
  version,
383
- type: getExtension(file.name),
371
+ type: typeOverride || getExtension(file.name),
384
372
  target,
385
373
  filename: file.name,
386
374
  sourceUrl,
387
375
  streamUrl,
376
+ signal,
388
377
  onProgressiveRender,
389
378
  registerExportAdapter,
390
379
  surfaceState,
@@ -446,13 +435,15 @@ export const createFileViewerRenderSurfaceActionHandlers = ({ getContainer, surf
446
435
  onClearViewStateProvider,
447
436
  });
448
437
  };
449
- const mountRenderedContent = async (buffer, file, version, sourceUrl, streamUrl) => {
438
+ const mountRenderedContent = async (buffer, file, version, sourceUrl, streamUrl, signal, typeOverride) => {
450
439
  return await runFileViewerRenderSurfaceMount({
451
440
  buffer,
452
441
  file,
453
442
  version,
454
443
  sourceUrl,
455
444
  streamUrl,
445
+ signal,
446
+ typeOverride,
456
447
  getContainer,
457
448
  surfaceState,
458
449
  readinessState,
@@ -482,6 +473,7 @@ export const buildFileRenderContextFromLoadContext = ({ source, surface, options
482
473
  filename: source.filename,
483
474
  url: source.url,
484
475
  streamUrl: source.url,
476
+ sourceFile: source.file,
485
477
  signal,
486
478
  options,
487
479
  surface,
@@ -525,15 +517,16 @@ export const renderFileViewerHandler = async ({ dispatcher, buffer, target, type
525
517
  return await redirectedHandler(buffer, target, redirectedType, context);
526
518
  }
527
519
  };
528
- export const createFileRenderHandlerLoader = ({ handler, rendererId, getTarget = context => context.surface.container, createContext = buildFileRenderContextFromLoadContext, destroy, }) => {
520
+ export const createFileRenderHandlerLoader = ({ handler, rendererId, allowUrlSource = false, getTarget = context => context.surface.container, createContext = buildFileRenderContextFromLoadContext, destroy, }) => {
529
521
  return async (context) => {
530
522
  const { source } = context;
531
- if (!source.buffer) {
523
+ if (!source.buffer && !(allowUrlSource && (source.url || source.file))) {
532
524
  throw new Error('FileRenderHandler renderer requires an ArrayBuffer source.');
533
525
  }
526
+ const buffer = source.buffer || new ArrayBuffer(0);
534
527
  const target = getTarget(context);
535
528
  const renderContext = createContext(context);
536
- const rendered = await handler(source.buffer, target, source.extension, renderContext);
529
+ const rendered = await handler(buffer, target, source.extension, renderContext);
537
530
  const existingProvider = findFileViewerViewStateProvider(target);
538
531
  const genericViewStateProvider = existingProvider
539
532
  ? null
@@ -1,13 +1,3 @@
1
- /**
2
- * Keep ordinary SVG styles while preventing imports and resource requests.
3
- * Obfuscated URL tokens fail closed instead of depending on parser quirks.
4
- */
5
1
  export declare const sanitizeFileViewerSvgCss: (value: string) => string;
6
- /** Remove executable attributes and every SVG resource URL that can load data remotely. */
7
2
  export declare const sanitizeFileViewerSvgResources: (root: ParentNode) => void;
8
- /**
9
- * Mermaid 11 resolves image-node URLs with `new Image()` while rendering,
10
- * before its SVG can be sanitized. Reject image metadata and explicit remote
11
- * URLs before calling Mermaid so an untrusted diagram cannot initiate I/O.
12
- */
13
3
  export declare const assertFileViewerMermaidSourceHasNoExternalResources: (source: string) => void;
@@ -44,10 +44,6 @@ const isSafeSvgCssUrl = (value) => {
44
44
  /^blob:/i.test(normalized) ||
45
45
  SAFE_EMBEDDED_IMAGE_DATA_URL.test(normalized);
46
46
  };
47
- /**
48
- * Keep ordinary SVG styles while preventing imports and resource requests.
49
- * Obfuscated URL tokens fail closed instead of depending on parser quirks.
50
- */
51
47
  export const sanitizeFileViewerSvgCss = (value) => {
52
48
  const normalizedCharacters = [];
53
49
  for (const character of value) {
@@ -93,7 +89,6 @@ export const sanitizeFileViewerSvgCss = (value) => {
93
89
  chunks.push(normalized.slice(segmentStart));
94
90
  return chunks.join('');
95
91
  };
96
- /** Remove executable attributes and every SVG resource URL that can load data remotely. */
97
92
  export const sanitizeFileViewerSvgResources = (root) => {
98
93
  root.querySelectorAll('*').forEach(element => {
99
94
  for (const attribute of Array.from(element.attributes)) {
@@ -160,18 +155,14 @@ const canonicalizeMermaidSourceForResourceScan = (source) => {
160
155
  }
161
156
  return output;
162
157
  };
163
- /**
164
- * Mermaid 11 resolves image-node URLs with `new Image()` while rendering,
165
- * before its SVG can be sanitized. Reject image metadata and explicit remote
166
- * URLs before calling Mermaid so an untrusted diagram cannot initiate I/O.
167
- */
168
158
  export const assertFileViewerMermaidSourceHasNoExternalResources = (source) => {
169
159
  const normalized = canonicalizeMermaidSourceForResourceScan(String(source || ''));
170
160
  const compact = normalized.replace(/[\t\r\n ]+/g, '');
171
161
  const hasImageMetadata = /(?:^|[,{])\s*(?:img|["']img["'])\s*:/im.test(normalized);
162
+ const hasLoadingElement = /<\s*(?:img|image|iframe|object|embed|video|audio|source|link|script|style)\b/i.test(normalized);
172
163
  const hasRemoteUrl = /(?:https?|ftp):\/\//i.test(compact) ||
173
164
  /(?:^|[\s"'(=:,])(?:\/\/|\\\\)[A-Za-z0-9]/m.test(normalized);
174
- if (hasImageMetadata || hasRemoteUrl) {
165
+ if (hasImageMetadata || hasLoadingElement || hasRemoteUrl) {
175
166
  throw new Error('Mermaid diagrams may not load external image resources.');
176
167
  }
177
168
  };
@@ -1,6 +1,6 @@
1
- import type { FileViewerFileRef, FileViewerSource, NormalizedFileViewerSource } from '../contracts/types';
2
- export { createFileViewerTextDecoder, decodeFileViewerTextBuffer, isValidFileViewerUtf8, resolveFileViewerTextEncoding, } from './textEncoding';
3
- export type { DecodedFileViewerText, FileViewerTextEncoding, ResolvedFileViewerTextEncoding, ResolvedFileViewerTextSource, } from './textEncoding';
1
+ import type { FileViewerFileRef, FileViewerSource, NormalizedFileViewerSource } from "../contracts/types.js";
2
+ export { DEFAULT_FILE_VIEWER_TEXT_FALLBACK_ENCODING, createFileViewerTextDecoder, decodeFileViewerTextBuffer, isSingleByteFileViewerTextEncoding, isValidFileViewerUtf8, resolveFileViewerTextEncoding, } from "./textEncoding.js";
3
+ export type { DecodedFileViewerText, FileViewerSingleByteTextEncoding, FileViewerTextEncoding, ResolvedFileViewerTextEncoding, ResolvedFileViewerTextSource, } from "./textEncoding.js";
4
4
  export type FileViewerReadResult = string | ArrayBuffer | undefined | null;
5
5
  export declare const DEFAULT_FILE_VIEWER_SOURCE_FILENAME = "preview.bin";
6
6
  export declare const normalizeFileExtension: (extension: string) => string;
@@ -1,4 +1,4 @@
1
- export { createFileViewerTextDecoder, decodeFileViewerTextBuffer, isValidFileViewerUtf8, resolveFileViewerTextEncoding, } from './textEncoding.js';
1
+ export { DEFAULT_FILE_VIEWER_TEXT_FALLBACK_ENCODING, createFileViewerTextDecoder, decodeFileViewerTextBuffer, isSingleByteFileViewerTextEncoding, isValidFileViewerUtf8, resolveFileViewerTextEncoding, } from "./textEncoding.js";
2
2
  export const DEFAULT_FILE_VIEWER_SOURCE_FILENAME = 'preview.bin';
3
3
  export const normalizeFileExtension = (extension) => {
4
4
  return extension.trim().replace(/^\./, '').toLowerCase();
@@ -1,7 +1,7 @@
1
- import type { FileViewerFileRef, FileViewerLifecycleContext, FileViewerPdfOptions } from '../contracts/types';
2
- import { type FileViewerLifecycleStateController } from '../lifecycle/operations';
3
- import { type FileViewerErrorMessageFormatter } from '../viewer/state';
4
- import type { FileViewerI18nInput } from '../i18n/messages';
1
+ import type { FileViewerFileRef, FileViewerLifecycleContext, FileViewerPdfOptions } from "../contracts/types.js";
2
+ import { type FileViewerLifecycleStateController } from "../lifecycle/operations.js";
3
+ import { type FileViewerErrorMessageFormatter } from "../viewer/state.js";
4
+ import type { FileViewerI18nInput } from "../i18n/messages.js";
5
5
  export declare const DEFAULT_PDF_RANGE_CHUNK_SIZE: number;
6
6
  export declare const DEFAULT_FILE_VIEWER_STREAMING_PDF_FILENAME = "preview.pdf";
7
7
  export declare const FILE_VIEWER_REMOTE_MISSING_DATA_ERROR_MESSAGE = "\u6587\u4EF6\u4E0B\u8F7D\u5931\u8D25";
@@ -131,6 +131,8 @@ export interface CreateFileViewerLoadStartStateInput {
131
131
  sourceUrl?: string | null;
132
132
  bufferSize?: number;
133
133
  loadingMessage?: string;
134
+ signal?: AbortSignal;
135
+ typeOverride?: string;
134
136
  i18n?: FileViewerI18nInput;
135
137
  timestamp?: number;
136
138
  }
@@ -172,12 +174,13 @@ export interface CommitFileViewerRenderCompleteStateInput<Session = unknown> {
172
174
  export interface RunFileViewerReadAndRenderFileInput<Session = unknown> {
173
175
  file: File;
174
176
  version: number;
177
+ signal?: AbortSignal;
175
178
  source?: FileViewerLifecycleContext['source'];
176
179
  sourceUrl?: string;
177
180
  fallbackFilename?: string;
178
181
  previewTarget: MutableFileViewerReadPreviewState & MutableFileViewerRenderReadinessState;
179
182
  isCurrent: (version: number) => boolean;
180
- mountRenderedContent: (buffer: ArrayBuffer, file: File, version: number, sourceUrl?: string) => Promise<Session | undefined>;
183
+ mountRenderedContent: (buffer: ArrayBuffer, file: File, version: number, sourceUrl?: string, streamUrl?: string, signal?: AbortSignal, typeOverride?: string) => Promise<Session | undefined>;
181
184
  destroyRenderSession?: (session?: Session | null) => void;
182
185
  buildRenderCompleteState: (input: {
183
186
  version: number;
@@ -201,13 +204,14 @@ export type FileViewerReadAndRenderFileState<Session = unknown> = {
201
204
  readonly session: Session | undefined;
202
205
  readonly complete: FileViewerRenderCompleteState;
203
206
  };
207
+ export type FileViewerStreamSourceDecision = boolean | string;
204
208
  export interface RunFileViewerStreamingPdfPreviewInput<Session = unknown> {
205
209
  url: string;
206
210
  version: number;
207
211
  filename?: string;
208
212
  previewTarget: MutableFileViewerPreviewSourceUrlState & MutableFileViewerRenderReadinessState;
209
213
  isCurrent: (version: number) => boolean;
210
- mountRenderedContent: (buffer: ArrayBuffer, file: File, version: number, sourceUrl?: string, streamUrl?: string) => Promise<Session | undefined>;
214
+ mountRenderedContent: (buffer: ArrayBuffer, file: File, version: number, sourceUrl?: string, streamUrl?: string, signal?: AbortSignal, typeOverride?: string) => Promise<Session | undefined>;
211
215
  destroyRenderSession?: (session?: Session | null) => void;
212
216
  buildRenderCompleteState: (input: {
213
217
  version: number;
@@ -215,6 +219,8 @@ export interface RunFileViewerStreamingPdfPreviewInput<Session = unknown> {
215
219
  sourceUrl?: string | null;
216
220
  }) => FileViewerRenderCompleteState;
217
221
  loadingMessage?: string;
222
+ signal?: AbortSignal;
223
+ typeOverride?: string;
218
224
  i18n?: FileViewerI18nInput;
219
225
  onStartLoading?: (message: string) => void;
220
226
  onSession?: (session: Session | null) => void;
@@ -248,9 +254,16 @@ export interface RunFileViewerLocalFilePreviewInput<Session = unknown> {
248
254
  version: number;
249
255
  currentFilename?: string;
250
256
  fallbackFilename?: string;
257
+ shouldStreamLocalFile?: (input: {
258
+ file: File;
259
+ filename: string;
260
+ extension: string;
261
+ signal?: AbortSignal;
262
+ }) => FileViewerStreamSourceDecision | Promise<FileViewerStreamSourceDecision>;
263
+ requestController?: Pick<FileViewerRequestController, 'createAbortController' | 'clearAbortController'>;
251
264
  previewTarget: MutableFileViewerPreviewState;
252
265
  isCurrent: (version: number) => boolean;
253
- mountRenderedContent: (buffer: ArrayBuffer, file: File, version: number, sourceUrl?: string) => Promise<Session | undefined>;
266
+ mountRenderedContent: (buffer: ArrayBuffer, file: File, version: number, sourceUrl?: string, streamUrl?: string, signal?: AbortSignal, typeOverride?: string) => Promise<Session | undefined>;
254
267
  destroyRenderSession?: (session?: Session | null) => void;
255
268
  buildLoadStartState: (input: {
256
269
  version: number;
@@ -304,11 +317,18 @@ export interface RunFileViewerRemoteFilePreviewInput<Session = unknown> {
304
317
  version: number;
305
318
  pageHref?: string;
306
319
  streaming?: FileViewerPdfOptions['streaming'];
320
+ shouldStreamRemoteUrl?: (input: {
321
+ url: string;
322
+ filename: string;
323
+ extension: string;
324
+ pageHref?: string;
325
+ signal?: AbortSignal;
326
+ }) => FileViewerStreamSourceDecision | Promise<FileViewerStreamSourceDecision>;
307
327
  previewTarget: MutableFileViewerPreviewState;
308
328
  requestController: Pick<FileViewerRequestController, 'createAbortController' | 'clearAbortController'>;
309
329
  isCurrent: (version: number) => boolean;
310
330
  downloadFile: (input: FileViewerRemoteFileDownloadInput) => Promise<FileViewerFileRef | null | undefined>;
311
- mountRenderedContent: (buffer: ArrayBuffer, file: File, version: number, sourceUrl?: string, streamUrl?: string) => Promise<Session | undefined>;
331
+ mountRenderedContent: (buffer: ArrayBuffer, file: File, version: number, sourceUrl?: string, streamUrl?: string, signal?: AbortSignal, typeOverride?: string) => Promise<Session | undefined>;
312
332
  destroyRenderSession?: (session?: Session | null) => void;
313
333
  buildLoadStartState: (input: {
314
334
  version: number;
@@ -451,13 +471,26 @@ export interface CreateFileViewerSourceLoadingActionHandlersInput<Session = unkn
451
471
  getFile: () => FileViewerFileRef | null | undefined;
452
472
  getUrl: () => string | null | undefined;
453
473
  getCurrentFilename?: () => string | undefined;
474
+ shouldStreamLocalFile?: (input: {
475
+ file: File;
476
+ filename: string;
477
+ extension: string;
478
+ signal?: AbortSignal;
479
+ }) => FileViewerStreamSourceDecision | Promise<FileViewerStreamSourceDecision>;
454
480
  getPdfStreaming?: () => FileViewerPdfOptions['streaming'] | undefined;
481
+ shouldStreamRemoteUrl?: (input: {
482
+ url: string;
483
+ filename: string;
484
+ extension: string;
485
+ pageHref?: string;
486
+ signal?: AbortSignal;
487
+ }) => FileViewerStreamSourceDecision | Promise<FileViewerStreamSourceDecision>;
455
488
  getI18n?: () => FileViewerI18nInput;
456
489
  getPageHref?: () => string | undefined;
457
490
  previewTarget: MutableFileViewerPreviewState;
458
491
  requestController: FileViewerRequestController;
459
492
  downloadFile: (input: FileViewerRemoteFileDownloadInput) => Promise<FileViewerFileRef | null | undefined>;
460
- mountRenderedContent: (buffer: ArrayBuffer, file: File, version: number, sourceUrl?: string, streamUrl?: string) => Promise<Session | undefined>;
493
+ mountRenderedContent: (buffer: ArrayBuffer, file: File, version: number, sourceUrl?: string, streamUrl?: string, signal?: AbortSignal, typeOverride?: string) => Promise<Session | undefined>;
461
494
  destroyRenderSession?: (session?: Session | null) => void;
462
495
  buildLoadStartState: (input: {
463
496
  version: number;
@@ -514,11 +547,11 @@ export declare const applyFileViewerPreviewSourceUrlState: <Target extends Mutab
514
547
  export declare const applyFileViewerPreviewFilenameState: <Target extends MutableFileViewerPreviewFilenameState>(target: Target, filename?: string, fallbackFilename?: string) => Target;
515
548
  export declare const applyFileViewerRenderReadinessState: <Target extends MutableFileViewerRenderReadinessState>(target: Target, state: Partial<FileViewerRenderReadinessState>) => Target;
516
549
  export declare const commitFileViewerRenderCompleteState: <Session = unknown>({ version, session, buildState, readinessTarget, onSession, onActiveDocumentContext, onLifecycle, onClearLoadStarted, }: CommitFileViewerRenderCompleteStateInput<Session>) => FileViewerRenderCompleteState;
517
- export declare const runFileViewerReadAndRenderFile: <Session = unknown>({ file, version, sourceUrl, source, fallbackFilename, previewTarget, isCurrent, mountRenderedContent, destroyRenderSession, buildRenderCompleteState, onSession, onActiveDocumentContext, onLifecycle, onClearLoadStarted, }: RunFileViewerReadAndRenderFileInput<Session>) => Promise<FileViewerReadAndRenderFileState<Session>>;
518
- export declare const runFileViewerStreamingPdfPreview: <Session = unknown>({ url, version, filename, previewTarget, isCurrent, mountRenderedContent, destroyRenderSession, buildRenderCompleteState, loadingMessage, i18n, onStartLoading, onSession, onActiveDocumentContext, onLifecycle, onClearLoadStarted, onStopLoading, onError, }: RunFileViewerStreamingPdfPreviewInput<Session>) => Promise<FileViewerStreamingPdfPreviewState<Session>>;
519
- export declare const runFileViewerLocalFilePreview: <Session = unknown>({ source, version, currentFilename, fallbackFilename, previewTarget, isCurrent, mountRenderedContent, destroyRenderSession, buildLoadStartState, buildRenderCompleteState, onMarkLoadStarted, onStartLoading, onSession, onActiveDocumentContext, onLifecycle, onClearLoadStarted, onStopLoading, onError, }: RunFileViewerLocalFilePreviewInput<Session>) => Promise<FileViewerLocalFilePreviewState<Session>>;
520
- export declare const runFileViewerRemoteFilePreview: <Session = unknown>({ url, version, pageHref, streaming, previewTarget, requestController, isCurrent, downloadFile, mountRenderedContent, destroyRenderSession, buildLoadStartState, buildRenderCompleteState, i18n, onMarkLoadStarted, onStartLoading, onSetLoadingMessage, onSession, onActiveDocumentContext, onLifecycle, onClearLoadStarted, onStopLoading, onMissingData, onError, }: RunFileViewerRemoteFilePreviewInput<Session>) => Promise<FileViewerRemoteFilePreviewState<Session>>;
521
- export declare const createFileViewerSourceLoadingActionHandlers: <Session = unknown>({ getFile, getUrl, getCurrentFilename, getPdfStreaming, 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>;
550
+ 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
+ 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
+ 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>;
522
555
  export declare const finalizeFileViewerPreviewLoadState: ({ version, isCurrent, onClearLoadStarted, onStopLoading, }: FinalizeFileViewerPreviewLoadStateInput) => void;
523
556
  export declare const resolveFileViewerLoadStartMessage: (source: FileViewerLifecycleContext["source"], i18n?: FileViewerI18nInput) => string;
524
557
  export declare const commitFileViewerLoadStartState: ({ version, filename, fallbackFilename, filenameTarget, buildState, onMarkLoadStarted, onLifecycle, onStartLoading, }: CommitFileViewerLoadStartStateInput) => FileViewerLoadStartState;
@@ -538,6 +571,8 @@ export interface FileViewerRemoteSourcePlan {
538
571
  readonly filename: string;
539
572
  readonly extension: string;
540
573
  readonly streamPdf: boolean;
574
+ readonly streamRenderer: boolean;
575
+ readonly streamType?: string;
541
576
  }
542
577
  export interface CommitFileViewerRemoteDownloadStateInput {
543
578
  version: number;
@@ -566,11 +601,17 @@ export interface FileViewerLocationLike {
566
601
  href?: string | null;
567
602
  }
568
603
  export declare const resolveFileViewerPageHref: (locationLike?: FileViewerLocationLike) => string | undefined;
569
- export declare const resolveFileViewerRemoteSourcePlan: ({ filename, fallbackFilename, pageHref, streaming, url, }: {
604
+ export declare const resolveFileViewerRemoteSourcePlan: ({ filename, fallbackFilename, pageHref, streaming, shouldStreamRemoteUrl, url, }: {
570
605
  filename?: string;
571
606
  fallbackFilename?: string;
572
607
  pageHref?: string;
573
608
  streaming?: FileViewerPdfOptions["streaming"];
609
+ shouldStreamRemoteUrl?: (input: {
610
+ url: string;
611
+ filename: string;
612
+ extension: string;
613
+ pageHref?: string;
614
+ }) => FileViewerStreamSourceDecision;
574
615
  url: string;
575
616
  }) => FileViewerRemoteSourcePlan;
576
617
  export declare const commitFileViewerRemoteDownloadState: ({ version, data, currentFilename, fallbackFilename, isCurrent, i18n, onMissingData, onSetLoadingMessage, }: CommitFileViewerRemoteDownloadStateInput) => FileViewerRemoteDownloadState;