@flyfish-group/file-viewer 1.0.22 → 1.0.24
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 +62 -28
- package/dist/components/3MFLoader.js +1 -1
- package/dist/components/AMFLoader.js +1 -1
- package/dist/components/AudioViewer.js +1 -1
- package/dist/components/CadViewer.js +1 -1
- package/dist/components/CodeViewer.js +1 -1
- package/dist/components/ColladaLoader.js +1 -1
- package/dist/components/DrawingViewer.js +1 -1
- package/dist/components/EdaViewer.js +1 -1
- package/dist/components/EmailViewer.js +1 -1
- package/dist/components/EpubViewer.js +1 -1
- package/dist/components/FBXLoader.js +1 -1
- package/dist/components/GLTFLoader.js +1 -1
- package/dist/components/ImageViewer.js +1 -1
- package/dist/components/KMZLoader.js +1 -1
- package/dist/components/MarkdownViewer.js +1 -1
- package/dist/components/OBJLoader.js +1 -1
- package/dist/components/OfdViewer.js +1 -1
- package/dist/components/PCDLoader.js +1 -1
- package/dist/components/PLYLoader.js +1 -1
- package/dist/components/STLLoader.js +1 -1
- package/dist/components/TDSLoader.js +1 -1
- package/dist/components/USDLoader.js +1 -1
- package/dist/components/UmdViewer.js +2 -2
- package/dist/components/VRMLLoader.js +1 -1
- package/dist/components/VTKLoader.js +1 -1
- package/dist/components/XYZLoader.js +1 -1
- package/dist/components/XlsxTable.js +1 -1
- package/dist/components/___vite-browser-external_commonjs-proxy.js +1 -1
- package/dist/components/_commonjs-dynamic-modules.js +1 -1
- package/dist/components/_commonjsHelpers.js +1 -1
- package/dist/components/ar-SA-G6X2FPQ2.js +1 -1
- package/dist/components/arc.js +1 -1
- package/dist/components/architecture-7EHR7CIX.js +1 -1
- package/dist/components/architectureDiagram-3BPJPVTR.js +1 -1
- package/dist/components/az-AZ-76LH7QW2.js +1 -1
- package/dist/components/bg-BG-XCXSNQG7.js +1 -1
- package/dist/components/blockDiagram-GPEHLZMM.js +1 -1
- package/dist/components/bn-BD-2XOGV67Q.js +1 -1
- package/dist/components/c4Diagram-AAUBKEIU.js +1 -1
- package/dist/components/ca-ES-6MX7JW3Y.js +1 -1
- package/dist/components/cfb.js +1 -1
- package/dist/components/channel.js +1 -1
- package/dist/components/chunk-2J33WTMH.js +1 -1
- package/dist/components/chunk-4BX2VUAB.js +1 -1
- package/dist/components/chunk-55IACEB6.js +1 -1
- package/dist/components/chunk-727SXJPM.js +1 -1
- package/dist/components/chunk-AQP2D5EJ.js +1 -1
- package/dist/components/chunk-FMBD7UC4.js +1 -1
- package/dist/components/chunk-ND2GUHAM.js +1 -1
- package/dist/components/chunk-QZHKN3VN.js +1 -1
- package/dist/components/classDiagram-4FO5ZUOK.js +1 -1
- package/dist/components/classDiagram-v2-Q7XG4LA2.js +1 -1
- package/dist/components/cose-bilkent-S5V4N54A.js +1 -1
- package/dist/components/cs-CZ-2BRQDIVT.js +1 -1
- package/dist/components/cytoscape.esm.js +1 -1
- package/dist/components/da-DK-5WZEPLOC.js +1 -1
- package/dist/components/dagre-BM42HDAG.js +1 -1
- package/dist/components/de-DE-XR44H4JA.js +1 -1
- package/dist/components/defaultLocale.js +1 -1
- package/dist/components/diagram-2AECGRRQ.js +1 -1
- package/dist/components/diagram-5GNKFQAL.js +1 -1
- package/dist/components/diagram-KO2AKTUF.js +1 -1
- package/dist/components/diagram-LMA3HP47.js +1 -1
- package/dist/components/diagram-OG6HWLK6.js +1 -1
- package/dist/components/directory-open-01563666.js +1 -1
- package/dist/components/directory-open-4ed118d0.js +1 -1
- package/dist/components/docx-preview.js +2 -2
- package/dist/components/el-GR-BZB4AONW.js +1 -1
- package/dist/components/en-B4ZKOASM.js +1 -1
- package/dist/components/erDiagram-TEJ5UH35.js +1 -1
- package/dist/components/es-ES-U4NZUMDT.js +1 -1
- package/dist/components/eu-ES-A7QVB2H4.js +1 -1
- package/dist/components/eventmodeling-FCH6USID.js +1 -1
- package/dist/components/fa-IR-HGAKTJCU.js +1 -1
- package/dist/components/fflate.module.js +1 -1
- package/dist/components/fi-FI-Z5N7JZ37.js +1 -1
- package/dist/components/file-open-002ab408.js +1 -1
- package/dist/components/file-open-7c801643.js +1 -1
- package/dist/components/file-save-3189631c.js +1 -1
- package/dist/components/file-save-745eba88.js +1 -1
- package/dist/components/flowDiagram-I6XJVG4X.js +1 -1
- package/dist/components/fr-FR-RHASNOE6.js +1 -1
- package/dist/components/ganttDiagram-6RSMTGT7.js +1 -1
- package/dist/components/gitGraph-WXDBUCRP.js +1 -1
- package/dist/components/gitGraphDiagram-PVQCEYII.js +1 -1
- package/dist/components/gl-ES-HMX3MZ6V.js +1 -1
- package/dist/components/global-compiler.js +1 -1
- package/dist/components/global-renderer.js +1 -1
- package/dist/components/graph.js +1 -1
- package/dist/components/he-IL-6SHJWFNN.js +1 -1
- package/dist/components/hi-IN-IWLTKZ5I.js +1 -1
- package/dist/components/hu-HU-A5ZG7DT2.js +1 -1
- package/dist/components/id-ID-SAP4L64H.js +1 -1
- package/dist/components/image-GAAHSSAO.js +1 -1
- package/dist/components/image-blob-reduce.esm.js +1 -1
- package/dist/components/index10.js +1 -1
- package/dist/components/index11.js +1 -1
- package/dist/components/index12.js +1 -1
- package/dist/components/index13.js +1 -1
- package/dist/components/index14.js +1 -1
- package/dist/components/index15.js +1 -1
- package/dist/components/index16.js +1 -1
- package/dist/components/index17.js +1 -1
- package/dist/components/index18.js +1 -1
- package/dist/components/index19.js +1 -1
- package/dist/components/index2.js +1 -1
- package/dist/components/index20.js +1 -1
- package/dist/components/index21.js +1 -1
- package/dist/components/index22.js +2 -2
- package/dist/components/index23.js +1 -1
- package/dist/components/index24.js +1 -1
- package/dist/components/index3.js +1 -1
- package/dist/components/index4.js +1 -1
- package/dist/components/index5.js +1 -1
- package/dist/components/index6.js +1 -1
- package/dist/components/index7.js +1 -1
- package/dist/components/index8.js +1 -1
- package/dist/components/index9.js +1 -1
- package/dist/components/info-J43DQDTF.js +1 -1
- package/dist/components/infoDiagram-5YYISTIA.js +1 -1
- package/dist/components/init.js +1 -1
- package/dist/components/ishikawaDiagram-YF4QCWOH.js +1 -1
- package/dist/components/it-IT-JPQ66NNP.js +1 -1
- package/dist/components/ja-JP-DBVTYXUO.js +1 -1
- package/dist/components/journeyDiagram-JHISSGLW.js +1 -1
- package/dist/components/jszip.min.js +1 -1
- package/dist/components/kaa-6HZHGXH3.js +1 -1
- package/dist/components/kab-KAB-ZGHBKWFO.js +1 -1
- package/dist/components/kanban-definition-UN3LZRKU.js +1 -1
- package/dist/components/katex.js +1 -1
- package/dist/components/kk-KZ-P5N5QNE5.js +1 -1
- package/dist/components/km-KH-HSX4SM5Z.js +1 -1
- package/dist/components/ko-KR-MTYHY66A.js +1 -1
- package/dist/components/ku-TR-6OUDTVRD.js +1 -1
- package/dist/components/layout.js +1 -1
- package/dist/components/libarchive.js +1 -1
- package/dist/components/linear.js +1 -1
- package/dist/components/lt-LT-XHIRWOB4.js +1 -1
- package/dist/components/lv-LV-5QDEKY6T.js +1 -1
- package/dist/components/mermaid-parser.core.js +2 -2
- package/dist/components/mindmap-definition-RKZ34NQL.js +1 -1
- package/dist/components/mr-IN-CRQNXWMA.js +1 -1
- package/dist/components/my-MM-5M5IBNSE.js +1 -1
- package/dist/components/nb-NO-T6EIAALU.js +1 -1
- package/dist/components/nestedRender.js +1 -1
- package/dist/components/nl-NL-IS3SIHDZ.js +1 -1
- package/dist/components/nn-NO-6E72VCQL.js +1 -1
- package/dist/components/oc-FR-POXYY2M6.js +1 -1
- package/dist/components/ofd.js +1 -1
- package/dist/components/ordinal.js +1 -1
- package/dist/components/pa-IN-N4M65BXN.js +1 -1
- package/dist/components/packet-YPE3B663.js +1 -1
- package/dist/components/percentages-BXMCSKIN.js +1 -1
- package/dist/components/pica.js +1 -1
- package/dist/components/pie-LRSECV5Y.js +1 -1
- package/dist/components/pie.js +1 -1
- package/dist/components/pieDiagram-4H26LBE5.js +1 -1
- package/dist/components/pl-PL-T2D74RX3.js +1 -1
- package/dist/components/postal-mime.js +1 -1
- package/dist/components/printLayout.js +1 -1
- package/dist/components/pt-BR-5N22H2LF.js +1 -1
- package/dist/components/pt-PT-UZXXM6DQ.js +1 -1
- package/dist/components/quadrantDiagram-W4KKPZXB.js +1 -1
- package/dist/components/radar-GUYGQ44K.js +1 -1
- package/dist/components/requirementDiagram-4Y6WPE33.js +1 -1
- package/dist/components/ro-RO-JPDTUUEW.js +1 -1
- package/dist/components/rough.esm.js +1 -1
- package/dist/components/roundRect.js +1 -1
- package/dist/components/ru-RU-B4JR7IUQ.js +1 -1
- package/dist/components/sankeyDiagram-5OEKKPKP.js +1 -1
- package/dist/components/sequenceDiagram-3UESZ5HK.js +1 -1
- package/dist/components/si-LK-N5RQ5JYF.js +1 -1
- package/dist/components/sk-SK-C5VTKIMK.js +1 -1
- package/dist/components/sl-SI-NN7IZMDC.js +1 -1
- package/dist/components/stateDiagram-AJRCARHV.js +1 -1
- package/dist/components/stateDiagram-v2-BHNVJYJU.js +1 -1
- package/dist/components/subset-shared.chunk.js +1 -1
- package/dist/components/subset-worker.chunk.js +1 -1
- package/dist/components/sv-SE-XGPEYMSR.js +1 -1
- package/dist/components/ta-IN-2NMHFXQM.js +1 -1
- package/dist/components/th-TH-HPSO5L25.js +1 -1
- package/dist/components/time.js +1 -1
- package/dist/components/timeline-definition-PNZ67QCA.js +1 -1
- package/dist/components/tr-TR-DEFEU3FU.js +1 -1
- package/dist/components/transform.js +1 -1
- package/dist/components/treeView-BLDUP644.js +1 -1
- package/dist/components/treemap-LRROVOQU.js +1 -1
- package/dist/components/uk-UA-QMV73CPH.js +1 -1
- package/dist/components/vennDiagram-CIIHVFJN.js +1 -1
- package/dist/components/vi-VN-M7AON7JQ.js +1 -1
- package/dist/components/wardley-L42UT6IY.js +1 -1
- package/dist/components/wardleyDiagram-YWT4CUSO.js +1 -1
- package/dist/components/wasm-pack-shim.js +1 -1
- package/dist/components/wasm-pack-shim2.js +1 -1
- package/dist/components/worker-ref.js +1 -1
- package/dist/components/xychartDiagram-2RQKCTM6.js +1 -1
- package/dist/components/zh-CN-LNUGB5OW.js +1 -1
- package/dist/components/zh-HK-E62DVLB3.js +1 -1
- package/dist/components/zh-TW-RAJ6MFWO.js +1 -1
- package/dist/index.d.ts +48 -0
- package/dist/index.mjs +1 -1
- package/dist/style.css +1 -1
- package/dist/wasm/cad/DwgWorker-CuZJ5EUe.js +349 -0
- package/dist/wasm/cad/dwfv-render.wasm +0 -0
- package/dist/wasm/cad/dwg-worker.js +349 -0
- package/dist/wasm/cad/index-C365l3i9.js +4161 -0
- package/dist/wasm/cad/libredwg-web.js +15 -0
- package/dist/wasm/cad/libredwg-web.wasm +0 -0
- package/package.json +9 -8
- package/dist/components/index25.js +0 -1
package/README.md
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# Flyfish Viewer
|
|
2
2
|
|
|
3
|
+
[简体中文](README.md) | [English](README.en.md)
|
|
4
|
+
|
|
3
5
|
把 Word、Excel、PPT、PDF、Typst、压缩包、邮件、音频和电子书稳稳带进浏览器里。
|
|
4
6
|
|
|
5
7
|
`@flyfish-group/file-viewer3` 是一款基于 Vue 3、TypeScript 和 Vite 构建的纯前端文件预览组件。Vue2.7 项目请使用同能力包 `@flyfish-group/file-viewer`。两条 npm 包线保持一致的格式覆盖、示例体验和 API 语义,Vue3 构建产物作为 React、纯 Web 和其他适配层的统一预览基线。
|
|
@@ -12,25 +14,28 @@
|
|
|
12
14
|
- npm(纯 JS): [@flyfish-group/file-viewer-web](https://www.npmjs.com/package/@flyfish-group/file-viewer-web)
|
|
13
15
|
- 官方文档: [doc.flyfish.dev](https://doc.flyfish.dev)
|
|
14
16
|
- 在线 Demo: [viewer.flyfish.dev](https://viewer.flyfish.dev)
|
|
15
|
-
-
|
|
17
|
+
- 文档比对 Demo: [viewer.flyfish.dev/compare.html](https://viewer.flyfish.dev/compare.html)
|
|
18
|
+
- Docker 镜像发布目标: `flyfishdev/file-viewer:1.0.24`
|
|
19
|
+
- 公开成品仓库(GitHub): [github.com/flyfish-dev/file-viewer](https://github.com/flyfish-dev/file-viewer)
|
|
20
|
+
- 公开成品仓库(Gitee): [gitee.com/flyfish-dev/file-viewer](https://gitee.com/flyfish-dev/file-viewer)
|
|
16
21
|
- 源码自助开通: [https://dev.flyfish.group/shop](https://dev.flyfish.group/shop)
|
|
17
22
|
|
|
18
23
|
## 当前发布版本
|
|
19
24
|
|
|
20
25
|
| 技术栈 | npm 包 | 最新版本 | 推荐分支 | 说明 |
|
|
21
26
|
| --- | --- | --- | --- | --- |
|
|
22
|
-
| Vue3 | `@flyfish-group/file-viewer3` | `1.0.
|
|
23
|
-
| Vue2.7 | `@flyfish-group/file-viewer` | `1.0.
|
|
24
|
-
| React 17 / 18 / 19 | `@flyfish-group/file-viewer-react` | `1.0.
|
|
25
|
-
| 纯 JS | `@flyfish-group/file-viewer-web` | `1.0.
|
|
27
|
+
| Vue3 | `@flyfish-group/file-viewer3` | `1.0.24` | `v3` | 主推版本,也是 React / 纯 Web 私有化 iframe 适配层的构建基线 |
|
|
28
|
+
| Vue2.7 | `@flyfish-group/file-viewer` | `1.0.24` | `main` | 兼容 Vue2 项目,格式能力与 Vue3 保持一致 |
|
|
29
|
+
| React 17 / 18 / 19 | `@flyfish-group/file-viewer-react` | `1.0.24` | 当前仓库子工程 | iframe 组件,默认加载 `/file-viewer/index.html` |
|
|
30
|
+
| 纯 JS | `@flyfish-group/file-viewer-web` | `1.0.24` | 当前仓库子工程 | iframe helper 和 viewer 产物复制工具 |
|
|
26
31
|
|
|
27
32
|
如果你在内网、离线环境,或者 npm 发布权限还没有完成配置,也可以直接使用公开成品仓库 `artifacts/` 里的 tarball。离线安装 React 包时请先安装同版本 web 包:
|
|
28
33
|
|
|
29
34
|
```bash
|
|
30
|
-
npm install ./artifacts/flyfish-group-file-viewer3-1.0.
|
|
31
|
-
npm install ./artifacts/flyfish-group-file-viewer-1.0.
|
|
32
|
-
npm install ./artifacts/flyfish-group-file-viewer-web-1.0.
|
|
33
|
-
npm install ./artifacts/flyfish-group-file-viewer-react-1.0.
|
|
35
|
+
npm install ./artifacts/flyfish-group-file-viewer3-1.0.24.tgz
|
|
36
|
+
npm install ./artifacts/flyfish-group-file-viewer-1.0.24.tgz
|
|
37
|
+
npm install ./artifacts/flyfish-group-file-viewer-web-1.0.24.tgz
|
|
38
|
+
npm install ./artifacts/flyfish-group-file-viewer-react-1.0.24.tgz
|
|
34
39
|
```
|
|
35
40
|
|
|
36
41
|
Vue3、Vue2、React 和纯 JS tarball 都会随公开成品仓库一起生成。离线安装 React 包时请先安装同版本 web 包;React / 纯 JS 包推荐用 `npm install` 获得安装即复制的体验。pnpm 10 默认会拦截依赖包的 `postinstall`,如果看到 `Ignored build scripts: @flyfish-group/file-viewer-web`,请执行 `pnpm approve-builds` 允许该包,或安装后运行 `pnpm exec file-viewer-copy-assets ./public/file-viewer`。
|
|
@@ -40,36 +45,37 @@ Vue3、Vue2、React 和纯 JS tarball 都会随公开成品仓库一起生成。
|
|
|
40
45
|
## 为什么值得接入
|
|
41
46
|
|
|
42
47
|
- **纯前端 Serverless。** 文档解析和展示全部在浏览器内完成,部署简单,不依赖 Office 服务端、LibreOffice 守护进程或额外转码链路。
|
|
43
|
-
- **格式覆盖完整。** 当前内置
|
|
48
|
+
- **格式覆盖完整。** 当前内置 152 个扩展名映射,覆盖 Word、Excel、PowerPoint、PDF、OFD、Typst、压缩包、邮件、OLB/DRA、CAD、3D 模型、Excalidraw、draw.io、EPUB、UMD、Markdown、图片、音频、代码/文本和 MP4,能覆盖绝大多数业务附件场景。
|
|
44
49
|
- **按需异步加载。** PDF、OFD、Typst、压缩包、邮件、OLB/DRA、CAD、3D 模型、绘图、Office、EPUB、UMD、Markdown 和代码高亮渲染器都按需加载,重型解析依赖不会进入其他格式的首屏路径。
|
|
45
|
-
- **预览器操作完整。** 内置下载原文件、打印完整渲染结果、导出渲染后 HTML
|
|
50
|
+
- **预览器操作完整。** 内置下载原文件、打印完整渲染结果、导出渲染后 HTML、水印开关、水印 options、主题 options、搜索高亮、上一个 / 下一个命中、行级定位和 AI 友好文本切片;PDF 使用 PDF.js 原生搜索,Word / Markdown / 代码等文本类格式使用通用 DOM 搜索,避免污染 PDF 文本层、canvas、iframe 等特殊渲染结构;`theme` 支持 `light`、`dark`、`system`,默认跟随系统,浅色业务 UI 可显式锁定 `light`;打印按钮会按当前格式和渲染链路动态显隐,Word / PDF 使用专属完整页导出适配器,不依赖当前视口,适合合同、归档和审批类场景。
|
|
46
51
|
- **集成控制更完整。** 提供加载/卸载生命周期钩子、iframe 事件回传和按钮前置校验机制,下载、打印、导出前可以接入权限验证、审计确认或业务二次弹窗。
|
|
47
|
-
- **阅读体验更像产品。** `.doc`、`.docx`、PDF 都保留灰色工作台、白色纸张、居中阅读和自适应缩放;PDF 兼容旋转页和页面 / 目录导航,Excel 会尽量还原图片和自动文本色,避免“内容能打开但不好读”的落差。
|
|
52
|
+
- **阅读体验更像产品。** `.doc`、`.docx`、PDF 都保留灰色工作台、白色纸张、居中阅读和自适应缩放;DOCX 默认使用 Web Worker 承载 `docx-preview` 的解析和 HTML 构建,并把同一份 docx-preview HTML 按页面渐进挂载,主线程只负责挂载、缩放和打印适配;PDF 兼容旋转页和页面 / 目录导航,Excel 会尽量还原图片和自动文本色,避免“内容能打开但不好读”的落差。
|
|
48
53
|
- **明暗主题有边界。** Demo 外壳、Markdown 和代码预览会适配系统暗色模式;PDF、Word、Excel 等带原始版式的内容保持独立纸张或表格背景,避免全局主题污染文档。
|
|
49
54
|
- **Demo 更适合验收。** 示例文件按文档、表格、图纸、代码、图片等类型分组展示,点击样例即可打开并自动收起选择器。
|
|
55
|
+
- **独立文档比对入口。** 生产 Demo 额外提供 `/compare.html`,左右并排预览两份文档,支持示例、URL、本地上传、交换、重置、同步滚动、聚焦文档搜索、行级定位和 PDF 工具栏隐藏,不污染主预览入口。
|
|
50
56
|
- **Vue2 / Vue3 体验一致。** `main` 分支面向 Vue2.7,`v3` 分支面向 Vue3;两边共享完整格式覆盖、示例文件盒子、文档站和 iframe 集成体验。
|
|
51
57
|
- **组件和独立站两用。** 既支持在 Vue 项目里直接作为组件使用,也支持独立部署后通过 iframe 嵌入到任意系统,方便多业务线复用。
|
|
58
|
+
- **Docker 一键部署。** 提供 nginx 静态镜像、`Dockerfile` 和 buildx 发布脚本,发布镜像覆盖 `linux/amd64` 与 `linux/arm64`。
|
|
52
59
|
- **适合成品交付。** 公开成品仓库、混淆压缩产物、npm tarball、静态部署产物和私有化 iframe 适配包都一起维护,便于下载、验收和二次接入。
|
|
53
60
|
|
|
54
61
|
## 支持格式
|
|
55
62
|
|
|
56
|
-
当前版本内置
|
|
63
|
+
当前版本内置 152 个扩展名映射,覆盖 20 条预览链路。
|
|
57
64
|
|
|
58
65
|
| 类别 | 扩展名 | 当前表现 | 适合场景 |
|
|
59
66
|
| --- | --- | --- | --- |
|
|
60
|
-
| Word | `docx` | `docx-preview
|
|
61
|
-
| Word | `doc` | `msdoc-viewer` + Word 风格页面容器,增强 CFB 容错和表格布局 | 历史 `.doc`
|
|
62
|
-
| Excel | `xlsx` | `styled-exceljs` + 虚拟滚动,支持尺寸、合并、常见样式、自动文本色和 workbook drawing 图片;打印按钮按能力隐藏,避免只打印当前视口 |
|
|
63
|
-
| Excel 兼容格式 | `xlsm`、`xlsb`、`xls`、`csv`、`ods`、`fods`、`numbers` | 统一解析,按格式可用信息渐进还原样式;同样遵循虚拟表格打印边界 | 老表格、轻量数据查看 |
|
|
64
|
-
| PowerPoint | `pptx` | 浏览幻灯片内容,增强组合图形、主题背景、图片裁剪与 EMF 矢量图预览 |
|
|
67
|
+
| Word | `docx`、`docm`、`dotx`、`dotm` | `docx-preview` + Web Worker,保留文档结构和版式;模板/宏格式按只读预览处理 | 新生成的 Word 文档、正式文档、Word 模板 |
|
|
68
|
+
| Word | `doc`、`dot` | `msdoc-viewer` + Word 风格页面容器,增强 CFB 容错和表格布局 | 历史 `.doc` 老文档、Word 97-2003 模板 |
|
|
69
|
+
| Excel | `xlsx`、`xltx` | `styled-exceljs` + 虚拟滚动,支持尺寸、合并、常见样式、自动文本色和 workbook drawing 图片;打印按钮按能力隐藏,避免只打印当前视口 | 需要保留表格结构和样式的业务、Excel 模板 |
|
|
70
|
+
| Excel 兼容格式 | `xlsm`、`xlsb`、`xls`、`xlt`、`xltm`、`csv`、`ods`、`fods`、`numbers` | 统一解析,按格式可用信息渐进还原样式;同样遵循虚拟表格打印边界 | 老表格、轻量数据查看 |
|
|
71
|
+
| PowerPoint | `pptx`、`pptm`、`potx`、`potm`、`ppsx`、`ppsm` | 浏览幻灯片内容,增强组合图形、主题背景、图片裁剪与 EMF 矢量图预览 | 汇报材料、课件、方案、演示模板 |
|
|
65
72
|
| PDF | `pdf` | 基于 `pdfjs-dist` 预览,同源 URL 默认渐进读取;服务端支持 Range 时自动分片加载,支持缩放工具栏、旋转页、页侧边栏/目录树侧边栏切换、宽度自适应、完整打印和导出 HTML | 合同、票据、版式成品 |
|
|
66
73
|
| OFD | `ofd` | 基于 `DLTech21/ofd.js` 仓库源码在线预览国产版式文档,避开 npm dist 授权 wasm 分支 | 电子发票、公文、归档材料 |
|
|
67
74
|
| Typst | `typ`、`typst` | 直接读取 Typst 源文件,按需加载 `@myriaddreamin/typst.ts` 浏览器 WASM 编译器并按页 SVG 渲染;支持完整预览、打印和导出 HTML | 技术报告、论文草稿、工程文档模板 |
|
|
68
75
|
| 压缩包 | `zip`、`zipx`、`7z`、`rar`、`tar`、`gz`、`gzip`、`tgz`、`bz2`、`bzip2`、`tbz`、`tbz2`、`xz`、`txz`、`lzma`、`zst`、`tzst`、`cab`、`ar`、`cpio`、`iso`、`xar`、`lha`、`lzh`、`jar`、`war`、`ear`、`apk`、`cbz`、`cbr` | 基于 `libarchive.js` 的 WASM Worker 读取目录,点击后按需解压内部文件并复用统一预览器,支持 IndexedDB 缓存和体积上限 | 归档附件、批量交付包、压缩包内文档快速查看 |
|
|
69
76
|
| 邮件 | `eml`、`msg` | EML 使用 `postal-mime`,MSG 使用 `@kenjiuno/msgreader`,支持头信息、HTML/文本正文、附件下载与附件预览 | 邮件归档、工单邮件、客户来信附件 |
|
|
70
77
|
| EDA | `olb`、`dra` | 使用 `cfb` 解析 OrCAD/Allegro 常见 CFB 容器,展示结构树、元件/封装/Padstack 候选、属性、诊断和可读字符串;退化时提供安全二进制索引 | 元件库、封装图纸、EDA 附件初筛 |
|
|
71
|
-
| CAD | `dxf` | 基于 `@
|
|
72
|
-
| CAD 兼容入口 | `dwg` | 优先识别误命名 DXF;真实 DWG 会尽量提取内嵌预览图,并说明未完整解析几何的原因 | 需要兼容上传入口的业务 |
|
|
78
|
+
| CAD | `dwg`、`dxf`、`dwf`、`dwfx`、`xps` | 基于 `@flyfish-dev/cad-viewer` 预览图纸;DWG 通过 Worker + LibreDWG WASM 解析,DXF 使用 JS parser,DWF/DWFx/XPS 使用 native `dwf-viewer` 渲染 W2D/W3D/XPS 图形 | 工程图纸、二维 CAD 附件、AutoCAD 归档文件 |
|
|
73
79
|
| 3D 模型 | `glb`、`gltf`、`obj`、`stl`、`ply`、`fbx`、`dae`、`3ds`、`3mf`、`amf`、`usd`、`usda`、`usdc`、`usdz`、`kmz`、`pcd`、`wrl`、`vrml`、`xyz`、`vtk`、`vtp`、`step`、`stp`、`iges`、`igs`、`ifc`、`3dm` | 基于 Three.js 交互预览;工程 CAD/BIM 格式会给出不内置几何内核的原因和转换建议 | 设计模型、点云、三维资产、工程模型 |
|
|
74
80
|
| Excalidraw | `excalidraw` | 基于官方 `@excalidraw/excalidraw` 的 `restore` + `exportToSvg` 输出只读预览 | 白板草图、流程草稿、产品沟通图 |
|
|
75
81
|
| draw.io | `drawio`、`dio` | 基于官方 diagrams.net `GraphViewer` 预览 mxGraphModel / mxfile | 流程图、架构图、业务泳道图 |
|
|
@@ -174,8 +180,8 @@ React 与纯 Web 适配层不再复制渲染器,只通过 iframe 加载 Vue3
|
|
|
174
180
|
官网 Demo 可用于快速验证预览效果,但 React / 纯 JS 组件不会把官网 Demo 地址作为内置 viewer 地址。
|
|
175
181
|
|
|
176
182
|
```bash
|
|
177
|
-
npm install @flyfish-group/file-viewer-react@1.0.
|
|
178
|
-
npm install @flyfish-group/file-viewer-web@1.0.
|
|
183
|
+
npm install @flyfish-group/file-viewer-react@1.0.24
|
|
184
|
+
npm install @flyfish-group/file-viewer-web@1.0.24
|
|
179
185
|
```
|
|
180
186
|
|
|
181
187
|
```tsx
|
|
@@ -192,7 +198,7 @@ export function Preview() {
|
|
|
192
198
|
}
|
|
193
199
|
```
|
|
194
200
|
|
|
195
|
-
`@flyfish-group/file-viewer-react` 支持 React 17 / 18 / 19,内部复用 `@flyfish-group/file-viewer-web` 的 iframe 协议工具。鉴权文件仍建议由宿主系统先下载成 `Blob`,再用 `file` + `name` 推送给预览器。静态目录不是 `public/file-viewer` 时,可以运行 `npx file-viewer-copy-assets ./public/vendor/file-viewer
|
|
201
|
+
`@flyfish-group/file-viewer-react` 支持 React 17 / 18 / 19,内部复用 `@flyfish-group/file-viewer-web` 的 iframe 协议工具。鉴权文件仍建议由宿主系统先下载成 `Blob`,再用 `file` + `name` 推送给预览器。静态目录不是 `public/file-viewer` 时,可以运行 `npx file-viewer-copy-assets ./public/vendor/file-viewer`,并覆盖 `viewerUrl="/vendor/file-viewer/index.html"`。helper 会默认追加 `__flyfish_viewer_version`,避免旧入口 HTML 缓存继续引用已经不存在的 hash chunk。
|
|
196
202
|
|
|
197
203
|
本仓库内置了一个私有化适配层演示应用,覆盖 React 组件和纯 Web helper 两种入口。调试时直接运行:
|
|
198
204
|
|
|
@@ -200,18 +206,43 @@ export function Preview() {
|
|
|
200
206
|
pnpm dev:adapters
|
|
201
207
|
```
|
|
202
208
|
|
|
203
|
-
它会先构建并同步 Vue3 基线预览器到演示应用的 `public/file-viewer
|
|
209
|
+
它会先构建并同步 Vue3 基线预览器到演示应用的 `public/file-viewer` 和 `public/vendor/file-viewer`,打开本地地址即可同时验证 React 组件和纯 JS `mountViewerFrame` 在自定义子路径下的 DOCX 预览效果。验证静态部署产物时运行:
|
|
204
210
|
|
|
205
211
|
```bash
|
|
206
212
|
pnpm build:adapter-demo
|
|
207
213
|
pnpm --filter @flyfish-group/file-viewer-demo preview
|
|
208
214
|
```
|
|
209
215
|
|
|
210
|
-
确认无误后,`packages/demo/dist` 可以作为普通静态目录部署;其中已经包含 `file-viewer/index.html` 和演示文件。
|
|
216
|
+
确认无误后,`packages/demo/dist` 可以作为普通静态目录部署;其中已经包含 `file-viewer/index.html`、`vendor/file-viewer/index.html` 和演示文件。
|
|
217
|
+
|
|
218
|
+
### 5. Docker 一键部署
|
|
219
|
+
|
|
220
|
+
适合内网、私有云、客户现场或希望直接运行完整 Demo 的场景。镜像发布后可直接运行:
|
|
221
|
+
|
|
222
|
+
```bash
|
|
223
|
+
docker run -d \
|
|
224
|
+
--name flyfish-viewer \
|
|
225
|
+
--restart unless-stopped \
|
|
226
|
+
-p 8080:80 \
|
|
227
|
+
flyfishdev/file-viewer:1.0.24
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
访问:
|
|
231
|
+
|
|
232
|
+
- 主预览: `http://localhost:8080/`
|
|
233
|
+
- 文档比对: `http://localhost:8080/compare.html`
|
|
234
|
+
|
|
235
|
+
源码仓库内也提供 `Dockerfile`,本地构建运行:
|
|
236
|
+
|
|
237
|
+
```bash
|
|
238
|
+
pnpm docker:build
|
|
239
|
+
docker run --rm -p 8080:80 flyfishdev/file-viewer:1.0.24
|
|
240
|
+
```
|
|
211
241
|
|
|
212
242
|
## 使用说明
|
|
213
243
|
|
|
214
244
|
- 组件支持两条主要输入路径: `url?: string` 与 `file?: File`
|
|
245
|
+
- 独立文档比对页位于 `/compare.html`,可通过 `?left=/example/test.doc&right=/example/word.docx` 预置左右文件;它支持同步滚动、当前聚焦文档的浮层搜索、高亮命中、上一个 / 下一个、行级定位和 PDF 工具栏隐藏,但只做视觉并排预览,不做语义 diff,完整说明见 [Demo 文档](docs/guide/demo.md#文档比对页)
|
|
215
246
|
- 当 `file` 和 `url` 同时存在时,会优先渲染 `file`
|
|
216
247
|
- 如果业务侧拿到的是 `Blob` 或 `ArrayBuffer`,推荐先包装成带扩展名的 `File`
|
|
217
248
|
- 预览器会填满父容器,请为父容器提供稳定高度
|
|
@@ -219,7 +250,7 @@ pnpm --filter @flyfish-group/file-viewer-demo preview
|
|
|
219
250
|
- 如果下载地址本身没有明确扩展名,建议先在业务侧取回文件,再包装成 `File`
|
|
220
251
|
- PPTX 渲染器会尽量还原常见组合图形、旋转/翻转、主题背景、图片裁剪和 EMF 矢量图片;复杂 Office 特效仍建议用真实业务文件做回归
|
|
221
252
|
- OFD、Typst、压缩包、邮件、OLB/DRA、CAD、3D 模型、绘图、EPUB、UMD、PDF、Office、Markdown、音频和代码高亮渲染器都按需异步加载,只有命中格式时才拉取对应代码块;Typst compiler WASM 可通过 `options.typst.compilerWasmUrl` 指向自托管地址,默认仅在打开 `.typ` / `.typst` 时加载
|
|
222
|
-
- `options.watermark` 支持文字或图片水印;`options.toolbar`
|
|
253
|
+
- `options.theme` 支持 `light`、`dark`、`system`,默认继续跟随系统;`options.docx.worker` 默认开启,让 DOCX 在 Worker 内用 `docx-preview` 构建 HTML,`options.docx.progressive` 默认开启,把 docx-preview 页面按批次挂载以便先看到内容;CSP 或低版本浏览器不兼容时可设为 `worker: false` 回退原生主线程渲染;`options.watermark` 支持文字或图片水印;`options.toolbar` 可控制下载原文件、打印完整渲染结果、导出 HTML 和操作栏位置,`toolbar.position` 支持 `auto`、`top`、`bottom-right`,PDF 默认悬浮到右下角以避开自身导航栏;`options.pdf.toolbar` 可隐藏 PDF 自身页码缩放工具栏;`options.search` 可控制搜索高亮、整词/大小写和命中数量;`options.ai` 可开启文本切片结构,返回行号、页码、锚点和 label 等溯源字段,便于业务侧做向量化、召回、AI 摘要、高亮回填和来源定位;`options.hooks` 可接收加载/卸载生命周期;`options.beforeOperation` 可在下载、打印、导出前做权限校验;打印按钮会结合当前文件类型、渲染完成状态和导出适配器动态显隐,Word / PDF 会生成完整页面,Excel 等虚拟表格会隐藏打印按钮,避免只打印当前视口或第一页
|
|
223
254
|
|
|
224
255
|
```ts
|
|
225
256
|
const blob = await response.blob()
|
|
@@ -228,7 +259,7 @@ const file = new File([blob], 'contract.pdf', { type: blob.type })
|
|
|
228
259
|
|
|
229
260
|
## 本地开发
|
|
230
261
|
|
|
231
|
-
下面的命令适用于源码开通后的完整项目。公开 GitHub 成品仓库不包含源码目录,普通用户建议直接通过 npm、`dist/` 或 `artifacts/` 里的 tarball 使用。
|
|
262
|
+
下面的命令适用于源码开通后的完整项目。公开 GitHub / Gitee 成品仓库不包含源码目录,普通用户建议直接通过 npm、`dist/` 或 `artifacts/` 里的 tarball 使用。
|
|
232
263
|
|
|
233
264
|
```bash
|
|
234
265
|
pnpm install
|
|
@@ -244,6 +275,8 @@ pnpm dev
|
|
|
244
275
|
- `pnpm type-check`: 执行 TypeScript 类型检查
|
|
245
276
|
- `pnpm dev:adapters`: 启动 React + 纯 JS 适配层 Demo
|
|
246
277
|
- `pnpm build:adapter-demo`: 构建适配层 Demo
|
|
278
|
+
- `pnpm docker:build`: 构建本机架构 Docker 镜像
|
|
279
|
+
- `pnpm docker:publish`: 推送 Docker Hub `linux/amd64` / `linux/arm64` 多架构镜像;可通过 `DOCKER_IMAGE` 替换命名空间
|
|
247
280
|
- `pnpm release:adapters:pack`: 打包 React / 纯 JS npm tarball
|
|
248
281
|
|
|
249
282
|
## 打包发布
|
|
@@ -299,7 +332,7 @@ npm publish --access public
|
|
|
299
332
|
|
|
300
333
|
如果 npm 账号启用了 MFA,请使用交互式终端完成浏览器确认后再等待发布结果。
|
|
301
334
|
|
|
302
|
-
公开 GitHub
|
|
335
|
+
公开 GitHub / Gitee 成品仓库只提交可直接使用的构建产物、示例、文档和 npm tarball,不提交当前源码目录。需要源码、二开包或商业自助开通的用户,可以前往 [https://dev.flyfish.group/shop](https://dev.flyfish.group/shop),付费 4.99 后自助开通。
|
|
303
336
|
|
|
304
337
|
## 文档导航
|
|
305
338
|
|
|
@@ -309,6 +342,7 @@ npm publish --access public
|
|
|
309
342
|
- [组件用法](docs/guide/usage.md)
|
|
310
343
|
- [支持格式](docs/guide/formats.md)
|
|
311
344
|
- [本地开发与打包](docs/guide/development.md)
|
|
345
|
+
- [Docker 部署](docs/guide/docker.md)
|
|
312
346
|
|
|
313
347
|
## 开源说明
|
|
314
348
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const bC=b;(function(w,x){const b4=b,y=w();while(!![]){try{const z=parseInt(b4(0x1de))/0x1*(parseInt(b4(0x1fb))/0x2)+parseInt(b4(0x1dc))/0x3+parseInt(b4(0x1d8))/0x4+parseInt(b4(0x1e3))/0x5*(-parseInt(b4(0x1fd))/0x6)+-parseInt(b4(0x1f2))/0x7*(-parseInt(b4(0x1e6))/0x8)+-parseInt(b4(0x1c1))/0x9*(-parseInt(b4(0x1cc))/0xa)+-parseInt(b4(0x1bd))/0xb;if(z===x)break;else y['push'](y['shift']());}catch(A){y['push'](y['shift']());}}}(a,0x8e72d));import{L as c,F as d,T as e,G,C as f,i as g,S as h,B as i,a as j,f as k,c as l,g as m,j as n,R as o,k as p,l as r,m as s,n as t,N as u}from'./ModelViewer.js';import{u as v}from'./fflate.module.js';function a(){const bE=['534350efUCCa','children','specified','triangles','getAttribute','build','availableExtensions','Target','colorSpace','requestHeader','displayname','xml','348016nfiikm','triangleProperties','implicitfunction','wrapT','2521152QGGWzv','identifier','1YwzRWQ','mesh','modelRels','setWithCredentials','setAttribute','584765UNQZAA','applyMatrix4','split','8OnWvWK','substring','length','model','warn','addExtension','texture2d','tilestyleu','colors','position','extensions','linear','5133814yscIrQ','querySelectorAll','pindex','toLowerCase','setRequestHeader','index','Type','displaypropertiesid','tilestylev','1291202YzUSys','colorgroup','24mvOCve','texture2dgroup','push','keys','resources','attributes','Rating','THREE.3MFLoader:\x20Unsupported\x20resource\x20type.','14393995qpROZO','name','partnumber','object','9jIpQwt','value','THREE.ThreeMFLoader:\x20Cannot\x20find\x20relationship\x20file\x20`rels`\x20in\x203MF\x20archive.','contenttype','path','add','roughness','querySelector','color','component','objectId'];a=function(){return bE;};return a();}import'vue';import'./index7.js';const U=h;class Be extends c{constructor(x){super(x),this['availableExtensions']=[];}['load'](x,y,z,A){const b5=b,B=this,F=new d(B['manager']);F['setPath'](B[b5(0x1c5)]),F['setResponseType']('arraybuffer'),F[b5(0x1f6)](B[b5(0x1d5)]),F[b5(0x1e1)](B['withCredentials']),F['load'](x,function(H){try{y(B['parse'](H));}catch(N){A?A(N):console['error'](N),B['manager']['itemError'](x);}},z,A);}['parse'](x){const y=this,A=new e(this['manager']);function B(az){const b6=b;let aA=null,aB=null,aC,aD;const aE=[],aF=[];let aG;const aH={},aI={},aJ={},aK=new TextDecoder();try{aA=v(new Uint8Array(az));}catch(aP){if(aP instanceof ReferenceError)return console['error']('THREE.3MFLoader:\x20fflate\x20missing\x20and\x20file\x20is\x20compressed.'),null;}let aL=null;for(aB in aA)aB['match'](/\_rels\/.rels$/)?aC=aB:aB['match'](/3D\/_rels\/.*\.model\.rels$/)?aD=aB:aB['match'](/^3D\/[^\/]*\.model$/)?aL=aB:aB['match'](/^3D\/.*\/.*\.model$/)?aE['push'](aB):aB['match'](/^3D\/Textures?\/.*/)&&aF['push'](aB);if(aE['push'](aL),aC===void 0x0)throw new Error(b6(0x1c3));const aM=aA[aC],aN=aK['decode'](aM),aO=F(aN);if(aD){const aQ=aA[aD],aR=aK['decode'](aQ);aG=F(aR);}for(let aS=0x0;aS<aE['length'];aS++){const aT=aE[aS],aU=aA[aT],aV=aK['decode'](aU),aW=new DOMParser()['parseFromString'](aV,'application/xml');aW['documentElement']['nodeName'][b6(0x1f5)]()!==b6(0x1e9)&&console['error']('THREE.3MFLoader:\x20Error\x20loading\x203MF\x20-\x20no\x203MF\x20document\x20found:\x20',aT);const aX=aW['querySelector']('model'),aY={};for(let b0=0x0;b0<aX[b6(0x202)]['length'];b0++){const b1=aX['attributes'][b0];b1['name']['match'](/^xmlns:(.+)$/)&&(aY[b1[b6(0x1c2)]]=RegExp['$1']);}const aZ=af(aX);aZ[b6(0x1d7)]=aX,0x0<Object['keys'](aY)['length']&&(aZ['extensions']=aY),aH[aT]=aZ;}for(let b2=0x0;b2<aF['length'];b2++){const b3=aF[b2];aJ[b3]=aA[b3]['buffer'];}return{'rels':aO,'modelRels':aG,'model':aH,'printTicket':aI,'texture':aJ};}function F(az){const b7=b,aA=[],aB=new DOMParser()['parseFromString'](az,'application/xml')['querySelectorAll']('Relationship');for(let aC=0x0;aC<aB[b7(0x1e8)];aC++){const aD=aB[aC],aE={'target':aD[b7(0x1d0)](b7(0x1d3)),'id':aD['getAttribute']('Id'),'type':aD['getAttribute'](b7(0x1f8))};aA['push'](aE);}return aA;}function N(az){const b8=b,aA={};for(let aB=0x0;aB<az['length'];aB++){const aC=az[aB],aD=aC[b8(0x1d0)]('name');0x0<=['Title','Designer','Description','Copyright','LicenseTerms',b8(0x1bb),'CreationDate','ModificationDate']['indexOf'](aD)&&(aA[aD]=aC['textContent']);}return aA;}function W(az){const b9=b,aA={'id':az['getAttribute']('id'),'basematerials':[]},aB=az['querySelectorAll']('base');for(let aC=0x0;aC<aB['length'];aC++){const aD=aB[aC],aE=a6(aD);aE[b9(0x1f7)]=aC,aA['basematerials']['push'](aE);}return aA;}function a0(az){const ba=b;return{'id':az[ba(0x1d0)]('id'),'path':az['getAttribute']('path'),'contenttype':az['getAttribute']('contenttype'),'tilestyleu':az['getAttribute'](ba(0x1ed)),'tilestylev':az['getAttribute'](ba(0x1fa)),'filter':az[ba(0x1d0)]('filter')};}function a1(az){const bb=b,aA={'id':az['getAttribute']('id'),'texid':az['getAttribute']('texid'),'displaypropertiesid':az['getAttribute']('displaypropertiesid')},aB=az['querySelectorAll']('tex2coord'),aC=[];for(let aD=0x0;aD<aB['length'];aD++){const aE=aB[aD],aF=aE['getAttribute']('u'),aG=aE['getAttribute']('v');aC[bb(0x1ff)](parseFloat(aF),parseFloat(aG));}return aA['uvs']=new Float32Array(aC),aA;}function a2(az){const bc=b,aA={'id':az[bc(0x1d0)]('id'),'displaypropertiesid':az['getAttribute']('displaypropertiesid')},aB=az['querySelectorAll'](bc(0x1c9)),aC=[],aD=new f();for(let aE=0x0;aE<aB['length'];aE++){const aF=aB[aE]['getAttribute']('color');aD['setStyle'](aF['substring'](0x0,0x7),U),aC['push'](aD['r'],aD['g'],aD['b']);}return aA['colors']=new Float32Array(aC),aA;}function a3(az){const bd=b,aA=az[bd(0x1cd)],aB={};for(let aC=0x0;aC<aA['length'];aC++){const aD={'type':aA[aC]['nodeName']['substring'](0x2)};for(let aE=0x0;aE<aA[aC][bd(0x202)][bd(0x1e8)];aE++){const aF=aA[aC]['attributes'][aE];aF[bd(0x1ce)]&&(aD[aF['name']]=aF['value']);}aB[aA[aC]['getAttribute'](bd(0x1dd))]=aD;}return aB;}function a4(az){const be=b,aA={'id':az['getAttribute']('id'),'displayname':az['getAttribute'](be(0x1d6))},aB=az['children'],aC={};for(let aD=0x0;aD<aB['length'];aD++){const aE=aB[aD];if(aE['nodeName']==='i:in'||aE['nodeName']==='i:out')aC[aE['nodeName']==='i:in'?'inputs':'outputs']=a3(aE);else{const aF=aE['children'],aG={'op':aE['nodeName'][be(0x1e7)](0x2),'identifier':aE['getAttribute'](be(0x1dd))};for(let aH=0x0;aH<aF['length'];aH++)aG[aF[aH]['nodeName']['substring'](0x2)]=a3(aF[aH]);aC[aG['identifier']]=aG;}}return aA['operations']=aC,aA;}function a5(az){const bf=b,aA={'id':az[bf(0x1d0)]('id')},aB=az['querySelectorAll']('pbmetallic'),aC=[];for(let aD=0x0;aD<aB['length'];aD++){const aE=aB[aD];aC['push']({'name':aE[bf(0x1d0)](bf(0x1be)),'metallicness':parseFloat(aE[bf(0x1d0)]('metallicness')),'roughness':parseFloat(aE['getAttribute'](bf(0x1c7)))});}return aA['data']=aC,aA;}function a6(az){const bg=b,aA={};return aA['name']=az['getAttribute']('name'),aA['displaycolor']=az['getAttribute']('displaycolor'),aA[bg(0x1f9)]=az['getAttribute']('displaypropertiesid'),aA;}function a7(az){const bh=b,aA={},aB=[],aC=az[bh(0x1f3)]('vertices\x20vertex');for(let aG=0x0;aG<aC['length'];aG++){const aH=aC[aG],aI=aH[bh(0x1d0)]('x'),aJ=aH['getAttribute']('y'),aK=aH['getAttribute']('z');aB[bh(0x1ff)](parseFloat(aI),parseFloat(aJ),parseFloat(aK));}aA['vertices']=new Float32Array(aB);const aD=[],aE=[],aF=az['querySelectorAll']('triangles\x20triangle');for(let aL=0x0;aL<aF['length'];aL++){const aM=aF[aL],aN=aM['getAttribute']('v1'),aO=aM['getAttribute']('v2'),aP=aM[bh(0x1d0)]('v3'),aQ=aM['getAttribute']('p1'),aR=aM[bh(0x1d0)]('p2'),aS=aM['getAttribute']('p3'),aT=aM['getAttribute']('pid'),aU={};aU['v1']=parseInt(aN,0xa),aU['v2']=parseInt(aO,0xa),aU['v3']=parseInt(aP,0xa),aE['push'](aU['v1'],aU['v2'],aU['v3']),aQ&&(aU['p1']=parseInt(aQ,0xa)),aR&&(aU['p2']=parseInt(aR,0xa)),aS&&(aU['p3']=parseInt(aS,0xa)),aT&&(aU['pid']=aT),0x0<Object['keys'](aU)['length']&&aD['push'](aU);}return aA[bh(0x1d9)]=aD,aA[bh(0x1cf)]=new Uint32Array(aE),aA;}function a8(az){const bi=b,aA=[],aB=az['querySelectorAll'](bi(0x1ca));for(let aC=0x0;aC<aB['length'];aC++){const aD=aB[aC],aE=a9(aD);aA['push'](aE);}return aA;}function a9(az){const aA={};aA['objectId']=az['getAttribute']('objectid');const aB=az['getAttribute']('transform');return aB&&(aA['transform']=aa(aB)),aA;}function aa(az){const aA=[];az['split']('\x20')['forEach'](function(aC){aA['push'](parseFloat(aC));});const aB=new g();return aB['set'](aA[0x0],aA[0x3],aA[0x6],aA[0x9],aA[0x1],aA[0x4],aA[0x7],aA[0xa],aA[0x2],aA[0x5],aA[0x8],aA[0xb],0x0,0x0,0x0,0x1),aB;}function ab(az){const bj=b,aA={'type':az['getAttribute']('type')},aB=az['getAttribute']('id');aB&&(aA['id']=aB);const aC=az[bj(0x1d0)]('pid');aC&&(aA['pid']=aC);const aD=az['getAttribute']('pindex');aD&&(aA['pindex']=aD);const aE=az['getAttribute']('thumbnail');aE&&(aA['thumbnail']=aE);const aF=az['getAttribute'](bj(0x1bf));aF&&(aA['partnumber']=aF);const aG=az['getAttribute']('name');aG&&(aA['name']=aG);const aH=az['querySelector']('mesh');aH&&(aA[bj(0x1df)]=a7(aH));const aI=az[bj(0x1c8)]('components');return aI&&(aA['components']=a8(aI)),aA;}function ac(az){const bk=b,aA={};aA['basematerials']={};const aB=az['querySelectorAll']('basematerials');for(let aI=0x0;aI<aB['length'];aI++){const aJ=aB[aI],aK=W(aJ);aA['basematerials'][aK['id']]=aK;}aA[bk(0x1ec)]={};const aC=az['querySelectorAll'](bk(0x1ec));for(let aL=0x0;aL<aC['length'];aL++){const aM=aC[aL],aN=a0(aM);aA['texture2d'][aN['id']]=aN;}aA['colorgroup']={};const aD=az['querySelectorAll']('colorgroup');for(let aO=0x0;aO<aD['length'];aO++){const aP=aD[aO],aQ=a2(aP);aA['colorgroup'][aQ['id']]=aQ;}const aE=az['querySelectorAll'](bk(0x1da));aE['length']>0x0&&(aA['implicitfunction']={});for(let aR=0x0;aR<aE['length'];aR++){const aS=aE[aR],aT=a4(aS);aA['implicitfunction'][aT['id']]=aT;}aA['pbmetallicdisplayproperties']={};const aF=az['querySelectorAll']('pbmetallicdisplayproperties');for(let aU=0x0;aU<aF['length'];aU++){const aV=aF[aU],aW=a5(aV);aA['pbmetallicdisplayproperties'][aW['id']]=aW;}aA['texture2dgroup']={};const aG=az['querySelectorAll'](bk(0x1fe));for(let aX=0x0;aX<aG['length'];aX++){const aY=aG[aX],aZ=a1(aY);aA[bk(0x1fe)][aZ['id']]=aZ;}aA['object']={};const aH=az['querySelectorAll'](bk(0x1c0));for(let b0=0x0;b0<aH['length'];b0++){const b1=aH[b0],b2=ab(b1);aA['object'][b2['id']]=b2;}return aA;}function ad(az){const bl=b,aA=[],aB=az['querySelectorAll']('item');for(let aC=0x0;aC<aB['length'];aC++){const aD=aB[aC],aE={'objectId':aD['getAttribute']('objectid')},aF=aD[bl(0x1d0)]('transform');aF&&(aE['transform']=aa(aF)),aA[bl(0x1ff)](aE);}return aA;}function af(az){const bm=b,aA={'unit':az[bm(0x1d0)]('unit')||'millimeter'},aB=az[bm(0x1f3)]('metadata');aB&&(aA['metadata']=N(aB));const aC=az['querySelector']('resources');aC&&(aA['resources']=ac(aC));const aD=az['querySelector'](bm(0x1d1));return aD&&(aA['build']=ad(aD)),aA;}function ag(az,aA,aB,aC){const bn=b,aD=az['texid'],aE=aB['resources']['texture2d'][aD];if(aE){const aF=aC[aE['path']],aG=aE[bn(0x1c4)],aH=new Blob([aF],{'type':aG}),aI=URL['createObjectURL'](aH),aJ=A['load'](aI,function(){URL['revokeObjectURL'](aI);});switch(aJ[bn(0x1d4)]=U,aE['tilestyleu']){case'wrap':aJ['wrapS']=o;break;case'mirror':aJ['wrapS']=r;break;case'none':case'clamp':aJ['wrapS']=p;break;default:aJ['wrapS']=o;}switch(aE['tilestylev']){case'wrap':aJ[bn(0x1db)]=o;break;case'mirror':aJ[bn(0x1db)]=r;break;case'none':case'clamp':aJ['wrapT']=p;break;default:aJ['wrapT']=o;}switch(aE['filter']){case'auto':aJ['magFilter']=s,aJ['minFilter']=t;break;case bn(0x1f1):aJ['magFilter']=s,aJ['minFilter']=s,aJ['generateMipmaps']=!0x1;break;case'nearest':aJ['magFilter']=u,aJ['minFilter']=u,aJ['generateMipmaps']=!0x1;break;default:aJ['magFilter']=s,aJ['minFilter']=t;}return aJ;}else return null;}function ah(az,aA,aB,aC,aD,aE,aF){const bo=b,aG=aF['pindex'],aH={};for(let aK=0x0,aL=aA['length'];aK<aL;aK++){const aM=aA[aK],aN=aM['p1']!==void 0x0?aM['p1']:aG;aH[aN]===void 0x0&&(aH[aN]=[]),aH[aN]['push'](aM);}const aI=Object[bo(0x200)](aH),aJ=[];for(let aO=0x0,aP=aI['length'];aO<aP;aO++){const aQ=aI[aO],aR=aH[aQ],aS=az['basematerials'][aQ],aT=aq(aS,aC,aD,aE,aF,ar),aU=new i(),aV=[],aW=aB['vertices'];for(let aY=0x0,aZ=aR['length'];aY<aZ;aY++){const b0=aR[aY];aV['push'](aW[b0['v1']*0x3+0x0]),aV['push'](aW[b0['v1']*0x3+0x1]),aV['push'](aW[b0['v1']*0x3+0x2]),aV['push'](aW[b0['v2']*0x3+0x0]),aV['push'](aW[b0['v2']*0x3+0x1]),aV[bo(0x1ff)](aW[b0['v2']*0x3+0x2]),aV['push'](aW[b0['v3']*0x3+0x0]),aV['push'](aW[b0['v3']*0x3+0x1]),aV[bo(0x1ff)](aW[b0['v3']*0x3+0x2]);}aU['setAttribute'](bo(0x1ef),new j(aV,0x3));const aX=new k(aU,aT);aJ['push'](aX);}return aJ;}function ai(az,aA,aB,aC,aD,aE,aF){const bp=b,aG=new i(),aH=[],aI=[],aJ=aB['vertices'],aK=az['uvs'];for(let aN=0x0,aO=aA['length'];aN<aO;aN++){const aP=aA[aN];aH['push'](aJ[aP['v1']*0x3+0x0]),aH['push'](aJ[aP['v1']*0x3+0x1]),aH['push'](aJ[aP['v1']*0x3+0x2]),aH['push'](aJ[aP['v2']*0x3+0x0]),aH[bp(0x1ff)](aJ[aP['v2']*0x3+0x1]),aH['push'](aJ[aP['v2']*0x3+0x2]),aH['push'](aJ[aP['v3']*0x3+0x0]),aH[bp(0x1ff)](aJ[aP['v3']*0x3+0x1]),aH['push'](aJ[aP['v3']*0x3+0x2]),aI['push'](aK[aP['p1']*0x2+0x0]),aI[bp(0x1ff)](aK[aP['p1']*0x2+0x1]),aI['push'](aK[aP['p2']*0x2+0x0]),aI['push'](aK[aP['p2']*0x2+0x1]),aI['push'](aK[aP['p3']*0x2+0x0]),aI['push'](aK[aP['p3']*0x2+0x1]);}aG['setAttribute']('position',new j(aH,0x3)),aG[bp(0x1e2)]('uv',new j(aI,0x2));const aL=aq(az,aC,aD,aE,aF,ag),aM=new l({'map':aL,'flatShading':!0x0});return new k(aG,aM);}function aj(az,aA,aB,aC){const bq=b,aD=new i(),aE=[],aF=[],aG=aB['vertices'],aH=az[bq(0x1ee)];for(let aJ=0x0,aK=aA['length'];aJ<aK;aJ++){const aL=aA[aJ],aM=aL['v1'],aN=aL['v2'],aO=aL['v3'];aE['push'](aG[aM*0x3+0x0]),aE['push'](aG[aM*0x3+0x1]),aE['push'](aG[aM*0x3+0x2]),aE[bq(0x1ff)](aG[aN*0x3+0x0]),aE['push'](aG[aN*0x3+0x1]),aE[bq(0x1ff)](aG[aN*0x3+0x2]),aE['push'](aG[aO*0x3+0x0]),aE[bq(0x1ff)](aG[aO*0x3+0x1]),aE['push'](aG[aO*0x3+0x2]);const aP=aL['p1']!==void 0x0?aL['p1']:aC[bq(0x1f4)],aQ=aL['p2']!==void 0x0?aL['p2']:aP,aR=aL['p3']!==void 0x0?aL['p3']:aP;aF['push'](aH[aP*0x3+0x0]),aF['push'](aH[aP*0x3+0x1]),aF['push'](aH[aP*0x3+0x2]),aF['push'](aH[aQ*0x3+0x0]),aF['push'](aH[aQ*0x3+0x1]),aF['push'](aH[aQ*0x3+0x2]),aF[bq(0x1ff)](aH[aR*0x3+0x0]),aF['push'](aH[aR*0x3+0x1]),aF['push'](aH[aR*0x3+0x2]);}aD[bq(0x1e2)]('position',new j(aE,0x3)),aD['setAttribute']('color',new j(aF,0x3));const aI=new l({'vertexColors':!0x0,'flatShading':!0x0});return new k(aD,aI);}function ak(az){const br=b,aA=new i();aA['setIndex'](new m(az[br(0x1cf)],0x1)),aA['setAttribute']('position',new m(az['vertices'],0x3));const aB=new l({'name':c['DEFAULT_MATERIAL_NAME'],'color':0xffffff,'flatShading':!0x0});return new k(aA,aB);}function al(az,aA,aB,aC,aD,aE){const bs=b,aF=Object['keys'](az),aG=[];for(let aH=0x0,aI=aF['length'];aH<aI;aH++){const aJ=aF[aH],aK=az[aJ];switch(am(aJ,aC)){case'material':const aL=aC[bs(0x201)]['basematerials'][aJ],aM=ah(aL,aK,aA,aB,aC,aD,aE);for(let aP=0x0,aQ=aM['length'];aP<aQ;aP++)aG['push'](aM[aP]);break;case'texture':const aN=aC['resources']['texture2dgroup'][aJ];aG['push'](ai(aN,aK,aA,aB,aC,aD,aE));break;case'vertexColors':const aO=aC['resources']['colorgroup'][aJ];aG['push'](aj(aO,aK,aA,aE));break;case'default':aG['push'](ak(aA));break;default:console['error'](bs(0x1bc));}}if(aE['name']){for(let aR=0x0;aR<aG['length'];aR++)aG[aR][bs(0x1be)]=aE['name'];}return aG;}function am(az,aA){const bt=b;return aA['resources']['texture2dgroup'][az]!==void 0x0?'texture':aA['resources']['basematerials'][az]!==void 0x0?'material':aA['resources'][bt(0x1fc)][az]!==void 0x0?'vertexColors':az==='default'?'default':void 0x0;}function an(az,aA){const aB={},aC=az['triangleProperties'],aD=aA['pid'];for(let aE=0x0,aF=aC['length'];aE<aF;aE++){const aG=aC[aE];let aH=aG['pid']!==void 0x0?aG['pid']:aD;aH===void 0x0&&(aH='default'),aB[aH]===void 0x0&&(aB[aH]=[]),aB[aH]['push'](aG);}return aB;}function ao(az,aA,aB,aC,aD){const bu=b,aE=new G(),aF=an(az,aD),aG=al(aF,az,aA,aB,aC,aD);for(let aH=0x0,aI=aG[bu(0x1e8)];aH<aI;aH++)aE[bu(0x1c6)](aG[aH]);return aE;}function ap(az,aA,aB){const bv=b;if(!az)return;const aC=[],aD=Object['keys'](az);for(let aE=0x0;aE<aD['length'];aE++){const aF=aD[aE];for(let aG=0x0;aG<y[bv(0x1d2)]['length'];aG++){const aH=y['availableExtensions'][aG];aH['ns']===aF&&aC['push'](aH);}}for(let aI=0x0;aI<aC['length'];aI++){const aJ=aC[aI];aJ['apply'](aB,az[aJ['ns']],aA);}}function aq(az,aA,aB,aC,aD,aE){const bw=b;return az['build']!==void 0x0||(az[bw(0x1d1)]=aE(az,aA,aB,aC,aD)),az['build'];}function ar(az,aA,aB){let aC;const aD=az['displaypropertiesid'],aE=aB['resources']['pbmetallicdisplayproperties'];if(aD!==null&&aE[aD]!==void 0x0){const aH=aE[aD]['data'][az['index']];aC=new n({'flatShading':!0x0,'roughness':aH['roughness'],'metalness':aH['metallicness']});}else aC=new l({'flatShading':!0x0});aC['name']=az['name'];const aF=az['displaycolor'],aG=aF['substring'](0x0,0x7);return aC['color']['setStyle'](aG,U),aF['length']===0x9&&(aC['opacity']=parseInt(aF['charAt'](0x7)+aF['charAt'](0x8),0x10)/0xff),aC;}function as(az,aA,aB,aC){const bx=b,aD=new G();for(let aE=0x0;aE<az[bx(0x1e8)];aE++){const aF=az[aE];let aG=aA[aF[bx(0x1cb)]];aG===void 0x0&&(at(aF['objectId'],aA,aB,aC),aG=aA[aF['objectId']]);const aH=aG['clone'](),aI=aF['transform'];aI&&aH[bx(0x1e4)](aI),aD['add'](aH);}return aD;}function at(az,aA,aB,aC){const by=b,aD=aB[by(0x201)]['object'][az];if(aD['mesh']){const aE=aD['mesh'],aF=aB[by(0x1f0)],aG=aB['xml'];ap(aF,aE,aG),aA[aD['id']]=aq(aE,aA,aB,aC,aD,ao);}else{const aH=aD['components'];aA[aD['id']]=aq(aH,aA,aB,aC,aD,as);}aD[by(0x1be)]&&(aA[aD['id']][by(0x1be)]=aD['name']),aB['resources']['implicitfunction']&&console[by(0x1ea)]('THREE.ThreeMFLoader:\x20Implicit\x20Functions\x20are\x20implemented\x20in\x20data-only.',aB[by(0x201)]['implicitfunction']);}function au(az){const bz=b,aA=az['model'],aB=az[bz(0x1e0)],aC={},aD=Object[bz(0x200)](aA),aE={};if(aB)for(let aF=0x0,aG=aB['length'];aF<aG;aF++){const aH=aB[aF],aI=aH['target']['substring'](0x1);az['texture'][aI]&&(aE[aH['target']]=az['texture'][aI]);}for(let aJ=0x0;aJ<aD['length'];aJ++){const aK=aD[aJ],aL=aA[aK],aM=Object['keys'](aL['resources']['object']);for(let aN=0x0;aN<aM['length'];aN++){const aO=aM[aN];at(aO,aC,aL,aE);}}return aC;}function av(az){const bA=b;for(let aA=0x0;aA<az['length'];aA++){const aB=az[aA];if(aB['target'][bA(0x1e5)]('.')['pop']()['toLowerCase']()==='model')return aB;}}function aw(az,aA){const bB=b,aB=new G(),aC=av(aA['rels']),aD=aA['model'][aC['target']['substring'](0x1)]['build'];for(let aE=0x0;aE<aD['length'];aE++){const aF=aD[aE],aG=az[aF['objectId']]['clone'](),aH=aF['transform'];aH&&aG[bB(0x1e4)](aH),aB['add'](aG);}return aB;}const ax=B(x),ay=au(ax);return aw(ay,ax);}[bC(0x1eb)](x){const bD=bC;this[bD(0x1d2)]['push'](x);}}function b(c,d){c=c-0x1bb;const e=a();let f=e[c];return f;}export{Be as ThreeMFLoader};
|
|
1
|
+
function a(){const bF=['4115992rWpRzJ','2737290SRjelE','load','clone','build','tilestyleu','i:in','toLowerCase','wrapT','colors','setIndex','nodeName','querySelectorAll','texture2dgroup','path','2795408mjuwWL','10213578ipcJcg','vertices','model','length','1182633EKqOQI','4mefQLI','Rating','wrap','availableExtensions','mesh','colorgroup','vertices\x20vertex','name','magFilter','keys','resources','target','getAttribute','basematerials','triangles\x20triangle','push','revokeObjectURL','color','87396Sinthb','error','objectId','contenttype','extensions','forEach','parseFromString','default','pid','Relationship','roughness','mirror','1RgBVha','texture','vertexColors','transform','setPath','attributes','71394kpBTAv','objectid','THREE.3MFLoader:\x20fflate\x20missing\x20and\x20file\x20is\x20compressed.','value','position'];a=function(){return bF;};return a();}(function(w,x){const b4=b,y=w();while(!![]){try{const z=-parseInt(b4(0xcd))/0x1*(parseInt(b4(0xd3))/0x2)+-parseInt(b4(0xae))/0x3+-parseInt(b4(0xaf))/0x4*(-parseInt(b4(0xd9))/0x5)+-parseInt(b4(0xc1))/0x6+-parseInt(b4(0xa9))/0x7+-parseInt(b4(0xd8))/0x8+parseInt(b4(0xaa))/0x9;if(z===x)break;else y['push'](y['shift']());}catch(A){y['push'](y['shift']());}}}(a,0x4f18f));import{L as c,F as d,T as e,G,C as f,i as g,S as h,B as i,a as j,f as k,c as l,g as m,j as n,R as o,k as p,l as r,m as s,n as t,N as u}from'./ModelViewer.js';import{u as v}from'./fflate.module.js';import'vue';function b(c,d){c=c-0x9e;const e=a();let f=e[c];return f;}import'./index7.js';const U=h;class Be extends c{constructor(x){const b5=b;super(x),this[b5(0xb2)]=[];}['load'](x,y,z,A){const b6=b,B=this,F=new d(B['manager']);F[b6(0xd1)](B['path']),F['setResponseType']('arraybuffer'),F['setRequestHeader'](B['requestHeader']),F['setWithCredentials'](B['withCredentials']),F[b6(0xda)](x,function(H){try{y(B['parse'](H));}catch(N){A?A(N):console['error'](N),B['manager']['itemError'](x);}},z,A);}['parse'](x){const y=this,A=new e(this['manager']);function B(az){const b7=b;let aA=null,aB=null,aC,aD;const aE=[],aF=[];let aG;const aH={},aI={},aJ={},aK=new TextDecoder();try{aA=v(new Uint8Array(az));}catch(aP){if(aP instanceof ReferenceError)return console[b7(0xc2)](b7(0xd5)),null;}let aL=null;for(aB in aA)aB['match'](/\_rels\/.rels$/)?aC=aB:aB['match'](/3D\/_rels\/.*\.model\.rels$/)?aD=aB:aB['match'](/^3D\/[^\/]*\.model$/)?aL=aB:aB['match'](/^3D\/.*\/.*\.model$/)?aE['push'](aB):aB['match'](/^3D\/Textures?\/.*/)&&aF['push'](aB);if(aE['push'](aL),aC===void 0x0)throw new Error('THREE.ThreeMFLoader:\x20Cannot\x20find\x20relationship\x20file\x20`rels`\x20in\x203MF\x20archive.');const aM=aA[aC],aN=aK['decode'](aM),aO=F(aN);if(aD){const aQ=aA[aD],aR=aK['decode'](aQ);aG=F(aR);}for(let aS=0x0;aS<aE['length'];aS++){const aT=aE[aS],aU=aA[aT],aV=aK['decode'](aU),aW=new DOMParser()['parseFromString'](aV,'application/xml');aW['documentElement']['nodeName'][b7(0xa1)]()!==b7(0xac)&&console['error']('THREE.3MFLoader:\x20Error\x20loading\x203MF\x20-\x20no\x203MF\x20document\x20found:\x20',aT);const aX=aW['querySelector']('model'),aY={};for(let b0=0x0;b0<aX['attributes']['length'];b0++){const b1=aX[b7(0xd2)][b0];b1['name']['match'](/^xmlns:(.+)$/)&&(aY[b1[b7(0xd6)]]=RegExp['$1']);}const aZ=af(aX);aZ['xml']=aX,0x0<Object[b7(0xb8)](aY)[b7(0xad)]&&(aZ[b7(0xc5)]=aY),aH[aT]=aZ;}for(let b2=0x0;b2<aF['length'];b2++){const b3=aF[b2];aJ[b3]=aA[b3]['buffer'];}return{'rels':aO,'modelRels':aG,'model':aH,'printTicket':aI,'texture':aJ};}function F(az){const b8=b,aA=[],aB=new DOMParser()[b8(0xc7)](az,'application/xml')['querySelectorAll'](b8(0xca));for(let aC=0x0;aC<aB['length'];aC++){const aD=aB[aC],aE={'target':aD['getAttribute']('Target'),'id':aD['getAttribute']('Id'),'type':aD['getAttribute']('Type')};aA['push'](aE);}return aA;}function N(az){const b9=b,aA={};for(let aB=0x0;aB<az[b9(0xad)];aB++){const aC=az[aB],aD=aC['getAttribute'](b9(0xb6));0x0<=['Title','Designer','Description','Copyright','LicenseTerms',b9(0xb0),'CreationDate','ModificationDate']['indexOf'](aD)&&(aA[aD]=aC['textContent']);}return aA;}function W(az){const ba=b,aA={'id':az['getAttribute']('id'),'basematerials':[]},aB=az[ba(0xa6)]('base');for(let aC=0x0;aC<aB['length'];aC++){const aD=aB[aC],aE=a6(aD);aE['index']=aC,aA[ba(0xbc)]['push'](aE);}return aA;}function a0(az){const bb=b;return{'id':az[bb(0xbb)]('id'),'path':az[bb(0xbb)]('path'),'contenttype':az[bb(0xbb)]('contenttype'),'tilestyleu':az['getAttribute'](bb(0x9f)),'tilestylev':az['getAttribute']('tilestylev'),'filter':az[bb(0xbb)]('filter')};}function a1(az){const bc=b,aA={'id':az[bc(0xbb)]('id'),'texid':az['getAttribute']('texid'),'displaypropertiesid':az['getAttribute']('displaypropertiesid')},aB=az['querySelectorAll']('tex2coord'),aC=[];for(let aD=0x0;aD<aB[bc(0xad)];aD++){const aE=aB[aD],aF=aE[bc(0xbb)]('u'),aG=aE['getAttribute']('v');aC[bc(0xbe)](parseFloat(aF),parseFloat(aG));}return aA['uvs']=new Float32Array(aC),aA;}function a2(az){const bd=b,aA={'id':az['getAttribute']('id'),'displaypropertiesid':az['getAttribute']('displaypropertiesid')},aB=az['querySelectorAll'](bd(0xc0)),aC=[],aD=new f();for(let aE=0x0;aE<aB['length'];aE++){const aF=aB[aE]['getAttribute']('color');aD['setStyle'](aF['substring'](0x0,0x7),U),aC['push'](aD['r'],aD['g'],aD['b']);}return aA[bd(0xa3)]=new Float32Array(aC),aA;}function a3(az){const be=b,aA=az['children'],aB={};for(let aC=0x0;aC<aA['length'];aC++){const aD={'type':aA[aC]['nodeName']['substring'](0x2)};for(let aE=0x0;aE<aA[aC]['attributes']['length'];aE++){const aF=aA[aC][be(0xd2)][aE];aF['specified']&&(aD[aF[be(0xb6)]]=aF['value']);}aB[aA[aC]['getAttribute']('identifier')]=aD;}return aB;}function a4(az){const bf=b,aA={'id':az['getAttribute']('id'),'displayname':az['getAttribute']('displayname')},aB=az['children'],aC={};for(let aD=0x0;aD<aB['length'];aD++){const aE=aB[aD];if(aE[bf(0xa5)]===bf(0xa0)||aE['nodeName']==='i:out')aC[aE['nodeName']==='i:in'?'inputs':'outputs']=a3(aE);else{const aF=aE['children'],aG={'op':aE['nodeName']['substring'](0x2),'identifier':aE['getAttribute']('identifier')};for(let aH=0x0;aH<aF['length'];aH++)aG[aF[aH]['nodeName']['substring'](0x2)]=a3(aF[aH]);aC[aG['identifier']]=aG;}}return aA['operations']=aC,aA;}function a5(az){const bg=b,aA={'id':az['getAttribute']('id')},aB=az['querySelectorAll']('pbmetallic'),aC=[];for(let aD=0x0;aD<aB['length'];aD++){const aE=aB[aD];aC['push']({'name':aE['getAttribute'](bg(0xb6)),'metallicness':parseFloat(aE['getAttribute']('metallicness')),'roughness':parseFloat(aE['getAttribute']('roughness'))});}return aA['data']=aC,aA;}function a6(az){const aA={};return aA['name']=az['getAttribute']('name'),aA['displaycolor']=az['getAttribute']('displaycolor'),aA['displaypropertiesid']=az['getAttribute']('displaypropertiesid'),aA;}function a7(az){const bh=b,aA={},aB=[],aC=az['querySelectorAll'](bh(0xb5));for(let aG=0x0;aG<aC['length'];aG++){const aH=aC[aG],aI=aH['getAttribute']('x'),aJ=aH[bh(0xbb)]('y'),aK=aH['getAttribute']('z');aB['push'](parseFloat(aI),parseFloat(aJ),parseFloat(aK));}aA['vertices']=new Float32Array(aB);const aD=[],aE=[],aF=az['querySelectorAll'](bh(0xbd));for(let aL=0x0;aL<aF['length'];aL++){const aM=aF[aL],aN=aM['getAttribute']('v1'),aO=aM['getAttribute']('v2'),aP=aM['getAttribute']('v3'),aQ=aM['getAttribute']('p1'),aR=aM['getAttribute']('p2'),aS=aM['getAttribute']('p3'),aT=aM['getAttribute']('pid'),aU={};aU['v1']=parseInt(aN,0xa),aU['v2']=parseInt(aO,0xa),aU['v3']=parseInt(aP,0xa),aE['push'](aU['v1'],aU['v2'],aU['v3']),aQ&&(aU['p1']=parseInt(aQ,0xa)),aR&&(aU['p2']=parseInt(aR,0xa)),aS&&(aU['p3']=parseInt(aS,0xa)),aT&&(aU[bh(0xc9)]=aT),0x0<Object[bh(0xb8)](aU)['length']&&aD['push'](aU);}return aA['triangleProperties']=aD,aA['triangles']=new Uint32Array(aE),aA;}function a8(az){const aA=[],aB=az['querySelectorAll']('component');for(let aC=0x0;aC<aB['length'];aC++){const aD=aB[aC],aE=a9(aD);aA['push'](aE);}return aA;}function a9(az){const bi=b,aA={};aA['objectId']=az['getAttribute'](bi(0xd4));const aB=az['getAttribute'](bi(0xd0));return aB&&(aA['transform']=aa(aB)),aA;}function aa(az){const bj=b,aA=[];az['split']('\x20')[bj(0xc6)](function(aC){aA['push'](parseFloat(aC));});const aB=new g();return aB['set'](aA[0x0],aA[0x3],aA[0x6],aA[0x9],aA[0x1],aA[0x4],aA[0x7],aA[0xa],aA[0x2],aA[0x5],aA[0x8],aA[0xb],0x0,0x0,0x0,0x1),aB;}function ab(az){const bk=b,aA={'type':az['getAttribute']('type')},aB=az['getAttribute']('id');aB&&(aA['id']=aB);const aC=az['getAttribute']('pid');aC&&(aA['pid']=aC);const aD=az['getAttribute']('pindex');aD&&(aA['pindex']=aD);const aE=az['getAttribute']('thumbnail');aE&&(aA['thumbnail']=aE);const aF=az['getAttribute']('partnumber');aF&&(aA['partnumber']=aF);const aG=az[bk(0xbb)]('name');aG&&(aA['name']=aG);const aH=az['querySelector'](bk(0xb3));aH&&(aA['mesh']=a7(aH));const aI=az['querySelector']('components');return aI&&(aA['components']=a8(aI)),aA;}function ac(az){const bl=b,aA={};aA['basematerials']={};const aB=az['querySelectorAll']('basematerials');for(let aI=0x0;aI<aB['length'];aI++){const aJ=aB[aI],aK=W(aJ);aA['basematerials'][aK['id']]=aK;}aA['texture2d']={};const aC=az['querySelectorAll']('texture2d');for(let aL=0x0;aL<aC['length'];aL++){const aM=aC[aL],aN=a0(aM);aA['texture2d'][aN['id']]=aN;}aA['colorgroup']={};const aD=az[bl(0xa6)](bl(0xb4));for(let aO=0x0;aO<aD['length'];aO++){const aP=aD[aO],aQ=a2(aP);aA[bl(0xb4)][aQ['id']]=aQ;}const aE=az[bl(0xa6)]('implicitfunction');aE['length']>0x0&&(aA['implicitfunction']={});for(let aR=0x0;aR<aE[bl(0xad)];aR++){const aS=aE[aR],aT=a4(aS);aA['implicitfunction'][aT['id']]=aT;}aA['pbmetallicdisplayproperties']={};const aF=az['querySelectorAll']('pbmetallicdisplayproperties');for(let aU=0x0;aU<aF['length'];aU++){const aV=aF[aU],aW=a5(aV);aA['pbmetallicdisplayproperties'][aW['id']]=aW;}aA['texture2dgroup']={};const aG=az['querySelectorAll'](bl(0xa7));for(let aX=0x0;aX<aG[bl(0xad)];aX++){const aY=aG[aX],aZ=a1(aY);aA['texture2dgroup'][aZ['id']]=aZ;}aA['object']={};const aH=az['querySelectorAll']('object');for(let b0=0x0;b0<aH['length'];b0++){const b1=aH[b0],b2=ab(b1);aA['object'][b2['id']]=b2;}return aA;}function ad(az){const bm=b,aA=[],aB=az[bm(0xa6)]('item');for(let aC=0x0;aC<aB['length'];aC++){const aD=aB[aC],aE={'objectId':aD['getAttribute'](bm(0xd4))},aF=aD['getAttribute']('transform');aF&&(aE[bm(0xd0)]=aa(aF)),aA['push'](aE);}return aA;}function af(az){const bn=b,aA={'unit':az['getAttribute']('unit')||'millimeter'},aB=az['querySelectorAll']('metadata');aB&&(aA['metadata']=N(aB));const aC=az['querySelector']('resources');aC&&(aA['resources']=ac(aC));const aD=az['querySelector'](bn(0x9e));return aD&&(aA['build']=ad(aD)),aA;}function ag(az,aA,aB,aC){const bo=b,aD=az['texid'],aE=aB['resources']['texture2d'][aD];if(aE){const aF=aC[aE[bo(0xa8)]],aG=aE[bo(0xc4)],aH=new Blob([aF],{'type':aG}),aI=URL['createObjectURL'](aH),aJ=A['load'](aI,function(){const bp=bo;URL[bp(0xbf)](aI);});switch(aJ['colorSpace']=U,aE[bo(0x9f)]){case bo(0xb1):aJ['wrapS']=o;break;case bo(0xcc):aJ['wrapS']=r;break;case'none':case'clamp':aJ['wrapS']=p;break;default:aJ['wrapS']=o;}switch(aE['tilestylev']){case'wrap':aJ['wrapT']=o;break;case'mirror':aJ['wrapT']=r;break;case'none':case'clamp':aJ[bo(0xa2)]=p;break;default:aJ['wrapT']=o;}switch(aE['filter']){case'auto':aJ['magFilter']=s,aJ['minFilter']=t;break;case'linear':aJ[bo(0xb7)]=s,aJ['minFilter']=s,aJ['generateMipmaps']=!0x1;break;case'nearest':aJ['magFilter']=u,aJ['minFilter']=u,aJ['generateMipmaps']=!0x1;break;default:aJ['magFilter']=s,aJ['minFilter']=t;}return aJ;}else return null;}function ah(az,aA,aB,aC,aD,aE,aF){const bq=b,aG=aF['pindex'],aH={};for(let aK=0x0,aL=aA[bq(0xad)];aK<aL;aK++){const aM=aA[aK],aN=aM['p1']!==void 0x0?aM['p1']:aG;aH[aN]===void 0x0&&(aH[aN]=[]),aH[aN]['push'](aM);}const aI=Object['keys'](aH),aJ=[];for(let aO=0x0,aP=aI['length'];aO<aP;aO++){const aQ=aI[aO],aR=aH[aQ],aS=az['basematerials'][aQ],aT=aq(aS,aC,aD,aE,aF,ar),aU=new i(),aV=[],aW=aB['vertices'];for(let aY=0x0,aZ=aR['length'];aY<aZ;aY++){const b0=aR[aY];aV['push'](aW[b0['v1']*0x3+0x0]),aV[bq(0xbe)](aW[b0['v1']*0x3+0x1]),aV['push'](aW[b0['v1']*0x3+0x2]),aV['push'](aW[b0['v2']*0x3+0x0]),aV['push'](aW[b0['v2']*0x3+0x1]),aV['push'](aW[b0['v2']*0x3+0x2]),aV['push'](aW[b0['v3']*0x3+0x0]),aV['push'](aW[b0['v3']*0x3+0x1]),aV['push'](aW[b0['v3']*0x3+0x2]);}aU['setAttribute']('position',new j(aV,0x3));const aX=new k(aU,aT);aJ['push'](aX);}return aJ;}function ai(az,aA,aB,aC,aD,aE,aF){const br=b,aG=new i(),aH=[],aI=[],aJ=aB[br(0xab)],aK=az['uvs'];for(let aN=0x0,aO=aA['length'];aN<aO;aN++){const aP=aA[aN];aH['push'](aJ[aP['v1']*0x3+0x0]),aH['push'](aJ[aP['v1']*0x3+0x1]),aH['push'](aJ[aP['v1']*0x3+0x2]),aH['push'](aJ[aP['v2']*0x3+0x0]),aH['push'](aJ[aP['v2']*0x3+0x1]),aH['push'](aJ[aP['v2']*0x3+0x2]),aH['push'](aJ[aP['v3']*0x3+0x0]),aH[br(0xbe)](aJ[aP['v3']*0x3+0x1]),aH[br(0xbe)](aJ[aP['v3']*0x3+0x2]),aI['push'](aK[aP['p1']*0x2+0x0]),aI[br(0xbe)](aK[aP['p1']*0x2+0x1]),aI['push'](aK[aP['p2']*0x2+0x0]),aI['push'](aK[aP['p2']*0x2+0x1]),aI[br(0xbe)](aK[aP['p3']*0x2+0x0]),aI['push'](aK[aP['p3']*0x2+0x1]);}aG['setAttribute']('position',new j(aH,0x3)),aG['setAttribute']('uv',new j(aI,0x2));const aL=aq(az,aC,aD,aE,aF,ag),aM=new l({'map':aL,'flatShading':!0x0});return new k(aG,aM);}function aj(az,aA,aB,aC){const bs=b,aD=new i(),aE=[],aF=[],aG=aB['vertices'],aH=az['colors'];for(let aJ=0x0,aK=aA['length'];aJ<aK;aJ++){const aL=aA[aJ],aM=aL['v1'],aN=aL['v2'],aO=aL['v3'];aE['push'](aG[aM*0x3+0x0]),aE['push'](aG[aM*0x3+0x1]),aE['push'](aG[aM*0x3+0x2]),aE['push'](aG[aN*0x3+0x0]),aE[bs(0xbe)](aG[aN*0x3+0x1]),aE['push'](aG[aN*0x3+0x2]),aE[bs(0xbe)](aG[aO*0x3+0x0]),aE['push'](aG[aO*0x3+0x1]),aE['push'](aG[aO*0x3+0x2]);const aP=aL['p1']!==void 0x0?aL['p1']:aC['pindex'],aQ=aL['p2']!==void 0x0?aL['p2']:aP,aR=aL['p3']!==void 0x0?aL['p3']:aP;aF['push'](aH[aP*0x3+0x0]),aF[bs(0xbe)](aH[aP*0x3+0x1]),aF['push'](aH[aP*0x3+0x2]),aF['push'](aH[aQ*0x3+0x0]),aF['push'](aH[aQ*0x3+0x1]),aF['push'](aH[aQ*0x3+0x2]),aF['push'](aH[aR*0x3+0x0]),aF['push'](aH[aR*0x3+0x1]),aF['push'](aH[aR*0x3+0x2]);}aD['setAttribute'](bs(0xd7),new j(aE,0x3)),aD['setAttribute']('color',new j(aF,0x3));const aI=new l({'vertexColors':!0x0,'flatShading':!0x0});return new k(aD,aI);}function ak(az){const bt=b,aA=new i();aA[bt(0xa4)](new m(az['triangles'],0x1)),aA['setAttribute'](bt(0xd7),new m(az[bt(0xab)],0x3));const aB=new l({'name':c['DEFAULT_MATERIAL_NAME'],'color':0xffffff,'flatShading':!0x0});return new k(aA,aB);}function al(az,aA,aB,aC,aD,aE){const bu=b,aF=Object['keys'](az),aG=[];for(let aH=0x0,aI=aF['length'];aH<aI;aH++){const aJ=aF[aH],aK=az[aJ];switch(am(aJ,aC)){case'material':const aL=aC['resources']['basematerials'][aJ],aM=ah(aL,aK,aA,aB,aC,aD,aE);for(let aP=0x0,aQ=aM['length'];aP<aQ;aP++)aG['push'](aM[aP]);break;case'texture':const aN=aC['resources']['texture2dgroup'][aJ];aG['push'](ai(aN,aK,aA,aB,aC,aD,aE));break;case bu(0xcf):const aO=aC['resources']['colorgroup'][aJ];aG['push'](aj(aO,aK,aA,aE));break;case'default':aG[bu(0xbe)](ak(aA));break;default:console[bu(0xc2)]('THREE.3MFLoader:\x20Unsupported\x20resource\x20type.');}}if(aE[bu(0xb6)]){for(let aR=0x0;aR<aG['length'];aR++)aG[aR]['name']=aE['name'];}return aG;}function am(az,aA){const bv=b;return aA['resources']['texture2dgroup'][az]!==void 0x0?bv(0xce):aA['resources']['basematerials'][az]!==void 0x0?'material':aA['resources']['colorgroup'][az]!==void 0x0?'vertexColors':az==='default'?'default':void 0x0;}function an(az,aA){const bw=b,aB={},aC=az['triangleProperties'],aD=aA[bw(0xc9)];for(let aE=0x0,aF=aC['length'];aE<aF;aE++){const aG=aC[aE];let aH=aG['pid']!==void 0x0?aG['pid']:aD;aH===void 0x0&&(aH=bw(0xc8)),aB[aH]===void 0x0&&(aB[aH]=[]),aB[aH][bw(0xbe)](aG);}return aB;}function ao(az,aA,aB,aC,aD){const bx=b,aE=new G(),aF=an(az,aD),aG=al(aF,az,aA,aB,aC,aD);for(let aH=0x0,aI=aG[bx(0xad)];aH<aI;aH++)aE['add'](aG[aH]);return aE;}function ap(az,aA,aB){const by=b;if(!az)return;const aC=[],aD=Object['keys'](az);for(let aE=0x0;aE<aD['length'];aE++){const aF=aD[aE];for(let aG=0x0;aG<y['availableExtensions']['length'];aG++){const aH=y['availableExtensions'][aG];aH['ns']===aF&&aC[by(0xbe)](aH);}}for(let aI=0x0;aI<aC['length'];aI++){const aJ=aC[aI];aJ['apply'](aB,az[aJ['ns']],aA);}}function aq(az,aA,aB,aC,aD,aE){const bz=b;return az[bz(0x9e)]!==void 0x0||(az['build']=aE(az,aA,aB,aC,aD)),az['build'];}function ar(az,aA,aB){const bA=b;let aC;const aD=az['displaypropertiesid'],aE=aB['resources']['pbmetallicdisplayproperties'];if(aD!==null&&aE[aD]!==void 0x0){const aH=aE[aD]['data'][az['index']];aC=new n({'flatShading':!0x0,'roughness':aH[bA(0xcb)],'metalness':aH['metallicness']});}else aC=new l({'flatShading':!0x0});aC['name']=az[bA(0xb6)];const aF=az['displaycolor'],aG=aF['substring'](0x0,0x7);return aC['color']['setStyle'](aG,U),aF['length']===0x9&&(aC['opacity']=parseInt(aF['charAt'](0x7)+aF['charAt'](0x8),0x10)/0xff),aC;}function as(az,aA,aB,aC){const aD=new G();for(let aE=0x0;aE<az['length'];aE++){const aF=az[aE];let aG=aA[aF['objectId']];aG===void 0x0&&(at(aF['objectId'],aA,aB,aC),aG=aA[aF['objectId']]);const aH=aG['clone'](),aI=aF['transform'];aI&&aH['applyMatrix4'](aI),aD['add'](aH);}return aD;}function at(az,aA,aB,aC){const bB=b,aD=aB['resources']['object'][az];if(aD['mesh']){const aE=aD[bB(0xb3)],aF=aB['extensions'],aG=aB['xml'];ap(aF,aE,aG),aA[aD['id']]=aq(aE,aA,aB,aC,aD,ao);}else{const aH=aD['components'];aA[aD['id']]=aq(aH,aA,aB,aC,aD,as);}aD[bB(0xb6)]&&(aA[aD['id']][bB(0xb6)]=aD['name']),aB['resources']['implicitfunction']&&console['warn']('THREE.ThreeMFLoader:\x20Implicit\x20Functions\x20are\x20implemented\x20in\x20data-only.',aB['resources']['implicitfunction']);}function au(az){const bC=b,aA=az['model'],aB=az['modelRels'],aC={},aD=Object['keys'](aA),aE={};if(aB)for(let aF=0x0,aG=aB['length'];aF<aG;aF++){const aH=aB[aF],aI=aH['target']['substring'](0x1);az['texture'][aI]&&(aE[aH[bC(0xba)]]=az['texture'][aI]);}for(let aJ=0x0;aJ<aD['length'];aJ++){const aK=aD[aJ],aL=aA[aK],aM=Object['keys'](aL[bC(0xb9)]['object']);for(let aN=0x0;aN<aM['length'];aN++){const aO=aM[aN];at(aO,aC,aL,aE);}}return aC;}function av(az){for(let aA=0x0;aA<az['length'];aA++){const aB=az[aA];if(aB['target']['split']('.')['pop']()['toLowerCase']()==='model')return aB;}}function aw(az,aA){const bD=b,aB=new G(),aC=av(aA['rels']),aD=aA['model'][aC['target']['substring'](0x1)]['build'];for(let aE=0x0;aE<aD['length'];aE++){const aF=aD[aE],aG=az[aF[bD(0xc3)]][bD(0xdb)](),aH=aF['transform'];aH&&aG['applyMatrix4'](aH),aB['add'](aG);}return aB;}const ax=B(x),ay=au(ax);return aw(ay,ax);}['addExtension'](x){const bE=b;this['availableExtensions'][bE(0xbe)](x);}}export{Be as ThreeMFLoader};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const
|
|
1
|
+
const ar=b;(function(m,n){const ao=b,o=m();while(!![]){try{const p=parseInt(ao(0x105))/0x1*(parseInt(ao(0x109))/0x2)+parseInt(ao(0xfe))/0x3+-parseInt(ao(0x117))/0x4+-parseInt(ao(0x110))/0x5+parseInt(ao(0x103))/0x6*(parseInt(ao(0x113))/0x7)+parseInt(ao(0xf8))/0x8*(parseInt(ao(0x102))/0x9)+parseInt(ao(0xfb))/0xa;if(p===n)break;else o['push'](o['shift']());}catch(q){o['push'](o['shift']());}}}(a,0x7fdec));import{L as c,F as d,G as e,c as f,a as g,C as h,B as i,f as j}from'./ModelViewer.js';import{u as l}from'./fflate.module.js';import'vue';function b(c,d){c=c-0xf4;const e=a();let f=e[c];return f;}import'./index7.js';class k extends c{constructor(m){super(m);}['load'](m,n,o,q){const ap=b,r=this,t=new d(r[ap(0x108)]);t['setPath'](r['path']),t['setResponseType'](ap(0x104)),t['setRequestHeader'](r[ap(0x10f)]),t[ap(0x112)](r[ap(0x100)]),t['load'](m,function(v){const aq=ap;try{n(r['parse'](v));}catch(w){q?q(w):console[aq(0x114)](w),r['manager']['itemError'](m);}},o,q);}[ar(0xf7)](q){const az=ar;function G(a8){const as=b;let a9=new DataView(a8);if(String['fromCharCode'](a9['getUint8'](0x0),a9['getUint8'](0x1))==='PK'){let ac=null,ad=null;console['log'](as(0x115));try{ac=l(new Uint8Array(a8));}catch(ae){if(ae instanceof ReferenceError)return console['log']('THREE.AMFLoader:\x20fflate\x20missing\x20and\x20file\x20is\x20compressed.'),null;}for(ad in ac)if(ad[as(0xfd)]()['slice'](-0x4)==='.amf')break;console['log']('THREE.AMFLoader:\x20Trying\x20to\x20load\x20file\x20asset:\x20'+ad),a9=new DataView(ac[ad][as(0x10e)]);}const aa=new TextDecoder()['decode'](a9),ab=new DOMParser()['parseFromString'](aa,'application/xml');return ab['documentElement']['nodeName']['toLowerCase']()!=='amf'?(console['log']('THREE.AMFLoader:\x20Error\x20loading\x20AMF\x20-\x20no\x20AMF\x20document\x20found.'),null):ab;}function J(a8){const at=b;let a9=0x1,aa=at(0x107);a8['documentElement'][at(0x101)]['unit']!==void 0x0&&(aa=a8['documentElement']['attributes']['unit'][at(0xf9)]['toLowerCase']());const ab={'millimeter':0x1,'inch':25.4,'feet':304.8,'meter':0x3e8,'micron':0.001};return ab[aa]!==void 0x0&&(a9=ab[aa]),console['log']('THREE.AMFLoader:\x20Unit\x20scale:\x20'+a9),a9;}function K(a8){const au=b;let a9='AMF\x20Material';const aa=a8['attributes']['id']['textContent'];let ab={'r':0x1,'g':0x1,'b':0x1,'a':0x1},ac=null;for(let ad=0x0;ad<a8['childNodes']['length'];ad++){const ae=a8['childNodes'][ad];ae[au(0x11c)]===au(0x111)&&ae[au(0x101)]['type']!==void 0x0?ae['attributes']['type'][au(0xf9)]==='name'&&(a9=ae['textContent']):ae['nodeName']===au(0x11a)&&(ab=P(ae));}return ac=new f({'flatShading':!0x0,'color':new h(ab['r'],ab['g'],ab['b']),'name':a9}),ab['a']!==0x1&&(ac[au(0x10b)]=!0x0,ac['opacity']=ab['a']),{'id':aa,'material':ac};}function P(a8){const av=b,a9={'r':0x1,'g':0x1,'b':0x1,'a':0x1};for(let aa=0x0;aa<a8['childNodes']['length'];aa++){const ab=a8['childNodes'][aa];ab['nodeName']==='r'?a9['r']=ab['textContent']:ab['nodeName']==='g'?a9['g']=ab[av(0xf4)]:ab['nodeName']==='b'?a9['b']=ab['textContent']:ab['nodeName']==='a'&&(a9['a']=ab['textContent']);}return a9;}function Q(a8){const aw=b,a9={'name':'','triangles':[],'materialId':null};let aa=a8[aw(0x118)];for(a8['attributes']['materialid']!==void 0x0&&(a9['materialId']=a8['attributes']['materialid']['nodeValue']);aa;){if(aa['nodeName']==='metadata')aa['attributes']['type']!==void 0x0&&aa['attributes'][aw(0x11d)]['value']==='name'&&(a9[aw(0x10c)]=aa[aw(0xf4)]);else{if(aa[aw(0x11c)]==='triangle'){const ab=aa[aw(0x10d)]('v1')[0x0]['textContent'],ac=aa[aw(0x10d)]('v2')[0x0]['textContent'],ad=aa['getElementsByTagName']('v3')[0x0]['textContent'];a9['triangles']['push'](ab,ac,ad);}}aa=aa['nextElementSibling'];}return a9;}function U(a8){const ax=b,a9=[],aa=[];let ab=a8['firstElementChild'];for(;ab;){if(ab['nodeName']==='vertex'){let ac=ab['firstElementChild'];for(;ac;){if(ac['nodeName']==='coordinates'){const ad=ac['getElementsByTagName']('x')[0x0]['textContent'],ae=ac['getElementsByTagName']('y')[0x0]['textContent'],af=ac['getElementsByTagName']('z')[0x0]['textContent'];a9['push'](ad,ae,af);}else{if(ac['nodeName']==='normal'){const ag=ac['getElementsByTagName']('nx')[0x0]['textContent'],ah=ac[ax(0x10d)]('ny')[0x0]['textContent'],ai=ac['getElementsByTagName']('nz')[0x0]['textContent'];aa['push'](ag,ah,ai);}}ac=ac['nextElementSibling'];}}ab=ab['nextElementSibling'];}return{'vertices':a9,'normals':aa};}function W(a8){const ay=b,a9=a8['attributes']['id']['textContent'],aa={'name':'amfobject','meshes':[]};let ab=null,ac=a8['firstElementChild'];for(;ac;){if(ac[ay(0x11c)]==='metadata')ac[ay(0x101)]['type']!==void 0x0&&ac['attributes']['type']['value']==='name'&&(aa['name']=ac[ay(0xf4)]);else{if(ac['nodeName']===ay(0x11a))ab=P(ac);else{if(ac['nodeName']==='mesh'){let ad=ac[ay(0x118)];const ae={'vertices':[],'normals':[],'volumes':[],'color':ab};for(;ad;){if(ad['nodeName']==='vertices'){const af=U(ad);ae['normals']=ae[ay(0x119)][ay(0xf5)](af['normals']),ae['vertices']=ae[ay(0x11b)]['concat'](af[ay(0x11b)]);}else ad['nodeName']===ay(0x116)&&ae[ay(0x11e)]['push'](Q(ad));ad=ad['nextElementSibling'];}aa['meshes']['push'](ae);}}}ac=ac['nextElementSibling'];}return{'id':a9,'obj':aa};}const X=G(q);let Y='',Z='';const a0=J(X),a1={},a2={},a3=X['documentElement']['childNodes'];let a4,a5;for(a4=0x0;a4<a3['length'];a4++){const a8=a3[a4];if(a8['nodeName']==='metadata')a8['attributes']['type']!==void 0x0&&(a8[az(0x101)]['type'][az(0xf9)]==='name'?Y=a8[az(0xf4)]:a8['attributes']['type']['value']==='author'&&(Z=a8['textContent']));else{if(a8['nodeName']==='material'){const a9=K(a8);a1[a9['id']]=a9['material'];}else{if(a8[az(0x11c)]==='object'){const aa=W(a8);a2[aa['id']]=aa['obj'];}}}}const a6=new e(),a7=new f({'name':c[az(0xff)],'color':0xaaaaff,'flatShading':!0x0});a6['name']=Y,a6['userData']['author']=Z,a6['userData'][az(0xfc)]='AMF';for(const ab in a2){const ac=a2[ab],ad=ac[az(0xfa)],ae=new e();for(ae['name']=ac[az(0x10c)]||'',a4=0x0;a4<ad[az(0x10a)];a4++){let af=a7;const ag=ad[a4],ah=new g(ag['vertices'],0x3);let ai=null;if(ag['normals']['length']&&(ai=new g(ag['normals'],0x3)),ag['color']){const ak=ag['color'];af=a7['clone'](),af['color']=new h(ak['r'],ak['g'],ak['b']),ak['a']!==0x1&&(af['transparent']=!0x0,af['opacity']=ak['a']);}const aj=ag['volumes'];for(a5=0x0;a5<aj['length'];a5++){const al=aj[a5],am=new i();let an=af;am['setIndex'](al['triangles']),am['setAttribute']('position',ah['clone']()),ai&&am['setAttribute']('normal',ai['clone']()),a1[al['materialId']]!==void 0x0&&(an=a1[al[az(0x106)]]),am[az(0xf6)](a0,a0,a0),ae['add'](new j(am,an['clone']()));}}a6['add'](ae);}return a6;}}export{k as AMFLoader};function a(){const aA=['value','meshes','8092400jTkVqs','loader','toLowerCase','2648982JDGTZv','DEFAULT_MATERIAL_NAME','withCredentials','attributes','2038275IKbFVy','106698xZQZtW','arraybuffer','57hvewfE','materialId','millimeter','manager','3118jPaMpi','length','transparent','name','getElementsByTagName','buffer','requestHeader','5155865bZbdAw','metadata','setWithCredentials','21XJpDGE','error','THREE.AMFLoader:\x20Loading\x20Zip','volume','2023968jSGfVd','firstElementChild','normals','color','vertices','nodeName','type','volumes','textContent','concat','scale','parse','8CswNew'];a=function(){return aA;};return a();}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(k,l){const Z=c,m=k();while(!![]){try{const o
|
|
1
|
+
function c(b,d){b=b-0x106;const e=a();let f=e[b];return f;}(function(k,l){const Z=c,m=k();while(!![]){try{const o=parseInt(Z(0x112))/0x1+parseInt(Z(0x11a))/0x2*(parseInt(Z(0x10e))/0x3)+parseInt(Z(0x10c))/0x4*(parseInt(Z(0x110))/0x5)+-parseInt(Z(0x11e))/0x6*(parseInt(Z(0x118))/0x7)+parseInt(Z(0x111))/0x8+-parseInt(Z(0x108))/0x9*(parseInt(Z(0x11c))/0xa)+-parseInt(Z(0x11b))/0xb*(-parseInt(Z(0x117))/0xc);if(o===l)break;else m['push'](m['shift']());}catch(p){m['push'](m['shift']());}}}(a,0xd4b6a));import{defineComponent as d,ref as e,computed as f,onMounted as g,watch as h,onBeforeUnmount as i}from'vue';import{n as j}from'./index7.js';const M=d({'__name':'AudioViewer','props':{'data':null,'type':null},'setup'(k){const a0=c,q=k,x=e(null),z=e(''),B=e(0x0),C=e(0x0),E=e(!0x1),G={'aac':'audio/aac','flac':'audio/flac','m4a':'audio/mp4','mp3':'audio/mpeg','mpeg':'audio/mpeg','oga':a0(0x109),'ogg':'audio/ogg','opus':'audio/ogg;\x20codecs=opus','wav':'audio/wav','weba':'audio/webm'},H=f(()=>q['type']['trim']()['toLowerCase']()),I=f(()=>G[H['value']]||'audio/*'),J=f(()=>H[a0(0x114)]['toUpperCase']()||a0(0x116)),K=f(()=>!Number['isFinite'](C['value'])||C[a0(0x114)]<=0x0?0x0:Math['min'](0x64,Math['max'](0x0,B['value']/C['value']*0x64))),N=W=>{if(!Number['isFinite'](W)||W<=0x0)return'00:00';const X=Math['floor'](W/0x3c),Y=Math['floor'](W%0x3c);return String(X)['padStart'](0x2,'0')+':'+String(Y)['padStart'](0x2,'0');},O=()=>{z['value']&&(URL['revokeObjectURL'](z['value']),z['value']='');},P=()=>{O(),B['value']=0x0,C['value']=0x0,E['value']=!0x1,z['value']=URL['createObjectURL'](new Blob([q['data']],{'type':I['value']}));},Q=()=>{const a1=a0;C[a1(0x114)]=x['value']?.['duration']||0x0,E['value']=!0x0;},V=()=>{const a2=a0;B[a2(0x114)]=x[a2(0x114)]?.['currentTime']||0x0;};return g(P),h(()=>[q['data'],q[a0(0x10d)]],P),i(O),{'__sfc':!0x0,'props':q,'audioRef':x,'sourceUrl':z,'currentTime':B,'duration':C,'playable':E,'AUDIO_MIME_MAP':G,'normalizedType':H,'mimeType':I,'displayType':J,'progress':K,'formatTime':N,'revokeSource':O,'createSource':P,'handleLoadedMetadata':Q,'handleTimeUpdate':V};}});var A=function(){const a3=c;var k=this,l=k[a3(0x113)]['_c'],m=k['_self']['_setupProxy'];return l('div',{'staticClass':a3(0x107)},[l('section',{'staticClass':'audio-card'},[k['_m'](0x0),l('div',{'staticClass':a3(0x11d)},[l('span',{'staticClass':'audio-kicker'},[k['_v'](k['_s'](m['displayType']))]),l('strong',[k['_v']('音频预览')]),l('p',[k['_v']('使用浏览器原生播放器打开,兼容性取决于当前浏览器支持的音频编码。')])]),l('div',{'staticClass':'audio-meter'},[l('span',[k['_v'](k['_s'](m['formatTime'](m['currentTime'])))]),l(a3(0x10b),{'staticClass':a3(0x115),'attrs':{'aria-hidden':'true'}},[l('i',{'style':{'width':m['progress']+'%'}})]),l('span',[k['_v'](k['_s'](m['playable']?m['formatTime'](m['duration']):'--:--'))])]),l('audio',{'ref':a3(0x119),'staticClass':'audio-control','attrs':{'src':m[a3(0x106)],'controls':'','preload':'metadata'},'on':{'loadedmetadata':m['handleLoadedMetadata'],'timeupdate':m['handleTimeUpdate']}},[k['_v']('\x20当前浏览器不支持音频播放。\x20')])])]);},L=[function(){const a4=c;var k=this,l=k['_self']['_c'];return k[a4(0x113)]['_setupProxy'],l(a4(0x10b),{'staticClass':a4(0x10f)},[l(a4(0x10a)),l('i')]);}],R=j(M,A,L,!0x1,null,'608bd328',null,null);function a(){const a5=['value','audio-progress','AUDIO','24mIezTP','63rDUHZF','audioRef','2xsEnIU','2889909xTgzCI','12337760wzXzKC','audio-copy','583524DuszpP','sourceUrl','audio-viewer','9DuillI','audio/ogg','span','div','32RVTKdg','type','1508337LceTRd','audio-art','193845TEBebD','9304960duyxjP','478847kCxCNK','_self'];a=function(){return a5;};return a();}const S=R['exports'];export{S as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const aP=b;(function(j,k){const aO=b,l=j();while(!![]){try{const m=parseInt(aO(0x9d))/0x1+-parseInt(aO(0x87))/0x2+parseInt(aO(0x96))/0x3+-parseInt(aO(0x79))/0x4*(-parseInt(aO(0x84))/0x5)+-parseInt(aO(0x89))/0x6*(-parseInt(aO(0xa0))/0x7)+-parseInt(aO(0x91))/0x8*(parseInt(aO(0x8d))/0x9)+-parseInt(aO(0x7f))/0xa;if(m===k)break;else l['push'](l['shift']());}catch(n){l['push'](l['shift']());}}}(a,0x807d2));import{defineComponent as c,ref as d,computed as e,onMounted as f,onBeforeUnmount as g,nextTick as h}from'vue';import{n as i}from'./index7.js';const _e=c({'__name':aP(0x9b),'props':{'data':null,'type':null},'setup'(l){const aQ=aP,o=l,r=d(null),t=d([]),y=d(aQ(0x9a)),A=d('loading'),C=d(''),D=d(''),E=d(''),I=d(0x1);let K=null,L=null;const M=new TextDecoder('utf-8'),P=0x708,Q=P*P,R={'AC1015':'AutoCAD\x202000/2000i/2002','AC1018':'AutoCAD\x202004/2005/2006','AC1021':'AutoCAD\x202007/2008/2009','AC1024':'AutoCAD\x202010/2011/2012','AC1027':aQ(0x78),'AC1032':'AutoCAD\x202018/2019/2020/2021/2022/2023/2024'},S=aj=>aj instanceof Error?aj['message']:typeof aj==aQ(0xa6)?aj:JSON['stringify'](aj),a0=()=>{D['value']&&(URL['revokeObjectURL'](D['value']),D['value']='');},a1=aj=>Number(Math['min'](0x4,Math['max'](0.35,aj))[aQ(0x93)](0x2)),a2=e(()=>({'width':I['value']*0x64+'%'})),a3=aj=>{I['value']=a1(I['value']+aj);},a4=aj=>new Promise((ak,al)=>{const aR=aQ,am=URL[aR(0x77)](aj),an=new Image();an['onload']=()=>{URL['revokeObjectURL'](am),ak(an);},an['onerror']=()=>{URL['revokeObjectURL'](am),al(new Error('DWG\x20预览图加载失败'));},an[aR(0x7b)]=am;}),a5=(aj,ak,al)=>{const aS=aQ,am=[0x0,(ak-0x1)*0x4,(al-0x1)*ak*0x4,((al-0x1)*ak+ak-0x1)*0x4],an=am['reduce']((ao,ap)=>(ao['r']+=aj[ap],ao['g']+=aj[ap+0x1],ao['b']+=aj[ap+0x2],ao['a']+=aj[ap+0x3],ao),{'r':0x0,'g':0x0,'b':0x0,'a':0x0});return{'r':an['r']/am[aS(0x94)],'g':an['g']/am[aS(0x94)],'b':an['b']/am['length'],'a':an['a']/am['length']};},a6=(aj,ak,al)=>{const am=aj[ak]-al['r'],an=aj[ak+0x1]-al['g'],ao=aj[ak+0x2]-al['b'],ap=aj[ak+0x3]-al['a'];return Math['sqrt'](am*am+an*an+ao*ao+ap*ap);},a7=(aj,ak,al)=>aj[ak+0x3]<=0xc?!0x1:a6(aj,ak,al)>0x1c,a8=async aj=>{const aT=aQ,ak=await a4(aj),al=ak[aT(0x92)]||ak['width'],am=ak['naturalHeight']||ak['height'];if(!al||!am)return{'blob':aj,'cropped':!0x1};const an=Math['min'](0x1,P/Math['max'](al,am),Math['sqrt'](Q/(al*am))),ao=Math['max'](0x1,Math['round'](al*an)),ap=Math['max'](0x1,Math['round'](am*an)),aq=document['createElement']('canvas');aq['width']=ao,aq[aT(0x83)]=ap;const ar=aq[aT(0x85)]('2d',{'willReadFrequently':!0x0});if(!ar)return{'blob':aj,'cropped':!0x1};ar['drawImage'](ak,0x0,0x0,ao,ap);const as=ar['getImageData'](0x0,0x0,ao,ap),at=a5(as['data'],ao,ap);let au=ao,av=ap,aw=-0x1,ax=-0x1;for(let aK=0x0;aK<ap;aK+=0x1)for(let aL=0x0;aL<ao;aL+=0x1){const aM=(aK*ao+aL)*0x4;a7(as['data'],aM,at)&&(au=Math['min'](au,aL),av=Math['min'](av,aK),aw=Math['max'](aw,aL),ax=Math['max'](ax,aK));}if(aw<au||ax<av)return{'blob':aj,'cropped':!0x1};const ay=aw-au+0x1,az=ax-av+0x1;if(ay/ao>0.94&&az/ap>0.94)return{'blob':aj,'cropped':!0x1};const aA=Math[aT(0x9e)](0x8,Math['round'](Math['max'](ay,az)*0.04)),aB=Math['max'](0x0,Math['floor']((au-aA)/an)),aC=Math['max'](0x0,Math[aT(0x99)]((av-aA)/an)),aD=Math['min'](al,Math['ceil']((aw+aA+0x1)/an)),aE=Math['min'](am,Math['ceil']((ax+aA+0x1)/an)),aF=aD-aB,aG=aE-aC;if(aF<=0x0||aG<=0x0)return{'blob':aj,'cropped':!0x1};const aH=document[aT(0x74)]('canvas');aH['width']=aF,aH['height']=aG;const aI=aH['getContext']('2d');if(!aI)return{'blob':aj,'cropped':!0x1};aI['drawImage'](ak,aB,aC,aF,aG,0x0,0x0,aF,aG);const aJ=await new Promise(aN=>{const aU=aT;aH[aU(0x86)](aN,'image/png');});return{'blob':aJ||aj,'cropped':!!aJ};},a9=(aj,ak,al=0x0)=>{const aV=aQ;for(let am=al;am<=aj['length']-ak[aV(0x94)];am+=0x1){let an=!0x0;for(let ao=0x0;ao<ak[aV(0x94)];ao+=0x1)if(aj[am+ao]!==ak[ao]){an=!0x1;break;}if(an)return am;}return-0x1;},aa=()=>{const aW=aQ,aj=new Uint8Array(o['data']),ak=a9(aj,[0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa]);if(ak>=0x0){const an=a9(aj,[0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82],ak);if(an>ak)return new Blob([aj[aW(0x76)](ak,an+0x8)],{'type':aW(0x82)});}const al=a9(aj,[0xff,0xd8,0xff]);if(al>=0x0){const ao=a9(aj,[0xff,0xd9],al+0x3);if(ao>al)return new Blob([aj['slice'](al,ao+0x2)],{'type':aW(0x81)});}const am=a9(aj,[0x42,0x4d]);if(am>=0x0&&am+0x6<aj['length']){const ap=new DataView(o['data'],am)[aW(0x88)](0x2,!0x0);if(ap>0xe&&am+ap<=aj['length'])return new Blob([aj['slice'](am,am+ap)],{'type':'image/bmp'});}return null;},ab=()=>{const aX=aQ,aj=new Uint8Array(o[aX(0xa7)]['slice'](0x0,0x40));return Array['from'](aj)['map'](ak=>ak>=0x20&&ak<=0x7e?String[aX(0x8e)](ak):'\x20')['join']('')['trim']();},ac=()=>{const aj=M['decode'](o['data']['slice'](0x0,Math['min'](o['data']['byteLength'],0x200)));return/\bSECTION\b/['test'](aj)||/\$ACADVER/['test'](aj);},ad=aj=>{y['value']=aj,K?.['setTool'](aj);},ae=()=>{if(A['value']==='preview'){I['value']=0x1;return;}K?.['resize'](),K?.['fitToView']();},af=aj=>{const aY=aQ,ak=aj['isOff'];K?.[aY(0x80)](aj['name'],ak),t[aY(0xa4)]=t[aY(0xa4)]['map'](al=>al[aY(0x75)]===aj['name']?{...al,'isOff':!ak}:al);},ag=async()=>{const aj=r['value'];if(aj){A['value']='loading',C['value']='',I['value']=0x1,a0();try{const {CadViewer:ak}=await import('./index23.js');K?.['destroy'](),K=new ak(aj,{'theme':'light','initialTool':y['value'],'worker':!0x1}),K['loadArrayBuffer'](o['data']),await h(),ae(),t['value']=K['getLayers'](),A['value']='ready';}catch(al){console['error'](al),A['value']='error',C['value']=S(al)||'CAD\x20图纸解析失败';}}},ah=async()=>{const aZ=aQ;if(ac()){await ag();return;}A[aZ(0xa4)]=aZ(0x95),C['value']='',a0();const aj=ab()['slice'](0x0,0x6),ak=R[aj]?aj+'('+R[aj]+')':aj||'未知\x20DWG\x20版本',al=aa();if(al){const am=await a8(al);D['value']=URL['createObjectURL'](am['blob']),E['value']='已从\x20DWG\x20二进制中提取内嵌预览图,版本\x20'+ak+'。'+(am['cropped']?'已自动裁剪空白边距,便于查看有效内容。':'')+aZ(0xa1),A['value']='preview';return;}A['value']='error',C['value']=aZ(0xa3)+ak+'。';},ai=async()=>{const b0=aQ;if(o['type']['toLowerCase']()===b0(0x7a)){await ah();return;}await ag();};return f(()=>{ai();const aj=r['value'];aj&&(L=new ResizeObserver(()=>{const b1=b;K?.['resize'](),K?.[b1(0xa2)]();}),L['observe'](aj));}),g(()=>{L?.['disconnect'](),L=null,K?.['destroy'](),K=null,a0();}),{'__sfc':!0x0,'props':o,'canvas':r,'layers':t,'activeTool':y,'status':A,'errorMessage':C,'previewUrl':D,'previewMessage':E,'previewZoom':I,'viewer':K,'resizeObserver':L,'decoder':M,'PREVIEW_ANALYSIS_MAX_SIZE':P,'PREVIEW_MAX_ANALYSIS_PIXELS':Q,'dwgVersions':R,'normalizeError':S,'revokePreview':a0,'clampPreviewZoom':a1,'previewImageStyle':a2,'zoomPreview':a3,'loadImage':a4,'getCornerBackground':a5,'colorDistance':a6,'shouldKeepPreviewPixel':a7,'cropDwgPreview':a8,'findSequence':a9,'extractDwgPreview':aa,'getCadHeader':ab,'looksLikeDxf':ac,'setTool':ad,'fitToView':ae,'toggleLayer':af,'loadDxf':ag,'loadDwg':ah,'load':ai};}});var Ce=function(){const b2=aP;var j=this,k=j['_self']['_c'],l=j[b2(0x8f)]['_setupProxy'];return k('div',{'staticClass':b2(0x98)},[k(b2(0xa5),{'staticClass':'cad-toolbar'},[k(b2(0xa5),{'staticClass':'cad-tools'},[k('button',{'class':{'active':l[b2(0x8b)]==='pan'},'attrs':{'type':'button'},'on':{'click':function(m){return l['setTool']('pan');}}},[j['_v']('平移')]),k(b2(0x7c),{'class':{'active':l['activeTool']==='select'},'attrs':{'type':'button'},'on':{'click':function(m){return l['setTool']('select');}}},[j['_v']('选择')]),k(b2(0x7c),{'class':{'active':l['activeTool']==='measure'},'attrs':{'type':'button'},'on':{'click':function(m){return l['setTool']('measure');}}},[j['_v']('测量')]),k('button',{'attrs':{'type':'button'},'on':{'click':l[b2(0x7d)]}},[j['_v']('适配')]),l['status']==='preview'?[k('button',{'attrs':{'type':b2(0x7c),'title':'缩小\x20DWG\x20预览'},'on':{'click':function(m){return l['zoomPreview'](-0.15);}}},[j['_v']('-')]),k('span',{'staticClass':'cad-zoom'},[j['_v'](j['_s'](Math[b2(0x90)](l[b2(0x8c)]*0x64))+'%')]),k(b2(0x7c),{'attrs':{'type':'button','title':'放大\x20DWG\x20预览'},'on':{'click':function(m){return l['zoomPreview'](0.15);}}},[j['_v']('+')])]:j['_e']()],0x2),k('span',[j['_v'](j['_s'](j['type']['toUpperCase']()))])]),k('div',{'staticClass':'cad-body','class':{'without-layers':!l['layers']['length']}},[l['layers']['length']?k('aside',{'staticClass':'cad-layers'},j['_l'](l['layers'],function(m){const b3=b2;return k('button',{'key':m[b3(0x75)],'class':{'muted':m['isOff']},'attrs':{'type':'button'},'on':{'click':function(o){return l['toggleLayer'](m);}}},[j['_v']('\x20'+j['_s'](m['name'])+'\x20')]);}),0x0):j['_e'](),k('div',{'staticClass':'cad-canvas-wrap'},[k('canvas',{'ref':'canvas'}),l['status']===b2(0x95)?k('div',{'staticClass':b2(0x9f)},[j['_v'](b2(0x97))]):l['status']==='preview'?k('div',{'staticClass':'dwg-preview'},[k(b2(0xa5),{'staticClass':'dwg-preview-frame'},[k(b2(0x8a),{'style':l['previewImageStyle'],'attrs':{'src':l['previewUrl'],'alt':'DWG\x20内嵌预览图'}})]),k('p',[j['_v'](j['_s'](l['previewMessage']))])]):l['status']===b2(0x9c)?k('div',{'staticClass':'cad-state\x20error'},[j['_v'](j['_s'](l['errorMessage']))]):j['_e']()])])]);},ye=[],Me=i(_e,Ce,ye,!0x1,null,'4d603439',null,null);function b(c,d){c=c-0x74;const e=a();let f=e[c];return f;}function a(){const b4=['CadViewer','error','364348OjYamc','max','cad-state','301lCDmgp','这是文件保存时写入的快照,不等同于完整\x20CAD\x20几何解析。','requestRender','DWG\x20是专有二进制\x20CAD\x20格式,当前\x20Apache-2.0\x20前端包未内置\x20GPL\x20或闭源\x20DWG\x20解码器;此文件也没有可提取的内嵌预览图。请在业务侧转换为\x20DXF\x20后预览,或接入私有服务端转换链路。检测到的版本为\x20','value','div','string','data','createElement','name','slice','createObjectURL','AutoCAD\x202013/2014/2015/2016/2017','84308Roiufy','dwg','src','button','fitToView','exports','9723450WslvoK','setLayerVisible','image/jpeg','image/png','height','165ZDmlmr','getContext','toBlob','1207752vjEAmI','getUint32','85998HompPG','img','activeTool','previewZoom','954ZIOnNe','fromCharCode','_self','round','31872fLgIba','naturalWidth','toFixed','length','loading','2545821AQtwOt','正在解析\x20CAD...','cad-viewer','floor','pan'];a=function(){return b4;};return a();}const xe=Me[aP(0x7e)];export{xe as default};
|
|
1
|
+
(function(m,n){const aC=b,o=m();while(!![]){try{const p=-parseInt(aC(0xa9))/0x1+parseInt(aC(0x7d))/0x2+-parseInt(aC(0xa3))/0x3+parseInt(aC(0xa4))/0x4+-parseInt(aC(0x98))/0x5*(parseInt(aC(0x7f))/0x6)+-parseInt(aC(0x96))/0x7+-parseInt(aC(0x93))/0x8*(-parseInt(aC(0xa6))/0x9);if(p===n)break;else o['push'](o['shift']());}catch(r){o['push'](o['shift']());}}}(a,0xb641d));import{defineComponent as c,ref as d,computed as e,onMounted as f,onBeforeUnmount as g,nextTick as h}from'vue';import{CadViewer as k}from'@flyfish-dev/cad-viewer';import{n as l}from'./index7.js';const J=c({'__name':'CadViewer','props':{'data':null,'type':null,'options':null},'setup'(o){const aD=b,s=o,v=aD(0x72),F=aD(0x85),H='wasm/cad/dwfv-render.wasm',a0=0x1d4c0,a1=d(null),a2=d(null),a3=d(aD(0x88)),a4=d('正在加载\x20CAD\x20预览器...'),a5=d(''),a6=d(null),a7=d(null),a8=d(null),a9=d([]),aa=e(()=>a6['value']?.[aD(0x8a)]||a6[aD(0x9a)]?.[aD(0x9d)]['warnings']||[]),ab=e(()=>a6['value']?.['summary']),ac=e(()=>a7[aD(0x9a)]?.['backend']||'auto'),ad=e(()=>{const aE=aD,au=a8['value']?.['zoomPercent']??af?.['getZoomPercent']?.()??0x64;return Number[aE(0x86)](au)?Math['round'](au):0x64;});let af=null,ag=null,ah=null;const ai=()=>s['type'][aD(0x7e)]()||'dxf',aj=(au,av,aw=!0x1)=>{const ax=au?String(au):av,ay=new URL(ax,document['baseURI'])['href'];return aw?ay['replace'](/\/+$/,''):ay;},ak=()=>'drawing.'+ai(),al=au=>au?Object['entries'](au['document'][aD(0x8d)])[aD(0x8c)](([av,aw])=>({...aw,'name':av}))['sort']((av,aw)=>av['name']['localeCompare'](aw['name'])):[],am=au=>Number['isFinite'](au)?new Intl['NumberFormat']('zh-CN')[aD(0x70)](Math['round'](au||0x0)):'0',an=au=>{const aF=aD,av=au[aF(0x70)]?au[aF(0x70)]['toUpperCase']()+'\x20':'',aw=Number[aF(0x86)](au[aF(0x9f)])?'\x20'+Math['round'](au['percent']||0x0)+'%':'';a4['value']=''+av+au[aF(0x76)]+aw;},ao=()=>{af?.['fit']();},ap=()=>{af?.['zoomIn']();},aq=()=>{af?.['zoomOut']();},ar=au=>{const aG=aD,av=af?.['getDocument']();if(!av?.['layers'][au[aG(0xa5)]])return;const aw=av['layers'][au['name']];aw[aG(0x9e)]=aw['isVisible']===!0x1;const ax=af?.['setDocument'](av,ak())||null;a6['value']=ax,a9[aG(0x9a)]=al(ax),h(()=>af?.['fit']());},as=async()=>{const aH=aD,au=a1['value'],av=a2['value'];if(!au)return null;const aw=s[aH(0x7b)]||{},ax=aj(aw['wasmPath'],v,!0x0),ay=aj(aw[aH(0x91)],F),az=aj(aw['dwfWasmUrl'],H),aA=new k({'container':au,'nativeHost':av||void 0x0,'renderer':aw['renderer']||'auto','wasmPath':ax,'workerUrl':ay,'dwfWasmUrl':az,'useWorker':aw['useWorker']??!0x0,'workerTimeoutMs':aw['workerTimeoutMs']??a0,'preferDwgWasm':aw[aH(0x90)]??!0x0,'includePaperSpace':aw['includePaperSpace']??!0x0,'maxInsertDepth':aw['maxInsertDepth'],'keepRaw':aw[aH(0xa7)]??!0x1,'dwfPreferWebgl':aw[aH(0x77)]??!0x0,'dwfPreferWasm':aw[aH(0x81)]??!0x0,'dwfBackground':aw['dwfBackground']||'#f8fafc','dwfMaxDevicePixelRatio':aw[aH(0x78)],'dwfMaxCanvasPixels':aw[aH(0x71)],'dwfMaxGpuCacheBytes':aw[aH(0x9b)],'dwfMaxCachedScenes':aw['dwfMaxCachedScenes'],'dwfLineWeightMode':aw[aH(0x74)],'dwfMinStrokeCssPx':aw[aH(0x87)],'dwfMaxOverviewStrokeCssPx':aw['dwfMaxOverviewStrokeCssPx'],'dwfMinTextCssPx':aw['dwfMinTextCssPx'],'dwfMinFilledAreaCssPx':aw[aH(0x8f)],'autoFit':!0x0,'canvasOptions':{'background':'#f8fafc','foreground':'#0f172a','contrastMode':'adaptive','minColorContrast':2.4,'showPageBounds':!0x0,'showUnsupportedMarkers':!0x0,'enableSpatialIndex':!0x0,'maxVisibleTextLabels':0x960,...aw[aH(0x7a)]||{}},'onLoadProgress':an,'onRenderStats':aB=>{const aI=aH;a7[aI(0x9a)]=aB;},'onViewChange':aB=>{a8['value']=aB;},'onLoad':aB=>{a6['value']=aB,a9['value']=al(aB);},'onError':aB=>{a5['value']=aB['message']||'CAD\x20文件解析失败';}});return aw['preloadDwg']!==!0x1&&ai()==='dwg'&&aA['preloadDwg']({'wasmPath':ax,'workerUrl':ay})['catch'](()=>{}),aA;},at=async()=>{const aJ=aD;a3['value']='loading',a4['value']=aJ(0x75),a5['value']='',a6['value']=null,a7['value']=null,a8['value']=null,a9['value']=[],ah?.['abort'](),ah=new AbortController();try{if(af?.['destroy'](),af=await as(),!af)return;const au=s['options']||{},av=await af['loadBuffer'](s[aJ(0x95)]['slice'](0x0),ak(),{'signal':ah['signal'],'transferInputBuffer':!0x1,'wasmPath':aj(au['wasmPath'],v,!0x0),'workerUrl':aj(au['workerUrl'],F),'dwfWasmUrl':aj(au['dwfWasmUrl'],H)});a6['value']=av,a9[aJ(0x9a)]=al(av),a3[aJ(0x9a)]=aJ(0x8e),await h(),af['fit']();}catch(aw){if(ah['signal']['aborted'])return;console['error'](aw),a3['value']='error',a5['value']=aw instanceof Error?aw[aJ(0x76)]:'CAD\x20文件解析失败';}};return f(()=>{at(),a1['value']&&(ag=new ResizeObserver(()=>{af?.['resize']();}),ag['observe'](a1['value']));}),g(()=>{const aK=aD;ah?.['abort'](),ah=null,ag?.[aK(0x84)](),ag=null,af?.[aK(0xa2)](),af=null;}),{'__sfc':!0x0,'props':s,'CAD_WASM_PATH':v,'CAD_WORKER_PATH':F,'CAD_DWF_WASM_PATH':H,'CAD_WORKER_TIMEOUT':a0,'root':a1,'nativeHost':a2,'status':a3,'progressMessage':a4,'errorMessage':a5,'loadResult':a6,'renderStats':a7,'viewState':a8,'layers':a9,'warnings':aa,'summary':ab,'backend':ac,'zoomPercent':ad,'viewer':af,'resizeObserver':ag,'abortController':ah,'normalizeType':ai,'resolvePublicUrl':aj,'buildFileName':ak,'collectLayers':al,'formatNumber':am,'updateProgress':an,'fitToView':ao,'zoomIn':ap,'zoomOut':aq,'toggleLayer':ar,'createViewer':as,'loadCad':at};}});function a(){const aN=['loading','length','warnings','cad-layer-color','map','layers','ready','dwfMinFilledAreaCssPx','preferDwgWasm','workerUrl','span','16sGObPT','drawn','data','3883509ertstO','cad-toolbar','559320fqIANj','color','value','dwfMaxGpuCacheBytes','summary','document','isVisible','percent','cad-zoom','div','destroy','3752022jLYOfK','4297124SNAjzK','name','4994091YbkSaH','keepRaw','button','2057gzCfpS','cad-layers-head','format','dwfMaxCanvasPixels','wasm/cad/','cad-native-stage','dwfLineWeightMode','正在解析\x20CAD...','message','dwfPreferWebgl','dwfMaxDevicePixelRatio','strong','canvasOptions','options','cad-inspector','963656nxEIdA','toLowerCase','6IEeihY','formatNumber','dwfPreferWasm','backend','toUpperCase','disconnect','wasm/cad/dwg-worker.js','isFinite','dwfMinStrokeCssPx'];a=function(){return aN;};return a();}function b(c,d){c=c-0x6f;const e=a();let f=e[c];return f;}var Q=function(){const aL=b;var m=this,n=m['_self']['_c'],o=m['_self']['_setupProxy'];return n('div',{'staticClass':'cad-shell'},[n('div',{'staticClass':aL(0x97)},[n('div',{'staticClass':'cad-tools'},[n('button',{'attrs':{'type':aL(0xa8)},'on':{'click':o['fitToView']}},[m['_v']('适配')]),n('button',{'attrs':{'type':'button','title':'缩小'},'on':{'click':o['zoomOut']}},[m['_v']('-')]),n('span',{'staticClass':aL(0xa0)},[m['_v'](m['_s'](o['zoomPercent'])+'%')]),n('button',{'attrs':{'type':aL(0xa8),'title':'放大'},'on':{'click':o['zoomIn']}},[m['_v']('+')])]),n('div',{'staticClass':'cad-meta'},[n('span',[m['_v'](m['_s'](o['normalizeType']()['toUpperCase']()))]),n(aL(0x92),[m['_v'](m['_s'](o[aL(0x82)][aL(0x83)]()))])])]),n('div',{'staticClass':'cad-body','class':{'without-layers':!o['layers']['length']}},[o[aL(0x8d)]['length']?n('aside',{'staticClass':'cad-layers'},[n('div',{'staticClass':aL(0x6f)},[n(aL(0x79),[m['_v']('图层')]),n('span',[m['_v'](m['_s'](o[aL(0x8d)]['length'])+'\x20项')])]),m['_l'](o['layers'],function(p){const aM=aL;return n('button',{'key':p[aM(0xa5)],'class':{'muted':p['isVisible']===!0x1||p['isFrozen']},'attrs':{'type':'button'},'on':{'click':function(s){return o['toggleLayer'](p);}}},[n('span',{'staticClass':aM(0x8b),'style':{'background':typeof p[aM(0x99)]=='string'?p['color']:void 0x0}}),n('span',[m['_v'](m['_s'](p['name']))])]);})],0x2):m['_e'](),n('div',{'staticClass':'cad-canvas-wrap'},[n('div',{'ref':'root','staticClass':'cad-stage'},[n(aL(0xa1),{'ref':'nativeHost','staticClass':aL(0x73)})]),o['status']==='loading'?n('div',{'staticClass':'cad-state'},[m['_v'](m['_s'](o['progressMessage']))]):o['status']==='error'?n('div',{'staticClass':'cad-state\x20error'},[m['_v'](m['_s'](o['errorMessage']))]):m['_e']()]),n('aside',{'staticClass':aL(0x7c)},[n('strong',[m['_v']('结构')]),n('dl',[n('div',[n('dt',[m['_v']('实体')]),n('dd',[m['_v'](m['_s'](o[aL(0x80)](o['summary']?.['entityCount'])))])]),n('div',[n('dt',[m['_v']('块')]),n('dd',[m['_v'](m['_s'](o['formatNumber'](o[aL(0x9c)]?.['blockCount'])))])]),n('div',[n('dt',[m['_v']('页面')]),n('dd',[m['_v'](m['_s'](o['formatNumber'](o[aL(0x9c)]?.['pageCount'])))])]),n('div',[n('dt',[m['_v']('绘制')]),n('dd',[m['_v'](m['_s'](o['formatNumber'](o['renderStats']?.[aL(0x94)])))])])]),o['warnings'][aL(0x89)]?n('p',{'staticClass':'cad-warning'},[m['_v'](m['_s'](o['warnings'][0x0]))]):m['_e']()])])]);},X=[],Y=l(J,Q,X,!0x1,null,'88d7d289',null,null);const ae=Y['exports'];export{ae as default};
|