@eternalheart/react-file-preview 1.5.0 → 1.5.2
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-CTghYlSh.mjs → index-37FMdXja.mjs} +2 -2
- package/lib/chunks/{index-CTghYlSh.mjs.map → index-37FMdXja.mjs.map} +1 -1
- package/lib/chunks/{index-Dc6q1OKl.mjs → index-7aRho9r4.mjs} +3 -3
- package/lib/chunks/{index-Dc6q1OKl.mjs.map → index-7aRho9r4.mjs.map} +1 -1
- package/lib/chunks/{index-Da3FN2-3.mjs → index-BXa7r4uK.mjs} +3 -3
- package/lib/chunks/{index-Da3FN2-3.mjs.map → index-BXa7r4uK.mjs.map} +1 -1
- package/lib/chunks/{index-CKdQL1Bk.mjs → index-BaSsmMZP.mjs} +2 -2
- package/lib/chunks/{index-CKdQL1Bk.mjs.map → index-BaSsmMZP.mjs.map} +1 -1
- package/lib/chunks/{index-DzCLf1Db.mjs → index-Bn0NJNzq.mjs} +2 -2
- package/lib/chunks/{index-DzCLf1Db.mjs.map → index-Bn0NJNzq.mjs.map} +1 -1
- package/lib/chunks/{index-CQYrhe7Z.mjs → index-Btsr3v83.mjs} +2 -2
- package/lib/chunks/{index-CQYrhe7Z.mjs.map → index-Btsr3v83.mjs.map} +1 -1
- package/lib/chunks/{index-CuWzRQZw.mjs → index-C2uu09Eb.mjs} +2 -2
- package/lib/chunks/{index-CuWzRQZw.mjs.map → index-C2uu09Eb.mjs.map} +1 -1
- package/lib/chunks/{index-CRZqNMQ7.mjs → index-C5o_T3Es.mjs} +18 -19
- package/lib/chunks/index-C5o_T3Es.mjs.map +1 -0
- package/lib/chunks/index-CMehLA91.mjs +587 -0
- package/lib/chunks/index-CMehLA91.mjs.map +1 -0
- package/lib/chunks/{index-2sX2d4iv.mjs → index-CTEgp9x8.mjs} +2 -2
- package/lib/chunks/{index-2sX2d4iv.mjs.map → index-CTEgp9x8.mjs.map} +1 -1
- package/lib/chunks/{index-Cz23v-TW.mjs → index-Cbp94jbP.mjs} +20 -20
- package/lib/chunks/{index-Cz23v-TW.mjs.map → index-Cbp94jbP.mjs.map} +1 -1
- package/lib/chunks/{index-Bdj8_B80.mjs → index-CmK5E5Oa.mjs} +3 -3
- package/lib/chunks/{index-Bdj8_B80.mjs.map → index-CmK5E5Oa.mjs.map} +1 -1
- package/lib/chunks/index-CyBXARuf.mjs +5215 -0
- package/lib/chunks/index-CyBXARuf.mjs.map +1 -0
- package/lib/chunks/{index-WLepq2g2.mjs → index-DTNdG1bB.mjs} +3 -3
- package/lib/chunks/{index-WLepq2g2.mjs.map → index-DTNdG1bB.mjs.map} +1 -1
- package/lib/chunks/{index-CCcZzLUM.mjs → index-DfzgQFfx.mjs} +2 -2
- package/lib/chunks/{index-CCcZzLUM.mjs.map → index-DfzgQFfx.mjs.map} +1 -1
- package/lib/chunks/{index-D-Is8qvU.mjs → index-DsIUJXpz.mjs} +8 -9
- package/lib/chunks/index-DsIUJXpz.mjs.map +1 -0
- package/lib/chunks/{index-OXjOFggq.mjs → index-DxUP4apX.mjs} +2 -2
- package/lib/chunks/{index-OXjOFggq.mjs.map → index-DxUP4apX.mjs.map} +1 -1
- package/lib/chunks/{index-FomaQSaL.mjs → index-HRUhzosx.mjs} +2 -2
- package/lib/chunks/{index-FomaQSaL.mjs.map → index-HRUhzosx.mjs.map} +1 -1
- package/lib/chunks/{index-_B5marES.mjs → index-VnjkEX5p.mjs} +2 -2
- package/lib/chunks/{index-_B5marES.mjs.map → index-VnjkEX5p.mjs.map} +1 -1
- package/lib/chunks/{index-CuTz7dbd.mjs → index-qWLZuYn6.mjs} +2 -2
- package/lib/chunks/{index-CuTz7dbd.mjs.map → index-qWLZuYn6.mjs.map} +1 -1
- package/lib/chunks/{useShikiHighlight-Bbs8Fbqs.mjs → useShikiHighlight-BG7pCfB5.mjs} +2 -2
- package/lib/chunks/{useShikiHighlight-Bbs8Fbqs.mjs.map → useShikiHighlight-BG7pCfB5.mjs.map} +1 -1
- package/lib/index.cjs +20 -20
- package/lib/index.cjs.map +1 -1
- package/lib/index.css +1 -1
- package/lib/index.mjs +1 -1
- package/lib/renderers/Audio/index.d.ts.map +1 -1
- package/lib/renderers/Csv/index.d.ts +0 -1
- package/lib/renderers/Csv/index.d.ts.map +1 -1
- package/lib/renderers/Xlsx/index.d.ts +0 -1
- package/lib/renderers/Xlsx/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/lib/chunks/index-CRZqNMQ7.mjs.map +0 -1
- package/lib/chunks/index-D-Is8qvU.mjs.map +0 -1
- package/lib/chunks/index-DoGKcq9y.mjs +0 -531
- package/lib/chunks/index-DoGKcq9y.mjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-Cz23v-TW.mjs","sources":["../../../file-preview-core/lib/index.mjs","../../src/i18n/LocaleContext.tsx","../../src/ThemeContext.tsx","../../src/RequestContext.tsx","../../src/renderers/Unsupported/index.tsx","../../src/hooks/useKeyboardNavigation.ts","../../src/hooks/useThemeMode.ts","../../src/components/preview/ToolbarButton.tsx","../../src/toolbar/renderItems.tsx","../../src/components/preview/FilePreviewToolbar.tsx","../../src/components/preview/RendererError.tsx","../../src/components/preview/RendererErrorBoundary.tsx","../../src/renderers/RendererLoading.tsx","../../src/components/preview/FilePreviewRenderer.tsx","../../src/components/preview/NavArrows.tsx","../../src/renderers/lazy.tsx","../../src/renderers/registry.tsx","../../src/FilePreviewContent.tsx","../../src/FilePreviewModal.tsx","../../src/FilePreviewEmbed.tsx","../../src/utils/pdfConfig.ts","../../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 React, { createContext, useContext, useMemo } from 'react';\nimport {\n createTranslator,\n type Locale,\n type Messages,\n type Translator,\n} from '@eternalheart/file-preview-core';\n\nexport interface LocaleContextValue {\n locale: Locale;\n t: Translator;\n}\n\nconst LocaleContext = createContext<LocaleContextValue | null>(null);\n\nexport interface LocaleProviderProps {\n /** 当前语言,默认 'zh-CN' */\n locale?: Locale;\n /** 用户自定义字典,浅合并到内置字典之上 */\n messages?: Partial<Record<Locale, Partial<Messages>>>;\n children: React.ReactNode;\n}\n\nexport const LocaleProvider: React.FC<LocaleProviderProps> = ({\n locale = 'zh-CN',\n messages,\n children,\n}) => {\n const value = useMemo<LocaleContextValue>(() => {\n const t = createTranslator({ locale, messages });\n return { locale, t };\n }, [locale, messages]);\n\n return <LocaleContext.Provider value={value}>{children}</LocaleContext.Provider>;\n};\n\n/**\n * 兜底 translator(当组件被脱离 LocaleProvider 直接使用时)\n * 保持模块级单例,避免每次调用重建\n */\nlet fallbackTranslator: Translator | null = null;\nfunction getFallbackTranslator(): Translator {\n if (!fallbackTranslator) {\n fallbackTranslator = createTranslator({ locale: 'zh-CN' });\n }\n return fallbackTranslator;\n}\n\n/**\n * 获取翻译函数。任意位置调用都安全:\n * - 在 LocaleProvider 下 → 用 provider 提供的 translator\n * - 否则 → 回落到 zh-CN 兜底 translator\n */\nexport function useTranslator(): Translator {\n const ctx = useContext(LocaleContext);\n return ctx?.t ?? getFallbackTranslator();\n}\n\n/**\n * 获取当前 locale。在 Provider 之外返回 'zh-CN'。\n */\nexport function useLocale(): Locale {\n const ctx = useContext(LocaleContext);\n return ctx?.locale ?? 'zh-CN';\n}\n","import React, { createContext, useContext } from 'react';\n\n/** 已解析的主题(auto 在 FilePreviewContent 里被解析过) */\nexport type ResolvedTheme = 'dark' | 'light';\n\nconst ThemeContext = createContext<ResolvedTheme | null>(null);\n\nexport interface ThemeProviderProps {\n theme: ResolvedTheme;\n children: React.ReactNode;\n}\n\nexport const ThemeProvider: React.FC<ThemeProviderProps> = ({ theme, children }) => {\n return <ThemeContext.Provider value={theme}>{children}</ThemeContext.Provider>;\n};\n\n/**\n * 获取已解析的主题('dark' | 'light')。\n * Provider 之外默认 'dark'(保持组件历史默认行为)。\n *\n * renderer 需要切第三方库的 theme prop(如 react-syntax-highlighter 的 style、\n * shiki 的 theme 选项)时使用;不要用它做 className 分支 —— class 由 CSS 变量\n * 通过根容器 [data-theme] 自动切换。\n */\nexport function useResolvedTheme(): ResolvedTheme {\n return useContext(ThemeContext) ?? 'dark';\n}\n","import React, { createContext, useContext, useEffect, useMemo, useRef, useState } from 'react';\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 defaultValue: RequestContextValue = {\n fetcher: (url, init) => fetch(url, init),\n};\n\nconst RequestContext = createContext<RequestContextValue>(defaultValue);\n\nexport interface RequestProviderProps {\n requestInit?: RequestInitFactory;\n requestHandler?: RequestHandler;\n shouldFetchAsBlob?: ShouldFetchAsBlob;\n children: React.ReactNode;\n}\n\nexport const RequestProvider: React.FC<RequestProviderProps> = ({\n requestInit,\n requestHandler,\n shouldFetchAsBlob,\n children,\n}) => {\n const value = useMemo<RequestContextValue>(\n () => ({\n fetcher: createFetcher({ requestInit, requestHandler }),\n shouldFetchAsBlob,\n }),\n [requestInit, requestHandler, shouldFetchAsBlob],\n );\n return (\n <RequestContext.Provider value={value}>{children}</RequestContext.Provider>\n );\n};\n\nexport function useRequest(): RequestContextValue {\n return useContext(RequestContext);\n}\n\nexport function useFetcher(): Fetcher {\n return useContext(RequestContext).fetcher;\n}\n\n/**\n * 解析 file 的可消费 URL:\n * - 未配置 shouldFetchAsBlob 或返回 false:同步返回 file.url(不入 state,避免切换文件时残留旧值)\n * - 返回 true:用 fetcher 拉成 blob: URL,组件卸载或 file 变化时 revoke\n *\n * 期间返回空字符串(表示 \"还没准备好\"),调用方应避免空 URL 时挂载到 <img src> 等。\n */\nexport function useResolvedUrl(file: PreviewFile | undefined): string {\n const { fetcher, shouldFetchAsBlob } = useContext(RequestContext);\n const needBlob = !!(file && shouldFetchAsBlob?.(file));\n // 仅在需要预取 blob 时才使用 state;其他场景下方法返回值由 file.url 派生,避免 state 跨文件切换时残留\n const [blobUrl, setBlobUrl] = useState<string>('');\n const createdRef = useRef<string | null>(null);\n\n useEffect(() => {\n if (!file || !needBlob) {\n // 离开 blob 模式:清掉上次缓存的 blob URL\n if (createdRef.current) {\n URL.revokeObjectURL(createdRef.current);\n createdRef.current = null;\n }\n setBlobUrl('');\n return;\n }\n let cancelled = false;\n setBlobUrl('');\n fetchAsBlobUrl(file.url, fetcher)\n .then((next) => {\n if (cancelled) {\n URL.revokeObjectURL(next);\n return;\n }\n if (createdRef.current) {\n URL.revokeObjectURL(createdRef.current);\n }\n createdRef.current = next;\n setBlobUrl(next);\n })\n .catch((err) => {\n if (!cancelled) {\n console.error('[file-preview] resolve blob url failed:', err);\n setBlobUrl(file.url);\n }\n });\n return () => {\n cancelled = true;\n };\n }, [file?.id, file?.url, needBlob, fetcher]);\n\n // 卸载时 revoke 最后一次创建的 blob URL\n useEffect(() => {\n return () => {\n if (createdRef.current) {\n URL.revokeObjectURL(createdRef.current);\n createdRef.current = null;\n }\n };\n }, []);\n\n if (!file) return '';\n if (!needBlob) return file.url;\n return blobUrl;\n}\n","import { FileQuestion, Download } from 'lucide-react';\nimport { useTranslator } from '../../i18n/LocaleContext';\n\ninterface UnsupportedRendererProps {\n fileName: string;\n fileType: string;\n onDownload: () => void;\n}\n\nexport const UnsupportedRenderer: React.FC<UnsupportedRendererProps> = ({\n fileName,\n fileType,\n onDownload,\n}) => {\n const t = useTranslator();\n return (\n <div className=\"rfp-flex rfp-flex-col rfp-items-center rfp-justify-center rfp-w-full rfp-h-full rfp-p-6 rfp-gap-4\">\n <div className=\"rfp-w-20 rfp-h-20 rfp-rounded-full rfp-bg-surface-2 rfp-flex rfp-items-center rfp-justify-center\">\n <FileQuestion className=\"rfp-w-10 rfp-h-10 rfp-text-fg-secondary\" />\n </div>\n\n <div className=\"rfp-text-fg-primary rfp-text-center\">\n <p className=\"rfp-text-lg rfp-font-medium rfp-mb-2\">{fileName}</p>\n <p className=\"rfp-text-fg-secondary\">{t('common.unsupported_preview', { type: fileType })}</p>\n </div>\n\n <button\n onClick={onDownload}\n className=\"rfp-flex rfp-items-center rfp-gap-2 rfp-px-4 rfp-py-2 rfp-bg-surface-2 hover:rfp-bg-surface-3 rfp-backdrop-blur-sm rfp-rounded-lg rfp-text-fg-primary rfp-font-medium rfp-transition-all\"\n >\n <Download className=\"rfp-w-5 rfp-h-5\" />\n {t('common.download')}\n </button>\n </div>\n );\n};\n","import { useEffect, useRef } from 'react';\n\nexport interface UseKeyboardNavigationParams {\n mode: 'modal' | 'embed';\n currentIndex: number;\n totalFiles: number;\n onNavigate?: (index: number) => void;\n onClose?: () => void;\n rootRef?: React.RefObject<HTMLDivElement | null>;\n}\n\n/**\n * 键盘导航 hook\n * - modal 模式:监听 window 的 keydown 事件\n * - embed 模式:仅监听根容器的 keydown 事件(需要容器获得焦点)\n */\nexport function useKeyboardNavigation({\n mode,\n currentIndex,\n totalFiles,\n onNavigate,\n onClose,\n rootRef,\n}: UseKeyboardNavigationParams): void {\n const handlersRef = useRef({ onNavigate, onClose });\n\n useEffect(() => {\n handlersRef.current = { onNavigate, onClose };\n }, [onNavigate, onClose]);\n\n useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n const { onNavigate, onClose } = handlersRef.current;\n\n if (e.key === 'Escape' && mode === 'modal') {\n onClose?.();\n } else if (e.key === 'ArrowLeft' && currentIndex > 0) {\n onNavigate?.(currentIndex - 1);\n } else if (e.key === 'ArrowRight' && currentIndex < totalFiles - 1) {\n onNavigate?.(currentIndex + 1);\n }\n };\n\n if (mode === 'modal') {\n window.addEventListener('keydown', handleKeyDown);\n return () => window.removeEventListener('keydown', handleKeyDown);\n } else {\n const el = rootRef?.current;\n if (!el) return;\n el.addEventListener('keydown', handleKeyDown as EventListener);\n return () => el.removeEventListener('keydown', handleKeyDown as EventListener);\n }\n }, [mode, currentIndex, totalFiles, rootRef]);\n}\n","import { useState, useEffect } from 'react';\nimport type { Theme } from '@eternalheart/file-preview-core';\n\n/**\n * 主题模式 hook\n * 处理 auto 主题时的系统偏好监听\n */\nexport function useThemeMode(theme: Theme): 'light' | 'dark' {\n const [systemDark, setSystemDark] = useState(() =>\n typeof window !== 'undefined'\n ? window.matchMedia('(prefers-color-scheme: dark)').matches\n : true\n );\n\n useEffect(() => {\n if (theme !== 'auto') return;\n\n const mql = window.matchMedia('(prefers-color-scheme: dark)');\n const handler = (e: MediaQueryListEvent) => setSystemDark(e.matches);\n mql.addEventListener('change', handler);\n return () => mql.removeEventListener('change', handler);\n }, [theme]);\n\n return theme === 'auto' ? (systemDark ? 'dark' : 'light') : theme;\n}\n","import React from 'react';\n\nexport interface ToolbarButtonProps {\n icon: React.ReactNode;\n label: string;\n onClick: () => void;\n disabled?: boolean;\n /** 激活状态:true 时按钮显示高亮样式 */\n active?: boolean;\n ariaKeyshortcuts?: string;\n}\n\n/**\n * 工具栏按钮组件\n * 支持 tooltip、disabled 状态、active 高亮和 aria 属性\n */\nexport const ToolbarButton: React.FC<ToolbarButtonProps> = ({\n icon,\n label,\n onClick,\n disabled,\n active,\n ariaKeyshortcuts,\n}) => {\n let stateClass: string;\n if (disabled) {\n stateClass = 'rfp-text-fg-disabled rfp-cursor-not-allowed';\n } else if (active) {\n stateClass = 'rfp-text-fg-primary rfp-bg-surface-3 hover:rfp-bg-surface-3 active:rfp-bg-surface-3';\n } else {\n stateClass = 'rfp-text-fg-primary hover:rfp-bg-surface-2 active:rfp-bg-surface-3';\n }\n\n return (\n <button\n onClick={onClick}\n disabled={disabled}\n aria-label={label}\n aria-pressed={active}\n aria-keyshortcuts={ariaKeyshortcuts}\n aria-disabled={disabled}\n className={`rfp-relative rfp-group rfp-p-2 md:rfp-p-1.5 rfp-rounded-md rfp-transition-all rfp-select-none ${stateClass}`}\n >\n {icon}\n <span className=\"rfp-absolute rfp-left-1/2 -rfp-translate-x-1/2 rfp-top-full rfp-mt-1.5 rfp-px-2 rfp-py-1 rfp-text-xs rfp-rounded rfp-whitespace-nowrap rfp-pointer-events-none rfp-opacity-0 rfp-invisible group-hover:rfp-opacity-100 group-hover:rfp-visible rfp-transition-opacity rfp-duration-200 rfp-z-50 rfp-bg-fg-primary rfp-text-fg-inverse max-[1023px]:!rfp-hidden\">\n <span className=\"rfp-absolute rfp-left-1/2 -rfp-translate-x-1/2 -rfp-top-1 rfp-w-2 rfp-h-2 rfp-rotate-45 rfp-bg-fg-primary\" />\n <span className=\"rfp-relative\">{label}</span>\n </span>\n </button>\n );\n};\n","import React from 'react';\nimport type { ToolbarGroup } from '../renderers/toolbar.types';\nimport { ToolbarButton } from '../components/preview/ToolbarButton';\n\n/**\n * 渲染工具栏组项(按钮 + 文本 + 分隔线)\n * 提取到模块顶层,避免每次组件渲染时重新创建\n */\nexport function renderToolbarItems(\n groups: ToolbarGroup[],\n dividerClass: string\n): React.ReactNode {\n return groups.map((group, gi, arr) => (\n <React.Fragment key={gi}>\n {group.items.map((item, ii) =>\n item.type === 'button' ? (\n <ToolbarButton\n key={`${gi}-${ii}`}\n icon={item.icon}\n label={item.tooltip}\n onClick={item.action}\n disabled={item.disabled}\n active={item.active}\n ariaKeyshortcuts={item.ariaKeyshortcuts}\n />\n ) : (\n <span\n key={`${gi}-${ii}`}\n className=\"rfp-text-xs rfp-text-center rfp-font-medium rfp-tabular-nums rfp-text-fg-tertiary\"\n style={{ minWidth: item.minWidth || 'auto' }}\n >\n {item.content}\n </span>\n )\n )}\n {gi < arr.length - 1 && <div className={`rfp-w-px rfp-h-4 rfp-bg-divide ${dividerClass}`} />}\n </React.Fragment>\n ));\n}\n","import React from 'react';\nimport { motion } from 'framer-motion';\nimport { Download, X } from 'lucide-react';\nimport type { ToolbarGroup } from '../../renderers/toolbar.types';\nimport type { Translator } from '@eternalheart/file-preview-core';\nimport { renderToolbarItems } from '../../toolbar/renderItems';\n\nexport interface FilePreviewToolbarProps {\n fileName: string;\n currentIndex: number;\n totalFiles: number;\n toolGroups: ToolbarGroup[];\n t: Translator;\n onDownload: () => void;\n onClose?: () => void;\n showDownload: boolean;\n}\n\n/**\n * 文件预览顶部工具栏组件\n * - 桌面端:单行显示所有按钮\n * - 移动端:第一行显示文件名 + 下载/关闭,第二行显示工具按钮\n */\nexport const FilePreviewToolbar: React.FC<FilePreviewToolbarProps> = ({\n fileName,\n currentIndex,\n totalFiles,\n toolGroups,\n t,\n onDownload,\n onClose,\n showDownload,\n}) => {\n const showCloseButton = !!onClose;\n\n // 操作组:下载、关闭(通用,不属于任何 Renderer)\n const actionGroups: ToolbarGroup[] = [\n ...(showDownload\n ? [\n {\n items: [\n {\n type: 'button' as const,\n icon: <Download className=\"rfp-w-4 rfp-h-4\" />,\n tooltip: t('accessibility.downloadFile'),\n action: onDownload,\n },\n ],\n },\n ]\n : []),\n ...(showCloseButton\n ? [\n {\n items: [\n {\n type: 'button' as const,\n icon: <X className=\"rfp-w-4 rfp-h-4\" />,\n tooltip: t('accessibility.closePreview'),\n action: onClose!,\n ariaKeyshortcuts: 'Escape',\n },\n ],\n },\n ]\n : []),\n ];\n\n return (\n <motion.div\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n className=\"rfp-flex-shrink-0 rfp-z-10 rfp-backdrop-blur-md rfp-border-b rfp-bg-surface-toolbar rfp-border-line\"\n style={{ paddingTop: 'env(safe-area-inset-top, 0px)' }}\n >\n {/* 第一行:文件名 + 分页 + 关闭/下载(移动端右侧)/全部按钮(桌面端) */}\n <div className=\"rfp-flex rfp-items-center rfp-justify-between rfp-px-3 md:rfp-px-5 rfp-py-1.5 md:rfp-py-2.5\">\n {/* 左侧:文件名 + 分页 */}\n <div className=\"rfp-flex rfp-items-center rfp-flex-1 rfp-min-w-0 rfp-mr-2 md:rfp-mr-3\">\n <h2 className=\"rfp-font-medium rfp-text-xs md:rfp-text-sm rfp-truncate rfp-text-fg-primary\">\n {fileName}\n </h2>\n <span\n className=\"rfp-text-xs rfp-ml-2 rfp-flex-shrink-0 rfp-text-fg-muted\"\n aria-live=\"polite\"\n aria-atomic=\"true\"\n >\n {currentIndex + 1}/{totalFiles}\n </span>\n </div>\n\n {/* 移动端:仅显示下载 + 关闭 */}\n <div className=\"rfp-flex rfp-items-center rfp-gap-1 md:rfp-hidden rfp-flex-shrink-0\">\n {renderToolbarItems(actionGroups, 'rfp-mx-0.5')}\n </div>\n\n {/* 桌面端:所有工具按钮 */}\n <div className=\"rfp-hidden md:rfp-flex rfp-items-center rfp-gap-1 rfp-flex-shrink-0\">\n {renderToolbarItems(toolGroups, 'rfp-mx-1')}\n {toolGroups.length > 0 && (\n <div className=\"rfp-w-px rfp-h-4 rfp-mx-1 rfp-bg-divide\" />\n )}\n {renderToolbarItems(actionGroups, 'rfp-mx-1')}\n </div>\n </div>\n\n {/* 第二行:移动端工具按钮 */}\n {toolGroups.length > 0 && (\n <div className=\"rfp-flex rfp-items-center rfp-gap-1 rfp-px-3 rfp-pb-1.5 rfp-overflow-x-auto scrollbar-hide md:rfp-hidden\">\n {renderToolbarItems(toolGroups, 'rfp-mx-0.5')}\n </div>\n )}\n </motion.div>\n );\n};\n","import React from 'react';\nimport { AlertCircle, Download, RotateCw } from 'lucide-react';\nimport type { Translator } from '@eternalheart/file-preview-core';\n\nexport interface RendererErrorProps {\n error: Error;\n fileName: string;\n t: Translator;\n onRetry: () => void;\n onDownload: () => void;\n}\n\n/**\n * 渲染器错误 UI 组件\n * 显示错误信息、文件名、重试和下载按钮\n */\nexport const RendererError: React.FC<RendererErrorProps> = ({\n error,\n fileName,\n t,\n onRetry,\n onDownload,\n}) => {\n return (\n <div className=\"rfp-flex rfp-flex-col rfp-items-center rfp-justify-center rfp-h-full rfp-px-4 rfp-text-fg-primary\">\n <AlertCircle className=\"rfp-w-16 rfp-h-16 rfp-mb-4 rfp-text-error\" />\n <h3 className=\"rfp-text-lg rfp-font-semibold rfp-mb-2\">\n {t('common.unknown_error')}\n </h3>\n <p className=\"rfp-text-sm rfp-text-fg-secondary rfp-mb-1 rfp-max-w-md rfp-text-center\">\n {error.message}\n </p>\n <p className=\"rfp-text-xs rfp-text-fg-tertiary rfp-mb-6 rfp-max-w-md rfp-text-center\">\n {fileName}\n </p>\n <div className=\"rfp-flex rfp-gap-3\">\n <button\n onClick={onRetry}\n aria-label={t('common.retry')}\n className=\"rfp-flex rfp-items-center rfp-gap-2 rfp-px-4 rfp-py-2 rfp-bg-surface-2 hover:rfp-bg-surface-3 rfp-rounded-md rfp-text-sm rfp-font-medium rfp-transition-colors\"\n >\n <RotateCw className=\"rfp-w-4 rfp-h-4\" />\n {t('common.retry')}\n </button>\n <button\n onClick={onDownload}\n aria-label={t('accessibility.downloadFile')}\n className=\"rfp-flex rfp-items-center rfp-gap-2 rfp-px-4 rfp-py-2 rfp-bg-surface-2 hover:rfp-bg-surface-3 rfp-rounded-md rfp-text-sm rfp-font-medium rfp-transition-colors\"\n >\n <Download className=\"rfp-w-4 rfp-h-4\" />\n {t('common.download')}\n </button>\n </div>\n </div>\n );\n};\n","import React from 'react';\n\nexport interface RendererErrorBoundaryProps {\n children: React.ReactNode;\n fallback: (error: Error, reset: () => void) => React.ReactNode;\n onError?: (error: Error, errorInfo: React.ErrorInfo) => void;\n}\n\ninterface RendererErrorBoundaryState {\n hasError: boolean;\n error: Error | null;\n}\n\n/**\n * 渲染器错误边界类组件\n * 捕获渲染器加载失败和运行时错误\n */\nexport class RendererErrorBoundary extends React.Component<\n RendererErrorBoundaryProps,\n RendererErrorBoundaryState\n> {\n constructor(props: RendererErrorBoundaryProps) {\n super(props);\n this.state = { hasError: false, error: null };\n }\n\n static getDerivedStateFromError(error: Error): RendererErrorBoundaryState {\n return { hasError: true, error };\n }\n\n componentDidCatch(error: Error, errorInfo: React.ErrorInfo): void {\n console.error('[file-preview] Renderer error:', error, errorInfo);\n this.props.onError?.(error, errorInfo);\n }\n\n reset = (): void => {\n this.setState({ hasError: false, error: null });\n };\n\n render(): React.ReactNode {\n if (this.state.hasError && this.state.error) {\n return this.props.fallback(this.state.error, this.reset);\n }\n\n return this.props.children;\n }\n}\n","import React from 'react';\nimport { useTranslator } from '../i18n/LocaleContext';\n\nexport const RendererLoading: React.FC = () => {\n const t = useTranslator();\n return (\n <div className=\"rfp-flex rfp-items-center rfp-justify-center rfp-w-full rfp-h-full rfp-text-fg-muted\">\n <div className=\"rfp-flex rfp-flex-col rfp-items-center rfp-gap-3\">\n <div className=\"rfp-w-8 rfp-h-8 rfp-rounded-full rfp-border-2 rfp-border-fg-muted rfp-border-t-transparent rfp-animate-spin\" />\n <span className=\"rfp-text-sm\">{t('common.loading') ?? 'Loading...'}</span>\n </div>\n </div>\n );\n};\n","import React, { Suspense } from 'react';\nimport type { Translator } from '@eternalheart/file-preview-core';\nimport type { PreviewFile, CustomRenderer, CustomRendererContext } from '../../types';\nimport { RendererErrorBoundary } from './RendererErrorBoundary';\nimport { RendererError } from './RendererError';\nimport { RendererLoading } from '../../renderers/RendererLoading';\n\nexport interface FilePreviewRendererProps {\n currentFile: PreviewFile;\n customRenderer?: CustomRenderer | null;\n customRendererContext: CustomRendererContext;\n t: Translator;\n onDownload: () => void;\n onError?: (error: Error, errorInfo: React.ErrorInfo) => void;\n children: React.ReactNode;\n}\n\n/**\n * 渲染器容器组件\n * 负责 Suspense + 错误边界包装,不负责具体渲染器选择\n */\nexport const FilePreviewRenderer: React.FC<FilePreviewRendererProps> = ({\n currentFile,\n customRenderer,\n customRendererContext,\n t,\n onDownload,\n onError,\n children,\n}) => {\n // 自定义渲染器优先\n if (customRenderer) {\n return (\n <RendererErrorBoundary\n fallback={(error, reset) => (\n <RendererError\n error={error}\n fileName={currentFile.name}\n t={t}\n onRetry={reset}\n onDownload={onDownload}\n />\n )}\n onError={onError}\n >\n {customRenderer.render(currentFile, customRendererContext)}\n </RendererErrorBoundary>\n );\n }\n\n // 内置渲染器(Suspense + 错误边界)\n return (\n <Suspense fallback={<RendererLoading />} key={currentFile.url}>\n <RendererErrorBoundary\n fallback={(error, reset) => (\n <RendererError\n error={error}\n fileName={currentFile.name}\n t={t}\n onRetry={reset}\n onDownload={onDownload}\n />\n )}\n onError={onError}\n >\n {children}\n </RendererErrorBoundary>\n </Suspense>\n );\n};\n","import React, { useState, useEffect, useRef, useCallback } from 'react';\nimport { motion } from 'framer-motion';\nimport { ChevronLeft, ChevronRight } from 'lucide-react';\nimport type { Translator } from '@eternalheart/file-preview-core';\n\nexport interface NavArrowsProps {\n containerRef: React.RefObject<HTMLDivElement | null>;\n hasPrev: boolean;\n hasNext: boolean;\n onPrev: () => void;\n onNext: () => void;\n resetKey: number;\n t: Translator;\n}\n\nconst NAV_HIDE_DELAY = 2000;\n\n/**\n * 导航箭头组件\n * 自带 mousemove 监听 + 2s 自动隐藏定时器\n * state 隔离在本组件,避免父组件因 navVisible 变化而 re-render\n */\nexport const NavArrows: React.FC<NavArrowsProps> = ({\n containerRef,\n hasPrev,\n hasNext,\n onPrev,\n onNext,\n resetKey,\n t,\n}) => {\n const [visible, setVisible] = useState(true);\n const timerRef = useRef<number | null>(null);\n\n const scheduleHide = useCallback(() => {\n if (timerRef.current) clearTimeout(timerRef.current);\n timerRef.current = window.setTimeout(() => setVisible(false), NAV_HIDE_DELAY);\n }, []);\n\n const show = useCallback(() => {\n setVisible((prev) => (prev ? prev : true));\n scheduleHide();\n }, [scheduleHide]);\n\n // 监听容器的 mousemove,触发显示 + 重置隐藏定时器\n useEffect(() => {\n const el = containerRef.current;\n if (!el) return;\n const handler = () => show();\n el.addEventListener('mousemove', handler);\n return () => {\n el.removeEventListener('mousemove', handler);\n };\n }, [containerRef, show]);\n\n // currentIndex 切换时,显示一次并重置定时器\n useEffect(() => {\n setVisible(true);\n scheduleHide();\n return () => {\n if (timerRef.current) clearTimeout(timerRef.current);\n };\n }, [resetKey, scheduleHide]);\n\n return (\n <>\n {hasPrev && (\n <motion.button\n initial={{ opacity: 0 }}\n animate={{ opacity: visible ? 1 : 0, x: visible ? 0 : -20 }}\n transition={{ duration: 0.2 }}\n onClick={onPrev}\n onMouseEnter={show}\n style={{ pointerEvents: visible ? 'auto' : 'none' }}\n aria-label={t('accessibility.previousFile') || '上一个文件'}\n aria-keyshortcuts=\"ArrowLeft\"\n className=\"rfp-absolute rfp-z-20 rfp-left-2 md:rfp-left-4 rfp-top-1/2 -rfp-translate-y-1/2 rfp-w-10 rfp-h-10 md:rfp-w-12 md:rfp-h-12 rfp-rounded-full rfp-backdrop-blur-xl rfp-border rfp-flex rfp-items-center rfp-justify-center rfp-transition-colors rfp-shadow-2xl rfp-bg-surface-nav rfp-border-line hover:rfp-bg-surface-nav-hover rfp-text-fg-primary\"\n >\n <ChevronLeft className=\"rfp-w-5 rfp-h-5 md:rfp-w-6 md:rfp-h-6\" />\n </motion.button>\n )}\n {hasNext && (\n <motion.button\n initial={{ opacity: 0 }}\n animate={{ opacity: visible ? 1 : 0, x: visible ? 0 : 20 }}\n transition={{ duration: 0.2 }}\n onClick={onNext}\n onMouseEnter={show}\n style={{ pointerEvents: visible ? 'auto' : 'none' }}\n aria-label={t('accessibility.nextFile') || '下一个文件'}\n aria-keyshortcuts=\"ArrowRight\"\n className=\"rfp-absolute rfp-z-20 rfp-right-2 md:rfp-right-4 rfp-top-1/2 -rfp-translate-y-1/2 rfp-w-10 rfp-h-10 md:rfp-w-12 md:rfp-h-12 rfp-rounded-full rfp-backdrop-blur-xl rfp-border rfp-flex rfp-items-center rfp-justify-center rfp-transition-colors rfp-shadow-2xl rfp-bg-surface-nav rfp-border-line hover:rfp-bg-surface-nav-hover rfp-text-fg-primary\"\n >\n <ChevronRight className=\"rfp-w-5 rfp-h-5 md:rfp-w-6 md:rfp-h-6\" />\n </motion.button>\n )}\n </>\n );\n};\n","// 集中的 lazy 装饰:把每个 renderer 转为 React.lazy(import).then(default),\n// 让 rollup 自动按 chunk 分割。\n// 显式声明 LazyExoticComponent 以避免 TS4023(要求把内部 Props 类型导入到当前文件作用域)。\nimport { lazy, type LazyExoticComponent, type ComponentType } from 'react';\nimport type { ImageRenderer as ImageRendererImpl } from './Image';\nimport type { PdfRenderer as PdfRendererImpl } from './Pdf';\nimport type { DocxRenderer as DocxRendererImpl } from './Docx';\nimport type { XlsxRenderer as XlsxRendererImpl } from './Xlsx';\nimport type { PptxRenderer as PptxRendererImpl } from './Pptx';\nimport type { MsgRenderer as MsgRendererImpl } from './Msg';\nimport type { EpubRenderer as EpubRendererImpl } from './Epub';\nimport type { MobiRenderer as MobiRendererImpl } from './Mobi';\nimport type { VideoRenderer as VideoRendererImpl } from './Video';\nimport type { AudioRenderer as AudioRendererImpl } from './Audio';\nimport type { MarkdownRenderer as MarkdownRendererImpl } from './Markdown';\nimport type { JsonRenderer as JsonRendererImpl } from './Json';\nimport type { CsvRenderer as CsvRendererImpl } from './Csv';\nimport type { XmlRenderer as XmlRendererImpl } from './Xml';\nimport type { SubtitleRenderer as SubtitleRendererImpl } from './Subtitle';\nimport type { ZipRenderer as ZipRendererImpl } from './Zip';\nimport type { TextRenderer as TextRendererImpl } from './Text';\nimport type { FontRenderer as FontRendererImpl } from './Font';\n\ntype Lazy<T> = LazyExoticComponent<T extends ComponentType<infer P> ? ComponentType<P> : never>;\n\nexport const ImageRenderer: Lazy<typeof ImageRendererImpl> = lazy(() =>\n import('./Image').then((m) => ({ default: m.ImageRenderer })),\n);\n\nexport const PdfRenderer: Lazy<typeof PdfRendererImpl> = lazy(() =>\n import('./Pdf').then((m) => ({ default: m.PdfRenderer })),\n);\n\nexport const DocxRenderer: Lazy<typeof DocxRendererImpl> = lazy(() =>\n import('./Docx').then((m) => ({ default: m.DocxRenderer })),\n);\n\nexport const XlsxRenderer: Lazy<typeof XlsxRendererImpl> = lazy(() =>\n import('./Xlsx').then((m) => ({ default: m.XlsxRenderer })),\n);\n\nexport const PptxRenderer: Lazy<typeof PptxRendererImpl> = lazy(() =>\n import('./Pptx').then((m) => ({ default: m.PptxRenderer })),\n);\n\nexport const MsgRenderer: Lazy<typeof MsgRendererImpl> = lazy(() =>\n import('./Msg').then((m) => ({ default: m.MsgRenderer })),\n);\n\nexport const EpubRenderer: Lazy<typeof EpubRendererImpl> = lazy(() =>\n import('./Epub').then((m) => ({ default: m.EpubRenderer })),\n);\n\nexport const MobiRenderer: Lazy<typeof MobiRendererImpl> = lazy(() =>\n import('./Mobi').then((m) => ({ default: m.MobiRenderer })),\n);\n\nexport const VideoRenderer: Lazy<typeof VideoRendererImpl> = lazy(() =>\n import('./Video').then((m) => ({ default: m.VideoRenderer })),\n);\n\nexport const AudioRenderer: Lazy<typeof AudioRendererImpl> = lazy(() =>\n import('./Audio').then((m) => ({ default: m.AudioRenderer })),\n);\n\nexport const MarkdownRenderer: Lazy<typeof MarkdownRendererImpl> = lazy(() =>\n import('./Markdown').then((m) => ({ default: m.MarkdownRenderer })),\n);\n\nexport const JsonRenderer: Lazy<typeof JsonRendererImpl> = lazy(() =>\n import('./Json').then((m) => ({ default: m.JsonRenderer })),\n);\n\nexport const CsvRenderer: Lazy<typeof CsvRendererImpl> = lazy(() =>\n import('./Csv').then((m) => ({ default: m.CsvRenderer })),\n);\n\nexport const XmlRenderer: Lazy<typeof XmlRendererImpl> = lazy(() =>\n import('./Xml').then((m) => ({ default: m.XmlRenderer })),\n);\n\nexport const SubtitleRenderer: Lazy<typeof SubtitleRendererImpl> = lazy(() =>\n import('./Subtitle').then((m) => ({ default: m.SubtitleRenderer })),\n);\n\nexport const ZipRenderer: Lazy<typeof ZipRendererImpl> = lazy(() =>\n import('./Zip').then((m) => ({ default: m.ZipRenderer })),\n);\n\nexport const TextRenderer: Lazy<typeof TextRendererImpl> = lazy(() =>\n import('./Text').then((m) => ({ default: m.TextRenderer })),\n);\n\nexport const FontRenderer: Lazy<typeof FontRendererImpl> = lazy(() =>\n import('./Font').then((m) => ({ default: m.FontRenderer })),\n);\n","import type { LazyExoticComponent, ComponentType } from 'react';\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: LazyExoticComponent<ComponentType<any>>;\n /** 计算传给组件的 props */\n getProps: (ctx: RendererContext) => Record<string, any>;\n}\n\n/**\n * 内置渲染器注册表\n *\n * 新增渲染器:\n * 1. 在 src/renderers/<Type>/index.tsx 创建渲染器\n * 2. 在 src/renderers/lazy.tsx 添加懒加载导出\n * 3. 在此注册表添加配置\n *\n * 主组件 FilePreviewContent.tsx 无需修改\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","import React, { useCallback, useMemo, useRef, useState, useEffect } from 'react';\nimport { getFileType, createTranslator, type Locale, type Messages, type Translator, type Theme, downloadFileWithFetcher } from '@eternalheart/file-preview-core';\nimport { LocaleProvider } from './i18n/LocaleContext';\nimport { ThemeProvider } from './ThemeContext';\nimport type { PreviewFileInput, CustomRenderer, CustomRendererContext } from './types';\nimport type { CustomRendererEventPayload, PreviewFile, RequestHandler, RequestInitFactory, ShouldFetchAsBlob } from '@eternalheart/file-preview-core';\nimport { normalizeFiles } from './utils/fileNormalizer';\nimport { RequestProvider, useResolvedUrl, useFetcher } from './RequestContext';\nimport type { RendererHandle } from './renderers/base.types';\nimport type { ToolbarGroup } from './renderers/toolbar.types';\nimport { UnsupportedRenderer } from './renderers/Unsupported';\nimport {\n useKeyboardNavigation,\n useThemeMode,\n} from './hooks';\nimport { FilePreviewToolbar, FilePreviewRenderer, NavArrows } from './components/preview';\nimport { BUILTIN_RENDERERS } from './renderers/registry';\n\nconst MAX_ZIP_NESTING_DEPTH = 3;\n\nexport interface FilePreviewContentProps {\n files: PreviewFileInput[];\n currentIndex: number;\n onNavigate?: (index: number) => void;\n customRenderers?: CustomRenderer[];\n mode?: 'modal' | 'embed';\n onClose?: () => void;\n zipNestingDepth?: number;\n locale?: Locale;\n messages?: Partial<Record<Locale, Partial<Messages>>>;\n headless?: boolean;\n theme?: Theme;\n onCustomEvent?: (event: CustomRendererEventPayload) => void;\n requestInit?: RequestInitFactory;\n requestHandler?: RequestHandler;\n shouldFetchAsBlob?: ShouldFetchAsBlob;\n onDownload?: (file: PreviewFile) => void;\n onError?: (error: Error, errorInfo: React.ErrorInfo) => void;\n showDownload?: boolean;\n}\n\nexport const FilePreviewContent: React.FC<FilePreviewContentProps> = (props) => {\n const { requestInit, requestHandler, shouldFetchAsBlob } = props;\n return (\n <RequestProvider\n requestInit={requestInit}\n requestHandler={requestHandler}\n shouldFetchAsBlob={shouldFetchAsBlob}\n >\n <FilePreviewContentInner {...props} />\n </RequestProvider>\n );\n};\n\nconst FilePreviewContentInner: React.FC<FilePreviewContentProps> = ({\n files,\n currentIndex,\n onNavigate,\n customRenderers = [],\n mode = 'modal',\n onClose,\n zipNestingDepth = 0,\n locale = 'zh-CN',\n messages: userMessages,\n headless = false,\n theme = 'dark',\n onCustomEvent,\n onDownload,\n onError,\n showDownload = true,\n requestInit: _requestInit,\n requestHandler: _requestHandler,\n shouldFetchAsBlob: _shouldFetchAsBlob,\n}) => {\n const t: Translator = useMemo(\n () => createTranslator({ locale, messages: userMessages }),\n [locale, userMessages],\n );\n\n const normalizedFiles = useMemo(() => normalizeFiles(files), [files]);\n const currentFile = normalizedFiles[currentIndex];\n const resolvedUrl = useResolvedUrl(currentFile);\n const fetcher = useFetcher();\n\n const customRenderer = useMemo(() => {\n if (!currentFile) return null;\n return customRenderers.find(renderer => renderer.test(currentFile));\n }, [currentFile, customRenderers]);\n\n const fileType = currentFile ? getFileType(currentFile) : 'unsupported';\n\n // 主题\n const resolvedTheme = useThemeMode(theme);\n\n // Refs\n const contentRef = useRef<HTMLDivElement>(null);\n const rootRef = useRef<HTMLDivElement>(null);\n\n // 新架构:通用渲染器 ref,用于获取工具栏配置\n const rendererInstanceRef = useRef<RendererHandle | null>(null);\n const [rendererToolbarGroups, setRendererToolbarGroups] = useState<ToolbarGroup[]>([]);\n const cleanupRef = useRef<(() => void) | null>(null);\n\n // 设置渲染器并初始化工具栏(在渲染器挂载/更新时同步触发)\n const setupRenderer = useCallback((renderer: RendererHandle | null) => {\n // 清理旧的订阅\n if (cleanupRef.current) {\n cleanupRef.current();\n cleanupRef.current = null;\n }\n\n rendererInstanceRef.current = renderer;\n\n if (!renderer?.getToolbarGroups) {\n setRendererToolbarGroups([]);\n return;\n }\n\n // 立即获取一次初始状态\n const initialGroups = renderer.getToolbarGroups();\n setRendererToolbarGroups(initialGroups);\n\n // 如果渲染器支持事件订阅,使用事件机制\n if (renderer.onToolbarChange) {\n const unsubscribe = renderer.onToolbarChange(() => {\n const groups = renderer.getToolbarGroups();\n setRendererToolbarGroups(groups);\n });\n\n cleanupRef.current = unsubscribe;\n return;\n }\n\n // 回退机制:如果渲染器不支持事件,使用轮询\n const interval = setInterval(() => {\n const groups = renderer.getToolbarGroups();\n setRendererToolbarGroups(groups);\n }, 100);\n cleanupRef.current = () => clearInterval(interval);\n }, []);\n\n // Callback ref:在渲染器挂载/卸载时立即触发\n const rendererRef = useCallback((renderer: RendererHandle | null) => {\n setupRenderer(renderer);\n }, [setupRenderer]);\n\n // 组件卸载时清理\n useEffect(() => {\n return () => {\n if (cleanupRef.current) {\n cleanupRef.current();\n cleanupRef.current = null;\n }\n };\n }, []);\n\n // 键盘导航\n useKeyboardNavigation({\n mode,\n currentIndex,\n totalFiles: normalizedFiles.length,\n onNavigate,\n onClose,\n rootRef,\n });\n\n // 图片自动适应窗口(已禁用,改为手动点击\"适应窗口\"按钮)\n // useImageAutoFit({\n // enabled: fileType === 'image',\n // naturalWidth: state.image.naturalWidth,\n // naturalHeight: state.image.naturalHeight,\n // containerRef: contentRef,\n // onZoomChange: (zoom) => dispatch({ type: 'SET_ZOOM', payload: zoom }),\n // });\n\n // 自定义渲染器上下文\n const emitCustom = useCallback(\n (name: string, payload?: unknown) => {\n if (!currentFile) return;\n onCustomEvent?.({ name, payload, file: currentFile });\n },\n [currentFile, onCustomEvent],\n );\n\n const customCtx = useMemo<CustomRendererContext>(\n () => ({ emit: emitCustom, t, theme: resolvedTheme, locale }),\n [emitCustom, t, resolvedTheme, locale],\n );\n\n const handleDownload = useCallback(async () => {\n if (!currentFile) return;\n if (onDownload) {\n await onDownload(currentFile);\n return;\n }\n try {\n await downloadFileWithFetcher(currentFile.url, currentFile.name, fetcher);\n } catch (err) {\n console.error('[file-preview] download failed:', err);\n }\n }, [currentFile, onDownload, fetcher]);\n\n if (!currentFile) return null;\n\n return (\n <LocaleProvider locale={locale} messages={userMessages}>\n <ThemeProvider theme={resolvedTheme}>\n <div\n ref={rootRef}\n tabIndex={mode === 'embed' ? 0 : -1}\n data-theme={resolvedTheme}\n className=\"rfp-relative rfp-w-full rfp-h-full rfp-flex rfp-flex-col rfp-overflow-hidden rfp-outline-none\"\n >\n {!headless && (\n <FilePreviewToolbar\n fileName={currentFile.name}\n currentIndex={currentIndex}\n totalFiles={normalizedFiles.length}\n toolGroups={rendererToolbarGroups}\n t={t}\n onDownload={handleDownload}\n onClose={onClose}\n showDownload={showDownload}\n />\n )}\n\n <div\n ref={contentRef}\n className=\"rfp-flex-1 rfp-flex rfp-items-center rfp-justify-center rfp-overflow-auto\"\n >\n <FilePreviewRenderer\n currentFile={currentFile}\n customRenderer={customRenderer}\n customRendererContext={customCtx}\n t={t}\n onDownload={handleDownload}\n onError={onError}\n >\n {(() => {\n // ZIP 嵌套深度超限:fallback 到 Unsupported\n if (fileType === 'zip' && zipNestingDepth >= MAX_ZIP_NESTING_DEPTH) {\n return (\n <UnsupportedRenderer\n fileName={currentFile.name}\n fileType={currentFile.type}\n onDownload={handleDownload}\n />\n );\n }\n\n // 从注册表查找匹配的渲染器\n const rendererConfig = BUILTIN_RENDERERS.find(\n (r) => r.fileType === fileType,\n );\n\n if (rendererConfig) {\n const RendererComponent = rendererConfig.component;\n const rendererProps = rendererConfig.getProps({\n resolvedUrl,\n zipNestingDepth,\n currentFile,\n });\n return <RendererComponent ref={rendererRef} {...rendererProps} />;\n }\n\n // 未匹配:fallback 到 UnsupportedRenderer\n return (\n <UnsupportedRenderer\n fileName={currentFile.name}\n fileType={currentFile.type}\n onDownload={handleDownload}\n />\n );\n })()}\n </FilePreviewRenderer>\n </div>\n\n {!headless && normalizedFiles.length > 1 && (\n <NavArrows\n containerRef={contentRef}\n hasPrev={currentIndex > 0}\n hasNext={currentIndex < normalizedFiles.length - 1}\n onPrev={() => onNavigate?.(currentIndex - 1)}\n onNext={() => onNavigate?.(currentIndex + 1)}\n resetKey={currentIndex}\n t={t}\n />\n )}\n </div>\n </ThemeProvider>\n </LocaleProvider>\n );\n};\n","import { useEffect, useState } from 'react';\nimport { createPortal } from 'react-dom';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport { PreviewFileInput, CustomRenderer } from './types';\nimport { FilePreviewContent } from './FilePreviewContent';\nimport type { Locale, Messages, Theme, CustomRendererEventPayload, PreviewFile, RequestHandler, RequestInitFactory, ShouldFetchAsBlob } from '@eternalheart/file-preview-core';\n\ninterface FilePreviewModalProps {\n files: PreviewFileInput[];\n currentIndex: number;\n isOpen: boolean;\n onClose: () => void;\n onNavigate?: (index: number) => void;\n customRenderers?: CustomRenderer[];\n /** 国际化语言,默认 'zh-CN' */\n locale?: Locale;\n /** 用户自定义翻译字典 */\n messages?: Partial<Record<Locale, Partial<Messages>>>;\n /** 无头模式:隐藏工具栏和导航箭头 */\n headless?: boolean;\n /** 主题模式,默认 'dark' */\n theme?: Theme;\n /** 自定义渲染器派发的事件出口 */\n onCustomEvent?: (event: CustomRendererEventPayload) => void;\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\nexport const FilePreviewModal: React.FC<FilePreviewModalProps> = ({\n files,\n currentIndex,\n isOpen,\n onClose,\n onNavigate,\n customRenderers = [],\n locale,\n messages,\n headless,\n theme = 'dark',\n onCustomEvent,\n requestInit,\n requestHandler,\n shouldFetchAsBlob,\n onDownload,\n showDownload,\n}) => {\n const [systemDark, setSystemDark] = useState(() =>\n typeof window !== 'undefined'\n ? window.matchMedia('(prefers-color-scheme: dark)').matches\n : true,\n );\n\n useEffect(() => {\n if (theme !== 'auto') return;\n const mql = window.matchMedia('(prefers-color-scheme: dark)');\n const handler = (e: MediaQueryListEvent) => setSystemDark(e.matches);\n mql.addEventListener('change', handler);\n return () => mql.removeEventListener('change', handler);\n }, [theme]);\n\n const resolvedTheme = theme === 'auto' ? (systemDark ? 'dark' : 'light') : theme;\n\n // 锁定 body 滚动\n useEffect(() => {\n if (isOpen) {\n const originalOverflow = document.body.style.overflow;\n const originalPaddingRight = document.body.style.paddingRight;\n\n const scrollbarWidth = window.innerWidth - document.documentElement.clientWidth;\n\n document.body.style.overflow = 'hidden';\n if (scrollbarWidth > 0) {\n document.body.style.paddingRight = `${scrollbarWidth}px`;\n }\n\n return () => {\n document.body.style.overflow = originalOverflow;\n document.body.style.paddingRight = originalPaddingRight;\n };\n }\n }, [isOpen]);\n\n if (!isOpen) return null;\n\n const modalContent = (\n <div className=\"rfp-root\" data-theme={resolvedTheme}>\n <AnimatePresence>\n {isOpen && (\n <motion.div\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n className=\"rfp-fixed rfp-inset-0 rfp-z-[9999] rfp-flex rfp-items-center rfp-justify-center rfp-backdrop-blur-md rfp-overflow-hidden rfp-bg-surface-overlay\"\n onClick={onClose}\n onWheel={(e) => e.stopPropagation()}\n >\n <div\n className=\"rfp-relative rfp-w-full rfp-h-full\"\n onClick={(e) => e.stopPropagation()}\n >\n <FilePreviewContent\n mode=\"modal\"\n files={files}\n currentIndex={currentIndex}\n onClose={onClose}\n onNavigate={onNavigate}\n customRenderers={customRenderers}\n locale={locale}\n messages={messages}\n headless={headless}\n theme={theme}\n onCustomEvent={onCustomEvent}\n requestInit={requestInit}\n requestHandler={requestHandler}\n shouldFetchAsBlob={shouldFetchAsBlob}\n onDownload={onDownload}\n showDownload={showDownload}\n />\n </div>\n </motion.div>\n )}\n </AnimatePresence>\n </div>\n );\n\n return createPortal(modalContent, document.body);\n};\n","import { useEffect, useState } from 'react';\nimport { PreviewFileInput, CustomRenderer } from './types';\nimport { FilePreviewContent } from './FilePreviewContent';\nimport type { Locale, Messages, Theme, CustomRendererEventPayload, PreviewFile, RequestHandler, RequestInitFactory, ShouldFetchAsBlob } from '@eternalheart/file-preview-core';\n\ninterface FilePreviewEmbedProps {\n files: PreviewFileInput[];\n currentIndex?: number;\n onNavigate?: (index: number) => void;\n customRenderers?: CustomRenderer[];\n /** 宽度,默认 100% 填充父容器 */\n width?: number | string;\n /** 高度,默认 100% 填充父容器 */\n height?: number | string;\n className?: string;\n style?: React.CSSProperties;\n /** 国际化语言,默认 'zh-CN' */\n locale?: Locale;\n /** 用户自定义翻译字典 */\n messages?: Partial<Record<Locale, Partial<Messages>>>;\n /** 无头模式:隐藏工具栏和导航箭头 */\n headless?: boolean;\n /** 主题模式,默认 'dark' */\n theme?: Theme;\n /** 自定义渲染器派发的事件出口 */\n onCustomEvent?: (event: CustomRendererEventPayload) => void;\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\nexport const FilePreviewEmbed: React.FC<FilePreviewEmbedProps> = ({\n files,\n currentIndex = 0,\n onNavigate,\n customRenderers = [],\n width = '100%',\n height = '100%',\n className,\n style,\n locale,\n messages,\n headless,\n theme = 'dark',\n onCustomEvent,\n requestInit,\n requestHandler,\n shouldFetchAsBlob,\n onDownload,\n onClose,\n showDownload,\n}) => {\n const [systemDark, setSystemDark] = useState(() =>\n typeof window !== 'undefined'\n ? window.matchMedia('(prefers-color-scheme: dark)').matches\n : true,\n );\n\n useEffect(() => {\n if (theme !== 'auto') return;\n const mql = window.matchMedia('(prefers-color-scheme: dark)');\n const handler = (e: MediaQueryListEvent) => setSystemDark(e.matches);\n mql.addEventListener('change', handler);\n return () => mql.removeEventListener('change', handler);\n }, [theme]);\n\n const resolvedTheme = theme === 'auto' ? (systemDark ? 'dark' : 'light') : theme;\n\n return (\n <div\n className={`rfp-root ${className ?? ''}`}\n style={{ width, height, ...style }}\n data-theme={resolvedTheme}\n >\n <div className=\"rfp-relative rfp-w-full rfp-h-full rfp-overflow-hidden rfp-bg-surface-overlay\">\n <FilePreviewContent\n mode=\"embed\"\n files={files}\n currentIndex={currentIndex}\n onNavigate={onNavigate}\n customRenderers={customRenderers}\n locale={locale}\n messages={messages}\n headless={headless}\n theme={theme}\n onCustomEvent={onCustomEvent}\n requestInit={requestInit}\n requestHandler={requestHandler}\n shouldFetchAsBlob={shouldFetchAsBlob}\n onDownload={onDownload}\n onClose={onClose}\n showDownload={showDownload}\n />\n </div>\n </div>\n );\n};\n","// @ts-ignore - pdfjs-dist 类型路径\nimport * as pdfjsLib from 'pdfjs-dist/build/pdf.mjs';\nimport { configurePdfWorker } from '@eternalheart/file-preview-core';\n\n/**\n * PDF.js Worker 配置选项\n */\nexport interface PdfConfigOptions {\n /**\n * PDF.js worker 文件路径\n * 默认使用 CDN: `https://unpkg.com/pdfjs-dist@${version}/build/pdf.worker.min.mjs`\n */\n workerSrc?: string;\n\n /**\n * CMap 文件目录路径\n * 默认使用 CDN: `https://unpkg.com/pdfjs-dist@${version}/cmaps/`\n */\n cMapUrl?: string;\n\n /**\n * 是否使用压缩的 CMap 文件\n * 默认: true\n */\n cMapPacked?: boolean;\n}\n\n/**\n * 配置 PDF.js\n *\n * @example\n * ```ts\n * // 使用本地静态文件(推荐用于生产环境)\n * configurePdfjs({\n * workerSrc: '/pdfjs/pdf.worker.min.mjs',\n * cMapUrl: '/pdfjs/cmaps/',\n * cMapPacked: true\n * });\n * ```\n *\n * @example\n * ```ts\n * // 使用 CDN(默认配置)\n * configurePdfjs(); // 自动使用 unpkg CDN\n * ```\n */\nexport function configurePdfjs(options?: PdfConfigOptions) {\n configurePdfWorker(pdfjsLib, options);\n}\n\nexport { pdfjsLib as pdfjs };\n","// 导入样式\nimport './index.css';\n\n// 导入版本号\nimport packageJson from '../package.json';\n\n// 导出版本号\nexport const VERSION = packageJson.version;\n\n// 导出主组件\nexport { FilePreviewModal } from './FilePreviewModal';\nexport { FilePreviewEmbed } from './FilePreviewEmbed';\nexport { FilePreviewContent } from './FilePreviewContent';\n\n// 导出类型定义\nexport type {\n PreviewFile,\n PreviewFileLink,\n PreviewFileInput,\n FileType,\n ToolbarAction,\n PreviewState,\n CustomRenderer,\n CustomRendererContext,\n CustomRendererEventPayload,\n} from './types';\n\n// 导出工具函数和常量\nexport { normalizeFile, normalizeFiles } from './utils/fileNormalizer';\nexport { SUPPORTED_FILE_TYPES } from '@eternalheart/file-preview-core';\n\n// 导出 PDF.js 配置函数和类型\nexport { configurePdfjs, pdfjs } from './utils/pdfConfig';\nexport type { PdfConfigOptions } from './utils/pdfConfig';\n\n// 导出 i18n 国际化\nexport { LocaleProvider, useTranslator, useLocale } from './i18n/LocaleContext';\nexport type { LocaleProviderProps, LocaleContextValue } from './i18n/LocaleContext';\nexport type {\n Locale,\n Messages,\n MessageKey,\n Translator,\n TranslateParams,\n CreateTranslatorOptions,\n Theme,\n} from '@eternalheart/file-preview-core';\n\n"],"names":["vt","U","n","M","t","W","o","wt","Ft","a","yt","r","Ct","Mt","St","d","u","f","$","zt","V","Z","Et","jt","Lt","L","Pt","P","H","O","T","i","s","l","c","p","z","R","q","G","g","v","h","x","b","F","N","D","w","m","_","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","LocaleContext","createContext","LocaleProvider","locale","messages","children","value","useMemo","createTranslator","jsx","fallbackTranslator","getFallbackTranslator","useTranslator","ctx","useContext","useLocale","ThemeContext","ThemeProvider","theme","useResolvedTheme","defaultValue","url","init","RequestContext","RequestProvider","requestInit","requestHandler","shouldFetchAsBlob","createFetcher","useFetcher","useResolvedUrl","file","fetcher","needBlob","blobUrl","setBlobUrl","useState","createdRef","useRef","useEffect","cancelled","fetchAsBlobUrl","next","err","UnsupportedRenderer","fileName","fileType","onDownload","jsxs","FileQuestion","Download","useKeyboardNavigation","mode","currentIndex","totalFiles","onNavigate","onClose","rootRef","handlersRef","handleKeyDown","e","el","useThemeMode","systemDark","setSystemDark","mql","handler","ToolbarButton","icon","label","onClick","disabled","active","ariaKeyshortcuts","stateClass","renderToolbarItems","groups","dividerClass","group","gi","arr","React","item","ii","FilePreviewToolbar","toolGroups","showDownload","showCloseButton","actionGroups","motion","RendererError","error","onRetry","AlertCircle","RotateCw","RendererErrorBoundary","props","__publicField","errorInfo","_b","_a","RendererLoading","FilePreviewRenderer","currentFile","customRenderer","customRendererContext","onError","reset","Suspense","NAV_HIDE_DELAY","NavArrows","containerRef","hasPrev","hasNext","onPrev","onNext","resetKey","visible","setVisible","timerRef","scheduleHide","useCallback","show","prev","Fragment","ChevronLeft","ChevronRight","ImageRenderer","lazy","PdfRenderer","DocxRenderer","XlsxRenderer","PptxRenderer","MsgRenderer","EpubRenderer","MobiRenderer","VideoRenderer","AudioRenderer","MarkdownRenderer","JsonRenderer","CsvRenderer","XmlRenderer","SubtitleRenderer","ZipRenderer","TextRenderer","FontRenderer","BUILTIN_RENDERERS","MAX_ZIP_NESTING_DEPTH","FilePreviewContent","FilePreviewContentInner","files","customRenderers","zipNestingDepth","userMessages","headless","onCustomEvent","_requestInit","_requestHandler","_shouldFetchAsBlob","normalizedFiles","normalizeFiles","resolvedUrl","renderer","getFileType","resolvedTheme","contentRef","rendererInstanceRef","rendererToolbarGroups","setRendererToolbarGroups","cleanupRef","setupRenderer","initialGroups","unsubscribe","interval","rendererRef","emitCustom","name","payload","customCtx","handleDownload","downloadFileWithFetcher","rendererConfig","RendererComponent","rendererProps","FilePreviewModal","isOpen","originalOverflow","originalPaddingRight","scrollbarWidth","modalContent","AnimatePresence","createPortal","FilePreviewEmbed","width","height","className","style","configurePdfjs","options","configurePdfWorker","pdfjsLib","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,EAAE,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,EAAE,EAAE,IAAI;AAAA,MACxB,MAAM,EAAE;AAAA,IACd;AACE,MAAI,OAAO,KAAK,UAAU;AACxB,UAAMG,IAAIL,GAAE,CAAC;AACb,WAAO;AAAA,MACL,IAAI,OAAO,KAAK,IAAG,CAAE,IAAI,CAAC;AAAA,MAC1B,MAAMK;AAAA,MACN,KAAK;AAAA,MACL,MAAMH,EAAEG,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,QAAQH,EAAE,EAAE,IAAI;AAAA,IACxB,MAAM,EAAE;AAAA,EACZ;AACA;AACA,SAASI,GAAG,GAAG;AACb,SAAO,EAAE,IAAI,CAAC,GAAGD,MAAMD,GAAE,GAAGC,CAAC,CAAC;AAChC;AACA,SAASE,GAAG,GAAG;AACb,MAAIC;AACJ,QAAML,MAAMK,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,IAAG,MAAO,OAAO,SAASA,EAAE,YAAW,MAAO,IAAI,IAAI,EAAE,KAAK,YAAW;AAC1G,MAAI,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,MAAI,EAAE,SAAS,KAAK,KAAKA,MAAM;AAC7B,WAAO;AACT,MAAI,EAAE,SAAS,kBAAkB,KAAKA,MAAM;AAC1C,WAAO;AACT,MAAI,EAAE,SAAS,eAAe,KAAKA,MAAM;AACvC,WAAO;AACT,MAAI,EAAE,SAAS,gBAAgB,KAAKA,MAAM,UAAUA,MAAM;AACxD,WAAO;AACT,MAAI,EAAE,SAAS,YAAY,KAAKA,MAAM;AACpC,WAAO;AACT,MAAI,EAAE,SAAS,MAAM,KAAKA,MAAM;AAC9B,WAAO;AACT,MAAI,CAAC,QAAQ,OAAO,QAAQ,KAAK,EAAE,SAASA,CAAC,KAAK,MAAM,oCAAoC,MAAM;AAChG,WAAO;AACT,MAAI,CAAC,OAAO,KAAK,EAAE,SAASA,CAAC,KAAK,MAAM,cAAc,MAAM;AAC1D,WAAO;AACT,MAAIA,MAAM,SAAS,MAAM,qBAAqB,MAAM;AAClD,WAAO;AACT,MAAI,CAAC,OAAO,OAAO,OAAO,QAAQ,OAAO,OAAO,QAAQ,MAAM,EAAE,SAASA,CAAC,KAAK,MAAM,cAAc,MAAM,0BAA0B,MAAM;AACvI,WAAO;AACT,MAAIA,MAAM,SAAS,MAAM,qBAAqB,MAAM;AAClD,WAAO;AACT,MAAI,CAAC,OAAO,OAAO,QAAQ,OAAO,EAAE,SAASA,CAAC,KAAK,EAAE,WAAW,OAAO,KAAK,MAAM,2BAA2B,MAAM,4BAA4B,MAAM,4BAA4B,MAAM,4BAA4B,MAAM;AACvN,WAAO;AACT,MAAI,EAAE,WAAW,QAAQ,KAAK,CAAC,OAAO,QAAQ,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,KAAK,EAAE,SAASA,CAAC;AAC9G,WAAO;AACT,MAAI,EAAE,WAAW,QAAQ,KAAK,CAAC,OAAO,OAAO,OAAO,OAAO,QAAQ,KAAK,EAAE,SAASA,CAAC;AAClF,WAAO;AACT,MAAIA,MAAM,QAAQA,MAAM;AACtB,WAAO;AACT,MAAI,MAAM,sBAAsBA,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,SAAO,EAAE,WAAW,OAAO,KAAKA,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,IAAI,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,MAAI,EAAEE,CAAC;AACL,WAAO,EAAEA,CAAC;AACZ,MAAI,EAAE,WAAW,GAAG,GAAG;AACrB,UAAM,IAAI,EAAE,YAAW,GAAIO,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,EAAE,CAAC;AACL,aAAOA,EAAE,CAAC;AACZ,QAAI,EAAE,WAAW,MAAM;AACrB,aAAO;AACT,QAAI,EAAE,SAAS,IAAI;AACjB,aAAO;AACT,QAAI,EAAE,SAAS,QAAQ;AACrB,aAAO;AAAA,EACX;AACA,SAAO;AACT;AAiBA,SAASC,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;AAMA,SAASC,GAAG,GAAG;AACb,MAAIP;AACJ,YAAUA,IAAI,EAAE,MAAM,GAAG,EAAE,IAAG,MAAO,OAAO,SAASA,EAAE,YAAW,MAAO,QAAQ,QAAQ,MAAM;AACjG;AACA,SAASQ,GAAG,GAAG,IAAI,IAAI;AACrB,QAAMR,IAAI,EAAE,aAAa,KAAKJ,IAAI,EAAE,oBAAoB,IAAI,IAAI,CAAA;AAChE,MAAIS,IAAI,CAAA,GAAI,IAAI,IAAI,IAAI,IAAI,IAAI;AAChC,QAAM,IAAI,EAAE;AACZ,SAAO,IAAI,KAAK;AACd,UAAMI,IAAI,EAAE,CAAC;AACb,QAAI,GAAG;AACL,UAAIA,MAAM,KAAK;AACb,YAAI,EAAE,IAAI,CAAC,MAAM,KAAK;AACpB,eAAK,KAAK,KAAK;AACf;AAAA,QACF;AACA,YAAI,IAAI,KAAK;AACb;AAAA,MACF;AACA,WAAKA,GAAG,KAAK;AACb;AAAA,IACF;AACA,QAAIA,MAAM,KAAK;AACb,UAAI,IAAI,KAAK;AACb;AAAA,IACF;AACA,QAAIA,MAAMT,GAAG;AACX,MAAAK,EAAE,KAAK,CAAC,GAAG,IAAI,IAAI,KAAK;AACxB;AAAA,IACF;AACA,QAAII,MAAM,MAAM;AACd,QAAE,IAAI,CAAC,MAAM;AAAA,MACb,KAAK,IAAIJ,EAAE,KAAK,CAAC,GAAG,EAAE,KAAKA,CAAC,GAAGA,IAAI,CAAA,GAAI,IAAI,IAAI,KAAK;AACpD;AAAA,IACF;AACA,QAAII,MAAM;AAAA,GACX;AACG,MAAAJ,EAAE,KAAK,CAAC,GAAG,EAAE,KAAKA,CAAC,GAAGA,IAAI,CAAA,GAAI,IAAI,IAAI,KAAK;AAC3C;AAAA,IACF;AACA,SAAKI,GAAG,KAAK;AAAA,EACf;AACA,QAAM,EAAE,SAAS,KAAKJ,EAAE,SAAS,OAAOA,EAAE,KAAK,CAAC,GAAG,EAAE,KAAKA,CAAC,IAAI,EAAE,SAAS,KAAK;AAC7E,UAAMI,IAAI,EAAE,EAAE,SAAS,CAAC;AACxB,QAAIA,EAAE,WAAW,KAAKA,EAAE,CAAC,MAAM;AAC7B,QAAE,IAAG;AAAA;AAEL;AAAA,EACJ;AACA,MAAI,IAAI,IAAIC,IAAI;AAChB,EAAAd,KAAK,EAAE,SAAS,MAAM,IAAI,EAAE,CAAC,GAAGc,IAAI,EAAE,MAAM,CAAC;AAC7C,QAAMC,IAAI,KAAK;AAAA,IACb,EAAE;AAAA,IACF,GAAGD,EAAE,IAAI,CAACD,MAAMA,EAAE,MAAM;AAAA,IACxB;AAAA,EACJ;AACE,aAAWA,KAAKC;AACd,WAAOD,EAAE,SAASE,IAAK,CAAAF,EAAE,KAAK,EAAE;AAClC,SAAO;AAAA,IACL,QAAQ;AAAA,IACR,MAAMC;AAAA,IACN,aAAaC;AAAA,IACb,WAAWX;AAAA,EACf;AACA;AACA,SAASY,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,QAAMb,IAAI,CAAC,CAAC,MAAM,aAAa,KAAK,UAAU,KAAK,YAAY,IAAIJ,IAAII,IAAI,EAAE,WAAW,QAAQ,OAAO,IAAIA,IAAI,EAAE,SAAS,QAAQK,IAAIL,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,EAAE,GAAGK,GAAG,QAAQ,EAAC,IAAKA,GAAG,IAAI,MAAMT,EAAE,GAAG,CAAC;AACvM,MAAI,CAAC,EAAE,GAAI,OAAM,IAAI,MAAM,SAAS,EAAE,MAAM,EAAE;AAC9C,QAAM,IAAI,MAAM,EAAE,YAAW;AAC7B,SAAOgB,GAAE,CAAC;AACZ;AACA,eAAeE,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,QAAMf,IAAI,IAAI,QAAQ,EAAE,WAAW,CAAA,CAAE;AACrC,SAAO,EAAE,WAAW,IAAI,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAACJ,GAAG,MAAM;AAC3D,IAAAI,EAAE,IAAI,GAAGJ,CAAC;AAAA,EACZ,CAAC,GAAG;AAAA,IACF,GAAG;AAAA,IACH,GAAG;AAAA,IACH,SAASI;AAAA,EACb;AACA;AACA,SAASgB,GAAG,GAAG;AACb,QAAM,KAAK,KAAK,OAAO,SAAS,EAAE,oBAAoB,CAACpB,GAAG,MAAM,MAAMA,GAAG,CAAC,IAAII,IAAI,KAAK,OAAO,SAAS,EAAE;AACzG,SAAO,OAAOJ,GAAG,MAAM;AACrB,UAAMS,IAAI,MAAMS,GAAEd,GAAGJ,CAAC,GAAG,IAAImB,GAAEV,GAAG,CAAC;AACnC,WAAO,EAAET,GAAG,CAAC;AAAA,EACf;AACF;AACA,eAAeqB,GAAG,GAAG,IAAI,OAAOjB,GAAG;AACjC,QAAMJ,IAAI,MAAM,EAAE,GAAGI,CAAC;AACtB,MAAI,CAACJ,EAAE,GAAI,OAAM,IAAI,MAAM,SAASA,EAAE,MAAM,EAAE;AAC9C,QAAM,IAAI,MAAMA,EAAE,KAAI;AACtB,SAAO,IAAI,gBAAgB,CAAC;AAC9B;AACA,eAAesB,GAAG,GAAG,GAAGlB,IAAI,OAAOJ,GAAG;AACpC,QAAM,IAAI,MAAMI,EAAE,GAAGJ,CAAC;AACtB,MAAI,CAAC,EAAE,GAAI,OAAM,IAAI,MAAM,SAAS,EAAE,MAAM,EAAE;AAC9C,QAAMS,IAAI,MAAM,EAAE,KAAI,GAAI,IAAI,IAAI,gBAAgBA,CAAC;AACnD,MAAI;AACF,UAAM,IAAI,SAAS,cAAc,GAAG;AACpC,MAAE,OAAO,GAAG,EAAE,WAAW,GAAG,EAAE,MAAM,UAAU,QAAQ,SAAS,KAAK,YAAY,CAAC,GAAG,EAAE,MAAK,GAAI,SAAS,KAAK,YAAY,CAAC;AAAA,EAC5H,UAAC;AACC,eAAW,MAAM,IAAI,gBAAgB,CAAC,GAAG,GAAG;AAAA,EAC9C;AACF;AACA,SAASc,GAAE,GAAG;AACZ,QAAM,IAAI,EAAE,KAAI,EAAG,QAAQ,KAAK,GAAG,GAAGnB,IAAI,EAAE,MAAM,GAAG,EAAE,IAAI,CAACJ,MAAMA,EAAE,MAAM;AAC1E,MAAII,EAAE,WAAW,GAAG;AAClB,UAAM,CAACJ,GAAG,GAAGS,CAAC,IAAIL;AAClB,WAAO,OAAOJ,CAAC,IAAI,OAAO,OAAO,CAAC,IAAI,KAAK,OAAOS,CAAC;AAAA,EACrD;AACA,MAAIL,EAAE,WAAW,GAAG;AAClB,UAAM,CAACJ,GAAG,CAAC,IAAII;AACf,WAAO,OAAOJ,CAAC,IAAI,KAAK,OAAO,CAAC;AAAA,EAClC;AACA,SAAO,OAAO,CAAC,KAAK;AACtB;AACA,SAASwB,GAAG,GAAG;AACb,MAAI,CAAC,SAAS,CAAC,KAAK,IAAI,EAAG,QAAO;AAClC,QAAM,IAAI,KAAK,MAAM,IAAI,GAAG,GAAGpB,IAAI,IAAI,KAAKJ,IAAI,KAAK,MAAM,IAAI,GAAG,IAAI,IAAI,IAAI,KAAK,MAAM,IAAI,GAAG,IAAI,IAAIS,IAAI,KAAK,MAAM,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,IAAI,MAAM,EAAE,SAAQ,EAAG,SAAS,GAAG,GAAG;AAChL,SAAO,GAAG,EAAEA,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAET,CAAC,CAAC,IAAI,EAAEI,GAAG,CAAC,CAAC;AAC3C;AACA,MAAMqB,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,QAAM5B,IAAI,EAAE,QAAQ,UAAU;AAAA,CAC/B,EAAE,QAAQ,WAAW,EAAE,EAAE,MAAM;AAAA,CAC/B,GAAGO,IAAI,CAAA;AACN,MAAIE,GAAGoB,IAAI;AACX,MAAI,MAAM,OAAO;AACf,UAAMC,IAAI,CAAA;AACV,WAAOD,IAAI7B,EAAE,UAAUA,EAAE6B,CAAC,EAAE,KAAI,MAAO;AACrC,MAAAC,EAAE,KAAK9B,EAAE6B,CAAC,CAAC,GAAGA;AAChB,SAAKpB,IAAIqB,EAAE,KAAK;AAAA,CACnB,GAAGD,IAAI7B,EAAE,UAAUA,EAAE6B,CAAC,EAAE,KAAI,MAAO,KAAM,CAAAA;AAAA,EACxC;AACA,SAAOA,IAAI7B,EAAE,UAAU;AACrB,WAAO6B,IAAI7B,EAAE,UAAUA,EAAE6B,CAAC,EAAE,KAAI,MAAO,KAAM,CAAAA;AAC7C,QAAIA,KAAK7B,EAAE,OAAQ;AACnB,QAAI8B,GAAGC,IAAI;AACX,QAAIN,GAAE,KAAKzB,EAAE6B,CAAC,CAAC;AACb,MAAAE,IAAI/B,EAAE6B,CAAC,GAAGA;AAAA,aACHC,IAAI9B,EAAE6B,CAAC,EAAE,KAAI,KAAM,QAAQA,KAAKA,IAAI7B,EAAE,UAAUyB,GAAE,KAAKzB,EAAE6B,CAAC,CAAC;AAClE,MAAAE,IAAI/B,EAAE6B,CAAC,GAAGA;AAAA;AAEV;AACF,QAAI,CAACE,EAAG;AACR,UAAMC,IAAID,EAAE,MAAM,+BAA+B;AACjD,QAAI,CAACC,EAAG;AACR,UAAMC,IAAIV,GAAES,EAAE,CAAC,CAAC,GAAGlB,IAAIS,GAAES,EAAE,CAAC,CAAC,GAAG,IAAI,CAAA;AACpC,WAAOH,IAAI7B,EAAE,UAAUA,EAAE6B,CAAC,EAAE,KAAI,MAAO;AACrC,QAAE,KAAK7B,EAAE6B,CAAC,CAAC,GAAGA;AAChB,IAAAtB,EAAE,KAAK,EAAE,IAAIuB,GAAG,OAAOG,GAAG,KAAKnB,GAAG,MAAM,EAAE,KAAK;AAAA,CAClD,GAAG;AAAA,EACF;AACA,SAAO,EAAE,QAAQ,GAAG,MAAMP,GAAG,QAAQE,EAAC;AACxC;AACA,SAASyB,EAAE,GAAG,GAAG9B,GAAG;AAClB,QAAMJ,IAAI,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC;AACjC,MAAIS,IAAI;AACR,MAAIL,GAAG;AACL,UAAM,KAAKA,IAAI,OAAO,MAAM,GAAG,CAAC;AAChC,IAAAK,IAAI,OAAO,CAAC;AAAA,EACd;AACA,SAAOT,IAAI,KAAK,IAAIS,IAAI;AAC1B;AACA,SAAS0B,GAAE,GAAG,GAAG;AACf,QAAM/B,IAAI,mDAAmD,KAAK,EAAE,KAAI,CAAE;AAC1E,MAAI,CAACA,EAAG,QAAO;AACf,QAAMJ,IAAII,EAAE,CAAC,EAAE,eAAe,IAAIA,EAAE,CAAC,EAAE,KAAI;AAC3C,MAAI,EAAE,SAASJ,CAAC,IAAI,GAAGA,MAAM,UAAU;AACrC,UAAMS,IAAI,OAAO,CAAC;AAClB,UAAMA,CAAC,MAAM,EAAE,WAAWA;AAAA,EAC5B;AACA,SAAO;AACT;AACA,SAAS2B,GAAE,GAAG;AACZ,QAAMhC,IAAI,EAAE,QAAQ,UAAU;AAAA,CAC/B,EAAE,QAAQ,WAAW,EAAE,EAAE,MAAM;AAAA,CAC/B,GAAGJ,IAAI,EAAE,UAAU,IAAI,UAAU,EAAC,GAAIO,IAAI,8CAA8CE,IAAI,CAAA;AAC3F,aAAWsB,KAAK3B,GAAG;AACjB,UAAM4B,IAAID,EAAE,KAAI;AAChB,QAAI,CAACC,KAAKG,GAAEH,GAAGhC,CAAC,EAAG;AACnB,UAAMiC,IAAI,CAAA;AACV,QAAInB,IAAI;AACR,IAAAP,EAAE,YAAY;AACd,QAAIQ;AACJ,YAAQA,IAAIR,EAAE,KAAKyB,CAAC,OAAO,QAAQjB,EAAE,UAAUD;AAC7C,MAAAmB,EAAE,KAAKC,EAAEnB,EAAE,CAAC,GAAGA,EAAE,CAAC,GAAGA,EAAE,CAAC,CAAC,CAAC,GAAGD,IAAIC,EAAE,QAAQA,EAAE,CAAC,EAAE;AAClD,QAAIkB,EAAE,WAAW,EAAG;AACpB,UAAMpB,IAAImB,EAAE,MAAMlB,CAAC,EAAE,KAAI;AACzB,eAAW,KAAKmB;AACd,MAAAxB,EAAE,KAAK,EAAE,OAAO,GAAG,MAAMI,GAAG;AAAA,EAChC;AACA,EAAAJ,EAAE,KAAK,CAACsB,GAAGC,MAAMD,EAAE,QAAQC,EAAE,KAAK;AAClC,QAAMH,IAAI7B,EAAE,WAAW;AACvB,SAAO,EAAE,QAAQ,OAAO,MAAMS,EAAE,IAAI,CAACsB,GAAGC,MAAM;AAC5C,UAAMC,IAAI,KAAK,IAAI,GAAGF,EAAE,QAAQF,CAAC,GAAGf,IAAIL,EAAEuB,IAAI,CAAC,GAAGjB,IAAID,IAAI,KAAK,IAAImB,GAAGnB,EAAE,QAAQe,CAAC,IAAII,IAAI;AACzF,WAAO,EAAE,OAAOA,GAAG,KAAKlB,GAAG,MAAMgB,EAAE,KAAI;AAAA,EACzC,CAAC,GAAG,UAAU/B,EAAE,SAAQ;AAC1B;AACA,SAASqC,GAAE,GAAG;AACZ,QAAMjC,IAAI,EAAE,QAAQ,UAAU;AAAA,CAC/B,EAAE,QAAQ,WAAW,EAAE,EAAE,MAAM;AAAA,CAC/B,GAAGJ,IAAI,EAAE,UAAU,CAAA,GAAI,UAAU,KAAKO,IAAI,8CAA8CE,IAAI,4CAA4CoB,IAAI,CAAA;AAC3I,aAAWG,KAAK5B,GAAG;AACjB,UAAM6B,IAAID,EAAE,KAAI;AAChB,QAAI,CAACC,KAAKE,GAAEF,GAAGjC,CAAC,EAAG;AACnB,UAAMc,IAAI,CAAA;AACV,QAAIC,IAAI;AACR,IAAAR,EAAE,YAAY;AACd,QAAIM;AACJ,YAAQA,IAAIN,EAAE,KAAK0B,CAAC,OAAO,QAAQpB,EAAE,UAAUE;AAC7C,MAAAD,EAAE,KAAKoB,EAAErB,EAAE,CAAC,GAAGA,EAAE,CAAC,GAAGA,EAAE,CAAC,CAAC,CAAC,GAAGE,IAAIF,EAAE,QAAQA,EAAE,CAAC,EAAE;AAClD,QAAIC,EAAE,WAAW,EAAG;AACpB,UAAM,IAAImB,EAAE,MAAMlB,CAAC;AACnB,eAAWuB,KAAKxB;AACd,MAAAe,EAAE,KAAK,EAAE,OAAOS,GAAG,KAAK,GAAG;AAAA,EAC/B;AACA,EAAAT,EAAE,KAAK,CAACG,GAAGC,MAAMD,EAAE,QAAQC,EAAE,KAAK;AAClC,QAAMH,IAAI9B,EAAE,WAAW;AACvB,SAAO,EAAE,QAAQ,QAAQ,MAAM6B,EAAE,IAAI,CAACG,GAAGC,MAAM;AAC7C,UAAMnB,IAAI,CAAA;AACV,QAAIC,IAAI,IAAIF,IAAI,GAAG,IAAI;AACvB,IAAAJ,EAAE,YAAY;AACd,QAAI6B;AACJ,YAAQA,IAAI7B,EAAE,KAAKuB,EAAE,GAAG,OAAO,QAAQ;AACrC,YAAMO,IAAIP,EAAE,IAAI,MAAMnB,GAAGyB,EAAE,KAAK;AAChC,YAAM,QAAQC,KAAKzB,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,GAAG,IAAIgB,CAAC,GAAG,MAAMS,EAAC,CAAE,GAAGxB,KAAKwB,GAAG,IAAIL,EAAEI,EAAE,CAAC,GAAGA,EAAE,CAAC,GAAGA,EAAE,CAAC,CAAC,GAAGzB,IAAIyB,EAAE,QAAQA,EAAE,CAAC,EAAE;AAAA,IACzH;AACA,UAAME,IAAIR,EAAE,IAAI,MAAMnB,CAAC;AACvB,UAAM,QAAQ2B,KAAK1B,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,GAAG,IAAIgB,CAAC,GAAG,MAAMU,EAAC,CAAE,GAAGzB,KAAKyB;AACxE,UAAMC,IAAI,KAAK,IAAI,GAAGT,EAAE,QAAQF,CAAC,GAAGY,IAAIb,EAAEI,IAAI,CAAC,GAAGU,IAAID,IAAI,KAAK,IAAID,GAAGC,EAAE,QAAQZ,CAAC,IAAIW,IAAI;AACzF,WAAO;AAAA,MACL,OAAOA;AAAA,MACP,KAAKE;AAAA,MACL,MAAM5B,EAAE,KAAI;AAAA,MACZ,OAAOD,EAAE,SAASA,IAAI;AAAA,IAC5B;AAAA,EACE,CAAC,GAAG,UAAUd,EAAE,SAAQ;AAC1B;AACA,SAAS4C,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,QAAM7C,IAAI,EAAE,QAAQ,UAAU;AAAA,CAC/B,EAAE,QAAQ,WAAW,EAAE,EAAE,MAAM;AAAA,CAC/B;AACC,MAAIO,IAAI,IAAIE,IAAI,CAAA;AAChB,QAAMoB,IAAI,IAAIC,IAAI,CAAA;AAClB,aAAWC,KAAK/B,GAAG;AACjB,UAAMgC,IAAID,EAAE,QAAQ,QAAQ,EAAE,GAAGE,IAAID,EAAE,KAAI,GAAIlB,IAAI,oBAAoB,KAAKmB,CAAC;AAC7E,QAAInB,GAAG;AACL,MAAAP,IAAIO,EAAE,CAAC,EAAE,YAAW,GAAIgB,EAAE,KAAKE,CAAC;AAChC;AAAA,IACF;AACA,QAAIzB,MAAM,UAAU;AAClB,MAAAuB,EAAE,KAAKE,CAAC;AACR;AAAA,IACF;AACA,UAAM,IAAI,oBAAoB,KAAKC,CAAC;AACpC,QAAI,GAAG;AACL,MAAAxB,IAAI,EAAE,CAAC,EAAE,MAAM,GAAG,EAAE,IAAI,CAACqC,MAAMA,EAAE,KAAI,CAAE;AACvC;AAAA,IACF;AACA,UAAMjC,IAAI,gCAAgC,KAAKoB,CAAC;AAChD,QAAI,CAACpB,KAAKA,EAAE,CAAC,EAAE,YAAW,MAAO,aAAaJ,EAAE,WAAW,EAAG;AAC9D,UAAMsC,IAAItC,EAAE,QAAQ,IAAII,EAAE,CAAC,EAAE,MAAM,GAAG,GAAG2B,IAAI,EAAE,MAAM,GAAGO,IAAI,CAAC,GAAGN,IAAI,EAAE,MAAMM,IAAI,CAAC,EAAE,KAAK,GAAG,GAAGL,IAAI,CAAA;AAClG,IAAAjC,EAAE,QAAQ,CAACqC,GAAGE,MAAM;AAClB,MAAAN,EAAEI,CAAC,IAAIE,MAAMD,IAAI,IAAIN,IAAID,EAAEQ,CAAC,KAAK;AAAA,IACnC,CAAC;AACD,UAAML,IAAIC,GAAEF,EAAE,SAAS,EAAE,GAAGH,IAAIK,GAAEF,EAAE,OAAO,EAAE,GAAGO,KAAKP,EAAE,QAAQ,IAAI,QAAQ,QAAQ;AAAA,CACtF,EAAE,QAAQ,QAAQ;AAAA,CAClB,EAAE,QAAQ,QAAQ,GAAG,EAAE,QAAQ,cAAc,EAAE;AAC5C,IAAAb,EAAE,KAAK,EAAE,OAAOc,GAAG,KAAKJ,GAAG,MAAMU,GAAG,OAAOP,EAAE,MAAK,CAAE;AAAA,EACtD;AACA,SAAOb,EAAE,KAAK,CAACE,GAAGC,MAAMD,EAAE,QAAQC,EAAE,KAAK,GAAG;AAAA,IAC1C,QAAQ;AAAA,IACR,MAAMH;AAAA,IACN,QAAQC,EAAE,KAAK;AAAA,CAClB,EAAE,KAAI,KAAM;AAAA,EACb;AACA;AACA,SAASoB,EAAE,GAAG;AACZ,QAAM,IAAI,EAAE,KAAI;AAChB,MAAI,CAAC,EAAG,QAAO;AACf,QAAM9C,IAAI,mCAAmC,KAAK,CAAC;AACnD,MAAIA,GAAG;AACL,UAAM,IAAI,OAAOA,EAAE,CAAC,CAAC,GAAGK,IAAIL,EAAE,CAAC,EAAE,YAAW;AAC5C,WAAOK,MAAM,MAAM,IAAI,OAAOA,MAAM,MAAM,IAAI,KAAKA,MAAM,OAAO,IAAI,MAAM;AAAA,EAC5E;AACA,QAAMT,IAAI,EAAE,MAAM,GAAG;AACrB,SAAOA,EAAE,WAAW,IAAI,OAAOA,EAAE,CAAC,CAAC,IAAI,OAAO,OAAOA,EAAE,CAAC,CAAC,IAAI,KAAK,OAAOA,EAAE,CAAC,CAAC,IAAIA,EAAE,WAAW,IAAI,OAAOA,EAAE,CAAC,CAAC,IAAI,KAAK,OAAOA,EAAE,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK;AACpJ;AACA,SAASmD,GAAE,GAAG;AACZ,SAAO,EAAE,QAAQ,uBAAuB,CAAC,GAAG/C,MAAM,OAAO,aAAa,SAASA,GAAG,EAAE,CAAC,CAAC,EAAE,QAAQ,aAAa,CAAC,GAAGA,MAAM,OAAO,aAAa,OAAOA,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,SAASgD,GAAE,GAAG;AACZ,MAAI7C,GAAG,GAAGsB;AACV,QAAM3B,IAAI,IAAIE,IAAI;AAClB,MAAIJ;AACJ,UAAQA,IAAII,EAAE,KAAK,CAAC,OAAO,QAAQ;AACjC,UAAM,IAAIJ,EAAE,CAAC,GAAG,IAAIA,EAAE,CAAC,GAAG,MAAMO,IAAI,kCAAkC,KAAK,CAAC,MAAM,OAAO,SAASA,EAAE,CAAC,MAAM,IAAI,MAAM,IAAI,gCAAgC,KAAK,CAAC,MAAM,OAAO,SAAS,EAAE,CAAC,MAAM,IAAIO,MAAMe,IAAI,gCAAgC,KAAK,CAAC,MAAM,OAAO,SAASA,EAAE,CAAC,MAAM,IAAId,IAAImC,EAAE,CAAC;AAC5R,QAAIrC;AACJ,QAAIA,IAAIqC,EAAE,CAAC,IAAIpC,IAAID,IAAIE,IAAImC,EAAEpC,CAAC,IAAID,IAAIE,IAAI;AAC1C,UAAMgC,IAAII;AAAA,MACR,EAAE,QAAQ,4BAA4B;AAAA,CAC3C,EAAE,QAAQ,YAAY,EAAE;AAAA,IACzB,EAAM,QAAQ,WAAW,GAAG,EAAE,QAAQ,QAAQ;AAAA,CAC7C,EAAE,KAAI;AACH,KAACJ,KAAKhC,KAAKF,MAAMX,EAAE,KAAK,EAAE,OAAOa,GAAG,KAAKF,GAAG,MAAMkC,EAAC,CAAE;AAAA,EACvD;AACA,SAAO7C,EAAE,KAAK,CAAC,GAAG,MAAM,EAAE,QAAQ,EAAE,KAAK,GAAG,EAAE,QAAQ,QAAQ,MAAMA,EAAC;AACvE;AACA,SAASmD,GAAE,GAAG;AACZ,QAAM,IAAI,EAAE,QAAQ,WAAW,EAAE;AACjC,MAAI,OAAO,YAAY,KAAK;AAC1B,UAAMjD,IAAI,IAAI,UAAS,EAAG,gBAAgB,GAAG,iBAAiB;AAC9D,QAAIA,EAAE,qBAAqB,aAAa,EAAE,WAAW,GAAG;AACtD,YAAMG,IAAIH,EAAE,yBAAyBA,EAAE,uBAAuB,KAAK,GAAG,IAAIA,EAAE,qBAAqB,GAAG;AACpG,UAAIG,EAAE,SAAS,GAAG;AAChB,cAAME,IAAI,CAAA;AACV,iBAASoB,IAAI,GAAGA,IAAItB,EAAE,QAAQsB,KAAK;AACjC,gBAAMC,IAAIvB,EAAEsB,CAAC,GAAGE,IAAID,EAAE,aAAa,OAAO,KAAK,IAAIE,IAAIF,EAAE,aAAa,KAAK,KAAK,IAAIG,IAAIH,EAAE,aAAa,KAAK,KAAK,IAAIhB,IAAIoC,EAAEnB,CAAC;AAC5H,cAAI;AACJ,UAAAC,IAAI,IAAIkB,EAAElB,CAAC,IAAIC,IAAI,IAAInB,IAAIoC,EAAEjB,CAAC,IAAI,IAAInB,IAAI;AAC1C,cAAID,IAAI;AACR,UAAAiB,EAAE,WAAW,QAAQ,CAAC,MAAM;AAC1B,gBAAI,EAAE,aAAa;AACjB,cAAAjB,KAAK,EAAE,aAAa;AAAA,qBACb,EAAE,aAAa,GAAG;AACzB,oBAAM2B,IAAI;AACV,eAACA,EAAE,aAAaA,EAAE,SAAS,YAAW,MAAO,OAAO3B,KAAK;AAAA,IACnEA,KAAK2B,EAAE,eAAe;AAAA,YACd;AAAA,UACF,CAAC;AACD,gBAAMO,IAAIlC,EAAE,QAAQ,WAAW,GAAG,EAAE,QAAQ,QAAQ;AAAA,CAC7D,EAAE,KAAI;AACG,WAACkC,KAAKjC,KAAK,MAAML,EAAE,KAAK,EAAE,OAAOK,GAAG,KAAK,GAAG,MAAMiC,EAAC,CAAE;AAAA,QACvD;AACA,eAAOtC,EAAE,KAAK,CAACoB,GAAGC,MAAMD,EAAE,QAAQC,EAAE,KAAK,GAAG,EAAE,QAAQ,QAAQ,MAAMrB,EAAC;AAAA,MACvE;AAAA,IACF;AAAA,EACF;AACA,SAAO2C,GAAE,CAAC;AACZ;AACA,SAASE,GAAG,GAAG,GAAG;AAChB,UAAQ,KAAK3B,GAAE,CAAC,GAAC;AAAA,IACf,KAAK;AACH,aAAOS,GAAE,CAAC;AAAA,IACZ,KAAK;AACH,aAAOC,GAAE,CAAC;AAAA,IACZ,KAAK;AACH,aAAOQ,GAAE,GAAG,KAAK;AAAA,IACnB,KAAK;AACH,aAAOA,GAAE,GAAG,KAAK;AAAA,IACnB,KAAK;AACH,aAAOQ,GAAE,CAAC;AAAA,IACZ,KAAK;AACH,aAAOzB,GAAE,GAAG,KAAK;AAAA,IACnB,KAAK;AAAA,IACL;AACE,aAAOA,GAAE,GAAG,KAAK;AAAA,EACvB;AACA;AACA,eAAe2B,GAAG,GAAG;AACnB,SAAOC,GAAE,UAAU,CAAC;AACtB;AACA,SAASC,GAAG,GAAG;AACb,QAAM,IAAI,CAAA;AACV,SAAO,EAAE,QAAQ,CAACrD,GAAGJ,MAAM;AACzB,QAAIc;AACJ,UAAMP,IAAIP,EAAE,KAAKS,IAAIF,KAAK,CAACH,EAAE,SAAS,GAAG,IAAIA,IAAI,MAAMA,GAAGyB,IAAItB,IAAIE,EAAE,QAAQ,OAAO,EAAE,IAAIA,GAAGqB,IAAID,EAAE,YAAY,GAAG,GAAGE,IAAID,KAAK,IAAID,EAAE,MAAMC,IAAI,CAAC,IAAID,GAAGG,IAAIF,KAAK,IAAID,EAAE,MAAM,GAAGC,CAAC,IAAI,IAAIG,IAAI1B,IAAI,MAAMO,IAAId,EAAE,UAAU,OAAO,SAASc,EAAE,qBAAqB;AAC3P,MAAE,KAAK;AAAA,MACL,MAAML;AAAA,MACN,MAAMsB;AAAA,MACN,KAAKC;AAAA,MACL,OAAOzB;AAAA,MACP,MAAM0B;AAAA,MACN,MAAMjC,EAAE;AAAA,IACd,CAAK;AAAA,EACH,CAAC,GAAG;AACN;AACA,SAAS0D,GAAG,GAAG;AACb,QAAM,IAAI,EAAE,MAAM,IAAI,MAAM,IAAI,OAAO,IAAI,UAAU,CAAA,GAAI,MAAM,EAAC,GAAItD,IAAoB,oBAAI,IAAG;AAC/F,EAAAA,EAAE,IAAI,IAAI,CAAC;AACX,QAAMJ,IAAI,CAACS,MAAM;AACf,QAAIL,EAAE,IAAIK,CAAC,EAAG,QAAOL,EAAE,IAAIK,CAAC;AAC5B,UAAM,IAAIA,EAAE,MAAM,GAAG,EAAE,OAAO,OAAO;AACrC,QAAI,IAAI,GAAG,IAAI;AACf,eAAW,KAAK,GAAG;AACjB,UAAI,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK;AACtB,UAAI,IAAIL,EAAE,IAAI,CAAC;AACf,YAAM,IAAI,EAAE,MAAM,GAAG,MAAM,IAAI,KAAK,OAAO,IAAI,UAAU,CAAA,GAAI,MAAM,EAAC,GAAI,EAAE,SAAS,KAAK,CAAC,GAAGA,EAAE,IAAI,GAAG,CAAC,IAAI,IAAI;AAAA,IAChH;AACA,WAAO;AAAA,EACT;AACA,aAAWK,KAAK,GAAG;AACjB,QAAIA,EAAE,OAAO;AACX,MAAAT,EAAES,EAAE,KAAK,QAAQ,OAAO,EAAE,CAAC;AAC3B;AAAA,IACF;AACA,IAAAT,EAAES,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,QAAM,IAAI,CAACA,MAAM;AACf,QAAIA,EAAE,UAAU;AACd,MAAAA,EAAE,SAAS,KAAK,CAAC,GAAG,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,KAAK,IAAI,EAAE,KAAK,cAAc,EAAE,IAAI,CAAC;AAC/F,iBAAW,KAAKA,EAAE,SAAU,GAAE,CAAC;AAAA,IACjC;AAAA,EACF;AACA,SAAO,EAAE,CAAC,GAAG;AACf;AAOA,eAAekD,GAAG,GAAG,GAAGvD,GAAG;AACzB,QAAMJ,IAAI,EAAE,KAAK,CAAC;AAClB,MAAI,CAACA,EAAG,OAAM,IAAI,MAAM,wBAAwB,CAAC,EAAE;AACnD,QAAM,IAAI,MAAMA,EAAE,MAAM,aAAa;AACrC,SAAO,IAAI,KAAK,CAAC,CAAC,GAAGI,IAAI,EAAE,MAAMA,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,QAAM3D,IAAI,SAAS,EAAE,UAAU,GAAG,CAAC,GAAG,EAAE,GAAGJ,IAAI,SAAS,EAAE,UAAU,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,SAAS,EAAE,UAAU,GAAG,CAAC,GAAG,EAAE,GAAGS,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,EAAEL,CAAC,CAAC,CAAC,GAAG,IAAI,KAAK,IAAI,KAAK,KAAK,IAAI,GAAGK,EAAET,CAAC,CAAC,CAAC,GAAG,IAAI,KAAK,IAAI,KAAK,KAAK,IAAI,GAAGS,EAAE,CAAC,CAAC,CAAC;AAChT,SAAO,EAAE,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG,IAAI,EAAE,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG,IAAI,EAAE,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG;AAC3G;AACA,SAASuD,GAAG,GAAG;AACb,MAAI,KAAK,EAAE,SAAS,aAAa,EAAE,YAAY,SAAS;AACtD,UAAM,IAAI,EAAE;AACZ,QAAI;AACF,aAAOC,EAAE,CAAC;AAAA,EACd;AACF;AACA,SAASA,EAAE,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,UAAUzD,IAAI,UAAU,KAAK,OAAO,EAAE,QAAQ,WAAW,EAAE,OAAO;AAC1F,aAAO,OAAOA,MAAM,IAAI2D,GAAG,GAAG3D,CAAC,IAAI;AAAA,IACrC;AACA,QAAI,aAAa,KAAK,OAAO,EAAE,WAAW,UAAU;AAClD,YAAM,IAAI0D,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,EAAE,EAAE,KAAK,KAAK;AACxB,SAAO,CAAC,EAAE,OAAO,CAAC;AACpB;AACA,SAASE,GAAG,GAAG;AACb,QAAM,IAAI,CAAA;AACV,MAAI/D,IAAI;AACR,MAAI,EAAE,MAAM;AACV,UAAM,IAAI,EAAE;AACZ,SAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAYA,IAAI,IAAI,EAAE,OAAO,IAAI,EAAE,SAAS,EAAE,KAAK,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,OAAO,KAAK,EAAE,WAAW,EAAE,KAAK,SAAS,MAAM,EAAE,OAAO;AAClN,YAAMK,IAAIwD,EAAE,EAAE,KAAK;AACnB,MAAAxD,MAAML,IAAI,IAAI,EAAE,QAAQK;AAAA,IAC1B;AACA,MAAE,cAAcL,IAAI,IAAI,EAAE,YAAY,KAAK,EAAE,WAAWA,IAAI,IAAI,EAAE,SAAS;AAAA,EAC7E;AACA,QAAMJ,IAAIgE,GAAG,EAAE,IAAI;AACnB,MAAIhE,MAAMI,IAAI,IAAI,EAAE,UAAUJ,IAAI,EAAE,WAAW;AAC7C,UAAM,IAAI,EAAE;AACZ,MAAE,eAAeI,IAAI,IAAI,EAAE,QAAQ,EAAE,aAAa,EAAE,aAAaA,IAAI,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,aAAaA,IAAI,IAAI,EAAE,WAAW;AAAA,EACvI;AACA,MAAI,EAAE,QAAQ;AACZ,UAAM,IAAI,CAAA;AACV,QAAIK,IAAI;AACR,UAAM,IAAI,CAAC,OAAO,UAAU,QAAQ,OAAO;AAC3C,eAAW,KAAK,GAAG;AACjB,YAAM,IAAIyD,GAAG,EAAE,OAAO,CAAC,CAAC;AACxB,YAAM,EAAE,CAAC,IAAI,GAAGzD,IAAI;AAAA,IACtB;AACA,IAAAA,MAAML,IAAI,IAAI,EAAE,SAAS;AAAA,EAC3B;AACA,SAAOA,IAAI,IAAI;AACjB;AACA,SAASgE,GAAG,GAAG;AACb,SAAO,KAAK,UAAU,CAAC;AACzB;AACA,SAASC,GAAG,GAAG,GAAGjE,GAAG;AACnB,QAAMJ,IAAImE,GAAG,CAAC;AACd,MAAI,CAACnE,EAAG,QAAO;AACf,QAAM,IAAIoE,GAAGpE,CAAC,GAAGS,IAAIL,EAAE,IAAI,CAAC;AAC5B,MAAIK,MAAM,OAAQ,QAAOA;AACzB,QAAM,IAAI,EAAE;AACZ,SAAO,EAAE,KAAKT,CAAC,GAAGI,EAAE,IAAI,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,UAAMlE,IAAI,EAAE;AACZ,WAAOA,KAAK,OAAO,OAAOA,CAAC,IAAI;AAAA,EACjC;AACA,SAAO,OAAO,KAAK,YAAY,cAAc,IAAI,EAAE,SAAS,IAAI,CAACJ,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,SAASuE,GAAG,GAAG;AACb,QAAM,IAAI,EAAE,MAAM,GAAG,GAAGnE,IAAIoE,GAAE,EAAE,CAAC,CAAC,GAAGxE,IAAI,EAAE,CAAC,IAAIwE,GAAE,EAAE,CAAC,CAAC,IAAIpE;AAC1D,SAAO;AAAA,IACL,KAAKA,EAAE;AAAA,IACP,MAAMA,EAAE;AAAA,IACR,QAAQJ,EAAE;AAAA,IACV,OAAOA,EAAE;AAAA,EACb;AACA;AACA,SAASwE,GAAE,GAAG;AACZ,QAAM,IAAI,EAAE,MAAM,iBAAiB;AACnC,MAAI,CAAC,EAAG,QAAO,EAAE,KAAK,GAAG,KAAK,EAAC;AAC/B,QAAMpE,IAAI,EAAE,CAAC,GAAGJ,IAAI,SAAS,EAAE,CAAC,GAAG,EAAE;AACrC,MAAI,IAAI;AACR,WAASS,IAAI,GAAGA,IAAIL,EAAE,QAAQK;AAC5B,QAAI,IAAI,MAAML,EAAE,WAAWK,CAAC,IAAI;AAClC,SAAO,EAAE,KAAKT,GAAG,KAAK,EAAC;AACzB;AACA,SAASyE,GAAG,GAAG;AACb,QAAM,IAAI,CAAA;AACV,SAAO,EAAE,UAAU,CAACrE,MAAM;AACxB,UAAMJ,IAAI,CAAA,GAAI,IAAoB,oBAAI,IAAG,GAAIS,IAAI,CAAA,GAAI,IAAI,CAAA,GAAI,IAAI,CAAA,GAAI,IAAIL,EAAE;AAC3E,aAASW,IAAI,GAAGA,KAAK,GAAGA,KAAK;AAC3B,YAAMF,IAAIT,EAAE,UAAUW,CAAC;AACvB,MAAAF,EAAE,UAAU,EAAE,OAAOE,IAAI,CAAC,CAAC,IAAI,EAAE,OAAO,KAAK,MAAMF,EAAE,QAAQ,GAAG,EAAC;AAAA,IACnE;AACA,MAAE,MAAM,KAAK,IAAI,GAAG,EAAE;AACtB,UAAM,IAAoB,oBAAI,IAAG,GAAI,IAAIT,EAAE,OAAOU,KAAK,KAAK,OAAO,SAAS,EAAE,WAAW,CAAA;AACzF,eAAWC,KAAKD,GAAG;AACjB,MAAAL,EAAE,KAAKM,CAAC;AACR,YAAM,EAAE,KAAKF,GAAG,MAAMkC,GAAG,QAAQT,GAAG,OAAOE,EAAC,IAAK+B,GAAGxD,CAAC,GAAG,IAAIuB,IAAIzB,GAAG6B,IAAIF,IAAIO;AAC3E,QAAE,IAAI,GAAGlC,IAAI,CAAC,IAAIkC,IAAI,CAAC,IAAI,CAAC,GAAGL,CAAC,CAAC;AAAA,IACnC;AACA,IAAAtC,EAAE,QAAQ,EAAE,cAAc,GAAE,GAAI,CAACW,GAAGF,MAAM;AACxC,YAAMkC,IAAIlC,IAAI,GAAGyB,IAAI,CAAA;AACrB,MAAAvB,EAAE,SAAS,EAAE,cAAc,GAAE,GAAI,CAAC,GAAG2B,MAAM;AACzC,cAAMC,IAAID,IAAI;AACd,YAAI,EAAE,YAAY,EAAE,WAAW,EAAG;AAClC,cAAMH,IAAI+B,GAAG,CAAC,GAAGrB,IAAIoB,GAAG,GAAGrE,GAAG,CAAC,GAAG8C,IAAI,EAAE,MAAMP,EAAC;AAC/C,QAAAU,MAAM,OAAOH,EAAE,QAAQG;AACvB,cAAMD,IAAI,GAAGD,CAAC,IAAIJ,CAAC;AACnB,UAAE,IAAIK,CAAC,MAAMF,EAAE,QAAQ,EAAE,IAAIE,CAAC,IAAIV,EAAE,OAAOK,CAAC,CAAC,IAAIG;AAAA,MACnD,CAAC;AACD,YAAMN,IAAI,EAAE,OAAOF,EAAC;AACpB,MAAAvB,EAAE,WAAWyB,EAAE,SAAS,KAAK,MAAMzB,EAAE,SAAS,KAAK,IAAI,EAAE,OAAOgC,CAAC,CAAC,IAAIP;AAAA,IACxE,CAAC,GAAG,EAAE,KAAK;AAAA,MACT,MAAMpC,EAAE;AAAA,MACR,QAAQJ;AAAA,MACR,QAAQS;AAAA,MACR,MAAM;AAAA,MACN,MAAM;AAAA,IACZ,CAAK;AAAA,EACH,CAAC,GAAG;AACN;AACA,SAASiE,GAAG,GAAG,GAAGtE,IAAI,UAAU;AAC9B,QAAMJ,IAAI,EAAE,SAAS,GAAGS,IAAIT,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,GAAE,EAAE,CAAE,IAAI,CAAA,GAAI6B,IAAI,CAAA;AACnE,MAAI7B,GAAG;AACL,UAAM+B,IAAI,CAAA;AACV,MAAE,QAAQ,CAACC,GAAGC,MAAM;AAClB,MAAAF,EAAE,OAAOE,CAAC,CAAC,IAAI,EAAE,MAAMD,GAAG,OAAO,EAAC;AAAA,IACpC,CAAC,GAAGH,EAAE,CAAC,IAAI,EAAE,OAAOE,EAAC;AAAA,EACvB;AACA,QAAMD,IAAI9B,IAAI,IAAI;AAClB,SAAO,EAAE,QAAQ,CAAC+B,GAAGC,MAAM;AACzB,UAAMC,IAAI,CAAA;AACV,IAAAF,EAAE,QAAQ,CAACjB,GAAG,MAAM;AAClB,MAAAA,MAAM,UAAUA,MAAM,OAAOmB,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,MAAMnB,EAAC;AAAA,IACvD,CAAC,GAAGe,EAAE,OAAOG,IAAIF,CAAC,CAAC,IAAI,EAAE,OAAOG,EAAC;AAAA,EACnC,CAAC,GAAG,CAAC,EAAE,MAAM7B,GAAG,QAAQK,GAAG,MAAMoB,GAAG;AACtC;AACA,SAAS8C,GAAG,GAAG,GAAG;AAChB,MAAI9C;AACJ,MAAI,OAAO,SAAS,IAAK;AACzB,QAAM,KAAK,KAAK,OAAO,SAAS,EAAE,cAAcA,IAAI,KAAK,OAAO,SAAS,EAAE,wBAAwB,OAAO,SAASA,EAAE,YAAY,IAAI;AAAA,IACnI,WAAW7B,IAAI,gCAAgC,CAAC;AAAA,IAChD,SAASO,IAAI,gCAAgC,CAAC;AAAA,IAC9C,YAAYE,IAAI;AAAA,EACpB,IAAM,KAAK,CAAA;AACT,IAAE,wBAAwB,EAAE,oBAAoB,YAAYT,GAAG,EAAE,oBAAoB,UAAUO,GAAG,EAAE,oBAAoB,aAAaE;AACvI;AACA,MAAMmE,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,CAAC3E,GAAGJ,MAAM;AACjC,UAAM,IAAI,EAAEA,CAAC;AACb,WAAO,MAAM,SAAS,IAAIA,CAAC,MAAM,OAAO,CAAC;AAAA,EAC3C,CAAC,IAAI;AACP;AACA,SAASiF,EAAG,GAAG;AACb,MAAIpD;AACJ,QAAM3B,IAAI,EAAE,kBAAkB,SAAS,IAAI4E,EAAE,EAAE,MAAM,KAAKA,EAAE5E,CAAC,KAAK4E,EAAE,OAAO,GAAG9E,KAAK6B,IAAI,EAAE,aAAa,OAAO,SAASA,EAAE,EAAE,MAAM,GAAGtB,IAAIP,IAAI,EAAE,GAAG,GAAG,GAAGA,EAAC,IAAK,GAAGS,IAAIqE,EAAE,OAAO;AAC5K,SAAO,CAAC,GAAG,MAAM;AACf,UAAM,IAAIvE,EAAE,CAAC,KAAKE,EAAE,CAAC,KAAK;AAC1B,WAAOuE,GAAG,GAAG,CAAC;AAAA,EAChB;AACF;AACA,MAAME,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,MAAIhF;AACJ,QAAMF,MAAME,IAAI,EAAE,MAAM,GAAG,EAAE,IAAG,MAAO,OAAO,SAASA,EAAE,YAAW,MAAO;AAC3E,SAAO+E,GAAGjF,CAAC;AACb;AACA,SAASmF,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,IAAoB,oBAAI,IAAG;AAUhE,eAAeC,GAAG,GAAG;AACnB,MAAID,EAAE,IAAI,CAAC;AACT,WAAOA,EAAE,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,EAAE,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,UAAMhF,IAAI,MAAMqF,GAAG,CAAC;AACpB,QAAIrF,MAAM;AACR,aAAOA;AAAA,EACX;AACA,SAAO;AACT;AACA,eAAeqF,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,YAAMrF,IAAI,OAAO,aAAa,GAAG,EAAE,MAAM,GAAG,EAAE,CAAC;AAC/C,UAAIA,MAAM,UAAUA,MAAM,UAAUA,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;AC/8CA,MAAMsF,KAAgBC,EAAyC,IAAI,GAUtDC,KAAgD,CAAC;AAAA,EAC5D,QAAAC,IAAS;AAAA,EACT,UAAAC;AAAA,EACA,UAAAC;AACF,MAAM;AACJ,QAAMC,IAAQC,EAA4B,MAAM;AAC9C,UAAM/F,IAAIgG,EAAiB,EAAE,QAAAL,GAAQ,UAAAC,GAAU;AAC/C,WAAO,EAAE,QAAAD,GAAQ,GAAA3F,EAAA;AAAA,EACnB,GAAG,CAAC2F,GAAQC,CAAQ,CAAC;AAErB,SAAO,gBAAAK,EAACT,GAAc,UAAd,EAAuB,OAAAM,GAAe,UAAAD,EAAA,CAAS;AACzD;AAMA,IAAIK,IAAwC;AAC5C,SAASC,KAAoC;AAC3C,SAAKD,MACHA,IAAqBF,EAAiB,EAAE,QAAQ,QAAA,CAAS,IAEpDE;AACT;AAOO,SAASE,KAA4B;AAC1C,QAAMC,IAAMC,EAAWd,EAAa;AACpC,UAAOa,KAAA,gBAAAA,EAAK,MAAKF,GAAA;AACnB;AAKO,SAASI,KAAoB;AAClC,QAAMF,IAAMC,EAAWd,EAAa;AACpC,UAAOa,KAAA,gBAAAA,EAAK,WAAU;AACxB;AC3DA,MAAMG,KAAef,EAAoC,IAAI,GAOhDgB,KAA8C,CAAC,EAAE,OAAAC,GAAO,UAAAb,0BAC3DW,GAAa,UAAb,EAAsB,OAAOE,GAAQ,UAAAb,GAAS;AAWjD,SAASc,KAAkC;AAChD,SAAOL,EAAWE,EAAY,KAAK;AACrC;ACXA,MAAMI,KAAoC;AAAA,EACxC,SAAS,CAACC,GAAKC,MAAS,MAAMD,GAAKC,CAAI;AACzC,GAEMC,KAAiBtB,EAAmCmB,EAAY,GASzDI,KAAkD,CAAC;AAAA,EAC9D,aAAAC;AAAA,EACA,gBAAAC;AAAA,EACA,mBAAAC;AAAA,EACA,UAAAtB;AACF,MAAM;AACJ,QAAMC,IAAQC;AAAA,IACZ,OAAO;AAAA,MACL,SAASqB,GAAc,EAAE,aAAAH,GAAa,gBAAAC,GAAgB;AAAA,MACtD,mBAAAC;AAAA,IAAA;AAAA,IAEF,CAACF,GAAaC,GAAgBC,CAAiB;AAAA,EAAA;AAEjD,SACE,gBAAAlB,EAACc,GAAe,UAAf,EAAwB,OAAAjB,GAAe,UAAAD,EAAA,CAAS;AAErD;AAMO,SAASwB,KAAsB;AACpC,SAAOf,EAAWS,EAAc,EAAE;AACpC;AASO,SAASO,GAAeC,GAAuC;AACpE,QAAM,EAAE,SAAAC,GAAS,mBAAAL,MAAsBb,EAAWS,EAAc,GAC1DU,IAAW,CAAC,EAAEF,MAAQJ,KAAA,QAAAA,EAAoBI,MAE1C,CAACG,GAASC,CAAU,IAAIC,EAAiB,EAAE,GAC3CC,IAAaC,EAAsB,IAAI;AA+C7C,SA7CAC,EAAU,MAAM;AACd,QAAI,CAACR,KAAQ,CAACE,GAAU;AAEtB,MAAII,EAAW,YACb,IAAI,gBAAgBA,EAAW,OAAO,GACtCA,EAAW,UAAU,OAEvBF,EAAW,EAAE;AACb;AAAA,IACF;AACA,QAAIK,IAAY;AAChB,WAAAL,EAAW,EAAE,GACbM,GAAeV,EAAK,KAAKC,CAAO,EAC7B,KAAK,CAACU,MAAS;AACd,UAAIF,GAAW;AACb,YAAI,gBAAgBE,CAAI;AACxB;AAAA,MACF;AACA,MAAIL,EAAW,WACb,IAAI,gBAAgBA,EAAW,OAAO,GAExCA,EAAW,UAAUK,GACrBP,EAAWO,CAAI;AAAA,IACjB,CAAC,EACA,MAAM,CAACC,MAAQ;AACd,MAAKH,MACH,QAAQ,MAAM,2CAA2CG,CAAG,GAC5DR,EAAWJ,EAAK,GAAG;AAAA,IAEvB,CAAC,GACI,MAAM;AACX,MAAAS,IAAY;AAAA,IACd;AAAA,EACF,GAAG,CAACT,KAAA,gBAAAA,EAAM,IAAIA,KAAA,gBAAAA,EAAM,KAAKE,GAAUD,CAAO,CAAC,GAG3CO,EAAU,MACD,MAAM;AACX,IAAIF,EAAW,YACb,IAAI,gBAAgBA,EAAW,OAAO,GACtCA,EAAW,UAAU;AAAA,EAEzB,GACC,CAAA,CAAE,GAEAN,IACAE,IACEC,IADeH,EAAK,MADT;AAGpB;AC3GO,MAAMa,KAA0D,CAAC;AAAA,EACtE,UAAAC;AAAA,EACA,UAAAC;AAAA,EACA,YAAAC;AACF,MAAM;AACJ,QAAMvI,IAAIoG,GAAA;AACV,SACE,gBAAAoC,EAAC,OAAA,EAAI,WAAU,qGACb,UAAA;AAAA,IAAA,gBAAAvC,EAAC,SAAI,WAAU,oGACb,4BAACwC,IAAA,EAAa,WAAU,2CAA0C,EAAA,CACpE;AAAA,IAEA,gBAAAD,EAAC,OAAA,EAAI,WAAU,uCACb,UAAA;AAAA,MAAA,gBAAAvC,EAAC,KAAA,EAAE,WAAU,wCAAwC,UAAAoC,GAAS;AAAA,MAC9D,gBAAApC,EAAC,KAAA,EAAE,WAAU,yBAAyB,UAAAjG,EAAE,8BAA8B,EAAE,MAAMsI,EAAA,CAAU,EAAA,CAAE;AAAA,IAAA,GAC5F;AAAA,IAEA,gBAAAE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,SAASD;AAAA,QACT,WAAU;AAAA,QAEV,UAAA;AAAA,UAAA,gBAAAtC,EAACyC,GAAA,EAAS,WAAU,kBAAA,CAAkB;AAAA,UACrC1I,EAAE,iBAAiB;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EACtB,GACF;AAEJ;ACnBO,SAAS2I,GAAsB;AAAA,EACpC,MAAAC;AAAA,EACA,cAAAC;AAAA,EACA,YAAAC;AAAA,EACA,YAAAC;AAAA,EACA,SAAAC;AAAA,EACA,SAAAC;AACF,GAAsC;AACpC,QAAMC,IAAcpB,EAAO,EAAE,YAAAiB,GAAY,SAAAC,GAAS;AAElD,EAAAjB,EAAU,MAAM;AACd,IAAAmB,EAAY,UAAU,EAAE,YAAAH,GAAY,SAAAC,EAAA;AAAA,EACtC,GAAG,CAACD,GAAYC,CAAO,CAAC,GAExBjB,EAAU,MAAM;AACd,UAAMoB,IAAgB,CAACC,MAAqB;AAC1C,YAAM,EAAE,YAAAL,GAAY,SAAAC,EAAAA,IAAYE,EAAY;AAE5C,MAAIE,EAAE,QAAQ,YAAYR,MAAS,UACjCI,KAAAA,QAAAA,MACSI,EAAE,QAAQ,eAAeP,IAAe,IACjDE,KAAAA,QAAAA,EAAaF,IAAe,KACnBO,EAAE,QAAQ,gBAAgBP,IAAeC,IAAa,MAC/DC,KAAAA,QAAAA,EAAaF,IAAe;AAAA,IAEhC;AAEA,QAAID,MAAS;AACX,oBAAO,iBAAiB,WAAWO,CAAa,GACzC,MAAM,OAAO,oBAAoB,WAAWA,CAAa;AAC3D;AACL,YAAME,IAAKJ,KAAA,gBAAAA,EAAS;AACpB,aAAKI,KACLA,EAAG,iBAAiB,WAAWF,CAA8B,GACtD,MAAME,EAAG,oBAAoB,WAAWF,CAA8B,KAFpE;AAAA,IAGX;AAAA,EACF,GAAG,CAACP,GAAMC,GAAcC,GAAYG,CAAO,CAAC;AAC9C;AC9CO,SAASK,GAAa5C,GAAgC;AAC3D,QAAM,CAAC6C,GAAYC,CAAa,IAAI5B;AAAA,IAAS,MAC3C,OAAO,SAAW,MACd,OAAO,WAAW,8BAA8B,EAAE,UAClD;AAAA,EAAA;AAGN,SAAAG,EAAU,MAAM;AACd,QAAIrB,MAAU,OAAQ;AAEtB,UAAM+C,IAAM,OAAO,WAAW,8BAA8B,GACtDC,IAAU,CAACN,MAA2BI,EAAcJ,EAAE,OAAO;AACnE,WAAAK,EAAI,iBAAiB,UAAUC,CAAO,GAC/B,MAAMD,EAAI,oBAAoB,UAAUC,CAAO;AAAA,EACxD,GAAG,CAAChD,CAAK,CAAC,GAEHA,MAAU,SAAU6C,IAAa,SAAS,UAAW7C;AAC9D;ACRO,MAAMiD,KAA8C,CAAC;AAAA,EAC1D,MAAAC;AAAA,EACA,OAAAC;AAAA,EACA,SAAAC;AAAA,EACA,UAAAC;AAAA,EACA,QAAAC;AAAA,EACA,kBAAAC;AACF,MAAM;AACJ,MAAIC;AACJ,SAAIH,IACFG,IAAa,gDACJF,IACTE,IAAa,wFAEbA,IAAa,sEAIb,gBAAA1B;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,SAAAsB;AAAA,MACA,UAAAC;AAAA,MACA,cAAYF;AAAA,MACZ,gBAAcG;AAAA,MACd,qBAAmBC;AAAA,MACnB,iBAAeF;AAAA,MACf,WAAW,iGAAiGG,CAAU;AAAA,MAErH,UAAA;AAAA,QAAAN;AAAA,QACD,gBAAApB,EAAC,QAAA,EAAK,WAAU,kWACd,UAAA;AAAA,UAAA,gBAAAvC,EAAC,QAAA,EAAK,WAAU,4GAAA,CAA4G;AAAA,UAC5H,gBAAAA,EAAC,QAAA,EAAK,WAAU,gBAAgB,UAAA4D,EAAA,CAAM;AAAA,QAAA,EAAA,CACxC;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGN;AC1CO,SAASM,EACdC,GACAC,GACiB;AACjB,SAAOD,EAAO,IAAI,CAACE,GAAOC,GAAIC,MAC5B,gBAAAhC,EAACiC,GAAM,UAAN,EACE,UAAA;AAAA,IAAAH,EAAM,MAAM;AAAA,MAAI,CAACI,GAAMC,MACtBD,EAAK,SAAS,WACZ,gBAAAzE;AAAA,QAAC0D;AAAA,QAAA;AAAA,UAEC,MAAMe,EAAK;AAAA,UACX,OAAOA,EAAK;AAAA,UACZ,SAASA,EAAK;AAAA,UACd,UAAUA,EAAK;AAAA,UACf,QAAQA,EAAK;AAAA,UACb,kBAAkBA,EAAK;AAAA,QAAA;AAAA,QANlB,GAAGH,CAAE,IAAII,CAAE;AAAA,MAAA,IASlB,gBAAA1E;AAAA,QAAC;AAAA,QAAA;AAAA,UAEC,WAAU;AAAA,UACV,OAAO,EAAE,UAAUyE,EAAK,YAAY,OAAA;AAAA,UAEnC,UAAAA,EAAK;AAAA,QAAA;AAAA,QAJD,GAAGH,CAAE,IAAII,CAAE;AAAA,MAAA;AAAA,IAKlB;AAAA,IAGHJ,IAAKC,EAAI,SAAS,uBAAM,OAAA,EAAI,WAAW,kCAAkCH,CAAY,GAAA,CAAI;AAAA,EAAA,EAAA,GAtBvEE,CAuBrB,CACD;AACH;ACfO,MAAMK,KAAwD,CAAC;AAAA,EACpE,UAAAvC;AAAA,EACA,cAAAQ;AAAA,EACA,YAAAC;AAAA,EACA,YAAA+B;AAAA,EACA,GAAA7K;AAAA,EACA,YAAAuI;AAAA,EACA,SAAAS;AAAA,EACA,cAAA8B;AACF,MAAM;AACJ,QAAMC,IAAkB,CAAC,CAAC/B,GAGpBgC,IAA+B;AAAA,IACnC,GAAIF,IACA;AAAA,MACE;AAAA,QACE,OAAO;AAAA,UACL;AAAA,YACE,MAAM;AAAA,YACN,MAAM,gBAAA7E,EAACyC,GAAA,EAAS,WAAU,kBAAA,CAAkB;AAAA,YAC5C,SAAS1I,EAAE,4BAA4B;AAAA,YACvC,QAAQuI;AAAA,UAAA;AAAA,QACV;AAAA,MACF;AAAA,IACF,IAEF,CAAA;AAAA,IACJ,GAAIwC,IACA;AAAA,MACE;AAAA,QACE,OAAO;AAAA,UACL;AAAA,YACE,MAAM;AAAA,YACN,MAAM,gBAAA9E,EAAChD,IAAA,EAAE,WAAU,kBAAA,CAAkB;AAAA,YACrC,SAASjD,EAAE,4BAA4B;AAAA,YACvC,QAAQgJ;AAAA,YACR,kBAAkB;AAAA,UAAA;AAAA,QACpB;AAAA,MACF;AAAA,IACF,IAEF,CAAA;AAAA,EAAC;AAGP,SACE,gBAAAR;AAAA,IAACyC,EAAO;AAAA,IAAP;AAAA,MACC,SAAS,EAAE,SAAS,EAAA;AAAA,MACpB,SAAS,EAAE,SAAS,EAAA;AAAA,MACpB,MAAM,EAAE,SAAS,EAAA;AAAA,MACjB,WAAU;AAAA,MACV,OAAO,EAAE,YAAY,gCAAA;AAAA,MAGrB,UAAA;AAAA,QAAA,gBAAAzC,EAAC,OAAA,EAAI,WAAU,+FAEb,UAAA;AAAA,UAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,yEACb,UAAA;AAAA,YAAA,gBAAAvC,EAAC,MAAA,EAAG,WAAU,+EACX,UAAAoC,GACH;AAAA,YACA,gBAAAG;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,WAAU;AAAA,gBACV,aAAU;AAAA,gBACV,eAAY;AAAA,gBAEX,UAAA;AAAA,kBAAAK,IAAe;AAAA,kBAAE;AAAA,kBAAEC;AAAA,gBAAA;AAAA,cAAA;AAAA,YAAA;AAAA,UACtB,GACF;AAAA,4BAGC,OAAA,EAAI,WAAU,uEACZ,UAAAqB,EAAmBa,GAAc,YAAY,GAChD;AAAA,UAGA,gBAAAxC,EAAC,OAAA,EAAI,WAAU,uEACZ,UAAA;AAAA,YAAA2B,EAAmBU,GAAY,UAAU;AAAA,YACzCA,EAAW,SAAS,KACnB,gBAAA5E,EAAC,OAAA,EAAI,WAAU,2CAA0C;AAAA,YAE1DkE,EAAmBa,GAAc,UAAU;AAAA,UAAA,EAAA,CAC9C;AAAA,QAAA,GACF;AAAA,QAGCH,EAAW,SAAS,KACnB,gBAAA5E,EAAC,OAAA,EAAI,WAAU,4GACZ,UAAAkE,EAAmBU,GAAY,YAAY,EAAA,CAC9C;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAIR,GCnGaK,KAA8C,CAAC;AAAA,EAC1D,OAAAC;AAAA,EACA,UAAA9C;AAAA,EACA,GAAArI;AAAA,EACA,SAAAoL;AAAA,EACA,YAAA7C;AACF,MAEI,gBAAAC,EAAC,OAAA,EAAI,WAAU,qGACb,UAAA;AAAA,EAAA,gBAAAvC,EAACoF,IAAA,EAAY,WAAU,4CAAA,CAA4C;AAAA,oBAClE,MAAA,EAAG,WAAU,0CACX,UAAArL,EAAE,sBAAsB,GAC3B;AAAA,EACA,gBAAAiG,EAAC,KAAA,EAAE,WAAU,2EACV,YAAM,SACT;AAAA,EACA,gBAAAA,EAAC,KAAA,EAAE,WAAU,0EACV,UAAAoC,GACH;AAAA,EACA,gBAAAG,EAAC,OAAA,EAAI,WAAU,sBACb,UAAA;AAAA,IAAA,gBAAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,SAAS4C;AAAA,QACT,cAAYpL,EAAE,cAAc;AAAA,QAC5B,WAAU;AAAA,QAEV,UAAA;AAAA,UAAA,gBAAAiG,EAACqF,IAAA,EAAS,WAAU,kBAAA,CAAkB;AAAA,UACrCtL,EAAE,cAAc;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,IAEnB,gBAAAwI;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,SAASD;AAAA,QACT,cAAYvI,EAAE,4BAA4B;AAAA,QAC1C,WAAU;AAAA,QAEV,UAAA;AAAA,UAAA,gBAAAiG,EAACyC,GAAA,EAAS,WAAU,kBAAA,CAAkB;AAAA,UACrC1I,EAAE,iBAAiB;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EACtB,EAAA,CACF;AAAA,GACF;ACpCG,MAAMuL,WAA8Bd,GAAM,UAG/C;AAAA,EACA,YAAYe,GAAmC;AAC7C,UAAMA,CAAK;AAab,IAAAC,GAAA,eAAQ,MAAY;AAClB,WAAK,SAAS,EAAE,UAAU,IAAO,OAAO,MAAM;AAAA,IAChD;AAdE,SAAK,QAAQ,EAAE,UAAU,IAAO,OAAO,KAAA;AAAA,EACzC;AAAA,EAEA,OAAO,yBAAyBN,GAA0C;AACxE,WAAO,EAAE,UAAU,IAAM,OAAAA,EAAA;AAAA,EAC3B;AAAA,EAEA,kBAAkBA,GAAcO,GAAkC;;AAChE,YAAQ,MAAM,kCAAkCP,GAAOO,CAAS,IAChEC,KAAAC,IAAA,KAAK,OAAM,YAAX,QAAAD,EAAA,KAAAC,GAAqBT,GAAOO;AAAA,EAC9B;AAAA,EAMA,SAA0B;AACxB,WAAI,KAAK,MAAM,YAAY,KAAK,MAAM,QAC7B,KAAK,MAAM,SAAS,KAAK,MAAM,OAAO,KAAK,KAAK,IAGlD,KAAK,MAAM;AAAA,EACpB;AACF;AC3CO,MAAMG,KAA4B,MAAM;AAC7C,QAAM7L,IAAIoG,GAAA;AACV,2BACG,OAAA,EAAI,WAAU,wFACb,UAAA,gBAAAoC,EAAC,OAAA,EAAI,WAAU,oDACb,UAAA;AAAA,IAAA,gBAAAvC,EAAC,OAAA,EAAI,WAAU,8GAAA,CAA8G;AAAA,sBAC5H,QAAA,EAAK,WAAU,eAAe,UAAAjG,EAAE,gBAAgB,KAAK,aAAA,CAAa;AAAA,EAAA,EAAA,CACrE,EAAA,CACF;AAEJ,GCQa8L,KAA0D,CAAC;AAAA,EACtE,aAAAC;AAAA,EACA,gBAAAC;AAAA,EACA,uBAAAC;AAAA,EACA,GAAAjM;AAAA,EACA,YAAAuI;AAAA,EACA,SAAA2D;AAAA,EACA,UAAArG;AACF,MAEMmG,IAEA,gBAAA/F;AAAA,EAACsF;AAAA,EAAA;AAAA,IACC,UAAU,CAACJ,GAAOgB,MAChB,gBAAAlG;AAAA,MAACiF;AAAA,MAAA;AAAA,QACC,OAAAC;AAAA,QACA,UAAUY,EAAY;AAAA,QACtB,GAAA/L;AAAA,QACA,SAASmM;AAAA,QACT,YAAA5D;AAAA,MAAA;AAAA,IAAA;AAAA,IAGJ,SAAA2D;AAAA,IAEC,UAAAF,EAAe,OAAOD,GAAaE,CAAqB;AAAA,EAAA;AAAA,IAO7D,gBAAAhG,EAACmG,IAAA,EAAS,UAAU,gBAAAnG,EAAC4F,MAAgB,GACnC,UAAA,gBAAA5F;AAAA,EAACsF;AAAA,EAAA;AAAA,IACC,UAAU,CAACJ,GAAOgB,MAChB,gBAAAlG;AAAA,MAACiF;AAAA,MAAA;AAAA,QACC,OAAAC;AAAA,QACA,UAAUY,EAAY;AAAA,QACtB,GAAA/L;AAAA,QACA,SAASmM;AAAA,QACT,YAAA5D;AAAA,MAAA;AAAA,IAAA;AAAA,IAGJ,SAAA2D;AAAA,IAEC,UAAArG;AAAA,EAAA;AAAA,EACH,GAd4CkG,EAAY,GAe1D,GCpDEM,KAAiB,KAOVC,KAAsC,CAAC;AAAA,EAClD,cAAAC;AAAA,EACA,SAAAC;AAAA,EACA,SAAAC;AAAA,EACA,QAAAC;AAAA,EACA,QAAAC;AAAA,EACA,UAAAC;AAAA,EACA,GAAA5M;AACF,MAAM;AACJ,QAAM,CAAC6M,GAASC,CAAU,IAAIlF,EAAS,EAAI,GACrCmF,IAAWjF,EAAsB,IAAI,GAErCkF,IAAeC,EAAY,MAAM;AACrC,IAAIF,EAAS,WAAS,aAAaA,EAAS,OAAO,GACnDA,EAAS,UAAU,OAAO,WAAW,MAAMD,EAAW,EAAK,GAAGT,EAAc;AAAA,EAC9E,GAAG,CAAA,CAAE,GAECa,IAAOD,EAAY,MAAM;AAC7B,IAAAH,EAAW,CAACK,MAAUA,KAAc,EAAK,GACzCH,EAAA;AAAA,EACF,GAAG,CAACA,CAAY,CAAC;AAGjB,SAAAjF,EAAU,MAAM;AACd,UAAMsB,IAAKkD,EAAa;AACxB,QAAI,CAAClD,EAAI;AACT,UAAMK,IAAU,MAAMwD,EAAA;AACtB,WAAA7D,EAAG,iBAAiB,aAAaK,CAAO,GACjC,MAAM;AACX,MAAAL,EAAG,oBAAoB,aAAaK,CAAO;AAAA,IAC7C;AAAA,EACF,GAAG,CAAC6C,GAAcW,CAAI,CAAC,GAGvBnF,EAAU,OACR+E,EAAW,EAAI,GACfE,EAAA,GACO,MAAM;AACX,IAAID,EAAS,WAAS,aAAaA,EAAS,OAAO;AAAA,EACrD,IACC,CAACH,GAAUI,CAAY,CAAC,GAGzB,gBAAAxE,EAAA4E,IAAA,EACG,UAAA;AAAA,IAAAZ,KACC,gBAAAvG;AAAA,MAACgF,EAAO;AAAA,MAAP;AAAA,QACC,SAAS,EAAE,SAAS,EAAA;AAAA,QACpB,SAAS,EAAE,SAAS4B,IAAU,IAAI,GAAG,GAAGA,IAAU,IAAI,IAAA;AAAA,QACtD,YAAY,EAAE,UAAU,IAAA;AAAA,QACxB,SAASH;AAAA,QACT,cAAcQ;AAAA,QACd,OAAO,EAAE,eAAeL,IAAU,SAAS,OAAA;AAAA,QAC3C,cAAY7M,EAAE,4BAA4B,KAAK;AAAA,QAC/C,qBAAkB;AAAA,QAClB,WAAU;AAAA,QAEV,UAAA,gBAAAiG,EAACoH,IAAA,EAAY,WAAU,wCAAA,CAAwC;AAAA,MAAA;AAAA,IAAA;AAAA,IAGlEZ,KACC,gBAAAxG;AAAA,MAACgF,EAAO;AAAA,MAAP;AAAA,QACC,SAAS,EAAE,SAAS,EAAA;AAAA,QACpB,SAAS,EAAE,SAAS4B,IAAU,IAAI,GAAG,GAAGA,IAAU,IAAI,GAAA;AAAA,QACtD,YAAY,EAAE,UAAU,IAAA;AAAA,QACxB,SAASF;AAAA,QACT,cAAcO;AAAA,QACd,OAAO,EAAE,eAAeL,IAAU,SAAS,OAAA;AAAA,QAC3C,cAAY7M,EAAE,wBAAwB,KAAK;AAAA,QAC3C,qBAAkB;AAAA,QAClB,WAAU;AAAA,QAEV,UAAA,gBAAAiG,EAACqH,IAAA,EAAa,WAAU,wCAAA,CAAwC;AAAA,MAAA;AAAA,IAAA;AAAA,EAClE,GAEJ;AAEJ,GCzEaC,KAAgDC;AAAA,EAAK,MAChE,OAAO,sBAAS,EAAE,KAAK,CAAC3K,OAAO,EAAE,SAASA,EAAE,gBAAgB;AAC9D,GAEa4K,KAA4CD;AAAA,EAAK,MAC5D,OAAO,sBAAO,EAAE,KAAK,CAAC3K,OAAO,EAAE,SAASA,EAAE,cAAc;AAC1D,GAEa6K,KAA8CF;AAAA,EAAK,MAC9D,OAAO,sBAAQ,EAAE,KAAK,CAAC3K,OAAO,EAAE,SAASA,EAAE,eAAe;AAC5D,GAEa8K,KAA8CH;AAAA,EAAK,MAC9D,OAAO,sBAAQ,EAAE,KAAK,CAAC3K,OAAO,EAAE,SAASA,EAAE,eAAe;AAC5D,GAEa+K,KAA8CJ;AAAA,EAAK,MAC9D,OAAO,sBAAQ,EAAE,KAAK,CAAC3K,OAAO,EAAE,SAASA,EAAE,eAAe;AAC5D,GAEagL,KAA4CL;AAAA,EAAK,MAC5D,OAAO,sBAAO,EAAE,KAAK,CAAC3K,OAAO,EAAE,SAASA,EAAE,cAAc;AAC1D,GAEaiL,KAA8CN;AAAA,EAAK,MAC9D,OAAO,sBAAQ,EAAE,KAAK,CAAC3K,OAAO,EAAE,SAASA,EAAE,eAAe;AAC5D,GAEakL,KAA8CP;AAAA,EAAK,MAC9D,OAAO,sBAAQ,EAAE,KAAK,CAAC3K,OAAO,EAAE,SAASA,EAAE,eAAe;AAC5D,GAEamL,KAAgDR;AAAA,EAAK,MAChE,OAAO,sBAAS,EAAE,KAAK,CAAC3K,OAAO,EAAE,SAASA,EAAE,gBAAgB;AAC9D,GAEaoL,KAAgDT;AAAA,EAAK,MAChE,OAAO,sBAAS,EAAE,KAAK,CAAC3K,OAAO,EAAE,SAASA,EAAE,gBAAgB;AAC9D,GAEaqL,KAAsDV;AAAA,EAAK,MACtE,OAAO,sBAAY,EAAE,KAAK,CAAC3K,OAAO,EAAE,SAASA,EAAE,mBAAmB;AACpE,GAEasL,KAA8CX;AAAA,EAAK,MAC9D,OAAO,sBAAQ,EAAE,KAAK,CAAC3K,OAAO,EAAE,SAASA,EAAE,eAAe;AAC5D,GAEauL,KAA4CZ;AAAA,EAAK,MAC5D,OAAO,sBAAO,EAAE,KAAK,CAAC3K,OAAO,EAAE,SAASA,EAAE,cAAc;AAC1D,GAEawL,KAA4Cb;AAAA,EAAK,MAC5D,OAAO,sBAAO,EAAE,KAAK,CAAC3K,OAAO,EAAE,SAASA,EAAE,cAAc;AAC1D,GAEayL,KAAsDd;AAAA,EAAK,MACtE,OAAO,sBAAY,EAAE,KAAK,CAAC3K,OAAO,EAAE,SAASA,EAAE,mBAAmB;AACpE,GAEa0L,KAA4Cf;AAAA,EAAK,MAC5D,OAAO,sBAAO,EAAE,KAAK,CAAC3K,OAAO,EAAE,SAASA,EAAE,cAAc;AAC1D,GAEa2L,KAA8ChB;AAAA,EAAK,MAC9D,OAAO,sBAAQ,EAAE,KAAK,CAAC3K,OAAO,EAAE,SAASA,EAAE,eAAe;AAC5D,GAEa4L,KAA8CjB;AAAA,EAAK,MAC9D,OAAO,sBAAQ,EAAE,KAAK,CAAC3K,OAAO,EAAE,SAASA,EAAE,eAAe;AAC5D,GCtCa6L,KAA6C;AAAA,EACxD;AAAA,IACE,UAAU;AAAA,IACV,WAAWnB;AAAA,IACX,UAAU,CAAClH,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,WAAWoH;AAAA,IACX,UAAU,CAACpH,OAAS;AAAA,MAClB,KAAKA,EAAI;AAAA,IAAA;AAAA,EACX;AAAA,EAEF;AAAA,IACE,UAAU;AAAA,IACV,WAAWqH;AAAA,IACX,UAAU,CAACrH,OAAS;AAAA,MAClB,KAAKA,EAAI;AAAA,IAAA;AAAA,EACX;AAAA,EAEF;AAAA,IACE,UAAU;AAAA,IACV,WAAWsH;AAAA,IACX,UAAU,CAACtH,OAAS;AAAA,MAClB,KAAKA,EAAI;AAAA,IAAA;AAAA,EACX;AAAA,EAEF;AAAA,IACE,UAAU;AAAA,IACV,WAAWuH;AAAA,IACX,UAAU,CAACvH,OAAS;AAAA,MAClB,KAAKA,EAAI;AAAA,IAAA;AAAA,EACX;AAAA,EAEF;AAAA,IACE,UAAU;AAAA,IACV,WAAWwH;AAAA,IACX,UAAU,CAACxH,OAAS;AAAA,MAClB,KAAKA,EAAI;AAAA,IAAA;AAAA,EACX;AAAA,EAEF;AAAA,IACE,UAAU;AAAA,IACV,WAAWyH;AAAA,IACX,UAAU,CAACzH,OAAS;AAAA,MAClB,KAAKA,EAAI;AAAA,IAAA;AAAA,EACX;AAAA,EAEF;AAAA,IACE,UAAU;AAAA,IACV,WAAW0H;AAAA,IACX,UAAU,CAAC1H,OAAS;AAAA,MAClB,KAAKA,EAAI;AAAA,IAAA;AAAA,EACX;AAAA,EAEF;AAAA,IACE,UAAU;AAAA,IACV,WAAW2H;AAAA,IACX,UAAU,CAAC3H,OAAS;AAAA,MAClB,KAAKA,EAAI;AAAA,MACT,UAAUA,EAAI,YAAY;AAAA,IAAA;AAAA,EAC5B;AAAA,EAEF;AAAA,IACE,UAAU;AAAA,IACV,WAAW4H;AAAA,IACX,UAAU,CAAC5H,OAAS;AAAA,MAClB,KAAKA,EAAI;AAAA,MACT,UAAUA,EAAI,YAAY;AAAA,IAAA;AAAA,EAC5B;AAAA,EAEF;AAAA,IACE,UAAU;AAAA,IACV,WAAW6H;AAAA,IACX,UAAU,CAAC7H,OAAS;AAAA,MAClB,KAAKA,EAAI;AAAA,IAAA;AAAA,EACX;AAAA,EAEF;AAAA,IACE,UAAU;AAAA,IACV,WAAW8H;AAAA,IACX,UAAU,CAAC9H,OAAS;AAAA,MAClB,KAAKA,EAAI;AAAA,MACT,UAAUA,EAAI,YAAY;AAAA,IAAA;AAAA,EAC5B;AAAA,EAEF;AAAA,IACE,UAAU;AAAA,IACV,WAAW+H;AAAA,IACX,UAAU,CAAC/H,OAAS;AAAA,MAClB,KAAKA,EAAI;AAAA,MACT,UAAUA,EAAI,YAAY;AAAA,IAAA;AAAA,EAC5B;AAAA,EAEF;AAAA,IACE,UAAU;AAAA,IACV,WAAWgI;AAAA,IACX,UAAU,CAAChI,OAAS;AAAA,MAClB,KAAKA,EAAI;AAAA,MACT,UAAUA,EAAI,YAAY;AAAA,IAAA;AAAA,EAC5B;AAAA,EAEF;AAAA,IACE,UAAU;AAAA,IACV,WAAWiI;AAAA,IACX,UAAU,CAACjI,OAAS;AAAA,MAClB,KAAKA,EAAI;AAAA,MACT,UAAUA,EAAI,YAAY;AAAA,IAAA;AAAA,EAC5B;AAAA,EAEF;AAAA,IACE,UAAU;AAAA,IACV,WAAWkI;AAAA,IACX,UAAU,CAAClI,OAAS;AAAA,MAClB,KAAKA,EAAI;AAAA,MACT,cAAcA,EAAI;AAAA,IAAA;AAAA,EACpB;AAAA,EAEF;AAAA,IACE,UAAU;AAAA,IACV,WAAWmI;AAAA,IACX,UAAU,CAACnI,OAAS;AAAA,MAClB,KAAKA,EAAI;AAAA,MACT,UAAUA,EAAI,YAAY;AAAA,IAAA;AAAA,EAC5B;AAAA,EAEF;AAAA,IACE,UAAU;AAAA,IACV,WAAWoI;AAAA,IACX,UAAU,CAACpI,OAAS;AAAA,MAClB,KAAKA,EAAI;AAAA,IAAA;AAAA,EACX;AAEJ,GChLMsI,KAAwB,GAuBjBC,KAAwD,CAACpD,MAAU;AAC9E,QAAM,EAAE,aAAAvE,GAAa,gBAAAC,GAAgB,mBAAAC,EAAA,IAAsBqE;AAC3D,SACE,gBAAAvF;AAAA,IAACe;AAAA,IAAA;AAAA,MACC,aAAAC;AAAA,MACA,gBAAAC;AAAA,MACA,mBAAAC;AAAA,MAEA,UAAA,gBAAAlB,EAAC4I,IAAA,EAAyB,GAAGrD,EAAA,CAAO;AAAA,IAAA;AAAA,EAAA;AAG1C,GAEMqD,KAA6D,CAAC;AAAA,EAClE,OAAAC;AAAA,EACA,cAAAjG;AAAA,EACA,YAAAE;AAAA,EACA,iBAAAgG,IAAkB,CAAA;AAAA,EAClB,MAAAnG,IAAO;AAAA,EACP,SAAAI;AAAA,EACA,iBAAAgG,IAAkB;AAAA,EAClB,QAAArJ,IAAS;AAAA,EACT,UAAUsJ;AAAA,EACV,UAAAC,IAAW;AAAA,EACX,OAAAxI,IAAQ;AAAA,EACR,eAAAyI;AAAA,EACA,YAAA5G;AAAA,EACA,SAAA2D;AAAA,EACA,cAAApB,IAAe;AAAA,EACf,aAAasE;AAAA,EACb,gBAAgBC;AAAA,EAChB,mBAAmBC;AACrB,MAAM;AACJ,QAAMtP,IAAgB+F;AAAA,IACpB,MAAMC,EAAiB,EAAE,QAAAL,GAAQ,UAAUsJ,GAAc;AAAA,IACzD,CAACtJ,GAAQsJ,CAAY;AAAA,EAAA,GAGjBM,IAAkBxJ,EAAQ,MAAMyJ,GAAeV,CAAK,GAAG,CAACA,CAAK,CAAC,GAC9D/C,IAAcwD,EAAgB1G,CAAY,GAC1C4G,IAAcnI,GAAeyE,CAAW,GACxCvE,IAAUH,GAAA,GAEV2E,IAAiBjG,EAAQ,MACxBgG,IACEgD,EAAgB,KAAK,CAAAW,MAAYA,EAAS,KAAK3D,CAAW,CAAC,IADzC,MAExB,CAACA,GAAagD,CAAe,CAAC,GAE3BzG,IAAWyD,IAAc4D,GAAY5D,CAAW,IAAI,eAGpD6D,IAAgBtG,GAAa5C,CAAK,GAGlCmJ,KAAa/H,EAAuB,IAAI,GACxCmB,KAAUnB,EAAuB,IAAI,GAGrCgI,KAAsBhI,EAA8B,IAAI,GACxD,CAACiI,IAAuBC,CAAwB,IAAIpI,EAAyB,CAAA,CAAE,GAC/EqI,IAAanI,EAA4B,IAAI,GAG7CoI,KAAgBjD,EAAY,CAACyC,MAAoC;AASrE,QAPIO,EAAW,YACbA,EAAW,QAAA,GACXA,EAAW,UAAU,OAGvBH,GAAoB,UAAUJ,GAE1B,EAACA,KAAA,QAAAA,EAAU,mBAAkB;AAC/B,MAAAM,EAAyB,CAAA,CAAE;AAC3B;AAAA,IACF;AAGA,UAAMG,IAAgBT,EAAS,iBAAA;AAI/B,QAHAM,EAAyBG,CAAa,GAGlCT,EAAS,iBAAiB;AAC5B,YAAMU,IAAcV,EAAS,gBAAgB,MAAM;AACjD,cAAMtF,KAASsF,EAAS,iBAAA;AACxB,QAAAM,EAAyB5F,EAAM;AAAA,MACjC,CAAC;AAED,MAAA6F,EAAW,UAAUG;AACrB;AAAA,IACF;AAGA,UAAMC,IAAW,YAAY,MAAM;AACjC,YAAMjG,IAASsF,EAAS,iBAAA;AACxB,MAAAM,EAAyB5F,CAAM;AAAA,IACjC,GAAG,GAAG;AACN,IAAA6F,EAAW,UAAU,MAAM,cAAcI,CAAQ;AAAA,EACnD,GAAG,CAAA,CAAE,GAGCC,KAAcrD,EAAY,CAACyC,MAAoC;AACnE,IAAAQ,GAAcR,CAAQ;AAAA,EACxB,GAAG,CAACQ,EAAa,CAAC;AAGlB,EAAAnI,EAAU,MACD,MAAM;AACX,IAAIkI,EAAW,YACbA,EAAW,QAAA,GACXA,EAAW,UAAU;AAAA,EAEzB,GACC,CAAA,CAAE,GAGLtH,GAAsB;AAAA,IACpB,MAAAC;AAAA,IACA,cAAAC;AAAA,IACA,YAAY0G,EAAgB;AAAA,IAC5B,YAAAxG;AAAA,IACA,SAAAC;AAAA,IACA,SAAAC;AAAA,EAAA,CACD;AAYD,QAAMsH,KAAatD;AAAA,IACjB,CAACuD,GAAcC,MAAsB;AACnC,MAAK1E,MACLoD,KAAA,QAAAA,EAAgB,EAAE,MAAAqB,GAAM,SAAAC,GAAS,MAAM1E;IACzC;AAAA,IACA,CAACA,GAAaoD,CAAa;AAAA,EAAA,GAGvBuB,KAAY3K;AAAA,IAChB,OAAO,EAAE,MAAMwK,IAAY,GAAAvQ,GAAG,OAAO4P,GAAe,QAAAjK;IACpD,CAAC4K,IAAYvQ,GAAG4P,GAAejK,CAAM;AAAA,EAAA,GAGjCgL,IAAiB1D,EAAY,YAAY;AAC7C,QAAKlB,GACL;AAAA,UAAIxD,GAAY;AACd,cAAMA,EAAWwD,CAAW;AAC5B;AAAA,MACF;AACA,UAAI;AACF,cAAM6E,GAAwB7E,EAAY,KAAKA,EAAY,MAAMvE,CAAO;AAAA,MAC1E,SAASW,GAAK;AACZ,gBAAQ,MAAM,mCAAmCA,CAAG;AAAA,MACtD;AAAA;AAAA,EACF,GAAG,CAAC4D,GAAaxD,GAAYf,CAAO,CAAC;AAErC,SAAKuE,IAGH,gBAAA9F,EAACP,MAAe,QAAAC,GAAgB,UAAUsJ,GACxC,UAAA,gBAAAhJ,EAACQ,IAAA,EAAc,OAAOmJ,GACpB,UAAA,gBAAApH;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAKS;AAAA,MACL,UAAUL,MAAS,UAAU,IAAI;AAAA,MACjC,cAAYgH;AAAA,MACZ,WAAU;AAAA,MAET,UAAA;AAAA,QAAA,CAACV,KACA,gBAAAjJ;AAAA,UAAC2E;AAAA,UAAA;AAAA,YACC,UAAUmB,EAAY;AAAA,YACtB,cAAAlD;AAAA,YACA,YAAY0G,EAAgB;AAAA,YAC5B,YAAYQ;AAAA,YACZ,GAAA/P;AAAA,YACA,YAAY2Q;AAAA,YACZ,SAAA3H;AAAA,YACA,cAAA8B;AAAA,UAAA;AAAA,QAAA;AAAA,QAIJ,gBAAA7E;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,KAAK4J;AAAA,YACL,WAAU;AAAA,YAEV,UAAA,gBAAA5J;AAAA,cAAC6F;AAAA,cAAA;AAAA,gBACC,aAAAC;AAAA,gBACA,gBAAAC;AAAA,gBACA,uBAAuB0E;AAAA,gBACvB,GAAA1Q;AAAA,gBACA,YAAY2Q;AAAA,gBACZ,SAAAzE;AAAA,gBAEE,WAAA,MAAM;AAEN,sBAAI5D,MAAa,SAAS0G,KAAmBL;AAC3C,2BACE,gBAAA1I;AAAA,sBAACmC;AAAA,sBAAA;AAAA,wBACC,UAAU2D,EAAY;AAAA,wBACtB,UAAUA,EAAY;AAAA,wBACtB,YAAY4E;AAAA,sBAAA;AAAA,oBAAA;AAMlB,wBAAME,IAAiBnC,GAAkB;AAAA,oBACvC,CAACnO,MAAMA,EAAE,aAAa+H;AAAA,kBAAA;AAGxB,sBAAIuI,GAAgB;AAClB,0BAAMC,IAAoBD,EAAe,WACnCE,IAAgBF,EAAe,SAAS;AAAA,sBAC5C,aAAApB;AAAA,sBACA,iBAAAT;AAAA,sBACA,aAAAjD;AAAA,oBAAA,CACD;AACD,2BAAO,gBAAA9F,EAAC6K,GAAA,EAAkB,KAAKR,IAAc,GAAGS,GAAe;AAAA,kBACjE;AAGA,yBACE,gBAAA9K;AAAA,oBAACmC;AAAA,oBAAA;AAAA,sBACC,UAAU2D,EAAY;AAAA,sBACtB,UAAUA,EAAY;AAAA,sBACtB,YAAY4E;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBAGlB,GAAA;AAAA,cAAG;AAAA,YAAA;AAAA,UACL;AAAA,QAAA;AAAA,QAGD,CAACzB,KAAYK,EAAgB,SAAS,KACrC,gBAAAtJ;AAAA,UAACqG;AAAA,UAAA;AAAA,YACC,cAAcuD;AAAA,YACd,SAAShH,IAAe;AAAA,YACxB,SAASA,IAAe0G,EAAgB,SAAS;AAAA,YACjD,QAAQ,MAAMxG,KAAA,gBAAAA,EAAaF,IAAe;AAAA,YAC1C,QAAQ,MAAME,KAAA,gBAAAA,EAAaF,IAAe;AAAA,YAC1C,UAAUA;AAAA,YACV,GAAA7I;AAAA,UAAA;AAAA,QAAA;AAAA,MACF;AAAA,IAAA;AAAA,EAAA,GAGN,EAAA,CACF,IAxFuB;AA0F3B;;;8CChQagR,KAAoD,CAAC;AAAA,EAChE,OAAAlC;AAAA,EACA,cAAAjG;AAAA,EACA,QAAAoI;AAAA,EACA,SAAAjI;AAAA,EACA,YAAAD;AAAA,EACA,iBAAAgG,IAAkB,CAAA;AAAA,EAClB,QAAApJ;AAAA,EACA,UAAAC;AAAA,EACA,UAAAsJ;AAAA,EACA,OAAAxI,IAAQ;AAAA,EACR,eAAAyI;AAAA,EACA,aAAAlI;AAAA,EACA,gBAAAC;AAAA,EACA,mBAAAC;AAAA,EACA,YAAAoB;AAAA,EACA,cAAAuC;AACF,MAAM;AACJ,QAAM,CAACvB,GAAYC,CAAa,IAAI5B;AAAA,IAAS,MAC3C,OAAO,SAAW,MACd,OAAO,WAAW,8BAA8B,EAAE,UAClD;AAAA,EAAA;AAGN,EAAAG,EAAU,MAAM;AACd,QAAIrB,MAAU,OAAQ;AACtB,UAAM+C,IAAM,OAAO,WAAW,8BAA8B,GACtDC,IAAU,CAACN,MAA2BI,EAAcJ,EAAE,OAAO;AACnE,WAAAK,EAAI,iBAAiB,UAAUC,CAAO,GAC/B,MAAMD,EAAI,oBAAoB,UAAUC,CAAO;AAAA,EACxD,GAAG,CAAChD,CAAK,CAAC;AAEV,QAAMkJ,IAAgBlJ,MAAU,SAAU6C,IAAa,SAAS,UAAW7C;AAsB3E,MAnBAqB,EAAU,MAAM;AACd,QAAIkJ,GAAQ;AACV,YAAMC,IAAmB,SAAS,KAAK,MAAM,UACvCC,IAAuB,SAAS,KAAK,MAAM,cAE3CC,IAAiB,OAAO,aAAa,SAAS,gBAAgB;AAEpE,sBAAS,KAAK,MAAM,WAAW,UAC3BA,IAAiB,MACnB,SAAS,KAAK,MAAM,eAAe,GAAGA,CAAc,OAG/C,MAAM;AACX,iBAAS,KAAK,MAAM,WAAWF,GAC/B,SAAS,KAAK,MAAM,eAAeC;AAAA,MACrC;AAAA,IACF;AAAA,EACF,GAAG,CAACF,CAAM,CAAC,GAEP,CAACA,EAAQ,QAAO;AAEpB,QAAMI,sBACH,OAAA,EAAI,WAAU,YAAW,cAAYzB,GACpC,UAAA,gBAAA3J,EAACqL,IAAA,EACE,UAAAL,KACC,gBAAAhL;AAAA,IAACgF,EAAO;AAAA,IAAP;AAAA,MACC,SAAS,EAAE,SAAS,EAAA;AAAA,MACpB,SAAS,EAAE,SAAS,EAAA;AAAA,MACpB,MAAM,EAAE,SAAS,EAAA;AAAA,MACjB,WAAU;AAAA,MACV,SAASjC;AAAA,MACT,SAAS,CAACI,MAAMA,EAAE,gBAAA;AAAA,MAElB,UAAA,gBAAAnD;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAU;AAAA,UACV,SAAS,CAACmD,MAAMA,EAAE,gBAAA;AAAA,UAElB,UAAA,gBAAAnD;AAAA,YAAC2I;AAAA,YAAA;AAAA,cACC,MAAK;AAAA,cACL,OAAAE;AAAA,cACA,cAAAjG;AAAA,cACA,SAAAG;AAAA,cACA,YAAAD;AAAA,cACA,iBAAAgG;AAAA,cACA,QAAApJ;AAAA,cACA,UAAAC;AAAA,cACA,UAAAsJ;AAAA,cACA,OAAAxI;AAAA,cACA,eAAAyI;AAAA,cACA,aAAAlI;AAAA,cACA,gBAAAC;AAAA,cACA,mBAAAC;AAAA,cACA,YAAAoB;AAAA,cACA,cAAAuC;AAAA,YAAA;AAAA,UAAA;AAAA,QACF;AAAA,MAAA;AAAA,IACF;AAAA,EAAA,GAGN,EAAA,CACF;AAGF,SAAOyG,GAAaF,GAAc,SAAS,IAAI;AACjD,GC9FaG,KAAoD,CAAC;AAAA,EAChE,OAAA1C;AAAA,EACA,cAAAjG,IAAe;AAAA,EACf,YAAAE;AAAA,EACA,iBAAAgG,IAAkB,CAAA;AAAA,EAClB,OAAA0C,IAAQ;AAAA,EACR,QAAAC,IAAS;AAAA,EACT,WAAAC;AAAA,EACA,OAAAC;AAAA,EACA,QAAAjM;AAAA,EACA,UAAAC;AAAA,EACA,UAAAsJ;AAAA,EACA,OAAAxI,IAAQ;AAAA,EACR,eAAAyI;AAAA,EACA,aAAAlI;AAAA,EACA,gBAAAC;AAAA,EACA,mBAAAC;AAAA,EACA,YAAAoB;AAAA,EACA,SAAAS;AAAA,EACA,cAAA8B;AACF,MAAM;AACJ,QAAM,CAACvB,GAAYC,CAAa,IAAI5B;AAAA,IAAS,MAC3C,OAAO,SAAW,MACd,OAAO,WAAW,8BAA8B,EAAE,UAClD;AAAA,EAAA;AAGN,EAAAG,EAAU,MAAM;AACd,QAAIrB,MAAU,OAAQ;AACtB,UAAM+C,IAAM,OAAO,WAAW,8BAA8B,GACtDC,IAAU,CAACN,MAA2BI,EAAcJ,EAAE,OAAO;AACnE,WAAAK,EAAI,iBAAiB,UAAUC,CAAO,GAC/B,MAAMD,EAAI,oBAAoB,UAAUC,CAAO;AAAA,EACxD,GAAG,CAAChD,CAAK,CAAC;AAEV,QAAMkJ,IAAgBlJ,MAAU,SAAU6C,IAAa,SAAS,UAAW7C;AAE3E,SACE,gBAAAT;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW,YAAY0L,KAAa,EAAE;AAAA,MACtC,OAAO,EAAE,OAAAF,GAAO,QAAAC,GAAQ,GAAGE,EAAA;AAAA,MAC3B,cAAYhC;AAAA,MAEZ,UAAA,gBAAA3J,EAAC,OAAA,EAAI,WAAU,iFACb,UAAA,gBAAAA;AAAA,QAAC2I;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,OAAAE;AAAA,UACA,cAAAjG;AAAA,UACA,YAAAE;AAAA,UACA,iBAAAgG;AAAA,UACA,QAAApJ;AAAA,UACA,UAAAC;AAAA,UACA,UAAAsJ;AAAA,UACA,OAAAxI;AAAA,UACA,eAAAyI;AAAA,UACA,aAAAlI;AAAA,UACA,gBAAAC;AAAA,UACA,mBAAAC;AAAA,UACA,YAAAoB;AAAA,UACA,SAAAS;AAAA,UACA,cAAA8B;AAAA,QAAA;AAAA,MAAA,EACF,CACF;AAAA,IAAA;AAAA,EAAA;AAGN;AC3DO,SAAS+G,GAAeC,GAA4B;AACzDC,EAAAA,GAAmBC,IAAUF,CAAO;AACtC;ACzCO,MAAMG,KAAUC,GAAY;"}
|
|
1
|
+
{"version":3,"file":"index-Cbp94jbP.mjs","sources":["../../../file-preview-core/lib/index.mjs","../../src/i18n/LocaleContext.tsx","../../src/ThemeContext.tsx","../../src/RequestContext.tsx","../../src/renderers/Unsupported/index.tsx","../../src/hooks/useKeyboardNavigation.ts","../../src/hooks/useThemeMode.ts","../../src/components/preview/ToolbarButton.tsx","../../src/toolbar/renderItems.tsx","../../src/components/preview/FilePreviewToolbar.tsx","../../src/components/preview/RendererError.tsx","../../src/components/preview/RendererErrorBoundary.tsx","../../src/renderers/RendererLoading.tsx","../../src/components/preview/FilePreviewRenderer.tsx","../../src/components/preview/NavArrows.tsx","../../src/renderers/lazy.tsx","../../src/renderers/registry.tsx","../../src/FilePreviewContent.tsx","../../src/FilePreviewModal.tsx","../../src/FilePreviewEmbed.tsx","../../src/utils/pdfConfig.ts","../../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 React, { createContext, useContext, useMemo } from 'react';\nimport {\n createTranslator,\n type Locale,\n type Messages,\n type Translator,\n} from '@eternalheart/file-preview-core';\n\nexport interface LocaleContextValue {\n locale: Locale;\n t: Translator;\n}\n\nconst LocaleContext = createContext<LocaleContextValue | null>(null);\n\nexport interface LocaleProviderProps {\n /** 当前语言,默认 'zh-CN' */\n locale?: Locale;\n /** 用户自定义字典,浅合并到内置字典之上 */\n messages?: Partial<Record<Locale, Partial<Messages>>>;\n children: React.ReactNode;\n}\n\nexport const LocaleProvider: React.FC<LocaleProviderProps> = ({\n locale = 'zh-CN',\n messages,\n children,\n}) => {\n const value = useMemo<LocaleContextValue>(() => {\n const t = createTranslator({ locale, messages });\n return { locale, t };\n }, [locale, messages]);\n\n return <LocaleContext.Provider value={value}>{children}</LocaleContext.Provider>;\n};\n\n/**\n * 兜底 translator(当组件被脱离 LocaleProvider 直接使用时)\n * 保持模块级单例,避免每次调用重建\n */\nlet fallbackTranslator: Translator | null = null;\nfunction getFallbackTranslator(): Translator {\n if (!fallbackTranslator) {\n fallbackTranslator = createTranslator({ locale: 'zh-CN' });\n }\n return fallbackTranslator;\n}\n\n/**\n * 获取翻译函数。任意位置调用都安全:\n * - 在 LocaleProvider 下 → 用 provider 提供的 translator\n * - 否则 → 回落到 zh-CN 兜底 translator\n */\nexport function useTranslator(): Translator {\n const ctx = useContext(LocaleContext);\n return ctx?.t ?? getFallbackTranslator();\n}\n\n/**\n * 获取当前 locale。在 Provider 之外返回 'zh-CN'。\n */\nexport function useLocale(): Locale {\n const ctx = useContext(LocaleContext);\n return ctx?.locale ?? 'zh-CN';\n}\n","import React, { createContext, useContext } from 'react';\n\n/** 已解析的主题(auto 在 FilePreviewContent 里被解析过) */\nexport type ResolvedTheme = 'dark' | 'light';\n\nconst ThemeContext = createContext<ResolvedTheme | null>(null);\n\nexport interface ThemeProviderProps {\n theme: ResolvedTheme;\n children: React.ReactNode;\n}\n\nexport const ThemeProvider: React.FC<ThemeProviderProps> = ({ theme, children }) => {\n return <ThemeContext.Provider value={theme}>{children}</ThemeContext.Provider>;\n};\n\n/**\n * 获取已解析的主题('dark' | 'light')。\n * Provider 之外默认 'dark'(保持组件历史默认行为)。\n *\n * renderer 需要切第三方库的 theme prop(如 react-syntax-highlighter 的 style、\n * shiki 的 theme 选项)时使用;不要用它做 className 分支 —— class 由 CSS 变量\n * 通过根容器 [data-theme] 自动切换。\n */\nexport function useResolvedTheme(): ResolvedTheme {\n return useContext(ThemeContext) ?? 'dark';\n}\n","import React, { createContext, useContext, useEffect, useMemo, useRef, useState } from 'react';\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 defaultValue: RequestContextValue = {\n fetcher: (url, init) => fetch(url, init),\n};\n\nconst RequestContext = createContext<RequestContextValue>(defaultValue);\n\nexport interface RequestProviderProps {\n requestInit?: RequestInitFactory;\n requestHandler?: RequestHandler;\n shouldFetchAsBlob?: ShouldFetchAsBlob;\n children: React.ReactNode;\n}\n\nexport const RequestProvider: React.FC<RequestProviderProps> = ({\n requestInit,\n requestHandler,\n shouldFetchAsBlob,\n children,\n}) => {\n const value = useMemo<RequestContextValue>(\n () => ({\n fetcher: createFetcher({ requestInit, requestHandler }),\n shouldFetchAsBlob,\n }),\n [requestInit, requestHandler, shouldFetchAsBlob],\n );\n return (\n <RequestContext.Provider value={value}>{children}</RequestContext.Provider>\n );\n};\n\nexport function useRequest(): RequestContextValue {\n return useContext(RequestContext);\n}\n\nexport function useFetcher(): Fetcher {\n return useContext(RequestContext).fetcher;\n}\n\n/**\n * 解析 file 的可消费 URL:\n * - 未配置 shouldFetchAsBlob 或返回 false:同步返回 file.url(不入 state,避免切换文件时残留旧值)\n * - 返回 true:用 fetcher 拉成 blob: URL,组件卸载或 file 变化时 revoke\n *\n * 期间返回空字符串(表示 \"还没准备好\"),调用方应避免空 URL 时挂载到 <img src> 等。\n */\nexport function useResolvedUrl(file: PreviewFile | undefined): string {\n const { fetcher, shouldFetchAsBlob } = useContext(RequestContext);\n const needBlob = !!(file && shouldFetchAsBlob?.(file));\n // 仅在需要预取 blob 时才使用 state;其他场景下方法返回值由 file.url 派生,避免 state 跨文件切换时残留\n const [blobUrl, setBlobUrl] = useState<string>('');\n const createdRef = useRef<string | null>(null);\n\n useEffect(() => {\n if (!file || !needBlob) {\n // 离开 blob 模式:清掉上次缓存的 blob URL\n if (createdRef.current) {\n URL.revokeObjectURL(createdRef.current);\n createdRef.current = null;\n }\n setBlobUrl('');\n return;\n }\n let cancelled = false;\n setBlobUrl('');\n fetchAsBlobUrl(file.url, fetcher)\n .then((next) => {\n if (cancelled) {\n URL.revokeObjectURL(next);\n return;\n }\n if (createdRef.current) {\n URL.revokeObjectURL(createdRef.current);\n }\n createdRef.current = next;\n setBlobUrl(next);\n })\n .catch((err) => {\n if (!cancelled) {\n console.error('[file-preview] resolve blob url failed:', err);\n setBlobUrl(file.url);\n }\n });\n return () => {\n cancelled = true;\n };\n }, [file?.id, file?.url, needBlob, fetcher]);\n\n // 卸载时 revoke 最后一次创建的 blob URL\n useEffect(() => {\n return () => {\n if (createdRef.current) {\n URL.revokeObjectURL(createdRef.current);\n createdRef.current = null;\n }\n };\n }, []);\n\n if (!file) return '';\n if (!needBlob) return file.url;\n return blobUrl;\n}\n","import { FileQuestion, Download } from 'lucide-react';\nimport { useTranslator } from '../../i18n/LocaleContext';\n\ninterface UnsupportedRendererProps {\n fileName: string;\n fileType: string;\n onDownload: () => void;\n}\n\nexport const UnsupportedRenderer: React.FC<UnsupportedRendererProps> = ({\n fileName,\n fileType,\n onDownload,\n}) => {\n const t = useTranslator();\n return (\n <div className=\"rfp-flex rfp-flex-col rfp-items-center rfp-justify-center rfp-w-full rfp-h-full rfp-p-6 rfp-gap-4\">\n <div className=\"rfp-w-20 rfp-h-20 rfp-rounded-full rfp-bg-surface-2 rfp-flex rfp-items-center rfp-justify-center\">\n <FileQuestion className=\"rfp-w-10 rfp-h-10 rfp-text-fg-secondary\" />\n </div>\n\n <div className=\"rfp-text-fg-primary rfp-text-center\">\n <p className=\"rfp-text-lg rfp-font-medium rfp-mb-2\">{fileName}</p>\n <p className=\"rfp-text-fg-secondary\">{t('common.unsupported_preview', { type: fileType })}</p>\n </div>\n\n <button\n onClick={onDownload}\n className=\"rfp-flex rfp-items-center rfp-gap-2 rfp-px-4 rfp-py-2 rfp-bg-surface-2 hover:rfp-bg-surface-3 rfp-backdrop-blur-sm rfp-rounded-lg rfp-text-fg-primary rfp-font-medium rfp-transition-all\"\n >\n <Download className=\"rfp-w-5 rfp-h-5\" />\n {t('common.download')}\n </button>\n </div>\n );\n};\n","import { useEffect, useRef } from 'react';\n\nexport interface UseKeyboardNavigationParams {\n mode: 'modal' | 'embed';\n currentIndex: number;\n totalFiles: number;\n onNavigate?: (index: number) => void;\n onClose?: () => void;\n rootRef?: React.RefObject<HTMLDivElement | null>;\n}\n\n/**\n * 键盘导航 hook\n * - modal 模式:监听 window 的 keydown 事件\n * - embed 模式:仅监听根容器的 keydown 事件(需要容器获得焦点)\n */\nexport function useKeyboardNavigation({\n mode,\n currentIndex,\n totalFiles,\n onNavigate,\n onClose,\n rootRef,\n}: UseKeyboardNavigationParams): void {\n const handlersRef = useRef({ onNavigate, onClose });\n\n useEffect(() => {\n handlersRef.current = { onNavigate, onClose };\n }, [onNavigate, onClose]);\n\n useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n const { onNavigate, onClose } = handlersRef.current;\n\n if (e.key === 'Escape' && mode === 'modal') {\n onClose?.();\n } else if (e.key === 'ArrowLeft' && currentIndex > 0) {\n onNavigate?.(currentIndex - 1);\n } else if (e.key === 'ArrowRight' && currentIndex < totalFiles - 1) {\n onNavigate?.(currentIndex + 1);\n }\n };\n\n if (mode === 'modal') {\n window.addEventListener('keydown', handleKeyDown);\n return () => window.removeEventListener('keydown', handleKeyDown);\n } else {\n const el = rootRef?.current;\n if (!el) return;\n el.addEventListener('keydown', handleKeyDown as EventListener);\n return () => el.removeEventListener('keydown', handleKeyDown as EventListener);\n }\n }, [mode, currentIndex, totalFiles, rootRef]);\n}\n","import { useState, useEffect } from 'react';\nimport type { Theme } from '@eternalheart/file-preview-core';\n\n/**\n * 主题模式 hook\n * 处理 auto 主题时的系统偏好监听\n */\nexport function useThemeMode(theme: Theme): 'light' | 'dark' {\n const [systemDark, setSystemDark] = useState(() =>\n typeof window !== 'undefined'\n ? window.matchMedia('(prefers-color-scheme: dark)').matches\n : true\n );\n\n useEffect(() => {\n if (theme !== 'auto') return;\n\n const mql = window.matchMedia('(prefers-color-scheme: dark)');\n const handler = (e: MediaQueryListEvent) => setSystemDark(e.matches);\n mql.addEventListener('change', handler);\n return () => mql.removeEventListener('change', handler);\n }, [theme]);\n\n return theme === 'auto' ? (systemDark ? 'dark' : 'light') : theme;\n}\n","import React from 'react';\n\nexport interface ToolbarButtonProps {\n icon: React.ReactNode;\n label: string;\n onClick: () => void;\n disabled?: boolean;\n /** 激活状态:true 时按钮显示高亮样式 */\n active?: boolean;\n ariaKeyshortcuts?: string;\n}\n\n/**\n * 工具栏按钮组件\n * 支持 tooltip、disabled 状态、active 高亮和 aria 属性\n */\nexport const ToolbarButton: React.FC<ToolbarButtonProps> = ({\n icon,\n label,\n onClick,\n disabled,\n active,\n ariaKeyshortcuts,\n}) => {\n let stateClass: string;\n if (disabled) {\n stateClass = 'rfp-text-fg-disabled rfp-cursor-not-allowed';\n } else if (active) {\n stateClass = 'rfp-text-fg-primary rfp-bg-surface-3 hover:rfp-bg-surface-3 active:rfp-bg-surface-3';\n } else {\n stateClass = 'rfp-text-fg-primary hover:rfp-bg-surface-2 active:rfp-bg-surface-3';\n }\n\n return (\n <button\n onClick={onClick}\n disabled={disabled}\n aria-label={label}\n aria-pressed={active}\n aria-keyshortcuts={ariaKeyshortcuts}\n aria-disabled={disabled}\n className={`rfp-relative rfp-group rfp-p-2 md:rfp-p-1.5 rfp-rounded-md rfp-transition-all rfp-select-none ${stateClass}`}\n >\n {icon}\n <span className=\"rfp-absolute rfp-left-1/2 -rfp-translate-x-1/2 rfp-top-full rfp-mt-1.5 rfp-px-2 rfp-py-1 rfp-text-xs rfp-rounded rfp-whitespace-nowrap rfp-pointer-events-none rfp-opacity-0 rfp-invisible group-hover:rfp-opacity-100 group-hover:rfp-visible rfp-transition-opacity rfp-duration-200 rfp-z-50 rfp-bg-fg-primary rfp-text-fg-inverse max-[1023px]:!rfp-hidden\">\n <span className=\"rfp-absolute rfp-left-1/2 -rfp-translate-x-1/2 -rfp-top-1 rfp-w-2 rfp-h-2 rfp-rotate-45 rfp-bg-fg-primary\" />\n <span className=\"rfp-relative\">{label}</span>\n </span>\n </button>\n );\n};\n","import React from 'react';\nimport type { ToolbarGroup } from '../renderers/toolbar.types';\nimport { ToolbarButton } from '../components/preview/ToolbarButton';\n\n/**\n * 渲染工具栏组项(按钮 + 文本 + 分隔线)\n * 提取到模块顶层,避免每次组件渲染时重新创建\n */\nexport function renderToolbarItems(\n groups: ToolbarGroup[],\n dividerClass: string\n): React.ReactNode {\n return groups.map((group, gi, arr) => (\n <React.Fragment key={gi}>\n {group.items.map((item, ii) =>\n item.type === 'button' ? (\n <ToolbarButton\n key={`${gi}-${ii}`}\n icon={item.icon}\n label={item.tooltip}\n onClick={item.action}\n disabled={item.disabled}\n active={item.active}\n ariaKeyshortcuts={item.ariaKeyshortcuts}\n />\n ) : (\n <span\n key={`${gi}-${ii}`}\n className=\"rfp-text-xs rfp-text-center rfp-font-medium rfp-tabular-nums rfp-text-fg-tertiary\"\n style={{ minWidth: item.minWidth || 'auto' }}\n >\n {item.content}\n </span>\n )\n )}\n {gi < arr.length - 1 && <div className={`rfp-w-px rfp-h-4 rfp-bg-divide ${dividerClass}`} />}\n </React.Fragment>\n ));\n}\n","import React from 'react';\nimport { motion } from 'framer-motion';\nimport { Download, X } from 'lucide-react';\nimport type { ToolbarGroup } from '../../renderers/toolbar.types';\nimport type { Translator } from '@eternalheart/file-preview-core';\nimport { renderToolbarItems } from '../../toolbar/renderItems';\n\nexport interface FilePreviewToolbarProps {\n fileName: string;\n currentIndex: number;\n totalFiles: number;\n toolGroups: ToolbarGroup[];\n t: Translator;\n onDownload: () => void;\n onClose?: () => void;\n showDownload: boolean;\n}\n\n/**\n * 文件预览顶部工具栏组件\n * - 桌面端:单行显示所有按钮\n * - 移动端:第一行显示文件名 + 下载/关闭,第二行显示工具按钮\n */\nexport const FilePreviewToolbar: React.FC<FilePreviewToolbarProps> = ({\n fileName,\n currentIndex,\n totalFiles,\n toolGroups,\n t,\n onDownload,\n onClose,\n showDownload,\n}) => {\n const showCloseButton = !!onClose;\n\n // 操作组:下载、关闭(通用,不属于任何 Renderer)\n const actionGroups: ToolbarGroup[] = [\n ...(showDownload\n ? [\n {\n items: [\n {\n type: 'button' as const,\n icon: <Download className=\"rfp-w-4 rfp-h-4\" />,\n tooltip: t('accessibility.downloadFile'),\n action: onDownload,\n },\n ],\n },\n ]\n : []),\n ...(showCloseButton\n ? [\n {\n items: [\n {\n type: 'button' as const,\n icon: <X className=\"rfp-w-4 rfp-h-4\" />,\n tooltip: t('accessibility.closePreview'),\n action: onClose!,\n ariaKeyshortcuts: 'Escape',\n },\n ],\n },\n ]\n : []),\n ];\n\n return (\n <motion.div\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n className=\"rfp-flex-shrink-0 rfp-z-10 rfp-backdrop-blur-md rfp-border-b rfp-bg-surface-toolbar rfp-border-line\"\n style={{ paddingTop: 'env(safe-area-inset-top, 0px)' }}\n >\n {/* 第一行:文件名 + 分页 + 关闭/下载(移动端右侧)/全部按钮(桌面端) */}\n <div className=\"rfp-flex rfp-items-center rfp-justify-between rfp-px-3 md:rfp-px-5 rfp-py-1.5 md:rfp-py-2.5\">\n {/* 左侧:文件名 + 分页 */}\n <div className=\"rfp-flex rfp-items-center rfp-flex-1 rfp-min-w-0 rfp-mr-2 md:rfp-mr-3\">\n <h2 className=\"rfp-font-medium rfp-text-xs md:rfp-text-sm rfp-truncate rfp-text-fg-primary\">\n {fileName}\n </h2>\n <span\n className=\"rfp-text-xs rfp-ml-2 rfp-flex-shrink-0 rfp-text-fg-muted\"\n aria-live=\"polite\"\n aria-atomic=\"true\"\n >\n {currentIndex + 1}/{totalFiles}\n </span>\n </div>\n\n {/* 移动端:仅显示下载 + 关闭 */}\n <div className=\"rfp-flex rfp-items-center rfp-gap-1 md:rfp-hidden rfp-flex-shrink-0\">\n {renderToolbarItems(actionGroups, 'rfp-mx-0.5')}\n </div>\n\n {/* 桌面端:所有工具按钮 */}\n <div className=\"rfp-hidden md:rfp-flex rfp-items-center rfp-gap-1 rfp-flex-shrink-0\">\n {renderToolbarItems(toolGroups, 'rfp-mx-1')}\n {toolGroups.length > 0 && (\n <div className=\"rfp-w-px rfp-h-4 rfp-mx-1 rfp-bg-divide\" />\n )}\n {renderToolbarItems(actionGroups, 'rfp-mx-1')}\n </div>\n </div>\n\n {/* 第二行:移动端工具按钮 */}\n {toolGroups.length > 0 && (\n <div className=\"rfp-flex rfp-items-center rfp-gap-1 rfp-px-3 rfp-pb-1.5 rfp-overflow-x-auto scrollbar-hide md:rfp-hidden\">\n {renderToolbarItems(toolGroups, 'rfp-mx-0.5')}\n </div>\n )}\n </motion.div>\n );\n};\n","import React from 'react';\nimport { AlertCircle, Download, RotateCw } from 'lucide-react';\nimport type { Translator } from '@eternalheart/file-preview-core';\n\nexport interface RendererErrorProps {\n error: Error;\n fileName: string;\n t: Translator;\n onRetry: () => void;\n onDownload: () => void;\n}\n\n/**\n * 渲染器错误 UI 组件\n * 显示错误信息、文件名、重试和下载按钮\n */\nexport const RendererError: React.FC<RendererErrorProps> = ({\n error,\n fileName,\n t,\n onRetry,\n onDownload,\n}) => {\n return (\n <div className=\"rfp-flex rfp-flex-col rfp-items-center rfp-justify-center rfp-h-full rfp-px-4 rfp-text-fg-primary\">\n <AlertCircle className=\"rfp-w-16 rfp-h-16 rfp-mb-4 rfp-text-error\" />\n <h3 className=\"rfp-text-lg rfp-font-semibold rfp-mb-2\">\n {t('common.unknown_error')}\n </h3>\n <p className=\"rfp-text-sm rfp-text-fg-secondary rfp-mb-1 rfp-max-w-md rfp-text-center\">\n {error.message}\n </p>\n <p className=\"rfp-text-xs rfp-text-fg-tertiary rfp-mb-6 rfp-max-w-md rfp-text-center\">\n {fileName}\n </p>\n <div className=\"rfp-flex rfp-gap-3\">\n <button\n onClick={onRetry}\n aria-label={t('common.retry')}\n className=\"rfp-flex rfp-items-center rfp-gap-2 rfp-px-4 rfp-py-2 rfp-bg-surface-2 hover:rfp-bg-surface-3 rfp-rounded-md rfp-text-sm rfp-font-medium rfp-transition-colors\"\n >\n <RotateCw className=\"rfp-w-4 rfp-h-4\" />\n {t('common.retry')}\n </button>\n <button\n onClick={onDownload}\n aria-label={t('accessibility.downloadFile')}\n className=\"rfp-flex rfp-items-center rfp-gap-2 rfp-px-4 rfp-py-2 rfp-bg-surface-2 hover:rfp-bg-surface-3 rfp-rounded-md rfp-text-sm rfp-font-medium rfp-transition-colors\"\n >\n <Download className=\"rfp-w-4 rfp-h-4\" />\n {t('common.download')}\n </button>\n </div>\n </div>\n );\n};\n","import React from 'react';\n\nexport interface RendererErrorBoundaryProps {\n children: React.ReactNode;\n fallback: (error: Error, reset: () => void) => React.ReactNode;\n onError?: (error: Error, errorInfo: React.ErrorInfo) => void;\n}\n\ninterface RendererErrorBoundaryState {\n hasError: boolean;\n error: Error | null;\n}\n\n/**\n * 渲染器错误边界类组件\n * 捕获渲染器加载失败和运行时错误\n */\nexport class RendererErrorBoundary extends React.Component<\n RendererErrorBoundaryProps,\n RendererErrorBoundaryState\n> {\n constructor(props: RendererErrorBoundaryProps) {\n super(props);\n this.state = { hasError: false, error: null };\n }\n\n static getDerivedStateFromError(error: Error): RendererErrorBoundaryState {\n return { hasError: true, error };\n }\n\n componentDidCatch(error: Error, errorInfo: React.ErrorInfo): void {\n console.error('[file-preview] Renderer error:', error, errorInfo);\n this.props.onError?.(error, errorInfo);\n }\n\n reset = (): void => {\n this.setState({ hasError: false, error: null });\n };\n\n render(): React.ReactNode {\n if (this.state.hasError && this.state.error) {\n return this.props.fallback(this.state.error, this.reset);\n }\n\n return this.props.children;\n }\n}\n","import React from 'react';\nimport { useTranslator } from '../i18n/LocaleContext';\n\nexport const RendererLoading: React.FC = () => {\n const t = useTranslator();\n return (\n <div className=\"rfp-flex rfp-items-center rfp-justify-center rfp-w-full rfp-h-full rfp-text-fg-muted\">\n <div className=\"rfp-flex rfp-flex-col rfp-items-center rfp-gap-3\">\n <div className=\"rfp-w-8 rfp-h-8 rfp-rounded-full rfp-border-2 rfp-border-fg-muted rfp-border-t-transparent rfp-animate-spin\" />\n <span className=\"rfp-text-sm\">{t('common.loading') ?? 'Loading...'}</span>\n </div>\n </div>\n );\n};\n","import React, { Suspense } from 'react';\nimport type { Translator } from '@eternalheart/file-preview-core';\nimport type { PreviewFile, CustomRenderer, CustomRendererContext } from '../../types';\nimport { RendererErrorBoundary } from './RendererErrorBoundary';\nimport { RendererError } from './RendererError';\nimport { RendererLoading } from '../../renderers/RendererLoading';\n\nexport interface FilePreviewRendererProps {\n currentFile: PreviewFile;\n customRenderer?: CustomRenderer | null;\n customRendererContext: CustomRendererContext;\n t: Translator;\n onDownload: () => void;\n onError?: (error: Error, errorInfo: React.ErrorInfo) => void;\n children: React.ReactNode;\n}\n\n/**\n * 渲染器容器组件\n * 负责 Suspense + 错误边界包装,不负责具体渲染器选择\n */\nexport const FilePreviewRenderer: React.FC<FilePreviewRendererProps> = ({\n currentFile,\n customRenderer,\n customRendererContext,\n t,\n onDownload,\n onError,\n children,\n}) => {\n // 自定义渲染器优先\n if (customRenderer) {\n return (\n <RendererErrorBoundary\n fallback={(error, reset) => (\n <RendererError\n error={error}\n fileName={currentFile.name}\n t={t}\n onRetry={reset}\n onDownload={onDownload}\n />\n )}\n onError={onError}\n >\n {customRenderer.render(currentFile, customRendererContext)}\n </RendererErrorBoundary>\n );\n }\n\n // 内置渲染器(Suspense + 错误边界)\n return (\n <Suspense fallback={<RendererLoading />} key={currentFile.url}>\n <RendererErrorBoundary\n fallback={(error, reset) => (\n <RendererError\n error={error}\n fileName={currentFile.name}\n t={t}\n onRetry={reset}\n onDownload={onDownload}\n />\n )}\n onError={onError}\n >\n {children}\n </RendererErrorBoundary>\n </Suspense>\n );\n};\n","import React, { useState, useEffect, useRef, useCallback } from 'react';\nimport { motion } from 'framer-motion';\nimport { ChevronLeft, ChevronRight } from 'lucide-react';\nimport type { Translator } from '@eternalheart/file-preview-core';\n\nexport interface NavArrowsProps {\n containerRef: React.RefObject<HTMLDivElement | null>;\n hasPrev: boolean;\n hasNext: boolean;\n onPrev: () => void;\n onNext: () => void;\n resetKey: number;\n t: Translator;\n}\n\nconst NAV_HIDE_DELAY = 2000;\n\n/**\n * 导航箭头组件\n * 自带 mousemove 监听 + 2s 自动隐藏定时器\n * state 隔离在本组件,避免父组件因 navVisible 变化而 re-render\n */\nexport const NavArrows: React.FC<NavArrowsProps> = ({\n containerRef,\n hasPrev,\n hasNext,\n onPrev,\n onNext,\n resetKey,\n t,\n}) => {\n const [visible, setVisible] = useState(true);\n const timerRef = useRef<number | null>(null);\n\n const scheduleHide = useCallback(() => {\n if (timerRef.current) clearTimeout(timerRef.current);\n timerRef.current = window.setTimeout(() => setVisible(false), NAV_HIDE_DELAY);\n }, []);\n\n const show = useCallback(() => {\n setVisible((prev) => (prev ? prev : true));\n scheduleHide();\n }, [scheduleHide]);\n\n // 监听容器的 mousemove,触发显示 + 重置隐藏定时器\n useEffect(() => {\n const el = containerRef.current;\n if (!el) return;\n const handler = () => show();\n el.addEventListener('mousemove', handler);\n return () => {\n el.removeEventListener('mousemove', handler);\n };\n }, [containerRef, show]);\n\n // currentIndex 切换时,显示一次并重置定时器\n useEffect(() => {\n setVisible(true);\n scheduleHide();\n return () => {\n if (timerRef.current) clearTimeout(timerRef.current);\n };\n }, [resetKey, scheduleHide]);\n\n return (\n <>\n {hasPrev && (\n <motion.button\n initial={{ opacity: 0 }}\n animate={{ opacity: visible ? 1 : 0, x: visible ? 0 : -20 }}\n transition={{ duration: 0.2 }}\n onClick={onPrev}\n onMouseEnter={show}\n style={{ pointerEvents: visible ? 'auto' : 'none' }}\n aria-label={t('accessibility.previousFile') || '上一个文件'}\n aria-keyshortcuts=\"ArrowLeft\"\n className=\"rfp-absolute rfp-z-20 rfp-left-2 md:rfp-left-4 rfp-top-1/2 -rfp-translate-y-1/2 rfp-w-10 rfp-h-10 md:rfp-w-12 md:rfp-h-12 rfp-rounded-full rfp-backdrop-blur-xl rfp-border rfp-flex rfp-items-center rfp-justify-center rfp-transition-colors rfp-shadow-2xl rfp-bg-surface-nav rfp-border-line hover:rfp-bg-surface-nav-hover rfp-text-fg-primary\"\n >\n <ChevronLeft className=\"rfp-w-5 rfp-h-5 md:rfp-w-6 md:rfp-h-6\" />\n </motion.button>\n )}\n {hasNext && (\n <motion.button\n initial={{ opacity: 0 }}\n animate={{ opacity: visible ? 1 : 0, x: visible ? 0 : 20 }}\n transition={{ duration: 0.2 }}\n onClick={onNext}\n onMouseEnter={show}\n style={{ pointerEvents: visible ? 'auto' : 'none' }}\n aria-label={t('accessibility.nextFile') || '下一个文件'}\n aria-keyshortcuts=\"ArrowRight\"\n className=\"rfp-absolute rfp-z-20 rfp-right-2 md:rfp-right-4 rfp-top-1/2 -rfp-translate-y-1/2 rfp-w-10 rfp-h-10 md:rfp-w-12 md:rfp-h-12 rfp-rounded-full rfp-backdrop-blur-xl rfp-border rfp-flex rfp-items-center rfp-justify-center rfp-transition-colors rfp-shadow-2xl rfp-bg-surface-nav rfp-border-line hover:rfp-bg-surface-nav-hover rfp-text-fg-primary\"\n >\n <ChevronRight className=\"rfp-w-5 rfp-h-5 md:rfp-w-6 md:rfp-h-6\" />\n </motion.button>\n )}\n </>\n );\n};\n","// 集中的 lazy 装饰:把每个 renderer 转为 React.lazy(import).then(default),\n// 让 rollup 自动按 chunk 分割。\n// 显式声明 LazyExoticComponent 以避免 TS4023(要求把内部 Props 类型导入到当前文件作用域)。\nimport { lazy, type LazyExoticComponent, type ComponentType } from 'react';\nimport type { ImageRenderer as ImageRendererImpl } from './Image';\nimport type { PdfRenderer as PdfRendererImpl } from './Pdf';\nimport type { DocxRenderer as DocxRendererImpl } from './Docx';\nimport type { XlsxRenderer as XlsxRendererImpl } from './Xlsx';\nimport type { PptxRenderer as PptxRendererImpl } from './Pptx';\nimport type { MsgRenderer as MsgRendererImpl } from './Msg';\nimport type { EpubRenderer as EpubRendererImpl } from './Epub';\nimport type { MobiRenderer as MobiRendererImpl } from './Mobi';\nimport type { VideoRenderer as VideoRendererImpl } from './Video';\nimport type { AudioRenderer as AudioRendererImpl } from './Audio';\nimport type { MarkdownRenderer as MarkdownRendererImpl } from './Markdown';\nimport type { JsonRenderer as JsonRendererImpl } from './Json';\nimport type { CsvRenderer as CsvRendererImpl } from './Csv';\nimport type { XmlRenderer as XmlRendererImpl } from './Xml';\nimport type { SubtitleRenderer as SubtitleRendererImpl } from './Subtitle';\nimport type { ZipRenderer as ZipRendererImpl } from './Zip';\nimport type { TextRenderer as TextRendererImpl } from './Text';\nimport type { FontRenderer as FontRendererImpl } from './Font';\n\ntype Lazy<T> = LazyExoticComponent<T extends ComponentType<infer P> ? ComponentType<P> : never>;\n\nexport const ImageRenderer: Lazy<typeof ImageRendererImpl> = lazy(() =>\n import('./Image').then((m) => ({ default: m.ImageRenderer })),\n);\n\nexport const PdfRenderer: Lazy<typeof PdfRendererImpl> = lazy(() =>\n import('./Pdf').then((m) => ({ default: m.PdfRenderer })),\n);\n\nexport const DocxRenderer: Lazy<typeof DocxRendererImpl> = lazy(() =>\n import('./Docx').then((m) => ({ default: m.DocxRenderer })),\n);\n\nexport const XlsxRenderer: Lazy<typeof XlsxRendererImpl> = lazy(() =>\n import('./Xlsx').then((m) => ({ default: m.XlsxRenderer })),\n);\n\nexport const PptxRenderer: Lazy<typeof PptxRendererImpl> = lazy(() =>\n import('./Pptx').then((m) => ({ default: m.PptxRenderer })),\n);\n\nexport const MsgRenderer: Lazy<typeof MsgRendererImpl> = lazy(() =>\n import('./Msg').then((m) => ({ default: m.MsgRenderer })),\n);\n\nexport const EpubRenderer: Lazy<typeof EpubRendererImpl> = lazy(() =>\n import('./Epub').then((m) => ({ default: m.EpubRenderer })),\n);\n\nexport const MobiRenderer: Lazy<typeof MobiRendererImpl> = lazy(() =>\n import('./Mobi').then((m) => ({ default: m.MobiRenderer })),\n);\n\nexport const VideoRenderer: Lazy<typeof VideoRendererImpl> = lazy(() =>\n import('./Video').then((m) => ({ default: m.VideoRenderer })),\n);\n\nexport const AudioRenderer: Lazy<typeof AudioRendererImpl> = lazy(() =>\n import('./Audio').then((m) => ({ default: m.AudioRenderer })),\n);\n\nexport const MarkdownRenderer: Lazy<typeof MarkdownRendererImpl> = lazy(() =>\n import('./Markdown').then((m) => ({ default: m.MarkdownRenderer })),\n);\n\nexport const JsonRenderer: Lazy<typeof JsonRendererImpl> = lazy(() =>\n import('./Json').then((m) => ({ default: m.JsonRenderer })),\n);\n\nexport const CsvRenderer: Lazy<typeof CsvRendererImpl> = lazy(() =>\n import('./Csv').then((m) => ({ default: m.CsvRenderer })),\n);\n\nexport const XmlRenderer: Lazy<typeof XmlRendererImpl> = lazy(() =>\n import('./Xml').then((m) => ({ default: m.XmlRenderer })),\n);\n\nexport const SubtitleRenderer: Lazy<typeof SubtitleRendererImpl> = lazy(() =>\n import('./Subtitle').then((m) => ({ default: m.SubtitleRenderer })),\n);\n\nexport const ZipRenderer: Lazy<typeof ZipRendererImpl> = lazy(() =>\n import('./Zip').then((m) => ({ default: m.ZipRenderer })),\n);\n\nexport const TextRenderer: Lazy<typeof TextRendererImpl> = lazy(() =>\n import('./Text').then((m) => ({ default: m.TextRenderer })),\n);\n\nexport const FontRenderer: Lazy<typeof FontRendererImpl> = lazy(() =>\n import('./Font').then((m) => ({ default: m.FontRenderer })),\n);\n","import type { LazyExoticComponent, ComponentType } from 'react';\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: LazyExoticComponent<ComponentType<any>>;\n /** 计算传给组件的 props */\n getProps: (ctx: RendererContext) => Record<string, any>;\n}\n\n/**\n * 内置渲染器注册表\n *\n * 新增渲染器:\n * 1. 在 src/renderers/<Type>/index.tsx 创建渲染器\n * 2. 在 src/renderers/lazy.tsx 添加懒加载导出\n * 3. 在此注册表添加配置\n *\n * 主组件 FilePreviewContent.tsx 无需修改\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","import React, { useCallback, useMemo, useRef, useState, useEffect } from 'react';\nimport { getFileType, createTranslator, type Locale, type Messages, type Translator, type Theme, downloadFileWithFetcher } from '@eternalheart/file-preview-core';\nimport { LocaleProvider } from './i18n/LocaleContext';\nimport { ThemeProvider } from './ThemeContext';\nimport type { PreviewFileInput, CustomRenderer, CustomRendererContext } from './types';\nimport type { CustomRendererEventPayload, PreviewFile, RequestHandler, RequestInitFactory, ShouldFetchAsBlob } from '@eternalheart/file-preview-core';\nimport { normalizeFiles } from './utils/fileNormalizer';\nimport { RequestProvider, useResolvedUrl, useFetcher } from './RequestContext';\nimport type { RendererHandle } from './renderers/base.types';\nimport type { ToolbarGroup } from './renderers/toolbar.types';\nimport { UnsupportedRenderer } from './renderers/Unsupported';\nimport {\n useKeyboardNavigation,\n useThemeMode,\n} from './hooks';\nimport { FilePreviewToolbar, FilePreviewRenderer, NavArrows } from './components/preview';\nimport { BUILTIN_RENDERERS } from './renderers/registry';\n\nconst MAX_ZIP_NESTING_DEPTH = 3;\n\nexport interface FilePreviewContentProps {\n files: PreviewFileInput[];\n currentIndex: number;\n onNavigate?: (index: number) => void;\n customRenderers?: CustomRenderer[];\n mode?: 'modal' | 'embed';\n onClose?: () => void;\n zipNestingDepth?: number;\n locale?: Locale;\n messages?: Partial<Record<Locale, Partial<Messages>>>;\n headless?: boolean;\n theme?: Theme;\n onCustomEvent?: (event: CustomRendererEventPayload) => void;\n requestInit?: RequestInitFactory;\n requestHandler?: RequestHandler;\n shouldFetchAsBlob?: ShouldFetchAsBlob;\n onDownload?: (file: PreviewFile) => void;\n onError?: (error: Error, errorInfo: React.ErrorInfo) => void;\n showDownload?: boolean;\n}\n\nexport const FilePreviewContent: React.FC<FilePreviewContentProps> = (props) => {\n const { requestInit, requestHandler, shouldFetchAsBlob } = props;\n return (\n <RequestProvider\n requestInit={requestInit}\n requestHandler={requestHandler}\n shouldFetchAsBlob={shouldFetchAsBlob}\n >\n <FilePreviewContentInner {...props} />\n </RequestProvider>\n );\n};\n\nconst FilePreviewContentInner: React.FC<FilePreviewContentProps> = ({\n files,\n currentIndex,\n onNavigate,\n customRenderers = [],\n mode = 'modal',\n onClose,\n zipNestingDepth = 0,\n locale = 'zh-CN',\n messages: userMessages,\n headless = false,\n theme = 'dark',\n onCustomEvent,\n onDownload,\n onError,\n showDownload = true,\n requestInit: _requestInit,\n requestHandler: _requestHandler,\n shouldFetchAsBlob: _shouldFetchAsBlob,\n}) => {\n const t: Translator = useMemo(\n () => createTranslator({ locale, messages: userMessages }),\n [locale, userMessages],\n );\n\n const normalizedFiles = useMemo(() => normalizeFiles(files), [files]);\n const currentFile = normalizedFiles[currentIndex];\n const resolvedUrl = useResolvedUrl(currentFile);\n const fetcher = useFetcher();\n\n const customRenderer = useMemo(() => {\n if (!currentFile) return null;\n return customRenderers.find(renderer => renderer.test(currentFile));\n }, [currentFile, customRenderers]);\n\n const fileType = currentFile ? getFileType(currentFile) : 'unsupported';\n\n // 主题\n const resolvedTheme = useThemeMode(theme);\n\n // Refs\n const contentRef = useRef<HTMLDivElement>(null);\n const rootRef = useRef<HTMLDivElement>(null);\n\n // 新架构:通用渲染器 ref,用于获取工具栏配置\n const rendererInstanceRef = useRef<RendererHandle | null>(null);\n const [rendererToolbarGroups, setRendererToolbarGroups] = useState<ToolbarGroup[]>([]);\n const cleanupRef = useRef<(() => void) | null>(null);\n\n // 设置渲染器并初始化工具栏(在渲染器挂载/更新时同步触发)\n const setupRenderer = useCallback((renderer: RendererHandle | null) => {\n // 清理旧的订阅\n if (cleanupRef.current) {\n cleanupRef.current();\n cleanupRef.current = null;\n }\n\n rendererInstanceRef.current = renderer;\n\n if (!renderer?.getToolbarGroups) {\n setRendererToolbarGroups([]);\n return;\n }\n\n // 立即获取一次初始状态\n const initialGroups = renderer.getToolbarGroups();\n setRendererToolbarGroups(initialGroups);\n\n // 如果渲染器支持事件订阅,使用事件机制\n if (renderer.onToolbarChange) {\n const unsubscribe = renderer.onToolbarChange(() => {\n const groups = renderer.getToolbarGroups();\n setRendererToolbarGroups(groups);\n });\n\n cleanupRef.current = unsubscribe;\n return;\n }\n\n // 回退机制:如果渲染器不支持事件,使用轮询\n const interval = setInterval(() => {\n const groups = renderer.getToolbarGroups();\n setRendererToolbarGroups(groups);\n }, 100);\n cleanupRef.current = () => clearInterval(interval);\n }, []);\n\n // Callback ref:在渲染器挂载/卸载时立即触发\n const rendererRef = useCallback((renderer: RendererHandle | null) => {\n setupRenderer(renderer);\n }, [setupRenderer]);\n\n // 组件卸载时清理\n useEffect(() => {\n return () => {\n if (cleanupRef.current) {\n cleanupRef.current();\n cleanupRef.current = null;\n }\n };\n }, []);\n\n // 键盘导航\n useKeyboardNavigation({\n mode,\n currentIndex,\n totalFiles: normalizedFiles.length,\n onNavigate,\n onClose,\n rootRef,\n });\n\n // 图片自动适应窗口(已禁用,改为手动点击\"适应窗口\"按钮)\n // useImageAutoFit({\n // enabled: fileType === 'image',\n // naturalWidth: state.image.naturalWidth,\n // naturalHeight: state.image.naturalHeight,\n // containerRef: contentRef,\n // onZoomChange: (zoom) => dispatch({ type: 'SET_ZOOM', payload: zoom }),\n // });\n\n // 自定义渲染器上下文\n const emitCustom = useCallback(\n (name: string, payload?: unknown) => {\n if (!currentFile) return;\n onCustomEvent?.({ name, payload, file: currentFile });\n },\n [currentFile, onCustomEvent],\n );\n\n const customCtx = useMemo<CustomRendererContext>(\n () => ({ emit: emitCustom, t, theme: resolvedTheme, locale }),\n [emitCustom, t, resolvedTheme, locale],\n );\n\n const handleDownload = useCallback(async () => {\n if (!currentFile) return;\n if (onDownload) {\n await onDownload(currentFile);\n return;\n }\n try {\n await downloadFileWithFetcher(currentFile.url, currentFile.name, fetcher);\n } catch (err) {\n console.error('[file-preview] download failed:', err);\n }\n }, [currentFile, onDownload, fetcher]);\n\n if (!currentFile) return null;\n\n return (\n <LocaleProvider locale={locale} messages={userMessages}>\n <ThemeProvider theme={resolvedTheme}>\n <div\n ref={rootRef}\n tabIndex={mode === 'embed' ? 0 : -1}\n data-theme={resolvedTheme}\n className=\"rfp-relative rfp-w-full rfp-h-full rfp-flex rfp-flex-col rfp-overflow-hidden rfp-outline-none\"\n >\n {!headless && (\n <FilePreviewToolbar\n fileName={currentFile.name}\n currentIndex={currentIndex}\n totalFiles={normalizedFiles.length}\n toolGroups={rendererToolbarGroups}\n t={t}\n onDownload={handleDownload}\n onClose={onClose}\n showDownload={showDownload}\n />\n )}\n\n <div\n ref={contentRef}\n className=\"rfp-flex-1 rfp-flex rfp-items-center rfp-justify-center rfp-overflow-auto\"\n >\n <FilePreviewRenderer\n currentFile={currentFile}\n customRenderer={customRenderer}\n customRendererContext={customCtx}\n t={t}\n onDownload={handleDownload}\n onError={onError}\n >\n {(() => {\n // ZIP 嵌套深度超限:fallback 到 Unsupported\n if (fileType === 'zip' && zipNestingDepth >= MAX_ZIP_NESTING_DEPTH) {\n return (\n <UnsupportedRenderer\n fileName={currentFile.name}\n fileType={currentFile.type}\n onDownload={handleDownload}\n />\n );\n }\n\n // 从注册表查找匹配的渲染器\n const rendererConfig = BUILTIN_RENDERERS.find(\n (r) => r.fileType === fileType,\n );\n\n if (rendererConfig) {\n const RendererComponent = rendererConfig.component;\n const rendererProps = rendererConfig.getProps({\n resolvedUrl,\n zipNestingDepth,\n currentFile,\n });\n return <RendererComponent ref={rendererRef} {...rendererProps} />;\n }\n\n // 未匹配:fallback 到 UnsupportedRenderer\n return (\n <UnsupportedRenderer\n fileName={currentFile.name}\n fileType={currentFile.type}\n onDownload={handleDownload}\n />\n );\n })()}\n </FilePreviewRenderer>\n </div>\n\n {!headless && normalizedFiles.length > 1 && (\n <NavArrows\n containerRef={contentRef}\n hasPrev={currentIndex > 0}\n hasNext={currentIndex < normalizedFiles.length - 1}\n onPrev={() => onNavigate?.(currentIndex - 1)}\n onNext={() => onNavigate?.(currentIndex + 1)}\n resetKey={currentIndex}\n t={t}\n />\n )}\n </div>\n </ThemeProvider>\n </LocaleProvider>\n );\n};\n","import { useEffect, useState } from 'react';\nimport { createPortal } from 'react-dom';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport { PreviewFileInput, CustomRenderer } from './types';\nimport { FilePreviewContent } from './FilePreviewContent';\nimport type { Locale, Messages, Theme, CustomRendererEventPayload, PreviewFile, RequestHandler, RequestInitFactory, ShouldFetchAsBlob } from '@eternalheart/file-preview-core';\n\ninterface FilePreviewModalProps {\n files: PreviewFileInput[];\n currentIndex: number;\n isOpen: boolean;\n onClose: () => void;\n onNavigate?: (index: number) => void;\n customRenderers?: CustomRenderer[];\n /** 国际化语言,默认 'zh-CN' */\n locale?: Locale;\n /** 用户自定义翻译字典 */\n messages?: Partial<Record<Locale, Partial<Messages>>>;\n /** 无头模式:隐藏工具栏和导航箭头 */\n headless?: boolean;\n /** 主题模式,默认 'dark' */\n theme?: Theme;\n /** 自定义渲染器派发的事件出口 */\n onCustomEvent?: (event: CustomRendererEventPayload) => void;\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\nexport const FilePreviewModal: React.FC<FilePreviewModalProps> = ({\n files,\n currentIndex,\n isOpen,\n onClose,\n onNavigate,\n customRenderers = [],\n locale,\n messages,\n headless,\n theme = 'dark',\n onCustomEvent,\n requestInit,\n requestHandler,\n shouldFetchAsBlob,\n onDownload,\n showDownload,\n}) => {\n const [systemDark, setSystemDark] = useState(() =>\n typeof window !== 'undefined'\n ? window.matchMedia('(prefers-color-scheme: dark)').matches\n : true,\n );\n\n useEffect(() => {\n if (theme !== 'auto') return;\n const mql = window.matchMedia('(prefers-color-scheme: dark)');\n const handler = (e: MediaQueryListEvent) => setSystemDark(e.matches);\n mql.addEventListener('change', handler);\n return () => mql.removeEventListener('change', handler);\n }, [theme]);\n\n const resolvedTheme = theme === 'auto' ? (systemDark ? 'dark' : 'light') : theme;\n\n // 锁定 body 滚动\n useEffect(() => {\n if (isOpen) {\n const originalOverflow = document.body.style.overflow;\n const originalPaddingRight = document.body.style.paddingRight;\n\n const scrollbarWidth = window.innerWidth - document.documentElement.clientWidth;\n\n document.body.style.overflow = 'hidden';\n if (scrollbarWidth > 0) {\n document.body.style.paddingRight = `${scrollbarWidth}px`;\n }\n\n return () => {\n document.body.style.overflow = originalOverflow;\n document.body.style.paddingRight = originalPaddingRight;\n };\n }\n }, [isOpen]);\n\n if (!isOpen) return null;\n\n const modalContent = (\n <div className=\"rfp-root\" data-theme={resolvedTheme}>\n <AnimatePresence>\n {isOpen && (\n <motion.div\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n className=\"rfp-fixed rfp-inset-0 rfp-z-[9999] rfp-flex rfp-items-center rfp-justify-center rfp-backdrop-blur-md rfp-overflow-hidden rfp-bg-surface-overlay\"\n onClick={onClose}\n onWheel={(e) => e.stopPropagation()}\n >\n <div\n className=\"rfp-relative rfp-w-full rfp-h-full\"\n onClick={(e) => e.stopPropagation()}\n >\n <FilePreviewContent\n mode=\"modal\"\n files={files}\n currentIndex={currentIndex}\n onClose={onClose}\n onNavigate={onNavigate}\n customRenderers={customRenderers}\n locale={locale}\n messages={messages}\n headless={headless}\n theme={theme}\n onCustomEvent={onCustomEvent}\n requestInit={requestInit}\n requestHandler={requestHandler}\n shouldFetchAsBlob={shouldFetchAsBlob}\n onDownload={onDownload}\n showDownload={showDownload}\n />\n </div>\n </motion.div>\n )}\n </AnimatePresence>\n </div>\n );\n\n return createPortal(modalContent, document.body);\n};\n","import { useEffect, useState } from 'react';\nimport { PreviewFileInput, CustomRenderer } from './types';\nimport { FilePreviewContent } from './FilePreviewContent';\nimport type { Locale, Messages, Theme, CustomRendererEventPayload, PreviewFile, RequestHandler, RequestInitFactory, ShouldFetchAsBlob } from '@eternalheart/file-preview-core';\n\ninterface FilePreviewEmbedProps {\n files: PreviewFileInput[];\n currentIndex?: number;\n onNavigate?: (index: number) => void;\n customRenderers?: CustomRenderer[];\n /** 宽度,默认 100% 填充父容器 */\n width?: number | string;\n /** 高度,默认 100% 填充父容器 */\n height?: number | string;\n className?: string;\n style?: React.CSSProperties;\n /** 国际化语言,默认 'zh-CN' */\n locale?: Locale;\n /** 用户自定义翻译字典 */\n messages?: Partial<Record<Locale, Partial<Messages>>>;\n /** 无头模式:隐藏工具栏和导航箭头 */\n headless?: boolean;\n /** 主题模式,默认 'dark' */\n theme?: Theme;\n /** 自定义渲染器派发的事件出口 */\n onCustomEvent?: (event: CustomRendererEventPayload) => void;\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\nexport const FilePreviewEmbed: React.FC<FilePreviewEmbedProps> = ({\n files,\n currentIndex = 0,\n onNavigate,\n customRenderers = [],\n width = '100%',\n height = '100%',\n className,\n style,\n locale,\n messages,\n headless,\n theme = 'dark',\n onCustomEvent,\n requestInit,\n requestHandler,\n shouldFetchAsBlob,\n onDownload,\n onClose,\n showDownload,\n}) => {\n const [systemDark, setSystemDark] = useState(() =>\n typeof window !== 'undefined'\n ? window.matchMedia('(prefers-color-scheme: dark)').matches\n : true,\n );\n\n useEffect(() => {\n if (theme !== 'auto') return;\n const mql = window.matchMedia('(prefers-color-scheme: dark)');\n const handler = (e: MediaQueryListEvent) => setSystemDark(e.matches);\n mql.addEventListener('change', handler);\n return () => mql.removeEventListener('change', handler);\n }, [theme]);\n\n const resolvedTheme = theme === 'auto' ? (systemDark ? 'dark' : 'light') : theme;\n\n return (\n <div\n className={`rfp-root ${className ?? ''}`}\n style={{ width, height, ...style }}\n data-theme={resolvedTheme}\n >\n <div className=\"rfp-relative rfp-w-full rfp-h-full rfp-overflow-hidden rfp-bg-surface-overlay\">\n <FilePreviewContent\n mode=\"embed\"\n files={files}\n currentIndex={currentIndex}\n onNavigate={onNavigate}\n customRenderers={customRenderers}\n locale={locale}\n messages={messages}\n headless={headless}\n theme={theme}\n onCustomEvent={onCustomEvent}\n requestInit={requestInit}\n requestHandler={requestHandler}\n shouldFetchAsBlob={shouldFetchAsBlob}\n onDownload={onDownload}\n onClose={onClose}\n showDownload={showDownload}\n />\n </div>\n </div>\n );\n};\n","// @ts-ignore - pdfjs-dist 类型路径\nimport * as pdfjsLib from 'pdfjs-dist/build/pdf.mjs';\nimport { configurePdfWorker } from '@eternalheart/file-preview-core';\n\n/**\n * PDF.js Worker 配置选项\n */\nexport interface PdfConfigOptions {\n /**\n * PDF.js worker 文件路径\n * 默认使用 CDN: `https://unpkg.com/pdfjs-dist@${version}/build/pdf.worker.min.mjs`\n */\n workerSrc?: string;\n\n /**\n * CMap 文件目录路径\n * 默认使用 CDN: `https://unpkg.com/pdfjs-dist@${version}/cmaps/`\n */\n cMapUrl?: string;\n\n /**\n * 是否使用压缩的 CMap 文件\n * 默认: true\n */\n cMapPacked?: boolean;\n}\n\n/**\n * 配置 PDF.js\n *\n * @example\n * ```ts\n * // 使用本地静态文件(推荐用于生产环境)\n * configurePdfjs({\n * workerSrc: '/pdfjs/pdf.worker.min.mjs',\n * cMapUrl: '/pdfjs/cmaps/',\n * cMapPacked: true\n * });\n * ```\n *\n * @example\n * ```ts\n * // 使用 CDN(默认配置)\n * configurePdfjs(); // 自动使用 unpkg CDN\n * ```\n */\nexport function configurePdfjs(options?: PdfConfigOptions) {\n configurePdfWorker(pdfjsLib, options);\n}\n\nexport { pdfjsLib as pdfjs };\n","// 导入样式\nimport './index.css';\n\n// 导入版本号\nimport packageJson from '../package.json';\n\n// 导出版本号\nexport const VERSION = packageJson.version;\n\n// 导出主组件\nexport { FilePreviewModal } from './FilePreviewModal';\nexport { FilePreviewEmbed } from './FilePreviewEmbed';\nexport { FilePreviewContent } from './FilePreviewContent';\n\n// 导出类型定义\nexport type {\n PreviewFile,\n PreviewFileLink,\n PreviewFileInput,\n FileType,\n ToolbarAction,\n PreviewState,\n CustomRenderer,\n CustomRendererContext,\n CustomRendererEventPayload,\n} from './types';\n\n// 导出工具函数和常量\nexport { normalizeFile, normalizeFiles } from './utils/fileNormalizer';\nexport { SUPPORTED_FILE_TYPES } from '@eternalheart/file-preview-core';\n\n// 导出 PDF.js 配置函数和类型\nexport { configurePdfjs, pdfjs } from './utils/pdfConfig';\nexport type { PdfConfigOptions } from './utils/pdfConfig';\n\n// 导出 i18n 国际化\nexport { LocaleProvider, useTranslator, useLocale } from './i18n/LocaleContext';\nexport type { LocaleProviderProps, LocaleContextValue } from './i18n/LocaleContext';\nexport type {\n Locale,\n Messages,\n MessageKey,\n Translator,\n TranslateParams,\n CreateTranslatorOptions,\n Theme,\n} from '@eternalheart/file-preview-core';\n\n"],"names":["vt","U","n","M","t","W","o","wt","Ft","a","yt","r","Ct","Mt","St","d","u","f","$","zt","V","Z","Et","jt","Lt","L","Pt","P","H","O","T","i","s","l","c","p","z","R","q","G","g","v","h","x","b","F","N","D","w","m","_","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","LocaleContext","createContext","LocaleProvider","locale","messages","children","value","useMemo","createTranslator","jsx","fallbackTranslator","getFallbackTranslator","useTranslator","ctx","useContext","useLocale","ThemeContext","ThemeProvider","theme","useResolvedTheme","defaultValue","url","init","RequestContext","RequestProvider","requestInit","requestHandler","shouldFetchAsBlob","createFetcher","useFetcher","useResolvedUrl","file","fetcher","needBlob","blobUrl","setBlobUrl","useState","createdRef","useRef","useEffect","cancelled","fetchAsBlobUrl","next","err","UnsupportedRenderer","fileName","fileType","onDownload","jsxs","FileQuestion","Download","useKeyboardNavigation","mode","currentIndex","totalFiles","onNavigate","onClose","rootRef","handlersRef","handleKeyDown","e","el","useThemeMode","systemDark","setSystemDark","mql","handler","ToolbarButton","icon","label","onClick","disabled","active","ariaKeyshortcuts","stateClass","renderToolbarItems","groups","dividerClass","group","gi","arr","React","item","ii","FilePreviewToolbar","toolGroups","showDownload","showCloseButton","actionGroups","motion","RendererError","error","onRetry","AlertCircle","RotateCw","RendererErrorBoundary","props","__publicField","errorInfo","_b","_a","RendererLoading","FilePreviewRenderer","currentFile","customRenderer","customRendererContext","onError","reset","Suspense","NAV_HIDE_DELAY","NavArrows","containerRef","hasPrev","hasNext","onPrev","onNext","resetKey","visible","setVisible","timerRef","scheduleHide","useCallback","show","prev","Fragment","ChevronLeft","ChevronRight","ImageRenderer","lazy","PdfRenderer","DocxRenderer","XlsxRenderer","PptxRenderer","MsgRenderer","EpubRenderer","MobiRenderer","VideoRenderer","AudioRenderer","MarkdownRenderer","JsonRenderer","CsvRenderer","XmlRenderer","SubtitleRenderer","ZipRenderer","TextRenderer","FontRenderer","BUILTIN_RENDERERS","MAX_ZIP_NESTING_DEPTH","FilePreviewContent","FilePreviewContentInner","files","customRenderers","zipNestingDepth","userMessages","headless","onCustomEvent","_requestInit","_requestHandler","_shouldFetchAsBlob","normalizedFiles","normalizeFiles","resolvedUrl","renderer","getFileType","resolvedTheme","contentRef","rendererInstanceRef","rendererToolbarGroups","setRendererToolbarGroups","cleanupRef","setupRenderer","initialGroups","unsubscribe","interval","rendererRef","emitCustom","name","payload","customCtx","handleDownload","downloadFileWithFetcher","rendererConfig","RendererComponent","rendererProps","FilePreviewModal","isOpen","originalOverflow","originalPaddingRight","scrollbarWidth","modalContent","AnimatePresence","createPortal","FilePreviewEmbed","width","height","className","style","configurePdfjs","options","configurePdfWorker","pdfjsLib","VERSION","packageJson"],"mappings":"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"}
|