@shahajimbhosle/local-doc-viewer 1.0.3 → 1.0.5
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/CHANGELOG.md +40 -0
- package/README.md +74 -4
- package/dist/DocumentViewer.d.ts +1 -1
- package/dist/DocumentViewer.d.ts.map +1 -1
- package/dist/components/Toolbar.d.ts +2 -1
- package/dist/components/Toolbar.d.ts.map +1 -1
- package/dist/index.css +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +15760 -13797
- package/dist/index.umd.cjs +111 -104
- package/dist/renderers/DocxRenderer.d.ts.map +1 -1
- package/dist/renderers/MarkdownRenderer.d.ts.map +1 -1
- package/dist/renderers/PdfRenderer.d.ts.map +1 -1
- package/dist/renderers/PptxRenderer.d.ts.map +1 -1
- package/dist/renderers/SpreadsheetRenderer.d.ts.map +1 -1
- package/dist/types.d.ts +11 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/highlight.d.ts +5 -0
- package/dist/utils/highlight.d.ts.map +1 -1
- package/dist/utils/ods.d.ts +3 -0
- package/dist/utils/ods.d.ts.map +1 -0
- package/dist/utils/xlsx.d.ts +16 -0
- package/dist/utils/xlsx.d.ts.map +1 -1
- package/package.json +38 -3
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to `@shahajimbhosle/local-doc-viewer` will be documented in this file.
|
|
4
|
+
|
|
5
|
+
This project follows semantic versioning. Dates use `YYYY-MM-DD`.
|
|
6
|
+
|
|
7
|
+
## [1.0.5] - 2026-07-18
|
|
8
|
+
|
|
9
|
+
### Added
|
|
10
|
+
|
|
11
|
+
- Added `pdfOptions.showThumbnails` for PDF-specific thumbnail configuration.
|
|
12
|
+
- Added a virtualized, collapsible PDF page thumbnail drawer.
|
|
13
|
+
- Added continuous PDF scrolling when `controls.pageNavigation` is disabled, so users can still reach every page by scrolling.
|
|
14
|
+
- Added virtualized PPTX slide thumbnails with per-thumbnail loading states.
|
|
15
|
+
- Added search highlight overlays for PDF pages and PPTX slides.
|
|
16
|
+
- Added print preparation state so the print button can show progress while the browser print frame is prepared.
|
|
17
|
+
|
|
18
|
+
### Changed
|
|
19
|
+
|
|
20
|
+
- Moved document-type-specific thumbnail settings out of generic controls and into `pdfOptions` for PDF behavior.
|
|
21
|
+
- Kept `controls.thumbnails` as the shared switch for showing or hiding supported thumbnail drawers.
|
|
22
|
+
- Improved print handling by preparing a hidden local print frame instead of relying on an immediate popup flow.
|
|
23
|
+
- Centered PPTX slide rendering inside the viewer surface.
|
|
24
|
+
|
|
25
|
+
### Fixed
|
|
26
|
+
|
|
27
|
+
- Reflected spreadsheet cell borders from XLSX and ODS workbook styles.
|
|
28
|
+
- Prevented PDF thumbnail rendering from blocking the active PDF page render.
|
|
29
|
+
- Prevented PPTX thumbnail rendering from blocking the active slide render.
|
|
30
|
+
- Preserved the stable spreadsheet renderer by removing the experimental spreadsheet overflow mode path before release.
|
|
31
|
+
|
|
32
|
+
## [1.0.0] - 2026-07-17
|
|
33
|
+
|
|
34
|
+
### Added
|
|
35
|
+
|
|
36
|
+
- Initial public release of the privacy-first local React document viewer.
|
|
37
|
+
- Added local-only rendering for PDF, DOCX, XLSX, XLS, ODS, PPTX, images, video/audio, Markdown, CSV, JSON, and plain text where supported by browser-side renderers.
|
|
38
|
+
- Added built-in viewer controls for file name, page navigation, zoom, fit, rotation, search, print, download, fullscreen, and thumbnails where appropriate.
|
|
39
|
+
- Added Blob, File, ArrayBuffer, URL, and metadata object source support.
|
|
40
|
+
- Added TypeScript declarations, bundled CSS exports, and public npm package metadata.
|
package/README.md
CHANGED
|
@@ -4,6 +4,12 @@ A privacy-first React document viewer that renders files in the browser without
|
|
|
4
4
|
|
|
5
5
|
The package is designed for confidential documents. It accepts `File`, `Blob`, `ArrayBuffer`, `Uint8Array`, `blob:` URLs, and `data:` URLs. `http://` and `https://` document URLs are rejected by default.
|
|
6
6
|
|
|
7
|
+
## Links
|
|
8
|
+
|
|
9
|
+
- npm: [@shahajimbhosle/local-doc-viewer](https://www.npmjs.com/package/@shahajimbhosle/local-doc-viewer)
|
|
10
|
+
- GitHub: [shahajimbhosle/DocViewer](https://github.com/shahajimbhosle/DocViewer)
|
|
11
|
+
- Issues: [GitHub issues](https://github.com/shahajimbhosle/DocViewer/issues)
|
|
12
|
+
|
|
7
13
|
## Built-In Formats
|
|
8
14
|
|
|
9
15
|
- PDF, rendered with a bundled PDF.js worker
|
|
@@ -12,12 +18,14 @@ The package is designed for confidential documents. It accepts `File`, `Blob`, `
|
|
|
12
18
|
- Markdown, rendered locally and sanitized
|
|
13
19
|
- CSV/TSV
|
|
14
20
|
- DOCX, rendered locally with Word-style layout and embedded styles where browser rendering permits
|
|
15
|
-
- XLS/XLSX, parsed locally in the browser
|
|
21
|
+
- XLS/XLSX/ODS, parsed locally in the browser
|
|
16
22
|
- PPTX, rendered locally to canvas with slide navigation and text search counts
|
|
17
|
-
- DOCX comments and XLSX notes/comments are shown locally when present
|
|
23
|
+
- DOCX comments and XLSX/ODS notes/comments are shown locally when present
|
|
18
24
|
- Audio/video formats supported by the browser
|
|
19
25
|
|
|
20
|
-
|
|
26
|
+
Spreadsheet previews use row and column virtualization so larger XLS/XLSX/ODS files do not mount every grid cell into the DOM at once.
|
|
27
|
+
|
|
28
|
+
Legacy binary Word/PowerPoint documents, OpenDocument text/presentation files, strict Office fidelity edge cases, encrypted documents, CAD files, and uncommon enterprise formats need a custom renderer or a private/on-prem conversion service. The viewer exposes a renderer registry for that purpose.
|
|
21
29
|
|
|
22
30
|
### About `.ppt`
|
|
23
31
|
|
|
@@ -40,7 +48,7 @@ export function SecurePreview({ file }: { file: File }) {
|
|
|
40
48
|
}
|
|
41
49
|
```
|
|
42
50
|
|
|
43
|
-
Blob sources are supported directly. If the Blob has no reliable `type`, pass a filename or MIME type; otherwise the viewer will sniff common local formats such as PDF, DOCX, XLSX, and PPTX from the bytes.
|
|
51
|
+
Blob sources are supported directly. If the Blob has no reliable `type`, pass a filename or MIME type; otherwise the viewer will sniff common local formats such as PDF, DOCX, XLSX, ODS, and PPTX from the bytes.
|
|
44
52
|
|
|
45
53
|
```tsx
|
|
46
54
|
<DocumentViewer source={blob} />
|
|
@@ -53,6 +61,19 @@ Blob sources are supported directly. If the Blob has no reliable `type`, pass a
|
|
|
53
61
|
/>
|
|
54
62
|
```
|
|
55
63
|
|
|
64
|
+
## Loading State
|
|
65
|
+
|
|
66
|
+
The viewer shows a compact built-in loader while it is resolving the local file, Blob, buffer, or allowed private URL. Built-in async renderers also use it while preparing heavier formats such as PDF, DOCX, XLSX/ODS, Markdown, and PPTX.
|
|
67
|
+
|
|
68
|
+
Provide `loader` to replace the default loading UI:
|
|
69
|
+
|
|
70
|
+
```tsx
|
|
71
|
+
<DocumentViewer
|
|
72
|
+
loader={<div className="my-loader">Opening secure preview...</div>}
|
|
73
|
+
source={file}
|
|
74
|
+
/>
|
|
75
|
+
```
|
|
76
|
+
|
|
56
77
|
## Privacy Model
|
|
57
78
|
|
|
58
79
|
By default, the viewer:
|
|
@@ -116,9 +137,32 @@ The default control surface includes:
|
|
|
116
137
|
- Download
|
|
117
138
|
- Fullscreen
|
|
118
139
|
- PPTX slide thumbnails
|
|
140
|
+
- Optional PDF page thumbnails
|
|
119
141
|
|
|
120
142
|
Controls are also filtered by renderer capability. For example, media files hide zoom, fit, search, print, page navigation, and rotate; images hide search, page navigation, and rotate; text/table renderers hide fit/page navigation/rotate; legacy or unsupported files keep only the generic actions such as file name, download, and fullscreen.
|
|
121
143
|
|
|
144
|
+
For PDFs, hiding page navigation switches the document surface to continuous scrolling so every page remains reachable without toolbar page buttons:
|
|
145
|
+
|
|
146
|
+
```tsx
|
|
147
|
+
<DocumentViewer
|
|
148
|
+
controls={{ pageNavigation: false }}
|
|
149
|
+
source={file}
|
|
150
|
+
/>
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
Show PDF page thumbnails in a collapsible left drawer:
|
|
154
|
+
|
|
155
|
+
```tsx
|
|
156
|
+
<DocumentViewer
|
|
157
|
+
pdfOptions={{ showThumbnails: true }}
|
|
158
|
+
source={file}
|
|
159
|
+
/>
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
PDF and PPTX thumbnail drawers are virtualized. Only visible thumbnails are mounted and rendered, and each thumbnail shows its own loader while it is prepared. This keeps the active PDF page or slide usable while thumbnails continue loading.
|
|
163
|
+
|
|
164
|
+
Set `controls.thumbnails` to `false` to hide thumbnail drawers for both PPTX and PDF.
|
|
165
|
+
|
|
122
166
|
Disable controls selectively:
|
|
123
167
|
|
|
124
168
|
```tsx
|
|
@@ -134,6 +178,32 @@ Disable controls selectively:
|
|
|
134
178
|
|
|
135
179
|
Every `controls` key is optional. Omitted controls use the default behavior.
|
|
136
180
|
|
|
181
|
+
## Document-Specific Options
|
|
182
|
+
|
|
183
|
+
Use document-specific option objects for behavior that only applies to one renderer type:
|
|
184
|
+
|
|
185
|
+
```tsx
|
|
186
|
+
<DocumentViewer
|
|
187
|
+
pdfOptions={{ showThumbnails: true }}
|
|
188
|
+
source={file}
|
|
189
|
+
/>
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
## Text Selection
|
|
193
|
+
|
|
194
|
+
Document text is selectable by default where the browser renderer supports it. Use `userSelect` to control selection inside the document viewport without affecting toolbar controls:
|
|
195
|
+
|
|
196
|
+
```tsx
|
|
197
|
+
<DocumentViewer source={file} userSelect="none" />
|
|
198
|
+
<DocumentViewer source={file} userSelect="text" />
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
Boolean shorthand is also supported:
|
|
202
|
+
|
|
203
|
+
```tsx
|
|
204
|
+
<DocumentViewer source={file} userSelect={false} />
|
|
205
|
+
```
|
|
206
|
+
|
|
137
207
|
## Custom Renderers
|
|
138
208
|
|
|
139
209
|
Register a renderer for regulated formats or for a local conversion flow:
|
package/dist/DocumentViewer.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { DocumentViewerProps } from './types';
|
|
2
|
-
export declare function DocumentViewer({ source, fileName, mimeType, className, style, height, renderers, allowRemoteUrls, fetchCredentials, minZoom, maxZoom, initialZoom, initialPage, controls, labels, emptyState, onLoad, onError, }: DocumentViewerProps): import("react").JSX.Element;
|
|
2
|
+
export declare function DocumentViewer({ source, fileName, mimeType, className, style, height, renderers, allowRemoteUrls, fetchCredentials, minZoom, maxZoom, initialZoom, initialPage, controls, pdfOptions, labels, emptyState, loader, userSelect, onLoad, onError, }: DocumentViewerProps): import("react").JSX.Element;
|
|
3
3
|
//# sourceMappingURL=DocumentViewer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DocumentViewer.d.ts","sourceRoot":"","sources":["../src/DocumentViewer.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"DocumentViewer.d.ts","sourceRoot":"","sources":["../src/DocumentViewer.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAMV,mBAAmB,EAOpB,MAAM,SAAS,CAAC;AAEjB,OAAO,cAAc,CAAC;AA2RtB,wBAAgB,cAAc,CAAC,EAC7B,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,KAAK,EACL,MAAY,EACZ,SAAS,EACT,eAAuB,EACvB,gBAAgC,EAChC,OAAc,EACd,OAAW,EACX,WAAe,EACf,WAAe,EACf,QAAQ,EACR,UAAU,EACV,MAAM,EACN,UAAU,EACV,MAAM,EACN,UAAU,EACV,MAAM,EACN,OAAO,GACR,EAAE,mBAAmB,+BAmUrB"}
|
|
@@ -3,6 +3,7 @@ interface ToolbarProps {
|
|
|
3
3
|
controls: ResolvedDocumentViewerControls;
|
|
4
4
|
fileName?: string;
|
|
5
5
|
isFullscreen: boolean;
|
|
6
|
+
isPrinting: boolean;
|
|
6
7
|
labels: DocumentViewerLabels;
|
|
7
8
|
searchStats: SearchStats;
|
|
8
9
|
state: ViewerRuntimeState;
|
|
@@ -18,6 +19,6 @@ interface ToolbarProps {
|
|
|
18
19
|
onZoomOut: () => void;
|
|
19
20
|
onZoomReset: () => void;
|
|
20
21
|
}
|
|
21
|
-
export declare function Toolbar({ controls, fileName, isFullscreen, labels, searchStats, state, onDownload, onFitModeChange, onFullscreenToggle, onPageChange, onPrint, onRotateLeft, onRotateRight, onSearchChange, onZoomIn, onZoomOut, onZoomReset, }: ToolbarProps): import("react").JSX.Element;
|
|
22
|
+
export declare function Toolbar({ controls, fileName, isFullscreen, isPrinting, labels, searchStats, state, onDownload, onFitModeChange, onFullscreenToggle, onPageChange, onPrint, onRotateLeft, onRotateRight, onSearchChange, onZoomIn, onZoomOut, onZoomReset, }: ToolbarProps): import("react").JSX.Element;
|
|
22
23
|
export {};
|
|
23
24
|
//# sourceMappingURL=Toolbar.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Toolbar.d.ts","sourceRoot":"","sources":["../../src/components/Toolbar.tsx"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EACV,oBAAoB,EACpB,OAAO,EACP,8BAA8B,EAC9B,WAAW,EACX,kBAAkB,EACnB,MAAM,UAAU,CAAC;AAElB,UAAU,YAAY;IACpB,QAAQ,EAAE,8BAA8B,CAAC;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,OAAO,CAAC;IACtB,MAAM,EAAE,oBAAoB,CAAC;IAC7B,WAAW,EAAE,WAAW,CAAC;IACzB,KAAK,EAAE,kBAAkB,CAAC;IAC1B,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,eAAe,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAC5C,kBAAkB,EAAE,MAAM,IAAI,CAAC;IAC/B,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,cAAc,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,WAAW,EAAE,MAAM,IAAI,CAAC;CACzB;
|
|
1
|
+
{"version":3,"file":"Toolbar.d.ts","sourceRoot":"","sources":["../../src/components/Toolbar.tsx"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EACV,oBAAoB,EACpB,OAAO,EACP,8BAA8B,EAC9B,WAAW,EACX,kBAAkB,EACnB,MAAM,UAAU,CAAC;AAElB,UAAU,YAAY;IACpB,QAAQ,EAAE,8BAA8B,CAAC;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,OAAO,CAAC;IACtB,UAAU,EAAE,OAAO,CAAC;IACpB,MAAM,EAAE,oBAAoB,CAAC;IAC7B,WAAW,EAAE,WAAW,CAAC;IACzB,KAAK,EAAE,kBAAkB,CAAC;IAC1B,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,eAAe,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAC5C,kBAAkB,EAAE,MAAM,IAAI,CAAC;IAC/B,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,cAAc,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,WAAW,EAAE,MAAM,IAAI,CAAC;CACzB;AA4BD,wBAAgB,OAAO,CAAC,EACtB,QAAQ,EACR,QAAQ,EACR,YAAY,EACZ,UAAU,EACV,MAAM,EACN,WAAW,EACX,KAAK,EACL,UAAU,EACV,eAAe,EACf,kBAAkB,EAClB,YAAY,EACZ,OAAO,EACP,YAAY,EACZ,aAAa,EACb,cAAc,EACd,QAAQ,EACR,SAAS,EACT,WAAW,GACZ,EAAE,YAAY,+BA0Hd"}
|
package/dist/index.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
.ldv-root{--ldv-bg: #f4f6f8;--ldv-panel: #ffffff;--ldv-panel-muted: #f8fafc;--ldv-border: #d8dee6;--ldv-border-strong: #aab4c0;--ldv-text: #17202a;--ldv-muted: #5f6f82;--ldv-accent: #0f766e;--ldv-accent-soft: #d8f3ef;--ldv-danger: #b42318;--ldv-warning: #8a4b0f;--ldv-highlight: #fff1a8;box-sizing:border-box;display:flex;min-height:320px;flex-direction:column;overflow:hidden;border:1px solid var(--ldv-border);border-radius:8px;background:var(--ldv-bg);color:var(--ldv-text);font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;letter-spacing:0}.ldv-root *,.ldv-root *:before,.ldv-root *:after{box-sizing:border-box}.ldv-root:fullscreen{width:100vw;height:100vh!important;border-radius:0}.ldv-toolbar{display:flex;flex:0 0 auto;flex-wrap:wrap;align-items:center;gap:8px;min-height:52px;padding:8px;border-bottom:1px solid var(--ldv-border);background:var(--ldv-panel-muted)}.ldv-toolbar-spacer{flex:1 1 24px}.ldv-control-group{display:inline-flex;align-items:center;gap:4px;padding:2px;border:1px solid var(--ldv-border);border-radius:7px;background:var(--ldv-panel)}.ldv-file-name{display:inline-flex;min-width:160px;max-width:min(280px,35vw);align-items:center;gap:8px;color:var(--ldv-text);font-size:13px;font-weight:600;white-space:nowrap}.ldv-file-name span{overflow:hidden;text-overflow:ellipsis}.ldv-icon-button,.ldv-zoom-reset,.ldv-sheet-tab{display:inline-flex;align-items:center;justify-content:center;border:0;background:transparent;color:var(--ldv-text);cursor:pointer;font:inherit}.ldv-icon-button{width:32px;height:32px;flex:0 0 32px;border-radius:6px}.ldv-icon-button:hover,.ldv-zoom-reset:hover,.ldv-sheet-tab:hover{background:#edf2f7}.ldv-icon-button:focus-visible,.ldv-zoom-reset:focus-visible,.ldv-sheet-tab:focus-visible,.ldv-page-control input:focus-visible,.ldv-search-control input:focus-visible{outline:2px solid var(--ldv-accent);outline-offset:2px}.ldv-icon-button[aria-pressed=true]{background:var(--ldv-accent-soft);color:#075e57}.ldv-icon-button:disabled{color:#9aa6b2;cursor:not-allowed}.ldv-zoom-reset{min-width:76px;height:32px;gap:6px;padding:0 8px;border-radius:6px;color:var(--ldv-text);font-size:12px;font-weight:650}.ldv-page-control{display:inline-flex;align-items:center;gap:6px;padding:0 6px;color:var(--ldv-muted);font-size:12px;white-space:nowrap}.ldv-page-control input{width:58px;height:30px;border:1px solid var(--ldv-border);border-radius:5px;color:var(--ldv-text);font:inherit;text-align:center}.ldv-search-control{display:inline-flex;min-width:220px;max-width:360px;flex:1 1 240px;align-items:center;gap:8px;height:38px;padding:0 10px;border:1px solid var(--ldv-border);border-radius:7px;background:var(--ldv-panel);color:var(--ldv-muted)}.ldv-search-control input{min-width:80px;flex:1 1 auto;border:0;background:transparent;color:var(--ldv-text);font:inherit;outline:none}.ldv-search-status{max-width:120px;overflow:hidden;color:var(--ldv-muted);font-size:12px;text-overflow:ellipsis;white-space:nowrap}.ldv-viewport{position:relative;flex:1 1 auto;overflow:auto;padding:4px;background:#e8edf2}.ldv-renderer-pptx .ldv-viewport,.ldv-renderer-spreadsheet .ldv-viewport,.ldv-renderer-csv .ldv-viewport{padding:0}.ldv-renderer-media .ldv-viewport{overflow:hidden;padding:0}.ldv-renderer-image:has(.ldv-image-fit-page) .ldv-viewport{overflow:hidden}.ldv-renderer-status,.ldv-empty-state,.ldv-error,.ldv-unsupported{display:grid;min-height:100%;place-items:center;align-content:center;justify-items:center;gap:10px;padding:28px;color:var(--ldv-muted);text-align:center}.ldv-error{color:var(--ldv-danger)}.ldv-error strong,.ldv-unsupported h2{color:var(--ldv-text);font-size:18px}.ldv-unsupported p{max-width:640px;margin:0;color:var(--ldv-muted);line-height:1.55}.ldv-pdf-stage,.ldv-image-stage,.ldv-media-stage{display:flex;min-height:100%;align-items:flex-start;justify-content:center}.ldv-media-stage{width:100%;height:100%;align-items:center;padding:12px}.ldv-pdf-canvas,.ldv-pptx-slide-frame,.ldv-image-document,.ldv-video-document,.ldv-rich-document,.ldv-text-document,.ldv-table-document table{background:var(--ldv-panel);box-shadow:0 10px 28px #0f172a29}.ldv-pdf-canvas{display:block}.ldv-pptx-shell{display:grid;width:100%;height:100%;min-height:100%;grid-template-columns:168px minmax(0,1fr);background:#e8edf2}.ldv-pptx-shell.ldv-pptx-sidebar-collapsed{grid-template-columns:44px minmax(0,1fr)}.ldv-pptx-shell.ldv-pptx-sidebar-disabled{grid-template-columns:minmax(0,1fr)}.ldv-pptx-sidebar{display:flex;min-width:0;flex-direction:column;overflow:hidden;border-right:1px solid var(--ldv-border);background:#f8fafc}.ldv-pptx-sidebar-toggle{display:inline-flex;width:32px;height:32px;flex:0 0 32px;align-items:center;justify-content:center;align-self:flex-end;margin:6px;border:0;border-radius:6px;background:transparent;color:var(--ldv-text);cursor:pointer}.ldv-pptx-sidebar-collapsed .ldv-pptx-sidebar-toggle{align-self:center}.ldv-pptx-sidebar-toggle:hover{background:#edf2f7}.ldv-pptx-sidebar-toggle:focus-visible,.ldv-pptx-thumbnail:focus-visible{outline:2px solid var(--ldv-accent);outline-offset:2px}.ldv-pptx-thumbnail-list{display:grid;gap:8px;overflow:auto;padding:0 8px 12px}.ldv-pptx-thumbnail{display:grid;grid-template-columns:24px minmax(0,1fr);gap:6px;align-items:start;padding:6px;border:1px solid transparent;border-radius:6px;background:transparent;color:var(--ldv-text);cursor:pointer;font:inherit;text-align:left}.ldv-pptx-thumbnail:hover{background:#eef3f8}.ldv-pptx-thumbnail[aria-current=page]{border-color:var(--ldv-accent);background:#e8f5f3}.ldv-pptx-thumbnail-number{display:inline-flex;min-height:24px;align-items:center;justify-content:center;color:#4a5868;font-size:12px;font-weight:700}.ldv-pptx-thumbnail-canvas{display:block;max-width:100%;border:1px solid #cfd8e3;background:var(--ldv-panel);box-shadow:0 2px 8px #0f172a1f}.ldv-pptx-main{min-width:0;overflow:auto;padding:12px}.ldv-pptx-stage{display:flex;min-height:100%;align-items:center;justify-content:flex-start}.ldv-pptx-slide-frame{position:relative;flex:0 0 auto;background:var(--ldv-panel)}.ldv-pptx-canvas{display:block;width:100%;height:100%;background:var(--ldv-panel)}.ldv-pptx-render-status{position:absolute;top:0;right:0;bottom:0;left:0;display:grid;place-items:center;background:#ffffffb8;color:var(--ldv-muted);font-size:13px;font-weight:600}.ldv-image-stage{align-items:center}.ldv-image-document{display:block;max-width:none;transform-origin:center}.ldv-image-fit-width .ldv-image-document{width:100%;height:auto}.ldv-image-fit-page .ldv-image-document{max-width:100%;object-fit:contain}.ldv-video-document{width:100%;height:100%;max-width:100%;max-height:100%;background:#000;object-fit:contain}.ldv-audio-document{width:min(100%,640px)}.ldv-text-shell{display:flex;min-height:100%;justify-content:center}.ldv-text-document{width:min(100%,980px);min-height:100%;margin:0;padding:4px;overflow:auto;border:1px solid var(--ldv-border);border-radius:4px;color:#1d2733;font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,monospace;-moz-tab-size:2;tab-size:2;white-space:pre-wrap;word-break:break-word}.ldv-rich-document{width:min(100%,860px);min-height:100%;margin:0 auto;padding:4px;border:1px solid var(--ldv-border);border-radius:4px;color:#1d2733;line-height:1.65}.ldv-rich-document h1,.ldv-rich-document h2,.ldv-rich-document h3{color:#111827;line-height:1.2}.ldv-rich-document img{max-width:100%}.ldv-docx-preview-shell{width:max-content;max-width:none;margin:0 auto}.ldv-docx-document{color:#111827}.ldv-docx-document .docx-wrapper{padding:0!important;background:transparent!important}.ldv-docx-document .docx-wrapper>section.docx{margin:0 auto 20px!important;box-shadow:0 10px 28px #0f172a29!important}.ldv-docx-document img,.ldv-docx-document svg,.ldv-docx-document canvas{max-width:none}.ldv-docx-vml-textbox{display:inline-flex;align-items:center;box-sizing:border-box;overflow:hidden;padding:0 2pt;vertical-align:middle}.ldv-docx-vml-textbox p{width:100%;min-height:0!important;margin:0!important}.ldv-docx-vml-textbox span{line-height:1.05}.ldv-rich-document table{width:100%;border-collapse:collapse}.ldv-rich-document th,.ldv-rich-document td{padding:4px;border:1px solid var(--ldv-border);text-align:left;vertical-align:top}.ldv-warning{margin-bottom:18px;padding:10px 12px;border:1px solid #f4c27b;border-radius:6px;background:#fff8eb;color:var(--ldv-warning);font-size:13px}.ldv-spreadsheet-document{width:max-content;min-width:max-content}.ldv-sheet-tabs{position:sticky;top:0;z-index:1;display:flex;gap:4px;padding:8px 0;background:#e8edf2}.ldv-sheet-tab{height:30px;padding:0 10px;border:1px solid var(--ldv-border);border-radius:6px;background:var(--ldv-panel);color:var(--ldv-text);font-size:12px}.ldv-sheet-tab[aria-selected=true]{border-color:var(--ldv-accent);background:var(--ldv-accent-soft);color:#075e57}.ldv-table-document{display:flex;min-width:max-content;justify-content:center}.ldv-grid-document{display:block;justify-content:flex-start}.ldv-table-document table{border-collapse:collapse;border-spacing:0;color:#1d2733;empty-cells:show}.ldv-spreadsheet-grid{table-layout:fixed;background:var(--ldv-panel)}.ldv-table-document th,.ldv-table-document td{position:relative;min-width:96px;max-width:360px;padding:0!important;border:1px solid var(--ldv-border);overflow-wrap:anywhere;text-align:left;vertical-align:top}.ldv-spreadsheet-grid .ldv-sheet-corner,.ldv-spreadsheet-grid .ldv-row-header{width:48px;min-width:48px;max-width:48px;background:#f2f6fa;color:#4a5868;font-weight:700;text-align:center;vertical-align:middle}.ldv-spreadsheet-grid .ldv-sheet-corner{position:sticky;top:0;left:0;z-index:4;height:30px}.ldv-spreadsheet-grid .ldv-column-header{height:30px;background:#f2f6fa;color:#4a5868;font-weight:700;text-align:center;vertical-align:middle}.ldv-spreadsheet-grid .ldv-row-header{position:sticky;top:auto;left:0;z-index:2;height:30px}.ldv-spreadsheet-grid td{height:30px;background:#fff}.ldv-spreadsheet-grid .ldv-cell-has-comment{overflow:visible}.ldv-cell-comment{position:absolute;top:0;right:0;width:12px;height:12px;outline:none}.ldv-cell-comment-marker{position:absolute;top:0;right:0;width:0;height:0;border-top:10px solid #d83b01;border-left:10px solid transparent}.ldv-cell-comment-popover{position:absolute;top:12px;right:0;z-index:20;display:none;width:260px;max-width:min(320px,80vw);padding:8px 10px;border:1px solid #c8d1dc;border-radius:6px;background:#fff;box-shadow:0 8px 24px #0f172a2e;color:#1d2733;font-size:12px;line-height:1.4;white-space:pre-wrap}.ldv-cell-comment:hover .ldv-cell-comment-popover,.ldv-cell-comment:focus .ldv-cell-comment-popover,.ldv-cell-comment:focus-within .ldv-cell-comment-popover{display:grid;gap:8px}.ldv-cell-comment-item{display:grid;gap:2px}.ldv-cell-comment-item strong{color:#111827;font-size:12px}.ldv-cell-comment-item small{color:var(--ldv-muted);font-size:11px}.ldv-table-document th{position:sticky;top:0;z-index:1;background:#f2f6fa;color:#111827;font-weight:700}.ldv-spreadsheet-grid .ldv-sheet-corner{top:0;left:0;z-index:4}.ldv-spreadsheet-grid .ldv-column-header{top:0;z-index:3;text-align:center}.ldv-spreadsheet-grid .ldv-row-header{top:auto;left:0;z-index:2;color:#4a5868}.ldv-highlight{border-radius:3px;background:var(--ldv-highlight);color:inherit}.ldv-print-root{padding:4px}@media(max-width:720px){.ldv-root{border-radius:0}.ldv-toolbar{align-items:stretch}.ldv-file-name{max-width:100%;flex:1 1 100%}.ldv-search-control{max-width:none;flex-basis:100%}.ldv-viewport{padding:4px}.ldv-renderer-pptx .ldv-viewport,.ldv-renderer-spreadsheet .ldv-viewport,.ldv-renderer-csv .ldv-viewport{padding:0}.ldv-pptx-shell{grid-template-columns:148px minmax(280px,1fr)}.ldv-pptx-shell.ldv-pptx-sidebar-collapsed{grid-template-columns:44px minmax(280px,1fr)}.ldv-pptx-main{padding:8px}.ldv-rich-document,.ldv-text-document{padding:4px}}@media print{.ldv-toolbar{display:none}.ldv-root{height:auto!important;border:0}.ldv-viewport{overflow:visible;padding:0;background:#fff}.ldv-pdf-canvas,.ldv-image-document,.ldv-video-document,.ldv-rich-document,.ldv-text-document,.ldv-table-document table{box-shadow:none}}
|
|
1
|
+
.ldv-root{--ldv-bg: #f4f6f8;--ldv-panel: #ffffff;--ldv-panel-muted: #f8fafc;--ldv-border: #d8dee6;--ldv-border-strong: #aab4c0;--ldv-text: #17202a;--ldv-muted: #5f6f82;--ldv-accent: #0f766e;--ldv-accent-soft: #d8f3ef;--ldv-danger: #b42318;--ldv-warning: #8a4b0f;--ldv-highlight: #fff1a8;box-sizing:border-box;display:flex;min-height:320px;flex-direction:column;overflow:hidden;border:1px solid var(--ldv-border);border-radius:8px;background:var(--ldv-bg);color:var(--ldv-text);font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;letter-spacing:0}.ldv-root *,.ldv-root *:before,.ldv-root *:after{box-sizing:border-box}.ldv-root:fullscreen{width:100vw;height:100vh!important;border-radius:0}.ldv-toolbar{display:flex;flex:0 0 auto;flex-wrap:wrap;align-items:center;gap:8px;min-height:52px;padding:8px;border-bottom:1px solid var(--ldv-border);background:var(--ldv-panel-muted)}.ldv-toolbar-spacer{flex:1 1 24px}.ldv-control-group{display:inline-flex;align-items:center;gap:4px;padding:2px;border:1px solid var(--ldv-border);border-radius:7px;background:var(--ldv-panel)}.ldv-file-name{display:inline-flex;min-width:160px;max-width:min(280px,35vw);align-items:center;gap:8px;color:var(--ldv-text);font-size:13px;font-weight:600;white-space:nowrap}.ldv-file-name span{overflow:hidden;text-overflow:ellipsis}.ldv-icon-button,.ldv-zoom-reset,.ldv-sheet-tab{display:inline-flex;align-items:center;justify-content:center;border:0;background:transparent;color:var(--ldv-text);cursor:pointer;font:inherit}.ldv-icon-button{width:32px;height:32px;flex:0 0 32px;border-radius:6px}.ldv-icon-button:hover,.ldv-zoom-reset:hover,.ldv-sheet-tab:hover{background:#edf2f7}.ldv-icon-button:focus-visible,.ldv-zoom-reset:focus-visible,.ldv-sheet-tab:focus-visible,.ldv-page-control input:focus-visible,.ldv-search-control input:focus-visible{outline:2px solid var(--ldv-accent);outline-offset:2px}.ldv-icon-button[aria-pressed=true]{background:var(--ldv-accent-soft);color:#075e57}.ldv-icon-button:disabled{color:#9aa6b2;cursor:not-allowed}.ldv-icon-button[aria-busy=true]{cursor:progress}.ldv-icon-button-spinner{width:16px;height:16px;border:2px solid rgba(100,116,139,.28);border-top-color:var(--ldv-accent);border-radius:999px;animation:ldv-spin .7s linear infinite}.ldv-zoom-reset{min-width:76px;height:32px;gap:6px;padding:0 8px;border-radius:6px;color:var(--ldv-text);font-size:12px;font-weight:650}.ldv-page-control{display:inline-flex;align-items:center;gap:6px;padding:0 6px;color:var(--ldv-muted);font-size:12px;white-space:nowrap}.ldv-page-control input{width:58px;height:30px;border:1px solid var(--ldv-border);border-radius:5px;color:var(--ldv-text);font:inherit;text-align:center}.ldv-search-control{display:inline-flex;min-width:220px;max-width:360px;flex:1 1 240px;align-items:center;gap:8px;height:38px;padding:0 10px;border:1px solid var(--ldv-border);border-radius:7px;background:var(--ldv-panel);color:var(--ldv-muted)}.ldv-search-control input{min-width:80px;flex:1 1 auto;border:0;background:transparent;color:var(--ldv-text);font:inherit;outline:none}.ldv-search-status{max-width:120px;overflow:hidden;color:var(--ldv-muted);font-size:12px;text-overflow:ellipsis;white-space:nowrap}.ldv-viewport{position:relative;flex:1 1 auto;overflow:auto;padding:4px;background:#e8edf2}.ldv-renderer-pptx .ldv-viewport,.ldv-renderer-spreadsheet .ldv-viewport,.ldv-renderer-csv .ldv-viewport{padding:0}.ldv-renderer-pdf .ldv-viewport{overflow:hidden;padding:0}.ldv-renderer-spreadsheet .ldv-viewport{overflow:hidden}.ldv-renderer-media .ldv-viewport{overflow:hidden;padding:0}.ldv-renderer-image:has(.ldv-image-fit-page) .ldv-viewport{overflow:hidden}.ldv-renderer-status,.ldv-empty-state,.ldv-error,.ldv-unsupported{display:grid;min-height:100%;place-items:center;align-content:center;justify-items:center;gap:10px;padding:28px;color:var(--ldv-muted);text-align:center}.ldv-loader{display:flex;width:100%;min-height:100%;align-items:center;justify-content:center;gap:10px;padding:28px;color:var(--ldv-muted);font-weight:600}.ldv-loader-spinner{width:18px;height:18px;border:2px solid rgba(100,116,139,.28);border-top-color:var(--ldv-accent);border-radius:999px;animation:ldv-spin .7s linear infinite}.ldv-loading-overlay{position:absolute;top:0;right:0;bottom:0;left:0;z-index:20;display:flex;background:#e8edf2db}@keyframes ldv-spin{to{transform:rotate(360deg)}}.ldv-error{color:var(--ldv-danger)}.ldv-error strong,.ldv-unsupported h2{color:var(--ldv-text);font-size:18px}.ldv-unsupported p{max-width:640px;margin:0;color:var(--ldv-muted);line-height:1.55}.ldv-pdf-stage,.ldv-image-stage,.ldv-media-stage{display:flex;min-height:100%;align-items:flex-start;justify-content:center}.ldv-media-stage{width:100%;height:100%;align-items:center;padding:12px}.ldv-pdf-canvas,.ldv-pptx-slide-frame,.ldv-image-document,.ldv-video-document,.ldv-rich-document,.ldv-text-document,.ldv-table-document table{background:var(--ldv-panel);box-shadow:0 10px 28px #0f172a29}.ldv-pdf-canvas{display:block}.ldv-pdf-page-surface{position:relative;flex:0 0 auto}.ldv-pdf-highlight-layer{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none}.ldv-pdf-search-highlight{position:absolute;z-index:1;border-radius:2px;background:#fff1a8ad;mix-blend-mode:multiply}.ldv-pdf-shell{display:grid;width:100%;height:100%;min-height:100%;grid-template-columns:168px minmax(0,1fr);background:#e8edf2}.ldv-pdf-shell.ldv-pdf-sidebar-collapsed{grid-template-columns:44px minmax(0,1fr)}.ldv-pdf-shell.ldv-pdf-sidebar-disabled{grid-template-columns:minmax(0,1fr)}.ldv-pdf-sidebar{display:flex;min-width:0;flex-direction:column;overflow:hidden;border-right:1px solid var(--ldv-border);background:#f8fafc}.ldv-pdf-sidebar-toggle{display:inline-flex;width:32px;height:32px;flex:0 0 32px;align-items:center;justify-content:center;align-self:flex-end;margin:6px;border:0;border-radius:6px;background:transparent;color:var(--ldv-text);cursor:pointer}.ldv-pdf-sidebar-collapsed .ldv-pdf-sidebar-toggle{align-self:center}.ldv-pdf-sidebar-toggle:hover{background:#edf2f7}.ldv-pdf-sidebar-toggle:focus-visible,.ldv-pdf-thumbnail:focus-visible{outline:2px solid var(--ldv-accent);outline-offset:2px}.ldv-pdf-thumbnail-list,.ldv-pptx-thumbnail-list{flex:1 1 auto;min-height:0;overflow-x:hidden;overflow-y:auto;padding:0 6px 12px}.ldv-pdf-thumbnail-virtual-space,.ldv-pptx-thumbnail-virtual-space{position:relative;width:100%}.ldv-pdf-thumbnail,.ldv-pptx-thumbnail{position:absolute;top:0;left:50%;width:max-content;max-width:calc(100% - 8px)}.ldv-pdf-thumbnail:hover{background:#eef3f8}.ldv-pdf-thumbnail[aria-current=page]{border-color:var(--ldv-accent);background:#e8f5f3}.ldv-pdf-thumbnail-number{display:inline-flex;min-height:24px;align-items:center;justify-content:center;color:#4a5868;font-size:12px;font-weight:700}.ldv-pdf-thumbnail-canvas,.ldv-pptx-thumbnail-canvas{display:block;max-width:100%;border:0;background:var(--ldv-panel)}.ldv-pdf-thumbnail-preview,.ldv-pptx-thumbnail-preview{position:relative;box-sizing:content-box;display:inline-flex;align-items:center;justify-content:center;border:1px solid #cfd8e3;background:var(--ldv-panel);overflow:hidden;box-shadow:0 2px 8px #0f172a1f}.ldv-thumbnail-loader,.ldv-thumbnail-error{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;color:var(--ldv-muted);font-size:11px;font-weight:650}.ldv-thumbnail-loader-spinner{width:16px;height:16px;border:2px solid rgba(100,116,139,.28);border-top-color:var(--ldv-accent);border-radius:999px;animation:ldv-spin .7s linear infinite}.ldv-pdf-main{min-width:0;overflow:auto;padding:4px}.ldv-pdf-continuous-stage{display:flex;min-height:100%;flex-direction:column;align-items:center;gap:12px}.ldv-pdf-page-frame{display:flex;width:100%;justify-content:center}.ldv-pptx-shell{display:grid;width:100%;height:100%;min-height:100%;grid-template-columns:168px minmax(0,1fr);background:#e8edf2}.ldv-pptx-shell.ldv-pptx-sidebar-collapsed{grid-template-columns:44px minmax(0,1fr)}.ldv-pptx-shell.ldv-pptx-sidebar-disabled{grid-template-columns:minmax(0,1fr)}.ldv-pptx-sidebar{display:flex;min-width:0;flex-direction:column;overflow:hidden;border-right:1px solid var(--ldv-border);background:#f8fafc}.ldv-pptx-sidebar-toggle{display:inline-flex;width:32px;height:32px;flex:0 0 32px;align-items:center;justify-content:center;align-self:flex-end;margin:6px;border:0;border-radius:6px;background:transparent;color:var(--ldv-text);cursor:pointer}.ldv-pptx-sidebar-collapsed .ldv-pptx-sidebar-toggle{align-self:center}.ldv-pptx-sidebar-toggle:hover{background:#edf2f7}.ldv-pptx-sidebar-toggle:focus-visible,.ldv-pptx-thumbnail:focus-visible{outline:2px solid var(--ldv-accent);outline-offset:2px}.ldv-pdf-thumbnail,.ldv-pptx-thumbnail{display:grid;grid-template-columns:20px auto;gap:4px;align-items:start;padding:4px 4px 10px;border:1px solid transparent;border-radius:6px;background:transparent;color:var(--ldv-text);cursor:pointer;font:inherit;text-align:left}.ldv-pptx-thumbnail:hover{background:#eef3f8}.ldv-pptx-thumbnail[aria-current=page]{border-color:var(--ldv-accent);background:#e8f5f3}.ldv-pptx-thumbnail-number{display:inline-flex;min-height:24px;align-items:center;justify-content:center;color:#4a5868;font-size:12px;font-weight:700}.ldv-pptx-thumbnail-canvas{display:block;max-width:100%;border:0;background:var(--ldv-panel)}.ldv-pptx-main{min-width:0;overflow:auto;padding:12px}.ldv-pptx-stage{display:flex;width:max-content;min-width:100%;min-height:100%;align-items:center;justify-content:center}.ldv-pptx-slide-frame{position:relative;flex:0 0 auto;background:var(--ldv-panel)}.ldv-pptx-highlight-layer{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none}.ldv-pptx-search-highlight{position:absolute;z-index:1;border:2px solid rgba(217,119,6,.65);border-radius:3px;background:#fff1a86b}.ldv-pptx-canvas{display:block;width:100%;height:100%;background:var(--ldv-panel)}.ldv-pptx-render-status{position:absolute;top:0;right:0;bottom:0;left:0;display:grid;place-items:center;background:#ffffffb8;color:var(--ldv-muted);font-size:13px;font-weight:600}.ldv-image-stage{align-items:center}.ldv-image-document{display:block;max-width:none;transform-origin:center}.ldv-image-fit-width .ldv-image-document{width:100%;height:auto}.ldv-image-fit-page .ldv-image-document{max-width:100%;object-fit:contain}.ldv-video-document{width:100%;height:100%;max-width:100%;max-height:100%;background:#000;object-fit:contain}.ldv-audio-document{width:min(100%,640px)}.ldv-text-shell{display:flex;min-height:100%;justify-content:center}.ldv-text-document{width:min(100%,980px);min-height:100%;margin:0;padding:4px;overflow:auto;border:1px solid var(--ldv-border);border-radius:4px;color:#1d2733;font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,monospace;-moz-tab-size:2;tab-size:2;white-space:pre-wrap;word-break:break-word}.ldv-rich-document{width:min(100%,860px);min-height:100%;margin:0 auto;padding:4px;border:1px solid var(--ldv-border);border-radius:4px;color:#1d2733;line-height:1.65}.ldv-rich-document h1,.ldv-rich-document h2,.ldv-rich-document h3{color:#111827;line-height:1.2}.ldv-rich-document img{max-width:100%}.ldv-docx-preview-shell{width:max-content;max-width:none;margin:0 auto}.ldv-docx-document{color:#111827}.ldv-docx-document .docx-wrapper{padding:0!important;background:transparent!important}.ldv-docx-document .docx-wrapper>section.docx{margin:0 auto 20px!important;box-shadow:0 10px 28px #0f172a29!important}.ldv-docx-document img,.ldv-docx-document svg,.ldv-docx-document canvas{max-width:none}.ldv-docx-vml-textbox{display:inline-flex;align-items:center;box-sizing:border-box;overflow:hidden;padding:0 2pt;vertical-align:middle}.ldv-docx-vml-textbox p{width:100%;min-height:0!important;margin:0!important}.ldv-docx-vml-textbox span{line-height:1.05}.ldv-rich-document table{width:100%;border-collapse:collapse}.ldv-rich-document th,.ldv-rich-document td{padding:4px;border:1px solid var(--ldv-border);text-align:left;vertical-align:top}.ldv-warning{margin-bottom:18px;padding:10px 12px;border:1px solid #f4c27b;border-radius:6px;background:#fff8eb;color:var(--ldv-warning);font-size:13px}.ldv-spreadsheet-document{display:flex;height:100%;min-height:100%;width:100%;min-width:100%;flex-direction:column;overflow:hidden}.ldv-spreadsheet-grid-scroll{flex:1 1 auto;min-height:0;overflow:auto;overflow-anchor:none;overscroll-behavior:contain}.ldv-spreadsheet-virtual-grid{position:relative;min-width:100%;background:var(--ldv-panel);color:#1d2733}.ldv-spreadsheet-virtual-header{position:sticky;top:0;z-index:6;min-width:100%;background:#f2f6fa}.ldv-spreadsheet-virtual-body{position:absolute;top:0;right:0;bottom:0;left:0;overflow:visible}.ldv-spreadsheet-virtual-row{position:absolute;top:0;left:0;overflow:visible}.ldv-spreadsheet-virtual-corner,.ldv-spreadsheet-virtual-column-header,.ldv-spreadsheet-virtual-row-header,.ldv-spreadsheet-virtual-cell{box-sizing:border-box;border:1px solid var(--ldv-border)}.ldv-spreadsheet-virtual-corner{position:sticky;top:0;left:0;z-index:8;background:#f2f6fa}.ldv-spreadsheet-virtual-column-header{position:absolute;top:0;display:flex;align-items:center;justify-content:center;background:#f2f6fa;color:#4a5868;font-weight:700;text-align:center}.ldv-spreadsheet-virtual-row-header{position:sticky;left:0;z-index:4;display:flex;align-items:center;justify-content:center;background:#f2f6fa;color:#4a5868;font-weight:700;text-align:center}.ldv-spreadsheet-virtual-cell{position:absolute;top:0;overflow:hidden;padding:0;background:#fff;line-height:1.18}.ldv-spreadsheet-virtual-cell.ldv-cell-has-comment{overflow:visible}.ldv-sheet-tabs{flex:0 0 38px;z-index:5;display:flex;height:38px;width:100%;min-width:0;align-items:center;gap:4px;overflow-x:auto;overflow-y:hidden;border-top:1px solid var(--ldv-border);background:#e8edf2;padding:4px 8px;overscroll-behavior-x:contain;white-space:nowrap}.ldv-sheet-tab{height:30px;max-width:180px;flex:0 0 auto;padding:0 10px;border:1px solid var(--ldv-border);border-radius:6px;background:var(--ldv-panel);color:var(--ldv-text);font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ldv-sheet-tab[aria-selected=true]{border-color:var(--ldv-accent);background:var(--ldv-accent-soft);color:#075e57}.ldv-table-document{display:flex;min-width:max-content;justify-content:center}.ldv-grid-document{display:block;justify-content:flex-start}.ldv-table-document table{border-collapse:collapse;border-spacing:0;color:#1d2733;empty-cells:show}.ldv-spreadsheet-grid{table-layout:fixed;background:var(--ldv-panel)}.ldv-table-document th,.ldv-table-document td{position:relative;min-width:96px;max-width:360px;padding:0;border:1px solid var(--ldv-border);overflow-wrap:anywhere;text-align:left;vertical-align:top}.ldv-spreadsheet-grid .ldv-sheet-corner,.ldv-spreadsheet-grid .ldv-row-header{width:48px;min-width:48px;max-width:48px;background:#f2f6fa;color:#4a5868;font-weight:700;text-align:center;vertical-align:middle}.ldv-spreadsheet-grid .ldv-sheet-corner{position:sticky;top:0;left:0;z-index:4;height:30px}.ldv-spreadsheet-grid .ldv-column-header{height:30px;background:#f2f6fa;color:#4a5868;font-weight:700;text-align:center;vertical-align:middle}.ldv-spreadsheet-grid .ldv-row-header{position:sticky;top:auto;left:0;z-index:2;height:30px}.ldv-spreadsheet-grid td{height:30px;background:#fff}.ldv-spreadsheet-grid .ldv-cell-has-comment{overflow:visible}.ldv-cell-comment{position:absolute;top:0;right:0;width:12px;height:12px;outline:none}.ldv-cell-comment-marker{position:absolute;top:0;right:0;width:0;height:0;border-top:10px solid #d83b01;border-left:10px solid transparent}.ldv-cell-comment-popover{position:absolute;top:12px;right:0;z-index:20;display:none;width:260px;max-width:min(320px,80vw);padding:8px 10px;border:1px solid #c8d1dc;border-radius:6px;background:#fff;box-shadow:0 8px 24px #0f172a2e;color:#1d2733;font-size:12px;line-height:1.4;white-space:pre-wrap}.ldv-cell-comment:hover .ldv-cell-comment-popover,.ldv-cell-comment:focus .ldv-cell-comment-popover,.ldv-cell-comment:focus-within .ldv-cell-comment-popover{display:grid;gap:8px}.ldv-cell-comment-item{display:grid;gap:2px}.ldv-cell-comment-item strong{color:#111827;font-size:12px}.ldv-cell-comment-item small{color:var(--ldv-muted);font-size:11px}.ldv-table-document th{position:sticky;top:0;z-index:1;background:#f2f6fa;color:#111827;font-weight:700}.ldv-spreadsheet-grid .ldv-sheet-corner{top:0;left:0;z-index:4}.ldv-spreadsheet-grid .ldv-column-header{top:0;z-index:3;text-align:center}.ldv-spreadsheet-grid .ldv-row-header{top:auto;left:0;z-index:2;color:#4a5868}.ldv-highlight{border-radius:3px;background:var(--ldv-highlight);color:inherit}.ldv-print-root{padding:4px}@media(max-width:720px){.ldv-root{border-radius:0}.ldv-toolbar{align-items:stretch}.ldv-file-name{max-width:100%;flex:1 1 100%}.ldv-search-control{max-width:none;flex-basis:100%}.ldv-viewport{padding:4px}.ldv-renderer-pptx .ldv-viewport,.ldv-renderer-spreadsheet .ldv-viewport,.ldv-renderer-csv .ldv-viewport{padding:0}.ldv-pptx-shell{grid-template-columns:148px minmax(280px,1fr)}.ldv-pptx-shell.ldv-pptx-sidebar-collapsed{grid-template-columns:44px minmax(280px,1fr)}.ldv-pptx-main{padding:8px}.ldv-rich-document,.ldv-text-document{padding:4px}}@media print{.ldv-toolbar{display:none}.ldv-root{height:auto!important;border:0}.ldv-viewport{overflow:visible;padding:0;background:#fff}.ldv-pdf-canvas,.ldv-image-document,.ldv-video-document,.ldv-rich-document,.ldv-text-document,.ldv-table-document table{box-shadow:none}}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { DocumentViewer } from './DocumentViewer';
|
|
2
2
|
export { builtInRenderers } from './renderers';
|
|
3
3
|
export { configurePdfWorker } from './renderers/PdfRenderer';
|
|
4
|
-
export type { BinaryDocumentData, DocumentInfo, DocumentRenderer, DocumentRendererProps, DocumentSource, DocumentViewerControls, DocumentViewerLabels, DocumentViewerProps, FitMode, RendererActions, ResolvedDocument, ResolvedDocumentViewerControls, SearchStats, ViewerRuntimeState, } from './types';
|
|
4
|
+
export type { BinaryDocumentData, DocumentInfo, DocumentRenderer, DocumentRendererProps, DocumentSource, DocumentViewerControls, DocumentViewerLabels, DocumentViewerPdfOptions, DocumentViewerProps, DocumentViewerUserSelect, FitMode, RendererActions, ResolvedDocument, ResolvedDocumentViewerControls, ResolvedDocumentViewerPdfOptions, SearchStats, ViewerRuntimeState, } from './types';
|
|
5
5
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,YAAY,EACV,kBAAkB,EAClB,YAAY,EACZ,gBAAgB,EAChB,qBAAqB,EACrB,cAAc,EACd,sBAAsB,EACtB,oBAAoB,EACpB,mBAAmB,EACnB,OAAO,EACP,eAAe,EACf,gBAAgB,EAChB,8BAA8B,EAC9B,WAAW,EACX,kBAAkB,GACnB,MAAM,SAAS,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,YAAY,EACV,kBAAkB,EAClB,YAAY,EACZ,gBAAgB,EAChB,qBAAqB,EACrB,cAAc,EACd,sBAAsB,EACtB,oBAAoB,EACpB,wBAAwB,EACxB,mBAAmB,EACnB,wBAAwB,EACxB,OAAO,EACP,eAAe,EACf,gBAAgB,EAChB,8BAA8B,EAC9B,gCAAgC,EAChC,WAAW,EACX,kBAAkB,GACnB,MAAM,SAAS,CAAC"}
|