@eternalheart/react-file-preview 1.3.9 → 1.3.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/README.md +10 -0
  2. package/README.zh-CN.md +10 -0
  3. package/lib/FilePreviewContent.d.ts.map +1 -1
  4. package/lib/chunks/{index-B-H9HQiI.mjs → index-B0JUZ5rS.mjs} +10 -10
  5. package/lib/chunks/{index-B-H9HQiI.mjs.map → index-B0JUZ5rS.mjs.map} +1 -1
  6. package/lib/chunks/{index-r3q2xCCI.mjs → index-BAYc4aBz.mjs} +2 -2
  7. package/lib/chunks/{index-r3q2xCCI.mjs.map → index-BAYc4aBz.mjs.map} +1 -1
  8. package/lib/chunks/{index-BNUiNUWa.mjs → index-BOQJNL71.mjs} +2 -2
  9. package/lib/chunks/{index-BNUiNUWa.mjs.map → index-BOQJNL71.mjs.map} +1 -1
  10. package/lib/chunks/{index-BdYkTSTt.mjs → index-BkU8rK-0.mjs} +3 -3
  11. package/lib/chunks/{index-BdYkTSTt.mjs.map → index-BkU8rK-0.mjs.map} +1 -1
  12. package/lib/chunks/{index-CgV8T0G5.mjs → index-BnDoXBnH.mjs} +2 -2
  13. package/lib/chunks/{index-CgV8T0G5.mjs.map → index-BnDoXBnH.mjs.map} +1 -1
  14. package/lib/chunks/index-C5YHI0Zs.mjs +160 -0
  15. package/lib/chunks/index-C5YHI0Zs.mjs.map +1 -0
  16. package/lib/chunks/{index-Bv93wiEK.mjs → index-CGNWXFy3.mjs} +716 -666
  17. package/lib/chunks/index-CGNWXFy3.mjs.map +1 -0
  18. package/lib/chunks/{index-DdOEWhrk.mjs → index-CwmZQ-JO.mjs} +16 -16
  19. package/lib/chunks/{index-DdOEWhrk.mjs.map → index-CwmZQ-JO.mjs.map} +1 -1
  20. package/lib/chunks/{index-CKirCT35.mjs → index-CzflrElZ.mjs} +5 -5
  21. package/lib/chunks/{index-CKirCT35.mjs.map → index-CzflrElZ.mjs.map} +1 -1
  22. package/lib/chunks/{index-D8GtNeDn.mjs → index-CztCCF7q.mjs} +2 -2
  23. package/lib/chunks/{index-D8GtNeDn.mjs.map → index-CztCCF7q.mjs.map} +1 -1
  24. package/lib/chunks/{index-BGeyzo6u.mjs → index-DKEcGewg.mjs} +2 -2
  25. package/lib/chunks/{index-BGeyzo6u.mjs.map → index-DKEcGewg.mjs.map} +1 -1
  26. package/lib/chunks/{index-DV5Jd7Qe.mjs → index-DN8BQIqo.mjs} +2 -2
  27. package/lib/chunks/{index-DV5Jd7Qe.mjs.map → index-DN8BQIqo.mjs.map} +1 -1
  28. package/lib/chunks/{index-zEVVgWCH.mjs → index-DPpUj8Yy.mjs} +2 -2
  29. package/lib/chunks/{index-zEVVgWCH.mjs.map → index-DPpUj8Yy.mjs.map} +1 -1
  30. package/lib/chunks/{index-BSD3w5eG.mjs → index-DSAXdrgU.mjs} +2 -2
  31. package/lib/chunks/{index-BSD3w5eG.mjs.map → index-DSAXdrgU.mjs.map} +1 -1
  32. package/lib/chunks/{index-DGuiWJr7.mjs → index-DveR0rOk.mjs} +15 -15
  33. package/lib/chunks/{index-DGuiWJr7.mjs.map → index-DveR0rOk.mjs.map} +1 -1
  34. package/lib/chunks/{index-BqEuP_8r.mjs → index-QfO-sASN.mjs} +2 -2
  35. package/lib/chunks/{index-BqEuP_8r.mjs.map → index-QfO-sASN.mjs.map} +1 -1
  36. package/lib/chunks/{index-BcBe6KW7.mjs → index-h9bO9wmq.mjs} +4 -4
  37. package/lib/chunks/{index-BcBe6KW7.mjs.map → index-h9bO9wmq.mjs.map} +1 -1
  38. package/lib/chunks/index-mvSVNKlQ.mjs +228 -0
  39. package/lib/chunks/index-mvSVNKlQ.mjs.map +1 -0
  40. package/lib/chunks/{index-U3w45GW8.mjs → index-tecGXW2S.mjs} +43 -43
  41. package/lib/chunks/{index-U3w45GW8.mjs.map → index-tecGXW2S.mjs.map} +1 -1
  42. package/lib/chunks/{useShikiHighlight-DzEAK0S7.mjs → useShikiHighlight-DHFYu0BU.mjs} +3 -3
  43. package/lib/chunks/{useShikiHighlight-DzEAK0S7.mjs.map → useShikiHighlight-DHFYu0BU.mjs.map} +1 -1
  44. package/lib/index.cjs +22 -18
  45. package/lib/index.cjs.map +1 -1
  46. package/lib/index.css +1 -1
  47. package/lib/index.d.ts +1 -0
  48. package/lib/index.d.ts.map +1 -1
  49. package/lib/index.mjs +13 -12
  50. package/lib/renderers/Font/index.d.ts +6 -0
  51. package/lib/renderers/Font/index.d.ts.map +1 -0
  52. package/lib/renderers/Pdf/index.d.ts +0 -1
  53. package/lib/renderers/Pdf/index.d.ts.map +1 -1
  54. package/lib/renderers/lazy.d.ts +2 -0
  55. package/lib/renderers/lazy.d.ts.map +1 -1
  56. package/lib/utils/pdfConfig.d.ts +2 -2
  57. package/lib/utils/pdfConfig.d.ts.map +1 -1
  58. package/package.json +3 -2
  59. package/lib/chunks/index-Bv93wiEK.mjs.map +0 -1
  60. package/lib/chunks/index-DmepcY31.mjs +0 -96
  61. package/lib/chunks/index-DmepcY31.mjs.map +0 -1
@@ -1,96 +0,0 @@
1
- import { jsxs as m, jsx as e } from "react/jsx-runtime";
2
- import { useState as N, useRef as w, useEffect as R, useCallback as L } from "react";
3
- import { Document as H, Page as M } from "react-pdf";
4
- import { u as P } from "./index-Bv93wiEK.mjs";
5
- const q = ({
6
- url: u,
7
- zoom: x,
8
- currentPage: s,
9
- onPageChange: o,
10
- onTotalPagesChange: E,
11
- onPageWidthChange: h
12
- }) => {
13
- const k = P(), [c, D] = N(0), [l, b] = N(null), p = w(null), a = w(/* @__PURE__ */ new Map());
14
- R(() => {
15
- b(null);
16
- }, [u]);
17
- const S = ({ numPages: r }) => {
18
- D(r), E(r), o(1);
19
- }, j = (r) => {
20
- console.error("PDF 加载错误:", r), b(k("pdf.load_failed"));
21
- }, i = L(() => {
22
- if (!p.current) return;
23
- const r = p.current, t = r.scrollTop, f = r.clientHeight, n = t + f / 2;
24
- let d = 1, g = 1 / 0;
25
- a.current.forEach((A, _) => {
26
- const v = A.getBoundingClientRect(), B = r.getBoundingClientRect(), C = v.top - B.top + v.height / 2 + t, y = Math.abs(C - n);
27
- y < g && (g = y, d = _);
28
- }), d !== s && o(d);
29
- }, [s, o]);
30
- R(() => {
31
- const r = p.current;
32
- if (r)
33
- return r.addEventListener("scroll", i), () => r.removeEventListener("scroll", i);
34
- }, [i]);
35
- const T = L((r, t) => {
36
- t ? a.current.set(r, t) : a.current.delete(r);
37
- }, []);
38
- return /* @__PURE__ */ m(
39
- "div",
40
- {
41
- ref: p,
42
- className: "rfp-flex rfp-flex-col rfp-items-center rfp-w-full rfp-h-full rfp-overflow-auto rfp-py-4 md:rfp-py-8 rfp-px-2 md:rfp-px-4",
43
- children: [
44
- l && /* @__PURE__ */ e("div", { className: "rfp-text-fg-secondary rfp-text-center", children: /* @__PURE__ */ e("p", { className: "rfp-text-lg", children: l }) }),
45
- !l && /* @__PURE__ */ e(
46
- H,
47
- {
48
- file: u,
49
- onLoadSuccess: S,
50
- onLoadError: j,
51
- loading: /* @__PURE__ */ e("div", { className: "rfp-flex rfp-items-center rfp-justify-center rfp-min-h-screen", children: /* @__PURE__ */ e("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" }) }),
52
- children: /* @__PURE__ */ e("div", { className: "rfp-flex rfp-flex-col rfp-gap-4", children: Array.from(new Array(c), (r, t) => {
53
- const f = t + 1;
54
- return /* @__PURE__ */ m(
55
- "div",
56
- {
57
- ref: (n) => T(f, n),
58
- className: "rfp-relative",
59
- children: [
60
- /* @__PURE__ */ e(
61
- M,
62
- {
63
- pageNumber: f,
64
- scale: x,
65
- loading: /* @__PURE__ */ e("div", { className: "rfp-flex rfp-items-center rfp-justify-center rfp-p-8 rfp-bg-surface-1 rfp-rounded-lg rfp-min-h-[600px]", children: /* @__PURE__ */ e("div", { className: "rfp-w-8 rfp-h-8 rfp-border-4 rfp-border-line-strong rfp-border-t-spinner-head rfp-rounded-full rfp-animate-spin" }) }),
66
- renderTextLayer: !1,
67
- renderAnnotationLayer: !1,
68
- className: "rfp-shadow-2xl",
69
- onRenderSuccess: (n) => {
70
- f === 1 && h && h(n.originalWidth || n.width / x);
71
- }
72
- }
73
- ),
74
- /* @__PURE__ */ e("div", { className: "rfp-absolute rfp-top-2 rfp-right-2 rfp-bg-surface-nav-hover rfp-backdrop-blur-sm rfp-text-fg-primary rfp-text-xs rfp-px-3 rfp-py-1 rfp-rounded-full", children: f })
75
- ]
76
- },
77
- `page_${f}`
78
- );
79
- }) })
80
- }
81
- ),
82
- c > 0 && /* @__PURE__ */ m("div", { className: "rfp-sticky rfp-bottom-2 md:rfp-bottom-4 rfp-mt-4 md:rfp-mt-8 rfp-bg-surface-nav-hover rfp-backdrop-blur-xl rfp-text-fg-primary rfp-px-4 rfp-py-2 md:rfp-px-6 md:rfp-py-3 rfp-rounded-full rfp-text-xs md:rfp-text-sm rfp-font-medium rfp-shadow-2xl rfp-border rfp-border-line-weak", children: [
83
- "第 ",
84
- s,
85
- " 页 / 共 ",
86
- c,
87
- " 页"
88
- ] })
89
- ]
90
- }
91
- );
92
- };
93
- export {
94
- q as PdfRenderer
95
- };
96
- //# sourceMappingURL=index-DmepcY31.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-DmepcY31.mjs","sources":["../../src/renderers/Pdf/index.tsx"],"sourcesContent":["import { useState, useEffect, useRef, useCallback } from 'react';\nimport { Document, Page } from 'react-pdf';\nimport { useTranslator } from '../../i18n/LocaleContext';\n\n// 导入 PDF.js 配置\nimport '../../utils/pdfConfig';\n\ninterface PdfRendererProps {\n url: string;\n zoom: number;\n currentPage: number;\n onPageChange: (page: number) => void;\n onTotalPagesChange: (total: number) => void;\n onPageWidthChange?: (width: number) => void;\n}\n\nexport const PdfRenderer: React.FC<PdfRendererProps> = ({\n url,\n zoom,\n currentPage,\n onPageChange,\n onTotalPagesChange,\n onPageWidthChange,\n}) => {\n const t = useTranslator();\n const [numPages, setNumPages] = useState<number>(0);\n const [error, setError] = useState<string | null>(null);\n const containerRef = useRef<HTMLDivElement>(null);\n const pageRefs = useRef<Map<number, HTMLDivElement>>(new Map());\n\n useEffect(() => {\n setError(null);\n }, [url]);\n\n const onDocumentLoadSuccess = ({ numPages }: { numPages: number }) => {\n setNumPages(numPages);\n onTotalPagesChange(numPages);\n onPageChange(1);\n };\n\n const onDocumentLoadError = (error: Error) => {\n console.error('PDF 加载错误:', error);\n setError(t('pdf.load_failed'));\n };\n\n // 滚动时更新当前页码\n const handleScroll = useCallback(() => {\n if (!containerRef.current) return;\n\n const container = containerRef.current;\n const scrollTop = container.scrollTop;\n const containerHeight = container.clientHeight;\n const scrollCenter = scrollTop + containerHeight / 2;\n\n // 找到当前可见的页面\n let currentVisiblePage = 1;\n let minDistance = Infinity;\n\n pageRefs.current.forEach((pageElement, pageNumber) => {\n const rect = pageElement.getBoundingClientRect();\n const containerRect = container.getBoundingClientRect();\n const pageCenter = rect.top - containerRect.top + rect.height / 2 + scrollTop;\n const distance = Math.abs(pageCenter - scrollCenter);\n\n if (distance < minDistance) {\n minDistance = distance;\n currentVisiblePage = pageNumber;\n }\n });\n\n if (currentVisiblePage !== currentPage) {\n onPageChange(currentVisiblePage);\n }\n }, [currentPage, onPageChange]);\n\n // 监听滚动事件\n useEffect(() => {\n const container = containerRef.current;\n if (!container) return;\n\n container.addEventListener('scroll', handleScroll);\n return () => container.removeEventListener('scroll', handleScroll);\n }, [handleScroll]);\n\n // 设置页面引用\n const setPageRef = useCallback((pageNumber: number, element: HTMLDivElement | null) => {\n if (element) {\n pageRefs.current.set(pageNumber, element);\n } else {\n pageRefs.current.delete(pageNumber);\n }\n }, []);\n\n return (\n <div\n ref={containerRef}\n className=\"rfp-flex rfp-flex-col rfp-items-center rfp-w-full rfp-h-full rfp-overflow-auto rfp-py-4 md:rfp-py-8 rfp-px-2 md:rfp-px-4\"\n >\n {error && (\n <div className=\"rfp-text-fg-secondary rfp-text-center\">\n <p className=\"rfp-text-lg\">{error}</p>\n </div>\n )}\n\n {!error && (\n <Document\n file={url}\n onLoadSuccess={onDocumentLoadSuccess}\n onLoadError={onDocumentLoadError}\n loading={\n <div className=\"rfp-flex rfp-items-center rfp-justify-center rfp-min-h-screen\">\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 <div className=\"rfp-flex rfp-flex-col rfp-gap-4\">\n {Array.from(new Array(numPages), (_, index) => {\n const pageNumber = index + 1;\n return (\n <div\n key={`page_${pageNumber}`}\n ref={(el) => setPageRef(pageNumber, el)}\n className=\"rfp-relative\"\n >\n <Page\n pageNumber={pageNumber}\n scale={zoom}\n loading={\n <div className=\"rfp-flex rfp-items-center rfp-justify-center rfp-p-8 rfp-bg-surface-1 rfp-rounded-lg rfp-min-h-[600px]\">\n <div className=\"rfp-w-8 rfp-h-8 rfp-border-4 rfp-border-line-strong rfp-border-t-spinner-head rfp-rounded-full rfp-animate-spin\" />\n </div>\n }\n renderTextLayer={false}\n renderAnnotationLayer={false}\n className=\"rfp-shadow-2xl\"\n onRenderSuccess={(page) => {\n if (pageNumber === 1 && onPageWidthChange) {\n // 上报 scale=1 时的原始页面宽度\n onPageWidthChange(page.originalWidth || page.width / zoom);\n }\n }}\n />\n {/* 页码标签 */}\n <div className=\"rfp-absolute rfp-top-2 rfp-right-2 rfp-bg-surface-nav-hover rfp-backdrop-blur-sm rfp-text-fg-primary rfp-text-xs rfp-px-3 rfp-py-1 rfp-rounded-full\">\n {pageNumber}\n </div>\n </div>\n );\n })}\n </div>\n </Document>\n )}\n\n {/* 底部页码指示器 */}\n {numPages > 0 && (\n <div className=\"rfp-sticky rfp-bottom-2 md:rfp-bottom-4 rfp-mt-4 md:rfp-mt-8 rfp-bg-surface-nav-hover rfp-backdrop-blur-xl rfp-text-fg-primary rfp-px-4 rfp-py-2 md:rfp-px-6 md:rfp-py-3 rfp-rounded-full rfp-text-xs md:rfp-text-sm rfp-font-medium rfp-shadow-2xl rfp-border rfp-border-line-weak\">\n 第 {currentPage} 页 / 共 {numPages} 页\n </div>\n )}\n </div>\n );\n};\n"],"names":["PdfRenderer","url","zoom","currentPage","onPageChange","onTotalPagesChange","onPageWidthChange","t","useTranslator","numPages","setNumPages","useState","error","setError","containerRef","useRef","pageRefs","useEffect","onDocumentLoadSuccess","onDocumentLoadError","handleScroll","useCallback","container","scrollTop","containerHeight","scrollCenter","currentVisiblePage","minDistance","pageElement","pageNumber","rect","containerRect","pageCenter","distance","setPageRef","element","jsxs","jsx","Document","_","index","el","Page","page"],"mappings":"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"}