@ohif/app 3.9.1 → 3.9.3

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 (51) hide show
  1. package/dist/{1185.bundle.023fe7179faaa50019d3.js → 1185.bundle.9f4c770baf52abcf3c6d.js} +120 -53
  2. package/dist/{1266.bundle.e9abd5c45b5236544151.js → 1266.bundle.0097d9c4ba974905a833.js} +8 -3
  3. package/dist/{1374.bundle.019bbc010eeb66109e8b.js → 1374.bundle.2e1fa65e28731d98969a.js} +2 -2
  4. package/dist/{1436.bundle.773756cd51b69e887bac.js → 1436.bundle.be39664239aa2bbca527.js} +234 -274
  5. package/dist/{1927.bundle.49539e3ab5b0aad1399c.js → 1927.bundle.2b2fa0b539d6ac5b0dc3.js} +1 -1
  6. package/dist/{213.bundle.e663335fb0884edde6d8.js → 213.bundle.c0c23f7fd4b66d78d0fe.js} +2 -2
  7. package/dist/{5807.bundle.dac5ce36534a71c77723.js → 2343.bundle.f096450c21417279d4cc.js} +270 -1
  8. package/dist/{2424.bundle.b7da298db43541d3a7c0.js → 2424.bundle.d73e8d67dc2aace299d2.js} +2 -2
  9. package/dist/{2701.bundle.8c1ff2e0faaa7d2f4716.js → 2701.bundle.c8271fa4986a45fea350.js} +17 -24
  10. package/dist/{2825.bundle.b04c941a87fd580deb6d.js → 2825.bundle.0612b1b8ab3e8ee01b93.js} +1 -1
  11. package/dist/{3198.bundle.c82b7424070ffd02faf1.js → 3198.bundle.7a18515cfe4113417251.js} +10 -6
  12. package/dist/{3200.bundle.a12825fb5aec200d33e2.js → 3200.bundle.e46dca03aa824998973a.js} +18 -10
  13. package/dist/3326.bundle.d01046d6c2c31654c125.js +265 -0
  14. package/dist/{149.bundle.ce5596fc563276036744.js → 3900.bundle.0e4e29374e221b260ed1.js} +35 -59
  15. package/dist/{8295.bundle.4ecb27f9e58526f12bcb.js → 3902.bundle.8ae7b2e27f760af997dd.js} +20 -1
  16. package/dist/3902.css +2 -0
  17. package/dist/{4202.bundle.5c8120ed4841da0af211.js → 4202.bundle.497702023d73202f4f39.js} +2 -1
  18. package/dist/{3121.bundle.d3e7092e305cf6cecdb5.js → 4438.bundle.a945f803d0eeb11d081f.js} +24 -4
  19. package/dist/{4571.bundle.3b1691730b3c57bf4d35.js → 4571.bundle.a37be49663df2f4a2c8a.js} +99 -89
  20. package/dist/4759.bundle.1e982897292fc19ecd7c.js +265 -0
  21. package/dist/{4834.bundle.aad44c2628cdefb7a4dd.js → 4834.bundle.92ba088cc62a6b791000.js} +2 -2
  22. package/dist/{5139.bundle.367a6827071448e2923d.js → 5139.bundle.70d3be7dd1896f245d7b.js} +3 -3
  23. package/dist/{5247.bundle.6dc2a50f21821b2ffdf5.js → 5247.bundle.4e8669e41fd28813e643.js} +5 -5
  24. package/dist/{5252.bundle.5ec502c53a9cc877ed8d.js → 5252.bundle.f2675336275573a288d5.js} +13 -1
  25. package/dist/{1520.bundle.97dbd9bfa83148e5334d.js → 5630.bundle.44d0ca81d77b7ae5193b.js} +63 -58
  26. package/dist/{5687.bundle.5731ec23dd9eb43a083e.js → 5687.bundle.50b800a714486557b243.js} +5 -5
  27. package/dist/{5717.bundle.848e13f256818475f57f.js → 5717.bundle.9218cb67ad1994cd1a99.js} +305 -64
  28. package/dist/{3970.bundle.31942cc0c12a008e7ba0.js → 5758.bundle.cd1599b81bdb1f735f9d.js} +270 -1
  29. package/dist/{717.bundle.0f32b7b57347b5141248.js → 7013.bundle.979d3a29f6142e8c1290.js} +264 -4
  30. package/dist/7013.css +4 -0
  31. package/dist/{7197.bundle.c28453cdb392072d8bf8.js → 7197.bundle.30f8969751309ab5235c.js} +6 -6
  32. package/dist/{7955.bundle.6a255705b1ef5906f4a8.js → 7955.bundle.9264a10437f0a67e6057.js} +3 -3
  33. package/dist/{8008.bundle.5bf7b274246be10e2f05.js → 8008.bundle.6772a210a995b568f8d0.js} +2 -2
  34. package/dist/{8228.bundle.55ac03d7165248f47d4e.js → 8228.bundle.2c1e61eec1f9f4b3b613.js} +8 -26
  35. package/dist/{8259.bundle.623c29b26b170a8a085b.js → 8259.bundle.9cf9ef151893ede068bb.js} +2 -2
  36. package/dist/{8523.bundle.648334132159465cdc41.js → 8523.bundle.c0ec85de98ba380ebeb4.js} +55 -13
  37. package/dist/{8558.bundle.01d05fd73da5db8e60f9.js → 8558.bundle.9c22f000a404f1006a41.js} +10 -5
  38. package/dist/{9551.bundle.6c260a9869e14dcc3543.js → 9551.bundle.3507bb1d4353df13bf3a.js} +3 -3
  39. package/dist/{9611.bundle.767595c93877e5166c03.js → 9611.bundle.9f1aa9041196d77f2b7e.js} +2 -2
  40. package/dist/{app.bundle.d02143bec2df7fec9964.js → app.bundle.9af5a6d7ff3a778d05b7.js} +278 -150
  41. package/dist/app.bundle.css +2 -2
  42. package/dist/index.html +1 -1
  43. package/dist/{polySeg.bundle.b79ae514989e86301c71.js → polySeg.bundle.6e85073e3abf2e6e6078.js} +1 -1
  44. package/dist/serve.json +1 -10
  45. package/dist/{suv-peak-worker.bundle.31c3b3b957204af93b7e.js → suv-peak-worker.bundle.e2e8e46de3e958a1a3db.js} +3 -3
  46. package/dist/sw.js +1 -1
  47. package/package.json +19 -19
  48. /package/dist/{1801.css → 3326.css} +0 -0
  49. /package/dist/{717.css → 4438.css} +0 -0
  50. /package/dist/{2591.css → 4759.css} +0 -0
  51. /package/dist/{9862.bundle.7146682e56aa66130ae6.js → 9862.bundle.aa2f8e0010f1be1bc87d.js} +0 -0
@@ -82,26 +82,6 @@ function formatDICOMTime(time, strFormat = 'HH:mm:ss') {
82
82
  return moment_default()(time, 'HH:mm:ss').format(strFormat);
83
83
  }
84
84
 
85
- /**
86
- * Formats a patient name for display purposes
87
- *
88
- * @param {string} name
89
- * @returns {string} formatted name.
90
- */
91
- function formatPN(name) {
92
- if (!name) {
93
- return '';
94
- }
95
- if (typeof name === 'object') {
96
- name = name.Alphabetic;
97
- if (!name) {
98
- return '';
99
- }
100
- }
101
- const cleaned = name.split('^').filter(s => !!s).join(', ').trim();
102
- return cleaned === ',' || cleaned === '' ? '' : cleaned;
103
- }
104
-
105
85
  /**
106
86
  * Gets compression type
107
87
  *
@@ -122,6 +102,8 @@ function getCompression(imageId) {
122
102
  }
123
103
  return 'Lossless / Uncompressed';
124
104
  }
105
+ // EXTERNAL MODULE: ../../core/src/index.ts + 72 modules
106
+ var core_src = __webpack_require__(80818);
125
107
  ;// CONCATENATED MODULE: ../../../extensions/cornerstone/src/Viewport/Overlays/CustomizableViewportOverlay.css
126
108
  // extracted by mini-css-extract-plugin
127
109
 
@@ -133,7 +115,11 @@ function getCompression(imageId) {
133
115
 
134
116
 
135
117
 
118
+
136
119
  const EPSILON = 1e-4;
120
+ const {
121
+ formatPN
122
+ } = core_src/* utils */.Wp;
137
123
  const OverlayItemComponents = {
138
124
  'ohif.overlayItem': OverlayItem,
139
125
  'ohif.overlayItem.windowLevel': VOIOverlayItem,
@@ -337,7 +323,7 @@ function CustomizableViewportOverlay({
337
323
  servicesManager,
338
324
  customization: item,
339
325
  formatters: {
340
- formatPN: formatPN,
326
+ formatPN,
341
327
  formatDate: formatDICOMDate,
342
328
  formatTime: formatDICOMTime,
343
329
  formatNumberPrecision: formatNumberPrecision
@@ -747,7 +733,7 @@ const useViewportActionCornersContext = () => (0,react__WEBPACK_IMPORTED_MODULE_
747
733
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(86326);
748
734
  /* harmony import */ var lodash_debounce__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(62051);
749
735
  /* harmony import */ var lodash_debounce__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lodash_debounce__WEBPACK_IMPORTED_MODULE_1__);
750
- /* harmony import */ var _ohif_core_src_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(37415);
736
+ /* harmony import */ var _ohif_core_src_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(5971);
751
737
 
752
738
 
753
739
 
@@ -941,8 +927,8 @@ const Enums = {
941
927
  CORNERSTONE_3D_TOOLS_SOURCE_VERSION
942
928
  };
943
929
  /* harmony default export */ const enums = (Enums);
944
- // EXTERNAL MODULE: ../../core/src/index.ts + 71 modules
945
- var src = __webpack_require__(29463);
930
+ // EXTERNAL MODULE: ../../core/src/index.ts + 72 modules
931
+ var src = __webpack_require__(80818);
946
932
  // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/loaders/index.js
947
933
  var loaders = __webpack_require__(19742);
948
934
  // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/enums/RequestType.js
@@ -983,8 +969,8 @@ function initWADOImageLoader(userAuthenticationService, appConfig, extensionMana
983
969
  function destroy() {
984
970
  console.debug('Destroying WADO Image Loader');
985
971
  }
986
- // EXTERNAL MODULE: ../../../extensions/default/src/index.ts + 114 modules
987
- var default_src = __webpack_require__(71520);
972
+ // EXTERNAL MODULE: ../../../extensions/default/src/index.ts + 115 modules
973
+ var default_src = __webpack_require__(55630);
988
974
  // EXTERNAL MODULE: ../../../extensions/cornerstone/src/state.ts
989
975
  var state = __webpack_require__(71353);
990
976
  ;// CONCATENATED MODULE: ../../../extensions/cornerstone/src/utils/getActiveViewportEnabledElement.ts
@@ -1106,8 +1092,8 @@ function onCompletedCalibrationLine(servicesManager, csToolsEvent) {
1106
1092
  });
1107
1093
  });
1108
1094
  }
1109
- // EXTERNAL MODULE: ../../core/src/utils/index.ts + 29 modules
1110
- var utils = __webpack_require__(37415);
1095
+ // EXTERNAL MODULE: ../../core/src/utils/index.ts + 28 modules
1096
+ var utils = __webpack_require__(5971);
1111
1097
  ;// CONCATENATED MODULE: ../../../extensions/cornerstone/src/tools/OverlayPlaneModuleProvider.ts
1112
1098
 
1113
1099
  const _cachedOverlayMetadata = new Map();
@@ -4408,9 +4394,9 @@ const initMeasurementService = (measurementService, displaySetService, cornersto
4408
4394
  /* Mappings */
4409
4395
  measurementService.addMapping(csTools3DVer1MeasurementSource, 'Length', Length.matchingCriteria, Length.toAnnotation, Length.toMeasurement);
4410
4396
  measurementService.addMapping(csTools3DVer1MeasurementSource, 'Crosshairs', Length.matchingCriteria, () => {
4411
- console.warn('Crosshairs mapping not implemented.');
4397
+ return null;
4412
4398
  }, () => {
4413
- console.warn('Crosshairs mapping not implemented.');
4399
+ return null;
4414
4400
  });
4415
4401
  measurementService.addMapping(csTools3DVer1MeasurementSource, 'Bidirectional', Bidirectional.matchingCriteria, Bidirectional.toAnnotation, Bidirectional.toMeasurement);
4416
4402
  measurementService.addMapping(csTools3DVer1MeasurementSource, 'EllipticalROI', EllipticalROI.matchingCriteria, EllipticalROI.toAnnotation, EllipticalROI.toMeasurement);
@@ -5278,7 +5264,7 @@ function interleaveTopToBottom({
5278
5264
  const AllRequests = [];
5279
5265
  volumes.forEach(volume => {
5280
5266
  const requests = volume.getImageLoadRequests();
5281
- if (!requests.length || !requests[0] || !requests[0].imageId) {
5267
+ if (!requests?.[0]?.imageId) {
5282
5268
  return;
5283
5269
  }
5284
5270
 
@@ -5652,6 +5638,8 @@ var useLutPresentationStore = __webpack_require__(10182);
5652
5638
  var usePositionPresentationStore = __webpack_require__(44646);
5653
5639
  // EXTERNAL MODULE: ../../../extensions/cornerstone/src/stores/useSegmentationPresentationStore.ts + 1 modules
5654
5640
  var useSegmentationPresentationStore = __webpack_require__(2847);
5641
+ // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/utilities/index.js + 40 modules
5642
+ var esm_utilities = __webpack_require__(49035);
5655
5643
  ;// CONCATENATED MODULE: ../../../extensions/cornerstone/src/init.tsx
5656
5644
 
5657
5645
 
@@ -5674,6 +5662,7 @@ var useSegmentationPresentationStore = __webpack_require__(2847);
5674
5662
 
5675
5663
 
5676
5664
 
5665
+
5677
5666
 
5678
5667
 
5679
5668
  const {
@@ -5755,9 +5744,18 @@ async function init({
5755
5744
  const metadataProvider = src/* default.classes */.Ay.classes.MetadataProvider;
5756
5745
  esm.volumeLoader.registerVolumeLoader('cornerstoneStreamingImageVolume', loaders/* cornerstoneStreamingImageVolumeLoader */.FC);
5757
5746
  esm.volumeLoader.registerVolumeLoader('cornerstoneStreamingDynamicImageVolume', loaders/* cornerstoneStreamingDynamicImageVolumeLoader */.Mr);
5758
- hangingProtocolService.registerImageLoadStrategy('interleaveCenter', interleaveCenterLoader);
5759
- hangingProtocolService.registerImageLoadStrategy('interleaveTopToBottom', interleaveTopToBottom);
5760
- hangingProtocolService.registerImageLoadStrategy('nth', interleaveNthLoader);
5747
+
5748
+ // Register strategies using the wrapper
5749
+ const imageLoadStrategies = {
5750
+ interleaveCenter: interleaveCenterLoader,
5751
+ interleaveTopToBottom: interleaveTopToBottom,
5752
+ nth: interleaveNthLoader
5753
+ };
5754
+ Object.entries(imageLoadStrategies).forEach(([name, strategyFn]) => {
5755
+ hangingProtocolService.registerImageLoadStrategy(name, createMetadataWrappedStrategy(strategyFn));
5756
+ });
5757
+
5758
+ // ... existing code ...
5761
5759
 
5762
5760
  // add metadata providers
5763
5761
  esm.metaData.addProvider(esm.utilities.calibratedPixelSpacingMetadataProvider.get.bind(esm.utilities.calibratedPixelSpacingMetadataProvider)); // this provider is required for Calibration tool
@@ -5920,6 +5918,27 @@ function initializeWebWorkerProgressHandler(uiNotificationService) {
5920
5918
  }
5921
5919
  });
5922
5920
  }
5921
+
5922
+ /**
5923
+ * Creates a wrapped image load strategy with metadata handling
5924
+ * @param strategyFn - The image loading strategy function to wrap
5925
+ * @returns A wrapped strategy function that handles metadata configuration
5926
+ */
5927
+ const createMetadataWrappedStrategy = strategyFn => {
5928
+ return args => {
5929
+ const clonedConfig = esm_utilities.imageRetrieveMetadataProvider.clone();
5930
+ esm_utilities.imageRetrieveMetadataProvider.clear();
5931
+ try {
5932
+ const result = strategyFn(args);
5933
+ return result;
5934
+ } finally {
5935
+ // Ensure metadata is always restored, even if there's an error
5936
+ setTimeout(() => {
5937
+ esm_utilities.imageRetrieveMetadataProvider.restore(clonedConfig);
5938
+ }, 10);
5939
+ }
5940
+ };
5941
+ };
5923
5942
  function CPUModal() {
5924
5943
  return /*#__PURE__*/react.createElement("div", null, /*#__PURE__*/react.createElement("p", null, "Your computer does not have enough GPU power to support the default GPU rendering mode. OHIF has switched to CPU rendering mode. Please note that CPU rendering does not support all features such as Volume Rendering, Multiplanar Reconstruction, and Segmentation Overlays."));
5925
5944
  }
@@ -9089,7 +9108,7 @@ const frameView = {
9089
9108
  required: true
9090
9109
  }, {
9091
9110
  attribute: 'isDisplaySetFromUrl',
9092
- weight: 10,
9111
+ weight: 20,
9093
9112
  constraint: {
9094
9113
  equals: true
9095
9114
  }
@@ -11719,12 +11738,22 @@ class SegmentationService extends src/* PubSubService */.Rc {
11719
11738
  // We should parse the segmentation as separate slices to support overlapping segments.
11720
11739
  // This parsing should occur in the CornerstoneJS library adapters.
11721
11740
  // For now, we use the volume returned from the library and chop it here.
11741
+ let firstSegmentedSliceImageId = null;
11722
11742
  for (let i = 0; i < derivedSegmentationImages.length; i++) {
11723
11743
  const voxelManager = derivedSegmentationImages[i].voxelManager;
11724
11744
  const scalarData = voxelManager.getScalarData();
11725
- scalarData.set(volumeScalarData.slice(i * scalarData.length, (i + 1) * scalarData.length));
11745
+ const sliceData = volumeScalarData.slice(i * scalarData.length, (i + 1) * scalarData.length);
11746
+ scalarData.set(sliceData);
11726
11747
  voxelManager.setScalarData(scalarData);
11748
+
11749
+ // Check if this slice has any non-zero voxels and we haven't found one yet
11750
+ if (!firstSegmentedSliceImageId && sliceData.some(value => value !== 0)) {
11751
+ firstSegmentedSliceImageId = derivedSegmentationImages[i].referencedImageId;
11752
+ }
11727
11753
  }
11754
+
11755
+ // assign the first non zero voxel image id to the segDisplaySet
11756
+ segDisplaySet.firstSegmentedSliceImageId = firstSegmentedSliceImageId;
11728
11757
  this._broadcastEvent(SegmentationService_EVENTS.SEGMENTATION_LOADING_COMPLETE, {
11729
11758
  segmentationId,
11730
11759
  segDisplaySet
@@ -11772,7 +11801,12 @@ class SegmentationService extends src/* PubSubService */.Rc {
11772
11801
  throw new Error('To create the contours from RT displaySet, the displaySet should be loaded first. You can perform rtDisplaySet.load() before calling this method.');
11773
11802
  }
11774
11803
  const rtDisplaySetUID = rtDisplaySet.displaySetInstanceUID;
11775
-
11804
+ const referencedDisplaySet = this.servicesManager.services.displaySetService.getDisplaySetByUID(rtDisplaySet.referencedDisplaySetInstanceUID);
11805
+ const referencedImageIdsWithGeometry = Array.from(structureSet.ReferencedSOPInstanceUIDsSet);
11806
+ const referencedImageIds = referencedDisplaySet.instances.map(image => image.imageId);
11807
+ // find the first image id that contains a referenced SOP instance UID
11808
+ const firstSegmentedSliceImageId = referencedImageIds.find(imageId => referencedImageIdsWithGeometry.some(referencedId => imageId.includes(referencedId)));
11809
+ rtDisplaySet.firstSegmentedSliceImageId = firstSegmentedSliceImageId;
11776
11810
  // Map ROI contours to RT Struct Data
11777
11811
  const allRTStructData = mapROIContoursToRTStructData(structureSet, rtDisplaySetUID);
11778
11812
 
@@ -13305,6 +13339,20 @@ class CornerstoneViewportService extends src/* PubSubService */.Rc {
13305
13339
  * individual resize observers
13306
13340
  */
13307
13341
  resize(isGridResize = false) {
13342
+ // https://stackoverflow.com/a/26279685
13343
+ // This resize() call, among other things, rerenders the viewports. But when the entire viewer is
13344
+ // display: none'd, it makes the size of all hidden elements 0, including the viewport canvas and its containers.
13345
+ // Even if the viewer is later displayed again, trying to render when the size is 0 permanently "breaks" the
13346
+ // viewport, making it fully black even after the size is normal again. So just ignore resize events when hidden:
13347
+ const areViewportsHidden = Array.from(this.viewportsById.values()).every(viewportInfo => {
13348
+ const element = viewportInfo.getElement();
13349
+ return element.clientWidth === 0 && element.clientHeight === 0;
13350
+ });
13351
+ if (areViewportsHidden) {
13352
+ console.warn('Ignoring resize when viewports have size 0');
13353
+ return;
13354
+ }
13355
+
13308
13356
  // if there is a grid resize happening, it means the viewport grid
13309
13357
  // has been manipulated (e.g., panels closed, added, etc.) and we need
13310
13358
  // to resize all viewports, so we will add a timeout here to make sure
@@ -13727,9 +13775,6 @@ class CornerstoneViewportService extends src/* PubSubService */.Rc {
13727
13775
  // is being used to navigate to the initial view position for measurement
13728
13776
  // navigation and other navigation forcing specific views.
13729
13777
  let initialImageIndexToUse = presentations?.positionPresentation?.initialImageIndex ?? initialImageIndex;
13730
- if (initialImageIndexToUse === undefined || initialImageIndexToUse === null) {
13731
- initialImageIndexToUse = this._getInitialImageIndexForViewport(viewportInfo, imageIds) || 0;
13732
- }
13733
13778
  const {
13734
13779
  rotation,
13735
13780
  flipHorizontal,
@@ -13767,13 +13812,23 @@ class CornerstoneViewportService extends src/* PubSubService */.Rc {
13767
13812
  dist_esm.utilities.stackContextPrefetch.enable(element);
13768
13813
  });
13769
13814
  let imageIdsToSet = imageIds;
13770
- const res = this._processExtraDisplaySetsForViewport(viewport);
13771
- imageIdsToSet = res?.imageIds ?? imageIdsToSet;
13815
+ const overlayProcessingResult = this._processExtraDisplaySetsForViewport(viewport);
13816
+ imageIdsToSet = overlayProcessingResult?.imageIds ?? imageIdsToSet;
13817
+ const referencedImageId = presentations?.positionPresentation?.viewReference?.referencedImageId;
13818
+ if (referencedImageId) {
13819
+ initialImageIndexToUse = imageIdsToSet.indexOf(referencedImageId);
13820
+ }
13821
+ if (initialImageIndexToUse === undefined || initialImageIndexToUse === null) {
13822
+ initialImageIndexToUse = this._getInitialImageIndexForViewport(viewportInfo, imageIds) || 0;
13823
+ }
13772
13824
  return viewport.setStack(imageIdsToSet, initialImageIndexToUse).then(() => {
13773
13825
  viewport.setProperties({
13774
13826
  ...properties
13775
13827
  });
13776
13828
  this.setPresentations(viewport.id, presentations, viewportInfo);
13829
+ if (overlayProcessingResult?.addOverlayFn) {
13830
+ overlayProcessingResult.addOverlayFn();
13831
+ }
13777
13832
  if (displayArea) {
13778
13833
  viewport.setDisplayArea(displayArea);
13779
13834
  }
@@ -13955,8 +14010,13 @@ class CornerstoneViewportService extends src/* PubSubService */.Rc {
13955
14010
  });
13956
14011
 
13957
14012
  // For SEG and RT viewports
13958
- this._processExtraDisplaySetsForViewport(viewport);
14013
+ const {
14014
+ addOverlayFn
14015
+ } = this._processExtraDisplaySetsForViewport(viewport) || {};
13959
14016
  await viewport.setVolumes(volumeInputArray);
14017
+ if (addOverlayFn) {
14018
+ addOverlayFn();
14019
+ }
13960
14020
  volumesProperties.forEach(({
13961
14021
  properties,
13962
14022
  volumeId
@@ -13995,9 +14055,9 @@ class CornerstoneViewportService extends src/* PubSubService */.Rc {
13995
14055
  }
13996
14056
  const referenceDisplaySet = displaySetService.getDisplaySetByUID(segOrRTSOverlayDisplaySet.referencedDisplaySetInstanceUID);
13997
14057
  const imageIds = referenceDisplaySet.images.map(image => image.imageId);
13998
- this.addOverlayRepresentationForDisplaySet(segOrRTSOverlayDisplaySet, viewport);
13999
14058
  return {
14000
- imageIds
14059
+ imageIds,
14060
+ addOverlayFn: () => this.addOverlayRepresentationForDisplaySet(segOrRTSOverlayDisplaySet, viewport)
14001
14061
  };
14002
14062
  }
14003
14063
  addOverlayRepresentationForDisplaySet(displaySet, viewport) {
@@ -14140,6 +14200,11 @@ class CornerstoneViewportService extends src/* PubSubService */.Rc {
14140
14200
  id: viewportId
14141
14201
  }) => {
14142
14202
  const presentation = this._getPositionPresentation(viewportId);
14203
+
14204
+ // During a resize, the slice index should remain unchanged. This is a temporary fix for
14205
+ // a larger issue regarding the definition of slice index with slab thickness.
14206
+ // We need to revisit this to make it more robust and understandable.
14207
+ delete presentation.viewReference.sliceIndex;
14143
14208
  this.beforeResizePositionPresentations.set(viewportId, presentation);
14144
14209
  });
14145
14210
 
@@ -14148,7 +14213,7 @@ class CornerstoneViewportService extends src/* PubSubService */.Rc {
14148
14213
  renderingEngine.resize(isImmediate);
14149
14214
  renderingEngine.render();
14150
14215
 
14151
- // Reset the camera for viewports that should reset their camera on resize,
14216
+ // Reset the camera for all viewports using position presentation to maintain relative size/position
14152
14217
  // which means only those viewports that have a zoom level of 1.
14153
14218
  this.beforeResizePositionPresentations.forEach((positionPresentation, viewportId) => {
14154
14219
  this.setPresentations(viewportId, {
@@ -14905,10 +14970,6 @@ function getDicomMicroscopySopClassHandler({
14905
14970
  function getSopClassHandlerModule(params) {
14906
14971
  return [getDicomMicroscopySopClassHandler(params)];
14907
14972
  }
14908
- // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/utilities/index.js + 40 modules
14909
- var esm_utilities = __webpack_require__(49035);
14910
- // EXTERNAL MODULE: ../../../extensions/default/src/stores/useToggleOneUpViewportGridStore.ts
14911
- var useToggleOneUpViewportGridStore = __webpack_require__(73325);
14912
14973
  // EXTERNAL MODULE: ../../../node_modules/lodash.debounce/index.js
14913
14974
  var lodash_debounce = __webpack_require__(62051);
14914
14975
  var lodash_debounce_default = /*#__PURE__*/__webpack_require__.n(lodash_debounce);
@@ -15378,6 +15439,12 @@ function PanelSegmentation({
15378
15439
  const referencedImageIds = Labelmap.referencedImageIds;
15379
15440
  const firstImageId = referencedImageIds[0];
15380
15441
  const instance = esm.metaData.get('instance', firstImageId);
15442
+ if (!instance) {
15443
+ return {
15444
+ segmentationId,
15445
+ isExportable: false
15446
+ };
15447
+ }
15381
15448
  const {
15382
15449
  SOPInstanceUID,
15383
15450
  SeriesInstanceUID
@@ -16738,7 +16805,7 @@ const cornerstoneExtension = {
16738
16805
  useLutPresentationStore/* useLutPresentationStore */.I.getState().clearLutPresentationStore();
16739
16806
  usePositionPresentationStore/* usePositionPresentationStore */.q.getState().clearPositionPresentationStore();
16740
16807
  useSynchronizersStore/* useSynchronizersStore */.U.getState().clearSynchronizersStore();
16741
- useToggleOneUpViewportGridStore/* useToggleOneUpViewportGridStore */.Y.getState().clearToggleOneUpViewportGridStore();
16808
+ default_src.useToggleOneUpViewportGridStore.getState().clearToggleOneUpViewportGridStore();
16742
16809
  useSegmentationPresentationStore/* useSegmentationPresentationStore */.v.getState().clearSegmentationPresentationStore();
16743
16810
  segmentationService.removeAllSegmentations();
16744
16811
  },
@@ -16841,7 +16908,7 @@ const cornerstoneExtension = {
16841
16908
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
16842
16909
  /* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__)
16843
16910
  /* harmony export */ });
16844
- /* harmony import */ var _ohif_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(29463);
16911
+ /* harmony import */ var _ohif_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(80818);
16845
16912
  /* harmony import */ var _ohif_ui__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(35647);
16846
16913
  var _ViewportActionCornersService;
16847
16914
 
@@ -17114,7 +17181,7 @@ const useLutPresentationStore = (0,zustand__WEBPACK_IMPORTED_MODULE_0__/* .creat
17114
17181
 
17115
17182
 
17116
17183
  const PRESENTATION_TYPE_ID = 'positionPresentationId';
17117
- const DEBUG_STORE = true;
17184
+ const DEBUG_STORE = false;
17118
17185
 
17119
17186
  /**
17120
17187
  * Represents the state and actions for managing position presentations.
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
- (self["webpackChunk"] = self["webpackChunk"] || []).push([[1266,2591,4182,1801],{
2
+ (self["webpackChunk"] = self["webpackChunk"] || []).push([[1266,4182],{
3
3
 
4
4
  /***/ 35589:
5
5
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
@@ -15,8 +15,8 @@ __webpack_require__.d(__webpack_exports__, {
15
15
  toolbarButtons: () => (/* reexport */ src_toolbarButtons)
16
16
  });
17
17
 
18
- // EXTERNAL MODULE: ../../core/src/index.ts + 71 modules
19
- var src = __webpack_require__(29463);
18
+ // EXTERNAL MODULE: ../../core/src/index.ts + 72 modules
19
+ var src = __webpack_require__(80818);
20
20
  // EXTERNAL MODULE: ../../../node_modules/i18next/dist/esm/i18next.js
21
21
  var i18next = __webpack_require__(40680);
22
22
  ;// CONCATENATED MODULE: ../../../modes/longitudinal/package.json
@@ -762,6 +762,11 @@ const performCustomizations = customizationService => {
762
762
  id: 'PanelSegmentation.disableEditing',
763
763
  disableEditing: true
764
764
  }
765
+ // to only show current study in the panel study browser
766
+ // {
767
+ // id: 'PanelStudyBrowser.studyMode',
768
+ // mode: 'primary',
769
+ // },
765
770
  // To disable editing in the MeasurementTable
766
771
  // {
767
772
  // id: 'PanelMeasurement.disableEditing',
@@ -14,8 +14,8 @@ __webpack_require__.d(__webpack_exports__, {
14
14
 
15
15
  // EXTERNAL MODULE: ../../ui/src/index.js + 690 modules
16
16
  var src = __webpack_require__(35647);
17
- // EXTERNAL MODULE: ../../core/src/index.ts + 71 modules
18
- var core_src = __webpack_require__(29463);
17
+ // EXTERNAL MODULE: ../../core/src/index.ts + 72 modules
18
+ var core_src = __webpack_require__(80818);
19
19
  ;// CONCATENATED MODULE: ../../../modes/basic-dev-mode/src/toolbarButtons.js
20
20
 
21
21