diff --git a/.webpack/webpack.base.js b/.webpack/webpack.base.js index ff2786783..28ab4f1e7 100644 --- a/.webpack/webpack.base.js +++ b/.webpack/webpack.base.js @@ -201,8 +201,6 @@ module.exports = (env, argv, { SRC_DIR, ENTRY }) => { '@hooks': path.resolve(__dirname, '../platform/app/src/hooks'), '@routes': path.resolve(__dirname, '../platform/app/src/routes'), '@state': path.resolve(__dirname, '../platform/app/src/state'), - 'dicom-microscopy-viewer': - 'dicom-microscopy-viewer/dist/dynamic-import/dicomMicroscopyViewer.min.js', }, // Which directories to search when resolving modules modules: [ diff --git a/addOns/externals/dicom-microscopy-viewer/package.json b/addOns/externals/dicom-microscopy-viewer/package.json index 15ef08cec..434a70963 100644 --- a/addOns/externals/dicom-microscopy-viewer/package.json +++ b/addOns/externals/dicom-microscopy-viewer/package.json @@ -4,6 +4,6 @@ "version": "3.12.0-beta.7", "license": "MIT", "dependencies": { - "dicom-microscopy-viewer": "^0.46.1" + "dicom-microscopy-viewer": "^0.48.6" } } diff --git a/bun.lock b/bun.lock index 7c33d615c..f941050fa 100644 --- a/bun.lock +++ b/bun.lock @@ -41,7 +41,7 @@ }, "addOns/externals/devDependencies": { "name": "@externals/devDependencies", - "version": "3.11.0-beta.114", + "version": "3.12.0-beta.7", "dependencies": { "@babel/runtime": "^7.20.13", "@kitware/vtk.js": "32.12.0", @@ -126,22 +126,22 @@ }, "addOns/externals/dicom-microscopy-viewer": { "name": "@externals/dicom-microscopy-viewer", - "version": "3.11.0-beta.114", + "version": "3.12.0-beta.7", "dependencies": { - "dicom-microscopy-viewer": "^0.46.1", + "dicom-microscopy-viewer": "^0.48.6", }, }, "extensions/cornerstone": { "name": "@ohif/extension-cornerstone", - "version": "3.11.0-beta.114", + "version": "3.12.0-beta.7", "dependencies": { "@babel/runtime": "^7.20.13", - "@cornerstonejs/adapters": "^3.32.5", - "@cornerstonejs/ai": "^3.32.5", - "@cornerstonejs/core": "^3.32.5", - "@cornerstonejs/labelmap-interpolation": "^3.32.5", - "@cornerstonejs/polymorphic-segmentation": "^3.32.5", - "@cornerstonejs/tools": "^3.32.5", + "@cornerstonejs/adapters": "^3.32.12", + "@cornerstonejs/ai": "^3.32.12", + "@cornerstonejs/core": "^3.32.12", + "@cornerstonejs/labelmap-interpolation": "^3.32.12", + "@cornerstonejs/polymorphic-segmentation": "^3.32.12", + "@cornerstonejs/tools": "^3.32.12", "@itk-wasm/morphological-contour-interpolation": "1.1.0", "@kitware/vtk.js": "32.12.0", "html2canvas": "^1.4.1", @@ -158,9 +158,9 @@ "@cornerstonejs/codec-libjpeg-turbo-8bit": "^1.2.2", "@cornerstonejs/codec-openjpeg": "^1.2.4", "@cornerstonejs/codec-openjph": "^2.4.5", - "@cornerstonejs/dicom-image-loader": "^3.32.5", - "@ohif/core": "3.11.0-beta.114", - "@ohif/ui": "3.11.0-beta.114", + "@cornerstonejs/dicom-image-loader": "^3.32.12", + "@ohif/core": "3.12.0-beta.7", + "@ohif/ui": "3.12.0-beta.7", "dcmjs": "0.43.1", "dicom-parser": "^1.8.21", "hammerjs": "^2.0.8", @@ -172,19 +172,19 @@ }, "extensions/cornerstone-dicom-pmap": { "name": "@ohif/extension-cornerstone-dicom-pmap", - "version": "3.11.0-beta.114", + "version": "3.12.0-beta.7", "dependencies": { "@babel/runtime": "^7.20.13", - "@cornerstonejs/adapters": "^3.32.5", - "@cornerstonejs/core": "^3.32.5", + "@cornerstonejs/adapters": "^3.32.12", + "@cornerstonejs/core": "^3.32.12", "@kitware/vtk.js": "32.12.0", "react-color": "^2.19.3", }, "peerDependencies": { - "@ohif/core": "3.11.0-beta.114", - "@ohif/extension-cornerstone": "3.11.0-beta.114", - "@ohif/extension-default": "3.11.0-beta.114", - "@ohif/i18n": "3.11.0-beta.114", + "@ohif/core": "3.12.0-beta.7", + "@ohif/extension-cornerstone": "3.12.0-beta.7", + "@ohif/extension-default": "3.12.0-beta.7", + "@ohif/i18n": "3.12.0-beta.7", "prop-types": "^15.6.2", "react": "^18.3.1", "react-dom": "^18.3.1", @@ -195,16 +195,16 @@ }, "extensions/cornerstone-dicom-rt": { "name": "@ohif/extension-cornerstone-dicom-rt", - "version": "3.11.0-beta.114", + "version": "3.12.0-beta.7", "dependencies": { "@babel/runtime": "^7.20.13", "react-color": "^2.19.3", }, "peerDependencies": { - "@ohif/core": "3.11.0-beta.114", - "@ohif/extension-cornerstone": "3.11.0-beta.114", - "@ohif/extension-default": "3.11.0-beta.114", - "@ohif/i18n": "3.11.0-beta.114", + "@ohif/core": "3.12.0-beta.7", + "@ohif/extension-cornerstone": "3.12.0-beta.7", + "@ohif/extension-default": "3.12.0-beta.7", + "@ohif/i18n": "3.12.0-beta.7", "prop-types": "^15.6.2", "react": "^18.3.1", "react-dom": "^18.3.1", @@ -215,19 +215,19 @@ }, "extensions/cornerstone-dicom-seg": { "name": "@ohif/extension-cornerstone-dicom-seg", - "version": "3.11.0-beta.114", + "version": "3.12.0-beta.7", "dependencies": { "@babel/runtime": "^7.20.13", - "@cornerstonejs/adapters": "^3.32.5", - "@cornerstonejs/core": "^3.32.5", + "@cornerstonejs/adapters": "^3.32.12", + "@cornerstonejs/core": "^3.32.12", "@kitware/vtk.js": "32.12.0", "react-color": "^2.19.3", }, "peerDependencies": { - "@ohif/core": "3.11.0-beta.114", - "@ohif/extension-cornerstone": "3.11.0-beta.114", - "@ohif/extension-default": "3.11.0-beta.114", - "@ohif/i18n": "3.11.0-beta.114", + "@ohif/core": "3.12.0-beta.7", + "@ohif/extension-cornerstone": "3.12.0-beta.7", + "@ohif/extension-default": "3.12.0-beta.7", + "@ohif/i18n": "3.12.0-beta.7", "prop-types": "^15.6.2", "react": "^18.3.1", "react-dom": "^18.3.1", @@ -238,19 +238,19 @@ }, "extensions/cornerstone-dicom-sr": { "name": "@ohif/extension-cornerstone-dicom-sr", - "version": "3.11.0-beta.114", + "version": "3.12.0-beta.7", "dependencies": { "@babel/runtime": "^7.20.13", - "@cornerstonejs/adapters": "^3.32.5", - "@cornerstonejs/core": "^3.32.5", - "@cornerstonejs/tools": "^3.32.5", + "@cornerstonejs/adapters": "^3.32.12", + "@cornerstonejs/core": "^3.32.12", + "@cornerstonejs/tools": "^3.32.12", "classnames": "^2.3.2", }, "peerDependencies": { - "@ohif/core": "3.11.0-beta.114", - "@ohif/extension-cornerstone": "3.11.0-beta.114", - "@ohif/extension-measurement-tracking": "3.11.0-beta.114", - "@ohif/ui": "3.11.0-beta.114", + "@ohif/core": "3.12.0-beta.7", + "@ohif/extension-cornerstone": "3.12.0-beta.7", + "@ohif/extension-measurement-tracking": "3.12.0-beta.7", + "@ohif/ui": "3.12.0-beta.7", "dcmjs": "0.43.1", "dicom-parser": "^1.8.9", "hammerjs": "^2.0.8", @@ -260,19 +260,19 @@ }, "extensions/cornerstone-dynamic-volume": { "name": "@ohif/extension-cornerstone-dynamic-volume", - "version": "3.11.0-beta.114", + "version": "3.12.0-beta.7", "dependencies": { "@babel/runtime": "^7.20.13", - "@cornerstonejs/core": "^3.32.5", - "@cornerstonejs/tools": "^3.32.5", + "@cornerstonejs/core": "^3.32.12", + "@cornerstonejs/tools": "^3.32.12", "classnames": "^2.3.2", }, "peerDependencies": { - "@ohif/core": "3.11.0-beta.114", - "@ohif/extension-cornerstone": "3.11.0-beta.114", - "@ohif/extension-default": "3.11.0-beta.114", - "@ohif/i18n": "3.11.0-beta.114", - "@ohif/ui": "3.11.0-beta.114", + "@ohif/core": "3.12.0-beta.7", + "@ohif/extension-cornerstone": "3.12.0-beta.7", + "@ohif/extension-default": "3.12.0-beta.7", + "@ohif/i18n": "3.12.0-beta.7", + "@ohif/ui": "3.12.0-beta.7", "dcmjs": "0.43.1", "dicom-parser": "^1.8.21", "hammerjs": "^2.0.8", @@ -282,7 +282,7 @@ }, "extensions/default": { "name": "@ohif/extension-default", - "version": "3.11.0-beta.114", + "version": "3.12.0-beta.7", "dependencies": { "@babel/runtime": "^7.20.13", "@cornerstonejs/calculate-suv": "^1.1.0", @@ -290,8 +290,8 @@ "lodash.uniqby": "^4.7.0", }, "peerDependencies": { - "@ohif/core": "3.11.0-beta.114", - "@ohif/i18n": "3.11.0-beta.114", + "@ohif/core": "3.12.0-beta.7", + "@ohif/i18n": "3.12.0-beta.7", "dcmjs": "0.43.1", "dicomweb-client": "^0.10.4", "prop-types": "^15.6.2", @@ -305,7 +305,7 @@ }, "extensions/dicom-microscopy": { "name": "@ohif/extension-dicom-microscopy", - "version": "3.11.0-beta.114", + "version": "3.12.0-beta.7", "dependencies": { "@babel/runtime": "^7.20.13", "@cornerstonejs/codec-charls": "^1.2.3", @@ -316,10 +316,10 @@ "mathjs": "^12.4.2", }, "peerDependencies": { - "@ohif/core": "3.11.0-beta.114", - "@ohif/extension-default": "3.11.0-beta.114", - "@ohif/i18n": "3.11.0-beta.114", - "@ohif/ui": "3.11.0-beta.114", + "@ohif/core": "3.12.0-beta.7", + "@ohif/extension-default": "3.12.0-beta.7", + "@ohif/i18n": "3.12.0-beta.7", + "@ohif/ui": "3.12.0-beta.7", "prop-types": "^15.6.2", "react": "^18.3.1", "react-dom": "^18.3.1", @@ -330,14 +330,14 @@ }, "extensions/dicom-pdf": { "name": "@ohif/extension-dicom-pdf", - "version": "3.11.0-beta.114", + "version": "3.12.0-beta.7", "dependencies": { "@babel/runtime": "^7.20.13", "classnames": "^2.3.2", }, "peerDependencies": { - "@ohif/core": "3.11.0-beta.114", - "@ohif/ui": "3.11.0-beta.114", + "@ohif/core": "3.12.0-beta.7", + "@ohif/ui": "3.12.0-beta.7", "dcmjs": "0.43.1", "dicom-parser": "^1.8.9", "hammerjs": "^2.0.8", @@ -347,14 +347,14 @@ }, "extensions/dicom-video": { "name": "@ohif/extension-dicom-video", - "version": "3.11.0-beta.114", + "version": "3.12.0-beta.7", "dependencies": { "@babel/runtime": "^7.20.13", "classnames": "^2.3.2", }, "peerDependencies": { - "@ohif/core": "3.11.0-beta.114", - "@ohif/ui": "3.11.0-beta.114", + "@ohif/core": "3.12.0-beta.7", + "@ohif/ui": "3.12.0-beta.7", "dcmjs": "0.43.1", "dicom-parser": "^1.8.9", "hammerjs": "^2.0.8", @@ -364,20 +364,20 @@ }, "extensions/measurement-tracking": { "name": "@ohif/extension-measurement-tracking", - "version": "3.11.0-beta.114", + "version": "3.12.0-beta.7", "dependencies": { "@babel/runtime": "^7.20.13", - "@ohif/ui": "3.11.0-beta.114", + "@ohif/ui": "3.12.0-beta.7", "@xstate/react": "^3.2.2", "xstate": "^4.10.0", }, "peerDependencies": { - "@cornerstonejs/core": "^3.32.5", - "@cornerstonejs/tools": "^3.32.5", - "@ohif/core": "3.11.0-beta.114", - "@ohif/extension-cornerstone-dicom-sr": "3.11.0-beta.114", - "@ohif/extension-default": "3.11.0-beta.114", - "@ohif/ui": "3.11.0-beta.114", + "@cornerstonejs/core": "^3.32.12", + "@cornerstonejs/tools": "^3.32.12", + "@ohif/core": "3.12.0-beta.7", + "@ohif/extension-cornerstone-dicom-sr": "3.12.0-beta.7", + "@ohif/extension-default": "3.12.0-beta.7", + "@ohif/ui": "3.12.0-beta.7", "classnames": "^2.3.2", "dcmjs": "0.43.1", "lodash.debounce": "^4.0.8", @@ -390,14 +390,14 @@ }, "extensions/test-extension": { "name": "@ohif/extension-test", - "version": "3.11.0-beta.114", + "version": "3.12.0-beta.7", "dependencies": { "@babel/runtime": "^7.20.13", "classnames": "^2.3.2", }, "peerDependencies": { - "@ohif/core": "3.11.0-beta.114", - "@ohif/ui": "3.11.0-beta.114", + "@ohif/core": "3.12.0-beta.7", + "@ohif/ui": "3.12.0-beta.7", "dcmjs": "0.43.1", "dicom-parser": "^1.8.9", "hammerjs": "^2.0.8", @@ -407,7 +407,7 @@ }, "extensions/tmtv": { "name": "@ohif/extension-tmtv", - "version": "3.11.0-beta.114", + "version": "3.12.0-beta.7", "dependencies": { "@babel/runtime": "^7.20.13", "classnames": "^2.3.2", @@ -424,16 +424,16 @@ }, "extensions/usAnnotation": { "name": "@ohif/extension-ultrasound-pleura-bline", - "version": "3.11.0-beta.114", + "version": "3.12.0-beta.7", "dependencies": { "@babel/runtime": "^7.20.13", - "@cornerstonejs/core": "^3.32.5", - "@cornerstonejs/tools": "^3.32.5", - "@ohif/core": "3.11.0-beta.114", - "@ohif/extension-cornerstone": "3.11.0-beta.114", - "@ohif/extension-default": "3.11.0-beta.114", - "@ohif/i18n": "3.11.0-beta.114", - "@ohif/ui-next": "3.11.0-beta.114", + "@cornerstonejs/core": "^3.32.12", + "@cornerstonejs/tools": "^3.32.12", + "@ohif/core": "3.12.0-beta.7", + "@ohif/extension-cornerstone": "3.12.0-beta.7", + "@ohif/extension-default": "3.12.0-beta.7", + "@ohif/i18n": "3.12.0-beta.7", + "@ohif/ui-next": "3.12.0-beta.7", }, "devDependencies": { "@babel/core": "7.28.0", @@ -476,7 +476,7 @@ }, "modes/basic-dev-mode": { "name": "@ohif/mode-basic-dev-mode", - "version": "3.11.0-beta.114", + "version": "3.12.0-beta.7", "dependencies": { "@babel/runtime": "^7.20.13", "i18next": "^17.0.3", @@ -486,17 +486,17 @@ "webpack-merge": "^5.7.3", }, "peerDependencies": { - "@ohif/core": "3.11.0-beta.114", - "@ohif/extension-cornerstone": "3.11.0-beta.114", - "@ohif/extension-cornerstone-dicom-sr": "3.11.0-beta.114", - "@ohif/extension-default": "3.11.0-beta.114", - "@ohif/extension-dicom-pdf": "3.11.0-beta.114", - "@ohif/extension-dicom-video": "3.11.0-beta.114", + "@ohif/core": "3.12.0-beta.7", + "@ohif/extension-cornerstone": "3.12.0-beta.7", + "@ohif/extension-cornerstone-dicom-sr": "3.12.0-beta.7", + "@ohif/extension-default": "3.12.0-beta.7", + "@ohif/extension-dicom-pdf": "3.12.0-beta.7", + "@ohif/extension-dicom-video": "3.12.0-beta.7", }, }, "modes/basic-test-mode": { "name": "@ohif/mode-test", - "version": "3.11.0-beta.114", + "version": "3.12.0-beta.7", "dependencies": { "@babel/runtime": "^7.20.13", "i18next": "^17.0.3", @@ -506,19 +506,19 @@ "webpack-merge": "^5.7.3", }, "peerDependencies": { - "@ohif/core": "3.11.0-beta.114", - "@ohif/extension-cornerstone": "3.11.0-beta.114", - "@ohif/extension-cornerstone-dicom-sr": "3.11.0-beta.114", - "@ohif/extension-default": "3.11.0-beta.114", - "@ohif/extension-dicom-pdf": "3.11.0-beta.114", - "@ohif/extension-dicom-video": "3.11.0-beta.114", - "@ohif/extension-measurement-tracking": "3.11.0-beta.114", - "@ohif/extension-test": "3.11.0-beta.114", + "@ohif/core": "3.12.0-beta.7", + "@ohif/extension-cornerstone": "3.12.0-beta.7", + "@ohif/extension-cornerstone-dicom-sr": "3.12.0-beta.7", + "@ohif/extension-default": "3.12.0-beta.7", + "@ohif/extension-dicom-pdf": "3.12.0-beta.7", + "@ohif/extension-dicom-video": "3.12.0-beta.7", + "@ohif/extension-measurement-tracking": "3.12.0-beta.7", + "@ohif/extension-test": "3.12.0-beta.7", }, }, "modes/longitudinal": { "name": "@ohif/mode-longitudinal", - "version": "3.11.0-beta.114", + "version": "3.12.0-beta.7", "dependencies": { "@babel/runtime": "^7.20.13", "i18next": "^17.0.3", @@ -528,32 +528,32 @@ "webpack-merge": "^5.7.3", }, "peerDependencies": { - "@ohif/core": "3.11.0-beta.114", - "@ohif/extension-cornerstone": "3.11.0-beta.114", - "@ohif/extension-cornerstone-dicom-rt": "3.11.0-beta.114", - "@ohif/extension-cornerstone-dicom-seg": "3.11.0-beta.114", - "@ohif/extension-cornerstone-dicom-sr": "3.11.0-beta.114", - "@ohif/extension-default": "3.11.0-beta.114", - "@ohif/extension-dicom-pdf": "3.11.0-beta.114", - "@ohif/extension-dicom-video": "3.11.0-beta.114", - "@ohif/extension-measurement-tracking": "3.11.0-beta.114", + "@ohif/core": "3.12.0-beta.7", + "@ohif/extension-cornerstone": "3.12.0-beta.7", + "@ohif/extension-cornerstone-dicom-rt": "3.12.0-beta.7", + "@ohif/extension-cornerstone-dicom-seg": "3.12.0-beta.7", + "@ohif/extension-cornerstone-dicom-sr": "3.12.0-beta.7", + "@ohif/extension-default": "3.12.0-beta.7", + "@ohif/extension-dicom-pdf": "3.12.0-beta.7", + "@ohif/extension-dicom-video": "3.12.0-beta.7", + "@ohif/extension-measurement-tracking": "3.12.0-beta.7", }, }, "modes/microscopy": { "name": "@ohif/mode-microscopy", - "version": "3.11.0-beta.114", + "version": "3.12.0-beta.7", "dependencies": { "@babel/runtime": "^7.20.13", "i18next": "^17.0.3", }, "peerDependencies": { - "@ohif/core": "3.11.0-beta.114", - "@ohif/extension-dicom-microscopy": "3.11.0-beta.114", + "@ohif/core": "3.12.0-beta.7", + "@ohif/extension-dicom-microscopy": "3.12.0-beta.7", }, }, "modes/preclinical-4d": { "name": "@ohif/mode-preclinical-4d", - "version": "3.11.0-beta.114", + "version": "3.12.0-beta.7", "dependencies": { "@babel/runtime": "^7.20.13", }, @@ -572,7 +572,7 @@ }, "modes/segmentation": { "name": "@ohif/mode-segmentation", - "version": "3.11.0-beta.114", + "version": "3.12.0-beta.7", "dependencies": { "@babel/runtime": "^7.20.13", "i18next": "^17.0.3", @@ -616,7 +616,7 @@ }, "modes/tmtv": { "name": "@ohif/mode-tmtv", - "version": "3.11.0-beta.114", + "version": "3.12.0-beta.7", "dependencies": { "@babel/runtime": "^7.20.13", "i18next": "^17.0.3", @@ -637,14 +637,14 @@ }, "modes/usAnnotation": { "name": "@ohif/mode-ultrasound-pleura-bline", - "version": "3.11.0-beta.114", + "version": "3.12.0-beta.7", "dependencies": { "@babel/runtime": "^7.20.13", - "@cornerstonejs/core": "^3.32.5", - "@cornerstonejs/tools": "^3.32.5", - "@ohif/core": "3.11.0-beta.114", - "@ohif/extension-cornerstone-dicom-sr": "3.11.0-beta.114", - "@ohif/extension-ultrasound-pleura-bline": "3.11.0-beta.114", + "@cornerstonejs/core": "^3.32.12", + "@cornerstonejs/tools": "^3.32.12", + "@ohif/core": "3.12.0-beta.7", + "@ohif/extension-cornerstone-dicom-sr": "3.12.0-beta.7", + "@ohif/extension-ultrasound-pleura-bline": "3.12.0-beta.7", "i18next": "^17.0.3", }, "devDependencies": { @@ -676,34 +676,34 @@ }, "platform/app": { "name": "@ohif/app", - "version": "3.11.0-beta.114", + "version": "3.12.0-beta.7", "dependencies": { "@babel/runtime": "^7.20.13", "@cornerstonejs/codec-charls": "^1.2.3", "@cornerstonejs/codec-libjpeg-turbo-8bit": "^1.2.2", "@cornerstonejs/codec-openjpeg": "^1.2.4", "@cornerstonejs/codec-openjph": "^2.4.5", - "@cornerstonejs/dicom-image-loader": "^3.32.5", + "@cornerstonejs/dicom-image-loader": "^3.32.12", "@emotion/serialize": "^1.1.3", - "@ohif/core": "3.11.0-beta.114", - "@ohif/extension-cornerstone": "3.11.0-beta.114", - "@ohif/extension-cornerstone-dicom-rt": "3.11.0-beta.114", - "@ohif/extension-cornerstone-dicom-seg": "3.11.0-beta.114", - "@ohif/extension-cornerstone-dicom-sr": "3.11.0-beta.114", - "@ohif/extension-default": "3.11.0-beta.114", - "@ohif/extension-dicom-microscopy": "3.11.0-beta.114", - "@ohif/extension-dicom-pdf": "3.11.0-beta.114", - "@ohif/extension-dicom-video": "3.11.0-beta.114", - "@ohif/extension-test": "3.11.0-beta.114", - "@ohif/extension-ultrasound-pleura-bline": "3.11.0-beta.114", - "@ohif/i18n": "3.11.0-beta.114", - "@ohif/mode-basic-dev-mode": "3.11.0-beta.114", - "@ohif/mode-longitudinal": "3.11.0-beta.114", - "@ohif/mode-microscopy": "3.11.0-beta.114", - "@ohif/mode-test": "3.11.0-beta.114", - "@ohif/mode-ultrasound-pleura-bline": "3.11.0-beta.114", - "@ohif/ui": "3.11.0-beta.114", - "@ohif/ui-next": "3.11.0-beta.114", + "@ohif/core": "3.12.0-beta.7", + "@ohif/extension-cornerstone": "3.12.0-beta.7", + "@ohif/extension-cornerstone-dicom-rt": "3.12.0-beta.7", + "@ohif/extension-cornerstone-dicom-seg": "3.12.0-beta.7", + "@ohif/extension-cornerstone-dicom-sr": "3.12.0-beta.7", + "@ohif/extension-default": "3.12.0-beta.7", + "@ohif/extension-dicom-microscopy": "3.12.0-beta.7", + "@ohif/extension-dicom-pdf": "3.12.0-beta.7", + "@ohif/extension-dicom-video": "3.12.0-beta.7", + "@ohif/extension-test": "3.12.0-beta.7", + "@ohif/extension-ultrasound-pleura-bline": "3.12.0-beta.7", + "@ohif/i18n": "3.12.0-beta.7", + "@ohif/mode-basic-dev-mode": "3.12.0-beta.7", + "@ohif/mode-longitudinal": "3.12.0-beta.7", + "@ohif/mode-microscopy": "3.12.0-beta.7", + "@ohif/mode-test": "3.12.0-beta.7", + "@ohif/mode-ultrasound-pleura-bline": "3.12.0-beta.7", + "@ohif/ui": "3.12.0-beta.7", + "@ohif/ui-next": "3.12.0-beta.7", "@svgr/webpack": "^8.1.0", "@types/react": "^18.3.3", "classnames": "^2.3.2", @@ -744,7 +744,7 @@ }, "platform/cli": { "name": "@ohif/cli", - "version": "3.11.0-beta.114", + "version": "3.12.0-beta.7", "bin": { "ohif-cli": "src/index.js", }, @@ -768,7 +768,7 @@ }, "platform/core": { "name": "@ohif/core", - "version": "3.11.0-beta.114", + "version": "3.12.0-beta.7", "dependencies": { "@babel/runtime": "^7.20.13", "dcmjs": "0.43.1", @@ -793,16 +793,16 @@ "@cornerstonejs/codec-libjpeg-turbo-8bit": "^1.2.2", "@cornerstonejs/codec-openjpeg": "^1.2.4", "@cornerstonejs/codec-openjph": "^2.4.5", - "@cornerstonejs/core": "^3.32.5", - "@cornerstonejs/dicom-image-loader": "^3.32.5", - "@ohif/ui": "3.11.0-beta.114", + "@cornerstonejs/core": "^3.32.12", + "@cornerstonejs/dicom-image-loader": "^3.32.12", + "@ohif/ui": "3.12.0-beta.7", "cornerstone-math": "0.1.9", "dicom-parser": "^1.8.21", }, }, "platform/i18n": { "name": "@ohif/i18n", - "version": "3.11.0-beta.114", + "version": "3.12.0-beta.7", "dependencies": { "@babel/runtime": "^7.20.13", "i18next-locize-backend": "^2.0.0", @@ -827,7 +827,7 @@ }, "platform/ui": { "name": "@ohif/ui", - "version": "3.11.0-beta.114", + "version": "3.12.0-beta.7", "dependencies": { "@testing-library/react": "^13.1.0", "browser-detect": "^0.2.28", @@ -887,7 +887,7 @@ }, "platform/ui-next": { "name": "@ohif/ui-next", - "version": "3.11.0-beta.114", + "version": "3.12.0-beta.7", "dependencies": { "@radix-ui/react-accordion": "^1.2.0", "@radix-ui/react-checkbox": "^1.1.1", @@ -1200,9 +1200,9 @@ "@bcoe/v8-coverage": ["@bcoe/v8-coverage@0.2.3", "", {}, "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw=="], - "@cornerstonejs/adapters": ["@cornerstonejs/adapters@3.32.5", "", { "dependencies": { "@babel/runtime-corejs2": "^7.17.8", "buffer": "^6.0.3", "dcmjs": "^0.43.1", "gl-matrix": "^3.4.3", "ndarray": "^1.0.19" }, "peerDependencies": { "@cornerstonejs/core": "^3.32.5", "@cornerstonejs/tools": "^3.32.5" } }, "sha512-tpd+sHjE54VOqme83HZ9XqGKztjikrwbrWR4M3e8X+fuR6LJ+qNQ6+YkPdfThzu0KxN+q8mO5aSvGyJo82rRnA=="], + "@cornerstonejs/adapters": ["@cornerstonejs/adapters@3.32.12", "", { "dependencies": { "@babel/runtime-corejs2": "^7.17.8", "buffer": "^6.0.3", "dcmjs": "^0.43.1", "gl-matrix": "^3.4.3", "ndarray": "^1.0.19" }, "peerDependencies": { "@cornerstonejs/core": "^3.32.12", "@cornerstonejs/tools": "^3.32.12" } }, "sha512-dC33XemAmrSQF4qWtyBSjM7m+ecqgZ6QPjO3Mt8Z7zqU9PVzz5CUKUQaRzatByASnRNYweePrZkcvDCcdpBKaQ=="], - "@cornerstonejs/ai": ["@cornerstonejs/ai@3.32.5", "", { "dependencies": { "@babel/runtime-corejs2": "^7.17.8", "buffer": "^6.0.3", "dcmjs": "^0.43.1", "gl-matrix": "^3.4.3", "lodash.clonedeep": "^4.5.0", "ndarray": "^1.0.19", "onnxruntime-common": "1.17.1", "onnxruntime-web": "1.17.1" }, "peerDependencies": { "@cornerstonejs/core": "^3.32.5", "@cornerstonejs/tools": "^3.32.5" } }, "sha512-j7paST1ounIAvJYS9/qqOsjknjdFcfcNdwCKiwB5KpobL2/BmYNl4kEZNdYXZPhFfQPQvgpW71OedxkDdwaJ2A=="], + "@cornerstonejs/ai": ["@cornerstonejs/ai@3.32.12", "", { "dependencies": { "@babel/runtime-corejs2": "^7.17.8", "buffer": "^6.0.3", "dcmjs": "^0.43.1", "gl-matrix": "^3.4.3", "lodash.clonedeep": "^4.5.0", "ndarray": "^1.0.19", "onnxruntime-common": "1.17.1", "onnxruntime-web": "1.17.1" }, "peerDependencies": { "@cornerstonejs/core": "^3.32.12", "@cornerstonejs/tools": "^3.32.12" } }, "sha512-F8Vq1oVO/uabmsNIAUXxth9rZ5GtVAj3jZfexZpJiMiB02jKx83LzKuF4kWdPFDbVIi64JLboKGLYBAXjFbcxg=="], "@cornerstonejs/calculate-suv": ["@cornerstonejs/calculate-suv@1.1.0", "", {}, "sha512-Q9XraiDJif9aMFArD2iEuDO/HXbcRVCqB7KfaHgDrdTTjgDFovS91Psbdim7crypRSvE6dh/+HKeFNHdvNkA6w=="], @@ -1214,15 +1214,15 @@ "@cornerstonejs/codec-openjph": ["@cornerstonejs/codec-openjph@2.4.7", "", {}, "sha512-qvP4q4JDib7mi9r7LqKOwqz7YZ8gjtDX4ZCezeYf8+eb7MBXCz5uXAMeVF3yz9Axw4XiIMdB/pqXkm8tqCl13w=="], - "@cornerstonejs/core": ["@cornerstonejs/core@3.32.5", "", { "dependencies": { "@kitware/vtk.js": "32.12.1", "comlink": "^4.4.1", "gl-matrix": "^3.4.3", "loglevel": "^1.9.2" } }, "sha512-6m/ODfSyM+8/ZigD2wM2wl8yjxmDx9DTen/R5nxCHUe4sqK97PKjfmcN5OK9cOCzwlzqQBZTFow1Ra6UAfkKCA=="], + "@cornerstonejs/core": ["@cornerstonejs/core@3.32.12", "", { "dependencies": { "@kitware/vtk.js": "32.12.1", "comlink": "^4.4.1", "gl-matrix": "^3.4.3", "loglevel": "^1.9.2" } }, "sha512-JU3NyRHrPEMuKnH0pNmFyVroY+uafa9o2wml7/QgXgByJRKrK9ocBEZP0pE4U0YeNqwfV+UJIEUPMjHhBkWClg=="], - "@cornerstonejs/dicom-image-loader": ["@cornerstonejs/dicom-image-loader@3.32.5", "", { "dependencies": { "@cornerstonejs/codec-charls": "^1.2.3", "@cornerstonejs/codec-libjpeg-turbo-8bit": "^1.2.2", "@cornerstonejs/codec-openjpeg": "^1.2.2", "@cornerstonejs/codec-openjph": "^2.4.5", "comlink": "^4.4.1", "dicom-parser": "^1.8.9", "jpeg-lossless-decoder-js": "^2.1.0", "pako": "^2.0.4", "uuid": "^9.0.0" }, "peerDependencies": { "@cornerstonejs/core": "^3.32.5" } }, "sha512-fOUkphjdzTG8Flw0XV4bGUEZtbASeE2/Y+HssKr4PiwiDvGcVvVQF7RxyKkvabP3OsZIAaBOhPB8ghKEEXDp2w=="], + "@cornerstonejs/dicom-image-loader": ["@cornerstonejs/dicom-image-loader@3.32.12", "", { "dependencies": { "@cornerstonejs/codec-charls": "^1.2.3", "@cornerstonejs/codec-libjpeg-turbo-8bit": "^1.2.2", "@cornerstonejs/codec-openjpeg": "^1.2.2", "@cornerstonejs/codec-openjph": "^2.4.5", "comlink": "^4.4.1", "dicom-parser": "^1.8.9", "jpeg-lossless-decoder-js": "^2.1.0", "pako": "^2.0.4", "uuid": "^9.0.0" }, "peerDependencies": { "@cornerstonejs/core": "^3.32.12" } }, "sha512-8tsL+IFz6H5VNho+tsjWge8g10brDqp0l3WMjUZ+uNSccc/o4ARrVsDvDFSzRQyMRh5aVp8YCGu4Rotd/p2ryg=="], - "@cornerstonejs/labelmap-interpolation": ["@cornerstonejs/labelmap-interpolation@3.32.5", "", { "dependencies": { "@itk-wasm/morphological-contour-interpolation": "1.1.0", "itk-wasm": "1.0.0-b.165" }, "peerDependencies": { "@cornerstonejs/core": "^3.32.5", "@cornerstonejs/tools": "^3.32.5", "@kitware/vtk.js": "32.12.1" } }, "sha512-+E476+jgAAOGUVUcdMD0D2K5/yHfc3rCVCgApfZ9H5mOaEavVHPjGxomFkE5twnBfQIBKgTos3968anl21ziAw=="], + "@cornerstonejs/labelmap-interpolation": ["@cornerstonejs/labelmap-interpolation@3.32.12", "", { "dependencies": { "@itk-wasm/morphological-contour-interpolation": "1.1.0", "itk-wasm": "1.0.0-b.165" }, "peerDependencies": { "@cornerstonejs/core": "^3.32.12", "@cornerstonejs/tools": "^3.32.12", "@kitware/vtk.js": "32.12.1" } }, "sha512-tNrxKuwI6bU77EKJO9sV/vem0WhNTveprPvewxtwbq3r10ekP1TcOHzoxGQFOM+v+n6DzZo5u9MMki6kviz1lQ=="], - "@cornerstonejs/polymorphic-segmentation": ["@cornerstonejs/polymorphic-segmentation@3.32.5", "", { "dependencies": { "@icr/polyseg-wasm": "0.4.0" }, "peerDependencies": { "@cornerstonejs/core": "^3.32.5", "@cornerstonejs/tools": "^3.32.5", "@kitware/vtk.js": "32.12.1" } }, "sha512-MyG1ULFhOEdc8ud+5NJhVUmlBis61K3IWod1UYxZM4VdY7kivbdPbWXaynhnYTUg5OeXGPsETLWdLw/5E32mag=="], + "@cornerstonejs/polymorphic-segmentation": ["@cornerstonejs/polymorphic-segmentation@3.32.12", "", { "dependencies": { "@icr/polyseg-wasm": "0.4.0" }, "peerDependencies": { "@cornerstonejs/core": "^3.32.12", "@cornerstonejs/tools": "^3.32.12", "@kitware/vtk.js": "32.12.1" } }, "sha512-W7eeYDCd5CwJdQexamM8f9tSFx9Tcy6Z19r2z0Ioodw+vHK7+okqNPv72KfZPa7QHNBC7E+VH9CzbFmZqywp7w=="], - "@cornerstonejs/tools": ["@cornerstonejs/tools@3.32.5", "", { "dependencies": { "@types/offscreencanvas": "2019.7.3", "comlink": "^4.4.1", "lodash.get": "^4.4.2" }, "peerDependencies": { "@cornerstonejs/core": "^3.32.5", "@kitware/vtk.js": "32.12.1", "@types/d3-array": "^3.0.4", "@types/d3-interpolate": "^3.0.1", "d3-array": "^3.2.3", "d3-interpolate": "^3.0.1", "gl-matrix": "^3.4.3" } }, "sha512-h1UWy/u8Cz1QPsMvbNF+rRGwaEdRnGwCbOSZQwLzYOuvaV+rvGAI6l+Xbhe9zUgzE1lSbBigiQjdGHiNtnVWPQ=="], + "@cornerstonejs/tools": ["@cornerstonejs/tools@3.32.12", "", { "dependencies": { "@types/offscreencanvas": "2019.7.3", "comlink": "^4.4.1", "lodash.get": "^4.4.2" }, "peerDependencies": { "@cornerstonejs/core": "^3.32.12", "@kitware/vtk.js": "32.12.1", "@types/d3-array": "^3.0.4", "@types/d3-interpolate": "^3.0.1", "d3-array": "^3.2.3", "d3-interpolate": "^3.0.1", "gl-matrix": "^3.4.3" } }, "sha512-IRzEeDhlZyTrLixvryLHMayvZN2xUc708SO6Rm7qa+2QWtSMzB/c5tLLyW6koux4EEVeP5CYKk3jelgbFbj9fQ=="], "@cspotcode/source-map-support": ["@cspotcode/source-map-support@0.8.1", "", { "dependencies": { "@jridgewell/trace-mapping": "0.3.9" } }, "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw=="], @@ -1448,14 +1448,6 @@ "@lerna/create": ["@lerna/create@7.4.2", "", { "dependencies": { "@lerna/child-process": "7.4.2", "@npmcli/run-script": "6.0.2", "@nx/devkit": ">=16.5.1 < 17", "@octokit/plugin-enterprise-rest": "6.0.1", "@octokit/rest": "19.0.11", "byte-size": "8.1.1", "chalk": "4.1.0", "clone-deep": "4.0.1", "cmd-shim": "6.0.1", "columnify": "1.6.0", "conventional-changelog-core": "5.0.1", "conventional-recommended-bump": "7.0.1", "cosmiconfig": "^8.2.0", "dedent": "0.7.0", "execa": "5.0.0", "fs-extra": "^11.1.1", "get-stream": "6.0.0", "git-url-parse": "13.1.0", "glob-parent": "5.1.2", "globby": "11.1.0", "graceful-fs": "4.2.11", "has-unicode": "2.0.1", "ini": "^1.3.8", "init-package-json": "5.0.0", "inquirer": "^8.2.4", "is-ci": "3.0.1", "is-stream": "2.0.0", "js-yaml": "4.1.0", "libnpmpublish": "7.3.0", "load-json-file": "6.2.0", "lodash": "^4.17.21", "make-dir": "4.0.0", "minimatch": "3.0.5", "multimatch": "5.0.0", "node-fetch": "2.6.7", "npm-package-arg": "8.1.1", "npm-packlist": "5.1.1", "npm-registry-fetch": "^14.0.5", "npmlog": "^6.0.2", "nx": ">=16.5.1 < 17", "p-map": "4.0.0", "p-map-series": "2.1.0", "p-queue": "6.6.2", "p-reduce": "^2.1.0", "pacote": "^15.2.0", "pify": "5.0.0", "read-cmd-shim": "4.0.0", "read-package-json": "6.0.4", "resolve-from": "5.0.0", "rimraf": "^4.4.1", "semver": "^7.3.4", "signal-exit": "3.0.7", "slash": "^3.0.0", "ssri": "^9.0.1", "strong-log-transformer": "2.1.0", "tar": "6.1.11", "temp-dir": "1.0.0", "upath": "2.0.1", "uuid": "^9.0.0", "validate-npm-package-license": "^3.0.4", "validate-npm-package-name": "5.0.0", "write-file-atomic": "5.0.1", "write-pkg": "4.0.0", "yargs": "16.2.0", "yargs-parser": "20.2.4" } }, "sha512-1wplFbQ52K8E/unnqB0Tq39Z4e+NEoNrpovEnl6GpsTUrC6WDp8+w0Le2uCBV0hXyemxChduCkLz4/y1H1wTeg=="], - "@mapbox/jsonlint-lines-primitives": ["@mapbox/jsonlint-lines-primitives@2.0.2", "", {}, "sha512-rY0o9A5ECsTQRVhv7tL/OyDpGAoUB4tTvLiW1DSzQGq4bvTPhNw1VpSNjDJc5GFZ2XuyOtSWSVN05qOtcD71qQ=="], - - "@mapbox/mapbox-gl-style-spec": ["@mapbox/mapbox-gl-style-spec@13.28.0", "", { "dependencies": { "@mapbox/jsonlint-lines-primitives": "~2.0.2", "@mapbox/point-geometry": "^0.1.0", "@mapbox/unitbezier": "^0.0.0", "csscolorparser": "~1.0.2", "json-stringify-pretty-compact": "^2.0.0", "minimist": "^1.2.6", "rw": "^1.3.3", "sort-object": "^0.3.2" }, "bin": { "gl-style-format": "bin/gl-style-format.js", "gl-style-migrate": "bin/gl-style-migrate.js", "gl-style-validate": "bin/gl-style-validate.js", "gl-style-composite": "bin/gl-style-composite.js" } }, "sha512-B8xM7Fp1nh5kejfIl4SWeY0gtIeewbuRencqO3cJDrCHZpaPg7uY+V8abuR+esMeuOjRl5cLhVTP40v+1ywxbg=="], - - "@mapbox/point-geometry": ["@mapbox/point-geometry@0.1.0", "", {}, "sha512-6j56HdLTwWGO0fJPlrZtdU/B13q8Uwmo18Ck2GnGgN9PCFyKTZ3UbXeEdRFh18i9XQ92eH2VdtpJHpBD3aripQ=="], - - "@mapbox/unitbezier": ["@mapbox/unitbezier@0.0.0", "", {}, "sha512-HPnRdYO0WjFjRTSwO3frz1wKaU649OBFPX3Zo/2WZvuRi6zMiRGui8SnPQiQABgqCf8YikDe5t3HViTVw1WUzA=="], - "@mdx-js/react": ["@mdx-js/react@2.3.0", "", { "dependencies": { "@types/mdx": "^2.0.0", "@types/react": ">=16" }, "peerDependencies": { "react": ">=16" } }, "sha512-zQH//gdOmuu7nt2oJR29vFhDv88oGPmVw6BggmrHeMI+xgEkp1B2dX9/bMBSYtK0dyLX/aOmesKS09g222K1/g=="], "@microsoft/tsdoc": ["@microsoft/tsdoc@0.14.2", "", {}, "sha512-9b8mPpKrfeGRuhFH5iO1iwCLeIIsV6+H1sRfxbkoGXIyQE2BTsPd9zqSqQJ+pv5sJ/hT5M1zvOFL02MnEezFug=="], @@ -2124,6 +2116,8 @@ "@types/range-parser": ["@types/range-parser@1.2.7", "", {}, "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ=="], + "@types/rbush": ["@types/rbush@4.0.0", "", {}, "sha512-+N+2H39P8X+Hy1I5mC6awlTX54k3FhiUmvt7HWzGJZvF+syUAAxP/stwppS8JE84YHqFgRMv6fCy31202CMFxQ=="], + "@types/react": ["@types/react@18.3.23", "", { "dependencies": { "@types/prop-types": "*", "csstype": "^3.0.2" } }, "sha512-/LDXMQh55EzZQ0uVAZmKKhfENivEvWz6E+EYzh+/MCjMhNsotd+ZHhBGIjFDTi6+fz0OhQQQLbTgdQIxxCsC0w=="], "@types/react-dom": ["@types/react-dom@18.3.7", "", { "peerDependencies": { "@types/react": "^18.0.0" } }, "sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ=="], @@ -2778,8 +2772,6 @@ "css-what": ["css-what@6.2.2", "", {}, "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA=="], - "csscolorparser": ["csscolorparser@1.0.3", "", {}, "sha512-umPSgYwZkdFoUrH5hIq5kf0wPSXiro51nPw0j2K/c83KflkPSTBGMz6NJvMB+07VlL0y7VPo6QJcDjcgKTTm3w=="], - "cssdb": ["cssdb@7.11.2", "", {}, "sha512-lhQ32TFkc1X4eTefGfYPvgovRSzIMofHkigfH8nWtyRL4XJLsRhJFreRvEgKzept7x1rjBuy3J/MurXLaFxW/A=="], "cssesc": ["cssesc@3.0.0", "", { "bin": { "cssesc": "bin/cssesc" } }, "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg=="], @@ -2954,7 +2946,7 @@ "detective": ["detective@5.2.1", "", { "dependencies": { "acorn-node": "^1.8.2", "defined": "^1.0.0", "minimist": "^1.2.6" }, "bin": { "detective": "bin/detective.js" } }, "sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw=="], - "dicom-microscopy-viewer": ["dicom-microscopy-viewer@0.46.1", "", { "dependencies": { "@cornerstonejs/codec-charls": "^1.2.3", "@cornerstonejs/codec-libjpeg-turbo-8bit": "^1.2.2", "@cornerstonejs/codec-openjpeg": "^1.2.2", "@cornerstonejs/codec-openjph": "^2.4.5", "colormap": "^2.3", "dcmjs": "^0.29.8", "dicomicc": "^0.1", "dicomweb-client": "^0.8.4", "image-type": "^4.1", "mathjs": "^11.2", "ol": "^7.1", "uuid": "^9.0" } }, "sha512-QLozX/iM6ZA0TxheHQnTNiLg+RbSVlxYKMNG9qdqV5oNbEDOf+z4/8mDqnAQ8wjlQXE2MbUDX8JRa0LmO9mDTg=="], + "dicom-microscopy-viewer": ["dicom-microscopy-viewer@0.48.6", "", { "dependencies": { "@cornerstonejs/codec-charls": "^1.2.3", "@cornerstonejs/codec-libjpeg-turbo-8bit": "^1.2.2", "@cornerstonejs/codec-openjpeg": "^1.2.4", "@cornerstonejs/codec-openjph": "^2.4.5", "colormap": "^2.3", "dcmjs": "^0.41.0", "dicomicc": "^0.1", "dicomweb-client": "^0.10.3", "image-type": "^4.1", "mathjs": "^11.2", "ol": "^10.4.0", "uuid": "^9.0" } }, "sha512-cTQ14qE3zqzlH0QOIhxbrIOsLVNCV6/i9qDrIiOnmD3I1R2W6cwRN4iMgQ0c6zas/9+o645Tu37FA6BqQ3fIlg=="], "dicom-parser": ["dicom-parser@1.8.21", "", {}, "sha512-lYCweHQDsC8UFpXErPlg86Px2A8bay0HiUY+wzoG3xv5GzgqVHU3lziwSc/Gzn7VV7y2KeP072SzCviuOoU02w=="], @@ -3022,7 +3014,7 @@ "duplexify": ["duplexify@3.7.1", "", { "dependencies": { "end-of-stream": "^1.0.0", "inherits": "^2.0.1", "readable-stream": "^2.0.0", "stream-shift": "^1.0.0" } }, "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g=="], - "earcut": ["earcut@2.2.4", "", {}, "sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ=="], + "earcut": ["earcut@3.0.2", "", {}, "sha512-X7hshQbLyMJ/3RPhyObLARM2sNxxmRALLKx1+NVFFnQ9gKzmCrxm9+uLIAdBcvc8FNLpctqlQ2V6AE92Ol9UDQ=="], "eastasianwidth": ["eastasianwidth@0.2.0", "", {}, "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA=="], @@ -3834,8 +3826,6 @@ "json-stable-stringify-without-jsonify": ["json-stable-stringify-without-jsonify@1.0.1", "", {}, "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw=="], - "json-stringify-pretty-compact": ["json-stringify-pretty-compact@2.0.0", "", {}, "sha512-WRitRfs6BGq4q8gTgOy4ek7iPFXjbra0H3PmDLKm2xnZ+Gh1HUhiKGgCZkSPNULlP7mvfu6FV/mOLhCarspADQ=="], - "json-stringify-safe": ["json-stringify-safe@5.0.1", "", {}, "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA=="], "json5": ["json5@2.2.3", "", { "bin": { "json5": "lib/cli.js" } }, "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg=="], @@ -3990,8 +3980,6 @@ "map-or-similar": ["map-or-similar@1.5.0", "", {}, "sha512-0aF7ZmVon1igznGI4VS30yugpduQW3y3GkcgGJOp7d8x8QrizhigUxjI/m2UojsXXto+jLAH3KSz+xOJTiORjg=="], - "mapbox-to-css-font": ["mapbox-to-css-font@2.4.5", "", {}, "sha512-VJ6nB8emkO9VODI0Fk+TQ/0zKBTqmf/Pkt8Xv0kHstoc0iXRajA00DAid4Kc3K5xeFIOoiZrVxijEzj0GLVO2w=="], - "markdown-table": ["markdown-table@3.0.4", "", {}, "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw=="], "markdown-to-jsx": ["markdown-to-jsx@7.7.12", "", { "peerDependencies": { "react": ">= 0.14.0" } }, "sha512-Y5xNBqoaTooSLkmlg2P0fdbh53gp4MqW7zhvcweGCPUWvWI5BecWRYI8vPlzT8D7OULxsQg2qoRW9EsJlBWasQ=="], @@ -4292,9 +4280,7 @@ "oidc-client-ts": ["oidc-client-ts@3.3.0", "", { "dependencies": { "jwt-decode": "^4.0.0" } }, "sha512-t13S540ZwFOEZKLYHJwSfITugupW4uYLwuQSSXyKH/wHwZ+7FvgHE7gnNJh1YQIZ1Yd1hKSRjqeXGSUtS0r9JA=="], - "ol": ["ol@7.5.2", "", { "dependencies": { "earcut": "^2.2.3", "geotiff": "^2.0.7", "ol-mapbox-style": "^10.1.0", "pbf": "3.2.1", "rbush": "^3.0.1" } }, "sha512-HJbb3CxXrksM6ct367LsP3N+uh+iBBMdP3DeGGipdV9YAYTP0vTJzqGnoqQ6C2IW4qf8krw9yuyQbc9fjOIaOQ=="], - - "ol-mapbox-style": ["ol-mapbox-style@10.7.0", "", { "dependencies": { "@mapbox/mapbox-gl-style-spec": "^13.23.1", "mapbox-to-css-font": "^2.4.1", "ol": "^7.3.0" } }, "sha512-S/UdYBuOjrotcR95Iq9AejGYbifKeZE85D9VtH11ryJLQPTZXZSW1J5bIXcr4AlAH6tyjPPHTK34AdkwB32Myw=="], + "ol": ["ol@10.6.1", "", { "dependencies": { "@types/rbush": "4.0.0", "earcut": "^3.0.0", "geotiff": "^2.1.3", "pbf": "4.0.1", "rbush": "^4.0.0" } }, "sha512-xp174YOwPeLj7c7/8TCIEHQ4d41tgTDDhdv6SqNdySsql5/MaFJEJkjlsYcvOPt7xA6vrum/QG4UdJ0iCGT1cg=="], "on-finished": ["on-finished@2.4.1", "", { "dependencies": { "ee-first": "1.1.1" } }, "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg=="], @@ -4404,7 +4390,7 @@ "pathe": ["pathe@2.0.3", "", {}, "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w=="], - "pbf": ["pbf@3.2.1", "", { "dependencies": { "ieee754": "^1.1.12", "resolve-protobuf-schema": "^2.1.0" }, "bin": { "pbf": "bin/pbf" } }, "sha512-ClrV7pNOn7rtmoQVF4TS1vyU0WhYRnP92fzbfF75jAIwpnzdJXf8iTd4CMEqO4yUenH6NDqLiwjqlh6QgZzgLQ=="], + "pbf": ["pbf@4.0.1", "", { "dependencies": { "resolve-protobuf-schema": "^2.1.0" }, "bin": { "pbf": "bin/pbf" } }, "sha512-SuLdBvS42z33m8ejRbInMapQe8n0D3vN/Xd5fmWM3tufNgRQFBpaW2YVJxQZV4iPNqb0vEFvssMEo5w9c6BTIA=="], "pbkdf2": ["pbkdf2@3.1.3", "", { "dependencies": { "create-hash": "~1.1.3", "create-hmac": "^1.1.7", "ripemd160": "=2.0.1", "safe-buffer": "^5.2.1", "sha.js": "^2.4.11", "to-buffer": "^1.2.0" } }, "sha512-wfRLBZ0feWRhCIkoMB6ete7czJcnNnqRpcoWQBLqatqXXmelSRqfdDK4F3u9T2s2cXas/hQJcryI/4lAL+XTlA=="], @@ -4672,7 +4658,7 @@ "quick-lru": ["quick-lru@5.1.1", "", {}, "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA=="], - "quickselect": ["quickselect@2.0.0", "", {}, "sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw=="], + "quickselect": ["quickselect@3.0.0", "", {}, "sha512-XdjUArbK4Bm5fLLvlm5KpTFOiOThgfWWI4axAZDWg4E/0mKdZyI9tNEfds27qCi1ze/vwTR16kvmmGhRra3c2g=="], "rabin-rs": ["rabin-rs@2.1.0", "", {}, "sha512-5y72gAXPzIBsAMHcpxZP8eMDuDT98qMP1BqSDHRbHkJJXEgWIN1lA47LxUqzsK6jknOJtgfkQr9v+7qMlFDm6g=="], @@ -4690,7 +4676,7 @@ "raw-body": ["raw-body@2.5.2", "", { "dependencies": { "bytes": "3.1.2", "http-errors": "2.0.0", "iconv-lite": "0.4.24", "unpipe": "1.0.0" } }, "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA=="], - "rbush": ["rbush@3.0.1", "", { "dependencies": { "quickselect": "^2.0.0" } }, "sha512-XRaVO0YecOpEuIvbhbpTrZgoiI6xBlz6hnlr6EHhd+0x9ase6EmeN+hdwwUaJvLcsFFQ8iWVF1GAK1yB0BWi0w=="], + "rbush": ["rbush@4.0.1", "", { "dependencies": { "quickselect": "^3.0.0" } }, "sha512-IP0UpfeWQujYC8Jg162rMNc01Rf0gWMMAb2Uxus/Q0qOFw4lCcq6ZnQEZwUoJqWyUGJ9th7JjwI4yIWo+uvoAQ=="], "rc": ["rc@1.2.8", "", { "dependencies": { "deep-extend": "^0.6.0", "ini": "~1.3.0", "minimist": "^1.2.0", "strip-json-comments": "~2.0.1" }, "bin": { "rc": "./cli.js" } }, "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw=="], @@ -4878,8 +4864,6 @@ "run-parallel": ["run-parallel@1.2.0", "", { "dependencies": { "queue-microtask": "^1.2.2" } }, "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA=="], - "rw": ["rw@1.3.3", "", {}, "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ=="], - "rxjs": ["rxjs@7.8.2", "", { "dependencies": { "tslib": "^2.1.0" } }, "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA=="], "sade": ["sade@1.8.1", "", { "dependencies": { "mri": "^1.1.0" } }, "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A=="], @@ -4986,14 +4970,8 @@ "sonner": ["sonner@1.7.4", "", { "peerDependencies": { "react": "^18.0.0 || ^19.0.0 || ^19.0.0-rc", "react-dom": "^18.0.0 || ^19.0.0 || ^19.0.0-rc" } }, "sha512-DIS8z4PfJRbIyfVFDVnK9rO3eYDtse4Omcm6bt0oEr5/jtLgysmjuBl1frJ9E/EQZrFmKx2A8m/s5s9CRXIzhw=="], - "sort-asc": ["sort-asc@0.1.0", "", {}, "sha512-jBgdDd+rQ+HkZF2/OHCmace5dvpos/aWQpcxuyRs9QUbPRnkEJmYVo81PIGpjIdpOcsnJ4rGjStfDHsbn+UVyw=="], - - "sort-desc": ["sort-desc@0.1.1", "", {}, "sha512-jfZacW5SKOP97BF5rX5kQfJmRVZP5/adDUTY8fCSPvNcXDVpUEe2pr/iKGlcyZzchRJZrswnp68fgk3qBXgkJw=="], - "sort-keys": ["sort-keys@1.1.2", "", { "dependencies": { "is-plain-obj": "^1.0.0" } }, "sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg=="], - "sort-object": ["sort-object@0.3.2", "", { "dependencies": { "sort-asc": "^0.1.0", "sort-desc": "^0.1.1" } }, "sha512-aAQiEdqFTTdsvUFxXm3umdo04J7MRljoVGbBlkH7BgNsMvVNAJyGj7C/wV1A8wHWAJj/YikeZbfuCKqhggNWGA=="], - "source-list-map": ["source-list-map@2.0.1", "", {}, "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw=="], "source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], @@ -6046,8 +6024,6 @@ "detect-package-manager/execa": ["execa@5.1.1", "", { "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", "human-signals": "^2.1.0", "is-stream": "^2.0.0", "merge-stream": "^2.0.0", "npm-run-path": "^4.0.1", "onetime": "^5.1.2", "signal-exit": "^3.0.3", "strip-final-newline": "^2.0.0" } }, "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg=="], - "dicom-microscopy-viewer/dicomweb-client": ["dicomweb-client@0.8.4", "", {}, "sha512-/6oY3/Fg9JyAlbTWuJOYbVqici3+nlZt43+Z/Y47RNiqLc028JcxNlY28u4VQqksxfB59f1hhNbsqsHyDT4vhw=="], - "dicom-microscopy-viewer/mathjs": ["mathjs@11.12.0", "", { "dependencies": { "@babel/runtime": "^7.23.2", "complex.js": "^2.1.1", "decimal.js": "^10.4.3", "escape-latex": "^1.2.0", "fraction.js": "4.3.4", "javascript-natural-sort": "^0.7.1", "seedrandom": "^3.0.5", "tiny-emitter": "^2.1.0", "typed-function": "^4.1.1" }, "bin": { "mathjs": "bin/cli.js" } }, "sha512-UGhVw8rS1AyedyI55DGz9q1qZ0p98kyKPyc9vherBkoueLntPfKtPBh14x+V4cdUWK0NZV2TBwqRFlvadscSuw=="], "diffie-hellman/bn.js": ["bn.js@4.12.2", "", {}, "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw=="], diff --git a/extensions/cornerstone-dicom-pmap/package.json b/extensions/cornerstone-dicom-pmap/package.json index affb69b42..9a7e803f3 100644 --- a/extensions/cornerstone-dicom-pmap/package.json +++ b/extensions/cornerstone-dicom-pmap/package.json @@ -46,8 +46,8 @@ }, "dependencies": { "@babel/runtime": "^7.20.13", - "@cornerstonejs/adapters": "^3.32.5", - "@cornerstonejs/core": "^3.32.5", + "@cornerstonejs/adapters": "^3.32.12", + "@cornerstonejs/core": "^3.32.12", "@kitware/vtk.js": "32.12.0", "react-color": "^2.19.3" } diff --git a/extensions/cornerstone-dicom-seg/package.json b/extensions/cornerstone-dicom-seg/package.json index 5a18e63ba..e91d54d3d 100644 --- a/extensions/cornerstone-dicom-seg/package.json +++ b/extensions/cornerstone-dicom-seg/package.json @@ -46,8 +46,8 @@ }, "dependencies": { "@babel/runtime": "^7.20.13", - "@cornerstonejs/adapters": "^3.32.5", - "@cornerstonejs/core": "^3.32.5", + "@cornerstonejs/adapters": "^3.32.12", + "@cornerstonejs/core": "^3.32.12", "@kitware/vtk.js": "32.12.0", "react-color": "^2.19.3" } diff --git a/extensions/cornerstone-dicom-sr/package.json b/extensions/cornerstone-dicom-sr/package.json index 3cdecc637..5677b489a 100644 --- a/extensions/cornerstone-dicom-sr/package.json +++ b/extensions/cornerstone-dicom-sr/package.json @@ -46,9 +46,9 @@ }, "dependencies": { "@babel/runtime": "^7.20.13", - "@cornerstonejs/adapters": "^3.32.5", - "@cornerstonejs/core": "^3.32.5", - "@cornerstonejs/tools": "^3.32.5", + "@cornerstonejs/adapters": "^3.32.12", + "@cornerstonejs/core": "^3.32.12", + "@cornerstonejs/tools": "^3.32.12", "classnames": "^2.3.2" } } diff --git a/extensions/cornerstone-dynamic-volume/package.json b/extensions/cornerstone-dynamic-volume/package.json index 5250966a6..f7bb8c621 100644 --- a/extensions/cornerstone-dynamic-volume/package.json +++ b/extensions/cornerstone-dynamic-volume/package.json @@ -42,8 +42,8 @@ }, "dependencies": { "@babel/runtime": "^7.20.13", - "@cornerstonejs/core": "^3.32.5", - "@cornerstonejs/tools": "^3.32.5", + "@cornerstonejs/core": "^3.32.12", + "@cornerstonejs/tools": "^3.32.12", "classnames": "^2.3.2" } } diff --git a/extensions/cornerstone/package.json b/extensions/cornerstone/package.json index 17edfd1cb..d2975d623 100644 --- a/extensions/cornerstone/package.json +++ b/extensions/cornerstone/package.json @@ -38,7 +38,7 @@ "@cornerstonejs/codec-libjpeg-turbo-8bit": "^1.2.2", "@cornerstonejs/codec-openjpeg": "^1.2.4", "@cornerstonejs/codec-openjph": "^2.4.5", - "@cornerstonejs/dicom-image-loader": "^3.32.5", + "@cornerstonejs/dicom-image-loader": "^3.32.12", "@ohif/core": "3.12.0-beta.7", "@ohif/ui": "3.12.0-beta.7", "dcmjs": "0.43.1", @@ -51,12 +51,12 @@ }, "dependencies": { "@babel/runtime": "^7.20.13", - "@cornerstonejs/adapters": "^3.32.5", - "@cornerstonejs/ai": "^3.32.5", - "@cornerstonejs/core": "^3.32.5", - "@cornerstonejs/labelmap-interpolation": "^3.32.5", - "@cornerstonejs/polymorphic-segmentation": "^3.32.5", - "@cornerstonejs/tools": "^3.32.5", + "@cornerstonejs/adapters": "^3.32.12", + "@cornerstonejs/ai": "^3.32.12", + "@cornerstonejs/core": "^3.32.12", + "@cornerstonejs/labelmap-interpolation": "^3.32.12", + "@cornerstonejs/polymorphic-segmentation": "^3.32.12", + "@cornerstonejs/tools": "^3.32.12", "@itk-wasm/morphological-contour-interpolation": "1.1.0", "@kitware/vtk.js": "32.12.0", "html2canvas": "^1.4.1", diff --git a/extensions/cornerstone/src/init.tsx b/extensions/cornerstone/src/init.tsx index f5db9060a..84e3539e9 100644 --- a/extensions/cornerstone/src/init.tsx +++ b/extensions/cornerstone/src/init.tsx @@ -55,6 +55,10 @@ export default async function init({ extensionManager, appConfig, }: withAppTypes): Promise { + // Use a public library path of PUBLIC_URL plus the component name + // This safely separates components that are loaded as-is. + window.PUBLIC_LIB_URL ||= './${component}/'; + // Note: this should run first before initializing the cornerstone // DO NOT CHANGE THE ORDER @@ -195,7 +199,6 @@ export default async function init({ commandsManager.runCommand('jumpToMeasurementViewport', { measurement, annotationUID, evt }); }); - // When a custom image load is performed, update the relevant viewports hangingProtocolService.subscribe( hangingProtocolService.EVENTS.CUSTOM_IMAGE_LOAD_PERFORMED, diff --git a/extensions/dicom-microscopy/src/DicomMicroscopyANNSopClassHandler.js b/extensions/dicom-microscopy/src/DicomMicroscopyANNSopClassHandler.js new file mode 100644 index 000000000..84a17749b --- /dev/null +++ b/extensions/dicom-microscopy/src/DicomMicroscopyANNSopClassHandler.js @@ -0,0 +1,113 @@ +import OHIF, { DicomMetadataStore } from '@ohif/core'; +import loadAnnotation from './utils/loadAnnotation'; +import getSourceDisplaySet from './utils/getSourceDisplaySet'; + +const { utils } = OHIF; + +const SOP_CLASS_UIDS = { + MICROSCOPY_BULK_SIMPLE_ANNOTATION: '1.2.840.10008.5.1.4.1.1.91.1', +}; + +const SOPClassHandlerId = + '@ohif/extension-dicom-microscopy.sopClassHandlerModule.DicomMicroscopyANNSopClassHandler'; + +function _getDisplaySetsFromSeries(instances, servicesManager, extensionManager) { + // If the series has no instances, stop here + if (!instances || !instances.length) { + throw new Error('No instances were provided'); + } + + const { displaySetService, microscopyService } = servicesManager.services; + + // Sort instances by date/time in ascending order (oldest first) + const sortedInstances = [...instances].sort((a, b) => { + const dateA = `${a.ContentDate}${a.ContentTime}`; + const dateB = `${b.ContentDate}${b.ContentTime}`; + return dateA.localeCompare(dateB); + }); + + // Get the most recent instance (last in the sorted array) + const instance = sortedInstances[sortedInstances.length - 1]; + + const naturalizedDataset = DicomMetadataStore.getSeries( + instance.StudyInstanceUID, + instance.SeriesInstanceUID + ).instances[0]; + + const { + SeriesDescription, + ContentDate, + ContentTime, + SeriesNumber, + StudyInstanceUID, + SeriesInstanceUID, + SOPInstanceUID, + SOPClassUID, + } = instance; + + const displaySet = { + isOverlayDisplaySet: true, + plugin: 'microscopy', + Modality: 'ANN', + thumbnailSrc: null, + altImageText: 'Microscopy Annotation', + displaySetInstanceUID: utils.uuidv4(), + SOPInstanceUID, + SeriesInstanceUID, + StudyInstanceUID, + SOPClassHandlerId, + SOPClassUID, + SeriesDescription, + // Map the content date/time to the series date/time, these are only used for filtering. + SeriesDate: ContentDate, + SeriesTime: ContentTime, + SeriesNumber, + instance, + metadata: naturalizedDataset, + isDerived: true, + isLoading: false, + isLoaded: false, + loadError: false, + }; + + displaySet.load = function () { + return loadAnnotation({ + microscopyService, + displaySet, + extensionManager, + servicesManager, + }).catch(error => { + displaySet.isLoaded = false; + displaySet.loadError = true; + throw new Error(error); + }); + }; + + displaySet.getSourceDisplaySet = function () { + let allDisplaySets = []; + const studyMetadata = DicomMetadataStore.getStudy(StudyInstanceUID); + studyMetadata.series.forEach(series => { + const displaySets = displaySetService.getDisplaySetsForSeries(series.SeriesInstanceUID); + allDisplaySets = allDisplaySets.concat(displaySets); + }); + const ds = getSourceDisplaySet(allDisplaySets, displaySet); + return ds; + }; + + return [displaySet]; +} + +export default function getDicomMicroscopyANNSopClassHandler({ + servicesManager, + extensionManager, +}) { + const getDisplaySetsFromSeries = instances => { + return _getDisplaySetsFromSeries(instances, servicesManager, extensionManager); + }; + + return { + name: 'DicomMicroscopyANNSopClassHandler', + sopClassUids: [SOP_CLASS_UIDS.MICROSCOPY_BULK_SIMPLE_ANNOTATION], + getDisplaySetsFromSeries, + }; +} diff --git a/extensions/dicom-microscopy/src/DicomMicroscopySRSopClassHandler.js b/extensions/dicom-microscopy/src/DicomMicroscopySRSopClassHandler.js index a195a801e..c2459ab2e 100644 --- a/extensions/dicom-microscopy/src/DicomMicroscopySRSopClassHandler.js +++ b/extensions/dicom-microscopy/src/DicomMicroscopySRSopClassHandler.js @@ -62,6 +62,7 @@ function _getDisplaySetsFromSeries(instances, servicesManager, extensionManager) } = instance; const displaySet = { + isOverlayDisplaySet: true, plugin: 'microscopy', Modality: 'SR', altImageText: 'Microscopy SR', diff --git a/extensions/dicom-microscopy/src/DicomMicroscopyViewport.tsx b/extensions/dicom-microscopy/src/DicomMicroscopyViewport.tsx index 8975a912d..46bf0ff4d 100644 --- a/extensions/dicom-microscopy/src/DicomMicroscopyViewport.tsx +++ b/extensions/dicom-microscopy/src/DicomMicroscopyViewport.tsx @@ -172,7 +172,7 @@ function DicomMicroscopyViewport({ microscopyService.clearAnnotations(); let smDisplaySet = displaySet; - if (displaySet.Modality === 'SR') { + if (displaySet.isOverlayDisplaySet) { // for SR displaySet, let's load the actual image displaySet smDisplaySet = displaySet.getSourceDisplaySet(); } @@ -180,7 +180,7 @@ function DicomMicroscopyViewport({ await loadViewer(smDisplaySet.others); - if (displaySet.Modality === 'SR') { + if (displaySet.isOverlayDisplaySet && !displaySet.isLoaded && !displaySet.isLoading) { displaySet.load(smDisplaySet); } }, @@ -205,8 +205,8 @@ function DicomMicroscopyViewport({ microscopyService.clearAnnotations(); - // loading SR - if (displaySet.Modality === 'SR') { + // loading SR - only if not already loaded and not currently loading + if (displaySet.isOverlayDisplaySet && !displaySet.isLoaded && !displaySet.isLoading) { const referencedDisplaySet = displaySet.getSourceDisplaySet(); displaySet.load(referencedDisplaySet); } diff --git a/extensions/dicom-microscopy/src/index.tsx b/extensions/dicom-microscopy/src/index.tsx index 4023222c3..6bea12a21 100644 --- a/extensions/dicom-microscopy/src/index.tsx +++ b/extensions/dicom-microscopy/src/index.tsx @@ -7,6 +7,7 @@ import { Types } from '@ohif/core'; import { useViewportGrid } from '@ohif/ui-next'; import getDicomMicroscopySRSopClassHandler from './DicomMicroscopySRSopClassHandler'; +import getDicomMicroscopyANNSopClassHandler from './DicomMicroscopyANNSopClassHandler'; import MicroscopyService from './services/MicroscopyService'; import { useResizeDetector } from 'react-resize-detector'; import debounce from 'lodash.debounce'; @@ -43,7 +44,7 @@ const extension: Types.Extensions.Extension = { * {name, component} object. Example of a viewport module is the CornerstoneViewport * that is provided by the Cornerstone extension in OHIF. */ - getViewportModule({ servicesManager, extensionManager, commandsManager }) { + getViewportModule({ servicesManager }) { /** * * @param props {*} @@ -150,7 +151,10 @@ const extension: Types.Extensions.Extension = { * Examples include the default sop class handler provided by the default extension */ getSopClassHandlerModule(params) { - return [getDicomMicroscopySRSopClassHandler(params)]; + return [ + getDicomMicroscopySRSopClassHandler(params), + getDicomMicroscopyANNSopClassHandler(params), + ]; }, getPanelModule, diff --git a/extensions/dicom-microscopy/src/services/MicroscopyService.ts b/extensions/dicom-microscopy/src/services/MicroscopyService.ts index e59f048af..5a25b20fc 100644 --- a/extensions/dicom-microscopy/src/services/MicroscopyService.ts +++ b/extensions/dicom-microscopy/src/services/MicroscopyService.ts @@ -22,7 +22,7 @@ export default class MicroscopyService extends PubSubService { return { name: 'microscopyService', altName: 'MicroscopyService', - create: (props) => { + create: props => { return new MicroscopyService(props); }, }; @@ -71,7 +71,7 @@ export default class MicroscopyService extends PubSubService { } public importDicomMicroscopyViewer(): Promise { - return this.peerImport("dicom-microscopy-viewer"); + return this.peerImport('dicom-microscopy-viewer'); } /** @@ -260,6 +260,11 @@ export default class MicroscopyService extends PubSubService { return Array.from(this.managedViewers).filter(filter); } + getManagedViewersForViewport(viewportId) { + const filter = managedViewer => managedViewer.viewportId === viewportId; + return Array.from(this.managedViewers).filter(filter); + } + /** * Restores the created annotations for the viewer being added * @@ -290,6 +295,13 @@ export default class MicroscopyService extends PubSubService { * @returns {ViewerManager} managed viewer */ addViewer(viewer, viewportId, container, studyInstanceUID, seriesInstanceUID) { + // Check if a viewer already exists for this viewportId + const existingViewer = Array.from(this.managedViewers).find(mv => mv.viewportId === viewportId); + if (existingViewer) { + // If a viewer exists, remove it first + this.removeViewer(existingViewer.viewer); + } + const managedViewer = new ViewerManager( viewer, viewportId, @@ -355,6 +367,10 @@ export default class MicroscopyService extends PubSubService { } }); + if (recentDisplaySet.isLoading) { + return; + } + recentDisplaySet.isLoading = true; recentDisplaySet.load(smDisplaySet); diff --git a/extensions/dicom-microscopy/src/utils/dcmCodeValues.js b/extensions/dicom-microscopy/src/utils/dcmCodeValues.js index 82d489919..2d194ed4e 100644 --- a/extensions/dicom-microscopy/src/utils/dcmCodeValues.js +++ b/extensions/dicom-microscopy/src/utils/dcmCodeValues.js @@ -9,6 +9,9 @@ const DCM_CODE_VALUES = { SHORT_AXIS: 'G-A186', LONG_AXIS: 'G-A185', ELLIPSE_AREA: 'G-D7FE', // TODO: Remove this + ANNOTATION: '121071', + ANNOTATION_GROUP: '121072', + ANNOTATION_LABEL: '121073', }; export default DCM_CODE_VALUES; diff --git a/extensions/dicom-microscopy/src/utils/getSourceDisplaySet.js b/extensions/dicom-microscopy/src/utils/getSourceDisplaySet.js index a2c7439e0..5a42a34f3 100644 --- a/extensions/dicom-microscopy/src/utils/getSourceDisplaySet.js +++ b/extensions/dicom-microscopy/src/utils/getSourceDisplaySet.js @@ -6,7 +6,15 @@ * @returns */ export default function getSourceDisplaySet(allDisplaySets, microscopySRDisplaySet) { - const { ReferencedFrameOfReferenceUID } = microscopySRDisplaySet; + const { ReferencedFrameOfReferenceUID, metadata } = microscopySRDisplaySet; + + if (metadata.ReferencedSeriesSequence) { + const { ReferencedSeriesSequence } = metadata; + const referencedSeries = ReferencedSeriesSequence[0]; + const { SeriesInstanceUID } = referencedSeries; + const displaySets = allDisplaySets.filter(ds => ds.SeriesInstanceUID === SeriesInstanceUID); + return displaySets[0]; + } const otherDisplaySets = allDisplaySets.filter( ds => ds.displaySetInstanceUID !== microscopySRDisplaySet.displaySetInstanceUID diff --git a/extensions/dicom-microscopy/src/utils/loadAnnotation.js b/extensions/dicom-microscopy/src/utils/loadAnnotation.js new file mode 100644 index 000000000..dcbc7a799 --- /dev/null +++ b/extensions/dicom-microscopy/src/utils/loadAnnotation.js @@ -0,0 +1,95 @@ +import getDicomWebClient from './dicomWebClient'; + +/** + * Loads and displays DICOM Microscopy Bulk Simple Annotations. + * + * This utility function: + * 1. Retrieves series metadata from a DICOMweb server using study and series instance UIDs + * 2. Converts metadata into MicroscopyBulkSimpleAnnotations objects + * 3. Adds annotations to the viewer in groups (identified by AnnotationGroupUID) + * 4. Applies a consistent yellow color ([255, 234, 0]) to all annotation groups + * 5. Makes the annotation groups visible in the viewer + * + * @param {Object} params - The parameters object + * @param {Object} params.microscopyService - Service for handling microscopy operations + * @param {Object} params.displaySet - The display set containing metadata + * @param {Object} params.extensionManager - Manager for extensions + * @param {Object} params.servicesManager - Manager for services + * @returns {Promise} A promise that resolves with the loaded display set + */ +export default function loadAnnotation({ + microscopyService, + displaySet, + extensionManager, + servicesManager, +}) { + const { uiNotificationService } = servicesManager.services; + return new Promise(async (resolve, reject) => { + try { + displaySet.isLoading = true; + const { metadata } = displaySet; + + const dicomMicroscopyModule = await microscopyService.importDicomMicroscopyViewer(); + + const client = getDicomWebClient({ + extensionManager, + servicesManager, + }); + + const viewportId = servicesManager.services.viewportGridService.getActiveViewportId(); + const managedViewers = microscopyService.getManagedViewersForViewport(viewportId); + const managedViewer = managedViewers[0]; + + client + .retrieveSeriesMetadata({ + studyInstanceUID: metadata.StudyInstanceUID, + seriesInstanceUID: metadata.SeriesInstanceUID, + }) + .then(async retrievedMetadata => { + const annotations = retrievedMetadata.map( + metadata => + new dicomMicroscopyModule.metadata.MicroscopyBulkSimpleAnnotations({ metadata }) + ); + + uiNotificationService.show({ + message: 'Loading annotations...', + type: 'info', + }); + + await Promise.all( + annotations.map(async ann => { + try { + await managedViewer.viewer.addAnnotationGroups(ann); + + ann.AnnotationGroupSequence.forEach(item => { + const annotationGroupUID = item.AnnotationGroupUID; + managedViewer.viewer.setAnnotationGroupStyle(annotationGroupUID, { + color: [255, 234, 0], + }); + }); + + ann.AnnotationGroupSequence.forEach(item => { + const annotationGroupUID = item.AnnotationGroupUID; + managedViewer.viewer.showAnnotationGroup(annotationGroupUID); + }); + } catch (error) { + console.error('failed to add annotation groups:', error); + uiNotificationService.show({ + title: 'Error loading annotations', + message: error.message, + type: 'error', + }); + } + }) + ); + + displaySet.isLoaded = true; + displaySet.isLoading = false; + resolve(displaySet); + }); + } catch (error) { + console.error('Error loading annotation:', error); + reject(error); + } + }); +} diff --git a/extensions/measurement-tracking/package.json b/extensions/measurement-tracking/package.json index f32d06b35..f8e9164a5 100644 --- a/extensions/measurement-tracking/package.json +++ b/extensions/measurement-tracking/package.json @@ -32,8 +32,8 @@ "start": "yarn run dev" }, "peerDependencies": { - "@cornerstonejs/core": "^3.32.5", - "@cornerstonejs/tools": "^3.32.5", + "@cornerstonejs/core": "^3.32.12", + "@cornerstonejs/tools": "^3.32.12", "@ohif/core": "3.12.0-beta.7", "@ohif/extension-cornerstone-dicom-sr": "3.12.0-beta.7", "@ohif/extension-default": "3.12.0-beta.7", diff --git a/extensions/measurement-tracking/src/panels/PanelStudyBrowserTracking/PanelStudyBrowserTracking.tsx b/extensions/measurement-tracking/src/panels/PanelStudyBrowserTracking/PanelStudyBrowserTracking.tsx index 411a56ec7..635457f2a 100644 --- a/extensions/measurement-tracking/src/panels/PanelStudyBrowserTracking/PanelStudyBrowserTracking.tsx +++ b/extensions/measurement-tracking/src/panels/PanelStudyBrowserTracking/PanelStudyBrowserTracking.tsx @@ -24,7 +24,7 @@ export default function PanelStudyBrowserTracking({ const checkDirtyMeasurements = displaySetInstanceUID => { const displaySet = displaySetService.getDisplaySetByUID(displaySetInstanceUID); - if (displaySet.Modality === 'SR') { + if (displaySet.Modality === 'SR' || displaySet.Modality === 'ANN') { const activeViewportId = viewportGridService.getActiveViewportId(); sendTrackedMeasurementsEvent('CHECK_DIRTY', { viewportId: activeViewportId, diff --git a/extensions/usAnnotation/package.json b/extensions/usAnnotation/package.json index 44e49e79c..87ebab475 100644 --- a/extensions/usAnnotation/package.json +++ b/extensions/usAnnotation/package.json @@ -42,8 +42,8 @@ }, "dependencies": { "@babel/runtime": "^7.20.13", - "@cornerstonejs/core": "^3.32.5", - "@cornerstonejs/tools": "^3.32.5", + "@cornerstonejs/core": "^3.32.12", + "@cornerstonejs/tools": "^3.32.12", "@ohif/core": "3.12.0-beta.7", "@ohif/extension-cornerstone": "3.12.0-beta.7", "@ohif/extension-default": "3.12.0-beta.7", diff --git a/modes/microscopy/src/index.tsx b/modes/microscopy/src/index.tsx index 470dfd8e1..ec789fa7a 100644 --- a/modes/microscopy/src/index.tsx +++ b/modes/microscopy/src/index.tsx @@ -103,6 +103,7 @@ function modeFactory({ modeConfiguration }) { // Share the sop class handler with cornerstone version of it '@ohif/extension-cornerstone.sopClassHandlerModule.DicomMicroscopySopClassHandler', '@ohif/extension-dicom-microscopy.sopClassHandlerModule.DicomMicroscopySRSopClassHandler', + '@ohif/extension-dicom-microscopy.sopClassHandlerModule.DicomMicroscopyANNSopClassHandler', ], }, { @@ -124,6 +125,7 @@ function modeFactory({ modeConfiguration }) { sopClassHandlers: [ '@ohif/extension-cornerstone.sopClassHandlerModule.DicomMicroscopySopClassHandler', '@ohif/extension-dicom-microscopy.sopClassHandlerModule.DicomMicroscopySRSopClassHandler', + '@ohif/extension-dicom-microscopy.sopClassHandlerModule.DicomMicroscopyANNSopClassHandler', dicomvideo.sopClassHandler, dicompdf.sopClassHandler, ], diff --git a/modes/usAnnotation/package.json b/modes/usAnnotation/package.json index 7fa49f0eb..755c3954d 100644 --- a/modes/usAnnotation/package.json +++ b/modes/usAnnotation/package.json @@ -34,8 +34,8 @@ }, "dependencies": { "@babel/runtime": "^7.20.13", - "@cornerstonejs/core": "^3.32.5", - "@cornerstonejs/tools": "^3.32.5", + "@cornerstonejs/core": "^3.32.12", + "@cornerstonejs/tools": "^3.32.12", "@ohif/core": "3.12.0-beta.7", "@ohif/extension-cornerstone-dicom-sr": "3.12.0-beta.7", "@ohif/extension-ultrasound-pleura-bline": "3.12.0-beta.7", diff --git a/platform/app/.webpack/webpack.pwa.js b/platform/app/.webpack/webpack.pwa.js index 9dac16189..c8b138d4a 100644 --- a/platform/app/.webpack/webpack.pwa.js +++ b/platform/app/.webpack/webpack.pwa.js @@ -116,14 +116,6 @@ module.exports = (env, argv) => { from: `${PUBLIC_DIR}/${APP_CONFIG}`, to: `${DIST_DIR}/app-config.js`, }, - // Copy Dicom Microscopy Viewer build files - { - from: '../../../node_modules/dicom-microscopy-viewer/dist/dynamic-import', - to: DIST_DIR, - globOptions: { - ignore: ['**/*.min.js.map'], - }, - }, ], }), // Generate "index.html" w/ correct includes/imports @@ -138,15 +130,15 @@ module.exports = (env, argv) => { ...(IS_COVERAGE ? [] : [ - new InjectManifest({ - swDest: 'sw.js', - swSrc: path.join(SRC_DIR, 'service-worker.js'), - // Need to exclude the theme as it is updated independently - exclude: [/theme/], - // Cache large files for the manifests to avoid warning messages - maximumFileSizeToCacheInBytes: 1024 * 1024 * 50, - }), - ]), + new InjectManifest({ + swDest: 'sw.js', + swSrc: path.join(SRC_DIR, 'service-worker.js'), + // Need to exclude the theme as it is updated independently + exclude: [/theme/], + // Cache large files for the manifests to avoid warning messages + maximumFileSizeToCacheInBytes: 1024 * 1024 * 50, + }), + ]), ], // https://webpack.js.org/configuration/dev-server/ devServer: { @@ -163,12 +155,6 @@ module.exports = (env, argv) => { proxy: [ { '/dicomweb': 'http://localhost:5000', - '/dicom-microscopy-viewer': { - target: 'http://localhost:3000', - pathRewrite: { - '^/dicom-microscopy-viewer': `/${PUBLIC_URL}/dicom-microscopy-viewer`, - }, - }, }, ], static: [ diff --git a/platform/app/.webpack/writePluginImportsFile.js b/platform/app/.webpack/writePluginImportsFile.js index ad02e63f0..ba00dacf6 100644 --- a/platform/app/.webpack/writePluginImportsFile.js +++ b/platform/app/.webpack/writePluginImportsFile.js @@ -123,7 +123,7 @@ const createCopyPluginToDistForLink = (srcDir, distDir, plugins, folderName) => return exists ? { from, - to: distDir, + to: `${distDir}${plugin.to || ''}`, toType: 'dir', } : undefined; diff --git a/platform/app/package.json b/platform/app/package.json index a21d59863..649b28dae 100644 --- a/platform/app/package.json +++ b/platform/app/package.json @@ -53,7 +53,7 @@ "@cornerstonejs/codec-libjpeg-turbo-8bit": "^1.2.2", "@cornerstonejs/codec-openjpeg": "^1.2.4", "@cornerstonejs/codec-openjph": "^2.4.5", - "@cornerstonejs/dicom-image-loader": "^3.32.5", + "@cornerstonejs/dicom-image-loader": "^3.32.12", "@emotion/serialize": "^1.1.3", "@ohif/core": "3.12.0-beta.7", "@ohif/extension-cornerstone": "3.12.0-beta.7", diff --git a/platform/app/pluginConfig.json b/platform/app/pluginConfig.json index d1bbc6a7b..b1058b14e 100644 --- a/platform/app/pluginConfig.json +++ b/platform/app/pluginConfig.json @@ -104,9 +104,10 @@ }, { "packageName": "dicom-microscopy-viewer", - "importPath": "/dicom-microscopy-viewer/dicomMicroscopyViewer.min.js", + "importPath": "dicom-microscopy-viewer/dicomMicroscopyViewer.min.js", "globalName": "dicomMicroscopyViewer", - "directory": "./node_modules/dicom-microscopy-viewer/dist/dynamic-import" + "directory": "./node_modules/dicom-microscopy-viewer/dist/dynamic-import", + "to": "/dicom-microscopy-viewer/" } ] } diff --git a/platform/app/public/config/default.js b/platform/app/public/config/default.js index 327de4fd2..8f7bba498 100644 --- a/platform/app/public/config/default.js +++ b/platform/app/public/config/default.js @@ -87,7 +87,7 @@ window.config = { ], }, ], - defaultDataSourceName: 'dicomweb', + defaultDataSourceName: 'ohif', /* Dynamic config allows user to pass "configUrl" query string this allows to load config without recompiling application. The regex will ensure valid configuration source */ // dangerouslyUseDynamicConfig: { // enabled: true, @@ -101,7 +101,7 @@ window.config = { dataSources: [ { namespace: '@ohif/extension-default.dataSourcesModule.dicomweb', - sourceName: 'dicomweb', + sourceName: 'ohif', configuration: { friendlyName: 'AWS S3 Static wado server', name: 'aws', diff --git a/platform/core/package.json b/platform/core/package.json index 916236b7d..fe83b0028 100644 --- a/platform/core/package.json +++ b/platform/core/package.json @@ -37,8 +37,8 @@ "@cornerstonejs/codec-libjpeg-turbo-8bit": "^1.2.2", "@cornerstonejs/codec-openjpeg": "^1.2.4", "@cornerstonejs/codec-openjph": "^2.4.5", - "@cornerstonejs/core": "^3.32.5", - "@cornerstonejs/dicom-image-loader": "^3.32.5", + "@cornerstonejs/core": "^3.32.12", + "@cornerstonejs/dicom-image-loader": "^3.32.12", "@ohif/ui": "3.12.0-beta.7", "cornerstone-math": "0.1.9", "dicom-parser": "^1.8.21" diff --git a/rsbuild.config.ts b/rsbuild.config.ts index 8f29e37ab..e69f07732 100644 --- a/rsbuild.config.ts +++ b/rsbuild.config.ts @@ -94,8 +94,6 @@ export default defineConfig({ '@hooks': path.resolve(__dirname, './platform/app/src/hooks'), '@routes': path.resolve(__dirname, './platform/app/src/routes'), '@state': path.resolve(__dirname, './platform/app/src/state'), - 'dicom-microscopy-viewer': - 'dicom-microscopy-viewer/dist/dynamic-import/dicomMicroscopyViewer.min.js', }, }, output: { @@ -125,14 +123,6 @@ export default defineConfig({ from: path.resolve(PUBLIC_DIR, APP_CONFIG), to: 'app-config.js', }, - // Copy Dicom Microscopy Viewer files - { - from: path.resolve(__dirname, 'node_modules/dicom-microscopy-viewer/dist/dynamic-import'), - to: DIST_DIR, - globOptions: { - ignore: ['**/*.min.js.map'], - }, - }, ], }, html: {