@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,152 +0,0 @@
|
|
|
1
|
-
import { jsxs as b, jsx as i } from "react/jsx-runtime";
|
|
2
|
-
import { useState as M, useRef as u, useCallback as z, useEffect as L } from "react";
|
|
3
|
-
import { Presentation as B } from "lucide-react";
|
|
4
|
-
import { init as C } from "pptx-preview";
|
|
5
|
-
import { u as F, a as S } from "./index-CGNWXFy3.mjs";
|
|
6
|
-
const V = ({ url: y, tiled: a = !0 }) => {
|
|
7
|
-
const s = F(), _ = S(), [v, w] = M(!0), [N, T] = M(null), [E, P] = M(0), n = u(null), o = u(null), x = u(null), d = u(null), m = u(null), k = u({ width: 0, height: 0 }), c = z(() => {
|
|
8
|
-
var t;
|
|
9
|
-
if (!n.current) return { width: 960, height: 540 };
|
|
10
|
-
const e = n.current.clientWidth, r = ((t = n.current.parentElement) == null ? void 0 : t.clientWidth) || 0, p = e > 100 ? e : r > 100 ? r : 300, l = Math.floor(p * 9 / 16);
|
|
11
|
-
return { width: p, height: l };
|
|
12
|
-
}, []), W = z(async () => {
|
|
13
|
-
if (!(!n.current || !d.current || E === 0))
|
|
14
|
-
try {
|
|
15
|
-
if (o.current)
|
|
16
|
-
try {
|
|
17
|
-
o.current.destroy();
|
|
18
|
-
} catch {
|
|
19
|
-
}
|
|
20
|
-
n.current.innerHTML = "";
|
|
21
|
-
const e = c(), r = C(n.current, {
|
|
22
|
-
width: e.width,
|
|
23
|
-
height: a ? e.height * E : e.height,
|
|
24
|
-
mode: a ? "list" : "slide"
|
|
25
|
-
});
|
|
26
|
-
o.current = r, await r.preview(d.current);
|
|
27
|
-
} catch {
|
|
28
|
-
}
|
|
29
|
-
}, [c, a, E]);
|
|
30
|
-
return L(() => {
|
|
31
|
-
if (!n.current) return;
|
|
32
|
-
let e = !0;
|
|
33
|
-
const r = () => {
|
|
34
|
-
if (e) {
|
|
35
|
-
e = !1, k.current = c();
|
|
36
|
-
return;
|
|
37
|
-
}
|
|
38
|
-
const p = c(), l = k.current, t = Math.abs(l.width - p.width), f = Math.abs(l.height - p.height);
|
|
39
|
-
t < 10 && f < 10 || (k.current = p, m.current && clearTimeout(m.current), m.current = window.setTimeout(() => {
|
|
40
|
-
o.current && d.current && W();
|
|
41
|
-
}, 800));
|
|
42
|
-
};
|
|
43
|
-
return x.current = new ResizeObserver(() => {
|
|
44
|
-
r();
|
|
45
|
-
}), x.current.observe(n.current), () => {
|
|
46
|
-
x.current && x.current.disconnect(), m.current && clearTimeout(m.current);
|
|
47
|
-
};
|
|
48
|
-
}, [c, W]), L(() => {
|
|
49
|
-
let e = !0, r = null;
|
|
50
|
-
const p = async () => {
|
|
51
|
-
if (n.current) {
|
|
52
|
-
w(!0), T(null), r = setTimeout(() => {
|
|
53
|
-
e && (T(s("pptx.timeout")), w(!1));
|
|
54
|
-
}, 3e4);
|
|
55
|
-
try {
|
|
56
|
-
const t = await _(y, {
|
|
57
|
-
mode: "cors",
|
|
58
|
-
credentials: "omit",
|
|
59
|
-
redirect: "follow"
|
|
60
|
-
});
|
|
61
|
-
if (!t.ok)
|
|
62
|
-
throw t.status === 404 ? new Error(s("pptx.not_found")) : t.status === 403 ? new Error("无权限访问此文件") : t.status >= 500 ? new Error("服务器错误,请稍后重试") : new Error(`文件加载失败 (${t.status})`);
|
|
63
|
-
const f = await t.arrayBuffer();
|
|
64
|
-
if (f.byteLength === 0)
|
|
65
|
-
throw new Error("文件为空");
|
|
66
|
-
if (d.current = f, !e) return;
|
|
67
|
-
const h = document.createElement("div");
|
|
68
|
-
h.style.cssText = "position:absolute;left:-9999px;top:-9999px;visibility:hidden", document.body.appendChild(h);
|
|
69
|
-
try {
|
|
70
|
-
const R = C(h, {
|
|
71
|
-
width: 100,
|
|
72
|
-
height: 100,
|
|
73
|
-
mode: "slide"
|
|
74
|
-
});
|
|
75
|
-
try {
|
|
76
|
-
await R.preview(f);
|
|
77
|
-
} catch {
|
|
78
|
-
throw new Error(s("pptx.invalid_format"));
|
|
79
|
-
}
|
|
80
|
-
const g = R.slideCount;
|
|
81
|
-
if (!g || g === 0)
|
|
82
|
-
throw new Error(s("pptx.no_pages"));
|
|
83
|
-
if (R.destroy(), !e) return;
|
|
84
|
-
P(g), n.current && (n.current.innerHTML = "");
|
|
85
|
-
const D = c(), j = C(n.current, {
|
|
86
|
-
width: D.width,
|
|
87
|
-
height: a ? D.height * g : D.height,
|
|
88
|
-
mode: a ? "list" : "slide"
|
|
89
|
-
});
|
|
90
|
-
o.current = j, await j.preview(f), r && (clearTimeout(r), r = null), e && w(!1);
|
|
91
|
-
} finally {
|
|
92
|
-
document.body.contains(h) && document.body.removeChild(h);
|
|
93
|
-
}
|
|
94
|
-
} catch (t) {
|
|
95
|
-
if (r && (clearTimeout(r), r = null), e) {
|
|
96
|
-
let f = s("pptx.parse_failed");
|
|
97
|
-
t instanceof Error ? f = t.message : typeof t == "string" && (f = t), T(f), w(!1);
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
}, l = setTimeout(() => {
|
|
102
|
-
requestAnimationFrame(() => {
|
|
103
|
-
requestAnimationFrame(() => {
|
|
104
|
-
p();
|
|
105
|
-
});
|
|
106
|
-
});
|
|
107
|
-
}, 150);
|
|
108
|
-
return () => {
|
|
109
|
-
if (e = !1, clearTimeout(l), r && clearTimeout(r), d.current = null, P(0), o.current)
|
|
110
|
-
try {
|
|
111
|
-
o.current.destroy();
|
|
112
|
-
} catch {
|
|
113
|
-
}
|
|
114
|
-
o.current = null;
|
|
115
|
-
};
|
|
116
|
-
}, [y, c, a]), /* @__PURE__ */ b("div", { className: "rfp-relative rfp-flex rfp-flex-col rfp-items-center rfp-w-full rfp-h-full", children: [
|
|
117
|
-
v && /* @__PURE__ */ i("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__ */ b("div", { className: "rfp-text-center", children: [
|
|
118
|
-
/* @__PURE__ */ i("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" }),
|
|
119
|
-
/* @__PURE__ */ i("p", { className: "rfp-text-xs md:rfp-text-sm rfp-text-fg-secondary rfp-font-medium", children: s("pptx.loading") })
|
|
120
|
-
] }) }),
|
|
121
|
-
N && !v && /* @__PURE__ */ i("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__ */ b("div", { className: "rfp-text-center rfp-max-w-sm md:rfp-max-w-md rfp-px-4", children: [
|
|
122
|
-
/* @__PURE__ */ i("div", { className: "rfp-w-24 rfp-h-24 md:rfp-w-32 md:rfp-h-32 rfp-mx-auto rfp-mb-4 md:rfp-mb-6 rfp-rounded-2xl md:rfp-rounded-3xl rfp-bg-gradient-to-br rfp-from-orange-500 rfp-via-red-500 rfp-to-pink-500 rfp-flex rfp-items-center rfp-justify-center rfp-shadow-2xl", children: /* @__PURE__ */ i(B, { className: "rfp-w-12 rfp-h-12 md:rfp-w-16 md:rfp-h-16 rfp-text-fg-primary" }) }),
|
|
123
|
-
/* @__PURE__ */ i("p", { className: "rfp-text-lg md:rfp-text-xl rfp-text-fg-primary rfp-mb-2 md:rfp-mb-3 rfp-font-medium", children: s("pptx.load_failed") }),
|
|
124
|
-
/* @__PURE__ */ i("p", { className: "rfp-text-xs md:rfp-text-sm rfp-text-fg-tertiary rfp-mb-4 md:rfp-mb-6", children: N }),
|
|
125
|
-
/* @__PURE__ */ b(
|
|
126
|
-
"a",
|
|
127
|
-
{
|
|
128
|
-
href: y,
|
|
129
|
-
download: !0,
|
|
130
|
-
className: "rfp-inline-flex rfp-items-center rfp-gap-2 rfp-px-4 rfp-py-2 md:rfp-px-6 md:rfp-py-3 rfp-bg-gradient-to-r rfp-from-purple-500 rfp-to-pink-500 rfp-text-fg-primary rfp-text-sm md:rfp-text-base rfp-rounded-lg md:rfp-rounded-xl hover:rfp-scale-105 rfp-transition-all rfp-shadow-lg",
|
|
131
|
-
children: [
|
|
132
|
-
/* @__PURE__ */ i("svg", { className: "rfp-w-4 rfp-h-4 md:rfp-w-5 md:rfp-h-5", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ i("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-4l-4 4m0 0l-4-4m4 4V4" }) }),
|
|
133
|
-
s("common.download")
|
|
134
|
-
]
|
|
135
|
-
}
|
|
136
|
-
),
|
|
137
|
-
/* @__PURE__ */ i("p", { className: "rfp-text-xs rfp-text-fg-muted rfp-mt-3 md:rfp-mt-4", children: "提示:可以使用 Microsoft PowerPoint 或 WPS 打开" })
|
|
138
|
-
] }) }),
|
|
139
|
-
!N && /* @__PURE__ */ i(
|
|
140
|
-
"div",
|
|
141
|
-
{
|
|
142
|
-
ref: n,
|
|
143
|
-
className: "pptx-wrapper rfp-w-full rfp-max-w-full md:rfp-max-w-6xl",
|
|
144
|
-
style: { opacity: v ? 0 : 1 }
|
|
145
|
-
}
|
|
146
|
-
)
|
|
147
|
-
] });
|
|
148
|
-
};
|
|
149
|
-
export {
|
|
150
|
-
V as PptxRenderer
|
|
151
|
-
};
|
|
152
|
-
//# sourceMappingURL=index-QfO-sASN.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index-QfO-sASN.mjs","sources":["../../src/renderers/Pptx/index.tsx"],"sourcesContent":["import { useState, useEffect, useRef, useCallback } from 'react';\nimport { Presentation } from 'lucide-react';\nimport { init } from 'pptx-preview';\nimport { useTranslator } from '../../i18n/LocaleContext';\nimport { useFetcher } from '../../RequestContext';\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 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 <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 rfp-max-w-sm md:rfp-max-w-md rfp-px-4\">\n <div className=\"rfp-w-24 rfp-h-24 md:rfp-w-32 md:rfp-h-32 rfp-mx-auto rfp-mb-4 md:rfp-mb-6 rfp-rounded-2xl md:rfp-rounded-3xl rfp-bg-gradient-to-br rfp-from-orange-500 rfp-via-red-500 rfp-to-pink-500 rfp-flex rfp-items-center rfp-justify-center rfp-shadow-2xl\">\n <Presentation className=\"rfp-w-12 rfp-h-12 md:rfp-w-16 md:rfp-h-16 rfp-text-fg-primary\" />\n </div>\n <p className=\"rfp-text-lg md:rfp-text-xl rfp-text-fg-primary rfp-mb-2 md:rfp-mb-3 rfp-font-medium\">{t('pptx.load_failed')}</p>\n <p className=\"rfp-text-xs md:rfp-text-sm rfp-text-fg-tertiary rfp-mb-4 md:rfp-mb-6\">\n {error}\n </p>\n <a\n href={url}\n download\n className=\"rfp-inline-flex rfp-items-center rfp-gap-2 rfp-px-4 rfp-py-2 md:rfp-px-6 md:rfp-py-3 rfp-bg-gradient-to-r rfp-from-purple-500 rfp-to-pink-500 rfp-text-fg-primary rfp-text-sm md:rfp-text-base rfp-rounded-lg md:rfp-rounded-xl hover:rfp-scale-105 rfp-transition-all rfp-shadow-lg\"\n >\n <svg className=\"rfp-w-4 rfp-h-4 md:rfp-w-5 md:rfp-h-5\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-4l-4 4m0 0l-4-4m4 4V4\" />\n </svg>\n {t('common.download')}\n </a>\n <p className=\"rfp-text-xs rfp-text-fg-muted rfp-mt-3 md:rfp-mt-4\">\n 提示:可以使用 Microsoft PowerPoint 或 WPS 打开\n </p>\n </div>\n </div>\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","Presentation"],"mappings":"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"}
|
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
import { jsxs as y, jsx as s } from "react/jsx-runtime";
|
|
2
|
-
import { useState as R, useRef as i, useCallback as T, useEffect as M } from "react";
|
|
3
|
-
import { FileSpreadsheet as z } from "lucide-react";
|
|
4
|
-
import C from "x-data-spreadsheet";
|
|
5
|
-
/* empty css */
|
|
6
|
-
import { u as F, a as L, F as S, c as H, x as W, L as k } from "./index-CGNWXFy3.mjs";
|
|
7
|
-
const I = ({ url: D, fileName: d }) => {
|
|
8
|
-
const m = F(), j = L(), [h, x] = R(!0), [w, N] = R(null), r = i(null), b = i(null), c = i(null), l = i(null), a = i(null), g = i({ width: 0, height: 0 }), o = T(() => {
|
|
9
|
-
if (!r.current) return { width: 800, height: 600 };
|
|
10
|
-
const e = r.current.clientWidth, f = r.current.clientHeight, t = e > 100 ? e : 800, n = f > 100 ? f : 600;
|
|
11
|
-
return { width: t, height: n };
|
|
12
|
-
}, []), p = T(() => {
|
|
13
|
-
if (!r.current || !c.current) return;
|
|
14
|
-
r.current.innerHTML = "", b.current = null;
|
|
15
|
-
const { width: e, height: f } = o(), t = e < 640, n = new C(r.current, {
|
|
16
|
-
mode: "read",
|
|
17
|
-
showToolbar: !1,
|
|
18
|
-
showContextmenu: !1,
|
|
19
|
-
showGrid: !0,
|
|
20
|
-
row: {
|
|
21
|
-
len: 100,
|
|
22
|
-
height: 25
|
|
23
|
-
},
|
|
24
|
-
col: {
|
|
25
|
-
len: 26,
|
|
26
|
-
width: t ? 80 : 100,
|
|
27
|
-
indexWidth: t ? 40 : 60,
|
|
28
|
-
minWidth: t ? 40 : 60
|
|
29
|
-
},
|
|
30
|
-
view: {
|
|
31
|
-
height: () => f,
|
|
32
|
-
width: () => e
|
|
33
|
-
}
|
|
34
|
-
});
|
|
35
|
-
n.loadData(c.current), b.current = n;
|
|
36
|
-
}, [o]);
|
|
37
|
-
return M(() => {
|
|
38
|
-
if (!r.current) return;
|
|
39
|
-
let e = !0;
|
|
40
|
-
const f = () => {
|
|
41
|
-
if (e) {
|
|
42
|
-
e = !1, g.current = o();
|
|
43
|
-
return;
|
|
44
|
-
}
|
|
45
|
-
const t = o(), n = g.current, u = Math.abs(n.width - t.width), v = Math.abs(n.height - t.height);
|
|
46
|
-
u < 10 && v < 10 || (g.current = t, a.current && clearTimeout(a.current), a.current = window.setTimeout(() => {
|
|
47
|
-
c.current && p();
|
|
48
|
-
}, 500));
|
|
49
|
-
};
|
|
50
|
-
return l.current = new ResizeObserver(() => {
|
|
51
|
-
f();
|
|
52
|
-
}), l.current.observe(r.current), () => {
|
|
53
|
-
l.current && l.current.disconnect(), a.current && clearTimeout(a.current);
|
|
54
|
-
};
|
|
55
|
-
}, [o, p]), M(() => {
|
|
56
|
-
let e = !0;
|
|
57
|
-
const f = async () => {
|
|
58
|
-
if (r.current) {
|
|
59
|
-
x(!0), N(null);
|
|
60
|
-
try {
|
|
61
|
-
const n = await S(D, { fetcher: j }), u = H(n, { delimiter: W(d) }), v = k(u.header, u.rows, d);
|
|
62
|
-
if (!e) return;
|
|
63
|
-
c.current = v, p(), x(!1);
|
|
64
|
-
} catch (n) {
|
|
65
|
-
e && (console.error("CSV 解析错误:", n), N(m("csv.load_failed")), x(!1));
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
}, t = setTimeout(() => {
|
|
69
|
-
requestAnimationFrame(() => {
|
|
70
|
-
f();
|
|
71
|
-
});
|
|
72
|
-
}, 100);
|
|
73
|
-
return () => {
|
|
74
|
-
e = !1, clearTimeout(t), c.current = null, r.current && (r.current.innerHTML = ""), b.current = null;
|
|
75
|
-
};
|
|
76
|
-
}, [D, d, p]), /* @__PURE__ */ y("div", { className: "rfp-relative rfp-flex rfp-flex-col rfp-items-center rfp-w-full rfp-h-full", children: [
|
|
77
|
-
h && /* @__PURE__ */ s("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__ */ y("div", { className: "rfp-text-center", children: [
|
|
78
|
-
/* @__PURE__ */ s("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" }),
|
|
79
|
-
/* @__PURE__ */ s("p", { className: "rfp-text-xs md:rfp-text-sm rfp-text-fg-secondary rfp-font-medium", children: m("csv.loading") })
|
|
80
|
-
] }) }),
|
|
81
|
-
w && !h && /* @__PURE__ */ s("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__ */ y("div", { className: "rfp-text-center rfp-max-w-sm md:rfp-max-w-md rfp-px-4", children: [
|
|
82
|
-
/* @__PURE__ */ s("div", { className: "rfp-w-24 rfp-h-24 md:rfp-w-32 md:rfp-h-32 rfp-mx-auto rfp-mb-4 md:rfp-mb-6 rfp-rounded-2xl md:rfp-rounded-3xl rfp-bg-gradient-to-br rfp-from-green-500 rfp-via-emerald-500 rfp-to-teal-500 rfp-flex rfp-items-center rfp-justify-center rfp-shadow-2xl", children: /* @__PURE__ */ s(z, { className: "rfp-w-12 rfp-h-12 md:rfp-w-16 md:rfp-h-16 rfp-text-fg-primary" }) }),
|
|
83
|
-
/* @__PURE__ */ s("p", { className: "rfp-text-lg md:rfp-text-xl rfp-text-fg-primary rfp-mb-2 md:rfp-mb-3 rfp-font-medium", children: m("csv.load_failed") }),
|
|
84
|
-
/* @__PURE__ */ s("p", { className: "rfp-text-xs md:rfp-text-sm rfp-text-fg-tertiary rfp-mb-4 md:rfp-mb-6", children: w })
|
|
85
|
-
] }) }),
|
|
86
|
-
!w && /* @__PURE__ */ s(
|
|
87
|
-
"div",
|
|
88
|
-
{
|
|
89
|
-
ref: r,
|
|
90
|
-
className: "xlsx-spreadsheet-container rfp-w-full rfp-h-full",
|
|
91
|
-
style: { opacity: h ? 0 : 1 }
|
|
92
|
-
}
|
|
93
|
-
)
|
|
94
|
-
] });
|
|
95
|
-
};
|
|
96
|
-
export {
|
|
97
|
-
I as CsvRenderer
|
|
98
|
-
};
|
|
99
|
-
//# sourceMappingURL=index-h9bO9wmq.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index-h9bO9wmq.mjs","sources":["../../src/renderers/Csv/index.tsx"],"sourcesContent":["import { useState, useEffect, useRef, useCallback } from 'react';\nimport { FileSpreadsheet } from 'lucide-react';\nimport Spreadsheet from 'x-data-spreadsheet';\nimport 'x-data-spreadsheet/dist/xspreadsheet.css';\nimport {\n parseCsv,\n guessCsvDelimiter,\n fetchTextUtf8,\n convertCsvToSpreadsheetData,\n} from '@eternalheart/file-preview-core';\nimport { useTranslator } from '../../i18n/LocaleContext';\nimport { useFetcher } from '../../RequestContext';\n\ninterface CsvRendererProps {\n url: string;\n fileName: string;\n}\n\nexport const CsvRenderer: React.FC<CsvRendererProps> = ({ url, fileName }) => {\n const t = useTranslator();\n const fetcher = useFetcher();\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n const containerRef = useRef<HTMLDivElement>(null);\n const spreadsheetRef = useRef<Spreadsheet | null>(null);\n const sheetDataRef = useRef<Record<string, unknown>[] | null>(null);\n const resizeObserverRef = useRef<ResizeObserver | null>(null);\n const resizeTimeoutRef = useRef<number | null>(null);\n const lastDimensionsRef = useRef({ width: 0, height: 0 });\n\n const calculateDimensions = useCallback(() => {\n if (!containerRef.current) return { width: 800, height: 600 };\n const rawWidth = containerRef.current.clientWidth;\n const rawHeight = containerRef.current.clientHeight;\n const width = rawWidth > 100 ? rawWidth : 800;\n const height = rawHeight > 100 ? rawHeight : 600;\n return { width, height };\n }, []);\n\n const mountSpreadsheet = useCallback(() => {\n if (!containerRef.current || !sheetDataRef.current) return;\n\n containerRef.current.innerHTML = '';\n spreadsheetRef.current = null;\n\n const { width, height } = calculateDimensions();\n const isMobile = width < 640;\n\n const s = new Spreadsheet(containerRef.current, {\n mode: 'read',\n showToolbar: false,\n showContextmenu: false,\n showGrid: true,\n row: {\n len: 100,\n height: 25,\n },\n col: {\n len: 26,\n width: isMobile ? 80 : 100,\n indexWidth: isMobile ? 40 : 60,\n minWidth: isMobile ? 40 : 60,\n },\n view: {\n height: () => height,\n width: () => width,\n },\n });\n\n s.loadData(sheetDataRef.current as unknown as Record<string, unknown>);\n spreadsheetRef.current = s;\n }, [calculateDimensions]);\n\n useEffect(() => {\n if (!containerRef.current) return;\n\n let isInitialRender = true;\n\n const updateDimensions = () => {\n if (isInitialRender) {\n isInitialRender = false;\n lastDimensionsRef.current = calculateDimensions();\n return;\n }\n\n const newDimensions = calculateDimensions();\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) return;\n\n lastDimensionsRef.current = newDimensions;\n\n if (resizeTimeoutRef.current) {\n clearTimeout(resizeTimeoutRef.current);\n }\n\n resizeTimeoutRef.current = window.setTimeout(() => {\n if (sheetDataRef.current) {\n mountSpreadsheet();\n }\n }, 500);\n };\n\n resizeObserverRef.current = new ResizeObserver(() => {\n updateDimensions();\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, mountSpreadsheet]);\n\n useEffect(() => {\n let isMounted = true;\n\n const loadCsv = async () => {\n if (!containerRef.current) return;\n\n setLoading(true);\n setError(null);\n\n try {\n const text = await fetchTextUtf8(url, { fetcher });\n const parsed = parseCsv(text, { delimiter: guessCsvDelimiter(fileName) });\n const sheetData = convertCsvToSpreadsheetData(parsed.header, parsed.rows, fileName);\n\n if (!isMounted) return;\n\n sheetDataRef.current = sheetData as unknown as Record<string, unknown>[];\n mountSpreadsheet();\n setLoading(false);\n } catch (err) {\n if (isMounted) {\n console.error('CSV 解析错误:', err);\n setError(t('csv.load_failed'));\n setLoading(false);\n }\n }\n };\n\n const timer = setTimeout(() => {\n requestAnimationFrame(() => {\n loadCsv();\n });\n }, 100);\n\n return () => {\n isMounted = false;\n clearTimeout(timer);\n sheetDataRef.current = null;\n if (containerRef.current) {\n containerRef.current.innerHTML = '';\n }\n spreadsheetRef.current = null;\n };\n }, [url, fileName, mountSpreadsheet]);\n\n return (\n <div className=\"rfp-relative rfp-flex rfp-flex-col rfp-items-center rfp-w-full rfp-h-full\">\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('csv.loading')}</p>\n </div>\n </div>\n )}\n\n {error && !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 rfp-max-w-sm md:rfp-max-w-md rfp-px-4\">\n <div className=\"rfp-w-24 rfp-h-24 md:rfp-w-32 md:rfp-h-32 rfp-mx-auto rfp-mb-4 md:rfp-mb-6 rfp-rounded-2xl md:rfp-rounded-3xl rfp-bg-gradient-to-br rfp-from-green-500 rfp-via-emerald-500 rfp-to-teal-500 rfp-flex rfp-items-center rfp-justify-center rfp-shadow-2xl\">\n <FileSpreadsheet className=\"rfp-w-12 rfp-h-12 md:rfp-w-16 md:rfp-h-16 rfp-text-fg-primary\" />\n </div>\n <p className=\"rfp-text-lg md:rfp-text-xl rfp-text-fg-primary rfp-mb-2 md:rfp-mb-3 rfp-font-medium\">{t('csv.load_failed')}</p>\n <p className=\"rfp-text-xs md:rfp-text-sm rfp-text-fg-tertiary rfp-mb-4 md:rfp-mb-6\">{error}</p>\n </div>\n </div>\n )}\n\n {!error && (\n <div\n ref={containerRef}\n className=\"xlsx-spreadsheet-container rfp-w-full rfp-h-full\"\n style={{ opacity: loading ? 0 : 1 }}\n />\n )}\n </div>\n );\n};\n"],"names":["CsvRenderer","url","fileName","t","useTranslator","fetcher","useFetcher","loading","setLoading","useState","error","setError","containerRef","useRef","spreadsheetRef","sheetDataRef","resizeObserverRef","resizeTimeoutRef","lastDimensionsRef","calculateDimensions","useCallback","rawWidth","rawHeight","width","height","mountSpreadsheet","isMobile","s","Spreadsheet","useEffect","isInitialRender","updateDimensions","newDimensions","lastDimensions","widthDiff","heightDiff","isMounted","loadCsv","text","fetchTextUtf8","parsed","parseCsv","guessCsvDelimiter","sheetData","convertCsvToSpreadsheetData","err","timer","jsxs","jsx","FileSpreadsheet"],"mappings":"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"}
|
|
@@ -1,228 +0,0 @@
|
|
|
1
|
-
import { jsx as e, jsxs as t } from "react/jsx-runtime";
|
|
2
|
-
import { useState as N, useRef as A, useEffect as B, useCallback as $ } from "react";
|
|
3
|
-
import { parse as I } from "opentype.js";
|
|
4
|
-
import { u as U, a as G, b as J } from "./index-CGNWXFy3.mjs";
|
|
5
|
-
const S = {
|
|
6
|
-
latin: `ABCDEFGHIJKLMNOPQRSTUVWXYZ
|
|
7
|
-
abcdefghijklmnopqrstuvwxyz
|
|
8
|
-
0123456789 .,;:!?@#$%&*()[]{}`,
|
|
9
|
-
chinese: "春夏秋冬东南西北天地人和风雨雷电山水日月",
|
|
10
|
-
mixed: `The Quick Brown Fox Jumps Over The Lazy Dog
|
|
11
|
-
敏捷的棕色狐狸跳过了懒狗`
|
|
12
|
-
}, Q = [72, 48, 36, 24, 18], X = ({ url: m }) => {
|
|
13
|
-
const n = U(), p = G(), l = J(), [d, w] = N(null), [f, b] = N(null), [h, s] = N(!0), [F, u] = N(null), [k, M] = N(""), [T, g] = N("fontface"), c = A(null);
|
|
14
|
-
B(() => {
|
|
15
|
-
let r = !0;
|
|
16
|
-
return (async () => {
|
|
17
|
-
var a, o, R, P, H, _, j;
|
|
18
|
-
try {
|
|
19
|
-
s(!0), u(null);
|
|
20
|
-
const v = await p(m);
|
|
21
|
-
if (!v.ok)
|
|
22
|
-
throw new Error("Failed to load font file");
|
|
23
|
-
const C = await v.arrayBuffer();
|
|
24
|
-
if (!r) return;
|
|
25
|
-
const z = C.slice(0), O = I(C);
|
|
26
|
-
if (!O)
|
|
27
|
-
throw new Error("Font data is invalid");
|
|
28
|
-
const x = O.names || {}, D = {
|
|
29
|
-
family: ((a = x.fontFamily) == null ? void 0 : a.en) || ((o = x.fontFamily) == null ? void 0 : o["zh-Hans"]) || ((R = x.postScriptName) == null ? void 0 : R.en) || "Unknown",
|
|
30
|
-
subfamily: ((P = x.fontSubfamily) == null ? void 0 : P.en) || ((H = x.fontSubfamily) == null ? void 0 : H["zh-Hans"]) || "",
|
|
31
|
-
version: ((_ = x.version) == null ? void 0 : _.en) || "",
|
|
32
|
-
designer: ((j = x.designer) == null ? void 0 : j.en) || "",
|
|
33
|
-
glyphCount: O.numGlyphs || 0,
|
|
34
|
-
format: E(m)
|
|
35
|
-
};
|
|
36
|
-
if (!r) return;
|
|
37
|
-
w(O), b(D);
|
|
38
|
-
try {
|
|
39
|
-
const L = new FontFace("PreviewFont", z);
|
|
40
|
-
if (await L.load(), !r) return;
|
|
41
|
-
document.fonts.add(L), c.current = L, g("fontface");
|
|
42
|
-
} catch (L) {
|
|
43
|
-
if (console.warn("[FontRenderer] FontFace API rejected, fallback to Canvas:", L), !r) return;
|
|
44
|
-
g("canvas");
|
|
45
|
-
}
|
|
46
|
-
r && s(!1);
|
|
47
|
-
} catch (v) {
|
|
48
|
-
if (!r) return;
|
|
49
|
-
console.error("[FontRenderer] Error:", v);
|
|
50
|
-
let C = n("font.load_failed");
|
|
51
|
-
v instanceof Error && (C = v.message), u(C), s(!1);
|
|
52
|
-
}
|
|
53
|
-
})(), () => {
|
|
54
|
-
r = !1, c.current && (document.fonts.delete(c.current), c.current = null);
|
|
55
|
-
};
|
|
56
|
-
}, [m, p, n]);
|
|
57
|
-
const E = (r) => {
|
|
58
|
-
var o;
|
|
59
|
-
const i = ((o = r.split(".").pop()) == null ? void 0 : o.toLowerCase().split("?")[0]) || "";
|
|
60
|
-
return {
|
|
61
|
-
ttf: "TrueType (TTF)",
|
|
62
|
-
otf: "OpenType (OTF)",
|
|
63
|
-
woff: "Web Open Font Format (WOFF)",
|
|
64
|
-
woff2: "Web Open Font Format 2 (WOFF2)"
|
|
65
|
-
}[i] || "TTF";
|
|
66
|
-
};
|
|
67
|
-
if (h)
|
|
68
|
-
return /* @__PURE__ */ e("div", { className: "rfp-flex rfp-items-center rfp-justify-center rfp-w-full rfp-h-full", children: /* @__PURE__ */ e("div", { className: "rfp-text-fg-secondary", children: n("font.loading") }) });
|
|
69
|
-
if (F || !d || !f)
|
|
70
|
-
return /* @__PURE__ */ e("div", { className: "rfp-flex rfp-items-center rfp-justify-center rfp-w-full rfp-h-full", children: /* @__PURE__ */ e("div", { className: "rfp-text-fg-secondary", children: F || n("font.parse_failed") }) });
|
|
71
|
-
const y = k || S.mixed;
|
|
72
|
-
return /* @__PURE__ */ t("div", { className: "rfp-flex rfp-flex-col rfp-w-full rfp-h-full rfp-overflow-hidden rfp-min-w-0", children: [
|
|
73
|
-
/* @__PURE__ */ e("div", { className: "rfp-flex-shrink-0 rfp-px-6 rfp-py-4 rfp-bg-surface-1 rfp-border-b rfp-border-line-weak rfp-min-w-0", children: /* @__PURE__ */ t("div", { className: "rfp-grid rfp-grid-cols-2 rfp-gap-x-6 rfp-gap-y-2 rfp-text-sm rfp-min-w-0", children: [
|
|
74
|
-
/* @__PURE__ */ t("div", { className: "rfp-flex rfp-items-center rfp-gap-2 rfp-min-w-0", children: [
|
|
75
|
-
/* @__PURE__ */ t("span", { className: "rfp-text-fg-tertiary rfp-flex-shrink-0", children: [
|
|
76
|
-
n("font.meta.family"),
|
|
77
|
-
":"
|
|
78
|
-
] }),
|
|
79
|
-
/* @__PURE__ */ e("span", { className: "rfp-text-fg-primary rfp-font-semibold rfp-truncate", children: f.family })
|
|
80
|
-
] }),
|
|
81
|
-
f.subfamily && /* @__PURE__ */ t("div", { className: "rfp-flex rfp-items-center rfp-gap-2 rfp-min-w-0", children: [
|
|
82
|
-
/* @__PURE__ */ t("span", { className: "rfp-text-fg-tertiary rfp-flex-shrink-0", children: [
|
|
83
|
-
n("font.meta.subfamily"),
|
|
84
|
-
":"
|
|
85
|
-
] }),
|
|
86
|
-
/* @__PURE__ */ e("span", { className: "rfp-text-fg-primary rfp-truncate", children: f.subfamily })
|
|
87
|
-
] }),
|
|
88
|
-
/* @__PURE__ */ t("div", { className: "rfp-flex rfp-items-center rfp-gap-2 rfp-min-w-0", children: [
|
|
89
|
-
/* @__PURE__ */ t("span", { className: "rfp-text-fg-tertiary rfp-flex-shrink-0", children: [
|
|
90
|
-
n("font.meta.format"),
|
|
91
|
-
":"
|
|
92
|
-
] }),
|
|
93
|
-
/* @__PURE__ */ e("span", { className: "rfp-text-fg-primary rfp-truncate", children: f.format })
|
|
94
|
-
] }),
|
|
95
|
-
/* @__PURE__ */ t("div", { className: "rfp-flex rfp-items-center rfp-gap-2 rfp-min-w-0", children: [
|
|
96
|
-
/* @__PURE__ */ t("span", { className: "rfp-text-fg-tertiary rfp-flex-shrink-0", children: [
|
|
97
|
-
n("font.meta.glyphs"),
|
|
98
|
-
":"
|
|
99
|
-
] }),
|
|
100
|
-
/* @__PURE__ */ e("span", { className: "rfp-text-fg-primary rfp-truncate", children: f.glyphCount })
|
|
101
|
-
] }),
|
|
102
|
-
f.designer && /* @__PURE__ */ t("div", { className: "rfp-flex rfp-items-center rfp-gap-2 rfp-min-w-0", children: [
|
|
103
|
-
/* @__PURE__ */ t("span", { className: "rfp-text-fg-tertiary rfp-flex-shrink-0", children: [
|
|
104
|
-
n("font.meta.designer"),
|
|
105
|
-
":"
|
|
106
|
-
] }),
|
|
107
|
-
/* @__PURE__ */ e("span", { className: "rfp-text-fg-primary rfp-truncate", children: f.designer })
|
|
108
|
-
] }),
|
|
109
|
-
f.version && /* @__PURE__ */ t("div", { className: "rfp-flex rfp-items-center rfp-gap-2 rfp-min-w-0", children: [
|
|
110
|
-
/* @__PURE__ */ t("span", { className: "rfp-text-fg-tertiary rfp-flex-shrink-0", children: [
|
|
111
|
-
n("font.meta.version"),
|
|
112
|
-
":"
|
|
113
|
-
] }),
|
|
114
|
-
/* @__PURE__ */ e("span", { className: "rfp-text-fg-primary rfp-truncate", children: f.version })
|
|
115
|
-
] })
|
|
116
|
-
] }) }),
|
|
117
|
-
/* @__PURE__ */ e("div", { className: "rfp-flex-1 rfp-overflow-auto rfp-min-w-0", children: /* @__PURE__ */ t("div", { className: "rfp-px-6 rfp-py-6 rfp-space-y-8 rfp-min-w-0", children: [
|
|
118
|
-
/* @__PURE__ */ t("div", { className: "rfp-min-w-0", children: [
|
|
119
|
-
/* @__PURE__ */ e("label", { className: "rfp-block rfp-text-xs rfp-text-fg-tertiary rfp-mb-2", children: n("font.sample_text_placeholder") }),
|
|
120
|
-
/* @__PURE__ */ e(
|
|
121
|
-
"textarea",
|
|
122
|
-
{
|
|
123
|
-
className: "rfp-block rfp-w-full rfp-box-border rfp-px-3 rfp-py-2.5 rfp-bg-surface-2 rfp-text-fg-primary rfp-text-sm rfp-leading-relaxed rfp-border rfp-border-line rfp-rounded-md rfp-resize-y focus:rfp-outline-none focus:rfp-border-line-strong",
|
|
124
|
-
rows: 2,
|
|
125
|
-
placeholder: n("font.sample_text_placeholder"),
|
|
126
|
-
value: k,
|
|
127
|
-
onChange: (r) => M(r.target.value),
|
|
128
|
-
style: { minHeight: "64px", maxHeight: "160px" }
|
|
129
|
-
}
|
|
130
|
-
)
|
|
131
|
-
] }),
|
|
132
|
-
/* @__PURE__ */ e("div", { className: "rfp-space-y-6 rfp-min-w-0", children: Q.map((r) => /* @__PURE__ */ t("div", { className: "rfp-space-y-2 rfp-min-w-0", children: [
|
|
133
|
-
/* @__PURE__ */ t("div", { className: "rfp-text-xs rfp-text-fg-tertiary", children: [
|
|
134
|
-
r,
|
|
135
|
-
"px"
|
|
136
|
-
] }),
|
|
137
|
-
/* @__PURE__ */ e(
|
|
138
|
-
W,
|
|
139
|
-
{
|
|
140
|
-
font: d,
|
|
141
|
-
text: y,
|
|
142
|
-
fontSize: r,
|
|
143
|
-
renderMode: T,
|
|
144
|
-
theme: l
|
|
145
|
-
}
|
|
146
|
-
)
|
|
147
|
-
] }, r)) }),
|
|
148
|
-
/* @__PURE__ */ t("div", { className: "rfp-space-y-6 rfp-pt-6 rfp-border-t rfp-border-line-weak rfp-min-w-0", children: [
|
|
149
|
-
/* @__PURE__ */ t("div", { className: "rfp-min-w-0", children: [
|
|
150
|
-
/* @__PURE__ */ e("div", { className: "rfp-text-sm rfp-text-fg-tertiary rfp-mb-3", children: "Latin Alphabet" }),
|
|
151
|
-
/* @__PURE__ */ e(
|
|
152
|
-
W,
|
|
153
|
-
{
|
|
154
|
-
font: d,
|
|
155
|
-
text: S.latin,
|
|
156
|
-
fontSize: 24,
|
|
157
|
-
renderMode: T,
|
|
158
|
-
theme: l
|
|
159
|
-
}
|
|
160
|
-
)
|
|
161
|
-
] }),
|
|
162
|
-
/* @__PURE__ */ t("div", { className: "rfp-min-w-0", children: [
|
|
163
|
-
/* @__PURE__ */ e("div", { className: "rfp-text-sm rfp-text-fg-tertiary rfp-mb-3", children: "Chinese Characters" }),
|
|
164
|
-
/* @__PURE__ */ e(
|
|
165
|
-
W,
|
|
166
|
-
{
|
|
167
|
-
font: d,
|
|
168
|
-
text: S.chinese,
|
|
169
|
-
fontSize: 24,
|
|
170
|
-
renderMode: T,
|
|
171
|
-
theme: l
|
|
172
|
-
}
|
|
173
|
-
)
|
|
174
|
-
] })
|
|
175
|
-
] })
|
|
176
|
-
] }) })
|
|
177
|
-
] });
|
|
178
|
-
}, W = ({ font: m, text: n, fontSize: p, renderMode: l, theme: d }) => {
|
|
179
|
-
const w = A(null), f = A(null), b = $(() => {
|
|
180
|
-
const h = w.current, s = f.current;
|
|
181
|
-
if (!h || !s || l !== "canvas") return;
|
|
182
|
-
const F = h.clientWidth || 600, u = window.devicePixelRatio || 1, k = p * 1.4, M = d === "light" ? "#1f2937" : "#f3f4f6", T = (r) => {
|
|
183
|
-
if (!r) return [""];
|
|
184
|
-
const i = [];
|
|
185
|
-
let a = "";
|
|
186
|
-
for (const o of Array.from(r)) {
|
|
187
|
-
const R = a + o;
|
|
188
|
-
m.getAdvanceWidth(R, p) > F && a ? (i.push(a), a = o) : a = R;
|
|
189
|
-
}
|
|
190
|
-
return a && i.push(a), i;
|
|
191
|
-
}, g = [];
|
|
192
|
-
n.split(`
|
|
193
|
-
`).forEach((r) => {
|
|
194
|
-
T(r).forEach((i) => g.push(i));
|
|
195
|
-
});
|
|
196
|
-
const c = F, E = k * g.length + 4;
|
|
197
|
-
s.width = Math.max(1, Math.floor(c * u)), s.height = Math.max(1, Math.floor(E * u)), s.style.width = `${c}px`, s.style.height = `${E}px`;
|
|
198
|
-
const y = s.getContext("2d");
|
|
199
|
-
y && (y.setTransform(u, 0, 0, u, 0, 0), y.clearRect(0, 0, c, E), g.forEach((r, i) => {
|
|
200
|
-
const a = m.getPath(r, 0, p + i * k, p);
|
|
201
|
-
a.fill = M, a.draw(y);
|
|
202
|
-
}));
|
|
203
|
-
}, [m, n, p, l, d]);
|
|
204
|
-
return B(() => {
|
|
205
|
-
if (l !== "canvas") return;
|
|
206
|
-
b();
|
|
207
|
-
const h = w.current;
|
|
208
|
-
if (!h || typeof ResizeObserver > "u") return;
|
|
209
|
-
const s = new ResizeObserver(() => b());
|
|
210
|
-
return s.observe(h), () => s.disconnect();
|
|
211
|
-
}, [b, l]), l === "canvas" ? /* @__PURE__ */ e("div", { ref: w, className: "rfp-w-full", children: /* @__PURE__ */ e("canvas", { ref: f, className: "rfp-block" }) }) : /* @__PURE__ */ e(
|
|
212
|
-
"div",
|
|
213
|
-
{
|
|
214
|
-
ref: w,
|
|
215
|
-
className: "rfp-w-full rfp-text-fg-primary rfp-whitespace-pre-wrap rfp-break-words",
|
|
216
|
-
style: {
|
|
217
|
-
fontFamily: "PreviewFont, sans-serif",
|
|
218
|
-
fontSize: `${p}px`,
|
|
219
|
-
lineHeight: 1.4
|
|
220
|
-
},
|
|
221
|
-
children: n
|
|
222
|
-
}
|
|
223
|
-
);
|
|
224
|
-
};
|
|
225
|
-
export {
|
|
226
|
-
X as FontRenderer
|
|
227
|
-
};
|
|
228
|
-
//# sourceMappingURL=index-mvSVNKlQ.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index-mvSVNKlQ.mjs","sources":["../../src/renderers/Font/index.tsx"],"sourcesContent":["import React, { useState, useEffect, useRef, useCallback } from 'react';\nimport { parse } from 'opentype.js';\nimport type { Font as OpentypeFont } from 'opentype.js';\nimport { useTranslator } from '../../i18n/LocaleContext';\nimport { useFetcher } from '../../RequestContext';\nimport { useResolvedTheme } from '../../ThemeContext';\n\nexport interface FontRendererProps {\n url: string;\n}\n\ninterface FontMetadata {\n family: string;\n subfamily: string;\n version: string;\n designer: string;\n glyphCount: number;\n format: string;\n}\n\nconst DEFAULT_SAMPLES = {\n latin: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ\\nabcdefghijklmnopqrstuvwxyz\\n0123456789 .,;:!?@#$%&*()[]{}',\n chinese: '春夏秋冬东南西北天地人和风雨雷电山水日月',\n mixed: 'The Quick Brown Fox Jumps Over The Lazy Dog\\n敏捷的棕色狐狸跳过了懒狗',\n};\n\nconst SIZES = [72, 48, 36, 24, 18];\n\n// 渲染模式:FontFace 用原生字体渲染,Canvas 用 opentype.js 软渲染(兼容浏览器拒绝的字体)\ntype RenderMode = 'fontface' | 'canvas';\n\nexport const FontRenderer: React.FC<FontRendererProps> = ({ url }) => {\n const t = useTranslator();\n const fetcher = useFetcher();\n const resolvedTheme = useResolvedTheme();\n const [font, setFont] = useState<OpentypeFont | null>(null);\n const [metadata, setMetadata] = useState<FontMetadata | null>(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n const [customText, setCustomText] = useState('');\n const [renderMode, setRenderMode] = useState<RenderMode>('fontface');\n const fontFaceRef = useRef<FontFace | null>(null);\n\n useEffect(() => {\n let mounted = true;\n\n const loadFont = async () => {\n try {\n setLoading(true);\n setError(null);\n\n // 使用 fetcher 替代原生 fetch(支持鉴权)\n const response = await fetcher(url);\n if (!response.ok) {\n throw new Error('Failed to load font file');\n }\n const arrayBuffer = await response.arrayBuffer();\n\n if (!mounted) return;\n\n // 为 FontFace 克隆一份 ArrayBuffer,避免 opentype.js 的 parse 影响其状态\n const faceBuffer = arrayBuffer.slice(0);\n\n // 解析字体文件(opentype.js 容忍度高于浏览器 OTS)\n // parse 返回值与官方 Font 类型存在不一致(opentype.js 类型定义瑕疵),用 unknown 二次转换\n const fontData = parse(arrayBuffer) as unknown as OpentypeFont;\n\n if (!fontData) {\n throw new Error('Font data is invalid');\n }\n\n // 提取元数据\n const names = fontData.names || {};\n const meta: FontMetadata = {\n family: names.fontFamily?.en || names.fontFamily?.['zh-Hans'] || names.postScriptName?.en || 'Unknown',\n subfamily: names.fontSubfamily?.en || names.fontSubfamily?.['zh-Hans'] || '',\n version: names.version?.en || '',\n designer: names.designer?.en || '',\n glyphCount: fontData.numGlyphs || 0,\n format: detectFormat(url),\n };\n\n if (!mounted) return;\n setFont(fontData);\n setMetadata(meta);\n\n // 尝试用 FontFace API 加载字体(浏览器原生渲染,性能好)\n // 失败时降级到 Canvas 软渲染(opentype.js 容忍度更高)\n try {\n const face = new FontFace('PreviewFont', faceBuffer);\n await face.load();\n if (!mounted) return;\n document.fonts.add(face);\n fontFaceRef.current = face;\n setRenderMode('fontface');\n } catch (faceErr) {\n // 浏览器拒绝该字体(通常是 OTS sanitizer 校验失败),降级到 Canvas 渲染\n console.warn('[FontRenderer] FontFace API rejected, fallback to Canvas:', faceErr);\n if (!mounted) return;\n setRenderMode('canvas');\n }\n\n if (mounted) setLoading(false);\n } catch (err) {\n if (!mounted) return;\n console.error('[FontRenderer] Error:', err);\n let errorMsg = t('font.load_failed');\n if (err instanceof Error) {\n errorMsg = err.message;\n }\n setError(errorMsg);\n setLoading(false);\n }\n };\n\n loadFont();\n\n return () => {\n mounted = false;\n if (fontFaceRef.current) {\n document.fonts.delete(fontFaceRef.current);\n fontFaceRef.current = null;\n }\n };\n }, [url, fetcher, t]);\n\n const detectFormat = (url: string): string => {\n const ext = url.split('.').pop()?.toLowerCase().split('?')[0] || '';\n const formatMap: Record<string, string> = {\n ttf: 'TrueType (TTF)',\n otf: 'OpenType (OTF)',\n woff: 'Web Open Font Format (WOFF)',\n woff2: 'Web Open Font Format 2 (WOFF2)',\n };\n return formatMap[ext] || 'TTF';\n };\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-text-fg-secondary\">{t('font.loading')}</div>\n </div>\n );\n }\n\n if (error || !font || !metadata) {\n return (\n <div className=\"rfp-flex rfp-items-center rfp-justify-center rfp-w-full rfp-h-full\">\n <div className=\"rfp-text-fg-secondary\">{error || t('font.parse_failed')}</div>\n </div>\n );\n }\n\n const displayText = customText || DEFAULT_SAMPLES.mixed;\n\n return (\n <div className=\"rfp-flex rfp-flex-col rfp-w-full rfp-h-full rfp-overflow-hidden rfp-min-w-0\">\n {/* 元数据区 */}\n <div className=\"rfp-flex-shrink-0 rfp-px-6 rfp-py-4 rfp-bg-surface-1 rfp-border-b rfp-border-line-weak rfp-min-w-0\">\n <div className=\"rfp-grid rfp-grid-cols-2 rfp-gap-x-6 rfp-gap-y-2 rfp-text-sm rfp-min-w-0\">\n <div className=\"rfp-flex rfp-items-center rfp-gap-2 rfp-min-w-0\">\n <span className=\"rfp-text-fg-tertiary rfp-flex-shrink-0\">{t('font.meta.family')}:</span>\n <span className=\"rfp-text-fg-primary rfp-font-semibold rfp-truncate\">{metadata.family}</span>\n </div>\n {metadata.subfamily && (\n <div className=\"rfp-flex rfp-items-center rfp-gap-2 rfp-min-w-0\">\n <span className=\"rfp-text-fg-tertiary rfp-flex-shrink-0\">{t('font.meta.subfamily')}:</span>\n <span className=\"rfp-text-fg-primary rfp-truncate\">{metadata.subfamily}</span>\n </div>\n )}\n <div className=\"rfp-flex rfp-items-center rfp-gap-2 rfp-min-w-0\">\n <span className=\"rfp-text-fg-tertiary rfp-flex-shrink-0\">{t('font.meta.format')}:</span>\n <span className=\"rfp-text-fg-primary rfp-truncate\">{metadata.format}</span>\n </div>\n <div className=\"rfp-flex rfp-items-center rfp-gap-2 rfp-min-w-0\">\n <span className=\"rfp-text-fg-tertiary rfp-flex-shrink-0\">{t('font.meta.glyphs')}:</span>\n <span className=\"rfp-text-fg-primary rfp-truncate\">{metadata.glyphCount}</span>\n </div>\n {metadata.designer && (\n <div className=\"rfp-flex rfp-items-center rfp-gap-2 rfp-min-w-0\">\n <span className=\"rfp-text-fg-tertiary rfp-flex-shrink-0\">{t('font.meta.designer')}:</span>\n <span className=\"rfp-text-fg-primary rfp-truncate\">{metadata.designer}</span>\n </div>\n )}\n {metadata.version && (\n <div className=\"rfp-flex rfp-items-center rfp-gap-2 rfp-min-w-0\">\n <span className=\"rfp-text-fg-tertiary rfp-flex-shrink-0\">{t('font.meta.version')}:</span>\n <span className=\"rfp-text-fg-primary rfp-truncate\">{metadata.version}</span>\n </div>\n )}\n </div>\n </div>\n\n {/* 预览区 */}\n <div className=\"rfp-flex-1 rfp-overflow-auto rfp-min-w-0\">\n <div className=\"rfp-px-6 rfp-py-6 rfp-space-y-8 rfp-min-w-0\">\n {/* 自定义输入框 */}\n <div className=\"rfp-min-w-0\">\n <label className=\"rfp-block rfp-text-xs rfp-text-fg-tertiary rfp-mb-2\">\n {t('font.sample_text_placeholder')}\n </label>\n <textarea\n className=\"rfp-block rfp-w-full rfp-box-border rfp-px-3 rfp-py-2.5 rfp-bg-surface-2 rfp-text-fg-primary rfp-text-sm rfp-leading-relaxed rfp-border rfp-border-line rfp-rounded-md rfp-resize-y focus:rfp-outline-none focus:rfp-border-line-strong\"\n rows={2}\n placeholder={t('font.sample_text_placeholder')}\n value={customText}\n onChange={(e) => setCustomText(e.target.value)}\n style={{ minHeight: '64px', maxHeight: '160px' }}\n />\n </div>\n\n {/* 多字号展示 */}\n <div className=\"rfp-space-y-6 rfp-min-w-0\">\n {SIZES.map((size) => (\n <div key={size} className=\"rfp-space-y-2 rfp-min-w-0\">\n <div className=\"rfp-text-xs rfp-text-fg-tertiary\">{size}px</div>\n <FontPreviewLine\n font={font}\n text={displayText}\n fontSize={size}\n renderMode={renderMode}\n theme={resolvedTheme}\n />\n </div>\n ))}\n </div>\n\n {/* 字符集样例 */}\n <div className=\"rfp-space-y-6 rfp-pt-6 rfp-border-t rfp-border-line-weak rfp-min-w-0\">\n <div className=\"rfp-min-w-0\">\n <div className=\"rfp-text-sm rfp-text-fg-tertiary rfp-mb-3\">Latin Alphabet</div>\n <FontPreviewLine\n font={font}\n text={DEFAULT_SAMPLES.latin}\n fontSize={24}\n renderMode={renderMode}\n theme={resolvedTheme}\n />\n </div>\n\n <div className=\"rfp-min-w-0\">\n <div className=\"rfp-text-sm rfp-text-fg-tertiary rfp-mb-3\">Chinese Characters</div>\n <FontPreviewLine\n font={font}\n text={DEFAULT_SAMPLES.chinese}\n fontSize={24}\n renderMode={renderMode}\n theme={resolvedTheme}\n />\n </div>\n </div>\n </div>\n </div>\n </div>\n );\n};\n\ninterface FontPreviewLineProps {\n font: OpentypeFont;\n text: string;\n fontSize: number;\n renderMode: RenderMode;\n theme: 'dark' | 'light';\n}\n\n// 单行字体预览:FontFace 模式用 div + CSS font-family(自动换行),\n// Canvas 模式用 opentype.js 软渲染并按容器宽度自动断行\nconst FontPreviewLine: React.FC<FontPreviewLineProps> = ({ font, text, fontSize, renderMode, theme }) => {\n const wrapperRef = useRef<HTMLDivElement>(null);\n const canvasRef = useRef<HTMLCanvasElement>(null);\n\n const drawCanvas = useCallback(() => {\n const wrapper = wrapperRef.current;\n const canvas = canvasRef.current;\n if (!wrapper || !canvas || renderMode !== 'canvas') return;\n\n const containerWidth = wrapper.clientWidth || 600;\n const dpr = window.devicePixelRatio || 1;\n const lineHeight = fontSize * 1.4;\n const fillColor = theme === 'light' ? '#1f2937' : '#f3f4f6';\n\n // 按容器宽度做软换行:先按 \\n 拆段,再按字宽贪心断行\n const wrapLine = (line: string): string[] => {\n if (!line) return [''];\n const result: string[] = [];\n let buf = '';\n for (const ch of Array.from(line)) {\n const next = buf + ch;\n const w = font.getAdvanceWidth(next, fontSize);\n if (w > containerWidth && buf) {\n result.push(buf);\n buf = ch;\n } else {\n buf = next;\n }\n }\n if (buf) result.push(buf);\n return result;\n };\n\n const wrappedLines: string[] = [];\n text.split('\\n').forEach((seg) => {\n wrapLine(seg).forEach((l) => wrappedLines.push(l));\n });\n\n const width = containerWidth;\n const height = lineHeight * wrappedLines.length + 4;\n\n // 高 DPI 适配\n canvas.width = Math.max(1, Math.floor(width * dpr));\n canvas.height = Math.max(1, Math.floor(height * dpr));\n canvas.style.width = `${width}px`;\n canvas.style.height = `${height}px`;\n\n const ctx = canvas.getContext('2d');\n if (!ctx) return;\n ctx.setTransform(dpr, 0, 0, dpr, 0, 0);\n ctx.clearRect(0, 0, width, height);\n\n wrappedLines.forEach((line, idx) => {\n const path = font.getPath(line, 0, fontSize + idx * lineHeight, fontSize);\n path.fill = fillColor;\n path.draw(ctx);\n });\n }, [font, text, fontSize, renderMode, theme]);\n\n useEffect(() => {\n if (renderMode !== 'canvas') return;\n drawCanvas();\n // 容器尺寸变化时重绘\n const wrapper = wrapperRef.current;\n if (!wrapper || typeof ResizeObserver === 'undefined') return;\n const observer = new ResizeObserver(() => drawCanvas());\n observer.observe(wrapper);\n return () => observer.disconnect();\n }, [drawCanvas, renderMode]);\n\n if (renderMode === 'canvas') {\n return (\n <div ref={wrapperRef} className=\"rfp-w-full\">\n <canvas ref={canvasRef} className=\"rfp-block\" />\n </div>\n );\n }\n\n return (\n <div\n ref={wrapperRef}\n className=\"rfp-w-full rfp-text-fg-primary rfp-whitespace-pre-wrap rfp-break-words\"\n style={{\n fontFamily: 'PreviewFont, sans-serif',\n fontSize: `${fontSize}px`,\n lineHeight: 1.4,\n }}\n >\n {text}\n </div>\n );\n};\n"],"names":["DEFAULT_SAMPLES","SIZES","FontRenderer","url","t","useTranslator","fetcher","useFetcher","resolvedTheme","useResolvedTheme","font","setFont","useState","metadata","setMetadata","loading","setLoading","error","setError","customText","setCustomText","renderMode","setRenderMode","fontFaceRef","useRef","useEffect","mounted","response","arrayBuffer","faceBuffer","fontData","parse","names","meta","_a","_b","_c","_d","_e","_f","_g","detectFormat","face","faceErr","err","errorMsg","ext","jsx","displayText","jsxs","e","size","FontPreviewLine","text","fontSize","theme","wrapperRef","canvasRef","drawCanvas","useCallback","wrapper","canvas","containerWidth","dpr","lineHeight","fillColor","wrapLine","line","result","buf","ch","next","wrappedLines","seg","l","width","height","ctx","idx","path","observer"],"mappings":"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"}
|