@file-viewer/core 2.0.11 → 2.1.1

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 (116) hide show
  1. package/README.en.md +2 -2
  2. package/README.md +2 -2
  3. package/dist/config/options.d.ts +1 -1
  4. package/dist/config/options.js +1 -1
  5. package/dist/contracts/types.d.ts +76 -1
  6. package/dist/headless.d.ts +3 -3
  7. package/dist/headless.js +2 -2
  8. package/dist/index.d.ts +10 -7
  9. package/dist/index.js +106 -49
  10. package/dist/lifecycle/operations.d.ts +1 -0
  11. package/dist/lifecycle/operations.js +65 -6
  12. package/dist/platform/assets.d.ts +3 -1
  13. package/dist/platform/assets.js +43 -6
  14. package/dist/registry/capabilities.d.ts +2 -2
  15. package/dist/registry/capabilities.js +2 -1
  16. package/dist/registry/formats.d.ts +20 -7
  17. package/dist/registry/formats.js +14 -5
  18. package/dist/registry/registry.d.ts +8 -1
  19. package/dist/registry/registry.js +29 -0
  20. package/dist/renderers/image.js +1 -10
  21. package/dist/renderers/index.d.ts +320 -2
  22. package/dist/renderers/index.js +27 -157
  23. package/dist/viewer/createViewer.js +86 -3
  24. package/package.json +17 -44
  25. package/dist/renderers/archive.d.ts +0 -2
  26. package/dist/renderers/archive.js +0 -547
  27. package/dist/renderers/archiveCache.d.ts +0 -10
  28. package/dist/renderers/archiveCache.js +0 -96
  29. package/dist/renderers/archiveFallback.d.ts +0 -7
  30. package/dist/renderers/archiveFallback.js +0 -166
  31. package/dist/renderers/archiveShared.d.ts +0 -23
  32. package/dist/renderers/archiveShared.js +0 -71
  33. package/dist/renderers/audio.d.ts +0 -8
  34. package/dist/renderers/audio.js +0 -219
  35. package/dist/renderers/cad.d.ts +0 -2
  36. package/dist/renderers/cad.js +0 -446
  37. package/dist/renderers/code.d.ts +0 -11
  38. package/dist/renderers/code.js +0 -233
  39. package/dist/renderers/data.d.ts +0 -7
  40. package/dist/renderers/data.js +0 -370
  41. package/dist/renderers/drawing.d.ts +0 -10
  42. package/dist/renderers/drawing.js +0 -882
  43. package/dist/renderers/eda.d.ts +0 -2
  44. package/dist/renderers/eda.js +0 -434
  45. package/dist/renderers/edaParser.d.ts +0 -77
  46. package/dist/renderers/edaParser.js +0 -569
  47. package/dist/renderers/email.d.ts +0 -2
  48. package/dist/renderers/email.js +0 -463
  49. package/dist/renderers/epub.d.ts +0 -2
  50. package/dist/renderers/epub.js +0 -331
  51. package/dist/renderers/geo.d.ts +0 -2
  52. package/dist/renderers/geo.js +0 -284
  53. package/dist/renderers/markdown.d.ts +0 -2
  54. package/dist/renderers/markdown.js +0 -83
  55. package/dist/renderers/model.d.ts +0 -2
  56. package/dist/renderers/model.js +0 -567
  57. package/dist/renderers/ofd.d.ts +0 -2
  58. package/dist/renderers/ofd.js +0 -256
  59. package/dist/renderers/openDocument.d.ts +0 -2
  60. package/dist/renderers/openDocument.js +0 -122
  61. package/dist/renderers/pdf.d.ts +0 -3
  62. package/dist/renderers/pdf.js +0 -1001
  63. package/dist/renderers/pdfStyles.d.ts +0 -1
  64. package/dist/renderers/pdfStyles.js +0 -1
  65. package/dist/renderers/pptx.d.ts +0 -2
  66. package/dist/renderers/pptx.js +0 -217
  67. package/dist/renderers/spreadsheet/state.d.ts +0 -80
  68. package/dist/renderers/spreadsheet/state.js +0 -96
  69. package/dist/renderers/spreadsheet/view.d.ts +0 -25
  70. package/dist/renderers/spreadsheet/view.js +0 -833
  71. package/dist/renderers/spreadsheet/worker/index.d.ts +0 -2
  72. package/dist/renderers/spreadsheet/worker/index.js +0 -1
  73. package/dist/renderers/spreadsheet/worker/sheetjs/SheetJsModel.d.ts +0 -73
  74. package/dist/renderers/spreadsheet/worker/sheetjs/SheetJsModel.js +0 -623
  75. package/dist/renderers/spreadsheet/worker/sheetjs/color.d.ts +0 -2
  76. package/dist/renderers/spreadsheet/worker/sheetjs/color.js +0 -73
  77. package/dist/renderers/spreadsheet/worker/sheetjs/index.d.ts +0 -1
  78. package/dist/renderers/spreadsheet/worker/sheetjs/index.js +0 -1
  79. package/dist/renderers/spreadsheet/worker/sheetjs/parser.d.ts +0 -18
  80. package/dist/renderers/spreadsheet/worker/sheetjs/parser.js +0 -106
  81. package/dist/renderers/spreadsheet/worker/sheetjs/sheet.worker.d.ts +0 -1
  82. package/dist/renderers/spreadsheet/worker/sheetjs/sheet.worker.js +0 -11
  83. package/dist/renderers/spreadsheet/worker/type.d.ts +0 -57
  84. package/dist/renderers/spreadsheet/worker/type.js +0 -1
  85. package/dist/renderers/spreadsheet.d.ts +0 -3
  86. package/dist/renderers/spreadsheet.js +0 -929
  87. package/dist/renderers/typst.d.ts +0 -8
  88. package/dist/renderers/typst.js +0 -547
  89. package/dist/renderers/umd/parser.d.ts +0 -30
  90. package/dist/renderers/umd/parser.js +0 -408
  91. package/dist/renderers/umd.d.ts +0 -2
  92. package/dist/renderers/umd.js +0 -297
  93. package/dist/renderers/video.d.ts +0 -8
  94. package/dist/renderers/video.js +0 -108
  95. package/dist/renderers/wordDoc.d.ts +0 -5
  96. package/dist/renderers/wordDoc.js +0 -284
  97. package/dist/renderers/wordDocx.d.ts +0 -5
  98. package/dist/renderers/wordDocx.js +0 -985
  99. package/dist/renderers/wordDocx.worker.d.ts +0 -1
  100. package/dist/renderers/wordDocx.worker.js +0 -96
  101. package/vendor/ofd/dltech/jbig2/arithmetic_decoder.js +0 -183
  102. package/vendor/ofd/dltech/jbig2/ccitt.js +0 -1070
  103. package/vendor/ofd/dltech/jbig2/compatibility.js +0 -12
  104. package/vendor/ofd/dltech/jbig2/core_utils.js +0 -180
  105. package/vendor/ofd/dltech/jbig2/is_node.js +0 -27
  106. package/vendor/ofd/dltech/jbig2/jbig2.js +0 -2589
  107. package/vendor/ofd/dltech/jbig2/jbig2_stream.js +0 -81
  108. package/vendor/ofd/dltech/jbig2/primitives.js +0 -387
  109. package/vendor/ofd/dltech/jbig2/stream.js +0 -1348
  110. package/vendor/ofd/dltech/jbig2/util.js +0 -972
  111. package/vendor/ofd/dltech/ofd/ofd.d.ts +0 -11
  112. package/vendor/ofd/dltech/ofd/ofd.js +0 -100
  113. package/vendor/ofd/dltech/ofd/ofd_parser.js +0 -395
  114. package/vendor/ofd/dltech/ofd/ofd_render.js +0 -473
  115. package/vendor/ofd/dltech/ofd/ofd_util.js +0 -350
  116. package/vendor/ofd/dltech/ofd/pipeline.js +0 -26
@@ -1,11 +1,329 @@
1
- import type { FileRenderHandler, FileViewerRenderedInstance } from '../contracts/types';
1
+ import type { FileViewerBuiltinRendererPreset, FileRenderHandler, FileViewerRenderedInstance } from '../contracts/types';
2
2
  type CoreBrowserRendererHandler = FileRenderHandler<FileViewerRenderedInstance, HTMLDivElement>;
3
3
  interface CoreBrowserRendererHandlerEntry {
4
4
  rendererId: string;
5
5
  handler: CoreBrowserRendererHandler;
6
6
  }
7
7
  export declare const coreBrowserRendererHandlers: readonly CoreBrowserRendererHandlerEntry[];
8
- export declare const createFileViewerCoreRendererRegistry: () => {
8
+ export declare const CORE_LITE_RENDERER_IDS: readonly ["image"];
9
+ export declare const coreLiteBrowserRendererHandlers: CoreBrowserRendererHandlerEntry[];
10
+ export declare const coreLiteRendererDefinitions: ({
11
+ readonly id: "office-word-openxml";
12
+ readonly label: "Word OpenXML";
13
+ readonly category: "office";
14
+ readonly extensions: readonly ["docx", "docm", "dotx", "dotm"];
15
+ readonly async: true;
16
+ readonly capabilities: {
17
+ readonly download: true;
18
+ readonly print: "adapter";
19
+ readonly exportHtml: "adapter";
20
+ readonly zoom: "provider";
21
+ readonly search: true;
22
+ };
23
+ } | {
24
+ readonly id: "office-word-binary";
25
+ readonly label: "Word Binary";
26
+ readonly category: "office";
27
+ readonly extensions: readonly ["doc", "dot"];
28
+ readonly async: true;
29
+ readonly capabilities: {
30
+ readonly download: true;
31
+ readonly print: "adapter";
32
+ readonly exportHtml: "adapter";
33
+ readonly zoom: "provider";
34
+ readonly search: true;
35
+ };
36
+ } | {
37
+ readonly id: "office-presentation";
38
+ readonly label: "PowerPoint";
39
+ readonly category: "office";
40
+ readonly extensions: readonly ["pptx", "pptm", "potx", "potm", "ppsx", "ppsm"];
41
+ readonly async: true;
42
+ readonly capabilities: {
43
+ readonly download: true;
44
+ readonly print: true;
45
+ readonly exportHtml: true;
46
+ readonly zoom: "provider";
47
+ readonly search: true;
48
+ };
49
+ } | {
50
+ readonly id: "open-document";
51
+ readonly label: "Open Document";
52
+ readonly category: "office";
53
+ readonly extensions: readonly ["rtf", "odt", "odp"];
54
+ readonly async: true;
55
+ readonly capabilities: {
56
+ readonly download: true;
57
+ readonly print: true;
58
+ readonly exportHtml: true;
59
+ readonly zoom: "provider";
60
+ readonly search: true;
61
+ };
62
+ } | {
63
+ readonly id: "spreadsheet-openxml";
64
+ readonly label: "Spreadsheet";
65
+ readonly category: "office";
66
+ readonly extensions: readonly ["xlsx", "xltx", "xlsm", "xlsb", "xls", "xlt", "xltm", "csv", "ods", "fods", "numbers"];
67
+ readonly async: true;
68
+ readonly capabilities: {
69
+ readonly download: true;
70
+ readonly print: false;
71
+ readonly exportHtml: false;
72
+ readonly zoom: "provider";
73
+ readonly search: true;
74
+ };
75
+ } | {
76
+ readonly id: "pdf";
77
+ readonly label: "PDF";
78
+ readonly category: "document";
79
+ readonly extensions: readonly ["pdf"];
80
+ readonly async: true;
81
+ readonly capabilities: {
82
+ readonly download: true;
83
+ readonly print: "adapter";
84
+ readonly exportHtml: "adapter";
85
+ readonly zoom: "provider";
86
+ readonly search: "provider";
87
+ };
88
+ } | {
89
+ readonly id: "ofd";
90
+ readonly label: "OFD";
91
+ readonly category: "document";
92
+ readonly extensions: readonly ["ofd"];
93
+ readonly async: true;
94
+ readonly capabilities: {
95
+ readonly download: true;
96
+ readonly print: true;
97
+ readonly exportHtml: true;
98
+ readonly zoom: "provider";
99
+ readonly search: true;
100
+ };
101
+ } | {
102
+ readonly id: "typst";
103
+ readonly label: "Typst";
104
+ readonly category: "document";
105
+ readonly extensions: readonly ["typ", "typst"];
106
+ readonly async: true;
107
+ readonly capabilities: {
108
+ readonly download: true;
109
+ readonly print: "adapter";
110
+ readonly exportHtml: "adapter";
111
+ readonly zoom: "provider";
112
+ readonly search: true;
113
+ };
114
+ } | {
115
+ readonly id: "archive";
116
+ readonly label: "Archive";
117
+ readonly category: "archive";
118
+ readonly extensions: readonly ["zip", "zipx", "7z", "rar", "tar", "gz", "gzip", "tgz", "bz2", "bzip2", "tbz", "tbz2", "xz", "txz", "lzma", "zst", "tzst", "cab", "ar", "cpio", "iso", "xar", "lha", "lzh", "jar", "war", "ear", "apk", "cbz", "cbr"];
119
+ readonly async: true;
120
+ readonly capabilities: {
121
+ readonly download: true;
122
+ readonly print: false;
123
+ readonly exportHtml: false;
124
+ readonly zoom: false;
125
+ readonly search: true;
126
+ };
127
+ } | {
128
+ readonly id: "email";
129
+ readonly label: "Email";
130
+ readonly category: "email";
131
+ readonly extensions: readonly ["eml", "msg", "mbox"];
132
+ readonly async: true;
133
+ readonly capabilities: {
134
+ readonly download: true;
135
+ readonly print: false;
136
+ readonly exportHtml: true;
137
+ readonly zoom: false;
138
+ readonly search: true;
139
+ };
140
+ } | {
141
+ readonly id: "eda";
142
+ readonly label: "EDA";
143
+ readonly category: "eda";
144
+ readonly extensions: readonly ["olb", "dra", "gds", "oas", "oasis"];
145
+ readonly async: true;
146
+ readonly capabilities: {
147
+ readonly download: true;
148
+ readonly print: true;
149
+ readonly exportHtml: true;
150
+ readonly zoom: false;
151
+ readonly search: true;
152
+ };
153
+ } | {
154
+ readonly id: "cad";
155
+ readonly label: "CAD";
156
+ readonly category: "cad";
157
+ readonly extensions: readonly ["dxf", "dwg", "dwf", "dwfx", "xps"];
158
+ readonly async: true;
159
+ readonly capabilities: {
160
+ readonly download: true;
161
+ readonly print: true;
162
+ readonly exportHtml: true;
163
+ readonly zoom: "provider";
164
+ readonly search: false;
165
+ };
166
+ } | {
167
+ readonly id: "model";
168
+ readonly label: "3D Model";
169
+ readonly category: "model";
170
+ readonly extensions: readonly ["glb", "gltf", "obj", "stl", "ply", "fbx", "dae", "3ds", "3mf", "amf", "usd", "usda", "usdc", "usdz", "kmz", "step", "stp", "iges", "igs", "ifc", "3dm", "brep", "pcd", "wrl", "vrml", "xyz", "vtk", "vtp"];
171
+ readonly async: true;
172
+ readonly capabilities: {
173
+ readonly download: true;
174
+ readonly print: false;
175
+ readonly exportHtml: false;
176
+ readonly zoom: "provider";
177
+ readonly search: false;
178
+ };
179
+ } | {
180
+ readonly id: "geo";
181
+ readonly label: "Geospatial";
182
+ readonly category: "geo";
183
+ readonly extensions: readonly ["geojson", "kml", "gpx", "shp"];
184
+ readonly async: true;
185
+ readonly capabilities: {
186
+ readonly download: true;
187
+ readonly print: true;
188
+ readonly exportHtml: true;
189
+ readonly zoom: "provider";
190
+ readonly search: true;
191
+ };
192
+ } | {
193
+ readonly id: "drawing";
194
+ readonly label: "Drawing";
195
+ readonly category: "drawing";
196
+ readonly extensions: readonly ["excalidraw", "drawio", "dio", "mermaid", "mmd", "plantuml", "puml"];
197
+ readonly async: true;
198
+ readonly capabilities: {
199
+ readonly download: true;
200
+ readonly print: true;
201
+ readonly exportHtml: true;
202
+ readonly zoom: "provider";
203
+ readonly search: true;
204
+ };
205
+ } | {
206
+ readonly id: "mindmap";
207
+ readonly label: "Mind Map";
208
+ readonly category: "mindmap";
209
+ readonly extensions: readonly ["xmind"];
210
+ readonly async: true;
211
+ readonly capabilities: {
212
+ readonly download: true;
213
+ readonly print: true;
214
+ readonly exportHtml: true;
215
+ readonly zoom: "provider";
216
+ readonly search: true;
217
+ };
218
+ } | {
219
+ readonly id: "epub";
220
+ readonly label: "EPUB";
221
+ readonly category: "ebook";
222
+ readonly extensions: readonly ["epub"];
223
+ readonly async: true;
224
+ readonly capabilities: {
225
+ readonly download: true;
226
+ readonly print: false;
227
+ readonly exportHtml: true;
228
+ readonly zoom: false;
229
+ readonly search: "provider";
230
+ };
231
+ } | {
232
+ readonly id: "umd";
233
+ readonly label: "UMD";
234
+ readonly category: "ebook";
235
+ readonly extensions: readonly ["umd"];
236
+ readonly async: true;
237
+ readonly capabilities: {
238
+ readonly download: true;
239
+ readonly print: true;
240
+ readonly exportHtml: true;
241
+ readonly zoom: "provider";
242
+ readonly search: true;
243
+ };
244
+ } | {
245
+ readonly id: "image";
246
+ readonly label: "Image";
247
+ readonly category: "image";
248
+ readonly extensions: readonly ["gif", "jpg", "jpeg", "bmp", "tiff", "tif", "png", "svg", "webp", "avif", "ico", "heic", "heif", "jxl"];
249
+ readonly async: true;
250
+ readonly capabilities: {
251
+ readonly download: true;
252
+ readonly print: true;
253
+ readonly exportHtml: true;
254
+ readonly zoom: "provider";
255
+ readonly search: false;
256
+ };
257
+ } | {
258
+ readonly id: "markdown";
259
+ readonly label: "Markdown";
260
+ readonly category: "markdown";
261
+ readonly extensions: readonly ["md", "markdown"];
262
+ readonly async: true;
263
+ readonly capabilities: {
264
+ readonly download: true;
265
+ readonly print: true;
266
+ readonly exportHtml: true;
267
+ readonly zoom: false;
268
+ readonly search: true;
269
+ };
270
+ } | {
271
+ readonly id: "code";
272
+ readonly label: "Code and Text";
273
+ readonly category: "code";
274
+ readonly extensions: readonly ["txt", "json", "js", "mjs", "cjs", "css", "java", "py", "html", "htm", "jsx", "ts", "tsx", "xml", "log", "vue", "yaml", "yml", "ini", "sh", "bash", "sql", "go", "rs", "php", "c", "cpp", "cc", "h", "hpp", "cs", "diff", "patch", "bundle", "bdl", "jsonc", "json5", "ipynb", "toml", "proto", "hcl", "tex", "gv", "http", "react", "rb", "swift", "kt"];
275
+ readonly async: true;
276
+ readonly capabilities: {
277
+ readonly download: true;
278
+ readonly print: true;
279
+ readonly exportHtml: true;
280
+ readonly zoom: false;
281
+ readonly search: true;
282
+ };
283
+ } | {
284
+ readonly id: "video";
285
+ readonly label: "Video";
286
+ readonly category: "media";
287
+ readonly extensions: readonly ["mp4", "webm", "m3u8"];
288
+ readonly async: true;
289
+ readonly capabilities: {
290
+ readonly download: true;
291
+ readonly print: false;
292
+ readonly exportHtml: false;
293
+ readonly zoom: false;
294
+ readonly search: false;
295
+ };
296
+ } | {
297
+ readonly id: "audio";
298
+ readonly label: "Audio";
299
+ readonly category: "media";
300
+ readonly extensions: readonly ["mp3", "mpeg", "wav", "ogg", "oga", "opus", "m4a", "aac", "flac", "weba", "midi", "mid"];
301
+ readonly async: true;
302
+ readonly capabilities: {
303
+ readonly download: true;
304
+ readonly print: false;
305
+ readonly exportHtml: false;
306
+ readonly zoom: false;
307
+ readonly search: false;
308
+ };
309
+ } | {
310
+ readonly id: "data-asset";
311
+ readonly label: "Data Asset";
312
+ readonly category: "asset";
313
+ readonly extensions: readonly ["ttf", "otf", "woff", "woff2", "psd", "ai", "eps", "sqlite", "wasm", "parquet", "avro", "webarchive"];
314
+ readonly async: true;
315
+ readonly capabilities: {
316
+ readonly download: true;
317
+ readonly print: false;
318
+ readonly exportHtml: true;
319
+ readonly zoom: false;
320
+ readonly search: true;
321
+ };
322
+ })[];
323
+ export interface CreateFileViewerCoreRendererRegistryOptions {
324
+ builtinRenderers?: FileViewerBuiltinRendererPreset;
325
+ }
326
+ export declare const createFileViewerCoreRendererRegistry: (options?: CreateFileViewerCoreRendererRegistryOptions) => {
9
327
  dispatcher: import("..").FileViewerRendererDispatcher<CoreBrowserRendererHandler>;
10
328
  registry: import("..").RendererRegistry;
11
329
  missingRendererIds: string[];
@@ -14,34 +14,6 @@ const createWrapper = (el) => ({
14
14
  },
15
15
  });
16
16
  export const coreBrowserRendererHandlers = [
17
- {
18
- rendererId: 'code',
19
- handler: async (buffer, target, type) => {
20
- const { default: renderCode } = await import('./code.js');
21
- return renderCode(buffer, target, type);
22
- },
23
- },
24
- {
25
- rendererId: 'markdown',
26
- handler: async (buffer, target) => {
27
- const { default: renderMarkdown } = await import('./markdown.js');
28
- return renderMarkdown(buffer, target);
29
- },
30
- },
31
- {
32
- rendererId: 'video',
33
- handler: async (buffer, target, type, context) => {
34
- const { default: renderVideo } = await import('./video.js');
35
- return renderVideo(buffer, target, type, context);
36
- },
37
- },
38
- {
39
- rendererId: 'audio',
40
- handler: async (buffer, target, type) => {
41
- const { default: renderAudio } = await import('./audio.js');
42
- return renderAudio(buffer, target, type);
43
- },
44
- },
45
17
  {
46
18
  rendererId: 'image',
47
19
  handler: async (buffer, target, type) => {
@@ -49,133 +21,30 @@ export const coreBrowserRendererHandlers = [
49
21
  return renderImage(buffer, target, type);
50
22
  },
51
23
  },
52
- {
53
- rendererId: 'umd',
54
- handler: async (buffer, target) => {
55
- const { default: renderUmd } = await import('./umd.js');
56
- return renderUmd(buffer, target);
57
- },
58
- },
59
- {
60
- rendererId: 'geo',
61
- handler: async (buffer, target, type) => {
62
- const { default: renderGeo } = await import('./geo.js');
63
- return renderGeo(buffer, target, type);
64
- },
65
- },
66
- {
67
- rendererId: 'open-document',
68
- handler: async (buffer, target, type) => {
69
- const { default: renderOpenDocument } = await import('./openDocument.js');
70
- return renderOpenDocument(buffer, target, type);
71
- },
72
- },
73
- {
74
- rendererId: 'ofd',
75
- handler: async (buffer, target, _type, context) => {
76
- const { default: renderOfd } = await import('./ofd.js');
77
- return renderOfd(buffer, target, context);
78
- },
79
- },
80
- {
81
- rendererId: 'pdf',
82
- handler: async (buffer, target, _type, context) => {
83
- const { default: renderPdf } = await import('./pdf.js');
84
- return renderPdf(buffer, target, context);
85
- },
86
- },
87
- {
88
- rendererId: 'office-word-openxml',
89
- handler: async (buffer, target, _type, context) => {
90
- const { default: renderWordDocx } = await import('./wordDocx.js');
91
- return renderWordDocx(buffer, target, context);
92
- },
93
- },
94
- {
95
- rendererId: 'office-word-binary',
96
- handler: async (buffer, target, _type, context) => {
97
- const { default: renderWordDoc } = await import('./wordDoc.js');
98
- return renderWordDoc(buffer, target, context);
99
- },
100
- },
101
- {
102
- rendererId: 'spreadsheet-openxml',
103
- handler: async (buffer, target, type, context) => {
104
- const { default: renderSpreadsheet } = await import('./spreadsheet.js');
105
- return renderSpreadsheet(buffer, target, type, context);
106
- },
107
- },
108
- {
109
- rendererId: 'email',
110
- handler: async (buffer, target, type, context) => {
111
- const { default: renderEmail } = await import('./email.js');
112
- return renderEmail(buffer, target, type, context);
113
- },
114
- },
115
- {
116
- rendererId: 'eda',
117
- handler: async (buffer, target, type, context) => {
118
- const { default: renderEda } = await import('./eda.js');
119
- return renderEda(buffer, target, type, context);
120
- },
121
- },
122
- {
123
- rendererId: 'cad',
124
- handler: async (buffer, target, type, context) => {
125
- const { default: renderCad } = await import('./cad.js');
126
- return renderCad(buffer, target, type, context);
127
- },
128
- },
129
- {
130
- rendererId: 'typst',
131
- handler: async (buffer, target, type, context) => {
132
- const { default: renderTypst } = await import('./typst.js');
133
- return renderTypst(buffer, target, type, context);
134
- },
135
- },
136
- {
137
- rendererId: 'office-presentation',
138
- handler: async (buffer, target, type, context) => {
139
- const { default: renderPptx } = await import('./pptx.js');
140
- return renderPptx(buffer, target, type, context);
141
- },
142
- },
143
- {
144
- rendererId: 'epub',
145
- handler: async (buffer, target) => {
146
- const { default: renderEpub } = await import('./epub.js');
147
- return renderEpub(buffer, target);
148
- },
149
- },
150
- {
151
- rendererId: 'model',
152
- handler: async (buffer, target, type, context) => {
153
- const { default: renderModel } = await import('./model.js');
154
- return renderModel(buffer, target, type, context);
155
- },
156
- },
157
- {
158
- rendererId: 'drawing',
159
- handler: async (buffer, target, type, context) => {
160
- const { default: renderDrawing } = await import('./drawing.js');
161
- return renderDrawing(buffer, target, type, context);
162
- },
163
- },
164
- {
165
- rendererId: 'data-asset',
166
- handler: async (buffer, target, type, context) => {
167
- const { default: renderDataAsset } = await import('./data.js');
168
- return renderDataAsset(buffer, target, type, context);
169
- },
170
- },
171
- {
172
- rendererId: 'archive',
173
- handler: async (buffer, target, type, context) => {
174
- const { default: renderArchive } = await import('./archive.js');
175
- return renderArchive(buffer, target, type, context);
176
- },
177
- },
178
24
  ];
25
+ export const CORE_LITE_RENDERER_IDS = [
26
+ 'image',
27
+ ];
28
+ export const coreLiteBrowserRendererHandlers = coreBrowserRendererHandlers.filter(handler => CORE_LITE_RENDERER_IDS.includes(handler.rendererId));
29
+ export const coreLiteRendererDefinitions = DEFAULT_RENDERER_DEFINITIONS.filter(definition => CORE_LITE_RENDERER_IDS.includes(definition.id));
30
+ const resolveCoreRendererDefinitions = (preset) => {
31
+ if (preset === 'none') {
32
+ return [];
33
+ }
34
+ if (preset === 'lite') {
35
+ return coreLiteRendererDefinitions;
36
+ }
37
+ return DEFAULT_RENDERER_DEFINITIONS;
38
+ };
39
+ const resolveCoreRendererHandlers = (preset) => {
40
+ if (preset === 'none') {
41
+ return [];
42
+ }
43
+ if (preset === 'lite') {
44
+ return coreLiteBrowserRendererHandlers;
45
+ }
46
+ return coreBrowserRendererHandlers;
47
+ };
179
48
  const renderUnsupported = async (_buffer, target, type) => {
180
49
  const state = createFileViewerUnsupportedState(type);
181
50
  const wrapper = document.createElement('div');
@@ -192,10 +61,11 @@ const renderUnsupported = async (_buffer, target, type) => {
192
61
  target.replaceChildren(wrapper);
193
62
  return createWrapper(target);
194
63
  };
195
- export const createFileViewerCoreRendererRegistry = () => {
64
+ export const createFileViewerCoreRendererRegistry = (options = {}) => {
65
+ const preset = options.builtinRenderers || 'all';
196
66
  const bridge = createFileRenderHandlerRegistry({
197
- definitions: DEFAULT_RENDERER_DEFINITIONS,
198
- handlers: coreBrowserRendererHandlers,
67
+ definitions: resolveCoreRendererDefinitions(preset),
68
+ handlers: resolveCoreRendererHandlers(preset),
199
69
  });
200
70
  return {
201
71
  ...bridge,
@@ -10,11 +10,13 @@ import { createFileViewerZoomController } from '../features/document/zoom.js';
10
10
  import { DEFAULT_FILE_VIEWER_DOWNLOAD_FILENAME, DEFAULT_FILE_VIEWER_EXPORT_FILENAME, DEFAULT_FILE_VIEWER_PREVIEW_TITLE, createFileViewerOriginalSourceStateFromNormalizedSource, executeFileViewerDownloadOperation, executeFileViewerExportHtmlOperation, executeFileViewerPrintOperation, resolveFileViewerDisplayFilename, resolveFileViewerOperationFilename, } from './operations.js';
11
11
  import { getRendererAvailability, createUnsupportedAvailability } from '../registry/capabilities.js';
12
12
  import { buildFileViewerLifecycleContextFromNormalizedSource, buildFileViewerOperationContext, runFileViewerBeforeOperation, runFileViewerLifecycleHook, } from '../lifecycle/operations.js';
13
- import { createRendererRegistry } from '../registry/registry.js';
14
- import { applyFileViewerRenderSurfaceState, createFileViewerRenderSurfaceState, } from '../rendering/handler.js';
13
+ import { collectFileViewerRendererPlugins, createRendererRegistry, installFileViewerRendererPlugins, } from '../registry/registry.js';
14
+ import { createFileRenderHandlerLoader, applyFileViewerRenderSurfaceState, createFileViewerRenderSurfaceState, } from '../rendering/handler.js';
15
+ import { createFileViewerCoreRendererRegistry } from '../renderers/index.js';
15
16
  import { createFileViewerRequestScope } from '../source/loading.js';
16
17
  import { normalizeSource } from '../source/index.js';
17
18
  import { buildFileViewerWatermarkInlineStyle } from '../features/watermark.js';
19
+ import { createFileViewerUnsupportedState } from './state.js';
18
20
  const emitLifecycle = async (options, onEvent, phase, source, version, startedAt, reason) => {
19
21
  const now = Date.now();
20
22
  const context = buildFileViewerLifecycleContextFromNormalizedSource({
@@ -30,9 +32,52 @@ const emitLifecycle = async (options, onEvent, phase, source, version, startedAt
30
32
  });
31
33
  onEvent === null || onEvent === void 0 ? void 0 : onEvent({ type: phase, payload: context });
32
34
  };
35
+ const createBaseRendererRegistry = (createOptions, options) => {
36
+ if (options.rendererMode === 'replace') {
37
+ return createRendererRegistry([]);
38
+ }
39
+ if (createOptions.registry) {
40
+ return createOptions.registry;
41
+ }
42
+ return createFileViewerCoreRendererRegistry({
43
+ builtinRenderers: options.builtinRenderers,
44
+ }).registry;
45
+ };
46
+ const renderMissingRendererState = (container, type) => {
47
+ const documentRef = container.ownerDocument;
48
+ const state = createFileViewerUnsupportedState(type);
49
+ const wrapper = documentRef.createElement('div');
50
+ wrapper.className = 'file-viewer-missing-renderer';
51
+ wrapper.style.cssText = [
52
+ 'display:flex',
53
+ 'min-height:260px',
54
+ 'height:100%',
55
+ 'align-items:center',
56
+ 'justify-content:center',
57
+ 'padding:32px',
58
+ 'box-sizing:border-box',
59
+ 'text-align:center',
60
+ 'color:#64748b',
61
+ 'font:14px/1.6 system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif',
62
+ ].join(';');
63
+ const content = documentRef.createElement('div');
64
+ const title = documentRef.createElement('strong');
65
+ title.textContent = state.message;
66
+ title.style.cssText = 'display:block;margin-bottom:8px;color:#172033;font-size:16px;';
67
+ const description = documentRef.createElement('p');
68
+ description.textContent = state.description ||
69
+ '当前内置 renderer 配置没有加载该格式。请安装并传入对应 @file-viewer/renderer-* 包,或使用 @file-viewer/preset-all。';
70
+ description.style.cssText = 'max-width:520px;margin:0;';
71
+ content.append(title, description);
72
+ wrapper.append(content);
73
+ container.replaceChildren(wrapper);
74
+ };
33
75
  export const createViewer = (container, createOptions = {}) => {
34
- const registry = createOptions.registry || createRendererRegistry();
35
76
  let options = createOptions.options || {};
77
+ let registry = createBaseRendererRegistry(createOptions, options);
78
+ let installedRendererInput = undefined;
79
+ let installedRendererMode = options.rendererMode || 'extend';
80
+ let installedBuiltinRenderers = options.builtinRenderers || 'all';
36
81
  let currentSource = null;
37
82
  const renderSurfaceState = createFileViewerRenderSurfaceState();
38
83
  const requestScope = createFileViewerRequestScope();
@@ -40,6 +85,42 @@ export const createViewer = (container, createOptions = {}) => {
40
85
  anchors: { value: [] },
41
86
  state: createEmptyFileViewerSearchState(),
42
87
  };
88
+ const ensureRendererPluginsInstalled = async () => {
89
+ const nextMode = options.rendererMode || 'extend';
90
+ const nextRendererInput = options.renderers;
91
+ const nextBuiltinRenderers = options.builtinRenderers || 'all';
92
+ if (nextMode === installedRendererMode &&
93
+ nextRendererInput === installedRendererInput &&
94
+ nextBuiltinRenderers === installedBuiltinRenderers) {
95
+ return;
96
+ }
97
+ registry = createBaseRendererRegistry(createOptions, options);
98
+ installedRendererMode = nextMode;
99
+ installedRendererInput = nextRendererInput;
100
+ installedBuiltinRenderers = nextBuiltinRenderers;
101
+ const plugins = collectFileViewerRendererPlugins(nextRendererInput);
102
+ if (!plugins.length) {
103
+ return;
104
+ }
105
+ const registerHandler = (registration) => {
106
+ const definition = registry.getById(registration.rendererId);
107
+ if (!definition) {
108
+ return;
109
+ }
110
+ registry.register({
111
+ ...definition,
112
+ load: createFileRenderHandlerLoader({
113
+ handler: registration.handler,
114
+ getTarget: context => context.surface.container,
115
+ }),
116
+ });
117
+ };
118
+ await installFileViewerRendererPlugins({
119
+ registry,
120
+ plugins,
121
+ registerHandler,
122
+ });
123
+ };
43
124
  const buildCurrentLifecycleContext = () => {
44
125
  const source = currentSource || normalizeSource({});
45
126
  return buildFileViewerLifecycleContextFromNormalizedSource({
@@ -139,6 +220,7 @@ export const createViewer = (container, createOptions = {}) => {
139
220
  container,
140
221
  async load(source) {
141
222
  await destroyCurrent('replace');
223
+ await ensureRendererPluginsInstalled();
142
224
  const normalized = normalizeSource(source);
143
225
  currentSource = normalized;
144
226
  const version = requestScope.requestController.createVersion();
@@ -146,6 +228,7 @@ export const createViewer = (container, createOptions = {}) => {
146
228
  const startedAt = Date.now();
147
229
  await emitLifecycle(options, createOptions.onEvent, 'load-start', normalized, version, startedAt);
148
230
  if (!(renderer === null || renderer === void 0 ? void 0 : renderer.load)) {
231
+ renderMissingRendererState(container, normalized.extension);
149
232
  applyFileViewerRenderSurfaceState(renderSurfaceState, { session: null });
150
233
  emitOperationAvailabilityChange();
151
234
  emitZoomChange();