@ohif/app 3.7.0-beta.62 → 3.7.0-beta.63

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 (36) hide show
  1. package/dist/{12.bundle.80f93cf58aa62145ca65.js → 12.bundle.c80ff2e8651297d7aec8.js} +2 -2
  2. package/dist/{125.bundle.1ae4c6313c31cd0502cc.js → 125.bundle.aeaad798561853bf6939.js} +2 -2
  3. package/dist/{128.bundle.e9cd21f29f78e27c11c9.js → 128.bundle.8d7db97e0d90ba8be751.js} +3 -3
  4. package/dist/{150.bundle.a9e3e6a75a8374f87913.js → 150.bundle.0ed8ccb7f15a603151b6.js} +17 -11
  5. package/dist/{181.bundle.70c4340cbe29bd14aafc.js → 181.bundle.1accc89eac7f1b4bc752.js} +96 -92
  6. package/dist/{236.bundle.a99d4eca55b331878a02.js → 236.bundle.308648f0e447eaaeda67.js} +37 -62
  7. package/dist/{250.bundle.0d497b1b8afb0cbbe02f.js → 250.bundle.1543b1b8466d43f3465d.js} +17 -13
  8. package/dist/{281.bundle.1e8645e250e4cd6ba6ca.js → 281.bundle.015cf8cb9625c7fb3dd5.js} +2 -2
  9. package/dist/{30.bundle.427ef5434fd52819af9f.js → 30.bundle.4d8b67d4ed86238948ca.js} +64 -62
  10. package/dist/{348.bundle.f35989e2daa0e3ab2e96.js → 348.bundle.81366dddd24e78113662.js} +3 -3
  11. package/dist/{359.bundle.cf89aee1673022259ad4.js → 359.bundle.1c14405c9d974bb5a30f.js} +3 -3
  12. package/dist/{362.bundle.2a151f9133ec69afe62f.js → 362.bundle.11a6a0792b8042b5c81b.js} +127 -123
  13. package/dist/{410.bundle.02c8a49bdca46910e344.js → 410.bundle.c0ed86f4d3cbc0939903.js} +3 -3
  14. package/dist/{451.bundle.a573877dff7b43382138.js → 451.bundle.b3d9a67d4b2a962be96b.js} +26 -26
  15. package/dist/{471.bundle.e9ecd59867a19e323234.js → 471.bundle.87b1c57d4c04ae35cb88.js} +26 -26
  16. package/dist/{506.bundle.530f88c83a16373f284b.js → 506.bundle.a9e9ceb9fc71cdf45d91.js} +14 -7
  17. package/dist/{663.bundle.458432a201e239a1a576.js → 663.bundle.05e8cc381eadc38f9755.js} +4 -4
  18. package/dist/{678.bundle.ba62e1ffbd6eb423e1cc.js → 678.bundle.784d7fb157d76611068d.js} +190 -246
  19. package/dist/{686.bundle.70565410179f1e7d22e6.js → 686.bundle.b3dbf84eefbef768843f.js} +2 -2
  20. package/dist/{378.bundle.e40da18053d1dff916df.js → 687.bundle.3de11e7a373ee3588813.js} +210 -3
  21. package/dist/{782.bundle.93b1a0f86a4deb12426e.js → 782.bundle.082672a46147b8402d4a.js} +58 -39
  22. package/dist/{814.bundle.982d5c1771891684f23a.js → 814.bundle.35355762730e3b4ee89f.js} +2 -2
  23. package/dist/{822.bundle.99bf759483aa32086346.js → 822.bundle.00dacc09a7d028fca29b.js} +21 -23
  24. package/dist/{886.bundle.c5a6b96760ea43352375.js → 886.bundle.d0915318107cf24e8beb.js} +19 -20
  25. package/dist/app.bundle.css +1 -1
  26. package/dist/{app.bundle.6aab67e2d86a83eb6712.js → app.bundle.eeda76c463f838f592c1.js} +592 -599
  27. package/dist/assets/yandex-browser-manifest.json +1 -1
  28. package/dist/es6-shim.min.js +3569 -2
  29. package/dist/google.js +1 -2
  30. package/dist/index.html +1 -1
  31. package/dist/init-service-worker.js +3 -5
  32. package/dist/oidc-client.min.js +10857 -39
  33. package/dist/polyfill.min.js +184 -1
  34. package/dist/silent-refresh.html +18 -9
  35. package/dist/sw.js +1 -1
  36. package/package.json +18 -18
@@ -23,10 +23,10 @@ var prop_types_default = /*#__PURE__*/__webpack_require__.n(prop_types);
23
23
  var esm = __webpack_require__(26925);
24
24
  // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/index.js + 337 modules
25
25
  var dist_esm = __webpack_require__(45754);
26
- // EXTERNAL MODULE: ../../core/src/index.ts + 106 modules
27
- var src = __webpack_require__(38930);
26
+ // EXTERNAL MODULE: ../../core/src/index.ts + 107 modules
27
+ var src = __webpack_require__(3854);
28
28
  // EXTERNAL MODULE: ../../ui/src/index.js + 458 modules
29
- var ui_src = __webpack_require__(33570);
29
+ var ui_src = __webpack_require__(88344);
30
30
  // EXTERNAL MODULE: ../../../extensions/cornerstone/src/state.ts
31
31
  var state = __webpack_require__(73704);
32
32
  ;// CONCATENATED MODULE: ../../../extensions/cornerstone/src/Viewport/OHIFCornerstoneViewport.css
@@ -41,7 +41,7 @@ var state = __webpack_require__(73704);
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,
@@ -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,7 +628,7 @@ 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
@@ -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,7 +956,7 @@ 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);
@@ -971,7 +969,7 @@ var getSOPInstanceAttributes = __webpack_require__(87172);
971
969
  function WrappedCinePlayer(_ref) {
972
970
  let {
973
971
  enabledVPElement,
974
- viewportIndex,
972
+ viewportId,
975
973
  servicesManager
976
974
  } = _ref;
977
975
  const {
@@ -983,7 +981,7 @@ function WrappedCinePlayer(_ref) {
983
981
  cines
984
982
  }, cineService] = (0,ui_src/* useCine */.vQ)();
985
983
  const [{
986
- activeViewportIndex
984
+ activeViewportId
987
985
  }] = (0,ui_src/* useViewportGrid */.O_)();
988
986
  const {
989
987
  component: CinePlayerComponent = ui_src/* CinePlayer */.H6
@@ -1001,10 +999,10 @@ function WrappedCinePlayer(_ref) {
1001
999
  });
1002
1000
  };
1003
1001
  const cineHandler = () => {
1004
- if (!cines || !cines[viewportIndex] || !enabledVPElement) {
1002
+ if (!cines || !cines[viewportId] || !enabledVPElement) {
1005
1003
  return;
1006
1004
  }
1007
- const cine = cines[viewportIndex];
1005
+ const cine = cines[viewportId];
1008
1006
  const isPlaying = cine.isPlaying || false;
1009
1007
  const frameRate = cine.frameRate || 24;
1010
1008
  const validFrameRate = Math.max(frameRate, 1);
@@ -1020,35 +1018,35 @@ function WrappedCinePlayer(_ref) {
1020
1018
  dist_esm.eventTarget.addEventListener(dist_esm.Enums.Events.STACK_VIEWPORT_NEW_STACK, cineHandler);
1021
1019
  return () => {
1022
1020
  cineService.setCine({
1023
- id: viewportIndex,
1021
+ id: viewportId,
1024
1022
  isPlaying: false
1025
1023
  });
1026
1024
  dist_esm.eventTarget.removeEventListener(dist_esm.Enums.Events.STACK_VIEWPORT_NEW_STACK, cineHandler);
1027
1025
  };
1028
1026
  }, [enabledVPElement]);
1029
1027
  (0,react.useEffect)(() => {
1030
- if (!cines || !cines[viewportIndex] || !enabledVPElement) {
1028
+ if (!cines || !cines[viewportId] || !enabledVPElement) {
1031
1029
  return;
1032
1030
  }
1033
1031
  cineHandler();
1034
1032
  return () => {
1035
- if (enabledVPElement && cines?.[viewportIndex]?.isPlaying) {
1033
+ if (enabledVPElement && cines?.[viewportId]?.isPlaying) {
1036
1034
  cineService.stopClip(enabledVPElement);
1037
1035
  }
1038
1036
  };
1039
- }, [cines, viewportIndex, cineService, enabledVPElement, cineHandler]);
1040
- const cine = cines[viewportIndex];
1037
+ }, [cines, viewportId, cineService, enabledVPElement, cineHandler]);
1038
+ const cine = cines[viewportId];
1041
1039
  const isPlaying = cine && cine.isPlaying || false;
1042
1040
  return isCineEnabled && /*#__PURE__*/react.createElement(CinePlayerComponent, {
1043
- className: "absolute left-1/2 -translate-x-1/2 bottom-3",
1041
+ className: "absolute left-1/2 bottom-3 -translate-x-1/2",
1044
1042
  isPlaying: isPlaying,
1045
1043
  onClose: handleCineClose,
1046
1044
  onPlayPauseChange: isPlaying => cineService.setCine({
1047
- id: activeViewportIndex,
1045
+ id: activeViewportId,
1048
1046
  isPlaying
1049
1047
  }),
1050
1048
  onFrameRateChange: frameRate => cineService.setCine({
1051
- id: activeViewportIndex,
1049
+ id: activeViewportId,
1052
1050
  frameRate
1053
1051
  })
1054
1052
  });
@@ -1093,6 +1091,9 @@ function areEqual(prevProps, nextProps) {
1093
1091
  if (prevProps.viewportOptions.viewportType !== nextProps.viewportOptions.viewportType) {
1094
1092
  return false;
1095
1093
  }
1094
+ if (nextProps.viewportOptions.needsRerendering) {
1095
+ return false;
1096
+ }
1096
1097
  const prevDisplaySets = prevProps.displaySets;
1097
1098
  const nextDisplaySets = nextProps.displaySets;
1098
1099
  if (prevDisplaySets.length !== nextDisplaySets.length) {
@@ -1126,7 +1127,6 @@ function areEqual(prevProps, nextProps) {
1126
1127
  // Then we don't need to worry about the re-renders if the props change.
1127
1128
  const OHIFCornerstoneViewport = /*#__PURE__*/react.memo(props => {
1128
1129
  const {
1129
- viewportIndex,
1130
1130
  displaySets,
1131
1131
  dataSource,
1132
1132
  viewportOptions,
@@ -1141,6 +1141,7 @@ const OHIFCornerstoneViewport = /*#__PURE__*/react.memo(props => {
1141
1141
  // to set the initial state of the viewport's first image to render
1142
1142
  initialImageIndex
1143
1143
  } = props;
1144
+ const viewportId = viewportOptions.viewportId;
1144
1145
  const [scrollbarHeight, setScrollbarHeight] = (0,react.useState)('100px');
1145
1146
  const [enabledVPElement, setEnabledVPElement] = (0,react.useState)(null);
1146
1147
  const elementRef = (0,react.useRef)();
@@ -1169,17 +1170,12 @@ const OHIFCornerstoneViewport = /*#__PURE__*/react.memo(props => {
1169
1170
  setImageScrollBarHeight();
1170
1171
  }
1171
1172
  }, [elementRef]);
1172
- const cleanUpServices = (0,react.useCallback)(() => {
1173
- const viewportInfo = cornerstoneViewportService.getViewportInfoByIndex(viewportIndex);
1174
- if (!viewportInfo) {
1175
- return;
1176
- }
1177
- const viewportId = viewportInfo.getViewportId();
1173
+ const cleanUpServices = (0,react.useCallback)(viewportInfo => {
1178
1174
  const renderingEngineId = viewportInfo.getRenderingEngineId();
1179
1175
  const syncGroups = viewportInfo.getSyncGroups();
1180
1176
  toolGroupService.removeViewportFromToolGroup(viewportId, renderingEngineId);
1181
1177
  syncGroupService.removeViewportFromSyncGroup(viewportId, renderingEngineId, syncGroups);
1182
- }, [viewportIndex, viewportOptions.viewportId]);
1178
+ }, [viewportId]);
1183
1179
  const elementEnabledHandler = (0,react.useCallback)(evt => {
1184
1180
  // check this is this element reference and return early if doesn't match
1185
1181
  if (evt.detail.element !== elementRef.current) {
@@ -1190,8 +1186,7 @@ const OHIFCornerstoneViewport = /*#__PURE__*/react.memo(props => {
1190
1186
  element
1191
1187
  } = evt.detail;
1192
1188
  const viewportInfo = cornerstoneViewportService.getViewportInfo(viewportId);
1193
- const viewportIndex = viewportInfo.getViewportIndex();
1194
- (0,state/* setEnabledElement */.Yc)(viewportIndex, element);
1189
+ (0,state/* setEnabledElement */.Yc)(viewportId, element);
1195
1190
  setEnabledVPElement(element);
1196
1191
  const renderingEngineId = viewportInfo.getRenderingEngineId();
1197
1192
  const toolGroupId = viewportInfo.getToolGroupId();
@@ -1201,20 +1196,22 @@ const OHIFCornerstoneViewport = /*#__PURE__*/react.memo(props => {
1201
1196
  if (onElementEnabled) {
1202
1197
  onElementEnabled(evt);
1203
1198
  }
1204
- }, [viewportIndex, onElementEnabled, toolGroupService]);
1199
+ }, [viewportId, onElementEnabled, toolGroupService]);
1205
1200
 
1206
1201
  // disable the element upon unmounting
1207
1202
  (0,react.useEffect)(() => {
1208
- cornerstoneViewportService.enableViewport(viewportIndex, viewportOptions, elementRef.current);
1203
+ cornerstoneViewportService.enableViewport(viewportId, elementRef.current);
1209
1204
  dist_esm.eventTarget.addEventListener(dist_esm.Enums.Events.ELEMENT_ENABLED, elementEnabledHandler);
1210
1205
  setImageScrollBarHeight();
1211
1206
  return () => {
1212
- commandsManager.runCommand('storePresentation', {
1213
- viewportIndex
1207
+ const viewportInfo = cornerstoneViewportService.getViewportInfo(viewportId);
1208
+ if (!viewportInfo) {
1209
+ return;
1210
+ }
1211
+ cleanUpServices(viewportInfo);
1212
+ cornerstoneViewportService.storePresentation({
1213
+ viewportId
1214
1214
  });
1215
- cleanUpServices();
1216
- const viewportInfo = cornerstoneViewportService.getViewportInfoByIndex(viewportIndex);
1217
- cornerstoneViewportService.disableElement(viewportIndex);
1218
1215
  if (onElementDisabled) {
1219
1216
  onElementDisabled(viewportInfo);
1220
1217
  }
@@ -1241,18 +1238,18 @@ const OHIFCornerstoneViewport = /*#__PURE__*/react.memo(props => {
1241
1238
  if (!invalidateData) {
1242
1239
  return;
1243
1240
  }
1244
- const viewportInfo = cornerstoneViewportService.getViewportInfoByIndex(viewportIndex);
1241
+ const viewportInfo = cornerstoneViewportService.getViewportInfo(viewportId);
1245
1242
  if (viewportInfo.hasDisplaySet(invalidatedDisplaySetInstanceUID)) {
1246
1243
  const viewportData = viewportInfo.getViewportData();
1247
1244
  const newViewportData = await cornerstoneCacheService.invalidateViewportData(viewportData, invalidatedDisplaySetInstanceUID, dataSource, displaySetService);
1248
1245
  const keepCamera = true;
1249
- cornerstoneViewportService.updateViewport(viewportIndex, newViewportData, keepCamera);
1246
+ cornerstoneViewportService.updateViewport(viewportId, newViewportData, keepCamera);
1250
1247
  }
1251
1248
  });
1252
1249
  return () => {
1253
1250
  unsubscribe();
1254
1251
  };
1255
- }, [viewportIndex]);
1252
+ }, [viewportId]);
1256
1253
  (0,react.useEffect)(() => {
1257
1254
  // handle the default viewportType to be stack
1258
1255
  if (!viewportOptions.viewportType) {
@@ -1276,13 +1273,23 @@ const OHIFCornerstoneViewport = /*#__PURE__*/react.memo(props => {
1276
1273
  lutPresentation: lutPresentationStore[presentationIds?.lutPresentationId]
1277
1274
  };
1278
1275
  let measurement;
1279
- if (cacheJumpToMeasurementEvent?.viewportIndex === viewportIndex) {
1276
+ if (cacheJumpToMeasurementEvent?.viewportId === viewportId) {
1280
1277
  measurement = cacheJumpToMeasurementEvent.measurement;
1281
1278
  // Delete the position presentation so that viewport navigates direct
1282
1279
  presentations.positionPresentation = null;
1283
1280
  cacheJumpToMeasurementEvent = null;
1284
1281
  }
1285
- 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);
1286
1293
  if (measurement) {
1287
1294
  esm.annotation.selection.setAnnotationSelected(measurement.uid);
1288
1295
  }
@@ -1304,12 +1311,12 @@ const OHIFCornerstoneViewport = /*#__PURE__*/react.memo(props => {
1304
1311
  if (isJumpToMeasurementDisabled) {
1305
1312
  return;
1306
1313
  }
1307
- const unsubscribeFromJumpToMeasurementEvents = _subscribeToJumpToMeasurementEvents(measurementService, displaySetService, elementRef, viewportIndex, displaySets, viewportGridService, cornerstoneViewportService);
1308
- _checkForCachedJumpToMeasurementEvents(measurementService, displaySetService, elementRef, viewportIndex, displaySets, viewportGridService, cornerstoneViewportService);
1314
+ const unsubscribeFromJumpToMeasurementEvents = _subscribeToJumpToMeasurementEvents(measurementService, displaySetService, elementRef, viewportId, displaySets, viewportGridService, cornerstoneViewportService);
1315
+ _checkForCachedJumpToMeasurementEvents(measurementService, displaySetService, elementRef, viewportId, displaySets, viewportGridService, cornerstoneViewportService);
1309
1316
  return () => {
1310
1317
  unsubscribeFromJumpToMeasurementEvents();
1311
1318
  };
1312
- }, [displaySets, elementRef, viewportIndex]);
1319
+ }, [displaySets, elementRef, viewportId]);
1313
1320
  return /*#__PURE__*/react.createElement(react.Fragment, null, /*#__PURE__*/react.createElement("div", {
1314
1321
  className: "viewport-wrapper"
1315
1322
  }, /*#__PURE__*/react.createElement(index_esm/* default */.ZP, {
@@ -1328,18 +1335,18 @@ const OHIFCornerstoneViewport = /*#__PURE__*/react.memo(props => {
1328
1335
  onMouseDown: e => e.preventDefault(),
1329
1336
  ref: elementRef
1330
1337
  }), /*#__PURE__*/react.createElement(Overlays_CornerstoneOverlays, {
1331
- viewportIndex: viewportIndex,
1338
+ viewportId: viewportId,
1332
1339
  toolBarService: toolbarService,
1333
1340
  element: elementRef.current,
1334
1341
  scrollbarHeight: scrollbarHeight,
1335
1342
  servicesManager: servicesManager
1336
1343
  }), /*#__PURE__*/react.createElement(components_CinePlayer, {
1337
1344
  enabledVPElement: enabledVPElement,
1338
- viewportIndex: viewportIndex,
1345
+ viewportId: viewportId,
1339
1346
  servicesManager: servicesManager
1340
1347
  })), /*#__PURE__*/react.createElement("div", {
1341
1348
  className: "absolute w-full"
1342
- }, viewportDialogState.viewportIndex === viewportIndex && /*#__PURE__*/react.createElement(ui_src/* Notification */.P_, {
1349
+ }, viewportDialogState.viewportId === viewportId && /*#__PURE__*/react.createElement(ui_src/* Notification */.P_, {
1343
1350
  id: "viewport-notification",
1344
1351
  message: viewportDialogState.message,
1345
1352
  type: viewportDialogState.type,
@@ -1348,14 +1355,13 @@ const OHIFCornerstoneViewport = /*#__PURE__*/react.memo(props => {
1348
1355
  onOutsideClick: viewportDialogState.onOutsideClick
1349
1356
  })));
1350
1357
  }, areEqual);
1351
- function _subscribeToJumpToMeasurementEvents(measurementService, displaySetService, elementRef, viewportIndex, displaySets, viewportGridService, cornerstoneViewportService) {
1352
- const displaysUIDs = displaySets.map(displaySet => displaySet.displaySetInstanceUID);
1358
+ function _subscribeToJumpToMeasurementEvents(measurementService, displaySetService, elementRef, viewportId, displaySets, viewportGridService, cornerstoneViewportService) {
1353
1359
  const {
1354
1360
  unsubscribe
1355
1361
  } = measurementService.subscribe(src.MeasurementService.EVENTS.JUMP_TO_MEASUREMENT_VIEWPORT, props => {
1356
1362
  cacheJumpToMeasurementEvent = props;
1357
1363
  const {
1358
- viewportIndex: jumpIndex,
1364
+ viewportId: jumpId,
1359
1365
  measurement,
1360
1366
  isConsumed
1361
1367
  } = props;
@@ -1364,20 +1370,20 @@ function _subscribeToJumpToMeasurementEvents(measurementService, displaySetServi
1364
1370
  }
1365
1371
  if (cacheJumpToMeasurementEvent.cornerstoneViewport === undefined) {
1366
1372
  // Decide on which viewport should handle this
1367
- cacheJumpToMeasurementEvent.cornerstoneViewport = cornerstoneViewportService.getViewportIndexToJump(jumpIndex, measurement.displaySetInstanceUID, {
1373
+ cacheJumpToMeasurementEvent.cornerstoneViewport = cornerstoneViewportService.getViewportIdToJump(jumpId, measurement.displaySetInstanceUID, {
1368
1374
  referencedImageId: measurement.referencedImageId
1369
1375
  });
1370
1376
  }
1371
- if (cacheJumpToMeasurementEvent.cornerstoneViewport !== viewportIndex) {
1377
+ if (cacheJumpToMeasurementEvent.cornerstoneViewport !== viewportId) {
1372
1378
  return;
1373
1379
  }
1374
- _jumpToMeasurement(measurement, elementRef, viewportIndex, measurementService, displaySetService, viewportGridService, cornerstoneViewportService);
1380
+ _jumpToMeasurement(measurement, elementRef, viewportId, measurementService, displaySetService, viewportGridService, cornerstoneViewportService);
1375
1381
  });
1376
1382
  return unsubscribe;
1377
1383
  }
1378
1384
 
1379
1385
  // Check if there is a queued jumpToMeasurement event
1380
- function _checkForCachedJumpToMeasurementEvents(measurementService, displaySetService, elementRef, viewportIndex, displaySets, viewportGridService, cornerstoneViewportService) {
1386
+ function _checkForCachedJumpToMeasurementEvents(measurementService, displaySetService, elementRef, viewportId, displaySets, viewportGridService, cornerstoneViewportService) {
1381
1387
  if (!cacheJumpToMeasurementEvent) {
1382
1388
  return;
1383
1389
  }
@@ -1396,11 +1402,11 @@ function _checkForCachedJumpToMeasurementEvents(measurementService, displaySetSe
1396
1402
  } = cacheJumpToMeasurementEvent;
1397
1403
  if (measurement && elementRef) {
1398
1404
  if (displaysUIDs.includes(measurement?.displaySetInstanceUID)) {
1399
- _jumpToMeasurement(measurement, elementRef, viewportIndex, measurementService, displaySetService, viewportGridService, cornerstoneViewportService);
1405
+ _jumpToMeasurement(measurement, elementRef, viewportId, measurementService, displaySetService, viewportGridService, cornerstoneViewportService);
1400
1406
  }
1401
1407
  }
1402
1408
  }
1403
- function _jumpToMeasurement(measurement, targetElementRef, viewportIndex, measurementService, displaySetService, viewportGridService, cornerstoneViewportService) {
1409
+ function _jumpToMeasurement(measurement, targetElementRef, viewportId, measurementService, displaySetService, viewportGridService, cornerstoneViewportService) {
1404
1410
  const targetElement = targetElementRef.current;
1405
1411
  const {
1406
1412
  displaySetInstanceUID,
@@ -1417,9 +1423,8 @@ function _jumpToMeasurement(measurement, targetElementRef, viewportIndex, measur
1417
1423
  // to set it properly
1418
1424
  // setCornerstoneMeasurementActive(measurement);
1419
1425
 
1420
- viewportGridService.setActiveViewportIndex(viewportIndex);
1426
+ viewportGridService.setActiveViewportId(viewportId);
1421
1427
  const enabledElement = (0,dist_esm.getEnabledElement)(targetElement);
1422
- const viewportInfo = cornerstoneViewportService.getViewportInfoByIndex(viewportIndex);
1423
1428
  if (enabledElement) {
1424
1429
  // See how the jumpToSlice() of Cornerstone3D deals with imageIdx param.
1425
1430
  const viewport = enabledElement.viewport;
@@ -1469,7 +1474,6 @@ OHIFCornerstoneViewport.defaultProps = {
1469
1474
  isJumpToMeasurementDisabled: false
1470
1475
  };
1471
1476
  OHIFCornerstoneViewport.propTypes = {
1472
- viewportIndex: (prop_types_default()).number.isRequired,
1473
1477
  displaySets: (prop_types_default()).array.isRequired,
1474
1478
  dataSource: (prop_types_default()).object.isRequired,
1475
1479
  viewportOptions: (prop_types_default()).object,