@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,78 @@
|
|
|
1
|
+
class i {
|
|
2
|
+
async needsDecode(t) {
|
|
3
|
+
return t === "image/vnd.adobe.photoshop";
|
|
4
|
+
}
|
|
5
|
+
async decode(t, a) {
|
|
6
|
+
var n;
|
|
7
|
+
try {
|
|
8
|
+
const e = await import('ag-psd'), r = e.readPsd || ((n = e.default) == null ? void 0 : n.readPsd);
|
|
9
|
+
if (typeof r != "function")
|
|
10
|
+
throw new Error("ag-psd 库 API 不符合预期");
|
|
11
|
+
const s = t instanceof Blob ? await t.arrayBuffer() : t, d = r(s, {
|
|
12
|
+
skipLayerImageData: !0,
|
|
13
|
+
// 不需要单独图层数据
|
|
14
|
+
skipCompositeImageData: !1,
|
|
15
|
+
// 需要合并预览
|
|
16
|
+
skipThumbnail: !0,
|
|
17
|
+
// 保留像素数据,避免 Worker 环境依赖 document/HTMLCanvasElement
|
|
18
|
+
useImageData: !0
|
|
19
|
+
});
|
|
20
|
+
if (d.imageData && d.width && d.height) {
|
|
21
|
+
const c = new ImageData(
|
|
22
|
+
new Uint8ClampedArray(d.imageData.data || d.imageData),
|
|
23
|
+
d.width,
|
|
24
|
+
d.height
|
|
25
|
+
);
|
|
26
|
+
return await f(c, (a == null ? void 0 : a.outputFormat) || "image/png");
|
|
27
|
+
}
|
|
28
|
+
throw new Error("PSD 文件不包含合并的预览图像(可能仅含图层数据)");
|
|
29
|
+
} catch (e) {
|
|
30
|
+
throw new Error(`PSD 解码失败: ${(e == null ? void 0 : e.message) || "未知错误"}`);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
async getMetadata(t) {
|
|
34
|
+
var a;
|
|
35
|
+
try {
|
|
36
|
+
const n = await import('ag-psd'), e = n.readPsd || ((a = n.default) == null ? void 0 : a.readPsd);
|
|
37
|
+
if (typeof e != "function")
|
|
38
|
+
return { format: "psd" };
|
|
39
|
+
const r = t instanceof Blob ? await t.arrayBuffer() : t, s = e(r, {
|
|
40
|
+
skipLayerImageData: !0,
|
|
41
|
+
skipCompositeImageData: !0,
|
|
42
|
+
skipThumbnail: !0
|
|
43
|
+
});
|
|
44
|
+
return {
|
|
45
|
+
format: "psd",
|
|
46
|
+
width: s.width,
|
|
47
|
+
height: s.height
|
|
48
|
+
};
|
|
49
|
+
} catch {
|
|
50
|
+
return { format: "psd" };
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
async function f(o, t) {
|
|
55
|
+
if (typeof OffscreenCanvas < "u") {
|
|
56
|
+
const e = new OffscreenCanvas(o.width, o.height), r = e.getContext("2d");
|
|
57
|
+
if (!r) throw new Error("无法创建 OffscreenCanvas 2D 上下文");
|
|
58
|
+
return r.putImageData(o, 0, 0), e.convertToBlob({ type: t });
|
|
59
|
+
}
|
|
60
|
+
if (typeof document > "u")
|
|
61
|
+
throw new Error("当前 Worker 环境不支持 OffscreenCanvas");
|
|
62
|
+
const a = document.createElement("canvas");
|
|
63
|
+
a.width = o.width, a.height = o.height;
|
|
64
|
+
const n = a.getContext("2d");
|
|
65
|
+
if (!n) throw new Error("无法创建 Canvas 2D 上下文");
|
|
66
|
+
return n.putImageData(o, 0, 0), new Promise((e, r) => {
|
|
67
|
+
a.toBlob(
|
|
68
|
+
(s) => {
|
|
69
|
+
s ? e(s) : r(new Error("PSD Canvas 转换为 Blob 失败"));
|
|
70
|
+
},
|
|
71
|
+
t
|
|
72
|
+
);
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
const u = new i();
|
|
76
|
+
|
|
77
|
+
export { u as default };
|
|
78
|
+
//# sourceMappingURL=eternalheart-angular-file-preview-psdLoader-D5CkupyY-D5Gegcdg.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eternalheart-angular-file-preview-psdLoader-D5CkupyY-D5Gegcdg.mjs","sources":["../../../file-preview-core/lib/psdLoader-D5CkupyY.js"],"sourcesContent":["class i {\n async needsDecode(t) {\n return t === \"image/vnd.adobe.photoshop\";\n }\n async decode(t, a) {\n var n;\n try {\n const e = await import(\"ag-psd\"), r = e.readPsd || ((n = e.default) == null ? void 0 : n.readPsd);\n if (typeof r != \"function\")\n throw new Error(\"ag-psd 库 API 不符合预期\");\n const s = t instanceof Blob ? await t.arrayBuffer() : t, d = r(s, {\n skipLayerImageData: !0,\n // 不需要单独图层数据\n skipCompositeImageData: !1,\n // 需要合并预览\n skipThumbnail: !0,\n // 保留像素数据,避免 Worker 环境依赖 document/HTMLCanvasElement\n useImageData: !0\n });\n if (d.imageData && d.width && d.height) {\n const c = new ImageData(\n new Uint8ClampedArray(d.imageData.data || d.imageData),\n d.width,\n d.height\n );\n return await f(c, (a == null ? void 0 : a.outputFormat) || \"image/png\");\n }\n throw new Error(\"PSD 文件不包含合并的预览图像(可能仅含图层数据)\");\n } catch (e) {\n throw new Error(`PSD 解码失败: ${(e == null ? void 0 : e.message) || \"未知错误\"}`);\n }\n }\n async getMetadata(t) {\n var a;\n try {\n const n = await import(\"ag-psd\"), e = n.readPsd || ((a = n.default) == null ? void 0 : a.readPsd);\n if (typeof e != \"function\")\n return { format: \"psd\" };\n const r = t instanceof Blob ? await t.arrayBuffer() : t, s = e(r, {\n skipLayerImageData: !0,\n skipCompositeImageData: !0,\n skipThumbnail: !0\n });\n return {\n format: \"psd\",\n width: s.width,\n height: s.height\n };\n } catch {\n return { format: \"psd\" };\n }\n }\n}\nasync function f(o, t) {\n if (typeof OffscreenCanvas < \"u\") {\n const e = new OffscreenCanvas(o.width, o.height), r = e.getContext(\"2d\");\n if (!r) throw new Error(\"无法创建 OffscreenCanvas 2D 上下文\");\n return r.putImageData(o, 0, 0), e.convertToBlob({ type: t });\n }\n if (typeof document > \"u\")\n throw new Error(\"当前 Worker 环境不支持 OffscreenCanvas\");\n const a = document.createElement(\"canvas\");\n a.width = o.width, a.height = o.height;\n const n = a.getContext(\"2d\");\n if (!n) throw new Error(\"无法创建 Canvas 2D 上下文\");\n return n.putImageData(o, 0, 0), new Promise((e, r) => {\n a.toBlob(\n (s) => {\n s ? e(s) : r(new Error(\"PSD Canvas 转换为 Blob 失败\"));\n },\n t\n );\n });\n}\nconst u = new i();\nexport {\n u as default\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
const p = /* @__PURE__ */ new Set([
|
|
2
|
+
"image/x-canon-cr2",
|
|
3
|
+
"image/x-nikon-nef",
|
|
4
|
+
"image/x-sony-arw",
|
|
5
|
+
"image/x-adobe-dng",
|
|
6
|
+
"image/x-fuji-raf",
|
|
7
|
+
"image/x-olympus-orf"
|
|
8
|
+
]);
|
|
9
|
+
async function b(r) {
|
|
10
|
+
const e = new Uint8Array(r);
|
|
11
|
+
if (e.length < 8) return null;
|
|
12
|
+
let a;
|
|
13
|
+
if (e[0] === 73 && e[1] === 73)
|
|
14
|
+
a = true;
|
|
15
|
+
else if (e[0] === 77 && e[1] === 77)
|
|
16
|
+
a = false;
|
|
17
|
+
else
|
|
18
|
+
return w(e);
|
|
19
|
+
const l = new DataView(r), t = (o) => l.getUint16(o, a), f = (o) => l.getUint32(o, a);
|
|
20
|
+
if (t(2) !== 42)
|
|
21
|
+
return w(e);
|
|
22
|
+
let n = f(4), i = 0, s = 0;
|
|
23
|
+
for (let o = 0; o < 10 && n !== 0 && n + 2 < e.length; o++) {
|
|
24
|
+
const h = t(n);
|
|
25
|
+
let c = 0, g = 0;
|
|
26
|
+
for (let u = 0; u < h; u++) {
|
|
27
|
+
const d = n + 2 + u * 12;
|
|
28
|
+
if (d + 12 > e.length) break;
|
|
29
|
+
const j = t(d), x = d + 8;
|
|
30
|
+
j === 513 ? c = f(x) : j === 514 && (g = f(x));
|
|
31
|
+
}
|
|
32
|
+
c > 0 && g > s && c + g <= e.length && (i = c, s = g);
|
|
33
|
+
const m = n + 2 + h * 12;
|
|
34
|
+
if (m + 4 > e.length) break;
|
|
35
|
+
n = f(m);
|
|
36
|
+
}
|
|
37
|
+
return i > 0 && s > 0 ? new Blob([e.slice(i, i + s)], {
|
|
38
|
+
type: "image/jpeg"
|
|
39
|
+
}) : w(e);
|
|
40
|
+
}
|
|
41
|
+
function w(r) {
|
|
42
|
+
let e = -1, a = -1, l = 0;
|
|
43
|
+
for (let t = 0; t < r.length - 4; t++)
|
|
44
|
+
if (r[t] === 255 && r[t + 1] === 216 && r[t + 2] === 255) {
|
|
45
|
+
const f = t;
|
|
46
|
+
for (let n = t + 2; n < r.length - 1; n++)
|
|
47
|
+
if (r[n] === 255 && r[n + 1] === 217) {
|
|
48
|
+
const i = n + 2 - f;
|
|
49
|
+
i > l && (e = f, a = n + 2, l = i), t = n + 2;
|
|
50
|
+
break;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return e >= 0 && a > e ? new Blob([r.slice(e, a)], { type: "image/jpeg" }) : null;
|
|
54
|
+
}
|
|
55
|
+
class y {
|
|
56
|
+
async needsDecode(e) {
|
|
57
|
+
return p.has(e);
|
|
58
|
+
}
|
|
59
|
+
async decode(e, a) {
|
|
60
|
+
const l = e instanceof Blob ? await e.arrayBuffer() : e;
|
|
61
|
+
if (!(a != null && a.fullQuality)) {
|
|
62
|
+
const f = await b(l);
|
|
63
|
+
if (f)
|
|
64
|
+
return f;
|
|
65
|
+
throw new Error("未在 RAW 文件中找到嵌入的预览图像(该文件可能已被剥离 JPEG 预览)。");
|
|
66
|
+
}
|
|
67
|
+
const t = await b(l);
|
|
68
|
+
if (t)
|
|
69
|
+
return t;
|
|
70
|
+
throw new Error("完整 RAW 解码暂未实现,且无法提取嵌入预览图。");
|
|
71
|
+
}
|
|
72
|
+
async getMetadata(e) {
|
|
73
|
+
return {
|
|
74
|
+
format: "raw"
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
const E = new y();
|
|
79
|
+
|
|
80
|
+
export { E as default };
|
|
81
|
+
//# sourceMappingURL=eternalheart-angular-file-preview-rawLoader-0mLvxCNp-CCXn9Rdp.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eternalheart-angular-file-preview-rawLoader-0mLvxCNp-CCXn9Rdp.mjs","sources":["../../../file-preview-core/lib/rawLoader-0mLvxCNp.js"],"sourcesContent":["const p = /* @__PURE__ */ new Set([\n \"image/x-canon-cr2\",\n \"image/x-nikon-nef\",\n \"image/x-sony-arw\",\n \"image/x-adobe-dng\",\n \"image/x-fuji-raf\",\n \"image/x-olympus-orf\"\n]);\nasync function b(r) {\n const e = new Uint8Array(r);\n if (e.length < 8) return null;\n let a;\n if (e[0] === 73 && e[1] === 73)\n a = !0;\n else if (e[0] === 77 && e[1] === 77)\n a = !1;\n else\n return w(e);\n const l = new DataView(r), t = (o) => l.getUint16(o, a), f = (o) => l.getUint32(o, a);\n if (t(2) !== 42)\n return w(e);\n let n = f(4), i = 0, s = 0;\n for (let o = 0; o < 10 && n !== 0 && n + 2 < e.length; o++) {\n const h = t(n);\n let c = 0, g = 0;\n for (let u = 0; u < h; u++) {\n const d = n + 2 + u * 12;\n if (d + 12 > e.length) break;\n const j = t(d), x = d + 8;\n j === 513 ? c = f(x) : j === 514 && (g = f(x));\n }\n c > 0 && g > s && c + g <= e.length && (i = c, s = g);\n const m = n + 2 + h * 12;\n if (m + 4 > e.length) break;\n n = f(m);\n }\n return i > 0 && s > 0 ? new Blob([e.slice(i, i + s)], {\n type: \"image/jpeg\"\n }) : w(e);\n}\nfunction w(r) {\n let e = -1, a = -1, l = 0;\n for (let t = 0; t < r.length - 4; t++)\n if (r[t] === 255 && r[t + 1] === 216 && r[t + 2] === 255) {\n const f = t;\n for (let n = t + 2; n < r.length - 1; n++)\n if (r[n] === 255 && r[n + 1] === 217) {\n const i = n + 2 - f;\n i > l && (e = f, a = n + 2, l = i), t = n + 2;\n break;\n }\n }\n return e >= 0 && a > e ? new Blob([r.slice(e, a)], { type: \"image/jpeg\" }) : null;\n}\nclass y {\n async needsDecode(e) {\n return p.has(e);\n }\n async decode(e, a) {\n const l = e instanceof Blob ? await e.arrayBuffer() : e;\n if (!(a != null && a.fullQuality)) {\n const f = await b(l);\n if (f)\n return f;\n throw new Error(\"未在 RAW 文件中找到嵌入的预览图像(该文件可能已被剥离 JPEG 预览)。\");\n }\n const t = await b(l);\n if (t)\n return t;\n throw new Error(\"完整 RAW 解码暂未实现,且无法提取嵌入预览图。\");\n }\n async getMetadata(e) {\n return {\n format: \"raw\"\n };\n }\n}\nconst E = new y();\nexport {\n E as default\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
class y {
|
|
2
|
+
/**
|
|
3
|
+
* TIFF 浏览器均不原生支持(除 Safari 部分版本),始终需要解码
|
|
4
|
+
*/
|
|
5
|
+
async needsDecode(a) {
|
|
6
|
+
return a === "image/tiff";
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* 解码 TIFF 文件为 PNG Blob
|
|
10
|
+
*/
|
|
11
|
+
async decode(a, r) {
|
|
12
|
+
try {
|
|
13
|
+
const e = await import('utif'), n = a instanceof Blob ? await a.arrayBuffer() : a, t = e.decode(n);
|
|
14
|
+
if (t.length === 0)
|
|
15
|
+
throw new Error("TIFF 文件不包含任何图像");
|
|
16
|
+
const f = Math.max(0, Math.min(((r == null ? void 0 : r.page) ?? 1) - 1, t.length - 1)), c = t[f];
|
|
17
|
+
e.decodeImage(n, c);
|
|
18
|
+
const w = e.toRGBA8(c), h = c.width, d = c.height, o = document.createElement("canvas");
|
|
19
|
+
o.width = h, o.height = d;
|
|
20
|
+
const g = o.getContext("2d");
|
|
21
|
+
if (!g)
|
|
22
|
+
throw new Error("无法创建 Canvas 2D 上下文");
|
|
23
|
+
const i = new ImageData(new Uint8ClampedArray(w.buffer), h, d);
|
|
24
|
+
return g.putImageData(i, 0, 0), new Promise((m, u) => {
|
|
25
|
+
o.toBlob(
|
|
26
|
+
(s) => {
|
|
27
|
+
s ? m(s) : u(new Error("TIFF Canvas 转换为 PNG 失败"));
|
|
28
|
+
},
|
|
29
|
+
(r == null ? void 0 : r.outputFormat) || "image/png"
|
|
30
|
+
);
|
|
31
|
+
});
|
|
32
|
+
} catch (e) {
|
|
33
|
+
throw new Error(`TIFF 解码失败: ${(e == null ? void 0 : e.message) || "未知错误"}`);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* 获取 TIFF 元数据(包括页数)
|
|
38
|
+
*/
|
|
39
|
+
async getMetadata(a) {
|
|
40
|
+
try {
|
|
41
|
+
const r = await import('utif'), e = a instanceof Blob ? await a.arrayBuffer() : a, n = r.decode(e), t = n[0];
|
|
42
|
+
return {
|
|
43
|
+
format: "tiff",
|
|
44
|
+
pageCount: n.length,
|
|
45
|
+
width: t == null ? void 0 : t.width,
|
|
46
|
+
height: t == null ? void 0 : t.height
|
|
47
|
+
};
|
|
48
|
+
} catch {
|
|
49
|
+
return {
|
|
50
|
+
format: "tiff",
|
|
51
|
+
pageCount: 1
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
const B = new y();
|
|
57
|
+
|
|
58
|
+
export { B as default };
|
|
59
|
+
//# sourceMappingURL=eternalheart-angular-file-preview-tiffLoader-CmUAD1vO-0JqIws9t.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eternalheart-angular-file-preview-tiffLoader-CmUAD1vO-0JqIws9t.mjs","sources":["../../../file-preview-core/lib/tiffLoader-CmUAD1vO.js"],"sourcesContent":["class y {\n /**\n * TIFF 浏览器均不原生支持(除 Safari 部分版本),始终需要解码\n */\n async needsDecode(a) {\n return a === \"image/tiff\";\n }\n /**\n * 解码 TIFF 文件为 PNG Blob\n */\n async decode(a, r) {\n try {\n const e = await import(\"utif\"), n = a instanceof Blob ? await a.arrayBuffer() : a, t = e.decode(n);\n if (t.length === 0)\n throw new Error(\"TIFF 文件不包含任何图像\");\n const f = Math.max(0, Math.min(((r == null ? void 0 : r.page) ?? 1) - 1, t.length - 1)), c = t[f];\n e.decodeImage(n, c);\n const w = e.toRGBA8(c), h = c.width, d = c.height, o = document.createElement(\"canvas\");\n o.width = h, o.height = d;\n const g = o.getContext(\"2d\");\n if (!g)\n throw new Error(\"无法创建 Canvas 2D 上下文\");\n const i = new ImageData(new Uint8ClampedArray(w.buffer), h, d);\n return g.putImageData(i, 0, 0), new Promise((m, u) => {\n o.toBlob(\n (s) => {\n s ? m(s) : u(new Error(\"TIFF Canvas 转换为 PNG 失败\"));\n },\n (r == null ? void 0 : r.outputFormat) || \"image/png\"\n );\n });\n } catch (e) {\n throw new Error(`TIFF 解码失败: ${(e == null ? void 0 : e.message) || \"未知错误\"}`);\n }\n }\n /**\n * 获取 TIFF 元数据(包括页数)\n */\n async getMetadata(a) {\n try {\n const r = await import(\"utif\"), e = a instanceof Blob ? await a.arrayBuffer() : a, n = r.decode(e), t = n[0];\n return {\n format: \"tiff\",\n pageCount: n.length,\n width: t == null ? void 0 : t.width,\n height: t == null ? void 0 : t.height\n };\n } catch {\n return {\n format: \"tiff\",\n pageCount: 1\n };\n }\n }\n}\nconst B = new y();\nexport {\n B as default\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export { F as FilePreviewContent, m as FilePreviewEmbed, o as FilePreviewModal, L as LocaleService, R as RequestService, z as SUPPORTED_FILE_TYPES, T as ThemeService, q as VERSION, A as configurePdfWorker, V as getFileType, t as normalizeFile, N as normalizeFiles } from './eternalheart-angular-file-preview-eternalheart-angular-file-preview-UobTf36G.mjs';
|
|
2
|
+
//# sourceMappingURL=eternalheart-angular-file-preview.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eternalheart-angular-file-preview.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { type Locale, type Messages, type PreviewFile, type PreviewFileInput, type RequestHandler, type RequestInitFactory, type ShouldFetchAsBlob, type Theme, type CustomRendererEventPayload } from './fp-core';
|
|
2
|
+
import type { CustomRenderer, CustomRendererContext } from './types';
|
|
3
|
+
import type { RendererHandle } from './renderers/base.types';
|
|
4
|
+
import type { ToolbarGroup } from './renderers/toolbar.types';
|
|
5
|
+
import type { RendererLoader } from './renderers/lazy';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
export declare class FilePreviewContent {
|
|
8
|
+
files: import("@angular/core").InputSignal<PreviewFileInput[]>;
|
|
9
|
+
currentIndex: import("@angular/core").InputSignal<number>;
|
|
10
|
+
customRenderers: import("@angular/core").InputSignal<CustomRenderer[]>;
|
|
11
|
+
mode: import("@angular/core").InputSignal<"embed" | "modal">;
|
|
12
|
+
zipNestingDepth: import("@angular/core").InputSignal<number>;
|
|
13
|
+
locale: import("@angular/core").InputSignal<Locale | undefined>;
|
|
14
|
+
messages: import("@angular/core").InputSignal<Partial<Record<Locale, Partial<Messages>>> | undefined>;
|
|
15
|
+
headless: import("@angular/core").InputSignal<boolean>;
|
|
16
|
+
theme: import("@angular/core").InputSignal<Theme>;
|
|
17
|
+
requestInit: import("@angular/core").InputSignal<RequestInitFactory | undefined>;
|
|
18
|
+
requestHandler: import("@angular/core").InputSignal<RequestHandler | undefined>;
|
|
19
|
+
shouldFetchAsBlob: import("@angular/core").InputSignal<ShouldFetchAsBlob | undefined>;
|
|
20
|
+
onDownload: import("@angular/core").InputSignal<((file: PreviewFile) => void | Promise<void>) | undefined>;
|
|
21
|
+
showClose: import("@angular/core").InputSignal<boolean | undefined>;
|
|
22
|
+
showDownload: import("@angular/core").InputSignal<boolean>;
|
|
23
|
+
navigate: import("@angular/core").OutputEmitterRef<number>;
|
|
24
|
+
close: import("@angular/core").OutputEmitterRef<void>;
|
|
25
|
+
customEvent: import("@angular/core").OutputEmitterRef<CustomRendererEventPayload<unknown>>;
|
|
26
|
+
protected readonly maxZipDepth = 3;
|
|
27
|
+
private readonly localeService;
|
|
28
|
+
private readonly themeService;
|
|
29
|
+
private readonly requestService;
|
|
30
|
+
private readonly destroyRef;
|
|
31
|
+
private readonly root;
|
|
32
|
+
private readonly content;
|
|
33
|
+
private readonly system;
|
|
34
|
+
readonly resolvedUrl: import("@angular/core").WritableSignal<string>;
|
|
35
|
+
private createdBlobUrl;
|
|
36
|
+
private unsubscribeToolbar;
|
|
37
|
+
readonly rendererToolbarGroups: import("@angular/core").WritableSignal<ToolbarGroup[]>;
|
|
38
|
+
readonly normalizedFiles: import("@angular/core").Signal<PreviewFile[]>;
|
|
39
|
+
readonly currentFile: import("@angular/core").Signal<PreviewFile | undefined>;
|
|
40
|
+
readonly fileType: import("@angular/core").Signal<import("@eternalheart/file-preview-core").FileType>;
|
|
41
|
+
readonly t: import("@angular/core").Signal<import("@eternalheart/file-preview-core").Translator>;
|
|
42
|
+
readonly resolvedTheme: import("@angular/core").Signal<"dark" | "light">;
|
|
43
|
+
readonly showCloseButton: import("@angular/core").Signal<boolean>;
|
|
44
|
+
readonly contentEl: import("@angular/core").Signal<HTMLDivElement | null>;
|
|
45
|
+
readonly customRenderer: import("@angular/core").Signal<CustomRenderer | null>;
|
|
46
|
+
readonly customCtx: import("@angular/core").Signal<CustomRendererContext>;
|
|
47
|
+
readonly customRendererCmp: import("@angular/core").Signal<import("@angular/core").Type<unknown> | null>;
|
|
48
|
+
readonly customInputs: import("@angular/core").Signal<{
|
|
49
|
+
file: PreviewFile | undefined;
|
|
50
|
+
ctx: CustomRendererContext;
|
|
51
|
+
}>;
|
|
52
|
+
readonly builtinConfig: import("@angular/core").Signal<import("./renderers/registry").BuiltinRendererConfig | null>;
|
|
53
|
+
readonly builtinLoader: import("@angular/core").Signal<RendererLoader | null>;
|
|
54
|
+
readonly builtinInputs: import("@angular/core").Signal<Record<string, unknown>>;
|
|
55
|
+
readonly toolGroups: import("@angular/core").Signal<ToolbarGroup[]>;
|
|
56
|
+
constructor();
|
|
57
|
+
onRendererHandle(handle: RendererHandle | null): void;
|
|
58
|
+
handleDownload(): Promise<void>;
|
|
59
|
+
private handleKeyDown;
|
|
60
|
+
private cleanupSubscription;
|
|
61
|
+
private revokeBlob;
|
|
62
|
+
private refreshResolvedUrl;
|
|
63
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<FilePreviewContent, never>;
|
|
64
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<FilePreviewContent, "FilePreviewContent, afp-file-preview-content", never, { "files": { "alias": "files"; "required": true; "isSignal": true; }; "currentIndex": { "alias": "currentIndex"; "required": false; "isSignal": true; }; "customRenderers": { "alias": "customRenderers"; "required": false; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "zipNestingDepth": { "alias": "zipNestingDepth"; "required": false; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "messages": { "alias": "messages"; "required": false; "isSignal": true; }; "headless": { "alias": "headless"; "required": false; "isSignal": true; }; "theme": { "alias": "theme"; "required": false; "isSignal": true; }; "requestInit": { "alias": "requestInit"; "required": false; "isSignal": true; }; "requestHandler": { "alias": "requestHandler"; "required": false; "isSignal": true; }; "shouldFetchAsBlob": { "alias": "shouldFetchAsBlob"; "required": false; "isSignal": true; }; "onDownload": { "alias": "onDownload"; "required": false; "isSignal": true; }; "showClose": { "alias": "showClose"; "required": false; "isSignal": true; }; "showDownload": { "alias": "showDownload"; "required": false; "isSignal": true; }; }, { "navigate": "navigate"; "close": "close"; "customEvent": "customEvent"; }, never, never, true, never>;
|
|
65
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { CustomRendererEventPayload, Locale, Messages, PreviewFile, PreviewFileInput, RequestHandler, RequestInitFactory, ShouldFetchAsBlob, Theme } from './fp-core';
|
|
2
|
+
import type { CustomRenderer } from './types';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export declare class FilePreviewEmbed {
|
|
5
|
+
files: import("@angular/core").InputSignal<PreviewFileInput[]>;
|
|
6
|
+
currentIndex: import("@angular/core").InputSignal<number>;
|
|
7
|
+
customRenderers: import("@angular/core").InputSignal<CustomRenderer[]>;
|
|
8
|
+
width: import("@angular/core").InputSignal<string | number>;
|
|
9
|
+
height: import("@angular/core").InputSignal<string | number>;
|
|
10
|
+
locale: import("@angular/core").InputSignal<Locale | undefined>;
|
|
11
|
+
messages: import("@angular/core").InputSignal<Partial<Record<Locale, Partial<Messages>>> | undefined>;
|
|
12
|
+
headless: import("@angular/core").InputSignal<boolean>;
|
|
13
|
+
theme: import("@angular/core").InputSignal<Theme>;
|
|
14
|
+
requestInit: import("@angular/core").InputSignal<RequestInitFactory | undefined>;
|
|
15
|
+
requestHandler: import("@angular/core").InputSignal<RequestHandler | undefined>;
|
|
16
|
+
shouldFetchAsBlob: import("@angular/core").InputSignal<ShouldFetchAsBlob | undefined>;
|
|
17
|
+
onDownload: import("@angular/core").InputSignal<((file: PreviewFile) => void | Promise<void>) | undefined>;
|
|
18
|
+
showClose: import("@angular/core").InputSignal<boolean | undefined>;
|
|
19
|
+
showDownload: import("@angular/core").InputSignal<boolean>;
|
|
20
|
+
navigate: import("@angular/core").OutputEmitterRef<number>;
|
|
21
|
+
customEvent: import("@angular/core").OutputEmitterRef<CustomRendererEventPayload<unknown>>;
|
|
22
|
+
close: import("@angular/core").OutputEmitterRef<void>;
|
|
23
|
+
private readonly system;
|
|
24
|
+
readonly resolvedTheme: import("@angular/core").Signal<"dark" | "light">;
|
|
25
|
+
readonly widthCss: import("@angular/core").Signal<string>;
|
|
26
|
+
readonly heightCss: import("@angular/core").Signal<string>;
|
|
27
|
+
constructor();
|
|
28
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<FilePreviewEmbed, never>;
|
|
29
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<FilePreviewEmbed, "FilePreviewEmbed, afp-file-preview-embed", never, { "files": { "alias": "files"; "required": true; "isSignal": true; }; "currentIndex": { "alias": "currentIndex"; "required": false; "isSignal": true; }; "customRenderers": { "alias": "customRenderers"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "messages": { "alias": "messages"; "required": false; "isSignal": true; }; "headless": { "alias": "headless"; "required": false; "isSignal": true; }; "theme": { "alias": "theme"; "required": false; "isSignal": true; }; "requestInit": { "alias": "requestInit"; "required": false; "isSignal": true; }; "requestHandler": { "alias": "requestHandler"; "required": false; "isSignal": true; }; "shouldFetchAsBlob": { "alias": "shouldFetchAsBlob"; "required": false; "isSignal": true; }; "onDownload": { "alias": "onDownload"; "required": false; "isSignal": true; }; "showClose": { "alias": "showClose"; "required": false; "isSignal": true; }; "showDownload": { "alias": "showDownload"; "required": false; "isSignal": true; }; }, { "navigate": "navigate"; "customEvent": "customEvent"; "close": "close"; }, never, never, true, never>;
|
|
30
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { CustomRendererEventPayload, Locale, Messages, PreviewFile, PreviewFileInput, RequestHandler, RequestInitFactory, ShouldFetchAsBlob, Theme } from './fp-core';
|
|
2
|
+
import type { CustomRenderer } from './types';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export declare class FilePreviewModal {
|
|
5
|
+
files: import("@angular/core").InputSignal<PreviewFileInput[]>;
|
|
6
|
+
currentIndex: import("@angular/core").InputSignal<number>;
|
|
7
|
+
isOpen: import("@angular/core").InputSignal<boolean>;
|
|
8
|
+
customRenderers: import("@angular/core").InputSignal<CustomRenderer[]>;
|
|
9
|
+
locale: import("@angular/core").InputSignal<Locale | undefined>;
|
|
10
|
+
messages: import("@angular/core").InputSignal<Partial<Record<Locale, Partial<Messages>>> | undefined>;
|
|
11
|
+
headless: import("@angular/core").InputSignal<boolean>;
|
|
12
|
+
theme: import("@angular/core").InputSignal<Theme>;
|
|
13
|
+
requestInit: import("@angular/core").InputSignal<RequestInitFactory | undefined>;
|
|
14
|
+
requestHandler: import("@angular/core").InputSignal<RequestHandler | undefined>;
|
|
15
|
+
shouldFetchAsBlob: import("@angular/core").InputSignal<ShouldFetchAsBlob | undefined>;
|
|
16
|
+
onDownload: import("@angular/core").InputSignal<((file: PreviewFile) => void | Promise<void>) | undefined>;
|
|
17
|
+
showClose: import("@angular/core").InputSignal<boolean | undefined>;
|
|
18
|
+
showDownload: import("@angular/core").InputSignal<boolean>;
|
|
19
|
+
close: import("@angular/core").OutputEmitterRef<void>;
|
|
20
|
+
navigate: import("@angular/core").OutputEmitterRef<number>;
|
|
21
|
+
customEvent: import("@angular/core").OutputEmitterRef<CustomRendererEventPayload<unknown>>;
|
|
22
|
+
private readonly host;
|
|
23
|
+
private readonly destroyRef;
|
|
24
|
+
private readonly system;
|
|
25
|
+
private originalOverflow;
|
|
26
|
+
private originalPaddingRight;
|
|
27
|
+
private locked;
|
|
28
|
+
readonly resolvedTheme: import("@angular/core").Signal<"dark" | "light">;
|
|
29
|
+
constructor();
|
|
30
|
+
private lock;
|
|
31
|
+
private unlock;
|
|
32
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<FilePreviewModal, never>;
|
|
33
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<FilePreviewModal, "FilePreviewModal, afp-file-preview-modal", never, { "files": { "alias": "files"; "required": true; "isSignal": true; }; "currentIndex": { "alias": "currentIndex"; "required": true; "isSignal": true; }; "isOpen": { "alias": "isOpen"; "required": false; "isSignal": true; }; "customRenderers": { "alias": "customRenderers"; "required": false; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "messages": { "alias": "messages"; "required": false; "isSignal": true; }; "headless": { "alias": "headless"; "required": false; "isSignal": true; }; "theme": { "alias": "theme"; "required": false; "isSignal": true; }; "requestInit": { "alias": "requestInit"; "required": false; "isSignal": true; }; "requestHandler": { "alias": "requestHandler"; "required": false; "isSignal": true; }; "shouldFetchAsBlob": { "alias": "shouldFetchAsBlob"; "required": false; "isSignal": true; }; "onDownload": { "alias": "onDownload"; "required": false; "isSignal": true; }; "showClose": { "alias": "showClose"; "required": false; "isSignal": true; }; "showDownload": { "alias": "showDownload"; "required": false; "isSignal": true; }; }, { "close": "close"; "navigate": "navigate"; "customEvent": "customEvent"; }, never, never, true, never>;
|
|
34
|
+
}
|
package/lib/fp-core.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from '@eternalheart/file-preview-core';
|