From 24567c4e92c404ba210f25e91ac23a2e7a228a54 Mon Sep 17 00:00:00 2001 From: Bill Wallace Date: Fri, 28 Feb 2025 14:16:39 -0500 Subject: [PATCH] fix: Cornerstone3D 3.0 (#4816) Co-authored-by: sedghi --- babel.config.js | 2 - bun.lock | 318 +++++++++--------- .../cornerstone-dicom-pmap/package.json | 4 +- extensions/cornerstone-dicom-seg/package.json | 4 +- .../src/commandsModule.ts | 6 +- extensions/cornerstone-dicom-sr/package.json | 6 +- .../OHIFCornerstoneSRMeasurementViewport.tsx | 18 +- .../src/utils/hydrateStructuredReport.ts | 62 +--- .../src/utils/isRehydratable.js | 60 ---- .../src/utils/isRehydratable.ts | 41 +++ .../cornerstone-dynamic-volume/package.json | 4 +- extensions/cornerstone/package.json | 10 +- .../cornerstone/src/initCornerstoneTools.js | 7 +- .../ArrowAnnotate.ts | 5 +- extensions/measurement-tracking/package.json | 4 +- .../TrackedMeasurementsContext.tsx | 9 + modes/basic-test-mode/src/index.ts | 1 - modes/segmentation/src/initToolGroups.ts | 11 +- modes/tmtv/src/initToolGroups.js | 11 +- platform/app/package.json | 2 +- platform/core/package.json | 2 +- .../ui-next/src/components/Icons/Icons.tsx | 3 +- .../components/Icons/Sources/StatusAlert.tsx | 36 ++ .../components/Icons/Sources/StatusError.tsx | 1 + yarn.lock | 41 ++- 25 files changed, 326 insertions(+), 342 deletions(-) delete mode 100644 extensions/cornerstone-dicom-sr/src/utils/isRehydratable.js create mode 100644 extensions/cornerstone-dicom-sr/src/utils/isRehydratable.ts create mode 100644 platform/ui-next/src/components/Icons/Sources/StatusAlert.tsx diff --git a/babel.config.js b/babel.config.js index aaf2f30ea..29ad6d6d7 100644 --- a/babel.config.js +++ b/babel.config.js @@ -1,6 +1,4 @@ // https://babeljs.io/docs/en/options#babelrcroots -const { extendDefaultPlugins } = require('svgo'); - module.exports = { babelrcRoots: ['./platform/*', './extensions/*', './modes/*'], presets: ['@babel/preset-env', '@babel/preset-react', '@babel/preset-typescript'], diff --git a/bun.lock b/bun.lock index c877b6361..3b2c9a7b0 100644 --- a/bun.lock +++ b/bun.lock @@ -32,7 +32,7 @@ }, "addOns/externals/devDependencies": { "name": "@externals/devDependencies", - "version": "3.10.0-beta.108", + "version": "3.10.0-beta.113", "dependencies": { "@babel/runtime": "^7.20.13", "@kitware/vtk.js": "32.1.1", @@ -120,20 +120,20 @@ }, "addOns/externals/dicom-microscopy-viewer": { "name": "@externals/dicom-microscopy-viewer", - "version": "3.10.0-beta.108", + "version": "3.10.0-beta.113", "dependencies": { "dicom-microscopy-viewer": "^0.46.1", }, }, "extensions/cornerstone": { "name": "@ohif/extension-cornerstone", - "version": "3.10.0-beta.108", + "version": "3.10.0-beta.113", "dependencies": { "@babel/runtime": "^7.20.13", - "@cornerstonejs/adapters": "^2.19.14", - "@cornerstonejs/core": "^2.19.14", - "@cornerstonejs/tools": "^2.19.14", - "@icr/polyseg-wasm": "^0.4.0", + "@cornerstonejs/adapters": "^3.0.1", + "@cornerstonejs/core": "^3.0.1", + "@cornerstonejs/polymorphic-segmentation": "^3.0.1", + "@cornerstonejs/tools": "^3.0.1", "@itk-wasm/morphological-contour-interpolation": "1.1.0", "@kitware/vtk.js": "32.1.1", "html2canvas": "^1.4.1", @@ -150,9 +150,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": "^2.19.14", - "@ohif/core": "3.10.0-beta.108", - "@ohif/ui": "3.10.0-beta.108", + "@cornerstonejs/dicom-image-loader": "^3.0.1", + "@ohif/core": "3.10.0-beta.113", + "@ohif/ui": "3.10.0-beta.113", "dcmjs": "*", "dicom-parser": "^1.8.21", "hammerjs": "^2.0.8", @@ -164,19 +164,19 @@ }, "extensions/cornerstone-dicom-pmap": { "name": "@ohif/extension-cornerstone-dicom-pmap", - "version": "3.10.0-beta.108", + "version": "3.10.0-beta.113", "dependencies": { "@babel/runtime": "^7.20.13", - "@cornerstonejs/adapters": "^2.19.14", - "@cornerstonejs/core": "^2.19.14", + "@cornerstonejs/adapters": "^3.0.1", + "@cornerstonejs/core": "^3.0.1", "@kitware/vtk.js": "32.1.1", "react-color": "^2.19.3", }, "peerDependencies": { - "@ohif/core": "3.10.0-beta.108", - "@ohif/extension-cornerstone": "3.10.0-beta.108", - "@ohif/extension-default": "3.10.0-beta.108", - "@ohif/i18n": "3.10.0-beta.108", + "@ohif/core": "3.10.0-beta.113", + "@ohif/extension-cornerstone": "3.10.0-beta.113", + "@ohif/extension-default": "3.10.0-beta.113", + "@ohif/i18n": "3.10.0-beta.113", "prop-types": "^15.6.2", "react": "^18.3.1", "react-dom": "^18.3.1", @@ -187,16 +187,16 @@ }, "extensions/cornerstone-dicom-rt": { "name": "@ohif/extension-cornerstone-dicom-rt", - "version": "3.10.0-beta.108", + "version": "3.10.0-beta.113", "dependencies": { "@babel/runtime": "^7.20.13", "react-color": "^2.19.3", }, "peerDependencies": { - "@ohif/core": "3.10.0-beta.108", - "@ohif/extension-cornerstone": "3.10.0-beta.108", - "@ohif/extension-default": "3.10.0-beta.108", - "@ohif/i18n": "3.10.0-beta.108", + "@ohif/core": "3.10.0-beta.113", + "@ohif/extension-cornerstone": "3.10.0-beta.113", + "@ohif/extension-default": "3.10.0-beta.113", + "@ohif/i18n": "3.10.0-beta.113", "prop-types": "^15.6.2", "react": "^18.3.1", "react-dom": "^18.3.1", @@ -207,19 +207,19 @@ }, "extensions/cornerstone-dicom-seg": { "name": "@ohif/extension-cornerstone-dicom-seg", - "version": "3.10.0-beta.108", + "version": "3.10.0-beta.113", "dependencies": { "@babel/runtime": "^7.20.13", - "@cornerstonejs/adapters": "^2.19.14", - "@cornerstonejs/core": "^2.19.14", + "@cornerstonejs/adapters": "^3.0.1", + "@cornerstonejs/core": "^3.0.1", "@kitware/vtk.js": "32.1.1", "react-color": "^2.19.3", }, "peerDependencies": { - "@ohif/core": "3.10.0-beta.108", - "@ohif/extension-cornerstone": "3.10.0-beta.108", - "@ohif/extension-default": "3.10.0-beta.108", - "@ohif/i18n": "3.10.0-beta.108", + "@ohif/core": "3.10.0-beta.113", + "@ohif/extension-cornerstone": "3.10.0-beta.113", + "@ohif/extension-default": "3.10.0-beta.113", + "@ohif/i18n": "3.10.0-beta.113", "prop-types": "^15.6.2", "react": "^18.3.1", "react-dom": "^18.3.1", @@ -230,19 +230,19 @@ }, "extensions/cornerstone-dicom-sr": { "name": "@ohif/extension-cornerstone-dicom-sr", - "version": "3.10.0-beta.108", + "version": "3.10.0-beta.113", "dependencies": { "@babel/runtime": "^7.20.13", - "@cornerstonejs/adapters": "^2.19.14", - "@cornerstonejs/core": "^2.19.14", - "@cornerstonejs/tools": "^2.19.14", + "@cornerstonejs/adapters": "^3.0.1", + "@cornerstonejs/core": "^3.0.1", + "@cornerstonejs/tools": "^3.0.1", "classnames": "^2.3.2", }, "peerDependencies": { - "@ohif/core": "3.10.0-beta.108", - "@ohif/extension-cornerstone": "3.10.0-beta.108", - "@ohif/extension-measurement-tracking": "3.10.0-beta.108", - "@ohif/ui": "3.10.0-beta.108", + "@ohif/core": "3.10.0-beta.113", + "@ohif/extension-cornerstone": "3.10.0-beta.113", + "@ohif/extension-measurement-tracking": "3.10.0-beta.113", + "@ohif/ui": "3.10.0-beta.113", "dcmjs": "*", "dicom-parser": "^1.8.9", "hammerjs": "^2.0.8", @@ -252,19 +252,19 @@ }, "extensions/cornerstone-dynamic-volume": { "name": "@ohif/extension-cornerstone-dynamic-volume", - "version": "3.10.0-beta.108", + "version": "3.10.0-beta.113", "dependencies": { "@babel/runtime": "^7.20.13", - "@cornerstonejs/core": "^2.19.14", - "@cornerstonejs/tools": "^2.19.14", + "@cornerstonejs/core": "^3.0.1", + "@cornerstonejs/tools": "^3.0.1", "classnames": "^2.3.2", }, "peerDependencies": { - "@ohif/core": "3.10.0-beta.108", - "@ohif/extension-cornerstone": "3.10.0-beta.108", - "@ohif/extension-default": "3.10.0-beta.108", - "@ohif/i18n": "3.10.0-beta.108", - "@ohif/ui": "3.10.0-beta.108", + "@ohif/core": "3.10.0-beta.113", + "@ohif/extension-cornerstone": "3.10.0-beta.113", + "@ohif/extension-default": "3.10.0-beta.113", + "@ohif/i18n": "3.10.0-beta.113", + "@ohif/ui": "3.10.0-beta.113", "dcmjs": "*", "dicom-parser": "^1.8.21", "hammerjs": "^2.0.8", @@ -274,7 +274,7 @@ }, "extensions/default": { "name": "@ohif/extension-default", - "version": "3.10.0-beta.108", + "version": "3.10.0-beta.113", "dependencies": { "@babel/runtime": "^7.20.13", "@cornerstonejs/calculate-suv": "^1.1.0", @@ -282,8 +282,8 @@ "lodash.uniqby": "^4.7.0", }, "peerDependencies": { - "@ohif/core": "3.10.0-beta.108", - "@ohif/i18n": "3.10.0-beta.108", + "@ohif/core": "3.10.0-beta.113", + "@ohif/i18n": "3.10.0-beta.113", "dcmjs": "*", "dicomweb-client": "^0.10.4", "prop-types": "^15.6.2", @@ -297,7 +297,7 @@ }, "extensions/dicom-microscopy": { "name": "@ohif/extension-dicom-microscopy", - "version": "3.10.0-beta.108", + "version": "3.10.0-beta.113", "dependencies": { "@babel/runtime": "^7.20.13", "@cornerstonejs/codec-charls": "^1.2.3", @@ -308,10 +308,10 @@ "mathjs": "^12.4.2", }, "peerDependencies": { - "@ohif/core": "3.10.0-beta.108", - "@ohif/extension-default": "3.10.0-beta.108", - "@ohif/i18n": "3.10.0-beta.108", - "@ohif/ui": "3.10.0-beta.108", + "@ohif/core": "3.10.0-beta.113", + "@ohif/extension-default": "3.10.0-beta.113", + "@ohif/i18n": "3.10.0-beta.113", + "@ohif/ui": "3.10.0-beta.113", "prop-types": "^15.6.2", "react": "^18.3.1", "react-dom": "^18.3.1", @@ -322,14 +322,14 @@ }, "extensions/dicom-pdf": { "name": "@ohif/extension-dicom-pdf", - "version": "3.10.0-beta.108", + "version": "3.10.0-beta.113", "dependencies": { "@babel/runtime": "^7.20.13", "classnames": "^2.3.2", }, "peerDependencies": { - "@ohif/core": "3.10.0-beta.108", - "@ohif/ui": "3.10.0-beta.108", + "@ohif/core": "3.10.0-beta.113", + "@ohif/ui": "3.10.0-beta.113", "dcmjs": "*", "dicom-parser": "^1.8.9", "hammerjs": "^2.0.8", @@ -339,14 +339,14 @@ }, "extensions/dicom-video": { "name": "@ohif/extension-dicom-video", - "version": "3.10.0-beta.108", + "version": "3.10.0-beta.113", "dependencies": { "@babel/runtime": "^7.20.13", "classnames": "^2.3.2", }, "peerDependencies": { - "@ohif/core": "3.10.0-beta.108", - "@ohif/ui": "3.10.0-beta.108", + "@ohif/core": "3.10.0-beta.113", + "@ohif/ui": "3.10.0-beta.113", "dcmjs": "*", "dicom-parser": "^1.8.9", "hammerjs": "^2.0.8", @@ -356,20 +356,20 @@ }, "extensions/measurement-tracking": { "name": "@ohif/extension-measurement-tracking", - "version": "3.10.0-beta.108", + "version": "3.10.0-beta.113", "dependencies": { "@babel/runtime": "^7.20.13", - "@ohif/ui": "3.10.0-beta.108", + "@ohif/ui": "3.10.0-beta.113", "@xstate/react": "^3.2.2", "xstate": "^4.10.0", }, "peerDependencies": { - "@cornerstonejs/core": "^2.19.14", - "@cornerstonejs/tools": "^2.19.14", - "@ohif/core": "3.10.0-beta.108", - "@ohif/extension-cornerstone-dicom-sr": "3.10.0-beta.108", - "@ohif/extension-default": "3.10.0-beta.108", - "@ohif/ui": "3.10.0-beta.108", + "@cornerstonejs/core": "^3.0.1", + "@cornerstonejs/tools": "^3.0.1", + "@ohif/core": "3.10.0-beta.113", + "@ohif/extension-cornerstone-dicom-sr": "3.10.0-beta.113", + "@ohif/extension-default": "3.10.0-beta.113", + "@ohif/ui": "3.10.0-beta.113", "classnames": "^2.3.2", "dcmjs": "*", "lodash.debounce": "^4.0.8", @@ -382,14 +382,14 @@ }, "extensions/test-extension": { "name": "@ohif/extension-test", - "version": "3.10.0-beta.108", + "version": "3.10.0-beta.113", "dependencies": { "@babel/runtime": "^7.20.13", "classnames": "^2.3.2", }, "peerDependencies": { - "@ohif/core": "3.10.0-beta.108", - "@ohif/ui": "3.10.0-beta.108", + "@ohif/core": "3.10.0-beta.113", + "@ohif/ui": "3.10.0-beta.113", "dcmjs": "0.38.0", "dicom-parser": "^1.8.9", "hammerjs": "^2.0.8", @@ -399,14 +399,14 @@ }, "extensions/tmtv": { "name": "@ohif/extension-tmtv", - "version": "3.10.0-beta.108", + "version": "3.10.0-beta.113", "dependencies": { "@babel/runtime": "^7.20.13", "classnames": "^2.3.2", }, "peerDependencies": { - "@ohif/core": "3.10.0-beta.108", - "@ohif/ui": "3.10.0-beta.108", + "@ohif/core": "3.10.0-beta.113", + "@ohif/ui": "3.10.0-beta.113", "dcmjs": "*", "dicom-parser": "^1.8.9", "hammerjs": "^2.0.8", @@ -416,7 +416,7 @@ }, "modes/basic-dev-mode": { "name": "@ohif/mode-basic-dev-mode", - "version": "3.10.0-beta.108", + "version": "3.10.0-beta.113", "dependencies": { "@babel/runtime": "^7.20.13", "i18next": "^17.0.3", @@ -426,17 +426,17 @@ "webpack-merge": "^5.7.3", }, "peerDependencies": { - "@ohif/core": "3.10.0-beta.108", - "@ohif/extension-cornerstone": "3.10.0-beta.108", - "@ohif/extension-cornerstone-dicom-sr": "3.10.0-beta.108", - "@ohif/extension-default": "3.10.0-beta.108", - "@ohif/extension-dicom-pdf": "3.10.0-beta.108", - "@ohif/extension-dicom-video": "3.10.0-beta.108", + "@ohif/core": "3.10.0-beta.113", + "@ohif/extension-cornerstone": "3.10.0-beta.113", + "@ohif/extension-cornerstone-dicom-sr": "3.10.0-beta.113", + "@ohif/extension-default": "3.10.0-beta.113", + "@ohif/extension-dicom-pdf": "3.10.0-beta.113", + "@ohif/extension-dicom-video": "3.10.0-beta.113", }, }, "modes/basic-test-mode": { "name": "@ohif/mode-test", - "version": "3.10.0-beta.108", + "version": "3.10.0-beta.113", "dependencies": { "@babel/runtime": "^7.20.13", "i18next": "^17.0.3", @@ -446,19 +446,19 @@ "webpack-merge": "^5.7.3", }, "peerDependencies": { - "@ohif/core": "3.10.0-beta.108", - "@ohif/extension-cornerstone": "3.10.0-beta.108", - "@ohif/extension-cornerstone-dicom-sr": "3.10.0-beta.108", - "@ohif/extension-default": "3.10.0-beta.108", - "@ohif/extension-dicom-pdf": "3.10.0-beta.108", - "@ohif/extension-dicom-video": "3.10.0-beta.108", - "@ohif/extension-measurement-tracking": "3.10.0-beta.108", - "@ohif/extension-test": "3.10.0-beta.108", + "@ohif/core": "3.10.0-beta.113", + "@ohif/extension-cornerstone": "3.10.0-beta.113", + "@ohif/extension-cornerstone-dicom-sr": "3.10.0-beta.113", + "@ohif/extension-default": "3.10.0-beta.113", + "@ohif/extension-dicom-pdf": "3.10.0-beta.113", + "@ohif/extension-dicom-video": "3.10.0-beta.113", + "@ohif/extension-measurement-tracking": "3.10.0-beta.113", + "@ohif/extension-test": "3.10.0-beta.113", }, }, "modes/longitudinal": { "name": "@ohif/mode-longitudinal", - "version": "3.10.0-beta.108", + "version": "3.10.0-beta.113", "dependencies": { "@babel/runtime": "^7.20.13", "i18next": "^17.0.3", @@ -468,32 +468,32 @@ "webpack-merge": "^5.7.3", }, "peerDependencies": { - "@ohif/core": "3.10.0-beta.108", - "@ohif/extension-cornerstone": "3.10.0-beta.108", - "@ohif/extension-cornerstone-dicom-rt": "3.10.0-beta.108", - "@ohif/extension-cornerstone-dicom-seg": "3.10.0-beta.108", - "@ohif/extension-cornerstone-dicom-sr": "3.10.0-beta.108", - "@ohif/extension-default": "3.10.0-beta.108", - "@ohif/extension-dicom-pdf": "3.10.0-beta.108", - "@ohif/extension-dicom-video": "3.10.0-beta.108", - "@ohif/extension-measurement-tracking": "3.10.0-beta.108", + "@ohif/core": "3.10.0-beta.113", + "@ohif/extension-cornerstone": "3.10.0-beta.113", + "@ohif/extension-cornerstone-dicom-rt": "3.10.0-beta.113", + "@ohif/extension-cornerstone-dicom-seg": "3.10.0-beta.113", + "@ohif/extension-cornerstone-dicom-sr": "3.10.0-beta.113", + "@ohif/extension-default": "3.10.0-beta.113", + "@ohif/extension-dicom-pdf": "3.10.0-beta.113", + "@ohif/extension-dicom-video": "3.10.0-beta.113", + "@ohif/extension-measurement-tracking": "3.10.0-beta.113", }, }, "modes/microscopy": { "name": "@ohif/mode-microscopy", - "version": "3.10.0-beta.108", + "version": "3.10.0-beta.113", "dependencies": { "@babel/runtime": "^7.20.13", "i18next": "^17.0.3", }, "peerDependencies": { - "@ohif/core": "3.10.0-beta.108", - "@ohif/extension-dicom-microscopy": "3.10.0-beta.108", + "@ohif/core": "3.10.0-beta.113", + "@ohif/extension-dicom-microscopy": "3.10.0-beta.113", }, }, "modes/preclinical-4d": { "name": "@ohif/mode-preclinical-4d", - "version": "3.10.0-beta.108", + "version": "3.10.0-beta.113", "dependencies": { "@babel/runtime": "^7.20.13", }, @@ -502,17 +502,17 @@ "webpack-merge": "^5.7.3", }, "peerDependencies": { - "@ohif/core": "3.10.0-beta.108", - "@ohif/extension-cornerstone": "3.10.0-beta.108", - "@ohif/extension-cornerstone-dicom-seg": "3.10.0-beta.108", - "@ohif/extension-cornerstone-dynamic-volume": "3.10.0-beta.108", - "@ohif/extension-default": "3.10.0-beta.108", - "@ohif/extension-tmtv": "3.10.0-beta.108", + "@ohif/core": "3.10.0-beta.113", + "@ohif/extension-cornerstone": "3.10.0-beta.113", + "@ohif/extension-cornerstone-dicom-seg": "3.10.0-beta.113", + "@ohif/extension-cornerstone-dynamic-volume": "3.10.0-beta.113", + "@ohif/extension-default": "3.10.0-beta.113", + "@ohif/extension-tmtv": "3.10.0-beta.113", }, }, "modes/segmentation": { "name": "@ohif/mode-segmentation", - "version": "3.10.0-beta.108", + "version": "3.10.0-beta.113", "dependencies": { "@babel/runtime": "^7.20.13", "i18next": "^17.0.3", @@ -544,19 +544,19 @@ "webpack-merge": "^5.7.3", }, "peerDependencies": { - "@ohif/core": "3.10.0-beta.108", - "@ohif/extension-cornerstone": "3.10.0-beta.108", - "@ohif/extension-cornerstone-dicom-rt": "3.10.0-beta.108", - "@ohif/extension-cornerstone-dicom-seg": "3.10.0-beta.108", - "@ohif/extension-cornerstone-dicom-sr": "3.10.0-beta.108", - "@ohif/extension-default": "3.10.0-beta.108", - "@ohif/extension-dicom-pdf": "3.10.0-beta.108", - "@ohif/extension-dicom-video": "3.10.0-beta.108", + "@ohif/core": "3.10.0-beta.113", + "@ohif/extension-cornerstone": "3.10.0-beta.113", + "@ohif/extension-cornerstone-dicom-rt": "3.10.0-beta.113", + "@ohif/extension-cornerstone-dicom-seg": "3.10.0-beta.113", + "@ohif/extension-cornerstone-dicom-sr": "3.10.0-beta.113", + "@ohif/extension-default": "3.10.0-beta.113", + "@ohif/extension-dicom-pdf": "3.10.0-beta.113", + "@ohif/extension-dicom-video": "3.10.0-beta.113", }, }, "modes/tmtv": { "name": "@ohif/mode-tmtv", - "version": "3.10.0-beta.108", + "version": "3.10.0-beta.113", "dependencies": { "@babel/runtime": "^7.20.13", "i18next": "^17.0.3", @@ -566,43 +566,43 @@ "webpack-merge": "^5.7.3", }, "peerDependencies": { - "@ohif/core": "3.10.0-beta.108", - "@ohif/extension-cornerstone": "3.10.0-beta.108", - "@ohif/extension-cornerstone-dicom-sr": "3.10.0-beta.108", - "@ohif/extension-default": "3.10.0-beta.108", - "@ohif/extension-dicom-pdf": "3.10.0-beta.108", - "@ohif/extension-dicom-video": "3.10.0-beta.108", - "@ohif/extension-measurement-tracking": "3.10.0-beta.108", + "@ohif/core": "3.10.0-beta.113", + "@ohif/extension-cornerstone": "3.10.0-beta.113", + "@ohif/extension-cornerstone-dicom-sr": "3.10.0-beta.113", + "@ohif/extension-default": "3.10.0-beta.113", + "@ohif/extension-dicom-pdf": "3.10.0-beta.113", + "@ohif/extension-dicom-video": "3.10.0-beta.113", + "@ohif/extension-measurement-tracking": "3.10.0-beta.113", }, }, "platform/app": { "name": "@ohif/app", - "version": "3.10.0-beta.108", + "version": "3.10.0-beta.113", "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": "^2.19.14", + "@cornerstonejs/dicom-image-loader": "^3.0.1", "@emotion/serialize": "^1.1.3", - "@ohif/core": "3.10.0-beta.108", - "@ohif/extension-cornerstone": "3.10.0-beta.108", - "@ohif/extension-cornerstone-dicom-rt": "3.10.0-beta.108", - "@ohif/extension-cornerstone-dicom-seg": "3.10.0-beta.108", - "@ohif/extension-cornerstone-dicom-sr": "3.10.0-beta.108", - "@ohif/extension-default": "3.10.0-beta.108", - "@ohif/extension-dicom-microscopy": "3.10.0-beta.108", - "@ohif/extension-dicom-pdf": "3.10.0-beta.108", - "@ohif/extension-dicom-video": "3.10.0-beta.108", - "@ohif/extension-test": "3.10.0-beta.108", - "@ohif/i18n": "3.10.0-beta.108", - "@ohif/mode-basic-dev-mode": "3.10.0-beta.108", - "@ohif/mode-longitudinal": "3.10.0-beta.108", - "@ohif/mode-microscopy": "3.10.0-beta.108", - "@ohif/mode-test": "3.10.0-beta.108", - "@ohif/ui": "3.10.0-beta.108", - "@ohif/ui-next": "3.10.0-beta.108", + "@ohif/core": "3.10.0-beta.113", + "@ohif/extension-cornerstone": "3.10.0-beta.113", + "@ohif/extension-cornerstone-dicom-rt": "3.10.0-beta.113", + "@ohif/extension-cornerstone-dicom-seg": "3.10.0-beta.113", + "@ohif/extension-cornerstone-dicom-sr": "3.10.0-beta.113", + "@ohif/extension-default": "3.10.0-beta.113", + "@ohif/extension-dicom-microscopy": "3.10.0-beta.113", + "@ohif/extension-dicom-pdf": "3.10.0-beta.113", + "@ohif/extension-dicom-video": "3.10.0-beta.113", + "@ohif/extension-test": "3.10.0-beta.113", + "@ohif/i18n": "3.10.0-beta.113", + "@ohif/mode-basic-dev-mode": "3.10.0-beta.113", + "@ohif/mode-longitudinal": "3.10.0-beta.113", + "@ohif/mode-microscopy": "3.10.0-beta.113", + "@ohif/mode-test": "3.10.0-beta.113", + "@ohif/ui": "3.10.0-beta.113", + "@ohif/ui-next": "3.10.0-beta.113", "@svgr/webpack": "^8.1.0", "@types/react": "^18.3.3", "classnames": "^2.3.2", @@ -643,7 +643,7 @@ }, "platform/cli": { "name": "@ohif/cli", - "version": "3.10.0-beta.108", + "version": "3.10.0-beta.113", "bin": { "ohif-cli": "src/index.js" }, @@ -667,7 +667,7 @@ }, "platform/core": { "name": "@ohif/core", - "version": "3.10.0-beta.108", + "version": "3.10.0-beta.113", "dependencies": { "@babel/runtime": "^7.20.13", "dcmjs": "*", @@ -692,15 +692,15 @@ "@cornerstonejs/codec-libjpeg-turbo-8bit": "^1.2.2", "@cornerstonejs/codec-openjpeg": "^1.2.4", "@cornerstonejs/codec-openjph": "^2.4.5", - "@cornerstonejs/dicom-image-loader": "^2.19.14", - "@ohif/ui": "3.10.0-beta.108", + "@cornerstonejs/dicom-image-loader": "^3.0.1", + "@ohif/ui": "3.10.0-beta.113", "cornerstone-math": "0.1.9", "dicom-parser": "^1.8.21", }, }, "platform/i18n": { "name": "@ohif/i18n", - "version": "3.10.0-beta.108", + "version": "3.10.0-beta.113", "dependencies": { "@babel/runtime": "^7.20.13", "i18next-locize-backend": "^2.0.0", @@ -725,7 +725,7 @@ }, "platform/ui": { "name": "@ohif/ui", - "version": "3.10.0-beta.108", + "version": "3.10.0-beta.113", "dependencies": { "@testing-library/react": "^13.1.0", "browser-detect": "^0.2.28", @@ -785,7 +785,7 @@ }, "platform/ui-next": { "name": "@ohif/ui-next", - "version": "3.10.0-beta.108", + "version": "3.10.0-beta.113", "dependencies": { "@radix-ui/react-accordion": "^1.2.0", "@radix-ui/react-checkbox": "^1.1.1", @@ -1092,7 +1092,7 @@ "@colors/colors": ["@colors/colors@1.5.0", "", {}, "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ=="], - "@cornerstonejs/adapters": ["@cornerstonejs/adapters@2.19.14", "", { "dependencies": { "@babel/runtime-corejs2": "^7.17.8", "buffer": "^6.0.3", "dcmjs": "^0.29.8", "gl-matrix": "^3.4.3", "ndarray": "^1.0.19" }, "peerDependencies": { "@cornerstonejs/core": "^2.19.14", "@cornerstonejs/tools": "^2.19.14" } }, "sha512-tHk8y4c1GGS4kpkJMNEcLVnFL6GfA4JzAUviPnjdTRYHd6GgqoSUt3m3JLAaahYSLPh5lRV9HLU/OYYfkUOuyg=="], + "@cornerstonejs/adapters": ["@cornerstonejs/adapters@3.0.1", "", { "dependencies": { "@babel/runtime-corejs2": "^7.17.8", "buffer": "^6.0.3", "dcmjs": "^0.29.8", "gl-matrix": "^3.4.3", "ndarray": "^1.0.19" }, "peerDependencies": { "@cornerstonejs/core": "^3.0.1", "@cornerstonejs/tools": "^3.0.1" } }, "sha512-Ym6s4cTpMkojap5QZ8MXZ8hDbs2TMMN/ypqU7wKMwAY2LGoltoeGw0Z/7LL+iostbaSw3fVs+TZzJSKhKw8Bug=="], "@cornerstonejs/calculate-suv": ["@cornerstonejs/calculate-suv@1.1.0", "", {}, "sha512-Q9XraiDJif9aMFArD2iEuDO/HXbcRVCqB7KfaHgDrdTTjgDFovS91Psbdim7crypRSvE6dh/+HKeFNHdvNkA6w=="], @@ -1104,11 +1104,13 @@ "@cornerstonejs/codec-openjph": ["@cornerstonejs/codec-openjph@2.4.7", "", {}, "sha512-qvP4q4JDib7mi9r7LqKOwqz7YZ8gjtDX4ZCezeYf8+eb7MBXCz5uXAMeVF3yz9Axw4XiIMdB/pqXkm8tqCl13w=="], - "@cornerstonejs/core": ["@cornerstonejs/core@2.19.14", "", { "dependencies": { "@kitware/vtk.js": "32.9.0", "comlink": "^4.4.1", "gl-matrix": "^3.4.3" } }, "sha512-nVL/rAXFJRfvTC7cHgiSGZiJjRL8vfwhNMnSc+zqx356Bq2FsAPRC9clFlLw1KqvbBGNL/uC+24TD1VtIm1V5w=="], + "@cornerstonejs/core": ["@cornerstonejs/core@3.0.1", "", { "dependencies": { "@kitware/vtk.js": "32.9.0", "comlink": "^4.4.1", "gl-matrix": "^3.4.3" } }, "sha512-K+cOoN/TzJIPRRoaWWNkhJ+2CdkBBX8BA64DG0aBVOthlwJPRqK2YQE6PTTVRx18mjMA4to/m3de0emFNKrTzQ=="], - "@cornerstonejs/dicom-image-loader": ["@cornerstonejs/dicom-image-loader@2.19.14", "", { "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", "jpeg-lossless-decoder-js": "^2.1.0", "pako": "^2.0.4", "uuid": "^9.0.0" }, "peerDependencies": { "@cornerstonejs/core": "^2.19.14", "dicom-parser": "^1.8.9" } }, "sha512-5X5Acw2S5D5gH5D30nNGjIeeEFpZkMIZovs043nP72HCTeprNekjalVe/s7n/rOBXb0MfrUvODqJDnYMSBgx6g=="], + "@cornerstonejs/dicom-image-loader": ["@cornerstonejs/dicom-image-loader@3.0.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", "comlink": "^4.4.1", "jpeg-lossless-decoder-js": "^2.1.0", "pako": "^2.0.4", "uuid": "^9.0.0" }, "peerDependencies": { "@cornerstonejs/core": "^3.0.1", "dicom-parser": "^1.8.9" } }, "sha512-t4bI6rVOt4J8YOHRR9Mh9ClInajc98qqI6fwsByiXmtc2Y4INrZ1uaRspFnOJBosbr+EwsJBV7iT2yt6Jk6CjA=="], - "@cornerstonejs/tools": ["@cornerstonejs/tools@2.19.14", "", { "dependencies": { "@types/offscreencanvas": "2019.7.3", "comlink": "^4.4.1", "lodash.get": "^4.4.2" }, "peerDependencies": { "@cornerstonejs/core": "^2.19.14", "@kitware/vtk.js": "32.9.0", "@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-uZDhs5TXo9IvMqh+P2na4KiWb5NWCyKreaXN9HWPzv6P1QML9U7tvrfsXdYH3YnCCquddvZeLNwNraV/hWT5jw=="], + "@cornerstonejs/polymorphic-segmentation": ["@cornerstonejs/polymorphic-segmentation@3.0.1", "", { "dependencies": { "@icr/polyseg-wasm": "0.4.0" }, "peerDependencies": { "@cornerstonejs/core": "^3.0.1", "@cornerstonejs/tools": "^3.0.1", "@kitware/vtk.js": "^32.9.0" } }, "sha512-oCT+U7iTv5oKDHOcEobtZ9gez2aNh/uJkyudO+edd5ndzwXpU+mXp/wre5D9xH5CBCigFG3nDJTZJrpzUHYKfg=="], + + "@cornerstonejs/tools": ["@cornerstonejs/tools@3.0.1", "", { "dependencies": { "@types/offscreencanvas": "2019.7.3", "comlink": "^4.4.1", "lodash.get": "^4.4.2" }, "peerDependencies": { "@cornerstonejs/core": "^3.0.1", "@kitware/vtk.js": "32.9.0", "@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-fRjoXJ46mdpYc5JZ/FUn0g1vCK4LohnNjgZl+O72HK2reMdc5/dQeCueJCT+tBMay04sJMUHm0tAke2DN10FBQ=="], "@csstools/postcss-cascade-layers": ["@csstools/postcss-cascade-layers@1.1.1", "", { "dependencies": { "@csstools/selector-specificity": "^2.0.2", "postcss-selector-parser": "^6.0.10" }, "peerDependencies": { "postcss": "^8.2" } }, "sha512-+KdYrpKC5TgomQr2DlZF4lDEpHcoxnj5IGddYYfBWJAKfj1JtuHUIqMa+E1pJJ+z3kvDViWMqyqPlG4Ja7amQA=="], @@ -5370,6 +5372,8 @@ "@cornerstonejs/core/@kitware/vtk.js": ["@kitware/vtk.js@32.9.0", "", { "dependencies": { "@babel/runtime": "7.22.11", "@types/webxr": "^0.5.5", "commander": "9.2.0", "d3-scale": "4.0.2", "fast-deep-equal": "^3.1.3", "fflate": "0.7.3", "gl-matrix": "3.4.3", "globalthis": "1.0.3", "seedrandom": "3.0.5", "shader-loader": "1.3.1", "shelljs": "0.8.5", "spark-md5": "3.0.2", "stream-browserify": "3.0.0", "utif": "3.1.0", "webworker-promise": "0.5.0", "worker-loader": "3.0.8", "xmlbuilder2": "3.0.2" }, "peerDependencies": { "@babel/preset-env": "^7.17.10", "autoprefixer": "^10.4.7", "wslink": ">=1.1.0 || ^2.0.0" }, "bin": { "vtkDataConverter": "Utilities/DataGenerator/convert-cli.js", "xml2json": "Utilities/XMLConverter/xml2json-cli.js" } }, "sha512-Tk9O++q6J4Z47DQnYXMnSeTmSRTQeK0Wa3447iGivCt162swOkIFCHBRtiwwHjWbe8tKCS8N/7d+eHCxkK7JtA=="], + "@cornerstonejs/polymorphic-segmentation/@kitware/vtk.js": ["@kitware/vtk.js@32.9.0", "", { "dependencies": { "@babel/runtime": "7.22.11", "@types/webxr": "^0.5.5", "commander": "9.2.0", "d3-scale": "4.0.2", "fast-deep-equal": "^3.1.3", "fflate": "0.7.3", "gl-matrix": "3.4.3", "globalthis": "1.0.3", "seedrandom": "3.0.5", "shader-loader": "1.3.1", "shelljs": "0.8.5", "spark-md5": "3.0.2", "stream-browserify": "3.0.0", "utif": "3.1.0", "webworker-promise": "0.5.0", "worker-loader": "3.0.8", "xmlbuilder2": "3.0.2" }, "peerDependencies": { "@babel/preset-env": "^7.17.10", "autoprefixer": "^10.4.7", "wslink": ">=1.1.0 || ^2.0.0" }, "bin": { "vtkDataConverter": "Utilities/DataGenerator/convert-cli.js", "xml2json": "Utilities/XMLConverter/xml2json-cli.js" } }, "sha512-Tk9O++q6J4Z47DQnYXMnSeTmSRTQeK0Wa3447iGivCt162swOkIFCHBRtiwwHjWbe8tKCS8N/7d+eHCxkK7JtA=="], + "@cornerstonejs/tools/@kitware/vtk.js": ["@kitware/vtk.js@32.9.0", "", { "dependencies": { "@babel/runtime": "7.22.11", "@types/webxr": "^0.5.5", "commander": "9.2.0", "d3-scale": "4.0.2", "fast-deep-equal": "^3.1.3", "fflate": "0.7.3", "gl-matrix": "3.4.3", "globalthis": "1.0.3", "seedrandom": "3.0.5", "shader-loader": "1.3.1", "shelljs": "0.8.5", "spark-md5": "3.0.2", "stream-browserify": "3.0.0", "utif": "3.1.0", "webworker-promise": "0.5.0", "worker-loader": "3.0.8", "xmlbuilder2": "3.0.2" }, "peerDependencies": { "@babel/preset-env": "^7.17.10", "autoprefixer": "^10.4.7", "wslink": ">=1.1.0 || ^2.0.0" }, "bin": { "vtkDataConverter": "Utilities/DataGenerator/convert-cli.js", "xml2json": "Utilities/XMLConverter/xml2json-cli.js" } }, "sha512-Tk9O++q6J4Z47DQnYXMnSeTmSRTQeK0Wa3447iGivCt162swOkIFCHBRtiwwHjWbe8tKCS8N/7d+eHCxkK7JtA=="], "@cypress/request/uuid": ["uuid@8.3.2", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="], @@ -6574,6 +6578,8 @@ "@cornerstonejs/core/@kitware/vtk.js/@babel/runtime": ["@babel/runtime@7.22.11", "", { "dependencies": { "regenerator-runtime": "^0.14.0" } }, "sha512-ee7jVNlWN09+KftVOu9n7S8gQzD/Z6hN/I8VBRXW4P1+Xe7kJGXMwu8vds4aGIMHZnNbdpSWCfZZtinytpcAvA=="], + "@cornerstonejs/polymorphic-segmentation/@kitware/vtk.js/@babel/runtime": ["@babel/runtime@7.22.11", "", { "dependencies": { "regenerator-runtime": "^0.14.0" } }, "sha512-ee7jVNlWN09+KftVOu9n7S8gQzD/Z6hN/I8VBRXW4P1+Xe7kJGXMwu8vds4aGIMHZnNbdpSWCfZZtinytpcAvA=="], + "@cornerstonejs/tools/@kitware/vtk.js/@babel/runtime": ["@babel/runtime@7.22.11", "", { "dependencies": { "regenerator-runtime": "^0.14.0" } }, "sha512-ee7jVNlWN09+KftVOu9n7S8gQzD/Z6hN/I8VBRXW4P1+Xe7kJGXMwu8vds4aGIMHZnNbdpSWCfZZtinytpcAvA=="], "@isaacs/cliui/strip-ansi/ansi-regex": ["ansi-regex@6.1.0", "", {}, "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA=="], diff --git a/extensions/cornerstone-dicom-pmap/package.json b/extensions/cornerstone-dicom-pmap/package.json index 3782a104c..d5d2dd518 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": "^2.19.14", - "@cornerstonejs/core": "^2.19.14", + "@cornerstonejs/adapters": "^3.0.1", + "@cornerstonejs/core": "^3.0.1", "@kitware/vtk.js": "32.1.1", "react-color": "^2.19.3" } diff --git a/extensions/cornerstone-dicom-seg/package.json b/extensions/cornerstone-dicom-seg/package.json index 87643f4aa..837caa968 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": "^2.19.14", - "@cornerstonejs/core": "^2.19.14", + "@cornerstonejs/adapters": "^3.0.1", + "@cornerstonejs/core": "^3.0.1", "@kitware/vtk.js": "32.1.1", "react-color": "^2.19.3" } diff --git a/extensions/cornerstone-dicom-seg/src/commandsModule.ts b/extensions/cornerstone-dicom-seg/src/commandsModule.ts index b3c63ed13..d346ce207 100644 --- a/extensions/cornerstone-dicom-seg/src/commandsModule.ts +++ b/extensions/cornerstone-dicom-seg/src/commandsModule.ts @@ -324,10 +324,8 @@ const commandsModule = ({ const toolGroup = toolGroupService.getToolGroup(toolGroupId); toolNames?.forEach(toolName => { toolGroup.setToolConfiguration(toolName, { - strategySpecificConfiguration: { - THRESHOLD: { - threshold: value, - }, + threshold: { + range: value, }, }); }); diff --git a/extensions/cornerstone-dicom-sr/package.json b/extensions/cornerstone-dicom-sr/package.json index 8dc785143..4260493a7 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": "^2.19.14", - "@cornerstonejs/core": "^2.19.14", - "@cornerstonejs/tools": "^2.19.14", + "@cornerstonejs/adapters": "^3.0.1", + "@cornerstonejs/core": "^3.0.1", + "@cornerstonejs/tools": "^3.0.1", "classnames": "^2.3.2" } } diff --git a/extensions/cornerstone-dicom-sr/src/components/OHIFCornerstoneSRMeasurementViewport.tsx b/extensions/cornerstone-dicom-sr/src/components/OHIFCornerstoneSRMeasurementViewport.tsx index bd6e7d0e8..71c5b19ac 100644 --- a/extensions/cornerstone-dicom-sr/src/components/OHIFCornerstoneSRMeasurementViewport.tsx +++ b/extensions/cornerstone-dicom-sr/src/components/OHIFCornerstoneSRMeasurementViewport.tsx @@ -391,7 +391,12 @@ function _getStatusComponent({ switch (state) { case 1: - StatusIcon = () => ; + StatusIcon = () => ( + + ); ToolTipMessage = () => (
@@ -402,7 +407,12 @@ function _getStatusComponent({ ); break; case 2: - StatusIcon = () => ; + StatusIcon = () => ( + + ); ToolTipMessage = () => (
@@ -417,7 +427,7 @@ function _getStatusComponent({ case 3: StatusIcon = () => ( ); @@ -439,7 +449,7 @@ function _getStatusComponent({ return (
- + SR
{state === 3 && ( diff --git a/extensions/cornerstone-dicom-sr/src/utils/hydrateStructuredReport.ts b/extensions/cornerstone-dicom-sr/src/utils/hydrateStructuredReport.ts index bafeba2d8..2af1df704 100644 --- a/extensions/cornerstone-dicom-sr/src/utils/hydrateStructuredReport.ts +++ b/extensions/cornerstone-dicom-sr/src/utils/hydrateStructuredReport.ts @@ -85,7 +85,8 @@ export default function hydrateStructuredReport( } }); - const datasetToUse = _mapLegacyDataSet(instance); + // Mapping of legacy datasets is now directly handled by adapters module + const datasetToUse = instance; // Use dcmjs to generate toolState. let storedMeasurementByAnnotationType = MeasurementReport.generateToolState( @@ -237,62 +238,3 @@ export default function hydrateStructuredReport( SeriesInstanceUIDs, }; } - -function _mapLegacyDataSet(dataset) { - const REPORT = 'Imaging Measurements'; - const GROUP = 'Measurement Group'; - const TRACKING_IDENTIFIER = 'Tracking Identifier'; - - // Identify the Imaging Measurements - const imagingMeasurementContent = toArray(dataset.ContentSequence).find( - codeMeaningEquals(REPORT) - ); - - // Retrieve the Measurements themselves - const measurementGroups = toArray(imagingMeasurementContent.ContentSequence).filter( - codeMeaningEquals(GROUP) - ); - - // For each of the supported measurement types, compute the measurement data - const measurementData = {}; - - const cornerstoneToolClasses = MeasurementReport.CORNERSTONE_TOOL_CLASSES_BY_UTILITY_TYPE; - - const registeredToolClasses = []; - - Object.keys(cornerstoneToolClasses).forEach(key => { - registeredToolClasses.push(cornerstoneToolClasses[key]); - measurementData[key] = []; - }); - - measurementGroups.forEach((measurementGroup, index) => { - const measurementGroupContentSequence = toArray(measurementGroup.ContentSequence); - - const TrackingIdentifierGroup = measurementGroupContentSequence.find( - contentItem => contentItem.ConceptNameCodeSequence.CodeMeaning === TRACKING_IDENTIFIER - ); - - const TrackingIdentifier = TrackingIdentifierGroup.TextValue; - - let [cornerstoneTag, toolName] = TrackingIdentifier.split(':'); - if (supportedLegacyCornerstoneTags.includes(cornerstoneTag)) { - cornerstoneTag = CORNERSTONE_3D_TAG; - } - - const mappedTrackingIdentifier = `${cornerstoneTag}:${toolName}`; - - TrackingIdentifierGroup.TextValue = mappedTrackingIdentifier; - }); - - return dataset; -} - -const toArray = function (x) { - return Array.isArray(x) ? x : [x]; -}; - -const codeMeaningEquals = codeMeaningName => { - return contentItem => { - return contentItem.ConceptNameCodeSequence.CodeMeaning === codeMeaningName; - }; -}; diff --git a/extensions/cornerstone-dicom-sr/src/utils/isRehydratable.js b/extensions/cornerstone-dicom-sr/src/utils/isRehydratable.js deleted file mode 100644 index 31705c3a2..000000000 --- a/extensions/cornerstone-dicom-sr/src/utils/isRehydratable.js +++ /dev/null @@ -1,60 +0,0 @@ -import { adaptersSR } from '@cornerstonejs/adapters'; - -const cornerstoneAdapters = - adaptersSR.Cornerstone3D.MeasurementReport.CORNERSTONE_TOOL_CLASSES_BY_UTILITY_TYPE; - -const supportedLegacyCornerstoneTags = ['cornerstoneTools@^4.0.0']; -const CORNERSTONE_3D_TAG = adaptersSR.Cornerstone3D.CORNERSTONE_3D_TAG; - -/** - * Checks if the given `displaySet`can be rehydrated into the `measurementService`. - * - * @param {object} displaySet The SR `displaySet` to check. - * @param {object[]} mappings The CornerstoneTools 4 mappings to the `measurementService`. - * @returns {boolean} True if the SR can be rehydrated into the `measurementService`. - */ -export default function isRehydratable(displaySet, mappings) { - if (!mappings || !mappings.length) { - return false; - } - - const mappingDefinitions = mappings.map(m => m.annotationType); - const { measurements } = displaySet; - - const adapterKeys = Object.keys(cornerstoneAdapters).filter( - adapterKey => - typeof cornerstoneAdapters[adapterKey].isValidCornerstoneTrackingIdentifier === 'function' - ); - - const adapters = []; - - adapterKeys.forEach(key => { - if (mappingDefinitions.includes(key)) { - // Must have both a dcmjs adapter and a measurementService - // Definition in order to be a candidate for import. - adapters.push(cornerstoneAdapters[key]); - } - }); - - for (let i = 0; i < measurements.length; i++) { - const { TrackingIdentifier } = measurements[i] || {}; - const hydratable = adapters.some(adapter => { - let [cornerstoneTag, toolName] = TrackingIdentifier.split(':'); - if (supportedLegacyCornerstoneTags.includes(cornerstoneTag)) { - cornerstoneTag = CORNERSTONE_3D_TAG; - } - - const mappedTrackingIdentifier = `${cornerstoneTag}:${toolName}`; - - return adapter.isValidCornerstoneTrackingIdentifier(mappedTrackingIdentifier); - }); - - if (hydratable) { - return true; - } - console.log('Measurement is not rehydratable', TrackingIdentifier, measurements[i]); - } - - console.log('No measurements found which were rehydratable'); - return false; -} diff --git a/extensions/cornerstone-dicom-sr/src/utils/isRehydratable.ts b/extensions/cornerstone-dicom-sr/src/utils/isRehydratable.ts new file mode 100644 index 000000000..cf51f42f3 --- /dev/null +++ b/extensions/cornerstone-dicom-sr/src/utils/isRehydratable.ts @@ -0,0 +1,41 @@ +import { adaptersSR } from '@cornerstonejs/adapters'; + +const { MeasurementReport } = adaptersSR.Cornerstone3D; + +/** + * Checks if the given `displaySet`can be rehydrated into the `measurementService`. + * + * @param {object} displaySet The SR `displaySet` to check. + * @param {object[]} mappings The CornerstoneTools 4 mappings to the `measurementService`. + * @returns {boolean} True if the SR can be rehydrated into the `measurementService`. + */ +export default function isRehydratable(displaySet, mappings) { + if (!mappings || !mappings.length) { + return false; + } + + const mappingDefinitions = new Set(); + for (const m of mappings) { + mappingDefinitions.add(m.annotationType); + } + + const { measurements } = displaySet; + + for (let i = 0; i < measurements.length; i++) { + const { TrackingIdentifier } = measurements[i] || {}; + if (!TrackingIdentifier) { + console.warn('No tracking identifier for measurement ', measurements[i]); + continue; + } + const adapter = MeasurementReport.getAdapterForTrackingIdentifier(TrackingIdentifier); + const hydratable = adapter && mappingDefinitions.has(adapter.toolType); + + if (hydratable) { + return true; + } + console.log('Measurement is not rehydratable', TrackingIdentifier, measurements[i]); + } + + console.log('No measurements found which were rehydratable'); + return false; +} diff --git a/extensions/cornerstone-dynamic-volume/package.json b/extensions/cornerstone-dynamic-volume/package.json index 5014e4905..4aa08d574 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": "^2.19.14", - "@cornerstonejs/tools": "^2.19.14", + "@cornerstonejs/core": "^3.0.1", + "@cornerstonejs/tools": "^3.0.1", "classnames": "^2.3.2" } } diff --git a/extensions/cornerstone/package.json b/extensions/cornerstone/package.json index 4f182e9c1..fe83858fa 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": "^2.19.14", + "@cornerstonejs/dicom-image-loader": "^3.0.1", "@ohif/core": "3.10.0-beta.113", "@ohif/ui": "3.10.0-beta.113", "dcmjs": "*", @@ -51,10 +51,10 @@ }, "dependencies": { "@babel/runtime": "^7.20.13", - "@cornerstonejs/adapters": "^2.19.14", - "@cornerstonejs/core": "^2.19.14", - "@cornerstonejs/tools": "^2.19.14", - "@icr/polyseg-wasm": "^0.4.0", + "@cornerstonejs/adapters": "^3.0.1", + "@cornerstonejs/core": "^3.0.1", + "@cornerstonejs/tools": "^3.0.1", + "@cornerstonejs/polymorphic-segmentation": "^3.0.1", "@itk-wasm/morphological-contour-interpolation": "1.1.0", "@kitware/vtk.js": "32.1.1", "html2canvas": "^1.4.1", diff --git a/extensions/cornerstone/src/initCornerstoneTools.js b/extensions/cornerstone/src/initCornerstoneTools.js index dd1aedc0f..423bbf9d9 100644 --- a/extensions/cornerstone/src/initCornerstoneTools.js +++ b/extensions/cornerstone/src/initCornerstoneTools.js @@ -37,6 +37,7 @@ import { OrientationMarkerTool, WindowLevelRegionTool, } from '@cornerstonejs/tools'; +import * as polySeg from '@cornerstonejs/polymorphic-segmentation'; import CalibrationLineTool from './tools/CalibrationLineTool'; import ImageOverlayViewerTool from './tools/ImageOverlayViewerTool'; @@ -47,7 +48,11 @@ export default function initCornerstoneTools(configuration = {}) { AdvancedMagnifyTool.isAnnotation = false; PlanarFreehandContourSegmentationTool.isAnnotation = false; - init(configuration); + init({ + addons: { + polySeg, + }, + }); addTool(PanTool); addTool(WindowLevelTool); addTool(StackScrollTool); diff --git a/extensions/cornerstone/src/utils/measurementServiceMappings/ArrowAnnotate.ts b/extensions/cornerstone/src/utils/measurementServiceMappings/ArrowAnnotate.ts index edd57546c..e3521ec99 100644 --- a/extensions/cornerstone/src/utils/measurementServiceMappings/ArrowAnnotate.ts +++ b/extensions/cornerstone/src/utils/measurementServiceMappings/ArrowAnnotate.ts @@ -2,7 +2,8 @@ import SUPPORTED_TOOLS from './constants/supportedTools'; import { getIsLocked } from './utils/getIsLocked'; import getSOPInstanceAttributes from './utils/getSOPInstanceAttributes'; import { getIsVisible } from './utils/getIsVisible'; -const Length = { + +const ArrowAnnotate = { toAnnotation: measurement => {}, /** @@ -172,4 +173,4 @@ function _getReport(mappedAnnotations, points, FrameOfReferenceUID) { values, }; } -export default Length; +export default ArrowAnnotate; diff --git a/extensions/measurement-tracking/package.json b/extensions/measurement-tracking/package.json index 0e3c41c79..1115e1f18 100644 --- a/extensions/measurement-tracking/package.json +++ b/extensions/measurement-tracking/package.json @@ -32,8 +32,8 @@ "start": "yarn run dev" }, "peerDependencies": { - "@cornerstonejs/core": "^2.19.14", - "@cornerstonejs/tools": "^2.19.14", + "@cornerstonejs/core": "^3.0.1", + "@cornerstonejs/tools": "^3.0.1", "@ohif/core": "3.10.0-beta.113", "@ohif/extension-cornerstone-dicom-sr": "3.10.0-beta.113", "@ohif/extension-default": "3.10.0-beta.113", diff --git a/extensions/measurement-tracking/src/contexts/TrackedMeasurementsContext/TrackedMeasurementsContext.tsx b/extensions/measurement-tracking/src/contexts/TrackedMeasurementsContext/TrackedMeasurementsContext.tsx index e587c128d..e69f0917b 100644 --- a/extensions/measurement-tracking/src/contexts/TrackedMeasurementsContext/TrackedMeasurementsContext.tsx +++ b/extensions/measurement-tracking/src/contexts/TrackedMeasurementsContext/TrackedMeasurementsContext.tsx @@ -89,6 +89,15 @@ function TrackedMeasurementsContextProvider( ); // Jump to the last tracked measurement - most recent + if (!trackedMeasurements?.length) { + console.warn( + "Didn't find any tracked measurements", + measurements, + trackedStudy, + trackedSeries + ); + return; + } const trackedMeasurement = trackedMeasurements[trackedMeasurements.length - 1]; const referencedDisplaySetUID = trackedMeasurement.displaySetInstanceUID; diff --git a/modes/basic-test-mode/src/index.ts b/modes/basic-test-mode/src/index.ts index 1ad5c62da..184f6756d 100644 --- a/modes/basic-test-mode/src/index.ts +++ b/modes/basic-test-mode/src/index.ts @@ -1,4 +1,3 @@ -import { hotkeys } from '@ohif/core'; import toolbarButtons from './toolbarButtons'; import { id } from './id'; import initToolGroups from './initToolGroups'; diff --git a/modes/segmentation/src/initToolGroups.ts b/modes/segmentation/src/initToolGroups.ts index 387a4b0da..e61eeb0bf 100644 --- a/modes/segmentation/src/initToolGroups.ts +++ b/modes/segmentation/src/initToolGroups.ts @@ -70,14 +70,9 @@ function createTools(utilityModule) { // preview: { // enabled: true, // }, - strategySpecificConfiguration: { - // to use the use the center segment index to determine - // if inside -> same segment, if outside -> eraser - // useCenterSegmentIndex: true, - THRESHOLD: { - isDynamic: true, - dynamicRadius: 3, - }, + threshold: { + isDynamic: true, + dynamicRadius: 3, }, }, }, diff --git a/modes/tmtv/src/initToolGroups.js b/modes/tmtv/src/initToolGroups.js index 00447ce56..2b39c3f6a 100644 --- a/modes/tmtv/src/initToolGroups.js +++ b/modes/tmtv/src/initToolGroups.js @@ -105,14 +105,9 @@ function _initToolGroups(toolNames, Enums, toolGroupService, commandsManager) { // preview: { // enabled: true, // }, - strategySpecificConfiguration: { - // to use the use the center segment index to determine - // if inside -> same segment, if outside -> eraser - // useCenterSegmentIndex: true, - THRESHOLD: { - isDynamic: true, - dynamicRadius: 3, - }, + threshold: { + isDynamic: true, + dynamicRadius: 3, }, }, }, diff --git a/platform/app/package.json b/platform/app/package.json index 6da17996d..3b484a48f 100644 --- a/platform/app/package.json +++ b/platform/app/package.json @@ -54,7 +54,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": "^2.19.14", + "@cornerstonejs/dicom-image-loader": "^3.0.1", "@emotion/serialize": "^1.1.3", "@ohif/core": "3.10.0-beta.113", "@ohif/extension-cornerstone": "3.10.0-beta.113", diff --git a/platform/core/package.json b/platform/core/package.json index 14a44a013..d59e6d213 100644 --- a/platform/core/package.json +++ b/platform/core/package.json @@ -37,7 +37,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": "^2.19.14", + "@cornerstonejs/dicom-image-loader": "^3.0.1", "@ohif/ui": "3.10.0-beta.113", "cornerstone-math": "0.1.9", "dicom-parser": "^1.8.21" diff --git a/platform/ui-next/src/components/Icons/Icons.tsx b/platform/ui-next/src/components/Icons/Icons.tsx index 0e1dd5abd..bcfdd1411 100644 --- a/platform/ui-next/src/components/Icons/Icons.tsx +++ b/platform/ui-next/src/components/Icons/Icons.tsx @@ -193,6 +193,7 @@ import Pencil from './Sources/Pencil'; import NotificationWarning from './Sources/NotificationWarning'; import ArrowRight from './Sources/ArrowRight'; import ChevronLeft from './Sources/ChevronLeft'; +import StatusAlert from './Sources/StatusAlert'; // // type IconProps = React.HTMLAttributes; @@ -681,7 +682,7 @@ export const Icons = { 'icon-transferring': (props: IconProps) => IconTransferring(props), 'icon-alert-small': (props: IconProps) => Alert(props), 'icon-alert-outline': (props: IconProps) => AlertOutline(props), - 'status-alert': (props: IconProps) => Alert(props), + 'status-alert': (props: IconProps) => StatusAlert(props), info: (props: IconProps) => Info(props), 'notifications-info': (props: IconProps) => NotificationInfo(props), 'notificationwarning-diamond': (props: IconProps) => NotificationWarning(props), diff --git a/platform/ui-next/src/components/Icons/Sources/StatusAlert.tsx b/platform/ui-next/src/components/Icons/Sources/StatusAlert.tsx new file mode 100644 index 000000000..afc3c9c19 --- /dev/null +++ b/platform/ui-next/src/components/Icons/Sources/StatusAlert.tsx @@ -0,0 +1,36 @@ +import React from 'react'; +import type { IconProps } from '../types'; + +export const StatusError = (props: IconProps) => ( + + + + + + + +); + +export default StatusError; diff --git a/platform/ui-next/src/components/Icons/Sources/StatusError.tsx b/platform/ui-next/src/components/Icons/Sources/StatusError.tsx index 07e42dfa7..829410966 100644 --- a/platform/ui-next/src/components/Icons/Sources/StatusError.tsx +++ b/platform/ui-next/src/components/Icons/Sources/StatusError.tsx @@ -6,6 +6,7 @@ export const StatusError = (props: IconProps) => ( width="24px" height="24px" viewBox="0 0 24 24" + {...props} >