@ohif/app 3.9.1 → 3.9.3

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 (51) hide show
  1. package/dist/{1185.bundle.023fe7179faaa50019d3.js → 1185.bundle.9f4c770baf52abcf3c6d.js} +120 -53
  2. package/dist/{1266.bundle.e9abd5c45b5236544151.js → 1266.bundle.0097d9c4ba974905a833.js} +8 -3
  3. package/dist/{1374.bundle.019bbc010eeb66109e8b.js → 1374.bundle.2e1fa65e28731d98969a.js} +2 -2
  4. package/dist/{1436.bundle.773756cd51b69e887bac.js → 1436.bundle.be39664239aa2bbca527.js} +234 -274
  5. package/dist/{1927.bundle.49539e3ab5b0aad1399c.js → 1927.bundle.2b2fa0b539d6ac5b0dc3.js} +1 -1
  6. package/dist/{213.bundle.e663335fb0884edde6d8.js → 213.bundle.c0c23f7fd4b66d78d0fe.js} +2 -2
  7. package/dist/{5807.bundle.dac5ce36534a71c77723.js → 2343.bundle.f096450c21417279d4cc.js} +270 -1
  8. package/dist/{2424.bundle.b7da298db43541d3a7c0.js → 2424.bundle.d73e8d67dc2aace299d2.js} +2 -2
  9. package/dist/{2701.bundle.8c1ff2e0faaa7d2f4716.js → 2701.bundle.c8271fa4986a45fea350.js} +17 -24
  10. package/dist/{2825.bundle.b04c941a87fd580deb6d.js → 2825.bundle.0612b1b8ab3e8ee01b93.js} +1 -1
  11. package/dist/{3198.bundle.c82b7424070ffd02faf1.js → 3198.bundle.7a18515cfe4113417251.js} +10 -6
  12. package/dist/{3200.bundle.a12825fb5aec200d33e2.js → 3200.bundle.e46dca03aa824998973a.js} +18 -10
  13. package/dist/3326.bundle.d01046d6c2c31654c125.js +265 -0
  14. package/dist/{149.bundle.ce5596fc563276036744.js → 3900.bundle.0e4e29374e221b260ed1.js} +35 -59
  15. package/dist/{8295.bundle.4ecb27f9e58526f12bcb.js → 3902.bundle.8ae7b2e27f760af997dd.js} +20 -1
  16. package/dist/3902.css +2 -0
  17. package/dist/{4202.bundle.5c8120ed4841da0af211.js → 4202.bundle.497702023d73202f4f39.js} +2 -1
  18. package/dist/{3121.bundle.d3e7092e305cf6cecdb5.js → 4438.bundle.a945f803d0eeb11d081f.js} +24 -4
  19. package/dist/{4571.bundle.3b1691730b3c57bf4d35.js → 4571.bundle.a37be49663df2f4a2c8a.js} +99 -89
  20. package/dist/4759.bundle.1e982897292fc19ecd7c.js +265 -0
  21. package/dist/{4834.bundle.aad44c2628cdefb7a4dd.js → 4834.bundle.92ba088cc62a6b791000.js} +2 -2
  22. package/dist/{5139.bundle.367a6827071448e2923d.js → 5139.bundle.70d3be7dd1896f245d7b.js} +3 -3
  23. package/dist/{5247.bundle.6dc2a50f21821b2ffdf5.js → 5247.bundle.4e8669e41fd28813e643.js} +5 -5
  24. package/dist/{5252.bundle.5ec502c53a9cc877ed8d.js → 5252.bundle.f2675336275573a288d5.js} +13 -1
  25. package/dist/{1520.bundle.97dbd9bfa83148e5334d.js → 5630.bundle.44d0ca81d77b7ae5193b.js} +63 -58
  26. package/dist/{5687.bundle.5731ec23dd9eb43a083e.js → 5687.bundle.50b800a714486557b243.js} +5 -5
  27. package/dist/{5717.bundle.848e13f256818475f57f.js → 5717.bundle.9218cb67ad1994cd1a99.js} +305 -64
  28. package/dist/{3970.bundle.31942cc0c12a008e7ba0.js → 5758.bundle.cd1599b81bdb1f735f9d.js} +270 -1
  29. package/dist/{717.bundle.0f32b7b57347b5141248.js → 7013.bundle.979d3a29f6142e8c1290.js} +264 -4
  30. package/dist/7013.css +4 -0
  31. package/dist/{7197.bundle.c28453cdb392072d8bf8.js → 7197.bundle.30f8969751309ab5235c.js} +6 -6
  32. package/dist/{7955.bundle.6a255705b1ef5906f4a8.js → 7955.bundle.9264a10437f0a67e6057.js} +3 -3
  33. package/dist/{8008.bundle.5bf7b274246be10e2f05.js → 8008.bundle.6772a210a995b568f8d0.js} +2 -2
  34. package/dist/{8228.bundle.55ac03d7165248f47d4e.js → 8228.bundle.2c1e61eec1f9f4b3b613.js} +8 -26
  35. package/dist/{8259.bundle.623c29b26b170a8a085b.js → 8259.bundle.9cf9ef151893ede068bb.js} +2 -2
  36. package/dist/{8523.bundle.648334132159465cdc41.js → 8523.bundle.c0ec85de98ba380ebeb4.js} +55 -13
  37. package/dist/{8558.bundle.01d05fd73da5db8e60f9.js → 8558.bundle.9c22f000a404f1006a41.js} +10 -5
  38. package/dist/{9551.bundle.6c260a9869e14dcc3543.js → 9551.bundle.3507bb1d4353df13bf3a.js} +3 -3
  39. package/dist/{9611.bundle.767595c93877e5166c03.js → 9611.bundle.9f1aa9041196d77f2b7e.js} +2 -2
  40. package/dist/{app.bundle.d02143bec2df7fec9964.js → app.bundle.9af5a6d7ff3a778d05b7.js} +278 -150
  41. package/dist/app.bundle.css +2 -2
  42. package/dist/index.html +1 -1
  43. package/dist/{polySeg.bundle.b79ae514989e86301c71.js → polySeg.bundle.6e85073e3abf2e6e6078.js} +1 -1
  44. package/dist/serve.json +1 -10
  45. package/dist/{suv-peak-worker.bundle.31c3b3b957204af93b7e.js → suv-peak-worker.bundle.e2e8e46de3e958a1a3db.js} +3 -3
  46. package/dist/sw.js +1 -1
  47. package/package.json +19 -19
  48. /package/dist/{1801.css → 3326.css} +0 -0
  49. /package/dist/{717.css → 4438.css} +0 -0
  50. /package/dist/{2591.css → 4759.css} +0 -0
  51. /package/dist/{9862.bundle.7146682e56aa66130ae6.js → 9862.bundle.aa2f8e0010f1be1bc87d.js} +0 -0
@@ -934,7 +934,7 @@ class BaseVolumeViewport extends _Viewport__WEBPACK_IMPORTED_MODULE_18__/* ["def
934
934
  sliceIndex ??= currentIndex;
935
935
  const { viewPlaneNormal, focalPoint } = this.getCamera();
936
936
  const querySeparator = volumeId.includes('?') ? '&' : '?';
937
- return `volumeId:${volumeId}${querySeparator}sliceIndex=${sliceIndex}&viewPlaneNormal=${viewPlaneNormal.join(',')}&focalPoint=${focalPoint.join(',')}`;
937
+ return `volumeId:${volumeId}${querySeparator}sliceIndex=${sliceIndex}&viewPlaneNormal=${viewPlaneNormal.join(',')}`;
938
938
  }
939
939
  _addVolumeId(volumeId) {
940
940
  this.volumeIds.add(volumeId);
@@ -16844,6 +16844,12 @@ var cache = __webpack_require__(49038);
16844
16844
 
16845
16845
 
16846
16846
 
16847
+ function convertDataType(data, targetDataType) {
16848
+ const Constructor = (0,getBufferConfiguration/* getConstructorFromType */.j)(targetDataType);
16849
+ const convertedData = new Constructor(data.length);
16850
+ convertedData.set(data);
16851
+ return convertedData;
16852
+ }
16847
16853
  function vtkStreamingOpenGLTexture(publicAPI, model) {
16848
16854
  model.classHierarchy.push('vtkStreamingOpenGLTexture');
16849
16855
  model.updatedFrames = [];
@@ -16894,10 +16900,14 @@ function vtkStreamingOpenGLTexture(publicAPI, model) {
16894
16900
  if (!image) {
16895
16901
  continue;
16896
16902
  }
16897
- const data = image.voxelManager.getScalarData();
16903
+ let data = image.voxelManager.getScalarData();
16898
16904
  const gl = model.context;
16899
- const dataType = data.constructor.name;
16900
- const [pixData] = publicAPI.updateArrayDataTypeForGL(dataType, [data]);
16905
+ if (volume.dataType !== data.constructor.name) {
16906
+ data = convertDataType(data, volume.dataType);
16907
+ }
16908
+ const [pixData] = publicAPI.updateArrayDataTypeForGL(volume.dataType, [
16909
+ data,
16910
+ ]);
16901
16911
  publicAPI.bind();
16902
16912
  const zOffset = i;
16903
16913
  gl.texSubImage3D(model.target, 0, 0, 0, zOffset, model.width, model.height, 1, model.format, model.openGLDataType, pixData);
@@ -16931,8 +16941,12 @@ function vtkStreamingOpenGLTexture(publicAPI, model) {
16931
16941
  constructor = data.constructor;
16932
16942
  }
16933
16943
  const gl = model.context;
16934
- const dataType = data.constructor.name;
16935
- const [pixData] = publicAPI.updateArrayDataTypeForGL(dataType, [data]);
16944
+ if (volume.dataType !== data.constructor.name) {
16945
+ data = convertDataType(data, volume.dataType);
16946
+ }
16947
+ const [pixData] = publicAPI.updateArrayDataTypeForGL(volume.dataType, [
16948
+ data,
16949
+ ]);
16936
16950
  publicAPI.bind();
16937
16951
  let zOffset = i;
16938
16952
  gl.texSubImage3D(model.target, 0, 0, 0, zOffset, model.width, model.height, 1, model.format, model.openGLDataType, pixData);
@@ -25049,12 +25063,20 @@ const deepMerge = (target = {}, source = {}, optionsArgument = undefined) => {
25049
25063
  /* harmony import */ var _getScalingParameters__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(32173);
25050
25064
  /* harmony import */ var _hasFloatScalingParameters__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(30169);
25051
25065
  /* harmony import */ var _init__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(59693);
25066
+ /* harmony import */ var _cache_cache__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(49038);
25067
+
25052
25068
 
25053
25069
 
25054
25070
 
25055
25071
 
25056
25072
 
25057
25073
 
25074
+ const constructorToTypedArray = {
25075
+ Uint8Array: 'Uint8Array',
25076
+ Int16Array: 'Int16Array',
25077
+ Uint16Array: 'Uint16Array',
25078
+ Float32Array: 'Float32Array',
25079
+ };
25058
25080
  function generateVolumePropsFromImageIds(imageIds, volumeId) {
25059
25081
  const volumeMetadata = (0,_makeVolumeMetadata__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(imageIds);
25060
25082
  const { ImageOrientationPatient, PixelSpacing, Columns, Rows } = volumeMetadata;
@@ -25087,6 +25109,10 @@ function generateVolumePropsFromImageIds(imageIds, volumeId) {
25087
25109
  function _determineDataType(imageIds, volumeMetadata) {
25088
25110
  const { BitsAllocated, PixelRepresentation } = volumeMetadata;
25089
25111
  const signed = PixelRepresentation === 1;
25112
+ const cachedDataType = _getDataTypeFromCache(imageIds);
25113
+ if (cachedDataType) {
25114
+ return cachedDataType;
25115
+ }
25090
25116
  const [firstIndex, middleIndex, lastIndex] = [
25091
25117
  0,
25092
25118
  Math.floor(imageIds.length / 2),
@@ -25121,6 +25147,19 @@ function _determineDataType(imageIds, volumeMetadata) {
25121
25147
  throw new Error(`Bits allocated of ${BitsAllocated} is not defined to generate scalarData for the volume.`);
25122
25148
  }
25123
25149
  }
25150
+ function _getDataTypeFromCache(imageIds) {
25151
+ const indices = [0, Math.floor(imageIds.length / 2), imageIds.length - 1];
25152
+ const images = indices.map((i) => _cache_cache__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .Ay.getImage(imageIds[i]));
25153
+ if (!images.every(Boolean)) {
25154
+ return null;
25155
+ }
25156
+ const constructorName = images[0].getPixelData().constructor.name;
25157
+ if (images.every((img) => img.getPixelData().constructor.name === constructorName) &&
25158
+ constructorName in constructorToTypedArray) {
25159
+ return constructorToTypedArray[constructorName];
25160
+ }
25161
+ return null;
25162
+ }
25124
25163
 
25125
25164
 
25126
25165
 
@@ -25768,6 +25807,15 @@ const imageRetrieveMetadataProvider = {
25768
25807
  add: (key, payload) => {
25769
25808
  retrieveConfigurationState.set(key, payload);
25770
25809
  },
25810
+ clone: () => {
25811
+ return new Map(retrieveConfigurationState);
25812
+ },
25813
+ restore: (state) => {
25814
+ retrieveConfigurationState.clear();
25815
+ state.forEach((value, key) => {
25816
+ retrieveConfigurationState.set(key, value);
25817
+ });
25818
+ },
25771
25819
  get: (type, ...queries) => {
25772
25820
  if (type === IMAGE_RETRIEVE_CONFIGURATION) {
25773
25821
  return queries
@@ -26693,7 +26741,10 @@ function calculateViewportsSpatialRegistration(viewport1, viewport2) {
26693
26741
 
26694
26742
  ;// CONCATENATED MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/utilities/getViewportImageCornersInWorld.js
26695
26743
  function getViewportImageCornersInWorld(viewport) {
26696
- const { imageData, dimensions } = viewport.getImageData();
26744
+ const { imageData, dimensions } = viewport.getImageData() || {};
26745
+ if (!imageData || !dimensions) {
26746
+ return [];
26747
+ }
26697
26748
  const { canvas } = viewport;
26698
26749
  const ratio = window.devicePixelRatio;
26699
26750
  const topLeftCanvas = [0, 0];
@@ -30108,6 +30159,10 @@ function getPixelDataTypeFromMinMax(min, max) {
30108
30159
  }
30109
30160
  return pixelDataType || Float32Array;
30110
30161
  }
30162
+ function validatePixelDataType(min, max, type) {
30163
+ const pixelDataType = getPixelDataTypeFromMinMax(min, max);
30164
+ return pixelDataType === type;
30165
+ }
30111
30166
 
30112
30167
  ;// CONCATENATED MODULE: ../../../node_modules/@cornerstonejs/dicom-image-loader/dist/esm/imageLoader/convertColorSpace.js
30113
30168
 
@@ -31760,7 +31815,7 @@ const workerFn = () => {
31760
31815
  const instance = new Worker(new URL(/* worker import */ __webpack_require__.p + __webpack_require__.u(1927), __webpack_require__.b), { type: undefined });
31761
31816
  return instance;
31762
31817
  };
31763
- function init(options) {
31818
+ function init(options = {}) {
31764
31819
  setOptions(options);
31765
31820
  imageLoader_registerLoaders();
31766
31821
  const workerManager = (0,esm.getWebWorkerManager)();
@@ -66971,7 +67026,7 @@ function vtkOpenGLTexture(publicAPI, model) {
66971
67026
  }
66972
67027
  return result;
66973
67028
  };
66974
- publicAPI.useHalfFloat = () => model.enableHalfFloat && model.canUseHalfFloat;
67029
+ publicAPI.useHalfFloat = () => model.enableUseHalfFloat && model.canUseHalfFloat;
66975
67030
 
66976
67031
  //----------------------------------------------------------------------------
66977
67032
  publicAPI.setInternalFormat = iFormat => {
@@ -67605,18 +67660,21 @@ function vtkOpenGLTexture(publicAPI, model) {
67605
67660
  }
67606
67661
  function setCanUseHalfFloat(dataType, offset, scale, preferSizeOverAccuracy) {
67607
67662
  publicAPI.getOpenGLDataType(dataType);
67663
+
67664
+ // Don't consider halfFloat and convert back to Float when the range of data does not generate an accurate halfFloat
67665
+ // AND it is not preferable to have a smaller texture than an exact texture.
67666
+ const isExactHalfFloat = hasExactHalfFloat(offset, scale) || preferSizeOverAccuracy;
67608
67667
  let useHalfFloat = false;
67609
67668
  if (model._openGLRenderWindow.getWebgl2()) {
67610
- useHalfFloat = model.openGLDataType === model.context.HALF_FLOAT;
67669
+ // If OES_texture_float_linear is not available, and using a half float would still be exact, force half floats
67670
+ // This is because half floats are always texture filterable in webgl2, while full *32F floats are not (unless the extension is present)
67671
+ const forceHalfFloat = model.openGLDataType === model.context.FLOAT && model.context.getExtension('OES_texture_float_linear') === null && isExactHalfFloat;
67672
+ useHalfFloat = forceHalfFloat || model.openGLDataType === model.context.HALF_FLOAT;
67611
67673
  } else {
67612
67674
  const halfFloatExt = model.context.getExtension('OES_texture_half_float');
67613
67675
  useHalfFloat = halfFloatExt && model.openGLDataType === halfFloatExt.HALF_FLOAT_OES;
67614
67676
  }
67615
-
67616
- // Don't consider halfFloat and convert back to Float when the range of data does not generate an accurate halfFloat
67617
- // AND it is not preferable to have a smaller texture than an exact texture.
67618
- const isHalfFloat = useHalfFloat && (hasExactHalfFloat(offset, scale) || preferSizeOverAccuracy);
67619
- model.canUseHalfFloat = isHalfFloat;
67677
+ model.canUseHalfFloat = useHalfFloat && isExactHalfFloat;
67620
67678
  }
67621
67679
  function processDataArray(dataArray, preferSizeOverAccuracy) {
67622
67680
  const numComps = dataArray.getNumberOfComponents();
@@ -94944,8 +95002,8 @@ var ui_src = __webpack_require__(35647);
94944
95002
  var ui_next_src = __webpack_require__(35570);
94945
95003
  // EXTERNAL MODULE: ./state/index.js + 1 modules
94946
95004
  var state = __webpack_require__(45981);
94947
- // EXTERNAL MODULE: ../../core/src/index.ts + 71 modules
94948
- var core_src = __webpack_require__(29463);
95005
+ // EXTERNAL MODULE: ../../core/src/index.ts + 72 modules
95006
+ var core_src = __webpack_require__(80818);
94949
95007
  // EXTERNAL MODULE: ../node_modules/react-router/dist/index.js
94950
95008
  var react_router_dist = __webpack_require__(67435);
94951
95009
  ;// CONCATENATED MODULE: ./hooks/useSearchParams.ts
@@ -95921,8 +95979,8 @@ function WorkList({
95921
95979
  };
95922
95980
  });
95923
95981
  const hasStudies = numOfStudies > 0;
95924
- const versionNumber = "3.9.1";
95925
- const commitHash = "610faa5a2738da5eabc40e57e338c359f481e852";
95982
+ const versionNumber = "3.9.3";
95983
+ const commitHash = "5d4f2e2a8e62f8de97d56a4e3f17be6018e9f2eb";
95926
95984
  const menuOptions = [{
95927
95985
  title: t('Header:About'),
95928
95986
  icon: 'info',
@@ -96708,7 +96766,7 @@ function ViewerViewportGrid(props) {
96708
96766
  isActive: isActive
96709
96767
  }, /*#__PURE__*/react.createElement("div", {
96710
96768
  "data-cy": "viewport-pane",
96711
- className: classnames_default()('flex h-full w-full flex-col', {
96769
+ className: classnames_default()('flex h-full w-full min-w-[5px] flex-col', {
96712
96770
  'pointer-events-none': !isActive && (appConfig?.activateViewportBeforeInteraction ?? true)
96713
96771
  })
96714
96772
  }, /*#__PURE__*/react.createElement(ViewportComponent, {
@@ -96797,35 +96855,35 @@ modes.push("@ohif/mode-preclinical-4d");
96797
96855
  async function loadModule(module) {
96798
96856
  if (typeof module !== 'string') return module;
96799
96857
  if (module === "@ohif/extension-default") {
96800
- const imported = await Promise.all(/* import() */[__webpack_require__.e(149), __webpack_require__.e(1436), __webpack_require__.e(1520), __webpack_require__.e(2591)]).then(__webpack_require__.bind(__webpack_require__, 71520));
96858
+ const imported = await Promise.all(/* import() */[__webpack_require__.e(3900), __webpack_require__.e(1436), __webpack_require__.e(5630), __webpack_require__.e(4759)]).then(__webpack_require__.bind(__webpack_require__, 55630));
96801
96859
  return imported.default;
96802
96860
  }
96803
96861
  if (module === "@ohif/extension-cornerstone") {
96804
- const imported = await Promise.all(/* import() */[__webpack_require__.e(149), __webpack_require__.e(1436), __webpack_require__.e(3334), __webpack_require__.e(1520), __webpack_require__.e(1185), __webpack_require__.e(4182)]).then(__webpack_require__.bind(__webpack_require__, 11185));
96862
+ const imported = await Promise.all(/* import() */[__webpack_require__.e(3900), __webpack_require__.e(1436), __webpack_require__.e(3334), __webpack_require__.e(5630), __webpack_require__.e(1185), __webpack_require__.e(3326)]).then(__webpack_require__.bind(__webpack_require__, 11185));
96805
96863
  return imported.default;
96806
96864
  }
96807
96865
  if (module === "@ohif/extension-measurement-tracking") {
96808
- const imported = await Promise.all(/* import() */[__webpack_require__.e(149), __webpack_require__.e(1436), __webpack_require__.e(3334), __webpack_require__.e(3970), __webpack_require__.e(5261), __webpack_require__.e(1520), __webpack_require__.e(1185), __webpack_require__.e(5687), __webpack_require__.e(3200)]).then(__webpack_require__.bind(__webpack_require__, 71903));
96866
+ const imported = await Promise.all(/* import() */[__webpack_require__.e(3900), __webpack_require__.e(1436), __webpack_require__.e(3334), __webpack_require__.e(5758), __webpack_require__.e(5261), __webpack_require__.e(5630), __webpack_require__.e(1185), __webpack_require__.e(5687), __webpack_require__.e(3200)]).then(__webpack_require__.bind(__webpack_require__, 71903));
96809
96867
  return imported.default;
96810
96868
  }
96811
96869
  if (module === "@ohif/extension-cornerstone-dicom-sr") {
96812
- const imported = await Promise.all(/* import() */[__webpack_require__.e(149), __webpack_require__.e(1436), __webpack_require__.e(3334), __webpack_require__.e(3970), __webpack_require__.e(1520), __webpack_require__.e(1185), __webpack_require__.e(5687), __webpack_require__.e(1801)]).then(__webpack_require__.bind(__webpack_require__, 85687));
96870
+ const imported = await Promise.all(/* import() */[__webpack_require__.e(3900), __webpack_require__.e(1436), __webpack_require__.e(3334), __webpack_require__.e(5758), __webpack_require__.e(5630), __webpack_require__.e(1185), __webpack_require__.e(5687), __webpack_require__.e(4182)]).then(__webpack_require__.bind(__webpack_require__, 85687));
96813
96871
  return imported.default;
96814
96872
  }
96815
96873
  if (module === "@ohif/extension-cornerstone-dicom-seg") {
96816
- const imported = await Promise.all(/* import() */[__webpack_require__.e(149), __webpack_require__.e(1436), __webpack_require__.e(3970), __webpack_require__.e(1520), __webpack_require__.e(7197)]).then(__webpack_require__.bind(__webpack_require__, 96975));
96874
+ const imported = await Promise.all(/* import() */[__webpack_require__.e(3900), __webpack_require__.e(1436), __webpack_require__.e(5758), __webpack_require__.e(5630), __webpack_require__.e(7197)]).then(__webpack_require__.bind(__webpack_require__, 96975));
96817
96875
  return imported.default;
96818
96876
  }
96819
96877
  if (module === "@ohif/extension-cornerstone-dicom-pmap") {
96820
- const imported = await Promise.all(/* import() */[__webpack_require__.e(149), __webpack_require__.e(1436), __webpack_require__.e(3334), __webpack_require__.e(3970), __webpack_require__.e(1520), __webpack_require__.e(1185), __webpack_require__.e(5139)]).then(__webpack_require__.bind(__webpack_require__, 82098));
96878
+ const imported = await Promise.all(/* import() */[__webpack_require__.e(3900), __webpack_require__.e(1436), __webpack_require__.e(3334), __webpack_require__.e(5758), __webpack_require__.e(5630), __webpack_require__.e(1185), __webpack_require__.e(5139)]).then(__webpack_require__.bind(__webpack_require__, 82098));
96821
96879
  return imported.default;
96822
96880
  }
96823
96881
  if (module === "@ohif/extension-cornerstone-dynamic-volume") {
96824
- const imported = await Promise.all(/* import() */[__webpack_require__.e(149), __webpack_require__.e(1436), __webpack_require__.e(3334), __webpack_require__.e(1520), __webpack_require__.e(1185), __webpack_require__.e(717)]).then(__webpack_require__.bind(__webpack_require__, 14696));
96882
+ const imported = await Promise.all(/* import() */[__webpack_require__.e(3900), __webpack_require__.e(1436), __webpack_require__.e(3334), __webpack_require__.e(5630), __webpack_require__.e(1185), __webpack_require__.e(7013)]).then(__webpack_require__.bind(__webpack_require__, 14696));
96825
96883
  return imported.default;
96826
96884
  }
96827
96885
  if (module === "@ohif/extension-dicom-microscopy") {
96828
- const imported = await Promise.all(/* import() */[__webpack_require__.e(149), __webpack_require__.e(1436), __webpack_require__.e(5807), __webpack_require__.e(1520), __webpack_require__.e(5247)]).then(__webpack_require__.bind(__webpack_require__, 22801));
96886
+ const imported = await Promise.all(/* import() */[__webpack_require__.e(3900), __webpack_require__.e(1436), __webpack_require__.e(2343), __webpack_require__.e(5630), __webpack_require__.e(5247)]).then(__webpack_require__.bind(__webpack_require__, 22801));
96829
96887
  return imported.default;
96830
96888
  }
96831
96889
  if (module === "@ohif/extension-dicom-pdf") {
@@ -96837,7 +96895,7 @@ async function loadModule(module) {
96837
96895
  return imported.default;
96838
96896
  }
96839
96897
  if (module === "@ohif/extension-tmtv") {
96840
- const imported = await Promise.all(/* import() */[__webpack_require__.e(149), __webpack_require__.e(1436), __webpack_require__.e(3334), __webpack_require__.e(3970), __webpack_require__.e(1520), __webpack_require__.e(1185), __webpack_require__.e(3198)]).then(__webpack_require__.bind(__webpack_require__, 57289));
96898
+ const imported = await Promise.all(/* import() */[__webpack_require__.e(3900), __webpack_require__.e(1436), __webpack_require__.e(3334), __webpack_require__.e(5758), __webpack_require__.e(5630), __webpack_require__.e(1185), __webpack_require__.e(3198)]).then(__webpack_require__.bind(__webpack_require__, 57289));
96841
96899
  return imported.default;
96842
96900
  }
96843
96901
  if (module === "@ohif/extension-test") {
@@ -96849,7 +96907,7 @@ async function loadModule(module) {
96849
96907
  return imported.default;
96850
96908
  }
96851
96909
  if (module === "@ohif/mode-longitudinal") {
96852
- const imported = await Promise.all(/* import() */[__webpack_require__.e(149), __webpack_require__.e(1436), __webpack_require__.e(3334), __webpack_require__.e(3970), __webpack_require__.e(1520), __webpack_require__.e(1185), __webpack_require__.e(5687), __webpack_require__.e(1266)]).then(__webpack_require__.bind(__webpack_require__, 35589));
96910
+ const imported = await Promise.all(/* import() */[__webpack_require__.e(3900), __webpack_require__.e(1436), __webpack_require__.e(3334), __webpack_require__.e(5758), __webpack_require__.e(5630), __webpack_require__.e(1185), __webpack_require__.e(5687), __webpack_require__.e(1266)]).then(__webpack_require__.bind(__webpack_require__, 35589));
96853
96911
  return imported.default;
96854
96912
  }
96855
96913
  if (module === "@ohif/mode-segmentation") {
@@ -97351,9 +97409,9 @@ function ModeRoute({
97351
97409
  const hangingProtocolIdToUse = hangingProtocolService.getProtocolById(runTimeHangingProtocolId) ? runTimeHangingProtocolId : hangingProtocol;
97352
97410
 
97353
97411
  // Determine the index of the stageId if the hangingProtocolIdToUse is defined
97354
- const stageIndex = hangingProtocolIdToUse ? hangingProtocolService.getStageIndex(hangingProtocolIdToUse, {
97412
+ const stageIndex = Array.isArray(hangingProtocolIdToUse) ? -1 : hangingProtocolService.getStageIndex(hangingProtocolIdToUse, {
97355
97413
  stageId: runTimeStageId || undefined
97356
- }) : -1;
97414
+ });
97357
97415
  // Ensure that the stage index is never negative
97358
97416
  // If stageIndex is negative (e.g., if stage wasn't found), use 0 as the default
97359
97417
  const stageIndexToUse = Math.max(0, stageIndex);
@@ -102096,7 +102154,7 @@ function _getImageOrientationPatient(image) {
102096
102154
 
102097
102155
  /***/ }),
102098
102156
 
102099
- /***/ 29463:
102157
+ /***/ 80818:
102100
102158
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
102101
102159
 
102102
102160
  "use strict";
@@ -105525,8 +105583,8 @@ class ProtocolEngine {
105525
105583
  return this.matchedProtocols.get(highestScoringProtocolId);
105526
105584
  }
105527
105585
  }
105528
- // EXTERNAL MODULE: ../../core/src/utils/index.ts + 29 modules
105529
- var utils = __webpack_require__(37415);
105586
+ // EXTERNAL MODULE: ../../core/src/utils/index.ts + 28 modules
105587
+ var utils = __webpack_require__(5971);
105530
105588
  ;// CONCATENATED MODULE: ../../core/src/services/HangingProtocolService/custom-attribute/isDisplaySetFromUrl.ts
105531
105589
 
105532
105590
 
@@ -107353,7 +107411,7 @@ class CustomizationService extends pubSubServiceInterface/* PubSubService */.R {
107353
107411
  return customization;
107354
107412
  }
107355
107413
  const parent = this.getCustomization(customizationType);
107356
- const result = parent ? Object.assign(Object.create(parent), customization) : customization;
107414
+ const result = parent ? Object.assign({}, parent, customization) : customization;
107357
107415
  // Execute an nested type information
107358
107416
  return result.transform?.(this) || result;
107359
107417
  }
@@ -108484,7 +108542,7 @@ class StudyPrefetcherService extends pubSubServiceInterface/* PubSubService */.R
108484
108542
  this._displaySetLoadingStates.clear();
108485
108543
  this._imageIdsToDisplaySetsMap.clear();
108486
108544
  this._inflightRequests.clear();
108487
- this.imageLoadPoolManager.clearRequestStack(IMAGE_REQUEST_TYPE);
108545
+ this.imageLoadPoolManager.clearRequestStack(this.requestType);
108488
108546
  this._broadcastEvent(this.EVENTS.SERVICE_STOPPED, {});
108489
108547
  }
108490
108548
 
@@ -109726,7 +109784,16 @@ function _getPaletteColor(paletteColorLookupTableData, lutDescriptor) {
109726
109784
  }
109727
109785
  // EXTERNAL MODULE: ../../core/src/utils/toNumber.js
109728
109786
  var toNumber = __webpack_require__(37827);
109787
+ // EXTERNAL MODULE: ../../../node_modules/gl-matrix/esm/index.js + 1 modules
109788
+ var esm = __webpack_require__(3823);
109789
+ ;// CONCATENATED MODULE: ../../core/src/utils/dicomSplit.ts
109790
+ function dicomSplit(value) {
109791
+ return Array.isArray(value) && value || typeof value === 'string' && value.split('\\') || value;
109792
+ }
109729
109793
  ;// CONCATENATED MODULE: ../../core/src/utils/combineFrameInstance.ts
109794
+
109795
+
109796
+
109730
109797
  /**
109731
109798
  * Combine the Per instance frame data, the shared frame data
109732
109799
  * and the root data objects.
@@ -109741,43 +109808,96 @@ const combineFrameInstance = (frame, instance) => {
109741
109808
  const {
109742
109809
  PerFrameFunctionalGroupsSequence,
109743
109810
  SharedFunctionalGroupsSequence,
109744
- NumberOfFrames
109811
+ NumberOfFrames,
109812
+ ImageType
109745
109813
  } = instance;
109814
+ instance.ImageType = dicomSplit(ImageType);
109746
109815
  if (PerFrameFunctionalGroupsSequence || NumberOfFrames > 1) {
109747
109816
  const frameNumber = Number.parseInt(frame || 1);
109748
- const shared = (SharedFunctionalGroupsSequence ? Object.values(SharedFunctionalGroupsSequence[0]) : []).filter(it => !!it).map(it => it[0]).filter(it => it !== undefined && typeof it === 'object');
109749
- const perFrame = (PerFrameFunctionalGroupsSequence ? Object.values(PerFrameFunctionalGroupsSequence[frameNumber - 1]) : []).filter(it => !!it).map(it => it[0]).filter(it => it !== undefined && typeof it === 'object');
109750
109817
 
109751
109818
  // this is to fix NM multiframe datasets with position and orientation
109752
109819
  // information inside DetectorInformationSequence
109753
109820
  if (!instance.ImageOrientationPatient && instance.DetectorInformationSequence) {
109754
109821
  instance.ImageOrientationPatient = instance.DetectorInformationSequence[0].ImageOrientationPatient;
109755
109822
  }
109823
+ let ImagePositionPatientToUse = instance.ImagePositionPatient;
109756
109824
  if (!instance.ImagePositionPatient && instance.DetectorInformationSequence) {
109757
- instance.ImagePositionPatient = instance.DetectorInformationSequence[0].ImagePositionPatient;
109825
+ let imagePositionPatient = instance.DetectorInformationSequence[0].ImagePositionPatient;
109826
+ let imageOrientationPatient = instance.ImageOrientationPatient;
109827
+ imagePositionPatient = imagePositionPatient.map(it => Number(it));
109828
+ imageOrientationPatient = imageOrientationPatient.map(it => Number(it));
109829
+ const SpacingBetweenSlices = Number(instance.SpacingBetweenSlices);
109830
+
109831
+ // Calculate the position for the current frame
109832
+ if (imageOrientationPatient && SpacingBetweenSlices) {
109833
+ const rowOrientation = esm/* vec3.fromValues */.eR.fromValues(imageOrientationPatient[0], imageOrientationPatient[1], imageOrientationPatient[2]);
109834
+ const colOrientation = esm/* vec3.fromValues */.eR.fromValues(imageOrientationPatient[3], imageOrientationPatient[4], imageOrientationPatient[5]);
109835
+ const normalVector = esm/* vec3.cross */.eR.cross(esm/* vec3.create */.eR.create(), rowOrientation, colOrientation);
109836
+ const position = esm/* vec3.scaleAndAdd */.eR.scaleAndAdd(esm/* vec3.create */.eR.create(), imagePositionPatient, normalVector, SpacingBetweenSlices * (frameNumber - 1));
109837
+ ImagePositionPatientToUse = [position[0], position[1], position[2]];
109838
+ }
109758
109839
  }
109759
- const newInstance = Object.assign(instance, {
109760
- frameNumber: frameNumber
109761
- });
109762
109840
 
109763
- // merge the shared first then the per frame to override
109764
- [...shared, ...perFrame].forEach(item => {
109765
- Object.entries(item).forEach(([key, value]) => {
109766
- newInstance[key] = value;
109841
+ // Cache the _parentInstance at the top level as a full copy to prevent
109842
+ // setting values hard.
109843
+ if (!instance._parentInstance) {
109844
+ Object.defineProperty(instance, '_parentInstance', {
109845
+ value: {
109846
+ ...instance
109847
+ }
109767
109848
  });
109849
+ }
109850
+ const sharedInstance = createCombinedValue(instance._parentInstance, SharedFunctionalGroupsSequence?.[0], '_shared');
109851
+ const newInstance = createCombinedValue(sharedInstance, PerFrameFunctionalGroupsSequence?.[frameNumber - 1], frameNumber);
109852
+ newInstance.ImagePositionPatient = ImagePositionPatientToUse ?? newInstance.ImagePositionPatient ?? [0, 0, frameNumber];
109853
+ Object.defineProperty(newInstance, 'frameNumber', {
109854
+ value: frameNumber,
109855
+ writable: true,
109856
+ enumerable: true,
109857
+ configurable: true
109768
109858
  });
109769
-
109770
- // Todo: we should cache this combined instance somewhere, maybe add it
109771
- // back to the dicomMetaStore so we don't have to do this again.
109772
- return {
109773
- ...newInstance,
109774
- ImagePositionPatient: newInstance.ImagePositionPatient ?? [0, 0, frameNumber]
109775
- };
109859
+ return newInstance;
109776
109860
  } else {
109777
109861
  return instance;
109778
109862
  }
109779
109863
  };
109864
+
109865
+ /**
109866
+ * Creates a combined instance stored in the parent object which
109867
+ * inherits from the parent instance the attributes in the functional groups.
109868
+ * The storage key in the parent is in key
109869
+ */
109870
+ function createCombinedValue(parent, functionalGroups, key) {
109871
+ if (parent[key]) {
109872
+ return parent[key];
109873
+ }
109874
+ // Exclude any proxying values
109875
+ const newInstance = Object.create(parent);
109876
+ Object.defineProperty(parent, key, {
109877
+ value: newInstance,
109878
+ writable: false,
109879
+ enumerable: false
109880
+ });
109881
+ if (!functionalGroups) {
109882
+ return newInstance;
109883
+ }
109884
+ const shared = functionalGroups ? Object.values(functionalGroups).filter(Boolean).map(it => it[0]).filter(it => typeof it === 'object') : [];
109885
+
109886
+ // merge the shared first then the per frame to override
109887
+ [...shared].forEach(item => {
109888
+ if (item.SOPInstanceUID) {
109889
+ // This sub-item is a previous value information item, so don't merge it
109890
+ return;
109891
+ }
109892
+ Object.entries(item).forEach(([key, value]) => {
109893
+ newInstance[key] = value;
109894
+ });
109895
+ });
109896
+ return newInstance;
109897
+ }
109780
109898
  /* harmony default export */ const utils_combineFrameInstance = (combineFrameInstance);
109899
+ // EXTERNAL MODULE: ../../core/src/utils/formatPN.js
109900
+ var formatPN = __webpack_require__(27766);
109781
109901
  ;// CONCATENATED MODULE: ../../core/src/classes/MetadataProvider.ts
109782
109902
 
109783
109903
 
@@ -109787,23 +109907,25 @@ const combineFrameInstance = (frame, instance) => {
109787
109907
 
109788
109908
 
109789
109909
 
109910
+
109790
109911
  class MetadataProvider {
109791
109912
  constructor() {
109792
- this.studies = new Map();
109793
109913
  this.imageURIToUIDs = new Map();
109794
- this.imageUIDsByImageId = new Map();
109795
109914
  // Can be used to store custom metadata for a specific type.
109796
109915
  // For instance, the scaling metadata for PET can be stored here
109797
109916
  // as type "scalingModule"
109798
109917
  this.customMetadata = new Map();
109799
109918
  }
109800
109919
  addImageIdToUIDs(imageId, uids) {
109920
+ if (!imageId) {
109921
+ throw new Error('MetadataProvider::Empty imageId');
109922
+ }
109923
+
109801
109924
  // This method is a fallback for when you don't have WADO-URI or WADO-RS.
109802
109925
  // You can add instances fetched by any method by calling addInstance, and hook an imageId to point at it here.
109803
109926
  // An example would be dicom hosted at some random site.
109804
109927
  const imageURI = (0,utils/* imageIdToURI */.YF)(imageId);
109805
109928
  this.imageURIToUIDs.set(imageURI, uids);
109806
- this.imageUIDsByImageId.set(imageId, uids);
109807
109929
  }
109808
109930
  addCustomMetadata(imageId, type, metadata) {
109809
109931
  const imageURI = (0,utils/* imageIdToURI */.YF)(imageId);
@@ -109813,6 +109935,9 @@ class MetadataProvider {
109813
109935
  this.customMetadata.get(type)[imageURI] = metadata;
109814
109936
  }
109815
109937
  _getInstance(imageId) {
109938
+ if (!imageId) {
109939
+ throw new Error('MetadataProvider::Empty imageId');
109940
+ }
109816
109941
  const uids = this.getUIDsFromImageID(imageId);
109817
109942
  if (!uids) {
109818
109943
  return;
@@ -110079,7 +110204,7 @@ class MetadataProvider {
110079
110204
  } = instance;
110080
110205
  let patientName;
110081
110206
  if (PatientName) {
110082
- patientName = PatientName.Alphabetic;
110207
+ patientName = (0,formatPN/* default */.A)(PatientName);
110083
110208
  }
110084
110209
  metadata = {
110085
110210
  patientName,
@@ -110184,21 +110309,6 @@ class MetadataProvider {
110184
110309
  return;
110185
110310
  }
110186
110311
  getUIDsFromImageID(imageId) {
110187
- if (!imageId) {
110188
- throw new Error('MetadataProvider::Empty imageId');
110189
- }
110190
- // TODO: adding csiv here is not really correct. Probably need to use
110191
- // metadataProvider.addImageIdToUIDs(imageId, {
110192
- // StudyInstanceUID,
110193
- // SeriesInstanceUID,
110194
- // SOPInstanceUID,
110195
- // })
110196
- // somewhere else
110197
-
110198
- const cachedUIDs = this.imageUIDsByImageId.get(imageId);
110199
- if (cachedUIDs) {
110200
- return cachedUIDs;
110201
- }
110202
110312
  if (imageId.startsWith('wadors:')) {
110203
110313
  const strippedImageId = imageId.split('/studies/')[1];
110204
110314
  const splitImageId = strippedImageId.split('/');
@@ -110946,7 +111056,7 @@ function useToolbar({
110946
111056
 
110947
111057
  // Effect to handle active viewportId change event
110948
111058
  (0,react.useEffect)(() => {
110949
- const events = [viewportGridService.EVENTS.ACTIVE_VIEWPORT_ID_CHANGED, viewportGridService.EVENTS.VIEWPORTS_READY];
111059
+ const events = [viewportGridService.EVENTS.ACTIVE_VIEWPORT_ID_CHANGED, viewportGridService.EVENTS.VIEWPORTS_READY, viewportGridService.EVENTS.LAYOUT_CHANGED];
110950
111060
  const subscriptions = events.map(event => {
110951
111061
  return viewportGridService.subscribe(event, ({
110952
111062
  viewportId
@@ -111653,6 +111763,38 @@ class PubSubService {
111653
111763
 
111654
111764
  /***/ }),
111655
111765
 
111766
+ /***/ 27766:
111767
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
111768
+
111769
+ "use strict";
111770
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
111771
+ /* harmony export */ A: () => (/* binding */ formatPN)
111772
+ /* harmony export */ });
111773
+ /**
111774
+ * Formats a patient name for display purposes
111775
+ */
111776
+ function formatPN(name) {
111777
+ if (!name) {
111778
+ return;
111779
+ }
111780
+ let nameToUse = name.Alphabetic ?? name;
111781
+ if (typeof nameToUse === 'object') {
111782
+ nameToUse = '';
111783
+ }
111784
+
111785
+ // Convert the first ^ to a ', '. String.replace() only affects
111786
+ // the first appearance of the character.
111787
+ const commaBetweenFirstAndLast = nameToUse.replace('^', ', ');
111788
+
111789
+ // Replace any remaining '^' characters with spaces
111790
+ const cleaned = commaBetweenFirstAndLast.replace(/\^/g, ' ');
111791
+
111792
+ // Trim any extraneous whitespace
111793
+ return cleaned.trim();
111794
+ }
111795
+
111796
+ /***/ }),
111797
+
111656
111798
  /***/ 27054:
111657
111799
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
111658
111800
 
@@ -111675,7 +111817,7 @@ const guid = () => {
111675
111817
 
111676
111818
  /***/ }),
111677
111819
 
111678
- /***/ 37415:
111820
+ /***/ 5971:
111679
111821
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
111680
111822
 
111681
111823
  "use strict";
@@ -112295,29 +112437,8 @@ var i18next = __webpack_require__(40680);
112295
112437
  function formatTime(time, format = 'HH:mm:ss') {
112296
112438
  return moment_default()(time, 'HH:mm:ss').format(format);
112297
112439
  }
112298
- ;// CONCATENATED MODULE: ../../core/src/utils/formatPN.js
112299
- /**
112300
- * Formats a patient name for display purposes
112301
- */
112302
- function formatPN(name) {
112303
- if (!name) {
112304
- return;
112305
- }
112306
- let nameToUse = name.Alphabetic ?? name;
112307
- if (typeof nameToUse === 'object') {
112308
- nameToUse = '';
112309
- }
112310
-
112311
- // Convert the first ^ to a ', '. String.replace() only affects
112312
- // the first appearance of the character.
112313
- const commaBetweenFirstAndLast = nameToUse.replace('^', ', ');
112314
-
112315
- // Replace any remaining '^' characters with spaces
112316
- const cleaned = commaBetweenFirstAndLast.replace(/\^/g, ' ');
112317
-
112318
- // Trim any extraneous whitespace
112319
- return cleaned.trim();
112320
- }
112440
+ // EXTERNAL MODULE: ../../core/src/utils/formatPN.js
112441
+ var formatPN = __webpack_require__(27766);
112321
112442
  ;// CONCATENATED MODULE: ../../core/src/utils/generateAcceptHeader.ts
112322
112443
  const generateAcceptHeader = (configAcceptHeader = [], requestTransferSyntaxUID = '*',
112323
112444
  //default to accept all transfer syntax
@@ -113097,6 +113218,7 @@ function roundNumber(value, precision = 2) {
113097
113218
  var DicomMetadataStore = __webpack_require__(60140);
113098
113219
  ;// CONCATENATED MODULE: ../../core/src/utils/downloadCSVReport.js
113099
113220
 
113221
+
113100
113222
  function downloadCSVReport(measurementData) {
113101
113223
  if (measurementData.length === 0) {
113102
113224
  // Prevent download of report with no measurements.
@@ -113173,7 +113295,7 @@ function _getCommonRowItems(measurement, seriesMetadata) {
113173
113295
  return {
113174
113296
  'Patient ID': firstInstance.PatientID,
113175
113297
  // Patient ID
113176
- 'Patient Name': firstInstance.PatientName?.Alphabetic || '',
113298
+ 'Patient Name': (0,formatPN/* default */.A)(firstInstance.PatientName) || '',
113177
113299
  // Patient Name
113178
113300
  StudyInstanceUID: measurement.referenceStudyUID,
113179
113301
  // StudyInstanceUID
@@ -113425,7 +113547,7 @@ const utils = {
113425
113547
  writeScript: writeScript,
113426
113548
  formatDate: formatDate,
113427
113549
  formatTime: formatTime,
113428
- formatPN: formatPN,
113550
+ formatPN: formatPN/* default */.A,
113429
113551
  b64toBlob: utils_b64toBlob,
113430
113552
  urlUtil: utils_urlUtil,
113431
113553
  imageIdToURI: imageIdToURI,
@@ -115012,7 +115134,7 @@ const detectionOptions = {
115012
115134
  }
115013
115135
  });
115014
115136
  ;// CONCATENATED MODULE: ../../i18n/package.json
115015
- const package_namespaceObject = {"rE":"3.9.0"};
115137
+ const package_namespaceObject = {"rE":"3.9.2"};
115016
115138
  ;// CONCATENATED MODULE: ../../i18n/src/utils.js
115017
115139
  const languagesMap = {
115018
115140
  ar: 'Arabic',
@@ -239571,13 +239693,6 @@ SidePanel.propTypes = {
239571
239693
  side: prop_types_default().oneOf(['left', 'right']).isRequired,
239572
239694
  className: (prop_types_default()).string,
239573
239695
  activeTabIndex: (prop_types_default()).number,
239574
- tabs: prop_types_default().oneOfType([prop_types_default().arrayOf(prop_types_default().shape({
239575
- iconName: (prop_types_default()).string.isRequired,
239576
- iconLabel: (prop_types_default()).string.isRequired,
239577
- name: (prop_types_default()).string.isRequired,
239578
- label: (prop_types_default()).string.isRequired,
239579
- content: (prop_types_default()).func // TODO: Should be node, but it keeps complaining?
239580
- }))]),
239581
239696
  onOpen: (prop_types_default()).func,
239582
239697
  onClose: (prop_types_default()).func,
239583
239698
  onActiveTabIndexChange: (prop_types_default()).func,
@@ -241700,8 +241815,8 @@ function ToolboxUI(props) {
241700
241815
  }, render())) : render());
241701
241816
  }
241702
241817
 
241703
- // EXTERNAL MODULE: ../../core/src/index.ts + 71 modules
241704
- var core_src = __webpack_require__(29463);
241818
+ // EXTERNAL MODULE: ../../core/src/index.ts + 72 modules
241819
+ var core_src = __webpack_require__(80818);
241705
241820
  ;// CONCATENATED MODULE: ../../ui-next/src/components/Toolbox/Toolbox.tsx
241706
241821
  function Toolbox_extends() { return Toolbox_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; }, Toolbox_extends.apply(null, arguments); }
241707
241822
 
@@ -242197,9 +242312,7 @@ const DataRow = ({
242197
242312
  return /*#__PURE__*/react.createElement("div", {
242198
242313
  key: cleanText,
242199
242314
  className: "whitespace-pre-wrap"
242200
- }, indentation, cleanText.includes(':') ? /*#__PURE__*/react.createElement(react.Fragment, null, /*#__PURE__*/react.createElement("span", {
242201
- className: "font-medium"
242202
- }, cleanText.split(':')[0], ":"), cleanText.split(':')[1]) : /*#__PURE__*/react.createElement("span", {
242315
+ }, indentation, /*#__PURE__*/react.createElement("span", {
242203
242316
  className: "font-medium"
242204
242317
  }, cleanText));
242205
242318
  };
@@ -242307,11 +242420,13 @@ const DataRow = ({
242307
242420
  className: "text-foreground"
242308
242421
  }), /*#__PURE__*/react.createElement("span", {
242309
242422
  className: "pl-2"
242310
- }, isLocked ? 'Unlock' : 'Lock')))))), details && details.primary?.length > 0 && /*#__PURE__*/react.createElement("div", {
242423
+ }, isLocked ? 'Unlock' : 'Lock')))))), details && (details.primary?.length > 0 || details.secondary?.length > 0) && /*#__PURE__*/react.createElement("div", {
242311
242424
  className: "ml-7 px-2 py-2"
242312
242425
  }, /*#__PURE__*/react.createElement("div", {
242313
- className: "text-secondary-foreground text-base leading-normal"
242314
- }, renderDetails(details.primary))));
242426
+ className: "text-secondary-foreground flex items-center gap-1 text-base leading-normal"
242427
+ }, details.primary?.length > 0 && renderDetails(details.primary), details.secondary?.length > 0 && /*#__PURE__*/react.createElement("div", {
242428
+ className: "text-muted-foreground ml-auto text-sm"
242429
+ }, renderDetails(details.secondary)))));
242315
242430
  };
242316
242431
  /* harmony default export */ const DataRow_DataRow = (DataRow);
242317
242432
  ;// CONCATENATED MODULE: ../../ui-next/src/components/DataRow/index.ts
@@ -242497,7 +242612,7 @@ const SegmentationSegments = ({
242497
242612
  return null;
242498
242613
  }
242499
242614
  const segmentCount = Object.keys(representationToUse.segments).length;
242500
- const height = mode === 'collapsed' ? 'h-[600px]' : `h-[${segmentCount * 200}px]`;
242615
+ const height = mode === 'collapsed' ? 'h-[900px]' : `h-[${segmentCount * 200}px]`;
242501
242616
  return /*#__PURE__*/react.createElement(ScrollArea_ScrollArea, {
242502
242617
  className: `ohif-scrollbar invisible-scrollbar bg-bkg-low space-y-px ${height}`,
242503
242618
  showArrows: true
@@ -243248,24 +243363,24 @@ Stack: ${error.stack}
243248
243363
  }, /*#__PURE__*/react.createElement(Dialog_DialogContent, {
243249
243364
  className: "border-input h-[50vh] w-[90vw] border-2 sm:max-w-[900px]"
243250
243365
  }, /*#__PURE__*/react.createElement(DialogHeader, null, /*#__PURE__*/react.createElement(Dialog_DialogTitle, {
243251
- className: "text-xl"
243252
- }, title), /*#__PURE__*/react.createElement(Dialog_DialogDescription, {
243253
- className: "text-lg"
243254
- }, subtitle)), /*#__PURE__*/react.createElement(ScrollArea_ScrollArea, {
243255
- className: "h-[calc(90vh-120px)]"
243256
- }, /*#__PURE__*/react.createElement("div", {
243257
- className: "space-y-4 pr-4 font-mono text-base"
243366
+ className: "text-muted-foreground flex justify-between text-xl"
243258
243367
  }, /*#__PURE__*/react.createElement("div", {
243259
- className: "flex justify-end"
243260
- }, /*#__PURE__*/react.createElement("button", {
243368
+ className: "flex items-center"
243369
+ }, title), /*#__PURE__*/react.createElement("button", {
243261
243370
  onClick: () => {
243262
243371
  copyErrorDetails();
243263
243372
  setShowDetails(false);
243264
243373
  },
243265
- className: "text-aqua-pale hover:text-aqua-pale/80 flex items-center gap-2 rounded bg-gray-800 px-4 py-2"
243374
+ className: "text-aqua-pale hover:text-aqua-pale/80 flex items-center gap-2 rounded bg-gray-800 px-4 py-2 font-light"
243266
243375
  }, /*#__PURE__*/react.createElement(Icons.Code, {
243267
243376
  className: "h-4 w-4"
243268
- }), t('Copy Details'))), /*#__PURE__*/react.createElement("div", {
243377
+ }), t('Copy Details'))), /*#__PURE__*/react.createElement(Dialog_DialogDescription, {
243378
+ className: "text-lg"
243379
+ }, subtitle)), /*#__PURE__*/react.createElement(ScrollArea_ScrollArea, {
243380
+ className: "h-[100%]"
243381
+ }, /*#__PURE__*/react.createElement("div", {
243382
+ className: "space-y-4 pr-4 font-mono text-base"
243383
+ }, /*#__PURE__*/react.createElement("div", {
243269
243384
  className: "space-y-4"
243270
243385
  }, /*#__PURE__*/react.createElement("p", {
243271
243386
  className: "text-aqua-pale break-words text-lg"
@@ -252322,8 +252437,8 @@ ViewportDialogProvider.propTypes = {
252322
252437
  // EXTERNAL MODULE: ../../../node_modules/lodash.merge/index.js
252323
252438
  var lodash_merge = __webpack_require__(2816);
252324
252439
  var lodash_merge_default = /*#__PURE__*/__webpack_require__.n(lodash_merge);
252325
- // EXTERNAL MODULE: ../../core/src/index.ts + 71 modules
252326
- var src = __webpack_require__(29463);
252440
+ // EXTERNAL MODULE: ../../core/src/index.ts + 72 modules
252441
+ var src = __webpack_require__(80818);
252327
252442
  ;// CONCATENATED MODULE: ../../ui/src/utils/viewportLabels.ts
252328
252443
  const viewportLabels = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'];
252329
252444
  /* harmony default export */ const utils_viewportLabels = (viewportLabels);
@@ -265572,7 +265687,7 @@ const SidePanel_SidePanel = ({
265572
265687
  position: side === 'left' ? 'right' : 'left',
265573
265688
  key: index,
265574
265689
  content: getToolTipContent(childComponent.label, childComponent.disabled),
265575
- className: classnames_default()('flex items-center', side === 'left' ? 'justify-end ' : 'justify-start ')
265690
+ className: classnames_default()('flex items-center', side === 'left' ? 'justify-end' : 'justify-start')
265576
265691
  }, /*#__PURE__*/react.createElement("div", {
265577
265692
  id: `${childComponent.name}-btn`,
265578
265693
  "data-cy": `${childComponent.name}-btn`,
@@ -265610,7 +265725,7 @@ const SidePanel_SidePanel = ({
265610
265725
  const getTabGridComponent = () => {
265611
265726
  const numCols = getNumGridColumns(tabs.length, gridWidth);
265612
265727
  return /*#__PURE__*/react.createElement("div", {
265613
- className: classnames_default()('flex grow ', side === 'right' ? 'justify-start' : 'justify-end')
265728
+ className: classnames_default()('flex grow', side === 'right' ? 'justify-start' : 'justify-end')
265614
265729
  }, /*#__PURE__*/react.createElement("div", {
265615
265730
  className: classnames_default()('bg-primary-dark text-primary-active flex flex-wrap'),
265616
265731
  style: getGridStyle(side, tabs.length, gridWidth, expandedWidth)
@@ -265649,7 +265764,7 @@ const SidePanel_SidePanel = ({
265649
265764
  };
265650
265765
  const getOneTabComponent = () => {
265651
265766
  return /*#__PURE__*/react.createElement("div", {
265652
- className: classnames_default()('text-primary-active flex grow cursor-pointer select-none justify-center self-center text-[13px]'),
265767
+ className: classnames_default()('text-primary-active flex grow cursor-pointer select-none justify-center self-center text-[13px]'),
265653
265768
  style: {
265654
265769
  ...(side === 'left' ? {
265655
265770
  marginLeft: `${closeIconWidth}px`
@@ -265663,7 +265778,7 @@ const SidePanel_SidePanel = ({
265663
265778
  };
265664
265779
  const getOpenStateComponent = () => {
265665
265780
  return /*#__PURE__*/react.createElement("div", {
265666
- className: "bg-primary-dark flex select-none rounded-t pt-1.5 pb-[2px]\t"
265781
+ className: "bg-primary-dark flex select-none rounded-t pt-1.5 pb-[2px]"
265667
265782
  }, getCloseIcon(), tabs.length === 1 ? getOneTabComponent() : getTabGridComponent());
265668
265783
  };
265669
265784
  return /*#__PURE__*/react.createElement("div", {
@@ -277239,7 +277354,7 @@ function usePatientInfo(servicesManager) {
277239
277354
  }
277240
277355
  setPatientInfo({
277241
277356
  PatientID: instance.PatientID || null,
277242
- PatientName: instance.PatientName ? formatPN(instance.PatientName.Alphabetic) : null,
277357
+ PatientName: instance.PatientName ? formatPN(instance.PatientName) : null,
277243
277358
  PatientSex: instance.PatientSex || null,
277244
277359
  PatientDOB: formatDate(instance.PatientBirthDate) || null
277245
277360
  });
@@ -421567,7 +421682,7 @@ function __disposeResources(env) {
421567
421682
  /******/ // This function allow to reference async chunks
421568
421683
  /******/ __webpack_require__.u = (chunkId) => {
421569
421684
  /******/ // return url for filenames based on template
421570
- /******/ return "" + ({"572":"polySeg","3054":"histogram-worker","3584":"suv-peak-worker"}[chunkId] || chunkId) + ".bundle." + {"149":"ce5596fc563276036744","213":"e663335fb0884edde6d8","572":"b79ae514989e86301c71","717":"0f32b7b57347b5141248","1185":"023fe7179faaa50019d3","1266":"e9abd5c45b5236544151","1374":"019bbc010eeb66109e8b","1436":"773756cd51b69e887bac","1520":"97dbd9bfa83148e5334d","1801":"c552846463998fdc9ad4","1927":"49539e3ab5b0aad1399c","2424":"b7da298db43541d3a7c0","2591":"e1bbdc34a55bee082ff2","2701":"8c1ff2e0faaa7d2f4716","2825":"b04c941a87fd580deb6d","3054":"f0e060cf2637a2ca94b7","3121":"d3e7092e305cf6cecdb5","3198":"c82b7424070ffd02faf1","3200":"a12825fb5aec200d33e2","3334":"0e6ba24024018199ab66","3584":"31c3b3b957204af93b7e","3970":"31942cc0c12a008e7ba0","4182":"ec850ce1f74b1f6fe559","4202":"5c8120ed4841da0af211","4834":"aad44c2628cdefb7a4dd","5139":"367a6827071448e2923d","5247":"6dc2a50f21821b2ffdf5","5261":"74682659cce85f3ae592","5687":"5731ec23dd9eb43a083e","5807":"dac5ce36534a71c77723","6939":"9b79da82315a25f37d96","7159":"9f4856182f1eda29c59d","7197":"c28453cdb392072d8bf8","7955":"6a255705b1ef5906f4a8","8008":"5bf7b274246be10e2f05","8228":"55ac03d7165248f47d4e","8259":"623c29b26b170a8a085b","8295":"4ecb27f9e58526f12bcb","8558":"01d05fd73da5db8e60f9","9551":"6c260a9869e14dcc3543","9611":"767595c93877e5166c03","9862":"7146682e56aa66130ae6"}[chunkId] + ".js";
421685
+ /******/ return "" + ({"572":"polySeg","3054":"histogram-worker","3584":"suv-peak-worker"}[chunkId] || chunkId) + ".bundle." + {"213":"c0c23f7fd4b66d78d0fe","572":"6e85073e3abf2e6e6078","1185":"9f4c770baf52abcf3c6d","1266":"0097d9c4ba974905a833","1374":"2e1fa65e28731d98969a","1436":"be39664239aa2bbca527","1927":"2b2fa0b539d6ac5b0dc3","2343":"f096450c21417279d4cc","2424":"d73e8d67dc2aace299d2","2701":"c8271fa4986a45fea350","2825":"0612b1b8ab3e8ee01b93","3054":"f0e060cf2637a2ca94b7","3198":"7a18515cfe4113417251","3200":"e46dca03aa824998973a","3326":"d01046d6c2c31654c125","3334":"0e6ba24024018199ab66","3584":"e2e8e46de3e958a1a3db","3900":"0e4e29374e221b260ed1","3902":"8ae7b2e27f760af997dd","4182":"e372664fc1cc7ed6296e","4202":"497702023d73202f4f39","4438":"a945f803d0eeb11d081f","4759":"1e982897292fc19ecd7c","4834":"92ba088cc62a6b791000","5139":"70d3be7dd1896f245d7b","5247":"4e8669e41fd28813e643","5261":"74682659cce85f3ae592","5630":"44d0ca81d77b7ae5193b","5687":"50b800a714486557b243","5758":"cd1599b81bdb1f735f9d","6939":"9b79da82315a25f37d96","7013":"979d3a29f6142e8c1290","7159":"9f4856182f1eda29c59d","7197":"30f8969751309ab5235c","7955":"9264a10437f0a67e6057","8008":"6772a210a995b568f8d0","8228":"2c1e61eec1f9f4b3b613","8259":"9cf9ef151893ede068bb","8558":"9c22f000a404f1006a41","9551":"3507bb1d4353df13bf3a","9611":"9f1aa9041196d77f2b7e","9862":"aa2f8e0010f1be1bc87d"}[chunkId] + ".js";
421571
421686
  /******/ };
421572
421687
  /******/ })();
421573
421688
  /******/
@@ -421739,7 +421854,7 @@ function __disposeResources(env) {
421739
421854
  /******/ };
421740
421855
  /******/
421741
421856
  /******/ __webpack_require__.f.miniCss = (chunkId, promises) => {
421742
- /******/ var cssChunks = {"717":1,"1266":1,"1801":1,"2591":1,"3198":1,"3200":1,"4182":1,"5139":1,"5247":1,"7159":1,"7197":1,"8228":1,"9611":1};
421857
+ /******/ var cssChunks = {"1266":1,"3198":1,"3200":1,"3326":1,"3902":1,"4182":1,"4438":1,"4759":1,"5139":1,"5247":1,"7013":1,"7159":1,"7197":1,"8228":1,"9611":1};
421743
421858
  /******/ if(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);
421744
421859
  /******/ else if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {
421745
421860
  /******/ promises.push(installedCssChunks[chunkId] = loadStylesheet(chunkId).then(() => {
@@ -421754,7 +421869,7 @@ function __disposeResources(env) {
421754
421869
  /******/ // no hmr
421755
421870
  /******/
421756
421871
  /******/ __webpack_require__.F.miniCss = (chunkId) => {
421757
- /******/ if((!__webpack_require__.o(installedCssChunks, chunkId) || installedCssChunks[chunkId] === undefined) && /^(3(198|200|524)|71(59|7|97)|(180|259|961)1|1266|4182|5139|5247|8228)$/.test(chunkId)) {
421872
+ /******/ if((!__webpack_require__.o(installedCssChunks, chunkId) || installedCssChunks[chunkId] === undefined) && /^(3(198|200|326|524|902)|4(182|438|759)|7(013|159|197)|1266|5139|5247|8228|9611)$/.test(chunkId)) {
421758
421873
  /******/ installedCssChunks[chunkId] = null;
421759
421874
  /******/ var link = document.createElement('link');
421760
421875
  /******/
@@ -421795,7 +421910,7 @@ function __disposeResources(env) {
421795
421910
  /******/ if(installedChunkData) {
421796
421911
  /******/ promises.push(installedChunkData[2]);
421797
421912
  /******/ } else {
421798
- /******/ if(!/^(1801|2591|4182)$/.test(chunkId)) {
421913
+ /******/ if(4182 != chunkId) {
421799
421914
  /******/ // setup Promise in chunk cache
421800
421915
  /******/ var promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));
421801
421916
  /******/ promises.push(installedChunkData[2] = promise);
@@ -421826,7 +421941,7 @@ function __disposeResources(env) {
421826
421941
  /******/ };
421827
421942
  /******/
421828
421943
  /******/ __webpack_require__.F.j = (chunkId) => {
421829
- /******/ if((!__webpack_require__.o(installedChunks, chunkId) || installedChunks[chunkId] === undefined) && !/^(1801|2591|4182)$/.test(chunkId)) {
421944
+ /******/ if((!__webpack_require__.o(installedChunks, chunkId) || installedChunks[chunkId] === undefined) && 4182 != chunkId) {
421830
421945
  /******/ installedChunks[chunkId] = null;
421831
421946
  /******/ var link = document.createElement('link');
421832
421947
  /******/
@@ -421891,17 +422006,10 @@ function __disposeResources(env) {
421891
422006
  /******/ "213": [
421892
422007
  /******/ 6939
421893
422008
  /******/ ],
421894
- /******/ "717": [
421895
- /******/ 9611
421896
- /******/ ],
421897
422009
  /******/ "1266": [
421898
422010
  /******/ 9611,
421899
422011
  /******/ 2701
421900
422012
  /******/ ],
421901
- /******/ "1801": [
421902
- /******/ 9611,
421903
- /******/ 2701
421904
- /******/ ],
421905
422013
  /******/ "2424": [
421906
422014
  /******/ 7159
421907
422015
  /******/ ],
@@ -421913,18 +422021,38 @@ function __disposeResources(env) {
421913
422021
  /******/ 2701,
421914
422022
  /******/ 9862
421915
422023
  /******/ ],
422024
+ /******/ "3326": [
422025
+ /******/ 9611
422026
+ /******/ ],
422027
+ /******/ "3902": [
422028
+ /******/ 9611
422029
+ /******/ ],
421916
422030
  /******/ "4182": [
422031
+ /******/ 9611,
422032
+ /******/ 2701
422033
+ /******/ ],
422034
+ /******/ "4438": [
421917
422035
  /******/ 9611
421918
422036
  /******/ ],
421919
422037
  /******/ "5139": [
421920
422038
  /******/ 9611,
421921
422039
  /******/ 4202
421922
422040
  /******/ ],
422041
+ /******/ "7013": [
422042
+ /******/ 9611
422043
+ /******/ ],
421923
422044
  /******/ "7197": [
421924
- /******/ 8295
422045
+ /******/ 3334,
422046
+ /******/ 1185,
422047
+ /******/ 3902
421925
422048
  /******/ ],
421926
422049
  /******/ "8558": [
421927
- /******/ 3121
422050
+ /******/ 3900,
422051
+ /******/ 1436,
422052
+ /******/ 3334,
422053
+ /******/ 5630,
422054
+ /******/ 1185,
422055
+ /******/ 4438
421928
422056
  /******/ ]
421929
422057
  /******/ };
421930
422058
  /******/ __webpack_require__.f.prefetch = (chunkId, promises) => (Promise.all(promises).then(() => {