@eternalheart/angular-file-preview 1.6.5
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/LICENSE +22 -0
- package/README.md +879 -0
- package/README.zh-CN.md +876 -0
- package/lib/LICENSE +22 -0
- package/lib/README.md +879 -0
- package/lib/components/preview/file-preview-toolbar.d.ts +19 -0
- package/lib/components/preview/nav-arrows.d.ts +25 -0
- package/lib/components/preview/renderer-outlet.d.ts +23 -0
- package/lib/components/preview/toolbar-button.d.ts +12 -0
- package/lib/components/resizable-split.d.ts +32 -0
- package/lib/di/locale.service.d.ts +12 -0
- package/lib/di/request.service.d.ts +20 -0
- package/lib/di/theme-mode.d.ts +6 -0
- package/lib/di/theme.service.d.ts +9 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-avifLoader-BP3fgcMm-CZsJ9svm.mjs +55 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-avifLoader-BP3fgcMm-CZsJ9svm.mjs.map +1 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-RendererError-DtNihCIX-DtNihCIX.mjs +58 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-RendererError-DtNihCIX-DtNihCIX.mjs.map +1 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-UobTf36G.mjs +5835 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-UobTf36G.mjs.map +1 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-base.types-D5x7QPey-D5x7QPey.mjs +17 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-base.types-D5x7QPey-D5x7QPey.mjs.map +1 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index--7d8Hgi0-D-sg24Qs.mjs +284 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index--7d8Hgi0-D-sg24Qs.mjs.map +1 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-6dZS_Cfs-B1itLV5R.mjs +703 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-6dZS_Cfs-B1itLV5R.mjs.map +1 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-B1ANUCTy-BRs7TMLn.mjs +231 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-B1ANUCTy-BRs7TMLn.mjs.map +1 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-BEaqpRV8-BidVIVlO.mjs +552 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-BEaqpRV8-BidVIVlO.mjs.map +1 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-BGqTRZbm-CAOLRw20.mjs +688 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-BGqTRZbm-CAOLRw20.mjs.map +1 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-Bv3JRXKn-B4Wewc-4.mjs +273 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-Bv3JRXKn-B4Wewc-4.mjs.map +1 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-C0McUoqT-DJ35bhIz.mjs +288 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-C0McUoqT-DJ35bhIz.mjs.map +1 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-C518mdUd-B5SCzrzU.mjs +550 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-C518mdUd-B5SCzrzU.mjs.map +1 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-CDjKPqyW-CmX5sdkL.mjs +102 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-CDjKPqyW-CmX5sdkL.mjs.map +1 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-CHi9tOe0-NOeQYAnM.mjs +516 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-CHi9tOe0-NOeQYAnM.mjs.map +1 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-CQwhffym-DAGw4Xy_.mjs +823 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-CQwhffym-DAGw4Xy_.mjs.map +1 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-CSCTj7ft-BfqruUyY.mjs +164 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-CSCTj7ft-BfqruUyY.mjs.map +1 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-Cb1RLXeO-Bj9gjS1Z.mjs +655 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-Cb1RLXeO-Bj9gjS1Z.mjs.map +1 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-Cw90Kdyg-BzrW_cyx.mjs +207 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-Cw90Kdyg-BzrW_cyx.mjs.map +1 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-D35x1nwM-CugEEXjg.mjs +199 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-D35x1nwM-CugEEXjg.mjs.map +1 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-D9jJNzeM-mWX59Aj2.mjs +194 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-D9jJNzeM-mWX59Aj2.mjs.map +1 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-DbmuvdvN-C29uLyt2.mjs +94 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-DbmuvdvN-C29uLyt2.mjs.map +1 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-DsNNZ59Q-C8MaSME6.mjs +468 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-DsNNZ59Q-C8MaSME6.mjs.map +1 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-DufW2Fuc-CTosCut6.mjs +193 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-DufW2Fuc-CTosCut6.mjs.map +1 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-TSTa_Q7E-DBhkL6pV.mjs +184 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-TSTa_Q7E-DBhkL6pV.mjs.map +1 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-pG0Ko5mI-DthQJg-X.mjs +492 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-pG0Ko5mI-DthQJg-X.mjs.map +1 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-shiki-highlight-CL9cG481-BKfwdOpN.mjs +68 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-shiki-highlight-CL9cG481-BKfwdOpN.mjs.map +1 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-heicLoader-CH_raQNn-BSXHd_oi.mjs +36 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-heicLoader-CH_raQNn-BSXHd_oi.mjs.map +1 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-jp2Loader-ldvCSsvm-DJEhfimG.mjs +121 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-jp2Loader-ldvCSsvm-DJEhfimG.mjs.map +1 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-psdLoader-D5CkupyY-D5Gegcdg.mjs +78 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-psdLoader-D5CkupyY-D5Gegcdg.mjs.map +1 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-rawLoader-0mLvxCNp-CCXn9Rdp.mjs +81 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-rawLoader-0mLvxCNp-CCXn9Rdp.mjs.map +1 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-tiffLoader-CmUAD1vO-0JqIws9t.mjs +59 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-tiffLoader-CmUAD1vO-0JqIws9t.mjs.map +1 -0
- package/lib/fesm2022/eternalheart-angular-file-preview.mjs +2 -0
- package/lib/fesm2022/eternalheart-angular-file-preview.mjs.map +1 -0
- package/lib/file-preview-content.d.ts +65 -0
- package/lib/file-preview-embed.d.ts +30 -0
- package/lib/file-preview-modal.d.ts +34 -0
- package/lib/fp-core.d.ts +1 -0
- package/lib/index.css +2119 -0
- package/lib/index.d.ts +11 -0
- package/lib/renderers/Audio/index.d.ts +74 -0
- package/lib/renderers/Cad/index.d.ts +45 -0
- package/lib/renderers/Cad/toolbar.d.ts +15 -0
- package/lib/renderers/Csv/index.d.ts +26 -0
- package/lib/renderers/Doc/index.d.ts +19 -0
- package/lib/renderers/Docx/index.d.ts +42 -0
- package/lib/renderers/Epub/index.d.ts +57 -0
- package/lib/renderers/Font/font-preview-line.d.ts +26 -0
- package/lib/renderers/Font/index.d.ts +52 -0
- package/lib/renderers/Image/index.d.ts +79 -0
- package/lib/renderers/Json/index.d.ts +61 -0
- package/lib/renderers/Markdown/index.d.ts +35 -0
- package/lib/renderers/Mobi/index.d.ts +51 -0
- package/lib/renderers/Msg/index.d.ts +47 -0
- package/lib/renderers/Pdf/index.d.ts +55 -0
- package/lib/renderers/Ppt/index.d.ts +19 -0
- package/lib/renderers/Pptx/index.d.ts +29 -0
- package/lib/renderers/RendererError.d.ts +9 -0
- package/lib/renderers/RendererLoading.d.ts +7 -0
- package/lib/renderers/Subtitle/index.d.ts +25 -0
- package/lib/renderers/Text/index.d.ts +29 -0
- package/lib/renderers/Unsupported/index.d.ts +15 -0
- package/lib/renderers/Video/index.d.ts +28 -0
- package/lib/renderers/Xlsx/index.d.ts +25 -0
- package/lib/renderers/Xml/index.d.ts +26 -0
- package/lib/renderers/Zip/index.d.ts +58 -0
- package/lib/renderers/Zip/tree-item.d.ts +29 -0
- package/lib/renderers/base.types.d.ts +10 -0
- package/lib/renderers/lazy.d.ts +23 -0
- package/lib/renderers/registry.d.ts +13 -0
- package/lib/renderers/toolbar.types.d.ts +19 -0
- package/lib/types.d.ts +26 -0
- package/lib/utils/audio-player.d.ts +20 -0
- package/lib/utils/shiki-highlight.d.ts +7 -0
- package/package.json +119 -0
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import type { FieldsData } from '@kenjiuno/msgreader';
|
|
2
|
+
import type { RendererHandle } from '../base.types';
|
|
3
|
+
import type { ToolbarGroup } from '../toolbar.types';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export declare class MsgRenderer implements RendererHandle {
|
|
6
|
+
url: import("@angular/core").InputSignal<string>;
|
|
7
|
+
private readonly locale;
|
|
8
|
+
private readonly request;
|
|
9
|
+
private readonly sanitizer;
|
|
10
|
+
protected readonly t: import("@eternalheart/file-preview-core").Translator;
|
|
11
|
+
protected readonly userIcon: import("lucide-angular").LucideIconData;
|
|
12
|
+
protected readonly usersIcon: import("lucide-angular").LucideIconData;
|
|
13
|
+
protected readonly paperclipIcon: import("lucide-angular").LucideIconData;
|
|
14
|
+
protected readonly calendarIcon: import("lucide-angular").LucideIconData;
|
|
15
|
+
protected readonly mailIcon: import("lucide-angular").LucideIconData;
|
|
16
|
+
protected readonly tagIcon: import("lucide-angular").LucideIconData;
|
|
17
|
+
protected readonly clockIcon: import("lucide-angular").LucideIconData;
|
|
18
|
+
protected readonly hashIcon: import("lucide-angular").LucideIconData;
|
|
19
|
+
protected readonly unknownFileLabel = "\u672A\u77E5\u6587\u4EF6";
|
|
20
|
+
readonly loading: import("@angular/core").WritableSignal<boolean>;
|
|
21
|
+
readonly error: import("@angular/core").WritableSignal<string | null>;
|
|
22
|
+
readonly fields: import("@angular/core").WritableSignal<FieldsData | null>;
|
|
23
|
+
readonly subject: import("@angular/core").Signal<string>;
|
|
24
|
+
readonly sender: import("@angular/core").Signal<string>;
|
|
25
|
+
readonly toStr: import("@angular/core").Signal<string>;
|
|
26
|
+
readonly ccStr: import("@angular/core").Signal<string>;
|
|
27
|
+
readonly bccStr: import("@angular/core").Signal<string>;
|
|
28
|
+
readonly sentDate: import("@angular/core").Signal<string>;
|
|
29
|
+
readonly receivedDate: import("@angular/core").Signal<string>;
|
|
30
|
+
readonly createdDate: import("@angular/core").Signal<string>;
|
|
31
|
+
readonly lastModified: import("@angular/core").Signal<string>;
|
|
32
|
+
readonly attachments: import("@angular/core").Signal<FieldsData[]>;
|
|
33
|
+
readonly bodyHtml: import("@angular/core").Signal<string>;
|
|
34
|
+
readonly messageClass: import("@angular/core").Signal<string>;
|
|
35
|
+
readonly messageId: import("@angular/core").Signal<string>;
|
|
36
|
+
readonly importance: import("@angular/core").Signal<number | undefined>;
|
|
37
|
+
readonly importanceLabel: import("@angular/core").Signal<"" | "High" | "Low">;
|
|
38
|
+
readonly sensitivity: import("@angular/core").Signal<number | undefined>;
|
|
39
|
+
readonly sensitivityLabel: import("@angular/core").Signal<string>;
|
|
40
|
+
constructor();
|
|
41
|
+
getToolbarGroups: () => ToolbarGroup[];
|
|
42
|
+
protected trust(html: string): import("@angular/platform-browser").SafeHtml;
|
|
43
|
+
protected formatAttachmentSize(size: number | undefined): string;
|
|
44
|
+
private loadMsg;
|
|
45
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<MsgRenderer, never>;
|
|
46
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<MsgRenderer, "afp-msg-renderer", never, { "url": { "alias": "url"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
47
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import type { RendererHandle } from '../base.types';
|
|
2
|
+
import type { ToolbarGroup } from '../toolbar.types';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
interface PdfOutlineItem {
|
|
5
|
+
title: string;
|
|
6
|
+
dest: unknown;
|
|
7
|
+
items?: PdfOutlineItem[];
|
|
8
|
+
}
|
|
9
|
+
export declare class PdfRenderer implements RendererHandle {
|
|
10
|
+
url: import("@angular/core").InputSignal<string>;
|
|
11
|
+
private readonly emitter;
|
|
12
|
+
private readonly locale;
|
|
13
|
+
private readonly sanitizer;
|
|
14
|
+
private readonly destroyRef;
|
|
15
|
+
protected readonly t: import("@eternalheart/file-preview-core").Translator;
|
|
16
|
+
protected readonly xIcon: import("lucide-angular").LucideIconData;
|
|
17
|
+
readonly zoom: import("@angular/core").WritableSignal<number>;
|
|
18
|
+
readonly currentPage: import("@angular/core").WritableSignal<number>;
|
|
19
|
+
readonly showOutline: import("@angular/core").WritableSignal<boolean>;
|
|
20
|
+
readonly numPages: import("@angular/core").WritableSignal<number>;
|
|
21
|
+
readonly error: import("@angular/core").WritableSignal<string | null>;
|
|
22
|
+
readonly loading: import("@angular/core").WritableSignal<boolean>;
|
|
23
|
+
readonly outline: import("@angular/core").WritableSignal<PdfOutlineItem[]>;
|
|
24
|
+
readonly activeOutlineItem: import("@angular/core").WritableSignal<string | null>;
|
|
25
|
+
private readonly scrollContainerRef;
|
|
26
|
+
private readonly outlinePageMap;
|
|
27
|
+
private pdfDoc;
|
|
28
|
+
private readonly pageStates;
|
|
29
|
+
private observer;
|
|
30
|
+
private zoomWatchReady;
|
|
31
|
+
readonly outlineHtml: import("@angular/core").Signal<string>;
|
|
32
|
+
constructor();
|
|
33
|
+
getToolbarGroups: () => ToolbarGroup[];
|
|
34
|
+
onToolbarChange: (listener: () => void) => () => void;
|
|
35
|
+
protected trust(html: string): import("@angular/platform-browser").SafeHtml;
|
|
36
|
+
protected onOutlineClick(e: Event): void;
|
|
37
|
+
private handleZoomIn;
|
|
38
|
+
private handleZoomOut;
|
|
39
|
+
private handleReset;
|
|
40
|
+
private handlePrevPage;
|
|
41
|
+
private handleNextPage;
|
|
42
|
+
private handleToggleOutline;
|
|
43
|
+
private buildOutlinePageMap;
|
|
44
|
+
private updateActiveOutlineByPage;
|
|
45
|
+
private handleOutlineClick;
|
|
46
|
+
private renderOutlineItemsHtml;
|
|
47
|
+
private renderPage;
|
|
48
|
+
private clearPageCanvas;
|
|
49
|
+
private initPagePlaceholders;
|
|
50
|
+
private loadPdf;
|
|
51
|
+
private handleScroll;
|
|
52
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<PdfRenderer, never>;
|
|
53
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<PdfRenderer, "afp-pdf-renderer", never, { "url": { "alias": "url"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
54
|
+
}
|
|
55
|
+
export {};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { RendererHandle } from '../base.types';
|
|
2
|
+
import type { ToolbarGroup } from '../toolbar.types';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export declare class PptRenderer implements RendererHandle {
|
|
5
|
+
url: import("@angular/core").InputSignal<string>;
|
|
6
|
+
private readonly locale;
|
|
7
|
+
private readonly request;
|
|
8
|
+
private readonly sanitizer;
|
|
9
|
+
private readonly t;
|
|
10
|
+
readonly html: import("@angular/core").WritableSignal<string>;
|
|
11
|
+
readonly loading: import("@angular/core").WritableSignal<boolean>;
|
|
12
|
+
readonly error: import("@angular/core").WritableSignal<string | null>;
|
|
13
|
+
constructor();
|
|
14
|
+
getToolbarGroups: () => ToolbarGroup[];
|
|
15
|
+
protected trust(html: string): import("@angular/platform-browser").SafeHtml;
|
|
16
|
+
private loadPpt;
|
|
17
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<PptRenderer, never>;
|
|
18
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<PptRenderer, "afp-ppt-renderer", never, { "url": { "alias": "url"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
19
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { RendererHandle } from '../base.types';
|
|
2
|
+
import type { ToolbarGroup } from '../toolbar.types';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export declare class PptxRenderer implements RendererHandle {
|
|
5
|
+
url: import("@angular/core").InputSignal<string>;
|
|
6
|
+
tiled: import("@angular/core").InputSignal<boolean>;
|
|
7
|
+
private readonly locale;
|
|
8
|
+
private readonly request;
|
|
9
|
+
private readonly destroyRef;
|
|
10
|
+
protected readonly t: import("@eternalheart/file-preview-core").Translator;
|
|
11
|
+
readonly loading: import("@angular/core").WritableSignal<boolean>;
|
|
12
|
+
readonly error: import("@angular/core").WritableSignal<string | null>;
|
|
13
|
+
readonly slideCount: import("@angular/core").WritableSignal<number>;
|
|
14
|
+
private readonly containerRef;
|
|
15
|
+
private previewer;
|
|
16
|
+
private resizeObserver;
|
|
17
|
+
private arrayBufferRef;
|
|
18
|
+
private resizeTimeout;
|
|
19
|
+
private lastDimensions;
|
|
20
|
+
private slideRatio;
|
|
21
|
+
private urlWatchReady;
|
|
22
|
+
constructor();
|
|
23
|
+
getToolbarGroups: () => ToolbarGroup[];
|
|
24
|
+
private calculateDimensions;
|
|
25
|
+
private reinitializePreviewer;
|
|
26
|
+
private loadPptx;
|
|
27
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<PptxRenderer, never>;
|
|
28
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<PptxRenderer, "afp-pptx-renderer", never, { "url": { "alias": "url"; "required": true; "isSignal": true; }; "tiled": { "alias": "tiled"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
29
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import * as i0 from "@angular/core";
|
|
2
|
+
export declare class RendererError {
|
|
3
|
+
message: import("@angular/core").InputSignal<string>;
|
|
4
|
+
detail: import("@angular/core").InputSignal<string | undefined>;
|
|
5
|
+
showIcon: import("@angular/core").InputSignal<boolean>;
|
|
6
|
+
protected readonly alertCircle: import("lucide-angular").LucideIconData;
|
|
7
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<RendererError, never>;
|
|
8
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<RendererError, "afp-renderer-error", never, { "message": { "alias": "message"; "required": true; "isSignal": true; }; "detail": { "alias": "detail"; "required": false; "isSignal": true; }; "showIcon": { "alias": "showIcon"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
9
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import * as i0 from "@angular/core";
|
|
2
|
+
export declare class RendererLoading {
|
|
3
|
+
private readonly locale;
|
|
4
|
+
protected readonly t: import("@eternalheart/file-preview-core").Translator;
|
|
5
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<RendererLoading, never>;
|
|
6
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<RendererLoading, "afp-renderer-loading", never, {}, {}, never, never, true, never>;
|
|
7
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { formatSubtitleTime, type SubtitleParseResult } from '../../fp-core';
|
|
2
|
+
import type { RendererHandle } from '../base.types';
|
|
3
|
+
import type { ToolbarGroup } from '../toolbar.types';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export declare class SubtitleRenderer implements RendererHandle {
|
|
6
|
+
url: import("@angular/core").InputSignal<string>;
|
|
7
|
+
fileName: import("@angular/core").InputSignal<string>;
|
|
8
|
+
private readonly locale;
|
|
9
|
+
private readonly request;
|
|
10
|
+
protected readonly t: import("@eternalheart/file-preview-core").Translator;
|
|
11
|
+
readonly text: import("@angular/core").WritableSignal<string>;
|
|
12
|
+
readonly loading: import("@angular/core").WritableSignal<boolean>;
|
|
13
|
+
readonly error: import("@angular/core").WritableSignal<string | null>;
|
|
14
|
+
readonly parsed: import("@angular/core").Signal<SubtitleParseResult | null>;
|
|
15
|
+
readonly isLyric: import("@angular/core").Signal<boolean>;
|
|
16
|
+
readonly meta: import("@angular/core").Signal<Record<string, string>>;
|
|
17
|
+
constructor();
|
|
18
|
+
getToolbarGroups: () => ToolbarGroup[];
|
|
19
|
+
protected readonly formatSubtitleTime: typeof formatSubtitleTime;
|
|
20
|
+
protected wordTimeShort(time: number): string;
|
|
21
|
+
private static getFormat;
|
|
22
|
+
private load;
|
|
23
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<SubtitleRenderer, never>;
|
|
24
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<SubtitleRenderer, "afp-subtitle-renderer", never, { "url": { "alias": "url"; "required": true; "isSignal": true; }; "fileName": { "alias": "fileName"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
25
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { RendererHandle } from '../base.types';
|
|
2
|
+
import type { ToolbarGroup } from '../toolbar.types';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export declare class TextRenderer implements RendererHandle {
|
|
5
|
+
url: import("@angular/core").InputSignal<string>;
|
|
6
|
+
fileName: import("@angular/core").InputSignal<string>;
|
|
7
|
+
private readonly emitter;
|
|
8
|
+
private readonly locale;
|
|
9
|
+
private readonly request;
|
|
10
|
+
private readonly sanitizer;
|
|
11
|
+
private readonly t;
|
|
12
|
+
readonly wordWrap: import("@angular/core").WritableSignal<boolean>;
|
|
13
|
+
readonly htmlPreview: import("@angular/core").WritableSignal<boolean>;
|
|
14
|
+
readonly content: import("@angular/core").WritableSignal<string>;
|
|
15
|
+
readonly loading: import("@angular/core").WritableSignal<boolean>;
|
|
16
|
+
readonly error: import("@angular/core").WritableSignal<string | null>;
|
|
17
|
+
readonly language: import("@angular/core").Signal<string>;
|
|
18
|
+
readonly isHtml: import("@angular/core").Signal<boolean>;
|
|
19
|
+
readonly lines: import("@angular/core").Signal<string[]>;
|
|
20
|
+
private readonly shiki;
|
|
21
|
+
readonly lineHtmls: import("@angular/core").Signal<string[]>;
|
|
22
|
+
constructor();
|
|
23
|
+
getToolbarGroups: () => ToolbarGroup[];
|
|
24
|
+
onToolbarChange: (listener: () => void) => () => void;
|
|
25
|
+
protected trust(html: string): import("@angular/platform-browser").SafeHtml;
|
|
26
|
+
private loadText;
|
|
27
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<TextRenderer, never>;
|
|
28
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<TextRenderer, "afp-text-renderer", never, { "url": { "alias": "url"; "required": true; "isSignal": true; }; "fileName": { "alias": "fileName"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
29
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { RendererHandle } from '../base.types';
|
|
2
|
+
import type { ToolbarGroup } from '../toolbar.types';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export declare class UnsupportedRenderer implements RendererHandle {
|
|
5
|
+
fileName: import("@angular/core").InputSignal<string>;
|
|
6
|
+
fileType: import("@angular/core").InputSignal<string>;
|
|
7
|
+
download: import("@angular/core").OutputEmitterRef<void>;
|
|
8
|
+
protected readonly fileQuestion: import("lucide-angular").LucideIconData;
|
|
9
|
+
protected readonly downloadIcon: import("lucide-angular").LucideIconData;
|
|
10
|
+
private readonly locale;
|
|
11
|
+
protected readonly t: import("@eternalheart/file-preview-core").Translator;
|
|
12
|
+
getToolbarGroups(): ToolbarGroup[];
|
|
13
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<UnsupportedRenderer, never>;
|
|
14
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<UnsupportedRenderer, "afp-unsupported-renderer", never, { "fileName": { "alias": "fileName"; "required": true; "isSignal": true; }; "fileType": { "alias": "fileType"; "required": true; "isSignal": true; }; }, { "download": "download"; }, never, never, true, never>;
|
|
15
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import 'video.js/dist/video-js.css';
|
|
2
|
+
import type { RendererHandle } from '../base.types';
|
|
3
|
+
import type { ToolbarGroup } from '../toolbar.types';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
interface ErrorState {
|
|
6
|
+
title: string;
|
|
7
|
+
detail: string;
|
|
8
|
+
}
|
|
9
|
+
export declare class VideoRenderer implements RendererHandle {
|
|
10
|
+
url: import("@angular/core").InputSignal<string>;
|
|
11
|
+
fileName: import("@angular/core").InputSignal<string | undefined>;
|
|
12
|
+
private readonly emitter;
|
|
13
|
+
private readonly locale;
|
|
14
|
+
private readonly destroyRef;
|
|
15
|
+
protected readonly t: import("@eternalheart/file-preview-core").Translator;
|
|
16
|
+
readonly error: import("@angular/core").WritableSignal<ErrorState | null>;
|
|
17
|
+
readonly isLoading: import("@angular/core").WritableSignal<boolean>;
|
|
18
|
+
private readonly videoContainerRef;
|
|
19
|
+
private player;
|
|
20
|
+
constructor();
|
|
21
|
+
getToolbarGroups: () => ToolbarGroup[];
|
|
22
|
+
onToolbarChange: (listener: () => void) => () => void;
|
|
23
|
+
private getVideoExt;
|
|
24
|
+
private initPlayer;
|
|
25
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<VideoRenderer, never>;
|
|
26
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<VideoRenderer, "afp-video-renderer", never, { "url": { "alias": "url"; "required": true; "isSignal": true; }; "fileName": { "alias": "fileName"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
27
|
+
}
|
|
28
|
+
export {};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { RendererHandle } from '../base.types';
|
|
2
|
+
import type { ToolbarGroup } from '../toolbar.types';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export declare class XlsxRenderer implements RendererHandle {
|
|
5
|
+
url: import("@angular/core").InputSignal<string>;
|
|
6
|
+
private readonly locale;
|
|
7
|
+
private readonly request;
|
|
8
|
+
private readonly destroyRef;
|
|
9
|
+
protected readonly t: import("@eternalheart/file-preview-core").Translator;
|
|
10
|
+
readonly loading: import("@angular/core").WritableSignal<boolean>;
|
|
11
|
+
readonly error: import("@angular/core").WritableSignal<string | null>;
|
|
12
|
+
private readonly containerRef;
|
|
13
|
+
private sheetData;
|
|
14
|
+
private resizeObserver;
|
|
15
|
+
private resizeTimeout;
|
|
16
|
+
private lastDimensions;
|
|
17
|
+
private urlWatchReady;
|
|
18
|
+
constructor();
|
|
19
|
+
getToolbarGroups: () => ToolbarGroup[];
|
|
20
|
+
private calculateDimensions;
|
|
21
|
+
private mountSpreadsheet;
|
|
22
|
+
private loadExcel;
|
|
23
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<XlsxRenderer, never>;
|
|
24
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<XlsxRenderer, "afp-xlsx-renderer", never, { "url": { "alias": "url"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
25
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { RendererHandle } from '../base.types';
|
|
2
|
+
import type { ToolbarGroup } from '../toolbar.types';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export declare class XmlRenderer implements RendererHandle {
|
|
5
|
+
url: import("@angular/core").InputSignal<string>;
|
|
6
|
+
fileName: import("@angular/core").InputSignal<string>;
|
|
7
|
+
private readonly locale;
|
|
8
|
+
private readonly request;
|
|
9
|
+
private readonly sanitizer;
|
|
10
|
+
private readonly t;
|
|
11
|
+
readonly content: import("@angular/core").WritableSignal<string>;
|
|
12
|
+
readonly loading: import("@angular/core").WritableSignal<boolean>;
|
|
13
|
+
readonly error: import("@angular/core").WritableSignal<string | null>;
|
|
14
|
+
readonly xmlLang: import("@angular/core").WritableSignal<string>;
|
|
15
|
+
private readonly shiki;
|
|
16
|
+
readonly lineHtmls: import("@angular/core").Signal<string[]>;
|
|
17
|
+
readonly lines: import("@angular/core").Signal<string[]>;
|
|
18
|
+
constructor();
|
|
19
|
+
getToolbarGroups: () => ToolbarGroup[];
|
|
20
|
+
protected trust(html: string): import("@angular/platform-browser").SafeHtml;
|
|
21
|
+
private indentXml;
|
|
22
|
+
private prettyPrintXml;
|
|
23
|
+
private load;
|
|
24
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<XmlRenderer, never>;
|
|
25
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<XmlRenderer, "afp-xml-renderer", never, { "url": { "alias": "url"; "required": true; "isSignal": true; }; "fileName": { "alias": "fileName"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
26
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import type JSZip from 'jszip';
|
|
2
|
+
import { type ZipTreeNode, type PreviewFileInput } from '../../fp-core';
|
|
3
|
+
import type { RendererHandle } from '../base.types';
|
|
4
|
+
import type { ToolbarGroup } from '../toolbar.types';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
export interface ZipToolbarStats {
|
|
7
|
+
files: number;
|
|
8
|
+
dirs: number;
|
|
9
|
+
size: number;
|
|
10
|
+
}
|
|
11
|
+
interface SelectedPreview {
|
|
12
|
+
path: string;
|
|
13
|
+
name: string;
|
|
14
|
+
size: number;
|
|
15
|
+
blobUrl: string;
|
|
16
|
+
}
|
|
17
|
+
interface HoverTipState {
|
|
18
|
+
text: string;
|
|
19
|
+
x: number;
|
|
20
|
+
y: number;
|
|
21
|
+
}
|
|
22
|
+
export declare class ZipRenderer implements RendererHandle {
|
|
23
|
+
url: import("@angular/core").InputSignal<string>;
|
|
24
|
+
nestingDepth: import("@angular/core").InputSignal<number>;
|
|
25
|
+
private readonly emitter;
|
|
26
|
+
private readonly locale;
|
|
27
|
+
private readonly request;
|
|
28
|
+
protected readonly t: import("@eternalheart/file-preview-core").Translator;
|
|
29
|
+
private readonly splitRef;
|
|
30
|
+
readonly zip: import("@angular/core").WritableSignal<JSZip | null>;
|
|
31
|
+
readonly tree: import("@angular/core").WritableSignal<ZipTreeNode | null>;
|
|
32
|
+
readonly loading: import("@angular/core").WritableSignal<boolean>;
|
|
33
|
+
readonly error: import("@angular/core").WritableSignal<string | null>;
|
|
34
|
+
readonly expanded: import("@angular/core").WritableSignal<Set<string>>;
|
|
35
|
+
readonly selected: import("@angular/core").WritableSignal<SelectedPreview | null>;
|
|
36
|
+
readonly previewLoading: import("@angular/core").WritableSignal<boolean>;
|
|
37
|
+
readonly previewError: import("@angular/core").WritableSignal<string | null>;
|
|
38
|
+
readonly hoverTip: import("@angular/core").WritableSignal<HoverTipState | null>;
|
|
39
|
+
readonly totalStats: import("@angular/core").Signal<ZipToolbarStats | null>;
|
|
40
|
+
readonly previewFiles: import("@angular/core").Signal<PreviewFileInput[]>;
|
|
41
|
+
private tipEl;
|
|
42
|
+
constructor();
|
|
43
|
+
getToolbarGroups: () => ToolbarGroup[];
|
|
44
|
+
onToolbarChange: (listener: () => void) => () => void;
|
|
45
|
+
handleToggle(path: string): void;
|
|
46
|
+
handleHover(payload: {
|
|
47
|
+
text: string;
|
|
48
|
+
rect: DOMRect;
|
|
49
|
+
}): void;
|
|
50
|
+
handleLeave(): void;
|
|
51
|
+
handleSelect(node: ZipTreeNode): Promise<void>;
|
|
52
|
+
private revokeCurrent;
|
|
53
|
+
private syncTip;
|
|
54
|
+
private load;
|
|
55
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ZipRenderer, never>;
|
|
56
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ZipRenderer, "afp-zip-renderer", never, { "url": { "alias": "url"; "required": true; "isSignal": true; }; "nestingDepth": { "alias": "nestingDepth"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
57
|
+
}
|
|
58
|
+
export {};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { LucideIconData } from 'lucide-angular';
|
|
2
|
+
import { formatFileSize, type ZipTreeNode } from '../../fp-core';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export declare class ZipTreeItem {
|
|
5
|
+
node: import("@angular/core").InputSignal<ZipTreeNode>;
|
|
6
|
+
depth: import("@angular/core").InputSignal<number>;
|
|
7
|
+
selectedPath: import("@angular/core").InputSignal<string | null>;
|
|
8
|
+
expanded: import("@angular/core").InputSignal<Set<string>>;
|
|
9
|
+
toggle: import("@angular/core").OutputEmitterRef<string>;
|
|
10
|
+
select: import("@angular/core").OutputEmitterRef<ZipTreeNode>;
|
|
11
|
+
hover: import("@angular/core").OutputEmitterRef<{
|
|
12
|
+
text: string;
|
|
13
|
+
rect: DOMRect;
|
|
14
|
+
}>;
|
|
15
|
+
leave: import("@angular/core").OutputEmitterRef<void>;
|
|
16
|
+
protected readonly chevronRight: LucideIconData;
|
|
17
|
+
protected readonly folder: LucideIconData;
|
|
18
|
+
protected readonly folderOpen: LucideIconData;
|
|
19
|
+
protected readonly formatFileSize: typeof formatFileSize;
|
|
20
|
+
readonly padStyle: import("@angular/core").Signal<{
|
|
21
|
+
paddingLeft: string;
|
|
22
|
+
}>;
|
|
23
|
+
readonly isOpen: import("@angular/core").Signal<boolean>;
|
|
24
|
+
readonly isSelected: import("@angular/core").Signal<boolean>;
|
|
25
|
+
readonly fileIcon: import("@angular/core").Signal<LucideIconData>;
|
|
26
|
+
handleEnter(e: MouseEvent): void;
|
|
27
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ZipTreeItem, never>;
|
|
28
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ZipTreeItem, "afp-zip-tree-item", never, { "node": { "alias": "node"; "required": true; "isSignal": true; }; "depth": { "alias": "depth"; "required": true; "isSignal": true; }; "selectedPath": { "alias": "selectedPath"; "required": false; "isSignal": true; }; "expanded": { "alias": "expanded"; "required": true; "isSignal": true; }; }, { "toggle": "toggle"; "select": "select"; "hover": "hover"; "leave": "leave"; }, never, never, true, never>;
|
|
29
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { ToolbarGroup } from './toolbar.types';
|
|
2
|
+
export interface RendererHandle {
|
|
3
|
+
getToolbarGroups: () => ToolbarGroup[];
|
|
4
|
+
onToolbarChange?: (listener: () => void) => (() => void);
|
|
5
|
+
}
|
|
6
|
+
export declare class ToolbarEventEmitter {
|
|
7
|
+
private listeners;
|
|
8
|
+
subscribe(listener: () => void): () => void;
|
|
9
|
+
notify(): void;
|
|
10
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { Type } from '@angular/core';
|
|
2
|
+
export type RendererLoader = () => Promise<Type<unknown>>;
|
|
3
|
+
export declare const loadImageRenderer: RendererLoader;
|
|
4
|
+
export declare const loadPdfRenderer: RendererLoader;
|
|
5
|
+
export declare const loadDocxRenderer: RendererLoader;
|
|
6
|
+
export declare const loadXlsxRenderer: RendererLoader;
|
|
7
|
+
export declare const loadPptxRenderer: RendererLoader;
|
|
8
|
+
export declare const loadMsgRenderer: RendererLoader;
|
|
9
|
+
export declare const loadEpubRenderer: RendererLoader;
|
|
10
|
+
export declare const loadMobiRenderer: RendererLoader;
|
|
11
|
+
export declare const loadVideoRenderer: RendererLoader;
|
|
12
|
+
export declare const loadAudioRenderer: RendererLoader;
|
|
13
|
+
export declare const loadMarkdownRenderer: RendererLoader;
|
|
14
|
+
export declare const loadJsonRenderer: RendererLoader;
|
|
15
|
+
export declare const loadCsvRenderer: RendererLoader;
|
|
16
|
+
export declare const loadXmlRenderer: RendererLoader;
|
|
17
|
+
export declare const loadSubtitleRenderer: RendererLoader;
|
|
18
|
+
export declare const loadZipRenderer: RendererLoader;
|
|
19
|
+
export declare const loadTextRenderer: RendererLoader;
|
|
20
|
+
export declare const loadFontRenderer: RendererLoader;
|
|
21
|
+
export declare const loadCadRenderer: RendererLoader;
|
|
22
|
+
export declare const loadDocRenderer: RendererLoader;
|
|
23
|
+
export declare const loadPptRenderer: RendererLoader;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { FileType, PreviewFile } from '../fp-core';
|
|
2
|
+
import type { RendererLoader } from './lazy';
|
|
3
|
+
export interface RendererContext {
|
|
4
|
+
resolvedUrl: string;
|
|
5
|
+
zipNestingDepth: number;
|
|
6
|
+
currentFile: PreviewFile;
|
|
7
|
+
}
|
|
8
|
+
export interface BuiltinRendererConfig {
|
|
9
|
+
fileType: FileType;
|
|
10
|
+
loader: RendererLoader;
|
|
11
|
+
getProps: (ctx: RendererContext) => Record<string, unknown>;
|
|
12
|
+
}
|
|
13
|
+
export declare const BUILTIN_RENDERERS: BuiltinRendererConfig[];
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { LucideIconData } from 'lucide-angular';
|
|
2
|
+
export interface ToolbarButtonItem {
|
|
3
|
+
type: 'button';
|
|
4
|
+
icon: LucideIconData;
|
|
5
|
+
tooltip: string;
|
|
6
|
+
action: () => void;
|
|
7
|
+
disabled?: boolean;
|
|
8
|
+
active?: boolean;
|
|
9
|
+
ariaKeyshortcuts?: string;
|
|
10
|
+
}
|
|
11
|
+
export interface ToolbarTextItem {
|
|
12
|
+
type: 'text';
|
|
13
|
+
content: string;
|
|
14
|
+
minWidth?: string;
|
|
15
|
+
}
|
|
16
|
+
export type ToolbarItem = ToolbarButtonItem | ToolbarTextItem;
|
|
17
|
+
export interface ToolbarGroup {
|
|
18
|
+
items: ToolbarItem[];
|
|
19
|
+
}
|
package/lib/types.d.ts
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { PreviewFile, PreviewFileLink, PreviewFileInput, FileType, PreviewState, CustomRendererEventPayload, RequestHandler, RequestInitFactory, RequestOptions, Fetcher, ShouldFetchAsBlob, Locale, Translator } from './fp-core';
|
|
2
|
+
import type { Type } from '@angular/core';
|
|
3
|
+
import type { LucideIconData } from 'lucide-angular';
|
|
4
|
+
import type { ToolbarGroup } from './renderers/toolbar.types';
|
|
5
|
+
export type { PreviewFile, PreviewFileLink, PreviewFileInput, FileType, PreviewState, CustomRendererEventPayload, RequestHandler, RequestInitFactory, RequestOptions, Fetcher, ShouldFetchAsBlob, };
|
|
6
|
+
export interface ToolbarAction {
|
|
7
|
+
icon: LucideIconData;
|
|
8
|
+
label: string;
|
|
9
|
+
onClick: () => void;
|
|
10
|
+
disabled?: boolean;
|
|
11
|
+
}
|
|
12
|
+
export interface CustomRendererContext {
|
|
13
|
+
emit: (name: string, payload?: unknown) => void;
|
|
14
|
+
t: Translator;
|
|
15
|
+
theme: 'dark' | 'light';
|
|
16
|
+
locale: Locale;
|
|
17
|
+
}
|
|
18
|
+
export interface CustomRenderer {
|
|
19
|
+
test: (file: PreviewFile) => boolean;
|
|
20
|
+
/**
|
|
21
|
+
* 返回一个 Angular standalone 组件。将以 inputs `{ file, ctx }` 调用。
|
|
22
|
+
*/
|
|
23
|
+
render: (file: PreviewFile, ctx?: CustomRendererContext) => Type<unknown>;
|
|
24
|
+
getToolbarGroups?: (file: PreviewFile, ctx: CustomRendererContext) => ToolbarGroup[];
|
|
25
|
+
events?: readonly string[];
|
|
26
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export declare function createAudioPlayer(): {
|
|
2
|
+
isPlaying: import("@angular/core").WritableSignal<boolean>;
|
|
3
|
+
isLoading: import("@angular/core").WritableSignal<boolean>;
|
|
4
|
+
currentTime: import("@angular/core").WritableSignal<number>;
|
|
5
|
+
duration: import("@angular/core").WritableSignal<number>;
|
|
6
|
+
volume: import("@angular/core").WritableSignal<number>;
|
|
7
|
+
isMuted: import("@angular/core").WritableSignal<boolean>;
|
|
8
|
+
isLoop: import("@angular/core").WritableSignal<boolean>;
|
|
9
|
+
error: import("@angular/core").WritableSignal<string | null>;
|
|
10
|
+
bind: (el: HTMLAudioElement | null) => void;
|
|
11
|
+
togglePlay: () => void;
|
|
12
|
+
seek: (time: number) => void;
|
|
13
|
+
skip: (seconds: number) => void;
|
|
14
|
+
setVolume: (v: number) => void;
|
|
15
|
+
toggleMute: () => void;
|
|
16
|
+
toggleLoop: () => void;
|
|
17
|
+
formattedCurrent: () => string;
|
|
18
|
+
formattedDuration: () => string;
|
|
19
|
+
destroy: () => void;
|
|
20
|
+
};
|