@ohif/app 3.7.0-beta.98 → 3.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (30) hide show
  1. package/dist/{202.bundle.96bbb4547a346fe3921f.js → 202.bundle.d3490836f71e001dd30f.js} +746 -19
  2. package/dist/{221.bundle.772f38088c3079c8035b.js → 221.bundle.a331e2a9a29f9599fd40.js} +70 -14
  3. package/dist/{236.bundle.197bab4e86815ec4ca4a.js → 236.bundle.b09ef6a3c16be7ad1d05.js} +2 -2
  4. package/dist/{342.bundle.1d55f37e9c918e0825ec.js → 342.bundle.3f9ebc45fdc6d6879adc.js} +40 -22
  5. package/dist/{359.bundle.fed8617ddfa6afa1328a.js → 359.bundle.aa2adce78c3935aa19c1.js} +1 -3
  6. package/dist/{370.bundle.1a6cbcbde7c8207d2864.js → 370.bundle.31f3d861d96bdd540dc7.js} +4 -4
  7. package/dist/{743.bundle.4bfe6e562ffb2c22708f.js → 743.bundle.489f7df3a089d4d374e1.js} +13 -0
  8. package/dist/{831.bundle.83658f62fcc769043605.js → 757.bundle.ec8301d8e70d2b990f65.js} +368 -1
  9. package/dist/{782.bundle.441460bad5d3665e8357.js → 788.bundle.b9dabaea41cb029360b1.js} +5 -305
  10. package/dist/{1.bundle.b1dc2af5a703ba3cb14b.js → 82.bundle.ec05d3de5ac5b0c577fe.js} +142 -111
  11. package/dist/{957.bundle.8c09a01840ab8aa32734.js → 957.bundle.9ea4506963ef8b2d84ba.js} +61 -51
  12. package/dist/app.bundle.css +1 -1
  13. package/dist/{app.bundle.56a25a631c0c24cd0ca7.js → app.bundle.dacb6768b481e9135f71.js} +149 -105
  14. package/dist/index.html +1 -1
  15. package/dist/sw.js +1 -1
  16. package/package.json +19 -18
  17. /package/dist/{12.bundle.13308b06fcc1666c266b.js → 12.bundle.b965cc54108a0b38a022.js} +0 -0
  18. /package/dist/{181.bundle.169383e9b1a0358b44e8.js → 181.bundle.ceb057236403bcb630ac.js} +0 -0
  19. /package/dist/{19.bundle.3a597d9f26991241e7fc.js → 19.bundle.d961845411cf4e95d27c.js} +0 -0
  20. /package/dist/{281.bundle.2ac8032b2e4370ee907b.js → 281.bundle.4f7c49673b5861436311.js} +0 -0
  21. /package/dist/{410.bundle.f697feb951e10d10802b.js → 410.bundle.12c1bc7cb765ef74d275.js} +0 -0
  22. /package/dist/{506.bundle.52619b4a87b149b12232.js → 506.bundle.311783d53e8d64b84280.js} +0 -0
  23. /package/dist/{613.bundle.20a09bdee6888011429d.js → 613.bundle.4359bc30c68b8f567140.js} +0 -0
  24. /package/dist/{663.bundle.2baa791ccd0f499c3bcb.js → 663.bundle.87300c41b902228496ec.js} +0 -0
  25. /package/dist/{687.bundle.853e30cdf7d7a189d19b.js → 687.bundle.a3caefcf2e55897bad75.js} +0 -0
  26. /package/dist/{774.bundle.7528cba56a1407357144.js → 774.bundle.4b2dc46a35012b898e1a.js} +0 -0
  27. /package/dist/{814.bundle.a766b5f4317cea6bef89.js → 814.bundle.a3d1fbc03a4a3ea3f23d.js} +0 -0
  28. /package/dist/{1.css → 82.css} +0 -0
  29. /package/dist/{822.bundle.0545d6dbb49515aa04ee.js → 822.bundle.891f2e57b1b7bc2f4cb4.js} +0 -0
  30. /package/dist/{99.bundle.48d8d120921b5135f9e7.js → 99.bundle.d77c8c0a957274c827da.js} +0 -0
@@ -642,8 +642,13 @@ function PanelSegmentation(_ref) {
642
642
  });
643
643
  }
644
644
  };
645
+ const onSegmentationDownloadRTSS = segmentationId => {
646
+ commandsManager.runCommand('downloadRTSS', {
647
+ segmentationId
648
+ });
649
+ };
645
650
  return /*#__PURE__*/react.createElement(react.Fragment, null, /*#__PURE__*/react.createElement("div", {
646
- className: "flex min-h-0 flex-auto select-none flex-col justify-between"
651
+ className: "ohif-scrollbar flex min-h-0 flex-auto select-none flex-col justify-between overflow-auto"
647
652
  }, /*#__PURE__*/react.createElement(ui_src/* SegmentationGroupTable */.cX, {
648
653
  title: t('Segmentations'),
649
654
  segmentations: segmentations,
@@ -653,6 +658,7 @@ function PanelSegmentation(_ref) {
653
658
  onSegmentationClick: onSegmentationClick,
654
659
  onSegmentationDelete: onSegmentationDelete,
655
660
  onSegmentationDownload: onSegmentationDownload,
661
+ onSegmentationDownloadRTSS: onSegmentationDownloadRTSS,
656
662
  storeSegmentation: storeSegmentation,
657
663
  onSegmentationEdit: onSegmentationEdit,
658
664
  onSegmentClick: onSegmentClick,
@@ -706,9 +712,9 @@ const TOOL_TYPES = {
706
712
  SPHERE_BRUSH: 'SphereBrush',
707
713
  CIRCULAR_ERASER: 'CircularEraser',
708
714
  SPHERE_ERASER: 'SphereEraser',
709
- CIRCLE_SCISSOR: 'CircleScissor',
710
- RECTANGLE_SCISSOR: 'RectangleScissor',
711
- SPHERE_SCISSOR: 'SphereScissor',
715
+ CIRCLE_SHAPE: 'CircleScissor',
716
+ RECTANGLE_SHAPE: 'RectangleScissor',
717
+ SPHERE_SHAPE: 'SphereScissor',
712
718
  THRESHOLD_CIRCULAR_BRUSH: 'ThresholdCircularBrush',
713
719
  THRESHOLD_SPHERE_BRUSH: 'ThresholdSphereBrush'
714
720
  };
@@ -727,7 +733,7 @@ const initialState = {
727
733
  mode: 'CircularEraser' // Can be 'CircularEraser' or 'SphereEraser'
728
734
  },
729
735
 
730
- Scissors: {
736
+ Shapes: {
731
737
  brushSize: 15,
732
738
  mode: 'CircleScissor' // E.g., 'CircleScissor', 'RectangleScissor', or 'SphereScissor'
733
739
  },
@@ -966,24 +972,24 @@ function SegmentationToolbox(_ref) {
966
972
  onChange: value => setToolActive(value)
967
973
  }]
968
974
  }, {
969
- name: 'Scissor',
970
- icon: 'icon-tool-scissor',
975
+ name: 'Shapes',
976
+ icon: 'icon-tool-shape',
971
977
  disabled: !toolsEnabled,
972
- active: state.activeTool === TOOL_TYPES.CIRCLE_SCISSOR || state.activeTool === TOOL_TYPES.RECTANGLE_SCISSOR || state.activeTool === TOOL_TYPES.SPHERE_SCISSOR,
973
- onClick: () => setToolActive(TOOL_TYPES.CIRCLE_SCISSOR),
978
+ active: state.activeTool === TOOL_TYPES.CIRCLE_SHAPE || state.activeTool === TOOL_TYPES.RECTANGLE_SHAPE || state.activeTool === TOOL_TYPES.SPHERE_SHAPE,
979
+ onClick: () => setToolActive(TOOL_TYPES.CIRCLE_SHAPE),
974
980
  options: [{
975
981
  name: 'Mode',
976
982
  type: 'radio',
977
- value: state.Scissors.mode,
978
- id: 'scissor-mode',
983
+ value: state.Shapes.mode,
984
+ id: 'shape-mode',
979
985
  values: [{
980
- value: TOOL_TYPES.CIRCLE_SCISSOR,
986
+ value: TOOL_TYPES.CIRCLE_SHAPE,
981
987
  label: 'Circle'
982
988
  }, {
983
- value: TOOL_TYPES.RECTANGLE_SCISSOR,
989
+ value: TOOL_TYPES.RECTANGLE_SHAPE,
984
990
  label: 'Rectangle'
985
991
  }, {
986
- value: TOOL_TYPES.SPHERE_SCISSOR,
992
+ value: TOOL_TYPES.SPHERE_SHAPE,
987
993
  label: 'Sphere'
988
994
  }],
989
995
  onChange: value => setToolActive(value)
@@ -1118,6 +1124,12 @@ const getPanelModule = _ref => {
1118
1124
  }];
1119
1125
  };
1120
1126
  /* harmony default export */ const src_getPanelModule = (getPanelModule);
1127
+ // EXTERNAL MODULE: ../../../node_modules/@kitware/vtk.js/Filters/General/ImageMarchingSquares.js + 2 modules
1128
+ var ImageMarchingSquares = __webpack_require__(49399);
1129
+ // EXTERNAL MODULE: ../../../node_modules/@kitware/vtk.js/Common/Core/DataArray.js
1130
+ var DataArray = __webpack_require__(54131);
1131
+ // EXTERNAL MODULE: ../../../node_modules/@kitware/vtk.js/Common/DataModel/ImageData.js + 2 modules
1132
+ var ImageData = __webpack_require__(96372);
1121
1133
  ;// CONCATENATED MODULE: ../../../extensions/cornerstone-dicom-seg/src/utils/hydrationUtils.ts
1122
1134
 
1123
1135
 
@@ -1287,6 +1299,12 @@ function getUpdatedViewportsForSegmentation(_ref3) {
1287
1299
 
1288
1300
 
1289
1301
 
1302
+
1303
+
1304
+
1305
+ const {
1306
+ datasetToBlob
1307
+ } = dcmjs_es["default"].data;
1290
1308
  const {
1291
1309
  Cornerstone3D: {
1292
1310
  Segmentation: {
@@ -1295,6 +1313,13 @@ const {
1295
1313
  }
1296
1314
  }
1297
1315
  } = adapters_es.adaptersSEG;
1316
+ const {
1317
+ Cornerstone3D: {
1318
+ RTSS: {
1319
+ generateRTSSFromSegmentations
1320
+ }
1321
+ }
1322
+ } = adapters_es.adaptersRT;
1298
1323
  const {
1299
1324
  downloadDICOMData
1300
1325
  } = adapters_es.helpers;
@@ -1608,6 +1633,34 @@ const commandsModule = _ref => {
1608
1633
  naturalizedReport.wadoRoot = dataSource.getConfig().wadoRoot;
1609
1634
  src.DicomMetadataStore.addInstances([naturalizedReport], true);
1610
1635
  return naturalizedReport;
1636
+ },
1637
+ /**
1638
+ * Converts segmentations into RTSS for download.
1639
+ * This sample function retrieves all segentations and passes to
1640
+ * cornerstone tool adapter to convert to DICOM RTSS format. It then
1641
+ * converts dataset to downloadable blob.
1642
+ *
1643
+ */
1644
+ downloadRTSS: _ref8 => {
1645
+ let {
1646
+ segmentationId
1647
+ } = _ref8;
1648
+ const segmentations = segmentationService.getSegmentation(segmentationId);
1649
+ const vtkUtils = {
1650
+ vtkImageMarchingSquares: ImageMarchingSquares/* default */.ZP,
1651
+ vtkDataArray: DataArray/* default */.ZP,
1652
+ vtkImageData: ImageData/* default */.ZP
1653
+ };
1654
+ const RTSS = generateRTSSFromSegmentations(segmentations, src.classes.MetadataProvider, src.DicomMetadataStore, esm.cache, dist_esm.Enums, vtkUtils);
1655
+ try {
1656
+ const reportBlob = datasetToBlob(RTSS);
1657
+
1658
+ //Create a URL for the binary.
1659
+ const objectUrl = URL.createObjectURL(reportBlob);
1660
+ window.location.assign(objectUrl);
1661
+ } catch (e) {
1662
+ console.warn(e);
1663
+ }
1611
1664
  }
1612
1665
  };
1613
1666
  const definitions = {
@@ -1631,6 +1684,9 @@ const commandsModule = _ref => {
1631
1684
  },
1632
1685
  storeSegmentation: {
1633
1686
  commandFn: actions.storeSegmentation
1687
+ },
1688
+ downloadRTSS: {
1689
+ commandFn: actions.downloadRTSS
1634
1690
  }
1635
1691
  };
1636
1692
  return {
@@ -1738,8 +1738,8 @@ function MicroscopyPanel(props) {
1738
1738
  displaySetService
1739
1739
  } = servicesManager.services;
1740
1740
  (0,react.useEffect)(() => {
1741
- const viewport = props.viewports[props.activeViewportId];
1742
- if (viewport.displaySetInstanceUIDs[0]) {
1741
+ const viewport = props.viewports.get(props.activeViewportId);
1742
+ if (viewport?.displaySetInstanceUIDs[0]) {
1743
1743
  const displaySet = displaySetService.getDisplaySetByUID(viewport.displaySetInstanceUIDs[0]);
1744
1744
  if (displaySet) {
1745
1745
  setStudyInstanceUID(displaySet.StudyInstanceUID);
@@ -12,7 +12,7 @@ __webpack_require__.d(__webpack_exports__, {
12
12
  ContextMenuController: () => (/* reexport */ ContextMenuController),
13
13
  CustomizableContextMenuTypes: () => (/* reexport */ types_namespaceObject),
14
14
  createReportAsync: () => (/* reexport */ Actions_createReportAsync),
15
- createReportDialogPrompt: () => (/* reexport */ createReportDialogPrompt),
15
+ createReportDialogPrompt: () => (/* reexport */ CreateReportDialogPrompt),
16
16
  "default": () => (/* binding */ default_src),
17
17
  dicomWebUtils: () => (/* reexport */ utils_namespaceObject),
18
18
  getStudiesForPatientByMRN: () => (/* reexport */ Panels_getStudiesForPatientByMRN)
@@ -831,7 +831,7 @@ class StaticWadoClient extends dicomweb_client_es.api.DICOMwebClient {
831
831
  if (!valueElem) {
832
832
  return false;
833
833
  }
834
- if (valueElem.vr == 'DA') {
834
+ if (valueElem.vr === 'DA' && valueElem.Value?.[0]) {
835
835
  return this.compareDateRange(testValue, valueElem.Value[0]);
836
836
  }
837
837
  const value = valueElem.Value;
@@ -2166,8 +2166,8 @@ function ViewerHeader(_ref) {
2166
2166
  hotkeyDefinitions,
2167
2167
  hotkeyDefaults
2168
2168
  } = hotkeysManager;
2169
- const versionNumber = "3.7.0-beta.98";
2170
- const commitHash = "ebe8f71da22c1d24b58f889c5d803951e19817b6";
2169
+ const versionNumber = "3.7.0";
2170
+ const commitHash = "5ddf8a16027255d28dc01c1740099cf85bbcf458";
2171
2171
  const menuOptions = [{
2172
2172
  title: t('Header:About'),
2173
2173
  icon: 'info',
@@ -2508,7 +2508,6 @@ function PanelStudyBrowser(_ref) {
2508
2508
  const [studyDisplayList, setStudyDisplayList] = (0,react.useState)([]);
2509
2509
  const [displaySets, setDisplaySets] = (0,react.useState)([]);
2510
2510
  const [thumbnailImageSrcMap, setThumbnailImageSrcMap] = (0,react.useState)({});
2511
- const isMounted = (0,react.useRef)(true);
2512
2511
  const onDoubleClickThumbnailHandler = displaySetInstanceUID => {
2513
2512
  let updatedViewports = [];
2514
2513
  const viewportId = activeViewportId;
@@ -2585,9 +2584,6 @@ function PanelStudyBrowser(_ref) {
2585
2584
  }
2586
2585
  // When the image arrives, render it and store the result in the thumbnailImgSrcMap
2587
2586
  newImageSrcEntry[dSet.displaySetInstanceUID] = await getImageSrc(imageId);
2588
- if (!isMounted.current) {
2589
- return;
2590
- }
2591
2587
  setThumbnailImageSrcMap(prevState => {
2592
2588
  return {
2593
2589
  ...prevState,
@@ -2595,9 +2591,6 @@ function PanelStudyBrowser(_ref) {
2595
2591
  };
2596
2592
  });
2597
2593
  });
2598
- return () => {
2599
- isMounted.current = false;
2600
- };
2601
2594
  }, [StudyInstanceUIDs, dataSource, displaySetService, getImageSrc]);
2602
2595
 
2603
2596
  // ~~ displaySets
@@ -2944,14 +2937,13 @@ ActionButtons.defaultProps = {
2944
2937
  var lodash_debounce = __webpack_require__(8324);
2945
2938
  var lodash_debounce_default = /*#__PURE__*/__webpack_require__.n(lodash_debounce);
2946
2939
  ;// CONCATENATED MODULE: ../../../extensions/default/src/Panels/createReportDialogPrompt.tsx
2947
- /* eslint-disable react/display-name */
2948
2940
 
2949
2941
 
2950
2942
  const CREATE_REPORT_DIALOG_RESPONSE = {
2951
2943
  CANCEL: 0,
2952
2944
  CREATE_REPORT: 1
2953
2945
  };
2954
- function createReportDialogPrompt(uiDialogService, _ref) {
2946
+ function CreateReportDialogPrompt(uiDialogService, _ref) {
2955
2947
  let {
2956
2948
  extensionManager
2957
2949
  } = _ref;
@@ -3059,9 +3051,11 @@ function createReportDialogPrompt(uiDialogService, _ref) {
3059
3051
  });
3060
3052
  }
3061
3053
  };
3062
- return /*#__PURE__*/react.createElement(react.Fragment, null, dataSourcesOpts.length > 1 && /*#__PURE__*/react.createElement(ui_src/* Select */.Ph, {
3054
+ return /*#__PURE__*/react.createElement(react.Fragment, null, dataSourcesOpts.length > 1 && window.config?.allowMultiSelectExport && /*#__PURE__*/react.createElement("div", null, /*#__PURE__*/react.createElement("label", {
3055
+ className: "text-[14px] leading-[1.2] text-white"
3056
+ }, "Data Source"), /*#__PURE__*/react.createElement(ui_src/* Select */.Ph, {
3063
3057
  closeMenuOnSelect: true,
3064
- className: "border-primary-main mr-2 bg-black",
3058
+ className: "border-primary-main mt-2 bg-black",
3065
3059
  options: dataSourcesOpts,
3066
3060
  placeholder: dataSourcesOpts.find(option => option.value === value.dataSourceName).placeHolder,
3067
3061
  value: value.dataSourceName,
@@ -3072,7 +3066,9 @@ function createReportDialogPrompt(uiDialogService, _ref) {
3072
3066
  }));
3073
3067
  },
3074
3068
  isClearable: false
3075
- }), /*#__PURE__*/react.createElement(ui_src/* Input */.II, {
3069
+ })), /*#__PURE__*/react.createElement("div", {
3070
+ className: "mt-3"
3071
+ }, /*#__PURE__*/react.createElement(ui_src/* Input */.II, {
3076
3072
  autoFocus: true,
3077
3073
  label: "Enter the report name",
3078
3074
  labelClassName: "text-white text-[14px] leading-[1.2]",
@@ -3082,7 +3078,7 @@ function createReportDialogPrompt(uiDialogService, _ref) {
3082
3078
  onChange: onChangeHandler,
3083
3079
  onKeyPress: onKeyPressHandler,
3084
3080
  required: true
3085
- }));
3081
+ })));
3086
3082
  }
3087
3083
  }
3088
3084
  });
@@ -3279,7 +3275,7 @@ function PanelMeasurementTable(_ref) {
3279
3275
  });
3280
3276
  return;
3281
3277
  }
3282
- const promptResult = await createReportDialogPrompt(uiDialogService, {
3278
+ const promptResult = await CreateReportDialogPrompt(uiDialogService, {
3283
3279
  extensionManager
3284
3280
  });
3285
3281
  if (promptResult.action === CREATE_REPORT_DIALOG_RESPONSE.CREATE_REPORT) {
@@ -3801,11 +3797,11 @@ function checkSingleFrames(instances, messages) {
3801
3797
  */
3802
3798
  function getDisplaySetMessages(instances, isReconstructable) {
3803
3799
  const messages = new src/* DisplaySetMessageList */.iK();
3804
- const firstInstance = instances[0];
3805
- if (!instances.length || firstInstance) {
3800
+ if (!instances.length) {
3806
3801
  messages.addMessage(src/* DisplaySetMessage */.Lt.CODES.NO_VALID_INSTANCES);
3807
3802
  return;
3808
3803
  }
3804
+ const firstInstance = instances[0];
3809
3805
  const {
3810
3806
  Modality,
3811
3807
  ImageType,
@@ -5570,6 +5566,7 @@ const commandsModule = _ref => {
5570
5566
  stageIndex,
5571
5567
  reset = false
5572
5568
  } = _ref3;
5569
+ const primaryToolBeforeHPChange = toolbarService.getActivePrimaryTool();
5573
5570
  try {
5574
5571
  // Stores in the state the display set selector id to displaySetUID mapping
5575
5572
  // Pass in viewportId for the active viewport. This item will get set as
@@ -5632,7 +5629,27 @@ const commandsModule = _ref => {
5632
5629
  const {
5633
5630
  protocol
5634
5631
  } = hangingProtocolService.getActiveProtocol();
5635
- actions.toggleHpTools(protocol);
5632
+ actions.toggleHpTools();
5633
+
5634
+ // try to use the same tool in the new hanging protocol stage
5635
+ const primaryButton = toolbarService.getButton(primaryToolBeforeHPChange);
5636
+ if (primaryButton) {
5637
+ // is there any type of interaction on this button, if not it might be in the
5638
+ // items. This is a bit of a hack, but it works for now.
5639
+
5640
+ let interactionType = primaryButton.props?.interactionType;
5641
+ if (!interactionType && primaryButton.props?.items) {
5642
+ const firstItem = primaryButton.props.items[0];
5643
+ interactionType = firstItem.props?.interactionType || firstItem.props?.type;
5644
+ }
5645
+ if (interactionType) {
5646
+ toolbarService.recordInteraction({
5647
+ interactionType,
5648
+ ...primaryButton.props
5649
+ });
5650
+ }
5651
+ }
5652
+
5636
5653
  // Send the notification about updating the state
5637
5654
  if (protocolId !== hpInfo.protocolId) {
5638
5655
  // The old protocol callbacks are used for turning off things
@@ -5645,7 +5662,8 @@ const commandsModule = _ref => {
5645
5662
  commandsManager.run(protocol.callbacks?.onProtocolEnter);
5646
5663
  return true;
5647
5664
  } catch (e) {
5648
- actions.toggleHpTools(hangingProtocolService.getActiveProtocol());
5665
+ console.error(e);
5666
+ actions.toggleHpTools();
5649
5667
  uiNotificationService.show({
5650
5668
  title: 'Apply Hanging Protocol',
5651
5669
  message: 'The hanging protocol could not be applied.',
@@ -236,9 +236,7 @@ const toolbarButtons = [
236
236
  // toolGroupIds.MPR,
237
237
  ])], 'Arrow Annotate'), _createToolButton('EllipticalROI', 'tool-elipse', 'Ellipse', [..._createCommands('setToolActive', 'EllipticalROI', [toolGroupIds.CT, toolGroupIds.PT, toolGroupIds.Fusion
238
238
  // toolGroupIds.MPR,
239
- ])], 'Ellipse Tool'), _createToolButton('CircleROI', 'tool-circle', 'Circle', [..._createCommands('setToolActive', 'CircleROI', [toolGroupIds.CT, toolGroupIds.PT, toolGroupIds.Fusion
240
- // toolGroupIds.MPR,
241
- ])], 'Circle Tool')]
239
+ ])], 'Ellipse Tool')]
242
240
  }
243
241
  },
244
242
  // Zoom..
@@ -709,7 +709,7 @@ const dicomSeg = {
709
709
  viewport: '@ohif/extension-cornerstone-dicom-seg.viewportModule.dicom-seg',
710
710
  panel: '@ohif/extension-cornerstone-dicom-seg.panelModule.panelSegmentation'
711
711
  };
712
- const dicomRt = {
712
+ const dicomRT = {
713
713
  viewport: '@ohif/extension-cornerstone-dicom-rt.viewportModule.dicom-rt',
714
714
  sopClassHandler: '@ohif/extension-cornerstone-dicom-rt.sopClassHandlerModule.dicom-rt'
715
715
  };
@@ -869,8 +869,8 @@ function modeFactory(_ref) {
869
869
  namespace: dicomSeg.viewport,
870
870
  displaySetsToDisplay: [dicomSeg.sopClassHandler]
871
871
  }, {
872
- namespace: dicomRt.viewport,
873
- displaySetsToDisplay: [dicomRt.sopClassHandler]
872
+ namespace: dicomRT.viewport,
873
+ displaySetsToDisplay: [dicomRT.sopClassHandler]
874
874
  }]
875
875
  }
876
876
  };
@@ -883,7 +883,7 @@ function modeFactory(_ref) {
883
883
  // the same sop class under different situations. In that case, the more
884
884
  // general handler needs to come last. For this case, the dicomvideo must
885
885
  // come first to remove video transfer syntax before ohif uses images
886
- sopClassHandlers: [dicomvideo.sopClassHandler, dicomSeg.sopClassHandler, ohif.sopClassHandler, dicompdf.sopClassHandler, dicomsr.sopClassHandler, dicomRt.sopClassHandler],
886
+ sopClassHandlers: [dicomvideo.sopClassHandler, dicomSeg.sopClassHandler, ohif.sopClassHandler, dicompdf.sopClassHandler, dicomsr.sopClassHandler, dicomRT.sopClassHandler],
887
887
  hotkeys: [...src/* hotkeys */.dD.defaults.hotkeyBindings],
888
888
  ...modeConfiguration
889
889
  };
@@ -45257,6 +45257,19 @@ class VolumeViewport extends RenderingEngine_BaseVolumeViewport {
45257
45257
  throw new Error(`imageVolume with id: ${volumeActor.uid} does not exist in cache`);
45258
45258
  }
45259
45259
  helpers_setDefaultVolumeVOI(volumeActor.actor, imageVolume, false);
45260
+ const range = volumeActor.actor
45261
+ .getProperty()
45262
+ .getRGBTransferFunction(0)
45263
+ .getMappingRange();
45264
+ const eventDetails = {
45265
+ viewportId: volumeActor.uid,
45266
+ range: {
45267
+ lower: range[0],
45268
+ upper: range[1],
45269
+ },
45270
+ volumeId: volumeActor.uid,
45271
+ };
45272
+ triggerEvent(this.element, enums_Events.VOI_MODIFIED, eventDetails);
45260
45273
  }
45261
45274
  }
45262
45275
  /* harmony default export */ const RenderingEngine_VolumeViewport = (VolumeViewport);