@ohif/app 3.12.0-beta.30 → 3.12.0-beta.32

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 (40) hide show
  1. package/dist/{1447.bundle.7ccbf8c680ed0a7e69d5.js → 1447.bundle.5329a1fc555ff8492f45.js} +2 -2
  2. package/dist/{2345.bundle.1fedf5750caf46ce99d9.js → 2345.bundle.db2624daf28f03ec2f90.js} +5 -2
  3. package/dist/{4019.bundle.701981ea6b7abed6a66c.js → 4019.bundle.c5b332003e3cd00868ce.js} +8 -0
  4. package/dist/{7412.bundle.f5de4a483672f3eabc10.js → 7412.bundle.b891b84732a843f2eeb1.js} +66 -22
  5. package/dist/{7431.bundle.c5e2e2f2f4ccc2c994d7.js → 7431.bundle.dac1caef5e9f365ce247.js} +3 -0
  6. package/dist/{8558.bundle.700a45d1df4274c7569e.js → 8558.bundle.d52a1cb49ddc1a5f6d36.js} +135 -15
  7. package/dist/{9819.bundle.44afc84f644470568735.js → 9819.bundle.327cd242014b11d6c0d7.js} +7172 -6627
  8. package/dist/{9856.bundle.4a338f5f69c7082091e0.js → 9856.bundle.8e21e8c0322a0837862b.js} +24 -6
  9. package/dist/{9892.bundle.eb768b852ed006b855ae.js → 9892.bundle.bdb6973617e0eab859cc.js} +72 -23
  10. package/dist/{app.bundle.dc901a102d764ef35ad4.js → app.bundle.ac2fb321d9cbfff3ec3c.js} +40030 -39477
  11. package/dist/{compute.bundle.c15fba70f1aff4b27f25.js → compute.bundle.3b6f88dbaa913f5f1244.js} +1 -1
  12. package/dist/index.html +1 -1
  13. package/dist/{polySeg.bundle.52580841ea46a924312f.js → polySeg.bundle.393405819b5ecd4d54d1.js} +1 -1
  14. package/dist/sw.js +1 -1
  15. package/package.json +21 -21
  16. /package/dist/{1459.bundle.25ae02642118d90e49ac.js → 1459.bundle.81f4015d88a4945b34f1.js} +0 -0
  17. /package/dist/{147.bundle.b48793416be71ea5c5d2.js → 147.bundle.33ec7549cc1cec4ac0c0.js} +0 -0
  18. /package/dist/{1604.bundle.a0651a36c30bba3ca428.js → 1604.bundle.621b39c38a1b84f465aa.js} +0 -0
  19. /package/dist/{1807.bundle.fb43d3ec0c1810dfd665.js → 1807.bundle.8b1098dd1b8342bb8b62.js} +0 -0
  20. /package/dist/{1919.bundle.28e3a73be5889d518468.js → 1919.bundle.db7724c4e3134df3a0c1.js} +0 -0
  21. /package/dist/{213.bundle.a628d19d9049300164e7.js → 213.bundle.3fabd2ec9824ce4802ce.js} +0 -0
  22. /package/dist/{2243.bundle.8230239618b7b3732cb7.js → 2243.bundle.1235ac95906db3a2172e.js} +0 -0
  23. /package/dist/{2424.bundle.8e5801b13cbf46346e82.js → 2424.bundle.b061db5c4fa94ee49b68.js} +0 -0
  24. /package/dist/{2518.bundle.09da9efcaf81e4ea7913.js → 2518.bundle.7ffb0583145b21cb7499.js} +0 -0
  25. /package/dist/{319.bundle.45c1c250b562a3feefa5.js → 319.bundle.5d3c2ff62d99b3da7f8c.js} +0 -0
  26. /package/dist/{4113.bundle.c5cda661ac043f9b5e97.js → 4113.bundle.5bd66f3880a8a28f8e20.js} +0 -0
  27. /package/dist/{414.bundle.aba3037fd5feebd821dc.js → 414.bundle.b6e51f4eab025bf63c56.js} +0 -0
  28. /package/dist/{5802.bundle.d68c7f909458038aedf1.js → 5802.bundle.48b958ebd8d250156814.js} +0 -0
  29. /package/dist/{6027.bundle.744b0fb1b090256c0a77.js → 6027.bundle.231b612a29523398d5ee.js} +0 -0
  30. /package/dist/{6201.bundle.b32ee475e39dcf2d69b4.js → 6201.bundle.bb4265e279b84970186b.js} +0 -0
  31. /package/dist/{6980.bundle.945ffbd91eaf6f3faaa9.js → 6980.bundle.3d48964dada7673618ad.js} +0 -0
  32. /package/dist/{6991.bundle.b4826e45919342537aac.js → 6991.bundle.2a13f2fb63ab3107a286.js} +0 -0
  33. /package/dist/{7197.bundle.27d101c9c06cd67ec070.js → 7197.bundle.e0a8a5313412b8fdaff1.js} +0 -0
  34. /package/dist/{7639.bundle.f34b172193c9c1218ed7.js → 7639.bundle.9fcdb465e703b74e71b4.js} +0 -0
  35. /package/dist/{7656.bundle.a821e6064d08e194a9e1.js → 7656.bundle.b4b2468844984c101541.js} +0 -0
  36. /package/dist/{810.bundle.6843f6cc56987564bb42.js → 810.bundle.c9c84898f521c956a869.js} +0 -0
  37. /package/dist/{85.bundle.333336f0acd7387b9c12.js → 85.bundle.583b6c0d87b4e1de1eb8.js} +0 -0
  38. /package/dist/{8815.bundle.4002e0e98ee51da6f347.js → 8815.bundle.f45760ed48273afeab94.js} +0 -0
  39. /package/dist/{934.bundle.615d68bb584003b7c065.js → 934.bundle.a59426d0dd3a9a428161.js} +0 -0
  40. /package/dist/{9862.bundle.cf1d70351f4e09fbd7ac.js → 9862.bundle.83995d2aebb597bc4b64.js} +0 -0
@@ -9702,8 +9702,8 @@ function AboutModalDefault() {
9702
9702
  name
9703
9703
  } = (0,browser_detect_es5/* default */.A)();
9704
9704
  const browser = `${name[0].toUpperCase()}${name.substr(1)} ${version}`;
9705
- const versionNumber = "3.12.0-beta.30";
9706
- const commitHash = "7783d0f558bbb7016c29513b6fe76ed069dbd75c";
9705
+ const versionNumber = "3.12.0-beta.32";
9706
+ const commitHash = "d41eca4ed5f7aec3a5c4e779b86436622262be38";
9707
9707
  const [main, beta] = versionNumber.split('-');
9708
9708
  return /*#__PURE__*/react.createElement(ui_next_src/* AboutModal */.VTU, {
9709
9709
  className: "w-[400px]"
@@ -124,6 +124,8 @@ function drawLinkedTextBox(svgDrawingHelper, annotationUID, textBoxUID, textLine
124
124
  /* harmony import */ var _utilities_getPixelValueUnits__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(40634);
125
125
  /* harmony import */ var _utilities_viewport_isViewportPreScaled__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(18990);
126
126
  /* harmony import */ var _utilities_math_basic__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(73262);
127
+ /* harmony import */ var _stateManagement_annotation_config_helpers__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(76712);
128
+
127
129
 
128
130
 
129
131
 
@@ -506,9 +508,10 @@ class RectangleROITool extends _base__WEBPACK_IMPORTED_MODULE_0__/* .AnnotationT
506
508
  activeHandleIndex !== undefined) {
507
509
  activeHandleCanvasCoords = [canvasCoordinates[activeHandleIndex]];
508
510
  }
509
- if (activeHandleCanvasCoords) {
511
+ const showHandlesAlways = Boolean((0,_stateManagement_annotation_config_helpers__WEBPACK_IMPORTED_MODULE_20__/* .getStyleProperty */ .h)('showHandlesAlways', {}));
512
+ if (activeHandleCanvasCoords || showHandlesAlways) {
510
513
  const handleGroupUID = '0';
511
- (0,_drawingSvg__WEBPACK_IMPORTED_MODULE_8__.drawHandles)(svgDrawingHelper, annotationUID, handleGroupUID, activeHandleCanvasCoords, {
514
+ (0,_drawingSvg__WEBPACK_IMPORTED_MODULE_8__.drawHandles)(svgDrawingHelper, annotationUID, handleGroupUID, showHandlesAlways ? canvasCoordinates : activeHandleCanvasCoords, {
512
515
  color,
513
516
  });
514
517
  }
@@ -1466,6 +1466,14 @@ class ContourSegmentationBaseTool extends ContourBaseTool {
1466
1466
  InterpolationManager/* default */.A.addTool(this.getToolName());
1467
1467
  }
1468
1468
  }
1469
+ onSetToolConfiguration() {
1470
+ if (this.configuration.interpolation?.enabled) {
1471
+ InterpolationManager/* default */.A.addTool(this.getToolName());
1472
+ }
1473
+ else {
1474
+ InterpolationManager/* default */.A.removeTool(this.getToolName());
1475
+ }
1476
+ }
1469
1477
  isContourSegmentationTool() {
1470
1478
  return true;
1471
1479
  }
@@ -3031,7 +3031,7 @@ class Colorbar extends _widgets_Widget__WEBPACK_IMPORTED_MODULE_7__/* ["default"
3031
3031
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
3032
3032
  /* harmony export */ r: () => (/* binding */ version)
3033
3033
  /* harmony export */ });
3034
- const version = '4.0.0';
3034
+ const version = '4.3.10';
3035
3035
 
3036
3036
 
3037
3037
  /***/ }),
@@ -5366,6 +5366,8 @@ function _toolGroupHasActiveEnabledOrPassiveTool(toolGroup, toolName) {
5366
5366
  /* harmony import */ var _stateManagement_annotation_helpers_state__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(44049);
5367
5367
  /* harmony import */ var _cursors_elementCursor__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(7001);
5368
5368
  /* harmony import */ var _stateManagement_annotation_annotationVisibility__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(29601);
5369
+ /* harmony import */ var _stateManagement_annotation_config_helpers__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(76712);
5370
+
5369
5371
 
5370
5372
 
5371
5373
 
@@ -5663,7 +5665,8 @@ class AngleTool extends _base__WEBPACK_IMPORTED_MODULE_2__/* .AnnotationTool */
5663
5665
  if (!(0,_stateManagement_annotation_annotationVisibility__WEBPACK_IMPORTED_MODULE_14__.isAnnotationVisible)(annotationUID)) {
5664
5666
  continue;
5665
5667
  }
5666
- if (activeHandleCanvasCoords) {
5668
+ const showHandlesAlways = Boolean((0,_stateManagement_annotation_config_helpers__WEBPACK_IMPORTED_MODULE_15__/* .getStyleProperty */ .h)('showHandlesAlways', {}));
5669
+ if (activeHandleCanvasCoords || showHandlesAlways) {
5667
5670
  const handleGroupUID = '0';
5668
5671
  (0,_drawingSvg__WEBPACK_IMPORTED_MODULE_8__.drawHandles)(svgDrawingHelper, annotationUID, handleGroupUID, canvasCoordinates, {
5669
5672
  color,
@@ -7205,6 +7208,8 @@ async function contourAndFindLargestBidirectional(segmentation) {
7205
7208
  /* harmony import */ var _utilities_drawing__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(473);
7206
7209
  /* harmony import */ var _utilities_triggerAnnotationRenderForViewportIds__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(58640);
7207
7210
  /* harmony import */ var _cursors_elementCursor__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(7001);
7211
+ /* harmony import */ var _stateManagement_annotation_config_helpers__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(76712);
7212
+
7208
7213
 
7209
7214
 
7210
7215
 
@@ -7478,7 +7483,8 @@ class LengthTool extends _base__WEBPACK_IMPORTED_MODULE_3__/* .AnnotationTool */
7478
7483
  activeHandleIndex !== null) {
7479
7484
  activeHandleCanvasCoords = [canvasCoordinates[activeHandleIndex]];
7480
7485
  }
7481
- if (activeHandleCanvasCoords) {
7486
+ const showHandlesAlways = Boolean((0,_stateManagement_annotation_config_helpers__WEBPACK_IMPORTED_MODULE_16__/* .getStyleProperty */ .h)('showHandlesAlways', {}));
7487
+ if (activeHandleCanvasCoords || showHandlesAlways) {
7482
7488
  const handleGroupUID = '0';
7483
7489
  (0,_drawingSvg__WEBPACK_IMPORTED_MODULE_10__.drawHandles)(svgDrawingHelper, annotationUID, handleGroupUID, canvasCoordinates, {
7484
7490
  color,
@@ -12459,6 +12465,8 @@ function defaultGetSegment(enabledElement, configuration) {
12459
12465
  /* harmony import */ var _cursors_elementCursor__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(7001);
12460
12466
  /* harmony import */ var _stateManagement_annotation_annotationVisibility__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(29601);
12461
12467
  /* harmony import */ var _utilities__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(53860);
12468
+ /* harmony import */ var _stateManagement_annotation_config_helpers__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(76712);
12469
+
12462
12470
 
12463
12471
 
12464
12472
 
@@ -12757,7 +12765,8 @@ class ArrowAnnotateTool extends _base__WEBPACK_IMPORTED_MODULE_2__/* .Annotation
12757
12765
  if (!(0,_stateManagement_annotation_annotationVisibility__WEBPACK_IMPORTED_MODULE_12__.isAnnotationVisible)(annotationUID)) {
12758
12766
  continue;
12759
12767
  }
12760
- if (activeHandleCanvasCoords) {
12768
+ const showHandlesAlways = Boolean((0,_stateManagement_annotation_config_helpers__WEBPACK_IMPORTED_MODULE_14__/* .getStyleProperty */ .h)('showHandlesAlways', {}));
12769
+ if (activeHandleCanvasCoords || showHandlesAlways) {
12761
12770
  const handleGroupUID = '0';
12762
12771
  (0,_drawingSvg__WEBPACK_IMPORTED_MODULE_6__.drawHandles)(svgDrawingHelper, annotationUID, handleGroupUID, canvasCoordinates, {
12763
12772
  color,
@@ -13148,6 +13157,8 @@ const segmentationRenderingEngine = new SegmentationRenderingEngine();
13148
13157
  /* harmony import */ var _utilities_drawing__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(473);
13149
13158
  /* harmony import */ var _cursors_elementCursor__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(7001);
13150
13159
  /* harmony import */ var _utilities_triggerAnnotationRenderForViewportIds__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(58640);
13160
+ /* harmony import */ var _stateManagement_annotation_config_helpers__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(76712);
13161
+
13151
13162
 
13152
13163
 
13153
13164
 
@@ -13664,9 +13675,10 @@ class BidirectionalTool extends _base__WEBPACK_IMPORTED_MODULE_3__/* .Annotation
13664
13675
  activeHandleIndex !== null) {
13665
13676
  activeHandleCanvasCoords = [canvasCoordinates[activeHandleIndex]];
13666
13677
  }
13667
- if (activeHandleCanvasCoords) {
13678
+ const showHandlesAlways = Boolean((0,_stateManagement_annotation_config_helpers__WEBPACK_IMPORTED_MODULE_17__/* .getStyleProperty */ .h)('showHandlesAlways', {}));
13679
+ if (activeHandleCanvasCoords || showHandlesAlways) {
13668
13680
  const handleGroupUID = '0';
13669
- (0,_drawingSvg__WEBPACK_IMPORTED_MODULE_9__.drawHandles)(svgDrawingHelper, annotationUID, handleGroupUID, activeHandleCanvasCoords, {
13681
+ (0,_drawingSvg__WEBPACK_IMPORTED_MODULE_9__.drawHandles)(svgDrawingHelper, annotationUID, handleGroupUID, showHandlesAlways ? canvasCoordinates : activeHandleCanvasCoords, {
13670
13682
  color,
13671
13683
  });
13672
13684
  }
@@ -15044,6 +15056,7 @@ TrackballRotateTool.toolName = 'TrackballRotate';
15044
15056
 
15045
15057
 
15046
15058
 
15059
+
15047
15060
  class ZoomTool extends _base__WEBPACK_IMPORTED_MODULE_3__/* .BaseTool */ .oS {
15048
15061
  constructor(toolProps = {}, defaultToolProps = {
15049
15062
  supportedInteractionTypes: ['Mouse', 'Touch'],
@@ -15102,9 +15115,13 @@ class ZoomTool extends _base__WEBPACK_IMPORTED_MODULE_3__/* .BaseTool */ .oS {
15102
15115
  const imageWidth = dimensions[0] * spacing[0];
15103
15116
  const imageHeight = dimensions[1] * spacing[1];
15104
15117
  const canvasAspect = size[0] / size[1];
15118
+ const insetImageMultiplier = (0,_cornerstonejs_core__WEBPACK_IMPORTED_MODULE_2__.getConfiguration)().rendering
15119
+ ?.useLegacyCameraFOV
15120
+ ? 1.1
15121
+ : 1;
15105
15122
  const displayArea = viewport.options?.displayArea;
15106
- const imageAreaScaleX = displayArea?.imageArea?.[0] ?? 1.1;
15107
- const imageAreaScaleY = displayArea?.imageArea?.[1] ?? 1.1;
15123
+ const imageAreaScaleX = displayArea?.imageArea?.[0] ?? insetImageMultiplier;
15124
+ const imageAreaScaleY = displayArea?.imageArea?.[1] ?? insetImageMultiplier;
15108
15125
  const scaledImageWidth = imageWidth * imageAreaScaleX;
15109
15126
  const scaledImageHeight = imageHeight * imageAreaScaleY;
15110
15127
  const scaledImageAspect = scaledImageWidth / scaledImageHeight;
@@ -15307,6 +15324,11 @@ class InterpolationManager {
15307
15324
  this.toolNames.push(toolName);
15308
15325
  }
15309
15326
  }
15327
+ static removeTool(toolName) {
15328
+ if (this.toolNames.includes(toolName)) {
15329
+ this.toolNames = this.toolNames.filter((name) => name !== toolName);
15330
+ }
15331
+ }
15310
15332
  static acceptAutoGenerated(annotationGroupSelector, selector = {}) {
15311
15333
  const { toolNames, segmentationId, segmentIndex, sliceIndex } = selector;
15312
15334
  for (const toolName of toolNames || InterpolationManager.toolNames) {
@@ -16811,6 +16833,8 @@ function createPresentationViewSynchronizer(synchronizerName, options) {
16811
16833
  /* harmony import */ var _utilities_math_ellipse__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(87009);
16812
16834
  /* harmony import */ var _utilities_math_basic__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(73262);
16813
16835
  /* harmony import */ var gl_matrix__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(3823);
16836
+ /* harmony import */ var _stateManagement_annotation_config_helpers__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(76712);
16837
+
16814
16838
 
16815
16839
 
16816
16840
 
@@ -17222,9 +17246,10 @@ class CircleROITool extends _base__WEBPACK_IMPORTED_MODULE_0__/* .AnnotationTool
17222
17246
  activeHandleCanvasCoords = canvasCoordinates;
17223
17247
  }
17224
17248
  }
17225
- if (activeHandleCanvasCoords) {
17249
+ const showHandlesAlways = Boolean((0,_stateManagement_annotation_config_helpers__WEBPACK_IMPORTED_MODULE_22__/* .getStyleProperty */ .h)('showHandlesAlways', {}));
17250
+ if (activeHandleCanvasCoords || showHandlesAlways) {
17226
17251
  const handleGroupUID = '0';
17227
- (0,_drawingSvg__WEBPACK_IMPORTED_MODULE_8__.drawHandles)(svgDrawingHelper, annotationUID, handleGroupUID, activeHandleCanvasCoords, {
17252
+ (0,_drawingSvg__WEBPACK_IMPORTED_MODULE_8__.drawHandles)(svgDrawingHelper, annotationUID, handleGroupUID, showHandlesAlways ? canvasCoordinates : activeHandleCanvasCoords, {
17228
17253
  color,
17229
17254
  });
17230
17255
  }
@@ -23014,13 +23039,20 @@ class WindowLevelTool extends _base__WEBPACK_IMPORTED_MODULE_0__/* .BaseTool */
23014
23039
  }, [Infinity, -Infinity]);
23015
23040
  const BitsStored = imageVolume?.metadata?.BitsStored;
23016
23041
  const metadataDynamicRange = BitsStored ? 2 ** BitsStored : Infinity;
23017
- imageDynamicRange = Math.min(calculatedDynamicRange[1] - calculatedDynamicRange[0], metadataDynamicRange);
23042
+ const calculatedRange = calculatedDynamicRange[1] - calculatedDynamicRange[0];
23043
+ imageDynamicRange = !Number.isFinite(calculatedRange)
23044
+ ? metadataDynamicRange
23045
+ : Math.min(calculatedRange, metadataDynamicRange);
23018
23046
  }
23019
23047
  else {
23020
23048
  imageDynamicRange = this._getImageDynamicRangeFromViewport(viewport);
23021
23049
  }
23022
23050
  const ratio = imageDynamicRange / DEFAULT_IMAGE_DYNAMIC_RANGE;
23023
- return ratio > 1 ? Math.round(ratio) : ratio;
23051
+ return !Number.isFinite(ratio)
23052
+ ? DEFAULT_IMAGE_DYNAMIC_RANGE
23053
+ : ratio > 1
23054
+ ? Math.round(ratio)
23055
+ : ratio;
23024
23056
  }
23025
23057
  _getImageDynamicRangeFromViewport(viewport) {
23026
23058
  const { imageData, voxelManager } = viewport.getImageData();
@@ -27166,14 +27198,15 @@ function internalAddSegmentationRepresentation(viewportId, representationInput)
27166
27198
  };
27167
27199
  _SegmentationStateManager__WEBPACK_IMPORTED_MODULE_5__/* .defaultSegmentationStateManager */ ._6.addSegmentationRepresentation(viewportId, segmentationId, representationInput.type, renderingConfig);
27168
27200
  if (!(0,_segmentIndex__WEBPACK_IMPORTED_MODULE_6__.getActiveSegmentIndex)(segmentationId)) {
27201
+ let firstSegmentIndex = 1;
27169
27202
  const segmentation = _SegmentationStateManager__WEBPACK_IMPORTED_MODULE_5__/* .defaultSegmentationStateManager */ ._6.getSegmentation(segmentationId);
27170
27203
  if (segmentation) {
27171
27204
  const segmentKeys = Object.keys(segmentation.segments);
27172
27205
  if (segmentKeys.length > 0) {
27173
- const firstSegmentIndex = segmentKeys.map((k) => Number(k)).sort()[0];
27174
- (0,_segmentIndex__WEBPACK_IMPORTED_MODULE_6__.setActiveSegmentIndex)(segmentationId, firstSegmentIndex);
27206
+ firstSegmentIndex = segmentKeys.map((k) => Number(k)).sort()[0];
27175
27207
  }
27176
27208
  }
27209
+ (0,_segmentIndex__WEBPACK_IMPORTED_MODULE_6__.setActiveSegmentIndex)(segmentationId, firstSegmentIndex);
27177
27210
  }
27178
27211
  if (representationInput.type === _enums__WEBPACK_IMPORTED_MODULE_2__.SegmentationRepresentations.Contour) {
27179
27212
  (0,_utilities_triggerAnnotationRenderForViewportIds__WEBPACK_IMPORTED_MODULE_1__/* .triggerAnnotationRenderForViewportIds */ .t)([viewportId]);
@@ -28672,6 +28705,8 @@ function getViewportIdsWithSegmentation(segmentationId) {
28672
28705
  /* harmony import */ var _utilities_drawing__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(473);
28673
28706
  /* harmony import */ var _utilities_triggerAnnotationRenderForViewportIds__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(58640);
28674
28707
  /* harmony import */ var _cursors_elementCursor__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(7001);
28708
+ /* harmony import */ var _stateManagement_annotation_config_helpers__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(76712);
28709
+
28675
28710
 
28676
28711
 
28677
28712
 
@@ -28932,7 +28967,8 @@ class HeightTool extends _base__WEBPACK_IMPORTED_MODULE_3__/* .AnnotationTool */
28932
28967
  activeHandleIndex !== null) {
28933
28968
  activeHandleCanvasCoords = [canvasCoordinates[activeHandleIndex]];
28934
28969
  }
28935
- if (activeHandleCanvasCoords) {
28970
+ const showHandlesAlways = Boolean((0,_stateManagement_annotation_config_helpers__WEBPACK_IMPORTED_MODULE_16__/* .getStyleProperty */ .h)('showHandlesAlways', {}));
28971
+ if (activeHandleCanvasCoords || showHandlesAlways) {
28936
28972
  const handleGroupUID = '0';
28937
28973
  (0,_drawingSvg__WEBPACK_IMPORTED_MODULE_10__.drawHandles)(svgDrawingHelper, annotationUID, handleGroupUID, canvasCoordinates, {
28938
28974
  color,
@@ -36402,6 +36438,8 @@ function updateLabelmapSegmentationImageReferences(viewportId, segmentationId) {
36402
36438
  /* harmony import */ var _utilities_viewport_isViewportPreScaled__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(18990);
36403
36439
  /* harmony import */ var _utilities_math_basic__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(73262);
36404
36440
  /* harmony import */ var gl_matrix__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(3823);
36441
+ /* harmony import */ var _stateManagement_annotation_config_helpers__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(76712);
36442
+
36405
36443
 
36406
36444
 
36407
36445
 
@@ -36848,9 +36886,10 @@ class EllipticalROITool extends _base__WEBPACK_IMPORTED_MODULE_0__/* .Annotation
36848
36886
  activeHandleIndex !== null) {
36849
36887
  activeHandleCanvasCoords = [canvasCoordinates[activeHandleIndex]];
36850
36888
  }
36851
- if (activeHandleCanvasCoords) {
36889
+ const showHandlesAlways = Boolean((0,_stateManagement_annotation_config_helpers__WEBPACK_IMPORTED_MODULE_21__/* .getStyleProperty */ .h)('showHandlesAlways', {}));
36890
+ if (activeHandleCanvasCoords || showHandlesAlways) {
36852
36891
  const handleGroupUID = '0';
36853
- (0,_drawingSvg__WEBPACK_IMPORTED_MODULE_8__.drawHandles)(svgDrawingHelper, annotationUID, handleGroupUID, activeHandleCanvasCoords, {
36892
+ (0,_drawingSvg__WEBPACK_IMPORTED_MODULE_8__.drawHandles)(svgDrawingHelper, annotationUID, handleGroupUID, showHandlesAlways ? canvasCoordinates : activeHandleCanvasCoords, {
36854
36893
  color,
36855
36894
  });
36856
36895
  }
@@ -37679,10 +37718,11 @@ class SVGMouseCursor extends ImageMouseCursor {
37679
37718
  }
37680
37719
  const urn = getCursorURN(name, pointer, color);
37681
37720
  let cursor = super.getDefinedCursor(urn);
37721
+ const pointerStrokeWidth = Number((0,helpers/* getStyleProperty */.h)('pointerStrokeWidth', {}));
37682
37722
  if (!cursor) {
37683
37723
  const descriptor = getDefinedSVGCursorDescriptor(name);
37684
37724
  if (descriptor) {
37685
- cursor = createSVGMouseCursor(descriptor, urn, pointer, color, super.getDefinedCursor('default'));
37725
+ cursor = createSVGMouseCursor(descriptor, urn, pointer, color, pointerStrokeWidth, super.getDefinedCursor('default'));
37686
37726
  super.setDefinedCursor(urn, cursor);
37687
37727
  }
37688
37728
  }
@@ -37700,9 +37740,9 @@ function getCursorURN(name, pointer, color) {
37700
37740
  const type = pointer ? 'pointer' : 'cursor';
37701
37741
  return `${type}:${name}/${color}`;
37702
37742
  }
37703
- function createSVGMouseCursor(descriptor, name, pointer, color, fallback) {
37743
+ function createSVGMouseCursor(descriptor, name, pointer, color, pointerStrokeWidth, fallback) {
37704
37744
  const { x, y } = descriptor.mousePoint;
37705
- return new SVGMouseCursor(createSVGIconUrl(descriptor, pointer, { color }), x, y, name, fallback);
37745
+ return new SVGMouseCursor(createSVGIconUrl(descriptor, pointer, { color, pointerStrokeWidth }), x, y, name, fallback);
37706
37746
  }
37707
37747
  function createSVGIconUrl(descriptor, pointer, options) {
37708
37748
  const blob = createSVGIconBlob(descriptor, pointer, options);
@@ -37728,10 +37768,11 @@ function createSVGIconWithPointer(descriptor, options) {
37728
37768
  const { iconContent, iconSize, viewBox, mousePointerGroupString } = descriptor;
37729
37769
  const scale = iconSize / Math.max(viewBox.x, viewBox.y, 1);
37730
37770
  const svgSize = 16 + iconSize;
37771
+ const pointerStrokeWidth = options.pointerStrokeWidth || 1;
37731
37772
  const svgString = `
37732
37773
  <svg data-icon="cursor" role="img" xmlns="http://www.w3.org/2000/svg"
37733
37774
  width="${svgSize}" height="${svgSize}" viewBox="0 0 ${svgSize} ${svgSize}">
37734
- <g>${mousePointerGroupString}</g>
37775
+ <g stroke-width="${pointerStrokeWidth}">${mousePointerGroupString}</g>
37735
37776
  <g transform="translate(16, 16) scale(${scale})">${iconContent}</g>
37736
37777
  </svg>`;
37737
37778
  return format(svgString, options);
@@ -43927,6 +43968,8 @@ __webpack_require__.r(__webpack_exports__);
43927
43968
  /* harmony import */ var _utilities_triggerAnnotationRenderForViewportIds__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(58640);
43928
43969
  /* harmony import */ var _cursors_elementCursor__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(7001);
43929
43970
  /* harmony import */ var _stateManagement_annotation_annotationVisibility__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(29601);
43971
+ /* harmony import */ var _stateManagement_annotation_config_helpers__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(76712);
43972
+
43930
43973
 
43931
43974
 
43932
43975
 
@@ -44279,7 +44322,8 @@ class CobbAngleTool extends _base__WEBPACK_IMPORTED_MODULE_3__/* .AnnotationTool
44279
44322
  if (!(0,_stateManagement_annotation_annotationVisibility__WEBPACK_IMPORTED_MODULE_17__.isAnnotationVisible)(annotationUID)) {
44280
44323
  continue;
44281
44324
  }
44282
- if (activeHandleCanvasCoords) {
44325
+ const showHandlesAlways = Boolean((0,_stateManagement_annotation_config_helpers__WEBPACK_IMPORTED_MODULE_18__/* .getStyleProperty */ .h)('showHandlesAlways', {}));
44326
+ if (activeHandleCanvasCoords || showHandlesAlways) {
44283
44327
  const handleGroupUID = '0';
44284
44328
  (0,_drawingSvg__WEBPACK_IMPORTED_MODULE_11__.drawHandles)(svgDrawingHelper, annotationUID, handleGroupUID, canvasCoordinates, {
44285
44329
  color,
@@ -1931,6 +1931,9 @@ async function updateSurfaceData(segmentationId) {
1931
1931
  segmentationId,
1932
1932
  type: updateSurfaceData_SegmentationRepresentations.Surface,
1933
1933
  });
1934
+ if (!surfaceRepresentation) {
1935
+ return;
1936
+ }
1934
1937
  return [surfaceRepresentation].map((surfaceRepresentation) => {
1935
1938
  segmentation.representationData.Surface.geometryIds.set(segmentIndex, geometryId);
1936
1939
  const enabledElement = (0,esm.getEnabledElementByViewportId)(viewportId);
@@ -150,9 +150,39 @@ const {
150
150
  DicomMetaDictionary
151
151
  } = dcmjs_es/* default.data */.Ay.data;
152
152
  const dicomlab2RGB = dcmjs_es/* default.data */.Ay.data.Colors.dicomlab2RGB;
153
- async function checkAndLoadContourData(instance, datasource) {
153
+
154
+ /**
155
+ * Checks and loads contour data for RT Structure Set, handling both inline and bulk data URIs.
156
+ * Processes ROIContourSequence to extract contour data and resolve any bulk data references.
157
+ *
158
+ * @async
159
+ * @function checkAndLoadContourData
160
+ * @param {Object} params - Parameters object
161
+ * @param {Object} params.instance - Initial RT Structure instance
162
+ * @param {Object} params.dataSource - Data source for retrieving bulk data
163
+ * @param {Object} params.extensionManager - OHIF extension manager
164
+ * @param {Object} params.rtStructDisplaySet - RT Structure display set
165
+ * @param {Object} params.headers - HTTP headers for requests
166
+ * @returns {Promise<Object>} Promise that resolves to the processed RT Structure instance with loaded contour data
167
+ * @throws {Promise<string>} Rejects with error message if instance is invalid or data retrieval fails
168
+ */
169
+ async function checkAndLoadContourData({
170
+ instance: initialInstance,
171
+ dataSource,
172
+ extensionManager,
173
+ rtStructDisplaySet,
174
+ headers
175
+ }) {
176
+ let instance = initialInstance;
154
177
  if (!instance || !instance.ROIContourSequence) {
155
- return Promise.reject('Invalid instance object or ROIContourSequence');
178
+ instance = await getRTStructInstance({
179
+ extensionManager,
180
+ rtStructDisplaySet,
181
+ headers
182
+ });
183
+ if (!instance || !instance.ROIContourSequence) {
184
+ return Promise.reject('Invalid instance object or ROIContourSequence');
185
+ }
156
186
  }
157
187
  const promisesMap = new Map();
158
188
  for (const ROIContour of instance.ROIContourSequence) {
@@ -170,10 +200,10 @@ async function checkAndLoadContourData(instance, datasource) {
170
200
  promisesMap.has(referencedROINumber) ? promisesMap.get(referencedROINumber).push(Promise.resolve(contourData)) : promisesMap.set(referencedROINumber, [Promise.resolve(contourData)]);
171
201
  } else if (contourData && contourData.BulkDataURI) {
172
202
  const bulkDataURI = contourData.BulkDataURI;
173
- if (!datasource || !datasource.retrieve || !datasource.retrieve.bulkDataURI) {
174
- return Promise.reject('Invalid datasource object or retrieve function');
203
+ if (!dataSource || !dataSource.retrieve || !dataSource.retrieve.bulkDataURI) {
204
+ return Promise.reject('Invalid dataSource object or retrieve function');
175
205
  }
176
- const bulkDataPromise = datasource.retrieve.bulkDataURI({
206
+ const bulkDataPromise = dataSource.retrieve.bulkDataURI({
177
207
  BulkDataURI: bulkDataURI,
178
208
  StudyInstanceUID: instance.StudyInstanceUID,
179
209
  SeriesInstanceUID: instance.SeriesInstanceUID,
@@ -220,29 +250,78 @@ async function checkAndLoadContourData(instance, datasource) {
220
250
  console.error(error);
221
251
  }
222
252
  });
253
+ return instance;
223
254
  }
224
- async function loadRTStruct(extensionManager, rtStructDisplaySet, headers) {
255
+
256
+ /**
257
+ * Retrieves and parses RT Structure Set instance from DICOM data.
258
+ * Uses the cornerstone utility module to load DICOM data and converts it to a naturalized dataset.
259
+ *
260
+ * @async
261
+ * @function getRTStructInstance
262
+ * @param {Object} params - Parameters object
263
+ * @param {Object} params.extensionManager - OHIF extension manager
264
+ * @param {Object} params.rtStructDisplaySet - RT Structure display set
265
+ * @param {Object} params.headers - HTTP headers for requests
266
+ * @returns {Promise<Object>} Promise that resolves to the parsed RT Structure dataset
267
+ */
268
+ const getRTStructInstance = async ({
269
+ extensionManager,
270
+ rtStructDisplaySet,
271
+ headers
272
+ }) => {
225
273
  const utilityModule = extensionManager.getModuleEntry('@ohif/extension-cornerstone.utilityModule.common');
274
+ const {
275
+ dicomLoaderService
276
+ } = utilityModule.exports;
277
+ const segArrayBuffer = await dicomLoaderService.findDicomDataPromise(rtStructDisplaySet, null, headers);
278
+ const dicomData = DicomMessage.readFile(segArrayBuffer);
279
+ const rtStructDataset = DicomMetaDictionary.naturalizeDataset(dicomData.dict);
280
+ rtStructDataset._meta = DicomMetaDictionary.namifyDataset(dicomData.meta);
281
+ return rtStructDataset;
282
+ };
283
+
284
+ /**
285
+ * Main function to load and process RT Structure Set data.
286
+ * Creates a structure set object with ROI contours, metadata, and visualization properties.
287
+ * Handles both bulk data URI and inline contour data scenarios.
288
+ *
289
+ * @async
290
+ * @function loadRTStruct
291
+ * @param {Object} extensionManager - OHIF extension manager
292
+ * @param {Object} rtStructDisplaySet - RT Structure display set to process
293
+ * @param {Object} headers - HTTP headers for data requests
294
+ * @returns {Promise<Object>} Promise that resolves to a structure set object containing:
295
+ * - StructureSetLabel: Label of the structure set
296
+ * - SeriesInstanceUID: Series instance UID
297
+ * - ROIContours: Array of ROI contour data with points and metadata
298
+ * - visible: Visibility state
299
+ * - ReferencedSOPInstanceUIDsSet: Set of referenced SOP instance UIDs
300
+ */
301
+ async function loadRTStruct(extensionManager, rtStructDisplaySet, headers) {
226
302
  const dataSource = extensionManager.getActiveDataSource()[0];
227
303
  const {
228
304
  bulkDataURI
229
305
  } = dataSource.getConfig?.() || {};
230
- const {
231
- dicomLoaderService
232
- } = utilityModule.exports;
233
306
 
234
307
  // Set here is loading is asynchronous.
235
308
  // If this function throws its set back to false.
236
309
  rtStructDisplaySet.isLoaded = true;
237
310
  let instance = rtStructDisplaySet.instance;
238
311
  if (!bulkDataURI || !bulkDataURI.enabled) {
239
- const segArrayBuffer = await dicomLoaderService.findDicomDataPromise(rtStructDisplaySet, null, headers);
240
- const dicomData = DicomMessage.readFile(segArrayBuffer);
241
- const rtStructDataset = DicomMetaDictionary.naturalizeDataset(dicomData.dict);
242
- rtStructDataset._meta = DicomMetaDictionary.namifyDataset(dicomData.meta);
243
- instance = rtStructDataset;
312
+ instance = await getRTStructInstance({
313
+ extensionManager,
314
+ rtStructDisplaySet,
315
+ headers
316
+ });
244
317
  } else {
245
- await checkAndLoadContourData(instance, dataSource);
318
+ instance = await checkAndLoadContourData({
319
+ instance,
320
+ dataSource,
321
+ extensionManager,
322
+ rtStructDisplaySet,
323
+ headers
324
+ });
246
325
  }
247
326
  const {
248
327
  StructureSetROISequence,
@@ -298,6 +377,19 @@ async function loadRTStruct(extensionManager, rtStructDisplaySet, headers) {
298
377
  }
299
378
  return structureSet;
300
379
  }
380
+
381
+ /**
382
+ * Sets metadata for ROI contour data and adds it to the structure set.
383
+ * Extracts ROI information from StructureSetROISequence and RTROIObservationsSequence,
384
+ * then creates a complete ROI contour data object with visualization properties.
385
+ *
386
+ * @function _setROIContourMetadata
387
+ * @param {Object} structureSet - The structure set object to add ROI contour to
388
+ * @param {Array} StructureSetROISequence - Array of structure set ROI definitions
389
+ * @param {Array} RTROIObservationsSequence - Array of RT ROI observations
390
+ * @param {Object} ROIContour - ROI contour object containing contour data
391
+ * @param {Array} contourPoints - Array of processed contour points
392
+ */
301
393
  function _setROIContourMetadata(structureSet, StructureSetROISequence, RTROIObservationsSequence, ROIContour, contourPoints) {
302
394
  const StructureSetROI = StructureSetROISequence.find(structureSetROI => structureSetROI.ROINumber === ROIContour.ReferencedROINumber);
303
395
  const ROIContourData = {
@@ -316,6 +408,15 @@ function _setROIContourMetadata(structureSet, StructureSetROISequence, RTROIObse
316
408
  }
317
409
  structureSet.ROIContours.push(ROIContourData);
318
410
  }
411
+
412
+ /**
413
+ * Sets the display color for ROI contour data.
414
+ * Uses ROIDisplayColor if available, otherwise converts RecommendedDisplayCIELabValue to RGB.
415
+ *
416
+ * @function _setROIContourDataColor
417
+ * @param {Object} ROIContour - ROI contour object containing color information
418
+ * @param {Object} ROIContourData - ROI contour data object to set color on
419
+ */
319
420
  function _setROIContourDataColor(ROIContour, ROIContourData) {
320
421
  let {
321
422
  ROIDisplayColor,
@@ -329,6 +430,16 @@ function _setROIContourDataColor(ROIContour, ROIContourData) {
329
430
  ROIContourData.colorArray = [...ROIDisplayColor];
330
431
  }
331
432
  }
433
+
434
+ /**
435
+ * Sets RT ROI observations metadata for ROI contour data.
436
+ * Finds matching RTROIObservations by ROINumber and adds observation details to contour data.
437
+ *
438
+ * @function _setROIContourRTROIObservations
439
+ * @param {Object} ROIContourData - ROI contour data object to add observations to
440
+ * @param {Array} RTROIObservationsSequence - Array of RT ROI observations
441
+ * @param {number} ROINumber - ROI number to match observations
442
+ */
332
443
  function _setROIContourRTROIObservations(ROIContourData, RTROIObservationsSequence, ROINumber) {
333
444
  const RTROIObservations = RTROIObservationsSequence.find(RTROIObservations => RTROIObservations.ReferencedROINumber === ROINumber);
334
445
  if (RTROIObservations) {
@@ -347,6 +458,15 @@ function _setROIContourRTROIObservations(ROIContourData, RTROIObservationsSequen
347
458
  };
348
459
  }
349
460
  }
461
+
462
+ /**
463
+ * Converts a single object or array to an array.
464
+ * Utility function to ensure consistent array handling for DICOM sequences.
465
+ *
466
+ * @function _toArray
467
+ * @param {*} objOrArray - Object or array to convert
468
+ * @returns {Array} Array containing the input (if already array) or wrapped in array
469
+ */
350
470
  function _toArray(objOrArray) {
351
471
  return Array.isArray(objOrArray) ? objOrArray : [objOrArray];
352
472
  }