@file-viewer/vue3 2.0.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 (37) hide show
  1. package/LICENSE +160 -0
  2. package/README.en.md +160 -0
  3. package/README.md +162 -0
  4. package/dist/file-viewer3.css +7 -0
  5. package/dist/index.mjs +1 -0
  6. package/dist/src/package/browser/assets.d.ts +5 -0
  7. package/dist/src/package/browser/documentProviders.d.ts +13 -0
  8. package/dist/src/package/browser/printLayout.d.ts +19 -0
  9. package/dist/src/package/common/type.d.ts +207 -0
  10. package/dist/src/package/components/FileViewer/FileViewer.vue.d.ts +26 -0
  11. package/dist/src/package/components/FileViewer/exportDocumentTemplate.d.ts +2 -0
  12. package/dist/src/package/components/FileViewer/hooks/useLoading.d.ts +33 -0
  13. package/dist/src/package/components/FileViewer/hooks/useViewerDocumentFeatures.d.ts +29 -0
  14. package/dist/src/package/components/FileViewer/hooks/useViewerExport.d.ts +17 -0
  15. package/dist/src/package/components/FileViewer/hooks/useViewerLifecycle.d.ts +25 -0
  16. package/dist/src/package/components/FileViewer/hooks/useViewerPresentation.d.ts +28 -0
  17. package/dist/src/package/components/FileViewer/hooks/useViewerPreviewLifecycle.d.ts +17 -0
  18. package/dist/src/package/components/FileViewer/hooks/useViewerPublicApi.d.ts +13 -0
  19. package/dist/src/package/components/FileViewer/hooks/useViewerRenderSurface.d.ts +33 -0
  20. package/dist/src/package/components/FileViewer/hooks/useViewerSourceLoading.d.ts +57 -0
  21. package/dist/src/package/components/FileViewer/hooks/useViewerToolbar.d.ts +33 -0
  22. package/dist/src/package/components/FileViewer/hooks/useViewerWatermark.d.ts +6 -0
  23. package/dist/src/package/components/FileViewer/hooks/useViewerZoom.d.ts +34 -0
  24. package/dist/src/package/components/FileViewer/index.d.ts +2 -0
  25. package/dist/src/package/components/FileViewer/rendererBridge.d.ts +9 -0
  26. package/dist/src/package/controller.d.ts +121 -0
  27. package/dist/src/package/index.d.ts +30 -0
  28. package/dist/src/package/native.d.ts +18 -0
  29. package/dist/src/package/vendors/nestedRender.d.ts +8 -0
  30. package/dist/src/package/vendors/renders.d.ts +8 -0
  31. package/dist/style.css +1 -0
  32. package/dist/vue3.css +2 -0
  33. package/dist/wasm/cad/dwfv-render.wasm +0 -0
  34. package/dist/wasm/cad/dwg-worker.js +24 -0
  35. package/dist/wasm/cad/libredwg-web.js +15 -0
  36. package/dist/wasm/cad/libredwg-web.wasm +0 -0
  37. package/package.json +74 -0
@@ -0,0 +1,57 @@
1
+ import { Ref } from 'vue';
2
+ import { FileViewerErrorMessageFormatter, FileViewerRequestController, FileViewerFileRef as FileRef, FileViewerLifecycleContext, FileViewerLoadStartState, FileViewerOptions, FileViewerRenderCompleteState } from '@file-viewer/core';
3
+ import { FileViewerVueRenderSession } from '../rendererBridge';
4
+ interface UseViewerSourceLoadingOptions {
5
+ getFile: () => FileRef | undefined;
6
+ getUrl: () => string | undefined;
7
+ getOptions: () => FileViewerOptions | undefined;
8
+ filename: Ref<string>;
9
+ currentFile: Ref<File | null>;
10
+ currentBuffer: Ref<ArrayBuffer | null>;
11
+ currentSourceUrl: Ref<string | null>;
12
+ renderedReady: Ref<boolean>;
13
+ progressiveReady: Ref<boolean>;
14
+ requestController: FileViewerRequestController;
15
+ clearRenderedContent: (reason?: FileViewerLifecycleContext['reason']) => void;
16
+ mountRenderedContent: (buffer: ArrayBuffer, file: File, version: number, sourceUrl?: string, streamUrl?: string) => Promise<FileViewerVueRenderSession | undefined>;
17
+ destroyRenderSession: (session?: FileViewerVueRenderSession | null) => void;
18
+ setActiveRenderSession: (session: FileViewerVueRenderSession | null) => void;
19
+ buildLoadStartState: (input: {
20
+ version: number;
21
+ source: FileViewerLifecycleContext['source'];
22
+ file?: File | null;
23
+ sourceUrl?: string | null;
24
+ }) => FileViewerLoadStartState;
25
+ buildRenderCompleteState: (input: {
26
+ version: number;
27
+ source: FileViewerLifecycleContext['source'];
28
+ file?: File | null;
29
+ sourceUrl?: string | null;
30
+ }) => FileViewerRenderCompleteState;
31
+ notifyLifecycle: (context: FileViewerLifecycleContext) => void;
32
+ setActiveDocumentContext: (context: FileViewerLifecycleContext) => void;
33
+ markLoadStarted: (version: number) => void;
34
+ clearLoadStarted: (version: number) => void;
35
+ startLoading: (message: string) => void;
36
+ setLoadingMessage: (message: string) => void;
37
+ stopLoading: () => void;
38
+ showError: (message: string) => void;
39
+ clearError: () => void;
40
+ resetLoading: () => void;
41
+ formatErrorMessage: FileViewerErrorMessageFormatter;
42
+ }
43
+ /**
44
+ * FileViewer 组件层的来源加载门面。
45
+ *
46
+ * 请求版本、取消错误、文件包装、PDF URL 流式判断等通用能力来自
47
+ * `@file-viewer/core`;这里只把 Vue 状态、加载态和渲染挂载回调串起来。
48
+ */
49
+ export declare const useViewerSourceLoading: ({ getFile, getUrl, getOptions, filename, currentFile, currentBuffer, currentSourceUrl, renderedReady, progressiveReady, requestController, clearRenderedContent, mountRenderedContent, destroyRenderSession, setActiveRenderSession, buildLoadStartState, buildRenderCompleteState, notifyLifecycle, setActiveDocumentContext, markLoadStarted, clearLoadStarted, startLoading, setLoadingMessage, stopLoading, showError, clearError, resetLoading, formatErrorMessage }: UseViewerSourceLoadingOptions) => {
50
+ cancelPreview: (reason?: FileViewerLifecycleContext["reason"]) => void;
51
+ refreshPreview: () => Promise<void>;
52
+ resetViewer: (reason?: FileViewerLifecycleContext["reason"]) => void;
53
+ isCurrentRequest: (version: number) => boolean;
54
+ previewLocalFile: (source: FileRef, version: number) => Promise<import('@file-viewer/core').FileViewerLocalFilePreviewState<FileViewerVueRenderSession>>;
55
+ previewRemoteFile: (url: string, version: number) => Promise<import('@file-viewer/core').FileViewerRemoteFilePreviewState<FileViewerVueRenderSession>>;
56
+ };
57
+ export {};
@@ -0,0 +1,33 @@
1
+ import { ComputedRef, Ref, ShallowRef } from 'vue';
2
+ import { FileRenderExportAdapter, FileViewerOperationAvailability, FileViewerOptions, FileViewerToolbarOptions, FileViewerToolbarPosition, FileViewerZoomState } from '@file-viewer/core';
3
+ interface UseViewerToolbarOptions {
4
+ activeExportAdapter: ShallowRef<FileRenderExportAdapter | null>;
5
+ currentBuffer: Ref<ArrayBuffer | null>;
6
+ currentExtend: ComputedRef<string>;
7
+ currentFile: Ref<File | null>;
8
+ currentSourceUrl: Ref<string | null>;
9
+ error: Ref<string>;
10
+ getOptions: () => FileViewerOptions | undefined;
11
+ getZoomState: () => FileViewerZoomState;
12
+ loading: Ref<boolean>;
13
+ normalizedToolbar: ComputedRef<FileViewerToolbarOptions>;
14
+ renderedReady: Ref<boolean>;
15
+ zoomState: FileViewerZoomState;
16
+ emitOperationAvailabilityChange: (availability: FileViewerOperationAvailability) => void;
17
+ emitZoomChange: (state: FileViewerZoomState) => void;
18
+ }
19
+ /**
20
+ * FileViewer 组件层的工具栏与能力状态门面。
21
+ *
22
+ * 按钮显隐、PDF 默认悬浮位置和能力矩阵由 `@file-viewer/core` 统一计算;
23
+ * 这里只负责把 Vue 响应式状态、组件事件和操作 API 串起来。
24
+ */
25
+ export declare const useViewerToolbar: ({ activeExportAdapter, currentBuffer, currentExtend, currentFile, currentSourceUrl, error, getOptions, getZoomState, loading, normalizedToolbar, renderedReady, zoomState, emitOperationAvailabilityChange, emitZoomChange }: UseViewerToolbarOptions) => {
26
+ operationAvailability: ComputedRef<FileViewerOperationAvailability>;
27
+ visibleToolbar: ComputedRef<FileViewerToolbarOptions>;
28
+ showToolbar: ComputedRef<boolean>;
29
+ toolbarPosition: ComputedRef<FileViewerToolbarPosition>;
30
+ toolbarDisabled: ComputedRef<boolean>;
31
+ zoomButtonDisabled: (action: keyof Pick<FileViewerZoomState, "canZoomIn" | "canZoomOut" | "canReset">) => boolean;
32
+ };
33
+ export {};
@@ -0,0 +1,6 @@
1
+ import { FileViewerWatermarkOptions } from '@file-viewer/core';
2
+ export declare const useViewerWatermark: (getWatermark: () => boolean | FileViewerWatermarkOptions | undefined) => {
3
+ normalizedWatermark: import('vue').ComputedRef<FileViewerWatermarkOptions | null>;
4
+ watermarkStyle: import('vue').ComputedRef<import('@file-viewer/core').FileViewerWatermarkStyle | undefined>;
5
+ watermarkInlineStyle: import('vue').ComputedRef<string>;
6
+ };
@@ -0,0 +1,34 @@
1
+ import { Ref } from 'vue';
2
+ import { FileViewerOperationType } from '@file-viewer/core';
3
+ interface UseFileViewerZoomOptions {
4
+ output: Ref<HTMLDivElement | null>;
5
+ enabled: () => boolean;
6
+ runBeforeOperation: (operation: FileViewerOperationType) => Promise<boolean>;
7
+ }
8
+ /**
9
+ * FileViewer 组件层的缩放门面。
10
+ *
11
+ * provider 注册、状态读取和 MutationObserver 调度由 core controller 负责;
12
+ * 这里只保留 Vue 响应式状态同步、操作前置钩子和组件 ref API。
13
+ */
14
+ export declare const useViewerZoom: ({ output, enabled, runBeforeOperation }: UseFileViewerZoomOptions) => {
15
+ hasZoomProvider(): boolean;
16
+ refreshZoomProvider(): import('@file-viewer/core').FileViewerZoomProvider | null;
17
+ startZoomObserver(): import('@file-viewer/core').FileViewerZoomState;
18
+ stopZoomObserver(): import('@file-viewer/core').FileViewerZoomState;
19
+ clearZoomProvider(): import('@file-viewer/core').FileViewerZoomState;
20
+ getZoomState(): import('@file-viewer/core').FileViewerZoomState;
21
+ zoomIn(): Promise<import('@file-viewer/core').FileViewerZoomState>;
22
+ zoomOut(): Promise<import('@file-viewer/core').FileViewerZoomState>;
23
+ resetZoom(): Promise<import('@file-viewer/core').FileViewerZoomState>;
24
+ zoomState: {
25
+ scale: number;
26
+ label: string;
27
+ canZoomIn: boolean;
28
+ canZoomOut: boolean;
29
+ canReset: boolean;
30
+ minScale?: number | undefined;
31
+ maxScale?: number | undefined;
32
+ };
33
+ };
34
+ export {};
@@ -0,0 +1,2 @@
1
+ import { default as FileViewer } from './FileViewer.vue';
2
+ export default FileViewer;
@@ -0,0 +1,9 @@
1
+ import { FileRenderContext, FileRenderHandlerRendererSession, FileViewerRenderedInstance as Rendered } from '@file-viewer/core';
2
+ export type FileViewerVueRenderSession = FileRenderHandlerRendererSession<Rendered | undefined>;
3
+ /**
4
+ * Bridges the Vue renderer registry into the framework-neutral core renderer session.
5
+ *
6
+ * The Vue component package owns only the async component loaders and DOM surface; source
7
+ * normalization, handler dispatch and session teardown stay in @file-viewer/core.
8
+ */
9
+ export declare function createVueRenderSession(buffer: ArrayBuffer, type: string, target: HTMLDivElement, context?: FileRenderContext): Promise<FileViewerVueRenderSession>;
@@ -0,0 +1,121 @@
1
+ import { FileViewerAiOptions, FileViewerArchiveOptions, FileViewerCadOptions, FileViewerDocxOptions, FileViewerDocumentAnchor, FileViewerDocumentChunk, FileViewerEvent, FileViewerEventHandler, FileViewerEventType, FileViewerFileRef, FileViewerInstance, FileViewerLifecycleContext, FileViewerOperationAvailability, FileViewerOperationContext, FileViewerOptions, FileViewerPdfOptions, FileViewerSpreadsheetOptions, FileViewerPublicApi, FileViewerSearchOptions, FileViewerSearchState, FileViewerThemeMode, FileViewerToolbarOptions, FileViewerToolbarPosition, FileViewerTypstOptions, FileViewerWatermarkOptions, FileViewerZoomState, RendererRegistry } from '@file-viewer/core';
2
+ export type FileRef = FileViewerFileRef;
3
+ export type ViewerWatermarkOptions = FileViewerWatermarkOptions;
4
+ export type ViewerToolbarPosition = FileViewerToolbarPosition;
5
+ export type ViewerToolbarOptions = FileViewerToolbarOptions;
6
+ export type ViewerArchiveOptions = FileViewerArchiveOptions;
7
+ export type ViewerPdfOptions = FileViewerPdfOptions;
8
+ export type ViewerSpreadsheetOptions = FileViewerSpreadsheetOptions;
9
+ export type ViewerDocxOptions = FileViewerDocxOptions;
10
+ export type ViewerTypstOptions = FileViewerTypstOptions;
11
+ export type ViewerCadOptions = FileViewerCadOptions;
12
+ export type ViewerSearchOptions = FileViewerSearchOptions;
13
+ export type ViewerAiOptions = FileViewerAiOptions;
14
+ export type ViewerThemeMode = FileViewerThemeMode;
15
+ export type ViewerOptions = FileViewerOptions;
16
+ export type ViewerEventType = FileViewerEventType;
17
+ export type ViewerEvent = FileViewerEvent;
18
+ export type ViewerEventHandler = FileViewerEventHandler;
19
+ export type ViewerLifecycleContext = FileViewerLifecycleContext;
20
+ export type ViewerOperationContext = FileViewerOperationContext;
21
+ export interface ViewerState {
22
+ loading: boolean;
23
+ ready: boolean;
24
+ error: unknown | null;
25
+ lastEvent: ViewerEvent | null;
26
+ lifecycle: ViewerLifecycleContext | null;
27
+ availability: FileViewerOperationAvailability | null;
28
+ search: FileViewerSearchState | null;
29
+ zoom: FileViewerZoomState | null;
30
+ location: FileViewerDocumentAnchor | null;
31
+ }
32
+ export type ViewerStateListener = (state: ViewerState, event?: ViewerEvent) => void;
33
+ export interface ViewerMountOptions {
34
+ url?: string;
35
+ file?: FileRef;
36
+ buffer?: ArrayBuffer;
37
+ name?: string;
38
+ filename?: string;
39
+ type?: string;
40
+ size?: number;
41
+ options?: ViewerOptions;
42
+ onEvent?: ViewerEventHandler;
43
+ onStateChange?: ViewerStateListener;
44
+ }
45
+ export interface ViewerSourceInput {
46
+ url?: string;
47
+ file?: FileRef;
48
+ buffer?: ArrayBuffer;
49
+ filename?: string;
50
+ name?: string;
51
+ type?: string;
52
+ size?: number;
53
+ }
54
+ export interface ViewerFetchInput {
55
+ url: string;
56
+ signal?: AbortSignal;
57
+ source: ViewerSourceInput;
58
+ }
59
+ export type ViewerFetchFile = (input: ViewerFetchInput) => Promise<FileRef | null | undefined>;
60
+ export interface ViewerCoreOptions {
61
+ registry?: RendererRegistry;
62
+ fetchFile?: ViewerFetchFile;
63
+ onError?: (error: unknown, source: ViewerSourceInput) => void;
64
+ }
65
+ export interface ViewerController {
66
+ readonly container: HTMLElement;
67
+ load(options: ViewerMountOptions): Promise<void>;
68
+ update(options?: ViewerMountOptions): Promise<void>;
69
+ reload(): Promise<void>;
70
+ destroy(): void;
71
+ getApi(): FileViewerPublicApi | FileViewerInstance | null;
72
+ downloadOriginalFile(): Promise<void>;
73
+ printRenderedHtml(): Promise<void>;
74
+ exportRenderedHtml(): Promise<void>;
75
+ zoomIn(): Promise<FileViewerZoomState | null>;
76
+ zoomOut(): Promise<FileViewerZoomState | null>;
77
+ resetZoom(): Promise<FileViewerZoomState | null>;
78
+ searchDocument(query: string): Promise<FileViewerSearchState | null>;
79
+ clearDocumentSearch(): Promise<FileViewerSearchState | null>;
80
+ nextSearchResult(): Promise<FileViewerSearchState | null>;
81
+ previousSearchResult(): Promise<FileViewerSearchState | null>;
82
+ collectDocumentAnchors(): Promise<FileViewerDocumentAnchor[]>;
83
+ scrollToAnchor(anchor: FileViewerDocumentAnchor | string): Promise<boolean>;
84
+ scrollToLine(line: number): Promise<boolean>;
85
+ getDocumentTextChunks(): FileViewerDocumentChunk[];
86
+ getOperationAvailability(): FileViewerOperationAvailability | null;
87
+ getZoomState(): FileViewerZoomState | null;
88
+ getSearchState(): FileViewerSearchState | null;
89
+ getState(): ViewerState;
90
+ subscribe(listener: ViewerStateListener): () => void;
91
+ }
92
+ export type ViewerControllerAccessor = () => ViewerController | null;
93
+ export interface ViewerControllerHandle {
94
+ load(options: ViewerMountOptions): Promise<void>;
95
+ update(options?: ViewerMountOptions): Promise<void>;
96
+ reload(): Promise<void>;
97
+ destroy(): void;
98
+ getController(): ViewerController | null;
99
+ getApi(): FileViewerPublicApi | FileViewerInstance | null;
100
+ downloadOriginalFile(): Promise<void>;
101
+ printRenderedHtml(): Promise<void>;
102
+ exportRenderedHtml(): Promise<void>;
103
+ zoomIn(): Promise<FileViewerZoomState | null>;
104
+ zoomOut(): Promise<FileViewerZoomState | null>;
105
+ resetZoom(): Promise<FileViewerZoomState | null>;
106
+ searchDocument(query: string): Promise<FileViewerSearchState | null>;
107
+ clearDocumentSearch(): Promise<FileViewerSearchState | null>;
108
+ nextSearchResult(): Promise<FileViewerSearchState | null>;
109
+ previousSearchResult(): Promise<FileViewerSearchState | null>;
110
+ collectDocumentAnchors(): Promise<FileViewerDocumentAnchor[]>;
111
+ scrollToAnchor(anchor: FileViewerDocumentAnchor | string): Promise<boolean>;
112
+ scrollToLine(line: number): Promise<boolean>;
113
+ getDocumentTextChunks(): FileViewerDocumentChunk[];
114
+ getOperationAvailability(): FileViewerOperationAvailability | null;
115
+ getZoomState(): FileViewerZoomState | null;
116
+ getSearchState(): FileViewerSearchState | null;
117
+ getState(): ViewerState | null;
118
+ subscribe(listener: ViewerStateListener): () => void;
119
+ }
120
+ export declare const createViewerControllerHandle: (getController: ViewerControllerAccessor, dispose: () => void) => ViewerControllerHandle;
121
+ export declare const mountViewer: (container: HTMLElement, initialOptions?: ViewerMountOptions, coreOptions?: ViewerCoreOptions) => ViewerController;
@@ -0,0 +1,30 @@
1
+ import { default as FileViewer } from './components/FileViewer';
2
+ import { App } from 'vue';
3
+ import { FileViewerExpose } from './common/type';
4
+ declare interface FileViewerInstaller {
5
+ /**
6
+ * 全局注册 `<file-viewer>` 组件。
7
+ */
8
+ install(app: App, options?: FileViewerVue3PluginOptions): void;
9
+ }
10
+ export interface FileViewerVue3PluginOptions {
11
+ componentName?: string;
12
+ }
13
+ export type FileViewerVue3Handle = FileViewerExpose;
14
+ /**
15
+ * Vue3 插件安装器。
16
+ *
17
+ * 这里顺手引入库级样式,确保宿主项目只要 `app.use(FileViewer)`,
18
+ * 就能拿到组件渲染所需的基础样式。
19
+ */
20
+ declare class Installer implements FileViewerInstaller {
21
+ private installed;
22
+ install(app: App, options?: FileViewerVue3PluginOptions): void;
23
+ }
24
+ declare const _default: Installer;
25
+ export default _default;
26
+ export { FileViewer };
27
+ export { createFlyfishFileViewer, mountFlyfishFileViewer } from './native';
28
+ export type { CreateFlyfishFileViewerOptions, FlyfishFileViewerNativeController, FlyfishFileViewerNativeSource } from './native';
29
+ export type { FileRef, ViewerAiOptions, ViewerArchiveOptions, ViewerCadOptions, ViewerController, ViewerControllerAccessor, ViewerControllerHandle, ViewerDocxOptions, ViewerEvent, ViewerEventHandler, ViewerEventType, ViewerFetchFile, ViewerFetchInput, ViewerMountOptions, ViewerOptions, ViewerPdfOptions, ViewerSpreadsheetOptions, ViewerCoreOptions, ViewerSearchOptions, ViewerSourceInput, ViewerThemeMode, ViewerToolbarOptions, ViewerToolbarPosition, ViewerTypstOptions, ViewerWatermarkOptions, ViewerLifecycleContext, ViewerOperationContext, ViewerState, ViewerStateListener, } from './controller';
30
+ export type { FileRenderContext, FileRenderExportAdapter, FileRenderExportMode, FileRenderExportOptions, FileViewerAiOptions, FileViewerArchiveOptions, FileViewerBeforeOperation, FileViewerCadDwfLineWeightMode, FileViewerCadOptions, FileViewerCadRenderer, FileViewerDocxOptions, FileViewerDocumentAnchor, FileViewerDocumentChunk, FileViewerEmits, FileViewerEventMap, FileViewerExpose, FileViewerLifecycleContext, FileViewerLifecycleHooks, FileViewerLifecyclePhase, FileViewerOperationAvailability, FileViewerOperationContext, FileViewerOperationType, FileViewerOptions, FileViewerPdfOptions, FileViewerSpreadsheetOptions, FileViewerProps, FileViewerSearchMatch, FileViewerSearchOptions, FileViewerSearchProvider, FileViewerSearchState, FileViewerSourceType, FileViewerToolbarOptions, FileViewerToolbarPosition, FileViewerThemeMode, FileViewerTypstOptions, FileViewerWatermarkOptions, FileViewerZoomProvider, FileViewerZoomState } from './common/type';
@@ -0,0 +1,18 @@
1
+ import { ViewerController, ViewerMountOptions, ViewerCoreOptions, ViewerSourceInput } from './controller';
2
+ export interface CreateFlyfishFileViewerOptions extends ViewerMountOptions {
3
+ source?: ViewerSourceInput;
4
+ autoLoad?: boolean;
5
+ fetchFile?: ViewerCoreOptions['fetchFile'];
6
+ onError?: ViewerCoreOptions['onError'];
7
+ }
8
+ export type FlyfishFileViewerNativeController = ViewerController;
9
+ export type FlyfishFileViewerNativeSource = ViewerSourceInput;
10
+ /**
11
+ * Mount the full Flyfish renderer stack directly into a DOM container.
12
+ *
13
+ * This is the native integration base used by framework component packages. Component packages keep
14
+ * their own component lifecycle and call the shared core controller for loading,
15
+ * teardown, search, zoom, print and export.
16
+ */
17
+ export declare const createFlyfishFileViewer: (container: HTMLElement, options?: CreateFlyfishFileViewerOptions) => ViewerController;
18
+ export declare const mountFlyfishFileViewer: (container: HTMLElement, options?: CreateFlyfishFileViewerOptions) => ViewerController;
@@ -0,0 +1,8 @@
1
+ import { FileRenderContext, FileViewerRenderedInstance as Rendered } from '@file-viewer/core';
2
+ /**
3
+ * 压缩包内文件和邮件附件的嵌套预览入口。
4
+ *
5
+ * 主预览器和附件预览共享 core dispatcher。Vue3 标准组件包 不再持有格式专属
6
+ * vendor,所有类型统一交给 framework-neutral core renderer。
7
+ */
8
+ export declare const renderNestedBuffer: (buffer: ArrayBuffer, type: string, target: HTMLDivElement, context?: FileRenderContext) => Promise<Rendered>;
@@ -0,0 +1,8 @@
1
+ import { FileRenderHandler, FileViewerRenderedInstance as AppWrapper } from '@file-viewer/core';
2
+ type FileHandler = FileRenderHandler<AppWrapper, HTMLDivElement>;
3
+ export declare const vueRendererRegistryBridge: import('@file-viewer/core').FileRenderHandlerRegistryResult<AppWrapper, HTMLDivElement>;
4
+ export declare const vueRendererRegistry: import('@file-viewer/core').RendererRegistry;
5
+ export declare const vueRendererDispatcher: import('@file-viewer/core').FileViewerRendererDispatcher<FileHandler>;
6
+ export declare const missingCoreRendererHandlers: string[];
7
+ declare const renders: Map<string, FileHandler>;
8
+ export default renders;
package/dist/style.css ADDED
@@ -0,0 +1 @@
1
+
package/dist/vue3.css ADDED
@@ -0,0 +1,2 @@
1
+ .file-viewer[data-v-e0748d68]{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;background:#fff;flex-direction:column;width:100%;height:100%;display:flex;position:relative}.file-viewer[data-viewer-theme=dark][data-v-e0748d68]{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;background:#0f171d}.viewer-stage[data-v-e0748d68]{flex-direction:column;flex:1;min-height:0;display:flex;position:relative;overflow:hidden}.viewer-actions[data-v-e0748d68]{background:rgba(255,255,255,.92);border-bottom:1px solid rgba(20,35,53,.06);flex-shrink:0;justify-content:flex-end;align-items:center;gap:6px;min-height:45px;padding:6px 10px;display:inline-flex}.viewer-actions--floating[data-v-e0748d68]{z-index:30;right:calc(16px + env(safe-area-inset-right,0px));bottom:calc(16px + env(safe-area-inset-bottom,0px));-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);background:rgba(255,255,255,.94);border:1px solid rgba(20,35,53,.1);border-radius:999px;min-height:42px;padding:6px;position:absolute;box-shadow:0 18px 44px rgba(15,23,42,.16)}.viewer-actions-group[data-v-e0748d68]{background:rgba(20,35,53,.035);border:1px solid rgba(20,35,53,.08);border-radius:999px;align-items:center;gap:2px;padding:2px;display:inline-flex}.viewer-actions button[data-v-e0748d68]{color:#40546a;min-width:42px;height:30px;font:inherit;cursor:pointer;background:0 0;border:0;border-radius:8px;padding:0 10px;font-size:12px;font-weight:800}.viewer-actions .viewer-icon-button[data-v-e0748d68]{justify-content:center;align-items:center;width:30px;min-width:30px;padding:0;display:inline-flex}.viewer-actions .viewer-zoom-meter[data-v-e0748d68]{color:#23465e;min-width:48px;padding:0 8px}.viewer-actions--floating button[data-v-e0748d68]{border-radius:999px;min-width:48px;height:32px}.viewer-actions--floating .viewer-icon-button[data-v-e0748d68]{width:32px;min-width:32px}.viewer-actions--floating .viewer-zoom-meter[data-v-e0748d68]{min-width:54px}.viewer-actions button[data-v-e0748d68]:hover:not(:disabled){color:#16774c;background:rgba(33,163,102,.1)}.viewer-actions button[data-v-e0748d68]:disabled{color:#aab5c0;cursor:not-allowed}.viewer-content-shell[data-v-e0748d68]{flex:1;min-height:0;position:relative;overflow:hidden}.content[data-v-e0748d68]{background:#f2f2f2;width:100%;height:100%;display:block;overflow:auto}.content.hidden[data-v-e0748d68]{visibility:hidden}.flyfish-search-match{color:inherit;background:rgba(255,214,102,.72);border-radius:4px;padding:0 2px;box-shadow:0 0 0 1px rgba(185,128,0,.14)}.flyfish-search-match--active{background:rgba(47,191,122,.82);box-shadow:0 0 0 2px rgba(30,132,83,.24)}.viewer-watermark[data-v-e0748d68]{z-index:20;pointer-events:none;background-repeat:repeat;position:absolute;top:0;bottom:0;left:0;right:0}.state-panel[data-v-e0748d68]{z-index:40;background:linear-gradient(rgba(255,255,255,.92),rgba(246,248,249,.98));justify-content:center;align-items:center;padding:24px;display:flex;position:absolute;top:0;bottom:0;left:0;right:0}.loading-card[data-v-e0748d68],.error-card[data-v-e0748d68]{background:rgba(255,255,255,.92);border:1px solid rgba(19,36,55,.06);border-radius:24px;align-items:center;gap:18px;width:min(100%,460px);padding:22px;display:flex;box-shadow:0 18px 42px rgba(15,31,47,.12)}.loading-icon[data-v-e0748d68]{background:linear-gradient(135deg, var(--viewer-accent) 0%, var(--viewer-accent) 100%);color:#fff;letter-spacing:.04em;border-radius:20px;flex-shrink:0;justify-content:center;align-items:center;min-width:70px;height:70px;padding:0 12px;font-size:22px;font-weight:800;display:inline-flex;box-shadow:0 14px 30px rgba(17,28,40,.14)}.loading-copy[data-v-e0748d68]{flex:1;min-width:0}.loading-kicker[data-v-e0748d68]{color:var(--viewer-accent);letter-spacing:.08em;text-transform:uppercase;font-size:12px;font-weight:700;display:block}.loading-copy strong[data-v-e0748d68],.error-card strong[data-v-e0748d68]{color:#16283b;margin-top:4px;font-size:20px;line-height:1.2;display:block}.loading-copy p[data-v-e0748d68],.error-card p[data-v-e0748d68]{color:#6a7d90;margin:8px 0 0;line-height:1.6}.loading-ring[data-v-e0748d68]{border:3px solid var(--viewer-soft);border-top-color:var(--viewer-accent);border-radius:999px;flex-shrink:0;width:38px;height:38px;animation:.9s linear infinite viewer-spin-e0748d68}.error-card[data-v-e0748d68]{text-align:center;display:block}.error-card strong[data-v-e0748d68]{color:#b42318}.file-viewer[data-viewer-theme=dark] .viewer-actions--floating[data-v-e0748d68]{background:rgba(14,22,28,.94);border-color:rgba(167,185,198,.16);box-shadow:0 20px 52px rgba(0,0,0,.34)}.file-viewer[data-viewer-theme=dark] .viewer-actions[data-v-e0748d68]{background:rgba(14,22,28,.94);border-bottom-color:rgba(167,185,198,.12)}.file-viewer[data-viewer-theme=dark] .viewer-actions button[data-v-e0748d68]{color:#b8c7d5}.file-viewer[data-viewer-theme=dark] .viewer-actions-group[data-v-e0748d68]{background:rgba(167,185,198,.08);border-color:rgba(167,185,198,.13)}.file-viewer[data-viewer-theme=dark] .viewer-actions button[data-v-e0748d68]:hover:not(:disabled){color:#5ee0ae;background:rgba(45,212,154,.14)}.file-viewer[data-viewer-theme=dark] .viewer-actions button[data-v-e0748d68]:disabled{color:#667888}.file-viewer[data-viewer-theme=dark] .content[data-v-e0748d68]{background:#141c23}.file-viewer[data-viewer-theme=dark] .state-panel[data-v-e0748d68]{background:linear-gradient(rgba(15,23,30,.92),rgba(11,17,22,.98))}.file-viewer[data-viewer-theme=dark] .loading-card[data-v-e0748d68],.file-viewer[data-viewer-theme=dark] .error-card[data-v-e0748d68]{background:rgba(19,29,37,.94);border-color:rgba(139,161,177,.16);box-shadow:0 22px 52px rgba(0,0,0,.34)}.file-viewer[data-viewer-theme=dark] .loading-copy strong[data-v-e0748d68],.file-viewer[data-viewer-theme=dark] .error-card strong[data-v-e0748d68]{color:#eff7fb}.file-viewer[data-viewer-theme=dark] .loading-copy p[data-v-e0748d68],.file-viewer[data-viewer-theme=dark] .error-card p[data-v-e0748d68]{color:#9eb0bf}.file-viewer[data-viewer-theme=dark] .error-card strong[data-v-e0748d68]{color:#ff9c91}@keyframes viewer-spin-e0748d68{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@media (prefers-color-scheme:dark){.file-viewer[data-viewer-theme=system][data-v-e0748d68]{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;background:#0f171d}.file-viewer[data-viewer-theme=system] .viewer-actions--floating[data-v-e0748d68]{background:rgba(14,22,28,.94);border-color:rgba(167,185,198,.16);box-shadow:0 20px 52px rgba(0,0,0,.34)}.file-viewer[data-viewer-theme=system] .viewer-actions[data-v-e0748d68]{background:rgba(14,22,28,.94);border-bottom-color:rgba(167,185,198,.12)}.file-viewer[data-viewer-theme=system] .viewer-actions button[data-v-e0748d68]{color:#b8c7d5}.file-viewer[data-viewer-theme=system] .viewer-actions-group[data-v-e0748d68]{background:rgba(167,185,198,.08);border-color:rgba(167,185,198,.13)}.file-viewer[data-viewer-theme=system] .viewer-actions button[data-v-e0748d68]:hover:not(:disabled){color:#5ee0ae;background:rgba(45,212,154,.14)}.file-viewer[data-viewer-theme=system] .viewer-actions button[data-v-e0748d68]:disabled{color:#667888}.file-viewer[data-viewer-theme=system] .content[data-v-e0748d68]{background:#141c23}.file-viewer[data-viewer-theme=system] .state-panel[data-v-e0748d68]{background:linear-gradient(rgba(15,23,30,.92),rgba(11,17,22,.98))}.file-viewer[data-viewer-theme=system] .loading-card[data-v-e0748d68],.file-viewer[data-viewer-theme=system] .error-card[data-v-e0748d68]{background:rgba(19,29,37,.94);border-color:rgba(139,161,177,.16);box-shadow:0 22px 52px rgba(0,0,0,.34)}.file-viewer[data-viewer-theme=system] .loading-copy strong[data-v-e0748d68],.file-viewer[data-viewer-theme=system] .error-card strong[data-v-e0748d68]{color:#eff7fb}.file-viewer[data-viewer-theme=system] .loading-copy p[data-v-e0748d68],.file-viewer[data-viewer-theme=system] .error-card p[data-v-e0748d68]{color:#9eb0bf}.file-viewer[data-viewer-theme=system] .error-card strong[data-v-e0748d68]{color:#ff9c91}}@media (max-width:767px){.viewer-actions--floating[data-v-e0748d68]{right:calc(10px + env(safe-area-inset-right,0px));bottom:calc(10px + env(safe-area-inset-bottom,0px));gap:4px;max-width:calc(100% - 20px);padding:5px;overflow-x:auto}.viewer-actions--floating button[data-v-e0748d68]{min-width:40px;height:30px;padding:0 9px}}.file-render{width:100%;min-width:0;height:100%;min-height:0}
2
+ /*$vite$:1*/
Binary file