@ohif/app 3.9.0-beta.107 → 3.9.0-beta.108

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 (34) hide show
  1. package/dist/{2455.bundle.549b3f25f2c1b3bdf652.js → 1185.bundle.09d13de246385f1eecec.js} +138 -124
  2. package/dist/{1436.bundle.80c489caf66d53844e47.js → 1436.bundle.ffe514361e39273cb437.js} +10 -6
  3. package/dist/{149.bundle.236f32779705d9777acf.js → 149.bundle.54475bb9f72311be64bf.js} +1 -0
  4. package/dist/{1927.bundle.52d4f6ffeb436732c86a.js → 1927.bundle.7655ff4783bfaa28049f.js} +33 -38
  5. package/dist/{3198.bundle.a384d035d24280dc1f90.js → 3198.bundle.d8fd8e333394d9a214bc.js} +2 -2
  6. package/dist/{4571.bundle.b504060ff3f87e81f8f0.js → 4571.bundle.9ad4f229948c2a2da2ec.js} +1 -1
  7. package/dist/{5139.bundle.e3f8ef5bd4a8bde46a02.js → 5139.bundle.4bc1debcb236cb6a9ec8.js} +2 -2
  8. package/dist/{5687.bundle.d2fa9c7c31b8f7039a6b.js → 5687.bundle.b27fcee05402bc00d8a9.js} +4 -4
  9. package/dist/{5717.bundle.75f147939670154e769a.js → 5717.bundle.15335c2857a756212d16.js} +10 -6
  10. package/dist/{717.bundle.e7c1ec55f5b1dfde925e.js → 717.bundle.9e8751b64f11222f7bb2.js} +2 -2
  11. package/dist/{8329.bundle.8b54c33521ae5612f119.js → 8329.bundle.8ec6d09ed821d880af8c.js} +2 -2
  12. package/dist/{8523.bundle.9adf8f328f383bd26146.js → 8523.bundle.5d315f8096e3704ba241.js} +14 -17
  13. package/dist/{9212.bundle.1f4e22b153835a1b3777.js → 9212.bundle.613fc0d3b9753c477f6c.js} +7 -2
  14. package/dist/{9611.bundle.f81a5a1c76e7a06f3207.js → 9611.bundle.99199674cf2df5c7607b.js} +14 -22
  15. package/dist/{9952.bundle.858170b3010546ae8b93.js → 9952.bundle.6f1a92b82c42c60f57eb.js} +3 -28
  16. package/dist/{app.bundle.06a6e91a47336d5b50e5.js → app.bundle.787a9c83528ee4149e09.js} +25 -28
  17. package/dist/index.html +1 -1
  18. package/dist/{polySeg.bundle.7e3736144d6585cbe5b9.js → polySeg.bundle.cf443bab5e1888443354.js} +1 -1
  19. package/dist/{suv-peak-worker.bundle.7d96e701505dc0c69320.js → suv-peak-worker.bundle.ad1de658c7260083e81d.js} +1 -1
  20. package/dist/sw.js +1 -1
  21. package/package.json +19 -19
  22. /package/dist/{1266.bundle.f1fa7ec6484c9468cd21.js → 1266.bundle.8fc2047453219e0469a1.js} +0 -0
  23. /package/dist/{1374.bundle.baa11b23a34c66b9a570.js → 1374.bundle.41e540d7ef3c4fd25668.js} +0 -0
  24. /package/dist/{213.bundle.92f182058b364c485c94.js → 213.bundle.de9c712ff892512f2cd2.js} +0 -0
  25. /package/dist/{2424.bundle.c466382604fc07e63e02.js → 2424.bundle.b00a89625a6c0c436a8c.js} +0 -0
  26. /package/dist/{2825.bundle.cc9734062a044ff2aca6.js → 2825.bundle.2cafab651022748828de.js} +0 -0
  27. /package/dist/{4834.bundle.3eadeba1f3e0902a6245.js → 4834.bundle.b803124da60529b93d7f.js} +0 -0
  28. /package/dist/{5247.bundle.5e14b52ca308071cf339.js → 5247.bundle.72b6f73110dd82b748b1.js} +0 -0
  29. /package/dist/{7197.bundle.05b33da315dd65c0d568.js → 7197.bundle.3f686728681d08c75b00.js} +0 -0
  30. /package/dist/{7955.bundle.4120857bb15259fad1e2.js → 7955.bundle.af6fc2694f0a7d3b8498.js} +0 -0
  31. /package/dist/{8008.bundle.6021b889890c42f49170.js → 8008.bundle.4c08c0bd8a0840c38605.js} +0 -0
  32. /package/dist/{8259.bundle.606d8dab793cf41361b9.js → 8259.bundle.875c819aff78bc7ba362.js} +0 -0
  33. /package/dist/{8558.bundle.7e877c71665e0bd411d5.js → 8558.bundle.cbf6494d75f41196fee1.js} +0 -0
  34. /package/dist/{9551.bundle.0068d6b50fabb362ce14.js → 9551.bundle.a612f424e160e734d9e4.js} +0 -0
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
- (self["webpackChunk"] = self["webpackChunk"] || []).push([[2455],{
2
+ (self["webpackChunk"] = self["webpackChunk"] || []).push([[1185],{
3
3
 
4
4
  /***/ 5791:
5
5
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
@@ -738,7 +738,139 @@ const useViewportActionCornersContext = () => (0,react__WEBPACK_IMPORTED_MODULE_
738
738
 
739
739
  /***/ }),
740
740
 
741
- /***/ 92455:
741
+ /***/ 73421:
742
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
743
+
744
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
745
+ /* harmony export */ j: () => (/* binding */ useSegmentations)
746
+ /* harmony export */ });
747
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(86326);
748
+ /* harmony import */ var lodash_debounce__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(62051);
749
+ /* harmony import */ var lodash_debounce__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lodash_debounce__WEBPACK_IMPORTED_MODULE_1__);
750
+ /* harmony import */ var _ohif_core_src_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(37415);
751
+
752
+
753
+
754
+ function mapSegmentationToDisplay(segmentation, customizationService) {
755
+ const {
756
+ label,
757
+ segments
758
+ } = segmentation;
759
+
760
+ // Get the readable text mapping once
761
+ const {
762
+ readableText: readableTextMap
763
+ } = customizationService.getCustomization('PanelSegmentation.readableText', {});
764
+
765
+ // Helper function to recursively map cachedStats to readable display text
766
+ function mapStatsToDisplay(stats, indent = 0) {
767
+ const primary = [];
768
+ const indentation = ' '.repeat(indent);
769
+ for (const key in stats) {
770
+ if (Object.prototype.hasOwnProperty.call(stats, key)) {
771
+ const value = stats[key];
772
+ const readableText = readableTextMap?.[key];
773
+ if (!readableText) {
774
+ continue;
775
+ }
776
+ if (typeof value === 'object' && value !== null && !Array.isArray(value)) {
777
+ // Add empty row before category (except for the first category)
778
+ if (primary.length > 0) {
779
+ primary.push('');
780
+ }
781
+ // Add category title
782
+ primary.push(`${indentation}${readableText}`);
783
+ // Recursively handle nested objects
784
+ primary.push(...mapStatsToDisplay(value, indent + 1));
785
+ } else {
786
+ // For non-nested values, don't add empty rows
787
+ primary.push(`${indentation}${readableText}: ${(0,_ohif_core_src_utils__WEBPACK_IMPORTED_MODULE_2__/* .roundNumber */ .Wf)(value, 2)}`);
788
+ }
789
+ }
790
+ }
791
+ return primary;
792
+ }
793
+
794
+ // Get customization for display text mapping
795
+ const displayTextMapper = segment => {
796
+ const defaultDisplay = {
797
+ primary: [],
798
+ secondary: []
799
+ };
800
+
801
+ // If the segment has cachedStats, map it to readable text
802
+ if (segment.cachedStats) {
803
+ const primary = mapStatsToDisplay(segment.cachedStats);
804
+ defaultDisplay.primary = primary;
805
+ }
806
+ return defaultDisplay;
807
+ };
808
+ const updatedSegments = {};
809
+ Object.entries(segments).forEach(([segmentIndex, segment]) => {
810
+ updatedSegments[segmentIndex] = {
811
+ ...segment,
812
+ displayText: displayTextMapper(segment)
813
+ };
814
+ });
815
+
816
+ // Map the segments and apply the display text mapper
817
+ return {
818
+ ...segmentation,
819
+ label,
820
+ segments: updatedSegments
821
+ };
822
+ }
823
+
824
+ /**
825
+ * Custom hook that provides segmentation data.
826
+ * @param options - The options object.
827
+ * @param options.servicesManager - The services manager object.
828
+ * @param options.subscribeToDataModified - Whether to subscribe to segmentation data modifications.
829
+ * @param options.debounceTime - Debounce time in milliseconds for updates.
830
+ * @returns An array of segmentation data.
831
+ */
832
+ function useSegmentations({
833
+ servicesManager,
834
+ subscribeToDataModified = false,
835
+ debounceTime = 0
836
+ }) {
837
+ const {
838
+ segmentationService,
839
+ customizationService
840
+ } = servicesManager.services;
841
+ const [segmentations, setSegmentations] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)([]);
842
+ (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
843
+ const update = () => {
844
+ const segmentations = segmentationService.getSegmentations();
845
+ if (!segmentations?.length) {
846
+ setSegmentations([]);
847
+ return;
848
+ }
849
+ const mappedSegmentations = segmentations.map(segmentation => mapSegmentationToDisplay(segmentation, customizationService));
850
+ setSegmentations(mappedSegmentations);
851
+ };
852
+ const debouncedUpdate = debounceTime > 0 ? lodash_debounce__WEBPACK_IMPORTED_MODULE_1___default()(update, debounceTime, {
853
+ leading: true,
854
+ trailing: true
855
+ }) : update;
856
+ update();
857
+ const subscriptions = [segmentationService.subscribe(segmentationService.EVENTS.SEGMENTATION_MODIFIED, debouncedUpdate), segmentationService.subscribe(segmentationService.EVENTS.SEGMENTATION_REMOVED, debouncedUpdate)];
858
+ if (subscribeToDataModified) {
859
+ subscriptions.push(segmentationService.subscribe(segmentationService.EVENTS.SEGMENTATION_DATA_MODIFIED, debouncedUpdate));
860
+ }
861
+ return () => {
862
+ subscriptions.forEach(subscription => subscription.unsubscribe());
863
+ if (debounceTime > 0) {
864
+ debouncedUpdate.cancel();
865
+ }
866
+ };
867
+ }, [segmentationService, customizationService, debounceTime, subscribeToDataModified]);
868
+ return segmentations;
869
+ }
870
+
871
+ /***/ }),
872
+
873
+ /***/ 11185:
742
874
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
743
875
 
744
876
  // ESM COMPAT FLAG
@@ -766,7 +898,7 @@ __webpack_require__.d(__webpack_exports__, {
766
898
  useMeasurements: () => (/* reexport */ useMeasurements),
767
899
  usePositionPresentationStore: () => (/* reexport */ usePositionPresentationStore/* usePositionPresentationStore */.q),
768
900
  useSegmentationPresentationStore: () => (/* reexport */ useSegmentationPresentationStore/* useSegmentationPresentationStore */.v),
769
- useSegmentations: () => (/* reexport */ useSegmentations),
901
+ useSegmentations: () => (/* reexport */ useSegmentations/* useSegmentations */.j),
770
902
  useSynchronizersStore: () => (/* reexport */ useSynchronizersStore/* useSynchronizersStore */.U)
771
903
  });
772
904
 
@@ -7404,7 +7536,7 @@ function commandsModule({
7404
7536
  getCrosshairInstances(toolGroup.id);
7405
7537
  }
7406
7538
  crosshairInstances.forEach(ins => {
7407
- ins?.resetCrosshairs();
7539
+ ins?.computeToolCenter();
7408
7540
  });
7409
7541
  },
7410
7542
  /**
@@ -16433,126 +16565,8 @@ DicomUpload.propTypes = {
16433
16565
  onStarted: (prop_types_default()).func.isRequired
16434
16566
  };
16435
16567
  /* harmony default export */ const DicomUpload_DicomUpload = (DicomUpload);
16436
- ;// CONCATENATED MODULE: ../../../extensions/cornerstone/src/hooks/useSegmentations.ts
16437
-
16438
-
16439
-
16440
- function useSegmentations_mapSegmentationToDisplay(segmentation, customizationService) {
16441
- const {
16442
- label,
16443
- segments
16444
- } = segmentation;
16445
-
16446
- // Get the readable text mapping once
16447
- const {
16448
- readableText: readableTextMap
16449
- } = customizationService.getCustomization('PanelSegmentation.readableText', {});
16450
-
16451
- // Helper function to recursively map cachedStats to readable display text
16452
- function mapStatsToDisplay(stats, indent = 0) {
16453
- const primary = [];
16454
- const indentation = ' '.repeat(indent);
16455
- for (const key in stats) {
16456
- if (Object.prototype.hasOwnProperty.call(stats, key)) {
16457
- const value = stats[key];
16458
- const readableText = readableTextMap?.[key];
16459
- if (!readableText) {
16460
- continue;
16461
- }
16462
- if (typeof value === 'object' && value !== null && !Array.isArray(value)) {
16463
- // Add empty row before category (except for the first category)
16464
- if (primary.length > 0) {
16465
- primary.push('');
16466
- }
16467
- // Add category title
16468
- primary.push(`${indentation}${readableText}`);
16469
- // Recursively handle nested objects
16470
- primary.push(...mapStatsToDisplay(value, indent + 1));
16471
- } else {
16472
- // For non-nested values, don't add empty rows
16473
- primary.push(`${indentation}${readableText}: ${(0,utils/* roundNumber */.Wf)(value, 2)}`);
16474
- }
16475
- }
16476
- }
16477
- return primary;
16478
- }
16479
-
16480
- // Get customization for display text mapping
16481
- const displayTextMapper = segment => {
16482
- const defaultDisplay = {
16483
- primary: [],
16484
- secondary: []
16485
- };
16486
-
16487
- // If the segment has cachedStats, map it to readable text
16488
- if (segment.cachedStats) {
16489
- const primary = mapStatsToDisplay(segment.cachedStats);
16490
- defaultDisplay.primary = primary;
16491
- }
16492
- return defaultDisplay;
16493
- };
16494
- const updatedSegments = {};
16495
- Object.entries(segments).forEach(([segmentIndex, segment]) => {
16496
- updatedSegments[segmentIndex] = {
16497
- ...segment,
16498
- displayText: displayTextMapper(segment)
16499
- };
16500
- });
16501
-
16502
- // Map the segments and apply the display text mapper
16503
- return {
16504
- ...segmentation,
16505
- label,
16506
- segments: updatedSegments
16507
- };
16508
- }
16509
-
16510
- /**
16511
- * Custom hook that provides segmentation data.
16512
- * @param options - The options object.
16513
- * @param options.servicesManager - The services manager object.
16514
- * @param options.subscribeToDataModified - Whether to subscribe to segmentation data modifications.
16515
- * @param options.debounceTime - Debounce time in milliseconds for updates.
16516
- * @returns An array of segmentation data.
16517
- */
16518
- function useSegmentations({
16519
- servicesManager,
16520
- subscribeToDataModified = false,
16521
- debounceTime = 0
16522
- }) {
16523
- const {
16524
- segmentationService,
16525
- customizationService
16526
- } = servicesManager.services;
16527
- const [segmentations, setSegmentations] = (0,react.useState)([]);
16528
- (0,react.useEffect)(() => {
16529
- const update = () => {
16530
- const segmentations = segmentationService.getSegmentations();
16531
- if (!segmentations?.length) {
16532
- setSegmentations([]);
16533
- return;
16534
- }
16535
- const mappedSegmentations = segmentations.map(segmentation => useSegmentations_mapSegmentationToDisplay(segmentation, customizationService));
16536
- setSegmentations(mappedSegmentations);
16537
- };
16538
- const debouncedUpdate = debounceTime > 0 ? lodash_debounce_default()(update, debounceTime, {
16539
- leading: true,
16540
- trailing: true
16541
- }) : update;
16542
- update();
16543
- const subscriptions = [segmentationService.subscribe(segmentationService.EVENTS.SEGMENTATION_MODIFIED, debouncedUpdate), segmentationService.subscribe(segmentationService.EVENTS.SEGMENTATION_REMOVED, debouncedUpdate)];
16544
- if (subscribeToDataModified) {
16545
- subscriptions.push(segmentationService.subscribe(segmentationService.EVENTS.SEGMENTATION_DATA_MODIFIED, debouncedUpdate));
16546
- }
16547
- return () => {
16548
- subscriptions.forEach(subscription => subscription.unsubscribe());
16549
- if (debounceTime > 0) {
16550
- debouncedUpdate.cancel();
16551
- }
16552
- };
16553
- }, [segmentationService, customizationService, debounceTime, subscribeToDataModified]);
16554
- return segmentations;
16555
- }
16568
+ // EXTERNAL MODULE: ../../../extensions/cornerstone/src/hooks/useSegmentations.ts
16569
+ var useSegmentations = __webpack_require__(73421);
16556
16570
  ;// CONCATENATED MODULE: ../../../extensions/cornerstone/src/index.tsx
16557
16571
  function src_extends() { return src_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; }, src_extends.apply(null, arguments); }
16558
16572
 
@@ -5743,9 +5743,13 @@ class CrosshairsTool extends base/* AnnotationTool */.EC {
5743
5743
  }
5744
5744
  viewport.render();
5745
5745
  }
5746
- this.computeToolCenter(viewportsInfo);
5746
+ this._computeToolCenter(viewportsInfo);
5747
5747
  };
5748
- this.computeToolCenter = (viewportsInfo) => {
5748
+ this.computeToolCenter = () => {
5749
+ const viewportsInfo = this._getViewportsInfo();
5750
+ this._computeToolCenter(viewportsInfo);
5751
+ };
5752
+ this._computeToolCenter = (viewportsInfo) => {
5749
5753
  if (!viewportsInfo.length || viewportsInfo.length === 1) {
5750
5754
  console.warn('For crosshairs to operate, at least two viewports must be given.');
5751
5755
  return;
@@ -6288,7 +6292,7 @@ class CrosshairsTool extends base/* AnnotationTool */.EC {
6288
6292
  };
6289
6293
  this._onNewVolume = () => {
6290
6294
  const viewportsInfo = this._getViewportsInfo();
6291
- this.computeToolCenter(viewportsInfo);
6295
+ this._computeToolCenter(viewportsInfo);
6292
6296
  };
6293
6297
  this._areViewportIdArraysEqual = (viewportIdArrayOne, viewportIdArrayTwo) => {
6294
6298
  if (viewportIdArrayOne.length !== viewportIdArrayTwo.length) {
@@ -6757,15 +6761,15 @@ class CrosshairsTool extends base/* AnnotationTool */.EC {
6757
6761
  const viewportsInfo = this._getViewportsInfo();
6758
6762
  this._unsubscribeToViewportNewVolumeSet(viewportsInfo);
6759
6763
  this._subscribeToViewportNewVolumeSet(viewportsInfo);
6760
- this.computeToolCenter(viewportsInfo);
6764
+ this._computeToolCenter(viewportsInfo);
6761
6765
  }
6762
6766
  onSetToolPassive() {
6763
6767
  const viewportsInfo = this._getViewportsInfo();
6764
- this.computeToolCenter(viewportsInfo);
6768
+ this._computeToolCenter(viewportsInfo);
6765
6769
  }
6766
6770
  onSetToolEnabled() {
6767
6771
  const viewportsInfo = this._getViewportsInfo();
6768
- this.computeToolCenter(viewportsInfo);
6772
+ this._computeToolCenter(viewportsInfo);
6769
6773
  }
6770
6774
  onSetToolDisabled() {
6771
6775
  const viewportsInfo = this._getViewportsInfo();
@@ -6292,6 +6292,7 @@ async function addLabelmapToElement(element, labelMapData, segmentationId) {
6292
6292
  ];
6293
6293
  await (0,_cornerstonejs_core__WEBPACK_IMPORTED_MODULE_0__.addImageSlicesToViewports)(renderingEngine, stackInputs, [viewportId]);
6294
6294
  }
6295
+ (0,_stateManagement_segmentation_triggerSegmentationEvents__WEBPACK_IMPORTED_MODULE_3__.triggerSegmentationDataModified)(segmentationId);
6295
6296
  }
6296
6297
  function _ensureVolumeHasVolumeId(labelMapData, segmentationId) {
6297
6298
  let { volumeId } = labelMapData;
@@ -71,17 +71,14 @@
71
71
  /******/ }
72
72
  /******/ // Create a new module (and put it into the cache)
73
73
  /******/ var module = __webpack_module_cache__[moduleId] = {
74
- /******/ id: moduleId,
75
- /******/ loaded: false,
74
+ /******/ // no module.id needed
75
+ /******/ // no module.loaded needed
76
76
  /******/ exports: {}
77
77
  /******/ };
78
78
  /******/
79
79
  /******/ // Execute the module function
80
80
  /******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
81
81
  /******/
82
- /******/ // Flag the module as loaded
83
- /******/ module.loaded = true;
84
- /******/
85
82
  /******/ // Return the exports of the module
86
83
  /******/ return module.exports;
87
84
  /******/ }
@@ -99,11 +96,6 @@
99
96
  /******/ };
100
97
  /******/
101
98
  /************************************************************************/
102
- /******/ /* webpack/runtime/amd options */
103
- /******/ (() => {
104
- /******/ __webpack_require__.amdO = {};
105
- /******/ })();
106
- /******/
107
99
  /******/ /* webpack/runtime/chunk loaded */
108
100
  /******/ (() => {
109
101
  /******/ var deferred = [];
@@ -150,6 +142,36 @@
150
142
  /******/ };
151
143
  /******/ })();
152
144
  /******/
145
+ /******/ /* webpack/runtime/create fake namespace object */
146
+ /******/ (() => {
147
+ /******/ var getProto = Object.getPrototypeOf ? (obj) => (Object.getPrototypeOf(obj)) : (obj) => (obj.__proto__);
148
+ /******/ var leafPrototypes;
149
+ /******/ // create a fake namespace object
150
+ /******/ // mode & 1: value is a module id, require it
151
+ /******/ // mode & 2: merge all properties of value into the ns
152
+ /******/ // mode & 4: return value when already ns object
153
+ /******/ // mode & 16: return value when it's Promise-like
154
+ /******/ // mode & 8|1: behave like require
155
+ /******/ __webpack_require__.t = function(value, mode) {
156
+ /******/ if(mode & 1) value = this(value);
157
+ /******/ if(mode & 8) return value;
158
+ /******/ if(typeof value === 'object' && value) {
159
+ /******/ if((mode & 4) && value.__esModule) return value;
160
+ /******/ if((mode & 16) && typeof value.then === 'function') return value;
161
+ /******/ }
162
+ /******/ var ns = Object.create(null);
163
+ /******/ __webpack_require__.r(ns);
164
+ /******/ var def = {};
165
+ /******/ leafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];
166
+ /******/ for(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {
167
+ /******/ Object.getOwnPropertyNames(current).forEach((key) => (def[key] = () => (value[key])));
168
+ /******/ }
169
+ /******/ def['default'] = () => (value);
170
+ /******/ __webpack_require__.d(ns, def);
171
+ /******/ return ns;
172
+ /******/ };
173
+ /******/ })();
174
+ /******/
153
175
  /******/ /* webpack/runtime/define property getters */
154
176
  /******/ (() => {
155
177
  /******/ // define getter functions for harmony exports
@@ -180,7 +202,7 @@
180
202
  /******/ // This function allow to reference async chunks and sibling chunks for the entrypoint
181
203
  /******/ __webpack_require__.u = (chunkId) => {
182
204
  /******/ // return url for filenames based on template
183
- /******/ return "" + chunkId + ".bundle." + {"4571":"b504060ff3f87e81f8f0","8094":"411698eaf81975a7f12d","9952":"858170b3010546ae8b93"}[chunkId] + ".js";
205
+ /******/ return "" + chunkId + ".bundle." + {"4571":"9ad4f229948c2a2da2ec","8094":"411698eaf81975a7f12d","9952":"6f1a92b82c42c60f57eb"}[chunkId] + ".js";
184
206
  /******/ };
185
207
  /******/ })();
186
208
  /******/
@@ -193,33 +215,6 @@
193
215
  /******/ };
194
216
  /******/ })();
195
217
  /******/
196
- /******/ /* webpack/runtime/global */
197
- /******/ (() => {
198
- /******/ __webpack_require__.g = (function() {
199
- /******/ if (typeof globalThis === 'object') return globalThis;
200
- /******/ try {
201
- /******/ return this || new Function('return this')();
202
- /******/ } catch (e) {
203
- /******/ if (typeof window === 'object') return window;
204
- /******/ }
205
- /******/ })();
206
- /******/ })();
207
- /******/
208
- /******/ /* webpack/runtime/harmony module decorator */
209
- /******/ (() => {
210
- /******/ __webpack_require__.hmd = (module) => {
211
- /******/ module = Object.create(module);
212
- /******/ if (!module.children) module.children = [];
213
- /******/ Object.defineProperty(module, 'exports', {
214
- /******/ enumerable: true,
215
- /******/ set: () => {
216
- /******/ throw new Error('ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: ' + module.id);
217
- /******/ }
218
- /******/ });
219
- /******/ return module;
220
- /******/ };
221
- /******/ })();
222
- /******/
223
218
  /******/ /* webpack/runtime/hasOwnProperty shorthand */
224
219
  /******/ (() => {
225
220
  /******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
@@ -970,8 +970,8 @@ PanelPetSUV.propTypes = {
970
970
  }).isRequired
971
971
  }).isRequired
972
972
  };
973
- // EXTERNAL MODULE: ../../../extensions/cornerstone/src/index.tsx + 106 modules
974
- var cornerstone_src = __webpack_require__(92455);
973
+ // EXTERNAL MODULE: ../../../extensions/cornerstone/src/index.tsx + 105 modules
974
+ var cornerstone_src = __webpack_require__(11185);
975
975
  // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/index.js
976
976
  var esm = __webpack_require__(81985);
977
977
  ;// CONCATENATED MODULE: ../../../extensions/tmtv/src/utils/handleROIThresholding.ts
@@ -824,7 +824,7 @@ function decodeJPEGLossless_initialize(decodeConfig) {
824
824
  return Promise.resolve();
825
825
  }
826
826
  return new Promise((resolve, reject) => {
827
- __webpack_require__.e(/* import() */ 9952).then(__webpack_require__.bind(__webpack_require__, 69952)).then((jpeg) => {
827
+ __webpack_require__.e(/* import() */ 9952).then(__webpack_require__.t.bind(__webpack_require__, 69952, 23)).then((jpeg) => {
828
828
  decodeJPEGLossless_local.jpeg = jpeg;
829
829
  resolve();
830
830
  }, reject);
@@ -28,8 +28,8 @@ var src = __webpack_require__(29463);
28
28
  var esm = __webpack_require__(81985);
29
29
  // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/adapters/dist/esm/index.js + 61 modules
30
30
  var dist_esm = __webpack_require__(33970);
31
- // EXTERNAL MODULE: ../../../extensions/cornerstone/src/index.tsx + 106 modules
32
- var cornerstone_src = __webpack_require__(92455);
31
+ // EXTERNAL MODULE: ../../../extensions/cornerstone/src/index.tsx + 105 modules
32
+ var cornerstone_src = __webpack_require__(11185);
33
33
  ;// CONCATENATED MODULE: ../../../extensions/cornerstone-dicom-pmap/src/getSopClassHandlerModule.ts
34
34
 
35
35
 
@@ -75,8 +75,8 @@ __webpack_require__.d(__webpack_exports__, {
75
75
  var react = __webpack_require__(86326);
76
76
  // EXTERNAL MODULE: ../../core/src/index.ts + 71 modules
77
77
  var src = __webpack_require__(29463);
78
- // EXTERNAL MODULE: ../../../extensions/cornerstone/src/index.tsx + 106 modules
79
- var cornerstone_src = __webpack_require__(92455);
78
+ // EXTERNAL MODULE: ../../../extensions/cornerstone/src/index.tsx + 105 modules
79
+ var cornerstone_src = __webpack_require__(11185);
80
80
  // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/adapters/dist/esm/index.js + 61 modules
81
81
  var esm = __webpack_require__(33970);
82
82
  // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/tools/dist/esm/index.js + 82 modules
@@ -2122,8 +2122,8 @@ function getLabelFromDCMJSImportedToolData(toolData) {
2122
2122
  }
2123
2123
  // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/tools/dist/esm/index.js + 82 modules
2124
2124
  var tools_dist_esm = __webpack_require__(55139);
2125
- // EXTERNAL MODULE: ../../../extensions/cornerstone/src/index.tsx + 106 modules
2126
- var cornerstone_src = __webpack_require__(92455);
2125
+ // EXTERNAL MODULE: ../../../extensions/cornerstone/src/index.tsx + 105 modules
2126
+ var cornerstone_src = __webpack_require__(11185);
2127
2127
  ;// CONCATENATED MODULE: ../../../extensions/cornerstone-dicom-sr/src/utils/hydrateStructuredReport.ts
2128
2128
 
2129
2129
 
@@ -10950,9 +10950,13 @@ class CrosshairsTool extends base/* AnnotationTool */.EC {
10950
10950
  }
10951
10951
  viewport.render();
10952
10952
  }
10953
- this.computeToolCenter(viewportsInfo);
10953
+ this._computeToolCenter(viewportsInfo);
10954
10954
  };
10955
- this.computeToolCenter = (viewportsInfo) => {
10955
+ this.computeToolCenter = () => {
10956
+ const viewportsInfo = this._getViewportsInfo();
10957
+ this._computeToolCenter(viewportsInfo);
10958
+ };
10959
+ this._computeToolCenter = (viewportsInfo) => {
10956
10960
  if (!viewportsInfo.length || viewportsInfo.length === 1) {
10957
10961
  console.warn('For crosshairs to operate, at least two viewports must be given.');
10958
10962
  return;
@@ -11495,7 +11499,7 @@ class CrosshairsTool extends base/* AnnotationTool */.EC {
11495
11499
  };
11496
11500
  this._onNewVolume = () => {
11497
11501
  const viewportsInfo = this._getViewportsInfo();
11498
- this.computeToolCenter(viewportsInfo);
11502
+ this._computeToolCenter(viewportsInfo);
11499
11503
  };
11500
11504
  this._areViewportIdArraysEqual = (viewportIdArrayOne, viewportIdArrayTwo) => {
11501
11505
  if (viewportIdArrayOne.length !== viewportIdArrayTwo.length) {
@@ -11964,15 +11968,15 @@ class CrosshairsTool extends base/* AnnotationTool */.EC {
11964
11968
  const viewportsInfo = this._getViewportsInfo();
11965
11969
  this._unsubscribeToViewportNewVolumeSet(viewportsInfo);
11966
11970
  this._subscribeToViewportNewVolumeSet(viewportsInfo);
11967
- this.computeToolCenter(viewportsInfo);
11971
+ this._computeToolCenter(viewportsInfo);
11968
11972
  }
11969
11973
  onSetToolPassive() {
11970
11974
  const viewportsInfo = this._getViewportsInfo();
11971
- this.computeToolCenter(viewportsInfo);
11975
+ this._computeToolCenter(viewportsInfo);
11972
11976
  }
11973
11977
  onSetToolEnabled() {
11974
11978
  const viewportsInfo = this._getViewportsInfo();
11975
- this.computeToolCenter(viewportsInfo);
11979
+ this._computeToolCenter(viewportsInfo);
11976
11980
  }
11977
11981
  onSetToolDisabled() {
11978
11982
  const viewportsInfo = this._getViewportsInfo();
@@ -1097,8 +1097,8 @@ function WorkflowPanel({
1097
1097
 
1098
1098
 
1099
1099
 
1100
- // EXTERNAL MODULE: ../../../extensions/cornerstone/src/index.tsx + 106 modules
1101
- var cornerstone_src = __webpack_require__(92455);
1100
+ // EXTERNAL MODULE: ../../../extensions/cornerstone/src/index.tsx + 105 modules
1101
+ var cornerstone_src = __webpack_require__(11185);
1102
1102
  ;// CONCATENATED MODULE: ../../../extensions/cornerstone-dynamic-volume/src/panels/DynamicExport.tsx
1103
1103
 
1104
1104
 
@@ -1917,8 +1917,8 @@ WrappedPanelStudyBrowserTracking.propTypes = {
1917
1917
  servicesManager: (prop_types_default()).object.isRequired
1918
1918
  };
1919
1919
  /* harmony default export */ const panels_PanelStudyBrowserTracking = (WrappedPanelStudyBrowserTracking);
1920
- // EXTERNAL MODULE: ../../../extensions/cornerstone/src/index.tsx + 106 modules
1921
- var cornerstone_src = __webpack_require__(92455);
1920
+ // EXTERNAL MODULE: ../../../extensions/cornerstone/src/index.tsx + 105 modules
1921
+ var cornerstone_src = __webpack_require__(11185);
1922
1922
  ;// CONCATENATED MODULE: ../../../extensions/measurement-tracking/src/panels/PanelMeasurementTableTracking.tsx
1923
1923
 
1924
1924
 
@@ -121,26 +121,23 @@ class BaseVolumeViewport extends _Viewport__WEBPACK_IMPORTED_MODULE_18__/* ["def
121
121
  return;
122
122
  }
123
123
  const { colormap: latestColormap, VOILUTFunction, interpolationType, invert, slabThickness, preset, } = this.viewportProperties;
124
- const volume = _cache_cache__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .Ay.getVolume(this.getVolumeId());
124
+ volumeId ||= this.getVolumeId();
125
+ const volume = _cache_cache__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .Ay.getVolume(volumeId);
125
126
  if (!volume) {
126
127
  return null;
127
128
  }
128
- const voiRanges = this.getActors()
129
- .map((actorEntry) => {
130
- const volumeActor = actorEntry.actor;
131
- if (!(0,_utilities_actorCheck__WEBPACK_IMPORTED_MODULE_21__/* .actorIsA */ .N)(actorEntry, 'vtkVolume')) {
132
- return null;
133
- }
134
- const cfun = volumeActor.getProperty().getRGBTransferFunction(0);
135
- const [lower, upper] = this.viewportProperties?.VOILUTFunction === 'SIGMOID'
136
- ? (0,_utilities_getVoiFromSigmoidRGBTransferFunction__WEBPACK_IMPORTED_MODULE_23__/* ["default"] */ .A)(cfun)
137
- : cfun.getRange();
138
- return { volumeId, voiRange: { lower, upper } };
139
- })
140
- .filter(Boolean);
141
- const voiRange = volumeId
142
- ? voiRanges.find((range) => range.volumeId === volumeId)?.voiRange
143
- : voiRanges[0]?.voiRange;
129
+ const volumeActorEntry = this.getActors().find((actorEntry) => {
130
+ return actorEntry.referencedId === volumeId;
131
+ });
132
+ if (!volumeActorEntry) {
133
+ return;
134
+ }
135
+ const volumeActor = volumeActorEntry.actor;
136
+ const cfun = volumeActor.getProperty().getRGBTransferFunction(0);
137
+ const [lower, upper] = this.viewportProperties?.VOILUTFunction === 'SIGMOID'
138
+ ? (0,_utilities_getVoiFromSigmoidRGBTransferFunction__WEBPACK_IMPORTED_MODULE_23__/* ["default"] */ .A)(cfun)
139
+ : cfun.getRange();
140
+ const voiRange = { lower, upper };
144
141
  const volumeColormap = this.getColormap(volumeId);
145
142
  const colormap = volumeId && volumeColormap ? volumeColormap : latestColormap;
146
143
  return {
@@ -3047,8 +3047,8 @@ function ViewerHeader({
3047
3047
  hotkeyDefinitions,
3048
3048
  hotkeyDefaults
3049
3049
  } = hotkeysManager;
3050
- const versionNumber = "3.9.0-beta.107";
3051
- const commitHash = "c80cd6102d474c4e6feae4f4a1e0224dfb501573";
3050
+ const versionNumber = "3.9.0-beta.108";
3051
+ const commitHash = "aa2b649444eb4fe5422e72ea7830a709c4d24a90";
3052
3052
  const menuOptions = [{
3053
3053
  title: t('Header:About'),
3054
3054
  icon: 'info',
@@ -6824,6 +6824,11 @@ const commandsModule = ({
6824
6824
  findOrCreateViewport,
6825
6825
  isHangingProtocolLayout: true
6826
6826
  });
6827
+
6828
+ // Reset crosshairs after restoring the layout
6829
+ setTimeout(() => {
6830
+ commandsManager.runCommand('resetCrosshairs');
6831
+ }, 0);
6827
6832
  } else {
6828
6833
  // We are not in one-up, so toggle to one up.
6829
6834