diff --git a/bun.lock b/bun.lock index ac8d60708..7f2f4a597 100644 --- a/bun.lock +++ b/bun.lock @@ -52,7 +52,7 @@ }, "addOns/externals/devDependencies": { "name": "@externals/devDependencies", - "version": "3.12.0-beta.58", + "version": "3.12.0-beta.67", "dependencies": { "@babel/runtime": "7.28.2", "@kitware/vtk.js": "32.12.0", @@ -137,22 +137,22 @@ }, "addOns/externals/dicom-microscopy-viewer": { "name": "@externals/dicom-microscopy-viewer", - "version": "3.12.0-beta.58", + "version": "3.12.0-beta.67", "dependencies": { "dicom-microscopy-viewer": "0.48.6", }, }, "extensions/cornerstone": { "name": "@ohif/extension-cornerstone", - "version": "3.12.0-beta.58", + "version": "3.12.0-beta.67", "dependencies": { "@babel/runtime": "7.28.2", - "@cornerstonejs/adapters": "4.5.5", - "@cornerstonejs/ai": "4.5.5", - "@cornerstonejs/core": "4.5.5", - "@cornerstonejs/labelmap-interpolation": "4.5.5", - "@cornerstonejs/polymorphic-segmentation": "4.5.5", - "@cornerstonejs/tools": "4.5.5", + "@cornerstonejs/adapters": "4.5.13", + "@cornerstonejs/ai": "4.5.13", + "@cornerstonejs/core": "4.5.13", + "@cornerstonejs/labelmap-interpolation": "4.5.13", + "@cornerstonejs/polymorphic-segmentation": "4.5.13", + "@cornerstonejs/tools": "4.5.13", "@itk-wasm/morphological-contour-interpolation": "1.1.0", "@kitware/vtk.js": "32.12.0", "html2canvas": "1.4.1", @@ -169,9 +169,9 @@ "@cornerstonejs/codec-libjpeg-turbo-8bit": "1.2.2", "@cornerstonejs/codec-openjpeg": "1.2.4", "@cornerstonejs/codec-openjph": "2.4.7", - "@cornerstonejs/dicom-image-loader": "4.5.5", - "@ohif/core": "3.12.0-beta.58", - "@ohif/ui": "3.12.0-beta.58", + "@cornerstonejs/dicom-image-loader": "4.5.13", + "@ohif/core": "3.12.0-beta.67", + "@ohif/ui": "3.12.0-beta.67", "dcmjs": "0.43.1", "dicom-parser": "1.8.21", "hammerjs": "2.0.8", @@ -183,19 +183,19 @@ }, "extensions/cornerstone-dicom-pmap": { "name": "@ohif/extension-cornerstone-dicom-pmap", - "version": "3.12.0-beta.58", + "version": "3.12.0-beta.67", "dependencies": { "@babel/runtime": "7.28.2", - "@cornerstonejs/adapters": "4.5.5", - "@cornerstonejs/core": "4.5.5", + "@cornerstonejs/adapters": "4.5.13", + "@cornerstonejs/core": "4.5.13", "@kitware/vtk.js": "32.12.0", "react-color": "2.19.3", }, "peerDependencies": { - "@ohif/core": "3.12.0-beta.56", - "@ohif/extension-cornerstone": "3.12.0-beta.56", - "@ohif/extension-default": "3.12.0-beta.56", - "@ohif/i18n": "3.12.0-beta.56", + "@ohif/core": "3.12.0-beta.64", + "@ohif/extension-cornerstone": "3.12.0-beta.64", + "@ohif/extension-default": "3.12.0-beta.64", + "@ohif/i18n": "3.12.0-beta.64", "prop-types": "15.8.1", "react": "18.3.1", "react-dom": "18.3.1", @@ -206,16 +206,16 @@ }, "extensions/cornerstone-dicom-rt": { "name": "@ohif/extension-cornerstone-dicom-rt", - "version": "3.12.0-beta.58", + "version": "3.12.0-beta.67", "dependencies": { "@babel/runtime": "7.28.2", "react-color": "2.19.3", }, "peerDependencies": { - "@ohif/core": "3.12.0-beta.56", - "@ohif/extension-cornerstone": "3.12.0-beta.56", - "@ohif/extension-default": "3.12.0-beta.56", - "@ohif/i18n": "3.12.0-beta.56", + "@ohif/core": "3.12.0-beta.64", + "@ohif/extension-cornerstone": "3.12.0-beta.64", + "@ohif/extension-default": "3.12.0-beta.64", + "@ohif/i18n": "3.12.0-beta.64", "prop-types": "15.8.1", "react": "18.3.1", "react-dom": "18.3.1", @@ -226,19 +226,19 @@ }, "extensions/cornerstone-dicom-seg": { "name": "@ohif/extension-cornerstone-dicom-seg", - "version": "3.12.0-beta.58", + "version": "3.12.0-beta.67", "dependencies": { "@babel/runtime": "7.28.2", - "@cornerstonejs/adapters": "4.5.5", - "@cornerstonejs/core": "4.5.5", + "@cornerstonejs/adapters": "4.5.13", + "@cornerstonejs/core": "4.5.13", "@kitware/vtk.js": "32.12.0", "react-color": "2.19.3", }, "peerDependencies": { - "@ohif/core": "3.12.0-beta.56", - "@ohif/extension-cornerstone": "3.12.0-beta.56", - "@ohif/extension-default": "3.12.0-beta.56", - "@ohif/i18n": "3.12.0-beta.56", + "@ohif/core": "3.12.0-beta.64", + "@ohif/extension-cornerstone": "3.12.0-beta.64", + "@ohif/extension-default": "3.12.0-beta.64", + "@ohif/i18n": "3.12.0-beta.64", "prop-types": "15.8.1", "react": "18.3.1", "react-dom": "18.3.1", @@ -249,19 +249,19 @@ }, "extensions/cornerstone-dicom-sr": { "name": "@ohif/extension-cornerstone-dicom-sr", - "version": "3.12.0-beta.58", + "version": "3.12.0-beta.67", "dependencies": { "@babel/runtime": "7.28.2", - "@cornerstonejs/adapters": "4.5.5", - "@cornerstonejs/core": "4.5.5", - "@cornerstonejs/tools": "4.5.5", + "@cornerstonejs/adapters": "4.5.13", + "@cornerstonejs/core": "4.5.13", + "@cornerstonejs/tools": "4.5.13", "classnames": "2.5.1", }, "peerDependencies": { - "@ohif/core": "3.12.0-beta.58", - "@ohif/extension-cornerstone": "3.12.0-beta.58", - "@ohif/extension-measurement-tracking": "3.12.0-beta.58", - "@ohif/ui": "3.12.0-beta.58", + "@ohif/core": "3.12.0-beta.67", + "@ohif/extension-cornerstone": "3.12.0-beta.67", + "@ohif/extension-measurement-tracking": "3.12.0-beta.67", + "@ohif/ui": "3.12.0-beta.67", "dcmjs": "0.43.1", "dicom-parser": "1.8.21", "hammerjs": "2.0.8", @@ -271,19 +271,19 @@ }, "extensions/cornerstone-dynamic-volume": { "name": "@ohif/extension-cornerstone-dynamic-volume", - "version": "3.12.0-beta.58", + "version": "3.12.0-beta.67", "dependencies": { "@babel/runtime": "7.28.2", - "@cornerstonejs/core": "4.5.5", - "@cornerstonejs/tools": "4.5.5", + "@cornerstonejs/core": "4.5.13", + "@cornerstonejs/tools": "4.5.13", "classnames": "2.5.1", }, "peerDependencies": { - "@ohif/core": "3.12.0-beta.56", - "@ohif/extension-cornerstone": "3.12.0-beta.56", - "@ohif/extension-default": "3.12.0-beta.56", - "@ohif/i18n": "3.12.0-beta.56", - "@ohif/ui": "3.12.0-beta.56", + "@ohif/core": "3.12.0-beta.64", + "@ohif/extension-cornerstone": "3.12.0-beta.64", + "@ohif/extension-default": "3.12.0-beta.64", + "@ohif/i18n": "3.12.0-beta.64", + "@ohif/ui": "3.12.0-beta.64", "dcmjs": "0.43.1", "dicom-parser": "1.8.21", "hammerjs": "2.0.8", @@ -293,7 +293,7 @@ }, "extensions/default": { "name": "@ohif/extension-default", - "version": "3.12.0-beta.58", + "version": "3.12.0-beta.67", "dependencies": { "@babel/runtime": "7.28.2", "@cornerstonejs/calculate-suv": "1.1.0", @@ -301,8 +301,8 @@ "lodash.uniqby": "4.7.0", }, "peerDependencies": { - "@ohif/core": "3.12.0-beta.58", - "@ohif/i18n": "3.12.0-beta.58", + "@ohif/core": "3.12.0-beta.67", + "@ohif/i18n": "3.12.0-beta.67", "dcmjs": "0.43.1", "dicomweb-client": "0.10.4", "prop-types": "15.8.1", @@ -316,7 +316,7 @@ }, "extensions/dicom-microscopy": { "name": "@ohif/extension-dicom-microscopy", - "version": "3.12.0-beta.58", + "version": "3.12.0-beta.67", "dependencies": { "@babel/runtime": "7.28.2", "@cornerstonejs/codec-charls": "1.2.3", @@ -327,10 +327,10 @@ "mathjs": "12.4.3", }, "peerDependencies": { - "@ohif/core": "3.12.0-beta.56", - "@ohif/extension-default": "3.12.0-beta.56", - "@ohif/i18n": "3.12.0-beta.56", - "@ohif/ui": "3.12.0-beta.56", + "@ohif/core": "3.12.0-beta.64", + "@ohif/extension-default": "3.12.0-beta.64", + "@ohif/i18n": "3.12.0-beta.64", + "@ohif/ui": "3.12.0-beta.64", "prop-types": "15.8.1", "react": "18.3.1", "react-dom": "18.3.1", @@ -341,14 +341,14 @@ }, "extensions/dicom-pdf": { "name": "@ohif/extension-dicom-pdf", - "version": "3.12.0-beta.58", + "version": "3.12.0-beta.67", "dependencies": { "@babel/runtime": "7.28.2", "classnames": "2.5.1", }, "peerDependencies": { - "@ohif/core": "3.12.0-beta.56", - "@ohif/ui": "3.12.0-beta.56", + "@ohif/core": "3.12.0-beta.64", + "@ohif/ui": "3.12.0-beta.64", "dcmjs": "0.43.1", "dicom-parser": "1.8.21", "hammerjs": "2.0.8", @@ -358,14 +358,14 @@ }, "extensions/dicom-video": { "name": "@ohif/extension-dicom-video", - "version": "3.12.0-beta.58", + "version": "3.12.0-beta.67", "dependencies": { "@babel/runtime": "7.28.2", "classnames": "2.5.1", }, "peerDependencies": { - "@ohif/core": "3.12.0-beta.56", - "@ohif/ui": "3.12.0-beta.56", + "@ohif/core": "3.12.0-beta.64", + "@ohif/ui": "3.12.0-beta.64", "dcmjs": "0.43.1", "dicom-parser": "1.8.21", "hammerjs": "2.0.8", @@ -375,20 +375,20 @@ }, "extensions/measurement-tracking": { "name": "@ohif/extension-measurement-tracking", - "version": "3.12.0-beta.58", + "version": "3.12.0-beta.67", "dependencies": { "@babel/runtime": "7.28.2", - "@ohif/ui": "3.12.0-beta.58", + "@ohif/ui": "3.12.0-beta.67", "@xstate/react": "3.2.2", "xstate": "4.38.3", }, "peerDependencies": { - "@cornerstonejs/core": "4.5.5", - "@cornerstonejs/tools": "4.5.5", - "@ohif/core": "3.12.0-beta.58", - "@ohif/extension-cornerstone-dicom-sr": "3.12.0-beta.58", - "@ohif/extension-default": "3.12.0-beta.58", - "@ohif/ui": "3.12.0-beta.58", + "@cornerstonejs/core": "4.5.13", + "@cornerstonejs/tools": "4.5.13", + "@ohif/core": "3.12.0-beta.67", + "@ohif/extension-cornerstone-dicom-sr": "3.12.0-beta.67", + "@ohif/extension-default": "3.12.0-beta.67", + "@ohif/ui": "3.12.0-beta.67", "classnames": "2.5.1", "dcmjs": "0.43.1", "lodash.debounce": "4.0.8", @@ -401,14 +401,14 @@ }, "extensions/test-extension": { "name": "@ohif/extension-test", - "version": "3.12.0-beta.58", + "version": "3.12.0-beta.67", "dependencies": { "@babel/runtime": "7.28.2", "classnames": "2.5.1", }, "peerDependencies": { - "@ohif/core": "3.12.0-beta.56", - "@ohif/ui": "3.12.0-beta.56", + "@ohif/core": "3.12.0-beta.64", + "@ohif/ui": "3.12.0-beta.64", "dcmjs": "0.43.1", "dicom-parser": "1.8.21", "hammerjs": "2.0.8", @@ -418,14 +418,14 @@ }, "extensions/tmtv": { "name": "@ohif/extension-tmtv", - "version": "3.12.0-beta.58", + "version": "3.12.0-beta.67", "dependencies": { "@babel/runtime": "7.28.2", "classnames": "2.5.1", }, "peerDependencies": { - "@ohif/core": "3.12.0-beta.56", - "@ohif/ui": "3.12.0-beta.56", + "@ohif/core": "3.12.0-beta.64", + "@ohif/ui": "3.12.0-beta.64", "dcmjs": "0.43.1", "dicom-parser": "1.8.21", "hammerjs": "2.0.8", @@ -435,16 +435,16 @@ }, "extensions/usAnnotation": { "name": "@ohif/extension-ultrasound-pleura-bline", - "version": "3.12.0-beta.58", + "version": "3.12.0-beta.67", "dependencies": { "@babel/runtime": "7.28.2", - "@cornerstonejs/core": "4.5.5", - "@cornerstonejs/tools": "4.5.5", - "@ohif/core": "3.12.0-beta.56", - "@ohif/extension-cornerstone": "3.12.0-beta.56", - "@ohif/extension-default": "3.12.0-beta.56", - "@ohif/i18n": "3.12.0-beta.56", - "@ohif/ui-next": "3.12.0-beta.56", + "@cornerstonejs/core": "4.5.13", + "@cornerstonejs/tools": "4.5.13", + "@ohif/core": "3.12.0-beta.64", + "@ohif/extension-cornerstone": "3.12.0-beta.64", + "@ohif/extension-default": "3.12.0-beta.64", + "@ohif/i18n": "3.12.0-beta.64", + "@ohif/ui-next": "3.12.0-beta.64", }, "devDependencies": { "@babel/core": "7.28.0", @@ -487,7 +487,7 @@ }, "modes/basic": { "name": "@ohif/mode-basic", - "version": "3.12.0-beta.58", + "version": "3.12.0-beta.67", "dependencies": { "@babel/runtime": "7.28.2", }, @@ -496,19 +496,19 @@ "webpack-merge": "5.10.0", }, "peerDependencies": { - "@ohif/core": "3.12.0-beta.56", - "@ohif/extension-cornerstone": "3.12.0-beta.56", - "@ohif/extension-cornerstone-dicom-rt": "3.12.0-beta.56", - "@ohif/extension-cornerstone-dicom-seg": "3.12.0-beta.56", - "@ohif/extension-cornerstone-dicom-sr": "3.12.0-beta.56", - "@ohif/extension-default": "3.12.0-beta.56", - "@ohif/extension-dicom-pdf": "3.12.0-beta.56", - "@ohif/extension-dicom-video": "3.12.0-beta.56", + "@ohif/core": "3.12.0-beta.64", + "@ohif/extension-cornerstone": "3.12.0-beta.64", + "@ohif/extension-cornerstone-dicom-rt": "3.12.0-beta.64", + "@ohif/extension-cornerstone-dicom-seg": "3.12.0-beta.64", + "@ohif/extension-cornerstone-dicom-sr": "3.12.0-beta.64", + "@ohif/extension-default": "3.12.0-beta.64", + "@ohif/extension-dicom-pdf": "3.12.0-beta.64", + "@ohif/extension-dicom-video": "3.12.0-beta.64", }, }, "modes/basic-dev-mode": { "name": "@ohif/mode-basic-dev-mode", - "version": "3.12.0-beta.58", + "version": "3.12.0-beta.67", "dependencies": { "@babel/runtime": "7.28.2", "i18next": "17.3.1", @@ -518,17 +518,17 @@ "webpack-merge": "5.10.0", }, "peerDependencies": { - "@ohif/core": "3.12.0-beta.56", - "@ohif/extension-cornerstone": "3.12.0-beta.56", - "@ohif/extension-cornerstone-dicom-sr": "3.12.0-beta.56", - "@ohif/extension-default": "3.12.0-beta.56", - "@ohif/extension-dicom-pdf": "3.12.0-beta.56", - "@ohif/extension-dicom-video": "3.12.0-beta.56", + "@ohif/core": "3.12.0-beta.64", + "@ohif/extension-cornerstone": "3.12.0-beta.64", + "@ohif/extension-cornerstone-dicom-sr": "3.12.0-beta.64", + "@ohif/extension-default": "3.12.0-beta.64", + "@ohif/extension-dicom-pdf": "3.12.0-beta.64", + "@ohif/extension-dicom-video": "3.12.0-beta.64", }, }, "modes/basic-test-mode": { "name": "@ohif/mode-test", - "version": "3.12.0-beta.58", + "version": "3.12.0-beta.67", "dependencies": { "@babel/runtime": "7.28.2", "i18next": "17.3.1", @@ -538,19 +538,19 @@ "webpack-merge": "5.10.0", }, "peerDependencies": { - "@ohif/core": "3.12.0-beta.56", - "@ohif/extension-cornerstone": "3.12.0-beta.56", - "@ohif/extension-cornerstone-dicom-sr": "3.12.0-beta.56", - "@ohif/extension-default": "3.12.0-beta.56", - "@ohif/extension-dicom-pdf": "3.12.0-beta.56", - "@ohif/extension-dicom-video": "3.12.0-beta.56", - "@ohif/extension-measurement-tracking": "3.12.0-beta.56", - "@ohif/extension-test": "3.12.0-beta.56", + "@ohif/core": "3.12.0-beta.64", + "@ohif/extension-cornerstone": "3.12.0-beta.64", + "@ohif/extension-cornerstone-dicom-sr": "3.12.0-beta.64", + "@ohif/extension-default": "3.12.0-beta.64", + "@ohif/extension-dicom-pdf": "3.12.0-beta.64", + "@ohif/extension-dicom-video": "3.12.0-beta.64", + "@ohif/extension-measurement-tracking": "3.12.0-beta.64", + "@ohif/extension-test": "3.12.0-beta.64", }, }, "modes/longitudinal": { "name": "@ohif/mode-longitudinal", - "version": "3.12.0-beta.58", + "version": "3.12.0-beta.67", "dependencies": { "@babel/runtime": "7.28.2", "i18next": "17.3.1", @@ -560,32 +560,32 @@ "webpack-merge": "5.10.0", }, "peerDependencies": { - "@ohif/core": "3.12.0-beta.56", - "@ohif/extension-cornerstone": "3.12.0-beta.56", - "@ohif/extension-cornerstone-dicom-rt": "3.12.0-beta.56", - "@ohif/extension-cornerstone-dicom-seg": "3.12.0-beta.56", - "@ohif/extension-cornerstone-dicom-sr": "3.12.0-beta.56", - "@ohif/extension-default": "3.12.0-beta.56", - "@ohif/extension-dicom-pdf": "3.12.0-beta.56", - "@ohif/extension-dicom-video": "3.12.0-beta.56", - "@ohif/extension-measurement-tracking": "3.12.0-beta.56", + "@ohif/core": "3.12.0-beta.64", + "@ohif/extension-cornerstone": "3.12.0-beta.64", + "@ohif/extension-cornerstone-dicom-rt": "3.12.0-beta.64", + "@ohif/extension-cornerstone-dicom-seg": "3.12.0-beta.64", + "@ohif/extension-cornerstone-dicom-sr": "3.12.0-beta.64", + "@ohif/extension-default": "3.12.0-beta.64", + "@ohif/extension-dicom-pdf": "3.12.0-beta.64", + "@ohif/extension-dicom-video": "3.12.0-beta.64", + "@ohif/extension-measurement-tracking": "3.12.0-beta.64", }, }, "modes/microscopy": { "name": "@ohif/mode-microscopy", - "version": "3.12.0-beta.58", + "version": "3.12.0-beta.67", "dependencies": { "@babel/runtime": "7.28.2", "i18next": "17.3.1", }, "peerDependencies": { - "@ohif/core": "3.12.0-beta.56", - "@ohif/extension-dicom-microscopy": "3.12.0-beta.56", + "@ohif/core": "3.12.0-beta.64", + "@ohif/extension-dicom-microscopy": "3.12.0-beta.64", }, }, "modes/preclinical-4d": { "name": "@ohif/mode-preclinical-4d", - "version": "3.12.0-beta.58", + "version": "3.12.0-beta.67", "dependencies": { "@babel/runtime": "7.28.2", }, @@ -594,17 +594,17 @@ "webpack-merge": "5.10.0", }, "peerDependencies": { - "@ohif/core": "3.12.0-beta.56", - "@ohif/extension-cornerstone": "3.12.0-beta.56", - "@ohif/extension-cornerstone-dicom-seg": "3.12.0-beta.56", - "@ohif/extension-cornerstone-dynamic-volume": "3.12.0-beta.56", - "@ohif/extension-default": "3.12.0-beta.56", - "@ohif/extension-tmtv": "3.12.0-beta.56", + "@ohif/core": "3.12.0-beta.64", + "@ohif/extension-cornerstone": "3.12.0-beta.64", + "@ohif/extension-cornerstone-dicom-seg": "3.12.0-beta.64", + "@ohif/extension-cornerstone-dynamic-volume": "3.12.0-beta.64", + "@ohif/extension-default": "3.12.0-beta.64", + "@ohif/extension-tmtv": "3.12.0-beta.64", }, }, "modes/segmentation": { "name": "@ohif/mode-segmentation", - "version": "3.12.0-beta.58", + "version": "3.12.0-beta.67", "dependencies": { "@babel/runtime": "7.28.2", "i18next": "17.3.1", @@ -636,19 +636,19 @@ "webpack-merge": "5.10.0", }, "peerDependencies": { - "@ohif/core": "3.12.0-beta.56", - "@ohif/extension-cornerstone": "3.12.0-beta.56", - "@ohif/extension-cornerstone-dicom-rt": "3.12.0-beta.56", - "@ohif/extension-cornerstone-dicom-seg": "3.12.0-beta.56", - "@ohif/extension-cornerstone-dicom-sr": "3.12.0-beta.56", - "@ohif/extension-default": "3.12.0-beta.56", - "@ohif/extension-dicom-pdf": "3.12.0-beta.56", - "@ohif/extension-dicom-video": "3.12.0-beta.56", + "@ohif/core": "3.12.0-beta.64", + "@ohif/extension-cornerstone": "3.12.0-beta.64", + "@ohif/extension-cornerstone-dicom-rt": "3.12.0-beta.64", + "@ohif/extension-cornerstone-dicom-seg": "3.12.0-beta.64", + "@ohif/extension-cornerstone-dicom-sr": "3.12.0-beta.64", + "@ohif/extension-default": "3.12.0-beta.64", + "@ohif/extension-dicom-pdf": "3.12.0-beta.64", + "@ohif/extension-dicom-video": "3.12.0-beta.64", }, }, "modes/tmtv": { "name": "@ohif/mode-tmtv", - "version": "3.12.0-beta.58", + "version": "3.12.0-beta.67", "dependencies": { "@babel/runtime": "7.28.2", "i18next": "17.3.1", @@ -658,25 +658,25 @@ "webpack-merge": "5.10.0", }, "peerDependencies": { - "@ohif/core": "3.12.0-beta.56", - "@ohif/extension-cornerstone": "3.12.0-beta.56", - "@ohif/extension-cornerstone-dicom-sr": "3.12.0-beta.56", - "@ohif/extension-default": "3.12.0-beta.56", - "@ohif/extension-dicom-pdf": "3.12.0-beta.56", - "@ohif/extension-dicom-video": "3.12.0-beta.56", - "@ohif/extension-measurement-tracking": "3.12.0-beta.56", + "@ohif/core": "3.12.0-beta.64", + "@ohif/extension-cornerstone": "3.12.0-beta.64", + "@ohif/extension-cornerstone-dicom-sr": "3.12.0-beta.64", + "@ohif/extension-default": "3.12.0-beta.64", + "@ohif/extension-dicom-pdf": "3.12.0-beta.64", + "@ohif/extension-dicom-video": "3.12.0-beta.64", + "@ohif/extension-measurement-tracking": "3.12.0-beta.64", }, }, "modes/usAnnotation": { "name": "@ohif/mode-ultrasound-pleura-bline", - "version": "3.12.0-beta.58", + "version": "3.12.0-beta.67", "dependencies": { "@babel/runtime": "7.28.2", - "@cornerstonejs/core": "4.5.5", - "@cornerstonejs/tools": "4.5.5", - "@ohif/core": "3.12.0-beta.56", - "@ohif/extension-cornerstone-dicom-sr": "3.12.0-beta.56", - "@ohif/extension-ultrasound-pleura-bline": "3.12.0-beta.56", + "@cornerstonejs/core": "4.5.13", + "@cornerstonejs/tools": "4.5.13", + "@ohif/core": "3.12.0-beta.64", + "@ohif/extension-cornerstone-dicom-sr": "3.12.0-beta.64", + "@ohif/extension-ultrasound-pleura-bline": "3.12.0-beta.64", "i18next": "17.3.1", }, "devDependencies": { @@ -708,34 +708,34 @@ }, "platform/app": { "name": "@ohif/app", - "version": "3.12.0-beta.58", + "version": "3.12.0-beta.67", "dependencies": { "@babel/runtime": "7.28.2", "@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.7", - "@cornerstonejs/dicom-image-loader": "4.5.5", + "@cornerstonejs/dicom-image-loader": "4.5.13", "@emotion/serialize": "1.3.3", - "@ohif/core": "3.12.0-beta.56", - "@ohif/extension-cornerstone": "3.12.0-beta.56", - "@ohif/extension-cornerstone-dicom-rt": "3.12.0-beta.56", - "@ohif/extension-cornerstone-dicom-seg": "3.12.0-beta.56", - "@ohif/extension-cornerstone-dicom-sr": "3.12.0-beta.56", - "@ohif/extension-default": "3.12.0-beta.56", - "@ohif/extension-dicom-microscopy": "3.12.0-beta.56", - "@ohif/extension-dicom-pdf": "3.12.0-beta.56", - "@ohif/extension-dicom-video": "3.12.0-beta.56", - "@ohif/extension-test": "3.12.0-beta.56", - "@ohif/extension-ultrasound-pleura-bline": "3.12.0-beta.56", - "@ohif/i18n": "3.12.0-beta.56", - "@ohif/mode-basic-dev-mode": "3.12.0-beta.56", - "@ohif/mode-longitudinal": "3.12.0-beta.56", - "@ohif/mode-microscopy": "3.12.0-beta.56", - "@ohif/mode-test": "3.12.0-beta.56", - "@ohif/mode-ultrasound-pleura-bline": "3.12.0-beta.56", - "@ohif/ui": "3.12.0-beta.56", - "@ohif/ui-next": "3.12.0-beta.56", + "@ohif/core": "3.12.0-beta.64", + "@ohif/extension-cornerstone": "3.12.0-beta.64", + "@ohif/extension-cornerstone-dicom-rt": "3.12.0-beta.64", + "@ohif/extension-cornerstone-dicom-seg": "3.12.0-beta.64", + "@ohif/extension-cornerstone-dicom-sr": "3.12.0-beta.64", + "@ohif/extension-default": "3.12.0-beta.64", + "@ohif/extension-dicom-microscopy": "3.12.0-beta.64", + "@ohif/extension-dicom-pdf": "3.12.0-beta.64", + "@ohif/extension-dicom-video": "3.12.0-beta.64", + "@ohif/extension-test": "3.12.0-beta.64", + "@ohif/extension-ultrasound-pleura-bline": "3.12.0-beta.64", + "@ohif/i18n": "3.12.0-beta.64", + "@ohif/mode-basic-dev-mode": "3.12.0-beta.64", + "@ohif/mode-longitudinal": "3.12.0-beta.64", + "@ohif/mode-microscopy": "3.12.0-beta.64", + "@ohif/mode-test": "3.12.0-beta.64", + "@ohif/mode-ultrasound-pleura-bline": "3.12.0-beta.64", + "@ohif/ui": "3.12.0-beta.64", + "@ohif/ui-next": "3.12.0-beta.64", "@svgr/webpack": "8.1.0", "@types/react": "18.3.23", "classnames": "2.5.1", @@ -787,7 +787,7 @@ }, "platform/cli": { "name": "@ohif/cli", - "version": "3.12.0-beta.58", + "version": "3.12.0-beta.67", "bin": { "ohif-cli": "src/index.js", }, @@ -811,7 +811,7 @@ }, "platform/core": { "name": "@ohif/core", - "version": "3.12.0-beta.58", + "version": "3.12.0-beta.67", "dependencies": { "@babel/runtime": "7.28.2", "dcmjs": "0.43.1", @@ -836,16 +836,16 @@ "@cornerstonejs/codec-libjpeg-turbo-8bit": "1.2.2", "@cornerstonejs/codec-openjpeg": "1.2.4", "@cornerstonejs/codec-openjph": "2.4.7", - "@cornerstonejs/core": "4.5.5", - "@cornerstonejs/dicom-image-loader": "4.5.5", - "@ohif/ui": "3.12.0-beta.58", + "@cornerstonejs/core": "4.5.13", + "@cornerstonejs/dicom-image-loader": "4.5.13", + "@ohif/ui": "3.12.0-beta.67", "cornerstone-math": "0.1.9", "dicom-parser": "1.8.21", }, }, "platform/i18n": { "name": "@ohif/i18n", - "version": "3.12.0-beta.58", + "version": "3.12.0-beta.67", "dependencies": { "@babel/runtime": "7.28.2", "i18next-locize-backend": "2.2.2", @@ -870,7 +870,7 @@ }, "platform/ui": { "name": "@ohif/ui", - "version": "3.12.0-beta.58", + "version": "3.12.0-beta.67", "dependencies": { "@testing-library/react": "13.4.0", "browser-detect": "0.2.28", @@ -921,7 +921,7 @@ }, "platform/ui-next": { "name": "@ohif/ui-next", - "version": "3.12.0-beta.58", + "version": "3.12.0-beta.67", "dependencies": { "@radix-ui/react-accordion": "1.2.11", "@radix-ui/react-checkbox": "1.3.2", @@ -1228,9 +1228,9 @@ "@bcoe/v8-coverage": ["@bcoe/v8-coverage@0.2.3", "", {}, "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw=="], - "@cornerstonejs/adapters": ["@cornerstonejs/adapters@4.5.5", "", { "dependencies": { "@babel/runtime-corejs2": "7.26.10", "buffer": "6.0.3", "dcmjs": "0.43.1", "gl-matrix": "3.4.3", "ndarray": "1.0.19" }, "peerDependencies": { "@cornerstonejs/core": "4.5.5", "@cornerstonejs/tools": "4.5.5" } }, "sha512-tZC8ScqmSouWt5/0t9cUqtsSVW5ObhniyuZuF6QZvXOyWU7I4fkmtNX4RtTUi9cvuqoDA0nckejkEQhp5OjKEw=="], + "@cornerstonejs/adapters": ["@cornerstonejs/adapters@4.5.13", "", { "dependencies": { "@babel/runtime-corejs2": "7.26.10", "buffer": "6.0.3", "dcmjs": "0.43.1", "gl-matrix": "3.4.3", "ndarray": "1.0.19" }, "peerDependencies": { "@cornerstonejs/core": "4.5.13", "@cornerstonejs/tools": "4.5.13" } }, "sha512-qWB32zsY4Ets2/si2fUBqHckBZYrdEYSPK/mya3S4+qLdB5KImZZJQYq4aqVg+gRvZc9aHIKVI1jjZCkxdvV0A=="], - "@cornerstonejs/ai": ["@cornerstonejs/ai@4.5.5", "", { "dependencies": { "@babel/runtime-corejs2": "7.26.10", "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": "4.5.5", "@cornerstonejs/tools": "4.5.5" } }, "sha512-31/ARIIr2EyDwyeNsI58XLYpbEikaPqYuR/7tQMFvqwX0plpsaAZx0wQ+ta0YBag9/vAtpuyjg1sGMaqS7v9Yw=="], + "@cornerstonejs/ai": ["@cornerstonejs/ai@4.5.13", "", { "dependencies": { "@babel/runtime-corejs2": "7.26.10", "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": "4.5.13", "@cornerstonejs/tools": "4.5.13" } }, "sha512-5eVrkiUuSWcqc8KOWwXzN/1KwbgVzS/9AZjwZ7GJdFYBmRTOkFVhgKlx86VsXecgzuJ6tUSP72ChyPEDgYuh+g=="], "@cornerstonejs/calculate-suv": ["@cornerstonejs/calculate-suv@1.1.0", "", {}, "sha512-Q9XraiDJif9aMFArD2iEuDO/HXbcRVCqB7KfaHgDrdTTjgDFovS91Psbdim7crypRSvE6dh/+HKeFNHdvNkA6w=="], @@ -1242,15 +1242,15 @@ "@cornerstonejs/codec-openjph": ["@cornerstonejs/codec-openjph@2.4.7", "", {}, "sha512-qvP4q4JDib7mi9r7LqKOwqz7YZ8gjtDX4ZCezeYf8+eb7MBXCz5uXAMeVF3yz9Axw4XiIMdB/pqXkm8tqCl13w=="], - "@cornerstonejs/core": ["@cornerstonejs/core@4.5.5", "", { "dependencies": { "@kitware/vtk.js": "32.12.1", "comlink": "4.4.2", "gl-matrix": "3.4.3", "loglevel": "1.9.2" } }, "sha512-fThmbuCEZosLUf46pNxAj0UiNYWpjKYNAj0pJoOLc6Ck3Q6lzsA4lF7Hv2LT9Ek0P9Hdfjwjjfjm4mkLevmZBg=="], + "@cornerstonejs/core": ["@cornerstonejs/core@4.5.13", "", { "dependencies": { "@kitware/vtk.js": "32.12.1", "comlink": "4.4.2", "gl-matrix": "3.4.3", "loglevel": "1.9.2" } }, "sha512-a/cQ16KNxVW32WdIihAjt/ry5SP+O6ffQ8ecf0iNa/cbqyOuvw+R6xSue2ZcTLHm/vC3R7PaocDdAwuvIEVwKw=="], - "@cornerstonejs/dicom-image-loader": ["@cornerstonejs/dicom-image-loader@4.5.5", "", { "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.7", "comlink": "4.4.2", "dicom-parser": "1.8.21", "jpeg-lossless-decoder-js": "2.1.2", "pako": "2.1.0", "uuid": "9.0.1" }, "peerDependencies": { "@cornerstonejs/core": "4.5.5" } }, "sha512-v6nLkpS8rEFkNK8ROZkKQkiHDhOoGmVvknnKSuK0tWpN3Lpha9tfAfWiZyOJGV/HJcZhmXQcnbk3hR8/QUEs6w=="], + "@cornerstonejs/dicom-image-loader": ["@cornerstonejs/dicom-image-loader@4.5.13", "", { "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.7", "comlink": "4.4.2", "dicom-parser": "1.8.21", "jpeg-lossless-decoder-js": "2.1.2", "pako": "2.1.0", "uuid": "9.0.1" }, "peerDependencies": { "@cornerstonejs/core": "4.5.13" } }, "sha512-2u5yiS3gObKMWAeABhBl9OpWK5fSclMIWjYVgF9bAu9lNIksRkbRj6U+gpcftAKKXF0gW+uecRIiBqFgEcr2eQ=="], - "@cornerstonejs/labelmap-interpolation": ["@cornerstonejs/labelmap-interpolation@4.5.5", "", { "dependencies": { "@itk-wasm/morphological-contour-interpolation": "1.1.0", "itk-wasm": "1.0.0-b.165" }, "peerDependencies": { "@cornerstonejs/core": "4.5.5", "@cornerstonejs/tools": "4.5.5", "@kitware/vtk.js": "32.12.1" } }, "sha512-76z3uL1J/ASS2d0qBApDVq8JQ3S5mXMD+xZhfrrbqPCkk4X9d9UyLyjylxDgFjlE3QRL+l27/nAyn4yshW6wHA=="], + "@cornerstonejs/labelmap-interpolation": ["@cornerstonejs/labelmap-interpolation@4.5.13", "", { "dependencies": { "@itk-wasm/morphological-contour-interpolation": "1.1.0", "itk-wasm": "1.0.0-b.165" }, "peerDependencies": { "@cornerstonejs/core": "4.5.13", "@cornerstonejs/tools": "4.5.13", "@kitware/vtk.js": "32.12.1" } }, "sha512-DbmdJ4jyaJbXaNL3/jVSzA90JHQpV3Q2qsaTTRJoUfVhklgZs64ehyhv5UxR9C5wJoAyiUUGx7zDITX0R0on2w=="], - "@cornerstonejs/polymorphic-segmentation": ["@cornerstonejs/polymorphic-segmentation@4.5.5", "", { "dependencies": { "@icr/polyseg-wasm": "0.4.0" }, "peerDependencies": { "@cornerstonejs/core": "4.5.5", "@cornerstonejs/tools": "4.5.5", "@kitware/vtk.js": "32.12.1" } }, "sha512-KO6nM/NovzYz3txLKlpAciJDUpIQHI9cga1PpvnqtxGMxdLkXOkaKHeeN506qQD9MAGkTqpy2Z6pYflgRG9PYw=="], + "@cornerstonejs/polymorphic-segmentation": ["@cornerstonejs/polymorphic-segmentation@4.5.13", "", { "dependencies": { "@icr/polyseg-wasm": "0.4.0" }, "peerDependencies": { "@cornerstonejs/core": "4.5.13", "@cornerstonejs/tools": "4.5.13", "@kitware/vtk.js": "32.12.1" } }, "sha512-aQTHy2Sz8svoEVJUiK+bbJ9CTPDAly4qScMuzO5hd72MxEzhqcTWACsAIqGP6nlzBSnytQwapB7Xpbmb+N6rwA=="], - "@cornerstonejs/tools": ["@cornerstonejs/tools@4.5.5", "", { "dependencies": { "@types/offscreencanvas": "2019.7.3", "comlink": "4.4.2", "lodash.get": "4.4.2" }, "peerDependencies": { "@cornerstonejs/core": "4.5.5", "@kitware/vtk.js": "32.12.1", "@types/d3-array": "3.2.1", "@types/d3-interpolate": "3.0.4", "d3-array": "3.2.4", "d3-interpolate": "3.0.1", "gl-matrix": "3.4.3" } }, "sha512-IruCR6KWYM4Z1opnPod8bNkEtJnnQyfFXr0ilmRNDNHj6jQ1/uWQQX/Ss+eWnkAALCUYAU1Co/6zWL5Nuowp8A=="], + "@cornerstonejs/tools": ["@cornerstonejs/tools@4.5.13", "", { "dependencies": { "@types/offscreencanvas": "2019.7.3", "comlink": "4.4.2", "lodash.get": "4.4.2" }, "peerDependencies": { "@cornerstonejs/core": "4.5.13", "@kitware/vtk.js": "32.12.1", "@types/d3-array": "3.2.1", "@types/d3-interpolate": "3.0.4", "d3-array": "3.2.4", "d3-interpolate": "3.0.1", "gl-matrix": "3.4.3" } }, "sha512-aAzXwhLc/qNMPQFryu+xJaur9IHKdhxZBDcINLwl0nerMgLpPF2vIbFHvGJQNTl2njzo9Z64MJFDMVnB/rdWtQ=="], "@cspotcode/source-map-support": ["@cspotcode/source-map-support@0.8.1", "", { "dependencies": { "@jridgewell/trace-mapping": "0.3.9" } }, "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw=="], diff --git a/extensions/cornerstone-dicom-pmap/package.json b/extensions/cornerstone-dicom-pmap/package.json index 1361cf634..a1d8b3f39 100644 --- a/extensions/cornerstone-dicom-pmap/package.json +++ b/extensions/cornerstone-dicom-pmap/package.json @@ -46,8 +46,8 @@ }, "dependencies": { "@babel/runtime": "7.28.2", - "@cornerstonejs/adapters": "4.5.5", - "@cornerstonejs/core": "4.5.5", + "@cornerstonejs/adapters": "4.5.13", + "@cornerstonejs/core": "4.5.13", "@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 72d972028..8b9efd10a 100644 --- a/extensions/cornerstone-dicom-seg/package.json +++ b/extensions/cornerstone-dicom-seg/package.json @@ -46,8 +46,8 @@ }, "dependencies": { "@babel/runtime": "7.28.2", - "@cornerstonejs/adapters": "4.5.5", - "@cornerstonejs/core": "4.5.5", + "@cornerstonejs/adapters": "4.5.13", + "@cornerstonejs/core": "4.5.13", "@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 cbb917c29..4a5591e71 100644 --- a/extensions/cornerstone-dicom-sr/package.json +++ b/extensions/cornerstone-dicom-sr/package.json @@ -46,9 +46,9 @@ }, "dependencies": { "@babel/runtime": "7.28.2", - "@cornerstonejs/adapters": "4.5.5", - "@cornerstonejs/core": "4.5.5", - "@cornerstonejs/tools": "4.5.5", + "@cornerstonejs/adapters": "4.5.13", + "@cornerstonejs/core": "4.5.13", + "@cornerstonejs/tools": "4.5.13", "classnames": "2.5.1" } } diff --git a/extensions/cornerstone-dynamic-volume/package.json b/extensions/cornerstone-dynamic-volume/package.json index 28d7e0952..b9de036b2 100644 --- a/extensions/cornerstone-dynamic-volume/package.json +++ b/extensions/cornerstone-dynamic-volume/package.json @@ -42,8 +42,8 @@ }, "dependencies": { "@babel/runtime": "7.28.2", - "@cornerstonejs/core": "4.5.5", - "@cornerstonejs/tools": "4.5.5", + "@cornerstonejs/core": "4.5.13", + "@cornerstonejs/tools": "4.5.13", "classnames": "2.5.1" } } diff --git a/extensions/cornerstone/package.json b/extensions/cornerstone/package.json index 3aa762db7..379a399fe 100644 --- a/extensions/cornerstone/package.json +++ b/extensions/cornerstone/package.json @@ -40,7 +40,7 @@ "@cornerstonejs/codec-libjpeg-turbo-8bit": "1.2.2", "@cornerstonejs/codec-openjpeg": "1.2.4", "@cornerstonejs/codec-openjph": "2.4.7", - "@cornerstonejs/dicom-image-loader": "4.5.5", + "@cornerstonejs/dicom-image-loader": "4.5.13", "@ohif/core": "3.12.0-beta.67", "@ohif/ui": "3.12.0-beta.67", "dcmjs": "0.43.1", @@ -53,12 +53,12 @@ }, "dependencies": { "@babel/runtime": "7.28.2", - "@cornerstonejs/adapters": "4.5.5", - "@cornerstonejs/ai": "4.5.5", - "@cornerstonejs/core": "4.5.5", - "@cornerstonejs/labelmap-interpolation": "4.5.5", - "@cornerstonejs/polymorphic-segmentation": "4.5.5", - "@cornerstonejs/tools": "4.5.5", + "@cornerstonejs/adapters": "4.5.13", + "@cornerstonejs/ai": "4.5.13", + "@cornerstonejs/core": "4.5.13", + "@cornerstonejs/labelmap-interpolation": "4.5.13", + "@cornerstonejs/polymorphic-segmentation": "4.5.13", + "@cornerstonejs/tools": "4.5.13", "@itk-wasm/morphological-contour-interpolation": "1.1.0", "@kitware/vtk.js": "32.12.0", "html2canvas": "1.4.1", diff --git a/extensions/cornerstone/src/commandsModule.ts b/extensions/cornerstone/src/commandsModule.ts index 09b6a1d07..5c45dc5b9 100644 --- a/extensions/cornerstone/src/commandsModule.ts +++ b/extensions/cornerstone/src/commandsModule.ts @@ -266,10 +266,35 @@ function commandsModule({ referencedDisplaySetInstanceUID ); storePositionPresentation(referencedDisplaySet); - return commandsManager.runCommand('loadSegmentationDisplaySetsForViewport', { + + const results = commandsManager.runCommand('loadSegmentationDisplaySetsForViewport', { viewportId, displaySetInstanceUIDs: [referencedDisplaySet.displaySetInstanceUID], }); + + const disableEditing = customizationService.getCustomization( + 'panelSegmentation.disableEditing' + ); + if (disableEditing) { + const segmentationRepresentations = segmentationService.getSegmentationRepresentations( + viewportId, + { + segmentationId: displaySet.displaySetInstanceUID, + } + ); + + segmentationRepresentations.forEach(representation => { + const segmentIndices = Object.keys(representation.segments); + segmentIndices.forEach(segmentIndex => { + segmentationService.setSegmentLocked( + representation.segmentationId, + parseInt(segmentIndex), + true + ); + }); + }); + } + return results; } else if (displaySet.Modality === 'SR') { const results = commandsManager.runCommand('hydrateStructuredReport', { displaySetInstanceUID: displaySet.displaySetInstanceUID, diff --git a/extensions/measurement-tracking/package.json b/extensions/measurement-tracking/package.json index 6bf34e575..466ccb10a 100644 --- a/extensions/measurement-tracking/package.json +++ b/extensions/measurement-tracking/package.json @@ -32,8 +32,8 @@ "start": "yarn run dev" }, "peerDependencies": { - "@cornerstonejs/core": "4.5.5", - "@cornerstonejs/tools": "4.5.5", + "@cornerstonejs/core": "4.5.13", + "@cornerstonejs/tools": "4.5.13", "@ohif/core": "3.12.0-beta.67", "@ohif/extension-cornerstone-dicom-sr": "3.12.0-beta.67", "@ohif/extension-default": "3.12.0-beta.67", diff --git a/extensions/usAnnotation/package.json b/extensions/usAnnotation/package.json index 3eafee0e3..c70079d49 100644 --- a/extensions/usAnnotation/package.json +++ b/extensions/usAnnotation/package.json @@ -42,8 +42,8 @@ }, "dependencies": { "@babel/runtime": "7.28.2", - "@cornerstonejs/core": "4.5.5", - "@cornerstonejs/tools": "4.5.5", + "@cornerstonejs/core": "4.5.13", + "@cornerstonejs/tools": "4.5.13", "@ohif/core": "3.12.0-beta.67", "@ohif/extension-cornerstone": "3.12.0-beta.67", "@ohif/extension-default": "3.12.0-beta.67", diff --git a/modes/usAnnotation/package.json b/modes/usAnnotation/package.json index 4f1916336..c84319170 100644 --- a/modes/usAnnotation/package.json +++ b/modes/usAnnotation/package.json @@ -34,8 +34,8 @@ }, "dependencies": { "@babel/runtime": "7.28.2", - "@cornerstonejs/core": "4.5.5", - "@cornerstonejs/tools": "4.5.5", + "@cornerstonejs/core": "4.5.13", + "@cornerstonejs/tools": "4.5.13", "@ohif/core": "3.12.0-beta.67", "@ohif/extension-cornerstone-dicom-sr": "3.12.0-beta.67", "@ohif/extension-ultrasound-pleura-bline": "3.12.0-beta.67", diff --git a/platform/app/package.json b/platform/app/package.json index ac3ca4518..6b118c276 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.7", - "@cornerstonejs/dicom-image-loader": "4.5.5", + "@cornerstonejs/dicom-image-loader": "4.5.13", "@emotion/serialize": "1.3.3", "@ohif/core": "3.12.0-beta.67", "@ohif/extension-cornerstone": "3.12.0-beta.67", diff --git a/platform/core/package.json b/platform/core/package.json index e609ffabb..f03a436c9 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.7", - "@cornerstonejs/core": "4.5.5", - "@cornerstonejs/dicom-image-loader": "4.5.5", + "@cornerstonejs/core": "4.5.13", + "@cornerstonejs/dicom-image-loader": "4.5.13", "@ohif/ui": "3.12.0-beta.67", "cornerstone-math": "0.1.9", "dicom-parser": "1.8.21" diff --git a/platform/ui-next/src/components/OHIFToolSettings/ToolSettings.tsx b/platform/ui-next/src/components/OHIFToolSettings/ToolSettings.tsx index 27f7cccf7..32df1e89b 100644 --- a/platform/ui-next/src/components/OHIFToolSettings/ToolSettings.tsx +++ b/platform/ui-next/src/components/OHIFToolSettings/ToolSettings.tsx @@ -54,7 +54,10 @@ const renderRangeSetting = option => { key={option.id} >
{option.name}
-
+
{ + const mode = 'viewer'; + await visitStudy(page, studyInstanceUID, mode, 2000); + + await page.getByTestId('side-panel-header-right').click(); + await page.getByTestId('study-browser-thumbnail-no-image').dblclick(); + // Wait for the segmentation to be loaded. + await page.waitForTimeout(5000); + + await page.getByTestId('yes-hydrate-btn').click(); + + // Wait for the segmentation to hydrate. + await page.waitForTimeout(5000); + + const svgPathLocatorPreEdit = viewportSVGPathLocator({ page, viewportId: 'default' }); + + expect( + await svgPathLocatorPreEdit.count(), + 'Expected exactly 1 path element in the viewport' + ).toBe(1); + + const expectedPathCommands = await svgPathLocatorPreEdit.getAttribute('d'); + + // Try to drag one of the edges of the rectangular contour. + await simulateNormalizedDragOnElement({ + locator: svgPathLocatorPreEdit, + start: { x: 0.1, y: 0 }, + end: { x: 0.1, y: -0.2 }, + }); + + const svgPathLocatorPostEdit = viewportSVGPathLocator({ page, viewportId: 'default' }); + + expect( + await svgPathLocatorPostEdit.getAttribute('d'), + 'Expected the path commands to be the same as the pre-edit path commands' + ).toBe(expectedPathCommands); +}); + +test('should not allow contours to be edited when panelSegmentation.disableEditing is true', async ({ + page, +}) => { + const mode = 'segmentation'; + await visitStudy(page, studyInstanceUID, mode, 2000); + + await page.getByTestId('side-panel-header-right').click(); + await page.getByTestId('study-browser-thumbnail-no-image').dblclick(); + // Wait for the segmentation to be loaded. + await page.waitForTimeout(5000); + + // disable editing of segmentations via the customization service + await page.evaluate(() => { + window.services.customizationService.setGlobalCustomization( + 'panelSegmentation.disableEditing', + { + $set: true, + } + ); + }); + + await page.getByTestId('yes-hydrate-btn').click(); + + // Wait for the segmentation to hydrate. + await page.waitForTimeout(5000); + + const svgPathLocatorPreEdit = viewportSVGPathLocator({ page, viewportId: 'default' }); + + expect( + await svgPathLocatorPreEdit.count(), + 'Expected exactly 1 path element in the viewport' + ).toBe(1); + + const expectedPathCommands = await svgPathLocatorPreEdit.getAttribute('d'); + + // Try to drag one of the edges of the rectangular contour. + await simulateNormalizedDragOnElement({ + locator: svgPathLocatorPreEdit, + start: { x: 0.1, y: 0 }, + end: { x: 0.1, y: -0.2 }, + }); + + const svgPathLocatorPostEdit = viewportSVGPathLocator({ page, viewportId: 'default' }); + + expect( + await svgPathLocatorPostEdit.getAttribute('d'), + 'Expected the path commands to be the same as the pre-edit path commands' + ).toBe(expectedPathCommands); +}); + +test('should allow contours to be edited when panelSegmentation.disableEditing is false', async ({ + page, +}) => { + const mode = 'segmentation'; + await visitStudy(page, studyInstanceUID, mode, 2000); + + await page.getByTestId('side-panel-header-right').click(); + await page.getByTestId('study-browser-thumbnail-no-image').dblclick(); + // Wait for the segmentation to be loaded. + await page.waitForTimeout(5000); + + // disable editing of segmentations via the customization service + await page.evaluate(() => { + window.services.customizationService.setGlobalCustomization( + 'panelSegmentation.disableEditing', + { + $set: false, + } + ); + }); + + await page.getByTestId('yes-hydrate-btn').click(); + + // Wait for the segmentation to hydrate. + await page.waitForTimeout(5000); + + const svgPathLocatorPreEdit = viewportSVGPathLocator({ page, viewportId: 'default' }); + + expect( + await svgPathLocatorPreEdit.count(), + 'Expected exactly 1 path element in the viewport' + ).toBe(1); + + const preEditPathCommands = await svgPathLocatorPreEdit.getAttribute('d'); + + // Try to drag one of the edges of the rectangular contour. + await simulateNormalizedDragOnElement({ + locator: svgPathLocatorPreEdit, + start: { x: 0.1, y: 0 }, + end: { x: 0.1, y: -0.2 }, + }); + + const svgPathLocatorPostEdit = viewportSVGPathLocator({ page, viewportId: 'default' }); + + expect( + await svgPathLocatorPostEdit.getAttribute('d'), + 'Not expecting the path commands to be the same as the pre-edit path commands' + ).not.toBe(preEditPathCommands); +}); diff --git a/tests/LabelMapSegLocking.spec.ts b/tests/LabelMapSegLocking.spec.ts new file mode 100644 index 000000000..418a7989f --- /dev/null +++ b/tests/LabelMapSegLocking.spec.ts @@ -0,0 +1,118 @@ +import { test } from 'playwright-test-coverage'; +import { visitStudy, checkForScreenshot, screenShotPaths } from './utils'; +import { press } from './utils/keyboardUtils'; +import { simulateNormalizedDragOnElement } from './utils/simulateDragOnElement'; +import { viewportLocator } from './utils/locators'; + +test.beforeEach(async ({ page }) => { + const studyInstanceUID = '1.3.6.1.4.1.14519.5.2.1.256467663913010332776401703474716742458'; + const mode = 'segmentation'; + await visitStudy(page, studyInstanceUID, mode, 2000); +}); + +test('should prevent editing of label map segmentations when panelSegmentation.disableEditing is true', async ({ + page, +}) => { + // disable editing of segmentations via the customization service + await page.evaluate(() => { + window.services.customizationService.setGlobalCustomization( + 'panelSegmentation.disableEditing', + { + $set: true, + } + ); + }); + await page.getByTestId('study-browser-thumbnail-no-image').dblclick(); + // Wait for the segmentation to be loaded. + await page.waitForTimeout(5000); + + await page.getByTestId('yes-hydrate-btn').click(); + + // Wait for the segmentation to hydrate. + await page.waitForTimeout(5000); + + // navigate to the 12th image and ensure the correct overlay is displayed + await press({ page, key: 'ArrowDown', nTimes: 11 }); + + await checkForScreenshot(page, page, screenShotPaths.labelMapSegLocking.globalLockedSegPreEdit); + + // Attempt to erase the segmentations. + await page.getByTestId('Eraser-btn').click(); + + // Use the largest eraser radius to help ensure the entire image is erased. + await page.locator(`css=div[data-cy="eraser-radius"] input`).fill('1000'); + + // Attempt to erase the segmentations by dragging the eraser tool across the image several times. + await simulateNormalizedDragOnElement({ + locator: viewportLocator({ page, viewportId: 'default' }), + start: { x: 0.01, y: 0.25 }, + end: { x: 1.0, y: 0.25 }, + }); + await simulateNormalizedDragOnElement({ + locator: viewportLocator({ page, viewportId: 'default' }), + start: { x: 0.01, y: 0.5 }, + end: { x: 1.0, y: 0.5 }, + }); + await simulateNormalizedDragOnElement({ + locator: viewportLocator({ page, viewportId: 'default' }), + start: { x: 0.01, y: 0.75 }, + end: { x: 1.0, y: 0.75 }, + }); + + await checkForScreenshot(page, page, screenShotPaths.labelMapSegLocking.globalLockedSegPostEdit); +}); + +test('should allow editing of label map segmentations when panelSegmentation.disableEditing is false', async ({ + page, +}) => { + // disable editing of segmentations via the customization service + await page.evaluate(() => { + window.services.customizationService.setGlobalCustomization( + 'panelSegmentation.disableEditing', + { + $set: false, + } + ); + }); + await page.getByTestId('study-browser-thumbnail-no-image').dblclick(); + // Wait for the segmentation to be loaded. + await page.waitForTimeout(5000); + + await page.getByTestId('yes-hydrate-btn').click(); + // Wait for the segmentation to hydrate. + await page.waitForTimeout(5000); + + // navigate to the 12th image and ensure the correct overlay is displayed + await press({ page, key: 'ArrowDown', nTimes: 11 }); + + await checkForScreenshot(page, page, screenShotPaths.labelMapSegLocking.globalUnlockedSegPreEdit); + + // Attempt to erase the segmentations. + await page.getByTestId('Eraser-btn').click(); + + // Use the largest eraser radius to help ensure the eraser passes over the entire image. + await page.locator(`css=div[data-cy="eraser-radius"] input`).fill('1000'); + + // Attempt to erase the segmentations by dragging the eraser tool across the image several times. + await simulateNormalizedDragOnElement({ + locator: viewportLocator({ page, viewportId: 'default' }), + start: { x: 0.01, y: 0.25 }, + end: { x: 1.0, y: 0.25 }, + }); + await simulateNormalizedDragOnElement({ + locator: viewportLocator({ page, viewportId: 'default' }), + start: { x: 0.01, y: 0.5 }, + end: { x: 1.0, y: 0.5 }, + }); + await simulateNormalizedDragOnElement({ + locator: viewportLocator({ page, viewportId: 'default' }), + start: { x: 0.01, y: 0.75 }, + end: { x: 1.0, y: 0.75 }, + }); + + await checkForScreenshot( + page, + page, + screenShotPaths.labelMapSegLocking.globalUnlockedSegPostEdit + ); +}); diff --git a/tests/screenshots/chromium/LabelMapSegLocking.spec.ts/lockedSegPostEdit.png b/tests/screenshots/chromium/LabelMapSegLocking.spec.ts/lockedSegPostEdit.png new file mode 100644 index 000000000..aaff2bf14 Binary files /dev/null and b/tests/screenshots/chromium/LabelMapSegLocking.spec.ts/lockedSegPostEdit.png differ diff --git a/tests/screenshots/chromium/LabelMapSegLocking.spec.ts/lockedSegPreEdit.png b/tests/screenshots/chromium/LabelMapSegLocking.spec.ts/lockedSegPreEdit.png new file mode 100644 index 000000000..511e7bdcd Binary files /dev/null and b/tests/screenshots/chromium/LabelMapSegLocking.spec.ts/lockedSegPreEdit.png differ diff --git a/tests/screenshots/chromium/LabelMapSegLocking.spec.ts/unlockedSegPostEdit.png b/tests/screenshots/chromium/LabelMapSegLocking.spec.ts/unlockedSegPostEdit.png new file mode 100644 index 000000000..18e043244 Binary files /dev/null and b/tests/screenshots/chromium/LabelMapSegLocking.spec.ts/unlockedSegPostEdit.png differ diff --git a/tests/screenshots/chromium/LabelMapSegLocking.spec.ts/unlockedSegPreEdit.png b/tests/screenshots/chromium/LabelMapSegLocking.spec.ts/unlockedSegPreEdit.png new file mode 100644 index 000000000..18fd14395 Binary files /dev/null and b/tests/screenshots/chromium/LabelMapSegLocking.spec.ts/unlockedSegPreEdit.png differ diff --git a/tests/utils/locators.ts b/tests/utils/locators.ts index 58cb29cbe..00f2ca86b 100644 --- a/tests/utils/locators.ts +++ b/tests/utils/locators.ts @@ -9,3 +9,23 @@ export const viewportLocator = ({ }): Locator => { return page.locator(`css=div[data-viewportid="${viewportId}"]`); }; + +export const viewportSVGLocator = ({ + page, + viewportId, +}: { + page: Page; + viewportId: string; +}): Locator => { + return page.locator(`css=div[data-viewportid="${viewportId}"] svg`); +}; + +export const viewportSVGPathLocator = ({ + page, + viewportId, +}: { + page: Page; + viewportId: string; +}): Locator => { + return page.locator(`css=div[data-viewportid="${viewportId}"] svg path`); +}; diff --git a/tests/utils/screenShotPaths.ts b/tests/utils/screenShotPaths.ts index 4a8b0e072..5c005d468 100644 --- a/tests/utils/screenShotPaths.ts +++ b/tests/utils/screenShotPaths.ts @@ -26,6 +26,12 @@ const screenShotPaths = { ellipse: { ellipseDisplayedCorrectly: 'ellipseDisplayedCorrectly.png', }, + labelMapSegLocking: { + globalLockedSegPreEdit: 'lockedSegPreEdit.png', + globalLockedSegPostEdit: 'lockedSegPostEdit.png', + globalUnlockedSegPreEdit: 'unlockedSegPreEdit.png', + globalUnlockedSegPostEdit: 'unlockedSegPostEdit.png', + }, length: { lengthDisplayedCorrectly: 'lengthDisplayedCorrectly.png', }, diff --git a/tests/utils/simulateDragOnElement.ts b/tests/utils/simulateDragOnElement.ts new file mode 100644 index 000000000..3a57e00fe --- /dev/null +++ b/tests/utils/simulateDragOnElement.ts @@ -0,0 +1,67 @@ +import { Locator } from 'playwright'; + +/** + * Simulates a drag operation on an element using normalized coordinates. + * + * @param locator - The locator to drag on. + * @param start - The start point with x and y coordinates, normalized to the element's bounding box. + * @param end - The end point with x and y coordinates, normalized to the element's bounding box. + * @param button - The mouse button to use for the drag (default is 'left'). + * @param delay - Milliseconds between steps (default is 50). + * @param steps - Number of intermediate positions for smooth dragging (default is 5). + */ +export async function simulateNormalizedDragOnElement({ + locator, + start, + end, + button = 'left', + delay = 50, + steps = 10, +}: { + locator: Locator; + start: { x: number; y: number }; + end: { x: number; y: number }; + button?: 'left' | 'right' | 'middle'; + delay?: number; + steps?: number; +}) { + const bBox = await locator.boundingBox(); + if (!bBox) { + throw new Error('Element bounding box not found'); + } + + const startPosition = { + x: bBox.x + start.x * bBox.width, + y: bBox.y + start.y * bBox.height, + }; + const endPosition = { + x: bBox.x + end.x * bBox.width, + y: bBox.y + end.y * bBox.height, + }; + + // Get the page from the locator context + const page = locator.page(); + + page.mouse.move(startPosition.x, startPosition.y); + + // Start drag + await page.mouse.down({ button }); + + // Calculate intermediate positions for smooth dragging + const deltaX = (endPosition.x - startPosition.x) / steps; + const deltaY = (endPosition.y - startPosition.y) / steps; + + // Move through intermediate positions + for (let i = 1; i <= steps; i++) { + const currentX = startPosition.x + deltaX * i; + const currentY = startPosition.y + deltaY * i; + // Add delay if specified + if (delay > 0) { + await page.waitForTimeout(delay); + } + await page.mouse.move(currentX, currentY); + } + + // End drag + await page.mouse.up({ button }); +} diff --git a/yarn.lock b/yarn.lock index 6b96bf97c..3f54af43d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1280,10 +1280,10 @@ resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== -"@cornerstonejs/adapters@4.5.5": - version "4.5.5" - resolved "https://registry.yarnpkg.com/@cornerstonejs/adapters/-/adapters-4.5.5.tgz#c1efbd5fb9a744ffd7034453ca2d32b754e6b4fc" - integrity sha512-tZC8ScqmSouWt5/0t9cUqtsSVW5ObhniyuZuF6QZvXOyWU7I4fkmtNX4RtTUi9cvuqoDA0nckejkEQhp5OjKEw== +"@cornerstonejs/adapters@4.5.13": + version "4.5.13" + resolved "https://registry.yarnpkg.com/@cornerstonejs/adapters/-/adapters-4.5.13.tgz#432a5c2a3131ab0ded4a36efebbf971ce3d71e55" + integrity sha512-qWB32zsY4Ets2/si2fUBqHckBZYrdEYSPK/mya3S4+qLdB5KImZZJQYq4aqVg+gRvZc9aHIKVI1jjZCkxdvV0A== dependencies: "@babel/runtime-corejs2" "7.26.10" buffer "6.0.3" @@ -1291,10 +1291,10 @@ gl-matrix "3.4.3" ndarray "1.0.19" -"@cornerstonejs/ai@4.5.5": - version "4.5.5" - resolved "https://registry.yarnpkg.com/@cornerstonejs/ai/-/ai-4.5.5.tgz#1fb0dab8dcc4f723b8887d8d6c2d3c412549847f" - integrity sha512-31/ARIIr2EyDwyeNsI58XLYpbEikaPqYuR/7tQMFvqwX0plpsaAZx0wQ+ta0YBag9/vAtpuyjg1sGMaqS7v9Yw== +"@cornerstonejs/ai@4.5.13": + version "4.5.13" + resolved "https://registry.yarnpkg.com/@cornerstonejs/ai/-/ai-4.5.13.tgz#d2d662344266d0957bd90d154d94113b83a6633d" + integrity sha512-5eVrkiUuSWcqc8KOWwXzN/1KwbgVzS/9AZjwZ7GJdFYBmRTOkFVhgKlx86VsXecgzuJ6tUSP72ChyPEDgYuh+g== dependencies: "@babel/runtime-corejs2" "7.26.10" buffer "6.0.3" @@ -1330,20 +1330,20 @@ resolved "https://registry.yarnpkg.com/@cornerstonejs/codec-openjph/-/codec-openjph-2.4.7.tgz#784394d05d8cf735640e9c3baa206535ee8e0376" integrity sha512-qvP4q4JDib7mi9r7LqKOwqz7YZ8gjtDX4ZCezeYf8+eb7MBXCz5uXAMeVF3yz9Axw4XiIMdB/pqXkm8tqCl13w== -"@cornerstonejs/core@4.5.5": - version "4.5.5" - resolved "https://registry.yarnpkg.com/@cornerstonejs/core/-/core-4.5.5.tgz#0fe82a443810105c742cbc4ed5a8f8f26b4535f9" - integrity sha512-fThmbuCEZosLUf46pNxAj0UiNYWpjKYNAj0pJoOLc6Ck3Q6lzsA4lF7Hv2LT9Ek0P9Hdfjwjjfjm4mkLevmZBg== +"@cornerstonejs/core@4.5.13": + version "4.5.13" + resolved "https://registry.yarnpkg.com/@cornerstonejs/core/-/core-4.5.13.tgz#c11ea09bf97ef5af2d85b2569dac3a81233e1143" + integrity sha512-a/cQ16KNxVW32WdIihAjt/ry5SP+O6ffQ8ecf0iNa/cbqyOuvw+R6xSue2ZcTLHm/vC3R7PaocDdAwuvIEVwKw== dependencies: "@kitware/vtk.js" "32.12.1" comlink "4.4.2" gl-matrix "3.4.3" loglevel "1.9.2" -"@cornerstonejs/dicom-image-loader@4.5.5": - version "4.5.5" - resolved "https://registry.yarnpkg.com/@cornerstonejs/dicom-image-loader/-/dicom-image-loader-4.5.5.tgz#441509fa5173f3ee5e7253d741ecca8e718d2f78" - integrity sha512-v6nLkpS8rEFkNK8ROZkKQkiHDhOoGmVvknnKSuK0tWpN3Lpha9tfAfWiZyOJGV/HJcZhmXQcnbk3hR8/QUEs6w== +"@cornerstonejs/dicom-image-loader@4.5.13": + version "4.5.13" + resolved "https://registry.yarnpkg.com/@cornerstonejs/dicom-image-loader/-/dicom-image-loader-4.5.13.tgz#f79253a818fc31659c9803a35fdda4d5a3eeab84" + integrity sha512-2u5yiS3gObKMWAeABhBl9OpWK5fSclMIWjYVgF9bAu9lNIksRkbRj6U+gpcftAKKXF0gW+uecRIiBqFgEcr2eQ== dependencies: "@cornerstonejs/codec-charls" "1.2.3" "@cornerstonejs/codec-libjpeg-turbo-8bit" "1.2.2" @@ -1355,25 +1355,25 @@ pako "2.1.0" uuid "9.0.1" -"@cornerstonejs/labelmap-interpolation@4.5.5": - version "4.5.5" - resolved "https://registry.yarnpkg.com/@cornerstonejs/labelmap-interpolation/-/labelmap-interpolation-4.5.5.tgz#6d92183e647442966983df56cf371e1e84ad2dc9" - integrity sha512-76z3uL1J/ASS2d0qBApDVq8JQ3S5mXMD+xZhfrrbqPCkk4X9d9UyLyjylxDgFjlE3QRL+l27/nAyn4yshW6wHA== +"@cornerstonejs/labelmap-interpolation@4.5.13": + version "4.5.13" + resolved "https://registry.yarnpkg.com/@cornerstonejs/labelmap-interpolation/-/labelmap-interpolation-4.5.13.tgz#a84cffd2ec132444957229495fc356bd5e827894" + integrity sha512-DbmdJ4jyaJbXaNL3/jVSzA90JHQpV3Q2qsaTTRJoUfVhklgZs64ehyhv5UxR9C5wJoAyiUUGx7zDITX0R0on2w== dependencies: "@itk-wasm/morphological-contour-interpolation" "1.1.0" itk-wasm "1.0.0-b.165" -"@cornerstonejs/polymorphic-segmentation@4.5.5": - version "4.5.5" - resolved "https://registry.yarnpkg.com/@cornerstonejs/polymorphic-segmentation/-/polymorphic-segmentation-4.5.5.tgz#c700f76748aa88e8fad6c8d922736d8c143c6109" - integrity sha512-KO6nM/NovzYz3txLKlpAciJDUpIQHI9cga1PpvnqtxGMxdLkXOkaKHeeN506qQD9MAGkTqpy2Z6pYflgRG9PYw== +"@cornerstonejs/polymorphic-segmentation@4.5.13": + version "4.5.13" + resolved "https://registry.yarnpkg.com/@cornerstonejs/polymorphic-segmentation/-/polymorphic-segmentation-4.5.13.tgz#5ddedb7b290213b6012ee65804523306a8d79807" + integrity sha512-aQTHy2Sz8svoEVJUiK+bbJ9CTPDAly4qScMuzO5hd72MxEzhqcTWACsAIqGP6nlzBSnytQwapB7Xpbmb+N6rwA== dependencies: "@icr/polyseg-wasm" "0.4.0" -"@cornerstonejs/tools@4.5.5": - version "4.5.5" - resolved "https://registry.yarnpkg.com/@cornerstonejs/tools/-/tools-4.5.5.tgz#4b2e519873211298f4d82020922d6d363180693d" - integrity sha512-IruCR6KWYM4Z1opnPod8bNkEtJnnQyfFXr0ilmRNDNHj6jQ1/uWQQX/Ss+eWnkAALCUYAU1Co/6zWL5Nuowp8A== +"@cornerstonejs/tools@4.5.13": + version "4.5.13" + resolved "https://registry.yarnpkg.com/@cornerstonejs/tools/-/tools-4.5.13.tgz#b4d09fca3e0d56792218935f40c480eeb1142131" + integrity sha512-aAzXwhLc/qNMPQFryu+xJaur9IHKdhxZBDcINLwl0nerMgLpPF2vIbFHvGJQNTl2njzo9Z64MJFDMVnB/rdWtQ== dependencies: "@types/offscreencanvas" "2019.7.3" comlink "4.4.2"