* 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.
This was done by using an array of representation types instead of a single type for a panel.
The first element of the array is the primary type of the panel, and the rest are secondary types
that can also be displayed in the panel.
PR feedback:
- added test to check number of segments in side panel for 3D only view
- fixed jumping to segment in 3D only view
- fixed exception when adding contour segment in 3D only view
* fix(ViewportWindowLevel): add null checks for volumeActor in opacity functions
* refactor(ViewportWindowLevel): register histogram worker at module load and optimize scalar data retrieval
* fix(Preclinical4D): add null check for viewportId and set frame rate for cine playback
* fix(getSopClassHandlerModule): handle multiframe dynamic volumes by utilizing metaData for instance retrieval
---------
Co-authored-by: Bill Wallace <wayfarer3130@gmail.com>
* fix: prevent annotation from appearing in active viewport when switching series with different Frame of Reference UID
* refactor: extract viewport update strategies
* Update version and use nearest orientation viewport
---------
Co-authored-by: trenser-belbin <belbin.kunjumon@prenuvo.com>
Co-authored-by: Bill Wallace <wayfarer3130@gmail.com>
Requested issues were resolved. Approved this and am merging.
* sort the viewports based on the closest orientation as that of measurement
* fix: Separate out function for finding viewport alignment
---------
Co-authored-by: Arul Mozhi J <arul.mozhi@trenser.com>
Co-authored-by: Bill Wallace <wayfarer3130@gmail.com>