@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,318 @@
1
+ import { defineComponent as N, ref as u, computed as C, onMounted as ne, onBeforeUnmount as _, watch as B, openBlock as a, createElementBlock as c, Fragment as F, createElementVNode as i, normalizeClass as E, toDisplayString as $, withDirectives as O, renderSlot as W, vShow as P, normalizeStyle as I, resolveComponent as le, createVNode as K, unref as T, createBlock as R, resolveDynamicComponent as A, renderList as q, createCommentVNode as X, defineAsyncComponent as oe, withCtx as V, Teleport as se } from "vue";
2
+ import { _ as G, F as ae, C as ie, u as re, a as fe, d as Z, j as ve, D as de, A as pe, R as ue } from "./index-Oxwizt6-.mjs";
3
+ import { FileImage as ce, FileText as me, FileCode as he, File as we, ChevronRight as ye, FolderOpen as ge, Folder as xe } from "lucide-vue-next";
4
+ import { _ as be } from "./RendererError.vue_vue_type_script_setup_true_lang-CbgZBSDr.mjs";
5
+ const ke = { class: "vfp-flex vfp-flex-shrink-0 vfp-border-b vfp-border-line-weak vfp-bg-surface-toolbar" }, Le = { class: "vfp-flex-1 vfp-min-h-0 vfp-min-w-0 vfp-w-full vfp-overflow-hidden" }, Se = { class: "vfp-flex-1 vfp-min-h-0 vfp-min-w-0 vfp-w-full vfp-overflow-hidden" }, ze = { class: "vfp-flex-1 vfp-min-w-0 vfp-min-h-0 vfp-overflow-hidden" }, Ce = /* @__PURE__ */ N({
6
+ name: "ResizableSplit",
7
+ __name: "ResizableSplit",
8
+ props: {
9
+ initialLeftWidth: { default: 280 },
10
+ minLeftWidth: { default: 160 },
11
+ maxLeftWidth: { default: 640 },
12
+ minRightWidth: { default: 200 },
13
+ storageKey: {},
14
+ desktopMedia: { default: "(min-width: 768px)" },
15
+ mobileTabMode: { type: Boolean, default: !1 },
16
+ leftTabLabel: { default: "文件树" },
17
+ rightTabLabel: { default: "预览" }
18
+ },
19
+ setup(s, { expose: M }) {
20
+ const l = s, v = u(null), g = u(
21
+ (() => {
22
+ if (l.storageKey && typeof window < "u") {
23
+ const n = Number(window.localStorage.getItem(l.storageKey));
24
+ if (!isNaN(n) && n > 0) return n;
25
+ }
26
+ return l.initialLeftWidth;
27
+ })()
28
+ ), h = u(!1), S = u(!1), y = u("left");
29
+ let d = null;
30
+ const x = () => {
31
+ d && (S.value = d.matches);
32
+ }, r = C(
33
+ () => S.value ? { width: `${g.value}px` } : void 0
34
+ ), t = (n) => {
35
+ if (!v.value) return;
36
+ const w = v.value.getBoundingClientRect(), z = n.clientX - w.left, U = w.width - l.minRightWidth - 6, j = Math.min(l.maxLeftWidth, U);
37
+ g.value = Math.max(
38
+ l.minLeftWidth,
39
+ Math.min(j, z)
40
+ );
41
+ }, f = () => {
42
+ if (h.value && (h.value = !1, window.removeEventListener("mousemove", t), window.removeEventListener("mouseup", f), document.body.style.cursor = "", document.body.style.userSelect = "", l.storageKey))
43
+ try {
44
+ window.localStorage.setItem(l.storageKey, String(g.value));
45
+ } catch {
46
+ }
47
+ }, b = (n) => {
48
+ n.preventDefault(), h.value = !0, window.addEventListener("mousemove", t), window.addEventListener("mouseup", f), document.body.style.cursor = "col-resize", document.body.style.userSelect = "none";
49
+ };
50
+ ne(() => {
51
+ typeof window < "u" && (d = window.matchMedia(l.desktopMedia), x(), d.addEventListener("change", x));
52
+ }), _(() => {
53
+ d && d.removeEventListener("change", x), window.removeEventListener("mousemove", t), window.removeEventListener("mouseup", f), h.value && (document.body.style.cursor = "", document.body.style.userSelect = "");
54
+ }), B(
55
+ () => l.initialLeftWidth,
56
+ (n) => {
57
+ l.storageKey || (g.value = n);
58
+ }
59
+ );
60
+ const p = (n) => {
61
+ y.value = n;
62
+ };
63
+ return M({ switchTab: p }), (n, w) => (a(), c("div", {
64
+ ref_key: "containerRef",
65
+ ref: v,
66
+ class: "vfp-w-full vfp-h-full vfp-flex vfp-flex-col md:vfp-flex-row vfp-min-h-0 vfp-min-w-0"
67
+ }, [
68
+ s.mobileTabMode && !S.value ? (a(), c(F, { key: 0 }, [
69
+ i("div", ke, [
70
+ i("button", {
71
+ type: "button",
72
+ class: E(["vfp-flex-1 vfp-py-2.5 vfp-text-sm vfp-transition-colors", y.value === "left" ? "vfp-text-fg-primary vfp-border-b-2 vfp-border-fg-primary -vfp-mb-px" : "vfp-text-fg-secondary"]),
73
+ onClick: w[0] || (w[0] = (z) => p("left"))
74
+ }, $(s.leftTabLabel), 3),
75
+ i("button", {
76
+ type: "button",
77
+ class: E(["vfp-flex-1 vfp-py-2.5 vfp-text-sm vfp-transition-colors", y.value === "right" ? "vfp-text-fg-primary vfp-border-b-2 vfp-border-fg-primary -vfp-mb-px" : "vfp-text-fg-secondary"]),
78
+ onClick: w[1] || (w[1] = (z) => p("right"))
79
+ }, $(s.rightTabLabel), 3)
80
+ ]),
81
+ O(i("div", Le, [
82
+ W(n.$slots, "left", {}, void 0, !0)
83
+ ], 512), [
84
+ [P, y.value === "left"]
85
+ ]),
86
+ O(i("div", Se, [
87
+ W(n.$slots, "right", {}, void 0, !0)
88
+ ], 512), [
89
+ [P, y.value === "right"]
90
+ ])
91
+ ], 64)) : (a(), c(F, { key: 1 }, [
92
+ i("div", {
93
+ class: "vfp-min-h-0 vfp-min-w-0 vfp-flex-shrink-0 vfp-w-full vfp-max-h-60 md:vfp-h-full md:vfp-max-h-none",
94
+ style: I(r.value)
95
+ }, [
96
+ W(n.$slots, "left", {}, void 0, !0)
97
+ ], 4),
98
+ i("div", {
99
+ role: "separator",
100
+ "aria-orientation": "vertical",
101
+ class: E(["split-divider vfp-hidden md:vfp-block vfp-relative vfp-w-1.5 vfp-flex-shrink-0 vfp-cursor-col-resize vfp-transition-colors", h.value ? "dragging" : ""]),
102
+ onMousedown: b
103
+ }, [...w[2] || (w[2] = [
104
+ i("span", { class: "vfp-absolute vfp-inset-y-0 hit-area" }, null, -1)
105
+ ])], 34),
106
+ i("div", ze, [
107
+ W(n.$slots, "right", {}, void 0, !0)
108
+ ])
109
+ ], 64))
110
+ ], 512));
111
+ }
112
+ }), $e = /* @__PURE__ */ G(Ce, [["__scopeId", "data-v-7670070d"]]), Te = { key: 0 }, Re = { class: "vfp-truncate vfp-flex-1 vfp-min-w-0" }, Me = { class: "vfp-flex-1 vfp-truncate vfp-min-w-0" }, De = { class: "vfp-text-xs vfp-text-fg-disabled vfp-flex-shrink-0 vfp-ml-2" }, Ee = { name: "ZipTreeItem" }, Fe = /* @__PURE__ */ N({
113
+ ...Ee,
114
+ props: {
115
+ node: {},
116
+ depth: {},
117
+ selectedPath: {},
118
+ expanded: {}
119
+ },
120
+ emits: ["toggle", "select", "hover", "leave"],
121
+ setup(s, { emit: M }) {
122
+ const l = s, v = M, g = C(() => ({ paddingLeft: `${l.depth * 14 + 10}px` })), h = C(() => l.expanded.has(l.node.path)), S = C(() => l.selectedPath === l.node.path), y = C(() => {
123
+ const r = ae({ name: l.node.name, type: "" });
124
+ return r === "image" ? ce : r === "text" || r === "markdown" || r === "json" || r === "csv" || r === "xml" || r === "subtitle" ? l.node.name.endsWith(".md") || l.node.name.endsWith(".markdown") ? me : he : we;
125
+ }), d = (r) => {
126
+ const t = r.currentTarget.getBoundingClientRect();
127
+ v("hover", l.node.name || "/", t);
128
+ }, x = () => v("leave");
129
+ return (r, t) => {
130
+ const f = le("ZipTreeItem");
131
+ return s.node.isDir ? (a(), c("div", Te, [
132
+ i("button", {
133
+ type: "button",
134
+ class: "tree-row dir-row",
135
+ style: I(g.value),
136
+ onClick: t[0] || (t[0] = (b) => v("toggle", s.node.path)),
137
+ onMouseenter: d,
138
+ onMouseleave: x
139
+ }, [
140
+ K(T(ye), {
141
+ class: E(["vfp-w-3.5 vfp-h-3.5 vfp-flex-shrink-0 vfp-transition-transform", { "vfp-rotate-90": h.value }])
142
+ }, null, 8, ["class"]),
143
+ (a(), R(A(h.value ? T(ge) : T(xe)), { class: "vfp-w-4 vfp-h-4 vfp-flex-shrink-0 vfp-text-amber-300/80" })),
144
+ i("span", Re, $(s.node.name || "/"), 1)
145
+ ], 36),
146
+ h.value && s.node.children ? (a(!0), c(F, { key: 0 }, q(s.node.children, (b) => (a(), R(f, {
147
+ key: b.path,
148
+ node: b,
149
+ depth: s.depth + 1,
150
+ "selected-path": s.selectedPath,
151
+ expanded: s.expanded,
152
+ onToggle: t[1] || (t[1] = (p) => v("toggle", p)),
153
+ onSelect: t[2] || (t[2] = (p) => v("select", p)),
154
+ onHover: t[3] || (t[3] = (p, n) => v("hover", p, n)),
155
+ onLeave: t[4] || (t[4] = (p) => v("leave"))
156
+ }, null, 8, ["node", "depth", "selected-path", "expanded"]))), 128)) : X("", !0)
157
+ ])) : (a(), c("button", {
158
+ key: 1,
159
+ type: "button",
160
+ class: E(["tree-row file-row", { selected: S.value }]),
161
+ style: I(g.value),
162
+ onClick: t[5] || (t[5] = (b) => v("select", s.node)),
163
+ onMouseenter: d,
164
+ onMouseleave: x
165
+ }, [
166
+ t[6] || (t[6] = i("span", { class: "vfp-w-3.5 vfp-h-3.5 vfp-flex-shrink-0" }, null, -1)),
167
+ (a(), R(A(y.value), { class: "vfp-w-4 vfp-h-4 vfp-flex-shrink-0 vfp-text-fg-tertiary" })),
168
+ i("span", Me, $(s.node.name), 1),
169
+ i("span", De, $(T(ie)(s.node.size)), 1)
170
+ ], 38));
171
+ };
172
+ }
173
+ }), We = /* @__PURE__ */ G(Fe, [["__scopeId", "data-v-c8c0f0ee"]]), Ie = {
174
+ key: 0,
175
+ class: "vfp-flex vfp-items-center vfp-justify-center vfp-w-full vfp-h-full"
176
+ }, Ue = { class: "vfp-w-full vfp-h-full vfp-overflow-auto" }, je = { class: "vfp-w-full vfp-h-full vfp-flex vfp-flex-col" }, _e = {
177
+ key: 0,
178
+ class: "vfp-flex-1 vfp-flex vfp-items-center vfp-justify-center vfp-text-fg-muted vfp-text-sm vfp-p-6"
179
+ }, Be = {
180
+ key: 1,
181
+ class: "vfp-flex-1 vfp-flex vfp-items-center vfp-justify-center"
182
+ }, Ke = {
183
+ key: 2,
184
+ class: "vfp-flex-1 vfp-flex vfp-items-center vfp-justify-center vfp-text-fg-secondary"
185
+ }, Ne = {
186
+ key: 3,
187
+ class: "vfp-flex-1 vfp-min-h-0 vfp-overflow-hidden vfp-flex vfp-relative vfp-z-0"
188
+ }, Ve = /* @__PURE__ */ N({
189
+ __name: "index",
190
+ props: {
191
+ url: {},
192
+ nestingDepth: { default: 0 }
193
+ },
194
+ emits: ["statsChange"],
195
+ setup(s, { emit: M }) {
196
+ const l = oe(
197
+ () => import("./index-Oxwizt6-.mjs").then((e) => e.i)
198
+ ), v = s, g = M, { t: h } = re(), S = fe(), y = u(null), d = u(null), x = u(!0), r = u(null), t = u(/* @__PURE__ */ new Set([""])), f = u(null), b = u(!1), p = u(null), n = u(null), w = u(null), z = () => {
199
+ var e;
200
+ (e = f.value) != null && e.blobUrl && URL.revokeObjectURL(f.value.blobUrl);
201
+ }, U = async () => {
202
+ z(), f.value = null, x.value = !0, r.value = null;
203
+ try {
204
+ const e = await S.value(v.url);
205
+ if (!e.ok) throw new Error("加载失败");
206
+ const o = await e.arrayBuffer(), m = await ve(o), L = de(m), k = pe(L);
207
+ y.value = m, d.value = k;
208
+ const D = /* @__PURE__ */ new Set([""]);
209
+ if (k.children)
210
+ for (const H of k.children) H.isDir && D.add(H.path);
211
+ t.value = D;
212
+ } catch (e) {
213
+ console.error(e), r.value = h.value("zip.load_failed");
214
+ } finally {
215
+ x.value = !1;
216
+ }
217
+ };
218
+ B(() => v.url, (e) => {
219
+ e && U();
220
+ }, { immediate: !0 }), _(() => {
221
+ z();
222
+ });
223
+ const j = C(() => {
224
+ if (!d.value) return null;
225
+ let e = 0, o = 0, m = 0;
226
+ const L = (k) => {
227
+ var D;
228
+ k.isDir ? (k.path && o++, (D = k.children) == null || D.forEach(L)) : (e++, m += k.size);
229
+ };
230
+ return L(d.value), { files: e, dirs: o, size: m };
231
+ });
232
+ B(j, (e) => g("statsChange", e), { immediate: !0 }), _(() => g("statsChange", null));
233
+ const J = (e) => {
234
+ const o = new Set(t.value);
235
+ o.has(e) ? o.delete(e) : o.add(e), t.value = o;
236
+ }, Q = (e, o) => {
237
+ n.value = { text: e, x: o.right + 8, y: o.top + o.height / 2 };
238
+ }, Y = () => {
239
+ n.value = null;
240
+ }, ee = async (e) => {
241
+ var o;
242
+ if (!(!y.value || e.isDir)) {
243
+ z(), b.value = !0, p.value = null;
244
+ try {
245
+ const m = Z(e.name), L = await ue(y.value, e.path, m !== "application/octet-stream" ? m : void 0), k = URL.createObjectURL(L);
246
+ f.value = { path: e.path, name: e.name, size: e.size, blobUrl: k }, (o = w.value) == null || o.switchTab("right");
247
+ } catch (m) {
248
+ console.error(m), p.value = "条目读取失败";
249
+ } finally {
250
+ b.value = !1;
251
+ }
252
+ }
253
+ }, te = C(() => f.value ? [{ name: f.value.name, url: f.value.blobUrl, type: Z(f.value.name) }] : []);
254
+ return (e, o) => x.value ? (a(), c("div", Ie, [...o[0] || (o[0] = [
255
+ i("div", { 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" }, null, -1)
256
+ ])])) : r.value || !d.value ? (a(), R(be, {
257
+ key: 1,
258
+ message: r.value || T(h)("zip.parse_failed")
259
+ }, null, 8, ["message"])) : (a(), c(F, { key: 2 }, [
260
+ K($e, {
261
+ ref_key: "splitRef",
262
+ ref: w,
263
+ "initial-left-width": 280,
264
+ "min-left-width": 180,
265
+ "max-left-width": 560,
266
+ "storage-key": "vfp-zip-split-left",
267
+ "mobile-tab-mode": "",
268
+ "left-tab-label": "文件树",
269
+ "right-tab-label": "预览"
270
+ }, {
271
+ left: V(() => [
272
+ i("div", Ue, [
273
+ (a(!0), c(F, null, q(d.value.children || [], (m) => {
274
+ var L;
275
+ return a(), R(We, {
276
+ key: m.path,
277
+ node: m,
278
+ depth: 0,
279
+ "selected-path": ((L = f.value) == null ? void 0 : L.path) ?? null,
280
+ expanded: t.value,
281
+ onToggle: J,
282
+ onSelect: ee,
283
+ onHover: Q,
284
+ onLeave: Y
285
+ }, null, 8, ["node", "selected-path", "expanded"]);
286
+ }), 128))
287
+ ])
288
+ ]),
289
+ right: V(() => [
290
+ i("div", je, [
291
+ f.value ? b.value ? (a(), c("div", Be, [...o[1] || (o[1] = [
292
+ i("div", { class: "vfp-w-8 vfp-h-8 vfp-border-4 vfp-border-line-strong vfp-border-t-spinner-head vfp-rounded-full vfp-animate-spin" }, null, -1)
293
+ ])])) : p.value ? (a(), c("div", Ke, $(p.value), 1)) : (a(), c("div", Ne, [
294
+ K(T(l), {
295
+ mode: "embed",
296
+ files: te.value,
297
+ "current-index": 0,
298
+ "zip-nesting-depth": s.nestingDepth + 1
299
+ }, null, 8, ["files", "zip-nesting-depth"])
300
+ ])) : (a(), c("div", _e, " 从左侧选择一个文件以预览 "))
301
+ ])
302
+ ]),
303
+ _: 1
304
+ }, 512),
305
+ (a(), R(se, { to: "body" }, [
306
+ n.value ? (a(), c("div", {
307
+ key: 0,
308
+ class: "vfp-zip-tip",
309
+ style: I({ left: n.value.x + "px", top: n.value.y + "px" })
310
+ }, $(n.value.text), 5)) : X("", !0)
311
+ ]))
312
+ ], 64));
313
+ }
314
+ });
315
+ export {
316
+ Ve as default
317
+ };
318
+ //# sourceMappingURL=index-CyrFxdIJ.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-CyrFxdIJ.mjs","sources":["../../src/components/ResizableSplit.vue","../../src/renderers/Zip/TreeItem.vue","../../src/renderers/Zip/index.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ref, computed, onBeforeUnmount, onMounted, watch } from 'vue';\n\ninterface Props {\n /** 左侧初始宽度(px);传入 storageKey 时会从 localStorage 读取 */\n initialLeftWidth?: number;\n /** 左侧最小宽度(px) */\n minLeftWidth?: number;\n /** 左侧最大宽度(px) */\n maxLeftWidth?: number;\n /** 右侧至少保留的宽度(px) */\n minRightWidth?: number;\n /** localStorage 持久化 key */\n storageKey?: string;\n /** 启用横向拖动的媒体查询 */\n desktopMedia?: string;\n /** 移动端使用 Tab 切换而非上下堆叠 */\n mobileTabMode?: boolean;\n /** Tab 模式下左侧标题 */\n leftTabLabel?: string;\n /** Tab 模式下右侧标题 */\n rightTabLabel?: string;\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n initialLeftWidth: 280,\n minLeftWidth: 160,\n maxLeftWidth: 640,\n minRightWidth: 200,\n desktopMedia: '(min-width: 768px)',\n mobileTabMode: false,\n leftTabLabel: '文件树',\n rightTabLabel: '预览',\n});\n\ndefineOptions({ name: 'ResizableSplit' });\n\nconst containerRef = ref<HTMLDivElement | null>(null);\nconst leftWidth = ref<number>(\n (() => {\n if (props.storageKey && typeof window !== 'undefined') {\n const saved = Number(window.localStorage.getItem(props.storageKey));\n if (!isNaN(saved) && saved > 0) return saved;\n }\n return props.initialLeftWidth;\n })()\n);\nconst dragging = ref(false);\nconst isDesktop = ref(false);\nconst activeTab = ref<'left' | 'right'>('left');\n\nlet mq: MediaQueryList | null = null;\nconst mqHandler = () => {\n if (mq) isDesktop.value = mq.matches;\n};\n\nconst leftStyle = computed(() =>\n isDesktop.value ? { width: `${leftWidth.value}px` } : undefined\n);\n\nconst onMove = (e: MouseEvent) => {\n if (!containerRef.value) return;\n const rect = containerRef.value.getBoundingClientRect();\n const x = e.clientX - rect.left;\n const cap = rect.width - props.minRightWidth - 6;\n const effectiveMax = Math.min(props.maxLeftWidth, cap);\n leftWidth.value = Math.max(\n props.minLeftWidth,\n Math.min(effectiveMax, x)\n );\n};\n\nconst onUp = () => {\n if (!dragging.value) return;\n dragging.value = false;\n window.removeEventListener('mousemove', onMove);\n window.removeEventListener('mouseup', onUp);\n document.body.style.cursor = '';\n document.body.style.userSelect = '';\n if (props.storageKey) {\n try {\n window.localStorage.setItem(props.storageKey, String(leftWidth.value));\n } catch {\n // ignore\n }\n }\n};\n\nconst onDividerDown = (e: MouseEvent) => {\n e.preventDefault();\n dragging.value = true;\n window.addEventListener('mousemove', onMove);\n window.addEventListener('mouseup', onUp);\n document.body.style.cursor = 'col-resize';\n document.body.style.userSelect = 'none';\n};\n\nonMounted(() => {\n if (typeof window !== 'undefined') {\n mq = window.matchMedia(props.desktopMedia);\n mqHandler();\n mq.addEventListener('change', mqHandler);\n }\n});\n\nonBeforeUnmount(() => {\n if (mq) mq.removeEventListener('change', mqHandler);\n window.removeEventListener('mousemove', onMove);\n window.removeEventListener('mouseup', onUp);\n if (dragging.value) {\n document.body.style.cursor = '';\n document.body.style.userSelect = '';\n }\n});\n\nwatch(\n () => props.initialLeftWidth,\n (w) => {\n if (!props.storageKey) leftWidth.value = w;\n }\n);\n\nconst switchTab = (tab: 'left' | 'right') => {\n activeTab.value = tab;\n};\n\ndefineExpose({ switchTab });\n</script>\n\n<template>\n <div\n ref=\"containerRef\"\n class=\"vfp-w-full vfp-h-full vfp-flex vfp-flex-col md:vfp-flex-row vfp-min-h-0 vfp-min-w-0\"\n >\n <!-- 移动端 Tab 模式 -->\n <template v-if=\"mobileTabMode && !isDesktop\">\n <div class=\"vfp-flex vfp-flex-shrink-0 vfp-border-b vfp-border-line-weak vfp-bg-surface-toolbar\">\n <button\n type=\"button\"\n class=\"vfp-flex-1 vfp-py-2.5 vfp-text-sm vfp-transition-colors\"\n :class=\"activeTab === 'left'\n ? 'vfp-text-fg-primary vfp-border-b-2 vfp-border-fg-primary -vfp-mb-px'\n : 'vfp-text-fg-secondary'\"\n @click=\"switchTab('left')\"\n >\n {{ leftTabLabel }}\n </button>\n <button\n type=\"button\"\n class=\"vfp-flex-1 vfp-py-2.5 vfp-text-sm vfp-transition-colors\"\n :class=\"activeTab === 'right'\n ? 'vfp-text-fg-primary vfp-border-b-2 vfp-border-fg-primary -vfp-mb-px'\n : 'vfp-text-fg-secondary'\"\n @click=\"switchTab('right')\"\n >\n {{ rightTabLabel }}\n </button>\n </div>\n <div v-show=\"activeTab === 'left'\" class=\"vfp-flex-1 vfp-min-h-0 vfp-min-w-0 vfp-w-full vfp-overflow-hidden\">\n <slot name=\"left\" />\n </div>\n <div v-show=\"activeTab === 'right'\" class=\"vfp-flex-1 vfp-min-h-0 vfp-min-w-0 vfp-w-full vfp-overflow-hidden\">\n <slot name=\"right\" />\n </div>\n </template>\n\n <!-- 桌面端 / 移动端默认堆叠模式 -->\n <template v-else>\n <div\n class=\"vfp-min-h-0 vfp-min-w-0 vfp-flex-shrink-0 vfp-w-full vfp-max-h-60 md:vfp-h-full md:vfp-max-h-none\"\n :style=\"leftStyle\"\n >\n <slot name=\"left\" />\n </div>\n <div\n role=\"separator\"\n aria-orientation=\"vertical\"\n class=\"split-divider vfp-hidden md:vfp-block vfp-relative vfp-w-1.5 vfp-flex-shrink-0 vfp-cursor-col-resize vfp-transition-colors\"\n :class=\"dragging ? 'dragging' : ''\"\n @mousedown=\"onDividerDown\"\n >\n <span class=\"vfp-absolute vfp-inset-y-0 hit-area\" />\n </div>\n <div class=\"vfp-flex-1 vfp-min-w-0 vfp-min-h-0 vfp-overflow-hidden\">\n <slot name=\"right\" />\n </div>\n </template>\n </div>\n</template>\n\n<style scoped>\n.split-divider {\n background: rgba(255, 255, 255, 0.1);\n}\n.split-divider:hover {\n background: rgba(255, 255, 255, 0.3);\n}\n.split-divider.dragging {\n background: rgba(255, 255, 255, 0.4);\n}\n.hit-area {\n left: -4px;\n right: -4px;\n}\n</style>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport {\n Folder,\n FolderOpen,\n FileText,\n FileImage,\n FileCode,\n File as FileIcon,\n ChevronRight,\n} from 'lucide-vue-next';\nimport { formatFileSize, getFileType, type ZipTreeNode } from '@eternalheart/file-preview-core';\n\nconst props = defineProps<{\n node: ZipTreeNode;\n depth: number;\n selectedPath: string | null;\n expanded: Set<string>;\n}>();\n\nconst emit = defineEmits<{\n (e: 'toggle', path: string): void;\n (e: 'select', node: ZipTreeNode): void;\n (e: 'hover', text: string, rect: DOMRect): void;\n (e: 'leave'): void;\n}>();\n\nconst padStyle = computed(() => ({ paddingLeft: `${props.depth * 14 + 10}px` }));\nconst isOpen = computed(() => props.expanded.has(props.node.path));\nconst isSelected = computed(() => props.selectedPath === props.node.path);\n\nconst fileIcon = computed(() => {\n const ft = getFileType({ id: '', name: props.node.name, url: '', type: '' });\n if (ft === 'image') return FileImage;\n if (ft === 'text' || ft === 'markdown' || ft === 'json' || ft === 'csv' || ft === 'xml' || ft === 'subtitle') {\n return (props.node.name.endsWith('.md') || props.node.name.endsWith('.markdown')) ? FileText : FileCode;\n }\n return FileIcon;\n});\n\nconst handleEnter = (e: MouseEvent) => {\n const rect = (e.currentTarget as HTMLElement).getBoundingClientRect();\n emit('hover', props.node.name || '/', rect);\n};\n\nconst handleLeave = () => emit('leave');\n</script>\n\n<template>\n <div v-if=\"node.isDir\">\n <button\n type=\"button\"\n class=\"tree-row dir-row\"\n :style=\"padStyle\"\n @click=\"emit('toggle', node.path)\"\n @mouseenter=\"handleEnter\"\n @mouseleave=\"handleLeave\"\n >\n <ChevronRight\n class=\"vfp-w-3.5 vfp-h-3.5 vfp-flex-shrink-0 vfp-transition-transform\"\n :class=\"{ 'vfp-rotate-90': isOpen }\"\n />\n <component\n :is=\"isOpen ? FolderOpen : Folder\"\n class=\"vfp-w-4 vfp-h-4 vfp-flex-shrink-0 vfp-text-amber-300/80\"\n />\n <span class=\"vfp-truncate vfp-flex-1 vfp-min-w-0\">{{ node.name || '/' }}</span>\n </button>\n <template v-if=\"isOpen && node.children\">\n <ZipTreeItem\n v-for=\"child in node.children\"\n :key=\"child.path\"\n :node=\"child\"\n :depth=\"depth + 1\"\n :selected-path=\"selectedPath\"\n :expanded=\"expanded\"\n @toggle=\"(p) => emit('toggle', p)\"\n @select=\"(n) => emit('select', n)\"\n @hover=\"(t, r) => emit('hover', t, r)\"\n @leave=\"emit('leave')\"\n />\n </template>\n </div>\n <button\n v-else\n type=\"button\"\n class=\"tree-row file-row\"\n :class=\"{ selected: isSelected }\"\n :style=\"padStyle\"\n @click=\"emit('select', node)\"\n @mouseenter=\"handleEnter\"\n @mouseleave=\"handleLeave\"\n >\n <span class=\"vfp-w-3.5 vfp-h-3.5 vfp-flex-shrink-0\" />\n <component :is=\"fileIcon\" class=\"vfp-w-4 vfp-h-4 vfp-flex-shrink-0 vfp-text-fg-tertiary\" />\n <span class=\"vfp-flex-1 vfp-truncate vfp-min-w-0\">{{ node.name }}</span>\n <span class=\"vfp-text-xs vfp-text-fg-disabled vfp-flex-shrink-0 vfp-ml-2\">{{ formatFileSize(node.size) }}</span>\n </button>\n</template>\n\n<script lang=\"ts\">\nexport default { name: 'ZipTreeItem' };\n</script>\n\n<style scoped>\n.tree-row {\n width: 100%;\n display: flex;\n align-items: center;\n gap: 0.375rem;\n padding-top: 0.375rem;\n padding-bottom: 0.375rem;\n padding-right: 0.5rem;\n text-align: left;\n font-size: 0.875rem;\n background: transparent;\n border: 0;\n cursor: pointer;\n}\n.dir-row {\n color: var(--fp-fg-secondary);\n}\n.file-row {\n color: var(--fp-fg-secondary);\n}\n.tree-row:hover {\n background: var(--fp-surface-1);\n}\n.file-row.selected {\n background: var(--fp-line);\n color: #fff;\n}\n</style>\n","<script setup lang=\"ts\">\nimport { ref, computed, watch, onBeforeUnmount, defineAsyncComponent } from 'vue';\nimport type JSZip from 'jszip';\nimport {\n loadZip,\n listZipEntries,\n buildZipTree,\n readZipEntryBlob,\n inferMimeType,\n type ZipTreeNode,\n} from '@eternalheart/file-preview-core';\nimport ResizableSplit from '../../components/ResizableSplit.vue';\nimport TreeItem from './TreeItem.vue';\nimport type { ZipToolbarStats } from './toolbar';\nimport { useTranslator } from '../../composables/useTranslator';\nimport { useFetcher } from '../../composables/useRequest';\nimport RendererError from '../RendererError.vue';\n\n// 懒加载 FilePreviewContent 以打破循环依赖\nconst LazyFilePreviewContent = defineAsyncComponent(\n () => import('../../FilePreviewContent.vue')\n);\n\nconst props = withDefaults(defineProps<{\n url: string;\n /** ZIP 嵌套深度(由 FilePreviewContent 传入) */\n nestingDepth?: number;\n}>(), {\n nestingDepth: 0,\n});\n\nconst emit = defineEmits<{\n (e: 'statsChange', stats: ZipToolbarStats | null): void;\n}>();\n\nconst { t } = useTranslator();\nconst fetcher = useFetcher();\n\ninterface SelectedPreview {\n path: string;\n name: string;\n size: number;\n blobUrl: string;\n}\n\ninterface HoverTipState {\n text: string;\n x: number;\n y: number;\n}\n\nconst zip = ref<JSZip | null>(null);\nconst tree = ref<ZipTreeNode | null>(null);\nconst loading = ref(true);\nconst error = ref<string | null>(null);\nconst expanded = ref<Set<string>>(new Set(['']));\nconst selected = ref<SelectedPreview | null>(null);\nconst previewLoading = ref(false);\nconst previewError = ref<string | null>(null);\nconst hoverTip = ref<HoverTipState | null>(null);\nconst splitRef = ref<InstanceType<typeof ResizableSplit> | null>(null);\n\nconst revokeCurrent = () => {\n if (selected.value?.blobUrl) URL.revokeObjectURL(selected.value.blobUrl);\n};\n\nconst load = async () => {\n revokeCurrent();\n selected.value = null;\n loading.value = true;\n error.value = null;\n try {\n const res = await fetcher.value(props.url);\n if (!res.ok) throw new Error('加载失败');\n const buf = await res.arrayBuffer();\n const z = await loadZip(buf);\n const entries = listZipEntries(z);\n const root = buildZipTree(entries);\n zip.value = z;\n tree.value = root;\n const init = new Set<string>(['']);\n if (root.children) for (const c of root.children) if (c.isDir) init.add(c.path);\n expanded.value = init;\n } catch (err) {\n console.error(err);\n error.value = t.value('zip.load_failed');\n } finally {\n loading.value = false;\n }\n};\n\nwatch(() => props.url, (newUrl) => {\n // 只有 URL 有效时才加载(避免空字符串或已 revoke 的 blob URL)\n if (newUrl) load();\n}, { immediate: true });\nonBeforeUnmount(() => { revokeCurrent(); });\n\nconst totalStats = computed<ZipToolbarStats | null>(() => {\n if (!tree.value) return null;\n let files = 0, dirs = 0, size = 0;\n const walk = (n: ZipTreeNode) => {\n if (n.isDir) { if (n.path) dirs++; n.children?.forEach(walk); }\n else { files++; size += n.size; }\n };\n walk(tree.value);\n return { files, dirs, size };\n});\n\nwatch(totalStats, (s) => emit('statsChange', s), { immediate: true });\nonBeforeUnmount(() => emit('statsChange', null));\n\nconst handleToggle = (path: string) => {\n const next = new Set(expanded.value);\n if (next.has(path)) next.delete(path);\n else next.add(path);\n expanded.value = next;\n};\n\nconst handleHover = (text: string, rect: DOMRect) => {\n hoverTip.value = { text, x: rect.right + 8, y: rect.top + rect.height / 2 };\n};\nconst handleLeave = () => { hoverTip.value = null; };\n\nconst handleSelect = async (node: ZipTreeNode) => {\n if (!zip.value || node.isDir) return;\n revokeCurrent();\n previewLoading.value = true;\n previewError.value = null;\n\n try {\n const mime = inferMimeType(node.name);\n const blob = await readZipEntryBlob(zip.value, node.path, mime !== 'application/octet-stream' ? mime : undefined);\n const blobUrl = URL.createObjectURL(blob);\n selected.value = { path: node.path, name: node.name, size: node.size, blobUrl };\n // 移动端切换到预览 tab\n splitRef.value?.switchTab('right');\n } catch (err) {\n console.error(err);\n previewError.value = '条目读取失败';\n } finally {\n previewLoading.value = false;\n }\n};\n\n/** 为嵌入的 FilePreviewContent 构建 files 数组 */\nconst previewFiles = computed(() => {\n if (!selected.value) return [];\n return [{ name: selected.value.name, url: selected.value.blobUrl, type: inferMimeType(selected.value.name) }];\n});\n</script>\n\n<template>\n <div v-if=\"loading\" class=\"vfp-flex vfp-items-center vfp-justify-center vfp-w-full vfp-h-full\">\n <div 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 </div>\n\n <RendererError v-else-if=\"error || !tree\" :message=\"error || t('zip.parse_failed')\" />\n\n <template v-else>\n <ResizableSplit\n ref=\"splitRef\"\n :initial-left-width=\"280\"\n :min-left-width=\"180\"\n :max-left-width=\"560\"\n storage-key=\"vfp-zip-split-left\"\n mobile-tab-mode\n left-tab-label=\"文件树\"\n right-tab-label=\"预览\"\n >\n <template #left>\n <div class=\"vfp-w-full vfp-h-full vfp-overflow-auto\">\n <TreeItem\n v-for=\"child in tree.children || []\"\n :key=\"child.path\"\n :node=\"child\"\n :depth=\"0\"\n :selected-path=\"selected?.path ?? null\"\n :expanded=\"expanded\"\n @toggle=\"handleToggle\"\n @select=\"handleSelect\"\n @hover=\"handleHover\"\n @leave=\"handleLeave\"\n />\n </div>\n </template>\n\n <template #right>\n <div class=\"vfp-w-full vfp-h-full vfp-flex vfp-flex-col\">\n <div v-if=\"!selected\" class=\"vfp-flex-1 vfp-flex vfp-items-center vfp-justify-center vfp-text-fg-muted vfp-text-sm vfp-p-6\">\n 从左侧选择一个文件以预览\n </div>\n <div v-else-if=\"previewLoading\" class=\"vfp-flex-1 vfp-flex vfp-items-center vfp-justify-center\">\n <div class=\"vfp-w-8 vfp-h-8 vfp-border-4 vfp-border-line-strong vfp-border-t-spinner-head vfp-rounded-full vfp-animate-spin\" />\n </div>\n <div v-else-if=\"previewError\" class=\"vfp-flex-1 vfp-flex vfp-items-center vfp-justify-center vfp-text-fg-secondary\">{{ previewError }}</div>\n <template v-else>\n <div class=\"vfp-flex-1 vfp-min-h-0 vfp-overflow-hidden vfp-flex vfp-relative vfp-z-0\">\n <LazyFilePreviewContent\n mode=\"embed\"\n :files=\"previewFiles\"\n :current-index=\"0\"\n :zip-nesting-depth=\"nestingDepth + 1\"\n />\n </div>\n </template>\n </div>\n </template>\n </ResizableSplit>\n\n <!-- 文件名 hover tooltip (teleport 到 body 避免被滚动区裁剪) -->\n <Teleport to=\"body\">\n <div\n v-if=\"hoverTip\"\n class=\"vfp-zip-tip\"\n :style=\"{ left: hoverTip.x + 'px', top: hoverTip.y + 'px' }\"\n >\n {{ hoverTip.text }}\n </div>\n </Teleport>\n </template>\n</template>\n\n<style>\n/* 全局 tooltip(不能 scoped,因 Teleport 到 body) */\n.vfp-zip-tip {\n position: fixed;\n z-index: 9999;\n pointer-events: none;\n transform: translateY(-50%);\n padding: 4px 8px;\n background: rgba(0, 0, 0, 0.85);\n color: #fff;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 4px;\n white-space: nowrap;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);\n}\n</style>\n"],"names":["props","__props","containerRef","ref","leftWidth","saved","dragging","isDesktop","activeTab","mq","mqHandler","leftStyle","computed","onMove","e","rect","x","cap","effectiveMax","onUp","onDividerDown","onMounted","onBeforeUnmount","watch","w","switchTab","tab","__expose","_createElementBlock","_Fragment","_createElementVNode","_hoisted_1","_normalizeClass","_withDirectives","_hoisted_2","_renderSlot","_ctx","_hoisted_3","_hoisted_4","__default__","emit","__emit","padStyle","isOpen","isSelected","fileIcon","ft","getFileType","FileImage","FileText","FileCode","FileIcon","handleEnter","handleLeave","_cache","$event","_createVNode","_unref","ChevronRight","_createBlock","_resolveDynamicComponent","FolderOpen","Folder","_toDisplayString","_openBlock","_renderList","child","_component_ZipTreeItem","n","t","r","LazyFilePreviewContent","defineAsyncComponent","useTranslator","fetcher","useFetcher","zip","tree","loading","error","expanded","selected","previewLoading","previewError","hoverTip","splitRef","revokeCurrent","_a","load","res","buf","z","loadZip","entries","listZipEntries","root","buildZipTree","init","c","err","newUrl","totalStats","files","dirs","size","walk","s","handleToggle","path","next","handleHover","text","handleSelect","node","mime","inferMimeType","blob","readZipEntryBlob","blobUrl","previewFiles","RendererError","ResizableSplit","TreeItem","_hoisted_5","_hoisted_6","_hoisted_7","_Teleport"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { defineComponent as d, ref as U, watch as h, openBlock as $, createElementBlock as q, createElementVNode as K, createBlock as x, createVNode as C, unref as ee, h as g, inject as ne, computed as H } from "vue";
2
- import { u as le, a as te, E as ie, L as ue, W as fe, c as oe } from "./index-CQFN4h-t.mjs";
2
+ import { u as le, a as te, E as ie, L as ue, W as fe, c as oe } from "./index-Oxwizt6-.mjs";
3
3
  import { _ as se } from "./RendererError.vue_vue_type_script_setup_true_lang-CbgZBSDr.mjs";
4
4
  import { ChevronDown as ce, ChevronRight as pe } from "lucide-vue-next";
5
5
  function ke(e, f = !1) {
@@ -614,4 +614,4 @@ const D = d({
614
614
  export {
615
615
  Ne as default
616
616
  };
617
- //# sourceMappingURL=index-Cu1up6RM.mjs.map
617
+ //# sourceMappingURL=index-DBw8tvyb.mjs.map