@ohif/app 3.10.0-beta.2 → 3.10.0-beta.20

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 (59) hide show
  1. package/dist/{1185.bundle.52f04f41c08dc5853aed.js → 1185.bundle.f5bdc6fbf5cf6e77f1ca.js} +129 -29
  2. package/dist/{1266.bundle.4f06772fcf6b303d894d.js → 1266.bundle.723b1e14a8c03300ca49.js} +30 -0
  3. package/dist/1266.css +1 -1
  4. package/dist/1801.css +1 -1
  5. package/dist/{1927.bundle.49539e3ab5b0aad1399c.js → 1927.bundle.c55edd5a362e7d79e23d.js} +1 -1
  6. package/dist/{2701.bundle.8c1ff2e0faaa7d2f4716.js → 2701.bundle.caa28a0b2f7e0b79088a.js} +14 -22
  7. package/dist/{149.bundle.b8d177954628f4631fc0.js → 3022.bundle.51a7056ea0e39b06e095.js} +2095 -389
  8. package/dist/{3198.bundle.3b22ad50fb086338b85e.js → 3198.bundle.a27ad30339285ee88574.js} +2 -2
  9. package/dist/3198.css +1 -1
  10. package/dist/{3200.bundle.768571169c3d6e603324.js → 3200.bundle.eff6d0c695d962fe4b5b.js} +17 -9
  11. package/dist/3200.css +1 -1
  12. package/dist/{3677.bundle.7d9110e8c5682b56a456.js → 3677.bundle.d3c30c37d00fc58b4442.js} +876 -18
  13. package/dist/{3970.bundle.31942cc0c12a008e7ba0.js → 3970.bundle.216ca9d37288f34b8f0b.js} +15 -5
  14. package/dist/4182.css +1 -1
  15. package/dist/{4571.bundle.3b1691730b3c57bf4d35.js → 4571.bundle.142e8f6150bf81f1b7d2.js} +129 -107
  16. package/dist/5139.css +1 -1
  17. package/dist/{5247.bundle.17495c3d97cf29e44e73.js → 5247.bundle.affc956197b6220e3c94.js} +4 -4
  18. package/dist/{5252.bundle.5ec502c53a9cc877ed8d.js → 5252.bundle.9d1855f7fb56235709ec.js} +713 -280
  19. package/dist/{1520.bundle.83586195deb9d61702d9.js → 5630.bundle.d206792a2f04f7156442.js} +90 -70
  20. package/dist/{5687.bundle.2665d32af98b253b78fd.js → 5687.bundle.022f94286f70741366b3.js} +4 -4
  21. package/dist/{5823.bundle.cb588e5e33eea80cd49f.js → 573.bundle.d08dcb8e65e3b7729b58.js} +27 -865
  22. package/dist/{1436.bundle.773756cd51b69e887bac.js → 6498.bundle.02f5b640a94509a11180.js} +1057 -536
  23. package/dist/{717.bundle.ba680e992f721c5d8b4a.js → 717.bundle.0b47b3dba812d4554266.js} +2 -2
  24. package/dist/717.css +1 -1
  25. package/dist/{7197.bundle.c4ff7a71122131167cbb.js → 7197.bundle.580576f8db68a65a10ce.js} +4 -4
  26. package/dist/{5717.bundle.848e13f256818475f57f.js → 727.bundle.f93673c292647f58ee1e.js} +1833 -817
  27. package/dist/{7955.bundle.dd665937d280f9427909.js → 7955.bundle.70fe7524bf3c8b78cd15.js} +1 -1
  28. package/dist/{8228.bundle.55ac03d7165248f47d4e.js → 8228.bundle.22df751df68b512fc6fb.js} +2 -2
  29. package/dist/8228.css +2 -2
  30. package/dist/{8558.bundle.dfedfd13f3845ea7104a.js → 8558.bundle.487a5e67207aa1f91da9.js} +3 -0
  31. package/dist/{9551.bundle.01a1567f174986f74fcf.js → 9551.bundle.26cea86f50cb4800bdaa.js} +1 -1
  32. package/dist/{9611.bundle.767595c93877e5166c03.js → 9611.bundle.0feebcae79e65852d610.js} +14 -9
  33. package/dist/{5807.bundle.dac5ce36534a71c77723.js → 967.bundle.fee0d6c1e9e244ad5bb3.js} +1134 -1128
  34. package/dist/{8523.bundle.648334132159465cdc41.js → 9809.bundle.9d3afbcc67703574e298.js} +1265 -185
  35. package/dist/{9862.bundle.7146682e56aa66130ae6.js → 9862.bundle.6ea7e474a390b386e2b2.js} +1 -1
  36. package/dist/{app.bundle.b81b47f20105288797e2.js → app.bundle.64d91e75036855d4e31a.js} +9080 -8397
  37. package/dist/app.bundle.css +18 -18
  38. package/dist/{histogram-worker.bundle.f0e060cf2637a2ca94b7.js → histogram-worker.bundle.f978654858500a3080cc.js} +3 -3
  39. package/dist/index.html +1 -1
  40. package/dist/{polySeg.bundle.b79ae514989e86301c71.js → polySeg.bundle.70ed683f467a47e3c92d.js} +3 -3
  41. package/dist/serve.json +1 -10
  42. package/dist/{suv-peak-worker.bundle.76dd4fdf82aaa2c3ad41.js → suv-peak-worker.bundle.8c83e6e99d48223569b6.js} +4 -4
  43. package/dist/sw.js +1 -1
  44. package/package.json +19 -19
  45. /package/dist/{1374.bundle.e5b05fd7e1295bf06867.js → 1374.bundle.afdb21e02ca5a08f8060.js} +0 -0
  46. /package/dist/{213.bundle.68c723cdf7de1ebb18f2.js → 213.bundle.2e20b24ab08945ba56bb.js} +0 -0
  47. /package/dist/{2424.bundle.acefd29e9b3948544119.js → 2424.bundle.a72e288e00a909f3930b.js} +0 -0
  48. /package/dist/{2825.bundle.9b280fd4de22a0b2b729.js → 2825.bundle.9fcf88214bf70b49356f.js} +0 -0
  49. /package/dist/{3121.bundle.d3e7092e305cf6cecdb5.js → 3121.bundle.67ff7e799683191bb324.js} +0 -0
  50. /package/dist/{3334.bundle.0e6ba24024018199ab66.js → 3334.bundle.e36011d0fd5fcb7e8b84.js} +0 -0
  51. /package/dist/{4202.bundle.5c8120ed4841da0af211.js → 4202.bundle.1311396ecdb6c0b09eb0.js} +0 -0
  52. /package/dist/{4834.bundle.1deb034b995ef76461a3.js → 4834.bundle.71f72158944e5afd94e8.js} +0 -0
  53. /package/dist/{5139.bundle.61d9101ea220a8382f2b.js → 5139.bundle.36ec15905a109af39099.js} +0 -0
  54. /package/dist/{5261.bundle.74682659cce85f3ae592.js → 5261.bundle.54d7af66923a3bae707d.js} +0 -0
  55. /package/dist/{6939.bundle.9b79da82315a25f37d96.js → 6939.bundle.5e77a634e8784085c00e.js} +0 -0
  56. /package/dist/{7159.bundle.9f4856182f1eda29c59d.js → 7159.bundle.4ee84ebbce84383e30d4.js} +0 -0
  57. /package/dist/{8008.bundle.d24be79eebc455c4512a.js → 8008.bundle.6be72115a1d79d69e7ab.js} +0 -0
  58. /package/dist/{8259.bundle.a91eb7639bc72f522c16.js → 8259.bundle.127e657e46bcff886565.js} +0 -0
  59. /package/dist/{8295.bundle.4ecb27f9e58526f12bcb.js → 8295.bundle.14cddaccdcd3a7093398.js} +0 -0
@@ -931,8 +931,8 @@ __webpack_require__.r(types_namespaceObject);
931
931
  var react = __webpack_require__(86326);
932
932
  // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/index.js
933
933
  var esm = __webpack_require__(81985);
934
- // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/tools/dist/esm/index.js + 82 modules
935
- var dist_esm = __webpack_require__(55139);
934
+ // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/tools/dist/esm/index.js + 85 modules
935
+ var dist_esm = __webpack_require__(69489);
936
936
  ;// CONCATENATED MODULE: ../../../extensions/cornerstone/src/enums.ts
937
937
  const CORNERSTONE_3D_TOOLS_SOURCE_NAME = 'Cornerstone3DTools';
938
938
  const CORNERSTONE_3D_TOOLS_SOURCE_VERSION = '0.1';
@@ -983,8 +983,8 @@ function initWADOImageLoader(userAuthenticationService, appConfig, extensionMana
983
983
  function destroy() {
984
984
  console.debug('Destroying WADO Image Loader');
985
985
  }
986
- // EXTERNAL MODULE: ../../../extensions/default/src/index.ts + 114 modules
987
- var default_src = __webpack_require__(71520);
986
+ // EXTERNAL MODULE: ../../../extensions/default/src/index.ts + 115 modules
987
+ var default_src = __webpack_require__(55630);
988
988
  // EXTERNAL MODULE: ../../../extensions/cornerstone/src/state.ts
989
989
  var state = __webpack_require__(71353);
990
990
  ;// CONCATENATED MODULE: ../../../extensions/cornerstone/src/utils/getActiveViewportEnabledElement.ts
@@ -4408,9 +4408,9 @@ const initMeasurementService = (measurementService, displaySetService, cornersto
4408
4408
  /* Mappings */
4409
4409
  measurementService.addMapping(csTools3DVer1MeasurementSource, 'Length', Length.matchingCriteria, Length.toAnnotation, Length.toMeasurement);
4410
4410
  measurementService.addMapping(csTools3DVer1MeasurementSource, 'Crosshairs', Length.matchingCriteria, () => {
4411
- console.warn('Crosshairs mapping not implemented.');
4411
+ return null;
4412
4412
  }, () => {
4413
- console.warn('Crosshairs mapping not implemented.');
4413
+ return null;
4414
4414
  });
4415
4415
  measurementService.addMapping(csTools3DVer1MeasurementSource, 'Bidirectional', Bidirectional.matchingCriteria, Bidirectional.toAnnotation, Bidirectional.toMeasurement);
4416
4416
  measurementService.addMapping(csTools3DVer1MeasurementSource, 'EllipticalROI', EllipticalROI.matchingCriteria, EllipticalROI.toAnnotation, EllipticalROI.toMeasurement);
@@ -5278,7 +5278,7 @@ function interleaveTopToBottom({
5278
5278
  const AllRequests = [];
5279
5279
  volumes.forEach(volume => {
5280
5280
  const requests = volume.getImageLoadRequests();
5281
- if (!requests.length || !requests[0] || !requests[0].imageId) {
5281
+ if (!requests?.[0]?.imageId) {
5282
5282
  return;
5283
5283
  }
5284
5284
 
@@ -5652,6 +5652,8 @@ var useLutPresentationStore = __webpack_require__(10182);
5652
5652
  var usePositionPresentationStore = __webpack_require__(44646);
5653
5653
  // EXTERNAL MODULE: ../../../extensions/cornerstone/src/stores/useSegmentationPresentationStore.ts + 1 modules
5654
5654
  var useSegmentationPresentationStore = __webpack_require__(2847);
5655
+ // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/utilities/index.js + 43 modules
5656
+ var esm_utilities = __webpack_require__(25242);
5655
5657
  ;// CONCATENATED MODULE: ../../../extensions/cornerstone/src/init.tsx
5656
5658
 
5657
5659
 
@@ -5674,6 +5676,7 @@ var useSegmentationPresentationStore = __webpack_require__(2847);
5674
5676
 
5675
5677
 
5676
5678
 
5679
+
5677
5680
 
5678
5681
 
5679
5682
  const {
@@ -5755,9 +5758,18 @@ async function init({
5755
5758
  const metadataProvider = src/* default.classes */.Ay.classes.MetadataProvider;
5756
5759
  esm.volumeLoader.registerVolumeLoader('cornerstoneStreamingImageVolume', loaders/* cornerstoneStreamingImageVolumeLoader */.FC);
5757
5760
  esm.volumeLoader.registerVolumeLoader('cornerstoneStreamingDynamicImageVolume', loaders/* cornerstoneStreamingDynamicImageVolumeLoader */.Mr);
5758
- hangingProtocolService.registerImageLoadStrategy('interleaveCenter', interleaveCenterLoader);
5759
- hangingProtocolService.registerImageLoadStrategy('interleaveTopToBottom', interleaveTopToBottom);
5760
- hangingProtocolService.registerImageLoadStrategy('nth', interleaveNthLoader);
5761
+
5762
+ // Register strategies using the wrapper
5763
+ const imageLoadStrategies = {
5764
+ interleaveCenter: interleaveCenterLoader,
5765
+ interleaveTopToBottom: interleaveTopToBottom,
5766
+ nth: interleaveNthLoader
5767
+ };
5768
+ Object.entries(imageLoadStrategies).forEach(([name, strategyFn]) => {
5769
+ hangingProtocolService.registerImageLoadStrategy(name, createMetadataWrappedStrategy(strategyFn));
5770
+ });
5771
+
5772
+ // ... existing code ...
5761
5773
 
5762
5774
  // add metadata providers
5763
5775
  esm.metaData.addProvider(esm.utilities.calibratedPixelSpacingMetadataProvider.get.bind(esm.utilities.calibratedPixelSpacingMetadataProvider)); // this provider is required for Calibration tool
@@ -5920,6 +5932,27 @@ function initializeWebWorkerProgressHandler(uiNotificationService) {
5920
5932
  }
5921
5933
  });
5922
5934
  }
5935
+
5936
+ /**
5937
+ * Creates a wrapped image load strategy with metadata handling
5938
+ * @param strategyFn - The image loading strategy function to wrap
5939
+ * @returns A wrapped strategy function that handles metadata configuration
5940
+ */
5941
+ const createMetadataWrappedStrategy = strategyFn => {
5942
+ return args => {
5943
+ const clonedConfig = esm_utilities.imageRetrieveMetadataProvider.clone();
5944
+ esm_utilities.imageRetrieveMetadataProvider.clear();
5945
+ try {
5946
+ const result = strategyFn(args);
5947
+ return result;
5948
+ } finally {
5949
+ // Ensure metadata is always restored, even if there's an error
5950
+ setTimeout(() => {
5951
+ esm_utilities.imageRetrieveMetadataProvider.restore(clonedConfig);
5952
+ }, 10);
5953
+ }
5954
+ };
5955
+ };
5923
5956
  function CPUModal() {
5924
5957
  return /*#__PURE__*/react.createElement("div", null, /*#__PURE__*/react.createElement("p", null, "Your computer does not have enough GPU power to support the default GPU rendering mode. OHIF has switched to CPU rendering mode. Please note that CPU rendering does not support all features such as Volume Rendering, Multiplanar Reconstruction, and Segmentation Overlays."));
5925
5958
  }
@@ -11679,12 +11712,13 @@ class SegmentationService extends src/* PubSubService */.Rc {
11679
11712
  } = segmentInfo;
11680
11713
  colorLUT.push(rgba);
11681
11714
  const segmentIndex = Number(SegmentNumber);
11682
- const imageCentroidXYZ = segDisplaySet.centroids.get(index).image || {
11715
+ const centroid = segDisplaySet.centroids?.get(index);
11716
+ const imageCentroidXYZ = centroid?.image || {
11683
11717
  x: 0,
11684
11718
  y: 0,
11685
11719
  z: 0
11686
11720
  };
11687
- const worldCentroidXYZ = segDisplaySet.centroids.get(index).world || {
11721
+ const worldCentroidXYZ = centroid?.world || {
11688
11722
  x: 0,
11689
11723
  y: 0,
11690
11724
  z: 0
@@ -13305,6 +13339,20 @@ class CornerstoneViewportService extends src/* PubSubService */.Rc {
13305
13339
  * individual resize observers
13306
13340
  */
13307
13341
  resize(isGridResize = false) {
13342
+ // https://stackoverflow.com/a/26279685
13343
+ // This resize() call, among other things, rerenders the viewports. But when the entire viewer is
13344
+ // display: none'd, it makes the size of all hidden elements 0, including the viewport canvas and its containers.
13345
+ // Even if the viewer is later displayed again, trying to render when the size is 0 permanently "breaks" the
13346
+ // viewport, making it fully black even after the size is normal again. So just ignore resize events when hidden:
13347
+ const areViewportsHidden = Array.from(this.viewportsById.values()).every(viewportInfo => {
13348
+ const element = viewportInfo.getElement();
13349
+ return element.clientWidth === 0 && element.clientHeight === 0;
13350
+ });
13351
+ if (areViewportsHidden) {
13352
+ console.warn('Ignoring resize when viewports have size 0');
13353
+ return;
13354
+ }
13355
+
13308
13356
  // if there is a grid resize happening, it means the viewport grid
13309
13357
  // has been manipulated (e.g., panels closed, added, etc.) and we need
13310
13358
  // to resize all viewports, so we will add a timeout here to make sure
@@ -14140,6 +14188,11 @@ class CornerstoneViewportService extends src/* PubSubService */.Rc {
14140
14188
  id: viewportId
14141
14189
  }) => {
14142
14190
  const presentation = this._getPositionPresentation(viewportId);
14191
+
14192
+ // During a resize, the slice index should remain unchanged. This is a temporary fix for
14193
+ // a larger issue regarding the definition of slice index with slab thickness.
14194
+ // We need to revisit this to make it more robust and understandable.
14195
+ delete presentation.viewReference?.sliceIndex;
14143
14196
  this.beforeResizePositionPresentations.set(viewportId, presentation);
14144
14197
  });
14145
14198
 
@@ -14148,7 +14201,7 @@ class CornerstoneViewportService extends src/* PubSubService */.Rc {
14148
14201
  renderingEngine.resize(isImmediate);
14149
14202
  renderingEngine.render();
14150
14203
 
14151
- // Reset the camera for viewports that should reset their camera on resize,
14204
+ // Reset the camera for all viewports using position presentation to maintain relative size/position
14152
14205
  // which means only those viewports that have a zoom level of 1.
14153
14206
  this.beforeResizePositionPresentations.forEach((positionPresentation, viewportId) => {
14154
14207
  this.setPresentations(viewportId, {
@@ -14905,10 +14958,6 @@ function getDicomMicroscopySopClassHandler({
14905
14958
  function getSopClassHandlerModule(params) {
14906
14959
  return [getDicomMicroscopySopClassHandler(params)];
14907
14960
  }
14908
- // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/utilities/index.js + 40 modules
14909
- var esm_utilities = __webpack_require__(49035);
14910
- // EXTERNAL MODULE: ../../../extensions/default/src/stores/useToggleOneUpViewportGridStore.ts
14911
- var useToggleOneUpViewportGridStore = __webpack_require__(73325);
14912
14961
  // EXTERNAL MODULE: ../../../node_modules/lodash.debounce/index.js
14913
14962
  var lodash_debounce = __webpack_require__(62051);
14914
14963
  var lodash_debounce_default = /*#__PURE__*/__webpack_require__.n(lodash_debounce);
@@ -15359,6 +15408,57 @@ function PanelSegmentation({
15359
15408
  id: 'default.showAddSegment',
15360
15409
  showAddSegment: true
15361
15410
  });
15411
+ const CustomDropdownMenuContent = customizationService.getCustomComponent('PanelSegmentation.CustomDropdownMenuContent', ({
15412
+ activeSegmentation,
15413
+ onSegmentationAdd,
15414
+ onSegmentationRemoveFromViewport,
15415
+ onSegmentationEdit,
15416
+ onSegmentationDelete,
15417
+ allowExport,
15418
+ storeSegmentation,
15419
+ onSegmentationDownload,
15420
+ onSegmentationDownloadRTSS,
15421
+ t
15422
+ }) => /*#__PURE__*/react.createElement(ui_next_src/* DropdownMenuContent */.SQ, {
15423
+ align: "start"
15424
+ }, /*#__PURE__*/react.createElement(ui_next_src/* DropdownMenuItem */._2, {
15425
+ onClick: () => onSegmentationAdd(activeSegmentation.id)
15426
+ }, /*#__PURE__*/react.createElement(ui_next_src/* Icons */.FI.Add, {
15427
+ className: "text-foreground"
15428
+ }), /*#__PURE__*/react.createElement("span", {
15429
+ className: "pl-2"
15430
+ }, t('Create New Segmentation'))), /*#__PURE__*/react.createElement(ui_next_src/* DropdownMenuSeparator */.mB, null), /*#__PURE__*/react.createElement(ui_next_src/* DropdownMenuLabel */.lp, null, t('Manage Current Segmentation')), /*#__PURE__*/react.createElement(ui_next_src/* DropdownMenuItem */._2, {
15431
+ onClick: () => onSegmentationRemoveFromViewport(activeSegmentation.id)
15432
+ }, /*#__PURE__*/react.createElement(ui_next_src/* Icons */.FI.Series, {
15433
+ className: "text-foreground"
15434
+ }), /*#__PURE__*/react.createElement("span", {
15435
+ className: "pl-2"
15436
+ }, t('Remove from Viewport'))), /*#__PURE__*/react.createElement(ui_next_src/* DropdownMenuItem */._2, {
15437
+ onClick: () => onSegmentationEdit(activeSegmentation.id)
15438
+ }, /*#__PURE__*/react.createElement(ui_next_src/* Icons */.FI.Rename, {
15439
+ className: "text-foreground"
15440
+ }), /*#__PURE__*/react.createElement("span", {
15441
+ className: "pl-2"
15442
+ }, t('Rename'))), /*#__PURE__*/react.createElement(ui_next_src/* DropdownMenuSub */.lv, null, /*#__PURE__*/react.createElement(ui_next_src/* DropdownMenuSubTrigger */.nV, {
15443
+ disabled: !allowExport,
15444
+ className: "pl-1"
15445
+ }, /*#__PURE__*/react.createElement(ui_next_src/* Icons */.FI.Export, {
15446
+ className: "text-foreground"
15447
+ }), /*#__PURE__*/react.createElement("span", {
15448
+ className: "pl-2"
15449
+ }, t('Export & Download'))), /*#__PURE__*/react.createElement(ui_next_src/* DropdownMenuPortal */.dc, null, /*#__PURE__*/react.createElement(ui_next_src/* DropdownMenuSubContent */.M5, null, /*#__PURE__*/react.createElement(ui_next_src/* DropdownMenuItem */._2, {
15450
+ onClick: () => storeSegmentation(activeSegmentation.id)
15451
+ }, t('Export DICOM SEG')), /*#__PURE__*/react.createElement(ui_next_src/* DropdownMenuItem */._2, {
15452
+ onClick: () => onSegmentationDownload(activeSegmentation.id)
15453
+ }, t('Download DICOM SEG')), /*#__PURE__*/react.createElement(ui_next_src/* DropdownMenuItem */._2, {
15454
+ onClick: () => onSegmentationDownloadRTSS(activeSegmentation.id)
15455
+ }, t('Download DICOM RTSTRUCT'))))), /*#__PURE__*/react.createElement(ui_next_src/* DropdownMenuSeparator */.mB, null), /*#__PURE__*/react.createElement(ui_next_src/* DropdownMenuItem */._2, {
15456
+ onClick: () => onSegmentationDelete(activeSegmentation.id)
15457
+ }, /*#__PURE__*/react.createElement(ui_next_src/* Icons */.FI.Delete, {
15458
+ className: "text-red-600"
15459
+ }), /*#__PURE__*/react.createElement("span", {
15460
+ className: "pl-2 text-red-600"
15461
+ }, t('Delete')))));
15362
15462
  const exportOptions = segmentationsWithRepresentations.map(({
15363
15463
  segmentation
15364
15464
  }) => {
@@ -15421,7 +15521,7 @@ function PanelSegmentation({
15421
15521
  setRenderOutline: handlers.setRenderOutline,
15422
15522
  setFillAlphaInactive: handlers.setFillAlphaInactive,
15423
15523
  renderInactiveSegmentations: handlers.getRenderInactiveSegmentations()
15424
- }, children, /*#__PURE__*/react.createElement(ui_next_src/* SegmentationTable */.R4.Config, null), /*#__PURE__*/react.createElement(ui_next_src/* SegmentationTable */.R4.AddSegmentationRow, null), SegmentationTableMode === 'collapsed' ? /*#__PURE__*/react.createElement(ui_next_src/* SegmentationTable */.R4.Collapsed, null, /*#__PURE__*/react.createElement(ui_next_src/* SegmentationTable */.R4.SelectorHeader, null), /*#__PURE__*/react.createElement(ui_next_src/* SegmentationTable */.R4.AddSegmentRow, null), /*#__PURE__*/react.createElement(ui_next_src/* SegmentationTable */.R4.Segments, null)) : /*#__PURE__*/react.createElement(ui_next_src/* SegmentationTable */.R4.Expanded, null, /*#__PURE__*/react.createElement(ui_next_src/* SegmentationTable */.R4.Header, null), /*#__PURE__*/react.createElement(ui_next_src/* SegmentationTable */.R4.Segments, null))));
15524
+ }, children, /*#__PURE__*/react.createElement(ui_next_src/* SegmentationTable */.R4.Config, null), /*#__PURE__*/react.createElement(ui_next_src/* SegmentationTable */.R4.AddSegmentationRow, null), SegmentationTableMode === 'collapsed' ? /*#__PURE__*/react.createElement(ui_next_src/* SegmentationTable */.R4.Collapsed, null, /*#__PURE__*/react.createElement(ui_next_src/* SegmentationTable */.R4.SelectorHeader, null, /*#__PURE__*/react.createElement(CustomDropdownMenuContent, null)), /*#__PURE__*/react.createElement(ui_next_src/* SegmentationTable */.R4.AddSegmentRow, null), /*#__PURE__*/react.createElement(ui_next_src/* SegmentationTable */.R4.Segments, null)) : /*#__PURE__*/react.createElement(ui_next_src/* SegmentationTable */.R4.Expanded, null, /*#__PURE__*/react.createElement(ui_next_src/* SegmentationTable */.R4.Header, null, /*#__PURE__*/react.createElement(CustomDropdownMenuContent, null)), /*#__PURE__*/react.createElement(ui_next_src/* SegmentationTable */.R4.Segments, null))));
15425
15525
  }
15426
15526
  // EXTERNAL MODULE: ../../../node_modules/prop-types/index.js
15427
15527
  var prop_types = __webpack_require__(97598);
@@ -16738,7 +16838,7 @@ const cornerstoneExtension = {
16738
16838
  useLutPresentationStore/* useLutPresentationStore */.I.getState().clearLutPresentationStore();
16739
16839
  usePositionPresentationStore/* usePositionPresentationStore */.q.getState().clearPositionPresentationStore();
16740
16840
  useSynchronizersStore/* useSynchronizersStore */.U.getState().clearSynchronizersStore();
16741
- useToggleOneUpViewportGridStore/* useToggleOneUpViewportGridStore */.Y.getState().clearToggleOneUpViewportGridStore();
16841
+ default_src.useToggleOneUpViewportGridStore.getState().clearToggleOneUpViewportGridStore();
16742
16842
  useSegmentationPresentationStore/* useSegmentationPresentationStore */.v.getState().clearSegmentationPresentationStore();
16743
16843
  segmentationService.removeAllSegmentations();
16744
16844
  },
@@ -16992,8 +17092,8 @@ const addUniqueIndex = (arr, key, viewports, isUpdatingSameViewport) => {
16992
17092
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
16993
17093
  /* harmony export */ I: () => (/* binding */ useLutPresentationStore)
16994
17094
  /* harmony export */ });
16995
- /* harmony import */ var zustand__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(95759);
16996
- /* harmony import */ var zustand_middleware__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(39100);
17095
+ /* harmony import */ var zustand__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(78713);
17096
+ /* harmony import */ var zustand_middleware__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(21978);
16997
17097
  /* harmony import */ var _presentationUtils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(46026);
16998
17098
 
16999
17099
 
@@ -17107,8 +17207,8 @@ const useLutPresentationStore = (0,zustand__WEBPACK_IMPORTED_MODULE_0__/* .creat
17107
17207
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
17108
17208
  /* harmony export */ q: () => (/* binding */ usePositionPresentationStore)
17109
17209
  /* harmony export */ });
17110
- /* harmony import */ var zustand__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(95759);
17111
- /* harmony import */ var zustand_middleware__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(39100);
17210
+ /* harmony import */ var zustand__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(78713);
17211
+ /* harmony import */ var zustand_middleware__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(21978);
17112
17212
  /* harmony import */ var _presentationUtils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(46026);
17113
17213
 
17114
17214
 
@@ -17221,10 +17321,10 @@ __webpack_require__.d(__webpack_exports__, {
17221
17321
  v: () => (/* binding */ useSegmentationPresentationStore)
17222
17322
  });
17223
17323
 
17224
- // EXTERNAL MODULE: ../node_modules/zustand/esm/index.mjs + 1 modules
17225
- var esm = __webpack_require__(95759);
17226
- // EXTERNAL MODULE: ../node_modules/zustand/esm/middleware.mjs
17227
- var middleware = __webpack_require__(39100);
17324
+ // EXTERNAL MODULE: ../../../node_modules/zustand/esm/index.mjs + 1 modules
17325
+ var esm = __webpack_require__(78713);
17326
+ // EXTERNAL MODULE: ../../../node_modules/zustand/esm/middleware.mjs
17327
+ var middleware = __webpack_require__(21978);
17228
17328
  // EXTERNAL MODULE: ../../../extensions/cornerstone/src/stores/presentationUtils.ts
17229
17329
  var presentationUtils = __webpack_require__(46026);
17230
17330
  // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/index.js
@@ -17427,8 +17527,8 @@ const useSegmentationPresentationStore = (0,esm/* create */.vt)()(DEBUG_STORE ?
17427
17527
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
17428
17528
  /* harmony export */ U: () => (/* binding */ useSynchronizersStore)
17429
17529
  /* harmony export */ });
17430
- /* harmony import */ var zustand__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(95759);
17431
- /* harmony import */ var zustand_middleware__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(39100);
17530
+ /* harmony import */ var zustand__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(78713);
17531
+ /* harmony import */ var zustand_middleware__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(21978);
17432
17532
 
17433
17533
 
17434
17534
 
@@ -762,6 +762,11 @@ const performCustomizations = customizationService => {
762
762
  id: 'PanelSegmentation.disableEditing',
763
763
  disableEditing: true
764
764
  }
765
+ // to only show current study in the panel study browser
766
+ // {
767
+ // id: 'PanelStudyBrowser.studyMode',
768
+ // mode: 'primary',
769
+ // },
765
770
  // To disable editing in the MeasurementTable
766
771
  // {
767
772
  // id: 'PanelMeasurement.disableEditing',
@@ -778,6 +783,31 @@ const performCustomizations = customizationService => {
778
783
  // { value: 'Toe', label: 'Toe' },
779
784
  // ],
780
785
  // },
786
+ /**
787
+ * Custom Dropdown Menu Item
788
+ */
789
+ // {
790
+ // id: 'PanelSegmentation.CustomDropdownMenuContent',
791
+ // content: ({
792
+ // activeSegmentation,
793
+ // onSegmentationAdd,
794
+ // onSegmentationRemoveFromViewport,
795
+ // onSegmentationEdit,
796
+ // onSegmentationDelete,
797
+ // allowExport,
798
+ // storeSegmentation,
799
+ // onSegmentationDownload,
800
+ // onSegmentationDownloadRTSS,
801
+ // t,
802
+ // }) => (
803
+ // <DropdownMenuContent align="start">
804
+ // <DropdownMenuItem onClick={() => onSegmentationDelete(activeSegmentation.id)}>
805
+ // <Icons.Delete className="text-red-600" />
806
+ // <span className="pl-2 text-red-600">{t('My Custom Dropdown Menu Item')}</span>
807
+ // </DropdownMenuItem>
808
+ // </DropdownMenuContent>
809
+ // ),
810
+ // },
781
811
  ]);
782
812
  };
783
813
  ;// CONCATENATED MODULE: ../../../modes/longitudinal/src/index.ts
package/dist/1266.css CHANGED
@@ -1,4 +1,4 @@
1
1
  .dicom-tag-browser-table{margin-left:auto;margin-right:auto}.dicom-tag-browser-table-wrapper{overflow-x:scroll}.dicom-tag-browser-table tr{border-top:1px solid #ddd;color:#fff;padding-left:10px;padding-right:10px;white-space:nowrap}.stick{overflow:clip;position:sticky}.dicom-tag-browser-content{overflow:hidden;padding-bottom:50px;width:100%}.dicom-tag-browser-instance-range .range{height:20px}.dicom-tag-browser-instance-range{padding:20px 0}.dicom-tag-browser-table td.dicom-tag-browser-table-center{text-align:center}.dicom-tag-browser-table th{color:"#20A5D6";padding-left:10px;padding-right:10px;text-align:center}.dicom-tag-browser-table th.dicom-tag-browser-table-left{text-align:left}
2
2
  .chrome-picker{background:#090c29!important}
3
3
  .viewport-overlay{max-width:40%}.viewport-overlay span{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.viewport-overlay.left-viewport{text-align:left}.viewport-overlay.right-viewport-scrollbar{text-align:right}.viewport-overlay.right-viewport-scrollbar .flex.flex-row{-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}
4
- .dicom-upload-drop-area-border-dash{background-image:repeating-linear-gradient(90deg,#7bb2ce 0,#7bb2ce 50%,transparent 0,transparent),repeating-linear-gradient(90deg,#7bb2ce 0,#7bb2ce 50%,transparent 0,transparent),repeating-linear-gradient(180deg,#7bb2ce 0,#7bb2ce 50%,transparent 0,transparent),repeating-linear-gradient(180deg,#7bb2ce 0,#7bb2ce 50%,transparent 0,transparent);background-position:0 0,0 100%,0 0,100% 0;background-repeat:repeat-x,repeat-x,repeat-y,repeat-y;background-size:20px 3px,20px 3px,3px 20px,3px 20px}
4
+ .dicom-upload-drop-area-border-dash{background-image:repeating-linear-gradient(90deg,#7bb2ce 0,#7bb2ce 50%,#0000 0,#0000),repeating-linear-gradient(90deg,#7bb2ce 0,#7bb2ce 50%,#0000 0,#0000),repeating-linear-gradient(180deg,#7bb2ce 0,#7bb2ce 50%,#0000 0,#0000),repeating-linear-gradient(180deg,#7bb2ce 0,#7bb2ce 50%,#0000 0,#0000);background-position:0 0,0 100%,0 0,100% 0;background-repeat:repeat-x,repeat-x,repeat-y,repeat-y;background-size:20px 3px,20px 3px,3px 20px,3px 20px}
package/dist/1801.css CHANGED
@@ -1,4 +1,4 @@
1
1
  .dicom-tag-browser-table{margin-left:auto;margin-right:auto}.dicom-tag-browser-table-wrapper{overflow-x:scroll}.dicom-tag-browser-table tr{border-top:1px solid #ddd;color:#fff;padding-left:10px;padding-right:10px;white-space:nowrap}.stick{overflow:clip;position:sticky}.dicom-tag-browser-content{overflow:hidden;padding-bottom:50px;width:100%}.dicom-tag-browser-instance-range .range{height:20px}.dicom-tag-browser-instance-range{padding:20px 0}.dicom-tag-browser-table td.dicom-tag-browser-table-center{text-align:center}.dicom-tag-browser-table th{color:"#20A5D6";padding-left:10px;padding-right:10px;text-align:center}.dicom-tag-browser-table th.dicom-tag-browser-table-left{text-align:left}
2
2
  .chrome-picker{background:#090c29!important}
3
3
  .viewport-overlay{max-width:40%}.viewport-overlay span{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.viewport-overlay.left-viewport{text-align:left}.viewport-overlay.right-viewport-scrollbar{text-align:right}.viewport-overlay.right-viewport-scrollbar .flex.flex-row{-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}
4
- .dicom-upload-drop-area-border-dash{background-image:repeating-linear-gradient(90deg,#7bb2ce 0,#7bb2ce 50%,transparent 0,transparent),repeating-linear-gradient(90deg,#7bb2ce 0,#7bb2ce 50%,transparent 0,transparent),repeating-linear-gradient(180deg,#7bb2ce 0,#7bb2ce 50%,transparent 0,transparent),repeating-linear-gradient(180deg,#7bb2ce 0,#7bb2ce 50%,transparent 0,transparent);background-position:0 0,0 100%,0 0,100% 0;background-repeat:repeat-x,repeat-x,repeat-y,repeat-y;background-size:20px 3px,20px 3px,3px 20px,3px 20px}
4
+ .dicom-upload-drop-area-border-dash{background-image:repeating-linear-gradient(90deg,#7bb2ce 0,#7bb2ce 50%,#0000 0,#0000),repeating-linear-gradient(90deg,#7bb2ce 0,#7bb2ce 50%,#0000 0,#0000),repeating-linear-gradient(180deg,#7bb2ce 0,#7bb2ce 50%,#0000 0,#0000),repeating-linear-gradient(180deg,#7bb2ce 0,#7bb2ce 50%,#0000 0,#0000);background-position:0 0,0 100%,0 0,100% 0;background-repeat:repeat-x,repeat-x,repeat-y,repeat-y;background-size:20px 3px,20px 3px,3px 20px,3px 20px}
@@ -172,7 +172,7 @@
172
172
  /******/ // This function allow to reference async chunks and sibling chunks for the entrypoint
173
173
  /******/ __webpack_require__.u = (chunkId) => {
174
174
  /******/ // return url for filenames based on template
175
- /******/ return "" + chunkId + ".bundle." + {"732":"532947c280e1a8f6e020","4571":"3b1691730b3c57bf4d35","8094":"411698eaf81975a7f12d"}[chunkId] + ".js";
175
+ /******/ return "" + chunkId + ".bundle." + {"732":"532947c280e1a8f6e020","4571":"142e8f6150bf81f1b7d2","8094":"411698eaf81975a7f12d"}[chunkId] + ".js";
176
176
  /******/ };
177
177
  /******/ })();
178
178
  /******/
@@ -31,6 +31,8 @@ var hydrateStructuredReport = __webpack_require__(22989);
31
31
  var state = __webpack_require__(45981);
32
32
  // EXTERNAL MODULE: ../../../extensions/cornerstone-dicom-sr/src/utils/createReferencedImageDisplaySet.ts
33
33
  var createReferencedImageDisplaySet = __webpack_require__(92643);
34
+ // EXTERNAL MODULE: ../../../extensions/cornerstone/src/index.tsx + 105 modules
35
+ var cornerstone_src = __webpack_require__(11185);
34
36
  ;// CONCATENATED MODULE: ../../../extensions/cornerstone-dicom-sr/src/components/OHIFCornerstoneSRMeasurementViewport.tsx
35
37
  function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
36
38
 
@@ -42,11 +44,11 @@ function _extends() { return _extends = Object.assign ? Object.assign.bind() : f
42
44
 
43
45
 
44
46
 
47
+
45
48
  const MEASUREMENT_TRACKING_EXTENSION_ID = '@ohif/extension-measurement-tracking';
46
49
  const SR_TOOLGROUP_BASE_NAME = 'SRToolGroup';
47
50
  function OHIFCornerstoneSRMeasurementViewport(props) {
48
51
  const {
49
- commandsManager,
50
52
  children,
51
53
  dataSource,
52
54
  displaySets,
@@ -57,7 +59,6 @@ function OHIFCornerstoneSRMeasurementViewport(props) {
57
59
  const [appConfig] = (0,state/* useAppConfig */.r)();
58
60
  const {
59
61
  displaySetService,
60
- cornerstoneViewportService,
61
62
  measurementService,
62
63
  viewportActionCornersService
63
64
  } = servicesManager.services;
@@ -68,6 +69,9 @@ function OHIFCornerstoneSRMeasurementViewport(props) {
68
69
  throw new Error('SR viewport should only have a single display set');
69
70
  }
70
71
  const srDisplaySet = displaySets[0];
72
+ const {
73
+ setPositionPresentation
74
+ } = (0,cornerstone_src.usePositionPresentationStore)();
71
75
  const [viewportGrid, viewportGridService] = (0,ui_src/* useViewportGrid */.ih)();
72
76
  const [measurementSelected, setMeasurementSelected] = (0,react.useState)(0);
73
77
  const [measurementCount, setMeasurementCount] = (0,react.useState)(1);
@@ -171,25 +175,15 @@ function OHIFCornerstoneSRMeasurementViewport(props) {
171
175
  setMeasurementSelected(newMeasurementSelected);
172
176
  setActiveImageDisplaySetData(referencedDisplaySet);
173
177
  setReferencedDisplaySetMetadata(referencedDisplaySetMetadata);
174
- if (referencedDisplaySet.displaySetInstanceUID === activeImageDisplaySetData?.displaySetInstanceUID) {
175
- const {
176
- measurements
177
- } = srDisplaySet;
178
-
179
- // it means that we have a new referenced display set, and the
180
- // imageIdIndex will handle it by updating the viewport, but if they
181
- // are the same we just need to use measurementService to jump to the
182
- // new measurement
183
- const csViewport = cornerstoneViewportService.getCornerstoneViewport(viewportId);
184
- if (!csViewport) {
185
- return;
186
- }
187
- const imageIds = csViewport.getImageIds();
188
- const imageIdIndex = imageIds.indexOf(measurements[newMeasurementSelected].imageId);
189
- if (imageIdIndex !== -1) {
190
- csViewport.setImageIdIndex(imageIdIndex);
178
+ const {
179
+ presentationIds
180
+ } = viewportOptions;
181
+ const measurement = srDisplaySet.measurements[newMeasurementSelected];
182
+ setPositionPresentation(presentationIds.positionPresentationId, {
183
+ viewReference: {
184
+ referencedImageId: measurement.imageId
191
185
  }
192
- }
186
+ });
193
187
  });
194
188
  }, [dataSource, srDisplaySet, activeImageDisplaySetData, viewportId]);
195
189
  const getCornerstoneViewport = (0,react.useCallback)(() => {
@@ -206,7 +200,6 @@ function OHIFCornerstoneSRMeasurementViewport(props) {
206
200
  if (!measurement) {
207
201
  return null;
208
202
  }
209
- const initialImageIndex = activeImageDisplaySetData.images.findIndex(image => image.imageId === measurement.imageId);
210
203
  return /*#__PURE__*/react.createElement(Component, _extends({}, props, {
211
204
  // should be passed second since we don't want SR displaySet to
212
205
  // override the activeImageDisplaySetData
@@ -230,7 +223,6 @@ function OHIFCornerstoneSRMeasurementViewport(props) {
230
223
  props.onElementEnabled?.(evt);
231
224
  onElementEnabled(evt);
232
225
  },
233
- initialImageIndex: initialImageIndex,
234
226
  isJumpToMeasurementDisabled: true
235
227
  }));
236
228
  }, [activeImageDisplaySetData, viewportId, measurementSelected]);