@ohif/app 3.8.0-beta.8 → 3.8.0-beta.81

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 (99) hide show
  1. package/dist/{220.bundle.f7e1c96c94245e70f2be.js → 109.bundle.b4fee2a22b622839baf5.js} +4466 -3715
  2. package/dist/{471.bundle.49c8d281adbae4a2c4df.js → 121.bundle.47f05840a5b3cdf75543.js} +94 -113
  3. package/dist/141.bundle.556b4c1e4cab770417ac.js +8620 -0
  4. package/dist/{687.bundle.9065db35c01823286f08.js → 164.bundle.fadc7c5d634402c73b5f.js} +22 -38
  5. package/dist/17dd54813d5acc10bf8f.wasm +0 -0
  6. package/dist/183.bundle.a3e238998be71c4b2af8.js +30410 -0
  7. package/dist/{506.bundle.5731bb4349e266491225.js → 188.bundle.51dc4b37920f45594393.js} +23 -28
  8. package/dist/{342.bundle.e7c3d500f86fdfcc62b5.js → 206.bundle.fcaa081a0d1f68095c31.js} +1991 -1145
  9. package/dist/20fc4c659b85ccd2a9c0.wasm +0 -0
  10. package/dist/217.bundle.d44bbaa50b6fa563fe15.js +115126 -0
  11. package/dist/{451.bundle.57c21db5d003c75e9d61.js → 295.bundle.5ace95771ced62bdcab8.js} +111 -128
  12. package/dist/{125.bundle.253395f320b72180da63.js → 297.bundle.194d8985ab974839b5b6.js} +7 -8
  13. package/dist/{19.bundle.f77c5787b6d8ac0b638b.js → 325.bundle.fd8e0c18db4708d03a91.js} +477 -373
  14. package/dist/335.bundle.8400aa5a88697a6b9d53.js +2590 -0
  15. package/dist/{202.bundle.d3490836f71e001dd30f.js → 342.bundle.e6d0bba29351b5650a8c.js} +566 -868
  16. package/dist/{776.bundle.a2dedb405a12ffd7699b.js → 41.bundle.0905b258a90a7c6437bb.js} +7453 -3624
  17. package/dist/422.bundle.c6fd037b075dd54f1ba7.js +865 -0
  18. package/dist/{957.bundle.9ea4506963ef8b2d84ba.js → 433.bundle.e0018820758f5a86fa7f.js} +14797 -27561
  19. package/dist/445.bundle.38c6d2af64e41cd7c614.js +7835 -0
  20. package/dist/{126.bundle.6e7111d58bcc937ffd80.js → 448.bundle.5e6da31477887bf53016.js} +356 -430
  21. package/dist/487.bundle.89d973049defb3ba6cb7.js +1876 -0
  22. package/dist/{886.bundle.c8dd3ecc42a4253de278.js → 530.bundle.207b38c15c4c01e4db0e.js} +104 -121
  23. package/dist/{250.bundle.aea3335667054bdefe36.js → 544.bundle.1c1f57118560046649c1.js} +37 -62
  24. package/dist/574.bundle.d648fea691d6709bf2b4.js +2652 -0
  25. package/dist/{181.css → 574.css} +1 -1
  26. package/dist/{410.bundle.15c855b0ff4a1a674fb8.js → 594.bundle.84076375b127b9c7f673.js} +183 -221
  27. package/dist/{221.bundle.aef554202c58483cb34e.js → 633.bundle.acab89baaa06a299d679.js} +365 -553
  28. package/dist/{774.bundle.4b2dc46a35012b898e1a.js → 644.bundle.1e77691d2eeb96a423b0.js} +1852 -8945
  29. package/dist/{663.bundle.d7be28450db14266cdd0.js → 669.bundle.b17e8a621e38d92c653f.js} +310 -265
  30. package/dist/699.bundle.9367d7ef9f7615b2e733.js +772 -0
  31. package/dist/702.bundle.963481fbf871984b646f.js +8426 -0
  32. package/dist/722.bundle.afab1fe6bfcd569130ac.js +1083 -0
  33. package/dist/{359.bundle.45ecb3d28e8c22142606.js → 724.bundle.55f9f49816de931af91a.js} +165 -260
  34. package/dist/{757.bundle.ec8301d8e70d2b990f65.js → 726.bundle.0b3d9277d22fe7e15b89.js} +512 -879
  35. package/dist/{530.bundle.a03b6f942ace3e1baa1e.js → 835.bundle.15aff0b7433bb0dd6d6d.js} +37 -30
  36. package/dist/{822.bundle.82cdc418f8f56da6060b.js → 862.bundle.d32ab08e64806b2e964d.js} +81 -97
  37. package/dist/{236.bundle.4e9924934a747afac132.js → 889.bundle.8ef8b723d0163d5d135c.js} +207 -199
  38. package/dist/{281.bundle.deb7492d143e7768d8bf.js → 905.bundle.8a96e1a75b7cfe5ec093.js} +157 -124
  39. package/dist/{814.bundle.c8c951d20039b63b865a.js → 907.bundle.5c88ed911bed18582da4.js} +16 -30
  40. package/dist/{417.bundle.af0a207c29b109f84159.js → 931.bundle.d270a1fda9a2836c3cc5.js} +26 -26
  41. package/dist/{686.bundle.dccef1f36e4bc79bcc48.js → 939.bundle.9d93b2e47c52338747a2.js} +7 -8
  42. package/dist/94.bundle.f5f2479c214180d05d42.js +778 -0
  43. package/dist/{12.bundle.b5ca13e5363f170ecb3b.js → 961.bundle.f4e52bc76d3044d05372.js} +20 -33
  44. package/dist/app-config.js +1 -0
  45. package/dist/app.bundle.css +16 -13
  46. package/dist/{app.bundle.a978edc59b9d82f2eb22.js → app.bundle.ed937512f7d19d61c411.js} +183396 -87682
  47. package/dist/assets/images/CT-AAA.png +0 -0
  48. package/dist/assets/images/CT-AAA2.png +0 -0
  49. package/dist/assets/images/CT-Air.png +0 -0
  50. package/dist/assets/images/CT-Bone.png +0 -0
  51. package/dist/assets/images/CT-Bones.png +0 -0
  52. package/dist/assets/images/CT-Cardiac.png +0 -0
  53. package/dist/assets/images/CT-Cardiac2.png +0 -0
  54. package/dist/assets/images/CT-Cardiac3.png +0 -0
  55. package/dist/assets/images/CT-Chest-Contrast-Enhanced.png +0 -0
  56. package/dist/assets/images/CT-Chest-Vessels.png +0 -0
  57. package/dist/assets/images/CT-Coronary-Arteries-2.png +0 -0
  58. package/dist/assets/images/CT-Coronary-Arteries-3.png +0 -0
  59. package/dist/assets/images/CT-Coronary-Arteries.png +0 -0
  60. package/dist/assets/images/CT-Cropped-Volume-Bone.png +0 -0
  61. package/dist/assets/images/CT-Fat.png +0 -0
  62. package/dist/assets/images/CT-Liver-Vasculature.png +0 -0
  63. package/dist/assets/images/CT-Lung.png +0 -0
  64. package/dist/assets/images/CT-MIP.png +0 -0
  65. package/dist/assets/images/CT-Muscle.png +0 -0
  66. package/dist/assets/images/CT-Pulmonary-Arteries.png +0 -0
  67. package/dist/assets/images/CT-Soft-Tissue.png +0 -0
  68. package/dist/assets/images/DTI-FA-Brain.png +0 -0
  69. package/dist/assets/images/MR-Angio.png +0 -0
  70. package/dist/assets/images/MR-Default.png +0 -0
  71. package/dist/assets/images/MR-MIP.png +0 -0
  72. package/dist/assets/images/MR-T2-Brain.png +0 -0
  73. package/dist/assets/images/VolumeRendering.png +0 -0
  74. package/dist/cornerstoneDICOMImageLoader.min.js +1 -1
  75. package/dist/cornerstoneDICOMImageLoader.min.js.map +1 -1
  76. package/dist/{dicom-microscopy-viewer.bundle.2c146384eb9466d02ff8.js → dicom-microscopy-viewer.bundle.d3a56dc9f62df5e11019.js} +3 -3
  77. package/dist/histogram-worker.bundle.829e14ec12c2b41a4323.js +359 -0
  78. package/dist/index.html +1 -1
  79. package/dist/{index.worker.e62ecca63f1a2e124230.worker.js → index.worker.64c896c4316fcd506666.worker.js} +2 -2
  80. package/dist/index.worker.64c896c4316fcd506666.worker.js.map +1 -0
  81. package/dist/polySeg.bundle.f1a6ece1396dc1385155.js +249 -0
  82. package/dist/serve.json +12 -0
  83. package/dist/sw.js +1 -1
  84. package/package.json +26 -22
  85. package/dist/181.bundle.a62b9f0ec692299acb35.js +0 -1527
  86. package/dist/23.bundle.e008ad788170f2ed5569.js +0 -900
  87. package/dist/604.bundle.a51f83e64004bca5f497.js +0 -1848
  88. package/dist/613.bundle.9e7072e5b575354fe51e.js +0 -532
  89. package/dist/743.bundle.489f7df3a089d4d374e1.js +0 -78007
  90. package/dist/75788f12450d4c5ed494.wasm +0 -0
  91. package/dist/775.bundle.2285e7e0e67878948c0d.js +0 -1009
  92. package/dist/788.bundle.207ac23c0dfa70cbe3fb.js +0 -2682
  93. package/dist/82.bundle.d6fdcca0f67540bb226a.js +0 -1049
  94. package/dist/index.worker.e62ecca63f1a2e124230.worker.js.map +0 -1
  95. /package/dist/{19.css → 325.css} +0 -0
  96. /package/dist/{776.css → 41.css} +0 -0
  97. /package/dist/{579.css → 481.css} +0 -0
  98. /package/dist/{250.css → 544.css} +0 -0
  99. /package/dist/{221.css → 633.css} +0 -0
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
- (self["webpackChunk"] = self["webpackChunk"] || []).push([[359],{
2
+ (globalThis["webpackChunk"] = globalThis["webpackChunk"] || []).push([[724],{
3
3
 
4
- /***/ 22359:
4
+ /***/ 28724:
5
5
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
6
6
 
7
7
  // ESM COMPAT FLAG
@@ -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 + 65 modules
16
- var src = __webpack_require__(71771);
17
- // EXTERNAL MODULE: ../../ui/src/index.js + 486 modules
18
- var ui_src = __webpack_require__(22582);
15
+ // EXTERNAL MODULE: ../../core/src/index.ts + 70 modules
16
+ var src = __webpack_require__(55411);
19
17
  ;// CONCATENATED MODULE: ../../../modes/tmtv/src/initToolGroups.js
20
18
  const toolGroupIds = {
21
19
  CT: 'ctToolGroup',
@@ -25,8 +23,7 @@ const toolGroupIds = {
25
23
  default: 'default'
26
24
  // MPR: 'mpr',
27
25
  };
28
-
29
- function _initToolGroups(toolNames, Enums, toolGroupService, commandsManager) {
26
+ function _initToolGroups(toolNames, Enums, toolGroupService, commandsManager, modeLabelConfig) {
30
27
  const tools = {
31
28
  active: [{
32
29
  toolName: toolNames.WindowLevel,
@@ -53,16 +50,24 @@ function _initToolGroups(toolNames, Enums, toolGroupService, commandsManager) {
53
50
  toolName: toolNames.ArrowAnnotate,
54
51
  configuration: {
55
52
  getTextCallback: (callback, eventDetails) => {
56
- commandsManager.runCommand('arrowTextCallback', {
57
- callback,
58
- eventDetails
59
- });
53
+ if (modeLabelConfig) {
54
+ callback(' ');
55
+ } else {
56
+ commandsManager.runCommand('arrowTextCallback', {
57
+ callback,
58
+ eventDetails
59
+ });
60
+ }
60
61
  },
61
- changeTextCallback: (data, eventDetails, callback) => commandsManager.runCommand('arrowTextCallback', {
62
- callback,
63
- data,
64
- eventDetails
65
- })
62
+ changeTextCallback: (data, eventDetails, callback) => {
63
+ if (modeLabelConfig === undefined) {
64
+ commandsManager.runCommand('arrowTextCallback', {
65
+ callback,
66
+ data,
67
+ eventDetails
68
+ });
69
+ }
70
+ }
66
71
  }
67
72
  }, {
68
73
  toolName: toolNames.Bidirectional
@@ -90,6 +95,7 @@ function _initToolGroups(toolNames, Enums, toolGroupService, commandsManager) {
90
95
  toolName: toolNames.Crosshairs,
91
96
  configuration: {
92
97
  viewportIndicators: false,
98
+ disableOnPassive: true,
93
99
  autoPan: {
94
100
  enabled: false,
95
101
  panSize: 10
@@ -112,7 +118,7 @@ function _initToolGroups(toolNames, Enums, toolGroupService, commandsManager) {
112
118
  active: [{
113
119
  toolName: toolNames.VolumeRotateMouseWheel,
114
120
  configuration: {
115
- rotateIncrementDegrees: 0.1
121
+ rotateIncrementDegrees: 5
116
122
  }
117
123
  }, {
118
124
  toolName: toolNames.MipJumpToClick,
@@ -125,236 +131,137 @@ function _initToolGroups(toolNames, Enums, toolGroupService, commandsManager) {
125
131
  }],
126
132
  enabled: [{
127
133
  toolName: toolNames.SegmentationDisplay
134
+ }, {
135
+ toolName: toolNames.OrientationMarker,
136
+ configuration: {
137
+ orientationWidget: {
138
+ viewportCorner: 'BOTTOM_LEFT'
139
+ }
140
+ }
128
141
  }]
129
142
  };
130
143
  toolGroupService.createToolGroupAndAddTools(toolGroupIds.MIP, mipTools);
131
144
  }
132
- function initToolGroups(toolNames, Enums, toolGroupService, commandsManager) {
133
- _initToolGroups(toolNames, Enums, toolGroupService, commandsManager);
145
+ function initToolGroups(toolNames, Enums, toolGroupService, commandsManager, modeLabelConfig) {
146
+ _initToolGroups(toolNames, Enums, toolGroupService, commandsManager, modeLabelConfig);
134
147
  }
135
148
  /* harmony default export */ const src_initToolGroups = (initToolGroups);
136
149
  ;// CONCATENATED MODULE: ../../../modes/tmtv/src/toolbarButtons.js
137
- // TODO: torn, can either bake this here; or have to create a whole new button type
138
- // Only ways that you can pass in a custom React component for render :l
139
-
140
150
 
141
151
 
142
152
  const {
143
153
  windowLevelPresets
144
154
  } = src.defaults;
145
- /**
146
- *
147
- * @param {*} type - 'tool' | 'action' | 'toggle'
148
- * @param {*} id
149
- * @param {*} icon
150
- * @param {*} label
151
- */
152
- function _createButton(type, id, icon, label, commands, tooltip) {
153
- return {
154
- id,
155
- icon,
156
- label,
157
- type,
158
- commands,
159
- tooltip
160
- };
161
- }
162
- function _createColormap(label, colormap) {
163
- return {
164
- id: label,
165
- label,
166
- type: 'action',
167
- commands: [{
168
- commandName: 'setFusionPTColormap',
169
- commandOptions: {
170
- toolGroupId: toolGroupIds.Fusion,
171
- colormap
172
- }
173
- }]
174
- };
175
- }
176
- const _createActionButton = _createButton.bind(null, 'action');
177
- const _createToggleButton = _createButton.bind(null, 'toggle');
178
- const _createToolButton = _createButton.bind(null, 'tool');
179
-
180
- /**
181
- *
182
- * @param {*} preset - preset number (from above import)
183
- * @param {*} title
184
- * @param {*} subtitle
185
- */
186
- function _createWwwcPreset(preset, title, subtitle) {
187
- return {
188
- id: preset.toString(),
189
- title,
190
- subtitle,
191
- type: 'action',
192
- commands: [{
193
- commandName: 'setWindowLevel',
194
- commandOptions: {
195
- ...windowLevelPresets[preset]
196
- },
197
- context: 'CORNERSTONE'
198
- }]
199
- };
200
- }
201
- function _createCommands(commandName, toolName, toolGroupIds) {
202
- return toolGroupIds.map(toolGroupId => ({
203
- /* It's a command that is being run when the button is clicked. */
204
- commandName,
205
- commandOptions: {
206
- toolName,
207
- toolGroupId
208
- },
209
- context: 'CORNERSTONE'
210
- }));
211
- }
212
- const toolbarButtons = [
213
- // Measurement
214
- {
155
+ const setToolActiveToolbar = {
156
+ commandName: 'setToolActiveToolbar',
157
+ commandOptions: {
158
+ toolGroupIds: [toolGroupIds.CT, toolGroupIds.PT, toolGroupIds.Fusion]
159
+ }
160
+ };
161
+ const toolbarButtons = [{
215
162
  id: 'MeasurementTools',
216
- type: 'ohif.splitButton',
163
+ uiType: 'ohif.splitButton',
217
164
  props: {
218
165
  groupId: 'MeasurementTools',
219
- isRadio: true,
220
- // ?
221
- // Switch?
222
- primary: _createToolButton('Length', 'tool-length', 'Length', [..._createCommands('setToolActive', 'Length', [toolGroupIds.CT, toolGroupIds.PT, toolGroupIds.Fusion
223
- // toolGroupIds.MPR,
224
- ])], 'Length'),
166
+ primary: src.ToolbarService.createButton({
167
+ id: 'Length',
168
+ icon: 'tool-length',
169
+ label: 'Length',
170
+ tooltip: 'Length Tool',
171
+ commands: setToolActiveToolbar,
172
+ evaluate: 'evaluate.cornerstoneTool'
173
+ }),
225
174
  secondary: {
226
175
  icon: 'chevron-down',
227
- label: '',
228
- isActive: true,
229
176
  tooltip: 'More Measure Tools'
230
177
  },
231
- items: [_createToolButton('Length', 'tool-length', 'Length', [..._createCommands('setToolActive', 'Length', [toolGroupIds.CT, toolGroupIds.PT, toolGroupIds.Fusion
232
- // toolGroupIds.MPR,
233
- ])], 'Length Tool'), _createToolButton('Bidirectional', 'tool-bidirectional', 'Bidirectional', [..._createCommands('setToolActive', 'Bidirectional', [toolGroupIds.CT, toolGroupIds.PT, toolGroupIds.Fusion
234
- // toolGroupIds.MPR,
235
- ])], 'Bidirectional Tool'), _createToolButton('ArrowAnnotate', 'tool-annotate', 'Annotation', [..._createCommands('setToolActive', 'ArrowAnnotate', [toolGroupIds.CT, toolGroupIds.PT, toolGroupIds.Fusion
236
- // toolGroupIds.MPR,
237
- ])], 'Arrow Annotate'), _createToolButton('EllipticalROI', 'tool-elipse', 'Ellipse', [..._createCommands('setToolActive', 'EllipticalROI', [toolGroupIds.CT, toolGroupIds.PT, toolGroupIds.Fusion
238
- // toolGroupIds.MPR,
239
- ])], 'Ellipse Tool')]
178
+ items: [src.ToolbarService.createButton({
179
+ id: 'Bidirectional',
180
+ icon: 'tool-bidirectional',
181
+ label: 'Bidirectional',
182
+ tooltip: 'Bidirectional Tool',
183
+ commands: setToolActiveToolbar,
184
+ evaluate: 'evaluate.cornerstoneTool'
185
+ }), src.ToolbarService.createButton({
186
+ id: 'ArrowAnnotate',
187
+ icon: 'tool-annotate',
188
+ label: 'Arrow Annotate',
189
+ tooltip: 'Arrow Annotate Tool',
190
+ commands: setToolActiveToolbar,
191
+ evaluate: 'evaluate.cornerstoneTool'
192
+ }), src.ToolbarService.createButton({
193
+ id: 'EllipticalROI',
194
+ icon: 'tool-ellipse',
195
+ label: 'Ellipse',
196
+ tooltip: 'Ellipse Tool',
197
+ commands: setToolActiveToolbar,
198
+ evaluate: 'evaluate.cornerstoneTool'
199
+ })]
240
200
  }
241
- },
242
- // Zoom..
243
- {
201
+ }, {
244
202
  id: 'Zoom',
245
- type: 'ohif.radioGroup',
203
+ uiType: 'ohif.radioGroup',
246
204
  props: {
247
- type: 'tool',
248
205
  icon: 'tool-zoom',
249
206
  label: 'Zoom',
250
- commands: [..._createCommands('setToolActive', 'Zoom', [toolGroupIds.CT, toolGroupIds.PT, toolGroupIds.Fusion
251
- // toolGroupIds.MPR,
252
- ])]
253
- }
254
- }, {
255
- id: 'MPR',
256
- type: 'ohif.action',
257
- props: {
258
- type: 'toggle',
259
- icon: 'icon-mpr',
260
- label: 'MPR',
261
- commands: [{
262
- commandName: 'toggleHangingProtocol',
263
- commandOptions: {
264
- protocolId: 'mpr'
265
- },
266
- context: 'DEFAULT'
267
- }]
207
+ commands: setToolActiveToolbar,
208
+ evaluate: 'evaluate.cornerstoneTool'
268
209
  }
269
210
  },
270
- // Window Level + Presets...
211
+ // Window Level + Presets
271
212
  {
272
213
  id: 'WindowLevel',
273
- type: 'ohif.splitButton',
214
+ uiType: 'ohif.radioGroup',
274
215
  props: {
275
- groupId: 'WindowLevel',
276
- primary: _createToolButton('WindowLevel', 'tool-window-level', 'Window Level', [..._createCommands('setToolActive', 'WindowLevel', [toolGroupIds.CT, toolGroupIds.PT, toolGroupIds.Fusion
277
- // toolGroupIds.MPR,
278
- ])], 'Window Level'),
279
- secondary: {
280
- icon: 'chevron-down',
281
- label: 'W/L Manual',
282
- isActive: true,
283
- tooltip: 'W/L Presets'
284
- },
285
- isAction: true,
286
- // ?
287
- renderer: ui_src/* WindowLevelMenuItem */.eJ,
288
- 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')]
216
+ icon: 'tool-window-level',
217
+ label: 'Window Level',
218
+ commands: setToolActiveToolbar,
219
+ evaluate: 'evaluate.cornerstoneTool'
289
220
  }
290
- }, {
221
+ },
222
+ // Crosshairs Button
223
+ {
291
224
  id: 'Crosshairs',
292
- type: 'ohif.radioGroup',
225
+ uiType: 'ohif.radioGroup',
293
226
  props: {
294
- type: 'tool',
295
227
  icon: 'tool-crosshair',
296
228
  label: 'Crosshairs',
297
- commands: [..._createCommands('setToolActive', 'Crosshairs', [toolGroupIds.CT, toolGroupIds.PT, toolGroupIds.Fusion
298
- // toolGroupIds.MPR,
299
- ])]
229
+ commands: setToolActiveToolbar,
230
+ evaluate: 'evaluate.cornerstoneTool'
300
231
  }
301
232
  },
302
- // Pan...
233
+ // Pan Button
303
234
  {
304
235
  id: 'Pan',
305
- type: 'ohif.radioGroup',
236
+ uiType: 'ohif.radioGroup',
306
237
  props: {
307
- type: 'tool',
308
238
  icon: 'tool-move',
309
239
  label: 'Pan',
310
- commands: [..._createCommands('setToolActive', 'Pan', [toolGroupIds.CT, toolGroupIds.PT, toolGroupIds.Fusion
311
- // toolGroupIds.MPR,
312
- ])]
240
+ commands: setToolActiveToolbar,
241
+ evaluate: 'evaluate.cornerstoneTool'
313
242
  }
314
- }, {
243
+ },
244
+ // Rectangle ROI Start End Threshold Button
245
+ {
315
246
  id: 'RectangleROIStartEndThreshold',
316
- type: 'ohif.radioGroup',
247
+ uiType: 'ohif.radioGroup',
317
248
  props: {
318
- type: 'tool',
319
249
  icon: 'tool-create-threshold',
320
250
  label: 'Rectangle ROI Threshold',
321
- commands: [..._createCommands('setToolActive', 'RectangleROIStartEndThreshold', [toolGroupIds.PT]), {
322
- commandName: 'displayNotification',
323
- commandOptions: {
324
- title: 'RectangleROI Threshold Tip',
325
- text: 'RectangleROI Threshold tool should be used on PT Axial Viewport',
326
- type: 'info'
327
- }
328
- }, {
329
- commandName: 'setViewportActive',
330
- commandOptions: {
331
- viewportId: 'ptAXIAL'
332
- }
333
- }]
334
- }
335
- }, {
336
- id: 'fusionPTColormap',
337
- type: 'ohif.splitButton',
338
- props: {
339
- groupId: 'fusionPTColormap',
340
- primary: _createToolButton('fusionPTColormap', 'tool-fusion-color', 'Fusion PT Colormap', [], 'Fusion PT Colormap'),
341
- secondary: {
342
- icon: 'chevron-down',
343
- label: 'PT Colormap',
344
- isActive: true,
345
- tooltip: 'PET Image Colormap'
251
+ commands: setToolActiveToolbar,
252
+ evaluate: {
253
+ name: 'evaluate.cornerstoneTool',
254
+ disabledText: 'Select the PT Axial to enable this tool'
346
255
  },
347
- isAction: true,
348
- // ?
349
- 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')]
256
+ options: 'tmtv.RectangleROIThresholdOptions'
350
257
  }
351
258
  }];
352
259
  /* harmony default export */ const src_toolbarButtons = (toolbarButtons);
353
260
  ;// CONCATENATED MODULE: ../../../modes/tmtv/package.json
354
- const package_namespaceObject = JSON.parse('{"u2":"@ohif/mode-tmtv"}');
261
+ const package_namespaceObject = /*#__PURE__*/JSON.parse('{"UU":"@ohif/mode-tmtv"}');
355
262
  ;// CONCATENATED MODULE: ../../../modes/tmtv/src/id.js
356
263
 
357
- const id = package_namespaceObject.u2;
264
+ const id = package_namespaceObject.UU;
358
265
 
359
266
  ;// CONCATENATED MODULE: ../../../modes/tmtv/src/utils/setCrosshairsConfiguration.js
360
267
 
@@ -404,6 +311,8 @@ function setFusionActiveVolume(matches, toolNames, toolGroupService, displaySetS
404
311
  toolGroupService.setToolConfiguration(toolGroupIds.Fusion, toolNames.WindowLevel, windowLevelConfig);
405
312
  toolGroupService.setToolConfiguration(toolGroupIds.Fusion, toolNames.EllipticalROI, ellipticalROIConfig);
406
313
  }
314
+ // EXTERNAL MODULE: ../../../node_modules/i18next/dist/esm/i18next.js
315
+ var i18next = __webpack_require__(92344);
407
316
  ;// CONCATENATED MODULE: ../../../modes/tmtv/src/index.js
408
317
 
409
318
 
@@ -411,6 +320,7 @@ function setFusionActiveVolume(matches, toolNames, toolGroupService, displaySetS
411
320
 
412
321
 
413
322
 
323
+
414
324
  const {
415
325
  MetadataProvider
416
326
  } = src.classes;
@@ -421,44 +331,47 @@ const ohif = {
421
331
  thumbnailList: '@ohif/extension-default.panelModule.seriesList'
422
332
  };
423
333
  const cs3d = {
424
- viewport: '@ohif/extension-cornerstone.viewportModule.cornerstone'
334
+ viewport: '@ohif/extension-cornerstone.viewportModule.cornerstone',
335
+ segPanel: '@ohif/extension-cornerstone-dicom-seg.panelModule.panelSegmentation'
425
336
  };
426
337
  const tmtv = {
427
338
  hangingProtocol: '@ohif/extension-tmtv.hangingProtocolModule.ptCT',
428
339
  petSUV: '@ohif/extension-tmtv.panelModule.petSUV',
429
- ROIThresholdPanel: '@ohif/extension-tmtv.panelModule.ROIThresholdSeg'
340
+ toolbox: '@ohif/extension-tmtv.panelModule.tmtvBox',
341
+ export: '@ohif/extension-tmtv.panelModule.tmtvExport'
430
342
  };
431
343
  const extensionDependencies = {
432
344
  // Can derive the versions at least process.env.from npm_package_version
433
345
  '@ohif/extension-default': '^3.0.0',
434
346
  '@ohif/extension-cornerstone': '^3.0.0',
347
+ '@ohif/extension-cornerstone-dicom-seg': '^3.0.0',
435
348
  '@ohif/extension-tmtv': '^3.0.0'
436
349
  };
437
350
  let unsubscriptions = [];
438
- function modeFactory(_ref) {
439
- let {
440
- modeConfiguration
441
- } = _ref;
351
+ function modeFactory({
352
+ modeConfiguration
353
+ }) {
442
354
  return {
443
355
  // TODO: We're using this as a route segment
444
356
  // We should not be.
445
357
  id: id,
446
358
  routeName: 'tmtv',
447
- displayName: 'Total Metabolic Tumor Volume',
359
+ displayName: i18next/* default */.A.t('Modes:Total Metabolic Tumor Volume'),
448
360
  /**
449
361
  * Lifecycle hooks
450
362
  */
451
- onModeEnter: _ref2 => {
452
- let {
453
- servicesManager,
454
- extensionManager,
455
- commandsManager
456
- } = _ref2;
363
+ onModeEnter: ({
364
+ servicesManager,
365
+ extensionManager,
366
+ commandsManager
367
+ }) => {
457
368
  const {
458
369
  toolbarService,
459
370
  toolGroupService,
371
+ customizationService,
460
372
  hangingProtocolService,
461
- displaySetService
373
+ displaySetService,
374
+ viewportGridService
462
375
  } = servicesManager.services;
463
376
  const utilityModule = extensionManager.getModuleEntry('@ohif/extension-cornerstone.utilityModule.tools');
464
377
  const {
@@ -468,34 +381,6 @@ function modeFactory(_ref) {
468
381
 
469
382
  // Init Default and SR ToolGroups
470
383
  src_initToolGroups(toolNames, Enums, toolGroupService, commandsManager);
471
- const setWindowLevelActive = () => {
472
- toolbarService.recordInteraction({
473
- groupId: 'WindowLevel',
474
- interactionType: 'tool',
475
- commands: [{
476
- commandName: 'setToolActive',
477
- commandOptions: {
478
- toolName: toolNames.WindowLevel,
479
- toolGroupId: toolGroupIds.CT
480
- },
481
- context: 'CORNERSTONE'
482
- }, {
483
- commandName: 'setToolActive',
484
- commandOptions: {
485
- toolName: toolNames.WindowLevel,
486
- toolGroupId: toolGroupIds.PT
487
- },
488
- context: 'CORNERSTONE'
489
- }, {
490
- commandName: 'setToolActive',
491
- commandOptions: {
492
- toolName: toolNames.WindowLevel,
493
- toolGroupId: toolGroupIds.Fusion
494
- },
495
- context: 'CORNERSTONE'
496
- }]
497
- });
498
- };
499
384
  const {
500
385
  unsubscribe
501
386
  } = toolGroupService.subscribe(toolGroupService.EVENTS.VIEWPORT_ADDED, () => {
@@ -507,12 +392,31 @@ function modeFactory(_ref) {
507
392
  } = hangingProtocolService.getMatchDetails();
508
393
  setCrosshairsConfiguration(displaySetMatchDetails, toolNames, toolGroupService, displaySetService);
509
394
  setFusionActiveVolume(displaySetMatchDetails, toolNames, toolGroupService, displaySetService);
510
- setWindowLevelActive();
511
395
  });
512
396
  unsubscriptions.push(unsubscribe);
513
- toolbarService.init(extensionManager);
514
397
  toolbarService.addButtons(src_toolbarButtons);
515
- toolbarService.createButtonSection('primary', ['MeasurementTools', 'Zoom', 'WindowLevel', 'Crosshairs', 'Pan', 'RectangleROIStartEndThreshold', 'fusionPTColormap']);
398
+ toolbarService.createButtonSection('primary', ['MeasurementTools', 'Zoom', 'WindowLevel', 'Crosshairs', 'Pan', 'SyncToggle']);
399
+ toolbarService.createButtonSection('ROIThresholdToolbox', ['RectangleROIStartEndThreshold']);
400
+ customizationService.addModeCustomizations([{
401
+ id: 'segmentation.panel',
402
+ segmentationPanelMode: 'expanded',
403
+ addSegment: false,
404
+ onSegmentationAdd: () => {
405
+ commandsManager.run('createNewLabelmapFromPT');
406
+ }
407
+ }]);
408
+
409
+ // This is a hack and we need to find a better way to enable
410
+ // some tools that require the viewport to be ready
411
+ const {
412
+ unsubscribe: unsub1
413
+ } = viewportGridService.subscribe(viewportGridService.EVENTS.VIEWPORTS_READY, () => {
414
+ commandsManager.run('setToolEnabled', {
415
+ toolName: 'OrientationMarker',
416
+ toolGroupId: 'mipToolGroup'
417
+ });
418
+ unsub1();
419
+ });
516
420
 
517
421
  // For the hanging protocol we need to decide on the window level
518
422
  // based on whether the SUV is corrected or not, hence we can't hard
@@ -538,17 +442,20 @@ function modeFactory(_ref) {
538
442
  return;
539
443
  });
540
444
  },
541
- onModeExit: _ref3 => {
542
- let {
543
- servicesManager
544
- } = _ref3;
445
+ onModeExit: ({
446
+ servicesManager
447
+ }) => {
545
448
  const {
546
449
  toolGroupService,
547
450
  syncGroupService,
548
451
  segmentationService,
549
- cornerstoneViewportService
452
+ cornerstoneViewportService,
453
+ uiDialogService,
454
+ uiModalService
550
455
  } = servicesManager.services;
551
456
  unsubscriptions.forEach(unsubscribe => unsubscribe());
457
+ uiDialogService.dismissAll();
458
+ uiModalService.hide();
552
459
  toolGroupService.destroy();
553
460
  syncGroupService.destroy();
554
461
  segmentationService.destroy();
@@ -558,14 +465,13 @@ function modeFactory(_ref) {
558
465
  study: [],
559
466
  series: []
560
467
  },
561
- isValidMode: _ref4 => {
562
- let {
563
- modalities,
564
- study
565
- } = _ref4;
468
+ isValidMode: ({
469
+ modalities,
470
+ study
471
+ }) => {
566
472
  const modalities_list = modalities.split('\\');
567
473
  const invalidModalities = ['SM'];
568
- const isValid = modalities_list.includes('CT') && modalities_list.includes('PT') && !invalidModalities.some(modality => modalities_list.includes(modality)) &&
474
+ const isValid = modalities_list.includes('CT') && study.mrn !== 'M1' && modalities_list.includes('PT') && !invalidModalities.some(modality => modalities_list.includes(modality)) &&
569
475
  // This is study is a 4D study with PT and CT and not a 3D study for the tmtv
570
476
  // mode, until we have a better way to identify 4D studies we will use the
571
477
  // StudyInstanceUID to identify the study
@@ -574,24 +480,23 @@ function modeFactory(_ref) {
574
480
  study.studyInstanceUid !== '1.3.6.1.4.1.12842.1.1.14.3.20220915.105557.468.2963630849';
575
481
 
576
482
  // there should be both CT and PT modalities and the modality should not be SM
577
- return isValid;
483
+ return {
484
+ valid: isValid,
485
+ description: 'The mode requires both PT and CT series in the study'
486
+ };
578
487
  },
579
488
  routes: [{
580
489
  path: 'tmtv',
581
490
  /*init: ({ servicesManager, extensionManager }) => {
582
491
  //defaultViewerRouteInit
583
492
  },*/
584
- layoutTemplate: _ref5 => {
585
- let {
586
- location,
587
- servicesManager
588
- } = _ref5;
493
+ layoutTemplate: () => {
589
494
  return {
590
495
  id: ohif.layout,
591
496
  props: {
592
497
  leftPanels: [ohif.thumbnailList],
593
- leftPanelDefaultClosed: true,
594
- rightPanels: [tmtv.ROIThresholdPanel, tmtv.petSUV],
498
+ leftPanelClosed: true,
499
+ rightPanels: [[tmtv.toolbox, cs3d.segPanel, tmtv.export], tmtv.petSUV],
595
500
  viewports: [{
596
501
  namespace: cs3d.viewport,
597
502
  displaySetsToDisplay: [ohif.sopClassHandler]
@@ -603,7 +508,7 @@ function modeFactory(_ref) {
603
508
  extensions: extensionDependencies,
604
509
  hangingProtocol: tmtv.hangingProtocol,
605
510
  sopClassHandlers: [ohif.sopClassHandler],
606
- hotkeys: [...src/* hotkeys */.dD.defaults.hotkeyBindings],
511
+ hotkeys: [...src/* hotkeys */.ot.defaults.hotkeyBindings],
607
512
  ...modeConfiguration
608
513
  };
609
514
  }