@ohif/app 3.8.0-beta.54 → 3.8.0-beta.55

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 (44) hide show
  1. package/dist/{223.bundle.d4ac6ef2cfe47a9c4afc.js → 109.bundle.b4fee2a22b622839baf5.js} +50 -50
  2. package/dist/{471.bundle.eeb78105b59e688832a6.js → 121.bundle.5d0736acd6a7090ff2d0.js} +18 -18
  3. package/dist/{19.bundle.99b3819a5b7a6bd9394c.js → 155.bundle.e813e01526393fc0c81d.js} +93 -93
  4. package/dist/{687.bundle.a6ee04b2e5fd5e5445b6.js → 164.bundle.c5c6a095c04bf80c9dc6.js} +4 -4
  5. package/dist/{506.bundle.e243d2ef94ad3925c403.js → 188.bundle.df0f701a626b2bdd5607.js} +11 -11
  6. package/dist/{199.bundle.fdd939db52f25dc92071.js → 250.bundle.20d6ff7e3aa73db874d9.js} +42 -42
  7. package/dist/{965.bundle.67f3b1a05b5cbe521d62.js → 270.bundle.24bd8268981ff45bc5ed.js} +60 -60
  8. package/dist/{95.bundle.2236101be3cc36b322e8.js → 290.bundle.88e45f20df861f74b040.js} +12 -12
  9. package/dist/{451.bundle.311cd3be9916e08450e9.js → 295.bundle.5d7c931dcc154900b181.js} +21 -22
  10. package/dist/{125.bundle.df666cb677e5a8982157.js → 297.bundle.81d63bb0b66d63df6d86.js} +4 -4
  11. package/dist/{613.bundle.9c0ad8fbe2c130862f6c.js → 317.bundle.4bbbbeacc63a87fe0052.js} +9 -9
  12. package/dist/{483.bundle.75d178137b66ccdbc9b0.js → 339.bundle.6071d0db23a8fd7b4ce1.js} +65 -65
  13. package/dist/{202.bundle.495cba6bbee744cf8f72.js → 342.bundle.c260b2f9105f31c53e06.js} +93 -93
  14. package/dist/{466.bundle.93759a09e651f7b3c995.js → 50.bundle.a02f930758203e922b61.js} +47 -47
  15. package/dist/{886.bundle.94a4536167d0f8cae1ae.js → 530.bundle.59fb7594f8c8fc3bb3cc.js} +24 -24
  16. package/dist/{250.bundle.577da106dd763c7bf9d0.js → 544.bundle.757758f236737ef68537.js} +22 -22
  17. package/dist/{170.bundle.f343198e07760a7ead7d.js → 559.bundle.8c5f8069652858166212.js} +63 -63
  18. package/dist/{410.bundle.a348d8825d915c77d550.js → 594.bundle.5587e112957597bfa00e.js} +11 -11
  19. package/dist/{661.bundle.949c984fe2f9f753b65c.js → 644.bundle.1e77691d2eeb96a423b0.js} +4 -4
  20. package/dist/{185.bundle.ff56990135b9136734cf.js → 68.bundle.3f8ecb580774e553c5e2.js} +47 -47
  21. package/dist/{738.bundle.a68b638a4281ede90e1f.js → 704.bundle.5f768638951d88f5b04a.js} +221 -221
  22. package/dist/{359.bundle.ef640f0cee0493868d9d.js → 724.bundle.3d153d487a4df09d7fc1.js} +12 -12
  23. package/dist/{831.bundle.127a3064e8844d6d2c82.js → 726.bundle.ca49b063dace33d27ae3.js} +512 -512
  24. package/dist/{530.bundle.f904325ef4195d69ac0e.js → 835.bundle.15aff0b7433bb0dd6d6d.js} +28 -28
  25. package/dist/{822.bundle.8b745e28bc9eb9afbc61.js → 862.bundle.9495643df5c63de0ac57.js} +19 -19
  26. package/dist/{181.bundle.aff453c348111303ceac.js → 889.bundle.3fbb54e829d5c48d82fd.js} +33 -38
  27. package/dist/{281.bundle.fae344af5b015f837f25.js → 905.bundle.290943a93a696c835e94.js} +8 -8
  28. package/dist/{814.bundle.0ec180d5b229f4e6406f.js → 907.bundle.d161c4269937e5e77f2d.js} +9 -9
  29. package/dist/{417.bundle.5c66801d23d0e98c00e6.js → 931.bundle.d270a1fda9a2836c3cc5.js} +25 -25
  30. package/dist/{686.bundle.62c827fe4f0d054c164e.js → 939.bundle.84ee0b844023d924a22b.js} +4 -4
  31. package/dist/{12.bundle.f8e4685ed24432735e1b.js → 961.bundle.2ada19a2348f025c8eca.js} +8 -8
  32. package/dist/{290.bundle.83733eacedfae557e8cf.js → 963.bundle.a998a59f759bd3be3e47.js} +440 -218
  33. package/dist/{app.bundle.e97dc9a2b1087531aa22.js → app.bundle.708fb56d4d3a283387f4.js} +5482 -5141
  34. package/dist/{dicom-microscopy-viewer.bundle.a7d5060eead13771e784.js → dicom-microscopy-viewer.bundle.d3a56dc9f62df5e11019.js} +3 -3
  35. package/dist/index.html +1 -1
  36. package/dist/sw.js +1 -1
  37. package/package.json +21 -18
  38. package/dist/23.bundle.9d989522a6e4fdcb9c72.js +0 -900
  39. /package/dist/{19.css → 155.css} +0 -0
  40. /package/dist/{579.css → 481.css} +0 -0
  41. /package/dist/{466.css → 50.css} +0 -0
  42. /package/dist/{250.css → 544.css} +0 -0
  43. /package/dist/{181.css → 889.css} +0 -0
  44. /package/dist/{290.css → 963.css} +0 -0
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
- (globalThis["webpackChunk"] = globalThis["webpackChunk"] || []).push([[290],{
2
+ (globalThis["webpackChunk"] = globalThis["webpackChunk"] || []).push([[963],{
3
3
 
4
- /***/ 21290:
4
+ /***/ 34963:
5
5
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
6
6
 
7
7
  // ESM COMPAT FLAG
@@ -24,7 +24,7 @@ __webpack_require__.d(utils_namespaceObject, {
24
24
  getDisplayUnit: () => (utils_getDisplayUnit),
25
25
  getFirstAnnotationSelected: () => (getFirstAnnotationSelected),
26
26
  getHandlesFromPoints: () => (getHandlesFromPoints),
27
- getSOPInstanceAttributes: () => (getSOPInstanceAttributes/* default */.Z),
27
+ getSOPInstanceAttributes: () => (getSOPInstanceAttributes/* default */.A),
28
28
  isAnnotationSelected: () => (isAnnotationSelected),
29
29
  setAnnotationSelected: () => (setAnnotationSelected)
30
30
  });
@@ -34,20 +34,20 @@ var types_namespaceObject = {};
34
34
  __webpack_require__.r(types_namespaceObject);
35
35
 
36
36
  // EXTERNAL MODULE: ../../../node_modules/react/index.js
37
- var react = __webpack_require__(43001);
37
+ var react = __webpack_require__(41766);
38
38
  // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/index.js + 376 modules
39
- var esm = __webpack_require__(64225);
39
+ var esm = __webpack_require__(28991);
40
40
  // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/tools/dist/esm/index.js + 454 modules
41
- var dist_esm = __webpack_require__(76634);
41
+ var dist_esm = __webpack_require__(28649);
42
42
  // EXTERNAL MODULE: ../../core/src/index.ts + 65 modules
43
- var src = __webpack_require__(71771);
43
+ var src = __webpack_require__(30257);
44
44
  // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/streaming-image-volume-loader/dist/esm/index.js + 13 modules
45
- var streaming_image_volume_loader_dist_esm = __webpack_require__(15793);
45
+ var streaming_image_volume_loader_dist_esm = __webpack_require__(23722);
46
46
  // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/dicom-image-loader/dist/dynamic-import/cornerstoneDICOMImageLoader.min.js
47
- var cornerstoneDICOMImageLoader_min = __webpack_require__(61539);
47
+ var cornerstoneDICOMImageLoader_min = __webpack_require__(54578);
48
48
  var cornerstoneDICOMImageLoader_min_default = /*#__PURE__*/__webpack_require__.n(cornerstoneDICOMImageLoader_min);
49
49
  // EXTERNAL MODULE: ../../../node_modules/dicom-parser/dist/dicomParser.min.js
50
- var dicomParser_min = __webpack_require__(56660);
50
+ var dicomParser_min = __webpack_require__(45561);
51
51
  var dicomParser_min_default = /*#__PURE__*/__webpack_require__.n(dicomParser_min);
52
52
  ;// CONCATENATED MODULE: ../../../extensions/cornerstone/src/initWADOImageLoader.js
53
53
 
@@ -80,7 +80,7 @@ function initWebWorkers(appConfig) {
80
80
  function initWADOImageLoader(userAuthenticationService, appConfig, extensionManager) {
81
81
  (cornerstoneDICOMImageLoader_min_default()).external.cornerstone = esm;
82
82
  (cornerstoneDICOMImageLoader_min_default()).external.dicomParser = (dicomParser_min_default());
83
- registerVolumeLoader('cornerstoneStreamingImageVolume', streaming_image_volume_loader_dist_esm/* cornerstoneStreamingImageVolumeLoader */.IU);
83
+ registerVolumeLoader('cornerstoneStreamingImageVolume', streaming_image_volume_loader_dist_esm/* cornerstoneStreamingImageVolumeLoader */.FC);
84
84
  cornerstoneDICOMImageLoader_min_default().configure({
85
85
  decodeConfig: {
86
86
  // !! IMPORTANT !!
@@ -95,7 +95,7 @@ function initWADOImageLoader(userAuthenticationService, appConfig, extensionMana
95
95
  //TODO should be removed in the future and request emitted by DicomWebDataSource
96
96
  const sourceConfig = extensionManager.getActiveDataSource()?.[0].getConfig() ?? {};
97
97
  const headers = userAuthenticationService.getAuthorizationHeader();
98
- const acceptHeader = src.utils.generateAcceptHeader(sourceConfig.acceptHeader, sourceConfig.requestTransferSyntaxUID, sourceConfig.omitQuotationForMultipartRequest);
98
+ const acceptHeader = src/* utils */.Wp.generateAcceptHeader(sourceConfig.acceptHeader, sourceConfig.requestTransferSyntaxUID, sourceConfig.omitQuotationForMultipartRequest);
99
99
  const xhrRequestHeaders = {
100
100
  Accept: acceptHeader
101
101
  };
@@ -105,7 +105,7 @@ function initWADOImageLoader(userAuthenticationService, appConfig, extensionMana
105
105
  return xhrRequestHeaders;
106
106
  },
107
107
  errorInterceptor: error => {
108
- src/* errorHandler */.Po.getHTTPErrorHandler(error);
108
+ src/* errorHandler */.r_.getHTTPErrorHandler(error);
109
109
  }
110
110
  });
111
111
  initWebWorkers(appConfig);
@@ -120,7 +120,7 @@ function destroy() {
120
120
  webWorkers.length = 0;
121
121
  }
122
122
  // EXTERNAL MODULE: ../../ui/src/index.js + 487 modules
123
- var ui_src = __webpack_require__(18414);
123
+ var ui_src = __webpack_require__(55395);
124
124
  ;// CONCATENATED MODULE: ../../../extensions/cornerstone/src/utils/callInputDialog.tsx
125
125
 
126
126
 
@@ -170,7 +170,7 @@ function callInputDialog(uiDialogService, data, callback, isArrowAnnotateInputDi
170
170
  centralize: true,
171
171
  isDraggable: false,
172
172
  showOverlay: true,
173
- content: ui_src/* Dialog */.Vq,
173
+ content: ui_src/* Dialog */.lG,
174
174
  contentProps: {
175
175
  title: dialogTitle,
176
176
  value: {
@@ -183,18 +183,18 @@ function callInputDialog(uiDialogService, data, callback, isArrowAnnotateInputDi
183
183
  actions: [{
184
184
  id: 'cancel',
185
185
  text: 'Cancel',
186
- type: ui_src/* ButtonEnums.type */.LZ.dt.secondary
186
+ type: ui_src/* ButtonEnums.type */.Ny.NW.secondary
187
187
  }, {
188
188
  id: 'save',
189
189
  text: 'Save',
190
- type: ui_src/* ButtonEnums.type */.LZ.dt.primary
190
+ type: ui_src/* ButtonEnums.type */.Ny.NW.primary
191
191
  }],
192
192
  onSubmit: onSubmitHandler,
193
193
  body: ({
194
194
  value,
195
195
  setValue
196
196
  }) => {
197
- return /*#__PURE__*/react.createElement(ui_src/* Input */.II, {
197
+ return /*#__PURE__*/react.createElement(ui_src/* Input */.pd, {
198
198
  autoFocus: true,
199
199
  className: "border-primary-main bg-black",
200
200
  type: "text",
@@ -227,7 +227,7 @@ function callInputDialog(uiDialogService, data, callback, isArrowAnnotateInputDi
227
227
  }
228
228
  /* harmony default export */ const utils_callInputDialog = (callInputDialog);
229
229
  // EXTERNAL MODULE: ../../../extensions/cornerstone/src/state.ts
230
- var state = __webpack_require__(73704);
230
+ var state = __webpack_require__(71353);
231
231
  ;// CONCATENATED MODULE: ../../../extensions/cornerstone/src/utils/getActiveViewportEnabledElement.ts
232
232
 
233
233
 
@@ -237,7 +237,7 @@ function getActiveViewportEnabledElement(viewportGridService) {
237
237
  } = viewportGridService.getState();
238
238
  const {
239
239
  element
240
- } = (0,state/* getEnabledElement */.K8)(activeViewportId) || {};
240
+ } = (0,state/* getEnabledElement */.kJ)(activeViewportId) || {};
241
241
  const enabledElement = (0,esm.getEnabledElement)(element);
242
242
  return enabledElement;
243
243
  }
@@ -348,7 +348,7 @@ function onCompletedCalibrationLine(servicesManager, csToolsEvent) {
348
348
  });
349
349
  }
350
350
  // EXTERNAL MODULE: ../../core/src/utils/index.js + 26 modules
351
- var utils = __webpack_require__(3225);
351
+ var utils = __webpack_require__(17541);
352
352
  ;// CONCATENATED MODULE: ../../../extensions/cornerstone/src/tools/OverlayPlaneModuleProvider.ts
353
353
 
354
354
  const _cachedOverlayMetadata = new Map();
@@ -522,7 +522,7 @@ class ImageOverlayViewerTool extends dist_esm.AnnotationDisplayTool {
522
522
  } else if (overlay.pixelData.retrieveBulkData) {
523
523
  pixelData = await overlay.pixelData.retrieveBulkData();
524
524
  } else if (overlay.pixelData.InlineBinary) {
525
- const blob = (0,utils/* b64toBlob */.Mi)(overlay.pixelData.InlineBinary);
525
+ const blob = (0,utils/* b64toBlob */.Vk)(overlay.pixelData.InlineBinary);
526
526
  const arrayBuffer = await blob.arrayBuffer();
527
527
  pixelData = arrayBuffer;
528
528
  }
@@ -535,7 +535,7 @@ class ImageOverlayViewerTool extends dist_esm.AnnotationDisplayTool {
535
535
  }, overlay.color || color, pixelData);
536
536
  return {
537
537
  ...overlay,
538
- _id: (0,utils/* guid */.M8)(),
538
+ _id: (0,utils/* guid */.Os)(),
539
539
  dataUrl,
540
540
  // this will be a data url expression of the rendered image
541
541
  color
@@ -690,7 +690,7 @@ const toolNames = {
690
690
  ;// CONCATENATED MODULE: ../../../extensions/cornerstone/src/utils/measurementServiceMappings/constants/supportedTools.js
691
691
  /* harmony default export */ const supportedTools = (['Length', 'EllipticalROI', 'CircleROI', 'Bidirectional', 'ArrowAnnotate', 'Angle', 'CobbAngle', 'Probe', 'RectangleROI', 'PlanarFreehandROI']);
692
692
  // EXTERNAL MODULE: ../../../extensions/cornerstone/src/utils/measurementServiceMappings/utils/getSOPInstanceAttributes.js
693
- var getSOPInstanceAttributes = __webpack_require__(87172);
693
+ var getSOPInstanceAttributes = __webpack_require__(1663);
694
694
  ;// CONCATENATED MODULE: ../../../extensions/cornerstone/src/utils/measurementServiceMappings/Length.ts
695
695
 
696
696
 
@@ -730,7 +730,7 @@ const Length = {
730
730
  SOPInstanceUID,
731
731
  SeriesInstanceUID,
732
732
  StudyInstanceUID
733
- } = (0,getSOPInstanceAttributes/* default */.Z)(referencedImageId, cornerstoneViewportService, viewportId);
733
+ } = (0,getSOPInstanceAttributes/* default */.A)(referencedImageId, cornerstoneViewportService, viewportId);
734
734
  let displaySet;
735
735
  if (SOPInstanceUID) {
736
736
  displaySet = displaySetService.getDisplaySetForSOPInstanceUID(SOPInstanceUID, SeriesInstanceUID);
@@ -789,7 +789,7 @@ function getMappedAnnotations(annotation, displaySetService) {
789
789
  SOPInstanceUID,
790
790
  SeriesInstanceUID,
791
791
  frameNumber
792
- } = (0,getSOPInstanceAttributes/* default */.Z)(referencedImageId);
792
+ } = (0,getSOPInstanceAttributes/* default */.A)(referencedImageId);
793
793
  const displaySet = displaySetService.getDisplaySetForSOPInstanceUID(SOPInstanceUID, SeriesInstanceUID, frameNumber);
794
794
  const {
795
795
  SeriesNumber
@@ -872,7 +872,7 @@ function getDisplayText(mappedAnnotations, displaySet) {
872
872
  if (length === null || length === undefined) {
873
873
  return displayText;
874
874
  }
875
- const roundedLength = src.utils.roundNumber(length, 2);
875
+ const roundedLength = src/* utils */.Wp.roundNumber(length, 2);
876
876
  displayText.push(`${roundedLength} ${unit} (S: ${SeriesNumber}${instanceText}${frameText})`);
877
877
  return displayText;
878
878
  }
@@ -969,7 +969,7 @@ const Bidirectional = {
969
969
  SOPInstanceUID,
970
970
  SeriesInstanceUID,
971
971
  StudyInstanceUID
972
- } = (0,getSOPInstanceAttributes/* default */.Z)(referencedImageId, cornerstoneViewportService, viewportId);
972
+ } = (0,getSOPInstanceAttributes/* default */.A)(referencedImageId, cornerstoneViewportService, viewportId);
973
973
  let displaySet;
974
974
  if (SOPInstanceUID) {
975
975
  displaySet = displaySetService.getDisplaySetForSOPInstanceUID(SOPInstanceUID, SeriesInstanceUID);
@@ -1029,7 +1029,7 @@ function Bidirectional_getMappedAnnotations(annotation, displaySetService) {
1029
1029
  SOPInstanceUID,
1030
1030
  SeriesInstanceUID,
1031
1031
  frameNumber
1032
- } = (0,getSOPInstanceAttributes/* default */.Z)(referencedImageId);
1032
+ } = (0,getSOPInstanceAttributes/* default */.A)(referencedImageId);
1033
1033
  const displaySet = displaySetService.getDisplaySetForSOPInstanceUID(SOPInstanceUID, SeriesInstanceUID, frameNumber);
1034
1034
  const {
1035
1035
  SeriesNumber
@@ -1104,8 +1104,8 @@ function Bidirectional_getDisplayText(mappedAnnotations, displaySet) {
1104
1104
  SOPInstanceUID,
1105
1105
  frameNumber
1106
1106
  } = mappedAnnotations[0];
1107
- const roundedLength = src.utils.roundNumber(length, 2);
1108
- const roundedWidth = src.utils.roundNumber(width, 2);
1107
+ const roundedLength = src/* utils */.Wp.roundNumber(length, 2);
1108
+ const roundedWidth = src/* utils */.Wp.roundNumber(width, 2);
1109
1109
  const instance = displaySet.images.find(image => image.SOPInstanceUID === SOPInstanceUID);
1110
1110
  let InstanceNumber;
1111
1111
  if (instance) {
@@ -1152,7 +1152,7 @@ const EllipticalROI = {
1152
1152
  SOPInstanceUID,
1153
1153
  SeriesInstanceUID,
1154
1154
  StudyInstanceUID
1155
- } = (0,getSOPInstanceAttributes/* default */.Z)(referencedImageId, cornerstoneViewportService, viewportId);
1155
+ } = (0,getSOPInstanceAttributes/* default */.A)(referencedImageId, cornerstoneViewportService, viewportId);
1156
1156
  let displaySet;
1157
1157
  if (SOPInstanceUID) {
1158
1158
  displaySet = displaySetService.getDisplaySetForSOPInstanceUID(SOPInstanceUID, SeriesInstanceUID);
@@ -1212,7 +1212,7 @@ function EllipticalROI_getMappedAnnotations(annotation, displaySetService) {
1212
1212
  SOPInstanceUID,
1213
1213
  SeriesInstanceUID,
1214
1214
  frameNumber
1215
- } = (0,getSOPInstanceAttributes/* default */.Z)(referencedImageId);
1215
+ } = (0,getSOPInstanceAttributes/* default */.A)(referencedImageId);
1216
1216
  const displaySet = displaySetService.getDisplaySetForSOPInstanceUID(SOPInstanceUID, SeriesInstanceUID, frameNumber);
1217
1217
  const {
1218
1218
  SeriesNumber
@@ -1306,7 +1306,7 @@ function EllipticalROI_getDisplayText(mappedAnnotations, displaySet) {
1306
1306
  }
1307
1307
  const instanceText = InstanceNumber ? ` I: ${InstanceNumber}` : '';
1308
1308
  const frameText = displaySet.isMultiFrame ? ` F: ${frameNumber}` : '';
1309
- const roundedArea = src.utils.roundNumber(area, 2);
1309
+ const roundedArea = src/* utils */.Wp.roundNumber(area, 2);
1310
1310
  displayText.push(`${roundedArea} ${utils_getDisplayUnit(areaUnit)}`);
1311
1311
 
1312
1312
  // Todo: we need a better UI for displaying all these information
@@ -1318,7 +1318,7 @@ function EllipticalROI_getDisplayText(mappedAnnotations, displaySet) {
1318
1318
  } = mappedAnnotation;
1319
1319
  let maxStr = '';
1320
1320
  if (max) {
1321
- const roundedMax = src.utils.roundNumber(max, 2);
1321
+ const roundedMax = src/* utils */.Wp.roundNumber(max, 2);
1322
1322
  maxStr = `Max: ${roundedMax} <small>${utils_getDisplayUnit(unit)}</small> `;
1323
1323
  }
1324
1324
  const str = `${maxStr}(S:${SeriesNumber}${instanceText}${frameText})`;
@@ -1363,7 +1363,7 @@ const CircleROI = {
1363
1363
  SOPInstanceUID,
1364
1364
  SeriesInstanceUID,
1365
1365
  StudyInstanceUID
1366
- } = (0,getSOPInstanceAttributes/* default */.Z)(referencedImageId, CornerstoneViewportService, viewportId);
1366
+ } = (0,getSOPInstanceAttributes/* default */.A)(referencedImageId, CornerstoneViewportService, viewportId);
1367
1367
  let displaySet;
1368
1368
  if (SOPInstanceUID) {
1369
1369
  displaySet = DisplaySetService.getDisplaySetForSOPInstanceUID(SOPInstanceUID, SeriesInstanceUID);
@@ -1423,7 +1423,7 @@ function CircleROI_getMappedAnnotations(annotation, DisplaySetService) {
1423
1423
  SOPInstanceUID,
1424
1424
  SeriesInstanceUID,
1425
1425
  frameNumber
1426
- } = (0,getSOPInstanceAttributes/* default */.Z)(referencedImageId);
1426
+ } = (0,getSOPInstanceAttributes/* default */.A)(referencedImageId);
1427
1427
  const displaySet = DisplaySetService.getDisplaySetForSOPInstanceUID(SOPInstanceUID, SeriesInstanceUID, frameNumber);
1428
1428
  const {
1429
1429
  SeriesNumber
@@ -1519,7 +1519,7 @@ function CircleROI_getDisplayText(mappedAnnotations, displaySet) {
1519
1519
  const frameText = displaySet.isMultiFrame ? ` F: ${frameNumber}` : '';
1520
1520
 
1521
1521
  // Area sometimes becomes undefined if `preventHandleOutsideImage` is off.
1522
- const roundedArea = src.utils.roundNumber(area || 0, 2);
1522
+ const roundedArea = src/* utils */.Wp.roundNumber(area || 0, 2);
1523
1523
  displayText.push(`${roundedArea} ${utils_getDisplayUnit(areaUnit)}`);
1524
1524
 
1525
1525
  // Todo: we need a better UI for displaying all these information
@@ -1531,7 +1531,7 @@ function CircleROI_getDisplayText(mappedAnnotations, displaySet) {
1531
1531
  } = mappedAnnotation;
1532
1532
  let maxStr = '';
1533
1533
  if (max) {
1534
- const roundedMax = src.utils.roundNumber(max, 2);
1534
+ const roundedMax = src/* utils */.Wp.roundNumber(max, 2);
1535
1535
  maxStr = `Max: ${roundedMax} <small>${utils_getDisplayUnit(unit)}</small> `;
1536
1536
  }
1537
1537
  const str = `${maxStr}(S:${SeriesNumber}${instanceText}${frameText})`;
@@ -1580,7 +1580,7 @@ const ArrowAnnotate_Length = {
1580
1580
  SOPInstanceUID,
1581
1581
  SeriesInstanceUID,
1582
1582
  StudyInstanceUID
1583
- } = (0,getSOPInstanceAttributes/* default */.Z)(referencedImageId, cornerstoneViewportService, viewportId);
1583
+ } = (0,getSOPInstanceAttributes/* default */.A)(referencedImageId, cornerstoneViewportService, viewportId);
1584
1584
  let displaySet;
1585
1585
  if (SOPInstanceUID) {
1586
1586
  displaySet = displaySetService.getDisplaySetForSOPInstanceUID(SOPInstanceUID, SeriesInstanceUID);
@@ -1631,7 +1631,7 @@ function ArrowAnnotate_getMappedAnnotations(annotation, displaySetService) {
1631
1631
  SOPInstanceUID,
1632
1632
  SeriesInstanceUID,
1633
1633
  frameNumber
1634
- } = (0,getSOPInstanceAttributes/* default */.Z)(referencedImageId);
1634
+ } = (0,getSOPInstanceAttributes/* default */.A)(referencedImageId);
1635
1635
  const displaySet = displaySetService.getDisplaySetForSOPInstanceUID(SOPInstanceUID, SeriesInstanceUID, frameNumber);
1636
1636
  const {
1637
1637
  SeriesNumber
@@ -1708,7 +1708,7 @@ const CobbAngle = {
1708
1708
  SOPInstanceUID,
1709
1709
  SeriesInstanceUID,
1710
1710
  StudyInstanceUID
1711
- } = (0,getSOPInstanceAttributes/* default */.Z)(referencedImageId, CornerstoneViewportService, viewportId);
1711
+ } = (0,getSOPInstanceAttributes/* default */.A)(referencedImageId, CornerstoneViewportService, viewportId);
1712
1712
  let displaySet;
1713
1713
  if (SOPInstanceUID) {
1714
1714
  displaySet = displaySetService.getDisplaySetForSOPInstanceUID(SOPInstanceUID, SeriesInstanceUID);
@@ -1767,7 +1767,7 @@ function CobbAngle_getMappedAnnotations(annotation, DisplaySetService) {
1767
1767
  SOPInstanceUID,
1768
1768
  SeriesInstanceUID,
1769
1769
  frameNumber
1770
- } = (0,getSOPInstanceAttributes/* default */.Z)(referencedImageId);
1770
+ } = (0,getSOPInstanceAttributes/* default */.A)(referencedImageId);
1771
1771
  const displaySet = DisplaySetService.getDisplaySetForSOPInstanceUID(SOPInstanceUID, SeriesInstanceUID, frameNumber);
1772
1772
  const {
1773
1773
  SeriesNumber
@@ -1848,7 +1848,7 @@ function CobbAngle_getDisplayText(mappedAnnotations, displaySet) {
1848
1848
  if (angle === undefined) {
1849
1849
  return displayText;
1850
1850
  }
1851
- const roundedAngle = src.utils.roundNumber(angle, 2);
1851
+ const roundedAngle = src/* utils */.Wp.roundNumber(angle, 2);
1852
1852
  displayText.push(`${roundedAngle} ${utils_getDisplayUnit(unit)} (S: ${SeriesNumber}${instanceText}${frameText})`);
1853
1853
  return displayText;
1854
1854
  }
@@ -1893,7 +1893,7 @@ const Angle = {
1893
1893
  SOPInstanceUID,
1894
1894
  SeriesInstanceUID,
1895
1895
  StudyInstanceUID
1896
- } = (0,getSOPInstanceAttributes/* default */.Z)(referencedImageId, CornerstoneViewportService, viewportId);
1896
+ } = (0,getSOPInstanceAttributes/* default */.A)(referencedImageId, CornerstoneViewportService, viewportId);
1897
1897
  let displaySet;
1898
1898
  if (SOPInstanceUID) {
1899
1899
  displaySet = displaySetService.getDisplaySetForSOPInstanceUID(SOPInstanceUID, SeriesInstanceUID);
@@ -1952,7 +1952,7 @@ function Angle_getMappedAnnotations(annotation, DisplaySetService) {
1952
1952
  SOPInstanceUID,
1953
1953
  SeriesInstanceUID,
1954
1954
  frameNumber
1955
- } = (0,getSOPInstanceAttributes/* default */.Z)(referencedImageId);
1955
+ } = (0,getSOPInstanceAttributes/* default */.A)(referencedImageId);
1956
1956
  const displaySet = DisplaySetService.getDisplaySetForSOPInstanceUID(SOPInstanceUID, SeriesInstanceUID, frameNumber);
1957
1957
  const {
1958
1958
  SeriesNumber
@@ -2033,7 +2033,7 @@ function Angle_getDisplayText(mappedAnnotations, displaySet) {
2033
2033
  if (angle === undefined) {
2034
2034
  return displayText;
2035
2035
  }
2036
- const roundedAngle = src.utils.roundNumber(angle, 2);
2036
+ const roundedAngle = src/* utils */.Wp.roundNumber(angle, 2);
2037
2037
  displayText.push(`${roundedAngle} ${utils_getDisplayUnit(unit)} (S: ${SeriesNumber}${instanceText}${frameText})`);
2038
2038
  return displayText;
2039
2039
  }
@@ -2076,7 +2076,7 @@ const PlanarFreehandROI = {
2076
2076
  SOPInstanceUID,
2077
2077
  SeriesInstanceUID,
2078
2078
  StudyInstanceUID
2079
- } = (0,getSOPInstanceAttributes/* default */.Z)(referencedImageId, CornerstoneViewportService, viewportId);
2079
+ } = (0,getSOPInstanceAttributes/* default */.A)(referencedImageId, CornerstoneViewportService, viewportId);
2080
2080
  let displaySet;
2081
2081
  if (SOPInstanceUID) {
2082
2082
  displaySet = DisplaySetService.getDisplaySetForSOPInstanceUID(SOPInstanceUID, SeriesInstanceUID);
@@ -2135,7 +2135,7 @@ function PlanarFreehandROI_getMappedAnnotations(annotationData, DisplaySetServic
2135
2135
  const {
2136
2136
  SOPInstanceUID: _SOPInstanceUID,
2137
2137
  SeriesInstanceUID: _SeriesInstanceUID
2138
- } = (0,getSOPInstanceAttributes/* default */.Z)(referencedImageId) || {};
2138
+ } = (0,getSOPInstanceAttributes/* default */.A)(referencedImageId) || {};
2139
2139
  if (!_SOPInstanceUID || !_SeriesInstanceUID) {
2140
2140
  return annotations;
2141
2141
  }
@@ -2208,7 +2208,7 @@ const RectangleROI = {
2208
2208
  SOPInstanceUID,
2209
2209
  SeriesInstanceUID,
2210
2210
  StudyInstanceUID
2211
- } = (0,getSOPInstanceAttributes/* default */.Z)(referencedImageId, CornerstoneViewportService, viewportId);
2211
+ } = (0,getSOPInstanceAttributes/* default */.A)(referencedImageId, CornerstoneViewportService, viewportId);
2212
2212
  let displaySet;
2213
2213
  if (SOPInstanceUID) {
2214
2214
  displaySet = DisplaySetService.getDisplaySetForSOPInstanceUID(SOPInstanceUID, SeriesInstanceUID);
@@ -2268,7 +2268,7 @@ function RectangleROI_getMappedAnnotations(annotation, DisplaySetService) {
2268
2268
  SOPInstanceUID,
2269
2269
  SeriesInstanceUID,
2270
2270
  frameNumber
2271
- } = (0,getSOPInstanceAttributes/* default */.Z)(referencedImageId);
2271
+ } = (0,getSOPInstanceAttributes/* default */.A)(referencedImageId);
2272
2272
  const displaySet = DisplaySetService.getDisplaySetForSOPInstanceUID(SOPInstanceUID, SeriesInstanceUID, frameNumber);
2273
2273
  const {
2274
2274
  SeriesNumber
@@ -2364,7 +2364,7 @@ function RectangleROI_getDisplayText(mappedAnnotations, displaySet) {
2364
2364
  const frameText = displaySet.isMultiFrame ? ` F: ${frameNumber}` : '';
2365
2365
 
2366
2366
  // Area sometimes becomes undefined if `preventHandleOutsideImage` is off.
2367
- const roundedArea = src.utils.roundNumber(area || 0, 2);
2367
+ const roundedArea = src/* utils */.Wp.roundNumber(area || 0, 2);
2368
2368
  displayText.push(`${roundedArea} ${utils_getDisplayUnit(areaUnit)}`);
2369
2369
 
2370
2370
  // Todo: we need a better UI for displaying all these information
@@ -2376,7 +2376,7 @@ function RectangleROI_getDisplayText(mappedAnnotations, displaySet) {
2376
2376
  } = mappedAnnotation;
2377
2377
  let maxStr = '';
2378
2378
  if (max) {
2379
- const roundedMax = src.utils.roundNumber(max, 2);
2379
+ const roundedMax = src/* utils */.Wp.roundNumber(max, 2);
2380
2380
  maxStr = `Max: ${roundedMax} <small>${utils_getDisplayUnit(unit)}</small> `;
2381
2381
  }
2382
2382
  const str = `${maxStr}(S:${SeriesNumber}${instanceText}${frameText})`;
@@ -2416,7 +2416,7 @@ const measurementServiceMappingsFactory = (measurementService, displaySetService
2416
2416
  BIDIRECTIONAL,
2417
2417
  POINT,
2418
2418
  ANGLE
2419
- } = src.MeasurementService.VALUE_TYPES;
2419
+ } = src/* MeasurementService */.C5.VALUE_TYPES;
2420
2420
 
2421
2421
  // TODO -> I get why this was attempted, but its not nearly flexible enough.
2422
2422
  // A single measurement may have an ellipse + a bidirectional measurement, for instances.
@@ -2439,7 +2439,7 @@ const measurementServiceMappingsFactory = (measurementService, displaySetService
2439
2439
  toAnnotation: measurementServiceMappings_Length.toAnnotation,
2440
2440
  toMeasurement: csToolsAnnotation => measurementServiceMappings_Length.toMeasurement(csToolsAnnotation, displaySetService, cornerstoneViewportService, _getValueTypeFromToolType),
2441
2441
  matchingCriteria: [{
2442
- valueType: src.MeasurementService.VALUE_TYPES.POLYLINE,
2442
+ valueType: src/* MeasurementService */.C5.VALUE_TYPES.POLYLINE,
2443
2443
  points: 2
2444
2444
  }]
2445
2445
  },
@@ -2450,10 +2450,10 @@ const measurementServiceMappingsFactory = (measurementService, displaySetService
2450
2450
  // TODO -> We should eventually do something like shortAxis + longAxis,
2451
2451
  // But its still a little unclear how these automatic interpretations will work.
2452
2452
  {
2453
- valueType: src.MeasurementService.VALUE_TYPES.POLYLINE,
2453
+ valueType: src/* MeasurementService */.C5.VALUE_TYPES.POLYLINE,
2454
2454
  points: 2
2455
2455
  }, {
2456
- valueType: src.MeasurementService.VALUE_TYPES.POLYLINE,
2456
+ valueType: src/* MeasurementService */.C5.VALUE_TYPES.POLYLINE,
2457
2457
  points: 2
2458
2458
  }]
2459
2459
  },
@@ -2461,35 +2461,35 @@ const measurementServiceMappingsFactory = (measurementService, displaySetService
2461
2461
  toAnnotation: measurementServiceMappings_EllipticalROI.toAnnotation,
2462
2462
  toMeasurement: csToolsAnnotation => measurementServiceMappings_EllipticalROI.toMeasurement(csToolsAnnotation, displaySetService, cornerstoneViewportService, _getValueTypeFromToolType),
2463
2463
  matchingCriteria: [{
2464
- valueType: src.MeasurementService.VALUE_TYPES.ELLIPSE
2464
+ valueType: src/* MeasurementService */.C5.VALUE_TYPES.ELLIPSE
2465
2465
  }]
2466
2466
  },
2467
2467
  CircleROI: {
2468
2468
  toAnnotation: measurementServiceMappings_CircleROI.toAnnotation,
2469
2469
  toMeasurement: csToolsAnnotation => measurementServiceMappings_CircleROI.toMeasurement(csToolsAnnotation, displaySetService, cornerstoneViewportService, _getValueTypeFromToolType),
2470
2470
  matchingCriteria: [{
2471
- valueType: src.MeasurementService.VALUE_TYPES.CIRCLE
2471
+ valueType: src/* MeasurementService */.C5.VALUE_TYPES.CIRCLE
2472
2472
  }]
2473
2473
  },
2474
2474
  RectangleROI: {
2475
2475
  toAnnotation: measurementServiceMappings_RectangleROI.toAnnotation,
2476
2476
  toMeasurement: csToolsAnnotation => measurementServiceMappings_RectangleROI.toMeasurement(csToolsAnnotation, displaySetService, cornerstoneViewportService, _getValueTypeFromToolType),
2477
2477
  matchingCriteria: [{
2478
- valueType: src.MeasurementService.VALUE_TYPES.POLYLINE
2478
+ valueType: src/* MeasurementService */.C5.VALUE_TYPES.POLYLINE
2479
2479
  }]
2480
2480
  },
2481
2481
  PlanarFreehandROI: {
2482
2482
  toAnnotation: measurementServiceMappings_PlanarFreehandROI.toAnnotation,
2483
2483
  toMeasurement: csToolsAnnotation => measurementServiceMappings_PlanarFreehandROI.toMeasurement(csToolsAnnotation, displaySetService, cornerstoneViewportService, _getValueTypeFromToolType),
2484
2484
  matchingCriteria: [{
2485
- valueType: src.MeasurementService.VALUE_TYPES.POLYLINE
2485
+ valueType: src/* MeasurementService */.C5.VALUE_TYPES.POLYLINE
2486
2486
  }]
2487
2487
  },
2488
2488
  ArrowAnnotate: {
2489
2489
  toAnnotation: ArrowAnnotate.toAnnotation,
2490
2490
  toMeasurement: csToolsAnnotation => ArrowAnnotate.toMeasurement(csToolsAnnotation, displaySetService, cornerstoneViewportService, _getValueTypeFromToolType),
2491
2491
  matchingCriteria: [{
2492
- valueType: src.MeasurementService.VALUE_TYPES.POINT,
2492
+ valueType: src/* MeasurementService */.C5.VALUE_TYPES.POINT,
2493
2493
  points: 1
2494
2494
  }]
2495
2495
  },
@@ -2497,14 +2497,14 @@ const measurementServiceMappingsFactory = (measurementService, displaySetService
2497
2497
  toAnnotation: measurementServiceMappings_CobbAngle.toAnnotation,
2498
2498
  toMeasurement: csToolsAnnotation => measurementServiceMappings_CobbAngle.toMeasurement(csToolsAnnotation, displaySetService, cornerstoneViewportService, _getValueTypeFromToolType),
2499
2499
  matchingCriteria: [{
2500
- valueType: src.MeasurementService.VALUE_TYPES.ANGLE
2500
+ valueType: src/* MeasurementService */.C5.VALUE_TYPES.ANGLE
2501
2501
  }]
2502
2502
  },
2503
2503
  Angle: {
2504
2504
  toAnnotation: measurementServiceMappings_Angle.toAnnotation,
2505
2505
  toMeasurement: csToolsAnnotation => measurementServiceMappings_Angle.toMeasurement(csToolsAnnotation, displaySetService, cornerstoneViewportService, _getValueTypeFromToolType),
2506
2506
  matchingCriteria: [{
2507
- valueType: src.MeasurementService.VALUE_TYPES.ANGLE
2507
+ valueType: src/* MeasurementService */.C5.VALUE_TYPES.ANGLE
2508
2508
  }]
2509
2509
  }
2510
2510
  };
@@ -2763,12 +2763,12 @@ const connectMeasurementServiceToTools = (measurementService, cornerstoneViewpor
2763
2763
  referenceStudyUID,
2764
2764
  SOPInstanceUID
2765
2765
  } = measurement;
2766
- const instance = src.DicomMetadataStore.getInstance(referenceStudyUID, referenceSeriesUID, SOPInstanceUID);
2766
+ const instance = src/* DicomMetadataStore */.H8.getInstance(referenceStudyUID, referenceSeriesUID, SOPInstanceUID);
2767
2767
  let imageId;
2768
2768
  let frameNumber = 1;
2769
2769
  if (measurement?.metadata?.referencedImageId) {
2770
2770
  imageId = measurement.metadata.referencedImageId;
2771
- frameNumber = (0,getSOPInstanceAttributes/* default */.Z)(measurement.metadata.referencedImageId).frameNumber;
2771
+ frameNumber = (0,getSOPInstanceAttributes/* default */.A)(measurement.metadata.referencedImageId).frameNumber;
2772
2772
  } else {
2773
2773
  imageId = dataSource.getImageIdsForInstance({
2774
2774
  instance
@@ -2880,7 +2880,7 @@ function getInterleavedFrames(imageIds) {
2880
2880
  return imageIdsToPrefetch;
2881
2881
  }
2882
2882
  // EXTERNAL MODULE: ../../../node_modules/lodash/lodash.js
2883
- var lodash = __webpack_require__(44379);
2883
+ var lodash = __webpack_require__(5517);
2884
2884
  ;// CONCATENATED MODULE: ../../../extensions/cornerstone/src/utils/interleaveCenterLoader.ts
2885
2885
 
2886
2886
 
@@ -3413,7 +3413,7 @@ function initContextMenu({
3413
3413
  return;
3414
3414
  }
3415
3415
  // TODO check update upstream
3416
- (0,state/* setEnabledElement */.Yc)(viewportId, element);
3416
+ (0,state/* setEnabledElement */.ye)(viewportId, element);
3417
3417
  element.addEventListener(cs3DToolsEvents.MOUSE_CLICK, cornerstoneViewportHandleClick);
3418
3418
  }
3419
3419
  function elementDisabledHandler(evt) {
@@ -3500,7 +3500,7 @@ function initDoubleClick({
3500
3500
 
3501
3501
  const {
3502
3502
  TimingEnum
3503
- } = src.Types;
3503
+ } = src/* Types */.Or;
3504
3504
  const IMAGE_TIMING_KEYS = [TimingEnum.DISPLAY_SETS_TO_ALL_IMAGES, TimingEnum.DISPLAY_SETS_TO_FIRST_IMAGE, TimingEnum.STUDY_TO_FIRST_IMAGE];
3505
3505
  const imageTiming = {
3506
3506
  viewportsWaiting: 0
@@ -3518,7 +3518,7 @@ const imageTiming = {
3518
3518
  function initViewTiming({
3519
3519
  element
3520
3520
  }) {
3521
- if (!IMAGE_TIMING_KEYS.find(key => src/* log */.cM.timingKeys[key])) {
3521
+ if (!IMAGE_TIMING_KEYS.find(key => src/* log */.Rm.timingKeys[key])) {
3522
3522
  return;
3523
3523
  }
3524
3524
  imageTiming.viewportsWaiting += 1;
@@ -3528,13 +3528,13 @@ function imageRenderedListener(evt) {
3528
3528
  if (evt.detail.viewportStatus === 'preRender') {
3529
3529
  return;
3530
3530
  }
3531
- src/* log */.cM.timeEnd(TimingEnum.DISPLAY_SETS_TO_FIRST_IMAGE);
3532
- src/* log */.cM.timeEnd(TimingEnum.STUDY_TO_FIRST_IMAGE);
3533
- src/* log */.cM.timeEnd(TimingEnum.SCRIPT_TO_VIEW);
3531
+ src/* log */.Rm.timeEnd(TimingEnum.DISPLAY_SETS_TO_FIRST_IMAGE);
3532
+ src/* log */.Rm.timeEnd(TimingEnum.STUDY_TO_FIRST_IMAGE);
3533
+ src/* log */.Rm.timeEnd(TimingEnum.SCRIPT_TO_VIEW);
3534
3534
  imageTiming.viewportsWaiting -= 1;
3535
3535
  evt.detail.element.removeEventListener(esm.EVENTS.IMAGE_RENDERED, imageRenderedListener);
3536
3536
  if (!imageTiming.viewportsWaiting) {
3537
- src/* log */.cM.timeEnd(TimingEnum.DISPLAY_SETS_TO_ALL_IMAGES);
3537
+ src/* log */.Rm.timeEnd(TimingEnum.DISPLAY_SETS_TO_ALL_IMAGES);
3538
3538
  }
3539
3539
  }
3540
3540
  ;// CONCATENATED MODULE: ../../../extensions/cornerstone/src/init.tsx
@@ -3664,8 +3664,8 @@ async function init({
3664
3664
  outlineOpacity: 1,
3665
3665
  outlineOpacityInactive: 0.65
3666
3666
  });
3667
- const metadataProvider = src["default"].classes.MetadataProvider;
3668
- esm.volumeLoader.registerVolumeLoader('cornerstoneStreamingImageVolume', streaming_image_volume_loader_dist_esm/* cornerstoneStreamingImageVolumeLoader */.IU);
3667
+ const metadataProvider = src/* default.classes */.Ay.classes.MetadataProvider;
3668
+ esm.volumeLoader.registerVolumeLoader('cornerstoneStreamingImageVolume', streaming_image_volume_loader_dist_esm/* cornerstoneStreamingImageVolumeLoader */.FC);
3669
3669
  hangingProtocolService.registerImageLoadStrategy('interleaveCenter', interleaveCenterLoader);
3670
3670
  hangingProtocolService.registerImageLoadStrategy('interleaveTopToBottom', interleaveTopToBottom);
3671
3671
  hangingProtocolService.registerImageLoadStrategy('nth', interleaveNthLoader);
@@ -3704,6 +3704,16 @@ async function init({
3704
3704
  cornerstoneViewportService.setVolumesForViewport(viewport, volumeInputArray, presentations);
3705
3705
  }
3706
3706
  });
3707
+
3708
+ // resize the cornerstone viewport service when the grid size changes
3709
+ // IMPORTANT: this should happen outside of the OHIFCornerstoneViewport
3710
+ // since it will trigger a rerender of each viewport and each resizing
3711
+ // the offscreen canvas which would result in a performance hit, this should
3712
+ // done only once per grid resize here. Doing it once here, allows us to reduce
3713
+ // the refreshRage(in ms) to 10 from 50. I tried with even 1 or 5 ms it worked fine
3714
+ viewportGridService.subscribe(viewportGridService.EVENTS.GRID_SIZE_CHANGED, () => {
3715
+ cornerstoneViewportService.resize(true);
3716
+ });
3707
3717
  src_initContextMenu({
3708
3718
  cornerstoneViewportService,
3709
3719
  customizationService,
@@ -3767,7 +3777,7 @@ async function init({
3767
3777
  const imageLoadFailedHandler = ({
3768
3778
  detail
3769
3779
  }) => {
3770
- const handler = src/* errorHandler */.Po.getHTTPErrorHandler();
3780
+ const handler = src/* errorHandler */.r_.getHTTPErrorHandler();
3771
3781
  handler(detail.error);
3772
3782
  };
3773
3783
  const resetCrosshairs = evt => {
@@ -3849,12 +3859,12 @@ function _showCPURenderingModal(uiModalService, hangingProtocolService) {
3849
3859
  });
3850
3860
  }
3851
3861
  // EXTERNAL MODULE: ../../../node_modules/react-dropzone/dist/es/index.js + 5 modules
3852
- var es = __webpack_require__(74834);
3862
+ var es = __webpack_require__(5013);
3853
3863
  // EXTERNAL MODULE: ../../../node_modules/prop-types/index.js
3854
- var prop_types = __webpack_require__(3827);
3864
+ var prop_types = __webpack_require__(11374);
3855
3865
  var prop_types_default = /*#__PURE__*/__webpack_require__.n(prop_types);
3856
3866
  // EXTERNAL MODULE: ../../../node_modules/classnames/index.js
3857
- var classnames = __webpack_require__(33901);
3867
+ var classnames = __webpack_require__(61466);
3858
3868
  var classnames_default = /*#__PURE__*/__webpack_require__.n(classnames);
3859
3869
  ;// CONCATENATED MODULE: ../../../extensions/cornerstone/src/utils/DicomFileUploader.ts
3860
3870
 
@@ -3878,7 +3888,7 @@ class UploadRejection {
3878
3888
  this.status = status;
3879
3889
  }
3880
3890
  }
3881
- class DicomFileUploader extends src/* PubSubService */.hC {
3891
+ class DicomFileUploader extends src/* PubSubService */.Rc {
3882
3892
  constructor(file, dataSource) {
3883
3893
  super(EVENTS);
3884
3894
  this._file = void 0;
@@ -4042,20 +4052,20 @@ const DicomUploadProgressItem = /*#__PURE__*/(0,react.memo)(({
4042
4052
  const getStatusIcon = () => {
4043
4053
  switch (dicomFileUploader.getStatus()) {
4044
4054
  case UploadStatus.Success:
4045
- return /*#__PURE__*/react.createElement(ui_src/* Icon */.JO, {
4055
+ return /*#__PURE__*/react.createElement(ui_src/* Icon */.In, {
4046
4056
  name: "status-tracked",
4047
4057
  className: "text-primary-light"
4048
4058
  });
4049
4059
  case UploadStatus.InProgress:
4050
- return /*#__PURE__*/react.createElement(ui_src/* Icon */.JO, {
4060
+ return /*#__PURE__*/react.createElement(ui_src/* Icon */.In, {
4051
4061
  name: "icon-transferring"
4052
4062
  });
4053
4063
  case UploadStatus.Failed:
4054
- return /*#__PURE__*/react.createElement(ui_src/* Icon */.JO, {
4064
+ return /*#__PURE__*/react.createElement(ui_src/* Icon */.In, {
4055
4065
  name: "icon-alert-small"
4056
4066
  });
4057
4067
  case UploadStatus.Cancelled:
4058
- return /*#__PURE__*/react.createElement(ui_src/* Icon */.JO, {
4068
+ return /*#__PURE__*/react.createElement(ui_src/* Icon */.In, {
4059
4069
  name: "icon-alert-outline"
4060
4070
  });
4061
4071
  default:
@@ -4080,7 +4090,7 @@ const DicomUploadProgressItem = /*#__PURE__*/(0,react.memo)(({
4080
4090
  className: "w-10 text-right"
4081
4091
  }, percentComplete, "%"), /*#__PURE__*/react.createElement("div", {
4082
4092
  className: "ml-auto flex cursor-pointer"
4083
- }, /*#__PURE__*/react.createElement(ui_src/* Icon */.JO, {
4093
+ }, /*#__PURE__*/react.createElement(ui_src/* Icon */.In, {
4084
4094
  className: "text-primary-active self-center",
4085
4095
  name: "close",
4086
4096
  onClick: cancelUpload
@@ -4310,7 +4320,7 @@ function DicomUploadProgress({
4310
4320
  className: "bg-primary-dark flex h-14 items-center px-1 pb-4 text-lg"
4311
4321
  }, numFilesCompleted === dicomFileUploaderArr.length ? /*#__PURE__*/react.createElement(react.Fragment, null, /*#__PURE__*/react.createElement("span", {
4312
4322
  className: NO_WRAP_ELLIPSIS_CLASS_NAMES
4313
- }, `${dicomFileUploaderArr.length} ${dicomFileUploaderArr.length > 1 ? 'files' : 'file'} completed.`), /*#__PURE__*/react.createElement(ui_src/* Button */.zx, {
4323
+ }, `${dicomFileUploaderArr.length} ${dicomFileUploaderArr.length > 1 ? 'files' : 'file'} completed.`), /*#__PURE__*/react.createElement(ui_src/* Button */.$n, {
4314
4324
  disabled: false,
4315
4325
  className: "ml-auto",
4316
4326
  onClick: onComplete
@@ -4331,7 +4341,7 @@ function DicomUploadProgress({
4331
4341
  className: "ml-auto flex w-6 justify-center"
4332
4342
  }, numFails > 0 && /*#__PURE__*/react.createElement("div", {
4333
4343
  onClick: () => setShowFailedOnly(currentShowFailedOnly => !currentShowFailedOnly)
4334
- }, /*#__PURE__*/react.createElement(ui_src/* Icon */.JO, {
4344
+ }, /*#__PURE__*/react.createElement(ui_src/* Icon */.In, {
4335
4345
  className: "cursor-pointer",
4336
4346
  name: "icon-status-alert"
4337
4347
  })));
@@ -4346,7 +4356,7 @@ function DicomUploadProgress({
4346
4356
  }, numFails > 0 ? `Completed with ${numFails} ${numFails > 1 ? 'errors' : 'error'}!` : 'Completed!'), getShowFailedOnlyIconComponent()) : /*#__PURE__*/react.createElement(react.Fragment, null, /*#__PURE__*/react.createElement("div", {
4347
4357
  ref: progressBarContainerRef,
4348
4358
  className: "flex-grow"
4349
- }, /*#__PURE__*/react.createElement(ui_src/* ProgressLoadingBar */.YE, {
4359
+ }, /*#__PURE__*/react.createElement(ui_src/* ProgressLoadingBar */.dD, {
4350
4360
  progress: showInfiniteProgressBar() ? undefined : Math.min(100, percentComplete)
4351
4361
  })), /*#__PURE__*/react.createElement("div", {
4352
4362
  className: "ml-1 flex w-24 items-center"
@@ -4395,7 +4405,7 @@ function DicomUpload({
4395
4405
  setDicomFileUploaderArr(acceptedFiles.map(file => new DicomFileUploader(file, dataSource)));
4396
4406
  }, []);
4397
4407
  const getDropZoneComponent = () => {
4398
- return /*#__PURE__*/react.createElement(es/* default */.Z, {
4408
+ return /*#__PURE__*/react.createElement(es/* default */.A, {
4399
4409
  onDrop: acceptedFiles => {
4400
4410
  onDrop(acceptedFiles);
4401
4411
  },
@@ -4406,23 +4416,23 @@ function DicomUpload({
4406
4416
  className: "dicom-upload-drop-area-border-dash m-5 flex h-full flex-col items-center justify-center"
4407
4417
  }), /*#__PURE__*/react.createElement("div", {
4408
4418
  className: "flex gap-3"
4409
- }, /*#__PURE__*/react.createElement(es/* default */.Z, {
4419
+ }, /*#__PURE__*/react.createElement(es/* default */.A, {
4410
4420
  onDrop: onDrop,
4411
4421
  noDrag: true
4412
4422
  }, ({
4413
4423
  getRootProps,
4414
4424
  getInputProps
4415
- }) => /*#__PURE__*/react.createElement("div", getRootProps(), /*#__PURE__*/react.createElement(ui_src/* Button */.zx, {
4425
+ }) => /*#__PURE__*/react.createElement("div", getRootProps(), /*#__PURE__*/react.createElement(ui_src/* Button */.$n, {
4416
4426
  disabled: false,
4417
4427
  onClick: () => {}
4418
- }, 'Add files', /*#__PURE__*/react.createElement("input", getInputProps())))), /*#__PURE__*/react.createElement(es/* default */.Z, {
4428
+ }, 'Add files', /*#__PURE__*/react.createElement("input", getInputProps())))), /*#__PURE__*/react.createElement(es/* default */.A, {
4419
4429
  onDrop: onDrop,
4420
4430
  noDrag: true
4421
4431
  }, ({
4422
4432
  getRootProps,
4423
4433
  getInputProps
4424
- }) => /*#__PURE__*/react.createElement("div", getRootProps(), /*#__PURE__*/react.createElement(ui_src/* Button */.zx, {
4425
- type: ui_src/* ButtonEnums.type */.LZ.dt.secondary,
4434
+ }) => /*#__PURE__*/react.createElement("div", getRootProps(), /*#__PURE__*/react.createElement(ui_src/* Button */.$n, {
4435
+ type: ui_src/* ButtonEnums.type */.Ny.NW.secondary,
4426
4436
  disabled: false,
4427
4437
  onClick: () => {}
4428
4438
  }, 'Add folder', /*#__PURE__*/react.createElement("input", _extends({}, getInputProps(), {
@@ -4494,9 +4504,9 @@ function getCustomizationModule() {
4494
4504
  }
4495
4505
  /* harmony default export */ const src_getCustomizationModule = (getCustomizationModule);
4496
4506
  // EXTERNAL MODULE: ../../../node_modules/gl-matrix/esm/index.js + 10 modules
4497
- var gl_matrix_esm = __webpack_require__(45451);
4507
+ var gl_matrix_esm = __webpack_require__(83636);
4498
4508
  // EXTERNAL MODULE: ../../../node_modules/html2canvas/dist/html2canvas.esm.js
4499
- var html2canvas_esm = __webpack_require__(76010);
4509
+ var html2canvas_esm = __webpack_require__(90445);
4500
4510
  ;// CONCATENATED MODULE: ../../../extensions/cornerstone/src/utils/CornerstoneViewportDownloadForm.tsx
4501
4511
 
4502
4512
 
@@ -4514,7 +4524,7 @@ const CornerstoneViewportDownloadForm = ({
4514
4524
  activeViewportId: activeViewportIdProp,
4515
4525
  cornerstoneViewportService
4516
4526
  }) => {
4517
- const enabledElement = (0,state/* getEnabledElement */.K8)(activeViewportIdProp);
4527
+ const enabledElement = (0,state/* getEnabledElement */.kJ)(activeViewportIdProp);
4518
4528
  const activeViewportElement = enabledElement?.element;
4519
4529
  const activeViewportEnabledElement = (0,esm.getEnabledElement)(activeViewportElement);
4520
4530
  const {
@@ -4591,6 +4601,7 @@ const CornerstoneViewportDownloadForm = ({
4591
4601
  renderingEngine.resize();
4592
4602
 
4593
4603
  // Trigger the render on the viewport to update the on screen
4604
+ downloadViewport.resetCamera();
4594
4605
  downloadViewport.render();
4595
4606
  downloadViewportElement.addEventListener(esm.Enums.Events.IMAGE_RENDERED, function updateViewport(event) {
4596
4607
  const enabledElement = (0,esm.getEnabledElement)(event.target);
@@ -4697,19 +4708,18 @@ const CornerstoneViewportDownloadForm = ({
4697
4708
  const downloadBlob = (filename, fileType) => {
4698
4709
  const file = `${filename}.${fileType}`;
4699
4710
  const divForDownloadViewport = document.querySelector(`div[data-viewport-uid="${VIEWPORT_ID}"]`);
4700
- (0,html2canvas_esm/* default */.Z)(divForDownloadViewport).then(canvas => {
4711
+ (0,html2canvas_esm/* default */.A)(divForDownloadViewport).then(canvas => {
4701
4712
  const link = document.createElement('a');
4702
4713
  link.download = file;
4703
4714
  link.href = canvas.toDataURL(fileType, 1.0);
4704
4715
  link.click();
4705
4716
  });
4706
4717
  };
4707
- return /*#__PURE__*/react.createElement(ui_src/* ViewportDownloadForm */.mQ, {
4718
+ return /*#__PURE__*/react.createElement(ui_src/* ViewportDownloadForm */.VS, {
4708
4719
  onClose: onClose,
4709
4720
  minimumSize: MINIMUM_SIZE,
4710
4721
  maximumSize: MAX_TEXTURE_SIZE,
4711
4722
  defaultSize: DEFAULT_SIZE,
4712
- canvasClass: 'cornerstone-canvas',
4713
4723
  activeViewportElement: activeViewportElement,
4714
4724
  enableViewport: enableViewport,
4715
4725
  disableViewport: disableViewport,
@@ -5200,9 +5210,9 @@ function commandsModule({
5200
5210
  if (viewport instanceof esm.BaseVolumeViewport) {
5201
5211
  const camera = viewport.getCamera();
5202
5212
  const rotAngle = rotation * Math.PI / 180;
5203
- const rotMat = gl_matrix_esm/* mat4.identity */._E.identity(new Float32Array(16));
5204
- gl_matrix_esm/* mat4.rotate */._E.rotate(rotMat, rotMat, rotAngle, camera.viewPlaneNormal);
5205
- const rotatedViewUp = gl_matrix_esm/* vec3.transformMat4 */.R3.transformMat4(gl_matrix_esm/* vec3.create */.R3.create(), camera.viewUp, rotMat);
5213
+ const rotMat = gl_matrix_esm/* mat4.identity */.pB.identity(new Float32Array(16));
5214
+ gl_matrix_esm/* mat4.rotate */.pB.rotate(rotMat, rotMat, rotAngle, camera.viewPlaneNormal);
5215
+ const rotatedViewUp = gl_matrix_esm/* vec3.transformMat4 */.eR.transformMat4(gl_matrix_esm/* vec3.create */.eR.create(), camera.viewUp, rotMat);
5206
5216
  viewport.setCamera({
5207
5217
  viewUp: rotatedViewUp
5208
5218
  });
@@ -6439,7 +6449,7 @@ class ToolGroupService {
6439
6449
  this.viewportGridService = viewportGridService;
6440
6450
  this.listeners = {};
6441
6451
  this.EVENTS = ToolGroupService_EVENTS;
6442
- Object.assign(this, src/* pubSubServiceInterface */.KZ);
6452
+ Object.assign(this, src/* pubSubServiceInterface */.Ml);
6443
6453
  }
6444
6454
  onModeExit() {
6445
6455
  this.destroy();
@@ -6711,7 +6721,7 @@ class SyncGroupService {
6711
6721
  this.listeners = {};
6712
6722
  this.EVENTS = SyncGroupService_EVENTS;
6713
6723
  //
6714
- Object.assign(this, src/* pubSubServiceInterface */.KZ);
6724
+ Object.assign(this, src/* pubSubServiceInterface */.Ml);
6715
6725
  }
6716
6726
  _createSynchronizer(type, id, options) {
6717
6727
  const syncCreator = this.synchronizerCreators[type.toLowerCase()];
@@ -6811,7 +6821,7 @@ SyncGroupService.REGISTRATION = {
6811
6821
 
6812
6822
  /* harmony default export */ const services_SyncGroupService = (SyncGroupService);
6813
6823
  // EXTERNAL MODULE: ../../../node_modules/lodash.isequal/index.js
6814
- var lodash_isequal = __webpack_require__(10311);
6824
+ var lodash_isequal = __webpack_require__(71932);
6815
6825
  var lodash_isequal_default = /*#__PURE__*/__webpack_require__.n(lodash_isequal);
6816
6826
  ;// CONCATENATED MODULE: ../../../extensions/cornerstone/src/utils/transitions.ts
6817
6827
  /**
@@ -6926,7 +6936,7 @@ const SEGMENT_CONSTANT = {
6926
6936
  isLocked: false
6927
6937
  };
6928
6938
  const VOLUME_LOADER_SCHEME = 'cornerstoneStreamingImageVolume';
6929
- class SegmentationService extends src/* PubSubService */.hC {
6939
+ class SegmentationService extends src/* PubSubService */.Rc {
6930
6940
  constructor({
6931
6941
  servicesManager
6932
6942
  }) {
@@ -8806,6 +8816,12 @@ class ViewportInfo {
8806
8816
  getViewportOptions() {
8807
8817
  return this.viewportOptions;
8808
8818
  }
8819
+ getPresentationIds() {
8820
+ const {
8821
+ presentationIds
8822
+ } = this.viewportOptions;
8823
+ return presentationIds;
8824
+ }
8809
8825
  setDisplaySetOptions(displaySetOptions) {
8810
8826
  this.displaySetOptions = displaySetOptions;
8811
8827
  }
@@ -8892,18 +8908,23 @@ const CornerstoneViewportService_EVENTS = {
8892
8908
  * Handles cornerstone viewport logic including enabling, disabling, and
8893
8909
  * updating the viewport.
8894
8910
  */
8895
- class CornerstoneViewportService extends src/* PubSubService */.hC {
8911
+ class CornerstoneViewportService extends src/* PubSubService */.Rc {
8896
8912
  constructor(servicesManager) {
8897
8913
  super(CornerstoneViewportService_EVENTS);
8898
8914
  this.renderingEngine = void 0;
8899
8915
  this.viewportsById = new Map();
8900
8916
  this.viewportGridResizeObserver = void 0;
8901
8917
  this.viewportsDisplaySets = new Map();
8918
+ this.beforeResizePositionPresentations = new Map();
8902
8919
  // Some configs
8903
8920
  this.enableResizeDetector = void 0;
8904
8921
  this.resizeRefreshRateMs = void 0;
8905
8922
  this.resizeRefreshMode = void 0;
8906
8923
  this.servicesManager = null;
8924
+ this.resizeQueue = [];
8925
+ this.viewportResizeTimer = null;
8926
+ this.gridResizeDelay = 50;
8927
+ this.gridResizeTimeOut = null;
8907
8928
  this.renderingEngine = null;
8908
8929
  this.viewportGridResizeObserver = null;
8909
8930
  this.servicesManager = servicesManager;
@@ -8941,13 +8962,28 @@ class CornerstoneViewportService extends src/* PubSubService */.hC {
8941
8962
  }
8942
8963
 
8943
8964
  /**
8944
- * It triggers the resize on the rendering engine.
8965
+ * It triggers the resize on the rendering engine, and renders the viewports
8966
+ *
8967
+ * @param isGridResize - if the resize is triggered by a grid resize
8968
+ * this is used to avoid double resize of the viewports since if the
8969
+ * grid is resized, all viewports will be resized so there is no need
8970
+ * to resize them individually which will get triggered by their
8971
+ * individual resize observers
8945
8972
  */
8946
- resize() {
8947
- const immediate = true;
8948
- const keepCamera = true;
8949
- this.renderingEngine.resize(immediate, keepCamera);
8950
- this.renderingEngine.render();
8973
+ resize(isGridResize = false) {
8974
+ // if there is a grid resize happening, it means the viewport grid
8975
+ // has been manipulated (e.g., panels closed, added, etc.) and we need
8976
+ // to resize all viewports, so we will add a timeout here to make sure
8977
+ // we don't double resize the viewports when viewports in the grid are
8978
+ // resized individually
8979
+ if (isGridResize) {
8980
+ this.performResize();
8981
+ this.resetGridResizeTimeout();
8982
+ this.resizeQueue = [];
8983
+ clearTimeout(this.viewportResizeTimer);
8984
+ } else {
8985
+ this.enqueueViewportResizeRequest();
8986
+ }
8951
8987
  }
8952
8988
 
8953
8989
  /**
@@ -8983,101 +9019,222 @@ class CornerstoneViewportService extends src/* PubSubService */.hC {
8983
9019
  this.viewportsById.delete(viewportId);
8984
9020
  this.viewportsDisplaySets.delete(viewportId);
8985
9021
  }
8986
- setPresentations(viewport, presentations) {
8987
- const properties = presentations?.lutPresentation?.properties;
8988
- if (properties) {
8989
- viewport.setProperties(properties);
9022
+
9023
+ /**
9024
+ * Sets the presentations for a given viewport. Presentations is an object
9025
+ * that can define the lut or position for a viewport.
9026
+ *
9027
+ * @param viewportId - The ID of the viewport.
9028
+ * @param presentations - The presentations to apply to the viewport.
9029
+ */
9030
+ setPresentations(viewportId, presentations) {
9031
+ const viewport = this.getCornerstoneViewport(viewportId);
9032
+ if (!viewport) {
9033
+ return;
8990
9034
  }
8991
- const camera = presentations?.positionPresentation?.camera;
8992
- if (camera) {
8993
- viewport.setCamera(camera);
9035
+ if (!presentations) {
9036
+ return;
9037
+ }
9038
+ const {
9039
+ lutPresentation,
9040
+ positionPresentation
9041
+ } = presentations;
9042
+ if (lutPresentation) {
9043
+ const {
9044
+ presentation
9045
+ } = lutPresentation;
9046
+ if (viewport instanceof esm.BaseVolumeViewport) {
9047
+ Object.entries(presentation).forEach(([volumeId, properties]) => {
9048
+ viewport.setProperties(properties, volumeId);
9049
+ });
9050
+ } else {
9051
+ viewport.setProperties(presentation);
9052
+ }
9053
+ }
9054
+ if (positionPresentation) {
9055
+ const {
9056
+ viewPlaneNormal,
9057
+ viewUp,
9058
+ zoom,
9059
+ pan
9060
+ } = positionPresentation.presentation;
9061
+ viewport.setCamera({
9062
+ viewPlaneNormal,
9063
+ viewUp
9064
+ });
9065
+ if (zoom !== undefined) {
9066
+ viewport.setZoom(zoom);
9067
+ }
9068
+ if (pan !== undefined) {
9069
+ viewport.setPan(pan);
9070
+ }
8994
9071
  }
8995
9072
  }
8996
- getPresentation(viewportId) {
9073
+
9074
+ /**
9075
+ * Retrieves the position presentation information for a given viewport.
9076
+ * @param viewportId The ID of the viewport.
9077
+ * @returns The position presentation object containing various properties
9078
+ * such as ID, viewport type, initial image index, view plane normal, view up, zoom, and pan.
9079
+ */
9080
+ getPositionPresentation(viewportId) {
8997
9081
  const viewportInfo = this.viewportsById.get(viewportId);
8998
9082
  if (!viewportInfo) {
8999
9083
  return;
9000
9084
  }
9085
+ const presentationIds = viewportInfo.getPresentationIds();
9086
+ if (!presentationIds) {
9087
+ return;
9088
+ }
9001
9089
  const {
9002
- viewportType,
9003
- presentationIds
9004
- } = viewportInfo.getViewportOptions();
9090
+ positionPresentationId
9091
+ } = presentationIds;
9005
9092
  const csViewport = this.getCornerstoneViewport(viewportId);
9006
9093
  if (!csViewport) {
9007
9094
  return;
9008
9095
  }
9009
- const properties = csViewport.getProperties();
9010
- if (properties.isComputedVOI) {
9011
- delete properties.voiRange;
9012
- delete properties.VOILUTFunction;
9013
- }
9096
+ const {
9097
+ viewPlaneNormal,
9098
+ viewUp
9099
+ } = csViewport.getCamera();
9014
9100
  const initialImageIndex = csViewport.getCurrentImageIdIndex();
9015
- const camera = csViewport.getCamera();
9101
+ const zoom = csViewport.getZoom();
9102
+ const pan = csViewport.getPan();
9016
9103
  return {
9017
- presentationIds,
9018
- viewportType: !viewportType || viewportType === 'stack' ? 'stack' : 'volume',
9019
- properties,
9020
- initialImageIndex,
9021
- camera
9104
+ id: positionPresentationId,
9105
+ viewportType: viewportInfo.getViewportType(),
9106
+ presentation: {
9107
+ initialImageIndex,
9108
+ viewUp,
9109
+ viewPlaneNormal,
9110
+ zoom,
9111
+ pan
9112
+ }
9022
9113
  };
9023
9114
  }
9115
+
9116
+ /**
9117
+ * Retrieves the LUT (Lookup Table) presentation for a given viewport.
9118
+ * @param viewportId The ID of the viewport.
9119
+ * @returns The LUT presentation object, or undefined if the viewport does not exist.
9120
+ */
9121
+ getLutPresentation(viewportId) {
9122
+ const viewportInfo = this.viewportsById.get(viewportId);
9123
+ if (!viewportInfo) {
9124
+ return;
9125
+ }
9126
+ const presentationIds = viewportInfo.getPresentationIds();
9127
+ if (!presentationIds) {
9128
+ return;
9129
+ }
9130
+ const {
9131
+ lutPresentationId
9132
+ } = presentationIds;
9133
+ const csViewport = this.getCornerstoneViewport(viewportId);
9134
+ if (!csViewport) {
9135
+ return;
9136
+ }
9137
+ const cleanProperties = properties => {
9138
+ if (properties.isComputedVOI) {
9139
+ delete properties.voiRange;
9140
+ delete properties.VOILUTFunction;
9141
+ }
9142
+ return properties;
9143
+ };
9144
+ const presentation = csViewport instanceof esm.BaseVolumeViewport ? new Map() : cleanProperties(csViewport.getProperties());
9145
+ if (presentation instanceof Map) {
9146
+ csViewport.getActors().forEach(({
9147
+ uid: volumeId
9148
+ }) => {
9149
+ const properties = cleanProperties(csViewport.getProperties(volumeId));
9150
+ presentation.set(volumeId, properties);
9151
+ });
9152
+ }
9153
+ return {
9154
+ id: lutPresentationId,
9155
+ viewportType: viewportInfo.getViewportType(),
9156
+ presentation
9157
+ };
9158
+ }
9159
+
9160
+ /**
9161
+ * Retrieves the presentations for a given viewport.
9162
+ * @param viewportId - The ID of the viewport.
9163
+ * @returns The presentations for the viewport.
9164
+ */
9165
+ getPresentations(viewportId) {
9166
+ const viewportInfo = this.viewportsById.get(viewportId);
9167
+ if (!viewportInfo) {
9168
+ return;
9169
+ }
9170
+ const positionPresentation = this.getPositionPresentation(viewportId);
9171
+ const lutPresentation = this.getLutPresentation(viewportId);
9172
+ return {
9173
+ positionPresentation,
9174
+ lutPresentation
9175
+ };
9176
+ }
9177
+
9178
+ /**
9179
+ * Stores the presentation state for a given viewport inside the
9180
+ * stateSyncService. This is used to persist the presentation state
9181
+ * across different scenarios e.g., when the viewport is changing the
9182
+ * display set, or when the viewport is moving to a different layout.
9183
+ *
9184
+ * @param viewportId The ID of the viewport.
9185
+ */
9024
9186
  storePresentation({
9025
9187
  viewportId
9026
9188
  }) {
9027
- const {
9028
- stateSyncService,
9029
- syncGroupService
9030
- } = this.servicesManager.services;
9031
- let presentation;
9189
+ let presentations = null;
9032
9190
  try {
9033
- presentation = this.getPresentation(viewportId);
9191
+ presentations = this.getPresentations(viewportId);
9192
+ if (!presentations?.positionPresentation && !presentations?.lutPresentation) {
9193
+ return;
9194
+ }
9034
9195
  } catch (error) {
9035
9196
  console.warn(error);
9036
- }
9037
- if (!presentation || !presentation.presentationIds) {
9038
9197
  return;
9039
9198
  }
9199
+ const {
9200
+ stateSyncService,
9201
+ syncGroupService
9202
+ } = this.servicesManager.services;
9040
9203
  const synchronizers = syncGroupService.getSynchronizersForViewport(viewportId, this.renderingEngine.id);
9041
9204
  const {
9042
- lutPresentationStore,
9043
9205
  positionPresentationStore,
9044
- synchronizersStore
9206
+ synchronizersStore,
9207
+ lutPresentationStore
9045
9208
  } = stateSyncService.getState();
9046
9209
  const {
9047
- presentationIds
9048
- } = presentation;
9210
+ lutPresentation,
9211
+ positionPresentation
9212
+ } = presentations;
9049
9213
  const {
9050
- lutPresentationId,
9051
- positionPresentationId
9052
- } = presentationIds || {};
9053
- const storeState = {};
9214
+ id: positionPresentationId
9215
+ } = positionPresentation;
9216
+ const {
9217
+ id: lutPresentationId
9218
+ } = lutPresentation;
9219
+ const updateStore = (store, id, value) => ({
9220
+ ...store,
9221
+ [id]: value
9222
+ });
9223
+ const newState = {};
9054
9224
  if (lutPresentationId) {
9055
- storeState.lutPresentationStore = {
9056
- ...lutPresentationStore,
9057
- [lutPresentationId]: presentation
9058
- };
9225
+ newState.lutPresentationStore = updateStore(lutPresentationStore, lutPresentationId, lutPresentation);
9059
9226
  }
9060
9227
  if (positionPresentationId) {
9061
- storeState.positionPresentationStore = {
9062
- ...positionPresentationStore,
9063
- [positionPresentationId]: presentation
9064
- };
9228
+ newState.positionPresentationStore = updateStore(positionPresentationStore, positionPresentationId, positionPresentation);
9065
9229
  }
9066
9230
  if (synchronizers?.length) {
9067
- storeState.synchronizersStore = {
9068
- ...synchronizersStore,
9069
- [viewportId]: synchronizers.map(synchronizer => {
9070
- const sourceViewports = synchronizer.getSourceViewports();
9071
- const targetViewports = synchronizer.getTargetViewports();
9072
- return {
9073
- id: synchronizer.id,
9074
- sourceViewports: [...sourceViewports],
9075
- targetViewports: [...targetViewports]
9076
- };
9077
- })
9078
- };
9231
+ newState.synchronizersStore = updateStore(synchronizersStore, viewportId, synchronizers.map(synchronizer => ({
9232
+ id: synchronizer.id,
9233
+ sourceViewports: [...synchronizer.getSourceViewports()],
9234
+ targetViewports: [...synchronizer.getTargetViewports()]
9235
+ })));
9079
9236
  }
9080
- stateSyncService.store(storeState);
9237
+ stateSyncService.store(newState);
9081
9238
  }
9082
9239
 
9083
9240
  /**
@@ -9157,6 +9314,13 @@ class CornerstoneViewportService extends src/* PubSubService */.hC {
9157
9314
  });
9158
9315
  });
9159
9316
  }
9317
+
9318
+ /**
9319
+ * Retrieves the Cornerstone viewport with the specified ID.
9320
+ *
9321
+ * @param viewportId - The ID of the viewport.
9322
+ * @returns The Cornerstone viewport object if found, otherwise null.
9323
+ */
9160
9324
  getCornerstoneViewport(viewportId) {
9161
9325
  const viewportInfo = this.getViewportInfo(viewportId);
9162
9326
  if (!viewportInfo || !this.renderingEngine || this.renderingEngine.hasBeenDestroyed) {
@@ -9165,10 +9329,40 @@ class CornerstoneViewportService extends src/* PubSubService */.hC {
9165
9329
  const viewport = this.renderingEngine.getViewport(viewportId);
9166
9330
  return viewport;
9167
9331
  }
9332
+
9333
+ /**
9334
+ * Retrieves the viewport information for a given viewport ID. The viewport information
9335
+ * is the OHIF construct that holds different options and data for a given viewport and
9336
+ * is different from the cornerstone viewport.
9337
+ *
9338
+ * @param viewportId The ID of the viewport.
9339
+ * @returns The viewport information.
9340
+ */
9168
9341
  getViewportInfo(viewportId) {
9169
9342
  return this.viewportsById.get(viewportId);
9170
9343
  }
9171
- async _setStackViewport(viewport, viewportData, viewportInfo, presentations) {
9344
+
9345
+ /**
9346
+ * Looks through the viewports to see if the specified measurement can be
9347
+ * displayed in one of the viewports.
9348
+ *
9349
+ * @param measurement
9350
+ * The measurement that is desired to view.
9351
+ * @param activeViewportId - the index that was active at the time the jump
9352
+ * was initiated.
9353
+ * @return the viewportId that the measurement should be displayed in.
9354
+ */
9355
+ getViewportIdToJump(activeViewportId, displaySetInstanceUID, cameraProps) {
9356
+ const viewportInfo = this.getViewportInfo(activeViewportId);
9357
+ const {
9358
+ referencedImageId
9359
+ } = cameraProps;
9360
+ if (viewportInfo?.contains(displaySetInstanceUID, referencedImageId)) {
9361
+ return activeViewportId;
9362
+ }
9363
+ return [...this.viewportsById.values()].find(viewportInfo => viewportInfo.contains(displaySetInstanceUID, referencedImageId))?.viewportId ?? null;
9364
+ }
9365
+ async _setStackViewport(viewport, viewportData, viewportInfo, presentations = {}) {
9172
9366
  const displaySetOptions = viewportInfo.getDisplaySetOptions();
9173
9367
  const {
9174
9368
  imageIds,
@@ -9210,10 +9404,7 @@ class CornerstoneViewportService extends src/* PubSubService */.hC {
9210
9404
  viewport.setProperties({
9211
9405
  ...properties
9212
9406
  });
9213
- const camera = presentations.positionPresentation?.camera;
9214
- if (camera) {
9215
- viewport.setCamera(camera);
9216
- }
9407
+ this.setPresentations(viewport.id, presentations);
9217
9408
  });
9218
9409
  }
9219
9410
  _getInitialImageIndexForViewport(viewportInfo, imageIds) {
@@ -9265,7 +9456,7 @@ class CornerstoneViewportService extends src/* PubSubService */.hC {
9265
9456
  }
9266
9457
  return 0;
9267
9458
  }
9268
- async _setVolumeViewport(viewport, viewportData, viewportInfo, presentations) {
9459
+ async _setVolumeViewport(viewport, viewportData, viewportInfo, presentations = {}) {
9269
9460
  // TODO: We need to overhaul the way data sources work so requests can be made
9270
9461
  // async. I think we should follow the image loader pattern which is async and
9271
9462
  // has a cache behind it.
@@ -9376,7 +9567,7 @@ class CornerstoneViewportService extends src/* PubSubService */.hC {
9376
9567
  }) => {
9377
9568
  viewport.setProperties(properties, volumeId);
9378
9569
  });
9379
- this.setPresentations(viewport, presentations);
9570
+ this.setPresentations(viewport.id, presentations);
9380
9571
 
9381
9572
  // load any secondary displaySets
9382
9573
  const displaySetInstanceUIDs = this.viewportsDisplaySets.get(viewport.id);
@@ -9499,11 +9690,11 @@ class CornerstoneViewportService extends src/* PubSubService */.hC {
9499
9690
  _setDisplaySets(viewport, viewportData, viewportInfo, presentations = {}) {
9500
9691
  if (viewport instanceof esm.StackViewport) {
9501
9692
  return this._setStackViewport(viewport, viewportData, viewportInfo, presentations);
9502
- } else if (viewport instanceof esm.VolumeViewport || viewport instanceof esm.VolumeViewport3D) {
9693
+ }
9694
+ if ([esm.VolumeViewport, esm.VolumeViewport3D].some(type => viewport instanceof type)) {
9503
9695
  return this._setVolumeViewport(viewport, viewportData, viewportInfo, presentations);
9504
- } else {
9505
- throw new Error('Unknown viewport type');
9506
9696
  }
9697
+ throw new Error('Unknown viewport type');
9507
9698
  }
9508
9699
 
9509
9700
  /**
@@ -9566,26 +9757,57 @@ class CornerstoneViewportService extends src/* PubSubService */.hC {
9566
9757
  return images[0].FrameOfReferenceUID;
9567
9758
  }
9568
9759
  }
9760
+ enqueueViewportResizeRequest() {
9761
+ this.resizeQueue.push(false); // false indicates viewport resize
9569
9762
 
9570
- /**
9571
- * Looks through the viewports to see if the specified measurement can be
9572
- * displayed in one of the viewports.
9573
- *
9574
- * @param measurement
9575
- * The measurement that is desired to view.
9576
- * @param activeViewportId - the index that was active at the time the jump
9577
- * was initiated.
9578
- * @return the viewportId that the measurement should be displayed in.
9579
- */
9580
- getViewportIdToJump(activeViewportId, displaySetInstanceUID, cameraProps) {
9581
- const viewportInfo = this.getViewportInfo(activeViewportId);
9582
- const {
9583
- referencedImageId
9584
- } = cameraProps;
9585
- if (viewportInfo?.contains(displaySetInstanceUID, referencedImageId)) {
9586
- return activeViewportId;
9763
+ clearTimeout(this.viewportResizeTimer);
9764
+ this.viewportResizeTimer = setTimeout(() => {
9765
+ this.processViewportResizeQueue();
9766
+ }, this.gridResizeDelay);
9767
+ }
9768
+ processViewportResizeQueue() {
9769
+ const isGridResizeInQueue = this.resizeQueue.some(isGridResize => isGridResize);
9770
+ if (this.resizeQueue.length > 0 && !isGridResizeInQueue && !this.gridResizeTimeOut) {
9771
+ this.performResize();
9587
9772
  }
9588
- return [...this.viewportsById.values()].find(viewportInfo => viewportInfo.contains(displaySetInstanceUID, referencedImageId))?.viewportId ?? null;
9773
+
9774
+ // Clear the queue after processing viewport resizes
9775
+ this.resizeQueue = [];
9776
+ }
9777
+ performResize() {
9778
+ const isImmediate = false;
9779
+ const viewports = this.getRenderingEngine().getViewports();
9780
+
9781
+ // Store the current position presentations for each viewport.
9782
+ viewports.forEach(({
9783
+ id
9784
+ }) => {
9785
+ const presentation = this.getPositionPresentation(id);
9786
+ this.beforeResizePositionPresentations.set(id, presentation);
9787
+ });
9788
+
9789
+ // Resize the rendering engine and render.
9790
+ const renderingEngine = this.renderingEngine;
9791
+ renderingEngine.resize(isImmediate);
9792
+ renderingEngine.render();
9793
+
9794
+ // Reset the camera for viewports that should reset their camera on resize,
9795
+ // which means only those viewports that have a zoom level of 1.
9796
+ this.beforeResizePositionPresentations.forEach((positionPresentation, viewportId) => {
9797
+ this.setPresentations(viewportId, {
9798
+ positionPresentation
9799
+ });
9800
+ });
9801
+
9802
+ // Resize and render the rendering engine again.
9803
+ renderingEngine.resize(isImmediate);
9804
+ renderingEngine.render();
9805
+ }
9806
+ resetGridResizeTimeout() {
9807
+ clearTimeout(this.gridResizeTimeOut);
9808
+ this.gridResizeTimeOut = setTimeout(() => {
9809
+ this.gridResizeTimeOut = null;
9810
+ }, this.gridResizeDelay);
9589
9811
  }
9590
9812
  }
9591
9813
  CornerstoneViewportService_class = CornerstoneViewportService;
@@ -9603,7 +9825,7 @@ CornerstoneViewportService.REGISTRATION = {
9603
9825
 
9604
9826
 
9605
9827
  // EXTERNAL MODULE: ../../../node_modules/dicomweb-client/build/dicomweb-client.es.js
9606
- var dicomweb_client_es = __webpack_require__(97604);
9828
+ var dicomweb_client_es = __webpack_require__(36922);
9607
9829
  ;// CONCATENATED MODULE: ../../../extensions/cornerstone/src/utils/dicomLoaderService.js
9608
9830
 
9609
9831
 
@@ -9644,7 +9866,7 @@ const getNonImageInstance = dataset => {
9644
9866
  const getImageInstanceId = imageInstance => {
9645
9867
  return getImageId(imageInstance);
9646
9868
  };
9647
- const fetchIt = (url, headers = src.DICOMWeb.getAuthorizationHeader()) => {
9869
+ const fetchIt = (url, headers = src/* DICOMWeb */.ll.getAuthorizationHeader()) => {
9648
9870
  return fetch(url, headers).then(response => response.arrayBuffer());
9649
9871
  };
9650
9872
  const cornerstoneRetriever = imageId => {
@@ -9652,13 +9874,13 @@ const cornerstoneRetriever = imageId => {
9652
9874
  return image && image.data && image.data.byteArray.buffer;
9653
9875
  });
9654
9876
  };
9655
- const wadorsRetriever = (url, studyInstanceUID, seriesInstanceUID, sopInstanceUID, headers = src.DICOMWeb.getAuthorizationHeader(), errorInterceptor = src/* errorHandler */.Po.getHTTPErrorHandler()) => {
9877
+ const wadorsRetriever = (url, studyInstanceUID, seriesInstanceUID, sopInstanceUID, headers = src/* DICOMWeb */.ll.getAuthorizationHeader(), errorInterceptor = src/* errorHandler */.r_.getHTTPErrorHandler()) => {
9656
9878
  const config = {
9657
9879
  url,
9658
9880
  headers,
9659
9881
  errorInterceptor
9660
9882
  };
9661
- const dicomWeb = new dicomweb_client_es.api.DICOMwebClient(config);
9883
+ const dicomWeb = new dicomweb_client_es/* api */.FH.DICOMwebClient(config);
9662
9884
  return dicomWeb.retrieveInstance({
9663
9885
  studyInstanceUID,
9664
9886
  seriesInstanceUID,
@@ -9774,10 +9996,10 @@ class DicomLoaderService {
9774
9996
  const dicomLoaderService = new DicomLoaderService();
9775
9997
  /* harmony default export */ const utils_dicomLoaderService = (dicomLoaderService);
9776
9998
  ;// CONCATENATED MODULE: ../../../extensions/cornerstone/package.json
9777
- const package_namespaceObject = JSON.parse('{"u2":"@ohif/extension-cornerstone"}');
9999
+ const package_namespaceObject = /*#__PURE__*/JSON.parse('{"UU":"@ohif/extension-cornerstone"}');
9778
10000
  ;// CONCATENATED MODULE: ../../../extensions/cornerstone/src/id.js
9779
10001
 
9780
- const id = package_namespaceObject.u2;
10002
+ const id = package_namespaceObject.UU;
9781
10003
 
9782
10004
  ;// CONCATENATED MODULE: ../../../extensions/cornerstone/src/utils/measurementServiceMappings/index.ts
9783
10005
 
@@ -9807,7 +10029,7 @@ function src_extends() { src_extends = Object.assign ? Object.assign.bind() : fu
9807
10029
 
9808
10030
 
9809
10031
  const Component = /*#__PURE__*/react.lazy(() => {
9810
- return Promise.all(/* import() */[__webpack_require__.e(23), __webpack_require__.e(181)]).then(__webpack_require__.bind(__webpack_require__, 86181));
10032
+ return __webpack_require__.e(/* import() */ 889).then(__webpack_require__.bind(__webpack_require__, 1889));
9811
10033
  });
9812
10034
  const OHIFCornerstoneViewport = props => {
9813
10035
  return /*#__PURE__*/react.createElement(react.Suspense, {
@@ -9830,7 +10052,7 @@ const cornerstoneExtension = {
9830
10052
  esm.imageLoadPoolManager.clearRequestStack(type);
9831
10053
  esm.imageRetrievalPoolManager.clearRequestStack(type);
9832
10054
  });
9833
- (0,state/* reset */.mc)();
10055
+ (0,state/* reset */.cL)();
9834
10056
  },
9835
10057
  /**
9836
10058
  * Register the Cornerstone 3D services and set them up for use.
@@ -9885,7 +10107,7 @@ const cornerstoneExtension = {
9885
10107
  cornerstoneTools: dist_esm
9886
10108
  };
9887
10109
  },
9888
- getEnabledElement: state/* getEnabledElement */.K8,
10110
+ getEnabledElement: state/* getEnabledElement */.kJ,
9889
10111
  dicomLoaderService: utils_dicomLoaderService
9890
10112
  }
9891
10113
  }, {
@@ -9907,13 +10129,13 @@ const cornerstoneExtension = {
9907
10129
 
9908
10130
  /***/ }),
9909
10131
 
9910
- /***/ 73704:
10132
+ /***/ 71353:
9911
10133
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
9912
10134
 
9913
10135
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
9914
- /* harmony export */ K8: () => (/* binding */ getEnabledElement),
9915
- /* harmony export */ Yc: () => (/* binding */ setEnabledElement),
9916
- /* harmony export */ mc: () => (/* binding */ reset)
10136
+ /* harmony export */ cL: () => (/* binding */ reset),
10137
+ /* harmony export */ kJ: () => (/* binding */ getEnabledElement),
10138
+ /* harmony export */ ye: () => (/* binding */ setEnabledElement)
9917
10139
  /* harmony export */ });
9918
10140
  const state = {
9919
10141
  // The `defaultContext` of an extension's commandsModule
@@ -9949,13 +10171,13 @@ const reset = () => {
9949
10171
 
9950
10172
  /***/ }),
9951
10173
 
9952
- /***/ 87172:
10174
+ /***/ 1663:
9953
10175
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
9954
10176
 
9955
10177
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
9956
- /* harmony export */ Z: () => (/* binding */ getSOPInstanceAttributes)
10178
+ /* harmony export */ A: () => (/* binding */ getSOPInstanceAttributes)
9957
10179
  /* harmony export */ });
9958
- /* harmony import */ var _cornerstonejs_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(64225);
10180
+ /* harmony import */ var _cornerstonejs_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(28991);
9959
10181
 
9960
10182
 
9961
10183
  /**