* fix: Use newer ONNX version and load without errors
* Only changes to enable SAM again
* fix(seg hydration): auto-hydrate RT struct on second load with disableConfirmationPrompts (#5875)
* chore(version): Update package versions to 3.13.0-beta.34 [skip ci]
* 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.
* chore(version): Update package versions to 3.13.0-beta.35 [skip ci]
* fix: Modalities in study list should select starts with as primary (#5886)
* chore(version): Update package versions to 3.13.0-beta.36 [skip ci]
* fix(security): Bump tar version to address CVE-2026-31802. (#5893)
* chore(version): Update package versions to 3.13.0-beta.37 [skip ci]
* fix(segmentation): Display "No description S:{series number} {modality}" for segmentations with no label. (#5874)
* Bump CS3D dependency to get the fallbackLabel field additions.
* chore(version): Update package versions to 3.13.0-beta.38 [skip ci]
* 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>
* chore(version): Update package versions to 3.13.0-beta.39 [skip ci]
* fix(security): Bump flattened version to address CVE-2026-32141. (#5897)
* chore(version): Update package versions to 3.13.0-beta.40 [skip ci]
* 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>
* chore(version): Update package versions to 3.13.0-beta.41 [skip ci]
* feat: Add combined build (#5895)
* Add combined build
* Link script location update
* Security and validation fixes
* Allow specifying target path in PR description
* fix: Version match
* Fix build detection issue
* fix: Playwright deploy
* Separate out the branch merge guard
* Update docs and link info
* test: Update the layout change to wait for network idle
* Move audit late so the rest of the build can be worked on
* Add text with network check to ensure we see this change is updated
* Attempt to fix the mpr loading on ohif-downstream
* PR review comments
* Update docs
* Update to CS3D 4.20.0
* PR comments
* Add log on ohif-integration builds
* Update build test
* Removed unused space to kickoff build
* chore(version): Update package versions to 3.13.0-beta.42 [skip ci]
* fix(SR): Added support for spline and live wire SR items. (#5870)
* fix(SR): Added support for spline and live wire SR items.
* Apply suggestion from @greptile-apps[bot]
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
* Add a script to checkout a worktree for test builds
* fix: Allow download for testing sr validator
* Remove script that wasn't intended to be included
* Bump CS3D version.
* PR comments - simplify code and use single codepath for download
* Allow both download and save buttons for SEG and RTSTRUCT
---------
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
Co-authored-by: Bill Wallace <wayfarer3130@gmail.com>
* chore(version): Update package versions to 3.13.0-beta.43 [skip ci]
* chore(tests): contour segment interactions e2e tests - rename and togglevisibility (#5891)
* chore(version): Update package versions to 3.13.0-beta.44 [skip ci]
* chore(refactor): use public appConfig getter instead of private _appConfig field (#5923)
* chore(version): Update package versions to 3.13.0-beta.45 [skip ci]
* refactor(tests): update viewport page object usage to async and update all effected tests (#5927)
* chore(version): Update package versions to 3.13.0-beta.46 [skip ci]
* fix: prevent black viewport when navigating series with client-created segmentation (#5919)
* chore(version): Update package versions to 3.13.0-beta.47 [skip ci]
* fix(measurement): Restore viewport interactivity when deleting in-progress Spline or Livewire measurement (#5905)
* chore(version): Update package versions to 3.13.0-beta.48 [skip ci]
* fix(segmentation): restrict overlay segmentation menu to same frame of reference as viewport background display set (#5900)
- Add FrameOfReferenceUID to SEG and RTSTRUCT displaySet in SOP Class Handlers so the FOR is available for filtering
- Sync optimisticOverlayDisplaySets when background display set changes so the overlay menu reflects the correct state after a background switch
- Add FOR matching guard to the hydrate segmentation synchronizer to prevent the hydration synchronizer from blindly mirroring segmentations from a source viewport to a target viewport if their primary Frames of Reference do not align.
- fix segmentation overlay order reversal on viewport re-render
* chore(version): Update package versions to 3.13.0-beta.49 [skip ci]
* fix(security): update dependencies to fix security vulnerabilities (#5936)
* chore(version): Update package versions to 3.13.0-beta.50 [skip ci]
* fix(security): Update yarn.lock that was missed in PR #5936. (#5940)
* chore(version): Update package versions to 3.13.0-beta.51 [skip ci]
* feat(component): Adds SmartScrollbar to ui-next - OHIF-2558 (#5924)
Co-authored-by: Joe Boccanfuso <joe.boccanfuso@radicalimaging.com>
* fix(defaultRouteInit): pass sorted display sets to hanging protocol for deterministic viewport order (#5933)
fix: pass sorted display sets to hanging protocol for deterministic viewport order
The `applyHangingProtocol` function already sorts display sets by modality
priority and series number into `sortedDisplaySets`, but the unsorted
`displaySets` array was being passed to `hangingProtocolService.run()`.
This caused non-deterministic viewport ordering across page loads because
`displaySetService.getActiveDisplaySets()` returns display sets in creation
order, which depends on asynchronous network responses.
Made-with: Cursor
* chore(version): Update package versions to 3.13.0-beta.52 [skip ci]
* revert: rename DisplaySet.frameOfReferenceUID back to FrameOfReferenceUID (#5943)
* chore(version): Update package versions to 3.13.0-beta.53 [skip ci]
* fix(cornerstone): read FrameOfReferenceUID from display set in viewport service (#5950)
* chore(version): Update package versions to 3.13.0-beta.54 [skip ci]
* fix: ignore auth in git (#5955)
* chore(version): Update package versions to 3.13.0-beta.55 [skip ci]
* ONNX latest version
* chore(version): Update package versions to 3.13.0-beta.56 [skip ci]
* bun lock
* fix high sev mathjs issue
* Revert onnx changes
* Update to recent CS3D version
* Undo unneeded change
* Add null check
* Undo unneeded change
---------
Co-authored-by: Ghadeer Albattarni <165973963+GhadeerAlbattarni@users.noreply.github.com>
Co-authored-by: ohif-bot <danny.ri.brown+ohif-bot@gmail.com>
Co-authored-by: Joe Boccanfuso <109477394+jbocce@users.noreply.github.com>
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
Co-authored-by: diattamo <mmddiatta@gmail.com>
Co-authored-by: Pedro Köhler <pedrokohlerbh@gmail.com>
Co-authored-by: Dan Rukas <dan.rukas@gmail.com>
Co-authored-by: Joe Boccanfuso <joe.boccanfuso@radicalimaging.com>
Co-authored-by: Alireza <ar.sedghi@gmail.com>
fix: Enhance multiframe instance handling and improve instance validation
- Updated `getDisplaySetInfo` to ensure local file frame imageIds resolve correctly, falling back to the source multiframe instance when necessary.
- Improved instance filtering in `isDisplaySetReconstructable` to handle undefined instances more robustly.
- Modified `App` prop types to make `routerBasename` optional and added new props for loading indicators and data sources.
- Refactored `CinePlayer` component to replace Button with a div for better accessibility and interaction.
* fix: A couple of changes to enable cs3d integration build
* Bun update
* fix: Crosshairs tests due to order changes
* Fix a race in DicomTagBrowser.spec.ts and update the comparison for the screenshot for seg hydration.
* Fix sorting issues by using consistent sort
* fix: Inconsistency in scoord loader. Will need an update to screenshot
* Fix crosshairs stability issues and random order issues in Scoord
* Update the comparison image
* Update navigate image
* fix: Axios issue
* Update to current CS3D
- Add FrameOfReferenceUID to SEG and RTSTRUCT displaySet in SOP Class Handlers so the FOR is available for filtering
- Sync optimisticOverlayDisplaySets when background display set changes so the overlay menu reflects the correct state after a background switch
- Add FOR matching guard to the hydrate segmentation synchronizer to prevent the hydration synchronizer from blindly mirroring segmentations from a source viewport to a target viewport if their primary Frames of Reference do not align.
- fix segmentation overlay order reversal on viewport re-render
* fix(SR): Added support for spline and live wire SR items.
* Apply suggestion from @greptile-apps[bot]
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
* Add a script to checkout a worktree for test builds
* fix: Allow download for testing sr validator
* Remove script that wasn't intended to be included
* Bump CS3D version.
* PR comments - simplify code and use single codepath for download
* Allow both download and save buttons for SEG and RTSTRUCT
---------
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
Co-authored-by: Bill Wallace <wayfarer3130@gmail.com>
* Add combined build
* Link script location update
* Security and validation fixes
* Allow specifying target path in PR description
* fix: Version match
* Fix build detection issue
* fix: Playwright deploy
* Separate out the branch merge guard
* Update docs and link info
* test: Update the layout change to wait for network idle
* Move audit late so the rest of the build can be worked on
* Add text with network check to ensure we see this change is updated
* Attempt to fix the mpr loading on ohif-downstream
* PR review comments
* Update docs
* Update to CS3D 4.20.0
* PR comments
* Add log on ohif-integration builds
* Update build test
* Removed unused space to kickoff build
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>
* 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>
* 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>
* fix capture not maintaining flip/rotate state
* fix capture not maintaining flip/rotate state
---------
Co-authored-by: silasshellenbarger <sdshe@Silas-Computer.localdomain>
* fix: Detect 16 bit when 8 declared
* Update bun lock with dcmjs changes
* PR comments
* Update package versions
* fix: Palette color lookup table data for dcmjs parsed data
* fix: Published version should match (#5813)
* fix: Published version should match
* Move version number update to package.json
* fix: Netlify version number update
* Try updating platform app vesion too
* PR comments
---------
Co-authored-by: Joe Boccanfuso <109477394+jbocce@users.noreply.github.com>
* Update latest cs3d
* formatting
* fix: Use 64k instead of 0 for number of entries
* fix: Revert CS3D version to see test issues
* Updated screenshots for ArrowAnnotate.spec.ts.
* Update CS3D version
* fix: Update cs3d 4.17.4
* Update bun lock
* Update bun
* Downgrade to CS3D 4.17.2 to try to release
---------
Co-authored-by: Joe Boccanfuso <109477394+jbocce@users.noreply.github.com>
Co-authored-by: Joe Boccanfuso <joe.boccanfuso@radicalimaging.com>
fix(security): CVE-2026-27212 patched.
Various dependency updates as a result of CVE-2026-26996.
Ultimately CVE-2026-26996 was ignored because it is only exposed in itk-wasm via CLI and OHIF's other use of minimatch is limited to build/dev environments.
- add segmentationExists check to getSopClassHandlerModule
- now firing SEGMENTATION_REMOVED and SEGMENTATION_REPRESENTATION_REMOVED events
- centralized segmentation removal in a listener
- when a segmentation is deleted (completely), remove it from all viewports it overlays
- when a segmentation is removed from a viewport, remove it as overlay from the viewport
---------
Co-authored-by: Joe Boccanfuso <joe.boccanfuso@radicalimaging.com>
Co-authored-by: Bill Wallace <wayfarer3130@gmail.com>
Wrap DicomMicroscopyViewport with React.memo and custom areEqual
to prevent unnecessary re-renders that trigger clearAnnotations().
---------
Co-authored-by: Joe Boccanfuso <joe.boccanfuso@radicalimaging.com>
* fix(security): Moved react-color dependency to default extension because it is only used there.
Addressed CVE-2025-13465 by adding lodash-es as a resolution.
---------
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Joe Boccanfuso <joe.boccanfuso@radicalimaging.com>
* Better handle octet stream case
* Use data source config stack options
* Use immutability helper
* Use immutability helper (update)
---------
Co-authored-by: Bill Wallace <wayfarer3130@gmail.com>
* fix(app): move study validation to ModeRoute component
- Moved validation from defaultRouteInit.ts to Mode.tsx
- Added dedicated useEffect hook for study validation
* test: add Playwright test for study not found error page across multiple modes
Will address a few more comments in a separate PR released after this one into 3.13
* fix(HistoryMemo): Segmentation delete wasn't remembered
* Temporary add of package.json linking
* fix: Use newer dcmjs version and delete segmentation with history cs3d
The window level menu's logic for when it is opened and closed now also runs when the AllInOneMenu triggers the open or close.
Using refs to store the latest function references in the AllInOneMenu component to avoid triggering a useEffect when the functions change.
Removed an unused element prop from the WindowLevelActionMenu component.