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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/dist/{917.bundle.d238efac58b7fe8fd1a3.js → 12.bundle.f5ca9901f923a487d8b3.js} +6 -6
  2. package/dist/{295.bundle.957b1159fec14b9199a1.js → 125.bundle.253395f320b72180da63.js} +6 -6
  3. package/dist/{208.bundle.37c2a73b3387e657568c.js → 128.bundle.2dfd63dcf3b846809dfb.js} +41 -59
  4. package/dist/{351.bundle.0742237651aef9694a65.js → 181.bundle.fa57199595cf28f44c7b.js} +226 -204
  5. package/dist/{351.css → 181.css} +1 -1
  6. package/dist/{744.bundle.23011553706b687f67e4.js → 19.bundle.0d74cbc1db3841b851a6.js} +240 -375
  7. package/dist/{606.bundle.5d876f5f3dd8287f0a28.js → 202.bundle.96bbb4547a346fe3921f.js} +1420 -750
  8. package/dist/{926.bundle.dbc9d0e591cb9217fda2.js → 220.bundle.f7e1c96c94245e70f2be.js} +990 -400
  9. package/dist/221.bundle.933ef6dcf6d29eea0259.js +1722 -0
  10. package/dist/221.css +2 -0
  11. package/dist/{664.bundle.09abae984223969d1bde.js → 23.bundle.e008ad788170f2ed5569.js} +5 -6
  12. package/dist/{976.bundle.dcbddf56a7d8f388bb8a.js → 236.bundle.3f6a0e3dd259bc60d4d0.js} +87 -103
  13. package/dist/{55.bundle.550a823e75eb608e8d5e.js → 250.bundle.36909d7bc681d66087d1.js} +52 -36
  14. package/dist/{973.bundle.03b016e6095622adf12f.js → 281.bundle.69d85dc35d1bc1335fbd.js} +18 -14
  15. package/dist/{82.bundle.10c2133333748ec6fba0.js → 342.bundle.46b3527fb38b74a044e8.js} +1768 -475
  16. package/dist/{192.bundle.2dc14a6e3c4c6be913b0.js → 348.bundle.46d4c41b9ae681c50903.js} +86 -73
  17. package/dist/{404.bundle.5d57295bc05206092d42.js → 359.bundle.408fa86b95fd1597552c.js} +46 -131
  18. package/dist/{790.bundle.cedf27deeed29266a92b.js → 410.bundle.bf702dcec9db605d0d72.js} +11 -9
  19. package/dist/{151.bundle.31ea35044218837bf73f.js → 417.bundle.af0a207c29b109f84159.js} +49 -17
  20. package/dist/{569.bundle.c8e771a8d28e237b32be.js → 451.bundle.dc0d14c3724464cca2bf.js} +86 -106
  21. package/dist/{581.bundle.dc6197189f7c88c27d4c.js → 471.bundle.2206d4c0ac2ad0df2362.js} +78 -99
  22. package/dist/{199.bundle.e4ac6606dd62e42e9da4.js → 506.bundle.90364a62dcd8e433c1a4.js} +11 -9
  23. package/dist/{531.bundle.2a82fb1d69e5b57cc72b.js → 530.bundle.a03b6f942ace3e1baa1e.js} +726 -447
  24. package/dist/579.css +1 -0
  25. package/dist/{935.bundle.deeffff0e4f7b528e3c3.js → 604.bundle.a51f83e64004bca5f497.js} +2 -3
  26. package/dist/613.bundle.a06431b9a1b14cb8f469.js +532 -0
  27. package/dist/{984.bundle.e7dcbd3b8992748823fb.js → 663.bundle.482bdfb562bfb3700c55.js} +68 -38
  28. package/dist/{205.bundle.b5a473c200dcf2bbcdb4.js → 686.bundle.dccef1f36e4bc79bcc48.js} +6 -6
  29. package/dist/{50.bundle.424f8d05f1bebaafcf2c.js → 687.bundle.b456dd5eae1afeaab05d.js} +218 -9
  30. package/dist/{331.bundle.bd0c13931a21d53086c9.js → 754.bundle.e3ce6855d8d4d187f224.js} +12423 -7549
  31. package/dist/{728.bundle.d13856835357400fef82.js → 774.bundle.d365320749c4f67cda70.js} +93 -64
  32. package/dist/{381.bundle.0905e683605fcbc0895f.js → 775.bundle.2285e7e0e67878948c0d.js} +16 -16
  33. package/dist/{270.bundle.4564621556b0f963a004.js → 777.bundle.ae3fdb8a470caecc0c6a.js} +1330 -929
  34. package/dist/{283.bundle.085cddb2f16e430677b0.js → 782.bundle.742caefc99a1393225d2.js} +117 -67
  35. package/dist/{642.bundle.25e56df5f0bcd2c729b4.js → 814.bundle.f84f8c34cd82d9456367.js} +6 -6
  36. package/dist/{799.bundle.758558e64147e5aad612.js → 822.bundle.5fca45a4f40f5259aec5.js} +81 -34
  37. package/dist/831.bundle.83658f62fcc769043605.js +16700 -0
  38. package/dist/{953.bundle.3b0189ebc11cf0946f18.js → 886.bundle.a9de117c3a42b7907cf6.js} +34 -29
  39. package/dist/945.min.worker.js +1 -1
  40. package/dist/945.min.worker.js.map +1 -1
  41. package/dist/{707.bundle.17a9d7352409b6269596.js → 967.bundle.aa7e40475fa7cab0726e.js} +895 -572
  42. package/dist/_redirects +1 -1
  43. package/dist/app-config.js +35 -17
  44. package/dist/{app.bundle.837996a8f7dd2aaac338.js → app.bundle.91713b6c13b1264236f9.js} +73339 -68140
  45. package/dist/app.bundle.css +13 -12
  46. package/dist/assets/yandex-browser-manifest.json +1 -1
  47. package/dist/cornerstoneDICOMImageLoader.min.js +1 -1
  48. package/dist/cornerstoneDICOMImageLoader.min.js.map +1 -1
  49. package/dist/{dicom-microscopy-viewer.bundle.aa60bdf008c32c39cfd7.js → dicom-microscopy-viewer.bundle.2c146384eb9466d02ff8.js} +5 -4
  50. package/dist/es6-shim.min.js +3569 -2
  51. package/dist/google.js +8 -7
  52. package/dist/index.html +1 -1
  53. package/dist/{index.worker.1c69152d710fa7b84bce.worker.js → index.worker.e62ecca63f1a2e124230.worker.js} +2 -2
  54. package/dist/index.worker.e62ecca63f1a2e124230.worker.js.map +1 -0
  55. package/dist/init-service-worker.js +3 -5
  56. package/dist/oidc-client.min.js +10857 -39
  57. package/dist/polyfill.min.js +184 -1
  58. package/dist/silent-refresh.html +18 -9
  59. package/dist/sw.js +1 -1
  60. package/package.json +20 -21
  61. package/dist/616.bundle.eb4887184da6c57bf7a3.js +0 -685
  62. package/dist/780.bundle.fd0f13dc92e9caa0581e.js +0 -4769
  63. package/dist/index.worker.1c69152d710fa7b84bce.worker.js.map +0 -1
  64. /package/dist/{806.css → 19.css} +0 -0
  65. /package/dist/{55.css → 250.css} +0 -0
  66. /package/dist/{707.css → 967.css} +0 -0
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
- (globalThis["webpackChunk"] = globalThis["webpackChunk"] || []).push([[351],{
2
+ (self["webpackChunk"] = self["webpackChunk"] || []).push([[181],{
3
3
 
4
- /***/ 30351:
4
+ /***/ 86181:
5
5
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
6
6
 
7
7
  // ESM COMPAT FLAG
@@ -13,22 +13,22 @@ __webpack_require__.d(__webpack_exports__, {
13
13
  });
14
14
 
15
15
  // EXTERNAL MODULE: ../../../node_modules/react/index.js
16
- var react = __webpack_require__(32735);
16
+ var react = __webpack_require__(43001);
17
17
  // EXTERNAL MODULE: ../../../node_modules/react-resize-detector/build/index.esm.js
18
- var index_esm = __webpack_require__(14664);
18
+ var index_esm = __webpack_require__(7023);
19
19
  // EXTERNAL MODULE: ../../../node_modules/prop-types/index.js
20
- var prop_types = __webpack_require__(60216);
20
+ var prop_types = __webpack_require__(3827);
21
21
  var prop_types_default = /*#__PURE__*/__webpack_require__.n(prop_types);
22
- // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/tools/dist/esm/index.js + 321 modules
23
- var esm = __webpack_require__(57270);
24
- // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/index.js + 335 modules
25
- var dist_esm = __webpack_require__(77331);
26
- // EXTERNAL MODULE: ../../core/src/index.ts + 101 modules
27
- var src = __webpack_require__(48501);
28
- // EXTERNAL MODULE: ../../ui/src/index.js + 452 modules
29
- var ui_src = __webpack_require__(28619);
22
+ // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/tools/dist/esm/index.js + 327 modules
23
+ var esm = __webpack_require__(99777);
24
+ // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/index.js + 337 modules
25
+ var dist_esm = __webpack_require__(45754);
26
+ // EXTERNAL MODULE: ../../core/src/index.ts + 75 modules
27
+ var src = __webpack_require__(34491);
28
+ // EXTERNAL MODULE: ../../ui/src/index.js + 485 modules
29
+ var ui_src = __webpack_require__(71783);
30
30
  // EXTERNAL MODULE: ../../../extensions/cornerstone/src/state.ts
31
- var state = __webpack_require__(21922);
31
+ var state = __webpack_require__(73704);
32
32
  ;// CONCATENATED MODULE: ../../../extensions/cornerstone/src/Viewport/OHIFCornerstoneViewport.css
33
33
  // extracted by mini-css-extract-plugin
34
34
 
@@ -41,7 +41,7 @@ var state = __webpack_require__(21922);
41
41
  function CornerstoneImageScrollbar(_ref) {
42
42
  let {
43
43
  viewportData,
44
- viewportIndex,
44
+ viewportId,
45
45
  element,
46
46
  imageSliceData,
47
47
  setImageSliceData,
@@ -52,9 +52,7 @@ function CornerstoneImageScrollbar(_ref) {
52
52
  cineService,
53
53
  cornerstoneViewportService
54
54
  } = servicesManager.services;
55
- const onImageScrollbarChange = (imageIndex, viewportIndex) => {
56
- const viewportInfo = cornerstoneViewportService.getViewportInfoByIndex(viewportIndex);
57
- const viewportId = viewportInfo.getViewportId();
55
+ const onImageScrollbarChange = (imageIndex, viewportId) => {
58
56
  const viewport = cornerstoneViewportService.getCornerstoneViewport(viewportId);
59
57
  const {
60
58
  isCineEnabled
@@ -63,7 +61,7 @@ function CornerstoneImageScrollbar(_ref) {
63
61
  // on image scrollbar change, stop the CINE if it is playing
64
62
  cineService.stopClip(element);
65
63
  cineService.setCine({
66
- id: viewportIndex,
64
+ id: viewportId,
67
65
  isPlaying: false
68
66
  });
69
67
  }
@@ -76,7 +74,7 @@ function CornerstoneImageScrollbar(_ref) {
76
74
  if (!viewportData) {
77
75
  return;
78
76
  }
79
- const viewport = cornerstoneViewportService.getCornerstoneViewportByIndex(viewportIndex);
77
+ const viewport = cornerstoneViewportService.getCornerstoneViewport(viewportId);
80
78
  if (!viewport) {
81
79
  return;
82
80
  }
@@ -102,7 +100,7 @@ function CornerstoneImageScrollbar(_ref) {
102
100
  numberOfSlices
103
101
  });
104
102
  }
105
- }, [viewportIndex, viewportData]);
103
+ }, [viewportId, viewportData]);
106
104
  (0,react.useEffect)(() => {
107
105
  if (viewportData?.viewportType !== dist_esm.Enums.ViewportType.STACK) {
108
106
  return;
@@ -143,7 +141,7 @@ function CornerstoneImageScrollbar(_ref) {
143
141
  };
144
142
  }, [viewportData, element]);
145
143
  return /*#__PURE__*/react.createElement(ui_src/* ImageScrollbar */.Ln, {
146
- onChange: evt => onImageScrollbarChange(evt, viewportIndex),
144
+ onChange: evt => onImageScrollbarChange(evt, viewportId),
147
145
  max: imageSliceData.numberOfSlices ? imageSliceData.numberOfSlices - 1 : 0,
148
146
  height: scrollbarHeight,
149
147
  value: imageSliceData.imageIndex
@@ -151,7 +149,7 @@ function CornerstoneImageScrollbar(_ref) {
151
149
  }
152
150
  CornerstoneImageScrollbar.propTypes = {
153
151
  viewportData: (prop_types_default()).object,
154
- viewportIndex: (prop_types_default()).number.isRequired,
152
+ viewportId: (prop_types_default()).string.isRequired,
155
153
  element: prop_types_default().instanceOf(Element),
156
154
  scrollbarHeight: (prop_types_default()).string,
157
155
  imageSliceData: (prop_types_default()).object.isRequired,
@@ -160,9 +158,9 @@ CornerstoneImageScrollbar.propTypes = {
160
158
  };
161
159
  /* harmony default export */ const ViewportImageScrollbar = (CornerstoneImageScrollbar);
162
160
  // EXTERNAL MODULE: ../../../node_modules/gl-matrix/esm/index.js + 10 modules
163
- var gl_matrix_esm = __webpack_require__(88256);
161
+ var gl_matrix_esm = __webpack_require__(45451);
164
162
  // EXTERNAL MODULE: ../../../node_modules/moment/moment.js
165
- var moment = __webpack_require__(53806);
163
+ var moment = __webpack_require__(71271);
166
164
  var moment_default = /*#__PURE__*/__webpack_require__.n(moment);
167
165
  ;// CONCATENATED MODULE: ../../../extensions/cornerstone/src/Viewport/Overlays/utils.ts
168
166
 
@@ -240,7 +238,7 @@ function formatPN(name) {
240
238
  * Gets compression type
241
239
  *
242
240
  * @param {number} imageId
243
- * @returns {string} comrpession type.
241
+ * @returns {string} compression type.
244
242
  */
245
243
  function getCompression(imageId) {
246
244
  const generalImageModule = metaData.get('generalImageModule', imageId) || {};
@@ -291,11 +289,11 @@ function VOIOverlayItem(_ref) {
291
289
  }, /*#__PURE__*/react.createElement("span", {
292
290
  className: "mr-1 shrink-0"
293
291
  }, "W:"), /*#__PURE__*/react.createElement("span", {
294
- className: "ml-1 mr-2 font-light shrink-0"
292
+ className: "ml-1 mr-2 shrink-0 font-light"
295
293
  }, windowWidth.toFixed(0)), /*#__PURE__*/react.createElement("span", {
296
294
  className: "mr-1 shrink-0"
297
295
  }, "L:"), /*#__PURE__*/react.createElement("span", {
298
- className: "ml-1 font-light shrink-0"
296
+ className: "ml-1 shrink-0 font-light"
299
297
  }, windowCenter.toFixed(0)));
300
298
  }
301
299
 
@@ -352,7 +350,7 @@ function CustomizableViewportOverlay(_ref4) {
352
350
  element,
353
351
  viewportData,
354
352
  imageSliceData,
355
- viewportIndex,
353
+ viewportId,
356
354
  servicesManager
357
355
  } = _ref4;
358
356
  const {
@@ -382,10 +380,10 @@ function CustomizableViewportOverlay(_ref4) {
382
380
  }, [viewportData, imageIndex]);
383
381
  const instanceNumber = (0,react.useMemo)(() => {
384
382
  if (viewportData != null) {
385
- return _getInstanceNumber(viewportData, viewportIndex, imageIndex, cornerstoneViewportService);
383
+ return _getInstanceNumber(viewportData, viewportId, imageIndex, cornerstoneViewportService);
386
384
  }
387
385
  return null;
388
- }, [viewportData, viewportIndex, imageIndex, cornerstoneViewportService]);
386
+ }, [viewportData, viewportId, imageIndex, cornerstoneViewportService]);
389
387
 
390
388
  /**
391
389
  * Initial toolbar state
@@ -422,7 +420,7 @@ function CustomizableViewportOverlay(_ref4) {
422
420
  return () => {
423
421
  element.removeEventListener(dist_esm.Enums.Events.VOI_MODIFIED, updateVOI);
424
422
  };
425
- }, [viewportIndex, viewportData, voi, element]);
423
+ }, [viewportId, viewportData, voi, element]);
426
424
 
427
425
  /**
428
426
  * Updating the scale when the viewport changes its zoom
@@ -434,7 +432,7 @@ function CustomizableViewportOverlay(_ref4) {
434
432
  camera
435
433
  } = eventDetail.detail;
436
434
  if (previousCamera.parallelScale !== camera.parallelScale || previousCamera.scale !== camera.scale) {
437
- const viewport = cornerstoneViewportService.getCornerstoneViewportByIndex(viewportIndex);
435
+ const viewport = cornerstoneViewportService.getCornerstoneViewport(viewportId);
438
436
  if (!viewport) {
439
437
  return;
440
438
  }
@@ -458,7 +456,7 @@ function CustomizableViewportOverlay(_ref4) {
458
456
  return () => {
459
457
  element.removeEventListener(dist_esm.Enums.Events.CAMERA_MODIFIED, updateScale);
460
458
  };
461
- }, [viewportIndex, viewportData, cornerstoneViewportService, element]);
459
+ }, [viewportId, viewportData, cornerstoneViewportService, element]);
462
460
 
463
461
  /**
464
462
  * Updating the active tools when the toolbar changes
@@ -479,7 +477,7 @@ function CustomizableViewportOverlay(_ref4) {
479
477
  element,
480
478
  viewportData,
481
479
  imageSliceData,
482
- viewportIndex,
480
+ viewportId,
483
481
  servicesManager,
484
482
  customization: item,
485
483
  formatters: {
@@ -506,7 +504,7 @@ function CustomizableViewportOverlay(_ref4) {
506
504
  return renderItem.content(overlayItemProps);
507
505
  }
508
506
  }
509
- }, [element, viewportData, imageSliceData, viewportIndex, servicesManager, customizationService, instance, voi, scale, instanceNumber]);
507
+ }, [element, viewportData, imageSliceData, viewportId, servicesManager, customizationService, instance, voi, scale, instanceNumber]);
510
508
  const getTopLeftContent = (0,react.useCallback)(() => {
511
509
  const items = topLeftCustomization?.items || [{
512
510
  id: 'WindowLevel',
@@ -557,7 +555,7 @@ function _getViewportInstance(viewportData, imageIndex) {
557
555
  }
558
556
  return imageId ? dist_esm.metaData.get('instance', imageId) || {} : {};
559
557
  }
560
- function _getInstanceNumber(viewportData, viewportIndex, imageIndex, cornerstoneViewportService) {
558
+ function _getInstanceNumber(viewportData, viewportId, imageIndex, cornerstoneViewportService) {
561
559
  let instanceNumber;
562
560
  if (viewportData.viewportType === dist_esm.Enums.ViewportType.STACK) {
563
561
  instanceNumber = _getInstanceNumberFromStack(viewportData, imageIndex);
@@ -565,7 +563,7 @@ function _getInstanceNumber(viewportData, viewportIndex, imageIndex, cornerstone
565
563
  return null;
566
564
  }
567
565
  } else if (viewportData.viewportType === dist_esm.Enums.ViewportType.ORTHOGRAPHIC) {
568
- instanceNumber = _getInstanceNumberFromVolume(viewportData, imageIndex, viewportIndex, cornerstoneViewportService);
566
+ instanceNumber = _getInstanceNumberFromVolume(viewportData, imageIndex, viewportId, cornerstoneViewportService);
569
567
  }
570
568
  return instanceNumber;
571
569
  }
@@ -589,7 +587,7 @@ function _getInstanceNumberFromStack(viewportData, imageIndex) {
589
587
  // Since volume viewports can be in any view direction, they can render
590
588
  // a reconstructed image which don't have imageIds; therefore, no instance and instanceNumber
591
589
  // Here we check if viewport is in the acquisition direction and if so, we get the instanceNumber
592
- function _getInstanceNumberFromVolume(viewportData, imageIndex, viewportIndex, cornerstoneViewportService) {
590
+ function _getInstanceNumberFromVolume(viewportData, viewportId, cornerstoneViewportService) {
593
591
  const volumes = viewportData.volumes;
594
592
 
595
593
  // Todo: support fusion of acquisition plane which has instanceNumber
@@ -601,7 +599,7 @@ function _getInstanceNumberFromVolume(viewportData, imageIndex, viewportIndex, c
601
599
  direction,
602
600
  imageIds
603
601
  } = volume;
604
- const cornerstoneViewport = cornerstoneViewportService.getCornerstoneViewportByIndex(viewportIndex);
602
+ const cornerstoneViewport = cornerstoneViewportService.getCornerstoneViewport(viewportId);
605
603
  if (!cornerstoneViewport) {
606
604
  return;
607
605
  }
@@ -630,11 +628,11 @@ function _getInstanceNumberFromVolume(viewportData, imageIndex, viewportIndex, c
630
628
  CustomizableViewportOverlay.propTypes = {
631
629
  viewportData: (prop_types_default()).object,
632
630
  imageIndex: (prop_types_default()).number,
633
- viewportIndex: (prop_types_default()).number
631
+ viewportId: (prop_types_default()).string
634
632
  };
635
633
  /* harmony default export */ const Overlays_CustomizableViewportOverlay = (CustomizableViewportOverlay);
636
634
  // EXTERNAL MODULE: ../../../node_modules/classnames/index.js
637
- var classnames = __webpack_require__(40841);
635
+ var classnames = __webpack_require__(44921);
638
636
  var classnames_default = /*#__PURE__*/__webpack_require__.n(classnames);
639
637
  ;// CONCATENATED MODULE: ../../../extensions/cornerstone/src/Viewport/Overlays/ViewportOrientationMarkers.css
640
638
  // extracted by mini-css-extract-plugin
@@ -656,7 +654,7 @@ function ViewportOrientationMarkers(_ref) {
656
654
  element,
657
655
  viewportData,
658
656
  imageSliceData,
659
- viewportIndex,
657
+ viewportId,
660
658
  servicesManager,
661
659
  orientationMarkers = ['top', 'left']
662
660
  } = _ref;
@@ -726,7 +724,7 @@ function ViewportOrientationMarkers(_ref) {
726
724
  return '';
727
725
  }
728
726
  const markers = _getOrientationMarkers(rowCosines, columnCosines, rotation, flipVertical, flipHorizontal);
729
- const ohifViewport = cornerstoneViewportService.getViewportInfoByIndex(viewportIndex);
727
+ const ohifViewport = cornerstoneViewportService.getViewportInfo(viewportId);
730
728
  if (!ohifViewport) {
731
729
  console.log('ViewportOrientationMarkers::No viewport');
732
730
  return null;
@@ -858,9 +856,9 @@ function ViewportImageSliceLoadingIndicator(_ref) {
858
856
  }, [element, viewportData]);
859
857
  if (error) {
860
858
  return /*#__PURE__*/react.createElement(react.Fragment, null, /*#__PURE__*/react.createElement("div", {
861
- className: "bg-black opacity-50 absolute h-full w-full top-0 left-0"
859
+ className: "absolute top-0 left-0 h-full w-full bg-black opacity-50"
862
860
  }, /*#__PURE__*/react.createElement("div", {
863
- className: "flex transparent items-center justify-center w-full h-full"
861
+ className: "transparent flex h-full w-full items-center justify-center"
864
862
  }, /*#__PURE__*/react.createElement("p", {
865
863
  className: "text-primary-light text-xl font-light"
866
864
  }, /*#__PURE__*/react.createElement("h4", null, "Error Loading Image"), /*#__PURE__*/react.createElement("p", null, "An error has occurred."), /*#__PURE__*/react.createElement("p", null, error)))));
@@ -871,9 +869,9 @@ function ViewportImageSliceLoadingIndicator(_ref) {
871
869
  // IMPORTANT: we need to use the pointer-events-none class to prevent the loading indicator from
872
870
  // interacting with the mouse, since scrolling should propagate to the viewport underneath
873
871
  react.createElement("div", {
874
- className: "pointer-events-none bg-black opacity-50 absolute h-full w-full top-0 left-0"
872
+ className: "pointer-events-none absolute top-0 left-0 h-full w-full bg-black opacity-50"
875
873
  }, /*#__PURE__*/react.createElement("div", {
876
- className: "flex transparent items-center justify-center w-full h-full"
874
+ className: "transparent flex h-full w-full items-center justify-center"
877
875
  }, /*#__PURE__*/react.createElement("p", {
878
876
  className: "text-primary-light text-xl font-light"
879
877
  }, "Loading...")))
@@ -899,7 +897,7 @@ ViewportImageSliceLoadingIndicator.defaultProps = {
899
897
 
900
898
  function CornerstoneOverlays(props) {
901
899
  const {
902
- viewportIndex,
900
+ viewportId,
903
901
  element,
904
902
  scrollbarHeight,
905
903
  servicesManager
@@ -916,7 +914,7 @@ function CornerstoneOverlays(props) {
916
914
  const {
917
915
  unsubscribe
918
916
  } = cornerstoneViewportService.subscribe(cornerstoneViewportService.EVENTS.VIEWPORT_DATA_CHANGED, props => {
919
- if (props.viewportIndex !== viewportIndex) {
917
+ if (props.viewportId !== viewportId) {
920
918
  return;
921
919
  }
922
920
  setViewportData(props.viewportData);
@@ -924,12 +922,12 @@ function CornerstoneOverlays(props) {
924
922
  return () => {
925
923
  unsubscribe();
926
924
  };
927
- }, [viewportIndex]);
925
+ }, [viewportId]);
928
926
  if (!element) {
929
927
  return null;
930
928
  }
931
929
  if (viewportData) {
932
- const viewportInfo = cornerstoneViewportService.getViewportInfoByIndex(viewportIndex);
930
+ const viewportInfo = cornerstoneViewportService.getViewportInfo(viewportId);
933
931
  if (viewportInfo?.viewportOptions?.customViewportProps?.hideOverlays) {
934
932
  return null;
935
933
  }
@@ -937,7 +935,7 @@ function CornerstoneOverlays(props) {
937
935
  return /*#__PURE__*/react.createElement("div", {
938
936
  className: "noselect"
939
937
  }, /*#__PURE__*/react.createElement(ViewportImageScrollbar, {
940
- viewportIndex: viewportIndex,
938
+ viewportId: viewportId,
941
939
  viewportData: viewportData,
942
940
  element: element,
943
941
  imageSliceData: imageSliceData,
@@ -947,7 +945,7 @@ function CornerstoneOverlays(props) {
947
945
  }), /*#__PURE__*/react.createElement(Overlays_CustomizableViewportOverlay, {
948
946
  imageSliceData: imageSliceData,
949
947
  viewportData: viewportData,
950
- viewportIndex: viewportIndex,
948
+ viewportId: viewportId,
951
949
  servicesManager: servicesManager,
952
950
  element: element
953
951
  }), /*#__PURE__*/react.createElement(Overlays_ViewportImageSliceLoadingIndicator, {
@@ -958,12 +956,105 @@ function CornerstoneOverlays(props) {
958
956
  element: element,
959
957
  viewportData: viewportData,
960
958
  servicesManager: servicesManager,
961
- viewportIndex: viewportIndex
959
+ viewportId: viewportId
962
960
  }));
963
961
  }
964
962
  /* harmony default export */ const Overlays_CornerstoneOverlays = (CornerstoneOverlays);
965
963
  // EXTERNAL MODULE: ../../../extensions/cornerstone/src/utils/measurementServiceMappings/utils/getSOPInstanceAttributes.js
966
- var getSOPInstanceAttributes = __webpack_require__(63130);
964
+ var getSOPInstanceAttributes = __webpack_require__(87172);
965
+ ;// CONCATENATED MODULE: ../../../extensions/cornerstone/src/components/CinePlayer/CinePlayer.tsx
966
+
967
+
968
+
969
+ function WrappedCinePlayer(_ref) {
970
+ let {
971
+ enabledVPElement,
972
+ viewportId,
973
+ servicesManager
974
+ } = _ref;
975
+ const {
976
+ toolbarService,
977
+ customizationService
978
+ } = servicesManager.services;
979
+ const [{
980
+ isCineEnabled,
981
+ cines
982
+ }, cineService] = (0,ui_src/* useCine */.vQ)();
983
+ const [{
984
+ activeViewportId
985
+ }] = (0,ui_src/* useViewportGrid */.O_)();
986
+ const {
987
+ component: CinePlayerComponent = ui_src/* CinePlayer */.H6
988
+ } = customizationService.get('cinePlayer') ?? {};
989
+ const handleCineClose = () => {
990
+ toolbarService.recordInteraction({
991
+ groupId: 'MoreTools',
992
+ interactionType: 'toggle',
993
+ commands: [{
994
+ commandName: 'toggleCine',
995
+ commandOptions: {},
996
+ toolName: 'cine',
997
+ context: 'CORNERSTONE'
998
+ }]
999
+ });
1000
+ };
1001
+ const cineHandler = () => {
1002
+ if (!cines || !cines[viewportId] || !enabledVPElement) {
1003
+ return;
1004
+ }
1005
+ const cine = cines[viewportId];
1006
+ const isPlaying = cine.isPlaying || false;
1007
+ const frameRate = cine.frameRate || 24;
1008
+ const validFrameRate = Math.max(frameRate, 1);
1009
+ if (isPlaying) {
1010
+ cineService.playClip(enabledVPElement, {
1011
+ framesPerSecond: validFrameRate
1012
+ });
1013
+ } else {
1014
+ cineService.stopClip(enabledVPElement);
1015
+ }
1016
+ };
1017
+ (0,react.useEffect)(() => {
1018
+ dist_esm.eventTarget.addEventListener(dist_esm.Enums.Events.STACK_VIEWPORT_NEW_STACK, cineHandler);
1019
+ return () => {
1020
+ cineService.setCine({
1021
+ id: viewportId,
1022
+ isPlaying: false
1023
+ });
1024
+ dist_esm.eventTarget.removeEventListener(dist_esm.Enums.Events.STACK_VIEWPORT_NEW_STACK, cineHandler);
1025
+ };
1026
+ }, [enabledVPElement]);
1027
+ (0,react.useEffect)(() => {
1028
+ if (!cines || !cines[viewportId] || !enabledVPElement) {
1029
+ return;
1030
+ }
1031
+ cineHandler();
1032
+ return () => {
1033
+ if (enabledVPElement && cines?.[viewportId]?.isPlaying) {
1034
+ cineService.stopClip(enabledVPElement);
1035
+ }
1036
+ };
1037
+ }, [cines, viewportId, cineService, enabledVPElement, cineHandler]);
1038
+ const cine = cines[viewportId];
1039
+ const isPlaying = cine && cine.isPlaying || false;
1040
+ return isCineEnabled && /*#__PURE__*/react.createElement(CinePlayerComponent, {
1041
+ className: "absolute left-1/2 bottom-3 -translate-x-1/2",
1042
+ isPlaying: isPlaying,
1043
+ onClose: handleCineClose,
1044
+ onPlayPauseChange: isPlaying => cineService.setCine({
1045
+ id: activeViewportId,
1046
+ isPlaying
1047
+ }),
1048
+ onFrameRateChange: frameRate => cineService.setCine({
1049
+ id: activeViewportId,
1050
+ frameRate
1051
+ })
1052
+ });
1053
+ }
1054
+ /* harmony default export */ const CinePlayer = (WrappedCinePlayer);
1055
+ ;// CONCATENATED MODULE: ../../../extensions/cornerstone/src/components/CinePlayer/index.ts
1056
+
1057
+ /* harmony default export */ const components_CinePlayer = (CinePlayer);
967
1058
  ;// CONCATENATED MODULE: ../../../extensions/cornerstone/src/Viewport/OHIFCornerstoneViewport.tsx
968
1059
 
969
1060
 
@@ -976,6 +1067,7 @@ var getSOPInstanceAttributes = __webpack_require__(63130);
976
1067
 
977
1068
 
978
1069
 
1070
+
979
1071
  const STACK = 'stack';
980
1072
 
981
1073
  /**
@@ -999,6 +1091,9 @@ function areEqual(prevProps, nextProps) {
999
1091
  if (prevProps.viewportOptions.viewportType !== nextProps.viewportOptions.viewportType) {
1000
1092
  return false;
1001
1093
  }
1094
+ if (nextProps.viewportOptions.needsRerendering) {
1095
+ return false;
1096
+ }
1002
1097
  const prevDisplaySets = prevProps.displaySets;
1003
1098
  const nextDisplaySets = nextProps.displaySets;
1004
1099
  if (prevDisplaySets.length !== nextDisplaySets.length) {
@@ -1032,27 +1127,22 @@ function areEqual(prevProps, nextProps) {
1032
1127
  // Then we don't need to worry about the re-renders if the props change.
1033
1128
  const OHIFCornerstoneViewport = /*#__PURE__*/react.memo(props => {
1034
1129
  const {
1035
- viewportIndex,
1036
1130
  displaySets,
1037
1131
  dataSource,
1038
1132
  viewportOptions,
1039
1133
  displaySetOptions,
1040
1134
  servicesManager,
1135
+ commandsManager,
1041
1136
  onElementEnabled,
1042
1137
  onElementDisabled,
1138
+ isJumpToMeasurementDisabled,
1043
1139
  // Note: you SHOULD NOT use the initialImageIdOrIndex for manipulation
1044
1140
  // of the imageData in the OHIFCornerstoneViewport. This prop is used
1045
1141
  // to set the initial state of the viewport's first image to render
1046
1142
  initialImageIndex
1047
1143
  } = props;
1144
+ const viewportId = viewportOptions.viewportId;
1048
1145
  const [scrollbarHeight, setScrollbarHeight] = (0,react.useState)('100px');
1049
- const [{
1050
- isCineEnabled,
1051
- cines
1052
- }, cineService] = (0,ui_src/* useCine */.vQ)();
1053
- const [{
1054
- activeViewportIndex
1055
- }] = (0,ui_src/* useViewportGrid */.O_)();
1056
1146
  const [enabledVPElement, setEnabledVPElement] = (0,react.useState)(null);
1057
1147
  const elementRef = (0,react.useRef)();
1058
1148
  const {
@@ -1067,58 +1157,6 @@ const OHIFCornerstoneViewport = /*#__PURE__*/react.memo(props => {
1067
1157
  stateSyncService
1068
1158
  } = servicesManager.services;
1069
1159
  const [viewportDialogState] = (0,ui_src/* useViewportDialog */.en)();
1070
- const cineHandler = () => {
1071
- if (!cines || !cines[viewportIndex] || !enabledVPElement) {
1072
- return;
1073
- }
1074
- const cine = cines[viewportIndex];
1075
- const isPlaying = cine.isPlaying || false;
1076
- const frameRate = cine.frameRate || 24;
1077
- const validFrameRate = Math.max(frameRate, 1);
1078
- if (isPlaying) {
1079
- cineService.playClip(enabledVPElement, {
1080
- framesPerSecond: validFrameRate
1081
- });
1082
- } else {
1083
- cineService.stopClip(enabledVPElement);
1084
- }
1085
- };
1086
- (0,react.useEffect)(() => {
1087
- dist_esm.eventTarget.addEventListener(dist_esm.Enums.Events.STACK_VIEWPORT_NEW_STACK, cineHandler);
1088
- return () => {
1089
- cineService.setCine({
1090
- id: viewportIndex,
1091
- isPlaying: false
1092
- });
1093
- dist_esm.eventTarget.removeEventListener(dist_esm.Enums.Events.STACK_VIEWPORT_NEW_STACK, cineHandler);
1094
- };
1095
- }, [enabledVPElement]);
1096
- (0,react.useEffect)(() => {
1097
- if (!cines || !cines[viewportIndex] || !enabledVPElement) {
1098
- return;
1099
- }
1100
- cineHandler();
1101
- return () => {
1102
- if (enabledVPElement && cines?.[viewportIndex]?.isPlaying) {
1103
- cineService.stopClip(enabledVPElement);
1104
- }
1105
- };
1106
- }, [cines, viewportIndex, cineService, enabledVPElement, cineHandler]);
1107
- const cine = cines[viewportIndex];
1108
- const isPlaying = cine && cine.isPlaying || false;
1109
- const handleCineClose = () => {
1110
- toolbarService.recordInteraction({
1111
- groupId: 'MoreTools',
1112
- itemId: 'cine',
1113
- interactionType: 'toggle',
1114
- commands: [{
1115
- commandName: 'toggleCine',
1116
- commandOptions: {},
1117
- context: 'CORNERSTONE'
1118
- }]
1119
- });
1120
- };
1121
-
1122
1160
  // useCallback for scroll bar height calculation
1123
1161
  const setImageScrollBarHeight = (0,react.useCallback)(() => {
1124
1162
  const scrollbarHeight = `${elementRef.current.clientHeight - 20}px`;
@@ -1132,46 +1170,12 @@ const OHIFCornerstoneViewport = /*#__PURE__*/react.memo(props => {
1132
1170
  setImageScrollBarHeight();
1133
1171
  }
1134
1172
  }, [elementRef]);
1135
- const storePresentation = () => {
1136
- const currentPresentation = cornerstoneViewportService.getPresentation(viewportIndex);
1137
- if (!currentPresentation || !currentPresentation.presentationIds) return;
1138
- const {
1139
- lutPresentationStore,
1140
- positionPresentationStore
1141
- } = stateSyncService.getState();
1142
- const {
1143
- presentationIds
1144
- } = currentPresentation;
1145
- const {
1146
- lutPresentationId,
1147
- positionPresentationId
1148
- } = presentationIds || {};
1149
- const storeState = {};
1150
- if (lutPresentationId) {
1151
- storeState.lutPresentationStore = {
1152
- ...lutPresentationStore,
1153
- [lutPresentationId]: currentPresentation
1154
- };
1155
- }
1156
- if (positionPresentationId) {
1157
- storeState.positionPresentationStore = {
1158
- ...positionPresentationStore,
1159
- [positionPresentationId]: currentPresentation
1160
- };
1161
- }
1162
- stateSyncService.store(storeState);
1163
- };
1164
- const cleanUpServices = (0,react.useCallback)(() => {
1165
- const viewportInfo = cornerstoneViewportService.getViewportInfoByIndex(viewportIndex);
1166
- if (!viewportInfo) {
1167
- return;
1168
- }
1169
- const viewportId = viewportInfo.getViewportId();
1173
+ const cleanUpServices = (0,react.useCallback)(viewportInfo => {
1170
1174
  const renderingEngineId = viewportInfo.getRenderingEngineId();
1171
1175
  const syncGroups = viewportInfo.getSyncGroups();
1172
1176
  toolGroupService.removeViewportFromToolGroup(viewportId, renderingEngineId);
1173
1177
  syncGroupService.removeViewportFromSyncGroup(viewportId, renderingEngineId, syncGroups);
1174
- }, [viewportIndex, viewportOptions.viewportId]);
1178
+ }, [viewportId]);
1175
1179
  const elementEnabledHandler = (0,react.useCallback)(evt => {
1176
1180
  // check this is this element reference and return early if doesn't match
1177
1181
  if (evt.detail.element !== elementRef.current) {
@@ -1182,8 +1186,7 @@ const OHIFCornerstoneViewport = /*#__PURE__*/react.memo(props => {
1182
1186
  element
1183
1187
  } = evt.detail;
1184
1188
  const viewportInfo = cornerstoneViewportService.getViewportInfo(viewportId);
1185
- const viewportIndex = viewportInfo.getViewportIndex();
1186
- (0,state/* setEnabledElement */.Yc)(viewportIndex, element);
1189
+ (0,state/* setEnabledElement */.Yc)(viewportId, element);
1187
1190
  setEnabledVPElement(element);
1188
1191
  const renderingEngineId = viewportInfo.getRenderingEngineId();
1189
1192
  const toolGroupId = viewportInfo.getToolGroupId();
@@ -1193,18 +1196,22 @@ const OHIFCornerstoneViewport = /*#__PURE__*/react.memo(props => {
1193
1196
  if (onElementEnabled) {
1194
1197
  onElementEnabled(evt);
1195
1198
  }
1196
- }, [viewportIndex, onElementEnabled, toolGroupService]);
1199
+ }, [viewportId, onElementEnabled, toolGroupService]);
1197
1200
 
1198
1201
  // disable the element upon unmounting
1199
1202
  (0,react.useEffect)(() => {
1200
- cornerstoneViewportService.enableViewport(viewportIndex, viewportOptions, elementRef.current);
1203
+ cornerstoneViewportService.enableViewport(viewportId, elementRef.current);
1201
1204
  dist_esm.eventTarget.addEventListener(dist_esm.Enums.Events.ELEMENT_ENABLED, elementEnabledHandler);
1202
1205
  setImageScrollBarHeight();
1203
1206
  return () => {
1204
- storePresentation();
1205
- cleanUpServices();
1206
- const viewportInfo = cornerstoneViewportService.getViewportInfoByIndex(viewportIndex);
1207
- cornerstoneViewportService.disableElement(viewportIndex);
1207
+ const viewportInfo = cornerstoneViewportService.getViewportInfo(viewportId);
1208
+ if (!viewportInfo) {
1209
+ return;
1210
+ }
1211
+ cleanUpServices(viewportInfo);
1212
+ cornerstoneViewportService.storePresentation({
1213
+ viewportId
1214
+ });
1208
1215
  if (onElementDisabled) {
1209
1216
  onElementDisabled(viewportInfo);
1210
1217
  }
@@ -1223,19 +1230,26 @@ const OHIFCornerstoneViewport = /*#__PURE__*/react.memo(props => {
1223
1230
  (0,react.useEffect)(() => {
1224
1231
  const {
1225
1232
  unsubscribe
1226
- } = displaySetService.subscribe(displaySetService.EVENTS.DISPLAY_SET_SERIES_METADATA_INVALIDATED, async invalidatedDisplaySetInstanceUID => {
1227
- const viewportInfo = cornerstoneViewportService.getViewportInfoByIndex(viewportIndex);
1233
+ } = displaySetService.subscribe(displaySetService.EVENTS.DISPLAY_SET_SERIES_METADATA_INVALIDATED, async _ref => {
1234
+ let {
1235
+ displaySetInstanceUID: invalidatedDisplaySetInstanceUID,
1236
+ invalidateData
1237
+ } = _ref;
1238
+ if (!invalidateData) {
1239
+ return;
1240
+ }
1241
+ const viewportInfo = cornerstoneViewportService.getViewportInfo(viewportId);
1228
1242
  if (viewportInfo.hasDisplaySet(invalidatedDisplaySetInstanceUID)) {
1229
1243
  const viewportData = viewportInfo.getViewportData();
1230
1244
  const newViewportData = await cornerstoneCacheService.invalidateViewportData(viewportData, invalidatedDisplaySetInstanceUID, dataSource, displaySetService);
1231
1245
  const keepCamera = true;
1232
- cornerstoneViewportService.updateViewport(viewportIndex, newViewportData, keepCamera);
1246
+ cornerstoneViewportService.updateViewport(viewportId, newViewportData, keepCamera);
1233
1247
  }
1234
1248
  });
1235
1249
  return () => {
1236
1250
  unsubscribe();
1237
1251
  };
1238
- }, [viewportIndex]);
1252
+ }, [viewportId]);
1239
1253
  (0,react.useEffect)(() => {
1240
1254
  // handle the default viewportType to be stack
1241
1255
  if (!viewportOptions.viewportType) {
@@ -1259,13 +1273,23 @@ const OHIFCornerstoneViewport = /*#__PURE__*/react.memo(props => {
1259
1273
  lutPresentation: lutPresentationStore[presentationIds?.lutPresentationId]
1260
1274
  };
1261
1275
  let measurement;
1262
- if (cacheJumpToMeasurementEvent?.viewportIndex === viewportIndex) {
1276
+ if (cacheJumpToMeasurementEvent?.viewportId === viewportId) {
1263
1277
  measurement = cacheJumpToMeasurementEvent.measurement;
1264
1278
  // Delete the position presentation so that viewport navigates direct
1265
1279
  presentations.positionPresentation = null;
1266
1280
  cacheJumpToMeasurementEvent = null;
1267
1281
  }
1268
- cornerstoneViewportService.setViewportData(viewportIndex, viewportData, viewportOptions, displaySetOptions, presentations);
1282
+
1283
+ // Note: This is a hack to get the grid to re-render the OHIFCornerstoneViewport component
1284
+ // Used for segmentation hydration right now, since the logic to decide whether
1285
+ // a viewport needs to render a segmentation lives inside the CornerstoneViewportService
1286
+ // so we need to re-render (force update via change of the needsRerendering) so that React
1287
+ // does the diffing and decides we should render this again (although the id and element has not changed)
1288
+ // so that the CornerstoneViewportService can decide whether to render the segmentation or not. Not that we reached here we can turn it off.
1289
+ if (viewportOptions.needsRerendering) {
1290
+ viewportOptions.needsRerendering = false;
1291
+ }
1292
+ cornerstoneViewportService.setViewportData(viewportId, viewportData, viewportOptions, displaySetOptions, presentations);
1269
1293
  if (measurement) {
1270
1294
  esm.annotation.selection.setAnnotationSelected(measurement.uid);
1271
1295
  }
@@ -1284,21 +1308,20 @@ const OHIFCornerstoneViewport = /*#__PURE__*/react.memo(props => {
1284
1308
  * the cache for jumping to see if there is any jump queued, then we jump to the correct slice.
1285
1309
  */
1286
1310
  (0,react.useEffect)(() => {
1287
- const unsubscribeFromJumpToMeasurementEvents = _subscribeToJumpToMeasurementEvents(measurementService, displaySetService, elementRef, viewportIndex, displaySets, viewportGridService, cornerstoneViewportService);
1288
- _checkForCachedJumpToMeasurementEvents(measurementService, displaySetService, elementRef, viewportIndex, displaySets, viewportGridService, cornerstoneViewportService);
1311
+ if (isJumpToMeasurementDisabled) {
1312
+ return;
1313
+ }
1314
+ const unsubscribeFromJumpToMeasurementEvents = _subscribeToJumpToMeasurementEvents(measurementService, displaySetService, elementRef, viewportId, displaySets, viewportGridService, cornerstoneViewportService);
1315
+ _checkForCachedJumpToMeasurementEvents(measurementService, displaySetService, elementRef, viewportId, displaySets, viewportGridService, cornerstoneViewportService);
1289
1316
  return () => {
1290
1317
  unsubscribeFromJumpToMeasurementEvents();
1291
1318
  };
1292
- }, [displaySets, elementRef, viewportIndex]);
1319
+ }, [displaySets, elementRef, viewportId]);
1293
1320
  return /*#__PURE__*/react.createElement(react.Fragment, null, /*#__PURE__*/react.createElement("div", {
1294
1321
  className: "viewport-wrapper"
1295
1322
  }, /*#__PURE__*/react.createElement(index_esm/* default */.ZP, {
1296
- handleWidth: true,
1297
- handleHeight: true,
1298
- skipOnMount: true // Todo: make these configurable
1299
- ,
1300
- refreshMode: 'debounce',
1301
- refreshRate: 200 // transition amount in side panel
1323
+ refreshMode: "debounce",
1324
+ refreshRate: 50 // Wait 50 ms after last move to render
1302
1325
  ,
1303
1326
  onResize: onResize,
1304
1327
  targetRef: elementRef.current
@@ -1312,26 +1335,18 @@ const OHIFCornerstoneViewport = /*#__PURE__*/react.memo(props => {
1312
1335
  onMouseDown: e => e.preventDefault(),
1313
1336
  ref: elementRef
1314
1337
  }), /*#__PURE__*/react.createElement(Overlays_CornerstoneOverlays, {
1315
- viewportIndex: viewportIndex,
1338
+ viewportId: viewportId,
1316
1339
  toolBarService: toolbarService,
1317
1340
  element: elementRef.current,
1318
1341
  scrollbarHeight: scrollbarHeight,
1319
1342
  servicesManager: servicesManager
1320
- }), isCineEnabled && /*#__PURE__*/react.createElement(ui_src/* CinePlayer */.H6, {
1321
- className: "absolute left-1/2 -translate-x-1/2 bottom-3",
1322
- isPlaying: isPlaying,
1323
- onClose: handleCineClose,
1324
- onPlayPauseChange: isPlaying => cineService.setCine({
1325
- id: activeViewportIndex,
1326
- isPlaying
1327
- }),
1328
- onFrameRateChange: frameRate => cineService.setCine({
1329
- id: activeViewportIndex,
1330
- frameRate
1331
- })
1343
+ }), /*#__PURE__*/react.createElement(components_CinePlayer, {
1344
+ enabledVPElement: enabledVPElement,
1345
+ viewportId: viewportId,
1346
+ servicesManager: servicesManager
1332
1347
  })), /*#__PURE__*/react.createElement("div", {
1333
1348
  className: "absolute w-full"
1334
- }, viewportDialogState.viewportIndex === viewportIndex && /*#__PURE__*/react.createElement(ui_src/* Notification */.P_, {
1349
+ }, viewportDialogState.viewportId === viewportId && /*#__PURE__*/react.createElement(ui_src/* Notification */.P_, {
1335
1350
  id: "viewport-notification",
1336
1351
  message: viewportDialogState.message,
1337
1352
  type: viewportDialogState.type,
@@ -1340,41 +1355,46 @@ const OHIFCornerstoneViewport = /*#__PURE__*/react.memo(props => {
1340
1355
  onOutsideClick: viewportDialogState.onOutsideClick
1341
1356
  })));
1342
1357
  }, areEqual);
1343
- function _subscribeToJumpToMeasurementEvents(measurementService, displaySetService, elementRef, viewportIndex, displaySets, viewportGridService, cornerstoneViewportService) {
1344
- const displaysUIDs = displaySets.map(displaySet => displaySet.displaySetInstanceUID);
1358
+ function _subscribeToJumpToMeasurementEvents(measurementService, displaySetService, elementRef, viewportId, displaySets, viewportGridService, cornerstoneViewportService) {
1345
1359
  const {
1346
1360
  unsubscribe
1347
1361
  } = measurementService.subscribe(src.MeasurementService.EVENTS.JUMP_TO_MEASUREMENT_VIEWPORT, props => {
1348
1362
  cacheJumpToMeasurementEvent = props;
1349
1363
  const {
1350
- viewportIndex: jumpIndex,
1364
+ viewportId: jumpId,
1351
1365
  measurement,
1352
1366
  isConsumed
1353
1367
  } = props;
1354
- if (!measurement || isConsumed) return;
1368
+ if (!measurement || isConsumed) {
1369
+ return;
1370
+ }
1355
1371
  if (cacheJumpToMeasurementEvent.cornerstoneViewport === undefined) {
1356
1372
  // Decide on which viewport should handle this
1357
- cacheJumpToMeasurementEvent.cornerstoneViewport = cornerstoneViewportService.getViewportIndexToJump(jumpIndex, measurement.displaySetInstanceUID, {
1373
+ cacheJumpToMeasurementEvent.cornerstoneViewport = cornerstoneViewportService.getViewportIdToJump(jumpId, measurement.displaySetInstanceUID, {
1358
1374
  referencedImageId: measurement.referencedImageId
1359
1375
  });
1360
1376
  }
1361
- if (cacheJumpToMeasurementEvent.cornerstoneViewport !== viewportIndex) {
1377
+ if (cacheJumpToMeasurementEvent.cornerstoneViewport !== viewportId) {
1362
1378
  return;
1363
1379
  }
1364
- _jumpToMeasurement(measurement, elementRef, viewportIndex, measurementService, displaySetService, viewportGridService, cornerstoneViewportService);
1380
+ _jumpToMeasurement(measurement, elementRef, viewportId, measurementService, displaySetService, viewportGridService, cornerstoneViewportService);
1365
1381
  });
1366
1382
  return unsubscribe;
1367
1383
  }
1368
1384
 
1369
1385
  // Check if there is a queued jumpToMeasurement event
1370
- function _checkForCachedJumpToMeasurementEvents(measurementService, displaySetService, elementRef, viewportIndex, displaySets, viewportGridService, cornerstoneViewportService) {
1371
- if (!cacheJumpToMeasurementEvent) return;
1386
+ function _checkForCachedJumpToMeasurementEvents(measurementService, displaySetService, elementRef, viewportId, displaySets, viewportGridService, cornerstoneViewportService) {
1387
+ if (!cacheJumpToMeasurementEvent) {
1388
+ return;
1389
+ }
1372
1390
  if (cacheJumpToMeasurementEvent.isConsumed) {
1373
1391
  cacheJumpToMeasurementEvent = null;
1374
1392
  return;
1375
1393
  }
1376
1394
  const displaysUIDs = displaySets.map(displaySet => displaySet.displaySetInstanceUID);
1377
- if (!displaysUIDs?.length) return;
1395
+ if (!displaysUIDs?.length) {
1396
+ return;
1397
+ }
1378
1398
 
1379
1399
  // Jump to measurement if the measurement exists
1380
1400
  const {
@@ -1382,11 +1402,11 @@ function _checkForCachedJumpToMeasurementEvents(measurementService, displaySetSe
1382
1402
  } = cacheJumpToMeasurementEvent;
1383
1403
  if (measurement && elementRef) {
1384
1404
  if (displaysUIDs.includes(measurement?.displaySetInstanceUID)) {
1385
- _jumpToMeasurement(measurement, elementRef, viewportIndex, measurementService, displaySetService, viewportGridService, cornerstoneViewportService);
1405
+ _jumpToMeasurement(measurement, elementRef, viewportId, measurementService, displaySetService, viewportGridService, cornerstoneViewportService);
1386
1406
  }
1387
1407
  }
1388
1408
  }
1389
- function _jumpToMeasurement(measurement, targetElementRef, viewportIndex, measurementService, displaySetService, viewportGridService, cornerstoneViewportService) {
1409
+ function _jumpToMeasurement(measurement, targetElementRef, viewportId, measurementService, displaySetService, viewportGridService, cornerstoneViewportService) {
1390
1410
  const targetElement = targetElementRef.current;
1391
1411
  const {
1392
1412
  displaySetInstanceUID,
@@ -1403,9 +1423,8 @@ function _jumpToMeasurement(measurement, targetElementRef, viewportIndex, measur
1403
1423
  // to set it properly
1404
1424
  // setCornerstoneMeasurementActive(measurement);
1405
1425
 
1406
- viewportGridService.setActiveViewportIndex(viewportIndex);
1426
+ viewportGridService.setActiveViewportId(viewportId);
1407
1427
  const enabledElement = (0,dist_esm.getEnabledElement)(targetElement);
1408
- const viewportInfo = cornerstoneViewportService.getViewportInfoByIndex(viewportIndex);
1409
1428
  if (enabledElement) {
1410
1429
  // See how the jumpToSlice() of Cornerstone3D deals with imageIdx param.
1411
1430
  const viewport = enabledElement.viewport;
@@ -1451,14 +1470,17 @@ function _jumpToMeasurement(measurement, targetElementRef, viewportIndex, measur
1451
1470
 
1452
1471
  // Component displayName
1453
1472
  OHIFCornerstoneViewport.displayName = 'OHIFCornerstoneViewport';
1473
+ OHIFCornerstoneViewport.defaultProps = {
1474
+ isJumpToMeasurementDisabled: false
1475
+ };
1454
1476
  OHIFCornerstoneViewport.propTypes = {
1455
- viewportIndex: (prop_types_default()).number.isRequired,
1456
1477
  displaySets: (prop_types_default()).array.isRequired,
1457
1478
  dataSource: (prop_types_default()).object.isRequired,
1458
1479
  viewportOptions: (prop_types_default()).object,
1459
1480
  displaySetOptions: prop_types_default().arrayOf((prop_types_default()).any),
1460
1481
  servicesManager: (prop_types_default()).object.isRequired,
1461
1482
  onElementEnabled: (prop_types_default()).func,
1483
+ isJumpToMeasurementDisabled: (prop_types_default()).bool,
1462
1484
  // Note: you SHOULD NOT use the initialImageIdOrIndex for manipulation
1463
1485
  // of the imageData in the OHIFCornerstoneViewport. This prop is used
1464
1486
  // to set the initial state of the viewport's first image to render