From f1a736d1934733a434cb87b2c284907a3122403f Mon Sep 17 00:00:00 2001 From: Alireza Date: Mon, 29 Apr 2024 11:58:03 -0400 Subject: [PATCH] fix(toolbox): Preserve user-specified tool state and streamline command execution (#4063) --- README.md | 2 +- extensions/cornerstone-dicom-seg/package.json | 6 +- .../src/getToolbarModule.ts | 30 +++------ extensions/cornerstone-dicom-sr/package.json | 6 +- .../cornerstone-dynamic-volume/package.json | 6 +- extensions/cornerstone/package.json | 12 ++-- .../src/Viewport/OHIFCornerstoneViewport.tsx | 8 ++- .../Overlays/ViewportImageScrollbar.tsx | 2 +- .../src/components/CinePlayer/CinePlayer.tsx | 12 +++- .../cornerstone/src/getToolbarModule.tsx | 42 ++++++------- .../CornerstoneViewportService.ts | 5 ++ .../src/services/ViewportService/Viewport.ts | 47 +++++++++++--- .../RectangleROI.ts | 1 + extensions/measurement-tracking/package.json | 4 +- .../preclinical-4d/src/segmentationButtons.ts | 15 ----- modes/segmentation/src/segmentationButtons.ts | 36 +++++------ modes/tmtv/src/toolbarButtons.js | 15 ----- package.json | 2 +- platform/app/package.json | 2 +- platform/app/src/routes/Local/Local.tsx | 11 ++-- platform/core/package.json | 2 +- platform/core/src/classes/CommandsManager.ts | 9 ++- .../services/ToolBarService/ToolbarService.ts | 43 ++++++++++++- platform/docs/docs/README.md | 2 +- platform/docs/docs/assets/img/demo-pdf.webp | Bin 28542 -> 92944 bytes .../platform/extensions/modules/toolbar.md | 11 ++-- .../services/data/MeasurementService.md | 20 ++++++ .../assets/icons/ohif-logo-color-darkbg.svg | 20 ++++++ .../AdvancedToolbox/ToolSettings.tsx | 2 +- platform/ui/src/components/Icon/getIcon.js | 2 + .../ui/src/components/Toolbox/Toolbox.tsx | 37 ++++++++--- .../ui/src/components/Toolbox/ToolboxUI.tsx | 36 ++++++++++- .../ui/src/components/Tooltip/Tooltip.tsx | 7 +++ yarn.lock | 58 +++++++++--------- 34 files changed, 332 insertions(+), 181 deletions(-) create mode 100644 platform/ui/src/assets/icons/ohif-logo-color-darkbg.svg diff --git a/README.md b/README.md index c0b4e950f..c505c9581 100644 --- a/README.md +++ b/README.md @@ -47,7 +47,7 @@ provided by the Open Health Imaging Foundation (OHIF | Volume Rendering | Volume Rendering | [Demo](https://viewer.ohif.org/viewer?StudyInstanceUIDs=1.3.6.1.4.1.25403.345050719074.3824.20170125095438.5&hangingprotocolId=mprAnd3DVolumeViewport) | | PDF | PDF | [Demo](https://viewer.ohif.org/viewer?StudyInstanceUIDs=2.25.317377619501274872606137091638706705333) | | RTSTRUCT | RT STRUCT | [Demo](https://viewer.ohif.org/viewer?StudyInstanceUIDs=1.3.6.1.4.1.5962.99.1.2968617883.1314880426.1493322302363.3.0) | -| 4D | 4D | [Demo](https://viewer.ohif.org/dynamic-volume?StudyInstanceUIDs=2.25.232704420736447710317909004159492840763) | +| 4D | 4D | [Demo](https://viewer.ohif.org/dynamic-volume?StudyInstanceUIDs=2.25.232704420736447710317909004159492840763) | | VIDEO | Video | [Demo](https://viewer.ohif.org/viewer?StudyInstanceUIDs=2.25.96975534054447904995905761963464388233) | | microscopy | Slide Microscopy | [Demo](https://viewer.ohif.org/microscopy?StudyInstanceUIDs=2.25.141277760791347900862109212450152067508) | diff --git a/extensions/cornerstone-dicom-seg/package.json b/extensions/cornerstone-dicom-seg/package.json index ba8314d4c..d64153f02 100644 --- a/extensions/cornerstone-dicom-seg/package.json +++ b/extensions/cornerstone-dicom-seg/package.json @@ -46,9 +46,9 @@ }, "dependencies": { "@babel/runtime": "^7.20.13", - "@cornerstonejs/adapters": "^1.70.13", - "@cornerstonejs/core": "^1.70.13", - "@kitware/vtk.js": "30.3.3", + "@cornerstonejs/adapters": "^1.70.14", + "@cornerstonejs/core": "^1.70.14", + "@kitware/vtk.js": "30.4.1", "react-color": "^2.19.3" } } diff --git a/extensions/cornerstone-dicom-seg/src/getToolbarModule.ts b/extensions/cornerstone-dicom-seg/src/getToolbarModule.ts index 8bfe0c1e1..4234cf71c 100644 --- a/extensions/cornerstone-dicom-seg/src/getToolbarModule.ts +++ b/extensions/cornerstone-dicom-seg/src/getToolbarModule.ts @@ -1,5 +1,5 @@ -export function getToolbarModule({ commandsManager, servicesManager }) { - const { segmentationService, toolGroupService } = servicesManager.services; +export function getToolbarModule({ servicesManager }) { + const { segmentationService, toolbarService, toolGroupService } = servicesManager.services; return [ { name: 'evaluate.cornerstone.segmentation', @@ -20,12 +20,16 @@ export function getToolbarModule({ commandsManager, servicesManager }) { const toolGroup = toolGroupService.getToolGroupForViewport(viewportId); if (!toolGroup) { - return; + return { + disabled: true, + className: '!text-common-bright ohif-disabled', + disabledText: disabledText ?? 'Not available on the current viewport', + }; } - const toolName = getToolNameForButton(button); + const toolName = toolbarService.getToolNameForButton(button); - if (!toolGroup || !toolGroup.hasTool(toolName)) { + if (!toolGroup.hasTool(toolName) && !toolNames) { return { disabled: true, className: '!text-common-bright ohif-disabled', @@ -51,19 +55,3 @@ export function getToolbarModule({ commandsManager, servicesManager }) { }, ]; } - -// Todo: this is duplicate, we should move it to a shared location -function getToolNameForButton(button) { - const { props } = button; - - const commands = props?.commands || button.commands; - const commandsArray = Array.isArray(commands) ? commands : [commands]; - const firstCommand = commandsArray[0]; - - if (firstCommand?.commandOptions) { - return firstCommand.commandOptions.toolName ?? props?.id ?? button.id; - } - - // use id as a fallback for toolName - return props?.id ?? button.id; -} diff --git a/extensions/cornerstone-dicom-sr/package.json b/extensions/cornerstone-dicom-sr/package.json index 3413a3f73..589744a26 100644 --- a/extensions/cornerstone-dicom-sr/package.json +++ b/extensions/cornerstone-dicom-sr/package.json @@ -46,9 +46,9 @@ }, "dependencies": { "@babel/runtime": "^7.20.13", - "@cornerstonejs/adapters": "^1.70.13", - "@cornerstonejs/core": "^1.70.13", - "@cornerstonejs/tools": "^1.70.13", + "@cornerstonejs/adapters": "^1.70.14", + "@cornerstonejs/core": "^1.70.14", + "@cornerstonejs/tools": "^1.70.14", "classnames": "^2.3.2" } } diff --git a/extensions/cornerstone-dynamic-volume/package.json b/extensions/cornerstone-dynamic-volume/package.json index cc790219b..431ee553d 100644 --- a/extensions/cornerstone-dynamic-volume/package.json +++ b/extensions/cornerstone-dynamic-volume/package.json @@ -42,9 +42,9 @@ }, "dependencies": { "@babel/runtime": "^7.20.13", - "@cornerstonejs/core": "^1.70.13", - "@cornerstonejs/streaming-image-volume-loader": "^1.70.13", - "@cornerstonejs/tools": "^1.70.13", + "@cornerstonejs/core": "^1.70.14", + "@cornerstonejs/streaming-image-volume-loader": "^1.70.14", + "@cornerstonejs/tools": "^1.70.14", "classnames": "^2.3.2" } } diff --git a/extensions/cornerstone/package.json b/extensions/cornerstone/package.json index fe0d74e1c..4db91ed48 100644 --- a/extensions/cornerstone/package.json +++ b/extensions/cornerstone/package.json @@ -38,7 +38,7 @@ "@cornerstonejs/codec-libjpeg-turbo-8bit": "^1.2.2", "@cornerstonejs/codec-openjpeg": "^1.2.2", "@cornerstonejs/codec-openjph": "^2.4.2", - "@cornerstonejs/dicom-image-loader": "^1.70.13", + "@cornerstonejs/dicom-image-loader": "^1.70.14", "@icr/polyseg-wasm": "^0.4.0", "@ohif/core": "3.8.0-beta.92", "@ohif/ui": "3.8.0-beta.92", @@ -55,12 +55,12 @@ }, "dependencies": { "@babel/runtime": "^7.20.13", - "@cornerstonejs/adapters": "^1.70.13", - "@cornerstonejs/core": "^1.70.13", - "@cornerstonejs/streaming-image-volume-loader": "^1.70.13", - "@cornerstonejs/tools": "^1.70.13", + "@cornerstonejs/adapters": "^1.70.14", + "@cornerstonejs/core": "^1.70.14", + "@cornerstonejs/streaming-image-volume-loader": "^1.70.14", + "@cornerstonejs/tools": "^1.70.14", "@icr/polyseg-wasm": "^0.4.0", - "@kitware/vtk.js": "30.3.3", + "@kitware/vtk.js": "30.4.1", "html2canvas": "^1.4.1", "lodash.debounce": "4.0.8", "lodash.merge": "^4.6.2", diff --git a/extensions/cornerstone/src/Viewport/OHIFCornerstoneViewport.tsx b/extensions/cornerstone/src/Viewport/OHIFCornerstoneViewport.tsx index cd0734ecc..b74bfde6a 100644 --- a/extensions/cornerstone/src/Viewport/OHIFCornerstoneViewport.tsx +++ b/extensions/cornerstone/src/Viewport/OHIFCornerstoneViewport.tsx @@ -485,7 +485,10 @@ function _subscribeToJumpToMeasurementEvents( cornerstoneViewportService.getViewportIdToJump( jumpId, measurement.displaySetInstanceUID, - { referencedImageId: measurement.referencedImageId } + { + referencedImageId: + measurement.referencedImageId || measurement.metadata?.referencedImageId, + } ); } if (cacheJumpToMeasurementEvent.cornerstoneViewport !== viewportId) { @@ -594,6 +597,9 @@ function _jumpToMeasurement( i => i.SOPInstanceUID === SOPInstanceUID ); + // the index is reversed in the volume viewport + // imageIdIndex = referencedDisplaySet.images.length - 1 - imageIdIndex; + const { viewPlaneNormal: viewportViewPlane } = viewport.getCamera(); // should compare abs for both planes since the direction can be flipped diff --git a/extensions/cornerstone/src/Viewport/Overlays/ViewportImageScrollbar.tsx b/extensions/cornerstone/src/Viewport/Overlays/ViewportImageScrollbar.tsx index 2f7b71a45..eb7fe2af3 100644 --- a/extensions/cornerstone/src/Viewport/Overlays/ViewportImageScrollbar.tsx +++ b/extensions/cornerstone/src/Viewport/Overlays/ViewportImageScrollbar.tsx @@ -23,7 +23,7 @@ function CornerstoneImageScrollbar({ if (isCineEnabled) { // on image scrollbar change, stop the CINE if it is playing - cineService.stopClip(element); + cineService.stopClip(element, { viewportId }); cineService.setCine({ id: viewportId, isPlaying: false }); } diff --git a/extensions/cornerstone/src/components/CinePlayer/CinePlayer.tsx b/extensions/cornerstone/src/components/CinePlayer/CinePlayer.tsx index 795ec5529..1ab5a47e3 100644 --- a/extensions/cornerstone/src/components/CinePlayer/CinePlayer.tsx +++ b/extensions/cornerstone/src/components/CinePlayer/CinePlayer.tsx @@ -66,7 +66,7 @@ function WrappedCinePlayer({ enabledVPElement, viewportId, servicesManager }) { } cineService.setCine({ id: viewportId, isPlaying, frameRate }); setNewStackFrameRate(frameRate); - }, [displaySetService, viewportId, viewportGridService, cines, isCineEnabled]); + }, [displaySetService, viewportId, viewportGridService, cines, isCineEnabled, enabledVPElement]); useEffect(() => { isMountedRef.current = true; @@ -78,6 +78,14 @@ function WrappedCinePlayer({ enabledVPElement, viewportId, servicesManager }) { }; }, [isCineEnabled, newDisplaySetHandler]); + useEffect(() => { + if (!isCineEnabled) { + return; + } + + cineHandler(); + }, [isCineEnabled, cineHandler, enabledVPElement]); + /** * Use effect for handling new display set */ @@ -112,7 +120,7 @@ function WrappedCinePlayer({ enabledVPElement, viewportId, servicesManager }) { cineHandler(); return () => { - cineService.stopClip(enabledVPElement); + cineService.stopClip(enabledVPElement, { viewportId }); }; }, [cines, viewportId, cineService, enabledVPElement, cineHandler]); diff --git a/extensions/cornerstone/src/getToolbarModule.tsx b/extensions/cornerstone/src/getToolbarModule.tsx index 2f2de9466..61a6428ed 100644 --- a/extensions/cornerstone/src/getToolbarModule.tsx +++ b/extensions/cornerstone/src/getToolbarModule.tsx @@ -9,6 +9,7 @@ const getToggledClassName = (isToggled: boolean) => { export default function getToolbarModule({ commandsManager, servicesManager }) { const { toolGroupService, + toolbarService, syncGroupService, cornerstoneViewportService, hangingProtocolService, @@ -21,16 +22,16 @@ export default function getToolbarModule({ commandsManager, servicesManager }) { // enabled or not { name: 'evaluate.cornerstoneTool', - evaluate: ({ viewportId, button, disabledText }) => { + evaluate: ({ viewportId, button, toolNames, disabledText }) => { const toolGroup = toolGroupService.getToolGroupForViewport(viewportId); if (!toolGroup) { return; } - const toolName = getToolNameForButton(button); + const toolName = toolbarService.getToolNameForButton(button); - if (!toolGroup || !toolGroup.hasTool(toolName)) { + if (!toolGroup || (!toolGroup.hasTool(toolName) && !toolNames)) { return { disabled: true, className: '!text-common-bright ohif-disabled', @@ -38,7 +39,9 @@ export default function getToolbarModule({ commandsManager, servicesManager }) { }; } - const isPrimaryActive = toolGroup.getActivePrimaryMouseButtonTool() === toolName; + const isPrimaryActive = toolNames + ? toolNames.includes(toolGroup.getActivePrimaryMouseButtonTool()) + : toolGroup.getActivePrimaryMouseButtonTool() === toolName; return { disabled: false, @@ -71,7 +74,7 @@ export default function getToolbarModule({ commandsManager, servicesManager }) { // check if the active toolName is part of the items then we need // to move it to the primary button const activeToolIndex = items.findIndex(item => { - const toolName = getToolNameForButton(item); + const toolName = toolbarService.getToolNameForButton(item); return toolName === activeToolName; }); @@ -114,6 +117,7 @@ export default function getToolbarModule({ commandsManager, servicesManager }) { _evaluateToggle({ viewportId, button, + toolbarService, disabledText, offModes: [Enums.ToolModes.Disabled], toolGroupService, @@ -125,6 +129,7 @@ export default function getToolbarModule({ commandsManager, servicesManager }) { _evaluateToggle({ viewportId, button, + toolbarService, disabledText, offModes: [Enums.ToolModes.Disabled, Enums.ToolModes.Passive], toolGroupService, @@ -267,13 +272,20 @@ export default function getToolbarModule({ commandsManager, servicesManager }) { ]; } -function _evaluateToggle({ viewportId, button, disabledText, offModes, toolGroupService }) { +function _evaluateToggle({ + viewportId, + toolbarService, + button, + disabledText, + offModes, + toolGroupService, +}) { const toolGroup = toolGroupService.getToolGroupForViewport(viewportId); if (!toolGroup) { return; } - const toolName = getToolNameForButton(button); + const toolName = toolbarService.getToolNameForButton(button); if (!toolGroup.hasTool(toolName)) { return { @@ -289,19 +301,3 @@ function _evaluateToggle({ viewportId, button, disabledText, offModes, toolGroup className: getToggledClassName(!isOff), }; } - -// Todo: this is duplicate, we should move it to a shared location -function getToolNameForButton(button) { - const { props } = button; - - const commands = props?.commands || button.commands; - const commandsArray = Array.isArray(commands) ? commands : [commands]; - const firstCommand = commandsArray[0]; - - if (firstCommand?.commandOptions) { - return firstCommand.commandOptions.toolName ?? props?.id ?? button.id; - } - - // use id as a fallback for toolName - return props?.id ?? button.id; -} diff --git a/extensions/cornerstone/src/services/ViewportService/CornerstoneViewportService.ts b/extensions/cornerstone/src/services/ViewportService/CornerstoneViewportService.ts index ae58d69f7..9fd4f3ce5 100644 --- a/extensions/cornerstone/src/services/ViewportService/CornerstoneViewportService.ts +++ b/extensions/cornerstone/src/services/ViewportService/CornerstoneViewportService.ts @@ -532,6 +532,11 @@ class CornerstoneViewportService extends PubSubService implements IViewportServi cameraProps: unknown ): string { const viewportInfo = this.getViewportInfo(activeViewportId); + + if (viewportInfo.getViewportType() === csEnums.ViewportType.VOLUME_3D) { + return null; + } + const { referencedImageId } = cameraProps; if (viewportInfo?.contains(displaySetInstanceUID, referencedImageId)) { return activeViewportId; diff --git a/extensions/cornerstone/src/services/ViewportService/Viewport.ts b/extensions/cornerstone/src/services/ViewportService/Viewport.ts index 2ec852492..247b4d3bd 100644 --- a/extensions/cornerstone/src/services/ViewportService/Viewport.ts +++ b/extensions/cornerstone/src/services/ViewportService/Viewport.ts @@ -1,4 +1,10 @@ -import { Types, Enums } from '@cornerstonejs/core'; +import { + Types, + Enums, + getEnabledElementByViewportId, + VolumeViewport, + utilities, +} from '@cornerstonejs/core'; import { Types as CoreTypes } from '@ohif/core'; import { StackViewportData, VolumeViewportData } from '../../types/CornerstoneCacheService'; import getCornerstoneBlendMode from '../../utils/getCornerstoneBlendMode'; @@ -89,13 +95,30 @@ const DEFAULT_TOOLGROUP_ID = 'default'; // Return true if the data contains the given display set UID OR the imageId // if it is a composite object. -const dataContains = (data, displaySetUID: string, imageId?: string): boolean => { - if (data.displaySetInstanceUID === displaySetUID) { - return true; - } +const dataContains = ({ data, displaySetUID, imageId, viewport }): boolean => { if (imageId && data.isCompositeStack && data.imageIds) { return !!data.imageIds.find(dataId => dataId === imageId); } + + if (imageId && (data.volumeId || viewport instanceof VolumeViewport)) { + const isAcquisition = !!viewport.getCurrentImageId(); + + if (!isAcquisition) { + return false; + } + + const imageURI = utilities.imageIdToURI(imageId); + const hasImageId = viewport.hasImageURI(imageURI); + + if (hasImageId) { + return true; + } + } + + if (data.displaySetInstanceUID === displaySetUID) { + return true; + } + return false; }; @@ -122,10 +145,20 @@ class ViewportInfo { return false; } + const { viewport } = getEnabledElementByViewportId(this.viewportId) || {}; + if (this.viewportData.data.length) { - return !!this.viewportData.data.find(data => dataContains(data, displaySetUID, imageId)); + return !!this.viewportData.data.find(data => + dataContains({ data, displaySetUID, imageId, viewport }) + ); } - return dataContains(this.viewportData.data, displaySetUID, imageId); + + return dataContains({ + data: this.viewportData.data, + displaySetUID, + imageId, + viewport, + }); } public destroy = (): void => { diff --git a/extensions/cornerstone/src/utils/measurementServiceMappings/RectangleROI.ts b/extensions/cornerstone/src/utils/measurementServiceMappings/RectangleROI.ts index 4718e617a..fe94bfa27 100644 --- a/extensions/cornerstone/src/utils/measurementServiceMappings/RectangleROI.ts +++ b/extensions/cornerstone/src/utils/measurementServiceMappings/RectangleROI.ts @@ -114,6 +114,7 @@ function getMappedAnnotations(annotation, DisplaySetService) { unit: modalityUnit, mean, stdDev, + metadata, max, area, areaUnit, diff --git a/extensions/measurement-tracking/package.json b/extensions/measurement-tracking/package.json index acc9ee41d..bb7d0d836 100644 --- a/extensions/measurement-tracking/package.json +++ b/extensions/measurement-tracking/package.json @@ -32,8 +32,8 @@ "start": "yarn run dev" }, "peerDependencies": { - "@cornerstonejs/core": "^1.70.13", - "@cornerstonejs/tools": "^1.70.13", + "@cornerstonejs/core": "^1.70.14", + "@cornerstonejs/tools": "^1.70.14", "@ohif/core": "3.8.0-beta.92", "@ohif/extension-cornerstone-dicom-sr": "3.8.0-beta.92", "@ohif/ui": "3.8.0-beta.92", diff --git a/modes/preclinical-4d/src/segmentationButtons.ts b/modes/preclinical-4d/src/segmentationButtons.ts index ecc028a1f..a179dfecc 100644 --- a/modes/preclinical-4d/src/segmentationButtons.ts +++ b/modes/preclinical-4d/src/segmentationButtons.ts @@ -1,16 +1,5 @@ import type { Button } from '@ohif/core/types'; -function _createSetToolActiveCommands(toolName) { - return [ - { - commandName: 'setToolActive', - commandOptions: { - toolName, - }, - }, - ]; -} - const toolbarButtons: Button[] = [ { id: 'BrushTools', @@ -26,7 +15,6 @@ const toolbarButtons: Button[] = [ name: 'evaluate.cornerstone.segmentation', toolNames: ['CircularBrush', 'SphereBrush'], }, - commands: _createSetToolActiveCommands('CircularBrush'), options: [ { name: 'Size (mm)', @@ -62,7 +50,6 @@ const toolbarButtons: Button[] = [ name: 'evaluate.cornerstone.segmentation', toolNames: ['CircularEraser', 'SphereEraser'], }, - commands: _createSetToolActiveCommands('CircularEraser'), options: [ { name: 'Radius (mm)', @@ -98,7 +85,6 @@ const toolbarButtons: Button[] = [ name: 'evaluate.cornerstone.segmentation', toolNames: ['ThresholdCircularBrush', 'ThresholdSphereBrush'], }, - commands: _createSetToolActiveCommands('ThresholdCircularBrush'), options: [ { name: 'Radius (mm)', @@ -156,7 +142,6 @@ const toolbarButtons: Button[] = [ toolNames: ['CircleScissor', 'SphereScissor', 'RectangleScissor'], }, icon: 'icon-tool-shape', - commands: _createSetToolActiveCommands('CircleScissor'), options: [ { name: 'Shape', diff --git a/modes/segmentation/src/segmentationButtons.ts b/modes/segmentation/src/segmentationButtons.ts index 800ea99fd..448267f02 100644 --- a/modes/segmentation/src/segmentationButtons.ts +++ b/modes/segmentation/src/segmentationButtons.ts @@ -1,16 +1,5 @@ import type { Button } from '@ohif/core/types'; -function _createSetToolActiveCommands(toolName) { - return [ - { - commandName: 'setToolActive', - commandOptions: { - toolName, - }, - }, - ]; -} - const toolbarButtons: Button[] = [ { id: 'BrushTools', @@ -27,7 +16,6 @@ const toolbarButtons: Button[] = [ toolNames: ['CircularBrush', 'SphereBrush'], disabledText: 'Create new segmentation to enable this tool.', }, - commands: _createSetToolActiveCommands('CircularBrush'), options: [ { name: 'Radius (mm)', @@ -63,7 +51,6 @@ const toolbarButtons: Button[] = [ name: 'evaluate.cornerstone.segmentation', toolNames: ['CircularEraser', 'SphereEraser'], }, - commands: _createSetToolActiveCommands('CircularEraser'), options: [ { name: 'Radius (mm)', @@ -99,7 +86,6 @@ const toolbarButtons: Button[] = [ name: 'evaluate.cornerstone.segmentation', toolNames: ['ThresholdCircularBrush', 'ThresholdSphereBrush'], }, - commands: _createSetToolActiveCommands('ThresholdCircularBrush'), options: [ { name: 'Radius (mm)', @@ -130,22 +116,29 @@ const toolbarButtons: Button[] = [ { value: 'ThresholdDynamic', label: 'Dynamic' }, { value: 'ThresholdRange', label: 'Range' }, ], - commands: ({ value, commandsManager }) => { + commands: ({ value, commandsManager, options }) => { if (value === 'ThresholdDynamic') { commandsManager.run('setToolActive', { toolName: 'ThresholdCircularBrushDynamic', }); - } else { - commandsManager.run('setToolActive', { - toolName: 'ThresholdCircularBrush', - }); + + return; } + + // check the condition of the threshold-range option + const thresholdRangeOption = options.find( + option => option.id === 'threshold-shape' + ); + + commandsManager.run('setToolActiveToolbar', { + toolName: thresholdRangeOption.value, + }); }, }, { name: 'Shape', type: 'radio', - id: 'eraser-mode', + id: 'threshold-shape', value: 'ThresholdCircularBrush', values: [ { value: 'ThresholdCircularBrush', label: 'Circle' }, @@ -162,7 +155,7 @@ const toolbarButtons: Button[] = [ min: -1000, max: 1000, step: 1, - values: [100, 600], + value: [100, 600], condition: ({ options }) => options.find(option => option.id === 'dynamic-mode').value === 'ThresholdRange', commands: { @@ -187,7 +180,6 @@ const toolbarButtons: Button[] = [ toolNames: ['CircleScissor', 'SphereScissor', 'RectangleScissor'], }, icon: 'icon-tool-shape', - commands: _createSetToolActiveCommands('CircleScissor'), options: [ { name: 'Shape', diff --git a/modes/tmtv/src/toolbarButtons.js b/modes/tmtv/src/toolbarButtons.js index b6a14fc64..b180d974e 100644 --- a/modes/tmtv/src/toolbarButtons.js +++ b/modes/tmtv/src/toolbarButtons.js @@ -8,18 +8,6 @@ const setToolActiveToolbar = { }, }; -function _createSetToolActiveCommands(toolName) { - return [ - { - commandName: 'setToolActiveToolbar', - commandOptions: { - toolName, - toolGroupIds: [toolGroupIds.CT, toolGroupIds.PT, toolGroupIds.Fusion], - }, - }, - ]; -} - const toolbarButtons = [ { id: 'MeasurementTools', @@ -144,7 +132,6 @@ const toolbarButtons = [ toolNames: ['CircularBrush', 'SphereBrush'], disabledText: 'Create new segmentation to enable this tool.', }, - commands: _createSetToolActiveCommands('CircularBrush'), options: [ { name: 'Radius (mm)', @@ -180,7 +167,6 @@ const toolbarButtons = [ name: 'evaluate.cornerstone.segmentation', toolNames: ['CircularEraser', 'SphereEraser'], }, - commands: _createSetToolActiveCommands('CircularEraser'), options: [ { name: 'Radius (mm)', @@ -216,7 +202,6 @@ const toolbarButtons = [ name: 'evaluate.cornerstone.segmentation', toolNames: ['ThresholdCircularBrush', 'ThresholdSphereBrush'], }, - commands: _createSetToolActiveCommands('ThresholdCircularBrush'), options: [ { name: 'Radius (mm)', diff --git a/package.json b/package.json index 199db41f3..c52519e0e 100644 --- a/package.json +++ b/package.json @@ -60,7 +60,7 @@ }, "dependencies": { "@babel/runtime": "^7.20.13", - "@kitware/vtk.js": "30.3.3", + "@kitware/vtk.js": "30.4.1", "core-js": "^3.2.1" }, "peerDependencies": { diff --git a/platform/app/package.json b/platform/app/package.json index 5037ab84c..4b8ecf809 100644 --- a/platform/app/package.json +++ b/platform/app/package.json @@ -54,7 +54,7 @@ "@cornerstonejs/codec-libjpeg-turbo-8bit": "^1.2.2", "@cornerstonejs/codec-openjpeg": "^1.2.2", "@cornerstonejs/codec-openjph": "^2.4.5", - "@cornerstonejs/dicom-image-loader": "^1.70.13", + "@cornerstonejs/dicom-image-loader": "^1.70.14", "@emotion/serialize": "^1.1.3", "@ohif/core": "3.8.0-beta.92", "@ohif/extension-cornerstone": "3.8.0-beta.92", diff --git a/platform/app/src/routes/Local/Local.tsx b/platform/app/src/routes/Local/Local.tsx index bea60c268..1804cd7fe 100644 --- a/platform/app/src/routes/Local/Local.tsx +++ b/platform/app/src/routes/Local/Local.tsx @@ -125,11 +125,12 @@ function Local({ modePath }: LocalProps) { >
- OHIF +
+ +
{dropInitiated ? (
diff --git a/platform/core/package.json b/platform/core/package.json index 351817eef..707847105 100644 --- a/platform/core/package.json +++ b/platform/core/package.json @@ -37,7 +37,7 @@ "@cornerstonejs/codec-libjpeg-turbo-8bit": "^1.2.2", "@cornerstonejs/codec-openjpeg": "^1.2.2", "@cornerstonejs/codec-openjph": "^2.4.2", - "@cornerstonejs/dicom-image-loader": "^1.70.13", + "@cornerstonejs/dicom-image-loader": "^1.70.14", "@ohif/ui": "3.8.0-beta.92", "cornerstone-math": "0.1.9", "dicom-parser": "^1.8.21" diff --git a/platform/core/src/classes/CommandsManager.ts b/platform/core/src/classes/CommandsManager.ts index 820554ca2..e6ef1e912 100644 --- a/platform/core/src/classes/CommandsManager.ts +++ b/platform/core/src/classes/CommandsManager.ts @@ -204,7 +204,8 @@ export class CommandsManager { // Execute each command in the array let result: unknown; - commands.forEach(({ commandName, commandOptions, context }) => { + commands.forEach(command => { + const { commandName, commandOptions, context } = command; if (commandName) { result = this.runCommand( commandName, @@ -215,7 +216,11 @@ export class CommandsManager { context ); } else { - console.warn('No command name supplied in', toRun); + if (typeof command === 'function') { + result = command(); + } else { + console.warn('No command name supplied in', toRun); + } } }); diff --git a/platform/core/src/services/ToolBarService/ToolbarService.ts b/platform/core/src/services/ToolBarService/ToolbarService.ts index d5a0b2828..a31421f2b 100644 --- a/platform/core/src/services/ToolBarService/ToolbarService.ts +++ b/platform/core/src/services/ToolBarService/ToolbarService.ts @@ -156,7 +156,7 @@ export default class ToolbarService extends PubSubService { const itemId = interaction.itemId ?? interaction.id; interaction.itemId = itemId; - const commands = Array.isArray(interaction.commands) + let commands = Array.isArray(interaction.commands) ? interaction.commands : [interaction.commands]; @@ -170,6 +170,27 @@ export default class ToolbarService extends PubSubService { const commandOptions = { ...options, ...interaction }; + commands = commands.map(command => { + if (typeof command === 'function') { + return () => { + command({ + ...commandOptions, + commandsManager: this._commandsManager, + servicesManager: this._servicesManager, + }); + }; + } + + return command; + }); + + // if still no commands, return + commands = commands.filter(Boolean); + + if (!commands.length) { + return; + } + // Loop through commands and run them with the combined options this._commandsManager.run(commands, commandOptions); @@ -377,6 +398,26 @@ export default class ToolbarService extends PubSubService { ); } + /** + * Retrieves the tool name for a given button. + * @param button - The button object. + * @returns The tool name associated with the button. + */ + getToolNameForButton(button) { + const { props } = button; + + const commands = props?.commands || button.commands; + const commandsArray = Array.isArray(commands) ? commands : [commands]; + const firstCommand = commandsArray[0]; + + if (firstCommand?.commandOptions) { + return firstCommand.commandOptions.toolName ?? props?.id ?? button.id; + } + + // use id as a fallback for toolName + return props?.id ?? button.id; + } + /** * * @param {*} btn diff --git a/platform/docs/docs/README.md b/platform/docs/docs/README.md index f5fb55b90..9b5a6f7d5 100644 --- a/platform/docs/docs/README.md +++ b/platform/docs/docs/README.md @@ -44,7 +44,7 @@ Key features: | Volume Rendering | Volume Rendering | [Demo](https://viewer.ohif.org/viewer?StudyInstanceUIDs=1.3.6.1.4.1.25403.345050719074.3824.20170125095438.5&hangingprotocolId=mprAnd3DVolumeViewport) | | PDF | PDF | [Demo](https://viewer.ohif.org/viewer?StudyInstanceUIDs=2.25.317377619501274872606137091638706705333) | | RTSTRUCT | RT STRUCT | [Demo](https://viewer.ohif.org/viewer?StudyInstanceUIDs=1.3.6.1.4.1.5962.99.1.2968617883.1314880426.1493322302363.3.0) | -| 4D | 4D | [Demo](https://viewer.ohif.org/dynamic-volume?StudyInstanceUIDs=2.25.232704420736447710317909004159492840763) | +| 4D | 4D | [Demo](https://viewer.ohif.org/dynamic-volume?StudyInstanceUIDs=2.25.232704420736447710317909004159492840763) | | VIDEO | Video | [Demo](https://viewer.ohif.org/viewer?StudyInstanceUIDs=2.25.96975534054447904995905761963464388233) | | microscopy | Slide Microscopy | [Demo](https://viewer.ohif.org/microscopy?StudyInstanceUIDs=2.25.141277760791347900862109212450152067508) | diff --git a/platform/docs/docs/assets/img/demo-pdf.webp b/platform/docs/docs/assets/img/demo-pdf.webp index 7c94427306d81d11e5f6c4c2b169aa0c7137f9a5..3119a12b553600db57245faac8d3d39347632c3c 100644 GIT binary patch literal 92944 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

=2Ttof9{qmVEql9bw5 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

I7?O%J3BvOLOP*<$Oz{Py4g&_oCT z2lTU8FcIU==d@PRCe^-b4}yRI0FoHYD}Ir{4t;@9U53N^#^HH}nh7gqN^0JVAkVpN zEWF5OKXa+fdMfho*G&oYjUWC|Qzt^w+hFB^3d%~9mvnXOOH^@EK3YV+l`^`;;ydx+ zEYCy1%kmw~!KIJ2hDTl8j#N@-Jp%BS^QPDn>NA2e0)nN&0r?$p3MiF|#pNP+^!+$rX(m}JUAttJc|hK!nogeiU8iH3H# znnwLZ!+0=zAA}qB_iKn8rM#VdA-5H}`XbqJ$Y|^J|Ob|~HOY!tp+TwP( z2hJ^duYRB?My{*{HS3}e%dA*W*HK~N(LSS0Eh84kreoS+7bY))sRSD`?uo{`iCwCl zwHZhslM>ITv}#>#Id-RbYC`H8$kE6W?MZ+2}xHon0*wL z=pX%D`NzyYt~)k^W-A&@;RXC(Py_cMWPZr#4XjRAI^5 z#qE01)g-;H%)>H86An+eB$|Pth!`e=$#gthQY}ADN~FTo47oQ;MXi1x-;mH#GJUdn z9IE?VyJw=6g4{~cN_<;MCrS2lhqVM&M40x$y2XPR?3>&q{Z-k1Sysg~*Q=@=gP9n7p@*!F0Mm3l!=PNN{-@(Q|!;mrafJ8l1ytc96t z+bWH7%#ZGt{=&e+JzrB zVyEgRA(X}ef`F=paN3zzwDR%xkL&@}CkW8C`Ig=0hdj1&JE%~K%xDe|8w>|=^9>5} z^<%BFa{~&<1W|%PNp7{+jsOCxsNeuHij}T8?i6~36nux5+JKz9iRHLgkwJ!F-~a#= zzOp2DE2DKw3$X}k*us#?p@!jmQ?PljbP-{aWezMzG=XAo0y!C9sz&*%QS+-TCGqRk zeoH*iS;oR5H0vWYT2@d=DQ5%>U7z_2YR%=3oF$d;^x^;lXE8LIVycS%0lOOAFcY;M z#=eT6^xND(arxyS8HfgyH!_7kVH&?DvK7vxgfxN7ev_7x&!@VS);iF}V?QYK#unNWzA$o3KCt&%LtBU!}}tm25)aYSo4qBWdR8qO$< zY7Xk~%aExPFN5vM`t%zYgtGL?(J7Fn@l7~(ERA!=m~C+EV4_tv3~@`3eCwkC0D0tBCPv}izAhI?rfV!-JcA#sUIjwhGaA%}Mk=ClX0@`}^H zxRf&UiDCUdi7@@1PmfjDFMc4r%od#zAE>WNkpKYmRNM^! literal 28542 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

tr+N)Dmv(|G> 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 P=DrD#1;7B%KE!_m6zH#} diff --git a/platform/docs/docs/platform/extensions/modules/toolbar.md b/platform/docs/docs/platform/extensions/modules/toolbar.md index e10fe36ec..94fdb22fc 100644 --- a/platform/docs/docs/platform/extensions/modules/toolbar.md +++ b/platform/docs/docs/platform/extensions/modules/toolbar.md @@ -91,7 +91,7 @@ Let's look at one of the evaluators (for `evaluate.cornerstoneTool`) return; } - const toolName = getToolNameForButton(button); + const toolName = toolbarService.getToolNameForButton(button); if (!toolGroup || !toolGroup.hasTool(toolName)) { return { @@ -405,7 +405,12 @@ state will get synchronized with the toolbar service automatically. Your toolbox toolbar buttons can have options, this is really useful for advanced tools that require to change some parameters. For example, the brush tool that requires the brush size to change or the mode (2D or 3D). -currently we support three types of options +:::note +Toolbox with options will run the options commands +on the mount of the toolbox component. This is useful for setting the initial state of the toolbox. +::: + +Currently we support three types of options. ### Radio option @@ -423,7 +428,6 @@ three different modes toolNames: ['CircleScissor', 'SphereScissor', 'RectangleScissor'], }, icon: 'icon-tool-shape', - commands: _createSetToolActiveCommands('CircleScissor'), options: [ { name: 'Shape', @@ -456,7 +460,6 @@ We use this for brush radius change toolNames: ['CircularBrush', 'SphereBrush'], disabledText: 'Create new segmentation to enable this tool.', }, - commands: _createSetToolActiveCommands('CircularBrush'), options: [ { name: 'Radius (mm)', diff --git a/platform/docs/docs/platform/services/data/MeasurementService.md b/platform/docs/docs/platform/services/data/MeasurementService.md index f4ecd51f6..f5ede2f14 100644 --- a/platform/docs/docs/platform/services/data/MeasurementService.md +++ b/platform/docs/docs/platform/services/data/MeasurementService.md @@ -160,3 +160,23 @@ const _initMeasurementService = (MeasurementService, DisplaySetService) => { return csToolsVer4MeasurementSource; }; ``` + + +## Auto complete +Use a customization service to add more customizations for measurement labels. Later, when adding a measurement, the user will be prompted to choose from a list of labels. + +```js +customizationService.addModeCustomizations([ + { + id: 'measurementLabels', + labelOnMeasure: true, + exclusive: true, + items: [ + { value: 'Head', label: 'Head' }, + { value: 'Neck', label: 'Neck' }, + { value: 'Knee', label: 'Knee' }, + { value: 'Toe', label: 'Toe' }, + ], + }, +]); +``` diff --git a/platform/ui/src/assets/icons/ohif-logo-color-darkbg.svg b/platform/ui/src/assets/icons/ohif-logo-color-darkbg.svg new file mode 100644 index 000000000..545838127 --- /dev/null +++ b/platform/ui/src/assets/icons/ohif-logo-color-darkbg.svg @@ -0,0 +1,20 @@ + + + ohif-logo-color-darkbg + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/platform/ui/src/components/AdvancedToolbox/ToolSettings.tsx b/platform/ui/src/components/AdvancedToolbox/ToolSettings.tsx index ebf6e2411..0d5d339b5 100644 --- a/platform/ui/src/components/AdvancedToolbox/ToolSettings.tsx +++ b/platform/ui/src/components/AdvancedToolbox/ToolSettings.tsx @@ -103,7 +103,7 @@ const renderDoubleRangeSetting = option => { key={option.id} > { const currentButtonIdsStr = JSON.stringify( @@ -33,11 +34,24 @@ function Toolbox({ servicesManager, buttonSectionId, commandsManager, title, ... }) ); - if (prevButtonIdsRef.current === currentButtonIdsStr) { + const currentToolBoxStateStr = JSON.stringify( + Object.keys(toolboxState.toolOptions).map(tool => { + const options = toolboxState.toolOptions[tool]; + if (Array.isArray(options)) { + return options?.map(option => `${option.id}-${option.value}`); + } + }) + ); + + if ( + prevButtonIdsRef.current === currentButtonIdsStr && + prevToolboxStateRef.current === currentToolBoxStateStr + ) { return; } prevButtonIdsRef.current = currentButtonIdsStr; + prevToolboxStateRef.current = currentToolBoxStateStr; const initializeOptionsWithEnhancements = toolbarButtons.reduce( (accumulator, toolbarButton) => { @@ -51,11 +65,15 @@ function Toolbox({ servicesManager, buttonSectionId, commandsManager, title, ... return option; } + const value = + toolboxState.toolOptions?.[parentId]?.find(prop => prop.id === option.id)?.value ?? + option.value; + + const updatedOptions = toolboxState.toolOptions?.[parentId]; + return { ...option, - value: - toolboxState.toolOptions?.[parentId]?.find(prop => prop.id === option.id)?.value ?? - option.value, + value, commands: value => { api.handleToolOptionChange(parentId, option.id, value); @@ -72,10 +90,15 @@ function Toolbox({ servicesManager, buttonSectionId, commandsManager, title, ... } else if (isObject) { commandsManager.run({ ...command, - commandOptions: { ...command.commandOptions, ...option, value }, + commandOptions: { + ...command.commandOptions, + ...option, + value, + options: updatedOptions, + }, }); } else if (isFunction) { - command({ value, commandsManager, servicesManager }); + command({ value, commandsManager, servicesManager, options: updatedOptions }); } }); }, @@ -101,7 +124,7 @@ function Toolbox({ servicesManager, buttonSectionId, commandsManager, title, ... ); api.initializeToolOptions(initializeOptionsWithEnhancements); - }, [toolbarButtons, api]); + }, [toolbarButtons, api, toolboxState]); const handleToolOptionChange = (toolName, optionName, newValue) => { api.handleToolOptionChange(toolName, optionName, newValue); diff --git a/platform/ui/src/components/Toolbox/ToolboxUI.tsx b/platform/ui/src/components/Toolbox/ToolboxUI.tsx index 6a102a195..5755de911 100644 --- a/platform/ui/src/components/Toolbox/ToolboxUI.tsx +++ b/platform/ui/src/components/Toolbox/ToolboxUI.tsx @@ -1,9 +1,17 @@ -import React from 'react'; -import { PanelSection, ToolSettings, Tooltip } from '../../components'; +import React, { useEffect, useRef } from 'react'; +import { PanelSection, ToolSettings } from '../../components'; import classnames from 'classnames'; const ItemsPerRow = 4; +function usePrevious(value) { + const ref = useRef(); + useEffect(() => { + ref.current = value; + }); + return ref.current; +} + /** * Just refactoring from the toolbox component to make it more readable */ @@ -18,6 +26,27 @@ function ToolboxUI(props) { useCollapsedPanel = true, } = props; + const prevToolOptions = usePrevious(activeToolOptions); + + useEffect(() => { + if (!activeToolOptions) { + return; + } + + activeToolOptions.forEach((option, index) => { + const prevOption = prevToolOptions ? prevToolOptions[index] : undefined; + if (!prevOption || option.value !== prevOption.value) { + const isOptionValid = option.condition + ? option.condition({ options: activeToolOptions }) + : true; + if (isOptionValid) { + const { commands } = option; + commands(option.value); + } + } + }); + }, [activeToolOptions]); + const render = () => { return ( <> @@ -34,7 +63,8 @@ function ToolboxUI(props) { const toolClasses = `ml-1 ${isLastRow ? '' : 'mb-2'}`; const onInteraction = ({ itemId, id, commands }) => { - handleToolSelect(itemId || id); + const idToUse = itemId || id; + handleToolSelect(idToUse); props.onInteraction({ itemId, commands, diff --git a/platform/ui/src/components/Tooltip/Tooltip.tsx b/platform/ui/src/components/Tooltip/Tooltip.tsx index 88f5f5ee5..630814cdc 100644 --- a/platform/ui/src/components/Tooltip/Tooltip.tsx +++ b/platform/ui/src/components/Tooltip/Tooltip.tsx @@ -78,6 +78,13 @@ const Tooltip = ({ handleMouseOutDebounced(); }; + useEffect(() => { + return () => { + handleMouseOverDebounced.cancel(); + handleMouseOutDebounced.cancel(); + }; + }, [handleMouseOverDebounced, handleMouseOutDebounced]); + useEffect(() => { if (!isOpen && onHide) { onHide(); diff --git a/yarn.lock b/yarn.lock index 58add2869..c6343a1a7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1497,13 +1497,13 @@ resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9" integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== -"@cornerstonejs/adapters@^1.70.13": - version "1.70.13" - resolved "https://registry.yarnpkg.com/@cornerstonejs/adapters/-/adapters-1.70.13.tgz#195023f5600272f6ee70090b3c61060d13b9cec7" - integrity sha512-PSitPx/A5aP0VhVTC72trwf3CfVGAXYvcAfAvuk3WzSONhCJ6cg5Xsxpl0NtEt7prsT3u60Bgr94Ea+9VJVdog== +"@cornerstonejs/adapters@^1.70.14": + version "1.70.14" + resolved "https://registry.yarnpkg.com/@cornerstonejs/adapters/-/adapters-1.70.14.tgz#1eba07366a66f4d261f3a1e3769260ccf74660af" + integrity sha512-jqMIpvqDH1CPO6rPa7P9CtINOOinwfZpPU6UAuoV8zSJtwOpwViP0Xp9rx9smSmzCc3l3ZZcQ9Wq1DnuzpgPJw== dependencies: "@babel/runtime-corejs2" "^7.17.8" - "@cornerstonejs/tools" "^1.70.13" + "@cornerstonejs/tools" "^1.70.14" buffer "^6.0.3" dcmjs "^0.29.8" gl-matrix "^3.4.3" @@ -1550,45 +1550,45 @@ resolved "https://registry.yarnpkg.com/@cornerstonejs/codec-openjph/-/codec-openjph-2.4.5.tgz#8690b61a86fa53ef38a70eee9d665a79229517c0" integrity sha512-MZCUy8VG0VG5Nl1l58+g+kH3LujAzLYTfJqkwpWI2gjSrGXnP6lgwyy4GmPRZWVoS40/B1LDNALK905cNWm+sg== -"@cornerstonejs/core@^1.70.13": - version "1.70.13" - resolved "https://registry.yarnpkg.com/@cornerstonejs/core/-/core-1.70.13.tgz#a1976588b93461e2350866ecd761660ee1b74c8d" - integrity sha512-Bi+ErK6rHNx46CVQiUiw/00ipOWdy7EdyC4U0S30oiLE1Jz1PegIniVDogleXtO1jDkTkNnuWnPCoNhpUgNNuQ== +"@cornerstonejs/core@^1.70.14": + version "1.70.14" + resolved "https://registry.yarnpkg.com/@cornerstonejs/core/-/core-1.70.14.tgz#f19c9c3da793513b0f6163661f98c633a83ee2b9" + integrity sha512-DrhjlbtGiV9EyHUiGh2RhPzhFQWxZwDCqqkhxBOLl5QiUalByZNyZyN1OHtX0zOyIwVsFw58yvVKYX7s3bpqOw== dependencies: - "@kitware/vtk.js" "30.3.3" + "@kitware/vtk.js" "30.4.1" comlink "^4.4.1" detect-gpu "^5.0.22" gl-matrix "^3.4.3" lodash.clonedeep "4.5.0" -"@cornerstonejs/dicom-image-loader@^1.70.13": - version "1.70.13" - resolved "https://registry.yarnpkg.com/@cornerstonejs/dicom-image-loader/-/dicom-image-loader-1.70.13.tgz#cf2aea8b6e538b6f005106ef6401869abde226d2" - integrity sha512-PXe9/xmv5vq1raREL9qsD3Ci68pWwCpjVxmyIigpV7lOdtziivvMVNyNSDZCjexBpbsB5a0fKcZG4jl82Jz1HA== +"@cornerstonejs/dicom-image-loader@^1.70.14": + version "1.70.14" + resolved "https://registry.yarnpkg.com/@cornerstonejs/dicom-image-loader/-/dicom-image-loader-1.70.14.tgz#3f776bc92b627ec1a80aec0581ee40d06f1ff815" + integrity sha512-bpYf9s/jhTegxCrrgvvtfJoFDOltkEWAKxqaUjt01g7Z6lnkC6IUaH3XoMZy/0n4un28tTk3xVHF1vAw0upCig== dependencies: "@cornerstonejs/codec-charls" "^1.2.3" "@cornerstonejs/codec-libjpeg-turbo-8bit" "^1.2.2" "@cornerstonejs/codec-openjpeg" "^1.2.2" "@cornerstonejs/codec-openjph" "^2.4.5" - "@cornerstonejs/core" "^1.70.13" + "@cornerstonejs/core" "^1.70.14" dicom-parser "^1.8.9" pako "^2.0.4" uuid "^9.0.0" -"@cornerstonejs/streaming-image-volume-loader@^1.70.13": - version "1.70.13" - resolved "https://registry.yarnpkg.com/@cornerstonejs/streaming-image-volume-loader/-/streaming-image-volume-loader-1.70.13.tgz#77a3751ddc5ab17cff050007c7e3d7e0b8c58c13" - integrity sha512-Pd90y2JFbQ4LriRkkYXXvD3mhIWyiVdGDznhrJN/8ZC+4m5XusOlvOk2Ia/85e+WAgIUlHyDCgOuzewG8of+6w== +"@cornerstonejs/streaming-image-volume-loader@^1.70.14": + version "1.70.14" + resolved "https://registry.yarnpkg.com/@cornerstonejs/streaming-image-volume-loader/-/streaming-image-volume-loader-1.70.14.tgz#e46a4152f6b5ac9a1ce7079d765b8ce9bdcc91ef" + integrity sha512-yObvU8CB/2F0gLyeRzM5NIxNLQimNHEfJnXuv/EYNATq+wOeKWle3jfUm9xN/ZTiSp1MrBMaG7g26OlyIjEp4Q== dependencies: - "@cornerstonejs/core" "^1.70.13" + "@cornerstonejs/core" "^1.70.14" comlink "^4.4.1" -"@cornerstonejs/tools@^1.70.13": - version "1.70.13" - resolved "https://registry.yarnpkg.com/@cornerstonejs/tools/-/tools-1.70.13.tgz#fca6abc331841a2ac1a4403b5522cdcc6cacc708" - integrity sha512-Eza/4A2p51YPqZbvP6HwZC0yJCkogsda39aB+Eh5VTPQSqHn+VCBmZ9U9Qi9+0cpaye53A5OhjXAOoR6pZlqRQ== +"@cornerstonejs/tools@^1.70.14": + version "1.70.14" + resolved "https://registry.yarnpkg.com/@cornerstonejs/tools/-/tools-1.70.14.tgz#7083459c3e206c280cf728d44fe9f4ca09874d2b" + integrity sha512-NI4yLC9PNHwa2KO0DqjZET2vZz8VfW095m637gk5E5wojq3dvSJot7w4y+zTCiyaxXjUUoMzc0TJYmmqtdbWPg== dependencies: - "@cornerstonejs/core" "^1.70.13" + "@cornerstonejs/core" "^1.70.14" "@icr/polyseg-wasm" "0.4.0" "@types/offscreencanvas" "2019.7.3" comlink "^4.4.1" @@ -2844,10 +2844,10 @@ resolved "https://registry.yarnpkg.com/@juggle/resize-observer/-/resize-observer-3.4.0.tgz#08d6c5e20cf7e4cc02fd181c4b0c225cd31dbb60" integrity sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA== -"@kitware/vtk.js@30.3.3": - version "30.3.3" - resolved "https://registry.yarnpkg.com/@kitware/vtk.js/-/vtk.js-30.3.3.tgz#348e17fdc896c912eca7036f607d21ef6128bca1" - integrity sha512-es9I5LLlg+TpaIXk5aHSPzyI/YnCI4egHA1cbG98IP7t9W4KODUcJjyrXFAa7aSvfXZ8y2jhD9qrsaEnstEkJA== +"@kitware/vtk.js@30.4.1": + version "30.4.1" + resolved "https://registry.yarnpkg.com/@kitware/vtk.js/-/vtk.js-30.4.1.tgz#ce8a50012e56341d2d01708a32a2ac3afa675b67" + integrity sha512-jBJFm8AyWpJjNFFBadXyvBwegdD9M6WRdxmIb+x/MVpCyA5lEZSMemhiMn71oKsznaEe5Pjv2VDVJWmwK0vhUg== dependencies: "@babel/runtime" "7.22.11" "@types/webxr" "^0.5.5"