Compare commits

...

13 Commits

Author SHA1 Message Date
ohif-bot
29eca3bd20 chore(version): Update package versions [skip ci] 2025-07-23 15:55:11 +00:00
ohif-bot
38bc497545 chore(version): version.json [skip ci] 2025-07-23 15:55:05 +00:00
Joe Boccanfuso
d383be7c72
fix(security): Removed stylus package due to potential security vulnerability and we don't use it. (#5251) 2025-07-23 11:49:30 -04:00
Joe Boccanfuso
d206cf9ba5
fix(security): Pin eslint-config-prettier and eslint-plugin-prettier versions. (#5246) 2025-07-22 12:02:57 -04:00
ohif-bot
1ad5acae9d chore(version): Update package versions [skip ci] 2025-06-09 15:06:36 +00:00
ohif-bot
c19e32e0d1 chore(version): version.json [skip ci] 2025-06-09 15:06:30 +00:00
Alireza
36813e0c2f
chore: recovery 2 (#5014)
Co-authored-by: Dan Rukas <dan.rukas@gmail.com>
Co-authored-by: Tang Cheng <45505657+tctco@users.noreply.github.com>
2025-06-09 10:58:06 -04:00
ohif-bot
9a4a40468f chore(version): Update package versions [skip ci] 2025-04-11 20:02:21 +00:00
ohif-bot
466a867e6a chore(version): version.json [skip ci] 2025-04-11 20:02:14 +00:00
Alireza
aaba8bf1b0
fix: make datasource selection work and UI fixes (#4952)
Co-authored-by: Pedro Köhler <pedrokohlerbh@gmail.com>
Co-authored-by: Dan Rukas <dan.rukas@gmail.com>
2025-04-11 15:57:29 -04:00
ohif-bot
0b6e9cba76 chore(version): Update package versions [skip ci] 2025-04-10 02:48:32 +00:00
ohif-bot
963664cb63 chore(version): version.json [skip ci] 2025-04-10 02:48:27 +00:00
sedghi
12fe1e107d
chore: release 3p10 2025-04-09 22:41:26 -04:00
131 changed files with 2627 additions and 691 deletions

View File

@ -3,6 +3,45 @@
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [3.10.4](https://github.com/OHIF/Viewers/compare/v3.10.2...v3.10.4) (2025-07-23)
### Bug Fixes
* **security:** Pin eslint-config-prettier and eslint-plugin-prettier versions. ([#5246](https://github.com/OHIF/Viewers/issues/5246)) ([d206cf9](https://github.com/OHIF/Viewers/commit/d206cf9ba5e97fe047ca72fceedf8bb8bb869afe))
* **security:** Removed stylus package due to potential security vulnerability and we don't use it. ([#5251](https://github.com/OHIF/Viewers/issues/5251)) ([d383be7](https://github.com/OHIF/Viewers/commit/d383be7c720ec61f5bb1262ebe70893873718951))
## [3.10.2](https://github.com/OHIF/Viewers/compare/v3.10.1...v3.10.2) (2025-06-09)
**Note:** Version bump only for package ohif-monorepo-root
## [3.10.1](https://github.com/OHIF/Viewers/compare/v3.10.0...v3.10.1) (2025-04-11)
### Bug Fixes
* make datasource selection work and UI fixes ([#4952](https://github.com/OHIF/Viewers/issues/4952)) ([aaba8bf](https://github.com/OHIF/Viewers/commit/aaba8bf1b04be6c00a88f1f5f29cb24133b0c39e))
# [3.10.0](https://github.com/OHIF/Viewers/compare/v3.10.0-beta.159...v3.10.0) (2025-04-10)
**Note:** Version bump only for package ohif-monorepo-root
# [3.10.0-beta.159](https://github.com/OHIF/Viewers/compare/v3.10.0-beta.158...v3.10.0-beta.159) (2025-04-09) # [3.10.0-beta.159](https://github.com/OHIF/Viewers/compare/v3.10.0-beta.158...v3.10.0-beta.159) (2025-04-09)

View File

@ -3,6 +3,42 @@
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [3.10.4](https://github.com/OHIF/Viewers/compare/v3.10.2...v3.10.4) (2025-07-23)
### Bug Fixes
* **security:** Pin eslint-config-prettier and eslint-plugin-prettier versions. ([#5246](https://github.com/OHIF/Viewers/issues/5246)) ([d206cf9](https://github.com/OHIF/Viewers/commit/d206cf9ba5e97fe047ca72fceedf8bb8bb869afe))
* **security:** Removed stylus package due to potential security vulnerability and we don't use it. ([#5251](https://github.com/OHIF/Viewers/issues/5251)) ([d383be7](https://github.com/OHIF/Viewers/commit/d383be7c720ec61f5bb1262ebe70893873718951))
## [3.10.2](https://github.com/OHIF/Viewers/compare/v3.10.1...v3.10.2) (2025-06-09)
**Note:** Version bump only for package @externals/devDependencies
## [3.10.1](https://github.com/OHIF/Viewers/compare/v3.10.0...v3.10.1) (2025-04-11)
**Note:** Version bump only for package @externals/devDependencies
# [3.10.0](https://github.com/OHIF/Viewers/compare/v3.10.0-beta.159...v3.10.0) (2025-04-10)
**Note:** Version bump only for package @externals/devDependencies
# [3.10.0-beta.159](https://github.com/OHIF/Viewers/compare/v3.10.0-beta.158...v3.10.0-beta.159) (2025-04-09) # [3.10.0-beta.159](https://github.com/OHIF/Viewers/compare/v3.10.0-beta.158...v3.10.0-beta.159) (2025-04-09)
**Note:** Version bump only for package @externals/devDependencies **Note:** Version bump only for package @externals/devDependencies

View File

@ -1,7 +1,7 @@
{ {
"name": "@externals/devDependencies", "name": "@externals/devDependencies",
"description": "External dev dependencies - put dev build dependencies here", "description": "External dev dependencies - put dev build dependencies here",
"version": "3.10.0-beta.159", "version": "3.10.4",
"license": "MIT", "license": "MIT",
"private": true, "private": true,
"engines": { "engines": {
@ -39,14 +39,14 @@
"css-loader": "^6.8.1", "css-loader": "^6.8.1",
"dotenv": "^8.1.0", "dotenv": "^8.1.0",
"eslint": "^8.39.0", "eslint": "^8.39.0",
"eslint-config-prettier": "^7.2.0", "eslint-config-prettier": "7.2.0",
"eslint-config-react-app": "^6.0.0", "eslint-config-react-app": "^6.0.0",
"eslint-plugin-cypress": "^2.12.1", "eslint-plugin-cypress": "^2.12.1",
"eslint-plugin-flowtype": "^7.0.0", "eslint-plugin-flowtype": "^7.0.0",
"eslint-plugin-import": "^2.26.0", "eslint-plugin-import": "^2.26.0",
"eslint-plugin-jsx-a11y": "^6.5.1", "eslint-plugin-jsx-a11y": "^6.5.1",
"eslint-plugin-node": "^11.1.0", "eslint-plugin-node": "^11.1.0",
"eslint-plugin-prettier": "^5.0.0", "eslint-plugin-prettier": "5.5.1",
"eslint-plugin-promise": "^5.2.0", "eslint-plugin-promise": "^5.2.0",
"eslint-plugin-react": "^7.29.4", "eslint-plugin-react": "^7.29.4",
"eslint-plugin-react-hooks": "^4.4.0", "eslint-plugin-react-hooks": "^4.4.0",
@ -68,8 +68,8 @@
"postcss-import": "^14.0.2", "postcss-import": "^14.0.2",
"postcss-loader": "^6.1.1", "postcss-loader": "^6.1.1",
"postcss-preset-env": "^7.4.3", "postcss-preset-env": "^7.4.3",
"prettier": "^3.0.3", "prettier": "3.6.2",
"prettier-plugin-tailwindcss": "^0.5.4", "prettier-plugin-tailwindcss": "0.6.9",
"react-refresh": "^0.14.2", "react-refresh": "^0.14.2",
"semver": "^7.5.1", "semver": "^7.5.1",
"serve": "^14.2.4", "serve": "^14.2.4",
@ -77,8 +77,6 @@
"shx": "^0.3.3", "shx": "^0.3.3",
"source-map-loader": "^4.0.1", "source-map-loader": "^4.0.1",
"style-loader": "^1.0.0", "style-loader": "^1.0.0",
"stylus": "^0.59.0",
"stylus-loader": "^7.1.3",
"terser-webpack-plugin": "^5.1.4", "terser-webpack-plugin": "^5.1.4",
"typescript": "5.5.4", "typescript": "5.5.4",
"unused-webpack-plugin": "2.4.0", "unused-webpack-plugin": "2.4.0",

View File

@ -3,6 +3,38 @@
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [3.10.4](https://github.com/OHIF/Viewers/compare/v3.10.2...v3.10.4) (2025-07-23)
**Note:** Version bump only for package @externals/dicom-microscopy-viewer
## [3.10.2](https://github.com/OHIF/Viewers/compare/v3.10.1...v3.10.2) (2025-06-09)
**Note:** Version bump only for package @externals/dicom-microscopy-viewer
## [3.10.1](https://github.com/OHIF/Viewers/compare/v3.10.0...v3.10.1) (2025-04-11)
**Note:** Version bump only for package @externals/dicom-microscopy-viewer
# [3.10.0](https://github.com/OHIF/Viewers/compare/v3.10.0-beta.159...v3.10.0) (2025-04-10)
**Note:** Version bump only for package @externals/dicom-microscopy-viewer
# [3.10.0-beta.159](https://github.com/OHIF/Viewers/compare/v3.10.0-beta.158...v3.10.0-beta.159) (2025-04-09) # [3.10.0-beta.159](https://github.com/OHIF/Viewers/compare/v3.10.0-beta.158...v3.10.0-beta.159) (2025-04-09)
**Note:** Version bump only for package @externals/dicom-microscopy-viewer **Note:** Version bump only for package @externals/dicom-microscopy-viewer

View File

@ -1,7 +1,7 @@
{ {
"name": "@externals/dicom-microscopy-viewer", "name": "@externals/dicom-microscopy-viewer",
"description": "External reference to dicom-microscopy-viewer", "description": "External reference to dicom-microscopy-viewer",
"version": "3.10.0-beta.159", "version": "3.10.4",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"dicom-microscopy-viewer": "^0.46.1" "dicom-microscopy-viewer": "^0.46.1"

324
bun.lock
View File

@ -33,7 +33,7 @@
}, },
"addOns/externals/devDependencies": { "addOns/externals/devDependencies": {
"name": "@externals/devDependencies", "name": "@externals/devDependencies",
"version": "3.10.0-beta.158", "version": "3.10.2",
"dependencies": { "dependencies": {
"@babel/runtime": "^7.20.13", "@babel/runtime": "^7.20.13",
"@kitware/vtk.js": "32.12.0", "@kitware/vtk.js": "32.12.0",
@ -61,14 +61,14 @@
"css-loader": "^6.8.1", "css-loader": "^6.8.1",
"dotenv": "^8.1.0", "dotenv": "^8.1.0",
"eslint": "^8.39.0", "eslint": "^8.39.0",
"eslint-config-prettier": "^7.2.0", "eslint-config-prettier": "7.2.0",
"eslint-config-react-app": "^6.0.0", "eslint-config-react-app": "^6.0.0",
"eslint-plugin-cypress": "^2.12.1", "eslint-plugin-cypress": "^2.12.1",
"eslint-plugin-flowtype": "^7.0.0", "eslint-plugin-flowtype": "^7.0.0",
"eslint-plugin-import": "^2.26.0", "eslint-plugin-import": "^2.26.0",
"eslint-plugin-jsx-a11y": "^6.5.1", "eslint-plugin-jsx-a11y": "^6.5.1",
"eslint-plugin-node": "^11.1.0", "eslint-plugin-node": "^11.1.0",
"eslint-plugin-prettier": "^5.0.0", "eslint-plugin-prettier": "5.5.1",
"eslint-plugin-promise": "^5.2.0", "eslint-plugin-promise": "^5.2.0",
"eslint-plugin-react": "^7.29.4", "eslint-plugin-react": "^7.29.4",
"eslint-plugin-react-hooks": "^4.4.0", "eslint-plugin-react-hooks": "^4.4.0",
@ -90,8 +90,8 @@
"postcss-import": "^14.0.2", "postcss-import": "^14.0.2",
"postcss-loader": "^6.1.1", "postcss-loader": "^6.1.1",
"postcss-preset-env": "^7.4.3", "postcss-preset-env": "^7.4.3",
"prettier": "^3.0.3", "prettier": "3.6.2",
"prettier-plugin-tailwindcss": "^0.5.4", "prettier-plugin-tailwindcss": "0.6.9",
"react-refresh": "^0.14.2", "react-refresh": "^0.14.2",
"semver": "^7.5.1", "semver": "^7.5.1",
"serve": "^14.2.4", "serve": "^14.2.4",
@ -99,8 +99,6 @@
"shx": "^0.3.3", "shx": "^0.3.3",
"source-map-loader": "^4.0.1", "source-map-loader": "^4.0.1",
"style-loader": "^1.0.0", "style-loader": "^1.0.0",
"stylus": "^0.59.0",
"stylus-loader": "^7.1.3",
"terser-webpack-plugin": "^5.1.4", "terser-webpack-plugin": "^5.1.4",
"typescript": "5.5.4", "typescript": "5.5.4",
"unused-webpack-plugin": "2.4.0", "unused-webpack-plugin": "2.4.0",
@ -120,22 +118,22 @@
}, },
"addOns/externals/dicom-microscopy-viewer": { "addOns/externals/dicom-microscopy-viewer": {
"name": "@externals/dicom-microscopy-viewer", "name": "@externals/dicom-microscopy-viewer",
"version": "3.10.0-beta.158", "version": "3.10.2",
"dependencies": { "dependencies": {
"dicom-microscopy-viewer": "^0.46.1", "dicom-microscopy-viewer": "^0.46.1",
}, },
}, },
"extensions/cornerstone": { "extensions/cornerstone": {
"name": "@ohif/extension-cornerstone", "name": "@ohif/extension-cornerstone",
"version": "3.10.0-beta.158", "version": "3.10.2",
"dependencies": { "dependencies": {
"@babel/runtime": "^7.20.13", "@babel/runtime": "^7.20.13",
"@cornerstonejs/adapters": "^3.9.5", "@cornerstonejs/adapters": "^3.11.6",
"@cornerstonejs/ai": "^3.9.5", "@cornerstonejs/ai": "^3.11.6",
"@cornerstonejs/core": "^3.9.5", "@cornerstonejs/core": "^3.11.6",
"@cornerstonejs/labelmap-interpolation": "^3.9.5", "@cornerstonejs/labelmap-interpolation": "^3.11.6",
"@cornerstonejs/polymorphic-segmentation": "^3.9.5", "@cornerstonejs/polymorphic-segmentation": "^3.11.6",
"@cornerstonejs/tools": "^3.9.5", "@cornerstonejs/tools": "^3.11.6",
"@itk-wasm/morphological-contour-interpolation": "1.1.0", "@itk-wasm/morphological-contour-interpolation": "1.1.0",
"@kitware/vtk.js": "32.12.0", "@kitware/vtk.js": "32.12.0",
"html2canvas": "^1.4.1", "html2canvas": "^1.4.1",
@ -152,9 +150,9 @@
"@cornerstonejs/codec-libjpeg-turbo-8bit": "^1.2.2", "@cornerstonejs/codec-libjpeg-turbo-8bit": "^1.2.2",
"@cornerstonejs/codec-openjpeg": "^1.2.4", "@cornerstonejs/codec-openjpeg": "^1.2.4",
"@cornerstonejs/codec-openjph": "^2.4.5", "@cornerstonejs/codec-openjph": "^2.4.5",
"@cornerstonejs/dicom-image-loader": "^3.9.5", "@cornerstonejs/dicom-image-loader": "^3.11.6",
"@ohif/core": "3.10.0-beta.158", "@ohif/core": "3.10.1",
"@ohif/ui": "3.10.0-beta.158", "@ohif/ui": "3.10.1",
"dcmjs": "*", "dcmjs": "*",
"dicom-parser": "^1.8.21", "dicom-parser": "^1.8.21",
"hammerjs": "^2.0.8", "hammerjs": "^2.0.8",
@ -166,19 +164,19 @@
}, },
"extensions/cornerstone-dicom-pmap": { "extensions/cornerstone-dicom-pmap": {
"name": "@ohif/extension-cornerstone-dicom-pmap", "name": "@ohif/extension-cornerstone-dicom-pmap",
"version": "3.10.0-beta.158", "version": "3.10.2",
"dependencies": { "dependencies": {
"@babel/runtime": "^7.20.13", "@babel/runtime": "^7.20.13",
"@cornerstonejs/adapters": "^3.9.5", "@cornerstonejs/adapters": "^3.11.6",
"@cornerstonejs/core": "^3.9.5", "@cornerstonejs/core": "^3.11.6",
"@kitware/vtk.js": "32.12.0", "@kitware/vtk.js": "32.12.0",
"react-color": "^2.19.3", "react-color": "^2.19.3",
}, },
"peerDependencies": { "peerDependencies": {
"@ohif/core": "3.10.0-beta.158", "@ohif/core": "3.10.1",
"@ohif/extension-cornerstone": "3.10.0-beta.158", "@ohif/extension-cornerstone": "3.10.1",
"@ohif/extension-default": "3.10.0-beta.158", "@ohif/extension-default": "3.10.1",
"@ohif/i18n": "3.10.0-beta.158", "@ohif/i18n": "3.10.1",
"prop-types": "^15.6.2", "prop-types": "^15.6.2",
"react": "^18.3.1", "react": "^18.3.1",
"react-dom": "^18.3.1", "react-dom": "^18.3.1",
@ -189,16 +187,16 @@
}, },
"extensions/cornerstone-dicom-rt": { "extensions/cornerstone-dicom-rt": {
"name": "@ohif/extension-cornerstone-dicom-rt", "name": "@ohif/extension-cornerstone-dicom-rt",
"version": "3.10.0-beta.158", "version": "3.10.2",
"dependencies": { "dependencies": {
"@babel/runtime": "^7.20.13", "@babel/runtime": "^7.20.13",
"react-color": "^2.19.3", "react-color": "^2.19.3",
}, },
"peerDependencies": { "peerDependencies": {
"@ohif/core": "3.10.0-beta.158", "@ohif/core": "3.10.1",
"@ohif/extension-cornerstone": "3.10.0-beta.158", "@ohif/extension-cornerstone": "3.10.1",
"@ohif/extension-default": "3.10.0-beta.158", "@ohif/extension-default": "3.10.1",
"@ohif/i18n": "3.10.0-beta.158", "@ohif/i18n": "3.10.1",
"prop-types": "^15.6.2", "prop-types": "^15.6.2",
"react": "^18.3.1", "react": "^18.3.1",
"react-dom": "^18.3.1", "react-dom": "^18.3.1",
@ -209,19 +207,19 @@
}, },
"extensions/cornerstone-dicom-seg": { "extensions/cornerstone-dicom-seg": {
"name": "@ohif/extension-cornerstone-dicom-seg", "name": "@ohif/extension-cornerstone-dicom-seg",
"version": "3.10.0-beta.158", "version": "3.10.2",
"dependencies": { "dependencies": {
"@babel/runtime": "^7.20.13", "@babel/runtime": "^7.20.13",
"@cornerstonejs/adapters": "^3.9.5", "@cornerstonejs/adapters": "^3.11.6",
"@cornerstonejs/core": "^3.9.5", "@cornerstonejs/core": "^3.11.6",
"@kitware/vtk.js": "32.12.0", "@kitware/vtk.js": "32.12.0",
"react-color": "^2.19.3", "react-color": "^2.19.3",
}, },
"peerDependencies": { "peerDependencies": {
"@ohif/core": "3.10.0-beta.158", "@ohif/core": "3.10.1",
"@ohif/extension-cornerstone": "3.10.0-beta.158", "@ohif/extension-cornerstone": "3.10.1",
"@ohif/extension-default": "3.10.0-beta.158", "@ohif/extension-default": "3.10.1",
"@ohif/i18n": "3.10.0-beta.158", "@ohif/i18n": "3.10.1",
"prop-types": "^15.6.2", "prop-types": "^15.6.2",
"react": "^18.3.1", "react": "^18.3.1",
"react-dom": "^18.3.1", "react-dom": "^18.3.1",
@ -232,19 +230,19 @@
}, },
"extensions/cornerstone-dicom-sr": { "extensions/cornerstone-dicom-sr": {
"name": "@ohif/extension-cornerstone-dicom-sr", "name": "@ohif/extension-cornerstone-dicom-sr",
"version": "3.10.0-beta.158", "version": "3.10.2",
"dependencies": { "dependencies": {
"@babel/runtime": "^7.20.13", "@babel/runtime": "^7.20.13",
"@cornerstonejs/adapters": "^3.9.5", "@cornerstonejs/adapters": "^3.11.6",
"@cornerstonejs/core": "^3.9.5", "@cornerstonejs/core": "^3.11.6",
"@cornerstonejs/tools": "^3.9.5", "@cornerstonejs/tools": "^3.11.6",
"classnames": "^2.3.2", "classnames": "^2.3.2",
}, },
"peerDependencies": { "peerDependencies": {
"@ohif/core": "3.10.0-beta.158", "@ohif/core": "3.10.1",
"@ohif/extension-cornerstone": "3.10.0-beta.158", "@ohif/extension-cornerstone": "3.10.1",
"@ohif/extension-measurement-tracking": "3.10.0-beta.158", "@ohif/extension-measurement-tracking": "3.10.1",
"@ohif/ui": "3.10.0-beta.158", "@ohif/ui": "3.10.1",
"dcmjs": "*", "dcmjs": "*",
"dicom-parser": "^1.8.9", "dicom-parser": "^1.8.9",
"hammerjs": "^2.0.8", "hammerjs": "^2.0.8",
@ -254,19 +252,19 @@
}, },
"extensions/cornerstone-dynamic-volume": { "extensions/cornerstone-dynamic-volume": {
"name": "@ohif/extension-cornerstone-dynamic-volume", "name": "@ohif/extension-cornerstone-dynamic-volume",
"version": "3.10.0-beta.158", "version": "3.10.2",
"dependencies": { "dependencies": {
"@babel/runtime": "^7.20.13", "@babel/runtime": "^7.20.13",
"@cornerstonejs/core": "^3.9.5", "@cornerstonejs/core": "^3.11.6",
"@cornerstonejs/tools": "^3.9.5", "@cornerstonejs/tools": "^3.11.6",
"classnames": "^2.3.2", "classnames": "^2.3.2",
}, },
"peerDependencies": { "peerDependencies": {
"@ohif/core": "3.10.0-beta.158", "@ohif/core": "3.10.1",
"@ohif/extension-cornerstone": "3.10.0-beta.158", "@ohif/extension-cornerstone": "3.10.1",
"@ohif/extension-default": "3.10.0-beta.158", "@ohif/extension-default": "3.10.1",
"@ohif/i18n": "3.10.0-beta.158", "@ohif/i18n": "3.10.1",
"@ohif/ui": "3.10.0-beta.158", "@ohif/ui": "3.10.1",
"dcmjs": "*", "dcmjs": "*",
"dicom-parser": "^1.8.21", "dicom-parser": "^1.8.21",
"hammerjs": "^2.0.8", "hammerjs": "^2.0.8",
@ -276,7 +274,7 @@
}, },
"extensions/default": { "extensions/default": {
"name": "@ohif/extension-default", "name": "@ohif/extension-default",
"version": "3.10.0-beta.158", "version": "3.10.2",
"dependencies": { "dependencies": {
"@babel/runtime": "^7.20.13", "@babel/runtime": "^7.20.13",
"@cornerstonejs/calculate-suv": "^1.1.0", "@cornerstonejs/calculate-suv": "^1.1.0",
@ -284,8 +282,8 @@
"lodash.uniqby": "^4.7.0", "lodash.uniqby": "^4.7.0",
}, },
"peerDependencies": { "peerDependencies": {
"@ohif/core": "3.10.0-beta.158", "@ohif/core": "3.10.1",
"@ohif/i18n": "3.10.0-beta.158", "@ohif/i18n": "3.10.1",
"dcmjs": "*", "dcmjs": "*",
"dicomweb-client": "^0.10.4", "dicomweb-client": "^0.10.4",
"prop-types": "^15.6.2", "prop-types": "^15.6.2",
@ -299,7 +297,7 @@
}, },
"extensions/dicom-microscopy": { "extensions/dicom-microscopy": {
"name": "@ohif/extension-dicom-microscopy", "name": "@ohif/extension-dicom-microscopy",
"version": "3.10.0-beta.158", "version": "3.10.2",
"dependencies": { "dependencies": {
"@babel/runtime": "^7.20.13", "@babel/runtime": "^7.20.13",
"@cornerstonejs/codec-charls": "^1.2.3", "@cornerstonejs/codec-charls": "^1.2.3",
@ -310,10 +308,10 @@
"mathjs": "^12.4.2", "mathjs": "^12.4.2",
}, },
"peerDependencies": { "peerDependencies": {
"@ohif/core": "3.10.0-beta.158", "@ohif/core": "3.10.1",
"@ohif/extension-default": "3.10.0-beta.158", "@ohif/extension-default": "3.10.1",
"@ohif/i18n": "3.10.0-beta.158", "@ohif/i18n": "3.10.1",
"@ohif/ui": "3.10.0-beta.158", "@ohif/ui": "3.10.1",
"prop-types": "^15.6.2", "prop-types": "^15.6.2",
"react": "^18.3.1", "react": "^18.3.1",
"react-dom": "^18.3.1", "react-dom": "^18.3.1",
@ -324,14 +322,14 @@
}, },
"extensions/dicom-pdf": { "extensions/dicom-pdf": {
"name": "@ohif/extension-dicom-pdf", "name": "@ohif/extension-dicom-pdf",
"version": "3.10.0-beta.158", "version": "3.10.2",
"dependencies": { "dependencies": {
"@babel/runtime": "^7.20.13", "@babel/runtime": "^7.20.13",
"classnames": "^2.3.2", "classnames": "^2.3.2",
}, },
"peerDependencies": { "peerDependencies": {
"@ohif/core": "3.10.0-beta.158", "@ohif/core": "3.10.1",
"@ohif/ui": "3.10.0-beta.158", "@ohif/ui": "3.10.1",
"dcmjs": "*", "dcmjs": "*",
"dicom-parser": "^1.8.9", "dicom-parser": "^1.8.9",
"hammerjs": "^2.0.8", "hammerjs": "^2.0.8",
@ -341,14 +339,14 @@
}, },
"extensions/dicom-video": { "extensions/dicom-video": {
"name": "@ohif/extension-dicom-video", "name": "@ohif/extension-dicom-video",
"version": "3.10.0-beta.158", "version": "3.10.2",
"dependencies": { "dependencies": {
"@babel/runtime": "^7.20.13", "@babel/runtime": "^7.20.13",
"classnames": "^2.3.2", "classnames": "^2.3.2",
}, },
"peerDependencies": { "peerDependencies": {
"@ohif/core": "3.10.0-beta.158", "@ohif/core": "3.10.1",
"@ohif/ui": "3.10.0-beta.158", "@ohif/ui": "3.10.1",
"dcmjs": "*", "dcmjs": "*",
"dicom-parser": "^1.8.9", "dicom-parser": "^1.8.9",
"hammerjs": "^2.0.8", "hammerjs": "^2.0.8",
@ -358,20 +356,20 @@
}, },
"extensions/measurement-tracking": { "extensions/measurement-tracking": {
"name": "@ohif/extension-measurement-tracking", "name": "@ohif/extension-measurement-tracking",
"version": "3.10.0-beta.158", "version": "3.10.2",
"dependencies": { "dependencies": {
"@babel/runtime": "^7.20.13", "@babel/runtime": "^7.20.13",
"@ohif/ui": "3.10.0-beta.158", "@ohif/ui": "3.10.1",
"@xstate/react": "^3.2.2", "@xstate/react": "^3.2.2",
"xstate": "^4.10.0", "xstate": "^4.10.0",
}, },
"peerDependencies": { "peerDependencies": {
"@cornerstonejs/core": "^3.9.5", "@cornerstonejs/core": "^3.11.6",
"@cornerstonejs/tools": "^3.9.5", "@cornerstonejs/tools": "^3.11.6",
"@ohif/core": "3.10.0-beta.158", "@ohif/core": "3.10.1",
"@ohif/extension-cornerstone-dicom-sr": "3.10.0-beta.158", "@ohif/extension-cornerstone-dicom-sr": "3.10.1",
"@ohif/extension-default": "3.10.0-beta.158", "@ohif/extension-default": "3.10.1",
"@ohif/ui": "3.10.0-beta.158", "@ohif/ui": "3.10.1",
"classnames": "^2.3.2", "classnames": "^2.3.2",
"dcmjs": "*", "dcmjs": "*",
"lodash.debounce": "^4.0.8", "lodash.debounce": "^4.0.8",
@ -384,14 +382,14 @@
}, },
"extensions/test-extension": { "extensions/test-extension": {
"name": "@ohif/extension-test", "name": "@ohif/extension-test",
"version": "3.10.0-beta.158", "version": "3.10.2",
"dependencies": { "dependencies": {
"@babel/runtime": "^7.20.13", "@babel/runtime": "^7.20.13",
"classnames": "^2.3.2", "classnames": "^2.3.2",
}, },
"peerDependencies": { "peerDependencies": {
"@ohif/core": "3.10.0-beta.158", "@ohif/core": "3.10.1",
"@ohif/ui": "3.10.0-beta.158", "@ohif/ui": "3.10.1",
"dcmjs": "0.38.0", "dcmjs": "0.38.0",
"dicom-parser": "^1.8.9", "dicom-parser": "^1.8.9",
"hammerjs": "^2.0.8", "hammerjs": "^2.0.8",
@ -401,7 +399,7 @@
}, },
"extensions/tmtv": { "extensions/tmtv": {
"name": "@ohif/extension-tmtv", "name": "@ohif/extension-tmtv",
"version": "3.10.0-beta.158", "version": "3.10.2",
"dependencies": { "dependencies": {
"@babel/runtime": "^7.20.13", "@babel/runtime": "^7.20.13",
"classnames": "^2.3.2", "classnames": "^2.3.2",
@ -418,7 +416,7 @@
}, },
"modes/basic-dev-mode": { "modes/basic-dev-mode": {
"name": "@ohif/mode-basic-dev-mode", "name": "@ohif/mode-basic-dev-mode",
"version": "3.10.0-beta.158", "version": "3.10.2",
"dependencies": { "dependencies": {
"@babel/runtime": "^7.20.13", "@babel/runtime": "^7.20.13",
"i18next": "^17.0.3", "i18next": "^17.0.3",
@ -428,17 +426,17 @@
"webpack-merge": "^5.7.3", "webpack-merge": "^5.7.3",
}, },
"peerDependencies": { "peerDependencies": {
"@ohif/core": "3.10.0-beta.158", "@ohif/core": "3.10.1",
"@ohif/extension-cornerstone": "3.10.0-beta.158", "@ohif/extension-cornerstone": "3.10.1",
"@ohif/extension-cornerstone-dicom-sr": "3.10.0-beta.158", "@ohif/extension-cornerstone-dicom-sr": "3.10.1",
"@ohif/extension-default": "3.10.0-beta.158", "@ohif/extension-default": "3.10.1",
"@ohif/extension-dicom-pdf": "3.10.0-beta.158", "@ohif/extension-dicom-pdf": "3.10.1",
"@ohif/extension-dicom-video": "3.10.0-beta.158", "@ohif/extension-dicom-video": "3.10.1",
}, },
}, },
"modes/basic-test-mode": { "modes/basic-test-mode": {
"name": "@ohif/mode-test", "name": "@ohif/mode-test",
"version": "3.10.0-beta.158", "version": "3.10.2",
"dependencies": { "dependencies": {
"@babel/runtime": "^7.20.13", "@babel/runtime": "^7.20.13",
"i18next": "^17.0.3", "i18next": "^17.0.3",
@ -448,19 +446,19 @@
"webpack-merge": "^5.7.3", "webpack-merge": "^5.7.3",
}, },
"peerDependencies": { "peerDependencies": {
"@ohif/core": "3.10.0-beta.158", "@ohif/core": "3.10.1",
"@ohif/extension-cornerstone": "3.10.0-beta.158", "@ohif/extension-cornerstone": "3.10.1",
"@ohif/extension-cornerstone-dicom-sr": "3.10.0-beta.158", "@ohif/extension-cornerstone-dicom-sr": "3.10.1",
"@ohif/extension-default": "3.10.0-beta.158", "@ohif/extension-default": "3.10.1",
"@ohif/extension-dicom-pdf": "3.10.0-beta.158", "@ohif/extension-dicom-pdf": "3.10.1",
"@ohif/extension-dicom-video": "3.10.0-beta.158", "@ohif/extension-dicom-video": "3.10.1",
"@ohif/extension-measurement-tracking": "3.10.0-beta.158", "@ohif/extension-measurement-tracking": "3.10.1",
"@ohif/extension-test": "3.10.0-beta.158", "@ohif/extension-test": "3.10.1",
}, },
}, },
"modes/longitudinal": { "modes/longitudinal": {
"name": "@ohif/mode-longitudinal", "name": "@ohif/mode-longitudinal",
"version": "3.10.0-beta.158", "version": "3.10.2",
"dependencies": { "dependencies": {
"@babel/runtime": "^7.20.13", "@babel/runtime": "^7.20.13",
"i18next": "^17.0.3", "i18next": "^17.0.3",
@ -470,32 +468,32 @@
"webpack-merge": "^5.7.3", "webpack-merge": "^5.7.3",
}, },
"peerDependencies": { "peerDependencies": {
"@ohif/core": "3.10.0-beta.158", "@ohif/core": "3.10.1",
"@ohif/extension-cornerstone": "3.10.0-beta.158", "@ohif/extension-cornerstone": "3.10.1",
"@ohif/extension-cornerstone-dicom-rt": "3.10.0-beta.158", "@ohif/extension-cornerstone-dicom-rt": "3.10.1",
"@ohif/extension-cornerstone-dicom-seg": "3.10.0-beta.158", "@ohif/extension-cornerstone-dicom-seg": "3.10.1",
"@ohif/extension-cornerstone-dicom-sr": "3.10.0-beta.158", "@ohif/extension-cornerstone-dicom-sr": "3.10.1",
"@ohif/extension-default": "3.10.0-beta.158", "@ohif/extension-default": "3.10.1",
"@ohif/extension-dicom-pdf": "3.10.0-beta.158", "@ohif/extension-dicom-pdf": "3.10.1",
"@ohif/extension-dicom-video": "3.10.0-beta.158", "@ohif/extension-dicom-video": "3.10.1",
"@ohif/extension-measurement-tracking": "3.10.0-beta.158", "@ohif/extension-measurement-tracking": "3.10.1",
}, },
}, },
"modes/microscopy": { "modes/microscopy": {
"name": "@ohif/mode-microscopy", "name": "@ohif/mode-microscopy",
"version": "3.10.0-beta.158", "version": "3.10.2",
"dependencies": { "dependencies": {
"@babel/runtime": "^7.20.13", "@babel/runtime": "^7.20.13",
"i18next": "^17.0.3", "i18next": "^17.0.3",
}, },
"peerDependencies": { "peerDependencies": {
"@ohif/core": "3.10.0-beta.158", "@ohif/core": "3.10.1",
"@ohif/extension-dicom-microscopy": "3.10.0-beta.158", "@ohif/extension-dicom-microscopy": "3.10.1",
}, },
}, },
"modes/preclinical-4d": { "modes/preclinical-4d": {
"name": "@ohif/mode-preclinical-4d", "name": "@ohif/mode-preclinical-4d",
"version": "3.10.0-beta.158", "version": "3.10.2",
"dependencies": { "dependencies": {
"@babel/runtime": "^7.20.13", "@babel/runtime": "^7.20.13",
}, },
@ -514,7 +512,7 @@
}, },
"modes/segmentation": { "modes/segmentation": {
"name": "@ohif/mode-segmentation", "name": "@ohif/mode-segmentation",
"version": "3.10.0-beta.158", "version": "3.10.2",
"dependencies": { "dependencies": {
"@babel/runtime": "^7.20.13", "@babel/runtime": "^7.20.13",
"i18next": "^17.0.3", "i18next": "^17.0.3",
@ -558,7 +556,7 @@
}, },
"modes/tmtv": { "modes/tmtv": {
"name": "@ohif/mode-tmtv", "name": "@ohif/mode-tmtv",
"version": "3.10.0-beta.158", "version": "3.10.2",
"dependencies": { "dependencies": {
"@babel/runtime": "^7.20.13", "@babel/runtime": "^7.20.13",
"i18next": "^17.0.3", "i18next": "^17.0.3",
@ -579,32 +577,32 @@
}, },
"platform/app": { "platform/app": {
"name": "@ohif/app", "name": "@ohif/app",
"version": "3.10.0-beta.158", "version": "3.10.2",
"dependencies": { "dependencies": {
"@babel/runtime": "^7.20.13", "@babel/runtime": "^7.20.13",
"@cornerstonejs/codec-charls": "^1.2.3", "@cornerstonejs/codec-charls": "^1.2.3",
"@cornerstonejs/codec-libjpeg-turbo-8bit": "^1.2.2", "@cornerstonejs/codec-libjpeg-turbo-8bit": "^1.2.2",
"@cornerstonejs/codec-openjpeg": "^1.2.4", "@cornerstonejs/codec-openjpeg": "^1.2.4",
"@cornerstonejs/codec-openjph": "^2.4.5", "@cornerstonejs/codec-openjph": "^2.4.5",
"@cornerstonejs/dicom-image-loader": "^3.9.5", "@cornerstonejs/dicom-image-loader": "^3.11.6",
"@emotion/serialize": "^1.1.3", "@emotion/serialize": "^1.1.3",
"@ohif/core": "3.10.0-beta.158", "@ohif/core": "3.10.1",
"@ohif/extension-cornerstone": "3.10.0-beta.158", "@ohif/extension-cornerstone": "3.10.1",
"@ohif/extension-cornerstone-dicom-rt": "3.10.0-beta.158", "@ohif/extension-cornerstone-dicom-rt": "3.10.1",
"@ohif/extension-cornerstone-dicom-seg": "3.10.0-beta.158", "@ohif/extension-cornerstone-dicom-seg": "3.10.1",
"@ohif/extension-cornerstone-dicom-sr": "3.10.0-beta.158", "@ohif/extension-cornerstone-dicom-sr": "3.10.1",
"@ohif/extension-default": "3.10.0-beta.158", "@ohif/extension-default": "3.10.1",
"@ohif/extension-dicom-microscopy": "3.10.0-beta.158", "@ohif/extension-dicom-microscopy": "3.10.1",
"@ohif/extension-dicom-pdf": "3.10.0-beta.158", "@ohif/extension-dicom-pdf": "3.10.1",
"@ohif/extension-dicom-video": "3.10.0-beta.158", "@ohif/extension-dicom-video": "3.10.1",
"@ohif/extension-test": "3.10.0-beta.158", "@ohif/extension-test": "3.10.1",
"@ohif/i18n": "3.10.0-beta.158", "@ohif/i18n": "3.10.1",
"@ohif/mode-basic-dev-mode": "3.10.0-beta.158", "@ohif/mode-basic-dev-mode": "3.10.1",
"@ohif/mode-longitudinal": "3.10.0-beta.158", "@ohif/mode-longitudinal": "3.10.1",
"@ohif/mode-microscopy": "3.10.0-beta.158", "@ohif/mode-microscopy": "3.10.1",
"@ohif/mode-test": "3.10.0-beta.158", "@ohif/mode-test": "3.10.1",
"@ohif/ui": "3.10.0-beta.158", "@ohif/ui": "3.10.1",
"@ohif/ui-next": "3.10.0-beta.158", "@ohif/ui-next": "3.10.1",
"@svgr/webpack": "^8.1.0", "@svgr/webpack": "^8.1.0",
"@types/react": "^18.3.3", "@types/react": "^18.3.3",
"classnames": "^2.3.2", "classnames": "^2.3.2",
@ -645,7 +643,7 @@
}, },
"platform/cli": { "platform/cli": {
"name": "@ohif/cli", "name": "@ohif/cli",
"version": "3.10.0-beta.158", "version": "3.10.2",
"bin": { "bin": {
"ohif-cli": "src/index.js", "ohif-cli": "src/index.js",
}, },
@ -669,7 +667,7 @@
}, },
"platform/core": { "platform/core": {
"name": "@ohif/core", "name": "@ohif/core",
"version": "3.10.0-beta.158", "version": "3.10.2",
"dependencies": { "dependencies": {
"@babel/runtime": "^7.20.13", "@babel/runtime": "^7.20.13",
"dcmjs": "*", "dcmjs": "*",
@ -694,16 +692,16 @@
"@cornerstonejs/codec-libjpeg-turbo-8bit": "^1.2.2", "@cornerstonejs/codec-libjpeg-turbo-8bit": "^1.2.2",
"@cornerstonejs/codec-openjpeg": "^1.2.4", "@cornerstonejs/codec-openjpeg": "^1.2.4",
"@cornerstonejs/codec-openjph": "^2.4.5", "@cornerstonejs/codec-openjph": "^2.4.5",
"@cornerstonejs/core": "^3.9.5", "@cornerstonejs/core": "^3.11.6",
"@cornerstonejs/dicom-image-loader": "^3.9.5", "@cornerstonejs/dicom-image-loader": "^3.11.6",
"@ohif/ui": "3.10.0-beta.158", "@ohif/ui": "3.10.1",
"cornerstone-math": "0.1.9", "cornerstone-math": "0.1.9",
"dicom-parser": "^1.8.21", "dicom-parser": "^1.8.21",
}, },
}, },
"platform/i18n": { "platform/i18n": {
"name": "@ohif/i18n", "name": "@ohif/i18n",
"version": "3.10.0-beta.158", "version": "3.10.2",
"dependencies": { "dependencies": {
"@babel/runtime": "^7.20.13", "@babel/runtime": "^7.20.13",
"i18next-locize-backend": "^2.0.0", "i18next-locize-backend": "^2.0.0",
@ -728,7 +726,7 @@
}, },
"platform/ui": { "platform/ui": {
"name": "@ohif/ui", "name": "@ohif/ui",
"version": "3.10.0-beta.158", "version": "3.10.2",
"dependencies": { "dependencies": {
"@testing-library/react": "^13.1.0", "@testing-library/react": "^13.1.0",
"browser-detect": "^0.2.28", "browser-detect": "^0.2.28",
@ -788,7 +786,7 @@
}, },
"platform/ui-next": { "platform/ui-next": {
"name": "@ohif/ui-next", "name": "@ohif/ui-next",
"version": "3.10.0-beta.158", "version": "3.10.2",
"dependencies": { "dependencies": {
"@radix-ui/react-accordion": "^1.2.0", "@radix-ui/react-accordion": "^1.2.0",
"@radix-ui/react-checkbox": "^1.1.1", "@radix-ui/react-checkbox": "^1.1.1",
@ -831,20 +829,18 @@
}, },
}, },
"overrides": { "overrides": {
"commander": "8.3.0",
"path-to-regexp": "0.1.12",
"nth-check": "^2.1.1",
"trim-newlines": "^5.0.0",
"glob-parent": "^6.0.2",
"trim": "^1.0.0",
"package-json": "^8.1.0",
"sharp": "^0.32.6",
"rollup": "2.79.2",
"body-parser": "1.20.3", "body-parser": "1.20.3",
"commander": "8.3.0",
"glob-parent": "^6.0.2",
"nth-check": "^2.1.1",
"package-json": "^8.1.0",
"path-to-regexp": "0.1.12",
"rollup": "2.79.2",
"sharp": "^0.32.6",
"trim": "^1.0.0",
"trim-newlines": "^5.0.0",
}, },
"packages": { "packages": {
"@adobe/css-tools": ["@adobe/css-tools@4.4.2", "", {}, "sha512-baYZExFpsdkBNuvGKTKWCwKH57HRZLVtycZS05WTQNVOiXVSeAki3nU35zlRbToeMW8aHlJfyS+1C4BOv27q0A=="],
"@ampproject/remapping": ["@ampproject/remapping@2.3.0", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw=="], "@ampproject/remapping": ["@ampproject/remapping@2.3.0", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw=="],
"@apideck/better-ajv-errors": ["@apideck/better-ajv-errors@0.3.6", "", { "dependencies": { "json-schema": "^0.4.0", "jsonpointer": "^5.0.0", "leven": "^3.1.0" }, "peerDependencies": { "ajv": ">=8" } }, "sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA=="], "@apideck/better-ajv-errors": ["@apideck/better-ajv-errors@0.3.6", "", { "dependencies": { "json-schema": "^0.4.0", "jsonpointer": "^5.0.0", "leven": "^3.1.0" }, "peerDependencies": { "ajv": ">=8" } }, "sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA=="],
@ -1099,9 +1095,9 @@
"@colors/colors": ["@colors/colors@1.5.0", "", {}, "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ=="], "@colors/colors": ["@colors/colors@1.5.0", "", {}, "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ=="],
"@cornerstonejs/adapters": ["@cornerstonejs/adapters@3.9.5", "", { "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.9.5", "@cornerstonejs/tools": "^3.9.5" } }, "sha512-I8nPFmwNBqBwrH26w06gZfsJaHyZPN4nZC8GO7IerkVSkyYXgFEFC5iRdVuU+Kr94nWm8zPKyLqHx7hAeNudgw=="], "@cornerstonejs/adapters": ["@cornerstonejs/adapters@3.11.7", "", { "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.11.7", "@cornerstonejs/tools": "^3.11.7" } }, "sha512-21ewTLHbwHcoALMqXQMuoZTHnAJ4EWuMtLvCHXL43BfVerzDXjLTuPuOeyg2QP4V4krevKH/oyOF04deHWHpsA=="],
"@cornerstonejs/ai": ["@cornerstonejs/ai@3.9.5", "", { "dependencies": { "@babel/runtime-corejs2": "^7.17.8", "buffer": "^6.0.3", "dcmjs": "^0.29.8", "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.9.5", "@cornerstonejs/tools": "^3.9.5" } }, "sha512-AgVPLVoYJeefPcp6tf5UNfS8qoEJc8VxrqZab6f+LybhSa2se52h+57rCB5Ihd7SziNvWyIdux7v1Iy3GiZm+g=="], "@cornerstonejs/ai": ["@cornerstonejs/ai@3.11.7", "", { "dependencies": { "@babel/runtime-corejs2": "^7.17.8", "buffer": "^6.0.3", "dcmjs": "^0.29.8", "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.11.7", "@cornerstonejs/tools": "^3.11.7" } }, "sha512-oVJzZNwyjh6UTzvJanYIDjXKcxvT4u9cOLuvzt3pBGbdaeq5Xn/MlxMi90EBvLIuUGgxT/u9MDu4xpBJLVJalw=="],
"@cornerstonejs/calculate-suv": ["@cornerstonejs/calculate-suv@1.1.0", "", {}, "sha512-Q9XraiDJif9aMFArD2iEuDO/HXbcRVCqB7KfaHgDrdTTjgDFovS91Psbdim7crypRSvE6dh/+HKeFNHdvNkA6w=="], "@cornerstonejs/calculate-suv": ["@cornerstonejs/calculate-suv@1.1.0", "", {}, "sha512-Q9XraiDJif9aMFArD2iEuDO/HXbcRVCqB7KfaHgDrdTTjgDFovS91Psbdim7crypRSvE6dh/+HKeFNHdvNkA6w=="],
@ -1113,15 +1109,15 @@
"@cornerstonejs/codec-openjph": ["@cornerstonejs/codec-openjph@2.4.7", "", {}, "sha512-qvP4q4JDib7mi9r7LqKOwqz7YZ8gjtDX4ZCezeYf8+eb7MBXCz5uXAMeVF3yz9Axw4XiIMdB/pqXkm8tqCl13w=="], "@cornerstonejs/codec-openjph": ["@cornerstonejs/codec-openjph@2.4.7", "", {}, "sha512-qvP4q4JDib7mi9r7LqKOwqz7YZ8gjtDX4ZCezeYf8+eb7MBXCz5uXAMeVF3yz9Axw4XiIMdB/pqXkm8tqCl13w=="],
"@cornerstonejs/core": ["@cornerstonejs/core@3.9.5", "", { "dependencies": { "@kitware/vtk.js": "32.12.1", "comlink": "^4.4.1", "gl-matrix": "^3.4.3", "loglevel": "^1.9.2" } }, "sha512-EwXeTNSlL7UnXmj8o1DigNZOsVbhtNDKT2Bbi66jhnzZQm+rTPyYeTva+FnnqvpxBb/6QqwDEJ8gwlXwV0Rk5w=="], "@cornerstonejs/core": ["@cornerstonejs/core@3.11.7", "", { "dependencies": { "@kitware/vtk.js": "32.12.1", "comlink": "^4.4.1", "gl-matrix": "^3.4.3", "loglevel": "^1.9.2" } }, "sha512-mjWC603R3hGE8NuYxU89nt3TsRoROci5MC0FIIpLNrdPedizdz8F5PYzUCxdHREIrfy4nDyvPmfK1tdGDqvDtQ=="],
"@cornerstonejs/dicom-image-loader": ["@cornerstonejs/dicom-image-loader@3.9.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.9.5" } }, "sha512-g0GZNkZ6PBRCl/dvi6NoQlmpmZhuLLeI4cdiFwV0Ug81HPkHdn8FQaqgy1XPOMknLSL6sJGZsJN2l2nW5COQSA=="], "@cornerstonejs/dicom-image-loader": ["@cornerstonejs/dicom-image-loader@3.11.7", "", { "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.11.7" } }, "sha512-UzFD/uDnNN3VNuuIq+oWLXRP8Vuxy/n3ZSL4ZxFWuAyQmgM/9CGlJhKmXrmyGXzFnHFnI2hDTuvg54/A2NqMBg=="],
"@cornerstonejs/labelmap-interpolation": ["@cornerstonejs/labelmap-interpolation@3.9.5", "", { "dependencies": { "@itk-wasm/morphological-contour-interpolation": "1.1.0", "itk-wasm": "1.0.0-b.165" }, "peerDependencies": { "@cornerstonejs/core": "^3.9.5", "@cornerstonejs/tools": "^3.9.5", "@kitware/vtk.js": "32.12.1" } }, "sha512-U7XnaqrrEHGvH3kKdTwGiwLYaydxp5GVo0aqVvZaRDXMXfP3tbOpCfMQcqD+bv4Sh+Rr0719O5aDJ0+ENpA/MA=="], "@cornerstonejs/labelmap-interpolation": ["@cornerstonejs/labelmap-interpolation@3.11.7", "", { "dependencies": { "@itk-wasm/morphological-contour-interpolation": "1.1.0", "itk-wasm": "1.0.0-b.165" }, "peerDependencies": { "@cornerstonejs/core": "^3.11.7", "@cornerstonejs/tools": "^3.11.7", "@kitware/vtk.js": "32.12.1" } }, "sha512-y7+E98bLhRzaIN9v7CtUS+Pqf9yJYI4vukz7gd2p2524/5iPvTqz1v3nfV3jUCZHU+FS27zcN0LNtvlbnPfZRw=="],
"@cornerstonejs/polymorphic-segmentation": ["@cornerstonejs/polymorphic-segmentation@3.9.5", "", { "dependencies": { "@icr/polyseg-wasm": "0.4.0" }, "peerDependencies": { "@cornerstonejs/core": "^3.9.5", "@cornerstonejs/tools": "^3.9.5", "@kitware/vtk.js": "32.12.1" } }, "sha512-6ucJkb0X5CBBx00g3CzJGuLd6x4T99bPyKXa+y9Bek3jC+RyKI4vySS5RRKtQ4N59yuealZkBvV7dT0FseE8og=="], "@cornerstonejs/polymorphic-segmentation": ["@cornerstonejs/polymorphic-segmentation@3.11.7", "", { "dependencies": { "@icr/polyseg-wasm": "0.4.0" }, "peerDependencies": { "@cornerstonejs/core": "^3.11.7", "@cornerstonejs/tools": "^3.11.7", "@kitware/vtk.js": "32.12.1" } }, "sha512-ZZysECCUlEp3L33OJZ6ObGq35OyFTa0fo9+D+Tfv32HcRbrfTRTlcrWU7uLGNo3WBolX/zk0pCubRQjT8TbQiQ=="],
"@cornerstonejs/tools": ["@cornerstonejs/tools@3.9.5", "", { "dependencies": { "@types/offscreencanvas": "2019.7.3", "comlink": "^4.4.1", "lodash.get": "^4.4.2" }, "peerDependencies": { "@cornerstonejs/core": "^3.9.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-vdPsm4szolXmyBdDNTB1gyRCP5EEicsf+TOsTU5P6QYWR7cB+nyio7GeGK5zFQrUi0hb2a2qkVjjLQLQH9inAw=="], "@cornerstonejs/tools": ["@cornerstonejs/tools@3.11.7", "", { "dependencies": { "@types/offscreencanvas": "2019.7.3", "comlink": "^4.4.1", "lodash.get": "^4.4.2" }, "peerDependencies": { "@cornerstonejs/core": "^3.11.7", "@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-Lo2/mp2J/PDqA/xZu/krQGryCXaDuqj77F9w/wWCjme3NOqrZfhiq/FYEPRsze8ejhXo5A9ChgVQcEeqNyhPkQ=="],
"@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=="], "@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=="],
@ -1513,7 +1509,7 @@
"@pkgjs/parseargs": ["@pkgjs/parseargs@0.11.0", "", {}, "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg=="], "@pkgjs/parseargs": ["@pkgjs/parseargs@0.11.0", "", {}, "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg=="],
"@pkgr/core": ["@pkgr/core@0.2.2", "", {}, "sha512-25L86MyPvnlQoX2MTIV2OiUcb6vJ6aRbFa9pbwByn95INKD5mFH2smgjDhq+fwJoqAgvgbdJLj6Tz7V9X5CFAQ=="], "@pkgr/core": ["@pkgr/core@0.2.9", "", {}, "sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA=="],
"@playwright/test": ["@playwright/test@1.51.1", "", { "dependencies": { "playwright": "1.51.1" }, "bin": { "playwright": "cli.js" } }, "sha512-nM+kEaTSAoVlXmMPH10017vn3FSiFqr/bh4fKg9vmAdMfd9SDqRZNvPSiAHADc/itWak+qPvMPZQOPwCBW7k7Q=="], "@playwright/test": ["@playwright/test@1.51.1", "", { "dependencies": { "playwright": "1.51.1" }, "bin": { "playwright": "cli.js" } }, "sha512-nM+kEaTSAoVlXmMPH10017vn3FSiFqr/bh4fKg9vmAdMfd9SDqRZNvPSiAHADc/itWak+qPvMPZQOPwCBW7k7Q=="],
@ -2977,7 +2973,7 @@
"eslint-plugin-node": ["eslint-plugin-node@11.1.0", "", { "dependencies": { "eslint-plugin-es": "^3.0.0", "eslint-utils": "^2.0.0", "ignore": "^5.1.1", "minimatch": "^3.0.4", "resolve": "^1.10.1", "semver": "^6.1.0" }, "peerDependencies": { "eslint": ">=5.16.0" } }, "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g=="], "eslint-plugin-node": ["eslint-plugin-node@11.1.0", "", { "dependencies": { "eslint-plugin-es": "^3.0.0", "eslint-utils": "^2.0.0", "ignore": "^5.1.1", "minimatch": "^3.0.4", "resolve": "^1.10.1", "semver": "^6.1.0" }, "peerDependencies": { "eslint": ">=5.16.0" } }, "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g=="],
"eslint-plugin-prettier": ["eslint-plugin-prettier@5.2.6", "", { "dependencies": { "prettier-linter-helpers": "^1.0.0", "synckit": "^0.11.0" }, "peerDependencies": { "@types/eslint": ">=8.0.0", "eslint": ">=8.0.0", "eslint-config-prettier": ">= 7.0.0 <10.0.0 || >=10.1.0", "prettier": ">=3.0.0" }, "optionalPeers": ["@types/eslint", "eslint-config-prettier"] }, "sha512-mUcf7QG2Tjk7H055Jk0lGBjbgDnfrvqjhXh9t2xLMSCjZVcw9Rb1V6sVNXO0th3jgeO7zllWPTNRil3JW94TnQ=="], "eslint-plugin-prettier": ["eslint-plugin-prettier@5.5.1", "", { "dependencies": { "prettier-linter-helpers": "^1.0.0", "synckit": "^0.11.7" }, "peerDependencies": { "@types/eslint": ">=8.0.0", "eslint": ">=8.0.0", "eslint-config-prettier": ">= 7.0.0 <10.0.0 || >=10.1.0", "prettier": ">=3.0.0" }, "optionalPeers": ["@types/eslint", "eslint-config-prettier"] }, "sha512-dobTkHT6XaEVOo8IO90Q4DOSxnm3Y151QxPJlM/vKC0bVy+d6cVWQZLlFiuZPP0wS6vZwSKeJgKkcS+KfMBlRw=="],
"eslint-plugin-promise": ["eslint-plugin-promise@5.2.0", "", { "peerDependencies": { "eslint": "^7.0.0" } }, "sha512-SftLb1pUG01QYq2A/hGAWfDRXqYD82zE7j7TopDOyNdU+7SvvoXREls/+PRTY17vUXzXnZA/zfnyKgRH6x4JJw=="], "eslint-plugin-promise": ["eslint-plugin-promise@5.2.0", "", { "peerDependencies": { "eslint": "^7.0.0" } }, "sha512-SftLb1pUG01QYq2A/hGAWfDRXqYD82zE7j7TopDOyNdU+7SvvoXREls/+PRTY17vUXzXnZA/zfnyKgRH6x4JJw=="],
@ -4707,8 +4703,6 @@
"safer-buffer": ["safer-buffer@2.1.2", "", {}, "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="], "safer-buffer": ["safer-buffer@2.1.2", "", {}, "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="],
"sax": ["sax@1.2.4", "", {}, "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw=="],
"saxes": ["saxes@6.0.0", "", { "dependencies": { "xmlchars": "^2.2.0" } }, "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA=="], "saxes": ["saxes@6.0.0", "", { "dependencies": { "xmlchars": "^2.2.0" } }, "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA=="],
"scheduler": ["scheduler@0.23.2", "", { "dependencies": { "loose-envify": "^1.1.0" } }, "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ=="], "scheduler": ["scheduler@0.23.2", "", { "dependencies": { "loose-envify": "^1.1.0" } }, "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ=="],
@ -4929,10 +4923,6 @@
"stylis": ["stylis@4.2.0", "", {}, "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw=="], "stylis": ["stylis@4.2.0", "", {}, "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw=="],
"stylus": ["stylus@0.59.0", "", { "dependencies": { "@adobe/css-tools": "^4.0.1", "debug": "^4.3.2", "glob": "^7.1.6", "sax": "~1.2.4", "source-map": "^0.7.3" }, "bin": { "stylus": "bin/stylus" } }, "sha512-lQ9w/XIOH5ZHVNuNbWW8D822r+/wBSO/d6XvtyHLF7LW4KaCIDeVbvn5DF8fGCJAUCwVhVi/h6J0NUcnylUEjg=="],
"stylus-loader": ["stylus-loader@7.1.3", "", { "dependencies": { "fast-glob": "^3.2.12", "normalize-path": "^3.0.0" }, "peerDependencies": { "stylus": ">=0.52.4", "webpack": "^5.0.0" } }, "sha512-TY0SKwiY7D2kMd3UxaWKSf3xHF0FFN/FAfsSqfrhxRT/koXTwffq2cgEWDkLQz7VojMu7qEEHt5TlMjkPx9UDw=="],
"supports-color": ["supports-color@8.1.1", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q=="], "supports-color": ["supports-color@8.1.1", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q=="],
"supports-preserve-symlinks-flag": ["supports-preserve-symlinks-flag@1.0.0", "", {}, "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="], "supports-preserve-symlinks-flag": ["supports-preserve-symlinks-flag@1.0.0", "", {}, "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="],
@ -4951,7 +4941,7 @@
"synchronous-promise": ["synchronous-promise@2.0.17", "", {}, "sha512-AsS729u2RHUfEra9xJrE39peJcc2stq2+poBXX8bcM08Y6g9j/i/PUzwNQqkaJde7Ntg1TO7bSREbR5sdosQ+g=="], "synchronous-promise": ["synchronous-promise@2.0.17", "", {}, "sha512-AsS729u2RHUfEra9xJrE39peJcc2stq2+poBXX8bcM08Y6g9j/i/PUzwNQqkaJde7Ntg1TO7bSREbR5sdosQ+g=="],
"synckit": ["synckit@0.11.3", "", { "dependencies": { "@pkgr/core": "^0.2.1", "tslib": "^2.8.1" } }, "sha512-szhWDqNNI9etJUvbZ1/cx1StnZx8yMmFxme48SwR4dty4ioSY50KEZlpv0qAfgc1fpRzuh9hBXEzoCpJ779dLg=="], "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=="], "tailwind-merge": ["tailwind-merge@2.6.0", "", {}, "sha512-P+Vu1qXfzediirmHOC3xKGAYeZtPcV9g76X+xg2FD4tYgR71ewMA35Y3sCz3zhiN/dwefRpJX0yBcgwi1fXNQA=="],
@ -5403,7 +5393,7 @@
"@eslint-community/eslint-utils/eslint-visitor-keys": ["eslint-visitor-keys@3.4.3", "", {}, "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag=="], "@eslint-community/eslint-utils/eslint-visitor-keys": ["eslint-visitor-keys@3.4.3", "", {}, "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag=="],
"@externals/devDependencies/prettier-plugin-tailwindcss": ["prettier-plugin-tailwindcss@0.5.14", "", { "peerDependencies": { "@ianvs/prettier-plugin-sort-imports": "*", "@prettier/plugin-pug": "*", "@shopify/prettier-plugin-liquid": "*", "@trivago/prettier-plugin-sort-imports": "*", "@zackad/prettier-plugin-twig-melody": "*", "prettier": "^3.0", "prettier-plugin-astro": "*", "prettier-plugin-css-order": "*", "prettier-plugin-import-sort": "*", "prettier-plugin-jsdoc": "*", "prettier-plugin-marko": "*", "prettier-plugin-organize-attributes": "*", "prettier-plugin-organize-imports": "*", "prettier-plugin-sort-imports": "*", "prettier-plugin-style-order": "*", "prettier-plugin-svelte": "*" }, "optionalPeers": ["@ianvs/prettier-plugin-sort-imports", "@prettier/plugin-pug", "@shopify/prettier-plugin-liquid", "@trivago/prettier-plugin-sort-imports", "@zackad/prettier-plugin-twig-melody", "prettier-plugin-astro", "prettier-plugin-css-order", "prettier-plugin-import-sort", "prettier-plugin-jsdoc", "prettier-plugin-marko", "prettier-plugin-organize-attributes", "prettier-plugin-organize-imports", "prettier-plugin-sort-imports", "prettier-plugin-style-order", "prettier-plugin-svelte"] }, "sha512-Puaz+wPUAhFp8Lo9HuciYKM2Y2XExESjeT+9NQoVFXZsPPnc9VYss2SpxdQ6vbatmt8/4+SN0oe0I1cPDABg9Q=="], "@externals/devDependencies/prettier": ["prettier@3.6.2", "", { "bin": { "prettier": "bin/prettier.cjs" } }, "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ=="],
"@isaacs/cliui/string-width": ["string-width@5.1.2", "", { "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", "strip-ansi": "^7.0.1" } }, "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA=="], "@isaacs/cliui/string-width": ["string-width@5.1.2", "", { "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", "strip-ansi": "^7.0.1" } }, "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA=="],
@ -6467,8 +6457,6 @@
"style-loader/schema-utils": ["schema-utils@2.7.1", "", { "dependencies": { "@types/json-schema": "^7.0.5", "ajv": "^6.12.4", "ajv-keywords": "^3.5.2" } }, "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg=="], "style-loader/schema-utils": ["schema-utils@2.7.1", "", { "dependencies": { "@types/json-schema": "^7.0.5", "ajv": "^6.12.4", "ajv-keywords": "^3.5.2" } }, "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg=="],
"stylus/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=="],
"tailwindcss/object-hash": ["object-hash@3.0.0", "", {}, "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw=="], "tailwindcss/object-hash": ["object-hash@3.0.0", "", {}, "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw=="],
"tar/fs-minipass": ["fs-minipass@2.1.0", "", { "dependencies": { "minipass": "^3.0.0" } }, "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg=="], "tar/fs-minipass": ["fs-minipass@2.1.0", "", { "dependencies": { "minipass": "^3.0.0" } }, "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg=="],

View File

@ -1 +1 @@
43bc142439aab1a6514ba1711f86d64ac8bb1acb d383be7c720ec61f5bb1262ebe70893873718951

View File

@ -3,6 +3,41 @@
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [3.10.4](https://github.com/OHIF/Viewers/compare/v3.10.2...v3.10.4) (2025-07-23)
**Note:** Version bump only for package @ohif/extension-cornerstone-dicom-pmap
## [3.10.2](https://github.com/OHIF/Viewers/compare/v3.10.1...v3.10.2) (2025-06-09)
**Note:** Version bump only for package @ohif/extension-cornerstone-dicom-pmap
## [3.10.1](https://github.com/OHIF/Viewers/compare/v3.10.0...v3.10.1) (2025-04-11)
### Bug Fixes
* make datasource selection work and UI fixes ([#4952](https://github.com/OHIF/Viewers/issues/4952)) ([aaba8bf](https://github.com/OHIF/Viewers/commit/aaba8bf1b04be6c00a88f1f5f29cb24133b0c39e))
# [3.10.0](https://github.com/OHIF/Viewers/compare/v3.10.0-beta.159...v3.10.0) (2025-04-10)
**Note:** Version bump only for package @ohif/extension-cornerstone-dicom-pmap
# [3.10.0-beta.159](https://github.com/OHIF/Viewers/compare/v3.10.0-beta.158...v3.10.0-beta.159) (2025-04-09) # [3.10.0-beta.159](https://github.com/OHIF/Viewers/compare/v3.10.0-beta.158...v3.10.0-beta.159) (2025-04-09)

View File

@ -1,6 +1,6 @@
{ {
"name": "@ohif/extension-cornerstone-dicom-pmap", "name": "@ohif/extension-cornerstone-dicom-pmap",
"version": "3.10.0-beta.159", "version": "3.10.4",
"description": "DICOM Parametric Map read workflow", "description": "DICOM Parametric Map read workflow",
"author": "OHIF", "author": "OHIF",
"license": "MIT", "license": "MIT",
@ -33,10 +33,10 @@
"start": "yarn run dev" "start": "yarn run dev"
}, },
"peerDependencies": { "peerDependencies": {
"@ohif/core": "3.10.0-beta.159", "@ohif/core": "3.10.4",
"@ohif/extension-cornerstone": "3.10.0-beta.159", "@ohif/extension-cornerstone": "3.10.4",
"@ohif/extension-default": "3.10.0-beta.159", "@ohif/extension-default": "3.10.4",
"@ohif/i18n": "3.10.0-beta.159", "@ohif/i18n": "3.10.4",
"prop-types": "^15.6.2", "prop-types": "^15.6.2",
"react": "^18.3.1", "react": "^18.3.1",
"react-dom": "^18.3.1", "react-dom": "^18.3.1",
@ -46,8 +46,8 @@
}, },
"dependencies": { "dependencies": {
"@babel/runtime": "^7.20.13", "@babel/runtime": "^7.20.13",
"@cornerstonejs/adapters": "^3.9.5", "@cornerstonejs/adapters": "^3.11.6",
"@cornerstonejs/core": "^3.9.5", "@cornerstonejs/core": "^3.11.6",
"@kitware/vtk.js": "32.12.0", "@kitware/vtk.js": "32.12.0",
"react-color": "^2.19.3" "react-color": "^2.19.3"
} }

View File

@ -3,6 +3,38 @@
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [3.10.4](https://github.com/OHIF/Viewers/compare/v3.10.2...v3.10.4) (2025-07-23)
**Note:** Version bump only for package @ohif/extension-cornerstone-dicom-rt
## [3.10.2](https://github.com/OHIF/Viewers/compare/v3.10.1...v3.10.2) (2025-06-09)
**Note:** Version bump only for package @ohif/extension-cornerstone-dicom-rt
## [3.10.1](https://github.com/OHIF/Viewers/compare/v3.10.0...v3.10.1) (2025-04-11)
**Note:** Version bump only for package @ohif/extension-cornerstone-dicom-rt
# [3.10.0](https://github.com/OHIF/Viewers/compare/v3.10.0-beta.159...v3.10.0) (2025-04-10)
**Note:** Version bump only for package @ohif/extension-cornerstone-dicom-rt
# [3.10.0-beta.159](https://github.com/OHIF/Viewers/compare/v3.10.0-beta.158...v3.10.0-beta.159) (2025-04-09) # [3.10.0-beta.159](https://github.com/OHIF/Viewers/compare/v3.10.0-beta.158...v3.10.0-beta.159) (2025-04-09)
**Note:** Version bump only for package @ohif/extension-cornerstone-dicom-rt **Note:** Version bump only for package @ohif/extension-cornerstone-dicom-rt

View File

@ -1,6 +1,6 @@
{ {
"name": "@ohif/extension-cornerstone-dicom-rt", "name": "@ohif/extension-cornerstone-dicom-rt",
"version": "3.10.0-beta.159", "version": "3.10.4",
"description": "DICOM RT read workflow", "description": "DICOM RT read workflow",
"author": "OHIF", "author": "OHIF",
"license": "MIT", "license": "MIT",
@ -33,10 +33,10 @@
"start": "yarn run dev" "start": "yarn run dev"
}, },
"peerDependencies": { "peerDependencies": {
"@ohif/core": "3.10.0-beta.159", "@ohif/core": "3.10.4",
"@ohif/extension-cornerstone": "3.10.0-beta.159", "@ohif/extension-cornerstone": "3.10.4",
"@ohif/extension-default": "3.10.0-beta.159", "@ohif/extension-default": "3.10.4",
"@ohif/i18n": "3.10.0-beta.159", "@ohif/i18n": "3.10.4",
"prop-types": "^15.6.2", "prop-types": "^15.6.2",
"react": "^18.3.1", "react": "^18.3.1",
"react-dom": "^18.3.1", "react-dom": "^18.3.1",

View File

@ -3,6 +3,41 @@
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [3.10.4](https://github.com/OHIF/Viewers/compare/v3.10.2...v3.10.4) (2025-07-23)
**Note:** Version bump only for package @ohif/extension-cornerstone-dicom-seg
## [3.10.2](https://github.com/OHIF/Viewers/compare/v3.10.1...v3.10.2) (2025-06-09)
**Note:** Version bump only for package @ohif/extension-cornerstone-dicom-seg
## [3.10.1](https://github.com/OHIF/Viewers/compare/v3.10.0...v3.10.1) (2025-04-11)
### Bug Fixes
* make datasource selection work and UI fixes ([#4952](https://github.com/OHIF/Viewers/issues/4952)) ([aaba8bf](https://github.com/OHIF/Viewers/commit/aaba8bf1b04be6c00a88f1f5f29cb24133b0c39e))
# [3.10.0](https://github.com/OHIF/Viewers/compare/v3.10.0-beta.159...v3.10.0) (2025-04-10)
**Note:** Version bump only for package @ohif/extension-cornerstone-dicom-seg
# [3.10.0-beta.159](https://github.com/OHIF/Viewers/compare/v3.10.0-beta.158...v3.10.0-beta.159) (2025-04-09) # [3.10.0-beta.159](https://github.com/OHIF/Viewers/compare/v3.10.0-beta.158...v3.10.0-beta.159) (2025-04-09)

View File

@ -1,6 +1,6 @@
{ {
"name": "@ohif/extension-cornerstone-dicom-seg", "name": "@ohif/extension-cornerstone-dicom-seg",
"version": "3.10.0-beta.159", "version": "3.10.4",
"description": "DICOM SEG read workflow", "description": "DICOM SEG read workflow",
"author": "OHIF", "author": "OHIF",
"license": "MIT", "license": "MIT",
@ -33,10 +33,10 @@
"start": "yarn run dev" "start": "yarn run dev"
}, },
"peerDependencies": { "peerDependencies": {
"@ohif/core": "3.10.0-beta.159", "@ohif/core": "3.10.4",
"@ohif/extension-cornerstone": "3.10.0-beta.159", "@ohif/extension-cornerstone": "3.10.4",
"@ohif/extension-default": "3.10.0-beta.159", "@ohif/extension-default": "3.10.4",
"@ohif/i18n": "3.10.0-beta.159", "@ohif/i18n": "3.10.4",
"prop-types": "^15.6.2", "prop-types": "^15.6.2",
"react": "^18.3.1", "react": "^18.3.1",
"react-dom": "^18.3.1", "react-dom": "^18.3.1",
@ -46,8 +46,8 @@
}, },
"dependencies": { "dependencies": {
"@babel/runtime": "^7.20.13", "@babel/runtime": "^7.20.13",
"@cornerstonejs/adapters": "^3.9.5", "@cornerstonejs/adapters": "^3.11.6",
"@cornerstonejs/core": "^3.9.5", "@cornerstonejs/core": "^3.11.6",
"@kitware/vtk.js": "32.12.0", "@kitware/vtk.js": "32.12.0",
"react-color": "^2.19.3" "react-color": "^2.19.3"
} }

View File

@ -3,6 +3,41 @@
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [3.10.4](https://github.com/OHIF/Viewers/compare/v3.10.2...v3.10.4) (2025-07-23)
**Note:** Version bump only for package @ohif/extension-cornerstone-dicom-sr
## [3.10.2](https://github.com/OHIF/Viewers/compare/v3.10.1...v3.10.2) (2025-06-09)
**Note:** Version bump only for package @ohif/extension-cornerstone-dicom-sr
## [3.10.1](https://github.com/OHIF/Viewers/compare/v3.10.0...v3.10.1) (2025-04-11)
### Bug Fixes
* make datasource selection work and UI fixes ([#4952](https://github.com/OHIF/Viewers/issues/4952)) ([aaba8bf](https://github.com/OHIF/Viewers/commit/aaba8bf1b04be6c00a88f1f5f29cb24133b0c39e))
# [3.10.0](https://github.com/OHIF/Viewers/compare/v3.10.0-beta.159...v3.10.0) (2025-04-10)
**Note:** Version bump only for package @ohif/extension-cornerstone-dicom-sr
# [3.10.0-beta.159](https://github.com/OHIF/Viewers/compare/v3.10.0-beta.158...v3.10.0-beta.159) (2025-04-09) # [3.10.0-beta.159](https://github.com/OHIF/Viewers/compare/v3.10.0-beta.158...v3.10.0-beta.159) (2025-04-09)

View File

@ -1,6 +1,6 @@
{ {
"name": "@ohif/extension-cornerstone-dicom-sr", "name": "@ohif/extension-cornerstone-dicom-sr",
"version": "3.10.0-beta.159", "version": "3.10.4",
"description": "OHIF extension for an SR Cornerstone Viewport", "description": "OHIF extension for an SR Cornerstone Viewport",
"author": "OHIF", "author": "OHIF",
"license": "MIT", "license": "MIT",
@ -34,10 +34,10 @@
"test:unit:ci": "jest --ci --runInBand --collectCoverage --passWithNoTests" "test:unit:ci": "jest --ci --runInBand --collectCoverage --passWithNoTests"
}, },
"peerDependencies": { "peerDependencies": {
"@ohif/core": "3.10.0-beta.159", "@ohif/core": "3.10.4",
"@ohif/extension-cornerstone": "3.10.0-beta.159", "@ohif/extension-cornerstone": "3.10.4",
"@ohif/extension-measurement-tracking": "3.10.0-beta.159", "@ohif/extension-measurement-tracking": "3.10.4",
"@ohif/ui": "3.10.0-beta.159", "@ohif/ui": "3.10.4",
"dcmjs": "*", "dcmjs": "*",
"dicom-parser": "^1.8.9", "dicom-parser": "^1.8.9",
"hammerjs": "^2.0.8", "hammerjs": "^2.0.8",
@ -46,9 +46,9 @@
}, },
"dependencies": { "dependencies": {
"@babel/runtime": "^7.20.13", "@babel/runtime": "^7.20.13",
"@cornerstonejs/adapters": "^3.9.5", "@cornerstonejs/adapters": "^3.11.6",
"@cornerstonejs/core": "^3.9.5", "@cornerstonejs/core": "^3.11.6",
"@cornerstonejs/tools": "^3.9.5", "@cornerstonejs/tools": "^3.11.6",
"classnames": "^2.3.2" "classnames": "^2.3.2"
} }
} }

View File

@ -3,6 +3,41 @@
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [3.10.4](https://github.com/OHIF/Viewers/compare/v3.10.2...v3.10.4) (2025-07-23)
**Note:** Version bump only for package @ohif/extension-cornerstone-dynamic-volume
## [3.10.2](https://github.com/OHIF/Viewers/compare/v3.10.1...v3.10.2) (2025-06-09)
**Note:** Version bump only for package @ohif/extension-cornerstone-dynamic-volume
## [3.10.1](https://github.com/OHIF/Viewers/compare/v3.10.0...v3.10.1) (2025-04-11)
### Bug Fixes
* make datasource selection work and UI fixes ([#4952](https://github.com/OHIF/Viewers/issues/4952)) ([aaba8bf](https://github.com/OHIF/Viewers/commit/aaba8bf1b04be6c00a88f1f5f29cb24133b0c39e))
# [3.10.0](https://github.com/OHIF/Viewers/compare/v3.10.0-beta.159...v3.10.0) (2025-04-10)
**Note:** Version bump only for package @ohif/extension-cornerstone-dynamic-volume
# [3.10.0-beta.159](https://github.com/OHIF/Viewers/compare/v3.10.0-beta.158...v3.10.0-beta.159) (2025-04-09) # [3.10.0-beta.159](https://github.com/OHIF/Viewers/compare/v3.10.0-beta.158...v3.10.0-beta.159) (2025-04-09)

View File

@ -1,6 +1,6 @@
{ {
"name": "@ohif/extension-cornerstone-dynamic-volume", "name": "@ohif/extension-cornerstone-dynamic-volume",
"version": "3.10.0-beta.159", "version": "3.10.4",
"description": "OHIF extension for 4D volumes data", "description": "OHIF extension for 4D volumes data",
"author": "OHIF", "author": "OHIF",
"license": "MIT", "license": "MIT",
@ -29,11 +29,11 @@
"test:unit:ci": "jest --ci --runInBand --collectCoverage --passWithNoTests" "test:unit:ci": "jest --ci --runInBand --collectCoverage --passWithNoTests"
}, },
"peerDependencies": { "peerDependencies": {
"@ohif/core": "3.10.0-beta.159", "@ohif/core": "3.10.4",
"@ohif/extension-cornerstone": "3.10.0-beta.159", "@ohif/extension-cornerstone": "3.10.4",
"@ohif/extension-default": "3.10.0-beta.159", "@ohif/extension-default": "3.10.4",
"@ohif/i18n": "3.10.0-beta.159", "@ohif/i18n": "3.10.4",
"@ohif/ui": "3.10.0-beta.159", "@ohif/ui": "3.10.4",
"dcmjs": "*", "dcmjs": "*",
"dicom-parser": "^1.8.21", "dicom-parser": "^1.8.21",
"hammerjs": "^2.0.8", "hammerjs": "^2.0.8",
@ -42,8 +42,8 @@
}, },
"dependencies": { "dependencies": {
"@babel/runtime": "^7.20.13", "@babel/runtime": "^7.20.13",
"@cornerstonejs/core": "^3.9.5", "@cornerstonejs/core": "^3.11.6",
"@cornerstonejs/tools": "^3.9.5", "@cornerstonejs/tools": "^3.11.6",
"classnames": "^2.3.2" "classnames": "^2.3.2"
} }
} }

View File

@ -3,6 +3,41 @@
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [3.10.4](https://github.com/OHIF/Viewers/compare/v3.10.2...v3.10.4) (2025-07-23)
**Note:** Version bump only for package @ohif/extension-cornerstone
## [3.10.2](https://github.com/OHIF/Viewers/compare/v3.10.1...v3.10.2) (2025-06-09)
**Note:** Version bump only for package @ohif/extension-cornerstone
## [3.10.1](https://github.com/OHIF/Viewers/compare/v3.10.0...v3.10.1) (2025-04-11)
### Bug Fixes
* make datasource selection work and UI fixes ([#4952](https://github.com/OHIF/Viewers/issues/4952)) ([aaba8bf](https://github.com/OHIF/Viewers/commit/aaba8bf1b04be6c00a88f1f5f29cb24133b0c39e))
# [3.10.0](https://github.com/OHIF/Viewers/compare/v3.10.0-beta.159...v3.10.0) (2025-04-10)
**Note:** Version bump only for package @ohif/extension-cornerstone
# [3.10.0-beta.159](https://github.com/OHIF/Viewers/compare/v3.10.0-beta.158...v3.10.0-beta.159) (2025-04-09) # [3.10.0-beta.159](https://github.com/OHIF/Viewers/compare/v3.10.0-beta.158...v3.10.0-beta.159) (2025-04-09)

View File

@ -1,6 +1,6 @@
{ {
"name": "@ohif/extension-cornerstone", "name": "@ohif/extension-cornerstone",
"version": "3.10.0-beta.159", "version": "3.10.4",
"description": "OHIF extension for Cornerstone", "description": "OHIF extension for Cornerstone",
"author": "OHIF", "author": "OHIF",
"license": "MIT", "license": "MIT",
@ -38,9 +38,9 @@
"@cornerstonejs/codec-libjpeg-turbo-8bit": "^1.2.2", "@cornerstonejs/codec-libjpeg-turbo-8bit": "^1.2.2",
"@cornerstonejs/codec-openjpeg": "^1.2.4", "@cornerstonejs/codec-openjpeg": "^1.2.4",
"@cornerstonejs/codec-openjph": "^2.4.5", "@cornerstonejs/codec-openjph": "^2.4.5",
"@cornerstonejs/dicom-image-loader": "^3.9.5", "@cornerstonejs/dicom-image-loader": "^3.11.6",
"@ohif/core": "3.10.0-beta.159", "@ohif/core": "3.10.4",
"@ohif/ui": "3.10.0-beta.159", "@ohif/ui": "3.10.4",
"dcmjs": "*", "dcmjs": "*",
"dicom-parser": "^1.8.21", "dicom-parser": "^1.8.21",
"hammerjs": "^2.0.8", "hammerjs": "^2.0.8",
@ -51,12 +51,12 @@
}, },
"dependencies": { "dependencies": {
"@babel/runtime": "^7.20.13", "@babel/runtime": "^7.20.13",
"@cornerstonejs/adapters": "^3.9.5", "@cornerstonejs/adapters": "^3.11.6",
"@cornerstonejs/ai": "^3.9.5", "@cornerstonejs/ai": "^3.11.6",
"@cornerstonejs/core": "^3.9.5", "@cornerstonejs/core": "^3.11.6",
"@cornerstonejs/labelmap-interpolation": "^3.9.5", "@cornerstonejs/labelmap-interpolation": "^3.11.6",
"@cornerstonejs/polymorphic-segmentation": "^3.9.5", "@cornerstonejs/polymorphic-segmentation": "^3.11.6",
"@cornerstonejs/tools": "^3.9.5", "@cornerstonejs/tools": "^3.11.6",
"@itk-wasm/morphological-contour-interpolation": "1.1.0", "@itk-wasm/morphological-contour-interpolation": "1.1.0",
"@kitware/vtk.js": "32.12.0", "@kitware/vtk.js": "32.12.0",
"html2canvas": "^1.4.1", "html2canvas": "^1.4.1",

View File

@ -64,7 +64,7 @@ export const fourUp = {
customViewportProps: { customViewportProps: {
hideOverlays: true, hideOverlays: true,
}, },
syncGroups: [VOI_SYNC_GROUP, HYDRATE_SEG_SYNC_GROUP], syncGroups: [HYDRATE_SEG_SYNC_GROUP],
}, },
displaySets: [ displaySets: [
{ {

View File

@ -71,7 +71,7 @@ export const mprAnd3DVolumeViewport = {
customViewportProps: { customViewportProps: {
hideOverlays: true, hideOverlays: true,
}, },
syncGroups: [VOI_SYNC_GROUP, HYDRATE_SEG_SYNC_GROUP], syncGroups: [HYDRATE_SEG_SYNC_GROUP],
}, },
displaySets: [ displaySets: [
{ {

View File

@ -47,7 +47,7 @@ export const only3D = {
orientation: 'coronal', orientation: 'coronal',
customViewportProps: { customViewportProps: {
hideOverlays: true, hideOverlays: true,
syncGroups: [VOI_SYNC_GROUP, HYDRATE_SEG_SYNC_GROUP], syncGroups: [HYDRATE_SEG_SYNC_GROUP],
}, },
}, },
displaySets: [ displaySets: [

View File

@ -43,6 +43,7 @@ import {
setupSegmentationDataModifiedHandler, setupSegmentationDataModifiedHandler,
setupSegmentationModifiedHandler, setupSegmentationModifiedHandler,
} from './utils/segmentationHandlers'; } from './utils/segmentationHandlers';
import { initializeWebWorkerProgressHandler } from './utils/initWebWorkerProgressHandler';
const { registerColormap } = csUtilities.colormap; const { registerColormap } = csUtilities.colormap;
@ -289,10 +290,16 @@ export default async function init({
eventTarget.addEventListenerDebounced( eventTarget.addEventListenerDebounced(
EVENTS.ERROR_EVENT, EVENTS.ERROR_EVENT,
({ detail }) => { ({ detail }) => {
// Create a stable ID for deduplication based on error type and message
const errorId = `cornerstone-error-${detail.type}-${detail.message.substring(0, 50)}`;
uiNotificationService.show({ uiNotificationService.show({
title: detail.type, title: detail.type,
message: detail.message, message: detail.message,
type: 'error', type: 'error',
id: errorId,
allowDuplicates: false, // Prevent duplicate error notifications
deduplicationInterval: 30000, // 30 seconds deduplication window
}); });
}, },
100 100
@ -309,40 +316,6 @@ export default async function init({
return { unsubscriptions }; return { unsubscriptions };
} }
function initializeWebWorkerProgressHandler(uiNotificationService) {
const activeToasts = new Map();
// eventTarget.addEventListener(EVENTS.WEB_WORKER_PROGRESS, ({ detail }) => {
// const { progress, type, id } = detail;
// const cacheKey = `${type}-${id}`;
// if (progress === 0 && !activeToasts.has(cacheKey)) {
// const progressPromise = new Promise((resolve, reject) => {
// activeToasts.set(cacheKey, { resolve, reject });
// });
// uiNotificationService.show({
// id: cacheKey,
// title: `${type}`,
// message: `${type}: ${progress}%`,
// autoClose: false,
// promise: progressPromise,
// promiseMessages: {
// loading: `Computing...`,
// success: `Completed successfully`,
// error: 'Web Worker failed',
// },
// });
// } else {
// if (progress === 100) {
// const { resolve } = activeToasts.get(cacheKey);
// resolve({ progress, type });
// activeToasts.delete(cacheKey);
// }
// }
// });
}
/** /**
* Creates a wrapped image load strategy with metadata handling * Creates a wrapped image load strategy with metadata handling
* @param strategyFn - The image loading strategy function to wrap * @param strategyFn - The image loading strategy function to wrap

View File

@ -48,6 +48,8 @@ import ImageOverlayViewerTool from './tools/ImageOverlayViewerTool';
export default function initCornerstoneTools(configuration = {}) { export default function initCornerstoneTools(configuration = {}) {
CrosshairsTool.isAnnotation = false; CrosshairsTool.isAnnotation = false;
LabelmapSlicePropagationTool.isAnnotation = false;
MarkerLabelmapTool.isAnnotation = false;
ReferenceLinesTool.isAnnotation = false; ReferenceLinesTool.isAnnotation = false;
AdvancedMagnifyTool.isAnnotation = false; AdvancedMagnifyTool.isAnnotation = false;
PlanarFreehandContourSegmentationTool.isAnnotation = false; PlanarFreehandContourSegmentationTool.isAnnotation = false;

View File

@ -180,15 +180,14 @@ const CornerstoneViewportDownloadForm = ({
const toolGroup = ToolGroupManager.getToolGroupForViewport(activeViewportId, renderingEngineId); const toolGroup = ToolGroupManager.getToolGroupForViewport(activeViewportId, renderingEngineId);
toolGroup.addViewport(downloadViewportId, renderingEngineId); toolGroup.addViewport(downloadViewportId, renderingEngineId);
Object.keys(toolGroup.getToolInstances()).forEach(toolName => { const toolInstances = toolGroup.getToolInstances();
if (show && toolName !== 'Crosshairs') { const toolInstancesArray = Object.values(toolInstances);
try {
toolGroup.setToolEnabled(toolName); toolInstancesArray.forEach(toolInstance => {
} catch (error) { if (show && toolInstance.constructor.isAnnotation !== false) {
console.debug('Error enabling tool:', error); toolGroup.setToolEnabled(toolInstance.toolName);
}
} else { } else {
toolGroup.setToolDisabled(toolName); toolGroup.setToolDisabled(toolInstance.toolName);
} }
}); });
}; };

View File

@ -0,0 +1,110 @@
import { eventTarget, EVENTS } from '@cornerstonejs/core';
import * as cornerstoneTools from '@cornerstonejs/tools';
/**
* Initializes a handler for web worker progress events.
* Tracks active worker tasks and shows notifications for their progress.
*
* @param uiNotificationService - The UI notification service for showing progress notifications
*/
export function initializeWebWorkerProgressHandler(uiNotificationService: any) {
// Use a single map to track all active worker tasks
const activeWorkerTasks = new Map();
// Create a normalized task key that doesn't include the random ID
// This helps us identify and deduplicate the same type of task
const getNormalizedTaskKey = (type: string) => {
return `worker-task-${type.toLowerCase().replace(/\s+/g, '-')}`;
};
eventTarget.addEventListener(EVENTS.WEB_WORKER_PROGRESS, ({ detail }) => {
let normalizedKey: string | undefined;
let shouldCleanup = false;
try {
const { progress, type, id } = detail;
// Skip notifications for compute statistics
if (type === cornerstoneTools.Enums.WorkerTypes.COMPUTE_STATISTICS) {
return;
}
normalizedKey = getNormalizedTaskKey(type);
if (progress === 0) {
// Check if we're already tracking a task of this type
if (!activeWorkerTasks.has(normalizedKey)) {
const progressPromise = new Promise((resolve, reject) => {
try {
activeWorkerTasks.set(normalizedKey, {
resolve,
reject,
originalId: id,
type,
});
} catch (error) {
console.error(`Error setting active worker task for type "${type}":`, error);
reject(error);
throw error; // Re-throw to trigger outer catch and cleanup
}
});
try {
uiNotificationService.show({
id: normalizedKey, // Use the normalized key as ID for better deduplication
title: `${type}`,
message: `Computing...`,
autoClose: false,
allowDuplicates: false,
deduplicationInterval: 60000, // 60 seconds - prevent frequent notifications of same type
promise: progressPromise,
promiseMessages: {
loading: `Computing...`,
success: `Completed successfully`,
error: 'Web Worker failed',
},
});
} catch (error) {
console.error(`Error showing web worker notification for type "${type}":`, error);
shouldCleanup = true;
throw error;
}
} else {
// Already tracking this type of task, just let it continue
console.debug(`Already tracking a "${type}" task, skipping duplicate notification`);
}
}
// Task completed
else if (progress === 100) {
// Check if we have this task type in our tracking map
const taskData = activeWorkerTasks.get(normalizedKey);
if (taskData) {
// Resolve the promise to update the notification
const { resolve } = taskData;
resolve({ progress, type });
// Mark for cleanup
shouldCleanup = true;
console.debug(`Worker task "${type}" completed successfully`);
}
}
} catch (error) {
console.error(`Error in web worker progress handler for type "${detail?.type}":`, error);
shouldCleanup = true;
} finally {
// Clean up if needed
if (shouldCleanup && normalizedKey) {
try {
activeWorkerTasks.delete(normalizedKey);
} catch (cleanupError) {
console.error(
`Error cleaning up active worker task for type "${detail?.type}":`,
cleanupError
);
}
}
}
});
}

View File

@ -3,6 +3,41 @@
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [3.10.4](https://github.com/OHIF/Viewers/compare/v3.10.2...v3.10.4) (2025-07-23)
**Note:** Version bump only for package @ohif/extension-default
## [3.10.2](https://github.com/OHIF/Viewers/compare/v3.10.1...v3.10.2) (2025-06-09)
**Note:** Version bump only for package @ohif/extension-default
## [3.10.1](https://github.com/OHIF/Viewers/compare/v3.10.0...v3.10.1) (2025-04-11)
### Bug Fixes
* make datasource selection work and UI fixes ([#4952](https://github.com/OHIF/Viewers/issues/4952)) ([aaba8bf](https://github.com/OHIF/Viewers/commit/aaba8bf1b04be6c00a88f1f5f29cb24133b0c39e))
# [3.10.0](https://github.com/OHIF/Viewers/compare/v3.10.0-beta.159...v3.10.0) (2025-04-10)
**Note:** Version bump only for package @ohif/extension-default
# [3.10.0-beta.159](https://github.com/OHIF/Viewers/compare/v3.10.0-beta.158...v3.10.0-beta.159) (2025-04-09) # [3.10.0-beta.159](https://github.com/OHIF/Viewers/compare/v3.10.0-beta.158...v3.10.0-beta.159) (2025-04-09)

View File

@ -1,6 +1,6 @@
{ {
"name": "@ohif/extension-default", "name": "@ohif/extension-default",
"version": "3.10.0-beta.159", "version": "3.10.4",
"description": "Common/default features and functionality for basic image viewing", "description": "Common/default features and functionality for basic image viewing",
"author": "OHIF Core Team", "author": "OHIF Core Team",
"license": "MIT", "license": "MIT",
@ -32,8 +32,8 @@
"start": "yarn run dev" "start": "yarn run dev"
}, },
"peerDependencies": { "peerDependencies": {
"@ohif/core": "3.10.0-beta.159", "@ohif/core": "3.10.4",
"@ohif/i18n": "3.10.0-beta.159", "@ohif/i18n": "3.10.4",
"dcmjs": "*", "dcmjs": "*",
"dicomweb-client": "^0.10.4", "dicomweb-client": "^0.10.4",
"prop-types": "^15.6.2", "prop-types": "^15.6.2",

View File

@ -80,6 +80,7 @@ export default class ContextMenuController {
this.services.uiDialogService.hide('context-menu'); this.services.uiDialogService.hide('context-menu');
this.services.uiDialogService.show({ this.services.uiDialogService.show({
id: 'context-menu', id: 'context-menu',
showOverlay: false,
defaultPosition: ContextMenuController._getDefaultPosition( defaultPosition: ContextMenuController._getDefaultPosition(
defaultPointsPosition, defaultPointsPosition,
event?.detail || event, event?.detail || event,

View File

@ -128,7 +128,9 @@ const DicomTagBrowser = ({
<div className="mb-6 flex flex-row items-start pl-1"> <div className="mb-6 flex flex-row items-start pl-1">
<div className="flex w-full flex-row items-start gap-4"> <div className="flex w-full flex-row items-start gap-4">
<div className="flex w-1/3 flex-col"> <div className="flex w-1/3 flex-col">
<span className="text-muted-foreground flex h-6 items-center text-xs">Series</span> <span className="text-muted-foreground flex h-6 items-center pb-2 text-base">
Series
</span>
<Select <Select
value={selectedDisplaySetInstanceUID} value={selectedDisplaySetInstanceUID}
onValueChange={value => onSelectChange({ value })} onValueChange={value => onSelectChange({ value })}
@ -154,7 +156,7 @@ const DicomTagBrowser = ({
</div> </div>
{shouldShowInstanceList && ( {shouldShowInstanceList && (
<div className="mx-auto mt-0.5 flex w-1/4 flex-col"> <div className="mx-auto mt-0.5 flex w-1/4 flex-col">
<span className="text-muted-foreground flex h-6 items-center text-xs"> <span className="text-muted-foreground flex h-6 items-center pb-2 text-base">
Instance Number ({instanceNumber} of {activeDisplaySet?.images?.length}) Instance Number ({instanceNumber} of {activeDisplaySet?.images?.length})
</span> </span>
<Slider <Slider
@ -170,7 +172,7 @@ const DicomTagBrowser = ({
</div> </div>
)} )}
<div className="ml-auto mr-1 flex w-1/3 flex-col"> <div className="ml-auto mr-1 flex w-1/3 flex-col">
<span className="text-muted-foreground flex h-6 items-center text-xs"> <span className="text-muted-foreground flex h-6 items-center pb-2 text-base">
Search metadata Search metadata
</span> </span>
<InputFilter <InputFilter
@ -182,7 +184,7 @@ const DicomTagBrowser = ({
placeholder="Search metadata" placeholder="Search metadata"
className="pl-9 pr-9" className="pl-9 pr-9"
/> />
<InputFilter.ClearButton /> <InputFilter.ClearButton className="text-primary mr-0.5 p-0.5" />
</InputFilter> </InputFilter>
</div> </div>
</div> </div>

View File

@ -4,7 +4,7 @@ const collapsedOutsideBorderSize = 4;
const collapsedWidth = 25; const collapsedWidth = 25;
const rightPanelInitialExpandedWidth = 280; const rightPanelInitialExpandedWidth = 280;
const leftPanelInitialExpandedWidth = 292; const leftPanelInitialExpandedWidth = 282;
const panelGroupDefinition = { const panelGroupDefinition = {
groupId: 'viewerLayoutResizablePanelGroup', groupId: 'viewerLayoutResizablePanelGroup',

View File

@ -1,5 +1,5 @@
import React, { useEffect, useMemo, useState } from 'react'; import React, { useCallback, useEffect, useMemo, useState } from 'react';
import { InputDialog, cn } from '@ohif/ui-next'; import { InputDialog } from '@ohif/ui-next';
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@ohif/ui-next'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@ohif/ui-next';
import { useSystem } from '@ohif/core'; import { useSystem } from '@ohif/core';
@ -54,19 +54,19 @@ function ReportDialog({ dataSources, hide, onSave, onCancel }: ReportDialogProps
setReportName(newReportName); setReportName(newReportName);
}, [selectedSeries, seriesOptions]); }, [selectedSeries, seriesOptions]);
const handleSave = () => { const handleSave = useCallback(() => {
onSave({ onSave({
reportName, reportName,
dataSource: selectedDataSource, dataSource: selectedDataSource,
series: selectedSeries, series: selectedSeries,
}); });
hide(); hide();
}; }, [selectedDataSource, selectedSeries, reportName, hide, onSave]);
const handleCancel = () => { const handleCancel = useCallback(() => {
onCancel(); onCancel();
hide(); hide();
}; }, [onCancel, hide]);
const showDataSourceSelect = dataSources?.length > 1; const showDataSourceSelect = dataSources?.length > 1;

View File

@ -37,6 +37,8 @@ import * as utils from './utils';
import { Toolbox } from './utils'; import { Toolbox } from './utils';
import MoreDropdownMenu from './Components/MoreDropdownMenu'; import MoreDropdownMenu from './Components/MoreDropdownMenu';
import requestDisplaySetCreationForStudy from './Panels/requestDisplaySetCreationForStudy'; import requestDisplaySetCreationForStudy from './Panels/requestDisplaySetCreationForStudy';
import { Toolbar } from './Toolbar/Toolbar';
const defaultExtension: Types.Extensions.Extension = { const defaultExtension: Types.Extensions.Extension = {
/** /**
* Only required property. Should be a unique value across all extensions. * Only required property. Should be a unique value across all extensions.
@ -103,4 +105,5 @@ export {
requestDisplaySetCreationForStudy, requestDisplaySetCreationForStudy,
callInputDialog, callInputDialog,
createReportDialogPrompt, createReportDialogPrompt,
Toolbar,
}; };

View File

@ -40,7 +40,7 @@ async function promptSaveReport({ servicesManager, commandsManager, extensionMan
}); });
if (promptResult.action === PROMPT_RESPONSES.CREATE_REPORT) { if (promptResult.action === PROMPT_RESPONSES.CREATE_REPORT) {
const dataSources = extensionManager.getDataSources(); const dataSources = extensionManager.getDataSources(promptResult.dataSourceName);
const dataSource = dataSources[0]; const dataSource = dataSources[0];
const measurementData = measurementService.getMeasurements(measurementFilter); const measurementData = measurementService.getMeasurements(measurementFilter);

View File

@ -3,6 +3,38 @@
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [3.10.4](https://github.com/OHIF/Viewers/compare/v3.10.2...v3.10.4) (2025-07-23)
**Note:** Version bump only for package @ohif/extension-dicom-microscopy
## [3.10.2](https://github.com/OHIF/Viewers/compare/v3.10.1...v3.10.2) (2025-06-09)
**Note:** Version bump only for package @ohif/extension-dicom-microscopy
## [3.10.1](https://github.com/OHIF/Viewers/compare/v3.10.0...v3.10.1) (2025-04-11)
**Note:** Version bump only for package @ohif/extension-dicom-microscopy
# [3.10.0](https://github.com/OHIF/Viewers/compare/v3.10.0-beta.159...v3.10.0) (2025-04-10)
**Note:** Version bump only for package @ohif/extension-dicom-microscopy
# [3.10.0-beta.159](https://github.com/OHIF/Viewers/compare/v3.10.0-beta.158...v3.10.0-beta.159) (2025-04-09) # [3.10.0-beta.159](https://github.com/OHIF/Viewers/compare/v3.10.0-beta.158...v3.10.0-beta.159) (2025-04-09)
**Note:** Version bump only for package @ohif/extension-dicom-microscopy **Note:** Version bump only for package @ohif/extension-dicom-microscopy

View File

@ -1,6 +1,6 @@
{ {
"name": "@ohif/extension-dicom-microscopy", "name": "@ohif/extension-dicom-microscopy",
"version": "3.10.0-beta.159", "version": "3.10.4",
"description": "OHIF extension for DICOM microscopy", "description": "OHIF extension for DICOM microscopy",
"author": "Bill Wallace, md-prog", "author": "Bill Wallace, md-prog",
"license": "MIT", "license": "MIT",
@ -30,10 +30,10 @@
"start": "yarn run dev" "start": "yarn run dev"
}, },
"peerDependencies": { "peerDependencies": {
"@ohif/core": "3.10.0-beta.159", "@ohif/core": "3.10.4",
"@ohif/extension-default": "3.10.0-beta.159", "@ohif/extension-default": "3.10.4",
"@ohif/i18n": "3.10.0-beta.159", "@ohif/i18n": "3.10.4",
"@ohif/ui": "3.10.0-beta.159", "@ohif/ui": "3.10.4",
"prop-types": "^15.6.2", "prop-types": "^15.6.2",
"react": "^18.3.1", "react": "^18.3.1",
"react-dom": "^18.3.1", "react-dom": "^18.3.1",

View File

@ -3,6 +3,38 @@
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [3.10.4](https://github.com/OHIF/Viewers/compare/v3.10.2...v3.10.4) (2025-07-23)
**Note:** Version bump only for package @ohif/extension-dicom-pdf
## [3.10.2](https://github.com/OHIF/Viewers/compare/v3.10.1...v3.10.2) (2025-06-09)
**Note:** Version bump only for package @ohif/extension-dicom-pdf
## [3.10.1](https://github.com/OHIF/Viewers/compare/v3.10.0...v3.10.1) (2025-04-11)
**Note:** Version bump only for package @ohif/extension-dicom-pdf
# [3.10.0](https://github.com/OHIF/Viewers/compare/v3.10.0-beta.159...v3.10.0) (2025-04-10)
**Note:** Version bump only for package @ohif/extension-dicom-pdf
# [3.10.0-beta.159](https://github.com/OHIF/Viewers/compare/v3.10.0-beta.158...v3.10.0-beta.159) (2025-04-09) # [3.10.0-beta.159](https://github.com/OHIF/Viewers/compare/v3.10.0-beta.158...v3.10.0-beta.159) (2025-04-09)
**Note:** Version bump only for package @ohif/extension-dicom-pdf **Note:** Version bump only for package @ohif/extension-dicom-pdf

View File

@ -1,6 +1,6 @@
{ {
"name": "@ohif/extension-dicom-pdf", "name": "@ohif/extension-dicom-pdf",
"version": "3.10.0-beta.159", "version": "3.10.4",
"description": "OHIF extension for PDF display", "description": "OHIF extension for PDF display",
"author": "OHIF", "author": "OHIF",
"license": "MIT", "license": "MIT",
@ -30,8 +30,8 @@
"test:unit:ci": "jest --ci --runInBand --collectCoverage --passWithNoTests" "test:unit:ci": "jest --ci --runInBand --collectCoverage --passWithNoTests"
}, },
"peerDependencies": { "peerDependencies": {
"@ohif/core": "3.10.0-beta.159", "@ohif/core": "3.10.4",
"@ohif/ui": "3.10.0-beta.159", "@ohif/ui": "3.10.4",
"dcmjs": "*", "dcmjs": "*",
"dicom-parser": "^1.8.9", "dicom-parser": "^1.8.9",
"hammerjs": "^2.0.8", "hammerjs": "^2.0.8",

View File

@ -3,6 +3,38 @@
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [3.10.4](https://github.com/OHIF/Viewers/compare/v3.10.2...v3.10.4) (2025-07-23)
**Note:** Version bump only for package @ohif/extension-dicom-video
## [3.10.2](https://github.com/OHIF/Viewers/compare/v3.10.1...v3.10.2) (2025-06-09)
**Note:** Version bump only for package @ohif/extension-dicom-video
## [3.10.1](https://github.com/OHIF/Viewers/compare/v3.10.0...v3.10.1) (2025-04-11)
**Note:** Version bump only for package @ohif/extension-dicom-video
# [3.10.0](https://github.com/OHIF/Viewers/compare/v3.10.0-beta.159...v3.10.0) (2025-04-10)
**Note:** Version bump only for package @ohif/extension-dicom-video
# [3.10.0-beta.159](https://github.com/OHIF/Viewers/compare/v3.10.0-beta.158...v3.10.0-beta.159) (2025-04-09) # [3.10.0-beta.159](https://github.com/OHIF/Viewers/compare/v3.10.0-beta.158...v3.10.0-beta.159) (2025-04-09)
**Note:** Version bump only for package @ohif/extension-dicom-video **Note:** Version bump only for package @ohif/extension-dicom-video

View File

@ -1,6 +1,6 @@
{ {
"name": "@ohif/extension-dicom-video", "name": "@ohif/extension-dicom-video",
"version": "3.10.0-beta.159", "version": "3.10.4",
"description": "OHIF extension for video display", "description": "OHIF extension for video display",
"author": "OHIF", "author": "OHIF",
"license": "MIT", "license": "MIT",
@ -30,8 +30,8 @@
"test:unit:ci": "jest --ci --runInBand --collectCoverage --passWithNoTests" "test:unit:ci": "jest --ci --runInBand --collectCoverage --passWithNoTests"
}, },
"peerDependencies": { "peerDependencies": {
"@ohif/core": "3.10.0-beta.159", "@ohif/core": "3.10.4",
"@ohif/ui": "3.10.0-beta.159", "@ohif/ui": "3.10.4",
"dcmjs": "*", "dcmjs": "*",
"dicom-parser": "^1.8.9", "dicom-parser": "^1.8.9",
"hammerjs": "^2.0.8", "hammerjs": "^2.0.8",

View File

@ -3,6 +3,41 @@
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [3.10.4](https://github.com/OHIF/Viewers/compare/v3.10.2...v3.10.4) (2025-07-23)
**Note:** Version bump only for package @ohif/extension-measurement-tracking
## [3.10.2](https://github.com/OHIF/Viewers/compare/v3.10.1...v3.10.2) (2025-06-09)
**Note:** Version bump only for package @ohif/extension-measurement-tracking
## [3.10.1](https://github.com/OHIF/Viewers/compare/v3.10.0...v3.10.1) (2025-04-11)
### Bug Fixes
* make datasource selection work and UI fixes ([#4952](https://github.com/OHIF/Viewers/issues/4952)) ([aaba8bf](https://github.com/OHIF/Viewers/commit/aaba8bf1b04be6c00a88f1f5f29cb24133b0c39e))
# [3.10.0](https://github.com/OHIF/Viewers/compare/v3.10.0-beta.159...v3.10.0) (2025-04-10)
**Note:** Version bump only for package @ohif/extension-measurement-tracking
# [3.10.0-beta.159](https://github.com/OHIF/Viewers/compare/v3.10.0-beta.158...v3.10.0-beta.159) (2025-04-09) # [3.10.0-beta.159](https://github.com/OHIF/Viewers/compare/v3.10.0-beta.158...v3.10.0-beta.159) (2025-04-09)

View File

@ -1,6 +1,6 @@
{ {
"name": "@ohif/extension-measurement-tracking", "name": "@ohif/extension-measurement-tracking",
"version": "3.10.0-beta.159", "version": "3.10.4",
"description": "Tracking features and functionality for basic image viewing", "description": "Tracking features and functionality for basic image viewing",
"author": "OHIF Core Team", "author": "OHIF Core Team",
"license": "MIT", "license": "MIT",
@ -32,12 +32,12 @@
"start": "yarn run dev" "start": "yarn run dev"
}, },
"peerDependencies": { "peerDependencies": {
"@cornerstonejs/core": "^3.9.5", "@cornerstonejs/core": "^3.11.6",
"@cornerstonejs/tools": "^3.9.5", "@cornerstonejs/tools": "^3.11.6",
"@ohif/core": "3.10.0-beta.159", "@ohif/core": "3.10.4",
"@ohif/extension-cornerstone-dicom-sr": "3.10.0-beta.159", "@ohif/extension-cornerstone-dicom-sr": "3.10.4",
"@ohif/extension-default": "3.10.0-beta.159", "@ohif/extension-default": "3.10.4",
"@ohif/ui": "3.10.0-beta.159", "@ohif/ui": "3.10.4",
"classnames": "^2.3.2", "classnames": "^2.3.2",
"dcmjs": "*", "dcmjs": "*",
"lodash.debounce": "^4.0.8", "lodash.debounce": "^4.0.8",
@ -49,7 +49,7 @@
}, },
"dependencies": { "dependencies": {
"@babel/runtime": "^7.20.13", "@babel/runtime": "^7.20.13",
"@ohif/ui": "3.10.0-beta.159", "@ohif/ui": "3.10.4",
"@xstate/react": "^3.2.2", "@xstate/react": "^3.2.2",
"xstate": "^4.10.0" "xstate": "^4.10.0"
} }

View File

@ -1,6 +1,6 @@
import React from 'react'; import React from 'react';
import { utils } from '@ohif/core'; import { utils } from '@ohif/core';
import { AccordionTrigger, MeasurementTable, useViewportGrid } from '@ohif/ui-next'; import { AccordionTrigger, MeasurementTable, ScrollArea, useViewportGrid } from '@ohif/ui-next';
import { import {
PanelMeasurement, PanelMeasurement,
StudyMeasurements, StudyMeasurements,
@ -83,29 +83,31 @@ function PanelMeasurementTableTracking(props) {
); );
return ( return (
<div data-cy="trackedMeasurements-panel"> <ScrollArea>
<PanelMeasurement <div data-cy="trackedMeasurements-panel">
measurementFilter={measurementFilter} <PanelMeasurement
emptyComponent={EmptyComponent} measurementFilter={measurementFilter}
sourceChildren={props.children} emptyComponent={EmptyComponent}
> sourceChildren={props.children}
<StudyMeasurements grouping={props.grouping}> >
<AccordionGroup.Trigger <StudyMeasurements grouping={props.grouping}>
key="trackingMeasurementsHeader" <AccordionGroup.Trigger
asChild={true} key="trackingMeasurementsHeader"
> asChild={true}
<Header key="trackingHeadChild" /> >
</AccordionGroup.Trigger> <Header key="trackingHeadChild" />
<MeasurementsOrAdditionalFindings </AccordionGroup.Trigger>
key="measurementsOrAdditionalFindings" <MeasurementsOrAdditionalFindings
activeStudyUID={trackedStudy} key="measurementsOrAdditionalFindings"
customHeader={StudyMeasurementsActions} activeStudyUID={trackedStudy}
measurementFilter={measurementFilter} customHeader={StudyMeasurementsActions}
actions={actions} measurementFilter={measurementFilter}
/> actions={actions}
</StudyMeasurements> />
</PanelMeasurement> </StudyMeasurements>
</div> </PanelMeasurement>
</div>
</ScrollArea>
); );
} }

View File

@ -3,6 +3,38 @@
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [3.10.4](https://github.com/OHIF/Viewers/compare/v3.10.2...v3.10.4) (2025-07-23)
**Note:** Version bump only for package @ohif/extension-test
## [3.10.2](https://github.com/OHIF/Viewers/compare/v3.10.1...v3.10.2) (2025-06-09)
**Note:** Version bump only for package @ohif/extension-test
## [3.10.1](https://github.com/OHIF/Viewers/compare/v3.10.0...v3.10.1) (2025-04-11)
**Note:** Version bump only for package @ohif/extension-test
# [3.10.0](https://github.com/OHIF/Viewers/compare/v3.10.0-beta.159...v3.10.0) (2025-04-10)
**Note:** Version bump only for package @ohif/extension-test
# [3.10.0-beta.159](https://github.com/OHIF/Viewers/compare/v3.10.0-beta.158...v3.10.0-beta.159) (2025-04-09) # [3.10.0-beta.159](https://github.com/OHIF/Viewers/compare/v3.10.0-beta.158...v3.10.0-beta.159) (2025-04-09)
**Note:** Version bump only for package @ohif/extension-test **Note:** Version bump only for package @ohif/extension-test

View File

@ -1,6 +1,6 @@
{ {
"name": "@ohif/extension-test", "name": "@ohif/extension-test",
"version": "3.10.0-beta.159", "version": "3.10.4",
"description": "OHIF extension used inside e2e testing", "description": "OHIF extension used inside e2e testing",
"author": "OHIF", "author": "OHIF",
"license": "MIT", "license": "MIT",
@ -30,8 +30,8 @@
"test:unit:ci": "jest --ci --runInBand --collectCoverage --passWithNoTests" "test:unit:ci": "jest --ci --runInBand --collectCoverage --passWithNoTests"
}, },
"peerDependencies": { "peerDependencies": {
"@ohif/core": "3.10.0-beta.159", "@ohif/core": "3.10.4",
"@ohif/ui": "3.10.0-beta.159", "@ohif/ui": "3.10.4",
"dcmjs": "0.38.0", "dcmjs": "0.38.0",
"dicom-parser": "^1.8.9", "dicom-parser": "^1.8.9",
"hammerjs": "^2.0.8", "hammerjs": "^2.0.8",

View File

@ -3,6 +3,38 @@
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [3.10.4](https://github.com/OHIF/Viewers/compare/v3.10.2...v3.10.4) (2025-07-23)
**Note:** Version bump only for package @ohif/extension-tmtv
## [3.10.2](https://github.com/OHIF/Viewers/compare/v3.10.1...v3.10.2) (2025-06-09)
**Note:** Version bump only for package @ohif/extension-tmtv
## [3.10.1](https://github.com/OHIF/Viewers/compare/v3.10.0...v3.10.1) (2025-04-11)
**Note:** Version bump only for package @ohif/extension-tmtv
# [3.10.0](https://github.com/OHIF/Viewers/compare/v3.10.0-beta.159...v3.10.0) (2025-04-10)
**Note:** Version bump only for package @ohif/extension-tmtv
# [3.10.0-beta.159](https://github.com/OHIF/Viewers/compare/v3.10.0-beta.158...v3.10.0-beta.159) (2025-04-09) # [3.10.0-beta.159](https://github.com/OHIF/Viewers/compare/v3.10.0-beta.158...v3.10.0-beta.159) (2025-04-09)
**Note:** Version bump only for package @ohif/extension-tmtv **Note:** Version bump only for package @ohif/extension-tmtv

View File

@ -1,6 +1,6 @@
{ {
"name": "@ohif/extension-tmtv", "name": "@ohif/extension-tmtv",
"version": "3.10.0-beta.159", "version": "3.10.4",
"description": "OHIF extension for Total Metabolic Tumor Volume", "description": "OHIF extension for Total Metabolic Tumor Volume",
"author": "OHIF", "author": "OHIF",
"license": "MIT", "license": "MIT",
@ -30,8 +30,8 @@
"test:unit:ci": "jest --ci --runInBand --collectCoverage --passWithNoTests" "test:unit:ci": "jest --ci --runInBand --collectCoverage --passWithNoTests"
}, },
"peerDependencies": { "peerDependencies": {
"@ohif/core": "3.10.0-beta.159", "@ohif/core": "3.10.4",
"@ohif/ui": "3.10.0-beta.159", "@ohif/ui": "3.10.4",
"dcmjs": "*", "dcmjs": "*",
"dicom-parser": "^1.8.9", "dicom-parser": "^1.8.9",
"hammerjs": "^2.0.8", "hammerjs": "^2.0.8",

View File

@ -1,5 +1,5 @@
{ {
"version": "3.10.0-beta.159", "version": "3.10.4",
"packages": ["extensions/*", "platform/*", "modes/*", "addOns/externals/*"], "packages": ["extensions/*", "platform/*", "modes/*", "addOns/externals/*"],
"npmClient": "yarn" "npmClient": "yarn"
} }

View File

@ -3,6 +3,38 @@
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [3.10.4](https://github.com/OHIF/Viewers/compare/v3.10.2...v3.10.4) (2025-07-23)
**Note:** Version bump only for package @ohif/mode-basic-dev-mode
## [3.10.2](https://github.com/OHIF/Viewers/compare/v3.10.1...v3.10.2) (2025-06-09)
**Note:** Version bump only for package @ohif/mode-basic-dev-mode
## [3.10.1](https://github.com/OHIF/Viewers/compare/v3.10.0...v3.10.1) (2025-04-11)
**Note:** Version bump only for package @ohif/mode-basic-dev-mode
# [3.10.0](https://github.com/OHIF/Viewers/compare/v3.10.0-beta.159...v3.10.0) (2025-04-10)
**Note:** Version bump only for package @ohif/mode-basic-dev-mode
# [3.10.0-beta.159](https://github.com/OHIF/Viewers/compare/v3.10.0-beta.158...v3.10.0-beta.159) (2025-04-09) # [3.10.0-beta.159](https://github.com/OHIF/Viewers/compare/v3.10.0-beta.158...v3.10.0-beta.159) (2025-04-09)
**Note:** Version bump only for package @ohif/mode-basic-dev-mode **Note:** Version bump only for package @ohif/mode-basic-dev-mode

View File

@ -1,6 +1,6 @@
{ {
"name": "@ohif/mode-basic-dev-mode", "name": "@ohif/mode-basic-dev-mode",
"version": "3.10.0-beta.159", "version": "3.10.4",
"description": "Basic OHIF Viewer Using Cornerstone", "description": "Basic OHIF Viewer Using Cornerstone",
"author": "OHIF", "author": "OHIF",
"license": "MIT", "license": "MIT",
@ -31,12 +31,12 @@
"test:unit:ci": "jest --ci --runInBand --collectCoverage --passWithNoTests" "test:unit:ci": "jest --ci --runInBand --collectCoverage --passWithNoTests"
}, },
"peerDependencies": { "peerDependencies": {
"@ohif/core": "3.10.0-beta.159", "@ohif/core": "3.10.4",
"@ohif/extension-cornerstone": "3.10.0-beta.159", "@ohif/extension-cornerstone": "3.10.4",
"@ohif/extension-cornerstone-dicom-sr": "3.10.0-beta.159", "@ohif/extension-cornerstone-dicom-sr": "3.10.4",
"@ohif/extension-default": "3.10.0-beta.159", "@ohif/extension-default": "3.10.4",
"@ohif/extension-dicom-pdf": "3.10.0-beta.159", "@ohif/extension-dicom-pdf": "3.10.4",
"@ohif/extension-dicom-video": "3.10.0-beta.159" "@ohif/extension-dicom-video": "3.10.4"
}, },
"dependencies": { "dependencies": {
"@babel/runtime": "^7.20.13", "@babel/runtime": "^7.20.13",

View File

@ -3,6 +3,38 @@
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [3.10.4](https://github.com/OHIF/Viewers/compare/v3.10.2...v3.10.4) (2025-07-23)
**Note:** Version bump only for package @ohif/mode-test
## [3.10.2](https://github.com/OHIF/Viewers/compare/v3.10.1...v3.10.2) (2025-06-09)
**Note:** Version bump only for package @ohif/mode-test
## [3.10.1](https://github.com/OHIF/Viewers/compare/v3.10.0...v3.10.1) (2025-04-11)
**Note:** Version bump only for package @ohif/mode-test
# [3.10.0](https://github.com/OHIF/Viewers/compare/v3.10.0-beta.159...v3.10.0) (2025-04-10)
**Note:** Version bump only for package @ohif/mode-test
# [3.10.0-beta.159](https://github.com/OHIF/Viewers/compare/v3.10.0-beta.158...v3.10.0-beta.159) (2025-04-09) # [3.10.0-beta.159](https://github.com/OHIF/Viewers/compare/v3.10.0-beta.158...v3.10.0-beta.159) (2025-04-09)
**Note:** Version bump only for package @ohif/mode-test **Note:** Version bump only for package @ohif/mode-test

View File

@ -1,6 +1,6 @@
{ {
"name": "@ohif/mode-test", "name": "@ohif/mode-test",
"version": "3.10.0-beta.159", "version": "3.10.4",
"description": "Basic mode for testing", "description": "Basic mode for testing",
"author": "OHIF", "author": "OHIF",
"license": "MIT", "license": "MIT",
@ -34,14 +34,14 @@
"test:unit:ci": "jest --ci --runInBand --collectCoverage --passWithNoTests" "test:unit:ci": "jest --ci --runInBand --collectCoverage --passWithNoTests"
}, },
"peerDependencies": { "peerDependencies": {
"@ohif/core": "3.10.0-beta.159", "@ohif/core": "3.10.4",
"@ohif/extension-cornerstone": "3.10.0-beta.159", "@ohif/extension-cornerstone": "3.10.4",
"@ohif/extension-cornerstone-dicom-sr": "3.10.0-beta.159", "@ohif/extension-cornerstone-dicom-sr": "3.10.4",
"@ohif/extension-default": "3.10.0-beta.159", "@ohif/extension-default": "3.10.4",
"@ohif/extension-dicom-pdf": "3.10.0-beta.159", "@ohif/extension-dicom-pdf": "3.10.4",
"@ohif/extension-dicom-video": "3.10.0-beta.159", "@ohif/extension-dicom-video": "3.10.4",
"@ohif/extension-measurement-tracking": "3.10.0-beta.159", "@ohif/extension-measurement-tracking": "3.10.4",
"@ohif/extension-test": "3.10.0-beta.159" "@ohif/extension-test": "3.10.4"
}, },
"dependencies": { "dependencies": {
"@babel/runtime": "^7.20.13", "@babel/runtime": "^7.20.13",

View File

@ -3,6 +3,38 @@
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [3.10.4](https://github.com/OHIF/Viewers/compare/v3.10.2...v3.10.4) (2025-07-23)
**Note:** Version bump only for package @ohif/mode-longitudinal
## [3.10.2](https://github.com/OHIF/Viewers/compare/v3.10.1...v3.10.2) (2025-06-09)
**Note:** Version bump only for package @ohif/mode-longitudinal
## [3.10.1](https://github.com/OHIF/Viewers/compare/v3.10.0...v3.10.1) (2025-04-11)
**Note:** Version bump only for package @ohif/mode-longitudinal
# [3.10.0](https://github.com/OHIF/Viewers/compare/v3.10.0-beta.159...v3.10.0) (2025-04-10)
**Note:** Version bump only for package @ohif/mode-longitudinal
# [3.10.0-beta.159](https://github.com/OHIF/Viewers/compare/v3.10.0-beta.158...v3.10.0-beta.159) (2025-04-09) # [3.10.0-beta.159](https://github.com/OHIF/Viewers/compare/v3.10.0-beta.158...v3.10.0-beta.159) (2025-04-09)
**Note:** Version bump only for package @ohif/mode-longitudinal **Note:** Version bump only for package @ohif/mode-longitudinal

View File

@ -1,6 +1,6 @@
{ {
"name": "@ohif/mode-longitudinal", "name": "@ohif/mode-longitudinal",
"version": "3.10.0-beta.159", "version": "3.10.4",
"description": "Longitudinal Workflow", "description": "Longitudinal Workflow",
"author": "OHIF", "author": "OHIF",
"license": "MIT", "license": "MIT",
@ -34,15 +34,15 @@
"test:unit:ci": "jest --ci --runInBand --collectCoverage --passWithNoTests" "test:unit:ci": "jest --ci --runInBand --collectCoverage --passWithNoTests"
}, },
"peerDependencies": { "peerDependencies": {
"@ohif/core": "3.10.0-beta.159", "@ohif/core": "3.10.4",
"@ohif/extension-cornerstone": "3.10.0-beta.159", "@ohif/extension-cornerstone": "3.10.4",
"@ohif/extension-cornerstone-dicom-rt": "3.10.0-beta.159", "@ohif/extension-cornerstone-dicom-rt": "3.10.4",
"@ohif/extension-cornerstone-dicom-seg": "3.10.0-beta.159", "@ohif/extension-cornerstone-dicom-seg": "3.10.4",
"@ohif/extension-cornerstone-dicom-sr": "3.10.0-beta.159", "@ohif/extension-cornerstone-dicom-sr": "3.10.4",
"@ohif/extension-default": "3.10.0-beta.159", "@ohif/extension-default": "3.10.4",
"@ohif/extension-dicom-pdf": "3.10.0-beta.159", "@ohif/extension-dicom-pdf": "3.10.4",
"@ohif/extension-dicom-video": "3.10.0-beta.159", "@ohif/extension-dicom-video": "3.10.4",
"@ohif/extension-measurement-tracking": "3.10.0-beta.159" "@ohif/extension-measurement-tracking": "3.10.4"
}, },
"dependencies": { "dependencies": {
"@babel/runtime": "^7.20.13", "@babel/runtime": "^7.20.13",

View File

@ -120,8 +120,8 @@ const toolbarButtons: Button[] = [
tooltip: 'Show Reference Lines', tooltip: 'Show Reference Lines',
commands: 'toggleEnabledDisabledToolbar', commands: 'toggleEnabledDisabledToolbar',
listeners: { listeners: {
[ViewportGridService.EVENTS.ACTIVE_VIEWPORT_ID_CHANGED]: callbacks('ReferenceLinesTool'), [ViewportGridService.EVENTS.ACTIVE_VIEWPORT_ID_CHANGED]: callbacks('ReferenceLines'),
[ViewportGridService.EVENTS.VIEWPORTS_READY]: callbacks('ReferenceLinesTool'), [ViewportGridService.EVENTS.VIEWPORTS_READY]: callbacks('ReferenceLines'),
}, },
evaluate: [ evaluate: [
'evaluate.cornerstoneTool.toggle', 'evaluate.cornerstoneTool.toggle',

View File

@ -3,6 +3,38 @@
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [3.10.4](https://github.com/OHIF/Viewers/compare/v3.10.2...v3.10.4) (2025-07-23)
**Note:** Version bump only for package @ohif/mode-microscopy
## [3.10.2](https://github.com/OHIF/Viewers/compare/v3.10.1...v3.10.2) (2025-06-09)
**Note:** Version bump only for package @ohif/mode-microscopy
## [3.10.1](https://github.com/OHIF/Viewers/compare/v3.10.0...v3.10.1) (2025-04-11)
**Note:** Version bump only for package @ohif/mode-microscopy
# [3.10.0](https://github.com/OHIF/Viewers/compare/v3.10.0-beta.159...v3.10.0) (2025-04-10)
**Note:** Version bump only for package @ohif/mode-microscopy
# [3.10.0-beta.159](https://github.com/OHIF/Viewers/compare/v3.10.0-beta.158...v3.10.0-beta.159) (2025-04-09) # [3.10.0-beta.159](https://github.com/OHIF/Viewers/compare/v3.10.0-beta.158...v3.10.0-beta.159) (2025-04-09)
**Note:** Version bump only for package @ohif/mode-microscopy **Note:** Version bump only for package @ohif/mode-microscopy

View File

@ -1,6 +1,6 @@
{ {
"name": "@ohif/mode-microscopy", "name": "@ohif/mode-microscopy",
"version": "3.10.0-beta.159", "version": "3.10.4",
"description": "OHIF mode for DICOM microscopy", "description": "OHIF mode for DICOM microscopy",
"author": "OHIF", "author": "OHIF",
"license": "MIT", "license": "MIT",
@ -35,8 +35,8 @@
"test:unit:ci": "jest --ci --runInBand --collectCoverage --passWithNoTests" "test:unit:ci": "jest --ci --runInBand --collectCoverage --passWithNoTests"
}, },
"peerDependencies": { "peerDependencies": {
"@ohif/core": "3.10.0-beta.159", "@ohif/core": "3.10.4",
"@ohif/extension-dicom-microscopy": "3.10.0-beta.159" "@ohif/extension-dicom-microscopy": "3.10.4"
}, },
"dependencies": { "dependencies": {
"@babel/runtime": "^7.20.13", "@babel/runtime": "^7.20.13",

View File

@ -3,6 +3,38 @@
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [3.10.4](https://github.com/OHIF/Viewers/compare/v3.10.2...v3.10.4) (2025-07-23)
**Note:** Version bump only for package @ohif/mode-preclinical-4d
## [3.10.2](https://github.com/OHIF/Viewers/compare/v3.10.1...v3.10.2) (2025-06-09)
**Note:** Version bump only for package @ohif/mode-preclinical-4d
## [3.10.1](https://github.com/OHIF/Viewers/compare/v3.10.0...v3.10.1) (2025-04-11)
**Note:** Version bump only for package @ohif/mode-preclinical-4d
# [3.10.0](https://github.com/OHIF/Viewers/compare/v3.10.0-beta.159...v3.10.0) (2025-04-10)
**Note:** Version bump only for package @ohif/mode-preclinical-4d
# [3.10.0-beta.159](https://github.com/OHIF/Viewers/compare/v3.10.0-beta.158...v3.10.0-beta.159) (2025-04-09) # [3.10.0-beta.159](https://github.com/OHIF/Viewers/compare/v3.10.0-beta.158...v3.10.0-beta.159) (2025-04-09)
**Note:** Version bump only for package @ohif/mode-preclinical-4d **Note:** Version bump only for package @ohif/mode-preclinical-4d

View File

@ -1,6 +1,6 @@
{ {
"name": "@ohif/mode-preclinical-4d", "name": "@ohif/mode-preclinical-4d",
"version": "3.10.0-beta.159", "version": "3.10.4",
"description": "4D Workflow", "description": "4D Workflow",
"author": "OHIF", "author": "OHIF",
"license": "MIT", "license": "MIT",
@ -33,12 +33,12 @@
"test:unit:ci": "jest --ci --runInBand --collectCoverage --passWithNoTests" "test:unit:ci": "jest --ci --runInBand --collectCoverage --passWithNoTests"
}, },
"peerDependencies": { "peerDependencies": {
"@ohif/core": "3.10.0-beta.159", "@ohif/core": "3.10.4",
"@ohif/extension-cornerstone": "3.10.0-beta.159", "@ohif/extension-cornerstone": "3.10.4",
"@ohif/extension-cornerstone-dicom-seg": "3.10.0-beta.159", "@ohif/extension-cornerstone-dicom-seg": "3.10.4",
"@ohif/extension-cornerstone-dynamic-volume": "3.10.0-beta.159", "@ohif/extension-cornerstone-dynamic-volume": "3.10.4",
"@ohif/extension-default": "3.10.0-beta.159", "@ohif/extension-default": "3.10.4",
"@ohif/extension-tmtv": "3.10.0-beta.159" "@ohif/extension-tmtv": "3.10.4"
}, },
"dependencies": { "dependencies": {
"@babel/runtime": "^7.20.13" "@babel/runtime": "^7.20.13"

View File

@ -3,6 +3,38 @@
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [3.10.4](https://github.com/OHIF/Viewers/compare/v3.10.2...v3.10.4) (2025-07-23)
**Note:** Version bump only for package @ohif/mode-segmentation
## [3.10.2](https://github.com/OHIF/Viewers/compare/v3.10.1...v3.10.2) (2025-06-09)
**Note:** Version bump only for package @ohif/mode-segmentation
## [3.10.1](https://github.com/OHIF/Viewers/compare/v3.10.0...v3.10.1) (2025-04-11)
**Note:** Version bump only for package @ohif/mode-segmentation
# [3.10.0](https://github.com/OHIF/Viewers/compare/v3.10.0-beta.159...v3.10.0) (2025-04-10)
**Note:** Version bump only for package @ohif/mode-segmentation
# [3.10.0-beta.159](https://github.com/OHIF/Viewers/compare/v3.10.0-beta.158...v3.10.0-beta.159) (2025-04-09) # [3.10.0-beta.159](https://github.com/OHIF/Viewers/compare/v3.10.0-beta.158...v3.10.0-beta.159) (2025-04-09)
**Note:** Version bump only for package @ohif/mode-segmentation **Note:** Version bump only for package @ohif/mode-segmentation

View File

@ -1,6 +1,6 @@
{ {
"name": "@ohif/mode-segmentation", "name": "@ohif/mode-segmentation",
"version": "3.10.0-beta.159", "version": "3.10.4",
"description": "OHIF segmentation mode which enables labelmap segmentation read/edit/export", "description": "OHIF segmentation mode which enables labelmap segmentation read/edit/export",
"author": "@ohif", "author": "@ohif",
"license": "MIT", "license": "MIT",
@ -35,14 +35,14 @@
"test:unit:ci": "jest --ci --runInBand --collectCoverage --passWithNoTests" "test:unit:ci": "jest --ci --runInBand --collectCoverage --passWithNoTests"
}, },
"peerDependencies": { "peerDependencies": {
"@ohif/core": "3.10.0-beta.159", "@ohif/core": "3.10.4",
"@ohif/extension-cornerstone": "3.10.0-beta.159", "@ohif/extension-cornerstone": "3.10.4",
"@ohif/extension-cornerstone-dicom-rt": "3.10.0-beta.159", "@ohif/extension-cornerstone-dicom-rt": "3.10.4",
"@ohif/extension-cornerstone-dicom-seg": "3.10.0-beta.159", "@ohif/extension-cornerstone-dicom-seg": "3.10.4",
"@ohif/extension-cornerstone-dicom-sr": "3.10.0-beta.159", "@ohif/extension-cornerstone-dicom-sr": "3.10.4",
"@ohif/extension-default": "3.10.0-beta.159", "@ohif/extension-default": "3.10.4",
"@ohif/extension-dicom-pdf": "3.10.0-beta.159", "@ohif/extension-dicom-pdf": "3.10.4",
"@ohif/extension-dicom-video": "3.10.0-beta.159" "@ohif/extension-dicom-video": "3.10.4"
}, },
"dependencies": { "dependencies": {
"@babel/runtime": "^7.20.13", "@babel/runtime": "^7.20.13",

View File

@ -3,6 +3,38 @@
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [3.10.4](https://github.com/OHIF/Viewers/compare/v3.10.2...v3.10.4) (2025-07-23)
**Note:** Version bump only for package @ohif/mode-tmtv
## [3.10.2](https://github.com/OHIF/Viewers/compare/v3.10.1...v3.10.2) (2025-06-09)
**Note:** Version bump only for package @ohif/mode-tmtv
## [3.10.1](https://github.com/OHIF/Viewers/compare/v3.10.0...v3.10.1) (2025-04-11)
**Note:** Version bump only for package @ohif/mode-tmtv
# [3.10.0](https://github.com/OHIF/Viewers/compare/v3.10.0-beta.159...v3.10.0) (2025-04-10)
**Note:** Version bump only for package @ohif/mode-tmtv
# [3.10.0-beta.159](https://github.com/OHIF/Viewers/compare/v3.10.0-beta.158...v3.10.0-beta.159) (2025-04-09) # [3.10.0-beta.159](https://github.com/OHIF/Viewers/compare/v3.10.0-beta.158...v3.10.0-beta.159) (2025-04-09)
**Note:** Version bump only for package @ohif/mode-tmtv **Note:** Version bump only for package @ohif/mode-tmtv

View File

@ -1,6 +1,6 @@
{ {
"name": "@ohif/mode-tmtv", "name": "@ohif/mode-tmtv",
"version": "3.10.0-beta.159", "version": "3.10.4",
"description": "Total Metabolic Tumor Volume Workflow", "description": "Total Metabolic Tumor Volume Workflow",
"author": "OHIF", "author": "OHIF",
"license": "MIT", "license": "MIT",
@ -34,13 +34,13 @@
"test:unit:ci": "jest --ci --runInBand --collectCoverage --passWithNoTests" "test:unit:ci": "jest --ci --runInBand --collectCoverage --passWithNoTests"
}, },
"peerDependencies": { "peerDependencies": {
"@ohif/core": "3.10.0-beta.159", "@ohif/core": "3.10.4",
"@ohif/extension-cornerstone": "3.10.0-beta.159", "@ohif/extension-cornerstone": "3.10.4",
"@ohif/extension-cornerstone-dicom-sr": "3.10.0-beta.159", "@ohif/extension-cornerstone-dicom-sr": "3.10.4",
"@ohif/extension-default": "3.10.0-beta.159", "@ohif/extension-default": "3.10.4",
"@ohif/extension-dicom-pdf": "3.10.0-beta.159", "@ohif/extension-dicom-pdf": "3.10.4",
"@ohif/extension-dicom-video": "3.10.0-beta.159", "@ohif/extension-dicom-video": "3.10.4",
"@ohif/extension-measurement-tracking": "3.10.0-beta.159" "@ohif/extension-measurement-tracking": "3.10.4"
}, },
"dependencies": { "dependencies": {
"@babel/runtime": "^7.20.13", "@babel/runtime": "^7.20.13",

View File

@ -56,6 +56,7 @@
"test:e2e": "lerna run test:e2e --stream", "test:e2e": "lerna run test:e2e --stream",
"test:e2e:ci": "TEST_ENV=true npx playwright test", "test:e2e:ci": "TEST_ENV=true npx playwright test",
"test:e2e:ui": "TEST_ENV=true npx playwright test --ui", "test:e2e:ui": "TEST_ENV=true npx playwright test --ui",
"test:e2e:update": "TEST_ENV=true npx playwright test --update-snapshots",
"test:e2e:headed": "TEST_ENV=true npx playwright test --headed", "test:e2e:headed": "TEST_ENV=true npx playwright test --headed",
"test:e2e:debug": "TEST_ENV=true npx playwright test --debug", "test:e2e:debug": "TEST_ENV=true npx playwright test --debug",
"test:e2e:dist": "lerna run test:e2e:dist --stream", "test:e2e:dist": "lerna run test:e2e:dist --stream",

View File

@ -3,6 +3,41 @@
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [3.10.4](https://github.com/OHIF/Viewers/compare/v3.10.2...v3.10.4) (2025-07-23)
**Note:** Version bump only for package @ohif/app
## [3.10.2](https://github.com/OHIF/Viewers/compare/v3.10.1...v3.10.2) (2025-06-09)
**Note:** Version bump only for package @ohif/app
## [3.10.1](https://github.com/OHIF/Viewers/compare/v3.10.0...v3.10.1) (2025-04-11)
### Bug Fixes
* make datasource selection work and UI fixes ([#4952](https://github.com/OHIF/Viewers/issues/4952)) ([aaba8bf](https://github.com/OHIF/Viewers/commit/aaba8bf1b04be6c00a88f1f5f29cb24133b0c39e))
# [3.10.0](https://github.com/OHIF/Viewers/compare/v3.10.0-beta.159...v3.10.0) (2025-04-10)
**Note:** Version bump only for package @ohif/app
# [3.10.0-beta.159](https://github.com/OHIF/Viewers/compare/v3.10.0-beta.158...v3.10.0-beta.159) (2025-04-09) # [3.10.0-beta.159](https://github.com/OHIF/Viewers/compare/v3.10.0-beta.158...v3.10.0-beta.159) (2025-04-09)

View File

@ -1,6 +1,6 @@
{ {
"name": "@ohif/app", "name": "@ohif/app",
"version": "3.10.0-beta.159", "version": "3.10.4",
"productVersion": "3.4.0", "productVersion": "3.4.0",
"description": "OHIF Viewer", "description": "OHIF Viewer",
"author": "OHIF Contributors", "author": "OHIF Contributors",
@ -53,25 +53,25 @@
"@cornerstonejs/codec-libjpeg-turbo-8bit": "^1.2.2", "@cornerstonejs/codec-libjpeg-turbo-8bit": "^1.2.2",
"@cornerstonejs/codec-openjpeg": "^1.2.4", "@cornerstonejs/codec-openjpeg": "^1.2.4",
"@cornerstonejs/codec-openjph": "^2.4.5", "@cornerstonejs/codec-openjph": "^2.4.5",
"@cornerstonejs/dicom-image-loader": "^3.9.5", "@cornerstonejs/dicom-image-loader": "^3.11.6",
"@emotion/serialize": "^1.1.3", "@emotion/serialize": "^1.1.3",
"@ohif/core": "3.10.0-beta.159", "@ohif/core": "3.10.4",
"@ohif/extension-cornerstone": "3.10.0-beta.159", "@ohif/extension-cornerstone": "3.10.4",
"@ohif/extension-cornerstone-dicom-rt": "3.10.0-beta.159", "@ohif/extension-cornerstone-dicom-rt": "3.10.4",
"@ohif/extension-cornerstone-dicom-seg": "3.10.0-beta.159", "@ohif/extension-cornerstone-dicom-seg": "3.10.4",
"@ohif/extension-cornerstone-dicom-sr": "3.10.0-beta.159", "@ohif/extension-cornerstone-dicom-sr": "3.10.4",
"@ohif/extension-default": "3.10.0-beta.159", "@ohif/extension-default": "3.10.4",
"@ohif/extension-dicom-microscopy": "3.10.0-beta.159", "@ohif/extension-dicom-microscopy": "3.10.4",
"@ohif/extension-dicom-pdf": "3.10.0-beta.159", "@ohif/extension-dicom-pdf": "3.10.4",
"@ohif/extension-dicom-video": "3.10.0-beta.159", "@ohif/extension-dicom-video": "3.10.4",
"@ohif/extension-test": "3.10.0-beta.159", "@ohif/extension-test": "3.10.4",
"@ohif/i18n": "3.10.0-beta.159", "@ohif/i18n": "3.10.4",
"@ohif/mode-basic-dev-mode": "3.10.0-beta.159", "@ohif/mode-basic-dev-mode": "3.10.4",
"@ohif/mode-longitudinal": "3.10.0-beta.159", "@ohif/mode-longitudinal": "3.10.4",
"@ohif/mode-microscopy": "3.10.0-beta.159", "@ohif/mode-microscopy": "3.10.4",
"@ohif/mode-test": "3.10.0-beta.159", "@ohif/mode-test": "3.10.4",
"@ohif/ui": "3.10.0-beta.159", "@ohif/ui": "3.10.4",
"@ohif/ui-next": "3.10.0-beta.159", "@ohif/ui-next": "3.10.4",
"@svgr/webpack": "^8.1.0", "@svgr/webpack": "^8.1.0",
"@types/react": "^18.3.3", "@types/react": "^18.3.3",
"classnames": "^2.3.2", "classnames": "^2.3.2",

View File

@ -3,6 +3,38 @@
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [3.10.4](https://github.com/OHIF/Viewers/compare/v3.10.2...v3.10.4) (2025-07-23)
**Note:** Version bump only for package @ohif/cli
## [3.10.2](https://github.com/OHIF/Viewers/compare/v3.10.1...v3.10.2) (2025-06-09)
**Note:** Version bump only for package @ohif/cli
## [3.10.1](https://github.com/OHIF/Viewers/compare/v3.10.0...v3.10.1) (2025-04-11)
**Note:** Version bump only for package @ohif/cli
# [3.10.0](https://github.com/OHIF/Viewers/compare/v3.10.0-beta.159...v3.10.0) (2025-04-10)
**Note:** Version bump only for package @ohif/cli
# [3.10.0-beta.159](https://github.com/OHIF/Viewers/compare/v3.10.0-beta.158...v3.10.0-beta.159) (2025-04-09) # [3.10.0-beta.159](https://github.com/OHIF/Viewers/compare/v3.10.0-beta.158...v3.10.0-beta.159) (2025-04-09)
**Note:** Version bump only for package @ohif/cli **Note:** Version bump only for package @ohif/cli

View File

@ -1,6 +1,6 @@
{ {
"name": "@ohif/cli", "name": "@ohif/cli",
"version": "3.10.0-beta.159", "version": "3.10.4",
"description": "A CLI to bootstrap new OHIF extension or mode", "description": "A CLI to bootstrap new OHIF extension or mode",
"type": "module", "type": "module",
"main": "src/index.js", "main": "src/index.js",

View File

@ -3,6 +3,41 @@
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [3.10.4](https://github.com/OHIF/Viewers/compare/v3.10.2...v3.10.4) (2025-07-23)
**Note:** Version bump only for package @ohif/core
## [3.10.2](https://github.com/OHIF/Viewers/compare/v3.10.1...v3.10.2) (2025-06-09)
**Note:** Version bump only for package @ohif/core
## [3.10.1](https://github.com/OHIF/Viewers/compare/v3.10.0...v3.10.1) (2025-04-11)
### Bug Fixes
* make datasource selection work and UI fixes ([#4952](https://github.com/OHIF/Viewers/issues/4952)) ([aaba8bf](https://github.com/OHIF/Viewers/commit/aaba8bf1b04be6c00a88f1f5f29cb24133b0c39e))
# [3.10.0](https://github.com/OHIF/Viewers/compare/v3.10.0-beta.159...v3.10.0) (2025-04-10)
**Note:** Version bump only for package @ohif/core
# [3.10.0-beta.159](https://github.com/OHIF/Viewers/compare/v3.10.0-beta.158...v3.10.0-beta.159) (2025-04-09) # [3.10.0-beta.159](https://github.com/OHIF/Viewers/compare/v3.10.0-beta.158...v3.10.0-beta.159) (2025-04-09)

View File

@ -1,6 +1,6 @@
{ {
"name": "@ohif/core", "name": "@ohif/core",
"version": "3.10.0-beta.159", "version": "3.10.4",
"description": "Generic business logic for web-based medical imaging applications", "description": "Generic business logic for web-based medical imaging applications",
"author": "OHIF Core Team", "author": "OHIF Core Team",
"license": "MIT", "license": "MIT",
@ -37,9 +37,9 @@
"@cornerstonejs/codec-libjpeg-turbo-8bit": "^1.2.2", "@cornerstonejs/codec-libjpeg-turbo-8bit": "^1.2.2",
"@cornerstonejs/codec-openjpeg": "^1.2.4", "@cornerstonejs/codec-openjpeg": "^1.2.4",
"@cornerstonejs/codec-openjph": "^2.4.5", "@cornerstonejs/codec-openjph": "^2.4.5",
"@cornerstonejs/core": "^3.9.5", "@cornerstonejs/core": "^3.11.6",
"@cornerstonejs/dicom-image-loader": "^3.9.5", "@cornerstonejs/dicom-image-loader": "^3.11.6",
"@ohif/ui": "3.10.0-beta.159", "@ohif/ui": "3.10.4",
"cornerstone-math": "0.1.9", "cornerstone-math": "0.1.9",
"dicom-parser": "^1.8.21" "dicom-parser": "^1.8.21"
}, },

View File

@ -215,7 +215,10 @@ class MetadataProvider {
break; break;
case WADO_IMAGE_LOADER_TAGS.MODALITY_LUT_MODULE: case WADO_IMAGE_LOADER_TAGS.MODALITY_LUT_MODULE:
const { RescaleIntercept, RescaleSlope } = instance; const { RescaleIntercept, RescaleSlope } = instance;
if (RescaleIntercept === undefined || RescaleSlope === undefined) { // Early return if RescaleIntercept or RescaleSlope are not
// present (undefined) or explicitly set to null. We use loose
// equality in this case to check for *null* or *undefined*.
if (RescaleIntercept == null || RescaleSlope == null) {
return; return;
} }

View File

@ -87,9 +87,7 @@ export default class ExtensionManager extends PubSubService {
}; };
private dataSourceMap: Record<string, any>; private dataSourceMap: Record<string, any>;
private dataSourceDefs: Record<string, any>; private dataSourceDefs: Record<string, any>;
private defaultDataSourceName: string; private activeDataSourceName: string;
private activeDataSource: string;
private peerImport: (moduleId) => Promise<any>;
constructor({ constructor({
commandsManager, commandsManager,
@ -117,20 +115,20 @@ export default class ExtensionManager extends PubSubService {
this.dataSourceMap = {}; this.dataSourceMap = {};
this.dataSourceDefs = {}; this.dataSourceDefs = {};
this.defaultDataSourceName = appConfig.defaultDataSourceName; this.defaultDataSourceName = appConfig.defaultDataSourceName;
this.activeDataSource = appConfig.defaultDataSourceName; this.activeDataSourceName = appConfig.defaultDataSourceName;
this.peerImport = appConfig.peerImport; this.peerImport = appConfig.peerImport;
} }
public setActiveDataSource(dataSource: string): void { public setActiveDataSource(dataSource: string): void {
if (this.activeDataSource === dataSource) { if (this.activeDataSourceName === dataSource) {
return; return;
} }
this.activeDataSource = dataSource; this.activeDataSourceName = dataSource;
this._broadcastEvent( this._broadcastEvent(
ExtensionManager.EVENTS.ACTIVE_DATA_SOURCE_CHANGED, ExtensionManager.EVENTS.ACTIVE_DATA_SOURCE_CHANGED,
this.dataSourceDefs[this.activeDataSource] this.dataSourceDefs[this.activeDataSourceName]
); );
} }
@ -375,7 +373,7 @@ export default class ExtensionManager extends PubSubService {
getDataSources = dataSourceName => { getDataSources = dataSourceName => {
if (dataSourceName === undefined) { if (dataSourceName === undefined) {
// Default to the activeDataSource // Default to the activeDataSource
dataSourceName = this.activeDataSource; dataSourceName = this.activeDataSourceName;
} }
// Note: this currently uses the data source name, which feels weird... // Note: this currently uses the data source name, which feels weird...
@ -387,7 +385,7 @@ export default class ExtensionManager extends PubSubService {
}; };
getActiveDataSource = () => { getActiveDataSource = () => {
return this.dataSourceMap[this.activeDataSource]; return this.dataSourceMap[this.activeDataSourceName];
}; };
/** /**
@ -400,7 +398,7 @@ export default class ExtensionManager extends PubSubService {
getDataSourceDefinition = dataSourceName => { getDataSourceDefinition = dataSourceName => {
if (dataSourceName === undefined) { if (dataSourceName === undefined) {
// Default to the activeDataSource // Default to the activeDataSource
dataSourceName = this.activeDataSource; dataSourceName = this.activeDataSourceName;
} }
return this.dataSourceDefs[dataSourceName]; return this.dataSourceDefs[dataSourceName];
@ -410,7 +408,7 @@ export default class ExtensionManager extends PubSubService {
* Gets the data source definition for the active data source. * Gets the data source definition for the active data source.
*/ */
getActiveDataSourceDefinition = () => { getActiveDataSourceDefinition = () => {
return this.getDataSourceDefinition(this.activeDataSource); return this.getDataSourceDefinition(this.activeDataSourceName);
}; };
/** /**
@ -424,16 +422,21 @@ export default class ExtensionManager extends PubSubService {
return []; return [];
} }
return Object.keys(this.dataSourceMap) const inactiveDataSourceNames = Object.keys(this.dataSourceMap).filter(ds => {
.filter(ds => { const configuration = this.dataSourceDefs[ds]?.configuration;
const configuration = this.dataSourceDefs[ds]?.configuration; const isNotActiveDataSource =
return configuration?.supportsStow ?? configuration?.wadoRoot; this.dataSourceDefs[ds].sourceName !== this.activeDataSourceName;
}) const supportsStowOrWado = configuration?.supportsStow ?? configuration?.wadoRoot;
.map(ds => ({ return supportsStowOrWado && isNotActiveDataSource;
value: ds, });
label: ds,
placeHolder: ds, const allDatasourcesForUI = [this.activeDataSourceName, ...inactiveDataSourceNames].map(ds => ({
})); value: ds,
label: ds,
placeHolder: ds,
}));
return allDatasourcesForUI;
}; };
/** /**
@ -555,7 +558,7 @@ export default class ExtensionManager extends PubSubService {
dataSourceDef.configuration = dataSourceConfiguration; dataSourceDef.configuration = dataSourceConfiguration;
this._createDataSourceInstance(dataSourceDef); this._createDataSourceInstance(dataSourceDef);
if (this.activeDataSource === dataSourceName) { if (this.activeDataSourceName === dataSourceName) {
// When the active data source is changed/set, fire an event to indicate that its configuration has changed. // When the active data source is changed/set, fire an event to indicate that its configuration has changed.
this._broadcastEvent(ExtensionManager.EVENTS.ACTIVE_DATA_SOURCE_CHANGED, dataSourceDef); this._broadcastEvent(ExtensionManager.EVENTS.ACTIVE_DATA_SOURCE_CHANGED, dataSourceDef);
} }

View File

@ -14,6 +14,8 @@ const serviceImplementation = {
console.warn('isEmpty() NOT IMPLEMENTED'); console.warn('isEmpty() NOT IMPLEMENTED');
return true; return true;
}, },
_updatePosition: (id: string, position: { x: number; y: number }) =>
console.warn('updatePosition() NOT IMPLEMENTED'),
_customComponent: null, _customComponent: null,
}; };
@ -63,6 +65,16 @@ class UIDialogService {
return serviceImplementation._isEmpty(); return serviceImplementation._isEmpty();
} }
/**
* Update the position of a specific dialog by id
*
* @param {string} id - The dialog id to update
* @param {{ x: number; y: number }} position - The new position
*/
updatePosition(id: string, position: { x: number; y: number }): void {
return serviceImplementation._updatePosition(id, position);
}
/** /**
* This provides flexibility in customizing the Modal's default component * This provides flexibility in customizing the Modal's default component
* *
@ -75,7 +87,14 @@ class UIDialogService {
/** /**
* Set the service implementation * Set the service implementation
*/ */
setServiceImplementation({ show, hide, hideAll, isEmpty, customComponent }: any): void { setServiceImplementation({
show,
hide,
hideAll,
isEmpty,
updatePosition,
customComponent,
}: any): void {
if (show) { if (show) {
serviceImplementation._show = show; serviceImplementation._show = show;
} }
@ -88,6 +107,9 @@ class UIDialogService {
if (isEmpty) { if (isEmpty) {
serviceImplementation._isEmpty = isEmpty; serviceImplementation._isEmpty = isEmpty;
} }
if (updatePosition) {
serviceImplementation._updatePosition = updatePosition;
}
if (customComponent) { if (customComponent) {
serviceImplementation._customComponent = customComponent; serviceImplementation._customComponent = customComponent;
} }

View File

@ -60,17 +60,24 @@ class UINotificationService {
* @param {string} [notification.promiseMessages.loading] - Message to show while promise is pending * @param {string} [notification.promiseMessages.loading] - Message to show while promise is pending
* @param {string | function} [notification.promiseMessages.success] - Message to show when promise resolves * @param {string | function} [notification.promiseMessages.success] - Message to show when promise resolves
* @param {string | function} [notification.promiseMessages.error] - Message to show when promise rejects * @param {string | function} [notification.promiseMessages.error] - Message to show when promise rejects
* @param {object} [notification.action] - Action button configuration
* @param {string} notification.action.label - The label for the action button
* @param {function} notification.action.onClick - The function to call when the action button is clicked
* @returns {string} id - The ID of the created notification * @returns {string} id - The ID of the created notification
*/ */
show({ show({
title, title,
message, message,
duration = 5000, duration = 2000,
position = 'bottom-right', position = 'bottom-right',
type = 'info', type = 'info',
autoClose = true, autoClose = true,
promise, promise,
promiseMessages, promiseMessages,
id,
allowDuplicates = false,
deduplicationInterval = 30000,
action,
}: { }: {
title: string; title: string;
message: string | ((data?: any) => string); message: string | ((data?: any) => string);
@ -90,6 +97,13 @@ class UINotificationService {
success?: string | ((data: any) => string); success?: string | ((data: any) => string);
error?: string | ((error: any) => string); error?: string | ((error: any) => string);
}; };
id?: string;
allowDuplicates?: boolean;
deduplicationInterval?: number;
action?: {
label: string;
onClick: () => void;
};
}): string { }): string {
if (promise && promiseMessages) { if (promise && promiseMessages) {
const loadingId = serviceImplementation._show({ const loadingId = serviceImplementation._show({
@ -98,6 +112,9 @@ class UINotificationService {
type: 'loading', type: 'loading',
autoClose: false, autoClose: false,
position, position,
id: id ? `${id}-loading` : undefined,
allowDuplicates,
deduplicationInterval,
}); });
promise.then( promise.then(
@ -114,6 +131,10 @@ class UINotificationService {
duration, duration,
position, position,
autoClose, autoClose,
id: id ? `${id}-success` : undefined,
allowDuplicates,
deduplicationInterval,
action,
}); });
this.hide(loadingId); this.hide(loadingId);
}, },
@ -130,6 +151,10 @@ class UINotificationService {
duration, duration,
position, position,
autoClose, autoClose,
id: id ? `${id}-error` : undefined,
allowDuplicates,
deduplicationInterval,
action,
}); });
this.hide(loadingId); this.hide(loadingId);
} }
@ -145,6 +170,10 @@ class UINotificationService {
position, position,
type, type,
autoClose, autoClose,
id,
allowDuplicates,
deduplicationInterval,
action,
}); });
} }
} }

View File

@ -3,6 +3,38 @@
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [3.10.4](https://github.com/OHIF/Viewers/compare/v3.10.2...v3.10.4) (2025-07-23)
**Note:** Version bump only for package ohif-docs
## [3.10.2](https://github.com/OHIF/Viewers/compare/v3.10.1...v3.10.2) (2025-06-09)
**Note:** Version bump only for package ohif-docs
## [3.10.1](https://github.com/OHIF/Viewers/compare/v3.10.0...v3.10.1) (2025-04-11)
**Note:** Version bump only for package ohif-docs
# [3.10.0](https://github.com/OHIF/Viewers/compare/v3.10.0-beta.159...v3.10.0) (2025-04-10)
**Note:** Version bump only for package ohif-docs
# [3.10.0-beta.159](https://github.com/OHIF/Viewers/compare/v3.10.0-beta.158...v3.10.0-beta.159) (2025-04-09) # [3.10.0-beta.159](https://github.com/OHIF/Viewers/compare/v3.10.0-beta.158...v3.10.0-beta.159) (2025-04-09)

View File

@ -1,6 +1,6 @@
{ {
"name": "ohif-docs", "name": "ohif-docs",
"version": "3.10.0-beta.159", "version": "3.10.4",
"private": true, "private": true,
"scripts": { "scripts": {
"docusaurus": "docusaurus", "docusaurus": "docusaurus",

View File

@ -132,8 +132,9 @@ export default function ComponentShowcase() {
description="Colors and Typography" description="Colors and Typography"
> >
<div className="text-foreground min-h-screen bg-black"> <div className="text-foreground min-h-screen bg-black">
<div className="mx-auto my-4 max-w-5xl pt-6 pb-3"> <div className="mx-auto my-4 max-w-5xl pt-4 pb-6">
<div className="grid grid-cols-1 gap-5 md:grid-cols-3"> {/* Navigation cards */}
<div className="mb-8 grid grid-cols-1 gap-5 md:grid-cols-3">
<a <a
href="/colors-and-type" href="/colors-and-type"
className="focus:ring-primary block rounded-lg text-inherit no-underline hover:no-underline focus:outline-none focus:ring-2" className="focus:ring-primary block rounded-lg text-inherit no-underline hover:no-underline focus:outline-none focus:ring-2"
@ -183,9 +184,7 @@ export default function ComponentShowcase() {
</Card> </Card>
</a> </a>
</div> </div>
</div>
<div className="mx-auto my-4 max-w-5xl pt-4 pb-6">
<h1 className="text-foreground ml-6 mb-6 text-5xl">Colors & Typography</h1> <h1 className="text-foreground ml-6 mb-6 text-5xl">Colors & Typography</h1>
<ShowcaseRow <ShowcaseRow
@ -249,7 +248,7 @@ export default function ComponentShowcase() {
<span className="text-foreground text-lg">foreground</span> <span className="text-foreground text-lg">foreground</span>
</div> </div>
<div className="flex items-center space-x-3"> <div className="flex items-center space-x-3">
<div className="bg-muted-foreground border-input h-[30px] w-[30px] rounded border"></div> <div className="bg-muted-foreground h-[30px] w-[30px] rounded"></div>
<span className="text-foreground text-lg">muted-foreground</span> <span className="text-foreground text-lg">muted-foreground</span>
</div> </div>
</div> </div>
@ -258,6 +257,23 @@ export default function ComponentShowcase() {
use 'muted-foreground' to create separation and readability. use 'muted-foreground' to create separation and readability.
</div> </div>
</div> </div>
<div className="mb-8 grid grid-cols-[28%,1fr] items-start gap-x-8">
<div className="space-y-2.5">
<div className="flex items-center space-x-3">
<div className="bg-input h-[30px] w-[30px] rounded"></div>
<span className="text-foreground text-lg">input</span>
</div>
<div className="flex items-center space-x-3">
<div className="bg-neutral h-[30px] w-[30px] rounded"></div>
<span className="text-foreground text-lg">neutral</span>
</div>
</div>
<div className="text-secondary-foreground flex items-center pt-1.5 text-lg">
Used for borders and UI elements. 'neutral' is typically used at 50% opacity for
elements such as scrollbars and will work over light and dark backgrounds
</div>
</div>
</ShowcaseRow> </ShowcaseRow>
<ShowcaseRow <ShowcaseRow

View File

@ -3,12 +3,25 @@ import '../css/custom.css';
import Layout from '@theme/Layout'; import Layout from '@theme/Layout';
import { TooltipProvider } from '../../../ui-next/src/components/Tooltip'; import { TooltipProvider } from '../../../ui-next/src/components/Tooltip';
// Import all showcase components // Navigation card components
import { Card, CardHeader, CardTitle, CardDescription } from '../../../ui-next/src/components/Card';
import { Icons } from '../../../ui-next/src/components/Icons';
/* Showcase components (alphabetical) */
import AllinOneMenuShowcase from './components/AllinOneMenuShowcase';
import ButtonShowcase from './components/ButtonShowcase'; import ButtonShowcase from './components/ButtonShowcase';
import CheckboxShowcase from './components/CheckboxShowcase'; import CheckboxShowcase from './components/CheckboxShowcase';
import CinePlayerShowcase from './components/CinePlayerShowcase';
import ComboboxShowcase from './components/ComboboxShowcase';
import DataRowShowcase from './components/DataRowShowcase'; import DataRowShowcase from './components/DataRowShowcase';
import DialogShowcase from './components/DialogShowcase';
import DropdownMenuShowcase from './components/DropdownMenuShowcase'; import DropdownMenuShowcase from './components/DropdownMenuShowcase';
import HoverCardShowcase from './components/HoverCardShowcase';
import InputShowcase from './components/InputShowcase'; import InputShowcase from './components/InputShowcase';
import LabelShowcase from './components/LabelShowcase';
import NumericMetaShowcase from './components/NumericMetaShowcase';
import PanelSectionShowcase from './components/PanelSectionShowcase';
import PopoverShowcase from './components/PopoverShowcase';
import ScrollAreaShowcase from './components/ScrollAreaShowcase'; import ScrollAreaShowcase from './components/ScrollAreaShowcase';
import SelectShowcase from './components/SelectShowcase'; import SelectShowcase from './components/SelectShowcase';
import SliderShowcase from './components/SliderShowcase'; import SliderShowcase from './components/SliderShowcase';
@ -17,7 +30,8 @@ import TabsShowcase from './components/TabsShowcase';
import ToastShowcase from './components/ToastShowcase'; import ToastShowcase from './components/ToastShowcase';
import ToolButtonShowcase from './components/ToolButtonShowcase'; import ToolButtonShowcase from './components/ToolButtonShowcase';
import ToolButtonListShowcase from './components/ToolButtonListShowcase'; import ToolButtonListShowcase from './components/ToolButtonListShowcase';
import NumericMetaShowcase from './components/NumericMetaShowcase'; import TooltipShowcase from './components/TooltipShowcase';
/** /**
* Components List page that displays all available UI components * Components List page that displays all available UI components
*/ */
@ -30,15 +44,74 @@ export default function ComponentsList() {
<TooltipProvider> <TooltipProvider>
<div className="text-foreground min-h-screen bg-black"> <div className="text-foreground min-h-screen bg-black">
<div className="mx-auto my-4 max-w-5xl pt-4 pb-6"> <div className="mx-auto my-4 max-w-5xl pt-4 pb-6">
<div className="ml-6 mb-6 text-base"> {/* Navigation cards */}
<h1 className="text-foreground mb-3 text-5xl">Components</h1> <div className="mb-8 grid grid-cols-1 gap-5 md:grid-cols-3">
<a
href="/colors-and-type"
className="focus:ring-primary block rounded-lg text-inherit no-underline hover:no-underline focus:outline-none focus:ring-2"
>
<Card className="hover:bg-primary/30 w-full transition-colors">
<CardHeader>
<CardTitle className="text-foreground text-xl">
<Icons.ColorChange className="h-12 w-12" />
Colors & Typography
</CardTitle>
<CardDescription className="text-lg">
Color Palette and Typography Guidelines
</CardDescription>
</CardHeader>
</Card>
</a>
<a
href="/components-list"
className="focus:ring-primary block rounded-lg text-inherit no-underline hover:no-underline focus:outline-none focus:ring-2"
>
<Card className="hover:bg-primary/30 w-full transition-colors">
<CardHeader>
<CardTitle className="text-foreground text-xl">
<Icons.ColorChange className="h-12 w-12" />
Components
</CardTitle>
<CardDescription className="text-lg">
Essential UI Components with Variants
</CardDescription>
</CardHeader>
</Card>
</a>
<a
href="/patterns"
className="focus:ring-primary block rounded-lg text-inherit no-underline hover:no-underline focus:outline-none focus:ring-2"
>
<Card className="hover:bg-primary/30 w-full transition-colors">
<CardHeader>
<CardTitle className="text-foreground text-xl">
<Icons.ColorChange className="h-12 w-12" />
Patterns
</CardTitle>
<CardDescription className="text-lg">
Component-Based Layout Examples
</CardDescription>
</CardHeader>
</Card>
</a>
</div> </div>
<TabsShowcase />
<h1 className="text-foreground ml-6 mb-6 text-5xl">Components</h1>
<AllinOneMenuShowcase />
<ButtonShowcase /> <ButtonShowcase />
<CheckboxShowcase /> <CheckboxShowcase />
<CinePlayerShowcase />
<ComboboxShowcase />
<DataRowShowcase /> <DataRowShowcase />
<DialogShowcase />
<DropdownMenuShowcase /> <DropdownMenuShowcase />
<HoverCardShowcase />
<InputShowcase /> <InputShowcase />
<LabelShowcase />
<NumericMetaShowcase />
<PanelSectionShowcase />
<PopoverShowcase />
<ScrollAreaShowcase /> <ScrollAreaShowcase />
<SelectShowcase /> <SelectShowcase />
<SliderShowcase /> <SliderShowcase />
@ -47,7 +120,7 @@ export default function ComponentsList() {
<ToastShowcase /> <ToastShowcase />
<ToolButtonShowcase /> <ToolButtonShowcase />
<ToolButtonListShowcase /> <ToolButtonListShowcase />
<NumericMetaShowcase /> <TooltipShowcase />
</div> </div>
</div> </div>
</TooltipProvider> </TooltipProvider>

View File

@ -0,0 +1,142 @@
import React from 'react';
import AllInOneMenu, {
IconMenu,
SubMenu,
ItemPanel,
Item,
DividerItem,
HorizontalDirection,
VerticalDirection,
} from '../../../../ui-next/src/components/AllInOneMenu';
import { Switch } from '../../../../ui-next/src/components/Switch';
import ShowcaseRow from './ShowcaseRow';
/**
* PureUI mock of the inapp Window/Level menu.
* Clickable, but all actions are inert.
*/
export default function AllinOneMenuShowcase() {
/* Helpers to build common static items so the JSX stays concise */
const renderColorLUTItems = () =>
[
'Grayscale',
'X Ray',
'HSV',
'Hot Iron',
'Red Hot',
'S PET',
'Perfusion',
'Rainbow',
'SUV',
'GE 256',
'GE',
'Siemens',
].map(name => <Item key={name} label={name} />);
const renderWindowPresetItems = () =>
[
{ desc: 'Soft tissue', wl: '400 / 40' },
{ desc: 'Lung', wl: '1500 / -600' },
{ desc: 'Liver', wl: '150 / 90' },
{ desc: 'Bone', wl: '2500 / 480' },
{ desc: 'Brain', wl: '80 / 40' },
].map(p => (
<Item
key={p.desc}
label={p.desc}
secondaryLabel={p.wl}
/>
));
return (
<ShowcaseRow
title="All In One Menu"
description="A structured, consolidated menu designed to reduce visual clutter, helping users keep their focus on the image. It supports various UI components—including Switches, Numeric Inputs, Tabs, and Sliders—for detailed settings, as well as text-based lists for actionable items."
code={`<IconMenu icon="viewport-window-level" menuStyle={{ width: 212, maxHeight: 500 }}>
<ItemPanel label="Display">
<Item label="Display Color bar" rightIcon={<Switch disabled />} />
<DividerItem />
<SubMenu itemLabel="Color LUT" itemIcon="icon-color-lut">
<ItemPanel label="Color LUTs">
<Item label="Preview in viewport" rightIcon={<Switch disabled />} />
<DividerItem />
<Item label="Grayscale" />
<Item label="X Ray" />
<Item label="HSV" />
<Item label="Hot Iron" />
<Item label="Red Hot" />
<Item label="S PET" />
<Item label="Perfusion" />
<Item label="Rainbow" />
<Item label="SUV" />
<Item label="GE 256" />
<Item label="GE" />
<Item label="Siemens" />
</ItemPanel>
</SubMenu>
<SubMenu itemLabel="Window Presets" itemIcon="viewport-window-level">
<ItemPanel label="CT Presets">
<Item label="Soft tissue" secondaryLabel="400 / 40" />
<Item label="Lung" secondaryLabel="1500 / 600" />
<Item label="Liver" secondaryLabel="150 / 90" />
<Item label="Bone" secondaryLabel="2500 / 480" />
<Item label="Brain" secondaryLabel="80 / 40" />
</ItemPanel>
</SubMenu>
</ItemPanel>
</IconMenu>`}
>
<div className="border-input/70 relative flex h-12 items-center rounded border bg-black px-4">
<IconMenu
icon="viewport-window-level"
iconClassName="text-xl text-highlight hover:bg-primary/30 cursor-pointer rounded"
horizontalDirection={HorizontalDirection.LeftToRight}
verticalDirection={VerticalDirection.TopToBottom}
menuStyle={{ width: 212, maxHeight: 500 }}
>
<ItemPanel label="Display">
<Item
label="Display Color bar"
rightIcon={
<Switch
checked={false}
disabled
className="pointer-events-none"
/>
}
useIconSpace={false}
/>
<DividerItem />
<SubMenu itemLabel="Color LUT" itemIcon="icon-color-lut">
<ItemPanel
label="Color LUTs"
maxHeight="calc(100vh - 250px)"
className="flex flex-col"
>
<Item
label="Preview in viewport"
rightIcon={
<Switch
checked={false}
disabled
className="pointer-events-none"
/>
}
/>
<DividerItem />
{renderColorLUTItems()}
</ItemPanel>
</SubMenu>
<SubMenu itemLabel="Window Presets" itemIcon="viewport-window-level">
<ItemPanel label="CT Presets">{renderWindowPresetItems()}</ItemPanel>
</SubMenu>
</ItemPanel>
</IconMenu>
<span className="text-muted-foreground ml-3 text-sm">
Click the icon to explore an example
</span>
</div>
</ShowcaseRow>
);
}

View File

@ -0,0 +1,37 @@
import React, { useState } from 'react';
import CinePlayer from '../../../../ui-next/src/components/CinePlayer/CinePlayer';
import ShowcaseRow from './ShowcaseRow';
/**
* CinePlayerShowcase displays a playable/pausable cine player with FPS control.
*/
export default function CinePlayerShowcase() {
const [isPlaying, setIsPlaying] = useState(false);
const [fps, setFps] = useState(24);
return (
<ShowcaseRow
title="Cine Player"
description="Play, pause, scrub through dynamic image series and adjust FPS."
code={`
<CinePlayer
className="w-[300px]"
isPlaying={isPlaying}
frameRate={fps}
onPlayPauseChange={setIsPlaying}
onFrameRateChange={setFps}
onClose={() => console.log('close clicked')}
/>
`}
>
<CinePlayer
className="w-[300px]"
isPlaying={isPlaying}
frameRate={fps}
onPlayPauseChange={setIsPlaying}
onFrameRateChange={setFps}
onClose={() => console.log('close clicked')}
/>
</ShowcaseRow>
);
}

View File

@ -0,0 +1,105 @@
import React from 'react';
import { Combobox } from '../../../../ui-next/src/components/Combobox/Combobox';
import ShowcaseRow from './ShowcaseRow';
/**
* ComboboxShowcase demonstrates the searchable Combobox component with a
* comprehensive Modality list.
*/
export default function ComboboxShowcase() {
const modalities = [
'AR',
'ASMT',
'AU',
'BDUS',
'BI',
'BMD',
'CR',
'CT',
'CTPROTOCOL',
'DG',
'DOC',
'DX',
'ECG',
'EPS',
'ES',
'FID',
'GM',
'HC',
'HD',
'IO',
'IOL',
'IVOCT',
'IVUS',
'KER',
'KO',
'LEN',
'LS',
'MG',
'MR',
'M3D',
'NM',
'OAM',
'OCT',
'OP',
'OPM',
'OPT',
'OPTBSV',
'OPTENF',
'OPV',
'OSS',
'OT',
'PLAN',
'PR',
'PT',
'PX',
'REG',
'RESP',
'RF',
'RG',
'RTDOSE',
'RTIMAGE',
'RTINTENT',
'RTPLAN',
'RTRAD',
'RTRECORD',
'RTSEGANN',
'RTSTRUCT',
'RWV',
'SEG',
'SM',
'SMR',
'SR',
'SRF',
'STAIN',
'TEXTUREMAP',
'TG',
'US',
'VA',
'XA',
'XC',
].map(m => ({ value: m, label: m }));
return (
<ShowcaseRow
title="Combobox"
description="Searchable dropdown built with Command + Popover primitives."
code={`
const modalities = [
'AR','ASMT','AU','BDUS','BI','BMD','CR','CT','CTPROTOCOL','DG','DOC','DX','ECG','EPS','ES','FID',
'GM','HC','HD','IO','IOL','IVOCT','IVUS','KER','KO','LEN','LS','MG','MR','M3D','NM','OAM','OCT',
'OP','OPM','OPT','OPTBSV','OPTENF','OPV','OSS','OT','PLAN','PR','PT','PX','REG','RESP','RF','RG',
'RTDOSE','RTIMAGE','RTINTENT','RTPLAN','RTRAD','RTRECORD','RTSEGANN','RTSTRUCT','RWV','SEG','SM',
'SMR','SR','SRF','STAIN','TEXTUREMAP','TG','US','VA','XA','XC',
].map(m => ({ value: m, label: m }));
<Combobox data={modalities} placeholder="Modality" />
`}
>
<Combobox
data={modalities}
placeholder="Modality"
/>
</ShowcaseRow>
);
}

View File

@ -0,0 +1,82 @@
import React from 'react';
import {
Dialog,
DialogTrigger,
DialogContent,
DialogHeader,
DialogFooter,
DialogTitle,
DialogDescription,
DialogClose,
} from '../../../../ui-next/src/components/Dialog/Dialog';
import { Button } from '../../../../ui-next/src/components/Button';
import ShowcaseRow from './ShowcaseRow';
/**
* DialogShowcase demonstrates a simple Radixbased dialog.
*/
export default function DialogShowcase() {
return (
<ShowcaseRow
title="Dialog"
description="Modal dialog with header, content, and footer actions."
code={`
<Dialog>
<DialogTrigger asChild>
<Button variant="default">Open Dialog</Button>
</DialogTrigger>
<DialogContent>
<DialogHeader>
<DialogTitle>Example Dialog</DialogTitle>
</DialogHeader>
<DialogDescription>
This is a short message inside the dialog.
</DialogDescription>
<DialogFooter>
<DialogClose asChild>
<Button variant="secondary" className="min-w-[60px]">Cancel</Button>
</DialogClose>
<DialogClose asChild>
<Button variant="default" className="min-w-[60px]">OK</Button>
</DialogClose>
</DialogFooter>
</DialogContent>
</Dialog>
`}
>
<Dialog>
<DialogTrigger asChild>
<Button variant="default">Open Dialog</Button>
</DialogTrigger>
<DialogContent>
<DialogHeader>
<DialogTitle>Example Dialog</DialogTitle>
</DialogHeader>
<DialogDescription>This is a short message inside the dialog.</DialogDescription>
<DialogFooter>
<DialogClose asChild>
<Button
variant="secondary"
className="min-w-[60px]"
>
Cancel
</Button>
</DialogClose>
<DialogClose asChild>
<Button
variant="default"
className="min-w-[60px]"
>
OK
</Button>
</DialogClose>
</DialogFooter>
</DialogContent>
</Dialog>
</ShowcaseRow>
);
}

View File

@ -0,0 +1,39 @@
import React from 'react';
import {
HoverCard,
HoverCardTrigger,
HoverCardContent,
} from '../../../../ui-next/src/components/HoverCard/HoverCard';
import { Button } from '../../../../ui-next/src/components/Button';
import ShowcaseRow from './ShowcaseRow';
/**
* HoverCardShowcase demonstrates a Hover Card that appears on pointer hover.
*/
export default function HoverCardShowcase() {
return (
<ShowcaseRow
title="Hover Card"
description="Lightweight, nonmodal surface that appears on hover or focus."
code={`
<HoverCard>
<HoverCardTrigger asChild>
<Button variant="link">Hover me</Button>
</HoverCardTrigger>
<HoverCardContent>
<p className="text-sm">Hello there! I'm a hover card.</p>
</HoverCardContent>
</HoverCard>
`}
>
<HoverCard>
<HoverCardTrigger asChild>
<Button variant="link">Hover me</Button>
</HoverCardTrigger>
<HoverCardContent>
<p className="text-sm">Hello there! I'm a hover card.</p>
</HoverCardContent>
</HoverCard>
</ShowcaseRow>
);
}

View File

@ -0,0 +1,27 @@
import React from 'react';
import { Label } from '../../../../ui-next/src/components/Label/Label';
import { Switch } from '../../../../ui-next/src/components/Switch';
import ShowcaseRow from './ShowcaseRow';
/**
* LabelShowcase pairs a Label with a Switch inline.
*/
export default function LabelShowcase() {
return (
<ShowcaseRow
title="Label"
description="Labels clarify the purpose of controls and improve accessibility."
code={`
<Switch defaultChecked id="preview-switch" />
<Label htmlFor="preview-switch" className="ml-2">
Preview edits before creating
</Label>
`}
>
<div className="flex items-center gap-2">
<Switch defaultChecked id="preview-switch" />
<Label htmlFor="preview-switch">Preview edits before creating</Label>
</div>
</ShowcaseRow>
);
}

View File

@ -45,7 +45,7 @@ export default function NumericShowcase() {
<Numeric.NumberInput className="w-32 text-center" /> <Numeric.NumberInput className="w-32 text-center" />
</Numeric.Container>`} </Numeric.Container>`}
> >
<div className="bg-popover flex w-[300px] flex-col space-y-4 rounded p-4"> <div className="bg-muted flex w-[300px] flex-col space-y-4 rounded p-4">
<Numeric.Container <Numeric.Container
mode="number" mode="number"
min={0} min={0}
@ -136,7 +136,7 @@ const [dimensionGroupNumber, setDimensionGroupNumber] = useState(1);
</div> </div>
</Numeric.Container>`} </Numeric.Container>`}
> >
<div className="bg-popover flex w-[300px] flex-col space-y-4 rounded p-4"> <div className="bg-muted flex w-[300px] flex-col space-y-4 rounded p-4">
<Numeric.Container <Numeric.Container
mode="stepper" mode="stepper"
value={dimensionGroupNumber} value={dimensionGroupNumber}
@ -229,7 +229,7 @@ const [controlledValue, setControlledValue] = useState(0);
<Numeric.SingleRange showNumberInput /> <Numeric.SingleRange showNumberInput />
</Numeric.Container>`} </Numeric.Container>`}
> >
<div className="bg-popover flex w-[300px] flex-col space-y-4 rounded p-4"> <div className="bg-muted flex w-[300px] flex-col space-y-4 rounded p-4">
<Numeric.Container <Numeric.Container
mode="singleRange" mode="singleRange"
min={0} min={0}
@ -314,7 +314,7 @@ const [controlledValues, setControlledValues] = useState<[number, number]>([0, 1
<Numeric.DoubleRange /> <Numeric.DoubleRange />
</Numeric.Container>`} </Numeric.Container>`}
> >
<div className="bg-popover flex w-[300px] flex-col space-y-4 rounded p-4"> <div className="bg-muted flex w-[300px] flex-col space-y-4 rounded p-4">
<Numeric.Container <Numeric.Container
mode="doubleRange" mode="doubleRange"
min={0} min={0}
@ -407,7 +407,7 @@ const [controlledValues, setControlledValues] = useState<[number, number]>([0, 1
<Numeric.DoubleRange showNumberInputs /> <Numeric.DoubleRange showNumberInputs />
</Numeric.Container>`} </Numeric.Container>`}
> >
<div className="bg-popover flex w-[300px] flex-col space-y-4 rounded p-4"> <div className="bg-muted flex w-[300px] flex-col space-y-4 rounded p-4">
<Numeric.Container <Numeric.Container
mode="number" mode="number"
min={0} min={0}

View File

@ -0,0 +1,52 @@
// docs/src/pages/components/PanelSectionShowcase.tsx
import React from 'react';
import { PanelSection } from '../../../../ui-next/src/components/PanelSection/PanelSection';
import { Button } from '../../../../ui-next/src/components/Button';
import ShowcaseRow from './ShowcaseRow';
/**
* PanelSectionShowcase displays an expandable/collapsible panel section.
*/
export default function PanelSectionShowcase() {
return (
<ShowcaseRow
title="Panel Section"
description="Collapsible panels for grouping controls or metadata inside sidepanels."
code={`
<PanelSection defaultOpen>
<PanelSection.Header>Series Information</PanelSection.Header>
<PanelSection.Content>
<div className="p-2 space-y-1 text-sm text-muted-foreground">
<div>Images: 120</div>
<div>Modality: MR</div>
<div>Body Part: Brain</div>
<Button variant="link" size="xs">Load another series</Button>
</div>
</PanelSection.Content>
</PanelSection>
`}
>
<PanelSection
defaultOpen
className="bg-muted w-[280px]"
>
<PanelSection.Header className="bg-popover">Series Information</PanelSection.Header>
<PanelSection.Content>
<div className="text-muted-foreground space-y-1 p-2 text-sm">
<div className="pl-2">
<div>Images: 120</div>
<div>Modality: MR</div>
<div>Body Part: Brain</div>
</div>
<Button
variant="ghost"
size="sm"
>
Load more information
</Button>
</div>
</PanelSection.Content>
</PanelSection>
</ShowcaseRow>
);
}

View File

@ -0,0 +1,43 @@
import React from 'react';
import {
Popover,
PopoverTrigger,
PopoverContent,
} from '../../../../ui-next/src/components/Popover/Popover';
import { Button } from '../../../../ui-next/src/components/Button';
import ShowcaseRow from './ShowcaseRow';
/**
* PopoverShowcase presents a simple Popover that appears after clicking a button.
*/
export default function PopoverShowcase() {
return (
<ShowcaseRow
title="Popover"
description="Transient panel that appears over content—great for small forms, extra details, or actions."
code={`
<Popover>
<PopoverTrigger asChild>
<Button variant="default">Open Popover</Button>
</PopoverTrigger>
<PopoverContent className="w-60">
<p className="text-sm">
Hello! Im a Popover. Click outside or press Esc to close me.
</p>
</PopoverContent>
</Popover>
`}
>
<Popover>
<PopoverTrigger asChild>
<Button variant="default">Open Popover</Button>
</PopoverTrigger>
<PopoverContent className="w-60">
<p className="text-sm">
Hello! Im a Popover. Click outside or press&nbsp;Esc to close me.
</p>
</PopoverContent>
</Popover>
</ShowcaseRow>
);
}

View File

@ -12,7 +12,7 @@ export default function TabsShowcase() {
title="Tabs" title="Tabs"
description="Tabs (or segmented controls) can be used to provide navigation options or allow users to switch between multiple options (e.g., tool settings) " description="Tabs (or segmented controls) can be used to provide navigation options or allow users to switch between multiple options (e.g., tool settings) "
code={` code={`
<Tabs className="w-[400px]" onValueChange={newValue => console.log(newValue)}> <Tabs defaultValue="circle" className="w-[400px]" onValueChange={newValue => console.log(newValue)}>
<TabsList> <TabsList>
<TabsTrigger value="circle">Circle</TabsTrigger> <TabsTrigger value="circle">Circle</TabsTrigger>
<Separator orientation="vertical" /> <Separator orientation="vertical" />
@ -24,6 +24,7 @@ export default function TabsShowcase() {
`} `}
> >
<Tabs <Tabs
defaultValue="circle"
className="w-[400px]" className="w-[400px]"
onValueChange={newValue => console.log(newValue)} onValueChange={newValue => console.log(newValue)}
> >
@ -37,4 +38,4 @@ export default function TabsShowcase() {
</Tabs> </Tabs>
</ShowcaseRow> </ShowcaseRow>
); );
} }

View File

@ -0,0 +1,35 @@
import React from 'react';
import { Tooltip, TooltipTrigger, TooltipContent } from '../../../../ui-next/src/components/Tooltip';
import { Button } from '../../../../ui-next/src/components/Button';
import ShowcaseRow from './ShowcaseRow';
/**
* TooltipShowcase component displays Tooltip variants and examples
*/
export default function TooltipShowcase() {
return (
<ShowcaseRow
title="Tooltip"
description="Tooltips reveal helper text when users hover, focus, or tap an element."
code={`
<Tooltip>
<TooltipTrigger asChild>
<Button variant="ghost" size="icon">?</Button>
</TooltipTrigger>
<TooltipContent>
Tooltip content
</TooltipContent>
</Tooltip>
`}
>
<Tooltip>
<TooltipTrigger asChild>
<Button variant="ghost" size="icon">?</Button>
</TooltipTrigger>
<TooltipContent>
Tooltip content
</TooltipContent>
</Tooltip>
</ShowcaseRow>
);
}

View File

@ -27,8 +27,9 @@ export default function ComponentShowcase() {
description="Patterns and example layouts" description="Patterns and example layouts"
> >
<div className="text-foreground min-h-screen bg-black"> <div className="text-foreground min-h-screen bg-black">
<div className="mx-auto my-4 max-w-5xl pt-6 pb-3"> <div className="mx-auto my-4 max-w-5xl pt-4 pb-6">
<div className="grid grid-cols-1 gap-5 md:grid-cols-3"> {/* Navigation cards */}
<div className="mb-8 grid grid-cols-1 gap-5 md:grid-cols-3">
<a <a
href="/colors-and-type" href="/colors-and-type"
className="focus:ring-primary block rounded-lg text-inherit no-underline hover:no-underline focus:outline-none focus:ring-2" className="focus:ring-primary block rounded-lg text-inherit no-underline hover:no-underline focus:outline-none focus:ring-2"
@ -78,9 +79,7 @@ export default function ComponentShowcase() {
</Card> </Card>
</a> </a>
</div> </div>
</div>
<div className="mx-auto my-4 max-w-5xl pt-4 pb-6">
<h1 className="text-foreground ml-6 mb-6 text-5xl">Patterns</h1> <h1 className="text-foreground ml-6 mb-6 text-5xl">Patterns</h1>
<ShowcaseRow <ShowcaseRow

View File

@ -3,6 +3,38 @@
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [3.10.4](https://github.com/OHIF/Viewers/compare/v3.10.2...v3.10.4) (2025-07-23)
**Note:** Version bump only for package @ohif/i18n
## [3.10.2](https://github.com/OHIF/Viewers/compare/v3.10.1...v3.10.2) (2025-06-09)
**Note:** Version bump only for package @ohif/i18n
## [3.10.1](https://github.com/OHIF/Viewers/compare/v3.10.0...v3.10.1) (2025-04-11)
**Note:** Version bump only for package @ohif/i18n
# [3.10.0](https://github.com/OHIF/Viewers/compare/v3.10.0-beta.159...v3.10.0) (2025-04-10)
**Note:** Version bump only for package @ohif/i18n
# [3.10.0-beta.159](https://github.com/OHIF/Viewers/compare/v3.10.0-beta.158...v3.10.0-beta.159) (2025-04-09) # [3.10.0-beta.159](https://github.com/OHIF/Viewers/compare/v3.10.0-beta.158...v3.10.0-beta.159) (2025-04-09)
**Note:** Version bump only for package @ohif/i18n **Note:** Version bump only for package @ohif/i18n

View File

@ -1,6 +1,6 @@
{ {
"name": "@ohif/i18n", "name": "@ohif/i18n",
"version": "3.10.0-beta.159", "version": "3.10.4",
"description": "Internationalization library for The OHIF Viewer", "description": "Internationalization library for The OHIF Viewer",
"author": "OHIF", "author": "OHIF",
"license": "MIT", "license": "MIT",

View File

@ -3,6 +3,41 @@
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [3.10.4](https://github.com/OHIF/Viewers/compare/v3.10.2...v3.10.4) (2025-07-23)
**Note:** Version bump only for package @ohif/ui-next
## [3.10.2](https://github.com/OHIF/Viewers/compare/v3.10.1...v3.10.2) (2025-06-09)
**Note:** Version bump only for package @ohif/ui-next
## [3.10.1](https://github.com/OHIF/Viewers/compare/v3.10.0...v3.10.1) (2025-04-11)
### Bug Fixes
* make datasource selection work and UI fixes ([#4952](https://github.com/OHIF/Viewers/issues/4952)) ([aaba8bf](https://github.com/OHIF/Viewers/commit/aaba8bf1b04be6c00a88f1f5f29cb24133b0c39e))
# [3.10.0](https://github.com/OHIF/Viewers/compare/v3.10.0-beta.159...v3.10.0) (2025-04-10)
**Note:** Version bump only for package @ohif/ui-next
# [3.10.0-beta.159](https://github.com/OHIF/Viewers/compare/v3.10.0-beta.158...v3.10.0-beta.159) (2025-04-09) # [3.10.0-beta.159](https://github.com/OHIF/Viewers/compare/v3.10.0-beta.158...v3.10.0-beta.159) (2025-04-09)

View File

@ -1,6 +1,6 @@
{ {
"name": "@ohif/ui-next", "name": "@ohif/ui-next",
"version": "3.10.0-beta.159", "version": "3.10.4",
"description": "Next version of OHIF Viewers UI, more customizable using shadcn/ui", "description": "Next version of OHIF Viewers UI, more customizable using shadcn/ui",
"main": "dist/ohif-ui-next.umd.js", "main": "dist/ohif-ui-next.umd.js",
"module": "src/index.ts", "module": "src/index.ts",

View File

@ -3,7 +3,7 @@ import React from 'react';
const DividerItem = () => { const DividerItem = () => {
return ( return (
<div className="flex h-3.5 shrink-0 items-center px-2"> <div className="flex h-3.5 shrink-0 items-center px-2">
<div className="bg-primary-dark h-[2px] w-full"></div> <div className="bg-background h-[2px] w-full"></div>
</div> </div>
); );
}; };

View File

@ -1,10 +1,10 @@
import React, { useState, useEffect } from 'react'; import React, { useState, useEffect } from 'react';
import { ErrorBoundary as ReactErrorBoundary } from 'react-error-boundary'; import { ErrorBoundary as ReactErrorBoundary, FallbackProps } from 'react-error-boundary';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import { toast } from 'sonner';
import { Dialog, DialogContent } from '../Dialog/Dialog'; import { Dialog, DialogContent } from '../Dialog/Dialog';
import { ScrollArea } from '../ScrollArea/ScrollArea'; import { ScrollArea } from '../ScrollArea/ScrollArea';
import { Button } from '../Button/Button'; import { Button } from '../Button/Button';
import { useNotification } from '../../contextProviders';
const isProduction = process.env.NODE_ENV === 'production'; const isProduction = process.env.NODE_ENV === 'production';
@ -112,7 +112,7 @@ interface ErrorBoundaryError extends Error {
stack?: string; stack?: string;
} }
interface DefaultFallbackProps { interface DefaultFallbackProps extends FallbackProps {
error: ErrorBoundaryError; error: ErrorBoundaryError;
context: string; context: string;
resetErrorBoundary: () => void; resetErrorBoundary: () => void;
@ -135,6 +135,8 @@ const DefaultFallback = ({
}: DefaultFallbackProps) => { }: DefaultFallbackProps) => {
const { t } = useTranslation('ErrorBoundary'); const { t } = useTranslation('ErrorBoundary');
const [showDetails, setShowDetails] = useState(false); const [showDetails, setShowDetails] = useState(false);
const { show } = useNotification();
const title = `${t('Something went wrong')}${!isProduction && ` ${t('in')} ${context}`}.`; const title = `${t('Something went wrong')}${!isProduction && ` ${t('in')} ${context}`}.`;
const subtitle = t('Sorry, something went wrong there. Try again.'); const subtitle = t('Sorry, something went wrong there. Try again.');
@ -143,20 +145,32 @@ const DefaultFallback = ({
const copyErrorToClipboard = () => { const copyErrorToClipboard = () => {
if (code) { if (code) {
navigator.clipboard.writeText(code); navigator.clipboard.writeText(code);
toast.success(t('Error copied to clipboard')); show({
title: t('Success'),
message: t('Error copied to clipboard'),
type: 'success',
duration: 3000,
});
} }
}; };
useEffect(() => { useEffect(() => {
toast.error(title, { // Use a stable ID based on error message to support deduplication
description: subtitle, const errorId = `error-${errorTitle || error.message}`;
// We don't need to track shown state - instead rely on the notification deduplication system
show({
title,
message: subtitle,
type: 'error',
duration: 0,
id: errorId,
action: { action: {
label: t('Show Details'), label: t('Show Details'),
onClick: () => setShowDetails(true), onClick: () => setShowDetails(true),
}, },
duration: 0,
}); });
}, [error, subtitle, t, title]); }, [error, errorTitle, subtitle, t, title, show]);
if (isProduction) { if (isProduction) {
return null; return null;
@ -286,9 +300,8 @@ const ErrorBoundary = ({
<ReactErrorBoundary <ReactErrorBoundary
fallbackRender={props => ( fallbackRender={props => (
<FallbackComponent <FallbackComponent
error={props.error} {...props}
context={context} context={context}
resetErrorBoundary={props.resetErrorBoundary}
/> />
)} )}
onReset={onResetHandler} onReset={onResetHandler}

View File

@ -14,7 +14,7 @@ export const Clear = (props: IconProps) => (
fillRule="evenodd" fillRule="evenodd"
> >
<circle <circle
fill="#0944B3" fill="currentColor"
cx="9.5" cx="9.5"
cy="9.5" cy="9.5"
r="9.5" r="9.5"

View File

@ -6,8 +6,8 @@ export const PowerOff = (props: IconProps) => (
xmlns="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 24 28" viewBox="0 0 24 28"
aria-labelledby="title" aria-labelledby="title"
width="1em" width="28px"
height="1em" height="28px"
fill="currentColor" fill="currentColor"
{...props} {...props}
> >

View File

@ -57,7 +57,7 @@ const ScrollArea = React.forwardRef<
<ScrollAreaPrimitive.Root <ScrollAreaPrimitive.Root
ref={ref} ref={ref}
className={cn('relative h-full overflow-hidden', className)} className={cn('relative h-full overflow-hidden', className)}
type={props.type || 'auto'} type={props.type}
{...props} {...props}
> >
<ScrollAreaPrimitive.Viewport <ScrollAreaPrimitive.Viewport

View File

@ -4,6 +4,7 @@ import PropTypes from 'prop-types';
import { StudyItem } from '../StudyItem'; import { StudyItem } from '../StudyItem';
import { StudyBrowserSort } from '../StudyBrowserSort'; import { StudyBrowserSort } from '../StudyBrowserSort';
import { StudyBrowserViewOptions } from '../StudyBrowserViewOptions'; import { StudyBrowserViewOptions } from '../StudyBrowserViewOptions';
import { ScrollArea } from '../ScrollArea';
const noop = () => {}; const noop = () => {};
@ -59,26 +60,28 @@ const StudyBrowser = ({
}; };
return ( return (
<div <ScrollArea>
className="ohif-scrollbar invisible-scrollbar bg-bkg-low flex flex-1 flex-col gap-[4px] overflow-auto" <div
data-cy={'studyBrowser-panel'} className="bg-bkg-low flex flex-1 flex-col gap-[4px]"
> data-cy={'studyBrowser-panel'}
<div className="flex flex-col gap-[4px]"> >
{showSettings && ( <div className="flex flex-col gap-[4px]">
<div className="w-100 bg-bkg-low flex h-[48px] items-center justify-center gap-[10px] px-[8px] py-[10px]"> {showSettings && (
<> <div className="w-100 bg-bkg-low flex h-[48px] items-center justify-center gap-[10px] px-[8px] py-[10px]">
<StudyBrowserViewOptions <>
tabs={tabs} <StudyBrowserViewOptions
onSelectTab={onClickTab} tabs={tabs}
activeTabName={activeTabName} onSelectTab={onClickTab}
/> activeTabName={activeTabName}
<StudyBrowserSort servicesManager={servicesManager} /> />
</> <StudyBrowserSort servicesManager={servicesManager} />
</div> </>
)} </div>
{getTabContent()} )}
{getTabContent()}
</div>
</div> </div>
</div> </ScrollArea>
); );
}; };

Some files were not shown because too many files have changed in this diff Show More