@eternalheart/vue-file-preview 1.3.8 → 1.3.9
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/lib/FilePreviewContent.vue.d.ts +13 -1
- package/lib/FilePreviewContent.vue.d.ts.map +1 -1
- package/lib/FilePreviewEmbed.vue.d.ts +13 -1
- package/lib/FilePreviewEmbed.vue.d.ts.map +1 -1
- package/lib/FilePreviewModal.vue.d.ts +13 -1
- package/lib/FilePreviewModal.vue.d.ts.map +1 -1
- package/lib/chunks/{index-BYzQg-jL.mjs → index-1khRVlUa.mjs} +25 -25
- package/lib/chunks/index-1khRVlUa.mjs.map +1 -0
- package/lib/chunks/{index-DXlcF1Dk.mjs → index-B9Xz5bUB.mjs} +2 -2
- package/lib/chunks/{index-DXlcF1Dk.mjs.map → index-B9Xz5bUB.mjs.map} +1 -1
- package/lib/chunks/{index-C324a7kV.mjs → index-BA-bP8P6.mjs} +789 -649
- package/lib/chunks/index-BA-bP8P6.mjs.map +1 -0
- package/lib/chunks/{index-BoL1b2w-.mjs → index-BP_8GjEV.mjs} +28 -28
- package/lib/chunks/index-BP_8GjEV.mjs.map +1 -0
- package/lib/chunks/{index-CTsscgqY.mjs → index-BVdw1Cc8.mjs} +32 -32
- package/lib/chunks/index-BVdw1Cc8.mjs.map +1 -0
- package/lib/chunks/{index-BCkcZs4y.mjs → index-BqSPk90T.mjs} +30 -30
- package/lib/chunks/index-BqSPk90T.mjs.map +1 -0
- package/lib/chunks/index-BrCSk7CK.mjs +116 -0
- package/lib/chunks/index-BrCSk7CK.mjs.map +1 -0
- package/lib/chunks/{index-5Smm2vx0.mjs → index-Bu8GH1aq.mjs} +27 -27
- package/lib/chunks/index-Bu8GH1aq.mjs.map +1 -0
- package/lib/chunks/{index-D9wf6m37.mjs → index-CYvPRxHK.mjs} +53 -53
- package/lib/chunks/index-CYvPRxHK.mjs.map +1 -0
- package/lib/chunks/{index-lHlugUBI.mjs → index-Cfm88ItA.mjs} +2 -2
- package/lib/chunks/{index-lHlugUBI.mjs.map → index-Cfm88ItA.mjs.map} +1 -1
- package/lib/chunks/{index-C7uOM7XL.mjs → index-CxKVonec.mjs} +52 -52
- package/lib/chunks/index-CxKVonec.mjs.map +1 -0
- package/lib/chunks/index-D6RuC1es.mjs +111 -0
- package/lib/chunks/index-D6RuC1es.mjs.map +1 -0
- package/lib/chunks/{index-dzB4jd9b.mjs → index-DEyjEp-i.mjs} +106 -106
- package/lib/chunks/index-DEyjEp-i.mjs.map +1 -0
- package/lib/chunks/{index-DAo-7spn.mjs → index-DFEd3JaR.mjs} +35 -35
- package/lib/chunks/index-DFEd3JaR.mjs.map +1 -0
- package/lib/chunks/index-DjvWRo53.mjs +281 -0
- package/lib/chunks/index-DjvWRo53.mjs.map +1 -0
- package/lib/chunks/{index-BM9FaQUl.mjs → index-H-QlBdbJ.mjs} +2 -2
- package/lib/chunks/{index-BM9FaQUl.mjs.map → index-H-QlBdbJ.mjs.map} +1 -1
- package/lib/chunks/{index-Bri7VeRx.mjs → index-_llF_WTY.mjs} +46 -46
- package/lib/chunks/index-_llF_WTY.mjs.map +1 -0
- package/lib/chunks/{index-cZn4ih-x.mjs → index-oQRFKvtz.mjs} +13 -13
- package/lib/chunks/{index-cZn4ih-x.mjs.map → index-oQRFKvtz.mjs.map} +1 -1
- package/lib/composables/useRequest.d.ts +24 -0
- package/lib/composables/useRequest.d.ts.map +1 -0
- package/lib/index.cjs +23 -23
- package/lib/index.cjs.map +1 -1
- package/lib/index.css +1 -1
- package/lib/index.mjs +6 -6
- package/lib/renderers/Csv/index.vue.d.ts.map +1 -1
- package/lib/renderers/Docx/index.vue.d.ts.map +1 -1
- package/lib/renderers/Epub/index.vue.d.ts.map +1 -1
- package/lib/renderers/Json/index.vue.d.ts.map +1 -1
- package/lib/renderers/Markdown/index.vue.d.ts.map +1 -1
- package/lib/renderers/Mobi/index.vue.d.ts.map +1 -1
- package/lib/renderers/Msg/index.vue.d.ts.map +1 -1
- package/lib/renderers/Pptx/index.vue.d.ts.map +1 -1
- package/lib/renderers/Subtitle/index.vue.d.ts.map +1 -1
- package/lib/renderers/Text/index.vue.d.ts.map +1 -1
- package/lib/renderers/Xlsx/index.vue.d.ts.map +1 -1
- package/lib/renderers/Xml/index.vue.d.ts.map +1 -1
- package/lib/renderers/Zip/index.vue.d.ts.map +1 -1
- package/lib/types.d.ts +1 -1
- package/lib/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/lib/chunks/index-5Smm2vx0.mjs.map +0 -1
- package/lib/chunks/index-BCkcZs4y.mjs.map +0 -1
- package/lib/chunks/index-BYzQg-jL.mjs.map +0 -1
- package/lib/chunks/index-BoL1b2w-.mjs.map +0 -1
- package/lib/chunks/index-Bri7VeRx.mjs.map +0 -1
- package/lib/chunks/index-C324a7kV.mjs.map +0 -1
- package/lib/chunks/index-C7uOM7XL.mjs.map +0 -1
- package/lib/chunks/index-CTsscgqY.mjs.map +0 -1
- package/lib/chunks/index-Ch7AEfnk.mjs +0 -116
- package/lib/chunks/index-Ch7AEfnk.mjs.map +0 -1
- package/lib/chunks/index-D9wf6m37.mjs.map +0 -1
- package/lib/chunks/index-DAEQe-RI.mjs +0 -111
- package/lib/chunks/index-DAEQe-RI.mjs.map +0 -1
- package/lib/chunks/index-DAo-7spn.mjs.map +0 -1
- package/lib/chunks/index-ELyTQZeF.mjs +0 -281
- package/lib/chunks/index-ELyTQZeF.mjs.map +0 -1
- package/lib/chunks/index-dzB4jd9b.mjs.map +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type PreviewFileInput, type Locale, type Messages, type Theme, type CustomRendererEventPayload } from '@eternalheart/file-preview-core';
|
|
1
|
+
import { type PreviewFile, type PreviewFileInput, type Locale, type Messages, type Theme, type CustomRendererEventPayload, type RequestHandler, type RequestInitFactory, type ShouldFetchAsBlob } from '@eternalheart/file-preview-core';
|
|
2
2
|
import type { CustomRenderer } from './types';
|
|
3
3
|
interface Props {
|
|
4
4
|
files: PreviewFileInput[];
|
|
@@ -16,6 +16,14 @@ interface Props {
|
|
|
16
16
|
headless?: boolean;
|
|
17
17
|
/** 主题模式,默认 'dark' */
|
|
18
18
|
theme?: Theme;
|
|
19
|
+
/** 自定义 RequestInit(或工厂函数):注入 Authorization 等鉴权头 */
|
|
20
|
+
requestInit?: RequestInitFactory;
|
|
21
|
+
/** 自定义请求处理器:完全接管库内 fetch */
|
|
22
|
+
requestHandler?: RequestHandler;
|
|
23
|
+
/** 返回 true 时,对应文件先 fetcher→blob URL 后喂给 image/video/audio/pdf 等 renderer */
|
|
24
|
+
shouldFetchAsBlob?: ShouldFetchAsBlob;
|
|
25
|
+
/** 自定义下载回调;不传时库内默认通过 fetcher 拉 Blob 触发下载 */
|
|
26
|
+
onDownload?: (file: PreviewFile) => void | Promise<void>;
|
|
19
27
|
}
|
|
20
28
|
declare const _default: import("vue").DefineComponent<Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
|
|
21
29
|
close: () => any;
|
|
@@ -26,6 +34,8 @@ declare const _default: import("vue").DefineComponent<Props, {}, {}, {}, {}, imp
|
|
|
26
34
|
onNavigate?: ((index: number) => any) | undefined;
|
|
27
35
|
"onCustom-event"?: ((payload: CustomRendererEventPayload<unknown>) => any) | undefined;
|
|
28
36
|
}>, {
|
|
37
|
+
requestInit: RequestInitFactory;
|
|
38
|
+
requestHandler: RequestHandler;
|
|
29
39
|
mode: "modal" | "embed";
|
|
30
40
|
theme: Theme;
|
|
31
41
|
customRenderers: CustomRenderer[];
|
|
@@ -33,6 +43,8 @@ declare const _default: import("vue").DefineComponent<Props, {}, {}, {}, {}, imp
|
|
|
33
43
|
locale: Locale;
|
|
34
44
|
messages: Partial<Record<Locale, Partial<Messages>>>;
|
|
35
45
|
headless: boolean;
|
|
46
|
+
shouldFetchAsBlob: ShouldFetchAsBlob;
|
|
47
|
+
onDownload: (file: PreviewFile) => void | Promise<void>;
|
|
36
48
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
37
49
|
export default _default;
|
|
38
50
|
//# sourceMappingURL=FilePreviewContent.vue.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FilePreviewContent.vue.d.ts","sourceRoot":"","sources":["../src/FilePreviewContent.vue"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"FilePreviewContent.vue.d.ts","sourceRoot":"","sources":["../src/FilePreviewContent.vue"],"names":[],"mappings":"AAoxBA,OAAO,EAIL,KAAK,WAAW,EAChB,KAAK,gBAAgB,EACrB,KAAK,MAAM,EACX,KAAK,QAAQ,EACb,KAAK,KAAK,EACV,KAAK,0BAA0B,EAC/B,KAAK,cAAc,EACnB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACvB,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EAAE,cAAc,EAAyB,MAAM,SAAS,CAAC;AAqCrE,UAAU,KAAK;IACb,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,cAAc,EAAE,CAAC;IACnC,kCAAkC;IAClC,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;IACzB,qCAAqC;IACrC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS;IACT,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IACtD,8BAA8B;IAC9B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,qBAAqB;IACrB,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,mDAAmD;IACnD,WAAW,CAAC,EAAE,kBAAkB,CAAC;IACjC,4BAA4B;IAC5B,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,4EAA4E;IAC5E,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,4CAA4C;IAC5C,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1D;;;;;;;;;;iBAPe,kBAAkB;oBAEf,cAAc;UAdxB,OAAO,GAAG,OAAO;WAUhB,KAAK;qBAZK,cAAc,EAAE;qBAIhB,MAAM;YAEf,MAAM;cAEJ,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;cAE1C,OAAO;uBAQE,iBAAiB;gBAExB,CAAC,IAAI,EAAE,WAAW,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;;AAwsC1D,wBAQG"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { PreviewFileInput, Locale, Messages, Theme, CustomRendererEventPayload } from '@eternalheart/file-preview-core';
|
|
1
|
+
import type { PreviewFile, PreviewFileInput, Locale, Messages, Theme, CustomRendererEventPayload, RequestHandler, RequestInitFactory, ShouldFetchAsBlob } from '@eternalheart/file-preview-core';
|
|
2
2
|
import type { CustomRenderer } from './types';
|
|
3
3
|
interface Props {
|
|
4
4
|
files: PreviewFileInput[];
|
|
@@ -16,6 +16,14 @@ interface Props {
|
|
|
16
16
|
headless?: boolean;
|
|
17
17
|
/** 主题模式,默认 'dark' */
|
|
18
18
|
theme?: Theme;
|
|
19
|
+
/** 自定义 RequestInit(或工厂函数):注入 Authorization 等鉴权头 */
|
|
20
|
+
requestInit?: RequestInitFactory;
|
|
21
|
+
/** 自定义请求处理器:完全接管库内 fetch */
|
|
22
|
+
requestHandler?: RequestHandler;
|
|
23
|
+
/** 返回 true 时,对应文件先 fetcher→blob URL 后喂给 image/video/audio/pdf 等 renderer */
|
|
24
|
+
shouldFetchAsBlob?: ShouldFetchAsBlob;
|
|
25
|
+
/** 自定义下载回调;不传时库内默认通过 fetcher 拉 Blob 触发下载 */
|
|
26
|
+
onDownload?: (file: PreviewFile) => void | Promise<void>;
|
|
19
27
|
}
|
|
20
28
|
declare const _default: import("vue").DefineComponent<Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
|
|
21
29
|
navigate: (index: number) => any;
|
|
@@ -24,6 +32,8 @@ declare const _default: import("vue").DefineComponent<Props, {}, {}, {}, {}, imp
|
|
|
24
32
|
onNavigate?: ((index: number) => any) | undefined;
|
|
25
33
|
"onCustom-event"?: ((payload: CustomRendererEventPayload<unknown>) => any) | undefined;
|
|
26
34
|
}>, {
|
|
35
|
+
requestInit: RequestInitFactory;
|
|
36
|
+
requestHandler: RequestHandler;
|
|
27
37
|
height: number | string;
|
|
28
38
|
width: number | string;
|
|
29
39
|
theme: Theme;
|
|
@@ -32,6 +42,8 @@ declare const _default: import("vue").DefineComponent<Props, {}, {}, {}, {}, imp
|
|
|
32
42
|
locale: Locale;
|
|
33
43
|
messages: Partial<Record<Locale, Partial<Messages>>>;
|
|
34
44
|
headless: boolean;
|
|
45
|
+
shouldFetchAsBlob: ShouldFetchAsBlob;
|
|
46
|
+
onDownload: (file: PreviewFile) => void | Promise<void>;
|
|
35
47
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
36
48
|
export default _default;
|
|
37
49
|
//# sourceMappingURL=FilePreviewEmbed.vue.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FilePreviewEmbed.vue.d.ts","sourceRoot":"","sources":["../src/FilePreviewEmbed.vue"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"FilePreviewEmbed.vue.d.ts","sourceRoot":"","sources":["../src/FilePreviewEmbed.vue"],"names":[],"mappings":"AAsHA,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,0BAA0B,EAAE,cAAc,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACjM,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAG9C,UAAU,KAAK;IACb,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,cAAc,EAAE,CAAC;IACnC,uBAAuB;IACvB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,uBAAuB;IACvB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,SAAS;IACT,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IACtD,sBAAsB;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,qBAAqB;IACrB,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,mDAAmD;IACnD,WAAW,CAAC,EAAE,kBAAkB,CAAC;IACjC,4BAA4B;IAC5B,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,4EAA4E;IAC5E,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,4CAA4C;IAC5C,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1D;;;;;;;;iBAPe,kBAAkB;oBAEf,cAAc;YAZtB,MAAM,GAAG,MAAM;WAFhB,MAAM,GAAG,MAAM;WAUf,KAAK;kBAbE,MAAM;qBACH,cAAc,EAAE;YAMzB,MAAM;cAEJ,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;cAE1C,OAAO;uBAQE,iBAAiB;gBAExB,CAAC,IAAI,EAAE,WAAW,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;;AAsK1D,wBAQG"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { PreviewFileInput, Locale, Messages, Theme, CustomRendererEventPayload } from '@eternalheart/file-preview-core';
|
|
1
|
+
import type { PreviewFile, PreviewFileInput, Locale, Messages, Theme, CustomRendererEventPayload, RequestHandler, RequestInitFactory, ShouldFetchAsBlob } from '@eternalheart/file-preview-core';
|
|
2
2
|
import type { CustomRenderer } from './types';
|
|
3
3
|
interface Props {
|
|
4
4
|
files: PreviewFileInput[];
|
|
@@ -13,6 +13,14 @@ interface Props {
|
|
|
13
13
|
headless?: boolean;
|
|
14
14
|
/** 主题模式,默认 'dark' */
|
|
15
15
|
theme?: Theme;
|
|
16
|
+
/** 自定义 RequestInit(或工厂函数):注入 Authorization 等鉴权头 */
|
|
17
|
+
requestInit?: RequestInitFactory;
|
|
18
|
+
/** 自定义请求处理器:完全接管库内 fetch */
|
|
19
|
+
requestHandler?: RequestHandler;
|
|
20
|
+
/** 返回 true 时,对应文件先 fetcher→blob URL 后喂给 image/video/audio/pdf 等 renderer */
|
|
21
|
+
shouldFetchAsBlob?: ShouldFetchAsBlob;
|
|
22
|
+
/** 自定义下载回调;不传时库内默认通过 fetcher 拉 Blob 触发下载 */
|
|
23
|
+
onDownload?: (file: PreviewFile) => void | Promise<void>;
|
|
16
24
|
}
|
|
17
25
|
declare const _default: import("vue").DefineComponent<Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
|
|
18
26
|
close: () => any;
|
|
@@ -23,11 +31,15 @@ declare const _default: import("vue").DefineComponent<Props, {}, {}, {}, {}, imp
|
|
|
23
31
|
onNavigate?: ((index: number) => any) | undefined;
|
|
24
32
|
"onCustom-event"?: ((payload: CustomRendererEventPayload<unknown>) => any) | undefined;
|
|
25
33
|
}>, {
|
|
34
|
+
requestInit: RequestInitFactory;
|
|
35
|
+
requestHandler: RequestHandler;
|
|
26
36
|
theme: Theme;
|
|
27
37
|
customRenderers: CustomRenderer[];
|
|
28
38
|
locale: Locale;
|
|
29
39
|
messages: Partial<Record<Locale, Partial<Messages>>>;
|
|
30
40
|
headless: boolean;
|
|
41
|
+
shouldFetchAsBlob: ShouldFetchAsBlob;
|
|
42
|
+
onDownload: (file: PreviewFile) => void | Promise<void>;
|
|
31
43
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
32
44
|
export default _default;
|
|
33
45
|
//# sourceMappingURL=FilePreviewModal.vue.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FilePreviewModal.vue.d.ts","sourceRoot":"","sources":["../src/FilePreviewModal.vue"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"FilePreviewModal.vue.d.ts","sourceRoot":"","sources":["../src/FilePreviewModal.vue"],"names":[],"mappings":"AAoIA,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,0BAA0B,EAAE,cAAc,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACjM,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAI9C,UAAU,KAAK;IACb,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,OAAO,CAAC;IAChB,eAAe,CAAC,EAAE,cAAc,EAAE,CAAC;IACnC,SAAS;IACT,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IACtD,sBAAsB;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,qBAAqB;IACrB,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,mDAAmD;IACnD,WAAW,CAAC,EAAE,kBAAkB,CAAC;IACjC,4BAA4B;IAC5B,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,4EAA4E;IAC5E,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,4CAA4C;IAC5C,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1D;;;;;;;;;;iBAPe,kBAAkB;oBAEf,cAAc;WAJvB,KAAK;qBARK,cAAc,EAAE;YAEzB,MAAM;cAEJ,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;cAE1C,OAAO;uBAQE,iBAAiB;gBAExB,CAAC,IAAI,EAAE,WAAW,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;;AAuN1D,wBAQG"}
|
|
@@ -1,28 +1,28 @@
|
|
|
1
|
-
import { defineComponent as
|
|
1
|
+
import { defineComponent as P, ref as y, onMounted as W, watch as R, onBeforeUnmount as j, openBlock as g, createElementBlock as b, createElementVNode as f, toDisplayString as E, unref as T, createCommentVNode as k, createVNode as F, normalizeStyle as L } from "vue";
|
|
2
2
|
import { Presentation as N } from "lucide-vue-next";
|
|
3
3
|
import { init as D } from "pptx-preview";
|
|
4
|
-
import { u as S } from "./index-
|
|
5
|
-
const
|
|
4
|
+
import { u as S, a as V } from "./index-BA-bP8P6.mjs";
|
|
5
|
+
const q = { class: "vfp-relative vfp-flex vfp-flex-col vfp-items-center vfp-w-full vfp-h-full" }, A = {
|
|
6
6
|
key: 0,
|
|
7
7
|
class: "vfp-absolute vfp-inset-0 vfp-flex vfp-items-center vfp-justify-center vfp-bg-surface-toolbar vfp-backdrop-blur-sm vfp-z-10"
|
|
8
|
-
},
|
|
8
|
+
}, H = { class: "vfp-text-center" }, I = { class: "vfp-text-xs md:vfp-text-sm vfp-text-fg-secondary vfp-font-medium" }, O = {
|
|
9
9
|
key: 1,
|
|
10
10
|
class: "vfp-absolute vfp-inset-0 vfp-flex vfp-items-center vfp-justify-center vfp-bg-surface-toolbar vfp-backdrop-blur-sm vfp-z-10"
|
|
11
|
-
},
|
|
11
|
+
}, U = { class: "vfp-text-center vfp-max-w-sm md:vfp-max-w-md vfp-px-4" }, $ = { class: "vfp-w-24 vfp-h-24 md:vfp-w-32 md:vfp-h-32 vfp-mx-auto vfp-mb-4 md:vfp-mb-6 vfp-rounded-2xl md:vfp-rounded-3xl vfp-bg-gradient-to-br vfp-from-orange-500 vfp-via-red-500 vfp-to-pink-500 vfp-flex vfp-items-center vfp-justify-center vfp-shadow-2xl" }, G = { class: "vfp-text-lg md:vfp-text-xl vfp-text-fg-primary vfp-mb-2 md:vfp-mb-3 vfp-font-medium" }, J = { class: "vfp-text-xs md:vfp-text-sm vfp-text-fg-tertiary vfp-mb-4 md:vfp-mb-6" }, K = ["href"], ee = /* @__PURE__ */ P({
|
|
12
12
|
__name: "index",
|
|
13
13
|
props: {
|
|
14
14
|
url: {},
|
|
15
15
|
tiled: { type: Boolean, default: !0 }
|
|
16
16
|
},
|
|
17
17
|
setup(M) {
|
|
18
|
-
const a = M, { t: l } = S(), s = y(!0), p = y(null), c = y(0), r = y(null);
|
|
18
|
+
const a = M, { t: l } = S(), B = V(), s = y(!0), p = y(null), c = y(0), r = y(null);
|
|
19
19
|
let o = null, m = null, d = null, u = null, h = { width: 0, height: 0 };
|
|
20
20
|
const w = () => {
|
|
21
21
|
var v;
|
|
22
22
|
if (!r.value) return { width: 960, height: 540 };
|
|
23
23
|
const t = r.value.clientWidth, e = ((v = r.value.parentElement) == null ? void 0 : v.clientWidth) || 0, i = t > 100 ? t : e > 100 ? e : 300, n = Math.floor(i * 9 / 16);
|
|
24
24
|
return { width: i, height: n };
|
|
25
|
-
},
|
|
25
|
+
}, C = async () => {
|
|
26
26
|
if (!(!r.value || !d || c.value === 0))
|
|
27
27
|
try {
|
|
28
28
|
if (o)
|
|
@@ -46,7 +46,7 @@ const V = { class: "vfp-relative vfp-flex vfp-flex-col vfp-items-center vfp-w-fu
|
|
|
46
46
|
p.value = l.value("pptx.timeout"), s.value = !1;
|
|
47
47
|
}, 3e4);
|
|
48
48
|
try {
|
|
49
|
-
const e = await
|
|
49
|
+
const e = await B.value(a.url, {
|
|
50
50
|
mode: "cors",
|
|
51
51
|
credentials: "omit",
|
|
52
52
|
redirect: "follow"
|
|
@@ -87,7 +87,7 @@ const V = { class: "vfp-relative vfp-flex vfp-flex-col vfp-items-center vfp-w-fu
|
|
|
87
87
|
e instanceof Error ? i = e.message : typeof e == "string" && (i = e), p.value = i, s.value = !1;
|
|
88
88
|
}
|
|
89
89
|
};
|
|
90
|
-
return
|
|
90
|
+
return W(() => {
|
|
91
91
|
if (!r.value) return;
|
|
92
92
|
let t = !0;
|
|
93
93
|
m = new ResizeObserver(() => {
|
|
@@ -97,42 +97,42 @@ const V = { class: "vfp-relative vfp-flex vfp-flex-col vfp-items-center vfp-w-fu
|
|
|
97
97
|
}
|
|
98
98
|
const e = w(), i = Math.abs(h.width - e.width), n = Math.abs(h.height - e.height);
|
|
99
99
|
i < 10 && n < 10 || (h = e, u !== null && clearTimeout(u), u = window.setTimeout(() => {
|
|
100
|
-
o && d &&
|
|
100
|
+
o && d && C();
|
|
101
101
|
}, 800));
|
|
102
102
|
}), m.observe(r.value), setTimeout(() => {
|
|
103
103
|
requestAnimationFrame(() => requestAnimationFrame(() => z()));
|
|
104
104
|
}, 150);
|
|
105
|
-
}),
|
|
105
|
+
}), R(
|
|
106
106
|
() => a.url,
|
|
107
107
|
() => {
|
|
108
108
|
z();
|
|
109
109
|
}
|
|
110
|
-
),
|
|
110
|
+
), j(() => {
|
|
111
111
|
if (m && m.disconnect(), u !== null && clearTimeout(u), d = null, c.value = 0, o)
|
|
112
112
|
try {
|
|
113
113
|
o.destroy();
|
|
114
114
|
} catch {
|
|
115
115
|
}
|
|
116
116
|
o = null;
|
|
117
|
-
}), (t, e) => (g(), b("div",
|
|
118
|
-
s.value ? (g(), b("div",
|
|
119
|
-
f("div",
|
|
117
|
+
}), (t, e) => (g(), b("div", q, [
|
|
118
|
+
s.value ? (g(), b("div", A, [
|
|
119
|
+
f("div", H, [
|
|
120
120
|
e[0] || (e[0] = f("div", { class: "vfp-w-10 vfp-h-10 md:vfp-w-12 md:vfp-h-12 vfp-mx-auto vfp-mb-3 vfp-border-4 vfp-border-line-strong vfp-border-t-spinner-head vfp-rounded-full vfp-animate-spin" }, null, -1)),
|
|
121
|
-
f("p",
|
|
121
|
+
f("p", I, E(T(l)("pptx.loading")), 1)
|
|
122
122
|
])
|
|
123
123
|
])) : k("", !0),
|
|
124
|
-
p.value && !s.value ? (g(), b("div",
|
|
125
|
-
f("div",
|
|
126
|
-
f("div",
|
|
127
|
-
|
|
124
|
+
p.value && !s.value ? (g(), b("div", O, [
|
|
125
|
+
f("div", U, [
|
|
126
|
+
f("div", $, [
|
|
127
|
+
F(T(N), { class: "vfp-w-12 vfp-h-12 md:vfp-w-16 md:vfp-h-16 vfp-text-fg-primary" })
|
|
128
128
|
]),
|
|
129
|
-
f("p",
|
|
130
|
-
f("p",
|
|
129
|
+
f("p", G, E(T(l)("pptx.load_failed")), 1),
|
|
130
|
+
f("p", J, E(p.value), 1),
|
|
131
131
|
f("a", {
|
|
132
132
|
href: M.url,
|
|
133
133
|
download: "",
|
|
134
134
|
class: "vfp-inline-flex vfp-items-center vfp-gap-2 vfp-px-4 vfp-py-2 md:vfp-px-6 md:vfp-py-3 vfp-bg-gradient-to-r vfp-from-purple-500 vfp-to-pink-500 vfp-text-fg-primary vfp-text-sm md:vfp-text-base vfp-rounded-lg md:vfp-rounded-xl hover:vfp-scale-105 vfp-transition-all vfp-shadow-lg"
|
|
135
|
-
}, " 下载文件 ", 8,
|
|
135
|
+
}, " 下载文件 ", 8, K),
|
|
136
136
|
e[1] || (e[1] = f("p", { class: "vfp-text-xs vfp-text-fg-muted vfp-mt-3 md:vfp-mt-4" }, " 提示:可以使用 Microsoft PowerPoint 或 WPS 打开 ", -1))
|
|
137
137
|
])
|
|
138
138
|
])) : k("", !0),
|
|
@@ -147,6 +147,6 @@ const V = { class: "vfp-relative vfp-flex vfp-flex-col vfp-items-center vfp-w-fu
|
|
|
147
147
|
}
|
|
148
148
|
});
|
|
149
149
|
export {
|
|
150
|
-
|
|
150
|
+
ee as default
|
|
151
151
|
};
|
|
152
|
-
//# sourceMappingURL=index-
|
|
152
|
+
//# sourceMappingURL=index-1khRVlUa.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-1khRVlUa.mjs","sources":["../../src/renderers/Pptx/index.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ref, watch, onMounted, onBeforeUnmount } from 'vue';\nimport { Presentation } from 'lucide-vue-next';\nimport { init } from 'pptx-preview';\nimport { useTranslator } from '../../composables/useTranslator';\nimport { useFetcher } from '../../composables/useRequest';\n\nconst props = withDefaults(\n defineProps<{\n url: string;\n tiled?: boolean;\n }>(),\n { tiled: true }\n);\n\nconst { t } = useTranslator();\nconst fetcher = useFetcher();\n\nconst loading = ref(true);\nconst error = ref<string | null>(null);\nconst slideCount = ref(0);\nconst containerRef = ref<HTMLDivElement | null>(null);\nlet previewer: ReturnType<typeof init> | null = null;\nlet resizeObserver: ResizeObserver | null = null;\nlet arrayBufferRef: ArrayBuffer | null = null;\nlet resizeTimeout: number | null = null;\nlet lastDimensions = { width: 0, height: 0 };\n\nconst calculateDimensions = () => {\n if (!containerRef.value) return { width: 960, height: 540 };\n const rawWidth = containerRef.value.clientWidth;\n const parentWidth = containerRef.value.parentElement?.clientWidth || 0;\n const containerWidth = rawWidth > 100 ? rawWidth : parentWidth > 100 ? parentWidth : 300;\n const height = Math.floor((containerWidth * 9) / 16);\n return { width: containerWidth, height };\n};\n\nconst reinitializePreviewer = async () => {\n if (!containerRef.value || !arrayBufferRef || slideCount.value === 0) return;\n\n try {\n if (previewer) {\n try {\n previewer.destroy();\n } catch {\n // ignore\n }\n }\n\n containerRef.value.innerHTML = '';\n\n const currentDimensions = calculateDimensions();\n previewer = init(containerRef.value, {\n width: currentDimensions.width,\n height: props.tiled ? currentDimensions.height * slideCount.value : currentDimensions.height,\n mode: props.tiled ? 'list' : 'slide',\n });\n\n await previewer.preview(arrayBufferRef);\n } catch {\n // 静默处理\n }\n};\n\nconst loadPptx = async () => {\n if (!containerRef.value) return;\n\n loading.value = true;\n error.value = null;\n\n let timeoutId: number | null = window.setTimeout(() => {\n error.value = t.value('pptx.timeout');\n loading.value = false;\n }, 30000);\n\n try {\n const response = await fetcher.value(props.url, {\n mode: 'cors',\n credentials: 'omit',\n redirect: 'follow',\n });\n\n if (!response.ok) {\n if (response.status === 404) throw new Error(t.value('pptx.not_found'));\n if (response.status === 403) throw new Error('无权限访问此文件');\n if (response.status >= 500) throw new Error('服务器错误,请稍后重试');\n throw new Error(`文件加载失败 (${response.status})`);\n }\n\n const arrayBuffer = await response.arrayBuffer();\n if (arrayBuffer.byteLength === 0) throw new Error('文件为空');\n\n arrayBufferRef = arrayBuffer;\n\n // 步骤 1: 创建隐藏容器获取 slideCount\n const hiddenContainer = document.createElement('div');\n hiddenContainer.style.cssText = 'position:absolute;left:-9999px;top:-9999px;visibility:hidden';\n document.body.appendChild(hiddenContainer);\n\n try {\n const tempPreviewer = init(hiddenContainer, {\n width: 100,\n height: 100,\n mode: 'slide',\n });\n\n try {\n await tempPreviewer.preview(arrayBuffer);\n } catch {\n throw new Error(t.value('pptx.invalid_format'));\n }\n\n const count = tempPreviewer.slideCount;\n if (!count || count === 0) throw new Error(t.value('pptx.no_pages'));\n\n tempPreviewer.destroy();\n\n slideCount.value = count;\n\n if (containerRef.value) {\n containerRef.value.innerHTML = '';\n }\n\n const currentDimensions = calculateDimensions();\n previewer = init(containerRef.value, {\n width: currentDimensions.width,\n height: props.tiled ? currentDimensions.height * count : currentDimensions.height,\n mode: props.tiled ? 'list' : 'slide',\n });\n\n await previewer.preview(arrayBuffer);\n\n if (timeoutId !== null) {\n clearTimeout(timeoutId);\n timeoutId = null;\n }\n\n loading.value = false;\n } finally {\n if (document.body.contains(hiddenContainer)) {\n document.body.removeChild(hiddenContainer);\n }\n }\n } catch (err) {\n if (timeoutId !== null) clearTimeout(timeoutId);\n let errorMsg = t.value('pptx.parse_failed');\n if (err instanceof Error) errorMsg = err.message;\n else if (typeof err === 'string') errorMsg = err;\n error.value = errorMsg;\n loading.value = false;\n }\n};\n\nonMounted(() => {\n if (!containerRef.value) return;\n\n let isInitialRender = true;\n\n resizeObserver = new ResizeObserver(() => {\n if (isInitialRender) {\n isInitialRender = false;\n lastDimensions = calculateDimensions();\n return;\n }\n\n const newDimensions = calculateDimensions();\n const widthDiff = Math.abs(lastDimensions.width - newDimensions.width);\n const heightDiff = Math.abs(lastDimensions.height - newDimensions.height);\n\n if (widthDiff < 10 && heightDiff < 10) return;\n\n lastDimensions = newDimensions;\n\n if (resizeTimeout !== null) clearTimeout(resizeTimeout);\n\n resizeTimeout = window.setTimeout(() => {\n if (previewer && arrayBufferRef) reinitializePreviewer();\n }, 800);\n });\n\n resizeObserver.observe(containerRef.value);\n\n setTimeout(() => {\n requestAnimationFrame(() => requestAnimationFrame(() => loadPptx()));\n }, 150);\n});\n\nwatch(\n () => props.url,\n () => {\n loadPptx();\n }\n);\n\nonBeforeUnmount(() => {\n if (resizeObserver) resizeObserver.disconnect();\n if (resizeTimeout !== null) clearTimeout(resizeTimeout);\n arrayBufferRef = null;\n slideCount.value = 0;\n if (previewer) {\n try {\n previewer.destroy();\n } catch {\n // ignore\n }\n }\n previewer = null;\n});\n</script>\n\n<template>\n <div class=\"vfp-relative vfp-flex vfp-flex-col vfp-items-center vfp-w-full vfp-h-full\">\n <div\n v-if=\"loading\"\n class=\"vfp-absolute vfp-inset-0 vfp-flex vfp-items-center vfp-justify-center vfp-bg-surface-toolbar vfp-backdrop-blur-sm vfp-z-10\"\n >\n <div class=\"vfp-text-center\">\n <div\n class=\"vfp-w-10 vfp-h-10 md:vfp-w-12 md:vfp-h-12 vfp-mx-auto vfp-mb-3 vfp-border-4 vfp-border-line-strong vfp-border-t-spinner-head vfp-rounded-full vfp-animate-spin\"\n />\n <p class=\"vfp-text-xs md:vfp-text-sm vfp-text-fg-secondary vfp-font-medium\">{{ t('pptx.loading') }}</p>\n </div>\n </div>\n\n <div\n v-if=\"error && !loading\"\n class=\"vfp-absolute vfp-inset-0 vfp-flex vfp-items-center vfp-justify-center vfp-bg-surface-toolbar vfp-backdrop-blur-sm vfp-z-10\"\n >\n <div class=\"vfp-text-center vfp-max-w-sm md:vfp-max-w-md vfp-px-4\">\n <div\n class=\"vfp-w-24 vfp-h-24 md:vfp-w-32 md:vfp-h-32 vfp-mx-auto vfp-mb-4 md:vfp-mb-6 vfp-rounded-2xl md:vfp-rounded-3xl vfp-bg-gradient-to-br vfp-from-orange-500 vfp-via-red-500 vfp-to-pink-500 vfp-flex vfp-items-center vfp-justify-center vfp-shadow-2xl\"\n >\n <Presentation class=\"vfp-w-12 vfp-h-12 md:vfp-w-16 md:vfp-h-16 vfp-text-fg-primary\" />\n </div>\n <p class=\"vfp-text-lg md:vfp-text-xl vfp-text-fg-primary vfp-mb-2 md:vfp-mb-3 vfp-font-medium\">\n {{ t('pptx.load_failed') }}\n </p>\n <p class=\"vfp-text-xs md:vfp-text-sm vfp-text-fg-tertiary vfp-mb-4 md:vfp-mb-6\">{{ error }}</p>\n <a\n :href=\"url\"\n download\n class=\"vfp-inline-flex vfp-items-center vfp-gap-2 vfp-px-4 vfp-py-2 md:vfp-px-6 md:vfp-py-3 vfp-bg-gradient-to-r vfp-from-purple-500 vfp-to-pink-500 vfp-text-fg-primary vfp-text-sm md:vfp-text-base vfp-rounded-lg md:vfp-rounded-xl hover:vfp-scale-105 vfp-transition-all vfp-shadow-lg\"\n >\n 下载文件\n </a>\n <p class=\"vfp-text-xs vfp-text-fg-muted vfp-mt-3 md:vfp-mt-4\">\n 提示:可以使用 Microsoft PowerPoint 或 WPS 打开\n </p>\n </div>\n </div>\n\n <div\n v-if=\"!error\"\n ref=\"containerRef\"\n class=\"pptx-wrapper vfp-w-full vfp-max-w-full md:vfp-max-w-6xl\"\n :style=\"{ opacity: loading ? 0 : 1 }\"\n />\n </div>\n</template>\n"],"names":["props","__props","t","useTranslator","fetcher","useFetcher","loading","ref","error","slideCount","containerRef","previewer","resizeObserver","arrayBufferRef","resizeTimeout","lastDimensions","calculateDimensions","rawWidth","parentWidth","_a","containerWidth","height","reinitializePreviewer","currentDimensions","init","loadPptx","timeoutId","response","arrayBuffer","hiddenContainer","tempPreviewer","count","err","errorMsg","onMounted","isInitialRender","newDimensions","widthDiff","heightDiff","watch","onBeforeUnmount","_openBlock","_createElementBlock","_hoisted_1","_hoisted_2","_createElementVNode","_hoisted_3","_hoisted_4","_toDisplayString","_unref","_hoisted_5","_hoisted_6","_hoisted_7","_createVNode","Presentation","_hoisted_8","_hoisted_9","_hoisted_10","_cache"],"mappings":";;;;;;;;;;;;;;;;;AAOA,UAAMA,IAAQC,GAQR,EAAE,GAAAC,EAAA,IAAMC,EAAA,GACRC,IAAUC,EAAA,GAEVC,IAAUC,EAAI,EAAI,GAClBC,IAAQD,EAAmB,IAAI,GAC/BE,IAAaF,EAAI,CAAC,GAClBG,IAAeH,EAA2B,IAAI;AACpD,QAAII,IAA4C,MAC5CC,IAAwC,MACxCC,IAAqC,MACrCC,IAA+B,MAC/BC,IAAiB,EAAE,OAAO,GAAG,QAAQ,EAAA;AAEzC,UAAMC,IAAsB,MAAM;;AAChC,UAAI,CAACN,EAAa,MAAO,QAAO,EAAE,OAAO,KAAK,QAAQ,IAAA;AACtD,YAAMO,IAAWP,EAAa,MAAM,aAC9BQ,MAAcC,IAAAT,EAAa,MAAM,kBAAnB,gBAAAS,EAAkC,gBAAe,GAC/DC,IAAiBH,IAAW,MAAMA,IAAWC,IAAc,MAAMA,IAAc,KAC/EG,IAAS,KAAK,MAAOD,IAAiB,IAAK,EAAE;AACnD,aAAO,EAAE,OAAOA,GAAgB,QAAAC,EAAA;AAAA,IAClC,GAEMC,IAAwB,YAAY;AACxC,UAAI,GAACZ,EAAa,SAAS,CAACG,KAAkBJ,EAAW,UAAU;AAEnE,YAAI;AACF,cAAIE;AACF,gBAAI;AACF,cAAAA,EAAU,QAAA;AAAA,YACZ,QAAQ;AAAA,YAER;AAGF,UAAAD,EAAa,MAAM,YAAY;AAE/B,gBAAMa,IAAoBP,EAAA;AAC1B,UAAAL,IAAYa,EAAKd,EAAa,OAAO;AAAA,YACnC,OAAOa,EAAkB;AAAA,YACzB,QAAQvB,EAAM,QAAQuB,EAAkB,SAASd,EAAW,QAAQc,EAAkB;AAAA,YACtF,MAAMvB,EAAM,QAAQ,SAAS;AAAA,UAAA,CAC9B,GAED,MAAMW,EAAU,QAAQE,CAAc;AAAA,QACxC,QAAQ;AAAA,QAER;AAAA,IACF,GAEMY,IAAW,YAAY;AAC3B,UAAI,CAACf,EAAa,MAAO;AAEzB,MAAAJ,EAAQ,QAAQ,IAChBE,EAAM,QAAQ;AAEd,UAAIkB,IAA2B,OAAO,WAAW,MAAM;AACrD,QAAAlB,EAAM,QAAQN,EAAE,MAAM,cAAc,GACpCI,EAAQ,QAAQ;AAAA,MAClB,GAAG,GAAK;AAER,UAAI;AACF,cAAMqB,IAAW,MAAMvB,EAAQ,MAAMJ,EAAM,KAAK;AAAA,UAC9C,MAAM;AAAA,UACN,aAAa;AAAA,UACb,UAAU;AAAA,QAAA,CACX;AAED,YAAI,CAAC2B,EAAS;AACZ,gBAAIA,EAAS,WAAW,MAAW,IAAI,MAAMzB,EAAE,MAAM,gBAAgB,CAAC,IAClEyB,EAAS,WAAW,MAAW,IAAI,MAAM,UAAU,IACnDA,EAAS,UAAU,MAAW,IAAI,MAAM,aAAa,IACnD,IAAI,MAAM,WAAWA,EAAS,MAAM,GAAG;AAG/C,cAAMC,IAAc,MAAMD,EAAS,YAAA;AACnC,YAAIC,EAAY,eAAe,EAAG,OAAM,IAAI,MAAM,MAAM;AAExD,QAAAf,IAAiBe;AAGjB,cAAMC,IAAkB,SAAS,cAAc,KAAK;AACpD,QAAAA,EAAgB,MAAM,UAAU,gEAChC,SAAS,KAAK,YAAYA,CAAe;AAEzC,YAAI;AACF,gBAAMC,IAAgBN,EAAKK,GAAiB;AAAA,YAC1C,OAAO;AAAA,YACP,QAAQ;AAAA,YACR,MAAM;AAAA,UAAA,CACP;AAED,cAAI;AACF,kBAAMC,EAAc,QAAQF,CAAW;AAAA,UACzC,QAAQ;AACN,kBAAM,IAAI,MAAM1B,EAAE,MAAM,qBAAqB,CAAC;AAAA,UAChD;AAEA,gBAAM6B,IAAQD,EAAc;AAC5B,cAAI,CAACC,KAASA,MAAU,EAAG,OAAM,IAAI,MAAM7B,EAAE,MAAM,eAAe,CAAC;AAEnE,UAAA4B,EAAc,QAAA,GAEdrB,EAAW,QAAQsB,GAEfrB,EAAa,UACfA,EAAa,MAAM,YAAY;AAGjC,gBAAMa,IAAoBP,EAAA;AAC1B,UAAAL,IAAYa,EAAKd,EAAa,OAAO;AAAA,YACnC,OAAOa,EAAkB;AAAA,YACzB,QAAQvB,EAAM,QAAQuB,EAAkB,SAASQ,IAAQR,EAAkB;AAAA,YAC3E,MAAMvB,EAAM,QAAQ,SAAS;AAAA,UAAA,CAC9B,GAED,MAAMW,EAAU,QAAQiB,CAAW,GAE/BF,MAAc,SAChB,aAAaA,CAAS,GACtBA,IAAY,OAGdpB,EAAQ,QAAQ;AAAA,QAClB,UAAA;AACE,UAAI,SAAS,KAAK,SAASuB,CAAe,KACxC,SAAS,KAAK,YAAYA,CAAe;AAAA,QAE7C;AAAA,MACF,SAASG,GAAK;AACZ,QAAIN,MAAc,QAAM,aAAaA,CAAS;AAC9C,YAAIO,IAAW/B,EAAE,MAAM,mBAAmB;AAC1C,QAAI8B,aAAe,QAAOC,IAAWD,EAAI,UAChC,OAAOA,KAAQ,aAAUC,IAAWD,IAC7CxB,EAAM,QAAQyB,GACd3B,EAAQ,QAAQ;AAAA,MAClB;AAAA,IACF;AAEA,WAAA4B,EAAU,MAAM;AACd,UAAI,CAACxB,EAAa,MAAO;AAEzB,UAAIyB,IAAkB;AAEtB,MAAAvB,IAAiB,IAAI,eAAe,MAAM;AACxC,YAAIuB,GAAiB;AACnB,UAAAA,IAAkB,IAClBpB,IAAiBC,EAAA;AACjB;AAAA,QACF;AAEA,cAAMoB,IAAgBpB,EAAA,GAChBqB,IAAY,KAAK,IAAItB,EAAe,QAAQqB,EAAc,KAAK,GAC/DE,IAAa,KAAK,IAAIvB,EAAe,SAASqB,EAAc,MAAM;AAExE,QAAIC,IAAY,MAAMC,IAAa,OAEnCvB,IAAiBqB,GAEbtB,MAAkB,QAAM,aAAaA,CAAa,GAEtDA,IAAgB,OAAO,WAAW,MAAM;AACtC,UAAIH,KAAaE,KAAgBS,EAAA;AAAA,QACnC,GAAG,GAAG;AAAA,MACR,CAAC,GAEDV,EAAe,QAAQF,EAAa,KAAK,GAEzC,WAAW,MAAM;AACf,8BAAsB,MAAM,sBAAsB,MAAMe,EAAA,CAAU,CAAC;AAAA,MACrE,GAAG,GAAG;AAAA,IACR,CAAC,GAEDc;AAAA,MACE,MAAMvC,EAAM;AAAA,MACZ,MAAM;AACJ,QAAAyB,EAAA;AAAA,MACF;AAAA,IAAA,GAGFe,EAAgB,MAAM;AAKpB,UAJI5B,OAA+B,WAAA,GAC/BE,MAAkB,QAAM,aAAaA,CAAa,GACtDD,IAAiB,MACjBJ,EAAW,QAAQ,GACfE;AACF,YAAI;AACF,UAAAA,EAAU,QAAA;AAAA,QACZ,QAAQ;AAAA,QAER;AAEF,MAAAA,IAAY;AAAA,IACd,CAAC,cAIC8B,EAAA,GAAAC,EA8CM,OA9CNC,GA8CM;AAAA,MA5CIrC,EAAA,SADRmC,EAAA,GAAAC,EAUM,OAVNE,GAUM;AAAA,QANJC,EAKM,OALNC,GAKM;AAAA,0BAJJD,EAEE,OAAA,EADA,OAAM,iKAAA,GAAgK,MAAA,EAAA;AAAA,UAExKA,EAAuG,KAAvGE,GAAuGC,EAAxBC,EAAA/C,CAAA,EAAC,cAAA,CAAA,GAAA,CAAA;AAAA,QAAA;;MAK5EM,EAAA,UAAUF,EAAA,SADlBmC,KAAAC,EAyBM,OAzBNQ,GAyBM;AAAA,QArBJL,EAoBM,OApBNM,GAoBM;AAAA,UAnBJN,EAIM,OAJNO,GAIM;AAAA,YADJC,EAAsFJ,EAAAK,CAAA,GAAA,EAAxE,OAAM,iEAA+D;AAAA,UAAA;UAErFT,EAEI,KAFJU,GAEIP,EADCC,EAAA/C,CAAA,EAAC,kBAAA,CAAA,GAAA,CAAA;AAAA,UAEN2C,EAA+F,KAA/FW,GAA+FR,EAAZxC,EAAA,KAAK,GAAA,CAAA;AAAA,UACxFqC,EAMI,KAAA;AAAA,YALD,MAAM5C,EAAA;AAAA,YACP,UAAA;AAAA,YACA,OAAM;AAAA,UAAA,GACP,UAED,GAAAwD,CAAA;AAAA,UACAC,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAAb,EAEI,KAAA,EAFD,OAAM,wDAAqD,2CAE9D,EAAA;AAAA,QAAA;;MAKKrC,EAAA,0BADTkC,EAKE,OAAA;AAAA;iBAHI;AAAA,QAAJ,KAAIhC;AAAA,QACJ,OAAM;AAAA,QACL,oBAAkBJ,EAAA,QAAO,IAAA,GAAA;AAAA,MAAA;;;;"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { defineComponent as x, ref as p, onMounted as g, watch as k, onBeforeUnmount as b, openBlock as a, createElementBlock as d, createElementVNode as t, toDisplayString as c, unref as m, createCommentVNode as w } from "vue";
|
|
2
2
|
import j from "video.js";
|
|
3
|
-
import { u as T,
|
|
3
|
+
import { u as T, p as h } from "./index-BA-bP8P6.mjs";
|
|
4
4
|
const C = {
|
|
5
5
|
key: 0,
|
|
6
6
|
class: "vfp-flex vfp-items-center vfp-justify-center vfp-w-full vfp-h-full"
|
|
@@ -110,4 +110,4 @@ const C = {
|
|
|
110
110
|
export {
|
|
111
111
|
A as default
|
|
112
112
|
};
|
|
113
|
-
//# sourceMappingURL=index-
|
|
113
|
+
//# sourceMappingURL=index-B9Xz5bUB.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-
|
|
1
|
+
{"version":3,"file":"index-B9Xz5bUB.mjs","sources":["../../src/renderers/Video/index.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ref, onMounted, onBeforeUnmount, watch } from 'vue';\nimport videojs from 'video.js';\nimport 'video.js/dist/video-js.css';\nimport { getVideoMimeType } from '@eternalheart/file-preview-core';\nimport { useTranslator } from '../../composables/useTranslator';\n\ntype VideoJsPlayer = ReturnType<typeof videojs>;\n\nconst props = defineProps<{\n url: string;\n}>();\n\nconst { t } = useTranslator();\n\nconst error = ref<string | null>(null);\nconst isLoading = ref(true);\nconst videoContainerRef = ref<HTMLDivElement | null>(null);\nlet player: VideoJsPlayer | null = null;\n\nconst initPlayer = () => {\n if (!videoContainerRef.value || player) return;\n\n const videoElement = document.createElement('video-js');\n videoElement.classList.add('vjs-big-play-centered', 'vjs-theme-apple');\n videoContainerRef.value.appendChild(videoElement);\n\n const videoType = getVideoMimeType(props.url);\n\n const sources =\n videoType === 'video/quicktime'\n ? [\n { src: props.url, type: 'video/quicktime' },\n { src: props.url, type: 'video/mp4' },\n ]\n : [{ src: props.url, type: videoType }];\n\n player = videojs(videoElement, {\n controls: true,\n fill: true,\n preload: 'auto',\n controlBar: {\n children: [\n 'playToggle',\n 'volumePanel',\n 'currentTimeDisplay',\n 'timeDivider',\n 'durationDisplay',\n 'progressControl',\n 'remainingTimeDisplay',\n 'fullscreenToggle',\n ],\n volumePanel: {\n inline: false,\n },\n },\n html5: {\n vhs: {\n overrideNative: true,\n },\n nativeVideoTracks: false,\n nativeAudioTracks: false,\n nativeTextTracks: false,\n },\n sources,\n });\n\n const videoEl = player.el().querySelector('video');\n if (videoEl) {\n (videoEl as HTMLVideoElement).style.objectFit = 'contain';\n }\n\n player.on('loadeddata', () => {\n isLoading.value = false;\n });\n\n player.on('error', () => {\n const err = player?.error();\n console.error('Video.js error:', err);\n error.value = t.value('video.load_failed_with_error', { error: err?.message || t.value('common.unknown_error') });\n isLoading.value = false;\n });\n};\n\nonMounted(initPlayer);\n\nwatch(\n () => props.url,\n () => {\n if (player && !player.isDisposed()) {\n player.src({ src: props.url, type: getVideoMimeType(props.url) });\n }\n }\n);\n\nonBeforeUnmount(() => {\n if (player && !player.isDisposed()) {\n player.dispose();\n player = null;\n }\n});\n</script>\n\n<template>\n <div v-if=\"error\" class=\"vfp-flex vfp-items-center vfp-justify-center vfp-w-full vfp-h-full\">\n <div class=\"vfp-text-center\">\n <div\n class=\"vfp-w-16 vfp-h-16 vfp-mx-auto vfp-mb-4 vfp-rounded-full vfp-bg-red-500/10 vfp-flex vfp-items-center vfp-justify-center\"\n >\n <svg\n class=\"vfp-w-8 vfp-h-8 vfp-text-red-400\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n d=\"M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z\"\n />\n </svg>\n </div>\n <p class=\"vfp-text-lg vfp-font-medium vfp-text-fg-primary vfp-mb-2\">{{ t('video.load_failed') }}</p>\n <p class=\"vfp-text-sm vfp-text-fg-tertiary\">{{ error }}</p>\n </div>\n </div>\n\n <div v-else class=\"vfp-flex vfp-items-center vfp-justify-center vfp-w-full vfp-h-full\">\n <div class=\"vfp-w-full vfp-h-full vfp-relative\">\n <div\n v-if=\"isLoading\"\n class=\"vfp-absolute vfp-inset-0 vfp-flex vfp-items-center vfp-justify-center vfp-bg-surface-3 vfp-backdrop-blur-sm vfp-z-10\"\n >\n <div class=\"vfp-text-center\">\n <div\n class=\"vfp-w-12 vfp-h-12 vfp-mx-auto vfp-mb-3 vfp-border-4 vfp-border-line-strong vfp-border-t-spinner-head vfp-rounded-full vfp-animate-spin\"\n />\n <p class=\"vfp-text-sm vfp-text-fg-secondary vfp-font-medium\">{{ t('video.loading') }}</p>\n </div>\n </div>\n\n <div\n ref=\"videoContainerRef\"\n class=\"vfp-overflow-hidden vfp-w-full vfp-h-full\"\n style=\"box-shadow: 0 20px 60px rgba(0, 0, 0, 0.4), 0 0 0 1px rgba(255, 255, 255, 0.05)\"\n />\n </div>\n </div>\n</template>\n"],"names":["props","__props","t","useTranslator","error","ref","isLoading","videoContainerRef","player","onMounted","videoElement","videoType","getVideoMimeType","sources","videojs","videoEl","err","watch","onBeforeUnmount","_openBlock","_createElementBlock","_hoisted_1","_createElementVNode","_hoisted_2","_hoisted_3","_toDisplayString","_unref","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9"],"mappings":"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"}
|