@ohif/app 3.13.0-beta.122 → 3.13.0-beta.124

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 (49) hide show
  1. package/dist/{1206.bundle.e04ca1efe6f987ba.js → 1206.bundle.7a21a6529153cd92.js} +2 -2
  2. package/dist/{1602.bundle.cd2e106bd1438fbb.js → 1602.bundle.24b9864929b729f6.js} +6 -6
  3. package/dist/{2493.bundle.f3b6a64d158365da.js → 2493.bundle.d16ea70ddcc1fb6b.js} +68 -12
  4. package/dist/{7231.bundle.1063d727ad99108a.js → 2623.bundle.996244ad1ee6448d.js} +144 -35
  5. package/dist/{2779.bundle.5dc197604cc6ef42.js → 2779.bundle.380bb40d48e1cf2a.js} +2 -2
  6. package/dist/{3330.bundle.b1297ef8c94e5440.js → 3330.bundle.1b8bc8f7c4071336.js} +46 -2
  7. package/dist/{3500.bundle.153e80b55f1dedb4.js → 3500.bundle.d7e34e8f22c86274.js} +1 -1
  8. package/dist/{3568.bundle.45dc681ef6890166.js → 3568.bundle.9aa4b4b27294ff6d.js} +41 -10
  9. package/dist/{3760.bundle.040c5960d2324a23.js → 3760.bundle.b45b0dae2238e5ca.js} +8 -8
  10. package/dist/{5189.bundle.ea191ea99047fd6f.js → 5189.bundle.84584748945c30ec.js} +4 -4
  11. package/dist/{5448.bundle.5686ebb99c379f64.js → 5448.bundle.2f95037652efed71.js} +2 -2
  12. package/dist/{5910.bundle.0f19608f3e76859b.js → 5910.bundle.c7e18d6fa8052576.js} +4 -4
  13. package/dist/{6495.bundle.a6764fdb8c0c252f.js → 6495.bundle.5ad5a10d2c9dcba1.js} +48 -3
  14. package/dist/{7248.bundle.ffc730f7131663b5.js → 7248.bundle.ff49139ac01030d9.js} +28 -10
  15. package/dist/{7499.bundle.cf7e3863a046ea45.js → 7499.bundle.85bfb09dd02d7520.js} +76 -31
  16. package/dist/{781.bundle.f8fe016b3c6f7247.js → 781.bundle.bf60b1836cf34a09.js} +102 -47
  17. package/dist/{8423.bundle.edee0022549d0a69.js → 8423.bundle.f5f24c52db0bbeeb.js} +2 -2
  18. package/dist/{5642.bundle.98e17a4413db6ef1.js → 8478.bundle.163d258bf75a0aed.js} +32847 -7919
  19. package/dist/{8668.bundle.0e47f7231aa07da2.js → 8668.bundle.e254939790f776e2.js} +44 -0
  20. package/dist/{8832.bundle.d5469e59f146f5ab.js → 8832.bundle.d76327dbbeb700f3.js} +5 -5
  21. package/dist/{2343.bundle.2f0d1dcc2c98c6ef.js → 89.bundle.631d496d9c26208d.js} +16345 -1020
  22. package/dist/{899.bundle.50c16f860acbc848.js → 899.bundle.ba3210c3df4f2185.js} +4 -4
  23. package/dist/{9068.bundle.95f1e638ef694ea9.js → 9068.bundle.a54a83cf310fed3f.js} +4 -4
  24. package/dist/{9415.bundle.4631e14c554852b8.js → 9415.bundle.d6212220bebc52d1.js} +2 -2
  25. package/dist/app-config.js +16 -0
  26. package/dist/{app.bundle.41cbf372286f0f33.js → app.bundle.835e751aa267d5b6.js} +184416 -184180
  27. package/dist/app.bundle.css +1 -1
  28. package/dist/{compute.bundle.9cc3697d07fbb082.js → compute.bundle.690de60973ccebc4.js} +1 -1
  29. package/dist/index.html +1 -1
  30. package/dist/{polySeg.bundle.a526954fc2fed311.js → polySeg.bundle.369c7996934b22e3.js} +1 -1
  31. package/dist/sw.js +1 -1
  32. package/package.json +6 -6
  33. package/dist/8432.bundle.7d5ebe1ed1610bc3.js +0 -24931
  34. package/dist/8595.css +0 -2
  35. package/dist/9402.bundle.d6f2b78374472970.js +0 -13041
  36. /package/dist/{100.bundle.0d3d69d5df0349ed.js → 100.bundle.cdcc5d2b1941765c.js} +0 -0
  37. /package/dist/{1180.bundle.7e332fa34109403e.js → 1180.bundle.54ba435527d0df45.js} +0 -0
  38. /package/dist/{1483.bundle.2b4770a9bcbc979a.js → 1483.bundle.2faed979a01ea8d1.js} +0 -0
  39. /package/dist/{7231.css → 2623.css} +0 -0
  40. /package/dist/{4556.bundle.51ef7351e956466c.js → 4556.bundle.2ed6014424141e16.js} +0 -0
  41. /package/dist/{4683.bundle.21c60514c9d785fa.js → 4683.bundle.50ee653f21f90988.js} +0 -0
  42. /package/dist/{5696.bundle.e69c9f340e70968a.js → 5696.bundle.d69220aab3ba0b86.js} +0 -0
  43. /package/dist/{6749.bundle.454ea7ca21d3c0a8.js → 6749.bundle.879ed481e4259338.js} +0 -0
  44. /package/dist/{8492.bundle.b065c8a96d49950a.js → 8492.bundle.7f8ae6ac4719730e.js} +0 -0
  45. /package/dist/{9116.bundle.8f9fc67d1fb2ac81.js → 9116.bundle.b963a7a271c7ec9b.js} +0 -0
  46. /package/dist/{9290.bundle.52e56719bbca68ff.js → 9290.bundle.96adb43569d5319b.js} +0 -0
  47. /package/dist/{9383.bundle.ec44c452ccc23e93.js → 9383.bundle.885123e100c1b477.js} +0 -0
  48. /package/dist/{9437.bundle.72f5fd25db7e85f2.js → 9437.bundle.bcae5965a3a33b5e.js} +0 -0
  49. /package/dist/{9560.bundle.517f0ef7ee3a20bf.js → 9560.bundle.4c9bc48e09c0bae1.js} +0 -0
@@ -3174,6 +3174,8 @@ async function addVolumesAsIndependentComponents({ viewport, volumeInputs, segme
3174
3174
  }
3175
3175
  viewport.removeActors([uid]);
3176
3176
  const oldMapper = actor.getMapper();
3177
+ const sharedImageData = oldMapper.getInputData();
3178
+ const originalScalars = sharedImageData.getPointData().getScalars() ?? null;
3177
3179
  const mapper = (0,esm.convertMapperToNotSharedMapper)(oldMapper);
3178
3180
  actor.setMapper(mapper);
3179
3181
  mapper.setBlendMode(esm.Enums.BlendModes.LABELMAP_EDGE_PROJECTION_BLEND);
@@ -3190,9 +3192,16 @@ async function addVolumesAsIndependentComponents({ viewport, volumeInputs, segme
3190
3192
  .getProperty()
3191
3193
  .getIndependentComponents();
3192
3194
  actor.getProperty().setIndependentComponents(true);
3195
+ const oldUseLabelOutline = actor.getProperty().getUseLabelOutline();
3196
+ const oldLabelOutlineOpacity = actor.getProperty().getLabelOutlineOpacity();
3197
+ const oldLabelOutlineThickness = actor
3198
+ .getProperty()
3199
+ .getLabelOutlineThickness();
3200
+ const representationUID = volumeInputArray[0].representationUID ??
3201
+ `${segmentationId}-${enums.SegmentationRepresentations.Labelmap}`;
3193
3202
  viewport.addActor({
3194
3203
  ...defaultActor,
3195
- representationUID: `${segmentationId}-${enums.SegmentationRepresentations.Labelmap}`,
3204
+ representationUID,
3196
3205
  });
3197
3206
  internalCache.set(uid, {
3198
3207
  added: true,
@@ -3204,7 +3213,7 @@ async function addVolumesAsIndependentComponents({ viewport, volumeInputs, segme
3204
3213
  preLoad: load,
3205
3214
  });
3206
3215
  function onSegmentationDataModified(evt) {
3207
- const { segmentationId } = evt.detail;
3216
+ const { segmentationId, modifiedSlicesToUse } = evt.detail;
3208
3217
  const { representationData } = (0,getSegmentation/* .getSegmentation */.T)(segmentationId);
3209
3218
  const { volumeId: segVolumeId } = representationData.Labelmap;
3210
3219
  if (segVolumeId !== segImageVolume.volumeId) {
@@ -3214,19 +3223,30 @@ async function addVolumesAsIndependentComponents({ viewport, volumeInputs, segme
3214
3223
  const segVoxelManager = segmentationVolume.voxelManager;
3215
3224
  const imageData = mapper.getInputData();
3216
3225
  const array = imageData.getPointData().getArray(0);
3217
- const baseData = array.getData();
3226
+ const combinedData = array.getData();
3218
3227
  const newComp = 2;
3219
3228
  const dims = segImageData.getDimensions();
3220
- const slices = Array.from({ length: dims[2] }, (_, i) => i);
3229
+ const sliceSize = dims[0] * dims[1];
3230
+ const slices = modifiedSlicesToUse?.length
3231
+ ? modifiedSlicesToUse
3232
+ : Array.from({ length: dims[2] }, (_, i) => i);
3221
3233
  for (const z of slices) {
3222
- for (let y = 0; y < dims[1]; ++y) {
3223
- for (let x = 0; x < dims[0]; ++x) {
3224
- const iTuple = x + dims[0] * (y + dims[1] * z);
3225
- baseData[iTuple * newComp + 1] = segVoxelManager.getAtIndex(iTuple);
3234
+ const sliceStart = z * sliceSize;
3235
+ const sliceImage = esm.cache.getImage(segmentationVolume.imageIds?.[z]);
3236
+ const sliceData = sliceImage?.voxelManager?.getScalarData?.();
3237
+ if (sliceData?.length === sliceSize) {
3238
+ for (let i = 0; i < sliceSize; ++i) {
3239
+ combinedData[(sliceStart + i) * newComp + 1] = sliceData[i];
3240
+ }
3241
+ }
3242
+ else {
3243
+ for (let i = 0; i < sliceSize; ++i) {
3244
+ const iTuple = sliceStart + i;
3245
+ combinedData[iTuple * newComp + 1] = segVoxelManager.getAtIndex(iTuple);
3226
3246
  }
3227
3247
  }
3228
3248
  }
3229
- array.setData(baseData);
3249
+ array.setData(combinedData);
3230
3250
  imageData.modified();
3231
3251
  viewport.render();
3232
3252
  }
@@ -3235,7 +3255,7 @@ async function addVolumesAsIndependentComponents({ viewport, volumeInputs, segme
3235
3255
  if (evt.detail.viewportId !== viewport.id) {
3236
3256
  return;
3237
3257
  }
3238
- esm.eventTarget.removeEventListener(enums.Events.SEGMENTATION_DATA_MODIFIED, onSegmentationDataModified);
3258
+ esm.eventTarget.removeEventListenerDebounced(enums.Events.SEGMENTATION_DATA_MODIFIED, onSegmentationDataModified);
3239
3259
  esm.eventTarget.removeEventListener(enums.Events.SEGMENTATION_REPRESENTATION_REMOVED, onSegmentationRepresentationRemoved);
3240
3260
  const actorEntry = viewport.getActor(uid);
3241
3261
  if (actorEntry) {
@@ -3246,11 +3266,22 @@ async function addVolumesAsIndependentComponents({ viewport, volumeInputs, segme
3246
3266
  return;
3247
3267
  }
3248
3268
  actor.setMapper(oldMapper);
3269
+ const pointData = sharedImageData.getPointData();
3270
+ if (originalScalars) {
3271
+ pointData.setScalars(originalScalars);
3272
+ }
3273
+ else {
3274
+ pointData.removeArray('Pixels');
3275
+ }
3276
+ sharedImageData.modified();
3249
3277
  actor.getProperty().setColorMixPreset(oldColorMixPreset);
3250
3278
  actor
3251
3279
  .getProperty()
3252
3280
  .setForceNearestInterpolation(1, oldForceNearestInterpolation);
3253
3281
  actor.getProperty().setIndependentComponents(oldIndependentComponents);
3282
+ actor.getProperty().setUseLabelOutline(oldUseLabelOutline);
3283
+ actor.getProperty().setLabelOutlineOpacity(oldLabelOutlineOpacity);
3284
+ actor.getProperty().setLabelOutlineThickness(oldLabelOutlineThickness);
3254
3285
  viewport.addActor({
3255
3286
  ...defaultActor,
3256
3287
  });
@@ -111,8 +111,8 @@ var prop_types_default = /*#__PURE__*/__webpack_require__.n(prop_types);
111
111
  var es = __webpack_require__(29084);
112
112
  // EXTERNAL MODULE: ../../../node_modules/@xstate/react/es/index.js + 8 modules
113
113
  var react_es = __webpack_require__(12269);
114
- // EXTERNAL MODULE: ../../ui-next/src/index.ts + 3682 modules
115
- var src = __webpack_require__(39987);
114
+ // EXTERNAL MODULE: ../../ui-next/src/index.ts + 3684 modules
115
+ var src = __webpack_require__(42255);
116
116
  ;// CONCATENATED MODULE: ../../../extensions/measurement-tracking/src/contexts/TrackedMeasurementsContext/measurementTrackingMachine.js
117
117
 
118
118
  const RESPONSE = {
@@ -1087,8 +1087,8 @@ var src = __webpack_require__(50679);
1087
1087
  var thumbnailNoImageModalities = __webpack_require__(88555);
1088
1088
  // EXTERNAL MODULE: ../../../extensions/default/src/Panels/StudyBrowser/PanelStudyBrowser.tsx + 3 modules
1089
1089
  var PanelStudyBrowser = __webpack_require__(36341);
1090
- // EXTERNAL MODULE: ../../ui-next/src/index.ts + 3682 modules
1091
- var ui_next_src = __webpack_require__(39987);
1090
+ // EXTERNAL MODULE: ../../ui-next/src/index.ts + 3684 modules
1091
+ var ui_next_src = __webpack_require__(42255);
1092
1092
  ;// CONCATENATED MODULE: ../../../extensions/measurement-tracking/src/panels/PanelStudyBrowserTracking/untrackSeriesModal.tsx
1093
1093
 
1094
1094
 
@@ -1267,8 +1267,8 @@ function getImageSrcFromImageId(cornerstone, imageId) {
1267
1267
  });
1268
1268
  }
1269
1269
  /* export default */ const PanelStudyBrowserTracking_getImageSrcFromImageId = (getImageSrcFromImageId);
1270
- // EXTERNAL MODULE: ../../../extensions/default/src/index.ts + 147 modules
1271
- var default_src = __webpack_require__(7825);
1270
+ // EXTERNAL MODULE: ../../../extensions/default/src/index.ts + 148 modules
1271
+ var default_src = __webpack_require__(50904);
1272
1272
  ;// CONCATENATED MODULE: ../../../extensions/measurement-tracking/src/panels/PanelStudyBrowserTracking/index.tsx
1273
1273
 
1274
1274
  //
@@ -1329,8 +1329,8 @@ function _createGetImageSrcFromImageIdFn(extensionManager) {
1329
1329
  }
1330
1330
  }
1331
1331
  /* export default */ const panels_PanelStudyBrowserTracking = (WrappedPanelStudyBrowserTracking);
1332
- // EXTERNAL MODULE: ../../../extensions/cornerstone/src/index.tsx + 200 modules
1333
- var cornerstone_src = __webpack_require__(86714);
1332
+ // EXTERNAL MODULE: ../../../extensions/cornerstone/src/index.tsx + 211 modules
1333
+ var cornerstone_src = __webpack_require__(75609);
1334
1334
  ;// CONCATENATED MODULE: ../../../extensions/measurement-tracking/src/panels/PanelMeasurementTableTracking.tsx
1335
1335
  function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
1336
1336
 
@@ -11,8 +11,8 @@ __webpack_require__.d(__webpack_exports__, {
11
11
 
12
12
  // EXTERNAL MODULE: ../../../node_modules/react/index.js
13
13
  var react = __webpack_require__(86326);
14
- // EXTERNAL MODULE: ../../../extensions/default/src/index.ts + 147 modules
15
- var src = __webpack_require__(7825);
14
+ // EXTERNAL MODULE: ../../../extensions/default/src/index.ts + 148 modules
15
+ var src = __webpack_require__(50904);
16
16
  ;// CONCATENATED MODULE: ../../../extensions/dicom-microscopy/src/DicomMicroscopyViewport.css
17
17
  // extracted by css-extract-rspack-plugin
18
18
 
@@ -46,8 +46,8 @@ const listComponentGenerator = props => {
46
46
  ;// CONCATENATED MODULE: ../../../extensions/dicom-microscopy/src/components/ViewportOverlay/ViewportOverlay.css
47
47
  // extracted by css-extract-rspack-plugin
48
48
 
49
- // EXTERNAL MODULE: ../../ui-next/src/index.ts + 3682 modules
50
- var ui_next_src = __webpack_require__(39987);
49
+ // EXTERNAL MODULE: ../../ui-next/src/index.ts + 3684 modules
50
+ var ui_next_src = __webpack_require__(42255);
51
51
  // EXTERNAL MODULE: ../../../node_modules/moment/moment.js
52
52
  var moment = __webpack_require__(14867);
53
53
  var moment_default = /*#__PURE__*/__webpack_require__.n(moment);
@@ -8,8 +8,8 @@ __webpack_require__.d(__webpack_exports__, {
8
8
  /* import */ var prop_types__rspack_import_0 = __webpack_require__(97598);
9
9
  /* import */ var prop_types__rspack_import_0_default = /*#__PURE__*/__webpack_require__.n(prop_types__rspack_import_0);
10
10
  /* import */ var react__rspack_import_1 = __webpack_require__(86326);
11
- /* import */ var _ohif_ui_next__rspack_import_2 = __webpack_require__(39987);
12
- /* import */ var _ohif_extension_cornerstone__rspack_import_3 = __webpack_require__(86714);
11
+ /* import */ var _ohif_ui_next__rspack_import_2 = __webpack_require__(42255);
12
+ /* import */ var _ohif_extension_cornerstone__rspack_import_3 = __webpack_require__(75609);
13
13
  function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
14
14
 
15
15
 
@@ -14,10 +14,10 @@ var react = __webpack_require__(86326);
14
14
  // EXTERNAL MODULE: ../../../node_modules/prop-types/index.js
15
15
  var prop_types = __webpack_require__(97598);
16
16
  var prop_types_default = /*#__PURE__*/__webpack_require__.n(prop_types);
17
- // EXTERNAL MODULE: ../../ui-next/src/index.ts + 3682 modules
18
- var src = __webpack_require__(39987);
19
- // EXTERNAL MODULE: ../../../extensions/cornerstone/src/index.tsx + 200 modules
20
- var cornerstone_src = __webpack_require__(86714);
17
+ // EXTERNAL MODULE: ../../ui-next/src/index.ts + 3684 modules
18
+ var src = __webpack_require__(42255);
19
+ // EXTERNAL MODULE: ../../../extensions/cornerstone/src/index.tsx + 211 modules
20
+ var cornerstone_src = __webpack_require__(75609);
21
21
  ;// CONCATENATED MODULE: ../../../extensions/cornerstone-dicom-rt/src/utils/promptHydrateRT.ts
22
22
 
23
23
  function promptHydrateRT({
@@ -4333,7 +4333,7 @@ const onSegmentationDataModified = function (evt) {
4333
4333
  if (representationData.Labelmap) {
4334
4334
  (0,_labelmap_onLabelmapSegmentationDataModified_js__rspack_import_1/* ["default"] */.A)(evt);
4335
4335
  }
4336
- (0,_stateManagement_segmentation_SegmentationRenderingEngine_js__rspack_import_0/* .triggerSegmentationRenderBySegmentationId */.fy)(segmentationId);
4336
+ (0,_stateManagement_segmentation_SegmentationRenderingEngine_js__rspack_import_0/* .triggerSegmentationRenderForModified */.X8)(segmentationId);
4337
4337
  };
4338
4338
  /* export default */ const __rspack_default_export = (onSegmentationDataModified);
4339
4339
 
@@ -5060,7 +5060,7 @@ __webpack_require__.d(__webpack_exports__, {
5060
5060
  store: () => (/* reexport module object */ _store_index_js__rspack_import_1),
5061
5061
  synchronizers: () => (/* reexport module object */ _synchronizers_index_js__rspack_import_5),
5062
5062
  utilities: () => (/* reexport module object */ _utilities_index_js__rspack_import_7),
5063
- version: () => (/* reexport safe */ (/* inlined export _version_js__rspack_import_4 */"5.4.13"))
5063
+ version: () => (/* reexport safe */ (/* inlined export _version_js__rspack_import_4 */"5.4.17"))
5064
5064
  });
5065
5065
  /* import */ var _init_js__rspack_import_0 = __webpack_require__(70210);
5066
5066
  /* import */ var _store_index_js__rspack_import_1 = __webpack_require__(37872);
@@ -6291,6 +6291,7 @@ __webpack_require__.d(__webpack_exports__, {
6291
6291
  },
6292
6292
  88330(__unused_rspack___webpack_module__, __webpack_exports__, __webpack_require__) {
6293
6293
  __webpack_require__.d(__webpack_exports__, {
6294
+ X8: () => (triggerSegmentationRenderForModified),
6294
6295
  fy: () => (triggerSegmentationRenderBySegmentationId),
6295
6296
  h6: () => (triggerSegmentationRender)
6296
6297
  });
@@ -6475,6 +6476,50 @@ function triggerSegmentationRender(viewportId) {
6475
6476
  function triggerSegmentationRenderBySegmentationId(segmentationId) {
6476
6477
  segmentationRenderingEngine.renderSegmentation(segmentationId);
6477
6478
  }
6479
+ const DEFERRED_SEGMENTATION_RENDER_DELAY_MS = 240;
6480
+ const deferredSegmentationRenderTimers = new Map();
6481
+ function isProjectionHeavySegmentationViewport(viewport) {
6482
+ const blendMode = viewport.getBlendMode?.();
6483
+ if (blendMode === _cornerstonejs_core__rspack_import_0.Enums.BlendModes.LABELMAP_EDGE_PROJECTION_BLEND) {
6484
+ return true;
6485
+ }
6486
+ const planarViewport = viewport;
6487
+ if (typeof planarViewport.getDisplaySetPresentation !== 'function') {
6488
+ return false;
6489
+ }
6490
+ const dataIds = [];
6491
+ const sourceDataId = planarViewport.getSourceDataId?.();
6492
+ if (sourceDataId) {
6493
+ dataIds.push(sourceDataId);
6494
+ }
6495
+ planarViewport.getActors?.().forEach((actorEntry) => {
6496
+ if (actorEntry.representationUID) {
6497
+ dataIds.push(String(actorEntry.representationUID));
6498
+ }
6499
+ });
6500
+ return dataIds.some((dataId) => (planarViewport.getDisplaySetPresentation(dataId)?.slabThickness ?? 0) > 0);
6501
+ }
6502
+ function triggerSegmentationRenderForModified(segmentationId) {
6503
+ const viewportIds = segmentationRenderingEngine._getViewportIdsForSegmentation(segmentationId);
6504
+ viewportIds.forEach((viewportId) => {
6505
+ const { viewport } = (0,_cornerstonejs_core__rspack_import_0.getEnabledElementByViewportId)(viewportId) || {};
6506
+ if (!viewport) {
6507
+ return;
6508
+ }
6509
+ if (!isProjectionHeavySegmentationViewport(viewport)) {
6510
+ segmentationRenderingEngine.renderSegmentationsForViewport(viewportId);
6511
+ return;
6512
+ }
6513
+ const existingTimer = deferredSegmentationRenderTimers.get(viewportId);
6514
+ if (existingTimer !== undefined) {
6515
+ clearTimeout(existingTimer);
6516
+ }
6517
+ deferredSegmentationRenderTimers.set(viewportId, setTimeout(() => {
6518
+ deferredSegmentationRenderTimers.delete(viewportId);
6519
+ segmentationRenderingEngine.renderSegmentationsForViewport(viewportId);
6520
+ }, DEFERRED_SEGMENTATION_RENDER_DELAY_MS));
6521
+ });
6522
+ }
6478
6523
  const segmentationRenderingEngine = new SegmentationRenderingEngine();
6479
6524
 
6480
6525
 
@@ -45750,7 +45795,7 @@ __webpack_require__.d(__webpack_exports__, {
45750
45795
 
45751
45796
  },
45752
45797
  80274() {
45753
- const version = '5.4.13';
45798
+ const version = '5.4.17';
45754
45799
 
45755
45800
 
45756
45801
  },
@@ -65,8 +65,8 @@ var react = __webpack_require__(86326);
65
65
  var src = __webpack_require__(50679);
66
66
  // EXTERNAL MODULE: ../../i18n/src/index.js + 300 modules
67
67
  var i18n_src = __webpack_require__(90119);
68
- // EXTERNAL MODULE: ../../../extensions/cornerstone/src/index.tsx + 200 modules
69
- var cornerstone_src = __webpack_require__(86714);
68
+ // EXTERNAL MODULE: ../../../extensions/cornerstone/src/index.tsx + 211 modules
69
+ var cornerstone_src = __webpack_require__(75609);
70
70
  // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/adapters/dist/esm/index.js + 83 modules
71
71
  var esm = __webpack_require__(86186);
72
72
  // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/tools/dist/esm/index.js
@@ -1452,12 +1452,14 @@ function hydrateStructuredReport({
1452
1452
  // For 3d annotations there are no image IDs,
1453
1453
  // so we need to find the display sets by frame of reference to get the SeriesInstanceUIDs
1454
1454
  const frameOfReferenceUIDs = getFrameOfReferenceUIDs(hydratableMeasurementsInSR, sopInstanceUIDToImageId);
1455
+ const displaySetsByFrameOfReferenceUID = new Map();
1455
1456
  for (const FrameOfReferenceUID of frameOfReferenceUIDs) {
1456
1457
  const displaySetsFOR = displaySetService.getDisplaySetsBy(ds => ds.FrameOfReferenceUID === FrameOfReferenceUID && !ds.isDerivedDisplaySet);
1457
- const ds = chooseDisplaySet(displaySetsFOR, FrameOfReferenceUID);
1458
+ const ds = getReferencedDisplaySet(displaySet, displaySetsFOR, FrameOfReferenceUID, displaySetService);
1458
1459
  if (!ds) {
1459
1460
  continue;
1460
1461
  }
1462
+ displaySetsByFrameOfReferenceUID.set(FrameOfReferenceUID, ds);
1461
1463
  if (!SeriesInstanceUIDs.includes(ds.SeriesInstanceUID)) {
1462
1464
  SeriesInstanceUIDs.push(ds.SeriesInstanceUID);
1463
1465
  }
@@ -1480,7 +1482,7 @@ function hydrateStructuredReport({
1480
1482
  const frameNumber = toolData.annotation.data && toolData.annotation.data.frameNumber || 1;
1481
1483
  const imageId = sopInstanceUIDToImageId[`${toolData.sopInstanceUid}:${frameNumber}`];
1482
1484
  if (!imageId) {
1483
- return getReferenceData3D(toolData, servicesManager);
1485
+ return getReferenceData3D(toolData, servicesManager, displaySetsByFrameOfReferenceUID);
1484
1486
  }
1485
1487
  const instance = core_dist_esm.metaData.get('instance', imageId);
1486
1488
  const {
@@ -1602,21 +1604,37 @@ function chooseDisplaySet(displaySets, reference) {
1602
1604
  console.warn('No display set found for', reference);
1603
1605
  return;
1604
1606
  }
1605
- if (displaySets.length === 1) {
1606
- return displaySets[0];
1607
+ const sortedDisplaySets = src/* ["default"].utils.sortDisplaySetsCopy */.Ay.utils.sortDisplaySetsCopy(displaySets);
1608
+ if (sortedDisplaySets.length === 1) {
1609
+ return sortedDisplaySets[0];
1607
1610
  }
1608
- const volumeDs = displaySets.find(ds => ds.isReconstructable);
1611
+ const volumeDs = sortedDisplaySets.find(ds => ds.isReconstructable);
1609
1612
  if (volumeDs) {
1610
1613
  return volumeDs;
1611
1614
  }
1612
- return displaySets[0];
1615
+ return sortedDisplaySets[0];
1616
+ }
1617
+
1618
+ /**
1619
+ * SCOORD3D only identifies a frame of reference, so many series can be valid
1620
+ * candidates. The SR loader has already selected and recorded a stable display
1621
+ * set for each measurement. Reuse that selection during hydration so the
1622
+ * viewport series and annotation volume cannot depend on display-set load order.
1623
+ */
1624
+ function getReferencedDisplaySet(srDisplaySet, displaySets, FrameOfReferenceUID, displaySetService) {
1625
+ const referencedDisplaySetInstanceUID = srDisplaySet.measurements?.find(measurement => measurement.coords?.some(coord => coord.ValueType === 'SCOORD3D' && coord.ReferencedFrameOfReferenceSequence === FrameOfReferenceUID))?.displaySetInstanceUID;
1626
+ const referencedDisplaySet = referencedDisplaySetInstanceUID ? displaySetService.getDisplaySetByUID(referencedDisplaySetInstanceUID) : undefined;
1627
+ if (referencedDisplaySet?.FrameOfReferenceUID === FrameOfReferenceUID && !referencedDisplaySet.isDerivedDisplaySet) {
1628
+ return referencedDisplaySet;
1629
+ }
1630
+ return chooseDisplaySet(displaySets, FrameOfReferenceUID);
1613
1631
  }
1614
1632
 
1615
1633
  /**
1616
1634
  * Gets the additional reference data appropriate for a 3d reference.
1617
1635
  * This will choose a volume id, frame of reference and a plane restriction.
1618
1636
  */
1619
- function getReferenceData3D(toolData, servicesManager) {
1637
+ function getReferenceData3D(toolData, servicesManager, displaySetsByFrameOfReferenceUID = new Map()) {
1620
1638
  const {
1621
1639
  FrameOfReferenceUID
1622
1640
  } = toolData.annotation.metadata;
@@ -1632,7 +1650,7 @@ function getReferenceData3D(toolData, servicesManager) {
1632
1650
  FrameOfReferenceUID
1633
1651
  };
1634
1652
  }
1635
- const ds = chooseDisplaySet(displaySetsFOR, toolData.annotation);
1653
+ const ds = displaySetsByFrameOfReferenceUID.get(FrameOfReferenceUID) || chooseDisplaySet(displaySetsFOR, toolData.annotation);
1636
1654
  const cameraView = chooseCameraView(ds, points);
1637
1655
  const viewReference = {
1638
1656
  ...cameraView,