@ohif/app 3.9.0 → 3.9.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 (38) hide show
  1. package/dist/{1185.bundle.a6e220f00576d6926fe7.js → 1185.bundle.d328aabb2b43e9ea1f96.js} +62 -14
  2. package/dist/{1266.bundle.8fd38b710e91305721e5.js → 1266.bundle.46de27eda2ef1fce1243.js} +5 -0
  3. package/dist/{1436.bundle.773756cd51b69e887bac.js → 1436.bundle.27ae9c87e9fc7f52cad3.js} +234 -63
  4. package/dist/{1927.bundle.49539e3ab5b0aad1399c.js → 1927.bundle.2b2fa0b539d6ac5b0dc3.js} +1 -1
  5. package/dist/{3200.bundle.45b19ea468d6208f0e7e.js → 3200.bundle.ccb809fb554332d9a0f5.js} +62 -9
  6. package/dist/{149.bundle.b8d177954628f4631fc0.js → 3900.bundle.3937999d1ee1f391647a.js} +46 -7
  7. package/dist/{4571.bundle.3b1691730b3c57bf4d35.js → 4571.bundle.a37be49663df2f4a2c8a.js} +99 -89
  8. package/dist/{5247.bundle.03fa8aac71d4e597d708.js → 5247.bundle.1a1d7c27de482e4a73f3.js} +2 -2
  9. package/dist/{5252.bundle.5ec502c53a9cc877ed8d.js → 5252.bundle.f2675336275573a288d5.js} +13 -1
  10. package/dist/{1520.bundle.fde5eb31364855194519.js → 5630.bundle.1bd2402f37597078c1a1.js} +70 -59
  11. package/dist/{5717.bundle.848e13f256818475f57f.js → 5717.bundle.32836c212103dbbe8e4a.js} +247 -64
  12. package/dist/{7197.bundle.db0d51e5529d88a4cd7f.js → 7197.bundle.42a975bb7ae4a8df2d00.js} +2 -2
  13. package/dist/{7955.bundle.699bffabae3a9915c326.js → 7955.bundle.f6c5edb284bdf8b80f2a.js} +1 -1
  14. package/dist/{8228.bundle.55ac03d7165248f47d4e.js → 8228.bundle.0a7997d04c82dd8c11c5.js} +2 -2
  15. package/dist/{8523.bundle.648334132159465cdc41.js → 8523.bundle.c0ec85de98ba380ebeb4.js} +55 -13
  16. package/dist/{9551.bundle.13a3eec1e003a46095bc.js → 9551.bundle.63b2679dd7beee6396d8.js} +1 -1
  17. package/dist/{app.bundle.8e454976c3d4c3348750.js → app.bundle.632bc6188462e1c95a41.js} +156 -89
  18. package/dist/app.bundle.css +2 -2
  19. package/dist/index.html +1 -1
  20. package/dist/{polySeg.bundle.b79ae514989e86301c71.js → polySeg.bundle.6e85073e3abf2e6e6078.js} +1 -1
  21. package/dist/serve.json +1 -10
  22. package/dist/{suv-peak-worker.bundle.76dd4fdf82aaa2c3ad41.js → suv-peak-worker.bundle.1f483dc7131d7c26b517.js} +3 -3
  23. package/dist/sw.js +1 -1
  24. package/package.json +19 -19
  25. /package/dist/{1374.bundle.f56c07364d8f6ed2d00e.js → 1374.bundle.1ee8326c0748c7b1a7c0.js} +0 -0
  26. /package/dist/{213.bundle.38caad239bcfec1d28fb.js → 213.bundle.8c04fecea2e3796e4d73.js} +0 -0
  27. /package/dist/{2424.bundle.c7b6d3475da1ffff744b.js → 2424.bundle.38b19314ebd984c9d393.js} +0 -0
  28. /package/dist/{2825.bundle.ba60e0011bcebdf7a413.js → 2825.bundle.0307cae794e8b057c674.js} +0 -0
  29. /package/dist/{3198.bundle.9b80ca2f1d99a7f9a4fe.js → 3198.bundle.ab612063af0d67397377.js} +0 -0
  30. /package/dist/{4834.bundle.4bfa1bd1d4a163de3350.js → 4834.bundle.c25348524be5214e90d6.js} +0 -0
  31. /package/dist/{5139.bundle.b185b1df3847a2025829.js → 5139.bundle.db30dc02cf41e91c8985.js} +0 -0
  32. /package/dist/{5687.bundle.3a558ac2eb26f5295668.js → 5687.bundle.05de4787676bf79f9906.js} +0 -0
  33. /package/dist/{717.bundle.62437bfeb54f01269abe.js → 717.bundle.3a4b8835adf03e4554c7.js} +0 -0
  34. /package/dist/{8008.bundle.1ab47eccf7608fe14e92.js → 8008.bundle.d4187a30e8f656a21316.js} +0 -0
  35. /package/dist/{8259.bundle.4385bd89c3f7f4ced27c.js → 8259.bundle.990db2fa9ce0800319e9.js} +0 -0
  36. /package/dist/{8558.bundle.3b0654ad2a52ac9786dd.js → 8558.bundle.63714e2329c22c9cb9da.js} +0 -0
  37. /package/dist/{9611.bundle.767595c93877e5166c03.js → 9611.bundle.78a4ffb439f65cfd0379.js} +0 -0
  38. /package/dist/{9862.bundle.7146682e56aa66130ae6.js → 9862.bundle.aa2f8e0010f1be1bc87d.js} +0 -0
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
- (self["webpackChunk"] = self["webpackChunk"] || []).push([[1520],{
2
+ (self["webpackChunk"] = self["webpackChunk"] || []).push([[5630],{
3
3
 
4
- /***/ 71520:
4
+ /***/ 55630:
5
5
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
6
6
 
7
7
  // ESM COMPAT FLAG
@@ -29,7 +29,7 @@ __webpack_require__.d(__webpack_exports__, {
29
29
  useHangingProtocolStageIndexStore: () => (/* reexport */ useHangingProtocolStageIndexStore),
30
30
  usePatientInfo: () => (/* reexport */ hooks_usePatientInfo),
31
31
  useToggleHangingProtocolStore: () => (/* reexport */ useToggleHangingProtocolStore),
32
- useToggleOneUpViewportGridStore: () => (/* reexport */ useToggleOneUpViewportGridStore/* useToggleOneUpViewportGridStore */.Y),
32
+ useToggleOneUpViewportGridStore: () => (/* reexport */ useToggleOneUpViewportGridStore),
33
33
  useUIStateStore: () => (/* reexport */ useUIStateStore),
34
34
  useViewportGridStore: () => (/* reexport */ useViewportGridStore),
35
35
  useViewportsByPositionStore: () => (/* reexport */ useViewportsByPositionStore),
@@ -1726,23 +1726,35 @@ function createDicomWebApi(dicomWebConfig, servicesManager) {
1726
1726
  naturalizedInstances.forEach(instance => {
1727
1727
  instance.wadoRoot = dicomWebConfig.wadoRoot;
1728
1728
  instance.wadoUri = dicomWebConfig.wadoUri;
1729
- const imageId = implementation.getImageIdsForInstance({
1730
- instance
1731
- });
1729
+ const {
1730
+ StudyInstanceUID,
1731
+ SeriesInstanceUID,
1732
+ SOPInstanceUID
1733
+ } = instance;
1734
+ const numberOfFrames = instance.NumberOfFrames || 1;
1735
+ // Process all frames consistently, whether single or multiframe
1736
+ for (let i = 0; i < numberOfFrames; i++) {
1737
+ const frameNumber = i + 1;
1738
+ const frameImageId = implementation.getImageIdsForInstance({
1739
+ instance,
1740
+ frame: frameNumber
1741
+ });
1742
+ // Add imageId specific mapping to this data as the URL isn't necessarily WADO-URI.
1743
+ metadataProvider.addImageIdToUIDs(frameImageId, {
1744
+ StudyInstanceUID,
1745
+ SeriesInstanceUID,
1746
+ SOPInstanceUID,
1747
+ frameNumber: numberOfFrames > 1 ? frameNumber : undefined
1748
+ });
1749
+ }
1732
1750
 
1733
1751
  // Adding imageId to each instance
1734
1752
  // Todo: This is not the best way I can think of to let external
1735
1753
  // metadata handlers know about the imageId that is stored in the store
1736
- instance.imageId = imageId;
1737
-
1738
- // Adding UIDs to metadataProvider
1739
- // Note: storing imageURI in metadataProvider since stack viewports
1740
- // will use the same imageURI
1741
- metadataProvider.addImageIdToUIDs(imageId, {
1742
- StudyInstanceUID,
1743
- SeriesInstanceUID: instance.SeriesInstanceUID,
1744
- SOPInstanceUID: instance.SOPInstanceUID
1754
+ const imageId = implementation.getImageIdsForInstance({
1755
+ instance
1745
1756
  });
1757
+ instance.imageId = imageId;
1746
1758
  });
1747
1759
  src/* DicomMetadataStore */.H8.addInstances(naturalizedInstances, madeInClient);
1748
1760
  }
@@ -1964,7 +1976,7 @@ function createDicomJSONApi(dicomJsonConfig) {
1964
1976
  query
1965
1977
  } = query_string.parseUrl(instance.url);
1966
1978
 
1967
- // Add imageId specific mapping to this data as the URL isn't necessarliy WADO-URI.
1979
+ // Add imageId specific mapping to this data as the URL isn't necessarily WADO-URI.
1968
1980
  DicomJSONDataSource_metadataProvider.addImageIdToUIDs(imageId, {
1969
1981
  StudyInstanceUID,
1970
1982
  SeriesInstanceUID,
@@ -2322,8 +2334,7 @@ function createDicomLocalApi(dicomLocalConfig) {
2322
2334
  const {
2323
2335
  SeriesInstanceUID
2324
2336
  } = aSeries;
2325
- const isMultiframe = aSeries.instances[0].NumberOfFrames > 1;
2326
- aSeries.instances.forEach((instance, index) => {
2337
+ aSeries.instances.forEach(instance => {
2327
2338
  const {
2328
2339
  url: imageId,
2329
2340
  StudyInstanceUID,
@@ -2331,14 +2342,22 @@ function createDicomLocalApi(dicomLocalConfig) {
2331
2342
  SOPInstanceUID
2332
2343
  } = instance;
2333
2344
  instance.imageId = imageId;
2334
-
2335
- // Add imageId specific mapping to this data as the URL isn't necessarily WADO-URI.
2336
- DicomLocalDataSource_metadataProvider.addImageIdToUIDs(imageId, {
2337
- StudyInstanceUID,
2338
- SeriesInstanceUID,
2339
- SOPInstanceUID,
2340
- frameIndex: isMultiframe ? index : 1
2341
- });
2345
+ const numberOfFrames = instance.NumberOfFrames || 1;
2346
+ // Process all frames consistently, whether single or multiframe
2347
+ for (let i = 0; i < numberOfFrames; i++) {
2348
+ const frameNumber = i + 1;
2349
+ const frameImageId = implementation.getImageIdsForInstance({
2350
+ instance,
2351
+ frame: frameNumber
2352
+ });
2353
+ // Add imageId specific mapping to this data as the URL isn't necessarily WADO-URI.
2354
+ DicomLocalDataSource_metadataProvider.addImageIdToUIDs(frameImageId, {
2355
+ StudyInstanceUID,
2356
+ SeriesInstanceUID,
2357
+ SOPInstanceUID,
2358
+ frameNumber: numberOfFrames > 1 ? frameNumber : undefined
2359
+ });
2360
+ }
2342
2361
  });
2343
2362
  src/* DicomMetadataStore */.H8._broadcastEvent(EVENTS.INSTANCES_ADDED, {
2344
2363
  StudyInstanceUID,
@@ -2388,9 +2407,12 @@ function createDicomLocalApi(dicomLocalConfig) {
2388
2407
  instance,
2389
2408
  frame
2390
2409
  }) {
2391
- if (instance.imageId) {
2392
- return instance.imageId;
2393
- }
2410
+ // Important: Never use instance.imageId because it might be multiframe,
2411
+ // which would make it an invalid imageId.
2412
+ // if (instance.imageId) {
2413
+ // return instance.imageId;
2414
+ // }
2415
+
2394
2416
  const {
2395
2417
  StudyInstanceUID,
2396
2418
  SeriesInstanceUID,
@@ -3056,8 +3078,8 @@ function ViewerHeader({
3056
3078
  hotkeyDefinitions,
3057
3079
  hotkeyDefaults
3058
3080
  } = hotkeysManager;
3059
- const versionNumber = "3.9.0";
3060
- const commitHash = "b41706320067b0d9eee181009453fc2a77b4171b";
3081
+ const versionNumber = "3.9.2";
3082
+ const commitHash = "e5286d9fc2449da50b738e7e6208d489cce1633e";
3061
3083
  const menuOptions = [{
3062
3084
  title: t('Header:About'),
3063
3085
  icon: 'info',
@@ -6495,8 +6517,21 @@ const createToggleHangingProtocolStore = set => ({
6495
6517
  const useToggleHangingProtocolStore = (0,zustand_esm/* create */.vt)()(useToggleHangingProtocolStore_DEBUG_STORE ? (0,middleware/* devtools */.lt)(createToggleHangingProtocolStore, {
6496
6518
  name: 'ToggleHangingProtocolStore'
6497
6519
  }) : createToggleHangingProtocolStore);
6498
- // EXTERNAL MODULE: ../../../extensions/default/src/stores/useToggleOneUpViewportGridStore.ts
6499
- var useToggleOneUpViewportGridStore = __webpack_require__(73325);
6520
+ ;// CONCATENATED MODULE: ../../../extensions/default/src/stores/useToggleOneUpViewportGridStore.ts
6521
+
6522
+ const useToggleOneUpViewportGridStore_PRESENTATION_TYPE_ID = 'toggleOneUpViewportGridId';
6523
+ // Stores the entire ViewportGridService getState when toggling to one up
6524
+ // (e.g. via a double click) so that it can be restored when toggling back.
6525
+ const useToggleOneUpViewportGridStore = (0,zustand_esm/* create */.vt)(set => ({
6526
+ toggleOneUpViewportGridStore: null,
6527
+ type: useToggleOneUpViewportGridStore_PRESENTATION_TYPE_ID,
6528
+ setToggleOneUpViewportGridStore: state => set({
6529
+ toggleOneUpViewportGridStore: state
6530
+ }),
6531
+ clearToggleOneUpViewportGridStore: () => set({
6532
+ toggleOneUpViewportGridStore: null
6533
+ })
6534
+ }));
6500
6535
  ;// CONCATENATED MODULE: ../../../extensions/default/src/commandsModule.ts
6501
6536
 
6502
6537
 
@@ -6798,7 +6833,7 @@ const commandsModule = ({
6798
6833
  // The viewer is in one-up. Check if there is a state to restore/toggle back to.
6799
6834
  const {
6800
6835
  toggleOneUpViewportGridStore
6801
- } = useToggleOneUpViewportGridStore/* useToggleOneUpViewportGridStore */.Y.getState();
6836
+ } = useToggleOneUpViewportGridStore.getState();
6802
6837
  if (!toggleOneUpViewportGridStore) {
6803
6838
  return;
6804
6839
  }
@@ -6854,7 +6889,7 @@ const commandsModule = ({
6854
6889
  // Store the current viewport grid state so we can toggle it back later.
6855
6890
  const {
6856
6891
  setToggleOneUpViewportGridStore
6857
- } = useToggleOneUpViewportGridStore/* useToggleOneUpViewportGridStore */.Y.getState();
6892
+ } = useToggleOneUpViewportGridStore.getState();
6858
6893
  setToggleOneUpViewportGridStore(viewportGridState);
6859
6894
 
6860
6895
  // one being toggled to one up.
@@ -9620,30 +9655,6 @@ const defaultExtension = {
9620
9655
  /* harmony default export */ const default_src = (defaultExtension);
9621
9656
 
9622
9657
 
9623
- /***/ }),
9624
-
9625
- /***/ 73325:
9626
- /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
9627
-
9628
- /* harmony export */ __webpack_require__.d(__webpack_exports__, {
9629
- /* harmony export */ Y: () => (/* binding */ useToggleOneUpViewportGridStore)
9630
- /* harmony export */ });
9631
- /* harmony import */ var zustand__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(95759);
9632
-
9633
- const PRESENTATION_TYPE_ID = 'toggleOneUpViewportGridId';
9634
- // Stores the entire ViewportGridService getState when toggling to one up
9635
- // (e.g. via a double click) so that it can be restored when toggling back.
9636
- const useToggleOneUpViewportGridStore = (0,zustand__WEBPACK_IMPORTED_MODULE_0__/* .create */ .vt)(set => ({
9637
- toggleOneUpViewportGridStore: null,
9638
- type: PRESENTATION_TYPE_ID,
9639
- setToggleOneUpViewportGridStore: state => set({
9640
- toggleOneUpViewportGridStore: state
9641
- }),
9642
- clearToggleOneUpViewportGridStore: () => set({
9643
- toggleOneUpViewportGridStore: null
9644
- })
9645
- }));
9646
-
9647
9658
  /***/ })
9648
9659
 
9649
9660
  }]);
@@ -3489,6 +3489,15 @@ const imageRetrieveMetadataProvider = {
3489
3489
  add: (key, payload) => {
3490
3490
  retrieveConfigurationState.set(key, payload);
3491
3491
  },
3492
+ clone: () => {
3493
+ return new Map(retrieveConfigurationState);
3494
+ },
3495
+ restore: (state) => {
3496
+ retrieveConfigurationState.clear();
3497
+ state.forEach((value, key) => {
3498
+ retrieveConfigurationState.set(key, value);
3499
+ });
3500
+ },
3492
3501
  get: (type, ...queries) => {
3493
3502
  if (type === IMAGE_RETRIEVE_CONFIGURATION) {
3494
3503
  return queries
@@ -4414,7 +4423,10 @@ function calculateViewportsSpatialRegistration(viewport1, viewport2) {
4414
4423
 
4415
4424
  ;// CONCATENATED MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/utilities/getViewportImageCornersInWorld.js
4416
4425
  function getViewportImageCornersInWorld(viewport) {
4417
- const { imageData, dimensions } = viewport.getImageData();
4426
+ const { imageData, dimensions } = viewport.getImageData() || {};
4427
+ if (!imageData || !dimensions) {
4428
+ return [];
4429
+ }
4418
4430
  const { canvas } = viewport;
4419
4431
  const ratio = window.devicePixelRatio;
4420
4432
  const topLeftCanvas = [0, 0];
@@ -9322,6 +9334,9 @@ class Synchronizer_Synchronizer {
9322
9334
  };
9323
9335
  viewports.forEach((vp) => {
9324
9336
  const eventSource = this.getEventSource(vp);
9337
+ if (!eventSource) {
9338
+ return;
9339
+ }
9325
9340
  eventSource.removeEventListener(Enums.Events.ELEMENT_DISABLED, disableHandler);
9326
9341
  eventSource.addEventListener(Enums.Events.ELEMENT_DISABLED, disableHandler);
9327
9342
  });
@@ -9335,9 +9350,13 @@ class Synchronizer_Synchronizer {
9335
9350
  const { renderingEngineId, viewportId } = viewportInfo;
9336
9351
  const renderingEngine = getRenderingEngine(renderingEngineId);
9337
9352
  if (!renderingEngine) {
9338
- throw new Error(`No RenderingEngine for Id: ${renderingEngineId}`);
9353
+ return null;
9354
+ }
9355
+ const viewport = renderingEngine.getViewport(viewportId);
9356
+ if (!viewport) {
9357
+ return null;
9339
9358
  }
9340
- return renderingEngine.getViewport(viewportId).element;
9359
+ return viewport.element;
9341
9360
  }
9342
9361
  }
9343
9362
  function _getUniqueViewports(vp1, vp2) {
@@ -11710,16 +11729,10 @@ class CrosshairsTool extends base/* AnnotationTool */.EC {
11710
11729
  return otherViewportsAnnotationsWithUniqueCameras;
11711
11730
  };
11712
11731
  this._checkIfViewportsRenderingSameScene = (viewport, otherViewport) => {
11713
- const actors = viewport.getActors();
11714
- const otherViewportActors = otherViewport.getActors();
11715
- let sameScene = true;
11716
- actors.forEach((actor) => {
11717
- if (actors.length !== otherViewportActors.length ||
11718
- otherViewportActors.find(({ uid }) => uid === actor.uid) === undefined) {
11719
- sameScene = false;
11720
- }
11721
- });
11722
- return sameScene;
11732
+ const volumeIds = viewport.getAllVolumeIds();
11733
+ const otherVolumeIds = otherViewport.getAllVolumeIds();
11734
+ return (volumeIds.length === otherVolumeIds.length &&
11735
+ volumeIds.every((id) => otherVolumeIds.includes(id)));
11723
11736
  };
11724
11737
  this._jump = (enabledElement, jumpWorld) => {
11725
11738
  store_state/* state */.wk.isInteractingWithTool = true;
@@ -14368,7 +14381,7 @@ class ScaleOverlayTool extends AnnotationDisplayTool/* default */.A {
14368
14381
  }
14369
14382
  const { viewUp, viewPlaneNormal } = viewport.getCamera();
14370
14383
  const viewportCanvasCornersInWorld = esm.utilities.getViewportImageCornersInWorld(viewport);
14371
- let annotation = this.editData.annotation;
14384
+ let annotation = this.editData?.annotation;
14372
14385
  const annotations = (0,annotationState.getAnnotations)(this.getToolName(), viewport.element);
14373
14386
  if (annotations.length) {
14374
14387
  annotation = annotations.filter((thisAnnotation) => thisAnnotation.data.viewportId == viewport.id)[0];
@@ -14396,7 +14409,7 @@ class ScaleOverlayTool extends AnnotationDisplayTool/* default */.A {
14396
14409
  annotation = newAnnotation;
14397
14410
  }
14398
14411
  });
14399
- if (this.editData.annotation &&
14412
+ if (this.editData?.annotation &&
14400
14413
  this.editData.annotation.data.viewportId == viewport.id) {
14401
14414
  this.editData.annotation.data.handles.points =
14402
14415
  viewportCanvasCornersInWorld;
@@ -14611,7 +14624,7 @@ class ScaleOverlayTool extends AnnotationDisplayTool/* default */.A {
14611
14624
  };
14612
14625
  }
14613
14626
  renderAnnotation(enabledElement, svgDrawingHelper) {
14614
- if (!this.editData.viewport) {
14627
+ if (!this.editData || !this.editData.viewport) {
14615
14628
  return;
14616
14629
  }
14617
14630
  const location = this.configuration.scaleLocation;
@@ -15117,7 +15130,7 @@ class LengthTool extends base/* AnnotationTool */.EC {
15117
15130
  const { currentPoints, element } = eventDetail;
15118
15131
  const worldPos = currentPoints.world;
15119
15132
  const enabledElement = (0,esm.getEnabledElement)(element);
15120
- const { viewport, renderingEngine } = enabledElement;
15133
+ const { viewport } = enabledElement;
15121
15134
  (0,elementCursor.hideElementCursor)(element);
15122
15135
  this.isDrawing = true;
15123
15136
  const { viewPlaneNormal, viewUp, position: cameraPosition, } = viewport.getCamera();
@@ -15432,6 +15445,39 @@ class LengthTool extends base/* AnnotationTool */.EC {
15432
15445
  };
15433
15446
  this._throttledCalculateCachedStats = (0,throttle/* default */.A)(this._calculateCachedStats, 100, { trailing: true });
15434
15447
  }
15448
+ static { this.hydrate = (viewportId, points, options) => {
15449
+ const enabledElement = (0,esm.getEnabledElementByViewportId)(viewportId);
15450
+ if (!enabledElement) {
15451
+ return;
15452
+ }
15453
+ const { viewport } = enabledElement;
15454
+ const FrameOfReferenceUID = viewport.getFrameOfReferenceUID();
15455
+ const { viewPlaneNormal, viewUp } = viewport.getCamera();
15456
+ const instance = new this();
15457
+ const referencedImageId = instance.getReferencedImageId(viewport, points[0], viewPlaneNormal, viewUp);
15458
+ const annotation = {
15459
+ annotationUID: options?.annotationUID || esm.utilities.uuidv4(),
15460
+ data: {
15461
+ handles: {
15462
+ points,
15463
+ },
15464
+ },
15465
+ highlighted: false,
15466
+ autoGenerated: false,
15467
+ invalidated: false,
15468
+ isLocked: false,
15469
+ isVisible: true,
15470
+ metadata: {
15471
+ toolName: instance.getToolName(),
15472
+ viewPlaneNormal,
15473
+ FrameOfReferenceUID,
15474
+ referencedImageId,
15475
+ ...options,
15476
+ },
15477
+ };
15478
+ (0,annotationState.addAnnotation)(annotation, viewport.element);
15479
+ (0,triggerAnnotationRenderForViewportIds/* default */.A)([viewport.id]);
15480
+ }; }
15435
15481
  handleSelectedCallback(evt, annotation, handle) {
15436
15482
  const eventDetail = evt.detail;
15437
15483
  const { element } = eventDetail;
@@ -16176,6 +16222,39 @@ class ProbeTool extends base/* AnnotationTool */.EC {
16176
16222
  return false;
16177
16223
  }
16178
16224
  toolSelectedCallback() { }
16225
+ static { this.hydrate = (viewportId, points, options) => {
16226
+ const enabledElement = (0,esm.getEnabledElementByViewportId)(viewportId);
16227
+ if (!enabledElement) {
16228
+ return;
16229
+ }
16230
+ const { viewport } = enabledElement;
16231
+ const FrameOfReferenceUID = viewport.getFrameOfReferenceUID();
16232
+ const { viewPlaneNormal, viewUp } = viewport.getCamera();
16233
+ const instance = new this();
16234
+ const referencedImageId = instance.getReferencedImageId(viewport, points[0], viewPlaneNormal, viewUp);
16235
+ const annotation = {
16236
+ annotationUID: options?.annotationUID || esm.utilities.uuidv4(),
16237
+ data: {
16238
+ handles: {
16239
+ points,
16240
+ },
16241
+ },
16242
+ highlighted: false,
16243
+ autoGenerated: false,
16244
+ invalidated: false,
16245
+ isLocked: false,
16246
+ isVisible: true,
16247
+ metadata: {
16248
+ toolName: instance.getToolName(),
16249
+ viewPlaneNormal,
16250
+ FrameOfReferenceUID,
16251
+ referencedImageId,
16252
+ ...options,
16253
+ },
16254
+ };
16255
+ (0,annotationState.addAnnotation)(annotation, viewport.element);
16256
+ (0,triggerAnnotationRenderForViewportIds/* default */.A)([viewport.id]);
16257
+ }; }
16179
16258
  getHandleNearImagePoint(element, annotation, canvasCoords, proximity) {
16180
16259
  const enabledElement = (0,esm.getEnabledElement)(element);
16181
16260
  const { viewport } = enabledElement;
@@ -17665,6 +17744,52 @@ class CircleROITool extends base/* AnnotationTool */.EC {
17665
17744
  };
17666
17745
  this._throttledCalculateCachedStats = (0,throttle/* default */.A)(this._calculateCachedStats, 100, { trailing: true });
17667
17746
  }
17747
+ static { this.hydrate = (viewportId, points, options) => {
17748
+ const enabledElement = (0,esm.getEnabledElementByViewportId)(viewportId);
17749
+ if (!enabledElement) {
17750
+ return;
17751
+ }
17752
+ const { viewport } = enabledElement;
17753
+ const FrameOfReferenceUID = viewport.getFrameOfReferenceUID();
17754
+ const { viewPlaneNormal, viewUp } = viewport.getCamera();
17755
+ const instance = new this();
17756
+ const referencedImageId = instance.getReferencedImageId(viewport, points[0], viewPlaneNormal, viewUp);
17757
+ const annotation = {
17758
+ annotationUID: options?.annotationUID || esm.utilities.uuidv4(),
17759
+ data: {
17760
+ handles: {
17761
+ points,
17762
+ textBox: {
17763
+ hasMoved: false,
17764
+ worldPosition: [0, 0, 0],
17765
+ worldBoundingBox: {
17766
+ topLeft: [0, 0, 0],
17767
+ topRight: [0, 0, 0],
17768
+ bottomLeft: [0, 0, 0],
17769
+ bottomRight: [0, 0, 0],
17770
+ },
17771
+ },
17772
+ activeHandleIndex: null,
17773
+ },
17774
+ label: '',
17775
+ cachedStats: {},
17776
+ },
17777
+ highlighted: false,
17778
+ autoGenerated: false,
17779
+ invalidated: false,
17780
+ isLocked: false,
17781
+ isVisible: true,
17782
+ metadata: {
17783
+ toolName: instance.getToolName(),
17784
+ viewPlaneNormal,
17785
+ FrameOfReferenceUID,
17786
+ referencedImageId,
17787
+ ...options,
17788
+ },
17789
+ };
17790
+ (0,annotationState.addAnnotation)(annotation, viewport.element);
17791
+ (0,triggerAnnotationRenderForViewportIds/* default */.A)([viewport.id]);
17792
+ }; }
17668
17793
  }
17669
17794
  function CircleROITool_defaultGetTextLines(data, targetId) {
17670
17795
  const cachedVolumeStats = data.cachedStats[targetId];
@@ -18185,8 +18310,6 @@ class SplineROITool extends ContourSegmentationBaseTool/* default */.A {
18185
18310
  viewportIdsToRender,
18186
18311
  movingTextBox: false,
18187
18312
  };
18188
- const enabledElement = (0,esm.getEnabledElement)(element);
18189
- const { renderingEngine } = enabledElement;
18190
18313
  this._activateModify(element);
18191
18314
  (0,esm_utilities.triggerAnnotationRenderForViewportIds)(viewportIdsToRender);
18192
18315
  evt.preventDefault();
@@ -18780,6 +18903,61 @@ class SplineROITool extends ContourSegmentationBaseTool/* default */.A {
18780
18903
  }
18781
18904
  return spline;
18782
18905
  }
18906
+ static { this.hydrate = (viewportId, points, options) => {
18907
+ const enabledElement = (0,esm.getEnabledElementByViewportId)(viewportId);
18908
+ if (!enabledElement) {
18909
+ return;
18910
+ }
18911
+ if (points.length < SPLINE_MIN_POINTS) {
18912
+ console.warn('Spline requires at least 3 control points');
18913
+ return;
18914
+ }
18915
+ const { viewport } = enabledElement;
18916
+ const FrameOfReferenceUID = viewport.getFrameOfReferenceUID();
18917
+ const { viewPlaneNormal, viewUp } = viewport.getCamera();
18918
+ const instance = new this();
18919
+ const referencedImageId = instance.getReferencedImageId(viewport, points[0], viewPlaneNormal, viewUp);
18920
+ const splineType = options?.splineType || SplineTypesEnum.CatmullRom;
18921
+ const splineConfig = instance._getSplineConfig(splineType);
18922
+ const SplineClass = splineConfig.Class;
18923
+ const splineInstance = new SplineClass();
18924
+ const canvasPoints = points.map((point) => viewport.worldToCanvas(point));
18925
+ splineInstance.setControlPoints(canvasPoints);
18926
+ const splinePolylineCanvas = splineInstance.getPolylinePoints();
18927
+ const splinePolylineWorld = splinePolylineCanvas.map((point) => viewport.canvasToWorld(point));
18928
+ const annotation = {
18929
+ annotationUID: options?.annotationUID || esm.utilities.uuidv4(),
18930
+ data: {
18931
+ handles: {
18932
+ points,
18933
+ },
18934
+ label: '',
18935
+ cachedStats: {},
18936
+ spline: {
18937
+ type: splineType,
18938
+ instance: splineInstance,
18939
+ },
18940
+ contour: {
18941
+ closed: true,
18942
+ polyline: splinePolylineWorld,
18943
+ },
18944
+ },
18945
+ highlighted: false,
18946
+ autoGenerated: false,
18947
+ invalidated: true,
18948
+ isLocked: false,
18949
+ isVisible: true,
18950
+ metadata: {
18951
+ toolName: instance.getToolName(),
18952
+ viewPlaneNormal,
18953
+ FrameOfReferenceUID,
18954
+ referencedImageId,
18955
+ ...options,
18956
+ },
18957
+ };
18958
+ (0,annotationState.addAnnotation)(annotation, viewport.element);
18959
+ (0,esm_utilities.triggerAnnotationRenderForViewportIds)([viewport.id]);
18960
+ }; }
18783
18961
  }
18784
18962
  function SplineROITool_defaultGetTextLines(data, targetId) {
18785
18963
  const cachedVolumeStats = data.cachedStats[targetId];
@@ -25768,7 +25946,7 @@ class SegmentationStateManager {
25768
25946
  type,
25769
25947
  active: true,
25770
25948
  visible: true,
25771
- colorLUTIndex: 0,
25949
+ colorLUTIndex: renderingConfig?.colorLUTIndex || 0,
25772
25950
  segments: segmentReps,
25773
25951
  config: {
25774
25952
  ...getDefaultRenderingConfig(type),
@@ -26491,17 +26669,20 @@ function internalAddSegmentationRepresentation(viewportId, representationInput)
26491
26669
  }
26492
26670
  function getColorLUTIndex(config) {
26493
26671
  const { colorLUTOrIndex } = config || {};
26494
- const isIndexProvided = typeof colorLUTOrIndex === 'number';
26495
- const selectedColorLUT = isIndexProvided
26496
- ? (0,getColorLUT/* getColorLUT */.B)(colorLUTOrIndex)
26497
- : COLOR_LUT/* default */.A;
26498
- const colorLUTIndex = isIndexProvided
26499
- ? colorLUTOrIndex
26500
- : (0,getNextColorLUTIndex/* getNextColorLUTIndex */.u)();
26501
- if (!isIndexProvided) {
26502
- (0,addColorLUT/* addColorLUT */.u)(selectedColorLUT, colorLUTIndex);
26672
+ if (colorLUTOrIndex === undefined) {
26673
+ const index = (0,addColorLUT/* addColorLUT */.u)(JSON.parse(JSON.stringify(COLOR_LUT/* default */.A)));
26674
+ return index;
26675
+ }
26676
+ if (typeof colorLUTOrIndex === 'number') {
26677
+ return colorLUTOrIndex;
26503
26678
  }
26504
- return colorLUTIndex;
26679
+ if (Array.isArray(colorLUTOrIndex) &&
26680
+ colorLUTOrIndex.every((item) => Array.isArray(item) && item.length === 4)) {
26681
+ const index = (0,addColorLUT/* addColorLUT */.u)(colorLUTOrIndex);
26682
+ return index;
26683
+ }
26684
+ const index = (0,addColorLUT/* addColorLUT */.u)(JSON.parse(JSON.stringify(COLOR_LUT/* default */.A)));
26685
+ return index;
26505
26686
  }
26506
26687
 
26507
26688
 
@@ -26796,23 +26977,6 @@ function getActiveSegmentation(viewportId) {
26796
26977
  }
26797
26978
 
26798
26979
 
26799
- /***/ }),
26800
-
26801
- /***/ 50409:
26802
- /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
26803
-
26804
- "use strict";
26805
- /* harmony export */ __webpack_require__.d(__webpack_exports__, {
26806
- /* harmony export */ B: () => (/* binding */ getColorLUT)
26807
- /* harmony export */ });
26808
- /* harmony import */ var _SegmentationStateManager__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(59475);
26809
-
26810
- function getColorLUT(index) {
26811
- const segmentationStateManager = _SegmentationStateManager__WEBPACK_IMPORTED_MODULE_0__/* .defaultSegmentationStateManager */ ._6;
26812
- return segmentationStateManager.getColorLUT(index);
26813
- }
26814
-
26815
-
26816
26980
  /***/ }),
26817
26981
 
26818
26982
  /***/ 97577:
@@ -26830,23 +26994,6 @@ function getCurrentLabelmapImageIdForViewport(viewportId, segmentationId) {
26830
26994
  }
26831
26995
 
26832
26996
 
26833
- /***/ }),
26834
-
26835
- /***/ 70906:
26836
- /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
26837
-
26838
- "use strict";
26839
- /* harmony export */ __webpack_require__.d(__webpack_exports__, {
26840
- /* harmony export */ u: () => (/* binding */ getNextColorLUTIndex)
26841
- /* harmony export */ });
26842
- /* harmony import */ var _SegmentationStateManager__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(59475);
26843
-
26844
- function getNextColorLUTIndex() {
26845
- const segmentationStateManager = _SegmentationStateManager__WEBPACK_IMPORTED_MODULE_0__/* .defaultSegmentationStateManager */ ._6;
26846
- return segmentationStateManager.getNextColorLUTIndex();
26847
- }
26848
-
26849
-
26850
26997
  /***/ }),
26851
26998
 
26852
26999
  /***/ 93210:
@@ -30844,6 +30991,42 @@ class RectangleROITool extends _base__WEBPACK_IMPORTED_MODULE_0__/* .AnnotationT
30844
30991
  };
30845
30992
  this._throttledCalculateCachedStats = (0,_utilities_throttle__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A)(this._calculateCachedStats, 100, { trailing: true });
30846
30993
  }
30994
+ static { this.hydrate = (viewportId, points, options) => {
30995
+ const enabledElement = (0,_cornerstonejs_core__WEBPACK_IMPORTED_MODULE_1__.getEnabledElementByViewportId)(viewportId);
30996
+ if (!enabledElement) {
30997
+ return;
30998
+ }
30999
+ const { viewport } = enabledElement;
31000
+ const FrameOfReferenceUID = viewport.getFrameOfReferenceUID();
31001
+ const { viewPlaneNormal, viewUp } = viewport.getCamera();
31002
+ const instance = new this();
31003
+ const referencedImageId = instance.getReferencedImageId(viewport, points[0], viewPlaneNormal, viewUp);
31004
+ const annotation = {
31005
+ annotationUID: options?.annotationUID || _cornerstonejs_core__WEBPACK_IMPORTED_MODULE_1__.utilities.uuidv4(),
31006
+ data: {
31007
+ handles: {
31008
+ points,
31009
+ activeHandleIndex: null,
31010
+ },
31011
+ label: '',
31012
+ cachedStats: {},
31013
+ },
31014
+ highlighted: false,
31015
+ autoGenerated: false,
31016
+ invalidated: false,
31017
+ isLocked: false,
31018
+ isVisible: true,
31019
+ metadata: {
31020
+ toolName: instance.getToolName(),
31021
+ viewPlaneNormal,
31022
+ FrameOfReferenceUID,
31023
+ referencedImageId,
31024
+ ...options,
31025
+ },
31026
+ };
31027
+ (0,_stateManagement__WEBPACK_IMPORTED_MODULE_4__/* .addAnnotation */ .lC)(annotation, viewport.element);
31028
+ (0,_utilities_triggerAnnotationRenderForViewportIds__WEBPACK_IMPORTED_MODULE_16__/* ["default"] */ .A)([viewport.id]);
31029
+ }; }
30847
31030
  }
30848
31031
  function defaultGetTextLines(data, targetId) {
30849
31032
  const cachedVolumeStats = data.cachedStats[targetId];
@@ -345,8 +345,8 @@ function getHangingProtocolModule() {
345
345
  }
346
346
  /* harmony default export */ const src_getHangingProtocolModule = (getHangingProtocolModule);
347
347
 
348
- // EXTERNAL MODULE: ../../../extensions/default/src/index.ts + 114 modules
349
- var default_src = __webpack_require__(71520);
348
+ // EXTERNAL MODULE: ../../../extensions/default/src/index.ts + 115 modules
349
+ var default_src = __webpack_require__(55630);
350
350
  // EXTERNAL MODULE: ../../../node_modules/@kitware/vtk.js/Filters/General/ImageMarchingSquares.js + 2 modules
351
351
  var ImageMarchingSquares = __webpack_require__(38993);
352
352
  // EXTERNAL MODULE: ../../../node_modules/@kitware/vtk.js/Common/Core/DataArray.js
@@ -694,7 +694,7 @@ function modeFactory({
694
694
  lesionStats: 'Lesion Statistics',
695
695
  minValue: 'Minimum Value',
696
696
  maxValue: 'Maximum Value',
697
- meanValue: 'Mean Value',
697
+ meanValue: 'Mean Value (ml)',
698
698
  volume: 'Volume',
699
699
  suvPeak: 'SUV Peak',
700
700
  suvMax: 'Maximum SUV',