@eternalheart/vue-file-preview 1.3.7 → 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-CcJ5NmY1.mjs → index-1khRVlUa.mjs} +25 -25
- package/lib/chunks/index-1khRVlUa.mjs.map +1 -0
- package/lib/chunks/{index-C8ZF84WX.mjs → index-B9Xz5bUB.mjs} +2 -2
- package/lib/chunks/{index-C8ZF84WX.mjs.map → index-B9Xz5bUB.mjs.map} +1 -1
- package/lib/chunks/{index-DpAxU2JM.mjs → index-BA-bP8P6.mjs} +789 -649
- package/lib/chunks/index-BA-bP8P6.mjs.map +1 -0
- package/lib/chunks/{index-DTLDLOGO.mjs → index-BP_8GjEV.mjs} +28 -28
- package/lib/chunks/index-BP_8GjEV.mjs.map +1 -0
- package/lib/chunks/{index-Doy0FvQW.mjs → index-BVdw1Cc8.mjs} +32 -32
- package/lib/chunks/index-BVdw1Cc8.mjs.map +1 -0
- package/lib/chunks/{index-yMb1JUC4.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-BI0dSTSM.mjs → index-Bu8GH1aq.mjs} +27 -27
- package/lib/chunks/index-Bu8GH1aq.mjs.map +1 -0
- package/lib/chunks/{index-ClxBxmPR.mjs → index-CYvPRxHK.mjs} +53 -53
- package/lib/chunks/index-CYvPRxHK.mjs.map +1 -0
- package/lib/chunks/{index-CbKSdAt_.mjs → index-Cfm88ItA.mjs} +2 -2
- package/lib/chunks/{index-CbKSdAt_.mjs.map → index-Cfm88ItA.mjs.map} +1 -1
- package/lib/chunks/{index-kBPb_OKm.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-CB0zCxJb.mjs → index-DEyjEp-i.mjs} +106 -106
- package/lib/chunks/index-DEyjEp-i.mjs.map +1 -0
- package/lib/chunks/{index-DsznjwsH.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-DUUsS_T4.mjs → index-H-QlBdbJ.mjs} +2 -2
- package/lib/chunks/{index-DUUsS_T4.mjs.map → index-H-QlBdbJ.mjs.map} +1 -1
- package/lib/chunks/{index-S_kGRh6H.mjs → index-_llF_WTY.mjs} +46 -46
- package/lib/chunks/index-_llF_WTY.mjs.map +1 -0
- package/lib/chunks/{index-D9lByoJw.mjs → index-oQRFKvtz.mjs} +13 -13
- package/lib/chunks/{index-D9lByoJw.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 +2 -2
- package/lib/chunks/index-BI0dSTSM.mjs.map +0 -1
- package/lib/chunks/index-BW61ZRev.mjs +0 -111
- package/lib/chunks/index-BW61ZRev.mjs.map +0 -1
- package/lib/chunks/index-CB0zCxJb.mjs.map +0 -1
- package/lib/chunks/index-CBCQs1ZC.mjs +0 -116
- package/lib/chunks/index-CBCQs1ZC.mjs.map +0 -1
- package/lib/chunks/index-CcJ5NmY1.mjs.map +0 -1
- package/lib/chunks/index-ClxBxmPR.mjs.map +0 -1
- package/lib/chunks/index-DTLDLOGO.mjs.map +0 -1
- package/lib/chunks/index-Doy0FvQW.mjs.map +0 -1
- package/lib/chunks/index-DpAxU2JM.mjs.map +0 -1
- package/lib/chunks/index-DsznjwsH.mjs.map +0 -1
- package/lib/chunks/index-SAfVQyNJ.mjs +0 -281
- package/lib/chunks/index-SAfVQyNJ.mjs.map +0 -1
- package/lib/chunks/index-S_kGRh6H.mjs.map +0 -1
- package/lib/chunks/index-kBPb_OKm.mjs.map +0 -1
- package/lib/chunks/index-yMb1JUC4.mjs.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-BA-bP8P6.mjs","sources":["../../../file-preview-core/lib/index.mjs","../../src/i18n/localeKey.ts","../../src/composables/useTranslator.ts","../../src/composables/useResolvedTheme.ts","../../src/composables/useRequest.ts","../../src/renderers/Image/toolbar.ts","../../src/renderers/Pdf/toolbar.ts","../../src/renderers/Epub/toolbar.ts","../../src/renderers/Mobi/toolbar.ts","../../src/renderers/Zip/toolbar.ts","../../src/renderers/Text/toolbar.ts","../../src/renderers/Markdown/toolbar.ts","../../src/renderers/RendererLoading.vue","../../src/renderers/lazy.ts","../../src/renderers/Unsupported/index.vue","../../src/FilePreviewContent.vue","../../src/composables/useScrollLock.ts","../../src/FilePreviewModal.vue","../../src/FilePreviewEmbed.vue","../../src/index.ts"],"sourcesContent":["import j from \"jszip\";\nfunction A(e) {\n try {\n const n = new URL(e).pathname.split(\"/\").pop() || \"file\";\n return decodeURIComponent(n);\n } catch {\n const t = e.split(\"/\").pop() || \"file\";\n return decodeURIComponent(t);\n }\n}\nfunction k(e) {\n var n;\n const t = ((n = e.split(\".\").pop()) == null ? void 0 : n.toLowerCase()) || \"\";\n return {\n // 图片\n jpg: \"image/jpeg\",\n jpeg: \"image/jpeg\",\n png: \"image/png\",\n gif: \"image/gif\",\n webp: \"image/webp\",\n svg: \"image/svg+xml\",\n bmp: \"image/bmp\",\n ico: \"image/x-icon\",\n // 视频\n mp4: \"video/mp4\",\n webm: \"video/webm\",\n ogg: \"video/ogg\",\n ogv: \"video/ogg\",\n mov: \"video/quicktime\",\n avi: \"video/x-msvideo\",\n mkv: \"video/x-matroska\",\n m4v: \"video/x-m4v\",\n \"3gp\": \"video/3gpp\",\n flv: \"video/x-flv\",\n // 音频\n mp3: \"audio/mpeg\",\n wav: \"audio/wav\",\n m4a: \"audio/mp4\",\n aac: \"audio/aac\",\n flac: \"audio/flac\",\n // 文档\n pdf: \"application/pdf\",\n docx: \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\",\n xlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\n pptx: \"application/vnd.openxmlformats-officedocument.presentationml.presentation\",\n ppt: \"application/vnd.ms-powerpoint\",\n msg: \"application/vnd.ms-outlook\",\n mobi: \"application/x-mobipocket-ebook\",\n azw: \"application/vnd.amazon.ebook\",\n azw3: \"application/vnd.amazon.ebook\",\n kf8: \"application/vnd.amazon.ebook\",\n // 文本\n txt: \"text/plain\",\n md: \"text/markdown\",\n markdown: \"text/markdown\",\n json: \"application/json\",\n xml: \"application/xml\",\n html: \"text/html\",\n css: \"text/css\",\n js: \"text/javascript\",\n ts: \"text/typescript\",\n jsx: \"text/javascript\",\n tsx: \"text/typescript\",\n py: \"text/x-python\",\n java: \"text/x-java\",\n cpp: \"text/x-c++src\",\n c: \"text/x-csrc\",\n cs: \"text/x-csharp\",\n php: \"text/x-php\",\n rb: \"text/x-ruby\",\n go: \"text/x-go\",\n rs: \"text/x-rust\",\n yaml: \"text/yaml\",\n yml: \"text/yaml\",\n toml: \"text/toml\",\n ini: \"text/plain\",\n env: \"text/plain\",\n diff: \"text/x-diff\",\n patch: \"text/x-diff\",\n log: \"text/plain\",\n csv: \"text/csv\",\n tsv: \"text/tab-separated-values\",\n srt: \"application/x-subrip\",\n vtt: \"text/vtt\",\n zip: \"application/zip\"\n }[t] || \"application/octet-stream\";\n}\nfunction U(e, t = 0) {\n if (e instanceof File)\n return {\n id: `file-${Date.now()}-${t}`,\n name: e.name,\n url: URL.createObjectURL(e),\n type: e.type || k(e.name),\n size: e.size\n };\n if (typeof e == \"string\") {\n const o = A(e);\n return {\n id: `url-${Date.now()}-${t}`,\n name: o,\n url: e,\n type: k(o)\n };\n }\n return {\n id: e.id || `link-${Date.now()}-${t}`,\n name: e.name,\n url: e.url,\n type: e.type || k(e.name),\n size: e.size\n };\n}\nfunction dt(e) {\n return e.map((t, o) => U(t, o));\n}\nfunction ut(e) {\n var r;\n const t = ((r = e.name.split(\".\").pop()) == null ? void 0 : r.toLowerCase()) || \"\", o = e.type.toLowerCase();\n if (o.startsWith(\"image/\") || [\"jpg\", \"jpeg\", \"png\", \"gif\", \"webp\", \"svg\"].includes(t))\n return \"image\";\n if (o.includes(\"pdf\") || t === \"pdf\")\n return \"pdf\";\n if (o.includes(\"wordprocessingml\") || t === \"docx\")\n return \"docx\";\n if (o.includes(\"spreadsheetml\") || t === \"xlsx\")\n return \"xlsx\";\n if (o.includes(\"presentationml\") || t === \"pptx\" || t === \"ppt\")\n return \"pptx\";\n if (o.includes(\"ms-outlook\") || t === \"msg\")\n return \"msg\";\n if (o.includes(\"epub\") || t === \"epub\")\n return \"epub\";\n if ([\"mobi\", \"azw\", \"azw3\", \"kf8\"].includes(t) || o === \"application/x-mobipocket-ebook\" || o === \"application/vnd.amazon.ebook\")\n return \"mobi\";\n if ([\"csv\", \"tsv\"].includes(t) || o === \"text/csv\" || o === \"text/tab-separated-values\")\n return \"csv\";\n if (t === \"xml\" || o === \"application/xml\" || o === \"text/xml\")\n return \"xml\";\n if ([\"srt\", \"vtt\", \"lrc\", \"elrc\", \"ass\", \"ssa\", \"ttml\", \"dfxp\"].includes(t) || o === \"text/vtt\" || o === \"application/x-subrip\" || o === \"application/ttml+xml\")\n return \"subtitle\";\n if (t === \"zip\" || o === \"application/zip\" || o === \"application/x-zip-compressed\")\n return \"zip\";\n if (o.startsWith(\"video/\") || [\"mp4\", \"webm\", \"ogg\", \"ogv\", \"mov\", \"avi\", \"mkv\", \"m4v\", \"3gp\", \"flv\"].includes(t))\n return \"video\";\n if (o.startsWith(\"audio/\") || [\"mp3\", \"wav\", \"ogg\", \"m4a\", \"flac\", \"aac\"].includes(t))\n return \"audio\";\n if (t === \"md\" || t === \"markdown\")\n return \"markdown\";\n if (o === \"application/json\" || t === \"json\")\n return \"json\";\n const n = [\n \"txt\",\n \"log\",\n \"lock\",\n \"js\",\n \"jsx\",\n \"ts\",\n \"tsx\",\n \"py\",\n \"java\",\n \"cpp\",\n \"c\",\n \"h\",\n \"cs\",\n \"php\",\n \"rb\",\n \"go\",\n \"mod\",\n \"rs\",\n \"swift\",\n \"kt\",\n \"lua\",\n \"vim\",\n \"html\",\n \"css\",\n \"scss\",\n \"sass\",\n \"less\",\n \"yaml\",\n \"yml\",\n \"toml\",\n \"ini\",\n \"conf\",\n \"env\",\n \"diff\",\n \"patch\",\n \"sh\",\n \"bash\",\n \"zsh\",\n \"sql\"\n ];\n return o.startsWith(\"text/\") || n.includes(t) ? \"text\" : \"unsupported\";\n}\nfunction ft(e) {\n var n;\n const t = ((n = e.split(\".\").pop()) == null ? void 0 : n.toLowerCase()) || \"\";\n return {\n js: \"javascript\",\n jsx: \"jsx\",\n ts: \"typescript\",\n tsx: \"tsx\",\n py: \"python\",\n java: \"java\",\n cpp: \"cpp\",\n c: \"c\",\n cs: \"csharp\",\n php: \"php\",\n rb: \"ruby\",\n go: \"go\",\n mod: \"go\",\n rs: \"rust\",\n swift: \"swift\",\n kt: \"kotlin\",\n lua: \"lua\",\n vim: \"vim\",\n scala: \"scala\",\n sh: \"bash\",\n bash: \"bash\",\n zsh: \"bash\",\n json: \"json\",\n xml: \"xml\",\n html: \"html\",\n css: \"css\",\n scss: \"scss\",\n sass: \"sass\",\n less: \"less\",\n sql: \"sql\",\n yaml: \"yaml\",\n yml: \"yaml\",\n toml: \"toml\",\n ini: \"ini\",\n env: \"bash\",\n conf: \"nginx\",\n diff: \"diff\",\n patch: \"diff\",\n log: \"log\",\n md: \"markdown\",\n txt: \"text\"\n }[t] || \"text\";\n}\nfunction pt(e) {\n var n;\n const t = ((n = e.split(\".\").pop()) == null ? void 0 : n.toLowerCase().split(\"?\")[0]) || \"\";\n return {\n mp4: \"video/mp4\",\n webm: \"video/webm\",\n ogg: \"video/ogg\",\n ogv: \"video/ogg\",\n mov: \"video/quicktime\",\n avi: \"video/x-msvideo\",\n mkv: \"video/x-matroska\",\n m4v: \"video/mp4\",\n \"3gp\": \"video/3gpp\",\n flv: \"video/x-flv\"\n }[t] || \"video/mp4\";\n}\nfunction mt(e) {\n return e < 1024 ? `${e} B` : e < 1024 * 1024 ? `${(e / 1024).toFixed(1)} KB` : `${(e / (1024 * 1024)).toFixed(1)} MB`;\n}\nfunction ht(e) {\n if (!isFinite(e) || isNaN(e) || e < 0) return \"0:00\";\n const t = Math.floor(e / 60), o = Math.floor(e % 60);\n return `${t}:${o.toString().padStart(2, \"0\")}`;\n}\nfunction gt(e) {\n var o;\n return (((o = e.split(\".\").pop()) == null ? void 0 : o.toLowerCase()) || \"\") === \"tsv\" ? \"\t\" : \",\";\n}\nfunction xt(e, t = {}) {\n const o = t.delimiter ?? \",\", n = t.firstRowAsHeader ?? !0, r = [];\n let a = [], i = \"\", l = !1, s = 0;\n const c = e.length;\n for (; s < c; ) {\n const f = e[s];\n if (l) {\n if (f === '\"') {\n if (e[s + 1] === '\"') {\n i += '\"', s += 2;\n continue;\n }\n l = !1, s += 1;\n continue;\n }\n i += f, s += 1;\n continue;\n }\n if (f === '\"') {\n l = !0, s += 1;\n continue;\n }\n if (f === o) {\n a.push(i), i = \"\", s += 1;\n continue;\n }\n if (f === \"\\r\") {\n e[s + 1] === `\n` && (s += 1), a.push(i), r.push(a), a = [], i = \"\", s += 1;\n continue;\n }\n if (f === `\n`) {\n a.push(i), r.push(a), a = [], i = \"\", s += 1;\n continue;\n }\n i += f, s += 1;\n }\n for ((i.length > 0 || a.length > 0) && (a.push(i), r.push(a)); r.length > 0; ) {\n const f = r[r.length - 1];\n if (f.length === 1 && f[0] === \"\")\n r.pop();\n else\n break;\n }\n let d = [], p = r;\n n && r.length > 0 && (d = r[0], p = r.slice(1));\n const u = Math.max(\n d.length,\n ...p.map((f) => f.length),\n 0\n );\n for (const f of p)\n for (; f.length < u; ) f.push(\"\");\n return {\n header: d,\n rows: p,\n columnCount: u,\n delimiter: o\n };\n}\nfunction $(e) {\n const t = e instanceof Uint8Array ? e : new Uint8Array(e);\n if (t.length >= 3 && t[0] === 239 && t[1] === 187 && t[2] === 191)\n return new TextDecoder(\"utf-8\").decode(t);\n if (t.length >= 2 && t[0] === 255 && t[1] === 254)\n return new TextDecoder(\"utf-16le\").decode(t);\n if (t.length >= 2 && t[0] === 254 && t[1] === 255)\n return new TextDecoder(\"utf-16be\").decode(t);\n try {\n return new TextDecoder(\"utf-8\", { fatal: !0 }).decode(t);\n } catch {\n }\n try {\n return new TextDecoder(\"gbk\").decode(t);\n } catch {\n }\n return new TextDecoder(\"utf-8\", { fatal: !1 }).decode(t);\n}\nconst I = $;\nasync function bt(e, t) {\n const o = !!t && (\"fetcher\" in t || \"init\" in t), n = o ? t.fetcher ?? fetch : fetch, r = o ? t.init : t, a = await n(e, r);\n if (!a.ok) throw new Error(`请求失败: ${a.status}`);\n const i = await a.arrayBuffer();\n return $(i);\n}\nasync function B(e, t) {\n if (e)\n return typeof e == \"function\" ? await e(t) : e;\n}\nfunction W(e, t) {\n if (!e && !t) return;\n if (!e) return t;\n if (!t) return e;\n const o = new Headers(e.headers || {});\n return t.headers && new Headers(t.headers).forEach((n, r) => {\n o.set(r, n);\n }), {\n ...e,\n ...t,\n headers: o\n };\n}\nfunction Ft(e) {\n const t = (e == null ? void 0 : e.requestHandler) ?? ((n, r) => fetch(n, r)), o = e == null ? void 0 : e.requestInit;\n return async (n, r) => {\n const a = await B(o, n), i = W(a, r);\n return t(n, i);\n };\n}\nasync function wt(e, t = fetch, o) {\n const n = await t(e, o);\n if (!n.ok) throw new Error(`请求失败: ${n.status}`);\n const r = await n.blob();\n return URL.createObjectURL(r);\n}\nasync function vt(e, t, o = fetch, n) {\n const r = await o(e, n);\n if (!r.ok) throw new Error(`请求失败: ${r.status}`);\n const a = await r.blob(), i = URL.createObjectURL(a);\n try {\n const l = document.createElement(\"a\");\n l.href = i, l.download = t, l.style.display = \"none\", document.body.appendChild(l), l.click(), document.body.removeChild(l);\n } finally {\n setTimeout(() => URL.revokeObjectURL(i), 1e3);\n }\n}\nfunction z(e) {\n const t = e.trim().replace(\",\", \".\"), o = t.split(\":\").map((n) => n.trim());\n if (o.length === 3) {\n const [n, r, a] = o;\n return Number(n) * 3600 + Number(r) * 60 + Number(a);\n }\n if (o.length === 2) {\n const [n, r] = o;\n return Number(n) * 60 + Number(r);\n }\n return Number(t) || 0;\n}\nfunction yt(e) {\n if (!isFinite(e) || e < 0) return \"00:00:00.000\";\n const t = Math.floor(e * 1e3), o = t % 1e3, n = Math.floor(t / 1e3) % 60, r = Math.floor(t / 6e4) % 60, a = Math.floor(t / 36e5), i = (l, s = 2) => l.toString().padStart(s, \"0\");\n return `${i(a)}:${i(r)}:${i(n)}.${i(o, 3)}`;\n}\nconst E = /(\\d{1,2}:)?\\d{1,2}:\\d{1,2}[.,]\\d{1,3}\\s*-->\\s*(\\d{1,2}:)?\\d{1,2}:\\d{1,2}[.,]\\d{1,3}/, Z = /^\\s*\\[\\d{1,2}:\\d{1,2}(?:[.:]\\d{1,3})?\\]/;\nfunction V(e) {\n const t = e.replace(/^\\uFEFF/, \"\").trimStart();\n return /^WEBVTT/.test(t) ? \"vtt\" : /^<\\?xml/i.test(t) || /<tt\\b[^>]*>/i.test(t) ? \"ttml\" : /^\\[Script Info\\]/im.test(t) || /^Dialogue:/m.test(t) ? /ScriptType:\\s*v4\\.00\\s*$/im.test(t) ? \"ssa\" : \"ass\" : Z.test(t) || /^\\[(ti|ar|al|au|by|length|offset|re|ve):/im.test(t) ? /<\\d{1,2}:\\d{1,2}(?:[.:]\\d{1,3})?>/.test(t) ? \"elrc\" : \"lrc\" : \"srt\";\n}\nfunction L(e, t) {\n const n = e.replace(/\\r\\n?/g, `\n`).replace(/^\\uFEFF/, \"\").split(`\n`), r = [];\n let a, i = 0;\n if (t === \"vtt\") {\n const l = [];\n for (; i < n.length && n[i].trim() !== \"\"; )\n l.push(n[i]), i++;\n for (a = l.join(`\n`); i < n.length && n[i].trim() === \"\"; ) i++;\n }\n for (; i < n.length; ) {\n for (; i < n.length && n[i].trim() === \"\"; ) i++;\n if (i >= n.length) break;\n let l, s = null;\n if (E.test(n[i]))\n s = n[i], i++;\n else if (l = n[i].trim() || void 0, i++, i < n.length && E.test(n[i]))\n s = n[i], i++;\n else\n continue;\n if (!s) continue;\n const c = s.match(/([\\d:.,]+)\\s*-->\\s*([\\d:.,]+)/);\n if (!c) continue;\n const d = z(c[1]), p = z(c[2]), u = [];\n for (; i < n.length && n[i].trim() !== \"\"; )\n u.push(n[i]), i++;\n r.push({ id: l, start: d, end: p, text: u.join(`\n`) });\n }\n return { format: t, cues: r, header: a };\n}\nfunction T(e, t, o) {\n const n = Number(e), r = Number(t);\n let a = 0;\n if (o) {\n const i = (o + \"000\").slice(0, 3);\n a = Number(i);\n }\n return n * 60 + r + a / 1e3;\n}\nfunction R(e, t) {\n const o = /^\\[(ti|ar|al|au|by|length|offset|re|ve):(.*)\\]$/i.exec(e.trim());\n if (!o) return !1;\n const n = o[1].toLowerCase(), r = o[2].trim();\n if (t.metadata[n] = r, n === \"offset\") {\n const a = Number(r);\n isNaN(a) || (t.offsetMs = a);\n }\n return !0;\n}\nfunction O(e) {\n const o = e.replace(/\\r\\n?/g, `\n`).replace(/^\\uFEFF/, \"\").split(`\n`), n = { metadata: {}, offsetMs: 0 }, r = /\\[(\\d{1,2}):(\\d{1,2})(?:[.:](\\d{1,3}))?\\]/g, a = [];\n for (const s of o) {\n const c = s.trim();\n if (!c || R(c, n)) continue;\n const d = [];\n let p = 0;\n r.lastIndex = 0;\n let u;\n for (; (u = r.exec(c)) !== null && u.index === p; )\n d.push(T(u[1], u[2], u[3])), p = u.index + u[0].length;\n if (d.length === 0) continue;\n const f = c.slice(p).trim();\n for (const m of d)\n a.push({ start: m, text: f });\n }\n a.sort((s, c) => s.start - c.start);\n const i = n.offsetMs / 1e3;\n return { format: \"lrc\", cues: a.map((s, c) => {\n const d = Math.max(0, s.start - i), p = a[c + 1], u = p ? Math.max(d, p.start - i) : d + 5;\n return { start: d, end: u, text: s.text };\n }), metadata: n.metadata };\n}\nfunction q(e) {\n const o = e.replace(/\\r\\n?/g, `\n`).replace(/^\\uFEFF/, \"\").split(`\n`), n = { metadata: {}, offsetMs: 0 }, r = /\\[(\\d{1,2}):(\\d{1,2})(?:[.:](\\d{1,3}))?\\]/g, a = /<(\\d{1,2}):(\\d{1,2})(?:[.:](\\d{1,3}))?>/g, i = [];\n for (const c of o) {\n const d = c.trim();\n if (!d || R(d, n)) continue;\n const p = [];\n let u = 0;\n r.lastIndex = 0;\n let f;\n for (; (f = r.exec(d)) !== null && f.index === u; )\n p.push(T(f[1], f[2], f[3])), u = f.index + f[0].length;\n if (p.length === 0) continue;\n const m = d.slice(u);\n for (const h of p)\n i.push({ start: h, raw: m });\n }\n i.sort((c, d) => c.start - d.start);\n const l = n.offsetMs / 1e3;\n return { format: \"elrc\", cues: i.map((c, d) => {\n const p = [];\n let u = \"\", f = 0, m = null;\n a.lastIndex = 0;\n let h;\n for (; (h = a.exec(c.raw)) !== null; ) {\n const F = c.raw.slice(f, h.index);\n m !== null && F && p.push({ start: Math.max(0, m - l), text: F }), u += F, m = T(h[1], h[2], h[3]), f = h.index + h[0].length;\n }\n const b = c.raw.slice(f);\n m !== null && b && p.push({ start: Math.max(0, m - l), text: b }), u += b;\n const g = Math.max(0, c.start - l), x = i[d + 1], v = x ? Math.max(g, x.start - l) : g + 5;\n return {\n start: g,\n end: v,\n text: u.trim(),\n words: p.length ? p : void 0\n };\n }), metadata: n.metadata };\n}\nfunction N(e) {\n const t = e.trim().split(\":\");\n return t.length !== 3 ? 0 : Number(t[0]) * 3600 + Number(t[1]) * 60 + Number(t[2].replace(\",\", \".\"));\n}\nfunction D(e, t) {\n const n = e.replace(/\\r\\n?/g, `\n`).replace(/^\\uFEFF/, \"\").split(`\n`);\n let r = \"\", a = [];\n const i = [], l = [];\n for (const s of n) {\n const c = s.replace(/\\s+$/, \"\"), d = c.trim(), p = /^\\[([^\\]]+)\\]\\s*$/.exec(d);\n if (p) {\n r = p[1].toLowerCase(), l.push(c);\n continue;\n }\n if (r !== \"events\") {\n l.push(c);\n continue;\n }\n const u = /^Format:\\s*(.+)$/i.exec(d);\n if (u) {\n a = u[1].split(\",\").map((w) => w.trim());\n continue;\n }\n const f = /^(Dialogue|Comment):\\s*(.+)$/i.exec(d);\n if (!f || f[1].toLowerCase() === \"comment\" || a.length === 0) continue;\n const m = a.length, h = f[2].split(\",\"), b = h.slice(0, m - 1), g = h.slice(m - 1).join(\",\"), x = {};\n a.forEach((w, y) => {\n x[w] = y === m - 1 ? g : b[y] ?? \"\";\n });\n const v = N(x.Start || \"\"), F = N(x.End || \"\"), _ = (x.Text || \"\").replace(/\\\\N/g, `\n`).replace(/\\\\n/g, `\n`).replace(/\\\\h/g, \" \").replace(/\\{[^}]*\\}/g, \"\");\n i.push({ start: v, end: F, text: _, style: x.Style });\n }\n return i.sort((s, c) => s.start - c.start), {\n format: t,\n cues: i,\n header: l.join(`\n`).trim() || void 0\n };\n}\nfunction S(e) {\n const t = e.trim();\n if (!t) return 0;\n const o = /^(\\d+(?:\\.\\d+)?)(h|m|s|ms|f|t)$/i.exec(t);\n if (o) {\n const r = Number(o[1]), a = o[2].toLowerCase();\n return a === \"h\" ? r * 3600 : a === \"m\" ? r * 60 : a === \"ms\" ? r / 1e3 : r;\n }\n const n = t.split(\":\");\n return n.length === 3 ? Number(n[0]) * 3600 + Number(n[1]) * 60 + Number(n[2]) : n.length === 2 ? Number(n[0]) * 60 + Number(n[1]) : Number(t) || 0;\n}\nfunction H(e) {\n if (typeof DOMParser > \"u\")\n throw new Error(\"TTML parsing requires a DOMParser environment\");\n const t = new DOMParser().parseFromString(e, \"application/xml\");\n if (t.getElementsByTagName(\"parsererror\").length > 0)\n throw new Error(\"TTML XML parse error\");\n const n = t.getElementsByTagName(\"p\"), r = [];\n for (let a = 0; a < n.length; a++) {\n const i = n[a], l = i.getAttribute(\"begin\") || \"\", s = i.getAttribute(\"end\") || \"\", c = i.getAttribute(\"dur\") || \"\", d = S(l);\n let p;\n s ? p = S(s) : c ? p = d + S(c) : p = d + 5;\n let u = \"\";\n i.childNodes.forEach((m) => {\n if (m.nodeType === 3)\n u += m.nodeValue || \"\";\n else if (m.nodeType === 1) {\n const h = m;\n h.tagName.toLowerCase() === \"br\" ? u += `\n` : u += h.textContent || \"\";\n }\n });\n const f = u.replace(/[ \\t]+/g, \" \").replace(/\\n /g, `\n`).trim();\n (f || d || p) && r.push({ start: d, end: p, text: f });\n }\n return r.sort((a, i) => a.start - i.start), { format: \"ttml\", cues: r };\n}\nfunction _t(e, t) {\n switch (t ?? V(e)) {\n case \"lrc\":\n return O(e);\n case \"elrc\":\n return q(e);\n case \"ass\":\n return D(e, \"ass\");\n case \"ssa\":\n return D(e, \"ssa\");\n case \"ttml\":\n return H(e);\n case \"vtt\":\n return L(e, \"vtt\");\n case \"srt\":\n default:\n return L(e, \"srt\");\n }\n}\nasync function Ct(e) {\n return j.loadAsync(e);\n}\nfunction kt(e) {\n const t = [];\n return e.forEach((o, n) => {\n var p;\n const r = n.dir, a = r && !o.endsWith(\"/\") ? o + \"/\" : o, i = r ? a.replace(/\\/$/, \"\") : a, l = i.lastIndexOf(\"/\"), s = l >= 0 ? i.slice(l + 1) : i, c = l >= 0 ? i.slice(0, l) : \"\", d = r ? 0 : ((p = n._data) == null ? void 0 : p.uncompressedSize) ?? 0;\n t.push({\n path: a,\n name: s,\n dir: c,\n isDir: r,\n size: d,\n date: n.date\n });\n }), t;\n}\nfunction St(e) {\n const t = { name: \"\", path: \"\", isDir: !0, children: [], size: 0 }, o = /* @__PURE__ */ new Map();\n o.set(\"\", t);\n const n = (a) => {\n if (o.has(a)) return o.get(a);\n const i = a.split(\"/\").filter(Boolean);\n let l = t, s = \"\";\n for (const c of i) {\n s = s ? `${s}/${c}` : c;\n let d = o.get(s);\n d || (d = { name: c, path: s + \"/\", isDir: !0, children: [], size: 0 }, l.children.push(d), o.set(s, d)), l = d;\n }\n return l;\n };\n for (const a of e) {\n if (a.isDir) {\n n(a.path.replace(/\\/$/, \"\"));\n continue;\n }\n n(a.dir).children.push({\n name: a.name,\n path: a.path,\n isDir: !1,\n size: a.size\n });\n }\n const r = (a) => {\n if (a.children) {\n a.children.sort((i, l) => i.isDir !== l.isDir ? i.isDir ? -1 : 1 : i.name.localeCompare(l.name));\n for (const i of a.children) r(i);\n }\n };\n return r(t), t;\n}\nasync function Tt(e, t) {\n const o = e.file(t);\n if (!o) throw new Error(`ZIP entry not found: ${t}`);\n const n = await o.async(\"arraybuffer\");\n return I(n);\n}\nasync function Mt(e, t, o) {\n const n = e.file(t);\n if (!n) throw new Error(`ZIP entry not found: ${t}`);\n const r = await n.async(\"arraybuffer\");\n return new Blob([r], o ? { type: o } : void 0);\n}\nfunction G(e) {\n return e ? e.startsWith(\"#\") ? e : e.length === 8 ? \"#\" + e.substring(2) : e.length === 6 ? \"#\" + e : \"#000000\" : \"#000000\";\n}\nconst J = [\n \"FFFFFF\",\n \"000000\",\n \"E7E6E6\",\n \"44546A\",\n \"4472C4\",\n \"ED7D31\",\n \"A5A5A5\",\n \"FFC000\",\n \"5B9BD5\",\n \"70AD47\"\n], X = [\n \"000000\",\n \"FFFFFF\",\n \"FF0000\",\n \"00FF00\",\n \"0000FF\",\n \"FFFF00\",\n \"FF00FF\",\n \"00FFFF\",\n \"000000\",\n \"FFFFFF\",\n \"FF0000\",\n \"00FF00\",\n \"0000FF\",\n \"FFFF00\",\n \"FF00FF\",\n \"00FFFF\",\n \"800000\",\n \"008000\",\n \"000080\",\n \"808000\",\n \"800080\",\n \"008080\",\n \"C0C0C0\",\n \"808080\",\n \"9999FF\",\n \"993366\",\n \"FFFFCC\",\n \"CCFFFF\",\n \"660066\",\n \"FF8080\",\n \"0066CC\",\n \"CCCCFF\",\n \"000080\",\n \"FF00FF\",\n \"FFFF00\",\n \"00FFFF\",\n \"800080\",\n \"800000\",\n \"008080\",\n \"0000FF\",\n \"00CCFF\",\n \"CCFFFF\",\n \"CCFFCC\",\n \"FFFF99\",\n \"99CCFF\",\n \"FF99CC\",\n \"CC99FF\",\n \"FFCC99\",\n \"3366FF\",\n \"33CCCC\",\n \"99CC00\",\n \"FFCC00\",\n \"FF9900\",\n \"FF6600\",\n \"666699\",\n \"969696\",\n \"003366\",\n \"339966\",\n \"003300\",\n \"333300\",\n \"993300\",\n \"993366\",\n \"333399\",\n \"333333\"\n];\nfunction K(e, t) {\n const o = parseInt(e.substring(0, 2), 16), n = parseInt(e.substring(2, 4), 16), r = parseInt(e.substring(4, 6), 16), a = (c) => t < 0 ? Math.round(c * (1 + t)) : Math.round(c + (255 - c) * t), i = Math.min(255, Math.max(0, a(o))), l = Math.min(255, Math.max(0, a(n))), s = Math.min(255, Math.max(0, a(r)));\n return i.toString(16).padStart(2, \"0\") + l.toString(16).padStart(2, \"0\") + s.toString(16).padStart(2, \"0\");\n}\nfunction Q(e) {\n if (e && e.type === \"pattern\" && e.pattern === \"solid\") {\n const t = e.fgColor;\n if (t)\n return M(t);\n }\n}\nfunction M(e) {\n if (e) {\n if (\"argb\" in e && typeof e.argb == \"string\" && e.argb)\n return G(e.argb);\n if (\"theme\" in e && typeof e.theme == \"number\") {\n const t = J[e.theme] || \"000000\", o = \"tint\" in e && typeof e.tint == \"number\" ? e.tint : 0;\n return \"#\" + (o !== 0 ? K(t, o) : t);\n }\n if (\"indexed\" in e && typeof e.indexed == \"number\") {\n const t = X[e.indexed];\n if (t) return \"#\" + t;\n }\n }\n}\nfunction Y(e) {\n if (!e || !e.style) return;\n const t = M(e.color) || \"#000000\";\n return [e.style, t];\n}\nfunction tt(e) {\n const t = {};\n let o = !1;\n if (e.font) {\n const r = e.font;\n if ((r.name || r.size || r.bold || r.italic) && (o = !0, t.font = {}, r.name && (t.font.name = r.name), r.size && (t.font.size = r.size), r.bold && (t.font.bold = !0), r.italic && (t.font.italic = !0)), r.color) {\n const a = M(r.color);\n a && (o = !0, t.color = a);\n }\n r.underline && (o = !0, t.underline = !0), r.strike && (o = !0, t.strike = !0);\n }\n const n = Q(e.fill);\n if (n && (o = !0, t.bgcolor = n), e.alignment) {\n const r = e.alignment;\n r.horizontal && (o = !0, t.align = r.horizontal), r.vertical && (o = !0, t.valign = r.vertical), r.wrapText && (o = !0, t.textwrap = !0);\n }\n if (e.border) {\n const r = {};\n let a = !1;\n const i = [\"top\", \"bottom\", \"left\", \"right\"];\n for (const l of i) {\n const s = Y(e.border[l]);\n s && (r[l] = s, a = !0);\n }\n a && (o = !0, t.border = r);\n }\n return o ? t : null;\n}\nfunction et(e) {\n return JSON.stringify(e);\n}\nfunction ot(e, t, o) {\n const n = tt(e);\n if (!n) return -1;\n const r = et(n), a = o.get(r);\n if (a !== void 0) return a;\n const i = t.length;\n return t.push(n), o.set(r, i), i;\n}\nfunction nt(e) {\n const t = e.value;\n if (t == null) return \"\";\n if (typeof t == \"string\") return t;\n if (typeof t == \"number\") return String(t);\n if (typeof t == \"boolean\") return t ? \"TRUE\" : \"FALSE\";\n if (t instanceof Date)\n return t.toLocaleDateString();\n if (typeof t == \"object\" && \"formula\" in t) {\n const o = t.result;\n return o != null ? String(o) : \"\";\n }\n return typeof t == \"object\" && \"richText\" in t ? t.richText.map((n) => n.text).join(\"\") : typeof t == \"object\" && \"hyperlink\" in t ? t.text || \"\" : typeof t == \"object\" && \"error\" in t ? String(t.error) : String(t);\n}\nfunction rt(e) {\n const t = e.split(\":\"), o = P(t[0]), n = t[1] ? P(t[1]) : o;\n return {\n top: o.row,\n left: o.col,\n bottom: n.row,\n right: n.col\n };\n}\nfunction P(e) {\n const t = e.match(/^([A-Z]+)(\\d+)$/);\n if (!t) return { row: 1, col: 1 };\n const o = t[1], n = parseInt(t[2], 10);\n let r = 0;\n for (let a = 0; a < o.length; a++)\n r = r * 26 + (o.charCodeAt(a) - 64);\n return { row: n, col: r };\n}\nfunction zt(e) {\n const t = [];\n return e.eachSheet((o) => {\n const n = [], r = /* @__PURE__ */ new Map(), a = [], i = {}, l = {}, s = o.columnCount;\n for (let u = 1; u <= s; u++) {\n const f = o.getColumn(u);\n f.width && (l[String(u - 1)] = { width: Math.round(f.width * 7.5) });\n }\n l.len = Math.max(s, 26);\n const c = /* @__PURE__ */ new Map(), d = o.model, p = (d == null ? void 0 : d.merges) || [];\n for (const u of p) {\n a.push(u);\n const { top: f, left: m, bottom: h, right: b } = rt(u), g = h - f, x = b - m;\n c.set(`${f - 1},${m - 1}`, [g, x]);\n }\n o.eachRow({ includeEmpty: !0 }, (u, f) => {\n const m = f - 1, h = {};\n u.eachCell({ includeEmpty: !1 }, (g, x) => {\n const v = x - 1;\n if (g.isMerged && g.master !== g) return;\n const F = nt(g), _ = ot(g, n, r), w = { text: F };\n _ !== -1 && (w.style = _);\n const y = `${m},${v}`;\n c.has(y) && (w.merge = c.get(y)), h[String(v)] = w;\n });\n const b = { cells: h };\n u.height && (b.height = Math.round(u.height * 1.333)), i[String(m)] = b;\n }), t.push({\n name: o.name,\n styles: n,\n merges: a,\n rows: i,\n cols: l\n });\n }), t;\n}\nfunction Et(e, t, o = \"Sheet1\") {\n const n = e.length > 0, a = n ? [{ font: { bold: !0 } }] : [], i = {};\n if (n) {\n const s = {};\n e.forEach((c, d) => {\n s[String(d)] = { text: c, style: 0 };\n }), i[0] = { cells: s };\n }\n const l = n ? 1 : 0;\n return t.forEach((s, c) => {\n const d = {};\n s.forEach((p, u) => {\n p !== void 0 && p !== \"\" && (d[String(u)] = { text: p });\n }), i[String(c + l)] = { cells: d };\n }), [{ name: o, styles: a, rows: i }];\n}\nfunction Lt(e, t) {\n var i;\n if (typeof window > \"u\") return;\n const o = (e == null ? void 0 : e.version) || ((i = e == null ? void 0 : e.GlobalWorkerOptions) == null ? void 0 : i.version) || \"\", {\n workerSrc: n = `https://unpkg.com/pdfjs-dist@${o}/build/pdf.worker.min.mjs`,\n cMapUrl: r = `https://unpkg.com/pdfjs-dist@${o}/cmaps/`,\n cMapPacked: a = !0\n } = t || {};\n e.GlobalWorkerOptions && (e.GlobalWorkerOptions.workerSrc = n, e.GlobalWorkerOptions.cMapUrl = r, e.GlobalWorkerOptions.cMapPacked = a);\n}\nconst it = {\n // ─────── common ───────\n \"common.download\": \"下载\",\n \"common.close\": \"关闭\",\n \"common.loading\": \"加载中\",\n \"common.unknown_error\": \"未知错误\",\n \"common.unsupported_preview\": \"不支持预览此文件类型 ({type})\",\n // ─────── toolbar ───────\n \"toolbar.zoom_in\": \"放大\",\n \"toolbar.zoom_out\": \"缩小\",\n \"toolbar.rotate_left\": \"向左旋转\",\n \"toolbar.rotate_right\": \"向右旋转\",\n \"toolbar.reset\": \"复原\",\n \"toolbar.fit_to_window\": \"适应窗口\",\n \"toolbar.original_size\": \"原始尺寸\",\n \"toolbar.toc\": \"目录\",\n \"toolbar.prev_page\": \"上一页\",\n \"toolbar.next_page\": \"下一页\",\n \"toolbar.full_width\": \"全屏宽度\",\n \"toolbar.normal_width\": \"正常宽度\",\n \"toolbar.wrap_on\": \"自动换行\",\n \"toolbar.wrap_off\": \"不换行\",\n \"toolbar.source\": \"源码\",\n \"toolbar.preview\": \"预览\",\n // ─────── image ───────\n \"image.load_failed\": \"图片加载失败\",\n // ─────── pdf ───────\n \"pdf.load_failed\": \"PDF 文件加载失败\",\n // ─────── docx ───────\n \"docx.parse_failed\": \"Word 文档解析失败\",\n // ─────── xlsx ───────\n \"xlsx.loading\": \"加载 Excel 中...\",\n \"xlsx.load_failed\": \"Excel 加载失败\",\n \"xlsx.parse_failed\": \"Excel 文件解析失败\",\n \"xlsx.not_found\": \"Excel 文件不存在\",\n // ─────── pptx ───────\n \"pptx.loading\": \"加载 PPT 中...\",\n \"pptx.load_failed\": \"PPT 加载失败\",\n \"pptx.parse_failed\": \"PPT 文件解析失败\",\n \"pptx.not_found\": \"PPT 文件不存在\",\n \"pptx.invalid_format\": \"PPT 文件格式错误或已损坏\",\n \"pptx.no_pages\": \"PPT 文件无有效页面\",\n \"pptx.timeout\": \"加载超时,请检查网络或稍后重试\",\n // ─────── msg ───────\n \"msg.parse_failed\": \"Outlook 邮件解析失败\",\n \"msg.parse_failed_short\": \"邮件解析失败\",\n \"msg.empty_body\": \"(无邮件正文)\",\n // ─────── epub ───────\n \"epub.load_failed\": \"EPUB 文件加载失败\",\n // ─────── mobi ───────\n \"mobi.load_failed\": \"电子书加载失败,文件可能已损坏或带有 DRM 保护\",\n // ─────── video ───────\n \"video.loading\": \"加载视频中...\",\n \"video.load_failed\": \"视频加载失败\",\n \"video.load_failed_with_error\": \"视频加载失败: {error}\",\n // ─────── audio (aria-label) ───────\n \"audio.aria.play\": \"播放\",\n \"audio.aria.pause\": \"暂停\",\n \"audio.aria.forward_10\": \"前进 10 秒\",\n \"audio.aria.backward_10\": \"后退 10 秒\",\n \"audio.aria.mute\": \"静音\",\n \"audio.aria.unmute\": \"取消静音\",\n \"audio.aria.loop_on\": \"开启循环\",\n \"audio.aria.loop_off\": \"关闭循环\",\n \"audio.aria.progress\": \"播放进度\",\n \"audio.aria.volume\": \"音量\",\n // ─────── markdown ───────\n \"markdown.load_failed\": \"Markdown 文件加载失败\",\n \"markdown.copy_code\": \"复制代码\",\n \"markdown.copied\": \"已复制\",\n // ─────── json ───────\n \"json.load_failed\": \"JSON 文件加载失败\",\n \"json.items\": \"items\",\n \"json.keys\": \"keys\",\n // ─────── csv ───────\n \"csv.loading\": \"加载 CSV 中...\",\n \"csv.load_failed\": \"CSV 文件加载失败\",\n \"csv.parse_failed\": \"CSV 解析失败\",\n // ─────── xml ───────\n \"xml.load_failed\": \"XML 文件加载失败\",\n // ─────── subtitle / lyric ───────\n \"subtitle.load_failed\": \"字幕文件加载失败\",\n \"subtitle.parse_failed\": \"字幕解析失败\",\n \"subtitle.lines\": \"lines\",\n \"subtitle.cues\": \"cues\",\n \"subtitle.meta.title\": \"标题\",\n \"subtitle.meta.artist\": \"艺术家\",\n \"subtitle.meta.album\": \"专辑\",\n \"subtitle.meta.author\": \"作者\",\n \"subtitle.meta.by\": \"制作\",\n \"subtitle.meta.length\": \"时长\",\n \"subtitle.meta.offset\": \"偏移\",\n \"subtitle.meta.editor\": \"编辑器\",\n \"subtitle.meta.version\": \"版本\",\n // ─────── zip ───────\n \"zip.load_failed\": \"ZIP 文件加载失败\",\n \"zip.parse_failed\": \"ZIP 解析失败\",\n // ─────── text ───────\n \"text.load_failed\": \"文本文件加载失败\"\n}, at = {\n // ─────── common ───────\n \"common.download\": \"Download\",\n \"common.close\": \"Close\",\n \"common.loading\": \"Loading\",\n \"common.unknown_error\": \"Unknown error\",\n \"common.unsupported_preview\": \"Preview not supported for this file type ({type})\",\n // ─────── toolbar ───────\n \"toolbar.zoom_in\": \"Zoom in\",\n \"toolbar.zoom_out\": \"Zoom out\",\n \"toolbar.rotate_left\": \"Rotate left\",\n \"toolbar.rotate_right\": \"Rotate right\",\n \"toolbar.reset\": \"Reset\",\n \"toolbar.fit_to_window\": \"Fit to window\",\n \"toolbar.original_size\": \"Original size\",\n \"toolbar.toc\": \"Table of contents\",\n \"toolbar.prev_page\": \"Previous page\",\n \"toolbar.next_page\": \"Next page\",\n \"toolbar.full_width\": \"Full width\",\n \"toolbar.normal_width\": \"Normal width\",\n \"toolbar.wrap_on\": \"Word wrap\",\n \"toolbar.wrap_off\": \"No wrap\",\n \"toolbar.source\": \"Source\",\n \"toolbar.preview\": \"Preview\",\n // ─────── image ───────\n \"image.load_failed\": \"Failed to load image\",\n // ─────── pdf ───────\n \"pdf.load_failed\": \"Failed to load PDF\",\n // ─────── docx ───────\n \"docx.parse_failed\": \"Failed to parse Word document\",\n // ─────── xlsx ───────\n \"xlsx.loading\": \"Loading Excel...\",\n \"xlsx.load_failed\": \"Failed to load Excel\",\n \"xlsx.parse_failed\": \"Failed to parse Excel file\",\n \"xlsx.not_found\": \"Excel file not found\",\n // ─────── pptx ───────\n \"pptx.loading\": \"Loading PPT...\",\n \"pptx.load_failed\": \"Failed to load PPT\",\n \"pptx.parse_failed\": \"Failed to parse PPT file\",\n \"pptx.not_found\": \"PPT file not found\",\n \"pptx.invalid_format\": \"PPT file format is invalid or corrupted\",\n \"pptx.no_pages\": \"PPT file has no valid pages\",\n \"pptx.timeout\": \"Loading timed out, please check your network and retry\",\n // ─────── msg ───────\n \"msg.parse_failed\": \"Failed to parse Outlook message\",\n \"msg.parse_failed_short\": \"Failed to parse message\",\n \"msg.empty_body\": \"(No message body)\",\n // ─────── epub ───────\n \"epub.load_failed\": \"Failed to load EPUB\",\n // ─────── mobi ───────\n \"mobi.load_failed\": \"Failed to load ebook — file may be corrupted or DRM-protected\",\n // ─────── video ───────\n \"video.loading\": \"Loading video...\",\n \"video.load_failed\": \"Failed to load video\",\n \"video.load_failed_with_error\": \"Failed to load video: {error}\",\n // ─────── audio (aria-label) ───────\n \"audio.aria.play\": \"Play\",\n \"audio.aria.pause\": \"Pause\",\n \"audio.aria.forward_10\": \"Forward 10 seconds\",\n \"audio.aria.backward_10\": \"Back 10 seconds\",\n \"audio.aria.mute\": \"Mute\",\n \"audio.aria.unmute\": \"Unmute\",\n \"audio.aria.loop_on\": \"Enable loop\",\n \"audio.aria.loop_off\": \"Disable loop\",\n \"audio.aria.progress\": \"Playback progress\",\n \"audio.aria.volume\": \"Volume\",\n // ─────── markdown ───────\n \"markdown.load_failed\": \"Failed to load Markdown\",\n \"markdown.copy_code\": \"Copy code\",\n \"markdown.copied\": \"Copied\",\n // ─────── json ───────\n \"json.load_failed\": \"Failed to load JSON\",\n \"json.items\": \"items\",\n \"json.keys\": \"keys\",\n // ─────── csv ───────\n \"csv.loading\": \"Loading CSV...\",\n \"csv.load_failed\": \"Failed to load CSV\",\n \"csv.parse_failed\": \"Failed to parse CSV\",\n // ─────── xml ───────\n \"xml.load_failed\": \"Failed to load XML\",\n // ─────── subtitle / lyric ───────\n \"subtitle.load_failed\": \"Failed to load subtitle\",\n \"subtitle.parse_failed\": \"Failed to parse subtitle\",\n \"subtitle.lines\": \"lines\",\n \"subtitle.cues\": \"cues\",\n \"subtitle.meta.title\": \"Title\",\n \"subtitle.meta.artist\": \"Artist\",\n \"subtitle.meta.album\": \"Album\",\n \"subtitle.meta.author\": \"Author\",\n \"subtitle.meta.by\": \"By\",\n \"subtitle.meta.length\": \"Length\",\n \"subtitle.meta.offset\": \"Offset\",\n \"subtitle.meta.editor\": \"Editor\",\n \"subtitle.meta.version\": \"Version\",\n // ─────── zip ───────\n \"zip.load_failed\": \"Failed to load ZIP\",\n \"zip.parse_failed\": \"Failed to parse ZIP\",\n // ─────── text ───────\n \"text.load_failed\": \"Failed to load text file\"\n}, C = {\n \"zh-CN\": it,\n \"en-US\": at\n}, st = /\\{(\\w+)\\}/g;\nfunction lt(e, t) {\n return t ? e.replace(st, (o, n) => {\n const r = t[n];\n return r === void 0 ? `{${n}}` : String(r);\n }) : e;\n}\nfunction Nt(e) {\n var i;\n const t = e.fallbackLocale ?? \"zh-CN\", o = C[e.locale] ?? C[t] ?? C[\"zh-CN\"], n = (i = e.messages) == null ? void 0 : i[e.locale], r = n ? { ...o, ...n } : o, a = C[\"zh-CN\"];\n return (l, s) => {\n const c = r[l] ?? a[l] ?? l;\n return lt(c, s);\n };\n}\nexport {\n St as buildZipTree,\n C as builtInMessages,\n Lt as configurePdfWorker,\n Et as convertCsvToSpreadsheetData,\n zt as convertWorkbookToSpreadsheetData,\n Ft as createFetcher,\n Nt as createTranslator,\n $ as decodeText,\n I as decodeUtf8,\n vt as downloadFileWithFetcher,\n wt as fetchAsBlobUrl,\n bt as fetchTextUtf8,\n mt as formatFileSize,\n yt as formatSubtitleTime,\n ht as formatTime,\n A as getFileNameFromUrl,\n ut as getFileType,\n ft as getLanguageFromFileName,\n pt as getVideoMimeType,\n gt as guessCsvDelimiter,\n k as inferMimeType,\n kt as listZipEntries,\n Ct as loadZip,\n U as normalizeFile,\n dt as normalizeFiles,\n xt as parseCsv,\n _t as parseSubtitle,\n Mt as readZipEntryBlob,\n Tt as readZipEntryText\n};\n//# sourceMappingURL=index.mjs.map\n","import type { InjectionKey, Ref, ComputedRef } from 'vue';\nimport type { Locale, Translator } from '@eternalheart/file-preview-core';\n\nexport interface LocaleInjection {\n locale: Ref<Locale>;\n t: ComputedRef<Translator>;\n}\n\nexport const LOCALE_KEY: InjectionKey<LocaleInjection> = Symbol('file-preview-locale');\n","import { provide, inject, computed, unref, type Ref, type MaybeRef, type ComputedRef } from 'vue';\nimport { createTranslator, type Locale, type Messages, type Translator } from '@eternalheart/file-preview-core';\nimport { LOCALE_KEY, type LocaleInjection } from '../i18n/localeKey';\n\n/**\n * 在主组件中调用,向子树注入 locale context\n */\nexport function provideLocale(\n locale: MaybeRef<Locale | undefined>,\n messages?: MaybeRef<Partial<Record<Locale, Partial<Messages>>> | undefined>,\n): void {\n const localeRef = computed<Locale>(() => unref(locale) ?? 'zh-CN');\n const t = computed<Translator>(() =>\n createTranslator({ locale: localeRef.value, messages: unref(messages) }),\n );\n provide(LOCALE_KEY, { locale: localeRef as Ref<Locale>, t });\n}\n\n// 兜底 translator(模块级单例)\nlet fallbackT: Translator | null = null;\nfunction getFallback(): Translator {\n if (!fallbackT) fallbackT = createTranslator({ locale: 'zh-CN' });\n return fallbackT;\n}\n\n/**\n * 获取翻译函数。在 provider 外使用时自动 fallback 到 zh-CN。\n */\nexport function useTranslator(): { locale: Ref<Locale>; t: ComputedRef<Translator> } {\n const injected = inject<LocaleInjection | null>(LOCALE_KEY, null);\n if (injected) return injected;\n // fallback\n const locale = computed<Locale>(() => 'zh-CN');\n const t = computed<Translator>(() => getFallback());\n return { locale: locale as Ref<Locale>, t };\n}\n","import { provide, inject, computed, unref, type InjectionKey, type MaybeRef, type ComputedRef } from 'vue';\n\nexport type ResolvedTheme = 'dark' | 'light';\n\nconst THEME_KEY: InjectionKey<ComputedRef<ResolvedTheme>> = Symbol('vfp-resolved-theme');\n\n/**\n * 在主组件中调用,向子树注入已解析的主题('dark' | 'light')\n */\nexport function provideResolvedTheme(theme: MaybeRef<ResolvedTheme>): void {\n const themeRef = computed<ResolvedTheme>(() => unref(theme));\n provide(THEME_KEY, themeRef);\n}\n\n/**\n * 获取已解析的主题('dark' | 'light')。\n * Provider 之外默认 'dark'。\n *\n * renderer 需要切第三方库的 theme 选项(如 shiki 的 theme)时使用;\n * 不要用它做 className 分支 —— class 由 CSS 变量通过根容器 [data-theme] 自动切换。\n */\nexport function useResolvedTheme(): ComputedRef<ResolvedTheme> {\n const injected = inject(THEME_KEY, null);\n if (injected) return injected;\n return computed<ResolvedTheme>(() => 'dark');\n}\n","import { inject, provide, computed, ref, watch, onBeforeUnmount, type ComputedRef, type Ref } from 'vue';\nimport type {\n Fetcher,\n PreviewFile,\n RequestHandler,\n RequestInitFactory,\n ShouldFetchAsBlob,\n} from '@eternalheart/file-preview-core';\nimport { createFetcher, fetchAsBlobUrl } from '@eternalheart/file-preview-core';\n\nexport interface RequestContextValue {\n fetcher: Fetcher;\n shouldFetchAsBlob?: ShouldFetchAsBlob;\n}\n\nconst REQUEST_KEY = Symbol('file-preview:request');\n\nexport function provideRequestContext(\n options: {\n requestInit?: RequestInitFactory;\n requestHandler?: RequestHandler;\n shouldFetchAsBlob?: ShouldFetchAsBlob;\n } | (() => {\n requestInit?: RequestInitFactory;\n requestHandler?: RequestHandler;\n shouldFetchAsBlob?: ShouldFetchAsBlob;\n }),\n) {\n const value = computed<RequestContextValue>(() => {\n const opts = typeof options === 'function' ? options() : options;\n return {\n fetcher: createFetcher({\n requestInit: opts.requestInit,\n requestHandler: opts.requestHandler,\n }),\n shouldFetchAsBlob: opts.shouldFetchAsBlob,\n };\n });\n provide(REQUEST_KEY, value);\n return value;\n}\n\nfunction defaultContext(): RequestContextValue {\n return { fetcher: (url, init) => fetch(url, init) };\n}\n\nexport function useRequestContext(): ComputedRef<RequestContextValue> {\n const injected = inject<ComputedRef<RequestContextValue> | undefined>(REQUEST_KEY, undefined);\n if (injected) return injected;\n return computed(() => defaultContext());\n}\n\nexport function useFetcher(): ComputedRef<Fetcher> {\n const ctx = useRequestContext();\n return computed(() => ctx.value.fetcher);\n}\n\n/**\n * 解析 file 的可消费 URL:\n * - 未配置 shouldFetchAsBlob 或返回 false:直接返回 file.url\n * - 返回 true:用 fetcher 拉成 blob: URL,组件卸载或 file 变化时 revoke\n */\nexport function useResolvedUrl(file: Ref<PreviewFile | undefined>): Ref<string> {\n const ctx = useRequestContext();\n const resolved = ref<string>('');\n let createdBlobUrl: string | null = null;\n\n const cleanup = () => {\n if (createdBlobUrl) {\n URL.revokeObjectURL(createdBlobUrl);\n createdBlobUrl = null;\n }\n };\n\n watch(\n () => {\n const f = file.value;\n const need = !!(f && ctx.value.shouldFetchAsBlob?.(f));\n return { f, need, fetcher: ctx.value.fetcher };\n },\n async ({ f, need, fetcher }, _old, onCleanup) => {\n if (!f) {\n cleanup();\n resolved.value = '';\n return;\n }\n if (!need) {\n cleanup();\n resolved.value = f.url;\n return;\n }\n let cancelled = false;\n onCleanup(() => {\n cancelled = true;\n });\n resolved.value = '';\n try {\n const blobUrl = await fetchAsBlobUrl(f.url, fetcher);\n if (cancelled) {\n URL.revokeObjectURL(blobUrl);\n return;\n }\n cleanup();\n createdBlobUrl = blobUrl;\n resolved.value = blobUrl;\n } catch (err) {\n if (!cancelled) {\n console.error('[file-preview] resolve blob url failed:', err);\n resolved.value = f.url;\n }\n }\n },\n { immediate: true },\n );\n\n onBeforeUnmount(cleanup);\n\n return resolved;\n}\n","import { ZoomIn, ZoomOut, RotateCw, RotateCcw, Scan, RefreshCw } from 'lucide-vue-next';\nimport { h, type FunctionalComponent } from 'vue';\nimport type { ToolbarGroup } from '../toolbar.types';\nimport type { Translator } from '@eternalheart/file-preview-core';\n\nconst OriginalSizeIcon: FunctionalComponent = (_props, { attrs }) => {\n return h('svg', {\n xmlns: 'http://www.w3.org/2000/svg', viewBox: '0 0 24 24',\n fill: 'none', stroke: 'currentColor', 'stroke-width': '2',\n 'stroke-linecap': 'round', 'stroke-linejoin': 'round', ...attrs,\n }, [\n h('text', {\n x: '12', y: '17.5', 'text-anchor': 'middle',\n 'font-size': '20', 'font-weight': 'bold',\n fill: 'currentColor', stroke: 'none',\n }, '1:1'),\n ]);\n};\n\nexport interface ImageToolbarContext {\n zoom: number;\n onZoomIn: () => void;\n onZoomOut: () => void;\n onFitToWidth: () => void;\n onOriginalSize: () => void;\n onRotateLeft: () => void;\n onRotateRight: () => void;\n onReset: () => void;\n t: Translator;\n}\n\nexport function getImageToolbarGroups(ctx: ImageToolbarContext): ToolbarGroup[] {\n return [\n {\n items: [\n { type: 'button', icon: ZoomOut, tooltip: ctx.t('toolbar.zoom_out'), action: ctx.onZoomOut, disabled: ctx.zoom <= 0.01 },\n { type: 'text', content: `${Math.round(ctx.zoom * 100)}%`, minWidth: '3rem' },\n { type: 'button', icon: ZoomIn, tooltip: ctx.t('toolbar.zoom_in'), action: ctx.onZoomIn, disabled: ctx.zoom >= 10 },\n ],\n },\n {\n items: [\n { type: 'button', icon: Scan, tooltip: ctx.t('toolbar.fit_to_window'), action: ctx.onFitToWidth },\n { type: 'button', icon: OriginalSizeIcon, tooltip: ctx.t('toolbar.original_size'), action: ctx.onOriginalSize },\n ],\n },\n {\n items: [\n { type: 'button', icon: RotateCcw, tooltip: ctx.t('toolbar.rotate_left'), action: ctx.onRotateLeft },\n { type: 'button', icon: RotateCw, tooltip: ctx.t('toolbar.rotate_right'), action: ctx.onRotateRight },\n ],\n },\n {\n items: [\n { type: 'button', icon: RefreshCw, tooltip: ctx.t('toolbar.reset'), action: ctx.onReset },\n ],\n },\n ];\n}\n","import { ZoomIn, ZoomOut, RefreshCw } from 'lucide-vue-next';\nimport type { ToolbarGroup } from '../toolbar.types';\nimport type { Translator } from '@eternalheart/file-preview-core';\n\nexport interface PdfToolbarContext {\n zoom: number;\n onZoomIn: () => void;\n onZoomOut: () => void;\n onReset: () => void;\n t: Translator;\n}\n\nexport function getPdfToolbarGroups(ctx: PdfToolbarContext): ToolbarGroup[] {\n return [\n {\n items: [\n { type: 'button', icon: ZoomOut, tooltip: ctx.t('toolbar.zoom_out'), action: ctx.onZoomOut, disabled: ctx.zoom <= 0.01 },\n { type: 'text', content: `${Math.round(ctx.zoom * 100)}%`, minWidth: '3rem' },\n { type: 'button', icon: ZoomIn, tooltip: ctx.t('toolbar.zoom_in'), action: ctx.onZoomIn, disabled: ctx.zoom >= 10 },\n ],\n },\n {\n items: [\n { type: 'button', icon: RefreshCw, tooltip: ctx.t('toolbar.reset'), action: ctx.onReset },\n ],\n },\n ];\n}\n","import { ChevronLeft, ChevronRight, List, Maximize2, Minimize2 } from 'lucide-vue-next';\nimport type { ToolbarGroup } from '../toolbar.types';\nimport type { Translator } from '@eternalheart/file-preview-core';\n\nexport interface EpubToolbarContext {\n epubRef: { prevPage: () => void; nextPage: () => void; toggleFullWidth: () => void; toggleToc: () => void } | null;\n current: number;\n total: number;\n fullWidth: boolean;\n t: Translator;\n}\n\nexport function getEpubToolbarGroups(ctx: EpubToolbarContext): ToolbarGroup[] {\n return [\n {\n items: [\n { type: 'button', icon: List, tooltip: ctx.t('toolbar.toc'), action: () => ctx.epubRef?.toggleToc() },\n ],\n },\n {\n items: [\n { type: 'button', icon: ChevronLeft, tooltip: ctx.t('toolbar.prev_page'), action: () => ctx.epubRef?.prevPage() },\n { type: 'text', content: `${ctx.current} / ${ctx.total}`, minWidth: '4rem' },\n { type: 'button', icon: ChevronRight, tooltip: ctx.t('toolbar.next_page'), action: () => ctx.epubRef?.nextPage() },\n ],\n },\n {\n items: [\n {\n type: 'button',\n icon: ctx.fullWidth ? Minimize2 : Maximize2,\n tooltip: ctx.fullWidth ? ctx.t('toolbar.normal_width') : ctx.t('toolbar.full_width'),\n action: () => ctx.epubRef?.toggleFullWidth(),\n },\n ],\n },\n ];\n}\n","import type { ToolbarGroup } from '../toolbar.types';\nimport type { Translator } from '@eternalheart/file-preview-core';\nimport { ChevronLeft, ChevronRight, List, Maximize2, Minimize2 } from 'lucide-vue-next';\n\nexport interface MobiToolbarContext {\n mobiRef: { prevPage: () => void; nextPage: () => void; toggleFullWidth: () => void; toggleToc: () => void } | null;\n current: number;\n total: number;\n fullWidth: boolean;\n t: Translator;\n}\n\nexport function getMobiToolbarGroups(ctx: MobiToolbarContext): ToolbarGroup[] {\n return [\n {\n items: [\n { type: 'button', icon: List, tooltip: ctx.t('toolbar.toc'), action: () => ctx.mobiRef?.toggleToc() },\n ],\n },\n {\n items: [\n { type: 'button', icon: ChevronLeft, tooltip: ctx.t('toolbar.prev_page'), action: () => ctx.mobiRef?.prevPage() },\n { type: 'text', content: `${ctx.current} / ${ctx.total}`, minWidth: '4rem' },\n { type: 'button', icon: ChevronRight, tooltip: ctx.t('toolbar.next_page'), action: () => ctx.mobiRef?.nextPage() },\n ],\n },\n {\n items: [\n {\n type: 'button',\n icon: ctx.fullWidth ? Minimize2 : Maximize2,\n tooltip: ctx.fullWidth ? ctx.t('toolbar.normal_width') : ctx.t('toolbar.full_width'),\n action: () => ctx.mobiRef?.toggleFullWidth(),\n },\n ],\n },\n ];\n}\n","import type { ToolbarGroup } from '../toolbar.types';\nimport type { Translator } from '@eternalheart/file-preview-core';\nimport { formatFileSize } from '@eternalheart/file-preview-core';\n\nexport interface ZipToolbarStats {\n files: number;\n dirs: number;\n size: number;\n}\n\nexport interface ZipToolbarContext {\n stats: ZipToolbarStats | null;\n t: Translator;\n}\n\nexport function getZipToolbarGroups({ stats }: ZipToolbarContext): ToolbarGroup[] {\n if (!stats) return [];\n return [\n {\n items: [\n {\n type: 'text',\n content: `${stats.files} files · ${stats.dirs} dirs · ${formatFileSize(stats.size)}`,\n minWidth: '10rem',\n },\n ],\n },\n ];\n}\n","import { h } from 'vue';\nimport { WrapText, Eye, Code } from 'lucide-vue-next';\nimport type { ToolbarGroup } from '../toolbar.types';\nimport type { Translator } from '@eternalheart/file-preview-core';\n\nexport interface TextToolbarContext {\n wordWrap: boolean;\n onToggleWrap: () => void;\n isHtml: boolean;\n htmlPreview: boolean;\n onToggleHtmlPreview: () => void;\n t: Translator;\n}\n\nexport function getTextToolbarGroups(ctx: TextToolbarContext): ToolbarGroup[] {\n const groups: ToolbarGroup[] = [\n {\n items: [\n {\n type: 'button',\n icon: h(WrapText, { class: 'vfp-w-4 vfp-h-4' }),\n tooltip: ctx.wordWrap ? ctx.t('toolbar.wrap_off') : ctx.t('toolbar.wrap_on'),\n action: ctx.onToggleWrap,\n },\n ],\n },\n ];\n\n if (ctx.isHtml) {\n groups.push({\n items: [\n {\n type: 'button',\n icon: ctx.htmlPreview\n ? h(Code, { class: 'vfp-w-4 vfp-h-4' })\n : h(Eye, { class: 'vfp-w-4 vfp-h-4' }),\n tooltip: ctx.htmlPreview ? ctx.t('toolbar.source') : ctx.t('toolbar.preview'),\n action: ctx.onToggleHtmlPreview,\n },\n ],\n });\n }\n\n return groups;\n}\n","import { h } from 'vue';\nimport { Eye, Code } from 'lucide-vue-next';\nimport type { ToolbarGroup } from '../toolbar.types';\nimport type { Translator } from '@eternalheart/file-preview-core';\n\nexport interface MarkdownToolbarContext {\n viewMode: 'preview' | 'source';\n onToggleViewMode: () => void;\n t: Translator;\n}\n\nexport function getMarkdownToolbarGroups(ctx: MarkdownToolbarContext): ToolbarGroup[] {\n return [\n {\n items: [\n {\n type: 'button',\n icon: ctx.viewMode === 'preview'\n ? h(Code, { class: 'vfp-w-4 vfp-h-4' })\n : h(Eye, { class: 'vfp-w-4 vfp-h-4' }),\n tooltip: ctx.viewMode === 'preview' ? ctx.t('toolbar.source') : ctx.t('toolbar.preview'),\n action: ctx.onToggleViewMode,\n },\n ],\n },\n ];\n}\n","<script setup lang=\"ts\">\nimport { useTranslator } from '../composables/useTranslator';\nconst { t } = useTranslator();\n</script>\n\n<template>\n <div class=\"rfp-flex rfp-items-center rfp-justify-center rfp-w-full rfp-h-full rfp-text-fg-muted\">\n <div class=\"rfp-flex rfp-flex-col rfp-items-center rfp-gap-3\">\n <div class=\"rfp-w-8 rfp-h-8 rfp-rounded-full rfp-border-2 rfp-border-fg-muted rfp-border-t-transparent rfp-animate-spin\" />\n <span class=\"rfp-text-sm\">{{ t('common.loading') || 'Loading...' }}</span>\n </div>\n </div>\n</template>\n","// 集中的 Vue 异步装饰:把每个 renderer 转为 defineAsyncComponent,\n// 让 rollup 自动按 chunk 分割。\nimport { defineAsyncComponent, h, type Component } from 'vue';\nimport RendererLoading from './RendererLoading.vue';\n\ntype ComponentModule = { default: Component };\n\nconst wrap = (loader: () => Promise<ComponentModule>) =>\n defineAsyncComponent({\n loader,\n loadingComponent: { render: () => h(RendererLoading) },\n delay: 0,\n });\n\nexport const ImageRenderer = wrap(() => import('./Image/index.vue'));\nexport const PdfRenderer = wrap(() => import('./Pdf/index.vue'));\nexport const DocxRenderer = wrap(() => import('./Docx/index.vue'));\nexport const XlsxRenderer = wrap(() => import('./Xlsx/index.vue'));\nexport const PptxRenderer = wrap(() => import('./Pptx/index.vue'));\nexport const MsgRenderer = wrap(() => import('./Msg/index.vue'));\nexport const EpubRenderer = wrap(() => import('./Epub/index.vue'));\nexport const MobiRenderer = wrap(() => import('./Mobi/index.vue'));\nexport const VideoRenderer = wrap(() => import('./Video/index.vue'));\nexport const AudioRenderer = wrap(() => import('./Audio/index.vue'));\nexport const MarkdownRenderer = wrap(() => import('./Markdown/index.vue'));\nexport const JsonRenderer = wrap(() => import('./Json/index.vue'));\nexport const CsvRenderer = wrap(() => import('./Csv/index.vue'));\nexport const XmlRenderer = wrap(() => import('./Xml/index.vue'));\nexport const SubtitleRenderer = wrap(() => import('./Subtitle/index.vue'));\nexport const ZipRenderer = wrap(() => import('./Zip/index.vue'));\nexport const TextRenderer = wrap(() => import('./Text/index.vue'));\n","<script setup lang=\"ts\">\nimport { FileQuestion, Download } from 'lucide-vue-next';\nimport { useTranslator } from '../../composables/useTranslator';\n\ndefineProps<{\n fileName: string;\n fileType: string;\n}>();\n\nconst { t } = useTranslator();\n\nconst emit = defineEmits<{\n (e: 'download'): void;\n}>();\n</script>\n\n<template>\n <div\n class=\"vfp-flex vfp-flex-col vfp-items-center vfp-justify-center vfp-w-full vfp-h-full vfp-p-8 vfp-gap-6\"\n >\n <div\n class=\"vfp-w-32 vfp-h-32 vfp-rounded-full vfp-bg-surface-2 vfp-flex vfp-items-center vfp-justify-center\"\n >\n <FileQuestion class=\"vfp-w-16 vfp-h-16 vfp-text-fg-secondary\" />\n </div>\n\n <div class=\"vfp-text-fg-primary vfp-text-center\">\n <p class=\"vfp-text-xl vfp-font-medium vfp-mb-2\">{{ fileName }}</p>\n <p class=\"vfp-text-fg-secondary\">{{ t('common.unsupported_preview', { type: fileType }) }}</p>\n </div>\n\n <button\n class=\"vfp-flex vfp-items-center vfp-gap-2 vfp-px-6 vfp-py-3 vfp-bg-surface-2 hover:vfp-bg-surface-3 vfp-backdrop-blur-sm vfp-rounded-lg vfp-text-fg-primary vfp-font-medium vfp-transition-all\"\n @click=\"emit('download')\"\n >\n <Download class=\"vfp-w-5 vfp-h-5\" />\n {{ t('common.download') }}\n </button>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { ref, computed, watch, onMounted, onBeforeUnmount, toRef, provide } from 'vue';\nimport { X, Download, ChevronLeft, ChevronRight } from 'lucide-vue-next';\nimport {\n normalizeFiles,\n getFileType,\n downloadFileWithFetcher,\n type PreviewFile,\n type PreviewFileInput,\n type Locale,\n type Messages,\n type Theme,\n type CustomRendererEventPayload,\n type RequestHandler,\n type RequestInitFactory,\n type ShouldFetchAsBlob,\n} from '@eternalheart/file-preview-core';\nimport type { CustomRenderer, CustomRendererContext } from './types';\nimport { provideLocale, useTranslator } from './composables/useTranslator';\nimport { provideResolvedTheme } from './composables/useResolvedTheme';\nimport { provideRequestContext, useResolvedUrl, useFetcher } from './composables/useRequest';\nimport type { ToolbarGroup, ToolbarButtonItem, ToolbarTextItem } from './renderers/toolbar.types';\nimport { getImageToolbarGroups } from './renderers/Image/toolbar';\nimport { getPdfToolbarGroups } from './renderers/Pdf/toolbar';\nimport { getEpubToolbarGroups } from './renderers/Epub/toolbar';\nimport { getMobiToolbarGroups } from './renderers/Mobi/toolbar';\nimport { getZipToolbarGroups, type ZipToolbarStats } from './renderers/Zip/toolbar';\nimport { getTextToolbarGroups } from './renderers/Text/toolbar';\nimport { getMarkdownToolbarGroups } from './renderers/Markdown/toolbar';\n// Renderer 通过 defineAsyncComponent 动态加载,运行时按需下载对应 chunk\nimport {\n ImageRenderer,\n PdfRenderer,\n DocxRenderer,\n XlsxRenderer,\n PptxRenderer,\n MsgRenderer,\n EpubRenderer,\n MobiRenderer,\n VideoRenderer,\n AudioRenderer,\n MarkdownRenderer,\n JsonRenderer,\n CsvRenderer,\n XmlRenderer,\n SubtitleRenderer,\n ZipRenderer,\n TextRenderer,\n} from './renderers/lazy';\n// Unsupported 体量极小且每次回退都用,直接静态打包到主入口\nimport UnsupportedRenderer from './renderers/Unsupported/index.vue';\n\nconst MAX_ZIP_NESTING_DEPTH = 3;\n\ninterface Props {\n files: PreviewFileInput[];\n currentIndex: number;\n customRenderers?: CustomRenderer[];\n /** 运行模式: modal(弹窗) 或 embed(嵌入) */\n mode?: 'modal' | 'embed';\n /** ZIP 嵌套深度(内部使用),超过上限时不再递归渲染 ZIP */\n zipNestingDepth?: number;\n /** 语言 */\n locale?: Locale;\n /** 自定义翻译字典 */\n messages?: Partial<Record<Locale, Partial<Messages>>>;\n /** 无头模式:隐藏工具栏和导航箭头,仅渲染文件内容 */\n headless?: boolean;\n /** 主题模式,默认 'dark' */\n theme?: Theme;\n /** 自定义 RequestInit(或工厂函数):注入 Authorization 等鉴权头 */\n requestInit?: RequestInitFactory;\n /** 自定义请求处理器:完全接管库内 fetch */\n requestHandler?: RequestHandler;\n /** 返回 true 时,对应文件先 fetcher→blob URL 后喂给 image/video/audio/pdf 等 renderer */\n shouldFetchAsBlob?: ShouldFetchAsBlob;\n /** 自定义下载回调;不传时库内默认通过 fetcher 拉 Blob 触发下载 */\n onDownload?: (file: PreviewFile) => void | Promise<void>;\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n customRenderers: () => [],\n mode: 'modal',\n zipNestingDepth: 0,\n locale: undefined,\n messages: undefined,\n headless: false,\n theme: 'dark',\n requestInit: undefined,\n requestHandler: undefined,\n shouldFetchAsBlob: undefined,\n onDownload: undefined,\n});\n\nprovideRequestContext(() => ({\n requestInit: props.requestInit,\n requestHandler: props.requestHandler,\n shouldFetchAsBlob: props.shouldFetchAsBlob,\n}));\n\nconst emit = defineEmits<{\n (e: 'navigate', index: number): void;\n (e: 'close'): void;\n (e: 'custom-event', payload: CustomRendererEventPayload): void;\n}>();\n\nprovideLocale(toRef(props, 'locale'), toRef(props, 'messages'));\nconst { t } = useTranslator();\n\nconst systemDark = ref(\n typeof window !== 'undefined'\n ? window.matchMedia('(prefers-color-scheme: dark)').matches\n : true,\n);\n\nlet mediaQueryCleanup: (() => void) | null = null;\n\nwatch(\n () => props.theme,\n (theme) => {\n if (mediaQueryCleanup) {\n mediaQueryCleanup();\n mediaQueryCleanup = null;\n }\n if (theme === 'auto') {\n const mql = window.matchMedia('(prefers-color-scheme: dark)');\n const handler = (e: MediaQueryListEvent) => { systemDark.value = e.matches; };\n mql.addEventListener('change', handler);\n mediaQueryCleanup = () => mql.removeEventListener('change', handler);\n }\n },\n { immediate: true },\n);\n\nonBeforeUnmount(() => {\n if (mediaQueryCleanup) mediaQueryCleanup();\n});\n\nconst resolvedTheme = computed(() =>\n props.theme === 'auto' ? (systemDark.value ? 'dark' : 'light') : props.theme,\n);\nprovideResolvedTheme(resolvedTheme);\n\nconst zoom = ref(1);\nconst rotation = ref(0);\nconst currentPage = ref(1);\nconst totalPages = ref(1);\nconst contentNaturalWidth = ref(0);\nconst contentNaturalHeight = ref(0);\nconst imageResetKey = ref(0);\n\nconst contentRef = ref<HTMLDivElement | null>(null);\nconst rootRef = ref<HTMLDivElement | null>(null);\n\n// 导航箭头自动隐藏\nconst navVisible = ref(true);\nlet navHideTimer: number | null = null;\nconst NAV_HIDE_DELAY = 2000;\n\nconst resetNavTimer = () => {\n navVisible.value = true;\n if (navHideTimer !== null) {\n clearTimeout(navHideTimer);\n }\n navHideTimer = window.setTimeout(() => {\n navVisible.value = false;\n }, NAV_HIDE_DELAY);\n};\n\nconst handleMouseMove = () => resetNavTimer();\n\n// 标准化文件输入\nconst normalizedFiles = computed(() => normalizeFiles(props.files));\n\nconst currentFile = computed(() => normalizedFiles.value[props.currentIndex]);\n\n// 命中 shouldFetchAsBlob 时,把 file.url 转成 blob: URL 喂给 src 类 renderer\nconst resolvedUrl = useResolvedUrl(currentFile);\n\n// 自定义渲染器匹配\nconst customRenderer = computed(() => {\n if (!currentFile.value) return null;\n return props.customRenderers.find((r) => r.test(currentFile.value!)) || null;\n});\n\nconst customRendererComponent = computed(() => {\n if (!customRenderer.value || !currentFile.value) return null;\n return customRenderer.value.render(currentFile.value, customCtx.value);\n});\n\nconst fileType = computed(() => (currentFile.value ? getFileType(currentFile.value) : 'unsupported'));\n\n// 自定义渲染器事件派发器:未绑定 @custom-event 时仍调用 emit(Vue 会安全忽略未声明监听)\nconst emitCustom = (name: string, payload?: unknown) => {\n if (!currentFile.value) return;\n const ev: CustomRendererEventPayload = { name, payload, file: currentFile.value };\n emit('custom-event', ev);\n};\n\n// 自定义渲染器上下文\nconst customCtx = computed<CustomRendererContext>(() => ({\n emit: emitCustom,\n t: t.value,\n theme: resolvedTheme.value,\n locale: (props.locale ?? 'zh-CN') as Locale,\n}));\n\n// 通过 provide 暴露给深层子组件 inject 使用\nprovide('file-preview:custom-ctx', customCtx);\n\n// 重置状态当文件改变时\nwatch(\n () => props.currentIndex,\n () => {\n zoom.value = 1;\n rotation.value = 0;\n currentPage.value = 1;\n totalPages.value = 1;\n contentNaturalWidth.value = 0;\n contentNaturalHeight.value = 0;\n navVisible.value = true;\n if (navHideTimer !== null) {\n clearTimeout(navHideTimer);\n }\n }\n);\n\n// 图片加载后默认适应窗口\nwatch(\n [fileType, contentNaturalWidth, contentNaturalHeight],\n () => {\n if (\n fileType.value === 'image' &&\n contentNaturalWidth.value > 0 &&\n contentNaturalHeight.value > 0 &&\n contentRef.value\n ) {\n const containerWidth = contentRef.value.clientWidth;\n const containerHeight = contentRef.value.clientHeight;\n const scaleX = containerWidth / contentNaturalWidth.value;\n const scaleY = containerHeight / contentNaturalHeight.value;\n const newZoom = Math.min(scaleX, scaleY);\n zoom.value = Math.max(0.01, Math.min(10, newZoom));\n }\n }\n);\n\n// 导航箭头自动隐藏计时器\nwatch(\n () => normalizedFiles.value.length,\n (len) => {\n if (len > 1) resetNavTimer();\n },\n { immediate: true }\n);\n\n// 键盘导航\nconst handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape' && props.mode === 'modal') {\n emit('close');\n } else if (e.key === 'ArrowLeft' && props.currentIndex > 0) {\n emit('navigate', props.currentIndex - 1);\n } else if (e.key === 'ArrowRight' && props.currentIndex < normalizedFiles.value.length - 1) {\n emit('navigate', props.currentIndex + 1);\n }\n};\n\nonMounted(() => {\n if (props.mode === 'modal') {\n window.addEventListener('keydown', handleKeyDown);\n } else if (rootRef.value) {\n rootRef.value.addEventListener('keydown', handleKeyDown as EventListener);\n }\n});\n\nonBeforeUnmount(() => {\n if (navHideTimer !== null) clearTimeout(navHideTimer);\n if (props.mode === 'modal') {\n window.removeEventListener('keydown', handleKeyDown);\n } else if (rootRef.value) {\n rootRef.value.removeEventListener('keydown', handleKeyDown as EventListener);\n }\n});\n\nconst handleZoomIn = () => {\n zoom.value = Math.min(zoom.value + 0.1, 10);\n};\nconst handleZoomOut = () => {\n zoom.value = Math.max(zoom.value - 0.1, 0.01);\n};\nconst handleRotate = () => {\n rotation.value = rotation.value + 90;\n};\nconst handleRotateLeft = () => {\n rotation.value = rotation.value - 90;\n};\n\nconst handleFitToWidth = () => {\n if (contentRef.value && contentNaturalWidth.value > 0 && contentNaturalHeight.value > 0) {\n const containerWidth = contentRef.value.clientWidth;\n const containerHeight = contentRef.value.clientHeight;\n const scaleX = containerWidth / contentNaturalWidth.value;\n const scaleY = containerHeight / contentNaturalHeight.value;\n const newZoom = Math.min(scaleX, scaleY);\n zoom.value = Math.max(0.01, Math.min(10, newZoom));\n } else {\n zoom.value = 1;\n }\n rotation.value = 0;\n imageResetKey.value++;\n};\n\nconst handleOriginalSize = () => {\n zoom.value = 1;\n rotation.value = 0;\n imageResetKey.value++;\n};\n\nconst handleZoomChange = (newZoom: number) => {\n zoom.value = newZoom;\n};\n\nconst handleReset = () => {\n zoom.value = 1;\n rotation.value = 0;\n imageResetKey.value++;\n};\n\nconst fetcher = useFetcher();\nconst handleDownload = async () => {\n if (!currentFile.value) return;\n if (props.onDownload) {\n await props.onDownload(currentFile.value);\n return;\n }\n try {\n await downloadFileWithFetcher(currentFile.value.url, currentFile.value.name, fetcher.value);\n } catch (err) {\n console.error('[file-preview] download failed:', err);\n }\n};\n\nconst showCloseButton = computed(() => props.mode === 'modal');\n\nconst epubRef = ref<{ prevPage: () => void; nextPage: () => void; toggleFullWidth: () => void; toggleToc: () => void } | null>(null);\nconst epubCurrent = ref(0);\nconst epubTotal = ref(0);\nconst epubFullWidth = ref(false);\n\nconst mobiRef = ref<{ prevPage: () => void; nextPage: () => void; toggleFullWidth: () => void; toggleToc: () => void } | null>(null);\nconst mobiCurrent = ref(0);\nconst mobiTotal = ref(0);\nconst mobiFullWidth = ref(false);\n\nconst handleEpubChapterChange = (current: number, total: number) => {\n epubCurrent.value = current;\n epubTotal.value = total;\n};\n\nconst handleMobiChapterChange = (current: number, total: number) => {\n mobiCurrent.value = current;\n mobiTotal.value = total;\n};\n\nconst zipStats = ref<ZipToolbarStats | null>(null);\nconst handleZipStatsChange = (stats: ZipToolbarStats | null) => {\n zipStats.value = stats;\n};\n\nconst textWordWrap = ref(true);\nconst textHtmlPreview = ref(false);\nconst markdownViewMode = ref<'preview' | 'source'>('preview');\n\n// 工具栏配置 — 各 Renderer 自行声明。命中自定义渲染器时优先使用其 getToolbarGroups\nconst toolGroups = computed(() => {\n if (customRenderer.value) {\n return (\n customRenderer.value.getToolbarGroups?.(currentFile.value!, customCtx.value) ?? []\n );\n }\n if (fileType.value === 'image') {\n return getImageToolbarGroups({\n zoom: zoom.value,\n onZoomIn: handleZoomIn,\n onZoomOut: handleZoomOut,\n onFitToWidth: handleFitToWidth,\n onOriginalSize: handleOriginalSize,\n onRotateLeft: handleRotateLeft,\n onRotateRight: handleRotate,\n onReset: handleReset,\n t: t.value,\n });\n }\n if (fileType.value === 'pdf') {\n return getPdfToolbarGroups({\n zoom: zoom.value,\n onZoomIn: handleZoomIn,\n onZoomOut: handleZoomOut,\n onReset: handleReset,\n t: t.value,\n });\n }\n if (fileType.value === 'epub') {\n return getEpubToolbarGroups({\n epubRef: epubRef.value,\n current: epubCurrent.value,\n total: epubTotal.value,\n fullWidth: epubFullWidth.value,\n t: t.value,\n });\n }\n if (fileType.value === 'mobi') {\n return getMobiToolbarGroups({\n mobiRef: mobiRef.value,\n current: mobiCurrent.value,\n total: mobiTotal.value,\n fullWidth: mobiFullWidth.value,\n t: t.value,\n });\n }\n if (fileType.value === 'zip') {\n return getZipToolbarGroups({ stats: zipStats.value, t: t.value });\n }\n if (fileType.value === 'text') {\n const ext = currentFile.value!.name.split('.').pop()?.toLowerCase() || '';\n return getTextToolbarGroups({\n wordWrap: textWordWrap.value,\n onToggleWrap: () => { textWordWrap.value = !textWordWrap.value; },\n isHtml: ext === 'html' || ext === 'htm',\n htmlPreview: textHtmlPreview.value,\n onToggleHtmlPreview: () => { textHtmlPreview.value = !textHtmlPreview.value; },\n t: t.value,\n });\n }\n if (fileType.value === 'markdown') {\n return getMarkdownToolbarGroups({\n viewMode: markdownViewMode.value,\n onToggleViewMode: () => { markdownViewMode.value = markdownViewMode.value === 'preview' ? 'source' : 'preview'; },\n t: t.value,\n });\n }\n return [];\n});\n\n// 操作组:下载、关闭(通用,不属于任何 Renderer)\nconst actionGroups = computed<ToolbarGroup[]>(() => {\n const groups: ToolbarGroup[] = [\n {\n items: [\n { type: 'button', icon: Download, tooltip: t.value('common.download'), action: handleDownload },\n ],\n },\n ];\n if (showCloseButton.value) {\n groups.push({\n items: [\n { type: 'button', icon: X, tooltip: t.value('common.close'), action: () => emit('close') },\n ],\n });\n }\n return groups;\n});\n\nconst hasToolGroups = computed(() => toolGroups.value.length > 0);\n</script>\n\n<template>\n <div\n ref=\"rootRef\"\n :tabindex=\"mode === 'embed' ? 0 : -1\"\n :data-theme=\"resolvedTheme\"\n class=\"vfp-relative vfp-w-full vfp-h-full vfp-flex vfp-flex-col vfp-overflow-hidden vfp-outline-none\"\n >\n <!-- 顶部工具栏 -->\n <div\n v-if=\"!headless\"\n class=\"vfp-flex-shrink-0 vfp-z-10 vfp-backdrop-blur-md vfp-border-b vfp-bg-surface-toolbar vfp-border-line\"\n style=\"padding-top: env(safe-area-inset-top, 0px)\"\n >\n <!-- 第一行: 文件名 + 桌面端工具按钮 -->\n <div class=\"vfp-flex vfp-items-center vfp-justify-between vfp-px-3 md:vfp-px-5 vfp-py-1.5 md:vfp-py-2.5\">\n <!-- 左侧: 文件名 + 分页 -->\n <div class=\"vfp-flex vfp-items-center vfp-flex-1 vfp-min-w-0 vfp-mr-2 md:vfp-mr-3\">\n <h2 class=\"vfp-font-medium vfp-text-xs md:vfp-text-sm vfp-truncate vfp-text-fg-primary\">\n {{ currentFile?.name }}\n </h2>\n <span class=\"vfp-text-xs vfp-ml-2 vfp-flex-shrink-0 vfp-text-fg-muted\">\n {{ currentIndex + 1 }}/{{ normalizedFiles.length }}\n </span>\n </div>\n\n <!-- 移动端: 仅下载 + 关闭 -->\n <div class=\"vfp-flex vfp-items-center vfp-gap-1 md:vfp-hidden vfp-flex-shrink-0\">\n <template v-for=\"(group, gi) in actionGroups\" :key=\"'m-action-' + gi\">\n <template v-for=\"(item, ii) in group.items\" :key=\"'m-action-' + gi + '-' + ii\">\n <button\n v-if=\"item.type === 'button'\"\n class=\"toolbar-btn\"\n :data-tooltip=\"(item as ToolbarButtonItem).tooltip\"\n :disabled=\"(item as ToolbarButtonItem).disabled\"\n @click=\"(item as ToolbarButtonItem).action\"\n >\n <component :is=\"(item as ToolbarButtonItem).icon\" class=\"vfp-w-4 vfp-h-4\" />\n </button>\n </template>\n </template>\n </div>\n\n <!-- 桌面端: 完整工具按钮 -->\n <div class=\"vfp-hidden md:vfp-flex vfp-items-center vfp-gap-1 vfp-flex-shrink-0\">\n <template v-for=\"(group, gi) in toolGroups\" :key=\"'d-tool-' + gi\">\n <template v-for=\"(item, ii) in group.items\" :key=\"'d-tool-' + gi + '-' + ii\">\n <button\n v-if=\"item.type === 'button'\"\n class=\"toolbar-btn\"\n :data-tooltip=\"(item as ToolbarButtonItem).tooltip\"\n :disabled=\"(item as ToolbarButtonItem).disabled\"\n @click=\"(item as ToolbarButtonItem).action\"\n >\n <component :is=\"(item as ToolbarButtonItem).icon\" class=\"vfp-w-4 vfp-h-4\" />\n </button>\n <span\n v-else-if=\"item.type === 'text'\"\n class=\"vfp-text-xs vfp-text-center vfp-font-medium vfp-tabular-nums vfp-text-fg-tertiary\"\n :style=\"{ minWidth: (item as ToolbarTextItem).minWidth || 'auto' }\"\n >\n {{ (item as ToolbarTextItem).content }}\n </span>\n </template>\n <div class=\"vfp-w-px vfp-h-4 vfp-mx-1 vfp-bg-divide\" />\n </template>\n <template v-for=\"(group, gi) in actionGroups\" :key=\"'d-action-' + gi\">\n <template v-for=\"(item, ii) in group.items\" :key=\"'d-action-' + gi + '-' + ii\">\n <button\n v-if=\"item.type === 'button'\"\n class=\"toolbar-btn\"\n :data-tooltip=\"(item as ToolbarButtonItem).tooltip\"\n :disabled=\"(item as ToolbarButtonItem).disabled\"\n @click=\"(item as ToolbarButtonItem).action\"\n >\n <component :is=\"(item as ToolbarButtonItem).icon\" class=\"vfp-w-4 vfp-h-4\" />\n </button>\n </template>\n </template>\n </div>\n </div>\n\n <!-- 移动端第二行工具按钮 -->\n <div\n v-if=\"hasToolGroups\"\n class=\"vfp-flex vfp-items-center vfp-gap-1 vfp-px-3 vfp-pb-1.5 vfp-overflow-x-auto scrollbar-hide md:vfp-hidden\"\n >\n <template v-for=\"(group, gi) in toolGroups\" :key=\"'m-tool-' + gi\">\n <div v-if=\"gi > 0\" class=\"vfp-w-px vfp-h-4 vfp-mx-0.5 vfp-bg-divide\" />\n <template v-for=\"(item, ii) in group.items\" :key=\"'m-tool-' + gi + '-' + ii\">\n <button\n v-if=\"item.type === 'button'\"\n class=\"toolbar-btn\"\n :data-tooltip=\"(item as ToolbarButtonItem).tooltip\"\n :disabled=\"(item as ToolbarButtonItem).disabled\"\n @click=\"(item as ToolbarButtonItem).action\"\n >\n <component :is=\"(item as ToolbarButtonItem).icon\" class=\"vfp-w-4 vfp-h-4\" />\n </button>\n <span\n v-else-if=\"item.type === 'text'\"\n class=\"vfp-text-xs vfp-text-center vfp-font-medium vfp-tabular-nums vfp-text-fg-tertiary\"\n :style=\"{ minWidth: (item as ToolbarTextItem).minWidth || 'auto' }\"\n >\n {{ (item as ToolbarTextItem).content }}\n </span>\n </template>\n </template>\n </div>\n </div>\n\n <!-- 内容区域 -->\n <div\n ref=\"contentRef\"\n class=\"vfp-flex-1 vfp-flex vfp-items-center vfp-justify-center vfp-overflow-auto\"\n @mousemove=\"handleMouseMove\"\n >\n <template v-if=\"currentFile\">\n <component :is=\"customRendererComponent\" v-if=\"customRendererComponent\" :file=\"currentFile\" :ctx=\"customCtx\" />\n <template v-else>\n <ImageRenderer\n v-if=\"fileType === 'image'\"\n :url=\"resolvedUrl\"\n :zoom=\"zoom\"\n :rotation=\"rotation\"\n :reset-key=\"imageResetKey\"\n :file-size=\"currentFile.size\"\n @zoom-change=\"handleZoomChange\"\n @natural-width-change=\"(w: number) => (contentNaturalWidth = w)\"\n @natural-height-change=\"(h: number) => (contentNaturalHeight = h)\"\n />\n <PdfRenderer\n v-else-if=\"fileType === 'pdf'\"\n :url=\"resolvedUrl\"\n :zoom=\"zoom\"\n :current-page=\"currentPage\"\n @page-change=\"(p: number) => (currentPage = p)\"\n @total-pages-change=\"(t: number) => (totalPages = t)\"\n @page-width-change=\"(w: number) => (contentNaturalWidth = w)\"\n />\n <DocxRenderer v-else-if=\"fileType === 'docx'\" :url=\"resolvedUrl\" />\n <XlsxRenderer v-else-if=\"fileType === 'xlsx'\" :url=\"resolvedUrl\" />\n <PptxRenderer v-else-if=\"fileType === 'pptx'\" :url=\"resolvedUrl\" />\n <MsgRenderer v-else-if=\"fileType === 'msg'\" :url=\"resolvedUrl\" />\n <EpubRenderer\n v-else-if=\"fileType === 'epub'\"\n ref=\"epubRef\"\n :url=\"resolvedUrl\"\n @chapter-change=\"handleEpubChapterChange\"\n @full-width-change=\"(v: boolean) => (epubFullWidth = v)\"\n />\n <MobiRenderer\n v-else-if=\"fileType === 'mobi'\"\n ref=\"mobiRef\"\n :url=\"resolvedUrl\"\n @chapter-change=\"handleMobiChapterChange\"\n @full-width-change=\"(v: boolean) => (mobiFullWidth = v)\"\n />\n <VideoRenderer v-else-if=\"fileType === 'video'\" :url=\"resolvedUrl\" />\n <AudioRenderer\n v-else-if=\"fileType === 'audio'\"\n :url=\"resolvedUrl\"\n :file-name=\"currentFile.name\"\n />\n <MarkdownRenderer v-else-if=\"fileType === 'markdown'\" :url=\"resolvedUrl\" :view-mode=\"markdownViewMode\" />\n <JsonRenderer\n v-else-if=\"fileType === 'json'\"\n :url=\"resolvedUrl\"\n :file-name=\"currentFile.name\"\n />\n <CsvRenderer\n v-else-if=\"fileType === 'csv'\"\n :url=\"resolvedUrl\"\n :file-name=\"currentFile.name\"\n />\n <XmlRenderer\n v-else-if=\"fileType === 'xml'\"\n :url=\"resolvedUrl\"\n :file-name=\"currentFile.name\"\n />\n <SubtitleRenderer\n v-else-if=\"fileType === 'subtitle'\"\n :url=\"resolvedUrl\"\n :file-name=\"currentFile.name\"\n />\n <template v-else-if=\"fileType === 'zip' && props.zipNestingDepth >= MAX_ZIP_NESTING_DEPTH\">\n <UnsupportedRenderer\n :file-name=\"currentFile.name\"\n :file-type=\"currentFile.type\"\n @download=\"handleDownload\"\n />\n </template>\n <ZipRenderer\n v-else-if=\"fileType === 'zip'\"\n :url=\"resolvedUrl\"\n :nesting-depth=\"props.zipNestingDepth\"\n @stats-change=\"handleZipStatsChange\"\n />\n <TextRenderer\n v-else-if=\"fileType === 'text'\"\n :url=\"resolvedUrl\"\n :file-name=\"currentFile.name\"\n :word-wrap=\"textWordWrap\"\n :html-preview=\"textHtmlPreview\"\n />\n <UnsupportedRenderer\n v-else\n :file-name=\"currentFile.name\"\n :file-type=\"currentFile.type\"\n @download=\"handleDownload\"\n />\n </template>\n </template>\n </div>\n\n <!-- 左右导航箭头 -->\n <template v-if=\"!headless && normalizedFiles.length > 1\">\n <button\n v-if=\"currentIndex > 0\"\n :style=\"{\n opacity: navVisible ? 1 : 0,\n transform: navVisible ? 'translateY(-50%)' : 'translateY(-50%) translateX(-20px)',\n pointerEvents: navVisible ? 'auto' : 'none',\n transition: 'opacity 0.2s, transform 0.2s',\n }\"\n class=\"vfp-absolute vfp-z-20 vfp-left-2 md:vfp-left-4 vfp-top-1/2 vfp-w-10 vfp-h-10 md:vfp-w-12 md:vfp-h-12 vfp-rounded-full vfp-backdrop-blur-xl vfp-border vfp-flex vfp-items-center vfp-justify-center vfp-transition-colors vfp-shadow-2xl vfp-bg-surface-nav vfp-border-line hover:vfp-bg-surface-nav-hover vfp-text-fg-primary\"\n @click=\"emit('navigate', currentIndex - 1)\"\n @mouseenter=\"navVisible = true\"\n >\n <ChevronLeft class=\"vfp-w-5 vfp-h-5 md:vfp-w-6 md:vfp-h-6\" />\n </button>\n\n <button\n v-if=\"currentIndex < normalizedFiles.length - 1\"\n :style=\"{\n opacity: navVisible ? 1 : 0,\n transform: navVisible ? 'translateY(-50%)' : 'translateY(-50%) translateX(20px)',\n pointerEvents: navVisible ? 'auto' : 'none',\n transition: 'opacity 0.2s, transform 0.2s',\n }\"\n class=\"vfp-absolute vfp-z-20 vfp-right-2 md:vfp-right-4 vfp-top-1/2 vfp-w-10 vfp-h-10 md:vfp-w-12 md:vfp-h-12 vfp-rounded-full vfp-backdrop-blur-xl vfp-border vfp-flex vfp-items-center vfp-justify-center vfp-transition-colors vfp-shadow-2xl vfp-bg-surface-nav vfp-border-line hover:vfp-bg-surface-nav-hover vfp-text-fg-primary\"\n @click=\"emit('navigate', currentIndex + 1)\"\n @mouseenter=\"navVisible = true\"\n >\n <ChevronRight class=\"vfp-w-5 vfp-h-5 md:vfp-w-6 md:vfp-h-6\" />\n </button>\n </template>\n </div>\n</template>\n\n<style scoped>\n.toolbar-btn {\n position: relative;\n padding: 0.5rem;\n border-radius: 0.375rem;\n transition: all 0.15s;\n user-select: none;\n color: var(--fp-fg-primary);\n background: transparent;\n border: 0;\n cursor: pointer;\n}\n@media (min-width: 768px) {\n .toolbar-btn {\n padding: 0.375rem;\n }\n}\n.toolbar-btn:hover {\n background: var(--fp-surface-2);\n}\n.toolbar-btn:active {\n background: var(--fp-surface-3);\n}\n.toolbar-btn:disabled {\n color: var(--fp-fg-disabled);\n cursor: not-allowed;\n}\n/* Tooltip */\n.toolbar-btn[data-tooltip]::after {\n content: attr(data-tooltip);\n position: absolute;\n left: 50%;\n top: 100%;\n transform: translateX(-50%);\n margin-top: 6px;\n padding: 4px 8px;\n background: var(--fp-fg-primary);\n color: var(--fp-fg-inverse);\n font-size: 12px;\n line-height: 1.5;\n border-radius: 4px;\n white-space: nowrap;\n pointer-events: none;\n opacity: 0;\n visibility: hidden;\n transition: opacity 0.2s, visibility 0.2s;\n z-index: 50;\n}\n.toolbar-btn[data-tooltip]::before {\n content: '';\n position: absolute;\n left: 50%;\n top: 100%;\n transform: translateX(-50%);\n margin-top: 2px;\n border: 4px solid transparent;\n border-bottom-color: var(--fp-fg-primary);\n pointer-events: none;\n opacity: 0;\n visibility: hidden;\n transition: opacity 0.2s, visibility 0.2s;\n z-index: 50;\n}\n.toolbar-btn[data-tooltip]:hover::after,\n.toolbar-btn[data-tooltip]:hover::before {\n opacity: 1;\n visibility: visible;\n}\n</style>\n","import { onMounted, onUnmounted } from 'vue';\n\n/**\n * 锁定 body 滚动 (用于 Modal)\n */\nexport function useScrollLock(enabled: () => boolean) {\n let originalOverflow = '';\n let originalPaddingRight = '';\n let locked = false;\n\n const lock = () => {\n if (locked || typeof document === 'undefined') return;\n originalOverflow = document.body.style.overflow;\n originalPaddingRight = document.body.style.paddingRight;\n const scrollbarWidth = window.innerWidth - document.documentElement.clientWidth;\n document.body.style.overflow = 'hidden';\n if (scrollbarWidth > 0) {\n document.body.style.paddingRight = `${scrollbarWidth}px`;\n }\n locked = true;\n };\n\n const unlock = () => {\n if (!locked || typeof document === 'undefined') return;\n document.body.style.overflow = originalOverflow;\n document.body.style.paddingRight = originalPaddingRight;\n locked = false;\n };\n\n onMounted(() => {\n if (enabled()) lock();\n });\n\n onUnmounted(() => {\n unlock();\n });\n\n return { lock, unlock };\n}\n","<script setup lang=\"ts\">\nimport { watch, ref, onBeforeUnmount, computed } from 'vue';\nimport type { PreviewFile, PreviewFileInput, Locale, Messages, Theme, CustomRendererEventPayload, RequestHandler, RequestInitFactory, ShouldFetchAsBlob } from '@eternalheart/file-preview-core';\nimport type { CustomRenderer } from './types';\nimport FilePreviewContent from './FilePreviewContent.vue';\nimport { useScrollLock } from './composables/useScrollLock';\n\ninterface Props {\n files: PreviewFileInput[];\n currentIndex: number;\n isOpen: boolean;\n customRenderers?: CustomRenderer[];\n /** 语言 */\n locale?: Locale;\n /** 自定义翻译字典 */\n messages?: Partial<Record<Locale, Partial<Messages>>>;\n /** 无头模式:隐藏工具栏和导航箭头 */\n headless?: boolean;\n /** 主题模式,默认 'dark' */\n theme?: Theme;\n /** 自定义 RequestInit(或工厂函数):注入 Authorization 等鉴权头 */\n requestInit?: RequestInitFactory;\n /** 自定义请求处理器:完全接管库内 fetch */\n requestHandler?: RequestHandler;\n /** 返回 true 时,对应文件先 fetcher→blob URL 后喂给 image/video/audio/pdf 等 renderer */\n shouldFetchAsBlob?: ShouldFetchAsBlob;\n /** 自定义下载回调;不传时库内默认通过 fetcher 拉 Blob 触发下载 */\n onDownload?: (file: PreviewFile) => void | Promise<void>;\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n customRenderers: () => [],\n locale: undefined,\n messages: undefined,\n headless: false,\n theme: 'dark',\n requestInit: undefined,\n requestHandler: undefined,\n shouldFetchAsBlob: undefined,\n onDownload: undefined,\n});\n\nconst emit = defineEmits<{\n (e: 'close'): void;\n (e: 'navigate', index: number): void;\n (e: 'custom-event', payload: CustomRendererEventPayload): void;\n}>();\n\nconst { lock, unlock } = useScrollLock(() => props.isOpen);\n\nwatch(\n () => props.isOpen,\n (open) => {\n if (open) lock();\n else unlock();\n }\n);\n\nconst systemDark = ref(\n typeof window !== 'undefined'\n ? window.matchMedia('(prefers-color-scheme: dark)').matches\n : true,\n);\n\nlet mediaQueryCleanup: (() => void) | null = null;\n\nwatch(\n () => props.theme,\n (theme) => {\n if (mediaQueryCleanup) {\n mediaQueryCleanup();\n mediaQueryCleanup = null;\n }\n if (theme === 'auto') {\n const mql = window.matchMedia('(prefers-color-scheme: dark)');\n const handler = (e: MediaQueryListEvent) => { systemDark.value = e.matches; };\n mql.addEventListener('change', handler);\n mediaQueryCleanup = () => mql.removeEventListener('change', handler);\n }\n },\n { immediate: true },\n);\n\nonBeforeUnmount(() => {\n if (mediaQueryCleanup) mediaQueryCleanup();\n});\n\nconst resolvedTheme = computed(() =>\n props.theme === 'auto' ? (systemDark.value ? 'dark' : 'light') : props.theme,\n);\n\nconst handleBackdropClick = () => emit('close');\nconst handleContentClick = (e: MouseEvent) => e.stopPropagation();\nconst handleWheel = (e: WheelEvent) => e.stopPropagation();\n</script>\n\n<template>\n <Teleport to=\"body\">\n <Transition name=\"vfp-fade\">\n <div v-if=\"isOpen\" class=\"vfp-root\" :data-theme=\"resolvedTheme\">\n <div\n class=\"vfp-fixed vfp-inset-0 vfp-z-[9999] vfp-flex vfp-items-center vfp-justify-center vfp-backdrop-blur-md vfp-overflow-hidden vfp-bg-surface-overlay\"\n @click=\"handleBackdropClick\"\n @wheel=\"handleWheel\"\n >\n <div class=\"vfp-relative vfp-w-full vfp-h-full\" @click=\"handleContentClick\">\n <FilePreviewContent\n mode=\"modal\"\n :files=\"files\"\n :current-index=\"currentIndex\"\n :custom-renderers=\"customRenderers\"\n :locale=\"locale\"\n :messages=\"messages\"\n :headless=\"headless\"\n :theme=\"theme\"\n :request-init=\"requestInit\"\n :request-handler=\"requestHandler\"\n :should-fetch-as-blob=\"shouldFetchAsBlob\"\n :on-download=\"onDownload\"\n @close=\"emit('close')\"\n @navigate=\"(i) => emit('navigate', i)\"\n @custom-event=\"(p) => emit('custom-event', p)\"\n />\n </div>\n </div>\n </div>\n </Transition>\n </Teleport>\n</template>\n","<script setup lang=\"ts\">\nimport { ref, watch, onBeforeUnmount, computed } from 'vue';\nimport type { CSSProperties } from 'vue';\nimport type { PreviewFile, PreviewFileInput, Locale, Messages, Theme, CustomRendererEventPayload, RequestHandler, RequestInitFactory, ShouldFetchAsBlob } from '@eternalheart/file-preview-core';\nimport type { CustomRenderer } from './types';\nimport FilePreviewContent from './FilePreviewContent.vue';\n\ninterface Props {\n files: PreviewFileInput[];\n currentIndex?: number;\n customRenderers?: CustomRenderer[];\n /** 宽度,默认 100% 填充父容器 */\n width?: number | string;\n /** 高度,默认 100% 填充父容器 */\n height?: number | string;\n /** 语言 */\n locale?: Locale;\n /** 自定义翻译字典 */\n messages?: Partial<Record<Locale, Partial<Messages>>>;\n /** 无头模式:隐藏工具栏和导航箭头 */\n headless?: boolean;\n /** 主题模式,默认 'dark' */\n theme?: Theme;\n /** 自定义 RequestInit(或工厂函数):注入 Authorization 等鉴权头 */\n requestInit?: RequestInitFactory;\n /** 自定义请求处理器:完全接管库内 fetch */\n requestHandler?: RequestHandler;\n /** 返回 true 时,对应文件先 fetcher→blob URL 后喂给 image/video/audio/pdf 等 renderer */\n shouldFetchAsBlob?: ShouldFetchAsBlob;\n /** 自定义下载回调;不传时库内默认通过 fetcher 拉 Blob 触发下载 */\n onDownload?: (file: PreviewFile) => void | Promise<void>;\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n currentIndex: 0,\n customRenderers: () => [],\n width: '100%',\n height: '100%',\n locale: undefined,\n messages: undefined,\n headless: false,\n theme: 'dark',\n requestInit: undefined,\n requestHandler: undefined,\n shouldFetchAsBlob: undefined,\n onDownload: undefined,\n});\n\nconst emit = defineEmits<{\n (e: 'navigate', index: number): void;\n (e: 'custom-event', payload: CustomRendererEventPayload): void;\n}>();\n\nconst systemDark = ref(\n typeof window !== 'undefined'\n ? window.matchMedia('(prefers-color-scheme: dark)').matches\n : true,\n);\n\nlet mediaQueryCleanup: (() => void) | null = null;\n\nwatch(\n () => props.theme,\n (theme) => {\n if (mediaQueryCleanup) {\n mediaQueryCleanup();\n mediaQueryCleanup = null;\n }\n if (theme === 'auto') {\n const mql = window.matchMedia('(prefers-color-scheme: dark)');\n const handler = (e: MediaQueryListEvent) => { systemDark.value = e.matches; };\n mql.addEventListener('change', handler);\n mediaQueryCleanup = () => mql.removeEventListener('change', handler);\n }\n },\n { immediate: true },\n);\n\nonBeforeUnmount(() => {\n if (mediaQueryCleanup) mediaQueryCleanup();\n});\n\nconst resolvedTheme = computed(() =>\n props.theme === 'auto' ? (systemDark.value ? 'dark' : 'light') : props.theme,\n);\n\nconst wrapperStyle: CSSProperties = {\n width: typeof props.width === 'number' ? `${props.width}px` : props.width,\n height: typeof props.height === 'number' ? `${props.height}px` : props.height,\n};\n</script>\n\n<template>\n <div class=\"vfp-root\" :style=\"wrapperStyle\" :data-theme=\"resolvedTheme\">\n <div class=\"vfp-relative vfp-w-full vfp-h-full vfp-overflow-hidden vfp-bg-surface-overlay\">\n <FilePreviewContent\n mode=\"embed\"\n :files=\"files\"\n :current-index=\"currentIndex\"\n :custom-renderers=\"customRenderers\"\n :locale=\"locale\"\n :messages=\"messages\"\n :headless=\"headless\"\n :theme=\"theme\"\n :request-init=\"requestInit\"\n :request-handler=\"requestHandler\"\n :should-fetch-as-blob=\"shouldFetchAsBlob\"\n :on-download=\"onDownload\"\n @navigate=\"(i) => emit('navigate', i)\"\n @custom-event=\"(p) => emit('custom-event', p)\"\n />\n </div>\n </div>\n</template>\n","// 导入样式\nimport './index.css';\n\n// 导入版本号\nimport packageJson from '../package.json';\n\n// 导出版本号\nexport const VERSION = packageJson.version;\n\n// 导出主组件\nexport { default as FilePreviewModal } from './FilePreviewModal.vue';\nexport { default as FilePreviewEmbed } from './FilePreviewEmbed.vue';\nexport { default as FilePreviewContent } from './FilePreviewContent.vue';\n\n// 导出类型定义\nexport type {\n PreviewFile,\n PreviewFileLink,\n PreviewFileInput,\n FileType,\n PreviewState,\n ToolbarAction,\n CustomRenderer,\n CustomRendererContext,\n CustomRendererEventPayload,\n} from './types';\n\n// 导出工具函数\nexport {\n normalizeFile,\n normalizeFiles,\n getFileType,\n configurePdfWorker,\n} from '@eternalheart/file-preview-core';\n\nexport type { PdfWorkerOptions } from '@eternalheart/file-preview-core';\n\n// 导出 i18n 相关\nexport { useTranslator, provideLocale } from './composables/useTranslator';\nexport { LOCALE_KEY } from './i18n/localeKey';\nexport type { Locale, Messages, Translator, Theme } from '@eternalheart/file-preview-core';\n"],"names":["A","n","k","t","U","dt","ut","r","o","ft","pt","mt","ht","gt","xt","a","i","l","s","c","f","p","u","$","bt","B","W","Ft","wt","vt","z","yt","E","Z","V","L","d","T","R","O","m","q","h","F","b","g","x","v","N","D","w","y","_","S","H","_t","Ct","j","kt","St","Mt","G","J","X","K","Q","M","Y","tt","et","ot","nt","rt","P","zt","Et","Lt","it","at","C","st","lt","Nt","LOCALE_KEY","provideLocale","locale","messages","localeRef","computed","unref","createTranslator","provide","fallbackT","getFallback","useTranslator","injected","inject","THEME_KEY","provideResolvedTheme","theme","themeRef","useResolvedTheme","REQUEST_KEY","provideRequestContext","options","value","opts","createFetcher","defaultContext","url","init","useRequestContext","useFetcher","ctx","useResolvedUrl","file","resolved","ref","createdBlobUrl","cleanup","watch","need","_b","_a","fetcher","_old","onCleanup","cancelled","blobUrl","fetchAsBlobUrl","err","onBeforeUnmount","OriginalSizeIcon","_props","attrs","getImageToolbarGroups","ZoomOut","ZoomIn","Scan","RotateCcw","RotateCw","RefreshCw","getPdfToolbarGroups","getEpubToolbarGroups","List","ChevronLeft","ChevronRight","Minimize2","Maximize2","getMobiToolbarGroups","getZipToolbarGroups","stats","formatFileSize","getTextToolbarGroups","groups","WrapText","Code","Eye","getMarkdownToolbarGroups","_openBlock","_createElementBlock","_hoisted_1","_createElementVNode","_hoisted_2","_hoisted_3","_toDisplayString","_unref","wrap","loader","defineAsyncComponent","RendererLoading","ImageRenderer","PdfRenderer","DocxRenderer","XlsxRenderer","PptxRenderer","MsgRenderer","EpubRenderer","MobiRenderer","VideoRenderer","AudioRenderer","MarkdownRenderer","JsonRenderer","CsvRenderer","XmlRenderer","SubtitleRenderer","ZipRenderer","TextRenderer","emit","__emit","_createVNode","FileQuestion","_hoisted_4","__props","_hoisted_5","Download","_createTextVNode","MAX_ZIP_NESTING_DEPTH","NAV_HIDE_DELAY","props","toRef","systemDark","mediaQueryCleanup","mql","handler","e","resolvedTheme","zoom","rotation","currentPage","totalPages","contentNaturalWidth","contentNaturalHeight","imageResetKey","contentRef","rootRef","navVisible","navHideTimer","resetNavTimer","handleMouseMove","normalizedFiles","normalizeFiles","currentFile","resolvedUrl","customRenderer","customRendererComponent","customCtx","fileType","getFileType","emitCustom","name","payload","ev","containerWidth","containerHeight","scaleX","scaleY","newZoom","len","handleKeyDown","onMounted","handleZoomIn","handleZoomOut","handleRotate","handleRotateLeft","handleFitToWidth","handleOriginalSize","handleZoomChange","handleReset","handleDownload","downloadFileWithFetcher","showCloseButton","epubRef","epubCurrent","epubTotal","epubFullWidth","mobiRef","mobiCurrent","mobiTotal","mobiFullWidth","handleEpubChapterChange","current","total","handleMobiChapterChange","zipStats","handleZipStatsChange","textWordWrap","textHtmlPreview","markdownViewMode","toolGroups","ext","_c","actionGroups","hasToolGroups","_hoisted_6","_hoisted_7","_Fragment","_renderList","group","gi","item","ii","_createBlock","_resolveDynamicComponent","_hoisted_9","_normalizeStyle","_hoisted_12","_hoisted_13","_cache","UnsupportedRenderer","$event","useScrollLock","enabled","originalOverflow","originalPaddingRight","locked","lock","scrollbarWidth","unlock","onUnmounted","open","handleBackdropClick","handleContentClick","handleWheel","_Teleport","_Transition","FilePreviewContent","wrapperStyle","VERSION","packageJson"],"mappings":"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"}
|
|
@@ -1,22 +1,22 @@
|
|
|
1
|
-
import { defineComponent as
|
|
2
|
-
import { FileSpreadsheet as
|
|
3
|
-
import
|
|
4
|
-
import
|
|
1
|
+
import { defineComponent as T, ref as h, onMounted as z, watch as D, onBeforeUnmount as M, openBlock as u, createElementBlock as c, createElementVNode as s, toDisplayString as x, unref as w, createCommentVNode as g, createVNode as S, normalizeStyle as W } from "vue";
|
|
2
|
+
import { FileSpreadsheet as B } from "lucide-vue-next";
|
|
3
|
+
import H from "exceljs";
|
|
4
|
+
import R from "x-data-spreadsheet";
|
|
5
5
|
/* empty css */
|
|
6
|
-
import { u as
|
|
7
|
-
const
|
|
6
|
+
import { u as j, a as C, z as F } from "./index-BA-bP8P6.mjs";
|
|
7
|
+
const L = { class: "vfp-relative vfp-flex vfp-flex-col vfp-items-center vfp-w-full vfp-h-full" }, N = {
|
|
8
8
|
key: 0,
|
|
9
9
|
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"
|
|
10
|
-
},
|
|
10
|
+
}, V = { class: "vfp-text-center" }, O = { class: "vfp-text-xs md:vfp-text-sm vfp-text-fg-secondary vfp-font-medium" }, q = {
|
|
11
11
|
key: 1,
|
|
12
12
|
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"
|
|
13
|
-
},
|
|
13
|
+
}, A = { class: "vfp-text-center vfp-max-w-sm md:vfp-max-w-md vfp-px-4" }, G = { 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-green-500 vfp-via-emerald-500 vfp-to-teal-500 vfp-flex vfp-items-center vfp-justify-center vfp-shadow-2xl" }, I = { 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" }, P = ["href"], Z = /* @__PURE__ */ T({
|
|
14
14
|
__name: "index",
|
|
15
15
|
props: {
|
|
16
16
|
url: {}
|
|
17
17
|
},
|
|
18
18
|
setup(b) {
|
|
19
|
-
const _ = b, { t: p } =
|
|
19
|
+
const _ = b, { t: p } = j(), E = C(), o = h(!0), l = h(null), r = h(null);
|
|
20
20
|
let n = null, v = null, a = null, d = { width: 0, height: 0 };
|
|
21
21
|
const m = () => {
|
|
22
22
|
if (!r.value) return { width: 800, height: 600 };
|
|
@@ -26,7 +26,7 @@ const j = { class: "vfp-relative vfp-flex vfp-flex-col vfp-items-center vfp-w-fu
|
|
|
26
26
|
if (!r.value || !n) return;
|
|
27
27
|
r.value.innerHTML = "";
|
|
28
28
|
const { width: e, height: t } = m(), f = e < 640;
|
|
29
|
-
new
|
|
29
|
+
new R(r.value, {
|
|
30
30
|
mode: "read",
|
|
31
31
|
showToolbar: !1,
|
|
32
32
|
showContextmenu: !1,
|
|
@@ -50,7 +50,7 @@ const j = { class: "vfp-relative vfp-flex vfp-flex-col vfp-items-center vfp-w-fu
|
|
|
50
50
|
if (r.value) {
|
|
51
51
|
o.value = !0, l.value = null;
|
|
52
52
|
try {
|
|
53
|
-
const e = await
|
|
53
|
+
const e = await E.value(_.url, {
|
|
54
54
|
mode: "cors",
|
|
55
55
|
credentials: "omit",
|
|
56
56
|
redirect: "follow"
|
|
@@ -60,8 +60,8 @@ const j = { class: "vfp-relative vfp-flex vfp-flex-col vfp-items-center vfp-w-fu
|
|
|
60
60
|
const t = await e.arrayBuffer();
|
|
61
61
|
if (t.byteLength === 0)
|
|
62
62
|
throw new Error("文件为空");
|
|
63
|
-
const f = new
|
|
64
|
-
await f.xlsx.load(t), n =
|
|
63
|
+
const f = new H.Workbook();
|
|
64
|
+
await f.xlsx.load(t), n = F(f), y(), o.value = !1;
|
|
65
65
|
} catch (e) {
|
|
66
66
|
console.error("Excel 解析错误:", e);
|
|
67
67
|
let t = p.value("xlsx.parse_failed");
|
|
@@ -69,7 +69,7 @@ const j = { class: "vfp-relative vfp-flex vfp-flex-col vfp-items-center vfp-w-fu
|
|
|
69
69
|
}
|
|
70
70
|
}
|
|
71
71
|
};
|
|
72
|
-
return
|
|
72
|
+
return z(() => {
|
|
73
73
|
if (!r.value) return;
|
|
74
74
|
let e = !0;
|
|
75
75
|
v = new ResizeObserver(() => {
|
|
@@ -91,25 +91,25 @@ const j = { class: "vfp-relative vfp-flex vfp-flex-col vfp-items-center vfp-w-fu
|
|
|
91
91
|
}
|
|
92
92
|
), M(() => {
|
|
93
93
|
v && v.disconnect(), a !== null && clearTimeout(a), n = null, r.value && (r.value.innerHTML = "");
|
|
94
|
-
}), (e, t) => (u(), c("div",
|
|
95
|
-
o.value ? (u(), c("div",
|
|
96
|
-
s("div",
|
|
94
|
+
}), (e, t) => (u(), c("div", L, [
|
|
95
|
+
o.value ? (u(), c("div", N, [
|
|
96
|
+
s("div", V, [
|
|
97
97
|
t[0] || (t[0] = s("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)),
|
|
98
|
-
s("p",
|
|
98
|
+
s("p", O, x(w(p)("xlsx.loading")), 1)
|
|
99
99
|
])
|
|
100
100
|
])) : g("", !0),
|
|
101
|
-
l.value && !o.value ? (u(), c("div",
|
|
102
|
-
s("div",
|
|
103
|
-
s("div",
|
|
104
|
-
S(w(
|
|
101
|
+
l.value && !o.value ? (u(), c("div", q, [
|
|
102
|
+
s("div", A, [
|
|
103
|
+
s("div", G, [
|
|
104
|
+
S(w(B), { class: "vfp-w-12 vfp-h-12 md:vfp-w-16 md:vfp-h-16 vfp-text-fg-primary" })
|
|
105
105
|
]),
|
|
106
|
-
s("p",
|
|
107
|
-
s("p",
|
|
106
|
+
s("p", I, x(w(p)("xlsx.load_failed")), 1),
|
|
107
|
+
s("p", J, x(l.value), 1),
|
|
108
108
|
s("a", {
|
|
109
109
|
href: b.url,
|
|
110
110
|
download: "",
|
|
111
111
|
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"
|
|
112
|
-
}, " 下载文件 ", 8,
|
|
112
|
+
}, " 下载文件 ", 8, P),
|
|
113
113
|
t[1] || (t[1] = s("p", { class: "vfp-text-xs vfp-text-fg-muted vfp-mt-3 md:vfp-mt-4" }, "提示:可以使用 Microsoft Excel 或 WPS 打开", -1))
|
|
114
114
|
])
|
|
115
115
|
])) : g("", !0),
|
|
@@ -118,12 +118,12 @@ const j = { class: "vfp-relative vfp-flex vfp-flex-col vfp-items-center vfp-w-fu
|
|
|
118
118
|
ref_key: "containerRef",
|
|
119
119
|
ref: r,
|
|
120
120
|
class: "xlsx-spreadsheet-container vfp-w-full vfp-h-full",
|
|
121
|
-
style:
|
|
121
|
+
style: W({ opacity: o.value ? 0 : 1 })
|
|
122
122
|
}, null, 4))
|
|
123
123
|
]));
|
|
124
124
|
}
|
|
125
125
|
});
|
|
126
126
|
export {
|
|
127
|
-
|
|
127
|
+
Z as default
|
|
128
128
|
};
|
|
129
|
-
//# sourceMappingURL=index-
|
|
129
|
+
//# sourceMappingURL=index-BP_8GjEV.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-BP_8GjEV.mjs","sources":["../../src/renderers/Xlsx/index.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ref, watch, onMounted, onBeforeUnmount } from 'vue';\nimport { FileSpreadsheet } from 'lucide-vue-next';\nimport ExcelJS from 'exceljs';\nimport Spreadsheet from 'x-data-spreadsheet';\nimport 'x-data-spreadsheet/dist/xspreadsheet.css';\nimport { convertWorkbookToSpreadsheetData } from '@eternalheart/file-preview-core';\nimport { useTranslator } from '../../composables/useTranslator';\nimport { useFetcher } from '../../composables/useRequest';\n\nconst props = defineProps<{\n url: string;\n}>();\n\nconst { t } = useTranslator();\nconst fetcher = useFetcher();\n\nconst loading = ref(true);\nconst error = ref<string | null>(null);\nconst containerRef = ref<HTMLDivElement | null>(null);\nlet sheetData: Record<string, unknown>[] | null = null;\nlet resizeObserver: ResizeObserver | null = null;\nlet resizeTimeout: number | null = null;\nlet lastDimensions = { width: 0, height: 0 };\n\nconst calculateDimensions = () => {\n if (!containerRef.value) return { width: 800, height: 600 };\n const rawWidth = containerRef.value.clientWidth;\n const rawHeight = containerRef.value.clientHeight;\n const width = rawWidth > 100 ? rawWidth : 800;\n const height = rawHeight > 100 ? rawHeight : 600;\n return { width, height };\n};\n\nconst mountSpreadsheet = () => {\n if (!containerRef.value || !sheetData) return;\n\n containerRef.value.innerHTML = '';\n\n const { width, height } = calculateDimensions();\n const isMobile = width < 640;\n\n const s = new Spreadsheet(containerRef.value, {\n mode: 'read',\n showToolbar: false,\n showContextmenu: false,\n showGrid: true,\n row: {\n len: 100,\n height: 25,\n },\n col: {\n len: 26,\n width: isMobile ? 80 : 100,\n indexWidth: isMobile ? 40 : 60,\n minWidth: isMobile ? 40 : 60,\n },\n view: {\n height: () => height,\n width: () => width,\n },\n });\n\n s.loadData(sheetData as unknown as Record<string, unknown>);\n};\n\nconst loadExcel = async () => {\n if (!containerRef.value) return;\n\n loading.value = true;\n error.value = null;\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('xlsx.not_found'));\n if (response.status === 403) throw new Error('无权限访问此文件');\n throw new Error(`文件加载失败 (${response.status})`);\n }\n\n const arrayBuffer = await response.arrayBuffer();\n\n if (arrayBuffer.byteLength === 0) {\n throw new Error('文件为空');\n }\n\n const workbook = new ExcelJS.Workbook();\n await workbook.xlsx.load(arrayBuffer);\n const data = convertWorkbookToSpreadsheetData(workbook);\n\n sheetData = data as unknown as Record<string, unknown>[];\n mountSpreadsheet();\n loading.value = false;\n } catch (err) {\n console.error('Excel 解析错误:', err);\n let errorMsg = t.value('xlsx.parse_failed');\n if (err instanceof Error) errorMsg = err.message;\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 (sheetData) mountSpreadsheet();\n }, 500);\n });\n\n resizeObserver.observe(containerRef.value);\n\n setTimeout(() => {\n requestAnimationFrame(() => loadExcel());\n }, 100);\n});\n\nwatch(\n () => props.url,\n () => {\n loadExcel();\n }\n);\n\nonBeforeUnmount(() => {\n if (resizeObserver) resizeObserver.disconnect();\n if (resizeTimeout !== null) clearTimeout(resizeTimeout);\n sheetData = null;\n if (containerRef.value) containerRef.value.innerHTML = '';\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('xlsx.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-green-500 vfp-via-emerald-500 vfp-to-teal-500 vfp-flex vfp-items-center vfp-justify-center vfp-shadow-2xl\"\n >\n <FileSpreadsheet 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('xlsx.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\">提示:可以使用 Microsoft Excel 或 WPS 打开</p>\n </div>\n </div>\n\n <div\n v-if=\"!error\"\n ref=\"containerRef\"\n class=\"xlsx-spreadsheet-container vfp-w-full vfp-h-full\"\n :style=\"{ opacity: loading ? 0 : 1 }\"\n />\n </div>\n</template>\n"],"names":["props","__props","t","useTranslator","fetcher","useFetcher","loading","ref","error","containerRef","sheetData","resizeObserver","resizeTimeout","lastDimensions","calculateDimensions","rawWidth","rawHeight","width","height","mountSpreadsheet","isMobile","Spreadsheet","loadExcel","response","arrayBuffer","workbook","ExcelJS","convertWorkbookToSpreadsheetData","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","FileSpreadsheet","_hoisted_8","_hoisted_9","_hoisted_10","_cache"],"mappings":"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"}
|