@ohif/app 3.10.1 → 3.10.2

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 (44) hide show
  1. package/dist/{1919.bundle.6f7de53921f3710a1d54.js → 1919.bundle.6cb4a1f5ea770e504398.js} +2 -2
  2. package/dist/{1927.bundle.83810560c4d3a90eb7cf.js → 1927.bundle.5c25b9084f704a3582d2.js} +1 -1
  3. package/dist/{3396.bundle.858cfdfc5ab560840958.js → 2482.bundle.0947bc67ad4429d5fda3.js} +289 -1353
  4. package/dist/{2701.bundle.f1f15df81406d04851c4.js → 2701.bundle.87301d8d94693b5d5fcc.js} +2 -2
  5. package/dist/{2860.bundle.5d93c30e2df60e382bda.js → 2860.bundle.130f5c83c90c83017101.js} +1368 -28
  6. package/dist/{2914.bundle.a0a5ddfebfc9d429063d.js → 2914.bundle.adefec5b51b4955af1f9.js} +2 -0
  7. package/dist/{2932.bundle.038f79dbbfdd9d1f387b.js → 2932.bundle.2757ab993a28dab49d56.js} +2 -2
  8. package/dist/{3075.bundle.0624f6bf3f676f30d1b5.js → 3075.bundle.5d83563c3791a0d884df.js} +16 -3
  9. package/dist/{3353.bundle.184ebb9668df2cbebd26.js → 3353.bundle.1b2d3da25de70f5f1042.js} +33 -4
  10. package/dist/{3984.bundle.592161af4b618c9dd56f.js → 3984.bundle.1248e382e82ee04eff72.js} +12 -7
  11. package/dist/{4113.bundle.7ec6da0eb1ab98e1b791.js → 4113.bundle.1a3202dd6a1b2e6b9d5d.js} +5 -5
  12. package/dist/{4526.bundle.fbdd617a934353019be3.js → 4526.bundle.54c0b8f753ed5c39f6c5.js} +2 -2
  13. package/dist/{6029.bundle.43e04238ac01880fa66c.js → 6029.bundle.a4206e2a2e75c7b1ad7b.js} +238 -40
  14. package/dist/{6066.bundle.345453ace06e86bc481c.js → 6066.bundle.89df990e4f257e8ac73b.js} +1466 -39
  15. package/dist/{6201.bundle.e0d8d1c967a9daed4662.js → 6201.bundle.b584d7554570344d9170.js} +4 -4
  16. package/dist/{7197.bundle.a9c6429f2859a8feeded.js → 7197.bundle.2032eea26c084877d172.js} +3 -3
  17. package/dist/{810.bundle.86ba4f6f1311ccc28d41.js → 810.bundle.8b29de53f9632f0f1bf9.js} +4 -4
  18. package/dist/{8185.bundle.b2252d9ff14ce760df9c.js → 8185.bundle.c7e0ab58fa8f7070de26.js} +22 -16
  19. package/dist/{8558.bundle.5b67110ba3e66f5525ae.js → 8558.bundle.24bb90c2d5a0857577c5.js} +1 -1
  20. package/dist/{7241.bundle.7097a0cd314605d766f5.js → 8572.bundle.bd98ac784dae1e224a52.js} +135 -47
  21. package/dist/{3166.bundle.40162f1d9f9f5fc16b16.js → 908.bundle.7f901ab4610793bb5ee3.js} +29 -5
  22. package/dist/{934.bundle.c446dfb396152899756f.js → 934.bundle.441c775536d8be5029af.js} +2 -2
  23. package/dist/{963.bundle.88152346007c0f5049a3.js → 963.bundle.4b88a54196fdd1976d6c.js} +2 -2
  24. package/dist/{9890.bundle.37d7ed265c0454337a57.js → 9890.bundle.b4c265e3609512785ae8.js} +2 -2
  25. package/dist/{9977.bundle.071821200c1921021d29.js → 9977.bundle.4f44190c1a5d6a69bc00.js} +3 -1
  26. package/dist/{app.bundle.d09601053966ecdcfe4b.js → app.bundle.223c009cd6f636320f76.js} +2148 -1758
  27. package/dist/app.bundle.css +2 -2
  28. package/dist/{compute.bundle.f0c30502c027d04e94f2.js → compute.bundle.83a75c96620eedca973e.js} +3 -3
  29. package/dist/index.html +1 -1
  30. package/dist/{polySeg.bundle.7445d00e1e9ef623d0f1.js → polySeg.bundle.30f6f13491f48e597605.js} +3 -3
  31. package/dist/sw.js +1 -1
  32. package/package.json +19 -19
  33. /package/dist/{1459.bundle.4b6682c8673e199edf64.js → 1459.bundle.ea2023918c1ef217d23a.js} +0 -0
  34. /package/dist/{1807.bundle.e8c6890ca68e62f46990.js → 1807.bundle.a04f3486b00cdcc6a305.js} +0 -0
  35. /package/dist/{213.bundle.d8495e69f1d1405d0356.js → 213.bundle.e861b773d4779d7d724a.js} +0 -0
  36. /package/dist/{2424.bundle.ef98022039ea6e87cfd9.js → 2424.bundle.425cb2260521f2a23f70.js} +0 -0
  37. /package/dist/{3658.bundle.04fdfe11b9d38cd5f3c6.js → 3658.bundle.a6a9c2e1b32d92e3b621.js} +0 -0
  38. /package/dist/{6027.bundle.155cbff7fa97c7ede627.js → 6027.bundle.8e1b6021f0d570eb85f5.js} +0 -0
  39. /package/dist/{7639.bundle.a659acbf2ab7f3f2e8f4.js → 7639.bundle.b622eafdc74d9bfc1280.js} +0 -0
  40. /package/dist/{8228.bundle.74c8ca5e66a44db80464.js → 8228.bundle.f520ecf3c0a8998e770a.js} +0 -0
  41. /package/dist/{85.bundle.e65ed829e1a136e33576.js → 85.bundle.a27a1466f85e01adf8e8.js} +0 -0
  42. /package/dist/{8815.bundle.c8a97b220635e9b15109.js → 8815.bundle.096958a5ae7253911a2e.js} +0 -0
  43. /package/dist/{9026.bundle.eb2ae9e2311a6a620751.js → 9026.bundle.019d8b4b70096b94302e.js} +0 -0
  44. /package/dist/{9862.bundle.87d8249a9cf1d8cf579d.js → 9862.bundle.b0ea941458506379f666.js} +0 -0
@@ -26,10 +26,10 @@ var react = __webpack_require__(86326);
26
26
  var src = __webpack_require__(62037);
27
27
  // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/index.js + 1 modules
28
28
  var esm = __webpack_require__(15327);
29
- // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/adapters/dist/esm/index.js + 64 modules
30
- var dist_esm = __webpack_require__(59874);
31
- // EXTERNAL MODULE: ../../../extensions/cornerstone/src/index.tsx + 134 modules
32
- var cornerstone_src = __webpack_require__(7241);
29
+ // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/adapters/dist/esm/index.js + 65 modules
30
+ var dist_esm = __webpack_require__(93468);
31
+ // EXTERNAL MODULE: ../../../extensions/cornerstone/src/index.tsx + 135 modules
32
+ var cornerstone_src = __webpack_require__(78572);
33
33
  ;// CONCATENATED MODULE: ../../../extensions/cornerstone-dicom-pmap/src/getSopClassHandlerModule.ts
34
34
 
35
35
 
@@ -28,8 +28,8 @@ var src = __webpack_require__(62037);
28
28
  var esm = __webpack_require__(15327);
29
29
  // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/tools/dist/esm/index.js
30
30
  var dist_esm = __webpack_require__(4667);
31
- // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/adapters/dist/esm/index.js + 64 modules
32
- var adapters_dist_esm = __webpack_require__(59874);
31
+ // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/adapters/dist/esm/index.js + 65 modules
32
+ var adapters_dist_esm = __webpack_require__(93468);
33
33
  // EXTERNAL MODULE: ../../../node_modules/dcmjs/build/dcmjs.es.js
34
34
  var dcmjs_es = __webpack_require__(5842);
35
35
  ;// CONCATENATED MODULE: ../../../extensions/cornerstone-dicom-seg/src/utils/dicomlabToRGB.ts
@@ -733,7 +733,7 @@ function _extends() { return _extends = Object.assign ? Object.assign.bind() : f
733
733
 
734
734
 
735
735
  const Component = /*#__PURE__*/react.lazy(() => {
736
- return Promise.all(/* import() */[__webpack_require__.e(8185), __webpack_require__.e(7241), __webpack_require__.e(4526)]).then(__webpack_require__.bind(__webpack_require__, 58295));
736
+ return Promise.all(/* import() */[__webpack_require__.e(8185), __webpack_require__.e(8572), __webpack_require__.e(4526)]).then(__webpack_require__.bind(__webpack_require__, 58295));
737
737
  });
738
738
  const OHIFCornerstoneSEGViewport = props => {
739
739
  return /*#__PURE__*/react.createElement(react.Suspense, {
@@ -978,8 +978,8 @@ PanelPetSUV.propTypes = {
978
978
  }).isRequired
979
979
  }).isRequired
980
980
  };
981
- // EXTERNAL MODULE: ../../../extensions/cornerstone/src/index.tsx + 134 modules
982
- var cornerstone_src = __webpack_require__(7241);
981
+ // EXTERNAL MODULE: ../../../extensions/cornerstone/src/index.tsx + 135 modules
982
+ var cornerstone_src = __webpack_require__(78572);
983
983
  ;// CONCATENATED MODULE: ../../../extensions/tmtv/src/utils/handleROIThresholding.ts
984
984
  const handleROIThresholding = async ({
985
985
  commandsManager,
@@ -1475,8 +1475,8 @@ function createAndDownloadTMTVReport(segReport, additionalReportRows, options =
1475
1475
  }
1476
1476
  // EXTERNAL MODULE: ../../../node_modules/dcmjs/build/dcmjs.es.js
1477
1477
  var dcmjs_es = __webpack_require__(5842);
1478
- // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/adapters/dist/esm/index.js + 64 modules
1479
- var adapters_dist_esm = __webpack_require__(59874);
1478
+ // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/adapters/dist/esm/index.js + 65 modules
1479
+ var adapters_dist_esm = __webpack_require__(93468);
1480
1480
  ;// CONCATENATED MODULE: ../../../extensions/tmtv/src/utils/dicomRTAnnotationExport/RTStructureSet/dicomRTAnnotationExport.js
1481
1481
 
1482
1482
 
@@ -3629,9 +3629,12 @@ __webpack_require__.r(__webpack_exports__);
3629
3629
  // EXPORTS
3630
3630
  __webpack_require__.d(__webpack_exports__, {
3631
3631
  canComputeRequestedRepresentation: () => (/* reexport */ canComputeRequestedRepresentation),
3632
+ clipAndCacheSurfacesForViewport: () => (/* reexport */ clipAndCacheSurfacesForViewport),
3632
3633
  computeContourData: () => (/* reexport */ computeContourData),
3633
3634
  computeLabelmapData: () => (/* reexport */ computeLabelmapData),
3634
3635
  computeSurfaceData: () => (/* reexport */ computeSurfaceData),
3636
+ createAndAddContourSegmentationsFromClippedSurfaces: () => (/* reexport */ createAndAddContourSegmentationsFromClippedSurfaces),
3637
+ extractContourData: () => (/* reexport */ extractContourData),
3635
3638
  init: () => (/* binding */ init),
3636
3639
  updateSurfaceData: () => (/* reexport */ updateSurfaceData)
3637
3640
  });
@@ -3861,7 +3864,7 @@ async function computeSurfaceFromContourSegmentation(segmentationId, options = {
3861
3864
  ;// CONCATENATED MODULE: ../../../node_modules/@cornerstonejs/polymorphic-segmentation/dist/esm/registerPolySegWorker.js
3862
3865
 
3863
3866
  let registered = false;
3864
- function registerPolySegWorker() {
3867
+ function registerPolySegWorker(userOptions) {
3865
3868
  if (registered) {
3866
3869
  return;
3867
3870
  }
@@ -3873,13 +3876,14 @@ function registerPolySegWorker() {
3873
3876
  });
3874
3877
  };
3875
3878
  const workerManager = (0,esm.getWebWorkerManager)();
3876
- const options = {
3879
+ const defaultOptions = {
3877
3880
  maxWorkerInstances: 1,
3878
3881
  autoTerminateOnIdle: {
3879
3882
  enabled: true,
3880
3883
  idleTimeThreshold: 2000,
3881
3884
  },
3882
3885
  };
3886
+ const options = esm.utilities.deepMerge(defaultOptions, userOptions);
3883
3887
  workerManager.registerWorker('polySeg', workerFn, options);
3884
3888
  }
3885
3889
 
@@ -4453,33 +4457,32 @@ async function computeLabelmapFromSurfaceSegmentation(segmentationId, options =
4453
4457
 
4454
4458
  ;// CONCATENATED MODULE: ../../../node_modules/@cornerstonejs/polymorphic-segmentation/dist/esm/canComputeRequestedRepresentation.js
4455
4459
 
4456
- const { SegmentationRepresentations: canComputeRequestedRepresentation_SegmentationRepresentations } = dist_esm.Enums;
4457
4460
  const { getSegmentation: canComputeRequestedRepresentation_getSegmentation } = dist_esm.segmentation.state;
4458
4461
  const { validateLabelmap } = dist_esm.utilities.segmentation;
4459
4462
  const conversionPaths = new Map([
4460
4463
  [
4461
- canComputeRequestedRepresentation_SegmentationRepresentations.Labelmap,
4464
+ dist_esm.Enums.SegmentationRepresentations.Labelmap,
4462
4465
  new Set([
4463
- canComputeRequestedRepresentation_SegmentationRepresentations.Surface,
4464
- canComputeRequestedRepresentation_SegmentationRepresentations.Contour,
4466
+ dist_esm.Enums.SegmentationRepresentations.Surface,
4467
+ dist_esm.Enums.SegmentationRepresentations.Contour,
4465
4468
  ]),
4466
4469
  ],
4467
4470
  [
4468
- canComputeRequestedRepresentation_SegmentationRepresentations.Contour,
4471
+ dist_esm.Enums.SegmentationRepresentations.Contour,
4469
4472
  new Set([
4470
- canComputeRequestedRepresentation_SegmentationRepresentations.Labelmap,
4471
- canComputeRequestedRepresentation_SegmentationRepresentations.Surface,
4473
+ dist_esm.Enums.SegmentationRepresentations.Labelmap,
4474
+ dist_esm.Enums.SegmentationRepresentations.Surface,
4472
4475
  ]),
4473
4476
  ],
4474
4477
  [
4475
- canComputeRequestedRepresentation_SegmentationRepresentations.Surface,
4476
- new Set([canComputeRequestedRepresentation_SegmentationRepresentations.Labelmap]),
4478
+ dist_esm.Enums.SegmentationRepresentations.Surface,
4479
+ new Set([dist_esm.Enums.SegmentationRepresentations.Labelmap]),
4477
4480
  ],
4478
4481
  ]);
4479
- function canComputeRequestedRepresentation(segmentationId, type) {
4482
+ function canComputeRequestedRepresentation(segmentationId, representationType) {
4480
4483
  const { representationData } = canComputeRequestedRepresentation_getSegmentation(segmentationId);
4481
4484
  const existingRepresentationTypes = getExistingRepresentationTypes(representationData);
4482
- return existingRepresentationTypes.some((existingRepresentationType) => canConvertFromTo(existingRepresentationType, type));
4485
+ return existingRepresentationTypes.some((existingRepresentationType) => canConvertFromTo(existingRepresentationType, representationType));
4483
4486
  }
4484
4487
  function getExistingRepresentationTypes(representationData) {
4485
4488
  const supportedTypes = [];
@@ -4487,7 +4490,7 @@ function getExistingRepresentationTypes(representationData) {
4487
4490
  const representationTypeData = representationData[representationType];
4488
4491
  let validateFn;
4489
4492
  switch (representationType) {
4490
- case canComputeRequestedRepresentation_SegmentationRepresentations.Labelmap:
4493
+ case dist_esm.Enums.SegmentationRepresentations.Labelmap:
4491
4494
  validateFn = validateLabelmap.validate;
4492
4495
  break;
4493
4496
  }
@@ -4602,8 +4605,11 @@ async function updateSurfaceData(segmentationId) {
4602
4605
 
4603
4606
 
4604
4607
 
4605
- function init() {
4606
- registerPolySegWorker();
4608
+
4609
+
4610
+
4611
+ function init(options) {
4612
+ registerPolySegWorker(options);
4607
4613
  }
4608
4614
 
4609
4615
 
@@ -751,7 +751,7 @@ function _extends() { return _extends = Object.assign ? Object.assign.bind() : f
751
751
 
752
752
 
753
753
  const Component = /*#__PURE__*/react.lazy(() => {
754
- return Promise.all(/* import() */[__webpack_require__.e(2914), __webpack_require__.e(3075), __webpack_require__.e(9977), __webpack_require__.e(6029), __webpack_require__.e(8185), __webpack_require__.e(3984), __webpack_require__.e(7241), __webpack_require__.e(9890)]).then(__webpack_require__.bind(__webpack_require__, 23121));
754
+ return Promise.all(/* import() */[__webpack_require__.e(2914), __webpack_require__.e(3075), __webpack_require__.e(9977), __webpack_require__.e(6029), __webpack_require__.e(8185), __webpack_require__.e(3984), __webpack_require__.e(8572), __webpack_require__.e(9890)]).then(__webpack_require__.bind(__webpack_require__, 23121));
755
755
  });
756
756
  const OHIFCornerstoneRTViewport = props => {
757
757
  return /*#__PURE__*/react.createElement(react.Suspense, {
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
- (globalThis["webpackChunk"] = globalThis["webpackChunk"] || []).push([[7241],{
2
+ (globalThis["webpackChunk"] = globalThis["webpackChunk"] || []).push([[8572],{
3
3
 
4
4
  /***/ 35392:
5
5
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
@@ -1100,7 +1100,7 @@ function useSegmentations(options) {
1100
1100
 
1101
1101
  /***/ }),
1102
1102
 
1103
- /***/ 7241:
1103
+ /***/ 78572:
1104
1104
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1105
1105
 
1106
1106
  // ESM COMPAT FLAG
@@ -1610,6 +1610,8 @@ ImageOverlayViewerTool.addOverlayPlaneModule = tools_OverlayPlaneModuleProvider.
1610
1610
 
1611
1611
  function initCornerstoneTools(configuration = {}) {
1612
1612
  dist_esm.CrosshairsTool.isAnnotation = false;
1613
+ ai_dist_esm/* LabelmapSlicePropagationTool */.Bj.isAnnotation = false;
1614
+ ai_dist_esm/* MarkerLabelmapTool */.pY.isAnnotation = false;
1613
1615
  dist_esm.ReferenceLinesTool.isAnnotation = false;
1614
1616
  dist_esm.AdvancedMagnifyTool.isAnnotation = false;
1615
1617
  dist_esm.PlanarFreehandContourSegmentationTool.isAnnotation = false;
@@ -6397,6 +6399,120 @@ function setupSegmentationModifiedHandler({
6397
6399
  unsubscribe
6398
6400
  };
6399
6401
  }
6402
+ ;// CONCATENATED MODULE: ../../../extensions/cornerstone/src/utils/initWebWorkerProgressHandler.ts
6403
+
6404
+
6405
+
6406
+ /**
6407
+ * Initializes a handler for web worker progress events.
6408
+ * Tracks active worker tasks and shows notifications for their progress.
6409
+ *
6410
+ * @param uiNotificationService - The UI notification service for showing progress notifications
6411
+ */
6412
+ function initializeWebWorkerProgressHandler(uiNotificationService) {
6413
+ // Use a single map to track all active worker tasks
6414
+ const activeWorkerTasks = new Map();
6415
+
6416
+ // Create a normalized task key that doesn't include the random ID
6417
+ // This helps us identify and deduplicate the same type of task
6418
+ const getNormalizedTaskKey = type => {
6419
+ return `worker-task-${type.toLowerCase().replace(/\s+/g, '-')}`;
6420
+ };
6421
+ esm.eventTarget.addEventListener(esm.EVENTS.WEB_WORKER_PROGRESS, ({
6422
+ detail
6423
+ }) => {
6424
+ let normalizedKey;
6425
+ let shouldCleanup = false;
6426
+ try {
6427
+ const {
6428
+ progress,
6429
+ type,
6430
+ id
6431
+ } = detail;
6432
+
6433
+ // Skip notifications for compute statistics
6434
+ if (type === dist_esm.Enums.WorkerTypes.COMPUTE_STATISTICS) {
6435
+ return;
6436
+ }
6437
+ normalizedKey = getNormalizedTaskKey(type);
6438
+ if (progress === 0) {
6439
+ // Check if we're already tracking a task of this type
6440
+ if (!activeWorkerTasks.has(normalizedKey)) {
6441
+ const progressPromise = new Promise((resolve, reject) => {
6442
+ try {
6443
+ activeWorkerTasks.set(normalizedKey, {
6444
+ resolve,
6445
+ reject,
6446
+ originalId: id,
6447
+ type
6448
+ });
6449
+ } catch (error) {
6450
+ console.error(`Error setting active worker task for type "${type}":`, error);
6451
+ reject(error);
6452
+ throw error; // Re-throw to trigger outer catch and cleanup
6453
+ }
6454
+ });
6455
+ try {
6456
+ uiNotificationService.show({
6457
+ id: normalizedKey,
6458
+ // Use the normalized key as ID for better deduplication
6459
+ title: `${type}`,
6460
+ message: `Computing...`,
6461
+ autoClose: false,
6462
+ allowDuplicates: false,
6463
+ deduplicationInterval: 60000,
6464
+ // 60 seconds - prevent frequent notifications of same type
6465
+ promise: progressPromise,
6466
+ promiseMessages: {
6467
+ loading: `Computing...`,
6468
+ success: `Completed successfully`,
6469
+ error: 'Web Worker failed'
6470
+ }
6471
+ });
6472
+ } catch (error) {
6473
+ console.error(`Error showing web worker notification for type "${type}":`, error);
6474
+ shouldCleanup = true;
6475
+ throw error;
6476
+ }
6477
+ } else {
6478
+ // Already tracking this type of task, just let it continue
6479
+ console.debug(`Already tracking a "${type}" task, skipping duplicate notification`);
6480
+ }
6481
+ }
6482
+ // Task completed
6483
+ else if (progress === 100) {
6484
+ // Check if we have this task type in our tracking map
6485
+ const taskData = activeWorkerTasks.get(normalizedKey);
6486
+ if (taskData) {
6487
+ // Resolve the promise to update the notification
6488
+ const {
6489
+ resolve
6490
+ } = taskData;
6491
+ resolve({
6492
+ progress,
6493
+ type
6494
+ });
6495
+
6496
+ // Mark for cleanup
6497
+ shouldCleanup = true;
6498
+ console.debug(`Worker task "${type}" completed successfully`);
6499
+ }
6500
+ }
6501
+ } catch (error) {
6502
+ console.error(`Error in web worker progress handler for type "${detail?.type}":`, error);
6503
+ shouldCleanup = true;
6504
+ } finally {
6505
+ // Clean up if needed
6506
+ if (shouldCleanup && normalizedKey) {
6507
+ try {
6508
+ activeWorkerTasks.delete(normalizedKey);
6509
+ } catch (cleanupError) {
6510
+ console.error(`Error cleaning up active worker task for type "${detail?.type}":`, cleanupError);
6511
+ }
6512
+ }
6513
+ }
6514
+ });
6515
+ }
6400
6516
  ;// CONCATENATED MODULE: ../../../extensions/cornerstone/src/init.tsx
6401
6517
 
6402
6518
 
@@ -6421,6 +6537,7 @@ function setupSegmentationModifiedHandler({
6421
6537
 
6422
6538
 
6423
6539
 
6540
+
6424
6541
 
6425
6542
 
6426
6543
  const {
@@ -6647,10 +6764,16 @@ async function init({
6647
6764
  esm.eventTarget.addEventListenerDebounced(esm.EVENTS.ERROR_EVENT, ({
6648
6765
  detail
6649
6766
  }) => {
6767
+ // Create a stable ID for deduplication based on error type and message
6768
+ const errorId = `cornerstone-error-${detail.type}-${detail.message.substring(0, 50)}`;
6650
6769
  uiNotificationService.show({
6651
6770
  title: detail.type,
6652
6771
  message: detail.message,
6653
- type: 'error'
6772
+ type: 'error',
6773
+ id: errorId,
6774
+ allowDuplicates: false,
6775
+ // Prevent duplicate error notifications
6776
+ deduplicationInterval: 30000 // 30 seconds deduplication window
6654
6777
  });
6655
6778
  }, 100);
6656
6779
 
@@ -6661,39 +6784,6 @@ async function init({
6661
6784
  unsubscriptions
6662
6785
  };
6663
6786
  }
6664
- function initializeWebWorkerProgressHandler(uiNotificationService) {
6665
- const activeToasts = new Map();
6666
-
6667
- // eventTarget.addEventListener(EVENTS.WEB_WORKER_PROGRESS, ({ detail }) => {
6668
- // const { progress, type, id } = detail;
6669
-
6670
- // const cacheKey = `${type}-${id}`;
6671
- // if (progress === 0 && !activeToasts.has(cacheKey)) {
6672
- // const progressPromise = new Promise((resolve, reject) => {
6673
- // activeToasts.set(cacheKey, { resolve, reject });
6674
- // });
6675
-
6676
- // uiNotificationService.show({
6677
- // id: cacheKey,
6678
- // title: `${type}`,
6679
- // message: `${type}: ${progress}%`,
6680
- // autoClose: false,
6681
- // promise: progressPromise,
6682
- // promiseMessages: {
6683
- // loading: `Computing...`,
6684
- // success: `Completed successfully`,
6685
- // error: 'Web Worker failed',
6686
- // },
6687
- // });
6688
- // } else {
6689
- // if (progress === 100) {
6690
- // const { resolve } = activeToasts.get(cacheKey);
6691
- // resolve({ progress, type });
6692
- // activeToasts.delete(cacheKey);
6693
- // }
6694
- // }
6695
- // });
6696
- }
6697
6787
 
6698
6788
  /**
6699
6789
  * Creates a wrapped image load strategy with metadata handling
@@ -8627,15 +8717,13 @@ const CornerstoneViewportDownloadForm = ({
8627
8717
  } = downloadViewport;
8628
8718
  const toolGroup = dist_esm.ToolGroupManager.getToolGroupForViewport(activeViewportId, renderingEngineId);
8629
8719
  toolGroup.addViewport(downloadViewportId, renderingEngineId);
8630
- Object.keys(toolGroup.getToolInstances()).forEach(toolName => {
8631
- if (show && toolName !== 'Crosshairs') {
8632
- try {
8633
- toolGroup.setToolEnabled(toolName);
8634
- } catch (error) {
8635
- console.debug('Error enabling tool:', error);
8636
- }
8720
+ const toolInstances = toolGroup.getToolInstances();
8721
+ const toolInstancesArray = Object.values(toolInstances);
8722
+ toolInstancesArray.forEach(toolInstance => {
8723
+ if (show && toolInstance.constructor.isAnnotation !== false) {
8724
+ toolGroup.setToolEnabled(toolInstance.toolName);
8637
8725
  } else {
8638
- toolGroup.setToolDisabled(toolName);
8726
+ toolGroup.setToolDisabled(toolInstance.toolName);
8639
8727
  }
8640
8728
  });
8641
8729
  };
@@ -11198,7 +11286,7 @@ const fourUp = {
11198
11286
  customViewportProps: {
11199
11287
  hideOverlays: true
11200
11288
  },
11201
- syncGroups: [VOI_SYNC_GROUP, HYDRATE_SEG_SYNC_GROUP]
11289
+ syncGroups: [HYDRATE_SEG_SYNC_GROUP]
11202
11290
  },
11203
11291
  displaySets: [{
11204
11292
  id: 'activeDisplaySet',
@@ -11424,7 +11512,7 @@ const mprAnd3DVolumeViewport = {
11424
11512
  customViewportProps: {
11425
11513
  hideOverlays: true
11426
11514
  },
11427
- syncGroups: [VOI_SYNC_GROUP, HYDRATE_SEG_SYNC_GROUP]
11515
+ syncGroups: [HYDRATE_SEG_SYNC_GROUP]
11428
11516
  },
11429
11517
  displaySets: [{
11430
11518
  id: 'activeDisplaySet',
@@ -11510,7 +11598,7 @@ const only3D = {
11510
11598
  orientation: 'coronal',
11511
11599
  customViewportProps: {
11512
11600
  hideOverlays: true,
11513
- syncGroups: [VOI_SYNC_GROUP, HYDRATE_SEG_SYNC_GROUP]
11601
+ syncGroups: [HYDRATE_SEG_SYNC_GROUP]
11514
11602
  }
11515
11603
  },
11516
11604
  displaySets: [{
@@ -1,6 +1,6 @@
1
- (globalThis["webpackChunk"] = globalThis["webpackChunk"] || []).push([[3166],{
1
+ (globalThis["webpackChunk"] = globalThis["webpackChunk"] || []).push([[908],{
2
2
 
3
- /***/ 59874:
3
+ /***/ 93468:
4
4
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
5
5
 
6
6
  "use strict";
@@ -3358,6 +3358,25 @@ function copyStudyTags(src) {
3358
3358
 
3359
3359
 
3360
3360
 
3361
+ ;// CONCATENATED MODULE: ../../../node_modules/@cornerstonejs/adapters/dist/esm/adapters/helpers/copySeriesTags.js
3362
+ const seriesTags = ["SeriesInstanceUID", "SeriesNumber", "SeriesDescription", "Modality", "SeriesDate", "SeriesTime"];
3363
+ function copySeriesTags(src) {
3364
+ const study = {
3365
+ _meta: src._meta,
3366
+ _vrMap: src._vrMap
3367
+ };
3368
+ for (const tagKey of seriesTags) {
3369
+ const value = src[tagKey];
3370
+ if (value === undefined) {
3371
+ continue;
3372
+ }
3373
+ study[tagKey] = value;
3374
+ }
3375
+ return study;
3376
+ }
3377
+
3378
+
3379
+
3361
3380
  ;// CONCATENATED MODULE: ../../../node_modules/@cornerstonejs/adapters/dist/esm/adapters/Cornerstone3D/CodingScheme.js
3362
3381
  // This is a custom coding scheme defined to store some annotations from Cornerstone.
3363
3382
  // Note: CodeMeaning is VR type LO, which means we only actually support 64 characters
@@ -3384,6 +3403,7 @@ const CodingScheme = {
3384
3403
 
3385
3404
 
3386
3405
 
3406
+
3387
3407
  var _MeasurementReport;
3388
3408
  const {
3389
3409
  TID1500: MeasurementReport_TID1500,
@@ -3661,9 +3681,12 @@ _MeasurementReport.codeValueMatch = (group, code, oldCode) => {
3661
3681
  return CodingSchemeDesignator == code.CodingSchemeDesignator && CodeValue == code.CodeValue || oldCode && CodingSchemeDesignator == oldCode.CodingSchemeDesignator && CodeValue == oldCode.CodeValue;
3662
3682
  };
3663
3683
  _MeasurementReport.generateDerivationSourceDataset = instance => {
3664
- _MeasurementReport.generateDatasetMeta();
3665
- const derivationSourceDataset = copyStudyTags(instance);
3666
- return derivationSourceDataset;
3684
+ const studyTags = copyStudyTags(instance);
3685
+ const seriesTags = copySeriesTags(instance);
3686
+ return {
3687
+ ...studyTags,
3688
+ ...seriesTags
3689
+ };
3667
3690
  };
3668
3691
 
3669
3692
 
@@ -6288,6 +6311,7 @@ function downloadDICOMData(bufferOrDataset, filename) {
6288
6311
 
6289
6312
 
6290
6313
 
6314
+
6291
6315
  ;// CONCATENATED MODULE: ../../../node_modules/@cornerstonejs/adapters/dist/esm/index.js
6292
6316
 
6293
6317
 
@@ -765,8 +765,8 @@ function getCustomizationModule() {
765
765
  /* harmony default export */ const maxNumImageFrames = ((study, extraData) => Math.max(...(extraData?.displaySets?.map?.(ds => ds.numImageFrames ?? 0) || [0])));
766
766
  // EXTERNAL MODULE: ../../../node_modules/react/index.js
767
767
  var react = __webpack_require__(86326);
768
- // EXTERNAL MODULE: ../../../extensions/cornerstone/src/index.tsx + 134 modules
769
- var src = __webpack_require__(7241);
768
+ // EXTERNAL MODULE: ../../../extensions/cornerstone/src/index.tsx + 135 modules
769
+ var src = __webpack_require__(78572);
770
770
  ;// CONCATENATED MODULE: ../../../extensions/test-extension/src/getPanelModule.tsx
771
771
 
772
772
 
@@ -453,8 +453,8 @@ const toolbarButtons = [
453
453
  tooltip: 'Show Reference Lines',
454
454
  commands: 'toggleEnabledDisabledToolbar',
455
455
  listeners: {
456
- [core_src/* ViewportGridService */.sI.EVENTS.ACTIVE_VIEWPORT_ID_CHANGED]: callbacks('ReferenceLinesTool'),
457
- [core_src/* ViewportGridService */.sI.EVENTS.VIEWPORTS_READY]: callbacks('ReferenceLinesTool')
456
+ [core_src/* ViewportGridService */.sI.EVENTS.ACTIVE_VIEWPORT_ID_CHANGED]: callbacks('ReferenceLines'),
457
+ [core_src/* ViewportGridService */.sI.EVENTS.VIEWPORTS_READY]: callbacks('ReferenceLines')
458
458
  },
459
459
  evaluate: ['evaluate.cornerstoneTool.toggle', {
460
460
  name: 'evaluate.viewport.supported',
@@ -19,8 +19,8 @@ var prop_types = __webpack_require__(97598);
19
19
  var prop_types_default = /*#__PURE__*/__webpack_require__.n(prop_types);
20
20
  // EXTERNAL MODULE: ../../ui-next/src/index.ts + 1053 modules
21
21
  var src = __webpack_require__(2836);
22
- // EXTERNAL MODULE: ../../../extensions/cornerstone/src/index.tsx + 134 modules
23
- var cornerstone_src = __webpack_require__(7241);
22
+ // EXTERNAL MODULE: ../../../extensions/cornerstone/src/index.tsx + 135 modules
23
+ var cornerstone_src = __webpack_require__(78572);
24
24
  ;// CONCATENATED MODULE: ../../../extensions/cornerstone-dicom-rt/src/utils/promptHydrateRT.ts
25
25
  const RESPONSE = {
26
26
  NO_NEVER: -1,
@@ -897,6 +897,7 @@ class PlanarFreehandROITool extends _base_ContourSegmentationBaseTool__WEBPACK_I
897
897
  toolGroupId: this.toolGroupId,
898
898
  toolName: this.getToolName(),
899
899
  viewportId: enabledElement.viewport.id,
900
+ annotationUID: annotation.annotationUID,
900
901
  };
901
902
  const options = this.getLinkedTextBoxStyle(styleSpecifier, annotation);
902
903
  if (!options.visibility) {
@@ -1785,6 +1786,7 @@ class RectangleROITool extends _base__WEBPACK_IMPORTED_MODULE_0__/* .AnnotationT
1785
1786
  return;
1786
1787
  }
1787
1788
  const { FrameOfReferenceUID, referencedImageId, viewPlaneNormal, instance, viewport, } = this.hydrateBase(RectangleROITool, enabledElement, points, options);
1789
+ const { toolInstance, ...serializableOptions } = options || {};
1788
1790
  const annotation = {
1789
1791
  annotationUID: options?.annotationUID || _cornerstonejs_core__WEBPACK_IMPORTED_MODULE_1__.utilities.uuidv4(),
1790
1792
  data: {
@@ -1805,7 +1807,7 @@ class RectangleROITool extends _base__WEBPACK_IMPORTED_MODULE_0__/* .AnnotationT
1805
1807
  viewPlaneNormal,
1806
1808
  FrameOfReferenceUID,
1807
1809
  referencedImageId,
1808
- ...options,
1810
+ ...serializableOptions,
1809
1811
  },
1810
1812
  };
1811
1813
  (0,_stateManagement__WEBPACK_IMPORTED_MODULE_4__/* .addAnnotation */ .lC)(annotation, viewport.element);