@eternalheart/vue-file-preview 1.3.11 → 1.3.13

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.
Files changed (229) hide show
  1. package/README.md +27 -0
  2. package/README.zh-CN.md +27 -0
  3. package/lib/FilePreviewContent.vue.d.ts.map +1 -1
  4. package/lib/chunks/{index-DLPnWmJm.mjs → index-B2lqsdp7.mjs} +2 -2
  5. package/lib/chunks/{index-DLPnWmJm.mjs.map → index-B2lqsdp7.mjs.map} +1 -1
  6. package/lib/chunks/{index-hRgOoqVw.mjs → index-BHi1WRQZ.mjs} +2 -2
  7. package/lib/chunks/{index-hRgOoqVw.mjs.map → index-BHi1WRQZ.mjs.map} +1 -1
  8. package/lib/chunks/{index-BHPmd4HF.mjs → index-BTW1xwB9.mjs} +2 -2
  9. package/lib/chunks/{index-BHPmd4HF.mjs.map → index-BTW1xwB9.mjs.map} +1 -1
  10. package/lib/chunks/{index-C0vSFXmh.mjs → index-BvegaxQF.mjs} +2 -2
  11. package/lib/chunks/{index-C0vSFXmh.mjs.map → index-BvegaxQF.mjs.map} +1 -1
  12. package/lib/chunks/{index-C65zV1vs.mjs → index-CYt6tpQC.mjs} +2 -2
  13. package/lib/chunks/{index-C65zV1vs.mjs.map → index-CYt6tpQC.mjs.map} +1 -1
  14. package/lib/chunks/{index-t1Plo3ud.mjs → index-Cjnw238n.mjs} +2 -2
  15. package/lib/chunks/{index-t1Plo3ud.mjs.map → index-Cjnw238n.mjs.map} +1 -1
  16. package/lib/chunks/{index-BT-U9HYI.mjs → index-Ctd0JQ6K.mjs} +2 -2
  17. package/lib/chunks/{index-BT-U9HYI.mjs.map → index-Ctd0JQ6K.mjs.map} +1 -1
  18. package/lib/chunks/index-CyrFxdIJ.mjs +318 -0
  19. package/lib/chunks/index-CyrFxdIJ.mjs.map +1 -0
  20. package/lib/chunks/{index-Cu1up6RM.mjs → index-DBw8tvyb.mjs} +2 -2
  21. package/lib/chunks/{index-Cu1up6RM.mjs.map → index-DBw8tvyb.mjs.map} +1 -1
  22. package/lib/chunks/{index-BKu5DkdG.mjs → index-DEoR7aDN.mjs} +2 -2
  23. package/lib/chunks/{index-BKu5DkdG.mjs.map → index-DEoR7aDN.mjs.map} +1 -1
  24. package/lib/chunks/{index-CMgtGmRN.mjs → index-DIe0vHlt.mjs} +9 -9
  25. package/lib/chunks/{index-CMgtGmRN.mjs.map → index-DIe0vHlt.mjs.map} +1 -1
  26. package/lib/chunks/index-DT9dPz8I.mjs +279 -0
  27. package/lib/chunks/index-DT9dPz8I.mjs.map +1 -0
  28. package/lib/chunks/{index-B9RAbllH.mjs → index-DTtHrdBl.mjs} +6 -6
  29. package/lib/chunks/{index-B9RAbllH.mjs.map → index-DTtHrdBl.mjs.map} +1 -1
  30. package/lib/chunks/{index-Dln8hyPZ.mjs → index-DX_NBPzS.mjs} +2 -2
  31. package/lib/chunks/{index-Dln8hyPZ.mjs.map → index-DX_NBPzS.mjs.map} +1 -1
  32. package/lib/chunks/{index-BA-SUKkf.mjs → index-Dw1U4YqT.mjs} +2 -2
  33. package/lib/chunks/{index-BA-SUKkf.mjs.map → index-Dw1U4YqT.mjs.map} +1 -1
  34. package/lib/chunks/{index-DNFQFaF3.mjs → index-DyipSoKh.mjs} +2 -2
  35. package/lib/chunks/{index-DNFQFaF3.mjs.map → index-DyipSoKh.mjs.map} +1 -1
  36. package/lib/chunks/{index-B3-ezDVJ.mjs → index-GGGDPwxX.mjs} +2 -2
  37. package/lib/chunks/{index-B3-ezDVJ.mjs.map → index-GGGDPwxX.mjs.map} +1 -1
  38. package/lib/chunks/{index-CQFN4h-t.mjs → index-Oxwizt6-.mjs} +609 -581
  39. package/lib/chunks/index-Oxwizt6-.mjs.map +1 -0
  40. package/lib/chunks/{index-CY2vJrBJ.mjs → index-Zwl5J-Uw.mjs} +2 -2
  41. package/lib/chunks/{index-CY2vJrBJ.mjs.map → index-Zwl5J-Uw.mjs.map} +1 -1
  42. package/lib/components/NavArrows.vue.d.ts +17 -0
  43. package/lib/components/NavArrows.vue.d.ts.map +1 -0
  44. package/lib/components/ResizableSplit.vue.d.ts +17 -2
  45. package/lib/components/ResizableSplit.vue.d.ts.map +1 -1
  46. package/lib/index.cjs +32 -32
  47. package/lib/index.cjs.map +1 -1
  48. package/lib/index.css +1 -1
  49. package/lib/index.mjs +1 -1
  50. package/lib/renderers/Image/index.vue.d.ts.map +1 -1
  51. package/lib/renderers/Text/index.vue.d.ts.map +1 -1
  52. package/lib/renderers/Xml/index.vue.d.ts.map +1 -1
  53. package/lib/renderers/Zip/index.vue.d.ts.map +1 -1
  54. package/package.json +1 -1
  55. package/lib/chunks/index-CQFN4h-t.mjs.map +0 -1
  56. package/lib/chunks/index-ijv9F2cZ.mjs +0 -280
  57. package/lib/chunks/index-ijv9F2cZ.mjs.map +0 -1
  58. package/lib/chunks/index-y7gaKu36.mjs +0 -234
  59. package/lib/chunks/index-y7gaKu36.mjs.map +0 -1
  60. package/lib/pdfjs/cmaps/78-EUC-H.bcmap +0 -0
  61. package/lib/pdfjs/cmaps/78-EUC-V.bcmap +0 -0
  62. package/lib/pdfjs/cmaps/78-H.bcmap +0 -0
  63. package/lib/pdfjs/cmaps/78-RKSJ-H.bcmap +0 -0
  64. package/lib/pdfjs/cmaps/78-RKSJ-V.bcmap +0 -0
  65. package/lib/pdfjs/cmaps/78-V.bcmap +0 -0
  66. package/lib/pdfjs/cmaps/78ms-RKSJ-H.bcmap +0 -0
  67. package/lib/pdfjs/cmaps/78ms-RKSJ-V.bcmap +0 -0
  68. package/lib/pdfjs/cmaps/83pv-RKSJ-H.bcmap +0 -0
  69. package/lib/pdfjs/cmaps/90ms-RKSJ-H.bcmap +0 -0
  70. package/lib/pdfjs/cmaps/90ms-RKSJ-V.bcmap +0 -0
  71. package/lib/pdfjs/cmaps/90msp-RKSJ-H.bcmap +0 -0
  72. package/lib/pdfjs/cmaps/90msp-RKSJ-V.bcmap +0 -0
  73. package/lib/pdfjs/cmaps/90pv-RKSJ-H.bcmap +0 -0
  74. package/lib/pdfjs/cmaps/90pv-RKSJ-V.bcmap +0 -0
  75. package/lib/pdfjs/cmaps/Add-H.bcmap +0 -0
  76. package/lib/pdfjs/cmaps/Add-RKSJ-H.bcmap +0 -0
  77. package/lib/pdfjs/cmaps/Add-RKSJ-V.bcmap +0 -0
  78. package/lib/pdfjs/cmaps/Add-V.bcmap +0 -0
  79. package/lib/pdfjs/cmaps/Adobe-CNS1-0.bcmap +0 -0
  80. package/lib/pdfjs/cmaps/Adobe-CNS1-1.bcmap +0 -0
  81. package/lib/pdfjs/cmaps/Adobe-CNS1-2.bcmap +0 -0
  82. package/lib/pdfjs/cmaps/Adobe-CNS1-3.bcmap +0 -0
  83. package/lib/pdfjs/cmaps/Adobe-CNS1-4.bcmap +0 -0
  84. package/lib/pdfjs/cmaps/Adobe-CNS1-5.bcmap +0 -0
  85. package/lib/pdfjs/cmaps/Adobe-CNS1-6.bcmap +0 -0
  86. package/lib/pdfjs/cmaps/Adobe-CNS1-UCS2.bcmap +0 -0
  87. package/lib/pdfjs/cmaps/Adobe-GB1-0.bcmap +0 -0
  88. package/lib/pdfjs/cmaps/Adobe-GB1-1.bcmap +0 -0
  89. package/lib/pdfjs/cmaps/Adobe-GB1-2.bcmap +0 -0
  90. package/lib/pdfjs/cmaps/Adobe-GB1-3.bcmap +0 -0
  91. package/lib/pdfjs/cmaps/Adobe-GB1-4.bcmap +0 -0
  92. package/lib/pdfjs/cmaps/Adobe-GB1-5.bcmap +0 -0
  93. package/lib/pdfjs/cmaps/Adobe-GB1-UCS2.bcmap +0 -0
  94. package/lib/pdfjs/cmaps/Adobe-Japan1-0.bcmap +0 -0
  95. package/lib/pdfjs/cmaps/Adobe-Japan1-1.bcmap +0 -0
  96. package/lib/pdfjs/cmaps/Adobe-Japan1-2.bcmap +0 -0
  97. package/lib/pdfjs/cmaps/Adobe-Japan1-3.bcmap +0 -0
  98. package/lib/pdfjs/cmaps/Adobe-Japan1-4.bcmap +0 -0
  99. package/lib/pdfjs/cmaps/Adobe-Japan1-5.bcmap +0 -0
  100. package/lib/pdfjs/cmaps/Adobe-Japan1-6.bcmap +0 -0
  101. package/lib/pdfjs/cmaps/Adobe-Japan1-UCS2.bcmap +0 -0
  102. package/lib/pdfjs/cmaps/Adobe-Korea1-0.bcmap +0 -0
  103. package/lib/pdfjs/cmaps/Adobe-Korea1-1.bcmap +0 -0
  104. package/lib/pdfjs/cmaps/Adobe-Korea1-2.bcmap +0 -0
  105. package/lib/pdfjs/cmaps/Adobe-Korea1-UCS2.bcmap +0 -0
  106. package/lib/pdfjs/cmaps/B5-H.bcmap +0 -0
  107. package/lib/pdfjs/cmaps/B5-V.bcmap +0 -0
  108. package/lib/pdfjs/cmaps/B5pc-H.bcmap +0 -0
  109. package/lib/pdfjs/cmaps/B5pc-V.bcmap +0 -0
  110. package/lib/pdfjs/cmaps/CNS-EUC-H.bcmap +0 -0
  111. package/lib/pdfjs/cmaps/CNS-EUC-V.bcmap +0 -0
  112. package/lib/pdfjs/cmaps/CNS1-H.bcmap +0 -0
  113. package/lib/pdfjs/cmaps/CNS1-V.bcmap +0 -0
  114. package/lib/pdfjs/cmaps/CNS2-H.bcmap +0 -0
  115. package/lib/pdfjs/cmaps/CNS2-V.bcmap +0 -3
  116. package/lib/pdfjs/cmaps/ETHK-B5-H.bcmap +0 -0
  117. package/lib/pdfjs/cmaps/ETHK-B5-V.bcmap +0 -0
  118. package/lib/pdfjs/cmaps/ETen-B5-H.bcmap +0 -0
  119. package/lib/pdfjs/cmaps/ETen-B5-V.bcmap +0 -0
  120. package/lib/pdfjs/cmaps/ETenms-B5-H.bcmap +0 -3
  121. package/lib/pdfjs/cmaps/ETenms-B5-V.bcmap +0 -0
  122. package/lib/pdfjs/cmaps/EUC-H.bcmap +0 -0
  123. package/lib/pdfjs/cmaps/EUC-V.bcmap +0 -0
  124. package/lib/pdfjs/cmaps/Ext-H.bcmap +0 -0
  125. package/lib/pdfjs/cmaps/Ext-RKSJ-H.bcmap +0 -0
  126. package/lib/pdfjs/cmaps/Ext-RKSJ-V.bcmap +0 -0
  127. package/lib/pdfjs/cmaps/Ext-V.bcmap +0 -0
  128. package/lib/pdfjs/cmaps/GB-EUC-H.bcmap +0 -0
  129. package/lib/pdfjs/cmaps/GB-EUC-V.bcmap +0 -0
  130. package/lib/pdfjs/cmaps/GB-H.bcmap +0 -4
  131. package/lib/pdfjs/cmaps/GB-V.bcmap +0 -0
  132. package/lib/pdfjs/cmaps/GBK-EUC-H.bcmap +0 -0
  133. package/lib/pdfjs/cmaps/GBK-EUC-V.bcmap +0 -0
  134. package/lib/pdfjs/cmaps/GBK2K-H.bcmap +0 -0
  135. package/lib/pdfjs/cmaps/GBK2K-V.bcmap +0 -0
  136. package/lib/pdfjs/cmaps/GBKp-EUC-H.bcmap +0 -0
  137. package/lib/pdfjs/cmaps/GBKp-EUC-V.bcmap +0 -0
  138. package/lib/pdfjs/cmaps/GBT-EUC-H.bcmap +0 -0
  139. package/lib/pdfjs/cmaps/GBT-EUC-V.bcmap +0 -0
  140. package/lib/pdfjs/cmaps/GBT-H.bcmap +0 -0
  141. package/lib/pdfjs/cmaps/GBT-V.bcmap +0 -0
  142. package/lib/pdfjs/cmaps/GBTpc-EUC-H.bcmap +0 -0
  143. package/lib/pdfjs/cmaps/GBTpc-EUC-V.bcmap +0 -0
  144. package/lib/pdfjs/cmaps/GBpc-EUC-H.bcmap +0 -0
  145. package/lib/pdfjs/cmaps/GBpc-EUC-V.bcmap +0 -0
  146. package/lib/pdfjs/cmaps/H.bcmap +0 -0
  147. package/lib/pdfjs/cmaps/HKdla-B5-H.bcmap +0 -0
  148. package/lib/pdfjs/cmaps/HKdla-B5-V.bcmap +0 -0
  149. package/lib/pdfjs/cmaps/HKdlb-B5-H.bcmap +0 -0
  150. package/lib/pdfjs/cmaps/HKdlb-B5-V.bcmap +0 -0
  151. package/lib/pdfjs/cmaps/HKgccs-B5-H.bcmap +0 -0
  152. package/lib/pdfjs/cmaps/HKgccs-B5-V.bcmap +0 -0
  153. package/lib/pdfjs/cmaps/HKm314-B5-H.bcmap +0 -0
  154. package/lib/pdfjs/cmaps/HKm314-B5-V.bcmap +0 -0
  155. package/lib/pdfjs/cmaps/HKm471-B5-H.bcmap +0 -0
  156. package/lib/pdfjs/cmaps/HKm471-B5-V.bcmap +0 -0
  157. package/lib/pdfjs/cmaps/HKscs-B5-H.bcmap +0 -0
  158. package/lib/pdfjs/cmaps/HKscs-B5-V.bcmap +0 -0
  159. package/lib/pdfjs/cmaps/Hankaku.bcmap +0 -0
  160. package/lib/pdfjs/cmaps/Hiragana.bcmap +0 -0
  161. package/lib/pdfjs/cmaps/KSC-EUC-H.bcmap +0 -0
  162. package/lib/pdfjs/cmaps/KSC-EUC-V.bcmap +0 -0
  163. package/lib/pdfjs/cmaps/KSC-H.bcmap +0 -0
  164. package/lib/pdfjs/cmaps/KSC-Johab-H.bcmap +0 -0
  165. package/lib/pdfjs/cmaps/KSC-Johab-V.bcmap +0 -0
  166. package/lib/pdfjs/cmaps/KSC-V.bcmap +0 -0
  167. package/lib/pdfjs/cmaps/KSCms-UHC-H.bcmap +0 -0
  168. package/lib/pdfjs/cmaps/KSCms-UHC-HW-H.bcmap +0 -0
  169. package/lib/pdfjs/cmaps/KSCms-UHC-HW-V.bcmap +0 -0
  170. package/lib/pdfjs/cmaps/KSCms-UHC-V.bcmap +0 -0
  171. package/lib/pdfjs/cmaps/KSCpc-EUC-H.bcmap +0 -0
  172. package/lib/pdfjs/cmaps/KSCpc-EUC-V.bcmap +0 -0
  173. package/lib/pdfjs/cmaps/Katakana.bcmap +0 -0
  174. package/lib/pdfjs/cmaps/LICENSE +0 -36
  175. package/lib/pdfjs/cmaps/NWP-H.bcmap +0 -0
  176. package/lib/pdfjs/cmaps/NWP-V.bcmap +0 -0
  177. package/lib/pdfjs/cmaps/RKSJ-H.bcmap +0 -0
  178. package/lib/pdfjs/cmaps/RKSJ-V.bcmap +0 -0
  179. package/lib/pdfjs/cmaps/Roman.bcmap +0 -0
  180. package/lib/pdfjs/cmaps/UniCNS-UCS2-H.bcmap +0 -0
  181. package/lib/pdfjs/cmaps/UniCNS-UCS2-V.bcmap +0 -0
  182. package/lib/pdfjs/cmaps/UniCNS-UTF16-H.bcmap +0 -0
  183. package/lib/pdfjs/cmaps/UniCNS-UTF16-V.bcmap +0 -0
  184. package/lib/pdfjs/cmaps/UniCNS-UTF32-H.bcmap +0 -0
  185. package/lib/pdfjs/cmaps/UniCNS-UTF32-V.bcmap +0 -0
  186. package/lib/pdfjs/cmaps/UniCNS-UTF8-H.bcmap +0 -0
  187. package/lib/pdfjs/cmaps/UniCNS-UTF8-V.bcmap +0 -0
  188. package/lib/pdfjs/cmaps/UniGB-UCS2-H.bcmap +0 -0
  189. package/lib/pdfjs/cmaps/UniGB-UCS2-V.bcmap +0 -0
  190. package/lib/pdfjs/cmaps/UniGB-UTF16-H.bcmap +0 -0
  191. package/lib/pdfjs/cmaps/UniGB-UTF16-V.bcmap +0 -0
  192. package/lib/pdfjs/cmaps/UniGB-UTF32-H.bcmap +0 -0
  193. package/lib/pdfjs/cmaps/UniGB-UTF32-V.bcmap +0 -0
  194. package/lib/pdfjs/cmaps/UniGB-UTF8-H.bcmap +0 -0
  195. package/lib/pdfjs/cmaps/UniGB-UTF8-V.bcmap +0 -0
  196. package/lib/pdfjs/cmaps/UniJIS-UCS2-H.bcmap +0 -0
  197. package/lib/pdfjs/cmaps/UniJIS-UCS2-HW-H.bcmap +0 -0
  198. package/lib/pdfjs/cmaps/UniJIS-UCS2-HW-V.bcmap +0 -0
  199. package/lib/pdfjs/cmaps/UniJIS-UCS2-V.bcmap +0 -0
  200. package/lib/pdfjs/cmaps/UniJIS-UTF16-H.bcmap +0 -0
  201. package/lib/pdfjs/cmaps/UniJIS-UTF16-V.bcmap +0 -0
  202. package/lib/pdfjs/cmaps/UniJIS-UTF32-H.bcmap +0 -0
  203. package/lib/pdfjs/cmaps/UniJIS-UTF32-V.bcmap +0 -0
  204. package/lib/pdfjs/cmaps/UniJIS-UTF8-H.bcmap +0 -0
  205. package/lib/pdfjs/cmaps/UniJIS-UTF8-V.bcmap +0 -0
  206. package/lib/pdfjs/cmaps/UniJIS2004-UTF16-H.bcmap +0 -0
  207. package/lib/pdfjs/cmaps/UniJIS2004-UTF16-V.bcmap +0 -0
  208. package/lib/pdfjs/cmaps/UniJIS2004-UTF32-H.bcmap +0 -0
  209. package/lib/pdfjs/cmaps/UniJIS2004-UTF32-V.bcmap +0 -0
  210. package/lib/pdfjs/cmaps/UniJIS2004-UTF8-H.bcmap +0 -0
  211. package/lib/pdfjs/cmaps/UniJIS2004-UTF8-V.bcmap +0 -0
  212. package/lib/pdfjs/cmaps/UniJISPro-UCS2-HW-V.bcmap +0 -0
  213. package/lib/pdfjs/cmaps/UniJISPro-UCS2-V.bcmap +0 -0
  214. package/lib/pdfjs/cmaps/UniJISPro-UTF8-V.bcmap +0 -0
  215. package/lib/pdfjs/cmaps/UniJISX0213-UTF32-H.bcmap +0 -0
  216. package/lib/pdfjs/cmaps/UniJISX0213-UTF32-V.bcmap +0 -0
  217. package/lib/pdfjs/cmaps/UniJISX02132004-UTF32-H.bcmap +0 -0
  218. package/lib/pdfjs/cmaps/UniJISX02132004-UTF32-V.bcmap +0 -0
  219. package/lib/pdfjs/cmaps/UniKS-UCS2-H.bcmap +0 -0
  220. package/lib/pdfjs/cmaps/UniKS-UCS2-V.bcmap +0 -0
  221. package/lib/pdfjs/cmaps/UniKS-UTF16-H.bcmap +0 -0
  222. package/lib/pdfjs/cmaps/UniKS-UTF16-V.bcmap +0 -0
  223. package/lib/pdfjs/cmaps/UniKS-UTF32-H.bcmap +0 -0
  224. package/lib/pdfjs/cmaps/UniKS-UTF32-V.bcmap +0 -0
  225. package/lib/pdfjs/cmaps/UniKS-UTF8-H.bcmap +0 -0
  226. package/lib/pdfjs/cmaps/UniKS-UTF8-V.bcmap +0 -0
  227. package/lib/pdfjs/cmaps/V.bcmap +0 -0
  228. package/lib/pdfjs/cmaps/WP-Symbol.bcmap +0 -0
  229. package/lib/pdfjs/pdf.worker.min.mjs +0 -21
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-Oxwizt6-.mjs","sources":["../../../file-preview-core/lib/index.mjs","../../src/i18n/localeKey.ts","../../src/composables/useTranslator.ts","../../src/composables/useResolvedTheme.ts","../../src/composables/useRequest.ts","../../src/renderers/Image/toolbar.ts","../../src/renderers/Pdf/toolbar.ts","../../src/renderers/Epub/toolbar.ts","../../src/renderers/Mobi/toolbar.ts","../../src/renderers/Zip/toolbar.ts","../../src/renderers/Text/toolbar.ts","../../src/renderers/Markdown/toolbar.ts","../../src/renderers/RendererLoading.vue","../../src/renderers/lazy.ts","../../src/renderers/Unsupported/index.vue","../../src/components/NavArrows.vue","../../src/FilePreviewContent.vue","../../src/composables/useScrollLock.ts","../../src/FilePreviewModal.vue","../../src/FilePreviewEmbed.vue","../../src/index.ts"],"sourcesContent":["import I from \"jszip\";\nconst vt = [\n \"image\",\n \"pdf\",\n \"docx\",\n \"xlsx\",\n \"pptx\",\n \"msg\",\n \"epub\",\n \"mobi\",\n \"video\",\n \"audio\",\n \"markdown\",\n \"json\",\n \"csv\",\n \"xml\",\n \"subtitle\",\n \"zip\",\n \"text\",\n \"font\"\n];\nfunction U(e) {\n try {\n const n = new URL(e).pathname.split(\"/\").pop() || \"file\";\n return decodeURIComponent(n);\n } catch {\n const t = e.split(\"/\").pop() || \"file\";\n return decodeURIComponent(t);\n }\n}\nfunction M(e) {\n var n;\n const t = ((n = e.split(\".\").pop()) == null ? void 0 : n.toLowerCase()) || \"\";\n return {\n // 图片\n jpg: \"image/jpeg\",\n jpeg: \"image/jpeg\",\n png: \"image/png\",\n gif: \"image/gif\",\n webp: \"image/webp\",\n svg: \"image/svg+xml\",\n bmp: \"image/bmp\",\n ico: \"image/x-icon\",\n // 视频\n mp4: \"video/mp4\",\n webm: \"video/webm\",\n ogg: \"video/ogg\",\n ogv: \"video/ogg\",\n mov: \"video/quicktime\",\n avi: \"video/x-msvideo\",\n mkv: \"video/x-matroska\",\n m4v: \"video/x-m4v\",\n \"3gp\": \"video/3gpp\",\n flv: \"video/x-flv\",\n // 音频\n mp3: \"audio/mpeg\",\n wav: \"audio/wav\",\n m4a: \"audio/mp4\",\n aac: \"audio/aac\",\n flac: \"audio/flac\",\n // 文档\n pdf: \"application/pdf\",\n docx: \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\",\n xlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\n pptx: \"application/vnd.openxmlformats-officedocument.presentationml.presentation\",\n ppt: \"application/vnd.ms-powerpoint\",\n msg: \"application/vnd.ms-outlook\",\n mobi: \"application/x-mobipocket-ebook\",\n azw: \"application/vnd.amazon.ebook\",\n azw3: \"application/vnd.amazon.ebook\",\n kf8: \"application/vnd.amazon.ebook\",\n // 文本\n txt: \"text/plain\",\n md: \"text/markdown\",\n markdown: \"text/markdown\",\n json: \"application/json\",\n xml: \"application/xml\",\n html: \"text/html\",\n css: \"text/css\",\n js: \"text/javascript\",\n ts: \"text/typescript\",\n jsx: \"text/javascript\",\n tsx: \"text/typescript\",\n py: \"text/x-python\",\n java: \"text/x-java\",\n cpp: \"text/x-c++src\",\n c: \"text/x-csrc\",\n cs: \"text/x-csharp\",\n php: \"text/x-php\",\n rb: \"text/x-ruby\",\n go: \"text/x-go\",\n rs: \"text/x-rust\",\n yaml: \"text/yaml\",\n yml: \"text/yaml\",\n toml: \"text/toml\",\n ini: \"text/plain\",\n env: \"text/plain\",\n diff: \"text/x-diff\",\n patch: \"text/x-diff\",\n log: \"text/plain\",\n csv: \"text/csv\",\n tsv: \"text/tab-separated-values\",\n srt: \"application/x-subrip\",\n vtt: \"text/vtt\",\n zip: \"application/zip\"\n }[t] || \"application/octet-stream\";\n}\nfunction B(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) => B(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 \"py\",\n \"java\",\n \"cpp\",\n \"c\",\n \"h\",\n \"cs\",\n \"php\",\n \"rb\",\n \"go\",\n \"mod\",\n \"rs\",\n \"swift\",\n \"kt\",\n \"lua\",\n \"vim\",\n \"html\",\n \"css\",\n \"scss\",\n \"sass\",\n \"less\",\n \"yaml\",\n \"yml\",\n \"toml\",\n \"ini\",\n \"conf\",\n \"env\",\n \"diff\",\n \"patch\",\n \"sh\",\n \"bash\",\n \"zsh\",\n \"sql\"\n ];\n return o.startsWith(\"text/\") || n.includes(t) ? \"text\" : \"unsupported\";\n}\nfunction yt(e) {\n var n;\n const t = ((n = e.split(\".\").pop()) == null ? void 0 : n.toLowerCase()) || \"\";\n return {\n js: \"javascript\",\n jsx: \"jsx\",\n ts: \"typescript\",\n tsx: \"tsx\",\n py: \"python\",\n java: \"java\",\n cpp: \"cpp\",\n c: \"c\",\n cs: \"csharp\",\n php: \"php\",\n rb: \"ruby\",\n go: \"go\",\n mod: \"go\",\n rs: \"rust\",\n swift: \"swift\",\n kt: \"kotlin\",\n lua: \"lua\",\n vim: \"vim\",\n scala: \"scala\",\n sh: \"bash\",\n bash: \"bash\",\n zsh: \"bash\",\n json: \"json\",\n 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 }[t] || \"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 W = $;\nasync function Et(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 zt(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 Lt(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 Tt(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 T(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 Nt(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 N = /(\\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 P(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 (N.test(n[i]))\n l = n[i], i++;\n else if (s = n[i].trim() || void 0, i++, i < n.length && N.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 = T(c[1]), u = T(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 E(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(E(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(E(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 = E(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 j(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 = j(b.Start || \"\"), v = j(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(/&lt;/g, \"<\").replace(/&gt;/g, \">\").replace(/&quot;/g, '\"').replace(/&apos;/g, \"'\").replace(/&nbsp;/g, \" \").replace(/&amp;/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 Pt(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 P(e, \"vtt\");\n case \"srt\":\n default:\n return P(e, \"srt\");\n }\n}\nasync function jt(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 W(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 z(t);\n }\n}\nfunction z(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 = z(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 = z(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 Bt(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 // ─────── toolbar ───────\n \"toolbar.zoom_in\": \"放大\",\n \"toolbar.zoom_out\": \"缩小\",\n \"toolbar.rotate_left\": \"向左旋转\",\n \"toolbar.rotate_right\": \"向右旋转\",\n \"toolbar.reset\": \"复原\",\n \"toolbar.fit_to_window\": \"适应窗口\",\n \"toolbar.original_size\": \"原始尺寸\",\n \"toolbar.toc\": \"目录\",\n \"toolbar.prev_page\": \"上一页\",\n \"toolbar.next_page\": \"下一页\",\n \"toolbar.full_width\": \"全屏宽度\",\n \"toolbar.normal_width\": \"正常宽度\",\n \"toolbar.wrap_on\": \"自动换行\",\n \"toolbar.wrap_off\": \"不换行\",\n \"toolbar.source\": \"源码\",\n \"toolbar.preview\": \"预览\",\n // ─────── image ───────\n \"image.load_failed\": \"图片加载失败\",\n \"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 // ─────── toolbar ───────\n \"toolbar.zoom_in\": \"Zoom in\",\n \"toolbar.zoom_out\": \"Zoom out\",\n \"toolbar.rotate_left\": \"Rotate left\",\n \"toolbar.rotate_right\": \"Rotate right\",\n \"toolbar.reset\": \"Reset\",\n \"toolbar.fit_to_window\": \"Fit to window\",\n \"toolbar.original_size\": \"Original size\",\n \"toolbar.toc\": \"Table of contents\",\n \"toolbar.prev_page\": \"Previous page\",\n \"toolbar.next_page\": \"Next page\",\n \"toolbar.full_width\": \"Full width\",\n \"toolbar.normal_width\": \"Normal width\",\n \"toolbar.wrap_on\": \"Word wrap\",\n \"toolbar.wrap_off\": \"No wrap\",\n \"toolbar.source\": \"Source\",\n \"toolbar.preview\": \"Preview\",\n // ─────── image ───────\n \"image.load_failed\": \"Failed to load image\",\n \"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 Wt(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 L = /* @__PURE__ */ new Map(), S = /* @__PURE__ */ new Map();\nfunction Zt(e, t) {\n L.set(e, t);\n}\nfunction Ht(e) {\n return L.get(e) || null;\n}\nfunction Ot(e) {\n return L.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 Bt as configurePdfWorker,\n Ut as convertCsvToSpreadsheetData,\n It as convertWorkbookToSpreadsheetData,\n zt as createFetcher,\n Wt as createTranslator,\n $ as decodeText,\n W as decodeUtf8,\n Gt as detectImageFormat,\n Tt as downloadFileWithFetcher,\n Lt as fetchAsBlobUrl,\n Et as fetchTextUtf8,\n Ct as formatFileSize,\n Nt 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 jt as loadZip,\n B as normalizeFile,\n wt as normalizeFiles,\n St as parseCsv,\n Pt as parseSubtitle,\n Rt as readZipEntryBlob,\n $t as readZipEntryText,\n Zt as registerLoader\n};\n//# sourceMappingURL=index.mjs.map\n","import type { InjectionKey, Ref, ComputedRef } from 'vue';\nimport type { Locale, Translator } from '@eternalheart/file-preview-core';\n\nexport interface LocaleInjection {\n locale: Ref<Locale>;\n t: ComputedRef<Translator>;\n}\n\nexport const LOCALE_KEY: InjectionKey<LocaleInjection> = Symbol('file-preview-locale');\n","import { provide, inject, computed, unref, type Ref, type MaybeRef, type ComputedRef } from 'vue';\nimport { createTranslator, type Locale, type Messages, type Translator } from '@eternalheart/file-preview-core';\nimport { LOCALE_KEY, type LocaleInjection } from '../i18n/localeKey';\n\n/**\n * 在主组件中调用,向子树注入 locale context\n */\nexport function provideLocale(\n locale: MaybeRef<Locale | undefined>,\n messages?: MaybeRef<Partial<Record<Locale, Partial<Messages>>> | undefined>,\n): void {\n const localeRef = computed<Locale>(() => unref(locale) ?? 'zh-CN');\n const t = computed<Translator>(() =>\n createTranslator({ locale: localeRef.value, messages: unref(messages) }),\n );\n provide(LOCALE_KEY, { locale: localeRef as Ref<Locale>, t });\n}\n\n// 兜底 translator(模块级单例)\nlet fallbackT: Translator | null = null;\nfunction getFallback(): Translator {\n if (!fallbackT) fallbackT = createTranslator({ locale: 'zh-CN' });\n return fallbackT;\n}\n\n/**\n * 获取翻译函数。在 provider 外使用时自动 fallback 到 zh-CN。\n */\nexport function useTranslator(): { locale: Ref<Locale>; t: ComputedRef<Translator> } {\n const injected = inject<LocaleInjection | null>(LOCALE_KEY, null);\n if (injected) return injected;\n // fallback\n const locale = computed<Locale>(() => 'zh-CN');\n const t = computed<Translator>(() => getFallback());\n return { locale: locale as Ref<Locale>, t };\n}\n","import { provide, inject, computed, unref, type InjectionKey, type MaybeRef, type ComputedRef } from 'vue';\n\nexport type ResolvedTheme = 'dark' | 'light';\n\nconst THEME_KEY: InjectionKey<ComputedRef<ResolvedTheme>> = Symbol('vfp-resolved-theme');\n\n/**\n * 在主组件中调用,向子树注入已解析的主题('dark' | 'light')\n */\nexport function provideResolvedTheme(theme: MaybeRef<ResolvedTheme>): void {\n const themeRef = computed<ResolvedTheme>(() => unref(theme));\n provide(THEME_KEY, themeRef);\n}\n\n/**\n * 获取已解析的主题('dark' | 'light')。\n * Provider 之外默认 'dark'。\n *\n * renderer 需要切第三方库的 theme 选项(如 shiki 的 theme)时使用;\n * 不要用它做 className 分支 —— class 由 CSS 变量通过根容器 [data-theme] 自动切换。\n */\nexport function useResolvedTheme(): ComputedRef<ResolvedTheme> {\n const injected = inject(THEME_KEY, null);\n if (injected) return injected;\n return computed<ResolvedTheme>(() => 'dark');\n}\n","import { inject, provide, computed, ref, watch, onBeforeUnmount, type ComputedRef, type Ref } from 'vue';\nimport type {\n Fetcher,\n PreviewFile,\n RequestHandler,\n RequestInitFactory,\n ShouldFetchAsBlob,\n} from '@eternalheart/file-preview-core';\nimport { createFetcher, fetchAsBlobUrl } from '@eternalheart/file-preview-core';\n\nexport interface RequestContextValue {\n fetcher: Fetcher;\n shouldFetchAsBlob?: ShouldFetchAsBlob;\n}\n\nconst REQUEST_KEY = Symbol('file-preview:request');\n\nexport function provideRequestContext(\n options: {\n requestInit?: RequestInitFactory;\n requestHandler?: RequestHandler;\n shouldFetchAsBlob?: ShouldFetchAsBlob;\n } | (() => {\n requestInit?: RequestInitFactory;\n requestHandler?: RequestHandler;\n shouldFetchAsBlob?: ShouldFetchAsBlob;\n }),\n) {\n const value = computed<RequestContextValue>(() => {\n const opts = typeof options === 'function' ? options() : options;\n return {\n fetcher: createFetcher({\n requestInit: opts.requestInit,\n requestHandler: opts.requestHandler,\n }),\n shouldFetchAsBlob: opts.shouldFetchAsBlob,\n };\n });\n provide(REQUEST_KEY, value);\n return value;\n}\n\nfunction defaultContext(): RequestContextValue {\n return { fetcher: (url, init) => fetch(url, init) };\n}\n\nexport function useRequestContext(): ComputedRef<RequestContextValue> {\n const injected = inject<ComputedRef<RequestContextValue> | undefined>(REQUEST_KEY, undefined);\n if (injected) return injected;\n return computed(() => defaultContext());\n}\n\nexport function useFetcher(): ComputedRef<Fetcher> {\n const ctx = useRequestContext();\n return computed(() => ctx.value.fetcher);\n}\n\n/**\n * 解析 file 的可消费 URL:\n * - 未配置 shouldFetchAsBlob 或返回 false:直接派生自 file.url(不入 ref,避免切换文件时残留旧值)\n * - 返回 true:用 fetcher 拉成 blob: URL,组件卸载或 file 变化时 revoke\n */\nexport function useResolvedUrl(file: Ref<PreviewFile | undefined>): ComputedRef<string> {\n const ctx = useRequestContext();\n const blobUrlRef = ref<string>('');\n let createdBlobUrl: string | null = null;\n\n const cleanup = () => {\n if (createdBlobUrl) {\n URL.revokeObjectURL(createdBlobUrl);\n createdBlobUrl = null;\n }\n };\n\n watch(\n () => {\n const f = file.value;\n const need = !!(f && ctx.value.shouldFetchAsBlob?.(f));\n return { f, need, fetcher: ctx.value.fetcher };\n },\n async ({ f, need, fetcher }, _old, onCleanup) => {\n if (!f || !need) {\n cleanup();\n blobUrlRef.value = '';\n return;\n }\n let cancelled = false;\n onCleanup(() => {\n cancelled = true;\n });\n blobUrlRef.value = '';\n try {\n const blobUrl = await fetchAsBlobUrl(f.url, fetcher);\n if (cancelled) {\n URL.revokeObjectURL(blobUrl);\n return;\n }\n cleanup();\n createdBlobUrl = blobUrl;\n blobUrlRef.value = blobUrl;\n } catch (err) {\n if (!cancelled) {\n console.error('[file-preview] resolve blob url failed:', err);\n blobUrlRef.value = f.url;\n }\n }\n },\n { immediate: true },\n );\n\n onBeforeUnmount(cleanup);\n\n // 同步派生:非 blob 模式始终直接返回 file.url,确保切换文件时不会残留上一帧的 URL\n return computed(() => {\n const f = file.value;\n if (!f) return '';\n const need = !!ctx.value.shouldFetchAsBlob?.(f);\n if (!need) return f.url;\n return blobUrlRef.value;\n });\n}\n","import { ZoomIn, ZoomOut, RotateCw, RotateCcw, Scan, RefreshCw } from 'lucide-vue-next';\nimport { h, type FunctionalComponent } from 'vue';\nimport type { ToolbarGroup } from '../toolbar.types';\nimport type { Translator } from '@eternalheart/file-preview-core';\n\nconst OriginalSizeIcon: FunctionalComponent = (_props, { attrs }) => {\n return h('svg', {\n xmlns: 'http://www.w3.org/2000/svg', viewBox: '0 0 24 24',\n fill: 'none', stroke: 'currentColor', 'stroke-width': '2',\n 'stroke-linecap': 'round', 'stroke-linejoin': 'round', ...attrs,\n }, [\n h('text', {\n x: '12', y: '17.5', 'text-anchor': 'middle',\n 'font-size': '20', 'font-weight': 'bold',\n fill: 'currentColor', stroke: 'none',\n }, '1:1'),\n ]);\n};\n\nexport interface ImageToolbarContext {\n zoom: number;\n onZoomIn: () => void;\n onZoomOut: () => void;\n onFitToWidth: () => void;\n onOriginalSize: () => void;\n onRotateLeft: () => void;\n onRotateRight: () => void;\n onReset: () => void;\n t: Translator;\n}\n\nexport function getImageToolbarGroups(ctx: ImageToolbarContext): ToolbarGroup[] {\n return [\n {\n items: [\n { type: 'button', icon: ZoomOut, tooltip: ctx.t('toolbar.zoom_out'), action: ctx.onZoomOut, disabled: ctx.zoom <= 0.01 },\n { type: 'text', content: `${Math.round(ctx.zoom * 100)}%`, minWidth: '3rem' },\n { type: 'button', icon: ZoomIn, tooltip: ctx.t('toolbar.zoom_in'), action: ctx.onZoomIn, disabled: ctx.zoom >= 10 },\n ],\n },\n {\n items: [\n { type: 'button', icon: Scan, tooltip: ctx.t('toolbar.fit_to_window'), action: ctx.onFitToWidth },\n { type: 'button', icon: OriginalSizeIcon, tooltip: ctx.t('toolbar.original_size'), action: ctx.onOriginalSize },\n ],\n },\n {\n items: [\n { type: 'button', icon: RotateCcw, tooltip: ctx.t('toolbar.rotate_left'), action: ctx.onRotateLeft },\n { type: 'button', icon: RotateCw, tooltip: ctx.t('toolbar.rotate_right'), action: ctx.onRotateRight },\n ],\n },\n {\n items: [\n { type: 'button', icon: RefreshCw, tooltip: ctx.t('toolbar.reset'), action: ctx.onReset },\n ],\n },\n ];\n}\n","import { ZoomIn, ZoomOut, RefreshCw } from 'lucide-vue-next';\nimport type { ToolbarGroup } from '../toolbar.types';\nimport type { Translator } from '@eternalheart/file-preview-core';\n\nexport interface PdfToolbarContext {\n zoom: number;\n onZoomIn: () => void;\n onZoomOut: () => void;\n onReset: () => void;\n t: Translator;\n}\n\nexport function getPdfToolbarGroups(ctx: PdfToolbarContext): ToolbarGroup[] {\n return [\n {\n items: [\n { type: 'button', icon: ZoomOut, tooltip: ctx.t('toolbar.zoom_out'), action: ctx.onZoomOut, disabled: ctx.zoom <= 0.01 },\n { type: 'text', content: `${Math.round(ctx.zoom * 100)}%`, minWidth: '3rem' },\n { type: 'button', icon: ZoomIn, tooltip: ctx.t('toolbar.zoom_in'), action: ctx.onZoomIn, disabled: ctx.zoom >= 10 },\n ],\n },\n {\n items: [\n { type: 'button', icon: RefreshCw, tooltip: ctx.t('toolbar.reset'), action: ctx.onReset },\n ],\n },\n ];\n}\n","import { ChevronLeft, ChevronRight, List, Maximize2, Minimize2 } from 'lucide-vue-next';\nimport type { ToolbarGroup } from '../toolbar.types';\nimport type { Translator } from '@eternalheart/file-preview-core';\n\nexport interface EpubToolbarContext {\n epubRef: { prevPage: () => void; nextPage: () => void; toggleFullWidth: () => void; toggleToc: () => void } | null;\n current: number;\n total: number;\n fullWidth: boolean;\n t: Translator;\n}\n\nexport function getEpubToolbarGroups(ctx: EpubToolbarContext): ToolbarGroup[] {\n return [\n {\n items: [\n { type: 'button', icon: List, tooltip: ctx.t('toolbar.toc'), action: () => ctx.epubRef?.toggleToc() },\n ],\n },\n {\n items: [\n { type: 'button', icon: ChevronLeft, tooltip: ctx.t('toolbar.prev_page'), action: () => ctx.epubRef?.prevPage() },\n { type: 'text', content: `${ctx.current} / ${ctx.total}`, minWidth: '4rem' },\n { type: 'button', icon: ChevronRight, tooltip: ctx.t('toolbar.next_page'), action: () => ctx.epubRef?.nextPage() },\n ],\n },\n {\n items: [\n {\n type: 'button',\n icon: ctx.fullWidth ? Minimize2 : Maximize2,\n tooltip: ctx.fullWidth ? ctx.t('toolbar.normal_width') : ctx.t('toolbar.full_width'),\n action: () => ctx.epubRef?.toggleFullWidth(),\n },\n ],\n },\n ];\n}\n","import type { ToolbarGroup } from '../toolbar.types';\nimport type { Translator } from '@eternalheart/file-preview-core';\nimport { ChevronLeft, ChevronRight, List, Maximize2, Minimize2 } from 'lucide-vue-next';\n\nexport interface MobiToolbarContext {\n mobiRef: { prevPage: () => void; nextPage: () => void; toggleFullWidth: () => void; toggleToc: () => void } | null;\n current: number;\n total: number;\n fullWidth: boolean;\n t: Translator;\n}\n\nexport function getMobiToolbarGroups(ctx: MobiToolbarContext): ToolbarGroup[] {\n return [\n {\n items: [\n { type: 'button', icon: List, tooltip: ctx.t('toolbar.toc'), action: () => ctx.mobiRef?.toggleToc() },\n ],\n },\n {\n items: [\n { type: 'button', icon: ChevronLeft, tooltip: ctx.t('toolbar.prev_page'), action: () => ctx.mobiRef?.prevPage() },\n { type: 'text', content: `${ctx.current} / ${ctx.total}`, minWidth: '4rem' },\n { type: 'button', icon: ChevronRight, tooltip: ctx.t('toolbar.next_page'), action: () => ctx.mobiRef?.nextPage() },\n ],\n },\n {\n items: [\n {\n type: 'button',\n icon: ctx.fullWidth ? Minimize2 : Maximize2,\n tooltip: ctx.fullWidth ? ctx.t('toolbar.normal_width') : ctx.t('toolbar.full_width'),\n action: () => ctx.mobiRef?.toggleFullWidth(),\n },\n ],\n },\n ];\n}\n","import type { ToolbarGroup } from '../toolbar.types';\nimport type { Translator } from '@eternalheart/file-preview-core';\nimport { formatFileSize } from '@eternalheart/file-preview-core';\n\nexport interface ZipToolbarStats {\n files: number;\n dirs: number;\n size: number;\n}\n\nexport interface ZipToolbarContext {\n stats: ZipToolbarStats | null;\n t: Translator;\n}\n\nexport function getZipToolbarGroups({ stats }: ZipToolbarContext): ToolbarGroup[] {\n if (!stats) return [];\n return [\n {\n items: [\n {\n type: 'text',\n content: `${stats.files} files · ${stats.dirs} dirs · ${formatFileSize(stats.size)}`,\n minWidth: '10rem',\n },\n ],\n },\n ];\n}\n","import { h } from 'vue';\nimport { WrapText, Eye, Code } from 'lucide-vue-next';\nimport type { ToolbarGroup } from '../toolbar.types';\nimport type { Translator } from '@eternalheart/file-preview-core';\n\nexport interface TextToolbarContext {\n wordWrap: boolean;\n onToggleWrap: () => void;\n isHtml: boolean;\n htmlPreview: boolean;\n onToggleHtmlPreview: () => void;\n t: Translator;\n}\n\nexport function getTextToolbarGroups(ctx: TextToolbarContext): ToolbarGroup[] {\n const groups: ToolbarGroup[] = [\n {\n items: [\n {\n type: 'button',\n icon: h(WrapText, { class: 'vfp-w-4 vfp-h-4' }),\n tooltip: ctx.wordWrap ? ctx.t('toolbar.wrap_off') : ctx.t('toolbar.wrap_on'),\n action: ctx.onToggleWrap,\n },\n ],\n },\n ];\n\n if (ctx.isHtml) {\n groups.push({\n items: [\n {\n type: 'button',\n icon: ctx.htmlPreview\n ? h(Code, { class: 'vfp-w-4 vfp-h-4' })\n : h(Eye, { class: 'vfp-w-4 vfp-h-4' }),\n tooltip: ctx.htmlPreview ? ctx.t('toolbar.source') : ctx.t('toolbar.preview'),\n action: ctx.onToggleHtmlPreview,\n },\n ],\n });\n }\n\n return groups;\n}\n","import { h } from 'vue';\nimport { Eye, Code } from 'lucide-vue-next';\nimport type { ToolbarGroup } from '../toolbar.types';\nimport type { Translator } from '@eternalheart/file-preview-core';\n\nexport interface MarkdownToolbarContext {\n viewMode: 'preview' | 'source';\n onToggleViewMode: () => void;\n t: Translator;\n}\n\nexport function getMarkdownToolbarGroups(ctx: MarkdownToolbarContext): ToolbarGroup[] {\n return [\n {\n items: [\n {\n type: 'button',\n icon: ctx.viewMode === 'preview'\n ? h(Code, { class: 'vfp-w-4 vfp-h-4' })\n : h(Eye, { class: 'vfp-w-4 vfp-h-4' }),\n tooltip: ctx.viewMode === 'preview' ? ctx.t('toolbar.source') : ctx.t('toolbar.preview'),\n action: ctx.onToggleViewMode,\n },\n ],\n },\n ];\n}\n","<script setup lang=\"ts\">\nimport { useTranslator } from '../composables/useTranslator';\nconst { t } = useTranslator();\n</script>\n\n<template>\n <div class=\"vfp-flex vfp-items-center vfp-justify-center vfp-w-full vfp-h-full vfp-text-fg-muted\">\n <div class=\"vfp-flex vfp-flex-col vfp-items-center vfp-gap-3\">\n <div class=\"vfp-w-8 vfp-h-8 vfp-rounded-full vfp-border-2 vfp-border-fg-muted vfp-border-t-transparent vfp-animate-spin\" />\n <span class=\"vfp-text-sm\">{{ t('common.loading') || 'Loading...' }}</span>\n </div>\n </div>\n</template>\n","// 集中的 Vue 异步装饰:把每个 renderer 转为 defineAsyncComponent,\n// 让 rollup 自动按 chunk 分割。\nimport { defineAsyncComponent, h, type Component } from 'vue';\nimport RendererLoading from './RendererLoading.vue';\n\ntype ComponentModule = { default: Component };\n\nconst wrap = (loader: () => Promise<ComponentModule>) =>\n defineAsyncComponent({\n loader,\n loadingComponent: { render: () => h(RendererLoading) },\n delay: 0,\n });\n\nexport const ImageRenderer = wrap(() => import('./Image/index.vue'));\nexport const PdfRenderer = wrap(() => import('./Pdf/index.vue'));\nexport const DocxRenderer = wrap(() => import('./Docx/index.vue'));\nexport const XlsxRenderer = wrap(() => import('./Xlsx/index.vue'));\nexport const PptxRenderer = wrap(() => import('./Pptx/index.vue'));\nexport const MsgRenderer = wrap(() => import('./Msg/index.vue'));\nexport const EpubRenderer = wrap(() => import('./Epub/index.vue'));\nexport const MobiRenderer = wrap(() => import('./Mobi/index.vue'));\nexport const VideoRenderer = wrap(() => import('./Video/index.vue'));\nexport const AudioRenderer = wrap(() => import('./Audio/index.vue'));\nexport const MarkdownRenderer = wrap(() => import('./Markdown/index.vue'));\nexport const JsonRenderer = wrap(() => import('./Json/index.vue'));\nexport const CsvRenderer = wrap(() => import('./Csv/index.vue'));\nexport const XmlRenderer = wrap(() => import('./Xml/index.vue'));\nexport const SubtitleRenderer = wrap(() => import('./Subtitle/index.vue'));\nexport const ZipRenderer = wrap(() => import('./Zip/index.vue'));\nexport const TextRenderer = wrap(() => import('./Text/index.vue'));\nexport const FontRenderer = wrap(() => import('./Font/index.vue'));\n","<script setup lang=\"ts\">\nimport { FileQuestion, Download } from 'lucide-vue-next';\nimport { useTranslator } from '../../composables/useTranslator';\n\ndefineProps<{\n fileName: string;\n fileType: string;\n}>();\n\nconst { t } = useTranslator();\n\nconst emit = defineEmits<{\n (e: 'download'): void;\n}>();\n</script>\n\n<template>\n <div\n class=\"vfp-flex vfp-flex-col vfp-items-center vfp-justify-center vfp-w-full vfp-h-full vfp-p-8 vfp-gap-6\"\n >\n <div\n class=\"vfp-w-32 vfp-h-32 vfp-rounded-full vfp-bg-surface-2 vfp-flex vfp-items-center vfp-justify-center\"\n >\n <FileQuestion class=\"vfp-w-16 vfp-h-16 vfp-text-fg-secondary\" />\n </div>\n\n <div class=\"vfp-text-fg-primary vfp-text-center\">\n <p class=\"vfp-text-xl vfp-font-medium vfp-mb-2\">{{ fileName }}</p>\n <p class=\"vfp-text-fg-secondary\">{{ t('common.unsupported_preview', { type: fileType }) }}</p>\n </div>\n\n <button\n class=\"vfp-flex vfp-items-center vfp-gap-2 vfp-px-6 vfp-py-3 vfp-bg-surface-2 hover:vfp-bg-surface-3 vfp-backdrop-blur-sm vfp-rounded-lg vfp-text-fg-primary vfp-font-medium vfp-transition-all\"\n @click=\"emit('download')\"\n >\n <Download class=\"vfp-w-5 vfp-h-5\" />\n {{ t('common.download') }}\n </button>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { ref, watch, onMounted, onBeforeUnmount } from 'vue';\nimport { ChevronLeft, ChevronRight } from 'lucide-vue-next';\n\ninterface Props {\n /** 父级内容容器 DOM(mousemove 监听挂到它身上) */\n containerRef: HTMLDivElement | null;\n hasPrev: boolean;\n hasNext: boolean;\n /** 用于触发\"显示并重置定时器\"的外部信号,通常传 currentIndex */\n resetKey: number;\n}\n\nconst props = defineProps<Props>();\nconst emit = defineEmits<{ prev: []; next: [] }>();\n\nconst NAV_HIDE_DELAY = 2000;\nconst visible = ref(true);\nlet hideTimer: number | null = null;\n\nconst scheduleHide = () => {\n if (hideTimer !== null) clearTimeout(hideTimer);\n hideTimer = window.setTimeout(() => {\n visible.value = false;\n }, NAV_HIDE_DELAY);\n};\n\nconst show = () => {\n if (!visible.value) visible.value = true;\n scheduleHide();\n};\n\nlet attached: HTMLDivElement | null = null;\nconst detach = () => {\n if (attached) {\n attached.removeEventListener('mousemove', show);\n attached = null;\n }\n};\nconst attach = (el: HTMLDivElement | null) => {\n if (attached === el) return;\n detach();\n if (el) {\n el.addEventListener('mousemove', show);\n attached = el;\n }\n};\n\nwatch(() => props.containerRef, (el) => attach(el), { immediate: true });\nwatch(() => props.resetKey, () => {\n visible.value = true;\n scheduleHide();\n});\n\nonMounted(() => {\n scheduleHide();\n});\n\nonBeforeUnmount(() => {\n if (hideTimer !== null) clearTimeout(hideTimer);\n detach();\n});\n</script>\n\n<template>\n <button\n v-if=\"hasPrev\"\n :style=\"{\n opacity: visible ? 1 : 0,\n transform: visible ? 'translateY(-50%)' : 'translateY(-50%) translateX(-20px)',\n pointerEvents: visible ? 'auto' : 'none',\n transition: 'opacity 0.2s, transform 0.2s',\n }\"\n class=\"vfp-absolute vfp-z-20 vfp-left-2 md:vfp-left-4 vfp-top-1/2 vfp-w-10 vfp-h-10 md:vfp-w-12 md:vfp-h-12 vfp-rounded-full vfp-backdrop-blur-xl vfp-border vfp-flex vfp-items-center vfp-justify-center vfp-transition-colors vfp-shadow-2xl vfp-bg-surface-nav vfp-border-line hover:vfp-bg-surface-nav-hover vfp-text-fg-primary\"\n @click=\"emit('prev')\"\n @mouseenter=\"show\"\n >\n <ChevronLeft class=\"vfp-w-5 vfp-h-5 md:vfp-w-6 md:vfp-h-6\" />\n </button>\n\n <button\n v-if=\"hasNext\"\n :style=\"{\n opacity: visible ? 1 : 0,\n transform: visible ? 'translateY(-50%)' : 'translateY(-50%) translateX(20px)',\n pointerEvents: visible ? 'auto' : 'none',\n transition: 'opacity 0.2s, transform 0.2s',\n }\"\n class=\"vfp-absolute vfp-z-20 vfp-right-2 md:vfp-right-4 vfp-top-1/2 vfp-w-10 vfp-h-10 md:vfp-w-12 md:vfp-h-12 vfp-rounded-full vfp-backdrop-blur-xl vfp-border vfp-flex vfp-items-center vfp-justify-center vfp-transition-colors vfp-shadow-2xl vfp-bg-surface-nav vfp-border-line hover:vfp-bg-surface-nav-hover vfp-text-fg-primary\"\n @click=\"emit('next')\"\n @mouseenter=\"show\"\n >\n <ChevronRight class=\"vfp-w-5 vfp-h-5 md:vfp-w-6 md:vfp-h-6\" />\n </button>\n</template>\n","<script setup lang=\"ts\">\nimport { ref, computed, watch, onMounted, onBeforeUnmount, toRef, provide } from 'vue';\nimport { X, Download } from 'lucide-vue-next';\nimport {\n normalizeFiles,\n getFileType,\n downloadFileWithFetcher,\n type PreviewFile,\n type PreviewFileInput,\n type Locale,\n type Messages,\n type Theme,\n type CustomRendererEventPayload,\n type RequestHandler,\n type RequestInitFactory,\n type ShouldFetchAsBlob,\n} from '@eternalheart/file-preview-core';\nimport type { CustomRenderer, CustomRendererContext } from './types';\nimport { provideLocale, useTranslator } from './composables/useTranslator';\nimport { provideResolvedTheme } from './composables/useResolvedTheme';\nimport { provideRequestContext, useResolvedUrl, useFetcher } from './composables/useRequest';\nimport type { ToolbarGroup, ToolbarButtonItem, ToolbarTextItem } from './renderers/toolbar.types';\nimport { getImageToolbarGroups } from './renderers/Image/toolbar';\nimport { getPdfToolbarGroups } from './renderers/Pdf/toolbar';\nimport { getEpubToolbarGroups } from './renderers/Epub/toolbar';\nimport { getMobiToolbarGroups } from './renderers/Mobi/toolbar';\nimport { getZipToolbarGroups, type ZipToolbarStats } from './renderers/Zip/toolbar';\nimport { getTextToolbarGroups } from './renderers/Text/toolbar';\nimport { getMarkdownToolbarGroups } from './renderers/Markdown/toolbar';\n// Renderer 通过 defineAsyncComponent 动态加载,运行时按需下载对应 chunk\nimport {\n ImageRenderer,\n PdfRenderer,\n DocxRenderer,\n XlsxRenderer,\n PptxRenderer,\n MsgRenderer,\n EpubRenderer,\n MobiRenderer,\n VideoRenderer,\n AudioRenderer,\n MarkdownRenderer,\n JsonRenderer,\n CsvRenderer,\n XmlRenderer,\n SubtitleRenderer,\n ZipRenderer,\n TextRenderer,\n FontRenderer,\n} from './renderers/lazy';\n// Unsupported 体量极小且每次回退都用,直接静态打包到主入口\nimport UnsupportedRenderer from './renderers/Unsupported/index.vue';\nimport NavArrows from './components/NavArrows.vue';\n\nconst MAX_ZIP_NESTING_DEPTH = 3;\n\ninterface Props {\n files: PreviewFileInput[];\n currentIndex: number;\n customRenderers?: CustomRenderer[];\n /** 运行模式: modal(弹窗) 或 embed(嵌入) */\n mode?: 'modal' | 'embed';\n /** ZIP 嵌套深度(内部使用),超过上限时不再递归渲染 ZIP */\n zipNestingDepth?: number;\n /** 语言 */\n locale?: Locale;\n /** 自定义翻译字典 */\n messages?: Partial<Record<Locale, Partial<Messages>>>;\n /** 无头模式:隐藏工具栏和导航箭头,仅渲染文件内容 */\n headless?: boolean;\n /** 主题模式,默认 'dark' */\n theme?: Theme;\n /** 自定义 RequestInit(或工厂函数):注入 Authorization 等鉴权头 */\n requestInit?: RequestInitFactory;\n /** 自定义请求处理器:完全接管库内 fetch */\n requestHandler?: RequestHandler;\n /** 返回 true 时,对应文件先 fetcher→blob URL 后喂给 image/video/audio/pdf 等 renderer */\n shouldFetchAsBlob?: ShouldFetchAsBlob;\n /** 自定义下载回调;不传时库内默认通过 fetcher 拉 Blob 触发下载 */\n onDownload?: (file: PreviewFile) => void | Promise<void>;\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n customRenderers: () => [],\n mode: 'modal',\n zipNestingDepth: 0,\n locale: undefined,\n messages: undefined,\n headless: false,\n theme: 'dark',\n requestInit: undefined,\n requestHandler: undefined,\n shouldFetchAsBlob: undefined,\n onDownload: undefined,\n});\n\nprovideRequestContext(() => ({\n requestInit: props.requestInit,\n requestHandler: props.requestHandler,\n shouldFetchAsBlob: props.shouldFetchAsBlob,\n}));\n\nconst emit = defineEmits<{\n (e: 'navigate', index: number): void;\n (e: 'close'): void;\n (e: 'custom-event', payload: CustomRendererEventPayload): void;\n}>();\n\nprovideLocale(toRef(props, 'locale'), toRef(props, 'messages'));\nconst { t } = useTranslator();\n\nconst systemDark = ref(\n typeof window !== 'undefined'\n ? window.matchMedia('(prefers-color-scheme: dark)').matches\n : true,\n);\n\nlet mediaQueryCleanup: (() => void) | null = null;\n\nwatch(\n () => props.theme,\n (theme) => {\n if (mediaQueryCleanup) {\n mediaQueryCleanup();\n mediaQueryCleanup = null;\n }\n if (theme === 'auto') {\n const mql = window.matchMedia('(prefers-color-scheme: dark)');\n const handler = (e: MediaQueryListEvent) => { systemDark.value = e.matches; };\n mql.addEventListener('change', handler);\n mediaQueryCleanup = () => mql.removeEventListener('change', handler);\n }\n },\n { immediate: true },\n);\n\nonBeforeUnmount(() => {\n if (mediaQueryCleanup) mediaQueryCleanup();\n});\n\nconst resolvedTheme = computed(() =>\n props.theme === 'auto' ? (systemDark.value ? 'dark' : 'light') : props.theme,\n);\nprovideResolvedTheme(resolvedTheme);\n\nconst zoom = ref(1);\nconst rotation = ref(0);\nconst currentPage = ref(1);\nconst totalPages = ref(1);\nconst contentNaturalWidth = ref(0);\nconst contentNaturalHeight = ref(0);\nconst imageResetKey = ref(0);\n\nconst contentRef = ref<HTMLDivElement | null>(null);\nconst rootRef = ref<HTMLDivElement | null>(null);\n\n// 标准化文件输入\nconst normalizedFiles = computed(() => normalizeFiles(props.files));\n\nconst currentFile = computed(() => normalizedFiles.value[props.currentIndex]);\n\n// 命中 shouldFetchAsBlob 时,把 file.url 转成 blob: URL 喂给 src 类 renderer\nconst resolvedUrl = useResolvedUrl(currentFile);\n\n// 自定义渲染器匹配\nconst customRenderer = computed(() => {\n if (!currentFile.value) return null;\n return props.customRenderers.find((r) => r.test(currentFile.value!)) || null;\n});\n\nconst customRendererComponent = computed(() => {\n if (!customRenderer.value || !currentFile.value) return null;\n return customRenderer.value.render(currentFile.value, customCtx.value);\n});\n\nconst fileType = computed(() => (currentFile.value ? getFileType(currentFile.value) : 'unsupported'));\n\n// 自定义渲染器事件派发器:未绑定 @custom-event 时仍调用 emit(Vue 会安全忽略未声明监听)\nconst emitCustom = (name: string, payload?: unknown) => {\n if (!currentFile.value) return;\n const ev: CustomRendererEventPayload = { name, payload, file: currentFile.value };\n emit('custom-event', ev);\n};\n\n// 自定义渲染器上下文\nconst customCtx = computed<CustomRendererContext>(() => ({\n emit: emitCustom,\n t: t.value,\n theme: resolvedTheme.value,\n locale: (props.locale ?? 'zh-CN') as Locale,\n}));\n\n// 通过 provide 暴露给深层子组件 inject 使用\nprovide('file-preview:custom-ctx', customCtx);\n\n// 重置状态当文件改变时\nwatch(\n () => props.currentIndex,\n () => {\n zoom.value = 1;\n rotation.value = 0;\n currentPage.value = 1;\n totalPages.value = 1;\n contentNaturalWidth.value = 0;\n contentNaturalHeight.value = 0;\n imageResetKey.value = 0;\n // 重置 epub 状态\n epubCurrent.value = 0;\n epubTotal.value = 0;\n epubFullWidth.value = false;\n // 重置 mobi 状态\n mobiCurrent.value = 0;\n mobiTotal.value = 0;\n mobiFullWidth.value = false;\n // 重置 zip 状态\n zipStats.value = null;\n // 重置 text 状态\n textWordWrap.value = true;\n textHtmlPreview.value = false;\n // 重置 markdown 状态\n markdownViewMode.value = 'preview';\n }\n);\n\n// 图片加载后默认适应窗口\nwatch(\n [fileType, contentNaturalWidth, contentNaturalHeight],\n () => {\n if (\n fileType.value === 'image' &&\n contentNaturalWidth.value > 0 &&\n contentNaturalHeight.value > 0 &&\n contentRef.value\n ) {\n const containerWidth = contentRef.value.clientWidth;\n const containerHeight = contentRef.value.clientHeight;\n const scaleX = containerWidth / contentNaturalWidth.value;\n const scaleY = containerHeight / contentNaturalHeight.value;\n const newZoom = Math.min(scaleX, scaleY);\n zoom.value = Math.max(0.01, Math.min(10, newZoom));\n }\n }\n);\n\n// 键盘导航\nconst handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape' && props.mode === 'modal') {\n emit('close');\n } else if (e.key === 'ArrowLeft' && props.currentIndex > 0) {\n emit('navigate', props.currentIndex - 1);\n } else if (e.key === 'ArrowRight' && props.currentIndex < normalizedFiles.value.length - 1) {\n emit('navigate', props.currentIndex + 1);\n }\n};\n\nonMounted(() => {\n if (props.mode === 'modal') {\n window.addEventListener('keydown', handleKeyDown);\n } else if (rootRef.value) {\n rootRef.value.addEventListener('keydown', handleKeyDown as EventListener);\n }\n});\n\nonBeforeUnmount(() => {\n if (props.mode === 'modal') {\n window.removeEventListener('keydown', handleKeyDown);\n } else if (rootRef.value) {\n rootRef.value.removeEventListener('keydown', handleKeyDown as EventListener);\n }\n});\n\nconst handleZoomIn = () => {\n zoom.value = Math.min(zoom.value + 0.1, 10);\n};\nconst handleZoomOut = () => {\n zoom.value = Math.max(zoom.value - 0.1, 0.01);\n};\nconst handleRotate = () => {\n rotation.value = rotation.value + 90;\n};\nconst handleRotateLeft = () => {\n rotation.value = rotation.value - 90;\n};\n\nconst handleFitToWidth = () => {\n if (contentRef.value && contentNaturalWidth.value > 0 && contentNaturalHeight.value > 0) {\n const containerWidth = contentRef.value.clientWidth;\n const containerHeight = contentRef.value.clientHeight;\n const scaleX = containerWidth / contentNaturalWidth.value;\n const scaleY = containerHeight / contentNaturalHeight.value;\n const newZoom = Math.min(scaleX, scaleY);\n zoom.value = Math.max(0.01, Math.min(10, newZoom));\n } else {\n zoom.value = 1;\n }\n rotation.value = 0;\n imageResetKey.value++;\n};\n\nconst handleOriginalSize = () => {\n zoom.value = 1;\n rotation.value = 0;\n imageResetKey.value++;\n};\n\nconst handleZoomChange = (newZoom: number) => {\n zoom.value = newZoom;\n};\n\nconst handleReset = () => {\n zoom.value = 1;\n rotation.value = 0;\n imageResetKey.value++;\n};\n\nconst fetcher = useFetcher();\nconst handleDownload = async () => {\n if (!currentFile.value) return;\n if (props.onDownload) {\n await props.onDownload(currentFile.value);\n return;\n }\n try {\n await downloadFileWithFetcher(currentFile.value.url, currentFile.value.name, fetcher.value);\n } catch (err) {\n console.error('[file-preview] download failed:', err);\n }\n};\n\nconst showCloseButton = computed(() => props.mode === 'modal');\n\nconst epubRef = ref<{ prevPage: () => void; nextPage: () => void; toggleFullWidth: () => void; toggleToc: () => void } | null>(null);\nconst epubCurrent = ref(0);\nconst epubTotal = ref(0);\nconst epubFullWidth = ref(false);\n\nconst mobiRef = ref<{ prevPage: () => void; nextPage: () => void; toggleFullWidth: () => void; toggleToc: () => void } | null>(null);\nconst mobiCurrent = ref(0);\nconst mobiTotal = ref(0);\nconst mobiFullWidth = ref(false);\n\nconst handleEpubChapterChange = (current: number, total: number) => {\n epubCurrent.value = current;\n epubTotal.value = total;\n};\n\nconst handleMobiChapterChange = (current: number, total: number) => {\n mobiCurrent.value = current;\n mobiTotal.value = total;\n};\n\nconst zipStats = ref<ZipToolbarStats | null>(null);\nconst handleZipStatsChange = (stats: ZipToolbarStats | null) => {\n zipStats.value = stats;\n};\n\nconst textWordWrap = ref(true);\nconst textHtmlPreview = ref(false);\nconst markdownViewMode = ref<'preview' | 'source'>('preview');\n\n// 工具栏配置 — 各 Renderer 自行声明。命中自定义渲染器时优先使用其 getToolbarGroups\nconst toolGroups = computed(() => {\n if (customRenderer.value) {\n return (\n customRenderer.value.getToolbarGroups?.(currentFile.value!, customCtx.value) ?? []\n );\n }\n if (fileType.value === 'image') {\n return getImageToolbarGroups({\n zoom: zoom.value,\n onZoomIn: handleZoomIn,\n onZoomOut: handleZoomOut,\n onFitToWidth: handleFitToWidth,\n onOriginalSize: handleOriginalSize,\n onRotateLeft: handleRotateLeft,\n onRotateRight: handleRotate,\n onReset: handleReset,\n t: t.value,\n });\n }\n if (fileType.value === 'pdf') {\n return getPdfToolbarGroups({\n zoom: zoom.value,\n onZoomIn: handleZoomIn,\n onZoomOut: handleZoomOut,\n onReset: handleReset,\n t: t.value,\n });\n }\n if (fileType.value === 'epub') {\n return getEpubToolbarGroups({\n epubRef: epubRef.value,\n current: epubCurrent.value,\n total: epubTotal.value,\n fullWidth: epubFullWidth.value,\n t: t.value,\n });\n }\n if (fileType.value === 'mobi') {\n return getMobiToolbarGroups({\n mobiRef: mobiRef.value,\n current: mobiCurrent.value,\n total: mobiTotal.value,\n fullWidth: mobiFullWidth.value,\n t: t.value,\n });\n }\n if (fileType.value === 'zip') {\n return getZipToolbarGroups({ stats: zipStats.value, t: t.value });\n }\n if (fileType.value === 'text') {\n const ext = currentFile.value!.name.split('.').pop()?.toLowerCase() || '';\n return getTextToolbarGroups({\n wordWrap: textWordWrap.value,\n onToggleWrap: () => { textWordWrap.value = !textWordWrap.value; },\n isHtml: ext === 'html' || ext === 'htm',\n htmlPreview: textHtmlPreview.value,\n onToggleHtmlPreview: () => { textHtmlPreview.value = !textHtmlPreview.value; },\n t: t.value,\n });\n }\n if (fileType.value === 'markdown') {\n return getMarkdownToolbarGroups({\n viewMode: markdownViewMode.value,\n onToggleViewMode: () => { markdownViewMode.value = markdownViewMode.value === 'preview' ? 'source' : 'preview'; },\n t: t.value,\n });\n }\n return [];\n});\n\n// 操作组:下载、关闭(通用,不属于任何 Renderer)\nconst actionGroups = computed<ToolbarGroup[]>(() => {\n const groups: ToolbarGroup[] = [\n {\n items: [\n { type: 'button', icon: Download, tooltip: t.value('common.download'), action: handleDownload },\n ],\n },\n ];\n if (showCloseButton.value) {\n groups.push({\n items: [\n { type: 'button', icon: X, tooltip: t.value('common.close'), action: () => emit('close') },\n ],\n });\n }\n return groups;\n});\n\nconst hasToolGroups = computed(() => toolGroups.value.length > 0);\n</script>\n\n<template>\n <div\n ref=\"rootRef\"\n :tabindex=\"mode === 'embed' ? 0 : -1\"\n :data-theme=\"resolvedTheme\"\n class=\"vfp-relative vfp-w-full vfp-h-full vfp-flex vfp-flex-col vfp-overflow-hidden vfp-outline-none\"\n >\n <!-- 顶部工具栏 -->\n <div\n v-if=\"!headless\"\n class=\"vfp-flex-shrink-0 vfp-z-10 vfp-backdrop-blur-md vfp-border-b vfp-bg-surface-toolbar vfp-border-line\"\n style=\"padding-top: env(safe-area-inset-top, 0px)\"\n >\n <!-- 第一行: 文件名 + 桌面端工具按钮 -->\n <div class=\"vfp-flex vfp-items-center vfp-justify-between vfp-px-3 md:vfp-px-5 vfp-py-1.5 md:vfp-py-2.5\">\n <!-- 左侧: 文件名 + 分页 -->\n <div class=\"vfp-flex vfp-items-center vfp-flex-1 vfp-min-w-0 vfp-mr-2 md:vfp-mr-3\">\n <h2 class=\"vfp-font-medium vfp-text-xs md:vfp-text-sm vfp-truncate vfp-text-fg-primary\">\n {{ currentFile?.name }}\n </h2>\n <span class=\"vfp-text-xs vfp-ml-2 vfp-flex-shrink-0 vfp-text-fg-muted\">\n {{ currentIndex + 1 }}/{{ normalizedFiles.length }}\n </span>\n </div>\n\n <!-- 移动端: 仅下载 + 关闭 -->\n <div class=\"vfp-flex vfp-items-center vfp-gap-1 md:vfp-hidden vfp-flex-shrink-0\">\n <template v-for=\"(group, gi) in actionGroups\" :key=\"'m-action-' + gi\">\n <template v-for=\"(item, ii) in group.items\" :key=\"'m-action-' + gi + '-' + ii\">\n <button\n v-if=\"item.type === 'button'\"\n class=\"toolbar-btn\"\n :data-tooltip=\"(item as ToolbarButtonItem).tooltip\"\n :disabled=\"(item as ToolbarButtonItem).disabled\"\n @click=\"(item as ToolbarButtonItem).action\"\n >\n <component :is=\"(item as ToolbarButtonItem).icon\" class=\"vfp-w-4 vfp-h-4\" />\n </button>\n </template>\n </template>\n </div>\n\n <!-- 桌面端: 完整工具按钮 -->\n <div class=\"vfp-hidden md:vfp-flex vfp-items-center vfp-gap-1 vfp-flex-shrink-0\">\n <template v-for=\"(group, gi) in toolGroups\" :key=\"'d-tool-' + gi\">\n <template v-for=\"(item, ii) in group.items\" :key=\"'d-tool-' + gi + '-' + ii\">\n <button\n v-if=\"item.type === 'button'\"\n class=\"toolbar-btn\"\n :data-tooltip=\"(item as ToolbarButtonItem).tooltip\"\n :disabled=\"(item as ToolbarButtonItem).disabled\"\n @click=\"(item as ToolbarButtonItem).action\"\n >\n <component :is=\"(item as ToolbarButtonItem).icon\" class=\"vfp-w-4 vfp-h-4\" />\n </button>\n <span\n v-else-if=\"item.type === 'text'\"\n class=\"vfp-text-xs vfp-text-center vfp-font-medium vfp-tabular-nums vfp-text-fg-tertiary\"\n :style=\"{ minWidth: (item as ToolbarTextItem).minWidth || 'auto' }\"\n >\n {{ (item as ToolbarTextItem).content }}\n </span>\n </template>\n <div class=\"vfp-w-px vfp-h-4 vfp-mx-1 vfp-bg-divide\" />\n </template>\n <template v-for=\"(group, gi) in actionGroups\" :key=\"'d-action-' + gi\">\n <template v-for=\"(item, ii) in group.items\" :key=\"'d-action-' + gi + '-' + ii\">\n <button\n v-if=\"item.type === 'button'\"\n class=\"toolbar-btn\"\n :data-tooltip=\"(item as ToolbarButtonItem).tooltip\"\n :disabled=\"(item as ToolbarButtonItem).disabled\"\n @click=\"(item as ToolbarButtonItem).action\"\n >\n <component :is=\"(item as ToolbarButtonItem).icon\" class=\"vfp-w-4 vfp-h-4\" />\n </button>\n </template>\n </template>\n </div>\n </div>\n\n <!-- 移动端第二行工具按钮 -->\n <div\n v-if=\"hasToolGroups\"\n class=\"vfp-flex vfp-items-center vfp-gap-1 vfp-px-3 vfp-pb-1.5 vfp-overflow-x-auto scrollbar-hide md:vfp-hidden\"\n >\n <template v-for=\"(group, gi) in toolGroups\" :key=\"'m-tool-' + gi\">\n <div v-if=\"gi > 0\" class=\"vfp-w-px vfp-h-4 vfp-mx-0.5 vfp-bg-divide\" />\n <template v-for=\"(item, ii) in group.items\" :key=\"'m-tool-' + gi + '-' + ii\">\n <button\n v-if=\"item.type === 'button'\"\n class=\"toolbar-btn\"\n :data-tooltip=\"(item as ToolbarButtonItem).tooltip\"\n :disabled=\"(item as ToolbarButtonItem).disabled\"\n @click=\"(item as ToolbarButtonItem).action\"\n >\n <component :is=\"(item as ToolbarButtonItem).icon\" class=\"vfp-w-4 vfp-h-4\" />\n </button>\n <span\n v-else-if=\"item.type === 'text'\"\n class=\"vfp-text-xs vfp-text-center vfp-font-medium vfp-tabular-nums vfp-text-fg-tertiary\"\n :style=\"{ minWidth: (item as ToolbarTextItem).minWidth || 'auto' }\"\n >\n {{ (item as ToolbarTextItem).content }}\n </span>\n </template>\n </template>\n </div>\n </div>\n\n <!-- 内容区域 -->\n <div\n ref=\"contentRef\"\n class=\"vfp-flex-1 vfp-flex vfp-items-center vfp-justify-center vfp-overflow-auto\"\n :key=\"currentFile?.url\"\n >\n <template v-if=\"currentFile\">\n <component :is=\"customRendererComponent\" v-if=\"customRendererComponent\" :file=\"currentFile\" :ctx=\"customCtx\" />\n <template v-else>\n <ImageRenderer\n v-if=\"fileType === 'image'\"\n :url=\"resolvedUrl\"\n :zoom=\"zoom\"\n :rotation=\"rotation\"\n :reset-key=\"imageResetKey\"\n :file-size=\"currentFile.size\"\n :file=\"currentFile\"\n @zoom-change=\"handleZoomChange\"\n @natural-width-change=\"(w: number) => (contentNaturalWidth = w)\"\n @natural-height-change=\"(h: number) => (contentNaturalHeight = h)\"\n />\n <PdfRenderer\n v-else-if=\"fileType === 'pdf'\"\n :url=\"resolvedUrl\"\n :zoom=\"zoom\"\n :current-page=\"currentPage\"\n @page-change=\"(p: number) => (currentPage = p)\"\n @total-pages-change=\"(t: number) => (totalPages = t)\"\n @page-width-change=\"(w: number) => (contentNaturalWidth = w)\"\n />\n <DocxRenderer v-else-if=\"fileType === 'docx'\" :url=\"resolvedUrl\" />\n <XlsxRenderer v-else-if=\"fileType === 'xlsx'\" :url=\"resolvedUrl\" />\n <PptxRenderer v-else-if=\"fileType === 'pptx'\" :url=\"resolvedUrl\" />\n <MsgRenderer v-else-if=\"fileType === 'msg'\" :url=\"resolvedUrl\" />\n <EpubRenderer\n v-else-if=\"fileType === 'epub'\"\n ref=\"epubRef\"\n :url=\"resolvedUrl\"\n @chapter-change=\"handleEpubChapterChange\"\n @full-width-change=\"(v: boolean) => (epubFullWidth = v)\"\n />\n <MobiRenderer\n v-else-if=\"fileType === 'mobi'\"\n ref=\"mobiRef\"\n :url=\"resolvedUrl\"\n @chapter-change=\"handleMobiChapterChange\"\n @full-width-change=\"(v: boolean) => (mobiFullWidth = v)\"\n />\n <VideoRenderer v-else-if=\"fileType === 'video'\" :url=\"resolvedUrl\" :file-name=\"currentFile?.name\" />\n <AudioRenderer\n v-else-if=\"fileType === 'audio'\"\n :url=\"resolvedUrl\"\n :file-name=\"currentFile.name\"\n />\n <MarkdownRenderer v-else-if=\"fileType === 'markdown'\" :url=\"resolvedUrl\" :view-mode=\"markdownViewMode\" />\n <JsonRenderer\n v-else-if=\"fileType === 'json'\"\n :url=\"resolvedUrl\"\n :file-name=\"currentFile.name\"\n />\n <CsvRenderer\n v-else-if=\"fileType === 'csv'\"\n :url=\"resolvedUrl\"\n :file-name=\"currentFile.name\"\n />\n <XmlRenderer\n v-else-if=\"fileType === 'xml'\"\n :url=\"resolvedUrl\"\n :file-name=\"currentFile.name\"\n />\n <SubtitleRenderer\n v-else-if=\"fileType === 'subtitle'\"\n :url=\"resolvedUrl\"\n :file-name=\"currentFile.name\"\n />\n <template v-else-if=\"fileType === 'zip' && props.zipNestingDepth >= MAX_ZIP_NESTING_DEPTH\">\n <UnsupportedRenderer\n :file-name=\"currentFile.name\"\n :file-type=\"currentFile.type\"\n @download=\"handleDownload\"\n />\n </template>\n <ZipRenderer\n v-else-if=\"fileType === 'zip'\"\n :url=\"resolvedUrl\"\n :nesting-depth=\"props.zipNestingDepth\"\n @stats-change=\"handleZipStatsChange\"\n />\n <TextRenderer\n v-else-if=\"fileType === 'text'\"\n :url=\"resolvedUrl\"\n :file-name=\"currentFile.name\"\n :word-wrap=\"textWordWrap\"\n :html-preview=\"textHtmlPreview\"\n />\n <FontRenderer v-else-if=\"fileType === 'font'\" :url=\"resolvedUrl\" />\n <UnsupportedRenderer\n v-else\n :file-name=\"currentFile.name\"\n :file-type=\"currentFile.type\"\n @download=\"handleDownload\"\n />\n </template>\n </template>\n </div>\n\n <!-- 左右导航箭头:state 隔离在 NavArrows 内部,避免 mousemove/timer 引起整树 patch -->\n <NavArrows\n v-if=\"!headless && normalizedFiles.length > 1\"\n :container-ref=\"contentRef\"\n :has-prev=\"currentIndex > 0\"\n :has-next=\"currentIndex < normalizedFiles.length - 1\"\n :reset-key=\"currentIndex\"\n @prev=\"emit('navigate', currentIndex - 1)\"\n @next=\"emit('navigate', currentIndex + 1)\"\n />\n </div>\n</template>\n\n<style scoped>\n.toolbar-btn {\n position: relative;\n padding: 0.5rem;\n border-radius: 0.375rem;\n transition: all 0.15s;\n user-select: none;\n color: var(--fp-fg-primary);\n background: transparent;\n border: 0;\n cursor: pointer;\n}\n@media (min-width: 768px) {\n .toolbar-btn {\n padding: 0.375rem;\n }\n}\n.toolbar-btn:hover {\n background: var(--fp-surface-2);\n}\n.toolbar-btn:active {\n background: var(--fp-surface-3);\n}\n.toolbar-btn:disabled {\n color: var(--fp-fg-disabled);\n cursor: not-allowed;\n}\n/* Tooltip */\n.toolbar-btn[data-tooltip]::after {\n content: attr(data-tooltip);\n position: absolute;\n left: 50%;\n top: 100%;\n transform: translateX(-50%);\n margin-top: 6px;\n padding: 4px 8px;\n background: var(--fp-fg-primary);\n color: var(--fp-fg-inverse);\n font-size: 12px;\n line-height: 1.5;\n border-radius: 4px;\n white-space: nowrap;\n pointer-events: none;\n opacity: 0;\n visibility: hidden;\n transition: opacity 0.2s, visibility 0.2s;\n z-index: 50;\n}\n.toolbar-btn[data-tooltip]::before {\n content: '';\n position: absolute;\n left: 50%;\n top: 100%;\n transform: translateX(-50%);\n margin-top: 2px;\n border: 4px solid transparent;\n border-bottom-color: var(--fp-fg-primary);\n pointer-events: none;\n opacity: 0;\n visibility: hidden;\n transition: opacity 0.2s, visibility 0.2s;\n z-index: 50;\n}\n.toolbar-btn[data-tooltip]:hover::after,\n.toolbar-btn[data-tooltip]:hover::before {\n opacity: 1;\n visibility: visible;\n}\n\n/* 移动端隐藏 tooltip */\n@media (max-width: 1023px) {\n .toolbar-btn[data-tooltip]::after,\n .toolbar-btn[data-tooltip]::before {\n display: none !important;\n }\n}\n</style>\n","import { onMounted, onUnmounted } from 'vue';\n\n/**\n * 锁定 body 滚动 (用于 Modal)\n */\nexport function useScrollLock(enabled: () => boolean) {\n let originalOverflow = '';\n let originalPaddingRight = '';\n let locked = false;\n\n const lock = () => {\n if (locked || typeof document === 'undefined') return;\n originalOverflow = document.body.style.overflow;\n originalPaddingRight = document.body.style.paddingRight;\n const scrollbarWidth = window.innerWidth - document.documentElement.clientWidth;\n document.body.style.overflow = 'hidden';\n if (scrollbarWidth > 0) {\n document.body.style.paddingRight = `${scrollbarWidth}px`;\n }\n locked = true;\n };\n\n const unlock = () => {\n if (!locked || typeof document === 'undefined') return;\n document.body.style.overflow = originalOverflow;\n document.body.style.paddingRight = originalPaddingRight;\n locked = false;\n };\n\n onMounted(() => {\n if (enabled()) lock();\n });\n\n onUnmounted(() => {\n unlock();\n });\n\n return { lock, unlock };\n}\n","<script setup lang=\"ts\">\nimport { watch, ref, onBeforeUnmount, computed } from 'vue';\nimport type { PreviewFile, PreviewFileInput, Locale, Messages, Theme, CustomRendererEventPayload, RequestHandler, RequestInitFactory, ShouldFetchAsBlob } from '@eternalheart/file-preview-core';\nimport type { CustomRenderer } from './types';\nimport FilePreviewContent from './FilePreviewContent.vue';\nimport { useScrollLock } from './composables/useScrollLock';\n\ninterface Props {\n files: PreviewFileInput[];\n currentIndex: number;\n isOpen: boolean;\n customRenderers?: CustomRenderer[];\n /** 语言 */\n locale?: Locale;\n /** 自定义翻译字典 */\n messages?: Partial<Record<Locale, Partial<Messages>>>;\n /** 无头模式:隐藏工具栏和导航箭头 */\n headless?: boolean;\n /** 主题模式,默认 'dark' */\n theme?: Theme;\n /** 自定义 RequestInit(或工厂函数):注入 Authorization 等鉴权头 */\n requestInit?: RequestInitFactory;\n /** 自定义请求处理器:完全接管库内 fetch */\n requestHandler?: RequestHandler;\n /** 返回 true 时,对应文件先 fetcher→blob URL 后喂给 image/video/audio/pdf 等 renderer */\n shouldFetchAsBlob?: ShouldFetchAsBlob;\n /** 自定义下载回调;不传时库内默认通过 fetcher 拉 Blob 触发下载 */\n onDownload?: (file: PreviewFile) => void | Promise<void>;\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n customRenderers: () => [],\n locale: undefined,\n messages: undefined,\n headless: false,\n theme: 'dark',\n requestInit: undefined,\n requestHandler: undefined,\n shouldFetchAsBlob: undefined,\n onDownload: undefined,\n});\n\nconst emit = defineEmits<{\n (e: 'close'): void;\n (e: 'navigate', index: number): void;\n (e: 'custom-event', payload: CustomRendererEventPayload): void;\n}>();\n\nconst { lock, unlock } = useScrollLock(() => props.isOpen);\n\nwatch(\n () => props.isOpen,\n (open) => {\n if (open) lock();\n else unlock();\n }\n);\n\nconst systemDark = ref(\n typeof window !== 'undefined'\n ? window.matchMedia('(prefers-color-scheme: dark)').matches\n : true,\n);\n\nlet mediaQueryCleanup: (() => void) | null = null;\n\nwatch(\n () => props.theme,\n (theme) => {\n if (mediaQueryCleanup) {\n mediaQueryCleanup();\n mediaQueryCleanup = null;\n }\n if (theme === 'auto') {\n const mql = window.matchMedia('(prefers-color-scheme: dark)');\n const handler = (e: MediaQueryListEvent) => { systemDark.value = e.matches; };\n mql.addEventListener('change', handler);\n mediaQueryCleanup = () => mql.removeEventListener('change', handler);\n }\n },\n { immediate: true },\n);\n\nonBeforeUnmount(() => {\n if (mediaQueryCleanup) mediaQueryCleanup();\n});\n\nconst resolvedTheme = computed(() =>\n props.theme === 'auto' ? (systemDark.value ? 'dark' : 'light') : props.theme,\n);\n\nconst handleBackdropClick = () => emit('close');\nconst handleContentClick = (e: MouseEvent) => e.stopPropagation();\nconst handleWheel = (e: WheelEvent) => e.stopPropagation();\n</script>\n\n<template>\n <Teleport to=\"body\">\n <Transition name=\"vfp-fade\">\n <div v-if=\"isOpen\" class=\"vfp-root\" :data-theme=\"resolvedTheme\">\n <div\n class=\"vfp-fixed vfp-inset-0 vfp-z-[9999] vfp-flex vfp-items-center vfp-justify-center vfp-backdrop-blur-md vfp-overflow-hidden vfp-bg-surface-overlay\"\n @click=\"handleBackdropClick\"\n @wheel=\"handleWheel\"\n >\n <div class=\"vfp-relative vfp-w-full vfp-h-full\" @click=\"handleContentClick\">\n <FilePreviewContent\n mode=\"modal\"\n :files=\"files\"\n :current-index=\"currentIndex\"\n :custom-renderers=\"customRenderers\"\n :locale=\"locale\"\n :messages=\"messages\"\n :headless=\"headless\"\n :theme=\"theme\"\n :request-init=\"requestInit\"\n :request-handler=\"requestHandler\"\n :should-fetch-as-blob=\"shouldFetchAsBlob\"\n :on-download=\"onDownload\"\n @close=\"emit('close')\"\n @navigate=\"(i) => emit('navigate', i)\"\n @custom-event=\"(p) => emit('custom-event', p)\"\n />\n </div>\n </div>\n </div>\n </Transition>\n </Teleport>\n</template>\n","<script setup lang=\"ts\">\nimport { ref, watch, onBeforeUnmount, computed } from 'vue';\nimport type { CSSProperties } from 'vue';\nimport type { PreviewFile, PreviewFileInput, Locale, Messages, Theme, CustomRendererEventPayload, RequestHandler, RequestInitFactory, ShouldFetchAsBlob } from '@eternalheart/file-preview-core';\nimport type { CustomRenderer } from './types';\nimport FilePreviewContent from './FilePreviewContent.vue';\n\ninterface Props {\n files: PreviewFileInput[];\n currentIndex?: number;\n customRenderers?: CustomRenderer[];\n /** 宽度,默认 100% 填充父容器 */\n width?: number | string;\n /** 高度,默认 100% 填充父容器 */\n height?: number | string;\n /** 语言 */\n locale?: Locale;\n /** 自定义翻译字典 */\n messages?: Partial<Record<Locale, Partial<Messages>>>;\n /** 无头模式:隐藏工具栏和导航箭头 */\n headless?: boolean;\n /** 主题模式,默认 'dark' */\n theme?: Theme;\n /** 自定义 RequestInit(或工厂函数):注入 Authorization 等鉴权头 */\n requestInit?: RequestInitFactory;\n /** 自定义请求处理器:完全接管库内 fetch */\n requestHandler?: RequestHandler;\n /** 返回 true 时,对应文件先 fetcher→blob URL 后喂给 image/video/audio/pdf 等 renderer */\n shouldFetchAsBlob?: ShouldFetchAsBlob;\n /** 自定义下载回调;不传时库内默认通过 fetcher 拉 Blob 触发下载 */\n onDownload?: (file: PreviewFile) => void | Promise<void>;\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n currentIndex: 0,\n customRenderers: () => [],\n width: '100%',\n height: '100%',\n locale: undefined,\n messages: undefined,\n headless: false,\n theme: 'dark',\n requestInit: undefined,\n requestHandler: undefined,\n shouldFetchAsBlob: undefined,\n onDownload: undefined,\n});\n\nconst emit = defineEmits<{\n (e: 'navigate', index: number): void;\n (e: 'custom-event', payload: CustomRendererEventPayload): void;\n}>();\n\nconst systemDark = ref(\n typeof window !== 'undefined'\n ? window.matchMedia('(prefers-color-scheme: dark)').matches\n : true,\n);\n\nlet mediaQueryCleanup: (() => void) | null = null;\n\nwatch(\n () => props.theme,\n (theme) => {\n if (mediaQueryCleanup) {\n mediaQueryCleanup();\n mediaQueryCleanup = null;\n }\n if (theme === 'auto') {\n const mql = window.matchMedia('(prefers-color-scheme: dark)');\n const handler = (e: MediaQueryListEvent) => { systemDark.value = e.matches; };\n mql.addEventListener('change', handler);\n mediaQueryCleanup = () => mql.removeEventListener('change', handler);\n }\n },\n { immediate: true },\n);\n\nonBeforeUnmount(() => {\n if (mediaQueryCleanup) mediaQueryCleanup();\n});\n\nconst resolvedTheme = computed(() =>\n props.theme === 'auto' ? (systemDark.value ? 'dark' : 'light') : props.theme,\n);\n\nconst wrapperStyle: CSSProperties = {\n width: typeof props.width === 'number' ? `${props.width}px` : props.width,\n height: typeof props.height === 'number' ? `${props.height}px` : props.height,\n};\n</script>\n\n<template>\n <div class=\"vfp-root\" :style=\"wrapperStyle\" :data-theme=\"resolvedTheme\">\n <div class=\"vfp-relative vfp-w-full vfp-h-full vfp-overflow-hidden vfp-bg-surface-overlay\">\n <FilePreviewContent\n mode=\"embed\"\n :files=\"files\"\n :current-index=\"currentIndex\"\n :custom-renderers=\"customRenderers\"\n :locale=\"locale\"\n :messages=\"messages\"\n :headless=\"headless\"\n :theme=\"theme\"\n :request-init=\"requestInit\"\n :request-handler=\"requestHandler\"\n :should-fetch-as-blob=\"shouldFetchAsBlob\"\n :on-download=\"onDownload\"\n @navigate=\"(i) => emit('navigate', i)\"\n @custom-event=\"(p) => emit('custom-event', p)\"\n />\n </div>\n </div>\n</template>\n","// 导入样式\nimport './index.css';\n\n// 导入版本号\nimport packageJson from '../package.json';\n\n// 导出版本号\nexport const VERSION = packageJson.version;\n\n// 导出主组件\nexport { default as FilePreviewModal } from './FilePreviewModal.vue';\nexport { default as FilePreviewEmbed } from './FilePreviewEmbed.vue';\nexport { default as FilePreviewContent } from './FilePreviewContent.vue';\n\n// 导出类型定义\nexport type {\n PreviewFile,\n PreviewFileLink,\n PreviewFileInput,\n FileType,\n PreviewState,\n ToolbarAction,\n CustomRenderer,\n CustomRendererContext,\n CustomRendererEventPayload,\n} from './types';\n\n// 导出工具函数和常量\nexport {\n normalizeFile,\n normalizeFiles,\n getFileType,\n configurePdfWorker,\n SUPPORTED_FILE_TYPES,\n} from '@eternalheart/file-preview-core';\n\nexport type { PdfWorkerOptions } from '@eternalheart/file-preview-core';\n\n// 导出 i18n 相关\nexport { useTranslator, provideLocale } from './composables/useTranslator';\nexport { LOCALE_KEY } from './i18n/localeKey';\nexport type { Locale, Messages, Translator, Theme } from '@eternalheart/file-preview-core';\n"],"names":["vt","U","n","M","t","B","wt","Ft","a","o","yt","_t","Ct","kt","Mt","St","r","i","l","c","d","p","u","f","$","Et","V","Z","zt","Tt","T","Nt","N","H","O","P","s","E","R","q","m","G","g","v","h","x","b","F","j","D","w","_","C","y","X","J","K","Pt","jt","I","Dt","At","Rt","Q","Y","tt","et","ot","z","nt","at","it","rt","st","lt","A","It","Ut","Bt","ct","dt","k","ft","pt","Wt","ut","mt","gt","ht","S","qt","Gt","xt","LOCALE_KEY","provideLocale","locale","messages","localeRef","computed","unref","createTranslator","provide","fallbackT","getFallback","useTranslator","injected","inject","THEME_KEY","provideResolvedTheme","theme","themeRef","useResolvedTheme","REQUEST_KEY","provideRequestContext","options","value","opts","createFetcher","defaultContext","url","init","useRequestContext","useFetcher","ctx","useResolvedUrl","file","blobUrlRef","ref","createdBlobUrl","cleanup","watch","need","_b","_a","fetcher","_old","onCleanup","cancelled","blobUrl","fetchAsBlobUrl","err","onBeforeUnmount","OriginalSizeIcon","_props","attrs","getImageToolbarGroups","ZoomOut","ZoomIn","Scan","RotateCcw","RotateCw","RefreshCw","getPdfToolbarGroups","getEpubToolbarGroups","List","ChevronLeft","ChevronRight","Minimize2","Maximize2","getMobiToolbarGroups","getZipToolbarGroups","stats","formatFileSize","getTextToolbarGroups","groups","WrapText","Code","Eye","getMarkdownToolbarGroups","_openBlock","_createElementBlock","_hoisted_1","_createElementVNode","_hoisted_2","_hoisted_3","_toDisplayString","_unref","wrap","loader","defineAsyncComponent","RendererLoading","ImageRenderer","PdfRenderer","DocxRenderer","XlsxRenderer","PptxRenderer","MsgRenderer","EpubRenderer","MobiRenderer","VideoRenderer","AudioRenderer","MarkdownRenderer","JsonRenderer","CsvRenderer","XmlRenderer","SubtitleRenderer","ZipRenderer","TextRenderer","FontRenderer","emit","__emit","_createVNode","FileQuestion","_hoisted_4","__props","_hoisted_5","Download","_createTextVNode","NAV_HIDE_DELAY","props","visible","hideTimer","scheduleHide","show","attached","detach","attach","el","onMounted","_normalizeStyle","MAX_ZIP_NESTING_DEPTH","toRef","systemDark","mediaQueryCleanup","mql","handler","e","resolvedTheme","zoom","rotation","currentPage","totalPages","contentNaturalWidth","contentNaturalHeight","imageResetKey","contentRef","rootRef","normalizedFiles","normalizeFiles","currentFile","resolvedUrl","customRenderer","customRendererComponent","customCtx","fileType","getFileType","emitCustom","name","payload","ev","epubCurrent","epubTotal","epubFullWidth","mobiCurrent","mobiTotal","mobiFullWidth","zipStats","textWordWrap","textHtmlPreview","markdownViewMode","containerWidth","containerHeight","scaleX","scaleY","newZoom","handleKeyDown","handleZoomIn","handleZoomOut","handleRotate","handleRotateLeft","handleFitToWidth","handleOriginalSize","handleZoomChange","handleReset","handleDownload","downloadFileWithFetcher","showCloseButton","epubRef","mobiRef","handleEpubChapterChange","current","total","handleMobiChapterChange","handleZipStatsChange","toolGroups","ext","_c","actionGroups","hasToolGroups","_hoisted_6","_hoisted_7","_Fragment","_renderList","group","gi","item","ii","_createBlock","_resolveDynamicComponent","_hoisted_9","_hoisted_12","_hoisted_13","_cache","UnsupportedRenderer","NavArrows","$event","useScrollLock","enabled","originalOverflow","originalPaddingRight","locked","lock","scrollbarWidth","unlock","onUnmounted","open","handleBackdropClick","handleContentClick","handleWheel","_Teleport","_Transition","FilePreviewContent","wrapperStyle","VERSION","packageJson"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { defineComponent as I, ref as w, onMounted as W, watch as S, onBeforeUnmount as $, openBlock as x, createElementBlock as b, createBlock as A, createCommentVNode as k, createElementVNode as R, withDirectives as F, vShow as N, toDisplayString as B, nextTick as O } from "vue";
2
- import { B as U, u as Z } from "./index-CQFN4h-t.mjs";
2
+ import { B as U, u as Z } from "./index-Oxwizt6-.mjs";
3
3
  import * as D from "pdfjs-dist/build/pdf.mjs";
4
4
  import { _ as M } from "./RendererError.vue_vue_type_script_setup_true_lang-CbgZBSDr.mjs";
5
5
  const G = {
@@ -163,4 +163,4 @@ const G = {
163
163
  export {
164
164
  ee as default
165
165
  };
166
- //# sourceMappingURL=index-CY2vJrBJ.mjs.map
166
+ //# sourceMappingURL=index-Zwl5J-Uw.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index-CY2vJrBJ.mjs","sources":["../../src/renderers/Pdf/index.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ref, watch, onMounted, onBeforeUnmount, nextTick } from 'vue';\nimport { configurePdfWorker } from '@eternalheart/file-preview-core';\n// @ts-ignore - pdfjs-dist 类型路径\nimport * as pdfjsLib from 'pdfjs-dist/build/pdf.mjs';\nimport { useTranslator } from '../../composables/useTranslator';\nimport RendererError from '../RendererError.vue';\n\n// 在模块加载时配置 PDF.js worker(默认走 CDN)\nconfigurePdfWorker(pdfjsLib);\n\ndefineOptions({\n components: {\n RendererError,\n },\n});\n\ninterface PdfPageProxy {\n getViewport(opts: { scale: number }): { width: number; height: number };\n render(opts: { canvasContext: CanvasRenderingContext2D; viewport: { width: number; height: number } }): {\n promise: Promise<void>;\n cancel(): void;\n };\n}\n\ninterface PdfDocumentProxy {\n numPages: number;\n getPage(pageNumber: number): Promise<PdfPageProxy>;\n destroy(): void;\n}\n\ninterface PageState {\n element: HTMLDivElement;\n rendered: boolean;\n rendering: boolean;\n renderTask: { cancel(): void } | null;\n}\n\nconst props = defineProps<{\n url: string;\n zoom: number;\n currentPage: number;\n}>();\n\nconst emit = defineEmits<{\n (e: 'pageChange', page: number): void;\n (e: 'totalPagesChange', total: number): void;\n (e: 'pageWidthChange', width: number): void;\n}>();\n\nconst { t } = useTranslator();\n\nconst numPages = ref(0);\nconst error = ref<string | null>(null);\nconst containerRef = ref<HTMLDivElement | null>(null);\nlet pdfDoc: PdfDocumentProxy | null = null;\nconst pageStates = new Map<number, PageState>();\nlet observer: IntersectionObserver | null = null;\n\nconst renderPage = async (pageNumber: number, scale: number) => {\n if (!pdfDoc) return;\n const state = pageStates.get(pageNumber);\n if (!state || state.rendering) return;\n\n state.rendering = true;\n\n try {\n const page = await pdfDoc.getPage(pageNumber);\n const viewport = page.getViewport({ scale });\n\n const canvas = document.createElement('canvas');\n canvas.width = viewport.width;\n canvas.height = viewport.height;\n canvas.style.maxWidth = '100%';\n canvas.style.height = 'auto';\n canvas.style.borderRadius = '0';\n canvas.style.display = 'block';\n canvas.style.boxShadow = '0 25px 50px -12px rgba(0,0,0,0.25)';\n canvas.style.filter = 'brightness(0.95) contrast(1.05)';\n\n const ctx = canvas.getContext('2d');\n if (!ctx) return;\n\n const renderTask = page.render({ canvasContext: ctx, viewport });\n state.renderTask = renderTask;\n await renderTask.promise;\n\n // 上报第一页原始宽度\n if (pageNumber === 1) {\n const baseViewport = page.getViewport({ scale: 1 });\n emit('pageWidthChange', baseViewport.width);\n }\n\n state.element.innerHTML = '';\n state.element.appendChild(canvas);\n\n // 页码标签\n const label = document.createElement('div');\n label.textContent = String(pageNumber);\n label.style.cssText =\n 'position:absolute;top:8px;right:8px;background:rgba(0,0,0,0.6);backdrop-filter:blur(4px);color:white;font-size:12px;padding:4px 12px;border-radius:9999px;';\n state.element.appendChild(label);\n\n state.rendered = true;\n } catch (err: any) {\n if (err?.name !== 'RenderingCancelledException') {\n console.error(`渲染页面 ${pageNumber} 失败:`, err);\n }\n } finally {\n state.rendering = false;\n state.renderTask = null;\n }\n};\n\nconst clearPageCanvas = (pageNumber: number) => {\n const state = pageStates.get(pageNumber);\n if (!state) return;\n\n // 取消正在进行的渲染\n if (state.renderTask) {\n state.renderTask.cancel();\n state.renderTask = null;\n }\n\n // 清理 canvas,保留占位符\n const canvas = state.element.querySelector('canvas');\n if (canvas) {\n const ctx = canvas.getContext('2d');\n if (ctx) {\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n }\n canvas.remove();\n }\n\n state.element.innerHTML = '';\n state.rendered = false;\n state.rendering = false;\n};\n\nconst initPagePlaceholders = async () => {\n if (!pdfDoc || !containerRef.value) return;\n const wrapper = containerRef.value.querySelector('.pdf-pages') as HTMLDivElement | null;\n if (!wrapper) return;\n\n wrapper.innerHTML = '';\n pageStates.clear();\n\n // 预计算所有页面的高度占位\n for (let i = 1; i <= numPages.value; i++) {\n const pageDiv = document.createElement('div');\n pageDiv.style.cssText = 'position:relative;display:flex;justify-content:center;min-height:800px;';\n pageDiv.dataset.pageNumber = String(i);\n wrapper.appendChild(pageDiv);\n\n pageStates.set(i, {\n element: pageDiv,\n rendered: false,\n rendering: false,\n renderTask: null,\n });\n\n // 使用 IntersectionObserver 监听\n if (observer) {\n observer.observe(pageDiv);\n }\n }\n};\n\nconst loadPdf = async () => {\n error.value = null;\n numPages.value = 0;\n if (pdfDoc) {\n try {\n pdfDoc.destroy();\n } catch {\n // ignore\n }\n pdfDoc = null;\n }\n\n try {\n const loadingTask = pdfjsLib.getDocument({ url: props.url });\n pdfDoc = (await loadingTask.promise) as PdfDocumentProxy;\n numPages.value = pdfDoc.numPages;\n emit('totalPagesChange', pdfDoc.numPages);\n emit('pageChange', 1);\n await nextTick();\n await initPagePlaceholders();\n } catch (err) {\n console.error('PDF 加载错误:', err);\n error.value = t.value('pdf.load_failed');\n }\n};\n\nconst handleScroll = () => {\n if (!containerRef.value || pageStates.size === 0) return;\n\n const container = containerRef.value;\n const scrollTop = container.scrollTop;\n const containerHeight = container.clientHeight;\n const scrollCenter = scrollTop + containerHeight / 2;\n\n let currentVisiblePage = 1;\n let minDistance = Infinity;\n\n pageStates.forEach((state, pageNumber) => {\n const rect = state.element.getBoundingClientRect();\n const containerRect = container.getBoundingClientRect();\n const pageCenter = rect.top - containerRect.top + rect.height / 2 + scrollTop;\n const distance = Math.abs(pageCenter - scrollCenter);\n\n if (distance < minDistance) {\n minDistance = distance;\n currentVisiblePage = pageNumber;\n }\n });\n\n if (currentVisiblePage !== props.currentPage) {\n emit('pageChange', currentVisiblePage);\n }\n};\n\nlet zoomDebounceTimer: number | null = null;\nconst handleZoomChange = () => {\n if (zoomDebounceTimer) {\n clearTimeout(zoomDebounceTimer);\n }\n\n zoomDebounceTimer = window.setTimeout(() => {\n // 清理所有已渲染页面\n pageStates.forEach((state, pageNumber) => {\n if (state.rendered) {\n clearPageCanvas(pageNumber);\n }\n });\n\n // 触发 IntersectionObserver 重新渲染可见页面\n if (observer && containerRef.value) {\n const wrapper = containerRef.value.querySelector('.pdf-pages') as HTMLDivElement | null;\n if (wrapper) {\n pageStates.forEach((state) => {\n observer?.unobserve(state.element);\n observer?.observe(state.element);\n });\n }\n }\n }, 150);\n};\n\nonMounted(() => {\n // 初始化 IntersectionObserver,设置缓冲区为上下 500px\n observer = new IntersectionObserver(\n (entries) => {\n entries.forEach((entry) => {\n const pageNumber = Number(entry.target.getAttribute('data-page-number'));\n if (!pageNumber) return;\n\n if (entry.isIntersecting) {\n // 页面进入视口,渲染\n renderPage(pageNumber, props.zoom);\n } else {\n // 页面离开视口较远,清理 canvas\n const state = pageStates.get(pageNumber);\n if (state && state.rendered) {\n clearPageCanvas(pageNumber);\n }\n }\n });\n },\n {\n root: containerRef.value,\n rootMargin: '500px 0px',\n threshold: 0,\n }\n );\n\n loadPdf();\n if (containerRef.value) {\n containerRef.value.addEventListener('scroll', handleScroll);\n }\n});\n\nwatch(\n () => props.url,\n (newUrl) => {\n // 只有 URL 有效时才加载(避免空字符串或已 revoke 的 blob URL)\n if (newUrl) {\n loadPdf();\n }\n }\n);\n\nwatch(() => props.zoom, handleZoomChange);\n\nonBeforeUnmount(() => {\n if (zoomDebounceTimer) {\n clearTimeout(zoomDebounceTimer);\n }\n\n if (observer) {\n observer.disconnect();\n observer = null;\n }\n\n if (containerRef.value) {\n containerRef.value.removeEventListener('scroll', handleScroll);\n }\n\n // 清理所有渲染任务\n pageStates.forEach((state) => {\n if (state.renderTask) {\n state.renderTask.cancel();\n }\n });\n pageStates.clear();\n\n if (pdfDoc) {\n try {\n pdfDoc.destroy();\n } catch {\n // ignore\n }\n pdfDoc = null;\n }\n});\n</script>\n\n<template>\n <div\n ref=\"containerRef\"\n class=\"vfp-flex vfp-flex-col vfp-items-center vfp-w-full vfp-h-full vfp-overflow-auto vfp-py-4 md:vfp-py-8 vfp-px-2 md:vfp-px-4\"\n >\n <RendererError v-if=\"error\" :message=\"error\" />\n\n <div v-if=\"!error && numPages === 0\" class=\"vfp-flex vfp-items-center vfp-justify-center vfp-min-h-screen\">\n <div\n class=\"vfp-w-12 vfp-h-12 vfp-border-4 vfp-border-line-strong vfp-border-t-spinner-head vfp-rounded-full vfp-animate-spin\"\n />\n </div>\n\n <div v-show=\"!error && numPages > 0\" class=\"pdf-pages vfp-flex vfp-flex-col vfp-gap-4\" />\n\n <div\n v-if=\"numPages > 0\"\n class=\"vfp-sticky vfp-bottom-2 md:vfp-bottom-4 vfp-mt-4 md:vfp-mt-8 vfp-bg-surface-nav-hover vfp-backdrop-blur-xl vfp-text-fg-primary vfp-px-4 vfp-py-2 md:vfp-px-6 md:vfp-py-3 vfp-rounded-full vfp-text-xs md:vfp-text-sm vfp-font-medium vfp-shadow-2xl vfp-border vfp-border-line-weak\"\n >\n 第 {{ currentPage }} 页 / 共 {{ numPages }} 页\n </div>\n </div>\n</template>\n"],"names":["configurePdfWorker","pdfjsLib","props","__props","emit","__emit","t","useTranslator","numPages","ref","error","containerRef","pdfDoc","pageStates","observer","renderPage","pageNumber","scale","state","page","viewport","canvas","ctx","renderTask","baseViewport","label","err","clearPageCanvas","initPagePlaceholders","wrapper","i","pageDiv","loadPdf","nextTick","handleScroll","container","scrollTop","containerHeight","scrollCenter","currentVisiblePage","minDistance","rect","containerRect","pageCenter","distance","zoomDebounceTimer","handleZoomChange","onMounted","entries","entry","watch","newUrl","onBeforeUnmount","_createElementBlock","_createBlock","RendererError","_openBlock","_hoisted_1","_cache","_createElementVNode","_withDirectives","_hoisted_2","_vShow","_hoisted_3","_toDisplayString"],"mappings":"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"}
1
+ {"version":3,"file":"index-Zwl5J-Uw.mjs","sources":["../../src/renderers/Pdf/index.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ref, watch, onMounted, onBeforeUnmount, nextTick } from 'vue';\nimport { configurePdfWorker } from '@eternalheart/file-preview-core';\n// @ts-ignore - pdfjs-dist 类型路径\nimport * as pdfjsLib from 'pdfjs-dist/build/pdf.mjs';\nimport { useTranslator } from '../../composables/useTranslator';\nimport RendererError from '../RendererError.vue';\n\n// 在模块加载时配置 PDF.js worker(默认走 CDN)\nconfigurePdfWorker(pdfjsLib);\n\ndefineOptions({\n components: {\n RendererError,\n },\n});\n\ninterface PdfPageProxy {\n getViewport(opts: { scale: number }): { width: number; height: number };\n render(opts: { canvasContext: CanvasRenderingContext2D; viewport: { width: number; height: number } }): {\n promise: Promise<void>;\n cancel(): void;\n };\n}\n\ninterface PdfDocumentProxy {\n numPages: number;\n getPage(pageNumber: number): Promise<PdfPageProxy>;\n destroy(): void;\n}\n\ninterface PageState {\n element: HTMLDivElement;\n rendered: boolean;\n rendering: boolean;\n renderTask: { cancel(): void } | null;\n}\n\nconst props = defineProps<{\n url: string;\n zoom: number;\n currentPage: number;\n}>();\n\nconst emit = defineEmits<{\n (e: 'pageChange', page: number): void;\n (e: 'totalPagesChange', total: number): void;\n (e: 'pageWidthChange', width: number): void;\n}>();\n\nconst { t } = useTranslator();\n\nconst numPages = ref(0);\nconst error = ref<string | null>(null);\nconst containerRef = ref<HTMLDivElement | null>(null);\nlet pdfDoc: PdfDocumentProxy | null = null;\nconst pageStates = new Map<number, PageState>();\nlet observer: IntersectionObserver | null = null;\n\nconst renderPage = async (pageNumber: number, scale: number) => {\n if (!pdfDoc) return;\n const state = pageStates.get(pageNumber);\n if (!state || state.rendering) return;\n\n state.rendering = true;\n\n try {\n const page = await pdfDoc.getPage(pageNumber);\n const viewport = page.getViewport({ scale });\n\n const canvas = document.createElement('canvas');\n canvas.width = viewport.width;\n canvas.height = viewport.height;\n canvas.style.maxWidth = '100%';\n canvas.style.height = 'auto';\n canvas.style.borderRadius = '0';\n canvas.style.display = 'block';\n canvas.style.boxShadow = '0 25px 50px -12px rgba(0,0,0,0.25)';\n canvas.style.filter = 'brightness(0.95) contrast(1.05)';\n\n const ctx = canvas.getContext('2d');\n if (!ctx) return;\n\n const renderTask = page.render({ canvasContext: ctx, viewport });\n state.renderTask = renderTask;\n await renderTask.promise;\n\n // 上报第一页原始宽度\n if (pageNumber === 1) {\n const baseViewport = page.getViewport({ scale: 1 });\n emit('pageWidthChange', baseViewport.width);\n }\n\n state.element.innerHTML = '';\n state.element.appendChild(canvas);\n\n // 页码标签\n const label = document.createElement('div');\n label.textContent = String(pageNumber);\n label.style.cssText =\n 'position:absolute;top:8px;right:8px;background:rgba(0,0,0,0.6);backdrop-filter:blur(4px);color:white;font-size:12px;padding:4px 12px;border-radius:9999px;';\n state.element.appendChild(label);\n\n state.rendered = true;\n } catch (err: any) {\n if (err?.name !== 'RenderingCancelledException') {\n console.error(`渲染页面 ${pageNumber} 失败:`, err);\n }\n } finally {\n state.rendering = false;\n state.renderTask = null;\n }\n};\n\nconst clearPageCanvas = (pageNumber: number) => {\n const state = pageStates.get(pageNumber);\n if (!state) return;\n\n // 取消正在进行的渲染\n if (state.renderTask) {\n state.renderTask.cancel();\n state.renderTask = null;\n }\n\n // 清理 canvas,保留占位符\n const canvas = state.element.querySelector('canvas');\n if (canvas) {\n const ctx = canvas.getContext('2d');\n if (ctx) {\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n }\n canvas.remove();\n }\n\n state.element.innerHTML = '';\n state.rendered = false;\n state.rendering = false;\n};\n\nconst initPagePlaceholders = async () => {\n if (!pdfDoc || !containerRef.value) return;\n const wrapper = containerRef.value.querySelector('.pdf-pages') as HTMLDivElement | null;\n if (!wrapper) return;\n\n wrapper.innerHTML = '';\n pageStates.clear();\n\n // 预计算所有页面的高度占位\n for (let i = 1; i <= numPages.value; i++) {\n const pageDiv = document.createElement('div');\n pageDiv.style.cssText = 'position:relative;display:flex;justify-content:center;min-height:800px;';\n pageDiv.dataset.pageNumber = String(i);\n wrapper.appendChild(pageDiv);\n\n pageStates.set(i, {\n element: pageDiv,\n rendered: false,\n rendering: false,\n renderTask: null,\n });\n\n // 使用 IntersectionObserver 监听\n if (observer) {\n observer.observe(pageDiv);\n }\n }\n};\n\nconst loadPdf = async () => {\n error.value = null;\n numPages.value = 0;\n if (pdfDoc) {\n try {\n pdfDoc.destroy();\n } catch {\n // ignore\n }\n pdfDoc = null;\n }\n\n try {\n const loadingTask = pdfjsLib.getDocument({ url: props.url });\n pdfDoc = (await loadingTask.promise) as PdfDocumentProxy;\n numPages.value = pdfDoc.numPages;\n emit('totalPagesChange', pdfDoc.numPages);\n emit('pageChange', 1);\n await nextTick();\n await initPagePlaceholders();\n } catch (err) {\n console.error('PDF 加载错误:', err);\n error.value = t.value('pdf.load_failed');\n }\n};\n\nconst handleScroll = () => {\n if (!containerRef.value || pageStates.size === 0) return;\n\n const container = containerRef.value;\n const scrollTop = container.scrollTop;\n const containerHeight = container.clientHeight;\n const scrollCenter = scrollTop + containerHeight / 2;\n\n let currentVisiblePage = 1;\n let minDistance = Infinity;\n\n pageStates.forEach((state, pageNumber) => {\n const rect = state.element.getBoundingClientRect();\n const containerRect = container.getBoundingClientRect();\n const pageCenter = rect.top - containerRect.top + rect.height / 2 + scrollTop;\n const distance = Math.abs(pageCenter - scrollCenter);\n\n if (distance < minDistance) {\n minDistance = distance;\n currentVisiblePage = pageNumber;\n }\n });\n\n if (currentVisiblePage !== props.currentPage) {\n emit('pageChange', currentVisiblePage);\n }\n};\n\nlet zoomDebounceTimer: number | null = null;\nconst handleZoomChange = () => {\n if (zoomDebounceTimer) {\n clearTimeout(zoomDebounceTimer);\n }\n\n zoomDebounceTimer = window.setTimeout(() => {\n // 清理所有已渲染页面\n pageStates.forEach((state, pageNumber) => {\n if (state.rendered) {\n clearPageCanvas(pageNumber);\n }\n });\n\n // 触发 IntersectionObserver 重新渲染可见页面\n if (observer && containerRef.value) {\n const wrapper = containerRef.value.querySelector('.pdf-pages') as HTMLDivElement | null;\n if (wrapper) {\n pageStates.forEach((state) => {\n observer?.unobserve(state.element);\n observer?.observe(state.element);\n });\n }\n }\n }, 150);\n};\n\nonMounted(() => {\n // 初始化 IntersectionObserver,设置缓冲区为上下 500px\n observer = new IntersectionObserver(\n (entries) => {\n entries.forEach((entry) => {\n const pageNumber = Number(entry.target.getAttribute('data-page-number'));\n if (!pageNumber) return;\n\n if (entry.isIntersecting) {\n // 页面进入视口,渲染\n renderPage(pageNumber, props.zoom);\n } else {\n // 页面离开视口较远,清理 canvas\n const state = pageStates.get(pageNumber);\n if (state && state.rendered) {\n clearPageCanvas(pageNumber);\n }\n }\n });\n },\n {\n root: containerRef.value,\n rootMargin: '500px 0px',\n threshold: 0,\n }\n );\n\n loadPdf();\n if (containerRef.value) {\n containerRef.value.addEventListener('scroll', handleScroll);\n }\n});\n\nwatch(\n () => props.url,\n (newUrl) => {\n // 只有 URL 有效时才加载(避免空字符串或已 revoke 的 blob URL)\n if (newUrl) {\n loadPdf();\n }\n }\n);\n\nwatch(() => props.zoom, handleZoomChange);\n\nonBeforeUnmount(() => {\n if (zoomDebounceTimer) {\n clearTimeout(zoomDebounceTimer);\n }\n\n if (observer) {\n observer.disconnect();\n observer = null;\n }\n\n if (containerRef.value) {\n containerRef.value.removeEventListener('scroll', handleScroll);\n }\n\n // 清理所有渲染任务\n pageStates.forEach((state) => {\n if (state.renderTask) {\n state.renderTask.cancel();\n }\n });\n pageStates.clear();\n\n if (pdfDoc) {\n try {\n pdfDoc.destroy();\n } catch {\n // ignore\n }\n pdfDoc = null;\n }\n});\n</script>\n\n<template>\n <div\n ref=\"containerRef\"\n class=\"vfp-flex vfp-flex-col vfp-items-center vfp-w-full vfp-h-full vfp-overflow-auto vfp-py-4 md:vfp-py-8 vfp-px-2 md:vfp-px-4\"\n >\n <RendererError v-if=\"error\" :message=\"error\" />\n\n <div v-if=\"!error && numPages === 0\" class=\"vfp-flex vfp-items-center vfp-justify-center vfp-min-h-screen\">\n <div\n class=\"vfp-w-12 vfp-h-12 vfp-border-4 vfp-border-line-strong vfp-border-t-spinner-head vfp-rounded-full vfp-animate-spin\"\n />\n </div>\n\n <div v-show=\"!error && numPages > 0\" class=\"pdf-pages vfp-flex vfp-flex-col vfp-gap-4\" />\n\n <div\n v-if=\"numPages > 0\"\n class=\"vfp-sticky vfp-bottom-2 md:vfp-bottom-4 vfp-mt-4 md:vfp-mt-8 vfp-bg-surface-nav-hover vfp-backdrop-blur-xl vfp-text-fg-primary vfp-px-4 vfp-py-2 md:vfp-px-6 md:vfp-py-3 vfp-rounded-full vfp-text-xs md:vfp-text-sm vfp-font-medium vfp-shadow-2xl vfp-border vfp-border-line-weak\"\n >\n 第 {{ currentPage }} 页 / 共 {{ numPages }} 页\n </div>\n </div>\n</template>\n"],"names":["configurePdfWorker","pdfjsLib","props","__props","emit","__emit","t","useTranslator","numPages","ref","error","containerRef","pdfDoc","pageStates","observer","renderPage","pageNumber","scale","state","page","viewport","canvas","ctx","renderTask","baseViewport","label","err","clearPageCanvas","initPagePlaceholders","wrapper","i","pageDiv","loadPdf","nextTick","handleScroll","container","scrollTop","containerHeight","scrollCenter","currentVisiblePage","minDistance","rect","containerRect","pageCenter","distance","zoomDebounceTimer","handleZoomChange","onMounted","entries","entry","watch","newUrl","onBeforeUnmount","_createElementBlock","_createBlock","RendererError","_openBlock","_hoisted_1","_cache","_createElementVNode","_withDirectives","_hoisted_2","_vShow","_hoisted_3","_toDisplayString"],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ interface Props {
2
+ /** 父级内容容器 DOM(mousemove 监听挂到它身上) */
3
+ containerRef: HTMLDivElement | null;
4
+ hasPrev: boolean;
5
+ hasNext: boolean;
6
+ /** 用于触发"显示并重置定时器"的外部信号,通常传 currentIndex */
7
+ resetKey: number;
8
+ }
9
+ declare const _default: import("vue").DefineComponent<Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
10
+ prev: () => any;
11
+ next: () => any;
12
+ }, string, import("vue").PublicProps, Readonly<Props> & Readonly<{
13
+ onPrev?: (() => any) | undefined;
14
+ onNext?: (() => any) | undefined;
15
+ }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
16
+ export default _default;
17
+ //# sourceMappingURL=NavArrows.vue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NavArrows.vue.d.ts","sourceRoot":"","sources":["../../src/components/NavArrows.vue"],"names":[],"mappings":"AAoGA,UAAU,KAAK;IACb,oCAAoC;IACpC,YAAY,EAAE,cAAc,GAAG,IAAI,CAAC;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,2CAA2C;IAC3C,QAAQ,EAAE,MAAM,CAAC;CAClB;;;;;;;;AA0LD,wBAOG"}