@ohif/app 3.8.0-beta.7 → 3.8.0-beta.70

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 (93) hide show
  1. package/dist/{220.bundle.f7e1c96c94245e70f2be.js → 109.bundle.b4fee2a22b622839baf5.js} +4466 -3715
  2. package/dist/{471.bundle.49c8d281adbae4a2c4df.js → 121.bundle.21827fec690c01ee9ab3.js} +85 -112
  3. package/dist/{19.bundle.e5579df6d7b74af50b1d.js → 155.bundle.0dabe8513b605b01ac3d.js} +334 -287
  4. package/dist/{687.bundle.9d0330ea5d61fe3117da.js → 164.bundle.0b1a2be351543c1433e8.js} +22 -38
  5. package/dist/17dd54813d5acc10bf8f.wasm +0 -0
  6. package/dist/{506.bundle.ab8226d3d81abe874544.js → 188.bundle.81e83b073b6fd4ae0058.js} +23 -28
  7. package/dist/191.bundle.7d89c921abefd1140d50.js +30360 -0
  8. package/dist/{221.bundle.c2dc03d8fa4235dc1285.js → 2.bundle.04dbbf67a52fe109749c.js} +351 -546
  9. package/dist/20fc4c659b85ccd2a9c0.wasm +0 -0
  10. package/dist/290.bundle.952de53057f98e2c5ef0.js +8883 -0
  11. package/dist/{451.bundle.57c21db5d003c75e9d61.js → 295.bundle.3a0d5062d65296c4bf5d.js} +102 -127
  12. package/dist/{125.bundle.253395f320b72180da63.js → 297.bundle.194d8985ab974839b5b6.js} +7 -8
  13. package/dist/{202.bundle.d3490836f71e001dd30f.js → 342.bundle.6e49f63ea7cea4645c0a.js} +544 -860
  14. package/dist/41.bundle.6ec0794a483e9a30eb94.js +831 -0
  15. package/dist/425.bundle.ffcdde2143a5757926b9.js +2957 -0
  16. package/dist/425.css +2 -0
  17. package/dist/{126.bundle.42df2dafc9c0310da188.js → 448.bundle.9177b9d909654efbc8d5.js} +316 -427
  18. package/dist/{957.bundle.9ea4506963ef8b2d84ba.js → 504.bundle.993d7e2dec36257d4ce4.js} +14338 -27291
  19. package/dist/{886.bundle.c8dd3ecc42a4253de278.js → 530.bundle.566bfd08dccb4cf6d98b.js} +75 -105
  20. package/dist/{250.bundle.aea3335667054bdefe36.js → 544.bundle.1110b24e96863d719a95.js} +39 -56
  21. package/dist/{663.bundle.9f359963019cd8ccf8f9.js → 559.bundle.4f111410af43324629ca.js} +151 -147
  22. package/dist/{181.bundle.a62b9f0ec692299acb35.js → 574.bundle.83afbc7922736fc6846d.js} +1246 -289
  23. package/dist/{181.css → 574.css} +1 -1
  24. package/dist/{410.bundle.38c9d3820e152e89288e.js → 594.bundle.ffeebda1bb9a81182a80.js} +183 -221
  25. package/dist/{776.bundle.004382036bdbd8ee2b95.js → 595.bundle.1c1a50c4ff87763b786a.js} +3128 -1028
  26. package/dist/{774.bundle.4b2dc46a35012b898e1a.js → 644.bundle.1e77691d2eeb96a423b0.js} +1852 -8945
  27. package/dist/699.bundle.db05df7b8e2ad605e928.js +767 -0
  28. package/dist/{359.bundle.8abe0036a7bf6b5fd115.js → 724.bundle.eada9d6c23678a5a2947.js} +130 -254
  29. package/dist/{757.bundle.ec8301d8e70d2b990f65.js → 726.bundle.c8de818cf1a3ff0cf7d2.js} +512 -879
  30. package/dist/{530.bundle.a03b6f942ace3e1baa1e.js → 835.bundle.15aff0b7433bb0dd6d6d.js} +37 -30
  31. package/dist/{822.bundle.82cdc418f8f56da6060b.js → 862.bundle.959ef65b18c1d3b5e2b4.js} +77 -96
  32. package/dist/{236.bundle.c9e70d55e7b2574c1ecd.js → 889.bundle.67c6e5f988c9b1d289ef.js} +198 -197
  33. package/dist/{342.bundle.d9668551811e3a88aaa4.js → 90.bundle.f41c8c4fc78cdfd4de30.js} +1430 -1055
  34. package/dist/{281.bundle.16a2933086a57e60c96c.js → 905.bundle.eb821474b36b96b897f9.js} +155 -122
  35. package/dist/{814.bundle.a1aba9c1e3d336008351.js → 907.bundle.ca904d9747480a0e4bf1.js} +16 -30
  36. package/dist/{417.bundle.af0a207c29b109f84159.js → 931.bundle.d270a1fda9a2836c3cc5.js} +26 -26
  37. package/dist/{686.bundle.dccef1f36e4bc79bcc48.js → 939.bundle.9d93b2e47c52338747a2.js} +7 -8
  38. package/dist/{12.bundle.37a8b47d2ae587cb9226.js → 961.bundle.65967b1a4af002af1d1d.js} +16 -31
  39. package/dist/987.bundle.6bdfb3cd8762b8889632.js +122950 -0
  40. package/dist/app-config.js +1 -0
  41. package/dist/app.bundle.css +15 -13
  42. package/dist/{app.bundle.437d085e13599d1e1ced.js → app.bundle.e21e5afd46fb064cb5de.js} +147713 -61638
  43. package/dist/assets/images/CT-AAA.png +0 -0
  44. package/dist/assets/images/CT-AAA2.png +0 -0
  45. package/dist/assets/images/CT-Air.png +0 -0
  46. package/dist/assets/images/CT-Bone.png +0 -0
  47. package/dist/assets/images/CT-Bones.png +0 -0
  48. package/dist/assets/images/CT-Cardiac.png +0 -0
  49. package/dist/assets/images/CT-Cardiac2.png +0 -0
  50. package/dist/assets/images/CT-Cardiac3.png +0 -0
  51. package/dist/assets/images/CT-Chest-Contrast-Enhanced.png +0 -0
  52. package/dist/assets/images/CT-Chest-Vessels.png +0 -0
  53. package/dist/assets/images/CT-Coronary-Arteries-2.png +0 -0
  54. package/dist/assets/images/CT-Coronary-Arteries-3.png +0 -0
  55. package/dist/assets/images/CT-Coronary-Arteries.png +0 -0
  56. package/dist/assets/images/CT-Cropped-Volume-Bone.png +0 -0
  57. package/dist/assets/images/CT-Fat.png +0 -0
  58. package/dist/assets/images/CT-Liver-Vasculature.png +0 -0
  59. package/dist/assets/images/CT-Lung.png +0 -0
  60. package/dist/assets/images/CT-MIP.png +0 -0
  61. package/dist/assets/images/CT-Muscle.png +0 -0
  62. package/dist/assets/images/CT-Pulmonary-Arteries.png +0 -0
  63. package/dist/assets/images/CT-Soft-Tissue.png +0 -0
  64. package/dist/assets/images/DTI-FA-Brain.png +0 -0
  65. package/dist/assets/images/MR-Angio.png +0 -0
  66. package/dist/assets/images/MR-Default.png +0 -0
  67. package/dist/assets/images/MR-MIP.png +0 -0
  68. package/dist/assets/images/MR-T2-Brain.png +0 -0
  69. package/dist/assets/images/VolumeRendering.png +0 -0
  70. package/dist/cornerstoneDICOMImageLoader.min.js +1 -1
  71. package/dist/cornerstoneDICOMImageLoader.min.js.map +1 -1
  72. package/dist/{dicom-microscopy-viewer.bundle.2c146384eb9466d02ff8.js → dicom-microscopy-viewer.bundle.d3a56dc9f62df5e11019.js} +3 -3
  73. package/dist/index.html +1 -1
  74. package/dist/{index.worker.e62ecca63f1a2e124230.worker.js → index.worker.64c896c4316fcd506666.worker.js} +2 -2
  75. package/dist/index.worker.64c896c4316fcd506666.worker.js.map +1 -0
  76. package/dist/polySeg.bundle.e7b4c29fb9173e8567b8.js +252 -0
  77. package/dist/serve.json +12 -0
  78. package/dist/sw.js +1 -1
  79. package/package.json +25 -22
  80. package/dist/23.bundle.e008ad788170f2ed5569.js +0 -900
  81. package/dist/604.bundle.a51f83e64004bca5f497.js +0 -1848
  82. package/dist/613.bundle.aed640a7900dbcb688f5.js +0 -532
  83. package/dist/743.bundle.489f7df3a089d4d374e1.js +0 -78007
  84. package/dist/75788f12450d4c5ed494.wasm +0 -0
  85. package/dist/775.bundle.2285e7e0e67878948c0d.js +0 -1009
  86. package/dist/788.bundle.dcd53828d1bb2ac64d04.js +0 -2682
  87. package/dist/82.bundle.5a94dd7645e5c5476f59.js +0 -1049
  88. package/dist/index.worker.e62ecca63f1a2e124230.worker.js.map +0 -1
  89. /package/dist/{19.css → 155.css} +0 -0
  90. /package/dist/{221.css → 2.css} +0 -0
  91. /package/dist/{579.css → 481.css} +0 -0
  92. /package/dist/{250.css → 544.css} +0 -0
  93. /package/dist/{776.css → 595.css} +0 -0
@@ -1,9 +1,9 @@
1
- (self["webpackChunk"] = self["webpackChunk"] || []).push([[126],{
1
+ "use strict";
2
+ (globalThis["webpackChunk"] = globalThis["webpackChunk"] || []).push([[448],{
2
3
 
3
- /***/ 32199:
4
+ /***/ 14448:
4
5
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
5
6
 
6
- "use strict";
7
7
  // ESM COMPAT FLAG
8
8
  __webpack_require__.r(__webpack_exports__);
9
9
 
@@ -12,10 +12,10 @@ __webpack_require__.d(__webpack_exports__, {
12
12
  "default": () => (/* binding */ basic_test_mode_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 + 68 modules
16
+ var src = __webpack_require__(85073);
17
+ // EXTERNAL MODULE: ../../ui/src/index.js + 542 modules
18
+ var ui_src = __webpack_require__(48804);
19
19
  ;// CONCATENATED MODULE: ../../../modes/basic-test-mode/src/toolbarButtons.ts
20
20
  // TODO: torn, can either bake this here; or have to create a whole new button type
21
21
  // Only ways that you can pass in a custom React component for render :l
@@ -24,6 +24,9 @@ var ui_src = __webpack_require__(22582);
24
24
  const {
25
25
  windowLevelPresets
26
26
  } = src.defaults;
27
+ const {
28
+ createButton
29
+ } = src.ToolbarService;
27
30
 
28
31
  /**
29
32
  *
@@ -36,7 +39,6 @@ function _createWwwcPreset(preset, title, subtitle) {
36
39
  id: preset.toString(),
37
40
  title,
38
41
  subtitle,
39
- type: 'action',
40
42
  commands: [{
41
43
  commandName: 'setWindowLevel',
42
44
  commandOptions: {
@@ -46,291 +48,175 @@ function _createWwwcPreset(preset, title, subtitle) {
46
48
  }]
47
49
  };
48
50
  }
49
- const toolbarButtons = [
50
- // Measurement
51
- {
51
+ const setToolActiveToolbar = {
52
+ commandName: 'setToolActiveToolbar',
53
+ commandOptions: {
54
+ toolGroupIds: ['default', 'mpr', 'SRToolGroup']
55
+ }
56
+ };
57
+ const toolbarButtons = [{
52
58
  id: 'MeasurementTools',
53
- type: 'ohif.splitButton',
59
+ uiType: 'ohif.splitButton',
54
60
  props: {
55
61
  groupId: 'MeasurementTools',
56
- isRadio: true,
57
- // ?
58
- // Switch?
59
- primary: src/* ToolbarService */.Ok._createToolButton('Length', 'tool-length', 'Length', [{
60
- commandName: 'setToolActive',
61
- commandOptions: {
62
- toolName: 'Length'
63
- },
64
- context: 'CORNERSTONE'
65
- }, {
66
- commandName: 'setToolActive',
67
- commandOptions: {
68
- toolName: 'SRLength',
69
- toolGroupId: 'SRToolGroup'
70
- },
71
- // we can use the setToolActive command for this from Cornerstone commandsModule
72
- context: 'CORNERSTONE'
73
- }], 'Length'),
62
+ // group evaluate to determine which item should move to the top
63
+ evaluate: 'evaluate.group.promoteToPrimaryIfCornerstoneToolNotActiveInTheList',
64
+ primary: createButton({
65
+ id: 'Length',
66
+ icon: 'tool-length',
67
+ label: 'Length',
68
+ tooltip: 'Length Tool',
69
+ commands: setToolActiveToolbar,
70
+ evaluate: 'evaluate.cornerstoneTool'
71
+ }),
74
72
  secondary: {
75
73
  icon: 'chevron-down',
76
- label: '',
77
- isActive: true,
78
74
  tooltip: 'More Measure Tools'
79
75
  },
80
- items: [src/* ToolbarService */.Ok._createToolButton('Length', 'tool-length', 'Length', [{
81
- commandName: 'setToolActive',
82
- commandOptions: {
83
- toolName: 'Length'
84
- },
85
- context: 'CORNERSTONE'
86
- }, {
87
- commandName: 'setToolActive',
88
- commandOptions: {
89
- toolName: 'SRLength',
90
- toolGroupId: 'SRToolGroup'
91
- },
92
- // we can use the setToolActive command for this from Cornerstone commandsModule
93
- context: 'CORNERSTONE'
94
- }], 'Length Tool'), src/* ToolbarService */.Ok._createToolButton('Bidirectional', 'tool-bidirectional', 'Bidirectional', [{
95
- commandName: 'setToolActive',
96
- commandOptions: {
97
- toolName: 'Bidirectional'
98
- },
99
- context: 'CORNERSTONE'
100
- }, {
101
- commandName: 'setToolActive',
102
- commandOptions: {
103
- toolName: 'SRBidirectional',
104
- toolGroupId: 'SRToolGroup'
105
- },
106
- context: 'CORNERSTONE'
107
- }], 'Bidirectional Tool'), src/* ToolbarService */.Ok._createToolButton('ArrowAnnotate', 'tool-annotate', 'Annotation', [{
108
- commandName: 'setToolActive',
109
- commandOptions: {
110
- toolName: 'ArrowAnnotate'
111
- },
112
- context: 'CORNERSTONE'
113
- }, {
114
- commandName: 'setToolActive',
115
- commandOptions: {
116
- toolName: 'SRArrowAnnotate',
117
- toolGroupId: 'SRToolGroup'
118
- },
119
- context: 'CORNERSTONE'
120
- }], 'Arrow Annotate'), src/* ToolbarService */.Ok._createToolButton('EllipticalROI', 'tool-elipse', 'Ellipse', [{
121
- commandName: 'setToolActive',
122
- commandOptions: {
123
- toolName: 'EllipticalROI'
124
- },
125
- context: 'CORNERSTONE'
126
- }, {
127
- commandName: 'setToolActive',
128
- commandOptions: {
129
- toolName: 'SREllipticalROI',
130
- toolGroupId: 'SRToolGroup'
131
- },
132
- context: 'CORNERSTONE'
133
- }], 'Ellipse Tool'), src/* ToolbarService */.Ok._createToolButton('CircleROI', 'tool-circle', 'Circle', [{
134
- commandName: 'setToolActive',
135
- commandOptions: {
136
- toolName: 'CircleROI'
137
- },
138
- context: 'CORNERSTONE'
139
- }, {
140
- commandName: 'setToolActive',
141
- commandOptions: {
142
- toolName: 'SRCircleROI',
143
- toolGroupId: 'SRToolGroup'
144
- },
145
- context: 'CORNERSTONE'
146
- }], 'Circle Tool')]
76
+ items: [createButton({
77
+ id: 'Length',
78
+ icon: 'tool-length',
79
+ label: 'Length',
80
+ tooltip: 'Length Tool',
81
+ commands: setToolActiveToolbar,
82
+ evaluate: 'evaluate.cornerstoneTool'
83
+ }), createButton({
84
+ id: 'Bidirectional',
85
+ icon: 'tool-bidirectional',
86
+ label: 'Bidirectional',
87
+ tooltip: 'Bidirectional Tool',
88
+ commands: setToolActiveToolbar,
89
+ evaluate: 'evaluate.cornerstoneTool'
90
+ }), createButton({
91
+ id: 'ArrowAnnotate',
92
+ icon: 'tool-annotate',
93
+ label: 'Annotation',
94
+ tooltip: 'Arrow Annotate',
95
+ commands: setToolActiveToolbar,
96
+ evaluate: 'evaluate.cornerstoneTool'
97
+ }), createButton({
98
+ id: 'EllipticalROI',
99
+ icon: 'tool-ellipse',
100
+ label: 'Ellipse',
101
+ tooltip: 'Ellipse ROI',
102
+ commands: setToolActiveToolbar,
103
+ evaluate: 'evaluate.cornerstoneTool'
104
+ }), createButton({
105
+ id: 'CircleROI',
106
+ icon: 'tool-circle',
107
+ label: 'Circle',
108
+ tooltip: 'Circle Tool',
109
+ commands: setToolActiveToolbar,
110
+ evaluate: 'evaluate.cornerstoneTool'
111
+ })]
147
112
  }
148
- },
149
- // Zoom..
150
- {
113
+ }, {
151
114
  id: 'Zoom',
152
- type: 'ohif.radioGroup',
115
+ uiType: 'ohif.radioGroup',
153
116
  props: {
154
- type: 'tool',
155
117
  icon: 'tool-zoom',
156
118
  label: 'Zoom',
157
- commands: [{
158
- commandName: 'setToolActive',
159
- commandOptions: {
160
- toolName: 'Zoom'
161
- },
162
- context: 'CORNERSTONE'
163
- }]
119
+ commands: setToolActiveToolbar,
120
+ evaluate: 'evaluate.cornerstoneTool'
164
121
  }
165
122
  },
166
- // Window Level + Presets...
123
+ // Window Level
167
124
  {
168
125
  id: 'WindowLevel',
169
- type: 'ohif.splitButton',
126
+ uiType: 'ohif.splitButton',
170
127
  props: {
171
128
  groupId: 'WindowLevel',
172
- primary: src/* ToolbarService */.Ok._createToolButton('WindowLevel', 'tool-window-level', 'Window Level', [{
173
- commandName: 'setToolActive',
174
- commandOptions: {
175
- toolName: 'WindowLevel'
176
- },
177
- context: 'CORNERSTONE'
178
- }], 'Window Level'),
129
+ primary: createButton({
130
+ id: 'WindowLevel',
131
+ icon: 'tool-window-level',
132
+ label: 'Window Level',
133
+ tooltip: 'Window Level',
134
+ commands: setToolActiveToolbar,
135
+ evaluate: 'evaluate.cornerstoneTool'
136
+ }),
179
137
  secondary: {
180
138
  icon: 'chevron-down',
181
139
  label: 'W/L Manual',
182
- isActive: true,
183
140
  tooltip: 'W/L Presets'
184
141
  },
185
- isAction: true,
186
- // ?
187
- renderer: ui_src/* WindowLevelMenuItem */.eJ,
142
+ renderer: ui_src/* WindowLevelMenuItem */.d4,
188
143
  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')]
189
144
  }
190
145
  },
191
146
  // Pan...
192
147
  {
193
148
  id: 'Pan',
194
- type: 'ohif.radioGroup',
149
+ uiType: 'ohif.radioGroup',
195
150
  props: {
196
151
  type: 'tool',
197
152
  icon: 'tool-move',
198
153
  label: 'Pan',
154
+ commands: setToolActiveToolbar,
155
+ evaluate: 'evaluate.cornerstoneTool'
156
+ }
157
+ }, {
158
+ id: 'MPR',
159
+ uiType: 'ohif.radioGroup',
160
+ props: {
161
+ icon: 'icon-mpr',
162
+ label: 'MPR',
199
163
  commands: [{
200
- commandName: 'setToolActive',
164
+ commandName: 'toggleHangingProtocol',
201
165
  commandOptions: {
202
- toolName: 'Pan'
203
- },
204
- context: 'CORNERSTONE'
205
- }]
166
+ protocolId: 'mpr'
167
+ }
168
+ }],
169
+ evaluate: 'evaluate.mpr'
170
+ }
171
+ }, {
172
+ id: 'TrackBallRotate',
173
+ type: 'ohif.radioGroup',
174
+ props: {
175
+ type: 'tool',
176
+ icon: 'tool-3d-rotate',
177
+ label: '3D Rotate',
178
+ commands: setToolActiveToolbar
206
179
  }
207
180
  }, {
208
181
  id: 'Capture',
209
- type: 'ohif.action',
182
+ uiType: 'ohif.radioGroup',
210
183
  props: {
211
184
  icon: 'tool-capture',
212
185
  label: 'Capture',
213
- type: 'action',
214
- commands: [{
215
- commandName: 'showDownloadViewportModal',
216
- commandOptions: {},
217
- context: 'CORNERSTONE'
218
- }]
186
+ commands: 'showDownloadViewportModal',
187
+ evaluate: 'evaluate.action'
219
188
  }
220
189
  }, {
221
190
  id: 'Layout',
222
- type: 'ohif.splitButton',
191
+ uiType: 'ohif.layoutSelector',
223
192
  props: {
224
- groupId: 'LayoutTools',
225
- isRadio: false,
226
- primary: {
227
- id: 'Layout',
228
- type: 'action',
229
- uiType: 'ohif.layoutSelector',
230
- icon: 'tool-layout',
231
- label: 'Grid Layout',
232
- props: {
233
- rows: 4,
234
- columns: 4,
235
- commands: [{
236
- commandName: 'setLayout',
237
- commandOptions: {},
238
- context: 'CORNERSTONE'
239
- }]
240
- }
241
- },
242
- secondary: {
243
- icon: 'chevron-down',
244
- label: '',
245
- isActive: true,
246
- tooltip: 'Hanging Protocols'
247
- },
248
- items: [{
249
- id: '2x2',
250
- type: 'action',
251
- label: '2x2',
252
- commands: [{
253
- commandName: 'setHangingProtocol',
254
- commandOptions: {
255
- protocolId: '@ohif/mnGrid',
256
- stageId: '2x2'
257
- },
258
- context: 'DEFAULT'
259
- }]
260
- }, {
261
- id: '3x1',
262
- type: 'action',
263
- label: '3x1',
264
- commands: [{
265
- commandName: 'setHangingProtocol',
266
- commandOptions: {
267
- protocolId: '@ohif/mnGrid',
268
- stageId: '3x1'
269
- },
270
- context: 'DEFAULT'
271
- }]
272
- }, {
273
- id: '2x1',
274
- type: 'action',
275
- label: '2x1',
276
- commands: [{
277
- commandName: 'setHangingProtocol',
278
- commandOptions: {
279
- protocolId: '@ohif/mnGrid',
280
- stageId: '2x1'
281
- },
282
- context: 'DEFAULT'
283
- }]
284
- }, {
285
- id: '1x1',
286
- type: 'action',
287
- label: '1x1',
288
- commands: [{
289
- commandName: 'setHangingProtocol',
290
- commandOptions: {
291
- protocolId: '@ohif/mnGrid',
292
- stageId: '1x1'
293
- },
294
- context: 'DEFAULT'
295
- }]
296
- }]
297
- }
298
- }, {
299
- id: 'MPR',
300
- type: 'ohif.action',
301
- props: {
302
- type: 'toggle',
303
- icon: 'icon-mpr',
304
- label: 'MPR',
305
- commands: [{
306
- commandName: 'toggleHangingProtocol',
307
- commandOptions: {
308
- protocolId: 'mpr'
309
- }
310
- }]
193
+ rows: 3,
194
+ columns: 4,
195
+ evaluate: 'evaluate.action',
196
+ commands: 'setViewportGridLayout'
311
197
  }
312
198
  }, {
313
199
  id: 'Crosshairs',
314
- type: 'ohif.radioGroup',
200
+ uiType: 'ohif.radioGroup',
315
201
  props: {
316
202
  type: 'tool',
317
203
  icon: 'tool-crosshair',
318
204
  label: 'Crosshairs',
319
- commands: [{
320
- commandName: 'setToolActive',
205
+ commands: {
206
+ commandName: 'setToolActiveToolbar',
321
207
  commandOptions: {
322
- toolGroupId: 'mpr',
323
- toolName: 'Crosshairs'
208
+ toolGroupIds: ['mpr']
324
209
  }
325
- }]
210
+ },
211
+ evaluate: 'evaluate.cornerstoneTool'
326
212
  }
327
213
  }];
328
214
  /* harmony default export */ const src_toolbarButtons = (toolbarButtons);
329
215
  ;// CONCATENATED MODULE: ../../../modes/basic-test-mode/package.json
330
- const package_namespaceObject = JSON.parse('{"u2":"@ohif/mode-test"}');
216
+ const package_namespaceObject = /*#__PURE__*/JSON.parse('{"UU":"@ohif/mode-test"}');
331
217
  ;// CONCATENATED MODULE: ../../../modes/basic-test-mode/src/id.js
332
218
 
333
- const id = package_namespaceObject.u2;
219
+ const id = package_namespaceObject.UU;
334
220
 
335
221
  ;// CONCATENATED MODULE: ../../../modes/basic-test-mode/src/initToolGroups.ts
336
222
  function initDefaultToolGroup(extensionManager, toolGroupService, commandsManager, toolGroupId) {
@@ -394,6 +280,9 @@ function initDefaultToolGroup(extensionManager, toolGroupService, commandsManage
394
280
  toolName: toolNames.SegmentationDisplay
395
281
  }],
396
282
  // enabled
283
+ enabled: [{
284
+ toolName: toolNames.ImageOverlayViewer
285
+ }],
397
286
  // disabled
398
287
  disabled: [{
399
288
  toolName: toolNames.ReferenceLines
@@ -448,7 +337,6 @@ function initSRToolGroup(extensionManager, toolGroupService, commandsManager) {
448
337
  }]
449
338
  // disabled
450
339
  };
451
-
452
340
  const toolGroupId = 'SRToolGroup';
453
341
  toolGroupService.createToolGroupAndAddTools(toolGroupId, tools);
454
342
  }
@@ -526,178 +414,212 @@ function initMPRToolGroup(extensionManager, toolGroupService, commandsManager) {
526
414
  // enabled
527
415
  // disabled
528
416
  };
529
-
530
417
  toolGroupService.createToolGroupAndAddTools('mpr', tools);
531
418
  }
419
+ function initVolume3DToolGroup(extensionManager, toolGroupService) {
420
+ const utilityModule = extensionManager.getModuleEntry('@ohif/extension-cornerstone.utilityModule.tools');
421
+ const {
422
+ toolNames,
423
+ Enums
424
+ } = utilityModule.exports;
425
+ const tools = {
426
+ active: [{
427
+ toolName: toolNames.TrackballRotateTool,
428
+ bindings: [{
429
+ mouseButton: Enums.MouseBindings.Primary
430
+ }]
431
+ }, {
432
+ toolName: toolNames.Zoom,
433
+ bindings: [{
434
+ mouseButton: Enums.MouseBindings.Secondary
435
+ }]
436
+ }, {
437
+ toolName: toolNames.Pan,
438
+ bindings: [{
439
+ mouseButton: Enums.MouseBindings.Auxiliary
440
+ }]
441
+ }]
442
+ };
443
+ toolGroupService.createToolGroupAndAddTools('volume3d', tools);
444
+ }
532
445
  function initToolGroups(extensionManager, toolGroupService, commandsManager) {
533
446
  initDefaultToolGroup(extensionManager, toolGroupService, commandsManager, 'default');
534
447
  initSRToolGroup(extensionManager, toolGroupService, commandsManager);
535
448
  initMPRToolGroup(extensionManager, toolGroupService, commandsManager);
449
+ initVolume3DToolGroup(extensionManager, toolGroupService);
536
450
  }
537
451
  /* harmony default export */ const src_initToolGroups = (initToolGroups);
538
- // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/index.js + 331 modules
539
- var esm = __webpack_require__(3743);
452
+ // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/index.js + 383 modules
453
+ var esm = __webpack_require__(50719);
540
454
  ;// CONCATENATED MODULE: ../../../modes/basic-test-mode/src/moreTools.ts
541
455
 
542
456
 
543
- const ReferenceLinesCommands = [{
457
+
458
+ const {
459
+ createButton: moreTools_createButton
460
+ } = src.ToolbarService;
461
+ const ReferenceLinesListeners = [{
544
462
  commandName: 'setSourceViewportForReferenceLinesTool',
545
463
  context: 'CORNERSTONE'
546
- }, {
547
- commandName: 'setToolActive',
548
- commandOptions: {
549
- toolName: 'ReferenceLines'
550
- },
551
- context: 'CORNERSTONE'
552
464
  }];
553
465
  const moreTools = [{
554
466
  id: 'MoreTools',
555
- type: 'ohif.splitButton',
467
+ uiType: 'ohif.splitButton',
556
468
  props: {
557
- isRadio: true,
558
- // ?
559
469
  groupId: 'MoreTools',
560
- primary: src/* ToolbarService */.Ok._createActionButton('Reset', 'tool-reset', 'Reset View', [{
561
- commandName: 'resetViewport'
562
- }], 'Reset'),
470
+ evaluate: 'evaluate.group.promoteToPrimaryIfCornerstoneToolNotActiveInTheList',
471
+ primary: moreTools_createButton({
472
+ id: 'Reset',
473
+ icon: 'tool-reset',
474
+ tooltip: 'Reset View',
475
+ label: 'Reset',
476
+ commands: 'resetViewport',
477
+ evaluate: 'evaluate.action'
478
+ }),
563
479
  secondary: {
564
480
  icon: 'chevron-down',
565
481
  label: '',
566
- isActive: true,
567
482
  tooltip: 'More Tools'
568
483
  },
569
- items: [src/* ToolbarService */.Ok._createActionButton('Reset', 'tool-reset', 'Reset View', [{
570
- commandName: 'resetViewport'
571
- }], 'Reset'), src/* ToolbarService */.Ok._createActionButton('rotate-right', 'tool-rotate-right', 'Rotate Right', [{
572
- commandName: 'rotateViewportCW',
573
- commandOptions: {},
574
- context: 'CORNERSTONE'
575
- }], 'Rotate +90'), src/* ToolbarService */.Ok._createActionButton('flip-horizontal', 'tool-flip-horizontal', 'Flip Horizontally', [{
576
- commandName: 'flipViewportHorizontal',
577
- commandOptions: {},
578
- context: 'CORNERSTONE'
579
- }], 'Flip Horizontally'), src/* ToolbarService */.Ok._createToggleButton('StackImageSync', 'link', 'Stack Image Sync', [{
580
- commandName: 'toggleStackImageSync'
581
- }], 'Enable position synchronization on stack viewports', {
484
+ items: [moreTools_createButton({
485
+ id: 'Reset',
486
+ icon: 'tool-reset',
487
+ label: 'Reset View',
488
+ tooltip: 'Reset View',
489
+ commands: 'resetViewport',
490
+ evaluate: 'evaluate.action'
491
+ }), moreTools_createButton({
492
+ id: 'rotate-right',
493
+ icon: 'tool-rotate-right',
494
+ label: 'Rotate Right',
495
+ tooltip: 'Rotate +90',
496
+ commands: 'rotateViewportCW',
497
+ evaluate: 'evaluate.action'
498
+ }), moreTools_createButton({
499
+ id: 'flipHorizontal',
500
+ icon: 'tool-flip-horizontal',
501
+ label: 'Flip Horizontal',
502
+ tooltip: 'Flip Horizontally',
503
+ commands: 'flipViewportHorizontal',
504
+ evaluate: 'evaluate.viewportProperties.toggle'
505
+ }), moreTools_createButton({
506
+ id: 'ImageSliceSync',
507
+ icon: 'link',
508
+ label: 'Image Slice Sync',
509
+ tooltip: 'Enable position synchronization on stack viewports',
510
+ commands: {
511
+ commandName: 'toggleSynchronizer',
512
+ commandOptions: {
513
+ type: 'imageSlice'
514
+ }
515
+ },
582
516
  listeners: {
583
517
  [esm.EVENTS.STACK_VIEWPORT_NEW_STACK]: {
584
- commandName: 'toggleStackImageSync',
518
+ commandName: 'toggleImageSliceSync',
585
519
  commandOptions: {
586
520
  toggledState: true
587
521
  }
588
522
  }
589
- }
590
- }), src/* ToolbarService */.Ok._createToggleButton('ReferenceLines', 'tool-referenceLines',
591
- // change this with the new icon
592
- 'Reference Lines', ReferenceLinesCommands, 'Show Reference Lines', {
593
- listeners: {
594
- [esm.EVENTS.STACK_VIEWPORT_NEW_STACK]: ReferenceLinesCommands,
595
- [esm.EVENTS.ACTIVE_VIEWPORT_ID_CHANGED]: ReferenceLinesCommands
596
- }
597
- }), src/* ToolbarService */.Ok._createToolButton('StackScroll', 'tool-stack-scroll', 'Stack Scroll', [{
598
- commandName: 'setToolActive',
599
- commandOptions: {
600
- toolName: 'StackScroll'
601
- },
602
- context: 'CORNERSTONE'
603
- }], 'Stack Scroll'), src/* ToolbarService */.Ok._createActionButton('invert', 'tool-invert', 'Invert', [{
604
- commandName: 'invertViewport',
605
- commandOptions: {},
606
- context: 'CORNERSTONE'
607
- }], 'Invert Colors'), src/* ToolbarService */.Ok._createToolButton('Probe', 'tool-probe', 'Probe', [{
608
- commandName: 'setToolActive',
609
- commandOptions: {
610
- toolName: 'DragProbe'
611
523
  },
612
- context: 'CORNERSTONE'
613
- }], 'Probe'), src/* ToolbarService */.Ok._createToggleButton('cine', 'tool-cine', 'Cine', [{
614
- commandName: 'toggleCine',
615
- context: 'CORNERSTONE'
616
- }], 'Cine'), src/* ToolbarService */.Ok._createToolButton('Angle', 'tool-angle', 'Angle', [{
617
- commandName: 'setToolActive',
618
- commandOptions: {
619
- toolName: 'Angle'
524
+ evaluate: 'evaluate.cornerstone.synchronizer'
525
+ }), moreTools_createButton({
526
+ id: 'ReferenceLines',
527
+ icon: 'tool-referenceLines',
528
+ label: 'Reference Lines',
529
+ tooltip: 'Show Reference Lines',
530
+ commands: {
531
+ commandName: 'setToolEnabled',
532
+ commandOptions: {
533
+ toolName: 'ReferenceLines',
534
+ toggle: true
535
+ }
620
536
  },
621
- context: 'CORNERSTONE'
622
- }], 'Angle'), src/* ToolbarService */.Ok._createToolButton('Magnify', 'tool-magnify', 'Magnify', [{
623
- commandName: 'setToolActive',
624
- commandOptions: {
625
- toolName: 'Magnify'
537
+ listeners: {
538
+ [src/* ViewportGridService */.sI.EVENTS.ACTIVE_VIEWPORT_ID_CHANGED]: ReferenceLinesListeners,
539
+ [src/* ViewportGridService */.sI.EVENTS.VIEWPORTS_READY]: ReferenceLinesListeners
626
540
  },
627
- context: 'CORNERSTONE'
628
- }], 'Magnify'), src/* ToolbarService */.Ok._createToolButton('Rectangle', 'tool-rectangle', 'Rectangle', [{
629
- commandName: 'setToolActive',
630
- commandOptions: {
631
- toolName: 'RectangleROI'
541
+ evaluate: 'evaluate.cornerstoneTool.toggle'
542
+ }), moreTools_createButton({
543
+ id: 'ImageOverlay',
544
+ icon: 'toggle-dicom-overlay',
545
+ label: 'Image Overlay',
546
+ tooltip: 'Toggle Image Overlay',
547
+ commands: {
548
+ commandName: 'setToolEnabled',
549
+ commandOptions: {
550
+ toolName: 'ImageOverlayViewer',
551
+ toggle: true
552
+ }
632
553
  },
633
- context: 'CORNERSTONE'
634
- }], 'Rectangle'), src/* ToolbarService */.Ok._createActionButton('TagBrowser', 'list-bullets', 'Dicom Tag Browser', [{
635
- commandName: 'openDICOMTagViewer',
636
- commandOptions: {},
637
- context: 'DEFAULT'
638
- }], 'Dicom Tag Browser')]
554
+ evaluate: 'evaluate.cornerstoneTool.toggle'
555
+ }), moreTools_createButton({
556
+ id: 'StackScroll',
557
+ icon: 'tool-stack-scroll',
558
+ label: 'Stack Scroll',
559
+ tooltip: 'Stack Scroll',
560
+ commands: setToolActiveToolbar,
561
+ evaluate: 'evaluate.cornerstoneTool'
562
+ }), moreTools_createButton({
563
+ id: 'invert',
564
+ icon: 'tool-invert',
565
+ label: 'Invert',
566
+ tooltip: 'Invert Colors',
567
+ commands: 'invertViewport',
568
+ evaluate: 'evaluate.viewportProperties.toggle'
569
+ }), moreTools_createButton({
570
+ id: 'Probe',
571
+ icon: 'tool-probe',
572
+ label: 'Probe',
573
+ tooltip: 'Probe',
574
+ commands: setToolActiveToolbar,
575
+ evaluate: 'evaluate.cornerstoneTool'
576
+ }), moreTools_createButton({
577
+ id: 'Cine',
578
+ icon: 'tool-cine',
579
+ label: 'Cine',
580
+ tooltip: 'Cine',
581
+ commands: 'toggleCine',
582
+ evaluate: 'evaluate.cine'
583
+ }), moreTools_createButton({
584
+ id: 'Angle',
585
+ icon: 'tool-angle',
586
+ label: 'Angle',
587
+ tooltip: 'Angle',
588
+ commands: setToolActiveToolbar,
589
+ evaluate: 'evaluate.cornerstoneTool'
590
+ }), moreTools_createButton({
591
+ id: 'Magnify',
592
+ icon: 'tool-magnify',
593
+ label: 'Magnify',
594
+ tooltip: 'Magnify',
595
+ commands: setToolActiveToolbar,
596
+ evaluate: 'evaluate.cornerstoneTool'
597
+ }), moreTools_createButton({
598
+ id: 'RectangleROI',
599
+ icon: 'tool-rectangle',
600
+ label: 'Rectangle',
601
+ tooltip: 'Rectangle',
602
+ commands: setToolActiveToolbar,
603
+ evaluate: 'evaluate.cornerstoneTool'
604
+ }), moreTools_createButton({
605
+ id: 'CalibrationLine',
606
+ icon: 'tool-calibration',
607
+ label: 'Calibration',
608
+ tooltip: 'Calibration Line',
609
+ commands: setToolActiveToolbar,
610
+ evaluate: 'evaluate.cornerstoneTool'
611
+ }), moreTools_createButton({
612
+ id: 'TagBrowser',
613
+ icon: 'list-bullets',
614
+ label: 'Dicom Tag Browser',
615
+ tooltip: 'Dicom Tag Browser',
616
+ commands: 'openDICOMTagViewer'
617
+ })]
639
618
  }
640
619
  }];
641
620
  /* harmony default export */ const src_moreTools = (moreTools);
642
- ;// CONCATENATED MODULE: ../../../modes/basic-test-mode/src/moreToolsMpr.ts
643
-
644
- const moreToolsMpr = [{
645
- id: 'MoreToolsMpr',
646
- type: 'ohif.splitButton',
647
- props: {
648
- isRadio: true,
649
- // ?
650
- groupId: 'MoreTools',
651
- primary: src/* ToolbarService */.Ok._createActionButton('Reset', 'tool-reset', 'Reset View', [{
652
- commandName: 'resetViewport'
653
- }], 'Reset'),
654
- secondary: {
655
- icon: 'chevron-down',
656
- label: '',
657
- isActive: true,
658
- tooltip: 'More Tools'
659
- },
660
- items: [src/* ToolbarService */.Ok._createActionButton('Reset', 'tool-reset', 'Reset View', [{
661
- commandName: 'resetViewport'
662
- }], 'Reset'), src/* ToolbarService */.Ok._createToolButton('StackScroll', 'tool-stack-scroll', 'Stack Scroll', [{
663
- commandName: 'setToolActive',
664
- commandOptions: {
665
- toolName: 'StackScroll'
666
- },
667
- context: 'CORNERSTONE'
668
- }], 'Stack Scroll'), src/* ToolbarService */.Ok._createActionButton('invert', 'tool-invert', 'Invert', [{
669
- commandName: 'invertViewport',
670
- commandOptions: {},
671
- context: 'CORNERSTONE'
672
- }], 'Invert Colors'), src/* ToolbarService */.Ok._createToolButton('Probe', 'tool-probe', 'Probe', [{
673
- commandName: 'setToolActive',
674
- commandOptions: {
675
- toolName: 'DragProbe'
676
- },
677
- context: 'CORNERSTONE'
678
- }], 'Probe'), src/* ToolbarService */.Ok._createToggleButton('cine', 'tool-cine', 'Cine', [{
679
- commandName: 'toggleCine',
680
- context: 'CORNERSTONE'
681
- }], 'Cine'), src/* ToolbarService */.Ok._createToolButton('Angle', 'tool-angle', 'Angle', [{
682
- commandName: 'setToolActive',
683
- commandOptions: {
684
- toolName: 'Angle'
685
- },
686
- context: 'CORNERSTONE'
687
- }], 'Angle'), src/* ToolbarService */.Ok._createToolButton('Rectangle', 'tool-rectangle', 'Rectangle', [{
688
- commandName: 'setToolActive',
689
- commandOptions: {
690
- toolName: 'RectangleROI'
691
- },
692
- context: 'CORNERSTONE'
693
- }], 'Rectangle'), src/* ToolbarService */.Ok._createActionButton('TagBrowser', 'list-bullets', 'Dicom Tag Browser', [{
694
- commandName: 'openDICOMTagViewer',
695
- commandOptions: {},
696
- context: 'DEFAULT'
697
- }], 'Dicom Tag Browser')]
698
- }
699
- }];
700
- /* harmony default export */ const src_moreToolsMpr = (moreToolsMpr);
621
+ // EXTERNAL MODULE: ../../../node_modules/i18next/dist/esm/i18next.js
622
+ var i18next = __webpack_require__(92344);
701
623
  ;// CONCATENATED MODULE: ../../../modes/basic-test-mode/src/index.ts
702
624
 
703
625
 
@@ -709,8 +631,6 @@ const moreToolsMpr = [{
709
631
  // Allow this mode by excluding non-imaging modalities such as SR, SEG
710
632
  // Also, SM is not a simple imaging modalities, so exclude it.
711
633
  const NON_IMAGE_MODALITIES = ['SM', 'ECG', 'SR', 'SEG'];
712
- const DEFAULT_TOOL_GROUP_ID = 'default';
713
- const MPR_TOOL_GROUP_ID = 'mpr';
714
634
  const ohif = {
715
635
  layout: '@ohif/extension-default.layoutTemplateModule.viewerLayout',
716
636
  sopClassHandler: '@ohif/extension-default.sopClassHandlerModule.stack',
@@ -755,16 +675,15 @@ function modeFactory() {
755
675
  // We should not be.
756
676
  id: id,
757
677
  routeName: 'basic-test',
758
- displayName: 'Basic Test Mode',
678
+ displayName: i18next/* default */.A.t('Modes:Basic Test Mode'),
759
679
  /**
760
680
  * Lifecycle hooks
761
681
  */
762
- onModeEnter: _ref => {
763
- let {
764
- servicesManager,
765
- extensionManager,
766
- commandsManager
767
- } = _ref;
682
+ onModeEnter: ({
683
+ servicesManager,
684
+ extensionManager,
685
+ commandsManager
686
+ }) => {
768
687
  const {
769
688
  measurementService,
770
689
  toolbarService,
@@ -778,47 +697,22 @@ function modeFactory() {
778
697
 
779
698
  // init customizations
780
699
  customizationService.addModeCustomizations(['@ohif/extension-test.customizationModule.custom-context-menu']);
781
- let unsubscribe;
782
- toolbarService.setDefaultTool({
783
- groupId: 'WindowLevel',
784
- itemId: 'WindowLevel',
785
- interactionType: 'tool',
786
- commands: [{
787
- commandName: 'setToolActive',
788
- commandOptions: {
789
- toolName: 'WindowLevel'
790
- },
791
- context: 'CORNERSTONE'
792
- }]
793
- });
794
- const activateTool = () => {
795
- toolbarService.recordInteraction(toolbarService.getDefaultTool());
796
-
797
- // We don't need to reset the active tool whenever a viewport is getting
798
- // added to the toolGroup.
799
- unsubscribe();
800
- };
801
-
802
- // Since we only have one viewport for the basic cs3d mode and it has
803
- // only one hanging protocol, we can just use the first viewport
804
- ({
805
- unsubscribe
806
- } = toolGroupService.subscribe(toolGroupService.EVENTS.VIEWPORT_ADDED, activateTool));
807
- toolbarService.init(extensionManager);
808
- toolbarService.addButtons([...src_toolbarButtons, ...src_moreTools, ...src_moreToolsMpr]);
809
- toolbarService.createButtonSection(DEFAULT_TOOL_GROUP_ID, ['MeasurementTools', 'Zoom', 'WindowLevel', 'Pan', 'Capture', 'Layout', 'MPR', 'MoreTools']);
810
- toolbarService.createButtonSection(MPR_TOOL_GROUP_ID, ['MeasurementTools', 'Zoom', 'WindowLevel', 'Pan', 'Capture', 'Layout', 'MPR', 'Crosshairs', 'MoreToolsMpr']);
700
+ toolbarService.addButtons([...src_toolbarButtons, ...src_moreTools]);
701
+ toolbarService.createButtonSection('primary', ['MeasurementTools', 'Zoom', 'WindowLevel', 'Pan', 'Capture', 'Layout', 'MPR', 'Crosshairs', 'MoreTools']);
811
702
  },
812
- onModeExit: _ref2 => {
813
- let {
814
- servicesManager
815
- } = _ref2;
703
+ onModeExit: ({
704
+ servicesManager
705
+ }) => {
816
706
  const {
817
707
  toolGroupService,
818
708
  syncGroupService,
819
709
  segmentationService,
820
- cornerstoneViewportService
710
+ cornerstoneViewportService,
711
+ uiDialogService,
712
+ uiModalService
821
713
  } = servicesManager.services;
714
+ uiDialogService.dismissAll();
715
+ uiModalService.hide();
822
716
  toolGroupService.destroy();
823
717
  syncGroupService.destroy();
824
718
  segmentationService.destroy();
@@ -828,14 +722,16 @@ function modeFactory() {
828
722
  study: [],
829
723
  series: []
830
724
  },
831
- isValidMode: function (_ref3) {
832
- let {
833
- modalities
834
- } = _ref3;
725
+ isValidMode: function ({
726
+ modalities
727
+ }) {
835
728
  const modalities_list = modalities.split('\\');
836
729
 
837
730
  // Exclude non-image modalities
838
- return !!modalities_list.filter(modality => NON_IMAGE_MODALITIES.indexOf(modality) === -1).length;
731
+ return {
732
+ valid: !!modalities_list.filter(modality => NON_IMAGE_MODALITIES.indexOf(modality) === -1).length,
733
+ description: 'The mode does not support studies that ONLY include the following modalities: SM, ECG, SR, SEG'
734
+ };
839
735
  },
840
736
  routes: [{
841
737
  path: 'basic-test',
@@ -881,7 +777,7 @@ function modeFactory() {
881
777
  // Don't store the hotkeys for basic-test-mode under the same key
882
778
  // because they get customized by tests
883
779
  name: 'basic-test-hotkeys',
884
- hotkeys: [...src/* hotkeys */.dD.defaults.hotkeyBindings]
780
+ hotkeys: [...src/* hotkeys */.ot.defaults.hotkeyBindings]
885
781
  }
886
782
  };
887
783
  }
@@ -892,13 +788,6 @@ const mode = {
892
788
  };
893
789
  /* harmony default export */ const basic_test_mode_src = (mode);
894
790
 
895
- /***/ }),
896
-
897
- /***/ 78753:
898
- /***/ (() => {
899
-
900
- /* (ignored) */
901
-
902
791
  /***/ })
903
792
 
904
793
  }]);