@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
@@ -12,19 +12,16 @@ __webpack_require__.d(__webpack_exports__, {
12
12
  "default": () => (/* binding */ segmentation_src)
13
13
  });
14
14
 
15
- // EXTERNAL MODULE: ../../core/src/index.ts + 67 modules
16
- var src = __webpack_require__(78198);
15
+ // EXTERNAL MODULE: ../../core/src/index.ts + 68 modules
16
+ var src = __webpack_require__(85073);
17
17
  ;// CONCATENATED MODULE: ../../../modes/segmentation/package.json
18
18
  const package_namespaceObject = /*#__PURE__*/JSON.parse('{"UU":"@ohif/mode-segmentation"}');
19
19
  ;// CONCATENATED MODULE: ../../../modes/segmentation/src/id.js
20
20
 
21
21
  const id = package_namespaceObject.UU;
22
22
 
23
- // EXTERNAL MODULE: ../../ui/src/index.js + 497 modules
24
- var ui_src = __webpack_require__(58046);
25
23
  ;// CONCATENATED MODULE: ../../../modes/segmentation/src/toolbarButtons.ts
26
24
 
27
-
28
25
  const {
29
26
  windowLevelPresets
30
27
  } = src.defaults;
@@ -66,23 +63,12 @@ const toolbarButtons = [{
66
63
  }
67
64
  }, {
68
65
  id: 'WindowLevel',
69
- uiType: 'ohif.splitButton',
66
+ uiType: 'ohif.radioGroup',
70
67
  props: {
71
- groupId: 'WindowLevel',
72
- primary: createButton({
73
- id: 'WindowLevel',
74
- icon: 'tool-window-level',
75
- label: 'Window Level',
76
- tooltip: 'Window Level',
77
- commands: setToolActiveToolbar,
78
- evaluate: 'evaluate.cornerstoneTool'
79
- }),
80
- secondary: {
81
- icon: 'chevron-down',
82
- tooltip: 'W/L Presets'
83
- },
84
- renderer: ui_src/* WindowLevelMenuItem */.d4,
85
- items: [_createWwwcPreset(1, 'Soft tissue', '400 / 40'), _createWwwcPreset(2, 'Lung', '1500 / -600'), _createWwwcPreset(3, 'Liver', '150 / 90'), _createWwwcPreset(4, 'Bone', '2500 / 480'), _createWwwcPreset(5, 'Brain', '80 / 40')]
68
+ icon: 'tool-window-level',
69
+ label: 'Window Level',
70
+ commands: setToolActiveToolbar,
71
+ evaluate: 'evaluate.cornerstoneTool'
86
72
  }
87
73
  }, {
88
74
  id: 'Pan',
@@ -101,7 +87,10 @@ const toolbarButtons = [{
101
87
  icon: 'tool-3d-rotate',
102
88
  label: '3D Rotate',
103
89
  commands: setToolActiveToolbar,
104
- evaluate: 'evaluate.cornerstoneTool'
90
+ evaluate: {
91
+ name: 'evaluate.cornerstoneTool',
92
+ disabledText: 'Select a 3D viewport to enable this tool'
93
+ }
105
94
  }
106
95
  }, {
107
96
  id: 'Capture',
@@ -133,7 +122,10 @@ const toolbarButtons = [{
133
122
  toolGroupIds: ['mpr']
134
123
  }
135
124
  },
136
- evaluate: 'evaluate.cornerstoneTool'
125
+ evaluate: {
126
+ name: 'evaluate.cornerstoneTool',
127
+ disabledText: 'Select an MPR viewport to enable this tool'
128
+ }
137
129
  }
138
130
  }, {
139
131
  id: 'MoreTools',
@@ -293,7 +285,8 @@ const segmentationButtons_toolbarButtons = [{
293
285
  name: 'evaluate.cornerstone.segmentation',
294
286
  options: {
295
287
  toolNames: ['CircularBrush', 'SphereBrush']
296
- }
288
+ },
289
+ disabledText: 'Create new segmentation to enable this tool.'
297
290
  },
298
291
  commands: _createSetToolActiveCommands('CircularBrush'),
299
292
  options: [{
@@ -366,7 +359,7 @@ const segmentationButtons_toolbarButtons = [{
366
359
  }, {
367
360
  id: 'Threshold',
368
361
  icon: 'icon-tool-threshold',
369
- label: 'Eraser',
362
+ label: 'Threshold Tool',
370
363
  evaluate: {
371
364
  name: 'evaluate.cornerstone.segmentation',
372
365
  options: {
@@ -12,10 +12,8 @@ __webpack_require__.d(__webpack_exports__, {
12
12
  "default": () => (/* binding */ tmtv_src)
13
13
  });
14
14
 
15
- // EXTERNAL MODULE: ../../core/src/index.ts + 67 modules
16
- var src = __webpack_require__(78198);
17
- // EXTERNAL MODULE: ../../ui/src/index.js + 497 modules
18
- var ui_src = __webpack_require__(58046);
15
+ // EXTERNAL MODULE: ../../core/src/index.ts + 68 modules
16
+ var src = __webpack_require__(85073);
19
17
  ;// CONCATENATED MODULE: ../../../modes/tmtv/src/initToolGroups.js
20
18
  const toolGroupIds = {
21
19
  CT: 'ctToolGroup',
@@ -136,38 +134,9 @@ function initToolGroups(toolNames, Enums, toolGroupService, commandsManager) {
136
134
  ;// CONCATENATED MODULE: ../../../modes/tmtv/src/toolbarButtons.js
137
135
 
138
136
 
139
-
140
137
  const {
141
138
  windowLevelPresets
142
139
  } = src.defaults;
143
- function _createColormap(label, colormap) {
144
- return {
145
- id: label,
146
- label,
147
- type: 'action',
148
- commands: [{
149
- commandName: 'setFusionPTColormap',
150
- commandOptions: {
151
- toolGroupId: toolGroupIds.Fusion,
152
- colormap
153
- }
154
- }]
155
- };
156
- }
157
- function _createWwwcPreset(preset, title, subtitle) {
158
- return {
159
- id: preset.toString(),
160
- title,
161
- subtitle,
162
- commands: [{
163
- commandName: 'setWindowLevel',
164
- commandOptions: {
165
- ...windowLevelPresets[preset]
166
- },
167
- context: 'CORNERSTONE'
168
- }]
169
- };
170
- }
171
140
  const setToolActiveToolbar = {
172
141
  commandName: 'setToolActiveToolbar',
173
142
  commandOptions: {
@@ -227,23 +196,12 @@ const toolbarButtons = [{
227
196
  // Window Level + Presets
228
197
  {
229
198
  id: 'WindowLevel',
230
- uiType: 'ohif.splitButton',
199
+ uiType: 'ohif.radioGroup',
231
200
  props: {
232
- groupId: 'WindowLevel',
233
- primary: src.ToolbarService.createButton({
234
- id: 'WindowLevel',
235
- icon: 'tool-window-level',
236
- label: 'Window Level',
237
- tooltip: 'Window Level',
238
- commands: setToolActiveToolbar,
239
- evaluate: 'evaluate.cornerstoneTool'
240
- }),
241
- secondary: {
242
- icon: 'chevron-down',
243
- tooltip: 'W/L Presets'
244
- },
245
- renderer: ui_src/* WindowLevelMenuItem */.d4,
246
- items: [_createWwwcPreset(1, 'Soft tissue', '400 / 40'), _createWwwcPreset(2, 'Lung', '1500 / -600'), _createWwwcPreset(3, 'Liver', '150 / 90'), _createWwwcPreset(4, 'Bone', '2500 / 480'), _createWwwcPreset(5, 'Brain', '80 / 40')]
201
+ icon: 'tool-window-level',
202
+ label: 'Window Level',
203
+ commands: setToolActiveToolbar,
204
+ evaluate: 'evaluate.cornerstoneTool'
247
205
  }
248
206
  },
249
207
  // Crosshairs Button
@@ -276,28 +234,11 @@ const toolbarButtons = [{
276
234
  icon: 'tool-create-threshold',
277
235
  label: 'Rectangle ROI Threshold',
278
236
  commands: setToolActiveToolbar,
279
- evaluate: 'evaluate.cornerstoneTool'
280
- }
281
- },
282
- // Fusion PT Colormap Button
283
- {
284
- id: 'fusionPTColormap',
285
- uiType: 'ohif.splitButton',
286
- props: {
287
- groupId: 'fusionPTColormap',
288
- primary: src.ToolbarService.createButton({
289
- id: 'fusionPTColormap',
290
- icon: 'tool-fusion-color',
291
- label: 'Fusion PT Colormap',
292
- tooltip: 'Fusion PT Colormap',
293
- commands: [],
294
- evaluate: 'evaluate.action'
295
- }),
296
- secondary: {
297
- icon: 'chevron-down',
298
- tooltip: 'PET Image Colormap'
237
+ evaluate: {
238
+ name: 'evaluate.cornerstoneTool',
239
+ disabledText: 'Select the PT Axial to enable this tool'
299
240
  },
300
- items: [_createColormap('HSV', 'hsv'), _createColormap('Hot Iron', 'hot_iron'), _createColormap('S PET', 's_pet'), _createColormap('Red Hot', 'red_hot'), _createColormap('Perfusion', 'perfusion'), _createColormap('Rainbow', 'rainbow_2'), _createColormap('SUV', 'suv'), _createColormap('GE 256', 'ge_256'), _createColormap('GE', 'ge'), _createColormap('Siemens', 'siemens')]
241
+ options: 'tmtv.RectangleROIThresholdOptions'
301
242
  }
302
243
  }];
303
244
  /* harmony default export */ const src_toolbarButtons = (toolbarButtons);
@@ -434,7 +375,8 @@ function modeFactory({
434
375
  });
435
376
  unsubscriptions.push(unsubscribe);
436
377
  toolbarService.addButtons(src_toolbarButtons);
437
- toolbarService.createButtonSection('primary', ['MeasurementTools', 'Zoom', 'WindowLevel', 'Crosshairs', 'Pan', 'SyncToggle', 'RectangleROIStartEndThreshold', 'fusionPTColormap']);
378
+ toolbarService.createButtonSection('primary', ['MeasurementTools', 'Zoom', 'WindowLevel', 'Crosshairs', 'Pan', 'SyncToggle']);
379
+ toolbarService.createButtonSection('tmtvToolbox', ['RectangleROIStartEndThreshold']);
438
380
 
439
381
  // For the hanging protocol we need to decide on the window level
440
382
  // based on whether the SUV is corrected or not, hence we can't hard
@@ -11,12 +11,11 @@ __webpack_require__.r(__webpack_exports__);
11
11
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(41766);
12
12
  /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(11374);
13
13
  /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__);
14
- /* harmony import */ var _ohif_core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(78198);
15
- /* harmony import */ var _ohif_ui__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(58046);
16
- /* harmony import */ var react_i18next__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(80619);
17
- /* harmony import */ var _cornerstonejs_tools__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(20767);
18
- /* harmony import */ var _getContextModule__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(4573);
19
- /* harmony import */ var _cornerstonejs_core__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(50719);
14
+ /* harmony import */ var _ohif_ui__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(59134);
15
+ /* harmony import */ var _cornerstonejs_tools__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(20767);
16
+ /* harmony import */ var _getContextModule__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(4573);
17
+ /* harmony import */ var _cornerstonejs_core__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(50719);
18
+ /* harmony import */ var react_i18next__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(80619);
20
19
  function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
21
20
 
22
21
 
@@ -25,30 +24,30 @@ function _extends() { _extends = Object.assign ? Object.assign.bind() : function
25
24
 
26
25
 
27
26
 
28
-
29
- const {
30
- formatDate
31
- } = _ohif_core__WEBPACK_IMPORTED_MODULE_2__.utils;
32
27
  function TrackedCornerstoneViewport(props) {
33
28
  const {
34
29
  displaySets,
35
30
  viewportId,
36
- viewportLabel,
37
31
  servicesManager,
38
32
  extensionManager
39
33
  } = props;
40
- const {
41
- t
42
- } = (0,react_i18next__WEBPACK_IMPORTED_MODULE_4__/* .useTranslation */ .Bd)('Common');
43
34
  const {
44
35
  measurementService,
45
36
  cornerstoneViewportService,
46
- viewportGridService
37
+ viewportGridService,
38
+ viewportActionCornersService
47
39
  } = servicesManager.services;
48
40
 
49
41
  // Todo: handling more than one displaySet on the same viewport
50
42
  const displaySet = displaySets[0];
51
- const [trackedMeasurements, sendTrackedMeasurementsEvent] = (0,_getContextModule__WEBPACK_IMPORTED_MODULE_6__/* .useTrackedMeasurements */ .B)();
43
+ const {
44
+ t
45
+ } = (0,react_i18next__WEBPACK_IMPORTED_MODULE_6__/* .useTranslation */ .Bd)('Common');
46
+ const [viewportGrid] = (0,_ohif_ui__WEBPACK_IMPORTED_MODULE_2__/* .useViewportGrid */ .ih)();
47
+ const {
48
+ activeViewportId
49
+ } = viewportGrid;
50
+ const [trackedMeasurements, sendTrackedMeasurementsEvent] = (0,_getContextModule__WEBPACK_IMPORTED_MODULE_4__/* .useTrackedMeasurements */ .B)();
52
51
  const [isTracked, setIsTracked] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);
53
52
  const [trackedMeasurementUID, setTrackedMeasurementUID] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);
54
53
  const [viewportElem, setViewportElem] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);
@@ -56,24 +55,11 @@ function TrackedCornerstoneViewport(props) {
56
55
  trackedSeries
57
56
  } = trackedMeasurements.context;
58
57
  const {
59
- SeriesDate,
60
- SeriesDescription,
61
- SeriesInstanceUID,
62
- SeriesNumber
58
+ SeriesInstanceUID
63
59
  } = displaySet;
64
- const {
65
- PatientID,
66
- PatientName,
67
- PatientSex,
68
- PatientAge,
69
- SliceThickness,
70
- SpacingBetweenSlices,
71
- StudyDate,
72
- ManufacturerModelName
73
- } = displaySet.images[0];
74
60
  const updateIsTracked = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => {
75
61
  const viewport = cornerstoneViewportService.getCornerstoneViewport(viewportId);
76
- if (viewport instanceof _cornerstonejs_core__WEBPACK_IMPORTED_MODULE_7__.BaseVolumeViewport) {
62
+ if (viewport instanceof _cornerstonejs_core__WEBPACK_IMPORTED_MODULE_5__.BaseVolumeViewport) {
77
63
  // A current image id will only exist for volume viewports that can have measurements tracked.
78
64
  // Typically these are those volume viewports for the series of acquisition.
79
65
  const currentImageId = viewport?.getCurrentImageId();
@@ -91,12 +77,12 @@ function TrackedCornerstoneViewport(props) {
91
77
  const onElementEnabled = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(evt => {
92
78
  if (evt.detail.element !== viewportElem) {
93
79
  // The VOLUME_VIEWPORT_NEW_VOLUME event allows updateIsTracked to reliably fetch the image id for a volume viewport.
94
- evt.detail.element?.addEventListener(_cornerstonejs_core__WEBPACK_IMPORTED_MODULE_7__.Enums.Events.VOLUME_VIEWPORT_NEW_VOLUME, updateIsTracked);
80
+ evt.detail.element?.addEventListener(_cornerstonejs_core__WEBPACK_IMPORTED_MODULE_5__.Enums.Events.VOLUME_VIEWPORT_NEW_VOLUME, updateIsTracked);
95
81
  setViewportElem(evt.detail.element);
96
82
  }
97
83
  }, [updateIsTracked, viewportElem]);
98
84
  const onElementDisabled = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => {
99
- viewportElem?.removeEventListener(_cornerstonejs_core__WEBPACK_IMPORTED_MODULE_7__.Enums.Events.VOLUME_VIEWPORT_NEW_VOLUME, updateIsTracked);
85
+ viewportElem?.removeEventListener(_cornerstonejs_core__WEBPACK_IMPORTED_MODULE_5__.Enums.Events.VOLUME_VIEWPORT_NEW_VOLUME, updateIsTracked);
100
86
  }, [updateIsTracked, viewportElem]);
101
87
  (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(updateIsTracked, [updateIsTracked]);
102
88
  (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
@@ -114,7 +100,7 @@ function TrackedCornerstoneViewport(props) {
114
100
  }, [updateIsTracked, viewportId]);
115
101
  (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
116
102
  if (isTracked) {
117
- _cornerstonejs_tools__WEBPACK_IMPORTED_MODULE_5__.annotation.config.style.setViewportToolStyles(viewportId, {
103
+ _cornerstonejs_tools__WEBPACK_IMPORTED_MODULE_3__.annotation.config.style.setViewportToolStyles(viewportId, {
118
104
  global: {
119
105
  lineDash: ''
120
106
  }
@@ -122,14 +108,14 @@ function TrackedCornerstoneViewport(props) {
122
108
  cornerstoneViewportService.getRenderingEngine().renderViewport(viewportId);
123
109
  return;
124
110
  }
125
- _cornerstonejs_tools__WEBPACK_IMPORTED_MODULE_5__.annotation.config.style.setViewportToolStyles(viewportId, {
111
+ _cornerstonejs_tools__WEBPACK_IMPORTED_MODULE_3__.annotation.config.style.setViewportToolStyles(viewportId, {
126
112
  global: {
127
113
  lineDash: '4,4'
128
114
  }
129
115
  });
130
116
  cornerstoneViewportService.getRenderingEngine().renderViewport(viewportId);
131
117
  return () => {
132
- _cornerstonejs_tools__WEBPACK_IMPORTED_MODULE_5__.annotation.config.style.setViewportToolStyles(viewportId, {});
118
+ _cornerstonejs_tools__WEBPACK_IMPORTED_MODULE_3__.annotation.config.style.setViewportToolStyles(viewportId, {});
133
119
  };
134
120
  }, [isTracked]);
135
121
 
@@ -178,14 +164,31 @@ function TrackedCornerstoneViewport(props) {
178
164
  });
179
165
  };
180
166
  }, [measurementService, sendTrackedMeasurementsEvent, viewportId, viewportGridService]);
181
- function switchMeasurement(direction) {
167
+ const switchMeasurement = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(direction => {
182
168
  const newTrackedMeasurementUID = _getNextMeasurementUID(direction, servicesManager, trackedMeasurementUID, trackedMeasurements);
183
169
  if (!newTrackedMeasurementUID) {
184
170
  return;
185
171
  }
186
172
  setTrackedMeasurementUID(newTrackedMeasurementUID);
187
173
  measurementService.jumpToMeasurement(viewportId, newTrackedMeasurementUID);
188
- }
174
+ }, [measurementService, servicesManager, trackedMeasurementUID, trackedMeasurements, viewportId]);
175
+ (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
176
+ const statusComponent = _getStatusComponent(isTracked, t);
177
+ const arrowsComponent = _getArrowsComponent(isTracked, switchMeasurement, viewportId === activeViewportId);
178
+ viewportActionCornersService.setComponents([{
179
+ viewportId,
180
+ id: 'viewportStatusComponent',
181
+ component: statusComponent,
182
+ indexPriority: -100,
183
+ location: viewportActionCornersService.LOCATIONS.topLeft
184
+ }, {
185
+ viewportId,
186
+ id: 'viewportActionArrowsComponent',
187
+ component: arrowsComponent,
188
+ indexPriority: 0,
189
+ location: viewportActionCornersService.LOCATIONS.topRight
190
+ }]);
191
+ }, [activeViewportId, isTracked, switchMeasurement, viewportActionCornersService, viewportId]);
189
192
  const getCornerstoneViewport = () => {
190
193
  const {
191
194
  component: Component
@@ -195,32 +198,7 @@ function TrackedCornerstoneViewport(props) {
195
198
  onElementDisabled: onElementDisabled
196
199
  }));
197
200
  };
198
- return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_ohif_ui__WEBPACK_IMPORTED_MODULE_3__/* .ViewportActionBar */ .cS, {
199
- onDoubleClick: evt => {
200
- evt.stopPropagation();
201
- evt.preventDefault();
202
- },
203
- useAltStyling: isTracked,
204
- onArrowsClick: direction => switchMeasurement(direction),
205
- getStatusComponent: () => _getStatusComponent(isTracked),
206
- studyData: {
207
- label: viewportLabel,
208
- studyDate: formatDate(SeriesDate) || formatDate(StudyDate) || t('NoStudyDate'),
209
- currentSeries: SeriesNumber,
210
- // TODO - switch entire currentSeries to be UID based or actual position based
211
- seriesDescription: SeriesDescription,
212
- patientInformation: {
213
- patientName: PatientName ? _ohif_core__WEBPACK_IMPORTED_MODULE_2__/* ["default"].utils */ .Ay.utils.formatPN(PatientName) : '',
214
- patientSex: PatientSex || '',
215
- patientAge: PatientAge || '',
216
- MRN: PatientID || '',
217
- thickness: SliceThickness ? `${parseFloat(SliceThickness).toFixed(2)}` : '',
218
- thicknessUnits: t('mm'),
219
- spacing: SpacingBetweenSlices !== undefined ? `${parseFloat(SpacingBetweenSlices).toFixed(2)}${t('mm')}` : '',
220
- scanner: ManufacturerModelName || ''
221
- }
222
- }
223
- }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("div", {
201
+ return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("div", {
224
202
  className: "relative flex h-full w-full flex-row overflow-hidden"
225
203
  }, getCornerstoneViewport()));
226
204
  }
@@ -268,35 +246,38 @@ function _getNextMeasurementUID(direction, servicesManager, trackedMeasurementId
268
246
  // Not tracking a measurement, or previous measurement now deleted, revert to 0.
269
247
  measurementIndex = 0;
270
248
  } else {
271
- if (direction === 'left') {
272
- measurementIndex--;
273
- if (measurementIndex < 0) {
274
- measurementIndex = measurementCount - 1;
275
- }
276
- } else if (direction === 'right') {
277
- measurementIndex++;
278
- if (measurementIndex === measurementCount) {
279
- measurementIndex = 0;
280
- }
249
+ measurementIndex += direction;
250
+ if (measurementIndex < 0) {
251
+ measurementIndex = measurementCount - 1;
252
+ } else if (measurementIndex === measurementCount) {
253
+ measurementIndex = 0;
281
254
  }
282
255
  }
283
256
  const newTrackedMeasurementId = uids[measurementIndex];
284
257
  return newTrackedMeasurementId;
285
258
  }
286
- function _getStatusComponent(isTracked) {
287
- const {
288
- t
289
- } = (0,react_i18next__WEBPACK_IMPORTED_MODULE_4__/* .useTranslation */ .Bd)('TrackedCornerstoneViewport');
290
- const trackedIcon = isTracked ? 'status-tracked' : 'status-untracked';
259
+ const _getArrowsComponent = (isTracked, switchMeasurement, isActiveViewport) => {
260
+ if (!isTracked) {
261
+ return null;
262
+ }
263
+ return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_ohif_ui__WEBPACK_IMPORTED_MODULE_2__/* .ViewportActionArrows */ .$I, {
264
+ onArrowsClick: direction => switchMeasurement(direction),
265
+ className: isActiveViewport ? 'visible' : 'invisible group-hover:visible'
266
+ });
267
+ };
268
+ function _getStatusComponent(isTracked, t) {
269
+ if (!isTracked) {
270
+ return null;
271
+ }
291
272
  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("div", {
292
273
  className: "relative"
293
- }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_ohif_ui__WEBPACK_IMPORTED_MODULE_3__/* .Tooltip */ .m_, {
274
+ }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_ohif_ui__WEBPACK_IMPORTED_MODULE_2__/* .Tooltip */ .m_, {
294
275
  position: "bottom-left",
295
276
  content: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("div", {
296
277
  className: "flex py-2"
297
278
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("div", {
298
279
  className: "flex pt-1"
299
- }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_ohif_ui__WEBPACK_IMPORTED_MODULE_3__/* .Icon */ .In, {
280
+ }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_ohif_ui__WEBPACK_IMPORTED_MODULE_2__/* .Icon */ .In, {
300
281
  name: "info-link",
301
282
  className: "text-primary-main w-4"
302
283
  })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("div", {
@@ -304,8 +285,8 @@ function _getStatusComponent(isTracked) {
304
285
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("span", {
305
286
  className: "text-common-light text-base"
306
287
  }, isTracked ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, t('Series is tracked and can be viewed in the measurement panel')) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, t('Measurements for untracked series will not be shown in the measurements panel')))))
307
- }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_ohif_ui__WEBPACK_IMPORTED_MODULE_3__/* .Icon */ .In, {
308
- name: trackedIcon,
288
+ }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_ohif_ui__WEBPACK_IMPORTED_MODULE_2__/* .Icon */ .In, {
289
+ name: 'viewport-status-tracked',
309
290
  className: "text-aqua-pale"
310
291
  })));
311
292
  }
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
- (globalThis["webpackChunk"] = globalThis["webpackChunk"] || []).push([[270],{
2
+ (globalThis["webpackChunk"] = globalThis["webpackChunk"] || []).push([[889],{
3
3
 
4
4
  /***/ 62889:
5
5
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
@@ -20,10 +20,10 @@ const id = package_namespaceObject.UU;
20
20
 
21
21
  // EXTERNAL MODULE: ../../../node_modules/react/index.js
22
22
  var react = __webpack_require__(41766);
23
- // EXTERNAL MODULE: ../../ui/src/index.js + 497 modules
24
- var src = __webpack_require__(58046);
25
- // EXTERNAL MODULE: ../../core/src/index.ts + 67 modules
26
- var core_src = __webpack_require__(78198);
23
+ // EXTERNAL MODULE: ../../ui/src/index.js + 521 modules
24
+ var src = __webpack_require__(59134);
25
+ // EXTERNAL MODULE: ../../core/src/index.ts + 68 modules
26
+ var core_src = __webpack_require__(85073);
27
27
  // EXTERNAL MODULE: ../../../node_modules/react-i18next/dist/es/index.js + 15 modules
28
28
  var es = __webpack_require__(80619);
29
29
  // EXTERNAL MODULE: ../../../node_modules/mathjs/lib/esm/index.js + 996 modules
@@ -31,8 +31,8 @@ __webpack_require__.d(utils_namespaceObject, {
31
31
 
32
32
  // EXTERNAL MODULE: ../../../node_modules/dicomweb-client/build/dicomweb-client.es.js
33
33
  var dicomweb_client_es = __webpack_require__(36922);
34
- // EXTERNAL MODULE: ../../core/src/index.ts + 67 modules
35
- var src = __webpack_require__(78198);
34
+ // EXTERNAL MODULE: ../../core/src/index.ts + 68 modules
35
+ var src = __webpack_require__(85073);
36
36
  // EXTERNAL MODULE: ../../core/src/utils/sortStudy.ts
37
37
  var sortStudy = __webpack_require__(45476);
38
38
  ;// CONCATENATED MODULE: ../../../extensions/default/src/DicomWebDataSource/qido.js
@@ -2484,8 +2484,8 @@ var react = __webpack_require__(41766);
2484
2484
  // EXTERNAL MODULE: ../../../node_modules/prop-types/index.js
2485
2485
  var prop_types = __webpack_require__(11374);
2486
2486
  var prop_types_default = /*#__PURE__*/__webpack_require__.n(prop_types);
2487
- // EXTERNAL MODULE: ../../ui/src/index.js + 497 modules
2488
- var ui_src = __webpack_require__(58046);
2487
+ // EXTERNAL MODULE: ../../ui/src/index.js + 521 modules
2488
+ var ui_src = __webpack_require__(59134);
2489
2489
  // EXTERNAL MODULE: ./state/index.js + 1 modules
2490
2490
  var state = __webpack_require__(15575);
2491
2491
  // EXTERNAL MODULE: ../node_modules/react-router-dom/dist/index.js
@@ -2494,17 +2494,12 @@ var dist = __webpack_require__(37396);
2494
2494
  var es = __webpack_require__(80619);
2495
2495
  // EXTERNAL MODULE: ../node_modules/react-router/dist/index.js
2496
2496
  var react_router_dist = __webpack_require__(10971);
2497
- // EXTERNAL MODULE: ../../i18n/src/index.js + 148 modules
2498
- var i18n_src = __webpack_require__(69536);
2499
- // EXTERNAL MODULE: ../../../node_modules/classnames/index.js
2500
- var classnames = __webpack_require__(61466);
2501
- var classnames_default = /*#__PURE__*/__webpack_require__.n(classnames);
2497
+ // EXTERNAL MODULE: ../../i18n/src/index.js + 150 modules
2498
+ var i18n_src = __webpack_require__(912);
2502
2499
  ;// CONCATENATED MODULE: ../../../extensions/default/src/Toolbar/Toolbar.tsx
2503
2500
  function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
2504
2501
 
2505
2502
 
2506
-
2507
-
2508
2503
  function Toolbar({
2509
2504
  servicesManager
2510
2505
  }) {
@@ -2527,23 +2522,13 @@ function Toolbar({
2527
2522
  Component,
2528
2523
  componentProps
2529
2524
  } = toolDef;
2530
- const {
2531
- disabled
2532
- } = componentProps;
2533
2525
  const tool = /*#__PURE__*/react.createElement(Component, _extends({
2534
2526
  key: id,
2535
2527
  id: id,
2536
2528
  onInteraction: onInteraction,
2537
2529
  servicesManager: servicesManager
2538
2530
  }, componentProps));
2539
- return disabled ? /*#__PURE__*/react.createElement(ui_src/* Tooltip */.m_, {
2540
- key: id,
2541
- position: "bottom",
2542
- content: componentProps.label,
2543
- secondaryContent: 'Not available on the current viewport'
2544
- }, /*#__PURE__*/react.createElement("div", {
2545
- className: classnames_default()('mr-1')
2546
- }, tool)) : /*#__PURE__*/react.createElement("div", {
2531
+ return /*#__PURE__*/react.createElement("div", {
2547
2532
  key: id,
2548
2533
  className: "mr-1"
2549
2534
  }, tool);
@@ -2604,8 +2589,8 @@ function ViewerHeader({
2604
2589
  hotkeyDefinitions,
2605
2590
  hotkeyDefaults
2606
2591
  } = hotkeysManager;
2607
- const versionNumber = "3.8.0-beta.66";
2608
- const commitHash = "158a1816703e0ad66cae08cb9bd1ffb93bbd8d43";
2592
+ const versionNumber = "3.8.0-beta.68";
2593
+ const commitHash = "9f3235ff096636aafa88d8a42859e8dc85d9036d";
2609
2594
  const menuOptions = [{
2610
2595
  title: t('Header:About'),
2611
2596
  icon: 'info',
@@ -2662,7 +2647,9 @@ function ViewerHeader({
2662
2647
  menuOptions: menuOptions,
2663
2648
  isReturnEnabled: !!appConfig.showStudyList,
2664
2649
  onClickReturnButton: onClickReturnButton,
2665
- WhiteLabeling: appConfig.whiteLabeling
2650
+ WhiteLabeling: appConfig.whiteLabeling,
2651
+ showPatientInfo: appConfig.showPatientInfo,
2652
+ servicesManager: servicesManager
2666
2653
  }, /*#__PURE__*/react.createElement(ui_src/* ErrorBoundary */.tH, {
2667
2654
  context: "Primary Toolbar"
2668
2655
  }, /*#__PURE__*/react.createElement("div", {
@@ -5191,6 +5178,9 @@ var moment = __webpack_require__(8291);
5191
5178
  var moment_default = /*#__PURE__*/__webpack_require__.n(moment);
5192
5179
  // EXTERNAL MODULE: ../../../node_modules/react-window/dist/index.esm.js
5193
5180
  var index_esm = __webpack_require__(6943);
5181
+ // EXTERNAL MODULE: ../../../node_modules/classnames/index.js
5182
+ var classnames = __webpack_require__(61466);
5183
+ var classnames_default = /*#__PURE__*/__webpack_require__.n(classnames);
5194
5184
  ;// CONCATENATED MODULE: ../../../extensions/default/src/DicomTagBrowser/DicomTagTable.tsx
5195
5185
 
5196
5186
 
@@ -13,8 +13,8 @@ __webpack_require__.d(__webpack_exports__, {
13
13
  "default": () => (/* binding */ microscopy_src)
14
14
  });
15
15
 
16
- // EXTERNAL MODULE: ../../core/src/index.ts + 67 modules
17
- var src = __webpack_require__(78198);
16
+ // EXTERNAL MODULE: ../../core/src/index.ts + 68 modules
17
+ var src = __webpack_require__(85073);
18
18
  // EXTERNAL MODULE: ../../../node_modules/i18next/dist/esm/i18next.js
19
19
  var i18next = __webpack_require__(92344);
20
20
  ;// CONCATENATED MODULE: ../../../modes/microscopy/package.json
@@ -21,8 +21,8 @@ const package_namespaceObject = /*#__PURE__*/JSON.parse('{"UU":"@ohif/extension-
21
21
  const id = package_namespaceObject.UU;
22
22
  const SOPClassHandlerId = `${id}.sopClassHandlerModule.dicom-pdf`;
23
23
 
24
- // EXTERNAL MODULE: ../../core/src/index.ts + 67 modules
25
- var src = __webpack_require__(78198);
24
+ // EXTERNAL MODULE: ../../core/src/index.ts + 68 modules
25
+ var src = __webpack_require__(85073);
26
26
  ;// CONCATENATED MODULE: ../../../extensions/dicom-pdf/src/getSopClassHandlerModule.js
27
27
 
28
28
 
@@ -21,8 +21,8 @@ const package_namespaceObject = /*#__PURE__*/JSON.parse('{"UU":"@ohif/extension-
21
21
  const id = package_namespaceObject.UU;
22
22
  const SOPClassHandlerId = `${id}.sopClassHandlerModule.dicom-video`;
23
23
 
24
- // EXTERNAL MODULE: ../../core/src/index.ts + 67 modules
25
- var src = __webpack_require__(78198);
24
+ // EXTERNAL MODULE: ../../core/src/index.ts + 68 modules
25
+ var src = __webpack_require__(85073);
26
26
  ;// CONCATENATED MODULE: ../../../extensions/dicom-video/src/getSopClassHandlerModule.js
27
27
 
28
28