@file-viewer/vue3 2.2.1 → 2.2.3
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.en.md +16 -12
- package/README.md +15 -11
- package/dist/components/fit.js +1 -0
- package/dist/components/image.js +1 -0
- package/dist/components/messages.js +1 -0
- package/dist/components/print-mask.js +1 -0
- package/dist/components/printMask.js +1 -0
- package/dist/index.mjs +1 -1
- package/dist/src/package/components/FileViewer/ShadowFileViewer.vue.d.ts +32 -0
- package/dist/src/package/components/FileViewer/index.d.ts +1 -1
- package/dist/src/package/controller.d.ts +1 -135
- package/dist/src/package/index.d.ts +2 -7
- package/dist/vue3.css +1 -1
- package/package.json +5 -5
package/README.en.md
CHANGED
|
@@ -43,7 +43,7 @@ The Vue 3 component follows host lifecycle teardown. Inside Element Plus `el-dia
|
|
|
43
43
|
<!-- FILE_VIEWER_GENERATED:START -->
|
|
44
44
|
## Ecosystem Matrix
|
|
45
45
|
|
|
46
|
-
Every standard component package shares `@file-viewer/core` as the only common foundation, and no framework component package depends on another framework implementation. Core owns format metadata, source loading, the renderer protocol, events, operation APIs, search, zoom, print, and
|
|
46
|
+
Every standard component package shares `@file-viewer/core` as the only common foundation, and no framework component package depends on another framework implementation. Core owns format metadata, source loading, the renderer protocol, events, operation APIs, search, zoom, print, export, and the framework-neutral browser shell. Heavy PDF, Word, PPT/PPTX, CAD, Typst, and similar pipelines are assembled explicitly through renderer packages or presets; each framework package owns its component lifecycle, type exports, compatibility defaults, and ecosystem-specific interaction layer.
|
|
47
47
|
|
|
48
48
|
| Framework | Standard npm package | Entrypoints | GitHub | Gitee | Historical aliases |
|
|
49
49
|
| --- | --- | --- | --- | --- | --- |
|
|
@@ -213,7 +213,7 @@ Every ecosystem package uses the same `ViewerMountOptions` and `FileViewerOption
|
|
|
213
213
|
| `type` | Explicit extension or MIME hint that overrides automatic detection. |
|
|
214
214
|
| `size` | File size hint used in lifecycle context, loading states, and safety limits. |
|
|
215
215
|
| `options` | The shared `FileViewerOptions` surface. Every component package keeps the same semantics. |
|
|
216
|
-
| `options.styleIsolation` | `auto`, `shadow`, `scoped`, or `none`.
|
|
216
|
+
| `options.styleIsolation` | `auto`, `shadow`, `scoped`, or `none`. `auto` uses Shadow DOM for every standard component so host-page global CSS cannot break the toolbar or document; legacy projects can explicitly use `none`. |
|
|
217
217
|
| `onEvent` / `onStateChange` | Unified event and state subscriptions for imperative wrappers such as Vanilla JavaScript / Pure Web, React, and Svelte. Vue maps the same events to native emits. |
|
|
218
218
|
|
|
219
219
|
## Actual Component Props
|
|
@@ -234,7 +234,7 @@ The table below lists the real props, event channel, and customization entry for
|
|
|
234
234
|
| Options Field | Description |
|
|
235
235
|
| --- | --- |
|
|
236
236
|
| `theme` | `light`, `dark`, or `system`. This takes precedence over browser `prefers-color-scheme`. |
|
|
237
|
-
| `styleIsolation` | `auto`, `shadow`, `scoped`, or `none`. With `auto`, Web Component
|
|
237
|
+
| `styleIsolation` | `auto`, `shadow`, `scoped`, or `none`. With `auto`, Web Component, IIFE, Vue, React, Svelte, jQuery, and full packages all use Shadow DOM by default. Legacy integrations that depend on deep class overrides can explicitly use `none`. |
|
|
238
238
|
| `watermark` | Text or image watermark with opacity, rotation, gap, size, font, and color controls. |
|
|
239
239
|
| `toolbar` | Controls the theme toggle, download, print, HTML export, zoom, item order, toolbar position, and operation-level preflight checks. |
|
|
240
240
|
| `search` | Document search, highlight class names, case sensitivity, whole-word matching, max matches, and debounce. |
|
|
@@ -242,25 +242,29 @@ The table below lists the real props, event channel, and customization entry for
|
|
|
242
242
|
| `archive` | Archive Worker/WASM URLs, timeout, cache, archive limits, nested entry preview limits, and legacy GBK/GB18030 ZIP filename decoding. |
|
|
243
243
|
| `pdf` | PDF.js worker, navigation pane, outline, thumbnails, rotation, streaming, range chunk size, and credentials. |
|
|
244
244
|
| `docx` / `spreadsheet` | DOCX is provided by @file-viewer/renderer-word and uses the self-maintained @file-viewer/docx engine with automatic worker/main-thread selection, continuous flow reading, and async rendering by default; visual pagination is opt-in. Spreadsheet is provided by @file-viewer/renderer-spreadsheet with fidelity-first parsing, automatic Worker use for large files, and opt-in header drag column resizing. |
|
|
245
|
-
| `presentation` | The presentation renderer keeps two isolated engines: binary PowerPoint 97–2003 `.ppt` uses the packaged `@file-viewer/ppt@0.3.
|
|
245
|
+
| `presentation` | The presentation renderer keeps two isolated engines: binary PowerPoint 97–2003 `.ppt` uses the packaged `@file-viewer/ppt@0.3.2` Worker/OffscreenCanvas/WASM runtime with zero-config standard asset routes; `pptModuleUrl` / `pptWorkerUrl` / `pptWasmUrl` / `pptFontUrl` are custom-path overrides, while `pptWorker` and `pptCache` control its Worker and bounded frame cache. PPTX/OpenXML uses the `@file-viewer/pptx` Worker with optional `workerUrl` / `workerType` overrides. |
|
|
246
246
|
| `typst` / `data` / `cad` | Typst, SQLite, CAD/DWG/DXF/DWF WASM, worker, encoding, and rendering strategy options. |
|
|
247
247
|
| `hooks` / `beforeOperation` | Shared lifecycle hooks and operation preflight checks for audit, permission, telemetry, and safety controls. |
|
|
248
248
|
|
|
249
249
|
## Style Isolation And Theme Customization
|
|
250
250
|
|
|
251
|
-
|
|
251
|
+
Every standard component uses strong Shadow DOM isolation by default. Host-page global rules for `*`, `button`, `table`, `img`, `svg`, `canvas`, and similar selectors should not leak into the viewer toolbar or rendered content, and viewer resets should not pollute the host page.
|
|
252
252
|
|
|
253
253
|
| Mode | Description |
|
|
254
254
|
| --- | --- |
|
|
255
|
-
| `auto` | Default.
|
|
255
|
+
| `auto` | Default. Web Component, IIFE, Vue, React, Svelte, jQuery, and full packages all use Shadow DOM so host-page CSS cannot break the toolbar or renderer content. |
|
|
256
256
|
| `shadow` | Creates an explicit ShadowRoot render surface. Use it when host CSS is uncontrolled, micro-frontends are mixed, low-code platforms inject global resets, or design systems have aggressive base styles. |
|
|
257
|
-
| `scoped` | Does not create a ShadowRoot. Uses a stable root selector
|
|
257
|
+
| `scoped` | Does not create a ShadowRoot. Uses a stable root selector and local resets to limit its impact while keeping controlled inheritance from the host. |
|
|
258
258
|
| `none` | Historical light-DOM behavior for projects that depend on deep class overrides, old theme CSS, or snapshot tests. |
|
|
259
259
|
|
|
260
|
+
`styleIsolation` is a mount-time boundary. Remount the component when changing modes. Both `scoped` and `none` use Light DOM, so high-specificity or `!important` host rules can still override them.
|
|
261
|
+
|
|
260
262
|
Customization should start with `--file-viewer-*` CSS variables for color, typography, spacing, radius, toolbar, and button styling. Use stable Shadow Parts only when a specific internal surface needs styling. The current Web shell exposes `host`, `shell`, `toolbar`, `toolbar-group`, `toolbar-status`, `button`, `input`, and `content`; renderer extensions should keep using stable names such as `state-panel` and `watermark`. Do not depend on internal class names; they are implementation details.
|
|
261
263
|
|
|
264
|
+
In this example, `file-viewer-host` is the class on the actual Shadow host. Pass it as `class` in Vue 3, `containerClass` in Vue 2, `className` in React / Svelte, or add it to the element initialized by jQuery.
|
|
265
|
+
|
|
262
266
|
```css
|
|
263
|
-
|
|
267
|
+
.file-viewer-host {
|
|
264
268
|
--file-viewer-bg: #f7f9fc;
|
|
265
269
|
--file-viewer-text: #172033;
|
|
266
270
|
--file-viewer-toolbar-bg: rgba(255, 255, 255, 0.96);
|
|
@@ -268,16 +272,16 @@ flyfish-file-viewer {
|
|
|
268
272
|
--file-viewer-button-radius: 6px;
|
|
269
273
|
}
|
|
270
274
|
|
|
271
|
-
|
|
275
|
+
.file-viewer-host::part(toolbar) {
|
|
272
276
|
border: 1px solid rgba(20, 60, 100, 0.14);
|
|
273
277
|
}
|
|
274
278
|
|
|
275
|
-
|
|
279
|
+
.file-viewer-host::part(button) {
|
|
276
280
|
font-weight: 600;
|
|
277
281
|
}
|
|
278
282
|
```
|
|
279
283
|
|
|
280
|
-
Framework packages
|
|
284
|
+
Framework packages use Shadow DOM without extra configuration; set it explicitly when you want to lock the policy:
|
|
281
285
|
|
|
282
286
|
```ts
|
|
283
287
|
const options = {
|
|
@@ -349,7 +353,7 @@ View-state sync is designed for projection systems, remote-control displays, sid
|
|
|
349
353
|
| --- | --- |
|
|
350
354
|
| Shared viewer assets | Every `*-full` package exposes a `file-viewer-copy-assets` CLI at the package version. It copies workers, WASM, fonts, and vendor files into the application static directory and writes an integrity manifest. The complete `web-full` `dist/` also carries that payload directly. |
|
|
351
355
|
| CAD / DWG / DXF / DWF | Configure `options.cad.wasmPath`, `workerUrl`, `dwfWasmUrl`, and `dxfEncoding` for self-hosted or intranet deployment. |
|
|
352
|
-
| PDF / DOCX / Excel / PPT / PPTX | Configure `options.pdf.workerUrl`, `options.pdf.cMapUrl`, `options.pdf.wasmUrl`, `options.pdf.standardFontDataUrl`, `options.pdf.cjkFontFallbackPath`, `options.pdf.identityFontRepair`, `options.docx.workerUrl`, `options.docx.workerJsZipUrl`, `options.spreadsheet.workerUrl`, and `options.presentation.workerUrl` / `workerType`; PDF probes the real static worker first and lazy-loads the packaged handler when unavailable, unembedded CJK fonts fall back to self-hosted Noto Sans SC shards loaded per page, and malformed Identity CJK fonts without ToUnicode are repaired in memory after corrupted text is detected; DOCX chooses worker or main-thread parsing automatically, Electron `file://` and other unsafe local protocols fall back without user configuration; Excel defaults to `worker: auto`, enabling Worker automatically for files at or above `workerAutoThreshold`; CSV / TSV detects UTF-8, GBK, and GB18030 automatically and accepts `options.spreadsheet.textEncoding` as an explicit override; header drag column resizing is controlled by `options.spreadsheet.resizableColumns`; `.ppt` lazy-loads the packaged `@file-viewer/ppt@0.3.
|
|
356
|
+
| PDF / DOCX / Excel / PPT / PPTX | Configure `options.pdf.workerUrl`, `options.pdf.cMapUrl`, `options.pdf.wasmUrl`, `options.pdf.standardFontDataUrl`, `options.pdf.cjkFontFallbackPath`, `options.pdf.identityFontRepair`, `options.docx.workerUrl`, `options.docx.workerJsZipUrl`, `options.spreadsheet.workerUrl`, and `options.presentation.workerUrl` / `workerType`; PDF probes the real static worker first and lazy-loads the packaged handler when unavailable, unembedded CJK fonts fall back to self-hosted Noto Sans SC shards loaded per page, and malformed Identity CJK fonts without ToUnicode are repaired in memory after corrupted text is detected; DOCX chooses worker or main-thread parsing automatically, Electron `file://` and other unsafe local protocols fall back without user configuration; Excel defaults to `worker: auto`, enabling Worker automatically for files at or above `workerAutoThreshold`; CSV / TSV detects UTF-8, GBK, and GB18030 automatically and accepts `options.spreadsheet.textEncoding` as an explicit override; header drag column resizing is controlled by `options.spreadsheet.resizableColumns`; `.ppt` lazy-loads the packaged `@file-viewer/ppt@0.3.2` Worker/OffscreenCanvas/WASM runtime with bounded frame caching from `vendor/ppt/` without standard-layout configuration; `pptModuleUrl` / `pptWorkerUrl` / `pptWasmUrl` / `pptFontUrl` only override custom routes. PPTX creates its separate module Worker on demand. |
|
|
353
357
|
| Typst / SQLite / Archive | Configure Typst compiler/renderer WASM, `data.sqlWasmUrl`, and `archive.workerUrl` / `archive.wasmUrl` as needed; Typst renders through local WASM only and never falls back to a public CDN; Archive decodes legacy GBK/GB18030 ZIP entry names, while RAR, 7z, and encrypted archives still require the libarchive Worker/WASM assets. |
|
|
354
358
|
| Drawing | Draw.io uses the official diagrams.net offline viewer shipped with viewer assets by default; override `options.drawing.viewerScriptUrl` for custom paths, or set `preferOfficial:false` for the built-in SVG fallback. |
|
|
355
359
|
| Offline deployment | Runtime preview code does not depend on public CDN or third-party online assets. Every `*-full` package uses `file-viewer/` under the deployment base (`/file-viewer/` at the origin root). Vite publishes assets with `copyAssets:true`; other build tools run `npx --no-install file-viewer-copy-assets ./public/file-viewer`. Call `setDefaultFullAssetBaseUrl()` when assets live elsewhere. |
|
package/README.md
CHANGED
|
@@ -216,7 +216,7 @@ const options = {
|
|
|
216
216
|
| `type` | 显式指定扩展名或 MIME 线索,覆盖自动识别结果。 |
|
|
217
217
|
| `size` | 文件大小提示,用于生命周期上下文、加载状态和安全限制展示。 |
|
|
218
218
|
| `options` | 完整 `FileViewerOptions`,所有框架包保持同一套参数语义。 |
|
|
219
|
-
| `options.styleIsolation` | `auto`、`shadow`、`scoped` 或 `none
|
|
219
|
+
| `options.styleIsolation` | `auto`、`shadow`、`scoped` 或 `none`。所有标准组件的 `auto` 默认使用 Shadow DOM,阻止宿主全局样式破坏工具栏和正文;旧项目可显式使用 `none`。 |
|
|
220
220
|
| `onEvent` / `onStateChange` | Vanilla JS / Pure Web、React、Svelte 等命令式包装层的统一事件和状态订阅;Vue 组件会映射为原生 emit。 |
|
|
221
221
|
|
|
222
222
|
## 实际组件属性
|
|
@@ -237,7 +237,7 @@ const options = {
|
|
|
237
237
|
| Options 字段 | 说明 |
|
|
238
238
|
| --- | --- |
|
|
239
239
|
| `theme` | `light`、`dark` 或 `system`,优先级高于浏览器 `prefers-color-scheme`。 |
|
|
240
|
-
| `styleIsolation` | `auto`、`shadow`、`scoped` 或 `none`。`auto` 下 Web Component
|
|
240
|
+
| `styleIsolation` | `auto`、`shadow`、`scoped` 或 `none`。`auto` 下 Web Component、IIFE、Vue、React、Svelte、jQuery 和 full 包均默认使用 Shadow DOM;依赖深层 class 覆盖的旧项目可显式使用 `none`。 |
|
|
241
241
|
| `watermark` | 开启文字或图片水印,可设置透明度、旋转、间距、尺寸、字体和颜色。 |
|
|
242
242
|
| `toolbar` | 控制主题切换、下载、打印、HTML 导出、缩放、按钮顺序和工具栏位置,并支持操作级前置校验。 |
|
|
243
243
|
| `search` | 配置文档搜索、高亮 class、大小写、整词匹配、最大命中数和 debounce。 |
|
|
@@ -245,25 +245,29 @@ const options = {
|
|
|
245
245
|
| `archive` | 配置压缩包 Worker/WASM、超时、缓存、包体限制和压缩包内单文件预览大小;旧 ZIP 中文文件名会自动按 GBK/GB18030 兼容解码。 |
|
|
246
246
|
| `pdf` | 配置 PDF.js Worker、导航栏、目录、缩略图、旋转、流式读取、Range chunk 和凭据。 |
|
|
247
247
|
| `docx` / `spreadsheet` | DOCX 由 @file-viewer/renderer-word 承接并使用自研 @file-viewer/docx,默认自动选择 Worker 或主线程解析,连续流式阅读和异步分批渲染,可按需显式开启视觉分页;表格由 @file-viewer/renderer-spreadsheet 承接,默认保真解析,大文件自动启用 Worker,表头拖拽调列宽可按需显式开启。 |
|
|
248
|
-
| `presentation` | 演示文稿 renderer 保持两条隔离引擎:PowerPoint 97–2003 `.ppt` 使用包内 `@file-viewer/ppt@0.3.
|
|
248
|
+
| `presentation` | 演示文稿 renderer 保持两条隔离引擎:PowerPoint 97–2003 `.ppt` 使用包内 `@file-viewer/ppt@0.3.2` Worker/OffscreenCanvas/WASM,标准资产布局无需配置 URL;`pptModuleUrl` / `pptWorkerUrl` / `pptWasmUrl` / `pptFontUrl` 仅用于自定义路径;`pptWorker` 与 `pptCache` 控制 Worker 和有界帧缓存。PPTX/OpenXML 使用 `@file-viewer/pptx` Worker,并可通过 `workerUrl` / `workerType` 覆盖。 |
|
|
249
249
|
| `typst` / `data` / `cad` | 配置 Typst、SQLite、CAD/DWG/DXF/DWF 等 WASM、Worker、编码和渲染策略。 |
|
|
250
250
|
| `hooks` / `beforeOperation` | 统一生命周期 hooks 和操作前置校验,可用于审计、权限、埋点和安全控制。 |
|
|
251
251
|
|
|
252
252
|
## 样式隔离与主题定制
|
|
253
253
|
|
|
254
|
-
|
|
254
|
+
所有标准组件默认使用 Shadow DOM 强隔离。宿主页面里的 `*`、`button`、`table`、`img`、`svg`、`canvas` 等全局样式不会直接侵入预览器工具栏和正文;预览器也不会把局部 reset 粗暴写到业务页面。
|
|
255
255
|
|
|
256
256
|
| 模式 | 说明 |
|
|
257
257
|
| --- | --- |
|
|
258
|
-
| `auto` |
|
|
258
|
+
| `auto` | 默认值。Web Component、IIFE、Vue、React、Svelte、jQuery 和 full 包均走 Shadow DOM,保护工具栏与 renderer 内容不受宿主全局 CSS 影响。 |
|
|
259
259
|
| `shadow` | 显式创建 ShadowRoot 作为渲染面,适合宿主 CSS 不可控、微前端混挂、低代码平台和设计系统全局 reset 很强的页面。 |
|
|
260
|
-
| `scoped` | 不创建 ShadowRoot
|
|
260
|
+
| `scoped` | 不创建 ShadowRoot,使用稳定根选择器和局部 reset 约束影响范围,适合需要被外层 CSS 轻度继承的场景。 |
|
|
261
261
|
| `none` | 历史 light DOM 行为,保留给依赖深度 class 覆盖、旧主题 CSS 或自动化测试快照的项目。 |
|
|
262
262
|
|
|
263
|
+
`styleIsolation` 是挂载边界配置;运行时切换模式时请重新挂载组件。`scoped` 与 `none` 都属于 Light DOM,仍可能被宿主的高权重或 `!important` 全局规则覆盖。
|
|
264
|
+
|
|
263
265
|
定制优先级建议是:先使用 `--file-viewer-*` CSS 变量覆盖颜色、字体、间距、圆角、工具栏和按钮;需要命中内部结构时再使用稳定 Shadow Parts。当前 Web shell 暴露 `host`、`shell`、`toolbar`、`toolbar-group`、`toolbar-status`、`button`、`input` 和 `content`,后续 renderer 扩展应继续使用 `state-panel`、`watermark` 这类稳定命名。不要依赖内部 class 名,它们只服务实现细节。
|
|
264
266
|
|
|
267
|
+
下面的 `file-viewer-host` 是实际 Shadow host 的 class:Vue 3 通过 `class`,Vue 2 通过 `containerClass`,React / Svelte 通过 `className` 传入,jQuery 则直接加在初始化节点上。
|
|
268
|
+
|
|
265
269
|
```css
|
|
266
|
-
|
|
270
|
+
.file-viewer-host {
|
|
267
271
|
--file-viewer-bg: #f7f9fc;
|
|
268
272
|
--file-viewer-text: #172033;
|
|
269
273
|
--file-viewer-toolbar-bg: rgba(255, 255, 255, 0.96);
|
|
@@ -271,16 +275,16 @@ flyfish-file-viewer {
|
|
|
271
275
|
--file-viewer-button-radius: 6px;
|
|
272
276
|
}
|
|
273
277
|
|
|
274
|
-
|
|
278
|
+
.file-viewer-host::part(toolbar) {
|
|
275
279
|
border: 1px solid rgba(20, 60, 100, 0.14);
|
|
276
280
|
}
|
|
277
281
|
|
|
278
|
-
|
|
282
|
+
.file-viewer-host::part(button) {
|
|
279
283
|
font-weight: 600;
|
|
280
284
|
}
|
|
281
285
|
```
|
|
282
286
|
|
|
283
|
-
|
|
287
|
+
框架组件无需额外配置即可使用 Shadow DOM;也可以在 `options` 中显式声明以固定策略:
|
|
284
288
|
|
|
285
289
|
```ts
|
|
286
290
|
const options = {
|
|
@@ -352,7 +356,7 @@ const options = {
|
|
|
352
356
|
| --- | --- |
|
|
353
357
|
| 通用 viewer assets | 所有 `*-full` 包都提供与自身同版本的 `file-viewer-copy-assets` CLI,用于把 Worker、WASM、字体和 vendor 资源复制到业务静态目录并生成完整性清单;`web-full` 的完整 `dist/` 还会直接携带这些资源。 |
|
|
354
358
|
| CAD / DWG / DXF / DWF | 按需配置 `options.cad.wasmPath`、`workerUrl`、`dwfWasmUrl`、`dxfEncoding`,支持自托管和内网部署。 |
|
|
355
|
-
| PDF / DOCX / Excel / PPT / PPTX | 按需配置 `options.pdf.workerUrl`、`options.pdf.cMapUrl`、`options.pdf.wasmUrl`、`options.pdf.standardFontDataUrl`、`options.pdf.cjkFontFallbackPath`、`options.pdf.identityFontRepair`、`options.docx.workerUrl`、`options.docx.workerJsZipUrl`、`options.spreadsheet.workerUrl`、`options.presentation.workerUrl` / `workerType`;PDF 默认探测真实静态 Worker,不可用时懒加载包内 handler 兜底,未嵌入的中文字体默认按页加载本地 Noto Sans SC 分片回退,缺失 ToUnicode 的异常 Identity CJK 字体会在检测到乱码后尝试内存修复;DOCX 默认自动选择 Worker 或主线程解析,Electron `file://` 等本地不安全协议会自动回退;Excel 默认 `worker: auto`,大文件达到 `workerAutoThreshold` 自动启用 Worker,CSV / TSV 自动识别 UTF-8、GBK 与 GB18030,也可用 `options.spreadsheet.textEncoding` 显式覆盖,列宽拖拽可通过 `options.spreadsheet.resizableColumns` 显式开启;`.ppt` 从 `vendor/ppt/` 按需加载 `@file-viewer/ppt@0.3.
|
|
359
|
+
| PDF / DOCX / Excel / PPT / PPTX | 按需配置 `options.pdf.workerUrl`、`options.pdf.cMapUrl`、`options.pdf.wasmUrl`、`options.pdf.standardFontDataUrl`、`options.pdf.cjkFontFallbackPath`、`options.pdf.identityFontRepair`、`options.docx.workerUrl`、`options.docx.workerJsZipUrl`、`options.spreadsheet.workerUrl`、`options.presentation.workerUrl` / `workerType`;PDF 默认探测真实静态 Worker,不可用时懒加载包内 handler 兜底,未嵌入的中文字体默认按页加载本地 Noto Sans SC 分片回退,缺失 ToUnicode 的异常 Identity CJK 字体会在检测到乱码后尝试内存修复;DOCX 默认自动选择 Worker 或主线程解析,Electron `file://` 等本地不安全协议会自动回退;Excel 默认 `worker: auto`,大文件达到 `workerAutoThreshold` 自动启用 Worker,CSV / TSV 自动识别 UTF-8、GBK 与 GB18030,也可用 `options.spreadsheet.textEncoding` 显式覆盖,列宽拖拽可通过 `options.spreadsheet.resizableColumns` 显式开启;`.ppt` 从 `vendor/ppt/` 按需加载 `@file-viewer/ppt@0.3.2` Worker/OffscreenCanvas/WASM 和有界帧缓存,标准布局无需配置,`pptModuleUrl` / `pptWorkerUrl` / `pptWasmUrl` / `pptFontUrl` 仅覆盖自定义路径;PPTX 按需创建另一条模块 Worker,两条引擎严格隔离。 |
|
|
356
360
|
| Typst / SQLite / Archive | 按需配置 Typst compiler/renderer WASM、`data.sqlWasmUrl`、`archive.workerUrl` / `archive.wasmUrl`;Typst 仅使用本地 WASM 真实渲染,不访问公共 CDN;Archive 兼容 GBK/GB18030 旧 ZIP 中文文件名,RAR、7z 和加密压缩包仍需要 libarchive Worker/WASM。 |
|
|
357
361
|
| Drawing | Draw.io 默认使用随 viewer assets 分发的官方 diagrams.net 离线 viewer;路径特殊时可通过 `options.drawing.viewerScriptUrl` 覆盖,`preferOfficial:false` 才切到内置 SVG 兜底。 |
|
|
358
362
|
| 离线部署 | 运行时不依赖公共 CDN 或第三方在线资源;所有 `*-full` 包默认使用部署基址下的 `file-viewer/`(根部署即 `/file-viewer/`)。Vite 使用 `copyAssets:true` 自动发布,其他构建工具运行 `npx --no-install file-viewer-copy-assets ./public/file-viewer`;资源放在其它位置时调用 `setDefaultFullAssetBaseUrl()`。 |
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const aE=a1;(function(a3,a4){const aA=a1,a5=a3();while(!![]){try{const a6=-parseInt(aA(0x11d))/0x1*(-parseInt(aA(0x166))/0x2)+-parseInt(aA(0x136))/0x3*(-parseInt(aA(0x14c))/0x4)+-parseInt(aA(0x16c))/0x5*(-parseInt(aA(0x139))/0x6)+parseInt(aA(0x145))/0x7*(parseInt(aA(0x13f))/0x8)+-parseInt(aA(0x118))/0x9*(-parseInt(aA(0x15b))/0xa)+-parseInt(aA(0x137))/0xb*(-parseInt(aA(0x13e))/0xc)+-parseInt(aA(0x11f))/0xd;if(a6===a4)break;else a5['push'](a5['shift']());}catch(a7){a5['push'](a5['shift']());}}}(a0,0x8c771));import{i as a2}from'./messages.js';function t(a3,a4,a5,a6,a7,a8,a9){try{var aa=a3[a8](a9),ab=aa['value'];}catch(ac){a5(ac);return;}aa['done']?a4(ab):Promise['resolve'](ab)['then'](a6,a7);}function n(a3){return function(){var a4=this,a5=arguments;return new Promise(function(a6,a7){var a8=a3['apply'](a4,a5);function a9(ab){t(a8,a6,a7,a9,aa,'next',ab);}function aa(ab){t(a8,a6,a7,a9,aa,'throw',ab);}a9(void 0x0);});};}var r=(a3={})=>{const aB=a1;var a4,a5,a6;let a7=Number[aB(0x167)](a3['scale'])&&a3[aB(0x154)]?Number(a3['scale']):0x1;return{'scale':a7,'label':a3['label']||Math['round'](a7*0x64)+'%','canZoomIn':(a4=a3['canZoomIn'])==null?!0x1:a4,'canZoomOut':(a5=a3['canZoomOut'])==null?!0x1:a5,'canReset':(a6=a3['canReset'])==null?!0x1:a6,'minScale':a3['minScale'],'maxScale':a3[aB(0x158)]};},i=a3=>a3===!0x1?{'enabled':!0x1}:a3===!0x0||a3===void 0x0?{}:a3,a=(a3='')=>({'query':a3,'total':0x0,'currentIndex':-0x1,'current':null,'matches':[]}),o=a3=>a3===!0x1?{'enabled':!0x1,'collectText':!0x1}:a3===!0x0||a3===void 0x0?{}:a3,s=(a3,a4)=>{const aC=a1;var a5;let a6=o(a4);if(a6['enabled']===!0x1||a6[aC(0x127)]===!0x1)return[];let a7=Math['max'](0xc8,a6[aC(0x13a)]||0x4b0),a8=Math[aC(0x165)](0x0,Math[aC(0x11a)](a7-0x1,(a5=a6['chunkOverlap'])==null?0xa0:a5)),a9=Math['max'](0x0,a6['maxTextLength']||0x0),aa=[];return a3['forEach'](ab=>{const aD=aC;let ac=a9?ab[aD(0x13c)][aD(0x15f)](0x0,a9):ab['text'];if(!ac)return;if(ac['length']<=a7){aa['push']({'id':ab['id']+aD(0x146),'text':ac,'anchor':ab,'startLine':ab['line'],'endLine':ab['line']});return;}let ad=0x0,af=0x1;for(;ad<ac[aD(0x12f)];){let ag=ac['slice'](ad,ad+a7);if(aa['push']({'id':ab['id']+aD(0x11c)+af,'text':ag,'anchor':ab,'startLine':ab[aD(0x15c)],'endLine':ab[aD(0x15c)]}),ad+a7>=ac[aD(0x12f)])break;ad+=a7-a8,af+=0x1;}}),aa;},c=aE(0x13b)['split'](',')['join'](','),l=[aE(0x161),'.viewer-watermark',aE(0x15d),aE(0x13d),'.pdf-nav-pane','.flyfish-search-match']['join'](','),u=a3=>typeof CSS<'u'&&typeof CSS['escape']=='function'?CSS['escape'](a3):a3['replace'](/["\\]/g,'\x5c$&'),d=(a3,a4=0xa0)=>{const aF=aE;let a5=a3['replace'](/\s+/g,'\x20')['trim']();return a5[aF(0x12f)]>a4?a5['slice'](0x0,a4-0x1)+'…':a5;},f=a3=>{let a4=a3['getBoundingClientRect']();return a4['width']>0x0||a4['height']>0x0;},p=a3=>!!a3['closest'](l),m=a3=>{const aG=aE;let a4=a3[aG(0x153)]('[data-page-number],\x20[data-page]'),a5=(a4==null?void 0x0:a4['dataset']['pageNumber'])||(a4==null?void 0x0:a4[aG(0x120)]['page']),a6=a5?Number['parseInt'](a5,0xa):NaN;return Number['isFinite'](a6)?a6:void 0x0;},h=a3=>a3['matches'](aE(0x122))?aE(0x156):a3['matches']('p,\x20li,\x20tr,\x20pre,\x20code')?'line':'block',g=(a3,a4)=>{let a5=a3['parentElement'];for(;a5;){if(a4['has'](a5))return!0x0;a5=a5['parentElement'];}return!0x1;},_=a3=>{const aH=aE;if(!a3)return[];let a4=a3['getBoundingClientRect'](),a5=new Set(),a6=[];return Array['from'](a3[aH(0x168)](c))['forEach'](a7=>{const aI=aH;if(p(a7)||!f(a7))return;let a8=d(a7['textContent']||'',0x3e8);if(!a8||g(a7,a5)&&!a7['matches']('p,\x20li,\x20tr,\x20pre,\x20code'))return;a5['add'](a7);let a9=a7['dataset'][aI(0x129)]||'viewer-anchor-'+(a6['length']+0x1);a7['dataset'][aI(0x129)]=a9,a7['dataset']['viewerLine']=String(a6[aI(0x12f)]+0x1);let aa=a7['getBoundingClientRect']();a6['push']({'id':a9,'index':a6['length'],'line':a6['length']+0x1,'type':h(a7),'label':d(a8,0x60),'text':a8,'page':m(a7),'top':aa['top']-a4[aI(0x131)]+a3['scrollTop'],'left':aa['left']-a4['left']+a3[aI(0x12d)],'width':aa['width'],'height':aa['height']});}),a6;},v=(a3,a4,a5)=>{const aJ=aE;if(!a3)return null;let a6=a3['closest']('[data-viewer-anchor-id]');if(a6!=null&&a6['dataset'][aJ(0x129)]){let aa=a4['find'](ab=>ab['id']===a6['dataset']['viewerAnchorId']);if(aa)return aa;}if(!a5)return null;let a7=a5['getBoundingClientRect'](),a8=a3[aJ(0x162)]()['top']-a7['top']+a5['scrollTop'],a9=null;for(let ab of a4){if(ab['top']<=a8+0x1){a9=ab;continue;}break;}return a9;},y=(a3,a4)=>{const aK=aE;if(!a3||!a4['length'])return null;let a5=a3[aK(0x159)]+a3['clientHeight']*0.42,a6=a4[0x0];for(let a7 of a4){if(a7[aK(0x131)]<=a5){a6=a7;continue;}break;}return a6;},b=(a3,a4)=>{const aL=aE;if(!a3||a4==null)return!0x1;let a5=typeof a4==aL(0x169)?aL(0x11b)+u(a4['id'])+'\x22]':typeof a4=='number'?aL(0x150)+a4+'\x22]':aL(0x11b)+u(a4)+'\x22]',a6=a3['querySelector'](a5);return a6?(a6[aL(0x14b)]({'block':'center','inline':'nearest'}),!0x0):typeof a4=='object'?(a3['scrollTo']({'top':Math['max'](0x0,a4[aL(0x131)]-a3['clientHeight']*0.18),'left':Math['max'](0x0,Math['min'](a4['left'],a3['scrollWidth']-a3[aL(0x12e)])),'behavior':aL(0x147)}),!0x0):!0x1;},x=new WeakMap(),S=new WeakMap(),C=new WeakMap(),w=a3=>!!a3&&a3[aE(0x157)]===0x1,T=(a3,a4)=>{const aM=aE;if(!(a3!=null&&a3['querySelectorAll']))return[];let a5=Array['from'](a3['querySelectorAll'](a4));w(a3)&&a3[aM(0x134)]&&a5['push'](...T(a3['shadowRoot'],a4));let a6=Array['from'](a3['querySelectorAll']('*'));for(let a7 of a6)a7['shadowRoot']&&a5['push'](...T(a7['shadowRoot'],a4));return a5;},E=a3=>{const aN=aE;if(!a3)return null;let a4=w(a3)?x[aN(0x12a)](a3)||a3['__flyfishViewerSearchProvider']:null;if(a4)return a4;let a5=T(a3,'[data-viewer-search-provider]')[0x0];return a5&&(x['get'](a5)||a5[aN(0x123)])||null;},D=(a3,a4)=>{const aO=aE;S['set'](a3,a4),a3[aO(0x120)]['viewerZoomProvider']=a3['dataset']['viewerZoomProvider']||aO(0x14d),a3[aO(0x138)]=a4;},O=a3=>{a3&&(S['delete'](a3),delete a3['dataset']['viewerZoomProvider'],delete a3['__flyfishViewerZoomProvider']);},k=a3=>{if(!a3)return null;let a4=w(a3)?S['get'](a3)||a3['__flyfishViewerZoomProvider']:null;if(a4)return a4;let a5=T(a3,'[data-viewer-zoom-provider]')[0x0];return a5&&(S['get'](a5)||a5['__flyfishViewerZoomProvider'])||null;},ee=(a3,a4)=>{const aP=aE;C[aP(0x163)](a3,a4),a3[aP(0x120)]['viewerViewStateProvider']=a3['dataset']['viewerViewStateProvider']||'custom',a3['__flyfishViewerViewStateProvider']=a4;},te=a3=>{const aQ=aE;a3&&(C['delete'](a3),delete a3[aQ(0x120)]['viewerViewStateProvider'],delete a3['__flyfishViewerViewStateProvider']);},A=a3=>{const aR=aE;if(!a3)return null;let a4=w(a3)?C['get'](a3)||a3['__flyfishViewerViewStateProvider']:null;if(a4&&(!w(a3)||a3['dataset']['viewerViewStateProvider']!=='generic'))return a4;let a5=T(a3,'[data-viewer-view-state-provider]'),a6=a5['find'](a9=>a9[aR(0x120)]['viewerViewStateProvider']!=='generic'),a7=a5[aR(0x124)](a9=>a9['dataset']['viewerViewStateProvider']==='generic'),a8=a6||a7;return a8?C['get'](a8)||a8['__flyfishViewerViewStateProvider']||null:a4||null;},j=['auto','scroll','overlay'],M=a3=>Math['max'](0x0,a3['scrollHeight']-a3['clientHeight']),N=(a3,a4={})=>{const aS=aE;var a5,a6;let a7=(a5=a4['minScrollRange'])==null?0x2:a5;if(M(a3)<=a7)return!0x1;let a8=(a6=a3['ownerDocument'])==null?void 0x0:a6['defaultView'],a9=a8!=null&&a8['getComputedStyle']?a8:typeof window<'u'?window:void 0x0;if(!(a9!=null&&a9['getComputedStyle']))return!0x1;let aa=a9['getComputedStyle'](a3),ab=aa['overflowY']||aa['overflow'];return(a4[aS(0x132)]||j)['includes'](ab);},P=(a3,a4={})=>{const aT=aE;if(!a3)return null;let a5=a4['preferredSelector']||aT(0x15e),a6=a4['candidateSelector']||'div,\x20section,\x20article,\x20pre',a7=a3['querySelector'](a5);return a7&&N(a7,a4)?a7:N(a3,a4)?a3:Array['from'](a3['querySelectorAll'](a6))[aT(0x164)](a8=>N(a8,a4))[aT(0x141)]((a8,a9)=>M(a9)-M(a8))[0x0]||a7||a3;},F=a3=>({'scale':a3['scale'],'label':a3['label'],'canZoomIn':a3['canZoomIn'],'canZoomOut':a3['canZoomOut'],'canReset':a3['canReset'],'minScale':a3['minScale'],'maxScale':a3['maxScale']}),I=(a3,a4)=>{const aU=aE;let a5=r(a4||{});return a3['scale']=a5['scale'],a3['label']=a5['label'],a3[aU(0x16a)]=a5['canZoomIn'],a3['canZoomOut']=a5[aU(0x121)],a3['canReset']=a5['canReset'],a3['minScale']=a5[aU(0x16d)],a3['maxScale']=a5['maxScale'],a3;},L=a3=>F(a3);(function(){var a3=n(function*(a4,a5){return I(a4,yield a5()),L(a4);});return function(a4,a5){return a3['apply'](this,arguments);};}());function a1(a,b){a=a-0x118;const c=a0();let d=c[a];return d;}function a0(){const bb=['.pdf-toolbar','11255676ISvbmE','6464pRovAm','source','sort','viewer','navigation','no-provider','1512pnuuWc','-chunk-1','smooth','resize','width','scroll','scrollIntoView','52636HxDvYV','custom','no-root','observe','[data-viewer-line=\x22','mode','MutationObserver','closest','scale','extra','page','nodeType','maxScale','scrollTop','apply','38470Chukde','line','.state-panel','[data-viewer-scroll-container],\x20.pdf-wrapper','slice','getState','.viewer-actions','getBoundingClientRect','set','filter','max','498956ajFgGp','isFinite','querySelectorAll','object','canZoomIn','actual','393445PeSmGA','minScale','1206RDvtGX','forEach','min','[data-viewer-anchor-id=\x22','-chunk-','2SABZzx','defaultView','31601414uaJKso','dataset','canZoomOut','.pdfViewer\x20.page,\x20[data-page-number],\x20[data-page]','__flyfishViewerSearchProvider','find','fit','cancelAnimationFrame','collectText','api','viewerAnchorId','get','initial','rotation','scrollLeft','clientWidth','length','clientHeight','top','overflowValues','view-state','shadowRoot','auto','39SmXIUy','11IfLqBt','__flyfishViewerZoomProvider','54tehosA','chunkSize','[data-viewer-anchor-id],.pdfViewer\x20.page,.docx-wrapper\x20section,.docx\x20p,.docx\x20li,.docx\x20table,.markdown-body\x20h1,.markdown-body\x20h2,.markdown-body\x20h3,.markdown-body\x20h4,.markdown-body\x20h5,.markdown-body\x20h6,.markdown-body\x20p,.markdown-body\x20li,.markdown-body\x20pre,.markdown-body\x20table,article\x20h1,article\x20h2,article\x20h3,article\x20h4,article\x20h5,article\x20h6,article\x20p,article\x20li,article\x20pre,article\x20table,pre\x20code,p,li,tr,h1,h2,h3,h4,h5,h6,pre,table','text'];a0=function(){return bb;};return a0();}var R=()=>{let a3=new Set();return{'emit'(){const aV=a1;a3[aV(0x119)](a4=>a4());},'subscribe'(a4){return a3['add'](a4),()=>{a3['delete'](a4);};}};},z=a3=>{const aW=aE;var a4,a5;return((a5=(a4=a3==null?void 0x0:a3['ownerDocument'])==null?void 0x0:a4['defaultView'])==null?void 0x0:a5[aW(0x152)])||(typeof MutationObserver<'u'?MutationObserver:void 0x0);},B=({root:a3,enabled:a4,beforeZoom:a5,onChange:a6})=>{let a7=null,a8=null,a9=null,aa=!0x1,ab=r(),ac=()=>{a6==null||a6(F(ab));},ad=()=>{a8==null||a8(),a8=null,a7=null,I(ab,null);},af=()=>{var ai,aj;if((a4==null?void 0x0:a4())===!0x1)return ad(),null;let ak=k(a3());return ak!==a7&&(a8==null||a8(),a7=ak,a8=((ai=ak==null?void 0x0:ak['subscribe'])==null?void 0x0:ai['call'](ak,()=>{I(ab,ak['getState']()),aa||ac();}))||null),I(ab,((aj=ak==null?void 0x0:ak['getState'])==null?void 0x0:aj['call'](ak))||null),ak;},ag=()=>{a9==null||a9['disconnect'](),a9=null;},ah=(function(){var ai=n(function*(aj,ak){const aX=a1;let al=af();if(!al||a5&&(yield a5(aj))===!0x1)return F(ab);aa=!0x0;try{return I(ab,(yield ak(al))||al[aX(0x160)]()),F(ab);}finally{aa=!0x1;}});return function(aj,ak){return ai['apply'](this,arguments);};}());return{get 'provider'(){return a7;},'state':ab,'hasProvider'(){return!!af();},'refreshProvider':af,'observe'(){const aY=a1;ag();let ai=a3(),aj=z(ai);if(!ai||!aj){af();return;}a9=new aj(()=>{af();}),a9[aY(0x14f)](ai,{'childList':!0x0,'subtree':!0x0}),af();},'clearProvider':ad,'getState'(){return F(ab);},'zoomIn':()=>ah('zoom-in',ai=>ai['zoomIn']()),'zoomOut':()=>ah('zoom-out',ai=>ai['zoomOut']()),'resetZoom':()=>ah('zoom-reset',ai=>ai['resetZoom']()),'destroy'(){ag(),ad();}};},V=[aE(0x135),'contain','cover','width','height',aE(0x16b),'scale-down'],H=['until-interaction','always','initial'],U='until-interaction',W=0x0,G=0x8,K=a3=>!!a3&&typeof a3=='object'&&!Array['isArray'](a3),q=a3=>typeof a3=='string'&&V['includes'](a3),J=a3=>typeof a3=='string'&&H['includes'](a3),Y=a3=>{let a4=Number(a3);return Number['isFinite'](a4)&&a4>0x0?a4:void 0x0;},X=a3=>{let a4=Number(a3);return Number['isFinite'](a4)&&a4>0x0?a4:W;},Z=a3=>{if(a3==null||a3===!0x1)return null;if(q(a3))return{'mode':a3,'resize':U,'padding':W};if(!K(a3))return null;let a4=Y(a3['minScale']),a5=Y(a3['maxScale']),a6=a4!==void 0x0&&a5!==void 0x0&&a5<a4?a4:a5;return{'mode':q(a3['mode'])?a3['mode']:'auto','resize':J(a3['resize'])?a3['resize']:U,'padding':X(a3['padding']),'minScale':a4,'maxScale':a6};},ne=(a3,a4,a5)=>{let a6=a3;return Number['isFinite'](a4)&&(a6=Math['max'](Number(a4),a6)),Number['isFinite'](a5)&&(a6=Math['min'](Number(a5),a6)),a6;},re=({mode:a3,viewportWidth:a4,viewportHeight:a5,contentWidth:a6,contentHeight:a7,minScale:a8,maxScale:a9})=>{if(a4<=0x0||a5<=0x0||a6<=0x0||a7<=0x0)return;let aa=a4/a6,ab=a5/a7,ac=Math['min'](aa,ab),ad=Math['max'](aa,ab),af=((()=>{const aZ=a1;switch(a3){case'cover':return ad;case'width':return aa;case'height':return ab;case'actual':return 0x1;case'scale-down':return Math[aZ(0x11a)](0x1,ac);default:return ac;}})());if(!(!Number['isFinite'](af)||af<=0x0))return ne(af,a8,a9);},ie=a3=>{const b0=aE;var a4,a5;if(!a3)return!0x1;let a6=Number((a4=a3['scale'])==null?(a5=a3['zoom'])==null?void 0x0:a5['scale']:a4);if(Number[b0(0x167)](a6)&&a6>0x0||Number['isFinite'](a3['page'])||Number[b0(0x167)](a3[b0(0x12c)])||a3['navigation']&&Object['keys'](a3[b0(0x143)])['length']>0x0||a3[b0(0x155)]&&Object['keys'](a3['extra'])['length']>0x0)return!0x0;let a7=a3[b0(0x14a)]||{};return[b0(0x131),'left','topRatio','leftRatio']['some'](a8=>{let a9=a7[a8];return Number['isFinite'](a9);});},Q=(a3,a4,a5='viewer',a6='none')=>({'applied':!0x1,'mode':a3['mode'],'resize':a3['resize'],'source':a5,'reason':a4,'provider':a6}),$=(a3,a4,a5)=>({'applied':!!(a3!=null&&a3['applied']),'mode':(a3==null?void 0x0:a3[aE(0x151)])||a4[aE(0x151)],'resize':(a3==null?void 0x0:a3[aE(0x148)])||a4['resize'],'scale':a3==null?void 0x0:a3['scale'],'source':(a3==null?void 0x0:a3[aE(0x140)])||a4['source'],'reason':a3==null?void 0x0:a3['reason'],'provider':(a3==null?void 0x0:a3['provider'])||a5,'state':a3==null?void 0x0:a3['state']}),ae=a3=>a3==='pending'||a3==='retry'||a3==='image-not-ready'||a3==='unmeasurable',oe=a3=>{const b1=aE;var a4;let a5=(a4=a3['getBoundingClientRect'])==null?void 0x0:a4['call'](a3);return{'width':Math[b1(0x165)](0x0,(a5==null?void 0x0:a5['width'])||a3[b1(0x12e)]||0x0),'height':Math['max'](0x0,(a5==null?void 0x0:a5['height'])||a3[b1(0x130)]||0x0)};},se=({root:a3,enabled:a4,getFit:a5=()=>void 0x0,onFit:a6})=>{let a7=null,a8=null,a9=null,aa=!0x1,ab=0x0,ac=()=>{const b2=a1;var al;let am=a3();return((al=am==null?void 0x0:am['ownerDocument'])==null?void 0x0:al[b2(0x11e)])||(typeof window<'u'?window:void 0x0);},ad=()=>{const b3=a1;if(a8===null)return;let al=ac();al!=null&&al['cancelAnimationFrame']&&al[b3(0x126)](a8),a8=null;},af=()=>{a9&&clearTimeout(a9),a9=null;},ag=(al,am)=>{const b4=a1;let an=al===void 0x0?a5():al;return an==null?am==='api'?Z(b4(0x135)):null:Z(an);},ah=(al,am,an)=>{ab>=G||(af(),ab+=0x1,a9=setTimeout(()=>{const b5=a1;a9=null,ai(al,{'source':am,'reason':an==='api'?b5(0x128):'retry'});},0x20*ab));},ai=(function(){var al=n(function*(am,an={}){const b6=a1;let ao=an['source']||'api',ap=an['reason']||'api',aq=ag(am,ap);if(!aq)return{'applied':!0x1,'mode':'auto','resize':U,'source':ao,'reason':'not-configured','provider':'none'};if((a4==null?void 0x0:a4())===!0x1)return Q(aq,'disabled',ao);let ar=a3();if(!ar)return ah(am,ao,ap),Q(aq,b6(0x14e),ao);let as=oe(ar);if(as[b6(0x149)]<=0x0||as['height']<=0x0)return ah(am,ao,ap),Q(aq,'zero-size',ao);let at=a2(a2({},aq),{},{'source':ao,'reason':ap,'viewportWidth':Math['max'](0x0,as['width']-aq['padding']*0x2),'viewportHeight':Math[b6(0x165)](0x0,as['height']-aq['padding']*0x2),'container':ar}),au=A(ar),av=null;if(au!=null&&au['fit']){let ay=$(yield au[b6(0x125)](at),at,b6(0x133));if(ay['applied'])return ab=0x0,a6==null||a6(ay),ay;av=ay;}let aw=k(ar);if(aw!=null&&aw['fit']){let az=$(yield aw['fit'](at),at,'zoom');if(az['applied'])return ab=0x0,a6==null||a6(az),az;av=az;}let ax=Q(aq,au||aw?'unsupported':'no-provider',ao);return(ax['reason']===b6(0x144)||ae(av==null?void 0x0:av['reason']))&&ah(am,ao,ap),ax;});return function(am){return al['apply'](this,arguments);};}()),aj=(al='resize')=>{let am=Z(a5());if(!am||am['resize']==='initial'||am['resize']==='until-interaction'&&aa)return;ad();let an=ac(),ao=()=>{const b7=a1;a8=null,ai(void 0x0,{'source':b7(0x142),'reason':al});};if(an!=null&&an['requestAnimationFrame']){a8=an['requestAnimationFrame'](ao);return;}a8=setTimeout(ao,0x10);},ak=()=>{ad(),a7==null||a7['disconnect'](),a7=null;};return{'normalize':Z,'fit':(function(){var al=n(function*(am,an){const b8=a1;return af(),aa=!0x1,ai(am,{'source':(an==null?void 0x0:an['source'])||'api','reason':(an==null?void 0x0:an['reason'])||b8(0x128)});});return function(am,an){const b9=a1;return al[b9(0x15a)](this,arguments);};}()),'applyInitialFit':(function(){var al=n(function*(am={}){const ba=a1;return af(),ab=0x0,aa=!0x1,am['skip']?Q(Z(a5())||Z('auto'),'initial-view-state','initial'):ai(void 0x0,{'source':ba(0x12b),'reason':'initial'});});return function(){return al['apply'](this,arguments);};}()),'scheduleFit':aj,'observe'(){var al,am;ak();let an=a3(),ao=((am=(al=an==null?void 0x0:an['ownerDocument'])==null?void 0x0:al['defaultView'])==null?void 0x0:am['ResizeObserver'])||(typeof ResizeObserver<'u'?ResizeObserver:void 0x0);!an||!ao||(a7=new ao(()=>aj('resize')),a7['observe'](an));},'markUserInteraction'(){aa=!0x0,af();},'resetAutoFit'(){aa=!0x1,ab=0x0;},'destroy'(){ak(),af(),ab=0x0;}};};export{b as _,B as a,i as b,A as c,D as d,te as f,y as g,v as h,R as i,k as l,_ as m,ie as n,P as o,O as p,re as r,E as s,se as t,ee as u,s as v,n as x,a as y};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const ak=g;function b(){const az=['1198FOONHB','resize','addEventListener','heif','21OtNnRK','1277616IxhHIb','clientHeight','result','685545dWyrhZ','9553776KeIVCr','image/*','959945AVVPpA','remove','div','mode','zoom','image/tiff','registerThumbnailAdapter','heic','34200lolfqz','observe','replaceChildren','apply','image-stage','unmeasurable','HEIC/HEIF\x20image\x20conversion\x20has\x20moved\x20out\x20of\x20@file-viewer/core.\x20Install\x20and\x20pass\x20@file-viewer/renderer-image,\x20or\x20use\x20@file-viewer/preset-all.','image/png','style','emit','44UWUEAn','target','max','Unable\x20to\x20read\x20image\x20data\x20URL.','4XHCXEL','334fJFxMm','textContent','alt','naturalHeight','3879744oKlRwy','append','image.lightbox.alt','image/avif','round','removeEventListener','2277IvgTGc','width'];b=function(){return az;};return b();}function g(a,c){a=a-0xa7;const d=b();let e=d[a];return e;}(function(y,z){const aj=g,A=y();while(!![]){try{const B=parseInt(aj(0xbc))/0x1*(-parseInt(aj(0xc8))/0x2)+-parseInt(aj(0xd0))/0x3*(parseInt(aj(0xbb))/0x4)+-parseInt(aj(0xd3))/0x5+parseInt(aj(0xcd))/0x6*(-parseInt(aj(0xcc))/0x7)+-parseInt(aj(0xc0))/0x8+-parseInt(aj(0xc6))/0x9*(parseInt(aj(0xad))/0xa)+-parseInt(aj(0xb7))/0xb*(-parseInt(aj(0xd1))/0xc);if(B===z)break;else A['push'](A['shift']());}catch(C){A['push'](A['shift']());}}}(b,0x8c60a));import{t as j}from'./messages.js';import{d as k,i as q,p as v,r as w,x}from'./fit.js';var o={'avif':ak(0xc3),'bmp':'image/bmp','gif':'image/gif','heic':'image/heic','heif':'image/heif','ico':'image/x-icon','jxl':'image/jxl','jpg':'image/jpeg','jpeg':'image/jpeg','png':ak(0xb4),'svg':'image/svg+xml','tif':'image/tiff','tiff':ak(0xaa),'webp':'image/webp'},s='\x0a.image-viewer{position:relative;width:100%;height:100%;overflow:auto;background:var(--file-viewer-render-surface-background,#eef1f4);box-sizing:border-box}\x0a.image-stage{min-width:100%;min-height:100%;display:flex;align-items:center;justify-content:center;padding:24px;box-sizing:border-box}\x0a.image-stage\x20img{display:block;width:auto;max-width:none;margin:0\x20auto;border:0;box-shadow:0\x2018px\x2048px\x20rgba(15,23,42,.16);background:#fff;cursor:zoom-in}\x0a.image-lightbox{position:fixed;inset:0;z-index:2147483000;display:flex;align-items:center;justify-content:center;padding:40px;background:rgba(15,23,42,.88);box-sizing:border-box}\x0a.image-lightbox[hidden]{display:none}\x0a.image-lightbox\x20img{display:block;max-width:100%;max-height:100%;object-fit:contain;background:#fff;box-shadow:0\x2030px\x2080px\x20rgba(0,0,0,.4);cursor:zoom-out}\x0a.image-lightbox\x20button{position:absolute;top:20px;right:20px;width:40px;height:40px;border:0;border-radius:999px;background:rgba(255,255,255,.92);color:#172033;font-size:24px;line-height:40px;cursor:pointer;box-shadow:0\x2012px\x2028px\x20rgba(0,0,0,.18)}\x0a[data-viewer-theme=\x27dark\x27]\x20.image-viewer{background:var(--file-viewer-render-surface-background,#101820)}\x0a@media\x20(prefers-color-scheme:dark){[data-viewer-theme=\x27system\x27]\x20.image-viewer{background:var(--file-viewer-render-surface-background,#101820)}}\x0a@media\x20(max-width:767px){.image-stage{padding:12px}.image-lightbox{padding:16px}.image-lightbox\x20button{top:12px;right:12px}}\x0a',c=y=>{const al=ak;let z=y['createElement']('style');return z[al(0xbd)]=s,z;},l=y=>o[(y||'')['trim']()['toLowerCase']()]||ak(0xd2),u=(function(){var y=x(function*(z){return yield new Promise((A,B)=>{let C=new FileReader();C['onload']=D=>{const am=g;var E;let F=(E=D['target'])==null?void 0x0:E[am(0xcf)];if(typeof F=='string'){A(F);return;}B(Error(am(0xba)));},C['onerror']=()=>B(C['error']||Error('Unable\x20to\x20read\x20image\x20data\x20URL.')),C['readAsDataURL'](z);});});return function(z){return y['apply'](this,arguments);};}()),d=(function(){var y=x(function*(z,A){const an=g;let B=(A||'')['trim']()['toLowerCase']();if(B===an(0xac)||B===an(0xcb))throw Error(an(0xb3));return u(new Blob([z],{'type':l(B)}));});return function(z,A){const ao=g;return y[ao(0xb0)](this,arguments);};}()),f=y=>Number(y['toFixed'](0x3)),p=(y,z,A)=>{const ap=ak;let B=y['createElement']('div');B['className']='image-lightbox',B['hidden']=!0x0,B['setAttribute']('role','dialog'),B['setAttribute']('aria-modal','true');let C=y['createElement']('img');C[ap(0xbe)]=A(ap(0xc2)),C['src']=z;let D=y['createElement']('button');D['type']='button',D['setAttribute']('aria-label',A('image.lightbox.close')),D['textContent']='x';let E=()=>{B['hidden']=!0x0;};return D['addEventListener']('click',E),C[ap(0xca)]('click',E),B['addEventListener']('click',F=>{const aq=ap;F[aq(0xb8)]===B&&E();}),B[ap(0xc1)](C,D),{'element':B,'open'(){B['hidden']=!0x1;},'destroy'(){const ar=ap;D['removeEventListener']('click',E),C['removeEventListener']('click',E),B[ar(0xd4)]();}};};function m(y,z,A,B){return h['apply'](this,arguments);}function h(){const ay=ak;return h=x(function*(z,B,G,H){const as=g;var J,K;let L=j(H==null?void 0x0:H['options']),Q=B['ownerDocument']||document,R=yield d(z,G);(J=H==null?void 0x0:H['registerThumbnailAdapter'])==null||J['call'](H,{'capture':()=>new Blob([z],{'type':l(G)})});let U=0x1,V=0x1,W=0x1,X=0x0,Y=q(),Z=Q['createElement']('div');Z['className']='image-viewer',Z['dataset']['viewerZoomProvider']='image';let a0=Q['createElement'](as(0xa7));a0['className']=as(0xb1);let a1=Q['createElement']('img');a1['alt']=L('image.alt'),a1['src']=R,a0['append'](a1),Z['append'](a0);let a2=p(Q,R,L),a3=()=>a2['open']();a1['addEventListener']('click',a3);let a4=()=>Math['min'](0.1,V||0.1),a5=ac=>{let ad=a4();return Math['min'](0x5,Math['max'](ad,f(ac)));},a6=()=>{const at=as;let ac=a1['naturalWidth']||0x0,ad=a1['naturalHeight']||0x0;if(!ac||!ad)return 0x1;let ae=Math['max']((Z['clientWidth']||0x0)-0x30,0x1),af=Math['max']((Z[at(0xce)]||X||0x0)-0x30,0x1);return Math['min'](0x1,ae/ac,af/ad);},a7=()=>{const au=as;if(V=a6(),W=a5(V*U),a1['naturalWidth']&&a1['naturalHeight']){a1[au(0xb5)]['width']=Math['max'](0x1,Math['round'](a1['naturalWidth']*W))+'px',a1[au(0xb5)]['height']=Math['max'](0x1,Math['round'](a1['naturalHeight']*W))+'px';return;}a1['style'][au(0xc7)]='auto',a1['style']['height']=X>0x0?Math['max'](0x1,Math[au(0xc4)](X*U))+'px':U*0x64+'%';},a8=()=>{const av=as;X=Z[av(0xce)]||0x0,a7(),Y[av(0xb6)]();},a9=new ResizeObserver(a8);a9[as(0xae)](Z),a1['addEventListener']('load',a8);let aa=()=>({'scale':W,'label':Math['round'](W*0x64)+'%','canZoomIn':W<0x5,'canZoomOut':W>a4(),'canReset':Math['abs'](U-0x1)>0.001,'minScale':a4(),'maxScale':0x5}),ab=ac=>(U=a5(ac)/Math[as(0xb9)](V,0.001),a7(),Y['emit'](),aa());return k(Z,{'zoomIn':()=>ab(W+0.15),'zoomOut':()=>ab(W-0.15),'resetZoom':()=>(U=0x1,a7(),Y[as(0xb6)](),aa()),'setZoom':ab,'fit':ac=>{const aw=as;var ad,ae;let af=a1['naturalWidth']||0x0,ag=a1[aw(0xbf)]||0x0;if(!af||!ag)return{'applied':!0x1,'mode':ac['mode'],'resize':ac['resize'],'source':ac['source'],'reason':'image-not-ready','provider':'zoom'};let ah=w({'mode':ac['mode']==='auto'?'scale-down':ac['mode'],'viewportWidth':Math[aw(0xb9)](0x1,ac['viewportWidth']||Z['clientWidth']||0x0),'viewportHeight':Math['max'](0x1,ac['viewportHeight']||Z['clientHeight']||X||0x0),'contentWidth':af,'contentHeight':ag,'currentScale':W,'minScale':(ad=ac['minScale'])==null?a4():ad,'maxScale':(ae=ac['maxScale'])==null?0x5:ae});if(!ah)return{'applied':!0x1,'mode':ac['mode'],'resize':ac[aw(0xc9)],'source':ac['source'],'reason':aw(0xb2),'provider':aw(0xa9)};let ai=ab(ah);return{'applied':!0x0,'mode':ac[aw(0xa8)],'resize':ac['resize'],'scale':ai['scale'],'source':ac['source'],'provider':'zoom'};},'getState':aa,'subscribe':Y['subscribe']}),B[as(0xaf)](c(Q),Z),(((K=H==null?void 0x0:H['surface'])==null?void 0x0:K['shadowRoot'])||B)['append'](a2['element']),a8(),{'$el':B,'unmount'(){const ax=as;var ac;(ac=H==null?void 0x0:H[ax(0xab)])==null||ac['call'](H,null),v(Z),a9['disconnect'](),a1[ax(0xc5)]('load',a8),a1['removeEventListener']('click',a3),a2['destroy'](),B['replaceChildren']();}};}),h[ay(0xb0)](this,arguments);}export{m as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var z=g;(function(h,j){var v=g,k=h();while(!![]){try{var m=parseInt(v(0xd0))/0x1*(parseInt(v(0xe9))/0x2)+parseInt(v(0xc9))/0x3+-parseInt(v(0xba))/0x4*(parseInt(v(0xd9))/0x5)+-parseInt(v(0xe3))/0x6*(-parseInt(v(0xdc))/0x7)+-parseInt(v(0x100))/0x8*(-parseInt(v(0x12a))/0x9)+-parseInt(v(0xeb))/0xa+-parseInt(v(0x14a))/0xb*(parseInt(v(0xce))/0xc);if(m===j)break;else k['push'](k['shift']());}catch(q){k['push'](k['shift']());}}}(b,0xca425));function e(h){'@babel/helpers - typeof';return e=typeof Symbol=='function'&&typeof Symbol['iterator']=='symbol'?function(j){return typeof j;}:function(j){return j&&typeof Symbol=='function'&&j['constructor']===Symbol&&j!==Symbol['prototype']?'symbol':typeof j;},e(h);}function t(h,j){var w=g;if(e(h)!=w(0xbe)||!h)return h;var k=h[Symbol[w(0x115)]];if(k!==void 0x0){var m=k['call'](h,j||'default');if(e(m)!='object')return m;throw TypeError('@@toPrimitive\x20must\x20return\x20a\x20primitive\x20value.');}return(j==='string'?String:Number)(h);}function n(h){var j=t(h,'string');return e(j)=='symbol'?j:j+'';}function g(a,c){a=a-0xb8;var d=b();var e=d[a];return e;}function r(h,j,k){return(j=n(j))in h?Object['defineProperty'](h,j,{'value':k,'enumerable':!0x0,'configurable':!0x0,'writable':!0x0}):h[j]=k,h;}function i(h,j){var x=g,k=Object[x(0xf6)](h);if(Object['getOwnPropertySymbols']){var m=Object['getOwnPropertySymbols'](h);j&&(m=m['filter'](function(q){return Object['getOwnPropertyDescriptor'](h,q)['enumerable'];})),k[x(0x127)]['apply'](k,m);}return k;}function a(h){var y=g;for(var j=0x1;j<arguments['length'];j++){var k=arguments[j]==null?{}:arguments[j];j%0x2?i(Object(k),!0x0)['forEach'](function(m){r(h,m,k[m]);}):Object['getOwnPropertyDescriptors']?Object[y(0x14d)](h,Object['getOwnPropertyDescriptors'](k)):i(Object(k))['forEach'](function(m){Object['defineProperty'](h,m,Object['getOwnPropertyDescriptor'](k,m));});}return h;}var o=Object['freeze']({'zh-CN':{'toolbar.zoomGroup':'缩放控制','toolbar.zoomOut':'缩小预览','toolbar.zoomIn':'放大预览','toolbar.zoomReset':'还原比例','toolbar.download':'下载','toolbar.downloadTitle':'下载原始文件','toolbar.print':'打印','toolbar.printTitle':'打印完整渲染内容','toolbar.printDirect':'直接打印','toolbar.printMask':'掩膜打印','toolbar.printMaskTitle':'遮盖敏感区域后再打印','toolbar.printMaskAdd':'添加掩膜','toolbar.printMaskClear':'清空','toolbar.printMaskCancel':'取消','toolbar.printMaskConfirm':'确认打印','toolbar.printMaskHint':'拖拽绘制黑色遮盖块,可删除后继续调整','toolbar.exportHtml':z(0xb8),'toolbar.exportHtmlTitle':'导出当前渲染后的\x20HTML','toolbar.search':'搜索','toolbar.searchPlaceholder':'搜索文档','toolbar.searchPrevious':z(0x104),'toolbar.searchNext':'下一个匹配','toolbar.searchClear':'清除搜索','toolbar.theme':'主题','toolbar.themeToLight':'切换为浅色模式','toolbar.themeToDark':z(0x145),'state.ready.title':'预览完成','state.ready.message':z(0x146),'state.empty.title':'暂无文件','state.empty.message':'请选择文件或提供可访问的文件地址后开始预览。','state.unsupported.install.title':'需要装配预览能力','state.unsupported.install.message':'{extension}\x20格式已在支持矩阵中,但当前项目尚未装配\x20{rendererLabel}\x20renderer。','state.unsupported.install.description':'推荐安装\x20{presetPackage},通过\x20options.preset\x20/\x20options.renderers\x20注入对应能力{rendererTip};Vite\x20项目也可以使用\x20@file-viewer/vite-plugin\x20自动发现已安装\x20preset。','state.unsupported.title':'暂不支持在线预览','state.unsupported.message':'不支持{extension}格式的在线预览,请下载后预览或转换为支持的格式。','state.unsupported.description':'支持\x20Office、PDF、OFD、Typst、压缩包、邮件、OLB/DRA、CAD、地理数据、3D\x20模型、Excalidraw、draw.io、EPUB、UMD、Markdown、代码/文本、图片、音视频、字体和数据资产的在线预览','state.error.title':'预览失败','preview.downloading':'正在下载文件资源...','preview.streamingPdf':'正在建立\x20PDF\x20流式预览...','preview.reading':'正在解析文件内容...','error.download':z(0x103),'error.print':z(0xbc),'error.exportHtml':z(0x136),'error.noDownloadSource':'当前没有可下载的源文件','error.noExportContent':'当前没有可导出的预览内容','error.printUnavailable':'当前文件类型不支持完整打印,请下载原文件后在本地应用中打印','error.printWindowBlocked':z(0x14f),'error.remoteDownload':'文件下载失败','error.localRead':'读取文件异常','error.load':z(0xf0),'error.stream':'加载\x20PDF\x20流式预览异常','error.beforeOperation':'操作前置校验失败','error.unknown':'未知错误','error.blobUnavailable':'当前运行环境不支持\x20Blob,无法读取文件内容。','error.sourceUnsupported':'不支持当前文件来源输入。','error.fileReadArrayBuffer':'读取文件二进制内容失败。','error.fileReadDataUrl':z(0xc7),'error.fileReadText':'读取文件文本内容失败。','error.imageDataUrlRead':'读取图片数据失败。','operation.download':'下载原始文件','operation.print':'打印完整渲染内容','operation.exportHtml':'导出渲染\x20HTML','operation.zoomIn':'放大预览','operation.zoomOut':'缩小预览','operation.zoomReset':'还原预览比例','pdf.toolbar.toggleNavigation':'切换导航窗格','pdf.toolbar.previousPage':'上一页','pdf.toolbar.nextPage':'下一页','pdf.toolbar.fitWidth':'适合宽度','pdf.toolbar.zoomOut':'缩小','pdf.toolbar.zoomIn':'放大','pdf.toolbar.rotateLeft':'向左旋转','pdf.toolbar.rotateRight':'向右旋转','pdf.nav.typeLabel':'PDF\x20导航类型','pdf.nav.pagesTab':'页面','pdf.nav.outlineTab':'目录','pdf.nav.pagesTitle':z(0x141),'pdf.nav.outlineTitle':'目录导航','pdf.nav.pageCount':'{count}\x20页','pdf.nav.itemCount':'{count}\x20项','pdf.nav.pageLabel':'第\x20{page}\x20页','pdf.nav.outlineEmpty':'当前\x20PDF\x20没有可用目录','pdf.nav.outlineFallbackTitle':z(0x11a),'pdf.thumbnail.alt':'第\x20{page}\x20页缩略图','pdf.state.loading':'正在加载\x20PDF...','pdf.error.browserWindow':'PDF\x20预览需要浏览器窗口','pdf.error.missingSource':'PDF\x20缺少可读取的数据源','pdf.error.loadFailed':'PDF\x20加载失败','pdf.error.notLoaded':'PDF\x20尚未加载完成,请稍后再试','pdf.error.unloaded':'PDF\x20已卸载,无法继续打印','pdf.error.canvasUnavailable':'当前浏览器无法创建\x20PDF\x20打印画布','pdf.export.pageTitle':'{title}\x20-\x20第\x20{page}\x20页','spreadsheet.loading.kicker':z(0x12c),'spreadsheet.loading.title':z(0x12d),'spreadsheet.loading.hint':z(0x113),'spreadsheet.loading.streaming':'正在平滑补充可视区数据','spreadsheet.tabs.ariaLabel':z(0x111),'spreadsheet.state.parsingWorkbook':'正在解析\x20Excel\x20工作簿,请耐心等待...','spreadsheet.state.preparingSheet':'正在准备工作表内容...','spreadsheet.state.preparingSheetNamed':z(0xc4),'spreadsheet.state.cachedRows':'已缓存\x20{cached}\x20/\x20{total}\x20行','spreadsheet.state.rows':'共\x20{rows}\x20行,按视口预取平滑加载','spreadsheet.state.rowsAndColumns':'共\x20{rows}\x20行,{cols}\x20列,按视口预取平滑加载','spreadsheet.error.parseFailed':'Excel\x20解析失败','spreadsheet.error.workerFailed':'Excel\x20Worker\x20运行失败','word.error.invalidDocx':'文件不是有效的\x20DOCX/OOXML\x20压缩包,可能下载不完整或被服务端错误内容替换,请重新上传或检查文件源。','word.error.missingOdfContent':'ODF\x20文件缺少\x20content.xml。','word.error.odfXmlParseFailed':'ODF\x20XML\x20解析失败。','word.title.rtf':'RTF\x20文档预览','word.title.openDocumentPresentation':'OpenDocument\x20演示文稿预览','word.title.openDocumentText':z(0x112),'word.page.fallback':'第\x20{page}\x20页','word.page.empty':z(0xd7),'word.body':'正文','word.body.empty':'没有提取到可读文本','ofd.state.loading':'正在解析\x20OFD...','ofd.error.empty':'OFD\x20文件中没有可渲染的文档','ofd.error.parseFailed':'OFD\x20文件解析失败','presentation.state.loading':'正在解析\x20PPTX...','presentation.error.title':z(0xfa),'presentation.error.parseFailed':'PPTX\x20解析失败','presentation.ppt.state.loading':'正在解析\x20PowerPoint\x2097–2003...','presentation.ppt.error.title':'PPT\x20预览失败','presentation.ppt.error.parseFailed':z(0xfb),'presentation.ppt.error.assetHint':'请检查\x20@file-viewer/ppt\x20模块、pptWasmUrl、application/wasm\x20MIME\x20类型、Web\x20Crypto\x20和\x20CSP\x20配置。','archive.error.nestedUnsupported':'不支持\x20.{type}\x20格式的在线预览,请下载后预览或转换为支持的格式','archive.loading.readingDirectory':'正在读取压缩包目录...','archive.loading.readingDirectoryHint':'大文件会在\x20Worker\x20中解析,避免阻塞主线程。','archive.search.placeholder':'筛选压缩包内文件','archive.sidebar.hide':'隐藏压缩包文件列表','archive.sidebar.show':'显示压缩包文件列表','archive.preview.title':'压缩包内预览','archive.preview.chooseFile':'请选择一个文件','archive.preview.downloadFile':'下载文件','archive.error.title':'压缩包预览提示','archive.stats.summary':'{count}\x20个文件\x20·\x20{size}\x20·\x20{previewable}\x20个可直接预览','archive.warning.encrypted':'检测到加密内容,输入正确密码后即可预览;密码仅在当前会话中传递给\x20libarchive\x20Worker。','archive.password.title':'请输入压缩包密码','archive.password.description':'该压缩包包含加密内容,需要密码才能继续读取目录或预览内部文件。','archive.password.placeholder':'压缩包密码','archive.password.invalid':'密码不正确或无法解密,请重新输入。','archive.password.required':'请输入密码后继续。','archive.password.cancel':'取消','archive.password.confirm':'解锁预览','archive.error.passwordRequired':'已取消输入密码,无法预览加密压缩包。','archive.error.encryptedRequiresWorker':'该压缩包包含加密内容,需要发布\x20libarchive\x20Worker/WASM\x20后才能在线解密预览。','archive.empty.title':'选择左侧文件即可预览','archive.empty.message':'压缩包只读取目录;文件内容会在点击后按需解压,并在体积允许时缓存到\x20IndexedDB。','archive.loading.initializingCandidate':'正在初始化\x20{label}...','archive.loading.initializingCandidateHint':'如果当前服务器没有正确发布\x20Worker/WASM,会自动切换兼容模式。','archive.error.candidateInitTimeout':'{label}\x20初始化超时','archive.error.encryptedCheckTimeout':'{label}\x20加密检测超时','archive.loading.directoryReadyHint':'目录读取完成后,点击内部文件才会按需解压。','archive.error.candidateReadTimeout':z(0x125),'archive.loading.workerFallback':'Worker\x20不可用,正在切换\x20ZIP/TAR\x20兼容模式...','archive.loading.workerFallbackHint':'兼容模式无需额外静态\x20Worker,适合手机\x20WebView\x20或本地临时服务器。','archive.notice.workerFallback':'当前环境的\x20libarchive\x20Worker\x20未能启动,已自动切换到\x20ZIP/TAR/GZIP\x20兼容模式。RAR、7z\x20等格式仍建议发布\x20vendor/libarchive/worker-bundle.js\x20与\x20libarchive.wasm。','archive.error.tooLarge':z(0x132),'archive.loading.initializingWorker':'正在初始化压缩包解析\x20Worker...','archive.loading.initializingWorkerHint':z(0x10c),'archive.error.workerInitFailed':'压缩包\x20Worker\x20初始化失败','archive.error.workerUnsupported':'当前浏览器不支持\x20Web\x20Worker。','archive.error.indexedDbUnavailable':'IndexedDB\x20不可用','archive.error.entryTooLarge':'压缩包内文件\x20{name}\x20体积\x20{size}\x20超过预览上限\x20{limit}。','archive.loading.extracting':'正在按需解压\x20{name}...','archive.loading.rendering':'正在渲染\x20{name}...','archive.loading.exporting':'正在导出\x20{name}...','media.audio.title':'音频预览','media.audio.description':'使用浏览器原生播放器打开,兼容性取决于当前浏览器支持的音频编码。','media.audio.unsupported':z(0xe8),'media.video.title':'视频预览','media.video.unsupported':'当前浏览器不支持该视频格式。','media.video.hlsHint':'HLS\x20会优先使用原始\x20URL\x20加载分片;如果传入的是本地单文件清单,请确保分片地址可被浏览器访问。','media.midi.title':'MIDI\x20文件','media.midi.loading':'正在解析\x20MIDI\x20轨道...','media.midi.trackHeader':'轨道','media.midi.instrumentHeader':'乐器','media.midi.channelHeader':'通道','media.midi.noteCountHeader':z(0xb9),'media.midi.durationHeader':'时长','media.midi.durationStat':'时长','media.midi.trackStat':'轨道','media.midi.noteStat':'音符','media.midi.parseFailed':'MIDI\x20解析失败','email.mbox.subject':'{filename}\x20·\x20第\x201\x20封','email.mbox.summary':'MBOX\x20共识别\x20{count}\x20封邮件,当前展示第\x201\x20封。','email.error.title':'邮件预览提示','email.meta.from':'发件人','email.meta.to':'收件人','email.meta.cc':'抄送','email.meta.date':'时间','email.tabs.text':'正文','email.tabs.headers':z(0x10e),'email.attachments.title':'附件','email.attachments.empty':'暂无附件','email.attachments.download':'下载附件','email.attachments.opening':'正在打开附件\x20{name}...','email.attachments.nestedUnavailable':'当前运行环境未提供附件嵌套预览入口,请下载\x20{name}\x20后查看。','email.loading.parsing':'正在解析邮件...','data.font.sample':'Flyfish\x20Viewer\x20轻量预览\x20AaBbCc\x201234567890','data.error.fontFaceUnsupported':'当前浏览器不支持\x20FontFace\x20API','data.title.font':'字体文件预览','data.title.sqlite':'SQLite\x20数据库预览','data.title.parquet':'Parquet\x20列式数据预览','data.title.avro':'Avro\x20对象容器预览','data.title.wasm':'WebAssembly\x20模块预览','data.title.eps':'EPS\x20矢量文件摘要','data.title.ai':'Illustrator\x20文件摘要','data.title.webarchive':'WebArchive\x20摘要预览','data.title.summary':'数据资产摘要','data.label.format':'格式','data.label.size':'大小','data.label.rendering':z(0xe4),'data.label.objects':'对象数','data.label.sampleTable':'示例表','data.label.rows':'行数','data.label.columns':'列数','data.label.sampleRows':'示例行','data.label.imports':'导入','data.label.exports':'导出','data.label.magic':'Magic','data.label.note':'说明','data.label.container':'容器','data.value.schemaRead':'已读取','data.value.schemaUnread':'未读取','data.note.aiSummary':z(0x143),'data.note.postscriptSummary':'PostScript\x20摘要展示','data.note.webarchive':'安全提取可读片段,不执行网页脚本','data.image.alt':'资产预览','psd.title':'PSD\x20图层预览','psd.action.fit':'适合','psd.action.showAll':'全显','psd.action.hideAll':'全隐','psd.layers.title':'图层','psd.layers.redrawable':'{count}\x20可重绘','psd.layers.empty':'未发现可展示图层,使用合成图预览。','psd.layers.hidden':'隐藏','drawing.error.viewerLoadFailed':'diagrams.net\x20viewer\x20加载失败','drawing.error.excalidrawEmpty':'Excalidraw\x20文件中没有可预览图元','drawing.error.excalidrawTimeout':z(0x106),'drawing.error.drawioParseFailed':'Draw.io\x20XML\x20解析失败:{message}','drawing.error.drawioNoModel':z(0x151),'drawing.error.drawioNoElements':'当前\x20Draw.io\x20文件没有可预览图元。','drawing.error.viewerInitFailed':'diagrams.net\x20viewer\x20未正确初始化','drawing.error.drawioTimeout':'diagrams.net\x20官方\x20Viewer\x20加载超时,自动切换本地\x20SVG\x20预览','drawing.error.svgParseFailed':z(0xd1),'drawing.error.plantumlRenderFailed':'PlantUML\x20SVG\x20渲染失败:{status}','drawing.title.excalidraw':'Excalidraw\x20SVG\x20预览','drawing.title.mermaid':'Mermaid\x20SVG\x20预览','drawing.title.plantuml':'PlantUML\x20SVG\x20预览','drawing.title.drawio':'Draw.io\x20离线\x20SVG\x20预览','drawing.toolbar.zoomOut':'缩小','drawing.toolbar.zoomIn':'放大','drawing.toolbar.fit':'适合','drawing.toolbar.fitWidth':'适合宽度','drawing.state.loading':z(0x13b),'text.code.loadingHighlight':'正在加载高亮...','text.code.indexingLargeFile':'正在建立大文件索引\x20{progress}%','text.code.virtualized':'大文件\x20·\x20虚拟滚动\x20·\x20已关闭高亮','text.code.firstSegment':'首段','text.code.previousSegment':'上一段','text.code.nextSegment':'下一段','text.code.lastSegment':'末段','ebook.toc':'目录','ebook.reading':'阅读中','ebook.itemCount':'{count}\x20项','epub.title':'EPUB\x20电子书','epub.previousPage':'上一页','epub.nextPage':z(0xbf),'epub.loading':'正在解析\x20EPUB...','epub.chapterFallback':'章节\x20{index}','epub.renderIncomplete':'EPUB\x20正文渲染未完成,请刷新后重试','umd.title':'UMD\x20电子书','umd.previousChapter':'上一章','umd.nextChapter':'下一章','umd.loading':'正在解析\x20UMD...','umd.emptyContent':'未解析到正文内容','umd.chapterFallback':'章节\x20{index}','umd.galleryFallback':'图集\x20{index}','umd.warningBodyTooShort':'UMD\x20正文长度小于声明长度,文件可能不完整','umd.error.unexpectedEnd':'UMD\x20文件结构不完整,读取时遇到意外结尾','umd.error.invalidFile':'不是有效的\x20UMD\x20电子书文件','typst.summaryRenderer':z(0xcc),'typst.pageSummary.empty':z(0xf5),'typst.pageSummary.ready':'{count}\x20页\x20/\x20{width}\x20x\x20{height}\x20pt','typst.status.compiling':z(0x11b),'typst.status.failed':'编译失败','typst.status.rendered':'已渲染','typst.loading.title':z(0x150),'typst.loading.hint':'加载编译器并生成页面预览...','typst.error.title':z(0x109),'typst.error.timeout':'Typst\x20WASM\x20/\x20字体加载或编译超过\x20{seconds}\x20秒','typst.error.timeoutHint':'请检查\x20Typst\x20compiler\x20WASM、renderer\x20WASM、字体目录的下载速度和缓存策略;弱网或跨境部署可通过\x20options.typst.renderTimeoutMs\x20调大浏览器端加载/编译超时。','typst.error.assetHint':z(0xf7),'typst.error.svgParseFailed':'Typst\x20SVG\x20解析失败','typst.error.wasmLoadFailed':'Typst\x20WASM\x20加载失败','xmind.toolbar.zoomOut':'缩小','xmind.toolbar.zoomIn':'放大','xmind.toolbar.fit':'适合','xmind.toolbar.fitTitle':'适配画布','xmind.state.loading':z(0x114),'xmind.stats.nodes':'节点','xmind.stats.depth':'层级','xmind.stats.theme':'主题','xmind.stats.template':'模板','xmind.badge.paused':'暂停','xmind.badge.collapsed':'折叠','xmind.badge.floating':'浮动','xmind.badge.summary':'概要','xmind.badge.callout':'标注','xmind.imageResource':'图片资源:\x20{name}','xmind.error.unrecognized':'无法识别\x20XMind\x20文件:\x20ZIP\x20中未找到\x20content.json\x20或\x20content.xml','xmind.error.noCanvas':'XMind\x20文件中没有可预览的画布','cad.toolbar.fit':'适配','cad.toolbar.zoomOut':'缩小','cad.toolbar.zoomIn':'放大','cad.layers.title':'图层','cad.layers.count':z(0x140),'cad.inspector.title':'结构','cad.inspector.entities':'实体','cad.inspector.blocks':'块','cad.inspector.pages':'页面','cad.inspector.drawn':'绘制','cad.state.loadingViewer':z(0x13d),'cad.state.parsing':'正在解析\x20CAD...','cad.error.parseFailed':'CAD\x20文件解析失败','image.alt':'图片','image.lightbox.alt':'图片预览','image.lightbox.close':z(0x14b),'gitBundle.error.invalid':z(0x117),'gitBundle.error.missingPack':'Git\x20bundle\x20header\x20后未找到\x20PACK\x20数据。','gitBundle.notice.delta':'当前\x20bundle\x20包含\x20delta\x20压缩对象。预览器已在浏览器端解析常规\x20OFS_DELTA\x20/\x20REF_DELTA;若仍有缺失文件,通常是包体过大、对象过多或依赖外部\x20prerequisite。','gitBundle.title.history':z(0x134),'gitBundle.title.fileTree':'文件树','gitBundle.file.choose':'选择文件查看内容','gitBundle.file.noTree':'当前\x20bundle\x20的\x20tree/blob\x20可能被\x20delta\x20压缩,暂未解析到可展开文件。','gitBundle.file.none':'未解析到文件','gitBundle.history.empty':'当前\x20bundle\x20未解析到\x20commit\x20对象,仅展示\x20refs\x20和\x20pack\x20摘要。','gitBundle.toolbar.summary':'{commits}\x20commits\x20·\x20{files}\x20files','gitBundle.meta.bundle':'Bundle','gitBundle.meta.refs':z(0xd6),'gitBundle.meta.commits':'Commits','gitBundle.meta.objects':'Objects','gitBundle.meta.deltas':z(0x118),'gitBundle.meta.objectFormat':'Object\x20format','gitBundle.meta.objectTypes':z(0xe6),'geo.error.unrecognized':'无法识别的\x20GeoJSON\x20数据','geo.error.xmlParseFailed':'XML\x20解析失败','geo.error.unsupported':z(0xfe),'geo.title':'地理数据预览','geo.featureCount':'要素数','geo.bounds':'范围','geo.geometryTypes':'几何类型','geo.aria':'地理数据\x20SVG\x20预览','geo.loading':'正在解析地理数据...','geo.projection':'坐标系','geo.engine':z(0x13a),'geo.basemap':'底图','geo.basemap.offline':'离线空底图','geo.basemap.custom':z(0x126),'geo.engine.maplibre':z(0xde),'geo.engine.svg':z(0x149),'geo.error.projection':'地理坐标转换失败:{reason}','geo.action.fit':'适配范围','model.toolbar.fit':'适配','model.toolbar.rotate':'旋转','model.toolbar.wireframe':'线框','model.toolbar.grid':'网格','model.toolbar.axes':'坐标','model.state.loadingSummary':'正在加载模型','model.state.loading':'正在解析\x203D\x20模型...','model.state.loaded':'模型已加载','model.state.parseFailed':'模型解析失败','model.summary.meshes':'{count}\x20个网格','model.summary.points':'{count}\x20个点云','model.error.daeEmpty':'DAE\x20模型未解析出有效场景','model.error.unsupported':'暂不支持\x20.{type}\x20模型格式','model.error.parseFailed':'{type}\x20模型解析失败','model.notice.signature':z(0xe1),'loading.generic.label':'文件内容','loading.generic.hint':'正在整理内容结构并生成预览。','loading.word.label':'Word\x20文档','loading.word.hint':'正在准备分页、文本样式和文档结构。','loading.wordWorker.hint':'正在通过\x20Worker\x20准备文档结构、文本样式和分页结果。','loading.sheet.label':'Excel\x20表格','loading.sheet.hint':z(0xe7),'loading.csv.label':'表格数据','loading.csv.hint':'正在准备行列数据和基础样式。','loading.presentation.label':'PPT\x20演示文稿','loading.presentation.hint':'正在构建幻灯片布局和媒体内容。','loading.pdf.label':'PDF\x20文档','loading.pdf.hint':'正在载入页面位图、文本层和缩放视图。','loading.ofd.label':'OFD\x20版式文件','loading.ofd.hint':z(0xbb),'loading.archive.label':'压缩包','loading.archive.hint':'正在启动\x20Worker\x20并读取压缩包目录。','loading.email.label':z(0xf1),'loading.email.hint':'正在解析邮件头、正文和附件。','loading.msg.hint':'正在解析\x20Outlook\x20邮件和附件。','loading.eda.label':'EDA\x20文件','loading.eda.hint':'正在读取\x20EDA\x20容器结构和可读属性。','loading.cad.label':'CAD\x20图纸','loading.cad.hint':'正在准备\x20CAD\x20图层、几何对象和画布视图。','loading.dwg.hint':z(0xcb),'loading.dwf.hint':'正在加载\x20DWF\x20native\x20renderer\x20与\x20W2D/W3D\x20图形。','loading.dwfx.hint':'正在加载\x20DWFx/XPS\x20native\x20renderer\x20与页面图形。','loading.xps.hint':'正在加载\x20XPS\x20native\x20renderer\x20与嵌入字体。','loading.drawio.label':z(0x10d),'loading.drawio.hint':'正在解析图元、连线和\x20SVG\x20预览。','loading.excalidraw.label':'Excalidraw\x20图纸','loading.excalidraw.hint':'正在解析手绘图元并生成安全\x20SVG。','loading.epub.label':'EPUB\x20电子书','loading.epub.hint':z(0xcd),'loading.umd.label':'UMD\x20电子书','loading.umd.hint':'正在解析移动电子书结构、目录和压缩正文。','loading.image.label':'图片文件','loading.image.hint':'正在解码像素数据并生成预览。','loading.video.label':z(0xed),'loading.video.hint':'正在准备媒体资源和播放组件。','loading.audio.label':'音频文件','loading.audio.hint':'正在准备音频资源和播放控件。'},'en-US':{'toolbar.zoomGroup':z(0x138),'toolbar.zoomOut':z(0x137),'toolbar.zoomIn':'Zoom\x20in','toolbar.zoomReset':'Reset\x20zoom','toolbar.download':'Download','toolbar.downloadTitle':z(0x120),'toolbar.print':'Print','toolbar.printTitle':'Print\x20the\x20complete\x20rendered\x20document','toolbar.printDirect':'Print\x20now','toolbar.printMask':'Mask\x20&\x20print','toolbar.printMaskTitle':'Cover\x20sensitive\x20areas\x20before\x20printing','toolbar.printMaskAdd':'Add\x20mask','toolbar.printMaskClear':z(0xc6),'toolbar.printMaskCancel':'Cancel','toolbar.printMaskConfirm':'Print','toolbar.printMaskHint':'Drag\x20to\x20draw\x20black\x20cover\x20blocks.\x20Delete\x20and\x20adjust\x20as\x20needed.','toolbar.exportHtml':'HTML','toolbar.exportHtmlTitle':'Export\x20the\x20rendered\x20HTML','toolbar.search':'Search','toolbar.searchPlaceholder':'Search\x20document','toolbar.searchPrevious':'Previous\x20match','toolbar.searchNext':z(0xe5),'toolbar.searchClear':'Clear\x20search','toolbar.theme':z(0xec),'toolbar.themeToLight':'Switch\x20to\x20light\x20mode','toolbar.themeToDark':'Switch\x20to\x20dark\x20mode','state.ready.title':'Preview\x20ready','state.ready.message':'The\x20file\x20has\x20been\x20rendered.','state.empty.title':'No\x20file\x20selected','state.empty.message':'Choose\x20a\x20file\x20or\x20provide\x20an\x20accessible\x20URL\x20to\x20start\x20previewing.','state.unsupported.install.title':'Preview\x20capability\x20required','state.unsupported.install.message':'{extension}\x20is\x20in\x20the\x20supported\x20matrix,\x20but\x20{rendererLabel}\x20renderer\x20is\x20not\x20assembled\x20in\x20this\x20project.','state.unsupported.install.description':'Install\x20{presetPackage}\x20and\x20pass\x20the\x20capability\x20through\x20options.preset\x20/\x20options.renderers{rendererTip}.\x20Vite\x20projects\x20can\x20also\x20use\x20@file-viewer/vite-plugin\x20to\x20auto-discover\x20installed\x20presets.','state.unsupported.title':'Online\x20preview\x20is\x20not\x20supported\x20yet','state.unsupported.message':'{extension}\x20cannot\x20be\x20previewed\x20online.\x20Download\x20it\x20or\x20convert\x20it\x20to\x20a\x20supported\x20format.','state.unsupported.description':'Supports\x20online\x20preview\x20for\x20Office,\x20PDF,\x20OFD,\x20Typst,\x20archives,\x20email,\x20OLB/DRA,\x20CAD,\x20geospatial\x20data,\x203D\x20models,\x20Excalidraw,\x20draw.io,\x20EPUB,\x20UMD,\x20Markdown,\x20code/text,\x20images,\x20audio/video,\x20fonts,\x20and\x20structured\x20data\x20assets.','state.error.title':'Preview\x20failed','preview.downloading':'Downloading\x20file\x20resources...','preview.streamingPdf':'Preparing\x20streaming\x20PDF\x20preview...','preview.reading':z(0xd4),'error.download':z(0x13f),'error.print':'Print\x20failed','error.exportHtml':'HTML\x20export\x20failed','error.noDownloadSource':'There\x20is\x20no\x20original\x20file\x20source\x20to\x20download.','error.noExportContent':'There\x20is\x20no\x20rendered\x20preview\x20content\x20to\x20export.','error.printUnavailable':'This\x20file\x20type\x20does\x20not\x20support\x20full-document\x20printing.\x20Download\x20the\x20original\x20file\x20and\x20print\x20it\x20locally.','error.printWindowBlocked':'The\x20browser\x20blocked\x20the\x20print\x20window.','error.remoteDownload':'File\x20download\x20failed','error.localRead':'Failed\x20to\x20read\x20local\x20file','error.load':z(0x123),'error.stream':'Failed\x20to\x20load\x20streaming\x20PDF\x20preview','error.beforeOperation':'Before-operation\x20check\x20failed','error.unknown':'Unknown\x20error','error.blobUnavailable':z(0xf3),'error.sourceUnsupported':'Unsupported\x20file\x20source\x20input.','error.fileReadArrayBuffer':'Failed\x20to\x20read\x20the\x20file\x20as\x20an\x20ArrayBuffer.','error.fileReadDataUrl':'Failed\x20to\x20read\x20the\x20file\x20as\x20a\x20data\x20URL.','error.fileReadText':'Failed\x20to\x20read\x20the\x20file\x20as\x20text.','error.imageDataUrlRead':'Unable\x20to\x20read\x20image\x20data\x20URL.','operation.download':'Download\x20original\x20file','operation.print':'Print\x20complete\x20rendered\x20content','operation.exportHtml':z(0x108),'operation.zoomIn':z(0x121),'operation.zoomOut':'Zoom\x20out','operation.zoomReset':'Reset\x20preview\x20zoom','pdf.toolbar.toggleNavigation':'Toggle\x20navigation\x20pane','pdf.toolbar.previousPage':'Previous\x20page','pdf.toolbar.nextPage':'Next\x20page','pdf.toolbar.fitWidth':z(0xd5),'pdf.toolbar.zoomOut':'Zoom\x20out','pdf.toolbar.zoomIn':'Zoom\x20in','pdf.toolbar.rotateLeft':'Rotate\x20left','pdf.toolbar.rotateRight':'Rotate\x20right','pdf.nav.typeLabel':z(0x12b),'pdf.nav.pagesTab':'Pages','pdf.nav.outlineTab':'Outline','pdf.nav.pagesTitle':'Page\x20navigation','pdf.nav.outlineTitle':z(0xf8),'pdf.nav.pageCount':'{count}\x20pages','pdf.nav.itemCount':'{count}\x20items','pdf.nav.pageLabel':z(0x12e),'pdf.nav.outlineEmpty':'This\x20PDF\x20has\x20no\x20available\x20outline.','pdf.nav.outlineFallbackTitle':'Outline\x20{index}','pdf.thumbnail.alt':z(0xdf),'pdf.state.loading':z(0xea),'pdf.error.browserWindow':'PDF\x20preview\x20requires\x20a\x20browser\x20window','pdf.error.missingSource':'PDF\x20has\x20no\x20readable\x20data\x20source','pdf.error.loadFailed':'Failed\x20to\x20load\x20PDF','pdf.error.notLoaded':'The\x20PDF\x20is\x20not\x20loaded\x20yet.\x20Please\x20try\x20again\x20later.','pdf.error.unloaded':'The\x20PDF\x20has\x20been\x20unloaded\x20and\x20cannot\x20continue\x20printing.','pdf.error.canvasUnavailable':z(0xfc),'pdf.export.pageTitle':'{title}\x20-\x20Page\x20{page}','spreadsheet.loading.kicker':'Excel\x20workbook','spreadsheet.loading.title':'Parsing\x20Excel\x20workbook','spreadsheet.loading.hint':'Preparing\x20worksheets,\x20styles,\x20and\x20virtualized\x20viewport\x20data.','spreadsheet.loading.streaming':'Loading\x20visible\x20worksheet\x20data','spreadsheet.tabs.ariaLabel':'Worksheet\x20list','spreadsheet.state.parsingWorkbook':'Parsing\x20the\x20Excel\x20workbook.\x20Please\x20wait...','spreadsheet.state.preparingSheet':'Preparing\x20worksheet\x20content...','spreadsheet.state.preparingSheetNamed':'Preparing\x20“{name}”...','spreadsheet.state.cachedRows':z(0x116),'spreadsheet.state.rows':'{rows}\x20rows,\x20loading\x20smoothly\x20by\x20viewport','spreadsheet.state.rowsAndColumns':'{rows}\x20rows,\x20{cols}\x20columns,\x20loading\x20smoothly\x20by\x20viewport','spreadsheet.error.parseFailed':z(0xd2),'spreadsheet.error.workerFailed':z(0xdb),'word.error.invalidDocx':'The\x20file\x20is\x20not\x20a\x20valid\x20DOCX/OOXML\x20package.\x20It\x20may\x20be\x20incomplete\x20or\x20replaced\x20by\x20an\x20error\x20response\x20from\x20the\x20server.\x20Upload\x20it\x20again\x20or\x20check\x20the\x20file\x20source.','word.error.missingOdfContent':'The\x20ODF\x20file\x20is\x20missing\x20content.xml.','word.error.odfXmlParseFailed':'Failed\x20to\x20parse\x20ODF\x20XML.','word.title.rtf':z(0x14c),'word.title.openDocumentPresentation':'OpenDocument\x20presentation\x20preview','word.title.openDocumentText':z(0xe0),'word.page.fallback':'Page\x20{page}','word.page.empty':'No\x20extractable\x20text\x20on\x20this\x20page','word.body':'Body','word.body.empty':'No\x20readable\x20text\x20was\x20extracted','ofd.state.loading':z(0x152),'ofd.error.empty':'The\x20OFD\x20file\x20has\x20no\x20renderable\x20document.','ofd.error.parseFailed':'Failed\x20to\x20parse\x20OFD\x20file','presentation.state.loading':'Parsing\x20PPTX...','presentation.error.title':z(0xc0),'presentation.error.parseFailed':'Failed\x20to\x20parse\x20PPTX','presentation.ppt.state.loading':'Parsing\x20PowerPoint\x2097–2003...','presentation.ppt.error.title':'PPT\x20preview\x20failed','presentation.ppt.error.parseFailed':'This\x20PPT\x20file\x20could\x20not\x20be\x20parsed.','presentation.ppt.error.assetHint':'Check\x20the\x20@file-viewer/ppt\x20module,\x20pptWasmUrl,\x20application/wasm\x20MIME\x20type,\x20Web\x20Crypto,\x20and\x20CSP\x20settings.','archive.error.nestedUnsupported':z(0x11f),'archive.loading.readingDirectory':'Reading\x20archive\x20directory...','archive.loading.readingDirectoryHint':'Large\x20files\x20are\x20parsed\x20in\x20a\x20Worker\x20to\x20keep\x20the\x20main\x20thread\x20responsive.','archive.search.placeholder':'Filter\x20files\x20inside\x20the\x20archive','archive.sidebar.hide':'Hide\x20archive\x20file\x20list','archive.sidebar.show':'Show\x20archive\x20file\x20list','archive.preview.title':'Archive\x20entry\x20preview','archive.preview.chooseFile':z(0xc1),'archive.preview.downloadFile':'Download\x20file','archive.error.title':z(0xf9),'archive.stats.summary':'{count}\x20files\x20·\x20{size}\x20·\x20{previewable}\x20directly\x20previewable','archive.warning.encrypted':'Encrypted\x20content\x20was\x20detected.\x20Enter\x20the\x20correct\x20password\x20to\x20preview\x20it;\x20the\x20password\x20is\x20passed\x20only\x20to\x20the\x20libarchive\x20Worker\x20for\x20this\x20session.','archive.password.title':z(0xc8),'archive.password.description':'This\x20archive\x20contains\x20encrypted\x20content.\x20A\x20password\x20is\x20required\x20to\x20read\x20the\x20directory\x20or\x20preview\x20entries.','archive.password.placeholder':'Archive\x20password','archive.password.invalid':'The\x20password\x20is\x20incorrect\x20or\x20the\x20entry\x20could\x20not\x20be\x20decrypted.\x20Try\x20again.','archive.password.required':'Enter\x20a\x20password\x20to\x20continue.','archive.password.cancel':'Cancel','archive.password.confirm':'Unlock\x20preview','archive.error.passwordRequired':z(0x11d),'archive.error.encryptedRequiresWorker':'This\x20archive\x20contains\x20encrypted\x20content\x20and\x20requires\x20the\x20libarchive\x20Worker/WASM\x20assets\x20for\x20online\x20decryption.','archive.empty.title':'Choose\x20a\x20file\x20from\x20the\x20left\x20to\x20preview','archive.empty.message':'The\x20archive\x20directory\x20is\x20read\x20first.\x20File\x20contents\x20are\x20extracted\x20on\x20demand\x20and\x20cached\x20in\x20IndexedDB\x20when\x20size\x20allows.','archive.loading.initializingCandidate':'Initializing\x20{label}...','archive.loading.initializingCandidateHint':'If\x20the\x20server\x20does\x20not\x20publish\x20Worker/WASM\x20assets\x20correctly,\x20the\x20viewer\x20falls\x20back\x20automatically.','archive.error.candidateInitTimeout':'{label}\x20initialization\x20timed\x20out','archive.error.encryptedCheckTimeout':'{label}\x20encryption\x20check\x20timed\x20out','archive.loading.directoryReadyHint':z(0x101),'archive.error.candidateReadTimeout':'{label}\x20directory\x20read\x20timed\x20out','archive.loading.workerFallback':'Worker\x20unavailable.\x20Switching\x20to\x20ZIP/TAR\x20compatibility\x20mode...','archive.loading.workerFallbackHint':'Compatibility\x20mode\x20needs\x20no\x20static\x20Worker\x20and\x20works\x20well\x20in\x20mobile\x20WebViews\x20or\x20temporary\x20local\x20servers.','archive.notice.workerFallback':'The\x20libarchive\x20Worker\x20could\x20not\x20start\x20in\x20this\x20environment,\x20so\x20ZIP/TAR/GZIP\x20compatibility\x20mode\x20is\x20active.\x20RAR,\x207z,\x20and\x20similar\x20formats\x20should\x20still\x20publish\x20vendor/libarchive/worker-bundle.js\x20and\x20libarchive.wasm.','archive.error.tooLarge':'Archive\x20size\x20{size}\x20exceeds\x20the\x20safety\x20limit\x20{limit}.\x20Download\x20and\x20extract\x20it\x20locally.','archive.loading.initializingWorker':z(0xe2),'archive.loading.initializingWorkerHint':'Large\x20files\x20are\x20parsed\x20in\x20a\x20Worker\x20to\x20keep\x20the\x20main\x20thread\x20responsive.','archive.error.workerInitFailed':'Archive\x20Worker\x20initialization\x20failed','archive.error.workerUnsupported':'This\x20browser\x20does\x20not\x20support\x20Web\x20Workers.','archive.error.indexedDbUnavailable':'IndexedDB\x20is\x20unavailable','archive.error.entryTooLarge':'Entry\x20{name}\x20is\x20{size},\x20exceeding\x20the\x20preview\x20limit\x20{limit}.','archive.loading.extracting':'Extracting\x20{name}\x20on\x20demand...','archive.loading.rendering':'Rendering\x20{name}...','archive.loading.exporting':z(0x110),'media.audio.title':'Audio\x20preview','media.audio.description':z(0xcf),'media.audio.unsupported':'This\x20browser\x20does\x20not\x20support\x20audio\x20playback.','media.video.title':z(0xda),'media.video.unsupported':'This\x20browser\x20does\x20not\x20support\x20this\x20video\x20format.','media.video.hlsHint':'HLS\x20prefers\x20the\x20original\x20URL\x20for\x20segment\x20loading.\x20If\x20the\x20input\x20is\x20a\x20local\x20single-file\x20playlist,\x20make\x20sure\x20segment\x20URLs\x20are\x20reachable\x20by\x20the\x20browser.','media.midi.title':'MIDI\x20file','media.midi.loading':'Parsing\x20MIDI\x20tracks...','media.midi.trackHeader':'Track','media.midi.instrumentHeader':z(0x131),'media.midi.channelHeader':z(0xf4),'media.midi.noteCountHeader':'Notes','media.midi.durationHeader':'Duration','media.midi.durationStat':'Duration','media.midi.trackStat':'Tracks','media.midi.noteStat':'Notes','media.midi.parseFailed':'Failed\x20to\x20parse\x20MIDI','email.mbox.subject':z(0x119),'email.mbox.summary':'Detected\x20{count}\x20messages\x20in\x20the\x20MBOX\x20archive.\x20Showing\x20message\x201.','email.error.title':'Email\x20preview\x20notice','email.meta.from':'From','email.meta.to':'To','email.meta.cc':'Cc','email.meta.date':'Date','email.tabs.text':'Body','email.tabs.headers':'Headers','email.attachments.title':'Attachments','email.attachments.empty':'No\x20attachments','email.attachments.download':'Download\x20attachment','email.attachments.opening':'Opening\x20attachment\x20{name}...','email.attachments.nestedUnavailable':'Nested\x20attachment\x20preview\x20is\x20not\x20available\x20in\x20this\x20environment.\x20Download\x20{name}\x20to\x20inspect\x20it.','email.loading.parsing':'Parsing\x20email...','data.font.sample':'Flyfish\x20Viewer\x20preview\x20AaBbCc\x201234567890','data.error.fontFaceUnsupported':'This\x20browser\x20does\x20not\x20support\x20the\x20FontFace\x20API','data.title.font':'Font\x20file\x20preview','data.title.sqlite':'SQLite\x20database\x20preview','data.title.parquet':'Parquet\x20columnar\x20data\x20preview','data.title.avro':'Avro\x20object\x20container\x20preview','data.title.wasm':'WebAssembly\x20module\x20preview','data.title.eps':'EPS\x20vector\x20file\x20summary','data.title.ai':'Illustrator\x20file\x20summary','data.title.webarchive':'WebArchive\x20summary\x20preview','data.title.summary':'Data\x20asset\x20summary','data.label.format':'Format','data.label.size':'Size','data.label.rendering':'Renderer','data.label.objects':z(0xc5),'data.label.sampleTable':'Sample\x20table','data.label.rows':'Rows','data.label.columns':'Columns','data.label.sampleRows':'Sample\x20rows','data.label.imports':'Imports','data.label.exports':z(0x122),'data.label.magic':z(0x14e),'data.label.note':'Note','data.label.container':'Container','data.value.schemaRead':'Read','data.value.schemaUnread':'Not\x20read','data.note.aiSummary':z(0x11e),'data.note.postscriptSummary':'PostScript\x20summary\x20preview','data.note.webarchive':'Readable\x20fragments\x20are\x20extracted\x20safely.\x20Web\x20scripts\x20are\x20not\x20executed.','data.image.alt':'Asset\x20preview','psd.title':'PSD\x20layer\x20preview','psd.action.fit':'Fit','psd.action.showAll':z(0xc3),'psd.action.hideAll':'Hide\x20all','psd.layers.title':'Layers','psd.layers.redrawable':'{count}\x20redrawable','psd.layers.empty':z(0xd8),'psd.layers.hidden':'hidden','drawing.error.viewerLoadFailed':'Failed\x20to\x20load\x20the\x20diagrams.net\x20viewer','drawing.error.excalidrawEmpty':'This\x20Excalidraw\x20file\x20has\x20no\x20previewable\x20elements','drawing.error.excalidrawTimeout':'Excalidraw\x20SVG\x20export\x20timed\x20out.\x20Falling\x20back\x20to\x20the\x20rough.js\x20renderer.','drawing.error.drawioParseFailed':z(0x10b),'drawing.error.drawioNoModel':'This\x20Draw.io\x20file\x20has\x20no\x20directly\x20renderable\x20mxGraphModel.','drawing.error.drawioNoElements':'This\x20Draw.io\x20file\x20has\x20no\x20previewable\x20elements.','drawing.error.viewerInitFailed':'The\x20diagrams.net\x20viewer\x20was\x20not\x20initialized\x20correctly','drawing.error.drawioTimeout':'Official\x20diagrams.net\x20Viewer\x20timed\x20out.\x20Falling\x20back\x20to\x20the\x20local\x20SVG\x20preview.','drawing.error.svgParseFailed':'Failed\x20to\x20parse\x20SVG','drawing.error.plantumlRenderFailed':z(0x13e),'drawing.title.excalidraw':'Excalidraw\x20SVG\x20preview','drawing.title.mermaid':'Mermaid\x20SVG\x20preview','drawing.title.plantuml':z(0x105),'drawing.title.drawio':'Draw.io\x20offline\x20SVG\x20preview','drawing.toolbar.zoomOut':'Zoom\x20out','drawing.toolbar.zoomIn':'Zoom\x20in','drawing.toolbar.fit':z(0x13c),'drawing.toolbar.fitWidth':'Fit\x20width','drawing.state.loading':'Loading\x20drawing\x20preview...','text.code.loadingHighlight':'Loading\x20syntax\x20highlighting...','text.code.indexingLargeFile':z(0x130),'text.code.virtualized':'Large\x20file\x20·\x20virtual\x20scrolling\x20·\x20highlighting\x20off','text.code.firstSegment':'First\x20segment','text.code.previousSegment':'Previous\x20segment','text.code.nextSegment':'Next\x20segment','text.code.lastSegment':z(0xfd),'ebook.toc':'Table\x20of\x20contents','ebook.reading':'Reading','ebook.itemCount':'{count}\x20items','epub.title':'EPUB\x20ebook','epub.previousPage':z(0x12f),'epub.nextPage':'Next','epub.loading':'Parsing\x20EPUB...','epub.chapterFallback':'Chapter\x20{index}','epub.renderIncomplete':'EPUB\x20content\x20did\x20not\x20finish\x20rendering.\x20Refresh\x20and\x20try\x20again.','umd.title':'UMD\x20ebook','umd.previousChapter':'Previous\x20chapter','umd.nextChapter':'Next\x20chapter','umd.loading':'Parsing\x20UMD...','umd.emptyContent':'No\x20readable\x20body\x20content\x20was\x20parsed.','umd.chapterFallback':'Chapter\x20{index}','umd.galleryFallback':'Gallery\x20{index}','umd.warningBodyTooShort':'The\x20UMD\x20body\x20is\x20shorter\x20than\x20declared\x20and\x20may\x20be\x20incomplete.','umd.error.unexpectedEnd':z(0xf2),'umd.error.invalidFile':'This\x20is\x20not\x20a\x20valid\x20UMD\x20ebook\x20file.','typst.summaryRenderer':z(0xbd),'typst.pageSummary.empty':'0\x20pages','typst.pageSummary.ready':'{count}\x20pages\x20/\x20{width}\x20x\x20{height}\x20pt','typst.status.compiling':'Compiling','typst.status.failed':'Compilation\x20failed','typst.status.rendered':'Rendered','typst.loading.title':'Parsing\x20Typst','typst.loading.hint':'Loading\x20the\x20compiler\x20and\x20generating\x20page\x20previews...','typst.error.title':'Typst\x20render\x20failed','typst.error.timeout':'Typst\x20WASM\x20/\x20font\x20loading\x20or\x20compilation\x20exceeded\x20{seconds}\x20seconds','typst.error.timeoutHint':'Check\x20the\x20download\x20speed\x20and\x20cache\x20strategy\x20for\x20the\x20Typst\x20compiler\x20WASM,\x20renderer\x20WASM,\x20and\x20font\x20directory.\x20On\x20weak\x20networks\x20or\x20cross-region\x20deployments,\x20increase\x20options.typst.renderTimeoutMs.','typst.error.assetHint':'Typst\x20requires\x20local\x20compiler\x20/\x20renderer\x20WASM\x20files\x20and\x20a\x20font\x20directory.\x20Run\x20file-viewer-copy-assets,\x20or\x20configure\x20options.typst.compilerWasmUrl\x20/\x20options.typst.rendererWasmUrl\x20/\x20options.typst.fontAssetsUrl,\x20and\x20make\x20sure\x20the\x20server\x20returns\x20WASM\x20with\x20application/wasm.','typst.error.svgParseFailed':'Failed\x20to\x20parse\x20Typst\x20SVG','typst.error.wasmLoadFailed':'Failed\x20to\x20load\x20Typst\x20WASM','xmind.toolbar.zoomOut':'Zoom\x20out','xmind.toolbar.zoomIn':'Zoom\x20in','xmind.toolbar.fit':'Fit','xmind.toolbar.fitTitle':'Fit\x20canvas','xmind.state.loading':'Parsing\x20XMind\x20mind\x20map...','xmind.stats.nodes':'Nodes','xmind.stats.depth':'Depth','xmind.stats.theme':'Theme','xmind.stats.template':'Template','xmind.badge.paused':z(0x107),'xmind.badge.collapsed':z(0xdd),'xmind.badge.floating':'Floating','xmind.badge.summary':'Summary','xmind.badge.callout':'Callout','xmind.imageResource':'Image\x20resource:\x20{name}','xmind.error.unrecognized':'Unrecognized\x20XMind\x20file:\x20content.json\x20or\x20content.xml\x20was\x20not\x20found\x20in\x20the\x20ZIP\x20package.','xmind.error.noCanvas':'This\x20XMind\x20file\x20has\x20no\x20previewable\x20canvas.','cad.toolbar.fit':'Fit','cad.toolbar.zoomOut':z(0x137),'cad.toolbar.zoomIn':'Zoom\x20in','cad.layers.title':'Layers','cad.layers.count':'{count}\x20items','cad.inspector.title':'Structure','cad.inspector.entities':'Entities','cad.inspector.blocks':'Blocks','cad.inspector.pages':'Pages','cad.inspector.drawn':'Drawn','cad.state.loadingViewer':z(0x139),'cad.state.parsing':z(0x10f),'cad.error.parseFailed':'Failed\x20to\x20parse\x20CAD\x20file','image.alt':'Image','image.lightbox.alt':'Image\x20preview','image.lightbox.close':z(0x147),'gitBundle.error.invalid':'This\x20file\x20is\x20not\x20a\x20valid\x20Git\x20bundle.','gitBundle.error.missingPack':'No\x20PACK\x20data\x20was\x20found\x20after\x20the\x20Git\x20bundle\x20header.','gitBundle.notice.delta':'This\x20bundle\x20contains\x20delta-compressed\x20objects.\x20The\x20viewer\x20resolves\x20common\x20OFS_DELTA\x20/\x20REF_DELTA\x20objects\x20in\x20the\x20browser.\x20Missing\x20files\x20usually\x20indicate\x20a\x20very\x20large\x20bundle,\x20too\x20many\x20objects,\x20or\x20an\x20external\x20prerequisite.','gitBundle.title.history':'History','gitBundle.title.fileTree':'File\x20tree','gitBundle.file.choose':'Select\x20a\x20file\x20to\x20inspect','gitBundle.file.noTree':'The\x20tree/blob\x20objects\x20in\x20this\x20bundle\x20may\x20be\x20delta-compressed,\x20and\x20no\x20expandable\x20files\x20were\x20parsed.','gitBundle.file.none':'No\x20files\x20parsed','gitBundle.history.empty':'No\x20commit\x20objects\x20were\x20parsed.\x20Showing\x20refs\x20and\x20pack\x20summary\x20only.','gitBundle.toolbar.summary':'{commits}\x20commits\x20·\x20{files}\x20files','gitBundle.meta.bundle':'Bundle','gitBundle.meta.refs':'Refs','gitBundle.meta.commits':'Commits','gitBundle.meta.objects':'Objects','gitBundle.meta.deltas':z(0x118),'gitBundle.meta.objectFormat':'Object\x20format','gitBundle.meta.objectTypes':'Object\x20types','geo.error.unrecognized':'Unrecognized\x20GeoJSON\x20data','geo.error.xmlParseFailed':'Failed\x20to\x20parse\x20XML','geo.error.unsupported':z(0x10a),'geo.title':'Geospatial\x20preview','geo.featureCount':'Features','geo.bounds':'Bounds','geo.geometryTypes':'Geometry\x20types','geo.aria':'Geospatial\x20SVG\x20preview','geo.loading':'Parsing\x20geospatial\x20data...','geo.projection':'Projection','geo.engine':'Renderer','geo.basemap':'Basemap','geo.basemap.offline':'Offline\x20empty\x20basemap','geo.basemap.custom':'Custom\x20tiles','geo.engine.maplibre':'MapLibre\x20vector\x20map','geo.engine.svg':'SVG\x20fallback','geo.error.projection':'Geospatial\x20projection\x20failed:\x20{reason}','geo.action.fit':'Fit\x20bounds','model.toolbar.fit':'Fit','model.toolbar.rotate':'Rotate','model.toolbar.wireframe':'Wireframe','model.toolbar.grid':'Grid','model.toolbar.axes':'Axes','model.state.loadingSummary':'Loading\x20model','model.state.loading':'Parsing\x203D\x20model...','model.state.loaded':'Model\x20loaded','model.state.parseFailed':'Failed\x20to\x20parse\x20model','model.summary.meshes':'{count}\x20meshes','model.summary.points':'{count}\x20point\x20clouds','model.error.daeEmpty':'The\x20DAE\x20model\x20did\x20not\x20contain\x20a\x20valid\x20scene.','model.error.unsupported':'.{type}\x20model\x20format\x20is\x20not\x20supported\x20yet','model.error.parseFailed':'Failed\x20to\x20parse\x20{type}\x20model','model.notice.signature':z(0xc2),'loading.generic.label':z(0xee),'loading.generic.hint':'Preparing\x20content\x20structure\x20and\x20preview.','loading.word.label':z(0xef),'loading.word.hint':'Preparing\x20document\x20structure,\x20text\x20styles,\x20and\x20layout.','loading.wordWorker.hint':'Preparing\x20document\x20structure,\x20text\x20styles,\x20and\x20layout\x20in\x20a\x20Worker.','loading.sheet.label':z(0x135),'loading.sheet.hint':'Preparing\x20worksheets,\x20styles,\x20and\x20viewport\x20data.','loading.csv.label':'Tabular\x20data','loading.csv.hint':'Preparing\x20rows,\x20columns,\x20and\x20basic\x20styling.','loading.presentation.label':'PowerPoint\x20deck','loading.presentation.hint':'Building\x20slide\x20layout\x20and\x20media\x20content.','loading.pdf.label':'PDF\x20document','loading.pdf.hint':'Loading\x20page\x20bitmaps,\x20text\x20layers,\x20and\x20zoom\x20view.','loading.ofd.label':'OFD\x20layout\x20document','loading.ofd.hint':'Parsing\x20OFD\x20pages\x20and\x20layout\x20objects.','loading.archive.label':'Archive','loading.archive.hint':z(0xd3),'loading.email.label':'Email\x20file','loading.email.hint':'Parsing\x20message\x20headers,\x20body,\x20and\x20attachments.','loading.msg.hint':'Parsing\x20Outlook\x20message\x20and\x20attachments.','loading.eda.label':'EDA\x20file','loading.eda.hint':'Reading\x20EDA\x20container\x20structure\x20and\x20properties.','loading.cad.label':z(0x102),'loading.cad.hint':'Preparing\x20CAD\x20layers,\x20geometry,\x20and\x20canvas\x20view.','loading.dwg.hint':'Loading\x20DWG\x20geometry\x20and\x20LibreDWG\x20WASM\x20in\x20a\x20Worker.','loading.dwf.hint':'Loading\x20native\x20DWF\x20renderer\x20and\x20W2D/W3D\x20graphics.','loading.dwfx.hint':'Loading\x20native\x20DWFx/XPS\x20renderer\x20and\x20page\x20graphics.','loading.xps.hint':'Loading\x20native\x20XPS\x20renderer\x20and\x20embedded\x20fonts.','loading.drawio.label':z(0x142),'loading.drawio.hint':'Parsing\x20shapes,\x20connectors,\x20and\x20SVG\x20preview.','loading.excalidraw.label':'Excalidraw\x20scene','loading.excalidraw.hint':z(0x144),'loading.epub.label':'EPUB\x20ebook','loading.epub.hint':'Parsing\x20table\x20of\x20contents,\x20chapter\x20resources,\x20and\x20reading\x20pages.','loading.umd.label':'UMD\x20ebook','loading.umd.hint':'Parsing\x20mobile\x20ebook\x20metadata,\x20table\x20of\x20contents,\x20and\x20compressed\x20chapters.','loading.image.label':'Image\x20file','loading.image.hint':z(0x124),'loading.video.label':'Video\x20file','loading.video.hint':z(0x148),'loading.audio.label':'Audio\x20file','loading.audio.hint':'Preparing\x20audio\x20resource\x20and\x20playback\x20controls.'}}),s=()=>{var h;let j=typeof window<'u'?window['navigator']:void 0x0;if(j)return((h=j['languages'])==null?void 0x0:h[0x0])||j['language'];},c=h=>{var A=z;let j=!h||h==='auto'?s():h;return String(j||'zh-CN')[A(0x11c)]()['startsWith']('zh')?'zh-CN':A(0xff);},l=h=>{var B=z,j;return((j=h==null?void 0x0:h['i18n'])==null?void 0x0:j['messages'])||(h==null?void 0x0:h[B(0x129)]);},u=h=>{var C=z,j;return c(((j=h==null?void 0x0:h[C(0xca)])==null?void 0x0:j[C(0x128)])||(h==null?void 0x0:h['locale']));},d=(h,j={})=>h['replace'](/\{([a-zA-Z0-9_.-]+)\}/g,(k,m)=>{let q=j[m];return q==null?'':String(q);}),f=(h,j,k={})=>{var D=z;let m=u(h),q=l(h);return d((typeof q==D(0x133)?q(j,k,m):q==null?void 0x0:q[j])||o[m][j]||o['zh-CN'][j],k);},p=h=>(j,k)=>f(h,j,k);function b(){var E=['OpenDocument\x20document\x20preview','检测到文件签名:\x20{signature}。','Initializing\x20archive\x20parsing\x20Worker...','114GOyQoN','渲染方式','Next\x20match','Object\x20types','正在准备工作表、样式和可视区数据。','当前浏览器不支持音频播放。','112004sfanzZ','Loading\x20PDF...','13096780lrBZge','Theme','视频文件','File\x20content','Word\x20document','加载文件异常','邮件文件','The\x20UMD\x20structure\x20is\x20incomplete\x20and\x20ended\x20unexpectedly.','Blob\x20is\x20not\x20available\x20in\x20the\x20current\x20execution\x20environment.','Channel','0\x20页','keys','Typst\x20需要本地\x20compiler\x20/\x20renderer\x20WASM\x20和字体目录。请运行\x20file-viewer-copy-assets,或配置\x20options.typst.compilerWasmUrl\x20/\x20options.typst.rendererWasmUrl\x20/\x20options.typst.fontAssetsUrl,并确认服务器以\x20application/wasm\x20返回\x20WASM。','Outline\x20navigation','Archive\x20preview\x20notice','PPTX\x20预览失败','无法解析这个\x20PPT\x20文件。','This\x20browser\x20cannot\x20create\x20a\x20PDF\x20print\x20canvas.','Last\x20segment','不支持\x20.{type}\x20地理格式','en-US','496LdaTjI','After\x20the\x20directory\x20is\x20ready,\x20click\x20an\x20entry\x20to\x20extract\x20it\x20on\x20demand.','CAD\x20drawing','下载失败','上一个匹配','PlantUML\x20SVG\x20preview','Excalidraw\x20SVG\x20导出超时,自动切换\x20rough.js\x20兼容渲染','Paused','Export\x20rendered\x20HTML','Typst\x20渲染失败','.{type}\x20geospatial\x20format\x20is\x20not\x20supported','Failed\x20to\x20parse\x20Draw.io\x20XML:\x20{message}','大文件会在\x20Worker\x20中解析,避免阻塞主线程。','draw.io\x20图纸','头信息','Parsing\x20CAD...','Exporting\x20{name}...','工作表列表','OpenDocument\x20文档预览','正在准备工作表、样式和大数据视口,请稍候。','正在解析\x20XMind\x20脑图...','toPrimitive','Cached\x20{cached}\x20/\x20{total}\x20rows','当前文件不是标准\x20Git\x20bundle。','Deltas','{filename}\x20·\x20message\x201','目录\x20{index}','正在编译','toLowerCase','Password\x20entry\x20was\x20cancelled,\x20so\x20the\x20encrypted\x20archive\x20cannot\x20be\x20previewed.','Non\x20PDF-compatible\x20AI\x20is\x20shown\x20as\x20a\x20safe\x20summary.','.{type}\x20cannot\x20be\x20previewed\x20online.\x20Download\x20it\x20or\x20convert\x20it\x20to\x20a\x20supported\x20format.','Download\x20the\x20original\x20file','Zoom\x20in','Exports','Failed\x20to\x20load\x20file','Decoding\x20pixels\x20and\x20generating\x20preview.','{label}\x20读取目录超时','自定义瓦片','push','locale','messages','130761dyoMwo','PDF\x20navigation\x20type','Excel\x20表格','正在解析\x20Excel\x20工作簿','Page\x20{page}','Previous','Indexing\x20large\x20file\x20{progress}%','Instrument','压缩包体积\x20{size}\x20超过安全上限\x20{limit},请下载后在本地解压。','function','历史记录','Excel\x20workbook','导出\x20HTML\x20失败','Zoom\x20out','Zoom\x20controls','Loading\x20CAD\x20viewer...','渲染引擎','正在加载绘图预览...','Fit','正在加载\x20CAD\x20预览器...','Failed\x20to\x20render\x20PlantUML\x20SVG:\x20{status}','Download\x20failed','{count}\x20项','页面导航','draw.io\x20diagram','非\x20PDF-compatible\x20AI\x20按摘要展示','Parsing\x20hand-drawn\x20elements\x20and\x20generating\x20safe\x20SVG.','切换为深色模式','文件内容已完成渲染。','Close\x20image\x20preview','Preparing\x20media\x20resource\x20and\x20player.','SVG\x20后备预览','11HdgRcG','关闭图片预览','RTF\x20document\x20preview','defineProperties','Magic','浏览器拦截了打印窗口','正在解析\x20Typst','当前\x20Draw.io\x20文件没有可直接渲染的\x20mxGraphModel。','Parsing\x20OFD...','HTML','音符数','2791432cQwDHa','正在解析国产版式文档和页面对象。','打印失败','Typst\x20WASM\x20renderer','object','下一页','PPTX\x20preview\x20failed','Choose\x20a\x20file','Detected\x20file\x20signature:\x20{signature}.','Show\x20all','正在准备「{name}」...','Objects','Clear','读取文件\x20Data\x20URL\x20失败。','Enter\x20archive\x20password','1559031EabXXn','i18n','正在通过\x20Worker\x20加载\x20DWG\x20几何和\x20LibreDWG\x20WASM。','Typst\x20WASM\x20渲染器','正在解析目录、章节资源和阅读分页。','5420796LIgEti','Opened\x20with\x20the\x20browser-native\x20audio\x20player.\x20Codec\x20support\x20depends\x20on\x20the\x20current\x20browser.','13QsRXWR','SVG\x20解析失败','Failed\x20to\x20parse\x20Excel','Starting\x20Worker\x20and\x20reading\x20archive\x20entries.','Parsing\x20file\x20content...','Fit\x20to\x20width','Refs','该页没有可提取文本','No\x20displayable\x20layers\x20were\x20found.\x20Showing\x20the\x20composite\x20image.','5xNJNuh','Video\x20preview','Excel\x20Worker\x20failed','419713NBqjCw','Collapsed','MapLibre\x20矢量地图','Page\x20{page}\x20thumbnail'];b=function(){return E;};return b();}export{r as a,a as i,u as n,f as r,p as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const a8=c;(function(g,h){const a7=c,j=g();while(!![]){try{const k=-parseInt(a7(0x1d8))/0x1*(-parseInt(a7(0x1db))/0x2)+parseInt(a7(0x1f2))/0x3+parseInt(a7(0x1ff))/0x4*(parseInt(a7(0x1f4))/0x5)+-parseInt(a7(0x1ec))/0x6*(-parseInt(a7(0x1dc))/0x7)+parseInt(a7(0x1f9))/0x8*(parseInt(a7(0x1f7))/0x9)+parseInt(a7(0x1ef))/0xa*(-parseInt(a7(0x208))/0xb)+-parseInt(a7(0x1e1))/0xc*(parseInt(a7(0x206))/0xd);if(k===h)break;else j['push'](j['shift']());}catch(l){j['push'](j['shift']());}}}(b,0x38088));import{i as d,t}from'./messages.js';import{a as f}from'./printMask.js';var r=a8(0x1f3),i=g=>{const a9=a8;let h=g['ownerDocument'],j=g[a9(0x1dd)](),k=j===h?h['head']:j;if(k['querySelector']('#fv-print-mask-designer-style'))return;let l=h['createElement']('style');l['id']=a9(0x209),l['textContent']=r,k['appendChild'](l);},a=(g,h,j,k)=>{const aa=a8;if(!j['width']||!j['height'])return null;let l=Math[aa(0x1e4)](g['x'],h['x']),m=Math['min'](g['y'],h['y']),p=Math['abs'](h['x']-g['x']),q=Math['abs'](h['y']-g['y']);return p<0x8||q<0x8?null:f({'left':l/j['width']*0x64,'top':m/j['height']*0x64,'width':p/j['width']*0x64,'height':q/j['height']*0x64,'pageIndex':k});},o=(g,h)=>{const ab=a8;let j=g['getBoundingClientRect']();return Math['max'](0x0,Math['min'](j['right'],h[ab(0x1d9)])-Math[ab(0x1e7)](j[ab(0x1fb)],h['left']))*Math['max'](0x0,Math['min'](j['bottom'],h[ab(0x1f8)])-Math[ab(0x1e7)](j['top'],h['top']));},s=j=>{const ac=a8;let k=j[ac(0x1e6)],q=k['ownerDocument'],v=t(j[ac(0x204)]),w=j['color']||'#000000',x=[...j['initialRegions']||[]]['map'](D=>f(D))['filter'](D=>!!D),y=Array['from'](new Set(j['pages']||[]))['filter'](D=>D===k||k['contains'](D)),z=y['length']>0x0,A=z?y:[k];i(k);let B=D=>{const ad=ac;var E,F,G;let H=D['style']['position'];return(((G=(F=(E=q[ad(0x1e5)])==null?void 0x0:E['getComputedStyle'])==null?void 0x0:F['call'](E,D))==null?void 0x0:G['position'])||H||'static')==='static'&&(D['style']['position']='relative'),H;},C=B(k);return new Promise(F=>{const ae=ac;let G=!0x1,H=null,I=q['createElement'](ae(0x1e0));I[ae(0x1e3)]='fv-print-mask-layer',I['setAttribute']('data-viewer-print-mask-designer','true');let J=(a1,a2)=>{let a3=B(a1),a4=q['createElement']('div');return a4['className']='fv-print-mask-canvas',a1['appendChild'](a4),{'element':a1,'pageIndex':a2,'canvas':a4,'previousPosition':a3};},K=A['map']((a1,a2)=>J(a1,z?a2:void 0x0)),L=z&&!K[ae(0x1df)](a1=>a1['element']===k)&&x['some'](a1=>a1[ae(0x1ea)]===void 0x0)?J(k):null,M=L?[...K,L]:K,N=q['createElement'](ae(0x1e0));N[ae(0x1e3)]=ae(0x1eb),N[ae(0x203)]('role','toolbar'),N['setAttribute']('aria-label',v('toolbar.printMaskTitle'));let P=q['createElement']('span');P['textContent']=v('toolbar.printMaskHint');let Q=q['createElement']('button');Q['type']='button',Q['textContent']=v('toolbar.printMaskAdd');let R=q['createElement']('button');R['type']='button',R['textContent']=v(ae(0x1e9));let U=q['createElement']('button');U['type']='button',U['textContent']=v(ae(0x200));let V=q['createElement']('button');V['type']='button',V['className']='primary',V['textContent']=v('toolbar.printMaskConfirm'),N['append'](P,Q,R,U,V),I['append'](N),k['appendChild'](I);let W=()=>{K['forEach'](a1=>a1['canvas']['classList']['remove']('is-armed')),Q['classList']['remove']('is-active');},X=a1=>{G||(G=!0x0,I['remove'](),M['forEach'](a2=>{const af=c;a2['canvas']['remove'](),a2['previousPosition']?a2['element']['style']['position']=a2['previousPosition']:a2['element']['style'][af(0x1f5)]('position');}),C?k['style']['position']=C:k['style']['removeProperty']('position'),F(a1));},Y=a1=>a1['pageIndex']===void 0x0?L||K[0x0]:K['find'](a2=>a2[ae(0x1ea)]===a1['pageIndex'])||null,Z=()=>{const ag=ae;M['forEach'](a1=>a1[ag(0x1fd)]['replaceChildren']()),x['forEach']((a1,a2)=>{const ah=ag;let a3=Y(a1);if(!a3)return;let a4=q['createElement']('div');a4['className']='fv-print-mask-block',a4['style']['left']=a1['left']+'%',a4[ah(0x202)]['top']=a1['top']+'%',a4['style'][ah(0x1f6)]=a1['width']+'%',a4['style']['height']=a1['height']+'%',a4['style']['background']=w;let a5=q['createElement'](ah(0x1fc));a5['type']='button',a5['className']='fv-print-mask-block-remove',a5['title']=v(ah(0x1e9)),a5[ah(0x203)](ah(0x1da),v('toolbar.printMaskClear')),a5['textContent']='−',a5['addEventListener']('click',a6=>{const ai=ah;a6[ai(0x1de)](),a6[ai(0x205)](),x['splice'](a2,0x1),Z();}),a4['appendChild'](a5),a3['canvas']['appendChild'](a4);});},a0=(a1,a2)=>{const aj=ae;let a3=a2['getBoundingClientRect']();return{'x':Math['max'](0x0,Math['min'](a3['width'],a1[aj(0x1fe)]-a3[aj(0x1fb)])),'y':Math['max'](0x0,Math['min'](a3['height'],a1['clientY']-a3['top']))};};K['forEach'](a1=>{const al=ae;a1['canvas']['addEventListener']('pointerdown',a2=>{const ak=c;if(a2[ak(0x1fc)]!==0x0||!a1['canvas']['classList']['contains'](ak(0x1ed)))return;a2['preventDefault']();let a3=a0(a2,a1['canvas']),a4=q['createElement']('div');a4['className']='fv-print-mask-block',a4['style']['background']=w,a4['style']['opacity']=ak(0x201),a1['canvas']['appendChild'](a4),H={'surface':a1,'start':a3,'preview':a4,'pointerId':a2['pointerId']},a1['canvas']['setPointerCapture'](a2['pointerId']);}),a1[al(0x1fd)][al(0x1ee)]('pointermove',a2=>{const am=al;if(!H||H['surface']!==a1)return;let a3=a0(a2,a1['canvas']),a4=Math[am(0x1e4)](H['start']['x'],a3['x']),a5=Math['min'](H['start']['y'],a3['y']);H['preview']['style'][am(0x1fb)]=a4+'px',H['preview']['style']['top']=a5+'px',H[am(0x1fa)]['style']['width']=Math['abs'](a3['x']-H['start']['x'])+'px',H['preview']['style']['height']=Math['abs'](a3['y']-H['start']['y'])+'px';}),a1['canvas']['addEventListener']('pointerup',a2=>{const an=al;if(!H||H[an(0x1f1)]!==a1)return;let a3=a0(a2,a1[an(0x1fd)]),a4=a(H['start'],a3,a1['canvas']['getBoundingClientRect'](),a1['pageIndex']);H['preview']['remove']();try{a1['canvas']['releasePointerCapture'](H[an(0x1d7)]);}catch(a5){}H=null,W(),a4&&x[an(0x1e8)](a4),Z();}),a1['canvas']['addEventListener']('pointercancel',()=>{const ao=al;!H||H['surface']!==a1||(H['preview'][ao(0x1f0)](),H=null,W(),Z());});}),Q['addEventListener']('click',()=>{const ap=ae;var a1;W();let a2=k['getBoundingClientRect'](),a3=((a1=K['map'](a4=>({'surface':a4,'area':o(a4['element'],a2)}))['sort']((a4,a5)=>a5[ap(0x1e2)]-a4[ap(0x1e2)])[0x0])==null?void 0x0:a1['surface'])||K[0x0];a3==null||a3['canvas']['classList']['add']('is-armed'),Q['classList']['toggle']('is-active',!!a3);}),R['addEventListener']('click',()=>{const aq=ae;x['splice'](0x0,x[aq(0x207)]),W(),Z();}),U[ae(0x1ee)]('click',()=>X(null)),V['addEventListener']('click',()=>{if(!x['length']){X(null);return;}X({'mask':{'regions':x['map'](a1=>d({},a1)),'color':w}});}),Z();});};function b(){const ar=['some','div','12mdIlMx','area','className','min','defaultView','root','max','push','toolbar.printMaskClear','pageIndex','fv-print-mask-toolbar','6aipsvc','is-armed','addEventListener','3383810trqBsX','remove','surface','1197540ESlzSa','\x0a.fv-print-mask-layer{position:absolute;inset:0;z-index:2147483000;pointer-events:none;}\x0a.fv-print-mask-canvas{position:absolute;inset:0;z-index:2147483000;pointer-events:none;cursor:default;}\x0a.fv-print-mask-canvas.is-armed{pointer-events:auto;cursor:crosshair;touch-action:none;}\x0a.fv-print-mask-block{position:absolute;background:#000;box-sizing:border-box;pointer-events:auto;}\x0a.fv-print-mask-block-remove{position:absolute;right:-8px;top:-8px;width:18px;height:18px;border:0;border-radius:999px;background:#111;color:#fff;font:700\x2012px/18px\x20system-ui,sans-serif;cursor:pointer;padding:0;}\x0a.fv-print-mask-toolbar{position:absolute;left:50%;bottom:16px;transform:translateX(-50%);z-index:2147483001;display:inline-flex;align-items:center;gap:6px;padding:6px\x208px;border:1px\x20solid\x20rgba(20,35,53,.12);border-radius:999px;background:rgba(255,255,255,.94);box-shadow:0\x2012px\x2028px\x20rgba(15,23,42,.16);pointer-events:auto;max-width:calc(100%\x20-\x2024px);flex-wrap:wrap;justify-content:center;}\x0a.fv-print-mask-toolbar\x20span{font:600\x2012px/1.2\x20system-ui,sans-serif;color:#40546a;white-space:nowrap;}\x0a.fv-print-mask-toolbar\x20button{min-width:42px;height:30px;padding:0\x2010px;border:0;border-radius:999px;background:transparent;color:#40546a;font:800\x2012px/1\x20system-ui,sans-serif;cursor:pointer;}\x0a.fv-print-mask-toolbar\x20button:hover,.fv-print-mask-toolbar\x20button.is-active{background:rgba(33,163,102,.1);color:#16774c;}\x0a.fv-print-mask-toolbar\x20button.primary{background:#16774c;color:#fff;}\x0a.fv-print-mask-toolbar\x20button.primary:hover{background:#0f5f3c;}\x0a','4690yRLKod','removeProperty','width','18zknBYW','bottom','1373728kgxtsw','preview','left','button','canvas','clientX','1384cLLqsM','toolbar.printMaskCancel','0.72','style','setAttribute','i18n','stopPropagation','7839013NUdmob','length','11rnRNpU','fv-print-mask-designer-style','pointerId','21CLGtIh','right','aria-label','1922JLKBUx','584871qQRcns','getRootNode','preventDefault'];b=function(){return ar;};return b();}function c(a,d){a=a-0x1d7;const e=b();let f=e[a];return f;}export{s as openFileViewerPrintMaskDesigner};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
function b(){const B=['9KzyUZf','left','size','height','141072PECrfO','replace','1187231TWVsYJ','47636240gjhxaG','32usoVZE','7612129tfCmKI','length','1707132NtEldn','8622150rjzKQu','6537515CRPEqX','pageIndex','regions','8ycwtaS','forEach'];b=function(){return B;};return b();}(function(f,g){const v=c,h=f();while(!![]){try{const j=parseInt(v(0x8a))/0x1+parseInt(v(0x8f))/0x2+parseInt(v(0x88))/0x3*(-parseInt(v(0x8c))/0x4)+parseInt(v(0x91))/0x5+parseInt(v(0x90))/0x6+-parseInt(v(0x8d))/0x7*(-parseInt(v(0x94))/0x8)+parseInt(v(0x84))/0x9*(-parseInt(v(0x8b))/0xa);if(j===g)break;else h['push'](h['shift']());}catch(k){h['push'](h['shift']());}}}(b,0xb2f1c));function c(a,d){a=a-0x83;const e=b();let f=e[a];return f;}import{i as d}from'./messages.js';var t=f=>Math['max'](0x0,Math['min'](0x64,f)),n=f=>{const w=c;if(!f)return null;let g=f['pageIndex'];if(g!==void 0x0&&(!Number['isInteger'](g)||g<0x0))return null;let h=t(Number(f['left'])||0x0),j=t(Number(f['top'])||0x0),k=t(Number(f['width'])||0x0),l=t(Number(f[w(0x87)])||0x0);return k<=0x0||l<=0x0?null:d({'left':h,'top':j,'width':Math['min'](k,0x64-h),'height':Math['min'](l,0x64-j)},g===void 0x0?{}:{'pageIndex':g});},r=f=>{const x=c;if(!f||!Array['isArray'](f['regions'])||!f['regions']['length'])return null;let g=f[x(0x93)]['map'](h=>n(h))['filter'](h=>!!h);return g['length']?{'regions':g,'color':f['color']||'#000000'}:null;},i=(f,g=!0x1)=>{const y=c;var h;let j=r(f);if(!((h=j==null?void 0x0:j['regions'])!=null&&h[y(0x8e)]))return'';let k=j['color']||'#000000',l=j[y(0x93)]['map'](m=>'<div\x20class=\x22viewer-export-print-mask-block\x22\x20style=\x22left:'+m[y(0x85)]+'%;top:'+m['top']+'%;width:'+m['width']+'%;height:'+m['height']+'%;background:'+k+';\x22></div>')['join']('');return'<div\x20class=\x22'+(g?'viewer-export-print-mask\x20viewer-export-print-mask--page':'viewer-export-print-mask')+'\x22\x20aria-hidden=\x22true\x22>'+l+'</div>';},a='\x0a\x20\x20.viewer-export-print-mask{position:absolute;inset:0;z-index:15;pointer-events:none;print-color-adjust:exact;-webkit-print-color-adjust:exact;}\x0a\x20\x20.viewer-export-print-mask--page{z-index:2147483647;}\x0a\x20\x20.viewer-export-print-mask-block{position:absolute;box-sizing:border-box;print-color-adjust:exact;-webkit-print-color-adjust:exact;}\x0a\x20\x20[data-viewer-print-page-index]{position:relative!important;isolation:isolate;}\x0a',o=(f,g)=>{const z=c;var h;let j=r(g);if(!j)return f;let k=new Map();return(h=j['regions'])==null||h[z(0x83)](l=>{const A=z;if(l[A(0x92)]===void 0x0)return;let m=k['get'](l[A(0x92)])||[];m['push'](l),k['set'](l['pageIndex'],m);}),k[z(0x86)]?f[z(0x89)](/(<[A-Za-z][^>]*\sdata-viewer-print-page-index=(['"])(\d+)\2[^>]*>)/g,(l,m,p,q)=>{let u=k['get'](Number(q));return u!=null&&u['length']?''+m+i({'regions':u,'color':j['color']},!0x0):l;}):f;};export{n as a,r as i,o as n,i as r,a as t};
|