diff --git a/.gitignore b/.gitignore index 2b6dda93f..9d071e583 100644 --- a/.gitignore +++ b/.gitignore @@ -60,3 +60,6 @@ tests/playwright-report/ /playwright/.cache/ **/.claude/settings.local.json + +# Backup files +*~ diff --git a/addOns/package.json b/addOns/package.json index b21b714a7..2a1b86f44 100644 --- a/addOns/package.json +++ b/addOns/package.json @@ -38,7 +38,7 @@ "resolutions": { "**/@babel/runtime": "^7.20.13", "commander": "8.3.0", - "dcmjs": "^0.42.0", + "dcmjs": "0.43.1", "dicomweb-client": ">=0.10.4", "nth-check": "^2.1.1", "trim-newlines": "^5.0.0", diff --git a/bun.lock b/bun.lock index bd37dfda7..7c33d615c 100644 --- a/bun.lock +++ b/bun.lock @@ -41,7 +41,7 @@ }, "addOns/externals/devDependencies": { "name": "@externals/devDependencies", - "version": "3.11.0-beta.100", + "version": "3.11.0-beta.114", "dependencies": { "@babel/runtime": "^7.20.13", "@kitware/vtk.js": "32.12.0", @@ -126,22 +126,22 @@ }, "addOns/externals/dicom-microscopy-viewer": { "name": "@externals/dicom-microscopy-viewer", - "version": "3.11.0-beta.100", + "version": "3.11.0-beta.114", "dependencies": { "dicom-microscopy-viewer": "^0.46.1", }, }, "extensions/cornerstone": { "name": "@ohif/extension-cornerstone", - "version": "3.11.0-beta.100", + "version": "3.11.0-beta.114", "dependencies": { "@babel/runtime": "^7.20.13", - "@cornerstonejs/adapters": "^3.30.3", - "@cornerstonejs/ai": "^3.30.3", - "@cornerstonejs/core": "^3.30.3", - "@cornerstonejs/labelmap-interpolation": "^3.30.3", - "@cornerstonejs/polymorphic-segmentation": "^3.30.3", - "@cornerstonejs/tools": "^3.30.3", + "@cornerstonejs/adapters": "^3.32.5", + "@cornerstonejs/ai": "^3.32.5", + "@cornerstonejs/core": "^3.32.5", + "@cornerstonejs/labelmap-interpolation": "^3.32.5", + "@cornerstonejs/polymorphic-segmentation": "^3.32.5", + "@cornerstonejs/tools": "^3.32.5", "@itk-wasm/morphological-contour-interpolation": "1.1.0", "@kitware/vtk.js": "32.12.0", "html2canvas": "^1.4.1", @@ -158,10 +158,10 @@ "@cornerstonejs/codec-libjpeg-turbo-8bit": "^1.2.2", "@cornerstonejs/codec-openjpeg": "^1.2.4", "@cornerstonejs/codec-openjph": "^2.4.5", - "@cornerstonejs/dicom-image-loader": "^3.30.3", - "@ohif/core": "3.11.0-beta.100", - "@ohif/ui": "3.11.0-beta.100", - "dcmjs": "^0.42.0", + "@cornerstonejs/dicom-image-loader": "^3.32.5", + "@ohif/core": "3.11.0-beta.114", + "@ohif/ui": "3.11.0-beta.114", + "dcmjs": "0.43.1", "dicom-parser": "^1.8.21", "hammerjs": "^2.0.8", "prop-types": "^15.6.2", @@ -172,19 +172,19 @@ }, "extensions/cornerstone-dicom-pmap": { "name": "@ohif/extension-cornerstone-dicom-pmap", - "version": "3.11.0-beta.100", + "version": "3.11.0-beta.114", "dependencies": { "@babel/runtime": "^7.20.13", - "@cornerstonejs/adapters": "^3.30.3", - "@cornerstonejs/core": "^3.30.3", + "@cornerstonejs/adapters": "^3.32.5", + "@cornerstonejs/core": "^3.32.5", "@kitware/vtk.js": "32.12.0", "react-color": "^2.19.3", }, "peerDependencies": { - "@ohif/core": "3.11.0-beta.100", - "@ohif/extension-cornerstone": "3.11.0-beta.100", - "@ohif/extension-default": "3.11.0-beta.100", - "@ohif/i18n": "3.11.0-beta.100", + "@ohif/core": "3.11.0-beta.114", + "@ohif/extension-cornerstone": "3.11.0-beta.114", + "@ohif/extension-default": "3.11.0-beta.114", + "@ohif/i18n": "3.11.0-beta.114", "prop-types": "^15.6.2", "react": "^18.3.1", "react-dom": "^18.3.1", @@ -195,16 +195,16 @@ }, "extensions/cornerstone-dicom-rt": { "name": "@ohif/extension-cornerstone-dicom-rt", - "version": "3.11.0-beta.100", + "version": "3.11.0-beta.114", "dependencies": { "@babel/runtime": "^7.20.13", "react-color": "^2.19.3", }, "peerDependencies": { - "@ohif/core": "3.11.0-beta.100", - "@ohif/extension-cornerstone": "3.11.0-beta.100", - "@ohif/extension-default": "3.11.0-beta.100", - "@ohif/i18n": "3.11.0-beta.100", + "@ohif/core": "3.11.0-beta.114", + "@ohif/extension-cornerstone": "3.11.0-beta.114", + "@ohif/extension-default": "3.11.0-beta.114", + "@ohif/i18n": "3.11.0-beta.114", "prop-types": "^15.6.2", "react": "^18.3.1", "react-dom": "^18.3.1", @@ -215,19 +215,19 @@ }, "extensions/cornerstone-dicom-seg": { "name": "@ohif/extension-cornerstone-dicom-seg", - "version": "3.11.0-beta.100", + "version": "3.11.0-beta.114", "dependencies": { "@babel/runtime": "^7.20.13", - "@cornerstonejs/adapters": "^3.30.3", - "@cornerstonejs/core": "^3.30.3", + "@cornerstonejs/adapters": "^3.32.5", + "@cornerstonejs/core": "^3.32.5", "@kitware/vtk.js": "32.12.0", "react-color": "^2.19.3", }, "peerDependencies": { - "@ohif/core": "3.11.0-beta.100", - "@ohif/extension-cornerstone": "3.11.0-beta.100", - "@ohif/extension-default": "3.11.0-beta.100", - "@ohif/i18n": "3.11.0-beta.100", + "@ohif/core": "3.11.0-beta.114", + "@ohif/extension-cornerstone": "3.11.0-beta.114", + "@ohif/extension-default": "3.11.0-beta.114", + "@ohif/i18n": "3.11.0-beta.114", "prop-types": "^15.6.2", "react": "^18.3.1", "react-dom": "^18.3.1", @@ -238,20 +238,20 @@ }, "extensions/cornerstone-dicom-sr": { "name": "@ohif/extension-cornerstone-dicom-sr", - "version": "3.11.0-beta.100", + "version": "3.11.0-beta.114", "dependencies": { "@babel/runtime": "^7.20.13", - "@cornerstonejs/adapters": "^3.30.3", - "@cornerstonejs/core": "^3.30.3", - "@cornerstonejs/tools": "^3.30.3", + "@cornerstonejs/adapters": "^3.32.5", + "@cornerstonejs/core": "^3.32.5", + "@cornerstonejs/tools": "^3.32.5", "classnames": "^2.3.2", }, "peerDependencies": { - "@ohif/core": "3.11.0-beta.100", - "@ohif/extension-cornerstone": "3.11.0-beta.100", - "@ohif/extension-measurement-tracking": "3.11.0-beta.100", - "@ohif/ui": "3.11.0-beta.100", - "dcmjs": "^0.42.0", + "@ohif/core": "3.11.0-beta.114", + "@ohif/extension-cornerstone": "3.11.0-beta.114", + "@ohif/extension-measurement-tracking": "3.11.0-beta.114", + "@ohif/ui": "3.11.0-beta.114", + "dcmjs": "0.43.1", "dicom-parser": "^1.8.9", "hammerjs": "^2.0.8", "prop-types": "^15.6.2", @@ -260,20 +260,20 @@ }, "extensions/cornerstone-dynamic-volume": { "name": "@ohif/extension-cornerstone-dynamic-volume", - "version": "3.11.0-beta.100", + "version": "3.11.0-beta.114", "dependencies": { "@babel/runtime": "^7.20.13", - "@cornerstonejs/core": "^3.30.3", - "@cornerstonejs/tools": "^3.30.3", + "@cornerstonejs/core": "^3.32.5", + "@cornerstonejs/tools": "^3.32.5", "classnames": "^2.3.2", }, "peerDependencies": { - "@ohif/core": "3.11.0-beta.100", - "@ohif/extension-cornerstone": "3.11.0-beta.100", - "@ohif/extension-default": "3.11.0-beta.100", - "@ohif/i18n": "3.11.0-beta.100", - "@ohif/ui": "3.11.0-beta.100", - "dcmjs": "^0.42.0", + "@ohif/core": "3.11.0-beta.114", + "@ohif/extension-cornerstone": "3.11.0-beta.114", + "@ohif/extension-default": "3.11.0-beta.114", + "@ohif/i18n": "3.11.0-beta.114", + "@ohif/ui": "3.11.0-beta.114", + "dcmjs": "0.43.1", "dicom-parser": "^1.8.21", "hammerjs": "^2.0.8", "prop-types": "^15.6.2", @@ -282,7 +282,7 @@ }, "extensions/default": { "name": "@ohif/extension-default", - "version": "3.11.0-beta.100", + "version": "3.11.0-beta.114", "dependencies": { "@babel/runtime": "^7.20.13", "@cornerstonejs/calculate-suv": "^1.1.0", @@ -290,9 +290,9 @@ "lodash.uniqby": "^4.7.0", }, "peerDependencies": { - "@ohif/core": "3.11.0-beta.100", - "@ohif/i18n": "3.11.0-beta.100", - "dcmjs": "^0.42.0", + "@ohif/core": "3.11.0-beta.114", + "@ohif/i18n": "3.11.0-beta.114", + "dcmjs": "0.43.1", "dicomweb-client": "^0.10.4", "prop-types": "^15.6.2", "react": "^18.3.1", @@ -305,7 +305,7 @@ }, "extensions/dicom-microscopy": { "name": "@ohif/extension-dicom-microscopy", - "version": "3.11.0-beta.100", + "version": "3.11.0-beta.114", "dependencies": { "@babel/runtime": "^7.20.13", "@cornerstonejs/codec-charls": "^1.2.3", @@ -316,10 +316,10 @@ "mathjs": "^12.4.2", }, "peerDependencies": { - "@ohif/core": "3.11.0-beta.100", - "@ohif/extension-default": "3.11.0-beta.100", - "@ohif/i18n": "3.11.0-beta.100", - "@ohif/ui": "3.11.0-beta.100", + "@ohif/core": "3.11.0-beta.114", + "@ohif/extension-default": "3.11.0-beta.114", + "@ohif/i18n": "3.11.0-beta.114", + "@ohif/ui": "3.11.0-beta.114", "prop-types": "^15.6.2", "react": "^18.3.1", "react-dom": "^18.3.1", @@ -330,15 +330,15 @@ }, "extensions/dicom-pdf": { "name": "@ohif/extension-dicom-pdf", - "version": "3.11.0-beta.100", + "version": "3.11.0-beta.114", "dependencies": { "@babel/runtime": "^7.20.13", "classnames": "^2.3.2", }, "peerDependencies": { - "@ohif/core": "3.11.0-beta.100", - "@ohif/ui": "3.11.0-beta.100", - "dcmjs": "^0.42.0", + "@ohif/core": "3.11.0-beta.114", + "@ohif/ui": "3.11.0-beta.114", + "dcmjs": "0.43.1", "dicom-parser": "^1.8.9", "hammerjs": "^2.0.8", "prop-types": "^15.6.2", @@ -347,15 +347,15 @@ }, "extensions/dicom-video": { "name": "@ohif/extension-dicom-video", - "version": "3.11.0-beta.100", + "version": "3.11.0-beta.114", "dependencies": { "@babel/runtime": "^7.20.13", "classnames": "^2.3.2", }, "peerDependencies": { - "@ohif/core": "3.11.0-beta.100", - "@ohif/ui": "3.11.0-beta.100", - "dcmjs": "^0.42.0", + "@ohif/core": "3.11.0-beta.114", + "@ohif/ui": "3.11.0-beta.114", + "dcmjs": "0.43.1", "dicom-parser": "^1.8.9", "hammerjs": "^2.0.8", "prop-types": "^15.6.2", @@ -364,22 +364,22 @@ }, "extensions/measurement-tracking": { "name": "@ohif/extension-measurement-tracking", - "version": "3.11.0-beta.100", + "version": "3.11.0-beta.114", "dependencies": { "@babel/runtime": "^7.20.13", - "@ohif/ui": "3.11.0-beta.100", + "@ohif/ui": "3.11.0-beta.114", "@xstate/react": "^3.2.2", "xstate": "^4.10.0", }, "peerDependencies": { - "@cornerstonejs/core": "^3.30.3", - "@cornerstonejs/tools": "^3.30.3", - "@ohif/core": "3.11.0-beta.100", - "@ohif/extension-cornerstone-dicom-sr": "3.11.0-beta.100", - "@ohif/extension-default": "3.11.0-beta.100", - "@ohif/ui": "3.11.0-beta.100", + "@cornerstonejs/core": "^3.32.5", + "@cornerstonejs/tools": "^3.32.5", + "@ohif/core": "3.11.0-beta.114", + "@ohif/extension-cornerstone-dicom-sr": "3.11.0-beta.114", + "@ohif/extension-default": "3.11.0-beta.114", + "@ohif/ui": "3.11.0-beta.114", "classnames": "^2.3.2", - "dcmjs": "^0.42.0", + "dcmjs": "0.43.1", "lodash.debounce": "^4.0.8", "prop-types": "^15.6.2", "react": "^18.3.1", @@ -390,15 +390,15 @@ }, "extensions/test-extension": { "name": "@ohif/extension-test", - "version": "3.11.0-beta.100", + "version": "3.11.0-beta.114", "dependencies": { "@babel/runtime": "^7.20.13", "classnames": "^2.3.2", }, "peerDependencies": { - "@ohif/core": "3.11.0-beta.100", - "@ohif/ui": "3.11.0-beta.100", - "dcmjs": "^0.42.0", + "@ohif/core": "3.11.0-beta.114", + "@ohif/ui": "3.11.0-beta.114", + "dcmjs": "0.43.1", "dicom-parser": "^1.8.9", "hammerjs": "^2.0.8", "prop-types": "^15.6.2", @@ -407,15 +407,15 @@ }, "extensions/tmtv": { "name": "@ohif/extension-tmtv", - "version": "3.11.0-beta.100", + "version": "3.11.0-beta.114", "dependencies": { "@babel/runtime": "^7.20.13", "classnames": "^2.3.2", }, "peerDependencies": { - "@ohif/core": "3.11.0-beta.100", - "@ohif/ui": "3.11.0-beta.100", - "dcmjs": "^0.42.0", + "@ohif/core": "3.11.0-beta.114", + "@ohif/ui": "3.11.0-beta.114", + "dcmjs": "0.43.1", "dicom-parser": "^1.8.9", "hammerjs": "^2.0.8", "prop-types": "^15.6.2", @@ -424,16 +424,16 @@ }, "extensions/usAnnotation": { "name": "@ohif/extension-ultrasound-pleura-bline", - "version": "3.11.0-beta.100", + "version": "3.11.0-beta.114", "dependencies": { "@babel/runtime": "^7.20.13", - "@cornerstonejs/core": "^3.16.0", - "@cornerstonejs/tools": "^3.16.0", - "@ohif/core": "3.11.0-beta.100", - "@ohif/extension-cornerstone": "3.11.0-beta.100", - "@ohif/extension-default": "3.11.0-beta.100", - "@ohif/i18n": "3.11.0-beta.100", - "@ohif/ui-next": "3.11.0-beta.100", + "@cornerstonejs/core": "^3.32.5", + "@cornerstonejs/tools": "^3.32.5", + "@ohif/core": "3.11.0-beta.114", + "@ohif/extension-cornerstone": "3.11.0-beta.114", + "@ohif/extension-default": "3.11.0-beta.114", + "@ohif/i18n": "3.11.0-beta.114", + "@ohif/ui-next": "3.11.0-beta.114", }, "devDependencies": { "@babel/core": "7.28.0", @@ -476,7 +476,7 @@ }, "modes/basic-dev-mode": { "name": "@ohif/mode-basic-dev-mode", - "version": "3.11.0-beta.100", + "version": "3.11.0-beta.114", "dependencies": { "@babel/runtime": "^7.20.13", "i18next": "^17.0.3", @@ -486,17 +486,17 @@ "webpack-merge": "^5.7.3", }, "peerDependencies": { - "@ohif/core": "3.11.0-beta.100", - "@ohif/extension-cornerstone": "3.11.0-beta.100", - "@ohif/extension-cornerstone-dicom-sr": "3.11.0-beta.100", - "@ohif/extension-default": "3.11.0-beta.100", - "@ohif/extension-dicom-pdf": "3.11.0-beta.100", - "@ohif/extension-dicom-video": "3.11.0-beta.100", + "@ohif/core": "3.11.0-beta.114", + "@ohif/extension-cornerstone": "3.11.0-beta.114", + "@ohif/extension-cornerstone-dicom-sr": "3.11.0-beta.114", + "@ohif/extension-default": "3.11.0-beta.114", + "@ohif/extension-dicom-pdf": "3.11.0-beta.114", + "@ohif/extension-dicom-video": "3.11.0-beta.114", }, }, "modes/basic-test-mode": { "name": "@ohif/mode-test", - "version": "3.11.0-beta.100", + "version": "3.11.0-beta.114", "dependencies": { "@babel/runtime": "^7.20.13", "i18next": "^17.0.3", @@ -506,19 +506,19 @@ "webpack-merge": "^5.7.3", }, "peerDependencies": { - "@ohif/core": "3.11.0-beta.100", - "@ohif/extension-cornerstone": "3.11.0-beta.100", - "@ohif/extension-cornerstone-dicom-sr": "3.11.0-beta.100", - "@ohif/extension-default": "3.11.0-beta.100", - "@ohif/extension-dicom-pdf": "3.11.0-beta.100", - "@ohif/extension-dicom-video": "3.11.0-beta.100", - "@ohif/extension-measurement-tracking": "3.11.0-beta.100", - "@ohif/extension-test": "3.11.0-beta.100", + "@ohif/core": "3.11.0-beta.114", + "@ohif/extension-cornerstone": "3.11.0-beta.114", + "@ohif/extension-cornerstone-dicom-sr": "3.11.0-beta.114", + "@ohif/extension-default": "3.11.0-beta.114", + "@ohif/extension-dicom-pdf": "3.11.0-beta.114", + "@ohif/extension-dicom-video": "3.11.0-beta.114", + "@ohif/extension-measurement-tracking": "3.11.0-beta.114", + "@ohif/extension-test": "3.11.0-beta.114", }, }, "modes/longitudinal": { "name": "@ohif/mode-longitudinal", - "version": "3.11.0-beta.100", + "version": "3.11.0-beta.114", "dependencies": { "@babel/runtime": "^7.20.13", "i18next": "^17.0.3", @@ -528,32 +528,32 @@ "webpack-merge": "^5.7.3", }, "peerDependencies": { - "@ohif/core": "3.11.0-beta.100", - "@ohif/extension-cornerstone": "3.11.0-beta.100", - "@ohif/extension-cornerstone-dicom-rt": "3.11.0-beta.100", - "@ohif/extension-cornerstone-dicom-seg": "3.11.0-beta.100", - "@ohif/extension-cornerstone-dicom-sr": "3.11.0-beta.100", - "@ohif/extension-default": "3.11.0-beta.100", - "@ohif/extension-dicom-pdf": "3.11.0-beta.100", - "@ohif/extension-dicom-video": "3.11.0-beta.100", - "@ohif/extension-measurement-tracking": "3.11.0-beta.100", + "@ohif/core": "3.11.0-beta.114", + "@ohif/extension-cornerstone": "3.11.0-beta.114", + "@ohif/extension-cornerstone-dicom-rt": "3.11.0-beta.114", + "@ohif/extension-cornerstone-dicom-seg": "3.11.0-beta.114", + "@ohif/extension-cornerstone-dicom-sr": "3.11.0-beta.114", + "@ohif/extension-default": "3.11.0-beta.114", + "@ohif/extension-dicom-pdf": "3.11.0-beta.114", + "@ohif/extension-dicom-video": "3.11.0-beta.114", + "@ohif/extension-measurement-tracking": "3.11.0-beta.114", }, }, "modes/microscopy": { "name": "@ohif/mode-microscopy", - "version": "3.11.0-beta.100", + "version": "3.11.0-beta.114", "dependencies": { "@babel/runtime": "^7.20.13", "i18next": "^17.0.3", }, "peerDependencies": { - "@ohif/core": "3.11.0-beta.100", - "@ohif/extension-dicom-microscopy": "3.11.0-beta.100", + "@ohif/core": "3.11.0-beta.114", + "@ohif/extension-dicom-microscopy": "3.11.0-beta.114", }, }, "modes/preclinical-4d": { "name": "@ohif/mode-preclinical-4d", - "version": "3.11.0-beta.100", + "version": "3.11.0-beta.114", "dependencies": { "@babel/runtime": "^7.20.13", }, @@ -562,17 +562,17 @@ "webpack-merge": "^5.7.3", }, "peerDependencies": { - "@ohif/core": "3.11.0-beta.100", - "@ohif/extension-cornerstone": "3.11.0-beta.100", - "@ohif/extension-cornerstone-dicom-seg": "3.11.0-beta.100", - "@ohif/extension-cornerstone-dynamic-volume": "3.11.0-beta.100", - "@ohif/extension-default": "3.11.0-beta.100", - "@ohif/extension-tmtv": "3.11.0-beta.100", + "@ohif/core": "3.11.0-beta.114", + "@ohif/extension-cornerstone": "3.11.0-beta.114", + "@ohif/extension-cornerstone-dicom-seg": "3.11.0-beta.114", + "@ohif/extension-cornerstone-dynamic-volume": "3.11.0-beta.114", + "@ohif/extension-default": "3.11.0-beta.114", + "@ohif/extension-tmtv": "3.11.0-beta.114", }, }, "modes/segmentation": { "name": "@ohif/mode-segmentation", - "version": "3.11.0-beta.100", + "version": "3.11.0-beta.114", "dependencies": { "@babel/runtime": "^7.20.13", "i18next": "^17.0.3", @@ -604,19 +604,19 @@ "webpack-merge": "^5.7.3", }, "peerDependencies": { - "@ohif/core": "3.11.0-beta.100", - "@ohif/extension-cornerstone": "3.11.0-beta.100", - "@ohif/extension-cornerstone-dicom-rt": "3.11.0-beta.100", - "@ohif/extension-cornerstone-dicom-seg": "3.11.0-beta.100", - "@ohif/extension-cornerstone-dicom-sr": "3.11.0-beta.100", - "@ohif/extension-default": "3.11.0-beta.100", - "@ohif/extension-dicom-pdf": "3.11.0-beta.100", - "@ohif/extension-dicom-video": "3.11.0-beta.100", + "@ohif/core": "3.11.0-beta.114", + "@ohif/extension-cornerstone": "3.11.0-beta.114", + "@ohif/extension-cornerstone-dicom-rt": "3.11.0-beta.114", + "@ohif/extension-cornerstone-dicom-seg": "3.11.0-beta.114", + "@ohif/extension-cornerstone-dicom-sr": "3.11.0-beta.114", + "@ohif/extension-default": "3.11.0-beta.114", + "@ohif/extension-dicom-pdf": "3.11.0-beta.114", + "@ohif/extension-dicom-video": "3.11.0-beta.114", }, }, "modes/tmtv": { "name": "@ohif/mode-tmtv", - "version": "3.11.0-beta.100", + "version": "3.11.0-beta.114", "dependencies": { "@babel/runtime": "^7.20.13", "i18next": "^17.0.3", @@ -626,25 +626,25 @@ "webpack-merge": "^5.7.3", }, "peerDependencies": { - "@ohif/core": "3.11.0-beta.100", - "@ohif/extension-cornerstone": "3.11.0-beta.100", - "@ohif/extension-cornerstone-dicom-sr": "3.11.0-beta.100", - "@ohif/extension-default": "3.11.0-beta.100", - "@ohif/extension-dicom-pdf": "3.11.0-beta.100", - "@ohif/extension-dicom-video": "3.11.0-beta.100", - "@ohif/extension-measurement-tracking": "3.11.0-beta.100", + "@ohif/core": "3.11.0-beta.114", + "@ohif/extension-cornerstone": "3.11.0-beta.114", + "@ohif/extension-cornerstone-dicom-sr": "3.11.0-beta.114", + "@ohif/extension-default": "3.11.0-beta.114", + "@ohif/extension-dicom-pdf": "3.11.0-beta.114", + "@ohif/extension-dicom-video": "3.11.0-beta.114", + "@ohif/extension-measurement-tracking": "3.11.0-beta.114", }, }, "modes/usAnnotation": { "name": "@ohif/mode-ultrasound-pleura-bline", - "version": "3.11.0-beta.100", + "version": "3.11.0-beta.114", "dependencies": { "@babel/runtime": "^7.20.13", - "@cornerstonejs/core": "^3.16.0", - "@cornerstonejs/tools": "^3.16.0", - "@ohif/core": "3.11.0-beta.100", - "@ohif/extension-cornerstone-dicom-sr": "3.11.0-beta.100", - "@ohif/extension-ultrasound-pleura-bline": "3.11.0-beta.100", + "@cornerstonejs/core": "^3.32.5", + "@cornerstonejs/tools": "^3.32.5", + "@ohif/core": "3.11.0-beta.114", + "@ohif/extension-cornerstone-dicom-sr": "3.11.0-beta.114", + "@ohif/extension-ultrasound-pleura-bline": "3.11.0-beta.114", "i18next": "^17.0.3", }, "devDependencies": { @@ -676,40 +676,40 @@ }, "platform/app": { "name": "@ohif/app", - "version": "3.11.0-beta.100", + "version": "3.11.0-beta.114", "dependencies": { "@babel/runtime": "^7.20.13", "@cornerstonejs/codec-charls": "^1.2.3", "@cornerstonejs/codec-libjpeg-turbo-8bit": "^1.2.2", "@cornerstonejs/codec-openjpeg": "^1.2.4", "@cornerstonejs/codec-openjph": "^2.4.5", - "@cornerstonejs/dicom-image-loader": "^3.30.3", + "@cornerstonejs/dicom-image-loader": "^3.32.5", "@emotion/serialize": "^1.1.3", - "@ohif/core": "3.11.0-beta.100", - "@ohif/extension-cornerstone": "3.11.0-beta.100", - "@ohif/extension-cornerstone-dicom-rt": "3.11.0-beta.100", - "@ohif/extension-cornerstone-dicom-seg": "3.11.0-beta.100", - "@ohif/extension-cornerstone-dicom-sr": "3.11.0-beta.100", - "@ohif/extension-default": "3.11.0-beta.100", - "@ohif/extension-dicom-microscopy": "3.11.0-beta.100", - "@ohif/extension-dicom-pdf": "3.11.0-beta.100", - "@ohif/extension-dicom-video": "3.11.0-beta.100", - "@ohif/extension-test": "3.11.0-beta.100", - "@ohif/extension-ultrasound-pleura-bline": "3.11.0-beta.100", - "@ohif/i18n": "3.11.0-beta.100", - "@ohif/mode-basic-dev-mode": "3.11.0-beta.100", - "@ohif/mode-longitudinal": "3.11.0-beta.100", - "@ohif/mode-microscopy": "3.11.0-beta.100", - "@ohif/mode-test": "3.11.0-beta.100", - "@ohif/mode-ultrasound-pleura-bline": "3.11.0-beta.100", - "@ohif/ui": "3.11.0-beta.100", - "@ohif/ui-next": "3.11.0-beta.100", + "@ohif/core": "3.11.0-beta.114", + "@ohif/extension-cornerstone": "3.11.0-beta.114", + "@ohif/extension-cornerstone-dicom-rt": "3.11.0-beta.114", + "@ohif/extension-cornerstone-dicom-seg": "3.11.0-beta.114", + "@ohif/extension-cornerstone-dicom-sr": "3.11.0-beta.114", + "@ohif/extension-default": "3.11.0-beta.114", + "@ohif/extension-dicom-microscopy": "3.11.0-beta.114", + "@ohif/extension-dicom-pdf": "3.11.0-beta.114", + "@ohif/extension-dicom-video": "3.11.0-beta.114", + "@ohif/extension-test": "3.11.0-beta.114", + "@ohif/extension-ultrasound-pleura-bline": "3.11.0-beta.114", + "@ohif/i18n": "3.11.0-beta.114", + "@ohif/mode-basic-dev-mode": "3.11.0-beta.114", + "@ohif/mode-longitudinal": "3.11.0-beta.114", + "@ohif/mode-microscopy": "3.11.0-beta.114", + "@ohif/mode-test": "3.11.0-beta.114", + "@ohif/mode-ultrasound-pleura-bline": "3.11.0-beta.114", + "@ohif/ui": "3.11.0-beta.114", + "@ohif/ui-next": "3.11.0-beta.114", "@svgr/webpack": "^8.1.0", "@types/react": "^18.3.3", "classnames": "^2.3.2", "core-js": "*", "cornerstone-math": "^0.1.9", - "dcmjs": "^0.42.0", + "dcmjs": "0.43.1", "detect-gpu": "^4.0.16", "dicom-parser": "^1.8.9", "dotenv-webpack": "^1.7.0", @@ -744,7 +744,7 @@ }, "platform/cli": { "name": "@ohif/cli", - "version": "3.11.0-beta.100", + "version": "3.11.0-beta.114", "bin": { "ohif-cli": "src/index.js", }, @@ -768,10 +768,10 @@ }, "platform/core": { "name": "@ohif/core", - "version": "3.11.0-beta.100", + "version": "3.11.0-beta.114", "dependencies": { "@babel/runtime": "^7.20.13", - "dcmjs": "^0.42.0", + "dcmjs": "0.43.1", "dicomweb-client": "^0.10.4", "gl-matrix": "^3.4.3", "immutability-helper": "^3.1.1", @@ -793,16 +793,16 @@ "@cornerstonejs/codec-libjpeg-turbo-8bit": "^1.2.2", "@cornerstonejs/codec-openjpeg": "^1.2.4", "@cornerstonejs/codec-openjph": "^2.4.5", - "@cornerstonejs/core": "^3.30.3", - "@cornerstonejs/dicom-image-loader": "^3.30.3", - "@ohif/ui": "3.11.0-beta.100", + "@cornerstonejs/core": "^3.32.5", + "@cornerstonejs/dicom-image-loader": "^3.32.5", + "@ohif/ui": "3.11.0-beta.114", "cornerstone-math": "0.1.9", "dicom-parser": "^1.8.21", }, }, "platform/i18n": { "name": "@ohif/i18n", - "version": "3.11.0-beta.100", + "version": "3.11.0-beta.114", "dependencies": { "@babel/runtime": "^7.20.13", "i18next-locize-backend": "^2.0.0", @@ -827,7 +827,7 @@ }, "platform/ui": { "name": "@ohif/ui", - "version": "3.11.0-beta.100", + "version": "3.11.0-beta.114", "dependencies": { "@testing-library/react": "^13.1.0", "browser-detect": "^0.2.28", @@ -887,7 +887,7 @@ }, "platform/ui-next": { "name": "@ohif/ui-next", - "version": "3.11.0-beta.100", + "version": "3.11.0-beta.114", "dependencies": { "@radix-ui/react-accordion": "^1.2.0", "@radix-ui/react-checkbox": "^1.1.1", @@ -932,6 +932,7 @@ "overrides": { "body-parser": "1.20.3", "commander": "8.3.0", + "dcmjs": "0.43.1", "form-data": ">=4.0.4", "glob-parent": "^6.0.2", "nth-check": "^2.1.1", @@ -995,7 +996,7 @@ "@babel/helper-wrap-function": ["@babel/helper-wrap-function@7.27.1", "", { "dependencies": { "@babel/template": "^7.27.1", "@babel/traverse": "^7.27.1", "@babel/types": "^7.27.1" } }, "sha512-NFJK2sHUvrjo8wAU/nQTWU890/zB2jj0qBcCbZbbf+005cAsv6tMjXz31fBign6M5ov1o0Bllu+9nbqkfsjjJQ=="], - "@babel/helpers": ["@babel/helpers@7.27.6", "", { "dependencies": { "@babel/template": "^7.27.2", "@babel/types": "^7.27.6" } }, "sha512-muE8Tt8M22638HU31A3CgfSUciwz1fhATfoVai05aPXGor//CdWDCbnlY1yvBPo07njuVOCNGCSp/GTt12lIug=="], + "@babel/helpers": ["@babel/helpers@7.28.2", "", { "dependencies": { "@babel/template": "^7.27.2", "@babel/types": "^7.28.2" } }, "sha512-/V9771t+EgXz62aCcyofnQhGM8DQACbRhvzKFsXKC9QM+5MadF8ZmIm0crDMaz3+o0h0zXfJnd4EhbYbxsrcFw=="], "@babel/parser": ["@babel/parser@7.28.0", "", { "dependencies": { "@babel/types": "^7.28.0" }, "bin": "./bin/babel-parser.js" }, "sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g=="], @@ -1143,7 +1144,7 @@ "@babel/plugin-transform-react-pure-annotations": ["@babel/plugin-transform-react-pure-annotations@7.27.1", "", { "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-JfuinvDOsD9FVMTHpzA/pBLisxpv1aSf+OIV8lgH3MuWrks19R27e6a6DipIg4aX1Zm9Wpb04p8wljfKrVSnPA=="], - "@babel/plugin-transform-regenerator": ["@babel/plugin-transform-regenerator@7.28.0", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-LOAozRVbqxEVjSKfhGnuLoE4Kz4Oc5UJzuvFUhSsQzdCdaAQu06mG8zDv2GFSerM62nImUZ7K92vxnQcLSDlCQ=="], + "@babel/plugin-transform-regenerator": ["@babel/plugin-transform-regenerator@7.28.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-P0QiV/taaa3kXpLY+sXla5zec4E+4t4Aqc9ggHlfZ7a2cp8/x/Gv08jfwEtn9gnnYIMvHx6aoOZ8XJL8eU71Dg=="], "@babel/plugin-transform-regexp-modifiers": ["@babel/plugin-transform-regexp-modifiers@7.27.1", "", { "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-TtEciroaiODtXvLZv4rmfMhkCv8jx3wgKpL68PuiPh2M4fvz5jhsA7697N1gMvkvr/JTF13DrFYyEbY9U7cVPA=="], @@ -1183,27 +1184,25 @@ "@babel/register": ["@babel/register@7.27.1", "", { "dependencies": { "clone-deep": "^4.0.1", "find-cache-dir": "^2.0.0", "make-dir": "^2.1.0", "pirates": "^4.0.6", "source-map-support": "^0.5.16" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-K13lQpoV54LATKkzBpBAEu1GGSIRzxR9f4IN4V8DCDgiUMo2UDGagEZr3lPeVNJPLkWUi5JE4hCHKneVTwQlYQ=="], - "@babel/runtime": ["@babel/runtime@7.27.6", "", {}, "sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q=="], + "@babel/runtime": ["@babel/runtime@7.28.2", "", {}, "sha512-KHp2IflsnGywDjBWDkR9iEqiWSpc8GIi0lgTT3mOElT0PP1tG26P4tmFI2YvAdzgq9RGyoHZQEIEdZy6Ec5xCA=="], - "@babel/runtime-corejs2": ["@babel/runtime-corejs2@7.27.6", "", { "dependencies": { "core-js": "^2.6.12" } }, "sha512-WgvlQpGnm1rmvgrm+H+cVcAckEPlwURUCvv1ZVSFr9J9yixgFbNlu7+CjVKKAd4xQtMijPwxwcSi5SFFHKlmDw=="], + "@babel/runtime-corejs2": ["@babel/runtime-corejs2@7.28.2", "", { "dependencies": { "core-js": "^2.6.12" } }, "sha512-dUImRLTCIBuPXKItbP0Bdl7NfLQgDOnNSzsW4Ah17hylLyJMpWujyJ6ppWUIcOErlUAUXUMAGMtj71OLl5OhIQ=="], - "@babel/runtime-corejs3": ["@babel/runtime-corejs3@7.28.0", "", { "dependencies": { "core-js-pure": "^3.43.0" } }, "sha512-nlIXnSqLcBij8K8TtkxbBJgfzfvi75V1pAKSM7dUXejGw12vJAqez74jZrHTsJ3Z+Aczc5Q/6JgNjKRMsVU44g=="], + "@babel/runtime-corejs3": ["@babel/runtime-corejs3@7.28.2", "", { "dependencies": { "core-js-pure": "^3.43.0" } }, "sha512-FVFaVs2/dZgD3Y9ZD+AKNKjyGKzwu0C54laAXWUXgLcVXcCX6YZ6GhK2cp7FogSN2OA0Fu+QT8dP3FUdo9ShSQ=="], "@babel/template": ["@babel/template@7.27.2", "", { "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/parser": "^7.27.2", "@babel/types": "^7.27.1" } }, "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw=="], "@babel/traverse": ["@babel/traverse@7.28.0", "", { "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.0", "@babel/helper-globals": "^7.28.0", "@babel/parser": "^7.28.0", "@babel/template": "^7.27.2", "@babel/types": "^7.28.0", "debug": "^4.3.1" } }, "sha512-mGe7UK5wWyh0bKRfupsUchrQGqvDbZDbKJw+kcRGSmdHVYrv+ltd0pnpDTVpiTqnaBru9iEvA8pz8W46v0Amwg=="], - "@babel/types": ["@babel/types@7.28.0", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1" } }, "sha512-jYnje+JyZG5YThjHiF28oT4SIZLnYOcSBb6+SDaFIyzDVSkXQmQQYclJ2R+YxcdmK0AX6x1E5OQNtuh3jHDrUg=="], + "@babel/types": ["@babel/types@7.28.2", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1" } }, "sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ=="], "@base2/pretty-print-object": ["@base2/pretty-print-object@1.0.1", "", {}, "sha512-4iri8i1AqYHJE2DstZYkyEprg6Pq6sKx3xn5FpySk9sNhH7qN2LLlHJCfDTZRILNwQNPD7mATWM0TBui7uC1pA=="], "@bcoe/v8-coverage": ["@bcoe/v8-coverage@0.2.3", "", {}, "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw=="], - "@colors/colors": ["@colors/colors@1.5.0", "", {}, "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ=="], + "@cornerstonejs/adapters": ["@cornerstonejs/adapters@3.32.5", "", { "dependencies": { "@babel/runtime-corejs2": "^7.17.8", "buffer": "^6.0.3", "dcmjs": "^0.43.1", "gl-matrix": "^3.4.3", "ndarray": "^1.0.19" }, "peerDependencies": { "@cornerstonejs/core": "^3.32.5", "@cornerstonejs/tools": "^3.32.5" } }, "sha512-tpd+sHjE54VOqme83HZ9XqGKztjikrwbrWR4M3e8X+fuR6LJ+qNQ6+YkPdfThzu0KxN+q8mO5aSvGyJo82rRnA=="], - "@cornerstonejs/adapters": ["@cornerstonejs/adapters@3.30.3", "", { "dependencies": { "@babel/runtime-corejs2": "^7.17.8", "buffer": "^6.0.3", "dcmjs": "^0.42.0", "gl-matrix": "^3.4.3", "ndarray": "^1.0.19" }, "peerDependencies": { "@cornerstonejs/core": "^3.30.3", "@cornerstonejs/tools": "^3.30.3" } }, "sha512-rlppvJBjty9fkoFpWdRoPYKB2CGtCp+AiTQBk1OnM181Ok7r+NFEoe7e1PARHjbMjrH/Y5vOLnqEon/ABdbm8A=="], - - "@cornerstonejs/ai": ["@cornerstonejs/ai@3.30.3", "", { "dependencies": { "@babel/runtime-corejs2": "^7.17.8", "buffer": "^6.0.3", "dcmjs": "^0.42.0", "gl-matrix": "^3.4.3", "lodash.clonedeep": "^4.5.0", "ndarray": "^1.0.19", "onnxruntime-common": "1.17.1", "onnxruntime-web": "1.17.1" }, "peerDependencies": { "@cornerstonejs/core": "^3.30.3", "@cornerstonejs/tools": "^3.30.3" } }, "sha512-KNz/FLhoBZFJkrlMIfmS7PCSwBH9YEcg5Sh0HKw3GxpV6XE1H9tKl2c5oH/DHuJFj8gMC2FRnH6rOx3x+BpOrQ=="], + "@cornerstonejs/ai": ["@cornerstonejs/ai@3.32.5", "", { "dependencies": { "@babel/runtime-corejs2": "^7.17.8", "buffer": "^6.0.3", "dcmjs": "^0.43.1", "gl-matrix": "^3.4.3", "lodash.clonedeep": "^4.5.0", "ndarray": "^1.0.19", "onnxruntime-common": "1.17.1", "onnxruntime-web": "1.17.1" }, "peerDependencies": { "@cornerstonejs/core": "^3.32.5", "@cornerstonejs/tools": "^3.32.5" } }, "sha512-j7paST1ounIAvJYS9/qqOsjknjdFcfcNdwCKiwB5KpobL2/BmYNl4kEZNdYXZPhFfQPQvgpW71OedxkDdwaJ2A=="], "@cornerstonejs/calculate-suv": ["@cornerstonejs/calculate-suv@1.1.0", "", {}, "sha512-Q9XraiDJif9aMFArD2iEuDO/HXbcRVCqB7KfaHgDrdTTjgDFovS91Psbdim7crypRSvE6dh/+HKeFNHdvNkA6w=="], @@ -1215,15 +1214,15 @@ "@cornerstonejs/codec-openjph": ["@cornerstonejs/codec-openjph@2.4.7", "", {}, "sha512-qvP4q4JDib7mi9r7LqKOwqz7YZ8gjtDX4ZCezeYf8+eb7MBXCz5uXAMeVF3yz9Axw4XiIMdB/pqXkm8tqCl13w=="], - "@cornerstonejs/core": ["@cornerstonejs/core@3.30.3", "", { "dependencies": { "@kitware/vtk.js": "32.12.1", "comlink": "^4.4.1", "gl-matrix": "^3.4.3", "loglevel": "^1.9.2" } }, "sha512-nGfMNpL4VnPnYTDKBWgDxLpWLl/E3QUoEtScZDN5rKSQrocO/WgX2pt2vxBjbfI5NVPtngR3ly/qffg13EeOaw=="], + "@cornerstonejs/core": ["@cornerstonejs/core@3.32.5", "", { "dependencies": { "@kitware/vtk.js": "32.12.1", "comlink": "^4.4.1", "gl-matrix": "^3.4.3", "loglevel": "^1.9.2" } }, "sha512-6m/ODfSyM+8/ZigD2wM2wl8yjxmDx9DTen/R5nxCHUe4sqK97PKjfmcN5OK9cOCzwlzqQBZTFow1Ra6UAfkKCA=="], - "@cornerstonejs/dicom-image-loader": ["@cornerstonejs/dicom-image-loader@3.30.3", "", { "dependencies": { "@cornerstonejs/codec-charls": "^1.2.3", "@cornerstonejs/codec-libjpeg-turbo-8bit": "^1.2.2", "@cornerstonejs/codec-openjpeg": "^1.2.2", "@cornerstonejs/codec-openjph": "^2.4.5", "comlink": "^4.4.1", "dicom-parser": "^1.8.9", "jpeg-lossless-decoder-js": "^2.1.0", "pako": "^2.0.4", "uuid": "^9.0.0" }, "peerDependencies": { "@cornerstonejs/core": "^3.30.3" } }, "sha512-RK6X/MXGMMqj5khvW21/pGcrcYWfcIe0pGmYwE0iAY1zacqwVNB3EwoNfH2EqxyD6Noe0fDondZoW2laSbh+Kw=="], + "@cornerstonejs/dicom-image-loader": ["@cornerstonejs/dicom-image-loader@3.32.5", "", { "dependencies": { "@cornerstonejs/codec-charls": "^1.2.3", "@cornerstonejs/codec-libjpeg-turbo-8bit": "^1.2.2", "@cornerstonejs/codec-openjpeg": "^1.2.2", "@cornerstonejs/codec-openjph": "^2.4.5", "comlink": "^4.4.1", "dicom-parser": "^1.8.9", "jpeg-lossless-decoder-js": "^2.1.0", "pako": "^2.0.4", "uuid": "^9.0.0" }, "peerDependencies": { "@cornerstonejs/core": "^3.32.5" } }, "sha512-fOUkphjdzTG8Flw0XV4bGUEZtbASeE2/Y+HssKr4PiwiDvGcVvVQF7RxyKkvabP3OsZIAaBOhPB8ghKEEXDp2w=="], - "@cornerstonejs/labelmap-interpolation": ["@cornerstonejs/labelmap-interpolation@3.30.3", "", { "dependencies": { "@itk-wasm/morphological-contour-interpolation": "1.1.0", "itk-wasm": "1.0.0-b.165" }, "peerDependencies": { "@cornerstonejs/core": "^3.30.3", "@cornerstonejs/tools": "^3.30.3", "@kitware/vtk.js": "32.12.1" } }, "sha512-WVPqidTTO9mWaSir0uERHqRmXAOl9CzP5EhAumoR/sZaQv0ZUDhkyOjc8jv8MZftSTRLSnlr0Ovy/Tnfxwl45w=="], + "@cornerstonejs/labelmap-interpolation": ["@cornerstonejs/labelmap-interpolation@3.32.5", "", { "dependencies": { "@itk-wasm/morphological-contour-interpolation": "1.1.0", "itk-wasm": "1.0.0-b.165" }, "peerDependencies": { "@cornerstonejs/core": "^3.32.5", "@cornerstonejs/tools": "^3.32.5", "@kitware/vtk.js": "32.12.1" } }, "sha512-+E476+jgAAOGUVUcdMD0D2K5/yHfc3rCVCgApfZ9H5mOaEavVHPjGxomFkE5twnBfQIBKgTos3968anl21ziAw=="], - "@cornerstonejs/polymorphic-segmentation": ["@cornerstonejs/polymorphic-segmentation@3.30.3", "", { "dependencies": { "@icr/polyseg-wasm": "0.4.0" }, "peerDependencies": { "@cornerstonejs/core": "^3.30.3", "@cornerstonejs/tools": "^3.30.3", "@kitware/vtk.js": "32.12.1" } }, "sha512-5LWPRroG6fYdk/CmTKUYyop1M6BUAT5qrXWvMD3xsWMKMW5ScQohRoPZX4hLIfxuhb/ckuiiQwNqixgcDOH2Gw=="], + "@cornerstonejs/polymorphic-segmentation": ["@cornerstonejs/polymorphic-segmentation@3.32.5", "", { "dependencies": { "@icr/polyseg-wasm": "0.4.0" }, "peerDependencies": { "@cornerstonejs/core": "^3.32.5", "@cornerstonejs/tools": "^3.32.5", "@kitware/vtk.js": "32.12.1" } }, "sha512-MyG1ULFhOEdc8ud+5NJhVUmlBis61K3IWod1UYxZM4VdY7kivbdPbWXaynhnYTUg5OeXGPsETLWdLw/5E32mag=="], - "@cornerstonejs/tools": ["@cornerstonejs/tools@3.30.3", "", { "dependencies": { "@types/offscreencanvas": "2019.7.3", "comlink": "^4.4.1", "lodash.get": "^4.4.2" }, "peerDependencies": { "@cornerstonejs/core": "^3.30.3", "@kitware/vtk.js": "32.12.1", "@types/d3-array": "^3.0.4", "@types/d3-interpolate": "^3.0.1", "d3-array": "^3.2.3", "d3-interpolate": "^3.0.1", "gl-matrix": "^3.4.3" } }, "sha512-E+Zy+1FvRLOeElCwYmuRdrtwBqbctAhrqCVZNgM3n4vVdakakGnuHFxOJ2eO17LdSEQaCX1hGEFrFQ8UbuCsiw=="], + "@cornerstonejs/tools": ["@cornerstonejs/tools@3.32.5", "", { "dependencies": { "@types/offscreencanvas": "2019.7.3", "comlink": "^4.4.1", "lodash.get": "^4.4.2" }, "peerDependencies": { "@cornerstonejs/core": "^3.32.5", "@kitware/vtk.js": "32.12.1", "@types/d3-array": "^3.0.4", "@types/d3-interpolate": "^3.0.1", "d3-array": "^3.2.3", "d3-interpolate": "^3.0.1", "gl-matrix": "^3.4.3" } }, "sha512-h1UWy/u8Cz1QPsMvbNF+rRGwaEdRnGwCbOSZQwLzYOuvaV+rvGAI6l+Xbhe9zUgzE1lSbBigiQjdGHiNtnVWPQ=="], "@cspotcode/source-map-support": ["@cspotcode/source-map-support@0.8.1", "", { "dependencies": { "@jridgewell/trace-mapping": "0.3.9" } }, "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw=="], @@ -1257,17 +1256,17 @@ "@csstools/selector-specificity": ["@csstools/selector-specificity@2.2.0", "", { "peerDependencies": { "postcss-selector-parser": "^6.0.10" } }, "sha512-+OJ9konv95ClSTOJCmMZqpd5+YGsB2S+x6w3E1oaM8UuR5j8nTNHYSz8c9BEPGDOCMQYIEEGlVPj/VY64iTbGw=="], - "@cypress/request": ["@cypress/request@3.0.8", "", { "dependencies": { "aws-sign2": "~0.7.0", "aws4": "^1.8.0", "caseless": "~0.12.0", "combined-stream": "~1.0.6", "extend": "~3.0.2", "forever-agent": "~0.6.1", "form-data": "~4.0.0", "http-signature": "~1.4.0", "is-typedarray": "~1.0.0", "isstream": "~0.1.2", "json-stringify-safe": "~5.0.1", "mime-types": "~2.1.19", "performance-now": "^2.1.0", "qs": "6.14.0", "safe-buffer": "^5.1.2", "tough-cookie": "^5.0.0", "tunnel-agent": "^0.6.0", "uuid": "^8.3.2" } }, "sha512-h0NFgh1mJmm1nr4jCwkGHwKneVYKghUyWe6TMNrk0B9zsjAJxpg8C4/+BAcmLgCPa1vj1V8rNUaILl+zYRUWBQ=="], + "@cypress/request": ["@cypress/request@3.0.9", "", { "dependencies": { "aws-sign2": "~0.7.0", "aws4": "^1.8.0", "caseless": "~0.12.0", "combined-stream": "~1.0.6", "extend": "~3.0.2", "forever-agent": "~0.6.1", "form-data": "~4.0.4", "http-signature": "~1.4.0", "is-typedarray": "~1.0.0", "isstream": "~0.1.2", "json-stringify-safe": "~5.0.1", "mime-types": "~2.1.19", "performance-now": "^2.1.0", "qs": "6.14.0", "safe-buffer": "^5.1.2", "tough-cookie": "^5.0.0", "tunnel-agent": "^0.6.0", "uuid": "^8.3.2" } }, "sha512-I3l7FdGRXluAS44/0NguwWlO83J18p0vlr2FYHrJkWdNYhgVoiYo61IXPqaOsL+vNxU1ZqMACzItGK3/KKDsdw=="], "@cypress/xvfb": ["@cypress/xvfb@1.2.4", "", { "dependencies": { "debug": "^3.1.0", "lodash.once": "^4.1.1" } }, "sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q=="], "@discoveryjs/json-ext": ["@discoveryjs/json-ext@0.5.7", "", {}, "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw=="], - "@emnapi/core": ["@emnapi/core@1.4.4", "", { "dependencies": { "@emnapi/wasi-threads": "1.0.3", "tslib": "^2.4.0" } }, "sha512-A9CnAbC6ARNMKcIcrQwq6HeHCjpcBZ5wSx4U01WXCqEKlrzB9F9315WDNHkrs2xbx7YjjSxbUYxuN6EQzpcY2g=="], + "@emnapi/core": ["@emnapi/core@1.4.5", "", { "dependencies": { "@emnapi/wasi-threads": "1.0.4", "tslib": "^2.4.0" } }, "sha512-XsLw1dEOpkSX/WucdqUhPWP7hDxSvZiY+fsUC14h+FtQ2Ifni4znbBt8punRX+Uj2JG/uDb8nEHVKvrVlvdZ5Q=="], - "@emnapi/runtime": ["@emnapi/runtime@1.4.4", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-hHyapA4A3gPaDCNfiqyZUStTMqIkKRshqPIuDOXv1hcBnD4U3l8cP0T1HMCfGRxQ6V64TGCcoswChANyOAwbQg=="], + "@emnapi/runtime": ["@emnapi/runtime@1.4.5", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-++LApOtY0pEEz1zrd9vy1/zXVaVJJ/EbAF3u0fXIzPJEDtnITsBGbbK0EkM72amhl/R5b+5xx0Y/QhcVOpuulg=="], - "@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.0.3", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-8K5IFFsQqF9wQNJptGbS6FNKgUTsSRYnTqNCG1vPP8jFdjSv18n2mQfJpkt2Oibo9iBEzcDnDxNwKTzC7svlJw=="], + "@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.0.4", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-PJR+bOmMOPH8AtcTGAyYNiuJ3/Fcoj2XN/gBEWzDIKh254XO+mM9XoXHk5GNEhodxeMznbg7BlRojVbKN+gC6g=="], "@emotion/babel-plugin": ["@emotion/babel-plugin@11.13.5", "", { "dependencies": { "@babel/helper-module-imports": "^7.16.7", "@babel/runtime": "^7.18.3", "@emotion/hash": "^0.9.2", "@emotion/memoize": "^0.9.0", "@emotion/serialize": "^1.3.3", "babel-plugin-macros": "^3.1.0", "convert-source-map": "^1.5.0", "escape-string-regexp": "^4.0.0", "find-root": "^1.1.0", "source-map": "^0.5.7", "stylis": "4.2.0" } }, "sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ=="], @@ -1435,9 +1434,9 @@ "@jsonjoy.com/base64": ["@jsonjoy.com/base64@1.1.2", "", { "peerDependencies": { "tslib": "2" } }, "sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA=="], - "@jsonjoy.com/json-pack": ["@jsonjoy.com/json-pack@1.2.0", "", { "dependencies": { "@jsonjoy.com/base64": "^1.1.1", "@jsonjoy.com/util": "^1.1.2", "hyperdyperid": "^1.2.0", "thingies": "^1.20.0" }, "peerDependencies": { "tslib": "2" } }, "sha512-io1zEbbYcElht3tdlqEOFxZ0dMTYrHz9iMf0gqn1pPjZFTCgM5R4R5IMA20Chb2UPYYsxjzs8CgZ7Nb5n2K2rA=="], + "@jsonjoy.com/json-pack": ["@jsonjoy.com/json-pack@1.4.0", "", { "dependencies": { "@jsonjoy.com/base64": "^1.1.1", "@jsonjoy.com/util": "^1.1.2", "hyperdyperid": "^1.2.0", "thingies": "^1.20.0" }, "peerDependencies": { "tslib": "2" } }, "sha512-Akn8XZqN3xO9YGcgvIiTauBBXTP92QSvw6EcGha+p5nm7brhbwvev5gw4fi+ouLGrBpfPpb72+S5pxl4mkMIGQ=="], - "@jsonjoy.com/util": ["@jsonjoy.com/util@1.6.0", "", { "peerDependencies": { "tslib": "2" } }, "sha512-sw/RMbehRhN68WRtcKCpQOPfnH6lLP4GJfqzi3iYej8tnzpZUDr6UkZYJjcjjC0FWEJOJbyM3PTIwxucUmDG2A=="], + "@jsonjoy.com/util": ["@jsonjoy.com/util@1.8.0", "", { "peerDependencies": { "tslib": "2" } }, "sha512-HeR0JQNEdBozt+FrfyM5T0X3R+fIN0D+BRDkxPP5o41fTWzHfeZEqtK16aTW8haU+h+SG7XYq9PP5kobvOmkSA=="], "@juggle/resize-observer": ["@juggle/resize-observer@3.4.0", "", {}, "sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA=="], @@ -1463,17 +1462,17 @@ "@microsoft/tsdoc-config": ["@microsoft/tsdoc-config@0.16.2", "", { "dependencies": { "@microsoft/tsdoc": "0.14.2", "ajv": "~6.12.6", "jju": "~1.4.0", "resolve": "~1.19.0" } }, "sha512-OGiIzzoBLgWWR0UdRJX98oYO+XKGf7tiK4Zk6tQ/E4IJqGCe7dvkTvgDZV5cFJUzLGDOjeAXrnZoA6QkVySuxw=="], - "@module-federation/error-codes": ["@module-federation/error-codes@0.15.0", "", {}, "sha512-CFJSF+XKwTcy0PFZ2l/fSUpR4z247+Uwzp1sXVkdIfJ/ATsnqf0Q01f51qqSEA6MYdQi6FKos9FIcu3dCpQNdg=="], + "@module-federation/error-codes": ["@module-federation/error-codes@0.17.0", "", {}, "sha512-+pZ12frhaDqh4Xs/MQj4Vu4CAjnJTiEb8Z6fqPfn/TLHh4YLWMOzpzxGuMFDHqXwMb3o8FRAUhNB0eX2ZmhwTA=="], - "@module-federation/runtime": ["@module-federation/runtime@0.15.0", "", { "dependencies": { "@module-federation/error-codes": "0.15.0", "@module-federation/runtime-core": "0.15.0", "@module-federation/sdk": "0.15.0" } }, "sha512-dTPsCNum9Bhu3yPOcrPYq0YnM9eCMMMNB1wuiqf1+sFbQlNApF0vfZxooqz3ln0/MpgE0jerVvFsLVGfqvC9Ug=="], + "@module-federation/runtime": ["@module-federation/runtime@0.17.0", "", { "dependencies": { "@module-federation/error-codes": "0.17.0", "@module-federation/runtime-core": "0.17.0", "@module-federation/sdk": "0.17.0" } }, "sha512-eMtrtCSSV6neJpMmQ8WdFpYv93raSgsG5RiAPsKUuSCXfZ5D+yzvleZ+gPcEpFT9HokmloxAn0jep50/1upTQw=="], - "@module-federation/runtime-core": ["@module-federation/runtime-core@0.15.0", "", { "dependencies": { "@module-federation/error-codes": "0.15.0", "@module-federation/sdk": "0.15.0" } }, "sha512-RYzI61fRDrhyhaEOXH3AgIGlHiot0wPFXu7F43cr+ZnTi+VlSYWLdlZ4NBuT9uV6JSmH54/c+tEZm5SXgKR2sQ=="], + "@module-federation/runtime-core": ["@module-federation/runtime-core@0.17.0", "", { "dependencies": { "@module-federation/error-codes": "0.17.0", "@module-federation/sdk": "0.17.0" } }, "sha512-MYwDDevYnBB9gXFfNOmJVIX5XZcbCHd0dral7gT7yVmlwOhbuGOLlm2dh2icwwdCYHA9AFDCfU9l1nJR4ex/ng=="], - "@module-federation/runtime-tools": ["@module-federation/runtime-tools@0.15.0", "", { "dependencies": { "@module-federation/runtime": "0.15.0", "@module-federation/webpack-bundler-runtime": "0.15.0" } }, "sha512-kzFn3ObUeBp5vaEtN1WMxhTYBuYEErxugu1RzFUERD21X3BZ+b4cWwdFJuBDlsmVjctIg/QSOoZoPXRKAO0foA=="], + "@module-federation/runtime-tools": ["@module-federation/runtime-tools@0.17.0", "", { "dependencies": { "@module-federation/runtime": "0.17.0", "@module-federation/webpack-bundler-runtime": "0.17.0" } }, "sha512-t4QcKfhmwOHedwByDKUlTQVw4+gPotySYPyNa8GFrBSr1F6wcGdGyOhzP+PdgpiJLIM03cB6V+IKGGHE28SfDQ=="], - "@module-federation/sdk": ["@module-federation/sdk@0.15.0", "", {}, "sha512-PWiYbGcJrKUD6JZiEPihrXhV3bgXdll4bV7rU+opV7tHaun+Z0CdcawjZ82Xnpb8MCPGmqHwa1MPFeUs66zksw=="], + "@module-federation/sdk": ["@module-federation/sdk@0.17.0", "", {}, "sha512-tjrNaYdDocHZsWu5iXlm83lwEK8A64r4PQB3/kY1cW1iOvggR2RESLAWPxRJXC2cLF8fg8LDKOBdgERZW1HPFA=="], - "@module-federation/webpack-bundler-runtime": ["@module-federation/webpack-bundler-runtime@0.15.0", "", { "dependencies": { "@module-federation/runtime": "0.15.0", "@module-federation/sdk": "0.15.0" } }, "sha512-i+3wu2Ljh2TmuUpsnjwZVupOVqV50jP0ndA8PSP4gwMKlgdGeaZ4VH5KkHAXGr2eiYUxYLMrJXz1+eILJqeGDg=="], + "@module-federation/webpack-bundler-runtime": ["@module-federation/webpack-bundler-runtime@0.17.0", "", { "dependencies": { "@module-federation/runtime": "0.17.0", "@module-federation/sdk": "0.17.0" } }, "sha512-o8XtXwqTDlqLgcALOfObcCbqXvUcSDHIEXrkcb4W+I8GJY7IqV0+x6rX4mJ3f59tca9qOF8zsZsOA6BU93Pvgw=="], "@msgpack/msgpack": ["@msgpack/msgpack@2.8.0", "", {}, "sha512-h9u4u/jiIRKbq25PM+zymTyW6bhTzELvOoUd+AvYriWOAKpLGnIamaET3pnHYoI5iYphAHBI4ayx0MehR+VVPQ=="], @@ -1483,7 +1482,7 @@ "@multiformats/sha3": ["@multiformats/sha3@3.0.2", "", { "dependencies": { "js-sha3": "^0.9.1", "multiformats": "^13.0.0" } }, "sha512-fBxODTXa1sOWYB9q6GSFe2HYSVwMEdnPa7c7FgNhr/rMFQ2HGtwmRppTm317HSpGSTUkoTvyKQDNcteJEGU+bg=="], - "@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@0.2.12", "", { "dependencies": { "@emnapi/core": "^1.4.3", "@emnapi/runtime": "^1.4.3", "@tybys/wasm-util": "^0.10.0" } }, "sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ=="], + "@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@1.0.1", "", { "dependencies": { "@emnapi/core": "^1.4.5", "@emnapi/runtime": "^1.4.5", "@tybys/wasm-util": "^0.10.0" } }, "sha512-KVlQ/jgywZpixGCKMNwxStmmbYEMyokZpCf2YuIChhfJA2uqfAKNEM8INz7zzTo55iEXfBhIIs3VqYyqzDLj8g=="], "@ndelangen/get-tarball": ["@ndelangen/get-tarball@3.0.9", "", { "dependencies": { "gunzip-maybe": "^1.4.2", "pump": "^3.0.0", "tar-fs": "^2.1.1" } }, "sha512-9JKTEik4vq+yGosHYhZ1tiH/3WpUS0Nh0kej4Agndhox8pAdWhEx5knFVRcb/ya9knCRCs1rPxNrSXTDdfVqpA=="], @@ -1639,9 +1638,9 @@ "@pkgjs/parseargs": ["@pkgjs/parseargs@0.11.0", "", {}, "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg=="], - "@pkgr/core": ["@pkgr/core@0.2.7", "", {}, "sha512-YLT9Zo3oNPJoBjBc4q8G2mjU4tqIbf5CEOORbUUr48dCD9q3umJ3IPlVqOqDakPfd2HuwccBaqlGhN4Gmr5OWg=="], + "@pkgr/core": ["@pkgr/core@0.2.9", "", {}, "sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA=="], - "@playwright/test": ["@playwright/test@1.54.0", "", { "dependencies": { "playwright": "1.54.0" }, "bin": { "playwright": "cli.js" } }, "sha512-6Mnd5daQmLivaLu5kxUg6FxPtXY4sXsS5SUwKjWNy4ISe4pKraNHoFxcsaTFiNUULbjy0Vlb5HT86QuM0Jy1pQ=="], + "@playwright/test": ["@playwright/test@1.54.1", "", { "dependencies": { "playwright": "1.54.1" }, "bin": { "playwright": "cli.js" } }, "sha512-FS8hQ12acieG2dYSksmLOF7BNxnVf2afRJdCuM1eMSxj6QTSE6G4InGF7oApGgDb65MX7AwMVlIkpru0yZA4Xw=="], "@pmmmwh/react-refresh-webpack-plugin": ["@pmmmwh/react-refresh-webpack-plugin@0.5.17", "", { "dependencies": { "ansi-html": "^0.0.9", "core-js-pure": "^3.23.3", "error-stack-parser": "^2.0.6", "html-entities": "^2.1.0", "loader-utils": "^2.0.4", "schema-utils": "^4.2.0", "source-map": "^0.7.3" }, "peerDependencies": { "@types/webpack": "4.x || 5.x", "react-refresh": ">=0.10.0 <1.0.0", "sockjs-client": "^1.4.0", "type-fest": ">=0.17.0 <5.0.0", "webpack": ">=4.43.0 <6.0.0", "webpack-dev-server": "3.x || 4.x || 5.x", "webpack-hot-middleware": "2.x", "webpack-plugin-serve": "0.x || 1.x" }, "optionalPeers": ["@types/webpack", "sockjs-client", "type-fest", "webpack-dev-server", "webpack-hot-middleware", "webpack-plugin-serve"] }, "sha512-tXDyE1/jzFsHXjhRZQ3hMl0IVhYe5qula43LDWIhVfjp9G/nT5OQY5AORVOrkEGAUltBJOfOWeETbmhm6kHhuQ=="], @@ -1781,35 +1780,35 @@ "@rollup/rollup-linux-x64-gnu": ["@rollup/rollup-linux-x64-gnu@4.13.0", "", { "os": "linux", "cpu": "x64" }, "sha512-yUD/8wMffnTKuiIsl6xU+4IA8UNhQ/f1sAnQebmE/lyQ8abjsVyDkyRkWop0kdMhKMprpNIhPmYlCxgHrPoXoA=="], - "@rsbuild/core": ["@rsbuild/core@1.4.6", "", { "dependencies": { "@rspack/core": "1.4.6", "@rspack/lite-tapable": "~1.0.1", "@swc/helpers": "^0.5.17", "core-js": "~3.44.0", "jiti": "^2.4.2" }, "bin": { "rsbuild": "bin/rsbuild.js" } }, "sha512-Z5e7ExKGmLv/wvBQEgSE2bPpR9movvq0jnfXjtYzrLzJFGsKFwL/5KShgdr6hUtVGGLoCCCHHHaTBL6BPcNvZA=="], + "@rsbuild/core": ["@rsbuild/core@1.4.11", "", { "dependencies": { "@rspack/core": "1.4.10", "@rspack/lite-tapable": "~1.0.1", "@swc/helpers": "^0.5.17", "core-js": "~3.44.0", "jiti": "^2.5.0" }, "bin": { "rsbuild": "bin/rsbuild.js" } }, "sha512-G5x7jUGxVw0Z984IEKmOP/tW8gslhUjN81D3fuogKb95hlESWpc+LuckuA5iO1ydbLVrhuYKLv1tC8wTAIDsqA=="], - "@rsbuild/plugin-node-polyfill": ["@rsbuild/plugin-node-polyfill@1.3.0", "", { "dependencies": { "assert": "^2.1.0", "browserify-zlib": "^0.2.0", "buffer": "^5.7.1", "console-browserify": "^1.2.0", "constants-browserify": "^1.0.0", "crypto-browserify": "^3.12.1", "domain-browser": "^5.7.0", "events": "^3.3.0", "https-browserify": "^1.0.0", "os-browserify": "^0.3.0", "path-browserify": "^1.0.1", "process": "^0.11.10", "punycode": "^2.3.1", "querystring-es3": "^0.2.1", "readable-stream": "^4.5.2", "stream-browserify": "^3.0.0", "stream-http": "^3.2.0", "string_decoder": "^1.3.0", "timers-browserify": "^2.0.12", "tty-browserify": "^0.0.1", "url": "^0.11.4", "util": "^0.12.5", "vm-browserify": "^1.1.2" }, "peerDependencies": { "@rsbuild/core": "1.x" }, "optionalPeers": ["@rsbuild/core"] }, "sha512-KvckyUg9wq3F1Iv/y4+mlcnO/E7vDklvMY7kF6CxnUYImroQVw/EDS0zDezkPvcm7aKTH5b0Jaa0iIcTNFzhVw=="], + "@rsbuild/plugin-node-polyfill": ["@rsbuild/plugin-node-polyfill@1.3.2", "", { "dependencies": { "assert": "^2.1.0", "browserify-zlib": "^0.2.0", "buffer": "^5.7.1", "console-browserify": "^1.2.0", "constants-browserify": "^1.0.0", "crypto-browserify": "^3.12.1", "domain-browser": "^5.7.0", "events": "^3.3.0", "https-browserify": "^1.0.0", "os-browserify": "^0.3.0", "path-browserify": "^1.0.1", "process": "^0.11.10", "punycode": "^2.3.1", "querystring-es3": "^0.2.1", "readable-stream": "^4.7.0", "stream-browserify": "^3.0.0", "stream-http": "^3.2.0", "string_decoder": "^1.3.0", "timers-browserify": "^2.0.12", "tty-browserify": "^0.0.1", "url": "^0.11.4", "util": "^0.12.5", "vm-browserify": "^1.1.2" }, "peerDependencies": { "@rsbuild/core": "1.x" }, "optionalPeers": ["@rsbuild/core"] }, "sha512-r3a0w+5G0fUteEfjkuNh0YXjpIqM48mawtaVhCH4eyXWDU9Pp46MIzB+IYV+gWyzkb8rU4Xrq61QV1bb+FCdfA=="], "@rsbuild/plugin-react": ["@rsbuild/plugin-react@1.3.4", "", { "dependencies": { "@rspack/plugin-react-refresh": "~1.4.3", "react-refresh": "^0.17.0" }, "peerDependencies": { "@rsbuild/core": "1.x" } }, "sha512-PeLmPkUUm+t2cBGBe1WHhw1NNPHDFnKiXnRUGM5WSSlSZWfSi96RbeLqrm+gH6TaefdyvmLvurJu+7tSSUrQjQ=="], - "@rspack/binding": ["@rspack/binding@1.4.6", "", { "optionalDependencies": { "@rspack/binding-darwin-arm64": "1.4.6", "@rspack/binding-darwin-x64": "1.4.6", "@rspack/binding-linux-arm64-gnu": "1.4.6", "@rspack/binding-linux-arm64-musl": "1.4.6", "@rspack/binding-linux-x64-gnu": "1.4.6", "@rspack/binding-linux-x64-musl": "1.4.6", "@rspack/binding-wasm32-wasi": "1.4.6", "@rspack/binding-win32-arm64-msvc": "1.4.6", "@rspack/binding-win32-ia32-msvc": "1.4.6", "@rspack/binding-win32-x64-msvc": "1.4.6" } }, "sha512-rRc6sbKWxhomxxJeqi4QS3S/2T6pKf4JwC/VHXs7KXw7lHXHa3yxPynmn3xHstL0H6VLaM5xQj87Wh7lQYRAPg=="], + "@rspack/binding": ["@rspack/binding@1.4.10", "", { "optionalDependencies": { "@rspack/binding-darwin-arm64": "1.4.10", "@rspack/binding-darwin-x64": "1.4.10", "@rspack/binding-linux-arm64-gnu": "1.4.10", "@rspack/binding-linux-arm64-musl": "1.4.10", "@rspack/binding-linux-x64-gnu": "1.4.10", "@rspack/binding-linux-x64-musl": "1.4.10", "@rspack/binding-wasm32-wasi": "1.4.10", "@rspack/binding-win32-arm64-msvc": "1.4.10", "@rspack/binding-win32-ia32-msvc": "1.4.10", "@rspack/binding-win32-x64-msvc": "1.4.10" } }, "sha512-awiXN7qTTTLWFThbJFL+M4k1if4sb17xKA5TaHbbxs0qKSlpe3adwNrNHaNU2WOQz+PbuF++OMyd+4gUusKuVg=="], - "@rspack/binding-darwin-arm64": ["@rspack/binding-darwin-arm64@1.4.6", "", { "os": "darwin", "cpu": "arm64" }, "sha512-K37H8e58eY7zBHGeMVtT7m0Z5XvlNQX7YDuaxlbiA4hZxqeRoS5BMX/YOcDiGdNbSuqv+iG5GSckJ99YUI67Cw=="], + "@rspack/binding-darwin-arm64": ["@rspack/binding-darwin-arm64@1.4.10", "", { "os": "darwin", "cpu": "arm64" }, "sha512-PraYGuVSzvEwdoYC8T70qI/8j1QeUe2sysiWmjSdxUpxJsDfw35hK9TfxULeAJULlAUAiiXs03hdZk29DBc3ow=="], - "@rspack/binding-darwin-x64": ["@rspack/binding-darwin-x64@1.4.6", "", { "os": "darwin", "cpu": "x64" }, "sha512-3p5u9q/Q9MMVe+5XFJ/WiFrzNrrxUjJFR19kB1k/KMcf8ox982xWjnfJuBkET/k7Hn0EZL7L06ym447uIfAVAg=="], + "@rspack/binding-darwin-x64": ["@rspack/binding-darwin-x64@1.4.10", "", { "os": "darwin", "cpu": "x64" }, "sha512-rWTSJ08TE0uqUjqAHkTmWqJu+FLSJ70A199Fk9k/FLZTS8UtHjuzZW7rv4qIN2nwJJLherxFUnP6y69cHuaGNw=="], - "@rspack/binding-linux-arm64-gnu": ["@rspack/binding-linux-arm64-gnu@1.4.6", "", { "os": "linux", "cpu": "arm64" }, "sha512-ZrrCn5b037ImZfZ3MShJrRw4d5M3Tq2rFJupr+SGMg7GTl2T6xEmo3ER/evHlT6e0ETi6tRWPxC9A1125jbSQA=="], + "@rspack/binding-linux-arm64-gnu": ["@rspack/binding-linux-arm64-gnu@1.4.10", "", { "os": "linux", "cpu": "arm64" }, "sha512-cs6yu250FzRU1hl+02VLoJRdzbAveTOqvREeHgqL5AiTc6q1dQo1IZ16/Qt4+g0DMjnvM66pELRIO2nphXL8aA=="], - "@rspack/binding-linux-arm64-musl": ["@rspack/binding-linux-arm64-musl@1.4.6", "", { "os": "linux", "cpu": "arm64" }, "sha512-0a30oR6ZmZrqmsOHQYrbZPCxAgnqAiqlbFozdhHs+Yu2bS7SDiLpdjMg0PHwLZT2+siiMWsLodFZlXRJE54oAQ=="], + "@rspack/binding-linux-arm64-musl": ["@rspack/binding-linux-arm64-musl@1.4.10", "", { "os": "linux", "cpu": "arm64" }, "sha512-NnOAoWkpZvOa+xM7NAJg25O+tSKt6xCXoga+gOw5XPni1NxHDc3PNh5bU6fAmc2Z29YLLdxeVqPmIDfdk1EkDg=="], - "@rspack/binding-linux-x64-gnu": ["@rspack/binding-linux-x64-gnu@1.4.6", "", { "os": "linux", "cpu": "x64" }, "sha512-u6pq1aq7bX+NABVDDTOzH64KMj1KJn8fUWO+FaX7Kr7PBjhmxNRs4OaWZjbXEY6COhMYEJZ04h4DhY+lRzcKjA=="], + "@rspack/binding-linux-x64-gnu": ["@rspack/binding-linux-x64-gnu@1.4.10", "", { "os": "linux", "cpu": "x64" }, "sha512-FcaBqMclADWiqX+Mez15kggwaVYZkoEqDiQwYRpYDbBMsiJEtfp41GnNRstTWxYxFbcmuWoZl2cYy+LepR21ag=="], - "@rspack/binding-linux-x64-musl": ["@rspack/binding-linux-x64-musl@1.4.6", "", { "os": "linux", "cpu": "x64" }, "sha512-rjP/1dWKB828kzd4/QpDYNVasUAKDj0OeRJGh5L/RluSH3pEqhxm5FwvndpmFDv6m3iPekZ4IO26UrpGJmE9fw=="], + "@rspack/binding-linux-x64-musl": ["@rspack/binding-linux-x64-musl@1.4.10", "", { "os": "linux", "cpu": "x64" }, "sha512-vgRQhCw+C/Nxv6MZVNUkPzSXs6kIWHIrGKUvOM1ceeAkT+jNFEQdukkQ5LsYgEqEwP9ezWubxN3IGrMxyimlPw=="], - "@rspack/binding-wasm32-wasi": ["@rspack/binding-wasm32-wasi@1.4.6", "", { "dependencies": { "@napi-rs/wasm-runtime": "^0.2.11" }, "cpu": "none" }, "sha512-5M0g7TaWgCFQJr4NKYW2bTLbQJuAQIgZL7WmiDwotgscBJDQWJVBayFEsnM6PYX1Inmu6RNhQ44BKIYwwoSyYw=="], + "@rspack/binding-wasm32-wasi": ["@rspack/binding-wasm32-wasi@1.4.10", "", { "dependencies": { "@napi-rs/wasm-runtime": "^1.0.1" }, "cpu": "none" }, "sha512-lk647+Ob3yvVS2FgW0vCfo/gz9h0Q7v9HGBFcsD1uW0/tSqXMa2s9ZvIn+B7S9tRgIoosXEAuq8NeCXKGWVj5Q=="], - "@rspack/binding-win32-arm64-msvc": ["@rspack/binding-win32-arm64-msvc@1.4.6", "", { "os": "win32", "cpu": "arm64" }, "sha512-thPCdbh4O+uEAJ8AvXBWZIOW0ZopJAN3CX2zlprso8Cnhi4wDseTtrIxFQh7cTo6pR3xSZAIv/zHd+MMF8TImA=="], + "@rspack/binding-win32-arm64-msvc": ["@rspack/binding-win32-arm64-msvc@1.4.10", "", { "os": "win32", "cpu": "arm64" }, "sha512-9mB3kh4pKaY4wFosZwuxb5EUtt7vv/uKW3OF4TJDC35bH7r54s+YYpHyXROT304r6URl4b6HNHlysL2m7BLihg=="], - "@rspack/binding-win32-ia32-msvc": ["@rspack/binding-win32-ia32-msvc@1.4.6", "", { "os": "win32", "cpu": "ia32" }, "sha512-KQmm6c/ZfJKQ/TpzbY6J0pDvUB9kwTXzp+xl2FhGq2RXid8uyDS8ZqbeJA6LDxgttsmp4PRVJjMdLVYjZenfLw=="], + "@rspack/binding-win32-ia32-msvc": ["@rspack/binding-win32-ia32-msvc@1.4.10", "", { "os": "win32", "cpu": "ia32" }, "sha512-DPlyLZDUWkNcFI7zp1BQVVnihd4j/hCIbxqvIKvUt7whIVYMP52i8lCsa52uNGBSj7BcbcKAFElXC9dHVvoQGA=="], - "@rspack/binding-win32-x64-msvc": ["@rspack/binding-win32-x64-msvc@1.4.6", "", { "os": "win32", "cpu": "x64" }, "sha512-WRRhCsJ+xcOmvzo/r/b2UTejPLnDEbaD/te1yQwHe97sUaFGr3u1Njk6lVYRTV6mEvUopEChb8yAq/S4dvaGLg=="], + "@rspack/binding-win32-x64-msvc": ["@rspack/binding-win32-x64-msvc@1.4.10", "", { "os": "win32", "cpu": "x64" }, "sha512-FEE6OM0Wh7nj90+1ARXojT0Dnqox9UlIUIj7MQmX09yeMtckR+HITeq75F8y0l7HUvKOl2zQovmenk1KgyJV8Q=="], - "@rspack/core": ["@rspack/core@1.4.6", "", { "dependencies": { "@module-federation/runtime-tools": "0.15.0", "@rspack/binding": "1.4.6", "@rspack/lite-tapable": "1.0.1" }, "peerDependencies": { "@swc/helpers": ">=0.5.1" }, "optionalPeers": ["@swc/helpers"] }, "sha512-/OpJLv7dPEE7x/qCXGecRm9suNxz5w0Dheq2sh0TjTCUHodtMET3T+FlRWznBAlZeNuHLECDp0DWhchgS8BWuA=="], + "@rspack/core": ["@rspack/core@1.4.10", "", { "dependencies": { "@module-federation/runtime-tools": "0.17.0", "@rspack/binding": "1.4.10", "@rspack/lite-tapable": "1.0.1" }, "peerDependencies": { "@swc/helpers": ">=0.5.1" }, "optionalPeers": ["@swc/helpers"] }, "sha512-eK3H328pihiM1323OlaClKJ9WlqgGBZpcR5AqFoWsG0KD01tKCJOeZEgtCY6paRLrsQrEJwBrLntkG0fE7WNGg=="], "@rspack/lite-tapable": ["@rspack/lite-tapable@1.0.1", "", {}, "sha512-VynGOEsVw2s8TAlLf/uESfrgfrq2+rcXB1muPJYBWbsm1Oa6r5qVQhjA5ggM6z/coYPrsVMgovl3Ff7Q7OCp1w=="], @@ -1959,27 +1958,27 @@ "@svgr/webpack": ["@svgr/webpack@8.1.0", "", { "dependencies": { "@babel/core": "^7.21.3", "@babel/plugin-transform-react-constant-elements": "^7.21.3", "@babel/preset-env": "^7.20.2", "@babel/preset-react": "^7.18.6", "@babel/preset-typescript": "^7.21.0", "@svgr/core": "8.1.0", "@svgr/plugin-jsx": "8.1.0", "@svgr/plugin-svgo": "8.1.0" } }, "sha512-LnhVjMWyMQV9ZmeEy26maJk+8HTIbd59cH4F2MJ439k9DqejRisfFNGAPvRYlKETuh9LrImlS8aKsBgKjMA8WA=="], - "@swc/core": ["@swc/core@1.12.11", "", { "dependencies": { "@swc/counter": "^0.1.3", "@swc/types": "^0.1.23" }, "optionalDependencies": { "@swc/core-darwin-arm64": "1.12.11", "@swc/core-darwin-x64": "1.12.11", "@swc/core-linux-arm-gnueabihf": "1.12.11", "@swc/core-linux-arm64-gnu": "1.12.11", "@swc/core-linux-arm64-musl": "1.12.11", "@swc/core-linux-x64-gnu": "1.12.11", "@swc/core-linux-x64-musl": "1.12.11", "@swc/core-win32-arm64-msvc": "1.12.11", "@swc/core-win32-ia32-msvc": "1.12.11", "@swc/core-win32-x64-msvc": "1.12.11" }, "peerDependencies": { "@swc/helpers": ">=0.5.17" }, "optionalPeers": ["@swc/helpers"] }, "sha512-P3GM+0lqjFctcp5HhR9mOcvLSX3SptI9L1aux0Fuvgt8oH4f92rCUrkodAa0U2ktmdjcyIiG37xg2mb/dSCYSA=="], + "@swc/core": ["@swc/core@1.13.2", "", { "dependencies": { "@swc/counter": "^0.1.3", "@swc/types": "^0.1.23" }, "optionalDependencies": { "@swc/core-darwin-arm64": "1.13.2", "@swc/core-darwin-x64": "1.13.2", "@swc/core-linux-arm-gnueabihf": "1.13.2", "@swc/core-linux-arm64-gnu": "1.13.2", "@swc/core-linux-arm64-musl": "1.13.2", "@swc/core-linux-x64-gnu": "1.13.2", "@swc/core-linux-x64-musl": "1.13.2", "@swc/core-win32-arm64-msvc": "1.13.2", "@swc/core-win32-ia32-msvc": "1.13.2", "@swc/core-win32-x64-msvc": "1.13.2" }, "peerDependencies": { "@swc/helpers": ">=0.5.17" }, "optionalPeers": ["@swc/helpers"] }, "sha512-YWqn+0IKXDhqVLKoac4v2tV6hJqB/wOh8/Br8zjqeqBkKa77Qb0Kw2i7LOFzjFNZbZaPH6AlMGlBwNrxaauaAg=="], - "@swc/core-darwin-arm64": ["@swc/core-darwin-arm64@1.12.11", "", { "os": "darwin", "cpu": "arm64" }, "sha512-J19Jj9Y5x/N0loExH7W0OI9OwwoVyxutDdkyq1o/kgXyBqmmzV7Y/Q9QekI2Fm/qc5mNeAdP7aj4boY4AY/JPw=="], + "@swc/core-darwin-arm64": ["@swc/core-darwin-arm64@1.13.2", "", { "os": "darwin", "cpu": "arm64" }, "sha512-44p7ivuLSGFJ15Vly4ivLJjg3ARo4879LtEBAabcHhSZygpmkP8eyjyWxrH3OxkY1eRZSIJe8yRZPFw4kPXFPw=="], - "@swc/core-darwin-x64": ["@swc/core-darwin-x64@1.12.11", "", { "os": "darwin", "cpu": "x64" }, "sha512-PTuUQrfStQ6cjW+uprGO2lpQHy84/l0v+GqRqq8s/jdK55rFRjMfCeyf6FAR0l6saO5oNOQl+zWR1aNpj8pMQw=="], + "@swc/core-darwin-x64": ["@swc/core-darwin-x64@1.13.2", "", { "os": "darwin", "cpu": "x64" }, "sha512-Lb9EZi7X2XDAVmuUlBm2UvVAgSCbD3qKqDCxSI4jEOddzVOpNCnyZ/xEampdngUIyDDhhJLYU9duC+Mcsv5Y+A=="], - "@swc/core-linux-arm-gnueabihf": ["@swc/core-linux-arm-gnueabihf@1.12.11", "", { "os": "linux", "cpu": "arm" }, "sha512-poxBq152HsupOtnZilenvHmxZ9a8SRj4LtfxUnkMDNOGrZR9oxbQNwEzNKfi3RXEcXz+P8c0Rai1ubBazXv8oQ=="], + "@swc/core-linux-arm-gnueabihf": ["@swc/core-linux-arm-gnueabihf@1.13.2", "", { "os": "linux", "cpu": "arm" }, "sha512-9TDe/92ee1x57x+0OqL1huG4BeljVx0nWW4QOOxp8CCK67Rpc/HHl2wciJ0Kl9Dxf2NvpNtkPvqj9+BUmM9WVA=="], - "@swc/core-linux-arm64-gnu": ["@swc/core-linux-arm64-gnu@1.12.11", "", { "os": "linux", "cpu": "arm64" }, "sha512-y1HNamR/D0Hc8xIE910ysyLe269UYiGaQPoLjQS0phzWFfWdMj9bHM++oydVXZ4RSWycO7KyJ3uvw4NilvyMKQ=="], + "@swc/core-linux-arm64-gnu": ["@swc/core-linux-arm64-gnu@1.13.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-KJUSl56DBk7AWMAIEcU83zl5mg3vlQYhLELhjwRFkGFMvghQvdqQ3zFOYa4TexKA7noBZa3C8fb24rI5sw9Exg=="], - "@swc/core-linux-arm64-musl": ["@swc/core-linux-arm64-musl@1.12.11", "", { "os": "linux", "cpu": "arm64" }, "sha512-LlBxPh/32pyQsu2emMEOFRm7poEFLsw12Y1mPY7FWZiZeptomKSOSHRzKDz9EolMiV4qhK1caP1lvW4vminYgQ=="], + "@swc/core-linux-arm64-musl": ["@swc/core-linux-arm64-musl@1.13.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-teU27iG1oyWpNh9CzcGQ48ClDRt/RCem7mYO7ehd2FY102UeTws2+OzLESS1TS1tEZipq/5xwx3FzbVgiolCiQ=="], - "@swc/core-linux-x64-gnu": ["@swc/core-linux-x64-gnu@1.12.11", "", { "os": "linux", "cpu": "x64" }, "sha512-bOjiZB8O/1AzHkzjge1jqX62HGRIpOHqFUrGPfAln/NC6NR+Z2A78u3ixV7k5KesWZFhCV0YVGJL+qToL27myA=="], + "@swc/core-linux-x64-gnu": ["@swc/core-linux-x64-gnu@1.13.2", "", { "os": "linux", "cpu": "x64" }, "sha512-dRPsyPyqpLD0HMRCRpYALIh4kdOir8pPg4AhNQZLehKowigRd30RcLXGNVZcc31Ua8CiPI4QSgjOIxK+EQe4LQ=="], - "@swc/core-linux-x64-musl": ["@swc/core-linux-x64-musl@1.12.11", "", { "os": "linux", "cpu": "x64" }, "sha512-4dzAtbT/m3/UjF045+33gLiHd8aSXJDoqof7gTtu4q0ZyAf7XJ3HHspz+/AvOJLVo4FHHdFcdXhmo/zi1nFn8A=="], + "@swc/core-linux-x64-musl": ["@swc/core-linux-x64-musl@1.13.2", "", { "os": "linux", "cpu": "x64" }, "sha512-CCxETW+KkYEQDqz1SYC15YIWYheqFC+PJVOW76Maa/8yu8Biw+HTAcblKf2isrlUtK8RvrQN94v3UXkC2NzCEw=="], - "@swc/core-win32-arm64-msvc": ["@swc/core-win32-arm64-msvc@1.12.11", "", { "os": "win32", "cpu": "arm64" }, "sha512-h8HiwBZErKvCAmjW92JvQp0iOqm6bncU4ac5jxBGkRApabpUenNJcj3h2g5O6GL5K6T9/WhnXE5gyq/s1fhPQg=="], + "@swc/core-win32-arm64-msvc": ["@swc/core-win32-arm64-msvc@1.13.2", "", { "os": "win32", "cpu": "arm64" }, "sha512-Wv/QTA6PjyRLlmKcN6AmSI4jwSMRl0VTLGs57PHTqYRwwfwd7y4s2fIPJVBNbAlXd795dOEP6d/bGSQSyhOX3A=="], - "@swc/core-win32-ia32-msvc": ["@swc/core-win32-ia32-msvc@1.12.11", "", { "os": "win32", "cpu": "ia32" }, "sha512-1pwr325mXRNUhxTtXmx1IokV5SiRL+6iDvnt3FRXj+X5UvXXKtg2zeyftk+03u8v8v8WUr5I32hIypVJPTNxNg=="], + "@swc/core-win32-ia32-msvc": ["@swc/core-win32-ia32-msvc@1.13.2", "", { "os": "win32", "cpu": "ia32" }, "sha512-PuCdtNynEkUNbUXX/wsyUC+t4mamIU5y00lT5vJcAvco3/r16Iaxl5UCzhXYaWZSNVZMzPp9qN8NlSL8M5pPxw=="], - "@swc/core-win32-x64-msvc": ["@swc/core-win32-x64-msvc@1.12.11", "", { "os": "win32", "cpu": "x64" }, "sha512-5gggWo690Gvs7XiPxAmb5tHwzB9RTVXUV7AWoGb6bmyUd1OXYaebQF0HAOtade5jIoNhfQMQJ7QReRgt/d2jAA=="], + "@swc/core-win32-x64-msvc": ["@swc/core-win32-x64-msvc@1.13.2", "", { "os": "win32", "cpu": "x64" }, "sha512-qlmMkFZJus8cYuBURx1a3YAG2G7IW44i+FEYV5/32ylKkzGNAr9tDJSA53XNnNXkAB5EXSPsOz7bn5C3JlEtdQ=="], "@swc/counter": ["@swc/counter@0.1.3", "", {}, "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ=="], @@ -2105,11 +2104,11 @@ "@types/ms": ["@types/ms@2.1.0", "", {}, "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA=="], - "@types/node": ["@types/node@20.19.7", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-1GM9z6BJOv86qkPvzh2i6VW5+VVrXxCLknfmTkWEqz+6DqosiY28XUWCTmBcJ0ACzKqx/iwdIREfo1fwExIlkA=="], + "@types/node": ["@types/node@20.19.9", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-cuVNgarYWZqxRJDQHEB58GEONhOK79QVR/qYx4S7kcUObQvUwvFnYxJuuHUKm2aieN9X3yZB4LZsuYNU1Qphsw=="], "@types/node-fetch": ["@types/node-fetch@2.6.12", "", { "dependencies": { "@types/node": "*", "form-data": "^4.0.0" } }, "sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA=="], - "@types/node-forge": ["@types/node-forge@1.3.12", "", { "dependencies": { "@types/node": "*" } }, "sha512-a0ToKlRVnUw3aXKQq2F+krxZKq7B8LEQijzPn5RdFAMatARD2JX9o8FBpMXOOrjob0uc13aN+V/AXniOXW4d9A=="], + "@types/node-forge": ["@types/node-forge@1.3.13", "", { "dependencies": { "@types/node": "*" } }, "sha512-zePQJSW5QkwSHKRApqWCVKeKoSOt4xvEnLENZPjyvm9Ezdf/EyDeJM7jqLzOwjVICQQzvLZ63T55MKdJB5H6ww=="], "@types/normalize-package-data": ["@types/normalize-package-data@2.4.4", "", {}, "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA=="], @@ -2273,7 +2272,7 @@ "acorn-import-attributes": ["acorn-import-attributes@1.9.5", "", { "peerDependencies": { "acorn": "^8" } }, "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ=="], - "acorn-import-phases": ["acorn-import-phases@1.0.3", "", { "peerDependencies": { "acorn": "^8.14.0" } }, "sha512-jtKLnfoOzm28PazuQ4dVBcE9Jeo6ha1GAJvq3N0LlNOszmTfx+wSycBehn+FN0RnyeR77IBxN/qVYMw0Rlj0Xw=="], + "acorn-import-phases": ["acorn-import-phases@1.0.4", "", { "peerDependencies": { "acorn": "^8.14.0" } }, "sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ=="], "acorn-jsx": ["acorn-jsx@5.3.2", "", { "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ=="], @@ -2329,7 +2328,7 @@ "append-transform": ["append-transform@2.0.0", "", { "dependencies": { "default-require-extensions": "^3.0.0" } }, "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg=="], - "aproba": ["aproba@2.0.0", "", {}, "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ=="], + "aproba": ["aproba@2.1.0", "", {}, "sha512-tLIEcj5GuR2RSTnxNKdkK0dJ/GrC7P38sUkiDmDuHfsHmbagTFAxDVIBltoklXEVIQ/f14IL8IMJ5pn9Hez1Ew=="], "arch": ["arch@2.2.0", "", {}, "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ=="], @@ -2439,7 +2438,7 @@ "babel-plugin-polyfill-regenerator": ["babel-plugin-polyfill-regenerator@0.6.5", "", { "dependencies": { "@babel/helper-define-polyfill-provider": "^0.6.5" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "sha512-ISqQ2frbiNU9vIJkzg7dlPpznPZ4jOiUQ1uSmB0fEHeowtN3COYRsXr/xexn64NpU13P06jc/L5TgiJXOgrbEg=="], - "babel-preset-current-node-syntax": ["babel-preset-current-node-syntax@1.1.0", "", { "dependencies": { "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-bigint": "^7.8.3", "@babel/plugin-syntax-class-properties": "^7.12.13", "@babel/plugin-syntax-class-static-block": "^7.14.5", "@babel/plugin-syntax-import-attributes": "^7.24.7", "@babel/plugin-syntax-import-meta": "^7.10.4", "@babel/plugin-syntax-json-strings": "^7.8.3", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", "@babel/plugin-syntax-numeric-separator": "^7.10.4", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", "@babel/plugin-syntax-optional-chaining": "^7.8.3", "@babel/plugin-syntax-private-property-in-object": "^7.14.5", "@babel/plugin-syntax-top-level-await": "^7.14.5" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw=="], + "babel-preset-current-node-syntax": ["babel-preset-current-node-syntax@1.1.1", "", { "dependencies": { "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-bigint": "^7.8.3", "@babel/plugin-syntax-class-properties": "^7.12.13", "@babel/plugin-syntax-class-static-block": "^7.14.5", "@babel/plugin-syntax-import-attributes": "^7.24.7", "@babel/plugin-syntax-import-meta": "^7.10.4", "@babel/plugin-syntax-json-strings": "^7.8.3", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", "@babel/plugin-syntax-numeric-separator": "^7.10.4", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", "@babel/plugin-syntax-optional-chaining": "^7.8.3", "@babel/plugin-syntax-private-property-in-object": "^7.14.5", "@babel/plugin-syntax-top-level-await": "^7.14.5" }, "peerDependencies": { "@babel/core": "^7.0.0 || ^8.0.0-0" } }, "sha512-23fWKohMTvS5s0wwJKycOe0dBdCwQ6+iiLaNR9zy8P13mtFRFM9qLLX6HJX5DL2pi/FNDf3fCQHM4FIMoHH/7w=="], "babel-preset-jest": ["babel-preset-jest@29.6.3", "", { "dependencies": { "babel-plugin-jest-hoist": "^29.6.3", "babel-preset-current-node-syntax": "^1.0.0" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA=="], @@ -2863,7 +2862,7 @@ "dayjs": ["dayjs@1.11.13", "", {}, "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg=="], - "dcmjs": ["dcmjs@0.42.0", "", { "dependencies": { "@babel/runtime-corejs3": "^7.22.5", "adm-zip": "^0.5.10", "gl-matrix": "^3.1.0", "lodash.clonedeep": "^4.5.0", "loglevel": "^1.8.1", "ndarray": "^1.0.19", "pako": "^2.0.4" } }, "sha512-N/SXIzMvAjDRgb8vC8G7DP/2BI1QKpa3TwY47Ok34g5y6ZKIcpAR3sf+Y+OBWkQxvnCTncB6B4tkq/ih8xjmXA=="], + "dcmjs": ["dcmjs@0.43.1", "", { "dependencies": { "@babel/runtime-corejs3": "^7.22.5", "adm-zip": "^0.5.10", "gl-matrix": "^3.1.0", "lodash.clonedeep": "^4.5.0", "loglevel": "^1.8.1", "ndarray": "^1.0.19", "pako": "^2.0.4" } }, "sha512-7IAB2cs2F8QYINbfhA7PV+IDraqBuHn8N31xJc6HsyNxZXyGUPQRujcq732ACqjLhl7oJi1z8PJJgLdblQtD3Q=="], "debounce": ["debounce@1.2.1", "", {}, "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug=="], @@ -3033,7 +3032,7 @@ "ejs": ["ejs@3.1.10", "", { "dependencies": { "jake": "^10.8.5" }, "bin": { "ejs": "bin/cli.js" } }, "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA=="], - "electron-to-chromium": ["electron-to-chromium@1.5.182", "", {}, "sha512-Lv65Btwv9W4J9pyODI6EWpdnhfvrve/us5h1WspW8B2Fb0366REPtY3hX7ounk1CkV/TBjWCEvCBBbYbmV0qCA=="], + "electron-to-chromium": ["electron-to-chromium@1.5.192", "", {}, "sha512-rP8Ez0w7UNw/9j5eSXCe10o1g/8B1P5SM90PCCMVkIRQn2R0LEHWz4Eh9RnxkniuDe1W0cTSOB3MLlkTGDcuCg=="], "elegant-spinner": ["elegant-spinner@1.0.1", "", {}, "sha512-B+ZM+RXvRqQaAmkMlO/oSe5nMUOaUnyfGYCEHoR8wrXsZR2mA0XVibsxV1bvTwxdRWah1PkQqso2EzhILGHtEQ=="], @@ -3269,7 +3268,7 @@ "flatted": ["flatted@3.3.3", "", {}, "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg=="], - "flow-parser": ["flow-parser@0.275.0", "", {}, "sha512-fHNwawoA2LM7FsxhU/1lTRGq9n6/Q8k861eHgN7GKtamYt9Qrxpg/ZSrev8o1WX7fQ2D3Gg3+uvYN15PmsG7Yw=="], + "flow-parser": ["flow-parser@0.277.1", "", {}, "sha512-86F5PGl+OrFvCzyK04id9Yf9rxFB8485GPs5sexB4cVLOXmpHbSi1/dYiaemI53I85CpImBu/qHVmZnGQflgmw=="], "follow-redirects": ["follow-redirects@1.15.9", "", {}, "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ=="], @@ -3303,7 +3302,7 @@ "fs-minipass": ["fs-minipass@3.0.3", "", { "dependencies": { "minipass": "^7.0.3" } }, "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw=="], - "fs-monkey": ["fs-monkey@1.0.6", "", {}, "sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg=="], + "fs-monkey": ["fs-monkey@1.1.0", "", {}, "sha512-QMUezzXWII9EV5aTFXW1UBVUO77wYPpjqIF8/AviUCThNeSYZykpoTixUeaNNBwmCev0AMDWMAni+f8Hxb1IFw=="], "fs.realpath": ["fs.realpath@1.0.0", "", {}, "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="], @@ -3801,7 +3800,7 @@ "jest-worker": ["jest-worker@27.5.1", "", { "dependencies": { "@types/node": "*", "merge-stream": "^2.0.0", "supports-color": "^8.0.0" } }, "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg=="], - "jiti": ["jiti@2.4.2", "", { "bin": { "jiti": "lib/jiti-cli.mjs" } }, "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A=="], + "jiti": ["jiti@2.5.1", "", { "bin": { "jiti": "lib/jiti-cli.mjs" } }, "sha512-twQoecYPiVA5K/h6SxtORw/Bs3ar+mLUtoPSc7iMXzQzK8d7eJ/R09wmTwAjiamETn1cXYPGfNnu7DMoHgu12w=="], "jju": ["jju@1.4.0", "", {}, "sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA=="], @@ -3873,7 +3872,7 @@ "last-call-webpack-plugin": ["last-call-webpack-plugin@3.0.0", "", { "dependencies": { "lodash": "^4.17.5", "webpack-sources": "^1.1.0" } }, "sha512-7KI2l2GIZa9p2spzPIVZBYyNKkN+e/SQPpnjlTiPhdbDW3F86tdKKELxKpzJ5sgU19wQWsACULZmpTPYHeWO5w=="], - "launch-editor": ["launch-editor@2.10.0", "", { "dependencies": { "picocolors": "^1.0.0", "shell-quote": "^1.8.1" } }, "sha512-D7dBRJo/qcGX9xlvt/6wUYzQxjh5G1RvZPgPv8vi4KRU99DVQL/oW7tnVOCCTm2HGeo3C5HvGE5Yrh6UBoZ0vA=="], + "launch-editor": ["launch-editor@2.11.0", "", { "dependencies": { "picocolors": "^1.1.1", "shell-quote": "^1.8.3" } }, "sha512-R/PIF14L6e2eHkhvQPu7jDRCr0msfCYCxbYiLgkkAGi0dVPWuM+RrsPu0a5dpuNe0KWGL3jpAkOlv53xGfPheQ=="], "lazy-ass": ["lazy-ass@1.6.0", "", {}, "sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw=="], @@ -3963,8 +3962,6 @@ "loglevel": ["loglevel@1.9.2", "", {}, "sha512-HgMmCqIJSAKqo68l0rS2AanEWfkxaZ5wNiEFb5ggm08lDs9Xl2KxBlX3PTcaD2chBM1gXAYf491/M2Rv8Jwayg=="], - "loglevelnext": ["loglevelnext@3.0.1", "", {}, "sha512-JpjaJhIN1reaSb26SIxDGtE0uc67gPl19OMVHrr+Ggt6b/Vy60jmCtKgQBrygAH0bhRA2nkxgDvM+8QvR8r0YA=="], - "long": ["long@5.3.2", "", {}, "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA=="], "longest-streak": ["longest-streak@3.1.0", "", {}, "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g=="], @@ -3997,7 +3994,7 @@ "markdown-table": ["markdown-table@3.0.4", "", {}, "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw=="], - "markdown-to-jsx": ["markdown-to-jsx@7.7.10", "", { "peerDependencies": { "react": ">= 0.14.0" } }, "sha512-au62yyLyJukhC2P1TYi3uBi/RScGYai69uT72D8a048QH8rRj+yhND3C21GdZHE+6emtsf6Yqemcf//K+EIWDg=="], + "markdown-to-jsx": ["markdown-to-jsx@7.7.12", "", { "peerDependencies": { "react": ">= 0.14.0" } }, "sha512-Y5xNBqoaTooSLkmlg2P0fdbh53gp4MqW7zhvcweGCPUWvWI5BecWRYI8vPlzT8D7OULxsQg2qoRW9EsJlBWasQ=="], "material-colors": ["material-colors@1.2.6", "", {}, "sha512-6qE4B9deFBIa9YSpOc9O0Sgc43zTeVYbgDT5veRKSlB2+ZuHNoVVxA1L/ckMUayV9Ay9y7Z/SZCLcGteW9i7bg=="], @@ -4035,7 +4032,7 @@ "media-typer": ["media-typer@0.3.0", "", {}, "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ=="], - "memfs": ["memfs@4.17.2", "", { "dependencies": { "@jsonjoy.com/json-pack": "^1.0.3", "@jsonjoy.com/util": "^1.3.0", "tree-dump": "^1.0.1", "tslib": "^2.0.0" } }, "sha512-NgYhCOWgovOXSzvYgUW0LQ7Qy72rWQMGGFJDoWg4G30RHd3z77VbYdtJ4fembJXBy8pMIUA31XNAupobOQlwdg=="], + "memfs": ["memfs@4.23.0", "", { "dependencies": { "@jsonjoy.com/json-pack": "^1.0.3", "@jsonjoy.com/util": "^1.3.0", "tree-dump": "^1.0.1", "tslib": "^2.0.0" } }, "sha512-SucHN2lcWf0jrnw+jP6FoVW6l/zGJiXfNMdApZzG0x/0mAIMdwAeR5mjfsCH5U3BoqpUEtqzz+dSQSO0H/eqxg=="], "memoize-one": ["memoize-one@5.2.1", "", {}, "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q=="], @@ -4259,7 +4256,7 @@ "number-is-nan": ["number-is-nan@1.0.1", "", {}, "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ=="], - "nwsapi": ["nwsapi@2.2.20", "", {}, "sha512-/ieB+mDe4MrrKMT8z+mQL8klXydZWGR5Dowt4RAGKbJ3kIGEx3X4ljUo+6V73IXtUPWgfOlU5B9MlGxFO5T+cA=="], + "nwsapi": ["nwsapi@2.2.21", "", {}, "sha512-o6nIY3qwiSXl7/LuOU0Dmuctd34Yay0yeuZRLFmDPrrdHpXKFndPj3hM+YEPVHYC5fx2otBx4Ilc/gyYSAUaIA=="], "nx": ["nx@16.10.0", "", { "dependencies": { "@nrwl/tao": "16.10.0", "@parcel/watcher": "2.0.4", "@yarnpkg/lockfile": "^1.1.0", "@yarnpkg/parsers": "3.0.0-rc.46", "@zkochan/js-yaml": "0.0.6", "axios": "^1.0.0", "chalk": "^4.1.0", "cli-cursor": "3.1.0", "cli-spinners": "2.6.1", "cliui": "^8.0.1", "dotenv": "~16.3.1", "dotenv-expand": "~10.0.0", "enquirer": "~2.3.6", "figures": "3.2.0", "flat": "^5.0.2", "fs-extra": "^11.1.0", "glob": "7.1.4", "ignore": "^5.0.4", "jest-diff": "^29.4.1", "js-yaml": "4.1.0", "jsonc-parser": "3.2.0", "lines-and-columns": "~2.0.3", "minimatch": "3.0.5", "node-machine-id": "1.1.12", "npm-run-path": "^4.0.1", "open": "^8.4.0", "semver": "7.5.3", "string-width": "^4.2.3", "strong-log-transformer": "^2.1.0", "tar-stream": "~2.2.0", "tmp": "~0.2.1", "tsconfig-paths": "^4.1.2", "tslib": "^2.3.0", "v8-compile-cache": "2.3.0", "yargs": "^17.6.2", "yargs-parser": "21.1.1" }, "optionalDependencies": { "@nx/nx-darwin-arm64": "16.10.0", "@nx/nx-darwin-x64": "16.10.0", "@nx/nx-freebsd-x64": "16.10.0", "@nx/nx-linux-arm-gnueabihf": "16.10.0", "@nx/nx-linux-arm64-gnu": "16.10.0", "@nx/nx-linux-arm64-musl": "16.10.0", "@nx/nx-linux-x64-gnu": "16.10.0", "@nx/nx-linux-x64-musl": "16.10.0", "@nx/nx-win32-arm64-msvc": "16.10.0", "@nx/nx-win32-x64-msvc": "16.10.0" }, "peerDependencies": { "@swc-node/register": "^1.6.7", "@swc/core": "^1.3.85" }, "optionalPeers": ["@swc-node/register", "@swc/core"], "bin": { "nx": "bin/nx.js" } }, "sha512-gZl4iCC0Hx0Qe1VWmO4Bkeul2nttuXdPpfnlcDKSACGu3ZIo+uySqwOF8yBAxSTIf8xe2JRhgzJN1aFkuezEBg=="], @@ -4441,9 +4438,9 @@ "platform": ["platform@1.3.6", "", {}, "sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg=="], - "playwright": ["playwright@1.54.0", "", { "dependencies": { "playwright-core": "1.54.0" }, "optionalDependencies": { "fsevents": "2.3.2" }, "bin": { "playwright": "cli.js" } }, "sha512-y9yzHmXRwEUOpghM7XGcA38GjWuTOUMaTIcm/5rHcYVjh5MSp9qQMRRMc/+p1cx+csoPnX4wkxAF61v5VKirxg=="], + "playwright": ["playwright@1.54.1", "", { "dependencies": { "playwright-core": "1.54.1" }, "optionalDependencies": { "fsevents": "2.3.2" }, "bin": { "playwright": "cli.js" } }, "sha512-peWpSwIBmSLi6aW2auvrUtf2DqY16YYcCMO8rTVx486jKmDTJg7UAhyrraP98GB8BoPURZP8+nxO7TSd4cPr5g=="], - "playwright-core": ["playwright-core@1.54.0", "", { "bin": { "playwright-core": "cli.js" } }, "sha512-uiWpWaJh3R3etpJ0QrpligEMl62Dk1iSAB6NUXylvmQz+e3eipXHDHvOvydDAssb5Oqo0E818qdn0L9GcJSTyA=="], + "playwright-core": ["playwright-core@1.54.1", "", { "bin": { "playwright-core": "cli.js" } }, "sha512-Nbjs2zjj0htNhzgiy5wu+3w09YetDx5pkrpI/kZotDlDUaYk0HVA5xrBVPdow4SAUIlhgKcJeJg4GRKW6xHusA=="], "playwright-test-coverage": ["playwright-test-coverage@1.2.12", "", { "peerDependencies": { "@playwright/test": "^1.14.1" } }, "sha512-WdR3shV+7IWtlB1AZcXSysUyZmyAqXM9+DT3iBSS1p4SkJoWZslkTqk04l5ZExSkuaM+5fKl0M9TyUuJWuGgLA=="], @@ -4983,7 +4980,7 @@ "sockjs": ["sockjs@0.3.24", "", { "dependencies": { "faye-websocket": "^0.11.3", "uuid": "^8.3.2", "websocket-driver": "^0.7.4" } }, "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ=="], - "socks": ["socks@2.8.5", "", { "dependencies": { "ip-address": "^9.0.5", "smart-buffer": "^4.2.0" } }, "sha512-iF+tNDQla22geJdTyJB1wM/qrX9DMRwWrciEPwWLPRWAUEM8sQiyxgckLxWT1f7+9VabJS0jTGGr4QgBuvi6Ww=="], + "socks": ["socks@2.8.6", "", { "dependencies": { "ip-address": "^9.0.5", "smart-buffer": "^4.2.0" } }, "sha512-pe4Y2yzru68lXCb38aAqRf5gvN8YdjP1lok5o0J7BOHljkyCGKVz7H3vpVIXKD27rj2giOJ7DwVyk/GWrPHDWA=="], "socks-proxy-agent": ["socks-proxy-agent@7.0.0", "", { "dependencies": { "agent-base": "^6.0.2", "debug": "^4.3.3", "socks": "^2.6.2" } }, "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww=="], @@ -5139,7 +5136,7 @@ "synchronous-promise": ["synchronous-promise@2.0.17", "", {}, "sha512-AsS729u2RHUfEra9xJrE39peJcc2stq2+poBXX8bcM08Y6g9j/i/PUzwNQqkaJde7Ntg1TO7bSREbR5sdosQ+g=="], - "synckit": ["synckit@0.11.8", "", { "dependencies": { "@pkgr/core": "^0.2.4" } }, "sha512-+XZ+r1XGIJGeQk3VvXhT6xx/VpbHsRzsTkGgF6E5RX9TTXD0118l87puaEBZ566FhqblC6U0d4XnubznJDm30A=="], + "synckit": ["synckit@0.11.11", "", { "dependencies": { "@pkgr/core": "^0.2.9" } }, "sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw=="], "tailwind-merge": ["tailwind-merge@2.6.0", "", {}, "sha512-P+Vu1qXfzediirmHOC3xKGAYeZtPcV9g76X+xg2FD4tYgR71ewMA35Y3sCz3zhiN/dwefRpJX0yBcgwi1fXNQA=="], @@ -5409,7 +5406,7 @@ "webidl-conversions": ["webidl-conversions@7.0.0", "", {}, "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g=="], - "webpack": ["webpack@5.100.0", "", { "dependencies": { "@types/eslint-scope": "^3.7.7", "@types/estree": "^1.0.8", "@types/json-schema": "^7.0.15", "@webassemblyjs/ast": "^1.14.1", "@webassemblyjs/wasm-edit": "^1.14.1", "@webassemblyjs/wasm-parser": "^1.14.1", "acorn": "^8.15.0", "acorn-import-phases": "^1.0.3", "browserslist": "^4.24.0", "chrome-trace-event": "^1.0.2", "enhanced-resolve": "^5.17.2", "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.2.11", "json-parse-even-better-errors": "^2.3.1", "loader-runner": "^4.2.0", "mime-types": "^2.1.27", "neo-async": "^2.6.2", "schema-utils": "^4.3.2", "tapable": "^2.1.1", "terser-webpack-plugin": "^5.3.11", "watchpack": "^2.4.1", "webpack-sources": "^3.3.3" }, "bin": { "webpack": "bin/webpack.js" } }, "sha512-H8yBSBTk+BqxrINJnnRzaxU94SVP2bjd7WmA+PfCphoIdDpeQMJ77pq9/4I7xjLq38cB1bNKfzYPZu8pB3zKtg=="], + "webpack": ["webpack@5.101.0", "", { "dependencies": { "@types/eslint-scope": "^3.7.7", "@types/estree": "^1.0.8", "@types/json-schema": "^7.0.15", "@webassemblyjs/ast": "^1.14.1", "@webassemblyjs/wasm-edit": "^1.14.1", "@webassemblyjs/wasm-parser": "^1.14.1", "acorn": "^8.15.0", "acorn-import-phases": "^1.0.3", "browserslist": "^4.24.0", "chrome-trace-event": "^1.0.2", "enhanced-resolve": "^5.17.2", "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.2.11", "json-parse-even-better-errors": "^2.3.1", "loader-runner": "^4.2.0", "mime-types": "^2.1.27", "neo-async": "^2.6.2", "schema-utils": "^4.3.2", "tapable": "^2.1.1", "terser-webpack-plugin": "^5.3.11", "watchpack": "^2.4.1", "webpack-sources": "^3.3.3" }, "bin": { "webpack": "bin/webpack.js" } }, "sha512-B4t+nJqytPeuZlHuIKTbalhljIFXeNRqrUGAQgTGlfOl2lXXKXw+yZu6bicycP+PUlM44CxBjCFD6aciKFT3LQ=="], "webpack-bundle-analyzer": ["webpack-bundle-analyzer@4.10.2", "", { "dependencies": { "@discoveryjs/json-ext": "0.5.7", "acorn": "^8.0.4", "acorn-walk": "^8.0.0", "commander": "^7.2.0", "debounce": "^1.2.1", "escape-string-regexp": "^4.0.0", "gzip-size": "^6.0.0", "html-escaper": "^2.0.2", "opener": "^1.5.2", "picocolors": "^1.0.0", "sirv": "^2.0.3", "ws": "^7.3.1" }, "bin": { "webpack-bundle-analyzer": "lib/bin/analyzer.js" } }, "sha512-vJptkMm9pk5si4Bv922ZbKLV8UTT4zib4FPgXMhgzUny0bfDDkLXAVQs3ly3fS4/TN9ROFtb0NFrm04UXFE/Vw=="], @@ -5511,6 +5508,8 @@ "ws": ["ws@7.5.10", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": "^5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ=="], + "wsl-utils": ["wsl-utils@0.1.0", "", { "dependencies": { "is-wsl": "^3.1.0" } }, "sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw=="], + "wslink": ["wslink@2.3.4", "", { "dependencies": { "@msgpack/msgpack": "^2.8.0" } }, "sha512-O+tbdQDFdGnbmgZJUkugxF+cXD6FPoWbIm9EETWib0UHTJHD71HcmBfDJWTh2RRAd7MjaKQStykVgsJYyihXlQ=="], "xml": ["xml@1.0.1", "", {}, "sha512-huCv9IH9Tcf95zuYCsQraZtWnJvBtLVE0QHMOs8bWyZAFZNDcYjsPq1nEx8jKA9y+Beo9v+7OBPRisQTjinQMw=="], @@ -5581,13 +5580,13 @@ "@cornerstonejs/ai/buffer": ["buffer@6.0.3", "", { "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" } }, "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA=="], - "@cornerstonejs/core/@kitware/vtk.js": ["@kitware/vtk.js@32.12.1", "", { "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": { "xml2json": "Utilities/XMLConverter/xml2json-cli.js", "vtkDataConverter": "Utilities/DataGenerator/convert-cli.js" } }, "sha512-IF8WK7WDu84035ws3HZXz8wys8O81mmeFayYFbdBEfKjgZ4k0EGCK25YCGc6Q47Zxq1iutjs3Zs2xAgGjTgGQg=="], + "@cornerstonejs/core/@kitware/vtk.js": ["@kitware/vtk.js@32.12.1", "", { "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-IF8WK7WDu84035ws3HZXz8wys8O81mmeFayYFbdBEfKjgZ4k0EGCK25YCGc6Q47Zxq1iutjs3Zs2xAgGjTgGQg=="], - "@cornerstonejs/labelmap-interpolation/@kitware/vtk.js": ["@kitware/vtk.js@32.12.1", "", { "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": { "xml2json": "Utilities/XMLConverter/xml2json-cli.js", "vtkDataConverter": "Utilities/DataGenerator/convert-cli.js" } }, "sha512-IF8WK7WDu84035ws3HZXz8wys8O81mmeFayYFbdBEfKjgZ4k0EGCK25YCGc6Q47Zxq1iutjs3Zs2xAgGjTgGQg=="], + "@cornerstonejs/labelmap-interpolation/@kitware/vtk.js": ["@kitware/vtk.js@32.12.1", "", { "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-IF8WK7WDu84035ws3HZXz8wys8O81mmeFayYFbdBEfKjgZ4k0EGCK25YCGc6Q47Zxq1iutjs3Zs2xAgGjTgGQg=="], - "@cornerstonejs/polymorphic-segmentation/@kitware/vtk.js": ["@kitware/vtk.js@32.12.1", "", { "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": { "xml2json": "Utilities/XMLConverter/xml2json-cli.js", "vtkDataConverter": "Utilities/DataGenerator/convert-cli.js" } }, "sha512-IF8WK7WDu84035ws3HZXz8wys8O81mmeFayYFbdBEfKjgZ4k0EGCK25YCGc6Q47Zxq1iutjs3Zs2xAgGjTgGQg=="], + "@cornerstonejs/polymorphic-segmentation/@kitware/vtk.js": ["@kitware/vtk.js@32.12.1", "", { "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-IF8WK7WDu84035ws3HZXz8wys8O81mmeFayYFbdBEfKjgZ4k0EGCK25YCGc6Q47Zxq1iutjs3Zs2xAgGjTgGQg=="], - "@cornerstonejs/tools/@kitware/vtk.js": ["@kitware/vtk.js@32.12.1", "", { "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": { "xml2json": "Utilities/XMLConverter/xml2json-cli.js", "vtkDataConverter": "Utilities/DataGenerator/convert-cli.js" } }, "sha512-IF8WK7WDu84035ws3HZXz8wys8O81mmeFayYFbdBEfKjgZ4k0EGCK25YCGc6Q47Zxq1iutjs3Zs2xAgGjTgGQg=="], + "@cornerstonejs/tools/@kitware/vtk.js": ["@kitware/vtk.js@32.12.1", "", { "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-IF8WK7WDu84035ws3HZXz8wys8O81mmeFayYFbdBEfKjgZ4k0EGCK25YCGc6Q47Zxq1iutjs3Zs2xAgGjTgGQg=="], "@cspotcode/source-map-support/@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.9", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" } }, "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ=="], @@ -5611,8 +5610,6 @@ "@isaacs/cliui/wrap-ansi": ["wrap-ansi@8.1.0", "", { "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", "strip-ansi": "^7.0.1" } }, "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ=="], - "@itk-wasm/dam/axios": ["axios@1.10.0", "", { "dependencies": { "follow-redirects": "^1.15.6", "form-data": "^4.0.0", "proxy-from-env": "^1.1.0" } }, "sha512-/1xYAC4MP/HEG+3duIhFr4ZQXR4sQXOIe+o6sdqzeykGLx6Upp/1p8MHqhINOvGeP7xyNHe7tsiJByc4SSVUxw=="], - "@itk-wasm/dam/tar": ["tar@6.2.1", "", { "dependencies": { "chownr": "^2.0.0", "fs-minipass": "^2.0.0", "minipass": "^5.0.0", "minizlib": "^2.1.1", "mkdirp": "^1.0.3", "yallist": "^4.0.0" } }, "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A=="], "@itk-wasm/morphological-contour-interpolation/itk-wasm": ["itk-wasm@1.0.0-b.173", "", { "dependencies": { "@itk-wasm/dam": "^1.1.1", "@thewtex/zstddec": "^0.2.0", "@types/emscripten": "^1.39.10", "axios": "^1.6.2", "chalk": "^5.3.0", "comlink": "^4.4.1", "commander": "^11.1.0", "fs-extra": "^11.2.0", "glob": "^8.1.0", "markdown-table": "^3.0.3", "mime-types": "^2.1.35", "wasm-feature-detect": "^1.6.1" }, "bin": { "itk-wasm": "src/itk-wasm-cli.js" } }, "sha512-SV2lfZ1mClWuSK/noaZgGj9jhroY4MZu19ci9pIucuyhoGdXrVSmWlPH/JYMDi9RP3BogmQwe9wfFc3X1dcEPg=="], @@ -5767,7 +5764,7 @@ "@ohif/ui/webpack": ["webpack@5.95.0", "", { "dependencies": { "@types/estree": "^1.0.5", "@webassemblyjs/ast": "^1.12.1", "@webassemblyjs/wasm-edit": "^1.12.1", "@webassemblyjs/wasm-parser": "^1.12.1", "acorn": "^8.7.1", "acorn-import-attributes": "^1.9.5", "browserslist": "^4.21.10", "chrome-trace-event": "^1.0.2", "enhanced-resolve": "^5.17.1", "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.2.11", "json-parse-even-better-errors": "^2.3.1", "loader-runner": "^4.2.0", "mime-types": "^2.1.27", "neo-async": "^2.6.2", "schema-utils": "^3.2.0", "tapable": "^2.1.1", "terser-webpack-plugin": "^5.3.10", "watchpack": "^2.4.1", "webpack-sources": "^3.2.3" }, "bin": { "webpack": "bin/webpack.js" } }, "sha512-2t3XstrKULz41MNMBF+cJ97TyHdyQ8HCt//pqErqDvNjU9YQBnZxIHa11VXsi7F3mb5/aO2tuDxdeTPdU7xu9Q=="], - "@pmmmwh/react-refresh-webpack-plugin/source-map": ["source-map@0.7.4", "", {}, "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA=="], + "@pmmmwh/react-refresh-webpack-plugin/source-map": ["source-map@0.7.6", "", {}, "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ=="], "@rollup/plugin-node-resolve/deepmerge": ["deepmerge@4.3.1", "", {}, "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A=="], @@ -5783,7 +5780,7 @@ "@storybook/builder-manager/fs-extra": ["fs-extra@11.3.0", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew=="], - "@storybook/builder-webpack5/@types/node": ["@types/node@18.19.118", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-hIPK0hSrrcaoAu/gJMzN3QClXE4QdCdFvaenJ0JsjIbExP1JFFVH+RHcBt25c9n8bx5dkIfqKE+uw6BmBns7ug=="], + "@storybook/builder-webpack5/@types/node": ["@types/node@18.19.120", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-WtCGHFXnVI8WHLxDAt5TbnCM4eSE+nI0QN2NJtwzcgMhht2eNz6V9evJrk+lwC8bCY8OWV5Ym8Jz7ZEyGnKnMA=="], "@storybook/builder-webpack5/babel-loader": ["babel-loader@9.2.1", "", { "dependencies": { "find-cache-dir": "^4.0.0", "schema-utils": "^4.0.0" }, "peerDependencies": { "@babel/core": "^7.12.0", "webpack": ">=5" } }, "sha512-fqe8naHt46e0yIdkjUZYqddSXfej3AHajX+CSO5X7oy0EmPc6o5Xh+RClNoHjnieWz9AW4kZxW9yyFMhVB1QLA=="], @@ -5795,7 +5792,7 @@ "@storybook/cli/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], - "@storybook/cli/execa": ["execa@5.1.1", "", { "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", "human-signals": "^2.1.0", "is-stream": "^2.0.0", "merge-stream": "^2.0.0", "npm-run-path": "^4.0.1", "onetime": "^5.1.2", "signal-exit": "^3.0.3", "strip-final-newline": "^2.0.0" } }, "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg=="], + "@storybook/cli/execa": ["execa@5.0.0", "", { "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", "human-signals": "^2.1.0", "is-stream": "^2.0.0", "merge-stream": "^2.0.0", "npm-run-path": "^4.0.1", "onetime": "^5.1.2", "signal-exit": "^3.0.3", "strip-final-newline": "^2.0.0" } }, "sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ=="], "@storybook/cli/find-up": ["find-up@5.0.0", "", { "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" } }, "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng=="], @@ -5807,7 +5804,7 @@ "@storybook/components/@radix-ui/react-select": ["@radix-ui/react-select@1.2.2", "", { "dependencies": { "@babel/runtime": "^7.13.10", "@radix-ui/number": "1.0.1", "@radix-ui/primitive": "1.0.1", "@radix-ui/react-collection": "1.0.3", "@radix-ui/react-compose-refs": "1.0.1", "@radix-ui/react-context": "1.0.1", "@radix-ui/react-direction": "1.0.1", "@radix-ui/react-dismissable-layer": "1.0.4", "@radix-ui/react-focus-guards": "1.0.1", "@radix-ui/react-focus-scope": "1.0.3", "@radix-ui/react-id": "1.0.1", "@radix-ui/react-popper": "1.1.2", "@radix-ui/react-portal": "1.0.3", "@radix-ui/react-primitive": "1.0.3", "@radix-ui/react-slot": "1.0.2", "@radix-ui/react-use-callback-ref": "1.0.1", "@radix-ui/react-use-controllable-state": "1.0.1", "@radix-ui/react-use-layout-effect": "1.0.1", "@radix-ui/react-use-previous": "1.0.1", "@radix-ui/react-visually-hidden": "1.0.3", "aria-hidden": "^1.1.1", "react-remove-scroll": "2.5.5" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0", "react-dom": "^16.8 || ^17.0 || ^18.0" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-zI7McXr8fNaSrUY9mZe4x/HC0jTLY9fWNhO1oLWYMQGDXuV4UCivIGTxwioSzO0ZCYX9iSLyWmAh/1TOmX3Cnw=="], - "@storybook/core-common/@types/node": ["@types/node@18.19.118", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-hIPK0hSrrcaoAu/gJMzN3QClXE4QdCdFvaenJ0JsjIbExP1JFFVH+RHcBt25c9n8bx5dkIfqKE+uw6BmBns7ug=="], + "@storybook/core-common/@types/node": ["@types/node@18.19.120", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-WtCGHFXnVI8WHLxDAt5TbnCM4eSE+nI0QN2NJtwzcgMhht2eNz6V9evJrk+lwC8bCY8OWV5Ym8Jz7ZEyGnKnMA=="], "@storybook/core-common/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], @@ -5821,31 +5818,27 @@ "@storybook/core-common/pkg-dir": ["pkg-dir@5.0.0", "", { "dependencies": { "find-up": "^5.0.0" } }, "sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA=="], - "@storybook/core-server/@types/node": ["@types/node@18.19.118", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-hIPK0hSrrcaoAu/gJMzN3QClXE4QdCdFvaenJ0JsjIbExP1JFFVH+RHcBt25c9n8bx5dkIfqKE+uw6BmBns7ug=="], + "@storybook/core-server/@types/node": ["@types/node@18.19.120", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-WtCGHFXnVI8WHLxDAt5TbnCM4eSE+nI0QN2NJtwzcgMhht2eNz6V9evJrk+lwC8bCY8OWV5Ym8Jz7ZEyGnKnMA=="], "@storybook/core-server/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], - "@storybook/core-server/cli-table3": ["cli-table3@0.6.5", "", { "dependencies": { "string-width": "^4.2.0" }, "optionalDependencies": { "@colors/colors": "1.5.0" } }, "sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ=="], - - "@storybook/core-server/compression": ["compression@1.8.0", "", { "dependencies": { "bytes": "3.1.2", "compressible": "~2.0.18", "debug": "2.6.9", "negotiator": "~0.6.4", "on-headers": "~1.0.2", "safe-buffer": "5.2.1", "vary": "~1.1.2" } }, "sha512-k6WLKfunuqCYD3t6AsuPGvQWaKwuLLh2/xHNcX4qE+vIfDNXpSqnrhwA7O53R7WVQUnt8dVAIW+YHr7xTgOgGA=="], - "@storybook/core-server/fs-extra": ["fs-extra@11.3.0", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew=="], "@storybook/core-server/open": ["open@8.4.2", "", { "dependencies": { "define-lazy-prop": "^2.0.0", "is-docker": "^2.1.1", "is-wsl": "^2.2.0" } }, "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ=="], "@storybook/core-server/ws": ["ws@8.18.3", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg=="], - "@storybook/core-webpack/@types/node": ["@types/node@18.19.118", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-hIPK0hSrrcaoAu/gJMzN3QClXE4QdCdFvaenJ0JsjIbExP1JFFVH+RHcBt25c9n8bx5dkIfqKE+uw6BmBns7ug=="], + "@storybook/core-webpack/@types/node": ["@types/node@18.19.120", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-WtCGHFXnVI8WHLxDAt5TbnCM4eSE+nI0QN2NJtwzcgMhht2eNz6V9evJrk+lwC8bCY8OWV5Ym8Jz7ZEyGnKnMA=="], "@storybook/csf-tools/fs-extra": ["fs-extra@11.3.0", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew=="], - "@storybook/preset-react-webpack/@types/node": ["@types/node@18.19.118", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-hIPK0hSrrcaoAu/gJMzN3QClXE4QdCdFvaenJ0JsjIbExP1JFFVH+RHcBt25c9n8bx5dkIfqKE+uw6BmBns7ug=="], + "@storybook/preset-react-webpack/@types/node": ["@types/node@18.19.120", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-WtCGHFXnVI8WHLxDAt5TbnCM4eSE+nI0QN2NJtwzcgMhht2eNz6V9evJrk+lwC8bCY8OWV5Ym8Jz7ZEyGnKnMA=="], "@storybook/preset-react-webpack/fs-extra": ["fs-extra@11.3.0", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew=="], "@storybook/react/@types/estree": ["@types/estree@0.0.51", "", {}, "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ=="], - "@storybook/react/@types/node": ["@types/node@18.19.118", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-hIPK0hSrrcaoAu/gJMzN3QClXE4QdCdFvaenJ0JsjIbExP1JFFVH+RHcBt25c9n8bx5dkIfqKE+uw6BmBns7ug=="], + "@storybook/react/@types/node": ["@types/node@18.19.120", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-WtCGHFXnVI8WHLxDAt5TbnCM4eSE+nI0QN2NJtwzcgMhht2eNz6V9evJrk+lwC8bCY8OWV5Ym8Jz7ZEyGnKnMA=="], "@storybook/react/acorn": ["acorn@7.4.1", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A=="], @@ -5853,7 +5846,7 @@ "@storybook/react/escodegen": ["escodegen@2.1.0", "", { "dependencies": { "esprima": "^4.0.1", "estraverse": "^5.2.0", "esutils": "^2.0.2" }, "optionalDependencies": { "source-map": "~0.6.1" }, "bin": { "esgenerate": "bin/esgenerate.js", "escodegen": "bin/escodegen.js" } }, "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w=="], - "@storybook/react-webpack5/@types/node": ["@types/node@18.19.118", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-hIPK0hSrrcaoAu/gJMzN3QClXE4QdCdFvaenJ0JsjIbExP1JFFVH+RHcBt25c9n8bx5dkIfqKE+uw6BmBns7ug=="], + "@storybook/react-webpack5/@types/node": ["@types/node@18.19.120", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-WtCGHFXnVI8WHLxDAt5TbnCM4eSE+nI0QN2NJtwzcgMhht2eNz6V9evJrk+lwC8bCY8OWV5Ym8Jz7ZEyGnKnMA=="], "@storybook/source-loader/prettier": ["prettier@2.8.8", "", { "bin": { "prettier": "bin-prettier.js" } }, "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q=="], @@ -5877,7 +5870,7 @@ "@tufjs/models/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], - "@types/webpack-sources/source-map": ["source-map@0.7.4", "", {}, "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA=="], + "@types/webpack-sources/source-map": ["source-map@0.7.6", "", {}, "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ=="], "@typescript-eslint/typescript-estree/minimatch": ["minimatch@9.0.3", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg=="], @@ -5977,8 +5970,6 @@ "child-process-promise/cross-spawn": ["cross-spawn@4.0.2", "", { "dependencies": { "lru-cache": "^4.0.1", "which": "^1.2.9" } }, "sha512-yAXz/pA1tD8Gtg2S98Ekf/sewp3Lcp3YoFKJ4Hkp5h5yLWnKVTDU0kwjKJ8NDCYcfTLfyGkzTikst+jWypT1iA=="], - "chokidar/fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], - "clipboardy/execa": ["execa@5.1.1", "", { "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", "human-signals": "^2.1.0", "is-stream": "^2.0.0", "merge-stream": "^2.0.0", "npm-run-path": "^4.0.1", "onetime": "^5.1.2", "signal-exit": "^3.0.3", "strip-final-newline": "^2.0.0" } }, "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg=="], "compression/debug": ["debug@2.6.9", "", { "dependencies": { "ms": "2.0.0" } }, "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="], @@ -6055,8 +6046,6 @@ "detect-package-manager/execa": ["execa@5.1.1", "", { "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", "human-signals": "^2.1.0", "is-stream": "^2.0.0", "merge-stream": "^2.0.0", "npm-run-path": "^4.0.1", "onetime": "^5.1.2", "signal-exit": "^3.0.3", "strip-final-newline": "^2.0.0" } }, "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg=="], - "dicom-microscopy-viewer/dcmjs": ["dcmjs@0.29.13", "", { "dependencies": { "@babel/runtime-corejs3": "^7.22.5", "adm-zip": "^0.5.10", "gl-matrix": "^3.1.0", "lodash.clonedeep": "^4.5.0", "loglevelnext": "^3.0.1", "ndarray": "^1.0.19", "pako": "^2.0.4" } }, "sha512-Bf9tKzJNWqk4kbV210N5TLEHDqaZvO3S+MH9vezFAU8WKcG4cR6z4/II3TQVqhLI185eNUL+lhfPCVH1Uu2yTA=="], - "dicom-microscopy-viewer/dicomweb-client": ["dicomweb-client@0.8.4", "", {}, "sha512-/6oY3/Fg9JyAlbTWuJOYbVqici3+nlZt43+Z/Y47RNiqLc028JcxNlY28u4VQqksxfB59f1hhNbsqsHyDT4vhw=="], "dicom-microscopy-viewer/mathjs": ["mathjs@11.12.0", "", { "dependencies": { "@babel/runtime": "^7.23.2", "complex.js": "^2.1.1", "decimal.js": "^10.4.3", "escape-latex": "^1.2.0", "fraction.js": "4.3.4", "javascript-natural-sort": "^0.7.1", "seedrandom": "^3.0.5", "tiny-emitter": "^2.1.0", "typed-function": "^4.1.1" }, "bin": { "mathjs": "bin/cli.js" } }, "sha512-UGhVw8rS1AyedyI55DGz9q1qZ0p98kyKPyc9vherBkoueLntPfKtPBh14x+V4cdUWK0NZV2TBwqRFlvadscSuw=="], @@ -6245,8 +6234,6 @@ "istanbul-lib-report/supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], - "itk-wasm/axios": ["axios@1.10.0", "", { "dependencies": { "follow-redirects": "^1.15.6", "form-data": "^4.0.0", "proxy-from-env": "^1.1.0" } }, "sha512-/1xYAC4MP/HEG+3duIhFr4ZQXR4sQXOIe+o6sdqzeykGLx6Upp/1p8MHqhINOvGeP7xyNHe7tsiJByc4SSVUxw=="], - "itk-wasm/fs-extra": ["fs-extra@11.3.0", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew=="], "itk-wasm/glob": ["glob@8.1.0", "", { "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^5.0.1", "once": "^1.3.0" } }, "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ=="], @@ -6303,8 +6290,6 @@ "jest-each/pretty-format": ["pretty-format@29.7.0", "", { "dependencies": { "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", "react-is": "^18.0.0" } }, "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ=="], - "jest-haste-map/fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], - "jest-haste-map/jest-worker": ["jest-worker@29.7.0", "", { "dependencies": { "@types/node": "*", "jest-util": "^29.7.0", "merge-stream": "^2.0.0", "supports-color": "^8.0.0" } }, "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw=="], "jest-junit/strip-ansi": ["strip-ansi@4.0.0", "", { "dependencies": { "ansi-regex": "^3.0.0" } }, "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow=="], @@ -6379,7 +6364,7 @@ "jsdom/ws": ["ws@8.18.3", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg=="], - "lazy-universal-dotenv/dotenv": ["dotenv@16.6.1", "", {}, "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow=="], + "lazy-universal-dotenv/dotenv": ["dotenv@16.3.2", "", {}, "sha512-HTlk5nmhkm8F6JcdXvHIzaorzCoziNQT9mGxLPVXW8wJF1TiGSL60ZGB4gHWabHOaMmWmhvk2/lPHfnBiT78AQ=="], "lerna/chalk": ["chalk@4.1.0", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A=="], @@ -6521,14 +6506,14 @@ "minizlib/minipass": ["minipass@3.3.6", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw=="], - "multimatch/minimatch": ["minimatch@3.0.5", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw=="], - "node-gyp/glob": ["glob@7.2.3", "", { "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q=="], "node-gyp/make-fetch-happen": ["make-fetch-happen@10.2.1", "", { "dependencies": { "agentkeepalive": "^4.2.1", "cacache": "^16.1.0", "http-cache-semantics": "^4.1.0", "http-proxy-agent": "^5.0.0", "https-proxy-agent": "^5.0.0", "is-lambda": "^1.0.1", "lru-cache": "^7.7.1", "minipass": "^3.1.6", "minipass-collect": "^1.0.2", "minipass-fetch": "^2.0.3", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", "negotiator": "^0.6.3", "promise-retry": "^2.0.1", "socks-proxy-agent": "^7.0.0", "ssri": "^9.0.0" } }, "sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w=="], "node-gyp/nopt": ["nopt@6.0.0", "", { "dependencies": { "abbrev": "^1.0.0" }, "bin": { "nopt": "bin/nopt.js" } }, "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g=="], + "node-gyp/tar": ["tar@6.2.1", "", { "dependencies": { "chownr": "^2.0.0", "fs-minipass": "^2.0.0", "minipass": "^5.0.0", "minizlib": "^2.1.1", "mkdirp": "^1.0.3", "yallist": "^4.0.0" } }, "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A=="], + "node-gyp/which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="], "normalize-package-data/hosted-git-info": ["hosted-git-info@2.8.9", "", {}, "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw=="], @@ -6553,8 +6538,6 @@ "npm-run-path/path-key": ["path-key@4.0.0", "", {}, "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ=="], - "nx/axios": ["axios@1.10.0", "", { "dependencies": { "follow-redirects": "^1.15.6", "form-data": "^4.0.0", "proxy-from-env": "^1.1.0" } }, "sha512-/1xYAC4MP/HEG+3duIhFr4ZQXR4sQXOIe+o6sdqzeykGLx6Upp/1p8MHqhINOvGeP7xyNHe7tsiJByc4SSVUxw=="], - "nx/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], "nx/cliui": ["cliui@8.0.1", "", { "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" } }, "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ=="], @@ -6593,8 +6576,6 @@ "ora/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], - "ora/cli-spinners": ["cli-spinners@2.9.2", "", {}, "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg=="], - "p-locate/p-limit": ["p-limit@2.3.0", "", { "dependencies": { "p-try": "^2.0.0" } }, "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w=="], "pacote/minipass": ["minipass@5.0.0", "", {}, "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ=="], @@ -6617,7 +6598,7 @@ "path-scurry/lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="], - "path-scurry/minipass": ["minipass@7.1.2", "", {}, "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw=="], + "path-scurry/minipass": ["minipass@5.0.0", "", {}, "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ=="], "pbkdf2/create-hash": ["create-hash@1.1.3", "", { "dependencies": { "cipher-base": "^1.0.1", "inherits": "^2.0.1", "ripemd160": "^2.0.0", "sha.js": "^2.4.0" } }, "sha512-snRpch/kwQhcdlnZKYanNF1m0RDlrCdSKQaH87w1FCFPVPNCQ/Il9QJKAX2jVBZddRdaHBMC+zXa9Gw9tmkNUA=="], @@ -6729,8 +6710,6 @@ "rimraf/glob": ["glob@7.2.3", "", { "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q=="], - "rollup/fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], - "rollup-plugin-terser/jest-worker": ["jest-worker@26.6.2", "", { "dependencies": { "@types/node": "*", "merge-stream": "^2.0.0", "supports-color": "^7.0.0" } }, "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ=="], "rollup-plugin-terser/serialize-javascript": ["serialize-javascript@4.0.0", "", { "dependencies": { "randombytes": "^2.1.0" } }, "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw=="], @@ -6853,9 +6832,7 @@ "webpack-dev-middleware/range-parser": ["range-parser@1.2.1", "", {}, "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="], - "webpack-dev-server/compression": ["compression@1.8.0", "", { "dependencies": { "bytes": "3.1.2", "compressible": "~2.0.18", "debug": "2.6.9", "negotiator": "~0.6.4", "on-headers": "~1.0.2", "safe-buffer": "5.2.1", "vary": "~1.1.2" } }, "sha512-k6WLKfunuqCYD3t6AsuPGvQWaKwuLLh2/xHNcX4qE+vIfDNXpSqnrhwA7O53R7WVQUnt8dVAIW+YHr7xTgOgGA=="], - - "webpack-dev-server/open": ["open@10.1.2", "", { "dependencies": { "default-browser": "^5.2.1", "define-lazy-prop": "^3.0.0", "is-inside-container": "^1.0.0", "is-wsl": "^3.1.0" } }, "sha512-cxN6aIDPz6rm8hbebcP7vrQNhvRcveZoJU72Y7vskh4oIm+BZwBECnx5nTmrlres1Qapvx27Qo1Auukpf8PKXw=="], + "webpack-dev-server/open": ["open@10.2.0", "", { "dependencies": { "default-browser": "^5.2.1", "define-lazy-prop": "^3.0.0", "is-inside-container": "^1.0.0", "wsl-utils": "^0.1.0" } }, "sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA=="], "webpack-dev-server/ws": ["ws@8.18.3", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg=="], @@ -6891,6 +6868,8 @@ "write-pkg/type-fest": ["type-fest@0.4.1", "", {}, "sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw=="], + "wsl-utils/is-wsl": ["is-wsl@3.1.0", "", { "dependencies": { "is-inside-container": "^1.0.0" } }, "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw=="], + "xmlbuilder2/js-yaml": ["js-yaml@3.14.0", "", { "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A=="], "yargs/yargs-parser": ["yargs-parser@18.1.3", "", { "dependencies": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" } }, "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ=="], @@ -6917,16 +6896,12 @@ "@isaacs/cliui/wrap-ansi/ansi-styles": ["ansi-styles@6.2.1", "", {}, "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug=="], - "@itk-wasm/dam/axios/proxy-from-env": ["proxy-from-env@1.1.0", "", {}, "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="], - "@itk-wasm/dam/tar/fs-minipass": ["fs-minipass@2.1.0", "", { "dependencies": { "minipass": "^3.0.0" } }, "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg=="], "@itk-wasm/dam/tar/minipass": ["minipass@5.0.0", "", {}, "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ=="], "@itk-wasm/dam/tar/mkdirp": ["mkdirp@1.0.4", "", { "bin": { "mkdirp": "bin/cmd.js" } }, "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw=="], - "@itk-wasm/morphological-contour-interpolation/itk-wasm/axios": ["axios@1.10.0", "", { "dependencies": { "follow-redirects": "^1.15.6", "form-data": "^4.0.0", "proxy-from-env": "^1.1.0" } }, "sha512-/1xYAC4MP/HEG+3duIhFr4ZQXR4sQXOIe+o6sdqzeykGLx6Upp/1p8MHqhINOvGeP7xyNHe7tsiJByc4SSVUxw=="], - "@itk-wasm/morphological-contour-interpolation/itk-wasm/fs-extra": ["fs-extra@11.3.0", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew=="], "@itk-wasm/morphological-contour-interpolation/itk-wasm/glob": ["glob@8.1.0", "", { "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^5.0.1", "once": "^1.3.0" } }, "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ=="], @@ -7151,10 +7126,6 @@ "@storybook/core-server/chalk/supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], - "@storybook/core-server/compression/bytes": ["bytes@3.1.2", "", {}, "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg=="], - - "@storybook/core-server/compression/debug": ["debug@2.6.9", "", { "dependencies": { "ms": "2.0.0" } }, "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="], - "@storybook/core-server/open/define-lazy-prop": ["define-lazy-prop@2.0.0", "", {}, "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og=="], "@storybook/core-webpack/@types/node/undici-types": ["undici-types@5.26.5", "", {}, "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA=="], @@ -7401,8 +7372,6 @@ "istanbul/supports-color/has-flag": ["has-flag@1.0.0", "", {}, "sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA=="], - "itk-wasm/axios/proxy-from-env": ["proxy-from-env@1.1.0", "", {}, "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="], - "itk-wasm/glob/minimatch": ["minimatch@5.1.6", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g=="], "jake/chalk/supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], @@ -7627,6 +7596,12 @@ "node-gyp/make-fetch-happen/minipass-fetch": ["minipass-fetch@2.1.2", "", { "dependencies": { "minipass": "^3.1.6", "minipass-sized": "^1.0.3", "minizlib": "^2.1.2" }, "optionalDependencies": { "encoding": "^0.1.13" } }, "sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA=="], + "node-gyp/tar/fs-minipass": ["fs-minipass@2.1.0", "", { "dependencies": { "minipass": "^3.0.0" } }, "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg=="], + + "node-gyp/tar/minipass": ["minipass@5.0.0", "", {}, "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ=="], + + "node-gyp/tar/mkdirp": ["mkdirp@1.0.4", "", { "bin": { "mkdirp": "bin/cmd.js" } }, "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw=="], + "normalize-url/query-string/strict-uri-encode": ["strict-uri-encode@1.1.0", "", {}, "sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ=="], "npm-package-arg/validate-npm-package-name/builtins": ["builtins@1.0.3", "", {}, "sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ=="], @@ -7637,8 +7612,6 @@ "npm-registry-fetch/npm-package-arg/hosted-git-info": ["hosted-git-info@6.1.3", "", { "dependencies": { "lru-cache": "^7.5.1" } }, "sha512-HVJyzUrLIL1c0QmviVh5E8VGyUS7xCFPS6yydaVd1UegW+ibV/CohqTH9MkOLDp5o+rb82DMo77PTuc9F/8GKw=="], - "nx/axios/proxy-from-env": ["proxy-from-env@1.1.0", "", {}, "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="], - "nx/chalk/supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], "nx/cliui/wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], @@ -7759,12 +7732,6 @@ "url-loader/schema-utils/ajv-keywords": ["ajv-keywords@3.5.2", "", { "peerDependencies": { "ajv": "^6.9.1" } }, "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ=="], - "webpack-dev-server/compression/bytes": ["bytes@3.1.2", "", {}, "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg=="], - - "webpack-dev-server/compression/debug": ["debug@2.6.9", "", { "dependencies": { "ms": "2.0.0" } }, "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="], - - "webpack-dev-server/open/is-wsl": ["is-wsl@3.1.0", "", { "dependencies": { "is-inside-container": "^1.0.0" } }, "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw=="], - "webpack/eslint-scope/estraverse": ["estraverse@4.3.0", "", {}, "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw=="], "widest-line/string-width/strip-ansi": ["strip-ansi@7.1.0", "", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ=="], @@ -7793,8 +7760,6 @@ "@itk-wasm/dam/tar/fs-minipass/minipass": ["minipass@3.3.6", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw=="], - "@itk-wasm/morphological-contour-interpolation/itk-wasm/axios/proxy-from-env": ["proxy-from-env@1.1.0", "", {}, "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="], - "@itk-wasm/morphological-contour-interpolation/itk-wasm/glob/minimatch": ["minimatch@5.1.6", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g=="], "@jest/transform/babel-plugin-istanbul/istanbul-lib-instrument/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], @@ -7897,8 +7862,6 @@ "@storybook/core-common/node-fetch/whatwg-url/webidl-conversions": ["webidl-conversions@3.0.1", "", {}, "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="], - "@storybook/core-server/compression/debug/ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="], - "@svgr/core/cosmiconfig/js-yaml/argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="], "@svgr/core/cosmiconfig/parse-json/lines-and-columns": ["lines-and-columns@1.2.4", "", {}, "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="], @@ -8053,10 +8016,10 @@ "node-gyp/make-fetch-happen/cacache/p-map": ["p-map@4.0.0", "", { "dependencies": { "aggregate-error": "^3.0.0" } }, "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ=="], - "node-gyp/make-fetch-happen/cacache/tar": ["tar@6.2.1", "", { "dependencies": { "chownr": "^2.0.0", "fs-minipass": "^2.0.0", "minipass": "^5.0.0", "minizlib": "^2.1.1", "mkdirp": "^1.0.3", "yallist": "^4.0.0" } }, "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A=="], - "node-gyp/make-fetch-happen/cacache/unique-filename": ["unique-filename@2.0.1", "", { "dependencies": { "unique-slug": "^3.0.0" } }, "sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A=="], + "node-gyp/tar/fs-minipass/minipass": ["minipass@3.3.6", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw=="], + "npm-packlist/glob/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], "npm-pick-manifest/npm-package-arg/hosted-git-info/lru-cache": ["lru-cache@7.18.3", "", {}, "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA=="], @@ -8101,8 +8064,6 @@ "unused-webpack-plugin/chalk/supports-color/has-flag": ["has-flag@3.0.0", "", {}, "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw=="], - "webpack-dev-server/compression/debug/ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="], - "widest-line/string-width/strip-ansi/ansi-regex": ["ansi-regex@6.1.0", "", {}, "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA=="], "workbox-build/source-map/whatwg-url/tr46": ["tr46@1.0.1", "", { "dependencies": { "punycode": "^2.1.0" } }, "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA=="], @@ -8153,8 +8114,6 @@ "node-gyp/make-fetch-happen/cacache/glob/minimatch": ["minimatch@5.1.6", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g=="], - "node-gyp/make-fetch-happen/cacache/tar/minipass": ["minipass@5.0.0", "", {}, "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ=="], - "node-gyp/make-fetch-happen/cacache/unique-filename/unique-slug": ["unique-slug@3.0.0", "", { "dependencies": { "imurmurhash": "^0.1.4" } }, "sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w=="], "pacote/npm-packlist/ignore-walk/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], diff --git a/extensions/cornerstone-dicom-pmap/package.json b/extensions/cornerstone-dicom-pmap/package.json index a5baf3764..f70ab3985 100644 --- a/extensions/cornerstone-dicom-pmap/package.json +++ b/extensions/cornerstone-dicom-pmap/package.json @@ -46,8 +46,8 @@ }, "dependencies": { "@babel/runtime": "^7.20.13", - "@cornerstonejs/adapters": "^3.30.3", - "@cornerstonejs/core": "^3.30.3", + "@cornerstonejs/adapters": "^3.32.5", + "@cornerstonejs/core": "^3.32.5", "@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 2fb93fbee..48b5c0f08 100644 --- a/extensions/cornerstone-dicom-seg/package.json +++ b/extensions/cornerstone-dicom-seg/package.json @@ -46,8 +46,8 @@ }, "dependencies": { "@babel/runtime": "^7.20.13", - "@cornerstonejs/adapters": "^3.30.3", - "@cornerstonejs/core": "^3.30.3", + "@cornerstonejs/adapters": "^3.32.5", + "@cornerstonejs/core": "^3.32.5", "@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 dec4e2215..8e1db763e 100644 --- a/extensions/cornerstone-dicom-sr/package.json +++ b/extensions/cornerstone-dicom-sr/package.json @@ -38,7 +38,7 @@ "@ohif/extension-cornerstone": "3.11.0-beta.114", "@ohif/extension-measurement-tracking": "3.11.0-beta.114", "@ohif/ui": "3.11.0-beta.114", - "dcmjs": "^0.42.0", + "dcmjs": "0.43.1", "dicom-parser": "^1.8.9", "hammerjs": "^2.0.8", "prop-types": "^15.6.2", @@ -46,9 +46,9 @@ }, "dependencies": { "@babel/runtime": "^7.20.13", - "@cornerstonejs/adapters": "^3.30.3", - "@cornerstonejs/core": "^3.30.3", - "@cornerstonejs/tools": "^3.30.3", + "@cornerstonejs/adapters": "^3.32.5", + "@cornerstonejs/core": "^3.32.5", + "@cornerstonejs/tools": "^3.32.5", "classnames": "^2.3.2" } } diff --git a/extensions/cornerstone-dicom-sr/src/commandsModule.ts b/extensions/cornerstone-dicom-sr/src/commandsModule.ts index aa250e19c..d00969c3b 100644 --- a/extensions/cornerstone-dicom-sr/src/commandsModule.ts +++ b/extensions/cornerstone-dicom-sr/src/commandsModule.ts @@ -32,12 +32,7 @@ const _generateReport = (measurementData, additionalFindingTypes, options: Optio additionalFindingTypes ); - const report = MeasurementReport.generateReport( - filteredToolState, - metaData, - utilities.worldToImageCoords, - options - ); + const report = MeasurementReport.generateReport(filteredToolState, metaData, options); const { dataset } = report; @@ -54,7 +49,7 @@ const _generateReport = (measurementData, additionalFindingTypes, options: Optio const commandsModule = (props: withAppTypes) => { const { servicesManager, extensionManager, commandsManager } = props; - const { customizationService, viewportGridService, displaySetService } = servicesManager.services; + const { customizationService } = servicesManager.services; const actions = { changeColorMeasurement: ({ uid }) => { @@ -129,6 +124,9 @@ const commandsModule = (props: withAppTypes) => { console.log('naturalizedReport missing imaging content', naturalizedReport); throw new Error('Invalid report, no content'); } + if (!naturalizedReport.SOPClassUID) { + throw new Error('No sop class uid'); + } const onBeforeDicomStore = customizationService.getCustomization('onBeforeDicomStore'); diff --git a/extensions/cornerstone-dicom-sr/src/components/OHIFCornerstoneSRMeasurementViewport.tsx b/extensions/cornerstone-dicom-sr/src/components/OHIFCornerstoneSRMeasurementViewport.tsx index f98f4f0a3..740ae90da 100644 --- a/extensions/cornerstone-dicom-sr/src/components/OHIFCornerstoneSRMeasurementViewport.tsx +++ b/extensions/cornerstone-dicom-sr/src/components/OHIFCornerstoneSRMeasurementViewport.tsx @@ -63,18 +63,12 @@ function OHIFCornerstoneSRMeasurementViewport(props) { const updateViewport = useCallback( newMeasurementSelected => { - const { StudyInstanceUID, displaySetInstanceUID, sopClassUids } = srDisplaySet; + const { StudyInstanceUID, displaySetInstanceUID } = srDisplaySet; if (!StudyInstanceUID || !displaySetInstanceUID) { return; } - if (sopClassUids && sopClassUids.length > 1) { - // Todo: what happens if there are multiple SOP Classes? Why we are - // not throwing an error? - console.warn('More than one SOPClassUID in the same series is not yet supported.'); - } - _getViewportReferencedDisplaySetData( srDisplaySet, newMeasurementSelected, @@ -258,6 +252,9 @@ async function _getViewportReferencedDisplaySetData( } const referencedDisplaySet = displaySetService.getDisplaySetByUID(displaySetInstanceUID); + if (!referencedDisplaySet?.images) { + return { referencedDisplaySetMetadata: null, referencedDisplaySet: null }; + } const image0 = referencedDisplaySet.images[0]; const referencedDisplaySetMetadata = { diff --git a/extensions/cornerstone-dicom-sr/src/getSopClassHandlerModule.ts b/extensions/cornerstone-dicom-sr/src/getSopClassHandlerModule.ts index 775ef20bb..2143ca549 100644 --- a/extensions/cornerstone-dicom-sr/src/getSopClassHandlerModule.ts +++ b/extensions/cornerstone-dicom-sr/src/getSopClassHandlerModule.ts @@ -15,8 +15,12 @@ import { CodeNameCodeSequenceValues, CodingSchemeDesignators } from './enums'; const { sopClassDictionary } = utils; const { CORNERSTONE_3D_TOOLS_SOURCE_NAME, CORNERSTONE_3D_TOOLS_SOURCE_VERSION } = CSExtensionEnums; -const { ImageSet, MetadataProvider: metadataProvider } = classes; -const { CodeScheme: Cornerstone3DCodeScheme } = adaptersSR.Cornerstone3D; +const { MetadataProvider: metadataProvider } = classes; +const { + TEXT_ANNOTATION_POSITION, + COMMENT_CODE, + CodeScheme: Cornerstone3DCodeScheme, +} = adaptersSR.Cornerstone3D; type InstanceMetadata = Types.InstanceMetadata; @@ -216,6 +220,12 @@ async function _load( }); } +function _measurementBelongsToDisplaySet({ measurement, displaySet }) { + return ( + measurement.coords[0].ReferencedFrameOfReferenceSequence === displaySet.FrameOfReferenceUID + ); +} + /** * Checks if measurements can be added to a display set. * @@ -236,18 +246,10 @@ function _checkIfCanAddMeasurementsToDisplaySet( measurement => measurement.loaded === false ); - if ( - unloadedMeasurements.length === 0 || - !(newDisplaySet instanceof ImageSet) || - newDisplaySet.unsupported - ) { + if (!unloadedMeasurements.length || newDisplaySet.unsupported) { return; } - // const { sopClassUids } = newDisplaySet; - // Create a Set for faster lookups - // const sopClassUidSet = new Set(sopClassUids); - // Create a Map to efficiently look up ImageIds by SOPInstanceUID and frame number const imageIdMap = new Map(); const imageIds = dataSource.getImageIdsForDisplaySet(newDisplaySet); @@ -266,6 +268,7 @@ function _checkIfCanAddMeasurementsToDisplaySet( for (let j = unloadedMeasurements.length - 1; j >= 0; j--) { let measurement = unloadedMeasurements[j]; + const is3DMeasurement = measurement.coords?.[0]?.ValueType === 'SCOORD3D'; const onBeforeSRAddMeasurement = customizationService.getCustomization( 'onBeforeSRAddMeasurement' @@ -280,9 +283,15 @@ function _checkIfCanAddMeasurementsToDisplaySet( } // if it is 3d SR we can just add the SR annotation - if (is3DSR) { + if ( + is3DSR && + is3DMeasurement && + _measurementBelongsToDisplaySet({ measurement, displaySet: newDisplaySet }) + ) { addSRAnnotation(measurement, null, null); measurement.loaded = true; + measurement.displaySetInstanceUID = newDisplaySet.displaySetInstanceUID; + unloadedMeasurements.splice(j, 1); continue; } @@ -469,11 +478,7 @@ function _getMergedContentSequencesByTrackingUniqueIdentifiers(MeasurementGroups * @returns {any} - The processed measurement result. */ function _processMeasurement(mergedContentSequence) { - if ( - mergedContentSequence.some( - group => group.ValueType === 'SCOORD' || group.ValueType === 'SCOORD3D' - ) - ) { + if (mergedContentSequence.some(group => isScoordOr3d(group) && !isTextPosition(group))) { return _processTID1410Measurement(mergedContentSequence); } @@ -511,12 +516,25 @@ function _processTID1410Measurement(mergedContentSequence) { const NUMContentItems = mergedContentSequence.filter(group => group.ValueType === 'NUM'); + const { ConceptNameCodeSequence: conceptNameItem } = graphicItem; + const { CodeValue: graphicValue, CodingSchemeDesignator: graphicDesignator } = conceptNameItem; + const graphicCode = `${graphicDesignator}:${graphicValue}`; + + const pointDataItem = _getCoordsFromSCOORDOrSCOORD3D(graphicItem); + const is3DMeasurement = pointDataItem.ValueType === 'SCOORD3D'; + const pointLength = is3DMeasurement ? 3 : 2; + const pointsLength = pointDataItem.GraphicData.length / pointLength; + const measurement = { loaded: false, labels: [], - coords: [_getCoordsFromSCOORDOrSCOORD3D(graphicItem)], + coords: [pointDataItem], TrackingUniqueIdentifier: UIDREFContentItem.UID, TrackingIdentifier: TrackingIdentifierContentItem.TextValue, + graphicCode, + is3DMeasurement, + pointsLength, + graphicType: pointDataItem.GraphicType, }; NUMContentItems.forEach(item => { @@ -567,6 +585,12 @@ function _processNonGeometricallyDefinedMeasurement(mergedContentSequence) { item.ConceptNameCodeSequence.CodeValue === CodeNameCodeSequenceValues.FindingSite ); + const commentSites = mergedContentSequence.filter( + item => + item.ConceptNameCodeSequence.CodingSchemeDesignator === COMMENT_CODE.schemeDesignator && + item.ConceptNameCodeSequence.CodeValue === COMMENT_CODE.value + ); + const measurement = { loaded: false, labels: [], @@ -575,6 +599,14 @@ function _processNonGeometricallyDefinedMeasurement(mergedContentSequence) { TrackingIdentifier: TrackingIdentifierContentItem.TextValue, }; + if (commentSites) { + for (const group of commentSites) { + if (group.TextValue) { + measurement.labels.push({ label: group.TextValue, value: '' }); + } + } + } + if ( finding && CodingSchemeDesignators.CornerstoneCodeSchemes.includes( @@ -726,4 +758,17 @@ function _getSequenceAsArray(sequence) { return Array.isArray(sequence) ? sequence : [sequence]; } +function isScoordOr3d(group) { + return group.ValueType === 'SCOORD' || group.ValueType === 'SCOORD3D'; +} + +function isTextPosition(group) { + const concept = group.ConceptNameCodeSequence[0]; + return ( + concept && + concept.CodeValue === TEXT_ANNOTATION_POSITION.value && + concept.CodingSchemeDesignator === TEXT_ANNOTATION_POSITION.schemeDesignator + ); +} + export default getSopClassHandlerModule; diff --git a/extensions/cornerstone-dicom-sr/src/init.ts b/extensions/cornerstone-dicom-sr/src/init.ts index 2f4cb4464..7bf80bd2b 100644 --- a/extensions/cornerstone-dicom-sr/src/init.ts +++ b/extensions/cornerstone-dicom-sr/src/init.ts @@ -12,7 +12,6 @@ import { utilities as csToolsUtils, } from '@cornerstonejs/tools'; import { Types, MeasurementService } from '@ohif/core'; -import { StackViewport, utilities as csUtils } from '@cornerstonejs/core'; import { Enums as CSExtensionEnums } from '@ohif/extension-cornerstone'; import DICOMSRDisplayTool from './tools/DICOMSRDisplayTool'; import SCOORD3DPointTool from './tools/SCOORD3DPointTool'; @@ -57,7 +56,7 @@ export default function init({ 'SRSCOORD3DPoint', POINT, SRSCOOR3DProbeMapper.toAnnotation, - SRSCOOR3DProbeMapper.toMeasurement + SRSCOOR3DProbeMapper.toMeasurement.bind(null, { servicesManager }) ); // Modify annotation tools to use dashed lines on SR diff --git a/extensions/cornerstone-dicom-sr/src/tools/SCOORD3DPointTool.ts b/extensions/cornerstone-dicom-sr/src/tools/SCOORD3DPointTool.ts index e41260965..d05a23cfd 100644 --- a/extensions/cornerstone-dicom-sr/src/tools/SCOORD3DPointTool.ts +++ b/extensions/cornerstone-dicom-sr/src/tools/SCOORD3DPointTool.ts @@ -1,4 +1,4 @@ -import { Types, metaData, utilities as csUtils } from '@cornerstonejs/core'; +import { type Types } from '@cornerstonejs/core'; import { annotation, drawing, diff --git a/extensions/cornerstone-dicom-sr/src/utils/SRSCOOR3DProbeMapper.ts b/extensions/cornerstone-dicom-sr/src/utils/SRSCOOR3DProbeMapper.ts index b67c88772..50f377c15 100644 --- a/extensions/cornerstone-dicom-sr/src/utils/SRSCOOR3DProbeMapper.ts +++ b/extensions/cornerstone-dicom-sr/src/utils/SRSCOOR3DProbeMapper.ts @@ -7,13 +7,8 @@ const SRSCOOR3DProbe = { * @param {Object} cornerstone Cornerstone event data * @return {Measurement} Measurement instance */ - toMeasurement: ( - csToolsEventDetail, - displaySetService, - CornerstoneViewportService, - getValueTypeFromToolType, - customizationService - ) => { + toMeasurement: ({ servicesManager, getValueTypeFromToolType }, csToolsEventDetail) => { + const { displaySetService } = servicesManager.services; const { annotation } = csToolsEventDetail; const { metadata, data, annotationUID } = annotation; @@ -22,14 +17,25 @@ const SRSCOOR3DProbe = { return null; } - const { toolName } = metadata; + const { toolName, FrameOfReferenceUID } = metadata; const { points } = data.handles; + const displaySets = displaySetService + .getActiveDisplaySets() + .filter(ds => ds.FrameOfReferenceUID === FrameOfReferenceUID); + const displaySet = displaySets.filter(ds => ds.isReconstructable)[0] || displaySets[0]; + + const { StudyInstanceUID: referenceStudyUID, SeriesInstanceUID: referenceSeriesUID } = + displaySets[0] || {}; + const displayText = getDisplayText(annotation); return { uid: annotationUID, points, metadata, + referenceStudyUID, + referenceSeriesUID, + displaySetInstanceUID: displaySet?.displaySetInstanceUID, toolName: metadata.toolName, label: data.label, displayText: displayText, @@ -56,7 +62,10 @@ function getDisplayText(annotation) { } } - return displayText; + return { + primary: displayText, + secondary: [], + }; } export default SRSCOOR3DProbe; diff --git a/extensions/cornerstone-dicom-sr/src/utils/addSRAnnotation.ts b/extensions/cornerstone-dicom-sr/src/utils/addSRAnnotation.ts index 0eb3b6a41..03b53b226 100644 --- a/extensions/cornerstone-dicom-sr/src/utils/addSRAnnotation.ts +++ b/extensions/cornerstone-dicom-sr/src/utils/addSRAnnotation.ts @@ -1,9 +1,12 @@ import { Types, annotation } from '@cornerstonejs/tools'; import { metaData } from '@cornerstonejs/core'; +import { adaptersSR } from '@cornerstonejs/adapters'; import getRenderableData from './getRenderableData'; import toolNames from '../tools/toolNames'; +const { MeasurementReport } = adaptersSR.Cornerstone3D; + export default function addSRAnnotation(measurement, imageId, frameNumber) { let toolName = toolNames.DICOMSRDisplay; const renderableData = measurement.coords.reduce((acc, coordProps) => { @@ -25,7 +28,12 @@ export default function addSRAnnotation(measurement, imageId, frameNumber) { } if (valueType === 'SCOORD3D') { - toolName = toolNames.SRSCOORD3DPoint; + const adapter = MeasurementReport.getAdapterForTrackingIdentifier( + measurement.TrackingIdentifier + ); + if (!adapter) { + toolName = toolNames.SRSCOORD3DPoint; + } // get the ReferencedFrameOfReferenceUID from the measurement frameOfReferenceUID = measurement.coords[0].ReferencedFrameOfReferenceSequence; diff --git a/extensions/cornerstone-dicom-sr/src/utils/getFilteredCornerstoneToolState.ts b/extensions/cornerstone-dicom-sr/src/utils/getFilteredCornerstoneToolState.ts index 2c28311d5..46a33e3d7 100644 --- a/extensions/cornerstone-dicom-sr/src/utils/getFilteredCornerstoneToolState.ts +++ b/extensions/cornerstone-dicom-sr/src/utils/getFilteredCornerstoneToolState.ts @@ -1,17 +1,11 @@ -import OHIF from '@ohif/core'; import { annotation } from '@cornerstonejs/tools'; -const { log } = OHIF; +import { NO_IMAGE_ID } from '@cornerstonejs/adapters'; function getFilteredCornerstoneToolState(measurementData, additionalFindingTypes) { const filteredToolState = {}; function addToFilteredToolState(annotation, toolType) { - if (!annotation.metadata?.referencedImageId) { - log.warn(`[DICOMSR] No referencedImageId found for ${toolType} ${annotation.id}`); - return; - } - - const imageId = annotation.metadata.referencedImageId; + const imageId = annotation.metadata?.referencedImageId ?? NO_IMAGE_ID; if (!filteredToolState[imageId]) { filteredToolState[imageId] = {}; diff --git a/extensions/cornerstone-dicom-sr/src/utils/getLabelFromDCMJSImportedToolData.js b/extensions/cornerstone-dicom-sr/src/utils/getLabelFromDCMJSImportedToolData.js index b814b42d3..d44f498f2 100644 --- a/extensions/cornerstone-dicom-sr/src/utils/getLabelFromDCMJSImportedToolData.js +++ b/extensions/cornerstone-dicom-sr/src/utils/getLabelFromDCMJSImportedToolData.js @@ -11,7 +11,11 @@ const { CodeScheme: Cornerstone3DCodeScheme } = adaptersSR.Cornerstone3D; * @returns {string} The extracted label. */ export default function getLabelFromDCMJSImportedToolData(toolData) { - const { findingSites = [], finding } = toolData; + const { findingSites = [], finding, annotation } = toolData; + + if (annotation.data.label) { + return annotation.data.label; + } let freeTextLabel = findingSites.find( fs => fs.CodeValue === Cornerstone3DCodeScheme.codeValues.CORNERSTONEFREETEXT diff --git a/extensions/cornerstone-dicom-sr/src/utils/getRenderableData.ts b/extensions/cornerstone-dicom-sr/src/utils/getRenderableData.ts index a8546a28f..536b4c14e 100644 --- a/extensions/cornerstone-dicom-sr/src/utils/getRenderableData.ts +++ b/extensions/cornerstone-dicom-sr/src/utils/getRenderableData.ts @@ -36,6 +36,14 @@ function getRenderableData({ GraphicType, GraphicData, ValueType, imageId }) { ValueType, imageId, }); + + if (!imageId) { + // without the image id it's not possible to perform the calculations below + // these calculations also do not seem to be needed, since everything works + // just fine when we skip them. At least for SCOORD3D annotations. + return pointsWorld; + } + // We do not have an explicit draw circle svg helper in Cornerstone3D at // this time, but we can use the ellipse svg helper to draw a circle, so // here we reshape the data for that purpose. @@ -90,6 +98,13 @@ function getRenderableData({ GraphicType, GraphicData, ValueType, imageId }) { imageId, }); + if (!imageId) { + // without the image id it's not possible to perform the calculations below + // these calculations also do not seem to be needed, since everything works + // just fine when we skip them. At least for SCOORD3D annotations. + return pointsWorld; + } + const majorAxisStart = vec3.fromValues(...pointsWorld[0]); const majorAxisEnd = vec3.fromValues(...pointsWorld[1]); const minorAxisStart = vec3.fromValues(...pointsWorld[2]); diff --git a/extensions/cornerstone-dicom-sr/src/utils/hydrateStructuredReport.ts b/extensions/cornerstone-dicom-sr/src/utils/hydrateStructuredReport.ts index 2af1df704..adb21318d 100644 --- a/extensions/cornerstone-dicom-sr/src/utils/hydrateStructuredReport.ts +++ b/extensions/cornerstone-dicom-sr/src/utils/hydrateStructuredReport.ts @@ -1,15 +1,16 @@ -import { utilities, metaData } from '@cornerstonejs/core'; +import { utilities, metaData, type Types } from '@cornerstonejs/core'; import OHIF, { DicomMetadataStore } from '@ohif/core'; +import { vec3 } from 'gl-matrix'; + import getLabelFromDCMJSImportedToolData from './getLabelFromDCMJSImportedToolData'; import { adaptersSR } from '@cornerstonejs/adapters'; -import { annotation as CsAnnotation } from '@cornerstonejs/tools'; +import { annotation as CsAnnotation, type Types as ToolTypes } from '@cornerstonejs/tools'; import { Enums as CSExtensionEnums } from '@ohif/extension-cornerstone'; const { locking } = CsAnnotation; const { guid } = OHIF.utils; -const { MeasurementReport, CORNERSTONE_3D_TAG } = adaptersSR.Cornerstone3D; +const { MeasurementReport } = adaptersSR.Cornerstone3D; const { CORNERSTONE_3D_TOOLS_SOURCE_NAME, CORNERSTONE_3D_TOOLS_SOURCE_VERSION } = CSExtensionEnums; -const supportedLegacyCornerstoneTags = ['cornerstoneTools@^4.0.0']; const convertCode = (codingValues, code) => { if (!code || code.CodingSchemeDesignator === 'CORNERSTONEJS') { @@ -37,8 +38,10 @@ const convertSites = (codingValues, sites) => { }; /** - * Hydrates a structured report, for default viewports. - * + * Hydrates a structured report + * Handles 2d and 3d hydration from SCOORD and SCOORD3D points + * For 3D hydration, chooses a volume display set to display with + * FOr 2D hydration, chooses the (first) display set containing the referenced image. */ export default function hydrateStructuredReport( { servicesManager, extensionManager, commandsManager }: withAppTypes, @@ -88,7 +91,7 @@ export default function hydrateStructuredReport( // Mapping of legacy datasets is now directly handled by adapters module const datasetToUse = instance; - // Use dcmjs to generate toolState. + // Use CS3D adapters to generate toolState. let storedMeasurementByAnnotationType = MeasurementReport.generateToolState( datasetToUse, // NOTE: we need to pass in the imageIds to dcmjs since the we use them @@ -96,7 +99,6 @@ export default function hydrateStructuredReport( // that measurements were added to the display set are the same order as // the measurementGroups in the instance. sopInstanceUIDToImageId, - utilities.imageToWorldCoords, metaData ); @@ -147,6 +149,9 @@ export default function hydrateStructuredReport( for (let i = 0; i < imageIds.length; i++) { const imageId = imageIds[i]; + if (!imageId) { + continue; + } const { SeriesInstanceUID, StudyInstanceUID } = metaData.get('instance', imageId); if (!SeriesInstanceUIDs.includes(SeriesInstanceUID)) { @@ -160,38 +165,55 @@ export default function hydrateStructuredReport( } } + /** + * Gets reference data for what frame of reference and the referenced + * image id, or for 3d measurements, the volumeId to apply this annotation to. + */ + function getReferenceData(toolData): ToolTypes.AnnotationMetadata { + // Add the measurement to toolState + // dcmjs and Cornerstone3D has structural defect in supporting multi-frame + // files, and looking up the imageId from sopInstanceUIDToImageId results + // in the wrong value. + const frameNumber = (toolData.annotation.data && toolData.annotation.data.frameNumber) || 1; + const imageId = + imageIdsForToolState[toolData.sopInstanceUid][frameNumber] || + sopInstanceUIDToImageId[toolData.sopInstanceUid]; + + if (!imageId) { + return getReferenceData3D(toolData, servicesManager); + } + + const instance = metaData.get('instance', imageId); + const { + FrameOfReferenceUID, + // SOPInstanceUID, + // SeriesInstanceUID, + // StudyInstanceUID, + } = instance; + + return { + referencedImageId: imageId, + FrameOfReferenceUID, + }; + } + Object.keys(hydratableMeasurementsInSR).forEach(annotationType => { const toolDataForAnnotationType = hydratableMeasurementsInSR[annotationType]; toolDataForAnnotationType.forEach(toolData => { - // Add the measurement to toolState - // dcmjs and Cornerstone3D has structural defect in supporting multi-frame - // files, and looking up the imageId from sopInstanceUIDToImageId results - // in the wrong value. - const frameNumber = (toolData.annotation.data && toolData.annotation.data.frameNumber) || 1; - const imageId = - imageIdsForToolState[toolData.sopInstanceUid][frameNumber] || - sopInstanceUIDToImageId[toolData.sopInstanceUid]; - toolData.uid = guid(); - - const instance = metaData.get('instance', imageId); - const { - FrameOfReferenceUID, - // SOPInstanceUID, - // SeriesInstanceUID, - // StudyInstanceUID, - } = instance; + const referenceData = getReferenceData(toolData); + const { imageId } = referenceData; const annotation = { annotationUID: toolData.annotation.annotationUID, data: toolData.annotation.data, metadata: { + ...referenceData, toolName: annotationType, - referencedImageId: imageId, - FrameOfReferenceUID, }, }; + utilities.updatePlaneRestriction(annotation.data.handles.points, annotation.metadata); const source = measurementService.getSource( CORNERSTONE_3D_TOOLS_SOURCE_NAME, @@ -225,7 +247,7 @@ export default function hydrateStructuredReport( locking.setAnnotationLocked(newAnnotationUID, true); } - if (!imageIds.includes(imageId)) { + if (imageId && !imageIds.includes(imageId)) { imageIds.push(imageId); } }); @@ -238,3 +260,92 @@ export default function hydrateStructuredReport( SeriesInstanceUIDs, }; } + +/** + * For 3d annotations, there are often several display sets which could + * be used to display the annotation. Choose the first annotation with the + * same frame of reference that is reconstructable, or the first display set + * otherwise. + */ +function chooseDisplaySet(displaySets, annotation) { + if (!displaySets?.length) { + console.warn('No display set found for', annotation); + return; + } + if (displaySets.length === 1) { + return displaySets[0]; + } + const volumeDs = displaySets.find(ds => ds.isReconstructable); + if (volumeDs) { + return volumeDs; + } + return displaySets[0]; +} + +/** + * Gets the additional reference data appropriate for a 3d reference. + * This will choose a volume id, frame of reference and a plane restriction. + */ +function getReferenceData3D(toolData, servicesManager: Types.ServicesManager) { + const { FrameOfReferenceUID } = toolData.annotation.metadata; + const { points } = toolData.annotation.data.handles; + const { displaySetService } = servicesManager.services; + const displaySetsFOR = displaySetService.getDisplaySetsBy( + ds => ds.FrameOfReferenceUID === FrameOfReferenceUID + ); + if (!displaySetsFOR.length || !points?.length) { + return { + FrameOfReferenceUID, + }; + } + const ds = chooseDisplaySet(displaySetsFOR, toolData.annotation); + const cameraView = chooseCameraView(ds, points); + + const viewReference = { + ...cameraView, + volumeId: ds.displaySetInstanceUID, + FrameOfReferenceUID, + }; + utilities.updatePlaneRestriction(points, viewReference); + return viewReference; +} + +/** + * Chooses a possible camera view - right now this is fairly basic, + * just setting the unknowns to null. + */ +function chooseCameraView(_ds, points) { + const selectedPoints = choosePoints(points); + const cameraFocalPoint = centerOf(selectedPoints); + // These are sufficient to be null for now and can be set on first view + let viewPlaneNormal: Types.Point3 = null; + let viewUp: Types.Point3 = null; + + return { + cameraFocalPoint, + viewPlaneNormal, + viewUp, + }; +} + +function centerOf(points) { + const scale = 1 / points.length; + const center = vec3.create(); + for (const point of points) { + vec3.scaleAndAdd(center, center, point, scale); + } + return center; +} + +function choosePoints(points) { + if (points.length === 1 || points.length === 2) { + return points; + } + const firstIndex = 0; + const secondIndex = Math.ceil(points.length / 4); + const thirdIndex = Math.ceil(points.length / 2); + // TODO - check if colinear, if so try to find another 3 points. + + const newPoints = [points[firstIndex], points[secondIndex], points[thirdIndex]]; + return newPoints; +} diff --git a/extensions/cornerstone-dicom-sr/src/utils/isRehydratable.ts b/extensions/cornerstone-dicom-sr/src/utils/isRehydratable.ts index cf51f42f3..13dbacc02 100644 --- a/extensions/cornerstone-dicom-sr/src/utils/isRehydratable.ts +++ b/extensions/cornerstone-dicom-sr/src/utils/isRehydratable.ts @@ -22,13 +22,20 @@ export default function isRehydratable(displaySet, mappings) { 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]); + const measurement = measurements[i]; + if (!measurement) { + continue; + } + const { TrackingIdentifier = '', graphicType, graphicCode, pointsLength } = measurement; + if (!TrackingIdentifier && !graphicType) { + console.warn('No tracking identifier or graphicType for measurement ', measurement); continue; } const adapter = MeasurementReport.getAdapterForTrackingIdentifier(TrackingIdentifier); - const hydratable = adapter && mappingDefinitions.has(adapter.toolType); + const adapters = MeasurementReport.getAdaptersForTypes(graphicCode, graphicType, pointsLength); + const hydratable = + (adapter && mappingDefinitions.has(adapter.toolType)) || + (adapters && adapters.some(adapter => mappingDefinitions.has(adapter.toolType))); if (hydratable) { return true; diff --git a/extensions/cornerstone-dynamic-volume/package.json b/extensions/cornerstone-dynamic-volume/package.json index 6260c603d..530c3e4f0 100644 --- a/extensions/cornerstone-dynamic-volume/package.json +++ b/extensions/cornerstone-dynamic-volume/package.json @@ -34,7 +34,7 @@ "@ohif/extension-default": "3.11.0-beta.114", "@ohif/i18n": "3.11.0-beta.114", "@ohif/ui": "3.11.0-beta.114", - "dcmjs": "^0.42.0", + "dcmjs": "0.43.1", "dicom-parser": "^1.8.21", "hammerjs": "^2.0.8", "prop-types": "^15.6.2", @@ -42,8 +42,8 @@ }, "dependencies": { "@babel/runtime": "^7.20.13", - "@cornerstonejs/core": "^3.30.3", - "@cornerstonejs/tools": "^3.30.3", + "@cornerstonejs/core": "^3.32.5", + "@cornerstonejs/tools": "^3.32.5", "classnames": "^2.3.2" } } diff --git a/extensions/cornerstone/package.json b/extensions/cornerstone/package.json index 5648e76df..bfb81a979 100644 --- a/extensions/cornerstone/package.json +++ b/extensions/cornerstone/package.json @@ -38,10 +38,10 @@ "@cornerstonejs/codec-libjpeg-turbo-8bit": "^1.2.2", "@cornerstonejs/codec-openjpeg": "^1.2.4", "@cornerstonejs/codec-openjph": "^2.4.5", - "@cornerstonejs/dicom-image-loader": "^3.30.3", + "@cornerstonejs/dicom-image-loader": "^3.32.5", "@ohif/core": "3.11.0-beta.114", "@ohif/ui": "3.11.0-beta.114", - "dcmjs": "^0.42.0", + "dcmjs": "0.43.1", "dicom-parser": "^1.8.21", "hammerjs": "^2.0.8", "prop-types": "^15.6.2", @@ -51,12 +51,12 @@ }, "dependencies": { "@babel/runtime": "^7.20.13", - "@cornerstonejs/adapters": "^3.30.3", - "@cornerstonejs/ai": "^3.30.3", - "@cornerstonejs/core": "^3.30.3", - "@cornerstonejs/labelmap-interpolation": "^3.30.3", - "@cornerstonejs/polymorphic-segmentation": "^3.30.3", - "@cornerstonejs/tools": "^3.30.3", + "@cornerstonejs/adapters": "^3.32.5", + "@cornerstonejs/ai": "^3.32.5", + "@cornerstonejs/core": "^3.32.5", + "@cornerstonejs/labelmap-interpolation": "^3.32.5", + "@cornerstonejs/polymorphic-segmentation": "^3.32.5", + "@cornerstonejs/tools": "^3.32.5", "@itk-wasm/morphological-contour-interpolation": "1.1.0", "@kitware/vtk.js": "32.12.0", "html2canvas": "^1.4.1", diff --git a/extensions/cornerstone/src/Viewport/OHIFCornerstoneViewport.tsx b/extensions/cornerstone/src/Viewport/OHIFCornerstoneViewport.tsx index 0b4b8f73a..328975ec9 100644 --- a/extensions/cornerstone/src/Viewport/OHIFCornerstoneViewport.tsx +++ b/extensions/cornerstone/src/Viewport/OHIFCornerstoneViewport.tsx @@ -13,7 +13,6 @@ import CinePlayer from '../components/CinePlayer'; import type { Types } from '@ohif/core'; import OHIFViewportActionCorners from '../components/OHIFViewportActionCorners'; -import ViewportColorbarsContainer from '../components/ViewportColorbar'; import { getViewportPresentations } from '../utils/presentations/getViewportPresentations'; import { useSynchronizersStore } from '../stores/useSynchronizersStore'; import ActiveViewportBehavior from '../utils/ActiveViewportBehavior'; @@ -305,31 +304,6 @@ const OHIFCornerstoneViewport = React.memo( loadViewportData(); }, [viewportOptions, displaySets, dataSource]); - /** - * There are two scenarios for jump to click - * 1. Current viewports contain the displaySet that the annotation was drawn on - * 2. Current viewports don't contain the displaySet that the annotation was drawn on - * and we need to change the viewports displaySet for jumping. - * Since measurement_jump happens via events and listeners, the former case is handled - * by the measurement_jump direct callback, but the latter case is handled first by - * the viewportGrid to set the correct displaySet on the viewport, AND THEN we check - * the cache for jumping to see if there is any jump queued, then we jump to the correct slice. - */ - useEffect(() => { - if (isJumpToMeasurementDisabled) { - return; - } - - const { unsubscribe } = measurementService.subscribe( - MeasurementService.EVENTS.JUMP_TO_MEASUREMENT_VIEWPORT, - event => handleJumpToMeasurement(event, elementRef, viewportId, cornerstoneViewportService) - ); - - return () => { - unsubscribe(); - }; - }, [displaySets, elementRef, viewportId, isJumpToMeasurementDisabled, servicesManager]); - const Notification = customizationService.getCustomization('ui.notificationComponent'); return ( @@ -387,54 +361,6 @@ const OHIFCornerstoneViewport = React.memo( areEqual ); -// Helper function to handle jumping to measurements -function handleJumpToMeasurement(event, elementRef, viewportId, cornerstoneViewportService) { - const { measurement, isConsumed } = event; - if (!measurement || isConsumed) { - return; - } - - const enabledElement = getEnabledElement(elementRef.current); - - if (!enabledElement) { - return; - } - - const viewport = enabledElement.viewport as csTypes.IStackViewport | csTypes.IVolumeViewport; - - const { metadata, displaySetInstanceUID } = measurement; - - const viewportDisplaySets = cornerstoneViewportService.getViewportDisplaySets(viewportId); - - const showingDisplaySet = viewportDisplaySets.find( - ds => ds.displaySetInstanceUID === displaySetInstanceUID - ); - - let metadataToUse = metadata; - // if it is not showing the displaySet we need to remove the FOR from the metadata - if (!showingDisplaySet) { - metadataToUse = { - ...metadata, - FrameOfReferenceUID: undefined, - }; - } - - // Todo: make it work with cases where we want to define FOR based measurements too - if (!viewport.isReferenceViewable(metadataToUse, WITH_NAVIGATION)) { - return; - } - - try { - viewport.setViewReference(metadata); - viewport.render(); - } catch (e) { - console.warn('Unable to apply', metadata, e); - } - - cs3DTools.annotation.selection.setAnnotationSelected(measurement.uid); - event?.consume?.(); -} - function _rehydrateSynchronizers(viewportId: string, syncGroupService: any) { const { synchronizersStore } = useSynchronizersStore.getState(); const synchronizers = synchronizersStore[viewportId]; @@ -558,16 +484,4 @@ function areEqual(prevProps, nextProps) { return true; } -// Helper function to check if display sets have changed -function haveDisplaySetsChanged(prevDisplaySets, currentDisplaySets) { - if (prevDisplaySets.length !== currentDisplaySets.length) { - return true; - } - - return currentDisplaySets.some((currentDS, index) => { - const prevDS = prevDisplaySets[index]; - return currentDS.displaySetInstanceUID !== prevDS.displaySetInstanceUID; - }); -} - export default OHIFCornerstoneViewport; diff --git a/extensions/cornerstone/src/commandsModule.ts b/extensions/cornerstone/src/commandsModule.ts index 337e386c0..9671a4d43 100644 --- a/extensions/cornerstone/src/commandsModule.ts +++ b/extensions/cornerstone/src/commandsModule.ts @@ -146,6 +146,70 @@ function commandsModule({ } const actions = { + jumpToMeasurementViewport: ({ annotationUID, measurement }) => { + cornerstoneTools.annotation.selection.setAnnotationSelected(annotationUID, true); + const { metadata } = measurement; + + const activeViewportId = viewportGridService.getActiveViewportId(); + // Finds the best viewport to jump to for showing the annotation view reference + // This may be different from active if there is a viewport already showing the display set. + const viewportId = cornerstoneViewportService.findNavigationCompatibleViewportId( + activeViewportId, + metadata + ); + if (viewportId) { + const viewport = cornerstoneViewportService.getCornerstoneViewport(viewportId); + viewport.setViewReference(metadata); + viewport.render(); + return; + } + + const { displaySetInstanceUID: referencedDisplaySetInstanceUID } = measurement; + if (!referencedDisplaySetInstanceUID) { + console.warn('ViewportGrid::No display set found in', measurement); + return; + } + + // Finds the viewport to update to show the given displayset/orientation. + // This will choose a view already containing the measurement display set + // if possible, otherwise will fallback to the active. + const viewportToUpdate = cornerstoneViewportService.findUpdateableViewportConfiguration( + activeViewportId, + measurement + ); + + if (!viewportToUpdate) { + console.warn('Unable to find a viewport to show this in'); + return; + } + const updatedViewports = hangingProtocolService.getViewportsRequireUpdate( + viewportToUpdate.viewportId, + referencedDisplaySetInstanceUID + ); + + if (!updatedViewports?.[0]) { + console.warn( + 'ViewportGrid::Unable to navigate to viewport containing', + referencedDisplaySetInstanceUID + ); + return; + } + + updatedViewports[0].viewportOptions = viewportToUpdate.viewportOptions; + + // Update stored position presentation + commandsManager.run('updateStoredPositionPresentation', { + viewportId: viewportToUpdate.viewportId, + displaySetInstanceUIDs: [referencedDisplaySetInstanceUID], + referencedImageId: measurement.referencedImageId, + options: { + ...measurement.metadata, + }, + }); + + commandsManager.run('setDisplaySetsForViewports', { viewportsToUpdate: updatedViewports }); + }, + hydrateSecondaryDisplaySet: async ({ displaySet, viewportId }) => { if (!displaySet) { return; @@ -328,6 +392,8 @@ function commandsModule({ type, }); }, + + /** Stores the changed position presentation */ updateStoredPositionPresentation: ({ viewportId, displaySetInstanceUIDs, @@ -351,22 +417,23 @@ function commandsModule({ ([key, value]) => { return ( displaySetInstanceUIDs.every(uid => key.includes(uid)) && - value.viewportId === viewportId + value?.viewportId === viewportId ); } )?.[0]; } // Create presentation data with referencedImageId and options if provided - const presentationData = referencedImageId - ? { - ...presentations.positionPresentation, - viewReference: { - referencedImageId, - ...options, - }, - } - : presentations.positionPresentation; + const presentationData = + referencedImageId || options?.FrameOfReferenceUID + ? { + ...presentations.positionPresentation, + viewReference: { + referencedImageId, + ...options, + }, + } + : presentations.positionPresentation; if (previousReferencedDisplaySetStoreKey) { setPositionPresentation(previousReferencedDisplaySetStoreKey, presentationData); @@ -2153,9 +2220,7 @@ function commandsModule({ updateMeasurement: { commandFn: actions.updateMeasurement, }, - jumpToMeasurement: { - commandFn: actions.jumpToMeasurement, - }, + jumpToMeasurement: actions.jumpToMeasurement, removeMeasurement: { commandFn: actions.removeMeasurement, }, @@ -2415,6 +2480,7 @@ function commandsModule({ startRecordingForAnnotationGroup: actions.startRecordingForAnnotationGroup, endRecordingForAnnotationGroup: actions.endRecordingForAnnotationGroup, toggleSegmentLabel: actions.toggleSegmentLabel, + jumpToMeasurementViewport: actions.jumpToMeasurementViewport, initializeSegmentLabelTool: actions.initializeSegmentLabelTool, }; diff --git a/extensions/cornerstone/src/components/StudyMeasurements.tsx b/extensions/cornerstone/src/components/StudyMeasurements.tsx index 446f4896a..dd1f864a4 100644 --- a/extensions/cornerstone/src/components/StudyMeasurements.tsx +++ b/extensions/cornerstone/src/components/StudyMeasurements.tsx @@ -24,36 +24,38 @@ export const groupByStudy = (items, grouping, childProps) => { let firstSelected, firstGroup; - items.forEach(item => { - const studyUID = getItemStudyInstanceUID(item); - if (!groups.has(studyUID)) { - const items = []; - const filter = MeasurementFilters.filterAnd( - MeasurementFilters.filterMeasurementsByStudyUID(studyUID), - grouping.filter - ); - const group = { - ...grouping, - items, - displayMeasurements: items, - key: studyUID, - isSelected: studyUID === activeStudyUID, - StudyInstanceUID: studyUID, - filter, - measurementFilter: filter, - }; - if (group.isSelected && !firstSelected) { - firstSelected = group; + items + .filter(item => item.displaySetInstanceUID) + .forEach(item => { + const studyUID = getItemStudyInstanceUID(item); + if (!groups.has(studyUID)) { + const items = []; + const filter = MeasurementFilters.filterAnd( + MeasurementFilters.filterMeasurementsByStudyUID(studyUID), + grouping.filter + ); + const group = { + ...grouping, + items, + displayMeasurements: items, + key: studyUID, + isSelected: studyUID === activeStudyUID, + StudyInstanceUID: studyUID, + filter, + measurementFilter: filter, + }; + if (group.isSelected && !firstSelected) { + firstSelected = group; + } + firstGroup ||= group; + groups.set(studyUID, group); } - firstGroup ||= group; - groups.set(studyUID, group); - } - if (!firstSelected && firstGroup) { - firstGroup.isSelected = true; - } - const group = groups.get(studyUID); - group.items.push(item); - }); + if (!firstSelected && firstGroup) { + firstGroup.isSelected = true; + } + const group = groups.get(studyUID); + group.items.push(item); + }); return groups; }; diff --git a/extensions/cornerstone/src/customizations/layoutSelectorCustomization.ts b/extensions/cornerstone/src/customizations/layoutSelectorCustomization.ts index 94295cc98..67d508b47 100644 --- a/extensions/cornerstone/src/customizations/layoutSelectorCustomization.ts +++ b/extensions/cornerstone/src/customizations/layoutSelectorCustomization.ts @@ -34,15 +34,20 @@ export default { if (!viewportId) { return []; } - const displaySetInsaneUIDs = viewportGridService.getDisplaySetsUIDsForViewport(viewportId); + const displaySetInstanceUIDs = viewportGridService.getDisplaySetsUIDsForViewport(viewportId); - if (!displaySetInsaneUIDs) { + if (!displaySetInstanceUIDs) { return []; } - const displaySets = displaySetInsaneUIDs.map(uid => - displaySetService.getDisplaySetByUID(uid) - ); + const displaySets = displaySetInstanceUIDs.map(uid => { + const displaySet = displaySetService.getDisplaySetByUID(uid); + const referencedDisplaySetUID = displaySet?.measurements?.[0]?.displaySetInstanceUID; + if (displaySet.Modality === 'SR' && referencedDisplaySetUID) { + return displaySetService.getDisplaySetByUID(referencedDisplaySetUID); + } + return displaySet; + }); return hangingProtocols .map(hp => { diff --git a/extensions/cornerstone/src/hooks/useViewportRendering.tsx b/extensions/cornerstone/src/hooks/useViewportRendering.tsx index aa5089129..49af2299e 100644 --- a/extensions/cornerstone/src/hooks/useViewportRendering.tsx +++ b/extensions/cornerstone/src/hooks/useViewportRendering.tsx @@ -279,7 +279,7 @@ export function useViewportRendering( } // Get threshold from colormap if available - if (properties.colormap && properties.colormap.threshold !== undefined) { + if (properties?.colormap && properties.colormap.threshold !== undefined) { setThresholdState(properties.colormap.threshold); } } diff --git a/extensions/cornerstone/src/index.tsx b/extensions/cornerstone/src/index.tsx index 1db533696..ff292aa8b 100644 --- a/extensions/cornerstone/src/index.tsx +++ b/extensions/cornerstone/src/index.tsx @@ -195,7 +195,7 @@ const cornerstoneExtension: Types.Extensions.Extension = { { name: 'cornerstone', component: ExtendedOHIFCornerstoneViewport, - isReferenceViewable: props => utils.isReferenceViewable({ ...props, servicesManager }), + isReferenceViewable: utils.isReferenceViewable.bind(null, servicesManager), }, ]; }, diff --git a/extensions/cornerstone/src/init.tsx b/extensions/cornerstone/src/init.tsx index 8916de073..f5db9060a 100644 --- a/extensions/cornerstone/src/init.tsx +++ b/extensions/cornerstone/src/init.tsx @@ -189,17 +189,13 @@ export default async function init({ initCineService(servicesManager); initStudyPrefetcherService(servicesManager); - [ - measurementService.EVENTS.JUMP_TO_MEASUREMENT_LAYOUT, - measurementService.EVENTS.JUMP_TO_MEASUREMENT_VIEWPORT, - ].forEach(event => { - measurementService.subscribe(event, evt => { - const { measurement } = evt; - const { uid: annotationUID } = measurement; - cornerstoneTools.annotation.selection.setAnnotationSelected(annotationUID, true); - }); + measurementService.subscribe(measurementService.EVENTS.JUMP_TO_MEASUREMENT, evt => { + const { measurement } = evt; + const { uid: annotationUID } = measurement; + commandsManager.runCommand('jumpToMeasurementViewport', { measurement, annotationUID, evt }); }); + // When a custom image load is performed, update the relevant viewports hangingProtocolService.subscribe( hangingProtocolService.EVENTS.CUSTOM_IMAGE_LOAD_PERFORMED, diff --git a/extensions/cornerstone/src/initMeasurementService.ts b/extensions/cornerstone/src/initMeasurementService.ts index 34e9598a7..ab150a4e0 100644 --- a/extensions/cornerstone/src/initMeasurementService.ts +++ b/extensions/cornerstone/src/initMeasurementService.ts @@ -436,7 +436,7 @@ const connectMeasurementServiceToTools = ({ return; } - const { referenceSeriesUID, referenceStudyUID, SOPInstanceUID } = measurement; + const { referenceSeriesUID, referenceStudyUID, SOPInstanceUID, metadata } = measurement; const instance = DicomMetadataStore.getInstance( referenceStudyUID, @@ -463,8 +463,12 @@ const connectMeasurementServiceToTools = ({ annotationUID: measurement.uid, highlighted: false, isLocked: false, - invalidated: false, + // This is used to force a re-render of the annotation to + // re-calculate cached stats since sometimes in SR we + // get empty cached stats + invalidated: true, metadata: { + ...metadata, toolName: measurement.toolName, FrameOfReferenceUID: measurement.FrameOfReferenceUID, referencedImageId: imageId, diff --git a/extensions/cornerstone/src/services/ViewportService/CornerstoneViewportService.ts b/extensions/cornerstone/src/services/ViewportService/CornerstoneViewportService.ts index 0548bcc95..201970f29 100644 --- a/extensions/cornerstone/src/services/ViewportService/CornerstoneViewportService.ts +++ b/extensions/cornerstone/src/services/ViewportService/CornerstoneViewportService.ts @@ -36,7 +36,6 @@ import { useLutPresentationStore } from '../../stores/useLutPresentationStore'; import { usePositionPresentationStore } from '../../stores/usePositionPresentationStore'; import { useSynchronizersStore } from '../../stores/useSynchronizersStore'; import { useSegmentationPresentationStore } from '../../stores/useSegmentationPresentationStore'; -import { VOLUME_LOADER_SCHEME } from '../../constants'; const EVENTS = { VIEWPORT_DATA_CHANGED: 'event::cornerstoneViewportService:viewportDataChanged', @@ -47,6 +46,7 @@ const MIN_STACK_VIEWPORTS_TO_ENQUEUE_RESIZE = 12; const MIN_VOLUME_VIEWPORTS_TO_ENQUEUE_RESIZE = 6; export const WITH_NAVIGATION = { withNavigation: true, withOrientation: false }; +export const WITH_ORIENTATION = { withNavigation: true, withOrientation: true }; /** * Handles cornerstone viewport logic including enabling, disabling, and @@ -551,10 +551,13 @@ class CornerstoneViewportService extends PubSubService implements IViewportServi * was initiated. * @return the viewportId that the measurement should be displayed in. */ - public getViewportIdToJump(activeViewportId: string, metadata): string { + public findNavigationCompatibleViewportId(activeViewportId: string, metadata): string { // First check if the active viewport can just be navigated to show the given item const activeViewport = this.getCornerstoneViewport(activeViewportId); - if (activeViewport.isReferenceViewable(metadata, { withNavigation: true })) { + if (!activeViewport) { + console.warn('No active viewport found for', activeViewportId); + } + if (activeViewport?.isReferenceViewable(metadata, { withNavigation: true })) { return activeViewportId; } @@ -570,7 +573,7 @@ class CornerstoneViewportService extends PubSubService implements IViewportServi // No viewport is in the right display set/orientation to show this, so see if // the active viewport could change orientations to show this if ( - activeViewport.isReferenceViewable(metadata, { withNavigation: true, withOrientation: true }) + activeViewport?.isReferenceViewable(metadata, { withNavigation: true, withOrientation: true }) ) { return activeViewportId; } @@ -589,6 +592,86 @@ class CornerstoneViewportService extends PubSubService implements IViewportServi return null; } + /** + * Figures out which viewport to update when the viewport type needs to change. + * This may not be the active viewport if there is already a viewport showing + * the display set, but in the wrong orientation. + * + * The viewport will need to update the viewport type and/or display set to + * display the resulting data. + * + * The first choice will be a viewport already showing the correct display set, + * but showing it as a stack. + * + * Second choice is to see if there is a viewport already showing the right + * orientation for the image, but the wrong display set. This fixes the + * case where the user is in MPR and a viewport other than active should be + * the one to change to display the iamge. + * + * Final choice is to use the provide activeViewportId. This will cover + * changes to/from video and wsi viewports and other cases where no + * viewport is really even close to being able to display the measurement. + */ + public findUpdateableViewportConfiguration(activeViewportId: string, measurement) { + const { metadata, displaySetInstanceUID } = measurement; + const { volumeId, referencedImageId } = metadata; + const { displaySetService, viewportGridService } = this.servicesManager.services; + const displaySet = displaySetService.getDisplaySetByUID(displaySetInstanceUID); + + let { viewportType } = displaySet; + if (!viewportType) { + if (referencedImageId && !displaySet.isReconstructable) { + viewportType = csEnums.ViewportType.STACK; + } else if (volumeId) { + viewportType = 'volume'; + } + } + + // Find viewports that could be updated to be volumes to show this view + // That prefers a viewport already showing the right display set. + if (volumeId) { + for (const id of this.viewportsById.keys()) { + const viewport = this.getCornerstoneViewport(id); + if (viewport?.isReferenceViewable(metadata, { asVolume: true, withNavigation: true })) { + return { + viewportId: id, + displaySetInstanceUID, + viewportOptions: { viewportType }, + }; + } + } + } + + // Find a viewport in the correct orientation showing a different display set + // which could be used to display the annotation. + const altMetadata = { ...metadata, volumeId: null, referencedImageId: null }; + for (const id of this.viewportsById.keys()) { + const viewport = this.getCornerstoneViewport(id); + const viewportDisplaySetUID = viewportGridService.getDisplaySetsUIDsForViewport(id)?.[0]; + if (!viewportDisplaySetUID || !viewport) { + continue; + } + if (volumeId) { + altMetadata.volumeId = viewportDisplaySetUID; + } + altMetadata.FrameOfReferenceUID = this._getFrameOfReferenceUID(viewportDisplaySetUID); + if (viewport.isReferenceViewable(altMetadata, { asVolume: true, withNavigation: true })) { + return { + viewportId: id, + displaySetInstanceUID, + viewportOptions: { viewportType }, + }; + } + } + + // Just display in the active viewport + return { + viewportId: activeViewportId, + displaySetInstanceUID, + viewportOptions: { viewportType }, + }; + } + /** * Sets the image data for the given viewport. */ @@ -626,7 +709,7 @@ class CornerstoneViewportService extends PubSubService implements IViewportServi // is being used to navigate to the initial view position for measurement // navigation and other navigation forcing specific views. let initialImageIndexToUse = - presentations?.positionPresentation?.initialImageIndex ?? initialImageIndex; + presentations?.positionPresentation?.initialImageIndex ?? initialImageIndex; const { rotation, flipHorizontal, displayArea } = viewportInfo.getViewportOptions(); @@ -662,7 +745,11 @@ class CornerstoneViewportService extends PubSubService implements IViewportServi initialImageIndexToUse = imageIds.indexOf(referencedImageId); } - if (initialImageIndexToUse === undefined || initialImageIndexToUse === null) { + if ( + initialImageIndexToUse === undefined || + initialImageIndexToUse === null || + initialImageIndexToUse < 0 + ) { initialImageIndexToUse = this._getInitialImageIndexForViewport(viewportInfo, imageIds) || 0; } @@ -1085,8 +1172,8 @@ class CornerstoneViewportService extends PubSubService implements IViewportServi const { dimensions, spacing } = imageVolume; const slabThickness = Math.sqrt( Math.pow(dimensions[0] * spacing[0], 2) + - Math.pow(dimensions[1] * spacing[1], 2) + - Math.pow(dimensions[2] * spacing[2], 2) + Math.pow(dimensions[1] * spacing[1], 2) + + Math.pow(dimensions[2] * spacing[2], 2) ); return slabThickness; @@ -1214,7 +1301,10 @@ class CornerstoneViewportService extends PubSubService implements IViewportServi ): void { const viewRef = positionPresentation?.viewReference; if (viewRef) { - if (viewport.isReferenceViewable(viewRef, WITH_NAVIGATION)) { + // The orientation can be updated here to navigate to the specified + // measurement or previous item, but this will not switch to volume + // or to stack from the other type + if (viewport.isReferenceViewable(viewRef, WITH_ORIENTATION)) { viewport.setViewReference(viewRef); } else { console.warn('Unable to apply reference viewable', viewRef); diff --git a/extensions/cornerstone/src/utils/isReferenceViewable.ts b/extensions/cornerstone/src/utils/isReferenceViewable.ts index 246c7af34..79f542bef 100644 --- a/extensions/cornerstone/src/utils/isReferenceViewable.ts +++ b/extensions/cornerstone/src/utils/isReferenceViewable.ts @@ -3,20 +3,17 @@ import { Enums } from '@cornerstonejs/core'; import OrientationAxis = Enums.OrientationAxis; -export const isReferenceViewable = ({ - viewportId, - reference, - viewportOptions, - servicesManager, -}) => { +export const isReferenceViewable = (servicesManager, viewportId, reference, viewportOptions?) => { const { cornerstoneViewportService, displaySetService } = servicesManager.services; if (!viewportOptions) { const viewport = cornerstoneViewportService.getCornerstoneViewport(viewportId); - // we can make a customization for this to allow + // we can make a customization for this to allow specific settings + // The annotation can be seen either via navigation or by changing to a volume const isViewable = viewport.isReferenceViewable(reference, { withNavigation: true, + asVolume: true, }); return isViewable; diff --git a/extensions/cornerstone/src/utils/measurementServiceMappings/Bidirectional.ts b/extensions/cornerstone/src/utils/measurementServiceMappings/Bidirectional.ts index c4ae6b53f..5950adeff 100644 --- a/extensions/cornerstone/src/utils/measurementServiceMappings/Bidirectional.ts +++ b/extensions/cornerstone/src/utils/measurementServiceMappings/Bidirectional.ts @@ -83,7 +83,7 @@ const Bidirectional = { function getMappedAnnotations(annotation, displaySetService) { const { metadata, data } = annotation; - const { cachedStats } = data; + const { cachedStats = {} } = data; const { referencedImageId } = metadata; const targets = Object.keys(cachedStats); diff --git a/extensions/cornerstone/src/utils/measurementServiceMappings/CircleROI.ts b/extensions/cornerstone/src/utils/measurementServiceMappings/CircleROI.ts index 754a62340..6963d3858 100644 --- a/extensions/cornerstone/src/utils/measurementServiceMappings/CircleROI.ts +++ b/extensions/cornerstone/src/utils/measurementServiceMappings/CircleROI.ts @@ -84,7 +84,7 @@ const CircleROI = { function getMappedAnnotations(annotation, displaySetService) { const { metadata, data } = annotation; - const { cachedStats } = data; + const { cachedStats={} } = data; const { referencedImageId } = metadata; const targets = Object.keys(cachedStats); diff --git a/extensions/cornerstone/src/utils/measurementServiceMappings/CobbAngle.ts b/extensions/cornerstone/src/utils/measurementServiceMappings/CobbAngle.ts index e4f3449d8..ae47e6a41 100644 --- a/extensions/cornerstone/src/utils/measurementServiceMappings/CobbAngle.ts +++ b/extensions/cornerstone/src/utils/measurementServiceMappings/CobbAngle.ts @@ -92,6 +92,11 @@ function getMappedAnnotations(annotation, displaySetService) { const { metadata, data } = annotation; const { cachedStats } = data; const { referencedImageId } = metadata; + + if( !cachedStats ) { + return; + } + const targets = Object.keys(cachedStats); if (!targets.length) { diff --git a/extensions/cornerstone/src/utils/measurementServiceMappings/Length.ts b/extensions/cornerstone/src/utils/measurementServiceMappings/Length.ts index e193febbf..16fb6c0fe 100644 --- a/extensions/cornerstone/src/utils/measurementServiceMappings/Length.ts +++ b/extensions/cornerstone/src/utils/measurementServiceMappings/Length.ts @@ -3,7 +3,6 @@ import { getIsLocked } from './utils/getIsLocked'; import { getIsVisible } from './utils/getIsVisible'; import getSOPInstanceAttributes from './utils/getSOPInstanceAttributes'; import { utils } from '@ohif/core'; -import { config } from '@cornerstonejs/tools/annotation'; const Length = { toAnnotation: measurement => {}, @@ -78,7 +77,6 @@ const Length = { isLocked, isVisible, metadata, - // color, referenceSeriesUID: SeriesInstanceUID, referenceStudyUID: StudyInstanceUID, referencedImageId, diff --git a/extensions/cornerstone/src/utils/measurementServiceMappings/PlanarFreehandROI.ts b/extensions/cornerstone/src/utils/measurementServiceMappings/PlanarFreehandROI.ts index eccf537d3..07d500d9d 100644 --- a/extensions/cornerstone/src/utils/measurementServiceMappings/PlanarFreehandROI.ts +++ b/extensions/cornerstone/src/utils/measurementServiceMappings/PlanarFreehandROI.ts @@ -95,6 +95,11 @@ function getMappedAnnotations(annotation, displaySetService) { const { metadata, data } = annotation; const { cachedStats } = data; const { referencedImageId } = metadata; + + if( !cachedStats ) { + return; + } + const targets = Object.keys(cachedStats); if (!targets.length) { diff --git a/extensions/cornerstone/src/utils/measurementServiceMappings/RectangleROI.ts b/extensions/cornerstone/src/utils/measurementServiceMappings/RectangleROI.ts index 40c1bd793..f43dc6be8 100644 --- a/extensions/cornerstone/src/utils/measurementServiceMappings/RectangleROI.ts +++ b/extensions/cornerstone/src/utils/measurementServiceMappings/RectangleROI.ts @@ -211,9 +211,11 @@ function getDisplayText(mappedAnnotations, displaySet, customizationService) { mappedAnnotations.forEach(mappedAnnotation => { const { unit, max, SeriesNumber } = mappedAnnotation; - const maxStr = getStatisticDisplayString(max, unit, 'max'); + if (Number.isFinite(max)) { + const maxStr = getStatisticDisplayString(max, unit, 'max'); - displayText.primary.push(maxStr); + displayText.primary.push(maxStr); + } displayText.secondary.push(`S: ${SeriesNumber}${instanceText}${frameText}`); }); diff --git a/extensions/cornerstone/src/utils/measurementServiceMappings/utils/getSOPInstanceAttributes.js b/extensions/cornerstone/src/utils/measurementServiceMappings/utils/getSOPInstanceAttributes.js index 101ef2117..20fcfb695 100644 --- a/extensions/cornerstone/src/utils/measurementServiceMappings/utils/getSOPInstanceAttributes.js +++ b/extensions/cornerstone/src/utils/measurementServiceMappings/utils/getSOPInstanceAttributes.js @@ -1,5 +1,36 @@ import * as cornerstone from '@cornerstonejs/core'; +function getDisplaySet({ metadata, displaySetService }) { + const { volumeId } = metadata; + + if( volumeId ) { + const displaySet = displaySetService.getDisplaySetsBy(displaySet => + volumeId.includes(displaySet.uid) + )[0]; + if( displaySet ) { + return displaySet; + } + console.warn("Unable to find volumeId", volumeId); + metadata.volumeId = null; + } + + if (!metadata.FrameOfReferenceUID) { + throw new Error( + 'No volumeId and no FrameOfReferenceUID provided. Could not find matching displaySet.' + ); + } + const displaySet = Array.from(displaySetService.getDisplaySetCache().values()).find( + ds => ds.instance?.FrameOfReferenceUID === metadata.FrameOfReferenceUID + ); + + if (!displaySet) { + throw new Error('Could not find matching displaySet for the provided FrameOfReferenceUID.'); + } + + return displaySet; + +} + /** * It checks if the imageId is provided then it uses it to query * the metadata and get the SOPInstanceUID, SeriesInstanceUID and StudyInstanceUID. @@ -13,11 +44,7 @@ export default function getSOPInstanceAttributes(imageId, displaySetService, ann } const { metadata } = annotation; - const { volumeId } = metadata; - - const displaySet = displaySetService.getDisplaySetsBy(displaySet => - volumeId.includes(displaySet.uid) - )[0]; + const displaySet = getDisplaySet({ metadata, displaySetService }); const { StudyInstanceUID, SeriesInstanceUID } = displaySet; return { diff --git a/extensions/default/package.json b/extensions/default/package.json index 07ca73fdf..e44f71730 100644 --- a/extensions/default/package.json +++ b/extensions/default/package.json @@ -36,7 +36,7 @@ "peerDependencies": { "@ohif/core": "3.11.0-beta.114", "@ohif/i18n": "3.11.0-beta.114", - "dcmjs": "^0.42.0", + "dcmjs": "0.43.1", "dicomweb-client": "^0.10.4", "prop-types": "^15.6.2", "react": "^18.3.1", diff --git a/extensions/default/src/DicomWebDataSource/index.ts b/extensions/default/src/DicomWebDataSource/index.ts index 654f3cca5..afc781b21 100644 --- a/extensions/default/src/DicomWebDataSource/index.ts +++ b/extensions/default/src/DicomWebDataSource/index.ts @@ -22,7 +22,7 @@ const { DicomMetaDictionary, DicomDict } = dcmjs.data; const { naturalizeDataset, denaturalizeDataset } = DicomMetaDictionary; const ImplementationClassUID = '2.25.270695996825855179949881587723571202391.2.0.0'; -const ImplementationVersionName = 'OHIF-VIEWER-2.0.0'; +const ImplementationVersionName = 'OHIF-3.11.0'; const EXPLICIT_VR_LITTLE_ENDIAN = '1.2.840.10008.1.2.1'; const metadataProvider = classes.MetadataProvider; diff --git a/extensions/default/src/Panels/StudyBrowser/PanelStudyBrowser.tsx b/extensions/default/src/Panels/StudyBrowser/PanelStudyBrowser.tsx index fe2d744b7..4069bc68f 100644 --- a/extensions/default/src/Panels/StudyBrowser/PanelStudyBrowser.tsx +++ b/extensions/default/src/Panels/StudyBrowser/PanelStudyBrowser.tsx @@ -383,8 +383,6 @@ function PanelStudyBrowser({ // Set the activeTabName and expand the study const thumbnailLocation = _findTabAndStudyOfDisplaySet(displaySetInstanceUID, tabs); if (!thumbnailLocation) { - console.warn('jumpToThumbnail: displaySet thumbnail not found.'); - return; } const { tabName, StudyInstanceUID } = thumbnailLocation; diff --git a/extensions/default/src/getViewportModule.tsx b/extensions/default/src/getViewportModule.tsx index bba53b678..f9e2e214a 100644 --- a/extensions/default/src/getViewportModule.tsx +++ b/extensions/default/src/getViewportModule.tsx @@ -5,7 +5,6 @@ const getViewportModule = () => { { name: 'chartViewport', component: LineChartViewport, - isReferenceViewable: () => false, }, ]; }; diff --git a/extensions/default/src/utils/promptSaveReport.tsx b/extensions/default/src/utils/promptSaveReport.tsx index b3f2d1fce..d53cca6e2 100644 --- a/extensions/default/src/utils/promptSaveReport.tsx +++ b/extensions/default/src/utils/promptSaveReport.tsx @@ -6,12 +6,8 @@ import PROMPT_RESPONSES from './_shared/PROMPT_RESPONSES'; import { getSRSeriesAndInstanceNumber } from './getSRSeriesAndInstanceNumber'; import { getSeriesDateTime } from './getCurrentDicomDateTime'; -const { - filterAnd, - filterMeasurementsByStudyUID, - filterMeasurementsBySeriesUID, - filterPlanarMeasurement, -} = utils.MeasurementFilters; +const { filterAnd, filterMeasurementsByStudyUID, filterMeasurementsBySeriesUID } = + utils.MeasurementFilters; async function promptSaveReport({ servicesManager, commandsManager, extensionManager }, ctx, evt) { const { measurementService, displaySetService } = servicesManager.services; @@ -25,8 +21,7 @@ async function promptSaveReport({ servicesManager, commandsManager, extensionMan trackedSeries, measurementFilter = filterAnd( filterMeasurementsByStudyUID(StudyInstanceUID), - filterMeasurementsBySeriesUID(trackedSeries), - filterPlanarMeasurement + filterMeasurementsBySeriesUID(trackedSeries) ), defaultSaveTitle = 'Create Report', } = ctx; diff --git a/extensions/dicom-pdf/package.json b/extensions/dicom-pdf/package.json index 4aaf346e8..c9b9f5cb9 100644 --- a/extensions/dicom-pdf/package.json +++ b/extensions/dicom-pdf/package.json @@ -32,7 +32,7 @@ "peerDependencies": { "@ohif/core": "3.11.0-beta.114", "@ohif/ui": "3.11.0-beta.114", - "dcmjs": "^0.42.0", + "dcmjs": "0.43.1", "dicom-parser": "^1.8.9", "hammerjs": "^2.0.8", "prop-types": "^15.6.2", diff --git a/extensions/dicom-video/package.json b/extensions/dicom-video/package.json index d659cc76b..bb612966d 100644 --- a/extensions/dicom-video/package.json +++ b/extensions/dicom-video/package.json @@ -32,7 +32,7 @@ "peerDependencies": { "@ohif/core": "3.11.0-beta.114", "@ohif/ui": "3.11.0-beta.114", - "dcmjs": "^0.42.0", + "dcmjs": "0.43.1", "dicom-parser": "^1.8.9", "hammerjs": "^2.0.8", "prop-types": "^15.6.2", diff --git a/extensions/measurement-tracking/package.json b/extensions/measurement-tracking/package.json index cbc637d17..45d30167c 100644 --- a/extensions/measurement-tracking/package.json +++ b/extensions/measurement-tracking/package.json @@ -32,14 +32,14 @@ "start": "yarn run dev" }, "peerDependencies": { - "@cornerstonejs/core": "^3.30.3", - "@cornerstonejs/tools": "^3.30.3", + "@cornerstonejs/core": "^3.32.5", + "@cornerstonejs/tools": "^3.32.5", "@ohif/core": "3.11.0-beta.114", "@ohif/extension-cornerstone-dicom-sr": "3.11.0-beta.114", "@ohif/extension-default": "3.11.0-beta.114", "@ohif/ui": "3.11.0-beta.114", "classnames": "^2.3.2", - "dcmjs": "^0.42.0", + "dcmjs": "0.43.1", "lodash.debounce": "^4.0.8", "prop-types": "^15.6.2", "react": "^18.3.1", diff --git a/extensions/measurement-tracking/src/contexts/TrackedMeasurementsContext/TrackedMeasurementsContext.tsx b/extensions/measurement-tracking/src/contexts/TrackedMeasurementsContext/TrackedMeasurementsContext.tsx index 38a21f92d..31e715792 100644 --- a/extensions/measurement-tracking/src/contexts/TrackedMeasurementsContext/TrackedMeasurementsContext.tsx +++ b/extensions/measurement-tracking/src/contexts/TrackedMeasurementsContext/TrackedMeasurementsContext.tsx @@ -21,7 +21,16 @@ const TrackedMeasurementsContext = React.createContext(); TrackedMeasurementsContext.displayName = 'TrackedMeasurementsContext'; const useTrackedMeasurements = () => useContext(TrackedMeasurementsContext); -const SR_SOPCLASSHANDLERID = '@ohif/extension-cornerstone-dicom-sr.sopClassHandlerModule.dicom-sr'; +const SR_SOP_CLASS_HANDLER_ID = + '@ohif/extension-cornerstone-dicom-sr.sopClassHandlerModule.dicom-sr'; +const COMPREHENSIVE_3D_SR_SOP_CLASS_HANDLER_ID = + '@ohif/extension-cornerstone-dicom-sr.sopClassHandlerModule.dicom-sr-3d'; + +const hasValidSOPClassHandlerId = displaySet => { + return [SR_SOP_CLASS_HANDLER_ID, COMPREHENSIVE_3D_SR_SOP_CLASS_HANDLER_ID].includes( + displaySet.SOPClassHandlerId + ); +}; /** * @@ -320,18 +329,14 @@ function TrackedMeasurementsContextProvider( // The issue here is that this handler in TrackedMeasurementsContext // ends up occurring before the Viewport is created, so the displaySet // is not loaded yet, and isRehydratable is undefined unless we call load(). - if ( - displaySet.SOPClassHandlerId === SR_SOPCLASSHANDLERID && - !displaySet.isLoaded && - displaySet.load - ) { + if (hasValidSOPClassHandlerId(displaySet) && !displaySet.isLoaded && displaySet.load) { await displaySet.load(); } // Magic string // load function added by our sopClassHandler module if ( - displaySet.SOPClassHandlerId === SR_SOPCLASSHANDLERID && + hasValidSOPClassHandlerId(displaySet) && displaySet.isRehydratable === true && !displaySet.isHydrated ) { diff --git a/extensions/measurement-tracking/src/getViewportModule.tsx b/extensions/measurement-tracking/src/getViewportModule.tsx index 8e5546839..d0b37dd6a 100644 --- a/extensions/measurement-tracking/src/getViewportModule.tsx +++ b/extensions/measurement-tracking/src/getViewportModule.tsx @@ -29,7 +29,7 @@ function getViewportModule({ servicesManager, commandsManager, extensionManager { name: 'cornerstone-tracked', component: ExtendedOHIFCornerstoneTrackingViewport, - isReferenceViewable: props => utils.isReferenceViewable({ ...props, servicesManager }), + isReferenceViewable: utils.isReferenceViewable.bind(null, servicesManager), }, ]; } diff --git a/extensions/measurement-tracking/src/panels/PanelMeasurementTableTracking.tsx b/extensions/measurement-tracking/src/panels/PanelMeasurementTableTracking.tsx index 9612ba1c2..6735066da 100644 --- a/extensions/measurement-tracking/src/panels/PanelMeasurementTableTracking.tsx +++ b/extensions/measurement-tracking/src/panels/PanelMeasurementTableTracking.tsx @@ -13,8 +13,7 @@ import { import { useTrackedMeasurements } from '../getContextModule'; import { UntrackSeriesModal } from './PanelStudyBrowserTracking/untrackSeriesModal'; -const { filterAnd, filterPlanarMeasurement, filterMeasurementsBySeriesUID } = - utils.MeasurementFilters; +const { filterMeasurementsBySeriesUID, filterAny } = utils.MeasurementFilters; function PanelMeasurementTableTracking(props) { const [viewportGrid] = useViewportGrid(); @@ -23,9 +22,7 @@ function PanelMeasurementTableTracking(props) { const [trackedMeasurements, sendTrackedMeasurementsEvent] = useTrackedMeasurements(); const { trackedStudy, trackedSeries } = trackedMeasurements.context; - const measurementFilter = trackedStudy - ? filterAnd(filterPlanarMeasurement, filterMeasurementsBySeriesUID(trackedSeries)) - : filterPlanarMeasurement; + const measurementFilter = trackedStudy ? filterMeasurementsBySeriesUID(trackedSeries) : filterAny; const onUntrackConfirm = () => { sendTrackedMeasurementsEvent('UNTRACK_ALL', {}); diff --git a/extensions/measurement-tracking/src/viewports/TrackedCornerstoneViewport.tsx b/extensions/measurement-tracking/src/viewports/TrackedCornerstoneViewport.tsx index 74ebb313a..e98de6e64 100644 --- a/extensions/measurement-tracking/src/viewports/TrackedCornerstoneViewport.tsx +++ b/extensions/measurement-tracking/src/viewports/TrackedCornerstoneViewport.tsx @@ -35,25 +35,10 @@ function TrackedCornerstoneViewport( const { SeriesInstanceUID } = displaySet; const updateIsTracked = useCallback(() => { - const viewport = cornerstoneViewportService.getCornerstoneViewport(viewportId); - - if (viewport instanceof BaseVolumeViewport) { - // A current image id will only exist for volume viewports that can have measurements tracked. - // Typically these are those volume viewports for the series of acquisition. - const currentImageId = viewport?.getCurrentImageId(); - - if (!currentImageId) { - if (isTracked) { - setIsTracked(false); - } - return; - } - } - if (trackedSeries.includes(SeriesInstanceUID) !== isTracked) { setIsTracked(!isTracked); } - }, [isTracked, trackedMeasurements, viewportId, SeriesInstanceUID]); + }, [isTracked, SeriesInstanceUID, trackedSeries]); const onElementEnabled = useCallback( evt => { diff --git a/extensions/test-extension/package.json b/extensions/test-extension/package.json index 138830ccd..5ea2d7ae2 100644 --- a/extensions/test-extension/package.json +++ b/extensions/test-extension/package.json @@ -32,7 +32,7 @@ "peerDependencies": { "@ohif/core": "3.11.0-beta.114", "@ohif/ui": "3.11.0-beta.114", - "dcmjs": "^0.42.0", + "dcmjs": "0.43.1", "dicom-parser": "^1.8.9", "hammerjs": "^2.0.8", "prop-types": "^15.6.2", diff --git a/extensions/tmtv/package.json b/extensions/tmtv/package.json index 980c247d9..255096dc4 100644 --- a/extensions/tmtv/package.json +++ b/extensions/tmtv/package.json @@ -32,7 +32,7 @@ "peerDependencies": { "@ohif/core": "3.11.0-beta.114", "@ohif/ui": "3.11.0-beta.114", - "dcmjs": "^0.42.0", + "dcmjs": "0.43.1", "dicom-parser": "^1.8.9", "hammerjs": "^2.0.8", "prop-types": "^15.6.2", diff --git a/extensions/usAnnotation/package.json b/extensions/usAnnotation/package.json index b39e3f184..6ef952bc0 100644 --- a/extensions/usAnnotation/package.json +++ b/extensions/usAnnotation/package.json @@ -42,8 +42,8 @@ }, "dependencies": { "@babel/runtime": "^7.20.13", - "@cornerstonejs/core": "^3.16.0", - "@cornerstonejs/tools": "^3.16.0", + "@cornerstonejs/core": "^3.32.5", + "@cornerstonejs/tools": "^3.32.5", "@ohif/core": "3.11.0-beta.114", "@ohif/extension-cornerstone": "3.11.0-beta.114", "@ohif/extension-default": "3.11.0-beta.114", diff --git a/modes/basic-test-mode/src/index.ts b/modes/basic-test-mode/src/index.ts index bfd3859d2..b8a983757 100644 --- a/modes/basic-test-mode/src/index.ts +++ b/modes/basic-test-mode/src/index.ts @@ -27,6 +27,7 @@ const tracked = { const dicomsr = { sopClassHandler: '@ohif/extension-cornerstone-dicom-sr.sopClassHandlerModule.dicom-sr', + sopClassHandler3D: '@ohif/extension-cornerstone-dicom-sr.sopClassHandlerModule.dicom-sr-3d', viewport: '@ohif/extension-cornerstone-dicom-sr.viewportModule.dicom-sr', }; @@ -251,7 +252,7 @@ function modeFactory() { }, { namespace: dicomsr.viewport, - displaySetsToDisplay: [dicomsr.sopClassHandler], + displaySetsToDisplay: [dicomsr.sopClassHandler, dicomsr.sopClassHandler3D], }, { namespace: dicomvideo.viewport, @@ -284,6 +285,7 @@ function modeFactory() { ohif.sopClassHandler, dicompdf.sopClassHandler, dicomsr.sopClassHandler, + dicomsr.sopClassHandler3D, ], hotkeys: { name: 'basic-test-hotkeys', diff --git a/modes/longitudinal/src/index.ts b/modes/longitudinal/src/index.ts index 8e8d911ce..59a265e38 100644 --- a/modes/longitudinal/src/index.ts +++ b/modes/longitudinal/src/index.ts @@ -256,13 +256,12 @@ function modeFactory({ modeConfiguration }) { displaySetsToDisplay: [ ohif.sopClassHandler, dicomvideo.sopClassHandler, - dicomsr.sopClassHandler3D, ohif.wsiSopClassHandler, ], }, { namespace: dicomsr.viewport, - displaySetsToDisplay: [dicomsr.sopClassHandler], + displaySetsToDisplay: [dicomsr.sopClassHandler, dicomsr.sopClassHandler3D], }, { namespace: dicompdf.viewport, diff --git a/modes/usAnnotation/package.json b/modes/usAnnotation/package.json index 45d85b43b..6389e50b7 100644 --- a/modes/usAnnotation/package.json +++ b/modes/usAnnotation/package.json @@ -34,8 +34,8 @@ }, "dependencies": { "@babel/runtime": "^7.20.13", - "@cornerstonejs/core": "^3.16.0", - "@cornerstonejs/tools": "^3.16.0", + "@cornerstonejs/core": "^3.32.5", + "@cornerstonejs/tools": "^3.32.5", "@ohif/core": "3.11.0-beta.114", "@ohif/extension-cornerstone-dicom-sr": "3.11.0-beta.114", "@ohif/extension-ultrasound-pleura-bline": "3.11.0-beta.114", diff --git a/package.json b/package.json index 04d7ea799..ac9737de3 100644 --- a/package.json +++ b/package.json @@ -122,6 +122,7 @@ }, "resolutions": { "commander": "8.3.0", + "dcmjs": "0.43.1", "path-to-regexp": "0.1.12", "nth-check": "^2.1.1", "trim-newlines": "^5.0.0", diff --git a/platform/app/package.json b/platform/app/package.json index 203a4194c..4fe66a838 100644 --- a/platform/app/package.json +++ b/platform/app/package.json @@ -53,7 +53,7 @@ "@cornerstonejs/codec-libjpeg-turbo-8bit": "^1.2.2", "@cornerstonejs/codec-openjpeg": "^1.2.4", "@cornerstonejs/codec-openjph": "^2.4.5", - "@cornerstonejs/dicom-image-loader": "^3.30.3", + "@cornerstonejs/dicom-image-loader": "^3.32.5", "@emotion/serialize": "^1.1.3", "@ohif/core": "3.11.0-beta.114", "@ohif/extension-cornerstone": "3.11.0-beta.114", @@ -79,7 +79,7 @@ "classnames": "^2.3.2", "core-js": "*", "cornerstone-math": "^0.1.9", - "dcmjs": "^0.42.0", + "dcmjs": "0.43.1", "detect-gpu": "^4.0.16", "dicom-parser": "^1.8.9", "dotenv-webpack": "^1.7.0", diff --git a/platform/app/public/config/kheops.js b/platform/app/public/config/kheops.js index 1bb3fdff0..154e957cf 100644 --- a/platform/app/public/config/kheops.js +++ b/platform/app/public/config/kheops.js @@ -26,7 +26,7 @@ window.config = { // filterQueryParam: false, // Uses the ohif datasource as the default - this requires that KHEOPS be // configured with an OHIF path to .../viewer/dicomwebproxy - defaultDataSourceName: 'dicomweb', + defaultDataSourceName: 'ohif', /* Dynamic config allows user to pass "configUrl" query string this allows to load config without recompiling application. The regex will ensure valid configuration source */ // dangerouslyUseDynamicConfig: { // enabled: true, @@ -40,7 +40,7 @@ window.config = { dataSources: [ { namespace: '@ohif/extension-default.dataSourcesModule.dicomweb', - sourceName: 'dicomweb', + sourceName: 'ohif', configuration: { friendlyName: 'AWS S3 Static wado server', name: 'aws', @@ -54,47 +54,15 @@ window.config = { supportsFuzzyMatching: false, supportsWildcard: true, staticWado: true, - singlepart: 'bulkdata,video', - // whether the data source should use retrieveBulkData to grab metadata, - // and in case of relative path, what would it be relative to, options - // are in the series level or study level (some servers like series some study) + singlepart: 'video,pdf', bulkDataURI: { enabled: true, relativeResolution: 'studies', transform: url => url.replace('/pixeldata.mp4', '/rendered'), }, - omitQuotationForMultipartRequest: true, }, }, - { - namespace: '@ohif/extension-default.dataSourcesModule.dicomweb', - sourceName: 'ohif2', - configuration: { - friendlyName: 'AWS S3 Static wado secondary server', - name: 'aws', - wadoUriRoot: 'https://dd14fa38qiwhyfd.cloudfront.net/dicomweb', - qidoRoot: 'https://dd14fa38qiwhyfd.cloudfront.net/dicomweb', - wadoRoot: 'https://dd14fa38qiwhyfd.cloudfront.net/dicomweb', - qidoSupportsIncludeField: false, - supportsReject: false, - imageRendering: 'wadors', - thumbnailRendering: 'wadors', - enableStudyLazyLoad: true, - supportsFuzzyMatching: false, - supportsWildcard: true, - staticWado: true, - singlepart: 'bulkdata,video', - // whether the data source should use retrieveBulkData to grab metadata, - // and in case of relative path, what would it be relative to, options - // are in the series level or study level (some servers like series some study) - bulkDataURI: { - enabled: true, - relativeResolution: 'studies', - }, - omitQuotationForMultipartRequest: true, - }, - }, { namespace: '@ohif/extension-default.dataSourcesModule.dicomweb', sourceName: 'ohif3', diff --git a/platform/app/src/components/ViewportGrid.tsx b/platform/app/src/components/ViewportGrid.tsx index 67563ed5e..1bf35281b 100644 --- a/platform/app/src/components/ViewportGrid.tsx +++ b/platform/app/src/components/ViewportGrid.tsx @@ -1,5 +1,5 @@ import React, { useEffect, useCallback, useRef } from 'react'; -import { Types, MeasurementService } from '@ohif/core'; +import { Types } from '@ohif/core'; import { ViewportGrid, ViewportPane } from '@ohif/ui-next'; import { useViewportGrid } from '@ohif/ui-next'; import EmptyViewport from './EmptyViewport'; @@ -14,13 +14,8 @@ function ViewerViewportGrid(props: withAppTypes) { const { numCols, numRows } = layout; const layoutHash = useRef(null); - const { - displaySetService, - measurementService, - hangingProtocolService, - uiNotificationService, - customizationService, - } = servicesManager.services; + const { displaySetService, hangingProtocolService, uiNotificationService, customizationService } = + servicesManager.services; const generateLayoutHash = () => `${numCols}-${numRows}`; @@ -32,9 +27,9 @@ function ViewerViewportGrid(props: withAppTypes) { */ const updateDisplaySetsFromProtocol = ( - protocol: Types.HangingProtocol.Protocol, + _protocol: Types.HangingProtocol.Protocol, stage, - activeStudyUID, + _activeStudyUID, viewportMatchDetails ) => { const availableDisplaySets = displaySetService.getActiveDisplaySets(); @@ -154,100 +149,6 @@ function ViewerViewportGrid(props: withAppTypes) { } }, [viewportGridService, generateLayoutHash]); - useEffect(() => { - const { unsubscribe } = measurementService.subscribe( - MeasurementService.EVENTS.JUMP_TO_MEASUREMENT_LAYOUT, - event => { - const { viewportId, measurement, isConsumed } = event; - if (isConsumed) { - return; - } - - const { displaySetInstanceUID: referencedDisplaySetInstanceUID } = measurement; - const { viewports } = viewportGridService.getState(); - - // Check if any viewport can display this measurement - let canAnyViewportDisplayMeasurement = false; - - viewports.forEach((viewport, id) => { - const displaySetInstanceUIDs = viewport.displaySetInstanceUIDs || []; - const viewportHasDisplaySet = displaySetInstanceUIDs.includes( - referencedDisplaySetInstanceUID - ); - - // Extract metadata and prepare reference - const { FrameOfReferenceUID, ...metadataRest } = measurement.metadata; - const reference = { - ...(viewportHasDisplaySet ? measurement.metadata : metadataRest), - displaySetInstanceUID: referencedDisplaySetInstanceUID, - }; - - // Check if viewport can display the reference - if ( - viewport.isReferenceViewable?.({ - viewportId: id, - reference, - }) - ) { - canAnyViewportDisplayMeasurement = true; - } - }); - - if (canAnyViewportDisplayMeasurement) { - // Let the viewports handle the jump - return; - } - - // Need to change layouts since no viewport consumed the event - const updatedViewports = _getUpdatedViewports(viewportId, referencedDisplaySetInstanceUID); - - if (!updatedViewports?.[0]) { - console.warn( - 'ViewportGrid::Unable to navigate to viewport containing', - referencedDisplaySetInstanceUID - ); - return; - } - - // Find the viewport that can display the measurement - const viewport = updatedViewports.find(viewport => { - const gridViewport = viewportGridService.getViewportState(viewport.viewportId); - return gridViewport.isReferenceViewable?.({ - viewportId: viewport.viewportId, - reference: { - ...measurement.metadata, - displaySetInstanceUID: referencedDisplaySetInstanceUID, - }, - viewportOptions: gridViewport.viewportOptions || {}, - }); - }); - - if (!viewport) { - console.warn('No suitable viewport found for displaying measurement'); - return; - } - - // Update stored position presentation - commandsManager.run('updateStoredPositionPresentation', { - viewportId: viewport.viewportId, - displaySetInstanceUIDs: [referencedDisplaySetInstanceUID], - referencedImageId: measurement.referencedImageId, - options: { - ...measurement.metadata, - }, - }); - - event.consume(); - - commandsManager.run('setDisplaySetsForViewports', { viewportsToUpdate: updatedViewports }); - } - ); - - return () => { - unsubscribe(); - }; - }, [viewports, _getUpdatedViewports]); - const onDropHandler = (viewportId, { displaySetInstanceUID }) => { const { viewportGridService } = servicesManager.services; const customOnDropHandler = customizationService.getCustomization('customOnDropHandler'); @@ -267,23 +168,6 @@ function ViewerViewportGrid(props: withAppTypes) { viewportGridService.publishViewportOnDropHandled({ displaySetInstanceUID }); }; - // Store previous isReferenceViewable values to avoid infinite loops - const prevReferenceViewableMap = useRef(new Map()); - // Track viewports that need isReferenceViewable updates - const viewportsToUpdate = useRef(new Map()); - - // Apply isReferenceViewable updates in an effect, not during render - useEffect(() => { - const updates = viewportsToUpdate.current; - if (updates.size > 0) { - updates.forEach((isReferenceViewable, viewportId) => { - viewportGridService.setIsReferenceViewable(viewportId, isReferenceViewable); - prevReferenceViewableMap.current.set(viewportId, isReferenceViewable); - }); - viewportsToUpdate.current.clear(); - } - }); - const getViewportPanes = useCallback(() => { const viewportPanes = []; @@ -315,27 +199,12 @@ function ViewerViewportGrid(props: withAppTypes) { return !displaySet?.unsupported; }); - const { component: ViewportComponent, isReferenceViewable } = _getViewportComponent( + const { component: ViewportComponent } = _getViewportComponent( displaySets, viewportComponents, uiNotificationService ); - // Only queue isReferenceViewable updates if it's changed to avoid render loops - // We need to handle both function and non-function values - if (viewportId) { - const prevValue = prevReferenceViewableMap.current.get(viewportId); - const isFunction = typeof isReferenceViewable === 'function'; - const isSameFunction = isFunction && typeof prevValue === 'function'; - - // For non-functions, compare directly. For functions, we treat them as always different - // (this is conservative but safe) - if (!isSameFunction && prevValue !== isReferenceViewable) { - // Queue the update instead of doing it during render - viewportsToUpdate.current.set(viewportId, isReferenceViewable); - } - } - // look inside displaySets to see if they need reRendering const displaySetsNeedsRerendering = displaySets.some(displaySet => { return displaySet.needsRerendering; @@ -462,8 +331,8 @@ function _getViewportComponent(displaySets, viewportComponents, uiNotificationSe throw new Error('displaySetsToDisplay is null'); } if (viewportComponents[i].displaySetsToDisplay.includes(SOPClassHandlerId)) { - const { component, isReferenceViewable } = viewportComponents[i]; - return { component, isReferenceViewable }; + const { component } = viewportComponents[i]; + return { component }; } } @@ -474,7 +343,7 @@ function _getViewportComponent(displaySets, viewportComponents, uiNotificationSe type: 'error', }); - return { component: EmptyViewport, isReferenceViewable: () => false }; + return { component: EmptyViewport }; } export default ViewerViewportGrid; diff --git a/platform/core/package.json b/platform/core/package.json index e3063175e..2a890501d 100644 --- a/platform/core/package.json +++ b/platform/core/package.json @@ -37,15 +37,15 @@ "@cornerstonejs/codec-libjpeg-turbo-8bit": "^1.2.2", "@cornerstonejs/codec-openjpeg": "^1.2.4", "@cornerstonejs/codec-openjph": "^2.4.5", - "@cornerstonejs/core": "^3.30.3", - "@cornerstonejs/dicom-image-loader": "^3.30.3", + "@cornerstonejs/core": "^3.32.5", + "@cornerstonejs/dicom-image-loader": "^3.32.5", "@ohif/ui": "3.11.0-beta.114", "cornerstone-math": "0.1.9", "dicom-parser": "^1.8.21" }, "dependencies": { "@babel/runtime": "^7.20.13", - "dcmjs": "^0.42.0", + "dcmjs": "0.43.1", "dicomweb-client": "^0.10.4", "gl-matrix": "^3.4.3", "immutability-helper": "^3.1.1", diff --git a/platform/core/src/services/MeasurementService/MeasurementService.ts b/platform/core/src/services/MeasurementService/MeasurementService.ts index 651070c94..f69dbe7e3 100644 --- a/platform/core/src/services/MeasurementService/MeasurementService.ts +++ b/platform/core/src/services/MeasurementService/MeasurementService.ts @@ -74,10 +74,11 @@ const EVENTS = { RAW_MEASUREMENT_ADDED: 'event::raw_measurement_added', MEASUREMENT_REMOVED: 'event::measurement_removed', MEASUREMENTS_CLEARED: 'event::measurements_cleared', - // Give the viewport a chance to jump to the measurement - JUMP_TO_MEASUREMENT_VIEWPORT: 'event:jump_to_measurement_viewport', - // Give the layout a chance to jump to the measurement - JUMP_TO_MEASUREMENT_LAYOUT: 'event:jump_to_measurement_layout', + /** + * Indicate some viewport should be jumped to. This will have to be implemented + * by a single handler that can look at all viewports to decide who should handle it. + */ + JUMP_TO_MEASUREMENT: 'event:jump_to_measurement', }; const VALUE_TYPES = { @@ -431,11 +432,7 @@ class MeasurementService extends PubSubService { return; } - let internalUID = data.id; - if (!internalUID) { - internalUID = guid(); - log.warn(`Measurement ID not found. Generating UID: ${internalUID}`); - } + const internalUID = data.uid || guid(); const annotationData = data.annotation.data; @@ -497,7 +494,7 @@ class MeasurementService extends PubSubService { mapping => mapping.annotationType === annotationType ); if (!sourceMapping) { - console.log('No source mapping', source); + console.log('No source mapping', source.uid, annotationType, source); return; } const { toMeasurementSchema } = sourceMapping; @@ -656,19 +653,7 @@ class MeasurementService extends PubSubService { } /** - * This method calls the subscriptions for JUMP_TO_MEASUREMENT_VIEWPORT - * and JUMP_TO_MEASUREMENT_LAYOUT. There are two events which are - * fired because there are two different items which might want to handle - * the event. First, there might already be a viewport which can handle - * the event. If so, then the layout doesn't need to necessarily change. - * This is communicated by the isConsumed value on the event itself. - * Otherwise, the layout itself may need to be navigated to in order - * to provide a viewport which can show the given measurement. - * - * When a viewport decides to apply the event, it should call the consume() - * method on the event, so that other listeners know they do not need to - * navigate. This does NOT affect whether the layout event is fired, and - * merely causes it to fire the event with the isConsumed set to true. + * This method calls the subscription for JUMP_TO_MEASUREMENT */ public jumpToMeasurement(viewportId: string, measurementUID: string): void { @@ -678,16 +663,14 @@ class MeasurementService extends PubSubService { log.warn(`No measurement uid, or unable to find by uid.`); return; } - const consumableEvent = this.createConsumableEvent({ + const event = { viewportId, measurement, - }); + }; - // Important: we should broadcast the layout event first, since - // in the layout there might be a viewport that we can match and choose - // and jump in it before we decide on changing the orientation of different viewports - this._broadcastEvent(EVENTS.JUMP_TO_MEASUREMENT_LAYOUT, consumableEvent); - this._broadcastEvent(EVENTS.JUMP_TO_MEASUREMENT_VIEWPORT, consumableEvent); + // A single handler will decide on which window to jump to, previously + // this was handled by a consumable event + this._broadcastEvent(EVENTS.JUMP_TO_MEASUREMENT, event); } _getSourceUID(name, version) { diff --git a/platform/core/src/services/ViewportGridService/ViewportGridService.ts b/platform/core/src/services/ViewportGridService/ViewportGridService.ts index 7359f3c4a..b024ccba5 100644 --- a/platform/core/src/services/ViewportGridService/ViewportGridService.ts +++ b/platform/core/src/services/ViewportGridService/ViewportGridService.ts @@ -45,10 +45,6 @@ class ViewportGridService extends PubSubService { return this.presentationIdProviders.get(id); } - public setIsReferenceViewable(viewportId: string, isReferenceViewable: boolean): void { - this.serviceImplementation._setIsReferenceViewable(viewportId, isReferenceViewable); - } - public getPresentationId(id: string, viewportId: string): string | null { const state = this.getState(); const viewport = state.viewports.get(viewportId); @@ -104,7 +100,6 @@ class ViewportGridService extends PubSubService { set: setImplementation, getNumViewportPanes: getNumViewportPanesImplementation, setViewportIsReady: setViewportIsReadyImplementation, - setIsReferenceViewable: setIsReferenceViewableImplementation, getViewportState: getViewportStateImplementation, }): void { if (getViewportStateImplementation) { @@ -139,9 +134,6 @@ class ViewportGridService extends PubSubService { if (setViewportIsReadyImplementation) { this.serviceImplementation._setViewportIsReady = setViewportIsReadyImplementation; } - if (setIsReferenceViewableImplementation) { - this.serviceImplementation._setIsReferenceViewable = setIsReferenceViewableImplementation; - } } public publishViewportsReady() { diff --git a/platform/core/src/types/DisplaySet.ts b/platform/core/src/types/DisplaySet.ts index c2061c41c..7eee952ec 100644 --- a/platform/core/src/types/DisplaySet.ts +++ b/platform/core/src/types/DisplaySet.ts @@ -29,6 +29,9 @@ export type DisplaySet = { /** A fetch method to get the thumbnail */ getThumbnailSrc?(imageId?: string): Promise; + /** An opaque type of this viewport, used internally to specify which viewport to use */ + viewportType; + /** * A fetch URL to display the content. This is used for content such as * pdf display. diff --git a/platform/core/src/types/ViewportGridType.ts b/platform/core/src/types/ViewportGridType.ts index fd1008c05..1079a8bcd 100644 --- a/platform/core/src/types/ViewportGridType.ts +++ b/platform/core/src/types/ViewportGridType.ts @@ -45,10 +45,6 @@ export interface ViewportGridState { activeViewportId: string | null; layout: Layout; isHangingProtocolLayout: boolean; - isReferenceViewable: (props: { - viewportId: string; - reference: Record; - }) => boolean; viewports: GridViewports; } diff --git a/platform/docs/docs/migration-guide/3p10-to-3p11/other.md b/platform/docs/docs/migration-guide/3p10-to-3p11/other.md index 6392a6390..c16431951 100644 --- a/platform/docs/docs/migration-guide/3p10-to-3p11/other.md +++ b/platform/docs/docs/migration-guide/3p10-to-3p11/other.md @@ -9,6 +9,10 @@ summary: Migration guide for OHIF 3.11 additional changes * **`connectToolsToMeasurementService` parameters:** The `connectToolsToMeasurementService` function from the `@ohif/cornerstone-extensions` now take different arguments. * **`data-viewportId`** The `data-viewportId` naming was not compliant with react and was causing warnings. Rename references to `data-viewportid`. +* **`setIsReferenceViewable`** is no longer available or required by ViewportGridService. Instead, the cornerstone viewports + themselves provide the isReferenceViewable. This occurs because there were a lot more deciding issues to navigate to viewports than could be added to viewport grid service. +* **`JUMP_TO_MEASUREMENT_VIEWPORT` and `JUMP_TO_MEASUREMENT_LAYOUT`** are combined into `JUMP_TO_MEASUREMENT` with no + consume event. Only the single event is fired. This will need to be handled to redirect the changes to the appropriate viewport type as it was not possible to figure that out with generic information available in `ViewportGridService` **Migration Steps:** diff --git a/platform/docs/docs/platform/services/data/MeasurementService.md b/platform/docs/docs/platform/services/data/MeasurementService.md index 92bbb7dd5..f13f09bf8 100644 --- a/platform/docs/docs/platform/services/data/MeasurementService.md +++ b/platform/docs/docs/platform/services/data/MeasurementService.md @@ -31,8 +31,7 @@ There are seven events that get publish in `MeasurementService`: | RAW_MEASUREMENT_ADDED | Fires when a raw measurement is added (e.g., dicom-sr) | | MEASUREMENT_REMOVED | Fires when a measurement is removed | | MEASUREMENTS_CLEARED | Fires when all measurements are deleted | -| JUMP_TO_MEASUREMENT_VIEWPORT | Fires when a measurement is requested to be jumped to, applying to individual viewports. | -| JUMP_TO_MEASUREMENT_LAYOUT | Fires when a measurement is requested to be jumped to, applying to the overall layout. | +| JUMP_TO_MEASUREMENT | Fires when a measurement is requested to be jumped to | ## API diff --git a/platform/ui-next/src/components/Errorboundary/ErrorBoundary.tsx b/platform/ui-next/src/components/Errorboundary/ErrorBoundary.tsx index 4fc51cf7c..56ef25342 100644 --- a/platform/ui-next/src/components/Errorboundary/ErrorBoundary.tsx +++ b/platform/ui-next/src/components/Errorboundary/ErrorBoundary.tsx @@ -246,11 +246,9 @@ const DefaultFallback = ({ const ErrorBoundary = ({ context = 'OHIF', onReset = () => {}, - onError = () => {}, + onError = _error => {}, fallbackComponent: FallbackComponent = DefaultFallback, children, - fallbackRoute = null, - isPage, }: ErrorBoundaryProps) => { const [error, setError] = useState(null); @@ -276,8 +274,8 @@ const ErrorBoundary = ({ event.preventDefault(); clearTimeout(errorTimeout); errorTimeout = setTimeout(() => { - setError(event.reason); - onErrorHandler(event.reason, null); + setError(event.reason || event); + onErrorHandler(event.reason || event, null); }, 100); }; @@ -291,7 +289,10 @@ const ErrorBoundary = ({ }; }, []); - const onErrorHandler = (error: ErrorBoundaryError, componentStack: string | null) => { + const onErrorHandler = ( + error: ErrorBoundaryError | ErrorEvent, + componentStack: string | null + ) => { console.debug(`${context} Error Boundary`, error, componentStack, context); onError(error, componentStack || '', context); }; diff --git a/platform/ui-next/src/contextProviders/ViewportGridProvider.tsx b/platform/ui-next/src/contextProviders/ViewportGridProvider.tsx index f0e187603..1a9d5fb59 100644 --- a/platform/ui-next/src/contextProviders/ViewportGridProvider.tsx +++ b/platform/ui-next/src/contextProviders/ViewportGridProvider.tsx @@ -125,6 +125,7 @@ interface ViewportGridApi { setViewportGridSizeChanged: (props: any) => void; publishViewportsReady: () => void; getDisplaySetsUIDsForViewport: (viewportId: string) => string[]; + isReferenceViewable: (viewportId: string, viewRef, options?) => boolean; } // Update the context type @@ -142,19 +143,6 @@ interface ViewportGridProviderProps { export function ViewportGridProvider({ children, service }: ViewportGridProviderProps) { const viewportGridReducer = (state: AppTypes.ViewportGrid.State, action) => { switch (action.type) { - case 'SET_IS_REFERENCE_VIEWABLE': { - const { viewportId, isReferenceViewable } = action.payload; - const viewports = new Map(state.viewports); - const viewport = viewports.get(viewportId); - if (!viewport) { - return; - } - viewports.set(viewportId, { - ...viewport, - isReferenceViewable, - }); - return { ...state, viewports }; - } case 'SET_ACTIVE_VIEWPORT_ID': { return { ...state, ...{ activeViewportId: action.payload } }; } @@ -392,13 +380,6 @@ export function ViewportGridProvider({ children, service }: ViewportGridProvider [dispatch] ); - const setIsReferenceViewable = useCallback( - (viewportId, isReferenceViewable) => { - dispatch({ type: 'SET_IS_REFERENCE_VIEWABLE', payload: { viewportId, isReferenceViewable } }); - }, - [dispatch] - ); - const setDisplaySetsForViewports = useCallback( viewports => dispatch({ @@ -495,7 +476,7 @@ export function ViewportGridProvider({ children, service }: ViewportGridProvider getState, setActiveViewportId, setDisplaySetsForViewports, - setIsReferenceViewable, + isReferenceViewable: () => false, setLayout, reset, onModeExit: reset, @@ -511,7 +492,6 @@ export function ViewportGridProvider({ children, service }: ViewportGridProvider service, setActiveViewportId, setDisplaySetsForViewports, - setIsReferenceViewable, setLayout, reset, set, @@ -527,8 +507,8 @@ export function ViewportGridProvider({ children, service }: ViewportGridProvider setActiveViewportId: index => service.setActiveViewportId(index), setDisplaySetsForViewport: props => service.setDisplaySetsForViewports([props]), setDisplaySetsForViewports: props => service.setDisplaySetsForViewports(props), - setIsReferenceViewable: (viewportId, isReferenceViewable) => - service.setIsReferenceViewable(viewportId, isReferenceViewable), + isReferenceViewable: (viewportId, isReferenceViewable, options) => + service.isReferenceViewable(viewportId, isReferenceViewable, options), setLayout: layout => service.setLayout(layout), getViewportState: viewportId => service.getViewportState(viewportId), reset: () => service.reset(), diff --git a/rsbuild.config.ts b/rsbuild.config.ts index 486b42d45..8f29e37ab 100644 --- a/rsbuild.config.ts +++ b/rsbuild.config.ts @@ -25,6 +25,7 @@ const PROXY_PATH_REWRITE_TO = process.env.PROXY_PATH_REWRITE_TO; // Add port constant const OHIF_PORT = Number(process.env.OHIF_PORT || 3000); +const OHIF_OPEN = process.env.OHIF_OPEN !== 'false'; export default defineConfig({ source: { @@ -142,7 +143,7 @@ export default defineConfig({ }, server: { port: OHIF_PORT, - open: true, + open: OHIF_OPEN, // Configure proxy proxy: { '/dicomweb': { diff --git a/tests/MultipleSegmentationDataOverlays.spec.ts b/tests/MultipleSegmentationDataOverlays.spec.ts index 7ad0b522d..bec837e4d 100644 --- a/tests/MultipleSegmentationDataOverlays.spec.ts +++ b/tests/MultipleSegmentationDataOverlays.spec.ts @@ -19,6 +19,9 @@ test('should display multiple segmentation overlays (both SEG and RT)', async ({ await page.getByText('SELECT A SEGMENTATION').click(); await page.getByTestId('2d-tta_nnU-Net_Segmentation').click(); + // A short wait after each overlay is selected to ensure it loads. + await page.waitForTimeout(5000); + // Adding an overlay should not show the LOAD button. assertNumberOfModalityLoadBadges({ page, expectedCount: 0 }); @@ -26,6 +29,9 @@ test('should display multiple segmentation overlays (both SEG and RT)', async ({ await page.getByText('SELECT A SEGMENTATION').click(); await page.getByTestId('Segmentation').click(); + // A short wait after each overlay is selected to ensure it loads. + await page.waitForTimeout(5000); + // Adding an overlay should not show the LOAD button. assertNumberOfModalityLoadBadges({ page, expectedCount: 0 }); @@ -33,6 +39,9 @@ test('should display multiple segmentation overlays (both SEG and RT)', async ({ await page.getByText('SELECT A SEGMENTATION').click(); await page.getByTestId('3d_lowres-tta_nnU-Net_Segmentation').click(); + // A short wait after each overlay is selected to ensure it loads. + await page.waitForTimeout(5000); + // Adding an overlay should not show the LOAD button. assertNumberOfModalityLoadBadges({ page, expectedCount: 0 }); @@ -69,11 +78,12 @@ test('should display multiple segmentation overlays (both SEG and RT)', async ({ await page.getByText('SELECT A SEGMENTATION').click(); await page.getByTestId('Series 3 - RTSTRUCT').click(); + // A short wait after each overlay is selected to ensure it loads. + await page.waitForTimeout(5000); + // Adding an overlay should not show the LOAD button. assertNumberOfModalityLoadBadges({ page, expectedCount: 0 }); - await page.waitForTimeout(5000); - await checkForScreenshot({ page, screenshotPath: screenShotPaths.multipleSegmentationDataOverlays.overlaySEGsAndRTDisplayed, diff --git a/tests/SEGNoHydrationThenMPR.spec.ts b/tests/SEGNoHydrationThenMPR.spec.ts index 8cbadcf9b..b5be3f586 100644 --- a/tests/SEGNoHydrationThenMPR.spec.ts +++ b/tests/SEGNoHydrationThenMPR.spec.ts @@ -11,10 +11,14 @@ test('should launch MPR with unhydrated SEG', async ({ page }) => { await page.getByTestId('side-panel-header-right').click(); await page.getByTestId('study-browser-thumbnail-no-image').dblclick(); + await page.waitForTimeout(5000); + await checkForScreenshot(page, page, screenShotPaths.segNoHydrationThenMPR.segNoHydrationPreMPR); await page.getByTestId('Layout').click(); await page.getByTestId('MPR').click(); + await page.waitForTimeout(5000); + await checkForScreenshot(page, page, screenShotPaths.segNoHydrationThenMPR.segNoHydrationPostMPR); }); diff --git a/tests/screenshots/chromium/MultipleSegmentationDataOverlays.spec.ts/threeSegOverlaysInOverlayMenu.png b/tests/screenshots/chromium/MultipleSegmentationDataOverlays.spec.ts/threeSegOverlaysInOverlayMenu.png index 0606b8656..3e6059c56 100644 Binary files a/tests/screenshots/chromium/MultipleSegmentationDataOverlays.spec.ts/threeSegOverlaysInOverlayMenu.png and b/tests/screenshots/chromium/MultipleSegmentationDataOverlays.spec.ts/threeSegOverlaysInOverlayMenu.png differ diff --git a/yarn.lock b/yarn.lock index c2b3a8e6a..d09a866b2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1319,25 +1319,25 @@ resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9" integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== -"@cornerstonejs/adapters@^3.30.3": - version "3.30.3" - resolved "https://registry.yarnpkg.com/@cornerstonejs/adapters/-/adapters-3.30.3.tgz#f1b0bac426e2a0916f2f971677291e4c4b3ac4bc" - integrity sha512-rlppvJBjty9fkoFpWdRoPYKB2CGtCp+AiTQBk1OnM181Ok7r+NFEoe7e1PARHjbMjrH/Y5vOLnqEon/ABdbm8A== +"@cornerstonejs/adapters@^3.32.5": + version "3.32.5" + resolved "https://registry.yarnpkg.com/@cornerstonejs/adapters/-/adapters-3.32.5.tgz#bd292827868267d93de1f94b20545f079f09ed1e" + integrity sha512-tpd+sHjE54VOqme83HZ9XqGKztjikrwbrWR4M3e8X+fuR6LJ+qNQ6+YkPdfThzu0KxN+q8mO5aSvGyJo82rRnA== dependencies: "@babel/runtime-corejs2" "^7.17.8" buffer "^6.0.3" - dcmjs "^0.42.0" + dcmjs "^0.43.1" gl-matrix "^3.4.3" ndarray "^1.0.19" -"@cornerstonejs/ai@^3.30.3": - version "3.30.3" - resolved "https://registry.yarnpkg.com/@cornerstonejs/ai/-/ai-3.30.3.tgz#88c3a678df1ba06f80010ebfaa98851c80ec43ea" - integrity sha512-KNz/FLhoBZFJkrlMIfmS7PCSwBH9YEcg5Sh0HKw3GxpV6XE1H9tKl2c5oH/DHuJFj8gMC2FRnH6rOx3x+BpOrQ== +"@cornerstonejs/ai@^3.32.5": + version "3.32.5" + resolved "https://registry.yarnpkg.com/@cornerstonejs/ai/-/ai-3.32.5.tgz#6ca644702f034a692f8a309c10c2118e25f0382a" + integrity sha512-j7paST1ounIAvJYS9/qqOsjknjdFcfcNdwCKiwB5KpobL2/BmYNl4kEZNdYXZPhFfQPQvgpW71OedxkDdwaJ2A== dependencies: "@babel/runtime-corejs2" "^7.17.8" buffer "^6.0.3" - dcmjs "^0.42.0" + dcmjs "^0.43.1" gl-matrix "^3.4.3" lodash.clonedeep "^4.5.0" ndarray "^1.0.19" @@ -1369,30 +1369,20 @@ resolved "https://registry.yarnpkg.com/@cornerstonejs/codec-openjph/-/codec-openjph-2.4.7.tgz#784394d05d8cf735640e9c3baa206535ee8e0376" integrity sha512-qvP4q4JDib7mi9r7LqKOwqz7YZ8gjtDX4ZCezeYf8+eb7MBXCz5uXAMeVF3yz9Axw4XiIMdB/pqXkm8tqCl13w== -"@cornerstonejs/core@^3.16.0": - version "3.24.0" - resolved "https://registry.yarnpkg.com/@cornerstonejs/core/-/core-3.24.0.tgz#6f184b5eedbf5cc2266bb899cf9454cd866b4e4e" - integrity sha512-Ep5hVrM5XMVuExL2i8tiVuFGqoi1QyaZpU3WzxqhH75nNpckSi/ZYqic4rI3qb/V4IKYv2R+8Gp4Jptl110u4A== +"@cornerstonejs/core@^3.32.5": + version "3.32.5" + resolved "https://registry.yarnpkg.com/@cornerstonejs/core/-/core-3.32.5.tgz#527cffa6e48810fd2d141fefa714ff6886368b4f" + integrity sha512-6m/ODfSyM+8/ZigD2wM2wl8yjxmDx9DTen/R5nxCHUe4sqK97PKjfmcN5OK9cOCzwlzqQBZTFow1Ra6UAfkKCA== dependencies: "@kitware/vtk.js" "32.12.1" comlink "^4.4.1" gl-matrix "^3.4.3" loglevel "^1.9.2" -"@cornerstonejs/core@^3.30.3": - version "3.30.3" - resolved "https://registry.yarnpkg.com/@cornerstonejs/core/-/core-3.30.3.tgz#2f7805c11a4344f21dc1f7a1918a3c7430180802" - integrity sha512-nGfMNpL4VnPnYTDKBWgDxLpWLl/E3QUoEtScZDN5rKSQrocO/WgX2pt2vxBjbfI5NVPtngR3ly/qffg13EeOaw== - dependencies: - "@kitware/vtk.js" "32.12.1" - comlink "^4.4.1" - gl-matrix "^3.4.3" - loglevel "^1.9.2" - -"@cornerstonejs/dicom-image-loader@^3.30.3": - version "3.30.3" - resolved "https://registry.yarnpkg.com/@cornerstonejs/dicom-image-loader/-/dicom-image-loader-3.30.3.tgz#2bc741b1421e70efff9019f9b8be1dbdfee50c6e" - integrity sha512-RK6X/MXGMMqj5khvW21/pGcrcYWfcIe0pGmYwE0iAY1zacqwVNB3EwoNfH2EqxyD6Noe0fDondZoW2laSbh+Kw== +"@cornerstonejs/dicom-image-loader@^3.32.5": + version "3.32.5" + resolved "https://registry.yarnpkg.com/@cornerstonejs/dicom-image-loader/-/dicom-image-loader-3.32.5.tgz#b91bf19b31a307b03766b154f39eabd58caafd36" + integrity sha512-fOUkphjdzTG8Flw0XV4bGUEZtbASeE2/Y+HssKr4PiwiDvGcVvVQF7RxyKkvabP3OsZIAaBOhPB8ghKEEXDp2w== dependencies: "@cornerstonejs/codec-charls" "^1.2.3" "@cornerstonejs/codec-libjpeg-turbo-8bit" "^1.2.2" @@ -1404,34 +1394,25 @@ pako "^2.0.4" uuid "^9.0.0" -"@cornerstonejs/labelmap-interpolation@^3.30.3": - version "3.30.3" - resolved "https://registry.yarnpkg.com/@cornerstonejs/labelmap-interpolation/-/labelmap-interpolation-3.30.3.tgz#475f116dce301df4cefdca6728414438b9f1fa12" - integrity sha512-WVPqidTTO9mWaSir0uERHqRmXAOl9CzP5EhAumoR/sZaQv0ZUDhkyOjc8jv8MZftSTRLSnlr0Ovy/Tnfxwl45w== +"@cornerstonejs/labelmap-interpolation@^3.32.5": + version "3.32.5" + resolved "https://registry.yarnpkg.com/@cornerstonejs/labelmap-interpolation/-/labelmap-interpolation-3.32.5.tgz#d2808aba8a528bd63522c4759f445ea2603f3686" + integrity sha512-+E476+jgAAOGUVUcdMD0D2K5/yHfc3rCVCgApfZ9H5mOaEavVHPjGxomFkE5twnBfQIBKgTos3968anl21ziAw== dependencies: "@itk-wasm/morphological-contour-interpolation" "1.1.0" itk-wasm "1.0.0-b.165" -"@cornerstonejs/polymorphic-segmentation@^3.30.3": - version "3.30.3" - resolved "https://registry.yarnpkg.com/@cornerstonejs/polymorphic-segmentation/-/polymorphic-segmentation-3.30.3.tgz#b8fdab95df95af7d83b125ce74942fed4c239eaf" - integrity sha512-5LWPRroG6fYdk/CmTKUYyop1M6BUAT5qrXWvMD3xsWMKMW5ScQohRoPZX4hLIfxuhb/ckuiiQwNqixgcDOH2Gw== +"@cornerstonejs/polymorphic-segmentation@^3.32.5": + version "3.32.5" + resolved "https://registry.yarnpkg.com/@cornerstonejs/polymorphic-segmentation/-/polymorphic-segmentation-3.32.5.tgz#edfbd9bd7c3060628f0b8f38a9abb1380087a449" + integrity sha512-MyG1ULFhOEdc8ud+5NJhVUmlBis61K3IWod1UYxZM4VdY7kivbdPbWXaynhnYTUg5OeXGPsETLWdLw/5E32mag== dependencies: "@icr/polyseg-wasm" "0.4.0" -"@cornerstonejs/tools@^3.16.0": - version "3.24.0" - resolved "https://registry.yarnpkg.com/@cornerstonejs/tools/-/tools-3.24.0.tgz#7e4bb8a8e8a982316e8f53282441f888f26bb70b" - integrity sha512-KYkElmvmFwuskKnp9glUIwiHYyVfr1LCqOjhj1y1+rgzxAqlrfaGmS7y8KHOqGHzQwXMMoaEKzRGRviAS915tg== - dependencies: - "@types/offscreencanvas" "2019.7.3" - comlink "^4.4.1" - lodash.get "^4.4.2" - -"@cornerstonejs/tools@^3.30.3": - version "3.30.3" - resolved "https://registry.yarnpkg.com/@cornerstonejs/tools/-/tools-3.30.3.tgz#641ae2216c3f17918798bca3f040650bba555ca4" - integrity sha512-E+Zy+1FvRLOeElCwYmuRdrtwBqbctAhrqCVZNgM3n4vVdakakGnuHFxOJ2eO17LdSEQaCX1hGEFrFQ8UbuCsiw== +"@cornerstonejs/tools@^3.32.5": + version "3.32.5" + resolved "https://registry.yarnpkg.com/@cornerstonejs/tools/-/tools-3.32.5.tgz#1b6fa662a862332fc220c4899fab4303abfd4088" + integrity sha512-h1UWy/u8Cz1QPsMvbNF+rRGwaEdRnGwCbOSZQwLzYOuvaV+rvGAI6l+Xbhe9zUgzE1lSbBigiQjdGHiNtnVWPQ== dependencies: "@types/offscreencanvas" "2019.7.3" comlink "^4.4.1" @@ -8745,23 +8726,10 @@ dayjs@^1.10.4: resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.13.tgz#92430b0139055c3ebb60150aa13e860a4b5a366c" integrity sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg== -dcmjs@^0.29.8: - version "0.29.13" - resolved "https://registry.yarnpkg.com/dcmjs/-/dcmjs-0.29.13.tgz#a74df541bf3948366b25630dbe1e8376f108ea3b" - integrity sha512-Bf9tKzJNWqk4kbV210N5TLEHDqaZvO3S+MH9vezFAU8WKcG4cR6z4/II3TQVqhLI185eNUL+lhfPCVH1Uu2yTA== - dependencies: - "@babel/runtime-corejs3" "^7.22.5" - adm-zip "^0.5.10" - gl-matrix "^3.1.0" - lodash.clonedeep "^4.5.0" - loglevelnext "^3.0.1" - ndarray "^1.0.19" - pako "^2.0.4" - -dcmjs@^0.42.0: - version "0.42.0" - resolved "https://registry.yarnpkg.com/dcmjs/-/dcmjs-0.42.0.tgz#40a41330ccb00bd2a37f4ed4552874c45975489a" - integrity sha512-N/SXIzMvAjDRgb8vC8G7DP/2BI1QKpa3TwY47Ok34g5y6ZKIcpAR3sf+Y+OBWkQxvnCTncB6B4tkq/ih8xjmXA== +dcmjs@0.43.1, dcmjs@^0.29.8, dcmjs@^0.43.1: + version "0.43.1" + resolved "https://registry.yarnpkg.com/dcmjs/-/dcmjs-0.43.1.tgz#03223e56d52e9ec2c3b8c10afe9200d754befe62" + integrity sha512-7IAB2cs2F8QYINbfhA7PV+IDraqBuHn8N31xJc6HsyNxZXyGUPQRujcq732ACqjLhl7oJi1z8PJJgLdblQtD3Q== dependencies: "@babel/runtime-corejs3" "^7.22.5" adm-zip "^0.5.10" @@ -14272,11 +14240,6 @@ loglevel@^1.8.1, loglevel@^1.9.2: resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.9.2.tgz#c2e028d6c757720107df4e64508530db6621ba08" integrity sha512-HgMmCqIJSAKqo68l0rS2AanEWfkxaZ5wNiEFb5ggm08lDs9Xl2KxBlX3PTcaD2chBM1gXAYf491/M2Rv8Jwayg== -loglevelnext@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/loglevelnext/-/loglevelnext-3.0.1.tgz#e3e4659c4061c09264f6812c33586dc55a009a04" - integrity sha512-JpjaJhIN1reaSb26SIxDGtE0uc67gPl19OMVHrr+Ggt6b/Vy60jmCtKgQBrygAH0bhRA2nkxgDvM+8QvR8r0YA== - long@^5.0.0, long@^5.2.3: version "5.3.2" resolved "https://registry.yarnpkg.com/long/-/long-5.3.2.tgz#1d84463095999262d7d7b7f8bfd4a8cc55167f83" @@ -19673,7 +19636,7 @@ string-natural-compare@^3.0.1: resolved "https://registry.yarnpkg.com/string-natural-compare/-/string-natural-compare-3.0.1.tgz#7a42d58474454963759e8e8b7ae63d71c1e7fdf4" integrity sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw== -"string-width-cjs@npm:string-width@^4.2.0", "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: +"string-width-cjs@npm:string-width@^4.2.0": version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -19691,6 +19654,15 @@ string-width@^1.0.1: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" +"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + string-width@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" @@ -19799,7 +19771,7 @@ stringify-object@^3.3.0: is-obj "^1.0.1" is-regexp "^1.0.0" -"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: +"strip-ansi-cjs@npm:strip-ansi@^6.0.1": version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== @@ -19820,6 +19792,13 @@ strip-ansi@^4.0.0: dependencies: ansi-regex "^3.0.0" +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + strip-ansi@^7.0.1: version "7.1.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" @@ -21785,7 +21764,7 @@ worker-loader@3.0.8, worker-loader@^3.0.8: loader-utils "^2.0.0" schema-utils "^3.0.0" -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== @@ -21811,6 +21790,15 @@ wrap-ansi@^6.0.1, wrap-ansi@^6.2.0: string-width "^4.1.0" strip-ansi "^6.0.0" +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + wrap-ansi@^8.0.1, wrap-ansi@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214"