@ohif/app 3.8.0-beta.66 → 3.8.0-beta.68

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 (65) hide show
  1. package/dist/{121.bundle.fda405f29003c308ce09.js → 121.bundle.a8fc45e3d88d0a8b82a8.js} +52 -75
  2. package/dist/{155.bundle.e9fdaa40010cc784f389.js → 155.bundle.7b87a2dbfaf2c36326bd.js} +7 -16
  3. package/dist/{188.bundle.67df9790c453b185fe1d.js → 188.bundle.022af4c804b855ca2f60.js} +2 -2
  4. package/dist/{638.bundle.4d7da6fe507df0000718.js → 2.bundle.962c8d8b57c4f94324b4.js} +46 -15
  5. package/dist/{295.bundle.57700cd41fd87e1521b4.js → 295.bundle.41d7b63be6a7d726b87e.js} +75 -86
  6. package/dist/{41.bundle.b7bf03502ac3e2ddca35.js → 41.bundle.ad4a012883642620e839.js} +16 -45
  7. package/dist/425.bundle.057226d5a1a2d7dcc391.js +2957 -0
  8. package/dist/425.css +2 -0
  9. package/dist/{448.bundle.0061f5280490e1a1aa88.js → 448.bundle.1d9b1b7379fba9b8e70b.js} +5 -5
  10. package/dist/{530.bundle.72d9812f117036615a38.js → 530.bundle.632dcb0d4f5266058c8b.js} +41 -67
  11. package/dist/{544.bundle.c3009e245ceb1554c70a.js → 544.bundle.df7870b43d7aa1faed39.js} +4 -4
  12. package/dist/{559.bundle.bb2c52834fb372399002.js → 559.bundle.54fea45a10d3aa002764.js} +4 -4
  13. package/dist/{889.bundle.edf546d8738c22b94be5.js → 574.bundle.3020ab733b8f07ec50a5.js} +1005 -49
  14. package/dist/{594.bundle.483843d38640164a9aca.js → 594.bundle.fad610af7dae0c2fb048.js} +4 -4
  15. package/dist/{701.bundle.285943aebfc0efe2b4f1.js → 595.bundle.dc733f6e58d41260ba40.js} +960 -61
  16. package/dist/{699.bundle.62990e46c235ab4785db.js → 699.bundle.78297d5204cdd274d097.js} +18 -25
  17. package/dist/{724.bundle.83a4176860f750353c0b.js → 724.bundle.171eb7665e96ac0ad109.js} +13 -71
  18. package/dist/{862.bundle.999931264956ced59b33.js → 862.bundle.27cb716917daad6afddc.js} +64 -83
  19. package/dist/{270.bundle.d7d6957c20f95c675b32.js → 889.bundle.43bac729645dcd445d23.js} +5 -5
  20. package/dist/{90.bundle.49b20161b4f864100085.js → 90.bundle.5e1e4b60b575b5be1369.js} +15 -25
  21. package/dist/{905.bundle.88010c612e910657883d.js → 905.bundle.a18b495f0a6769c5aff6.js} +2 -2
  22. package/dist/{907.bundle.1206d58ae62d26beaf30.js → 907.bundle.bec0deb8a4af3b4885a4.js} +2 -2
  23. package/dist/{961.bundle.b4d84dd80e4e1113de27.js → 961.bundle.2dd02c92ec591fec7924.js} +2 -2
  24. package/dist/{app.bundle.81c01fc2e11fa9b6ccb8.js → app.bundle.b36fed4fdc5235c8fd31.js} +2446 -745
  25. package/dist/app.bundle.css +6 -4
  26. package/dist/assets/images/CT-AAA.png +0 -0
  27. package/dist/assets/images/CT-AAA2.png +0 -0
  28. package/dist/assets/images/CT-Air.png +0 -0
  29. package/dist/assets/images/CT-Bone.png +0 -0
  30. package/dist/assets/images/CT-Bones.png +0 -0
  31. package/dist/assets/images/CT-Cardiac.png +0 -0
  32. package/dist/assets/images/CT-Cardiac2.png +0 -0
  33. package/dist/assets/images/CT-Cardiac3.png +0 -0
  34. package/dist/assets/images/CT-Chest-Contrast-Enhanced.png +0 -0
  35. package/dist/assets/images/CT-Chest-Vessels.png +0 -0
  36. package/dist/assets/images/CT-Coronary-Arteries-2.png +0 -0
  37. package/dist/assets/images/CT-Coronary-Arteries-3.png +0 -0
  38. package/dist/assets/images/CT-Coronary-Arteries.png +0 -0
  39. package/dist/assets/images/CT-Cropped-Volume-Bone.png +0 -0
  40. package/dist/assets/images/CT-Fat.png +0 -0
  41. package/dist/assets/images/CT-Liver-Vasculature.png +0 -0
  42. package/dist/assets/images/CT-Lung.png +0 -0
  43. package/dist/assets/images/CT-MIP.png +0 -0
  44. package/dist/assets/images/CT-Muscle.png +0 -0
  45. package/dist/assets/images/CT-Pulmonary-Arteries.png +0 -0
  46. package/dist/assets/images/CT-Soft-Tissue.png +0 -0
  47. package/dist/assets/images/DTI-FA-Brain.png +0 -0
  48. package/dist/assets/images/MR-Angio.png +0 -0
  49. package/dist/assets/images/MR-Default.png +0 -0
  50. package/dist/assets/images/MR-MIP.png +0 -0
  51. package/dist/assets/images/MR-T2-Brain.png +0 -0
  52. package/dist/assets/images/VolumeRendering.png +0 -0
  53. package/dist/index.html +1 -1
  54. package/dist/{polySeg.bundle.a97fc68de7599f9a9fdc.js → polySeg.bundle.e7b4c29fb9173e8567b8.js} +1 -1
  55. package/dist/sw.js +1 -1
  56. package/package.json +17 -17
  57. package/dist/339.bundle.526cede81f0a9bb248e6.js +0 -2591
  58. /package/dist/{164.bundle.3f877a2272b773332317.js → 164.bundle.6a75d9824ed0e87afd36.js} +0 -0
  59. /package/dist/{191.bundle.509480b6972209d2567c.js → 191.bundle.7d89c921abefd1140d50.js} +0 -0
  60. /package/dist/{638.css → 2.css} +0 -0
  61. /package/dist/{290.bundle.8b4d7dfbc7cfe418a0f1.js → 290.bundle.952de53057f98e2c5ef0.js} +0 -0
  62. /package/dist/{342.bundle.17ec05907f93624fd494.js → 342.bundle.6e49f63ea7cea4645c0a.js} +0 -0
  63. /package/dist/{504.bundle.6d203e80d4bd8a823059.js → 504.bundle.993d7e2dec36257d4ce4.js} +0 -0
  64. /package/dist/{889.css → 574.css} +0 -0
  65. /package/dist/{701.css → 595.css} +0 -0
@@ -17,10 +17,8 @@ var react = __webpack_require__(41766);
17
17
  // EXTERNAL MODULE: ../../../node_modules/prop-types/index.js
18
18
  var prop_types = __webpack_require__(11374);
19
19
  var prop_types_default = /*#__PURE__*/__webpack_require__.n(prop_types);
20
- // EXTERNAL MODULE: ../../core/src/index.ts + 67 modules
21
- var src = __webpack_require__(78198);
22
- // EXTERNAL MODULE: ../../ui/src/index.js + 497 modules
23
- var ui_src = __webpack_require__(58046);
20
+ // EXTERNAL MODULE: ../../ui/src/index.js + 521 modules
21
+ var src = __webpack_require__(59134);
24
22
  ;// CONCATENATED MODULE: ../../../extensions/cornerstone-dicom-rt/src/utils/promptHydrateRT.ts
25
23
 
26
24
  const RESPONSE = {
@@ -59,11 +57,11 @@ function _askHydrate(uiViewportDialogService, viewportId) {
59
57
  return new Promise(function (resolve, reject) {
60
58
  const message = 'Do you want to open this Segmentation?';
61
59
  const actions = [{
62
- type: ui_src/* ButtonEnums.type */.Ny.NW.secondary,
60
+ type: src/* ButtonEnums.type */.Ny.NW.secondary,
63
61
  text: 'No',
64
62
  value: RESPONSE.CANCEL
65
63
  }, {
66
- type: ui_src/* ButtonEnums.type */.Ny.NW.primary,
64
+ type: src/* ButtonEnums.type */.Ny.NW.primary,
67
65
  text: 'Yes',
68
66
  value: RESPONSE.HYDRATE_SEG
69
67
  }];
@@ -97,37 +95,39 @@ function _getStatusComponent({
97
95
  }) {
98
96
  let ToolTipMessage = null;
99
97
  let StatusIcon = null;
100
- const {
101
- t
102
- } = (0,es/* useTranslation */.Bd)('Common');
103
- const loadStr = t('LOAD');
104
98
  switch (isHydrated) {
105
99
  case true:
106
- StatusIcon = () => /*#__PURE__*/react.createElement(ui_src/* Icon */.In, {
100
+ StatusIcon = () => /*#__PURE__*/react.createElement(src/* Icon */.In, {
107
101
  name: "status-alert"
108
102
  });
109
103
  ToolTipMessage = () => /*#__PURE__*/react.createElement("div", null, "This Segmentation is loaded in the segmentation panel");
110
104
  break;
111
105
  case false:
112
- StatusIcon = () => /*#__PURE__*/react.createElement(ui_src/* Icon */.In, {
106
+ StatusIcon = () => /*#__PURE__*/react.createElement(src/* Icon */.In, {
113
107
  className: "text-aqua-pale",
114
108
  name: "status-untracked"
115
109
  });
116
110
  ToolTipMessage = () => /*#__PURE__*/react.createElement("div", null, "Click LOAD to load RTSTRUCT.");
117
111
  }
118
- const StatusArea = () => /*#__PURE__*/react.createElement("div", {
119
- className: "flex h-6 cursor-default text-sm leading-6 text-white"
120
- }, /*#__PURE__*/react.createElement("div", {
121
- className: "bg-customgray-100 flex min-w-[45px] items-center rounded-l-xl rounded-r p-1"
122
- }, /*#__PURE__*/react.createElement(StatusIcon, null), /*#__PURE__*/react.createElement("span", {
123
- className: "ml-1"
124
- }, "RTSTRUCT")), !isHydrated && /*#__PURE__*/react.createElement("div", {
125
- className: "bg-primary-main hover:bg-primary-light ml-1 cursor-pointer rounded px-1.5 hover:text-black"
126
- // Using onMouseUp here because onClick is not working when the viewport is not active and is styled with pointer-events:none
127
- ,
128
- onMouseUp: onStatusClick
129
- }, loadStr));
130
- return /*#__PURE__*/react.createElement(react.Fragment, null, ToolTipMessage && /*#__PURE__*/react.createElement(ui_src/* Tooltip */.m_, {
112
+ const StatusArea = () => {
113
+ const {
114
+ t
115
+ } = (0,es/* useTranslation */.Bd)('Common');
116
+ const loadStr = t('LOAD');
117
+ return /*#__PURE__*/react.createElement("div", {
118
+ className: "flex h-6 cursor-default text-sm leading-6 text-white"
119
+ }, /*#__PURE__*/react.createElement("div", {
120
+ className: "bg-customgray-100 flex min-w-[45px] items-center rounded-l-xl rounded-r p-1"
121
+ }, /*#__PURE__*/react.createElement(StatusIcon, null), /*#__PURE__*/react.createElement("span", {
122
+ className: "ml-1"
123
+ }, "RTSTRUCT")), !isHydrated && /*#__PURE__*/react.createElement("div", {
124
+ className: "bg-primary-main hover:bg-primary-light ml-1 cursor-pointer rounded px-1.5 hover:text-black"
125
+ // Using onMouseUp here because onClick is not working when the viewport is not active and is styled with pointer-events:none
126
+ ,
127
+ onMouseUp: onStatusClick
128
+ }, loadStr));
129
+ };
130
+ return /*#__PURE__*/react.createElement(react.Fragment, null, ToolTipMessage && /*#__PURE__*/react.createElement(src/* Tooltip */.m_, {
131
131
  content: /*#__PURE__*/react.createElement(ToolTipMessage, null),
132
132
  position: "bottom-left"
133
133
  }, /*#__PURE__*/react.createElement(StatusArea, null)), !ToolTipMessage && /*#__PURE__*/react.createElement(StatusArea, null));
@@ -148,17 +148,12 @@ function _extends() { _extends = Object.assign ? Object.assign.bind() : function
148
148
 
149
149
 
150
150
 
151
-
152
- const {
153
- formatDate
154
- } = src.utils;
155
151
  const RT_TOOLGROUP_BASE_NAME = 'RTToolGroup';
156
152
  function OHIFCornerstoneRTViewport(props) {
157
153
  const {
158
154
  children,
159
155
  displaySets,
160
156
  viewportOptions,
161
- viewportLabel,
162
157
  servicesManager,
163
158
  extensionManager,
164
159
  commandsManager
@@ -168,7 +163,8 @@ function OHIFCornerstoneRTViewport(props) {
168
163
  toolGroupService,
169
164
  segmentationService,
170
165
  uiNotificationService,
171
- customizationService
166
+ customizationService,
167
+ viewportActionCornersService
172
168
  } = servicesManager.services;
173
169
  const viewportId = viewportOptions.viewportId;
174
170
  const toolGroupId = `${RT_TOOLGROUP_BASE_NAME}-${viewportId}`;
@@ -178,7 +174,7 @@ function OHIFCornerstoneRTViewport(props) {
178
174
  throw new Error('RT viewport should only have a single display set');
179
175
  }
180
176
  const rtDisplaySet = displaySets[0];
181
- const [viewportGrid, viewportGridService] = (0,ui_src/* useViewportGrid */.ih)();
177
+ const [viewportGrid, viewportGridService] = (0,src/* useViewportGrid */.ih)();
182
178
 
183
179
  // States
184
180
  const [isToolGroupCreated, setToolGroupCreated] = (0,react.useState)(false);
@@ -261,7 +257,6 @@ function OHIFCornerstoneRTViewport(props) {
261
257
  }));
262
258
  }, [viewportId, rtDisplaySet, toolGroupId]);
263
259
  const onSegmentChange = (0,react.useCallback)(direction => {
264
- direction = direction === 'left' ? -1 : 1;
265
260
  const segmentationId = rtDisplaySet.displaySetInstanceUID;
266
261
  const segmentation = segmentationService.getSegmentation(segmentationId);
267
262
  const {
@@ -387,19 +382,7 @@ function OHIFCornerstoneRTViewport(props) {
387
382
  });
388
383
  });
389
384
  }
390
- const {
391
- PatientID,
392
- PatientName,
393
- PatientSex,
394
- PatientAge,
395
- SliceThickness,
396
- ManufacturerModelName,
397
- StudyDate,
398
- SeriesDescription,
399
- SpacingBetweenSlices,
400
- SeriesNumber
401
- } = referencedDisplaySetRef.current.metadata;
402
- const onStatusClick = async () => {
385
+ const onStatusClick = (0,react.useCallback)(async () => {
403
386
  // Before hydrating a RT and make it added to all viewports in the grid
404
387
  // that share the same frameOfReferenceUID, we need to store the viewport grid
405
388
  // presentation state, so that we can restore it after hydrating the RT. This is
@@ -412,38 +395,32 @@ function OHIFCornerstoneRTViewport(props) {
412
395
  viewportId
413
396
  });
414
397
  setIsHydrated(isHydrated);
415
- };
416
- return /*#__PURE__*/react.createElement(react.Fragment, null, /*#__PURE__*/react.createElement(ui_src/* ViewportActionBar */.cS, {
417
- onDoubleClick: evt => {
418
- evt.stopPropagation();
419
- evt.preventDefault();
420
- },
421
- onArrowsClick: onSegmentChange,
422
- getStatusComponent: () => {
423
- return _getStatusComponent({
398
+ }, [hydrateRTDisplaySet, rtDisplaySet, storePresentationState, viewportId]);
399
+ (0,react.useEffect)(() => {
400
+ viewportActionCornersService.setComponents([{
401
+ viewportId,
402
+ id: 'viewportStatusComponent',
403
+ component: _getStatusComponent({
424
404
  isHydrated,
425
405
  onStatusClick
426
- });
427
- },
428
- studyData: {
429
- label: viewportLabel,
430
- useAltStyling: true,
431
- studyDate: formatDate(StudyDate),
432
- currentSeries: SeriesNumber,
433
- seriesDescription: `RT Viewport ${SeriesDescription}`,
434
- patientInformation: {
435
- patientName: PatientName ? src/* default.utils */.Ay.utils.formatPN(PatientName.Alphabetic) : '',
436
- patientSex: PatientSex || '',
437
- patientAge: PatientAge || '',
438
- MRN: PatientID || '',
439
- thickness: SliceThickness ? `${SliceThickness.toFixed(2)}mm` : '',
440
- spacing: SpacingBetweenSlices !== undefined ? `${SpacingBetweenSlices.toFixed(2)}mm` : '',
441
- scanner: ManufacturerModelName || ''
442
- }
443
- }
444
- }), /*#__PURE__*/react.createElement("div", {
406
+ }),
407
+ indexPriority: -100,
408
+ location: viewportActionCornersService.LOCATIONS.topLeft
409
+ }, {
410
+ viewportId,
411
+ id: 'viewportActionArrowsComponent',
412
+ component: /*#__PURE__*/react.createElement(src/* ViewportActionArrows */.$I, {
413
+ key: "actionArrows",
414
+ onArrowsClick: onSegmentChange,
415
+ className: viewportId === activeViewportId ? 'visible' : 'invisible group-hover:visible'
416
+ }),
417
+ indexPriority: 0,
418
+ location: viewportActionCornersService.LOCATIONS.topRight
419
+ }]);
420
+ }, [activeViewportId, isHydrated, onSegmentChange, onStatusClick, viewportActionCornersService, viewportId]);
421
+ return /*#__PURE__*/react.createElement(react.Fragment, null, /*#__PURE__*/react.createElement("div", {
445
422
  className: "relative flex h-full w-full flex-row overflow-hidden"
446
- }, rtIsLoading && /*#__PURE__*/react.createElement(ui_src/* LoadingIndicatorTotalPercent */.pT, {
423
+ }, rtIsLoading && /*#__PURE__*/react.createElement(src/* LoadingIndicatorTotalPercent */.pT, {
447
424
  className: "h-full w-full",
448
425
  totalNumbers: processingProgress.totalSegments,
449
426
  percentComplete: processingProgress.percentComplete,
@@ -20,8 +20,8 @@ var prop_types_default = /*#__PURE__*/__webpack_require__.n(prop_types);
20
20
  var es = __webpack_require__(57593);
21
21
  // EXTERNAL MODULE: ../../../node_modules/@xstate/react/es/index.js + 8 modules
22
22
  var react_es = __webpack_require__(6835);
23
- // EXTERNAL MODULE: ../../ui/src/index.js + 497 modules
24
- var src = __webpack_require__(58046);
23
+ // EXTERNAL MODULE: ../../ui/src/index.js + 521 modules
24
+ var src = __webpack_require__(59134);
25
25
  ;// CONCATENATED MODULE: ../../../extensions/measurement-tracking/src/contexts/TrackedMeasurementsContext/measurementTrackingMachine.js
26
26
 
27
27
  const RESPONSE = {
@@ -1102,10 +1102,10 @@ var prop_types_default = /*#__PURE__*/__webpack_require__.n(prop_types);
1102
1102
  var dist = __webpack_require__(37396);
1103
1103
  // EXTERNAL MODULE: ../../../node_modules/react-i18next/dist/es/index.js + 15 modules
1104
1104
  var es = __webpack_require__(80619);
1105
- // EXTERNAL MODULE: ../../core/src/index.ts + 67 modules
1106
- var src = __webpack_require__(78198);
1107
- // EXTERNAL MODULE: ../../ui/src/index.js + 497 modules
1108
- var ui_src = __webpack_require__(58046);
1105
+ // EXTERNAL MODULE: ../../core/src/index.ts + 68 modules
1106
+ var src = __webpack_require__(85073);
1107
+ // EXTERNAL MODULE: ../../ui/src/index.js + 521 modules
1108
+ var ui_src = __webpack_require__(59134);
1109
1109
  ;// CONCATENATED MODULE: ../../../extensions/measurement-tracking/src/panels/PanelStudyBrowserTracking/PanelStudyBrowserTracking.tsx
1110
1110
 
1111
1111
 
@@ -1429,14 +1429,6 @@ viewportGridService, dataSource, displaySetService, uiDialogService, uiNotificat
1429
1429
  const imageSrc = thumbnailImageSrcMap[ds.displaySetInstanceUID];
1430
1430
  const componentType = _getComponentType(ds);
1431
1431
  const numPanes = viewportGridService.getNumViewportPanes();
1432
- const viewportIdentificator = [];
1433
- if (numPanes !== 1) {
1434
- viewports.forEach(viewportData => {
1435
- if (viewportData?.displaySetInstanceUIDs?.includes(ds.displaySetInstanceUID)) {
1436
- viewportIdentificator.push(viewportData.viewportLabel);
1437
- }
1438
- });
1439
- }
1440
1432
  const array = componentType === 'thumbnailTracked' ? thumbnailDisplaySets : thumbnailNoImageDisplaySets;
1441
1433
  const {
1442
1434
  displaySetInstanceUID
@@ -1459,8 +1451,7 @@ viewportGridService, dataSource, displaySetService, uiDialogService, uiNotificat
1459
1451
  // .. Any other data to pass
1460
1452
  },
1461
1453
  isTracked: trackedSeriesInstanceUIDs.includes(ds.SeriesInstanceUID),
1462
- isHydratedForDerivedDisplaySet: ds.isHydrated,
1463
- viewportIdentificator
1454
+ isHydratedForDerivedDisplaySet: ds.isHydrated
1464
1455
  };
1465
1456
  if (componentType === 'thumbnailNoImage') {
1466
1457
  if (dataSource.reject && dataSource.reject.series) {
@@ -22,8 +22,8 @@ const SOPClassHandlerId = `${id}.sopClassHandlerModule.${SOPClassHandlerName}`;
22
22
 
23
23
  // EXTERNAL MODULE: ../../../node_modules/react/index.js
24
24
  var react = __webpack_require__(41766);
25
- // EXTERNAL MODULE: ../../core/src/index.ts + 67 modules
26
- var src = __webpack_require__(78198);
25
+ // EXTERNAL MODULE: ../../core/src/index.ts + 68 modules
26
+ var src = __webpack_require__(85073);
27
27
  // EXTERNAL MODULE: ../../../node_modules/dcmjs/build/dcmjs.es.js
28
28
  var dcmjs_es = __webpack_require__(31426);
29
29
  ;// CONCATENATED MODULE: ../../../extensions/cornerstone-dicom-rt/src/loadRTStruct.js
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
- (globalThis["webpackChunk"] = globalThis["webpackChunk"] || []).push([[638,481],{
2
+ (globalThis["webpackChunk"] = globalThis["webpackChunk"] || []).push([[2,481],{
3
3
 
4
- /***/ 92169:
4
+ /***/ 14349:
5
5
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
6
6
 
7
7
  // ESM COMPAT FLAG
@@ -22,8 +22,8 @@ const SOPClassHandlerId = `${id}.sopClassHandlerModule.${SOPClassHandlerName}`;
22
22
 
23
23
  // EXTERNAL MODULE: ../../../node_modules/react/index.js
24
24
  var react = __webpack_require__(41766);
25
- // EXTERNAL MODULE: ../../core/src/index.ts + 67 modules
26
- var src = __webpack_require__(78198);
25
+ // EXTERNAL MODULE: ../../core/src/index.ts + 68 modules
26
+ var src = __webpack_require__(85073);
27
27
  // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/index.js + 383 modules
28
28
  var esm = __webpack_require__(50719);
29
29
  // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/tools/dist/esm/index.js + 16 modules
@@ -315,13 +315,19 @@ function getHangingProtocolModule() {
315
315
 
316
316
  // EXTERNAL MODULE: ./state/index.js + 1 modules
317
317
  var state = __webpack_require__(15575);
318
- // EXTERNAL MODULE: ../../ui/src/index.js + 497 modules
319
- var ui_src = __webpack_require__(58046);
318
+ // EXTERNAL MODULE: ../../ui/src/index.js + 521 modules
319
+ var ui_src = __webpack_require__(59134);
320
320
  // EXTERNAL MODULE: ../../../extensions/default/src/index.ts + 78 modules
321
321
  var default_src = __webpack_require__(54090);
322
322
  // EXTERNAL MODULE: ../../../node_modules/prop-types/index.js
323
323
  var prop_types = __webpack_require__(11374);
324
324
  var prop_types_default = /*#__PURE__*/__webpack_require__.n(prop_types);
325
+ ;// CONCATENATED MODULE: ../../../extensions/cornerstone-dicom-seg/src/types/segmentation.tsx
326
+ let SegmentationPanelMode = /*#__PURE__*/function (SegmentationPanelMode) {
327
+ SegmentationPanelMode["Expanded"] = "expanded";
328
+ SegmentationPanelMode["Dropdown"] = "dropdown";
329
+ return SegmentationPanelMode;
330
+ }({});
325
331
  ;// CONCATENATED MODULE: ../../../extensions/cornerstone-dicom-seg/src/panels/callInputDialog.tsx
326
332
 
327
333
 
@@ -489,6 +495,11 @@ var dist_es = __webpack_require__(80619);
489
495
 
490
496
 
491
497
 
498
+
499
+ const components = {
500
+ [SegmentationPanelMode.Expanded]: ui_src/* SegmentationGroupTableExpanded */.fO,
501
+ [SegmentationPanelMode.Dropdown]: ui_src/* SegmentationGroupTable */.QQ
502
+ };
492
503
  function PanelSegmentation({
493
504
  servicesManager,
494
505
  commandsManager,
@@ -623,6 +634,15 @@ function PanelSegmentation({
623
634
  };
624
635
  const onToggleSegmentationVisibility = segmentationId => {
625
636
  segmentationService.toggleSegmentationVisibility(segmentationId);
637
+ const segmentation = segmentationService.getSegmentation(segmentationId);
638
+ const isVisible = segmentation.isVisible;
639
+ const segments = segmentation.segments;
640
+ const toolGroupIds = getToolGroupIds(segmentationId);
641
+ toolGroupIds.forEach(toolGroupId => {
642
+ segments.forEach((segment, segmentIndex) => {
643
+ segmentationService.setSegmentVisibility(segmentationId, segmentIndex, isVisible, toolGroupId);
644
+ });
645
+ });
626
646
  };
627
647
  const _setSegmentationConfiguration = (0,react.useCallback)((segmentationId, key, value) => {
628
648
  segmentationService.setConfiguration({
@@ -663,9 +683,8 @@ function PanelSegmentation({
663
683
  segmentationId
664
684
  });
665
685
  };
666
- return /*#__PURE__*/react.createElement(react.Fragment, null, /*#__PURE__*/react.createElement("div", {
667
- className: "ohif-scrollbar flex min-h-0 flex-auto select-none flex-col justify-between overflow-auto"
668
- }, /*#__PURE__*/react.createElement(ui_src/* SegmentationGroupTable */.QQ, {
686
+ const SegmentationGroupTableComponent = components[configuration?.segmentationPanelMode];
687
+ return /*#__PURE__*/react.createElement(SegmentationGroupTableComponent, {
669
688
  title: t('Segmentations'),
670
689
  segmentations: segmentations,
671
690
  disableEditing: configuration.disableEditing,
@@ -696,7 +715,7 @@ function PanelSegmentation({
696
715
  setOutlineWidthActive: value => _setSegmentationConfiguration(selectedSegmentationId, 'outlineWidthActive', value),
697
716
  setFillAlpha: value => _setSegmentationConfiguration(selectedSegmentationId, 'fillAlpha', value),
698
717
  setFillAlphaInactive: value => _setSegmentationConfiguration(selectedSegmentationId, 'fillAlphaInactive', value)
699
- })));
718
+ });
700
719
  }
701
720
  PanelSegmentation.propTypes = {
702
721
  commandsManager: prop_types_default().shape({
@@ -719,6 +738,7 @@ PanelSegmentation.propTypes = {
719
738
 
720
739
 
721
740
 
741
+
722
742
  const getPanelModule = ({
723
743
  commandsManager,
724
744
  servicesManager,
@@ -732,17 +752,21 @@ const getPanelModule = ({
732
752
  const wrappedPanelSegmentation = configuration => {
733
753
  const [appConfig] = (0,state/* useAppConfig */.r)();
734
754
  const disableEditingForMode = customizationService.get('segmentation.disableEditing');
755
+ const segmentationPanelMode = customizationService.get('segmentation.segmentationPanelMode')?.value || SegmentationPanelMode.Dropdown;
735
756
  return /*#__PURE__*/react.createElement(PanelSegmentation, {
736
757
  commandsManager: commandsManager,
737
758
  servicesManager: servicesManager,
738
759
  extensionManager: extensionManager,
739
760
  configuration: {
740
761
  ...configuration,
741
- disableEditing: appConfig.disableEditing || disableEditingForMode?.value
762
+ disableEditing: appConfig.disableEditing || disableEditingForMode?.value,
763
+ segmentationPanelMode: segmentationPanelMode
742
764
  }
743
765
  });
744
766
  };
745
767
  const wrappedPanelSegmentationWithTools = configuration => {
768
+ const [appConfig] = (0,state/* useAppConfig */.r)();
769
+ const segmentationPanelMode = customizationService.get('segmentation.segmentationPanelMode')?.value || SegmentationPanelMode.Dropdown;
746
770
  return /*#__PURE__*/react.createElement(react.Fragment, null, /*#__PURE__*/react.createElement(ui_src/* Toolbox */.OO, {
747
771
  commandsManager: commandsManager,
748
772
  servicesManager: servicesManager,
@@ -757,7 +781,8 @@ const getPanelModule = ({
757
781
  servicesManager: servicesManager,
758
782
  extensionManager: extensionManager,
759
783
  configuration: {
760
- ...configuration
784
+ ...configuration,
785
+ segmentationPanelMode: segmentationPanelMode
761
786
  }
762
787
  }));
763
788
  };
@@ -1135,6 +1160,7 @@ const commandsModule = ({
1135
1160
  }) => {
1136
1161
  // Todo: handle adding more than one segmentation
1137
1162
  const displaySet = displaySets[0];
1163
+ const referencedDisplaySet = displaySetService.getDisplaySetByUID(displaySet.referencedDisplaySetInstanceUID);
1138
1164
  updateViewportsForSegmentationRendering({
1139
1165
  viewportId,
1140
1166
  servicesManager,
@@ -1145,6 +1171,8 @@ const commandsModule = ({
1145
1171
  const serviceFunction = segDisplaySet.Modality === 'SEG' ? 'createSegmentationForSEGDisplaySet' : 'createSegmentationForRTDisplaySet';
1146
1172
  const boundFn = segmentationService[serviceFunction].bind(segmentationService);
1147
1173
  const segmentationId = await boundFn(segDisplaySet, null, suppressEvents);
1174
+ const segmentation = segmentationService.getSegmentation(segmentationId);
1175
+ segmentation.description = `S${referencedDisplaySet.SeriesNumber}: ${referencedDisplaySet.SeriesDescription}`;
1148
1176
  return segmentationId;
1149
1177
  }
1150
1178
  });
@@ -1420,7 +1448,8 @@ function getToolbarModule({
1420
1448
  evaluate: ({
1421
1449
  viewportId,
1422
1450
  button,
1423
- toolNames
1451
+ toolNames,
1452
+ disabledText
1424
1453
  }) => {
1425
1454
  // Todo: we need to pass in the button section Id since we are kind of
1426
1455
  // forcing the button to have black background since initially
@@ -1430,7 +1459,8 @@ function getToolbarModule({
1430
1459
  if (!segmentations?.length) {
1431
1460
  return {
1432
1461
  disabled: true,
1433
- className: '!text-common-bright !bg-black opacity-50'
1462
+ className: '!text-common-bright !bg-black opacity-50',
1463
+ disabledText: disabledText ?? 'No segmentations available'
1434
1464
  };
1435
1465
  }
1436
1466
  const toolGroup = toolGroupService.getToolGroupForViewport(viewportId);
@@ -1441,7 +1471,8 @@ function getToolbarModule({
1441
1471
  if (!toolGroup || !toolGroup.hasTool(toolName)) {
1442
1472
  return {
1443
1473
  disabled: true,
1444
- className: '!text-common-bright ohif-disabled'
1474
+ className: '!text-common-bright ohif-disabled',
1475
+ disabledText: disabledText ?? 'Not available on the current viewport'
1445
1476
  };
1446
1477
  }
1447
1478
  const isPrimaryActive = toolNames ? toolNames.includes(toolGroup.getActivePrimaryMouseButtonTool()) : toolGroup.getActivePrimaryMouseButtonTool() === toolName;