@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.
- package/lib/RequestContext.d.ts +1 -1
- package/lib/RequestContext.d.ts.map +1 -1
- package/lib/chunks/RendererError-BH6fzLrN.mjs +15 -0
- package/lib/chunks/RendererError-BH6fzLrN.mjs.map +1 -0
- package/lib/chunks/avifLoader-BP3fgcMm-BnpxLhxp.mjs +56 -0
- package/lib/chunks/avifLoader-BP3fgcMm-BnpxLhxp.mjs.map +1 -0
- package/lib/chunks/heicLoader-CH_raQNn-1fBLaICM.mjs +37 -0
- package/lib/chunks/heicLoader-CH_raQNn-1fBLaICM.mjs.map +1 -0
- package/lib/chunks/index-BBvL23cc.mjs +105 -0
- package/lib/chunks/index-BBvL23cc.mjs.map +1 -0
- package/lib/chunks/index-BCbSb9Ob.mjs +2323 -0
- package/lib/chunks/index-BCbSb9Ob.mjs.map +1 -0
- package/lib/chunks/{index-DveR0rOk.mjs → index-BPsJtP6e.mjs} +41 -38
- package/lib/chunks/index-BPsJtP6e.mjs.map +1 -0
- package/lib/chunks/index-CA8OvqPT.mjs +55 -0
- package/lib/chunks/index-CA8OvqPT.mjs.map +1 -0
- package/lib/chunks/index-CJGtdAy7.mjs +114 -0
- package/lib/chunks/index-CJGtdAy7.mjs.map +1 -0
- package/lib/chunks/{index-tecGXW2S.mjs → index-CeQf1qNC.mjs} +85 -83
- package/lib/chunks/index-CeQf1qNC.mjs.map +1 -0
- package/lib/chunks/{index-DPpUj8Yy.mjs → index-Cxf4CLJZ.mjs} +99 -98
- package/lib/chunks/index-Cxf4CLJZ.mjs.map +1 -0
- package/lib/chunks/index-D2t64h6I.mjs +96 -0
- package/lib/chunks/index-D2t64h6I.mjs.map +1 -0
- package/lib/chunks/{index-C5YHI0Zs.mjs → index-DAo4n3Mq.mjs} +52 -51
- package/lib/chunks/index-DAo4n3Mq.mjs.map +1 -0
- package/lib/chunks/index-DCTwUpKS.mjs +13097 -0
- package/lib/chunks/index-DCTwUpKS.mjs.map +1 -0
- package/lib/chunks/index-DJZWizxK.mjs +136 -0
- package/lib/chunks/index-DJZWizxK.mjs.map +1 -0
- package/lib/chunks/{index-DN8BQIqo.mjs → index-DRCA7PhQ.mjs} +79 -78
- package/lib/chunks/index-DRCA7PhQ.mjs.map +1 -0
- package/lib/chunks/index-DdkkEzw3.mjs +12335 -0
- package/lib/chunks/index-DdkkEzw3.mjs.map +1 -0
- package/lib/chunks/{index-DSAXdrgU.mjs → index-DlptjfMf.mjs} +76 -75
- package/lib/chunks/index-DlptjfMf.mjs.map +1 -0
- package/lib/chunks/{index-CwmZQ-JO.mjs → index-DrgP7cc7.mjs} +67 -64
- package/lib/chunks/index-DrgP7cc7.mjs.map +1 -0
- package/lib/chunks/index-Dx8aLIDX.mjs +113 -0
- package/lib/chunks/index-Dx8aLIDX.mjs.map +1 -0
- package/lib/chunks/index-fhiaa9rv.mjs +222 -0
- package/lib/chunks/index-fhiaa9rv.mjs.map +1 -0
- package/lib/chunks/index-qEUWJYQ5.mjs +594 -0
- package/lib/chunks/index-qEUWJYQ5.mjs.map +1 -0
- package/lib/chunks/index-vaILKWGV.mjs +54 -0
- package/lib/chunks/index-vaILKWGV.mjs.map +1 -0
- package/lib/chunks/jp2Loader-Bn-qPMbD-Bn-qPMbD.mjs +122 -0
- package/lib/chunks/jp2Loader-Bn-qPMbD-Bn-qPMbD.mjs.map +1 -0
- package/lib/chunks/psdLoader-Doxw3mWm-DVOGFSlh.mjs +73 -0
- package/lib/chunks/psdLoader-Doxw3mWm-DVOGFSlh.mjs.map +1 -0
- package/lib/chunks/rawLoader-0mLvxCNp-CJmERiK7.mjs +82 -0
- package/lib/chunks/rawLoader-0mLvxCNp-CJmERiK7.mjs.map +1 -0
- package/lib/chunks/tiffLoader-CTFKVLqJ-B84NfwhR.mjs +60 -0
- package/lib/chunks/tiffLoader-CTFKVLqJ-B84NfwhR.mjs.map +1 -0
- package/lib/chunks/{useShikiHighlight-DHFYu0BU.mjs → useShikiHighlight-Cq02e63J.mjs} +2 -2
- package/lib/chunks/{useShikiHighlight-DHFYu0BU.mjs.map → useShikiHighlight-Cq02e63J.mjs.map} +1 -1
- package/lib/index.cjs +31 -22
- package/lib/index.cjs.map +1 -1
- package/lib/index.css +1 -1
- package/lib/index.mjs +8 -8
- package/lib/renderers/Audio/index.d.ts.map +1 -1
- package/lib/renderers/Csv/index.d.ts.map +1 -1
- package/lib/renderers/Docx/index.d.ts.map +1 -1
- package/lib/renderers/Epub/index.d.ts.map +1 -1
- package/lib/renderers/Font/index.d.ts.map +1 -1
- package/lib/renderers/Image/index.d.ts +2 -0
- package/lib/renderers/Image/index.d.ts.map +1 -1
- package/lib/renderers/Json/index.d.ts.map +1 -1
- package/lib/renderers/Markdown/index.d.ts.map +1 -1
- package/lib/renderers/Mobi/index.d.ts.map +1 -1
- package/lib/renderers/Msg/index.d.ts.map +1 -1
- package/lib/renderers/Pdf/index.d.ts.map +1 -1
- package/lib/renderers/Pptx/index.d.ts.map +1 -1
- package/lib/renderers/RendererError.d.ts +8 -0
- package/lib/renderers/RendererError.d.ts.map +1 -0
- package/lib/renderers/Subtitle/index.d.ts.map +1 -1
- package/lib/renderers/Text/index.d.ts.map +1 -1
- package/lib/renderers/Video/index.d.ts +1 -0
- package/lib/renderers/Video/index.d.ts.map +1 -1
- package/lib/renderers/Xlsx/index.d.ts.map +1 -1
- package/lib/renderers/Xml/index.d.ts.map +1 -1
- package/lib/renderers/Zip/index.d.ts.map +1 -1
- package/package.json +13 -5
- package/lib/chunks/index-B0JUZ5rS.mjs +0 -110
- package/lib/chunks/index-B0JUZ5rS.mjs.map +0 -1
- package/lib/chunks/index-BAYc4aBz.mjs +0 -129
- package/lib/chunks/index-BAYc4aBz.mjs.map +0 -1
- package/lib/chunks/index-BOQJNL71.mjs +0 -103
- package/lib/chunks/index-BOQJNL71.mjs.map +0 -1
- package/lib/chunks/index-BkU8rK-0.mjs +0 -51
- package/lib/chunks/index-BkU8rK-0.mjs.map +0 -1
- package/lib/chunks/index-BnDoXBnH.mjs +0 -257
- package/lib/chunks/index-BnDoXBnH.mjs.map +0 -1
- package/lib/chunks/index-C5YHI0Zs.mjs.map +0 -1
- package/lib/chunks/index-CGNWXFy3.mjs +0 -2081
- package/lib/chunks/index-CGNWXFy3.mjs.map +0 -1
- package/lib/chunks/index-CwmZQ-JO.mjs.map +0 -1
- package/lib/chunks/index-CzflrElZ.mjs +0 -52
- package/lib/chunks/index-CzflrElZ.mjs.map +0 -1
- package/lib/chunks/index-CztCCF7q.mjs +0 -116
- package/lib/chunks/index-CztCCF7q.mjs.map +0 -1
- package/lib/chunks/index-DKEcGewg.mjs +0 -96
- package/lib/chunks/index-DKEcGewg.mjs.map +0 -1
- package/lib/chunks/index-DN8BQIqo.mjs.map +0 -1
- package/lib/chunks/index-DPpUj8Yy.mjs.map +0 -1
- package/lib/chunks/index-DSAXdrgU.mjs.map +0 -1
- package/lib/chunks/index-DveR0rOk.mjs.map +0 -1
- package/lib/chunks/index-QfO-sASN.mjs +0 -152
- package/lib/chunks/index-QfO-sASN.mjs.map +0 -1
- package/lib/chunks/index-h9bO9wmq.mjs +0 -99
- package/lib/chunks/index-h9bO9wmq.mjs.map +0 -1
- package/lib/chunks/index-mvSVNKlQ.mjs +0 -228
- package/lib/chunks/index-mvSVNKlQ.mjs.map +0 -1
- package/lib/chunks/index-tecGXW2S.mjs.map +0 -1
- package/lib/pdfjs/cmaps/78-EUC-H.bcmap +0 -0
- package/lib/pdfjs/cmaps/78-EUC-V.bcmap +0 -0
- package/lib/pdfjs/cmaps/78-H.bcmap +0 -0
- package/lib/pdfjs/cmaps/78-RKSJ-H.bcmap +0 -0
- package/lib/pdfjs/cmaps/78-RKSJ-V.bcmap +0 -0
- package/lib/pdfjs/cmaps/78-V.bcmap +0 -0
- package/lib/pdfjs/cmaps/78ms-RKSJ-H.bcmap +0 -0
- package/lib/pdfjs/cmaps/78ms-RKSJ-V.bcmap +0 -0
- package/lib/pdfjs/cmaps/83pv-RKSJ-H.bcmap +0 -0
- package/lib/pdfjs/cmaps/90ms-RKSJ-H.bcmap +0 -0
- package/lib/pdfjs/cmaps/90ms-RKSJ-V.bcmap +0 -0
- package/lib/pdfjs/cmaps/90msp-RKSJ-H.bcmap +0 -0
- package/lib/pdfjs/cmaps/90msp-RKSJ-V.bcmap +0 -0
- package/lib/pdfjs/cmaps/90pv-RKSJ-H.bcmap +0 -0
- package/lib/pdfjs/cmaps/90pv-RKSJ-V.bcmap +0 -0
- package/lib/pdfjs/cmaps/Add-H.bcmap +0 -0
- package/lib/pdfjs/cmaps/Add-RKSJ-H.bcmap +0 -0
- package/lib/pdfjs/cmaps/Add-RKSJ-V.bcmap +0 -0
- package/lib/pdfjs/cmaps/Add-V.bcmap +0 -0
- package/lib/pdfjs/cmaps/Adobe-CNS1-0.bcmap +0 -0
- package/lib/pdfjs/cmaps/Adobe-CNS1-1.bcmap +0 -0
- package/lib/pdfjs/cmaps/Adobe-CNS1-2.bcmap +0 -0
- package/lib/pdfjs/cmaps/Adobe-CNS1-3.bcmap +0 -0
- package/lib/pdfjs/cmaps/Adobe-CNS1-4.bcmap +0 -0
- package/lib/pdfjs/cmaps/Adobe-CNS1-5.bcmap +0 -0
- package/lib/pdfjs/cmaps/Adobe-CNS1-6.bcmap +0 -0
- package/lib/pdfjs/cmaps/Adobe-CNS1-UCS2.bcmap +0 -0
- package/lib/pdfjs/cmaps/Adobe-GB1-0.bcmap +0 -0
- package/lib/pdfjs/cmaps/Adobe-GB1-1.bcmap +0 -0
- package/lib/pdfjs/cmaps/Adobe-GB1-2.bcmap +0 -0
- package/lib/pdfjs/cmaps/Adobe-GB1-3.bcmap +0 -0
- package/lib/pdfjs/cmaps/Adobe-GB1-4.bcmap +0 -0
- package/lib/pdfjs/cmaps/Adobe-GB1-5.bcmap +0 -0
- package/lib/pdfjs/cmaps/Adobe-GB1-UCS2.bcmap +0 -0
- package/lib/pdfjs/cmaps/Adobe-Japan1-0.bcmap +0 -0
- package/lib/pdfjs/cmaps/Adobe-Japan1-1.bcmap +0 -0
- package/lib/pdfjs/cmaps/Adobe-Japan1-2.bcmap +0 -0
- package/lib/pdfjs/cmaps/Adobe-Japan1-3.bcmap +0 -0
- package/lib/pdfjs/cmaps/Adobe-Japan1-4.bcmap +0 -0
- package/lib/pdfjs/cmaps/Adobe-Japan1-5.bcmap +0 -0
- package/lib/pdfjs/cmaps/Adobe-Japan1-6.bcmap +0 -0
- package/lib/pdfjs/cmaps/Adobe-Japan1-UCS2.bcmap +0 -0
- package/lib/pdfjs/cmaps/Adobe-Korea1-0.bcmap +0 -0
- package/lib/pdfjs/cmaps/Adobe-Korea1-1.bcmap +0 -0
- package/lib/pdfjs/cmaps/Adobe-Korea1-2.bcmap +0 -0
- package/lib/pdfjs/cmaps/Adobe-Korea1-UCS2.bcmap +0 -0
- package/lib/pdfjs/cmaps/B5-H.bcmap +0 -0
- package/lib/pdfjs/cmaps/B5-V.bcmap +0 -0
- package/lib/pdfjs/cmaps/B5pc-H.bcmap +0 -0
- package/lib/pdfjs/cmaps/B5pc-V.bcmap +0 -0
- package/lib/pdfjs/cmaps/CNS-EUC-H.bcmap +0 -0
- package/lib/pdfjs/cmaps/CNS-EUC-V.bcmap +0 -0
- package/lib/pdfjs/cmaps/CNS1-H.bcmap +0 -0
- package/lib/pdfjs/cmaps/CNS1-V.bcmap +0 -0
- package/lib/pdfjs/cmaps/CNS2-H.bcmap +0 -0
- package/lib/pdfjs/cmaps/CNS2-V.bcmap +0 -3
- package/lib/pdfjs/cmaps/ETHK-B5-H.bcmap +0 -0
- package/lib/pdfjs/cmaps/ETHK-B5-V.bcmap +0 -0
- package/lib/pdfjs/cmaps/ETen-B5-H.bcmap +0 -0
- package/lib/pdfjs/cmaps/ETen-B5-V.bcmap +0 -0
- package/lib/pdfjs/cmaps/ETenms-B5-H.bcmap +0 -3
- package/lib/pdfjs/cmaps/ETenms-B5-V.bcmap +0 -0
- package/lib/pdfjs/cmaps/EUC-H.bcmap +0 -0
- package/lib/pdfjs/cmaps/EUC-V.bcmap +0 -0
- package/lib/pdfjs/cmaps/Ext-H.bcmap +0 -0
- package/lib/pdfjs/cmaps/Ext-RKSJ-H.bcmap +0 -0
- package/lib/pdfjs/cmaps/Ext-RKSJ-V.bcmap +0 -0
- package/lib/pdfjs/cmaps/Ext-V.bcmap +0 -0
- package/lib/pdfjs/cmaps/GB-EUC-H.bcmap +0 -0
- package/lib/pdfjs/cmaps/GB-EUC-V.bcmap +0 -0
- package/lib/pdfjs/cmaps/GB-H.bcmap +0 -4
- package/lib/pdfjs/cmaps/GB-V.bcmap +0 -0
- package/lib/pdfjs/cmaps/GBK-EUC-H.bcmap +0 -0
- package/lib/pdfjs/cmaps/GBK-EUC-V.bcmap +0 -0
- package/lib/pdfjs/cmaps/GBK2K-H.bcmap +0 -0
- package/lib/pdfjs/cmaps/GBK2K-V.bcmap +0 -0
- package/lib/pdfjs/cmaps/GBKp-EUC-H.bcmap +0 -0
- package/lib/pdfjs/cmaps/GBKp-EUC-V.bcmap +0 -0
- package/lib/pdfjs/cmaps/GBT-EUC-H.bcmap +0 -0
- package/lib/pdfjs/cmaps/GBT-EUC-V.bcmap +0 -0
- package/lib/pdfjs/cmaps/GBT-H.bcmap +0 -0
- package/lib/pdfjs/cmaps/GBT-V.bcmap +0 -0
- package/lib/pdfjs/cmaps/GBTpc-EUC-H.bcmap +0 -0
- package/lib/pdfjs/cmaps/GBTpc-EUC-V.bcmap +0 -0
- package/lib/pdfjs/cmaps/GBpc-EUC-H.bcmap +0 -0
- package/lib/pdfjs/cmaps/GBpc-EUC-V.bcmap +0 -0
- package/lib/pdfjs/cmaps/H.bcmap +0 -0
- package/lib/pdfjs/cmaps/HKdla-B5-H.bcmap +0 -0
- package/lib/pdfjs/cmaps/HKdla-B5-V.bcmap +0 -0
- package/lib/pdfjs/cmaps/HKdlb-B5-H.bcmap +0 -0
- package/lib/pdfjs/cmaps/HKdlb-B5-V.bcmap +0 -0
- package/lib/pdfjs/cmaps/HKgccs-B5-H.bcmap +0 -0
- package/lib/pdfjs/cmaps/HKgccs-B5-V.bcmap +0 -0
- package/lib/pdfjs/cmaps/HKm314-B5-H.bcmap +0 -0
- package/lib/pdfjs/cmaps/HKm314-B5-V.bcmap +0 -0
- package/lib/pdfjs/cmaps/HKm471-B5-H.bcmap +0 -0
- package/lib/pdfjs/cmaps/HKm471-B5-V.bcmap +0 -0
- package/lib/pdfjs/cmaps/HKscs-B5-H.bcmap +0 -0
- package/lib/pdfjs/cmaps/HKscs-B5-V.bcmap +0 -0
- package/lib/pdfjs/cmaps/Hankaku.bcmap +0 -0
- package/lib/pdfjs/cmaps/Hiragana.bcmap +0 -0
- package/lib/pdfjs/cmaps/KSC-EUC-H.bcmap +0 -0
- package/lib/pdfjs/cmaps/KSC-EUC-V.bcmap +0 -0
- package/lib/pdfjs/cmaps/KSC-H.bcmap +0 -0
- package/lib/pdfjs/cmaps/KSC-Johab-H.bcmap +0 -0
- package/lib/pdfjs/cmaps/KSC-Johab-V.bcmap +0 -0
- package/lib/pdfjs/cmaps/KSC-V.bcmap +0 -0
- package/lib/pdfjs/cmaps/KSCms-UHC-H.bcmap +0 -0
- package/lib/pdfjs/cmaps/KSCms-UHC-HW-H.bcmap +0 -0
- package/lib/pdfjs/cmaps/KSCms-UHC-HW-V.bcmap +0 -0
- package/lib/pdfjs/cmaps/KSCms-UHC-V.bcmap +0 -0
- package/lib/pdfjs/cmaps/KSCpc-EUC-H.bcmap +0 -0
- package/lib/pdfjs/cmaps/KSCpc-EUC-V.bcmap +0 -0
- package/lib/pdfjs/cmaps/Katakana.bcmap +0 -0
- package/lib/pdfjs/cmaps/LICENSE +0 -36
- package/lib/pdfjs/cmaps/NWP-H.bcmap +0 -0
- package/lib/pdfjs/cmaps/NWP-V.bcmap +0 -0
- package/lib/pdfjs/cmaps/RKSJ-H.bcmap +0 -0
- package/lib/pdfjs/cmaps/RKSJ-V.bcmap +0 -0
- package/lib/pdfjs/cmaps/Roman.bcmap +0 -0
- package/lib/pdfjs/cmaps/UniCNS-UCS2-H.bcmap +0 -0
- package/lib/pdfjs/cmaps/UniCNS-UCS2-V.bcmap +0 -0
- package/lib/pdfjs/cmaps/UniCNS-UTF16-H.bcmap +0 -0
- package/lib/pdfjs/cmaps/UniCNS-UTF16-V.bcmap +0 -0
- package/lib/pdfjs/cmaps/UniCNS-UTF32-H.bcmap +0 -0
- package/lib/pdfjs/cmaps/UniCNS-UTF32-V.bcmap +0 -0
- package/lib/pdfjs/cmaps/UniCNS-UTF8-H.bcmap +0 -0
- package/lib/pdfjs/cmaps/UniCNS-UTF8-V.bcmap +0 -0
- package/lib/pdfjs/cmaps/UniGB-UCS2-H.bcmap +0 -0
- package/lib/pdfjs/cmaps/UniGB-UCS2-V.bcmap +0 -0
- package/lib/pdfjs/cmaps/UniGB-UTF16-H.bcmap +0 -0
- package/lib/pdfjs/cmaps/UniGB-UTF16-V.bcmap +0 -0
- package/lib/pdfjs/cmaps/UniGB-UTF32-H.bcmap +0 -0
- package/lib/pdfjs/cmaps/UniGB-UTF32-V.bcmap +0 -0
- package/lib/pdfjs/cmaps/UniGB-UTF8-H.bcmap +0 -0
- package/lib/pdfjs/cmaps/UniGB-UTF8-V.bcmap +0 -0
- package/lib/pdfjs/cmaps/UniJIS-UCS2-H.bcmap +0 -0
- package/lib/pdfjs/cmaps/UniJIS-UCS2-HW-H.bcmap +0 -0
- package/lib/pdfjs/cmaps/UniJIS-UCS2-HW-V.bcmap +0 -0
- package/lib/pdfjs/cmaps/UniJIS-UCS2-V.bcmap +0 -0
- package/lib/pdfjs/cmaps/UniJIS-UTF16-H.bcmap +0 -0
- package/lib/pdfjs/cmaps/UniJIS-UTF16-V.bcmap +0 -0
- package/lib/pdfjs/cmaps/UniJIS-UTF32-H.bcmap +0 -0
- package/lib/pdfjs/cmaps/UniJIS-UTF32-V.bcmap +0 -0
- package/lib/pdfjs/cmaps/UniJIS-UTF8-H.bcmap +0 -0
- package/lib/pdfjs/cmaps/UniJIS-UTF8-V.bcmap +0 -0
- package/lib/pdfjs/cmaps/UniJIS2004-UTF16-H.bcmap +0 -0
- package/lib/pdfjs/cmaps/UniJIS2004-UTF16-V.bcmap +0 -0
- package/lib/pdfjs/cmaps/UniJIS2004-UTF32-H.bcmap +0 -0
- package/lib/pdfjs/cmaps/UniJIS2004-UTF32-V.bcmap +0 -0
- package/lib/pdfjs/cmaps/UniJIS2004-UTF8-H.bcmap +0 -0
- package/lib/pdfjs/cmaps/UniJIS2004-UTF8-V.bcmap +0 -0
- package/lib/pdfjs/cmaps/UniJISPro-UCS2-HW-V.bcmap +0 -0
- package/lib/pdfjs/cmaps/UniJISPro-UCS2-V.bcmap +0 -0
- package/lib/pdfjs/cmaps/UniJISPro-UTF8-V.bcmap +0 -0
- package/lib/pdfjs/cmaps/UniJISX0213-UTF32-H.bcmap +0 -0
- package/lib/pdfjs/cmaps/UniJISX0213-UTF32-V.bcmap +0 -0
- package/lib/pdfjs/cmaps/UniJISX02132004-UTF32-H.bcmap +0 -0
- package/lib/pdfjs/cmaps/UniJISX02132004-UTF32-V.bcmap +0 -0
- package/lib/pdfjs/cmaps/UniKS-UCS2-H.bcmap +0 -0
- package/lib/pdfjs/cmaps/UniKS-UCS2-V.bcmap +0 -0
- package/lib/pdfjs/cmaps/UniKS-UTF16-H.bcmap +0 -0
- package/lib/pdfjs/cmaps/UniKS-UTF16-V.bcmap +0 -0
- package/lib/pdfjs/cmaps/UniKS-UTF32-H.bcmap +0 -0
- package/lib/pdfjs/cmaps/UniKS-UTF32-V.bcmap +0 -0
- package/lib/pdfjs/cmaps/UniKS-UTF8-H.bcmap +0 -0
- package/lib/pdfjs/cmaps/UniKS-UTF8-V.bcmap +0 -0
- package/lib/pdfjs/cmaps/V.bcmap +0 -0
- package/lib/pdfjs/cmaps/WP-Symbol.bcmap +0 -0
- package/lib/pdfjs/pdf.worker.min.mjs +0 -21
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { jsx as r, jsxs as t, Fragment as
|
|
2
|
-
import { useState as c, useEffect as
|
|
3
|
-
import { u as
|
|
4
|
-
|
|
1
|
+
import { jsx as r, jsxs as t, Fragment as y } from "react/jsx-runtime";
|
|
2
|
+
import { useState as c, useEffect as E, useMemo as k } from "react";
|
|
3
|
+
import { u as F, a as R, P as S, N as n, E as T } from "./index-BCbSb9Ob.mjs";
|
|
4
|
+
import { R as _ } from "./RendererError-BH6fzLrN.mjs";
|
|
5
|
+
const $ = {
|
|
5
6
|
srt: "srt",
|
|
6
7
|
vtt: "vtt",
|
|
7
8
|
lrc: "lrc",
|
|
@@ -10,44 +11,46 @@ const C = {
|
|
|
10
11
|
ssa: "ssa",
|
|
11
12
|
ttml: "ttml",
|
|
12
13
|
dfxp: "ttml"
|
|
13
|
-
},
|
|
14
|
-
var
|
|
15
|
-
const
|
|
16
|
-
return
|
|
17
|
-
},
|
|
18
|
-
const
|
|
19
|
-
|
|
20
|
-
|
|
14
|
+
}, j = (a) => {
|
|
15
|
+
var f;
|
|
16
|
+
const l = ((f = a.split(".").pop()) == null ? void 0 : f.toLowerCase()) || "";
|
|
17
|
+
return $[l];
|
|
18
|
+
}, P = ({ url: a, fileName: l }) => {
|
|
19
|
+
const f = F(), b = R(), [o, h] = c(""), [v, m] = c(!0), [u, x] = c(null);
|
|
20
|
+
E(() => {
|
|
21
|
+
const e = new AbortController();
|
|
22
|
+
return (async () => {
|
|
21
23
|
try {
|
|
22
|
-
m(!0),
|
|
23
|
-
} catch (
|
|
24
|
-
|
|
24
|
+
m(!0), x(null), h(await T(a, { fetcher: b, signal: e.signal }));
|
|
25
|
+
} catch (p) {
|
|
26
|
+
if (p.name === "AbortError") return;
|
|
27
|
+
console.warn("[SubtitleRenderer] Failed to load subtitle:", p instanceof Error ? p.message : String(p)), x(f("subtitle.load_failed"));
|
|
25
28
|
} finally {
|
|
26
29
|
m(!1);
|
|
27
30
|
}
|
|
28
|
-
})();
|
|
29
|
-
}, [
|
|
30
|
-
const
|
|
31
|
+
})(), () => e.abort();
|
|
32
|
+
}, [a]);
|
|
33
|
+
const s = k(() => {
|
|
31
34
|
if (!o) return null;
|
|
32
35
|
try {
|
|
33
|
-
return
|
|
36
|
+
return S(o, j(l));
|
|
34
37
|
} catch (e) {
|
|
35
|
-
return console.
|
|
38
|
+
return console.warn("[SubtitleRenderer] Failed to parse subtitle:", e instanceof Error ? e.message : String(e)), null;
|
|
36
39
|
}
|
|
37
|
-
}, [o,
|
|
40
|
+
}, [o, l]);
|
|
38
41
|
if (v)
|
|
39
42
|
return /* @__PURE__ */ r("div", { className: "rfp-flex rfp-items-center rfp-justify-center rfp-w-full rfp-h-full rfp-bg-[#0f0f12]", children: /* @__PURE__ */ r("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" }) });
|
|
40
|
-
if (
|
|
41
|
-
return /* @__PURE__ */ r(
|
|
42
|
-
const i =
|
|
43
|
+
if (u || !s)
|
|
44
|
+
return /* @__PURE__ */ r(_, { message: u || f("subtitle.parse_failed") });
|
|
45
|
+
const i = s.format === "lrc" || s.format === "elrc", g = s.metadata ?? {}, w = i ? "group-hover:rfp-bg-violet-400" : "group-hover:rfp-bg-sky-400";
|
|
43
46
|
return /* @__PURE__ */ t("div", { className: "rfp-relative rfp-w-full rfp-h-full rfp-bg-[#0f0f12]", children: [
|
|
44
47
|
/* @__PURE__ */ r("div", { className: "rfp-w-full rfp-h-full rfp-overflow-auto rfp-px-6 md:rfp-px-10 rfp-pt-6 rfp-pb-16 md:rfp-pb-20", children: /* @__PURE__ */ t("div", { className: "rfp-relative rfp-max-w-5xl rfp-mx-auto", children: [
|
|
45
48
|
/* @__PURE__ */ r("div", { className: "rfp-absolute rfp-left-[5px] md:rfp-left-[7px] rfp-top-2 rfp-bottom-2 rfp-w-px rfp-bg-surface-1" }),
|
|
46
|
-
/* @__PURE__ */ r("ol", { className: "rfp-space-y-5 md:rfp-space-y-6", children:
|
|
49
|
+
/* @__PURE__ */ r("ol", { className: "rfp-space-y-5 md:rfp-space-y-6", children: s.cues.map((e, d) => /* @__PURE__ */ t("li", { className: "rfp-relative rfp-pl-6 md:rfp-pl-8 rfp-group", children: [
|
|
47
50
|
/* @__PURE__ */ r(
|
|
48
51
|
"div",
|
|
49
52
|
{
|
|
50
|
-
className: `rfp-absolute rfp-left-0 rfp-top-2 rfp-w-3 rfp-h-3 rfp-rounded-full rfp-bg-surface-3 rfp-border-2 rfp-border-[#0f0f12] rfp-transition-colors ${
|
|
53
|
+
className: `rfp-absolute rfp-left-0 rfp-top-2 rfp-w-3 rfp-h-3 rfp-rounded-full rfp-bg-surface-3 rfp-border-2 rfp-border-[#0f0f12] rfp-transition-colors ${w}`
|
|
51
54
|
}
|
|
52
55
|
),
|
|
53
56
|
/* @__PURE__ */ t("div", { className: "rfp-flex rfp-flex-wrap rfp-items-baseline rfp-gap-x-3 rfp-gap-y-1 rfp-mb-1.5", children: [
|
|
@@ -56,21 +59,21 @@ const C = {
|
|
|
56
59
|
/* @__PURE__ */ r("span", { className: "rfp-text-[11px] rfp-font-mono rfp-text-fg-muted rfp-tabular-nums", children: n(e.end) }),
|
|
57
60
|
/* @__PURE__ */ t("span", { className: "rfp-text-[10px] rfp-font-mono rfp-text-fg-disabled rfp-tabular-nums", children: [
|
|
58
61
|
"#",
|
|
59
|
-
e.id ??
|
|
62
|
+
e.id ?? d + 1
|
|
60
63
|
] }),
|
|
61
64
|
e.style && /* @__PURE__ */ r("span", { className: "rfp-text-[9px] rfp-uppercase rfp-tracking-widest rfp-text-fg-tertiary rfp-px-1.5 rfp-py-0.5 rfp-rounded rfp-bg-surface-1 rfp-border rfp-border-line-weak", children: e.style })
|
|
62
65
|
] }),
|
|
63
|
-
e.words && e.words.length > 0 ? /* @__PURE__ */ r("div", { className: "rfp-flex rfp-flex-wrap rfp-gap-x-1.5 rfp-gap-y-1 rfp-text-base md:rfp-text-lg rfp-text-fg-primary rfp-leading-relaxed group-hover:rfp-text-fg-primary rfp-transition-colors", children: e.words.map((
|
|
66
|
+
e.words && e.words.length > 0 ? /* @__PURE__ */ r("div", { className: "rfp-flex rfp-flex-wrap rfp-gap-x-1.5 rfp-gap-y-1 rfp-text-base md:rfp-text-lg rfp-text-fg-primary rfp-leading-relaxed group-hover:rfp-text-fg-primary rfp-transition-colors", children: e.words.map((p, N) => /* @__PURE__ */ t(
|
|
64
67
|
"span",
|
|
65
68
|
{
|
|
66
69
|
className: "rfp-inline-flex rfp-flex-col rfp-items-start",
|
|
67
|
-
title: n(
|
|
70
|
+
title: n(p.start),
|
|
68
71
|
children: [
|
|
69
|
-
/* @__PURE__ */ r("span", { className: "rfp-text-[9px] rfp-text-fg-disabled rfp-font-mono rfp-leading-none rfp-tabular-nums", children: n(
|
|
70
|
-
/* @__PURE__ */ r("span", { className: "rfp-leading-snug", children:
|
|
72
|
+
/* @__PURE__ */ r("span", { className: "rfp-text-[9px] rfp-text-fg-disabled rfp-font-mono rfp-leading-none rfp-tabular-nums", children: n(p.start).slice(3, 8) }),
|
|
73
|
+
/* @__PURE__ */ r("span", { className: "rfp-leading-snug", children: p.text })
|
|
71
74
|
]
|
|
72
75
|
},
|
|
73
|
-
`w-${
|
|
76
|
+
`w-${N}`
|
|
74
77
|
)) }) : /* @__PURE__ */ r(
|
|
75
78
|
"p",
|
|
76
79
|
{
|
|
@@ -78,15 +81,15 @@ const C = {
|
|
|
78
81
|
children: e.text
|
|
79
82
|
}
|
|
80
83
|
)
|
|
81
|
-
] }, `cue-${
|
|
84
|
+
] }, `cue-${d}`)) })
|
|
82
85
|
] }) }),
|
|
83
86
|
/* @__PURE__ */ t("div", { className: "rfp-pointer-events-none rfp-absolute rfp-bottom-3 rfp-right-3 md:rfp-bottom-4 md:rfp-right-4 rfp-flex rfp-items-center rfp-gap-2 rfp-px-2.5 rfp-py-1 rfp-rounded-full rfp-bg-surface-nav rfp-backdrop-blur rfp-border rfp-border-line-weak rfp-text-[10px] rfp-text-fg-tertiary rfp-font-mono rfp-tabular-nums", children: [
|
|
84
87
|
/* @__PURE__ */ t("span", { children: [
|
|
85
|
-
|
|
88
|
+
s.cues.length,
|
|
86
89
|
" ",
|
|
87
|
-
|
|
90
|
+
f(i ? "subtitle.lines" : "subtitle.cues")
|
|
88
91
|
] }),
|
|
89
|
-
g.length && /* @__PURE__ */ t(
|
|
92
|
+
g.length && /* @__PURE__ */ t(y, { children: [
|
|
90
93
|
/* @__PURE__ */ r("span", { className: "rfp-text-fg-disabled", children: "·" }),
|
|
91
94
|
/* @__PURE__ */ r("span", { children: g.length })
|
|
92
95
|
] })
|
|
@@ -94,6 +97,6 @@ const C = {
|
|
|
94
97
|
] });
|
|
95
98
|
};
|
|
96
99
|
export {
|
|
97
|
-
|
|
100
|
+
P as SubtitleRenderer
|
|
98
101
|
};
|
|
99
|
-
//# sourceMappingURL=index-
|
|
102
|
+
//# sourceMappingURL=index-BPsJtP6e.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-BPsJtP6e.mjs","sources":["../../src/renderers/Subtitle/index.tsx"],"sourcesContent":["import { useState, useEffect, useMemo } from 'react';\nimport {\n parseSubtitle,\n formatSubtitleTime,\n fetchTextUtf8,\n type SubtitleParseResult,\n type SubtitleFormat,\n} from '@eternalheart/file-preview-core';\nimport { useTranslator } from '../../i18n/LocaleContext';\nimport { useFetcher } from '../../RequestContext';\nimport { RendererError } from '../RendererError';\n\ninterface SubtitleRendererProps {\n url: string;\n fileName: string;\n}\n\nconst FORMAT_BY_EXT: Record<string, SubtitleFormat> = {\n srt: 'srt',\n vtt: 'vtt',\n lrc: 'lrc',\n elrc: 'elrc',\n ass: 'ass',\n ssa: 'ssa',\n ttml: 'ttml',\n dfxp: 'ttml',\n};\n\nconst getFormat = (fileName: string): SubtitleFormat | undefined => {\n const ext = fileName.split('.').pop()?.toLowerCase() || '';\n return FORMAT_BY_EXT[ext];\n};\n\nexport const SubtitleRenderer: React.FC<SubtitleRendererProps> = ({ url, fileName }) => {\n const t = useTranslator();\n const fetcher = useFetcher();\n const [text, setText] = useState<string>('');\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n\n useEffect(() => {\n const controller = new AbortController();\n const load = async () => {\n try {\n setLoading(true);\n setError(null);\n setText(await fetchTextUtf8(url, { fetcher, signal: controller.signal }));\n } catch (err: any) {\n if (err.name === 'AbortError') return;\n console.warn('[SubtitleRenderer] Failed to load subtitle:', err instanceof Error ? err.message : String(err));\n setError(t('subtitle.load_failed'));\n } finally {\n setLoading(false);\n }\n };\n load();\n return () => controller.abort();\n }, [url]);\n\n const parsed: SubtitleParseResult | null = useMemo(() => {\n if (!text) return null;\n try {\n return parseSubtitle(text, getFormat(fileName));\n } catch (err) {\n // 字幕解析失败通常是格式不支持或文件损坏,用 warn 级别记录\n console.warn('[SubtitleRenderer] Failed to parse subtitle:', err instanceof Error ? err.message : String(err));\n return null;\n }\n }, [text, fileName]);\n\n if (loading) {\n return (\n <div className=\"rfp-flex rfp-items-center rfp-justify-center rfp-w-full rfp-h-full rfp-bg-[#0f0f12]\">\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 if (error || !parsed) {\n return <RendererError message={error || t('subtitle.parse_failed')} />;\n }\n\n const isLyric = parsed.format === 'lrc' || parsed.format === 'elrc';\n const meta = parsed.metadata ?? {};\n const dotHover = isLyric ? 'group-hover:rfp-bg-violet-400' : 'group-hover:rfp-bg-sky-400';\n\n return (\n <div className=\"rfp-relative rfp-w-full rfp-h-full rfp-bg-[#0f0f12]\">\n {/* 内容滚动区 */}\n <div className=\"rfp-w-full rfp-h-full rfp-overflow-auto rfp-px-6 md:rfp-px-10 rfp-pt-6 rfp-pb-16 md:rfp-pb-20\">\n <div className=\"rfp-relative rfp-max-w-5xl rfp-mx-auto\">\n {/* vertical line */}\n <div className=\"rfp-absolute rfp-left-[5px] md:rfp-left-[7px] rfp-top-2 rfp-bottom-2 rfp-w-px rfp-bg-surface-1\" />\n\n <ol className=\"rfp-space-y-5 md:rfp-space-y-6\">\n {parsed.cues.map((cue, i) => (\n <li key={`cue-${i}`} className=\"rfp-relative rfp-pl-6 md:rfp-pl-8 rfp-group\">\n {/* dot */}\n <div\n className={`rfp-absolute rfp-left-0 rfp-top-2 rfp-w-3 rfp-h-3 rfp-rounded-full rfp-bg-surface-3 rfp-border-2 rfp-border-[#0f0f12] rfp-transition-colors ${dotHover}`}\n />\n\n <div className=\"rfp-flex rfp-flex-wrap rfp-items-baseline rfp-gap-x-3 rfp-gap-y-1 rfp-mb-1.5\">\n <span className=\"rfp-text-[11px] rfp-font-mono rfp-text-fg-muted rfp-tabular-nums\">\n {formatSubtitleTime(cue.start)}\n </span>\n <span className=\"rfp-text-[11px] rfp-text-fg-disabled\">→</span>\n <span className=\"rfp-text-[11px] rfp-font-mono rfp-text-fg-muted rfp-tabular-nums\">\n {formatSubtitleTime(cue.end)}\n </span>\n <span className=\"rfp-text-[10px] rfp-font-mono rfp-text-fg-disabled rfp-tabular-nums\">\n #{cue.id ?? i + 1}\n </span>\n {cue.style && (\n <span className=\"rfp-text-[9px] rfp-uppercase rfp-tracking-widest rfp-text-fg-tertiary rfp-px-1.5 rfp-py-0.5 rfp-rounded rfp-bg-surface-1 rfp-border rfp-border-line-weak\">\n {cue.style}\n </span>\n )}\n </div>\n\n {cue.words && cue.words.length > 0 ? (\n <div className=\"rfp-flex rfp-flex-wrap rfp-gap-x-1.5 rfp-gap-y-1 rfp-text-base md:rfp-text-lg rfp-text-fg-primary rfp-leading-relaxed group-hover:rfp-text-fg-primary rfp-transition-colors\">\n {cue.words.map((word, wi) => (\n <span\n key={`w-${wi}`}\n className=\"rfp-inline-flex rfp-flex-col rfp-items-start\"\n title={formatSubtitleTime(word.start)}\n >\n <span className=\"rfp-text-[9px] rfp-text-fg-disabled rfp-font-mono rfp-leading-none rfp-tabular-nums\">\n {formatSubtitleTime(word.start).slice(3, 8)}\n </span>\n <span className=\"rfp-leading-snug\">{word.text}</span>\n </span>\n ))}\n </div>\n ) : (\n <p\n className={`rfp-whitespace-pre-wrap rfp-break-words rfp-leading-relaxed group-hover:rfp-text-fg-primary rfp-transition-colors rfp-text-fg-primary ${\n isLyric ? 'rfp-text-base md:rfp-text-xl rfp-font-medium' : 'rfp-text-sm md:rfp-text-base'\n }`}\n >\n {cue.text}\n </p>\n )}\n </li>\n ))}\n </ol>\n </div>\n </div>\n\n {/* 底部状态栏 */}\n <div className=\"rfp-pointer-events-none rfp-absolute rfp-bottom-3 rfp-right-3 md:rfp-bottom-4 md:rfp-right-4 rfp-flex rfp-items-center rfp-gap-2 rfp-px-2.5 rfp-py-1 rfp-rounded-full rfp-bg-surface-nav rfp-backdrop-blur rfp-border rfp-border-line-weak rfp-text-[10px] rfp-text-fg-tertiary rfp-font-mono rfp-tabular-nums\">\n <span>{parsed.cues.length} {isLyric ? t('subtitle.lines') : t('subtitle.cues')}</span>\n {meta.length && (\n <>\n <span className=\"rfp-text-fg-disabled\">·</span>\n <span>{meta.length}</span>\n </>\n )}\n </div>\n </div>\n );\n};\n"],"names":["FORMAT_BY_EXT","getFormat","fileName","ext","_a","SubtitleRenderer","url","t","useTranslator","fetcher","useFetcher","text","setText","useState","loading","setLoading","error","setError","useEffect","controller","fetchTextUtf8","err","parsed","useMemo","parseSubtitle","jsx","RendererError","isLyric","meta","dotHover","jsxs","cue","i","formatSubtitleTime","word","wi","Fragment"],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { jsx as r } from "react/jsx-runtime";
|
|
2
|
+
import { useState as s, useEffect as b } from "react";
|
|
3
|
+
import { u as x, a as y, y as v, E } from "./index-BCbSb9Ob.mjs";
|
|
4
|
+
import { u as N } from "./useShikiHighlight-Cq02e63J.mjs";
|
|
5
|
+
import { R as T } from "./RendererError-BH6fzLrN.mjs";
|
|
6
|
+
const C = ({
|
|
7
|
+
url: l,
|
|
8
|
+
fileName: f,
|
|
9
|
+
wordWrap: n = !0,
|
|
10
|
+
htmlPreview: m = !1
|
|
11
|
+
}) => {
|
|
12
|
+
const d = x(), h = y(), [o, g] = s(""), [w, a] = s(!0), [p, i] = s(null), e = v(f), { html: c } = N(
|
|
13
|
+
e !== "text" ? o : "",
|
|
14
|
+
e
|
|
15
|
+
);
|
|
16
|
+
return b(() => {
|
|
17
|
+
const u = new AbortController();
|
|
18
|
+
return (async () => {
|
|
19
|
+
try {
|
|
20
|
+
a(!0), i(null);
|
|
21
|
+
const t = await E(l, { fetcher: h, signal: u.signal });
|
|
22
|
+
g(t);
|
|
23
|
+
} catch (t) {
|
|
24
|
+
if (t.name === "AbortError") return;
|
|
25
|
+
i(d("text.load_failed")), console.error(t);
|
|
26
|
+
} finally {
|
|
27
|
+
a(!1);
|
|
28
|
+
}
|
|
29
|
+
})(), () => u.abort();
|
|
30
|
+
}, [l]), w ? /* @__PURE__ */ r("div", { className: "rfp-flex rfp-items-center rfp-justify-center rfp-w-full rfp-h-full", children: /* @__PURE__ */ r("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" }) }) : p ? /* @__PURE__ */ r(T, { message: p }) : m && e === "html" ? /* @__PURE__ */ r("div", { className: "rfp-w-full rfp-h-full rfp-bg-surface-toolbar", children: /* @__PURE__ */ r(
|
|
31
|
+
"iframe",
|
|
32
|
+
{
|
|
33
|
+
srcDoc: o,
|
|
34
|
+
sandbox: "allow-same-origin",
|
|
35
|
+
className: "rfp-w-full rfp-h-full rfp-border-0",
|
|
36
|
+
title: f
|
|
37
|
+
}
|
|
38
|
+
) }) : /* @__PURE__ */ r("div", { className: "rfp-w-full rfp-h-full rfp-overflow-auto rfp-bg-code-bg", children: e === "text" || !c ? /* @__PURE__ */ r(
|
|
39
|
+
"pre",
|
|
40
|
+
{
|
|
41
|
+
className: `rfp-p-6 rfp-text-fg-primary rfp-font-mono rfp-text-sm ${n ? "rfp-whitespace-pre-wrap rfp-break-words" : "rfp-whitespace-pre"}`,
|
|
42
|
+
children: o
|
|
43
|
+
}
|
|
44
|
+
) : /* @__PURE__ */ r(
|
|
45
|
+
"div",
|
|
46
|
+
{
|
|
47
|
+
className: `rfp-shiki-wrapper with-line-numbers ${n ? "" : "no-wrap"}`,
|
|
48
|
+
dangerouslySetInnerHTML: { __html: c }
|
|
49
|
+
}
|
|
50
|
+
) });
|
|
51
|
+
};
|
|
52
|
+
export {
|
|
53
|
+
C as TextRenderer
|
|
54
|
+
};
|
|
55
|
+
//# sourceMappingURL=index-CA8OvqPT.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-CA8OvqPT.mjs","sources":["../../src/renderers/Text/index.tsx"],"sourcesContent":["import { useState, useEffect } from 'react';\nimport { fetchTextUtf8, getLanguageFromFileName } from '@eternalheart/file-preview-core';\nimport { useTranslator } from '../../i18n/LocaleContext';\nimport { useFetcher } from '../../RequestContext';\nimport { useShikiHighlight } from '../../hooks/useShikiHighlight';\nimport { RendererError } from '../RendererError';\n\ninterface TextRendererProps {\n url: string;\n fileName: string;\n wordWrap?: boolean;\n htmlPreview?: boolean;\n}\n\nexport const TextRenderer: React.FC<TextRendererProps> = ({\n url,\n fileName,\n wordWrap = true,\n htmlPreview = false,\n}) => {\n const t = useTranslator();\n const fetcher = useFetcher();\n const [content, setContent] = useState<string>('');\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n const language = getLanguageFromFileName(fileName);\n const { html: highlighted } = useShikiHighlight(\n language !== 'text' ? content : '',\n language,\n );\n\n useEffect(() => {\n const controller = new AbortController();\n const loadText = async () => {\n try {\n setLoading(true);\n setError(null);\n const text = await fetchTextUtf8(url, { fetcher, signal: controller.signal });\n setContent(text);\n } catch (err: any) {\n if (err.name === 'AbortError') return;\n setError(t('text.load_failed'));\n console.error(err);\n } finally {\n setLoading(false);\n }\n };\n\n loadText();\n return () => controller.abort();\n }, [url]);\n\n if (loading) {\n return (\n <div className=\"rfp-flex rfp-items-center rfp-justify-center rfp-w-full rfp-h-full\">\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 if (error) {\n return <RendererError message={error} />;\n }\n\n // HTML 预览模式\n if (htmlPreview && (language === 'html')) {\n return (\n <div className=\"rfp-w-full rfp-h-full rfp-bg-surface-toolbar\">\n <iframe\n srcDoc={content}\n sandbox=\"allow-same-origin\"\n className=\"rfp-w-full rfp-h-full rfp-border-0\"\n title={fileName}\n />\n </div>\n );\n }\n\n // 源码模式\n return (\n <div className=\"rfp-w-full rfp-h-full rfp-overflow-auto rfp-bg-code-bg\">\n {language === 'text' || !highlighted ? (\n <pre\n className={`rfp-p-6 rfp-text-fg-primary rfp-font-mono rfp-text-sm ${\n wordWrap ? 'rfp-whitespace-pre-wrap rfp-break-words' : 'rfp-whitespace-pre'\n }`}\n >\n {content}\n </pre>\n ) : (\n <div\n className={`rfp-shiki-wrapper with-line-numbers ${wordWrap ? '' : 'no-wrap'}`}\n dangerouslySetInnerHTML={{ __html: highlighted }}\n />\n )}\n </div>\n );\n};\n"],"names":["TextRenderer","url","fileName","wordWrap","htmlPreview","t","useTranslator","fetcher","useFetcher","content","setContent","useState","loading","setLoading","error","setError","language","getLanguageFromFileName","highlighted","useShikiHighlight","useEffect","controller","text","fetchTextUtf8","err","jsx","RendererError"],"mappings":";;;;;AAcO,MAAMA,IAA4C,CAAC;AAAA,EACxD,KAAAC;AAAA,EACA,UAAAC;AAAA,EACA,UAAAC,IAAW;AAAA,EACX,aAAAC,IAAc;AAChB,MAAM;AACJ,QAAMC,IAAIC,EAAA,GACJC,IAAUC,EAAA,GACV,CAACC,GAASC,CAAU,IAAIC,EAAiB,EAAE,GAC3C,CAACC,GAASC,CAAU,IAAIF,EAAS,EAAI,GACrC,CAACG,GAAOC,CAAQ,IAAIJ,EAAwB,IAAI,GAChDK,IAAWC,EAAwBf,CAAQ,GAC3C,EAAE,MAAMgB,EAAA,IAAgBC;AAAA,IAC5BH,MAAa,SAASP,IAAU;AAAA,IAChCO;AAAA,EAAA;AAwBF,SArBAI,EAAU,MAAM;AACd,UAAMC,IAAa,IAAI,gBAAA;AAgBvB,YAfiB,YAAY;AAC3B,UAAI;AACF,QAAAR,EAAW,EAAI,GACfE,EAAS,IAAI;AACb,cAAMO,IAAO,MAAMC,EAActB,GAAK,EAAE,SAAAM,GAAS,QAAQc,EAAW,QAAQ;AAC5E,QAAAX,EAAWY,CAAI;AAAA,MACjB,SAASE,GAAU;AACjB,YAAIA,EAAI,SAAS,aAAc;AAC/B,QAAAT,EAASV,EAAE,kBAAkB,CAAC,GAC9B,QAAQ,MAAMmB,CAAG;AAAA,MACnB,UAAA;AACE,QAAAX,EAAW,EAAK;AAAA,MAClB;AAAA,IACF,GAEA,GACO,MAAMQ,EAAW,MAAA;AAAA,EAC1B,GAAG,CAACpB,CAAG,CAAC,GAEJW,IAEA,gBAAAa,EAAC,SAAI,WAAU,sEACb,4BAAC,OAAA,EAAI,WAAU,qHAAoH,EAAA,CACrI,IAIAX,IACK,gBAAAW,EAACC,GAAA,EAAc,SAASZ,EAAA,CAAO,IAIpCV,KAAgBY,MAAa,SAE7B,gBAAAS,EAAC,OAAA,EAAI,WAAU,gDACb,UAAA,gBAAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,QAAQhB;AAAA,MACR,SAAQ;AAAA,MACR,WAAU;AAAA,MACV,OAAOP;AAAA,IAAA;AAAA,EAAA,GAEX,sBAMD,OAAA,EAAI,WAAU,0DACZ,UAAAc,MAAa,UAAU,CAACE,IACvB,gBAAAO;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW,yDACTtB,IAAW,4CAA4C,oBACzD;AAAA,MAEC,UAAAM;AAAA,IAAA;AAAA,EAAA,IAGH,gBAAAgB;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW,uCAAuCtB,IAAW,KAAK,SAAS;AAAA,MAC3E,yBAAyB,EAAE,QAAQe,EAAA;AAAA,IAAY;AAAA,EAAA,GAGrD;AAEJ;"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { jsx as n, jsxs as g } from "react/jsx-runtime";
|
|
2
|
+
import { useState as y, useRef as x, useEffect as h } from "react";
|
|
3
|
+
import w from "video.js";
|
|
4
|
+
import { u as k } from "./index-BCbSb9Ob.mjs";
|
|
5
|
+
import { R as T } from "./RendererError-BH6fzLrN.mjs";
|
|
6
|
+
const E = /* @__PURE__ */ new Set(["avi", "wmv", "flv"]), j = (r) => {
|
|
7
|
+
var o;
|
|
8
|
+
const s = ((o = r.split(".").pop()) == null ? void 0 : o.toLowerCase().split("?")[0]) || "";
|
|
9
|
+
return {
|
|
10
|
+
mp4: "video/mp4",
|
|
11
|
+
webm: "video/webm",
|
|
12
|
+
ogg: "video/ogg",
|
|
13
|
+
ogv: "video/ogg",
|
|
14
|
+
mov: "video/quicktime",
|
|
15
|
+
// MOV 使用 QuickTime MIME 类型
|
|
16
|
+
avi: "video/x-msvideo",
|
|
17
|
+
mkv: "video/x-matroska",
|
|
18
|
+
m4v: "video/mp4",
|
|
19
|
+
"3gp": "video/3gpp",
|
|
20
|
+
flv: "video/x-flv"
|
|
21
|
+
}[s] || "video/mp4";
|
|
22
|
+
}, R = (r, s) => {
|
|
23
|
+
var o;
|
|
24
|
+
return ((o = (s || r).split(".").pop()) == null ? void 0 : o.toLowerCase().split("?")[0]) || "";
|
|
25
|
+
}, V = ({ url: r, fileName: s }) => {
|
|
26
|
+
const e = k(), [o, p] = y(null), [b, d] = y(!0), f = x(null), a = x(null);
|
|
27
|
+
return h(() => {
|
|
28
|
+
const i = R(r, s);
|
|
29
|
+
if (E.has(i)) {
|
|
30
|
+
p({
|
|
31
|
+
title: e("video.unsupported_title"),
|
|
32
|
+
detail: e("video.unsupported_detail", { format: i.toUpperCase() })
|
|
33
|
+
}), d(!1);
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
if (!a.current && f.current) {
|
|
37
|
+
const c = document.createElement("video-js");
|
|
38
|
+
c.classList.add("vjs-big-play-centered", "vjs-theme-apple"), f.current.appendChild(c);
|
|
39
|
+
const u = j(r);
|
|
40
|
+
let m;
|
|
41
|
+
u === "video/quicktime" ? m = [
|
|
42
|
+
{ src: r, type: "video/quicktime" },
|
|
43
|
+
{ src: r, type: "video/mp4" }
|
|
44
|
+
] : m = [{ src: r, type: u }];
|
|
45
|
+
const l = w(c, {
|
|
46
|
+
controls: !0,
|
|
47
|
+
fill: !0,
|
|
48
|
+
preload: "auto",
|
|
49
|
+
controlBar: {
|
|
50
|
+
children: [
|
|
51
|
+
"playToggle",
|
|
52
|
+
"volumePanel",
|
|
53
|
+
"currentTimeDisplay",
|
|
54
|
+
"timeDivider",
|
|
55
|
+
"durationDisplay",
|
|
56
|
+
"progressControl",
|
|
57
|
+
"remainingTimeDisplay",
|
|
58
|
+
"fullscreenToggle"
|
|
59
|
+
],
|
|
60
|
+
volumePanel: {
|
|
61
|
+
inline: !1
|
|
62
|
+
}
|
|
63
|
+
},
|
|
64
|
+
html5: {
|
|
65
|
+
vhs: {
|
|
66
|
+
overrideNative: !0
|
|
67
|
+
},
|
|
68
|
+
nativeVideoTracks: !1,
|
|
69
|
+
nativeAudioTracks: !1,
|
|
70
|
+
nativeTextTracks: !1
|
|
71
|
+
},
|
|
72
|
+
sources: m
|
|
73
|
+
}), v = l.el().querySelector("video");
|
|
74
|
+
v && (v.style.objectFit = "contain"), l.on("loadeddata", () => {
|
|
75
|
+
d(!1);
|
|
76
|
+
}), l.on("error", () => {
|
|
77
|
+
const t = l.error();
|
|
78
|
+
console.warn("[VideoRenderer] Video playback error:", (t == null ? void 0 : t.message) || "Unknown error"), (t == null ? void 0 : t.code) === 4 ? p({
|
|
79
|
+
title: e("video.unsupported_title"),
|
|
80
|
+
detail: e("video.unsupported_detail", {
|
|
81
|
+
format: i ? i.toUpperCase() : e("common.unknown_error")
|
|
82
|
+
})
|
|
83
|
+
}) : p({
|
|
84
|
+
title: e("video.load_failed"),
|
|
85
|
+
detail: (t == null ? void 0 : t.message) || e("common.unknown_error")
|
|
86
|
+
}), d(!1);
|
|
87
|
+
}), a.current = l;
|
|
88
|
+
}
|
|
89
|
+
}, [r, s, e]), h(() => {
|
|
90
|
+
const i = a.current;
|
|
91
|
+
return () => {
|
|
92
|
+
i && !i.isDisposed() && (i.dispose(), a.current = null);
|
|
93
|
+
};
|
|
94
|
+
}, []), o ? /* @__PURE__ */ n(T, { message: o.title, detail: o.detail }) : /* @__PURE__ */ n("div", { className: "rfp-flex rfp-items-center rfp-justify-center rfp-w-full rfp-h-full", children: /* @__PURE__ */ g("div", { className: "rfp-w-full rfp-h-full rfp-relative", children: [
|
|
95
|
+
b && /* @__PURE__ */ n("div", { className: "rfp-absolute rfp-inset-0 rfp-flex rfp-items-center rfp-justify-center rfp-bg-surface-3 rfp-backdrop-blur-sm rfp-z-10", children: /* @__PURE__ */ g("div", { className: "rfp-text-center", children: [
|
|
96
|
+
/* @__PURE__ */ n("div", { className: "rfp-w-12 rfp-h-12 rfp-mx-auto rfp-mb-3 rfp-border-3 rfp-border-line-strong rfp-border-t-spinner-head rfp-rounded-full rfp-animate-spin" }),
|
|
97
|
+
/* @__PURE__ */ n("p", { className: "rfp-text-sm rfp-text-fg-secondary rfp-font-medium", children: e("video.loading") })
|
|
98
|
+
] }) }),
|
|
99
|
+
/* @__PURE__ */ n(
|
|
100
|
+
"div",
|
|
101
|
+
{
|
|
102
|
+
ref: f,
|
|
103
|
+
className: "rfp-overflow-hidden rfp-w-full rfp-h-full [&_video]:rfp-object-contain",
|
|
104
|
+
style: {
|
|
105
|
+
boxShadow: "0 20px 60px rgba(0, 0, 0, 0.4), 0 0 0 1px rgba(255, 255, 255, 0.05)"
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
)
|
|
109
|
+
] }) });
|
|
110
|
+
};
|
|
111
|
+
export {
|
|
112
|
+
V as VideoRenderer
|
|
113
|
+
};
|
|
114
|
+
//# sourceMappingURL=index-CJGtdAy7.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-CJGtdAy7.mjs","sources":["../../src/renderers/Video/index.tsx"],"sourcesContent":["import { useRef, useEffect, useState } from 'react';\nimport videojs from 'video.js';\nimport 'video.js/dist/video-js.css';\nimport { useTranslator } from '../../i18n/LocaleContext';\nimport { RendererError } from '../RendererError';\n\ntype VideoJsPlayer = ReturnType<typeof videojs>;\n\ninterface VideoRendererProps {\n url: string;\n fileName?: string;\n}\n\n// 浏览器原生不支持的视频容器(无论编码,<video> 都无法播放)\n// — 这些扩展名直接短路 videojs 初始化,给出明确提示\nconst BROWSER_UNSUPPORTED_EXTS = new Set(['avi', 'wmv', 'flv']);\n\n// 根据 URL 获取视频 MIME 类型\nconst getVideoType = (url: string): string => {\n const ext = url.split('.').pop()?.toLowerCase().split('?')[0] || '';\n const typeMap: Record<string, string> = {\n mp4: 'video/mp4',\n webm: 'video/webm',\n ogg: 'video/ogg',\n ogv: 'video/ogg',\n mov: 'video/quicktime', // MOV 使用 QuickTime MIME 类型\n avi: 'video/x-msvideo',\n mkv: 'video/x-matroska',\n m4v: 'video/mp4',\n '3gp': 'video/3gpp',\n flv: 'video/x-flv',\n };\n return typeMap[ext] || 'video/mp4';\n};\n\n// 获取视频文件扩展名(优先用文件名,blob/HTTP URL 都拿不到真扩展名)\nconst getVideoExt = (url: string, fileName?: string): string => {\n const source = fileName || url;\n return source.split('.').pop()?.toLowerCase().split('?')[0] || '';\n};\n\ninterface ErrorState {\n title: string;\n detail: string;\n}\n\nexport const VideoRenderer: React.FC<VideoRendererProps> = ({ url, fileName }) => {\n const t = useTranslator();\n const [error, setError] = useState<ErrorState | null>(null);\n const [isLoading, setIsLoading] = useState(true);\n const videoRef = useRef<HTMLDivElement>(null);\n const playerRef = useRef<VideoJsPlayer | null>(null);\n\n useEffect(() => {\n const videoExt = getVideoExt(url, fileName);\n\n // 已知浏览器不支持的容器:跳过 videojs 初始化,直接展示友好提示\n if (BROWSER_UNSUPPORTED_EXTS.has(videoExt)) {\n setError({\n title: t('video.unsupported_title'),\n detail: t('video.unsupported_detail', { format: videoExt.toUpperCase() }),\n });\n setIsLoading(false);\n return;\n }\n\n // 确保 Video.js 播放器只初始化一次\n if (!playerRef.current && videoRef.current) {\n const videoElement = document.createElement('video-js');\n videoElement.classList.add('vjs-big-play-centered', 'vjs-theme-apple');\n videoRef.current.appendChild(videoElement);\n\n const videoType = getVideoType(url);\n\n // 为特定格式提供多个 MIME 类型作为备用\n let sources: Array<{ src: string; type: string }>;\n\n if (videoType === 'video/quicktime') {\n // MOV 格式 fallback\n sources = [\n { src: url, type: 'video/quicktime' },\n { src: url, type: 'video/mp4' }\n ];\n } else {\n sources = [{ src: url, type: videoType }];\n }\n\n const player = videojs(videoElement, {\n controls: true,\n fill: true,\n preload: 'auto',\n controlBar: {\n children: [\n 'playToggle',\n 'volumePanel',\n 'currentTimeDisplay',\n 'timeDivider',\n 'durationDisplay',\n 'progressControl',\n 'remainingTimeDisplay',\n 'fullscreenToggle'\n ],\n volumePanel: {\n inline: false\n }\n },\n html5: {\n vhs: {\n overrideNative: true\n },\n nativeVideoTracks: false,\n nativeAudioTracks: false,\n nativeTextTracks: false\n },\n sources\n });\n\n // 确保视频保持比例\n const videoEl = player.el().querySelector('video');\n if (videoEl) {\n (videoEl as HTMLVideoElement).style.objectFit = 'contain';\n }\n\n // 监听加载完成\n player.on('loadeddata', () => {\n setIsLoading(false);\n });\n\n player.on('error', () => {\n const err = player.error();\n // 视频加载错误是正常情况(格式不支持、编解码器缺失等),用 warn 级别记录\n console.warn('[VideoRenderer] Video playback error:', err?.message || 'Unknown error');\n\n // MEDIA_ERR_SRC_NOT_SUPPORTED(code=4):编码或容器层面浏览器解不了\n if (err?.code === 4) {\n setError({\n title: t('video.unsupported_title'),\n detail: t('video.unsupported_detail', {\n format: videoExt ? videoExt.toUpperCase() : t('common.unknown_error'),\n }),\n });\n } else {\n setError({\n title: t('video.load_failed'),\n detail: err?.message || t('common.unknown_error'),\n });\n }\n setIsLoading(false);\n });\n\n playerRef.current = player;\n }\n }, [url, fileName, t]);\n\n // 清理函数\n useEffect(() => {\n const player = playerRef.current;\n\n return () => {\n if (player && !player.isDisposed()) {\n player.dispose();\n playerRef.current = null;\n }\n };\n }, []);\n\n if (error) {\n return <RendererError message={error.title} detail={error.detail} />;\n }\n\n return (\n <div className=\"rfp-flex rfp-items-center rfp-justify-center rfp-w-full rfp-h-full\">\n <div className=\"rfp-w-full rfp-h-full rfp-relative\">\n {/* 加载状态 */}\n {isLoading && (\n <div className=\"rfp-absolute rfp-inset-0 rfp-flex rfp-items-center rfp-justify-center rfp-bg-surface-3 rfp-backdrop-blur-sm rfp-z-10\">\n <div className=\"rfp-text-center\">\n <div className=\"rfp-w-12 rfp-h-12 rfp-mx-auto rfp-mb-3 rfp-border-3 rfp-border-line-strong rfp-border-t-spinner-head rfp-rounded-full rfp-animate-spin\" />\n <p className=\"rfp-text-sm rfp-text-fg-secondary rfp-font-medium\">{t('video.loading')}</p>\n </div>\n </div>\n )}\n\n {/* 视频播放器容器 */}\n <div\n ref={videoRef}\n className=\"rfp-overflow-hidden rfp-w-full rfp-h-full [&_video]:rfp-object-contain\"\n style={{\n boxShadow: '0 20px 60px rgba(0, 0, 0, 0.4), 0 0 0 1px rgba(255, 255, 255, 0.05)'\n }}\n />\n </div>\n </div>\n );\n};\n"],"names":["BROWSER_UNSUPPORTED_EXTS","getVideoType","url","ext","_a","getVideoExt","fileName","VideoRenderer","t","useTranslator","error","setError","useState","isLoading","setIsLoading","videoRef","useRef","playerRef","useEffect","videoExt","videoElement","videoType","sources","player","videojs","videoEl","err","RendererError","jsxs","jsx"],"mappings":"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"}
|