@eternalheart/vue-file-preview 1.3.14 → 1.4.0

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 (69) hide show
  1. package/lib/FilePreviewContent.vue.d.ts.map +1 -1
  2. package/lib/chunks/{RendererError.vue_vue_type_script_setup_true_lang-CbgZBSDr.mjs → RendererError.vue_vue_type_script_setup_true_lang-BNoENOWX.mjs} +9 -9
  3. package/lib/chunks/RendererError.vue_vue_type_script_setup_true_lang-BNoENOWX.mjs.map +1 -0
  4. package/lib/chunks/index-8ETACZ6T.mjs +267 -0
  5. package/lib/chunks/index-8ETACZ6T.mjs.map +1 -0
  6. package/lib/chunks/{index-DYrRDrZL.mjs → index-B-LW-GJO.mjs} +24 -21
  7. package/lib/chunks/index-B-LW-GJO.mjs.map +1 -0
  8. package/lib/chunks/{index-CUA_z4GJ.mjs → index-BT9hXA6r.mjs} +3 -3
  9. package/lib/chunks/{index-CUA_z4GJ.mjs.map → index-BT9hXA6r.mjs.map} +1 -1
  10. package/lib/chunks/{index-Cr0Z36a0.mjs → index-BcKI75RW.mjs} +4 -4
  11. package/lib/chunks/{index-Cr0Z36a0.mjs.map → index-BcKI75RW.mjs.map} +1 -1
  12. package/lib/chunks/{index-DVJfd09T.mjs → index-By6vGdnK.mjs} +3 -3
  13. package/lib/chunks/{index-DVJfd09T.mjs.map → index-By6vGdnK.mjs.map} +1 -1
  14. package/lib/chunks/{index-5hGtGeD4.mjs → index-C-Mu0fvH.mjs} +3 -3
  15. package/lib/chunks/{index-5hGtGeD4.mjs.map → index-C-Mu0fvH.mjs.map} +1 -1
  16. package/lib/chunks/{index-BkMYaea2.mjs → index-CGSq7-Q-.mjs} +3 -3
  17. package/lib/chunks/{index-BkMYaea2.mjs.map → index-CGSq7-Q-.mjs.map} +1 -1
  18. package/lib/chunks/{index-BgdBpGYv.mjs → index-CWpU8prZ.mjs} +11 -11
  19. package/lib/chunks/index-CWpU8prZ.mjs.map +1 -0
  20. package/lib/chunks/index-CYa_XneH.mjs +303 -0
  21. package/lib/chunks/index-CYa_XneH.mjs.map +1 -0
  22. package/lib/chunks/{index-BI32fnT-.mjs → index-CbJkkdEB.mjs} +9 -9
  23. package/lib/chunks/index-CbJkkdEB.mjs.map +1 -0
  24. package/lib/chunks/{index-dG-p4BPD.mjs → index-CoITLoYL.mjs} +3 -3
  25. package/lib/chunks/{index-dG-p4BPD.mjs.map → index-CoITLoYL.mjs.map} +1 -1
  26. package/lib/chunks/{index-CFaWV6cC.mjs → index-D9QQL7U6.mjs} +615 -572
  27. package/lib/chunks/index-D9QQL7U6.mjs.map +1 -0
  28. package/lib/chunks/{index-CJ86PaaF.mjs → index-DAdO2lkI.mjs} +32 -32
  29. package/lib/chunks/index-DAdO2lkI.mjs.map +1 -0
  30. package/lib/chunks/{index-C0OWrmU8.mjs → index-DGqDJMot.mjs} +3 -3
  31. package/lib/chunks/{index-C0OWrmU8.mjs.map → index-DGqDJMot.mjs.map} +1 -1
  32. package/lib/chunks/{index-CMKtCKpo.mjs → index-DTyG1Wzp.mjs} +8 -8
  33. package/lib/chunks/index-DTyG1Wzp.mjs.map +1 -0
  34. package/lib/chunks/{index-VTsO_yR7.mjs → index-DglMeKJM.mjs} +36 -38
  35. package/lib/chunks/{index-VTsO_yR7.mjs.map → index-DglMeKJM.mjs.map} +1 -1
  36. package/lib/chunks/{index-Bz9nKaz5.mjs → index-OOoaYpkl.mjs} +3 -3
  37. package/lib/chunks/{index-Bz9nKaz5.mjs.map → index-OOoaYpkl.mjs.map} +1 -1
  38. package/lib/chunks/{index-B-f41wjl.mjs → index-jcgLzyDR.mjs} +4 -4
  39. package/lib/chunks/{index-B-f41wjl.mjs.map → index-jcgLzyDR.mjs.map} +1 -1
  40. package/lib/chunks/{index-BlD2p_KC.mjs → index-nFIiu1lA.mjs} +3 -3
  41. package/lib/chunks/{index-BlD2p_KC.mjs.map → index-nFIiu1lA.mjs.map} +1 -1
  42. package/lib/index.cjs +40 -32
  43. package/lib/index.cjs.map +1 -1
  44. package/lib/index.css +1 -1
  45. package/lib/index.mjs +1 -1
  46. package/lib/renderers/Audio/index.vue.d.ts.map +1 -1
  47. package/lib/renderers/Docx/index.vue.d.ts.map +1 -1
  48. package/lib/renderers/Epub/index.vue.d.ts.map +1 -1
  49. package/lib/renderers/Markdown/index.vue.d.ts.map +1 -1
  50. package/lib/renderers/Pdf/index.vue.d.ts +3 -0
  51. package/lib/renderers/Pdf/index.vue.d.ts.map +1 -1
  52. package/lib/renderers/Pdf/toolbar.d.ts +5 -0
  53. package/lib/renderers/Pdf/toolbar.d.ts.map +1 -1
  54. package/lib/renderers/RendererError.vue.d.ts.map +1 -1
  55. package/lib/renderers/Subtitle/index.vue.d.ts.map +1 -1
  56. package/lib/renderers/Text/index.vue.d.ts.map +1 -1
  57. package/lib/renderers/Xml/index.vue.d.ts.map +1 -1
  58. package/package.json +1 -1
  59. package/lib/chunks/RendererError.vue_vue_type_script_setup_true_lang-CbgZBSDr.mjs.map +0 -1
  60. package/lib/chunks/index-BI32fnT-.mjs.map +0 -1
  61. package/lib/chunks/index-BgdBpGYv.mjs.map +0 -1
  62. package/lib/chunks/index-CFaWV6cC.mjs.map +0 -1
  63. package/lib/chunks/index-CJ86PaaF.mjs.map +0 -1
  64. package/lib/chunks/index-CMKtCKpo.mjs.map +0 -1
  65. package/lib/chunks/index-DYrRDrZL.mjs.map +0 -1
  66. package/lib/chunks/index-GcvjVFMf.mjs +0 -166
  67. package/lib/chunks/index-GcvjVFMf.mjs.map +0 -1
  68. package/lib/chunks/index-P8naV3DU.mjs +0 -248
  69. package/lib/chunks/index-P8naV3DU.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"FilePreviewContent.vue.d.ts","sourceRoot":"","sources":["../src/FilePreviewContent.vue"],"names":[],"mappings":"AA8vBA,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;AAuCrE,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;IACzD,wBAAwB;IACxB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;;;;;;;;;;iBATe,kBAAkB;oBAEf,cAAc;aAMrB,MAAM,IAAI;UApBb,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;;AA8nC1D,wBAQG"}
1
+ {"version":3,"file":"FilePreviewContent.vue.d.ts","sourceRoot":"","sources":["../src/FilePreviewContent.vue"],"names":[],"mappings":"AAsxBA,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;AAuCrE,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;IACzD,wBAAwB;IACxB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;;;;;;;;;;iBATe,kBAAkB;oBAEf,cAAc;aAMrB,MAAM,IAAI;UApBb,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;;AA2pC1D,wBAQG"}
@@ -1,11 +1,11 @@
1
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 = {
2
+ import { AlertCircle as v } from "lucide-vue-next";
3
+ const a = { class: "vfp-flex vfp-items-center vfp-justify-center vfp-w-full vfp-h-full" }, l = { class: "vfp-text-center" }, i = {
4
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 = {
5
+ class: "vfp-w-12 vfp-h-12 vfp-mx-auto vfp-mb-3 vfp-rounded-full vfp-bg-red-500/10 vfp-flex vfp-items-center vfp-justify-center"
6
+ }, d = { class: "vfp-text-base vfp-font-medium vfp-text-fg-primary vfp-mb-1" }, m = {
7
7
  key: 1,
8
- class: "vfp-text-sm vfp-text-fg-tertiary"
8
+ class: "vfp-text-xs vfp-text-fg-tertiary"
9
9
  }, y = /* @__PURE__ */ p({
10
10
  __name: "RendererError",
11
11
  props: {
@@ -14,10 +14,10 @@ const v = { class: "vfp-flex vfp-items-center vfp-justify-center vfp-w-full vfp-
14
14
  showIcon: { type: Boolean, default: !0 }
15
15
  },
16
16
  setup(e) {
17
- return (u, x) => (t(), f("div", v, [
18
- s("div", a, [
17
+ return (u, x) => (t(), f("div", a, [
18
+ s("div", l, [
19
19
  e.showIcon ? (t(), f("div", i, [
20
- c(n(l), { class: "vfp-w-8 vfp-h-8 vfp-text-red-400" })
20
+ c(n(v), { class: "vfp-w-6 vfp-h-6 vfp-text-red-400" })
21
21
  ])) : r("", !0),
22
22
  s("p", d, o(e.message), 1),
23
23
  e.detail ? (t(), f("p", m, o(e.detail), 1)) : r("", !0)
@@ -28,4 +28,4 @@ const v = { class: "vfp-flex vfp-items-center vfp-justify-center vfp-w-full vfp-
28
28
  export {
29
29
  y as _
30
30
  };
31
- //# sourceMappingURL=RendererError.vue_vue_type_script_setup_true_lang-CbgZBSDr.mjs.map
31
+ //# sourceMappingURL=RendererError.vue_vue_type_script_setup_true_lang-BNoENOWX.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RendererError.vue_vue_type_script_setup_true_lang-BNoENOWX.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-12 vfp-h-12 vfp-mx-auto vfp-mb-3 vfp-rounded-full vfp-bg-red-500/10 vfp-flex vfp-items-center vfp-justify-center\"\n >\n <AlertCircle class=\"vfp-w-6 vfp-h-6 vfp-text-red-400\" />\n </div>\n <p class=\"vfp-text-base vfp-font-medium vfp-text-fg-primary vfp-mb-1\">\n {{ message }}\n </p>\n <p v-if=\"detail\" class=\"vfp-text-xs 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,267 @@
1
+ import { defineComponent as le, ref as d, onMounted as ne, watch as se, onBeforeUnmount as ie, openBlock as c, createElementBlock as p, createBlock as fe, createCommentVNode as k, createElementVNode as v, normalizeStyle as x, toDisplayString as B, unref as X, createVNode as ue, Fragment as D, renderList as U } from "vue";
2
+ import ce from "@likecoin/epub-ts";
3
+ import { X as pe } from "lucide-vue-next";
4
+ import { u as ve, a as he } from "./index-D9QQL7U6.mjs";
5
+ import { _ as de } from "./RendererError.vue_vue_type_script_setup_true_lang-BNoENOWX.mjs";
6
+ const ge = { class: "vfp-relative vfp-w-full vfp-h-full vfp-flex vfp-justify-center vfp-bg-surface-1 vfp-overflow-hidden" }, me = {
7
+ key: 1,
8
+ class: "vfp-absolute vfp-inset-0 vfp-flex vfp-items-center vfp-justify-center vfp-z-10"
9
+ }, be = {
10
+ class: "vfp-flex vfp-items-center vfp-justify-between vfp-flex-shrink-0",
11
+ style: { padding: "12px 16px", "border-bottom": "1px solid rgba(255,255,255,0.1)" }
12
+ }, xe = { style: { color: "white", "font-weight": "500", "font-size": "14px" } }, we = {
13
+ class: "vfp-flex-1 vfp-overflow-y-auto",
14
+ style: { padding: "8px 4px" }
15
+ }, ye = ["title", "onClick", "onMouseenter", "onMouseleave"], ke = ["title", "onClick", "onMouseenter", "onMouseleave"], _e = 794, Me = /* @__PURE__ */ le({
16
+ __name: "index",
17
+ props: {
18
+ url: {}
19
+ },
20
+ emits: ["chapterChange", "fullWidthChange"],
21
+ setup(G, { expose: J, emit: K }) {
22
+ const _ = G, { t: N } = ve(), Q = he(), C = K, l = d(null), z = d(!0), g = d(null), S = d(!1), w = d([]), f = d(!1), $ = d("");
23
+ let s = null, e = null, m = 0, b = null;
24
+ const O = () => {
25
+ var r;
26
+ try {
27
+ (r = e == null ? void 0 : e.destroy) == null || r.call(e);
28
+ } catch {
29
+ }
30
+ try {
31
+ s == null || s.destroy();
32
+ } catch {
33
+ }
34
+ e = null, s = null, m = 0, b = null;
35
+ }, Y = () => {
36
+ e == null || e.prev();
37
+ }, Z = () => {
38
+ e == null || e.next();
39
+ }, ee = () => {
40
+ S.value = !S.value, C("fullWidthChange", S.value), setTimeout(() => {
41
+ l.value && e && (e.resize(l.value.offsetWidth, l.value.offsetHeight), b && e.display(b), E());
42
+ }, 350);
43
+ }, te = () => {
44
+ f.value = !f.value;
45
+ }, P = (r) => {
46
+ $.value = r, e == null || e.display(r), f.value = !1;
47
+ }, u = (r) => r === $.value;
48
+ J({ prevPage: Y, nextPage: Z, toggleFullWidth: ee, toggleToc: te });
49
+ const j = async () => {
50
+ if (l.value) {
51
+ z.value = !0, g.value = null, w.value = [], f.value = !1, l.value.innerHTML = "", O();
52
+ try {
53
+ let r = _.url;
54
+ _.url.startsWith("blob:") && (r = await (await Q.value(_.url)).arrayBuffer()), s = ce(r), e = s.renderTo(l.value, {
55
+ manager: "continuous",
56
+ flow: "scrolled",
57
+ width: "100%",
58
+ height: "100%"
59
+ }), e.themes.register("default", {
60
+ body: {
61
+ background: "#ffffff !important",
62
+ color: "#1a1a1a !important",
63
+ "font-family": '"Noto Serif SC", "Source Han Serif SC", Georgia, "Times New Roman", serif !important',
64
+ "font-size": "16px !important",
65
+ "line-height": "2 !important",
66
+ padding: "40px 60px !important",
67
+ "max-width": "100% !important",
68
+ "box-sizing": "border-box !important",
69
+ "word-break": "break-word !important",
70
+ "overflow-wrap": "break-word !important"
71
+ },
72
+ p: { "text-indent": "2em !important", margin: "0.8em 0 !important" },
73
+ h1: { "text-align": "center !important", margin: "1.5em 0 1em !important" },
74
+ h2: { margin: "1.2em 0 0.8em !important" },
75
+ h3: { margin: "1em 0 0.6em !important" },
76
+ img: { "max-width": "100% !important", height: "auto !important" },
77
+ a: { color: "#2563eb !important", "text-decoration": "none !important" }
78
+ }), e.themes.select("default"), await s.ready, s.locations.generate(1024).then(() => {
79
+ var o;
80
+ if (!s) return;
81
+ m = s.locations.length();
82
+ const t = e == null ? void 0 : e.currentLocation(), n = ((o = t == null ? void 0 : t.start) == null ? void 0 : o.location) ?? 0;
83
+ C("chapterChange", n + 1, m);
84
+ }).catch(() => {
85
+ });
86
+ const a = await s.loaded.navigation;
87
+ Array.isArray(a == null ? void 0 : a.toc) && (w.value = a.toc), await e.display(), z.value = !1, C("chapterChange", 1, m || 1), e.on("relocated", (t) => {
88
+ var M, h, I;
89
+ const n = t;
90
+ if ((M = n == null ? void 0 : n.start) != null && M.cfi && (b = n.start.cfi), (h = n == null ? void 0 : n.start) != null && h.href) {
91
+ const L = n.start.href, F = [], V = (ae) => {
92
+ for (const H of ae) {
93
+ const R = H.href.split("#")[0];
94
+ R && (L === R || L.endsWith("/" + R) || L.endsWith(R)) && F.push(H.href), H.subitems && V(H.subitems);
95
+ }
96
+ };
97
+ V(w.value), F.length === 1 && ($.value = F[0]);
98
+ }
99
+ const o = (I = n == null ? void 0 : n.start) == null ? void 0 : I.location;
100
+ typeof o == "number" && m > 0 && C("chapterChange", o + 1, m);
101
+ });
102
+ } catch (r) {
103
+ console.error("EPUB 加载错误:", r), g.value = N.value("epub.load_failed"), z.value = !1;
104
+ }
105
+ }
106
+ };
107
+ let W = null, y = null, T = { width: 0, height: 0 }, q = !0;
108
+ const re = () => {
109
+ if (!(!l.value || !e)) {
110
+ if (e.resize(l.value.offsetWidth, l.value.offsetHeight), b)
111
+ try {
112
+ e.display(b);
113
+ } catch {
114
+ }
115
+ E();
116
+ }
117
+ }, oe = () => {
118
+ l.value && (W = new ResizeObserver(() => {
119
+ if (!l.value) return;
120
+ if (q) {
121
+ q = !1, T = { width: l.value.offsetWidth, height: l.value.offsetHeight };
122
+ return;
123
+ }
124
+ const r = { width: l.value.offsetWidth, height: l.value.offsetHeight }, a = Math.abs(T.width - r.width), t = Math.abs(T.height - r.height);
125
+ a < 10 && t < 10 || (T = r, y !== null && clearTimeout(y), y = window.setTimeout(re, 350));
126
+ }), W.observe(l.value));
127
+ };
128
+ let i = null;
129
+ const A = () => {
130
+ var a;
131
+ if (!i) return;
132
+ const r = i;
133
+ if (r.scrollTop + r.clientHeight >= r.scrollHeight - 200)
134
+ try {
135
+ const t = e == null ? void 0 : e.manager;
136
+ (a = t == null ? void 0 : t.check) == null || a.call(t, 500, 500);
137
+ } catch {
138
+ }
139
+ }, E = () => {
140
+ i && (i.removeEventListener("scroll", A), i = null);
141
+ const r = () => {
142
+ var a;
143
+ i = ((a = l.value) == null ? void 0 : a.querySelector(".epub-container")) ?? null, i ? i.addEventListener("scroll", A, { passive: !0 }) : requestAnimationFrame(r);
144
+ };
145
+ requestAnimationFrame(r);
146
+ };
147
+ return ne(() => {
148
+ j(), oe(), E();
149
+ }), se(() => _.url, (r) => {
150
+ r && j();
151
+ }), ie(() => {
152
+ W && W.disconnect(), y !== null && clearTimeout(y), i == null || i.removeEventListener("scroll", A), O();
153
+ }), (r, a) => (c(), p("div", ge, [
154
+ g.value ? (c(), fe(de, {
155
+ key: 0,
156
+ message: g.value,
157
+ class: "vfp-absolute vfp-inset-0"
158
+ }, null, 8, ["message"])) : k("", !0),
159
+ z.value && !g.value ? (c(), p("div", me, [...a[2] || (a[2] = [
160
+ v("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)
161
+ ])])) : k("", !0),
162
+ w.value.length > 0 ? (c(), p("div", {
163
+ key: 2,
164
+ class: "vfp-absolute vfp-inset-0 vfp-z-20 vfp-flex",
165
+ style: x({ opacity: f.value ? 1 : 0, pointerEvents: f.value ? "auto" : "none", transition: "opacity 0.3s" })
166
+ }, [
167
+ v("div", {
168
+ class: "vfp-w-72 vfp-h-full vfp-flex vfp-flex-col",
169
+ style: x({
170
+ maxWidth: "80%",
171
+ background: "rgba(0,0,0,0.9)",
172
+ backdropFilter: "blur(12px)",
173
+ borderRight: "1px solid rgba(255,255,255,0.1)",
174
+ boxShadow: "0 25px 50px -12px rgba(0,0,0,0.25)",
175
+ transform: f.value ? "translateX(0)" : "translateX(-100%)",
176
+ transition: "transform 0.3s ease"
177
+ })
178
+ }, [
179
+ v("div", be, [
180
+ v("span", xe, B(X(N)("toolbar.toc")), 1),
181
+ v("button", {
182
+ style: { color: "rgba(255,255,255,0.6)", background: "none", border: "none", cursor: "pointer", padding: "4px" },
183
+ onClick: a[0] || (a[0] = (t) => f.value = !1)
184
+ }, [
185
+ ue(X(pe), { style: { width: "16px", height: "16px" } })
186
+ ])
187
+ ]),
188
+ v("div", we, [
189
+ (c(!0), p(D, null, U(w.value, (t, n) => (c(), p(D, {
190
+ key: `${t.href}-${n}`
191
+ }, [
192
+ v("button", {
193
+ style: x({
194
+ width: "100%",
195
+ textAlign: "left",
196
+ padding: "8px 12px",
197
+ fontSize: "14px",
198
+ color: u(t.href) ? "white" : "rgba(255,255,255,0.7)",
199
+ fontWeight: u(t.href) ? "500" : "400",
200
+ background: u(t.href) ? "rgba(255,255,255,0.15)" : "none",
201
+ border: "none",
202
+ cursor: "pointer",
203
+ borderRadius: "4px",
204
+ overflow: "hidden",
205
+ textOverflow: "ellipsis",
206
+ whiteSpace: "nowrap",
207
+ display: "block",
208
+ transition: "all 0.15s"
209
+ }),
210
+ title: t.label,
211
+ onClick: (o) => P(t.href),
212
+ onMouseenter: (o) => !u(t.href) && (o.target.style.background = "rgba(255,255,255,0.1)"),
213
+ onMouseleave: (o) => !u(t.href) && (o.target.style.background = "none")
214
+ }, B(t.label.trim()), 45, ye),
215
+ t.subitems && t.subitems.length > 0 ? (c(!0), p(D, { key: 0 }, U(t.subitems, (o, M) => (c(), p("button", {
216
+ key: `${o.href}-${M}`,
217
+ style: x({
218
+ width: "100%",
219
+ textAlign: "left",
220
+ padding: "8px 12px 8px 28px",
221
+ fontSize: "13px",
222
+ color: u(o.href) ? "white" : "rgba(255,255,255,0.6)",
223
+ fontWeight: u(o.href) ? "500" : "400",
224
+ background: u(o.href) ? "rgba(255,255,255,0.15)" : "none",
225
+ border: "none",
226
+ cursor: "pointer",
227
+ borderRadius: "4px",
228
+ overflow: "hidden",
229
+ textOverflow: "ellipsis",
230
+ whiteSpace: "nowrap",
231
+ display: "block",
232
+ transition: "all 0.15s"
233
+ }),
234
+ title: o.label,
235
+ onClick: (h) => P(o.href),
236
+ onMouseenter: (h) => !u(o.href) && (h.target.style.background = "rgba(255,255,255,0.1)"),
237
+ onMouseleave: (h) => !u(o.href) && (h.target.style.background = "none")
238
+ }, B(o.label.trim()), 45, ke))), 128)) : k("", !0)
239
+ ], 64))), 128))
240
+ ])
241
+ ], 4),
242
+ v("div", {
243
+ class: "vfp-flex-1",
244
+ style: x({ background: f.value ? "rgba(0,0,0,0.3)" : "transparent", transition: "background 0.3s" }),
245
+ onClick: a[1] || (a[1] = (t) => f.value = !1)
246
+ }, null, 4)
247
+ ], 4)) : k("", !0),
248
+ g.value ? k("", !0) : (c(), p("div", {
249
+ key: 3,
250
+ ref_key: "viewerRef",
251
+ ref: l,
252
+ class: "vfp-h-full vfp-bg-surface-toolbar",
253
+ style: x({
254
+ width: S.value ? "100%" : `${_e}px`,
255
+ maxWidth: "100%",
256
+ transition: "width 0.3s ease",
257
+ boxShadow: "0 1px 3px rgba(0,0,0,0.12)",
258
+ overflow: "hidden"
259
+ })
260
+ }, null, 4))
261
+ ]));
262
+ }
263
+ });
264
+ export {
265
+ Me as default
266
+ };
267
+ //# sourceMappingURL=index-8ETACZ6T.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-8ETACZ6T.mjs","sources":["../../src/renderers/Epub/index.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ref, watch, onMounted, onBeforeUnmount } from 'vue';\nimport ePub from '@likecoin/epub-ts';\nimport { X } from 'lucide-vue-next';\nimport { useTranslator } from '../../composables/useTranslator';\nimport { useFetcher } from '../../composables/useRequest';\nimport RendererError from '../RendererError.vue';\n\ninterface TocItem {\n label: string;\n href: string;\n subitems?: TocItem[];\n}\n\ninterface RenditionLike {\n display: (target?: string) => Promise<unknown>;\n next: () => Promise<unknown>;\n prev: () => Promise<unknown>;\n on: (event: string, cb: (...args: unknown[]) => void) => void;\n resize: (width: number, height: number) => void;\n currentLocation: () => unknown;\n destroy?: () => void;\n themes: {\n register: (name: string, styles: Record<string, unknown>) => void;\n select: (name: string) => void;\n };\n}\n\ninterface BookLike {\n ready: Promise<unknown>;\n loaded: { navigation: Promise<unknown> };\n locations: {\n generate: (chars: number) => Promise<string[]>;\n length: () => number;\n locationFromCfi: (cfi: string) => number;\n };\n renderTo: (el: HTMLElement, opts: Record<string, unknown>) => RenditionLike;\n destroy: () => void;\n}\n\nconst A4_WIDTH = 794;\n\nconst props = defineProps<{ url: string }>();\n\nconst { t } = useTranslator();\nconst fetcher = useFetcher();\n\nconst emit = defineEmits<{\n (e: 'chapterChange', current: number, total: number): void;\n (e: 'fullWidthChange', isFullWidth: boolean): void;\n}>();\n\nconst viewerRef = ref<HTMLDivElement | null>(null);\nconst loading = ref(true);\nconst error = ref<string | null>(null);\nconst isFullWidth = ref(false);\nconst toc = ref<TocItem[]>([]);\nconst showToc = ref(false);\nconst activeTocHref = ref('');\n\nlet book: BookLike | null = null;\nlet rendition: RenditionLike | null = null;\nlet totalLocations = 0;\nlet lastCfi: string | null = null;\n\nconst cleanup = () => {\n try { rendition?.destroy?.(); } catch { /* ignore */ }\n try { book?.destroy(); } catch { /* ignore */ }\n rendition = null;\n book = null;\n totalLocations = 0;\n lastCfi = null;\n};\n\nconst prevPage = () => { rendition?.prev(); };\nconst nextPage = () => { rendition?.next(); };\nconst toggleFullWidth = () => {\n isFullWidth.value = !isFullWidth.value;\n emit('fullWidthChange', isFullWidth.value);\n setTimeout(() => {\n if (viewerRef.value && rendition) {\n rendition.resize(viewerRef.value.offsetWidth, viewerRef.value.offsetHeight);\n if (lastCfi) {\n rendition.display(lastCfi);\n }\n // resize/display 可能重建 .epub-container,需要重新绑定滚动监听\n reattachScrollListener();\n }\n }, 350);\n};\nconst toggleToc = () => { showToc.value = !showToc.value; };\nconst handleTocClick = (href: string) => {\n activeTocHref.value = href;\n rendition?.display(href);\n showToc.value = false;\n};\n\nconst isActive = (href: string) => {\n return href === activeTocHref.value;\n};\n\ndefineExpose({ prevPage, nextPage, toggleFullWidth, toggleToc });\n\nconst loadEpub = async () => {\n if (!viewerRef.value) return;\n\n loading.value = true;\n error.value = null;\n toc.value = [];\n showToc.value = false;\n viewerRef.value.innerHTML = '';\n cleanup();\n\n try {\n let bookInput: string | ArrayBuffer = props.url;\n if (props.url.startsWith('blob:')) {\n const resp = await fetcher.value(props.url);\n bookInput = await resp.arrayBuffer();\n }\n\n book = ePub(bookInput) as unknown as BookLike;\n\n rendition = book.renderTo(viewerRef.value, {\n manager: 'continuous',\n flow: 'scrolled',\n width: '100%',\n height: '100%',\n });\n\n rendition.themes.register('default', {\n body: {\n background: '#ffffff !important',\n color: '#1a1a1a !important',\n 'font-family': '\"Noto Serif SC\", \"Source Han Serif SC\", Georgia, \"Times New Roman\", serif !important',\n 'font-size': '16px !important',\n 'line-height': '2 !important',\n padding: '40px 60px !important',\n 'max-width': '100% !important',\n 'box-sizing': 'border-box !important',\n 'word-break': 'break-word !important',\n 'overflow-wrap': 'break-word !important',\n },\n p: { 'text-indent': '2em !important', margin: '0.8em 0 !important' },\n h1: { 'text-align': 'center !important', margin: '1.5em 0 1em !important' },\n h2: { margin: '1.2em 0 0.8em !important' },\n h3: { margin: '1em 0 0.6em !important' },\n img: { 'max-width': '100% !important', height: 'auto !important' },\n a: { color: '#2563eb !important', 'text-decoration': 'none !important' },\n });\n rendition.themes.select('default');\n\n await book.ready;\n\n // 异步生成 locations 索引\n book.locations.generate(1024).then(() => {\n if (!book) return;\n totalLocations = book.locations.length();\n const loc = rendition?.currentLocation() as { start?: { location?: number } } | undefined;\n const cur = loc?.start?.location ?? 0;\n emit('chapterChange', cur + 1, totalLocations);\n }).catch(() => { /* ignore */ });\n\n const nav = await book.loaded.navigation as { toc?: TocItem[] };\n if (Array.isArray(nav?.toc)) {\n toc.value = nav.toc;\n }\n\n await rendition.display();\n\n loading.value = false;\n emit('chapterChange', 1, totalLocations || 1);\n\n rendition.on('relocated', (location: unknown) => {\n const loc = location as { start?: { cfi?: string; location?: number; href?: string } };\n if (loc?.start?.cfi) {\n lastCfi = loc.start.cfi;\n }\n if (loc?.start?.href) {\n // 根据 spine href 查找匹配的 TOC 项\n const spineHref = loc.start.href;\n const matches: string[] = [];\n const collect = (items: TocItem[]) => {\n for (const item of items) {\n const base = item.href.split('#')[0];\n if (base && (spineHref === base || spineHref.endsWith('/' + base) || spineHref.endsWith(base))) {\n matches.push(item.href);\n }\n if (item.subitems) collect(item.subitems);\n }\n };\n collect(toc.value);\n if (matches.length === 1) {\n activeTocHref.value = matches[0];\n }\n // 多个匹配(同一文件不同 anchor)时保持当前选中(由点击设置)\n }\n const cur = loc?.start?.location;\n if (typeof cur === 'number' && totalLocations > 0) {\n emit('chapterChange', cur + 1, totalLocations);\n }\n });\n } catch (err) {\n console.error('EPUB 加载错误:', err);\n error.value = t.value('epub.load_failed');\n loading.value = false;\n }\n};\n\n// 监听容器尺寸变化:等待 transition 完成后才 resize,避免 transition 期间频繁触发导致频闪\nlet resizeObserver: ResizeObserver | null = null;\nlet resizeTimeout: number | null = null;\nlet lastDimensions = { width: 0, height: 0 };\nlet isInitialResize = true;\n\nconst doResize = () => {\n if (!viewerRef.value || !rendition) return;\n rendition.resize(viewerRef.value.offsetWidth, viewerRef.value.offsetHeight);\n // resize 后恢复阅读位置\n if (lastCfi) {\n try { rendition.display(lastCfi); } catch { /* ignore */ }\n }\n // resize/display 可能重建 .epub-container,需要重新绑定滚动监听\n reattachScrollListener();\n};\n\nconst setupResizeObserver = () => {\n if (!viewerRef.value) return;\n resizeObserver = new ResizeObserver(() => {\n if (!viewerRef.value) return;\n\n if (isInitialResize) {\n isInitialResize = false;\n lastDimensions = { width: viewerRef.value.offsetWidth, height: viewerRef.value.offsetHeight };\n return;\n }\n\n const newDimensions = { width: viewerRef.value.offsetWidth, height: viewerRef.value.offsetHeight };\n const widthDiff = Math.abs(lastDimensions.width - newDimensions.width);\n const heightDiff = Math.abs(lastDimensions.height - newDimensions.height);\n\n // 微小变化不触发,避免抖动\n if (widthDiff < 10 && heightDiff < 10) return;\n\n lastDimensions = newDimensions;\n\n // 防抖:等待 transition 完成(350ms)后才重新渲染\n if (resizeTimeout !== null) clearTimeout(resizeTimeout);\n resizeTimeout = window.setTimeout(doResize, 350);\n });\n resizeObserver.observe(viewerRef.value);\n};\n\n// 监听 epub-container 滚动,接近底部时强制加载后续 section\nlet scrollContainer: Element | null = null;\nconst onContainerScroll = () => {\n if (!scrollContainer) return;\n const el = scrollContainer as HTMLElement;\n if (el.scrollTop + el.clientHeight >= el.scrollHeight - 200) {\n try {\n const mgr = (rendition as unknown as { manager?: { check?: (t?: number, e?: number) => Promise<unknown> } })?.manager;\n // 传递垂直偏移量参数,让 check() 在接近底部时就触发加载下一节\n mgr?.check?.(500, 500);\n } catch { /* ignore */ }\n }\n};\n\nconst reattachScrollListener = () => {\n // 清理旧监听\n if (scrollContainer) {\n scrollContainer.removeEventListener('scroll', onContainerScroll);\n scrollContainer = null;\n }\n const tryAttach = () => {\n scrollContainer = viewerRef.value?.querySelector('.epub-container') ?? null;\n if (scrollContainer) {\n scrollContainer.addEventListener('scroll', onContainerScroll, { passive: true });\n } else {\n requestAnimationFrame(tryAttach);\n }\n };\n requestAnimationFrame(tryAttach);\n};\n\nonMounted(() => {\n loadEpub();\n setupResizeObserver();\n reattachScrollListener();\n});\n\nwatch(() => props.url, (newUrl) => {\n // 只有 URL 有效时才加载(避免空字符串或已 revoke 的 blob URL)\n if (newUrl) loadEpub();\n});\n\nonBeforeUnmount(() => {\n if (resizeObserver) resizeObserver.disconnect();\n if (resizeTimeout !== null) clearTimeout(resizeTimeout);\n scrollContainer?.removeEventListener('scroll', onContainerScroll);\n cleanup();\n});\n</script>\n\n<template>\n <div class=\"vfp-relative vfp-w-full vfp-h-full vfp-flex vfp-justify-center vfp-bg-surface-1 vfp-overflow-hidden\">\n <RendererError v-if=\"error\" :message=\"error\" class=\"vfp-absolute vfp-inset-0\" />\n\n <div\n v-if=\"loading && !error\"\n class=\"vfp-absolute vfp-inset-0 vfp-flex vfp-items-center vfp-justify-center vfp-z-10\"\n >\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 <!-- 目录侧栏 - 滑入动画 -->\n <div\n v-if=\"toc.length > 0\"\n class=\"vfp-absolute vfp-inset-0 vfp-z-20 vfp-flex\"\n :style=\"{ opacity: showToc ? 1 : 0, pointerEvents: showToc ? 'auto' : 'none', transition: 'opacity 0.3s' }\"\n >\n <div\n class=\"vfp-w-72 vfp-h-full vfp-flex vfp-flex-col\"\n :style=\"{\n maxWidth: '80%',\n background: 'rgba(0,0,0,0.9)',\n backdropFilter: 'blur(12px)',\n borderRight: '1px solid rgba(255,255,255,0.1)',\n boxShadow: '0 25px 50px -12px rgba(0,0,0,0.25)',\n transform: showToc ? 'translateX(0)' : 'translateX(-100%)',\n transition: 'transform 0.3s ease',\n }\"\n >\n <div class=\"vfp-flex vfp-items-center vfp-justify-between vfp-flex-shrink-0\" style=\"padding: 12px 16px; border-bottom: 1px solid rgba(255,255,255,0.1)\">\n <span style=\"color: white; font-weight: 500; font-size: 14px\">{{ t('toolbar.toc') }}</span>\n <button style=\"color: rgba(255,255,255,0.6); background: none; border: none; cursor: pointer; padding: 4px\" @click=\"showToc = false\">\n <X style=\"width: 16px; height: 16px\" />\n </button>\n </div>\n <div class=\"vfp-flex-1 vfp-overflow-y-auto\" style=\"padding: 8px 4px\">\n <template v-for=\"(item, i) in toc\" :key=\"`${item.href}-${i}`\">\n <button\n :style=\"{\n width: '100%', textAlign: 'left', padding: '8px 12px', fontSize: '14px',\n color: isActive(item.href) ? 'white' : 'rgba(255,255,255,0.7)',\n fontWeight: isActive(item.href) ? '500' : '400',\n background: isActive(item.href) ? 'rgba(255,255,255,0.15)' : 'none',\n border: 'none', cursor: 'pointer', borderRadius: '4px',\n overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap', display: 'block',\n transition: 'all 0.15s',\n }\"\n :title=\"item.label\"\n @click=\"handleTocClick(item.href)\"\n @mouseenter=\"!isActive(item.href) && (($event.target as HTMLElement).style.background = 'rgba(255,255,255,0.1)')\"\n @mouseleave=\"!isActive(item.href) && (($event.target as HTMLElement).style.background = 'none')\"\n >\n {{ item.label.trim() }}\n </button>\n <template v-if=\"item.subitems && item.subitems.length > 0\">\n <button\n v-for=\"(sub, j) in item.subitems\"\n :key=\"`${sub.href}-${j}`\"\n :style=\"{\n width: '100%', textAlign: 'left', padding: '8px 12px 8px 28px', fontSize: '13px',\n color: isActive(sub.href) ? 'white' : 'rgba(255,255,255,0.6)',\n fontWeight: isActive(sub.href) ? '500' : '400',\n background: isActive(sub.href) ? 'rgba(255,255,255,0.15)' : 'none',\n border: 'none', cursor: 'pointer', borderRadius: '4px',\n overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap', display: 'block',\n transition: 'all 0.15s',\n }\"\n :title=\"sub.label\"\n @click=\"handleTocClick(sub.href)\"\n @mouseenter=\"!isActive(sub.href) && (($event.target as HTMLElement).style.background = 'rgba(255,255,255,0.1)')\"\n @mouseleave=\"!isActive(sub.href) && (($event.target as HTMLElement).style.background = 'none')\"\n >\n {{ sub.label.trim() }}\n </button>\n </template>\n </template>\n </div>\n </div>\n <div\n class=\"vfp-flex-1\"\n :style=\"{ background: showToc ? 'rgba(0,0,0,0.3)' : 'transparent', transition: 'background 0.3s' }\"\n @click=\"showToc = false\"\n />\n </div>\n\n <div\n v-if=\"!error\"\n ref=\"viewerRef\"\n class=\"vfp-h-full vfp-bg-surface-toolbar\"\n :style=\"{\n width: isFullWidth ? '100%' : `${A4_WIDTH}px`,\n maxWidth: '100%',\n transition: 'width 0.3s ease',\n boxShadow: '0 1px 3px rgba(0,0,0,0.12)',\n overflow: 'hidden',\n }\"\n />\n </div>\n</template>\n\n<style>\n.epub-container { overflow-y: auto !important; scrollbar-width: thin; }\n.epub-container::-webkit-scrollbar { width: 8px; }\n.epub-container::-webkit-scrollbar-track { background: transparent; }\n.epub-container::-webkit-scrollbar-thumb { background: rgba(0,0,0,0.15); border-radius: 4px; }\n.epub-container::-webkit-scrollbar-thumb:hover { background: rgba(0,0,0,0.3); }\n.epub-view > iframe { background: white; }\n</style>\n"],"names":["A4_WIDTH","props","__props","t","useTranslator","fetcher","useFetcher","emit","__emit","viewerRef","ref","loading","error","isFullWidth","toc","showToc","activeTocHref","book","rendition","totalLocations","lastCfi","cleanup","_a","prevPage","nextPage","toggleFullWidth","reattachScrollListener","toggleToc","handleTocClick","href","isActive","__expose","loadEpub","bookInput","ePub","loc","cur","nav","location","_b","spineHref","matches","collect","items","item","base","_c","err","resizeObserver","resizeTimeout","lastDimensions","isInitialResize","doResize","setupResizeObserver","newDimensions","widthDiff","heightDiff","scrollContainer","onContainerScroll","el","mgr","tryAttach","onMounted","watch","newUrl","onBeforeUnmount","_openBlock","_createElementBlock","_hoisted_1","_createBlock","RendererError","_hoisted_2","_cache","_createElementVNode","_normalizeStyle","_hoisted_3","_hoisted_4","_toDisplayString","_unref","_createVNode","X","_hoisted_5","_Fragment","_renderList","i","$event","_hoisted_6","sub","j","_hoisted_7"],"mappings":"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"}
@@ -1,21 +1,21 @@
1
- import { defineComponent as P, ref as s, watch as y, nextTick as D, openBlock as a, createElementBlock as c, createElementVNode as f, createBlock as L, normalizeStyle as S, Fragment as $, renderList as B } from "vue";
1
+ import { defineComponent as S, ref as s, watch as x, nextTick as D, openBlock as a, createElementBlock as c, createElementVNode as f, createBlock as L, normalizeStyle as y, Fragment as $, renderList as B } from "vue";
2
2
  import M from "mammoth";
3
- import { u as N, a as F } from "./index-CFaWV6cC.mjs";
4
- import { _ as I } from "./RendererError.vue_vue_type_script_setup_true_lang-CbgZBSDr.mjs";
3
+ import { u as N, a as F } from "./index-D9QQL7U6.mjs";
4
+ import { _ as I } from "./RendererError.vue_vue_type_script_setup_true_lang-BNoENOWX.mjs";
5
5
  const j = {
6
6
  key: 0,
7
7
  class: "vfp-flex vfp-items-center vfp-justify-center vfp-w-full vfp-h-full"
8
8
  }, C = {
9
9
  key: 2,
10
- class: "vfp-w-full vfp-h-full vfp-overflow-auto",
10
+ class: "vfp-w-full vfp-h-full vfp-overflow-auto vfp-py-6 vfp-px-4",
11
11
  style: { background: "rgba(0, 0, 0, 0.15)" }
12
- }, R = ["innerHTML"], q = ["innerHTML"], _ = 1123, g = 60, x = 50, z = 24, X = /* @__PURE__ */ P({
12
+ }, R = ["innerHTML"], q = ["innerHTML"], _ = 1123, g = 60, w = 50, z = 24, X = /* @__PURE__ */ S({
13
13
  __name: "index",
14
14
  props: {
15
15
  url: {}
16
16
  },
17
- setup(w) {
18
- const k = _ - g * 2, v = w, { t: H } = N(), E = F(), n = s(""), p = s(!0), i = s(null), o = s([]), d = s(null), T = async () => {
17
+ setup(b) {
18
+ const k = _ - g * 2, v = b, { t: H } = N(), E = F(), n = s(""), p = s(!0), i = s(null), o = s([]), d = s(null), T = async () => {
19
19
  p.value = !0, i.value = null, n.value = "", o.value = [];
20
20
  try {
21
21
  const e = await E.value(v.url);
@@ -27,7 +27,7 @@ const j = {
27
27
  } finally {
28
28
  p.value = !1;
29
29
  }
30
- }, b = () => {
30
+ }, A = () => {
31
31
  const e = d.value;
32
32
  if (!e || !n.value) return;
33
33
  const r = Array.from(e.children);
@@ -43,29 +43,29 @@ const j = {
43
43
  }
44
44
  t.length === 0 && t.push([]), o.value = t.map((u) => u.join(""));
45
45
  };
46
- y(() => v.url, (e) => {
46
+ x(() => v.url, (e) => {
47
47
  e && T();
48
- }, { immediate: !0 }), y(n, async () => {
49
- n.value && (await D(), requestAnimationFrame(() => b()));
48
+ }, { immediate: !0 }), x(n, async () => {
49
+ n.value && (await D(), requestAnimationFrame(() => A()));
50
50
  });
51
51
  const m = {
52
52
  fontFamily: "system-ui, -apple-system, sans-serif",
53
53
  lineHeight: "1.8",
54
54
  color: "#333"
55
- }, A = {
55
+ }, G = {
56
56
  ...m,
57
57
  position: "absolute",
58
58
  visibility: "hidden",
59
- width: `${794 - x * 2}px`,
59
+ width: `${794 - w * 2}px`,
60
60
  pointerEvents: "none"
61
- }, G = {
61
+ }, P = {
62
62
  width: "100%",
63
63
  maxWidth: "794px",
64
64
  minHeight: `${_}px`,
65
65
  background: "white",
66
66
  boxShadow: "0 2px 12px rgba(0, 0, 0, 0.15)",
67
67
  flexShrink: 0,
68
- padding: `${g}px ${x}px`
68
+ padding: `${g}px ${w}px`
69
69
  };
70
70
  return (e, r) => p.value ? (a(), c("div", j, [...r[0] || (r[0] = [
71
71
  f("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)
@@ -76,22 +76,25 @@ const j = {
76
76
  f("div", {
77
77
  ref_key: "measureRef",
78
78
  ref: d,
79
- style: A,
79
+ style: G,
80
80
  innerHTML: n.value
81
81
  }, null, 8, R),
82
82
  f("div", {
83
- class: "vfp-py-6 md:vfp-py-10 vfp-flex vfp-flex-col vfp-items-center",
84
- style: S({ gap: `${z}px` })
83
+ class: "vfp-flex vfp-flex-col vfp-items-center",
84
+ style: y({ gap: `${z}px` })
85
85
  }, [
86
86
  (a(!0), c($, null, B(o.value.length > 0 ? o.value : [""], (t, l) => (a(), c("div", {
87
87
  key: l,
88
- style: G
88
+ style: y({
89
+ ...P,
90
+ boxShadow: "0 4px 6px rgba(0, 0, 0, 0.07), 0 10px 20px rgba(0, 0, 0, 0.10)"
91
+ })
89
92
  }, [
90
93
  f("div", {
91
94
  style: m,
92
95
  innerHTML: t
93
96
  }, null, 8, q)
94
- ]))), 128))
97
+ ], 4))), 128))
95
98
  ], 4)
96
99
  ]));
97
100
  }
@@ -99,4 +102,4 @@ const j = {
99
102
  export {
100
103
  X as default
101
104
  };
102
- //# sourceMappingURL=index-DYrRDrZL.mjs.map
105
+ //# sourceMappingURL=index-B-LW-GJO.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-B-LW-GJO.mjs","sources":["../../src/renderers/Docx/index.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ref, watch, nextTick } from 'vue';\nimport mammoth from 'mammoth';\nimport { useTranslator } from '../../composables/useTranslator';\nimport { useFetcher } from '../../composables/useRequest';\nimport RendererError from '../RendererError.vue';\n\nconst PAGE_HEIGHT = 1123;\nconst PAGE_PADDING_Y = 60;\nconst PAGE_PADDING_X = 50;\nconst PAGE_CONTENT_HEIGHT = PAGE_HEIGHT - PAGE_PADDING_Y * 2;\nconst PAGE_GAP = 24;\n\nconst props = defineProps<{\n url: string;\n}>();\n\nconst { t } = useTranslator();\nconst fetcher = useFetcher();\n\nconst html = ref('');\nconst loading = ref(true);\nconst error = ref<string | null>(null);\nconst pages = ref<string[]>([]);\nconst measureRef = ref<HTMLDivElement | null>(null);\n\nconst loadDocx = async () => {\n loading.value = true;\n error.value = null;\n html.value = '';\n pages.value = [];\n\n try {\n const response = await fetcher.value(props.url);\n if (!response.ok) throw new Error('文件加载失败');\n const arrayBuffer = await response.arrayBuffer();\n const result = await mammoth.convertToHtml({ arrayBuffer });\n html.value = result.value;\n } catch (err) {\n console.error('Docx 解析错误:', err);\n error.value = t.value('docx.parse_failed');\n } finally {\n loading.value = false;\n }\n};\n\nconst paginate = () => {\n const container = measureRef.value;\n if (!container || !html.value) return;\n\n const children = Array.from(container.children) as HTMLElement[];\n if (children.length === 0) {\n pages.value = [html.value];\n return;\n }\n\n const result: string[][] = [[]];\n let currentPageUsed = 0;\n\n for (const child of children) {\n const h = child.offsetHeight;\n\n if (currentPageUsed > 0 && currentPageUsed + h > PAGE_CONTENT_HEIGHT) {\n result.push([]);\n currentPageUsed = 0;\n }\n\n result[result.length - 1].push(child.outerHTML);\n currentPageUsed += h;\n }\n\n if (result.length === 0) result.push([]);\n\n pages.value = result.map((blocks) => blocks.join(''));\n};\n\nwatch(() => props.url, (newUrl) => {\n // 只有 URL 有效时才加载(避免空字符串或已 revoke 的 blob URL)\n if (newUrl) loadDocx();\n}, { immediate: true });\n\nwatch(html, async () => {\n if (!html.value) return;\n await nextTick();\n requestAnimationFrame(() => paginate());\n});\n\nconst contentStyle = {\n fontFamily: 'system-ui, -apple-system, sans-serif',\n lineHeight: '1.8',\n color: '#333',\n};\n\nconst measureStyle = {\n ...contentStyle,\n position: 'absolute' as const,\n visibility: 'hidden' as const,\n width: `${794 - PAGE_PADDING_X * 2}px`,\n pointerEvents: 'none' as const,\n};\n\nconst pageStyle = {\n width: '100%',\n maxWidth: '794px',\n minHeight: `${PAGE_HEIGHT}px`,\n background: 'white',\n boxShadow: '0 2px 12px rgba(0, 0, 0, 0.15)',\n flexShrink: 0,\n padding: `${PAGE_PADDING_Y}px ${PAGE_PADDING_X}px`,\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 <div v-else class=\"vfp-w-full vfp-h-full vfp-overflow-auto vfp-py-6 vfp-px-4\" style=\"background: rgba(0, 0, 0, 0.15)\">\n <!-- 隐藏测量区 -->\n <div ref=\"measureRef\" :style=\"measureStyle\" v-html=\"html\" />\n\n <!-- 实际页面 -->\n <div\n class=\"vfp-flex vfp-flex-col vfp-items-center\"\n :style=\"{ gap: `${PAGE_GAP}px` }\"\n >\n <div\n v-for=\"(pageHtml, i) in pages.length > 0 ? pages : ['']\"\n :key=\"i\"\n :style=\"{\n ...pageStyle,\n boxShadow: '0 4px 6px rgba(0, 0, 0, 0.07), 0 10px 20px rgba(0, 0, 0, 0.10)',\n }\"\n >\n <div :style=\"contentStyle\" v-html=\"pageHtml\" />\n </div>\n </div>\n </div>\n</template>\n"],"names":["PAGE_HEIGHT","PAGE_PADDING_Y","PAGE_PADDING_X","PAGE_GAP","PAGE_CONTENT_HEIGHT","props","__props","t","useTranslator","fetcher","useFetcher","html","ref","loading","error","pages","measureRef","loadDocx","response","arrayBuffer","result","mammoth","err","paginate","container","children","currentPageUsed","child","blocks","watch","newUrl","nextTick","contentStyle","measureStyle","pageStyle","_openBlock","_createElementBlock","_hoisted_1","_cache","_createElementVNode","_createBlock","RendererError","_hoisted_2","_Fragment","_renderList","pageHtml","i","_normalizeStyle"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { defineComponent as M, ref as y, onMounted as R, watch as W, onBeforeUnmount as F, openBlock as g, createElementBlock as b, createElementVNode as _, toDisplayString as L, unref as B, createCommentVNode as E, createBlock as P, normalizeStyle as q } from "vue";
2
2
  import { init as T } from "pptx-preview";
3
- import { u as A, a as H } from "./index-CFaWV6cC.mjs";
4
- import { _ as I } from "./RendererError.vue_vue_type_script_setup_true_lang-CbgZBSDr.mjs";
3
+ import { u as A, a as H } from "./index-D9QQL7U6.mjs";
4
+ import { _ as I } from "./RendererError.vue_vue_type_script_setup_true_lang-BNoENOWX.mjs";
5
5
  const N = { class: "vfp-relative vfp-flex vfp-flex-col vfp-items-center vfp-w-full vfp-h-full" }, O = {
6
6
  key: 0,
7
7
  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"
@@ -137,4 +137,4 @@ const N = { class: "vfp-relative vfp-flex vfp-flex-col vfp-items-center vfp-w-fu
137
137
  export {
138
138
  J as default
139
139
  };
140
- //# sourceMappingURL=index-CUA_z4GJ.mjs.map
140
+ //# sourceMappingURL=index-BT9hXA6r.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index-CUA_z4GJ.mjs","sources":["../../src/renderers/Pptx/index.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ref, watch, onMounted, onBeforeUnmount } from 'vue';\nimport { init } from 'pptx-preview';\nimport { useTranslator } from '../../composables/useTranslator';\nimport { useFetcher } from '../../composables/useRequest';\nimport RendererError from '../RendererError.vue';\n\nconst props = withDefaults(\n defineProps<{\n url: string;\n tiled?: boolean;\n }>(),\n { tiled: true }\n);\n\nconst { t } = useTranslator();\nconst fetcher = useFetcher();\n\nconst loading = ref(true);\nconst error = ref<string | null>(null);\nconst slideCount = ref(0);\nconst containerRef = ref<HTMLDivElement | null>(null);\nlet previewer: ReturnType<typeof init> | null = null;\nlet resizeObserver: ResizeObserver | null = null;\nlet arrayBufferRef: ArrayBuffer | null = null;\nlet resizeTimeout: number | null = null;\nlet lastDimensions = { width: 0, height: 0 };\n\nconst calculateDimensions = () => {\n if (!containerRef.value) return { width: 960, height: 540 };\n const rawWidth = containerRef.value.clientWidth;\n const parentWidth = containerRef.value.parentElement?.clientWidth || 0;\n const containerWidth = rawWidth > 100 ? rawWidth : parentWidth > 100 ? parentWidth : 300;\n const height = Math.floor((containerWidth * 9) / 16);\n return { width: containerWidth, height };\n};\n\nconst reinitializePreviewer = async () => {\n if (!containerRef.value || !arrayBufferRef || slideCount.value === 0) return;\n\n try {\n if (previewer) {\n try {\n previewer.destroy();\n } catch {\n // ignore\n }\n }\n\n containerRef.value.innerHTML = '';\n\n const currentDimensions = calculateDimensions();\n previewer = init(containerRef.value, {\n width: currentDimensions.width,\n height: props.tiled ? currentDimensions.height * slideCount.value : currentDimensions.height,\n mode: props.tiled ? 'list' : 'slide',\n });\n\n await previewer.preview(arrayBufferRef);\n } catch {\n // 静默处理\n }\n};\n\nconst loadPptx = async () => {\n if (!containerRef.value) return;\n\n loading.value = true;\n error.value = null;\n\n let timeoutId: number | null = window.setTimeout(() => {\n error.value = t.value('pptx.timeout');\n loading.value = false;\n }, 30000);\n\n try {\n const response = await fetcher.value(props.url, {\n mode: 'cors',\n credentials: 'omit',\n redirect: 'follow',\n });\n\n if (!response.ok) {\n if (response.status === 404) throw new Error(t.value('pptx.not_found'));\n if (response.status === 403) throw new Error('无权限访问此文件');\n if (response.status >= 500) throw new Error('服务器错误,请稍后重试');\n throw new Error(`文件加载失败 (${response.status})`);\n }\n\n const arrayBuffer = await response.arrayBuffer();\n if (arrayBuffer.byteLength === 0) throw new Error('文件为空');\n\n arrayBufferRef = arrayBuffer;\n\n // 步骤 1: 创建隐藏容器获取 slideCount\n const hiddenContainer = document.createElement('div');\n hiddenContainer.style.cssText = 'position:absolute;left:-9999px;top:-9999px;visibility:hidden';\n document.body.appendChild(hiddenContainer);\n\n try {\n const tempPreviewer = init(hiddenContainer, {\n width: 100,\n height: 100,\n mode: 'slide',\n });\n\n try {\n await tempPreviewer.preview(arrayBuffer);\n } catch {\n throw new Error(t.value('pptx.invalid_format'));\n }\n\n const count = tempPreviewer.slideCount;\n if (!count || count === 0) throw new Error(t.value('pptx.no_pages'));\n\n tempPreviewer.destroy();\n\n slideCount.value = count;\n\n if (containerRef.value) {\n containerRef.value.innerHTML = '';\n }\n\n const currentDimensions = calculateDimensions();\n previewer = init(containerRef.value, {\n width: currentDimensions.width,\n height: props.tiled ? currentDimensions.height * count : currentDimensions.height,\n mode: props.tiled ? 'list' : 'slide',\n });\n\n await previewer.preview(arrayBuffer);\n\n if (timeoutId !== null) {\n clearTimeout(timeoutId);\n timeoutId = null;\n }\n\n loading.value = false;\n } finally {\n if (document.body.contains(hiddenContainer)) {\n document.body.removeChild(hiddenContainer);\n }\n }\n } catch (err) {\n if (timeoutId !== null) clearTimeout(timeoutId);\n let errorMsg = t.value('pptx.parse_failed');\n if (err instanceof Error) errorMsg = err.message;\n else if (typeof err === 'string') errorMsg = err;\n error.value = errorMsg;\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 (previewer && arrayBufferRef) reinitializePreviewer();\n }, 800);\n });\n\n resizeObserver.observe(containerRef.value);\n\n setTimeout(() => {\n requestAnimationFrame(() => requestAnimationFrame(() => loadPptx()));\n }, 150);\n});\n\nwatch(\n () => props.url,\n (newUrl) => {\n // 只有 URL 有效时才加载(避免空字符串或已 revoke 的 blob URL)\n if (newUrl) {\n loadPptx();\n }\n }\n);\n\nonBeforeUnmount(() => {\n if (resizeObserver) resizeObserver.disconnect();\n if (resizeTimeout !== null) clearTimeout(resizeTimeout);\n arrayBufferRef = null;\n slideCount.value = 0;\n if (previewer) {\n try {\n previewer.destroy();\n } catch {\n // ignore\n }\n }\n previewer = null;\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('pptx.loading') }}</p>\n </div>\n </div>\n\n <RendererError\n v-if=\"error && !loading\"\n :message=\"t('pptx.load_failed')\"\n :detail=\"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=\"pptx-wrapper vfp-w-full vfp-max-w-full md:vfp-max-w-6xl\"\n :style=\"{ opacity: loading ? 0 : 1 }\"\n />\n </div>\n</template>\n"],"names":["props","__props","t","useTranslator","fetcher","useFetcher","loading","ref","error","slideCount","containerRef","previewer","resizeObserver","arrayBufferRef","resizeTimeout","lastDimensions","calculateDimensions","rawWidth","parentWidth","_a","containerWidth","height","reinitializePreviewer","currentDimensions","init","loadPptx","timeoutId","response","arrayBuffer","hiddenContainer","tempPreviewer","count","err","errorMsg","onMounted","isInitialRender","newDimensions","widthDiff","heightDiff","watch","newUrl","onBeforeUnmount","_openBlock","_createElementBlock","_hoisted_1","_hoisted_2","_createElementVNode","_hoisted_3","_hoisted_4","_toDisplayString","_unref","_createBlock","RendererError"],"mappings":"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"}
1
+ {"version":3,"file":"index-BT9hXA6r.mjs","sources":["../../src/renderers/Pptx/index.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ref, watch, onMounted, onBeforeUnmount } from 'vue';\nimport { init } from 'pptx-preview';\nimport { useTranslator } from '../../composables/useTranslator';\nimport { useFetcher } from '../../composables/useRequest';\nimport RendererError from '../RendererError.vue';\n\nconst props = withDefaults(\n defineProps<{\n url: string;\n tiled?: boolean;\n }>(),\n { tiled: true }\n);\n\nconst { t } = useTranslator();\nconst fetcher = useFetcher();\n\nconst loading = ref(true);\nconst error = ref<string | null>(null);\nconst slideCount = ref(0);\nconst containerRef = ref<HTMLDivElement | null>(null);\nlet previewer: ReturnType<typeof init> | null = null;\nlet resizeObserver: ResizeObserver | null = null;\nlet arrayBufferRef: ArrayBuffer | null = null;\nlet resizeTimeout: number | null = null;\nlet lastDimensions = { width: 0, height: 0 };\n\nconst calculateDimensions = () => {\n if (!containerRef.value) return { width: 960, height: 540 };\n const rawWidth = containerRef.value.clientWidth;\n const parentWidth = containerRef.value.parentElement?.clientWidth || 0;\n const containerWidth = rawWidth > 100 ? rawWidth : parentWidth > 100 ? parentWidth : 300;\n const height = Math.floor((containerWidth * 9) / 16);\n return { width: containerWidth, height };\n};\n\nconst reinitializePreviewer = async () => {\n if (!containerRef.value || !arrayBufferRef || slideCount.value === 0) return;\n\n try {\n if (previewer) {\n try {\n previewer.destroy();\n } catch {\n // ignore\n }\n }\n\n containerRef.value.innerHTML = '';\n\n const currentDimensions = calculateDimensions();\n previewer = init(containerRef.value, {\n width: currentDimensions.width,\n height: props.tiled ? currentDimensions.height * slideCount.value : currentDimensions.height,\n mode: props.tiled ? 'list' : 'slide',\n });\n\n await previewer.preview(arrayBufferRef);\n } catch {\n // 静默处理\n }\n};\n\nconst loadPptx = async () => {\n if (!containerRef.value) return;\n\n loading.value = true;\n error.value = null;\n\n let timeoutId: number | null = window.setTimeout(() => {\n error.value = t.value('pptx.timeout');\n loading.value = false;\n }, 30000);\n\n try {\n const response = await fetcher.value(props.url, {\n mode: 'cors',\n credentials: 'omit',\n redirect: 'follow',\n });\n\n if (!response.ok) {\n if (response.status === 404) throw new Error(t.value('pptx.not_found'));\n if (response.status === 403) throw new Error('无权限访问此文件');\n if (response.status >= 500) throw new Error('服务器错误,请稍后重试');\n throw new Error(`文件加载失败 (${response.status})`);\n }\n\n const arrayBuffer = await response.arrayBuffer();\n if (arrayBuffer.byteLength === 0) throw new Error('文件为空');\n\n arrayBufferRef = arrayBuffer;\n\n // 步骤 1: 创建隐藏容器获取 slideCount\n const hiddenContainer = document.createElement('div');\n hiddenContainer.style.cssText = 'position:absolute;left:-9999px;top:-9999px;visibility:hidden';\n document.body.appendChild(hiddenContainer);\n\n try {\n const tempPreviewer = init(hiddenContainer, {\n width: 100,\n height: 100,\n mode: 'slide',\n });\n\n try {\n await tempPreviewer.preview(arrayBuffer);\n } catch {\n throw new Error(t.value('pptx.invalid_format'));\n }\n\n const count = tempPreviewer.slideCount;\n if (!count || count === 0) throw new Error(t.value('pptx.no_pages'));\n\n tempPreviewer.destroy();\n\n slideCount.value = count;\n\n if (containerRef.value) {\n containerRef.value.innerHTML = '';\n }\n\n const currentDimensions = calculateDimensions();\n previewer = init(containerRef.value, {\n width: currentDimensions.width,\n height: props.tiled ? currentDimensions.height * count : currentDimensions.height,\n mode: props.tiled ? 'list' : 'slide',\n });\n\n await previewer.preview(arrayBuffer);\n\n if (timeoutId !== null) {\n clearTimeout(timeoutId);\n timeoutId = null;\n }\n\n loading.value = false;\n } finally {\n if (document.body.contains(hiddenContainer)) {\n document.body.removeChild(hiddenContainer);\n }\n }\n } catch (err) {\n if (timeoutId !== null) clearTimeout(timeoutId);\n let errorMsg = t.value('pptx.parse_failed');\n if (err instanceof Error) errorMsg = err.message;\n else if (typeof err === 'string') errorMsg = err;\n error.value = errorMsg;\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 (previewer && arrayBufferRef) reinitializePreviewer();\n }, 800);\n });\n\n resizeObserver.observe(containerRef.value);\n\n setTimeout(() => {\n requestAnimationFrame(() => requestAnimationFrame(() => loadPptx()));\n }, 150);\n});\n\nwatch(\n () => props.url,\n (newUrl) => {\n // 只有 URL 有效时才加载(避免空字符串或已 revoke 的 blob URL)\n if (newUrl) {\n loadPptx();\n }\n }\n);\n\nonBeforeUnmount(() => {\n if (resizeObserver) resizeObserver.disconnect();\n if (resizeTimeout !== null) clearTimeout(resizeTimeout);\n arrayBufferRef = null;\n slideCount.value = 0;\n if (previewer) {\n try {\n previewer.destroy();\n } catch {\n // ignore\n }\n }\n previewer = null;\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('pptx.loading') }}</p>\n </div>\n </div>\n\n <RendererError\n v-if=\"error && !loading\"\n :message=\"t('pptx.load_failed')\"\n :detail=\"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=\"pptx-wrapper vfp-w-full vfp-max-w-full md:vfp-max-w-6xl\"\n :style=\"{ opacity: loading ? 0 : 1 }\"\n />\n </div>\n</template>\n"],"names":["props","__props","t","useTranslator","fetcher","useFetcher","loading","ref","error","slideCount","containerRef","previewer","resizeObserver","arrayBufferRef","resizeTimeout","lastDimensions","calculateDimensions","rawWidth","parentWidth","_a","containerWidth","height","reinitializePreviewer","currentDimensions","init","loadPptx","timeoutId","response","arrayBuffer","hiddenContainer","tempPreviewer","count","err","errorMsg","onMounted","isInitialRender","newDimensions","widthDiff","heightDiff","watch","newUrl","onBeforeUnmount","_openBlock","_createElementBlock","_hoisted_1","_hoisted_2","_createElementVNode","_hoisted_3","_hoisted_4","_toDisplayString","_unref","_createBlock","RendererError"],"mappings":";;;;;;;;;;;;;;AAOA,UAAMA,IAAQC,GAQR,EAAE,GAAAC,EAAA,IAAMC,EAAA,GACRC,IAAUC,EAAA,GAEVC,IAAUC,EAAI,EAAI,GAClBC,IAAQD,EAAmB,IAAI,GAC/BE,IAAaF,EAAI,CAAC,GAClBG,IAAeH,EAA2B,IAAI;AACpD,QAAII,IAA4C,MAC5CC,IAAwC,MACxCC,IAAqC,MACrCC,IAA+B,MAC/BC,IAAiB,EAAE,OAAO,GAAG,QAAQ,EAAA;AAEzC,UAAMC,IAAsB,MAAM;;AAChC,UAAI,CAACN,EAAa,MAAO,QAAO,EAAE,OAAO,KAAK,QAAQ,IAAA;AACtD,YAAMO,IAAWP,EAAa,MAAM,aAC9BQ,MAAcC,IAAAT,EAAa,MAAM,kBAAnB,gBAAAS,EAAkC,gBAAe,GAC/DC,IAAiBH,IAAW,MAAMA,IAAWC,IAAc,MAAMA,IAAc,KAC/EG,IAAS,KAAK,MAAOD,IAAiB,IAAK,EAAE;AACnD,aAAO,EAAE,OAAOA,GAAgB,QAAAC,EAAA;AAAA,IAClC,GAEMC,IAAwB,YAAY;AACxC,UAAI,GAACZ,EAAa,SAAS,CAACG,KAAkBJ,EAAW,UAAU;AAEnE,YAAI;AACF,cAAIE;AACF,gBAAI;AACF,cAAAA,EAAU,QAAA;AAAA,YACZ,QAAQ;AAAA,YAER;AAGF,UAAAD,EAAa,MAAM,YAAY;AAE/B,gBAAMa,IAAoBP,EAAA;AAC1B,UAAAL,IAAYa,EAAKd,EAAa,OAAO;AAAA,YACnC,OAAOa,EAAkB;AAAA,YACzB,QAAQvB,EAAM,QAAQuB,EAAkB,SAASd,EAAW,QAAQc,EAAkB;AAAA,YACtF,MAAMvB,EAAM,QAAQ,SAAS;AAAA,UAAA,CAC9B,GAED,MAAMW,EAAU,QAAQE,CAAc;AAAA,QACxC,QAAQ;AAAA,QAER;AAAA,IACF,GAEMY,IAAW,YAAY;AAC3B,UAAI,CAACf,EAAa,MAAO;AAEzB,MAAAJ,EAAQ,QAAQ,IAChBE,EAAM,QAAQ;AAEd,UAAIkB,IAA2B,OAAO,WAAW,MAAM;AACrD,QAAAlB,EAAM,QAAQN,EAAE,MAAM,cAAc,GACpCI,EAAQ,QAAQ;AAAA,MAClB,GAAG,GAAK;AAER,UAAI;AACF,cAAMqB,IAAW,MAAMvB,EAAQ,MAAMJ,EAAM,KAAK;AAAA,UAC9C,MAAM;AAAA,UACN,aAAa;AAAA,UACb,UAAU;AAAA,QAAA,CACX;AAED,YAAI,CAAC2B,EAAS;AACZ,gBAAIA,EAAS,WAAW,MAAW,IAAI,MAAMzB,EAAE,MAAM,gBAAgB,CAAC,IAClEyB,EAAS,WAAW,MAAW,IAAI,MAAM,UAAU,IACnDA,EAAS,UAAU,MAAW,IAAI,MAAM,aAAa,IACnD,IAAI,MAAM,WAAWA,EAAS,MAAM,GAAG;AAG/C,cAAMC,IAAc,MAAMD,EAAS,YAAA;AACnC,YAAIC,EAAY,eAAe,EAAG,OAAM,IAAI,MAAM,MAAM;AAExD,QAAAf,IAAiBe;AAGjB,cAAMC,IAAkB,SAAS,cAAc,KAAK;AACpD,QAAAA,EAAgB,MAAM,UAAU,gEAChC,SAAS,KAAK,YAAYA,CAAe;AAEzC,YAAI;AACF,gBAAMC,IAAgBN,EAAKK,GAAiB;AAAA,YAC1C,OAAO;AAAA,YACP,QAAQ;AAAA,YACR,MAAM;AAAA,UAAA,CACP;AAED,cAAI;AACF,kBAAMC,EAAc,QAAQF,CAAW;AAAA,UACzC,QAAQ;AACN,kBAAM,IAAI,MAAM1B,EAAE,MAAM,qBAAqB,CAAC;AAAA,UAChD;AAEA,gBAAM6B,IAAQD,EAAc;AAC5B,cAAI,CAACC,KAASA,MAAU,EAAG,OAAM,IAAI,MAAM7B,EAAE,MAAM,eAAe,CAAC;AAEnE,UAAA4B,EAAc,QAAA,GAEdrB,EAAW,QAAQsB,GAEfrB,EAAa,UACfA,EAAa,MAAM,YAAY;AAGjC,gBAAMa,IAAoBP,EAAA;AAC1B,UAAAL,IAAYa,EAAKd,EAAa,OAAO;AAAA,YACnC,OAAOa,EAAkB;AAAA,YACzB,QAAQvB,EAAM,QAAQuB,EAAkB,SAASQ,IAAQR,EAAkB;AAAA,YAC3E,MAAMvB,EAAM,QAAQ,SAAS;AAAA,UAAA,CAC9B,GAED,MAAMW,EAAU,QAAQiB,CAAW,GAE/BF,MAAc,SAChB,aAAaA,CAAS,GACtBA,IAAY,OAGdpB,EAAQ,QAAQ;AAAA,QAClB,UAAA;AACE,UAAI,SAAS,KAAK,SAASuB,CAAe,KACxC,SAAS,KAAK,YAAYA,CAAe;AAAA,QAE7C;AAAA,MACF,SAASG,GAAK;AACZ,QAAIN,MAAc,QAAM,aAAaA,CAAS;AAC9C,YAAIO,IAAW/B,EAAE,MAAM,mBAAmB;AAC1C,QAAI8B,aAAe,QAAOC,IAAWD,EAAI,UAChC,OAAOA,KAAQ,aAAUC,IAAWD,IAC7CxB,EAAM,QAAQyB,GACd3B,EAAQ,QAAQ;AAAA,MAClB;AAAA,IACF;AAEA,WAAA4B,EAAU,MAAM;AACd,UAAI,CAACxB,EAAa,MAAO;AAEzB,UAAIyB,IAAkB;AAEtB,MAAAvB,IAAiB,IAAI,eAAe,MAAM;AACxC,YAAIuB,GAAiB;AACnB,UAAAA,IAAkB,IAClBpB,IAAiBC,EAAA;AACjB;AAAA,QACF;AAEA,cAAMoB,IAAgBpB,EAAA,GAChBqB,IAAY,KAAK,IAAItB,EAAe,QAAQqB,EAAc,KAAK,GAC/DE,IAAa,KAAK,IAAIvB,EAAe,SAASqB,EAAc,MAAM;AAExE,QAAIC,IAAY,MAAMC,IAAa,OAEnCvB,IAAiBqB,GAEbtB,MAAkB,QAAM,aAAaA,CAAa,GAEtDA,IAAgB,OAAO,WAAW,MAAM;AACtC,UAAIH,KAAaE,KAAgBS,EAAA;AAAA,QACnC,GAAG,GAAG;AAAA,MACR,CAAC,GAEDV,EAAe,QAAQF,EAAa,KAAK,GAEzC,WAAW,MAAM;AACf,8BAAsB,MAAM,sBAAsB,MAAMe,EAAA,CAAU,CAAC;AAAA,MACrE,GAAG,GAAG;AAAA,IACR,CAAC,GAEDc;AAAA,MACE,MAAMvC,EAAM;AAAA,MACZ,CAACwC,MAAW;AAEV,QAAIA,KACFf,EAAA;AAAA,MAEJ;AAAA,IAAA,GAGFgB,EAAgB,MAAM;AAKpB,UAJI7B,OAA+B,WAAA,GAC/BE,MAAkB,QAAM,aAAaA,CAAa,GACtDD,IAAiB,MACjBJ,EAAW,QAAQ,GACfE;AACF,YAAI;AACF,UAAAA,EAAU,QAAA;AAAA,QACZ,QAAQ;AAAA,QAER;AAEF,MAAAA,IAAY;AAAA,IACd,CAAC,cAIC+B,EAAA,GAAAC,EA0BM,OA1BNC,GA0BM;AAAA,MAxBItC,EAAA,SADRoC,EAAA,GAAAC,EAUM,OAVNE,GAUM;AAAA,QANJC,EAKM,OALNC,GAKM;AAAA,0BAJJD,EAEE,OAAA,EADA,OAAM,iKAAA,GAAgK,MAAA,EAAA;AAAA,UAExKA,EAAuG,KAAvGE,GAAuGC,EAAxBC,EAAAhD,CAAA,EAAC,cAAA,CAAA,GAAA,CAAA;AAAA,QAAA;;MAK5EM,EAAA,UAAUF,EAAA,cADlB6C,EAKEC,GAAA;AAAA;QAHC,SAASF,EAAAhD,CAAA,EAAC,kBAAA;AAAA,QACV,QAAQM,EAAA;AAAA,QACT,OAAM;AAAA,MAAA;MAICA,EAAA,0BADTmC,EAKE,OAAA;AAAA;iBAHI;AAAA,QAAJ,KAAIjC;AAAA,QACJ,OAAM;AAAA,QACL,oBAAkBJ,EAAA,QAAO,IAAA,GAAA;AAAA,MAAA;;;;"}
@@ -1,7 +1,7 @@
1
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-CFaWV6cC.mjs";
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-D9QQL7U6.mjs";
3
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";
4
+ import { _ as be } from "./RendererError.vue_vue_type_script_setup_true_lang-BNoENOWX.mjs";
5
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
6
  name: "ResizableSplit",
7
7
  __name: "ResizableSplit",
@@ -194,7 +194,7 @@ const ke = { class: "vfp-flex vfp-flex-shrink-0 vfp-border-b vfp-border-line-wea
194
194
  emits: ["statsChange"],
195
195
  setup(s, { emit: M }) {
196
196
  const l = oe(
197
- () => import("./index-CFaWV6cC.mjs").then((e) => e.i)
197
+ () => import("./index-D9QQL7U6.mjs").then((e) => e.i)
198
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
199
  var e;
200
200
  (e = f.value) != null && e.blobUrl && URL.revokeObjectURL(f.value.blobUrl);
@@ -315,4 +315,4 @@ const ke = { class: "vfp-flex vfp-flex-shrink-0 vfp-border-b vfp-border-line-wea
315
315
  export {
316
316
  Ve as default
317
317
  };
318
- //# sourceMappingURL=index-Cr0Z36a0.mjs.map
318
+ //# sourceMappingURL=index-BcKI75RW.mjs.map