@eternalheart/react-file-preview 1.4.0 → 1.5.1
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/README.md +437 -60
- package/README.zh-CN.md +437 -60
- package/lib/FilePreviewContent.d.ts +1 -0
- package/lib/FilePreviewContent.d.ts.map +1 -1
- package/lib/FilePreviewEmbed.d.ts +2 -0
- package/lib/FilePreviewEmbed.d.ts.map +1 -1
- package/lib/FilePreviewModal.d.ts +2 -0
- package/lib/FilePreviewModal.d.ts.map +1 -1
- package/lib/chunks/index-BBYKNNLb.mjs +329 -0
- package/lib/chunks/index-BBYKNNLb.mjs.map +1 -0
- package/lib/chunks/index-BFh22D_W.mjs +78 -0
- package/lib/chunks/index-BFh22D_W.mjs.map +1 -0
- package/lib/chunks/{index-DoFsoBKL.mjs → index-BKXvtJh5.mjs} +27 -25
- package/lib/chunks/index-BKXvtJh5.mjs.map +1 -0
- package/lib/chunks/index-Bw3Fh4b5.mjs +116 -0
- package/lib/chunks/index-Bw3Fh4b5.mjs.map +1 -0
- package/lib/chunks/{index-kALp0tqz.mjs → index-CEC_DHgr.mjs} +22 -20
- package/lib/chunks/index-CEC_DHgr.mjs.map +1 -0
- package/lib/chunks/{index-CzM2mxrD.mjs → index-COOUxB5e.mjs} +130 -128
- package/lib/chunks/{index-CzM2mxrD.mjs.map → index-COOUxB5e.mjs.map} +1 -1
- package/lib/chunks/index-CU1Lc3lV.mjs +120 -0
- package/lib/chunks/index-CU1Lc3lV.mjs.map +1 -0
- package/lib/chunks/index-CgFv7B_G.mjs +359 -0
- package/lib/chunks/index-CgFv7B_G.mjs.map +1 -0
- package/lib/chunks/index-Cn4ZyhGM.mjs +587 -0
- package/lib/chunks/index-Cn4ZyhGM.mjs.map +1 -0
- package/lib/chunks/{index-DaAXRBWL.mjs → index-DGNNEnWE.mjs} +864 -862
- package/lib/chunks/{index-DaAXRBWL.mjs.map → index-DGNNEnWE.mjs.map} +1 -1
- package/lib/chunks/index-DLk08ylq.mjs +313 -0
- package/lib/chunks/index-DLk08ylq.mjs.map +1 -0
- package/lib/chunks/index-DVtPyN-s.mjs +200 -0
- package/lib/chunks/index-DVtPyN-s.mjs.map +1 -0
- package/lib/chunks/index-DreA69iU.mjs +2409 -0
- package/lib/chunks/index-DreA69iU.mjs.map +1 -0
- package/lib/chunks/{index-Cp68OevR.mjs → index-Dta7iGov.mjs} +1299 -1297
- package/lib/chunks/{index-Cp68OevR.mjs.map → index-Dta7iGov.mjs.map} +1 -1
- package/lib/chunks/index-fQGAUFAX.mjs +275 -0
- package/lib/chunks/index-fQGAUFAX.mjs.map +1 -0
- package/lib/chunks/{index-C_BJatqr.mjs → index-fSw6Hl5e.mjs} +42 -40
- package/lib/chunks/index-fSw6Hl5e.mjs.map +1 -0
- package/lib/chunks/index-jvNrkVkp.mjs +291 -0
- package/lib/chunks/index-jvNrkVkp.mjs.map +1 -0
- package/lib/chunks/index-oVJyD-FV.mjs +107 -0
- package/lib/chunks/index-oVJyD-FV.mjs.map +1 -0
- package/lib/chunks/{index-DuP0Tlpo.mjs → index-vRLKumL8.mjs} +43 -41
- package/lib/chunks/index-vRLKumL8.mjs.map +1 -0
- package/lib/chunks/useShikiHighlight-C6nJcETW.mjs +36 -0
- package/lib/chunks/useShikiHighlight-C6nJcETW.mjs.map +1 -0
- package/lib/components/preview/FilePreviewToolbar.d.ts +1 -0
- package/lib/components/preview/FilePreviewToolbar.d.ts.map +1 -1
- package/lib/components/preview/ToolbarButton.d.ts +3 -1
- package/lib/components/preview/ToolbarButton.d.ts.map +1 -1
- package/lib/hooks/index.d.ts +0 -6
- package/lib/hooks/index.d.ts.map +1 -1
- package/lib/hooks/useShikiHighlight.d.ts +3 -1
- package/lib/hooks/useShikiHighlight.d.ts.map +1 -1
- package/lib/index.cjs +32 -30
- package/lib/index.cjs.map +1 -1
- package/lib/index.css +1 -1
- package/lib/index.mjs +1 -1
- package/lib/renderers/Audio/index.d.ts +2 -1
- package/lib/renderers/Audio/index.d.ts.map +1 -1
- package/lib/renderers/Csv/index.d.ts +2 -1
- package/lib/renderers/Csv/index.d.ts.map +1 -1
- package/lib/renderers/Docx/index.d.ts +2 -1
- package/lib/renderers/Docx/index.d.ts.map +1 -1
- package/lib/renderers/Epub/index.d.ts +2 -3
- package/lib/renderers/Epub/index.d.ts.map +1 -1
- package/lib/renderers/Font/index.d.ts +2 -1
- package/lib/renderers/Font/index.d.ts.map +1 -1
- package/lib/renderers/Image/index.d.ts +6 -7
- package/lib/renderers/Image/index.d.ts.map +1 -1
- package/lib/renderers/Json/index.d.ts +2 -1
- package/lib/renderers/Json/index.d.ts.map +1 -1
- package/lib/renderers/Markdown/index.d.ts +2 -2
- package/lib/renderers/Markdown/index.d.ts.map +1 -1
- package/lib/renderers/Mobi/index.d.ts +2 -3
- package/lib/renderers/Mobi/index.d.ts.map +1 -1
- package/lib/renderers/Msg/index.d.ts +2 -1
- package/lib/renderers/Msg/index.d.ts.map +1 -1
- package/lib/renderers/Pdf/index.d.ts +4 -8
- package/lib/renderers/Pdf/index.d.ts.map +1 -1
- package/lib/renderers/Pptx/index.d.ts +2 -1
- package/lib/renderers/Pptx/index.d.ts.map +1 -1
- package/lib/renderers/Subtitle/index.d.ts +2 -1
- package/lib/renderers/Subtitle/index.d.ts.map +1 -1
- package/lib/renderers/Text/index.d.ts +2 -3
- package/lib/renderers/Text/index.d.ts.map +1 -1
- package/lib/renderers/Video/index.d.ts +2 -1
- package/lib/renderers/Video/index.d.ts.map +1 -1
- package/lib/renderers/Xlsx/index.d.ts +2 -1
- package/lib/renderers/Xlsx/index.d.ts.map +1 -1
- package/lib/renderers/Xml/index.d.ts +2 -1
- package/lib/renderers/Xml/index.d.ts.map +1 -1
- package/lib/renderers/Zip/index.d.ts +7 -2
- package/lib/renderers/Zip/index.d.ts.map +1 -1
- package/lib/renderers/base.types.d.ts +38 -0
- package/lib/renderers/base.types.d.ts.map +1 -0
- package/lib/renderers/registry.d.ts +36 -0
- package/lib/renderers/registry.d.ts.map +1 -0
- package/lib/renderers/toolbar.types.d.ts +2 -0
- package/lib/renderers/toolbar.types.d.ts.map +1 -1
- package/lib/toolbar/renderItems.d.ts.map +1 -1
- package/package.json +3 -3
- package/lib/chunks/index-0v5STX5f.mjs +0 -105
- package/lib/chunks/index-0v5STX5f.mjs.map +0 -1
- package/lib/chunks/index-10O8tfTH.mjs +0 -529
- package/lib/chunks/index-10O8tfTH.mjs.map +0 -1
- package/lib/chunks/index-BCyv1HM9.mjs +0 -175
- package/lib/chunks/index-BCyv1HM9.mjs.map +0 -1
- package/lib/chunks/index-Bo90aGhy.mjs +0 -114
- package/lib/chunks/index-Bo90aGhy.mjs.map +0 -1
- package/lib/chunks/index-CEeKt7L3.mjs +0 -2808
- package/lib/chunks/index-CEeKt7L3.mjs.map +0 -1
- package/lib/chunks/index-CWKbnvW6.mjs +0 -270
- package/lib/chunks/index-CWKbnvW6.mjs.map +0 -1
- package/lib/chunks/index-C_BJatqr.mjs.map +0 -1
- package/lib/chunks/index-Cbz5Z6ZK.mjs +0 -263
- package/lib/chunks/index-Cbz5Z6ZK.mjs.map +0 -1
- package/lib/chunks/index-DTYBFuAH.mjs +0 -357
- package/lib/chunks/index-DTYBFuAH.mjs.map +0 -1
- package/lib/chunks/index-DoFsoBKL.mjs.map +0 -1
- package/lib/chunks/index-DuP0Tlpo.mjs.map +0 -1
- package/lib/chunks/index-Dv3RQz86.mjs +0 -270
- package/lib/chunks/index-Dv3RQz86.mjs.map +0 -1
- package/lib/chunks/index-QfpHck8N.mjs +0 -55
- package/lib/chunks/index-QfpHck8N.mjs.map +0 -1
- package/lib/chunks/index-gjSQeou7.mjs +0 -194
- package/lib/chunks/index-gjSQeou7.mjs.map +0 -1
- package/lib/chunks/index-kALp0tqz.mjs.map +0 -1
- package/lib/chunks/index-kCeSnFs-.mjs +0 -54
- package/lib/chunks/index-kCeSnFs-.mjs.map +0 -1
- package/lib/chunks/useShikiHighlight-BA9qgdGA.mjs +0 -23
- package/lib/chunks/useShikiHighlight-BA9qgdGA.mjs.map +0 -1
- package/lib/hooks/rendererReducer.d.ts +0 -10
- package/lib/hooks/rendererReducer.d.ts.map +0 -1
- package/lib/hooks/types.d.ts +0 -152
- package/lib/hooks/types.d.ts.map +0 -1
- package/lib/hooks/useBookRenderer.d.ts +0 -14
- package/lib/hooks/useBookRenderer.d.ts.map +0 -1
- package/lib/hooks/useFilePreviewState.d.ts +0 -10
- package/lib/hooks/useFilePreviewState.d.ts.map +0 -1
- package/lib/hooks/useImageAutoFit.d.ts +0 -13
- package/lib/hooks/useImageAutoFit.d.ts.map +0 -1
- package/lib/hooks/useToolbarConfig.d.ts +0 -25
- package/lib/hooks/useToolbarConfig.d.ts.map +0 -1
- package/lib/renderers/Epub/toolbar.d.ts +0 -13
- package/lib/renderers/Epub/toolbar.d.ts.map +0 -1
- package/lib/renderers/Image/toolbar.d.ts +0 -15
- package/lib/renderers/Image/toolbar.d.ts.map +0 -1
- package/lib/renderers/Markdown/toolbar.d.ts +0 -9
- package/lib/renderers/Markdown/toolbar.d.ts.map +0 -1
- package/lib/renderers/Mobi/toolbar.d.ts +0 -13
- package/lib/renderers/Mobi/toolbar.d.ts.map +0 -1
- package/lib/renderers/Pdf/toolbar.d.ts +0 -16
- package/lib/renderers/Pdf/toolbar.d.ts.map +0 -1
- package/lib/renderers/Text/toolbar.d.ts +0 -12
- package/lib/renderers/Text/toolbar.d.ts.map +0 -1
- package/lib/renderers/Zip/toolbar.d.ts +0 -13
- package/lib/renderers/Zip/toolbar.d.ts.map +0 -1
- package/lib/toolbar/registry.d.ts +0 -51
- package/lib/toolbar/registry.d.ts.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index-kALp0tqz.mjs","sources":["../../src/renderers/Csv/index.tsx"],"sourcesContent":["import { useState, useEffect, useRef, useCallback } from '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';\nimport { RendererError } from '../RendererError';\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 const controller = new AbortController();\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, signal: controller.signal });\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: any) {\n if (err.name === 'AbortError') return;\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 controller.abort();\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 <RendererError message={error} />\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","Spreadsheet","useEffect","isInitialRender","updateDimensions","newDimensions","lastDimensions","widthDiff","heightDiff","isMounted","controller","loadCsv","text","fetchTextUtf8","parsed","parseCsv","guessCsvDelimiter","sheetData","convertCsvToSpreadsheetData","err","timer","jsxs","jsx","RendererError"],"mappings":"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"}
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
import { jsx as o } from "react/jsx-runtime";
|
|
2
|
-
import { useState as f, useEffect as u } from "react";
|
|
3
|
-
import { u as h, a as g, E as w } from "./index-CEeKt7L3.mjs";
|
|
4
|
-
import { u as b } from "./useShikiHighlight-BA9qgdGA.mjs";
|
|
5
|
-
import { R as y } from "./RendererError-D5i8eSpN.mjs";
|
|
6
|
-
const x = (r) => {
|
|
7
|
-
try {
|
|
8
|
-
const n = new DOMParser().parseFromString(r, "application/xml");
|
|
9
|
-
if (n.querySelector("parsererror")) return r;
|
|
10
|
-
const e = new XMLSerializer().serializeToString(n);
|
|
11
|
-
return N(e);
|
|
12
|
-
} catch {
|
|
13
|
-
return r;
|
|
14
|
-
}
|
|
15
|
-
}, N = (r) => {
|
|
16
|
-
const l = " ", n = /(>)(<)(\/*)/g;
|
|
17
|
-
let s = r.replace(n, `$1
|
|
18
|
-
$2$3`), t = 0;
|
|
19
|
-
return s.split(`
|
|
20
|
-
`).map((e) => {
|
|
21
|
-
let a = 0;
|
|
22
|
-
/^<\/\w/.test(e) ? t = Math.max(t - 1, 0) : /^<\w[^>]*[^/]>.*$/.test(e) && !/<.+<\/.+>$/.test(e) && (a = 1);
|
|
23
|
-
const i = l.repeat(t) + e;
|
|
24
|
-
return t += a, i;
|
|
25
|
-
}).join(`
|
|
26
|
-
`);
|
|
27
|
-
}, X = ({ url: r }) => {
|
|
28
|
-
const l = h(), n = g(), [s, t] = f(""), [e, a] = f(!0), [i, c] = f(null), { html: d } = b(s, "xml");
|
|
29
|
-
return u(() => {
|
|
30
|
-
const m = new AbortController();
|
|
31
|
-
return (async () => {
|
|
32
|
-
try {
|
|
33
|
-
a(!0), c(null);
|
|
34
|
-
const p = await w(r, { fetcher: n, signal: m.signal });
|
|
35
|
-
t(x(p));
|
|
36
|
-
} catch (p) {
|
|
37
|
-
if (p.name === "AbortError") return;
|
|
38
|
-
console.error(p), c(l("xml.load_failed"));
|
|
39
|
-
} finally {
|
|
40
|
-
a(!1);
|
|
41
|
-
}
|
|
42
|
-
})(), () => m.abort();
|
|
43
|
-
}, [r]), e ? /* @__PURE__ */ o("div", { className: "rfp-flex rfp-items-center rfp-justify-center rfp-w-full rfp-h-full", children: /* @__PURE__ */ o("div", { className: "rfp-w-12 rfp-h-12 rfp-border-4 rfp-border-line-strong rfp-border-t-spinner-head rfp-rounded-full rfp-animate-spin" }) }) : i ? /* @__PURE__ */ o(y, { message: i }) : /* @__PURE__ */ o("div", { className: "rfp-w-full rfp-h-full rfp-overflow-auto rfp-bg-code-bg", children: d ? /* @__PURE__ */ o(
|
|
44
|
-
"div",
|
|
45
|
-
{
|
|
46
|
-
className: "rfp-shiki-wrapper with-line-numbers",
|
|
47
|
-
dangerouslySetInnerHTML: { __html: d }
|
|
48
|
-
}
|
|
49
|
-
) : /* @__PURE__ */ o("pre", { className: "rfp-py-6 rfp-px-4 rfp-text-fg-primary rfp-font-mono rfp-text-sm rfp-whitespace-pre-wrap rfp-break-words", children: s }) });
|
|
50
|
-
};
|
|
51
|
-
export {
|
|
52
|
-
X as XmlRenderer
|
|
53
|
-
};
|
|
54
|
-
//# sourceMappingURL=index-kCeSnFs-.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index-kCeSnFs-.mjs","sources":["../../src/renderers/Xml/index.tsx"],"sourcesContent":["import { useState, useEffect } from 'react';\nimport { fetchTextUtf8 } 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 XmlRendererProps {\n url: string;\n fileName: string;\n}\n\n/**\n * 用 DOMParser 美化 XML:失败则原样返回\n */\nconst prettyPrintXml = (xml: string): string => {\n try {\n const parser = new DOMParser();\n const doc = parser.parseFromString(xml, 'application/xml');\n // 检测解析错误\n const errNode = doc.querySelector('parsererror');\n if (errNode) return xml;\n // 使用 XSLT 或手动缩进:这里手动缩进更稳\n const serializer = new XMLSerializer();\n const serialized = serializer.serializeToString(doc);\n return indentXml(serialized);\n } catch {\n return xml;\n }\n};\n\nconst indentXml = (xml: string): string => {\n const PADDING = ' ';\n const reg = /(>)(<)(\\/*)/g;\n let formatted = xml.replace(reg, '$1\\n$2$3');\n // 自闭合和 CDATA 等不处理\n let pad = 0;\n return formatted\n .split('\\n')\n .map((line) => {\n let indent = 0;\n if (/^<\\/\\w/.test(line)) {\n pad = Math.max(pad - 1, 0);\n } else if (/^<\\w[^>]*[^/]>.*$/.test(line) && !/<.+<\\/.+>$/.test(line)) {\n indent = 1;\n }\n const padded = PADDING.repeat(pad) + line;\n pad += indent;\n return padded;\n })\n .join('\\n');\n};\n\nexport const XmlRenderer: React.FC<XmlRendererProps> = ({ url }) => {\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 { html: highlighted } = useShikiHighlight(content, 'xml');\n\n useEffect(() => {\n const controller = new AbortController();\n const load = async () => {\n try {\n setLoading(true);\n setError(null);\n const raw = await fetchTextUtf8(url, { fetcher, signal: controller.signal });\n setContent(prettyPrintXml(raw));\n } catch (err: any) {\n if (err.name === 'AbortError') return;\n console.error(err);\n setError(t('xml.load_failed'));\n } finally {\n setLoading(false);\n }\n };\n load();\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 return (\n <div className=\"rfp-w-full rfp-h-full rfp-overflow-auto rfp-bg-code-bg\">\n {highlighted ? (\n <div\n className=\"rfp-shiki-wrapper with-line-numbers\"\n dangerouslySetInnerHTML={{ __html: highlighted }}\n />\n ) : (\n <pre className=\"rfp-py-6 rfp-px-4 rfp-text-fg-primary rfp-font-mono rfp-text-sm rfp-whitespace-pre-wrap rfp-break-words\">\n {content}\n </pre>\n )}\n </div>\n );\n};\n"],"names":["prettyPrintXml","xml","doc","serialized","indentXml","PADDING","reg","formatted","pad","line","indent","padded","XmlRenderer","url","t","useTranslator","fetcher","useFetcher","content","setContent","useState","loading","setLoading","error","setError","highlighted","useShikiHighlight","useEffect","controller","raw","fetchTextUtf8","err","jsx","RendererError"],"mappings":";;;;;AAeA,MAAMA,IAAiB,CAACC,MAAwB;AAC9C,MAAI;AAEF,UAAMC,IADS,IAAI,UAAA,EACA,gBAAgBD,GAAK,iBAAiB;AAGzD,QADgBC,EAAI,cAAc,aAAa,EAClC,QAAOD;AAGpB,UAAME,IADa,IAAI,cAAA,EACO,kBAAkBD,CAAG;AACnD,WAAOE,EAAUD,CAAU;AAAA,EAC7B,QAAQ;AACN,WAAOF;AAAA,EACT;AACF,GAEMG,IAAY,CAACH,MAAwB;AACzC,QAAMI,IAAU,MACVC,IAAM;AACZ,MAAIC,IAAYN,EAAI,QAAQK,GAAK;AAAA,KAAU,GAEvCE,IAAM;AACV,SAAOD,EACJ,MAAM;AAAA,CAAI,EACV,IAAI,CAACE,MAAS;AACb,QAAIC,IAAS;AACb,IAAI,SAAS,KAAKD,CAAI,IACpBD,IAAM,KAAK,IAAIA,IAAM,GAAG,CAAC,IAChB,oBAAoB,KAAKC,CAAI,KAAK,CAAC,aAAa,KAAKA,CAAI,MAClEC,IAAS;AAEX,UAAMC,IAASN,EAAQ,OAAOG,CAAG,IAAIC;AACrC,WAAAD,KAAOE,GACAC;AAAA,EACT,CAAC,EACA,KAAK;AAAA,CAAI;AACd,GAEaC,IAA0C,CAAC,EAAE,KAAAC,QAAU;AAClE,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,GAChD,EAAE,MAAMK,EAAA,IAAgBC,EAAkBR,GAAS,KAAK;AAsB9D,SApBAS,EAAU,MAAM;AACd,UAAMC,IAAa,IAAI,gBAAA;AAevB,YAda,YAAY;AACvB,UAAI;AACF,QAAAN,EAAW,EAAI,GACfE,EAAS,IAAI;AACb,cAAMK,IAAM,MAAMC,EAAcjB,GAAK,EAAE,SAAAG,GAAS,QAAQY,EAAW,QAAQ;AAC3E,QAAAT,EAAWnB,EAAe6B,CAAG,CAAC;AAAA,MAChC,SAASE,GAAU;AACjB,YAAIA,EAAI,SAAS,aAAc;AAC/B,gBAAQ,MAAMA,CAAG,GACjBP,EAASV,EAAE,iBAAiB,CAAC;AAAA,MAC/B,UAAA;AACE,QAAAQ,EAAW,EAAK;AAAA,MAClB;AAAA,IACF,GACA,GACO,MAAMM,EAAW,MAAA;AAAA,EAC1B,GAAG,CAACf,CAAG,CAAC,GAEJQ,IAEA,gBAAAW,EAAC,SAAI,WAAU,sEACb,4BAAC,OAAA,EAAI,WAAU,qHAAoH,EAAA,CACrI,IAIAT,IACK,gBAAAS,EAACC,GAAA,EAAc,SAASV,EAAA,CAAO,IAItC,gBAAAS,EAAC,OAAA,EAAI,WAAU,0DACZ,UAAAP,IACC,gBAAAO;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAU;AAAA,MACV,yBAAyB,EAAE,QAAQP,EAAA;AAAA,IAAY;AAAA,EAAA,IAGjD,gBAAAO,EAAC,OAAA,EAAI,WAAU,2GACZ,aACH,GAEJ;AAEJ;"}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { useState as l, useEffect as f } from "react";
|
|
2
|
-
import { codeToHtml as a } from "shiki";
|
|
3
|
-
import { b as n } from "./index-CEeKt7L3.mjs";
|
|
4
|
-
function p(s, o) {
|
|
5
|
-
const r = n(), [u, i] = l(""), [h, e] = l(!0);
|
|
6
|
-
return f(() => {
|
|
7
|
-
let t = !1;
|
|
8
|
-
return e(!0), a(s, {
|
|
9
|
-
lang: o,
|
|
10
|
-
theme: r === "light" ? "github-light" : "dark-plus"
|
|
11
|
-
}).then((m) => {
|
|
12
|
-
t || (i(m), e(!1));
|
|
13
|
-
}).catch(() => {
|
|
14
|
-
t || (i(""), e(!1));
|
|
15
|
-
}), () => {
|
|
16
|
-
t = !0;
|
|
17
|
-
};
|
|
18
|
-
}, [s, o, r]), { html: u, loading: h };
|
|
19
|
-
}
|
|
20
|
-
export {
|
|
21
|
-
p as u
|
|
22
|
-
};
|
|
23
|
-
//# sourceMappingURL=useShikiHighlight-BA9qgdGA.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useShikiHighlight-BA9qgdGA.mjs","sources":["../../src/hooks/useShikiHighlight.ts"],"sourcesContent":["import { useState, useEffect } from 'react';\nimport { codeToHtml } from 'shiki';\nimport { useResolvedTheme } from '../ThemeContext';\n\n/**\n * 用 shiki 把代码高亮成 HTML(与 vue-file-preview 同引擎、同主题,保证两端视觉一致)。\n *\n * - dark 主题用 `dark-plus`(VSCode Dark Plus)\n * - light 主题用 `github-light`(GitHub Light)\n *\n * shiki 输出的 <pre> 自带 inline 背景/前景色,主题切换时必须重新高亮,\n * 因此 resolvedTheme 进入依赖数组。\n *\n * @returns\n * - `html`: 高亮后的 HTML 字符串(失败或加载中为 '')\n * - `loading`: 是否正在高亮\n */\nexport function useShikiHighlight(code: string, lang: string): { html: string; loading: boolean } {\n const resolvedTheme = useResolvedTheme();\n const [html, setHtml] = useState('');\n const [loading, setLoading] = useState(true);\n\n useEffect(() => {\n let cancelled = false;\n setLoading(true);\n codeToHtml(code, {\n lang,\n theme: resolvedTheme === 'light' ? 'github-light' : 'dark-plus',\n })\n .then((out) => {\n if (!cancelled) {\n setHtml(out);\n setLoading(false);\n }\n })\n .catch(() => {\n if (!cancelled) {\n setHtml('');\n setLoading(false);\n }\n });\n return () => {\n cancelled = true;\n };\n }, [code, lang, resolvedTheme]);\n\n return { html, loading };\n}\n"],"names":["useShikiHighlight","code","lang","resolvedTheme","useResolvedTheme","html","setHtml","useState","loading","setLoading","useEffect","cancelled","codeToHtml","out"],"mappings":";;;AAiBO,SAASA,EAAkBC,GAAcC,GAAkD;AAChG,QAAMC,IAAgBC,EAAA,GAChB,CAACC,GAAMC,CAAO,IAAIC,EAAS,EAAE,GAC7B,CAACC,GAASC,CAAU,IAAIF,EAAS,EAAI;AAE3C,SAAAG,EAAU,MAAM;AACd,QAAIC,IAAY;AAChB,WAAAF,EAAW,EAAI,GACfG,EAAWX,GAAM;AAAA,MACf,MAAAC;AAAA,MACA,OAAOC,MAAkB,UAAU,iBAAiB;AAAA,IAAA,CACrD,EACE,KAAK,CAACU,MAAQ;AACb,MAAKF,MACHL,EAAQO,CAAG,GACXJ,EAAW,EAAK;AAAA,IAEpB,CAAC,EACA,MAAM,MAAM;AACX,MAAKE,MACHL,EAAQ,EAAE,GACVG,EAAW,EAAK;AAAA,IAEpB,CAAC,GACI,MAAM;AACX,MAAAE,IAAY;AAAA,IACd;AAAA,EACF,GAAG,CAACV,GAAMC,GAAMC,CAAa,CAAC,GAEvB,EAAE,MAAAE,GAAM,SAAAG,EAAA;AACjB;"}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import type { RendererState, RendererAction } from './types';
|
|
2
|
-
/**
|
|
3
|
-
* 渲染器状态初始值
|
|
4
|
-
*/
|
|
5
|
-
export declare const initialRendererState: RendererState;
|
|
6
|
-
/**
|
|
7
|
-
* 渲染器状态 reducer
|
|
8
|
-
*/
|
|
9
|
-
export declare function rendererReducer(state: RendererState, action: RendererAction): RendererState;
|
|
10
|
-
//# sourceMappingURL=rendererReducer.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"rendererReducer.d.ts","sourceRoot":"","sources":["../../src/hooks/rendererReducer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE7D;;GAEG;AACH,eAAO,MAAM,oBAAoB,EAAE,aAmClC,CAAC;AAEF;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,cAAc,GAAG,aAAa,CA+G3F"}
|
package/lib/hooks/types.d.ts
DELETED
|
@@ -1,152 +0,0 @@
|
|
|
1
|
-
import type { ZipToolbarStats } from '../renderers/Zip/toolbar';
|
|
2
|
-
/**
|
|
3
|
-
* 渲染器通用状态
|
|
4
|
-
*/
|
|
5
|
-
export interface RendererCommonState {
|
|
6
|
-
zoom: number;
|
|
7
|
-
rotation: number;
|
|
8
|
-
}
|
|
9
|
-
/**
|
|
10
|
-
* 图片渲染器状态
|
|
11
|
-
*/
|
|
12
|
-
export interface RendererImageState {
|
|
13
|
-
naturalWidth: number;
|
|
14
|
-
naturalHeight: number;
|
|
15
|
-
resetKey: number;
|
|
16
|
-
}
|
|
17
|
-
/**
|
|
18
|
-
* PDF 渲染器状态
|
|
19
|
-
*/
|
|
20
|
-
export interface RendererPdfState {
|
|
21
|
-
currentPage: number;
|
|
22
|
-
totalPages: number;
|
|
23
|
-
showOutline: boolean;
|
|
24
|
-
}
|
|
25
|
-
/**
|
|
26
|
-
* EPUB 渲染器状态
|
|
27
|
-
*/
|
|
28
|
-
export interface RendererEpubState {
|
|
29
|
-
current: number;
|
|
30
|
-
total: number;
|
|
31
|
-
fullWidth: boolean;
|
|
32
|
-
}
|
|
33
|
-
/**
|
|
34
|
-
* Mobi 渲染器状态
|
|
35
|
-
*/
|
|
36
|
-
export interface RendererMobiState {
|
|
37
|
-
current: number;
|
|
38
|
-
total: number;
|
|
39
|
-
fullWidth: boolean;
|
|
40
|
-
}
|
|
41
|
-
/**
|
|
42
|
-
* ZIP 渲染器状态
|
|
43
|
-
*/
|
|
44
|
-
export interface RendererZipState {
|
|
45
|
-
stats: ZipToolbarStats | null;
|
|
46
|
-
}
|
|
47
|
-
/**
|
|
48
|
-
* Text 渲染器状态
|
|
49
|
-
*/
|
|
50
|
-
export interface RendererTextState {
|
|
51
|
-
wordWrap: boolean;
|
|
52
|
-
htmlPreview: boolean;
|
|
53
|
-
}
|
|
54
|
-
/**
|
|
55
|
-
* Markdown 渲染器状态
|
|
56
|
-
*/
|
|
57
|
-
export interface RendererMarkdownState {
|
|
58
|
-
viewMode: 'preview' | 'source';
|
|
59
|
-
}
|
|
60
|
-
/**
|
|
61
|
-
* 所有渲染器状态的聚合
|
|
62
|
-
*/
|
|
63
|
-
export interface RendererState {
|
|
64
|
-
common: RendererCommonState;
|
|
65
|
-
image: RendererImageState;
|
|
66
|
-
pdf: RendererPdfState;
|
|
67
|
-
epub: RendererEpubState;
|
|
68
|
-
mobi: RendererMobiState;
|
|
69
|
-
zip: RendererZipState;
|
|
70
|
-
text: RendererTextState;
|
|
71
|
-
markdown: RendererMarkdownState;
|
|
72
|
-
}
|
|
73
|
-
/**
|
|
74
|
-
* 渲染器 Action 类型
|
|
75
|
-
*/
|
|
76
|
-
export type RendererAction = {
|
|
77
|
-
type: 'RESET';
|
|
78
|
-
} | {
|
|
79
|
-
type: 'SET_ZOOM';
|
|
80
|
-
payload: number;
|
|
81
|
-
} | {
|
|
82
|
-
type: 'SET_ROTATION';
|
|
83
|
-
payload: number;
|
|
84
|
-
} | {
|
|
85
|
-
type: 'SET_IMAGE_NATURAL_SIZE';
|
|
86
|
-
payload: {
|
|
87
|
-
width: number;
|
|
88
|
-
height: number;
|
|
89
|
-
};
|
|
90
|
-
} | {
|
|
91
|
-
type: 'RESET_IMAGE';
|
|
92
|
-
} | {
|
|
93
|
-
type: 'SET_PDF_PAGE';
|
|
94
|
-
payload: number;
|
|
95
|
-
} | {
|
|
96
|
-
type: 'SET_PDF_TOTAL_PAGES';
|
|
97
|
-
payload: number;
|
|
98
|
-
} | {
|
|
99
|
-
type: 'SET_PDF_OUTLINE';
|
|
100
|
-
payload: boolean;
|
|
101
|
-
} | {
|
|
102
|
-
type: 'SET_EPUB_CHAPTER';
|
|
103
|
-
payload: {
|
|
104
|
-
current: number;
|
|
105
|
-
total: number;
|
|
106
|
-
};
|
|
107
|
-
} | {
|
|
108
|
-
type: 'SET_EPUB_FULL_WIDTH';
|
|
109
|
-
payload: boolean;
|
|
110
|
-
} | {
|
|
111
|
-
type: 'SET_MOBI_CHAPTER';
|
|
112
|
-
payload: {
|
|
113
|
-
current: number;
|
|
114
|
-
total: number;
|
|
115
|
-
};
|
|
116
|
-
} | {
|
|
117
|
-
type: 'SET_MOBI_FULL_WIDTH';
|
|
118
|
-
payload: boolean;
|
|
119
|
-
} | {
|
|
120
|
-
type: 'SET_ZIP_STATS';
|
|
121
|
-
payload: ZipToolbarStats | null;
|
|
122
|
-
} | {
|
|
123
|
-
type: 'SET_TEXT_WORD_WRAP';
|
|
124
|
-
payload: boolean;
|
|
125
|
-
} | {
|
|
126
|
-
type: 'SET_TEXT_HTML_PREVIEW';
|
|
127
|
-
payload: boolean;
|
|
128
|
-
} | {
|
|
129
|
-
type: 'SET_MARKDOWN_VIEW_MODE';
|
|
130
|
-
payload: 'preview' | 'source';
|
|
131
|
-
};
|
|
132
|
-
/**
|
|
133
|
-
* 渲染器事件处理器集合
|
|
134
|
-
*/
|
|
135
|
-
export interface RendererHandlers {
|
|
136
|
-
onZoomIn: () => void;
|
|
137
|
-
onZoomOut: () => void;
|
|
138
|
-
onZoomChange: (zoom: number) => void;
|
|
139
|
-
onRotateLeft: () => void;
|
|
140
|
-
onRotateRight: () => void;
|
|
141
|
-
onReset: () => void;
|
|
142
|
-
onFitToWidth: () => void;
|
|
143
|
-
onOriginalSize: () => void;
|
|
144
|
-
onPrevPage: () => void;
|
|
145
|
-
onNextPage: () => void;
|
|
146
|
-
onToggleOutline: () => void;
|
|
147
|
-
onToggleWrap: () => void;
|
|
148
|
-
onToggleHtmlPreview: () => void;
|
|
149
|
-
onToggleViewMode: () => void;
|
|
150
|
-
[key: string]: (() => void) | ((value: any) => void);
|
|
151
|
-
}
|
|
152
|
-
//# sourceMappingURL=types.d.ts.map
|
package/lib/hooks/types.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/hooks/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
export interface UseBookRendererReturn<T> {
|
|
2
|
-
ref: React.RefObject<T | null>;
|
|
3
|
-
current: number;
|
|
4
|
-
total: number;
|
|
5
|
-
fullWidth: boolean;
|
|
6
|
-
setFullWidth: React.Dispatch<React.SetStateAction<boolean>>;
|
|
7
|
-
handleChapterChange: (current: number, total: number) => void;
|
|
8
|
-
}
|
|
9
|
-
/**
|
|
10
|
-
* 书籍渲染器(EPUB/Mobi)通用逻辑 hook
|
|
11
|
-
* 统一 ref、状态管理和章节变化回调
|
|
12
|
-
*/
|
|
13
|
-
export declare function useBookRenderer<T>(onChapterChange?: (current: number, total: number) => void): UseBookRendererReturn<T>;
|
|
14
|
-
//# sourceMappingURL=useBookRenderer.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useBookRenderer.d.ts","sourceRoot":"","sources":["../../src/hooks/useBookRenderer.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,qBAAqB,CAAC,CAAC;IACtC,GAAG,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;IAC5D,mBAAmB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CAC/D;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAC/B,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,GACzD,qBAAqB,CAAC,CAAC,CAAC,CAuB1B"}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import type { RendererState, RendererAction } from './types';
|
|
2
|
-
/**
|
|
3
|
-
* 文件预览状态管理 hook
|
|
4
|
-
* 自动在 currentIndex 改变时重置所有状态
|
|
5
|
-
*/
|
|
6
|
-
export declare function useFilePreviewState(currentIndex: number): {
|
|
7
|
-
state: RendererState;
|
|
8
|
-
dispatch: React.Dispatch<RendererAction>;
|
|
9
|
-
};
|
|
10
|
-
//# sourceMappingURL=useFilePreviewState.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useFilePreviewState.d.ts","sourceRoot":"","sources":["../../src/hooks/useFilePreviewState.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE7D;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,YAAY,EAAE,MAAM,GAAG;IACzD,KAAK,EAAE,aAAa,CAAC;IACrB,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;CAC1C,CAQA"}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
export interface UseImageAutoFitParams {
|
|
2
|
-
enabled: boolean;
|
|
3
|
-
naturalWidth: number;
|
|
4
|
-
naturalHeight: number;
|
|
5
|
-
containerRef: React.RefObject<HTMLDivElement | null>;
|
|
6
|
-
onZoomChange: (zoom: number) => void;
|
|
7
|
-
}
|
|
8
|
-
/**
|
|
9
|
-
* 图片自动适应窗口 hook
|
|
10
|
-
* 当图片加载完成后,自动计算适应窗口的缩放比例
|
|
11
|
-
*/
|
|
12
|
-
export declare function useImageAutoFit({ enabled, naturalWidth, naturalHeight, containerRef, onZoomChange, }: UseImageAutoFitParams): void;
|
|
13
|
-
//# sourceMappingURL=useImageAutoFit.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useImageAutoFit.d.ts","sourceRoot":"","sources":["../../src/hooks/useImageAutoFit.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IACrD,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACtC;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,EAC9B,OAAO,EACP,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,YAAY,GACb,EAAE,qBAAqB,GAAG,IAAI,CAa9B"}
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import type { ToolbarGroup } from '../renderers/toolbar.types';
|
|
2
|
-
import type { Translator } from '@eternalheart/file-preview-core';
|
|
3
|
-
import type { CustomRenderer, CustomRendererContext, PreviewFile } from '../types';
|
|
4
|
-
import type { RendererState } from './types';
|
|
5
|
-
import { type ToolbarFactoryContext } from '../toolbar/registry';
|
|
6
|
-
/**
|
|
7
|
-
* useToolbarConfig 所需的 handlers(不含 state/t/fileName,由 hook 内部合并)
|
|
8
|
-
*/
|
|
9
|
-
export type ToolbarConfigHandlers = Omit<ToolbarFactoryContext, 'state' | 't' | 'fileName'>;
|
|
10
|
-
export interface UseToolbarConfigParams {
|
|
11
|
-
fileType: string;
|
|
12
|
-
fileName: string;
|
|
13
|
-
state: RendererState;
|
|
14
|
-
handlers: ToolbarConfigHandlers;
|
|
15
|
-
t: Translator;
|
|
16
|
-
customRenderer?: CustomRenderer | null;
|
|
17
|
-
currentFile: PreviewFile;
|
|
18
|
-
customRendererContext: CustomRendererContext;
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* 工具栏配置 hook
|
|
22
|
-
* 根据文件类型和自定义渲染器返回工具栏配置
|
|
23
|
-
*/
|
|
24
|
-
export declare function useToolbarConfig({ fileType, fileName, state, handlers, t, customRenderer, currentFile, customRendererContext, }: UseToolbarConfigParams): ToolbarGroup[];
|
|
25
|
-
//# sourceMappingURL=useToolbarConfig.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useToolbarConfig.d.ts","sourceRoot":"","sources":["../../src/hooks/useToolbarConfig.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,KAAK,EAAE,cAAc,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACnF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,EAAoB,KAAK,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAEnF;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAAG,IAAI,CAAC,qBAAqB,EAAE,OAAO,GAAG,GAAG,GAAG,UAAU,CAAC,CAAC;AAE5F,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,aAAa,CAAC;IACrB,QAAQ,EAAE,qBAAqB,CAAC;IAChC,CAAC,EAAE,UAAU,CAAC;IACd,cAAc,CAAC,EAAE,cAAc,GAAG,IAAI,CAAC;IACvC,WAAW,EAAE,WAAW,CAAC;IACzB,qBAAqB,EAAE,qBAAqB,CAAC;CAC9C;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,QAAQ,EACR,QAAQ,EACR,KAAK,EACL,QAAQ,EACR,CAAC,EACD,cAAc,EACd,WAAW,EACX,qBAAqB,GACtB,EAAE,sBAAsB,GAAG,YAAY,EAAE,CAezC"}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import type { ToolbarGroup } from '../toolbar.types';
|
|
3
|
-
import type { EpubRendererHandle } from './index';
|
|
4
|
-
import type { Translator } from '@eternalheart/file-preview-core';
|
|
5
|
-
export interface EpubToolbarContext {
|
|
6
|
-
epubRef: React.RefObject<EpubRendererHandle | null>;
|
|
7
|
-
current: number;
|
|
8
|
-
total: number;
|
|
9
|
-
fullWidth: boolean;
|
|
10
|
-
t: Translator;
|
|
11
|
-
}
|
|
12
|
-
export declare function getEpubToolbarGroups(ctx: EpubToolbarContext): ToolbarGroup[];
|
|
13
|
-
//# sourceMappingURL=toolbar.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"toolbar.d.ts","sourceRoot":"","sources":["../../../src/renderers/Epub/toolbar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAClD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAElE,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAAC;IACpD,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,OAAO,CAAC;IACnB,CAAC,EAAE,UAAU,CAAC;CACf;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,kBAAkB,GAAG,YAAY,EAAE,CAyB5E"}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import type { ToolbarGroup } from '../toolbar.types';
|
|
2
|
-
import type { Translator } from '@eternalheart/file-preview-core';
|
|
3
|
-
export interface ImageToolbarContext {
|
|
4
|
-
zoom: number;
|
|
5
|
-
onZoomIn: () => void;
|
|
6
|
-
onZoomOut: () => void;
|
|
7
|
-
onFitToWidth: () => void;
|
|
8
|
-
onOriginalSize: () => void;
|
|
9
|
-
onRotateLeft: () => void;
|
|
10
|
-
onRotateRight: () => void;
|
|
11
|
-
onReset: () => void;
|
|
12
|
-
t: Translator;
|
|
13
|
-
}
|
|
14
|
-
export declare function getImageToolbarGroups(ctx: ImageToolbarContext): ToolbarGroup[];
|
|
15
|
-
//# sourceMappingURL=toolbar.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"toolbar.d.ts","sourceRoot":"","sources":["../../../src/renderers/Image/toolbar.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAmBlE,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,CAAC,EAAE,UAAU,CAAC;CACf;AAED,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,mBAAmB,GAAG,YAAY,EAAE,CA2B9E"}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import type { ToolbarGroup } from '../toolbar.types';
|
|
2
|
-
import type { Translator } from '@eternalheart/file-preview-core';
|
|
3
|
-
export interface MarkdownToolbarContext {
|
|
4
|
-
viewMode: 'preview' | 'source';
|
|
5
|
-
onToggleViewMode: () => void;
|
|
6
|
-
t: Translator;
|
|
7
|
-
}
|
|
8
|
-
export declare function getMarkdownToolbarGroups(ctx: MarkdownToolbarContext): ToolbarGroup[];
|
|
9
|
-
//# sourceMappingURL=toolbar.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"toolbar.d.ts","sourceRoot":"","sources":["../../../src/renderers/Markdown/toolbar.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAElE,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,SAAS,GAAG,QAAQ,CAAC;IAC/B,gBAAgB,EAAE,MAAM,IAAI,CAAC;IAC7B,CAAC,EAAE,UAAU,CAAC;CACf;AAED,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,sBAAsB,GAAG,YAAY,EAAE,CAepF"}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import type { ToolbarGroup } from '../toolbar.types';
|
|
3
|
-
import type { MobiRendererHandle } from './index';
|
|
4
|
-
import type { Translator } from '@eternalheart/file-preview-core';
|
|
5
|
-
export interface MobiToolbarContext {
|
|
6
|
-
mobiRef: React.RefObject<MobiRendererHandle | null>;
|
|
7
|
-
current: number;
|
|
8
|
-
total: number;
|
|
9
|
-
fullWidth: boolean;
|
|
10
|
-
t: Translator;
|
|
11
|
-
}
|
|
12
|
-
export declare function getMobiToolbarGroups(ctx: MobiToolbarContext): ToolbarGroup[];
|
|
13
|
-
//# sourceMappingURL=toolbar.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"toolbar.d.ts","sourceRoot":"","sources":["../../../src/renderers/Mobi/toolbar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAClD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAElE,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAAC;IACpD,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,OAAO,CAAC;IACnB,CAAC,EAAE,UAAU,CAAC;CACf;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,kBAAkB,GAAG,YAAY,EAAE,CA8C5E"}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import type { ToolbarGroup } from '../toolbar.types';
|
|
2
|
-
import type { Translator } from '@eternalheart/file-preview-core';
|
|
3
|
-
export interface PdfToolbarContext {
|
|
4
|
-
zoom: number;
|
|
5
|
-
currentPage: number;
|
|
6
|
-
totalPages: number;
|
|
7
|
-
onZoomIn: () => void;
|
|
8
|
-
onZoomOut: () => void;
|
|
9
|
-
onReset: () => void;
|
|
10
|
-
onPrevPage: () => void;
|
|
11
|
-
onNextPage: () => void;
|
|
12
|
-
onToggleOutline?: () => void;
|
|
13
|
-
t: Translator;
|
|
14
|
-
}
|
|
15
|
-
export declare function getPdfToolbarGroups(ctx: PdfToolbarContext): ToolbarGroup[];
|
|
16
|
-
//# sourceMappingURL=toolbar.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"toolbar.d.ts","sourceRoot":"","sources":["../../../src/renderers/Pdf/toolbar.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAElE,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,IAAI,CAAC;IAC7B,CAAC,EAAE,UAAU,CAAC;CACf;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,iBAAiB,GAAG,YAAY,EAAE,CAsC1E"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import type { ToolbarGroup } from '../toolbar.types';
|
|
2
|
-
import type { Translator } from '@eternalheart/file-preview-core';
|
|
3
|
-
export interface TextToolbarContext {
|
|
4
|
-
wordWrap: boolean;
|
|
5
|
-
onToggleWrap: () => void;
|
|
6
|
-
isHtml: boolean;
|
|
7
|
-
htmlPreview: boolean;
|
|
8
|
-
onToggleHtmlPreview: () => void;
|
|
9
|
-
t: Translator;
|
|
10
|
-
}
|
|
11
|
-
export declare function getTextToolbarGroups(ctx: TextToolbarContext): ToolbarGroup[];
|
|
12
|
-
//# sourceMappingURL=toolbar.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"toolbar.d.ts","sourceRoot":"","sources":["../../../src/renderers/Text/toolbar.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAElE,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,OAAO,CAAC;IAClB,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE,OAAO,CAAC;IACrB,mBAAmB,EAAE,MAAM,IAAI,CAAC;IAChC,CAAC,EAAE,UAAU,CAAC;CACf;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,kBAAkB,GAAG,YAAY,EAAE,CA8B5E"}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import type { ToolbarGroup } from '../toolbar.types';
|
|
2
|
-
import type { Translator } from '@eternalheart/file-preview-core';
|
|
3
|
-
export interface ZipToolbarStats {
|
|
4
|
-
files: number;
|
|
5
|
-
dirs: number;
|
|
6
|
-
size: number;
|
|
7
|
-
}
|
|
8
|
-
export interface ZipToolbarContext {
|
|
9
|
-
stats: ZipToolbarStats | null;
|
|
10
|
-
t: Translator;
|
|
11
|
-
}
|
|
12
|
-
export declare function getZipToolbarGroups({ stats }: ZipToolbarContext): ToolbarGroup[];
|
|
13
|
-
//# sourceMappingURL=toolbar.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"toolbar.d.ts","sourceRoot":"","sources":["../../../src/renderers/Zip/toolbar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAErD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAElE,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,eAAe,GAAG,IAAI,CAAC;IAC9B,CAAC,EAAE,UAAU,CAAC;CACf;AAED,wBAAgB,mBAAmB,CAAC,EAAE,KAAK,EAAE,EAAE,iBAAiB,GAAG,YAAY,EAAE,CAahF"}
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
import type { ToolbarGroup } from '../renderers/toolbar.types';
|
|
2
|
-
import type { Translator } from '@eternalheart/file-preview-core';
|
|
3
|
-
import type { RendererState } from '../hooks/types';
|
|
4
|
-
import type { EpubRendererHandle } from '../renderers/Epub';
|
|
5
|
-
import type { MobiRendererHandle } from '../renderers/Mobi';
|
|
6
|
-
/**
|
|
7
|
-
* 工具栏配置工厂调用上下文
|
|
8
|
-
* 包含状态、回调引用和 i18n 翻译函数
|
|
9
|
-
*/
|
|
10
|
-
export interface ToolbarFactoryContext {
|
|
11
|
-
state: RendererState;
|
|
12
|
-
t: Translator;
|
|
13
|
-
fileName: string;
|
|
14
|
-
onZoomIn: () => void;
|
|
15
|
-
onZoomOut: () => void;
|
|
16
|
-
onReset: () => void;
|
|
17
|
-
onFitToWidth: () => void;
|
|
18
|
-
onOriginalSize: () => void;
|
|
19
|
-
onRotateLeft: () => void;
|
|
20
|
-
onRotateRight: () => void;
|
|
21
|
-
onPrevPage: () => void;
|
|
22
|
-
onNextPage: () => void;
|
|
23
|
-
onToggleOutline: () => void;
|
|
24
|
-
onToggleWrap: () => void;
|
|
25
|
-
onToggleHtmlPreview: () => void;
|
|
26
|
-
onToggleViewMode: () => void;
|
|
27
|
-
epubRef: React.RefObject<EpubRendererHandle | null>;
|
|
28
|
-
mobiRef: React.RefObject<MobiRendererHandle | null>;
|
|
29
|
-
epubCurrent?: number;
|
|
30
|
-
epubTotal?: number;
|
|
31
|
-
epubFullWidth?: boolean;
|
|
32
|
-
mobiCurrent?: number;
|
|
33
|
-
mobiTotal?: number;
|
|
34
|
-
mobiFullWidth?: boolean;
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* 工具栏配置工厂签名
|
|
38
|
-
*/
|
|
39
|
-
export type ToolbarConfigFactory = (ctx: ToolbarFactoryContext) => ToolbarGroup[];
|
|
40
|
-
/**
|
|
41
|
-
* 根据文件类型获取工具栏配置
|
|
42
|
-
* @param fileType 文件类型
|
|
43
|
-
* @param ctx 上下文(状态 + 回调)
|
|
44
|
-
* @returns 工具栏组数组,未知类型返回空数组
|
|
45
|
-
*/
|
|
46
|
-
export declare function getToolbarGroups(fileType: string, ctx: ToolbarFactoryContext): ToolbarGroup[];
|
|
47
|
-
/**
|
|
48
|
-
* 注册自定义工具栏工厂(供外部扩展)
|
|
49
|
-
*/
|
|
50
|
-
export declare function registerToolbarFactory(fileType: string, factory: ToolbarConfigFactory): void;
|
|
51
|
-
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/toolbar/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAS5D;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,aAAa,CAAC;IACrB,CAAC,EAAE,UAAU,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IAEjB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,aAAa,EAAE,MAAM,IAAI,CAAC;IAE1B,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,eAAe,EAAE,MAAM,IAAI,CAAC;IAE5B,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,mBAAmB,EAAE,MAAM,IAAI,CAAC;IAEhC,gBAAgB,EAAE,MAAM,IAAI,CAAC;IAE7B,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAAC;IACpD,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAAC;IAEpD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG,CAAC,GAAG,EAAE,qBAAqB,KAAK,YAAY,EAAE,CAAC;AA0ElF;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,qBAAqB,GACzB,YAAY,EAAE,CAGhB;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,oBAAoB,GAAG,IAAI,CAE5F"}
|