@eternalheart/vue-file-preview 1.3.13 → 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 (73) hide show
  1. package/lib/FilePreviewContent.vue.d.ts +3 -0
  2. package/lib/FilePreviewContent.vue.d.ts.map +1 -1
  3. package/lib/FilePreviewEmbed.vue.d.ts +5 -0
  4. package/lib/FilePreviewEmbed.vue.d.ts.map +1 -1
  5. package/lib/FilePreviewModal.vue.d.ts.map +1 -1
  6. 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
  7. package/lib/chunks/RendererError.vue_vue_type_script_setup_true_lang-BNoENOWX.mjs.map +1 -0
  8. package/lib/chunks/index-8ETACZ6T.mjs +267 -0
  9. package/lib/chunks/index-8ETACZ6T.mjs.map +1 -0
  10. package/lib/chunks/{index-DyipSoKh.mjs → index-B-LW-GJO.mjs} +24 -21
  11. package/lib/chunks/index-B-LW-GJO.mjs.map +1 -0
  12. package/lib/chunks/{index-Cjnw238n.mjs → index-BT9hXA6r.mjs} +3 -3
  13. package/lib/chunks/{index-Cjnw238n.mjs.map → index-BT9hXA6r.mjs.map} +1 -1
  14. package/lib/chunks/{index-CyrFxdIJ.mjs → index-BcKI75RW.mjs} +4 -4
  15. package/lib/chunks/{index-CyrFxdIJ.mjs.map → index-BcKI75RW.mjs.map} +1 -1
  16. package/lib/chunks/{index-Ctd0JQ6K.mjs → index-By6vGdnK.mjs} +3 -3
  17. package/lib/chunks/{index-Ctd0JQ6K.mjs.map → index-By6vGdnK.mjs.map} +1 -1
  18. package/lib/chunks/{index-BHi1WRQZ.mjs → index-C-Mu0fvH.mjs} +3 -3
  19. package/lib/chunks/{index-BHi1WRQZ.mjs.map → index-C-Mu0fvH.mjs.map} +1 -1
  20. package/lib/chunks/{index-DT9dPz8I.mjs → index-CGSq7-Q-.mjs} +3 -3
  21. package/lib/chunks/{index-DT9dPz8I.mjs.map → index-CGSq7-Q-.mjs.map} +1 -1
  22. package/lib/chunks/{index-DTtHrdBl.mjs → index-CWpU8prZ.mjs} +11 -11
  23. package/lib/chunks/index-CWpU8prZ.mjs.map +1 -0
  24. package/lib/chunks/index-CYa_XneH.mjs +303 -0
  25. package/lib/chunks/index-CYa_XneH.mjs.map +1 -0
  26. package/lib/chunks/{index-CYt6tpQC.mjs → index-CbJkkdEB.mjs} +9 -9
  27. package/lib/chunks/index-CbJkkdEB.mjs.map +1 -0
  28. package/lib/chunks/{index-DEoR7aDN.mjs → index-CoITLoYL.mjs} +3 -3
  29. package/lib/chunks/{index-DEoR7aDN.mjs.map → index-CoITLoYL.mjs.map} +1 -1
  30. package/lib/chunks/{index-Oxwizt6-.mjs → index-D9QQL7U6.mjs} +605 -557
  31. package/lib/chunks/index-D9QQL7U6.mjs.map +1 -0
  32. package/lib/chunks/{index-BvegaxQF.mjs → index-DAdO2lkI.mjs} +32 -32
  33. package/lib/chunks/index-DAdO2lkI.mjs.map +1 -0
  34. package/lib/chunks/{index-GGGDPwxX.mjs → index-DGqDJMot.mjs} +3 -3
  35. package/lib/chunks/{index-GGGDPwxX.mjs.map → index-DGqDJMot.mjs.map} +1 -1
  36. package/lib/chunks/{index-DIe0vHlt.mjs → index-DTyG1Wzp.mjs} +8 -8
  37. package/lib/chunks/index-DTyG1Wzp.mjs.map +1 -0
  38. package/lib/chunks/{index-Dw1U4YqT.mjs → index-DglMeKJM.mjs} +36 -38
  39. package/lib/chunks/{index-Dw1U4YqT.mjs.map → index-DglMeKJM.mjs.map} +1 -1
  40. package/lib/chunks/{index-B2lqsdp7.mjs → index-OOoaYpkl.mjs} +3 -3
  41. package/lib/chunks/{index-B2lqsdp7.mjs.map → index-OOoaYpkl.mjs.map} +1 -1
  42. package/lib/chunks/{index-DBw8tvyb.mjs → index-jcgLzyDR.mjs} +4 -4
  43. package/lib/chunks/{index-DBw8tvyb.mjs.map → index-jcgLzyDR.mjs.map} +1 -1
  44. package/lib/chunks/{index-BTW1xwB9.mjs → index-nFIiu1lA.mjs} +3 -3
  45. package/lib/chunks/{index-BTW1xwB9.mjs.map → index-nFIiu1lA.mjs.map} +1 -1
  46. package/lib/index.cjs +40 -32
  47. package/lib/index.cjs.map +1 -1
  48. package/lib/index.css +1 -1
  49. package/lib/index.mjs +1 -1
  50. package/lib/renderers/Audio/index.vue.d.ts.map +1 -1
  51. package/lib/renderers/Docx/index.vue.d.ts.map +1 -1
  52. package/lib/renderers/Epub/index.vue.d.ts.map +1 -1
  53. package/lib/renderers/Markdown/index.vue.d.ts.map +1 -1
  54. package/lib/renderers/Pdf/index.vue.d.ts +3 -0
  55. package/lib/renderers/Pdf/index.vue.d.ts.map +1 -1
  56. package/lib/renderers/Pdf/toolbar.d.ts +5 -0
  57. package/lib/renderers/Pdf/toolbar.d.ts.map +1 -1
  58. package/lib/renderers/RendererError.vue.d.ts.map +1 -1
  59. package/lib/renderers/Subtitle/index.vue.d.ts.map +1 -1
  60. package/lib/renderers/Text/index.vue.d.ts.map +1 -1
  61. package/lib/renderers/Xml/index.vue.d.ts.map +1 -1
  62. package/package.json +1 -1
  63. package/lib/chunks/RendererError.vue_vue_type_script_setup_true_lang-CbgZBSDr.mjs.map +0 -1
  64. package/lib/chunks/index-BvegaxQF.mjs.map +0 -1
  65. package/lib/chunks/index-CYt6tpQC.mjs.map +0 -1
  66. package/lib/chunks/index-DIe0vHlt.mjs.map +0 -1
  67. package/lib/chunks/index-DTtHrdBl.mjs.map +0 -1
  68. package/lib/chunks/index-DX_NBPzS.mjs +0 -248
  69. package/lib/chunks/index-DX_NBPzS.mjs.map +0 -1
  70. package/lib/chunks/index-DyipSoKh.mjs.map +0 -1
  71. package/lib/chunks/index-Oxwizt6-.mjs.map +0 -1
  72. package/lib/chunks/index-Zwl5J-Uw.mjs +0 -166
  73. package/lib/chunks/index-Zwl5J-Uw.mjs.map +0 -1
@@ -24,6 +24,8 @@ interface Props {
24
24
  shouldFetchAsBlob?: ShouldFetchAsBlob;
25
25
  /** 自定义下载回调;不传时库内默认通过 fetcher 拉 Blob 触发下载 */
26
26
  onDownload?: (file: PreviewFile) => void | Promise<void>;
27
+ /** 关闭回调:传入后工具栏显示关闭按钮 */
28
+ onClose?: () => void;
27
29
  }
28
30
  declare const _default: import("vue").DefineComponent<Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
29
31
  close: () => any;
@@ -36,6 +38,7 @@ declare const _default: import("vue").DefineComponent<Props, {}, {}, {}, {}, imp
36
38
  }>, {
37
39
  requestInit: RequestInitFactory;
38
40
  requestHandler: RequestHandler;
41
+ onClose: () => void;
39
42
  mode: "modal" | "embed";
40
43
  theme: Theme;
41
44
  customRenderers: CustomRenderer[];
@@ -1 +1 @@
1
- {"version":3,"file":"FilePreviewContent.vue.d.ts","sourceRoot":"","sources":["../src/FilePreviewContent.vue"],"names":[],"mappings":"AA2vBA,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;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;;AA0nC1D,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"}
@@ -24,16 +24,21 @@ interface Props {
24
24
  shouldFetchAsBlob?: ShouldFetchAsBlob;
25
25
  /** 自定义下载回调;不传时库内默认通过 fetcher 拉 Blob 触发下载 */
26
26
  onDownload?: (file: PreviewFile) => void | Promise<void>;
27
+ /** 关闭回调:传入后工具栏显示关闭按钮 */
28
+ onClose?: () => void;
27
29
  }
28
30
  declare const _default: import("vue").DefineComponent<Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
31
+ close: () => any;
29
32
  navigate: (index: number) => any;
30
33
  "custom-event": (payload: CustomRendererEventPayload<unknown>) => any;
31
34
  }, string, import("vue").PublicProps, Readonly<Props> & Readonly<{
35
+ onClose?: (() => any) | undefined;
32
36
  onNavigate?: ((index: number) => any) | undefined;
33
37
  "onCustom-event"?: ((payload: CustomRendererEventPayload<unknown>) => any) | undefined;
34
38
  }>, {
35
39
  requestInit: RequestInitFactory;
36
40
  requestHandler: RequestHandler;
41
+ onClose: () => void;
37
42
  height: number | string;
38
43
  width: number | string;
39
44
  theme: Theme;
@@ -1 +1 @@
1
- {"version":3,"file":"FilePreviewEmbed.vue.d.ts","sourceRoot":"","sources":["../src/FilePreviewEmbed.vue"],"names":[],"mappings":"AAsHA,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,0BAA0B,EAAE,cAAc,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACjM,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAG9C,UAAU,KAAK;IACb,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,cAAc,EAAE,CAAC;IACnC,uBAAuB;IACvB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,uBAAuB;IACvB,MAAM,CAAC,EAAE,MAAM,GAAG,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,sBAAsB;IACtB,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;YAZtB,MAAM,GAAG,MAAM;WAFhB,MAAM,GAAG,MAAM;WAUf,KAAK;kBAbE,MAAM;qBACH,cAAc,EAAE;YAMzB,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;;AAsK1D,wBAQG"}
1
+ {"version":3,"file":"FilePreviewEmbed.vue.d.ts","sourceRoot":"","sources":["../src/FilePreviewEmbed.vue"],"names":[],"mappings":"AA4HA,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,0BAA0B,EAAE,cAAc,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACjM,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAG9C,UAAU,KAAK;IACb,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,cAAc,EAAE,CAAC;IACnC,uBAAuB;IACvB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,uBAAuB;IACvB,MAAM,CAAC,EAAE,MAAM,GAAG,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,sBAAsB;IACtB,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;YAlBX,MAAM,GAAG,MAAM;WAFhB,MAAM,GAAG,MAAM;WAUf,KAAK;kBAbE,MAAM;qBACH,cAAc,EAAE;YAMzB,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;;AAiL1D,wBAQG"}
@@ -1 +1 @@
1
- {"version":3,"file":"FilePreviewModal.vue.d.ts","sourceRoot":"","sources":["../src/FilePreviewModal.vue"],"names":[],"mappings":"AAoIA,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,0BAA0B,EAAE,cAAc,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACjM,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAI9C,UAAU,KAAK;IACb,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,OAAO,CAAC;IAChB,eAAe,CAAC,EAAE,cAAc,EAAE,CAAC;IACnC,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,sBAAsB;IACtB,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;WAJvB,KAAK;qBARK,cAAc,EAAE;YAEzB,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;;AAuN1D,wBAQG"}
1
+ {"version":3,"file":"FilePreviewModal.vue.d.ts","sourceRoot":"","sources":["../src/FilePreviewModal.vue"],"names":[],"mappings":"AAqIA,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,0BAA0B,EAAE,cAAc,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACjM,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAI9C,UAAU,KAAK;IACb,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,OAAO,CAAC;IAChB,eAAe,CAAC,EAAE,cAAc,EAAE,CAAC;IACnC,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,sBAAsB;IACtB,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;WAJvB,KAAK;qBARK,cAAc,EAAE;YAEzB,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;;AAyN1D,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-Oxwizt6-.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-DyipSoKh.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-Oxwizt6-.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-Cjnw238n.mjs.map
140
+ //# sourceMappingURL=index-BT9hXA6r.mjs.map