@ohif/app 3.13.0-beta.88 → 3.13.0-beta.89

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 (53) hide show
  1. package/dist/{5491.bundle.4866d2ecb20dd089e071.js → 1124.bundle.3c1b947a1884362c1241.js} +376 -222
  2. package/dist/1429.bundle.bd1585628440399e6c3f.js +2079 -0
  3. package/dist/{2108.bundle.142ee8d405727d02b16a.js → 1704.bundle.38d95b81b9e1293e04de.js} +1 -643
  4. package/dist/{7537.bundle.3c7d71348190ed4e9565.js → 1741.bundle.abc3a09729ada4c25685.js} +105024 -55129
  5. package/dist/{1927.bundle.be67b3aafe238ca9f191.js → 1927.bundle.1749aa6ae7b1dd3d06b1.js} +1 -1
  6. package/dist/{6354.bundle.929febcf6d326e582e00.js → 2802.bundle.3d6cc53ef3c69901431d.js} +31 -324
  7. package/dist/{3461.bundle.9bc7ca0f93d754014c23.js → 3461.bundle.2f3e998096ef3fca602b.js} +5 -4
  8. package/dist/{3617.bundle.f408991512372e52c6cf.js → 3617.bundle.f7f53b332f72e9fe6374.js} +2 -2
  9. package/dist/{3754.bundle.477cfd7fc3ff13e9dc67.js → 3754.bundle.2a46971b209140d4cb08.js} +12 -6
  10. package/dist/{9039.bundle.49ab126163ca208e52b3.js → 4335.bundle.69a7cc007e85f043488e.js} +4114 -4263
  11. package/dist/{4579.bundle.1c315389368cc476aed3.js → 451.bundle.6634a9dae2b4f0e9ebc9.js} +83 -30
  12. package/dist/{5028.bundle.4960393948811673d99b.js → 5028.bundle.f483671d94ded4c8f6f3.js} +2 -2
  13. package/dist/{5858.bundle.466e58128de344ab53f3.js → 5858.bundle.c25c73ecbc47b1a69cea.js} +0 -4
  14. package/dist/{6125.bundle.2c6f2ba3bd8e1493e54b.js → 6125.bundle.4e46ecd271f647cb977f.js} +2 -2087
  15. package/dist/{6376.bundle.f5ef0f5465d575d0dbb0.js → 6376.bundle.c7c515ba478be810e03d.js} +6 -3
  16. package/dist/{9567.bundle.ff782480a4c66e306027.js → 650.bundle.5decc3ce72a22162b8f4.js} +3080 -216
  17. package/dist/{7166.bundle.0a84efe4f3e6d0ddcbec.js → 7166.bundle.eeeda537770d73736e46.js} +161 -55
  18. package/dist/{6386.bundle.dc7e3b159d6b4733647f.js → 741.bundle.e47adc12429ee838d3fb.js} +3408 -3722
  19. package/dist/{7431.bundle.a9b4dbf97a8c196efe51.js → 7431.bundle.c3bd9a9f1ea743c81335.js} +61 -60
  20. package/dist/{8305.bundle.8088b210631f2b22899d.js → 8305.bundle.71787ad9e3df5d1dd30d.js} +2 -2
  21. package/dist/{8558.bundle.79c567857e04df2694cc.js → 8558.bundle.00d5dbdf73ca0a44831a.js} +1 -1
  22. package/dist/{8583.bundle.e36ff2fc6ee67e4e4232.js → 8583.bundle.40859ef5654559a1c66b.js} +3 -3
  23. package/dist/{9205.bundle.c974537f15d86687f6d2.js → 9205.bundle.d43cd617e38109746e4d.js} +2257 -2133
  24. package/dist/{4287.bundle.4f28e48c1e39a46dfc87.js → 9400.bundle.a56bfccf2bf7a51ed297.js} +1362 -692
  25. package/dist/{2075.bundle.ba9ac60662f1fa739378.js → 9475.bundle.693fe4de0573042a17f3.js} +203 -156
  26. package/dist/{app.bundle.3b116829d23059e8d9d8.js → app.bundle.93ee83d5e283aa1496da.js} +81239 -52123
  27. package/dist/{compute.bundle.2b82d8a0d1f3b41df1d2.js → compute.bundle.2fc1182cc9b2af5f4a40.js} +3 -15
  28. package/dist/{histogram-worker.bundle.a2a50c4674d99c619ca7.js → histogram-worker.bundle.c81373ef983363586dc5.js} +4 -4
  29. package/dist/index.html +1 -1
  30. package/dist/{interpolation.bundle.35be9e5cf473c6ebd3da.js → interpolation.bundle.a31edd1d26d81ef65b9b.js} +6 -6
  31. package/dist/{polySeg.bundle.ad2080f28d2c471bf208.js → polySeg.bundle.294012e3a5458cd3fecc.js} +3 -15
  32. package/dist/sw.js +1 -1
  33. package/package.json +21 -21
  34. /package/dist/{1459.bundle.23ea55eeadd13d26d6b5.js → 1459.bundle.763540bccf93fda17fff.js} +0 -0
  35. /package/dist/{1933.bundle.5713711c4a8f6518803b.js → 1933.bundle.8d54b74d93a7354925c5.js} +0 -0
  36. /package/dist/{2018.bundle.fee6699868f9e280861c.js → 2018.bundle.7ba8f9afeb48defb425b.js} +0 -0
  37. /package/dist/{213.bundle.3c0a19cba715a9a87151.js → 213.bundle.1a54c6878a493c5b61c5.js} +0 -0
  38. /package/dist/{2424.bundle.1d615d02f985abbbc633.js → 2424.bundle.c6d74f7129108d885a1b.js} +0 -0
  39. /package/dist/{2516.bundle.6b52ced19754035768ae.js → 2516.bundle.28427294c53e067811ca.js} +0 -0
  40. /package/dist/{3138.bundle.451e4105dda240465e6d.js → 3138.bundle.3845b7e06b8ab2564951.js} +0 -0
  41. /package/dist/{4507.bundle.51470574cbf11549ff72.js → 4507.bundle.b658ff59d35614916a2b.js} +0 -0
  42. /package/dist/{4819.bundle.c5e695cd51065d2a1a88.js → 4819.bundle.e28f5f1f0d481e190bb1.js} +0 -0
  43. /package/dist/{5015.bundle.647c560efcc9942bb42c.js → 5015.bundle.455552a6df9b442b3c40.js} +0 -0
  44. /package/dist/{5457.bundle.45b43e0e56637108f8f1.js → 5457.bundle.ee1026db729958b36a2e.js} +0 -0
  45. /package/dist/{5485.bundle.3d2d3a7f37f948da2269.js → 5485.bundle.0ecad3940c321ae65b23.js} +0 -0
  46. /package/dist/{5802.bundle.da6055b6bf1a3db7b6d5.js → 5802.bundle.5e1a7df7ad850a5370f8.js} +0 -0
  47. /package/dist/{5830.bundle.d026ec38980fb12f2518.js → 5830.bundle.8327ccd3c8a6334ac315.js} +0 -0
  48. /package/dist/{6027.bundle.ea7a56c1ebde501ce02d.js → 6027.bundle.f276566b6237d9e16333.js} +0 -0
  49. /package/dist/{7639.bundle.2b4ae693bddf15fb9641.js → 7639.bundle.25e1a86f2248148c35d5.js} +0 -0
  50. /package/dist/{8499.bundle.f94b5427bb2889634aeb.js → 8499.bundle.22f25667db4ab2e59e57.js} +0 -0
  51. /package/dist/{85.bundle.f7cb4cf8432ca6a815c0.js → 85.bundle.2aa39c9bf12258c7ca68.js} +0 -0
  52. /package/dist/{9862.bundle.f92516a34b9cef88c56f.js → 9862.bundle.fb87529360fb93010555.js} +0 -0
  53. /package/dist/{9927.bundle.5cf09e95f0253210d431.js → 9927.bundle.f6e7785bceeeb7a1c62e.js} +0 -0
@@ -142,7 +142,7 @@ function useActiveViewportSegmentationRepresentations() {
142
142
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(86326);
143
143
  /* harmony import */ var _ohif_core_src__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(42356);
144
144
  /* harmony import */ var _useViewportDisplaySets__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(10225);
145
- /* harmony import */ var _cornerstonejs_core__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(15327);
145
+ /* harmony import */ var _utils_getLegacyViewportType__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(62739);
146
146
 
147
147
 
148
148
 
@@ -196,7 +196,7 @@ function useMeasurementTracking({
196
196
  }
197
197
  const viewport = cornerstoneViewportService?.getCornerstoneViewport(viewportId);
198
198
  const SeriesInstanceUID = backgroundDisplaySet.SeriesInstanceUID;
199
- if (viewport instanceof _cornerstonejs_core__WEBPACK_IMPORTED_MODULE_3__.BaseVolumeViewport) {
199
+ if ((0,_utils_getLegacyViewportType__WEBPACK_IMPORTED_MODULE_3__/* .isVolumeViewportType */ .rX)(viewport)) {
200
200
  const currentImageId = viewport?.getCurrentImageId();
201
201
  if (!currentImageId) {
202
202
  setIsTracked(false);
@@ -819,7 +819,9 @@ function useViewportDisplaySets(viewportId, options) {
819
819
  /* harmony import */ var _useViewportDisplaySets__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(10225);
820
820
  /* harmony import */ var _cornerstonejs_core__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(15327);
821
821
  /* harmony import */ var _utils_getDataIdForViewport__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(67142);
822
- /* harmony import */ var _ohif_core_src_services_ToolBarService_ToolbarService__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(93813);
822
+ /* harmony import */ var _utils_getLegacyViewportType__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(62739);
823
+ /* harmony import */ var _ohif_core_src_services_ToolBarService_ToolbarService__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(93813);
824
+
823
825
 
824
826
 
825
827
 
@@ -828,13 +830,13 @@ function useViewportDisplaySets(viewportId, options) {
828
830
 
829
831
  const getPosition = location => {
830
832
  switch (location) {
831
- case _ohif_core_src_services_ToolBarService_ToolbarService__WEBPACK_IMPORTED_MODULE_5__/* .ButtonLocation */ .ij.LeftMiddle:
833
+ case _ohif_core_src_services_ToolBarService_ToolbarService__WEBPACK_IMPORTED_MODULE_6__/* .ButtonLocation */ .ij.LeftMiddle:
832
834
  return 'left';
833
- case _ohif_core_src_services_ToolBarService_ToolbarService__WEBPACK_IMPORTED_MODULE_5__/* .ButtonLocation */ .ij.RightMiddle:
835
+ case _ohif_core_src_services_ToolBarService_ToolbarService__WEBPACK_IMPORTED_MODULE_6__/* .ButtonLocation */ .ij.RightMiddle:
834
836
  return 'right';
835
- case _ohif_core_src_services_ToolBarService_ToolbarService__WEBPACK_IMPORTED_MODULE_5__/* .ButtonLocation */ .ij.BottomMiddle:
837
+ case _ohif_core_src_services_ToolBarService_ToolbarService__WEBPACK_IMPORTED_MODULE_6__/* .ButtonLocation */ .ij.BottomMiddle:
836
838
  return 'bottom';
837
- case _ohif_core_src_services_ToolBarService_ToolbarService__WEBPACK_IMPORTED_MODULE_5__/* .ButtonLocation */ .ij.TopMiddle:
839
+ case _ohif_core_src_services_ToolBarService_ToolbarService__WEBPACK_IMPORTED_MODULE_6__/* .ButtonLocation */ .ij.TopMiddle:
838
840
  return 'top';
839
841
  default:
840
842
  return 'bottom';
@@ -872,7 +874,7 @@ function useViewportRendering(viewportId, options) {
872
874
  const voiRangeRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef();
873
875
  // Viewport from service; kept in state so we can subscribe to VIEWPORT_DATA_CHANGED when null and re-run effects when it becomes available
874
876
  const [viewport, setViewport] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(() => viewportId ? cornerstoneViewportService.getCornerstoneViewport(viewportId) ?? null : null);
875
- const [is3DVolume, setIs3DVolume] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(viewport instanceof _cornerstonejs_core__WEBPACK_IMPORTED_MODULE_3__.VolumeViewport3D);
877
+ const [is3DVolume, setIs3DVolume] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)((0,_utils_getLegacyViewportType__WEBPACK_IMPORTED_MODULE_5__/* .isVolume3DViewportType */ .Ov)(viewport));
876
878
  const [opacity, setOpacityState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)();
877
879
  const [opacityLinear, setOpacityLinearState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)();
878
880
  const [threshold, setThresholdState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)();
@@ -957,7 +959,7 @@ function useViewportRendering(viewportId, options) {
957
959
  if (!viewport) {
958
960
  return;
959
961
  }
960
- if (!(viewport instanceof _cornerstonejs_core__WEBPACK_IMPORTED_MODULE_3__.BaseVolumeViewport)) {
962
+ if (!(0,_utils_getLegacyViewportType__WEBPACK_IMPORTED_MODULE_5__/* .isVolumeViewportType */ .rX)(viewport)) {
961
963
  return;
962
964
  }
963
965
  const volumeIds = viewport.getAllVolumeIds();
@@ -994,7 +996,7 @@ function useViewportRendering(viewportId, options) {
994
996
  return activePresetData.presets;
995
997
  }, [allWindowLevelPresets, activeDisplaySetInstanceUID]);
996
998
  (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
997
- setIs3DVolume(viewport instanceof _cornerstonejs_core__WEBPACK_IMPORTED_MODULE_3__.VolumeViewport3D);
999
+ setIs3DVolume((0,_utils_getLegacyViewportType__WEBPACK_IMPORTED_MODULE_5__/* .isVolume3DViewportType */ .Ov)(viewport));
998
1000
  if (!viewport || !activeDisplaySetInstanceUID) {
999
1001
  return;
1000
1002
  }
@@ -1236,7 +1238,7 @@ function useViewportRendering(viewportId, options) {
1236
1238
  });
1237
1239
  }, [commandsManager, validateActiveDisplaySet, viewport, viewportId]);
1238
1240
  const setOpacity = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(opacityValue => {
1239
- if (!viewport || !(viewport instanceof _cornerstonejs_core__WEBPACK_IMPORTED_MODULE_3__.BaseVolumeViewport)) {
1241
+ if (!viewport || !(0,_utils_getLegacyViewportType__WEBPACK_IMPORTED_MODULE_5__/* .isVolumeViewportType */ .rX)(viewport)) {
1240
1242
  return;
1241
1243
  }
1242
1244
 
@@ -1273,7 +1275,7 @@ function useViewportRendering(viewportId, options) {
1273
1275
  setOpacity(actualOpacity);
1274
1276
  }, [linearToOpacity, setOpacity]);
1275
1277
  const setThreshold = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(thresholdValue => {
1276
- if (!viewport || !(viewport instanceof _cornerstonejs_core__WEBPACK_IMPORTED_MODULE_3__.BaseVolumeViewport)) {
1278
+ if (!viewport || !(0,_utils_getLegacyViewportType__WEBPACK_IMPORTED_MODULE_5__/* .isVolumeViewportType */ .rX)(viewport)) {
1277
1279
  return;
1278
1280
  }
1279
1281
  setThresholdState(thresholdValue);
@@ -1301,7 +1303,7 @@ function useViewportRendering(viewportId, options) {
1301
1303
  if (!viewport) {
1302
1304
  return null;
1303
1305
  }
1304
- if (viewport instanceof _cornerstonejs_core__WEBPACK_IMPORTED_MODULE_3__.StackViewport) {
1306
+ if ((0,_utils_getLegacyViewportType__WEBPACK_IMPORTED_MODULE_5__/* .isStackViewportType */ .TF)(viewport)) {
1305
1307
  const {
1306
1308
  colormap
1307
1309
  } = viewport.getProperties();
@@ -1708,8 +1710,8 @@ var src = __webpack_require__(42356);
1708
1710
  var loaders = __webpack_require__(19742);
1709
1711
  // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/enums/RequestType.js
1710
1712
  var RequestType = __webpack_require__(43213);
1711
- // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/dicom-image-loader/dist/esm/index.js + 80 modules
1712
- var dicom_image_loader_dist_esm = __webpack_require__(76318);
1713
+ // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/dicom-image-loader/dist/esm/index.js + 81 modules
1714
+ var dicom_image_loader_dist_esm = __webpack_require__(88589);
1713
1715
  ;// ../../../extensions/cornerstone/src/initWADOImageLoader.js
1714
1716
 
1715
1717
 
@@ -1902,11 +1904,14 @@ const OverlayPlaneModuleProvider = {
1902
1904
  // Needs to be higher priority than default provider
1903
1905
  esm.metaData.addProvider(OverlayPlaneModuleProvider.get, 10_000);
1904
1906
  /* harmony default export */ const tools_OverlayPlaneModuleProvider = (OverlayPlaneModuleProvider);
1907
+ // EXTERNAL MODULE: ../../../extensions/cornerstone/src/utils/getLegacyViewportType.ts
1908
+ var getLegacyViewportType = __webpack_require__(62739);
1905
1909
  ;// ../../../extensions/cornerstone/src/tools/ImageOverlayViewerTool.tsx
1906
1910
 
1907
1911
 
1908
1912
 
1909
1913
 
1914
+
1910
1915
  /**
1911
1916
  * Image Overlay Viewer tool is not a traditional tool that requires user interactin.
1912
1917
  * But it is used to display Pixel Overlays. And it will provide toggling capability.
@@ -1959,7 +1964,7 @@ class ImageOverlayViewerTool extends dist_esm.AnnotationDisplayTool {
1959
1964
  };
1960
1965
  }
1961
1966
  getReferencedImageId(viewport) {
1962
- if (viewport instanceof esm.VolumeViewport) {
1967
+ if ((0,getLegacyViewportType/* isOrthographicViewportType */.tO)(viewport)) {
1963
1968
  return;
1964
1969
  }
1965
1970
  const targetId = this.getTargetId(viewport);
@@ -6962,8 +6967,8 @@ var useLutPresentationStore = __webpack_require__(10182);
6962
6967
  var usePositionPresentationStore = __webpack_require__(44646);
6963
6968
  // EXTERNAL MODULE: ../../../extensions/cornerstone/src/stores/useSegmentationPresentationStore.ts + 1 modules
6964
6969
  var useSegmentationPresentationStore = __webpack_require__(2847);
6965
- // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/utilities/index.js + 47 modules
6966
- var esm_utilities = __webpack_require__(85343);
6970
+ // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/utilities/index.js + 42 modules
6971
+ var esm_utilities = __webpack_require__(18636);
6967
6972
  ;// ../../../extensions/cornerstone/src/utils/initWebWorkerProgressHandler.ts
6968
6973
 
6969
6974
 
@@ -7137,7 +7142,11 @@ async function init({
7137
7142
  ...esm.getConfiguration(),
7138
7143
  rendering: {
7139
7144
  ...esm.getConfiguration().rendering,
7140
- strictZSpacingForVolumeViewport: appConfig.strictZSpacingForVolumeViewport
7145
+ strictZSpacingForVolumeViewport: appConfig.strictZSpacingForVolumeViewport,
7146
+ // Opt-in: route legacy viewport types through the new GenericViewport render
7147
+ // paths while keeping the legacy public API via compatibility adapters.
7148
+ // No-op on cornerstone builds that predate the GenericViewport architecture.
7149
+ useGenericViewport: Boolean(appConfig.useGenericViewport)
7141
7150
  }
7142
7151
  });
7143
7152
 
@@ -9441,6 +9450,7 @@ var html2canvas_esm = __webpack_require__(91037);
9441
9450
 
9442
9451
 
9443
9452
 
9453
+
9444
9454
  const {
9445
9455
  downloadUrl
9446
9456
  } = src/* utils */.Wp;
@@ -9554,10 +9564,10 @@ const CornerstoneViewportDownloadForm = ({
9554
9564
  const properties = viewport.getProperties();
9555
9565
  const viewPresentation = viewport.getViewPresentation?.();
9556
9566
  const viewRef = viewport.getViewReference?.();
9557
- if (downloadViewport instanceof esm.StackViewport) {
9567
+ if ((0,getLegacyViewportType/* isStackViewportType */.TF)(downloadViewport)) {
9558
9568
  const imageId = viewport.getCurrentImageId();
9559
9569
  await downloadViewport.setStack([imageId]);
9560
- } else if (downloadViewport instanceof esm.BaseVolumeViewport) {
9570
+ } else if ((0,getLegacyViewportType/* isVolumeViewportType */.rX)(downloadViewport)) {
9561
9571
  const volumeIds = viewport.getAllVolumeIds();
9562
9572
  await downloadViewport.setVolumes([{
9563
9573
  volumeId: volumeIds[0]
@@ -10464,7 +10474,13 @@ async function createSegmentationForViewport(servicesManager, {
10464
10474
  const viewport = viewports.get(targetViewportId);
10465
10475
 
10466
10476
  // Todo: add support for multiple display sets
10467
- const displaySetInstanceUID = options.displaySetInstanceUID || viewport.displaySetInstanceUIDs[0];
10477
+ // Guard against the grid not having this viewport yet (a transient race when
10478
+ // "Add segmentation" runs before the viewport is registered in the grid). Bail
10479
+ // gracefully instead of throwing, which would surface an uncaught error overlay.
10480
+ const displaySetInstanceUID = options.displaySetInstanceUID || viewport?.displaySetInstanceUIDs?.[0];
10481
+ if (!displaySetInstanceUID) {
10482
+ return undefined;
10483
+ }
10468
10484
  const segs = segmentationService.getSegmentations();
10469
10485
  const label = options.label || `${i18n_src/* default */.A.t('Tools:Segmentation')} ${segs.length + 1}`;
10470
10486
  const segmentationId = options.segmentationId || `${esm.utilities.uuidv4()}`;
@@ -10513,6 +10529,7 @@ var segmentation = __webpack_require__(55126);
10513
10529
 
10514
10530
 
10515
10531
 
10532
+
10516
10533
 
10517
10534
 
10518
10535
  const {
@@ -10778,7 +10795,7 @@ function commandsModule({
10778
10795
 
10779
10796
  const segmentationType =
10780
10797
  // Todo: check if PMAP modality should be handled such as SEG
10781
- displaySet.Modality !== 'SEG' ? esm_enums.SegmentationRepresentations.Contour : viewport.type === esm.Enums.ViewportType.VOLUME_3D ? esm_enums.SegmentationRepresentations.Surface : esm_enums.SegmentationRepresentations.Labelmap;
10798
+ displaySet.Modality !== 'SEG' ? esm_enums.SegmentationRepresentations.Contour : (0,getLegacyViewportType/* isVolume3DViewportType */.Ov)(viewport) ? esm_enums.SegmentationRepresentations.Surface : esm_enums.SegmentationRepresentations.Labelmap;
10782
10799
  commandsManager.runCommand('updateStoredSegmentationPresentation', {
10783
10800
  displaySet,
10784
10801
  type: segmentationType
@@ -11352,7 +11369,7 @@ function commandsModule({
11352
11369
  lower,
11353
11370
  upper
11354
11371
  } = esm.utilities.windowLevel.toLowHighRange(windowWidthNum, windowCenterNum);
11355
- if (viewport instanceof esm.BaseVolumeViewport) {
11372
+ if ((0,getLegacyViewportType/* isVolumeViewportType */.rX)(viewport)) {
11356
11373
  const volumeId = actions.getVolumeIdForDisplaySet({
11357
11374
  viewportId,
11358
11375
  displaySetInstanceUID
@@ -11429,7 +11446,11 @@ function commandsModule({
11429
11446
  displaySetInstanceUID
11430
11447
  }) => {
11431
11448
  const viewport = cornerstoneViewportService.getCornerstoneViewport(viewportId);
11432
- if (viewport instanceof esm.BaseVolumeViewport) {
11449
+ // `instanceof BaseVolumeViewport` is false for GenericViewport compat adapters,
11450
+ // so use the capability guard instead (cornerstone 5.x generic-viewport guide).
11451
+ // A stack-mode adapter passes the guard but getAllVolumeIds() returns [], so the
11452
+ // result is the same null as before on stacks.
11453
+ if (esm.utilities.viewportSupportsVolumeId(viewport)) {
11433
11454
  const volumeIds = viewport.getAllVolumeIds();
11434
11455
  const volumeId = volumeIds.find(id => id.includes(displaySetInstanceUID));
11435
11456
  return volumeId;
@@ -11720,7 +11741,7 @@ function commandsModule({
11720
11741
  const {
11721
11742
  viewport
11722
11743
  } = enabledElement;
11723
- if (viewport instanceof esm.StackViewport) {
11744
+ if ((0,getLegacyViewportType/* isStackViewportType */.TF)(viewport)) {
11724
11745
  if (direction) {
11725
11746
  const {
11726
11747
  parallelScale
@@ -11755,9 +11776,9 @@ function commandsModule({
11755
11776
  // Get number of slices
11756
11777
  // -> Copied from cornerstone3D jumpToSlice\_getImageSliceData()
11757
11778
  let numberOfSlices = 0;
11758
- if (viewport instanceof esm.StackViewport) {
11779
+ if ((0,getLegacyViewportType/* isStackViewportType */.TF)(viewport)) {
11759
11780
  numberOfSlices = viewport.getImageIds().length;
11760
- } else if (viewport instanceof esm.VolumeViewport) {
11781
+ } else if ((0,getLegacyViewportType/* isOrthographicViewportType */.tO)(viewport)) {
11761
11782
  numberOfSlices = esm.utilities.getImageSliceDataForVolumeViewport(viewport).numberOfSlices;
11762
11783
  } else {
11763
11784
  throw new Error('Unsupported viewport type');
@@ -11813,12 +11834,12 @@ function commandsModule({
11813
11834
  ...colormap,
11814
11835
  opacity: hpOpacity || opacity
11815
11836
  };
11816
- if (viewport instanceof esm.StackViewport) {
11837
+ if ((0,getLegacyViewportType/* isStackViewportType */.TF)(viewport)) {
11817
11838
  viewport.setProperties({
11818
11839
  colormap
11819
11840
  });
11820
11841
  }
11821
- if (viewport instanceof esm.VolumeViewport) {
11842
+ if ((0,getLegacyViewportType/* isOrthographicViewportType */.tO)(viewport)) {
11822
11843
  if (!displaySetInstanceUID) {
11823
11844
  const {
11824
11845
  viewports
@@ -12692,7 +12713,7 @@ function commandsModule({
12692
12713
  orientation
12693
12714
  }) => {
12694
12715
  const viewport = cornerstoneViewportService.getCornerstoneViewport(viewportId);
12695
- if (!viewport || viewport.type !== esm.Enums.ViewportType.ORTHOGRAPHIC) {
12716
+ if (!viewport || !(0,getLegacyViewportType/* isOrthographicViewportType */.tO)(viewport)) {
12696
12717
  console.warn('Orientation can only be set on volume viewports');
12697
12718
  return;
12698
12719
  }
@@ -12772,7 +12793,7 @@ function commandsModule({
12772
12793
  const {
12773
12794
  viewport
12774
12795
  } = enabledElement;
12775
- if (viewport instanceof esm.BaseVolumeViewport) {
12796
+ if ((0,getLegacyViewportType/* isVolumeViewportType */.rX)(viewport)) {
12776
12797
  const camera = viewport.getCamera();
12777
12798
  const rotAngle = rotation * Math.PI / 180;
12778
12799
  const rotMat = gl_matrix_esm/* mat4.identity */.pB.identity(new Float32Array(16));
@@ -19167,6 +19188,7 @@ function isAnyDisplaySetCommon(sourceDisplaySetUIDs, targetDisplaySetUIDs) {
19167
19188
 
19168
19189
 
19169
19190
 
19191
+
19170
19192
  const {
19171
19193
  createSynchronizer
19172
19194
  } = dist_esm.SynchronizerManager;
@@ -19236,7 +19258,7 @@ const segmentationRepresentationModifiedCallback = async (synchronizerInstance,
19236
19258
  }
19237
19259
 
19238
19260
  // Ensure the segmentation representation aligns with the target viewport type.
19239
- const type = viewport.type === esm.Enums.ViewportType.VOLUME_3D ? dist_esm.Enums.SegmentationRepresentations.Surface : segmentationRepresentationType ?? dist_esm.Enums.SegmentationRepresentations.Labelmap;
19261
+ const type = (0,getLegacyViewportType/* isVolume3DViewportType */.Ov)(viewport) ? dist_esm.Enums.SegmentationRepresentations.Surface : segmentationRepresentationType ?? dist_esm.Enums.SegmentationRepresentations.Labelmap;
19240
19262
  await segmentationService.addSegmentationRepresentation(targetViewportId, {
19241
19263
  segmentationId,
19242
19264
  type,
@@ -19535,6 +19557,7 @@ var _SegmentationService;
19535
19557
 
19536
19558
 
19537
19559
 
19560
+
19538
19561
  const {
19539
19562
  DefaultHistoryMemo: SegmentationService_DefaultHistoryMemo
19540
19563
  } = esm.utilities.HistoryMemo;
@@ -19820,7 +19843,7 @@ class SegmentationService extends src/* PubSubService */.Rc {
19820
19843
  }
19821
19844
  const colorLUTIndex = this._segmentationIdToColorLUTIndexMap.get(segmentationId);
19822
19845
  let isConverted = false;
19823
- const defaultRepresentationType = csViewport.type === dist_esm_enums.ViewportType.VOLUME_3D ? SURFACE : LABELMAP;
19846
+ const defaultRepresentationType = (0,getLegacyViewportType/* isVolume3DViewportType */.Ov)(csViewport) ? SURFACE : LABELMAP;
19824
19847
  let representationTypeToUse = type || defaultRepresentationType;
19825
19848
  if (representationTypeToUse === LABELMAP) {
19826
19849
  const {
@@ -20793,7 +20816,7 @@ class SegmentationService extends src/* PubSubService */.Rc {
20793
20816
  }, isVisible);
20794
20817
  }
20795
20818
  determineViewportAndSegmentationType(csViewport, segmentation) {
20796
- const isVolumeViewport = csViewport.type === dist_esm_enums.ViewportType.ORTHOGRAPHIC || csViewport.type === dist_esm_enums.ViewportType.VOLUME_3D;
20819
+ const isVolumeViewport = (0,getLegacyViewportType/* isVolumeViewportType */.rX)(csViewport);
20797
20820
  const isVolumeSegmentation = 'volumeId' in segmentation.representationData[LABELMAP];
20798
20821
  return {
20799
20822
  isVolumeViewport,
@@ -20814,7 +20837,7 @@ class SegmentationService extends src/* PubSubService */.Rc {
20814
20837
  };
20815
20838
  }
20816
20839
  async handleVolumeViewportCase(csViewport, segmentation, isVolumeSegmentation) {
20817
- if (csViewport.type === dist_esm_enums.ViewportType.VOLUME_3D) {
20840
+ if ((0,getLegacyViewportType/* isVolume3DViewportType */.Ov)(csViewport)) {
20818
20841
  return {
20819
20842
  representationTypeToUse: SURFACE,
20820
20843
  isConverted: false
@@ -21555,6 +21578,7 @@ function getCornerstoneOrientation(orientation) {
21555
21578
 
21556
21579
 
21557
21580
 
21581
+
21558
21582
  const Viewport_STACK = 'stack';
21559
21583
  const DEFAULT_TOOLGROUP_ID = 'default';
21560
21584
 
@@ -21569,7 +21593,7 @@ const dataContains = ({
21569
21593
  if (imageId && data.isCompositeStack && data.imageIds) {
21570
21594
  return !!data.imageIds.find(dataId => dataId === imageId);
21571
21595
  }
21572
- if (imageId && (data.volumeId || viewport instanceof esm.VolumeViewport)) {
21596
+ if (imageId && (data.volumeId || (0,getLegacyViewportType/* isOrthographicViewportType */.tO)(viewport))) {
21573
21597
  const isAcquisition = !!viewport.getCurrentImageId();
21574
21598
  if (!isAcquisition) {
21575
21599
  return false;
@@ -21810,15 +21834,25 @@ var _CornerstoneViewportService;
21810
21834
 
21811
21835
 
21812
21836
 
21837
+
21813
21838
  const CornerstoneViewportService_EVENTS = {
21814
21839
  VIEWPORT_DATA_CHANGED: 'event::cornerstoneViewportService:viewportDataChanged',
21815
21840
  VIEWPORT_VOLUMES_CHANGED: 'event::cornerstoneViewportService:viewportVolumesChanged'
21816
21841
  };
21817
21842
  const MIN_STACK_VIEWPORTS_TO_ENQUEUE_RESIZE = 12;
21818
21843
  const MIN_VOLUME_VIEWPORTS_TO_ENQUEUE_RESIZE = 6;
21844
+
21845
+ // Actor class names that represent a primary volume binding in a viewport.
21846
+ // Legacy ORTHOGRAPHIC / VOLUME_3D render the source volume as a 'vtkVolume'
21847
+ // actor. Under the GenericViewport-backed compat path (useGenericViewport),
21848
+ // the MPR slice render path emits 'vtkImageSlice' actors instead, so the
21849
+ // volume-set-vs-add optimization below must recognize both. (3D still uses
21850
+ // 'vtkVolume'.) Without this, the optimization silently no-ops and a full
21851
+ // setVolumes() teardown blanks MPR during SEG hydration.
21852
+ const VOLUME_ACTOR_CLASS_NAMES = new Set(['vtkVolume', 'vtkImageSlice']);
21819
21853
  function getVolumeActorReferencedIds(viewport) {
21820
21854
  const actors = viewport.getActors?.() ?? [];
21821
- return actors.filter(ac => ac.actor?.getClassName?.() === 'vtkVolume').map(ac => ac.referencedId).filter(Boolean);
21855
+ return actors.filter(ac => VOLUME_ACTOR_CLASS_NAMES.has(ac.actor?.getClassName?.() ?? '')).map(ac => ac.referencedId).filter(Boolean);
21822
21856
  }
21823
21857
  function volumeIdPrefixesMatch(existingIds, prefixLen, targetIds) {
21824
21858
  if (prefixLen > targetIds.length) {
@@ -21837,7 +21871,7 @@ function volumeIdPrefixesMatch(existingIds, prefixLen, targetIds) {
21837
21871
  */
21838
21872
  function viewportMatchesDesiredVolumePresentation(viewport, desiredViewportInfo) {
21839
21873
  const desiredType = desiredViewportInfo.getViewportType();
21840
- if (viewport.type !== desiredType) {
21874
+ if ((0,getLegacyViewportType/* getLegacyViewportType */.Gj)(viewport) !== desiredType) {
21841
21875
  return false;
21842
21876
  }
21843
21877
  return desiredType === esm.Enums.ViewportType.ORTHOGRAPHIC || desiredType === esm.Enums.ViewportType.VOLUME_3D;
@@ -22100,7 +22134,7 @@ class CornerstoneViewportService extends src/* PubSubService */.Rc {
22100
22134
  const viewportInfo = this.viewportsById.get(viewportId);
22101
22135
  return {
22102
22136
  viewportType: viewportInfo.getViewportType(),
22103
- viewReference: csViewport instanceof esm.VolumeViewport3D ? null : csViewport.getViewReference(),
22137
+ viewReference: (0,getLegacyViewportType/* isVolume3DViewportType */.Ov)(csViewport) ? null : csViewport.getViewReference(),
22104
22138
  viewPresentation: csViewport.getViewPresentation({
22105
22139
  pan: true,
22106
22140
  zoom: true
@@ -22125,7 +22159,7 @@ class CornerstoneViewportService extends src/* PubSubService */.Rc {
22125
22159
  }
22126
22160
  return properties;
22127
22161
  };
22128
- const properties = csViewport instanceof esm.BaseVolumeViewport ? new Map() : cleanProperties(csViewport.getProperties());
22162
+ const properties = (0,getLegacyViewportType/* isVolumeViewportType */.rX)(csViewport) ? new Map() : cleanProperties(csViewport.getProperties());
22129
22163
  if (properties instanceof Map) {
22130
22164
  const volumeIds = csViewport.getAllVolumeIds();
22131
22165
  volumeIds?.forEach(volumeId => {
@@ -22540,10 +22574,16 @@ class CornerstoneViewportService extends src/* PubSubService */.Rc {
22540
22574
  }
22541
22575
  async _setOtherViewport(viewport, viewportData, viewportInfo, _presentations = {}) {
22542
22576
  const [displaySet] = viewportData.data;
22543
- return viewport.setDataIds(displaySet.imageIds, {
22544
- groupId: displaySet.displaySetInstanceUID,
22545
- viewReference: viewportInfo.getViewReference()
22577
+ // CS3D's "redo viewports" replaced setDataIds with the generic
22578
+ // setDisplaySets({ displaySetId }) API; the legacy adapters key off
22579
+ // imageIds[0] as the displaySetId, so do the same here.
22580
+ await viewport.setDisplaySets({
22581
+ displaySetId: displaySet.imageIds[0]
22546
22582
  });
22583
+ const viewReference = viewportInfo.getViewReference();
22584
+ if (viewReference) {
22585
+ viewport.setViewReference(viewReference);
22586
+ }
22547
22587
  }
22548
22588
  async _setStackViewport(viewport, viewportData, viewportInfo, presentations = {}) {
22549
22589
  const displaySetOptions = viewportInfo.getDisplaySetOptions();
@@ -22836,7 +22876,7 @@ class CornerstoneViewportService extends src/* PubSubService */.Rc {
22836
22876
  if (backgroundDisplaySet.length !== 1) {
22837
22877
  throw new Error('Background display set not found');
22838
22878
  }
22839
- if (viewport.type === esm.Enums.ViewportType.VOLUME_3D) {
22879
+ if ((0,getLegacyViewportType/* isVolume3DViewportType */.Ov)(viewport)) {
22840
22880
  timeoutViewportCallback(() => {
22841
22881
  viewportGridService.setDisplaySetsForViewport({
22842
22882
  viewportId: viewport.id,
@@ -22972,7 +23012,7 @@ class CornerstoneViewportService extends src/* PubSubService */.Rc {
22972
23012
  const viewport = this.getCornerstoneViewport(viewportId);
22973
23013
  const viewportCamera = viewport.getCamera();
22974
23014
  let displaySetPromise;
22975
- if (viewport instanceof esm.VolumeViewport || viewport instanceof esm.VolumeViewport3D) {
23015
+ if ((0,getLegacyViewportType/* isVolumeViewportType */.rX)(viewport)) {
22976
23016
  displaySetPromise = this._setVolumeViewport(viewport, viewportData, viewportInfo).then(() => {
22977
23017
  if (keepCamera) {
22978
23018
  viewport.setCamera(viewportCamera);
@@ -22980,7 +23020,7 @@ class CornerstoneViewportService extends src/* PubSubService */.Rc {
22980
23020
  }
22981
23021
  });
22982
23022
  }
22983
- if (viewport instanceof esm.StackViewport) {
23023
+ if ((0,getLegacyViewportType/* isStackViewportType */.TF)(viewport)) {
22984
23024
  displaySetPromise = this._setStackViewport(viewport, viewportData, viewportInfo);
22985
23025
  }
22986
23026
  displaySetPromise.then(() => {
@@ -22991,13 +23031,13 @@ class CornerstoneViewportService extends src/* PubSubService */.Rc {
22991
23031
  });
22992
23032
  }
22993
23033
  _setDisplaySets(viewport, viewportData, viewportInfo, presentations = {}) {
22994
- if (viewport instanceof esm.StackViewport) {
23034
+ if ((0,getLegacyViewportType/* isStackViewportType */.TF)(viewport)) {
22995
23035
  return this._setStackViewport(viewport, viewportData, viewportInfo, presentations);
22996
23036
  }
22997
- if ([esm.VolumeViewport, esm.VolumeViewport3D].some(type => viewport instanceof type)) {
23037
+ if ((0,getLegacyViewportType/* isVolumeViewportType */.rX)(viewport)) {
22998
23038
  return this._setVolumeViewport(viewport, viewportData, viewportInfo, presentations);
22999
23039
  }
23000
- if (viewport instanceof esm.ECGViewport) {
23040
+ if ((0,getLegacyViewportType/* getLegacyViewportType */.Gj)(viewport) === esm.Enums.ViewportType.ECG) {
23001
23041
  return this._setEcgViewport(viewport, viewportData);
23002
23042
  }
23003
23043
  return this._setOtherViewport(viewport, viewportData, viewportInfo, presentations);
@@ -23133,7 +23173,7 @@ class CornerstoneViewportService extends src/* PubSubService */.Rc {
23133
23173
  const {
23134
23174
  properties
23135
23175
  } = lutPresentation;
23136
- if (viewport instanceof esm.BaseVolumeViewport) {
23176
+ if ((0,getLegacyViewportType/* isVolumeViewportType */.rX)(viewport)) {
23137
23177
  if (properties instanceof Map) {
23138
23178
  properties.forEach((propertiesEntry, volumeId) => {
23139
23179
  viewport.setProperties(propertiesEntry, volumeId);
@@ -23179,7 +23219,7 @@ class CornerstoneViewportService extends src/* PubSubService */.Rc {
23179
23219
  Labelmap,
23180
23220
  Surface
23181
23221
  } = dist_esm.Enums.SegmentationRepresentations;
23182
- const isVolume3D = viewport.type === esm.Enums.ViewportType.VOLUME_3D;
23222
+ const isVolume3D = (0,getLegacyViewportType/* isVolume3DViewportType */.Ov)(viewport);
23183
23223
 
23184
23224
  // Determine the appropriate segmentation representation for the viewport.
23185
23225
  // If the current type is Surface but the viewport is not 3D, fallback to Labelmap.
@@ -24783,9 +24823,13 @@ const ViewportWindowLevel = ({
24783
24823
  const displaySets = (0,src/* useActiveViewportDisplaySets */.BZ)();
24784
24824
  const getViewportsWithVolumeIds = (0,react.useCallback)(volumeIds => {
24785
24825
  const renderingEngine = cornerstoneViewportService.getRenderingEngine();
24786
- const viewports = renderingEngine.getVolumeViewports();
24826
+ // getVolumeViewports() was removed in the GenericViewport architecture
24827
+ // (a PLANAR_NEXT viewport can be volume-capable without being a VolumeViewport).
24828
+ // Official replacement: getViewports() + the viewportSupportsVolumeCompatibility
24829
+ // capability guard (cornerstone codemod cornerstone3d/5/generic-viewport).
24830
+ const viewports = renderingEngine.getViewports().filter(esm.utilities.viewportSupportsVolumeCompatibility);
24787
24831
  return viewports.filter(vp => {
24788
- const viewportVolumeIds = vp instanceof esm.BaseVolumeViewport ? vp.getAllVolumeIds() : [];
24832
+ const viewportVolumeIds = vp.getAllVolumeIds();
24789
24833
  return volumeIds.length === viewportVolumeIds.length && volumeIds.every(volumeId => viewportVolumeIds.includes(volumeId));
24790
24834
  });
24791
24835
  }, [cornerstoneViewportService]);
@@ -24849,7 +24893,7 @@ const ViewportWindowLevel = ({
24849
24893
  if (!viewport) {
24850
24894
  return;
24851
24895
  }
24852
- const viewportVolumeIds = viewport instanceof esm.BaseVolumeViewport ? viewport.getAllVolumeIds() : [];
24896
+ const viewportVolumeIds = esm.utilities.viewportSupportsVolumeId(viewport) ? viewport.getAllVolumeIds() : [];
24853
24897
  const viewports = getViewportsWithVolumeIds(viewportVolumeIds);
24854
24898
  viewports.forEach(vp => {
24855
24899
  vp.setProperties({
@@ -27381,6 +27425,68 @@ function getDataIdForViewport(viewport, displaySetInstanceUID) {
27381
27425
  return volumeIds.length > 0 ? volumeIds.find(id => id.includes(displaySetInstanceUID)) ?? undefined : undefined;
27382
27426
  }
27383
27427
 
27428
+ /***/ },
27429
+
27430
+ /***/ 62739
27431
+ (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
27432
+
27433
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
27434
+ /* harmony export */ Gj: () => (/* binding */ getLegacyViewportType),
27435
+ /* harmony export */ Ov: () => (/* binding */ isVolume3DViewportType),
27436
+ /* harmony export */ TF: () => (/* binding */ isStackViewportType),
27437
+ /* harmony export */ rX: () => (/* binding */ isVolumeViewportType),
27438
+ /* harmony export */ tO: () => (/* binding */ isOrthographicViewportType)
27439
+ /* harmony export */ });
27440
+ /* harmony import */ var _cornerstonejs_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(15327);
27441
+
27442
+ const {
27443
+ ViewportType
27444
+ } = _cornerstonejs_core__WEBPACK_IMPORTED_MODULE_0__.Enums;
27445
+ /**
27446
+ * Returns the legacy/requested viewport type, transparent across GenericViewport
27447
+ * compatibility remapping.
27448
+ *
27449
+ * When `rendering.useGenericViewport` is enabled, a viewport requested as
27450
+ * `STACK` or `ORTHOGRAPHIC` has runtime `viewport.type === PLANAR_NEXT`, and a
27451
+ * `VOLUME_3D` request has `VOLUME_3D_NEXT`. The rendering engine records the
27452
+ * original request on `viewport.requestedType`, which this reads. Falls back to
27453
+ * `viewport.type` for legacy/non-remapped viewports (and older cornerstone builds
27454
+ * that do not populate `requestedType`).
27455
+ *
27456
+ * Use this instead of `viewport instanceof StackViewport/VolumeViewport/...` or
27457
+ * raw `viewport.type === ViewportType.X` when branching on the legacy viewport
27458
+ * type. For "does this viewport support operation X" questions, prefer the
27459
+ * cornerstone capability guards (`utilities.viewportSupports*`) instead.
27460
+ */
27461
+ function getLegacyViewportType(viewport) {
27462
+ const vp = viewport;
27463
+ return vp?.requestedType ?? vp?.type;
27464
+ }
27465
+
27466
+ /** Legacy STACK viewport (image stack). Replaces `instanceof StackViewport`. */
27467
+ function isStackViewportType(viewport) {
27468
+ return getLegacyViewportType(viewport) === ViewportType.STACK;
27469
+ }
27470
+
27471
+ /** Legacy ORTHOGRAPHIC (MPR) viewport. Replaces `instanceof VolumeViewport`. */
27472
+ function isOrthographicViewportType(viewport) {
27473
+ return getLegacyViewportType(viewport) === ViewportType.ORTHOGRAPHIC;
27474
+ }
27475
+
27476
+ /** Legacy VOLUME_3D viewport. Replaces `instanceof VolumeViewport3D`. */
27477
+ function isVolume3DViewportType(viewport) {
27478
+ return getLegacyViewportType(viewport) === ViewportType.VOLUME_3D;
27479
+ }
27480
+
27481
+ /**
27482
+ * Legacy ORTHOGRAPHIC or VOLUME_3D viewport (i.e. a `BaseVolumeViewport`).
27483
+ * Replaces `instanceof BaseVolumeViewport`.
27484
+ */
27485
+ function isVolumeViewportType(viewport) {
27486
+ const legacyType = getLegacyViewportType(viewport);
27487
+ return legacyType === ViewportType.ORTHOGRAPHIC || legacyType === ViewportType.VOLUME_3D;
27488
+ }
27489
+
27384
27490
  /***/ }
27385
27491
 
27386
27492
  }]);