diff --git a/.gitignore b/.gitignore index af800d7ed..31134b5b7 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ # Packages node_modules +.cursor/ # Output build diff --git a/bun.lock b/bun.lock index 3b2c9a7b0..9af3492d0 100644 --- a/bun.lock +++ b/bun.lock @@ -26,13 +26,13 @@ "optionalDependencies": { "@percy/cypress": "^3.1.1", "@playwright/test": "^1.48.0", - "cypress": "^14.0.0", + "cypress": "^14.1.0", "cypress-file-upload": "^5.0.8", }, }, "addOns/externals/devDependencies": { "name": "@externals/devDependencies", - "version": "3.10.0-beta.113", + "version": "3.10.0-beta.115", "dependencies": { "@babel/runtime": "^7.20.13", "@kitware/vtk.js": "32.1.1", @@ -120,20 +120,20 @@ }, "addOns/externals/dicom-microscopy-viewer": { "name": "@externals/dicom-microscopy-viewer", - "version": "3.10.0-beta.113", + "version": "3.10.0-beta.115", "dependencies": { "dicom-microscopy-viewer": "^0.46.1", }, }, "extensions/cornerstone": { "name": "@ohif/extension-cornerstone", - "version": "3.10.0-beta.113", + "version": "3.10.0-beta.115", "dependencies": { "@babel/runtime": "^7.20.13", - "@cornerstonejs/adapters": "^3.0.1", - "@cornerstonejs/core": "^3.0.1", + "@cornerstonejs/adapters": "^3.0.4", + "@cornerstonejs/core": "^3.0.4", "@cornerstonejs/polymorphic-segmentation": "^3.0.1", - "@cornerstonejs/tools": "^3.0.1", + "@cornerstonejs/tools": "^3.0.4", "@itk-wasm/morphological-contour-interpolation": "1.1.0", "@kitware/vtk.js": "32.1.1", "html2canvas": "^1.4.1", @@ -150,9 +150,9 @@ "@cornerstonejs/codec-libjpeg-turbo-8bit": "^1.2.2", "@cornerstonejs/codec-openjpeg": "^1.2.4", "@cornerstonejs/codec-openjph": "^2.4.5", - "@cornerstonejs/dicom-image-loader": "^3.0.1", - "@ohif/core": "3.10.0-beta.113", - "@ohif/ui": "3.10.0-beta.113", + "@cornerstonejs/dicom-image-loader": "^3.0.4", + "@ohif/core": "3.10.0-beta.115", + "@ohif/ui": "3.10.0-beta.115", "dcmjs": "*", "dicom-parser": "^1.8.21", "hammerjs": "^2.0.8", @@ -164,19 +164,19 @@ }, "extensions/cornerstone-dicom-pmap": { "name": "@ohif/extension-cornerstone-dicom-pmap", - "version": "3.10.0-beta.113", + "version": "3.10.0-beta.115", "dependencies": { "@babel/runtime": "^7.20.13", - "@cornerstonejs/adapters": "^3.0.1", - "@cornerstonejs/core": "^3.0.1", + "@cornerstonejs/adapters": "^3.0.4", + "@cornerstonejs/core": "^3.0.4", "@kitware/vtk.js": "32.1.1", "react-color": "^2.19.3", }, "peerDependencies": { - "@ohif/core": "3.10.0-beta.113", - "@ohif/extension-cornerstone": "3.10.0-beta.113", - "@ohif/extension-default": "3.10.0-beta.113", - "@ohif/i18n": "3.10.0-beta.113", + "@ohif/core": "3.10.0-beta.115", + "@ohif/extension-cornerstone": "3.10.0-beta.115", + "@ohif/extension-default": "3.10.0-beta.115", + "@ohif/i18n": "3.10.0-beta.115", "prop-types": "^15.6.2", "react": "^18.3.1", "react-dom": "^18.3.1", @@ -187,16 +187,16 @@ }, "extensions/cornerstone-dicom-rt": { "name": "@ohif/extension-cornerstone-dicom-rt", - "version": "3.10.0-beta.113", + "version": "3.10.0-beta.115", "dependencies": { "@babel/runtime": "^7.20.13", "react-color": "^2.19.3", }, "peerDependencies": { - "@ohif/core": "3.10.0-beta.113", - "@ohif/extension-cornerstone": "3.10.0-beta.113", - "@ohif/extension-default": "3.10.0-beta.113", - "@ohif/i18n": "3.10.0-beta.113", + "@ohif/core": "3.10.0-beta.115", + "@ohif/extension-cornerstone": "3.10.0-beta.115", + "@ohif/extension-default": "3.10.0-beta.115", + "@ohif/i18n": "3.10.0-beta.115", "prop-types": "^15.6.2", "react": "^18.3.1", "react-dom": "^18.3.1", @@ -207,19 +207,19 @@ }, "extensions/cornerstone-dicom-seg": { "name": "@ohif/extension-cornerstone-dicom-seg", - "version": "3.10.0-beta.113", + "version": "3.10.0-beta.115", "dependencies": { "@babel/runtime": "^7.20.13", - "@cornerstonejs/adapters": "^3.0.1", - "@cornerstonejs/core": "^3.0.1", + "@cornerstonejs/adapters": "^3.0.4", + "@cornerstonejs/core": "^3.0.4", "@kitware/vtk.js": "32.1.1", "react-color": "^2.19.3", }, "peerDependencies": { - "@ohif/core": "3.10.0-beta.113", - "@ohif/extension-cornerstone": "3.10.0-beta.113", - "@ohif/extension-default": "3.10.0-beta.113", - "@ohif/i18n": "3.10.0-beta.113", + "@ohif/core": "3.10.0-beta.115", + "@ohif/extension-cornerstone": "3.10.0-beta.115", + "@ohif/extension-default": "3.10.0-beta.115", + "@ohif/i18n": "3.10.0-beta.115", "prop-types": "^15.6.2", "react": "^18.3.1", "react-dom": "^18.3.1", @@ -230,19 +230,19 @@ }, "extensions/cornerstone-dicom-sr": { "name": "@ohif/extension-cornerstone-dicom-sr", - "version": "3.10.0-beta.113", + "version": "3.10.0-beta.115", "dependencies": { "@babel/runtime": "^7.20.13", - "@cornerstonejs/adapters": "^3.0.1", - "@cornerstonejs/core": "^3.0.1", - "@cornerstonejs/tools": "^3.0.1", + "@cornerstonejs/adapters": "^3.0.4", + "@cornerstonejs/core": "^3.0.4", + "@cornerstonejs/tools": "^3.0.4", "classnames": "^2.3.2", }, "peerDependencies": { - "@ohif/core": "3.10.0-beta.113", - "@ohif/extension-cornerstone": "3.10.0-beta.113", - "@ohif/extension-measurement-tracking": "3.10.0-beta.113", - "@ohif/ui": "3.10.0-beta.113", + "@ohif/core": "3.10.0-beta.115", + "@ohif/extension-cornerstone": "3.10.0-beta.115", + "@ohif/extension-measurement-tracking": "3.10.0-beta.115", + "@ohif/ui": "3.10.0-beta.115", "dcmjs": "*", "dicom-parser": "^1.8.9", "hammerjs": "^2.0.8", @@ -252,19 +252,19 @@ }, "extensions/cornerstone-dynamic-volume": { "name": "@ohif/extension-cornerstone-dynamic-volume", - "version": "3.10.0-beta.113", + "version": "3.10.0-beta.115", "dependencies": { "@babel/runtime": "^7.20.13", - "@cornerstonejs/core": "^3.0.1", - "@cornerstonejs/tools": "^3.0.1", + "@cornerstonejs/core": "^3.0.4", + "@cornerstonejs/tools": "^3.0.4", "classnames": "^2.3.2", }, "peerDependencies": { - "@ohif/core": "3.10.0-beta.113", - "@ohif/extension-cornerstone": "3.10.0-beta.113", - "@ohif/extension-default": "3.10.0-beta.113", - "@ohif/i18n": "3.10.0-beta.113", - "@ohif/ui": "3.10.0-beta.113", + "@ohif/core": "3.10.0-beta.115", + "@ohif/extension-cornerstone": "3.10.0-beta.115", + "@ohif/extension-default": "3.10.0-beta.115", + "@ohif/i18n": "3.10.0-beta.115", + "@ohif/ui": "3.10.0-beta.115", "dcmjs": "*", "dicom-parser": "^1.8.21", "hammerjs": "^2.0.8", @@ -274,7 +274,7 @@ }, "extensions/default": { "name": "@ohif/extension-default", - "version": "3.10.0-beta.113", + "version": "3.10.0-beta.115", "dependencies": { "@babel/runtime": "^7.20.13", "@cornerstonejs/calculate-suv": "^1.1.0", @@ -282,8 +282,8 @@ "lodash.uniqby": "^4.7.0", }, "peerDependencies": { - "@ohif/core": "3.10.0-beta.113", - "@ohif/i18n": "3.10.0-beta.113", + "@ohif/core": "3.10.0-beta.115", + "@ohif/i18n": "3.10.0-beta.115", "dcmjs": "*", "dicomweb-client": "^0.10.4", "prop-types": "^15.6.2", @@ -297,7 +297,7 @@ }, "extensions/dicom-microscopy": { "name": "@ohif/extension-dicom-microscopy", - "version": "3.10.0-beta.113", + "version": "3.10.0-beta.115", "dependencies": { "@babel/runtime": "^7.20.13", "@cornerstonejs/codec-charls": "^1.2.3", @@ -308,10 +308,10 @@ "mathjs": "^12.4.2", }, "peerDependencies": { - "@ohif/core": "3.10.0-beta.113", - "@ohif/extension-default": "3.10.0-beta.113", - "@ohif/i18n": "3.10.0-beta.113", - "@ohif/ui": "3.10.0-beta.113", + "@ohif/core": "3.10.0-beta.115", + "@ohif/extension-default": "3.10.0-beta.115", + "@ohif/i18n": "3.10.0-beta.115", + "@ohif/ui": "3.10.0-beta.115", "prop-types": "^15.6.2", "react": "^18.3.1", "react-dom": "^18.3.1", @@ -322,14 +322,14 @@ }, "extensions/dicom-pdf": { "name": "@ohif/extension-dicom-pdf", - "version": "3.10.0-beta.113", + "version": "3.10.0-beta.115", "dependencies": { "@babel/runtime": "^7.20.13", "classnames": "^2.3.2", }, "peerDependencies": { - "@ohif/core": "3.10.0-beta.113", - "@ohif/ui": "3.10.0-beta.113", + "@ohif/core": "3.10.0-beta.115", + "@ohif/ui": "3.10.0-beta.115", "dcmjs": "*", "dicom-parser": "^1.8.9", "hammerjs": "^2.0.8", @@ -339,14 +339,14 @@ }, "extensions/dicom-video": { "name": "@ohif/extension-dicom-video", - "version": "3.10.0-beta.113", + "version": "3.10.0-beta.115", "dependencies": { "@babel/runtime": "^7.20.13", "classnames": "^2.3.2", }, "peerDependencies": { - "@ohif/core": "3.10.0-beta.113", - "@ohif/ui": "3.10.0-beta.113", + "@ohif/core": "3.10.0-beta.115", + "@ohif/ui": "3.10.0-beta.115", "dcmjs": "*", "dicom-parser": "^1.8.9", "hammerjs": "^2.0.8", @@ -356,20 +356,20 @@ }, "extensions/measurement-tracking": { "name": "@ohif/extension-measurement-tracking", - "version": "3.10.0-beta.113", + "version": "3.10.0-beta.115", "dependencies": { "@babel/runtime": "^7.20.13", - "@ohif/ui": "3.10.0-beta.113", + "@ohif/ui": "3.10.0-beta.115", "@xstate/react": "^3.2.2", "xstate": "^4.10.0", }, "peerDependencies": { - "@cornerstonejs/core": "^3.0.1", - "@cornerstonejs/tools": "^3.0.1", - "@ohif/core": "3.10.0-beta.113", - "@ohif/extension-cornerstone-dicom-sr": "3.10.0-beta.113", - "@ohif/extension-default": "3.10.0-beta.113", - "@ohif/ui": "3.10.0-beta.113", + "@cornerstonejs/core": "^3.0.4", + "@cornerstonejs/tools": "^3.0.4", + "@ohif/core": "3.10.0-beta.115", + "@ohif/extension-cornerstone-dicom-sr": "3.10.0-beta.115", + "@ohif/extension-default": "3.10.0-beta.115", + "@ohif/ui": "3.10.0-beta.115", "classnames": "^2.3.2", "dcmjs": "*", "lodash.debounce": "^4.0.8", @@ -382,14 +382,14 @@ }, "extensions/test-extension": { "name": "@ohif/extension-test", - "version": "3.10.0-beta.113", + "version": "3.10.0-beta.115", "dependencies": { "@babel/runtime": "^7.20.13", "classnames": "^2.3.2", }, "peerDependencies": { - "@ohif/core": "3.10.0-beta.113", - "@ohif/ui": "3.10.0-beta.113", + "@ohif/core": "3.10.0-beta.115", + "@ohif/ui": "3.10.0-beta.115", "dcmjs": "0.38.0", "dicom-parser": "^1.8.9", "hammerjs": "^2.0.8", @@ -399,14 +399,14 @@ }, "extensions/tmtv": { "name": "@ohif/extension-tmtv", - "version": "3.10.0-beta.113", + "version": "3.10.0-beta.115", "dependencies": { "@babel/runtime": "^7.20.13", "classnames": "^2.3.2", }, "peerDependencies": { - "@ohif/core": "3.10.0-beta.113", - "@ohif/ui": "3.10.0-beta.113", + "@ohif/core": "3.10.0-beta.115", + "@ohif/ui": "3.10.0-beta.115", "dcmjs": "*", "dicom-parser": "^1.8.9", "hammerjs": "^2.0.8", @@ -416,7 +416,7 @@ }, "modes/basic-dev-mode": { "name": "@ohif/mode-basic-dev-mode", - "version": "3.10.0-beta.113", + "version": "3.10.0-beta.115", "dependencies": { "@babel/runtime": "^7.20.13", "i18next": "^17.0.3", @@ -426,17 +426,17 @@ "webpack-merge": "^5.7.3", }, "peerDependencies": { - "@ohif/core": "3.10.0-beta.113", - "@ohif/extension-cornerstone": "3.10.0-beta.113", - "@ohif/extension-cornerstone-dicom-sr": "3.10.0-beta.113", - "@ohif/extension-default": "3.10.0-beta.113", - "@ohif/extension-dicom-pdf": "3.10.0-beta.113", - "@ohif/extension-dicom-video": "3.10.0-beta.113", + "@ohif/core": "3.10.0-beta.115", + "@ohif/extension-cornerstone": "3.10.0-beta.115", + "@ohif/extension-cornerstone-dicom-sr": "3.10.0-beta.115", + "@ohif/extension-default": "3.10.0-beta.115", + "@ohif/extension-dicom-pdf": "3.10.0-beta.115", + "@ohif/extension-dicom-video": "3.10.0-beta.115", }, }, "modes/basic-test-mode": { "name": "@ohif/mode-test", - "version": "3.10.0-beta.113", + "version": "3.10.0-beta.115", "dependencies": { "@babel/runtime": "^7.20.13", "i18next": "^17.0.3", @@ -446,19 +446,19 @@ "webpack-merge": "^5.7.3", }, "peerDependencies": { - "@ohif/core": "3.10.0-beta.113", - "@ohif/extension-cornerstone": "3.10.0-beta.113", - "@ohif/extension-cornerstone-dicom-sr": "3.10.0-beta.113", - "@ohif/extension-default": "3.10.0-beta.113", - "@ohif/extension-dicom-pdf": "3.10.0-beta.113", - "@ohif/extension-dicom-video": "3.10.0-beta.113", - "@ohif/extension-measurement-tracking": "3.10.0-beta.113", - "@ohif/extension-test": "3.10.0-beta.113", + "@ohif/core": "3.10.0-beta.115", + "@ohif/extension-cornerstone": "3.10.0-beta.115", + "@ohif/extension-cornerstone-dicom-sr": "3.10.0-beta.115", + "@ohif/extension-default": "3.10.0-beta.115", + "@ohif/extension-dicom-pdf": "3.10.0-beta.115", + "@ohif/extension-dicom-video": "3.10.0-beta.115", + "@ohif/extension-measurement-tracking": "3.10.0-beta.115", + "@ohif/extension-test": "3.10.0-beta.115", }, }, "modes/longitudinal": { "name": "@ohif/mode-longitudinal", - "version": "3.10.0-beta.113", + "version": "3.10.0-beta.115", "dependencies": { "@babel/runtime": "^7.20.13", "i18next": "^17.0.3", @@ -468,32 +468,32 @@ "webpack-merge": "^5.7.3", }, "peerDependencies": { - "@ohif/core": "3.10.0-beta.113", - "@ohif/extension-cornerstone": "3.10.0-beta.113", - "@ohif/extension-cornerstone-dicom-rt": "3.10.0-beta.113", - "@ohif/extension-cornerstone-dicom-seg": "3.10.0-beta.113", - "@ohif/extension-cornerstone-dicom-sr": "3.10.0-beta.113", - "@ohif/extension-default": "3.10.0-beta.113", - "@ohif/extension-dicom-pdf": "3.10.0-beta.113", - "@ohif/extension-dicom-video": "3.10.0-beta.113", - "@ohif/extension-measurement-tracking": "3.10.0-beta.113", + "@ohif/core": "3.10.0-beta.115", + "@ohif/extension-cornerstone": "3.10.0-beta.115", + "@ohif/extension-cornerstone-dicom-rt": "3.10.0-beta.115", + "@ohif/extension-cornerstone-dicom-seg": "3.10.0-beta.115", + "@ohif/extension-cornerstone-dicom-sr": "3.10.0-beta.115", + "@ohif/extension-default": "3.10.0-beta.115", + "@ohif/extension-dicom-pdf": "3.10.0-beta.115", + "@ohif/extension-dicom-video": "3.10.0-beta.115", + "@ohif/extension-measurement-tracking": "3.10.0-beta.115", }, }, "modes/microscopy": { "name": "@ohif/mode-microscopy", - "version": "3.10.0-beta.113", + "version": "3.10.0-beta.115", "dependencies": { "@babel/runtime": "^7.20.13", "i18next": "^17.0.3", }, "peerDependencies": { - "@ohif/core": "3.10.0-beta.113", - "@ohif/extension-dicom-microscopy": "3.10.0-beta.113", + "@ohif/core": "3.10.0-beta.115", + "@ohif/extension-dicom-microscopy": "3.10.0-beta.115", }, }, "modes/preclinical-4d": { "name": "@ohif/mode-preclinical-4d", - "version": "3.10.0-beta.113", + "version": "3.10.0-beta.115", "dependencies": { "@babel/runtime": "^7.20.13", }, @@ -502,17 +502,17 @@ "webpack-merge": "^5.7.3", }, "peerDependencies": { - "@ohif/core": "3.10.0-beta.113", - "@ohif/extension-cornerstone": "3.10.0-beta.113", - "@ohif/extension-cornerstone-dicom-seg": "3.10.0-beta.113", - "@ohif/extension-cornerstone-dynamic-volume": "3.10.0-beta.113", - "@ohif/extension-default": "3.10.0-beta.113", - "@ohif/extension-tmtv": "3.10.0-beta.113", + "@ohif/core": "3.10.0-beta.115", + "@ohif/extension-cornerstone": "3.10.0-beta.115", + "@ohif/extension-cornerstone-dicom-seg": "3.10.0-beta.115", + "@ohif/extension-cornerstone-dynamic-volume": "3.10.0-beta.115", + "@ohif/extension-default": "3.10.0-beta.115", + "@ohif/extension-tmtv": "3.10.0-beta.115", }, }, "modes/segmentation": { "name": "@ohif/mode-segmentation", - "version": "3.10.0-beta.113", + "version": "3.10.0-beta.115", "dependencies": { "@babel/runtime": "^7.20.13", "i18next": "^17.0.3", @@ -544,19 +544,19 @@ "webpack-merge": "^5.7.3", }, "peerDependencies": { - "@ohif/core": "3.10.0-beta.113", - "@ohif/extension-cornerstone": "3.10.0-beta.113", - "@ohif/extension-cornerstone-dicom-rt": "3.10.0-beta.113", - "@ohif/extension-cornerstone-dicom-seg": "3.10.0-beta.113", - "@ohif/extension-cornerstone-dicom-sr": "3.10.0-beta.113", - "@ohif/extension-default": "3.10.0-beta.113", - "@ohif/extension-dicom-pdf": "3.10.0-beta.113", - "@ohif/extension-dicom-video": "3.10.0-beta.113", + "@ohif/core": "3.10.0-beta.115", + "@ohif/extension-cornerstone": "3.10.0-beta.115", + "@ohif/extension-cornerstone-dicom-rt": "3.10.0-beta.115", + "@ohif/extension-cornerstone-dicom-seg": "3.10.0-beta.115", + "@ohif/extension-cornerstone-dicom-sr": "3.10.0-beta.115", + "@ohif/extension-default": "3.10.0-beta.115", + "@ohif/extension-dicom-pdf": "3.10.0-beta.115", + "@ohif/extension-dicom-video": "3.10.0-beta.115", }, }, "modes/tmtv": { "name": "@ohif/mode-tmtv", - "version": "3.10.0-beta.113", + "version": "3.10.0-beta.115", "dependencies": { "@babel/runtime": "^7.20.13", "i18next": "^17.0.3", @@ -566,43 +566,43 @@ "webpack-merge": "^5.7.3", }, "peerDependencies": { - "@ohif/core": "3.10.0-beta.113", - "@ohif/extension-cornerstone": "3.10.0-beta.113", - "@ohif/extension-cornerstone-dicom-sr": "3.10.0-beta.113", - "@ohif/extension-default": "3.10.0-beta.113", - "@ohif/extension-dicom-pdf": "3.10.0-beta.113", - "@ohif/extension-dicom-video": "3.10.0-beta.113", - "@ohif/extension-measurement-tracking": "3.10.0-beta.113", + "@ohif/core": "3.10.0-beta.115", + "@ohif/extension-cornerstone": "3.10.0-beta.115", + "@ohif/extension-cornerstone-dicom-sr": "3.10.0-beta.115", + "@ohif/extension-default": "3.10.0-beta.115", + "@ohif/extension-dicom-pdf": "3.10.0-beta.115", + "@ohif/extension-dicom-video": "3.10.0-beta.115", + "@ohif/extension-measurement-tracking": "3.10.0-beta.115", }, }, "platform/app": { "name": "@ohif/app", - "version": "3.10.0-beta.113", + "version": "3.10.0-beta.115", "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.0.1", + "@cornerstonejs/dicom-image-loader": "^3.0.4", "@emotion/serialize": "^1.1.3", - "@ohif/core": "3.10.0-beta.113", - "@ohif/extension-cornerstone": "3.10.0-beta.113", - "@ohif/extension-cornerstone-dicom-rt": "3.10.0-beta.113", - "@ohif/extension-cornerstone-dicom-seg": "3.10.0-beta.113", - "@ohif/extension-cornerstone-dicom-sr": "3.10.0-beta.113", - "@ohif/extension-default": "3.10.0-beta.113", - "@ohif/extension-dicom-microscopy": "3.10.0-beta.113", - "@ohif/extension-dicom-pdf": "3.10.0-beta.113", - "@ohif/extension-dicom-video": "3.10.0-beta.113", - "@ohif/extension-test": "3.10.0-beta.113", - "@ohif/i18n": "3.10.0-beta.113", - "@ohif/mode-basic-dev-mode": "3.10.0-beta.113", - "@ohif/mode-longitudinal": "3.10.0-beta.113", - "@ohif/mode-microscopy": "3.10.0-beta.113", - "@ohif/mode-test": "3.10.0-beta.113", - "@ohif/ui": "3.10.0-beta.113", - "@ohif/ui-next": "3.10.0-beta.113", + "@ohif/core": "3.10.0-beta.115", + "@ohif/extension-cornerstone": "3.10.0-beta.115", + "@ohif/extension-cornerstone-dicom-rt": "3.10.0-beta.115", + "@ohif/extension-cornerstone-dicom-seg": "3.10.0-beta.115", + "@ohif/extension-cornerstone-dicom-sr": "3.10.0-beta.115", + "@ohif/extension-default": "3.10.0-beta.115", + "@ohif/extension-dicom-microscopy": "3.10.0-beta.115", + "@ohif/extension-dicom-pdf": "3.10.0-beta.115", + "@ohif/extension-dicom-video": "3.10.0-beta.115", + "@ohif/extension-test": "3.10.0-beta.115", + "@ohif/i18n": "3.10.0-beta.115", + "@ohif/mode-basic-dev-mode": "3.10.0-beta.115", + "@ohif/mode-longitudinal": "3.10.0-beta.115", + "@ohif/mode-microscopy": "3.10.0-beta.115", + "@ohif/mode-test": "3.10.0-beta.115", + "@ohif/ui": "3.10.0-beta.115", + "@ohif/ui-next": "3.10.0-beta.115", "@svgr/webpack": "^8.1.0", "@types/react": "^18.3.3", "classnames": "^2.3.2", @@ -643,7 +643,7 @@ }, "platform/cli": { "name": "@ohif/cli", - "version": "3.10.0-beta.113", + "version": "3.10.0-beta.115", "bin": { "ohif-cli": "src/index.js" }, @@ -667,7 +667,7 @@ }, "platform/core": { "name": "@ohif/core", - "version": "3.10.0-beta.113", + "version": "3.10.0-beta.115", "dependencies": { "@babel/runtime": "^7.20.13", "dcmjs": "*", @@ -692,15 +692,15 @@ "@cornerstonejs/codec-libjpeg-turbo-8bit": "^1.2.2", "@cornerstonejs/codec-openjpeg": "^1.2.4", "@cornerstonejs/codec-openjph": "^2.4.5", - "@cornerstonejs/dicom-image-loader": "^3.0.1", - "@ohif/ui": "3.10.0-beta.113", + "@cornerstonejs/dicom-image-loader": "^3.0.4", + "@ohif/ui": "3.10.0-beta.115", "cornerstone-math": "0.1.9", "dicom-parser": "^1.8.21", }, }, "platform/i18n": { "name": "@ohif/i18n", - "version": "3.10.0-beta.113", + "version": "3.10.0-beta.115", "dependencies": { "@babel/runtime": "^7.20.13", "i18next-locize-backend": "^2.0.0", @@ -725,7 +725,7 @@ }, "platform/ui": { "name": "@ohif/ui", - "version": "3.10.0-beta.113", + "version": "3.10.0-beta.115", "dependencies": { "@testing-library/react": "^13.1.0", "browser-detect": "^0.2.28", @@ -785,7 +785,7 @@ }, "platform/ui-next": { "name": "@ohif/ui-next", - "version": "3.10.0-beta.113", + "version": "3.10.0-beta.115", "dependencies": { "@radix-ui/react-accordion": "^1.2.0", "@radix-ui/react-checkbox": "^1.1.1", @@ -1092,7 +1092,7 @@ "@colors/colors": ["@colors/colors@1.5.0", "", {}, "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ=="], - "@cornerstonejs/adapters": ["@cornerstonejs/adapters@3.0.1", "", { "dependencies": { "@babel/runtime-corejs2": "^7.17.8", "buffer": "^6.0.3", "dcmjs": "^0.29.8", "gl-matrix": "^3.4.3", "ndarray": "^1.0.19" }, "peerDependencies": { "@cornerstonejs/core": "^3.0.1", "@cornerstonejs/tools": "^3.0.1" } }, "sha512-Ym6s4cTpMkojap5QZ8MXZ8hDbs2TMMN/ypqU7wKMwAY2LGoltoeGw0Z/7LL+iostbaSw3fVs+TZzJSKhKw8Bug=="], + "@cornerstonejs/adapters": ["@cornerstonejs/adapters@3.0.4", "", { "dependencies": { "@babel/runtime-corejs2": "^7.17.8", "buffer": "^6.0.3", "dcmjs": "^0.29.8", "gl-matrix": "^3.4.3", "ndarray": "^1.0.19" }, "peerDependencies": { "@cornerstonejs/core": "^3.0.4", "@cornerstonejs/tools": "^3.0.4" } }, "sha512-TJtW0biDf0wgi+XxQFqvKXT/Cf8ueyUruohH9n/RJsWiyE8z1/LOBxOqCZNkToGGs1EbO51T/PMPIUWordW43w=="], "@cornerstonejs/calculate-suv": ["@cornerstonejs/calculate-suv@1.1.0", "", {}, "sha512-Q9XraiDJif9aMFArD2iEuDO/HXbcRVCqB7KfaHgDrdTTjgDFovS91Psbdim7crypRSvE6dh/+HKeFNHdvNkA6w=="], @@ -1104,13 +1104,13 @@ "@cornerstonejs/codec-openjph": ["@cornerstonejs/codec-openjph@2.4.7", "", {}, "sha512-qvP4q4JDib7mi9r7LqKOwqz7YZ8gjtDX4ZCezeYf8+eb7MBXCz5uXAMeVF3yz9Axw4XiIMdB/pqXkm8tqCl13w=="], - "@cornerstonejs/core": ["@cornerstonejs/core@3.0.1", "", { "dependencies": { "@kitware/vtk.js": "32.9.0", "comlink": "^4.4.1", "gl-matrix": "^3.4.3" } }, "sha512-K+cOoN/TzJIPRRoaWWNkhJ+2CdkBBX8BA64DG0aBVOthlwJPRqK2YQE6PTTVRx18mjMA4to/m3de0emFNKrTzQ=="], + "@cornerstonejs/core": ["@cornerstonejs/core@3.0.4", "", { "dependencies": { "@kitware/vtk.js": "32.9.0", "comlink": "^4.4.1", "gl-matrix": "^3.4.3" } }, "sha512-6rMiqhBjyz3wsalPOAFjThfPUJnWVOs7Xqe3xLFvqd1qIFW1q42bqlQ7ak2DRMUMtC1nLURk6YIMhkWxK+t+7A=="], - "@cornerstonejs/dicom-image-loader": ["@cornerstonejs/dicom-image-loader@3.0.1", "", { "dependencies": { "@cornerstonejs/codec-charls": "^1.2.3", "@cornerstonejs/codec-libjpeg-turbo-8bit": "^1.2.2", "@cornerstonejs/codec-openjpeg": "^1.2.2", "@cornerstonejs/codec-openjph": "^2.4.5", "comlink": "^4.4.1", "jpeg-lossless-decoder-js": "^2.1.0", "pako": "^2.0.4", "uuid": "^9.0.0" }, "peerDependencies": { "@cornerstonejs/core": "^3.0.1", "dicom-parser": "^1.8.9" } }, "sha512-t4bI6rVOt4J8YOHRR9Mh9ClInajc98qqI6fwsByiXmtc2Y4INrZ1uaRspFnOJBosbr+EwsJBV7iT2yt6Jk6CjA=="], + "@cornerstonejs/dicom-image-loader": ["@cornerstonejs/dicom-image-loader@3.0.4", "", { "dependencies": { "@cornerstonejs/codec-charls": "^1.2.3", "@cornerstonejs/codec-libjpeg-turbo-8bit": "^1.2.2", "@cornerstonejs/codec-openjpeg": "^1.2.2", "@cornerstonejs/codec-openjph": "^2.4.5", "comlink": "^4.4.1", "jpeg-lossless-decoder-js": "^2.1.0", "pako": "^2.0.4", "uuid": "^9.0.0" }, "peerDependencies": { "@cornerstonejs/core": "^3.0.4", "dicom-parser": "^1.8.9" } }, "sha512-w0NoutE7+/C2FeT1YHo0cnMJpZ17ARH0qwyGwWockFwuJkUVjRcU5ZW1sT0ABNOPUHqZse/K/YmH2IX+ppaScQ=="], "@cornerstonejs/polymorphic-segmentation": ["@cornerstonejs/polymorphic-segmentation@3.0.1", "", { "dependencies": { "@icr/polyseg-wasm": "0.4.0" }, "peerDependencies": { "@cornerstonejs/core": "^3.0.1", "@cornerstonejs/tools": "^3.0.1", "@kitware/vtk.js": "^32.9.0" } }, "sha512-oCT+U7iTv5oKDHOcEobtZ9gez2aNh/uJkyudO+edd5ndzwXpU+mXp/wre5D9xH5CBCigFG3nDJTZJrpzUHYKfg=="], - "@cornerstonejs/tools": ["@cornerstonejs/tools@3.0.1", "", { "dependencies": { "@types/offscreencanvas": "2019.7.3", "comlink": "^4.4.1", "lodash.get": "^4.4.2" }, "peerDependencies": { "@cornerstonejs/core": "^3.0.1", "@kitware/vtk.js": "32.9.0", "@types/d3-array": "^3.0.4", "@types/d3-interpolate": "^3.0.1", "d3-array": "^3.2.3", "d3-interpolate": "^3.0.1", "gl-matrix": "^3.4.3" } }, "sha512-fRjoXJ46mdpYc5JZ/FUn0g1vCK4LohnNjgZl+O72HK2reMdc5/dQeCueJCT+tBMay04sJMUHm0tAke2DN10FBQ=="], + "@cornerstonejs/tools": ["@cornerstonejs/tools@3.0.4", "", { "dependencies": { "@types/offscreencanvas": "2019.7.3", "comlink": "^4.4.1", "lodash.get": "^4.4.2" }, "peerDependencies": { "@cornerstonejs/core": "^3.0.4", "@kitware/vtk.js": "32.9.0", "@types/d3-array": "^3.0.4", "@types/d3-interpolate": "^3.0.1", "d3-array": "^3.2.3", "d3-interpolate": "^3.0.1", "gl-matrix": "^3.4.3" } }, "sha512-gkenXhOS6lYYmQhKDwayojeObTU/KiG9k+JEC/hoOBhRdoFZljyXfQtnljKFHL+G9rkdbNKxXq/a3+C9Bn7EVg=="], "@csstools/postcss-cascade-layers": ["@csstools/postcss-cascade-layers@1.1.1", "", { "dependencies": { "@csstools/selector-specificity": "^2.0.2", "postcss-selector-parser": "^6.0.10" }, "peerDependencies": { "postcss": "^8.2" } }, "sha512-+KdYrpKC5TgomQr2DlZF4lDEpHcoxnj5IGddYYfBWJAKfj1JtuHUIqMa+E1pJJ+z3kvDViWMqyqPlG4Ja7amQA=="], @@ -2638,7 +2638,7 @@ "csstype": ["csstype@3.1.3", "", {}, "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="], - "cypress": ["cypress@14.0.1", "", { "dependencies": { "@cypress/request": "^3.0.6", "@cypress/xvfb": "^1.2.4", "@types/sinonjs__fake-timers": "8.1.1", "@types/sizzle": "^2.3.2", "arch": "^2.2.0", "blob-util": "^2.0.2", "bluebird": "^3.7.2", "buffer": "^5.7.1", "cachedir": "^2.3.0", "chalk": "^4.1.0", "check-more-types": "^2.24.0", "ci-info": "^4.0.0", "cli-cursor": "^3.1.0", "cli-table3": "~0.6.1", "commander": "^6.2.1", "common-tags": "^1.8.0", "dayjs": "^1.10.4", "debug": "^4.3.4", "enquirer": "^2.3.6", "eventemitter2": "6.4.7", "execa": "4.1.0", "executable": "^4.1.1", "extract-zip": "2.0.1", "figures": "^3.2.0", "fs-extra": "^9.1.0", "getos": "^3.2.1", "is-installed-globally": "~0.4.0", "lazy-ass": "^1.6.0", "listr2": "^3.8.3", "lodash": "^4.17.21", "log-symbols": "^4.0.0", "minimist": "^1.2.8", "ospath": "^1.2.2", "pretty-bytes": "^5.6.0", "process": "^0.11.10", "proxy-from-env": "1.0.0", "request-progress": "^3.0.0", "semver": "^7.5.3", "supports-color": "^8.1.1", "tmp": "~0.2.3", "tree-kill": "1.2.2", "untildify": "^4.0.0", "yauzl": "^2.10.0" }, "bin": { "cypress": "bin/cypress" } }, "sha512-gBAvKZE3f6eBaW1v8OtrwAFP90rjNZjjOO40M2KvOvmwVXk96Ps5Yjyck1EzGkXmNCaC/8kXFOY/1KD/wsaWpQ=="], + "cypress": ["cypress@14.1.0", "", { "dependencies": { "@cypress/request": "^3.0.7", "@cypress/xvfb": "^1.2.4", "@types/sinonjs__fake-timers": "8.1.1", "@types/sizzle": "^2.3.2", "arch": "^2.2.0", "blob-util": "^2.0.2", "bluebird": "^3.7.2", "buffer": "^5.7.1", "cachedir": "^2.3.0", "chalk": "^4.1.0", "check-more-types": "^2.24.0", "ci-info": "^4.1.0", "cli-cursor": "^3.1.0", "cli-table3": "~0.6.1", "commander": "^6.2.1", "common-tags": "^1.8.0", "dayjs": "^1.10.4", "debug": "^4.3.4", "enquirer": "^2.3.6", "eventemitter2": "6.4.7", "execa": "4.1.0", "executable": "^4.1.1", "extract-zip": "2.0.1", "figures": "^3.2.0", "fs-extra": "^9.1.0", "getos": "^3.2.1", "is-installed-globally": "~0.4.0", "lazy-ass": "^1.6.0", "listr2": "^3.8.3", "lodash": "^4.17.21", "log-symbols": "^4.0.0", "minimist": "^1.2.8", "ospath": "^1.2.2", "pretty-bytes": "^5.6.0", "process": "^0.11.10", "proxy-from-env": "1.0.0", "request-progress": "^3.0.0", "semver": "^7.5.3", "supports-color": "^8.1.1", "tmp": "~0.2.3", "tree-kill": "1.2.2", "untildify": "^4.0.0", "yauzl": "^2.10.0" }, "bin": { "cypress": "bin/cypress" } }, "sha512-pPPj8Uu9NwjaaiXAEcjYZZmgsq6v9Zs1Nw6a+zRF+ANgYSNhH4S32SjFRsvMcuOHR/8dp4GBJhBPqIPSs+TxaA=="], "cypress-file-upload": ["cypress-file-upload@5.0.8", "", { "peerDependencies": { "cypress": ">3.0.0" } }, "sha512-+8VzNabRk3zG6x8f8BWArF/xA/W0VK4IZNx3MV0jFWrJS/qKn8eHfa5nU73P9fOQAgwHFJx7zjg4lwOnljMO8g=="], diff --git a/extensions/cornerstone-dicom-pmap/package.json b/extensions/cornerstone-dicom-pmap/package.json index 72c28d8ca..869cb9390 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.0.1", - "@cornerstonejs/core": "^3.0.1", + "@cornerstonejs/adapters": "^3.0.4", + "@cornerstonejs/core": "^3.0.4", "@kitware/vtk.js": "32.1.1", "react-color": "^2.19.3" } diff --git a/extensions/cornerstone-dicom-seg/package.json b/extensions/cornerstone-dicom-seg/package.json index dbf002b49..c2cc0c6d5 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.0.1", - "@cornerstonejs/core": "^3.0.1", + "@cornerstonejs/adapters": "^3.0.4", + "@cornerstonejs/core": "^3.0.4", "@kitware/vtk.js": "32.1.1", "react-color": "^2.19.3" } diff --git a/extensions/cornerstone-dicom-seg/src/commandsModule.ts b/extensions/cornerstone-dicom-seg/src/commandsModule.ts index 7e1b456db..e7d14050d 100644 --- a/extensions/cornerstone-dicom-seg/src/commandsModule.ts +++ b/extensions/cornerstone-dicom-seg/src/commandsModule.ts @@ -329,9 +329,19 @@ const commandsModule = ({ }, setThresholdRange: ({ value, - toolNames = ['ThresholdCircularBrush', 'ThresholdSphereBrush'], + toolNames = [ + 'ThresholdCircularBrush', + 'ThresholdSphereBrush', + 'ThresholdCircularBrushDynamic', + 'ThresholdSphereBrushDynamic', + ], }) => { - toolGroupService.getToolGroupIds()?.forEach(toolGroupId => { + const toolGroupIds = toolGroupService.getToolGroupIds(); + if (!toolGroupIds?.length) { + return; + } + + for (const toolGroupId of toolGroupIds) { const toolGroup = toolGroupService.getToolGroup(toolGroupId); toolNames?.forEach(toolName => { toolGroup.setToolConfiguration(toolName, { @@ -340,7 +350,7 @@ const commandsModule = ({ }, }); }); - }); + } }, }; diff --git a/extensions/cornerstone-dicom-sr/package.json b/extensions/cornerstone-dicom-sr/package.json index 7f390724c..9bbfb63e3 100644 --- a/extensions/cornerstone-dicom-sr/package.json +++ b/extensions/cornerstone-dicom-sr/package.json @@ -46,9 +46,9 @@ }, "dependencies": { "@babel/runtime": "^7.20.13", - "@cornerstonejs/adapters": "^3.0.1", - "@cornerstonejs/core": "^3.0.1", - "@cornerstonejs/tools": "^3.0.1", + "@cornerstonejs/adapters": "^3.0.4", + "@cornerstonejs/core": "^3.0.4", + "@cornerstonejs/tools": "^3.0.4", "classnames": "^2.3.2" } } diff --git a/extensions/cornerstone-dynamic-volume/package.json b/extensions/cornerstone-dynamic-volume/package.json index 1f4b3e803..236d81f91 100644 --- a/extensions/cornerstone-dynamic-volume/package.json +++ b/extensions/cornerstone-dynamic-volume/package.json @@ -42,8 +42,8 @@ }, "dependencies": { "@babel/runtime": "^7.20.13", - "@cornerstonejs/core": "^3.0.1", - "@cornerstonejs/tools": "^3.0.1", + "@cornerstonejs/core": "^3.0.4", + "@cornerstonejs/tools": "^3.0.4", "classnames": "^2.3.2" } } diff --git a/extensions/cornerstone-dynamic-volume/src/getPanelModule.tsx b/extensions/cornerstone-dynamic-volume/src/getPanelModule.tsx index c4662df7d..a213ac1c1 100644 --- a/extensions/cornerstone-dynamic-volume/src/getPanelModule.tsx +++ b/extensions/cornerstone-dynamic-volume/src/getPanelModule.tsx @@ -1,6 +1,6 @@ import React from 'react'; import { DynamicDataPanel } from './panels'; -import { Toolbox } from '@ohif/ui-next'; +import { Toolbox } from '@ohif/extension-default'; import { PanelSegmentation } from '@ohif/extension-cornerstone'; import DynamicExport from './panels/DynamicExport'; @@ -19,9 +19,6 @@ function getPanelModule({ commandsManager, extensionManager, servicesManager, co return ( <> diff --git a/extensions/cornerstone/package.json b/extensions/cornerstone/package.json index 49d75b878..aad3e4ea4 100644 --- a/extensions/cornerstone/package.json +++ b/extensions/cornerstone/package.json @@ -38,7 +38,7 @@ "@cornerstonejs/codec-libjpeg-turbo-8bit": "^1.2.2", "@cornerstonejs/codec-openjpeg": "^1.2.4", "@cornerstonejs/codec-openjph": "^2.4.5", - "@cornerstonejs/dicom-image-loader": "^3.0.1", + "@cornerstonejs/dicom-image-loader": "^3.0.4", "@ohif/core": "3.10.0-beta.116", "@ohif/ui": "3.10.0-beta.116", "dcmjs": "*", @@ -51,10 +51,10 @@ }, "dependencies": { "@babel/runtime": "^7.20.13", - "@cornerstonejs/adapters": "^3.0.1", - "@cornerstonejs/core": "^3.0.1", + "@cornerstonejs/adapters": "^3.0.4", + "@cornerstonejs/core": "^3.0.4", "@cornerstonejs/polymorphic-segmentation": "^3.0.1", - "@cornerstonejs/tools": "^3.0.1", + "@cornerstonejs/tools": "^3.0.4", "@itk-wasm/morphological-contour-interpolation": "1.1.0", "@kitware/vtk.js": "32.1.1", "html2canvas": "^1.4.1", diff --git a/extensions/cornerstone/src/commandsModule.ts b/extensions/cornerstone/src/commandsModule.ts index 24778509d..df6d9b51c 100644 --- a/extensions/cornerstone/src/commandsModule.ts +++ b/extensions/cornerstone/src/commandsModule.ts @@ -388,7 +388,12 @@ function commandsModule({ arrowTextCallback: ({ callback }) => { const labelConfig = customizationService.getCustomization('measurementLabels'); const renderContent = customizationService.getCustomization('ui.labellingComponent'); - callInputDialogAutoComplete(uiDialogService, callback, {}, labelConfig, renderContent); + + callInputDialogAutoComplete({ + uiDialogService, + labelConfig, + renderContent, + }); }, toggleCine: () => { const { viewports } = viewportGridService.getState(); diff --git a/extensions/cornerstone/src/components/WindowLevelActionMenu/getWindowLevelActionMenu.tsx b/extensions/cornerstone/src/components/WindowLevelActionMenu/getWindowLevelActionMenu.tsx index 9758f25df..f00e045ef 100644 --- a/extensions/cornerstone/src/components/WindowLevelActionMenu/getWindowLevelActionMenu.tsx +++ b/extensions/cornerstone/src/components/WindowLevelActionMenu/getWindowLevelActionMenu.tsx @@ -23,7 +23,6 @@ export function getWindowLevelActionMenu({ const WindowLevelActionMenu = customizationService.getCustomization( 'viewportActionMenu.windowLevelActionMenu' ); - console.debug('🚀 ~ WindowLevelActionMenu:', WindowLevelActionMenu); const displaySetPresets = displaySets .filter(displaySet => presets[displaySet.Modality]) .map(displaySet => { diff --git a/extensions/cornerstone/src/getPanelModule.tsx b/extensions/cornerstone/src/getPanelModule.tsx index 20c3a43e7..fb156c404 100644 --- a/extensions/cornerstone/src/getPanelModule.tsx +++ b/extensions/cornerstone/src/getPanelModule.tsx @@ -1,6 +1,6 @@ import React from 'react'; -import { Toolbox } from '@ohif/ui-next'; +import { Toolbox } from '@ohif/extension-default'; import PanelSegmentation from './panels/PanelSegmentation'; import ActiveViewportWindowLevel from './components/ActiveViewportWindowLevel'; import PanelMeasurement from './panels/PanelMeasurement'; @@ -36,14 +36,8 @@ const getPanelModule = ({ commandsManager, servicesManager, extensionManager }: return ( <> { - const { items } = button.props; - - const toolGroup = toolGroupService.getToolGroupForViewport(viewportId); - - if (!toolGroup) { - return { - primary: button.props.primary, - items, - }; - } - - const activeToolName = toolGroup.getActivePrimaryMouseButtonTool(); - - // check if the active toolName is part of the items then we need - // to move it to the primary button - const activeToolIndex = items.findIndex(item => { - const toolName = toolbarService.getToolNameForButton(item); - return toolName === activeToolName; - }); - - // if there is an active tool in the items dropdown bound to the primary mouse/touch - // we should show that no matter what - if (activeToolIndex > -1) { - return { - primary: items[activeToolIndex], - items, - }; - } - - if (!itemId) { - return { - primary: button.props.primary, - items, - }; - } - - // other wise we can move the clicked tool to the primary button - const clickedItemProps = items.find(item => item.id === itemId || item.itemId === itemId); - - return { - primary: clickedItemProps, - items, - }; - }, - }, { name: 'evaluate.action', evaluate: () => { diff --git a/extensions/cornerstone/src/hooks/useSegmentations.ts b/extensions/cornerstone/src/hooks/useSegmentations.ts index e32dae471..3c258654e 100644 --- a/extensions/cornerstone/src/hooks/useSegmentations.ts +++ b/extensions/cornerstone/src/hooks/useSegmentations.ts @@ -2,6 +2,7 @@ import { useState, useEffect } from 'react'; import debounce from 'lodash.debounce'; import { roundNumber } from '@ohif/core/src/utils'; import { SegmentationData } from '../services/SegmentationService/SegmentationService'; +import { useSystem } from '@ohif/core'; function mapSegmentationToDisplay(segmentation, customizationService) { const { label, segments } = segmentation; @@ -83,11 +84,12 @@ function mapSegmentationToDisplay(segmentation, customizationService) { * @param options.debounceTime - Debounce time in milliseconds for updates. * @returns An array of segmentation data. */ -export function useSegmentations({ - servicesManager, - subscribeToDataModified = false, - debounceTime = 0, -}: withAppTypes<{ debounceTime?: number }>): SegmentationData[] { +export function useSegmentations(options: { + subscribeToDataModified?: boolean; + debounceTime?: number; +}): SegmentationData[] { + const { subscribeToDataModified = false, debounceTime = 0 } = options || {}; + const { servicesManager } = useSystem(); const { segmentationService, customizationService } = servicesManager.services; const [segmentations, setSegmentations] = useState([]); diff --git a/extensions/default/src/Toolbar/ToolBoxWrapper.tsx b/extensions/default/src/Toolbar/ToolBoxWrapper.tsx index d40c9015a..7a292299c 100644 --- a/extensions/default/src/Toolbar/ToolBoxWrapper.tsx +++ b/extensions/default/src/Toolbar/ToolBoxWrapper.tsx @@ -1,17 +1,24 @@ import React from 'react'; import classNames from 'classnames'; import { ToolButton } from '@ohif/ui-next'; +import { useToolbar } from '@ohif/core/src/hooks/useToolbar'; /** * Wraps the ToolButtonList component to handle the OHIF toolbar button structure * @param props - Component props * @returns Component */ -export function ToolBoxButtonGroupWrapper({ groupId, items, onInteraction, ...props }) { - if (!items || !groupId) { +export function ToolBoxButtonGroupWrapper({ groupId, buttonSection, ...props }) { + const { onInteraction, toolbarButtons } = useToolbar({ + buttonSection, + }); + + if (!groupId) { return null; } + const items = toolbarButtons.map(button => button.componentProps); + return (
{items.map(item => ( @@ -20,16 +27,22 @@ export function ToolBoxButtonGroupWrapper({ groupId, items, onInteraction, ...pr key={item.id} size="small" className={props.disabled && 'text-primary'} - onInteraction={() => - onInteraction?.({ groupId, itemId: item.id, commands: item.commands }) - } + onInteraction={event => { + onInteraction?.({ + event, + groupId, + commands: item.commands, + itemId: item.id, + item, + }); + }} /> ))}
); } -export function ToolBoxButtonWrapper({ onInteraction, ...props }) { +export function ToolBoxButtonWrapper({ onInteraction, options, ...props }) { return (
onInteraction?.({ itemId: props.id, commands: props.commands })} + onInteraction={event => { + onInteraction?.({ + event, + itemId: props.id, + commands: props.commands, + options, + }); + }} />
); diff --git a/extensions/default/src/Toolbar/ToolButtonListWrapper.tsx b/extensions/default/src/Toolbar/ToolButtonListWrapper.tsx index d1477f727..fb995846f 100644 --- a/extensions/default/src/Toolbar/ToolButtonListWrapper.tsx +++ b/extensions/default/src/Toolbar/ToolButtonListWrapper.tsx @@ -7,23 +7,11 @@ import { ToolButtonListItem, ToolButtonListDivider, } from '@ohif/ui-next'; - -interface ButtonItem { - id: string; - icon?: string; - label?: string; - tooltip?: string; - isActive?: boolean; - disabledText?: string; - commands?: Record; - disabled?: boolean; - className?: string; -} +import { useToolbar } from '@ohif/core/src'; interface ToolButtonListWrapperProps { groupId: string; - primary: ButtonItem; - items: ButtonItem[]; + buttonSection: string; onInteraction?: (details: { groupId: string; itemId: string; @@ -39,10 +27,22 @@ interface ToolButtonListWrapperProps { */ export default function ToolButtonListWrapper({ groupId, - primary, - items, - onInteraction, + buttonSection, }: ToolButtonListWrapperProps) { + const { onInteraction, toolbarButtons } = useToolbar({ + buttonSection, + }); + + if (!toolbarButtons?.length) { + return null; + } + + const primary = + toolbarButtons.find(button => button.componentProps.isActive)?.componentProps || + toolbarButtons[0].componentProps; + + const items = toolbarButtons.map(button => button.componentProps); + return ( @@ -63,20 +63,22 @@ export default function ToolButtonListWrapper({
- {items.map(item => ( - - onInteraction?.({ groupId, itemId: item.id, commands: item.commands }) - } - > - {item.label || item.tooltip || item.id} - - ))} + {items.map(item => { + return ( + + onInteraction?.({ groupId, itemId: item.id, commands: item.commands }) + } + > + {item.label || item.tooltip || item.id} + + ); + })}
diff --git a/extensions/default/src/Toolbar/ToolbarButtonGroupWithServices.tsx b/extensions/default/src/Toolbar/ToolbarButtonGroupWithServices.tsx index 300270a14..4b0a79478 100644 --- a/extensions/default/src/Toolbar/ToolbarButtonGroupWithServices.tsx +++ b/extensions/default/src/Toolbar/ToolbarButtonGroupWithServices.tsx @@ -19,6 +19,7 @@ function ToolbarButtonGroupWithServices({ groupId, items, onInteraction, size }) groupId, itemId: item.id, commands: item.commands, + item, }); }} // Note: this is necessary since tooltip will add diff --git a/extensions/default/src/Toolbar/ToolbarSplitButtonWithServices.tsx b/extensions/default/src/Toolbar/ToolbarSplitButtonWithServices.tsx index ccd3870ea..392df4a27 100644 --- a/extensions/default/src/Toolbar/ToolbarSplitButtonWithServices.tsx +++ b/extensions/default/src/Toolbar/ToolbarSplitButtonWithServices.tsx @@ -23,7 +23,7 @@ function ToolbarSplitButtonWithServices({ onInteraction({ groupId, itemId: item.id, - commands: item.commands, + item, }); }, })), diff --git a/extensions/default/src/ViewerLayout/ResizablePanelsHook.tsx b/extensions/default/src/ViewerLayout/ResizablePanelsHook.tsx index 60dad54eb..463212e8d 100644 --- a/extensions/default/src/ViewerLayout/ResizablePanelsHook.tsx +++ b/extensions/default/src/ViewerLayout/ResizablePanelsHook.tsx @@ -16,6 +16,10 @@ import { panelGroupDefinition } from './constants/panels'; * @param width the max and min width to set on the element */ const setMinMaxWidth = (elem, width?) => { + if (!elem) { + return; + } + elem.style.minWidth = width === undefined ? '' : `${width}px`; elem.style.maxWidth = elem.style.minWidth; }; diff --git a/extensions/default/src/customizations/reportDialogCustomization.tsx b/extensions/default/src/customizations/reportDialogCustomization.tsx index df0df017b..9ebbd59f4 100644 --- a/extensions/default/src/customizations/reportDialogCustomization.tsx +++ b/extensions/default/src/customizations/reportDialogCustomization.tsx @@ -20,7 +20,9 @@ function ReportDialog({ dataSources, hide, onSave, onCancel }: ReportDialogProps dataSources?.[0]?.value ?? null ); - const handleSave = (reportName: string) => { + const [reportName, setReportName] = useState(''); + + const handleSave = () => { onSave({ reportName, dataSource: selectedDataSource, @@ -62,7 +64,11 @@ function ReportDialog({ dataSources, hide, onSave, onCancel }: ReportDialogProps )}
- + diff --git a/extensions/default/src/getToolbarModule.tsx b/extensions/default/src/getToolbarModule.tsx index 92ada7ef5..e0aaf6e41 100644 --- a/extensions/default/src/getToolbarModule.tsx +++ b/extensions/default/src/getToolbarModule.tsx @@ -60,27 +60,6 @@ export default function getToolbarModule({ commandsManager, servicesManager }: w name: 'ohif.progressDropdown', defaultComponent: ProgressDropdownWithService, }, - { - name: 'evaluate.group.promoteToPrimary', - evaluate: ({ viewportId, button, itemId }) => { - const { items } = button.props; - - if (!itemId) { - return { - primary: button.props.primary, - items, - }; - } - - // other wise we can move the clicked tool to the primary button - const clickedItemProps = items.find(item => item.id === itemId || item.itemId === itemId); - - return { - primary: clickedItemProps, - items, - }; - }, - }, { name: 'evaluate.cine', evaluate: () => { diff --git a/extensions/default/src/index.ts b/extensions/default/src/index.ts index 91f92eb55..f11d3d237 100644 --- a/extensions/default/src/index.ts +++ b/extensions/default/src/index.ts @@ -34,6 +34,7 @@ import promptLabelAnnotation from './utils/promptLabelAnnotation'; import usePatientInfo from './hooks/usePatientInfo'; import { PanelStudyBrowserHeader } from './Panels/StudyBrowser/PanelStudyBrowserHeader'; import * as utils from './utils'; +import { Toolbox } from './utils'; import MoreDropdownMenu from './Components/MoreDropdownMenu'; import requestDisplaySetCreationForStudy from './Panels/requestDisplaySetCreationForStudy'; const defaultExtension: Types.Extensions.Extension = { @@ -97,6 +98,7 @@ export { usePatientInfo, PanelStudyBrowserHeader, utils, + Toolbox, MoreDropdownMenu, requestDisplaySetCreationForStudy, callInputDialog, diff --git a/extensions/default/src/utils/Toolbox.tsx b/extensions/default/src/utils/Toolbox.tsx new file mode 100644 index 000000000..404c1ca7e --- /dev/null +++ b/extensions/default/src/utils/Toolbox.tsx @@ -0,0 +1,122 @@ +import React from 'react'; +import { PanelSection, ToolSettings } from '@ohif/ui-next'; +import { useSystem, useToolbar } from '@ohif/core'; +import classnames from 'classnames'; + +interface ButtonProps { + isActive?: boolean; + options?: unknown; +} + +/** + * A toolbox is a collection of buttons and commands that they invoke, used to provide + * custom control panels to users. This component is a generic UI component that + * interacts with services and commands in a generic fashion. While it might + * seem unconventional to import it from the UI and integrate it into the JSX, + * it belongs in the UI components as there isn't anything in this component that + * couldn't be used for a completely different type of app. It plays a crucial + * role in enhancing the app with a toolbox by providing a way to integrate + * and display various tools and their corresponding options + */ +export function Toolbox({ buttonSectionId, title }: { buttonSectionId: string; title: string }) { + const { servicesManager } = useSystem(); + const { toolbarService } = servicesManager.services; + + const { toolbarButtons: toolboxSections, onInteraction } = useToolbar({ + servicesManager, + buttonSection: buttonSectionId, + }); + + if (!toolboxSections.length) { + return null; + } + + // Ensure we have proper button sections at the top level. + if (!toolboxSections.every(section => section.componentProps.buttonSection)) { + throw new Error( + 'Toolbox accepts only button sections at the top level, not buttons. Create at least one button section.' + ); + } + + // Helper to check a list of buttons for an active tool. + const findActiveOptions = (buttons: any[]): unknown => { + for (const tool of buttons) { + if (tool.componentProps.isActive) { + return tool.componentProps.options; + } + if (tool.componentProps.buttonSection) { + const nestedButtons = toolbarService.getButtonPropsInButtonSection( + tool.componentProps.buttonSection + ) as ButtonProps[]; + const activeNested = nestedButtons.find(nested => nested.isActive); + if (activeNested) { + return activeNested.options; + } + } + } + return null; + }; + + // Look for active tool options across all sections. + const activeToolOptions = toolboxSections.reduce((activeOptions, section) => { + if (activeOptions) { + return activeOptions; + } + const sectionId = section.componentProps.buttonSection; + const buttons = toolbarService.getButtonSection(sectionId); + return findActiveOptions(buttons); + }, null); + + // Define the interaction handler once. + const handleInteraction = ({ itemId }: { itemId: string }) => { + onInteraction?.({ itemId }); + }; + + return ( + + + {title} + + + {toolboxSections.map(section => { + const sectionId = section.componentProps.buttonSection; + const buttons = toolbarService.getButtonSection(sectionId) as any[]; + + return ( +
+ {buttons.map(tool => { + if (!tool) { + return null; + } + const { id, Component, componentProps } = tool; + + return ( +
+ +
+ ); + })} +
+ ); + })} + {activeToolOptions && ( +
+ +
+ )} +
+
+ ); +} diff --git a/extensions/default/src/utils/callInputDialog.tsx b/extensions/default/src/utils/callInputDialog.tsx index 34b4bb177..10efb96a0 100644 --- a/extensions/default/src/utils/callInputDialog.tsx +++ b/extensions/default/src/utils/callInputDialog.tsx @@ -57,6 +57,10 @@ export async function callInputDialog({ submitOnEnter = true, }: { uiDialogService: AppTypes.UIDialogService; + defaultValue?: string; + title?: string; + placeholder?: string; + submitOnEnter?: boolean; }) { const dialogId = 'dialog-enter-annotation'; diff --git a/extensions/default/src/utils/index.ts b/extensions/default/src/utils/index.ts index 81118c67f..edf2485e0 100644 --- a/extensions/default/src/utils/index.ts +++ b/extensions/default/src/utils/index.ts @@ -1 +1,2 @@ export { addIcon } from './addIcon'; +export * from './Toolbox'; diff --git a/extensions/measurement-tracking/package.json b/extensions/measurement-tracking/package.json index 66e1be0a4..0022c432d 100644 --- a/extensions/measurement-tracking/package.json +++ b/extensions/measurement-tracking/package.json @@ -32,8 +32,8 @@ "start": "yarn run dev" }, "peerDependencies": { - "@cornerstonejs/core": "^3.0.1", - "@cornerstonejs/tools": "^3.0.1", + "@cornerstonejs/core": "^3.0.4", + "@cornerstonejs/tools": "^3.0.4", "@ohif/core": "3.10.0-beta.116", "@ohif/extension-cornerstone-dicom-sr": "3.10.0-beta.116", "@ohif/extension-default": "3.10.0-beta.116", diff --git a/extensions/tmtv/src/Panels/RectangleROIOptions.tsx b/extensions/tmtv/src/Panels/RectangleROIOptions.tsx index 19101ba06..d6ebf7490 100644 --- a/extensions/tmtv/src/Panels/RectangleROIOptions.tsx +++ b/extensions/tmtv/src/Panels/RectangleROIOptions.tsx @@ -1,9 +1,11 @@ -import React, { useState, useCallback, useReducer, useEffect } from 'react'; +import React, { useCallback, useReducer } from 'react'; import { Button } from '@ohif/ui'; import ROIThresholdConfiguration, { ROI_STAT, } from './PanelROIThresholdSegmentation/ROIThresholdConfiguration'; import * as cs3dTools from '@cornerstonejs/tools'; +import { useSystem } from '@ohif/core'; +import { useSegmentations } from '@ohif/extension-cornerstone'; const LOWER_CT_THRESHOLD_DEFAULT = -1024; const UPPER_CT_THRESHOLD_DEFAULT = 1024; @@ -40,9 +42,10 @@ function reducer(state, action) { } } -function RectangleROIOptions({ servicesManager, commandsManager }: withAppTypes) { - const { segmentationService } = servicesManager.services; - const [selectedSegmentationId, setSelectedSegmentationId] = useState(null); +function RectangleROIOptions() { + const { commandsManager } = useSystem(); + const segmentations = useSegmentations(); + const activeSegmentation = segmentations[0]; const runCommand = useCallback( (commandName, commandOptions = {}) => { @@ -61,58 +64,20 @@ function RectangleROIOptions({ servicesManager, commandsManager }: withAppTypes) }); const handleROIThresholding = useCallback(() => { - const segmentationId = selectedSegmentationId; + if (!activeSegmentation) { + return; + } + + const segmentationId = activeSegmentation.segmentationId; const activeSegmentIndex = cs3dTools.segmentation.segmentIndex.getActiveSegmentIndex(segmentationId); - // run the threshold based on the active segment index - // Todo: later find a way to associate each rectangle with a segment (e.g., maybe with color?) runCommand('thresholdSegmentationByRectangleROITool', { segmentationId, config, segmentIndex: activeSegmentIndex, }); - }, [selectedSegmentationId, config]); - - useEffect(() => { - const segmentations = segmentationService.getSegmentationRepresentations(); - - if (!segmentations.length) { - return; - } - - const isActive = segmentations.find(seg => seg.isActive); - setSelectedSegmentationId(isActive.id); - }, []); - - /** - * Update UI based on segmentation changes (added, removed, updated) - */ - useEffect(() => { - // ~~ Subscription - const updated = segmentationService.EVENTS.SEGMENTATION_MODIFIED; - const subscriptions = []; - - [updated].forEach(evt => { - const { unsubscribe } = segmentationService.subscribe(evt, () => { - const segmentations = segmentationService.getSegmentationRepresentations(); - - if (!segmentations.length) { - return; - } - - const isActive = segmentations.find(seg => seg.isActive); - setSelectedSegmentationId(isActive.id); - }); - subscriptions.push(unsubscribe); - }); - - return () => { - subscriptions.forEach(unsub => { - unsub(); - }); - }; - }, []); + }, [activeSegmentation, config]); return (
@@ -121,7 +86,7 @@ function RectangleROIOptions({ servicesManager, commandsManager }: withAppTypes) dispatch={dispatch} runCommand={runCommand} /> - {selectedSegmentationId !== null && ( + {activeSegmentation && (
diff --git a/platform/ui-next/src/components/OHIFToolbox/index.ts b/platform/ui-next/src/components/OHIFToolbox/index.ts index e5c0d5de7..8b54506bb 100644 --- a/platform/ui-next/src/components/OHIFToolbox/index.ts +++ b/platform/ui-next/src/components/OHIFToolbox/index.ts @@ -1,3 +1 @@ -import { ToolboxUI } from './ToolboxUI'; -import Toolbox from './Toolbox'; -export { ToolboxUI, Toolbox }; +export * from './ToolboxUI'; diff --git a/platform/ui-next/src/components/StudyItem/StudyItem.tsx b/platform/ui-next/src/components/StudyItem/StudyItem.tsx index 20c748be3..7b3bb9167 100644 --- a/platform/ui-next/src/components/StudyItem/StudyItem.tsx +++ b/platform/ui-next/src/components/StudyItem/StudyItem.tsx @@ -41,7 +41,10 @@ const StudyItem = ({
{date} - +
{date}
@@ -49,7 +52,10 @@ const StudyItem = ({
{description} - +
{description}
diff --git a/platform/ui-next/src/components/ToolButton/ToolButton.tsx b/platform/ui-next/src/components/ToolButton/ToolButton.tsx index 7d530d52f..e7002701f 100644 --- a/platform/ui-next/src/components/ToolButton/ToolButton.tsx +++ b/platform/ui-next/src/components/ToolButton/ToolButton.tsx @@ -50,7 +50,7 @@ function ToolButton(props: ToolButtonProps) { className, } = props; - const { buttonSizeClass, iconSizeClass } = sizeClasses[size]; + const { buttonSizeClass, iconSizeClass } = sizeClasses[size] || sizeClasses.default; const buttonClasses = cn( baseClasses, diff --git a/platform/ui-next/src/components/index.ts b/platform/ui-next/src/components/index.ts index 78ef6800d..be9145409 100644 --- a/platform/ui-next/src/components/index.ts +++ b/platform/ui-next/src/components/index.ts @@ -52,7 +52,7 @@ import { ThumbnailList } from './ThumbnailList'; import { PanelSection } from './PanelSection'; import { DisplaySetMessageListTooltip } from './DisplaySetMessageListTooltip'; import { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider } from './Tooltip'; -import { ToolboxUI, Toolbox } from './OHIFToolbox'; +import { ToolboxUI } from './OHIFToolbox'; import Numeric from './Numeric'; import { InputDialog, PresetDialog } from './OHIFDialogs'; import { AboutModal, ImageModal, UserPreferencesModal } from './OHIFModals'; @@ -105,6 +105,7 @@ import { ToolButtonListItem, ToolButtonListDivider, } from './ToolButton'; +import { ToolSettings } from './OHIFToolSettings'; export { Numeric, @@ -173,7 +174,6 @@ export { PanelSection, DisplaySetMessageListTooltip, ToolboxUI, - Toolbox, DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, @@ -236,4 +236,5 @@ export { ImageModal, UserPreferencesModal, FooterAction, + ToolSettings, }; diff --git a/platform/ui-next/src/contextProviders/ToolboxContext.tsx b/platform/ui-next/src/contextProviders/ToolboxContext.tsx deleted file mode 100644 index 23c87f80f..000000000 --- a/platform/ui-next/src/contextProviders/ToolboxContext.tsx +++ /dev/null @@ -1,109 +0,0 @@ -import React, { createContext, useContext, useReducer } from 'react'; - -export const initialState = {}; - -export const toolboxReducer = (state, action) => { - const { toolbarSectionId } = action.payload; - - if (!state[toolbarSectionId]) { - state[toolbarSectionId] = { activeTool: null, toolOptions: {}, selectedEvent: false }; - } - - switch (action.type) { - case 'SET_ACTIVE_TOOL': - return { - ...state, - [toolbarSectionId]: { - ...state[toolbarSectionId], - activeTool: action.payload.activeTool, - selectedEvent: true, - }, - }; - case 'UPDATE_TOOL_OPTION': - const { toolName, optionName, value } = action.payload; - return { - ...state, - [toolbarSectionId]: { - ...state[toolbarSectionId], - selectedEvent: false, - toolOptions: { - ...state[toolbarSectionId].toolOptions, - [toolName]: state[toolbarSectionId].toolOptions[toolName].map(option => - option.id === optionName ? { ...option, value } : option - ), - }, - }, - }; - case 'INITIALIZE_TOOL_OPTIONS': - // Initialize tool options for each toolbarSectionId - return { - ...state, - selectedEvent: false, - [action.toolbarSectionId]: { - ...state[action.toolbarSectionId], - toolOptions: action.payload, - }, - }; - default: - return state; - } -}; - -const ToolboxContext = createContext(); - -export const ToolboxProvider = ({ children }) => { - const [state, dispatch] = useReducer(toolboxReducer, initialState); - - const handleToolSelect = (toolbarSectionId, toolName) => { - dispatch({ - type: 'SET_ACTIVE_TOOL', - payload: { toolbarSectionId, activeTool: toolName }, - }); - }; - - const handleToolOptionChange = (toolbarSectionId, toolName, optionName, newValue) => { - dispatch({ - type: 'UPDATE_TOOL_OPTION', - payload: { toolbarSectionId, toolName, optionName, value: newValue }, - }); - }; - - const initializeToolOptions = (toolbarSectionId, toolOptions) => { - dispatch({ - type: 'INITIALIZE_TOOL_OPTIONS', - toolbarSectionId, - payload: toolOptions, - }); - }; - - const api = { handleToolSelect, handleToolOptionChange, initializeToolOptions }; - - const value = { state, api }; - - return {children}; -}; - -/** - * Custom hook for accessing toolbox state and actions for a specific toolbar section. - * You can use this hook to access the state and actions for a specific toolbar section ( - * defined by the toolbarSectionId) in your custom toolbar components. This hook - * helps to manage the state and actions for the tools and their options in the toolbar. - */ -export const useToolbox = toolbarSectionId => { - const context = useContext(ToolboxContext); - if (context === undefined) { - throw new Error('useToolbox must be used within a ToolboxProvider'); - } - const { state, api } = context; - - return { - state: state[toolbarSectionId] || { activeTool: null, toolOptions: {} }, - api: { - handleToolSelect: toolName => api.handleToolSelect(toolbarSectionId, toolName), - handleToolOptionChange: (toolName, optionName, value) => - api.handleToolOptionChange(toolbarSectionId, toolName, optionName, value), - initializeToolOptions: toolOptions => - api.initializeToolOptions(toolbarSectionId, toolOptions), - }, - }; -}; diff --git a/platform/ui-next/src/contextProviders/index.ts b/platform/ui-next/src/contextProviders/index.ts index 91181d26b..61140c085 100644 --- a/platform/ui-next/src/contextProviders/index.ts +++ b/platform/ui-next/src/contextProviders/index.ts @@ -1,13 +1,11 @@ import NotificationProvider, { useNotification } from './NotificationProvider'; import { ViewportGridContext, ViewportGridProvider, useViewportGrid } from './ViewportGridProvider'; -import { ToolboxProvider, useToolbox } from './ToolboxContext'; import { ModalProvider, useModal } from './ModalProvider'; import { DialogProvider, useDialog } from './DialogProvider'; import ManagedDialog from './ManagedDialog'; export { useNotification, NotificationProvider }; export { ViewportGridContext, ViewportGridProvider, useViewportGrid }; -export { ToolboxProvider, useToolbox }; export { ModalProvider, useModal }; export { DialogProvider, useDialog }; export { ManagedDialog }; diff --git a/platform/ui-next/src/index.ts b/platform/ui-next/src/index.ts index e492e5cbd..f4869cfaa 100644 --- a/platform/ui-next/src/index.ts +++ b/platform/ui-next/src/index.ts @@ -33,6 +33,7 @@ import { PanelSection, DisplaySetMessageListTooltip, ToolboxUI, + ToolSettings, DoubleSlider, Label, Slider, @@ -98,7 +99,6 @@ import { ToolButtonListDropDown, ToolButtonListItem, ToolButtonListDivider, - Toolbox, Numeric, InputDialog, PresetDialog, @@ -113,8 +113,6 @@ import { DataRow } from './components/DataRow'; import { useNotification, NotificationProvider, - useToolbox, - ToolboxProvider, useModal, ModalProvider, DialogProvider, @@ -232,9 +230,6 @@ export { ToolButtonListDropDown, ToolButtonListItem, ToolButtonListDivider, - ToolboxProvider, - Toolbox, - useToolbox, utils, Numeric, AboutModal, @@ -249,4 +244,5 @@ export { DialogProvider, useDialog, ManagedDialog, + ToolSettings, }; diff --git a/tests/Reset.spec.ts b/tests/Reset.spec.ts index 0c6b6ae63..23360def7 100644 --- a/tests/Reset.spec.ts +++ b/tests/Reset.spec.ts @@ -13,6 +13,6 @@ test('should reset the image to its original state', async ({ page }) => { await page.getByTestId('MoreTools-split-button-secondary').click(); await page.getByTestId('invert').click(); await page.getByTestId('MoreTools-split-button-secondary').click(); - await page.getByTestId('Reset').click(); + await page.getByText('Reset View').click(); await checkForScreenshot(page, page, screenShotPaths.reset.resetDisplayedCorrectly); }); diff --git a/yarn.lock b/yarn.lock index 3de185ea2..f3d0bebe3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1393,10 +1393,10 @@ resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9" integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== -"@cornerstonejs/adapters@^3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@cornerstonejs/adapters/-/adapters-3.0.1.tgz#596e302d7155ee64b7c20bcfedc57ce6ca10d5fb" - integrity sha512-Ym6s4cTpMkojap5QZ8MXZ8hDbs2TMMN/ypqU7wKMwAY2LGoltoeGw0Z/7LL+iostbaSw3fVs+TZzJSKhKw8Bug== +"@cornerstonejs/adapters@^3.0.4": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@cornerstonejs/adapters/-/adapters-3.0.4.tgz#3aea5f65e95fbb067885eb51ebcae2cacd673465" + integrity sha512-TJtW0biDf0wgi+XxQFqvKXT/Cf8ueyUruohH9n/RJsWiyE8z1/LOBxOqCZNkToGGs1EbO51T/PMPIUWordW43w== dependencies: "@babel/runtime-corejs2" "^7.17.8" buffer "^6.0.3" @@ -1429,19 +1429,19 @@ resolved "https://registry.yarnpkg.com/@cornerstonejs/codec-openjph/-/codec-openjph-2.4.5.tgz#8690b61a86fa53ef38a70eee9d665a79229517c0" integrity sha512-MZCUy8VG0VG5Nl1l58+g+kH3LujAzLYTfJqkwpWI2gjSrGXnP6lgwyy4GmPRZWVoS40/B1LDNALK905cNWm+sg== -"@cornerstonejs/core@^3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@cornerstonejs/core/-/core-3.0.1.tgz#8a938013c148d752d2c4f4eba7bd63048a6c814a" - integrity sha512-K+cOoN/TzJIPRRoaWWNkhJ+2CdkBBX8BA64DG0aBVOthlwJPRqK2YQE6PTTVRx18mjMA4to/m3de0emFNKrTzQ== +"@cornerstonejs/core@^3.0.4": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@cornerstonejs/core/-/core-3.0.4.tgz#a75e0e86cc3ac4cd19355c30f8f531ebe279ae36" + integrity sha512-6rMiqhBjyz3wsalPOAFjThfPUJnWVOs7Xqe3xLFvqd1qIFW1q42bqlQ7ak2DRMUMtC1nLURk6YIMhkWxK+t+7A== dependencies: "@kitware/vtk.js" "32.9.0" comlink "^4.4.1" gl-matrix "^3.4.3" -"@cornerstonejs/dicom-image-loader@^3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@cornerstonejs/dicom-image-loader/-/dicom-image-loader-3.0.1.tgz#e18f716620ab176d88c25b9efd25fc0983bce180" - integrity sha512-t4bI6rVOt4J8YOHRR9Mh9ClInajc98qqI6fwsByiXmtc2Y4INrZ1uaRspFnOJBosbr+EwsJBV7iT2yt6Jk6CjA== +"@cornerstonejs/dicom-image-loader@^3.0.4": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@cornerstonejs/dicom-image-loader/-/dicom-image-loader-3.0.4.tgz#0c553e1b01fc90d956d216d72686f6dcda9400f7" + integrity sha512-w0NoutE7+/C2FeT1YHo0cnMJpZ17ARH0qwyGwWockFwuJkUVjRcU5ZW1sT0ABNOPUHqZse/K/YmH2IX+ppaScQ== dependencies: "@cornerstonejs/codec-charls" "^1.2.3" "@cornerstonejs/codec-libjpeg-turbo-8bit" "^1.2.2" @@ -1459,10 +1459,10 @@ dependencies: "@icr/polyseg-wasm" "0.4.0" -"@cornerstonejs/tools@^3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@cornerstonejs/tools/-/tools-3.0.1.tgz#4d707992283235d79532f35e60e8c763b174ccef" - integrity sha512-fRjoXJ46mdpYc5JZ/FUn0g1vCK4LohnNjgZl+O72HK2reMdc5/dQeCueJCT+tBMay04sJMUHm0tAke2DN10FBQ== +"@cornerstonejs/tools@^3.0.4": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@cornerstonejs/tools/-/tools-3.0.4.tgz#413031f55dd7aca30168bfd13fe52911ba81f795" + integrity sha512-gkenXhOS6lYYmQhKDwayojeObTU/KiG9k+JEC/hoOBhRdoFZljyXfQtnljKFHL+G9rkdbNKxXq/a3+C9Bn7EVg== dependencies: "@types/offscreencanvas" "2019.7.3" comlink "^4.4.1" @@ -1574,10 +1574,10 @@ resolved "https://registry.yarnpkg.com/@csstools/selector-specificity/-/selector-specificity-2.2.0.tgz#2cbcf822bf3764c9658c4d2e568bd0c0cb748016" integrity sha512-+OJ9konv95ClSTOJCmMZqpd5+YGsB2S+x6w3E1oaM8UuR5j8nTNHYSz8c9BEPGDOCMQYIEEGlVPj/VY64iTbGw== -"@cypress/request@^3.0.6": - version "3.0.7" - resolved "https://registry.yarnpkg.com/@cypress/request/-/request-3.0.7.tgz#6a74a4da98d9e5ae9121d6e2d9c14780c9b5cf1a" - integrity sha512-LzxlLEMbBOPYB85uXrDqvD4MgcenjRBLIns3zyhx7vTPj/0u2eQhzXvPiGcaJrV38Q9dbkExWp6cOHPJ+EtFYg== +"@cypress/request@^3.0.7": + version "3.0.8" + resolved "https://registry.yarnpkg.com/@cypress/request/-/request-3.0.8.tgz#992f1f42ba03ebb14fa5d97290abe9d015ed0815" + integrity sha512-h0NFgh1mJmm1nr4jCwkGHwKneVYKghUyWe6TMNrk0B9zsjAJxpg8C4/+BAcmLgCPa1vj1V8rNUaILl+zYRUWBQ== dependencies: aws-sign2 "~0.7.0" aws4 "^1.8.0" @@ -1592,7 +1592,7 @@ json-stringify-safe "~5.0.1" mime-types "~2.1.19" performance-now "^2.1.0" - qs "6.13.1" + qs "6.14.0" safe-buffer "^5.1.2" tough-cookie "^5.0.0" tunnel-agent "^0.6.0" @@ -7322,6 +7322,14 @@ cachedir@^2.3.0: resolved "https://registry.yarnpkg.com/cachedir/-/cachedir-2.4.0.tgz#7fef9cf7367233d7c88068fe6e34ed0d355a610d" integrity sha512-9EtFOZR8g22CL7BWjJ9BUx1+A/djkofnyW3aOXZORNW2kxoUpx2h+uN2cOqwPmFhnpVmxg+KW2OjOSgChTEvsQ== +call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6" + integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ== + dependencies: + es-errors "^1.3.0" + function-bind "^1.1.2" + call-bind@^1.0.0, call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6, call-bind@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" @@ -7333,6 +7341,14 @@ call-bind@^1.0.0, call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6, call-bin get-intrinsic "^1.2.4" set-function-length "^1.2.1" +call-bound@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.4.tgz#238de935d2a2a692928c538c7ccfa91067fd062a" + integrity sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg== + dependencies: + call-bind-apply-helpers "^1.0.2" + get-intrinsic "^1.3.0" + caller-callsite@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" @@ -7571,7 +7587,7 @@ ci-info@^3.2.0, ci-info@^3.6.1: resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== -ci-info@^4.0.0: +ci-info@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-4.1.0.tgz#92319d2fa29d2620180ea5afed31f589bc98cf83" integrity sha512-HutrvTNsF48wnxkzERIXOe5/mlcfFcbfCmwcg6CJnizbSue78AbDt+1cgl26zwn61WFxhcPykPfZrbqjGmBb4A== @@ -8513,12 +8529,12 @@ cypress-file-upload@^5.0.8: resolved "https://registry.yarnpkg.com/cypress-file-upload/-/cypress-file-upload-5.0.8.tgz#d8824cbeaab798e44be8009769f9a6c9daa1b4a1" integrity sha512-+8VzNabRk3zG6x8f8BWArF/xA/W0VK4IZNx3MV0jFWrJS/qKn8eHfa5nU73P9fOQAgwHFJx7zjg4lwOnljMO8g== -cypress@^14.0.0: - version "14.0.0" - resolved "https://registry.yarnpkg.com/cypress/-/cypress-14.0.0.tgz#a71cb0a243a0bfeb97b6973ab9c5291ca5288e93" - integrity sha512-kEGqQr23so5IpKeg/dp6GVi7RlHx1NmW66o2a2Q4wk9gRaAblLZQSiZJuDI8UMC4LlG5OJ7Q6joAiqTrfRNbTw== +cypress@^14.1.0: + version "14.1.0" + resolved "https://registry.yarnpkg.com/cypress/-/cypress-14.1.0.tgz#b2dbe7bbc529dc0c93ffd4e0e9fa59763afba0b8" + integrity sha512-pPPj8Uu9NwjaaiXAEcjYZZmgsq6v9Zs1Nw6a+zRF+ANgYSNhH4S32SjFRsvMcuOHR/8dp4GBJhBPqIPSs+TxaA== dependencies: - "@cypress/request" "^3.0.6" + "@cypress/request" "^3.0.7" "@cypress/xvfb" "^1.2.4" "@types/sinonjs__fake-timers" "8.1.1" "@types/sizzle" "^2.3.2" @@ -8529,7 +8545,7 @@ cypress@^14.0.0: cachedir "^2.3.0" chalk "^4.1.0" check-more-types "^2.24.0" - ci-info "^4.0.0" + ci-info "^4.1.0" cli-cursor "^3.1.0" cli-table3 "~0.6.1" commander "^6.2.1" @@ -9507,6 +9523,15 @@ dotenv@~16.3.1: resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.3.2.tgz#3cb611ce5a63002dbabf7c281bc331f69d28f03f" integrity sha512-HTlk5nmhkm8F6JcdXvHIzaorzCoziNQT9mGxLPVXW8wJF1TiGSL60ZGB4gHWabHOaMmWmhvk2/lPHfnBiT78AQ== +dunder-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a" + integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== + dependencies: + call-bind-apply-helpers "^1.0.1" + es-errors "^1.3.0" + gopd "^1.2.0" + duplexer@^0.1.1, duplexer@^0.1.2, duplexer@~0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" @@ -9762,6 +9787,11 @@ es-define-property@^1.0.0: dependencies: get-intrinsic "^1.2.4" +es-define-property@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa" + integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== + es-errors@^1.2.1, es-errors@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" @@ -9814,6 +9844,13 @@ es-object-atoms@^1.0.0: dependencies: es-errors "^1.3.0" +es-object-atoms@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz#1c4f2c4837327597ce69d2ca190a7fdd172338c1" + integrity sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA== + dependencies: + es-errors "^1.3.0" + es-set-tostringtag@^2.0.1, es-set-tostringtag@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz#8bb60f0a440c2e4281962428438d58545af39777" @@ -11103,6 +11140,22 @@ get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2, get-intrinsic@ has-symbols "^1.0.3" hasown "^2.0.0" +get-intrinsic@^1.2.5, get-intrinsic@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01" + integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== + dependencies: + call-bind-apply-helpers "^1.0.2" + es-define-property "^1.0.1" + es-errors "^1.3.0" + es-object-atoms "^1.1.1" + function-bind "^1.1.2" + get-proto "^1.0.1" + gopd "^1.2.0" + has-symbols "^1.1.0" + hasown "^2.0.2" + math-intrinsics "^1.1.0" + get-nonce@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/get-nonce/-/get-nonce-1.0.1.tgz#fdf3f0278073820d2ce9426c18f07481b1e0cdf3" @@ -11138,6 +11191,14 @@ get-port@5.1.1, get-port@^5.1.1: resolved "https://registry.yarnpkg.com/get-port/-/get-port-5.1.1.tgz#0469ed07563479de6efb986baf053dcd7d4e3193" integrity sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ== +get-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1" + integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g== + dependencies: + dunder-proto "^1.0.1" + es-object-atoms "^1.0.0" + get-stdin@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-7.0.0.tgz#8d5de98f15171a125c5e516643c7a6d0ea8a96f6" @@ -11451,6 +11512,11 @@ gopd@^1.0.1: dependencies: get-intrinsic "^1.1.3" +gopd@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" + integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== + got@^12.1.0: version "12.6.1" resolved "https://registry.yarnpkg.com/got/-/got-12.6.1.tgz#8869560d1383353204b5a9435f782df9c091f549" @@ -11581,6 +11647,11 @@ has-symbols@^1.0.2, has-symbols@^1.0.3: resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== +has-symbols@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338" + integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== + has-tostringtag@^1.0.0, has-tostringtag@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" @@ -14289,6 +14360,11 @@ material-colors@^1.2.1: resolved "https://registry.yarnpkg.com/material-colors/-/material-colors-1.2.6.tgz#6d1958871126992ceecc72f4bcc4d8f010865f46" integrity sha512-6qE4B9deFBIa9YSpOc9O0Sgc43zTeVYbgDT5veRKSlB2+ZuHNoVVxA1L/ckMUayV9Ay9y7Z/SZCLcGteW9i7bg== +math-intrinsics@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9" + integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== + mathjs@^11.2: version "11.12.0" resolved "https://registry.yarnpkg.com/mathjs/-/mathjs-11.12.0.tgz#e933e5941930d44763ddfc5bfb08b90059449b2c" @@ -15651,6 +15727,11 @@ object-inspect@^1.13.1: resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.2.tgz#dea0088467fb991e67af4058147a24824a3043ff" integrity sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g== +object-inspect@^1.13.3: + version "1.13.4" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.4.tgz#8375265e21bc20d0fa582c22e1b13485d6e00213" + integrity sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew== + object-is@^1.1.2, object-is@^1.1.5: version "1.1.6" resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.6.tgz#1a6a53aed2dd8f7e6775ff870bea58545956ab07" @@ -17353,12 +17434,12 @@ qs@6.13.0, qs@^6.10.0, qs@^6.12.3: dependencies: side-channel "^1.0.6" -qs@6.13.1: - version "6.13.1" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.13.1.tgz#3ce5fc72bd3a8171b85c99b93c65dd20b7d1b16e" - integrity sha512-EJPeIn0CYrGu+hli1xilKAPXODtJ12T0sP63Ijx2/khC2JtuaN3JyNIpvmnkmaEtha9ocbG4A4cMcr+TvqvwQg== +qs@6.14.0: + version "6.14.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.14.0.tgz#c63fa40680d2c5c941412a0e899c89af60c0a930" + integrity sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w== dependencies: - side-channel "^1.0.6" + side-channel "^1.1.0" query-string@^4.1.0: version "4.3.4" @@ -18790,6 +18871,35 @@ shx@^0.3.3: minimist "^1.2.3" shelljs "^0.8.5" +side-channel-list@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/side-channel-list/-/side-channel-list-1.0.0.tgz#10cb5984263115d3b7a0e336591e290a830af8ad" + integrity sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA== + dependencies: + es-errors "^1.3.0" + object-inspect "^1.13.3" + +side-channel-map@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/side-channel-map/-/side-channel-map-1.0.1.tgz#d6bb6b37902c6fef5174e5f533fab4c732a26f42" + integrity sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + get-intrinsic "^1.2.5" + object-inspect "^1.13.3" + +side-channel-weakmap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz#11dda19d5368e40ce9ec2bdc1fb0ecbc0790ecea" + integrity sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + get-intrinsic "^1.2.5" + object-inspect "^1.13.3" + side-channel-map "^1.0.1" + side-channel@^1.0.4, side-channel@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2" @@ -18800,6 +18910,17 @@ side-channel@^1.0.4, side-channel@^1.0.6: get-intrinsic "^1.2.4" object-inspect "^1.13.1" +side-channel@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.1.0.tgz#c3fcff9c4da932784873335ec9765fa94ff66bc9" + integrity sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw== + dependencies: + es-errors "^1.3.0" + object-inspect "^1.13.3" + side-channel-list "^1.0.0" + side-channel-map "^1.0.1" + side-channel-weakmap "^1.0.2" + signal-exit@3.0.7, signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: version "3.0.7" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9"