@work-zhanguo/light-file-preview 0.0.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.
Files changed (53) hide show
  1. package/LICENSE +661 -0
  2. package/README.md +122 -0
  3. package/dist/DocxRenderer-B8Ed3qFw.js +42 -0
  4. package/dist/PdfRenderer-CYtwJLrP.js +57 -0
  5. package/dist/SheetRenderer-C9AKQiKN.js +77 -0
  6. package/dist/TextRenderer-W4uPsa5O.js +59 -0
  7. package/dist/UnsupportedRenderer-BpyBTIIE.js +32 -0
  8. package/dist/docx-preview-B2OPGnfm.js +5525 -0
  9. package/dist/index-BlBE9ZR-.js +304 -0
  10. package/dist/light-file-preview.js +7 -0
  11. package/dist/light-file-preview.umd.cjs +209 -0
  12. package/dist/marked.esm-toXckLRC.js +1577 -0
  13. package/dist/pdf-B2JYpzlX.js +14597 -0
  14. package/dist/purify.es-D5dazAgD.js +553 -0
  15. package/dist/standalone/light-file-preview.iife.js +236 -0
  16. package/dist/standalone/style.css +1 -0
  17. package/dist/style.css +1 -0
  18. package/dist/text-CcxmtFce.js +24 -0
  19. package/dist/types/App.vue.d.ts +2 -0
  20. package/dist/types/DocsApp.vue.d.ts +2 -0
  21. package/dist/types/components/FilePreview.vue.d.ts +34 -0
  22. package/dist/types/components/renderers/DocxRenderer.vue.d.ts +12 -0
  23. package/dist/types/components/renderers/PdfRenderer.vue.d.ts +13 -0
  24. package/dist/types/components/renderers/SheetRenderer.vue.d.ts +14 -0
  25. package/dist/types/components/renderers/TextRenderer.vue.d.ts +15 -0
  26. package/dist/types/components/renderers/UnsupportedRenderer.vue.d.ts +6 -0
  27. package/dist/types/constants/file.d.ts +12 -0
  28. package/dist/types/docs-main.d.ts +1 -0
  29. package/dist/types/index.d.ts +10 -0
  30. package/dist/types/main.d.ts +1 -0
  31. package/dist/types/standalone-api.d.ts +17 -0
  32. package/dist/types/standalone.d.ts +6 -0
  33. package/dist/types/types.d.ts +17 -0
  34. package/dist/types/utils/download.d.ts +1 -0
  35. package/dist/types/utils/source.d.ts +9 -0
  36. package/dist/types/utils/text.d.ts +3 -0
  37. package/dist/types/vue2.d.ts +8 -0
  38. package/dist/vue2/DocxRenderer-IkLQeCjg.js +42 -0
  39. package/dist/vue2/PdfRenderer-DmgMRpqS.js +57 -0
  40. package/dist/vue2/SheetRenderer-CuAyFgj9.js +77 -0
  41. package/dist/vue2/TextRenderer-Bxqs7APd.js +59 -0
  42. package/dist/vue2/UnsupportedRenderer-Cs2uPl_6.js +31 -0
  43. package/dist/vue2/docx-preview-B2OPGnfm.js +5525 -0
  44. package/dist/vue2/light-file-preview-vue2.js +5 -0
  45. package/dist/vue2/light-file-preview-vue2.umd.cjs +236 -0
  46. package/dist/vue2/marked.esm-toXckLRC.js +1577 -0
  47. package/dist/vue2/pdf-B2JYpzlX.js +14597 -0
  48. package/dist/vue2/purify.es-D5dazAgD.js +553 -0
  49. package/dist/vue2/text-CcxmtFce.js +24 -0
  50. package/dist/vue2/vue2-CzAkhodr.js +6206 -0
  51. package/dist/vue2/xlsx-CZNBZqms.js +24774 -0
  52. package/dist/xlsx-CZNBZqms.js +24774 -0
  53. package/package.json +66 -0
package/README.md ADDED
@@ -0,0 +1,122 @@
1
+ # @work-zhanguo/light-file-preview
2
+
3
+ 轻量级通用文件预览项目,基于 Vue3 实现,兼顾 npm 集成和独立产物嵌入。
4
+
5
+ ## 特性
6
+
7
+ - 支持通过文件路径直接预览,默认内联展示
8
+ - 支持弹窗模式嵌入,也支持独立 IIFE 产物挂载到任意 HTML 节点
9
+ - 支持统一下载,无法在线预览的格式仍可下载
10
+ - PDF 使用 `pdf.js`,DOCX 使用 `docx-preview`,表格使用 `SheetJS`
11
+ - 文本、代码、JSON、Markdown 采用按需读取与加载过渡,兼顾等待体验
12
+ - 支持中文路径自动编码处理,降低路径拼接集成成本
13
+
14
+ ## 支持情况
15
+
16
+ | 类型 | 扩展名 | 预览说明 |
17
+ | --- | --- | --- |
18
+ | 图片 | `png/jpg/jpeg/gif/webp/bmp/svg` | 高保真原生预览 |
19
+ | PDF | `pdf` | `pdf.js` 高保真渲染 |
20
+ | 文本 | `txt/json/js/ts/jsx/tsx/html/css/md` | 文本或 Markdown 预览 |
21
+ | Word | `docx` | `docx-preview` 中高保真 |
22
+ | Excel | `xls/xlsx/csv` | `SheetJS` 数据高保真 |
23
+ | 视频 | `mp4/webm` | 原生播放器 |
24
+ | 音频 | `mp3/wav` | 原生播放器 |
25
+ | 其他 | `doc/ppt/pptx` 等 | 默认提示暂不支持预览,但支持下载 |
26
+
27
+ ## 安装
28
+
29
+ ```bash
30
+ npm install @work-zhanguo/light-file-preview
31
+ ```
32
+
33
+ ## Vue3 使用
34
+
35
+ ```ts
36
+ import { createApp } from 'vue';
37
+ import App from './App.vue';
38
+ import LightFilePreview from '@work-zhanguo/light-file-preview';
39
+ import '@work-zhanguo/light-file-preview/style.css';
40
+
41
+ createApp(App).use(LightFilePreview).mount('#app');
42
+ ```
43
+
44
+ ```vue
45
+ <template>
46
+ <LightFilePreview source="/files/示例.pdf" />
47
+ </template>
48
+ ```
49
+
50
+ ## 按需引入
51
+
52
+ ```vue
53
+ <script setup lang="ts">
54
+ import { FilePreview } from '@work-zhanguo/light-file-preview';
55
+ import '@work-zhanguo/light-file-preview/style.css';
56
+ </script>
57
+
58
+ <template>
59
+ <FilePreview source="/assets/report.docx" mode="dialog" v-model:visible="visible" />
60
+ </template>
61
+ ```
62
+
63
+ ## 独立产物嵌入任意项目
64
+
65
+ 执行构建后,将 `dist/standalone/light-file-preview.iife.js` 和 `dist/standalone/style.css` 复制到目标项目。
66
+
67
+ ```html
68
+ <link rel="stylesheet" href="/vendor/light-file-preview/style.css" />
69
+ <div id="preview-root"></div>
70
+ <script src="/vendor/light-file-preview/light-file-preview.iife.js"></script>
71
+ <script>
72
+ window.LightFilePreview.mount('#preview-root', {
73
+ source: '/uploads/合同.pdf'
74
+ });
75
+ </script>
76
+ ```
77
+
78
+ 弹窗模式:
79
+
80
+ ```html
81
+ <script>
82
+ window.LightFilePreview.openDialog({
83
+ source: '/uploads/报表.xlsx'
84
+ });
85
+ </script>
86
+ ```
87
+
88
+ ## 组件参数
89
+
90
+ | 参数 | 类型 | 默认值 | 说明 |
91
+ | --- | --- | --- | --- |
92
+ | `source` | `string \| File \| Blob` | - | 文件路径或二进制对象 |
93
+ | `fileName` | `string` | - | 自定义文件名 |
94
+ | `mode` | `'inline' \| 'dialog'` | `inline` | 预览模式 |
95
+ | `visible` | `boolean` | `true` | 弹窗是否显示 |
96
+ | `loadingText` | `string` | `文件加载中...` | 加载提示 |
97
+ | `textEncoding` | `string` | `utf-8` | 文本解码编码 |
98
+ | `maxTextBytes` | `number` | `2097152` | 文本最多读取字节数 |
99
+ | `maxSheetRows` | `number` | `200` | 表格最多展示行数 |
100
+ | `maxSheetCols` | `number` | `50` | 表格最多展示列数 |
101
+ | `pdfScale` | `number` | `1.35` | PDF 渲染缩放 |
102
+ | `showToolbar` | `boolean` | `true` | 是否显示工具栏 |
103
+
104
+ ## 集成说明
105
+
106
+ - 文件路径必须是浏览器可访问地址,跨域资源需目标服务端允许 CORS
107
+ - 组件会在 `File/Blob` 场景自动创建并释放 `Object URL`
108
+ - 大文件文本预览默认只截取前 2MB,避免阻塞页面
109
+ - `.html` 默认按文本展示,不直接执行内容,降低安全风险
110
+
111
+ ## 开发
112
+
113
+ ```bash
114
+ npm install
115
+ npm run dev
116
+ ```
117
+
118
+ ## 打包
119
+
120
+ ```bash
121
+ npm run build
122
+ ```
@@ -0,0 +1,42 @@
1
+ import { defineComponent as s, ref as f, onMounted as u, onBeforeUnmount as d, openBlock as m, createElementBlock as p } from "vue";
2
+ import { r as v } from "./text-CcxmtFce.js";
3
+ const x = /* @__PURE__ */ s({
4
+ __name: "DocxRenderer",
5
+ props: {
6
+ source: {}
7
+ },
8
+ emits: ["loading", "error"],
9
+ setup(a, { emit: c }) {
10
+ const i = a, n = c, e = f(null), o = new AbortController();
11
+ async function l() {
12
+ n("loading", !0);
13
+ try {
14
+ const r = await v(i.source, o.signal), { renderAsync: t } = await import("./docx-preview-B2OPGnfm.js");
15
+ if (!e.value)
16
+ return;
17
+ e.value.innerHTML = "", await t(r, e.value, void 0, {
18
+ className: "lfp-docx-content",
19
+ ignoreWidth: !1,
20
+ ignoreHeight: !1,
21
+ useBase64URL: !0
22
+ });
23
+ } catch (r) {
24
+ n("error", r instanceof Error ? r : new Error("DOCX 预览失败"));
25
+ } finally {
26
+ n("loading", !1);
27
+ }
28
+ }
29
+ return u(() => {
30
+ l();
31
+ }), d(() => {
32
+ o.abort(), e.value && (e.value.innerHTML = "");
33
+ }), (r, t) => (m(), p("div", {
34
+ ref_key: "containerRef",
35
+ ref: e,
36
+ class: "lfp-document lfp-docx"
37
+ }, null, 512));
38
+ }
39
+ });
40
+ export {
41
+ x as default
42
+ };