@eternalheart/vue-file-preview 1.3.9 → 1.3.11

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 (125) hide show
  1. package/README.md +4 -0
  2. package/README.zh-CN.md +4 -0
  3. package/lib/FilePreviewContent.vue.d.ts.map +1 -1
  4. package/lib/chunks/RendererError.vue_vue_type_script_setup_true_lang-CbgZBSDr.mjs +31 -0
  5. package/lib/chunks/RendererError.vue_vue_type_script_setup_true_lang-CbgZBSDr.mjs.map +1 -0
  6. package/lib/chunks/avifLoader-BP3fgcMm-BnpxLhxp.mjs +56 -0
  7. package/lib/chunks/avifLoader-BP3fgcMm-BnpxLhxp.mjs.map +1 -0
  8. package/lib/chunks/heicLoader-CH_raQNn-1fBLaICM.mjs +37 -0
  9. package/lib/chunks/heicLoader-CH_raQNn-1fBLaICM.mjs.map +1 -0
  10. package/lib/chunks/index-B3-ezDVJ.mjs +104 -0
  11. package/lib/chunks/index-B3-ezDVJ.mjs.map +1 -0
  12. package/lib/chunks/index-B9RAbllH.mjs +74 -0
  13. package/lib/chunks/index-B9RAbllH.mjs.map +1 -0
  14. package/lib/chunks/{index-BVdw1Cc8.mjs → index-BA-SUKkf.mjs} +54 -58
  15. package/lib/chunks/index-BA-SUKkf.mjs.map +1 -0
  16. package/lib/chunks/index-BHPmd4HF.mjs +12350 -0
  17. package/lib/chunks/index-BHPmd4HF.mjs.map +1 -0
  18. package/lib/chunks/index-BKu5DkdG.mjs +117 -0
  19. package/lib/chunks/index-BKu5DkdG.mjs.map +1 -0
  20. package/lib/chunks/index-BT-U9HYI.mjs +117 -0
  21. package/lib/chunks/index-BT-U9HYI.mjs.map +1 -0
  22. package/lib/chunks/{index-Cfm88ItA.mjs → index-C0vSFXmh.mjs} +93 -96
  23. package/lib/chunks/index-C0vSFXmh.mjs.map +1 -0
  24. package/lib/chunks/index-C65zV1vs.mjs +114 -0
  25. package/lib/chunks/index-C65zV1vs.mjs.map +1 -0
  26. package/lib/chunks/index-CMgtGmRN.mjs +81 -0
  27. package/lib/chunks/index-CMgtGmRN.mjs.map +1 -0
  28. package/lib/chunks/index-CQFN4h-t.mjs +2430 -0
  29. package/lib/chunks/index-CQFN4h-t.mjs.map +1 -0
  30. package/lib/chunks/index-CY2vJrBJ.mjs +166 -0
  31. package/lib/chunks/index-CY2vJrBJ.mjs.map +1 -0
  32. package/lib/chunks/index-Cu1up6RM.mjs +617 -0
  33. package/lib/chunks/index-Cu1up6RM.mjs.map +1 -0
  34. package/lib/chunks/index-DLPnWmJm.mjs +13190 -0
  35. package/lib/chunks/index-DLPnWmJm.mjs.map +1 -0
  36. package/lib/chunks/index-DNFQFaF3.mjs +102 -0
  37. package/lib/chunks/index-DNFQFaF3.mjs.map +1 -0
  38. package/lib/chunks/{index-CYvPRxHK.mjs → index-Dln8hyPZ.mjs} +39 -40
  39. package/lib/chunks/index-Dln8hyPZ.mjs.map +1 -0
  40. package/lib/chunks/{index-_llF_WTY.mjs → index-hRgOoqVw.mjs} +78 -79
  41. package/lib/chunks/index-hRgOoqVw.mjs.map +1 -0
  42. package/lib/chunks/index-ijv9F2cZ.mjs +280 -0
  43. package/lib/chunks/index-ijv9F2cZ.mjs.map +1 -0
  44. package/lib/chunks/index-t1Plo3ud.mjs +140 -0
  45. package/lib/chunks/index-t1Plo3ud.mjs.map +1 -0
  46. package/lib/chunks/index-y7gaKu36.mjs +234 -0
  47. package/lib/chunks/index-y7gaKu36.mjs.map +1 -0
  48. package/lib/chunks/jp2Loader-Bn-qPMbD-Bn-qPMbD.mjs +122 -0
  49. package/lib/chunks/jp2Loader-Bn-qPMbD-Bn-qPMbD.mjs.map +1 -0
  50. package/lib/chunks/psdLoader-Doxw3mWm-DVOGFSlh.mjs +73 -0
  51. package/lib/chunks/psdLoader-Doxw3mWm-DVOGFSlh.mjs.map +1 -0
  52. package/lib/chunks/rawLoader-0mLvxCNp-CJmERiK7.mjs +82 -0
  53. package/lib/chunks/rawLoader-0mLvxCNp-CJmERiK7.mjs.map +1 -0
  54. package/lib/chunks/tiffLoader-CTFKVLqJ-B84NfwhR.mjs +60 -0
  55. package/lib/chunks/tiffLoader-CTFKVLqJ-B84NfwhR.mjs.map +1 -0
  56. package/lib/composables/useRequest.d.ts +2 -2
  57. package/lib/composables/useRequest.d.ts.map +1 -1
  58. package/lib/index.cjs +36 -24
  59. package/lib/index.cjs.map +1 -1
  60. package/lib/index.css +1 -1
  61. package/lib/index.d.ts +1 -1
  62. package/lib/index.d.ts.map +1 -1
  63. package/lib/index.mjs +8 -7
  64. package/lib/renderers/Audio/index.vue.d.ts.map +1 -1
  65. package/lib/renderers/Csv/index.vue.d.ts.map +1 -1
  66. package/lib/renderers/Docx/index.vue.d.ts.map +1 -1
  67. package/lib/renderers/Epub/index.vue.d.ts.map +1 -1
  68. package/lib/renderers/Font/FontPreviewLine.vue.d.ts +18 -0
  69. package/lib/renderers/Font/FontPreviewLine.vue.d.ts.map +1 -0
  70. package/lib/renderers/Font/index.vue.d.ts +6 -0
  71. package/lib/renderers/Font/index.vue.d.ts.map +1 -0
  72. package/lib/renderers/Image/index.vue.d.ts +2 -0
  73. package/lib/renderers/Image/index.vue.d.ts.map +1 -1
  74. package/lib/renderers/Json/index.vue.d.ts.map +1 -1
  75. package/lib/renderers/Markdown/index.vue.d.ts.map +1 -1
  76. package/lib/renderers/Mobi/index.vue.d.ts.map +1 -1
  77. package/lib/renderers/Msg/index.vue.d.ts.map +1 -1
  78. package/lib/renderers/Pdf/index.vue.d.ts.map +1 -1
  79. package/lib/renderers/Pptx/index.vue.d.ts.map +1 -1
  80. package/lib/renderers/RendererError.vue.d.ts +10 -0
  81. package/lib/renderers/RendererError.vue.d.ts.map +1 -0
  82. package/lib/renderers/Subtitle/index.vue.d.ts.map +1 -1
  83. package/lib/renderers/Text/index.vue.d.ts.map +1 -1
  84. package/lib/renderers/Video/index.vue.d.ts +1 -0
  85. package/lib/renderers/Video/index.vue.d.ts.map +1 -1
  86. package/lib/renderers/Xlsx/index.vue.d.ts.map +1 -1
  87. package/lib/renderers/Xml/index.vue.d.ts.map +1 -1
  88. package/lib/renderers/Zip/index.vue.d.ts.map +1 -1
  89. package/lib/renderers/lazy.d.ts +1 -0
  90. package/lib/renderers/lazy.d.ts.map +1 -1
  91. package/lib/shims/stream-stub.d.ts +8 -0
  92. package/lib/shims/stream-stub.d.ts.map +1 -0
  93. package/package.json +14 -3
  94. package/lib/chunks/index-1khRVlUa.mjs +0 -152
  95. package/lib/chunks/index-1khRVlUa.mjs.map +0 -1
  96. package/lib/chunks/index-B9Xz5bUB.mjs +0 -113
  97. package/lib/chunks/index-B9Xz5bUB.mjs.map +0 -1
  98. package/lib/chunks/index-BA-bP8P6.mjs +0 -2157
  99. package/lib/chunks/index-BA-bP8P6.mjs.map +0 -1
  100. package/lib/chunks/index-BP_8GjEV.mjs +0 -129
  101. package/lib/chunks/index-BP_8GjEV.mjs.map +0 -1
  102. package/lib/chunks/index-BVdw1Cc8.mjs.map +0 -1
  103. package/lib/chunks/index-BqSPk90T.mjs +0 -84
  104. package/lib/chunks/index-BqSPk90T.mjs.map +0 -1
  105. package/lib/chunks/index-BrCSk7CK.mjs +0 -116
  106. package/lib/chunks/index-BrCSk7CK.mjs.map +0 -1
  107. package/lib/chunks/index-Bu8GH1aq.mjs +0 -77
  108. package/lib/chunks/index-Bu8GH1aq.mjs.map +0 -1
  109. package/lib/chunks/index-CYvPRxHK.mjs.map +0 -1
  110. package/lib/chunks/index-Cfm88ItA.mjs.map +0 -1
  111. package/lib/chunks/index-CxKVonec.mjs +0 -139
  112. package/lib/chunks/index-CxKVonec.mjs.map +0 -1
  113. package/lib/chunks/index-D6RuC1es.mjs +0 -111
  114. package/lib/chunks/index-D6RuC1es.mjs.map +0 -1
  115. package/lib/chunks/index-DEyjEp-i.mjs +0 -353
  116. package/lib/chunks/index-DEyjEp-i.mjs.map +0 -1
  117. package/lib/chunks/index-DFEd3JaR.mjs +0 -103
  118. package/lib/chunks/index-DFEd3JaR.mjs.map +0 -1
  119. package/lib/chunks/index-DjvWRo53.mjs +0 -281
  120. package/lib/chunks/index-DjvWRo53.mjs.map +0 -1
  121. package/lib/chunks/index-H-QlBdbJ.mjs +0 -134
  122. package/lib/chunks/index-H-QlBdbJ.mjs.map +0 -1
  123. package/lib/chunks/index-_llF_WTY.mjs.map +0 -1
  124. package/lib/chunks/index-oQRFKvtz.mjs +0 -111
  125. package/lib/chunks/index-oQRFKvtz.mjs.map +0 -1
package/README.md CHANGED
@@ -232,6 +232,10 @@ Differences from `FilePreviewModal`:
232
232
  - **Excel**: XLSX format support
233
233
  - **PowerPoint**: PPTX/PPT format support, slide preview
234
234
 
235
+ ### Fonts
236
+ - **Formats**: TTF, OTF, WOFF, WOFF2
237
+ - **Features**: Font metadata (family, designer, version), character set preview, custom text input, multi-size display
238
+
235
239
  ### Code & Text
236
240
  - **Markdown**: GitHub Flavored Markdown, code highlighting
237
241
  - **Code Files**: JS, TS, Python, Java, C++, Go, Rust, and 40+ languages
package/README.zh-CN.md CHANGED
@@ -232,6 +232,10 @@ const files = [
232
232
  - **Excel**: XLSX 格式支持
233
233
  - **PowerPoint**: PPTX/PPT 格式支持、幻灯片预览
234
234
 
235
+ ### 字体
236
+ - **格式**: TTF, OTF, WOFF, WOFF2
237
+ - **功能**: 字体元数据(字体家族、设计师、版本)、字符集预览、自定义文本输入、多字号展示
238
+
235
239
  ### 代码 & 文本
236
240
  - **Markdown**: GitHub Flavored Markdown,代码高亮
237
241
  - **代码文件**: JS, TS, Python, Java, C++, Go, Rust 等 40+ 种语言
@@ -1 +1 @@
1
- {"version":3,"file":"FilePreviewContent.vue.d.ts","sourceRoot":"","sources":["../src/FilePreviewContent.vue"],"names":[],"mappings":"AAoxBA,OAAO,EAIL,KAAK,WAAW,EAChB,KAAK,gBAAgB,EACrB,KAAK,MAAM,EACX,KAAK,QAAQ,EACb,KAAK,KAAK,EACV,KAAK,0BAA0B,EAC/B,KAAK,cAAc,EACnB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACvB,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EAAE,cAAc,EAAyB,MAAM,SAAS,CAAC;AAqCrE,UAAU,KAAK;IACb,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,cAAc,EAAE,CAAC;IACnC,kCAAkC;IAClC,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;IACzB,qCAAqC;IACrC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS;IACT,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IACtD,8BAA8B;IAC9B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,qBAAqB;IACrB,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,mDAAmD;IACnD,WAAW,CAAC,EAAE,kBAAkB,CAAC;IACjC,4BAA4B;IAC5B,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,4EAA4E;IAC5E,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,4CAA4C;IAC5C,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1D;;;;;;;;;;iBAPe,kBAAkB;oBAEf,cAAc;UAdxB,OAAO,GAAG,OAAO;WAUhB,KAAK;qBAZK,cAAc,EAAE;qBAIhB,MAAM;YAEf,MAAM;cAEJ,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;cAE1C,OAAO;uBAQE,iBAAiB;gBAExB,CAAC,IAAI,EAAE,WAAW,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;;AAwsC1D,wBAQG"}
1
+ {"version":3,"file":"FilePreviewContent.vue.d.ts","sourceRoot":"","sources":["../src/FilePreviewContent.vue"],"names":[],"mappings":"AAwyBA,OAAO,EAIL,KAAK,WAAW,EAChB,KAAK,gBAAgB,EACrB,KAAK,MAAM,EACX,KAAK,QAAQ,EACb,KAAK,KAAK,EACV,KAAK,0BAA0B,EAC/B,KAAK,cAAc,EACnB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACvB,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EAAE,cAAc,EAAyB,MAAM,SAAS,CAAC;AAsCrE,UAAU,KAAK;IACb,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,cAAc,EAAE,CAAC;IACnC,kCAAkC;IAClC,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;IACzB,qCAAqC;IACrC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS;IACT,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IACtD,8BAA8B;IAC9B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,qBAAqB;IACrB,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,mDAAmD;IACnD,WAAW,CAAC,EAAE,kBAAkB,CAAC;IACjC,4BAA4B;IAC5B,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,4EAA4E;IAC5E,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,4CAA4C;IAC5C,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1D;;;;;;;;;;iBAPe,kBAAkB;oBAEf,cAAc;UAdxB,OAAO,GAAG,OAAO;WAUhB,KAAK;qBAZK,cAAc,EAAE;qBAIhB,MAAM;YAEf,MAAM;cAEJ,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;cAE1C,OAAO;uBAQE,iBAAiB;gBAExB,CAAC,IAAI,EAAE,WAAW,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;;AAyuC1D,wBAQG"}
@@ -0,0 +1,31 @@
1
+ import { defineComponent as p, openBlock as t, createElementBlock as f, createElementVNode as s, createVNode as c, unref as n, createCommentVNode as r, toDisplayString as o } from "vue";
2
+ import { AlertCircle as l } from "lucide-vue-next";
3
+ const v = { class: "vfp-flex vfp-items-center vfp-justify-center vfp-w-full vfp-h-full" }, a = { class: "vfp-text-center" }, i = {
4
+ key: 0,
5
+ class: "vfp-w-16 vfp-h-16 vfp-mx-auto vfp-mb-4 vfp-rounded-full vfp-bg-red-500/10 vfp-flex vfp-items-center vfp-justify-center"
6
+ }, d = { class: "vfp-text-lg md:vfp-text-xl vfp-font-medium vfp-text-fg-primary vfp-mb-2" }, m = {
7
+ key: 1,
8
+ class: "vfp-text-sm vfp-text-fg-tertiary"
9
+ }, y = /* @__PURE__ */ p({
10
+ __name: "RendererError",
11
+ props: {
12
+ message: {},
13
+ detail: {},
14
+ showIcon: { type: Boolean, default: !0 }
15
+ },
16
+ setup(e) {
17
+ return (u, x) => (t(), f("div", v, [
18
+ s("div", a, [
19
+ e.showIcon ? (t(), f("div", i, [
20
+ c(n(l), { class: "vfp-w-8 vfp-h-8 vfp-text-red-400" })
21
+ ])) : r("", !0),
22
+ s("p", d, o(e.message), 1),
23
+ e.detail ? (t(), f("p", m, o(e.detail), 1)) : r("", !0)
24
+ ])
25
+ ]));
26
+ }
27
+ });
28
+ export {
29
+ y as _
30
+ };
31
+ //# sourceMappingURL=RendererError.vue_vue_type_script_setup_true_lang-CbgZBSDr.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RendererError.vue_vue_type_script_setup_true_lang-CbgZBSDr.mjs","sources":["../../src/renderers/RendererError.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { AlertCircle } from 'lucide-vue-next';\n\ninterface Props {\n message: string;\n detail?: string;\n showIcon?: boolean;\n}\n\nwithDefaults(defineProps<Props>(), {\n showIcon: true,\n});\n</script>\n\n<template>\n <div class=\"vfp-flex vfp-items-center vfp-justify-center vfp-w-full vfp-h-full\">\n <div class=\"vfp-text-center\">\n <div\n v-if=\"showIcon\"\n class=\"vfp-w-16 vfp-h-16 vfp-mx-auto vfp-mb-4 vfp-rounded-full vfp-bg-red-500/10 vfp-flex vfp-items-center vfp-justify-center\"\n >\n <AlertCircle class=\"vfp-w-8 vfp-h-8 vfp-text-red-400\" />\n </div>\n <p class=\"vfp-text-lg md:vfp-text-xl vfp-font-medium vfp-text-fg-primary vfp-mb-2\">\n {{ message }}\n </p>\n <p v-if=\"detail\" class=\"vfp-text-sm vfp-text-fg-tertiary\">\n {{ detail }}\n </p>\n </div>\n </div>\n</template>\n"],"names":["_openBlock","_createElementBlock","_hoisted_1","_createElementVNode","_hoisted_2","__props","_hoisted_3","_createVNode","_unref","AlertCircle","_hoisted_4","_toDisplayString","_hoisted_5"],"mappings":";;;;;;;;;;;;;;;;sBAeEA,EAAA,GAAAC,EAeM,OAfNC,GAeM;AAAA,MAdJC,EAaM,OAbNC,GAaM;AAAA,QAXIC,EAAA,YADRL,EAAA,GAAAC,EAKM,OALNK,GAKM;AAAA,UADJC,EAAwDC,EAAAC,CAAA,GAAA,EAA3C,OAAM,oCAAkC;AAAA,QAAA;QAEvDN,EAEI,KAFJO,GAEIC,EADCN,EAAA,OAAO,GAAA,CAAA;AAAA,QAEHA,EAAA,eAATJ,EAEI,KAFJW,GAEID,EADCN,EAAA,MAAM,GAAA,CAAA;;;;;"}
@@ -0,0 +1,56 @@
1
+ let a = null;
2
+ async function B() {
3
+ return a !== null ? a : new Promise((n) => {
4
+ const A = new Image();
5
+ A.onload = () => {
6
+ a = A.width === 1 && A.height === 1, n(a);
7
+ }, A.onerror = () => {
8
+ a = !1, n(!1);
9
+ }, A.src = "data:image/avif;base64,AAAAIGZ0eXBhdmlmAAAAAGF2aWZtaWYxbWlhZk1BMUIAAADybWV0YQAAAAAAAAAoaGRscgAAAAAAAAAAcGljdAAAAAAAAAAAAAAAAGxpYmF2aWYAAAAADnBpdG0AAAAAAAEAAAAeaWxvYwAAAABEAAABAAEAAAABAAABGgAAAB0AAAAoaWluZgAAAAAAAQAAABppbmZlAgAAAAABAABhdjAxQ29sb3IAAAAAamlwcnAAAABLaXBjbwAAABRpc3BlAAAAAAAAAAEAAAABAAAAEHBpeGkAAAAAAwgICAAAAAxhdjFDgQAMAAAAABNjb2xybmNseAACAAIABoAAAAAXaXBtYQAAAAAAAAABAAEEAQKDBAAAACVtZGF0EgAKCBgABogQEDQgMgkQAAAAB8dSLfI=";
10
+ });
11
+ }
12
+ class d {
13
+ /**
14
+ * 检测是否需要解码:仅在浏览器不原生支持 AVIF 时需要
15
+ */
16
+ async needsDecode(A) {
17
+ return A !== "image/avif" ? !1 : !await B();
18
+ }
19
+ /**
20
+ * 解码 AVIF 文件为 PNG Blob
21
+ */
22
+ async decode(A, r) {
23
+ if (await B())
24
+ return A instanceof Blob ? A : new Blob([A], { type: "image/avif" });
25
+ try {
26
+ const e = await import("@jsquash/avif"), l = A instanceof Blob ? await A.arrayBuffer() : A, o = await e.decode(l), t = document.createElement("canvas");
27
+ t.width = o.width, t.height = o.height;
28
+ const i = t.getContext("2d");
29
+ if (!i)
30
+ throw new Error("无法创建 Canvas 2D 上下文");
31
+ return i.putImageData(o, 0, 0), new Promise((c, g) => {
32
+ t.toBlob(
33
+ (s) => {
34
+ s ? c(s) : g(new Error("AVIF Canvas 转换为 PNG 失败"));
35
+ },
36
+ (r == null ? void 0 : r.outputFormat) || "image/png"
37
+ );
38
+ });
39
+ } catch (e) {
40
+ throw new Error(`AVIF 解码失败: ${(e == null ? void 0 : e.message) || "未知错误"}`);
41
+ }
42
+ }
43
+ /**
44
+ * 获取 AVIF 元数据
45
+ */
46
+ async getMetadata(A) {
47
+ return {
48
+ format: "avif"
49
+ };
50
+ }
51
+ }
52
+ const w = new d();
53
+ export {
54
+ w as default
55
+ };
56
+ //# sourceMappingURL=avifLoader-BP3fgcMm-BnpxLhxp.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"avifLoader-BP3fgcMm-BnpxLhxp.mjs","sources":["../../../file-preview-core/lib/avifLoader-BP3fgcMm.js"],"sourcesContent":["let e = null;\nasync function c() {\n return e !== null ? e : new Promise((n) => {\n const A = new Image();\n A.onload = () => {\n e = A.width === 1 && A.height === 1, n(e);\n }, A.onerror = () => {\n e = !1, n(!1);\n }, A.src = \"data:image/avif;base64,AAAAIGZ0eXBhdmlmAAAAAGF2aWZtaWYxbWlhZk1BMUIAAADybWV0YQAAAAAAAAAoaGRscgAAAAAAAAAAcGljdAAAAAAAAAAAAAAAAGxpYmF2aWYAAAAADnBpdG0AAAAAAAEAAAAeaWxvYwAAAABEAAABAAEAAAABAAABGgAAAB0AAAAoaWluZgAAAAAAAQAAABppbmZlAgAAAAABAABhdjAxQ29sb3IAAAAAamlwcnAAAABLaXBjbwAAABRpc3BlAAAAAAAAAAEAAAABAAAAEHBpeGkAAAAAAwgICAAAAAxhdjFDgQAMAAAAABNjb2xybmNseAACAAIABoAAAAAXaXBtYQAAAAAAAAABAAEEAQKDBAAAACVtZGF0EgAKCBgABogQEDQgMgkQAAAAB8dSLfI=\";\n });\n}\nclass f {\n /**\n * 检测是否需要解码:仅在浏览器不原生支持 AVIF 时需要\n */\n async needsDecode(A) {\n return A !== \"image/avif\" ? !1 : !await c();\n }\n /**\n * 解码 AVIF 文件为 PNG Blob\n */\n async decode(A, r) {\n if (await c())\n return A instanceof Blob ? A : new Blob([A], { type: \"image/avif\" });\n try {\n const a = await import(\"@jsquash/avif\"), i = A instanceof Blob ? await A.arrayBuffer() : A, o = await a.decode(i), t = document.createElement(\"canvas\");\n t.width = o.width, t.height = o.height;\n const s = t.getContext(\"2d\");\n if (!s)\n throw new Error(\"无法创建 Canvas 2D 上下文\");\n return s.putImageData(o, 0, 0), new Promise((g, d) => {\n t.toBlob(\n (B) => {\n B ? g(B) : d(new Error(\"AVIF Canvas 转换为 PNG 失败\"));\n },\n (r == null ? void 0 : r.outputFormat) || \"image/png\"\n );\n });\n } catch (a) {\n throw new Error(`AVIF 解码失败: ${(a == null ? void 0 : a.message) || \"未知错误\"}`);\n }\n }\n /**\n * 获取 AVIF 元数据\n */\n async getMetadata(A) {\n return {\n format: \"avif\"\n };\n }\n}\nconst m = new f();\nexport {\n m as default\n};\n//# sourceMappingURL=avifLoader-BP3fgcMm.js.map\n"],"names":["e","c","f","a","i","s","g","d","B","m"],"mappings":"AAAA,IAAIA,IAAI;AACR,eAAeC,IAAI;AACjB,SAAOD,MAAM,OAAOA,IAAI,IAAI,QAAQ,CAAC,MAAM;AACzC,UAAM,IAAI,IAAI,MAAK;AACnB,MAAE,SAAS,MAAM;AACf,MAAAA,IAAI,EAAE,UAAU,KAAK,EAAE,WAAW,GAAG,EAAEA,CAAC;AAAA,IAC1C,GAAG,EAAE,UAAU,MAAM;AACnB,MAAAA,IAAI,IAAI,EAAE,EAAE;AAAA,IACd,GAAG,EAAE,MAAM;AAAA,EACb,CAAC;AACH;AACA,MAAME,EAAE;AAAA;AAAA;AAAA;AAAA,EAIN,MAAM,YAAY,GAAG;AACnB,WAAO,MAAM,eAAe,KAAK,CAAC,MAAMD,EAAC;AAAA,EAC3C;AAAA;AAAA;AAAA;AAAA,EAIA,MAAM,OAAO,GAAG,GAAG;AACjB,QAAI,MAAMA,EAAC;AACT,aAAO,aAAa,OAAO,IAAI,IAAI,KAAK,CAAC,CAAC,GAAG,EAAE,MAAM,cAAc;AACrE,QAAI;AACF,YAAME,IAAI,MAAM,OAAO,eAAe,GAAGC,IAAI,aAAa,OAAO,MAAM,EAAE,YAAW,IAAK,GAAG,IAAI,MAAMD,EAAE,OAAOC,CAAC,GAAG,IAAI,SAAS,cAAc,QAAQ;AACtJ,QAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE;AAChC,YAAMC,IAAI,EAAE,WAAW,IAAI;AAC3B,UAAI,CAACA;AACH,cAAM,IAAI,MAAM,oBAAoB;AACtC,aAAOA,EAAE,aAAa,GAAG,GAAG,CAAC,GAAG,IAAI,QAAQ,CAACC,GAAGC,MAAM;AACpD,UAAE;AAAA,UACA,CAACC,MAAM;AACL,YAAAA,IAAIF,EAAEE,CAAC,IAAID,EAAE,IAAI,MAAM,wBAAwB,CAAC;AAAA,UAClD;AAAA,WACC,KAAK,OAAO,SAAS,EAAE,iBAAiB;AAAA,QACnD;AAAA,MACM,CAAC;AAAA,IACH,SAASJ,GAAG;AACV,YAAM,IAAI,MAAM,eAAeA,KAAK,OAAO,SAASA,EAAE,YAAY,MAAM,EAAE;AAAA,IAC5E;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAIA,MAAM,YAAY,GAAG;AACnB,WAAO;AAAA,MACL,QAAQ;AAAA,IACd;AAAA,EACE;AACF;AACK,MAACM,IAAI,IAAIP,EAAC;"}
@@ -0,0 +1,37 @@
1
+ class l {
2
+ /**
3
+ * HEIC 格式浏览器均不原生支持,始终需要解码
4
+ */
5
+ async needsDecode(a) {
6
+ return a === "image/heic" || a === "image/heif";
7
+ }
8
+ /**
9
+ * 解码 HEIC 文件为 JPEG Blob
10
+ */
11
+ async decode(a, r) {
12
+ var n, o;
13
+ try {
14
+ const e = await import("heic2any"), i = a instanceof Blob ? a : new Blob([a], { type: "image/heic" }), t = await e.default({
15
+ blob: i,
16
+ toType: (r == null ? void 0 : r.outputFormat) || "image/jpeg",
17
+ quality: 0.9
18
+ });
19
+ return Array.isArray(t) ? t[0] : t;
20
+ } catch (e) {
21
+ throw (n = e == null ? void 0 : e.message) != null && n.includes("DRM") || (o = e == null ? void 0 : e.message) != null && o.includes("protected") ? new Error("HEIC 解码失败,文件受 DRM 保护") : new Error(`HEIC 解码失败,文件可能损坏: ${(e == null ? void 0 : e.message) || "未知错误"}`);
22
+ }
23
+ }
24
+ /**
25
+ * 获取 HEIC 元数据(当前版本暂不实现,返回空对象)
26
+ */
27
+ async getMetadata(a) {
28
+ return {
29
+ format: "heic"
30
+ };
31
+ }
32
+ }
33
+ const c = new l();
34
+ export {
35
+ c as default
36
+ };
37
+ //# sourceMappingURL=heicLoader-CH_raQNn-1fBLaICM.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"heicLoader-CH_raQNn-1fBLaICM.mjs","sources":["../../../file-preview-core/lib/heicLoader-CH_raQNn.js"],"sourcesContent":["class r {\n /**\n * HEIC 格式浏览器均不原生支持,始终需要解码\n */\n async needsDecode(a) {\n return a === \"image/heic\" || a === \"image/heif\";\n }\n /**\n * 解码 HEIC 文件为 JPEG Blob\n */\n async decode(a, t) {\n var s, n;\n try {\n const e = await import(\"heic2any\"), i = a instanceof Blob ? a : new Blob([a], { type: \"image/heic\" }), c = await e.default({\n blob: i,\n toType: (t == null ? void 0 : t.outputFormat) || \"image/jpeg\",\n quality: 0.9\n });\n return Array.isArray(c) ? c[0] : c;\n } catch (e) {\n throw (s = e == null ? void 0 : e.message) != null && s.includes(\"DRM\") || (n = e == null ? void 0 : e.message) != null && n.includes(\"protected\") ? new Error(\"HEIC 解码失败,文件受 DRM 保护\") : new Error(`HEIC 解码失败,文件可能损坏: ${(e == null ? void 0 : e.message) || \"未知错误\"}`);\n }\n }\n /**\n * 获取 HEIC 元数据(当前版本暂不实现,返回空对象)\n */\n async getMetadata(a) {\n return {\n format: \"heic\"\n };\n }\n}\nconst u = new r();\nexport {\n u as default\n};\n//# sourceMappingURL=heicLoader-CH_raQNn.js.map\n"],"names":["r","t","s","n","c","u"],"mappings":"AAAA,MAAMA,EAAE;AAAA;AAAA;AAAA;AAAA,EAIN,MAAM,YAAY,GAAG;AACnB,WAAO,MAAM,gBAAgB,MAAM;AAAA,EACrC;AAAA;AAAA;AAAA;AAAA,EAIA,MAAM,OAAO,GAAGC,GAAG;AACjB,QAAIC,GAAGC;AACP,QAAI;AACF,YAAM,IAAI,MAAM,OAAO,UAAU,GAAG,IAAI,aAAa,OAAO,IAAI,IAAI,KAAK,CAAC,CAAC,GAAG,EAAE,MAAM,aAAY,CAAE,GAAGC,IAAI,MAAM,EAAE,QAAQ;AAAA,QACzH,MAAM;AAAA,QACN,SAASH,KAAK,OAAO,SAASA,EAAE,iBAAiB;AAAA,QACjD,SAAS;AAAA,MACjB,CAAO;AACD,aAAO,MAAM,QAAQG,CAAC,IAAIA,EAAE,CAAC,IAAIA;AAAA,IACnC,SAAS,GAAG;AACV,aAAOF,IAAI,KAAK,OAAO,SAAS,EAAE,YAAY,QAAQA,EAAE,SAAS,KAAK,MAAMC,IAAI,KAAK,OAAO,SAAS,EAAE,YAAY,QAAQA,EAAE,SAAS,WAAW,IAAI,IAAI,MAAM,sBAAsB,IAAI,IAAI,MAAM,sBAAsB,KAAK,OAAO,SAAS,EAAE,YAAY,MAAM,EAAE;AAAA,IACtQ;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAIA,MAAM,YAAY,GAAG;AACnB,WAAO;AAAA,MACL,QAAQ;AAAA,IACd;AAAA,EACE;AACF;AACK,MAACE,IAAI,IAAIL,EAAC;"}
@@ -0,0 +1,104 @@
1
+ import { defineComponent as k, ref as p, onMounted as T, watch as D, onBeforeUnmount as M, openBlock as v, createElementBlock as h, createElementVNode as m, toDisplayString as S, unref as z, createCommentVNode as w, createBlock as C, normalizeStyle as N } from "vue";
2
+ import B from "x-data-spreadsheet";
3
+ /* empty css */
4
+ import { u as E, a as H, E as R, S as W, M as U, U as V } from "./index-CQFN4h-t.mjs";
5
+ import { _ as F } from "./RendererError.vue_vue_type_script_setup_true_lang-CbgZBSDr.mjs";
6
+ const L = { class: "vfp-relative vfp-flex vfp-flex-col vfp-items-center vfp-w-full vfp-h-full" }, O = {
7
+ key: 0,
8
+ class: "vfp-absolute vfp-inset-0 vfp-flex vfp-items-center vfp-justify-center vfp-bg-surface-toolbar vfp-backdrop-blur-sm vfp-z-10"
9
+ }, j = { class: "vfp-text-center" }, q = { class: "vfp-text-xs md:vfp-text-sm vfp-text-fg-secondary vfp-font-medium" }, K = /* @__PURE__ */ k({
10
+ __name: "index",
11
+ props: {
12
+ url: {},
13
+ fileName: {}
14
+ },
15
+ setup(_) {
16
+ const i = _, { t: b } = E(), y = H(), n = p(!0), a = p(null), s = p(null);
17
+ let r = null, f = null, o = null, u = { width: 0, height: 0 };
18
+ const d = () => {
19
+ if (!s.value) return { width: 800, height: 600 };
20
+ const t = s.value.clientWidth, e = s.value.clientHeight, l = t > 100 ? t : 800, c = e > 100 ? e : 600;
21
+ return { width: l, height: c };
22
+ }, g = () => {
23
+ if (!s.value || !r) return;
24
+ s.value.innerHTML = "";
25
+ const { width: t, height: e } = d(), l = t < 640;
26
+ new B(s.value, {
27
+ mode: "read",
28
+ showToolbar: !1,
29
+ showContextmenu: !1,
30
+ showGrid: !0,
31
+ row: {
32
+ len: 100,
33
+ height: 25
34
+ },
35
+ col: {
36
+ len: 26,
37
+ width: l ? 80 : 100,
38
+ indexWidth: l ? 40 : 60,
39
+ minWidth: l ? 40 : 60
40
+ },
41
+ view: {
42
+ height: () => e,
43
+ width: () => t
44
+ }
45
+ }).loadData(r);
46
+ }, x = async () => {
47
+ if (s.value) {
48
+ n.value = !0, a.value = null;
49
+ try {
50
+ const t = await R(i.url, { fetcher: y.value }), e = W(t, { delimiter: U(i.fileName) });
51
+ r = V(e.header, e.rows, i.fileName), g(), n.value = !1;
52
+ } catch (t) {
53
+ console.error("CSV 解析错误:", t), a.value = b.value("csv.load_failed"), n.value = !1;
54
+ }
55
+ }
56
+ };
57
+ return T(() => {
58
+ if (!s.value) return;
59
+ let t = !0;
60
+ f = new ResizeObserver(() => {
61
+ if (t) {
62
+ t = !1, u = d();
63
+ return;
64
+ }
65
+ const e = d(), l = Math.abs(u.width - e.width), c = Math.abs(u.height - e.height);
66
+ l < 10 && c < 10 || (u = e, o !== null && clearTimeout(o), o = window.setTimeout(() => {
67
+ r && g();
68
+ }, 500));
69
+ }), f.observe(s.value), setTimeout(() => {
70
+ requestAnimationFrame(() => x());
71
+ }, 100);
72
+ }), D(
73
+ () => i.url,
74
+ () => {
75
+ x();
76
+ }
77
+ ), M(() => {
78
+ f && f.disconnect(), o !== null && clearTimeout(o), r = null, s.value && (s.value.innerHTML = "");
79
+ }), (t, e) => (v(), h("div", L, [
80
+ n.value ? (v(), h("div", O, [
81
+ m("div", j, [
82
+ e[0] || (e[0] = m("div", { class: "vfp-w-10 vfp-h-10 md:vfp-w-12 md:vfp-h-12 vfp-mx-auto vfp-mb-3 vfp-border-4 vfp-border-line-strong vfp-border-t-spinner-head vfp-rounded-full vfp-animate-spin" }, null, -1)),
83
+ m("p", q, S(z(b)("csv.loading")), 1)
84
+ ])
85
+ ])) : w("", !0),
86
+ a.value && !n.value ? (v(), C(F, {
87
+ key: 1,
88
+ message: a.value,
89
+ class: "vfp-absolute vfp-inset-0 vfp-bg-surface-toolbar vfp-backdrop-blur-sm vfp-z-10"
90
+ }, null, 8, ["message"])) : w("", !0),
91
+ a.value ? w("", !0) : (v(), h("div", {
92
+ key: 2,
93
+ ref_key: "containerRef",
94
+ ref: s,
95
+ class: "xlsx-spreadsheet-container vfp-w-full vfp-h-full",
96
+ style: N({ opacity: n.value ? 0 : 1 })
97
+ }, null, 4))
98
+ ]));
99
+ }
100
+ });
101
+ export {
102
+ K as default
103
+ };
104
+ //# sourceMappingURL=index-B3-ezDVJ.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-B3-ezDVJ.mjs","sources":["../../src/renderers/Csv/index.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ref, watch, onMounted, onBeforeUnmount } from 'vue';\nimport Spreadsheet from 'x-data-spreadsheet';\nimport 'x-data-spreadsheet/dist/xspreadsheet.css';\nimport {\n parseCsv,\n guessCsvDelimiter,\n fetchTextUtf8,\n convertCsvToSpreadsheetData,\n} from '@eternalheart/file-preview-core';\nimport { useTranslator } from '../../composables/useTranslator';\nimport { useFetcher } from '../../composables/useRequest';\nimport RendererError from '../RendererError.vue';\n\nconst props = defineProps<{\n url: string;\n fileName: string;\n}>();\n\nconst { t } = useTranslator();\nconst fetcher = useFetcher();\n\nconst loading = ref(true);\nconst error = ref<string | null>(null);\nconst containerRef = ref<HTMLDivElement | null>(null);\nlet sheetData: Record<string, unknown>[] | null = null;\nlet resizeObserver: ResizeObserver | null = null;\nlet resizeTimeout: number | null = null;\nlet lastDimensions = { width: 0, height: 0 };\n\nconst calculateDimensions = () => {\n if (!containerRef.value) return { width: 800, height: 600 };\n const rawWidth = containerRef.value.clientWidth;\n const rawHeight = containerRef.value.clientHeight;\n const width = rawWidth > 100 ? rawWidth : 800;\n const height = rawHeight > 100 ? rawHeight : 600;\n return { width, height };\n};\n\nconst mountSpreadsheet = () => {\n if (!containerRef.value || !sheetData) return;\n\n containerRef.value.innerHTML = '';\n\n const { width, height } = calculateDimensions();\n const isMobile = width < 640;\n\n const s = new Spreadsheet(containerRef.value, {\n mode: 'read',\n showToolbar: false,\n showContextmenu: false,\n showGrid: true,\n row: {\n len: 100,\n height: 25,\n },\n col: {\n len: 26,\n width: isMobile ? 80 : 100,\n indexWidth: isMobile ? 40 : 60,\n minWidth: isMobile ? 40 : 60,\n },\n view: {\n height: () => height,\n width: () => width,\n },\n });\n\n s.loadData(sheetData as unknown as Record<string, unknown>);\n};\n\nconst loadCsv = async () => {\n if (!containerRef.value) return;\n\n loading.value = true;\n error.value = null;\n\n try {\n const text = await fetchTextUtf8(props.url, { fetcher: fetcher.value });\n const parsed = parseCsv(text, { delimiter: guessCsvDelimiter(props.fileName) });\n const data = convertCsvToSpreadsheetData(parsed.header, parsed.rows, props.fileName);\n\n sheetData = data as unknown as Record<string, unknown>[];\n mountSpreadsheet();\n loading.value = false;\n } catch (err) {\n console.error('CSV 解析错误:', err);\n error.value = t.value('csv.load_failed');\n loading.value = false;\n }\n};\n\nonMounted(() => {\n if (!containerRef.value) return;\n\n let isInitialRender = true;\n\n resizeObserver = new ResizeObserver(() => {\n if (isInitialRender) {\n isInitialRender = false;\n lastDimensions = calculateDimensions();\n return;\n }\n\n const newDimensions = calculateDimensions();\n const widthDiff = Math.abs(lastDimensions.width - newDimensions.width);\n const heightDiff = Math.abs(lastDimensions.height - newDimensions.height);\n\n if (widthDiff < 10 && heightDiff < 10) return;\n\n lastDimensions = newDimensions;\n\n if (resizeTimeout !== null) clearTimeout(resizeTimeout);\n\n resizeTimeout = window.setTimeout(() => {\n if (sheetData) mountSpreadsheet();\n }, 500);\n });\n\n resizeObserver.observe(containerRef.value);\n\n setTimeout(() => {\n requestAnimationFrame(() => loadCsv());\n }, 100);\n});\n\nwatch(\n () => props.url,\n () => {\n loadCsv();\n }\n);\n\nonBeforeUnmount(() => {\n if (resizeObserver) resizeObserver.disconnect();\n if (resizeTimeout !== null) clearTimeout(resizeTimeout);\n sheetData = null;\n if (containerRef.value) containerRef.value.innerHTML = '';\n});\n</script>\n\n<template>\n <div class=\"vfp-relative vfp-flex vfp-flex-col vfp-items-center vfp-w-full vfp-h-full\">\n <div\n v-if=\"loading\"\n class=\"vfp-absolute vfp-inset-0 vfp-flex vfp-items-center vfp-justify-center vfp-bg-surface-toolbar vfp-backdrop-blur-sm vfp-z-10\"\n >\n <div class=\"vfp-text-center\">\n <div\n class=\"vfp-w-10 vfp-h-10 md:vfp-w-12 md:vfp-h-12 vfp-mx-auto vfp-mb-3 vfp-border-4 vfp-border-line-strong vfp-border-t-spinner-head vfp-rounded-full vfp-animate-spin\"\n />\n <p class=\"vfp-text-xs md:vfp-text-sm vfp-text-fg-secondary vfp-font-medium\">{{ t('csv.loading') }}</p>\n </div>\n </div>\n\n <RendererError\n v-if=\"error && !loading\"\n :message=\"error\"\n class=\"vfp-absolute vfp-inset-0 vfp-bg-surface-toolbar vfp-backdrop-blur-sm vfp-z-10\"\n />\n\n <div\n v-if=\"!error\"\n ref=\"containerRef\"\n class=\"xlsx-spreadsheet-container vfp-w-full vfp-h-full\"\n :style=\"{ opacity: loading ? 0 : 1 }\"\n />\n </div>\n</template>\n"],"names":["props","__props","t","useTranslator","fetcher","useFetcher","loading","ref","error","containerRef","sheetData","resizeObserver","resizeTimeout","lastDimensions","calculateDimensions","rawWidth","rawHeight","width","height","mountSpreadsheet","isMobile","Spreadsheet","loadCsv","text","fetchTextUtf8","parsed","parseCsv","guessCsvDelimiter","convertCsvToSpreadsheetData","err","onMounted","isInitialRender","newDimensions","widthDiff","heightDiff","watch","onBeforeUnmount","_openBlock","_createElementBlock","_hoisted_1","_hoisted_2","_createElementVNode","_hoisted_3","_hoisted_4","_toDisplayString","_unref","_createBlock","RendererError"],"mappings":"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"}
@@ -0,0 +1,74 @@
1
+ import { defineComponent as y, ref as n, computed as _, watch as d, openBlock as e, createElementBlock as o, createElementVNode as m, createBlock as x, normalizeClass as h, toDisplayString as k } from "vue";
2
+ import { u as b, a as T, c as B, y as E, E as N, _ as H } from "./index-CQFN4h-t.mjs";
3
+ import { codeToHtml as W } from "shiki";
4
+ import { _ as C } from "./RendererError.vue_vue_type_script_setup_true_lang-CbgZBSDr.mjs";
5
+ const L = {
6
+ key: 0,
7
+ class: "vfp-flex vfp-items-center vfp-justify-center vfp-w-full vfp-h-full"
8
+ }, M = {
9
+ key: 2,
10
+ class: "vfp-w-full vfp-h-full vfp-bg-surface-toolbar"
11
+ }, P = ["srcdoc", "title"], j = {
12
+ key: 3,
13
+ class: "vfp-w-full vfp-h-full vfp-overflow-auto",
14
+ style: { background: "var(--fp-code-bg)" }
15
+ }, z = ["innerHTML"], D = /* @__PURE__ */ y({
16
+ __name: "index",
17
+ props: {
18
+ url: {},
19
+ fileName: {},
20
+ wordWrap: { type: Boolean, default: !0 },
21
+ htmlPreview: { type: Boolean, default: !1 }
22
+ },
23
+ setup(l) {
24
+ const u = l, { t: w } = b(), g = T(), c = B(), r = n(""), t = n(""), v = n(!0), s = n(null), f = _(() => E(u.fileName)), i = async () => {
25
+ v.value = !0, s.value = null;
26
+ try {
27
+ const a = await N(u.url, { fetcher: g.value });
28
+ if (r.value = a, f.value !== "text")
29
+ try {
30
+ t.value = await W(a, {
31
+ lang: f.value,
32
+ theme: c.value === "light" ? "github-light" : "dark-plus"
33
+ });
34
+ } catch {
35
+ t.value = "";
36
+ }
37
+ else
38
+ t.value = "";
39
+ } catch (a) {
40
+ console.error(a), s.value = w.value("text.load_failed");
41
+ } finally {
42
+ v.value = !1;
43
+ }
44
+ };
45
+ return d(() => u.url, i, { immediate: !0 }), d(c, () => {
46
+ r.value && f.value !== "text" && i();
47
+ }), (a, p) => v.value ? (e(), o("div", L, [...p[0] || (p[0] = [
48
+ m("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)
49
+ ])])) : s.value ? (e(), x(C, {
50
+ key: 1,
51
+ message: s.value
52
+ }, null, 8, ["message"])) : l.htmlPreview && f.value === "html" ? (e(), o("div", M, [
53
+ m("iframe", {
54
+ srcdoc: r.value,
55
+ sandbox: "allow-same-origin",
56
+ class: "vfp-w-full vfp-h-full vfp-border-0",
57
+ title: l.fileName
58
+ }, null, 8, P)
59
+ ])) : (e(), o("div", j, [
60
+ t.value ? (e(), o("div", {
61
+ key: 1,
62
+ class: h(["shiki-wrapper", { "no-wrap": !l.wordWrap }]),
63
+ innerHTML: t.value
64
+ }, null, 10, z)) : (e(), o("pre", {
65
+ key: 0,
66
+ class: h(["vfp-p-6 vfp-text-fg-primary vfp-font-mono vfp-text-sm", l.wordWrap ? "vfp-whitespace-pre-wrap vfp-break-words" : "vfp-whitespace-pre"])
67
+ }, k(r.value), 3))
68
+ ]));
69
+ }
70
+ }), V = /* @__PURE__ */ H(D, [["__scopeId", "data-v-fd282330"]]);
71
+ export {
72
+ V as default
73
+ };
74
+ //# sourceMappingURL=index-B9RAbllH.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-B9RAbllH.mjs","sources":["../../src/renderers/Text/index.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ref, computed, watch } from 'vue';\nimport { getLanguageFromFileName, fetchTextUtf8 } from '@eternalheart/file-preview-core';\nimport { codeToHtml } from 'shiki';\nimport { useTranslator } from '../../composables/useTranslator';\nimport { useFetcher } from '../../composables/useRequest';\nimport { useResolvedTheme } from '../../composables/useResolvedTheme';\nimport RendererError from '../RendererError.vue';\n\nconst props = withDefaults(defineProps<{\n url: string;\n fileName: string;\n wordWrap?: boolean;\n htmlPreview?: boolean;\n}>(), {\n wordWrap: true,\n htmlPreview: false,\n});\n\nconst { t } = useTranslator();\nconst fetcher = useFetcher();\nconst resolvedTheme = useResolvedTheme();\n\nconst content = ref<string>('');\nconst highlighted = ref<string>('');\nconst loading = ref(true);\nconst error = ref<string | null>(null);\n\nconst language = computed(() => getLanguageFromFileName(props.fileName));\n\nconst loadText = async () => {\n loading.value = true;\n error.value = null;\n try {\n const text = await fetchTextUtf8(props.url, { fetcher: fetcher.value });\n content.value = text;\n\n if (language.value !== 'text') {\n try {\n highlighted.value = await codeToHtml(text, {\n lang: language.value,\n theme: resolvedTheme.value === 'light' ? 'github-light' : 'dark-plus',\n });\n } catch {\n highlighted.value = '';\n }\n } else {\n highlighted.value = '';\n }\n } catch (err) {\n console.error(err);\n error.value = t.value('text.load_failed');\n } finally {\n loading.value = false;\n }\n};\n\nwatch(() => props.url, loadText, { immediate: true });\nwatch(resolvedTheme, () => {\n // 主题切换时重新高亮\n if (content.value && language.value !== 'text') {\n loadText();\n }\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\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 <RendererError v-else-if=\"error\" :message=\"error\" />\n\n <!-- HTML 预览模式 -->\n <div v-else-if=\"htmlPreview && language === 'html'\" class=\"vfp-w-full vfp-h-full vfp-bg-surface-toolbar\">\n <iframe\n :srcdoc=\"content\"\n sandbox=\"allow-same-origin\"\n class=\"vfp-w-full vfp-h-full vfp-border-0\"\n :title=\"fileName\"\n />\n </div>\n\n <!-- 源码模式 -->\n <div v-else class=\"vfp-w-full vfp-h-full vfp-overflow-auto\" style=\"background: var(--fp-code-bg);\">\n <pre\n v-if=\"!highlighted\"\n class=\"vfp-p-6 vfp-text-fg-primary vfp-font-mono vfp-text-sm\"\n :class=\"wordWrap ? 'vfp-whitespace-pre-wrap vfp-break-words' : 'vfp-whitespace-pre'\"\n >{{ content }}</pre>\n <div v-else class=\"shiki-wrapper\" :class=\"{ 'no-wrap': !wordWrap }\" v-html=\"highlighted\" />\n </div>\n</template>\n\n<style scoped>\n.shiki-wrapper :deep(pre) {\n margin: 0;\n padding: 1.5rem 1.5rem 1.5rem 0;\n background: transparent !important;\n font-size: 0.875rem;\n overflow-x: auto;\n}\n.shiki-wrapper :deep(code) {\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;\n counter-reset: line;\n}\n.shiki-wrapper :deep(code .line) {\n counter-increment: line;\n}\n.shiki-wrapper :deep(code .line::before) {\n content: counter(line);\n display: inline-block;\n width: 3em;\n padding-right: 1em;\n margin-right: 0.5em;\n text-align: right;\n color: var(--fp-fg-disabled);\n user-select: none;\n border-right: 1px solid var(--fp-line);\n}\n.shiki-wrapper.no-wrap :deep(code) {\n white-space: pre;\n word-break: normal;\n overflow-wrap: normal;\n}\n.shiki-wrapper:not(.no-wrap) :deep(code) {\n white-space: pre-wrap;\n word-break: break-word;\n overflow-wrap: break-word;\n}\n</style>\n"],"names":["props","__props","t","useTranslator","fetcher","useFetcher","resolvedTheme","useResolvedTheme","content","ref","highlighted","loading","error","language","computed","getLanguageFromFileName","loadText","text","fetchTextUtf8","codeToHtml","err","watch","_openBlock","_createElementBlock","_hoisted_1","_cache","_createElementVNode","_createBlock","RendererError","_hoisted_2","_hoisted_4","_normalizeClass"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AASA,UAAMA,IAAQC,GAUR,EAAE,GAAAC,EAAA,IAAMC,EAAA,GACRC,IAAUC,EAAA,GACVC,IAAgBC,EAAA,GAEhBC,IAAUC,EAAY,EAAE,GACxBC,IAAcD,EAAY,EAAE,GAC5BE,IAAUF,EAAI,EAAI,GAClBG,IAAQH,EAAmB,IAAI,GAE/BI,IAAWC,EAAS,MAAMC,EAAwBf,EAAM,QAAQ,CAAC,GAEjEgB,IAAW,YAAY;AAC3B,MAAAL,EAAQ,QAAQ,IAChBC,EAAM,QAAQ;AACd,UAAI;AACF,cAAMK,IAAO,MAAMC,EAAclB,EAAM,KAAK,EAAE,SAASI,EAAQ,OAAO;AAGtE,YAFAI,EAAQ,QAAQS,GAEZJ,EAAS,UAAU;AACrB,cAAI;AACF,YAAAH,EAAY,QAAQ,MAAMS,EAAWF,GAAM;AAAA,cACzC,MAAMJ,EAAS;AAAA,cACf,OAAOP,EAAc,UAAU,UAAU,iBAAiB;AAAA,YAAA,CAC3D;AAAA,UACH,QAAQ;AACN,YAAAI,EAAY,QAAQ;AAAA,UACtB;AAAA;AAEA,UAAAA,EAAY,QAAQ;AAAA,MAExB,SAASU,GAAK;AACZ,gBAAQ,MAAMA,CAAG,GACjBR,EAAM,QAAQV,EAAE,MAAM,kBAAkB;AAAA,MAC1C,UAAA;AACE,QAAAS,EAAQ,QAAQ;AAAA,MAClB;AAAA,IACF;AAEA,WAAAU,EAAM,MAAMrB,EAAM,KAAKgB,GAAU,EAAE,WAAW,IAAM,GACpDK,EAAMf,GAAe,MAAM;AAEzB,MAAIE,EAAQ,SAASK,EAAS,UAAU,UACtCG,EAAA;AAAA,IAEJ,CAAC,aAIYL,EAAA,SAAXW,EAAA,GAAAC,EAIM,OAJNC,GAIM,CAAA,GAAAC,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA;AAAA,MAHJC,EAEE,OAAA,EADA,OAAM,oHAAA,GAAmH,MAAA,EAAA;AAAA,IAAA,QAInGd,EAAA,cAA1Be,EAAoDC,GAAA;AAAA;MAAlB,SAAShB,EAAA;AAAA,IAAA,4BAG3BX,EAAA,eAAeY,EAAA,UAAQ,UAAvCS,EAAA,GAAAC,EAOM,OAPNM,GAOM;AAAA,MANJH,EAKE,UAAA;AAAA,QAJC,QAAQlB,EAAA;AAAA,QACT,SAAQ;AAAA,QACR,OAAM;AAAA,QACL,OAAOP,EAAA;AAAA,MAAA;WAKZqB,EAAA,GAAAC,EAOM,OAPNO,GAOM;AAAA,MALKpB,EAAA,cAITa,EAA2F,OAAA;AAAA;QAA/E,OAAKQ,EAAA,CAAC,iBAAe,EAAA,WAAA,CAAuB9B,EAAA,SAAA,CAAQ,CAAA;AAAA,QAAI,WAAQS,EAAA;AAAA,MAAA,yBAL5Ea,EAIoB,OAAA;AAAA;QAFlB,OAAKQ,EAAA,CAAC,yDACE9B,EAAA,WAAQ,4CAAA,oBAAA,CAAA;AAAA,MAAA,KACdO,EAAA,KAAO,GAAA,CAAA;AAAA;;;"}
@@ -1,39 +1,36 @@
1
- import { defineComponent as G, computed as I, ref as c, watch as _, nextTick as P, openBlock as a, createElementBlock as d, createElementVNode as i, toDisplayString as H } from "vue";
2
- import D from "markdown-it";
3
- import K from "@traptitech/markdown-it-katex";
4
- import { codeToHtml as E } from "shiki";
5
- import { u as O, a as R, b as N, c as Y, _ as F } from "./index-BA-bP8P6.mjs";
6
- import "katex/dist/katex.min.css";
7
- const W = {
1
+ import { defineComponent as A, computed as G, ref as s, watch as y, nextTick as I, openBlock as c, createElementBlock as d, createElementVNode as _, createBlock as P, toDisplayString as D } from "vue";
2
+ import K from "markdown-it";
3
+ import O from "@traptitech/markdown-it-katex";
4
+ import { codeToHtml as H } from "shiki";
5
+ import { u as R, a as N, c as Y, E as F, _ as W } from "./index-CQFN4h-t.mjs";
6
+ import { _ as z } from "./RendererError.vue_vue_type_script_setup_true_lang-CbgZBSDr.mjs";
7
+ const J = {
8
8
  key: 0,
9
9
  class: "vfp-flex vfp-items-center vfp-justify-center vfp-w-full vfp-h-full"
10
- }, z = {
11
- key: 1,
12
- class: "vfp-flex vfp-items-center vfp-justify-center vfp-w-full vfp-h-full"
13
- }, J = { class: "vfp-text-fg-secondary vfp-text-center" }, Q = { class: "vfp-text-lg" }, U = {
10
+ }, Q = {
14
11
  key: 2,
15
12
  class: "vfp-w-full vfp-h-full vfp-overflow-auto",
16
13
  style: { background: "var(--fp-code-bg)" }
17
- }, X = {
14
+ }, U = {
18
15
  key: 0,
19
16
  class: "vfp-p-6 vfp-text-fg-primary vfp-font-mono vfp-text-sm vfp-whitespace-pre-wrap vfp-break-words"
20
- }, Z = ["innerHTML"], ee = {
17
+ }, X = ["innerHTML"], Z = {
21
18
  key: 3,
22
19
  class: "vfp-w-full vfp-h-full vfp-overflow-auto vfp-p-6 md:vfp-p-10"
23
- }, te = { class: "vfp-max-w-full md:vfp-max-w-4xl vfp-mx-auto" }, oe = ["innerHTML"], L = '<svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"/><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"/></svg>', B = '<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"/><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"/></svg>', re = '<svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M20 6 9 17l-5-5"/></svg>', ne = '<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M20 6 9 17l-5-5"/></svg>', le = /* @__PURE__ */ G({
20
+ }, ee = { class: "vfp-max-w-full md:vfp-max-w-4xl vfp-mx-auto" }, te = ["innerHTML"], E = '<svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"/><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"/></svg>', B = '<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"/><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"/></svg>', oe = '<svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M20 6 9 17l-5-5"/></svg>', re = '<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M20 6 9 17l-5-5"/></svg>', ne = /* @__PURE__ */ A({
24
21
  __name: "index",
25
22
  props: {
26
23
  url: {},
27
24
  viewMode: {}
28
25
  },
29
26
  setup(b) {
30
- const x = b, { t: p } = O(), j = R(), q = N(), g = I(() => q.value === "light" ? "github-light" : "github-dark"), y = c(""), u = c(""), v = c(""), f = c(!0), h = c(null), m = c(null), l = new D({
27
+ const x = b, { t: i } = R(), L = N(), q = Y(), k = G(() => q.value === "light" ? "github-light" : "github-dark"), g = s(""), p = s(""), u = s(""), v = s(!0), f = s(null), h = s(null), l = new K({
31
28
  html: !0,
32
29
  linkify: !0,
33
30
  typographer: !1,
34
31
  breaks: !1
35
32
  });
36
- l.use(K), l.renderer.rules.fence = (o, r) => {
33
+ l.use(O), l.renderer.rules.fence = (o, r) => {
37
34
  const e = o[r], n = e.info ? e.info.trim() : "", t = e.content;
38
35
  return n ? `<div class="code-block-wrapper">
39
36
  <div class="code-block-header">
@@ -51,24 +48,24 @@ const W = {
51
48
  };
52
49
  const V = l.renderer.rules.table_open || ((o, r, e, n, t) => t.renderToken(o, r, e));
53
50
  l.renderer.rules.table_open = (o, r, e, n, t) => '<div class="table-wrapper">' + V(o, r, e, n, t);
54
- const A = l.renderer.rules.table_close || ((o, r, e, n, t) => t.renderToken(o, r, e));
55
- l.renderer.rules.table_close = (o, r, e, n, t) => A(o, r, e, n, t) + "</div>";
51
+ const j = l.renderer.rules.table_close || ((o, r, e, n, t) => t.renderToken(o, r, e));
52
+ l.renderer.rules.table_close = (o, r, e, n, t) => j(o, r, e, n, t) + "</div>";
56
53
  const C = async () => {
57
- f.value = !0, h.value = null;
54
+ v.value = !0, f.value = null;
58
55
  try {
59
- const o = await Y(x.url, { fetcher: j.value });
60
- y.value = o, u.value = l.render(o), f.value = !1;
56
+ const o = await F(x.url, { fetcher: L.value });
57
+ g.value = o, p.value = l.render(o), v.value = !1;
61
58
  try {
62
- v.value = await E(o, { lang: "markdown", theme: g.value });
59
+ u.value = await H(o, { lang: "markdown", theme: k.value });
63
60
  } catch {
64
- v.value = "";
61
+ u.value = "";
65
62
  }
66
63
  } catch (o) {
67
- console.error(o), h.value = p.value("markdown.load_failed"), f.value = !1;
64
+ console.error(o), f.value = i.value("markdown.load_failed"), v.value = !1;
68
65
  }
69
66
  }, M = (o, r) => {
70
67
  const e = document.createElement("button");
71
- return e.type = "button", e.className = r ? "code-copy-btn" : "code-copy-btn code-copy-float", e.title = p.value("markdown.copy_code"), e.innerHTML = r ? L : B, e.addEventListener("click", async (n) => {
68
+ return e.type = "button", e.className = r ? "code-copy-btn" : "code-copy-btn code-copy-float", e.title = i.value("markdown.copy_code"), e.innerHTML = r ? E : B, e.addEventListener("click", async (n) => {
72
69
  n.stopPropagation();
73
70
  try {
74
71
  await navigator.clipboard.writeText(o);
@@ -76,61 +73,60 @@ const W = {
76
73
  const t = document.createElement("textarea");
77
74
  t.value = o, document.body.appendChild(t), t.select(), document.execCommand("copy"), document.body.removeChild(t);
78
75
  }
79
- e.innerHTML = r ? re : ne, e.title = p.value("markdown.copied"), setTimeout(() => {
80
- e.innerHTML = r ? L : B, e.title = p.value("markdown.copy_code");
76
+ e.innerHTML = r ? oe : re, e.title = i.value("markdown.copied"), setTimeout(() => {
77
+ e.innerHTML = r ? E : B, e.title = i.value("markdown.copy_code");
81
78
  }, 2e3);
82
79
  }), e;
83
80
  }, $ = async () => {
84
81
  var e, n;
85
- if (!m.value) return;
86
- const o = m.value.querySelectorAll('pre[data-shiki-pending="1"]');
82
+ if (!h.value) return;
83
+ const o = h.value.querySelectorAll('pre[data-shiki-pending="1"]');
87
84
  for (const t of o) {
88
- const w = t.getAttribute("data-lang") || "text", s = ((e = t.querySelector("code")) == null ? void 0 : e.textContent) || "";
85
+ const m = t.getAttribute("data-lang") || "text", a = ((e = t.querySelector("code")) == null ? void 0 : e.textContent) || "";
89
86
  try {
90
- const k = await E(s, { lang: w, theme: g.value }), T = document.createElement("div");
91
- T.innerHTML = k;
87
+ const w = await H(a, { lang: m, theme: k.value }), T = document.createElement("div");
88
+ T.innerHTML = w;
92
89
  const S = T.firstElementChild;
93
90
  S && t.replaceWith(S);
94
91
  } catch {
95
92
  t.style.backgroundColor = "var(--fp-code-bg)", t.removeAttribute("data-shiki-pending");
96
93
  }
97
94
  }
98
- const r = m.value.querySelectorAll(".code-block-wrapper");
95
+ const r = h.value.querySelectorAll(".code-block-wrapper");
99
96
  for (const t of r) {
100
97
  if (t.querySelector(".code-copy-btn")) continue;
101
- const w = t.querySelector(".code-block-header"), s = t.querySelector("pre"), k = ((n = s == null ? void 0 : s.querySelector("code")) == null ? void 0 : n.textContent) ?? (s == null ? void 0 : s.textContent) ?? "";
102
- w ? w.appendChild(M(k, !0)) : t.appendChild(M(k, !1));
98
+ const m = t.querySelector(".code-block-header"), a = t.querySelector("pre"), w = ((n = a == null ? void 0 : a.querySelector("code")) == null ? void 0 : n.textContent) ?? (a == null ? void 0 : a.textContent) ?? "";
99
+ m ? m.appendChild(M(w, !0)) : t.appendChild(M(w, !1));
103
100
  }
104
101
  };
105
- return _(() => x.url, C, { immediate: !0 }), _(u, async () => {
106
- u.value && (await P(), $());
107
- }), _(g, () => {
108
- y.value && C();
109
- }), (o, r) => f.value ? (a(), d("div", W, [...r[0] || (r[0] = [
110
- 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)
111
- ])])) : h.value ? (a(), d("div", z, [
112
- i("div", J, [
113
- i("p", Q, H(h.value), 1)
114
- ])
115
- ])) : b.viewMode === "source" ? (a(), d("div", U, [
116
- v.value ? (a(), d("div", {
102
+ return y(() => x.url, C, { immediate: !0 }), y(p, async () => {
103
+ p.value && (await I(), $());
104
+ }), y(k, () => {
105
+ g.value && C();
106
+ }), (o, r) => v.value ? (c(), d("div", J, [...r[0] || (r[0] = [
107
+ _("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)
108
+ ])])) : f.value ? (c(), P(z, {
109
+ key: 1,
110
+ message: f.value
111
+ }, null, 8, ["message"])) : b.viewMode === "source" ? (c(), d("div", Q, [
112
+ u.value ? (c(), d("div", {
117
113
  key: 1,
118
114
  class: "shiki-wrapper",
119
- innerHTML: v.value
120
- }, null, 8, Z)) : (a(), d("pre", X, H(y.value), 1))
121
- ])) : (a(), d("div", ee, [
122
- i("div", te, [
123
- i("div", {
115
+ innerHTML: u.value
116
+ }, null, 8, X)) : (c(), d("pre", U, D(g.value), 1))
117
+ ])) : (c(), d("div", Z, [
118
+ _("div", ee, [
119
+ _("div", {
124
120
  ref_key: "containerRef",
125
- ref: m,
121
+ ref: h,
126
122
  class: "markdown-body",
127
- innerHTML: u.value
128
- }, null, 8, oe)
123
+ innerHTML: p.value
124
+ }, null, 8, te)
129
125
  ])
130
126
  ]));
131
127
  }
132
- }), ue = /* @__PURE__ */ F(le, [["__scopeId", "data-v-addd6fb8"]]);
128
+ }), pe = /* @__PURE__ */ W(ne, [["__scopeId", "data-v-c412a92f"]]);
133
129
  export {
134
- ue as default
130
+ pe as default
135
131
  };
136
- //# sourceMappingURL=index-BVdw1Cc8.mjs.map
132
+ //# sourceMappingURL=index-BA-SUKkf.mjs.map