@eternalheart/vue-file-preview 1.5.2 → 1.5.3
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/chunks/{index-BlPq3HPF.mjs → index-6XBcUPmD.mjs} +3 -3
- package/lib/chunks/{index-BlPq3HPF.mjs.map → index-6XBcUPmD.mjs.map} +1 -1
- package/lib/chunks/{index-CHSHO4_E.mjs → index-82HR-dnq.mjs} +2 -2
- package/lib/chunks/{index-CHSHO4_E.mjs.map → index-82HR-dnq.mjs.map} +1 -1
- package/lib/chunks/{index-Bk1Ehxrn.mjs → index-BL5vaK1j.mjs} +2 -2
- package/lib/chunks/{index-Bk1Ehxrn.mjs.map → index-BL5vaK1j.mjs.map} +1 -1
- package/lib/chunks/{index-Ca2I4ZBD.mjs → index-BN-_TZEq.mjs} +3 -3
- package/lib/chunks/{index-Ca2I4ZBD.mjs.map → index-BN-_TZEq.mjs.map} +1 -1
- package/lib/chunks/{index-CYQ10J1C.mjs → index-BYRlg6sV.mjs} +2 -2
- package/lib/chunks/{index-CYQ10J1C.mjs.map → index-BYRlg6sV.mjs.map} +1 -1
- package/lib/chunks/{index-CD5kjM5X.mjs → index-But-Ggqm.mjs} +2 -2
- package/lib/chunks/{index-CD5kjM5X.mjs.map → index-But-Ggqm.mjs.map} +1 -1
- package/lib/chunks/{index-CF0R95Pi.mjs → index-C0QTgRKZ.mjs} +2 -2
- package/lib/chunks/{index-CF0R95Pi.mjs.map → index-C0QTgRKZ.mjs.map} +1 -1
- package/lib/chunks/{index-M8aNDlWF.mjs → index-C3NmDdG0.mjs} +2 -2
- package/lib/chunks/{index-M8aNDlWF.mjs.map → index-C3NmDdG0.mjs.map} +1 -1
- package/lib/chunks/{index-DMeFrZmR.mjs → index-CFo0aAyF.mjs} +2 -2
- package/lib/chunks/{index-DMeFrZmR.mjs.map → index-CFo0aAyF.mjs.map} +1 -1
- package/lib/chunks/{index-BmFY1Qva.mjs → index-CLp2sbPk.mjs} +2 -2
- package/lib/chunks/{index-BmFY1Qva.mjs.map → index-CLp2sbPk.mjs.map} +1 -1
- package/lib/chunks/{index-BeV59hG7.mjs → index-CUiPNLNl.mjs} +2 -2
- package/lib/chunks/{index-BeV59hG7.mjs.map → index-CUiPNLNl.mjs.map} +1 -1
- package/lib/chunks/{index-mhQw2-sq.mjs → index-CfYG4AUI.mjs} +2 -2
- package/lib/chunks/{index-mhQw2-sq.mjs.map → index-CfYG4AUI.mjs.map} +1 -1
- package/lib/chunks/{index-Dt-64Xh8.mjs → index-ChJ2_eOf.mjs} +2 -2
- package/lib/chunks/{index-Dt-64Xh8.mjs.map → index-ChJ2_eOf.mjs.map} +1 -1
- package/lib/chunks/{index-Cq-Wmksy.mjs → index-Cn1as7Is.mjs} +2 -2
- package/lib/chunks/{index-Cq-Wmksy.mjs.map → index-Cn1as7Is.mjs.map} +1 -1
- package/lib/chunks/{index-C9fAHdS1.mjs → index-D8AbjDtI.mjs} +2 -2
- package/lib/chunks/{index-C9fAHdS1.mjs.map → index-D8AbjDtI.mjs.map} +1 -1
- package/lib/chunks/{index-8qeRD8iW.mjs → index-DL4ieuqH.mjs} +2 -2
- package/lib/chunks/{index-8qeRD8iW.mjs.map → index-DL4ieuqH.mjs.map} +1 -1
- package/lib/chunks/{index-BqwsrkwV.mjs → index-DTF4d3wF.mjs} +2 -2
- package/lib/chunks/{index-BqwsrkwV.mjs.map → index-DTF4d3wF.mjs.map} +1 -1
- package/lib/chunks/{index-2_-gWmf5.mjs → index-duC8sfdn.mjs} +3 -3
- package/lib/chunks/{index-2_-gWmf5.mjs.map → index-duC8sfdn.mjs.map} +1 -1
- package/lib/chunks/{index-2cWRGn9r.mjs → index-gy4zs_NW.mjs} +3 -3
- package/lib/chunks/{index-2cWRGn9r.mjs.map → index-gy4zs_NW.mjs.map} +1 -1
- package/lib/chunks/{useShikiHighlight-htXC5ybJ.mjs → useShikiHighlight-BMzS0Ypl.mjs} +2 -2
- package/lib/chunks/{useShikiHighlight-htXC5ybJ.mjs.map → useShikiHighlight-BMzS0Ypl.mjs.map} +1 -1
- package/lib/index.cjs +54 -41
- package/lib/index.cjs.map +1 -1
- package/lib/index.css +1 -1
- package/lib/index.mjs +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-BlPq3HPF.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/RendererLoading.vue","../../src/renderers/lazy.ts","../../src/renderers/registry.ts","../../src/renderers/Unsupported/index.vue","../../src/components/NavArrows.vue","../../src/FilePreviewContent.vue","../../src/composables/useScrollLock.ts","../../src/FilePreviewModal.vue","../../src/FilePreviewEmbed.vue","../../src/index.ts"],"sourcesContent":["import I from \"jszip\";\nconst vt = [\n \"image\",\n \"pdf\",\n \"docx\",\n \"xlsx\",\n \"pptx\",\n \"msg\",\n \"epub\",\n \"mobi\",\n \"video\",\n \"audio\",\n \"markdown\",\n \"json\",\n \"csv\",\n \"xml\",\n \"subtitle\",\n \"zip\",\n \"text\",\n \"font\"\n];\nfunction U(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 M(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 W(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 || M(e.name),\n size: e.size\n };\n if (typeof e == \"string\") {\n const o = U(e);\n return {\n id: `url-${Date.now()}-${t}`,\n name: o,\n url: e,\n type: M(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 || M(e.name),\n size: e.size\n };\n}\nfunction wt(e) {\n return e.map((t, o) => W(t, o));\n}\nfunction Ft(e) {\n var a;\n const t = ((a = e.name.split(\".\").pop()) == null ? void 0 : a.toLowerCase()) || \"\", o = e.type.toLowerCase();\n if (o.startsWith(\"image/\") || [\n \"jpg\",\n \"jpeg\",\n \"png\",\n \"gif\",\n \"webp\",\n \"svg\",\n \"bmp\",\n \"ico\",\n // 高级图片格式\n \"heic\",\n \"heif\",\n \"avif\",\n \"tif\",\n \"tiff\",\n // RAW 格式\n \"cr2\",\n \"nef\",\n \"arw\",\n \"dng\",\n \"raf\",\n \"orf\",\n // 其他专业格式\n \"psd\",\n \"jp2\",\n \"jpx\",\n \"j2k\"\n ].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 ([\"ttf\", \"otf\", \"woff\", \"woff2\"].includes(t) || o.startsWith(\"font/\") || o === \"application/font-woff\" || o === \"application/font-woff2\" || o === \"application/x-font-ttf\" || o === \"application/x-font-otf\" || o === \"application/font-sfnt\")\n return \"font\";\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\" || t === \"jsonc\")\n return \"json\";\n const n = [\n \"txt\",\n \"log\",\n \"lock\",\n \"js\",\n \"jsx\",\n \"ts\",\n \"tsx\",\n \"cjs\",\n \"mjs\",\n \"cts\",\n \"mts\",\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) || e.name.startsWith(\".\") && !e.name.includes(\"/\") ? \"text\" : \"unsupported\";\n}\nfunction yt(e) {\n var n;\n const t = ((n = e.split(\".\").pop()) == null ? void 0 : n.toLowerCase()) || \"\", o = {\n js: \"javascript\",\n jsx: \"jsx\",\n ts: \"typescript\",\n tsx: \"tsx\",\n cjs: \"javascript\",\n mjs: \"javascript\",\n cts: \"typescript\",\n mts: \"typescript\",\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 jsonc: \"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 };\n if (o[t])\n return o[t];\n if (e.startsWith(\".\")) {\n const a = e.toLowerCase(), r = {\n // Git 相关\n \".gitignore\": \"ini\",\n \".gitattributes\": \"ini\",\n \".gitmodules\": \"ini\",\n \".gitkeep\": \"text\",\n // 编辑器配置\n \".editorconfig\": \"ini\",\n \".prettierrc\": \"json\",\n \".prettierignore\": \"ini\",\n \".eslintrc\": \"json\",\n \".eslintignore\": \"ini\",\n \".stylelintrc\": \"json\",\n // Shell 配置\n \".bashrc\": \"bash\",\n \".zshrc\": \"bash\",\n \".bash_profile\": \"bash\",\n \".zprofile\": \"bash\",\n \".profile\": \"bash\",\n \".vimrc\": \"vim\",\n // 环境变量\n \".env\": \"bash\",\n \".env.local\": \"bash\",\n \".env.development\": \"bash\",\n \".env.production\": \"bash\",\n \".env.test\": \"bash\",\n // 其他配置\n \".npmrc\": \"ini\",\n \".yarnrc\": \"ini\",\n \".nvmrc\": \"text\",\n \".dockerignore\": \"ini\"\n };\n if (r[a])\n return r[a];\n if (a.startsWith(\".env\"))\n return \"bash\";\n if (a.endsWith(\"rc\"))\n return \"json\";\n if (a.endsWith(\"ignore\"))\n return \"ini\";\n }\n return \"text\";\n}\nfunction _t(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 Ct(e) {\n return e < 1024 ? `${e} B` : e < 1024 * 1024 ? `${(e / 1024).toFixed(1)} KB` : `${(e / (1024 * 1024)).toFixed(1)} MB`;\n}\nfunction kt(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 Mt(e) {\n var o;\n return (((o = e.split(\".\").pop()) == null ? void 0 : o.toLowerCase()) || \"\") === \"tsv\" ? \"\t\" : \",\";\n}\nfunction St(e, t = {}) {\n const o = t.delimiter ?? \",\", n = t.firstRowAsHeader ?? !0, a = [];\n let r = [], i = \"\", s = !1, l = 0;\n const c = e.length;\n for (; l < c; ) {\n const d = e[l];\n if (s) {\n if (d === '\"') {\n if (e[l + 1] === '\"') {\n i += '\"', l += 2;\n continue;\n }\n s = !1, l += 1;\n continue;\n }\n i += d, l += 1;\n continue;\n }\n if (d === '\"') {\n s = !0, l += 1;\n continue;\n }\n if (d === o) {\n r.push(i), i = \"\", l += 1;\n continue;\n }\n if (d === \"\\r\") {\n e[l + 1] === `\n` && (l += 1), r.push(i), a.push(r), r = [], i = \"\", l += 1;\n continue;\n }\n if (d === `\n`) {\n r.push(i), a.push(r), r = [], i = \"\", l += 1;\n continue;\n }\n i += d, l += 1;\n }\n for ((i.length > 0 || r.length > 0) && (r.push(i), a.push(r)); a.length > 0; ) {\n const d = a[a.length - 1];\n if (d.length === 1 && d[0] === \"\")\n a.pop();\n else\n break;\n }\n let p = [], u = a;\n n && a.length > 0 && (p = a[0], u = a.slice(1));\n const f = Math.max(\n p.length,\n ...u.map((d) => d.length),\n 0\n );\n for (const d of u)\n for (; d.length < f; ) d.push(\"\");\n return {\n header: p,\n rows: u,\n columnCount: f,\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 B = $;\nasync function zt(e, t) {\n const o = !!t && (\"fetcher\" in t || \"init\" in t || \"signal\" in t), n = o ? t.fetcher ?? fetch : fetch, a = o ? t.signal : void 0, r = o ? t.init : t, i = a ? { ...r, signal: a } : r, s = await n(e, i);\n if (!s.ok) throw new Error(`请求失败: ${s.status}`);\n const l = await s.arrayBuffer();\n return $(l);\n}\nasync function V(e, t) {\n if (e)\n return typeof e == \"function\" ? await e(t) : e;\n}\nfunction Z(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, a) => {\n o.set(a, n);\n }), {\n ...e,\n ...t,\n headers: o\n };\n}\nfunction Et(e) {\n const t = (e == null ? void 0 : e.requestHandler) ?? ((n, a) => fetch(n, a)), o = e == null ? void 0 : e.requestInit;\n return async (n, a) => {\n const r = await V(o, n), i = Z(r, a);\n return t(n, i);\n };\n}\nasync function jt(e, t = fetch, o) {\n const n = await t(e, o);\n if (!n.ok) throw new Error(`请求失败: ${n.status}`);\n const a = await n.blob();\n return URL.createObjectURL(a);\n}\nasync function Lt(e, t, o = fetch, n) {\n const a = await o(e, n);\n if (!a.ok) throw new Error(`请求失败: ${a.status}`);\n const r = await a.blob(), i = URL.createObjectURL(r);\n try {\n const s = document.createElement(\"a\");\n s.href = i, s.download = t, s.style.display = \"none\", document.body.appendChild(s), s.click(), document.body.removeChild(s);\n } finally {\n setTimeout(() => URL.revokeObjectURL(i), 1e3);\n }\n}\nfunction L(e) {\n const t = e.trim().replace(\",\", \".\"), o = t.split(\":\").map((n) => n.trim());\n if (o.length === 3) {\n const [n, a, r] = o;\n return Number(n) * 3600 + Number(a) * 60 + Number(r);\n }\n if (o.length === 2) {\n const [n, a] = o;\n return Number(n) * 60 + Number(a);\n }\n return Number(t) || 0;\n}\nfunction Pt(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, a = Math.floor(t / 6e4) % 60, r = Math.floor(t / 36e5), i = (s, l = 2) => s.toString().padStart(l, \"0\");\n return `${i(r)}:${i(a)}:${i(n)}.${i(o, 3)}`;\n}\nconst P = /(\\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}/, H = /^\\s*\\[\\d{1,2}:\\d{1,2}(?:[.:]\\d{1,3})?\\]/;\nfunction O(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\" : H.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 T(e, t) {\n const n = e.replace(/\\r\\n?/g, `\n`).replace(/^\\uFEFF/, \"\").split(`\n`), a = [];\n let r, i = 0;\n if (t === \"vtt\") {\n const s = [];\n for (; i < n.length && n[i].trim() !== \"\"; )\n s.push(n[i]), i++;\n for (r = s.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 s, l = null;\n if (P.test(n[i]))\n l = n[i], i++;\n else if (s = n[i].trim() || void 0, i++, i < n.length && P.test(n[i]))\n l = n[i], i++;\n else\n continue;\n if (!l) continue;\n const c = l.match(/([\\d:.,]+)\\s*-->\\s*([\\d:.,]+)/);\n if (!c) continue;\n const p = L(c[1]), u = L(c[2]), f = [];\n for (; i < n.length && n[i].trim() !== \"\"; )\n f.push(n[i]), i++;\n a.push({ id: s, start: p, end: u, text: f.join(`\n`) });\n }\n return { format: t, cues: a, header: r };\n}\nfunction z(e, t, o) {\n const n = Number(e), a = Number(t);\n let r = 0;\n if (o) {\n const i = (o + \"000\").slice(0, 3);\n r = Number(i);\n }\n return n * 60 + a + r / 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(), a = o[2].trim();\n if (t.metadata[n] = a, n === \"offset\") {\n const r = Number(a);\n isNaN(r) || (t.offsetMs = r);\n }\n return !0;\n}\nfunction q(e) {\n const o = e.replace(/\\r\\n?/g, `\n`).replace(/^\\uFEFF/, \"\").split(`\n`), n = { metadata: {}, offsetMs: 0 }, a = /\\[(\\d{1,2}):(\\d{1,2})(?:[.:](\\d{1,3}))?\\]/g, r = [];\n for (const l of o) {\n const c = l.trim();\n if (!c || R(c, n)) continue;\n const p = [];\n let u = 0;\n a.lastIndex = 0;\n let f;\n for (; (f = a.exec(c)) !== null && f.index === u; )\n p.push(z(f[1], f[2], f[3])), u = f.index + f[0].length;\n if (p.length === 0) continue;\n const d = c.slice(u).trim();\n for (const m of p)\n r.push({ start: m, text: d });\n }\n r.sort((l, c) => l.start - c.start);\n const i = n.offsetMs / 1e3;\n return { format: \"lrc\", cues: r.map((l, c) => {\n const p = Math.max(0, l.start - i), u = r[c + 1], f = u ? Math.max(p, u.start - i) : p + 5;\n return { start: p, end: f, text: l.text };\n }), metadata: n.metadata };\n}\nfunction G(e) {\n const o = e.replace(/\\r\\n?/g, `\n`).replace(/^\\uFEFF/, \"\").split(`\n`), n = { metadata: {}, offsetMs: 0 }, a = /\\[(\\d{1,2}):(\\d{1,2})(?:[.:](\\d{1,3}))?\\]/g, r = /<(\\d{1,2}):(\\d{1,2})(?:[.:](\\d{1,3}))?>/g, i = [];\n for (const c of o) {\n const p = c.trim();\n if (!p || R(p, n)) continue;\n const u = [];\n let f = 0;\n a.lastIndex = 0;\n let d;\n for (; (d = a.exec(p)) !== null && d.index === f; )\n u.push(z(d[1], d[2], d[3])), f = d.index + d[0].length;\n if (u.length === 0) continue;\n const m = p.slice(f);\n for (const g of u)\n i.push({ start: g, raw: m });\n }\n i.sort((c, p) => c.start - p.start);\n const s = n.offsetMs / 1e3;\n return { format: \"elrc\", cues: i.map((c, p) => {\n const u = [];\n let f = \"\", d = 0, m = null;\n r.lastIndex = 0;\n let g;\n for (; (g = r.exec(c.raw)) !== null; ) {\n const v = c.raw.slice(d, g.index);\n m !== null && v && u.push({ start: Math.max(0, m - s), text: v }), f += v, m = z(g[1], g[2], g[3]), d = g.index + g[0].length;\n }\n const h = c.raw.slice(d);\n m !== null && h && u.push({ start: Math.max(0, m - s), text: h }), f += h;\n const x = Math.max(0, c.start - s), b = i[p + 1], F = b ? Math.max(x, b.start - s) : x + 5;\n return {\n start: x,\n end: F,\n text: f.trim(),\n words: u.length ? u : 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 a = \"\", r = [];\n const i = [], s = [];\n for (const l of n) {\n const c = l.replace(/\\s+$/, \"\"), p = c.trim(), u = /^\\[([^\\]]+)\\]\\s*$/.exec(p);\n if (u) {\n a = u[1].toLowerCase(), s.push(c);\n continue;\n }\n if (a !== \"events\") {\n s.push(c);\n continue;\n }\n const f = /^Format:\\s*(.+)$/i.exec(p);\n if (f) {\n r = f[1].split(\",\").map((w) => w.trim());\n continue;\n }\n const d = /^(Dialogue|Comment):\\s*(.+)$/i.exec(p);\n if (!d || d[1].toLowerCase() === \"comment\" || r.length === 0) continue;\n const m = r.length, g = d[2].split(\",\"), h = g.slice(0, m - 1), x = g.slice(m - 1).join(\",\"), b = {};\n r.forEach((w, _) => {\n b[w] = _ === m - 1 ? x : h[_] ?? \"\";\n });\n const F = N(b.Start || \"\"), v = N(b.End || \"\"), C = (b.Text || \"\").replace(/\\\\N/g, `\n`).replace(/\\\\n/g, `\n`).replace(/\\\\h/g, \" \").replace(/\\{[^}]*\\}/g, \"\");\n i.push({ start: F, end: v, text: C, style: b.Style });\n }\n return i.sort((l, c) => l.start - c.start), {\n format: t,\n cues: i,\n header: s.join(`\n`).trim() || void 0\n };\n}\nfunction y(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 a = Number(o[1]), r = o[2].toLowerCase();\n return r === \"h\" ? a * 3600 : r === \"m\" ? a * 60 : r === \"ms\" ? a / 1e3 : a;\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 X(e) {\n return e.replace(/&#x([0-9a-fA-F]+);/g, (t, o) => String.fromCharCode(parseInt(o, 16))).replace(/&#(\\d+);/g, (t, o) => String.fromCharCode(Number(o))).replace(/</g, \"<\").replace(/>/g, \">\").replace(/"/g, '\"').replace(/'/g, \"'\").replace(/ /g, \" \").replace(/&/g, \"&\");\n}\nfunction J(e) {\n var a, r, i;\n const t = [], o = /<(?:[\\w-]+:)?p\\b([^>]*)>([\\s\\S]*?)<\\/(?:[\\w-]+:)?p\\s*>/gi;\n let n;\n for (; (n = o.exec(e)) !== null; ) {\n const s = n[1], l = n[2], c = ((a = /\\bbegin\\s*=\\s*[\"']([^\"']+)[\"']/i.exec(s)) == null ? void 0 : a[1]) || \"\", p = ((r = /\\bend\\s*=\\s*[\"']([^\"']+)[\"']/i.exec(s)) == null ? void 0 : r[1]) || \"\", u = ((i = /\\bdur\\s*=\\s*[\"']([^\"']+)[\"']/i.exec(s)) == null ? void 0 : i[1]) || \"\", f = y(c);\n let d;\n p ? d = y(p) : u ? d = f + y(u) : d = f + 5;\n const m = X(\n l.replace(/<(?:[\\w-]+:)?br\\s*\\/?>/gi, `\n`).replace(/<[^>]+>/g, \"\")\n ).replace(/[ \\t]+/g, \" \").replace(/\\n /g, `\n`).trim();\n (m || f || d) && t.push({ start: f, end: d, text: m });\n }\n return t.sort((s, l) => s.start - l.start), { format: \"ttml\", cues: t };\n}\nfunction K(e) {\n const t = e.replace(/^\\uFEFF/, \"\");\n if (typeof DOMParser < \"u\") {\n const o = new DOMParser().parseFromString(t, \"application/xml\");\n if (o.getElementsByTagName(\"parsererror\").length === 0) {\n const a = o.getElementsByTagNameNS ? o.getElementsByTagNameNS(\"*\", \"p\") : o.getElementsByTagName(\"p\");\n if (a.length > 0) {\n const r = [];\n for (let i = 0; i < a.length; i++) {\n const s = a[i], l = s.getAttribute(\"begin\") || \"\", c = s.getAttribute(\"end\") || \"\", p = s.getAttribute(\"dur\") || \"\", u = y(l);\n let f;\n c ? f = y(c) : p ? f = u + y(p) : f = u + 5;\n let d = \"\";\n s.childNodes.forEach((g) => {\n if (g.nodeType === 3)\n d += g.nodeValue || \"\";\n else if (g.nodeType === 1) {\n const h = g;\n (h.localName || h.tagName).toLowerCase() === \"br\" ? d += `\n` : d += h.textContent || \"\";\n }\n });\n const m = d.replace(/[ \\t]+/g, \" \").replace(/\\n /g, `\n`).trim();\n (m || u || f) && r.push({ start: u, end: f, text: m });\n }\n return r.sort((i, s) => i.start - s.start), { format: \"ttml\", cues: r };\n }\n }\n }\n return J(t);\n}\nfunction Tt(e, t) {\n switch (t ?? O(e)) {\n case \"lrc\":\n return q(e);\n case \"elrc\":\n return G(e);\n case \"ass\":\n return D(e, \"ass\");\n case \"ssa\":\n return D(e, \"ssa\");\n case \"ttml\":\n return K(e);\n case \"vtt\":\n return T(e, \"vtt\");\n case \"srt\":\n default:\n return T(e, \"srt\");\n }\n}\nasync function Nt(e) {\n return I.loadAsync(e);\n}\nfunction Dt(e) {\n const t = [];\n return e.forEach((o, n) => {\n var u;\n const a = n.dir, r = a && !o.endsWith(\"/\") ? o + \"/\" : o, i = a ? r.replace(/\\/$/, \"\") : r, s = i.lastIndexOf(\"/\"), l = s >= 0 ? i.slice(s + 1) : i, c = s >= 0 ? i.slice(0, s) : \"\", p = a ? 0 : ((u = n._data) == null ? void 0 : u.uncompressedSize) ?? 0;\n t.push({\n path: r,\n name: l,\n dir: c,\n isDir: a,\n size: p,\n date: n.date\n });\n }), t;\n}\nfunction At(e) {\n const t = { name: \"\", path: \"\", isDir: !0, children: [], size: 0 }, o = /* @__PURE__ */ new Map();\n o.set(\"\", t);\n const n = (r) => {\n if (o.has(r)) return o.get(r);\n const i = r.split(\"/\").filter(Boolean);\n let s = t, l = \"\";\n for (const c of i) {\n l = l ? `${l}/${c}` : c;\n let p = o.get(l);\n p || (p = { name: c, path: l + \"/\", isDir: !0, children: [], size: 0 }, s.children.push(p), o.set(l, p)), s = p;\n }\n return s;\n };\n for (const r of e) {\n if (r.isDir) {\n n(r.path.replace(/\\/$/, \"\"));\n continue;\n }\n n(r.dir).children.push({\n name: r.name,\n path: r.path,\n isDir: !1,\n size: r.size\n });\n }\n const a = (r) => {\n if (r.children) {\n r.children.sort((i, s) => i.isDir !== s.isDir ? i.isDir ? -1 : 1 : i.name.localeCompare(s.name));\n for (const i of r.children) a(i);\n }\n };\n return a(t), t;\n}\nasync function $t(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 B(n);\n}\nasync function Rt(e, t, o) {\n const n = e.file(t);\n if (!n) throw new Error(`ZIP entry not found: ${t}`);\n const a = await n.async(\"arraybuffer\");\n return new Blob([a], o ? { type: o } : void 0);\n}\nfunction Q(e) {\n return e ? e.startsWith(\"#\") ? e : e.length === 8 ? \"#\" + e.substring(2) : e.length === 6 ? \"#\" + e : \"#000000\" : \"#000000\";\n}\nconst Y = [\n \"FFFFFF\",\n \"000000\",\n \"E7E6E6\",\n \"44546A\",\n \"4472C4\",\n \"ED7D31\",\n \"A5A5A5\",\n \"FFC000\",\n \"5B9BD5\",\n \"70AD47\"\n], tt = [\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 et(e, t) {\n const o = parseInt(e.substring(0, 2), 16), n = parseInt(e.substring(2, 4), 16), a = parseInt(e.substring(4, 6), 16), r = (c) => t < 0 ? Math.round(c * (1 + t)) : Math.round(c + (255 - c) * t), i = Math.min(255, Math.max(0, r(o))), s = Math.min(255, Math.max(0, r(n))), l = Math.min(255, Math.max(0, r(a)));\n return i.toString(16).padStart(2, \"0\") + s.toString(16).padStart(2, \"0\") + l.toString(16).padStart(2, \"0\");\n}\nfunction ot(e) {\n if (e && e.type === \"pattern\" && e.pattern === \"solid\") {\n const t = e.fgColor;\n if (t)\n return E(t);\n }\n}\nfunction E(e) {\n if (e) {\n if (\"argb\" in e && typeof e.argb == \"string\" && e.argb)\n return Q(e.argb);\n if (\"theme\" in e && typeof e.theme == \"number\") {\n const t = Y[e.theme] || \"000000\", o = \"tint\" in e && typeof e.tint == \"number\" ? e.tint : 0;\n return \"#\" + (o !== 0 ? et(t, o) : t);\n }\n if (\"indexed\" in e && typeof e.indexed == \"number\") {\n const t = tt[e.indexed];\n if (t) return \"#\" + t;\n }\n }\n}\nfunction nt(e) {\n if (!e || !e.style) return;\n const t = E(e.color) || \"#000000\";\n return [e.style, t];\n}\nfunction at(e) {\n const t = {};\n let o = !1;\n if (e.font) {\n const a = e.font;\n if ((a.name || a.size || a.bold || a.italic) && (o = !0, t.font = {}, a.name && (t.font.name = a.name), a.size && (t.font.size = a.size), a.bold && (t.font.bold = !0), a.italic && (t.font.italic = !0)), a.color) {\n const r = E(a.color);\n r && (o = !0, t.color = r);\n }\n a.underline && (o = !0, t.underline = !0), a.strike && (o = !0, t.strike = !0);\n }\n const n = ot(e.fill);\n if (n && (o = !0, t.bgcolor = n), e.alignment) {\n const a = e.alignment;\n a.horizontal && (o = !0, t.align = a.horizontal), a.vertical && (o = !0, t.valign = a.vertical), a.wrapText && (o = !0, t.textwrap = !0);\n }\n if (e.border) {\n const a = {};\n let r = !1;\n const i = [\"top\", \"bottom\", \"left\", \"right\"];\n for (const s of i) {\n const l = nt(e.border[s]);\n l && (a[s] = l, r = !0);\n }\n r && (o = !0, t.border = a);\n }\n return o ? t : null;\n}\nfunction it(e) {\n return JSON.stringify(e);\n}\nfunction rt(e, t, o) {\n const n = at(e);\n if (!n) return -1;\n const a = it(n), r = o.get(a);\n if (r !== void 0) return r;\n const i = t.length;\n return t.push(n), o.set(a, i), i;\n}\nfunction st(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 lt(e) {\n const t = e.split(\":\"), o = A(t[0]), n = t[1] ? A(t[1]) : o;\n return {\n top: o.row,\n left: o.col,\n bottom: n.row,\n right: n.col\n };\n}\nfunction A(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 a = 0;\n for (let r = 0; r < o.length; r++)\n a = a * 26 + (o.charCodeAt(r) - 64);\n return { row: n, col: a };\n}\nfunction It(e) {\n const t = [];\n return e.eachSheet((o) => {\n const n = [], a = /* @__PURE__ */ new Map(), r = [], i = {}, s = {}, l = o.columnCount;\n for (let f = 1; f <= l; f++) {\n const d = o.getColumn(f);\n d.width && (s[String(f - 1)] = { width: Math.round(d.width * 7.5) });\n }\n s.len = Math.max(l, 26);\n const c = /* @__PURE__ */ new Map(), p = o.model, u = (p == null ? void 0 : p.merges) || [];\n for (const f of u) {\n r.push(f);\n const { top: d, left: m, bottom: g, right: h } = lt(f), x = g - d, b = h - m;\n c.set(`${d - 1},${m - 1}`, [x, b]);\n }\n o.eachRow({ includeEmpty: !0 }, (f, d) => {\n const m = d - 1, g = {};\n f.eachCell({ includeEmpty: !1 }, (x, b) => {\n const F = b - 1;\n if (x.isMerged && x.master !== x) return;\n const v = st(x), C = rt(x, n, a), w = { text: v };\n C !== -1 && (w.style = C);\n const _ = `${m},${F}`;\n c.has(_) && (w.merge = c.get(_)), g[String(F)] = w;\n });\n const h = { cells: g };\n f.height && (h.height = Math.round(f.height * 1.333)), i[String(m)] = h;\n }), t.push({\n name: o.name,\n styles: n,\n merges: r,\n rows: i,\n cols: s\n });\n }), t;\n}\nfunction Ut(e, t, o = \"Sheet1\") {\n const n = e.length > 0, r = n ? [{ font: { bold: !0 } }] : [], i = {};\n if (n) {\n const l = {};\n e.forEach((c, p) => {\n l[String(p)] = { text: c, style: 0 };\n }), i[0] = { cells: l };\n }\n const s = n ? 1 : 0;\n return t.forEach((l, c) => {\n const p = {};\n l.forEach((u, f) => {\n u !== void 0 && u !== \"\" && (p[String(f)] = { text: u });\n }), i[String(c + s)] = { cells: p };\n }), [{ name: o, styles: r, rows: i }];\n}\nfunction Wt(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: a = `https://unpkg.com/pdfjs-dist@${o}/cmaps/`,\n cMapPacked: r = !0\n } = t || {};\n e.GlobalWorkerOptions && (e.GlobalWorkerOptions.workerSrc = n, e.GlobalWorkerOptions.cMapUrl = a, e.GlobalWorkerOptions.cMapPacked = r);\n}\nconst ct = {\n // ─────── common ───────\n \"common.download\": \"下载\",\n \"common.close\": \"关闭\",\n \"common.loading\": \"加载中\",\n \"common.unknown_error\": \"未知错误\",\n \"common.unsupported_preview\": \"不支持预览此文件类型 ({type})\",\n \"common.retry\": \"重试\",\n // ─────── accessibility ───────\n \"accessibility.previousFile\": \"上一个文件\",\n \"accessibility.nextFile\": \"下一个文件\",\n \"accessibility.closePreview\": \"关闭预览\",\n \"accessibility.downloadFile\": \"下载文件\",\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.outline\": \"大纲\",\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 \"image.decode_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 \"video.format_not_supported\": \"浏览器不支持 {format} 格式,建议转换为 MP4/WebM 格式\",\n \"video.unsupported_title\": \"该视频格式无法在浏览器中直接播放\",\n \"video.unsupported_detail\": \"{format} 是浏览器原生不支持的容器/编码(常见于 AVI / WMV / FLV 及部分 MKV)。请下载到本地播放器观看,或转换为 MP4(H.264 + AAC)。\",\n \"video.codec_not_supported_detail\": \"视频或音频编码 {codecs} 浏览器无法解码。请转换为 MP4(H.264 + AAC)后再预览。\",\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 // ─────── font ───────\n \"font.loading\": \"加载字体中...\",\n \"font.load_failed\": \"字体文件加载失败\",\n \"font.parse_failed\": \"字体解析失败\",\n \"font.metadata_loading\": \"解析元数据中...\",\n \"font.metadata_unavailable\": \"元数据不可用\",\n \"font.meta.family\": \"字体家族\",\n \"font.meta.subfamily\": \"子系列\",\n \"font.meta.version\": \"版本\",\n \"font.meta.designer\": \"设计师\",\n \"font.meta.glyphs\": \"字形数量\",\n \"font.meta.format\": \"格式\",\n \"font.sample_text_placeholder\": \"输入自定义文本...\"\n}, dt = {\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 \"common.retry\": \"Retry\",\n // ─────── accessibility ───────\n \"accessibility.previousFile\": \"Previous file\",\n \"accessibility.nextFile\": \"Next file\",\n \"accessibility.closePreview\": \"Close preview\",\n \"accessibility.downloadFile\": \"Download file\",\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.outline\": \"Outline\",\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 \"image.decode_failed\": \"Failed to decode 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 \"video.format_not_supported\": \"Browser does not support {format} format. Please convert to MP4/WebM\",\n \"video.unsupported_title\": \"This video format cannot be played in the browser\",\n \"video.unsupported_detail\": \"{format} is a container/codec that browsers do not natively support (typical for AVI / WMV / FLV and some MKV files). Please download and play it in a local player, or convert to MP4 (H.264 + AAC).\",\n \"video.codec_not_supported_detail\": \"The video or audio codec ({codecs}) cannot be decoded by the browser. Please convert to MP4 (H.264 + AAC) before previewing.\",\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 // ─────── font ───────\n \"font.loading\": \"Loading font...\",\n \"font.load_failed\": \"Failed to load font\",\n \"font.parse_failed\": \"Failed to parse font\",\n \"font.metadata_loading\": \"Parsing metadata...\",\n \"font.metadata_unavailable\": \"Metadata unavailable\",\n \"font.meta.family\": \"Family\",\n \"font.meta.subfamily\": \"Subfamily\",\n \"font.meta.version\": \"Version\",\n \"font.meta.designer\": \"Designer\",\n \"font.meta.glyphs\": \"Glyphs\",\n \"font.meta.format\": \"Format\",\n \"font.sample_text_placeholder\": \"Type custom text...\"\n}, k = {\n \"zh-CN\": ct,\n \"en-US\": dt\n}, ft = /\\{(\\w+)\\}/g;\nfunction pt(e, t) {\n return t ? e.replace(ft, (o, n) => {\n const a = t[n];\n return a === void 0 ? `{${n}}` : String(a);\n }) : e;\n}\nfunction Bt(e) {\n var i;\n const t = e.fallbackLocale ?? \"zh-CN\", o = k[e.locale] ?? k[t] ?? k[\"zh-CN\"], n = (i = e.messages) == null ? void 0 : i[e.locale], a = n ? { ...o, ...n } : o, r = k[\"zh-CN\"];\n return (s, l) => {\n const c = a[s] ?? r[s] ?? s;\n return pt(c, l);\n };\n}\nconst ut = {\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 heic: \"image/heic\",\n heif: \"image/heif\",\n avif: \"image/avif\",\n tif: \"image/tiff\",\n tiff: \"image/tiff\",\n // RAW 格式\n cr2: \"image/x-canon-cr2\",\n nef: \"image/x-nikon-nef\",\n arw: \"image/x-sony-arw\",\n dng: \"image/x-adobe-dng\",\n raf: \"image/x-fuji-raf\",\n orf: \"image/x-olympus-orf\",\n // 其他专业格式\n psd: \"image/vnd.adobe.photoshop\",\n jp2: \"image/jp2\",\n jpx: \"image/jpx\",\n j2k: \"image/jp2\",\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 // 其他\n msg: \"application/vnd.ms-outlook\",\n epub: \"application/epub+zip\",\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 csv: \"text/csv\",\n tsv: \"text/tab-separated-values\",\n xml: \"application/xml\",\n json: \"application/json\",\n md: \"text/markdown\",\n markdown: \"text/markdown\",\n txt: \"text/plain\",\n zip: \"application/zip\",\n // 字体\n ttf: \"font/ttf\",\n otf: \"font/otf\",\n woff: \"font/woff\",\n woff2: \"font/woff2\",\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/mp4\",\n \"3gp\": \"video/3gpp\",\n flv: \"video/x-flv\",\n // 音频\n mp3: \"audio/mpeg\",\n wav: \"audio/wav\",\n m4a: \"audio/mp4\",\n flac: \"audio/flac\",\n aac: \"audio/aac\",\n // 字幕\n srt: \"application/x-subrip\",\n vtt: \"text/vtt\",\n lrc: \"application/x-lrc\",\n elrc: \"application/x-lrc\",\n ass: \"text/x-ssa\",\n ssa: \"text/x-ssa\",\n ttml: \"application/ttml+xml\",\n dfxp: \"application/ttml+xml\"\n};\nfunction mt(e) {\n const t = e.toLowerCase();\n return ut[t] || \"application/octet-stream\";\n}\nfunction gt(e) {\n var o;\n const t = ((o = e.split(\".\").pop()) == null ? void 0 : o.toLowerCase()) || \"\";\n return mt(t);\n}\nfunction ht(e) {\n return [\n \"image/heic\",\n \"image/heif\",\n \"image/avif\",\n \"image/tiff\",\n \"image/x-canon-cr2\",\n \"image/x-nikon-nef\",\n \"image/x-sony-arw\",\n \"image/x-adobe-dng\",\n \"image/x-fuji-raf\",\n \"image/x-olympus-orf\",\n \"image/vnd.adobe.photoshop\",\n \"image/jp2\",\n \"image/jpx\"\n ].includes(e);\n}\nfunction Vt(e) {\n return e.startsWith(\"image/x-\") && [\"cr2\", \"nef\", \"arw\", \"dng\", \"raf\", \"orf\"].some((t) => e.includes(t));\n}\nconst j = /* @__PURE__ */ new Map(), S = /* @__PURE__ */ new Map();\nfunction Zt(e, t) {\n j.set(e, t);\n}\nfunction Ht(e) {\n return j.get(e) || null;\n}\nfunction Ot(e) {\n return j.has(e);\n}\nasync function qt(e) {\n if (S.has(e))\n return S.get(e);\n if (!ht(e))\n return null;\n try {\n let t = null;\n return e === \"image/heic\" || e === \"image/heif\" ? t = (await import(\"./heicLoader-CH_raQNn.js\")).default : e === \"image/avif\" ? t = (await import(\"./avifLoader-BP3fgcMm.js\")).default : e === \"image/tiff\" ? t = (await import(\"./tiffLoader-CTFKVLqJ.js\")).default : e === \"image/x-canon-cr2\" || e === \"image/x-nikon-nef\" || e === \"image/x-sony-arw\" || e === \"image/x-adobe-dng\" || e === \"image/x-fuji-raf\" || e === \"image/x-olympus-orf\" ? t = (await import(\"./rawLoader-0mLvxCNp.js\")).default : e === \"image/vnd.adobe.photoshop\" ? t = (await import(\"./psdLoader-Doxw3mWm.js\")).default : (e === \"image/jp2\" || e === \"image/jpx\") && (t = (await import(\"./jp2Loader-Bn-qPMbD.js\")).default), t && S.set(e, t), t;\n } catch (t) {\n return console.warn(`Failed to load image decoder for ${e}:`, t), null;\n }\n}\nasync function Gt(e) {\n if (e.type && e.type !== \"application/octet-stream\")\n return e.type;\n const t = gt(e.name);\n if (t !== \"application/octet-stream\")\n return t;\n if (e instanceof Blob || e instanceof File) {\n const o = await xt(e);\n if (o !== \"application/octet-stream\")\n return o;\n }\n return \"application/octet-stream\";\n}\nasync function xt(e) {\n try {\n const t = new Uint8Array(await e.slice(0, 12).arrayBuffer());\n if (t[4] === 102 && t[5] === 116 && t[6] === 121 && t[7] === 112) {\n const o = String.fromCharCode(...t.slice(8, 12));\n if (o === \"heic\" || o === \"heix\" || o === \"mif1\")\n return \"image/heic\";\n }\n if (t[0] === 73 && t[1] === 73 && t[2] === 42 && t[3] === 0 || t[0] === 77 && t[1] === 77 && t[2] === 0 && t[3] === 42)\n return \"image/tiff\";\n if (t[4] === 102 && t[5] === 116 && t[6] === 121 && t[7] === 112 && String.fromCharCode(...t.slice(8, 12)) === \"avif\")\n return \"image/avif\";\n if (t[0] === 56 && t[1] === 66 && t[2] === 80 && t[3] === 83)\n return \"image/vnd.adobe.photoshop\";\n if (t[0] === 255 && t[1] === 79 && t[2] === 255 && t[3] === 81)\n return \"image/jp2\";\n } catch (t) {\n console.warn(\"Failed to detect image format by magic number:\", t);\n }\n return \"application/octet-stream\";\n}\nexport {\n ut as EXTENSION_TO_MIME,\n vt as SUPPORTED_FILE_TYPES,\n At as buildZipTree,\n k as builtInMessages,\n Wt as configurePdfWorker,\n Ut as convertCsvToSpreadsheetData,\n It as convertWorkbookToSpreadsheetData,\n Et as createFetcher,\n Bt as createTranslator,\n $ as decodeText,\n B as decodeUtf8,\n Gt as detectImageFormat,\n Lt as downloadFileWithFetcher,\n jt as fetchAsBlobUrl,\n zt as fetchTextUtf8,\n Ct as formatFileSize,\n Pt as formatSubtitleTime,\n kt as formatTime,\n U as getFileNameFromUrl,\n Ft as getFileType,\n yt as getLanguageFromFileName,\n Ht as getLoader,\n qt as getLoaderForMimeType,\n mt as getMimeTypeFromExtension,\n gt as getMimeTypeFromFileName,\n _t as getVideoMimeType,\n Mt as guessCsvDelimiter,\n Ot as hasLoader,\n M as inferMimeType,\n ht as isAdvancedImageFormat,\n Vt as isRawFormat,\n Dt as listZipEntries,\n Nt as loadZip,\n W as normalizeFile,\n wt as normalizeFiles,\n St as parseCsv,\n Tt as parseSubtitle,\n Rt as readZipEntryBlob,\n $t as readZipEntryText,\n Zt as registerLoader\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(不入 ref,避免切换文件时残留旧值)\n * - 返回 true:用 fetcher 拉成 blob: URL,组件卸载或 file 变化时 revoke\n */\nexport function useResolvedUrl(file: Ref<PreviewFile | undefined>): ComputedRef<string> {\n const ctx = useRequestContext();\n const blobUrlRef = 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 || !need) {\n cleanup();\n blobUrlRef.value = '';\n return;\n }\n let cancelled = false;\n onCleanup(() => {\n cancelled = true;\n });\n blobUrlRef.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 blobUrlRef.value = blobUrl;\n } catch (err) {\n if (!cancelled) {\n console.error('[file-preview] resolve blob url failed:', err);\n blobUrlRef.value = f.url;\n }\n }\n },\n { immediate: true },\n );\n\n onBeforeUnmount(cleanup);\n\n // 同步派生:非 blob 模式始终直接返回 file.url,确保切换文件时不会残留上一帧的 URL\n return computed(() => {\n const f = file.value;\n if (!f) return '';\n const need = !!ctx.value.shouldFetchAsBlob?.(f);\n if (!need) return f.url;\n return blobUrlRef.value;\n });\n}\n","<script setup lang=\"ts\">\nimport { useTranslator } from '../composables/useTranslator';\nconst { t } = useTranslator();\n</script>\n\n<template>\n <div class=\"vfp-flex vfp-items-center vfp-justify-center vfp-w-full vfp-h-full vfp-text-fg-muted\">\n <div class=\"vfp-flex vfp-flex-col vfp-items-center vfp-gap-3\">\n <div class=\"vfp-w-8 vfp-h-8 vfp-rounded-full vfp-border-2 vfp-border-fg-muted vfp-border-t-transparent vfp-animate-spin\" />\n <span class=\"vfp-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'));\nexport const FontRenderer = wrap(() => import('./Font/index.vue'));\n","import type { Component } from 'vue';\nimport type { FileType, PreviewFile } from '@eternalheart/file-preview-core';\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 FontRenderer,\n} from './lazy';\n\n/**\n * 渲染器上下文:主组件传递给 getProps 的环境信息\n */\nexport interface RendererContext {\n /** 解析后的 URL(可能是 blob URL) */\n resolvedUrl: string;\n /** ZIP 嵌套深度 */\n zipNestingDepth: number;\n /** 当前文件对象 */\n currentFile: PreviewFile;\n}\n\n/**\n * 内置渲染器配置\n */\nexport interface BuiltinRendererConfig {\n /** 匹配的文件类型 */\n fileType: FileType;\n /** 渲染器组件(懒加载) */\n component: Component;\n /** 计算传给组件的 props */\n getProps: (ctx: RendererContext) => Record<string, any>;\n}\n\n/**\n * 内置渲染器注册表\n *\n * 新增渲染器:\n * 1. 在 src/renderers/<Type>/index.vue 创建渲染器\n * 2. 在 src/renderers/lazy.ts 添加懒加载导出\n * 3. 在此注册表添加配置\n *\n * 主组件 FilePreviewContent.vue 无需修改\n */\nexport const BUILTIN_RENDERERS: BuiltinRendererConfig[] = [\n {\n fileType: 'image',\n component: ImageRenderer,\n getProps: (ctx) => ({\n url: ctx.resolvedUrl,\n fileSize: ctx.currentFile.size,\n file: ctx.currentFile,\n }),\n },\n {\n fileType: 'pdf',\n component: PdfRenderer,\n getProps: (ctx) => ({\n url: ctx.resolvedUrl,\n }),\n },\n {\n fileType: 'docx',\n component: DocxRenderer,\n getProps: (ctx) => ({\n url: ctx.resolvedUrl,\n }),\n },\n {\n fileType: 'xlsx',\n component: XlsxRenderer,\n getProps: (ctx) => ({\n url: ctx.resolvedUrl,\n }),\n },\n {\n fileType: 'pptx',\n component: PptxRenderer,\n getProps: (ctx) => ({\n url: ctx.resolvedUrl,\n }),\n },\n {\n fileType: 'msg',\n component: MsgRenderer,\n getProps: (ctx) => ({\n url: ctx.resolvedUrl,\n }),\n },\n {\n fileType: 'epub',\n component: EpubRenderer,\n getProps: (ctx) => ({\n url: ctx.resolvedUrl,\n }),\n },\n {\n fileType: 'mobi',\n component: MobiRenderer,\n getProps: (ctx) => ({\n url: ctx.resolvedUrl,\n }),\n },\n {\n fileType: 'video',\n component: VideoRenderer,\n getProps: (ctx) => ({\n url: ctx.resolvedUrl,\n fileName: ctx.currentFile.name,\n }),\n },\n {\n fileType: 'audio',\n component: AudioRenderer,\n getProps: (ctx) => ({\n url: ctx.resolvedUrl,\n fileName: ctx.currentFile.name,\n }),\n },\n {\n fileType: 'markdown',\n component: MarkdownRenderer,\n getProps: (ctx) => ({\n url: ctx.resolvedUrl,\n }),\n },\n {\n fileType: 'json',\n component: JsonRenderer,\n getProps: (ctx) => ({\n url: ctx.resolvedUrl,\n fileName: ctx.currentFile.name,\n }),\n },\n {\n fileType: 'csv',\n component: CsvRenderer,\n getProps: (ctx) => ({\n url: ctx.resolvedUrl,\n fileName: ctx.currentFile.name,\n }),\n },\n {\n fileType: 'xml',\n component: XmlRenderer,\n getProps: (ctx) => ({\n url: ctx.resolvedUrl,\n fileName: ctx.currentFile.name,\n }),\n },\n {\n fileType: 'subtitle',\n component: SubtitleRenderer,\n getProps: (ctx) => ({\n url: ctx.resolvedUrl,\n fileName: ctx.currentFile.name,\n }),\n },\n {\n fileType: 'zip',\n component: ZipRenderer,\n getProps: (ctx) => ({\n url: ctx.resolvedUrl,\n nestingDepth: ctx.zipNestingDepth,\n }),\n },\n {\n fileType: 'text',\n component: TextRenderer,\n getProps: (ctx) => ({\n url: ctx.resolvedUrl,\n fileName: ctx.currentFile.name,\n }),\n },\n {\n fileType: 'font',\n component: FontRenderer,\n getProps: (ctx) => ({\n url: ctx.resolvedUrl,\n }),\n },\n];\n","<script setup lang=\"ts\">\nimport type { RendererHandle } from '../base.types';\nimport type { ToolbarGroup } from '../toolbar.types';\n\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\nconst getToolbarGroups = (): ToolbarGroup[] => [];\n\ndefineExpose<RendererHandle>({\n getToolbarGroups,\n});\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-6 vfp-gap-4\"\n >\n <div\n class=\"vfp-w-20 vfp-h-20 vfp-rounded-full vfp-bg-surface-2 vfp-flex vfp-items-center vfp-justify-center\"\n >\n <FileQuestion class=\"vfp-w-10 vfp-h-10 vfp-text-fg-secondary\" />\n </div>\n\n <div class=\"vfp-text-fg-primary vfp-text-center\">\n <p class=\"vfp-text-lg 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-4 vfp-py-2 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, watch, onMounted, onBeforeUnmount } from 'vue';\nimport { ChevronLeft, ChevronRight } from 'lucide-vue-next';\n\ninterface Props {\n /** 父级内容容器 DOM(mousemove 监听挂到它身上) */\n containerRef: HTMLDivElement | null;\n hasPrev: boolean;\n hasNext: boolean;\n /** 用于触发\"显示并重置定时器\"的外部信号,通常传 currentIndex */\n resetKey: number;\n}\n\nconst props = defineProps<Props>();\nconst emit = defineEmits<{ prev: []; next: [] }>();\n\nconst NAV_HIDE_DELAY = 2000;\nconst visible = ref(true);\nlet hideTimer: number | null = null;\n\nconst scheduleHide = () => {\n if (hideTimer !== null) clearTimeout(hideTimer);\n hideTimer = window.setTimeout(() => {\n visible.value = false;\n }, NAV_HIDE_DELAY);\n};\n\nconst show = () => {\n if (!visible.value) visible.value = true;\n scheduleHide();\n};\n\nlet attached: HTMLDivElement | null = null;\nconst detach = () => {\n if (attached) {\n attached.removeEventListener('mousemove', show);\n attached = null;\n }\n};\nconst attach = (el: HTMLDivElement | null) => {\n if (attached === el) return;\n detach();\n if (el) {\n el.addEventListener('mousemove', show);\n attached = el;\n }\n};\n\nwatch(() => props.containerRef, (el) => attach(el), { immediate: true });\nwatch(() => props.resetKey, () => {\n visible.value = true;\n scheduleHide();\n});\n\nonMounted(() => {\n scheduleHide();\n});\n\nonBeforeUnmount(() => {\n if (hideTimer !== null) clearTimeout(hideTimer);\n detach();\n});\n</script>\n\n<template>\n <button\n v-if=\"hasPrev\"\n :style=\"{\n opacity: visible ? 1 : 0,\n transform: visible ? 'translateY(-50%)' : 'translateY(-50%) translateX(-20px)',\n pointerEvents: visible ? '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('prev')\"\n @mouseenter=\"show\"\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=\"hasNext\"\n :style=\"{\n opacity: visible ? 1 : 0,\n transform: visible ? 'translateY(-50%)' : 'translateY(-50%) translateX(20px)',\n pointerEvents: visible ? '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('next')\"\n @mouseenter=\"show\"\n >\n <ChevronRight class=\"vfp-w-5 vfp-h-5 md:vfp-w-6 md:vfp-h-6\" />\n </button>\n</template>\n","<script setup lang=\"ts\">\nimport { ref, computed, watch, onMounted, onBeforeUnmount, toRef, provide } from 'vue';\nimport { X, Download } 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 type { RendererHandle } from './renderers/base.types';\nimport { BUILTIN_RENDERERS } from './renderers/registry';\n// Unsupported 体量极小且每次回退都用,直接静态打包到主入口\nimport UnsupportedRenderer from './renderers/Unsupported/index.vue';\nimport NavArrows from './components/NavArrows.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 onClose?: () => void;\n /** 是否显示下载按钮,默认 true */\n showDownload?: boolean;\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 onClose: undefined,\n showDownload: true,\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 contentRef = ref<HTMLDivElement | null>(null);\nconst rootRef = ref<HTMLDivElement | null>(null);\n\n// 渲染器 ref 和工具栏事件订阅\nconst rendererRef = ref<RendererHandle | null>(null);\nconst rendererToolbarGroups = ref<ToolbarGroup[]>([]);\nlet unsubscribeToolbar: (() => void) | null = null;\n\nconst cleanupSubscription = () => {\n if (unsubscribeToolbar) {\n unsubscribeToolbar();\n unsubscribeToolbar = null;\n }\n};\n\n// 当渲染器变化时,重新订阅工具栏事件\nwatch(rendererRef, (newRenderer) => {\n cleanupSubscription();\n rendererToolbarGroups.value = [];\n\n if (!newRenderer) return;\n\n // 如果渲染器支持事件机制,订阅事件\n if (newRenderer.onToolbarChange) {\n unsubscribeToolbar = newRenderer.onToolbarChange(() => {\n rendererToolbarGroups.value = newRenderer.getToolbarGroups?.() ?? [];\n });\n }\n\n // 立即获取一次初始工具栏配置\n rendererToolbarGroups.value = newRenderer.getToolbarGroups?.() ?? [];\n});\n\nonBeforeUnmount(() => {\n cleanupSubscription();\n});\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// 从注册表中查找匹配当前 fileType 的内置渲染器\nconst builtinRenderer = computed(() =>\n BUILTIN_RENDERERS.find((r) => r.fileType === fileType.value) ?? null,\n);\n\n// 计算传给内置渲染器的 props\nconst builtinRendererProps = computed(() => {\n if (!builtinRenderer.value || !currentFile.value) return {};\n return builtinRenderer.value.getProps({\n resolvedUrl: resolvedUrl.value,\n zipNestingDepth: props.zipNestingDepth,\n currentFile: currentFile.value,\n });\n});\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 // 重置 epub 状态\n epubCurrent.value = 0;\n epubTotal.value = 0;\n epubFullWidth.value = false;\n // 重置 mobi 状态\n mobiCurrent.value = 0;\n mobiTotal.value = 0;\n mobiFullWidth.value = false;\n }\n);\n\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 (props.mode === 'modal') {\n window.removeEventListener('keydown', handleKeyDown);\n } else if (rootRef.value) {\n rootRef.value.removeEventListener('keydown', handleKeyDown as EventListener);\n }\n});\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.onClose);\n\nconst epubCurrent = ref(0);\nconst epubTotal = ref(0);\nconst epubFullWidth = ref(false);\n\nconst mobiCurrent = ref(0);\nconst mobiTotal = ref(0);\nconst mobiFullWidth = ref(false);\n\n// 防止 ESLint 报未使用警告(仍由模板中的事件回调使用)\nvoid epubCurrent; void epubTotal; void epubFullWidth;\nvoid mobiCurrent; void mobiTotal; void mobiFullWidth;\n\n// 工具栏配置 — 各 Renderer 自行通过 ref 暴露 getToolbarGroups 和 onToolbarChange\nconst toolGroups = computed(() => {\n if (customRenderer.value) {\n return (\n customRenderer.value.getToolbarGroups?.(currentFile.value!, customCtx.value) ?? []\n );\n }\n // 所有内置渲染器都通过事件驱动机制提供工具栏\n return rendererToolbarGroups.value;\n});\n\n// 操作组:下载、关闭(通用,不属于任何 Renderer)\nconst actionGroups = computed<ToolbarGroup[]>(() => {\n const groups: ToolbarGroup[] = [];\n if (props.showDownload) {\n groups.push({\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 :class=\"{ active: (item as ToolbarButtonItem).active }\"\n :data-tooltip=\"(item as ToolbarButtonItem).tooltip\"\n :disabled=\"(item as ToolbarButtonItem).disabled\"\n :aria-pressed=\"(item as ToolbarButtonItem).active\"\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 :class=\"{ active: (item as ToolbarButtonItem).active }\"\n :data-tooltip=\"(item as ToolbarButtonItem).tooltip\"\n :disabled=\"(item as ToolbarButtonItem).disabled\"\n :aria-pressed=\"(item as ToolbarButtonItem).active\"\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 :class=\"{ active: (item as ToolbarButtonItem).active }\"\n :data-tooltip=\"(item as ToolbarButtonItem).tooltip\"\n :disabled=\"(item as ToolbarButtonItem).disabled\"\n :aria-pressed=\"(item as ToolbarButtonItem).active\"\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 :class=\"{ active: (item as ToolbarButtonItem).active }\"\n :data-tooltip=\"(item as ToolbarButtonItem).tooltip\"\n :disabled=\"(item as ToolbarButtonItem).disabled\"\n :aria-pressed=\"(item as ToolbarButtonItem).active\"\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 :key=\"currentFile?.url\"\n >\n <template v-if=\"currentFile\">\n <component :is=\"customRendererComponent\" v-if=\"customRendererComponent\" :file=\"currentFile\" :ctx=\"customCtx\" />\n <template v-else>\n <!-- ZIP 嵌套深度超限:fallback 到 Unsupported -->\n <UnsupportedRenderer\n v-if=\"fileType === 'zip' && props.zipNestingDepth >= MAX_ZIP_NESTING_DEPTH\"\n :file-name=\"currentFile.name\"\n :file-type=\"currentFile.type\"\n @download=\"handleDownload\"\n />\n <!-- 从注册表查找匹配的渲染器 -->\n <component\n v-else-if=\"builtinRenderer\"\n :is=\"builtinRenderer.component\"\n ref=\"rendererRef\"\n v-bind=\"builtinRendererProps\"\n />\n <!-- 未匹配:fallback 到 UnsupportedRenderer -->\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 <!-- 左右导航箭头:state 隔离在 NavArrows 内部,避免 mousemove/timer 引起整树 patch -->\n <NavArrows\n v-if=\"!headless && normalizedFiles.length > 1\"\n :container-ref=\"contentRef\"\n :has-prev=\"currentIndex > 0\"\n :has-next=\"currentIndex < normalizedFiles.length - 1\"\n :reset-key=\"currentIndex\"\n @prev=\"emit('navigate', currentIndex - 1)\"\n @next=\"emit('navigate', currentIndex + 1)\"\n />\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.active,\n.toolbar-btn.active:hover,\n.toolbar-btn.active: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\n/* 移动端隐藏 tooltip */\n@media (max-width: 1023px) {\n .toolbar-btn[data-tooltip]::after,\n .toolbar-btn[data-tooltip]::before {\n display: none !important;\n }\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 /** 是否显示下载按钮,默认 true */\n showDownload?: boolean;\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 showDownload: true,\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 :on-close=\"() => emit('close')\"\n :show-download=\"showDownload\"\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 onClose?: () => void;\n /** 是否显示下载按钮,默认 true */\n showDownload?: boolean;\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 onClose: undefined,\n showDownload: true,\n});\n\nconst emit = defineEmits<{\n (e: 'navigate', index: number): void;\n (e: 'custom-event', payload: CustomRendererEventPayload): void;\n (e: 'close'): 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 :on-close=\"onClose\"\n :show-download=\"showDownload\"\n @navigate=\"(i) => emit('navigate', i)\"\n @custom-event=\"(p) => emit('custom-event', p)\"\n @close=\"() => emit('close')\"\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 SUPPORTED_FILE_TYPES,\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":["vt","U","n","M","t","W","wt","Ft","a","o","yt","r","_t","Ct","kt","Mt","St","s","l","d","p","f","$","zt","V","Z","Et","jt","Lt","L","Pt","P","H","O","T","i","c","u","z","R","q","m","G","g","v","h","x","b","F","N","D","w","_","C","y","X","J","K","Tt","Nt","I","Dt","At","Rt","Q","Y","tt","et","ot","E","nt","at","it","rt","st","lt","A","It","Ut","Wt","ct","dt","k","ft","pt","Bt","ut","mt","gt","ht","S","qt","Gt","xt","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","blobUrlRef","ref","createdBlobUrl","cleanup","watch","need","_b","_a","fetcher","_old","onCleanup","cancelled","blobUrl","fetchAsBlobUrl","err","onBeforeUnmount","_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","FontRenderer","BUILTIN_RENDERERS","emit","__emit","__expose","_createVNode","FileQuestion","_hoisted_4","__props","_hoisted_5","Download","_createTextVNode","NAV_HIDE_DELAY","props","visible","hideTimer","scheduleHide","show","attached","detach","attach","el","onMounted","_normalizeStyle","ChevronLeft","ChevronRight","MAX_ZIP_NESTING_DEPTH","toRef","systemDark","mediaQueryCleanup","mql","handler","e","resolvedTheme","contentRef","rootRef","rendererRef","rendererToolbarGroups","unsubscribeToolbar","cleanupSubscription","newRenderer","normalizedFiles","normalizeFiles","currentFile","resolvedUrl","customRenderer","customRendererComponent","customCtx","fileType","getFileType","builtinRenderer","builtinRendererProps","emitCustom","name","payload","ev","epubCurrent","epubTotal","epubFullWidth","mobiCurrent","mobiTotal","mobiFullWidth","handleKeyDown","handleDownload","downloadFileWithFetcher","showCloseButton","toolGroups","actionGroups","groups","hasToolGroups","_hoisted_6","_hoisted_7","_Fragment","_renderList","group","gi","item","ii","_normalizeClass","_createBlock","_resolveDynamicComponent","_hoisted_9","_hoisted_12","_hoisted_13","UnsupportedRenderer","_mergeProps","NavArrows","_cache","$event","useScrollLock","enabled","originalOverflow","originalPaddingRight","locked","lock","scrollbarWidth","unlock","onUnmounted","open","handleBackdropClick","handleContentClick","handleWheel","_Teleport","_Transition","FilePreviewContent","wrapperStyle","VERSION","packageJson"],"mappings":";;;;;GACMA,KAAK;AAAA,EACT;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AACA,SAASC,GAAE,GAAG;AACZ,MAAI;AACF,UAAMC,IAAI,IAAI,IAAI,CAAC,EAAE,SAAS,MAAM,GAAG,EAAE,IAAG,KAAM;AAClD,WAAO,mBAAmBA,CAAC;AAAA,EAC7B,QAAQ;AACN,UAAM,IAAI,EAAE,MAAM,GAAG,EAAE,IAAG,KAAM;AAChC,WAAO,mBAAmB,CAAC;AAAA,EAC7B;AACF;AACA,SAASC,GAAE,GAAG;AACZ,MAAID;AACJ,QAAME,MAAMF,IAAI,EAAE,MAAM,GAAG,EAAE,IAAG,MAAO,OAAO,SAASA,EAAE,YAAW,MAAO;AAC3E,SAAO;AAAA;AAAA,IAEL,KAAK;AAAA,IACL,MAAM;AAAA,IACN,KAAK;AAAA,IACL,KAAK;AAAA,IACL,MAAM;AAAA,IACN,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA;AAAA,IAEL,KAAK;AAAA,IACL,MAAM;AAAA,IACN,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,OAAO;AAAA,IACP,KAAK;AAAA;AAAA,IAEL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,MAAM;AAAA;AAAA,IAEN,KAAK;AAAA,IACL,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,KAAK;AAAA,IACL,KAAK;AAAA,IACL,MAAM;AAAA,IACN,KAAK;AAAA,IACL,MAAM;AAAA,IACN,KAAK;AAAA;AAAA,IAEL,KAAK;AAAA,IACL,IAAI;AAAA,IACJ,UAAU;AAAA,IACV,MAAM;AAAA,IACN,KAAK;AAAA,IACL,MAAM;AAAA,IACN,KAAK;AAAA,IACL,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,KAAK;AAAA,IACL,KAAK;AAAA,IACL,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,KAAK;AAAA,IACL,GAAG;AAAA,IACH,IAAI;AAAA,IACJ,KAAK;AAAA,IACL,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,KAAK;AAAA,IACL,MAAM;AAAA,IACN,KAAK;AAAA,IACL,KAAK;AAAA,IACL,MAAM;AAAA,IACN,OAAO;AAAA,IACP,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,EACT,EAAIE,CAAC,KAAK;AACV;AACA,SAASC,GAAE,GAAG,IAAI,GAAG;AACnB,MAAI,aAAa;AACf,WAAO;AAAA,MACL,IAAI,QAAQ,KAAK,IAAG,CAAE,IAAI,CAAC;AAAA,MAC3B,MAAM,EAAE;AAAA,MACR,KAAK,IAAI,gBAAgB,CAAC;AAAA,MAC1B,MAAM,EAAE,QAAQF,GAAE,EAAE,IAAI;AAAA,MACxB,MAAM,EAAE;AAAA,IACd;AACE,MAAI,OAAO,KAAK,UAAU;AACxB,UAAM,IAAIF,GAAE,CAAC;AACb,WAAO;AAAA,MACL,IAAI,OAAO,KAAK,IAAG,CAAE,IAAI,CAAC;AAAA,MAC1B,MAAM;AAAA,MACN,KAAK;AAAA,MACL,MAAME,GAAE,CAAC;AAAA,IACf;AAAA,EACE;AACA,SAAO;AAAA,IACL,IAAI,EAAE,MAAM,QAAQ,KAAK,IAAG,CAAE,IAAI,CAAC;AAAA,IACnC,MAAM,EAAE;AAAA,IACR,KAAK,EAAE;AAAA,IACP,MAAM,EAAE,QAAQA,GAAE,EAAE,IAAI;AAAA,IACxB,MAAM,EAAE;AAAA,EACZ;AACA;AACA,SAASG,GAAG,GAAG;AACb,SAAO,EAAE,IAAI,CAAC,GAAG,MAAMD,GAAE,GAAG,CAAC,CAAC;AAChC;AACA,SAASE,GAAG,GAAG;AACb,MAAIC;AACJ,QAAMJ,MAAMI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,IAAG,MAAO,OAAO,SAASA,EAAE,YAAW,MAAO,IAAIC,IAAI,EAAE,KAAK,YAAW;AAC1G,MAAIA,EAAE,WAAW,QAAQ,KAAK;AAAA,IAC5B;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IAEA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IAEA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IAEA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ,EAAI,SAASL,CAAC;AACV,WAAO;AACT,MAAIK,EAAE,SAAS,KAAK,KAAKL,MAAM;AAC7B,WAAO;AACT,MAAIK,EAAE,SAAS,kBAAkB,KAAKL,MAAM;AAC1C,WAAO;AACT,MAAIK,EAAE,SAAS,eAAe,KAAKL,MAAM;AACvC,WAAO;AACT,MAAIK,EAAE,SAAS,gBAAgB,KAAKL,MAAM,UAAUA,MAAM;AACxD,WAAO;AACT,MAAIK,EAAE,SAAS,YAAY,KAAKL,MAAM;AACpC,WAAO;AACT,MAAIK,EAAE,SAAS,MAAM,KAAKL,MAAM;AAC9B,WAAO;AACT,MAAI,CAAC,QAAQ,OAAO,QAAQ,KAAK,EAAE,SAASA,CAAC,KAAKK,MAAM,oCAAoCA,MAAM;AAChG,WAAO;AACT,MAAI,CAAC,OAAO,KAAK,EAAE,SAASL,CAAC,KAAKK,MAAM,cAAcA,MAAM;AAC1D,WAAO;AACT,MAAIL,MAAM,SAASK,MAAM,qBAAqBA,MAAM;AAClD,WAAO;AACT,MAAI,CAAC,OAAO,OAAO,OAAO,QAAQ,OAAO,OAAO,QAAQ,MAAM,EAAE,SAASL,CAAC,KAAKK,MAAM,cAAcA,MAAM,0BAA0BA,MAAM;AACvI,WAAO;AACT,MAAIL,MAAM,SAASK,MAAM,qBAAqBA,MAAM;AAClD,WAAO;AACT,MAAI,CAAC,OAAO,OAAO,QAAQ,OAAO,EAAE,SAASL,CAAC,KAAKK,EAAE,WAAW,OAAO,KAAKA,MAAM,2BAA2BA,MAAM,4BAA4BA,MAAM,4BAA4BA,MAAM,4BAA4BA,MAAM;AACvN,WAAO;AACT,MAAIA,EAAE,WAAW,QAAQ,KAAK,CAAC,OAAO,QAAQ,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,KAAK,EAAE,SAASL,CAAC;AAC9G,WAAO;AACT,MAAIK,EAAE,WAAW,QAAQ,KAAK,CAAC,OAAO,OAAO,OAAO,OAAO,QAAQ,KAAK,EAAE,SAASL,CAAC;AAClF,WAAO;AACT,MAAIA,MAAM,QAAQA,MAAM;AACtB,WAAO;AACT,MAAIK,MAAM,sBAAsBL,MAAM,UAAUA,MAAM;AACpD,WAAO;AACT,QAAMF,IAAI;AAAA,IACR;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ;AACE,SAAOO,EAAE,WAAW,OAAO,KAAKP,EAAE,SAASE,CAAC,KAAK,EAAE,KAAK,WAAW,GAAG,KAAK,CAAC,EAAE,KAAK,SAAS,GAAG,IAAI,SAAS;AAC9G;AACA,SAASM,GAAG,GAAG;AACb,MAAIR;AACJ,QAAME,MAAMF,IAAI,EAAE,MAAM,GAAG,EAAE,IAAG,MAAO,OAAO,SAASA,EAAE,YAAW,MAAO,IAAIO,IAAI;AAAA,IACjF,IAAI;AAAA,IACJ,KAAK;AAAA,IACL,IAAI;AAAA,IACJ,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,KAAK;AAAA,IACL,GAAG;AAAA,IACH,IAAI;AAAA,IACJ,KAAK;AAAA,IACL,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,KAAK;AAAA,IACL,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,IAAI;AAAA,IACJ,KAAK;AAAA,IACL,KAAK;AAAA,IACL,OAAO;AAAA,IACP,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,KAAK;AAAA,IACL,MAAM;AAAA,IACN,OAAO;AAAA,IACP,KAAK;AAAA,IACL,MAAM;AAAA,IACN,KAAK;AAAA,IACL,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,KAAK;AAAA,IACL,MAAM;AAAA,IACN,KAAK;AAAA,IACL,MAAM;AAAA,IACN,KAAK;AAAA,IACL,KAAK;AAAA,IACL,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,KAAK;AAAA,IACL,IAAI;AAAA,IACJ,KAAK;AAAA,EACT;AACE,MAAIA,EAAEL,CAAC;AACL,WAAOK,EAAEL,CAAC;AACZ,MAAI,EAAE,WAAW,GAAG,GAAG;AACrB,UAAMI,IAAI,EAAE,YAAW,GAAIG,IAAI;AAAA;AAAA,MAE7B,cAAc;AAAA,MACd,kBAAkB;AAAA,MAClB,eAAe;AAAA,MACf,YAAY;AAAA;AAAA,MAEZ,iBAAiB;AAAA,MACjB,eAAe;AAAA,MACf,mBAAmB;AAAA,MACnB,aAAa;AAAA,MACb,iBAAiB;AAAA,MACjB,gBAAgB;AAAA;AAAA,MAEhB,WAAW;AAAA,MACX,UAAU;AAAA,MACV,iBAAiB;AAAA,MACjB,aAAa;AAAA,MACb,YAAY;AAAA,MACZ,UAAU;AAAA;AAAA,MAEV,QAAQ;AAAA,MACR,cAAc;AAAA,MACd,oBAAoB;AAAA,MACpB,mBAAmB;AAAA,MACnB,aAAa;AAAA;AAAA,MAEb,UAAU;AAAA,MACV,WAAW;AAAA,MACX,UAAU;AAAA,MACV,iBAAiB;AAAA,IACvB;AACI,QAAIA,EAAEH,CAAC;AACL,aAAOG,EAAEH,CAAC;AACZ,QAAIA,EAAE,WAAW,MAAM;AACrB,aAAO;AACT,QAAIA,EAAE,SAAS,IAAI;AACjB,aAAO;AACT,QAAIA,EAAE,SAAS,QAAQ;AACrB,aAAO;AAAA,EACX;AACA,SAAO;AACT;AACA,SAASI,GAAG,GAAG;AACb,MAAIV;AACJ,QAAME,MAAMF,IAAI,EAAE,MAAM,GAAG,EAAE,IAAG,MAAO,OAAO,SAASA,EAAE,YAAW,EAAG,MAAM,GAAG,EAAE,CAAC,MAAM;AACzF,SAAO;AAAA,IACL,KAAK;AAAA,IACL,MAAM;AAAA,IACN,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,OAAO;AAAA,IACP,KAAK;AAAA,EACT,EAAIE,CAAC,KAAK;AACV;AACA,SAASS,GAAG,GAAG;AACb,SAAO,IAAI,OAAO,GAAG,CAAC,OAAO,IAAI,OAAO,OAAO,IAAI,IAAI,MAAM,QAAQ,CAAC,CAAC,QAAQ,IAAI,KAAK,OAAO,OAAO,QAAQ,CAAC,CAAC;AAClH;AACA,SAASC,GAAG,GAAG;AACb,MAAI,CAAC,SAAS,CAAC,KAAK,MAAM,CAAC,KAAK,IAAI,EAAG,QAAO;AAC9C,QAAM,IAAI,KAAK,MAAM,IAAI,EAAE,GAAG,IAAI,KAAK,MAAM,IAAI,EAAE;AACnD,SAAO,GAAG,CAAC,IAAI,EAAE,SAAQ,EAAG,SAAS,GAAG,GAAG,CAAC;AAC9C;AACA,SAASC,GAAG,GAAG;AACb,MAAIN;AACJ,YAAUA,IAAI,EAAE,MAAM,GAAG,EAAE,IAAG,MAAO,OAAO,SAASA,EAAE,YAAW,MAAO,QAAQ,QAAQ,MAAM;AACjG;AACA,SAASO,GAAG,GAAG,IAAI,IAAI;AACrB,QAAM,IAAI,EAAE,aAAa,KAAK,IAAI,EAAE,oBAAoB,IAAIR,IAAI,CAAA;AAChE,MAAIG,IAAI,CAAA,GAAI,IAAI,IAAIM,IAAI,IAAIC,IAAI;AAChC,QAAM,IAAI,EAAE;AACZ,SAAOA,IAAI,KAAK;AACd,UAAMC,IAAI,EAAED,CAAC;AACb,QAAID,GAAG;AACL,UAAIE,MAAM,KAAK;AACb,YAAI,EAAED,IAAI,CAAC,MAAM,KAAK;AACpB,eAAK,KAAKA,KAAK;AACf;AAAA,QACF;AACA,QAAAD,IAAI,IAAIC,KAAK;AACb;AAAA,MACF;AACA,WAAKC,GAAGD,KAAK;AACb;AAAA,IACF;AACA,QAAIC,MAAM,KAAK;AACb,MAAAF,IAAI,IAAIC,KAAK;AACb;AAAA,IACF;AACA,QAAIC,MAAM,GAAG;AACX,MAAAR,EAAE,KAAK,CAAC,GAAG,IAAI,IAAIO,KAAK;AACxB;AAAA,IACF;AACA,QAAIC,MAAM,MAAM;AACd,QAAED,IAAI,CAAC,MAAM;AAAA,MACbA,KAAK,IAAIP,EAAE,KAAK,CAAC,GAAGH,EAAE,KAAKG,CAAC,GAAGA,IAAI,CAAA,GAAI,IAAI,IAAIO,KAAK;AACpD;AAAA,IACF;AACA,QAAIC,MAAM;AAAA,GACX;AACG,MAAAR,EAAE,KAAK,CAAC,GAAGH,EAAE,KAAKG,CAAC,GAAGA,IAAI,CAAA,GAAI,IAAI,IAAIO,KAAK;AAC3C;AAAA,IACF;AACA,SAAKC,GAAGD,KAAK;AAAA,EACf;AACA,QAAM,EAAE,SAAS,KAAKP,EAAE,SAAS,OAAOA,EAAE,KAAK,CAAC,GAAGH,EAAE,KAAKG,CAAC,IAAIH,EAAE,SAAS,KAAK;AAC7E,UAAMW,IAAIX,EAAEA,EAAE,SAAS,CAAC;AACxB,QAAIW,EAAE,WAAW,KAAKA,EAAE,CAAC,MAAM;AAC7B,MAAAX,EAAE,IAAG;AAAA;AAEL;AAAA,EACJ;AACA,MAAIY,IAAI,IAAI,IAAIZ;AAChB,OAAKA,EAAE,SAAS,MAAMY,IAAIZ,EAAE,CAAC,GAAG,IAAIA,EAAE,MAAM,CAAC;AAC7C,QAAMa,IAAI,KAAK;AAAA,IACbD,EAAE;AAAA,IACF,GAAG,EAAE,IAAI,CAACD,MAAMA,EAAE,MAAM;AAAA,IACxB;AAAA,EACJ;AACE,aAAWA,KAAK;AACd,WAAOA,EAAE,SAASE,IAAK,CAAAF,EAAE,KAAK,EAAE;AAClC,SAAO;AAAA,IACL,QAAQC;AAAA,IACR,MAAM;AAAA,IACN,aAAaC;AAAA,IACb,WAAW;AAAA,EACf;AACA;AACA,SAASC,GAAE,GAAG;AACZ,QAAM,IAAI,aAAa,aAAa,IAAI,IAAI,WAAW,CAAC;AACxD,MAAI,EAAE,UAAU,KAAK,EAAE,CAAC,MAAM,OAAO,EAAE,CAAC,MAAM,OAAO,EAAE,CAAC,MAAM;AAC5D,WAAO,IAAI,YAAY,OAAO,EAAE,OAAO,CAAC;AAC1C,MAAI,EAAE,UAAU,KAAK,EAAE,CAAC,MAAM,OAAO,EAAE,CAAC,MAAM;AAC5C,WAAO,IAAI,YAAY,UAAU,EAAE,OAAO,CAAC;AAC7C,MAAI,EAAE,UAAU,KAAK,EAAE,CAAC,MAAM,OAAO,EAAE,CAAC,MAAM;AAC5C,WAAO,IAAI,YAAY,UAAU,EAAE,OAAO,CAAC;AAC7C,MAAI;AACF,WAAO,IAAI,YAAY,SAAS,EAAE,OAAO,GAAE,CAAE,EAAE,OAAO,CAAC;AAAA,EACzD,QAAQ;AAAA,EACR;AACA,MAAI;AACF,WAAO,IAAI,YAAY,KAAK,EAAE,OAAO,CAAC;AAAA,EACxC,QAAQ;AAAA,EACR;AACA,SAAO,IAAI,YAAY,SAAS,EAAE,OAAO,IAAI,EAAE,OAAO,CAAC;AACzD;AAEA,eAAeC,GAAG,GAAG,GAAG;AACtB,QAAM,IAAI,CAAC,CAAC,MAAM,aAAa,KAAK,UAAU,KAAK,YAAY,IAAI,IAAI,IAAI,EAAE,WAAW,QAAQ,OAAOf,IAAI,IAAI,EAAE,SAAS,QAAQG,IAAI,IAAI,EAAE,OAAO,GAAG,IAAIH,IAAI,EAAE,GAAGG,GAAG,QAAQH,EAAC,IAAKG,GAAGM,IAAI,MAAM,EAAE,GAAG,CAAC;AACvM,MAAI,CAACA,EAAE,GAAI,OAAM,IAAI,MAAM,SAASA,EAAE,MAAM,EAAE;AAC9C,QAAMC,IAAI,MAAMD,EAAE,YAAW;AAC7B,SAAOK,GAAEJ,CAAC;AACZ;AACA,eAAeM,GAAE,GAAG,GAAG;AACrB,MAAI;AACF,WAAO,OAAO,KAAK,aAAa,MAAM,EAAE,CAAC,IAAI;AACjD;AACA,SAASC,GAAE,GAAG,GAAG;AACf,MAAI,CAAC,KAAK,CAAC,EAAG;AACd,MAAI,CAAC,EAAG,QAAO;AACf,MAAI,CAAC,EAAG,QAAO;AACf,QAAM,IAAI,IAAI,QAAQ,EAAE,WAAW,CAAA,CAAE;AACrC,SAAO,EAAE,WAAW,IAAI,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC,GAAGjB,MAAM;AAC3D,MAAE,IAAIA,GAAG,CAAC;AAAA,EACZ,CAAC,GAAG;AAAA,IACF,GAAG;AAAA,IACH,GAAG;AAAA,IACH,SAAS;AAAA,EACb;AACA;AACA,SAASkB,GAAG,GAAG;AACb,QAAM,KAAK,KAAK,OAAO,SAAS,EAAE,oBAAoB,CAAC,GAAGlB,MAAM,MAAM,GAAGA,CAAC,IAAI,IAAI,KAAK,OAAO,SAAS,EAAE;AACzG,SAAO,OAAO,GAAGA,MAAM;AACrB,UAAMG,IAAI,MAAMa,GAAE,GAAG,CAAC,GAAG,IAAIC,GAAEd,GAAGH,CAAC;AACnC,WAAO,EAAE,GAAG,CAAC;AAAA,EACf;AACF;AACA,eAAemB,GAAG,GAAG,IAAI,OAAO,GAAG;AACjC,QAAM,IAAI,MAAM,EAAE,GAAG,CAAC;AACtB,MAAI,CAAC,EAAE,GAAI,OAAM,IAAI,MAAM,SAAS,EAAE,MAAM,EAAE;AAC9C,QAAMnB,IAAI,MAAM,EAAE,KAAI;AACtB,SAAO,IAAI,gBAAgBA,CAAC;AAC9B;AACA,eAAeoB,GAAG,GAAG,GAAG,IAAI,OAAO,GAAG;AACpC,QAAMpB,IAAI,MAAM,EAAE,GAAG,CAAC;AACtB,MAAI,CAACA,EAAE,GAAI,OAAM,IAAI,MAAM,SAASA,EAAE,MAAM,EAAE;AAC9C,QAAMG,IAAI,MAAMH,EAAE,KAAI,GAAI,IAAI,IAAI,gBAAgBG,CAAC;AACnD,MAAI;AACF,UAAMM,IAAI,SAAS,cAAc,GAAG;AACpC,IAAAA,EAAE,OAAO,GAAGA,EAAE,WAAW,GAAGA,EAAE,MAAM,UAAU,QAAQ,SAAS,KAAK,YAAYA,CAAC,GAAGA,EAAE,MAAK,GAAI,SAAS,KAAK,YAAYA,CAAC;AAAA,EAC5H,UAAC;AACC,eAAW,MAAM,IAAI,gBAAgB,CAAC,GAAG,GAAG;AAAA,EAC9C;AACF;AACA,SAASY,GAAE,GAAG;AACZ,QAAM,IAAI,EAAE,KAAI,EAAG,QAAQ,KAAK,GAAG,GAAG,IAAI,EAAE,MAAM,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM;AAC1E,MAAI,EAAE,WAAW,GAAG;AAClB,UAAM,CAAC,GAAGrB,GAAGG,CAAC,IAAI;AAClB,WAAO,OAAO,CAAC,IAAI,OAAO,OAAOH,CAAC,IAAI,KAAK,OAAOG,CAAC;AAAA,EACrD;AACA,MAAI,EAAE,WAAW,GAAG;AAClB,UAAM,CAAC,GAAGH,CAAC,IAAI;AACf,WAAO,OAAO,CAAC,IAAI,KAAK,OAAOA,CAAC;AAAA,EAClC;AACA,SAAO,OAAO,CAAC,KAAK;AACtB;AACA,SAASsB,GAAG,GAAG;AACb,MAAI,CAAC,SAAS,CAAC,KAAK,IAAI,EAAG,QAAO;AAClC,QAAM,IAAI,KAAK,MAAM,IAAI,GAAG,GAAG,IAAI,IAAI,KAAK,IAAI,KAAK,MAAM,IAAI,GAAG,IAAI,IAAItB,IAAI,KAAK,MAAM,IAAI,GAAG,IAAI,IAAIG,IAAI,KAAK,MAAM,IAAI,IAAI,GAAG,IAAI,CAACM,GAAGC,IAAI,MAAMD,EAAE,SAAQ,EAAG,SAASC,GAAG,GAAG;AAChL,SAAO,GAAG,EAAEP,CAAC,CAAC,IAAI,EAAEH,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AAC3C;AACA,MAAMuB,KAAI,uFAAuFC,KAAI;AACrG,SAASC,GAAE,GAAG;AACZ,QAAM,IAAI,EAAE,QAAQ,WAAW,EAAE,EAAE,UAAS;AAC5C,SAAO,UAAU,KAAK,CAAC,IAAI,QAAQ,WAAW,KAAK,CAAC,KAAK,eAAe,KAAK,CAAC,IAAI,SAAS,qBAAqB,KAAK,CAAC,KAAK,cAAc,KAAK,CAAC,IAAI,6BAA6B,KAAK,CAAC,IAAI,QAAQ,QAAQD,GAAE,KAAK,CAAC,KAAK,6CAA6C,KAAK,CAAC,IAAI,oCAAoC,KAAK,CAAC,IAAI,SAAS,QAAQ;AAC/U;AACA,SAASE,GAAE,GAAG,GAAG;AACf,QAAMhC,IAAI,EAAE,QAAQ,UAAU;AAAA,CAC/B,EAAE,QAAQ,WAAW,EAAE,EAAE,MAAM;AAAA,CAC/B,GAAGM,IAAI,CAAA;AACN,MAAI,GAAG2B,IAAI;AACX,MAAI,MAAM,OAAO;AACf,UAAMlB,IAAI,CAAA;AACV,WAAOkB,IAAIjC,EAAE,UAAUA,EAAEiC,CAAC,EAAE,KAAI,MAAO;AACrC,MAAAlB,EAAE,KAAKf,EAAEiC,CAAC,CAAC,GAAGA;AAChB,SAAK,IAAIlB,EAAE,KAAK;AAAA,CACnB,GAAGkB,IAAIjC,EAAE,UAAUA,EAAEiC,CAAC,EAAE,KAAI,MAAO,KAAM,CAAAA;AAAA,EACxC;AACA,SAAOA,IAAIjC,EAAE,UAAU;AACrB,WAAOiC,IAAIjC,EAAE,UAAUA,EAAEiC,CAAC,EAAE,KAAI,MAAO,KAAM,CAAAA;AAC7C,QAAIA,KAAKjC,EAAE,OAAQ;AACnB,QAAIe,GAAG,IAAI;AACX,QAAIc,GAAE,KAAK7B,EAAEiC,CAAC,CAAC;AACb,UAAIjC,EAAEiC,CAAC,GAAGA;AAAA,aACHlB,IAAIf,EAAEiC,CAAC,EAAE,KAAI,KAAM,QAAQA,KAAKA,IAAIjC,EAAE,UAAU6B,GAAE,KAAK7B,EAAEiC,CAAC,CAAC;AAClE,UAAIjC,EAAEiC,CAAC,GAAGA;AAAA;AAEV;AACF,QAAI,CAAC,EAAG;AACR,UAAMC,IAAI,EAAE,MAAM,+BAA+B;AACjD,QAAI,CAACA,EAAG;AACR,UAAMhB,IAAIS,GAAEO,EAAE,CAAC,CAAC,GAAGC,IAAIR,GAAEO,EAAE,CAAC,CAAC,GAAGf,IAAI,CAAA;AACpC,WAAOc,IAAIjC,EAAE,UAAUA,EAAEiC,CAAC,EAAE,KAAI,MAAO;AACrC,MAAAd,EAAE,KAAKnB,EAAEiC,CAAC,CAAC,GAAGA;AAChB,IAAA3B,EAAE,KAAK,EAAE,IAAIS,GAAG,OAAOG,GAAG,KAAKiB,GAAG,MAAMhB,EAAE,KAAK;AAAA,CAClD,GAAG;AAAA,EACF;AACA,SAAO,EAAE,QAAQ,GAAG,MAAMb,GAAG,QAAQ,EAAC;AACxC;AACA,SAAS8B,GAAE,GAAG,GAAG,GAAG;AAClB,QAAM,IAAI,OAAO,CAAC,GAAG9B,IAAI,OAAO,CAAC;AACjC,MAAIG,IAAI;AACR,MAAI,GAAG;AACL,UAAM,KAAK,IAAI,OAAO,MAAM,GAAG,CAAC;AAChC,IAAAA,IAAI,OAAO,CAAC;AAAA,EACd;AACA,SAAO,IAAI,KAAKH,IAAIG,IAAI;AAC1B;AACA,SAAS4B,GAAE,GAAG,GAAG;AACf,QAAM,IAAI,mDAAmD,KAAK,EAAE,KAAI,CAAE;AAC1E,MAAI,CAAC,EAAG,QAAO;AACf,QAAM,IAAI,EAAE,CAAC,EAAE,eAAe/B,IAAI,EAAE,CAAC,EAAE,KAAI;AAC3C,MAAI,EAAE,SAAS,CAAC,IAAIA,GAAG,MAAM,UAAU;AACrC,UAAMG,IAAI,OAAOH,CAAC;AAClB,UAAMG,CAAC,MAAM,EAAE,WAAWA;AAAA,EAC5B;AACA,SAAO;AACT;AACA,SAAS6B,GAAE,GAAG;AACZ,QAAM/B,IAAI,EAAE,QAAQ,UAAU;AAAA,CAC/B,EAAE,QAAQ,WAAW,EAAE,EAAE,MAAM;AAAA,CAC/B,GAAGP,IAAI,EAAE,UAAU,IAAI,UAAU,EAAC,GAAIM,IAAI,8CAA8C,IAAI,CAAA;AAC3F,aAAWU,KAAKT,GAAG;AACjB,UAAM2B,IAAIlB,EAAE,KAAI;AAChB,QAAI,CAACkB,KAAKG,GAAEH,GAAGlC,CAAC,EAAG;AACnB,UAAMkB,IAAI,CAAA;AACV,QAAIiB,IAAI;AACR,IAAA7B,EAAE,YAAY;AACd,QAAIa;AACJ,YAAQA,IAAIb,EAAE,KAAK4B,CAAC,OAAO,QAAQf,EAAE,UAAUgB;AAC7C,MAAAjB,EAAE,KAAKkB,GAAEjB,EAAE,CAAC,GAAGA,EAAE,CAAC,GAAGA,EAAE,CAAC,CAAC,CAAC,GAAGgB,IAAIhB,EAAE,QAAQA,EAAE,CAAC,EAAE;AAClD,QAAID,EAAE,WAAW,EAAG;AACpB,UAAMD,IAAIiB,EAAE,MAAMC,CAAC,EAAE,KAAI;AACzB,eAAWI,KAAKrB;AACd,QAAE,KAAK,EAAE,OAAOqB,GAAG,MAAMtB,GAAG;AAAA,EAChC;AACA,IAAE,KAAK,CAACD,GAAGkB,MAAMlB,EAAE,QAAQkB,EAAE,KAAK;AAClC,QAAMD,IAAIjC,EAAE,WAAW;AACvB,SAAO,EAAE,QAAQ,OAAO,MAAM,EAAE,IAAI,CAACgB,GAAGkB,MAAM;AAC5C,UAAMhB,IAAI,KAAK,IAAI,GAAGF,EAAE,QAAQiB,CAAC,GAAGE,IAAI,EAAED,IAAI,CAAC,GAAGf,IAAIgB,IAAI,KAAK,IAAIjB,GAAGiB,EAAE,QAAQF,CAAC,IAAIf,IAAI;AACzF,WAAO,EAAE,OAAOA,GAAG,KAAKC,GAAG,MAAMH,EAAE,KAAI;AAAA,EACzC,CAAC,GAAG,UAAUhB,EAAE,SAAQ;AAC1B;AACA,SAASwC,GAAE,GAAG;AACZ,QAAMjC,IAAI,EAAE,QAAQ,UAAU;AAAA,CAC/B,EAAE,QAAQ,WAAW,EAAE,EAAE,MAAM;AAAA,CAC/B,GAAGP,IAAI,EAAE,UAAU,CAAA,GAAI,UAAU,KAAKM,IAAI,8CAA8C,IAAI,4CAA4C2B,IAAI,CAAA;AAC3I,aAAWC,KAAK3B,GAAG;AACjB,UAAMW,IAAIgB,EAAE,KAAI;AAChB,QAAI,CAAChB,KAAKmB,GAAEnB,GAAGlB,CAAC,EAAG;AACnB,UAAMmC,IAAI,CAAA;AACV,QAAIhB,IAAI;AACR,IAAAb,EAAE,YAAY;AACd,QAAIW;AACJ,YAAQA,IAAIX,EAAE,KAAKY,CAAC,OAAO,QAAQD,EAAE,UAAUE;AAC7C,MAAAgB,EAAE,KAAKC,GAAEnB,EAAE,CAAC,GAAGA,EAAE,CAAC,GAAGA,EAAE,CAAC,CAAC,CAAC,GAAGE,IAAIF,EAAE,QAAQA,EAAE,CAAC,EAAE;AAClD,QAAIkB,EAAE,WAAW,EAAG;AACpB,UAAMI,IAAIrB,EAAE,MAAMC,CAAC;AACnB,eAAWsB,KAAKN;AACd,MAAAF,EAAE,KAAK,EAAE,OAAOQ,GAAG,KAAKF,GAAG;AAAA,EAC/B;AACA,EAAAN,EAAE,KAAK,CAACC,GAAGhB,MAAMgB,EAAE,QAAQhB,EAAE,KAAK;AAClC,QAAMH,IAAIf,EAAE,WAAW;AACvB,SAAO,EAAE,QAAQ,QAAQ,MAAMiC,EAAE,IAAI,CAACC,GAAGhB,MAAM;AAC7C,UAAMiB,IAAI,CAAA;AACV,QAAIhB,IAAI,IAAIF,IAAI,GAAGsB,IAAI;AACvB,MAAE,YAAY;AACd,QAAIE;AACJ,YAAQA,IAAI,EAAE,KAAKP,EAAE,GAAG,OAAO,QAAQ;AACrC,YAAMQ,IAAIR,EAAE,IAAI,MAAMjB,GAAGwB,EAAE,KAAK;AAChC,MAAAF,MAAM,QAAQG,KAAKP,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,GAAGI,IAAIxB,CAAC,GAAG,MAAM2B,EAAC,CAAE,GAAGvB,KAAKuB,GAAGH,IAAIH,GAAEK,EAAE,CAAC,GAAGA,EAAE,CAAC,GAAGA,EAAE,CAAC,CAAC,GAAGxB,IAAIwB,EAAE,QAAQA,EAAE,CAAC,EAAE;AAAA,IACzH;AACA,UAAME,IAAIT,EAAE,IAAI,MAAMjB,CAAC;AACvB,IAAAsB,MAAM,QAAQI,KAAKR,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,GAAGI,IAAIxB,CAAC,GAAG,MAAM4B,EAAC,CAAE,GAAGxB,KAAKwB;AACxE,UAAMC,IAAI,KAAK,IAAI,GAAGV,EAAE,QAAQnB,CAAC,GAAG8B,IAAIZ,EAAEf,IAAI,CAAC,GAAG4B,IAAID,IAAI,KAAK,IAAID,GAAGC,EAAE,QAAQ9B,CAAC,IAAI6B,IAAI;AACzF,WAAO;AAAA,MACL,OAAOA;AAAA,MACP,KAAKE;AAAA,MACL,MAAM3B,EAAE,KAAI;AAAA,MACZ,OAAOgB,EAAE,SAASA,IAAI;AAAA,IAC5B;AAAA,EACE,CAAC,GAAG,UAAUnC,EAAE,SAAQ;AAC1B;AACA,SAAS+C,GAAE,GAAG;AACZ,QAAM,IAAI,EAAE,KAAI,EAAG,MAAM,GAAG;AAC5B,SAAO,EAAE,WAAW,IAAI,IAAI,OAAO,EAAE,CAAC,CAAC,IAAI,OAAO,OAAO,EAAE,CAAC,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC,EAAE,QAAQ,KAAK,GAAG,CAAC;AACrG;AACA,SAASC,GAAE,GAAG,GAAG;AACf,QAAMhD,IAAI,EAAE,QAAQ,UAAU;AAAA,CAC/B,EAAE,QAAQ,WAAW,EAAE,EAAE,MAAM;AAAA,CAC/B;AACC,MAAIM,IAAI,IAAI,IAAI,CAAA;AAChB,QAAM2B,IAAI,IAAIlB,IAAI,CAAA;AAClB,aAAW,KAAKf,GAAG;AACjB,UAAMkC,IAAI,EAAE,QAAQ,QAAQ,EAAE,GAAGhB,IAAIgB,EAAE,KAAI,GAAIC,IAAI,oBAAoB,KAAKjB,CAAC;AAC7E,QAAIiB,GAAG;AACL,MAAA7B,IAAI6B,EAAE,CAAC,EAAE,YAAW,GAAIpB,EAAE,KAAKmB,CAAC;AAChC;AAAA,IACF;AACA,QAAI5B,MAAM,UAAU;AAClB,MAAAS,EAAE,KAAKmB,CAAC;AACR;AAAA,IACF;AACA,UAAMf,IAAI,oBAAoB,KAAKD,CAAC;AACpC,QAAIC,GAAG;AACL,UAAIA,EAAE,CAAC,EAAE,MAAM,GAAG,EAAE,IAAI,CAAC8B,MAAMA,EAAE,KAAI,CAAE;AACvC;AAAA,IACF;AACA,UAAMhC,IAAI,gCAAgC,KAAKC,CAAC;AAChD,QAAI,CAACD,KAAKA,EAAE,CAAC,EAAE,YAAW,MAAO,aAAa,EAAE,WAAW,EAAG;AAC9D,UAAMsB,IAAI,EAAE,QAAQE,IAAIxB,EAAE,CAAC,EAAE,MAAM,GAAG,GAAG0B,IAAIF,EAAE,MAAM,GAAGF,IAAI,CAAC,GAAGK,IAAIH,EAAE,MAAMF,IAAI,CAAC,EAAE,KAAK,GAAG,GAAGM,IAAI,CAAA;AAClG,MAAE,QAAQ,CAACI,GAAGC,MAAM;AAClB,MAAAL,EAAEI,CAAC,IAAIC,MAAMX,IAAI,IAAIK,IAAID,EAAEO,CAAC,KAAK;AAAA,IACnC,CAAC;AACD,UAAMJ,IAAIC,GAAEF,EAAE,SAAS,EAAE,GAAGH,IAAIK,GAAEF,EAAE,OAAO,EAAE,GAAGM,KAAKN,EAAE,QAAQ,IAAI,QAAQ,QAAQ;AAAA,CACtF,EAAE,QAAQ,QAAQ;AAAA,CAClB,EAAE,QAAQ,QAAQ,GAAG,EAAE,QAAQ,cAAc,EAAE;AAC5C,IAAAZ,EAAE,KAAK,EAAE,OAAOa,GAAG,KAAKJ,GAAG,MAAMS,GAAG,OAAON,EAAE,MAAK,CAAE;AAAA,EACtD;AACA,SAAOZ,EAAE,KAAK,CAAC,GAAGC,MAAM,EAAE,QAAQA,EAAE,KAAK,GAAG;AAAA,IAC1C,QAAQ;AAAA,IACR,MAAMD;AAAA,IACN,QAAQlB,EAAE,KAAK;AAAA,CAClB,EAAE,KAAI,KAAM;AAAA,EACb;AACA;AACA,SAASqC,EAAE,GAAG;AACZ,QAAM,IAAI,EAAE,KAAI;AAChB,MAAI,CAAC,EAAG,QAAO;AACf,QAAM,IAAI,mCAAmC,KAAK,CAAC;AACnD,MAAI,GAAG;AACL,UAAM9C,IAAI,OAAO,EAAE,CAAC,CAAC,GAAGG,IAAI,EAAE,CAAC,EAAE,YAAW;AAC5C,WAAOA,MAAM,MAAMH,IAAI,OAAOG,MAAM,MAAMH,IAAI,KAAKG,MAAM,OAAOH,IAAI,MAAMA;AAAA,EAC5E;AACA,QAAM,IAAI,EAAE,MAAM,GAAG;AACrB,SAAO,EAAE,WAAW,IAAI,OAAO,EAAE,CAAC,CAAC,IAAI,OAAO,OAAO,EAAE,CAAC,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,WAAW,IAAI,OAAO,EAAE,CAAC,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK;AACpJ;AACA,SAAS+C,GAAE,GAAG;AACZ,SAAO,EAAE,QAAQ,uBAAuB,CAAC,GAAG,MAAM,OAAO,aAAa,SAAS,GAAG,EAAE,CAAC,CAAC,EAAE,QAAQ,aAAa,CAAC,GAAG,MAAM,OAAO,aAAa,OAAO,CAAC,CAAC,CAAC,EAAE,QAAQ,SAAS,GAAG,EAAE,QAAQ,SAAS,GAAG,EAAE,QAAQ,WAAW,GAAG,EAAE,QAAQ,WAAW,GAAG,EAAE,QAAQ,WAAW,GAAG,EAAE,QAAQ,UAAU,GAAG;AAClS;AACA,SAASC,GAAE,GAAG;AACZ,MAAIhD,GAAGG,GAAGwB;AACV,QAAM/B,IAAI,IAAIK,IAAI;AAClB,MAAIP;AACJ,UAAQA,IAAIO,EAAE,KAAK,CAAC,OAAO,QAAQ;AACjC,UAAMQ,IAAIf,EAAE,CAAC,GAAGgB,IAAIhB,EAAE,CAAC,GAAG,MAAMM,IAAI,kCAAkC,KAAKS,CAAC,MAAM,OAAO,SAAST,EAAE,CAAC,MAAM,IAAIY,MAAMT,IAAI,gCAAgC,KAAKM,CAAC,MAAM,OAAO,SAASN,EAAE,CAAC,MAAM,IAAI,MAAMwB,IAAI,gCAAgC,KAAKlB,CAAC,MAAM,OAAO,SAASkB,EAAE,CAAC,MAAM,IAAId,IAAIiC,EAAE,CAAC;AAC5R,QAAInC;AACJ,IAAAC,IAAID,IAAImC,EAAElC,CAAC,IAAI,IAAID,IAAIE,IAAIiC,EAAE,CAAC,IAAInC,IAAIE,IAAI;AAC1C,UAAMoB,IAAIc;AAAA,MACRrC,EAAE,QAAQ,4BAA4B;AAAA,CAC3C,EAAE,QAAQ,YAAY,EAAE;AAAA,IACzB,EAAM,QAAQ,WAAW,GAAG,EAAE,QAAQ,QAAQ;AAAA,CAC7C,EAAE,KAAI;AACH,KAACuB,KAAKpB,KAAKF,MAAMf,EAAE,KAAK,EAAE,OAAOiB,GAAG,KAAKF,GAAG,MAAMsB,EAAC,CAAE;AAAA,EACvD;AACA,SAAOrC,EAAE,KAAK,CAACa,GAAGC,MAAMD,EAAE,QAAQC,EAAE,KAAK,GAAG,EAAE,QAAQ,QAAQ,MAAMd,EAAC;AACvE;AACA,SAASqD,GAAE,GAAG;AACZ,QAAM,IAAI,EAAE,QAAQ,WAAW,EAAE;AACjC,MAAI,OAAO,YAAY,KAAK;AAC1B,UAAM,IAAI,IAAI,UAAS,EAAG,gBAAgB,GAAG,iBAAiB;AAC9D,QAAI,EAAE,qBAAqB,aAAa,EAAE,WAAW,GAAG;AACtD,YAAMjD,IAAI,EAAE,yBAAyB,EAAE,uBAAuB,KAAK,GAAG,IAAI,EAAE,qBAAqB,GAAG;AACpG,UAAIA,EAAE,SAAS,GAAG;AAChB,cAAM,IAAI,CAAA;AACV,iBAAS2B,IAAI,GAAGA,IAAI3B,EAAE,QAAQ2B,KAAK;AACjC,gBAAMlB,IAAIT,EAAE2B,CAAC,GAAG,IAAIlB,EAAE,aAAa,OAAO,KAAK,IAAImB,IAAInB,EAAE,aAAa,KAAK,KAAK,IAAIG,IAAIH,EAAE,aAAa,KAAK,KAAK,IAAIoB,IAAIiB,EAAE,CAAC;AAC5H,cAAIjC;AACJ,UAAAe,IAAIf,IAAIiC,EAAElB,CAAC,IAAIhB,IAAIC,IAAIgB,IAAIiB,EAAElC,CAAC,IAAIC,IAAIgB,IAAI;AAC1C,cAAIlB,IAAI;AACR,UAAAF,EAAE,WAAW,QAAQ,CAAC0B,MAAM;AAC1B,gBAAIA,EAAE,aAAa;AACjB,cAAAxB,KAAKwB,EAAE,aAAa;AAAA,qBACbA,EAAE,aAAa,GAAG;AACzB,oBAAME,IAAIF;AACV,eAACE,EAAE,aAAaA,EAAE,SAAS,YAAW,MAAO,OAAO1B,KAAK;AAAA,IACnEA,KAAK0B,EAAE,eAAe;AAAA,YACd;AAAA,UACF,CAAC;AACD,gBAAMJ,IAAItB,EAAE,QAAQ,WAAW,GAAG,EAAE,QAAQ,QAAQ;AAAA,CAC7D,EAAE,KAAI;AACG,WAACsB,KAAKJ,KAAKhB,MAAM,EAAE,KAAK,EAAE,OAAOgB,GAAG,KAAKhB,GAAG,MAAMoB,EAAC,CAAE;AAAA,QACvD;AACA,eAAO,EAAE,KAAK,CAACN,GAAGlB,MAAMkB,EAAE,QAAQlB,EAAE,KAAK,GAAG,EAAE,QAAQ,QAAQ,MAAM,EAAC;AAAA,MACvE;AAAA,IACF;AAAA,EACF;AACA,SAAOuC,GAAE,CAAC;AACZ;AACA,SAASE,GAAG,GAAG,GAAG;AAChB,UAAQ,KAAKzB,GAAE,CAAC,GAAC;AAAA,IACf,KAAK;AACH,aAAOO,GAAE,CAAC;AAAA,IACZ,KAAK;AACH,aAAOE,GAAE,CAAC;AAAA,IACZ,KAAK;AACH,aAAOQ,GAAE,GAAG,KAAK;AAAA,IACnB,KAAK;AACH,aAAOA,GAAE,GAAG,KAAK;AAAA,IACnB,KAAK;AACH,aAAOO,GAAE,CAAC;AAAA,IACZ,KAAK;AACH,aAAOvB,GAAE,GAAG,KAAK;AAAA,IACnB,KAAK;AAAA,IACL;AACE,aAAOA,GAAE,GAAG,KAAK;AAAA,EACvB;AACA;AACA,eAAeyB,GAAG,GAAG;AACnB,SAAOC,GAAE,UAAU,CAAC;AACtB;AACA,SAASC,GAAG,GAAG;AACb,QAAM,IAAI,CAAA;AACV,SAAO,EAAE,QAAQ,CAAC,GAAG,MAAM;AACzB,QAAIxB;AACJ,UAAM,IAAI,EAAE,KAAK1B,IAAI,KAAK,CAAC,EAAE,SAAS,GAAG,IAAI,IAAI,MAAM,GAAGwB,IAAI,IAAIxB,EAAE,QAAQ,OAAO,EAAE,IAAIA,GAAG,IAAIwB,EAAE,YAAY,GAAG,GAAGjB,IAAI,KAAK,IAAIiB,EAAE,MAAM,IAAI,CAAC,IAAIA,GAAGC,IAAI,KAAK,IAAID,EAAE,MAAM,GAAG,CAAC,IAAI,IAAIf,IAAI,IAAI,MAAMiB,IAAI,EAAE,UAAU,OAAO,SAASA,EAAE,qBAAqB;AAC3P,MAAE,KAAK;AAAA,MACL,MAAM1B;AAAA,MACN,MAAMO;AAAA,MACN,KAAKkB;AAAA,MACL,OAAO;AAAA,MACP,MAAMhB;AAAA,MACN,MAAM,EAAE;AAAA,IACd,CAAK;AAAA,EACH,CAAC,GAAG;AACN;AACA,SAAS0C,GAAG,GAAG;AACb,QAAM,IAAI,EAAE,MAAM,IAAI,MAAM,IAAI,OAAO,IAAI,UAAU,CAAA,GAAI,MAAM,EAAC,GAAI,IAAoB,oBAAI,IAAG;AAC/F,IAAE,IAAI,IAAI,CAAC;AACX,QAAM,IAAI,CAACnD,MAAM;AACf,QAAI,EAAE,IAAIA,CAAC,EAAG,QAAO,EAAE,IAAIA,CAAC;AAC5B,UAAM,IAAIA,EAAE,MAAM,GAAG,EAAE,OAAO,OAAO;AACrC,QAAIM,IAAI,GAAGC,IAAI;AACf,eAAW,KAAK,GAAG;AACjB,MAAAA,IAAIA,IAAI,GAAGA,CAAC,IAAI,CAAC,KAAK;AACtB,UAAIE,IAAI,EAAE,IAAIF,CAAC;AACf,MAAAE,MAAMA,IAAI,EAAE,MAAM,GAAG,MAAMF,IAAI,KAAK,OAAO,IAAI,UAAU,CAAA,GAAI,MAAM,EAAC,GAAID,EAAE,SAAS,KAAKG,CAAC,GAAG,EAAE,IAAIF,GAAGE,CAAC,IAAIH,IAAIG;AAAA,IAChH;AACA,WAAOH;AAAA,EACT;AACA,aAAWN,KAAK,GAAG;AACjB,QAAIA,EAAE,OAAO;AACX,QAAEA,EAAE,KAAK,QAAQ,OAAO,EAAE,CAAC;AAC3B;AAAA,IACF;AACA,MAAEA,EAAE,GAAG,EAAE,SAAS,KAAK;AAAA,MACrB,MAAMA,EAAE;AAAA,MACR,MAAMA,EAAE;AAAA,MACR,OAAO;AAAA,MACP,MAAMA,EAAE;AAAA,IACd,CAAK;AAAA,EACH;AACA,QAAMH,IAAI,CAACG,MAAM;AACf,QAAIA,EAAE,UAAU;AACd,MAAAA,EAAE,SAAS,KAAK,CAAC,GAAGM,MAAM,EAAE,UAAUA,EAAE,QAAQ,EAAE,QAAQ,KAAK,IAAI,EAAE,KAAK,cAAcA,EAAE,IAAI,CAAC;AAC/F,iBAAW,KAAKN,EAAE,SAAU,CAAAH,EAAE,CAAC;AAAA,IACjC;AAAA,EACF;AACA,SAAOA,EAAE,CAAC,GAAG;AACf;AAOA,eAAeuD,GAAG,GAAG,GAAG,GAAG;AACzB,QAAM,IAAI,EAAE,KAAK,CAAC;AAClB,MAAI,CAAC,EAAG,OAAM,IAAI,MAAM,wBAAwB,CAAC,EAAE;AACnD,QAAMvD,IAAI,MAAM,EAAE,MAAM,aAAa;AACrC,SAAO,IAAI,KAAK,CAACA,CAAC,GAAG,IAAI,EAAE,MAAM,EAAC,IAAK,MAAM;AAC/C;AACA,SAASwD,GAAE,GAAG;AACZ,SAAO,IAAI,EAAE,WAAW,GAAG,IAAI,IAAI,EAAE,WAAW,IAAI,MAAM,EAAE,UAAU,CAAC,IAAI,EAAE,WAAW,IAAI,MAAM,IAAI,YAAY;AACpH;AACA,MAAMC,KAAI;AAAA,EACR;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAGC,KAAK;AAAA,EACN;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AACA,SAASC,GAAG,GAAG,GAAG;AAChB,QAAM,IAAI,SAAS,EAAE,UAAU,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,SAAS,EAAE,UAAU,GAAG,CAAC,GAAG,EAAE,GAAG3D,IAAI,SAAS,EAAE,UAAU,GAAG,CAAC,GAAG,EAAE,GAAGG,IAAI,CAAC,MAAM,IAAI,IAAI,KAAK,MAAM,KAAK,IAAI,EAAE,IAAI,KAAK,MAAM,KAAK,MAAM,KAAK,CAAC,GAAG,IAAI,KAAK,IAAI,KAAK,KAAK,IAAI,GAAGA,EAAE,CAAC,CAAC,CAAC,GAAGM,IAAI,KAAK,IAAI,KAAK,KAAK,IAAI,GAAGN,EAAE,CAAC,CAAC,CAAC,GAAGO,IAAI,KAAK,IAAI,KAAK,KAAK,IAAI,GAAGP,EAAEH,CAAC,CAAC,CAAC;AAChT,SAAO,EAAE,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG,IAAIS,EAAE,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG,IAAIC,EAAE,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG;AAC3G;AACA,SAASkD,GAAG,GAAG;AACb,MAAI,KAAK,EAAE,SAAS,aAAa,EAAE,YAAY,SAAS;AACtD,UAAM,IAAI,EAAE;AACZ,QAAI;AACF,aAAOC,GAAE,CAAC;AAAA,EACd;AACF;AACA,SAASA,GAAE,GAAG;AACZ,MAAI,GAAG;AACL,QAAI,UAAU,KAAK,OAAO,EAAE,QAAQ,YAAY,EAAE;AAChD,aAAOL,GAAE,EAAE,IAAI;AACjB,QAAI,WAAW,KAAK,OAAO,EAAE,SAAS,UAAU;AAC9C,YAAM,IAAIC,GAAE,EAAE,KAAK,KAAK,UAAU,IAAI,UAAU,KAAK,OAAO,EAAE,QAAQ,WAAW,EAAE,OAAO;AAC1F,aAAO,OAAO,MAAM,IAAIE,GAAG,GAAG,CAAC,IAAI;AAAA,IACrC;AACA,QAAI,aAAa,KAAK,OAAO,EAAE,WAAW,UAAU;AAClD,YAAM,IAAID,GAAG,EAAE,OAAO;AACtB,UAAI,EAAG,QAAO,MAAM;AAAA,IACtB;AAAA,EACF;AACF;AACA,SAASI,GAAG,GAAG;AACb,MAAI,CAAC,KAAK,CAAC,EAAE,MAAO;AACpB,QAAM,IAAID,GAAE,EAAE,KAAK,KAAK;AACxB,SAAO,CAAC,EAAE,OAAO,CAAC;AACpB;AACA,SAASE,GAAG,GAAG;AACb,QAAM,IAAI,CAAA;AACV,MAAI,IAAI;AACR,MAAI,EAAE,MAAM;AACV,UAAM/D,IAAI,EAAE;AACZ,SAAKA,EAAE,QAAQA,EAAE,QAAQA,EAAE,QAAQA,EAAE,YAAY,IAAI,IAAI,EAAE,OAAO,IAAIA,EAAE,SAAS,EAAE,KAAK,OAAOA,EAAE,OAAOA,EAAE,SAAS,EAAE,KAAK,OAAOA,EAAE,OAAOA,EAAE,SAAS,EAAE,KAAK,OAAO,KAAKA,EAAE,WAAW,EAAE,KAAK,SAAS,MAAMA,EAAE,OAAO;AAClN,YAAMG,IAAI0D,GAAE7D,EAAE,KAAK;AACnB,MAAAG,MAAM,IAAI,IAAI,EAAE,QAAQA;AAAA,IAC1B;AACA,IAAAH,EAAE,cAAc,IAAI,IAAI,EAAE,YAAY,KAAKA,EAAE,WAAW,IAAI,IAAI,EAAE,SAAS;AAAA,EAC7E;AACA,QAAM,IAAI4D,GAAG,EAAE,IAAI;AACnB,MAAI,MAAM,IAAI,IAAI,EAAE,UAAU,IAAI,EAAE,WAAW;AAC7C,UAAM5D,IAAI,EAAE;AACZ,IAAAA,EAAE,eAAe,IAAI,IAAI,EAAE,QAAQA,EAAE,aAAaA,EAAE,aAAa,IAAI,IAAI,EAAE,SAASA,EAAE,WAAWA,EAAE,aAAa,IAAI,IAAI,EAAE,WAAW;AAAA,EACvI;AACA,MAAI,EAAE,QAAQ;AACZ,UAAMA,IAAI,CAAA;AACV,QAAIG,IAAI;AACR,UAAM,IAAI,CAAC,OAAO,UAAU,QAAQ,OAAO;AAC3C,eAAWM,KAAK,GAAG;AACjB,YAAMC,IAAIoD,GAAG,EAAE,OAAOrD,CAAC,CAAC;AACxB,MAAAC,MAAMV,EAAES,CAAC,IAAIC,GAAGP,IAAI;AAAA,IACtB;AACA,IAAAA,MAAM,IAAI,IAAI,EAAE,SAASH;AAAA,EAC3B;AACA,SAAO,IAAI,IAAI;AACjB;AACA,SAASgE,GAAG,GAAG;AACb,SAAO,KAAK,UAAU,CAAC;AACzB;AACA,SAASC,GAAG,GAAG,GAAG,GAAG;AACnB,QAAM,IAAIF,GAAG,CAAC;AACd,MAAI,CAAC,EAAG,QAAO;AACf,QAAM/D,IAAIgE,GAAG,CAAC,GAAG7D,IAAI,EAAE,IAAIH,CAAC;AAC5B,MAAIG,MAAM,OAAQ,QAAOA;AACzB,QAAM,IAAI,EAAE;AACZ,SAAO,EAAE,KAAK,CAAC,GAAG,EAAE,IAAIH,GAAG,CAAC,GAAG;AACjC;AACA,SAASkE,GAAG,GAAG;AACb,QAAM,IAAI,EAAE;AACZ,MAAI,KAAK,KAAM,QAAO;AACtB,MAAI,OAAO,KAAK,SAAU,QAAO;AACjC,MAAI,OAAO,KAAK,SAAU,QAAO,OAAO,CAAC;AACzC,MAAI,OAAO,KAAK,UAAW,QAAO,IAAI,SAAS;AAC/C,MAAI,aAAa;AACf,WAAO,EAAE,mBAAkB;AAC7B,MAAI,OAAO,KAAK,YAAY,aAAa,GAAG;AAC1C,UAAM,IAAI,EAAE;AACZ,WAAO,KAAK,OAAO,OAAO,CAAC,IAAI;AAAA,EACjC;AACA,SAAO,OAAO,KAAK,YAAY,cAAc,IAAI,EAAE,SAAS,IAAI,CAACxE,MAAMA,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,OAAO,KAAK,YAAY,eAAe,IAAI,EAAE,QAAQ,KAAK,OAAO,KAAK,YAAY,WAAW,IAAI,OAAO,EAAE,KAAK,IAAI,OAAO,CAAC;AACvN;AACA,SAASyE,GAAG,GAAG;AACb,QAAM,IAAI,EAAE,MAAM,GAAG,GAAG,IAAIC,GAAE,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,IAAIA,GAAE,EAAE,CAAC,CAAC,IAAI;AAC1D,SAAO;AAAA,IACL,KAAK,EAAE;AAAA,IACP,MAAM,EAAE;AAAA,IACR,QAAQ,EAAE;AAAA,IACV,OAAO,EAAE;AAAA,EACb;AACA;AACA,SAASA,GAAE,GAAG;AACZ,QAAM,IAAI,EAAE,MAAM,iBAAiB;AACnC,MAAI,CAAC,EAAG,QAAO,EAAE,KAAK,GAAG,KAAK,EAAC;AAC/B,QAAM,IAAI,EAAE,CAAC,GAAG,IAAI,SAAS,EAAE,CAAC,GAAG,EAAE;AACrC,MAAIpE,IAAI;AACR,WAASG,IAAI,GAAGA,IAAI,EAAE,QAAQA;AAC5B,IAAAH,IAAIA,IAAI,MAAM,EAAE,WAAWG,CAAC,IAAI;AAClC,SAAO,EAAE,KAAK,GAAG,KAAKH,EAAC;AACzB;AACA,SAASqE,GAAG,GAAG;AACb,QAAM,IAAI,CAAA;AACV,SAAO,EAAE,UAAU,CAAC,MAAM;AACxB,UAAM,IAAI,CAAA,GAAIrE,IAAoB,oBAAI,IAAG,GAAIG,IAAI,CAAA,GAAI,IAAI,CAAA,GAAIM,IAAI,CAAA,GAAIC,IAAI,EAAE;AAC3E,aAASG,IAAI,GAAGA,KAAKH,GAAGG,KAAK;AAC3B,YAAMF,IAAI,EAAE,UAAUE,CAAC;AACvB,MAAAF,EAAE,UAAUF,EAAE,OAAOI,IAAI,CAAC,CAAC,IAAI,EAAE,OAAO,KAAK,MAAMF,EAAE,QAAQ,GAAG,EAAC;AAAA,IACnE;AACA,IAAAF,EAAE,MAAM,KAAK,IAAIC,GAAG,EAAE;AACtB,UAAM,IAAoB,oBAAI,IAAG,GAAIE,IAAI,EAAE,OAAO,KAAKA,KAAK,OAAO,SAASA,EAAE,WAAW,CAAA;AACzF,eAAWC,KAAK,GAAG;AACjB,MAAAV,EAAE,KAAKU,CAAC;AACR,YAAM,EAAE,KAAKF,GAAG,MAAMsB,GAAG,QAAQE,GAAG,OAAOE,EAAC,IAAK8B,GAAGtD,CAAC,GAAGyB,IAAIH,IAAIxB,GAAG4B,IAAIF,IAAIJ;AAC3E,QAAE,IAAI,GAAGtB,IAAI,CAAC,IAAIsB,IAAI,CAAC,IAAI,CAACK,GAAGC,CAAC,CAAC;AAAA,IACnC;AACA,MAAE,QAAQ,EAAE,cAAc,GAAE,GAAI,CAAC1B,GAAGF,MAAM;AACxC,YAAMsB,IAAItB,IAAI,GAAGwB,IAAI,CAAA;AACrB,MAAAtB,EAAE,SAAS,EAAE,cAAc,GAAE,GAAI,CAACyB,GAAGC,MAAM;AACzC,cAAMC,IAAID,IAAI;AACd,YAAID,EAAE,YAAYA,EAAE,WAAWA,EAAG;AAClC,cAAMF,IAAI8B,GAAG5B,CAAC,GAAGO,IAAIoB,GAAG3B,GAAG,GAAGtC,CAAC,GAAG2C,IAAI,EAAE,MAAMP,EAAC;AAC/C,QAAAS,MAAM,OAAOF,EAAE,QAAQE;AACvB,cAAMD,IAAI,GAAGX,CAAC,IAAIO,CAAC;AACnB,UAAE,IAAII,CAAC,MAAMD,EAAE,QAAQ,EAAE,IAAIC,CAAC,IAAIT,EAAE,OAAOK,CAAC,CAAC,IAAIG;AAAA,MACnD,CAAC;AACD,YAAMN,IAAI,EAAE,OAAOF,EAAC;AACpB,MAAAtB,EAAE,WAAWwB,EAAE,SAAS,KAAK,MAAMxB,EAAE,SAAS,KAAK,IAAI,EAAE,OAAOoB,CAAC,CAAC,IAAII;AAAA,IACxE,CAAC,GAAG,EAAE,KAAK;AAAA,MACT,MAAM,EAAE;AAAA,MACR,QAAQ;AAAA,MACR,QAAQlC;AAAA,MACR,MAAM;AAAA,MACN,MAAMM;AAAA,IACZ,CAAK;AAAA,EACH,CAAC,GAAG;AACN;AACA,SAAS6D,GAAG,GAAG,GAAG,IAAI,UAAU;AAC9B,QAAM,IAAI,EAAE,SAAS,GAAG,IAAI,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,GAAE,EAAE,CAAE,IAAI,CAAA,GAAI3C,IAAI,CAAA;AACnE,MAAI,GAAG;AACL,UAAM,IAAI,CAAA;AACV,MAAE,QAAQ,CAACC,GAAGhB,MAAM;AAClB,QAAE,OAAOA,CAAC,CAAC,IAAI,EAAE,MAAMgB,GAAG,OAAO,EAAC;AAAA,IACpC,CAAC,GAAGD,EAAE,CAAC,IAAI,EAAE,OAAO,EAAC;AAAA,EACvB;AACA,QAAMlB,IAAI,IAAI,IAAI;AAClB,SAAO,EAAE,QAAQ,CAAC,GAAGmB,MAAM;AACzB,UAAMhB,IAAI,CAAA;AACV,MAAE,QAAQ,CAACiB,GAAGhB,MAAM;AAClB,MAAAgB,MAAM,UAAUA,MAAM,OAAOjB,EAAE,OAAOC,CAAC,CAAC,IAAI,EAAE,MAAMgB,EAAC;AAAA,IACvD,CAAC,GAAGF,EAAE,OAAOC,IAAInB,CAAC,CAAC,IAAI,EAAE,OAAOG,EAAC;AAAA,EACnC,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,MAAMe,GAAG;AACtC;AACA,SAAS4C,GAAG,GAAG,GAAG;AAChB,MAAI5C;AACJ,MAAI,OAAO,SAAS,IAAK;AACzB,QAAM1B,KAAK,KAAK,OAAO,SAAS,EAAE,cAAc0B,IAAI,KAAK,OAAO,SAAS,EAAE,wBAAwB,OAAO,SAASA,EAAE,YAAY,IAAI;AAAA,IACnI,WAAWjC,IAAI,gCAAgCO,CAAC;AAAA,IAChD,SAAS,IAAI,gCAAgCA,CAAC;AAAA,IAC9C,YAAYE,IAAI;AAAA,EACpB,IAAM,KAAK,CAAA;AACT,IAAE,wBAAwB,EAAE,oBAAoB,YAAYT,GAAG,EAAE,oBAAoB,UAAU,GAAG,EAAE,oBAAoB,aAAaS;AACvI;AACA,MAAMqE,KAAK;AAAA;AAAA,EAET,mBAAmB;AAAA,EACnB,gBAAgB;AAAA,EAChB,kBAAkB;AAAA,EAClB,wBAAwB;AAAA,EACxB,8BAA8B;AAAA,EAC9B,gBAAgB;AAAA;AAAA,EAEhB,8BAA8B;AAAA,EAC9B,0BAA0B;AAAA,EAC1B,8BAA8B;AAAA,EAC9B,8BAA8B;AAAA;AAAA,EAE9B,mBAAmB;AAAA,EACnB,oBAAoB;AAAA,EACpB,uBAAuB;AAAA,EACvB,wBAAwB;AAAA,EACxB,iBAAiB;AAAA,EACjB,yBAAyB;AAAA,EACzB,yBAAyB;AAAA,EACzB,eAAe;AAAA,EACf,mBAAmB;AAAA,EACnB,qBAAqB;AAAA,EACrB,qBAAqB;AAAA,EACrB,sBAAsB;AAAA,EACtB,wBAAwB;AAAA,EACxB,mBAAmB;AAAA,EACnB,oBAAoB;AAAA,EACpB,kBAAkB;AAAA,EAClB,mBAAmB;AAAA;AAAA,EAEnB,qBAAqB;AAAA,EACrB,uBAAuB;AAAA;AAAA,EAEvB,mBAAmB;AAAA;AAAA,EAEnB,qBAAqB;AAAA;AAAA,EAErB,gBAAgB;AAAA,EAChB,oBAAoB;AAAA,EACpB,qBAAqB;AAAA,EACrB,kBAAkB;AAAA;AAAA,EAElB,gBAAgB;AAAA,EAChB,oBAAoB;AAAA,EACpB,qBAAqB;AAAA,EACrB,kBAAkB;AAAA,EAClB,uBAAuB;AAAA,EACvB,iBAAiB;AAAA,EACjB,gBAAgB;AAAA;AAAA,EAEhB,oBAAoB;AAAA,EACpB,0BAA0B;AAAA,EAC1B,kBAAkB;AAAA;AAAA,EAElB,oBAAoB;AAAA;AAAA,EAEpB,oBAAoB;AAAA;AAAA,EAEpB,iBAAiB;AAAA,EACjB,qBAAqB;AAAA,EACrB,gCAAgC;AAAA,EAChC,8BAA8B;AAAA,EAC9B,2BAA2B;AAAA,EAC3B,4BAA4B;AAAA,EAC5B,oCAAoC;AAAA;AAAA,EAEpC,mBAAmB;AAAA,EACnB,oBAAoB;AAAA,EACpB,yBAAyB;AAAA,EACzB,0BAA0B;AAAA,EAC1B,mBAAmB;AAAA,EACnB,qBAAqB;AAAA,EACrB,sBAAsB;AAAA,EACtB,uBAAuB;AAAA,EACvB,uBAAuB;AAAA,EACvB,qBAAqB;AAAA;AAAA,EAErB,wBAAwB;AAAA,EACxB,sBAAsB;AAAA,EACtB,mBAAmB;AAAA;AAAA,EAEnB,oBAAoB;AAAA,EACpB,cAAc;AAAA,EACd,aAAa;AAAA;AAAA,EAEb,eAAe;AAAA,EACf,mBAAmB;AAAA,EACnB,oBAAoB;AAAA;AAAA,EAEpB,mBAAmB;AAAA;AAAA,EAEnB,wBAAwB;AAAA,EACxB,yBAAyB;AAAA,EACzB,kBAAkB;AAAA,EAClB,iBAAiB;AAAA,EACjB,uBAAuB;AAAA,EACvB,wBAAwB;AAAA,EACxB,uBAAuB;AAAA,EACvB,wBAAwB;AAAA,EACxB,oBAAoB;AAAA,EACpB,wBAAwB;AAAA,EACxB,wBAAwB;AAAA,EACxB,wBAAwB;AAAA,EACxB,yBAAyB;AAAA;AAAA,EAEzB,mBAAmB;AAAA,EACnB,oBAAoB;AAAA;AAAA,EAEpB,oBAAoB;AAAA;AAAA,EAEpB,gBAAgB;AAAA,EAChB,oBAAoB;AAAA,EACpB,qBAAqB;AAAA,EACrB,yBAAyB;AAAA,EACzB,6BAA6B;AAAA,EAC7B,oBAAoB;AAAA,EACpB,uBAAuB;AAAA,EACvB,qBAAqB;AAAA,EACrB,sBAAsB;AAAA,EACtB,oBAAoB;AAAA,EACpB,oBAAoB;AAAA,EACpB,gCAAgC;AAClC,GAAGC,KAAK;AAAA;AAAA,EAEN,mBAAmB;AAAA,EACnB,gBAAgB;AAAA,EAChB,kBAAkB;AAAA,EAClB,wBAAwB;AAAA,EACxB,8BAA8B;AAAA,EAC9B,gBAAgB;AAAA;AAAA,EAEhB,8BAA8B;AAAA,EAC9B,0BAA0B;AAAA,EAC1B,8BAA8B;AAAA,EAC9B,8BAA8B;AAAA;AAAA,EAE9B,mBAAmB;AAAA,EACnB,oBAAoB;AAAA,EACpB,uBAAuB;AAAA,EACvB,wBAAwB;AAAA,EACxB,iBAAiB;AAAA,EACjB,yBAAyB;AAAA,EACzB,yBAAyB;AAAA,EACzB,eAAe;AAAA,EACf,mBAAmB;AAAA,EACnB,qBAAqB;AAAA,EACrB,qBAAqB;AAAA,EACrB,sBAAsB;AAAA,EACtB,wBAAwB;AAAA,EACxB,mBAAmB;AAAA,EACnB,oBAAoB;AAAA,EACpB,kBAAkB;AAAA,EAClB,mBAAmB;AAAA;AAAA,EAEnB,qBAAqB;AAAA,EACrB,uBAAuB;AAAA;AAAA,EAEvB,mBAAmB;AAAA;AAAA,EAEnB,qBAAqB;AAAA;AAAA,EAErB,gBAAgB;AAAA,EAChB,oBAAoB;AAAA,EACpB,qBAAqB;AAAA,EACrB,kBAAkB;AAAA;AAAA,EAElB,gBAAgB;AAAA,EAChB,oBAAoB;AAAA,EACpB,qBAAqB;AAAA,EACrB,kBAAkB;AAAA,EAClB,uBAAuB;AAAA,EACvB,iBAAiB;AAAA,EACjB,gBAAgB;AAAA;AAAA,EAEhB,oBAAoB;AAAA,EACpB,0BAA0B;AAAA,EAC1B,kBAAkB;AAAA;AAAA,EAElB,oBAAoB;AAAA;AAAA,EAEpB,oBAAoB;AAAA;AAAA,EAEpB,iBAAiB;AAAA,EACjB,qBAAqB;AAAA,EACrB,gCAAgC;AAAA,EAChC,8BAA8B;AAAA,EAC9B,2BAA2B;AAAA,EAC3B,4BAA4B;AAAA,EAC5B,oCAAoC;AAAA;AAAA,EAEpC,mBAAmB;AAAA,EACnB,oBAAoB;AAAA,EACpB,yBAAyB;AAAA,EACzB,0BAA0B;AAAA,EAC1B,mBAAmB;AAAA,EACnB,qBAAqB;AAAA,EACrB,sBAAsB;AAAA,EACtB,uBAAuB;AAAA,EACvB,uBAAuB;AAAA,EACvB,qBAAqB;AAAA;AAAA,EAErB,wBAAwB;AAAA,EACxB,sBAAsB;AAAA,EACtB,mBAAmB;AAAA;AAAA,EAEnB,oBAAoB;AAAA,EACpB,cAAc;AAAA,EACd,aAAa;AAAA;AAAA,EAEb,eAAe;AAAA,EACf,mBAAmB;AAAA,EACnB,oBAAoB;AAAA;AAAA,EAEpB,mBAAmB;AAAA;AAAA,EAEnB,wBAAwB;AAAA,EACxB,yBAAyB;AAAA,EACzB,kBAAkB;AAAA,EAClB,iBAAiB;AAAA,EACjB,uBAAuB;AAAA,EACvB,wBAAwB;AAAA,EACxB,uBAAuB;AAAA,EACvB,wBAAwB;AAAA,EACxB,oBAAoB;AAAA,EACpB,wBAAwB;AAAA,EACxB,wBAAwB;AAAA,EACxB,wBAAwB;AAAA,EACxB,yBAAyB;AAAA;AAAA,EAEzB,mBAAmB;AAAA,EACnB,oBAAoB;AAAA;AAAA,EAEpB,oBAAoB;AAAA;AAAA,EAEpB,gBAAgB;AAAA,EAChB,oBAAoB;AAAA,EACpB,qBAAqB;AAAA,EACrB,yBAAyB;AAAA,EACzB,6BAA6B;AAAA,EAC7B,oBAAoB;AAAA,EACpB,uBAAuB;AAAA,EACvB,qBAAqB;AAAA,EACrB,sBAAsB;AAAA,EACtB,oBAAoB;AAAA,EACpB,oBAAoB;AAAA,EACpB,gCAAgC;AAClC,GAAGC,IAAI;AAAA,EACL,SAASF;AAAA,EACT,SAASC;AACX,GAAGE,KAAK;AACR,SAASC,GAAG,GAAG,GAAG;AAChB,SAAO,IAAI,EAAE,QAAQD,IAAI,CAAC,GAAG,MAAM;AACjC,UAAM3E,IAAI,EAAE,CAAC;AACb,WAAOA,MAAM,SAAS,IAAI,CAAC,MAAM,OAAOA,CAAC;AAAA,EAC3C,CAAC,IAAI;AACP;AACA,SAAS6E,GAAG,GAAG;AACb,MAAIlD;AACJ,QAAM/B,IAAI,EAAE,kBAAkB,SAASK,IAAIyE,EAAE,EAAE,MAAM,KAAKA,EAAE9E,CAAC,KAAK8E,EAAE,OAAO,GAAGhF,KAAKiC,IAAI,EAAE,aAAa,OAAO,SAASA,EAAE,EAAE,MAAM,GAAG,IAAIjC,IAAI,EAAE,GAAGO,GAAG,GAAGP,EAAC,IAAKO,GAAGE,IAAIuE,EAAE,OAAO;AAC5K,SAAO,CAACjE,GAAGC,MAAM;AACf,UAAM,IAAI,EAAED,CAAC,KAAKN,EAAEM,CAAC,KAAKA;AAC1B,WAAOmE,GAAG,GAAGlE,CAAC;AAAA,EAChB;AACF;AACA,MAAMoE,KAAK;AAAA;AAAA,EAET,KAAK;AAAA,EACL,MAAM;AAAA,EACN,KAAK;AAAA,EACL,KAAK;AAAA,EACL,MAAM;AAAA,EACN,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA;AAAA,EAEL,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,KAAK;AAAA,EACL,MAAM;AAAA;AAAA,EAEN,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA;AAAA,EAEL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA;AAAA,EAEL,KAAK;AAAA,EACL,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,KAAK;AAAA;AAAA,EAEL,KAAK;AAAA,EACL,MAAM;AAAA,EACN,MAAM;AAAA,EACN,KAAK;AAAA,EACL,MAAM;AAAA,EACN,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,MAAM;AAAA,EACN,IAAI;AAAA,EACJ,UAAU;AAAA,EACV,KAAK;AAAA,EACL,KAAK;AAAA;AAAA,EAEL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,MAAM;AAAA,EACN,OAAO;AAAA;AAAA,EAEP,KAAK;AAAA,EACL,MAAM;AAAA,EACN,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,OAAO;AAAA,EACP,KAAK;AAAA;AAAA,EAEL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,MAAM;AAAA,EACN,KAAK;AAAA;AAAA,EAEL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,MAAM;AAAA,EACN,KAAK;AAAA,EACL,KAAK;AAAA,EACL,MAAM;AAAA,EACN,MAAM;AACR;AACA,SAASC,GAAG,GAAG;AACb,QAAM,IAAI,EAAE,YAAW;AACvB,SAAOD,GAAG,CAAC,KAAK;AAClB;AACA,SAASE,GAAG,GAAG;AACb,MAAI/E;AACJ,QAAML,MAAMK,IAAI,EAAE,MAAM,GAAG,EAAE,IAAG,MAAO,OAAO,SAASA,EAAE,YAAW,MAAO;AAC3E,SAAO8E,GAAGnF,CAAC;AACb;AACA,SAASqF,GAAG,GAAG;AACb,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ,EAAI,SAAS,CAAC;AACd;AAIK,MAAgCC,KAAoB,oBAAI,IAAG;AAUhE,eAAeC,GAAG,GAAG;AACnB,MAAID,GAAE,IAAI,CAAC;AACT,WAAOA,GAAE,IAAI,CAAC;AAChB,MAAI,CAACD,GAAG,CAAC;AACP,WAAO;AACT,MAAI;AACF,QAAI,IAAI;AACR,WAAO,MAAM,gBAAgB,MAAM,eAAe,KAAK,MAAM,OAAO,oCAA0B,GAAG,UAAU,MAAM,eAAe,KAAK,MAAM,OAAO,oCAA0B,GAAG,UAAU,MAAM,eAAe,KAAK,MAAM,OAAO,oCAA0B,GAAG,UAAU,MAAM,uBAAuB,MAAM,uBAAuB,MAAM,sBAAsB,MAAM,uBAAuB,MAAM,sBAAsB,MAAM,wBAAwB,KAAK,MAAM,OAAO,mCAAyB,GAAG,UAAU,MAAM,8BAA8B,KAAK,MAAM,OAAO,mCAAyB,GAAG,WAAW,MAAM,eAAe,MAAM,iBAAiB,KAAK,MAAM,OAAO,mCAAyB,GAAG,UAAU,KAAKC,GAAE,IAAI,GAAG,CAAC,GAAG;AAAA,EACjsB,SAAS,GAAG;AACV,WAAO,QAAQ,KAAK,oCAAoC,CAAC,KAAK,CAAC,GAAG;AAAA,EACpE;AACF;AACA,eAAeE,GAAG,GAAG;AACnB,MAAI,EAAE,QAAQ,EAAE,SAAS;AACvB,WAAO,EAAE;AACX,QAAM,IAAIJ,GAAG,EAAE,IAAI;AACnB,MAAI,MAAM;AACR,WAAO;AACT,MAAI,aAAa,QAAQ,aAAa,MAAM;AAC1C,UAAM,IAAI,MAAMK,GAAG,CAAC;AACpB,QAAI,MAAM;AACR,aAAO;AAAA,EACX;AACA,SAAO;AACT;AACA,eAAeA,GAAG,GAAG;AACnB,MAAI;AACF,UAAM,IAAI,IAAI,WAAW,MAAM,EAAE,MAAM,GAAG,EAAE,EAAE,aAAa;AAC3D,QAAI,EAAE,CAAC,MAAM,OAAO,EAAE,CAAC,MAAM,OAAO,EAAE,CAAC,MAAM,OAAO,EAAE,CAAC,MAAM,KAAK;AAChE,YAAM,IAAI,OAAO,aAAa,GAAG,EAAE,MAAM,GAAG,EAAE,CAAC;AAC/C,UAAI,MAAM,UAAU,MAAM,UAAU,MAAM;AACxC,eAAO;AAAA,IACX;AACA,QAAI,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM;AAClH,aAAO;AACT,QAAI,EAAE,CAAC,MAAM,OAAO,EAAE,CAAC,MAAM,OAAO,EAAE,CAAC,MAAM,OAAO,EAAE,CAAC,MAAM,OAAO,OAAO,aAAa,GAAG,EAAE,MAAM,GAAG,EAAE,CAAC,MAAM;AAC7G,aAAO;AACT,QAAI,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM;AACxD,aAAO;AACT,QAAI,EAAE,CAAC,MAAM,OAAO,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,OAAO,EAAE,CAAC,MAAM;AAC1D,aAAO;AAAA,EACX,SAAS,GAAG;AACV,YAAQ,KAAK,kDAAkD,CAAC;AAAA,EAClE;AACA,SAAO;AACT;ACp9CO,MAAMC,KAA4C,OAAO,qBAAqB;ACD9E,SAASC,GACdC,GACAC,GACM;AACN,QAAMC,IAAYC,EAAiB,MAAMC,EAAMJ,CAAM,KAAK,OAAO,GAC3D5F,IAAI+F;AAAA,IAAqB,MAC7BE,GAAiB,EAAE,QAAQH,EAAU,OAAO,UAAUE,EAAMH,CAAQ,EAAA,CAAG;AAAA,EAAA;AAEzE,EAAAK,GAAQR,IAAY,EAAE,QAAQI,GAA0B,GAAA9F,GAAG;AAC7D;AAGA,IAAImG,KAA+B;AACnC,SAASC,KAA0B;AACjC,SAAKD,OAAWA,KAAYF,GAAiB,EAAE,QAAQ,SAAS,IACzDE;AACT;AAKO,SAASE,KAAqE;AACnF,QAAMC,IAAWC,GAA+Bb,IAAY,IAAI;AAChE,MAAIY,EAAU,QAAOA;AAErB,QAAMV,IAASG,EAAiB,MAAM,OAAO,GACvC/F,IAAI+F,EAAqB,MAAMK,IAAa;AAClD,SAAO,EAAE,QAAAR,GAA+B,GAAA5F,EAAA;AAC1C;AC/BA,MAAMwG,KAAsD,OAAO,oBAAoB;AAKhF,SAASC,GAAqBC,GAAsC;AACzE,QAAMC,IAAWZ,EAAwB,MAAMC,EAAMU,CAAK,CAAC;AAC3D,EAAAR,GAAQM,IAAWG,CAAQ;AAC7B;AASO,SAASC,KAA+C;AAC7D,QAAMN,IAAWC,GAAOC,IAAW,IAAI;AACvC,SAAIF,KACGP,EAAwB,MAAM,MAAM;AAC7C;ACVA,MAAMc,KAAc,OAAO,sBAAsB;AAE1C,SAASC,GACdC,GASA;AACA,QAAMC,IAAQjB,EAA8B,MAAM;AAChD,UAAMkB,IAAO,OAAOF,KAAY,aAAaA,MAAYA;AACzD,WAAO;AAAA,MACL,SAASG,GAAc;AAAA,QACrB,aAAaD,EAAK;AAAA,QAClB,gBAAgBA,EAAK;AAAA,MAAA,CACtB;AAAA,MACD,mBAAmBA,EAAK;AAAA,IAAA;AAAA,EAE5B,CAAC;AACD,SAAAf,GAAQW,IAAaG,CAAK,GACnBA;AACT;AAEA,SAASG,KAAsC;AAC7C,SAAO,EAAE,SAAS,CAACC,GAAKC,MAAS,MAAMD,GAAKC,CAAI,EAAA;AAClD;AAEO,SAASC,KAAsD;AACpE,QAAMhB,IAAWC,GAAqDM,IAAa,MAAS;AAC5F,SAAIP,KACGP,EAAS,MAAMoB,IAAgB;AACxC;AAEO,SAASI,KAAmC;AACjD,QAAMC,IAAMF,GAAA;AACZ,SAAOvB,EAAS,MAAMyB,EAAI,MAAM,OAAO;AACzC;AAOO,SAASC,GAAeC,GAAyD;AACtF,QAAMF,IAAMF,GAAA,GACNK,IAAaC,EAAY,EAAE;AACjC,MAAIC,IAAgC;AAEpC,QAAMC,IAAU,MAAM;AACpB,IAAID,MACF,IAAI,gBAAgBA,CAAc,GAClCA,IAAiB;AAAA,EAErB;AAEA,SAAAE;AAAA,IACE,MAAM;;AACJ,YAAM9G,IAAIyG,EAAK,OACTM,IAAO,CAAC,EAAE/G,OAAKgH,KAAAC,IAAAV,EAAI,OAAM,sBAAV,QAAAS,EAAA,KAAAC,GAA8BjH;AACnD,aAAO,EAAE,GAAAA,GAAG,MAAA+G,GAAM,SAASR,EAAI,MAAM,QAAA;AAAA,IACvC;AAAA,IACA,OAAO,EAAE,GAAAvG,GAAG,MAAA+G,GAAM,SAAAG,EAAA,GAAWC,GAAMC,MAAc;AAC/C,UAAI,CAACpH,KAAK,CAAC+G,GAAM;AACf,QAAAF,EAAA,GACAH,EAAW,QAAQ;AACnB;AAAA,MACF;AACA,UAAIW,IAAY;AAChB,MAAAD,EAAU,MAAM;AACd,QAAAC,IAAY;AAAA,MACd,CAAC,GACDX,EAAW,QAAQ;AACnB,UAAI;AACF,cAAMY,IAAU,MAAMC,GAAevH,EAAE,KAAKkH,CAAO;AACnD,YAAIG,GAAW;AACb,cAAI,gBAAgBC,CAAO;AAC3B;AAAA,QACF;AACA,QAAAT,EAAA,GACAD,IAAiBU,GACjBZ,EAAW,QAAQY;AAAA,MACrB,SAASE,GAAK;AACZ,QAAKH,MACH,QAAQ,MAAM,2CAA2CG,CAAG,GAC5Dd,EAAW,QAAQ1G,EAAE;AAAA,MAEzB;AAAA,IACF;AAAA,IACA,EAAE,WAAW,GAAA;AAAA,EAAK,GAGpByH,EAAgBZ,CAAO,GAGhB/B,EAAS,MAAM;;AACpB,UAAM9E,IAAIyG,EAAK;AACf,WAAKzG,IACS,GAACgH,KAAAC,IAAAV,EAAI,OAAM,sBAAV,QAAAS,EAAA,KAAAC,GAA8BjH,MAC3BA,EAAE,MACb0G,EAAW,QAHH;AAAA,EAIjB,CAAC;AACH;;;;ACtHA,UAAM,EAAE,EAAA,IAAMtB,GAAA;sBAIZsC,EAAA,GAAAC,EAKM,OALNC,IAKM;AAAA,MAJJC,EAGM,OAHNC,IAGM;AAAA,wBAFJD,EAA2H,OAAA,EAAtH,OAAM,8GAAA,GAA6G,MAAA,EAAA;AAAA,QACxHA,EAA0E,QAA1EE,IAA0EC,EAA7CC,EAAA,CAAA,EAAC,gBAAA,KAAA,YAAA,GAAA,CAAA;AAAA,MAAA;;;ICF9BC,IAAO,CAACC,MACZC,GAAqB;AAAA,EACnB,QAAAD;AAAA,EACA,kBAAkB,EAAE,QAAQ,MAAM3G,GAAE6G,EAAe,EAAA;AAAA,EACnD,OAAO;AACT,CAAC,GAEUC,KAAgBJ,EAAK,MAAM,OAAO,sBAAmB,CAAC,GACtDK,KAAcL,EAAK,MAAM,OAAO,sBAAiB,CAAC,GAClDM,KAAeN,EAAK,MAAM,OAAO,sBAAkB,CAAC,GACpDO,KAAeP,EAAK,MAAM,OAAO,sBAAkB,CAAC,GACpDQ,KAAeR,EAAK,MAAM,OAAO,sBAAkB,CAAC,GACpDS,KAAcT,EAAK,MAAM,OAAO,sBAAiB,CAAC,GAClDU,KAAeV,EAAK,MAAM,OAAO,sBAAkB,CAAC,GACpDW,KAAeX,EAAK,MAAM,OAAO,sBAAkB,CAAC,GACpDY,KAAgBZ,EAAK,MAAM,OAAO,sBAAmB,CAAC,GACtDa,KAAgBb,EAAK,MAAM,OAAO,sBAAmB,CAAC,GACtDc,KAAmBd,EAAK,MAAM,OAAO,sBAAsB,CAAC,GAC5De,KAAef,EAAK,MAAM,OAAO,sBAAkB,CAAC,GACpDgB,KAAchB,EAAK,MAAM,OAAO,sBAAiB,CAAC,GAClDiB,KAAcjB,EAAK,MAAM,OAAO,sBAAiB,CAAC,GAClDkB,KAAmBlB,EAAK,MAAM,OAAO,sBAAsB,CAAC,GAC5DmB,KAAcnB,EAAK,MAAM,OAAO,sBAAiB,CAAC,GAClDoB,KAAepB,EAAK,MAAM,OAAO,sBAAkB,CAAC,GACpDqB,KAAerB,EAAK,MAAM,OAAO,sBAAkB,CAAC,GC0BpDsB,KAA6C;AAAA,EACxD;AAAA,IACE,UAAU;AAAA,IACV,WAAWlB;AAAA,IACX,UAAU,CAAC/B,OAAS;AAAA,MAClB,KAAKA,EAAI;AAAA,MACT,UAAUA,EAAI,YAAY;AAAA,MAC1B,MAAMA,EAAI;AAAA,IAAA;AAAA,EACZ;AAAA,EAEF;AAAA,IACE,UAAU;AAAA,IACV,WAAWgC;AAAA,IACX,UAAU,CAAChC,OAAS;AAAA,MAClB,KAAKA,EAAI;AAAA,IAAA;AAAA,EACX;AAAA,EAEF;AAAA,IACE,UAAU;AAAA,IACV,WAAWiC;AAAA,IACX,UAAU,CAACjC,OAAS;AAAA,MAClB,KAAKA,EAAI;AAAA,IAAA;AAAA,EACX;AAAA,EAEF;AAAA,IACE,UAAU;AAAA,IACV,WAAWkC;AAAA,IACX,UAAU,CAAClC,OAAS;AAAA,MAClB,KAAKA,EAAI;AAAA,IAAA;AAAA,EACX;AAAA,EAEF;AAAA,IACE,UAAU;AAAA,IACV,WAAWmC;AAAA,IACX,UAAU,CAACnC,OAAS;AAAA,MAClB,KAAKA,EAAI;AAAA,IAAA;AAAA,EACX;AAAA,EAEF;AAAA,IACE,UAAU;AAAA,IACV,WAAWoC;AAAA,IACX,UAAU,CAACpC,OAAS;AAAA,MAClB,KAAKA,EAAI;AAAA,IAAA;AAAA,EACX;AAAA,EAEF;AAAA,IACE,UAAU;AAAA,IACV,WAAWqC;AAAA,IACX,UAAU,CAACrC,OAAS;AAAA,MAClB,KAAKA,EAAI;AAAA,IAAA;AAAA,EACX;AAAA,EAEF;AAAA,IACE,UAAU;AAAA,IACV,WAAWsC;AAAA,IACX,UAAU,CAACtC,OAAS;AAAA,MAClB,KAAKA,EAAI;AAAA,IAAA;AAAA,EACX;AAAA,EAEF;AAAA,IACE,UAAU;AAAA,IACV,WAAWuC;AAAA,IACX,UAAU,CAACvC,OAAS;AAAA,MAClB,KAAKA,EAAI;AAAA,MACT,UAAUA,EAAI,YAAY;AAAA,IAAA;AAAA,EAC5B;AAAA,EAEF;AAAA,IACE,UAAU;AAAA,IACV,WAAWwC;AAAA,IACX,UAAU,CAACxC,OAAS;AAAA,MAClB,KAAKA,EAAI;AAAA,MACT,UAAUA,EAAI,YAAY;AAAA,IAAA;AAAA,EAC5B;AAAA,EAEF;AAAA,IACE,UAAU;AAAA,IACV,WAAWyC;AAAA,IACX,UAAU,CAACzC,OAAS;AAAA,MAClB,KAAKA,EAAI;AAAA,IAAA;AAAA,EACX;AAAA,EAEF;AAAA,IACE,UAAU;AAAA,IACV,WAAW0C;AAAA,IACX,UAAU,CAAC1C,OAAS;AAAA,MAClB,KAAKA,EAAI;AAAA,MACT,UAAUA,EAAI,YAAY;AAAA,IAAA;AAAA,EAC5B;AAAA,EAEF;AAAA,IACE,UAAU;AAAA,IACV,WAAW2C;AAAA,IACX,UAAU,CAAC3C,OAAS;AAAA,MAClB,KAAKA,EAAI;AAAA,MACT,UAAUA,EAAI,YAAY;AAAA,IAAA;AAAA,EAC5B;AAAA,EAEF;AAAA,IACE,UAAU;AAAA,IACV,WAAW4C;AAAA,IACX,UAAU,CAAC5C,OAAS;AAAA,MAClB,KAAKA,EAAI;AAAA,MACT,UAAUA,EAAI,YAAY;AAAA,IAAA;AAAA,EAC5B;AAAA,EAEF;AAAA,IACE,UAAU;AAAA,IACV,WAAW6C;AAAA,IACX,UAAU,CAAC7C,OAAS;AAAA,MAClB,KAAKA,EAAI;AAAA,MACT,UAAUA,EAAI,YAAY;AAAA,IAAA;AAAA,EAC5B;AAAA,EAEF;AAAA,IACE,UAAU;AAAA,IACV,WAAW8C;AAAA,IACX,UAAU,CAAC9C,OAAS;AAAA,MAClB,KAAKA,EAAI;AAAA,MACT,cAAcA,EAAI;AAAA,IAAA;AAAA,EACpB;AAAA,EAEF;AAAA,IACE,UAAU;AAAA,IACV,WAAW+C;AAAA,IACX,UAAU,CAAC/C,OAAS;AAAA,MAClB,KAAKA,EAAI;AAAA,MACT,UAAUA,EAAI,YAAY;AAAA,IAAA;AAAA,EAC5B;AAAA,EAEF;AAAA,IACE,UAAU;AAAA,IACV,WAAWgD;AAAA,IACX,UAAU,CAAChD,OAAS;AAAA,MAClB,KAAKA,EAAI;AAAA,IAAA;AAAA,EACX;AAEJ;;;;;;;;ACtLA,UAAM,EAAE,GAAAxH,EAAA,IAAMqG,GAAA,GAERqE,IAAOC;AAMb,WAAAC,EAA6B;AAAA,MAC3B,kBAHuB,MAAsB,CAAA;AAAA,IAG7C,CACD,cAKCjC,EAAA,GAAAC,EAqBM,OArBNC,IAqBM;AAAA,MAlBJC,EAIM,OAJNC,IAIM;AAAA,QADJ8B,EAAgE3B,EAAA4B,EAAA,GAAA,EAAlD,OAAM,2CAAyC;AAAA,MAAA;MAG/DhC,EAGM,OAHNE,IAGM;AAAA,QAFJF,EAAkE,KAAlEiC,IAAkE9B,EAAf+B,EAAA,QAAQ,GAAA,CAAA;AAAA,QAC3DlC,EAA8F,KAA9FmC,IAA8FhC,EAA1DC,EAAAlJ,CAAA,wCAAwCgL,EAAA,SAAA,CAAQ,CAAA,GAAA,CAAA;AAAA,MAAA;MAGtFlC,EAMS,UAAA;AAAA,QALP,OAAM;AAAA,QACL,gCAAO4B,EAAI,UAAA;AAAA,MAAA;QAEZG,EAAoC3B,EAAAgC,EAAA,GAAA,EAA1B,OAAM,mBAAiB;AAAA,QAAGC,GAAA,QACjCjC,EAAAlJ,CAAA,EAAC,iBAAA,CAAA,GAAA,CAAA;AAAA,MAAA;;;IC9BJoL,KAAiB;;;;;;;;;;AAHvB,UAAMC,IAAQL,GACRN,IAAOC,GAGPW,IAAU1D,EAAI,EAAI;AACxB,QAAI2D,IAA2B;AAE/B,UAAMC,IAAe,MAAM;AACzB,MAAID,MAAc,QAAM,aAAaA,CAAS,GAC9CA,IAAY,OAAO,WAAW,MAAM;AAClC,QAAAD,EAAQ,QAAQ;AAAA,MAClB,GAAGF,EAAc;AAAA,IACnB,GAEMK,IAAO,MAAM;AACjB,MAAKH,EAAQ,UAAOA,EAAQ,QAAQ,KACpCE,EAAA;AAAA,IACF;AAEA,QAAIE,IAAkC;AACtC,UAAMC,IAAS,MAAM;AACnB,MAAID,MACFA,EAAS,oBAAoB,aAAaD,CAAI,GAC9CC,IAAW;AAAA,IAEf,GACME,IAAS,CAACC,MAA8B;AAC5C,MAAIH,MAAaG,MACjBF,EAAA,GACIE,MACFA,EAAG,iBAAiB,aAAaJ,CAAI,GACrCC,IAAWG;AAAA,IAEf;AAEA,WAAA9D,EAAM,MAAMsD,EAAM,cAAc,CAACQ,MAAOD,EAAOC,CAAE,GAAG,EAAE,WAAW,IAAM,GACvE9D,EAAM,MAAMsD,EAAM,UAAU,MAAM;AAChC,MAAAC,EAAQ,QAAQ,IAChBE,EAAA;AAAA,IACF,CAAC,GAEDM,GAAU,MAAM;AACd,MAAAN,EAAA;AAAA,IACF,CAAC,GAED9C,EAAgB,MAAM;AACpB,MAAI6C,MAAc,QAAM,aAAaA,CAAS,GAC9CI,EAAA;AAAA,IACF,CAAC;MAKSX,EAAA,gBADRpC,EAaS,UAAA;AAAA;QAXN,OAAKmD,EAAA;AAAA,mBAAmBT,EAAA,QAAO,IAAA;AAAA,qBAA2BA,EAAA,QAAO,qBAAA;AAAA,yBAAmFA,EAAA,QAAO,SAAA;AAAA;;QAM5J,OAAM;AAAA,QACL,gCAAOZ,EAAI,MAAA;AAAA,QACX,cAAYe;AAAA,MAAA;QAEbZ,EAA6D3B,EAAA8C,EAAA,GAAA,EAAhD,OAAM,yCAAuC;AAAA,MAAA;MAIpDhB,EAAA,gBADRpC,EAaS,UAAA;AAAA;QAXN,OAAKmD,EAAA;AAAA,mBAAmBT,EAAA,QAAO,IAAA;AAAA,qBAA2BA,EAAA,QAAO,qBAAA;AAAA,yBAAkFA,EAAA,QAAO,SAAA;AAAA;;QAM3J,OAAM;AAAA,QACL,gCAAOZ,EAAI,MAAA;AAAA,QACX,cAAYe;AAAA,MAAA;QAEbZ,EAA8D3B,EAAA+C,EAAA,GAAA,EAAhD,OAAM,yCAAuC;AAAA,MAAA;;;;;;;;;;;;;iEChEzDC,KAAwB;;;;;;;;;;;;;;;;;;;;;AAgC9B,UAAMb,IAAQL;AAgBd,IAAAlE,GAAsB,OAAO;AAAA,MAC3B,aAAauE,EAAM;AAAA,MACnB,gBAAgBA,EAAM;AAAA,MACtB,mBAAmBA,EAAM;AAAA,IAAA,EACzB;AAEF,UAAMX,IAAOC;AAMb,IAAAhF,GAAcwG,GAAMd,GAAO,QAAQ,GAAGc,GAAMd,GAAO,UAAU,CAAC;AAC9D,UAAM,EAAE,GAAArL,EAAA,IAAMqG,GAAA,GAER+F,IAAaxE;AAAA,MACjB,OAAO,SAAW,MACd,OAAO,WAAW,8BAA8B,EAAE,UAClD;AAAA,IAAA;AAGN,QAAIyE,IAAyC;AAE7C,IAAAtE;AAAA,MACE,MAAMsD,EAAM;AAAA,MACZ,CAAC3E,MAAU;AAKT,YAJI2F,MACFA,EAAA,GACAA,IAAoB,OAElB3F,MAAU,QAAQ;AACpB,gBAAM4F,IAAM,OAAO,WAAW,8BAA8B,GACtDC,IAAU,CAACC,MAA2B;AAAE,YAAAJ,EAAW,QAAQI,EAAE;AAAA,UAAS;AAC5E,UAAAF,EAAI,iBAAiB,UAAUC,CAAO,GACtCF,IAAoB,MAAMC,EAAI,oBAAoB,UAAUC,CAAO;AAAA,QACrE;AAAA,MACF;AAAA,MACA,EAAE,WAAW,GAAA;AAAA,IAAK,GAGpB7D,EAAgB,MAAM;AACpB,MAAI2D,KAAmBA,EAAA;AAAA,IACzB,CAAC;AAED,UAAMI,IAAgB1G;AAAA,MAAS,MAC7BsF,EAAM,UAAU,SAAUe,EAAW,QAAQ,SAAS,UAAWf,EAAM;AAAA,IAAA;AAEzE,IAAA5E,GAAqBgG,CAAa;AAElC,UAAMC,IAAa9E,EAA2B,IAAI,GAC5C+E,IAAU/E,EAA2B,IAAI,GAGzCgF,IAAchF,EAA2B,IAAI,GAC7CiF,IAAwBjF,EAAoB,EAAE;AACpD,QAAIkF,IAA0C;AAE9C,UAAMC,IAAsB,MAAM;AAChC,MAAID,MACFA,EAAA,GACAA,IAAqB;AAAA,IAEzB;AAGA,IAAA/E,EAAM6E,GAAa,CAACI,MAAgB;;AAIlC,MAHAD,EAAA,GACAF,EAAsB,QAAQ,CAAA,GAEzBG,MAGDA,EAAY,oBACdF,IAAqBE,EAAY,gBAAgB,MAAM;;AACrD,QAAAH,EAAsB,UAAQ3E,IAAA8E,EAAY,qBAAZ,gBAAA9E,EAAA,KAAA8E,OAAoC,CAAA;AAAA,MACpE,CAAC,IAIHH,EAAsB,UAAQ3E,IAAA8E,EAAY,qBAAZ,gBAAA9E,EAAA,KAAA8E,OAAoC,CAAA;AAAA,IACpE,CAAC,GAEDtE,EAAgB,MAAM;AACpB,MAAAqE,EAAA;AAAA,IACF,CAAC;AAGD,UAAME,IAAkBlH,EAAS,MAAMmH,GAAe7B,EAAM,KAAK,CAAC,GAE5D8B,IAAcpH,EAAS,MAAMkH,EAAgB,MAAM5B,EAAM,YAAY,CAAC,GAGtE+B,IAAc3F,GAAe0F,CAAW,GAGxCE,IAAiBtH,EAAS,MACzBoH,EAAY,SACV9B,EAAM,gBAAgB,KAAK,CAAC9K,MAAMA,EAAE,KAAK4M,EAAY,KAAM,CAAC,KAAK,IACzE,GAEKG,IAA0BvH,EAAS,MACnC,CAACsH,EAAe,SAAS,CAACF,EAAY,QAAc,OACjDE,EAAe,MAAM,OAAOF,EAAY,OAAOI,EAAU,KAAK,CACtE,GAEKC,IAAWzH,EAAS,MAAOoH,EAAY,QAAQM,GAAYN,EAAY,KAAK,IAAI,aAAc,GAG9FO,IAAkB3H;AAAA,MAAS,MAC/B0E,GAAkB,KAAK,CAAClK,MAAMA,EAAE,aAAaiN,EAAS,KAAK,KAAK;AAAA,IAAA,GAI5DG,IAAuB5H,EAAS,MAChC,CAAC2H,EAAgB,SAAS,CAACP,EAAY,QAAc,CAAA,IAClDO,EAAgB,MAAM,SAAS;AAAA,MACpC,aAAaN,EAAY;AAAA,MACzB,iBAAiB/B,EAAM;AAAA,MACvB,aAAa8B,EAAY;AAAA,IAAA,CAC1B,CACF,GAGKS,IAAa,CAACC,GAAcC,MAAsB;AACtD,UAAI,CAACX,EAAY,MAAO;AACxB,YAAMY,IAAiC,EAAE,MAAAF,GAAM,SAAAC,GAAS,MAAMX,EAAY,MAAA;AAC1E,MAAAzC,EAAK,gBAAgBqD,CAAE;AAAA,IACzB,GAGMR,IAAYxH,EAAgC,OAAO;AAAA,MACvD,MAAM6H;AAAA,MACN,GAAG5N,EAAE;AAAA,MACL,OAAOyM,EAAc;AAAA,MACrB,QAASpB,EAAM,UAAU;AAAA,IAAA,EACzB;AAGF,IAAAnF,GAAQ,2BAA2BqH,CAAS,GAG5CxF;AAAA,MACE,MAAMsD,EAAM;AAAA,MACZ,MAAM;AAEJ,QAAA2C,GAAY,QAAQ,GACpBC,GAAU,QAAQ,GAClBC,GAAc,QAAQ,IAEtBC,GAAY,QAAQ,GACpBC,GAAU,QAAQ,GAClBC,GAAc,QAAQ;AAAA,MACxB;AAAA,IAAA;AAMF,UAAMC,IAAgB,CAAC9B,MAAqB;AAC1C,MAAIA,EAAE,QAAQ,YAAYnB,EAAM,SAAS,UACvCX,EAAK,OAAO,IACH8B,EAAE,QAAQ,eAAenB,EAAM,eAAe,IACvDX,EAAK,YAAYW,EAAM,eAAe,CAAC,IAC9BmB,EAAE,QAAQ,gBAAgBnB,EAAM,eAAe4B,EAAgB,MAAM,SAAS,KACvFvC,EAAK,YAAYW,EAAM,eAAe,CAAC;AAAA,IAE3C;AAEA,IAAAS,GAAU,MAAM;AACd,MAAIT,EAAM,SAAS,UACjB,OAAO,iBAAiB,WAAWiD,CAAa,IACvC3B,EAAQ,SACjBA,EAAQ,MAAM,iBAAiB,WAAW2B,CAA8B;AAAA,IAE5E,CAAC,GAED5F,EAAgB,MAAM;AACpB,MAAI2C,EAAM,SAAS,UACjB,OAAO,oBAAoB,WAAWiD,CAAa,IAC1C3B,EAAQ,SACjBA,EAAQ,MAAM,oBAAoB,WAAW2B,CAA8B;AAAA,IAE/E,CAAC;AAGD,UAAMnG,KAAUZ,GAAA,GACVgH,KAAiB,YAAY;AACjC,UAAKpB,EAAY,OACjB;AAAA,YAAI9B,EAAM,YAAY;AACpB,gBAAMA,EAAM,WAAW8B,EAAY,KAAK;AACxC;AAAA,QACF;AACA,YAAI;AACF,gBAAMqB,GAAwBrB,EAAY,MAAM,KAAKA,EAAY,MAAM,MAAMhF,GAAQ,KAAK;AAAA,QAC5F,SAASM,GAAK;AACZ,kBAAQ,MAAM,mCAAmCA,CAAG;AAAA,QACtD;AAAA;AAAA,IACF,GAEMgG,KAAkB1I,EAAS,MAAM,CAAC,CAACsF,EAAM,OAAO,GAEhD2C,KAAcpG,EAAI,CAAC,GACnBqG,KAAYrG,EAAI,CAAC,GACjBsG,KAAgBtG,EAAI,EAAK,GAEzBuG,KAAcvG,EAAI,CAAC,GACnBwG,KAAYxG,EAAI,CAAC,GACjByG,KAAgBzG,EAAI,EAAK,GAOzB8G,KAAa3I,EAAS,MAAM;;AAChC,aAAIsH,EAAe,UAEfpF,KAAAC,IAAAmF,EAAe,OAAM,qBAArB,gBAAApF,EAAA,KAAAC,GAAwCiF,EAAY,OAAQI,EAAU,WAAU,CAAA,IAI7EV,EAAsB;AAAA,IAC/B,CAAC,GAGK8B,KAAe5I,EAAyB,MAAM;AAClD,YAAM6I,IAAyB,CAAA;AAC/B,aAAIvD,EAAM,gBACRuD,EAAO,KAAK;AAAA,QACV,OAAO;AAAA,UACL,EAAE,MAAM,UAAU,MAAM1D,IAAU,SAASlL,EAAE,MAAM,iBAAiB,GAAG,QAAQuO,GAAA;AAAA,QAAe;AAAA,MAChG,CACD,GAECE,GAAgB,SAClBG,EAAO,KAAK;AAAA,QACV,OAAO;AAAA,UACL,EAAE,MAAM,UAAU,MAAMzL,IAAG,SAASnD,EAAE,MAAM,cAAc,GAAG,QAAQ,MAAM0K,EAAK,OAAO,EAAA;AAAA,QAAE;AAAA,MAC3F,CACD,GAEIkE;AAAA,IACT,CAAC,GAEKC,KAAgB9I,EAAS,MAAM2I,GAAW,MAAM,SAAS,CAAC;;;kBAI9D9F,EAiKM,OAAA;AAAA,iBAhKA;AAAA,QAAJ,KAAI+D;AAAA,QACH,UAAU3B,EAAA,SAAI,UAAA,IAAA;AAAA,QACd,cAAYyB,EAAA;AAAA,QACb,OAAM;AAAA,MAAA;QAIGzB,EAAA,wBADTrC,KAAAC,EA4GM,OA5GNG,IA4GM;AAAA,UAtGJD,EAuEM,OAvENE,IAuEM;AAAA,YArEJF,EAOM,OAPNiC,IAOM;AAAA,cANJjC,EAEK,MAFLmC,IAEKhC,GADAf,IAAAiF,EAAA,UAAA,gBAAAjF,EAAa,IAAI,GAAA,CAAA;AAAA,cAEtBY,EAEO,QAFPgG,IAEO7F,EADF+B,EAAA,oBAAmB,MAAC/B,EAAGgE,EAAA,MAAgB,MAAM,GAAA,CAAA;AAAA,YAAA;YAKpDnE,EAgBM,OAhBNiG,IAgBM;AAAA,eAfJpG,EAAA,EAAA,GAAAC,EAcWoG,GAAA,MAAAC,EAdqBN,GAAA,OAAY,CAA1BO,GAAOC;mCAAyCA;AAAA,cAAA;iBAChExG,EAAA,EAAA,GAAAC,EAYWoG,WAZoBE,EAAM,OAAK,CAAxBE,GAAMC;kBAAwC,KAAA,cAAAF,UAAWE;AAAA,gBAAA;kBAEjED,EAAK,SAAI,iBADjBxG,EAUS,UAAA;AAAA;oBARP,OAAK0G,EAAA,CAAC,eAAa,EAAA,QACAF,EAA2B,OAAA,CAAM,CAAA;AAAA,oBACnD,gBAAeA,EAA2B;AAAA,oBAC1C,UAAWA,EAA2B;AAAA,oBACtC,gBAAeA,EAA2B;AAAA,oBAC1C,SAAQA,EAA2B;AAAA,kBAAA;qBAEpCzG,EAAA,GAAA4G,EAA4EC,EAA3DJ,EAA2B,IAAI,GAAA,EAAE,OAAM,mBAAiB;AAAA,kBAAA;;;;YAOjFtG,EAuCM,OAvCN2G,IAuCM;AAAA,eAtCJ9G,EAAA,EAAA,GAAAC,EAsBWoG,GAAA,MAAAC,EAtBqBP,GAAA,OAAU,CAAxBQ,GAAOC;iCAAqCA;AAAA,cAAA;iBAC5DxG,EAAA,EAAA,GAAAC,EAmBWoG,WAnBoBE,EAAM,OAAK,CAAxBE,GAAMC;kBAAsC,KAAA,YAAAF,UAAWE;AAAA,gBAAA;kBAE/DD,EAAK,SAAI,iBADjBxG,EAUS,UAAA;AAAA;oBARP,OAAK0G,EAAA,CAAC,eAAa,EAAA,QACAF,EAA2B,OAAA,CAAM,CAAA;AAAA,oBACnD,gBAAeA,EAA2B;AAAA,oBAC1C,UAAWA,EAA2B;AAAA,oBACtC,gBAAeA,EAA2B;AAAA,oBAC1C,SAAQA,EAA2B;AAAA,kBAAA;qBAEpCzG,EAAA,GAAA4G,EAA4EC,EAA3DJ,EAA2B,IAAI,GAAA,EAAE,OAAM,mBAAiB;AAAA,kBAAA,cAG9DA,EAAK,SAAI,eADtBxG,EAMO,QAAA;AAAA;oBAJL,OAAM;AAAA,oBACL,OAAKmD,EAAA,EAAA,UAAeqD,EAAyB,YAAQ,QAAA;AAAA,kBAAA,GAElDnG,EAAAmG,EAAyB,OAAO,GAAA,CAAA;;gCAGxCtG,EAAuD,OAAA,EAAlD,OAAM,6CAAyC,MAAA,EAAA;AAAA,cAAA;eAEtDH,EAAA,EAAA,GAAAC,EAcWoG,GAAA,MAAAC,EAdqBN,GAAA,OAAY,CAA1BO,GAAOC;mCAAyCA;AAAA,cAAA;iBAChExG,EAAA,EAAA,GAAAC,EAYWoG,WAZoBE,EAAM,OAAK,CAAxBE,GAAMC;kBAAwC,KAAA,cAAAF,UAAWE;AAAA,gBAAA;kBAEjED,EAAK,SAAI,iBADjBxG,EAUS,UAAA;AAAA;oBARP,OAAK0G,EAAA,CAAC,eAAa,EAAA,QACAF,EAA2B,OAAA,CAAM,CAAA;AAAA,oBACnD,gBAAeA,EAA2B;AAAA,oBAC1C,UAAWA,EAA2B;AAAA,oBACtC,gBAAeA,EAA2B;AAAA,oBAC1C,SAAQA,EAA2B;AAAA,kBAAA;qBAEpCzG,EAAA,GAAA4G,EAA4EC,EAA3DJ,EAA2B,IAAI,GAAA,EAAE,OAAM,mBAAiB;AAAA,kBAAA;;;;;UAS3EP,GAAA,SADRlG,EAAA,GAAAC,EA2BM,OA3BN8G,IA2BM;AAAA,aAvBJ/G,EAAA,EAAA,GAAAC,EAsBWoG,GAAA,MAAAC,EAtBqBP,GAAA,OAAU,CAAxBQ,GAAOC;+BAAqCA;AAAA,YAAA;cACjDA,IAAE,KAAbxG,EAAA,GAAAC,EAAuE,OAAvE+G,EAAuE;eACvEhH,EAAA,EAAA,GAAAC,EAmBWoG,WAnBoBE,EAAM,OAAK,CAAxBE,GAAMC;gBAAsC,KAAA,YAAAF,UAAWE;AAAA,cAAA;gBAE/DD,EAAK,SAAI,iBADjBxG,EAUS,UAAA;AAAA;kBARP,OAAK0G,EAAA,CAAC,eAAa,EAAA,QACAF,EAA2B,OAAA,CAAM,CAAA;AAAA,kBACnD,gBAAeA,EAA2B;AAAA,kBAC1C,UAAWA,EAA2B;AAAA,kBACtC,gBAAeA,EAA2B;AAAA,kBAC1C,SAAQA,EAA2B;AAAA,gBAAA;mBAEpCzG,EAAA,GAAA4G,EAA4EC,EAA3DJ,EAA2B,IAAI,GAAA,EAAE,OAAM,mBAAiB;AAAA,gBAAA,cAG9DA,EAAK,SAAI,eADtBxG,EAMO,QAAA;AAAA;kBAJL,OAAM;AAAA,kBACL,OAAKmD,EAAA,EAAA,UAAeqD,EAAyB,YAAQ,QAAA;AAAA,gBAAA,GAElDnG,EAAAmG,EAAyB,OAAO,GAAA,CAAA;;;;;cAQ9CxG,EA+BM,OAAA;AAAA,mBA9BA;AAAA,UAAJ,KAAI8D;AAAA,UACJ,OAAM;AAAA,UACL,MAAKzE,IAAAkF,EAAA,UAAA,gBAAAlF,EAAa;AAAA,QAAA;UAEHkF,EAAA,cAAhBvE,EAyBWoG,GAAA,EAAA,KAAA,KAAA;AAAA,YAxBsC1B,EAAA,SAA/C3E,EAAA,GAAA4G,EAA+GC,EAA/FlC,EAAA,KAAuB,GAAA;AAAA;cAAkC,MAAMH,EAAA;AAAA,cAAc,KAAKI,EAAA;AAAA,YAAA,sCAClG3E,EAsBWoG,GAAA,EAAA,KAAA,KAAA;AAAA,cAnBDxB,EAAA,UAAQ,SAAcnC,EAAM,mBAAmBa,WADvDqD,EAKEK,IAAA;AAAA;gBAHC,aAAWzC,EAAA,MAAY;AAAA,gBACvB,aAAWA,EAAA,MAAY;AAAA,gBACvB,YAAUoB;AAAA,cAAA,2CAIAb,EAAA,SADb/E,EAAA,GAAA4G,EAKEC,EAHK9B,EAAA,MAAgB,SAAS,GAFhCmC,GAKE;AAAA;yBAFI;AAAA,gBAAJ,KAAIjD;AAAA,cAAA,GACIe,EAAA,KAAoB,GAAA,MAAA,EAAA,WAG9B4B,EAKEK,IAAA;AAAA;gBAHC,aAAWzC,EAAA,MAAY;AAAA,gBACvB,aAAWA,EAAA,MAAY;AAAA,gBACvB,YAAUoB;AAAA,cAAA;;;;SAQVvD,EAAA,YAAYiC,EAAA,MAAgB,SAAM,UAD3CsC,EAQEO,IAAA;AAAA;UANC,iBAAepD,EAAA;AAAA,UACf,YAAU1B,EAAA,eAAY;AAAA,UACtB,YAAUA,EAAA,eAAeiC,EAAA,MAAgB,SAAM;AAAA,UAC/C,aAAWjC,EAAA;AAAA,UACX,QAAI+E,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAEtF,EAAI,YAAaM,EAAA,eAAY,CAAA;AAAA,UACnC,QAAI+E,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAEtF,EAAI,YAAaM,EAAA,eAAY,CAAA;AAAA,QAAA;;;;;;;;;;;;;AC9dnC,SAASiF,GAAcC,GAAwB;AACpD,MAAIC,IAAmB,IACnBC,IAAuB,IACvBC,IAAS;AAEb,QAAMC,IAAO,MAAM;AACjB,QAAID,KAAU,OAAO,WAAa,IAAa;AAC/C,IAAAF,IAAmB,SAAS,KAAK,MAAM,UACvCC,IAAuB,SAAS,KAAK,MAAM;AAC3C,UAAMG,IAAiB,OAAO,aAAa,SAAS,gBAAgB;AACpE,aAAS,KAAK,MAAM,WAAW,UAC3BA,IAAiB,MACnB,SAAS,KAAK,MAAM,eAAe,GAAGA,CAAc,OAEtDF,IAAS;AAAA,EACX,GAEMG,IAAS,MAAM;AACnB,IAAI,CAACH,KAAU,OAAO,WAAa,QACnC,SAAS,KAAK,MAAM,WAAWF,GAC/B,SAAS,KAAK,MAAM,eAAeC,GACnCC,IAAS;AAAA,EACX;AAEA,SAAAvE,GAAU,MAAM;AACd,IAAIoE,EAAA,KAAWI,EAAA;AAAA,EACjB,CAAC,GAEDG,GAAY,MAAM;AAChB,IAAAD,EAAA;AAAA,EACF,CAAC,GAEM,EAAE,MAAAF,GAAM,QAAAE,EAAA;AACjB;;;;;;;;;;;;;;;;;;;;ACNA,UAAMnF,IAAQL,GAaRN,IAAOC,GAMP,EAAE,MAAA2F,GAAM,QAAAE,EAAA,IAAWP,GAAc,MAAM5E,EAAM,MAAM;AAEzD,IAAAtD;AAAA,MACE,MAAMsD,EAAM;AAAA,MACZ,CAACqF,MAAS;AACR,QAAIA,IAAMJ,EAAA,IACLE,EAAA;AAAA,MACP;AAAA,IAAA;AAGF,UAAMpE,IAAaxE;AAAA,MACjB,OAAO,SAAW,MACd,OAAO,WAAW,8BAA8B,EAAE,UAClD;AAAA,IAAA;AAGN,QAAIyE,IAAyC;AAE7C,IAAAtE;AAAA,MACE,MAAMsD,EAAM;AAAA,MACZ,CAAC3E,MAAU;AAKT,YAJI2F,MACFA,EAAA,GACAA,IAAoB,OAElB3F,MAAU,QAAQ;AACpB,gBAAM4F,IAAM,OAAO,WAAW,8BAA8B,GACtDC,IAAU,CAACC,MAA2B;AAAE,YAAAJ,EAAW,QAAQI,EAAE;AAAA,UAAS;AAC5E,UAAAF,EAAI,iBAAiB,UAAUC,CAAO,GACtCF,IAAoB,MAAMC,EAAI,oBAAoB,UAAUC,CAAO;AAAA,QACrE;AAAA,MACF;AAAA,MACA,EAAE,WAAW,GAAA;AAAA,IAAK,GAGpB7D,EAAgB,MAAM;AACpB,MAAI2D,KAAmBA,EAAA;AAAA,IACzB,CAAC;AAED,UAAMI,IAAgB1G;AAAA,MAAS,MAC7BsF,EAAM,UAAU,SAAUe,EAAW,QAAQ,SAAS,UAAWf,EAAM;AAAA,IAAA,GAGnEsF,IAAsB,MAAMjG,EAAK,OAAO,GACxCkG,IAAqB,CAACpE,MAAkBA,EAAE,gBAAA,GAC1CqE,IAAc,CAACrE,MAAkBA,EAAE,gBAAA;2BAIvC+C,EAgCWuB,IAAA,EAhCD,IAAG,UAAM;AAAA,MACjBjG,EA8BakG,IAAA,EA9BD,MAAK,cAAU;AAAA,oBACzB,MA4BM;AAAA,UA5BK/F,EAAA,eAAXpC,EA4BM,OAAA;AAAA;YA5Ba,OAAM;AAAA,YAAY,cAAY6D,EAAA;AAAA,UAAA;YAC/C3D,EA0BM,OAAA;AAAA,cAzBJ,OAAM;AAAA,cACL,SAAO6H;AAAA,cACP,SAAOE;AAAA,YAAA;cAER/H,EAoBM,OAAA;AAAA,gBApBD,OAAM;AAAA,gBAAsC,SAAO8H;AAAA,cAAA;gBACtD/F,EAkBEmG,IAAA;AAAA,kBAjBA,MAAK;AAAA,kBACJ,OAAOhG,EAAA;AAAA,kBACP,iBAAeA,EAAA;AAAA,kBACf,oBAAkBA,EAAA;AAAA,kBAClB,QAAQA,EAAA;AAAA,kBACR,UAAUA,EAAA;AAAA,kBACV,UAAUA,EAAA;AAAA,kBACV,OAAOA,EAAA;AAAA,kBACP,gBAAcA,EAAA;AAAA,kBACd,mBAAiBA,EAAA;AAAA,kBACjB,wBAAsBA,EAAA;AAAA,kBACtB,eAAaA,EAAA;AAAA,kBACb,kBAAgBN,EAAI,OAAA;AAAA,kBACpB,iBAAeM,EAAA;AAAA,kBACf,gCAAON,EAAI,OAAA;AAAA,kBACX,YAAQqF,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAGhO,MAAM2I,cAAiB3I,CAAC;AAAA,kBACnC,eAAYgO,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAG/O,MAAM0J,kBAAqB1J,CAAC;AAAA,gBAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACzF1D,UAAMqK,IAAQL,GAiBRN,IAAOC,GAMPyB,IAAaxE;AAAA,MACjB,OAAO,SAAW,MACd,OAAO,WAAW,8BAA8B,EAAE,UAClD;AAAA,IAAA;AAGN,QAAIyE,IAAyC;AAE7C,IAAAtE;AAAA,MACE,MAAMsD,EAAM;AAAA,MACZ,CAAC3E,MAAU;AAKT,YAJI2F,MACFA,EAAA,GACAA,IAAoB,OAElB3F,MAAU,QAAQ;AACpB,gBAAM4F,IAAM,OAAO,WAAW,8BAA8B,GACtDC,IAAU,CAACC,MAA2B;AAAE,YAAAJ,EAAW,QAAQI,EAAE;AAAA,UAAS;AAC5E,UAAAF,EAAI,iBAAiB,UAAUC,CAAO,GACtCF,IAAoB,MAAMC,EAAI,oBAAoB,UAAUC,CAAO;AAAA,QACrE;AAAA,MACF;AAAA,MACA,EAAE,WAAW,GAAA;AAAA,IAAK,GAGpB7D,EAAgB,MAAM;AACpB,MAAI2D,KAAmBA,EAAA;AAAA,IACzB,CAAC;AAED,UAAMI,IAAgB1G;AAAA,MAAS,MAC7BsF,EAAM,UAAU,SAAUe,EAAW,QAAQ,SAAS,UAAWf,EAAM;AAAA,IAAA,GAGnE4F,IAA8B;AAAA,MAClC,OAAO,OAAO5F,EAAM,SAAU,WAAW,GAAGA,EAAM,KAAK,OAAOA,EAAM;AAAA,MACpE,QAAQ,OAAOA,EAAM,UAAW,WAAW,GAAGA,EAAM,MAAM,OAAOA,EAAM;AAAA,IAAA;2BAKvEzC,EAsBM,OAAA;AAAA,MAtBD,OAAM;AAAA,MAAY,OAAOqI;AAAA,MAAe,cAAYxE,EAAA;AAAA,IAAA;MACvD3D,EAoBM,OApBNC,IAoBM;AAAA,QAnBJ8B,EAkBEmG,IAAA;AAAA,UAjBA,MAAK;AAAA,UACJ,OAAOhG,EAAA;AAAA,UACP,iBAAeA,EAAA;AAAA,UACf,oBAAkBA,EAAA;AAAA,UAClB,QAAQA,EAAA;AAAA,UACR,UAAUA,EAAA;AAAA,UACV,UAAUA,EAAA;AAAA,UACV,OAAOA,EAAA;AAAA,UACP,gBAAcA,EAAA;AAAA,UACd,mBAAiBA,EAAA;AAAA,UACjB,wBAAsBA,EAAA;AAAA,UACtB,eAAaA,EAAA;AAAA,UACb,YAAUA,EAAA;AAAA,UACV,iBAAeA,EAAA;AAAA,UACf,YAAQ+E,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAGhO,MAAM2I,cAAiB3I,CAAC;AAAA,UACnC,eAAYgO,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAG/O,MAAM0J,kBAAqB1J,CAAC;AAAA,UAC3C,+BAAa0J,EAAI,OAAA;AAAA,QAAA;;;;IChHbwG,KAAUC,GAAY;"}
|
|
1
|
+
{"version":3,"file":"index-6XBcUPmD.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/RendererLoading.vue","../../src/renderers/lazy.ts","../../src/renderers/registry.ts","../../src/renderers/Unsupported/index.vue","../../src/components/NavArrows.vue","../../src/FilePreviewContent.vue","../../src/composables/useScrollLock.ts","../../src/FilePreviewModal.vue","../../src/FilePreviewEmbed.vue","../../src/index.ts"],"sourcesContent":["import I from \"jszip\";\nconst vt = [\n \"image\",\n \"pdf\",\n \"docx\",\n \"xlsx\",\n \"pptx\",\n \"msg\",\n \"epub\",\n \"mobi\",\n \"video\",\n \"audio\",\n \"markdown\",\n \"json\",\n \"csv\",\n \"xml\",\n \"subtitle\",\n \"zip\",\n \"text\",\n \"font\"\n];\nfunction U(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 M(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 W(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 || M(e.name),\n size: e.size\n };\n if (typeof e == \"string\") {\n const o = U(e);\n return {\n id: `url-${Date.now()}-${t}`,\n name: o,\n url: e,\n type: M(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 || M(e.name),\n size: e.size\n };\n}\nfunction wt(e) {\n return e.map((t, o) => W(t, o));\n}\nfunction Ft(e) {\n var a;\n const t = ((a = e.name.split(\".\").pop()) == null ? void 0 : a.toLowerCase()) || \"\", o = e.type.toLowerCase();\n if (o.startsWith(\"image/\") || [\n \"jpg\",\n \"jpeg\",\n \"png\",\n \"gif\",\n \"webp\",\n \"svg\",\n \"bmp\",\n \"ico\",\n // 高级图片格式\n \"heic\",\n \"heif\",\n \"avif\",\n \"tif\",\n \"tiff\",\n // RAW 格式\n \"cr2\",\n \"nef\",\n \"arw\",\n \"dng\",\n \"raf\",\n \"orf\",\n // 其他专业格式\n \"psd\",\n \"jp2\",\n \"jpx\",\n \"j2k\"\n ].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 ([\"ttf\", \"otf\", \"woff\", \"woff2\"].includes(t) || o.startsWith(\"font/\") || o === \"application/font-woff\" || o === \"application/font-woff2\" || o === \"application/x-font-ttf\" || o === \"application/x-font-otf\" || o === \"application/font-sfnt\")\n return \"font\";\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\" || t === \"jsonc\")\n return \"json\";\n const n = [\n \"txt\",\n \"log\",\n \"lock\",\n \"js\",\n \"jsx\",\n \"ts\",\n \"tsx\",\n \"cjs\",\n \"mjs\",\n \"cts\",\n \"mts\",\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) || e.name.startsWith(\".\") && !e.name.includes(\"/\") ? \"text\" : \"unsupported\";\n}\nfunction yt(e) {\n var n;\n const t = ((n = e.split(\".\").pop()) == null ? void 0 : n.toLowerCase()) || \"\", o = {\n js: \"javascript\",\n jsx: \"jsx\",\n ts: \"typescript\",\n tsx: \"tsx\",\n cjs: \"javascript\",\n mjs: \"javascript\",\n cts: \"typescript\",\n mts: \"typescript\",\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 jsonc: \"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 };\n if (o[t])\n return o[t];\n if (e.startsWith(\".\")) {\n const a = e.toLowerCase(), r = {\n // Git 相关\n \".gitignore\": \"ini\",\n \".gitattributes\": \"ini\",\n \".gitmodules\": \"ini\",\n \".gitkeep\": \"text\",\n // 编辑器配置\n \".editorconfig\": \"ini\",\n \".prettierrc\": \"json\",\n \".prettierignore\": \"ini\",\n \".eslintrc\": \"json\",\n \".eslintignore\": \"ini\",\n \".stylelintrc\": \"json\",\n // Shell 配置\n \".bashrc\": \"bash\",\n \".zshrc\": \"bash\",\n \".bash_profile\": \"bash\",\n \".zprofile\": \"bash\",\n \".profile\": \"bash\",\n \".vimrc\": \"vim\",\n // 环境变量\n \".env\": \"bash\",\n \".env.local\": \"bash\",\n \".env.development\": \"bash\",\n \".env.production\": \"bash\",\n \".env.test\": \"bash\",\n // 其他配置\n \".npmrc\": \"ini\",\n \".yarnrc\": \"ini\",\n \".nvmrc\": \"text\",\n \".dockerignore\": \"ini\"\n };\n if (r[a])\n return r[a];\n if (a.startsWith(\".env\"))\n return \"bash\";\n if (a.endsWith(\"rc\"))\n return \"json\";\n if (a.endsWith(\"ignore\"))\n return \"ini\";\n }\n return \"text\";\n}\nfunction _t(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 Ct(e) {\n return e < 1024 ? `${e} B` : e < 1024 * 1024 ? `${(e / 1024).toFixed(1)} KB` : `${(e / (1024 * 1024)).toFixed(1)} MB`;\n}\nfunction kt(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 Mt(e) {\n var o;\n return (((o = e.split(\".\").pop()) == null ? void 0 : o.toLowerCase()) || \"\") === \"tsv\" ? \"\t\" : \",\";\n}\nfunction St(e, t = {}) {\n const o = t.delimiter ?? \",\", n = t.firstRowAsHeader ?? !0, a = [];\n let r = [], i = \"\", s = !1, l = 0;\n const c = e.length;\n for (; l < c; ) {\n const d = e[l];\n if (s) {\n if (d === '\"') {\n if (e[l + 1] === '\"') {\n i += '\"', l += 2;\n continue;\n }\n s = !1, l += 1;\n continue;\n }\n i += d, l += 1;\n continue;\n }\n if (d === '\"') {\n s = !0, l += 1;\n continue;\n }\n if (d === o) {\n r.push(i), i = \"\", l += 1;\n continue;\n }\n if (d === \"\\r\") {\n e[l + 1] === `\n` && (l += 1), r.push(i), a.push(r), r = [], i = \"\", l += 1;\n continue;\n }\n if (d === `\n`) {\n r.push(i), a.push(r), r = [], i = \"\", l += 1;\n continue;\n }\n i += d, l += 1;\n }\n for ((i.length > 0 || r.length > 0) && (r.push(i), a.push(r)); a.length > 0; ) {\n const d = a[a.length - 1];\n if (d.length === 1 && d[0] === \"\")\n a.pop();\n else\n break;\n }\n let p = [], u = a;\n n && a.length > 0 && (p = a[0], u = a.slice(1));\n const f = Math.max(\n p.length,\n ...u.map((d) => d.length),\n 0\n );\n for (const d of u)\n for (; d.length < f; ) d.push(\"\");\n return {\n header: p,\n rows: u,\n columnCount: f,\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 B = $;\nasync function zt(e, t) {\n const o = !!t && (\"fetcher\" in t || \"init\" in t || \"signal\" in t), n = o ? t.fetcher ?? fetch : fetch, a = o ? t.signal : void 0, r = o ? t.init : t, i = a ? { ...r, signal: a } : r, s = await n(e, i);\n if (!s.ok) throw new Error(`请求失败: ${s.status}`);\n const l = await s.arrayBuffer();\n return $(l);\n}\nasync function V(e, t) {\n if (e)\n return typeof e == \"function\" ? await e(t) : e;\n}\nfunction Z(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, a) => {\n o.set(a, n);\n }), {\n ...e,\n ...t,\n headers: o\n };\n}\nfunction Et(e) {\n const t = (e == null ? void 0 : e.requestHandler) ?? ((n, a) => fetch(n, a)), o = e == null ? void 0 : e.requestInit;\n return async (n, a) => {\n const r = await V(o, n), i = Z(r, a);\n return t(n, i);\n };\n}\nasync function jt(e, t = fetch, o) {\n const n = await t(e, o);\n if (!n.ok) throw new Error(`请求失败: ${n.status}`);\n const a = await n.blob();\n return URL.createObjectURL(a);\n}\nasync function Lt(e, t, o = fetch, n) {\n const a = await o(e, n);\n if (!a.ok) throw new Error(`请求失败: ${a.status}`);\n const r = await a.blob(), i = URL.createObjectURL(r);\n try {\n const s = document.createElement(\"a\");\n s.href = i, s.download = t, s.style.display = \"none\", document.body.appendChild(s), s.click(), document.body.removeChild(s);\n } finally {\n setTimeout(() => URL.revokeObjectURL(i), 1e3);\n }\n}\nfunction L(e) {\n const t = e.trim().replace(\",\", \".\"), o = t.split(\":\").map((n) => n.trim());\n if (o.length === 3) {\n const [n, a, r] = o;\n return Number(n) * 3600 + Number(a) * 60 + Number(r);\n }\n if (o.length === 2) {\n const [n, a] = o;\n return Number(n) * 60 + Number(a);\n }\n return Number(t) || 0;\n}\nfunction Pt(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, a = Math.floor(t / 6e4) % 60, r = Math.floor(t / 36e5), i = (s, l = 2) => s.toString().padStart(l, \"0\");\n return `${i(r)}:${i(a)}:${i(n)}.${i(o, 3)}`;\n}\nconst P = /(\\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}/, H = /^\\s*\\[\\d{1,2}:\\d{1,2}(?:[.:]\\d{1,3})?\\]/;\nfunction O(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\" : H.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 T(e, t) {\n const n = e.replace(/\\r\\n?/g, `\n`).replace(/^\\uFEFF/, \"\").split(`\n`), a = [];\n let r, i = 0;\n if (t === \"vtt\") {\n const s = [];\n for (; i < n.length && n[i].trim() !== \"\"; )\n s.push(n[i]), i++;\n for (r = s.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 s, l = null;\n if (P.test(n[i]))\n l = n[i], i++;\n else if (s = n[i].trim() || void 0, i++, i < n.length && P.test(n[i]))\n l = n[i], i++;\n else\n continue;\n if (!l) continue;\n const c = l.match(/([\\d:.,]+)\\s*-->\\s*([\\d:.,]+)/);\n if (!c) continue;\n const p = L(c[1]), u = L(c[2]), f = [];\n for (; i < n.length && n[i].trim() !== \"\"; )\n f.push(n[i]), i++;\n a.push({ id: s, start: p, end: u, text: f.join(`\n`) });\n }\n return { format: t, cues: a, header: r };\n}\nfunction z(e, t, o) {\n const n = Number(e), a = Number(t);\n let r = 0;\n if (o) {\n const i = (o + \"000\").slice(0, 3);\n r = Number(i);\n }\n return n * 60 + a + r / 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(), a = o[2].trim();\n if (t.metadata[n] = a, n === \"offset\") {\n const r = Number(a);\n isNaN(r) || (t.offsetMs = r);\n }\n return !0;\n}\nfunction q(e) {\n const o = e.replace(/\\r\\n?/g, `\n`).replace(/^\\uFEFF/, \"\").split(`\n`), n = { metadata: {}, offsetMs: 0 }, a = /\\[(\\d{1,2}):(\\d{1,2})(?:[.:](\\d{1,3}))?\\]/g, r = [];\n for (const l of o) {\n const c = l.trim();\n if (!c || R(c, n)) continue;\n const p = [];\n let u = 0;\n a.lastIndex = 0;\n let f;\n for (; (f = a.exec(c)) !== null && f.index === u; )\n p.push(z(f[1], f[2], f[3])), u = f.index + f[0].length;\n if (p.length === 0) continue;\n const d = c.slice(u).trim();\n for (const m of p)\n r.push({ start: m, text: d });\n }\n r.sort((l, c) => l.start - c.start);\n const i = n.offsetMs / 1e3;\n return { format: \"lrc\", cues: r.map((l, c) => {\n const p = Math.max(0, l.start - i), u = r[c + 1], f = u ? Math.max(p, u.start - i) : p + 5;\n return { start: p, end: f, text: l.text };\n }), metadata: n.metadata };\n}\nfunction G(e) {\n const o = e.replace(/\\r\\n?/g, `\n`).replace(/^\\uFEFF/, \"\").split(`\n`), n = { metadata: {}, offsetMs: 0 }, a = /\\[(\\d{1,2}):(\\d{1,2})(?:[.:](\\d{1,3}))?\\]/g, r = /<(\\d{1,2}):(\\d{1,2})(?:[.:](\\d{1,3}))?>/g, i = [];\n for (const c of o) {\n const p = c.trim();\n if (!p || R(p, n)) continue;\n const u = [];\n let f = 0;\n a.lastIndex = 0;\n let d;\n for (; (d = a.exec(p)) !== null && d.index === f; )\n u.push(z(d[1], d[2], d[3])), f = d.index + d[0].length;\n if (u.length === 0) continue;\n const m = p.slice(f);\n for (const g of u)\n i.push({ start: g, raw: m });\n }\n i.sort((c, p) => c.start - p.start);\n const s = n.offsetMs / 1e3;\n return { format: \"elrc\", cues: i.map((c, p) => {\n const u = [];\n let f = \"\", d = 0, m = null;\n r.lastIndex = 0;\n let g;\n for (; (g = r.exec(c.raw)) !== null; ) {\n const v = c.raw.slice(d, g.index);\n m !== null && v && u.push({ start: Math.max(0, m - s), text: v }), f += v, m = z(g[1], g[2], g[3]), d = g.index + g[0].length;\n }\n const h = c.raw.slice(d);\n m !== null && h && u.push({ start: Math.max(0, m - s), text: h }), f += h;\n const x = Math.max(0, c.start - s), b = i[p + 1], F = b ? Math.max(x, b.start - s) : x + 5;\n return {\n start: x,\n end: F,\n text: f.trim(),\n words: u.length ? u : 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 a = \"\", r = [];\n const i = [], s = [];\n for (const l of n) {\n const c = l.replace(/\\s+$/, \"\"), p = c.trim(), u = /^\\[([^\\]]+)\\]\\s*$/.exec(p);\n if (u) {\n a = u[1].toLowerCase(), s.push(c);\n continue;\n }\n if (a !== \"events\") {\n s.push(c);\n continue;\n }\n const f = /^Format:\\s*(.+)$/i.exec(p);\n if (f) {\n r = f[1].split(\",\").map((w) => w.trim());\n continue;\n }\n const d = /^(Dialogue|Comment):\\s*(.+)$/i.exec(p);\n if (!d || d[1].toLowerCase() === \"comment\" || r.length === 0) continue;\n const m = r.length, g = d[2].split(\",\"), h = g.slice(0, m - 1), x = g.slice(m - 1).join(\",\"), b = {};\n r.forEach((w, _) => {\n b[w] = _ === m - 1 ? x : h[_] ?? \"\";\n });\n const F = N(b.Start || \"\"), v = N(b.End || \"\"), C = (b.Text || \"\").replace(/\\\\N/g, `\n`).replace(/\\\\n/g, `\n`).replace(/\\\\h/g, \" \").replace(/\\{[^}]*\\}/g, \"\");\n i.push({ start: F, end: v, text: C, style: b.Style });\n }\n return i.sort((l, c) => l.start - c.start), {\n format: t,\n cues: i,\n header: s.join(`\n`).trim() || void 0\n };\n}\nfunction y(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 a = Number(o[1]), r = o[2].toLowerCase();\n return r === \"h\" ? a * 3600 : r === \"m\" ? a * 60 : r === \"ms\" ? a / 1e3 : a;\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 X(e) {\n return e.replace(/&#x([0-9a-fA-F]+);/g, (t, o) => String.fromCharCode(parseInt(o, 16))).replace(/&#(\\d+);/g, (t, o) => String.fromCharCode(Number(o))).replace(/</g, \"<\").replace(/>/g, \">\").replace(/"/g, '\"').replace(/'/g, \"'\").replace(/ /g, \" \").replace(/&/g, \"&\");\n}\nfunction J(e) {\n var a, r, i;\n const t = [], o = /<(?:[\\w-]+:)?p\\b([^>]*)>([\\s\\S]*?)<\\/(?:[\\w-]+:)?p\\s*>/gi;\n let n;\n for (; (n = o.exec(e)) !== null; ) {\n const s = n[1], l = n[2], c = ((a = /\\bbegin\\s*=\\s*[\"']([^\"']+)[\"']/i.exec(s)) == null ? void 0 : a[1]) || \"\", p = ((r = /\\bend\\s*=\\s*[\"']([^\"']+)[\"']/i.exec(s)) == null ? void 0 : r[1]) || \"\", u = ((i = /\\bdur\\s*=\\s*[\"']([^\"']+)[\"']/i.exec(s)) == null ? void 0 : i[1]) || \"\", f = y(c);\n let d;\n p ? d = y(p) : u ? d = f + y(u) : d = f + 5;\n const m = X(\n l.replace(/<(?:[\\w-]+:)?br\\s*\\/?>/gi, `\n`).replace(/<[^>]+>/g, \"\")\n ).replace(/[ \\t]+/g, \" \").replace(/\\n /g, `\n`).trim();\n (m || f || d) && t.push({ start: f, end: d, text: m });\n }\n return t.sort((s, l) => s.start - l.start), { format: \"ttml\", cues: t };\n}\nfunction K(e) {\n const t = e.replace(/^\\uFEFF/, \"\");\n if (typeof DOMParser < \"u\") {\n const o = new DOMParser().parseFromString(t, \"application/xml\");\n if (o.getElementsByTagName(\"parsererror\").length === 0) {\n const a = o.getElementsByTagNameNS ? o.getElementsByTagNameNS(\"*\", \"p\") : o.getElementsByTagName(\"p\");\n if (a.length > 0) {\n const r = [];\n for (let i = 0; i < a.length; i++) {\n const s = a[i], l = s.getAttribute(\"begin\") || \"\", c = s.getAttribute(\"end\") || \"\", p = s.getAttribute(\"dur\") || \"\", u = y(l);\n let f;\n c ? f = y(c) : p ? f = u + y(p) : f = u + 5;\n let d = \"\";\n s.childNodes.forEach((g) => {\n if (g.nodeType === 3)\n d += g.nodeValue || \"\";\n else if (g.nodeType === 1) {\n const h = g;\n (h.localName || h.tagName).toLowerCase() === \"br\" ? d += `\n` : d += h.textContent || \"\";\n }\n });\n const m = d.replace(/[ \\t]+/g, \" \").replace(/\\n /g, `\n`).trim();\n (m || u || f) && r.push({ start: u, end: f, text: m });\n }\n return r.sort((i, s) => i.start - s.start), { format: \"ttml\", cues: r };\n }\n }\n }\n return J(t);\n}\nfunction Tt(e, t) {\n switch (t ?? O(e)) {\n case \"lrc\":\n return q(e);\n case \"elrc\":\n return G(e);\n case \"ass\":\n return D(e, \"ass\");\n case \"ssa\":\n return D(e, \"ssa\");\n case \"ttml\":\n return K(e);\n case \"vtt\":\n return T(e, \"vtt\");\n case \"srt\":\n default:\n return T(e, \"srt\");\n }\n}\nasync function Nt(e) {\n return I.loadAsync(e);\n}\nfunction Dt(e) {\n const t = [];\n return e.forEach((o, n) => {\n var u;\n const a = n.dir, r = a && !o.endsWith(\"/\") ? o + \"/\" : o, i = a ? r.replace(/\\/$/, \"\") : r, s = i.lastIndexOf(\"/\"), l = s >= 0 ? i.slice(s + 1) : i, c = s >= 0 ? i.slice(0, s) : \"\", p = a ? 0 : ((u = n._data) == null ? void 0 : u.uncompressedSize) ?? 0;\n t.push({\n path: r,\n name: l,\n dir: c,\n isDir: a,\n size: p,\n date: n.date\n });\n }), t;\n}\nfunction At(e) {\n const t = { name: \"\", path: \"\", isDir: !0, children: [], size: 0 }, o = /* @__PURE__ */ new Map();\n o.set(\"\", t);\n const n = (r) => {\n if (o.has(r)) return o.get(r);\n const i = r.split(\"/\").filter(Boolean);\n let s = t, l = \"\";\n for (const c of i) {\n l = l ? `${l}/${c}` : c;\n let p = o.get(l);\n p || (p = { name: c, path: l + \"/\", isDir: !0, children: [], size: 0 }, s.children.push(p), o.set(l, p)), s = p;\n }\n return s;\n };\n for (const r of e) {\n if (r.isDir) {\n n(r.path.replace(/\\/$/, \"\"));\n continue;\n }\n n(r.dir).children.push({\n name: r.name,\n path: r.path,\n isDir: !1,\n size: r.size\n });\n }\n const a = (r) => {\n if (r.children) {\n r.children.sort((i, s) => i.isDir !== s.isDir ? i.isDir ? -1 : 1 : i.name.localeCompare(s.name));\n for (const i of r.children) a(i);\n }\n };\n return a(t), t;\n}\nasync function $t(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 B(n);\n}\nasync function Rt(e, t, o) {\n const n = e.file(t);\n if (!n) throw new Error(`ZIP entry not found: ${t}`);\n const a = await n.async(\"arraybuffer\");\n return new Blob([a], o ? { type: o } : void 0);\n}\nfunction Q(e) {\n return e ? e.startsWith(\"#\") ? e : e.length === 8 ? \"#\" + e.substring(2) : e.length === 6 ? \"#\" + e : \"#000000\" : \"#000000\";\n}\nconst Y = [\n \"FFFFFF\",\n \"000000\",\n \"E7E6E6\",\n \"44546A\",\n \"4472C4\",\n \"ED7D31\",\n \"A5A5A5\",\n \"FFC000\",\n \"5B9BD5\",\n \"70AD47\"\n], tt = [\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 et(e, t) {\n const o = parseInt(e.substring(0, 2), 16), n = parseInt(e.substring(2, 4), 16), a = parseInt(e.substring(4, 6), 16), r = (c) => t < 0 ? Math.round(c * (1 + t)) : Math.round(c + (255 - c) * t), i = Math.min(255, Math.max(0, r(o))), s = Math.min(255, Math.max(0, r(n))), l = Math.min(255, Math.max(0, r(a)));\n return i.toString(16).padStart(2, \"0\") + s.toString(16).padStart(2, \"0\") + l.toString(16).padStart(2, \"0\");\n}\nfunction ot(e) {\n if (e && e.type === \"pattern\" && e.pattern === \"solid\") {\n const t = e.fgColor;\n if (t)\n return E(t);\n }\n}\nfunction E(e) {\n if (e) {\n if (\"argb\" in e && typeof e.argb == \"string\" && e.argb)\n return Q(e.argb);\n if (\"theme\" in e && typeof e.theme == \"number\") {\n const t = Y[e.theme] || \"000000\", o = \"tint\" in e && typeof e.tint == \"number\" ? e.tint : 0;\n return \"#\" + (o !== 0 ? et(t, o) : t);\n }\n if (\"indexed\" in e && typeof e.indexed == \"number\") {\n const t = tt[e.indexed];\n if (t) return \"#\" + t;\n }\n }\n}\nfunction nt(e) {\n if (!e || !e.style) return;\n const t = E(e.color) || \"#000000\";\n return [e.style, t];\n}\nfunction at(e) {\n const t = {};\n let o = !1;\n if (e.font) {\n const a = e.font;\n if ((a.name || a.size || a.bold || a.italic) && (o = !0, t.font = {}, a.name && (t.font.name = a.name), a.size && (t.font.size = a.size), a.bold && (t.font.bold = !0), a.italic && (t.font.italic = !0)), a.color) {\n const r = E(a.color);\n r && (o = !0, t.color = r);\n }\n a.underline && (o = !0, t.underline = !0), a.strike && (o = !0, t.strike = !0);\n }\n const n = ot(e.fill);\n if (n && (o = !0, t.bgcolor = n), e.alignment) {\n const a = e.alignment;\n a.horizontal && (o = !0, t.align = a.horizontal), a.vertical && (o = !0, t.valign = a.vertical), a.wrapText && (o = !0, t.textwrap = !0);\n }\n if (e.border) {\n const a = {};\n let r = !1;\n const i = [\"top\", \"bottom\", \"left\", \"right\"];\n for (const s of i) {\n const l = nt(e.border[s]);\n l && (a[s] = l, r = !0);\n }\n r && (o = !0, t.border = a);\n }\n return o ? t : null;\n}\nfunction it(e) {\n return JSON.stringify(e);\n}\nfunction rt(e, t, o) {\n const n = at(e);\n if (!n) return -1;\n const a = it(n), r = o.get(a);\n if (r !== void 0) return r;\n const i = t.length;\n return t.push(n), o.set(a, i), i;\n}\nfunction st(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 lt(e) {\n const t = e.split(\":\"), o = A(t[0]), n = t[1] ? A(t[1]) : o;\n return {\n top: o.row,\n left: o.col,\n bottom: n.row,\n right: n.col\n };\n}\nfunction A(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 a = 0;\n for (let r = 0; r < o.length; r++)\n a = a * 26 + (o.charCodeAt(r) - 64);\n return { row: n, col: a };\n}\nfunction It(e) {\n const t = [];\n return e.eachSheet((o) => {\n const n = [], a = /* @__PURE__ */ new Map(), r = [], i = {}, s = {}, l = o.columnCount;\n for (let f = 1; f <= l; f++) {\n const d = o.getColumn(f);\n d.width && (s[String(f - 1)] = { width: Math.round(d.width * 7.5) });\n }\n s.len = Math.max(l, 26);\n const c = /* @__PURE__ */ new Map(), p = o.model, u = (p == null ? void 0 : p.merges) || [];\n for (const f of u) {\n r.push(f);\n const { top: d, left: m, bottom: g, right: h } = lt(f), x = g - d, b = h - m;\n c.set(`${d - 1},${m - 1}`, [x, b]);\n }\n o.eachRow({ includeEmpty: !0 }, (f, d) => {\n const m = d - 1, g = {};\n f.eachCell({ includeEmpty: !1 }, (x, b) => {\n const F = b - 1;\n if (x.isMerged && x.master !== x) return;\n const v = st(x), C = rt(x, n, a), w = { text: v };\n C !== -1 && (w.style = C);\n const _ = `${m},${F}`;\n c.has(_) && (w.merge = c.get(_)), g[String(F)] = w;\n });\n const h = { cells: g };\n f.height && (h.height = Math.round(f.height * 1.333)), i[String(m)] = h;\n }), t.push({\n name: o.name,\n styles: n,\n merges: r,\n rows: i,\n cols: s\n });\n }), t;\n}\nfunction Ut(e, t, o = \"Sheet1\") {\n const n = e.length > 0, r = n ? [{ font: { bold: !0 } }] : [], i = {};\n if (n) {\n const l = {};\n e.forEach((c, p) => {\n l[String(p)] = { text: c, style: 0 };\n }), i[0] = { cells: l };\n }\n const s = n ? 1 : 0;\n return t.forEach((l, c) => {\n const p = {};\n l.forEach((u, f) => {\n u !== void 0 && u !== \"\" && (p[String(f)] = { text: u });\n }), i[String(c + s)] = { cells: p };\n }), [{ name: o, styles: r, rows: i }];\n}\nfunction Wt(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: a = `https://unpkg.com/pdfjs-dist@${o}/cmaps/`,\n cMapPacked: r = !0\n } = t || {};\n e.GlobalWorkerOptions && (e.GlobalWorkerOptions.workerSrc = n, e.GlobalWorkerOptions.cMapUrl = a, e.GlobalWorkerOptions.cMapPacked = r);\n}\nconst ct = {\n // ─────── common ───────\n \"common.download\": \"下载\",\n \"common.close\": \"关闭\",\n \"common.loading\": \"加载中\",\n \"common.unknown_error\": \"未知错误\",\n \"common.unsupported_preview\": \"不支持预览此文件类型 ({type})\",\n \"common.retry\": \"重试\",\n // ─────── accessibility ───────\n \"accessibility.previousFile\": \"上一个文件\",\n \"accessibility.nextFile\": \"下一个文件\",\n \"accessibility.closePreview\": \"关闭预览\",\n \"accessibility.downloadFile\": \"下载文件\",\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.outline\": \"大纲\",\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 \"image.decode_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 \"video.format_not_supported\": \"浏览器不支持 {format} 格式,建议转换为 MP4/WebM 格式\",\n \"video.unsupported_title\": \"该视频格式无法在浏览器中直接播放\",\n \"video.unsupported_detail\": \"{format} 是浏览器原生不支持的容器/编码(常见于 AVI / WMV / FLV 及部分 MKV)。请下载到本地播放器观看,或转换为 MP4(H.264 + AAC)。\",\n \"video.codec_not_supported_detail\": \"视频或音频编码 {codecs} 浏览器无法解码。请转换为 MP4(H.264 + AAC)后再预览。\",\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 // ─────── font ───────\n \"font.loading\": \"加载字体中...\",\n \"font.load_failed\": \"字体文件加载失败\",\n \"font.parse_failed\": \"字体解析失败\",\n \"font.metadata_loading\": \"解析元数据中...\",\n \"font.metadata_unavailable\": \"元数据不可用\",\n \"font.meta.family\": \"字体家族\",\n \"font.meta.subfamily\": \"子系列\",\n \"font.meta.version\": \"版本\",\n \"font.meta.designer\": \"设计师\",\n \"font.meta.glyphs\": \"字形数量\",\n \"font.meta.format\": \"格式\",\n \"font.sample_text_placeholder\": \"输入自定义文本...\"\n}, dt = {\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 \"common.retry\": \"Retry\",\n // ─────── accessibility ───────\n \"accessibility.previousFile\": \"Previous file\",\n \"accessibility.nextFile\": \"Next file\",\n \"accessibility.closePreview\": \"Close preview\",\n \"accessibility.downloadFile\": \"Download file\",\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.outline\": \"Outline\",\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 \"image.decode_failed\": \"Failed to decode 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 \"video.format_not_supported\": \"Browser does not support {format} format. Please convert to MP4/WebM\",\n \"video.unsupported_title\": \"This video format cannot be played in the browser\",\n \"video.unsupported_detail\": \"{format} is a container/codec that browsers do not natively support (typical for AVI / WMV / FLV and some MKV files). Please download and play it in a local player, or convert to MP4 (H.264 + AAC).\",\n \"video.codec_not_supported_detail\": \"The video or audio codec ({codecs}) cannot be decoded by the browser. Please convert to MP4 (H.264 + AAC) before previewing.\",\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 // ─────── font ───────\n \"font.loading\": \"Loading font...\",\n \"font.load_failed\": \"Failed to load font\",\n \"font.parse_failed\": \"Failed to parse font\",\n \"font.metadata_loading\": \"Parsing metadata...\",\n \"font.metadata_unavailable\": \"Metadata unavailable\",\n \"font.meta.family\": \"Family\",\n \"font.meta.subfamily\": \"Subfamily\",\n \"font.meta.version\": \"Version\",\n \"font.meta.designer\": \"Designer\",\n \"font.meta.glyphs\": \"Glyphs\",\n \"font.meta.format\": \"Format\",\n \"font.sample_text_placeholder\": \"Type custom text...\"\n}, k = {\n \"zh-CN\": ct,\n \"en-US\": dt\n}, ft = /\\{(\\w+)\\}/g;\nfunction pt(e, t) {\n return t ? e.replace(ft, (o, n) => {\n const a = t[n];\n return a === void 0 ? `{${n}}` : String(a);\n }) : e;\n}\nfunction Bt(e) {\n var i;\n const t = e.fallbackLocale ?? \"zh-CN\", o = k[e.locale] ?? k[t] ?? k[\"zh-CN\"], n = (i = e.messages) == null ? void 0 : i[e.locale], a = n ? { ...o, ...n } : o, r = k[\"zh-CN\"];\n return (s, l) => {\n const c = a[s] ?? r[s] ?? s;\n return pt(c, l);\n };\n}\nconst ut = {\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 heic: \"image/heic\",\n heif: \"image/heif\",\n avif: \"image/avif\",\n tif: \"image/tiff\",\n tiff: \"image/tiff\",\n // RAW 格式\n cr2: \"image/x-canon-cr2\",\n nef: \"image/x-nikon-nef\",\n arw: \"image/x-sony-arw\",\n dng: \"image/x-adobe-dng\",\n raf: \"image/x-fuji-raf\",\n orf: \"image/x-olympus-orf\",\n // 其他专业格式\n psd: \"image/vnd.adobe.photoshop\",\n jp2: \"image/jp2\",\n jpx: \"image/jpx\",\n j2k: \"image/jp2\",\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 // 其他\n msg: \"application/vnd.ms-outlook\",\n epub: \"application/epub+zip\",\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 csv: \"text/csv\",\n tsv: \"text/tab-separated-values\",\n xml: \"application/xml\",\n json: \"application/json\",\n md: \"text/markdown\",\n markdown: \"text/markdown\",\n txt: \"text/plain\",\n zip: \"application/zip\",\n // 字体\n ttf: \"font/ttf\",\n otf: \"font/otf\",\n woff: \"font/woff\",\n woff2: \"font/woff2\",\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/mp4\",\n \"3gp\": \"video/3gpp\",\n flv: \"video/x-flv\",\n // 音频\n mp3: \"audio/mpeg\",\n wav: \"audio/wav\",\n m4a: \"audio/mp4\",\n flac: \"audio/flac\",\n aac: \"audio/aac\",\n // 字幕\n srt: \"application/x-subrip\",\n vtt: \"text/vtt\",\n lrc: \"application/x-lrc\",\n elrc: \"application/x-lrc\",\n ass: \"text/x-ssa\",\n ssa: \"text/x-ssa\",\n ttml: \"application/ttml+xml\",\n dfxp: \"application/ttml+xml\"\n};\nfunction mt(e) {\n const t = e.toLowerCase();\n return ut[t] || \"application/octet-stream\";\n}\nfunction gt(e) {\n var o;\n const t = ((o = e.split(\".\").pop()) == null ? void 0 : o.toLowerCase()) || \"\";\n return mt(t);\n}\nfunction ht(e) {\n return [\n \"image/heic\",\n \"image/heif\",\n \"image/avif\",\n \"image/tiff\",\n \"image/x-canon-cr2\",\n \"image/x-nikon-nef\",\n \"image/x-sony-arw\",\n \"image/x-adobe-dng\",\n \"image/x-fuji-raf\",\n \"image/x-olympus-orf\",\n \"image/vnd.adobe.photoshop\",\n \"image/jp2\",\n \"image/jpx\"\n ].includes(e);\n}\nfunction Vt(e) {\n return e.startsWith(\"image/x-\") && [\"cr2\", \"nef\", \"arw\", \"dng\", \"raf\", \"orf\"].some((t) => e.includes(t));\n}\nconst j = /* @__PURE__ */ new Map(), S = /* @__PURE__ */ new Map();\nfunction Zt(e, t) {\n j.set(e, t);\n}\nfunction Ht(e) {\n return j.get(e) || null;\n}\nfunction Ot(e) {\n return j.has(e);\n}\nasync function qt(e) {\n if (S.has(e))\n return S.get(e);\n if (!ht(e))\n return null;\n try {\n let t = null;\n return e === \"image/heic\" || e === \"image/heif\" ? t = (await import(\"./heicLoader-CH_raQNn.js\")).default : e === \"image/avif\" ? t = (await import(\"./avifLoader-BP3fgcMm.js\")).default : e === \"image/tiff\" ? t = (await import(\"./tiffLoader-CTFKVLqJ.js\")).default : e === \"image/x-canon-cr2\" || e === \"image/x-nikon-nef\" || e === \"image/x-sony-arw\" || e === \"image/x-adobe-dng\" || e === \"image/x-fuji-raf\" || e === \"image/x-olympus-orf\" ? t = (await import(\"./rawLoader-0mLvxCNp.js\")).default : e === \"image/vnd.adobe.photoshop\" ? t = (await import(\"./psdLoader-Doxw3mWm.js\")).default : (e === \"image/jp2\" || e === \"image/jpx\") && (t = (await import(\"./jp2Loader-Bn-qPMbD.js\")).default), t && S.set(e, t), t;\n } catch (t) {\n return console.warn(`Failed to load image decoder for ${e}:`, t), null;\n }\n}\nasync function Gt(e) {\n if (e.type && e.type !== \"application/octet-stream\")\n return e.type;\n const t = gt(e.name);\n if (t !== \"application/octet-stream\")\n return t;\n if (e instanceof Blob || e instanceof File) {\n const o = await xt(e);\n if (o !== \"application/octet-stream\")\n return o;\n }\n return \"application/octet-stream\";\n}\nasync function xt(e) {\n try {\n const t = new Uint8Array(await e.slice(0, 12).arrayBuffer());\n if (t[4] === 102 && t[5] === 116 && t[6] === 121 && t[7] === 112) {\n const o = String.fromCharCode(...t.slice(8, 12));\n if (o === \"heic\" || o === \"heix\" || o === \"mif1\")\n return \"image/heic\";\n }\n if (t[0] === 73 && t[1] === 73 && t[2] === 42 && t[3] === 0 || t[0] === 77 && t[1] === 77 && t[2] === 0 && t[3] === 42)\n return \"image/tiff\";\n if (t[4] === 102 && t[5] === 116 && t[6] === 121 && t[7] === 112 && String.fromCharCode(...t.slice(8, 12)) === \"avif\")\n return \"image/avif\";\n if (t[0] === 56 && t[1] === 66 && t[2] === 80 && t[3] === 83)\n return \"image/vnd.adobe.photoshop\";\n if (t[0] === 255 && t[1] === 79 && t[2] === 255 && t[3] === 81)\n return \"image/jp2\";\n } catch (t) {\n console.warn(\"Failed to detect image format by magic number:\", t);\n }\n return \"application/octet-stream\";\n}\nexport {\n ut as EXTENSION_TO_MIME,\n vt as SUPPORTED_FILE_TYPES,\n At as buildZipTree,\n k as builtInMessages,\n Wt as configurePdfWorker,\n Ut as convertCsvToSpreadsheetData,\n It as convertWorkbookToSpreadsheetData,\n Et as createFetcher,\n Bt as createTranslator,\n $ as decodeText,\n B as decodeUtf8,\n Gt as detectImageFormat,\n Lt as downloadFileWithFetcher,\n jt as fetchAsBlobUrl,\n zt as fetchTextUtf8,\n Ct as formatFileSize,\n Pt as formatSubtitleTime,\n kt as formatTime,\n U as getFileNameFromUrl,\n Ft as getFileType,\n yt as getLanguageFromFileName,\n Ht as getLoader,\n qt as getLoaderForMimeType,\n mt as getMimeTypeFromExtension,\n gt as getMimeTypeFromFileName,\n _t as getVideoMimeType,\n Mt as guessCsvDelimiter,\n Ot as hasLoader,\n M as inferMimeType,\n ht as isAdvancedImageFormat,\n Vt as isRawFormat,\n Dt as listZipEntries,\n Nt as loadZip,\n W as normalizeFile,\n wt as normalizeFiles,\n St as parseCsv,\n Tt as parseSubtitle,\n Rt as readZipEntryBlob,\n $t as readZipEntryText,\n Zt as registerLoader\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(不入 ref,避免切换文件时残留旧值)\n * - 返回 true:用 fetcher 拉成 blob: URL,组件卸载或 file 变化时 revoke\n */\nexport function useResolvedUrl(file: Ref<PreviewFile | undefined>): ComputedRef<string> {\n const ctx = useRequestContext();\n const blobUrlRef = 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 || !need) {\n cleanup();\n blobUrlRef.value = '';\n return;\n }\n let cancelled = false;\n onCleanup(() => {\n cancelled = true;\n });\n blobUrlRef.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 blobUrlRef.value = blobUrl;\n } catch (err) {\n if (!cancelled) {\n console.error('[file-preview] resolve blob url failed:', err);\n blobUrlRef.value = f.url;\n }\n }\n },\n { immediate: true },\n );\n\n onBeforeUnmount(cleanup);\n\n // 同步派生:非 blob 模式始终直接返回 file.url,确保切换文件时不会残留上一帧的 URL\n return computed(() => {\n const f = file.value;\n if (!f) return '';\n const need = !!ctx.value.shouldFetchAsBlob?.(f);\n if (!need) return f.url;\n return blobUrlRef.value;\n });\n}\n","<script setup lang=\"ts\">\nimport { useTranslator } from '../composables/useTranslator';\nconst { t } = useTranslator();\n</script>\n\n<template>\n <div class=\"vfp-flex vfp-items-center vfp-justify-center vfp-w-full vfp-h-full vfp-text-fg-muted\">\n <div class=\"vfp-flex vfp-flex-col vfp-items-center vfp-gap-3\">\n <div class=\"vfp-w-8 vfp-h-8 vfp-rounded-full vfp-border-2 vfp-border-fg-muted vfp-border-t-transparent vfp-animate-spin\" />\n <span class=\"vfp-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'));\nexport const FontRenderer = wrap(() => import('./Font/index.vue'));\n","import type { Component } from 'vue';\nimport type { FileType, PreviewFile } from '@eternalheart/file-preview-core';\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 FontRenderer,\n} from './lazy';\n\n/**\n * 渲染器上下文:主组件传递给 getProps 的环境信息\n */\nexport interface RendererContext {\n /** 解析后的 URL(可能是 blob URL) */\n resolvedUrl: string;\n /** ZIP 嵌套深度 */\n zipNestingDepth: number;\n /** 当前文件对象 */\n currentFile: PreviewFile;\n}\n\n/**\n * 内置渲染器配置\n */\nexport interface BuiltinRendererConfig {\n /** 匹配的文件类型 */\n fileType: FileType;\n /** 渲染器组件(懒加载) */\n component: Component;\n /** 计算传给组件的 props */\n getProps: (ctx: RendererContext) => Record<string, any>;\n}\n\n/**\n * 内置渲染器注册表\n *\n * 新增渲染器:\n * 1. 在 src/renderers/<Type>/index.vue 创建渲染器\n * 2. 在 src/renderers/lazy.ts 添加懒加载导出\n * 3. 在此注册表添加配置\n *\n * 主组件 FilePreviewContent.vue 无需修改\n */\nexport const BUILTIN_RENDERERS: BuiltinRendererConfig[] = [\n {\n fileType: 'image',\n component: ImageRenderer,\n getProps: (ctx) => ({\n url: ctx.resolvedUrl,\n fileSize: ctx.currentFile.size,\n file: ctx.currentFile,\n }),\n },\n {\n fileType: 'pdf',\n component: PdfRenderer,\n getProps: (ctx) => ({\n url: ctx.resolvedUrl,\n }),\n },\n {\n fileType: 'docx',\n component: DocxRenderer,\n getProps: (ctx) => ({\n url: ctx.resolvedUrl,\n }),\n },\n {\n fileType: 'xlsx',\n component: XlsxRenderer,\n getProps: (ctx) => ({\n url: ctx.resolvedUrl,\n }),\n },\n {\n fileType: 'pptx',\n component: PptxRenderer,\n getProps: (ctx) => ({\n url: ctx.resolvedUrl,\n }),\n },\n {\n fileType: 'msg',\n component: MsgRenderer,\n getProps: (ctx) => ({\n url: ctx.resolvedUrl,\n }),\n },\n {\n fileType: 'epub',\n component: EpubRenderer,\n getProps: (ctx) => ({\n url: ctx.resolvedUrl,\n }),\n },\n {\n fileType: 'mobi',\n component: MobiRenderer,\n getProps: (ctx) => ({\n url: ctx.resolvedUrl,\n }),\n },\n {\n fileType: 'video',\n component: VideoRenderer,\n getProps: (ctx) => ({\n url: ctx.resolvedUrl,\n fileName: ctx.currentFile.name,\n }),\n },\n {\n fileType: 'audio',\n component: AudioRenderer,\n getProps: (ctx) => ({\n url: ctx.resolvedUrl,\n fileName: ctx.currentFile.name,\n }),\n },\n {\n fileType: 'markdown',\n component: MarkdownRenderer,\n getProps: (ctx) => ({\n url: ctx.resolvedUrl,\n }),\n },\n {\n fileType: 'json',\n component: JsonRenderer,\n getProps: (ctx) => ({\n url: ctx.resolvedUrl,\n fileName: ctx.currentFile.name,\n }),\n },\n {\n fileType: 'csv',\n component: CsvRenderer,\n getProps: (ctx) => ({\n url: ctx.resolvedUrl,\n fileName: ctx.currentFile.name,\n }),\n },\n {\n fileType: 'xml',\n component: XmlRenderer,\n getProps: (ctx) => ({\n url: ctx.resolvedUrl,\n fileName: ctx.currentFile.name,\n }),\n },\n {\n fileType: 'subtitle',\n component: SubtitleRenderer,\n getProps: (ctx) => ({\n url: ctx.resolvedUrl,\n fileName: ctx.currentFile.name,\n }),\n },\n {\n fileType: 'zip',\n component: ZipRenderer,\n getProps: (ctx) => ({\n url: ctx.resolvedUrl,\n nestingDepth: ctx.zipNestingDepth,\n }),\n },\n {\n fileType: 'text',\n component: TextRenderer,\n getProps: (ctx) => ({\n url: ctx.resolvedUrl,\n fileName: ctx.currentFile.name,\n }),\n },\n {\n fileType: 'font',\n component: FontRenderer,\n getProps: (ctx) => ({\n url: ctx.resolvedUrl,\n }),\n },\n];\n","<script setup lang=\"ts\">\nimport type { RendererHandle } from '../base.types';\nimport type { ToolbarGroup } from '../toolbar.types';\n\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\nconst getToolbarGroups = (): ToolbarGroup[] => [];\n\ndefineExpose<RendererHandle>({\n getToolbarGroups,\n});\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-6 vfp-gap-4\"\n >\n <div\n class=\"vfp-w-20 vfp-h-20 vfp-rounded-full vfp-bg-surface-2 vfp-flex vfp-items-center vfp-justify-center\"\n >\n <FileQuestion class=\"vfp-w-10 vfp-h-10 vfp-text-fg-secondary\" />\n </div>\n\n <div class=\"vfp-text-fg-primary vfp-text-center\">\n <p class=\"vfp-text-lg 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-4 vfp-py-2 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, watch, onMounted, onBeforeUnmount } from 'vue';\nimport { ChevronLeft, ChevronRight } from 'lucide-vue-next';\n\ninterface Props {\n /** 父级内容容器 DOM(mousemove 监听挂到它身上) */\n containerRef: HTMLDivElement | null;\n hasPrev: boolean;\n hasNext: boolean;\n /** 用于触发\"显示并重置定时器\"的外部信号,通常传 currentIndex */\n resetKey: number;\n}\n\nconst props = defineProps<Props>();\nconst emit = defineEmits<{ prev: []; next: [] }>();\n\nconst NAV_HIDE_DELAY = 2000;\nconst visible = ref(true);\nlet hideTimer: number | null = null;\n\nconst scheduleHide = () => {\n if (hideTimer !== null) clearTimeout(hideTimer);\n hideTimer = window.setTimeout(() => {\n visible.value = false;\n }, NAV_HIDE_DELAY);\n};\n\nconst show = () => {\n if (!visible.value) visible.value = true;\n scheduleHide();\n};\n\nlet attached: HTMLDivElement | null = null;\nconst detach = () => {\n if (attached) {\n attached.removeEventListener('mousemove', show);\n attached = null;\n }\n};\nconst attach = (el: HTMLDivElement | null) => {\n if (attached === el) return;\n detach();\n if (el) {\n el.addEventListener('mousemove', show);\n attached = el;\n }\n};\n\nwatch(() => props.containerRef, (el) => attach(el), { immediate: true });\nwatch(() => props.resetKey, () => {\n visible.value = true;\n scheduleHide();\n});\n\nonMounted(() => {\n scheduleHide();\n});\n\nonBeforeUnmount(() => {\n if (hideTimer !== null) clearTimeout(hideTimer);\n detach();\n});\n</script>\n\n<template>\n <button\n v-if=\"hasPrev\"\n :style=\"{\n opacity: visible ? 1 : 0,\n transform: visible ? 'translateY(-50%)' : 'translateY(-50%) translateX(-20px)',\n pointerEvents: visible ? '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('prev')\"\n @mouseenter=\"show\"\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=\"hasNext\"\n :style=\"{\n opacity: visible ? 1 : 0,\n transform: visible ? 'translateY(-50%)' : 'translateY(-50%) translateX(20px)',\n pointerEvents: visible ? '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('next')\"\n @mouseenter=\"show\"\n >\n <ChevronRight class=\"vfp-w-5 vfp-h-5 md:vfp-w-6 md:vfp-h-6\" />\n </button>\n</template>\n","<script setup lang=\"ts\">\nimport { ref, computed, watch, onMounted, onBeforeUnmount, toRef, provide } from 'vue';\nimport { X, Download } 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 type { RendererHandle } from './renderers/base.types';\nimport { BUILTIN_RENDERERS } from './renderers/registry';\n// Unsupported 体量极小且每次回退都用,直接静态打包到主入口\nimport UnsupportedRenderer from './renderers/Unsupported/index.vue';\nimport NavArrows from './components/NavArrows.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 onClose?: () => void;\n /** 是否显示下载按钮,默认 true */\n showDownload?: boolean;\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 onClose: undefined,\n showDownload: true,\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 contentRef = ref<HTMLDivElement | null>(null);\nconst rootRef = ref<HTMLDivElement | null>(null);\n\n// 渲染器 ref 和工具栏事件订阅\nconst rendererRef = ref<RendererHandle | null>(null);\nconst rendererToolbarGroups = ref<ToolbarGroup[]>([]);\nlet unsubscribeToolbar: (() => void) | null = null;\n\nconst cleanupSubscription = () => {\n if (unsubscribeToolbar) {\n unsubscribeToolbar();\n unsubscribeToolbar = null;\n }\n};\n\n// 当渲染器变化时,重新订阅工具栏事件\nwatch(rendererRef, (newRenderer) => {\n cleanupSubscription();\n rendererToolbarGroups.value = [];\n\n if (!newRenderer) return;\n\n // 如果渲染器支持事件机制,订阅事件\n if (newRenderer.onToolbarChange) {\n unsubscribeToolbar = newRenderer.onToolbarChange(() => {\n rendererToolbarGroups.value = newRenderer.getToolbarGroups?.() ?? [];\n });\n }\n\n // 立即获取一次初始工具栏配置\n rendererToolbarGroups.value = newRenderer.getToolbarGroups?.() ?? [];\n});\n\nonBeforeUnmount(() => {\n cleanupSubscription();\n});\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// 从注册表中查找匹配当前 fileType 的内置渲染器\nconst builtinRenderer = computed(() =>\n BUILTIN_RENDERERS.find((r) => r.fileType === fileType.value) ?? null,\n);\n\n// 计算传给内置渲染器的 props\nconst builtinRendererProps = computed(() => {\n if (!builtinRenderer.value || !currentFile.value) return {};\n return builtinRenderer.value.getProps({\n resolvedUrl: resolvedUrl.value,\n zipNestingDepth: props.zipNestingDepth,\n currentFile: currentFile.value,\n });\n});\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 // 重置 epub 状态\n epubCurrent.value = 0;\n epubTotal.value = 0;\n epubFullWidth.value = false;\n // 重置 mobi 状态\n mobiCurrent.value = 0;\n mobiTotal.value = 0;\n mobiFullWidth.value = false;\n }\n);\n\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 (props.mode === 'modal') {\n window.removeEventListener('keydown', handleKeyDown);\n } else if (rootRef.value) {\n rootRef.value.removeEventListener('keydown', handleKeyDown as EventListener);\n }\n});\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.onClose);\n\nconst epubCurrent = ref(0);\nconst epubTotal = ref(0);\nconst epubFullWidth = ref(false);\n\nconst mobiCurrent = ref(0);\nconst mobiTotal = ref(0);\nconst mobiFullWidth = ref(false);\n\n// 防止 ESLint 报未使用警告(仍由模板中的事件回调使用)\nvoid epubCurrent; void epubTotal; void epubFullWidth;\nvoid mobiCurrent; void mobiTotal; void mobiFullWidth;\n\n// 工具栏配置 — 各 Renderer 自行通过 ref 暴露 getToolbarGroups 和 onToolbarChange\nconst toolGroups = computed(() => {\n if (customRenderer.value) {\n return (\n customRenderer.value.getToolbarGroups?.(currentFile.value!, customCtx.value) ?? []\n );\n }\n // 所有内置渲染器都通过事件驱动机制提供工具栏\n return rendererToolbarGroups.value;\n});\n\n// 操作组:下载、关闭(通用,不属于任何 Renderer)\nconst actionGroups = computed<ToolbarGroup[]>(() => {\n const groups: ToolbarGroup[] = [];\n if (props.showDownload) {\n groups.push({\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 :class=\"{ active: (item as ToolbarButtonItem).active }\"\n :data-tooltip=\"(item as ToolbarButtonItem).tooltip\"\n :disabled=\"(item as ToolbarButtonItem).disabled\"\n :aria-pressed=\"(item as ToolbarButtonItem).active\"\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 :class=\"{ active: (item as ToolbarButtonItem).active }\"\n :data-tooltip=\"(item as ToolbarButtonItem).tooltip\"\n :disabled=\"(item as ToolbarButtonItem).disabled\"\n :aria-pressed=\"(item as ToolbarButtonItem).active\"\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 :class=\"{ active: (item as ToolbarButtonItem).active }\"\n :data-tooltip=\"(item as ToolbarButtonItem).tooltip\"\n :disabled=\"(item as ToolbarButtonItem).disabled\"\n :aria-pressed=\"(item as ToolbarButtonItem).active\"\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 :class=\"{ active: (item as ToolbarButtonItem).active }\"\n :data-tooltip=\"(item as ToolbarButtonItem).tooltip\"\n :disabled=\"(item as ToolbarButtonItem).disabled\"\n :aria-pressed=\"(item as ToolbarButtonItem).active\"\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 :key=\"currentFile?.url\"\n >\n <template v-if=\"currentFile\">\n <component :is=\"customRendererComponent\" v-if=\"customRendererComponent\" :file=\"currentFile\" :ctx=\"customCtx\" />\n <template v-else>\n <!-- ZIP 嵌套深度超限:fallback 到 Unsupported -->\n <UnsupportedRenderer\n v-if=\"fileType === 'zip' && props.zipNestingDepth >= MAX_ZIP_NESTING_DEPTH\"\n :file-name=\"currentFile.name\"\n :file-type=\"currentFile.type\"\n @download=\"handleDownload\"\n />\n <!-- 从注册表查找匹配的渲染器 -->\n <component\n v-else-if=\"builtinRenderer\"\n :is=\"builtinRenderer.component\"\n ref=\"rendererRef\"\n v-bind=\"builtinRendererProps\"\n />\n <!-- 未匹配:fallback 到 UnsupportedRenderer -->\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 <!-- 左右导航箭头:state 隔离在 NavArrows 内部,避免 mousemove/timer 引起整树 patch -->\n <NavArrows\n v-if=\"!headless && normalizedFiles.length > 1\"\n :container-ref=\"contentRef\"\n :has-prev=\"currentIndex > 0\"\n :has-next=\"currentIndex < normalizedFiles.length - 1\"\n :reset-key=\"currentIndex\"\n @prev=\"emit('navigate', currentIndex - 1)\"\n @next=\"emit('navigate', currentIndex + 1)\"\n />\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.active,\n.toolbar-btn.active:hover,\n.toolbar-btn.active: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\n/* 移动端隐藏 tooltip */\n@media (max-width: 1023px) {\n .toolbar-btn[data-tooltip]::after,\n .toolbar-btn[data-tooltip]::before {\n display: none !important;\n }\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 /** 是否显示下载按钮,默认 true */\n showDownload?: boolean;\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 showDownload: true,\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 :on-close=\"() => emit('close')\"\n :show-download=\"showDownload\"\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 onClose?: () => void;\n /** 是否显示下载按钮,默认 true */\n showDownload?: boolean;\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 onClose: undefined,\n showDownload: true,\n});\n\nconst emit = defineEmits<{\n (e: 'navigate', index: number): void;\n (e: 'custom-event', payload: CustomRendererEventPayload): void;\n (e: 'close'): 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 :on-close=\"onClose\"\n :show-download=\"showDownload\"\n @navigate=\"(i) => emit('navigate', i)\"\n @custom-event=\"(p) => emit('custom-event', p)\"\n @close=\"() => emit('close')\"\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 SUPPORTED_FILE_TYPES,\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":["vt","U","n","M","t","W","wt","Ft","a","o","yt","r","_t","Ct","kt","Mt","St","s","l","d","p","f","$","zt","V","Z","Et","jt","Lt","L","Pt","P","H","O","T","i","c","u","z","R","q","m","G","g","v","h","x","b","F","N","D","w","_","C","y","X","J","K","Tt","Nt","I","Dt","At","Rt","Q","Y","tt","et","ot","E","nt","at","it","rt","st","lt","A","It","Ut","Wt","ct","dt","k","ft","pt","Bt","ut","mt","gt","ht","S","qt","Gt","xt","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","blobUrlRef","ref","createdBlobUrl","cleanup","watch","need","_b","_a","fetcher","_old","onCleanup","cancelled","blobUrl","fetchAsBlobUrl","err","onBeforeUnmount","_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","FontRenderer","BUILTIN_RENDERERS","emit","__emit","__expose","_createVNode","FileQuestion","_hoisted_4","__props","_hoisted_5","Download","_createTextVNode","NAV_HIDE_DELAY","props","visible","hideTimer","scheduleHide","show","attached","detach","attach","el","onMounted","_normalizeStyle","ChevronLeft","ChevronRight","MAX_ZIP_NESTING_DEPTH","toRef","systemDark","mediaQueryCleanup","mql","handler","e","resolvedTheme","contentRef","rootRef","rendererRef","rendererToolbarGroups","unsubscribeToolbar","cleanupSubscription","newRenderer","normalizedFiles","normalizeFiles","currentFile","resolvedUrl","customRenderer","customRendererComponent","customCtx","fileType","getFileType","builtinRenderer","builtinRendererProps","emitCustom","name","payload","ev","epubCurrent","epubTotal","epubFullWidth","mobiCurrent","mobiTotal","mobiFullWidth","handleKeyDown","handleDownload","downloadFileWithFetcher","showCloseButton","toolGroups","actionGroups","groups","hasToolGroups","_hoisted_6","_hoisted_7","_Fragment","_renderList","group","gi","item","ii","_normalizeClass","_createBlock","_resolveDynamicComponent","_hoisted_9","_hoisted_12","_hoisted_13","UnsupportedRenderer","_mergeProps","NavArrows","_cache","$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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"}
|