@file-viewer/core 2.0.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.
Files changed (166) hide show
  1. package/LICENSE +160 -0
  2. package/README.en.md +78 -0
  3. package/README.md +83 -0
  4. package/dist/assets.d.ts +62 -0
  5. package/dist/assets.js +260 -0
  6. package/dist/browser.d.ts +1 -0
  7. package/dist/browser.js +1 -0
  8. package/dist/capabilities.d.ts +24 -0
  9. package/dist/capabilities.js +95 -0
  10. package/dist/document.d.ts +9 -0
  11. package/dist/document.js +86 -0
  12. package/dist/documentDom/anchors.d.ts +7 -0
  13. package/dist/documentDom/anchors.js +196 -0
  14. package/dist/documentDom/index.d.ts +5 -0
  15. package/dist/documentDom/index.js +3 -0
  16. package/dist/documentDom/providers.d.ts +13 -0
  17. package/dist/documentDom/providers.js +52 -0
  18. package/dist/documentDom/scroll.d.ts +12 -0
  19. package/dist/documentDom/scroll.js +42 -0
  20. package/dist/documentDom.d.ts +5 -0
  21. package/dist/documentDom.js +3 -0
  22. package/dist/documentEvents.d.ts +73 -0
  23. package/dist/documentEvents.js +150 -0
  24. package/dist/documentSearch.d.ts +50 -0
  25. package/dist/documentSearch.js +459 -0
  26. package/dist/documentZoom.d.ts +47 -0
  27. package/dist/documentZoom.js +184 -0
  28. package/dist/export.d.ts +26 -0
  29. package/dist/export.js +466 -0
  30. package/dist/formats.d.ts +305 -0
  31. package/dist/formats.js +207 -0
  32. package/dist/headless.d.ts +25 -0
  33. package/dist/headless.js +14 -0
  34. package/dist/index.d.ts +78 -0
  35. package/dist/index.js +118 -0
  36. package/dist/lifecycleFacade.d.ts +46 -0
  37. package/dist/lifecycleFacade.js +68 -0
  38. package/dist/loading.d.ts +59 -0
  39. package/dist/loading.js +489 -0
  40. package/dist/operations.d.ts +287 -0
  41. package/dist/operations.js +485 -0
  42. package/dist/options.d.ts +16 -0
  43. package/dist/options.js +92 -0
  44. package/dist/presentation.d.ts +14 -0
  45. package/dist/presentation.js +16 -0
  46. package/dist/printLayout.d.ts +19 -0
  47. package/dist/printLayout.js +83 -0
  48. package/dist/registry.d.ts +2 -0
  49. package/dist/registry.js +63 -0
  50. package/dist/rendererDispatcher.d.ts +21 -0
  51. package/dist/rendererDispatcher.js +42 -0
  52. package/dist/rendererHandler.d.ts +165 -0
  53. package/dist/rendererHandler.js +354 -0
  54. package/dist/renderers/archive.d.ts +2 -0
  55. package/dist/renderers/archive.js +547 -0
  56. package/dist/renderers/archiveCache.d.ts +10 -0
  57. package/dist/renderers/archiveCache.js +96 -0
  58. package/dist/renderers/archiveFallback.d.ts +7 -0
  59. package/dist/renderers/archiveFallback.js +166 -0
  60. package/dist/renderers/archiveShared.d.ts +23 -0
  61. package/dist/renderers/archiveShared.js +71 -0
  62. package/dist/renderers/audio.d.ts +8 -0
  63. package/dist/renderers/audio.js +219 -0
  64. package/dist/renderers/cad.d.ts +2 -0
  65. package/dist/renderers/cad.js +445 -0
  66. package/dist/renderers/code.d.ts +11 -0
  67. package/dist/renderers/code.js +233 -0
  68. package/dist/renderers/data.d.ts +7 -0
  69. package/dist/renderers/data.js +370 -0
  70. package/dist/renderers/drawing.d.ts +10 -0
  71. package/dist/renderers/drawing.js +537 -0
  72. package/dist/renderers/eda.d.ts +2 -0
  73. package/dist/renderers/eda.js +434 -0
  74. package/dist/renderers/edaParser.d.ts +77 -0
  75. package/dist/renderers/edaParser.js +569 -0
  76. package/dist/renderers/email.d.ts +2 -0
  77. package/dist/renderers/email.js +463 -0
  78. package/dist/renderers/epub.d.ts +2 -0
  79. package/dist/renderers/epub.js +330 -0
  80. package/dist/renderers/geo.d.ts +2 -0
  81. package/dist/renderers/geo.js +284 -0
  82. package/dist/renderers/image.d.ts +2 -0
  83. package/dist/renderers/image.js +179 -0
  84. package/dist/renderers/index.d.ts +21 -0
  85. package/dist/renderers/index.js +207 -0
  86. package/dist/renderers/markdown.d.ts +2 -0
  87. package/dist/renderers/markdown.js +83 -0
  88. package/dist/renderers/model.d.ts +2 -0
  89. package/dist/renderers/model.js +566 -0
  90. package/dist/renderers/ofd.d.ts +2 -0
  91. package/dist/renderers/ofd.js +255 -0
  92. package/dist/renderers/openDocument.d.ts +2 -0
  93. package/dist/renderers/openDocument.js +122 -0
  94. package/dist/renderers/pdf.d.ts +3 -0
  95. package/dist/renderers/pdf.js +846 -0
  96. package/dist/renderers/pdfStyles.d.ts +1 -0
  97. package/dist/renderers/pdfStyles.js +1 -0
  98. package/dist/renderers/pptx.d.ts +2 -0
  99. package/dist/renderers/pptx.js +202 -0
  100. package/dist/renderers/spreadsheet/state.d.ts +80 -0
  101. package/dist/renderers/spreadsheet/state.js +96 -0
  102. package/dist/renderers/spreadsheet/view.d.ts +25 -0
  103. package/dist/renderers/spreadsheet/view.js +833 -0
  104. package/dist/renderers/spreadsheet/worker/index.d.ts +2 -0
  105. package/dist/renderers/spreadsheet/worker/index.js +1 -0
  106. package/dist/renderers/spreadsheet/worker/sheetjs/SheetJsModel.d.ts +73 -0
  107. package/dist/renderers/spreadsheet/worker/sheetjs/SheetJsModel.js +623 -0
  108. package/dist/renderers/spreadsheet/worker/sheetjs/color.d.ts +2 -0
  109. package/dist/renderers/spreadsheet/worker/sheetjs/color.js +73 -0
  110. package/dist/renderers/spreadsheet/worker/sheetjs/index.d.ts +1 -0
  111. package/dist/renderers/spreadsheet/worker/sheetjs/index.js +1 -0
  112. package/dist/renderers/spreadsheet/worker/sheetjs/parser.d.ts +18 -0
  113. package/dist/renderers/spreadsheet/worker/sheetjs/parser.js +106 -0
  114. package/dist/renderers/spreadsheet/worker/sheetjs/sheet.worker.d.ts +1 -0
  115. package/dist/renderers/spreadsheet/worker/sheetjs/sheet.worker.js +11 -0
  116. package/dist/renderers/spreadsheet/worker/type.d.ts +57 -0
  117. package/dist/renderers/spreadsheet/worker/type.js +1 -0
  118. package/dist/renderers/spreadsheet.d.ts +3 -0
  119. package/dist/renderers/spreadsheet.js +929 -0
  120. package/dist/renderers/typst.d.ts +8 -0
  121. package/dist/renderers/typst.js +415 -0
  122. package/dist/renderers/umd/parser.d.ts +30 -0
  123. package/dist/renderers/umd/parser.js +408 -0
  124. package/dist/renderers/umd.d.ts +2 -0
  125. package/dist/renderers/umd.js +297 -0
  126. package/dist/renderers/video.d.ts +8 -0
  127. package/dist/renderers/video.js +108 -0
  128. package/dist/renderers/wordDoc.d.ts +5 -0
  129. package/dist/renderers/wordDoc.js +284 -0
  130. package/dist/renderers/wordDocx.d.ts +5 -0
  131. package/dist/renderers/wordDocx.js +501 -0
  132. package/dist/renderers/wordDocx.worker.d.ts +1 -0
  133. package/dist/renderers/wordDocx.worker.js +96 -0
  134. package/dist/source.d.ts +18 -0
  135. package/dist/source.js +152 -0
  136. package/dist/sourceLoading.d.ts +566 -0
  137. package/dist/sourceLoading.js +918 -0
  138. package/dist/state.d.ts +16 -0
  139. package/dist/state.js +81 -0
  140. package/dist/types.d.ts +446 -0
  141. package/dist/types.js +1 -0
  142. package/dist/viewer.d.ts +8 -0
  143. package/dist/viewer.js +285 -0
  144. package/dist/viewerOperations.d.ts +88 -0
  145. package/dist/viewerOperations.js +242 -0
  146. package/dist/watermark.d.ts +15 -0
  147. package/dist/watermark.js +81 -0
  148. package/dist/worker.d.ts +34 -0
  149. package/dist/worker.js +101 -0
  150. package/package.json +109 -0
  151. package/vendor/ofd/dltech/jbig2/arithmetic_decoder.js +183 -0
  152. package/vendor/ofd/dltech/jbig2/ccitt.js +1070 -0
  153. package/vendor/ofd/dltech/jbig2/compatibility.js +12 -0
  154. package/vendor/ofd/dltech/jbig2/core_utils.js +180 -0
  155. package/vendor/ofd/dltech/jbig2/is_node.js +27 -0
  156. package/vendor/ofd/dltech/jbig2/jbig2.js +2589 -0
  157. package/vendor/ofd/dltech/jbig2/jbig2_stream.js +81 -0
  158. package/vendor/ofd/dltech/jbig2/primitives.js +387 -0
  159. package/vendor/ofd/dltech/jbig2/stream.js +1348 -0
  160. package/vendor/ofd/dltech/jbig2/util.js +972 -0
  161. package/vendor/ofd/dltech/ofd/ofd.d.ts +11 -0
  162. package/vendor/ofd/dltech/ofd/ofd.js +100 -0
  163. package/vendor/ofd/dltech/ofd/ofd_parser.js +395 -0
  164. package/vendor/ofd/dltech/ofd/ofd_render.js +473 -0
  165. package/vendor/ofd/dltech/ofd/ofd_util.js +350 -0
  166. package/vendor/ofd/dltech/ofd/pipeline.js +26 -0
@@ -0,0 +1,284 @@
1
+ import { defaultMsDocCss, parseMsDocToHtml } from 'msdoc-viewer';
2
+ import { applyPrintPageSize, buildPrintPageStyle, formatCssPixels } from '../printLayout.js';
3
+ import { createFileViewerZoomChangeEmitter as createZoomChangeEmitter, } from '../documentZoom.js';
4
+ import { registerFileViewerZoomProvider, unregisterFileViewerZoomProvider } from '../documentDom.js';
5
+ const PAGE_BREAK_MARKER = '<span class="msdoc-page-break"></span>';
6
+ const EMPTY_PAGE_HTML = '<p class="msdoc-paragraph"><br></p>';
7
+ const MSDOC_PAGE_SIZE = {
8
+ width: 794,
9
+ height: 1123
10
+ };
11
+ const MSDOC_MIN_SCALE = 0.24;
12
+ const MSDOC_MAX_SCALE = 3;
13
+ const MSDOC_ZOOM_STEP = 0.15;
14
+ const WORD_PAGE_CSS = `
15
+ .msdoc-stage{
16
+ box-sizing:border-box;
17
+ min-height:100%;
18
+ padding:32px 24px 48px;
19
+ background:#ececec;
20
+ display:flex;
21
+ flex-direction:column;
22
+ align-items:center;
23
+ gap:24px;
24
+ }
25
+ .msdoc-page{
26
+ width:min(100%,794px);
27
+ box-sizing:border-box;
28
+ }
29
+ .msdoc-page > .msdoc-root{
30
+ box-sizing:border-box;
31
+ width:100%;
32
+ max-width:none;
33
+ min-height:1123px;
34
+ padding:clamp(24px,7%,96px) clamp(20px,6%,88px);
35
+ background:#fff;
36
+ border:1px solid #d9d9d9;
37
+ box-shadow:0 1px 3px rgba(0,0,0,0.08), 0 12px 32px rgba(0,0,0,0.12);
38
+ overflow-wrap:anywhere;
39
+ }
40
+ /* 表格不能沿用正文的 anywhere 断词,否则旧 DOC 的列宽和单元格内容会被过度压缩。 */
41
+ .msdoc-page .msdoc-table{
42
+ display:table;
43
+ width:auto;
44
+ max-width:100%;
45
+ table-layout:auto!important;
46
+ border-collapse:collapse;
47
+ border-spacing:0;
48
+ }
49
+ .msdoc-page .msdoc-table tbody,
50
+ .msdoc-page .msdoc-table tr{
51
+ width:auto;
52
+ }
53
+ .msdoc-page .msdoc-cell{
54
+ min-width:1.5em;
55
+ padding:4px 6px;
56
+ vertical-align:top;
57
+ word-break:normal;
58
+ overflow-wrap:normal;
59
+ white-space:normal;
60
+ }
61
+ .msdoc-page .msdoc-cell .msdoc-paragraph{
62
+ margin:0 0 4px;
63
+ word-break:normal;
64
+ overflow-wrap:break-word;
65
+ }
66
+ .msdoc-page .msdoc-cell .msdoc-paragraph:last-child{
67
+ margin-bottom:0;
68
+ }
69
+ .msdoc-page .msdoc-cell span{
70
+ white-space:normal!important;
71
+ }
72
+ .msdoc-page .msdoc-page-break{
73
+ display:none;
74
+ }
75
+ @media (max-width: 860px){
76
+ .msdoc-stage{
77
+ padding:16px 12px 24px;
78
+ gap:16px;
79
+ }
80
+ .msdoc-page{
81
+ width:100%;
82
+ }
83
+ .msdoc-page > .msdoc-root{
84
+ min-height:auto;
85
+ padding:24px 20px;
86
+ box-shadow:none;
87
+ }
88
+ }
89
+ `;
90
+ const MSDOC_ZOOM_CSS = `
91
+ .msdoc-zoom-viewer{
92
+ box-sizing:border-box;
93
+ height:100%;
94
+ overflow:auto;
95
+ background:#ececec;
96
+ }
97
+ .msdoc-zoom-viewer .msdoc-stage{
98
+ min-width:max-content;
99
+ }
100
+ .msdoc-zoom-viewer .msdoc-page{
101
+ position:relative;
102
+ max-width:none;
103
+ overflow:visible;
104
+ }
105
+ .msdoc-zoom-viewer .msdoc-page > .msdoc-root{
106
+ position:absolute;
107
+ top:0;
108
+ left:50%;
109
+ width:${MSDOC_PAGE_SIZE.width}px;
110
+ max-width:none;
111
+ margin:0;
112
+ transform-origin:top center;
113
+ }
114
+ `;
115
+ const getTargetWindow = (target) => {
116
+ return target.ownerDocument.defaultView;
117
+ };
118
+ function injectPageBreakMarkers(html) {
119
+ return html.replace(/<(p|table|section)([^>]*?)style="([^"]*?\bbreak-before\s*:\s*page;?[^"]*?)"([^>]*)>/gi, (match) => `${PAGE_BREAK_MARKER}${match}`);
120
+ }
121
+ function wrapAsWordPages(html) {
122
+ const normalizedHtml = injectPageBreakMarkers(html);
123
+ const pages = normalizedHtml.split(PAGE_BREAK_MARKER);
124
+ return `<div class="msdoc-stage">${pages.map(page => (`<section class="msdoc-page"><div class="msdoc-root">${page || EMPTY_PAGE_HTML}</div></section>`)).join('')}</div>`;
125
+ }
126
+ function prepareMsDocCloneForExport(target) {
127
+ const clone = target.cloneNode(true);
128
+ clone.classList.remove('msdoc-zoom-viewer');
129
+ clone.querySelectorAll('style[data-msdoc-zoom]').forEach(style => style.remove());
130
+ clone.querySelectorAll('.msdoc-stage, .msdoc-page, .msdoc-root').forEach(node => {
131
+ node.style.height = 'auto';
132
+ node.style.maxHeight = 'none';
133
+ node.style.overflow = 'visible';
134
+ node.style.transform = 'none';
135
+ });
136
+ clone.querySelectorAll('.msdoc-page').forEach(page => {
137
+ applyPrintPageSize(page, MSDOC_PAGE_SIZE, { heightMode: 'min' });
138
+ page.style.position = 'relative';
139
+ page.style.width = formatCssPixels(MSDOC_PAGE_SIZE.width);
140
+ page.style.maxWidth = 'none';
141
+ page.style.margin = '0 auto 18px';
142
+ const root = page.querySelector('.msdoc-root');
143
+ if (!root) {
144
+ return;
145
+ }
146
+ root.style.position = 'relative';
147
+ root.style.top = 'auto';
148
+ root.style.left = 'auto';
149
+ root.style.width = formatCssPixels(MSDOC_PAGE_SIZE.width);
150
+ root.style.maxWidth = 'none';
151
+ root.style.minHeight = formatCssPixels(MSDOC_PAGE_SIZE.height);
152
+ root.style.height = 'auto';
153
+ root.style.transform = 'none';
154
+ root.style.transformOrigin = 'top left';
155
+ root.style.boxShadow = 'none';
156
+ root.style.border = '0';
157
+ root.style.overflow = 'visible';
158
+ });
159
+ return clone.innerHTML;
160
+ }
161
+ function buildMsDocPrintStyle() {
162
+ return buildPrintPageStyle({
163
+ selector: '.viewer-export-content .msdoc-page',
164
+ width: MSDOC_PAGE_SIZE.width,
165
+ height: MSDOC_PAGE_SIZE.height,
166
+ heightMode: 'min'
167
+ });
168
+ }
169
+ function makeMsDocResponsive(target) {
170
+ const pages = Array.from(target.querySelectorAll('.msdoc-page'));
171
+ if (!pages.length) {
172
+ return () => { };
173
+ }
174
+ target.classList.add('msdoc-zoom-viewer');
175
+ const view = getTargetWindow(target);
176
+ const ResizeObserverCtor = view === null || view === void 0 ? void 0 : view.ResizeObserver;
177
+ const style = target.ownerDocument.createElement('style');
178
+ style.dataset.msdocZoom = 'true';
179
+ style.textContent = MSDOC_ZOOM_CSS;
180
+ target.prepend(style);
181
+ const zoomEmitter = createZoomChangeEmitter();
182
+ let resizeFrame = 0;
183
+ let userZoom = 1;
184
+ let currentScale = 1;
185
+ let currentFitScale = 1;
186
+ const clampScale = (scale) => {
187
+ return Math.min(MSDOC_MAX_SCALE, Math.max(MSDOC_MIN_SCALE, Number(scale.toFixed(2))));
188
+ };
189
+ const resize = () => {
190
+ if (!view) {
191
+ return;
192
+ }
193
+ view.cancelAnimationFrame(resizeFrame);
194
+ resizeFrame = view.requestAnimationFrame(() => {
195
+ let firstScale = 1;
196
+ let firstFitScale = 1;
197
+ pages.forEach(page => {
198
+ const root = page.querySelector('.msdoc-root');
199
+ if (!root) {
200
+ return;
201
+ }
202
+ const rootWidth = root.offsetWidth || MSDOC_PAGE_SIZE.width;
203
+ const rootHeight = Math.max(root.scrollHeight, root.offsetHeight, MSDOC_PAGE_SIZE.height);
204
+ const availableWidth = Math.max(target.clientWidth - 48, 120);
205
+ const fitScale = Math.min(1, Math.max(MSDOC_MIN_SCALE, availableWidth / rootWidth));
206
+ const scale = clampScale(fitScale * userZoom);
207
+ firstScale = scale;
208
+ firstFitScale = fitScale;
209
+ root.style.transform = `translateX(-50%) scale(${scale})`;
210
+ page.style.width = `${Math.ceil(Math.max(rootWidth * scale, 120))}px`;
211
+ page.style.height = `${Math.ceil(rootHeight * scale)}px`;
212
+ });
213
+ currentScale = firstScale;
214
+ currentFitScale = firstFitScale;
215
+ zoomEmitter.emit();
216
+ });
217
+ };
218
+ const getZoomState = () => ({
219
+ scale: currentScale,
220
+ label: `${Math.round(currentScale * 100)}%`,
221
+ canZoomIn: currentScale < MSDOC_MAX_SCALE,
222
+ canZoomOut: currentScale > MSDOC_MIN_SCALE,
223
+ canReset: userZoom !== 1,
224
+ minScale: MSDOC_MIN_SCALE,
225
+ maxScale: MSDOC_MAX_SCALE
226
+ });
227
+ const setUserZoom = (nextZoom) => {
228
+ userZoom = Math.min(6, Math.max(0.2, Number(nextZoom.toFixed(2))));
229
+ resize();
230
+ return getZoomState();
231
+ };
232
+ target.dataset.viewerZoomProvider = 'doc';
233
+ registerFileViewerZoomProvider(target, {
234
+ zoomIn: () => setUserZoom(userZoom + MSDOC_ZOOM_STEP),
235
+ zoomOut: () => setUserZoom(userZoom - MSDOC_ZOOM_STEP),
236
+ resetZoom: () => setUserZoom(1),
237
+ setZoom: scale => setUserZoom(scale / Math.max(currentFitScale, 0.01)),
238
+ getState: getZoomState,
239
+ subscribe: zoomEmitter.subscribe
240
+ });
241
+ const observer = ResizeObserverCtor ? new ResizeObserverCtor(resize) : null;
242
+ observer === null || observer === void 0 ? void 0 : observer.observe(target);
243
+ pages.forEach(page => {
244
+ const root = page.querySelector('.msdoc-root');
245
+ if (root) {
246
+ observer === null || observer === void 0 ? void 0 : observer.observe(root);
247
+ }
248
+ });
249
+ resize();
250
+ return () => {
251
+ view === null || view === void 0 ? void 0 : view.cancelAnimationFrame(resizeFrame);
252
+ observer === null || observer === void 0 ? void 0 : observer.disconnect();
253
+ unregisterFileViewerZoomProvider(target);
254
+ style.remove();
255
+ target.classList.remove('msdoc-zoom-viewer');
256
+ };
257
+ }
258
+ /**
259
+ * 渲染 doc 文件
260
+ */
261
+ export default async function render(buffer, target, context) {
262
+ var _a;
263
+ const rendered = await parseMsDocToHtml(buffer, {
264
+ renderOptions: {
265
+ css: `${defaultMsDocCss()}\n${WORD_PAGE_CSS}`
266
+ }
267
+ });
268
+ target.innerHTML = `<style data-msdoc>${rendered.css}</style>${wrapAsWordPages(rendered.html)}`;
269
+ const disposeResponsive = makeMsDocResponsive(target);
270
+ (_a = context === null || context === void 0 ? void 0 : context.registerExportAdapter) === null || _a === void 0 ? void 0 : _a.call(context, {
271
+ includeDocumentStyles: false,
272
+ printStyle: buildMsDocPrintStyle,
273
+ toHtml: () => prepareMsDocCloneForExport(target)
274
+ });
275
+ return {
276
+ $el: target,
277
+ unmount() {
278
+ var _a;
279
+ (_a = context === null || context === void 0 ? void 0 : context.registerExportAdapter) === null || _a === void 0 ? void 0 : _a.call(context, null);
280
+ disposeResponsive();
281
+ target.innerHTML = '';
282
+ }
283
+ };
284
+ }
@@ -0,0 +1,5 @@
1
+ import type { FileRenderContext, FileViewerRenderedInstance as AppWrapper } from '../types';
2
+ /**
3
+ * 渲染docx文件
4
+ */
5
+ export default function (buffer: ArrayBuffer, target: HTMLDivElement, context?: FileRenderContext): Promise<AppWrapper>;