@file-viewer/renderer-image
Advanced tools
+42
-8
@@ -71,2 +71,25 @@ import { createFileViewerTranslator, createFileViewerZoomChangeEmitter as createZoomChangeEmitter, resolveFileViewerFitScale, registerFileViewerZoomProvider, unregisterFileViewerZoomProvider, } from '@file-viewer/core'; | ||
| }; | ||
| const waitForImageReady = async (image) => { | ||
| if (image.complete) { | ||
| if (image.naturalWidth > 0 && image.naturalHeight > 0) | ||
| return; | ||
| throw new Error('The browser could not decode this image format.'); | ||
| } | ||
| await new Promise((resolve, reject) => { | ||
| const cleanup = () => { | ||
| image.removeEventListener('load', onLoad); | ||
| image.removeEventListener('error', onError); | ||
| }; | ||
| const onLoad = () => { | ||
| cleanup(); | ||
| resolve(); | ||
| }; | ||
| const onError = () => { | ||
| cleanup(); | ||
| reject(new Error('The browser could not decode this image format.')); | ||
| }; | ||
| image.addEventListener('load', onLoad, { once: true }); | ||
| image.addEventListener('error', onError, { once: true }); | ||
| }); | ||
| }; | ||
| const roundImageScale = (value) => { | ||
@@ -255,15 +278,26 @@ return Number(value.toFixed(3)); | ||
| updateViewportSize(); | ||
| const cleanup = () => { | ||
| var _a; | ||
| (_a = context === null || context === void 0 ? void 0 : context.registerThumbnailAdapter) === null || _a === void 0 ? void 0 : _a.call(context, null); | ||
| unregisterFileViewerZoomProvider(root); | ||
| resizeObserver.disconnect(); | ||
| image.removeEventListener('load', updateViewportSize); | ||
| image.removeEventListener('click', openLightbox); | ||
| lightbox.destroy(); | ||
| target.replaceChildren(); | ||
| }; | ||
| try { | ||
| await waitForImageReady(image); | ||
| updateViewportSize(); | ||
| } | ||
| catch (error) { | ||
| cleanup(); | ||
| throw error; | ||
| } | ||
| return { | ||
| $el: target, | ||
| unmount() { | ||
| var _a; | ||
| (_a = context === null || context === void 0 ? void 0 : context.registerThumbnailAdapter) === null || _a === void 0 ? void 0 : _a.call(context, null); | ||
| unregisterFileViewerZoomProvider(root); | ||
| resizeObserver.disconnect(); | ||
| image.removeEventListener('load', updateViewportSize); | ||
| image.removeEventListener('click', openLightbox); | ||
| lightbox.destroy(); | ||
| target.replaceChildren(); | ||
| cleanup(); | ||
| }, | ||
| }; | ||
| } |
+2
-2
| { | ||
| "name": "@file-viewer/renderer-image", | ||
| "version": "2.2.3", | ||
| "version": "2.2.4", | ||
| "private": false, | ||
@@ -57,3 +57,3 @@ "type": "module", | ||
| "dependencies": { | ||
| "@file-viewer/core": "2.2.3", | ||
| "@file-viewer/core": "2.2.4", | ||
| "heic2any": "^0.0.4" | ||
@@ -60,0 +60,0 @@ }, |
27187
3.78%325
11.68%+ Added
- Removed
Updated