react-docxodus-viewer 0.2.1 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,179 +1,114 @@
1
- # Docxodus Viewer
1
+ # react-docxodus-viewer
2
2
 
3
- A client-side DOCX document viewer and comparison tool built with React. All document processing happens entirely in your browser using WebAssembly - no files are uploaded to any server.
3
+ A React component for viewing DOCX documents in the browser, powered by [Docxodus](https://github.com/JSv4/Docxodus). All document processing happens entirely in the browser using WebAssembly - no server required.
4
4
 
5
- **[Live Demo](https://jsv4.github.io/Docxodus-Viewer/)** | **[Docxodus Engine](https://github.com/JSv4/Docxodus)**
5
+ **[Live Demo](https://jsv4.github.io/react-docxodus-viewer/)** | **[Docxodus Engine](https://github.com/JSv4/Docxodus)** | **[npm](https://www.npmjs.com/package/react-docxodus-viewer)**
6
6
 
7
7
  ## Features
8
8
 
9
- ### Document Viewer
10
- - Convert DOCX files to HTML for viewing in the browser
11
- - **Comment rendering** with multiple display modes:
12
- - **Disabled** - Hide all comments
13
- - **Endnotes** - Comments appear at the end with numbered references
14
- - **Inline** - Comments shown as tooltips on hover
15
- - **Margin** - Comments displayed in a side column
16
- - **Advanced options** (collapsible panel):
17
- - Page title, CSS prefix, comment CSS prefix
18
- - Fabricate CSS classes toggle
19
- - Custom additional CSS
20
-
21
- ### Document Comparison
22
- - Compare two DOCX files and generate a redlined document with tracked changes
23
- - Visual diff with insertions (green), deletions (red), and moves (purple) highlighted
24
- - **Configurable comparison options:**
25
- - **Detail Level** - Control comparison granularity (lower = more detailed)
26
- - **Case-insensitive** - Ignore case differences when comparing
27
- - **Author name** - Set the author for tracked changes
28
- - **Show tracked changes** - Toggle visibility of changes in preview
29
- - Download the comparison result as a DOCX file with tracked changes
30
-
31
- ### Revision Extraction
32
- - Extract structured revision data from documents with tracked changes
33
- - View revision details: type, author, date, and changed text
34
- - Summary statistics for insertions, deletions, and moves
35
- - **Move detection options** (collapsible panel):
36
- - Enable/disable move detection
37
- - Similarity threshold (50-100%)
38
- - Minimum word count filter
39
- - Case-insensitive matching
40
- - Move pair linking with group badges
41
-
42
- ## Technology
43
-
44
- - **React 19** with TypeScript
45
- - **Vite** for fast development and optimized builds
46
- - **[Docxodus](https://github.com/docxodus/docxodus)** - WebAssembly-powered DOCX processing engine
9
+ - 📄 **DOCX to HTML conversion** - View Word documents directly in the browser
10
+ - 🔄 **Web Worker support** - Non-blocking conversion in background thread (enabled by default)
11
+ - 📊 **Progressive loading** - Page placeholders show while documents convert
12
+ - 📝 **Tracked changes** - View insertions, deletions, moves, and formatting changes
13
+ - 💬 **Comments** - Multiple rendering modes (endnotes, inline, margin)
14
+ - 📑 **Pagination** - PDF.js-style page view with smooth scrolling
15
+ - ⚙️ **Customizable** - CSS variables for theming, configurable height
47
16
 
48
- ## Privacy
49
-
50
- All document processing happens locally in your browser. Your files never leave your device - there's no server-side processing, no uploads, and no data collection.
51
-
52
- ## Getting Started
53
-
54
- ### Prerequisites
55
-
56
- - Node.js 18+
57
- - npm or yarn
58
-
59
- ### Installation
17
+ ## Installation
60
18
 
61
19
  ```bash
62
- # Clone the repository
63
- git clone https://github.com/JSv4/Docxodus-Viewer.git
64
- cd Docxodus-Viewer
65
-
66
- # Install dependencies
67
- npm install
68
-
69
- # Start development server
70
- npm run dev
20
+ npm install react-docxodus-viewer docxodus
71
21
  ```
72
22
 
73
- The app will be available at `http://localhost:5173`
23
+ ## Quick Start
74
24
 
75
- ### Building for Production
25
+ ```tsx
26
+ import { DocumentViewer } from 'react-docxodus-viewer';
27
+ import 'react-docxodus-viewer/styles.css';
76
28
 
77
- ```bash
78
- npm run build
29
+ function App() {
30
+ return (
31
+ <DocumentViewer
32
+ placeholder="Select a DOCX file to view"
33
+ />
34
+ );
35
+ }
79
36
  ```
80
37
 
81
- The built files will be in the `dist/` directory.
82
-
83
- ### Updating Docxodus
84
-
85
- When upgrading the docxodus package, you must also update the WASM files in the `public/` directory:
86
-
87
- ```bash
88
- # 1. Update the package
89
- npm install docxodus@latest
90
-
91
- # 2. Copy WASM files to public directory
92
- rm -rf public/wasm && cp -r node_modules/docxodus/dist/wasm public/wasm
93
-
94
- # 3. Rebuild
95
- npm run build
38
+ ## Props
39
+
40
+ | Prop | Type | Default | Description |
41
+ |------|------|---------|-------------|
42
+ | `file` | `File \| null` | - | Controlled file input |
43
+ | `html` | `string \| null` | - | Controlled HTML output |
44
+ | `onFileChange` | `(file: File \| null) => void` | - | Called when file changes |
45
+ | `onConversionComplete` | `(html: string) => void` | - | Called when conversion finishes |
46
+ | `onError` | `(error: Error) => void` | - | Called on conversion error |
47
+ | `settings` | `ViewerSettings` | - | Controlled viewer settings |
48
+ | `defaultSettings` | `Partial<ViewerSettings>` | - | Initial settings (uncontrolled) |
49
+ | `toolbar` | `'top' \| 'bottom' \| 'none'` | `'top'` | Toolbar position |
50
+ | `showSettingsButton` | `boolean` | `true` | Show settings gear icon |
51
+ | `showRevisionsTab` | `boolean` | `true` | Show tracked changes tab |
52
+ | `placeholder` | `string` | `'Open a DOCX file to view'` | Empty state message |
53
+ | `useWorker` | `boolean` | `true` | Use Web Worker for conversion |
54
+ | `wasmBasePath` | `string` | - | Custom WASM file location |
55
+ | `className` | `string` | - | Additional CSS class |
56
+ | `style` | `CSSProperties` | - | Inline styles |
57
+
58
+ ## Viewer Settings
59
+
60
+ ```tsx
61
+ interface ViewerSettings {
62
+ commentMode: 'disabled' | 'endnote' | 'inline' | 'margin';
63
+ annotationMode: 'disabled' | 'above' | 'inline' | 'tooltip' | 'none';
64
+ paginationScale: number; // 0.3 - 2.0
65
+ showPageNumbers: boolean;
66
+ renderFootnotesAndEndnotes: boolean;
67
+ renderHeadersAndFooters: boolean;
68
+ renderTrackedChanges: boolean;
69
+ showDeletedContent: boolean;
70
+ renderMoveOperations: boolean;
71
+ }
96
72
  ```
97
73
 
98
- The WASM files in `public/wasm/` are served statically and must match the installed package version.
99
-
100
- ## Deployment
101
-
102
- ### GitHub Pages
103
-
104
- This repository includes a GitHub Actions workflow that automatically builds and deploys to GitHub Pages on push to `main`.
105
-
106
- To enable:
107
- 1. Go to your repository Settings > Pages
108
- 2. Set Source to "GitHub Actions"
109
- 3. Push to `main` branch
74
+ ## CSS Customization
110
75
 
111
- **Important:** GitHub Pages doesn't support custom HTTP headers. The required COOP/COEP headers for SharedArrayBuffer are injected via a service worker. This is handled automatically by the build.
76
+ Override CSS variables to customize the viewer:
112
77
 
113
- ### Netlify
78
+ ```css
79
+ .rdv-viewer {
80
+ /* Height constraints */
81
+ --rdv-height: 80vh;
82
+ --rdv-min-height: 400px;
83
+ --rdv-max-height: 90vh;
114
84
 
115
- Add a `netlify.toml` to your repo root:
116
-
117
- ```toml
118
- [[headers]]
119
- for = "/*"
120
- [headers.values]
121
- Cross-Origin-Opener-Policy = "same-origin"
122
- Cross-Origin-Embedder-Policy = "require-corp"
123
- ```
124
-
125
- ### Vercel
126
-
127
- Add a `vercel.json` to your repo root:
128
-
129
- ```json
130
- {
131
- "headers": [
132
- {
133
- "source": "/(.*)",
134
- "headers": [
135
- { "key": "Cross-Origin-Opener-Policy", "value": "same-origin" },
136
- { "key": "Cross-Origin-Embedder-Policy", "value": "require-corp" }
137
- ]
138
- }
139
- ]
85
+ /* Colors */
86
+ --rdv-background: #525659;
87
+ --rdv-toolbar-bg: #323639;
88
+ --rdv-btn-bg: #474c50;
89
+ --rdv-btn-color: #d4d4d4;
140
90
  }
141
91
  ```
142
92
 
143
- ### Other Platforms
144
-
145
- The app requires specific CORS headers for the .NET WebAssembly runtime:
146
-
147
- ```
148
- Cross-Origin-Opener-Policy: same-origin
149
- Cross-Origin-Embedder-Policy: require-corp
150
- ```
93
+ ## Controlled Mode
151
94
 
152
- Ensure your hosting platform sets these headers. Platforms like Netlify and Vercel support custom headers via configuration files.
95
+ For full control over state:
153
96
 
154
- ## Project Structure
97
+ ```tsx
98
+ function ControlledViewer() {
99
+ const [file, setFile] = useState<File | null>(null);
100
+ const [html, setHtml] = useState<string | null>(null);
155
101
 
102
+ return (
103
+ <DocumentViewer
104
+ file={file}
105
+ html={html}
106
+ onFileChange={setFile}
107
+ onConversionComplete={setHtml}
108
+ />
109
+ );
110
+ }
156
111
  ```
157
- src/
158
- ├── App.tsx # Main app with tab navigation
159
- ├── App.css # Application styles
160
- ├── components/
161
- │ ├── DocumentViewer.tsx # DOCX to HTML conversion
162
- │ ├── DocumentComparer.tsx # Two-document comparison
163
- │ └── RevisionViewer.tsx # Revision extraction
164
- └── main.tsx # Entry point
165
- ```
166
-
167
- ## Docxodus Library
168
-
169
- This viewer is powered by [Docxodus](https://github.com/docxodus/docxodus), a WebAssembly library for DOCX processing. For more information about the underlying engine, including:
170
-
171
- - API documentation
172
- - Comment rendering architecture
173
- - Comparison algorithm details
174
- - Bundle size and browser support
175
-
176
- Visit the [Docxodus repository](https://github.com/JSv4/Docxodus).
177
112
 
178
113
  ## Browser Support
179
114
 
@@ -184,10 +119,15 @@ Visit the [Docxodus repository](https://github.com/JSv4/Docxodus).
184
119
 
185
120
  Requires WebAssembly SIMD support.
186
121
 
187
- ## License
122
+ ## Privacy
188
123
 
189
- MIT
124
+ All document processing happens locally in your browser. Files are never uploaded to any server.
125
+
126
+ ## Related
190
127
 
191
- ## Contributing
128
+ - [Docxodus](https://github.com/JSv4/Docxodus) - The WebAssembly engine powering this viewer
129
+ - [Live Demo](https://jsv4.github.io/react-docxodus-viewer/) - Try it out
192
130
 
193
- Contributions are welcome! Please feel free to submit a Pull Request.
131
+ ## License
132
+
133
+ MIT
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),a=require("react"),pe=require("docxodus/react"),i=require("docxodus");var ae=typeof document<"u"?document.currentScript:null;function z(){return`${Date.now()}-${Math.random().toString(36).slice(2,11)}`}async function w(s){if(s instanceof Uint8Array)return s;const o=await s.arrayBuffer();return new Uint8Array(o)}function Te(){if(typeof document<"u"){const s=document.querySelectorAll('script[src*="docxodus"]');if(s.length>0){const o=s[0].src;return o.substring(0,o.lastIndexOf("/")+1)+"wasm/"}}return"/wasm/"}async function Ee(s){const o=s?.wasmBasePath??Te(),Z=new URL("data:text/javascript;base64,Ly8gc3JjL2RvY3hvZHVzLndvcmtlci50cwp2YXIgd2FzbUV4cG9ydHMgPSBudWxsOwp2YXIgaW5pdFByb21pc2UgPSBudWxsOwphc3luYyBmdW5jdGlvbiBpbml0aWFsaXplV2FzbShiYXNlUGF0aCkgewogIGlmICh3YXNtRXhwb3J0cykgewogICAgcmV0dXJuOwogIH0KICBpZiAoaW5pdFByb21pc2UpIHsKICAgIHJldHVybiBpbml0UHJvbWlzZTsKICB9CiAgaW5pdFByb21pc2UgPSAoYXN5bmMgKCkgPT4gewogICAgdHJ5IHsKICAgICAgY29uc3Qgbm9ybWFsaXplZFBhdGggPSBiYXNlUGF0aC5lbmRzV2l0aCgiLyIpID8gYmFzZVBhdGggOiBiYXNlUGF0aCArICIvIjsKICAgICAgY29uc3QgZG90bmV0TW9kdWxlID0gYXdhaXQgaW1wb3J0KAogICAgICAgIC8qIHdlYnBhY2tJZ25vcmU6IHRydWUgKi8KICAgICAgICBgJHtub3JtYWxpemVkUGF0aH1fZnJhbWV3b3JrL2RvdG5ldC5qc2AKICAgICAgKTsKICAgICAgY29uc3QgeyBnZXRBc3NlbWJseUV4cG9ydHMsIGdldENvbmZpZyB9ID0gYXdhaXQgZG90bmV0TW9kdWxlLmRvdG5ldC53aXRoRGlhZ25vc3RpY1RyYWNpbmcoZmFsc2UpLmNyZWF0ZSgpOwogICAgICBjb25zdCBjb25maWcgPSBnZXRDb25maWcoKTsKICAgICAgY29uc3QgZXhwb3J0cyA9IGF3YWl0IGdldEFzc2VtYmx5RXhwb3J0cyhjb25maWcubWFpbkFzc2VtYmx5TmFtZSk7CiAgICAgIHdhc21FeHBvcnRzID0gewogICAgICAgIERvY3VtZW50Q29udmVydGVyOiBleHBvcnRzLkRvY3hvZHVzV2FzbS5Eb2N1bWVudENvbnZlcnRlciwKICAgICAgICBEb2N1bWVudENvbXBhcmVyOiBleHBvcnRzLkRvY3hvZHVzV2FzbS5Eb2N1bWVudENvbXBhcmVyCiAgICAgIH07CiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICBpbml0UHJvbWlzZSA9IG51bGw7CiAgICAgIHRocm93IGVycm9yOwogICAgfQogIH0pKCk7CiAgcmV0dXJuIGluaXRQcm9taXNlOwp9CmZ1bmN0aW9uIGVuc3VyZUluaXRpYWxpemVkKCkgewogIGlmICghd2FzbUV4cG9ydHMpIHsKICAgIHRocm93IG5ldyBFcnJvcigiV29ya2VyIG5vdCBpbml0aWFsaXplZC4gQ2FsbCBpbml0IGZpcnN0LiIpOwogIH0KICByZXR1cm4gd2FzbUV4cG9ydHM7Cn0KZnVuY3Rpb24gaXNFcnJvclJlc3BvbnNlKHJlc3VsdCkgewogIHJldHVybiByZXN1bHQuc3RhcnRzV2l0aCgieyIpICYmIHJlc3VsdC5pbmNsdWRlcygnIkVycm9yIicpOwp9CmZ1bmN0aW9uIHBhcnNlRXJyb3IocmVzdWx0KSB7CiAgdHJ5IHsKICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UocmVzdWx0KTsKICAgIHJldHVybiB7IGVycm9yOiBwYXJzZWQuRXJyb3IgfHwgcGFyc2VkLmVycm9yIHx8ICJVbmtub3duIGVycm9yIiB9OwogIH0gY2F0Y2ggewogICAgcmV0dXJuIHsgZXJyb3I6IHJlc3VsdCB9OwogIH0KfQpmdW5jdGlvbiBoYW5kbGVDb252ZXJ0KHJlcXVlc3QpIHsKICBjb25zdCBleHBvcnRzID0gZW5zdXJlSW5pdGlhbGl6ZWQoKTsKICBjb25zdCBvcHRpb25zID0gcmVxdWVzdC5vcHRpb25zOwogIHRyeSB7CiAgICBsZXQgcmVzdWx0OwogICAgY29uc3QgbmVlZHNDb21wbGV0ZU1ldGhvZCA9IG9wdGlvbnM/LnJlbmRlckZvb3Rub3Rlc0FuZEVuZG5vdGVzICE9PSB2b2lkIDAgfHwgb3B0aW9ucz8ucmVuZGVySGVhZGVyc0FuZEZvb3RlcnMgIT09IHZvaWQgMCB8fCBvcHRpb25zPy5yZW5kZXJUcmFja2VkQ2hhbmdlcyAhPT0gdm9pZCAwIHx8IG9wdGlvbnM/LnNob3dEZWxldGVkQ29udGVudCAhPT0gdm9pZCAwIHx8IG9wdGlvbnM/LnJlbmRlck1vdmVPcGVyYXRpb25zICE9PSB2b2lkIDA7CiAgICBpZiAobmVlZHNDb21wbGV0ZU1ldGhvZCB8fCBvcHRpb25zPy5yZW5kZXJBbm5vdGF0aW9ucykgewogICAgICByZXN1bHQgPSBleHBvcnRzLkRvY3VtZW50Q29udmVydGVyLkNvbnZlcnREb2N4VG9IdG1sQ29tcGxldGUoCiAgICAgICAgcmVxdWVzdC5kb2N1bWVudEJ5dGVzLAogICAgICAgIG9wdGlvbnM/LnBhZ2VUaXRsZSA/PyAiRG9jdW1lbnQiLAogICAgICAgIG9wdGlvbnM/LmNzc1ByZWZpeCA/PyAiZG9jeC0iLAogICAgICAgIG9wdGlvbnM/LmZhYnJpY2F0ZUNsYXNzZXMgPz8gdHJ1ZSwKICAgICAgICBvcHRpb25zPy5hZGRpdGlvbmFsQ3NzID8/ICIiLAogICAgICAgIG9wdGlvbnM/LmNvbW1lbnRSZW5kZXJNb2RlID8/IC0xLAogICAgICAgIG9wdGlvbnM/LmNvbW1lbnRDc3NDbGFzc1ByZWZpeCA/PyAiY29tbWVudC0iLAogICAgICAgIG9wdGlvbnM/LnBhZ2luYXRpb25Nb2RlID8/IDAsCiAgICAgICAgb3B0aW9ucz8ucGFnaW5hdGlvblNjYWxlID8/IDEsCiAgICAgICAgb3B0aW9ucz8ucGFnaW5hdGlvbkNzc0NsYXNzUHJlZml4ID8/ICJwYWdlLSIsCiAgICAgICAgb3B0aW9ucz8ucmVuZGVyQW5ub3RhdGlvbnMgPz8gZmFsc2UsCiAgICAgICAgb3B0aW9ucz8uYW5ub3RhdGlvbkxhYmVsTW9kZSA/PyAwLAogICAgICAgIG9wdGlvbnM/LmFubm90YXRpb25Dc3NDbGFzc1ByZWZpeCA/PyAiYW5ub3QtIiwKICAgICAgICBvcHRpb25zPy5yZW5kZXJGb290bm90ZXNBbmRFbmRub3RlcyA/PyBmYWxzZSwKICAgICAgICBvcHRpb25zPy5yZW5kZXJIZWFkZXJzQW5kRm9vdGVycyA/PyBmYWxzZSwKICAgICAgICBvcHRpb25zPy5yZW5kZXJUcmFja2VkQ2hhbmdlcyA/PyBmYWxzZSwKICAgICAgICBvcHRpb25zPy5zaG93RGVsZXRlZENvbnRlbnQgPz8gdHJ1ZSwKICAgICAgICBvcHRpb25zPy5yZW5kZXJNb3ZlT3BlcmF0aW9ucyA/PyB0cnVlCiAgICAgICk7CiAgICB9IGVsc2UgaWYgKG9wdGlvbnM/LnBhZ2luYXRpb25Nb2RlICE9PSB2b2lkIDAgJiYgb3B0aW9ucy5wYWdpbmF0aW9uTW9kZSAhPT0gMCkgewogICAgICByZXN1bHQgPSBleHBvcnRzLkRvY3VtZW50Q29udmVydGVyLkNvbnZlcnREb2N4VG9IdG1sV2l0aFBhZ2luYXRpb24oCiAgICAgICAgcmVxdWVzdC5kb2N1bWVudEJ5dGVzLAogICAgICAgIG9wdGlvbnMucGFnZVRpdGxlID8/ICJEb2N1bWVudCIsCiAgICAgICAgb3B0aW9ucy5jc3NQcmVmaXggPz8gImRvY3gtIiwKICAgICAgICBvcHRpb25zLmZhYnJpY2F0ZUNsYXNzZXMgPz8gdHJ1ZSwKICAgICAgICBvcHRpb25zLmFkZGl0aW9uYWxDc3MgPz8gIiIsCiAgICAgICAgb3B0aW9ucy5jb21tZW50UmVuZGVyTW9kZSA/PyAtMSwKICAgICAgICBvcHRpb25zLmNvbW1lbnRDc3NDbGFzc1ByZWZpeCA/PyAiY29tbWVudC0iLAogICAgICAgIG9wdGlvbnMucGFnaW5hdGlvbk1vZGUsCiAgICAgICAgb3B0aW9ucy5wYWdpbmF0aW9uU2NhbGUgPz8gMSwKICAgICAgICBvcHRpb25zLnBhZ2luYXRpb25Dc3NDbGFzc1ByZWZpeCA/PyAicGFnZS0iCiAgICAgICk7CiAgICB9IGVsc2UgaWYgKG9wdGlvbnMpIHsKICAgICAgcmVzdWx0ID0gZXhwb3J0cy5Eb2N1bWVudENvbnZlcnRlci5Db252ZXJ0RG9jeFRvSHRtbFdpdGhPcHRpb25zKAogICAgICAgIHJlcXVlc3QuZG9jdW1lbnRCeXRlcywKICAgICAgICBvcHRpb25zLnBhZ2VUaXRsZSA/PyAiRG9jdW1lbnQiLAogICAgICAgIG9wdGlvbnMuY3NzUHJlZml4ID8/ICJkb2N4LSIsCiAgICAgICAgb3B0aW9ucy5mYWJyaWNhdGVDbGFzc2VzID8/IHRydWUsCiAgICAgICAgb3B0aW9ucy5hZGRpdGlvbmFsQ3NzID8/ICIiLAogICAgICAgIG9wdGlvbnMuY29tbWVudFJlbmRlck1vZGUgPz8gLTEsCiAgICAgICAgb3B0aW9ucy5jb21tZW50Q3NzQ2xhc3NQcmVmaXggPz8gImNvbW1lbnQtIgogICAgICApOwogICAgfSBlbHNlIHsKICAgICAgcmVzdWx0ID0gZXhwb3J0cy5Eb2N1bWVudENvbnZlcnRlci5Db252ZXJ0RG9jeFRvSHRtbCgKICAgICAgICByZXF1ZXN0LmRvY3VtZW50Qnl0ZXMKICAgICAgKTsKICAgIH0KICAgIGlmIChpc0Vycm9yUmVzcG9uc2UocmVzdWx0KSkgewogICAgICByZXR1cm4gcGFyc2VFcnJvcihyZXN1bHQpOwogICAgfQogICAgcmV0dXJuIHsgaHRtbDogcmVzdWx0IH07CiAgfSBjYXRjaCAoZXJyb3IpIHsKICAgIHJldHVybiB7IGVycm9yOiBTdHJpbmcoZXJyb3IpIH07CiAgfQp9CmZ1bmN0aW9uIGhhbmRsZUNvbXBhcmUocmVxdWVzdCkgewogIGNvbnN0IGV4cG9ydHMgPSBlbnN1cmVJbml0aWFsaXplZCgpOwogIGNvbnN0IG9wdGlvbnMgPSByZXF1ZXN0Lm9wdGlvbnM7CiAgdHJ5IHsKICAgIGxldCByZXN1bHQ7CiAgICBpZiAob3B0aW9ucz8uZGV0YWlsVGhyZXNob2xkICE9PSB2b2lkIDAgfHwgb3B0aW9ucz8uY2FzZUluc2Vuc2l0aXZlKSB7CiAgICAgIHJlc3VsdCA9IGV4cG9ydHMuRG9jdW1lbnRDb21wYXJlci5Db21wYXJlRG9jdW1lbnRzV2l0aE9wdGlvbnMoCiAgICAgICAgcmVxdWVzdC5vcmlnaW5hbEJ5dGVzLAogICAgICAgIHJlcXVlc3QubW9kaWZpZWRCeXRlcywKICAgICAgICBvcHRpb25zPy5hdXRob3JOYW1lID8/ICJEb2N4b2R1cyIsCiAgICAgICAgb3B0aW9ucz8uZGV0YWlsVGhyZXNob2xkID8/IDAuMTUsCiAgICAgICAgb3B0aW9ucz8uY2FzZUluc2Vuc2l0aXZlID8/IGZhbHNlCiAgICAgICk7CiAgICB9IGVsc2UgewogICAgICByZXN1bHQgPSBleHBvcnRzLkRvY3VtZW50Q29tcGFyZXIuQ29tcGFyZURvY3VtZW50cygKICAgICAgICByZXF1ZXN0Lm9yaWdpbmFsQnl0ZXMsCiAgICAgICAgcmVxdWVzdC5tb2RpZmllZEJ5dGVzLAogICAgICAgIG9wdGlvbnM/LmF1dGhvck5hbWUgPz8gIkRvY3hvZHVzIgogICAgICApOwogICAgfQogICAgaWYgKHJlc3VsdC5sZW5ndGggPT09IDApIHsKICAgICAgcmV0dXJuIHsgZXJyb3I6ICJDb21wYXJpc29uIHJldHVybmVkIGVtcHR5IHJlc3VsdCIgfTsKICAgIH0KICAgIHJldHVybiB7IGRvY3VtZW50Qnl0ZXM6IHJlc3VsdCB9OwogIH0gY2F0Y2ggKGVycm9yKSB7CiAgICByZXR1cm4geyBlcnJvcjogU3RyaW5nKGVycm9yKSB9OwogIH0KfQpmdW5jdGlvbiBoYW5kbGVDb21wYXJlVG9IdG1sKHJlcXVlc3QpIHsKICBjb25zdCBleHBvcnRzID0gZW5zdXJlSW5pdGlhbGl6ZWQoKTsKICBjb25zdCBvcHRpb25zID0gcmVxdWVzdC5vcHRpb25zOwogIHRyeSB7CiAgICBjb25zdCByZW5kZXJUcmFja2VkQ2hhbmdlcyA9IG9wdGlvbnM/LnJlbmRlclRyYWNrZWRDaGFuZ2VzID8/IHRydWU7CiAgICBjb25zdCByZXN1bHQgPSBleHBvcnRzLkRvY3VtZW50Q29tcGFyZXIuQ29tcGFyZURvY3VtZW50c1RvSHRtbFdpdGhPcHRpb25zKAogICAgICByZXF1ZXN0Lm9yaWdpbmFsQnl0ZXMsCiAgICAgIHJlcXVlc3QubW9kaWZpZWRCeXRlcywKICAgICAgb3B0aW9ucz8uYXV0aG9yTmFtZSA/PyAiRG9jeG9kdXMiLAogICAgICByZW5kZXJUcmFja2VkQ2hhbmdlcwogICAgKTsKICAgIGlmIChpc0Vycm9yUmVzcG9uc2UocmVzdWx0KSkgewogICAgICByZXR1cm4gcGFyc2VFcnJvcihyZXN1bHQpOwogICAgfQogICAgcmV0dXJuIHsgaHRtbDogcmVzdWx0IH07CiAgfSBjYXRjaCAoZXJyb3IpIHsKICAgIHJldHVybiB7IGVycm9yOiBTdHJpbmcoZXJyb3IpIH07CiAgfQp9CmZ1bmN0aW9uIGhhbmRsZUdldFJldmlzaW9ucyhyZXF1ZXN0KSB7CiAgY29uc3QgZXhwb3J0cyA9IGVuc3VyZUluaXRpYWxpemVkKCk7CiAgY29uc3Qgb3B0aW9ucyA9IHJlcXVlc3Qub3B0aW9uczsKICB0cnkgewogICAgY29uc3QgZGV0ZWN0TW92ZXMgPSBvcHRpb25zPy5kZXRlY3RNb3ZlcyA/PyB0cnVlOwogICAgY29uc3QgbW92ZVNpbWlsYXJpdHlUaHJlc2hvbGQgPSBvcHRpb25zPy5tb3ZlU2ltaWxhcml0eVRocmVzaG9sZCA/PyAwLjg7CiAgICBjb25zdCBtb3ZlTWluaW11bVdvcmRDb3VudCA9IG9wdGlvbnM/Lm1vdmVNaW5pbXVtV29yZENvdW50ID8/IDM7CiAgICBjb25zdCBjYXNlSW5zZW5zaXRpdmUgPSBvcHRpb25zPy5jYXNlSW5zZW5zaXRpdmUgPz8gZmFsc2U7CiAgICBjb25zdCByZXN1bHQgPSBleHBvcnRzLkRvY3VtZW50Q29tcGFyZXIuR2V0UmV2aXNpb25zSnNvbldpdGhPcHRpb25zKAogICAgICByZXF1ZXN0LmRvY3VtZW50Qnl0ZXMsCiAgICAgIGRldGVjdE1vdmVzLAogICAgICBtb3ZlU2ltaWxhcml0eVRocmVzaG9sZCwKICAgICAgbW92ZU1pbmltdW1Xb3JkQ291bnQsCiAgICAgIGNhc2VJbnNlbnNpdGl2ZQogICAgKTsKICAgIGlmIChpc0Vycm9yUmVzcG9uc2UocmVzdWx0KSkgewogICAgICByZXR1cm4gcGFyc2VFcnJvcihyZXN1bHQpOwogICAgfQogICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShyZXN1bHQpOwogICAgY29uc3QgcmV2aXNpb25zID0gKHBhcnNlZC5SZXZpc2lvbnMgfHwgcGFyc2VkLnJldmlzaW9ucyB8fCBbXSkubWFwKAogICAgICAocikgPT4gKHsKICAgICAgICBhdXRob3I6IHIuQXV0aG9yIHx8IHIuYXV0aG9yLAogICAgICAgIGRhdGU6IHIuRGF0ZSB8fCByLmRhdGUsCiAgICAgICAgcmV2aXNpb25UeXBlOiByLlJldmlzaW9uVHlwZSB8fCByLnJldmlzaW9uVHlwZSwKICAgICAgICB0ZXh0OiByLlRleHQgfHwgci50ZXh0LAogICAgICAgIG1vdmVHcm91cElkOiByLk1vdmVHcm91cElkID8/IHIubW92ZUdyb3VwSWQsCiAgICAgICAgaXNNb3ZlU291cmNlOiByLklzTW92ZVNvdXJjZSA/PyByLmlzTW92ZVNvdXJjZSwKICAgICAgICBmb3JtYXRDaGFuZ2U6IHIuRm9ybWF0Q2hhbmdlIHx8IHIuZm9ybWF0Q2hhbmdlID8gewogICAgICAgICAgb2xkUHJvcGVydGllczogci5Gb3JtYXRDaGFuZ2U/Lk9sZFByb3BlcnRpZXMgfHwgci5mb3JtYXRDaGFuZ2U/Lm9sZFByb3BlcnRpZXMsCiAgICAgICAgICBuZXdQcm9wZXJ0aWVzOiByLkZvcm1hdENoYW5nZT8uTmV3UHJvcGVydGllcyB8fCByLmZvcm1hdENoYW5nZT8ubmV3UHJvcGVydGllcywKICAgICAgICAgIGNoYW5nZWRQcm9wZXJ0eU5hbWVzOiByLkZvcm1hdENoYW5nZT8uQ2hhbmdlZFByb3BlcnR5TmFtZXMgfHwgci5mb3JtYXRDaGFuZ2U/LmNoYW5nZWRQcm9wZXJ0eU5hbWVzCiAgICAgICAgfSA6IHZvaWQgMAogICAgICB9KQogICAgKTsKICAgIHJldHVybiB7IHJldmlzaW9ucyB9OwogIH0gY2F0Y2ggKGVycm9yKSB7CiAgICByZXR1cm4geyBlcnJvcjogU3RyaW5nKGVycm9yKSB9OwogIH0KfQpmdW5jdGlvbiBoYW5kbGVHZXREb2N1bWVudE1ldGFkYXRhKHJlcXVlc3QpIHsKICBjb25zdCBleHBvcnRzID0gZW5zdXJlSW5pdGlhbGl6ZWQoKTsKICB0cnkgewogICAgY29uc3QgcmVzdWx0ID0gZXhwb3J0cy5Eb2N1bWVudENvbnZlcnRlci5HZXREb2N1bWVudE1ldGFkYXRhKAogICAgICByZXF1ZXN0LmRvY3VtZW50Qnl0ZXMKICAgICk7CiAgICBpZiAoaXNFcnJvclJlc3BvbnNlKHJlc3VsdCkpIHsKICAgICAgcmV0dXJuIHBhcnNlRXJyb3IocmVzdWx0KTsKICAgIH0KICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UocmVzdWx0KTsKICAgIGNvbnN0IGNvbnZlcnRTZWN0aW9uID0gKHMpID0+ICh7CiAgICAgIHNlY3Rpb25JbmRleDogcy5TZWN0aW9uSW5kZXggPz8gcy5zZWN0aW9uSW5kZXgsCiAgICAgIHBhZ2VXaWR0aFB0OiBzLlBhZ2VXaWR0aFB0ID8/IHMucGFnZVdpZHRoUHQsCiAgICAgIHBhZ2VIZWlnaHRQdDogcy5QYWdlSGVpZ2h0UHQgPz8gcy5wYWdlSGVpZ2h0UHQsCiAgICAgIG1hcmdpblRvcFB0OiBzLk1hcmdpblRvcFB0ID8/IHMubWFyZ2luVG9wUHQsCiAgICAgIG1hcmdpblJpZ2h0UHQ6IHMuTWFyZ2luUmlnaHRQdCA/PyBzLm1hcmdpblJpZ2h0UHQsCiAgICAgIG1hcmdpbkJvdHRvbVB0OiBzLk1hcmdpbkJvdHRvbVB0ID8/IHMubWFyZ2luQm90dG9tUHQsCiAgICAgIG1hcmdpbkxlZnRQdDogcy5NYXJnaW5MZWZ0UHQgPz8gcy5tYXJnaW5MZWZ0UHQsCiAgICAgIGNvbnRlbnRXaWR0aFB0OiBzLkNvbnRlbnRXaWR0aFB0ID8/IHMuY29udGVudFdpZHRoUHQsCiAgICAgIGNvbnRlbnRIZWlnaHRQdDogcy5Db250ZW50SGVpZ2h0UHQgPz8gcy5jb250ZW50SGVpZ2h0UHQsCiAgICAgIGhlYWRlclB0OiBzLkhlYWRlclB0ID8/IHMuaGVhZGVyUHQsCiAgICAgIGZvb3RlclB0OiBzLkZvb3RlclB0ID8/IHMuZm9vdGVyUHQsCiAgICAgIHBhcmFncmFwaENvdW50OiBzLlBhcmFncmFwaENvdW50ID8/IHMucGFyYWdyYXBoQ291bnQsCiAgICAgIHRhYmxlQ291bnQ6IHMuVGFibGVDb3VudCA/PyBzLnRhYmxlQ291bnQsCiAgICAgIGhhc0hlYWRlcjogcy5IYXNIZWFkZXIgPz8gcy5oYXNIZWFkZXIsCiAgICAgIGhhc0Zvb3Rlcjogcy5IYXNGb290ZXIgPz8gcy5oYXNGb290ZXIsCiAgICAgIGhhc0ZpcnN0UGFnZUhlYWRlcjogcy5IYXNGaXJzdFBhZ2VIZWFkZXIgPz8gcy5oYXNGaXJzdFBhZ2VIZWFkZXIsCiAgICAgIGhhc0ZpcnN0UGFnZUZvb3Rlcjogcy5IYXNGaXJzdFBhZ2VGb290ZXIgPz8gcy5oYXNGaXJzdFBhZ2VGb290ZXIsCiAgICAgIGhhc0V2ZW5QYWdlSGVhZGVyOiBzLkhhc0V2ZW5QYWdlSGVhZGVyID8/IHMuaGFzRXZlblBhZ2VIZWFkZXIsCiAgICAgIGhhc0V2ZW5QYWdlRm9vdGVyOiBzLkhhc0V2ZW5QYWdlRm9vdGVyID8/IHMuaGFzRXZlblBhZ2VGb290ZXIsCiAgICAgIHN0YXJ0UGFyYWdyYXBoSW5kZXg6IHMuU3RhcnRQYXJhZ3JhcGhJbmRleCA/PyBzLnN0YXJ0UGFyYWdyYXBoSW5kZXgsCiAgICAgIGVuZFBhcmFncmFwaEluZGV4OiBzLkVuZFBhcmFncmFwaEluZGV4ID8/IHMuZW5kUGFyYWdyYXBoSW5kZXgsCiAgICAgIHN0YXJ0VGFibGVJbmRleDogcy5TdGFydFRhYmxlSW5kZXggPz8gcy5zdGFydFRhYmxlSW5kZXgsCiAgICAgIGVuZFRhYmxlSW5kZXg6IHMuRW5kVGFibGVJbmRleCA/PyBzLmVuZFRhYmxlSW5kZXgKICAgIH0pOwogICAgY29uc3QgbWV0YWRhdGEgPSB7CiAgICAgIHNlY3Rpb25zOiAocGFyc2VkLlNlY3Rpb25zIHx8IHBhcnNlZC5zZWN0aW9ucyB8fCBbXSkubWFwKGNvbnZlcnRTZWN0aW9uKSwKICAgICAgdG90YWxQYXJhZ3JhcGhzOiBwYXJzZWQuVG90YWxQYXJhZ3JhcGhzID8/IHBhcnNlZC50b3RhbFBhcmFncmFwaHMsCiAgICAgIHRvdGFsVGFibGVzOiBwYXJzZWQuVG90YWxUYWJsZXMgPz8gcGFyc2VkLnRvdGFsVGFibGVzLAogICAgICBoYXNGb290bm90ZXM6IHBhcnNlZC5IYXNGb290bm90ZXMgPz8gcGFyc2VkLmhhc0Zvb3Rub3RlcywKICAgICAgaGFzRW5kbm90ZXM6IHBhcnNlZC5IYXNFbmRub3RlcyA/PyBwYXJzZWQuaGFzRW5kbm90ZXMsCiAgICAgIGhhc1RyYWNrZWRDaGFuZ2VzOiBwYXJzZWQuSGFzVHJhY2tlZENoYW5nZXMgPz8gcGFyc2VkLmhhc1RyYWNrZWRDaGFuZ2VzLAogICAgICBoYXNDb21tZW50czogcGFyc2VkLkhhc0NvbW1lbnRzID8/IHBhcnNlZC5oYXNDb21tZW50cywKICAgICAgZXN0aW1hdGVkUGFnZUNvdW50OiBwYXJzZWQuRXN0aW1hdGVkUGFnZUNvdW50ID8/IHBhcnNlZC5lc3RpbWF0ZWRQYWdlQ291bnQKICAgIH07CiAgICByZXR1cm4geyBtZXRhZGF0YSB9OwogIH0gY2F0Y2ggKGVycm9yKSB7CiAgICByZXR1cm4geyBlcnJvcjogU3RyaW5nKGVycm9yKSB9OwogIH0KfQpmdW5jdGlvbiBoYW5kbGVHZXRWZXJzaW9uKCkgewogIGNvbnN0IGV4cG9ydHMgPSBlbnN1cmVJbml0aWFsaXplZCgpOwogIHRyeSB7CiAgICBjb25zdCByZXN1bHQgPSBleHBvcnRzLkRvY3VtZW50Q29udmVydGVyLkdldFZlcnNpb24oKTsKICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UocmVzdWx0KTsKICAgIHJldHVybiB7CiAgICAgIHZlcnNpb246IHsKICAgICAgICBsaWJyYXJ5OiBwYXJzZWQuTGlicmFyeSB8fCBwYXJzZWQubGlicmFyeSwKICAgICAgICBkb3RuZXRWZXJzaW9uOiBwYXJzZWQuRG90bmV0VmVyc2lvbiB8fCBwYXJzZWQuZG90bmV0VmVyc2lvbiwKICAgICAgICBwbGF0Zm9ybTogcGFyc2VkLlBsYXRmb3JtIHx8IHBhcnNlZC5wbGF0Zm9ybQogICAgICB9CiAgICB9OwogIH0gY2F0Y2ggKGVycm9yKSB7CiAgICByZXR1cm4geyBlcnJvcjogU3RyaW5nKGVycm9yKSB9OwogIH0KfQpzZWxmLm9ubWVzc2FnZSA9IGFzeW5jIChldmVudCkgPT4gewogIGNvbnN0IHJlcXVlc3QgPSBldmVudC5kYXRhOwogIHRyeSB7CiAgICBsZXQgcmVzcG9uc2U7CiAgICBzd2l0Y2ggKHJlcXVlc3QudHlwZSkgewogICAgICBjYXNlICJpbml0IjogewogICAgICAgIGNvbnN0IGluaXRSZXF1ZXN0ID0gcmVxdWVzdDsKICAgICAgICB0cnkgewogICAgICAgICAgYXdhaXQgaW5pdGlhbGl6ZVdhc20oaW5pdFJlcXVlc3Qud2FzbUJhc2VQYXRoKTsKICAgICAgICAgIHJlc3BvbnNlID0gewogICAgICAgICAgICBpZDogcmVxdWVzdC5pZCwKICAgICAgICAgICAgdHlwZTogImluaXQiLAogICAgICAgICAgICBzdWNjZXNzOiB0cnVlCiAgICAgICAgICB9OwogICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgICByZXNwb25zZSA9IHsKICAgICAgICAgICAgaWQ6IHJlcXVlc3QuaWQsCiAgICAgICAgICAgIHR5cGU6ICJpbml0IiwKICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsCiAgICAgICAgICAgIGVycm9yOiBTdHJpbmcoZXJyb3IpCiAgICAgICAgICB9OwogICAgICAgIH0KICAgICAgICBicmVhazsKICAgICAgfQogICAgICBjYXNlICJjb252ZXJ0RG9jeFRvSHRtbCI6IHsKICAgICAgICBjb25zdCBjb252ZXJ0UmVxdWVzdCA9IHJlcXVlc3Q7CiAgICAgICAgY29uc3QgcmVzdWx0ID0gaGFuZGxlQ29udmVydChjb252ZXJ0UmVxdWVzdCk7CiAgICAgICAgcmVzcG9uc2UgPSB7CiAgICAgICAgICBpZDogcmVxdWVzdC5pZCwKICAgICAgICAgIHR5cGU6ICJjb252ZXJ0RG9jeFRvSHRtbCIsCiAgICAgICAgICBzdWNjZXNzOiAhcmVzdWx0LmVycm9yLAogICAgICAgICAgaHRtbDogcmVzdWx0Lmh0bWwsCiAgICAgICAgICBlcnJvcjogcmVzdWx0LmVycm9yCiAgICAgICAgfTsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBjYXNlICJjb21wYXJlRG9jdW1lbnRzIjogewogICAgICAgIGNvbnN0IGNvbXBhcmVSZXF1ZXN0ID0gcmVxdWVzdDsKICAgICAgICBjb25zdCByZXN1bHQgPSBoYW5kbGVDb21wYXJlKGNvbXBhcmVSZXF1ZXN0KTsKICAgICAgICByZXNwb25zZSA9IHsKICAgICAgICAgIGlkOiByZXF1ZXN0LmlkLAogICAgICAgICAgdHlwZTogImNvbXBhcmVEb2N1bWVudHMiLAogICAgICAgICAgc3VjY2VzczogIXJlc3VsdC5lcnJvciwKICAgICAgICAgIGRvY3VtZW50Qnl0ZXM6IHJlc3VsdC5kb2N1bWVudEJ5dGVzLAogICAgICAgICAgZXJyb3I6IHJlc3VsdC5lcnJvcgogICAgICAgIH07CiAgICAgICAgaWYgKHJlc3VsdC5kb2N1bWVudEJ5dGVzKSB7CiAgICAgICAgICBzZWxmLnBvc3RNZXNzYWdlKHJlc3BvbnNlLCB7IHRyYW5zZmVyOiBbcmVzdWx0LmRvY3VtZW50Qnl0ZXMuYnVmZmVyXSB9KTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgY2FzZSAiY29tcGFyZURvY3VtZW50c1RvSHRtbCI6IHsKICAgICAgICBjb25zdCBjb21wYXJlVG9IdG1sUmVxdWVzdCA9IHJlcXVlc3Q7CiAgICAgICAgY29uc3QgcmVzdWx0ID0gaGFuZGxlQ29tcGFyZVRvSHRtbChjb21wYXJlVG9IdG1sUmVxdWVzdCk7CiAgICAgICAgcmVzcG9uc2UgPSB7CiAgICAgICAgICBpZDogcmVxdWVzdC5pZCwKICAgICAgICAgIHR5cGU6ICJjb21wYXJlRG9jdW1lbnRzVG9IdG1sIiwKICAgICAgICAgIHN1Y2Nlc3M6ICFyZXN1bHQuZXJyb3IsCiAgICAgICAgICBodG1sOiByZXN1bHQuaHRtbCwKICAgICAgICAgIGVycm9yOiByZXN1bHQuZXJyb3IKICAgICAgICB9OwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIGNhc2UgImdldFJldmlzaW9ucyI6IHsKICAgICAgICBjb25zdCBnZXRSZXZpc2lvbnNSZXF1ZXN0ID0gcmVxdWVzdDsKICAgICAgICBjb25zdCByZXN1bHQgPSBoYW5kbGVHZXRSZXZpc2lvbnMoZ2V0UmV2aXNpb25zUmVxdWVzdCk7CiAgICAgICAgcmVzcG9uc2UgPSB7CiAgICAgICAgICBpZDogcmVxdWVzdC5pZCwKICAgICAgICAgIHR5cGU6ICJnZXRSZXZpc2lvbnMiLAogICAgICAgICAgc3VjY2VzczogIXJlc3VsdC5lcnJvciwKICAgICAgICAgIHJldmlzaW9uczogcmVzdWx0LnJldmlzaW9ucywKICAgICAgICAgIGVycm9yOiByZXN1bHQuZXJyb3IKICAgICAgICB9OwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIGNhc2UgImdldERvY3VtZW50TWV0YWRhdGEiOiB7CiAgICAgICAgY29uc3QgZ2V0TWV0YWRhdGFSZXF1ZXN0ID0gcmVxdWVzdDsKICAgICAgICBjb25zdCByZXN1bHQgPSBoYW5kbGVHZXREb2N1bWVudE1ldGFkYXRhKGdldE1ldGFkYXRhUmVxdWVzdCk7CiAgICAgICAgcmVzcG9uc2UgPSB7CiAgICAgICAgICBpZDogcmVxdWVzdC5pZCwKICAgICAgICAgIHR5cGU6ICJnZXREb2N1bWVudE1ldGFkYXRhIiwKICAgICAgICAgIHN1Y2Nlc3M6ICFyZXN1bHQuZXJyb3IsCiAgICAgICAgICBtZXRhZGF0YTogcmVzdWx0Lm1ldGFkYXRhLAogICAgICAgICAgZXJyb3I6IHJlc3VsdC5lcnJvcgogICAgICAgIH07CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgY2FzZSAiZ2V0VmVyc2lvbiI6IHsKICAgICAgICBjb25zdCByZXN1bHQgPSBoYW5kbGVHZXRWZXJzaW9uKCk7CiAgICAgICAgcmVzcG9uc2UgPSB7CiAgICAgICAgICBpZDogcmVxdWVzdC5pZCwKICAgICAgICAgIHR5cGU6ICJnZXRWZXJzaW9uIiwKICAgICAgICAgIHN1Y2Nlc3M6ICFyZXN1bHQuZXJyb3IsCiAgICAgICAgICB2ZXJzaW9uOiByZXN1bHQudmVyc2lvbiwKICAgICAgICAgIGVycm9yOiByZXN1bHQuZXJyb3IKICAgICAgICB9OwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBjb25zdCB1bmtub3duUmVxdWVzdCA9IHJlcXVlc3Q7CiAgICAgICAgc2VsZi5wb3N0TWVzc2FnZSh7CiAgICAgICAgICBpZDogdW5rbm93blJlcXVlc3QuaWQsCiAgICAgICAgICB0eXBlOiB1bmtub3duUmVxdWVzdC50eXBlLAogICAgICAgICAgc3VjY2VzczogZmFsc2UsCiAgICAgICAgICBlcnJvcjogYFVua25vd24gcmVxdWVzdCB0eXBlOiAke3Vua25vd25SZXF1ZXN0LnR5cGV9YAogICAgICAgIH0pOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgfQogICAgc2VsZi5wb3N0TWVzc2FnZShyZXNwb25zZSk7CiAgfSBjYXRjaCAoZXJyb3IpIHsKICAgIHNlbGYucG9zdE1lc3NhZ2UoewogICAgICBpZDogcmVxdWVzdC5pZCwKICAgICAgdHlwZTogcmVxdWVzdC50eXBlLAogICAgICBzdWNjZXNzOiBmYWxzZSwKICAgICAgZXJyb3I6IFN0cmluZyhlcnJvcikKICAgIH0pOwogIH0KfTsKc2VsZi5wb3N0TWVzc2FnZSh7IHR5cGU6ICJyZWFkeSIgfSk7Cg==",typeof document>"u"?require("url").pathToFileURL(__filename).href:ae&&ae.tagName.toUpperCase()==="SCRIPT"&&ae.src||new URL("react-docxodus-viewer.cjs.js",document.baseURI).href).href,A=new Worker(Z,{type:"module"}),m=new Map;let C=!0;A.onmessage=g=>{const l=g.data;if(l.type==="ready")return;const d=m.get(l.id);d&&(m.delete(l.id),l.success?d.resolve(l):d.reject(new Error(l.error||"Unknown error")))},A.onerror=g=>{for(const l of m.values())l.reject(new Error(`Worker error: ${g.message}`));m.clear(),C=!1};function I(g,l){return new Promise((d,b)=>{if(!C){b(new Error("Worker has been terminated"));return}m.set(g.id,{resolve:d,reject:b}),l&&l.length>0?A.postMessage(g,l):A.postMessage(g)})}const h=await I({id:z(),type:"init",wasmBasePath:o});if(!h.success)throw A.terminate(),new Error(`Failed to initialize worker: ${h.error}`);return{async convertDocxToHtml(g,l){const d=await w(g);return(await I({id:z(),type:"convertDocxToHtml",documentBytes:d,options:l},[d.buffer])).html},async compareDocuments(g,l,d){const b=await w(g),y=await w(l);return(await I({id:z(),type:"compareDocuments",originalBytes:b,modifiedBytes:y,options:d},[b.buffer,y.buffer])).documentBytes},async compareDocumentsToHtml(g,l,d){const b=await w(g),y=await w(l);return(await I({id:z(),type:"compareDocumentsToHtml",originalBytes:b,modifiedBytes:y,options:d},[b.buffer,y.buffer])).html},async getRevisions(g,l){const d=await w(g);return(await I({id:z(),type:"getRevisions",documentBytes:d,options:l},[d.buffer])).revisions},async getDocumentMetadata(g){const l=await w(g);return(await I({id:z(),type:"getDocumentMetadata",documentBytes:l},[l.buffer])).metadata},async getVersion(){return(await I({id:z(),type:"getVersion"})).version},terminate(){C=!1,A.terminate();for(const g of m.values())g.reject(new Error("Worker terminated"));m.clear()},isActive(){return C}}}function We(){return typeof Worker<"u"}const Be={paginationScale:.8,showPageNumbers:!0,renderFootnotesAndEndnotes:!0,renderHeadersAndFooters:!0,commentMode:"disabled",annotationMode:"disabled",renderTrackedChanges:!1,showDeletedContent:!0,renderMoveOperations:!0,pageTitle:"Document",cssPrefix:"docx-",fabricateClasses:!0,additionalCss:"",commentCssClassPrefix:"comment-",annotationCssClassPrefix:"annot-"};function _e(s){return i.isInsertion(s)?"Inserted":i.isDeletion(s)?"Deleted":i.isMove(s)?s.isMoveSource?"Moved from":"Moved to":i.isFormatChange(s)?"Formatted":String(s.revisionType)}function $e(s){return i.isInsertion(s)?"rdv-revision--insertion":i.isDeletion(s)?"rdv-revision--deletion":i.isMove(s)?"rdv-revision--move":i.isFormatChange(s)?"rdv-revision--format":""}function qe(s){try{return new Date(s).toLocaleDateString(void 0,{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"})}catch{return s}}function en(s,o=150){return s.length<=o?s:s.substring(0,o)+"..."}function ie(s){return!(!s||typeof s!="string"||s.includes("<")||s.includes("xmlns")||s.includes("Unid=")||s.length>100)}function Ge(s){return s.replace(/([A-Z])/g," $1").replace(/^./,o=>o.toUpperCase()).trim()}function Ie(s){return s==="true"?"Yes":s==="false"?"No":s==="single"?"Single":s==="double"?"Double":s}function nn(s){if(!s.formatChange)return[];const{oldProperties:o,newProperties:Z}=s.formatChange,A=[],m=new Set;if(o)for(const[C,I]of Object.entries(o)){if(!ie(I))continue;m.add(C);const h=Z?.[C];A.push({property:Ge(C),oldValue:Ie(I),newValue:h&&ie(h)?Ie(h):void 0})}if(Z)for(const[C,I]of Object.entries(Z))m.has(C)||ie(I)&&A.push({property:Ge(C),oldValue:void 0,newValue:Ie(I)});return A}function sn({revisions:s}){const[o,Z]=a.useState("all"),[A,m]=a.useState(new Set),C=a.useMemo(()=>o==="all"?s:s.filter(g=>{switch(o){case"insertions":return i.isInsertion(g);case"deletions":return i.isDeletion(g);case"moves":return i.isMove(g);case"formatting":return i.isFormatChange(g);default:return!0}}),[s,o]),I=a.useMemo(()=>({total:s.length,insertions:s.filter(i.isInsertion).length,deletions:s.filter(i.isDeletion).length,moves:s.filter(i.isMove).length,formatting:s.filter(i.isFormatChange).length}),[s]),h=g=>{m(l=>{const d=new Set(l);return d.has(g)?d.delete(g):d.add(g),d})};return s.length===0?e.jsx("div",{className:"rdv-revision-panel",children:e.jsxs("div",{className:"rdv-revision-empty",children:[e.jsx("div",{className:"rdv-revision-empty__icon",children:"📝"}),e.jsx("p",{children:"No tracked changes found in this document."})]})}):e.jsxs("div",{className:"rdv-revision-panel",children:[e.jsxs("div",{className:"rdv-revision-header",children:[e.jsxs("div",{className:"rdv-revision-stats",children:[e.jsxs("span",{className:"rdv-revision-stat rdv-revision-stat--total",children:[I.total," change",I.total!==1?"s":""]}),I.insertions>0&&e.jsxs("span",{className:"rdv-revision-stat rdv-revision-stat--insertion",children:["+",I.insertions]}),I.deletions>0&&e.jsxs("span",{className:"rdv-revision-stat rdv-revision-stat--deletion",children:["−",I.deletions]}),I.moves>0&&e.jsxs("span",{className:"rdv-revision-stat rdv-revision-stat--move",children:["↔",I.moves]}),I.formatting>0&&e.jsxs("span",{className:"rdv-revision-stat rdv-revision-stat--format",children:["✎",I.formatting]})]}),e.jsxs("select",{className:"rdv-revision-filter",value:o,onChange:g=>Z(g.target.value),children:[e.jsx("option",{value:"all",children:"All Changes"}),e.jsxs("option",{value:"insertions",children:["Insertions (",I.insertions,")"]}),e.jsxs("option",{value:"deletions",children:["Deletions (",I.deletions,")"]}),e.jsxs("option",{value:"moves",children:["Moves (",I.moves,")"]}),e.jsxs("option",{value:"formatting",children:["Formatting (",I.formatting,")"]})]})]}),e.jsx("div",{className:"rdv-revision-list",children:C.map((g,l)=>{const d=A.has(l),b=g.text.length>150,y=i.isFormatChange(g)?nn(g):[];return e.jsxs("div",{className:`rdv-revision-item ${$e(g)}`,children:[e.jsxs("div",{className:"rdv-revision-item__header",children:[e.jsx("span",{className:"rdv-revision-type",children:_e(g)}),i.isMove(g)&&g.moveGroupId!==void 0&&e.jsxs("span",{className:"rdv-revision-move-id",children:["#",g.moveGroupId]}),e.jsx("span",{className:"rdv-revision-author",children:g.author||"Unknown"}),e.jsx("span",{className:"rdv-revision-date",children:qe(g.date)})]}),g.text&&e.jsxs("div",{className:"rdv-revision-item__content",children:[e.jsx("span",{className:"rdv-revision-text",children:d?g.text:en(g.text)}),b&&e.jsx("button",{className:"rdv-revision-expand",onClick:()=>h(l),children:d?"Show less":"Show more"})]}),y.length>0&&e.jsx("div",{className:"rdv-revision-item__format-details",children:y.map((r,T)=>e.jsxs("div",{className:"rdv-format-change",children:[e.jsx("span",{className:"rdv-format-change__property",children:r.property}),e.jsxs("span",{className:"rdv-format-change__values",children:[r.oldValue&&e.jsx("span",{className:"rdv-format-change__old",children:r.oldValue}),r.oldValue&&r.newValue&&e.jsx("span",{className:"rdv-format-change__arrow",children:"→"}),r.newValue&&e.jsx("span",{className:"rdv-format-change__new",children:r.newValue}),!r.oldValue&&r.newValue&&e.jsx("span",{className:"rdv-format-change__added",children:"(added)"}),r.oldValue&&!r.newValue&&e.jsx("span",{className:"rdv-format-change__removed",children:"(removed)"})]})]},T))})]},l)})})]})}function gn(s){switch(s){case"endnote":return i.CommentRenderMode.EndnoteStyle;case"inline":return i.CommentRenderMode.Inline;case"margin":return i.CommentRenderMode.Margin;default:return i.CommentRenderMode.Disabled}}function cn(s){switch(s){case"above":return i.AnnotationLabelMode.Above;case"inline":return i.AnnotationLabelMode.Inline;case"tooltip":return i.AnnotationLabelMode.Tooltip;case"none":return i.AnnotationLabelMode.None;default:return}}function tn({file:s,html:o,onFileChange:Z,onConversionStart:A,onConversionComplete:m,onError:C,onPageChange:I,onRevisionsExtracted:h,settings:g,defaultSettings:l,onSettingsChange:d,className:b,style:y,toolbar:r="top",showSettingsButton:T=!0,showRevisionsTab:j=!0,placeholder:Ne="Open a DOCX file to view",wasmBasePath:E,useWorker:u=!0}){const _=a.useMemo(()=>({...Be,...l}),[l]),[Xe,le]=a.useState(null),[Re,k]=a.useState(null),[oe,He]=a.useState(_),N=s!==void 0?s:Xe,X=o!==void 0?o:Re,t=a.useMemo(()=>g?{..._,...g}:oe,[g,_,oe]),R=pe.useDocxodus(E),[G,de]=a.useState(null),[ze,Ce]=a.useState(!1),[we,$]=a.useState(!1),[xe,re]=a.useState(null),S=a.useRef(null);a.useEffect(()=>{if(!u||!We())return;let n=!1;return $(!0),re(null),Ee({wasmBasePath:E}).then(c=>{n?c.terminate():(S.current=c,de(c),Ce(!0),$(!1))}).catch(c=>{n||(re(c instanceof Error?c:new Error(String(c))),$(!1))}),()=>{n=!0,S.current&&(S.current.terminate(),S.current=null,de(null),Ce(!1))}},[u,E]);const H=u?ze:R.isReady,f=u?we:R.isLoading,K=u?xe:R.error,[W,Ae]=a.useState(!1),[me,Q]=a.useState(null),[be,ue]=a.useState(""),[B,q]=a.useState(1),[p,ee]=a.useState(0),[fe,D]=a.useState(!1),[F,U]=a.useState("document"),[ne,P]=a.useState([]),[Fe,Ze]=a.useState(!1),[x,M]=a.useState(null),se=a.useRef(null),ge=a.useCallback(()=>({commentRenderMode:gn(t.commentMode),pageTitle:t.pageTitle,cssPrefix:t.cssPrefix,fabricateClasses:t.fabricateClasses,additionalCss:t.additionalCss||void 0,commentCssClassPrefix:t.commentCssClassPrefix,paginationMode:i.PaginationMode.Paginated,paginationScale:t.paginationScale,renderAnnotations:t.annotationMode!=="disabled",annotationLabelMode:cn(t.annotationMode),annotationCssClassPrefix:t.annotationCssClassPrefix,renderFootnotesAndEndnotes:t.renderFootnotesAndEndnotes,renderHeadersAndFooters:t.renderHeadersAndFooters,renderTrackedChanges:t.renderTrackedChanges,showDeletedContent:t.showDeletedContent,renderMoveOperations:t.renderMoveOperations}),[t]),Ye=a.useCallback(async n=>{try{const c=u&&G?await G.getDocumentMetadata(n):await i.getDocumentMetadata(n);M(c)}catch{M(null)}},[u,G]),he=a.useCallback(async n=>{if(!(!H||!j)){Ze(!0);try{const c=u&&G?await G.getRevisions(n):await R.getRevisions(n);P(c),h?.(c)}catch{P([])}finally{Ze(!1)}}},[H,u,G,R,j,h]),Y=a.useCallback(async n=>{if(H){Ae(!0),Q(null),P([]),U("document"),A?.(),u||await new Promise(c=>requestAnimationFrame(()=>requestAnimationFrame(c)));try{const c=u&&G?await G.convertDocxToHtml(n,ge()):await R.convertToHtml(n,ge());o===void 0&&k(c),m?.(c),he(n)}catch(c){const V=c instanceof Error?c:new Error(String(c));Q(V),C?.(V)}finally{Ae(!1)}}},[H,u,G,R,ge,o,A,m,C,he]);a.useEffect(()=>{H&&N&&!X&&!W&&o===void 0&&Y(N)},[H,N,X,W,Y,o]);const Je=async n=>{const c=n.target.files?.[0];c&&(ue(c.name),Q(null),q(1),ee(0),M(null),s===void 0&&(le(c),k(null)),Z?.(c),Ye(c),H&&o===void 0&&await Y(c))},je=a.useCallback(async()=>{N&&(o===void 0&&k(null),await Y(N))},[N,Y,o]),ke=()=>{s===void 0&&le(null),o===void 0&&k(null),Q(null),ue(""),q(1),ee(0),P([]),U("document"),M(null),Z?.(null);const n=document.getElementById("rdv-file-input");n&&(n.value="")},v=a.useCallback(n=>{const c={...t,...n};g===void 0&&He(c),d?.(c)},[t,g,d]),Se=()=>v({paginationScale:Math.min(t.paginationScale+.1,2)}),Ke=()=>v({paginationScale:Math.max(t.paginationScale-.1,.3)}),Qe=n=>v({paginationScale:Math.max(.3,Math.min(2,n))}),ce=n=>{const c=se.current;if(!c||n<1||n>p)return;const V=c.querySelector(`[data-page-number="${n}"]`);V&&V.scrollIntoView({behavior:"smooth",block:"start"})},De=()=>B>1&&ce(B-1),Ue=()=>B<p&&ce(B+1),Pe=n=>{q(n),I?.(n,p)};a.useEffect(()=>{const n=se.current;if(!n)return;const c=V=>{const L=V.target.closest('a[href^="#"]');if(!L)return;const J=L.getAttribute("href");if(!J||!J.startsWith("#"))return;V.preventDefault();const ye=J.substring(1),O=n.querySelector(`[id="${ye}"], [name="${ye}"]`);O&&(O.scrollIntoView({behavior:"smooth",block:"center"}),O.classList.add("rdv-footnote-highlight"),setTimeout(()=>O.classList.remove("rdv-footnote-highlight"),2e3))};return n.addEventListener("click",c),()=>n.removeEventListener("click",c)},[X]),a.useEffect(()=>{p>0&&I?.(B,p)},[p,B,I]);const ve=W||f,Me=()=>e.jsx("div",{className:"rdv-settings-overlay",onClick:()=>D(!1),children:e.jsxs("div",{className:"rdv-settings-modal",onClick:n=>n.stopPropagation(),children:[e.jsxs("div",{className:"rdv-settings-header",children:[e.jsx("h3",{children:"Viewer Settings"}),e.jsx("button",{className:"rdv-settings-close",onClick:()=>D(!1),children:"×"})]}),e.jsxs("div",{className:"rdv-settings-body",children:[e.jsxs("div",{className:"rdv-settings-section",children:[e.jsx("h4",{children:"Display Options"}),e.jsxs("label",{className:"rdv-settings-checkbox",children:[e.jsx("input",{type:"checkbox",checked:t.renderFootnotesAndEndnotes,onChange:n=>v({renderFootnotesAndEndnotes:n.target.checked})}),e.jsx("span",{children:"Show footnotes and endnotes"})]}),e.jsxs("label",{className:"rdv-settings-checkbox",children:[e.jsx("input",{type:"checkbox",checked:t.renderHeadersAndFooters,onChange:n=>v({renderHeadersAndFooters:n.target.checked})}),e.jsx("span",{children:"Show headers and footers"})]}),e.jsxs("label",{className:"rdv-settings-checkbox",children:[e.jsx("input",{type:"checkbox",checked:t.showPageNumbers,onChange:n=>v({showPageNumbers:n.target.checked})}),e.jsx("span",{children:"Show page numbers"})]})]}),e.jsxs("div",{className:"rdv-settings-section",children:[e.jsx("h4",{children:"Comment Rendering"}),e.jsx("div",{className:"rdv-settings-radio-group",children:["disabled","endnote","inline","margin"].map(n=>e.jsxs("label",{className:"rdv-settings-radio",children:[e.jsx("input",{type:"radio",name:"commentMode",checked:t.commentMode===n,onChange:()=>v({commentMode:n})}),e.jsxs("span",{children:[n.charAt(0).toUpperCase()+n.slice(1),n==="endnote"?"s":""]})]},n))})]}),e.jsxs("div",{className:"rdv-settings-section",children:[e.jsx("h4",{children:"Annotation Rendering"}),e.jsx("div",{className:"rdv-settings-radio-group",children:["disabled","above","inline","tooltip","none"].map(n=>e.jsxs("label",{className:"rdv-settings-radio",children:[e.jsx("input",{type:"radio",name:"annotationMode",checked:t.annotationMode===n,onChange:()=>v({annotationMode:n})}),e.jsx("span",{children:n==="none"?"Highlight Only":n.charAt(0).toUpperCase()+n.slice(1)})]},n))})]}),e.jsxs("div",{className:"rdv-settings-section",children:[e.jsx("h4",{children:"Tracked Changes"}),e.jsxs("label",{className:"rdv-settings-checkbox",children:[e.jsx("input",{type:"checkbox",checked:t.renderTrackedChanges,onChange:n=>v({renderTrackedChanges:n.target.checked})}),e.jsx("span",{children:"Show tracked changes"})]}),t.renderTrackedChanges&&e.jsxs("div",{className:"rdv-settings-subsection",children:[e.jsxs("label",{className:"rdv-settings-checkbox",children:[e.jsx("input",{type:"checkbox",checked:t.showDeletedContent,onChange:n=>v({showDeletedContent:n.target.checked})}),e.jsx("span",{children:"Show deleted content"})]}),e.jsxs("label",{className:"rdv-settings-checkbox",children:[e.jsx("input",{type:"checkbox",checked:t.renderMoveOperations,onChange:n=>v({renderMoveOperations:n.target.checked})}),e.jsx("span",{children:"Distinguish move operations"})]})]})]})]}),e.jsx("div",{className:"rdv-settings-footer",children:e.jsx("button",{className:"rdv-settings-apply",onClick:()=>{je(),D(!1)},children:"Apply & Close"})})]})}),Le=ne.length>0,Ve=()=>e.jsxs("div",{className:"rdv-toolbar",children:[e.jsxs("div",{className:"rdv-toolbar-left",children:[e.jsx("label",{htmlFor:"rdv-file-input",className:"rdv-toolbar-file-btn",children:be||"Open Document"}),e.jsx("input",{id:"rdv-file-input",type:"file",accept:".docx",onChange:Je,disabled:ve,className:"rdv-file-input"}),be&&e.jsx("button",{className:"rdv-toolbar-btn rdv-toolbar-clear",onClick:ke,disabled:ve,children:"×"}),j&&Le&&e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"rdv-toolbar-separator"}),e.jsxs("div",{className:"rdv-view-tabs",children:[e.jsx("button",{className:`rdv-view-tab ${F==="document"?"rdv-view-tab--active":""}`,onClick:()=>U("document"),title:"View Document",children:"Document"}),e.jsxs("button",{className:`rdv-view-tab ${F==="revisions"?"rdv-view-tab--active":""}`,onClick:()=>U("revisions"),title:"View Tracked Changes",children:["Changes (",ne.length,")"]})]})]}),j&&Fe&&e.jsx("span",{className:"rdv-extracting-indicator",title:"Extracting tracked changes...",children:"..."})]}),e.jsx("div",{className:"rdv-toolbar-center",children:X&&p>0&&F==="document"&&e.jsxs(e.Fragment,{children:[e.jsx("button",{className:"rdv-toolbar-btn",onClick:De,disabled:B<=1,title:"Previous Page",children:"◀"}),e.jsxs("div",{className:"rdv-page-input-group",children:[e.jsx("input",{type:"number",className:"rdv-page-input",value:B,min:1,max:p,onChange:n=>{const c=parseInt(n.target.value);isNaN(c)||ce(c)}}),e.jsxs("span",{className:"rdv-page-total",children:["/ ",p]})]}),e.jsx("button",{className:"rdv-toolbar-btn",onClick:Ue,disabled:B>=p,title:"Next Page",children:"▶"}),e.jsx("div",{className:"rdv-toolbar-separator"}),e.jsx("button",{className:"rdv-toolbar-btn",onClick:Ke,disabled:t.paginationScale<=.3,title:"Zoom Out",children:"−"}),e.jsxs("select",{className:"rdv-zoom-select",value:t.paginationScale,onChange:n=>Qe(parseFloat(n.target.value)),children:[e.jsx("option",{value:"0.5",children:"50%"}),e.jsx("option",{value:"0.75",children:"75%"}),e.jsx("option",{value:"0.8",children:"80%"}),e.jsx("option",{value:"0.9",children:"90%"}),e.jsx("option",{value:"1",children:"100%"}),e.jsx("option",{value:"1.25",children:"125%"}),e.jsx("option",{value:"1.5",children:"150%"}),e.jsx("option",{value:"2",children:"200%"})]}),e.jsx("button",{className:"rdv-toolbar-btn",onClick:Se,disabled:t.paginationScale>=2,title:"Zoom In",children:"+"})]})}),e.jsx("div",{className:"rdv-toolbar-right",children:T&&e.jsx("button",{className:"rdv-toolbar-btn rdv-toolbar-settings",onClick:()=>D(!0),title:"Settings",children:"⚙"})})]}),Oe=["rdv-viewer",b].filter(Boolean).join(" ");return e.jsxs("div",{className:Oe,style:y,children:[r==="top"&&e.jsx(Ve,{}),e.jsxs("div",{className:"rdv-content",children:[K&&e.jsx("div",{className:"rdv-message rdv-message--error",children:e.jsxs("p",{children:["Failed to initialize: ",K.message]})}),!K&&(f||W)&&(x&&W?e.jsx("div",{className:"rdv-pages rdv-pages--loading",children:e.jsx("div",{className:"rdv-page-placeholders",style:{backgroundColor:"#525659"},children:Array.from({length:x.estimatedPageCount||1}).map((n,c)=>{const V=x.sections[Math.min(c,x.sections.length-1)],te=t.paginationScale,L=Math.round((V?.pageWidthPt||612)*(96/72)*te),J=Math.round((V?.pageHeightPt||792)*(96/72)*te);return e.jsxs("div",{className:"rdv-page-placeholder",style:{width:`${L}px`,height:`${J}px`,marginBottom:"20px"},children:[e.jsx("div",{className:"rdv-page-placeholder__shimmer"}),c===0&&e.jsxs("div",{className:"rdv-page-placeholder__info",children:[e.jsx("div",{className:"rdv-spinner rdv-spinner--small"}),e.jsx("span",{children:"Converting document..."}),e.jsxs("span",{className:"rdv-page-placeholder__count",children:["~",x.estimatedPageCount," page",x.estimatedPageCount!==1?"s":""]})]}),e.jsx("div",{className:"rdv-page-placeholder__number",children:c+1})]},c)})})}):e.jsxs("div",{className:"rdv-message",children:[e.jsx("div",{className:"rdv-spinner"}),e.jsx("p",{children:f&&N?"Loading engine & preparing document...":f?"Loading document engine...":"Processing document..."})]})),!f&&!K&&!X&&!W&&!N&&e.jsxs("div",{className:"rdv-message",children:[e.jsx("div",{className:"rdv-message__icon",children:"📄"}),e.jsx("p",{children:Ne})]}),me&&!W&&e.jsx("div",{className:"rdv-message rdv-message--error",children:e.jsxs("p",{children:["Error: ",me.message]})}),X&&!W&&F==="document"&&e.jsx("div",{ref:se,className:"rdv-pages",children:e.jsx(pe.PaginatedDocument,{html:X,scale:t.paginationScale,showPageNumbers:t.showPageNumbers,pageGap:20,backgroundColor:"#525659",className:"rdv-paginated-document",onPaginationComplete:n=>{ee(n.totalPages)},onPageVisible:Pe})}),X&&!W&&F==="revisions"&&e.jsx(sn,{revisions:ne})]}),r==="bottom"&&e.jsx(Ve,{}),fe&&e.jsx(Me,{})]})}Object.defineProperty(exports,"RevisionType",{enumerable:!0,get:()=>i.RevisionType});Object.defineProperty(exports,"isDeletion",{enumerable:!0,get:()=>i.isDeletion});Object.defineProperty(exports,"isFormatChange",{enumerable:!0,get:()=>i.isFormatChange});Object.defineProperty(exports,"isInsertion",{enumerable:!0,get:()=>i.isInsertion});Object.defineProperty(exports,"isMove",{enumerable:!0,get:()=>i.isMove});exports.DEFAULT_SETTINGS=Be;exports.DocumentViewer=tn;exports.isWorkerSupported=We;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),a=require("react"),pe=require("docxodus/react"),i=require("docxodus");var ae=typeof document<"u"?document.currentScript:null;function z(){return`${Date.now()}-${Math.random().toString(36).slice(2,11)}`}async function w(s){if(s instanceof Uint8Array)return s;const o=await s.arrayBuffer();return new Uint8Array(o)}function Te(){if(typeof document<"u"){const s=document.querySelectorAll('script[src*="docxodus"]');if(s.length>0){const o=s[0].src;return o.substring(0,o.lastIndexOf("/")+1)+"wasm/"}}return"/wasm/"}async function Ee(s){const o=s?.wasmBasePath??Te(),Z=new URL("data:text/javascript;base64,Ly8gc3JjL2RvY3hvZHVzLndvcmtlci50cwp2YXIgd2FzbUV4cG9ydHMgPSBudWxsOwp2YXIgaW5pdFByb21pc2UgPSBudWxsOwphc3luYyBmdW5jdGlvbiBpbml0aWFsaXplV2FzbShiYXNlUGF0aCkgewogIGlmICh3YXNtRXhwb3J0cykgewogICAgcmV0dXJuOwogIH0KICBpZiAoaW5pdFByb21pc2UpIHsKICAgIHJldHVybiBpbml0UHJvbWlzZTsKICB9CiAgaW5pdFByb21pc2UgPSAoYXN5bmMgKCkgPT4gewogICAgdHJ5IHsKICAgICAgY29uc3Qgbm9ybWFsaXplZFBhdGggPSBiYXNlUGF0aC5lbmRzV2l0aCgiLyIpID8gYmFzZVBhdGggOiBiYXNlUGF0aCArICIvIjsKICAgICAgY29uc3QgZG90bmV0TW9kdWxlID0gYXdhaXQgaW1wb3J0KAogICAgICAgIC8qIHdlYnBhY2tJZ25vcmU6IHRydWUgKi8KICAgICAgICBgJHtub3JtYWxpemVkUGF0aH1fZnJhbWV3b3JrL2RvdG5ldC5qc2AKICAgICAgKTsKICAgICAgY29uc3QgeyBnZXRBc3NlbWJseUV4cG9ydHMsIGdldENvbmZpZyB9ID0gYXdhaXQgZG90bmV0TW9kdWxlLmRvdG5ldC53aXRoRGlhZ25vc3RpY1RyYWNpbmcoZmFsc2UpLmNyZWF0ZSgpOwogICAgICBjb25zdCBjb25maWcgPSBnZXRDb25maWcoKTsKICAgICAgY29uc3QgZXhwb3J0cyA9IGF3YWl0IGdldEFzc2VtYmx5RXhwb3J0cyhjb25maWcubWFpbkFzc2VtYmx5TmFtZSk7CiAgICAgIHdhc21FeHBvcnRzID0gewogICAgICAgIERvY3VtZW50Q29udmVydGVyOiBleHBvcnRzLkRvY3hvZHVzV2FzbS5Eb2N1bWVudENvbnZlcnRlciwKICAgICAgICBEb2N1bWVudENvbXBhcmVyOiBleHBvcnRzLkRvY3hvZHVzV2FzbS5Eb2N1bWVudENvbXBhcmVyCiAgICAgIH07CiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICBpbml0UHJvbWlzZSA9IG51bGw7CiAgICAgIHRocm93IGVycm9yOwogICAgfQogIH0pKCk7CiAgcmV0dXJuIGluaXRQcm9taXNlOwp9CmZ1bmN0aW9uIGVuc3VyZUluaXRpYWxpemVkKCkgewogIGlmICghd2FzbUV4cG9ydHMpIHsKICAgIHRocm93IG5ldyBFcnJvcigiV29ya2VyIG5vdCBpbml0aWFsaXplZC4gQ2FsbCBpbml0IGZpcnN0LiIpOwogIH0KICByZXR1cm4gd2FzbUV4cG9ydHM7Cn0KZnVuY3Rpb24gaXNFcnJvclJlc3BvbnNlKHJlc3VsdCkgewogIHJldHVybiByZXN1bHQuc3RhcnRzV2l0aCgieyIpICYmIHJlc3VsdC5pbmNsdWRlcygnIkVycm9yIicpOwp9CmZ1bmN0aW9uIHBhcnNlRXJyb3IocmVzdWx0KSB7CiAgdHJ5IHsKICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UocmVzdWx0KTsKICAgIHJldHVybiB7IGVycm9yOiBwYXJzZWQuRXJyb3IgfHwgcGFyc2VkLmVycm9yIHx8ICJVbmtub3duIGVycm9yIiB9OwogIH0gY2F0Y2ggewogICAgcmV0dXJuIHsgZXJyb3I6IHJlc3VsdCB9OwogIH0KfQpmdW5jdGlvbiBoYW5kbGVDb252ZXJ0KHJlcXVlc3QpIHsKICBjb25zdCBleHBvcnRzID0gZW5zdXJlSW5pdGlhbGl6ZWQoKTsKICBjb25zdCBvcHRpb25zID0gcmVxdWVzdC5vcHRpb25zOwogIHRyeSB7CiAgICBsZXQgcmVzdWx0OwogICAgY29uc3QgbmVlZHNDb21wbGV0ZU1ldGhvZCA9IG9wdGlvbnM/LnJlbmRlckZvb3Rub3Rlc0FuZEVuZG5vdGVzICE9PSB2b2lkIDAgfHwgb3B0aW9ucz8ucmVuZGVySGVhZGVyc0FuZEZvb3RlcnMgIT09IHZvaWQgMCB8fCBvcHRpb25zPy5yZW5kZXJUcmFja2VkQ2hhbmdlcyAhPT0gdm9pZCAwIHx8IG9wdGlvbnM/LnNob3dEZWxldGVkQ29udGVudCAhPT0gdm9pZCAwIHx8IG9wdGlvbnM/LnJlbmRlck1vdmVPcGVyYXRpb25zICE9PSB2b2lkIDA7CiAgICBpZiAobmVlZHNDb21wbGV0ZU1ldGhvZCB8fCBvcHRpb25zPy5yZW5kZXJBbm5vdGF0aW9ucykgewogICAgICByZXN1bHQgPSBleHBvcnRzLkRvY3VtZW50Q29udmVydGVyLkNvbnZlcnREb2N4VG9IdG1sQ29tcGxldGUoCiAgICAgICAgcmVxdWVzdC5kb2N1bWVudEJ5dGVzLAogICAgICAgIG9wdGlvbnM/LnBhZ2VUaXRsZSA/PyAiRG9jdW1lbnQiLAogICAgICAgIG9wdGlvbnM/LmNzc1ByZWZpeCA/PyAiZG9jeC0iLAogICAgICAgIG9wdGlvbnM/LmZhYnJpY2F0ZUNsYXNzZXMgPz8gdHJ1ZSwKICAgICAgICBvcHRpb25zPy5hZGRpdGlvbmFsQ3NzID8/ICIiLAogICAgICAgIG9wdGlvbnM/LmNvbW1lbnRSZW5kZXJNb2RlID8/IC0xLAogICAgICAgIG9wdGlvbnM/LmNvbW1lbnRDc3NDbGFzc1ByZWZpeCA/PyAiY29tbWVudC0iLAogICAgICAgIG9wdGlvbnM/LnBhZ2luYXRpb25Nb2RlID8/IDAsCiAgICAgICAgb3B0aW9ucz8ucGFnaW5hdGlvblNjYWxlID8/IDEsCiAgICAgICAgb3B0aW9ucz8ucGFnaW5hdGlvbkNzc0NsYXNzUHJlZml4ID8/ICJwYWdlLSIsCiAgICAgICAgb3B0aW9ucz8ucmVuZGVyQW5ub3RhdGlvbnMgPz8gZmFsc2UsCiAgICAgICAgb3B0aW9ucz8uYW5ub3RhdGlvbkxhYmVsTW9kZSA/PyAwLAogICAgICAgIG9wdGlvbnM/LmFubm90YXRpb25Dc3NDbGFzc1ByZWZpeCA/PyAiYW5ub3QtIiwKICAgICAgICBvcHRpb25zPy5yZW5kZXJGb290bm90ZXNBbmRFbmRub3RlcyA/PyBmYWxzZSwKICAgICAgICBvcHRpb25zPy5yZW5kZXJIZWFkZXJzQW5kRm9vdGVycyA/PyBmYWxzZSwKICAgICAgICBvcHRpb25zPy5yZW5kZXJUcmFja2VkQ2hhbmdlcyA/PyBmYWxzZSwKICAgICAgICBvcHRpb25zPy5zaG93RGVsZXRlZENvbnRlbnQgPz8gdHJ1ZSwKICAgICAgICBvcHRpb25zPy5yZW5kZXJNb3ZlT3BlcmF0aW9ucyA/PyB0cnVlCiAgICAgICk7CiAgICB9IGVsc2UgaWYgKG9wdGlvbnM/LnBhZ2luYXRpb25Nb2RlICE9PSB2b2lkIDAgJiYgb3B0aW9ucy5wYWdpbmF0aW9uTW9kZSAhPT0gMCkgewogICAgICByZXN1bHQgPSBleHBvcnRzLkRvY3VtZW50Q29udmVydGVyLkNvbnZlcnREb2N4VG9IdG1sV2l0aFBhZ2luYXRpb24oCiAgICAgICAgcmVxdWVzdC5kb2N1bWVudEJ5dGVzLAogICAgICAgIG9wdGlvbnMucGFnZVRpdGxlID8/ICJEb2N1bWVudCIsCiAgICAgICAgb3B0aW9ucy5jc3NQcmVmaXggPz8gImRvY3gtIiwKICAgICAgICBvcHRpb25zLmZhYnJpY2F0ZUNsYXNzZXMgPz8gdHJ1ZSwKICAgICAgICBvcHRpb25zLmFkZGl0aW9uYWxDc3MgPz8gIiIsCiAgICAgICAgb3B0aW9ucy5jb21tZW50UmVuZGVyTW9kZSA/PyAtMSwKICAgICAgICBvcHRpb25zLmNvbW1lbnRDc3NDbGFzc1ByZWZpeCA/PyAiY29tbWVudC0iLAogICAgICAgIG9wdGlvbnMucGFnaW5hdGlvbk1vZGUsCiAgICAgICAgb3B0aW9ucy5wYWdpbmF0aW9uU2NhbGUgPz8gMSwKICAgICAgICBvcHRpb25zLnBhZ2luYXRpb25Dc3NDbGFzc1ByZWZpeCA/PyAicGFnZS0iCiAgICAgICk7CiAgICB9IGVsc2UgaWYgKG9wdGlvbnMpIHsKICAgICAgcmVzdWx0ID0gZXhwb3J0cy5Eb2N1bWVudENvbnZlcnRlci5Db252ZXJ0RG9jeFRvSHRtbFdpdGhPcHRpb25zKAogICAgICAgIHJlcXVlc3QuZG9jdW1lbnRCeXRlcywKICAgICAgICBvcHRpb25zLnBhZ2VUaXRsZSA/PyAiRG9jdW1lbnQiLAogICAgICAgIG9wdGlvbnMuY3NzUHJlZml4ID8/ICJkb2N4LSIsCiAgICAgICAgb3B0aW9ucy5mYWJyaWNhdGVDbGFzc2VzID8/IHRydWUsCiAgICAgICAgb3B0aW9ucy5hZGRpdGlvbmFsQ3NzID8/ICIiLAogICAgICAgIG9wdGlvbnMuY29tbWVudFJlbmRlck1vZGUgPz8gLTEsCiAgICAgICAgb3B0aW9ucy5jb21tZW50Q3NzQ2xhc3NQcmVmaXggPz8gImNvbW1lbnQtIgogICAgICApOwogICAgfSBlbHNlIHsKICAgICAgcmVzdWx0ID0gZXhwb3J0cy5Eb2N1bWVudENvbnZlcnRlci5Db252ZXJ0RG9jeFRvSHRtbCgKICAgICAgICByZXF1ZXN0LmRvY3VtZW50Qnl0ZXMKICAgICAgKTsKICAgIH0KICAgIGlmIChpc0Vycm9yUmVzcG9uc2UocmVzdWx0KSkgewogICAgICByZXR1cm4gcGFyc2VFcnJvcihyZXN1bHQpOwogICAgfQogICAgcmV0dXJuIHsgaHRtbDogcmVzdWx0IH07CiAgfSBjYXRjaCAoZXJyb3IpIHsKICAgIHJldHVybiB7IGVycm9yOiBTdHJpbmcoZXJyb3IpIH07CiAgfQp9CmZ1bmN0aW9uIGhhbmRsZUNvbXBhcmUocmVxdWVzdCkgewogIGNvbnN0IGV4cG9ydHMgPSBlbnN1cmVJbml0aWFsaXplZCgpOwogIGNvbnN0IG9wdGlvbnMgPSByZXF1ZXN0Lm9wdGlvbnM7CiAgdHJ5IHsKICAgIGxldCByZXN1bHQ7CiAgICBpZiAob3B0aW9ucz8uZGV0YWlsVGhyZXNob2xkICE9PSB2b2lkIDAgfHwgb3B0aW9ucz8uY2FzZUluc2Vuc2l0aXZlKSB7CiAgICAgIHJlc3VsdCA9IGV4cG9ydHMuRG9jdW1lbnRDb21wYXJlci5Db21wYXJlRG9jdW1lbnRzV2l0aE9wdGlvbnMoCiAgICAgICAgcmVxdWVzdC5vcmlnaW5hbEJ5dGVzLAogICAgICAgIHJlcXVlc3QubW9kaWZpZWRCeXRlcywKICAgICAgICBvcHRpb25zPy5hdXRob3JOYW1lID8/ICJEb2N4b2R1cyIsCiAgICAgICAgb3B0aW9ucz8uZGV0YWlsVGhyZXNob2xkID8/IDAuMTUsCiAgICAgICAgb3B0aW9ucz8uY2FzZUluc2Vuc2l0aXZlID8/IGZhbHNlCiAgICAgICk7CiAgICB9IGVsc2UgewogICAgICByZXN1bHQgPSBleHBvcnRzLkRvY3VtZW50Q29tcGFyZXIuQ29tcGFyZURvY3VtZW50cygKICAgICAgICByZXF1ZXN0Lm9yaWdpbmFsQnl0ZXMsCiAgICAgICAgcmVxdWVzdC5tb2RpZmllZEJ5dGVzLAogICAgICAgIG9wdGlvbnM/LmF1dGhvck5hbWUgPz8gIkRvY3hvZHVzIgogICAgICApOwogICAgfQogICAgaWYgKHJlc3VsdC5sZW5ndGggPT09IDApIHsKICAgICAgcmV0dXJuIHsgZXJyb3I6ICJDb21wYXJpc29uIHJldHVybmVkIGVtcHR5IHJlc3VsdCIgfTsKICAgIH0KICAgIHJldHVybiB7IGRvY3VtZW50Qnl0ZXM6IHJlc3VsdCB9OwogIH0gY2F0Y2ggKGVycm9yKSB7CiAgICByZXR1cm4geyBlcnJvcjogU3RyaW5nKGVycm9yKSB9OwogIH0KfQpmdW5jdGlvbiBoYW5kbGVDb21wYXJlVG9IdG1sKHJlcXVlc3QpIHsKICBjb25zdCBleHBvcnRzID0gZW5zdXJlSW5pdGlhbGl6ZWQoKTsKICBjb25zdCBvcHRpb25zID0gcmVxdWVzdC5vcHRpb25zOwogIHRyeSB7CiAgICBjb25zdCByZW5kZXJUcmFja2VkQ2hhbmdlcyA9IG9wdGlvbnM/LnJlbmRlclRyYWNrZWRDaGFuZ2VzID8/IHRydWU7CiAgICBjb25zdCByZXN1bHQgPSBleHBvcnRzLkRvY3VtZW50Q29tcGFyZXIuQ29tcGFyZURvY3VtZW50c1RvSHRtbFdpdGhPcHRpb25zKAogICAgICByZXF1ZXN0Lm9yaWdpbmFsQnl0ZXMsCiAgICAgIHJlcXVlc3QubW9kaWZpZWRCeXRlcywKICAgICAgb3B0aW9ucz8uYXV0aG9yTmFtZSA/PyAiRG9jeG9kdXMiLAogICAgICByZW5kZXJUcmFja2VkQ2hhbmdlcwogICAgKTsKICAgIGlmIChpc0Vycm9yUmVzcG9uc2UocmVzdWx0KSkgewogICAgICByZXR1cm4gcGFyc2VFcnJvcihyZXN1bHQpOwogICAgfQogICAgcmV0dXJuIHsgaHRtbDogcmVzdWx0IH07CiAgfSBjYXRjaCAoZXJyb3IpIHsKICAgIHJldHVybiB7IGVycm9yOiBTdHJpbmcoZXJyb3IpIH07CiAgfQp9CmZ1bmN0aW9uIGhhbmRsZUdldFJldmlzaW9ucyhyZXF1ZXN0KSB7CiAgY29uc3QgZXhwb3J0cyA9IGVuc3VyZUluaXRpYWxpemVkKCk7CiAgY29uc3Qgb3B0aW9ucyA9IHJlcXVlc3Qub3B0aW9uczsKICB0cnkgewogICAgY29uc3QgZGV0ZWN0TW92ZXMgPSBvcHRpb25zPy5kZXRlY3RNb3ZlcyA/PyB0cnVlOwogICAgY29uc3QgbW92ZVNpbWlsYXJpdHlUaHJlc2hvbGQgPSBvcHRpb25zPy5tb3ZlU2ltaWxhcml0eVRocmVzaG9sZCA/PyAwLjg7CiAgICBjb25zdCBtb3ZlTWluaW11bVdvcmRDb3VudCA9IG9wdGlvbnM/Lm1vdmVNaW5pbXVtV29yZENvdW50ID8/IDM7CiAgICBjb25zdCBjYXNlSW5zZW5zaXRpdmUgPSBvcHRpb25zPy5jYXNlSW5zZW5zaXRpdmUgPz8gZmFsc2U7CiAgICBjb25zdCByZXN1bHQgPSBleHBvcnRzLkRvY3VtZW50Q29tcGFyZXIuR2V0UmV2aXNpb25zSnNvbldpdGhPcHRpb25zKAogICAgICByZXF1ZXN0LmRvY3VtZW50Qnl0ZXMsCiAgICAgIGRldGVjdE1vdmVzLAogICAgICBtb3ZlU2ltaWxhcml0eVRocmVzaG9sZCwKICAgICAgbW92ZU1pbmltdW1Xb3JkQ291bnQsCiAgICAgIGNhc2VJbnNlbnNpdGl2ZQogICAgKTsKICAgIGlmIChpc0Vycm9yUmVzcG9uc2UocmVzdWx0KSkgewogICAgICByZXR1cm4gcGFyc2VFcnJvcihyZXN1bHQpOwogICAgfQogICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShyZXN1bHQpOwogICAgY29uc3QgcmV2aXNpb25zID0gKHBhcnNlZC5SZXZpc2lvbnMgfHwgcGFyc2VkLnJldmlzaW9ucyB8fCBbXSkubWFwKAogICAgICAocikgPT4gKHsKICAgICAgICBhdXRob3I6IHIuQXV0aG9yIHx8IHIuYXV0aG9yLAogICAgICAgIGRhdGU6IHIuRGF0ZSB8fCByLmRhdGUsCiAgICAgICAgcmV2aXNpb25UeXBlOiByLlJldmlzaW9uVHlwZSB8fCByLnJldmlzaW9uVHlwZSwKICAgICAgICB0ZXh0OiByLlRleHQgfHwgci50ZXh0LAogICAgICAgIG1vdmVHcm91cElkOiByLk1vdmVHcm91cElkID8/IHIubW92ZUdyb3VwSWQsCiAgICAgICAgaXNNb3ZlU291cmNlOiByLklzTW92ZVNvdXJjZSA/PyByLmlzTW92ZVNvdXJjZSwKICAgICAgICBmb3JtYXRDaGFuZ2U6IHIuRm9ybWF0Q2hhbmdlIHx8IHIuZm9ybWF0Q2hhbmdlID8gewogICAgICAgICAgb2xkUHJvcGVydGllczogci5Gb3JtYXRDaGFuZ2U/Lk9sZFByb3BlcnRpZXMgfHwgci5mb3JtYXRDaGFuZ2U/Lm9sZFByb3BlcnRpZXMsCiAgICAgICAgICBuZXdQcm9wZXJ0aWVzOiByLkZvcm1hdENoYW5nZT8uTmV3UHJvcGVydGllcyB8fCByLmZvcm1hdENoYW5nZT8ubmV3UHJvcGVydGllcywKICAgICAgICAgIGNoYW5nZWRQcm9wZXJ0eU5hbWVzOiByLkZvcm1hdENoYW5nZT8uQ2hhbmdlZFByb3BlcnR5TmFtZXMgfHwgci5mb3JtYXRDaGFuZ2U/LmNoYW5nZWRQcm9wZXJ0eU5hbWVzCiAgICAgICAgfSA6IHZvaWQgMAogICAgICB9KQogICAgKTsKICAgIHJldHVybiB7IHJldmlzaW9ucyB9OwogIH0gY2F0Y2ggKGVycm9yKSB7CiAgICByZXR1cm4geyBlcnJvcjogU3RyaW5nKGVycm9yKSB9OwogIH0KfQpmdW5jdGlvbiBoYW5kbGVHZXREb2N1bWVudE1ldGFkYXRhKHJlcXVlc3QpIHsKICBjb25zdCBleHBvcnRzID0gZW5zdXJlSW5pdGlhbGl6ZWQoKTsKICB0cnkgewogICAgY29uc3QgcmVzdWx0ID0gZXhwb3J0cy5Eb2N1bWVudENvbnZlcnRlci5HZXREb2N1bWVudE1ldGFkYXRhKAogICAgICByZXF1ZXN0LmRvY3VtZW50Qnl0ZXMKICAgICk7CiAgICBpZiAoaXNFcnJvclJlc3BvbnNlKHJlc3VsdCkpIHsKICAgICAgcmV0dXJuIHBhcnNlRXJyb3IocmVzdWx0KTsKICAgIH0KICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UocmVzdWx0KTsKICAgIGNvbnN0IGNvbnZlcnRTZWN0aW9uID0gKHMpID0+ICh7CiAgICAgIHNlY3Rpb25JbmRleDogcy5TZWN0aW9uSW5kZXggPz8gcy5zZWN0aW9uSW5kZXgsCiAgICAgIHBhZ2VXaWR0aFB0OiBzLlBhZ2VXaWR0aFB0ID8/IHMucGFnZVdpZHRoUHQsCiAgICAgIHBhZ2VIZWlnaHRQdDogcy5QYWdlSGVpZ2h0UHQgPz8gcy5wYWdlSGVpZ2h0UHQsCiAgICAgIG1hcmdpblRvcFB0OiBzLk1hcmdpblRvcFB0ID8/IHMubWFyZ2luVG9wUHQsCiAgICAgIG1hcmdpblJpZ2h0UHQ6IHMuTWFyZ2luUmlnaHRQdCA/PyBzLm1hcmdpblJpZ2h0UHQsCiAgICAgIG1hcmdpbkJvdHRvbVB0OiBzLk1hcmdpbkJvdHRvbVB0ID8/IHMubWFyZ2luQm90dG9tUHQsCiAgICAgIG1hcmdpbkxlZnRQdDogcy5NYXJnaW5MZWZ0UHQgPz8gcy5tYXJnaW5MZWZ0UHQsCiAgICAgIGNvbnRlbnRXaWR0aFB0OiBzLkNvbnRlbnRXaWR0aFB0ID8/IHMuY29udGVudFdpZHRoUHQsCiAgICAgIGNvbnRlbnRIZWlnaHRQdDogcy5Db250ZW50SGVpZ2h0UHQgPz8gcy5jb250ZW50SGVpZ2h0UHQsCiAgICAgIGhlYWRlclB0OiBzLkhlYWRlclB0ID8/IHMuaGVhZGVyUHQsCiAgICAgIGZvb3RlclB0OiBzLkZvb3RlclB0ID8/IHMuZm9vdGVyUHQsCiAgICAgIHBhcmFncmFwaENvdW50OiBzLlBhcmFncmFwaENvdW50ID8/IHMucGFyYWdyYXBoQ291bnQsCiAgICAgIHRhYmxlQ291bnQ6IHMuVGFibGVDb3VudCA/PyBzLnRhYmxlQ291bnQsCiAgICAgIGhhc0hlYWRlcjogcy5IYXNIZWFkZXIgPz8gcy5oYXNIZWFkZXIsCiAgICAgIGhhc0Zvb3Rlcjogcy5IYXNGb290ZXIgPz8gcy5oYXNGb290ZXIsCiAgICAgIGhhc0ZpcnN0UGFnZUhlYWRlcjogcy5IYXNGaXJzdFBhZ2VIZWFkZXIgPz8gcy5oYXNGaXJzdFBhZ2VIZWFkZXIsCiAgICAgIGhhc0ZpcnN0UGFnZUZvb3Rlcjogcy5IYXNGaXJzdFBhZ2VGb290ZXIgPz8gcy5oYXNGaXJzdFBhZ2VGb290ZXIsCiAgICAgIGhhc0V2ZW5QYWdlSGVhZGVyOiBzLkhhc0V2ZW5QYWdlSGVhZGVyID8/IHMuaGFzRXZlblBhZ2VIZWFkZXIsCiAgICAgIGhhc0V2ZW5QYWdlRm9vdGVyOiBzLkhhc0V2ZW5QYWdlRm9vdGVyID8/IHMuaGFzRXZlblBhZ2VGb290ZXIsCiAgICAgIHN0YXJ0UGFyYWdyYXBoSW5kZXg6IHMuU3RhcnRQYXJhZ3JhcGhJbmRleCA/PyBzLnN0YXJ0UGFyYWdyYXBoSW5kZXgsCiAgICAgIGVuZFBhcmFncmFwaEluZGV4OiBzLkVuZFBhcmFncmFwaEluZGV4ID8/IHMuZW5kUGFyYWdyYXBoSW5kZXgsCiAgICAgIHN0YXJ0VGFibGVJbmRleDogcy5TdGFydFRhYmxlSW5kZXggPz8gcy5zdGFydFRhYmxlSW5kZXgsCiAgICAgIGVuZFRhYmxlSW5kZXg6IHMuRW5kVGFibGVJbmRleCA/PyBzLmVuZFRhYmxlSW5kZXgKICAgIH0pOwogICAgY29uc3QgbWV0YWRhdGEgPSB7CiAgICAgIHNlY3Rpb25zOiAocGFyc2VkLlNlY3Rpb25zIHx8IHBhcnNlZC5zZWN0aW9ucyB8fCBbXSkubWFwKGNvbnZlcnRTZWN0aW9uKSwKICAgICAgdG90YWxQYXJhZ3JhcGhzOiBwYXJzZWQuVG90YWxQYXJhZ3JhcGhzID8/IHBhcnNlZC50b3RhbFBhcmFncmFwaHMsCiAgICAgIHRvdGFsVGFibGVzOiBwYXJzZWQuVG90YWxUYWJsZXMgPz8gcGFyc2VkLnRvdGFsVGFibGVzLAogICAgICBoYXNGb290bm90ZXM6IHBhcnNlZC5IYXNGb290bm90ZXMgPz8gcGFyc2VkLmhhc0Zvb3Rub3RlcywKICAgICAgaGFzRW5kbm90ZXM6IHBhcnNlZC5IYXNFbmRub3RlcyA/PyBwYXJzZWQuaGFzRW5kbm90ZXMsCiAgICAgIGhhc1RyYWNrZWRDaGFuZ2VzOiBwYXJzZWQuSGFzVHJhY2tlZENoYW5nZXMgPz8gcGFyc2VkLmhhc1RyYWNrZWRDaGFuZ2VzLAogICAgICBoYXNDb21tZW50czogcGFyc2VkLkhhc0NvbW1lbnRzID8/IHBhcnNlZC5oYXNDb21tZW50cywKICAgICAgZXN0aW1hdGVkUGFnZUNvdW50OiBwYXJzZWQuRXN0aW1hdGVkUGFnZUNvdW50ID8/IHBhcnNlZC5lc3RpbWF0ZWRQYWdlQ291bnQKICAgIH07CiAgICByZXR1cm4geyBtZXRhZGF0YSB9OwogIH0gY2F0Y2ggKGVycm9yKSB7CiAgICByZXR1cm4geyBlcnJvcjogU3RyaW5nKGVycm9yKSB9OwogIH0KfQpmdW5jdGlvbiBoYW5kbGVHZXRWZXJzaW9uKCkgewogIGNvbnN0IGV4cG9ydHMgPSBlbnN1cmVJbml0aWFsaXplZCgpOwogIHRyeSB7CiAgICBjb25zdCByZXN1bHQgPSBleHBvcnRzLkRvY3VtZW50Q29udmVydGVyLkdldFZlcnNpb24oKTsKICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UocmVzdWx0KTsKICAgIHJldHVybiB7CiAgICAgIHZlcnNpb246IHsKICAgICAgICBsaWJyYXJ5OiBwYXJzZWQuTGlicmFyeSB8fCBwYXJzZWQubGlicmFyeSwKICAgICAgICBkb3RuZXRWZXJzaW9uOiBwYXJzZWQuRG90bmV0VmVyc2lvbiB8fCBwYXJzZWQuZG90bmV0VmVyc2lvbiwKICAgICAgICBwbGF0Zm9ybTogcGFyc2VkLlBsYXRmb3JtIHx8IHBhcnNlZC5wbGF0Zm9ybQogICAgICB9CiAgICB9OwogIH0gY2F0Y2ggKGVycm9yKSB7CiAgICByZXR1cm4geyBlcnJvcjogU3RyaW5nKGVycm9yKSB9OwogIH0KfQpzZWxmLm9ubWVzc2FnZSA9IGFzeW5jIChldmVudCkgPT4gewogIGNvbnN0IHJlcXVlc3QgPSBldmVudC5kYXRhOwogIHRyeSB7CiAgICBsZXQgcmVzcG9uc2U7CiAgICBzd2l0Y2ggKHJlcXVlc3QudHlwZSkgewogICAgICBjYXNlICJpbml0IjogewogICAgICAgIGNvbnN0IGluaXRSZXF1ZXN0ID0gcmVxdWVzdDsKICAgICAgICB0cnkgewogICAgICAgICAgYXdhaXQgaW5pdGlhbGl6ZVdhc20oaW5pdFJlcXVlc3Qud2FzbUJhc2VQYXRoKTsKICAgICAgICAgIHJlc3BvbnNlID0gewogICAgICAgICAgICBpZDogcmVxdWVzdC5pZCwKICAgICAgICAgICAgdHlwZTogImluaXQiLAogICAgICAgICAgICBzdWNjZXNzOiB0cnVlCiAgICAgICAgICB9OwogICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgICByZXNwb25zZSA9IHsKICAgICAgICAgICAgaWQ6IHJlcXVlc3QuaWQsCiAgICAgICAgICAgIHR5cGU6ICJpbml0IiwKICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsCiAgICAgICAgICAgIGVycm9yOiBTdHJpbmcoZXJyb3IpCiAgICAgICAgICB9OwogICAgICAgIH0KICAgICAgICBicmVhazsKICAgICAgfQogICAgICBjYXNlICJjb252ZXJ0RG9jeFRvSHRtbCI6IHsKICAgICAgICBjb25zdCBjb252ZXJ0UmVxdWVzdCA9IHJlcXVlc3Q7CiAgICAgICAgY29uc3QgcmVzdWx0ID0gaGFuZGxlQ29udmVydChjb252ZXJ0UmVxdWVzdCk7CiAgICAgICAgcmVzcG9uc2UgPSB7CiAgICAgICAgICBpZDogcmVxdWVzdC5pZCwKICAgICAgICAgIHR5cGU6ICJjb252ZXJ0RG9jeFRvSHRtbCIsCiAgICAgICAgICBzdWNjZXNzOiAhcmVzdWx0LmVycm9yLAogICAgICAgICAgaHRtbDogcmVzdWx0Lmh0bWwsCiAgICAgICAgICBlcnJvcjogcmVzdWx0LmVycm9yCiAgICAgICAgfTsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBjYXNlICJjb21wYXJlRG9jdW1lbnRzIjogewogICAgICAgIGNvbnN0IGNvbXBhcmVSZXF1ZXN0ID0gcmVxdWVzdDsKICAgICAgICBjb25zdCByZXN1bHQgPSBoYW5kbGVDb21wYXJlKGNvbXBhcmVSZXF1ZXN0KTsKICAgICAgICByZXNwb25zZSA9IHsKICAgICAgICAgIGlkOiByZXF1ZXN0LmlkLAogICAgICAgICAgdHlwZTogImNvbXBhcmVEb2N1bWVudHMiLAogICAgICAgICAgc3VjY2VzczogIXJlc3VsdC5lcnJvciwKICAgICAgICAgIGRvY3VtZW50Qnl0ZXM6IHJlc3VsdC5kb2N1bWVudEJ5dGVzLAogICAgICAgICAgZXJyb3I6IHJlc3VsdC5lcnJvcgogICAgICAgIH07CiAgICAgICAgaWYgKHJlc3VsdC5kb2N1bWVudEJ5dGVzKSB7CiAgICAgICAgICBzZWxmLnBvc3RNZXNzYWdlKHJlc3BvbnNlLCB7IHRyYW5zZmVyOiBbcmVzdWx0LmRvY3VtZW50Qnl0ZXMuYnVmZmVyXSB9KTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgY2FzZSAiY29tcGFyZURvY3VtZW50c1RvSHRtbCI6IHsKICAgICAgICBjb25zdCBjb21wYXJlVG9IdG1sUmVxdWVzdCA9IHJlcXVlc3Q7CiAgICAgICAgY29uc3QgcmVzdWx0ID0gaGFuZGxlQ29tcGFyZVRvSHRtbChjb21wYXJlVG9IdG1sUmVxdWVzdCk7CiAgICAgICAgcmVzcG9uc2UgPSB7CiAgICAgICAgICBpZDogcmVxdWVzdC5pZCwKICAgICAgICAgIHR5cGU6ICJjb21wYXJlRG9jdW1lbnRzVG9IdG1sIiwKICAgICAgICAgIHN1Y2Nlc3M6ICFyZXN1bHQuZXJyb3IsCiAgICAgICAgICBodG1sOiByZXN1bHQuaHRtbCwKICAgICAgICAgIGVycm9yOiByZXN1bHQuZXJyb3IKICAgICAgICB9OwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIGNhc2UgImdldFJldmlzaW9ucyI6IHsKICAgICAgICBjb25zdCBnZXRSZXZpc2lvbnNSZXF1ZXN0ID0gcmVxdWVzdDsKICAgICAgICBjb25zdCByZXN1bHQgPSBoYW5kbGVHZXRSZXZpc2lvbnMoZ2V0UmV2aXNpb25zUmVxdWVzdCk7CiAgICAgICAgcmVzcG9uc2UgPSB7CiAgICAgICAgICBpZDogcmVxdWVzdC5pZCwKICAgICAgICAgIHR5cGU6ICJnZXRSZXZpc2lvbnMiLAogICAgICAgICAgc3VjY2VzczogIXJlc3VsdC5lcnJvciwKICAgICAgICAgIHJldmlzaW9uczogcmVzdWx0LnJldmlzaW9ucywKICAgICAgICAgIGVycm9yOiByZXN1bHQuZXJyb3IKICAgICAgICB9OwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIGNhc2UgImdldERvY3VtZW50TWV0YWRhdGEiOiB7CiAgICAgICAgY29uc3QgZ2V0TWV0YWRhdGFSZXF1ZXN0ID0gcmVxdWVzdDsKICAgICAgICBjb25zdCByZXN1bHQgPSBoYW5kbGVHZXREb2N1bWVudE1ldGFkYXRhKGdldE1ldGFkYXRhUmVxdWVzdCk7CiAgICAgICAgcmVzcG9uc2UgPSB7CiAgICAgICAgICBpZDogcmVxdWVzdC5pZCwKICAgICAgICAgIHR5cGU6ICJnZXREb2N1bWVudE1ldGFkYXRhIiwKICAgICAgICAgIHN1Y2Nlc3M6ICFyZXN1bHQuZXJyb3IsCiAgICAgICAgICBtZXRhZGF0YTogcmVzdWx0Lm1ldGFkYXRhLAogICAgICAgICAgZXJyb3I6IHJlc3VsdC5lcnJvcgogICAgICAgIH07CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgY2FzZSAiZ2V0VmVyc2lvbiI6IHsKICAgICAgICBjb25zdCByZXN1bHQgPSBoYW5kbGVHZXRWZXJzaW9uKCk7CiAgICAgICAgcmVzcG9uc2UgPSB7CiAgICAgICAgICBpZDogcmVxdWVzdC5pZCwKICAgICAgICAgIHR5cGU6ICJnZXRWZXJzaW9uIiwKICAgICAgICAgIHN1Y2Nlc3M6ICFyZXN1bHQuZXJyb3IsCiAgICAgICAgICB2ZXJzaW9uOiByZXN1bHQudmVyc2lvbiwKICAgICAgICAgIGVycm9yOiByZXN1bHQuZXJyb3IKICAgICAgICB9OwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBjb25zdCB1bmtub3duUmVxdWVzdCA9IHJlcXVlc3Q7CiAgICAgICAgc2VsZi5wb3N0TWVzc2FnZSh7CiAgICAgICAgICBpZDogdW5rbm93blJlcXVlc3QuaWQsCiAgICAgICAgICB0eXBlOiB1bmtub3duUmVxdWVzdC50eXBlLAogICAgICAgICAgc3VjY2VzczogZmFsc2UsCiAgICAgICAgICBlcnJvcjogYFVua25vd24gcmVxdWVzdCB0eXBlOiAke3Vua25vd25SZXF1ZXN0LnR5cGV9YAogICAgICAgIH0pOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgfQogICAgc2VsZi5wb3N0TWVzc2FnZShyZXNwb25zZSk7CiAgfSBjYXRjaCAoZXJyb3IpIHsKICAgIHNlbGYucG9zdE1lc3NhZ2UoewogICAgICBpZDogcmVxdWVzdC5pZCwKICAgICAgdHlwZTogcmVxdWVzdC50eXBlLAogICAgICBzdWNjZXNzOiBmYWxzZSwKICAgICAgZXJyb3I6IFN0cmluZyhlcnJvcikKICAgIH0pOwogIH0KfTsKc2VsZi5wb3N0TWVzc2FnZSh7IHR5cGU6ICJyZWFkeSIgfSk7Cg==",typeof document>"u"?require("url").pathToFileURL(__filename).href:ae&&ae.tagName.toUpperCase()==="SCRIPT"&&ae.src||new URL("react-docxodus-viewer.cjs.js",document.baseURI).href).href,A=new Worker(Z,{type:"module"}),m=new Map;let C=!0;A.onmessage=g=>{const l=g.data;if(l.type==="ready")return;const d=m.get(l.id);d&&(m.delete(l.id),l.success?d.resolve(l):d.reject(new Error(l.error||"Unknown error")))},A.onerror=g=>{for(const l of m.values())l.reject(new Error(`Worker error: ${g.message}`));m.clear(),C=!1};function I(g,l){return new Promise((d,b)=>{if(!C){b(new Error("Worker has been terminated"));return}m.set(g.id,{resolve:d,reject:b}),l&&l.length>0?A.postMessage(g,l):A.postMessage(g)})}const h=await I({id:z(),type:"init",wasmBasePath:o});if(!h.success)throw A.terminate(),new Error(`Failed to initialize worker: ${h.error}`);return{async convertDocxToHtml(g,l){const d=await w(g);return(await I({id:z(),type:"convertDocxToHtml",documentBytes:d,options:l},[d.buffer])).html},async compareDocuments(g,l,d){const b=await w(g),y=await w(l);return(await I({id:z(),type:"compareDocuments",originalBytes:b,modifiedBytes:y,options:d},[b.buffer,y.buffer])).documentBytes},async compareDocumentsToHtml(g,l,d){const b=await w(g),y=await w(l);return(await I({id:z(),type:"compareDocumentsToHtml",originalBytes:b,modifiedBytes:y,options:d},[b.buffer,y.buffer])).html},async getRevisions(g,l){const d=await w(g);return(await I({id:z(),type:"getRevisions",documentBytes:d,options:l},[d.buffer])).revisions},async getDocumentMetadata(g){const l=await w(g);return(await I({id:z(),type:"getDocumentMetadata",documentBytes:l},[l.buffer])).metadata},async getVersion(){return(await I({id:z(),type:"getVersion"})).version},terminate(){C=!1,A.terminate();for(const g of m.values())g.reject(new Error("Worker terminated"));m.clear()},isActive(){return C}}}function We(){return typeof Worker<"u"}const Be={paginationScale:.8,showPageNumbers:!0,renderFootnotesAndEndnotes:!0,renderHeadersAndFooters:!0,commentMode:"disabled",annotationMode:"disabled",renderTrackedChanges:!1,showDeletedContent:!0,renderMoveOperations:!0,pageTitle:"Document",cssPrefix:"docx-",fabricateClasses:!0,additionalCss:"",commentCssClassPrefix:"comment-",annotationCssClassPrefix:"annot-"};function _e(s){return i.isInsertion(s)?"Inserted":i.isDeletion(s)?"Deleted":i.isMove(s)?s.isMoveSource?"Moved from":"Moved to":i.isFormatChange(s)?"Formatted":String(s.revisionType)}function $e(s){return i.isInsertion(s)?"rdv-revision--insertion":i.isDeletion(s)?"rdv-revision--deletion":i.isMove(s)?"rdv-revision--move":i.isFormatChange(s)?"rdv-revision--format":""}function qe(s){try{return new Date(s).toLocaleDateString(void 0,{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"})}catch{return s}}function en(s,o=150){return s.length<=o?s:s.substring(0,o)+"..."}function ie(s){return!(!s||typeof s!="string"||s.includes("<")||s.includes("xmlns")||s.includes("Unid=")||s.length>100)}function Ge(s){return s.replace(/([A-Z])/g," $1").replace(/^./,o=>o.toUpperCase()).trim()}function Ie(s){return s==="true"?"Yes":s==="false"?"No":s==="single"?"Single":s==="double"?"Double":s}function nn(s){if(!s.formatChange)return[];const{oldProperties:o,newProperties:Z}=s.formatChange,A=[],m=new Set;if(o)for(const[C,I]of Object.entries(o)){if(!ie(I))continue;m.add(C);const h=Z?.[C];A.push({property:Ge(C),oldValue:Ie(I),newValue:h&&ie(h)?Ie(h):void 0})}if(Z)for(const[C,I]of Object.entries(Z))m.has(C)||ie(I)&&A.push({property:Ge(C),oldValue:void 0,newValue:Ie(I)});return A}function sn({revisions:s}){const[o,Z]=a.useState("all"),[A,m]=a.useState(new Set),C=a.useMemo(()=>o==="all"?s:s.filter(g=>{switch(o){case"insertions":return i.isInsertion(g);case"deletions":return i.isDeletion(g);case"moves":return i.isMove(g);case"formatting":return i.isFormatChange(g);default:return!0}}),[s,o]),I=a.useMemo(()=>({total:s.length,insertions:s.filter(i.isInsertion).length,deletions:s.filter(i.isDeletion).length,moves:s.filter(i.isMove).length,formatting:s.filter(i.isFormatChange).length}),[s]),h=g=>{m(l=>{const d=new Set(l);return d.has(g)?d.delete(g):d.add(g),d})};return s.length===0?e.jsx("div",{className:"rdv-revision-panel",children:e.jsxs("div",{className:"rdv-revision-empty",children:[e.jsx("div",{className:"rdv-revision-empty__icon",children:"📝"}),e.jsx("p",{children:"No tracked changes found in this document."})]})}):e.jsxs("div",{className:"rdv-revision-panel",children:[e.jsxs("div",{className:"rdv-revision-header",children:[e.jsxs("div",{className:"rdv-revision-stats",children:[e.jsxs("span",{className:"rdv-revision-stat rdv-revision-stat--total",children:[I.total," change",I.total!==1?"s":""]}),I.insertions>0&&e.jsxs("span",{className:"rdv-revision-stat rdv-revision-stat--insertion",children:["+",I.insertions]}),I.deletions>0&&e.jsxs("span",{className:"rdv-revision-stat rdv-revision-stat--deletion",children:["−",I.deletions]}),I.moves>0&&e.jsxs("span",{className:"rdv-revision-stat rdv-revision-stat--move",children:["↔",I.moves]}),I.formatting>0&&e.jsxs("span",{className:"rdv-revision-stat rdv-revision-stat--format",children:["✎",I.formatting]})]}),e.jsxs("select",{className:"rdv-revision-filter",value:o,onChange:g=>Z(g.target.value),children:[e.jsx("option",{value:"all",children:"All Changes"}),e.jsxs("option",{value:"insertions",children:["Insertions (",I.insertions,")"]}),e.jsxs("option",{value:"deletions",children:["Deletions (",I.deletions,")"]}),e.jsxs("option",{value:"moves",children:["Moves (",I.moves,")"]}),e.jsxs("option",{value:"formatting",children:["Formatting (",I.formatting,")"]})]})]}),e.jsx("div",{className:"rdv-revision-list",children:C.map((g,l)=>{const d=A.has(l),b=g.text.length>150,y=i.isFormatChange(g)?nn(g):[];return e.jsxs("div",{className:`rdv-revision-item ${$e(g)}`,children:[e.jsxs("div",{className:"rdv-revision-item__header",children:[e.jsx("span",{className:"rdv-revision-type",children:_e(g)}),i.isMove(g)&&g.moveGroupId!==void 0&&e.jsxs("span",{className:"rdv-revision-move-id",children:["#",g.moveGroupId]}),e.jsx("span",{className:"rdv-revision-author",children:g.author||"Unknown"}),e.jsx("span",{className:"rdv-revision-date",children:qe(g.date)})]}),g.text&&e.jsxs("div",{className:"rdv-revision-item__content",children:[e.jsx("span",{className:"rdv-revision-text",children:d?g.text:en(g.text)}),b&&e.jsx("button",{className:"rdv-revision-expand",onClick:()=>h(l),children:d?"Show less":"Show more"})]}),y.length>0&&e.jsx("div",{className:"rdv-revision-item__format-details",children:y.map((r,T)=>e.jsxs("div",{className:"rdv-format-change",children:[e.jsx("span",{className:"rdv-format-change__property",children:r.property}),e.jsxs("span",{className:"rdv-format-change__values",children:[r.oldValue&&e.jsx("span",{className:"rdv-format-change__old",children:r.oldValue}),r.oldValue&&r.newValue&&e.jsx("span",{className:"rdv-format-change__arrow",children:"→"}),r.newValue&&e.jsx("span",{className:"rdv-format-change__new",children:r.newValue}),!r.oldValue&&r.newValue&&e.jsx("span",{className:"rdv-format-change__added",children:"(added)"}),r.oldValue&&!r.newValue&&e.jsx("span",{className:"rdv-format-change__removed",children:"(removed)"})]})]},T))})]},l)})})]})}function gn(s){switch(s){case"endnote":return i.CommentRenderMode.EndnoteStyle;case"inline":return i.CommentRenderMode.Inline;case"margin":return i.CommentRenderMode.Margin;default:return i.CommentRenderMode.Disabled}}function cn(s){switch(s){case"above":return i.AnnotationLabelMode.Above;case"inline":return i.AnnotationLabelMode.Inline;case"tooltip":return i.AnnotationLabelMode.Tooltip;case"none":return i.AnnotationLabelMode.None;default:return}}function tn({file:s,html:o,onFileChange:Z,onConversionStart:A,onConversionComplete:m,onError:C,onPageChange:I,onRevisionsExtracted:h,settings:g,defaultSettings:l,onSettingsChange:d,className:b,style:y,toolbar:r="top",showSettingsButton:T=!0,showRevisionsTab:S=!0,placeholder:Ne="Open a DOCX file to view",wasmBasePath:E,useWorker:u=!0}){const _=a.useMemo(()=>({...Be,...l}),[l]),[Xe,le]=a.useState(null),[Re,K]=a.useState(null),[oe,He]=a.useState(_),X=s!==void 0?s:Xe,G=o!==void 0?o:Re,t=a.useMemo(()=>g?{..._,...g}:oe,[g,_,oe]),R=pe.useDocxodus(E),[W,de]=a.useState(null),[ze,Ce]=a.useState(!1),[we,$]=a.useState(!1),[xe,re]=a.useState(null),Q=a.useRef(null);a.useEffect(()=>{if(!u||!We())return;let n=!1;return $(!0),re(null),Ee({wasmBasePath:E}).then(c=>{n?c.terminate():(Q.current=c,de(c),Ce(!0),$(!1))}).catch(c=>{n||(re(c instanceof Error?c:new Error(String(c))),$(!1))}),()=>{n=!0,Q.current&&(Q.current.terminate(),Q.current=null,de(null),Ce(!1))}},[u,E]);const H=u?ze:R.isReady,f=u?we:R.isLoading,D=u?xe:R.error,[B,Ae]=a.useState(!1),[me,U]=a.useState(null),[be,ue]=a.useState(""),[N,q]=a.useState(1),[p,ee]=a.useState(0),[fe,P]=a.useState(!1),[F,Y]=a.useState("document"),[ne,J]=a.useState([]),[Fe,Ze]=a.useState(!1),[x,M]=a.useState(null),se=a.useRef(null),ge=a.useCallback(()=>({commentRenderMode:gn(t.commentMode),pageTitle:t.pageTitle,cssPrefix:t.cssPrefix,fabricateClasses:t.fabricateClasses,additionalCss:t.additionalCss||void 0,commentCssClassPrefix:t.commentCssClassPrefix,paginationMode:i.PaginationMode.Paginated,paginationScale:t.paginationScale,renderAnnotations:t.annotationMode!=="disabled",annotationLabelMode:cn(t.annotationMode),annotationCssClassPrefix:t.annotationCssClassPrefix,renderFootnotesAndEndnotes:t.renderFootnotesAndEndnotes,renderHeadersAndFooters:t.renderHeadersAndFooters,renderTrackedChanges:t.renderTrackedChanges,showDeletedContent:t.showDeletedContent,renderMoveOperations:t.renderMoveOperations}),[t]),Ye=a.useCallback(async n=>{try{const c=u&&W?await W.getDocumentMetadata(n):await i.getDocumentMetadata(n);M(c)}catch{M(null)}},[u,W]),he=a.useCallback(async n=>{if(!(!H||!S)){Ze(!0);try{const c=u&&W?await W.getRevisions(n):await R.getRevisions(n);J(c),h?.(c)}catch{J([])}finally{Ze(!1)}}},[H,u,W,R,S,h]),j=a.useCallback(async n=>{if(H){Ae(!0),U(null),J([]),Y("document"),A?.(),u||await new Promise(c=>requestAnimationFrame(()=>requestAnimationFrame(c)));try{const c=u&&W?await W.convertDocxToHtml(n,ge()):await R.convertToHtml(n,ge());o===void 0&&K(c),m?.(c),he(n)}catch(c){const V=c instanceof Error?c:new Error(String(c));U(V),C?.(V)}finally{Ae(!1)}}},[H,u,W,R,ge,o,A,m,C,he]);a.useEffect(()=>{H&&X&&!G&&!B&&o===void 0&&j(X)},[H,X,G,B,j,o]);const Je=async n=>{const c=n.target.files?.[0];c&&(ue(c.name),U(null),q(1),ee(0),M(null),J([]),Y("document"),s===void 0&&(le(c),K(null)),Z?.(c),Ye(c),H&&o===void 0&&await j(c))},je=a.useCallback(async()=>{X&&(o===void 0&&K(null),await j(X))},[X,j,o]),ke=()=>{s===void 0&&le(null),o===void 0&&K(null),U(null),ue(""),q(1),ee(0),J([]),Y("document"),M(null),Z?.(null);const n=document.getElementById("rdv-file-input");n&&(n.value="")},v=a.useCallback(n=>{const c={...t,...n};g===void 0&&He(c),d?.(c)},[t,g,d]),Se=()=>v({paginationScale:Math.min(t.paginationScale+.1,2)}),Ke=()=>v({paginationScale:Math.max(t.paginationScale-.1,.3)}),Qe=n=>v({paginationScale:Math.max(.3,Math.min(2,n))}),ce=n=>{const c=se.current;if(!c||n<1||n>p)return;const V=c.querySelector(`[data-page-number="${n}"]`);V&&V.scrollIntoView({behavior:"smooth",block:"start"})},De=()=>N>1&&ce(N-1),Ue=()=>N<p&&ce(N+1),Pe=n=>{q(n),I?.(n,p)};a.useEffect(()=>{const n=se.current;if(!n)return;const c=V=>{const L=V.target.closest('a[href^="#"]');if(!L)return;const k=L.getAttribute("href");if(!k||!k.startsWith("#"))return;V.preventDefault();const ye=k.substring(1),O=n.querySelector(`[id="${ye}"], [name="${ye}"]`);O&&(O.scrollIntoView({behavior:"smooth",block:"center"}),O.classList.add("rdv-footnote-highlight"),setTimeout(()=>O.classList.remove("rdv-footnote-highlight"),2e3))};return n.addEventListener("click",c),()=>n.removeEventListener("click",c)},[G]),a.useEffect(()=>{p>0&&I?.(N,p)},[p,N,I]);const ve=B||f,Me=()=>e.jsx("div",{className:"rdv-settings-overlay",onClick:()=>P(!1),children:e.jsxs("div",{className:"rdv-settings-modal",onClick:n=>n.stopPropagation(),children:[e.jsxs("div",{className:"rdv-settings-header",children:[e.jsx("h3",{children:"Viewer Settings"}),e.jsx("button",{className:"rdv-settings-close",onClick:()=>P(!1),children:"×"})]}),e.jsxs("div",{className:"rdv-settings-body",children:[e.jsxs("div",{className:"rdv-settings-section",children:[e.jsx("h4",{children:"Display Options"}),e.jsxs("label",{className:"rdv-settings-checkbox",children:[e.jsx("input",{type:"checkbox",checked:t.renderFootnotesAndEndnotes,onChange:n=>v({renderFootnotesAndEndnotes:n.target.checked})}),e.jsx("span",{children:"Show footnotes and endnotes"})]}),e.jsxs("label",{className:"rdv-settings-checkbox",children:[e.jsx("input",{type:"checkbox",checked:t.renderHeadersAndFooters,onChange:n=>v({renderHeadersAndFooters:n.target.checked})}),e.jsx("span",{children:"Show headers and footers"})]}),e.jsxs("label",{className:"rdv-settings-checkbox",children:[e.jsx("input",{type:"checkbox",checked:t.showPageNumbers,onChange:n=>v({showPageNumbers:n.target.checked})}),e.jsx("span",{children:"Show page numbers"})]})]}),e.jsxs("div",{className:"rdv-settings-section",children:[e.jsx("h4",{children:"Comment Rendering"}),e.jsx("div",{className:"rdv-settings-radio-group",children:["disabled","endnote","inline","margin"].map(n=>e.jsxs("label",{className:"rdv-settings-radio",children:[e.jsx("input",{type:"radio",name:"commentMode",checked:t.commentMode===n,onChange:()=>v({commentMode:n})}),e.jsxs("span",{children:[n.charAt(0).toUpperCase()+n.slice(1),n==="endnote"?"s":""]})]},n))})]}),e.jsxs("div",{className:"rdv-settings-section",children:[e.jsx("h4",{children:"Annotation Rendering"}),e.jsx("div",{className:"rdv-settings-radio-group",children:["disabled","above","inline","tooltip","none"].map(n=>e.jsxs("label",{className:"rdv-settings-radio",children:[e.jsx("input",{type:"radio",name:"annotationMode",checked:t.annotationMode===n,onChange:()=>v({annotationMode:n})}),e.jsx("span",{children:n==="none"?"Highlight Only":n.charAt(0).toUpperCase()+n.slice(1)})]},n))})]}),e.jsxs("div",{className:"rdv-settings-section",children:[e.jsx("h4",{children:"Tracked Changes"}),e.jsxs("label",{className:"rdv-settings-checkbox",children:[e.jsx("input",{type:"checkbox",checked:t.renderTrackedChanges,onChange:n=>v({renderTrackedChanges:n.target.checked})}),e.jsx("span",{children:"Show tracked changes"})]}),t.renderTrackedChanges&&e.jsxs("div",{className:"rdv-settings-subsection",children:[e.jsxs("label",{className:"rdv-settings-checkbox",children:[e.jsx("input",{type:"checkbox",checked:t.showDeletedContent,onChange:n=>v({showDeletedContent:n.target.checked})}),e.jsx("span",{children:"Show deleted content"})]}),e.jsxs("label",{className:"rdv-settings-checkbox",children:[e.jsx("input",{type:"checkbox",checked:t.renderMoveOperations,onChange:n=>v({renderMoveOperations:n.target.checked})}),e.jsx("span",{children:"Distinguish move operations"})]})]})]})]}),e.jsx("div",{className:"rdv-settings-footer",children:e.jsx("button",{className:"rdv-settings-apply",onClick:()=>{je(),P(!1)},children:"Apply & Close"})})]})}),Le=ne.length>0,Ve=()=>e.jsxs("div",{className:"rdv-toolbar",children:[e.jsxs("div",{className:"rdv-toolbar-left",children:[e.jsx("label",{htmlFor:"rdv-file-input",className:"rdv-toolbar-file-btn",children:be||"Open Document"}),e.jsx("input",{id:"rdv-file-input",type:"file",accept:".docx",onChange:Je,disabled:ve,className:"rdv-file-input"}),be&&e.jsx("button",{className:"rdv-toolbar-btn rdv-toolbar-clear",onClick:ke,disabled:ve,children:"×"}),S&&Le&&G&&e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"rdv-toolbar-separator"}),e.jsxs("div",{className:"rdv-view-tabs",children:[e.jsx("button",{className:`rdv-view-tab ${F==="document"?"rdv-view-tab--active":""}`,onClick:()=>Y("document"),title:"View Document",children:"Document"}),e.jsxs("button",{className:`rdv-view-tab ${F==="revisions"?"rdv-view-tab--active":""}`,onClick:()=>Y("revisions"),title:"View Tracked Changes",children:["Changes (",ne.length,")"]})]})]}),S&&Fe&&e.jsx("span",{className:"rdv-extracting-indicator",title:"Extracting tracked changes...",children:"..."})]}),e.jsx("div",{className:"rdv-toolbar-center",children:G&&p>0&&F==="document"&&e.jsxs(e.Fragment,{children:[e.jsx("button",{className:"rdv-toolbar-btn",onClick:De,disabled:N<=1,title:"Previous Page",children:"◀"}),e.jsxs("div",{className:"rdv-page-input-group",children:[e.jsx("input",{type:"number",className:"rdv-page-input",value:N,min:1,max:p,onChange:n=>{const c=parseInt(n.target.value);isNaN(c)||ce(c)}}),e.jsxs("span",{className:"rdv-page-total",children:["/ ",p]})]}),e.jsx("button",{className:"rdv-toolbar-btn",onClick:Ue,disabled:N>=p,title:"Next Page",children:"▶"}),e.jsx("div",{className:"rdv-toolbar-separator"}),e.jsx("button",{className:"rdv-toolbar-btn",onClick:Ke,disabled:t.paginationScale<=.3,title:"Zoom Out",children:"−"}),e.jsxs("select",{className:"rdv-zoom-select",value:t.paginationScale,onChange:n=>Qe(parseFloat(n.target.value)),children:[e.jsx("option",{value:"0.5",children:"50%"}),e.jsx("option",{value:"0.75",children:"75%"}),e.jsx("option",{value:"0.8",children:"80%"}),e.jsx("option",{value:"0.9",children:"90%"}),e.jsx("option",{value:"1",children:"100%"}),e.jsx("option",{value:"1.25",children:"125%"}),e.jsx("option",{value:"1.5",children:"150%"}),e.jsx("option",{value:"2",children:"200%"})]}),e.jsx("button",{className:"rdv-toolbar-btn",onClick:Se,disabled:t.paginationScale>=2,title:"Zoom In",children:"+"})]})}),e.jsx("div",{className:"rdv-toolbar-right",children:T&&e.jsx("button",{className:"rdv-toolbar-btn rdv-toolbar-settings",onClick:()=>P(!0),title:"Settings",children:"⚙"})})]}),Oe=["rdv-viewer",b].filter(Boolean).join(" ");return e.jsxs("div",{className:Oe,style:y,children:[r==="top"&&e.jsx(Ve,{}),e.jsxs("div",{className:"rdv-content",children:[D&&e.jsx("div",{className:"rdv-message rdv-message--error",children:e.jsxs("p",{children:["Failed to initialize: ",D.message]})}),!D&&(f||B)&&(x&&B?e.jsx("div",{className:"rdv-pages rdv-pages--loading",children:e.jsx("div",{className:"rdv-page-placeholders",style:{backgroundColor:"#525659"},children:Array.from({length:x.estimatedPageCount||1}).map((n,c)=>{const V=x.sections[Math.min(c,x.sections.length-1)],te=t.paginationScale,L=Math.round((V?.pageWidthPt||612)*(96/72)*te),k=Math.round((V?.pageHeightPt||792)*(96/72)*te);return e.jsxs("div",{className:"rdv-page-placeholder",style:{width:`${L}px`,height:`${k}px`,marginBottom:"20px"},children:[e.jsx("div",{className:"rdv-page-placeholder__shimmer"}),c===0&&e.jsxs("div",{className:"rdv-page-placeholder__info",children:[e.jsx("div",{className:"rdv-spinner rdv-spinner--small"}),e.jsx("span",{children:"Converting document..."}),e.jsxs("span",{className:"rdv-page-placeholder__count",children:["~",x.estimatedPageCount," page",x.estimatedPageCount!==1?"s":""]})]}),e.jsx("div",{className:"rdv-page-placeholder__number",children:c+1})]},c)})})}):e.jsxs("div",{className:"rdv-message",children:[e.jsx("div",{className:"rdv-spinner"}),e.jsx("p",{children:f&&X?"Loading engine & preparing document...":f?"Loading document engine...":"Processing document..."})]})),!f&&!D&&!G&&!B&&!X&&e.jsxs("div",{className:"rdv-message",children:[e.jsx("div",{className:"rdv-message__icon",children:"📄"}),e.jsx("p",{children:Ne})]}),me&&!B&&e.jsx("div",{className:"rdv-message rdv-message--error",children:e.jsxs("p",{children:["Error: ",me.message]})}),F==="document"&&G&&!B&&e.jsx("div",{ref:se,className:"rdv-pages",children:e.jsx(pe.PaginatedDocument,{html:G,scale:t.paginationScale,showPageNumbers:t.showPageNumbers,pageGap:20,backgroundColor:"#525659",className:"rdv-paginated-document",onPaginationComplete:n=>{ee(n.totalPages)},onPageVisible:Pe})}),F==="revisions"&&G&&!B&&e.jsx(sn,{revisions:ne})]}),r==="bottom"&&e.jsx(Ve,{}),fe&&e.jsx(Me,{})]})}Object.defineProperty(exports,"RevisionType",{enumerable:!0,get:()=>i.RevisionType});Object.defineProperty(exports,"isDeletion",{enumerable:!0,get:()=>i.isDeletion});Object.defineProperty(exports,"isFormatChange",{enumerable:!0,get:()=>i.isFormatChange});Object.defineProperty(exports,"isInsertion",{enumerable:!0,get:()=>i.isInsertion});Object.defineProperty(exports,"isMove",{enumerable:!0,get:()=>i.isMove});exports.DEFAULT_SETTINGS=Be;exports.DocumentViewer=tn;exports.isWorkerSupported=We;
2
2
  //# sourceMappingURL=react-docxodus-viewer.cjs.js.map