@eternalheart/react-file-preview 1.3.10 → 1.3.12

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 (284) hide show
  1. package/lib/RequestContext.d.ts +1 -1
  2. package/lib/RequestContext.d.ts.map +1 -1
  3. package/lib/chunks/RendererError-BH6fzLrN.mjs +15 -0
  4. package/lib/chunks/RendererError-BH6fzLrN.mjs.map +1 -0
  5. package/lib/chunks/avifLoader-BP3fgcMm-BnpxLhxp.mjs +56 -0
  6. package/lib/chunks/avifLoader-BP3fgcMm-BnpxLhxp.mjs.map +1 -0
  7. package/lib/chunks/heicLoader-CH_raQNn-1fBLaICM.mjs +37 -0
  8. package/lib/chunks/heicLoader-CH_raQNn-1fBLaICM.mjs.map +1 -0
  9. package/lib/chunks/index-BBvL23cc.mjs +105 -0
  10. package/lib/chunks/index-BBvL23cc.mjs.map +1 -0
  11. package/lib/chunks/index-BCbSb9Ob.mjs +2323 -0
  12. package/lib/chunks/index-BCbSb9Ob.mjs.map +1 -0
  13. package/lib/chunks/{index-DveR0rOk.mjs → index-BPsJtP6e.mjs} +41 -38
  14. package/lib/chunks/index-BPsJtP6e.mjs.map +1 -0
  15. package/lib/chunks/index-CA8OvqPT.mjs +55 -0
  16. package/lib/chunks/index-CA8OvqPT.mjs.map +1 -0
  17. package/lib/chunks/index-CJGtdAy7.mjs +114 -0
  18. package/lib/chunks/index-CJGtdAy7.mjs.map +1 -0
  19. package/lib/chunks/{index-tecGXW2S.mjs → index-CeQf1qNC.mjs} +85 -83
  20. package/lib/chunks/index-CeQf1qNC.mjs.map +1 -0
  21. package/lib/chunks/{index-DPpUj8Yy.mjs → index-Cxf4CLJZ.mjs} +99 -98
  22. package/lib/chunks/index-Cxf4CLJZ.mjs.map +1 -0
  23. package/lib/chunks/index-D2t64h6I.mjs +96 -0
  24. package/lib/chunks/index-D2t64h6I.mjs.map +1 -0
  25. package/lib/chunks/{index-C5YHI0Zs.mjs → index-DAo4n3Mq.mjs} +52 -51
  26. package/lib/chunks/index-DAo4n3Mq.mjs.map +1 -0
  27. package/lib/chunks/index-DCTwUpKS.mjs +13097 -0
  28. package/lib/chunks/index-DCTwUpKS.mjs.map +1 -0
  29. package/lib/chunks/index-DJZWizxK.mjs +136 -0
  30. package/lib/chunks/index-DJZWizxK.mjs.map +1 -0
  31. package/lib/chunks/{index-DN8BQIqo.mjs → index-DRCA7PhQ.mjs} +79 -78
  32. package/lib/chunks/index-DRCA7PhQ.mjs.map +1 -0
  33. package/lib/chunks/index-DdkkEzw3.mjs +12335 -0
  34. package/lib/chunks/index-DdkkEzw3.mjs.map +1 -0
  35. package/lib/chunks/{index-DSAXdrgU.mjs → index-DlptjfMf.mjs} +76 -75
  36. package/lib/chunks/index-DlptjfMf.mjs.map +1 -0
  37. package/lib/chunks/{index-CwmZQ-JO.mjs → index-DrgP7cc7.mjs} +67 -64
  38. package/lib/chunks/index-DrgP7cc7.mjs.map +1 -0
  39. package/lib/chunks/index-Dx8aLIDX.mjs +113 -0
  40. package/lib/chunks/index-Dx8aLIDX.mjs.map +1 -0
  41. package/lib/chunks/index-fhiaa9rv.mjs +222 -0
  42. package/lib/chunks/index-fhiaa9rv.mjs.map +1 -0
  43. package/lib/chunks/index-qEUWJYQ5.mjs +594 -0
  44. package/lib/chunks/index-qEUWJYQ5.mjs.map +1 -0
  45. package/lib/chunks/index-vaILKWGV.mjs +54 -0
  46. package/lib/chunks/index-vaILKWGV.mjs.map +1 -0
  47. package/lib/chunks/jp2Loader-Bn-qPMbD-Bn-qPMbD.mjs +122 -0
  48. package/lib/chunks/jp2Loader-Bn-qPMbD-Bn-qPMbD.mjs.map +1 -0
  49. package/lib/chunks/psdLoader-Doxw3mWm-DVOGFSlh.mjs +73 -0
  50. package/lib/chunks/psdLoader-Doxw3mWm-DVOGFSlh.mjs.map +1 -0
  51. package/lib/chunks/rawLoader-0mLvxCNp-CJmERiK7.mjs +82 -0
  52. package/lib/chunks/rawLoader-0mLvxCNp-CJmERiK7.mjs.map +1 -0
  53. package/lib/chunks/tiffLoader-CTFKVLqJ-B84NfwhR.mjs +60 -0
  54. package/lib/chunks/tiffLoader-CTFKVLqJ-B84NfwhR.mjs.map +1 -0
  55. package/lib/chunks/{useShikiHighlight-DHFYu0BU.mjs → useShikiHighlight-Cq02e63J.mjs} +2 -2
  56. package/lib/chunks/{useShikiHighlight-DHFYu0BU.mjs.map → useShikiHighlight-Cq02e63J.mjs.map} +1 -1
  57. package/lib/index.cjs +31 -22
  58. package/lib/index.cjs.map +1 -1
  59. package/lib/index.css +1 -1
  60. package/lib/index.mjs +8 -8
  61. package/lib/renderers/Audio/index.d.ts.map +1 -1
  62. package/lib/renderers/Csv/index.d.ts.map +1 -1
  63. package/lib/renderers/Docx/index.d.ts.map +1 -1
  64. package/lib/renderers/Epub/index.d.ts.map +1 -1
  65. package/lib/renderers/Font/index.d.ts.map +1 -1
  66. package/lib/renderers/Image/index.d.ts +2 -0
  67. package/lib/renderers/Image/index.d.ts.map +1 -1
  68. package/lib/renderers/Json/index.d.ts.map +1 -1
  69. package/lib/renderers/Markdown/index.d.ts.map +1 -1
  70. package/lib/renderers/Mobi/index.d.ts.map +1 -1
  71. package/lib/renderers/Msg/index.d.ts.map +1 -1
  72. package/lib/renderers/Pdf/index.d.ts.map +1 -1
  73. package/lib/renderers/Pptx/index.d.ts.map +1 -1
  74. package/lib/renderers/RendererError.d.ts +8 -0
  75. package/lib/renderers/RendererError.d.ts.map +1 -0
  76. package/lib/renderers/Subtitle/index.d.ts.map +1 -1
  77. package/lib/renderers/Text/index.d.ts.map +1 -1
  78. package/lib/renderers/Video/index.d.ts +1 -0
  79. package/lib/renderers/Video/index.d.ts.map +1 -1
  80. package/lib/renderers/Xlsx/index.d.ts.map +1 -1
  81. package/lib/renderers/Xml/index.d.ts.map +1 -1
  82. package/lib/renderers/Zip/index.d.ts.map +1 -1
  83. package/package.json +13 -5
  84. package/lib/chunks/index-B0JUZ5rS.mjs +0 -110
  85. package/lib/chunks/index-B0JUZ5rS.mjs.map +0 -1
  86. package/lib/chunks/index-BAYc4aBz.mjs +0 -129
  87. package/lib/chunks/index-BAYc4aBz.mjs.map +0 -1
  88. package/lib/chunks/index-BOQJNL71.mjs +0 -103
  89. package/lib/chunks/index-BOQJNL71.mjs.map +0 -1
  90. package/lib/chunks/index-BkU8rK-0.mjs +0 -51
  91. package/lib/chunks/index-BkU8rK-0.mjs.map +0 -1
  92. package/lib/chunks/index-BnDoXBnH.mjs +0 -257
  93. package/lib/chunks/index-BnDoXBnH.mjs.map +0 -1
  94. package/lib/chunks/index-C5YHI0Zs.mjs.map +0 -1
  95. package/lib/chunks/index-CGNWXFy3.mjs +0 -2081
  96. package/lib/chunks/index-CGNWXFy3.mjs.map +0 -1
  97. package/lib/chunks/index-CwmZQ-JO.mjs.map +0 -1
  98. package/lib/chunks/index-CzflrElZ.mjs +0 -52
  99. package/lib/chunks/index-CzflrElZ.mjs.map +0 -1
  100. package/lib/chunks/index-CztCCF7q.mjs +0 -116
  101. package/lib/chunks/index-CztCCF7q.mjs.map +0 -1
  102. package/lib/chunks/index-DKEcGewg.mjs +0 -96
  103. package/lib/chunks/index-DKEcGewg.mjs.map +0 -1
  104. package/lib/chunks/index-DN8BQIqo.mjs.map +0 -1
  105. package/lib/chunks/index-DPpUj8Yy.mjs.map +0 -1
  106. package/lib/chunks/index-DSAXdrgU.mjs.map +0 -1
  107. package/lib/chunks/index-DveR0rOk.mjs.map +0 -1
  108. package/lib/chunks/index-QfO-sASN.mjs +0 -152
  109. package/lib/chunks/index-QfO-sASN.mjs.map +0 -1
  110. package/lib/chunks/index-h9bO9wmq.mjs +0 -99
  111. package/lib/chunks/index-h9bO9wmq.mjs.map +0 -1
  112. package/lib/chunks/index-mvSVNKlQ.mjs +0 -228
  113. package/lib/chunks/index-mvSVNKlQ.mjs.map +0 -1
  114. package/lib/chunks/index-tecGXW2S.mjs.map +0 -1
  115. package/lib/pdfjs/cmaps/78-EUC-H.bcmap +0 -0
  116. package/lib/pdfjs/cmaps/78-EUC-V.bcmap +0 -0
  117. package/lib/pdfjs/cmaps/78-H.bcmap +0 -0
  118. package/lib/pdfjs/cmaps/78-RKSJ-H.bcmap +0 -0
  119. package/lib/pdfjs/cmaps/78-RKSJ-V.bcmap +0 -0
  120. package/lib/pdfjs/cmaps/78-V.bcmap +0 -0
  121. package/lib/pdfjs/cmaps/78ms-RKSJ-H.bcmap +0 -0
  122. package/lib/pdfjs/cmaps/78ms-RKSJ-V.bcmap +0 -0
  123. package/lib/pdfjs/cmaps/83pv-RKSJ-H.bcmap +0 -0
  124. package/lib/pdfjs/cmaps/90ms-RKSJ-H.bcmap +0 -0
  125. package/lib/pdfjs/cmaps/90ms-RKSJ-V.bcmap +0 -0
  126. package/lib/pdfjs/cmaps/90msp-RKSJ-H.bcmap +0 -0
  127. package/lib/pdfjs/cmaps/90msp-RKSJ-V.bcmap +0 -0
  128. package/lib/pdfjs/cmaps/90pv-RKSJ-H.bcmap +0 -0
  129. package/lib/pdfjs/cmaps/90pv-RKSJ-V.bcmap +0 -0
  130. package/lib/pdfjs/cmaps/Add-H.bcmap +0 -0
  131. package/lib/pdfjs/cmaps/Add-RKSJ-H.bcmap +0 -0
  132. package/lib/pdfjs/cmaps/Add-RKSJ-V.bcmap +0 -0
  133. package/lib/pdfjs/cmaps/Add-V.bcmap +0 -0
  134. package/lib/pdfjs/cmaps/Adobe-CNS1-0.bcmap +0 -0
  135. package/lib/pdfjs/cmaps/Adobe-CNS1-1.bcmap +0 -0
  136. package/lib/pdfjs/cmaps/Adobe-CNS1-2.bcmap +0 -0
  137. package/lib/pdfjs/cmaps/Adobe-CNS1-3.bcmap +0 -0
  138. package/lib/pdfjs/cmaps/Adobe-CNS1-4.bcmap +0 -0
  139. package/lib/pdfjs/cmaps/Adobe-CNS1-5.bcmap +0 -0
  140. package/lib/pdfjs/cmaps/Adobe-CNS1-6.bcmap +0 -0
  141. package/lib/pdfjs/cmaps/Adobe-CNS1-UCS2.bcmap +0 -0
  142. package/lib/pdfjs/cmaps/Adobe-GB1-0.bcmap +0 -0
  143. package/lib/pdfjs/cmaps/Adobe-GB1-1.bcmap +0 -0
  144. package/lib/pdfjs/cmaps/Adobe-GB1-2.bcmap +0 -0
  145. package/lib/pdfjs/cmaps/Adobe-GB1-3.bcmap +0 -0
  146. package/lib/pdfjs/cmaps/Adobe-GB1-4.bcmap +0 -0
  147. package/lib/pdfjs/cmaps/Adobe-GB1-5.bcmap +0 -0
  148. package/lib/pdfjs/cmaps/Adobe-GB1-UCS2.bcmap +0 -0
  149. package/lib/pdfjs/cmaps/Adobe-Japan1-0.bcmap +0 -0
  150. package/lib/pdfjs/cmaps/Adobe-Japan1-1.bcmap +0 -0
  151. package/lib/pdfjs/cmaps/Adobe-Japan1-2.bcmap +0 -0
  152. package/lib/pdfjs/cmaps/Adobe-Japan1-3.bcmap +0 -0
  153. package/lib/pdfjs/cmaps/Adobe-Japan1-4.bcmap +0 -0
  154. package/lib/pdfjs/cmaps/Adobe-Japan1-5.bcmap +0 -0
  155. package/lib/pdfjs/cmaps/Adobe-Japan1-6.bcmap +0 -0
  156. package/lib/pdfjs/cmaps/Adobe-Japan1-UCS2.bcmap +0 -0
  157. package/lib/pdfjs/cmaps/Adobe-Korea1-0.bcmap +0 -0
  158. package/lib/pdfjs/cmaps/Adobe-Korea1-1.bcmap +0 -0
  159. package/lib/pdfjs/cmaps/Adobe-Korea1-2.bcmap +0 -0
  160. package/lib/pdfjs/cmaps/Adobe-Korea1-UCS2.bcmap +0 -0
  161. package/lib/pdfjs/cmaps/B5-H.bcmap +0 -0
  162. package/lib/pdfjs/cmaps/B5-V.bcmap +0 -0
  163. package/lib/pdfjs/cmaps/B5pc-H.bcmap +0 -0
  164. package/lib/pdfjs/cmaps/B5pc-V.bcmap +0 -0
  165. package/lib/pdfjs/cmaps/CNS-EUC-H.bcmap +0 -0
  166. package/lib/pdfjs/cmaps/CNS-EUC-V.bcmap +0 -0
  167. package/lib/pdfjs/cmaps/CNS1-H.bcmap +0 -0
  168. package/lib/pdfjs/cmaps/CNS1-V.bcmap +0 -0
  169. package/lib/pdfjs/cmaps/CNS2-H.bcmap +0 -0
  170. package/lib/pdfjs/cmaps/CNS2-V.bcmap +0 -3
  171. package/lib/pdfjs/cmaps/ETHK-B5-H.bcmap +0 -0
  172. package/lib/pdfjs/cmaps/ETHK-B5-V.bcmap +0 -0
  173. package/lib/pdfjs/cmaps/ETen-B5-H.bcmap +0 -0
  174. package/lib/pdfjs/cmaps/ETen-B5-V.bcmap +0 -0
  175. package/lib/pdfjs/cmaps/ETenms-B5-H.bcmap +0 -3
  176. package/lib/pdfjs/cmaps/ETenms-B5-V.bcmap +0 -0
  177. package/lib/pdfjs/cmaps/EUC-H.bcmap +0 -0
  178. package/lib/pdfjs/cmaps/EUC-V.bcmap +0 -0
  179. package/lib/pdfjs/cmaps/Ext-H.bcmap +0 -0
  180. package/lib/pdfjs/cmaps/Ext-RKSJ-H.bcmap +0 -0
  181. package/lib/pdfjs/cmaps/Ext-RKSJ-V.bcmap +0 -0
  182. package/lib/pdfjs/cmaps/Ext-V.bcmap +0 -0
  183. package/lib/pdfjs/cmaps/GB-EUC-H.bcmap +0 -0
  184. package/lib/pdfjs/cmaps/GB-EUC-V.bcmap +0 -0
  185. package/lib/pdfjs/cmaps/GB-H.bcmap +0 -4
  186. package/lib/pdfjs/cmaps/GB-V.bcmap +0 -0
  187. package/lib/pdfjs/cmaps/GBK-EUC-H.bcmap +0 -0
  188. package/lib/pdfjs/cmaps/GBK-EUC-V.bcmap +0 -0
  189. package/lib/pdfjs/cmaps/GBK2K-H.bcmap +0 -0
  190. package/lib/pdfjs/cmaps/GBK2K-V.bcmap +0 -0
  191. package/lib/pdfjs/cmaps/GBKp-EUC-H.bcmap +0 -0
  192. package/lib/pdfjs/cmaps/GBKp-EUC-V.bcmap +0 -0
  193. package/lib/pdfjs/cmaps/GBT-EUC-H.bcmap +0 -0
  194. package/lib/pdfjs/cmaps/GBT-EUC-V.bcmap +0 -0
  195. package/lib/pdfjs/cmaps/GBT-H.bcmap +0 -0
  196. package/lib/pdfjs/cmaps/GBT-V.bcmap +0 -0
  197. package/lib/pdfjs/cmaps/GBTpc-EUC-H.bcmap +0 -0
  198. package/lib/pdfjs/cmaps/GBTpc-EUC-V.bcmap +0 -0
  199. package/lib/pdfjs/cmaps/GBpc-EUC-H.bcmap +0 -0
  200. package/lib/pdfjs/cmaps/GBpc-EUC-V.bcmap +0 -0
  201. package/lib/pdfjs/cmaps/H.bcmap +0 -0
  202. package/lib/pdfjs/cmaps/HKdla-B5-H.bcmap +0 -0
  203. package/lib/pdfjs/cmaps/HKdla-B5-V.bcmap +0 -0
  204. package/lib/pdfjs/cmaps/HKdlb-B5-H.bcmap +0 -0
  205. package/lib/pdfjs/cmaps/HKdlb-B5-V.bcmap +0 -0
  206. package/lib/pdfjs/cmaps/HKgccs-B5-H.bcmap +0 -0
  207. package/lib/pdfjs/cmaps/HKgccs-B5-V.bcmap +0 -0
  208. package/lib/pdfjs/cmaps/HKm314-B5-H.bcmap +0 -0
  209. package/lib/pdfjs/cmaps/HKm314-B5-V.bcmap +0 -0
  210. package/lib/pdfjs/cmaps/HKm471-B5-H.bcmap +0 -0
  211. package/lib/pdfjs/cmaps/HKm471-B5-V.bcmap +0 -0
  212. package/lib/pdfjs/cmaps/HKscs-B5-H.bcmap +0 -0
  213. package/lib/pdfjs/cmaps/HKscs-B5-V.bcmap +0 -0
  214. package/lib/pdfjs/cmaps/Hankaku.bcmap +0 -0
  215. package/lib/pdfjs/cmaps/Hiragana.bcmap +0 -0
  216. package/lib/pdfjs/cmaps/KSC-EUC-H.bcmap +0 -0
  217. package/lib/pdfjs/cmaps/KSC-EUC-V.bcmap +0 -0
  218. package/lib/pdfjs/cmaps/KSC-H.bcmap +0 -0
  219. package/lib/pdfjs/cmaps/KSC-Johab-H.bcmap +0 -0
  220. package/lib/pdfjs/cmaps/KSC-Johab-V.bcmap +0 -0
  221. package/lib/pdfjs/cmaps/KSC-V.bcmap +0 -0
  222. package/lib/pdfjs/cmaps/KSCms-UHC-H.bcmap +0 -0
  223. package/lib/pdfjs/cmaps/KSCms-UHC-HW-H.bcmap +0 -0
  224. package/lib/pdfjs/cmaps/KSCms-UHC-HW-V.bcmap +0 -0
  225. package/lib/pdfjs/cmaps/KSCms-UHC-V.bcmap +0 -0
  226. package/lib/pdfjs/cmaps/KSCpc-EUC-H.bcmap +0 -0
  227. package/lib/pdfjs/cmaps/KSCpc-EUC-V.bcmap +0 -0
  228. package/lib/pdfjs/cmaps/Katakana.bcmap +0 -0
  229. package/lib/pdfjs/cmaps/LICENSE +0 -36
  230. package/lib/pdfjs/cmaps/NWP-H.bcmap +0 -0
  231. package/lib/pdfjs/cmaps/NWP-V.bcmap +0 -0
  232. package/lib/pdfjs/cmaps/RKSJ-H.bcmap +0 -0
  233. package/lib/pdfjs/cmaps/RKSJ-V.bcmap +0 -0
  234. package/lib/pdfjs/cmaps/Roman.bcmap +0 -0
  235. package/lib/pdfjs/cmaps/UniCNS-UCS2-H.bcmap +0 -0
  236. package/lib/pdfjs/cmaps/UniCNS-UCS2-V.bcmap +0 -0
  237. package/lib/pdfjs/cmaps/UniCNS-UTF16-H.bcmap +0 -0
  238. package/lib/pdfjs/cmaps/UniCNS-UTF16-V.bcmap +0 -0
  239. package/lib/pdfjs/cmaps/UniCNS-UTF32-H.bcmap +0 -0
  240. package/lib/pdfjs/cmaps/UniCNS-UTF32-V.bcmap +0 -0
  241. package/lib/pdfjs/cmaps/UniCNS-UTF8-H.bcmap +0 -0
  242. package/lib/pdfjs/cmaps/UniCNS-UTF8-V.bcmap +0 -0
  243. package/lib/pdfjs/cmaps/UniGB-UCS2-H.bcmap +0 -0
  244. package/lib/pdfjs/cmaps/UniGB-UCS2-V.bcmap +0 -0
  245. package/lib/pdfjs/cmaps/UniGB-UTF16-H.bcmap +0 -0
  246. package/lib/pdfjs/cmaps/UniGB-UTF16-V.bcmap +0 -0
  247. package/lib/pdfjs/cmaps/UniGB-UTF32-H.bcmap +0 -0
  248. package/lib/pdfjs/cmaps/UniGB-UTF32-V.bcmap +0 -0
  249. package/lib/pdfjs/cmaps/UniGB-UTF8-H.bcmap +0 -0
  250. package/lib/pdfjs/cmaps/UniGB-UTF8-V.bcmap +0 -0
  251. package/lib/pdfjs/cmaps/UniJIS-UCS2-H.bcmap +0 -0
  252. package/lib/pdfjs/cmaps/UniJIS-UCS2-HW-H.bcmap +0 -0
  253. package/lib/pdfjs/cmaps/UniJIS-UCS2-HW-V.bcmap +0 -0
  254. package/lib/pdfjs/cmaps/UniJIS-UCS2-V.bcmap +0 -0
  255. package/lib/pdfjs/cmaps/UniJIS-UTF16-H.bcmap +0 -0
  256. package/lib/pdfjs/cmaps/UniJIS-UTF16-V.bcmap +0 -0
  257. package/lib/pdfjs/cmaps/UniJIS-UTF32-H.bcmap +0 -0
  258. package/lib/pdfjs/cmaps/UniJIS-UTF32-V.bcmap +0 -0
  259. package/lib/pdfjs/cmaps/UniJIS-UTF8-H.bcmap +0 -0
  260. package/lib/pdfjs/cmaps/UniJIS-UTF8-V.bcmap +0 -0
  261. package/lib/pdfjs/cmaps/UniJIS2004-UTF16-H.bcmap +0 -0
  262. package/lib/pdfjs/cmaps/UniJIS2004-UTF16-V.bcmap +0 -0
  263. package/lib/pdfjs/cmaps/UniJIS2004-UTF32-H.bcmap +0 -0
  264. package/lib/pdfjs/cmaps/UniJIS2004-UTF32-V.bcmap +0 -0
  265. package/lib/pdfjs/cmaps/UniJIS2004-UTF8-H.bcmap +0 -0
  266. package/lib/pdfjs/cmaps/UniJIS2004-UTF8-V.bcmap +0 -0
  267. package/lib/pdfjs/cmaps/UniJISPro-UCS2-HW-V.bcmap +0 -0
  268. package/lib/pdfjs/cmaps/UniJISPro-UCS2-V.bcmap +0 -0
  269. package/lib/pdfjs/cmaps/UniJISPro-UTF8-V.bcmap +0 -0
  270. package/lib/pdfjs/cmaps/UniJISX0213-UTF32-H.bcmap +0 -0
  271. package/lib/pdfjs/cmaps/UniJISX0213-UTF32-V.bcmap +0 -0
  272. package/lib/pdfjs/cmaps/UniJISX02132004-UTF32-H.bcmap +0 -0
  273. package/lib/pdfjs/cmaps/UniJISX02132004-UTF32-V.bcmap +0 -0
  274. package/lib/pdfjs/cmaps/UniKS-UCS2-H.bcmap +0 -0
  275. package/lib/pdfjs/cmaps/UniKS-UCS2-V.bcmap +0 -0
  276. package/lib/pdfjs/cmaps/UniKS-UTF16-H.bcmap +0 -0
  277. package/lib/pdfjs/cmaps/UniKS-UTF16-V.bcmap +0 -0
  278. package/lib/pdfjs/cmaps/UniKS-UTF32-H.bcmap +0 -0
  279. package/lib/pdfjs/cmaps/UniKS-UTF32-V.bcmap +0 -0
  280. package/lib/pdfjs/cmaps/UniKS-UTF8-H.bcmap +0 -0
  281. package/lib/pdfjs/cmaps/UniKS-UTF8-V.bcmap +0 -0
  282. package/lib/pdfjs/cmaps/V.bcmap +0 -0
  283. package/lib/pdfjs/cmaps/WP-Symbol.bcmap +0 -0
  284. package/lib/pdfjs/pdf.worker.min.mjs +0 -21
@@ -0,0 +1,136 @@
1
+ import { jsxs as L, jsx as m } from "react/jsx-runtime";
2
+ import { useState as M, useRef as l, useCallback as P, useEffect as j } from "react";
3
+ import { init as N } from "pptx-preview";
4
+ import { u as B, a as F } from "./index-BCbSb9Ob.mjs";
5
+ import { R as q } from "./RendererError-BH6fzLrN.mjs";
6
+ const $ = ({ url: g, tiled: f = !0 }) => {
7
+ const c = B(), k = F(), [b, w] = M(!0), [v, T] = M(null), [E, z] = M(0), n = l(null), s = l(null), x = l(null), p = l(null), d = l(null), R = l({ width: 0, height: 0 }), u = P(() => {
8
+ var t;
9
+ if (!n.current) return { width: 960, height: 540 };
10
+ const r = n.current.clientWidth, e = ((t = n.current.parentElement) == null ? void 0 : t.clientWidth) || 0, o = r > 100 ? r : e > 100 ? e : 300, a = Math.floor(o * 9 / 16);
11
+ return { width: o, height: a };
12
+ }, []), W = P(async () => {
13
+ if (!(!n.current || !p.current || E === 0))
14
+ try {
15
+ if (s.current)
16
+ try {
17
+ s.current.destroy();
18
+ } catch {
19
+ }
20
+ n.current.innerHTML = "";
21
+ const r = u(), e = N(n.current, {
22
+ width: r.width,
23
+ height: f ? r.height * E : r.height,
24
+ mode: f ? "list" : "slide"
25
+ });
26
+ s.current = e, await e.preview(p.current);
27
+ } catch {
28
+ }
29
+ }, [u, f, E]);
30
+ return j(() => {
31
+ if (!n.current) return;
32
+ let r = !0;
33
+ const e = () => {
34
+ if (r) {
35
+ r = !1, R.current = u();
36
+ return;
37
+ }
38
+ const o = u(), a = R.current, t = Math.abs(a.width - o.width), i = Math.abs(a.height - o.height);
39
+ t < 10 && i < 10 || (R.current = o, d.current && clearTimeout(d.current), d.current = window.setTimeout(() => {
40
+ s.current && p.current && W();
41
+ }, 800));
42
+ };
43
+ return x.current = new ResizeObserver(() => {
44
+ e();
45
+ }), x.current.observe(n.current), () => {
46
+ x.current && x.current.disconnect(), d.current && clearTimeout(d.current);
47
+ };
48
+ }, [u, W]), j(() => {
49
+ if (!g) return;
50
+ let r = !0, e = null;
51
+ const o = async () => {
52
+ if (n.current) {
53
+ w(!0), T(null), e = setTimeout(() => {
54
+ r && (T(c("pptx.timeout")), w(!1));
55
+ }, 3e4);
56
+ try {
57
+ const t = await k(g, {
58
+ mode: "cors",
59
+ credentials: "omit",
60
+ redirect: "follow"
61
+ });
62
+ if (!t.ok)
63
+ throw t.status === 404 ? new Error(c("pptx.not_found")) : t.status === 403 ? new Error("无权限访问此文件") : t.status >= 500 ? new Error("服务器错误,请稍后重试") : new Error(`文件加载失败 (${t.status})`);
64
+ const i = await t.arrayBuffer();
65
+ if (i.byteLength === 0)
66
+ throw new Error("文件为空");
67
+ if (p.current = i, !r) return;
68
+ const h = document.createElement("div");
69
+ h.style.cssText = "position:absolute;left:-9999px;top:-9999px;visibility:hidden", document.body.appendChild(h);
70
+ try {
71
+ const D = N(h, {
72
+ width: 100,
73
+ height: 100,
74
+ mode: "slide"
75
+ });
76
+ try {
77
+ await D.preview(i);
78
+ } catch {
79
+ throw new Error(c("pptx.invalid_format"));
80
+ }
81
+ const y = D.slideCount;
82
+ if (!y || y === 0)
83
+ throw new Error(c("pptx.no_pages"));
84
+ if (D.destroy(), !r) return;
85
+ z(y), n.current && (n.current.innerHTML = "");
86
+ const C = u(), _ = N(n.current, {
87
+ width: C.width,
88
+ height: f ? C.height * y : C.height,
89
+ mode: f ? "list" : "slide"
90
+ });
91
+ s.current = _, await _.preview(i), e && (clearTimeout(e), e = null), r && w(!1);
92
+ } finally {
93
+ document.body.contains(h) && document.body.removeChild(h);
94
+ }
95
+ } catch (t) {
96
+ if (e && (clearTimeout(e), e = null), r) {
97
+ let i = c("pptx.parse_failed");
98
+ t instanceof Error ? i = t.message : typeof t == "string" && (i = t), T(i), w(!1);
99
+ }
100
+ }
101
+ }
102
+ }, a = setTimeout(() => {
103
+ requestAnimationFrame(() => {
104
+ requestAnimationFrame(() => {
105
+ o();
106
+ });
107
+ });
108
+ }, 150);
109
+ return () => {
110
+ if (r = !1, clearTimeout(a), e && clearTimeout(e), p.current = null, z(0), s.current)
111
+ try {
112
+ s.current.destroy();
113
+ } catch {
114
+ }
115
+ s.current = null;
116
+ };
117
+ }, [g, u, f]), /* @__PURE__ */ L("div", { className: "rfp-relative rfp-flex rfp-flex-col rfp-items-center rfp-w-full rfp-h-full", children: [
118
+ b && /* @__PURE__ */ m("div", { className: "rfp-absolute rfp-inset-0 rfp-flex rfp-items-center rfp-justify-center rfp-bg-surface-toolbar rfp-backdrop-blur-sm rfp-z-10", children: /* @__PURE__ */ L("div", { className: "rfp-text-center", children: [
119
+ /* @__PURE__ */ m("div", { className: "rfp-w-10 rfp-h-10 md:rfp-w-12 md:rfp-h-12 rfp-mx-auto rfp-mb-3 rfp-border-4 rfp-border-line-strong rfp-border-t-spinner-head rfp-rounded-full rfp-animate-spin" }),
120
+ /* @__PURE__ */ m("p", { className: "rfp-text-xs md:rfp-text-sm rfp-text-fg-secondary rfp-font-medium", children: c("pptx.loading") })
121
+ ] }) }),
122
+ v && !b && /* @__PURE__ */ m(q, { message: c("pptx.load_failed"), detail: v }),
123
+ !v && /* @__PURE__ */ m(
124
+ "div",
125
+ {
126
+ ref: n,
127
+ className: "pptx-wrapper rfp-w-full rfp-max-w-full md:rfp-max-w-6xl",
128
+ style: { opacity: b ? 0 : 1 }
129
+ }
130
+ )
131
+ ] });
132
+ };
133
+ export {
134
+ $ as PptxRenderer
135
+ };
136
+ //# sourceMappingURL=index-DJZWizxK.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-DJZWizxK.mjs","sources":["../../src/renderers/Pptx/index.tsx"],"sourcesContent":["import { useState, useEffect, useRef, useCallback } from 'react';\nimport { init } from 'pptx-preview';\nimport { useTranslator } from '../../i18n/LocaleContext';\nimport { useFetcher } from '../../RequestContext';\nimport { RendererError } from '../RendererError';\n\ninterface PptxRendererProps {\n url: string;\n /** 是否平铺展示所有页面,默认 true */\n tiled?: boolean;\n}\n\nexport const PptxRenderer: React.FC<PptxRendererProps> = ({ url, tiled = true }) => {\n const t = useTranslator();\n const fetcher = useFetcher();\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n const [slideCount, setSlideCount] = useState(0);\n const containerRef = useRef<HTMLDivElement>(null);\n const previewerRef = useRef<ReturnType<typeof init> | null>(null);\n const resizeObserverRef = useRef<ResizeObserver | null>(null);\n const arrayBufferRef = useRef<ArrayBuffer | null>(null);\n const resizeTimeoutRef = useRef<number | null>(null);\n const lastDimensionsRef = useRef({ width: 0, height: 0 });\n\n // 计算容器尺寸,带回退逻辑\n const calculateDimensions = useCallback(() => {\n if (!containerRef.current) return { width: 960, height: 540 };\n const rawWidth = containerRef.current.clientWidth;\n const parentWidth = containerRef.current.parentElement?.clientWidth || 0;\n // 如果容器宽度太小,回退到父容器宽度或默认最小值\n const containerWidth = rawWidth > 100 ? rawWidth : (parentWidth > 100 ? parentWidth : 300);\n // 16:9 比例\n const height = Math.floor(containerWidth * 9 / 16);\n return { width: containerWidth, height };\n }, []);\n\n // 重新初始化预览器\n const reinitializePreviewer = useCallback(async () => {\n if (!containerRef.current || !arrayBufferRef.current || slideCount === 0) return;\n\n try {\n // 销毁旧的预览器\n if (previewerRef.current) {\n try {\n previewerRef.current.destroy();\n } catch {\n // 忽略销毁错误\n }\n }\n\n // 清空容器\n containerRef.current.innerHTML = '';\n\n // 获取当前容器尺寸\n const currentDimensions = calculateDimensions();\n\n // 初始化新的预览器,平铺模式下高度按页数计算\n const previewer = init(containerRef.current, {\n width: currentDimensions.width,\n height: tiled ? currentDimensions.height * slideCount : currentDimensions.height,\n mode: tiled ? 'list' : 'slide',\n });\n previewerRef.current = previewer;\n\n // 重新预览\n await previewer.preview(arrayBufferRef.current);\n } catch {\n // 重新初始化失败,静默处理\n }\n }, [calculateDimensions, tiled, slideCount]);\n\n // 监听容器尺寸变化\n useEffect(() => {\n if (!containerRef.current) return;\n\n let isInitialRender = true;\n\n const updateDimensions = () => {\n // 跳过初始渲染时的尺寸检查\n if (isInitialRender) {\n isInitialRender = false;\n lastDimensionsRef.current = calculateDimensions();\n return;\n }\n\n const newDimensions = calculateDimensions();\n\n // 检查尺寸是否真正变化(至少变化10px才触发)\n const lastDimensions = lastDimensionsRef.current;\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) {\n return;\n }\n\n // 更新最后的尺寸\n lastDimensionsRef.current = newDimensions;\n\n // 清除之前的定时器\n if (resizeTimeoutRef.current) {\n clearTimeout(resizeTimeoutRef.current);\n }\n\n // 防抖:800ms 后重新初始化预览器\n resizeTimeoutRef.current = window.setTimeout(() => {\n if (previewerRef.current && arrayBufferRef.current) {\n reinitializePreviewer();\n }\n }, 800);\n };\n\n // 创建 ResizeObserver\n resizeObserverRef.current = new ResizeObserver(() => {\n updateDimensions();\n });\n\n // 开始观察容器\n resizeObserverRef.current.observe(containerRef.current);\n\n return () => {\n if (resizeObserverRef.current) {\n resizeObserverRef.current.disconnect();\n }\n if (resizeTimeoutRef.current) {\n clearTimeout(resizeTimeoutRef.current);\n }\n };\n }, [calculateDimensions, reinitializePreviewer]);\n\n useEffect(() => {\n // 只有 URL 有效时才加载(避免空字符串或已 revoke 的 blob URL)\n if (!url) return;\n\n let isMounted = true;\n let timeoutId: ReturnType<typeof setTimeout> | null = null;\n\n const loadPptx = async () => {\n if (!containerRef.current) return;\n\n setLoading(true);\n setError(null);\n\n // 设置30秒超时\n timeoutId = setTimeout(() => {\n if (isMounted) {\n setError(t('pptx.timeout'));\n setLoading(false);\n }\n }, 30000);\n\n try {\n // 获取文件,处理 CORS 和重定向\n const response = await fetcher(url, {\n mode: 'cors',\n credentials: 'omit',\n redirect: 'follow',\n });\n\n if (!response.ok) {\n if (response.status === 404) {\n throw new Error(t('pptx.not_found'));\n } else if (response.status === 403) {\n throw new Error('无权限访问此文件');\n } else if (response.status >= 500) {\n throw new Error('服务器错误,请稍后重试');\n } else {\n throw new Error(`文件加载失败 (${response.status})`);\n }\n }\n\n const arrayBuffer = await response.arrayBuffer();\n\n // 验证文件大小\n if (arrayBuffer.byteLength === 0) {\n throw new Error('文件为空');\n }\n\n arrayBufferRef.current = arrayBuffer;\n\n if (!isMounted) return;\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 // 在隐藏容器中初始化临时预览器获取页数\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('pptx.invalid_format'));\n }\n\n const count = tempPreviewer.slideCount;\n\n if (!count || count === 0) {\n throw new Error(t('pptx.no_pages'));\n }\n\n // 销毁临时预览器\n tempPreviewer.destroy();\n\n if (!isMounted) return;\n\n // 保存 slideCount\n setSlideCount(count);\n\n // 步骤 2: 清空真实容器并初始化\n if (containerRef.current) {\n containerRef.current.innerHTML = '';\n }\n\n const currentDimensions = calculateDimensions();\n\n // 步骤 3: 初始化真实预览器,平铺模式下使用正确的总高度\n const previewer = init(containerRef.current, {\n width: currentDimensions.width,\n height: tiled ? currentDimensions.height * count : currentDimensions.height,\n mode: tiled ? 'list' : 'slide',\n });\n previewerRef.current = previewer;\n\n // 步骤 4: 预览 PPTX\n await previewer.preview(arrayBuffer);\n\n // 清除超时定时器\n if (timeoutId) {\n clearTimeout(timeoutId);\n timeoutId = null;\n }\n\n if (isMounted) {\n setLoading(false);\n }\n } finally {\n // 移除隐藏容器\n if (document.body.contains(hiddenContainer)) {\n document.body.removeChild(hiddenContainer);\n }\n }\n } catch (err) {\n // 清除超时定时器\n if (timeoutId) {\n clearTimeout(timeoutId);\n timeoutId = null;\n }\n\n if (isMounted) {\n let errorMsg = t('pptx.parse_failed');\n if (err instanceof Error) {\n errorMsg = err.message;\n } else if (typeof err === 'string') {\n errorMsg = err;\n }\n setError(errorMsg);\n setLoading(false);\n }\n }\n };\n\n // 延迟执行,使用 requestAnimationFrame 确保 DOM 已准备好\n const timer = setTimeout(() => {\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n loadPptx();\n });\n });\n }, 150);\n\n // 清理函数\n return () => {\n isMounted = false;\n clearTimeout(timer);\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n arrayBufferRef.current = null;\n setSlideCount(0);\n if (previewerRef.current) {\n try {\n previewerRef.current.destroy();\n } catch {\n // 忽略销毁错误\n }\n }\n previewerRef.current = null;\n };\n }, [url, calculateDimensions, tiled]);\n\n return (\n <div className=\"rfp-relative rfp-flex rfp-flex-col rfp-items-center rfp-w-full rfp-h-full\">\n {/* 加载状态 - 绝对定位覆盖 */}\n {loading && (\n <div className=\"rfp-absolute rfp-inset-0 rfp-flex rfp-items-center rfp-justify-center rfp-bg-surface-toolbar rfp-backdrop-blur-sm rfp-z-10\">\n <div className=\"rfp-text-center\">\n <div className=\"rfp-w-10 rfp-h-10 md:rfp-w-12 md:rfp-h-12 rfp-mx-auto rfp-mb-3 rfp-border-4 rfp-border-line-strong rfp-border-t-spinner-head rfp-rounded-full rfp-animate-spin\" />\n <p className=\"rfp-text-xs md:rfp-text-sm rfp-text-fg-secondary rfp-font-medium\">{t('pptx.loading')}</p>\n </div>\n </div>\n )}\n\n {/* 错误状态 - 绝对定位覆盖 */}\n {error && !loading && (\n <RendererError message={t('pptx.load_failed')} detail={error} />\n )}\n\n {/* PPT 容器 - 仅在非错误状态下渲染 */}\n {!error && (\n <div\n ref={containerRef}\n className=\"pptx-wrapper rfp-w-full rfp-max-w-full md:rfp-max-w-6xl\"\n style={{ opacity: loading ? 0 : 1 }}\n />\n )}\n </div>\n );\n};\n"],"names":["PptxRenderer","url","tiled","t","useTranslator","fetcher","useFetcher","loading","setLoading","useState","error","setError","slideCount","setSlideCount","containerRef","useRef","previewerRef","resizeObserverRef","arrayBufferRef","resizeTimeoutRef","lastDimensionsRef","calculateDimensions","useCallback","rawWidth","parentWidth","_a","containerWidth","height","reinitializePreviewer","currentDimensions","previewer","init","useEffect","isInitialRender","updateDimensions","newDimensions","lastDimensions","widthDiff","heightDiff","isMounted","timeoutId","loadPptx","response","arrayBuffer","hiddenContainer","tempPreviewer","count","err","errorMsg","timer","jsxs","jsx","RendererError"],"mappings":"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"}
@@ -1,9 +1,10 @@
1
- import { jsxs as x, jsx as n } from "react/jsx-runtime";
2
- import { forwardRef as lr, useRef as c, useState as p, useCallback as l, useImperativeHandle as cr, useEffect as pr } from "react";
1
+ import { jsxs as x, jsx as o } from "react/jsx-runtime";
2
+ import { forwardRef as lr, useRef as p, useState as d, useCallback as c, useImperativeHandle as cr, useEffect as pr } from "react";
3
3
  import { X as dr } from "lucide-react";
4
4
  import "foliate-js/view.js";
5
- import { u as ur, a as mr } from "./index-CGNWXFy3.mjs";
6
- const hr = `
5
+ import { u as ur, a as mr } from "./index-BCbSb9Ob.mjs";
6
+ import { R as hr } from "./RendererError-BH6fzLrN.mjs";
7
+ const br = `
7
8
  @namespace epub "http://www.idpf.org/2007/ops";
8
9
  html { color-scheme: light; }
9
10
  body {
@@ -25,100 +26,100 @@ const hr = `
25
26
  img { max-width: 100% !important; height: auto !important; }
26
27
  a { color: #2563eb; text-decoration: none; }
27
28
  pre { white-space: pre-wrap !important; }
28
- `, br = 794, xr = lr(
29
- ({ url: T, onChapterChange: E, onFullWidthChange: j }, K) => {
30
- const z = ur(), Q = mr(), C = c(null), f = c(null), w = c(E), g = c(j);
31
- w.current = E, g.current = j;
32
- const I = c(1), [Y, R] = p(!0), [y, M] = p(null), [H, W] = p([]), [v, d] = p(!1), [$, S] = p(""), [F, rr] = p(!1), L = c(!1);
33
- L.current = F;
34
- const k = l((e, t) => {
29
+ `, xr = 794, wr = lr(
30
+ ({ url: w, onChapterChange: A, onFullWidthChange: j }, Q) => {
31
+ const z = ur(), Y = mr(), C = p(null), i = p(null), g = p(A), y = p(j);
32
+ g.current = A, y.current = j;
33
+ const M = p(1), [Z, S] = d(!0), [v, F] = d(null), [H, I] = d([]), [k, u] = d(!1), [$, T] = d(""), [L, rr] = d(!1), P = p(!1);
34
+ P.current = L;
35
+ const N = c((e, t) => {
35
36
  var r;
36
- t > 0 && (I.current = t), (r = w.current) == null || r.call(w, Math.max(1, e + 1), I.current);
37
- }, []), P = l(() => {
38
- const e = f.current;
37
+ t > 0 && (M.current = t), (r = g.current) == null || r.call(g, Math.max(1, e + 1), M.current);
38
+ }, []), W = c(() => {
39
+ const e = i.current;
39
40
  e && e.prev().catch(() => {
40
41
  });
41
- }, []), X = l(() => {
42
- const e = f.current;
42
+ }, []), X = c(() => {
43
+ const e = i.current;
43
44
  e && e.next().catch(() => {
44
45
  });
45
- }, []), _ = l(() => d((e) => !e), []), D = l(() => {
46
- var u;
47
- const e = !L.current;
48
- rr(e), (u = g.current) == null || u.call(g, e);
49
- const t = f.current;
46
+ }, []), _ = c(() => u((e) => !e), []), D = c(() => {
47
+ var m;
48
+ const e = !P.current;
49
+ rr(e), (m = y.current) == null || m.call(y, e);
50
+ const t = i.current;
50
51
  if (!t) return;
51
52
  const r = t.renderer;
52
53
  r && r.setAttribute("max-inline-size", e ? "9999" : "720");
53
- }, []), er = l((e) => {
54
+ }, []), er = c((e) => {
54
55
  var t;
55
- S(e), d(!1), (t = f.current) == null || t.goTo(e).catch(() => {
56
+ T(e), u(!1), (t = i.current) == null || t.goTo(e).catch(() => {
56
57
  });
57
58
  }, []);
58
- cr(K, () => ({
59
- prevPage: P,
59
+ cr(Q, () => ({
60
+ prevPage: W,
60
61
  nextPage: X,
61
62
  toggleFullWidth: D,
62
63
  toggleToc: _
63
- }), [P, X, D, _]), pr(() => {
64
+ }), [W, X, D, _]), pr(() => {
64
65
  const e = C.current;
65
- if (!e) return;
66
- R(!0), M(null), W([]), d(!1), S(""), e.replaceChildren();
66
+ if (!e || !w) return;
67
+ S(!0), F(null), I([]), u(!1), T(""), e.replaceChildren();
67
68
  let t = !1, r = null;
68
69
  return (async () => {
69
- var a, s, m, q, B, G;
70
+ var a, s, h, q, G, V;
70
71
  try {
71
72
  if (t) return;
72
- r = document.createElement("foliate-view"), e.appendChild(r), f.current = r, r.addEventListener("relocate", (V) => {
73
- var Z, J;
74
- const i = V.detail;
75
- if (!i) return;
76
- const b = i.location;
73
+ r = document.createElement("foliate-view"), e.appendChild(r), i.current = r, r.addEventListener("relocate", (J) => {
74
+ var K, O;
75
+ const f = J.detail;
76
+ if (!f) return;
77
+ const b = f.location;
77
78
  if (b && typeof b.current == "number" && typeof b.total == "number")
78
- k(b.current, b.total);
79
+ N(b.current, b.total);
79
80
  else {
80
- const ar = ((J = (Z = f.current) == null ? void 0 : Z.book) == null ? void 0 : J.sections) ?? [], sr = i.index ?? 0, fr = i.fraction ?? 0, A = Math.max(ar.length, 1), ir = Math.round((sr + fr) / A * A);
81
- k(ir, A);
81
+ const ar = ((O = (K = i.current) == null ? void 0 : K.book) == null ? void 0 : O.sections) ?? [], sr = f.index ?? 0, ir = f.fraction ?? 0, E = Math.max(ar.length, 1), fr = Math.round((sr + ir) / E * E);
82
+ N(fr, E);
82
83
  }
83
- const N = i.tocItem;
84
- N != null && N.href && S(N.href);
84
+ const R = f.tocItem;
85
+ R != null && R.href && T(R.href);
85
86
  });
86
- const h = await Q(T);
87
- if (!h.ok) throw new Error(`请求失败: ${h.status}`);
88
- const nr = await h.blob();
89
- let O = "book.mobi";
87
+ const l = await Y(w);
88
+ if (!l.ok) throw new Error(`请求失败: ${l.status}`);
89
+ const or = await l.blob();
90
+ let B = "book.mobi";
90
91
  try {
91
- const i = new URL(T, window.location.href).pathname.split("/").pop();
92
- i && (O = decodeURIComponent(i));
92
+ const f = new URL(w, window.location.href).pathname.split("/").pop();
93
+ f && (B = decodeURIComponent(f));
93
94
  } catch {
94
95
  }
95
- const or = new File([nr], O);
96
- if (await r.open(or), t) {
96
+ const nr = new File([or], B);
97
+ if (await r.open(nr), t) {
97
98
  (s = (a = r.book) == null ? void 0 : a.destroy) == null || s.call(a);
98
99
  return;
99
100
  }
100
- const o = r.renderer;
101
- o && (o.setAttribute("animated", ""), o.setAttribute("max-inline-size", "720"), o.setAttribute("margin", "48"), o.setAttribute("gap", "5%"), (m = o.setStyles) == null || m.call(o, hr), await ((q = o.next) == null ? void 0 : q.call(o))), W(((B = r.book) == null ? void 0 : B.toc) ?? []), R(!1), k(0, ((G = r.book) == null ? void 0 : G.sections.length) ?? 1);
102
- } catch (h) {
103
- console.error("MOBI/AZW3 加载错误:", h), t || (M(z("mobi.load_failed")), R(!1));
101
+ const n = r.renderer;
102
+ n && (n.setAttribute("animated", ""), n.setAttribute("max-inline-size", "720"), n.setAttribute("margin", "48"), n.setAttribute("gap", "5%"), (h = n.setStyles) == null || h.call(n, br), await ((q = n.next) == null ? void 0 : q.call(n))), I(((G = r.book) == null ? void 0 : G.toc) ?? []), S(!1), N(0, ((V = r.book) == null ? void 0 : V.sections.length) ?? 1);
103
+ } catch (l) {
104
+ console.warn("[MobiRenderer] Failed to load ebook:", l instanceof Error ? l.message : String(l)), t || (F(z("mobi.load_failed")), S(!1));
104
105
  }
105
106
  })(), () => {
106
- var a, s, m;
107
+ var a, s, h;
107
108
  t = !0;
108
109
  try {
109
- (m = (s = (a = f.current) == null ? void 0 : a.book) == null ? void 0 : s.destroy) == null || m.call(s);
110
+ (h = (s = (a = i.current) == null ? void 0 : a.book) == null ? void 0 : s.destroy) == null || h.call(s);
110
111
  } catch {
111
112
  }
112
- f.current = null, e.replaceChildren();
113
+ i.current = null, e.replaceChildren();
113
114
  };
114
- }, [T, k]);
115
- const tr = l(
115
+ }, [w, N]);
116
+ const tr = c(
116
117
  (e) => !!e && e === $,
117
118
  [$]
118
- ), U = (e, t = 0) => /* @__PURE__ */ n("ul", { style: { listStyle: "none", padding: 0, margin: t > 0 ? "0 0 0 16px" : 0 }, children: e.map((r, u) => {
119
+ ), U = (e, t = 0) => /* @__PURE__ */ o("ul", { style: { listStyle: "none", padding: 0, margin: t > 0 ? "0 0 0 16px" : 0 }, children: e.map((r, m) => {
119
120
  var a, s;
120
121
  return /* @__PURE__ */ x("li", { children: [
121
- r.href ? /* @__PURE__ */ n(
122
+ r.href ? /* @__PURE__ */ o(
122
123
  "button",
123
124
  {
124
125
  onClick: () => er(r.href),
@@ -126,58 +127,58 @@ const hr = `
126
127
  title: r.label,
127
128
  children: (a = r.label) == null ? void 0 : a.trim()
128
129
  }
129
- ) : /* @__PURE__ */ n("div", { className: "rfp-w-full rfp-py-2 rfp-px-3 rfp-text-sm rfp-text-fg-tertiary rfp-truncate", children: (s = r.label) == null ? void 0 : s.trim() }),
130
+ ) : /* @__PURE__ */ o("div", { className: "rfp-w-full rfp-py-2 rfp-px-3 rfp-text-sm rfp-text-fg-tertiary rfp-truncate", children: (s = r.label) == null ? void 0 : s.trim() }),
130
131
  r.subitems && r.subitems.length > 0 && U(r.subitems, t + 1)
131
- ] }, `${r.href ?? r.label}-${u}`);
132
+ ] }, `${r.href ?? r.label}-${m}`);
132
133
  }) });
133
- return /* @__PURE__ */ x("div", { className: "rfp-relative rfp-w-full rfp-h-full rfp-flex rfp-justify-center rfp-bg-[#f5f5f0] rfp-overflow-hidden", children: [
134
- y && /* @__PURE__ */ n("div", { className: "rfp-absolute rfp-inset-0 rfp-flex rfp-items-center rfp-justify-center rfp-text-fg-secondary rfp-text-center rfp-p-6", children: /* @__PURE__ */ n("p", { className: "rfp-text-lg", children: y }) }),
135
- Y && !y && /* @__PURE__ */ n("div", { className: "rfp-absolute rfp-inset-0 rfp-flex rfp-items-center rfp-justify-center rfp-z-10", children: /* @__PURE__ */ n("div", { className: "rfp-w-12 rfp-h-12 rfp-border-4 rfp-border-line-strong rfp-border-t-spinner-head rfp-rounded-full rfp-animate-spin" }) }),
134
+ return /* @__PURE__ */ x("div", { className: "rfp-relative rfp-w-full rfp-h-full rfp-flex rfp-justify-center rfp-bg-surface-1 rfp-overflow-hidden", children: [
135
+ v && /* @__PURE__ */ o(hr, { message: v }),
136
+ Z && !v && /* @__PURE__ */ o("div", { className: "rfp-absolute rfp-inset-0 rfp-flex rfp-items-center rfp-justify-center rfp-z-10", children: /* @__PURE__ */ o("div", { className: "rfp-w-12 rfp-h-12 rfp-border-4 rfp-border-line-strong rfp-border-t-spinner-head rfp-rounded-full rfp-animate-spin" }) }),
136
137
  H.length > 0 && /* @__PURE__ */ x(
137
138
  "div",
138
139
  {
139
140
  className: "rfp-absolute rfp-inset-0 rfp-z-20 rfp-flex rfp-transition-opacity rfp-duration-300",
140
- style: { opacity: v ? 1 : 0, pointerEvents: v ? "auto" : "none" },
141
+ style: { opacity: k ? 1 : 0, pointerEvents: k ? "auto" : "none" },
141
142
  children: [
142
143
  /* @__PURE__ */ x(
143
144
  "div",
144
145
  {
145
146
  className: "rfp-w-72 rfp-max-w-[80%] rfp-h-full rfp-bg-surface-overlay rfp-backdrop-blur-xl rfp-border-r rfp-border-line-weak rfp-flex rfp-flex-col rfp-shadow-2xl rfp-transition-transform rfp-duration-300",
146
- style: { transform: v ? "translateX(0)" : "translateX(-100%)" },
147
+ style: { transform: k ? "translateX(0)" : "translateX(-100%)" },
147
148
  children: [
148
149
  /* @__PURE__ */ x("div", { className: "rfp-flex rfp-items-center rfp-justify-between rfp-px-4 rfp-py-3 rfp-border-b rfp-border-line-weak rfp-flex-shrink-0", children: [
149
- /* @__PURE__ */ n("span", { className: "rfp-text-fg-primary rfp-font-medium rfp-text-sm", children: z("toolbar.toc") }),
150
- /* @__PURE__ */ n(
150
+ /* @__PURE__ */ o("span", { className: "rfp-text-fg-primary rfp-font-medium rfp-text-sm", children: z("toolbar.toc") }),
151
+ /* @__PURE__ */ o(
151
152
  "button",
152
153
  {
153
- onClick: () => d(!1),
154
+ onClick: () => u(!1),
154
155
  className: "rfp-text-fg-tertiary hover:rfp-text-fg-primary rfp-transition-colors",
155
- children: /* @__PURE__ */ n(dr, { className: "rfp-w-4 rfp-h-4" })
156
+ children: /* @__PURE__ */ o(dr, { className: "rfp-w-4 rfp-h-4" })
156
157
  }
157
158
  )
158
159
  ] }),
159
- /* @__PURE__ */ n("div", { className: "rfp-flex-1 rfp-overflow-y-auto rfp-py-4 rfp-px-1", children: U(H) })
160
+ /* @__PURE__ */ o("div", { className: "rfp-flex-1 rfp-overflow-y-auto rfp-py-4 rfp-px-1", children: U(H) })
160
161
  ]
161
162
  }
162
163
  ),
163
- /* @__PURE__ */ n(
164
+ /* @__PURE__ */ o(
164
165
  "div",
165
166
  {
166
167
  className: "rfp-flex-1 rfp-transition-opacity rfp-duration-300",
167
- style: { background: v ? "rgba(0,0,0,0.3)" : "transparent" },
168
- onClick: () => d(!1)
168
+ style: { background: k ? "rgba(0,0,0,0.3)" : "transparent" },
169
+ onClick: () => u(!1)
169
170
  }
170
171
  )
171
172
  ]
172
173
  }
173
174
  ),
174
- !y && /* @__PURE__ */ n(
175
+ !v && /* @__PURE__ */ o(
175
176
  "div",
176
177
  {
177
178
  ref: C,
178
179
  className: "rfp-h-full rfp-bg-surface-toolbar rfp-shadow-lg",
179
180
  style: {
180
- width: F ? "100%" : `${br}px`,
181
+ width: L ? "100%" : `${xr}px`,
181
182
  maxWidth: "100%",
182
183
  transition: "width 0.3s ease"
183
184
  }
@@ -186,8 +187,8 @@ const hr = `
186
187
  ] });
187
188
  }
188
189
  );
189
- xr.displayName = "MobiRenderer";
190
+ wr.displayName = "MobiRenderer";
190
191
  export {
191
- xr as MobiRenderer
192
+ wr as MobiRenderer
192
193
  };
193
- //# sourceMappingURL=index-DN8BQIqo.mjs.map
194
+ //# sourceMappingURL=index-DRCA7PhQ.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-DRCA7PhQ.mjs","sources":["../../src/renderers/Mobi/index.tsx"],"sourcesContent":["import {\n useEffect,\n useRef,\n useState,\n useCallback,\n useImperativeHandle,\n forwardRef,\n} from 'react';\nimport { X } from 'lucide-react';\nimport 'foliate-js/view.js';\nimport type { FoliateView, TocItem } from 'foliate-js/view.js';\nimport { useTranslator } from '../../i18n/LocaleContext';\nimport { useFetcher } from '../../RequestContext';\nimport { RendererError } from '../RendererError';\n\nconst READER_CSS = `\n @namespace epub \"http://www.idpf.org/2007/ops\";\n html { color-scheme: light; }\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 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, li, blockquote, dd { line-height: 2; text-align: justify; }\n p { text-indent: 2em; margin: 0.8em 0; }\n h1 { text-align: center; margin: 1.5em 0 1em; }\n h2 { margin: 1.2em 0 0.8em; }\n h3 { margin: 1em 0 0.6em; }\n img { max-width: 100% !important; height: auto !important; }\n a { color: #2563eb; text-decoration: none; }\n pre { white-space: pre-wrap !important; }\n`;\n\nconst A4_WIDTH = 794;\n\nexport interface MobiRendererHandle {\n prevPage: () => void;\n nextPage: () => void;\n toggleFullWidth: () => void;\n toggleToc: () => void;\n}\n\ninterface MobiRendererProps {\n url: string;\n onChapterChange?: (current: number, total: number) => void;\n onFullWidthChange?: (isFullWidth: boolean) => void;\n}\n\nexport const MobiRenderer = forwardRef<MobiRendererHandle, MobiRendererProps>(\n ({ url, onChapterChange, onFullWidthChange }, ref) => {\n const t = useTranslator();\n const fetcher = useFetcher();\n const hostRef = useRef<HTMLDivElement>(null);\n const viewRef = useRef<FoliateView | null>(null);\n const onChapterChangeRef = useRef(onChapterChange);\n const onFullWidthChangeRef = useRef(onFullWidthChange);\n onChapterChangeRef.current = onChapterChange;\n onFullWidthChangeRef.current = onFullWidthChange;\n\n // 模拟 epub.js 的 locations 显示\n const totalLocationsRef = useRef(1);\n\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n const [toc, setToc] = useState<TocItem[]>([]);\n const [showToc, setShowToc] = useState(false);\n const [activeTocHref, setActiveTocHref] = useState<string>('');\n const [isFullWidth, setIsFullWidth] = useState(false);\n const isFullWidthRef = useRef(false);\n isFullWidthRef.current = isFullWidth;\n\n const reportProgress = useCallback((current: number, total: number) => {\n if (total > 0) totalLocationsRef.current = total;\n onChapterChangeRef.current?.(Math.max(1, current + 1), totalLocationsRef.current);\n }, []);\n\n const handlePrev = useCallback(() => {\n const view = viewRef.current;\n if (!view) return;\n view.prev().catch(() => {});\n }, []);\n\n const handleNext = useCallback(() => {\n const view = viewRef.current;\n if (!view) return;\n view.next().catch(() => {});\n }, []);\n\n const toggleToc = useCallback(() => setShowToc((prev) => !prev), []);\n\n const toggleFullWidth = useCallback(() => {\n const newVal = !isFullWidthRef.current;\n setIsFullWidth(newVal);\n onFullWidthChangeRef.current?.(newVal);\n // 宽度改变后 paginator 需要重新分页\n const view = viewRef.current;\n if (!view) return;\n const renderer = (view as unknown as { renderer?: HTMLElement }).renderer;\n if (renderer) {\n renderer.setAttribute('max-inline-size', newVal ? '9999' : '720');\n }\n }, []);\n\n const handleTocClick = useCallback((href: string) => {\n setActiveTocHref(href);\n setShowToc(false);\n viewRef.current?.goTo(href).catch(() => {});\n }, []);\n\n useImperativeHandle(ref, () => ({\n prevPage: handlePrev,\n nextPage: handleNext,\n toggleFullWidth,\n toggleToc,\n }), [handlePrev, handleNext, toggleFullWidth, toggleToc]);\n\n useEffect(() => {\n const host = hostRef.current;\n // 只有 URL 有效时才加载(避免空字符串或已 revoke 的 blob URL)\n if (!host || !url) return;\n\n setLoading(true);\n setError(null);\n setToc([]);\n setShowToc(false);\n setActiveTocHref('');\n host.replaceChildren();\n\n let cancelled = false;\n let view: FoliateView | null = null;\n\n const load = async () => {\n try {\n if (cancelled) return;\n\n view = document.createElement('foliate-view') as FoliateView;\n host.appendChild(view);\n viewRef.current = view;\n\n // 先注册事件\n view.addEventListener('relocate', (e: Event) => {\n const detail = (e as CustomEvent).detail;\n if (!detail) return;\n // SectionProgress 返回的 location 对象: { current, next, total }\n const loc = detail.location as { current?: number; total?: number } | undefined;\n if (loc && typeof loc.current === 'number' && typeof loc.total === 'number') {\n reportProgress(loc.current, loc.total);\n } else {\n // fallback:用 section 级别估算\n const sections = viewRef.current?.book?.sections ?? [];\n const idx = detail.index ?? 0;\n const frac = detail.fraction ?? 0;\n const total = Math.max(sections.length, 1);\n const current = Math.round((idx + frac) / total * total);\n reportProgress(current, total);\n }\n const tocItem = detail.tocItem as { href?: string } | undefined;\n if (tocItem?.href) {\n setActiveTocHref(tocItem.href);\n }\n });\n\n const res = await fetcher(url);\n if (!res.ok) throw new Error(`请求失败: ${res.status}`);\n const blob = await res.blob();\n let name = 'book.mobi';\n try {\n const u = new URL(url, window.location.href);\n const base = u.pathname.split('/').pop();\n if (base) name = decodeURIComponent(base);\n } catch { /* blob: URL */ }\n const file = new File([blob], name);\n\n await view.open(file);\n if (cancelled) { view.book?.destroy?.(); return; }\n\n // 配置 paginator:paginated 模式(默认),带动画\n const renderer = (view as unknown as { renderer: HTMLElement & {\n setStyles?: (css: string) => void;\n next?: () => Promise<void>;\n } }).renderer;\n\n if (renderer) {\n // flow=\"paginated\" 是默认值,不需要显式设置\n renderer.setAttribute('animated', '');\n renderer.setAttribute('max-inline-size', '720');\n renderer.setAttribute('margin', '48');\n renderer.setAttribute('gap', '5%');\n renderer.setStyles?.(READER_CSS);\n // 必须调 next() 渲染首页\n await renderer.next?.();\n }\n\n setToc(view.book?.toc ?? []);\n setLoading(false);\n reportProgress(0, view.book?.sections.length ?? 1);\n } catch (err) {\n // MOBI/EPUB 加载错误通常是文件损坏或 DRM 保护,用 warn 级别记录\n console.warn('[MobiRenderer] Failed to load ebook:', err instanceof Error ? err.message : String(err));\n if (!cancelled) {\n setError(t('mobi.load_failed'));\n setLoading(false);\n }\n }\n };\n\n load();\n\n return () => {\n cancelled = true;\n try { viewRef.current?.book?.destroy?.(); } catch { /* ignore */ }\n viewRef.current = null;\n host.replaceChildren();\n };\n }, [url, reportProgress]);\n\n const isActive = useCallback(\n (href: string | undefined) => !!href && href === activeTocHref,\n [activeTocHref]\n );\n\n const renderTocItems = (items: TocItem[], depth = 0) => (\n <ul style={{ listStyle: 'none', padding: 0, margin: depth > 0 ? '0 0 0 16px' : 0 }}>\n {items.map((item, i) => (\n <li key={`${item.href ?? item.label}-${i}`}>\n {item.href ? (\n <button\n onClick={() => handleTocClick(item.href!)}\n className={`rfp-w-full rfp-text-left rfp-py-2 rfp-px-3 rfp-text-sm rfp-rounded rfp-transition-all rfp-truncate ${\n isActive(item.href)\n ? 'rfp-text-fg-primary rfp-bg-surface-3 rfp-font-medium'\n : 'rfp-text-fg-secondary hover:rfp-text-fg-primary hover:rfp-bg-surface-2'\n }`}\n title={item.label}\n >\n {item.label?.trim()}\n </button>\n ) : (\n <div className=\"rfp-w-full rfp-py-2 rfp-px-3 rfp-text-sm rfp-text-fg-tertiary rfp-truncate\">\n {item.label?.trim()}\n </div>\n )}\n {item.subitems && item.subitems.length > 0 && renderTocItems(item.subitems, depth + 1)}\n </li>\n ))}\n </ul>\n );\n\n return (\n <div className=\"rfp-relative rfp-w-full rfp-h-full rfp-flex rfp-justify-center rfp-bg-surface-1 rfp-overflow-hidden\">\n {error && <RendererError message={error} />}\n\n {loading && !error && (\n <div className=\"rfp-absolute rfp-inset-0 rfp-flex rfp-items-center rfp-justify-center rfp-z-10\">\n <div className=\"rfp-w-12 rfp-h-12 rfp-border-4 rfp-border-line-strong rfp-border-t-spinner-head rfp-rounded-full rfp-animate-spin\" />\n </div>\n )}\n\n {/* 目录侧栏 */}\n {toc.length > 0 && (\n <div\n className=\"rfp-absolute rfp-inset-0 rfp-z-20 rfp-flex rfp-transition-opacity rfp-duration-300\"\n style={{ opacity: showToc ? 1 : 0, pointerEvents: showToc ? 'auto' : 'none' }}\n >\n <div\n className=\"rfp-w-72 rfp-max-w-[80%] rfp-h-full rfp-bg-surface-overlay rfp-backdrop-blur-xl rfp-border-r rfp-border-line-weak rfp-flex rfp-flex-col rfp-shadow-2xl rfp-transition-transform rfp-duration-300\"\n style={{ transform: showToc ? 'translateX(0)' : 'translateX(-100%)' }}\n >\n <div className=\"rfp-flex rfp-items-center rfp-justify-between rfp-px-4 rfp-py-3 rfp-border-b rfp-border-line-weak rfp-flex-shrink-0\">\n <span className=\"rfp-text-fg-primary rfp-font-medium rfp-text-sm\">{t('toolbar.toc')}</span>\n <button\n onClick={() => setShowToc(false)}\n className=\"rfp-text-fg-tertiary hover:rfp-text-fg-primary rfp-transition-colors\"\n >\n <X className=\"rfp-w-4 rfp-h-4\" />\n </button>\n </div>\n <div className=\"rfp-flex-1 rfp-overflow-y-auto rfp-py-4 rfp-px-1\">\n {renderTocItems(toc)}\n </div>\n </div>\n <div\n className=\"rfp-flex-1 rfp-transition-opacity rfp-duration-300\"\n style={{ background: showToc ? 'rgba(0,0,0,0.3)' : 'transparent' }}\n onClick={() => setShowToc(false)}\n />\n </div>\n )}\n\n {!error && (\n <div\n ref={hostRef}\n className=\"rfp-h-full rfp-bg-surface-toolbar rfp-shadow-lg\"\n style={{\n width: isFullWidth ? '100%' : `${A4_WIDTH}px`,\n maxWidth: '100%',\n transition: 'width 0.3s ease',\n }}\n />\n )}\n </div>\n );\n }\n);\n\nMobiRenderer.displayName = 'MobiRenderer';\n"],"names":["READER_CSS","A4_WIDTH","MobiRenderer","forwardRef","url","onChapterChange","onFullWidthChange","ref","t","useTranslator","fetcher","useFetcher","hostRef","useRef","viewRef","onChapterChangeRef","onFullWidthChangeRef","totalLocationsRef","loading","setLoading","useState","error","setError","toc","setToc","showToc","setShowToc","activeTocHref","setActiveTocHref","isFullWidth","setIsFullWidth","isFullWidthRef","reportProgress","useCallback","current","total","_a","handlePrev","view","handleNext","toggleToc","prev","toggleFullWidth","newVal","renderer","handleTocClick","href","useImperativeHandle","useEffect","host","cancelled","e","detail","loc","sections","_b","idx","frac","tocItem","res","blob","name","base","file","_c","_d","_e","_f","err","isActive","renderTocItems","items","depth","item","i","jsxs","jsx","RendererError","X"],"mappings":"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"}