@ohif/app 3.10.0-beta.49 → 3.10.0-beta.50

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 (27) hide show
  1. package/dist/{2701.bundle.73e7a3868eb8129f8b26.js → 2701.bundle.975ea2c092e8a9bafc08.js} +2 -2
  2. package/dist/{3198.bundle.acadb51a25eb09736174.js → 3198.bundle.1e761efcd3be532bf9f1.js} +4 -4
  3. package/dist/{3200.bundle.592919f1b9e70f2198d6.js → 3200.bundle.d1a87a32c0262eef9058.js} +17 -66
  4. package/dist/{3902.bundle.992b37d3579581ef0c39.js → 3902.bundle.c981b02ab22314cff6f2.js} +2 -2
  5. package/dist/{4438.bundle.3d088788b388591f0902.js → 4438.bundle.d9074dd5f3aab7db3ce8.js} +2 -2
  6. package/dist/{5139.bundle.d522d00391b70d51c27a.js → 5139.bundle.63ac35c5492c3dbf3e85.js} +2 -2
  7. package/dist/{5770.bundle.a9ad76fccd0a92cc3b00.js → 5770.bundle.0d5155b552fe4a6c0ab6.js} +26 -5
  8. package/dist/{1185.bundle.b88f2d881526bb3b5a09.js → 6925.bundle.bdac750e27c461057834.js} +160 -88
  9. package/dist/{7013.bundle.086a3c1a64f7d878278b.js → 7013.bundle.e71d3ddacf0800ac6a6a.js} +2 -2
  10. package/dist/{7197.bundle.839bbfdb8ff27e7f003d.js → 7197.bundle.94da37a9754c9b562bac.js} +1 -1
  11. package/dist/{8259.bundle.1164206184afffb30ab6.js → 8259.bundle.e915ac764025f96eeab9.js} +5 -4
  12. package/dist/{8558.bundle.05c3bd6f13406f19950c.js → 8558.bundle.84544dd23767ae676866.js} +1 -1
  13. package/dist/{8797.bundle.974eecc38d0c7f31f84d.js → 8797.bundle.3048e946ebb4c743d7dc.js} +13 -35
  14. package/dist/{app.bundle.ec240936d31697104ace.js → app.bundle.5551b0a2a9f90970db0b.js} +183 -32
  15. package/dist/index.html +1 -1
  16. package/dist/sw.js +1 -1
  17. package/package.json +18 -18
  18. /package/dist/{1266.bundle.d1513a4a56493f9ac81b.js → 1266.bundle.30bf2f30665ce9ed0fa1.js} +0 -0
  19. /package/dist/{1374.bundle.ff1cca15a364da5496dd.js → 1374.bundle.a5fee7ee74c94fd58869.js} +0 -0
  20. /package/dist/{213.bundle.6673409b5b58307a43bb.js → 213.bundle.7b4023d25ca62297ac57.js} +0 -0
  21. /package/dist/{2424.bundle.aed6d45e38efe6a2d996.js → 2424.bundle.8965c65d23fe6d8c055c.js} +0 -0
  22. /package/dist/{2825.bundle.7228e47ee955e397ae8f.js → 2825.bundle.edf67f859b5bb79564f8.js} +0 -0
  23. /package/dist/{4834.bundle.63f3c25bc5d64a220ec6.js → 4834.bundle.09e750b2ab6e52cb7edd.js} +0 -0
  24. /package/dist/{5247.bundle.0afd471ced42e29feae9.js → 5247.bundle.050a87b7bf93f90f4ab4.js} +0 -0
  25. /package/dist/{7955.bundle.2997c4bbf49f7edbe836.js → 7955.bundle.3c479725f2d0ed3c7b46.js} +0 -0
  26. /package/dist/{8008.bundle.84ae34798ca9be14f93d.js → 8008.bundle.a462e4932eeb9efffc81.js} +0 -0
  27. /package/dist/{9551.bundle.94218541377ddb89bd8f.js → 9551.bundle.8c05536c4b2a3eefda8f.js} +0 -0
@@ -27,8 +27,8 @@ var dicomSRModule = __webpack_require__(76654);
27
27
  var ui_src = __webpack_require__(32907);
28
28
  // EXTERNAL MODULE: ../../../extensions/cornerstone-dicom-sr/src/utils/createReferencedImageDisplaySet.ts
29
29
  var createReferencedImageDisplaySet = __webpack_require__(92643);
30
- // EXTERNAL MODULE: ../../../extensions/cornerstone/src/index.tsx + 105 modules
31
- var cornerstone_src = __webpack_require__(11185);
30
+ // EXTERNAL MODULE: ../../../extensions/cornerstone/src/index.tsx + 106 modules
31
+ var cornerstone_src = __webpack_require__(56925);
32
32
  // EXTERNAL MODULE: ../../ui-next/src/index.ts + 2619 modules
33
33
  var ui_next_src = __webpack_require__(54609);
34
34
  ;// CONCATENATED MODULE: ../../../extensions/cornerstone-dicom-sr/src/components/OHIFCornerstoneSRMeasurementViewport.tsx
@@ -970,8 +970,8 @@ PanelPetSUV.propTypes = {
970
970
  }).isRequired
971
971
  }).isRequired
972
972
  };
973
- // EXTERNAL MODULE: ../../../extensions/cornerstone/src/index.tsx + 105 modules
974
- var cornerstone_src = __webpack_require__(11185);
973
+ // EXTERNAL MODULE: ../../../extensions/cornerstone/src/index.tsx + 106 modules
974
+ var cornerstone_src = __webpack_require__(56925);
975
975
  // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/index.js
976
976
  var esm = __webpack_require__(81985);
977
977
  ;// CONCATENATED MODULE: ../../../extensions/tmtv/src/utils/handleROIThresholding.ts
@@ -1060,8 +1060,8 @@ const handleROIThresholding = async ({
1060
1060
  segmentationService.addOrUpdateSegmentation(updatedSegmentation);
1061
1061
  });
1062
1062
  };
1063
- // EXTERNAL MODULE: ../../core/src/utils/index.ts + 29 modules
1064
- var utils = __webpack_require__(37415);
1063
+ // EXTERNAL MODULE: ../../core/src/utils/index.ts + 30 modules
1064
+ var utils = __webpack_require__(51650);
1065
1065
  ;// CONCATENATED MODULE: ../../../extensions/tmtv/src/Panels/PanelROIThresholdSegmentation/PanelROIThresholdExport.tsx
1066
1066
 
1067
1067
 
@@ -1895,8 +1895,8 @@ WrappedPanelStudyBrowserTracking.propTypes = {
1895
1895
  servicesManager: (prop_types_default()).object.isRequired
1896
1896
  };
1897
1897
  /* harmony default export */ const panels_PanelStudyBrowserTracking = (WrappedPanelStudyBrowserTracking);
1898
- // EXTERNAL MODULE: ../../../extensions/cornerstone/src/index.tsx + 105 modules
1899
- var cornerstone_src = __webpack_require__(11185);
1898
+ // EXTERNAL MODULE: ../../../extensions/cornerstone/src/index.tsx + 106 modules
1899
+ var cornerstone_src = __webpack_require__(56925);
1900
1900
  ;// CONCATENATED MODULE: ../../../extensions/measurement-tracking/src/panels/PanelMeasurementTableTracking.tsx
1901
1901
 
1902
1902
 
@@ -1904,21 +1904,12 @@ var cornerstone_src = __webpack_require__(11185);
1904
1904
 
1905
1905
 
1906
1906
 
1907
-
1908
-
1909
1907
  const {
1910
- downloadCSVReport,
1911
- formatDate: PanelMeasurementTableTracking_formatDate
1912
- } = src/* utils */.Wp;
1913
- const DISPLAY_STUDY_SUMMARY_INITIAL_VALUE = {
1914
- key: undefined,
1915
- //
1916
- date: '',
1917
- // '07-Sep-2010',
1918
- modality: '',
1919
- // 'CT',
1920
- description: '' // 'CHEST/ABD/PELVIS W CONTRAST',
1921
- };
1908
+ filterAnd,
1909
+ filterPlanarMeasurement,
1910
+ filterAny,
1911
+ filterMeasurementsBySeriesUID
1912
+ } = src/* utils */.Wp.MeasurementFilters;
1922
1913
  function PanelMeasurementTableTracking({
1923
1914
  servicesManager,
1924
1915
  extensionManager,
@@ -1926,10 +1917,6 @@ function PanelMeasurementTableTracking({
1926
1917
  }) {
1927
1918
  const [viewportGrid] = (0,ui_next_src/* useViewportGrid */.ih)();
1928
1919
  const {
1929
- t
1930
- } = (0,es/* useTranslation */.Bd)('MeasurementTable');
1931
- const {
1932
- measurementService,
1933
1920
  customizationService
1934
1921
  } = servicesManager.services;
1935
1922
  const [trackedMeasurements, sendTrackedMeasurementsEvent] = (0,getContextModule/* useTrackedMeasurements */.B)();
@@ -1937,58 +1924,20 @@ function PanelMeasurementTableTracking({
1937
1924
  trackedStudy,
1938
1925
  trackedSeries
1939
1926
  } = trackedMeasurements.context;
1940
- const [displayStudySummary, setDisplayStudySummary] = (0,react.useState)(DISPLAY_STUDY_SUMMARY_INITIAL_VALUE);
1941
- (0,react.useEffect)(() => {
1942
- const updateDisplayStudySummary = async () => {
1943
- if (trackedMeasurements.matches('tracking') && trackedStudy) {
1944
- const studyMeta = src/* DicomMetadataStore */.H8.getStudy(trackedStudy);
1945
- if (!studyMeta || !studyMeta.series || studyMeta.series.length === 0) {
1946
- console.debug('Study metadata not available');
1947
- return;
1948
- }
1949
- const instanceMeta = studyMeta.series[0].instances[0];
1950
- const {
1951
- StudyDate,
1952
- StudyDescription
1953
- } = instanceMeta;
1954
- const modalities = new Set();
1955
- studyMeta.series.forEach(series => {
1956
- if (trackedSeries.includes(series.SeriesInstanceUID)) {
1957
- modalities.add(series.instances[0].Modality);
1958
- }
1959
- });
1960
- const modality = Array.from(modalities).join('/');
1961
- setDisplayStudySummary(prevSummary => {
1962
- if (prevSummary.key !== trackedStudy) {
1963
- return {
1964
- key: trackedStudy,
1965
- date: StudyDate,
1966
- modality,
1967
- description: StudyDescription
1968
- };
1969
- }
1970
- return prevSummary;
1971
- });
1972
- } else if (!trackedStudy) {
1973
- setDisplayStudySummary(DISPLAY_STUDY_SUMMARY_INITIAL_VALUE);
1974
- }
1975
- };
1976
- updateDisplayStudySummary();
1977
- }, [trackedMeasurements, trackedStudy, trackedSeries]);
1927
+ const measurementFilter = trackedStudy ? filterAnd(filterPlanarMeasurement, filterMeasurementsBySeriesUID(trackedSeries)) : filterPlanarMeasurement;
1978
1928
  const {
1979
1929
  disableEditing
1980
1930
  } = customizationService.getCustomization('PanelMeasurement.disableEditing', {
1981
1931
  id: 'default.disableEditing',
1982
1932
  disableEditing: false
1983
1933
  });
1984
- return /*#__PURE__*/react.createElement(react.Fragment, null, displayStudySummary.key && /*#__PURE__*/react.createElement(ui_next_src/* StudySummary */.u3, {
1985
- date: PanelMeasurementTableTracking_formatDate(displayStudySummary.date),
1986
- description: displayStudySummary.description
1934
+ return /*#__PURE__*/react.createElement(react.Fragment, null, /*#__PURE__*/react.createElement(cornerstone_src.StudySummaryFromMetadata, {
1935
+ StudyInstanceUID: trackedStudy
1987
1936
  }), /*#__PURE__*/react.createElement(cornerstone_src.PanelMeasurement, {
1988
1937
  servicesManager: servicesManager,
1989
1938
  extensionManager: extensionManager,
1990
1939
  commandsManager: commandsManager,
1991
- measurementFilter: measurement => trackedStudy === measurement.referenceStudyUID && trackedSeries.includes(measurement.referenceSeriesUID),
1940
+ measurementFilter: measurementFilter,
1992
1941
  customHeader: ({
1993
1942
  additionalFindings,
1994
1943
  measurements
@@ -2006,9 +1955,9 @@ function PanelMeasurementTableTracking({
2006
1955
  variant: "ghost",
2007
1956
  className: "pl-1.5",
2008
1957
  onClick: () => {
2009
- const measurements = measurementService.getMeasurements();
2010
- const trackedMeasurements = measurements.filter(m => trackedStudy === m.referenceStudyUID && trackedSeries.includes(m.referenceSeriesUID));
2011
- downloadCSVReport(trackedMeasurements);
1958
+ commandsManager.runCommand('downloadCSVMeasurementsReport', {
1959
+ measurementFilter
1960
+ });
2012
1961
  }
2013
1962
  }, /*#__PURE__*/react.createElement(ui_next_src/* Icons */.FI.Download, {
2014
1963
  className: "h-5 w-5"
@@ -2029,7 +1978,9 @@ function PanelMeasurementTableTracking({
2029
1978
  variant: "ghost",
2030
1979
  className: "pl-0.5",
2031
1980
  onClick: () => {
2032
- measurementService.clearMeasurements();
1981
+ commandsManager.runCommand('clearMeasurements', {
1982
+ measurementFilter
1983
+ });
2033
1984
  }
2034
1985
  }, /*#__PURE__*/react.createElement(ui_next_src/* Icons */.FI.Delete, null), "Delete All")));
2035
1986
  }
@@ -146,8 +146,8 @@ function _getStatusComponent({
146
146
  side: "bottom"
147
147
  }, /*#__PURE__*/react.createElement(ToolTipMessage, null))), !ToolTipMessage && /*#__PURE__*/react.createElement(StatusArea, null));
148
148
  }
149
- // EXTERNAL MODULE: ../../../extensions/cornerstone/src/index.tsx + 105 modules
150
- var cornerstone_src = __webpack_require__(11185);
149
+ // EXTERNAL MODULE: ../../../extensions/cornerstone/src/index.tsx + 106 modules
150
+ var cornerstone_src = __webpack_require__(56925);
151
151
  // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/tools/dist/esm/enums/index.js + 2 modules
152
152
  var enums = __webpack_require__(99737);
153
153
  ;// CONCATENATED MODULE: ../../../extensions/cornerstone-dicom-seg/src/viewports/OHIFCornerstoneSEGViewport.tsx
@@ -149,8 +149,8 @@ function createRTToolGroupAndAddTools(ToolGroupService, customizationService, to
149
149
  return ToolGroupService.createToolGroupAndAddTools(toolGroupId, tools);
150
150
  }
151
151
  /* harmony default export */ const initRTToolGroup = (createRTToolGroupAndAddTools);
152
- // EXTERNAL MODULE: ../../../extensions/cornerstone/src/index.tsx + 105 modules
153
- var cornerstone_src = __webpack_require__(11185);
152
+ // EXTERNAL MODULE: ../../../extensions/cornerstone/src/index.tsx + 106 modules
153
+ var cornerstone_src = __webpack_require__(56925);
154
154
  ;// CONCATENATED MODULE: ../../../extensions/cornerstone-dicom-rt/src/viewports/OHIFCornerstoneRTViewport.tsx
155
155
  function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
156
156
 
@@ -28,8 +28,8 @@ var src = __webpack_require__(29463);
28
28
  var esm = __webpack_require__(81985);
29
29
  // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/adapters/dist/esm/index.js + 62 modules
30
30
  var dist_esm = __webpack_require__(4904);
31
- // EXTERNAL MODULE: ../../../extensions/cornerstone/src/index.tsx + 105 modules
32
- var cornerstone_src = __webpack_require__(11185);
31
+ // EXTERNAL MODULE: ../../../extensions/cornerstone/src/index.tsx + 106 modules
32
+ var cornerstone_src = __webpack_require__(56925);
33
33
  ;// CONCATENATED MODULE: ../../../extensions/cornerstone-dicom-pmap/src/getSopClassHandlerModule.ts
34
34
 
35
35
 
@@ -75,8 +75,8 @@ __webpack_require__.d(__webpack_exports__, {
75
75
  var react = __webpack_require__(86326);
76
76
  // EXTERNAL MODULE: ../../core/src/index.ts + 71 modules
77
77
  var src = __webpack_require__(29463);
78
- // EXTERNAL MODULE: ../../../extensions/cornerstone/src/index.tsx + 105 modules
79
- var cornerstone_src = __webpack_require__(11185);
78
+ // EXTERNAL MODULE: ../../../extensions/cornerstone/src/index.tsx + 106 modules
79
+ var cornerstone_src = __webpack_require__(56925);
80
80
  // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/adapters/dist/esm/index.js + 62 modules
81
81
  var esm = __webpack_require__(4904);
82
82
  // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/tools/dist/esm/index.js + 94 modules
@@ -1447,7 +1447,6 @@ const {
1447
1447
  } = src/* default */.Ay;
1448
1448
 
1449
1449
  /**
1450
- *
1451
1450
  * @param measurementData An array of measurements from the measurements service
1452
1451
  * that you wish to serialize.
1453
1452
  * @param additionalFindingTypes toolTypes that should be stored with labels as Findings
@@ -1476,10 +1475,32 @@ const commandsModule = props => {
1476
1475
  } = props;
1477
1476
  const {
1478
1477
  customizationService,
1479
- displaySetService,
1480
- viewportGridService
1478
+ measurementService,
1479
+ viewportGridService,
1480
+ uiDialogService
1481
1481
  } = servicesManager.services;
1482
1482
  const actions = {
1483
+ changeColorMeasurement: ({
1484
+ uid
1485
+ }) => {
1486
+ // When this gets supported, it probably belongs in cornerstone, not sr
1487
+ throw new Error('Unsupported operation: changeColorMeasurement');
1488
+ // const { color } = measurementService.getMeasurement(uid);
1489
+ // const rgbaColor = {
1490
+ // r: color[0],
1491
+ // g: color[1],
1492
+ // b: color[2],
1493
+ // a: color[3] / 255.0,
1494
+ // };
1495
+ // colorPickerDialog(uiDialogService, rgbaColor, (newRgbaColor, actionId) => {
1496
+ // if (actionId === 'cancel') {
1497
+ // return;
1498
+ // }
1499
+
1500
+ // const color = [newRgbaColor.r, newRgbaColor.g, newRgbaColor.b, newRgbaColor.a * 255.0];
1501
+ // segmentationService.setSegmentColor(viewportId, segmentationId, segmentIndex, color);
1502
+ // });
1503
+ },
1483
1504
  /**
1484
1505
  *
1485
1506
  * @param measurementData An array of measurements from the measurements service
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
- (self["webpackChunk"] = self["webpackChunk"] || []).push([[1185],{
2
+ (self["webpackChunk"] = self["webpackChunk"] || []).push([[6925],{
3
3
 
4
4
  /***/ 5791:
5
5
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
@@ -747,7 +747,7 @@ const useViewportActionCornersContext = () => (0,react__WEBPACK_IMPORTED_MODULE_
747
747
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(86326);
748
748
  /* harmony import */ var lodash_debounce__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(62051);
749
749
  /* harmony import */ var lodash_debounce__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lodash_debounce__WEBPACK_IMPORTED_MODULE_1__);
750
- /* harmony import */ var _ohif_core_src_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(37415);
750
+ /* harmony import */ var _ohif_core_src_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(51650);
751
751
 
752
752
 
753
753
 
@@ -870,7 +870,7 @@ function useSegmentations({
870
870
 
871
871
  /***/ }),
872
872
 
873
- /***/ 11185:
873
+ /***/ 56925:
874
874
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
875
875
 
876
876
  // ESM COMPAT FLAG
@@ -881,8 +881,9 @@ __webpack_require__.d(__webpack_exports__, {
881
881
  DicomUpload: () => (/* reexport */ DicomUpload_DicomUpload),
882
882
  Enums: () => (/* reexport */ enums),
883
883
  ImageOverlayViewerTool: () => (/* reexport */ tools_ImageOverlayViewerTool),
884
- PanelMeasurement: () => (/* reexport */ PanelMeasurementTable),
884
+ PanelMeasurement: () => (/* reexport */ PanelMeasurement),
885
885
  PanelSegmentation: () => (/* reexport */ PanelSegmentation),
886
+ StudySummaryFromMetadata: () => (/* reexport */ StudySummaryFromMetadata),
886
887
  Types: () => (/* reexport */ types_namespaceObject),
887
888
  "default": () => (/* binding */ cornerstone_src),
888
889
  dicomLoaderService: () => (/* reexport */ utils_dicomLoaderService),
@@ -1106,8 +1107,8 @@ function onCompletedCalibrationLine(servicesManager, csToolsEvent) {
1106
1107
  });
1107
1108
  });
1108
1109
  }
1109
- // EXTERNAL MODULE: ../../core/src/utils/index.ts + 29 modules
1110
- var utils = __webpack_require__(37415);
1110
+ // EXTERNAL MODULE: ../../core/src/utils/index.ts + 30 modules
1111
+ var utils = __webpack_require__(51650);
1111
1112
  ;// CONCATENATED MODULE: ../../../extensions/cornerstone/src/tools/OverlayPlaneModuleProvider.ts
1112
1113
 
1113
1114
  const _cachedOverlayMetadata = new Map();
@@ -6683,6 +6684,7 @@ var useSynchronizersStore = __webpack_require__(68578);
6683
6684
 
6684
6685
 
6685
6686
 
6687
+
6686
6688
  const toggleSyncFunctions = {
6687
6689
  imageSlice: toggleImageSliceSync,
6688
6690
  voi: toggleVOISliceSync
@@ -6947,6 +6949,62 @@ function commandsModule({
6947
6949
  }
6948
6950
  measurementService.update(updatedMeasurement.uid, updatedMeasurement, true);
6949
6951
  },
6952
+ /**
6953
+ * Jumps to the specified (by uid) measurement in the active viewport.
6954
+ * Also marks any provided display measurements isActive value
6955
+ */
6956
+ jumpToMeasurement: ({
6957
+ uid,
6958
+ displayMeasurements = []
6959
+ }) => {
6960
+ measurementService.jumpToMeasurement(viewportGridService.getActiveViewportId(), uid);
6961
+ for (const measurement of displayMeasurements) {
6962
+ measurement.isActive = measurement.uid === uid;
6963
+ }
6964
+ },
6965
+ removeMeasurement: ({
6966
+ uid
6967
+ }) => {
6968
+ measurementService.remove(uid);
6969
+ },
6970
+ renameMeasurement: ({
6971
+ uid
6972
+ }) => {
6973
+ const labelConfig = customizationService.get('measurementLabels');
6974
+ const measurement = measurementService.getMeasurement(uid);
6975
+ (0,default_src.showLabelAnnotationPopup)(measurement, uiDialogService, labelConfig).then(val => {
6976
+ measurementService.update(uid, {
6977
+ ...val
6978
+ }, true);
6979
+ });
6980
+ },
6981
+ toggleLockMeasurement: ({
6982
+ uid
6983
+ }) => {
6984
+ measurementService.toggleLockMeasurement(uid);
6985
+ },
6986
+ toggleVisibilityMeasurement: ({
6987
+ uid
6988
+ }) => {
6989
+ measurementService.toggleVisibilityMeasurement(uid);
6990
+ },
6991
+ /**
6992
+ * Clear the measurements
6993
+ */
6994
+ clearMeasurements: options => {
6995
+ const {
6996
+ measurementFilter
6997
+ } = options;
6998
+ measurementService.clearMeasurements(measurementFilter ? measurementFilter.bind(options) : null);
6999
+ },
7000
+ /**
7001
+ * Download the CSV report for the measurements.
7002
+ */
7003
+ downloadCSVMeasurementsReport: ({
7004
+ measurementFilter
7005
+ }) => {
7006
+ src/* utils */.Wp.downloadCSVReport(measurementService.getMeasurements(measurementFilter));
7007
+ },
6950
7008
  // Retrieve value commands
6951
7009
  getActiveViewportEnabledElement: _getActiveViewportEnabledElement,
6952
7010
  setViewportActive: ({
@@ -8095,6 +8153,27 @@ function commandsModule({
8095
8153
  updateMeasurement: {
8096
8154
  commandFn: actions.updateMeasurement
8097
8155
  },
8156
+ clearMeasurements: {
8157
+ commandFn: actions.clearMeasurements
8158
+ },
8159
+ jumpToMeasurement: {
8160
+ commandFn: actions.jumpToMeasurement
8161
+ },
8162
+ removeMeasurement: {
8163
+ commandFn: actions.removeMeasurement
8164
+ },
8165
+ renameMeasurement: {
8166
+ commandFn: actions.renameMeasurement
8167
+ },
8168
+ toggleLockMeasurement: {
8169
+ commandFn: actions.toggleLockMeasurement
8170
+ },
8171
+ toggleVisibilityMeasurement: {
8172
+ commandFn: actions.toggleVisibilityMeasurement
8173
+ },
8174
+ downloadCSVMeasurementsReport: {
8175
+ commandFn: actions.downloadCSVMeasurementsReport
8176
+ },
8098
8177
  setViewportWindowLevel: {
8099
8178
  commandFn: actions.setViewportWindowLevel
8100
8179
  },
@@ -15277,10 +15356,7 @@ function useMeasurements(servicesManager, {
15277
15356
  const [displayMeasurements, setDisplayMeasurements] = (0,react.useState)([]);
15278
15357
  (0,react.useEffect)(() => {
15279
15358
  const updateDisplayMeasurements = () => {
15280
- let measurements = measurementService.getMeasurements();
15281
- if (measurementFilter) {
15282
- measurements = measurements.filter(measurementFilter);
15283
- }
15359
+ let measurements = measurementService.getMeasurements(measurementFilter);
15284
15360
  const mappedMeasurements = measurements.map(m => mapMeasurementToDisplay(m, displaySetService));
15285
15361
  setDisplayMeasurements(prevMeasurements => {
15286
15362
  if (JSON.stringify(prevMeasurements) !== JSON.stringify(mappedMeasurements)) {
@@ -15999,23 +16075,26 @@ ActiveViewportWindowLevel.propTypes = {
15999
16075
  ;// CONCATENATED MODULE: ../../../extensions/cornerstone/src/components/ActiveViewportWindowLevel/index.js
16000
16076
 
16001
16077
  ;// CONCATENATED MODULE: ../../../extensions/cornerstone/src/panels/PanelMeasurement.tsx
16078
+ function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
16002
16079
 
16003
16080
 
16004
16081
 
16005
16082
 
16006
16083
 
16007
-
16008
- function PanelMeasurementTable({
16084
+ const {
16085
+ filterAdditionalFindings: filterAdditionalFinding,
16086
+ filterOr,
16087
+ filterAny
16088
+ } = src/* utils */.Wp.MeasurementFilters;
16089
+ function PanelMeasurement({
16009
16090
  servicesManager,
16091
+ commandsManager,
16010
16092
  customHeader,
16011
- measurementFilter
16093
+ measurementFilter = filterAny
16012
16094
  }) {
16013
16095
  const measurementsPanelRef = (0,react.useRef)(null);
16014
- const [viewportGrid] = (0,ui_next_src/* useViewportGrid */.ih)();
16015
16096
  const {
16016
- measurementService,
16017
- customizationService,
16018
- uiDialogService
16097
+ measurementService
16019
16098
  } = servicesManager.services;
16020
16099
  const displayMeasurements = useMeasurements(servicesManager, {
16021
16100
  measurementFilter
@@ -16027,84 +16106,49 @@ function PanelMeasurementTable({
16027
16106
  }, 300)();
16028
16107
  }
16029
16108
  }, [displayMeasurements.length]);
16030
- const onMeasurementItemClickHandler = (uid, isActive) => {
16031
- if (isActive) {
16032
- return;
16033
- }
16034
- const measurements = [...displayMeasurements];
16035
- const measurement = measurements.find(m => m.uid === uid);
16036
- measurements.forEach(m => m.isActive = m.uid !== uid ? false : true);
16037
- measurement.isActive = true;
16038
- };
16039
- const jumpToImage = uid => {
16040
- measurementService.jumpToMeasurement(viewportGrid.activeViewportId, uid);
16041
- onMeasurementItemClickHandler(uid, true);
16042
- };
16043
- const removeMeasurement = uid => {
16044
- measurementService.remove(uid);
16045
- };
16046
- const renameMeasurement = uid => {
16047
- jumpToImage(uid);
16048
- const labelConfig = customizationService.get('measurementLabels');
16049
- const measurement = measurementService.getMeasurement(uid);
16050
- (0,default_src.showLabelAnnotationPopup)(measurement, uiDialogService, labelConfig).then(val => {
16051
- measurementService.update(uid, {
16052
- ...val
16053
- }, true);
16054
- });
16055
- };
16056
- const changeColorMeasurement = uid => {
16057
- const {
16058
- color
16059
- } = measurementService.getMeasurement(uid);
16060
- const rgbaColor = {
16061
- r: color[0],
16062
- g: color[1],
16063
- b: color[2],
16064
- a: color[3] / 255.0
16109
+ const bindCommand = (name, options) => {
16110
+ return uid => {
16111
+ commandsManager.run(name, {
16112
+ ...options,
16113
+ uid
16114
+ });
16065
16115
  };
16066
- (0,default_src.colorPickerDialog)(uiDialogService, rgbaColor, (newRgbaColor, actionId) => {
16067
- if (actionId === 'cancel') {
16068
- return;
16069
- }
16070
- const color = [newRgbaColor.r, newRgbaColor.g, newRgbaColor.b, newRgbaColor.a * 255.0];
16071
- // segmentationService.setSegmentColor(viewportId, segmentationId, segmentIndex, color);
16072
- });
16073
16116
  };
16074
- const toggleLockMeasurement = uid => {
16075
- measurementService.toggleLockMeasurement(uid);
16076
- };
16077
- const toggleVisibilityMeasurement = uid => {
16078
- measurementService.toggleVisibilityMeasurement(uid);
16117
+ const jumpToImage = bindCommand('jumpToMeasurement', {
16118
+ displayMeasurements
16119
+ });
16120
+ const removeMeasurement = bindCommand('removeMeasurement');
16121
+ const renameMeasurement = bindCommand(['jumpToMeasurement', 'renameMeasurement'], {
16122
+ displayMeasurements
16123
+ });
16124
+ const toggleLockMeasurement = bindCommand('toggleLockMeasurement');
16125
+ const toggleVisibilityMeasurement = bindCommand('toggleVisibilityMeasurement');
16126
+ const additionalFilter = filterAdditionalFinding(measurementService);
16127
+ const measurements = displayMeasurements.filter(item => !additionalFilter(item) && measurementFilter(item));
16128
+ const additionalFindings = displayMeasurements.filter(item => additionalFilter(item) && measurementFilter(item));
16129
+ const onArgs = {
16130
+ onClick: jumpToImage,
16131
+ onDelete: removeMeasurement,
16132
+ onToggleVisibility: toggleVisibilityMeasurement,
16133
+ onToggleLocked: toggleLockMeasurement,
16134
+ onRename: renameMeasurement
16079
16135
  };
16080
- const measurements = displayMeasurements.filter(dm => dm.measurementType !== measurementService.VALUE_TYPES.POINT && dm.referencedImageId);
16081
- const additionalFindings = displayMeasurements.filter(dm => dm.measurementType === measurementService.VALUE_TYPES.POINT && dm.referencedImageId);
16082
16136
  return /*#__PURE__*/react.createElement(react.Fragment, null, /*#__PURE__*/react.createElement("div", {
16083
16137
  className: "invisible-scrollbar overflow-y-auto overflow-x-hidden",
16084
16138
  ref: measurementsPanelRef,
16085
16139
  "data-cy": 'trackedMeasurements-panel'
16086
- }, /*#__PURE__*/react.createElement(ui_next_src/* MeasurementTable */.V, {
16140
+ }, /*#__PURE__*/react.createElement(ui_next_src/* MeasurementTable */.V, _extends({
16141
+ key: "tracked",
16087
16142
  title: "Measurements",
16088
- data: measurements,
16089
- onClick: jumpToImage,
16090
- onDelete: removeMeasurement,
16091
- onToggleVisibility: toggleVisibilityMeasurement,
16092
- onToggleLocked: toggleLockMeasurement,
16093
- onRename: renameMeasurement
16094
- // onColor={changeColorMeasurement}
16095
- }, /*#__PURE__*/react.createElement(ui_next_src/* MeasurementTable */.V.Header, null, customHeader && /*#__PURE__*/react.createElement(react.Fragment, null, typeof customHeader === 'function' ? customHeader({
16143
+ data: measurements
16144
+ }, onArgs), /*#__PURE__*/react.createElement(ui_next_src/* MeasurementTable */.V.Header, null, customHeader && /*#__PURE__*/react.createElement(react.Fragment, null, typeof customHeader === 'function' ? customHeader({
16096
16145
  additionalFindings,
16097
16146
  measurements
16098
- }) : customHeader)), /*#__PURE__*/react.createElement(ui_next_src/* MeasurementTable */.V.Body, null)), additionalFindings.length > 0 && /*#__PURE__*/react.createElement(ui_next_src/* MeasurementTable */.V, {
16147
+ }) : customHeader)), /*#__PURE__*/react.createElement(ui_next_src/* MeasurementTable */.V.Body, null)), additionalFindings.length > 0 && /*#__PURE__*/react.createElement(ui_next_src/* MeasurementTable */.V, _extends({
16148
+ key: "additional",
16099
16149
  data: additionalFindings,
16100
- title: "Additional Findings",
16101
- onClick: jumpToImage,
16102
- onDelete: removeMeasurement,
16103
- onToggleVisibility: toggleVisibilityMeasurement,
16104
- onToggleLocked: toggleLockMeasurement,
16105
- onRename: renameMeasurement
16106
- // onColor={changeColorMeasurement}
16107
- }, /*#__PURE__*/react.createElement(ui_next_src/* MeasurementTable */.V.Body, null))));
16150
+ title: "Additional Findings"
16151
+ }, onArgs), /*#__PURE__*/react.createElement(ui_next_src/* MeasurementTable */.V.Body, null))));
16108
16152
  }
16109
16153
  ;// CONCATENATED MODULE: ../../../extensions/cornerstone/src/getPanelModule.tsx
16110
16154
 
@@ -16165,7 +16209,7 @@ const getPanelModule = ({
16165
16209
  const wrappedPanelMeasurement = ({
16166
16210
  configuration
16167
16211
  }) => {
16168
- return /*#__PURE__*/react.createElement(PanelMeasurementTable, {
16212
+ return /*#__PURE__*/react.createElement(PanelMeasurement, {
16169
16213
  commandsManager: commandsManager,
16170
16214
  servicesManager: servicesManager,
16171
16215
  extensionManager: extensionManager,
@@ -16731,7 +16775,7 @@ DicomUploadProgress.propTypes = {
16731
16775
  // extracted by mini-css-extract-plugin
16732
16776
 
16733
16777
  ;// CONCATENATED MODULE: ../../../extensions/cornerstone/src/components/DicomUpload/DicomUpload.tsx
16734
- function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
16778
+ function DicomUpload_extends() { return DicomUpload_extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, DicomUpload_extends.apply(null, arguments); }
16735
16779
 
16736
16780
 
16737
16781
 
@@ -16759,7 +16803,7 @@ function DicomUpload({
16759
16803
  noClick: true
16760
16804
  }, ({
16761
16805
  getRootProps
16762
- }) => /*#__PURE__*/react.createElement("div", _extends({}, getRootProps(), {
16806
+ }) => /*#__PURE__*/react.createElement("div", DicomUpload_extends({}, getRootProps(), {
16763
16807
  className: "dicom-upload-drop-area-border-dash m-5 flex h-full flex-col items-center justify-center"
16764
16808
  }), /*#__PURE__*/react.createElement("div", {
16765
16809
  className: "flex gap-3"
@@ -16782,7 +16826,7 @@ function DicomUpload({
16782
16826
  type: ui_src/* ButtonEnums.type */.Ny.NW.secondary,
16783
16827
  disabled: false,
16784
16828
  onClick: () => {}
16785
- }, 'Add folder', /*#__PURE__*/react.createElement("input", _extends({}, getInputProps(), {
16829
+ }, 'Add folder', /*#__PURE__*/react.createElement("input", DicomUpload_extends({}, getInputProps(), {
16786
16830
  webkitdirectory: "true",
16787
16831
  mozdirectory: "true"
16788
16832
  })))))), /*#__PURE__*/react.createElement("div", {
@@ -16808,6 +16852,33 @@ DicomUpload.propTypes = {
16808
16852
  /* harmony default export */ const DicomUpload_DicomUpload = (DicomUpload);
16809
16853
  // EXTERNAL MODULE: ../../../extensions/cornerstone/src/hooks/useSegmentations.ts
16810
16854
  var useSegmentations = __webpack_require__(73421);
16855
+ ;// CONCATENATED MODULE: ../../../extensions/cornerstone/src/components/StudySummaryFromMetadata.tsx
16856
+
16857
+
16858
+
16859
+ const {
16860
+ formatDate
16861
+ } = src/* utils */.Wp;
16862
+ function StudySummaryFromMetadata({
16863
+ StudyInstanceUID
16864
+ }) {
16865
+ if (!StudyInstanceUID) {
16866
+ return null;
16867
+ }
16868
+ const studyMeta = src/* DicomMetadataStore */.H8.getStudy(StudyInstanceUID);
16869
+ if (!studyMeta?.series?.length) {
16870
+ return null;
16871
+ }
16872
+ const instanceMeta = studyMeta.series[0].instances[0];
16873
+ const {
16874
+ StudyDate,
16875
+ StudyDescription
16876
+ } = instanceMeta;
16877
+ return /*#__PURE__*/react.createElement(ui_next_src/* StudySummary */.u3, {
16878
+ date: formatDate(StudyDate),
16879
+ description: StudyDescription
16880
+ });
16881
+ }
16811
16882
  ;// CONCATENATED MODULE: ../../../extensions/cornerstone/src/index.tsx
16812
16883
  function src_extends() { return src_extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, src_extends.apply(null, arguments); }
16813
16884
 
@@ -16849,6 +16920,7 @@ function src_extends() { return src_extends = Object.assign ? Object.assign.bind
16849
16920
 
16850
16921
 
16851
16922
 
16923
+
16852
16924
 
16853
16925
 
16854
16926
  const {
@@ -1360,8 +1360,8 @@ function WorkflowPanel({
1360
1360
 
1361
1361
 
1362
1362
 
1363
- // EXTERNAL MODULE: ../../../extensions/cornerstone/src/index.tsx + 105 modules
1364
- var cornerstone_src = __webpack_require__(11185);
1363
+ // EXTERNAL MODULE: ../../../extensions/cornerstone/src/index.tsx + 106 modules
1364
+ var cornerstone_src = __webpack_require__(56925);
1365
1365
  ;// CONCATENATED MODULE: ../../../extensions/cornerstone-dynamic-volume/src/panels/DynamicExport.tsx
1366
1366
 
1367
1367
 
@@ -771,7 +771,7 @@ function _extends() { return _extends = Object.assign ? Object.assign.bind() : f
771
771
 
772
772
 
773
773
  const Component = /*#__PURE__*/react.lazy(() => {
774
- return Promise.all(/* import() */[__webpack_require__.e(3334), __webpack_require__.e(1185), __webpack_require__.e(3902)]).then(__webpack_require__.bind(__webpack_require__, 58295));
774
+ return Promise.all(/* import() */[__webpack_require__.e(3334), __webpack_require__.e(6925), __webpack_require__.e(3902)]).then(__webpack_require__.bind(__webpack_require__, 58295));
775
775
  });
776
776
  const OHIFCornerstoneSEGViewport = props => {
777
777
  return /*#__PURE__*/react.createElement(react.Suspense, {