Compare commits

..
Author SHA1 Message Date
ohif-bot 15ef4c2e0f chore(version): Update package versions to 3.13.0-beta.41 [skip ci] 2026-03-16 13:40:10 +00:00
Ghadeer AlbattarniandBill Wallace 7a38903b19 fix(sr-hydration): enable hydration and arrow navigation for 3D SR measurements (#5887)
Joe is away, so approving based on the code having the requested change, and otherwise looking good/passing tests.

* fix(sr-hydration): enable hydration and arrows navigation for 3D SR measurements

* test: add automated test for SR measurement navigation with arrows after hydration

* add cross-study warning in the 3D branch

* test: address reviewer feedback for the test

* fix: support 3D and 2D annotations for SR hydration

* test: improve navigation to first image

---------

Co-authored-by: Bill Wallace <wayfarer3130@gmail.com>
2026-03-16 09:36:56 -04:00
ohif-bot 40a472a9b1 chore(version): Update package versions to 3.13.0-beta.40 [skip ci] 2026-03-13 19:28:45 +00:00
Joe Boccanfuso d8d376edaf fix(security): Bump flattened version to address CVE-2026-32141. (#5897) 2026-03-13 15:25:21 -04:00
ohif-bot d0bab783c7 chore(version): Update package versions to 3.13.0-beta.39 [skip ci] 2026-03-13 14:15:45 +00:00
Joe BoccanfusoandBill Wallace fe1ecfe0cc fix(window level): The window level value is not displayed by default on all the viewports when selecting common/custom layout and TMTV. (#5865)
* fix(window level): Set up listener for viewport availability such that the initial window level can be read and displayed.

* PR feedback.

* PR feedback.

---------

Co-authored-by: Bill Wallace <wayfarer3130@gmail.com>
2026-03-13 10:12:07 -04:00
ohif-bot 54d9ea39bf chore(version): Update package versions to 3.13.0-beta.38 [skip ci] 2026-03-12 22:42:59 +00:00
Joe Boccanfuso 7b5d0ce40e fix(segmentation): Display "No description S:{series number} {modality}" for segmentations with no label. (#5874)
* Bump CS3D dependency to get the fallbackLabel field additions.
2026-03-12 18:39:14 -04:00
ohif-bot 15f14e34e4 chore(version): Update package versions to 3.13.0-beta.37 [skip ci] 2026-03-12 00:56:47 +00:00
Joe Boccanfuso d015b2e32a fix(security): Bump tar version to address CVE-2026-31802. (#5893) 2026-03-11 20:53:17 -04:00
ohif-bot 197b80eefd chore(version): Update package versions to 3.13.0-beta.36 [skip ci] 2026-03-11 18:31:47 +00:00
Bill Wallace b83e978df8 fix: Modalities in study list should select starts with as primary (#5886) 2026-03-11 14:28:20 -04:00
ohif-bot 4c2bd8d5ed chore(version): Update package versions to 3.13.0-beta.35 [skip ci] 2026-03-09 19:47:36 +00:00
Joe Boccanfuso 889026f8a9 fix(Threshold tool): Threshold tool no longer becomes deselected when the Dynamic option is selected (#5884)
fix(Threshold tool): Added 'ThresholdCircularBrushDynamic' to the toolNames array so the evaluator correctly recognizes it as an active state for the Threshold button when Dynamic mode is selected.
2026-03-09 15:43:56 -04:00
ohif-bot 1aaf569825 chore(version): Update package versions to 3.13.0-beta.34 [skip ci] 2026-03-09 13:11:54 +00:00
Ghadeer Albattarni 6f773f9972 fix(seg hydration): auto-hydrate RT struct on second load with disableConfirmationPrompts (#5875) 2026-03-09 09:08:21 -04:00
ohif-bot 0f822aaf48 chore(version): Update package versions to 3.13.0-beta.33 [skip ci] 2026-03-05 20:12:21 +00:00
Joe Boccanfuso 61a1fccd7d fix(security): Bump svgo and tar to fix vulnerabilities. (#5877) 2026-03-05 15:09:05 -05:00
ohif-bot c842642341 chore(version): Update package versions to 3.13.0-beta.32 [skip ci] 2026-03-05 18:00:06 +00:00
TFRadicalImagingandBill Wallace 70f76aeba1 feat(ecg): add DICOM ECG waveform extension (#5856)
* feat(ecg): add DICOM ECG waveform extension

Introduce @ohif/extension-dicom-ecg for rendering DICOM waveform (ECG)
data. Register the extension in the basic mode and pluginConfig.json,
and remove ECG from NON_IMAGE_MODALITIES so waveform display sets are
handled by the new viewport.

* refactor(ecg): move ECG support into cornerstone extension per review feedback

- Remove standalone dicom-ecg extension; fold all ECG functionality into
  the cornerstone extension as requested by reviewer
- Add ECG SOP class handler (DicomEcgSopClassHandler) to the cornerstone
  extension getSopClassHandlerModule, registering ECG waveform metadata
  via genericMetadataProvider on display set creation
- Move ECG helpers (buildEcgModule, decodeInt16Multiplex, base64ToArrayBuffer)
  into extensions/cornerstone/src/utils/ecgMetadata.ts
- Handle ECGViewport in CornerstoneViewportService._setDisplaySets by
  detecting ECGViewport instanceof and calling setEcg(imageId) directly,
  so OHIFCornerstoneViewport can be used without a custom ECG viewport component
- Add ECG support to getCornerstoneViewportType utility
- Update basic mode to reference the cornerstone extension's ECG SOP handler
  and use the base cornerstone viewport for ECG display sets
- Migrate ecgMetadata and getCornerstoneViewportType tests

* chore: revert bun.lock to upstream origin/master

---------

Co-authored-by: Bill Wallace <wayfarer3130@gmail.com>
2026-03-05 12:56:52 -05:00
ohif-bot 30bb5d0652 chore(version): Update package versions to 3.13.0-beta.31 [skip ci] 2026-03-04 20:32:11 +00:00
Ghadeer Albattarni 2358a73c3c fix(microscopy): rename measurement in microscopy mode (#5866) 2026-03-04 15:28:41 -05:00
118 changed files with 4706 additions and 732 deletions

No files matched your search

+121
View File
@@ -3,6 +3,127 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
# [3.13.0-beta.41](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.40...v3.13.0-beta.41) (2026-03-16)
### Bug Fixes
* **sr-hydration:** enable hydration and arrow navigation for 3D SR measurements ([#5887](https://github.com/OHIF/Viewers/issues/5887)) ([7a38903](https://github.com/OHIF/Viewers/commit/7a38903b1977b1cf0f3a0ba8a4a823fac5e8fdeb))
# [3.13.0-beta.40](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.39...v3.13.0-beta.40) (2026-03-13)
### Bug Fixes
* **security:** Bump flattened version to address CVE-2026-32141. ([#5897](https://github.com/OHIF/Viewers/issues/5897)) ([d8d376e](https://github.com/OHIF/Viewers/commit/d8d376edaf9c2b7af237182657e3e2203cca5abb))
# [3.13.0-beta.39](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.38...v3.13.0-beta.39) (2026-03-13)
### Bug Fixes
* **window level:** The window level value is not displayed by default on all the viewports when selecting common/custom layout and TMTV. ([#5865](https://github.com/OHIF/Viewers/issues/5865)) ([fe1ecfe](https://github.com/OHIF/Viewers/commit/fe1ecfe0cc5d1bcf82686d821f356da8936a8c4b))
# [3.13.0-beta.38](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.37...v3.13.0-beta.38) (2026-03-12)
### Bug Fixes
* **segmentation:** Display "No description S:{series number} {modality}" for segmentations with no label. ([#5874](https://github.com/OHIF/Viewers/issues/5874)) ([7b5d0ce](https://github.com/OHIF/Viewers/commit/7b5d0ce40e5422ccfce6091ac3d7559586cbe57e))
# [3.13.0-beta.37](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.36...v3.13.0-beta.37) (2026-03-12)
### Bug Fixes
* **security:** Bump tar version to address CVE-2026-31802. ([#5893](https://github.com/OHIF/Viewers/issues/5893)) ([d015b2e](https://github.com/OHIF/Viewers/commit/d015b2e32a418042034c4f557c5a36499c72f702))
# [3.13.0-beta.36](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.35...v3.13.0-beta.36) (2026-03-11)
### Bug Fixes
* Modalities in study list should select starts with as primary ([#5886](https://github.com/OHIF/Viewers/issues/5886)) ([b83e978](https://github.com/OHIF/Viewers/commit/b83e978df8c9ffda3759378318267b8d0020653c))
# [3.13.0-beta.35](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.34...v3.13.0-beta.35) (2026-03-09)
### Bug Fixes
* **Threshold tool:** Threshold tool no longer becomes deselected when the Dynamic option is selected ([#5884](https://github.com/OHIF/Viewers/issues/5884)) ([889026f](https://github.com/OHIF/Viewers/commit/889026f8a9c20cd21c31b4a02128afd5f057b14b))
# [3.13.0-beta.34](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.33...v3.13.0-beta.34) (2026-03-09)
### Bug Fixes
* **seg hydration:** auto-hydrate RT struct on second load with disableConfirmationPrompts ([#5875](https://github.com/OHIF/Viewers/issues/5875)) ([6f773f9](https://github.com/OHIF/Viewers/commit/6f773f997214c388409f3af3e9fc0e5b84debc10))
# [3.13.0-beta.33](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.32...v3.13.0-beta.33) (2026-03-05)
### Bug Fixes
* **security:** Bump svgo and tar to fix vulnerabilities. ([#5877](https://github.com/OHIF/Viewers/issues/5877)) ([61a1fcc](https://github.com/OHIF/Viewers/commit/61a1fccd7d47965831a6c80357219eed979ce4d6))
# [3.13.0-beta.32](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.31...v3.13.0-beta.32) (2026-03-05)
### Features
* **ecg:** add DICOM ECG waveform extension ([#5856](https://github.com/OHIF/Viewers/issues/5856)) ([70f76ae](https://github.com/OHIF/Viewers/commit/70f76aeba1b27f8e4de5ec73a7b831428e38e3d2))
# [3.13.0-beta.31](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.30...v3.13.0-beta.31) (2026-03-04)
### Bug Fixes
* **microscopy:** rename measurement in microscopy mode ([#5866](https://github.com/OHIF/Viewers/issues/5866)) ([2358a73](https://github.com/OHIF/Viewers/commit/2358a73c3cd24953430064480fb9e66bfe36ea69))
# [3.13.0-beta.30](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.29...v3.13.0-beta.30) (2026-03-04)
+1
View File
@@ -49,6 +49,7 @@ provided by the <a href="https://ohif.org/">Open Health Imaging Foundation (OHIF
| <img src="https://github.com/OHIF/Viewers/blob/master/platform/docs/docs/assets/img/demo-4d.webp?raw=true" alt="4D" width="350"/> | 4D | [Demo](https://viewer.ohif.org/dynamic-volume?StudyInstanceUIDs=2.25.232704420736447710317909004159492840763) |
| <img src="https://github.com/OHIF/Viewers/blob/master/platform/docs/docs/assets/img/demo-video.webp?raw=true" alt="VIDEO" width="350"/> | Video | [Demo](https://viewer.ohif.org/viewer?StudyInstanceUIDs=2.25.96975534054447904995905761963464388233) |
| <img src="https://github.com/OHIF/Viewers/blob/master/platform/docs/docs/assets/img/microscopy.webp?raw=true" alt="microscopy" width="350"/> | Slide Microscopy | [Demo](https://viewer.ohif.org/microscopy?StudyInstanceUIDs=2.25.141277760791347900862109212450152067508) |
| <img src="https://github.com/OHIF/Viewers/blob/master/platform/docs/docs/assets/img/demo-ecg.webp?raw=true" alt="ECG" width="350"/> | ECG Waveform | [Demo](https://viewer-dev.ohif.org/viewer?StudyInstanceUIDs=2.25.209974489360710696739324151261716440238) |
## About
+88
View File
@@ -3,6 +3,94 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
# [3.13.0-beta.41](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.40...v3.13.0-beta.41) (2026-03-16)
**Note:** Version bump only for package @externals/devDependencies
# [3.13.0-beta.40](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.39...v3.13.0-beta.40) (2026-03-13)
**Note:** Version bump only for package @externals/devDependencies
# [3.13.0-beta.39](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.38...v3.13.0-beta.39) (2026-03-13)
**Note:** Version bump only for package @externals/devDependencies
# [3.13.0-beta.38](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.37...v3.13.0-beta.38) (2026-03-12)
**Note:** Version bump only for package @externals/devDependencies
# [3.13.0-beta.37](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.36...v3.13.0-beta.37) (2026-03-12)
**Note:** Version bump only for package @externals/devDependencies
# [3.13.0-beta.36](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.35...v3.13.0-beta.36) (2026-03-11)
**Note:** Version bump only for package @externals/devDependencies
# [3.13.0-beta.35](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.34...v3.13.0-beta.35) (2026-03-09)
**Note:** Version bump only for package @externals/devDependencies
# [3.13.0-beta.34](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.33...v3.13.0-beta.34) (2026-03-09)
**Note:** Version bump only for package @externals/devDependencies
# [3.13.0-beta.33](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.32...v3.13.0-beta.33) (2026-03-05)
**Note:** Version bump only for package @externals/devDependencies
# [3.13.0-beta.32](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.31...v3.13.0-beta.32) (2026-03-05)
**Note:** Version bump only for package @externals/devDependencies
# [3.13.0-beta.31](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.30...v3.13.0-beta.31) (2026-03-04)
**Note:** Version bump only for package @externals/devDependencies
# [3.13.0-beta.30](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.29...v3.13.0-beta.30) (2026-03-04)
**Note:** Version bump only for package @externals/devDependencies
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@externals/devDependencies",
"description": "External dev dependencies - put dev build dependencies here",
"version": "3.13.0-beta.30",
"version": "3.13.0-beta.41",
"license": "MIT",
"private": true,
"engines": {
+88
View File
@@ -3,6 +3,94 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
# [3.13.0-beta.41](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.40...v3.13.0-beta.41) (2026-03-16)
**Note:** Version bump only for package @externals/dicom-microscopy-viewer
# [3.13.0-beta.40](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.39...v3.13.0-beta.40) (2026-03-13)
**Note:** Version bump only for package @externals/dicom-microscopy-viewer
# [3.13.0-beta.39](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.38...v3.13.0-beta.39) (2026-03-13)
**Note:** Version bump only for package @externals/dicom-microscopy-viewer
# [3.13.0-beta.38](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.37...v3.13.0-beta.38) (2026-03-12)
**Note:** Version bump only for package @externals/dicom-microscopy-viewer
# [3.13.0-beta.37](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.36...v3.13.0-beta.37) (2026-03-12)
**Note:** Version bump only for package @externals/dicom-microscopy-viewer
# [3.13.0-beta.36](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.35...v3.13.0-beta.36) (2026-03-11)
**Note:** Version bump only for package @externals/dicom-microscopy-viewer
# [3.13.0-beta.35](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.34...v3.13.0-beta.35) (2026-03-09)
**Note:** Version bump only for package @externals/dicom-microscopy-viewer
# [3.13.0-beta.34](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.33...v3.13.0-beta.34) (2026-03-09)
**Note:** Version bump only for package @externals/dicom-microscopy-viewer
# [3.13.0-beta.33](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.32...v3.13.0-beta.33) (2026-03-05)
**Note:** Version bump only for package @externals/dicom-microscopy-viewer
# [3.13.0-beta.32](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.31...v3.13.0-beta.32) (2026-03-05)
**Note:** Version bump only for package @externals/dicom-microscopy-viewer
# [3.13.0-beta.31](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.30...v3.13.0-beta.31) (2026-03-04)
**Note:** Version bump only for package @externals/dicom-microscopy-viewer
# [3.13.0-beta.30](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.29...v3.13.0-beta.30) (2026-03-04)
**Note:** Version bump only for package @externals/dicom-microscopy-viewer
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@externals/dicom-microscopy-viewer",
"description": "External reference to dicom-microscopy-viewer",
"version": "3.13.0-beta.30",
"version": "3.13.0-beta.41",
"license": "MIT",
"dependencies": {
"dicom-microscopy-viewer": "0.48.17"
+197 -217
View File
@@ -50,7 +50,7 @@
},
"addOns/externals/devDependencies": {
"name": "@externals/devDependencies",
"version": "3.13.0-beta.27",
"version": "3.13.0-beta.39",
"dependencies": {
"@babel/runtime": "7.28.2",
"@kitware/vtk.js": "34.15.1",
@@ -131,22 +131,22 @@
},
"addOns/externals/dicom-microscopy-viewer": {
"name": "@externals/dicom-microscopy-viewer",
"version": "3.13.0-beta.27",
"version": "3.13.0-beta.39",
"dependencies": {
"dicom-microscopy-viewer": "0.48.17",
},
},
"extensions/cornerstone": {
"name": "@ohif/extension-cornerstone",
"version": "3.13.0-beta.27",
"version": "3.13.0-beta.39",
"dependencies": {
"@babel/runtime": "7.28.2",
"@cornerstonejs/adapters": "4.18.2",
"@cornerstonejs/ai": "4.18.2",
"@cornerstonejs/core": "4.18.2",
"@cornerstonejs/labelmap-interpolation": "4.18.2",
"@cornerstonejs/polymorphic-segmentation": "4.18.2",
"@cornerstonejs/tools": "4.18.2",
"@cornerstonejs/adapters": "4.19.0",
"@cornerstonejs/ai": "4.19.0",
"@cornerstonejs/core": "4.19.0",
"@cornerstonejs/labelmap-interpolation": "4.19.0",
"@cornerstonejs/polymorphic-segmentation": "4.19.0",
"@cornerstonejs/tools": "4.19.0",
"@icr/polyseg-wasm": "0.4.0",
"@itk-wasm/morphological-contour-interpolation": "1.1.0",
"@kitware/vtk.js": "34.15.1",
@@ -164,9 +164,9 @@
"@cornerstonejs/codec-libjpeg-turbo-8bit": "1.2.2",
"@cornerstonejs/codec-openjpeg": "1.3.0",
"@cornerstonejs/codec-openjph": "2.4.7",
"@cornerstonejs/dicom-image-loader": "4.18.2",
"@ohif/core": "3.13.0-beta.27",
"@ohif/ui": "3.13.0-beta.27",
"@cornerstonejs/dicom-image-loader": "4.19.0",
"@ohif/core": "3.13.0-beta.39",
"@ohif/ui": "3.13.0-beta.39",
"dcmjs": "0.49.4",
"dicom-parser": "1.8.21",
"hammerjs": "2.0.8",
@@ -178,18 +178,18 @@
},
"extensions/cornerstone-dicom-pmap": {
"name": "@ohif/extension-cornerstone-dicom-pmap",
"version": "3.13.0-beta.27",
"version": "3.13.0-beta.39",
"dependencies": {
"@babel/runtime": "7.28.2",
"@cornerstonejs/adapters": "4.18.2",
"@cornerstonejs/core": "4.18.2",
"@cornerstonejs/adapters": "4.19.0",
"@cornerstonejs/core": "4.19.0",
"@kitware/vtk.js": "34.15.1",
},
"peerDependencies": {
"@ohif/core": "3.13.0-beta.27",
"@ohif/extension-cornerstone": "3.13.0-beta.27",
"@ohif/extension-default": "3.13.0-beta.27",
"@ohif/i18n": "3.13.0-beta.27",
"@ohif/core": "3.13.0-beta.39",
"@ohif/extension-cornerstone": "3.13.0-beta.39",
"@ohif/extension-default": "3.13.0-beta.39",
"@ohif/i18n": "3.13.0-beta.39",
"prop-types": "15.8.1",
"react": "18.3.1",
"react-dom": "18.3.1",
@@ -200,15 +200,15 @@
},
"extensions/cornerstone-dicom-rt": {
"name": "@ohif/extension-cornerstone-dicom-rt",
"version": "3.13.0-beta.27",
"version": "3.13.0-beta.39",
"dependencies": {
"@babel/runtime": "7.28.2",
},
"peerDependencies": {
"@ohif/core": "3.13.0-beta.27",
"@ohif/extension-cornerstone": "3.13.0-beta.27",
"@ohif/extension-default": "3.13.0-beta.27",
"@ohif/i18n": "3.13.0-beta.27",
"@ohif/core": "3.13.0-beta.39",
"@ohif/extension-cornerstone": "3.13.0-beta.39",
"@ohif/extension-default": "3.13.0-beta.39",
"@ohif/i18n": "3.13.0-beta.39",
"prop-types": "15.8.1",
"react": "18.3.1",
"react-dom": "18.3.1",
@@ -219,18 +219,18 @@
},
"extensions/cornerstone-dicom-seg": {
"name": "@ohif/extension-cornerstone-dicom-seg",
"version": "3.13.0-beta.27",
"version": "3.13.0-beta.39",
"dependencies": {
"@babel/runtime": "7.28.2",
"@cornerstonejs/adapters": "4.18.2",
"@cornerstonejs/core": "4.18.2",
"@cornerstonejs/adapters": "4.19.0",
"@cornerstonejs/core": "4.19.0",
"@kitware/vtk.js": "34.15.1",
},
"peerDependencies": {
"@ohif/core": "3.13.0-beta.27",
"@ohif/extension-cornerstone": "3.13.0-beta.27",
"@ohif/extension-default": "3.13.0-beta.27",
"@ohif/i18n": "3.13.0-beta.27",
"@ohif/core": "3.13.0-beta.39",
"@ohif/extension-cornerstone": "3.13.0-beta.39",
"@ohif/extension-default": "3.13.0-beta.39",
"@ohif/i18n": "3.13.0-beta.39",
"prop-types": "15.8.1",
"react": "18.3.1",
"react-dom": "18.3.1",
@@ -241,19 +241,19 @@
},
"extensions/cornerstone-dicom-sr": {
"name": "@ohif/extension-cornerstone-dicom-sr",
"version": "3.13.0-beta.27",
"version": "3.13.0-beta.39",
"dependencies": {
"@babel/runtime": "7.28.2",
"@cornerstonejs/adapters": "4.18.2",
"@cornerstonejs/core": "4.18.2",
"@cornerstonejs/tools": "4.18.2",
"@cornerstonejs/adapters": "4.19.0",
"@cornerstonejs/core": "4.19.0",
"@cornerstonejs/tools": "4.19.0",
"classnames": "2.5.1",
},
"peerDependencies": {
"@ohif/core": "3.13.0-beta.27",
"@ohif/extension-cornerstone": "3.13.0-beta.27",
"@ohif/extension-measurement-tracking": "3.13.0-beta.27",
"@ohif/ui": "3.13.0-beta.27",
"@ohif/core": "3.13.0-beta.39",
"@ohif/extension-cornerstone": "3.13.0-beta.39",
"@ohif/extension-measurement-tracking": "3.13.0-beta.39",
"@ohif/ui": "3.13.0-beta.39",
"dcmjs": "0.49.4",
"dicom-parser": "1.8.21",
"hammerjs": "2.0.8",
@@ -263,19 +263,19 @@
},
"extensions/cornerstone-dynamic-volume": {
"name": "@ohif/extension-cornerstone-dynamic-volume",
"version": "3.13.0-beta.27",
"version": "3.13.0-beta.39",
"dependencies": {
"@babel/runtime": "7.28.2",
"@cornerstonejs/core": "4.18.2",
"@cornerstonejs/tools": "4.18.2",
"@cornerstonejs/core": "4.19.0",
"@cornerstonejs/tools": "4.19.0",
"classnames": "2.5.1",
},
"peerDependencies": {
"@ohif/core": "3.13.0-beta.27",
"@ohif/extension-cornerstone": "3.13.0-beta.27",
"@ohif/extension-default": "3.13.0-beta.27",
"@ohif/i18n": "3.13.0-beta.27",
"@ohif/ui": "3.13.0-beta.27",
"@ohif/core": "3.13.0-beta.39",
"@ohif/extension-cornerstone": "3.13.0-beta.39",
"@ohif/extension-default": "3.13.0-beta.39",
"@ohif/i18n": "3.13.0-beta.39",
"@ohif/ui": "3.13.0-beta.39",
"dcmjs": "0.49.4",
"dicom-parser": "1.8.21",
"hammerjs": "2.0.8",
@@ -285,7 +285,7 @@
},
"extensions/default": {
"name": "@ohif/extension-default",
"version": "3.13.0-beta.27",
"version": "3.13.0-beta.39",
"dependencies": {
"@babel/runtime": "7.28.2",
"@cornerstonejs/calculate-suv": "1.1.0",
@@ -294,8 +294,8 @@
"react-color": "2.19.3",
},
"peerDependencies": {
"@ohif/core": "3.13.0-beta.27",
"@ohif/i18n": "3.13.0-beta.27",
"@ohif/core": "3.13.0-beta.39",
"@ohif/i18n": "3.13.0-beta.39",
"dcmjs": "0.49.4",
"dicomweb-client": "0.10.4",
"prop-types": "15.8.1",
@@ -309,7 +309,7 @@
},
"extensions/dicom-microscopy": {
"name": "@ohif/extension-dicom-microscopy",
"version": "3.13.0-beta.27",
"version": "3.13.0-beta.39",
"dependencies": {
"@babel/runtime": "7.28.2",
"@cornerstonejs/codec-charls": "1.2.3",
@@ -320,10 +320,10 @@
"mathjs": "12.4.3",
},
"peerDependencies": {
"@ohif/core": "3.13.0-beta.27",
"@ohif/extension-default": "3.13.0-beta.27",
"@ohif/i18n": "3.13.0-beta.27",
"@ohif/ui": "3.13.0-beta.27",
"@ohif/core": "3.13.0-beta.39",
"@ohif/extension-default": "3.13.0-beta.39",
"@ohif/i18n": "3.13.0-beta.39",
"@ohif/ui": "3.13.0-beta.39",
"prop-types": "15.8.1",
"react": "18.3.1",
"react-dom": "18.3.1",
@@ -334,14 +334,14 @@
},
"extensions/dicom-pdf": {
"name": "@ohif/extension-dicom-pdf",
"version": "3.13.0-beta.27",
"version": "3.13.0-beta.39",
"dependencies": {
"@babel/runtime": "7.28.2",
"classnames": "2.5.1",
},
"peerDependencies": {
"@ohif/core": "3.13.0-beta.27",
"@ohif/ui": "3.13.0-beta.27",
"@ohif/core": "3.13.0-beta.39",
"@ohif/ui": "3.13.0-beta.39",
"dcmjs": "0.49.4",
"dicom-parser": "1.8.21",
"hammerjs": "2.0.8",
@@ -351,14 +351,14 @@
},
"extensions/dicom-video": {
"name": "@ohif/extension-dicom-video",
"version": "3.13.0-beta.27",
"version": "3.13.0-beta.39",
"dependencies": {
"@babel/runtime": "7.28.2",
"classnames": "2.5.1",
},
"peerDependencies": {
"@ohif/core": "3.13.0-beta.27",
"@ohif/ui": "3.13.0-beta.27",
"@ohif/core": "3.13.0-beta.39",
"@ohif/ui": "3.13.0-beta.39",
"dcmjs": "0.49.4",
"dicom-parser": "1.8.21",
"hammerjs": "2.0.8",
@@ -368,20 +368,20 @@
},
"extensions/measurement-tracking": {
"name": "@ohif/extension-measurement-tracking",
"version": "3.13.0-beta.27",
"version": "3.13.0-beta.39",
"dependencies": {
"@babel/runtime": "7.28.2",
"@ohif/ui": "3.13.0-beta.27",
"@ohif/ui": "3.13.0-beta.39",
"@xstate/react": "3.2.2",
"xstate": "4.38.3",
},
"peerDependencies": {
"@cornerstonejs/core": "4.18.2",
"@cornerstonejs/tools": "4.18.2",
"@ohif/core": "3.13.0-beta.27",
"@ohif/extension-cornerstone-dicom-sr": "3.13.0-beta.27",
"@ohif/extension-default": "3.13.0-beta.27",
"@ohif/ui": "3.13.0-beta.27",
"@cornerstonejs/core": "4.19.0",
"@cornerstonejs/tools": "4.19.0",
"@ohif/core": "3.13.0-beta.39",
"@ohif/extension-cornerstone-dicom-sr": "3.13.0-beta.39",
"@ohif/extension-default": "3.13.0-beta.39",
"@ohif/ui": "3.13.0-beta.39",
"classnames": "2.5.1",
"dcmjs": "0.49.4",
"lodash.debounce": "4.0.8",
@@ -394,14 +394,14 @@
},
"extensions/test-extension": {
"name": "@ohif/extension-test",
"version": "3.13.0-beta.27",
"version": "3.13.0-beta.39",
"dependencies": {
"@babel/runtime": "7.28.2",
"classnames": "2.5.1",
},
"peerDependencies": {
"@ohif/core": "3.13.0-beta.27",
"@ohif/ui": "3.13.0-beta.27",
"@ohif/core": "3.13.0-beta.39",
"@ohif/ui": "3.13.0-beta.39",
"dcmjs": "0.49.4",
"dicom-parser": "1.8.21",
"hammerjs": "2.0.8",
@@ -411,14 +411,14 @@
},
"extensions/tmtv": {
"name": "@ohif/extension-tmtv",
"version": "3.13.0-beta.27",
"version": "3.13.0-beta.39",
"dependencies": {
"@babel/runtime": "7.28.2",
"classnames": "2.5.1",
},
"peerDependencies": {
"@ohif/core": "3.13.0-beta.27",
"@ohif/ui": "3.13.0-beta.27",
"@ohif/core": "3.13.0-beta.39",
"@ohif/ui": "3.13.0-beta.39",
"dcmjs": "0.49.4",
"dicom-parser": "1.8.21",
"hammerjs": "2.0.8",
@@ -428,16 +428,16 @@
},
"extensions/usAnnotation": {
"name": "@ohif/extension-ultrasound-pleura-bline",
"version": "3.13.0-beta.27",
"version": "3.13.0-beta.39",
"dependencies": {
"@babel/runtime": "7.28.2",
"@cornerstonejs/core": "4.18.2",
"@cornerstonejs/tools": "4.18.2",
"@ohif/core": "3.13.0-beta.27",
"@ohif/extension-cornerstone": "3.13.0-beta.27",
"@ohif/extension-default": "3.13.0-beta.27",
"@ohif/i18n": "3.13.0-beta.27",
"@ohif/ui-next": "3.13.0-beta.27",
"@cornerstonejs/core": "4.19.0",
"@cornerstonejs/tools": "4.19.0",
"@ohif/core": "3.13.0-beta.39",
"@ohif/extension-cornerstone": "3.13.0-beta.39",
"@ohif/extension-default": "3.13.0-beta.39",
"@ohif/i18n": "3.13.0-beta.39",
"@ohif/ui-next": "3.13.0-beta.39",
},
"devDependencies": {
"@babel/core": "7.28.0",
@@ -476,7 +476,7 @@
},
"modes/basic": {
"name": "@ohif/mode-basic",
"version": "3.13.0-beta.27",
"version": "3.13.0-beta.39",
"dependencies": {
"@babel/runtime": "7.28.2",
},
@@ -485,19 +485,19 @@
"webpack-merge": "5.10.0",
},
"peerDependencies": {
"@ohif/core": "3.13.0-beta.27",
"@ohif/extension-cornerstone": "3.13.0-beta.27",
"@ohif/extension-cornerstone-dicom-rt": "3.13.0-beta.27",
"@ohif/extension-cornerstone-dicom-seg": "3.13.0-beta.27",
"@ohif/extension-cornerstone-dicom-sr": "3.13.0-beta.27",
"@ohif/extension-default": "3.13.0-beta.27",
"@ohif/extension-dicom-pdf": "3.13.0-beta.27",
"@ohif/extension-dicom-video": "3.13.0-beta.27",
"@ohif/core": "3.13.0-beta.39",
"@ohif/extension-cornerstone": "3.13.0-beta.39",
"@ohif/extension-cornerstone-dicom-rt": "3.13.0-beta.39",
"@ohif/extension-cornerstone-dicom-seg": "3.13.0-beta.39",
"@ohif/extension-cornerstone-dicom-sr": "3.13.0-beta.39",
"@ohif/extension-default": "3.13.0-beta.39",
"@ohif/extension-dicom-pdf": "3.13.0-beta.39",
"@ohif/extension-dicom-video": "3.13.0-beta.39",
},
},
"modes/basic-dev-mode": {
"name": "@ohif/mode-basic-dev-mode",
"version": "3.13.0-beta.27",
"version": "3.13.0-beta.39",
"dependencies": {
"@babel/runtime": "7.28.2",
"i18next": "17.3.1",
@@ -507,17 +507,17 @@
"webpack-merge": "5.10.0",
},
"peerDependencies": {
"@ohif/core": "3.13.0-beta.27",
"@ohif/extension-cornerstone": "3.13.0-beta.27",
"@ohif/extension-cornerstone-dicom-sr": "3.13.0-beta.27",
"@ohif/extension-default": "3.13.0-beta.27",
"@ohif/extension-dicom-pdf": "3.13.0-beta.27",
"@ohif/extension-dicom-video": "3.13.0-beta.27",
"@ohif/core": "3.13.0-beta.39",
"@ohif/extension-cornerstone": "3.13.0-beta.39",
"@ohif/extension-cornerstone-dicom-sr": "3.13.0-beta.39",
"@ohif/extension-default": "3.13.0-beta.39",
"@ohif/extension-dicom-pdf": "3.13.0-beta.39",
"@ohif/extension-dicom-video": "3.13.0-beta.39",
},
},
"modes/basic-test-mode": {
"name": "@ohif/mode-test",
"version": "3.13.0-beta.27",
"version": "3.13.0-beta.39",
"dependencies": {
"@babel/runtime": "7.28.2",
"i18next": "17.3.1",
@@ -527,19 +527,19 @@
"webpack-merge": "5.10.0",
},
"peerDependencies": {
"@ohif/core": "3.13.0-beta.27",
"@ohif/extension-cornerstone": "3.13.0-beta.27",
"@ohif/extension-cornerstone-dicom-sr": "3.13.0-beta.27",
"@ohif/extension-default": "3.13.0-beta.27",
"@ohif/extension-dicom-pdf": "3.13.0-beta.27",
"@ohif/extension-dicom-video": "3.13.0-beta.27",
"@ohif/extension-measurement-tracking": "3.13.0-beta.27",
"@ohif/extension-test": "3.13.0-beta.27",
"@ohif/core": "3.13.0-beta.39",
"@ohif/extension-cornerstone": "3.13.0-beta.39",
"@ohif/extension-cornerstone-dicom-sr": "3.13.0-beta.39",
"@ohif/extension-default": "3.13.0-beta.39",
"@ohif/extension-dicom-pdf": "3.13.0-beta.39",
"@ohif/extension-dicom-video": "3.13.0-beta.39",
"@ohif/extension-measurement-tracking": "3.13.0-beta.39",
"@ohif/extension-test": "3.13.0-beta.39",
},
},
"modes/longitudinal": {
"name": "@ohif/mode-longitudinal",
"version": "3.13.0-beta.27",
"version": "3.13.0-beta.39",
"dependencies": {
"@babel/runtime": "7.28.2",
"i18next": "17.3.1",
@@ -549,33 +549,33 @@
"webpack-merge": "5.10.0",
},
"peerDependencies": {
"@ohif/core": "3.13.0-beta.27",
"@ohif/extension-cornerstone": "3.13.0-beta.27",
"@ohif/extension-cornerstone-dicom-rt": "3.13.0-beta.27",
"@ohif/extension-cornerstone-dicom-seg": "3.13.0-beta.27",
"@ohif/extension-cornerstone-dicom-sr": "3.13.0-beta.27",
"@ohif/extension-default": "3.13.0-beta.27",
"@ohif/extension-dicom-pdf": "3.13.0-beta.27",
"@ohif/extension-dicom-video": "3.13.0-beta.27",
"@ohif/extension-measurement-tracking": "3.13.0-beta.27",
"@ohif/mode-basic": "3.13.0-beta.27",
"@ohif/core": "3.13.0-beta.39",
"@ohif/extension-cornerstone": "3.13.0-beta.39",
"@ohif/extension-cornerstone-dicom-rt": "3.13.0-beta.39",
"@ohif/extension-cornerstone-dicom-seg": "3.13.0-beta.39",
"@ohif/extension-cornerstone-dicom-sr": "3.13.0-beta.39",
"@ohif/extension-default": "3.13.0-beta.39",
"@ohif/extension-dicom-pdf": "3.13.0-beta.39",
"@ohif/extension-dicom-video": "3.13.0-beta.39",
"@ohif/extension-measurement-tracking": "3.13.0-beta.39",
"@ohif/mode-basic": "3.13.0-beta.39",
},
},
"modes/microscopy": {
"name": "@ohif/mode-microscopy",
"version": "3.13.0-beta.27",
"version": "3.13.0-beta.39",
"dependencies": {
"@babel/runtime": "7.28.2",
"i18next": "17.3.1",
},
"peerDependencies": {
"@ohif/core": "3.13.0-beta.27",
"@ohif/extension-dicom-microscopy": "3.13.0-beta.27",
"@ohif/core": "3.13.0-beta.39",
"@ohif/extension-dicom-microscopy": "3.13.0-beta.39",
},
},
"modes/preclinical-4d": {
"name": "@ohif/mode-preclinical-4d",
"version": "3.13.0-beta.27",
"version": "3.13.0-beta.39",
"dependencies": {
"@babel/runtime": "7.28.2",
},
@@ -584,17 +584,17 @@
"webpack-merge": "5.10.0",
},
"peerDependencies": {
"@ohif/core": "3.13.0-beta.27",
"@ohif/extension-cornerstone": "3.13.0-beta.27",
"@ohif/extension-cornerstone-dicom-seg": "3.13.0-beta.27",
"@ohif/extension-cornerstone-dynamic-volume": "3.13.0-beta.27",
"@ohif/extension-default": "3.13.0-beta.27",
"@ohif/extension-tmtv": "3.13.0-beta.27",
"@ohif/core": "3.13.0-beta.39",
"@ohif/extension-cornerstone": "3.13.0-beta.39",
"@ohif/extension-cornerstone-dicom-seg": "3.13.0-beta.39",
"@ohif/extension-cornerstone-dynamic-volume": "3.13.0-beta.39",
"@ohif/extension-default": "3.13.0-beta.39",
"@ohif/extension-tmtv": "3.13.0-beta.39",
},
},
"modes/segmentation": {
"name": "@ohif/mode-segmentation",
"version": "3.13.0-beta.27",
"version": "3.13.0-beta.39",
"dependencies": {
"@babel/runtime": "7.28.2",
"i18next": "17.3.1",
@@ -623,20 +623,20 @@
"webpack-merge": "5.10.0",
},
"peerDependencies": {
"@ohif/core": "3.13.0-beta.27",
"@ohif/extension-cornerstone": "3.13.0-beta.27",
"@ohif/extension-cornerstone-dicom-rt": "3.13.0-beta.27",
"@ohif/extension-cornerstone-dicom-seg": "3.13.0-beta.27",
"@ohif/extension-cornerstone-dicom-sr": "3.13.0-beta.27",
"@ohif/extension-default": "3.13.0-beta.27",
"@ohif/extension-dicom-pdf": "3.13.0-beta.27",
"@ohif/extension-dicom-video": "3.13.0-beta.27",
"@ohif/mode-basic": "3.13.0-beta.27",
"@ohif/core": "3.13.0-beta.39",
"@ohif/extension-cornerstone": "3.13.0-beta.39",
"@ohif/extension-cornerstone-dicom-rt": "3.13.0-beta.39",
"@ohif/extension-cornerstone-dicom-seg": "3.13.0-beta.39",
"@ohif/extension-cornerstone-dicom-sr": "3.13.0-beta.39",
"@ohif/extension-default": "3.13.0-beta.39",
"@ohif/extension-dicom-pdf": "3.13.0-beta.39",
"@ohif/extension-dicom-video": "3.13.0-beta.39",
"@ohif/mode-basic": "3.13.0-beta.39",
},
},
"modes/tmtv": {
"name": "@ohif/mode-tmtv",
"version": "3.13.0-beta.27",
"version": "3.13.0-beta.39",
"dependencies": {
"@babel/runtime": "7.28.2",
"i18next": "17.3.1",
@@ -646,25 +646,25 @@
"webpack-merge": "5.10.0",
},
"peerDependencies": {
"@ohif/core": "3.13.0-beta.27",
"@ohif/extension-cornerstone": "3.13.0-beta.27",
"@ohif/extension-cornerstone-dicom-sr": "3.13.0-beta.27",
"@ohif/extension-default": "3.13.0-beta.27",
"@ohif/extension-dicom-pdf": "3.13.0-beta.27",
"@ohif/extension-dicom-video": "3.13.0-beta.27",
"@ohif/extension-measurement-tracking": "3.13.0-beta.27",
"@ohif/core": "3.13.0-beta.39",
"@ohif/extension-cornerstone": "3.13.0-beta.39",
"@ohif/extension-cornerstone-dicom-sr": "3.13.0-beta.39",
"@ohif/extension-default": "3.13.0-beta.39",
"@ohif/extension-dicom-pdf": "3.13.0-beta.39",
"@ohif/extension-dicom-video": "3.13.0-beta.39",
"@ohif/extension-measurement-tracking": "3.13.0-beta.39",
},
},
"modes/usAnnotation": {
"name": "@ohif/mode-ultrasound-pleura-bline",
"version": "3.13.0-beta.27",
"version": "3.13.0-beta.39",
"dependencies": {
"@babel/runtime": "7.28.2",
"@cornerstonejs/core": "4.18.2",
"@cornerstonejs/tools": "4.18.2",
"@ohif/core": "3.13.0-beta.27",
"@ohif/extension-cornerstone-dicom-sr": "3.13.0-beta.27",
"@ohif/extension-ultrasound-pleura-bline": "3.13.0-beta.27",
"@cornerstonejs/core": "4.19.0",
"@cornerstonejs/tools": "4.19.0",
"@ohif/core": "3.13.0-beta.39",
"@ohif/extension-cornerstone-dicom-sr": "3.13.0-beta.39",
"@ohif/extension-ultrasound-pleura-bline": "3.13.0-beta.39",
"i18next": "17.3.1",
},
"devDependencies": {
@@ -693,34 +693,34 @@
},
"platform/app": {
"name": "@ohif/app",
"version": "3.13.0-beta.27",
"version": "3.13.0-beta.39",
"dependencies": {
"@babel/runtime": "7.28.2",
"@cornerstonejs/codec-charls": "1.2.3",
"@cornerstonejs/codec-libjpeg-turbo-8bit": "1.2.2",
"@cornerstonejs/codec-openjpeg": "1.3.0",
"@cornerstonejs/codec-openjph": "2.4.7",
"@cornerstonejs/dicom-image-loader": "4.18.2",
"@cornerstonejs/dicom-image-loader": "4.19.0",
"@emotion/serialize": "1.3.3",
"@ohif/core": "3.13.0-beta.27",
"@ohif/extension-cornerstone": "3.13.0-beta.27",
"@ohif/extension-cornerstone-dicom-rt": "3.13.0-beta.27",
"@ohif/extension-cornerstone-dicom-seg": "3.13.0-beta.27",
"@ohif/extension-cornerstone-dicom-sr": "3.13.0-beta.27",
"@ohif/extension-default": "3.13.0-beta.27",
"@ohif/extension-dicom-microscopy": "3.13.0-beta.27",
"@ohif/extension-dicom-pdf": "3.13.0-beta.27",
"@ohif/extension-dicom-video": "3.13.0-beta.27",
"@ohif/extension-test": "3.13.0-beta.27",
"@ohif/extension-ultrasound-pleura-bline": "3.13.0-beta.27",
"@ohif/i18n": "3.13.0-beta.27",
"@ohif/mode-basic-dev-mode": "3.13.0-beta.27",
"@ohif/mode-longitudinal": "3.13.0-beta.27",
"@ohif/mode-microscopy": "3.13.0-beta.27",
"@ohif/mode-test": "3.13.0-beta.27",
"@ohif/mode-ultrasound-pleura-bline": "3.13.0-beta.27",
"@ohif/ui": "3.13.0-beta.27",
"@ohif/ui-next": "3.13.0-beta.27",
"@ohif/core": "3.13.0-beta.39",
"@ohif/extension-cornerstone": "3.13.0-beta.39",
"@ohif/extension-cornerstone-dicom-rt": "3.13.0-beta.39",
"@ohif/extension-cornerstone-dicom-seg": "3.13.0-beta.39",
"@ohif/extension-cornerstone-dicom-sr": "3.13.0-beta.39",
"@ohif/extension-default": "3.13.0-beta.39",
"@ohif/extension-dicom-microscopy": "3.13.0-beta.39",
"@ohif/extension-dicom-pdf": "3.13.0-beta.39",
"@ohif/extension-dicom-video": "3.13.0-beta.39",
"@ohif/extension-test": "3.13.0-beta.39",
"@ohif/extension-ultrasound-pleura-bline": "3.13.0-beta.39",
"@ohif/i18n": "3.13.0-beta.39",
"@ohif/mode-basic-dev-mode": "3.13.0-beta.39",
"@ohif/mode-longitudinal": "3.13.0-beta.39",
"@ohif/mode-microscopy": "3.13.0-beta.39",
"@ohif/mode-test": "3.13.0-beta.39",
"@ohif/mode-ultrasound-pleura-bline": "3.13.0-beta.39",
"@ohif/ui": "3.13.0-beta.39",
"@ohif/ui-next": "3.13.0-beta.39",
"@svgr/webpack": "8.1.0",
"@types/react": "18.3.23",
"classnames": "2.5.1",
@@ -772,7 +772,7 @@
},
"platform/cli": {
"name": "@ohif/cli",
"version": "3.13.0-beta.27",
"version": "3.13.0-beta.39",
"bin": {
"ohif-cli": "src/index.js",
},
@@ -796,7 +796,7 @@
},
"platform/core": {
"name": "@ohif/core",
"version": "3.13.0-beta.27",
"version": "3.13.0-beta.39",
"dependencies": {
"@babel/runtime": "7.28.2",
"dcmjs": "0.49.4",
@@ -821,16 +821,16 @@
"@cornerstonejs/codec-libjpeg-turbo-8bit": "1.2.2",
"@cornerstonejs/codec-openjpeg": "1.3.0",
"@cornerstonejs/codec-openjph": "2.4.7",
"@cornerstonejs/core": "4.18.2",
"@cornerstonejs/dicom-image-loader": "4.18.2",
"@ohif/ui": "3.13.0-beta.27",
"@cornerstonejs/core": "4.19.0",
"@cornerstonejs/dicom-image-loader": "4.19.0",
"@ohif/ui": "3.13.0-beta.39",
"cornerstone-math": "0.1.9",
"dicom-parser": "1.8.21",
},
},
"platform/i18n": {
"name": "@ohif/i18n",
"version": "3.13.0-beta.27",
"version": "3.13.0-beta.39",
"dependencies": {
"@babel/runtime": "7.28.2",
"i18next-locize-backend": "2.2.2",
@@ -855,7 +855,7 @@
},
"platform/ui": {
"name": "@ohif/ui",
"version": "3.13.0-beta.27",
"version": "3.13.0-beta.39",
"dependencies": {
"@testing-library/react": "13.4.0",
"browser-detect": "0.2.28",
@@ -905,7 +905,7 @@
},
"platform/ui-next": {
"name": "@ohif/ui-next",
"version": "3.13.0-beta.27",
"version": "3.13.0-beta.39",
"dependencies": {
"@radix-ui/react-accordion": "1.2.11",
"@radix-ui/react-checkbox": "1.3.2",
@@ -959,6 +959,7 @@
"cross-spawn": "7.0.6",
"dcmjs": "0.49.4",
"diff": "5.2.2",
"flatted": "3.4.0",
"glob-parent": "6.0.2",
"lodash": "4.17.23",
"lodash-es": "4.17.23",
@@ -969,8 +970,9 @@
"qs": "6.14.1",
"rollup": "2.80.0",
"serialize-javascript": "7.0.4",
"svgo": "3.3.3",
"tapable": "2.2.2",
"tar": "7.5.9",
"tar": "7.5.11",
"trim": "1.0.1",
"trim-newlines": "5.0.0",
"webpack": "5.105.0",
@@ -1238,9 +1240,9 @@
"@bcoe/v8-coverage": ["@bcoe/v8-coverage@0.2.3", "", {}, "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw=="],
"@cornerstonejs/adapters": ["@cornerstonejs/adapters@4.18.2", "", { "dependencies": { "@babel/runtime-corejs2": "7.26.10", "buffer": "6.0.3", "dcmjs": "0.49.4", "gl-matrix": "3.4.3", "ndarray": "1.0.19" }, "peerDependencies": { "@cornerstonejs/core": "4.18.2", "@cornerstonejs/tools": "4.18.2" } }, "sha512-8TnZuNIxKATEU+tii/bRbuYZFp4zZoZ18e/kT9ACN3SubnweJuJUK6U+ZRE+AElJQO5JsOZPn/hzlEzUq/uR4g=="],
"@cornerstonejs/adapters": ["@cornerstonejs/adapters@4.19.0", "", { "dependencies": { "@babel/runtime-corejs2": "7.26.10", "buffer": "6.0.3", "dcmjs": "0.49.4", "gl-matrix": "3.4.3", "ndarray": "1.0.19" }, "peerDependencies": { "@cornerstonejs/core": "4.19.0", "@cornerstonejs/tools": "4.19.0" } }, "sha512-321AA/3CNwe4bE7NHtKz1agTr6ckvxga1iM8ohIDPHL5GLc0Ooj4kRJMjEatTe+WmeDa4lug3VhV2FxmqCPjTg=="],
"@cornerstonejs/ai": ["@cornerstonejs/ai@4.18.2", "", { "dependencies": { "@babel/runtime-corejs2": "7.26.10", "buffer": "6.0.3", "dcmjs": "0.49.4", "gl-matrix": "3.4.3", "lodash.clonedeep": "4.5.0", "ndarray": "1.0.19", "onnxruntime-common": "1.17.1", "onnxruntime-web": "1.17.1" }, "peerDependencies": { "@cornerstonejs/core": "4.18.2", "@cornerstonejs/tools": "4.18.2" } }, "sha512-/RDRWl4Id2IxeHosZW3jf3Tk6GkMk79iIAMrPEMo7KS1J/l7wKPcB7ayKT6rY3+RdPWU0MYDZGc+6k1tScG3wg=="],
"@cornerstonejs/ai": ["@cornerstonejs/ai@4.19.0", "", { "dependencies": { "@babel/runtime-corejs2": "7.26.10", "buffer": "6.0.3", "dcmjs": "0.49.4", "gl-matrix": "3.4.3", "lodash.clonedeep": "4.5.0", "ndarray": "1.0.19", "onnxruntime-common": "1.17.1", "onnxruntime-web": "1.17.1" }, "peerDependencies": { "@cornerstonejs/core": "4.19.0", "@cornerstonejs/tools": "4.19.0" } }, "sha512-BWIbvUDLzmB0SEZhvFmhrhGEXdXplZkY5qEUfXCsbVcrUs9KsOrFrxLzTCRnTTnIX+Ybad9KoZWrwISmmMI3PQ=="],
"@cornerstonejs/calculate-suv": ["@cornerstonejs/calculate-suv@1.1.0", "", {}, "sha512-Q9XraiDJif9aMFArD2iEuDO/HXbcRVCqB7KfaHgDrdTTjgDFovS91Psbdim7crypRSvE6dh/+HKeFNHdvNkA6w=="],
@@ -1252,15 +1254,15 @@
"@cornerstonejs/codec-openjph": ["@cornerstonejs/codec-openjph@2.4.7", "", {}, "sha512-qvP4q4JDib7mi9r7LqKOwqz7YZ8gjtDX4ZCezeYf8+eb7MBXCz5uXAMeVF3yz9Axw4XiIMdB/pqXkm8tqCl13w=="],
"@cornerstonejs/core": ["@cornerstonejs/core@4.18.2", "", { "dependencies": { "@kitware/vtk.js": "34.15.1", "comlink": "4.4.2", "gl-matrix": "3.4.3", "loglevel": "1.9.2" } }, "sha512-7+71R3g9KT4MqCQvG49vXp4EACbaTMh+aZ73kAG0dW7mItShLqni5IglodzM/jKHh/qoVbeX6zzaWn8Eq9OnOQ=="],
"@cornerstonejs/core": ["@cornerstonejs/core@4.19.0", "", { "dependencies": { "@kitware/vtk.js": "34.15.1", "comlink": "4.4.2", "gl-matrix": "3.4.3", "loglevel": "1.9.2" } }, "sha512-t8v1JStDS+TJc50UA82BOCD0D9U4SD0VHuofRCXfPVd/LfDcLyUmcmoDuEeHTMCHGFm16j+nc3a/tqBiC0ZOxA=="],
"@cornerstonejs/dicom-image-loader": ["@cornerstonejs/dicom-image-loader@4.18.2", "", { "dependencies": { "@cornerstonejs/codec-charls": "1.2.3", "@cornerstonejs/codec-libjpeg-turbo-8bit": "1.2.2", "@cornerstonejs/codec-openjpeg": "1.3.0", "@cornerstonejs/codec-openjph": "2.4.7", "comlink": "4.4.2", "dicom-parser": "1.8.21", "jpeg-lossless-decoder-js": "2.1.2", "pako": "2.1.0", "uuid": "9.0.1" }, "peerDependencies": { "@cornerstonejs/core": "4.18.2" } }, "sha512-wcV7NLU5WLwHah7x/b9PkfAuBjbNpE6/nZaC4PWcB8yX0gKuznU1B6bNn42XErB/WlPgFduKL0FKy37ys01tvg=="],
"@cornerstonejs/dicom-image-loader": ["@cornerstonejs/dicom-image-loader@4.19.0", "", { "dependencies": { "@cornerstonejs/codec-charls": "1.2.3", "@cornerstonejs/codec-libjpeg-turbo-8bit": "1.2.2", "@cornerstonejs/codec-openjpeg": "1.3.0", "@cornerstonejs/codec-openjph": "2.4.7", "comlink": "4.4.2", "dicom-parser": "1.8.21", "jpeg-lossless-decoder-js": "2.1.2", "pako": "2.1.0", "uuid": "9.0.1" }, "peerDependencies": { "@cornerstonejs/core": "4.19.0" } }, "sha512-aW7tNpYAnLZcrx6x9pPs2lDm/K00/1vzlca7CBZ8ihTZcHb2qPpzEsIPZ3F48udzy/Onl/pcw8IDEWTGWDnRzg=="],
"@cornerstonejs/labelmap-interpolation": ["@cornerstonejs/labelmap-interpolation@4.18.2", "", { "dependencies": { "@itk-wasm/morphological-contour-interpolation": "1.1.0", "itk-wasm": "1.0.0-b.165" }, "peerDependencies": { "@cornerstonejs/core": "4.18.2", "@cornerstonejs/tools": "4.18.2", "@kitware/vtk.js": "34.15.1" } }, "sha512-MyD4dHouYu7eu0u8sS5+cUuRwpINouUD+c0GZCamEDJ37PSUslhz1gMkQCL7B61NMpx6cAEP0OVlyfVbd7YPmw=="],
"@cornerstonejs/labelmap-interpolation": ["@cornerstonejs/labelmap-interpolation@4.19.0", "", { "dependencies": { "@itk-wasm/morphological-contour-interpolation": "1.1.0", "itk-wasm": "1.0.0-b.165" }, "peerDependencies": { "@cornerstonejs/core": "4.19.0", "@cornerstonejs/tools": "4.19.0", "@kitware/vtk.js": "34.15.1" } }, "sha512-nQgZhNACFsi1frS7kpFf8+wywweHZFQjYRZ27OuaILUhcd4c5Rcz+4t3mfnzdqTuxtg3+ewPG+7oKyCFIUMrgw=="],
"@cornerstonejs/polymorphic-segmentation": ["@cornerstonejs/polymorphic-segmentation@4.18.2", "", { "dependencies": { "@icr/polyseg-wasm": "0.4.0" }, "peerDependencies": { "@cornerstonejs/core": "4.18.2", "@cornerstonejs/tools": "4.18.2", "@kitware/vtk.js": "34.15.1" } }, "sha512-lwdcyUflm4tDZEUc2Eq8ot7C9tEnKDJnLk6oKClk9/32ExUIqnItWbKfxwF0yvBiFzVhvdnAsjXvsO1itaD+LA=="],
"@cornerstonejs/polymorphic-segmentation": ["@cornerstonejs/polymorphic-segmentation@4.19.0", "", { "dependencies": { "@icr/polyseg-wasm": "0.4.0" }, "peerDependencies": { "@cornerstonejs/core": "4.19.0", "@cornerstonejs/tools": "4.19.0", "@kitware/vtk.js": "34.15.1" } }, "sha512-WmB938EDefT21YBYDC2rZReJyyI0fS9QsIoc9FkJOEky6GdDWbpFRulqz1X0XGbsr2jbAQUh9p1KJaraEtXkIw=="],
"@cornerstonejs/tools": ["@cornerstonejs/tools@4.18.2", "", { "dependencies": { "@types/offscreencanvas": "2019.7.3", "comlink": "4.4.2", "lodash.get": "4.4.2" }, "peerDependencies": { "@cornerstonejs/core": "4.18.2", "@kitware/vtk.js": "34.15.1", "@types/d3-array": "3.2.1", "@types/d3-interpolate": "3.0.4", "d3-array": "3.2.4", "d3-interpolate": "3.0.1", "gl-matrix": "3.4.3" } }, "sha512-dWbi29k/Y62TVBeK7zaU3mis9+UPjhr0nMGeG+C1PA7jYW07bLWFAL8vEk1oI1hGPOGKWU+Crpc9oRrOyzZkfw=="],
"@cornerstonejs/tools": ["@cornerstonejs/tools@4.19.0", "", { "dependencies": { "@types/offscreencanvas": "2019.7.3", "comlink": "4.4.2", "lodash.get": "4.4.2" }, "peerDependencies": { "@cornerstonejs/core": "4.19.0", "@kitware/vtk.js": "34.15.1", "@types/d3-array": "3.2.1", "@types/d3-interpolate": "3.0.4", "d3-array": "3.2.4", "d3-interpolate": "3.0.1", "gl-matrix": "3.4.3" } }, "sha512-yDK3I3U4tYDUWhZh3/NNBWWwqBd5X5qAfkn6tba5KMwKMLtjSm11s+Wg5O4BWOooW/XRflwj28VtE+Kgivlsag=="],
"@cspotcode/source-map-support": ["@cspotcode/source-map-support@0.8.1", "", { "dependencies": { "@jridgewell/trace-mapping": "0.3.9" } }, "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw=="],
@@ -1944,8 +1946,6 @@
"@tootallnate/once": ["@tootallnate/once@2.0.0", "", {}, "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A=="],
"@trysound/sax": ["@trysound/sax@0.2.0", "", {}, "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA=="],
"@tsconfig/node10": ["@tsconfig/node10@1.0.11", "", {}, "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw=="],
"@tsconfig/node12": ["@tsconfig/node12@1.0.11", "", {}, "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag=="],
@@ -3132,7 +3132,7 @@
"flatbuffers": ["flatbuffers@1.12.0", "", {}, "sha512-c7CZADjRcl6j0PlvFy0ZqXQ67qSEZfrVPynmnL+2zPc+NtMvrF8Y0QceMo7QqnSPc7+uWjUIAbvCQ5WIKlMVdQ=="],
"flatted": ["flatted@3.3.3", "", {}, "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg=="],
"flatted": ["flatted@3.4.0", "", {}, "sha512-kC6Bb+ooptOIvWj5B63EQWkF0FEnNjV2ZNkLMLZRDDduIiWeFF4iKnslwhiWxjAdbg4NzTNo6h0qLuvFrcx+Sw=="],
"follow-redirects": ["follow-redirects@1.15.11", "", {}, "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ=="],
@@ -4652,6 +4652,8 @@
"safer-buffer": ["safer-buffer@2.1.2", "", {}, "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="],
"sax": ["sax@1.5.0", "", {}, "sha512-21IYA3Q5cQf089Z6tgaUTr7lDAyzoTPx5HRtbhsME8Udispad8dC/+sziTNugOEx54ilvatQ9YCzl4KQLPcRHA=="],
"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=="],
@@ -4790,8 +4792,6 @@
"ssri": ["ssri@12.0.0", "", { "dependencies": { "minipass": "^7.0.3" } }, "sha512-S7iGNosepx9RadX82oimUkvr0Ct7IjJbEbs4mJcTxst8um95J3sDYU1RBEOvdu6oL1Wek2ODI5i4MAw+dZ6cAQ=="],
"stable": ["stable@0.1.8", "", {}, "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w=="],
"stack-utils": ["stack-utils@2.0.6", "", { "dependencies": { "escape-string-regexp": "^2.0.0" } }, "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ=="],
"stackframe": ["stackframe@1.3.4", "", {}, "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw=="],
@@ -4860,7 +4860,7 @@
"svg-parser": ["svg-parser@2.0.4", "", {}, "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ=="],
"svgo": ["svgo@3.3.2", "", { "dependencies": { "@trysound/sax": "0.2.0", "commander": "^7.2.0", "css-select": "^5.1.0", "css-tree": "^2.3.1", "css-what": "^6.1.0", "csso": "^5.0.5", "picocolors": "^1.0.0" }, "bin": "./bin/svgo" }, "sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw=="],
"svgo": ["svgo@3.3.3", "", { "dependencies": { "commander": "^7.2.0", "css-select": "^5.1.0", "css-tree": "^2.3.1", "css-what": "^6.1.0", "csso": "^5.0.5", "picocolors": "^1.0.0", "sax": "^1.5.0" }, "bin": "./bin/svgo" }, "sha512-+wn7I4p7YgJhHs38k2TNjy1vCfPIfLIJWR5MnCStsN8WuuTcBnRKcMHQLMM2ijxGZmDoZwNv8ipl5aTTen62ng=="],
"symbol-observable": ["symbol-observable@1.2.0", "", {}, "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ=="],
@@ -4876,7 +4876,7 @@
"tapable": ["tapable@2.2.2", "", {}, "sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg=="],
"tar": ["tar@7.5.9", "", { "dependencies": { "@isaacs/fs-minipass": "^4.0.0", "chownr": "^3.0.0", "minipass": "^7.1.2", "minizlib": "^3.1.0", "yallist": "^5.0.0" } }, "sha512-BTLcK0xsDh2+PUe9F6c2TlRp4zOOBMTkoQHQIWSIzI0R7KG46uEwq4OPk2W7bZcprBMsuaeFsqwYr7pjh6CuHg=="],
"tar": ["tar@7.5.11", "", { "dependencies": { "@isaacs/fs-minipass": "^4.0.0", "chownr": "^3.0.0", "minipass": "^7.1.2", "minizlib": "^3.1.0", "yallist": "^5.0.0" } }, "sha512-ChjMH33/KetonMTAtpYdgUFr0tbz69Fp2v7zWxQfYZX4g5ZN2nOBXm1R2xyA+lMIKrLKIoKAwFj93jE/avX9cQ=="],
"tar-stream": ["tar-stream@2.2.0", "", { "dependencies": { "bl": "^4.0.3", "end-of-stream": "^1.4.1", "fs-constants": "^1.0.0", "inherits": "^2.0.3", "readable-stream": "^3.1.1" } }, "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ=="],
@@ -6098,8 +6098,6 @@
"postcss-normalize-url/normalize-url": ["normalize-url@6.1.0", "", {}, "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A=="],
"postcss-svgo/svgo": ["svgo@2.8.0", "", { "dependencies": { "@trysound/sax": "0.2.0", "commander": "^7.2.0", "css-select": "^4.1.3", "css-tree": "^1.1.3", "csso": "^4.2.0", "picocolors": "^1.0.0", "stable": "^0.1.8" }, "bin": { "svgo": "bin/svgo" } }, "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg=="],
"pretty-format/ansi-styles": ["ansi-styles@5.2.0", "", {}, "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA=="],
"pretty-format/react-is": ["react-is@17.0.2", "", {}, "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w=="],
@@ -6990,12 +6988,6 @@
"pkg-install/execa/npm-run-path": ["npm-run-path@2.0.2", "", { "dependencies": { "path-key": "^2.0.0" } }, "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw=="],
"postcss-svgo/svgo/css-select": ["css-select@4.3.0", "", { "dependencies": { "boolbase": "^1.0.0", "css-what": "^6.0.1", "domhandler": "^4.3.1", "domutils": "^2.8.0", "nth-check": "^2.0.1" } }, "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ=="],
"postcss-svgo/svgo/css-tree": ["css-tree@1.1.3", "", { "dependencies": { "mdn-data": "2.0.14", "source-map": "^0.6.1" } }, "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q=="],
"postcss-svgo/svgo/csso": ["csso@4.2.0", "", { "dependencies": { "css-tree": "^1.1.2" } }, "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA=="],
"read-pkg-up/find-up/locate-path": ["locate-path@2.0.0", "", { "dependencies": { "p-locate": "^2.0.0", "path-exists": "^3.0.0" } }, "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA=="],
"read-pkg-up/read-pkg/load-json-file": ["load-json-file@4.0.0", "", { "dependencies": { "graceful-fs": "^4.1.2", "parse-json": "^4.0.0", "pify": "^3.0.0", "strip-bom": "^3.0.0" } }, "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw=="],
@@ -7334,14 +7326,6 @@
"pkg-install/execa/npm-run-path/path-key": ["path-key@2.0.1", "", {}, "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw=="],
"postcss-svgo/svgo/css-select/domhandler": ["domhandler@4.3.1", "", { "dependencies": { "domelementtype": "^2.2.0" } }, "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ=="],
"postcss-svgo/svgo/css-select/domutils": ["domutils@2.8.0", "", { "dependencies": { "dom-serializer": "^1.0.1", "domelementtype": "^2.2.0", "domhandler": "^4.2.0" } }, "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A=="],
"postcss-svgo/svgo/css-tree/mdn-data": ["mdn-data@2.0.14", "", {}, "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow=="],
"postcss-svgo/svgo/css-tree/source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="],
"read-pkg-up/find-up/locate-path/p-locate": ["p-locate@2.0.0", "", { "dependencies": { "p-limit": "^1.1.0" } }, "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg=="],
"read-pkg-up/find-up/locate-path/path-exists": ["path-exists@3.0.0", "", {}, "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ=="],
@@ -7442,8 +7426,6 @@
"pacote/npm-pick-manifest/npm-package-arg/hosted-git-info/lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="],
"postcss-svgo/svgo/css-select/domutils/dom-serializer": ["dom-serializer@1.4.1", "", { "dependencies": { "domelementtype": "^2.0.1", "domhandler": "^4.2.0", "entities": "^2.0.0" } }, "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag=="],
"read-pkg-up/find-up/locate-path/p-locate/p-limit": ["p-limit@1.3.0", "", { "dependencies": { "p-try": "^1.0.0" } }, "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q=="],
"renderkid/css-select/domutils/dom-serializer/entities": ["entities@2.2.0", "", {}, "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A=="],
@@ -7460,8 +7442,6 @@
"listr-update-renderer/log-update/cli-cursor/restore-cursor/onetime/mimic-fn": ["mimic-fn@1.2.0", "", {}, "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ=="],
"postcss-svgo/svgo/css-select/domutils/dom-serializer/entities": ["entities@2.2.0", "", {}, "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A=="],
"read-pkg-up/find-up/locate-path/p-locate/p-limit/p-try": ["p-try@1.0.0", "", {}, "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww=="],
}
}
+1 -1
View File
@@ -1 +1 @@
7e10830d5802e22bda4df6a3f8008e9a414b4cd4
7a38903b1977b1cf0f3a0ba8a4a823fac5e8fdeb
@@ -3,6 +3,97 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
# [3.13.0-beta.41](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.40...v3.13.0-beta.41) (2026-03-16)
**Note:** Version bump only for package @ohif/extension-cornerstone-dicom-pmap
# [3.13.0-beta.40](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.39...v3.13.0-beta.40) (2026-03-13)
**Note:** Version bump only for package @ohif/extension-cornerstone-dicom-pmap
# [3.13.0-beta.39](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.38...v3.13.0-beta.39) (2026-03-13)
**Note:** Version bump only for package @ohif/extension-cornerstone-dicom-pmap
# [3.13.0-beta.38](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.37...v3.13.0-beta.38) (2026-03-12)
### Bug Fixes
* **segmentation:** Display "No description S:{series number} {modality}" for segmentations with no label. ([#5874](https://github.com/OHIF/Viewers/issues/5874)) ([7b5d0ce](https://github.com/OHIF/Viewers/commit/7b5d0ce40e5422ccfce6091ac3d7559586cbe57e))
# [3.13.0-beta.37](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.36...v3.13.0-beta.37) (2026-03-12)
**Note:** Version bump only for package @ohif/extension-cornerstone-dicom-pmap
# [3.13.0-beta.36](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.35...v3.13.0-beta.36) (2026-03-11)
**Note:** Version bump only for package @ohif/extension-cornerstone-dicom-pmap
# [3.13.0-beta.35](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.34...v3.13.0-beta.35) (2026-03-09)
**Note:** Version bump only for package @ohif/extension-cornerstone-dicom-pmap
# [3.13.0-beta.34](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.33...v3.13.0-beta.34) (2026-03-09)
**Note:** Version bump only for package @ohif/extension-cornerstone-dicom-pmap
# [3.13.0-beta.33](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.32...v3.13.0-beta.33) (2026-03-05)
**Note:** Version bump only for package @ohif/extension-cornerstone-dicom-pmap
# [3.13.0-beta.32](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.31...v3.13.0-beta.32) (2026-03-05)
**Note:** Version bump only for package @ohif/extension-cornerstone-dicom-pmap
# [3.13.0-beta.31](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.30...v3.13.0-beta.31) (2026-03-04)
**Note:** Version bump only for package @ohif/extension-cornerstone-dicom-pmap
# [3.13.0-beta.30](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.29...v3.13.0-beta.30) (2026-03-04)
**Note:** Version bump only for package @ohif/extension-cornerstone-dicom-pmap
@@ -1,6 +1,6 @@
{
"name": "@ohif/extension-cornerstone-dicom-pmap",
"version": "3.13.0-beta.30",
"version": "3.13.0-beta.41",
"description": "DICOM Parametric Map read workflow",
"author": "OHIF",
"license": "MIT",
@@ -33,10 +33,10 @@
"start": "yarn run dev"
},
"peerDependencies": {
"@ohif/core": "3.13.0-beta.30",
"@ohif/extension-cornerstone": "3.13.0-beta.30",
"@ohif/extension-default": "3.13.0-beta.30",
"@ohif/i18n": "3.13.0-beta.30",
"@ohif/core": "3.13.0-beta.41",
"@ohif/extension-cornerstone": "3.13.0-beta.41",
"@ohif/extension-default": "3.13.0-beta.41",
"@ohif/i18n": "3.13.0-beta.41",
"prop-types": "15.8.1",
"react": "18.3.1",
"react-dom": "18.3.1",
@@ -46,8 +46,8 @@
},
"dependencies": {
"@babel/runtime": "7.28.2",
"@cornerstonejs/adapters": "4.18.2",
"@cornerstonejs/core": "4.18.2",
"@cornerstonejs/adapters": "4.19.0",
"@cornerstonejs/core": "4.19.0",
"@kitware/vtk.js": "34.15.1"
}
}
@@ -3,6 +3,94 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
# [3.13.0-beta.41](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.40...v3.13.0-beta.41) (2026-03-16)
**Note:** Version bump only for package @ohif/extension-cornerstone-dicom-rt
# [3.13.0-beta.40](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.39...v3.13.0-beta.40) (2026-03-13)
**Note:** Version bump only for package @ohif/extension-cornerstone-dicom-rt
# [3.13.0-beta.39](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.38...v3.13.0-beta.39) (2026-03-13)
**Note:** Version bump only for package @ohif/extension-cornerstone-dicom-rt
# [3.13.0-beta.38](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.37...v3.13.0-beta.38) (2026-03-12)
**Note:** Version bump only for package @ohif/extension-cornerstone-dicom-rt
# [3.13.0-beta.37](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.36...v3.13.0-beta.37) (2026-03-12)
**Note:** Version bump only for package @ohif/extension-cornerstone-dicom-rt
# [3.13.0-beta.36](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.35...v3.13.0-beta.36) (2026-03-11)
**Note:** Version bump only for package @ohif/extension-cornerstone-dicom-rt
# [3.13.0-beta.35](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.34...v3.13.0-beta.35) (2026-03-09)
**Note:** Version bump only for package @ohif/extension-cornerstone-dicom-rt
# [3.13.0-beta.34](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.33...v3.13.0-beta.34) (2026-03-09)
**Note:** Version bump only for package @ohif/extension-cornerstone-dicom-rt
# [3.13.0-beta.33](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.32...v3.13.0-beta.33) (2026-03-05)
**Note:** Version bump only for package @ohif/extension-cornerstone-dicom-rt
# [3.13.0-beta.32](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.31...v3.13.0-beta.32) (2026-03-05)
**Note:** Version bump only for package @ohif/extension-cornerstone-dicom-rt
# [3.13.0-beta.31](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.30...v3.13.0-beta.31) (2026-03-04)
**Note:** Version bump only for package @ohif/extension-cornerstone-dicom-rt
# [3.13.0-beta.30](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.29...v3.13.0-beta.30) (2026-03-04)
**Note:** Version bump only for package @ohif/extension-cornerstone-dicom-rt
+5 -5
View File
@@ -1,6 +1,6 @@
{
"name": "@ohif/extension-cornerstone-dicom-rt",
"version": "3.13.0-beta.30",
"version": "3.13.0-beta.41",
"description": "DICOM RT read workflow",
"author": "OHIF",
"license": "MIT",
@@ -33,10 +33,10 @@
"start": "yarn run dev"
},
"peerDependencies": {
"@ohif/core": "3.13.0-beta.30",
"@ohif/extension-cornerstone": "3.13.0-beta.30",
"@ohif/extension-default": "3.13.0-beta.30",
"@ohif/i18n": "3.13.0-beta.30",
"@ohif/core": "3.13.0-beta.41",
"@ohif/extension-cornerstone": "3.13.0-beta.41",
"@ohif/extension-default": "3.13.0-beta.41",
"@ohif/i18n": "3.13.0-beta.41",
"prop-types": "15.8.1",
"react": "18.3.1",
"react-dom": "18.3.1",
@@ -3,6 +3,97 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
# [3.13.0-beta.41](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.40...v3.13.0-beta.41) (2026-03-16)
**Note:** Version bump only for package @ohif/extension-cornerstone-dicom-seg
# [3.13.0-beta.40](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.39...v3.13.0-beta.40) (2026-03-13)
**Note:** Version bump only for package @ohif/extension-cornerstone-dicom-seg
# [3.13.0-beta.39](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.38...v3.13.0-beta.39) (2026-03-13)
**Note:** Version bump only for package @ohif/extension-cornerstone-dicom-seg
# [3.13.0-beta.38](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.37...v3.13.0-beta.38) (2026-03-12)
### Bug Fixes
* **segmentation:** Display "No description S:{series number} {modality}" for segmentations with no label. ([#5874](https://github.com/OHIF/Viewers/issues/5874)) ([7b5d0ce](https://github.com/OHIF/Viewers/commit/7b5d0ce40e5422ccfce6091ac3d7559586cbe57e))
# [3.13.0-beta.37](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.36...v3.13.0-beta.37) (2026-03-12)
**Note:** Version bump only for package @ohif/extension-cornerstone-dicom-seg
# [3.13.0-beta.36](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.35...v3.13.0-beta.36) (2026-03-11)
**Note:** Version bump only for package @ohif/extension-cornerstone-dicom-seg
# [3.13.0-beta.35](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.34...v3.13.0-beta.35) (2026-03-09)
**Note:** Version bump only for package @ohif/extension-cornerstone-dicom-seg
# [3.13.0-beta.34](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.33...v3.13.0-beta.34) (2026-03-09)
**Note:** Version bump only for package @ohif/extension-cornerstone-dicom-seg
# [3.13.0-beta.33](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.32...v3.13.0-beta.33) (2026-03-05)
**Note:** Version bump only for package @ohif/extension-cornerstone-dicom-seg
# [3.13.0-beta.32](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.31...v3.13.0-beta.32) (2026-03-05)
**Note:** Version bump only for package @ohif/extension-cornerstone-dicom-seg
# [3.13.0-beta.31](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.30...v3.13.0-beta.31) (2026-03-04)
**Note:** Version bump only for package @ohif/extension-cornerstone-dicom-seg
# [3.13.0-beta.30](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.29...v3.13.0-beta.30) (2026-03-04)
**Note:** Version bump only for package @ohif/extension-cornerstone-dicom-seg
@@ -1,6 +1,6 @@
{
"name": "@ohif/extension-cornerstone-dicom-seg",
"version": "3.13.0-beta.30",
"version": "3.13.0-beta.41",
"description": "DICOM SEG read workflow",
"author": "OHIF",
"license": "MIT",
@@ -33,10 +33,10 @@
"start": "yarn run dev"
},
"peerDependencies": {
"@ohif/core": "3.13.0-beta.30",
"@ohif/extension-cornerstone": "3.13.0-beta.30",
"@ohif/extension-default": "3.13.0-beta.30",
"@ohif/i18n": "3.13.0-beta.30",
"@ohif/core": "3.13.0-beta.41",
"@ohif/extension-cornerstone": "3.13.0-beta.41",
"@ohif/extension-default": "3.13.0-beta.41",
"@ohif/i18n": "3.13.0-beta.41",
"prop-types": "15.8.1",
"react": "18.3.1",
"react-dom": "18.3.1",
@@ -46,8 +46,8 @@
},
"dependencies": {
"@babel/runtime": "7.28.2",
"@cornerstonejs/adapters": "4.18.2",
"@cornerstonejs/core": "4.18.2",
"@cornerstonejs/adapters": "4.19.0",
"@cornerstonejs/core": "4.19.0",
"@kitware/vtk.js": "34.15.1"
}
}
@@ -3,6 +3,100 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
# [3.13.0-beta.41](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.40...v3.13.0-beta.41) (2026-03-16)
### Bug Fixes
* **sr-hydration:** enable hydration and arrow navigation for 3D SR measurements ([#5887](https://github.com/OHIF/Viewers/issues/5887)) ([7a38903](https://github.com/OHIF/Viewers/commit/7a38903b1977b1cf0f3a0ba8a4a823fac5e8fdeb))
# [3.13.0-beta.40](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.39...v3.13.0-beta.40) (2026-03-13)
**Note:** Version bump only for package @ohif/extension-cornerstone-dicom-sr
# [3.13.0-beta.39](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.38...v3.13.0-beta.39) (2026-03-13)
**Note:** Version bump only for package @ohif/extension-cornerstone-dicom-sr
# [3.13.0-beta.38](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.37...v3.13.0-beta.38) (2026-03-12)
### Bug Fixes
* **segmentation:** Display "No description S:{series number} {modality}" for segmentations with no label. ([#5874](https://github.com/OHIF/Viewers/issues/5874)) ([7b5d0ce](https://github.com/OHIF/Viewers/commit/7b5d0ce40e5422ccfce6091ac3d7559586cbe57e))
# [3.13.0-beta.37](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.36...v3.13.0-beta.37) (2026-03-12)
**Note:** Version bump only for package @ohif/extension-cornerstone-dicom-sr
# [3.13.0-beta.36](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.35...v3.13.0-beta.36) (2026-03-11)
**Note:** Version bump only for package @ohif/extension-cornerstone-dicom-sr
# [3.13.0-beta.35](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.34...v3.13.0-beta.35) (2026-03-09)
**Note:** Version bump only for package @ohif/extension-cornerstone-dicom-sr
# [3.13.0-beta.34](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.33...v3.13.0-beta.34) (2026-03-09)
**Note:** Version bump only for package @ohif/extension-cornerstone-dicom-sr
# [3.13.0-beta.33](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.32...v3.13.0-beta.33) (2026-03-05)
**Note:** Version bump only for package @ohif/extension-cornerstone-dicom-sr
# [3.13.0-beta.32](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.31...v3.13.0-beta.32) (2026-03-05)
**Note:** Version bump only for package @ohif/extension-cornerstone-dicom-sr
# [3.13.0-beta.31](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.30...v3.13.0-beta.31) (2026-03-04)
**Note:** Version bump only for package @ohif/extension-cornerstone-dicom-sr
# [3.13.0-beta.30](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.29...v3.13.0-beta.30) (2026-03-04)
**Note:** Version bump only for package @ohif/extension-cornerstone-dicom-sr
+8 -8
View File
@@ -1,6 +1,6 @@
{
"name": "@ohif/extension-cornerstone-dicom-sr",
"version": "3.13.0-beta.30",
"version": "3.13.0-beta.41",
"description": "OHIF extension for an SR Cornerstone Viewport",
"author": "OHIF",
"license": "MIT",
@@ -34,10 +34,10 @@
"test:unit:ci": "jest --ci --runInBand --collectCoverage --passWithNoTests"
},
"peerDependencies": {
"@ohif/core": "3.13.0-beta.30",
"@ohif/extension-cornerstone": "3.13.0-beta.30",
"@ohif/extension-measurement-tracking": "3.13.0-beta.30",
"@ohif/ui": "3.13.0-beta.30",
"@ohif/core": "3.13.0-beta.41",
"@ohif/extension-cornerstone": "3.13.0-beta.41",
"@ohif/extension-measurement-tracking": "3.13.0-beta.41",
"@ohif/ui": "3.13.0-beta.41",
"dcmjs": "0.49.4",
"dicom-parser": "1.8.21",
"hammerjs": "2.0.8",
@@ -46,9 +46,9 @@
},
"dependencies": {
"@babel/runtime": "7.28.2",
"@cornerstonejs/adapters": "4.18.2",
"@cornerstonejs/core": "4.18.2",
"@cornerstonejs/tools": "4.18.2",
"@cornerstonejs/adapters": "4.19.0",
"@cornerstonejs/core": "4.19.0",
"@cornerstonejs/tools": "4.19.0",
"classnames": "2.5.1"
}
}
@@ -80,7 +80,7 @@ export default function hydrateStructuredReport(
const { ReferencedSOPInstanceUID, imageId, frameNumber = 1 } = measurement;
const key = `${ReferencedSOPInstanceUID}:${frameNumber}`;
if (!sopInstanceUIDToImageId[key]) {
if (imageId && !sopInstanceUIDToImageId[key]) {
sopInstanceUIDToImageId[key] = imageId;
}
});
@@ -118,41 +118,17 @@ export default function hydrateStructuredReport(
}
});
// Set the series touched as tracked.
const imageIds = [];
// TODO: notification if no hydratable?
Object.keys(hydratableMeasurementsInSR).forEach(annotationType => {
const toolDataForAnnotationType = hydratableMeasurementsInSR[annotationType];
toolDataForAnnotationType.forEach(toolData => {
// Add the measurement to toolState
// dcmjs and Cornerstone3D has structural defect in supporting multi-frame
// files, and looking up the imageId from sopInstanceUIDToImageId results
// in the wrong value.
const frameNumber = toolData.annotation.data?.frameNumber || 1;
const imageId = sopInstanceUIDToImageId[`${toolData.sopInstanceUid}:${frameNumber}`];
if (!imageIds.includes(imageId)) {
imageIds.push(imageId);
}
});
});
let targetStudyInstanceUID;
const SeriesInstanceUIDs = [];
for (let i = 0; i < imageIds.length; i++) {
const imageId = imageIds[i];
if (!imageId) {
continue;
}
const { SeriesInstanceUID, StudyInstanceUID } = metaData.get('instance', imageId);
// Set the series touched as tracked.
const imageIds = getImageIds(hydratableMeasurementsInSR, sopInstanceUIDToImageId);
for (const imageId of imageIds) {
const { SeriesInstanceUID, StudyInstanceUID } = metaData.get('instance', imageId);
if (!SeriesInstanceUIDs.includes(SeriesInstanceUID)) {
SeriesInstanceUIDs.push(SeriesInstanceUID);
}
if (!targetStudyInstanceUID) {
targetStudyInstanceUID = StudyInstanceUID;
} else if (targetStudyInstanceUID !== StudyInstanceUID) {
@@ -160,6 +136,31 @@ export default function hydrateStructuredReport(
}
}
// For 3d annotations there are no image IDs,
// so we need to find the display sets by frame of reference to get the SeriesInstanceUIDs
const frameOfReferenceUIDs = getFrameOfReferenceUIDs(
hydratableMeasurementsInSR,
sopInstanceUIDToImageId
);
for (const FrameOfReferenceUID of frameOfReferenceUIDs) {
const displaySetsFOR = displaySetService.getDisplaySetsBy(
ds => ds.FrameOfReferenceUID === FrameOfReferenceUID && !ds.isDerivedDisplaySet
);
const ds = chooseDisplaySet(displaySetsFOR, FrameOfReferenceUID);
if (!ds) {
continue;
}
if (!SeriesInstanceUIDs.includes(ds.SeriesInstanceUID)) {
SeriesInstanceUIDs.push(ds.SeriesInstanceUID);
}
if (!targetStudyInstanceUID) {
targetStudyInstanceUID = ds.StudyInstanceUID;
} else if (targetStudyInstanceUID !== ds.StudyInstanceUID) {
console.warn('NO SUPPORT FOR SRs THAT HAVE MEASUREMENTS FROM MULTIPLE STUDIES.');
}
}
/**
* Gets reference data for what frame of reference and the referenced
* image id, or for 3d measurements, the volumeId to apply this annotation to.
@@ -196,7 +197,7 @@ export default function hydrateStructuredReport(
toolDataForAnnotationType.forEach(toolData => {
toolData.uid = guid();
const referenceData = getReferenceData(toolData);
const { imageId } = referenceData;
const { referencedImageId } = referenceData;
const annotation = {
annotationUID: toolData.annotation.annotationUID,
@@ -241,8 +242,8 @@ export default function hydrateStructuredReport(
locking.setAnnotationLocked(newAnnotationUID, true);
}
if (imageId && !imageIds.includes(imageId)) {
imageIds.push(imageId);
if (referencedImageId && !imageIds.includes(referencedImageId)) {
imageIds.push(referencedImageId);
}
});
});
@@ -255,15 +256,64 @@ export default function hydrateStructuredReport(
};
}
/**
* Gets the unique imageIds from hydratable measurements that have an imageId reference
* (i.e., 2D/SCOORD annotations).
*/
function getImageIds(hydratableMeasurementsInSR, sopInstanceUIDToImageId): string[] {
const imageIds: string[] = [];
Object.keys(hydratableMeasurementsInSR).forEach(annotationType => {
const toolDataForAnnotationType = hydratableMeasurementsInSR[annotationType];
toolDataForAnnotationType.forEach(toolData => {
// Add the measurement to toolState
// dcmjs and Cornerstone3D has structural defect in supporting multi-frame
// files, and looking up the imageId from sopInstanceUIDToImageId results
// in the wrong value.
const frameNumber = toolData.annotation.data?.frameNumber || 1;
const imageId = sopInstanceUIDToImageId[`${toolData.sopInstanceUid}:${frameNumber}`];
if (imageId && !imageIds.includes(imageId)) {
imageIds.push(imageId);
}
});
});
return imageIds;
}
/**
* Gets the unique FrameOfReferenceUIDs from hydratable measurements that have no imageId reference
* (i.e., 3D/SCOORD3D annotations). This excludes annotations handled by the getImageIds function.
*/
function getFrameOfReferenceUIDs(hydratableMeasurementsInSR, sopInstanceUIDToImageId): string[] {
const frameOfReferenceUIDs: string[] = [];
Object.keys(hydratableMeasurementsInSR).forEach(annotationType => {
const toolDataForAnnotationType = hydratableMeasurementsInSR[annotationType];
toolDataForAnnotationType.forEach(toolData => {
const frameNumber = toolData.annotation.data?.frameNumber || 1;
const imageId = sopInstanceUIDToImageId[`${toolData.sopInstanceUid}:${frameNumber}`];
if (!imageId) {
const { FrameOfReferenceUID } = toolData.annotation.metadata;
if (FrameOfReferenceUID && !frameOfReferenceUIDs.includes(FrameOfReferenceUID)) {
frameOfReferenceUIDs.push(FrameOfReferenceUID);
}
}
});
});
return frameOfReferenceUIDs;
}
/**
* For 3d annotations, there are often several display sets which could
* be used to display the annotation. Choose the first annotation with the
* same frame of reference that is reconstructable, or the first display set
* otherwise.
*/
function chooseDisplaySet(displaySets, annotation) {
function chooseDisplaySet(displaySets, reference) {
if (!displaySets?.length) {
console.warn('No display set found for', annotation);
console.warn('No display set found for', reference);
return;
}
if (displaySets.length === 1) {
@@ -3,6 +3,97 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
# [3.13.0-beta.41](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.40...v3.13.0-beta.41) (2026-03-16)
**Note:** Version bump only for package @ohif/extension-cornerstone-dynamic-volume
# [3.13.0-beta.40](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.39...v3.13.0-beta.40) (2026-03-13)
**Note:** Version bump only for package @ohif/extension-cornerstone-dynamic-volume
# [3.13.0-beta.39](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.38...v3.13.0-beta.39) (2026-03-13)
**Note:** Version bump only for package @ohif/extension-cornerstone-dynamic-volume
# [3.13.0-beta.38](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.37...v3.13.0-beta.38) (2026-03-12)
### Bug Fixes
* **segmentation:** Display "No description S:{series number} {modality}" for segmentations with no label. ([#5874](https://github.com/OHIF/Viewers/issues/5874)) ([7b5d0ce](https://github.com/OHIF/Viewers/commit/7b5d0ce40e5422ccfce6091ac3d7559586cbe57e))
# [3.13.0-beta.37](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.36...v3.13.0-beta.37) (2026-03-12)
**Note:** Version bump only for package @ohif/extension-cornerstone-dynamic-volume
# [3.13.0-beta.36](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.35...v3.13.0-beta.36) (2026-03-11)
**Note:** Version bump only for package @ohif/extension-cornerstone-dynamic-volume
# [3.13.0-beta.35](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.34...v3.13.0-beta.35) (2026-03-09)
**Note:** Version bump only for package @ohif/extension-cornerstone-dynamic-volume
# [3.13.0-beta.34](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.33...v3.13.0-beta.34) (2026-03-09)
**Note:** Version bump only for package @ohif/extension-cornerstone-dynamic-volume
# [3.13.0-beta.33](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.32...v3.13.0-beta.33) (2026-03-05)
**Note:** Version bump only for package @ohif/extension-cornerstone-dynamic-volume
# [3.13.0-beta.32](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.31...v3.13.0-beta.32) (2026-03-05)
**Note:** Version bump only for package @ohif/extension-cornerstone-dynamic-volume
# [3.13.0-beta.31](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.30...v3.13.0-beta.31) (2026-03-04)
**Note:** Version bump only for package @ohif/extension-cornerstone-dynamic-volume
# [3.13.0-beta.30](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.29...v3.13.0-beta.30) (2026-03-04)
**Note:** Version bump only for package @ohif/extension-cornerstone-dynamic-volume
@@ -1,6 +1,6 @@
{
"name": "@ohif/extension-cornerstone-dynamic-volume",
"version": "3.13.0-beta.30",
"version": "3.13.0-beta.41",
"description": "OHIF extension for 4D volumes data",
"author": "OHIF",
"license": "MIT",
@@ -29,11 +29,11 @@
"test:unit:ci": "jest --ci --runInBand --collectCoverage --passWithNoTests"
},
"peerDependencies": {
"@ohif/core": "3.13.0-beta.30",
"@ohif/extension-cornerstone": "3.13.0-beta.30",
"@ohif/extension-default": "3.13.0-beta.30",
"@ohif/i18n": "3.13.0-beta.30",
"@ohif/ui": "3.13.0-beta.30",
"@ohif/core": "3.13.0-beta.41",
"@ohif/extension-cornerstone": "3.13.0-beta.41",
"@ohif/extension-default": "3.13.0-beta.41",
"@ohif/i18n": "3.13.0-beta.41",
"@ohif/ui": "3.13.0-beta.41",
"dcmjs": "0.49.4",
"dicom-parser": "1.8.21",
"hammerjs": "2.0.8",
@@ -42,8 +42,8 @@
},
"dependencies": {
"@babel/runtime": "7.28.2",
"@cornerstonejs/core": "4.18.2",
"@cornerstonejs/tools": "4.18.2",
"@cornerstonejs/core": "4.19.0",
"@cornerstonejs/tools": "4.19.0",
"classnames": "2.5.1"
}
}
+100
View File
@@ -3,6 +3,106 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
# [3.13.0-beta.41](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.40...v3.13.0-beta.41) (2026-03-16)
**Note:** Version bump only for package @ohif/extension-cornerstone
# [3.13.0-beta.40](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.39...v3.13.0-beta.40) (2026-03-13)
**Note:** Version bump only for package @ohif/extension-cornerstone
# [3.13.0-beta.39](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.38...v3.13.0-beta.39) (2026-03-13)
### Bug Fixes
* **window level:** The window level value is not displayed by default on all the viewports when selecting common/custom layout and TMTV. ([#5865](https://github.com/OHIF/Viewers/issues/5865)) ([fe1ecfe](https://github.com/OHIF/Viewers/commit/fe1ecfe0cc5d1bcf82686d821f356da8936a8c4b))
# [3.13.0-beta.38](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.37...v3.13.0-beta.38) (2026-03-12)
### Bug Fixes
* **segmentation:** Display "No description S:{series number} {modality}" for segmentations with no label. ([#5874](https://github.com/OHIF/Viewers/issues/5874)) ([7b5d0ce](https://github.com/OHIF/Viewers/commit/7b5d0ce40e5422ccfce6091ac3d7559586cbe57e))
# [3.13.0-beta.37](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.36...v3.13.0-beta.37) (2026-03-12)
**Note:** Version bump only for package @ohif/extension-cornerstone
# [3.13.0-beta.36](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.35...v3.13.0-beta.36) (2026-03-11)
**Note:** Version bump only for package @ohif/extension-cornerstone
# [3.13.0-beta.35](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.34...v3.13.0-beta.35) (2026-03-09)
**Note:** Version bump only for package @ohif/extension-cornerstone
# [3.13.0-beta.34](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.33...v3.13.0-beta.34) (2026-03-09)
### Bug Fixes
* **seg hydration:** auto-hydrate RT struct on second load with disableConfirmationPrompts ([#5875](https://github.com/OHIF/Viewers/issues/5875)) ([6f773f9](https://github.com/OHIF/Viewers/commit/6f773f997214c388409f3af3e9fc0e5b84debc10))
# [3.13.0-beta.33](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.32...v3.13.0-beta.33) (2026-03-05)
**Note:** Version bump only for package @ohif/extension-cornerstone
# [3.13.0-beta.32](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.31...v3.13.0-beta.32) (2026-03-05)
### Features
* **ecg:** add DICOM ECG waveform extension ([#5856](https://github.com/OHIF/Viewers/issues/5856)) ([70f76ae](https://github.com/OHIF/Viewers/commit/70f76aeba1b27f8e4de5ec73a7b831428e38e3d2))
# [3.13.0-beta.31](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.30...v3.13.0-beta.31) (2026-03-04)
**Note:** Version bump only for package @ohif/extension-cornerstone
# [3.13.0-beta.30](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.29...v3.13.0-beta.30) (2026-03-04)
+10 -10
View File
@@ -1,6 +1,6 @@
{
"name": "@ohif/extension-cornerstone",
"version": "3.13.0-beta.30",
"version": "3.13.0-beta.41",
"description": "OHIF extension for Cornerstone",
"author": "OHIF",
"license": "MIT",
@@ -40,9 +40,9 @@
"@cornerstonejs/codec-libjpeg-turbo-8bit": "1.2.2",
"@cornerstonejs/codec-openjpeg": "1.3.0",
"@cornerstonejs/codec-openjph": "2.4.7",
"@cornerstonejs/dicom-image-loader": "4.18.2",
"@ohif/core": "3.13.0-beta.30",
"@ohif/ui": "3.13.0-beta.30",
"@cornerstonejs/dicom-image-loader": "4.19.0",
"@ohif/core": "3.13.0-beta.41",
"@ohif/ui": "3.13.0-beta.41",
"dcmjs": "0.49.4",
"dicom-parser": "1.8.21",
"hammerjs": "2.0.8",
@@ -53,12 +53,12 @@
},
"dependencies": {
"@babel/runtime": "7.28.2",
"@cornerstonejs/adapters": "4.18.2",
"@cornerstonejs/ai": "4.18.2",
"@cornerstonejs/core": "4.18.2",
"@cornerstonejs/labelmap-interpolation": "4.18.2",
"@cornerstonejs/polymorphic-segmentation": "4.18.2",
"@cornerstonejs/tools": "4.18.2",
"@cornerstonejs/adapters": "4.19.0",
"@cornerstonejs/ai": "4.19.0",
"@cornerstonejs/core": "4.19.0",
"@cornerstonejs/labelmap-interpolation": "4.19.0",
"@cornerstonejs/polymorphic-segmentation": "4.19.0",
"@cornerstonejs/tools": "4.19.0",
"@icr/polyseg-wasm": "0.4.0",
"@itk-wasm/morphological-contour-interpolation": "1.1.0",
"@kitware/vtk.js": "34.15.1",
@@ -67,10 +67,9 @@ function CustomizableViewportOverlay({
}) {
const { cornerstoneViewportService, customizationService, toolGroupService, displaySetService } =
servicesManager.services;
const [voi, setVOI] = useState({ windowCenter: null, windowWidth: null });
const [scale, setScale] = useState(1);
const [annotationState, setAnnotationState] = useState(0);
const { isViewportBackgroundLight: isLight } = useViewportRendering(viewportId);
const { isViewportBackgroundLight: isLight, windowLevel: voi } = useViewportRendering(viewportId);
const { imageIndex } = imageSliceData;
// Historical usage defined the overlays as separate items due to lack of
@@ -110,30 +109,6 @@ function CustomizableViewportOverlay({
};
}, [viewportData, viewportId, instanceNumber, cornerstoneViewportService]);
/**
* Updating the VOI when the viewport changes its voi
*/
useEffect(() => {
const updateVOI = eventDetail => {
const { range } = eventDetail.detail;
if (!range) {
return;
}
const { lower, upper } = range;
const { windowWidth, windowCenter } = utilities.windowLevel.toWindowLevel(lower, upper);
setVOI({ windowCenter, windowWidth });
};
element.addEventListener(Enums.Events.VOI_MODIFIED, updateVOI);
return () => {
element.removeEventListener(Enums.Events.VOI_MODIFIED, updateVOI);
};
}, [viewportId, viewportData, voi, element]);
const annotationModified = useCallback(evt => {
if (evt.detail.annotation.metadata.toolName === UltrasoundPleuraBLineTool.toolName) {
// Update the annotation state to trigger a re-render
@@ -226,6 +201,7 @@ function CustomizableViewportOverlay({
scale,
instanceNumber,
annotationState,
isLight,
]
);
@@ -402,6 +378,7 @@ function OverlayItem(props) {
*/
function VOIOverlayItem({ voi, customization }: OverlayItemProps) {
const { windowWidth, windowCenter } = voi;
const { title } = customization;
if (typeof windowCenter !== 'number' || typeof windowWidth !== 'number') {
return null;
}
@@ -410,6 +387,7 @@ function VOIOverlayItem({ voi, customization }: OverlayItemProps) {
<div
className="overlay-item flex flex-row"
style={{ color: customization?.color }}
title={title}
>
<span className="mr-0.5 shrink-0 opacity-[0.70]">W:</span>
<span className="mr-2.5 shrink-0">{windowWidth.toFixed(0)}</span>
@@ -443,11 +421,13 @@ function InstanceNumberOverlayItem({
customization,
}: OverlayItemProps) {
const { imageIndex, numberOfSlices } = imageSliceData;
const { title } = customization;
return (
<div
className="overlay-item flex flex-row"
style={{ color: (customization && customization.color) || undefined }}
title={title}
>
<span>
{instanceNumber !== undefined && instanceNumber !== null ? (
@@ -25,6 +25,7 @@ export default {
{
id: 'WindowLevel',
inheritsFrom: 'ohif.overlayItem.windowLevel',
title: 'Window Level',
},
{
id: 'ZoomLevel',
@@ -39,6 +40,7 @@ export default {
{
id: 'InstanceNumber',
inheritsFrom: 'ohif.overlayItem.instanceNumber',
title: 'Instance Number',
},
],
};
@@ -3,6 +3,7 @@ import i18n from '@ohif/i18n';
import { utilities as csUtils, Enums as csEnums } from '@cornerstonejs/core';
import dcmjs from 'dcmjs';
import { dicomWebUtils } from '@ohif/extension-default';
import { buildEcgModule } from './utils/ecgMetadata';
const { MetadataModules } = csEnums;
const { utils } = OHIF;
@@ -155,6 +156,84 @@ export function getDicomMicroscopySopClassHandler({ servicesManager, extensionMa
};
}
export function getSopClassHandlerModule(params) {
return [getDicomMicroscopySopClassHandler(params)];
/**
* DICOM Waveform SOP Class UIDs for ECG / cardiac electrophysiology.
* Reference: https://dicom.nema.org/medical/dicom/current/output/chtml/part04/sect_B.5.html
*/
const ECG_SOP_CLASS_UIDS = {
TWELVE_LEAD_ECG_WAVEFORM_STORAGE: '1.2.840.10008.5.1.4.1.1.9.1.1',
GENERAL_ECG_WAVEFORM_STORAGE: '1.2.840.10008.5.1.4.1.1.9.1.2',
AMBULATORY_ECG_WAVEFORM_STORAGE: '1.2.840.10008.5.1.4.1.1.9.1.3',
HEMODYNAMIC_WAVEFORM_STORAGE: '1.2.840.10008.5.1.4.1.1.9.2.1',
CARDIAC_ELECTROPHYSIOLOGY_WAVEFORM_STORAGE: '1.2.840.10008.5.1.4.1.1.9.3.1',
};
const ecgSopClassUids = Object.values(ECG_SOP_CLASS_UIDS);
const DicomEcgSOPClassHandlerId =
'@ohif/extension-cornerstone.sopClassHandlerModule.DicomEcgSopClassHandler';
function _getEcgDisplaySetsFromSeries(instances, servicesManager) {
const { userAuthenticationService } = servicesManager.services;
return instances.map(instance => {
const { Modality, SOPInstanceUID } = instance;
const { SeriesDescription, SeriesNumber, SeriesDate } = instance;
const { SeriesInstanceUID, StudyInstanceUID, SOPClassUID } = instance;
const imageId = instance.imageId;
// Register ECG metadata in the OHIF metadata provider so that
// Cornerstone's ECGViewport can retrieve it via metaData.get('ecgModule', imageId).
if (imageId) {
const ecgModule = buildEcgModule(instance, userAuthenticationService);
if (ecgModule) {
csUtils.genericMetadataProvider.addRaw(imageId, {
type: MetadataModules.ECG,
metadata: ecgModule,
});
}
}
return {
Modality,
displaySetInstanceUID: utils.guid(),
SeriesDescription,
SeriesNumber,
SeriesDate,
SOPInstanceUID,
SeriesInstanceUID,
StudyInstanceUID,
SOPClassHandlerId: DicomEcgSOPClassHandlerId,
SOPClassUID,
referencedImages: null,
measurements: null,
viewportType: csEnums.ViewportType.ECG,
instances: [instance],
instance,
thumbnailSrc: null,
isDerivedDisplaySet: false,
isLoaded: false,
sopClassUids: ecgSopClassUids,
numImageFrames: 0,
numInstances: 1,
imageIds: imageId ? [imageId] : [],
supportsWindowLevel: false,
label: SeriesDescription || 'ECG',
};
});
}
export function getDicomEcgSopClassHandler({ servicesManager }) {
const getDisplaySetsFromSeries = instances =>
_getEcgDisplaySetsFromSeries(instances, servicesManager);
return {
name: 'DicomEcgSopClassHandler',
sopClassUids: ecgSopClassUids,
getDisplaySetsFromSeries,
};
}
export function getSopClassHandlerModule(params) {
return [getDicomMicroscopySopClassHandler(params), getDicomEcgSopClassHandler(params)];
}
@@ -10,6 +10,7 @@ import {
BaseVolumeViewport,
cache,
} from '@cornerstonejs/core';
import { getDataIdForViewport } from '../utils/getDataIdForViewport';
import { WindowLevelPreset } from '../types/WindowLevel';
import { ColorbarPositionType, ColorbarOptions, ColorbarProperties } from '../types/Colorbar';
import { VolumeRenderingConfig } from '../types/VolumeRenderingConfig';
@@ -104,11 +105,6 @@ const opacityToLinear = (opacityValue: number): number => {
return Math.pow(opacityValue, 1.0 / GAMMA);
};
const is3DViewport = ({ viewportId, cornerstoneViewportService }) => {
const viewport = cornerstoneViewportService.getCornerstoneViewport(viewportId);
return viewport instanceof VolumeViewport3D;
};
/**
* Hook to access window level functionality for a specific viewport
*
@@ -124,15 +120,17 @@ export function useViewportRendering(
const { cornerstoneViewportService, colorbarService, customizationService } =
servicesManager.services;
const [is3DVolume, setIs3DVolume] = useState(
is3DViewport({ viewportId, cornerstoneViewportService })
);
const [hasColorbar, setHasColorbar] = useState(colorbarService.hasColorbar(viewportId));
const [colorbarPosition, setColorbarPosition] = useState<ColorbarPositionType>(
options?.location ? getPosition(options.location) : 'bottom'
);
const [voiRange, setVoiRange] = useState<{ lower: number; upper: number } | undefined>();
const voiRangeRef = React.useRef<{ lower: number; upper: number } | undefined>();
// Viewport from service; kept in state so we can subscribe to VIEWPORT_DATA_CHANGED when null and re-run effects when it becomes available
const [viewport, setViewport] = useState<Types.IViewport | null>(() =>
viewportId ? (cornerstoneViewportService.getCornerstoneViewport(viewportId) ?? null) : null
);
const [is3DVolume, setIs3DVolume] = useState(viewport instanceof VolumeViewport3D);
const [opacity, setOpacityState] = useState<number | undefined>();
const [opacityLinear, setOpacityLinearState] = useState<number | undefined>();
const [threshold, setThresholdState] = useState<number | undefined>();
@@ -178,6 +176,34 @@ export function useViewportRendering(
);
}, [viewportDisplaySets, presets]);
// Keep viewport in state; when not available, subscribe to VIEWPORT_DATA_CHANGED so we set it when the viewport is ready
useEffect(() => {
if (!viewportId) {
setViewport(null);
return;
}
const vp = cornerstoneViewportService.getCornerstoneViewport(viewportId);
setViewport(vp ?? null);
if (vp) {
return;
}
const { unsubscribe } = cornerstoneViewportService.subscribe(
cornerstoneViewportService.EVENTS.VIEWPORT_DATA_CHANGED,
({ viewportId: eventViewportId }) => {
if (eventViewportId !== viewportId) {
return;
}
const next = cornerstoneViewportService.getCornerstoneViewport(viewportId);
if (next) {
setViewport(next);
}
}
);
return () => {
unsubscribe();
};
}, [viewportId, cornerstoneViewportService]);
// Calculate pixel value range for the active display set
useEffect(() => {
if (!activeDisplaySetInstanceUID) {
@@ -189,17 +215,15 @@ export function useViewportRendering(
return;
}
const csViewport = cornerstoneViewportService.getCornerstoneViewport(viewportId);
if (!csViewport) {
if (!viewport) {
return;
}
if (!(csViewport instanceof BaseVolumeViewport)) {
if (!(viewport instanceof BaseVolumeViewport)) {
return;
}
const volumeIds = csViewport.getAllVolumeIds();
const volumeIds = viewport.getAllVolumeIds();
const volumeId = volumeIds.find(id => id.includes(activeDisplaySetInstanceUID));
if (!volumeId) {
@@ -207,7 +231,7 @@ export function useViewportRendering(
}
// only handle volume viewports for now
const imageData = csViewport.getImageData(volumeId);
const imageData = viewport.getImageData(volumeId);
if (!imageData) {
return;
@@ -220,7 +244,7 @@ export function useViewportRendering(
const range = voxelManager.getRange();
setPixelValueRange({ min: range[0], max: range[1] });
}, [activeDisplaySetInstanceUID, displaySetService, cornerstoneViewportService, viewportId]);
}, [activeDisplaySetInstanceUID, displaySetService, viewport]);
// Get the presets specifically for the active display set
const activeDisplaySetPresets = useMemo(() => {
@@ -240,55 +264,47 @@ export function useViewportRendering(
}, [allWindowLevelPresets, activeDisplaySetInstanceUID]);
useEffect(() => {
setIs3DVolume(is3DViewport({ viewportId, cornerstoneViewportService }));
setIs3DVolume(viewport instanceof VolumeViewport3D);
const viewport = cornerstoneViewportService.getCornerstoneViewport(viewportId);
// Initialize the VOI range from the viewport
if (viewport && activeDisplaySetInstanceUID) {
try {
let properties;
if (viewport instanceof StackViewport) {
properties = viewport.getProperties();
if (properties.voiRange) {
setVoiRange(properties.voiRange);
voiRangeRef.current = properties.voiRange;
}
} else if (viewport instanceof BaseVolumeViewport) {
// For volume viewports, find the actor for the active display set
const volumeIds = viewport.getAllVolumeIds();
const volumeId = volumeIds.find(id => id.includes(activeDisplaySetInstanceUID));
if (volumeId) {
properties = viewport.getProperties(volumeId);
if (properties?.voiRange) {
setVoiRange(properties.voiRange);
voiRangeRef.current = properties.voiRange;
}
// Get opacity from colormap if available
if (properties?.colormap?.opacity !== undefined) {
const isArray = Array.isArray(properties.colormap.opacity);
const opacity = isArray
? properties.colormap.opacity.reduce((max, current) => Math.max(max, current), 0)
: properties.colormap.opacity;
setOpacityState(opacity);
setOpacityLinearState(opacityToLinear(opacity));
}
// Get threshold from colormap if available
if (properties?.colormap && properties.colormap.threshold !== undefined) {
setThresholdState(properties.colormap.threshold);
}
}
}
} catch (error) {
console.error('Error initializing VOI range:', error);
}
if (!viewport || !activeDisplaySetInstanceUID) {
return;
}
}, [cornerstoneViewportService, viewportId, activeDisplaySetInstanceUID]);
try {
const dataId = getDataIdForViewport(viewport as unknown, activeDisplaySetInstanceUID);
const properties =
dataId != null
? (viewport as Types.IBaseVolumeViewport).getProperties(dataId)
: viewport.getProperties();
if (!properties) {
return;
}
if (properties.voiRange) {
setVoiRange(properties.voiRange);
voiRangeRef.current = properties.voiRange;
}
if (properties.colormap?.opacity !== undefined) {
const opacityVal = properties.colormap.opacity;
const opacity = Array.isArray(opacityVal)
? (opacityVal as unknown as number[]).reduce(
(max, current) => Math.max(max, current),
0
)
: opacityVal;
setOpacityState(opacity);
setOpacityLinearState(opacityToLinear(opacity));
}
if (properties.colormap?.threshold !== undefined) {
setThresholdState(properties.colormap.threshold);
}
} catch (error) {
console.error('Error initializing VOI range:', error);
}
}, [activeDisplaySetInstanceUID, viewport]);
useEffect(() => {
if (!viewportId) {
@@ -313,19 +329,11 @@ export function useViewportRendering(
}, [colorbarService, viewportId]);
useEffect(() => {
if (!viewportId || !activeDisplaySetInstanceUID) {
return;
}
const viewport = cornerstoneViewportService.getCornerstoneViewport(viewportId);
if (!viewport) {
if (!activeDisplaySetInstanceUID || !viewport?.element) {
return;
}
const element = viewport.element;
if (!element) {
return;
}
const updateVOI = eventDetail => {
const { range } = eventDetail.detail;
@@ -369,7 +377,7 @@ export function useViewportRendering(
element.removeEventListener(Enums.Events.VOI_MODIFIED, updateVOI);
element.removeEventListener(Enums.Events.COLORMAP_MODIFIED, updateColormap);
};
}, [viewportId, activeDisplaySetInstanceUID, cornerstoneViewportService, opacityToLinear]);
}, [activeDisplaySetInstanceUID, viewport, opacityToLinear]);
const validateActiveDisplaySet = useCallback(() => {
if (!activeDisplaySetInstanceUID) {
@@ -560,16 +568,11 @@ export function useViewportRendering(
context: 'CORNERSTONE',
});
},
[commandsManager, viewportId, validateActiveDisplaySet]
[commandsManager, validateActiveDisplaySet, viewport, viewportId]
);
const setOpacity = useCallback(
(opacityValue: number) => {
if (!viewportId) {
return;
}
const viewport = cornerstoneViewportService.getCornerstoneViewport(viewportId);
if (!viewport || !(viewport instanceof BaseVolumeViewport)) {
return;
}
@@ -607,7 +610,7 @@ export function useViewportRendering(
viewport.render();
},
[cornerstoneViewportService, viewportId, validateActiveDisplaySet, opacityToLinear]
[validateActiveDisplaySet, opacityToLinear, viewport]
);
const setOpacityLinear = useCallback(
@@ -621,11 +624,6 @@ export function useViewportRendering(
const setThreshold = useCallback(
(thresholdValue: number) => {
if (!viewportId) {
return;
}
const viewport = cornerstoneViewportService.getCornerstoneViewport(viewportId);
if (!viewport || !(viewport instanceof BaseVolumeViewport)) {
return;
}
@@ -653,18 +651,16 @@ export function useViewportRendering(
viewport.render();
},
[cornerstoneViewportService, viewportId, validateActiveDisplaySet]
[validateActiveDisplaySet, viewport]
);
// Get the current colormap for the active display set
const colormap = useMemo(() => {
if (!viewportId || !activeDisplaySetInstanceUID || !viewportDisplaySets?.length) {
if (!activeDisplaySetInstanceUID || !viewportDisplaySets?.length) {
return null;
}
try {
const viewport = cornerstoneViewportService.getCornerstoneViewport(viewportId);
if (!viewport) {
return null;
}
@@ -711,13 +707,7 @@ export function useViewportRendering(
colorbarProperties?.colormaps?.[0]
);
}
}, [
cornerstoneViewportService,
viewportId,
activeDisplaySetInstanceUID,
viewportDisplaySets,
colorbarProperties?.colormaps,
]);
}, [activeDisplaySetInstanceUID, viewportDisplaySets, colorbarProperties?.colormaps, viewport]);
// 3D volume rendering functions
const setVolumeRenderingPreset = useCallback(
@@ -801,7 +791,9 @@ export function useViewportRendering(
setWindowLevel,
setVOIRange,
voiRange,
windowLevel: utilities.windowLevel.toWindowLevel(voiRange?.lower, voiRange?.upper),
windowLevel: voiRange
? utilities.windowLevel.toWindowLevel(voiRange?.lower, voiRange?.upper)
: { windowCenter: null, windowWidth: null },
// Colorbar functions
hasColorbar,
@@ -9,7 +9,7 @@ import { useSystem } from '@ohif/core';
const excludedModalities = ['SM', 'OT', 'DOC', 'ECG'];
function mapSegmentationToDisplay(segmentation, customizationService) {
const { label, segments } = segmentation;
const { label, segments, fallbackLabel } = segmentation;
// Get the readable text mapping once
const readableTextMap = customizationService.getCustomization('panelSegmentation.readableText');
@@ -76,6 +76,7 @@ function mapSegmentationToDisplay(segmentation, customizationService) {
return {
...segmentation,
label,
fallbackLabel,
segments: updatedSegments,
};
}
@@ -1,6 +1,7 @@
import { PubSubService, Types as OhifTypes } from '@ohif/core';
import { RENDERING_ENGINE_ID } from '../ViewportService/constants';
import { getRenderingEngine } from '@cornerstonejs/core';
import { getDataIdForViewport } from '../../utils/getDataIdForViewport';
import { ColorbarOptions, ChangeTypes } from '../../types/Colorbar';
export default class ColorbarService extends PubSubService {
@@ -38,25 +39,6 @@ export default class ColorbarService extends PubSubService {
this.servicesManager = servicesManager;
}
/**
* Gets the appropriate data ID for a viewport and display set
* @param viewport - The viewport instance
* @param displaySetInstanceUID - The display set instance UID to identify data
* @returns The appropriate data ID for the viewport type (volumeId for volume viewports, undefined for stack)
*/
private getDataIdForViewport(viewport, displaySetInstanceUID: string): string | undefined {
// For volume viewports, find the matching volumeId
if (viewport.getAllVolumeIds) {
const volumeIds = viewport.getAllVolumeIds() || [];
return volumeIds.length > 0
? volumeIds.find(id => id.includes(displaySetInstanceUID)) || undefined
: undefined;
}
// For other viewports, no specific dataId is needed for now
return undefined;
}
/**
* Adds a colorbar to a specific viewport identified by `viewportId`, using the provided `displaySetInstanceUIDs` and `options`.
* This method prepares the colorbar state that will be used by the ViewportColorbarsContainer component.
@@ -92,7 +74,7 @@ export default class ColorbarService extends PubSubService {
return;
}
const dataId = this.getDataIdForViewport(viewport, displaySetInstanceUID);
const dataId = getDataIdForViewport(viewport, displaySetInstanceUID);
const properties = dataId ? viewport.getProperties(dataId) : viewport.getProperties();
const colormap = properties?.colormap;
@@ -246,7 +228,7 @@ export default class ColorbarService extends PubSubService {
}
// Get the appropriate dataId for this viewport/displaySet combination
const dataId = this.getDataIdForViewport(viewport, displaySetInstanceUID);
const dataId = getDataIdForViewport(viewport, displaySetInstanceUID);
// Set properties with or without dataId based on what the viewport supports
viewport.setProperties({ colormap }, dataId);
@@ -1120,6 +1120,7 @@ describe('SegmentationService', () => {
isDynamicVolume: false,
SeriesNumber: 1,
SeriesDescription: 'Series Description',
Modality: 'SEG',
} as unknown as AppTypes.DisplaySet;
jest
@@ -1145,6 +1146,7 @@ describe('SegmentationService', () => {
info: 'S1: Series Description',
},
label: 'Segmentation 2',
fallbackLabel: 'S:1 SEG',
segments: {
'1': {
active: true,
@@ -1175,6 +1177,7 @@ describe('SegmentationService', () => {
dynamicVolumeInfo: {
timePoints: ['timePoint1', 'timePoint2', 'timePoint3'],
},
Modality: 'SEG',
} as unknown as AppTypes.DisplaySet;
jest
@@ -1212,6 +1215,7 @@ describe('SegmentationService', () => {
info: 'S1: Series Description',
},
label: 'Segmentation 2',
fallbackLabel: 'S:1 SEG',
segments: {
'1': {
active: true,
@@ -1320,6 +1324,8 @@ describe('SegmentationService', () => {
},
SeriesDate: '2025-01-01',
SeriesDescription: 'Series Description',
Modality: 'SEG',
SeriesNumber: 1,
};
const referencedDisplaySet = {
@@ -1379,6 +1385,7 @@ describe('SegmentationService', () => {
const expectedSegmentation = {
config: {
label: segDisplaySet.SeriesDescription,
fallbackLabel: 'S:1 SEG',
segments: {
'1': {
active: false,
@@ -1534,7 +1541,7 @@ describe('SegmentationService', () => {
it('should create a segmentation for a RTSTRUCT display set', async () => {
const segmentationId = 'segmentationId';
const rtStructDisplaySet = {
modality: 'RTSTRUCT',
Modality: 'RTSTRUCT',
displaySetInstanceUID: 'display-set-uid',
referencedDisplaySetInstanceUID: 'existent-display-set-uid',
SeriesDate: '2025-01-01',
@@ -1544,6 +1551,7 @@ describe('SegmentationService', () => {
ROIContours: [{}, {}, {}],
frameOfReferenceUID: 'frameOfReferenceUID',
},
SeriesNumber: 1,
};
const referencedDisplaySet = {
@@ -1650,6 +1658,7 @@ describe('SegmentationService', () => {
const expectedSegmentation = {
config: {
label: rtStructDisplaySet.SeriesDescription,
fallbackLabel: 'S:1 RTSTRUCT',
segments: {
'1': {
active: false,
@@ -55,6 +55,7 @@ export type SegmentationRepresentation = cstTypes.SegmentationRepresentation & {
viewportId: string;
id: string;
label: string;
fallbackLabel?: string;
styles: cstTypes.RepresentationStyle;
segments: {
[key: number]: SegmentRepresentation;
@@ -430,6 +431,7 @@ class SegmentationService extends PubSubService {
},
config: {
label,
fallbackLabel: `S:${displaySet.SeriesNumber} ${displaySet.Modality}`,
segments:
options?.segments && Object.keys(options.segments).length > 0
? options.segments
@@ -583,6 +585,7 @@ class SegmentationService extends PubSubService {
},
config: {
label: segDisplaySet.SeriesDescription,
fallbackLabel: `S:${segDisplaySet.SeriesNumber} ${segDisplaySet.Modality}`,
segments,
},
};
@@ -664,6 +667,7 @@ class SegmentationService extends PubSubService {
},
config: {
label: rtDisplaySet.SeriesDescription,
fallbackLabel: `S:${rtDisplaySet.SeriesNumber} ${rtDisplaySet.Modality}`,
},
};
@@ -1842,6 +1846,7 @@ class SegmentationService extends PubSubService {
id: id,
segmentationId,
label: segmentation.label,
fallbackLabel: segmentation.fallbackLabel,
active,
type,
visible,
@@ -9,6 +9,7 @@ import {
utilities as csUtils,
VolumeViewport,
VolumeViewport3D,
ECGViewport,
cache,
Enums as csEnums,
BaseVolumeViewport,
@@ -778,6 +779,19 @@ class CornerstoneViewportService extends PubSubService implements IViewportServi
/**
* Sets the image data for the given viewport.
*/
private async _setEcgViewport(
viewport: Types.IECGViewport,
viewportData: StackViewportData
): Promise<void> {
const [displaySet] = viewportData.data;
const imageId = displaySet.imageIds?.[0];
if (!imageId) {
console.error('[CornerstoneViewportService] ECG display set has no imageId');
return;
}
return viewport.setEcg(imageId);
}
private async _setOtherViewport(
viewport: Types.IStackViewport,
viewportData: StackViewportData,
@@ -1257,6 +1271,10 @@ class CornerstoneViewportService extends PubSubService implements IViewportServi
);
}
if (viewport instanceof ECGViewport) {
return this._setEcgViewport(viewport as unknown as Types.IECGViewport, viewportData as StackViewportData);
}
return this._setOtherViewport(
viewport,
viewportData as StackViewportData,
@@ -0,0 +1,217 @@
import { decodeInt16Multiplex, base64ToArrayBuffer, buildEcgModule } from './ecgMetadata';
// ---------------------------------------------------------------------------
// decodeInt16Multiplex
// ---------------------------------------------------------------------------
describe('decodeInt16Multiplex', () => {
it('demultiplexes 2 channels correctly', () => {
// Interleaved layout: [ch0_s0, ch1_s0, ch0_s1, ch1_s1, ch0_s2, ch1_s2]
const interleaved = new Int16Array([10, 20, 30, 40, 50, 60]);
const channels = decodeInt16Multiplex(interleaved.buffer, 2, 3);
expect(channels).toHaveLength(2);
expect(Array.from(channels[0])).toEqual([10, 30, 50]);
expect(Array.from(channels[1])).toEqual([20, 40, 60]);
});
it('handles a single channel', () => {
const data = new Int16Array([100, 200, 300]);
const channels = decodeInt16Multiplex(data.buffer, 1, 3);
expect(channels).toHaveLength(1);
expect(Array.from(channels[0])).toEqual([100, 200, 300]);
});
it('handles negative values (signed short)', () => {
const data = new Int16Array([-1000, -2000, -3000]);
const channels = decodeInt16Multiplex(data.buffer, 1, 3);
expect(Array.from(channels[0])).toEqual([-1000, -2000, -3000]);
});
it('returns empty arrays when numberOfChannels or numberOfSamples is 0', () => {
const emptyBuffer = new Int16Array([]).buffer;
expect(decodeInt16Multiplex(emptyBuffer, 0, 0)).toHaveLength(0);
expect(decodeInt16Multiplex(emptyBuffer, 0, 10)).toHaveLength(0);
});
it('produces Int16Array instances for each channel', () => {
const data = new Int16Array([1, 2]);
const channels = decodeInt16Multiplex(data.buffer, 2, 1);
expect(channels[0]).toBeInstanceOf(Int16Array);
expect(channels[1]).toBeInstanceOf(Int16Array);
});
});
// ---------------------------------------------------------------------------
// base64ToArrayBuffer
// ---------------------------------------------------------------------------
describe('base64ToArrayBuffer', () => {
it('decodes a simple base64 string to the correct bytes', () => {
// "ABC" in ASCII = [65, 66, 67]; base64 of that is 'QUJD'
const buffer = base64ToArrayBuffer('QUJD');
const bytes = new Uint8Array(buffer);
expect(bytes).toHaveLength(3);
expect(Array.from(bytes)).toEqual([65, 66, 67]);
});
it('round-trips an Int16Array through base64', () => {
const original = new Int16Array([500, -300, 0, 32767]);
const base64 = btoa(String.fromCharCode(...new Uint8Array(original.buffer)));
const recovered = new Int16Array(base64ToArrayBuffer(base64));
expect(Array.from(recovered)).toEqual(Array.from(original));
});
it('returns an ArrayBuffer', () => {
const result = base64ToArrayBuffer('AA=='); // single zero byte
expect(result).toBeInstanceOf(ArrayBuffer);
expect(result.byteLength).toBe(1);
});
});
// ---------------------------------------------------------------------------
// buildEcgModule
// ---------------------------------------------------------------------------
describe('buildEcgModule', () => {
const makeInstance = (overrides = {}) => ({
WaveformSequence: [
{
NumberOfWaveformChannels: 12,
NumberOfWaveformSamples: 5000,
SamplingFrequency: 500,
WaveformBitsAllocated: 16,
WaveformSampleInterpretation: 'SS',
MultiplexGroupLabel: '12 Lead ECG',
ChannelDefinitionSequence: [
{ ChannelSourceSequence: [{ CodeMeaning: 'Lead I' }] },
{ ChannelSourceSequence: [{ CodeMeaning: 'Lead II' }] },
],
WaveformData: { InlineBinary: btoa('\x00\x01') },
},
],
...overrides,
});
it('returns null when WaveformSequence is absent', () => {
expect(buildEcgModule({})).toBeNull();
expect(buildEcgModule({ WaveformSequence: [] })).toBeNull();
});
it('returns a valid ecgModule for a complete instance', () => {
const module = buildEcgModule(makeInstance());
expect(module).not.toBeNull();
expect(module!.numberOfWaveformChannels).toBe(12);
expect(module!.numberOfWaveformSamples).toBe(5000);
expect(module!.samplingFrequency).toBe(500);
expect(module!.waveformBitsAllocated).toBe(16);
expect(module!.waveformSampleInterpretation).toBe('SS');
expect(module!.multiplexGroupLabel).toBe('12 Lead ECG');
expect(module!.channelDefinitionSequence).toHaveLength(2);
expect(module!.channelDefinitionSequence[0].channelSourceSequence.codeMeaning).toBe('Lead I');
expect(typeof module!.waveformData.retrieveBulkData).toBe('function');
});
it('applies defaults for missing optional fields', () => {
const instance = {
WaveformSequence: [
{
// No explicit values — all defaults
WaveformData: { InlineBinary: btoa('\x00\x00') },
},
],
};
const module = buildEcgModule(instance);
expect(module!.numberOfWaveformChannels).toBe(0);
expect(module!.numberOfWaveformSamples).toBe(0);
expect(module!.samplingFrequency).toBe(1);
expect(module!.waveformBitsAllocated).toBe(16);
expect(module!.waveformSampleInterpretation).toBe('SS');
expect(module!.multiplexGroupLabel).toBe('');
expect(module!.channelDefinitionSequence).toHaveLength(0);
});
it('retrieveBulkData decodes InlineBinary data correctly', async () => {
const samples = new Int16Array([10, 20, 30]);
const base64 = btoa(String.fromCharCode(...new Uint8Array(samples.buffer)));
const instance = {
WaveformSequence: [
{
NumberOfWaveformChannels: 1,
NumberOfWaveformSamples: 3,
WaveformData: { InlineBinary: base64 },
},
],
};
const module = buildEcgModule(instance);
const channels = await module!.waveformData.retrieveBulkData();
expect(channels).toHaveLength(1);
expect(Array.from(channels[0])).toEqual([10, 20, 30]);
});
it('retrieveBulkData returns [] when WaveformData is absent', async () => {
const instance = {
WaveformSequence: [
{ NumberOfWaveformChannels: 1, NumberOfWaveformSamples: 1 },
],
};
const module = buildEcgModule(instance);
const channels = await module!.waveformData.retrieveBulkData();
expect(channels).toEqual([]);
});
it('retrieveBulkData fetches BulkDataURI with auth header when provided', async () => {
const samples = new Int16Array([1, 2]);
global.fetch = jest.fn().mockResolvedValue({
ok: true,
arrayBuffer: () => Promise.resolve(samples.buffer),
});
const userAuthenticationService = {
getAuthorizationHeader: () => ({ Authorization: 'Bearer token123' }),
};
const instance = {
WaveformSequence: [
{
NumberOfWaveformChannels: 1,
NumberOfWaveformSamples: 2,
WaveformData: { BulkDataURI: 'http://example.com/waveform' },
},
],
};
const module = buildEcgModule(instance, userAuthenticationService);
await module!.waveformData.retrieveBulkData();
expect(global.fetch).toHaveBeenCalledWith('http://example.com/waveform', {
headers: {
Accept: 'application/octet-stream',
Authorization: 'Bearer token123',
},
});
});
it('retrieveBulkData throws when BulkDataURI response is not ok', async () => {
global.fetch = jest.fn().mockResolvedValue({ ok: false, status: 403 });
const instance = {
WaveformSequence: [
{
WaveformData: { BulkDataURI: 'http://example.com/waveform' },
},
],
};
const module = buildEcgModule(instance);
await expect(module!.waveformData.retrieveBulkData()).rejects.toThrow('403');
});
});
@@ -0,0 +1,129 @@
/**
* Decode a multiplexed Int16 buffer into per-channel arrays.
* Layout: sample0ch0, sample0ch1 ... sample0chN, sample1ch0, …
* Note: DICOM ECG data is canonically SS (signed short). The sampleInterpretation
* field is forwarded to ECGViewport for its own use; the raw buffer is always
* treated as Int16 because Cornerstone ECGViewport expects Int16Array[].
*/
export function decodeInt16Multiplex(
buffer: ArrayBuffer,
numberOfChannels: number,
numberOfSamples: number
): Int16Array[] {
const src = new Int16Array(buffer);
const channels: Int16Array[] = [];
for (let ch = 0; ch < numberOfChannels; ch++) {
const out = new Int16Array(numberOfSamples);
for (let s = 0; s < numberOfSamples; s++) {
out[s] = src[s * numberOfChannels + ch];
}
channels.push(out);
}
return channels;
}
/**
* Decode a base64 InlineBinary string into a raw ArrayBuffer.
*/
export function base64ToArrayBuffer(base64: string): ArrayBuffer {
const binaryStr = atob(base64);
const bytes = new Uint8Array(binaryStr.length);
for (let i = 0; i < binaryStr.length; i++) {
bytes[i] = binaryStr.charCodeAt(i);
}
return bytes.buffer;
}
export type EcgModule = {
numberOfWaveformChannels: number;
numberOfWaveformSamples: number;
samplingFrequency: number;
waveformBitsAllocated: number;
waveformSampleInterpretation: string;
multiplexGroupLabel: string;
channelDefinitionSequence: Array<{ channelSourceSequence: { codeMeaning: string } }>;
waveformData: { retrieveBulkData: () => Promise<Int16Array[]> };
};
/**
* Parse the naturalized DICOM instance's WaveformSequence and build the ecgModule
* that Cornerstone's ECGViewport.setEcg() expects via
* metaData.get(MetadataModules.ECG, imageId).
*
* Returns null if the instance has no WaveformSequence.
*/
export function buildEcgModule(
instance: any,
userAuthenticationService?: any
): EcgModule | null {
const waveformGroups = instance?.WaveformSequence;
if (!waveformGroups?.length) {
return null;
}
// Use the first (and typically only) multiplex group
const group = waveformGroups[0];
const numberOfChannels = group.NumberOfWaveformChannels ?? 0;
const numberOfSamples = group.NumberOfWaveformSamples ?? 0;
const samplingFrequency = group.SamplingFrequency ?? 1;
const bitsAllocated = group.WaveformBitsAllocated ?? 16;
const sampleInterpretation = group.WaveformSampleInterpretation ?? 'SS';
const multiplexGroupLabel = group.MultiplexGroupLabel ?? '';
const channelDefinitionSequence = (group.ChannelDefinitionSequence ?? []).map(ch => ({
channelSourceSequence: {
codeMeaning:
ch?.ChannelSourceSequence?.[0]?.CodeMeaning ??
ch?.ChannelSourceSequence?.[0]?.codeMeaning ??
'',
},
}));
const retrieveBulkData = async (): Promise<Int16Array[]> => {
const waveformData = group.WaveformData;
if (!waveformData) {
console.warn('[ECGViewport] No WaveformData found on instance');
return [];
}
let buffer: ArrayBuffer;
if (waveformData.InlineBinary) {
buffer = base64ToArrayBuffer(waveformData.InlineBinary);
} else if (waveformData.BulkDataURI) {
const headers: Record<string, string> = {
Accept: 'application/octet-stream',
};
const authHeader = userAuthenticationService?.getAuthorizationHeader?.();
if (authHeader) {
Object.assign(headers, authHeader);
}
const response = await fetch(waveformData.BulkDataURI, { headers });
if (!response.ok) {
throw new Error(
`[ECGViewport] Failed to fetch waveform BulkDataURI: ${response.status}`
);
}
buffer = await response.arrayBuffer();
} else {
console.warn('[ECGViewport] WaveformData has no InlineBinary or BulkDataURI');
return [];
}
return decodeInt16Multiplex(buffer, numberOfChannels, numberOfSamples);
};
return {
numberOfWaveformChannels: numberOfChannels,
numberOfWaveformSamples: numberOfSamples,
samplingFrequency,
waveformBitsAllocated: bitsAllocated,
waveformSampleInterpretation: sampleInterpretation,
multiplexGroupLabel,
channelDefinitionSequence,
waveformData: { retrieveBulkData },
};
}
@@ -10,6 +10,7 @@ jest.mock('@cornerstonejs/core', () => ({
WHOLE_SLIDE: 'wholeslide',
ORTHOGRAPHIC: 'orthographic',
VOLUME_3D: 'volume3d',
ECG: 'ecg',
},
},
}));
@@ -50,9 +51,14 @@ describe('getCornerstoneViewportType', () => {
expect(result).toBe(Enums.ViewportType.VOLUME_3D);
});
it('should return ECG when viewportType is ecg', () => {
const result = getCornerstoneViewportType('ecg');
expect(result).toBe(Enums.ViewportType.ECG);
});
it('should throw error for invalid viewport type', () => {
expect(() => getCornerstoneViewportType('invalid')).toThrow(
'Invalid viewport type: invalid. Valid types are: stack, volume, video, wholeslide'
'Invalid viewport type: invalid. Valid types are: stack, volume, video, wholeslide, ecg'
);
});
@@ -7,6 +7,7 @@ const ORTHOGRAPHIC = 'orthographic';
const VOLUME_3D = 'volume3d';
const VIDEO = 'video';
const WHOLESLIDE = 'wholeslide';
const ECG = 'ecg';
export default function getCornerstoneViewportType(
viewportType: string,
@@ -25,6 +26,10 @@ export default function getCornerstoneViewportType(
return Enums.ViewportType.WHOLE_SLIDE;
}
if (lowerViewportType === ECG) {
return Enums.ViewportType.ECG;
}
if (lowerViewportType === VOLUME || lowerViewportType === ORTHOGRAPHIC) {
return Enums.ViewportType.ORTHOGRAPHIC;
}
@@ -34,6 +39,6 @@ export default function getCornerstoneViewportType(
}
throw new Error(
`Invalid viewport type: ${viewportType}. Valid types are: stack, volume, video, wholeslide`
`Invalid viewport type: ${viewportType}. Valid types are: stack, volume, video, wholeslide, ecg`
);
}
@@ -0,0 +1,22 @@
/**
* Resolves the data ID (e.g. volumeId) for a viewport and display set.
* For viewports with multiple volumes/actors, returns the id that matches the display set; otherwise undefined.
* Use this to call viewport.getProperties(dataId) in a viewport-type-agnostic way.
*
* @param viewport - Viewport instance (stack, volume, or future types with optional getAllVolumeIds)
* @param displaySetInstanceUID - Display set instance UID to match
* @returns volumeId (or equivalent) for multi-actor viewports, undefined for single-actor
*/
export function getDataIdForViewport(
viewport: unknown,
displaySetInstanceUID: string
): string | undefined {
const vp = viewport as { getAllVolumeIds?: () => string[] };
if (typeof vp.getAllVolumeIds !== 'function') {
return undefined;
}
const volumeIds = vp.getAllVolumeIds() || [];
return volumeIds.length > 0
? volumeIds.find(id => id.includes(displaySetInstanceUID)) ?? undefined
: undefined;
}
@@ -94,22 +94,30 @@ function promptHydrationDialog({
if (type === HydrationType.SEG) {
// SEG needs setTimeout
window.setTimeout(async () => {
const isHydrated = await hydrateCallback({
segDisplaySet: displaySet,
viewportId,
});
resolve(isHydrated);
try {
const isHydrated = await hydrateCallback({
segDisplaySet: displaySet,
viewportId,
});
resolve(isHydrated);
} catch (error) {
reject(error);
}
}, 0);
} else if (type === HydrationType.RTSTRUCT) {
// RT hydration
const isHydrated = await hydrateCallback({
rtDisplaySet: displaySet,
viewportId,
servicesManager,
});
resolve(isHydrated);
window.setTimeout(async () => {
try {
const isHydrated = await hydrateCallback({
rtDisplaySet: displaySet,
viewportId,
servicesManager,
});
resolve(isHydrated);
} catch (error) {
reject(error);
}
}, 0);
} else if (type === HydrationType.SR) {
// SR has a different result structure
const hydrationResult = await hydrateCallback(displaySet);
+88
View File
@@ -3,6 +3,94 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
# [3.13.0-beta.41](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.40...v3.13.0-beta.41) (2026-03-16)
**Note:** Version bump only for package @ohif/extension-default
# [3.13.0-beta.40](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.39...v3.13.0-beta.40) (2026-03-13)
**Note:** Version bump only for package @ohif/extension-default
# [3.13.0-beta.39](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.38...v3.13.0-beta.39) (2026-03-13)
**Note:** Version bump only for package @ohif/extension-default
# [3.13.0-beta.38](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.37...v3.13.0-beta.38) (2026-03-12)
**Note:** Version bump only for package @ohif/extension-default
# [3.13.0-beta.37](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.36...v3.13.0-beta.37) (2026-03-12)
**Note:** Version bump only for package @ohif/extension-default
# [3.13.0-beta.36](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.35...v3.13.0-beta.36) (2026-03-11)
**Note:** Version bump only for package @ohif/extension-default
# [3.13.0-beta.35](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.34...v3.13.0-beta.35) (2026-03-09)
**Note:** Version bump only for package @ohif/extension-default
# [3.13.0-beta.34](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.33...v3.13.0-beta.34) (2026-03-09)
**Note:** Version bump only for package @ohif/extension-default
# [3.13.0-beta.33](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.32...v3.13.0-beta.33) (2026-03-05)
**Note:** Version bump only for package @ohif/extension-default
# [3.13.0-beta.32](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.31...v3.13.0-beta.32) (2026-03-05)
**Note:** Version bump only for package @ohif/extension-default
# [3.13.0-beta.31](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.30...v3.13.0-beta.31) (2026-03-04)
**Note:** Version bump only for package @ohif/extension-default
# [3.13.0-beta.30](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.29...v3.13.0-beta.30) (2026-03-04)
**Note:** Version bump only for package @ohif/extension-default
+3 -3
View File
@@ -1,6 +1,6 @@
{
"name": "@ohif/extension-default",
"version": "3.13.0-beta.30",
"version": "3.13.0-beta.41",
"description": "Common/default features and functionality for basic image viewing",
"author": "OHIF Core Team",
"license": "MIT",
@@ -34,8 +34,8 @@
"test:unit:ci": "jest --ci --runInBand --collectCoverage --passWithNoTests"
},
"peerDependencies": {
"@ohif/core": "3.13.0-beta.30",
"@ohif/i18n": "3.13.0-beta.30",
"@ohif/core": "3.13.0-beta.41",
"@ohif/i18n": "3.13.0-beta.41",
"dcmjs": "0.49.4",
"dicomweb-client": "0.10.4",
"prop-types": "15.8.1",
+91
View File
@@ -3,6 +3,97 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
# [3.13.0-beta.41](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.40...v3.13.0-beta.41) (2026-03-16)
**Note:** Version bump only for package @ohif/extension-dicom-microscopy
# [3.13.0-beta.40](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.39...v3.13.0-beta.40) (2026-03-13)
**Note:** Version bump only for package @ohif/extension-dicom-microscopy
# [3.13.0-beta.39](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.38...v3.13.0-beta.39) (2026-03-13)
**Note:** Version bump only for package @ohif/extension-dicom-microscopy
# [3.13.0-beta.38](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.37...v3.13.0-beta.38) (2026-03-12)
**Note:** Version bump only for package @ohif/extension-dicom-microscopy
# [3.13.0-beta.37](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.36...v3.13.0-beta.37) (2026-03-12)
**Note:** Version bump only for package @ohif/extension-dicom-microscopy
# [3.13.0-beta.36](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.35...v3.13.0-beta.36) (2026-03-11)
**Note:** Version bump only for package @ohif/extension-dicom-microscopy
# [3.13.0-beta.35](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.34...v3.13.0-beta.35) (2026-03-09)
**Note:** Version bump only for package @ohif/extension-dicom-microscopy
# [3.13.0-beta.34](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.33...v3.13.0-beta.34) (2026-03-09)
**Note:** Version bump only for package @ohif/extension-dicom-microscopy
# [3.13.0-beta.33](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.32...v3.13.0-beta.33) (2026-03-05)
**Note:** Version bump only for package @ohif/extension-dicom-microscopy
# [3.13.0-beta.32](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.31...v3.13.0-beta.32) (2026-03-05)
**Note:** Version bump only for package @ohif/extension-dicom-microscopy
# [3.13.0-beta.31](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.30...v3.13.0-beta.31) (2026-03-04)
### Bug Fixes
* **microscopy:** rename measurement in microscopy mode ([#5866](https://github.com/OHIF/Viewers/issues/5866)) ([2358a73](https://github.com/OHIF/Viewers/commit/2358a73c3cd24953430064480fb9e66bfe36ea69))
# [3.13.0-beta.30](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.29...v3.13.0-beta.30) (2026-03-04)
**Note:** Version bump only for package @ohif/extension-dicom-microscopy
+5 -5
View File
@@ -1,6 +1,6 @@
{
"name": "@ohif/extension-dicom-microscopy",
"version": "3.13.0-beta.30",
"version": "3.13.0-beta.41",
"description": "OHIF extension for DICOM microscopy",
"author": "Bill Wallace, md-prog",
"license": "MIT",
@@ -30,10 +30,10 @@
"start": "yarn run dev"
},
"peerDependencies": {
"@ohif/core": "3.13.0-beta.30",
"@ohif/extension-default": "3.13.0-beta.30",
"@ohif/i18n": "3.13.0-beta.30",
"@ohif/ui": "3.13.0-beta.30",
"@ohif/core": "3.13.0-beta.41",
"@ohif/extension-default": "3.13.0-beta.41",
"@ohif/i18n": "3.13.0-beta.41",
"@ohif/ui": "3.13.0-beta.41",
"prop-types": "15.8.1",
"react": "18.3.1",
"react-dom": "18.3.1",
@@ -1,6 +1,7 @@
import { CommandsManager, ExtensionManager } from '@ohif/core';
import { callInputDialog } from '@ohif/extension-default';
import styles from './utils/styles';
import i18n from '@ohif/i18n';
export default function getCommandsModule({
servicesManager,
@@ -24,16 +25,22 @@ export default function getCommandsModule({
}
},
setLabel: ({ uid }) => {
setLabel: async ({ uid }) => {
const roiAnnotation = microscopyService.getAnnotation(uid);
callInputDialog({
if (!roiAnnotation) {
return;
}
const value = await callInputDialog({
uiDialogService,
defaultValue: '',
onSave: (value: string) => {
roiAnnotation.setLabel(value);
microscopyService.triggerRelabel(roiAnnotation);
},
title: i18n.t('Tools:Edit Measurement Label'),
placeholder: roiAnnotation.label || i18n.t('Tools:Enter new label'),
defaultValue: roiAnnotation.label,
});
if (value != null) {
roiAnnotation.setLabel(value);
microscopyService.triggerRelabel(roiAnnotation);
}
},
setToolActive: ({ toolName, toolGroupId = 'MICROSCOPY' }) => {
+88
View File
@@ -3,6 +3,94 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
# [3.13.0-beta.41](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.40...v3.13.0-beta.41) (2026-03-16)
**Note:** Version bump only for package @ohif/extension-dicom-pdf
# [3.13.0-beta.40](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.39...v3.13.0-beta.40) (2026-03-13)
**Note:** Version bump only for package @ohif/extension-dicom-pdf
# [3.13.0-beta.39](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.38...v3.13.0-beta.39) (2026-03-13)
**Note:** Version bump only for package @ohif/extension-dicom-pdf
# [3.13.0-beta.38](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.37...v3.13.0-beta.38) (2026-03-12)
**Note:** Version bump only for package @ohif/extension-dicom-pdf
# [3.13.0-beta.37](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.36...v3.13.0-beta.37) (2026-03-12)
**Note:** Version bump only for package @ohif/extension-dicom-pdf
# [3.13.0-beta.36](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.35...v3.13.0-beta.36) (2026-03-11)
**Note:** Version bump only for package @ohif/extension-dicom-pdf
# [3.13.0-beta.35](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.34...v3.13.0-beta.35) (2026-03-09)
**Note:** Version bump only for package @ohif/extension-dicom-pdf
# [3.13.0-beta.34](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.33...v3.13.0-beta.34) (2026-03-09)
**Note:** Version bump only for package @ohif/extension-dicom-pdf
# [3.13.0-beta.33](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.32...v3.13.0-beta.33) (2026-03-05)
**Note:** Version bump only for package @ohif/extension-dicom-pdf
# [3.13.0-beta.32](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.31...v3.13.0-beta.32) (2026-03-05)
**Note:** Version bump only for package @ohif/extension-dicom-pdf
# [3.13.0-beta.31](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.30...v3.13.0-beta.31) (2026-03-04)
**Note:** Version bump only for package @ohif/extension-dicom-pdf
# [3.13.0-beta.30](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.29...v3.13.0-beta.30) (2026-03-04)
**Note:** Version bump only for package @ohif/extension-dicom-pdf
+3 -3
View File
@@ -1,6 +1,6 @@
{
"name": "@ohif/extension-dicom-pdf",
"version": "3.13.0-beta.30",
"version": "3.13.0-beta.41",
"description": "OHIF extension for PDF display",
"author": "OHIF",
"license": "MIT",
@@ -30,8 +30,8 @@
"test:unit:ci": "jest --ci --runInBand --collectCoverage --passWithNoTests"
},
"peerDependencies": {
"@ohif/core": "3.13.0-beta.30",
"@ohif/ui": "3.13.0-beta.30",
"@ohif/core": "3.13.0-beta.41",
"@ohif/ui": "3.13.0-beta.41",
"dcmjs": "0.49.4",
"dicom-parser": "1.8.21",
"hammerjs": "2.0.8",
+88
View File
@@ -3,6 +3,94 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
# [3.13.0-beta.41](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.40...v3.13.0-beta.41) (2026-03-16)
**Note:** Version bump only for package @ohif/extension-dicom-video
# [3.13.0-beta.40](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.39...v3.13.0-beta.40) (2026-03-13)
**Note:** Version bump only for package @ohif/extension-dicom-video
# [3.13.0-beta.39](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.38...v3.13.0-beta.39) (2026-03-13)
**Note:** Version bump only for package @ohif/extension-dicom-video
# [3.13.0-beta.38](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.37...v3.13.0-beta.38) (2026-03-12)
**Note:** Version bump only for package @ohif/extension-dicom-video
# [3.13.0-beta.37](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.36...v3.13.0-beta.37) (2026-03-12)
**Note:** Version bump only for package @ohif/extension-dicom-video
# [3.13.0-beta.36](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.35...v3.13.0-beta.36) (2026-03-11)
**Note:** Version bump only for package @ohif/extension-dicom-video
# [3.13.0-beta.35](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.34...v3.13.0-beta.35) (2026-03-09)
**Note:** Version bump only for package @ohif/extension-dicom-video
# [3.13.0-beta.34](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.33...v3.13.0-beta.34) (2026-03-09)
**Note:** Version bump only for package @ohif/extension-dicom-video
# [3.13.0-beta.33](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.32...v3.13.0-beta.33) (2026-03-05)
**Note:** Version bump only for package @ohif/extension-dicom-video
# [3.13.0-beta.32](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.31...v3.13.0-beta.32) (2026-03-05)
**Note:** Version bump only for package @ohif/extension-dicom-video
# [3.13.0-beta.31](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.30...v3.13.0-beta.31) (2026-03-04)
**Note:** Version bump only for package @ohif/extension-dicom-video
# [3.13.0-beta.30](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.29...v3.13.0-beta.30) (2026-03-04)
**Note:** Version bump only for package @ohif/extension-dicom-video
+3 -3
View File
@@ -1,6 +1,6 @@
{
"name": "@ohif/extension-dicom-video",
"version": "3.13.0-beta.30",
"version": "3.13.0-beta.41",
"description": "OHIF extension for video display",
"author": "OHIF",
"license": "MIT",
@@ -30,8 +30,8 @@
"test:unit:ci": "jest --ci --runInBand --collectCoverage --passWithNoTests"
},
"peerDependencies": {
"@ohif/core": "3.13.0-beta.30",
"@ohif/ui": "3.13.0-beta.30",
"@ohif/core": "3.13.0-beta.41",
"@ohif/ui": "3.13.0-beta.41",
"dcmjs": "0.49.4",
"dicom-parser": "1.8.21",
"hammerjs": "2.0.8",
@@ -3,6 +3,97 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
# [3.13.0-beta.41](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.40...v3.13.0-beta.41) (2026-03-16)
**Note:** Version bump only for package @ohif/extension-measurement-tracking
# [3.13.0-beta.40](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.39...v3.13.0-beta.40) (2026-03-13)
**Note:** Version bump only for package @ohif/extension-measurement-tracking
# [3.13.0-beta.39](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.38...v3.13.0-beta.39) (2026-03-13)
**Note:** Version bump only for package @ohif/extension-measurement-tracking
# [3.13.0-beta.38](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.37...v3.13.0-beta.38) (2026-03-12)
### Bug Fixes
* **segmentation:** Display "No description S:{series number} {modality}" for segmentations with no label. ([#5874](https://github.com/OHIF/Viewers/issues/5874)) ([7b5d0ce](https://github.com/OHIF/Viewers/commit/7b5d0ce40e5422ccfce6091ac3d7559586cbe57e))
# [3.13.0-beta.37](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.36...v3.13.0-beta.37) (2026-03-12)
**Note:** Version bump only for package @ohif/extension-measurement-tracking
# [3.13.0-beta.36](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.35...v3.13.0-beta.36) (2026-03-11)
**Note:** Version bump only for package @ohif/extension-measurement-tracking
# [3.13.0-beta.35](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.34...v3.13.0-beta.35) (2026-03-09)
**Note:** Version bump only for package @ohif/extension-measurement-tracking
# [3.13.0-beta.34](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.33...v3.13.0-beta.34) (2026-03-09)
**Note:** Version bump only for package @ohif/extension-measurement-tracking
# [3.13.0-beta.33](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.32...v3.13.0-beta.33) (2026-03-05)
**Note:** Version bump only for package @ohif/extension-measurement-tracking
# [3.13.0-beta.32](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.31...v3.13.0-beta.32) (2026-03-05)
**Note:** Version bump only for package @ohif/extension-measurement-tracking
# [3.13.0-beta.31](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.30...v3.13.0-beta.31) (2026-03-04)
**Note:** Version bump only for package @ohif/extension-measurement-tracking
# [3.13.0-beta.30](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.29...v3.13.0-beta.30) (2026-03-04)
**Note:** Version bump only for package @ohif/extension-measurement-tracking
+8 -8
View File
@@ -1,6 +1,6 @@
{
"name": "@ohif/extension-measurement-tracking",
"version": "3.13.0-beta.30",
"version": "3.13.0-beta.41",
"description": "Tracking features and functionality for basic image viewing",
"author": "OHIF Core Team",
"license": "MIT",
@@ -32,12 +32,12 @@
"start": "yarn run dev"
},
"peerDependencies": {
"@cornerstonejs/core": "4.18.2",
"@cornerstonejs/tools": "4.18.2",
"@ohif/core": "3.13.0-beta.30",
"@ohif/extension-cornerstone-dicom-sr": "3.13.0-beta.30",
"@ohif/extension-default": "3.13.0-beta.30",
"@ohif/ui": "3.13.0-beta.30",
"@cornerstonejs/core": "4.19.0",
"@cornerstonejs/tools": "4.19.0",
"@ohif/core": "3.13.0-beta.41",
"@ohif/extension-cornerstone-dicom-sr": "3.13.0-beta.41",
"@ohif/extension-default": "3.13.0-beta.41",
"@ohif/ui": "3.13.0-beta.41",
"classnames": "2.5.1",
"dcmjs": "0.49.4",
"lodash.debounce": "4.0.8",
@@ -49,7 +49,7 @@
},
"dependencies": {
"@babel/runtime": "7.28.2",
"@ohif/ui": "3.13.0-beta.30",
"@ohif/ui": "3.13.0-beta.41",
"@xstate/react": "3.2.2",
"xstate": "4.38.3"
}
+88
View File
@@ -3,6 +3,94 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
# [3.13.0-beta.41](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.40...v3.13.0-beta.41) (2026-03-16)
**Note:** Version bump only for package @ohif/extension-test
# [3.13.0-beta.40](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.39...v3.13.0-beta.40) (2026-03-13)
**Note:** Version bump only for package @ohif/extension-test
# [3.13.0-beta.39](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.38...v3.13.0-beta.39) (2026-03-13)
**Note:** Version bump only for package @ohif/extension-test
# [3.13.0-beta.38](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.37...v3.13.0-beta.38) (2026-03-12)
**Note:** Version bump only for package @ohif/extension-test
# [3.13.0-beta.37](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.36...v3.13.0-beta.37) (2026-03-12)
**Note:** Version bump only for package @ohif/extension-test
# [3.13.0-beta.36](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.35...v3.13.0-beta.36) (2026-03-11)
**Note:** Version bump only for package @ohif/extension-test
# [3.13.0-beta.35](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.34...v3.13.0-beta.35) (2026-03-09)
**Note:** Version bump only for package @ohif/extension-test
# [3.13.0-beta.34](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.33...v3.13.0-beta.34) (2026-03-09)
**Note:** Version bump only for package @ohif/extension-test
# [3.13.0-beta.33](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.32...v3.13.0-beta.33) (2026-03-05)
**Note:** Version bump only for package @ohif/extension-test
# [3.13.0-beta.32](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.31...v3.13.0-beta.32) (2026-03-05)
**Note:** Version bump only for package @ohif/extension-test
# [3.13.0-beta.31](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.30...v3.13.0-beta.31) (2026-03-04)
**Note:** Version bump only for package @ohif/extension-test
# [3.13.0-beta.30](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.29...v3.13.0-beta.30) (2026-03-04)
**Note:** Version bump only for package @ohif/extension-test
+3 -3
View File
@@ -1,6 +1,6 @@
{
"name": "@ohif/extension-test",
"version": "3.13.0-beta.30",
"version": "3.13.0-beta.41",
"description": "OHIF extension used inside e2e testing",
"author": "OHIF",
"license": "MIT",
@@ -30,8 +30,8 @@
"test:unit:ci": "jest --ci --runInBand --collectCoverage --passWithNoTests"
},
"peerDependencies": {
"@ohif/core": "3.13.0-beta.30",
"@ohif/ui": "3.13.0-beta.30",
"@ohif/core": "3.13.0-beta.41",
"@ohif/ui": "3.13.0-beta.41",
"dcmjs": "0.49.4",
"dicom-parser": "1.8.21",
"hammerjs": "2.0.8",
+88
View File
@@ -3,6 +3,94 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
# [3.13.0-beta.41](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.40...v3.13.0-beta.41) (2026-03-16)
**Note:** Version bump only for package @ohif/extension-tmtv
# [3.13.0-beta.40](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.39...v3.13.0-beta.40) (2026-03-13)
**Note:** Version bump only for package @ohif/extension-tmtv
# [3.13.0-beta.39](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.38...v3.13.0-beta.39) (2026-03-13)
**Note:** Version bump only for package @ohif/extension-tmtv
# [3.13.0-beta.38](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.37...v3.13.0-beta.38) (2026-03-12)
**Note:** Version bump only for package @ohif/extension-tmtv
# [3.13.0-beta.37](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.36...v3.13.0-beta.37) (2026-03-12)
**Note:** Version bump only for package @ohif/extension-tmtv
# [3.13.0-beta.36](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.35...v3.13.0-beta.36) (2026-03-11)
**Note:** Version bump only for package @ohif/extension-tmtv
# [3.13.0-beta.35](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.34...v3.13.0-beta.35) (2026-03-09)
**Note:** Version bump only for package @ohif/extension-tmtv
# [3.13.0-beta.34](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.33...v3.13.0-beta.34) (2026-03-09)
**Note:** Version bump only for package @ohif/extension-tmtv
# [3.13.0-beta.33](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.32...v3.13.0-beta.33) (2026-03-05)
**Note:** Version bump only for package @ohif/extension-tmtv
# [3.13.0-beta.32](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.31...v3.13.0-beta.32) (2026-03-05)
**Note:** Version bump only for package @ohif/extension-tmtv
# [3.13.0-beta.31](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.30...v3.13.0-beta.31) (2026-03-04)
**Note:** Version bump only for package @ohif/extension-tmtv
# [3.13.0-beta.30](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.29...v3.13.0-beta.30) (2026-03-04)
**Note:** Version bump only for package @ohif/extension-tmtv
+3 -3
View File
@@ -1,6 +1,6 @@
{
"name": "@ohif/extension-tmtv",
"version": "3.13.0-beta.30",
"version": "3.13.0-beta.41",
"description": "OHIF extension for Total Metabolic Tumor Volume",
"author": "OHIF",
"license": "MIT",
@@ -30,8 +30,8 @@
"test:unit:ci": "jest --ci --runInBand --collectCoverage --passWithNoTests"
},
"peerDependencies": {
"@ohif/core": "3.13.0-beta.30",
"@ohif/ui": "3.13.0-beta.30",
"@ohif/core": "3.13.0-beta.41",
"@ohif/ui": "3.13.0-beta.41",
"dcmjs": "0.49.4",
"dicom-parser": "1.8.21",
"hammerjs": "2.0.8",
+91
View File
@@ -3,6 +3,97 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
# [3.13.0-beta.41](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.40...v3.13.0-beta.41) (2026-03-16)
**Note:** Version bump only for package @ohif/extension-ultrasound-pleura-bline
# [3.13.0-beta.40](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.39...v3.13.0-beta.40) (2026-03-13)
**Note:** Version bump only for package @ohif/extension-ultrasound-pleura-bline
# [3.13.0-beta.39](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.38...v3.13.0-beta.39) (2026-03-13)
**Note:** Version bump only for package @ohif/extension-ultrasound-pleura-bline
# [3.13.0-beta.38](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.37...v3.13.0-beta.38) (2026-03-12)
### Bug Fixes
* **segmentation:** Display "No description S:{series number} {modality}" for segmentations with no label. ([#5874](https://github.com/OHIF/Viewers/issues/5874)) ([7b5d0ce](https://github.com/OHIF/Viewers/commit/7b5d0ce40e5422ccfce6091ac3d7559586cbe57e))
# [3.13.0-beta.37](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.36...v3.13.0-beta.37) (2026-03-12)
**Note:** Version bump only for package @ohif/extension-ultrasound-pleura-bline
# [3.13.0-beta.36](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.35...v3.13.0-beta.36) (2026-03-11)
**Note:** Version bump only for package @ohif/extension-ultrasound-pleura-bline
# [3.13.0-beta.35](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.34...v3.13.0-beta.35) (2026-03-09)
**Note:** Version bump only for package @ohif/extension-ultrasound-pleura-bline
# [3.13.0-beta.34](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.33...v3.13.0-beta.34) (2026-03-09)
**Note:** Version bump only for package @ohif/extension-ultrasound-pleura-bline
# [3.13.0-beta.33](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.32...v3.13.0-beta.33) (2026-03-05)
**Note:** Version bump only for package @ohif/extension-ultrasound-pleura-bline
# [3.13.0-beta.32](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.31...v3.13.0-beta.32) (2026-03-05)
**Note:** Version bump only for package @ohif/extension-ultrasound-pleura-bline
# [3.13.0-beta.31](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.30...v3.13.0-beta.31) (2026-03-04)
**Note:** Version bump only for package @ohif/extension-ultrasound-pleura-bline
# [3.13.0-beta.30](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.29...v3.13.0-beta.30) (2026-03-04)
**Note:** Version bump only for package @ohif/extension-ultrasound-pleura-bline
+8 -8
View File
@@ -1,6 +1,6 @@
{
"name": "@ohif/extension-ultrasound-pleura-bline",
"version": "3.13.0-beta.30",
"version": "3.13.0-beta.41",
"description": "",
"author": "Rodrigo Basilio",
"license": "MIT",
@@ -42,13 +42,13 @@
},
"dependencies": {
"@babel/runtime": "7.28.2",
"@cornerstonejs/core": "4.18.2",
"@cornerstonejs/tools": "4.18.2",
"@ohif/core": "3.13.0-beta.30",
"@ohif/extension-cornerstone": "3.13.0-beta.30",
"@ohif/extension-default": "3.13.0-beta.30",
"@ohif/i18n": "3.13.0-beta.30",
"@ohif/ui-next": "3.13.0-beta.30"
"@cornerstonejs/core": "4.19.0",
"@cornerstonejs/tools": "4.19.0",
"@ohif/core": "3.13.0-beta.41",
"@ohif/extension-cornerstone": "3.13.0-beta.41",
"@ohif/extension-default": "3.13.0-beta.41",
"@ohif/i18n": "3.13.0-beta.41",
"@ohif/ui-next": "3.13.0-beta.41"
},
"devDependencies": {
"@babel/core": "7.28.0",
+1 -1
View File
@@ -1,5 +1,5 @@
{
"version": "3.13.0-beta.30",
"version": "3.13.0-beta.41",
"packages": ["extensions/*", "platform/*", "modes/*", "addOns/externals/*"],
"npmClient": "yarn"
}
+88
View File
@@ -3,6 +3,94 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
# [3.13.0-beta.41](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.40...v3.13.0-beta.41) (2026-03-16)
**Note:** Version bump only for package @ohif/mode-basic-dev-mode
# [3.13.0-beta.40](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.39...v3.13.0-beta.40) (2026-03-13)
**Note:** Version bump only for package @ohif/mode-basic-dev-mode
# [3.13.0-beta.39](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.38...v3.13.0-beta.39) (2026-03-13)
**Note:** Version bump only for package @ohif/mode-basic-dev-mode
# [3.13.0-beta.38](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.37...v3.13.0-beta.38) (2026-03-12)
**Note:** Version bump only for package @ohif/mode-basic-dev-mode
# [3.13.0-beta.37](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.36...v3.13.0-beta.37) (2026-03-12)
**Note:** Version bump only for package @ohif/mode-basic-dev-mode
# [3.13.0-beta.36](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.35...v3.13.0-beta.36) (2026-03-11)
**Note:** Version bump only for package @ohif/mode-basic-dev-mode
# [3.13.0-beta.35](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.34...v3.13.0-beta.35) (2026-03-09)
**Note:** Version bump only for package @ohif/mode-basic-dev-mode
# [3.13.0-beta.34](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.33...v3.13.0-beta.34) (2026-03-09)
**Note:** Version bump only for package @ohif/mode-basic-dev-mode
# [3.13.0-beta.33](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.32...v3.13.0-beta.33) (2026-03-05)
**Note:** Version bump only for package @ohif/mode-basic-dev-mode
# [3.13.0-beta.32](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.31...v3.13.0-beta.32) (2026-03-05)
**Note:** Version bump only for package @ohif/mode-basic-dev-mode
# [3.13.0-beta.31](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.30...v3.13.0-beta.31) (2026-03-04)
**Note:** Version bump only for package @ohif/mode-basic-dev-mode
# [3.13.0-beta.30](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.29...v3.13.0-beta.30) (2026-03-04)
**Note:** Version bump only for package @ohif/mode-basic-dev-mode
+7 -7
View File
@@ -1,6 +1,6 @@
{
"name": "@ohif/mode-basic-dev-mode",
"version": "3.13.0-beta.30",
"version": "3.13.0-beta.41",
"description": "Basic OHIF Viewer Using Cornerstone",
"author": "OHIF",
"license": "MIT",
@@ -31,12 +31,12 @@
"test:unit:ci": "jest --ci --runInBand --collectCoverage --passWithNoTests"
},
"peerDependencies": {
"@ohif/core": "3.13.0-beta.30",
"@ohif/extension-cornerstone": "3.13.0-beta.30",
"@ohif/extension-cornerstone-dicom-sr": "3.13.0-beta.30",
"@ohif/extension-default": "3.13.0-beta.30",
"@ohif/extension-dicom-pdf": "3.13.0-beta.30",
"@ohif/extension-dicom-video": "3.13.0-beta.30"
"@ohif/core": "3.13.0-beta.41",
"@ohif/extension-cornerstone": "3.13.0-beta.41",
"@ohif/extension-cornerstone-dicom-sr": "3.13.0-beta.41",
"@ohif/extension-default": "3.13.0-beta.41",
"@ohif/extension-dicom-pdf": "3.13.0-beta.41",
"@ohif/extension-dicom-video": "3.13.0-beta.41"
},
"dependencies": {
"@babel/runtime": "7.28.2",
+88
View File
@@ -3,6 +3,94 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
# [3.13.0-beta.41](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.40...v3.13.0-beta.41) (2026-03-16)
**Note:** Version bump only for package @ohif/mode-test
# [3.13.0-beta.40](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.39...v3.13.0-beta.40) (2026-03-13)
**Note:** Version bump only for package @ohif/mode-test
# [3.13.0-beta.39](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.38...v3.13.0-beta.39) (2026-03-13)
**Note:** Version bump only for package @ohif/mode-test
# [3.13.0-beta.38](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.37...v3.13.0-beta.38) (2026-03-12)
**Note:** Version bump only for package @ohif/mode-test
# [3.13.0-beta.37](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.36...v3.13.0-beta.37) (2026-03-12)
**Note:** Version bump only for package @ohif/mode-test
# [3.13.0-beta.36](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.35...v3.13.0-beta.36) (2026-03-11)
**Note:** Version bump only for package @ohif/mode-test
# [3.13.0-beta.35](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.34...v3.13.0-beta.35) (2026-03-09)
**Note:** Version bump only for package @ohif/mode-test
# [3.13.0-beta.34](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.33...v3.13.0-beta.34) (2026-03-09)
**Note:** Version bump only for package @ohif/mode-test
# [3.13.0-beta.33](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.32...v3.13.0-beta.33) (2026-03-05)
**Note:** Version bump only for package @ohif/mode-test
# [3.13.0-beta.32](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.31...v3.13.0-beta.32) (2026-03-05)
**Note:** Version bump only for package @ohif/mode-test
# [3.13.0-beta.31](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.30...v3.13.0-beta.31) (2026-03-04)
**Note:** Version bump only for package @ohif/mode-test
# [3.13.0-beta.30](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.29...v3.13.0-beta.30) (2026-03-04)
**Note:** Version bump only for package @ohif/mode-test
+9 -9
View File
@@ -1,6 +1,6 @@
{
"name": "@ohif/mode-test",
"version": "3.13.0-beta.30",
"version": "3.13.0-beta.41",
"description": "Basic mode for testing",
"author": "OHIF",
"license": "MIT",
@@ -34,14 +34,14 @@
"test:unit:ci": "jest --ci --runInBand --collectCoverage --passWithNoTests"
},
"peerDependencies": {
"@ohif/core": "3.13.0-beta.30",
"@ohif/extension-cornerstone": "3.13.0-beta.30",
"@ohif/extension-cornerstone-dicom-sr": "3.13.0-beta.30",
"@ohif/extension-default": "3.13.0-beta.30",
"@ohif/extension-dicom-pdf": "3.13.0-beta.30",
"@ohif/extension-dicom-video": "3.13.0-beta.30",
"@ohif/extension-measurement-tracking": "3.13.0-beta.30",
"@ohif/extension-test": "3.13.0-beta.30"
"@ohif/core": "3.13.0-beta.41",
"@ohif/extension-cornerstone": "3.13.0-beta.41",
"@ohif/extension-cornerstone-dicom-sr": "3.13.0-beta.41",
"@ohif/extension-default": "3.13.0-beta.41",
"@ohif/extension-dicom-pdf": "3.13.0-beta.41",
"@ohif/extension-dicom-video": "3.13.0-beta.41",
"@ohif/extension-measurement-tracking": "3.13.0-beta.41",
"@ohif/extension-test": "3.13.0-beta.41"
},
"dependencies": {
"@babel/runtime": "7.28.2",
+91
View File
@@ -3,6 +3,97 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
# [3.13.0-beta.41](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.40...v3.13.0-beta.41) (2026-03-16)
**Note:** Version bump only for package @ohif/mode-basic
# [3.13.0-beta.40](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.39...v3.13.0-beta.40) (2026-03-13)
**Note:** Version bump only for package @ohif/mode-basic
# [3.13.0-beta.39](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.38...v3.13.0-beta.39) (2026-03-13)
**Note:** Version bump only for package @ohif/mode-basic
# [3.13.0-beta.38](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.37...v3.13.0-beta.38) (2026-03-12)
**Note:** Version bump only for package @ohif/mode-basic
# [3.13.0-beta.37](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.36...v3.13.0-beta.37) (2026-03-12)
**Note:** Version bump only for package @ohif/mode-basic
# [3.13.0-beta.36](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.35...v3.13.0-beta.36) (2026-03-11)
**Note:** Version bump only for package @ohif/mode-basic
# [3.13.0-beta.35](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.34...v3.13.0-beta.35) (2026-03-09)
**Note:** Version bump only for package @ohif/mode-basic
# [3.13.0-beta.34](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.33...v3.13.0-beta.34) (2026-03-09)
**Note:** Version bump only for package @ohif/mode-basic
# [3.13.0-beta.33](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.32...v3.13.0-beta.33) (2026-03-05)
**Note:** Version bump only for package @ohif/mode-basic
# [3.13.0-beta.32](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.31...v3.13.0-beta.32) (2026-03-05)
### Features
* **ecg:** add DICOM ECG waveform extension ([#5856](https://github.com/OHIF/Viewers/issues/5856)) ([70f76ae](https://github.com/OHIF/Viewers/commit/70f76aeba1b27f8e4de5ec73a7b831428e38e3d2))
# [3.13.0-beta.31](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.30...v3.13.0-beta.31) (2026-03-04)
**Note:** Version bump only for package @ohif/mode-basic
# [3.13.0-beta.30](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.29...v3.13.0-beta.30) (2026-03-04)
**Note:** Version bump only for package @ohif/mode-basic
+9 -9
View File
@@ -1,6 +1,6 @@
{
"name": "@ohif/mode-basic",
"version": "3.13.0-beta.30",
"version": "3.13.0-beta.41",
"description": "A basic mode used to build other modes on top of",
"author": "OHIF Contributors",
"license": "MIT",
@@ -21,14 +21,14 @@
"yarn": ">=1.16.0"
},
"peerDependencies": {
"@ohif/core": "3.13.0-beta.30",
"@ohif/extension-cornerstone": "3.13.0-beta.30",
"@ohif/extension-cornerstone-dicom-rt": "3.13.0-beta.30",
"@ohif/extension-cornerstone-dicom-seg": "3.13.0-beta.30",
"@ohif/extension-cornerstone-dicom-sr": "3.13.0-beta.30",
"@ohif/extension-default": "3.13.0-beta.30",
"@ohif/extension-dicom-pdf": "3.13.0-beta.30",
"@ohif/extension-dicom-video": "3.13.0-beta.30"
"@ohif/core": "3.13.0-beta.41",
"@ohif/extension-cornerstone": "3.13.0-beta.41",
"@ohif/extension-cornerstone-dicom-rt": "3.13.0-beta.41",
"@ohif/extension-cornerstone-dicom-seg": "3.13.0-beta.41",
"@ohif/extension-cornerstone-dicom-sr": "3.13.0-beta.41",
"@ohif/extension-default": "3.13.0-beta.41",
"@ohif/extension-dicom-pdf": "3.13.0-beta.41",
"@ohif/extension-dicom-video": "3.13.0-beta.41"
},
"dependencies": {
"@babel/runtime": "7.28.2"
+7 -1
View File
@@ -15,7 +15,7 @@ const { structuredCloneWithFunctions } = utils;
* This list used to include SM, for whole slide imaging, but this is now supported
* by cornerstone. Others of these may get added.
*/
export const NON_IMAGE_MODALITIES = ['ECG', 'SEG', 'RTSTRUCT', 'RTPLAN', 'PR', 'SR'];
export const NON_IMAGE_MODALITIES = ['SEG', 'RTSTRUCT', 'RTPLAN', 'PR', 'SR'];
export const ohif = {
layout: '@ohif/extension-default.layoutTemplateModule.viewerLayout',
@@ -47,6 +47,10 @@ export const dicomvideo = {
viewport: '@ohif/extension-dicom-video.viewportModule.dicom-video',
};
export const dicomecg = {
sopClassHandler: '@ohif/extension-cornerstone.sopClassHandlerModule.DicomEcgSopClassHandler',
};
export const dicompdf = {
sopClassHandler: '@ohif/extension-dicom-pdf.sopClassHandlerModule.dicom-pdf',
viewport: '@ohif/extension-dicom-pdf.viewportModule.dicom-pdf',
@@ -86,6 +90,7 @@ export const extensionDependencies = {
export const sopClassHandlers = [
dicomvideo.sopClassHandler,
dicomecg.sopClassHandler,
dicomSeg.sopClassHandler,
dicomPmap.sopClassHandler,
ohif.sopClassHandler,
@@ -291,6 +296,7 @@ export const basicLayout = {
ohif.sopClassHandler,
dicomvideo.sopClassHandler,
ohif.wsiSopClassHandler,
dicomecg.sopClassHandler,
],
},
{
+88
View File
@@ -3,6 +3,94 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
# [3.13.0-beta.41](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.40...v3.13.0-beta.41) (2026-03-16)
**Note:** Version bump only for package @ohif/mode-longitudinal
# [3.13.0-beta.40](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.39...v3.13.0-beta.40) (2026-03-13)
**Note:** Version bump only for package @ohif/mode-longitudinal
# [3.13.0-beta.39](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.38...v3.13.0-beta.39) (2026-03-13)
**Note:** Version bump only for package @ohif/mode-longitudinal
# [3.13.0-beta.38](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.37...v3.13.0-beta.38) (2026-03-12)
**Note:** Version bump only for package @ohif/mode-longitudinal
# [3.13.0-beta.37](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.36...v3.13.0-beta.37) (2026-03-12)
**Note:** Version bump only for package @ohif/mode-longitudinal
# [3.13.0-beta.36](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.35...v3.13.0-beta.36) (2026-03-11)
**Note:** Version bump only for package @ohif/mode-longitudinal
# [3.13.0-beta.35](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.34...v3.13.0-beta.35) (2026-03-09)
**Note:** Version bump only for package @ohif/mode-longitudinal
# [3.13.0-beta.34](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.33...v3.13.0-beta.34) (2026-03-09)
**Note:** Version bump only for package @ohif/mode-longitudinal
# [3.13.0-beta.33](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.32...v3.13.0-beta.33) (2026-03-05)
**Note:** Version bump only for package @ohif/mode-longitudinal
# [3.13.0-beta.32](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.31...v3.13.0-beta.32) (2026-03-05)
**Note:** Version bump only for package @ohif/mode-longitudinal
# [3.13.0-beta.31](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.30...v3.13.0-beta.31) (2026-03-04)
**Note:** Version bump only for package @ohif/mode-longitudinal
# [3.13.0-beta.30](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.29...v3.13.0-beta.30) (2026-03-04)
**Note:** Version bump only for package @ohif/mode-longitudinal
+11 -11
View File
@@ -1,6 +1,6 @@
{
"name": "@ohif/mode-longitudinal",
"version": "3.13.0-beta.30",
"version": "3.13.0-beta.41",
"description": "Longitudinal Workflow",
"author": "OHIF",
"license": "MIT",
@@ -34,16 +34,16 @@
"test:unit:ci": "jest --ci --runInBand --collectCoverage --passWithNoTests"
},
"peerDependencies": {
"@ohif/core": "3.13.0-beta.30",
"@ohif/extension-cornerstone": "3.13.0-beta.30",
"@ohif/extension-cornerstone-dicom-rt": "3.13.0-beta.30",
"@ohif/extension-cornerstone-dicom-seg": "3.13.0-beta.30",
"@ohif/extension-cornerstone-dicom-sr": "3.13.0-beta.30",
"@ohif/extension-default": "3.13.0-beta.30",
"@ohif/extension-dicom-pdf": "3.13.0-beta.30",
"@ohif/extension-dicom-video": "3.13.0-beta.30",
"@ohif/extension-measurement-tracking": "3.13.0-beta.30",
"@ohif/mode-basic": "3.13.0-beta.30"
"@ohif/core": "3.13.0-beta.41",
"@ohif/extension-cornerstone": "3.13.0-beta.41",
"@ohif/extension-cornerstone-dicom-rt": "3.13.0-beta.41",
"@ohif/extension-cornerstone-dicom-seg": "3.13.0-beta.41",
"@ohif/extension-cornerstone-dicom-sr": "3.13.0-beta.41",
"@ohif/extension-default": "3.13.0-beta.41",
"@ohif/extension-dicom-pdf": "3.13.0-beta.41",
"@ohif/extension-dicom-video": "3.13.0-beta.41",
"@ohif/extension-measurement-tracking": "3.13.0-beta.41",
"@ohif/mode-basic": "3.13.0-beta.41"
},
"dependencies": {
"@babel/runtime": "7.28.2",
+88
View File
@@ -3,6 +3,94 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
# [3.13.0-beta.41](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.40...v3.13.0-beta.41) (2026-03-16)
**Note:** Version bump only for package @ohif/mode-microscopy
# [3.13.0-beta.40](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.39...v3.13.0-beta.40) (2026-03-13)
**Note:** Version bump only for package @ohif/mode-microscopy
# [3.13.0-beta.39](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.38...v3.13.0-beta.39) (2026-03-13)
**Note:** Version bump only for package @ohif/mode-microscopy
# [3.13.0-beta.38](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.37...v3.13.0-beta.38) (2026-03-12)
**Note:** Version bump only for package @ohif/mode-microscopy
# [3.13.0-beta.37](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.36...v3.13.0-beta.37) (2026-03-12)
**Note:** Version bump only for package @ohif/mode-microscopy
# [3.13.0-beta.36](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.35...v3.13.0-beta.36) (2026-03-11)
**Note:** Version bump only for package @ohif/mode-microscopy
# [3.13.0-beta.35](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.34...v3.13.0-beta.35) (2026-03-09)
**Note:** Version bump only for package @ohif/mode-microscopy
# [3.13.0-beta.34](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.33...v3.13.0-beta.34) (2026-03-09)
**Note:** Version bump only for package @ohif/mode-microscopy
# [3.13.0-beta.33](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.32...v3.13.0-beta.33) (2026-03-05)
**Note:** Version bump only for package @ohif/mode-microscopy
# [3.13.0-beta.32](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.31...v3.13.0-beta.32) (2026-03-05)
**Note:** Version bump only for package @ohif/mode-microscopy
# [3.13.0-beta.31](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.30...v3.13.0-beta.31) (2026-03-04)
**Note:** Version bump only for package @ohif/mode-microscopy
# [3.13.0-beta.30](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.29...v3.13.0-beta.30) (2026-03-04)
**Note:** Version bump only for package @ohif/mode-microscopy
+3 -3
View File
@@ -1,6 +1,6 @@
{
"name": "@ohif/mode-microscopy",
"version": "3.13.0-beta.30",
"version": "3.13.0-beta.41",
"description": "OHIF mode for DICOM microscopy",
"author": "OHIF",
"license": "MIT",
@@ -35,8 +35,8 @@
"test:unit:ci": "jest --ci --runInBand --collectCoverage --passWithNoTests"
},
"peerDependencies": {
"@ohif/core": "3.13.0-beta.30",
"@ohif/extension-dicom-microscopy": "3.13.0-beta.30"
"@ohif/core": "3.13.0-beta.41",
"@ohif/extension-dicom-microscopy": "3.13.0-beta.41"
},
"dependencies": {
"@babel/runtime": "7.28.2",
+88
View File
@@ -3,6 +3,94 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
# [3.13.0-beta.41](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.40...v3.13.0-beta.41) (2026-03-16)
**Note:** Version bump only for package @ohif/mode-preclinical-4d
# [3.13.0-beta.40](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.39...v3.13.0-beta.40) (2026-03-13)
**Note:** Version bump only for package @ohif/mode-preclinical-4d
# [3.13.0-beta.39](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.38...v3.13.0-beta.39) (2026-03-13)
**Note:** Version bump only for package @ohif/mode-preclinical-4d
# [3.13.0-beta.38](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.37...v3.13.0-beta.38) (2026-03-12)
**Note:** Version bump only for package @ohif/mode-preclinical-4d
# [3.13.0-beta.37](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.36...v3.13.0-beta.37) (2026-03-12)
**Note:** Version bump only for package @ohif/mode-preclinical-4d
# [3.13.0-beta.36](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.35...v3.13.0-beta.36) (2026-03-11)
**Note:** Version bump only for package @ohif/mode-preclinical-4d
# [3.13.0-beta.35](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.34...v3.13.0-beta.35) (2026-03-09)
**Note:** Version bump only for package @ohif/mode-preclinical-4d
# [3.13.0-beta.34](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.33...v3.13.0-beta.34) (2026-03-09)
**Note:** Version bump only for package @ohif/mode-preclinical-4d
# [3.13.0-beta.33](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.32...v3.13.0-beta.33) (2026-03-05)
**Note:** Version bump only for package @ohif/mode-preclinical-4d
# [3.13.0-beta.32](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.31...v3.13.0-beta.32) (2026-03-05)
**Note:** Version bump only for package @ohif/mode-preclinical-4d
# [3.13.0-beta.31](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.30...v3.13.0-beta.31) (2026-03-04)
**Note:** Version bump only for package @ohif/mode-preclinical-4d
# [3.13.0-beta.30](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.29...v3.13.0-beta.30) (2026-03-04)
**Note:** Version bump only for package @ohif/mode-preclinical-4d
+7 -7
View File
@@ -1,6 +1,6 @@
{
"name": "@ohif/mode-preclinical-4d",
"version": "3.13.0-beta.30",
"version": "3.13.0-beta.41",
"description": "4D Workflow",
"author": "OHIF",
"license": "MIT",
@@ -33,12 +33,12 @@
"test:unit:ci": "jest --ci --runInBand --collectCoverage --passWithNoTests"
},
"peerDependencies": {
"@ohif/core": "3.13.0-beta.30",
"@ohif/extension-cornerstone": "3.13.0-beta.30",
"@ohif/extension-cornerstone-dicom-seg": "3.13.0-beta.30",
"@ohif/extension-cornerstone-dynamic-volume": "3.13.0-beta.30",
"@ohif/extension-default": "3.13.0-beta.30",
"@ohif/extension-tmtv": "3.13.0-beta.30"
"@ohif/core": "3.13.0-beta.41",
"@ohif/extension-cornerstone": "3.13.0-beta.41",
"@ohif/extension-cornerstone-dicom-seg": "3.13.0-beta.41",
"@ohif/extension-cornerstone-dynamic-volume": "3.13.0-beta.41",
"@ohif/extension-default": "3.13.0-beta.41",
"@ohif/extension-tmtv": "3.13.0-beta.41"
},
"dependencies": {
"@babel/runtime": "7.28.2"
+88
View File
@@ -3,6 +3,94 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
# [3.13.0-beta.41](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.40...v3.13.0-beta.41) (2026-03-16)
**Note:** Version bump only for package @ohif/mode-segmentation
# [3.13.0-beta.40](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.39...v3.13.0-beta.40) (2026-03-13)
**Note:** Version bump only for package @ohif/mode-segmentation
# [3.13.0-beta.39](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.38...v3.13.0-beta.39) (2026-03-13)
**Note:** Version bump only for package @ohif/mode-segmentation
# [3.13.0-beta.38](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.37...v3.13.0-beta.38) (2026-03-12)
**Note:** Version bump only for package @ohif/mode-segmentation
# [3.13.0-beta.37](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.36...v3.13.0-beta.37) (2026-03-12)
**Note:** Version bump only for package @ohif/mode-segmentation
# [3.13.0-beta.36](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.35...v3.13.0-beta.36) (2026-03-11)
**Note:** Version bump only for package @ohif/mode-segmentation
# [3.13.0-beta.35](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.34...v3.13.0-beta.35) (2026-03-09)
**Note:** Version bump only for package @ohif/mode-segmentation
# [3.13.0-beta.34](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.33...v3.13.0-beta.34) (2026-03-09)
**Note:** Version bump only for package @ohif/mode-segmentation
# [3.13.0-beta.33](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.32...v3.13.0-beta.33) (2026-03-05)
**Note:** Version bump only for package @ohif/mode-segmentation
# [3.13.0-beta.32](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.31...v3.13.0-beta.32) (2026-03-05)
**Note:** Version bump only for package @ohif/mode-segmentation
# [3.13.0-beta.31](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.30...v3.13.0-beta.31) (2026-03-04)
**Note:** Version bump only for package @ohif/mode-segmentation
# [3.13.0-beta.30](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.29...v3.13.0-beta.30) (2026-03-04)
**Note:** Version bump only for package @ohif/mode-segmentation
+10 -10
View File
@@ -1,6 +1,6 @@
{
"name": "@ohif/mode-segmentation",
"version": "3.13.0-beta.30",
"version": "3.13.0-beta.41",
"description": "OHIF segmentation mode which enables labelmap segmentation read/edit/export",
"author": "@ohif",
"license": "MIT",
@@ -35,15 +35,15 @@
"test:unit:ci": "jest --ci --runInBand --collectCoverage --passWithNoTests"
},
"peerDependencies": {
"@ohif/core": "3.13.0-beta.30",
"@ohif/extension-cornerstone": "3.13.0-beta.30",
"@ohif/extension-cornerstone-dicom-rt": "3.13.0-beta.30",
"@ohif/extension-cornerstone-dicom-seg": "3.13.0-beta.30",
"@ohif/extension-cornerstone-dicom-sr": "3.13.0-beta.30",
"@ohif/extension-default": "3.13.0-beta.30",
"@ohif/extension-dicom-pdf": "3.13.0-beta.30",
"@ohif/extension-dicom-video": "3.13.0-beta.30",
"@ohif/mode-basic": "3.13.0-beta.30"
"@ohif/core": "3.13.0-beta.41",
"@ohif/extension-cornerstone": "3.13.0-beta.41",
"@ohif/extension-cornerstone-dicom-rt": "3.13.0-beta.41",
"@ohif/extension-cornerstone-dicom-seg": "3.13.0-beta.41",
"@ohif/extension-cornerstone-dicom-sr": "3.13.0-beta.41",
"@ohif/extension-default": "3.13.0-beta.41",
"@ohif/extension-dicom-pdf": "3.13.0-beta.41",
"@ohif/extension-dicom-video": "3.13.0-beta.41",
"@ohif/mode-basic": "3.13.0-beta.41"
},
"dependencies": {
"@babel/runtime": "7.28.2",
+91
View File
@@ -3,6 +3,97 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
# [3.13.0-beta.41](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.40...v3.13.0-beta.41) (2026-03-16)
**Note:** Version bump only for package @ohif/mode-tmtv
# [3.13.0-beta.40](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.39...v3.13.0-beta.40) (2026-03-13)
**Note:** Version bump only for package @ohif/mode-tmtv
# [3.13.0-beta.39](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.38...v3.13.0-beta.39) (2026-03-13)
**Note:** Version bump only for package @ohif/mode-tmtv
# [3.13.0-beta.38](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.37...v3.13.0-beta.38) (2026-03-12)
**Note:** Version bump only for package @ohif/mode-tmtv
# [3.13.0-beta.37](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.36...v3.13.0-beta.37) (2026-03-12)
**Note:** Version bump only for package @ohif/mode-tmtv
# [3.13.0-beta.36](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.35...v3.13.0-beta.36) (2026-03-11)
**Note:** Version bump only for package @ohif/mode-tmtv
# [3.13.0-beta.35](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.34...v3.13.0-beta.35) (2026-03-09)
### Bug Fixes
* **Threshold tool:** Threshold tool no longer becomes deselected when the Dynamic option is selected ([#5884](https://github.com/OHIF/Viewers/issues/5884)) ([889026f](https://github.com/OHIF/Viewers/commit/889026f8a9c20cd21c31b4a02128afd5f057b14b))
# [3.13.0-beta.34](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.33...v3.13.0-beta.34) (2026-03-09)
**Note:** Version bump only for package @ohif/mode-tmtv
# [3.13.0-beta.33](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.32...v3.13.0-beta.33) (2026-03-05)
**Note:** Version bump only for package @ohif/mode-tmtv
# [3.13.0-beta.32](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.31...v3.13.0-beta.32) (2026-03-05)
**Note:** Version bump only for package @ohif/mode-tmtv
# [3.13.0-beta.31](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.30...v3.13.0-beta.31) (2026-03-04)
**Note:** Version bump only for package @ohif/mode-tmtv
# [3.13.0-beta.30](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.29...v3.13.0-beta.30) (2026-03-04)
**Note:** Version bump only for package @ohif/mode-tmtv
+8 -8
View File
@@ -1,6 +1,6 @@
{
"name": "@ohif/mode-tmtv",
"version": "3.13.0-beta.30",
"version": "3.13.0-beta.41",
"description": "Total Metabolic Tumor Volume Workflow",
"author": "OHIF",
"license": "MIT",
@@ -34,13 +34,13 @@
"test:unit:ci": "jest --ci --runInBand --collectCoverage --passWithNoTests"
},
"peerDependencies": {
"@ohif/core": "3.13.0-beta.30",
"@ohif/extension-cornerstone": "3.13.0-beta.30",
"@ohif/extension-cornerstone-dicom-sr": "3.13.0-beta.30",
"@ohif/extension-default": "3.13.0-beta.30",
"@ohif/extension-dicom-pdf": "3.13.0-beta.30",
"@ohif/extension-dicom-video": "3.13.0-beta.30",
"@ohif/extension-measurement-tracking": "3.13.0-beta.30"
"@ohif/core": "3.13.0-beta.41",
"@ohif/extension-cornerstone": "3.13.0-beta.41",
"@ohif/extension-cornerstone-dicom-sr": "3.13.0-beta.41",
"@ohif/extension-default": "3.13.0-beta.41",
"@ohif/extension-dicom-pdf": "3.13.0-beta.41",
"@ohif/extension-dicom-video": "3.13.0-beta.41",
"@ohif/extension-measurement-tracking": "3.13.0-beta.41"
},
"dependencies": {
"@babel/runtime": "7.28.2",
+1 -1
View File
@@ -301,7 +301,7 @@ const toolbarButtons = [
evaluate: [
{
name: 'evaluate.cornerstone.segmentation',
toolNames: ['ThresholdCircularBrush', 'ThresholdSphereBrush'],
toolNames: ['ThresholdCircularBrush', 'ThresholdSphereBrush', 'ThresholdCircularBrushDynamic'],
},
{
name: 'evaluate.cornerstone.segmentation.synchronizeDrawingRadius',
+91
View File
@@ -3,6 +3,97 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
# [3.13.0-beta.41](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.40...v3.13.0-beta.41) (2026-03-16)
**Note:** Version bump only for package @ohif/mode-ultrasound-pleura-bline
# [3.13.0-beta.40](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.39...v3.13.0-beta.40) (2026-03-13)
**Note:** Version bump only for package @ohif/mode-ultrasound-pleura-bline
# [3.13.0-beta.39](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.38...v3.13.0-beta.39) (2026-03-13)
**Note:** Version bump only for package @ohif/mode-ultrasound-pleura-bline
# [3.13.0-beta.38](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.37...v3.13.0-beta.38) (2026-03-12)
### Bug Fixes
* **segmentation:** Display "No description S:{series number} {modality}" for segmentations with no label. ([#5874](https://github.com/OHIF/Viewers/issues/5874)) ([7b5d0ce](https://github.com/OHIF/Viewers/commit/7b5d0ce40e5422ccfce6091ac3d7559586cbe57e))
# [3.13.0-beta.37](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.36...v3.13.0-beta.37) (2026-03-12)
**Note:** Version bump only for package @ohif/mode-ultrasound-pleura-bline
# [3.13.0-beta.36](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.35...v3.13.0-beta.36) (2026-03-11)
**Note:** Version bump only for package @ohif/mode-ultrasound-pleura-bline
# [3.13.0-beta.35](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.34...v3.13.0-beta.35) (2026-03-09)
**Note:** Version bump only for package @ohif/mode-ultrasound-pleura-bline
# [3.13.0-beta.34](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.33...v3.13.0-beta.34) (2026-03-09)
**Note:** Version bump only for package @ohif/mode-ultrasound-pleura-bline
# [3.13.0-beta.33](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.32...v3.13.0-beta.33) (2026-03-05)
**Note:** Version bump only for package @ohif/mode-ultrasound-pleura-bline
# [3.13.0-beta.32](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.31...v3.13.0-beta.32) (2026-03-05)
**Note:** Version bump only for package @ohif/mode-ultrasound-pleura-bline
# [3.13.0-beta.31](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.30...v3.13.0-beta.31) (2026-03-04)
**Note:** Version bump only for package @ohif/mode-ultrasound-pleura-bline
# [3.13.0-beta.30](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.29...v3.13.0-beta.30) (2026-03-04)
**Note:** Version bump only for package @ohif/mode-ultrasound-pleura-bline
+6 -6
View File
@@ -1,6 +1,6 @@
{
"name": "@ohif/mode-ultrasound-pleura-bline",
"version": "3.13.0-beta.30",
"version": "3.13.0-beta.41",
"description": "Allows users to annotate ultrasound images with pleura B-line annotations.",
"author": "OHIF",
"license": "MIT",
@@ -34,11 +34,11 @@
},
"dependencies": {
"@babel/runtime": "7.28.2",
"@cornerstonejs/core": "4.18.2",
"@cornerstonejs/tools": "4.18.2",
"@ohif/core": "3.13.0-beta.30",
"@ohif/extension-cornerstone-dicom-sr": "3.13.0-beta.30",
"@ohif/extension-ultrasound-pleura-bline": "3.13.0-beta.30",
"@cornerstonejs/core": "4.19.0",
"@cornerstonejs/tools": "4.19.0",
"@ohif/core": "3.13.0-beta.41",
"@ohif/extension-cornerstone-dicom-sr": "3.13.0-beta.41",
"@ohif/extension-ultrasound-pleura-bline": "3.13.0-beta.41",
"i18next": "17.3.1"
},
"devDependencies": {
+4 -2
View File
@@ -157,8 +157,10 @@
"lodash-es": "4.17.23",
"diff": "5.2.2",
"webpack": "5.105.0",
"tar": "7.5.9",
"serialize-javascript": "7.0.4"
"tar": "7.5.11",
"serialize-javascript": "7.0.4",
"svgo": "3.3.3",
"flatted": "3.4.0"
},
"packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e"
}
+91
View File
@@ -3,6 +3,97 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
# [3.13.0-beta.41](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.40...v3.13.0-beta.41) (2026-03-16)
**Note:** Version bump only for package @ohif/app
# [3.13.0-beta.40](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.39...v3.13.0-beta.40) (2026-03-13)
**Note:** Version bump only for package @ohif/app
# [3.13.0-beta.39](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.38...v3.13.0-beta.39) (2026-03-13)
**Note:** Version bump only for package @ohif/app
# [3.13.0-beta.38](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.37...v3.13.0-beta.38) (2026-03-12)
### Bug Fixes
* **segmentation:** Display "No description S:{series number} {modality}" for segmentations with no label. ([#5874](https://github.com/OHIF/Viewers/issues/5874)) ([7b5d0ce](https://github.com/OHIF/Viewers/commit/7b5d0ce40e5422ccfce6091ac3d7559586cbe57e))
# [3.13.0-beta.37](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.36...v3.13.0-beta.37) (2026-03-12)
**Note:** Version bump only for package @ohif/app
# [3.13.0-beta.36](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.35...v3.13.0-beta.36) (2026-03-11)
**Note:** Version bump only for package @ohif/app
# [3.13.0-beta.35](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.34...v3.13.0-beta.35) (2026-03-09)
**Note:** Version bump only for package @ohif/app
# [3.13.0-beta.34](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.33...v3.13.0-beta.34) (2026-03-09)
**Note:** Version bump only for package @ohif/app
# [3.13.0-beta.33](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.32...v3.13.0-beta.33) (2026-03-05)
**Note:** Version bump only for package @ohif/app
# [3.13.0-beta.32](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.31...v3.13.0-beta.32) (2026-03-05)
**Note:** Version bump only for package @ohif/app
# [3.13.0-beta.31](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.30...v3.13.0-beta.31) (2026-03-04)
**Note:** Version bump only for package @ohif/app
# [3.13.0-beta.30](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.29...v3.13.0-beta.30) (2026-03-04)
**Note:** Version bump only for package @ohif/app
+21 -21
View File
@@ -1,6 +1,6 @@
{
"name": "@ohif/app",
"version": "3.13.0-beta.30",
"version": "3.13.0-beta.41",
"productVersion": "3.4.0",
"description": "OHIF Viewer",
"author": "OHIF Contributors",
@@ -54,27 +54,27 @@
"@cornerstonejs/codec-libjpeg-turbo-8bit": "1.2.2",
"@cornerstonejs/codec-openjpeg": "1.3.0",
"@cornerstonejs/codec-openjph": "2.4.7",
"@cornerstonejs/dicom-image-loader": "4.18.2",
"@cornerstonejs/dicom-image-loader": "4.19.0",
"@emotion/serialize": "1.3.3",
"@ohif/core": "3.13.0-beta.30",
"@ohif/extension-cornerstone": "3.13.0-beta.30",
"@ohif/extension-cornerstone-dicom-rt": "3.13.0-beta.30",
"@ohif/extension-cornerstone-dicom-seg": "3.13.0-beta.30",
"@ohif/extension-cornerstone-dicom-sr": "3.13.0-beta.30",
"@ohif/extension-default": "3.13.0-beta.30",
"@ohif/extension-dicom-microscopy": "3.13.0-beta.30",
"@ohif/extension-dicom-pdf": "3.13.0-beta.30",
"@ohif/extension-dicom-video": "3.13.0-beta.30",
"@ohif/extension-test": "3.13.0-beta.30",
"@ohif/extension-ultrasound-pleura-bline": "3.13.0-beta.30",
"@ohif/i18n": "3.13.0-beta.30",
"@ohif/mode-basic-dev-mode": "3.13.0-beta.30",
"@ohif/mode-longitudinal": "3.13.0-beta.30",
"@ohif/mode-microscopy": "3.13.0-beta.30",
"@ohif/mode-test": "3.13.0-beta.30",
"@ohif/mode-ultrasound-pleura-bline": "3.13.0-beta.30",
"@ohif/ui": "3.13.0-beta.30",
"@ohif/ui-next": "3.13.0-beta.30",
"@ohif/core": "3.13.0-beta.41",
"@ohif/extension-cornerstone": "3.13.0-beta.41",
"@ohif/extension-cornerstone-dicom-rt": "3.13.0-beta.41",
"@ohif/extension-cornerstone-dicom-seg": "3.13.0-beta.41",
"@ohif/extension-cornerstone-dicom-sr": "3.13.0-beta.41",
"@ohif/extension-default": "3.13.0-beta.41",
"@ohif/extension-dicom-microscopy": "3.13.0-beta.41",
"@ohif/extension-dicom-pdf": "3.13.0-beta.41",
"@ohif/extension-dicom-video": "3.13.0-beta.41",
"@ohif/extension-test": "3.13.0-beta.41",
"@ohif/extension-ultrasound-pleura-bline": "3.13.0-beta.41",
"@ohif/i18n": "3.13.0-beta.41",
"@ohif/mode-basic-dev-mode": "3.13.0-beta.41",
"@ohif/mode-longitudinal": "3.13.0-beta.41",
"@ohif/mode-microscopy": "3.13.0-beta.41",
"@ohif/mode-test": "3.13.0-beta.41",
"@ohif/mode-ultrasound-pleura-bline": "3.13.0-beta.41",
"@ohif/ui": "3.13.0-beta.41",
"@ohif/ui-next": "3.13.0-beta.41",
"@svgr/webpack": "8.1.0",
"@types/react": "18.3.23",
"classnames": "2.5.1",
+88
View File
@@ -3,6 +3,94 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
# [3.13.0-beta.41](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.40...v3.13.0-beta.41) (2026-03-16)
**Note:** Version bump only for package @ohif/cli
# [3.13.0-beta.40](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.39...v3.13.0-beta.40) (2026-03-13)
**Note:** Version bump only for package @ohif/cli
# [3.13.0-beta.39](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.38...v3.13.0-beta.39) (2026-03-13)
**Note:** Version bump only for package @ohif/cli
# [3.13.0-beta.38](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.37...v3.13.0-beta.38) (2026-03-12)
**Note:** Version bump only for package @ohif/cli
# [3.13.0-beta.37](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.36...v3.13.0-beta.37) (2026-03-12)
**Note:** Version bump only for package @ohif/cli
# [3.13.0-beta.36](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.35...v3.13.0-beta.36) (2026-03-11)
**Note:** Version bump only for package @ohif/cli
# [3.13.0-beta.35](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.34...v3.13.0-beta.35) (2026-03-09)
**Note:** Version bump only for package @ohif/cli
# [3.13.0-beta.34](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.33...v3.13.0-beta.34) (2026-03-09)
**Note:** Version bump only for package @ohif/cli
# [3.13.0-beta.33](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.32...v3.13.0-beta.33) (2026-03-05)
**Note:** Version bump only for package @ohif/cli
# [3.13.0-beta.32](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.31...v3.13.0-beta.32) (2026-03-05)
**Note:** Version bump only for package @ohif/cli
# [3.13.0-beta.31](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.30...v3.13.0-beta.31) (2026-03-04)
**Note:** Version bump only for package @ohif/cli
# [3.13.0-beta.30](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.29...v3.13.0-beta.30) (2026-03-04)
**Note:** Version bump only for package @ohif/cli
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@ohif/cli",
"version": "3.13.0-beta.30",
"version": "3.13.0-beta.41",
"description": "A CLI to bootstrap new OHIF extension or mode",
"type": "module",
"main": "src/index.js",
+91
View File
@@ -3,6 +3,97 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
# [3.13.0-beta.41](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.40...v3.13.0-beta.41) (2026-03-16)
**Note:** Version bump only for package @ohif/core
# [3.13.0-beta.40](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.39...v3.13.0-beta.40) (2026-03-13)
**Note:** Version bump only for package @ohif/core
# [3.13.0-beta.39](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.38...v3.13.0-beta.39) (2026-03-13)
**Note:** Version bump only for package @ohif/core
# [3.13.0-beta.38](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.37...v3.13.0-beta.38) (2026-03-12)
### Bug Fixes
* **segmentation:** Display "No description S:{series number} {modality}" for segmentations with no label. ([#5874](https://github.com/OHIF/Viewers/issues/5874)) ([7b5d0ce](https://github.com/OHIF/Viewers/commit/7b5d0ce40e5422ccfce6091ac3d7559586cbe57e))
# [3.13.0-beta.37](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.36...v3.13.0-beta.37) (2026-03-12)
**Note:** Version bump only for package @ohif/core
# [3.13.0-beta.36](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.35...v3.13.0-beta.36) (2026-03-11)
**Note:** Version bump only for package @ohif/core
# [3.13.0-beta.35](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.34...v3.13.0-beta.35) (2026-03-09)
**Note:** Version bump only for package @ohif/core
# [3.13.0-beta.34](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.33...v3.13.0-beta.34) (2026-03-09)
**Note:** Version bump only for package @ohif/core
# [3.13.0-beta.33](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.32...v3.13.0-beta.33) (2026-03-05)
**Note:** Version bump only for package @ohif/core
# [3.13.0-beta.32](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.31...v3.13.0-beta.32) (2026-03-05)
**Note:** Version bump only for package @ohif/core
# [3.13.0-beta.31](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.30...v3.13.0-beta.31) (2026-03-04)
**Note:** Version bump only for package @ohif/core
# [3.13.0-beta.30](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.29...v3.13.0-beta.30) (2026-03-04)
**Note:** Version bump only for package @ohif/core
+4 -4
View File
@@ -1,6 +1,6 @@
{
"name": "@ohif/core",
"version": "3.13.0-beta.30",
"version": "3.13.0-beta.41",
"description": "Generic business logic for web-based medical imaging applications",
"author": "OHIF Core Team",
"license": "MIT",
@@ -37,9 +37,9 @@
"@cornerstonejs/codec-libjpeg-turbo-8bit": "1.2.2",
"@cornerstonejs/codec-openjpeg": "1.3.0",
"@cornerstonejs/codec-openjph": "2.4.7",
"@cornerstonejs/core": "4.18.2",
"@cornerstonejs/dicom-image-loader": "4.18.2",
"@ohif/ui": "3.13.0-beta.30",
"@cornerstonejs/core": "4.19.0",
"@cornerstonejs/dicom-image-loader": "4.19.0",
"@ohif/ui": "3.13.0-beta.41",
"cornerstone-math": "0.1.9",
"dicom-parser": "1.8.21"
},
+91
View File
@@ -3,6 +3,97 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
# [3.13.0-beta.41](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.40...v3.13.0-beta.41) (2026-03-16)
**Note:** Version bump only for package ohif-docs
# [3.13.0-beta.40](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.39...v3.13.0-beta.40) (2026-03-13)
**Note:** Version bump only for package ohif-docs
# [3.13.0-beta.39](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.38...v3.13.0-beta.39) (2026-03-13)
**Note:** Version bump only for package ohif-docs
# [3.13.0-beta.38](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.37...v3.13.0-beta.38) (2026-03-12)
**Note:** Version bump only for package ohif-docs
# [3.13.0-beta.37](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.36...v3.13.0-beta.37) (2026-03-12)
**Note:** Version bump only for package ohif-docs
# [3.13.0-beta.36](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.35...v3.13.0-beta.36) (2026-03-11)
**Note:** Version bump only for package ohif-docs
# [3.13.0-beta.35](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.34...v3.13.0-beta.35) (2026-03-09)
**Note:** Version bump only for package ohif-docs
# [3.13.0-beta.34](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.33...v3.13.0-beta.34) (2026-03-09)
**Note:** Version bump only for package ohif-docs
# [3.13.0-beta.33](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.32...v3.13.0-beta.33) (2026-03-05)
### Bug Fixes
* **security:** Bump svgo and tar to fix vulnerabilities. ([#5877](https://github.com/OHIF/Viewers/issues/5877)) ([61a1fcc](https://github.com/OHIF/Viewers/commit/61a1fccd7d47965831a6c80357219eed979ce4d6))
# [3.13.0-beta.32](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.31...v3.13.0-beta.32) (2026-03-05)
**Note:** Version bump only for package ohif-docs
# [3.13.0-beta.31](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.30...v3.13.0-beta.31) (2026-03-04)
**Note:** Version bump only for package ohif-docs
# [3.13.0-beta.30](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.29...v3.13.0-beta.30) (2026-03-04)
**Note:** Version bump only for package ohif-docs
+3 -2
View File
@@ -1,6 +1,6 @@
{
"name": "ohif-docs",
"version": "3.13.0-beta.30",
"version": "3.13.0-beta.41",
"private": true,
"scripts": {
"docusaurus": "docusaurus",
@@ -102,6 +102,7 @@
"webpack": "5.105.0",
"sharp": "0.34.5",
"serialize-javascript": "7.0.4",
"rollup": "2.80.0"
"rollup": "2.80.0",
"svgo": "3.3.3"
}
}
+10 -10
View File
@@ -3647,11 +3647,6 @@
dependencies:
defer-to-connect "^2.0.1"
"@trysound/sax@0.2.0":
version "0.2.0"
resolved "https://registry.yarnpkg.com/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad"
integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==
"@types/acorn@^4.0.0":
version "4.0.6"
resolved "https://registry.yarnpkg.com/@types/acorn/-/acorn-4.0.6.tgz#d61ca5480300ac41a7d973dd5b84d0a591154a22"
@@ -10960,6 +10955,11 @@ sax@^1.2.4:
resolved "https://registry.yarnpkg.com/sax/-/sax-1.4.1.tgz#44cc8988377f126304d3b3fc1010c733b929ef0f"
integrity sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==
sax@^1.5.0:
version "1.5.0"
resolved "https://registry.yarnpkg.com/sax/-/sax-1.5.0.tgz#b5549b671069b7aa392df55ec7574cf411179eb8"
integrity sha512-21IYA3Q5cQf089Z6tgaUTr7lDAyzoTPx5HRtbhsME8Udispad8dC/+sziTNugOEx54ilvatQ9YCzl4KQLPcRHA==
scheduler@^0.23.2:
version "0.23.2"
resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.2.tgz#414ba64a3b282892e944cf2108ecc078d115cdc3"
@@ -11663,18 +11663,18 @@ svg-parser@^2.0.4:
resolved "https://registry.yarnpkg.com/svg-parser/-/svg-parser-2.0.4.tgz#fdc2e29e13951736140b76cb122c8ee6630eb6b5"
integrity sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==
svgo@^3.0.2, svgo@^3.2.0:
version "3.3.2"
resolved "https://registry.yarnpkg.com/svgo/-/svgo-3.3.2.tgz#ad58002652dffbb5986fc9716afe52d869ecbda8"
integrity sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==
svgo@3.3.3, svgo@^3.0.2, svgo@^3.2.0:
version "3.3.3"
resolved "https://registry.yarnpkg.com/svgo/-/svgo-3.3.3.tgz#8246aee0b08791fde3b0ed22b5661b471fadf58e"
integrity sha512-+wn7I4p7YgJhHs38k2TNjy1vCfPIfLIJWR5MnCStsN8WuuTcBnRKcMHQLMM2ijxGZmDoZwNv8ipl5aTTen62ng==
dependencies:
"@trysound/sax" "0.2.0"
commander "^7.2.0"
css-select "^5.1.0"
css-tree "^2.3.1"
css-what "^6.1.0"
csso "^5.0.5"
picocolors "^1.0.0"
sax "^1.5.0"
swc-loader@^0.2.6:
version "0.2.6"
+91
View File
@@ -3,6 +3,97 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
# [3.13.0-beta.41](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.40...v3.13.0-beta.41) (2026-03-16)
**Note:** Version bump only for package @ohif/i18n
# [3.13.0-beta.40](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.39...v3.13.0-beta.40) (2026-03-13)
**Note:** Version bump only for package @ohif/i18n
# [3.13.0-beta.39](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.38...v3.13.0-beta.39) (2026-03-13)
**Note:** Version bump only for package @ohif/i18n
# [3.13.0-beta.38](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.37...v3.13.0-beta.38) (2026-03-12)
### Bug Fixes
* **segmentation:** Display "No description S:{series number} {modality}" for segmentations with no label. ([#5874](https://github.com/OHIF/Viewers/issues/5874)) ([7b5d0ce](https://github.com/OHIF/Viewers/commit/7b5d0ce40e5422ccfce6091ac3d7559586cbe57e))
# [3.13.0-beta.37](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.36...v3.13.0-beta.37) (2026-03-12)
**Note:** Version bump only for package @ohif/i18n
# [3.13.0-beta.36](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.35...v3.13.0-beta.36) (2026-03-11)
**Note:** Version bump only for package @ohif/i18n
# [3.13.0-beta.35](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.34...v3.13.0-beta.35) (2026-03-09)
**Note:** Version bump only for package @ohif/i18n
# [3.13.0-beta.34](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.33...v3.13.0-beta.34) (2026-03-09)
**Note:** Version bump only for package @ohif/i18n
# [3.13.0-beta.33](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.32...v3.13.0-beta.33) (2026-03-05)
**Note:** Version bump only for package @ohif/i18n
# [3.13.0-beta.32](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.31...v3.13.0-beta.32) (2026-03-05)
**Note:** Version bump only for package @ohif/i18n
# [3.13.0-beta.31](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.30...v3.13.0-beta.31) (2026-03-04)
**Note:** Version bump only for package @ohif/i18n
# [3.13.0-beta.30](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.29...v3.13.0-beta.30) (2026-03-04)
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@ohif/i18n",
"version": "3.13.0-beta.30",
"version": "3.13.0-beta.41",
"description": "Internationalization library for The OHIF Viewer",
"author": "OHIF",
"license": "MIT",
@@ -64,5 +64,6 @@
"Not available on the current viewport": "Not available on the current viewport",
"Add segment to enable this tool": "Add segment to enable this tool",
"Segment Bidirectional": "Segment Bidirectional",
"Draw a segment before using bidirectional measurement": "Draw a segment before using bidirectional measurement"
"Draw a segment before using bidirectional measurement": "Draw a segment before using bidirectional measurement",
"No description": "No description"
}
@@ -64,5 +64,6 @@
"Not available on the current viewport": "Test Not available on the current viewport",
"Add segment to enable this tool": "Test Add segment to enable this tool",
"Segment Bidirectional": "Test Segment Bidirectional",
"Draw a segment before using bidirectional measurement": "Test Draw a segment before using bidirectional measurement"
"Draw a segment before using bidirectional measurement": "Test Draw a segment before using bidirectional measurement",
"No description": "Test No description"
}
+97
View File
@@ -3,6 +3,103 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
# [3.13.0-beta.41](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.40...v3.13.0-beta.41) (2026-03-16)
**Note:** Version bump only for package @ohif/ui-next
# [3.13.0-beta.40](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.39...v3.13.0-beta.40) (2026-03-13)
**Note:** Version bump only for package @ohif/ui-next
# [3.13.0-beta.39](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.38...v3.13.0-beta.39) (2026-03-13)
**Note:** Version bump only for package @ohif/ui-next
# [3.13.0-beta.38](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.37...v3.13.0-beta.38) (2026-03-12)
### Bug Fixes
* **segmentation:** Display "No description S:{series number} {modality}" for segmentations with no label. ([#5874](https://github.com/OHIF/Viewers/issues/5874)) ([7b5d0ce](https://github.com/OHIF/Viewers/commit/7b5d0ce40e5422ccfce6091ac3d7559586cbe57e))
# [3.13.0-beta.37](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.36...v3.13.0-beta.37) (2026-03-12)
**Note:** Version bump only for package @ohif/ui-next
# [3.13.0-beta.36](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.35...v3.13.0-beta.36) (2026-03-11)
**Note:** Version bump only for package @ohif/ui-next
# [3.13.0-beta.35](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.34...v3.13.0-beta.35) (2026-03-09)
**Note:** Version bump only for package @ohif/ui-next
# [3.13.0-beta.34](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.33...v3.13.0-beta.34) (2026-03-09)
### Bug Fixes
* **seg hydration:** auto-hydrate RT struct on second load with disableConfirmationPrompts ([#5875](https://github.com/OHIF/Viewers/issues/5875)) ([6f773f9](https://github.com/OHIF/Viewers/commit/6f773f997214c388409f3af3e9fc0e5b84debc10))
# [3.13.0-beta.33](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.32...v3.13.0-beta.33) (2026-03-05)
**Note:** Version bump only for package @ohif/ui-next
# [3.13.0-beta.32](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.31...v3.13.0-beta.32) (2026-03-05)
**Note:** Version bump only for package @ohif/ui-next
# [3.13.0-beta.31](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.30...v3.13.0-beta.31) (2026-03-04)
### Bug Fixes
* **microscopy:** rename measurement in microscopy mode ([#5866](https://github.com/OHIF/Viewers/issues/5866)) ([2358a73](https://github.com/OHIF/Viewers/commit/2358a73c3cd24953430064480fb9e66bfe36ea69))
# [3.13.0-beta.30](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.29...v3.13.0-beta.30) (2026-03-04)
**Note:** Version bump only for package @ohif/ui-next
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@ohif/ui-next",
"version": "3.13.0-beta.30",
"version": "3.13.0-beta.41",
"description": "Next version of OHIF Viewers UI, more customizable using shadcn/ui",
"main": "dist/ohif-ui-next.umd.js",
"module": "src/index.ts",
@@ -280,6 +280,7 @@ const DataRowComponent = React.forwardRef<HTMLDivElement, DataRowProps>(
<Tooltip>
<TooltipTrigger asChild>
<span
data-cy="data-row-title"
className={`cursor-default text-base ${
isSelected ? 'text-highlight' : 'text-muted-foreground'
} [overflow:hidden] [display:-webkit-box] [-webkit-line-clamp:2] [-webkit-box-orient:vertical]`}
@@ -296,6 +297,7 @@ const DataRowComponent = React.forwardRef<HTMLDivElement, DataRowProps>(
</Tooltip>
) : (
<span
data-cy="data-row-title"
className={`text-base ${
isSelected ? 'text-highlight' : 'text-muted-foreground'
} [overflow:hidden] [display:-webkit-box] [-webkit-line-clamp:2] [-webkit-box-orient:vertical]`}
@@ -5,6 +5,7 @@ import {
SegmentationExpandedProvider,
useSegmentationExpanded,
} from './contexts';
import { SegmentationLabel } from './SegmentationLabel';
import { useTranslation } from 'react-i18next';
import {
Button,
@@ -32,12 +33,19 @@ const SegmentationCollapsedHeader = ({ children }: { children: React.ReactNode }
// Dropdown menu component - specifically for dropdown menu content
const SegmentationCollapsedDropdownMenu = ({ children }: { children: React.ReactNode }) => {
const { segmentationRepresentationTypes } = useSegmentationTableContext(
'SegmentationCollapsedDropdownMenu'
);
const dataCyTypeSuffix = segmentationRepresentationTypes?.[0]
? `-${segmentationRepresentationTypes[0]}`
: '';
return (
<DropdownMenu>
<DropdownMenuTrigger asChild>
<Button
variant="ghost"
size="icon"
data-cy={`segmentation-collapsed-more-btn${dataCyTypeSuffix}`}
>
<Icons.More className="h-6 w-6" />
</Button>
@@ -49,7 +57,7 @@ const SegmentationCollapsedDropdownMenu = ({ children }: { children: React.React
// Selector component - for the segmentation selection dropdown
const SegmentationCollapsedSelector = () => {
const { t } = useTranslation('SegmentationPanel.HeaderCollapsed');
const { t } = useTranslation('SegmentationPanel');
const { data, onSegmentationClick, segmentationRepresentationTypes } =
useSegmentationTableContext('SegmentationCollapsedSelector');
const { segmentation } = useSegmentationExpanded('SegmentationCollapsedSelector');
@@ -67,16 +75,28 @@ const SegmentationCollapsedSelector = () => {
)
.map(seg => ({
id: seg.segmentation.segmentationId,
label: seg.segmentation.label,
segmentation: seg.segmentation,
}));
const dataCyTypeSuffix = segmentationRepresentationTypes
? `-${segmentationRepresentationTypes[0]}`
: '';
return (
<Select
onValueChange={value => onSegmentationClick(value)}
value={segmentation?.segmentationId}
>
<SelectTrigger className="w-full overflow-hidden">
<SelectValue placeholder={t('Select a segmentation')} />
<SelectTrigger
className="w-full overflow-hidden"
data-cy={`segmentation-select${dataCyTypeSuffix}`}
>
<SelectValue
placeholder={t('Select a segmentation')}
data-cy={`segmentation-select-value${dataCyTypeSuffix}`}
>
<SegmentationLabel segmentation={segmentation} />
</SelectValue>
</SelectTrigger>
<SelectContent>
{segmentations.map(seg => (
@@ -84,7 +104,7 @@ const SegmentationCollapsedSelector = () => {
key={seg.id}
value={seg.id}
>
{seg.label}
<SegmentationLabel segmentation={seg.segmentation} />
</SelectItem>
))}
</SelectContent>
@@ -11,6 +11,7 @@ import { DropdownMenu, DropdownMenuTrigger } from '../DropdownMenu';
import { Tooltip, TooltipTrigger, TooltipContent } from '../Tooltip/Tooltip';
import { ScrollArea } from '../../components';
import { useDynamicMaxHeight } from '../../hooks/useDynamicMaxHeight';
import { SegmentationLabel } from './SegmentationLabel';
// The Header container component
const SegmentationExpandedHeader = ({ children }: { children: React.ReactNode }) => {
@@ -53,7 +54,11 @@ const SegmentationExpandedDropdownMenu = ({ children }: { children: React.ReactN
const SegmentationExpandedLabel = () => {
const { segmentation } = useSegmentationExpanded('SegmentationExpandedLabel');
return <div className="pl-1.5">{segmentation.label}</div>;
return (
<div className="pl-1.5">
<SegmentationLabel segmentation={segmentation} />
</div>
);
};
// Info component - for the info tooltip
@@ -0,0 +1,27 @@
import React from 'react';
import { useTranslation } from 'react-i18next';
import { Segmentation } from './contexts/SegmentationTableContext';
/**
* Displays the segmentation label. When the label is blank, shows a translated
* "No description" with the series/modality suffix styled in a lighter, muted font.
*/
export const SegmentationLabel = ({ segmentation }: { segmentation: Segmentation }) => {
const { t } = useTranslation('SegmentationPanel');
if (!segmentation) {
return null;
}
if (segmentation.label) {
return <>{segmentation.label}</>;
}
const suffix = segmentation.fallbackLabel;
return (
<>
<span>{t('No description')}</span>
{suffix && <span className="text-muted-foreground text-xxs">&nbsp;&nbsp;{suffix}</span>}
</>
);
};
@@ -17,6 +17,7 @@ export interface Segmentation {
segmentationId: string;
label: string;
cachedStats: SegmentStats;
fallbackLabel?: string;
segments: Record<number, Segment>;
}
+91
View File
@@ -3,6 +3,97 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
# [3.13.0-beta.41](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.40...v3.13.0-beta.41) (2026-03-16)
**Note:** Version bump only for package @ohif/ui
# [3.13.0-beta.40](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.39...v3.13.0-beta.40) (2026-03-13)
**Note:** Version bump only for package @ohif/ui
# [3.13.0-beta.39](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.38...v3.13.0-beta.39) (2026-03-13)
**Note:** Version bump only for package @ohif/ui
# [3.13.0-beta.38](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.37...v3.13.0-beta.38) (2026-03-12)
**Note:** Version bump only for package @ohif/ui
# [3.13.0-beta.37](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.36...v3.13.0-beta.37) (2026-03-12)
**Note:** Version bump only for package @ohif/ui
# [3.13.0-beta.36](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.35...v3.13.0-beta.36) (2026-03-11)
### Bug Fixes
* Modalities in study list should select starts with as primary ([#5886](https://github.com/OHIF/Viewers/issues/5886)) ([b83e978](https://github.com/OHIF/Viewers/commit/b83e978df8c9ffda3759378318267b8d0020653c))
# [3.13.0-beta.35](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.34...v3.13.0-beta.35) (2026-03-09)
**Note:** Version bump only for package @ohif/ui
# [3.13.0-beta.34](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.33...v3.13.0-beta.34) (2026-03-09)
**Note:** Version bump only for package @ohif/ui
# [3.13.0-beta.33](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.32...v3.13.0-beta.33) (2026-03-05)
**Note:** Version bump only for package @ohif/ui
# [3.13.0-beta.32](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.31...v3.13.0-beta.32) (2026-03-05)
**Note:** Version bump only for package @ohif/ui
# [3.13.0-beta.31](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.30...v3.13.0-beta.31) (2026-03-04)
**Note:** Version bump only for package @ohif/ui
# [3.13.0-beta.30](https://github.com/OHIF/Viewers/compare/v3.13.0-beta.29...v3.13.0-beta.30) (2026-03-04)
**Note:** Version bump only for package @ohif/ui
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@ohif/ui",
"version": "3.13.0-beta.30",
"version": "3.13.0-beta.41",
"description": "A set of React components for Medical Imaging Viewers",
"author": "OHIF Contributors",
"license": "MIT",
+37 -2
View File
@@ -1,4 +1,4 @@
import React from 'react';
import React, { useState } from 'react';
import PropTypes from 'prop-types';
import classnames from 'classnames';
import ReactSelect, { components } from 'react-select';
@@ -6,6 +6,34 @@ import { Icons } from '@ohif/ui-next';
import './Select.css';
/**
* Reorder options so items that START with the search text come first
* (shortest first), then items that only contain the text. This order is
* passed to react-select so the focused/highlighted option (e.g. on Enter) is correct.
*/
function orderOptionsByStartsWith(options, searchInput) {
if (!options?.length || !searchInput?.trim()) return options ?? [];
const input = searchInput.trim().toLowerCase();
const startsWith = options.filter(opt => {
const label = (opt.label ?? opt.value ?? '').toString().toLowerCase();
return label.startsWith(input);
});
const containsOnly = options.filter(opt => {
const label = (opt.label ?? opt.value ?? '').toString().toLowerCase();
return label.includes(input) && !label.startsWith(input);
});
const rest = options.filter(opt => {
const label = (opt.label ?? opt.value ?? '').toString().toLowerCase();
return !label.includes(input);
});
startsWith.sort((a, b) => {
const lenA = (a.label ?? a.value ?? '').toString().length;
const lenB = (b.label ?? b.value ?? '').toString().length;
return lenA - lenB;
});
return [...startsWith, ...containsOnly, ...rest];
}
const MultiValue = props => {
const values = props.selectProps.value;
const lastValue = values[values.length - 1];
@@ -56,6 +84,11 @@ const Select = ({
components = {},
value = [],
}) => {
const [filterInput, setFilterInput] = useState('');
const orderedOptions = isSearchable
? orderOptionsByStartsWith(options, filterInput)
: options;
const _noIconComponents = {
DropdownIndicator: () => null,
IndicatorSeparator: () => null,
@@ -92,9 +125,11 @@ const Select = ({
hideSelectedOptions={hideSelectedOptions}
components={_components}
placeholder={placeholder}
options={options}
options={orderedOptions}
blurInputOnSelect={true}
menuPortalTarget={document.body}
onInputChange={isSearchable ? setFilterInput : undefined}
onMenuClose={isSearchable ? () => setFilterInput('') : undefined}
styles={{
menuPortal: base => ({ ...base, zIndex: 9999 }),
}}
+1 -1
View File
@@ -117,7 +117,7 @@ test('checks if image would jump when clicked on a measurement item', async ({
rightPanelPageObject,
viewportPageObject,
}) => {
const viewportInfoBottomRight = viewportPageObject.active.overlayText.bottomRight;
const viewportInfoBottomRight = viewportPageObject.active.overlayText.bottomRight.instanceNumber;
// Image loads on slice 1, confirm on slice 1 then add measurement
await expect(viewportInfoBottomRight).toContainText('1/', { timeout: 10000 });
+33
View File
@@ -0,0 +1,33 @@
import { test, visitStudy, expect } from './utils';
test.beforeEach(async ({ page }) => {
const studyInstanceUID = '1.2.276.0.7230010.3.1.2.296485376.1.1665793212.499772';
const mode = 'microscopy';
await visitStudy(page, studyInstanceUID, mode, 5000);
});
test('should rename a microscopy measurement label', async ({
page,
mainToolbarPageObject,
DOMOverlayPageObject,
rightPanelPageObject,
viewportPageObject,
}) => {
const newLabel = 'Renamed Measurement';
await mainToolbarPageObject.measurementTools.line.click();
await viewportPageObject.active.clickAt([{ x: 400, y: 200 }]);
await page.waitForTimeout(200);
await viewportPageObject.active.clickAt([{ x: 550, y: 250 }]);
const measurementRow = rightPanelPageObject.microscopyPanel.nthMeasurement(0);
await expect(measurementRow.locator).toBeVisible();
await expect(measurementRow.title).toHaveText('(empty)');
await measurementRow.actions.rename(newLabel);
await expect(DOMOverlayPageObject.dialog.input.locator).toBeHidden();
await expect(measurementRow.title).toHaveText(newLabel);
});
Loaded 100 of 118 files, more files were not shown because too many files have changed in this diff. Show more