@ohif/app 3.12.0-beta.114 → 3.12.0-beta.116

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 (41) hide show
  1. package/dist/{2842.bundle.72b8e407027b26a34584.js → 2842.bundle.323078a1185dc9a58ac7.js} +80 -18
  2. package/dist/{5448.bundle.95f9ed97b8ab5ca9e6b0.js → 4410.bundle.09d2d3bfb23511a9a7d4.js} +202 -6
  3. package/dist/{5549.bundle.1a5e24f59873b7a30799.js → 5549.bundle.64c0f91bbed858352e1a.js} +93 -21
  4. package/dist/{7412.bundle.3256f92f3f2d6aa25008.js → 7412.bundle.3c1ced74bcd0c83da9fb.js} +13 -2
  5. package/dist/{7431.bundle.999b2b65d4973bc56218.js → 7431.bundle.d772d0b75ef6dc75acfc.js} +5 -3
  6. package/dist/{9195.bundle.0ebdd4b679ee7967a0e9.js → 9195.bundle.67370bcce2b967affbcb.js} +17 -9
  7. package/dist/{app.bundle.23afbbef42ad1c18e04f.js → app.bundle.41cea80449abee3ded4a.js} +270 -7
  8. package/dist/{compute.bundle.9d2a75c300c39d48be90.js → compute.bundle.85de00d380fec20ac4ac.js} +3 -3
  9. package/dist/index.html +1 -1
  10. package/dist/{polySeg.bundle.1cc6ecabd5fb8ab1d99c.js → polySeg.bundle.87769c9338f2425c7e65.js} +3 -3
  11. package/dist/sw.js +1 -1
  12. package/package.json +21 -21
  13. /package/dist/{1403.bundle.57cb00001011a891c721.js → 1403.bundle.07faca348a17d5196684.js} +0 -0
  14. /package/dist/{1459.bundle.b18c0c265cfdffc50ad4.js → 1459.bundle.f95395ba0842cdb55872.js} +0 -0
  15. /package/dist/{147.bundle.ee7de13189cf1963aea9.js → 147.bundle.85a9ed9fd123f57f23a6.js} +0 -0
  16. /package/dist/{1730.bundle.fd7196fce95a907c02b2.js → 1730.bundle.2d640ae38d6daaf94bad.js} +0 -0
  17. /package/dist/{1933.bundle.c0be85081628cbd5b634.js → 1933.bundle.4aa316f1107dc4fba61d.js} +0 -0
  18. /package/dist/{2018.bundle.868c69572d25f819b8aa.js → 2018.bundle.4b5535def5790b39b4ef.js} +0 -0
  19. /package/dist/{213.bundle.738f3f3bad9747d87251.js → 213.bundle.972f7d138a5ccedd2ebe.js} +0 -0
  20. /package/dist/{2424.bundle.608a0fedf823bc6d318d.js → 2424.bundle.6d521c39961d6534b624.js} +0 -0
  21. /package/dist/{3081.bundle.532a14bbf71da3f4f48c.js → 3081.bundle.0eb28da956e1adc92769.js} +0 -0
  22. /package/dist/{3353.bundle.7d5f628fe7eb8fe738ce.js → 3353.bundle.9d3e114b02d6fbbd927f.js} +0 -0
  23. /package/dist/{3461.bundle.f229ee13ccc18b7de681.js → 3461.bundle.ae61e218788c806786a6.js} +0 -0
  24. /package/dist/{3584.bundle.839a16d349815b3f7c97.js → 3584.bundle.318f292fda0d5e1f54df.js} +0 -0
  25. /package/dist/{4019.bundle.cdb81fb4777792f6175d.js → 4019.bundle.9f338ce1c5ae27f6eab5.js} +0 -0
  26. /package/dist/{4775.bundle.ce3cbcb52f3c118eb042.js → 4775.bundle.61505e4164f4c8fb43bd.js} +0 -0
  27. /package/dist/{4819.bundle.6f0174dea6faae4b10ca.js → 4819.bundle.0d1374b815eab24b5e36.js} +0 -0
  28. /package/dist/{5028.bundle.25f0de3a61ba3a0efcf8.js → 5028.bundle.af3b3976f082fd2ea752.js} +0 -0
  29. /package/dist/{5400.bundle.be4bdac337da734fdcd3.js → 5400.bundle.c1c101c5b66a1667bdfd.js} +0 -0
  30. /package/dist/{5457.bundle.8cbdf4da0e12f88f4010.js → 5457.bundle.ff5bac682c54abd38847.js} +0 -0
  31. /package/dist/{5485.bundle.f96a631f8d341cb15cc3.js → 5485.bundle.ab20c9303bf0ad373a0e.js} +0 -0
  32. /package/dist/{5802.bundle.aef18b250a1927d84108.js → 5802.bundle.aed34ddbad09f03edefe.js} +0 -0
  33. /package/dist/{6027.bundle.e4c090cb74a219798e83.js → 6027.bundle.e3877fc3c30d5034ef45.js} +0 -0
  34. /package/dist/{6163.bundle.ba7bd975bc702d2ea746.js → 6163.bundle.acd5a50004e160b9e1de.js} +0 -0
  35. /package/dist/{7639.bundle.7fdafc277c50936d40aa.js → 7639.bundle.5ac65cc1b14ab07e3393.js} +0 -0
  36. /package/dist/{8305.bundle.abad864a52838a31af66.js → 8305.bundle.b4b3fb49e18e0c1fb920.js} +0 -0
  37. /package/dist/{85.bundle.c05988a8c5ca1c644d91.js → 85.bundle.6a969322aa9a2819a00d.js} +0 -0
  38. /package/dist/{8558.bundle.b83784a541bed16b8b29.js → 8558.bundle.270e7f151717f17853c4.js} +0 -0
  39. /package/dist/{8583.bundle.4d9bfa4b52e5fbf5cff4.js → 8583.bundle.f69048e5ccf36a31d5c1.js} +0 -0
  40. /package/dist/{9862.bundle.2992313d0e19d394e6a5.js → 9862.bundle.2763343cffe86fcafa33.js} +0 -0
  41. /package/dist/{9927.bundle.2aad1abce48144437803.js → 9927.bundle.dc2207f374d1b8cc50db.js} +0 -0
@@ -5168,6 +5168,8 @@ const chartHandler = {
5168
5168
  }
5169
5169
  };
5170
5170
 
5171
+ // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/index.js + 1 modules
5172
+ var dist_esm = __webpack_require__(15327);
5171
5173
  ;// ../../../extensions/default/src/getSopClassHandlerModule.js
5172
5174
 
5173
5175
 
@@ -5175,6 +5177,7 @@ const chartHandler = {
5175
5177
 
5176
5178
 
5177
5179
 
5180
+
5178
5181
  const {
5179
5182
  isImage,
5180
5183
  sortStudyInstances,
@@ -5221,10 +5224,15 @@ function getDisplaySetInfo(instances) {
5221
5224
  if (isDynamicVolume) {
5222
5225
  const timePoint = timePoints[0];
5223
5226
  const instancesMap = new Map();
5224
-
5225
- // O(n) to convert it into a map and O(1) to find each instance
5226
- instances.forEach(instance => instancesMap.set(instance.imageId, instance));
5227
- const firstTimePointInstances = timePoint.map(imageId => instancesMap.get(imageId));
5227
+ let firstTimePointInstances;
5228
+ if (instances[0].NumberOfFrames > 1 && timePoints.length > 1) {
5229
+ // handle multiframe dynamic volume
5230
+ firstTimePointInstances = timePoints[0].map(imageId => dist_esm.metaData.get('instance', imageId));
5231
+ } else {
5232
+ // O(n) to convert it into a map and O(1) to find each instance
5233
+ instances.forEach(instance => instancesMap.set(instance.imageId, instance));
5234
+ firstTimePointInstances = timePoint.map(imageId => instancesMap.get(imageId));
5235
+ }
5228
5236
  displaySetInfo = getSopClassHandlerModule_isDisplaySetReconstructable(firstTimePointInstances, appConfig);
5229
5237
  } else {
5230
5238
  displaySetInfo = getSopClassHandlerModule_isDisplaySetReconstructable(instances, appConfig);
@@ -6077,7 +6085,7 @@ function adaptItem(item, subProps) {
6077
6085
  return newItem;
6078
6086
  }
6079
6087
  // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/tools/dist/esm/index.js
6080
- var dist_esm = __webpack_require__(4667);
6088
+ var tools_dist_esm = __webpack_require__(4667);
6081
6089
  ;// ../../../extensions/default/src/CustomizableContextMenu/ContextMenuController.tsx
6082
6090
  var _ContextMenuController;
6083
6091
 
@@ -6131,7 +6139,7 @@ class ContextMenuController {
6131
6139
  const {
6132
6140
  locking,
6133
6141
  visibility
6134
- } = dist_esm.annotation;
6142
+ } = tools_dist_esm.annotation;
6135
6143
  const targetAnnotationId = selectorProps?.nearbyToolData?.annotationUID;
6136
6144
  if (targetAnnotationId) {
6137
6145
  const isLocked = locking.isAnnotationLocked(targetAnnotationId);
@@ -10408,8 +10416,8 @@ function AboutModalDefault() {
10408
10416
  name
10409
10417
  } = (0,browser_detect_es5/* default */.A)();
10410
10418
  const browser = `${name[0].toUpperCase()}${name.substr(1)} ${version}`;
10411
- const versionNumber = "3.12.0-beta.114";
10412
- const commitHash = "ca364a3af7a29dc98d5c5b8e4c73abebc107c7ce";
10419
+ const versionNumber = "3.12.0-beta.116";
10420
+ const commitHash = "a74648f8ec23c01b91588ff7c6ee1620ca456ed7";
10413
10421
  const [main, beta] = versionNumber.split('-');
10414
10422
  return /*#__PURE__*/react.createElement(ui_next_src/* AboutModal */.VTU, {
10415
10423
  className: "w-[400px]"
@@ -11492,7 +11500,7 @@ async function callInputDialogAutoComplete({
11492
11500
  const labellingDoneCallback = newValue => {
11493
11501
  uiDialogService.hide('select-annotation');
11494
11502
  if (measurement && typeof newValue === 'string') {
11495
- const sourceAnnotation = dist_esm.annotation.state.getAnnotation(measurement.uid);
11503
+ const sourceAnnotation = tools_dist_esm.annotation.state.getAnnotation(measurement.uid);
11496
11504
  (0,utilities.setAnnotationLabel)(sourceAnnotation, element, newValue);
11497
11505
  }
11498
11506
  resolve(newValue);
@@ -5241,6 +5241,7 @@ class BaseVolumeViewport extends Viewport/* default */.A {
5241
5241
  colormap,
5242
5242
  preset,
5243
5243
  slabThickness,
5244
+ sampleDistanceMultiplier,
5244
5245
  });
5245
5246
  }
5246
5247
  if (invert !== undefined && this.viewportProperties.invert !== invert) {
@@ -23485,8 +23486,8 @@ class BaseStreamingImageVolume extends _ImageVolume__WEBPACK_IMPORTED_MODULE_9__
23485
23486
  }
23486
23487
  getLoaderImageOptions(imageId) {
23487
23488
  const { transferSyntaxUID: transferSyntaxUID } = _metaData__WEBPACK_IMPORTED_MODULE_0__.get('transferSyntax', imageId) || {};
23488
- const imagePlaneModule = _metaData__WEBPACK_IMPORTED_MODULE_0__.get('imagePlaneModule', imageId) || {};
23489
- const { rows, columns } = imagePlaneModule;
23489
+ const targetRows = this.dimensions[1];
23490
+ const targetCols = this.dimensions[0];
23490
23491
  const imageIdIndex = this.getImageIdIndex(imageId);
23491
23492
  const modalityLutModule = _metaData__WEBPACK_IMPORTED_MODULE_0__.get('modalityLutModule', imageId) || {};
23492
23493
  const generalSeriesModule = _metaData__WEBPACK_IMPORTED_MODULE_0__.get('generalSeriesModule', imageId) || {};
@@ -23519,8 +23520,8 @@ class BaseStreamingImageVolume extends _ImageVolume__WEBPACK_IMPORTED_MODULE_9__
23519
23520
  }
23520
23521
  const targetBuffer = {
23521
23522
  type: this.dataType,
23522
- rows,
23523
- columns,
23523
+ rows: targetRows,
23524
+ columns: targetCols,
23524
23525
  };
23525
23526
  return {
23526
23527
  targetBuffer,
@@ -28496,6 +28497,7 @@ __webpack_require__.d(__webpack_exports__, {
28496
28497
  createViewportElement: () => (/* reexport */ getOrCreateCanvas/* createViewportElement */.V0),
28497
28498
  createVolumeActor: () => (/* reexport */ createVolumeActor/* default */.A),
28498
28499
  createVolumeMapper: () => (/* reexport */ createVolumeMapper/* default */.A),
28500
+ decimatedVolumeLoader: () => (/* reexport */ decimatedVolumeLoader/* decimatedVolumeLoader */.o),
28499
28501
  eventTarget: () => (/* reexport */ eventTarget/* default */.A),
28500
28502
  geometryLoader: () => (/* reexport */ geometryLoader),
28501
28503
  getConfiguration: () => (/* reexport */ init/* getConfiguration */.D0),
@@ -28780,6 +28782,8 @@ var imageLoader = __webpack_require__(80068);
28780
28782
  var geometryLoader = __webpack_require__(52269);
28781
28783
  // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/loaders/ProgressiveRetrieveImages.js + 4 modules
28782
28784
  var ProgressiveRetrieveImages = __webpack_require__(36822);
28785
+ // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/loaders/decimatedVolumeLoader.js + 3 modules
28786
+ var decimatedVolumeLoader = __webpack_require__(18481);
28783
28787
  // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/utilities/index.js + 46 modules
28784
28788
  var utilities = __webpack_require__(33592);
28785
28789
  // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/utilities/triggerEvent.js
@@ -28829,6 +28833,8 @@ var helpers = __webpack_require__(40661);
28829
28833
 
28830
28834
 
28831
28835
 
28836
+
28837
+
28832
28838
 
28833
28839
 
28834
28840
 
@@ -29912,6 +29918,188 @@ function cornerstoneStreamingImageVolumeLoader(volumeId, options) {
29912
29918
 
29913
29919
 
29914
29920
 
29921
+ /***/ }),
29922
+
29923
+ /***/ 18481:
29924
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
29925
+
29926
+ "use strict";
29927
+
29928
+ // EXPORTS
29929
+ __webpack_require__.d(__webpack_exports__, {
29930
+ o: () => (/* binding */ decimatedVolumeLoader)
29931
+ });
29932
+
29933
+ // UNUSED EXPORTS: default
29934
+
29935
+ // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/cache/classes/StreamingImageVolume.js
29936
+ var StreamingImageVolume = __webpack_require__(50180);
29937
+ // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/utilities/generateVolumePropsFromImageIds.js
29938
+ var generateVolumePropsFromImageIds = __webpack_require__(9734);
29939
+ // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/utilities/decimate.js
29940
+ var decimate = __webpack_require__(63470);
29941
+ // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/utilities/VoxelManager.js
29942
+ var VoxelManager = __webpack_require__(24623);
29943
+ ;// ../../../node_modules/@cornerstonejs/core/dist/esm/loaders/decimatedVolumeModifiers/applyDecimatedVolumeModifiers.js
29944
+ function applyDecimatedVolumeModifiers(baseProps, modifiers, context) {
29945
+ return modifiers.reduce((currentProps, modifier) => modifier.apply(currentProps, context), baseProps);
29946
+ }
29947
+
29948
+ ;// ../../../node_modules/@cornerstonejs/core/dist/esm/loaders/decimatedVolumeModifiers/inPlaneDecimationModifier.js
29949
+ const inPlaneDecimationModifier = {
29950
+ name: 'InPlaneDecimationModifier',
29951
+ apply(volumeProps, context) {
29952
+ const [iDecimation = 1, jDecimation = iDecimation] = context.options.ijkDecimation ?? [];
29953
+ const columnFactor = Math.max(1, Math.floor(iDecimation));
29954
+ const rowFactor = Math.max(1, Math.floor(jDecimation));
29955
+ if (columnFactor === 1 && rowFactor === 1) {
29956
+ return volumeProps;
29957
+ }
29958
+ const [columns, rows] = volumeProps.dimensions;
29959
+ const newColumns = Math.max(1, Math.floor(columns / columnFactor));
29960
+ const newRows = Math.max(1, Math.floor(rows / rowFactor));
29961
+ const newDimensions = [
29962
+ newColumns,
29963
+ newRows,
29964
+ volumeProps.dimensions[2],
29965
+ ];
29966
+ const newSpacing = [
29967
+ volumeProps.spacing[0] * columnFactor,
29968
+ volumeProps.spacing[1] * rowFactor,
29969
+ volumeProps.spacing[2],
29970
+ ];
29971
+ const metadata = {
29972
+ ...volumeProps.metadata,
29973
+ Columns: newColumns,
29974
+ Rows: newRows,
29975
+ PixelSpacing: [newSpacing[1], newSpacing[0]],
29976
+ };
29977
+ return {
29978
+ ...volumeProps,
29979
+ dimensions: newDimensions,
29980
+ spacing: newSpacing,
29981
+ metadata,
29982
+ };
29983
+ },
29984
+ };
29985
+
29986
+ ;// ../../../node_modules/@cornerstonejs/core/dist/esm/loaders/decimatedVolumeModifiers/index.js
29987
+
29988
+
29989
+
29990
+ ;// ../../../node_modules/@cornerstonejs/core/dist/esm/loaders/decimatedVolumeLoader.js
29991
+
29992
+
29993
+
29994
+
29995
+
29996
+ function decimatedVolumeLoader(volumeId, options) {
29997
+ if (!options || !options.imageIds || !options.imageIds.length) {
29998
+ throw new Error('ImageIds must be provided to create a streaming image volume ');
29999
+ }
30000
+ const [iDecimation = 1, jDecimation = iDecimation, kDecimation = 1] = options.ijkDecimation ?? [];
30001
+ const columnDecimation = Math.max(1, Math.floor(iDecimation));
30002
+ const rowDecimation = jDecimation > 1 ? Math.max(1, Math.floor(jDecimation)) : columnDecimation;
30003
+ const kAxisDecimation = Math.max(1, Math.floor(kDecimation));
30004
+ const hasInPlaneDecimation = columnDecimation > 1 || rowDecimation > 1;
30005
+ const modifierOptions = {
30006
+ ijkDecimation: [
30007
+ columnDecimation,
30008
+ rowDecimation,
30009
+ kAxisDecimation,
30010
+ ],
30011
+ };
30012
+ const modifiers = [inPlaneDecimationModifier];
30013
+ function addDecimationToImageId(imageId, factor) {
30014
+ if (factor === 1) {
30015
+ return imageId;
30016
+ }
30017
+ return `${imageId}#decimation=${factor}`;
30018
+ }
30019
+ const expectedDecimatedCount = Math.floor(options.imageIds.length / kAxisDecimation);
30020
+ const isAlreadyDecimated = kAxisDecimation > 1 &&
30021
+ options.imageIds.length <= expectedDecimatedCount + 1;
30022
+ if (kAxisDecimation > 1 && !isAlreadyDecimated) {
30023
+ const decimatedResult = (0,decimate/* default */.A)(options.imageIds, kAxisDecimation);
30024
+ const decimatedImageIds = Array.isArray(decimatedResult) &&
30025
+ decimatedResult.length &&
30026
+ typeof decimatedResult[0] === 'number'
30027
+ ? decimatedResult.map((idx) => options.imageIds[idx])
30028
+ : decimatedResult;
30029
+ options.imageIds = decimatedImageIds;
30030
+ }
30031
+ if (columnDecimation > 1) {
30032
+ options.imageIds = options.imageIds.map((imageId) => addDecimationToImageId(imageId, columnDecimation));
30033
+ }
30034
+ async function getStreamingImageVolume() {
30035
+ const baseVolumeProps = (0,generateVolumePropsFromImageIds/* generateVolumePropsFromImageIds */.D)(options.imageIds, volumeId);
30036
+ const modifierContext = {
30037
+ volumeId,
30038
+ imageIds: options.imageIds,
30039
+ options: modifierOptions,
30040
+ };
30041
+ const volumeProps = applyDecimatedVolumeModifiers(baseVolumeProps, modifiers, modifierContext);
30042
+ const { dimensions, spacing, origin, direction, metadata, imageIds, dataType, numberOfComponents, } = volumeProps;
30043
+ const streamingImageVolume = new StreamingImageVolume/* default */.A({
30044
+ volumeId,
30045
+ metadata,
30046
+ dimensions,
30047
+ spacing,
30048
+ origin,
30049
+ direction,
30050
+ imageIds,
30051
+ dataType,
30052
+ numberOfComponents,
30053
+ }, {
30054
+ imageIds,
30055
+ loadStatus: {
30056
+ loaded: false,
30057
+ loading: false,
30058
+ cancelled: false,
30059
+ cachedFrames: [],
30060
+ callbacks: [],
30061
+ },
30062
+ });
30063
+ if (hasInPlaneDecimation) {
30064
+ const vtkImageData = streamingImageVolume.imageData;
30065
+ if (vtkImageData) {
30066
+ vtkImageData.setDimensions(streamingImageVolume.dimensions);
30067
+ vtkImageData.setSpacing(streamingImageVolume.spacing);
30068
+ vtkImageData.modified();
30069
+ }
30070
+ const newVoxelManager = VoxelManager/* default */.A.createImageVolumeVoxelManager({
30071
+ dimensions: streamingImageVolume.dimensions,
30072
+ imageIds: streamingImageVolume.imageIds,
30073
+ numberOfComponents: numberOfComponents,
30074
+ });
30075
+ streamingImageVolume.voxelManager = newVoxelManager;
30076
+ if (vtkImageData) {
30077
+ vtkImageData.set({
30078
+ voxelManager: newVoxelManager,
30079
+ });
30080
+ }
30081
+ }
30082
+ return streamingImageVolume;
30083
+ }
30084
+ const streamingImageVolumePromise = getStreamingImageVolume();
30085
+ return {
30086
+ promise: streamingImageVolumePromise,
30087
+ decache: () => {
30088
+ streamingImageVolumePromise.then((streamingImageVolume) => {
30089
+ streamingImageVolume.destroy();
30090
+ streamingImageVolume = null;
30091
+ });
30092
+ },
30093
+ cancel: () => {
30094
+ streamingImageVolumePromise.then((streamingImageVolume) => {
30095
+ streamingImageVolume.cancelLoading();
30096
+ });
30097
+ },
30098
+ };
30099
+ }
30100
+ /* harmony default export */ const loaders_decimatedVolumeLoader = ((/* unused pure expression or super */ null && (decimatedVolumeLoader)));
30101
+
30102
+
29915
30103
  /***/ }),
29916
30104
 
29917
30105
  /***/ 52269:
@@ -42209,6 +42397,7 @@ __webpack_require__.d(__webpack_exports__, {
42209
42397
  deepMerge: () => (/* reexport */ deepMerge/* default */.A),
42210
42398
  eventListener: () => (/* reexport */ eventListener_namespaceObject),
42211
42399
  fnv1aHash: () => (/* reexport */ fnv1aHash/* default */.A),
42400
+ generateFrameImageId: () => (/* reexport */ generateFrameImageId),
42212
42401
  generateVolumePropsFromImageIds: () => (/* reexport */ generateVolumePropsFromImageIds/* generateVolumePropsFromImageIds */.D),
42213
42402
  genericMetadataProvider: () => (/* reexport */ genericMetadataProvider/* default */.A),
42214
42403
  getBufferConfiguration: () => (/* reexport */ getBufferConfiguration/* getBufferConfiguration */.h),
@@ -42240,6 +42429,7 @@ __webpack_require__.d(__webpack_exports__, {
42240
42429
  getVolumeSliceRangeInfo: () => (/* reexport */ getVolumeSliceRangeInfo/* default */.A),
42241
42430
  getVolumeViewportScrollInfo: () => (/* reexport */ getVolumeViewportScrollInfo/* default */.A),
42242
42431
  getVolumeViewportsContainingSameVolumes: () => (/* reexport */ utilities_getVolumeViewportsContainingSameVolumes),
42432
+ handleMultiframe4D: () => (/* reexport */ handleMultiframe4D),
42243
42433
  hasFloatScalingParameters: () => (/* reexport */ hasFloatScalingParameters/* hasFloatScalingParameters */.a),
42244
42434
  hasNaNValues: () => (/* reexport */ hasNaNValues/* default */.A),
42245
42435
  imageIdToURI: () => (/* reexport */ imageIdToURI/* default */.A),
@@ -43734,6 +43924,74 @@ function _getViewportModality(viewport, volumeId, getVolume) {
43734
43924
 
43735
43925
  ;// ../../../node_modules/@cornerstonejs/core/dist/esm/utilities/splitImageIdsBy4DTags.js
43736
43926
 
43927
+ function generateFrameImageId(baseImageId, frameNumber) {
43928
+ const framePattern = /\/frames\/\d+/;
43929
+ if (!framePattern.test(baseImageId)) {
43930
+ throw new Error(`generateFrameImageId: baseImageId must contain a "/frames/" pattern followed by a digit. ` +
43931
+ `Expected format: e.g., "wadouri:http://example.com/image/frames/1" or "wadors:/path/to/image.dcm/frames/1". ` +
43932
+ `Received: ${baseImageId}`);
43933
+ }
43934
+ return baseImageId.replace(framePattern, `/frames/${frameNumber}`);
43935
+ }
43936
+ function handleMultiframe4D(imageIds) {
43937
+ if (!imageIds || imageIds.length === 0) {
43938
+ return null;
43939
+ }
43940
+ const baseImageId = imageIds[0];
43941
+ const instance = metaData.get('instance', baseImageId);
43942
+ if (!instance) {
43943
+ return null;
43944
+ }
43945
+ const numberOfFrames = instance.NumberOfFrames;
43946
+ if (!numberOfFrames || numberOfFrames <= 1) {
43947
+ return null;
43948
+ }
43949
+ const timeSlotVector = instance.TimeSlotVector;
43950
+ if (!timeSlotVector || !Array.isArray(timeSlotVector)) {
43951
+ return null;
43952
+ }
43953
+ const sliceVector = instance.SliceVector;
43954
+ const numberOfSlices = instance.NumberOfSlices;
43955
+ if (timeSlotVector.length !== numberOfFrames) {
43956
+ console.warn('TimeSlotVector length does not match NumberOfFrames:', timeSlotVector.length, 'vs', numberOfFrames);
43957
+ return null;
43958
+ }
43959
+ if (sliceVector) {
43960
+ if (!Array.isArray(sliceVector)) {
43961
+ console.warn('SliceVector exists but is not an array. Expected length:', numberOfFrames);
43962
+ return null;
43963
+ }
43964
+ if (sliceVector.length !== numberOfFrames ||
43965
+ sliceVector.some((val) => val === undefined)) {
43966
+ console.warn('SliceVector exists but has invalid length or undefined entries. Expected length:', numberOfFrames, 'Actual length:', sliceVector.length);
43967
+ return null;
43968
+ }
43969
+ }
43970
+ const timeSlotGroups = new Map();
43971
+ for (let frameIndex = 0; frameIndex < numberOfFrames; frameIndex++) {
43972
+ const timeSlot = timeSlotVector[frameIndex];
43973
+ const sliceIndex = sliceVector?.[frameIndex] ?? frameIndex;
43974
+ if (!timeSlotGroups.has(timeSlot)) {
43975
+ timeSlotGroups.set(timeSlot, []);
43976
+ }
43977
+ timeSlotGroups.get(timeSlot).push({ frameIndex, sliceIndex });
43978
+ }
43979
+ const sortedTimeSlots = Array.from(timeSlotGroups.keys()).sort((a, b) => a - b);
43980
+ const imageIdGroups = sortedTimeSlots.map((timeSlot) => {
43981
+ const frames = timeSlotGroups.get(timeSlot);
43982
+ frames.sort((a, b) => a.sliceIndex - b.sliceIndex);
43983
+ return frames.map((frame) => generateFrameImageId(baseImageId, frame.frameIndex + 1));
43984
+ });
43985
+ const expectedSlicesPerTimeSlot = numberOfSlices || imageIdGroups[0]?.length;
43986
+ const allGroupsHaveSameLength = imageIdGroups.every((group) => group.length === expectedSlicesPerTimeSlot);
43987
+ if (!allGroupsHaveSameLength) {
43988
+ console.warn('Multiframe 4D split resulted in uneven time slot groups. Expected', expectedSlicesPerTimeSlot, 'slices per time slot.');
43989
+ }
43990
+ return {
43991
+ imageIdGroups,
43992
+ splittingTag: 'TimeSlotVector',
43993
+ };
43994
+ }
43737
43995
  const groupBy = (array, key) => {
43738
43996
  return array.reduce((rv, x) => {
43739
43997
  (rv[x[key]] = rv[x[key]] || []).push(x);
@@ -43855,6 +44113,10 @@ function getPetFrameReferenceTime(imageId) {
43855
44113
  return moduleInfo ? moduleInfo['frameReferenceTime'] : 0;
43856
44114
  }
43857
44115
  function splitImageIdsBy4DTags(imageIds) {
44116
+ const multiframeResult = handleMultiframe4D(imageIds);
44117
+ if (multiframeResult) {
44118
+ return multiframeResult;
44119
+ }
43858
44120
  const positionGroups = getIPPGroups(imageIds);
43859
44121
  if (!positionGroups) {
43860
44122
  return { imageIdGroups: [imageIds], splittingTag: null };
@@ -43895,6 +44157,7 @@ function splitImageIdsBy4DTags(imageIds) {
43895
44157
  }
43896
44158
  /* harmony default export */ const utilities_splitImageIdsBy4DTags = (splitImageIdsBy4DTags);
43897
44159
 
44160
+
43898
44161
  ;// ../../../node_modules/@cornerstonejs/core/dist/esm/utilities/getDynamicVolumeInfo.js
43899
44162
 
43900
44163
  function getDynamicVolumeInfo(imageIds) {
@@ -45162,7 +45425,7 @@ function toLowHighRange(windowWidth, windowCenter, voiLUTFunction = _enums_VOILU
45162
45425
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
45163
45426
  /* harmony export */ r: () => (/* binding */ version)
45164
45427
  /* harmony export */ });
45165
- const version = '4.14.6';
45428
+ const version = '4.15.2';
45166
45429
 
45167
45430
 
45168
45431
  /***/ }),
@@ -86370,7 +86633,7 @@ const detectionOptions = {
86370
86633
  }
86371
86634
  });
86372
86635
  ;// ../../i18n/package.json
86373
- const package_namespaceObject = /*#__PURE__*/JSON.parse('{"rE":"3.12.0-beta.113"}');
86636
+ const package_namespaceObject = /*#__PURE__*/JSON.parse('{"rE":"3.12.0-beta.115"}');
86374
86637
  ;// ../../i18n/src/utils.js
86375
86638
  const languagesMap = {
86376
86639
  ar: 'Arabic',
@@ -391721,7 +391984,7 @@ function __rewriteRelativeImportExtension(path, preserveJsx) {
391721
391984
  /******/ // This function allow to reference async chunks
391722
391985
  /******/ __webpack_require__.u = (chunkId) => {
391723
391986
  /******/ // return url for filenames based on template
391724
- /******/ return "" + ({"572":"polySeg","2007":"interpolation","3054":"histogram-worker","3694":"compute"}[chunkId] || chunkId) + ".bundle." + {"85":"c05988a8c5ca1c644d91","147":"ee7de13189cf1963aea9","213":"738f3f3bad9747d87251","572":"1cc6ecabd5fb8ab1d99c","732":"6978ac30a1e36abf06db","1403":"57cb00001011a891c721","1459":"b18c0c265cfdffc50ad4","1608":"0687c661f1c9edfb3b8a","1730":"fd7196fce95a907c02b2","1927":"3050588e95f43cf57cdd","1933":"c0be85081628cbd5b634","2007":"1938b79f9d6db363528a","2018":"868c69572d25f819b8aa","2108":"e84aa8d858d8c4f2413e","2424":"608a0fedf823bc6d318d","2591":"6537b857138d8465d410","2701":"12bd01a80a9f8ea4cd94","3054":"d4e40a8018d2698b072e","3081":"532a14bbf71da3f4f48c","3343":"d7578ce8f75d158c0bab","3353":"7d5f628fe7eb8fe738ce","3461":"f229ee13ccc18b7de681","3584":"839a16d349815b3f7c97","3694":"9d2a75c300c39d48be90","4019":"cdb81fb4777792f6175d","4202":"5a0f8e4004c5d8a68548","4775":"ce3cbcb52f3c118eb042","4819":"6f0174dea6faae4b10ca","5028":"25f0de3a61ba3a0efcf8","5261":"6e1a017f8f1027557f5b","5400":"be4bdac337da734fdcd3","5457":"8cbdf4da0e12f88f4010","5462":"21beddaca145b7465c72","5485":"f96a631f8d341cb15cc3","5802":"aef18b250a1927d84108","6027":"e4c090cb74a219798e83","6163":"ba7bd975bc702d2ea746","6939":"41fbdef87597b5172ec6","7159":"a5991a5d4f0dd8f1c95f","7412":"3256f92f3f2d6aa25008","7431":"999b2b65d4973bc56218","7639":"7fdafc277c50936d40aa","8094":"5c44190a325ac23e3e5c","8305":"abad864a52838a31af66","8558":"b83784a541bed16b8b29","8583":"4d9bfa4b52e5fbf5cff4","9195":"0ebdd4b679ee7967a0e9","9845":"255e7c7f7a88193b4e47","9862":"2992313d0e19d394e6a5","9927":"2aad1abce48144437803"}[chunkId] + ".js";
391987
+ /******/ return "" + ({"572":"polySeg","2007":"interpolation","3054":"histogram-worker","3694":"compute"}[chunkId] || chunkId) + ".bundle." + {"85":"6a969322aa9a2819a00d","147":"85a9ed9fd123f57f23a6","213":"972f7d138a5ccedd2ebe","572":"87769c9338f2425c7e65","732":"6978ac30a1e36abf06db","1403":"07faca348a17d5196684","1459":"f95395ba0842cdb55872","1608":"0687c661f1c9edfb3b8a","1730":"2d640ae38d6daaf94bad","1927":"3050588e95f43cf57cdd","1933":"4aa316f1107dc4fba61d","2007":"1938b79f9d6db363528a","2018":"4b5535def5790b39b4ef","2108":"e84aa8d858d8c4f2413e","2424":"6d521c39961d6534b624","2591":"6537b857138d8465d410","2701":"12bd01a80a9f8ea4cd94","3054":"d4e40a8018d2698b072e","3081":"0eb28da956e1adc92769","3343":"d7578ce8f75d158c0bab","3353":"9d3e114b02d6fbbd927f","3461":"ae61e218788c806786a6","3584":"318f292fda0d5e1f54df","3694":"85de00d380fec20ac4ac","4019":"9f338ce1c5ae27f6eab5","4202":"5a0f8e4004c5d8a68548","4775":"61505e4164f4c8fb43bd","4819":"0d1374b815eab24b5e36","5028":"af3b3976f082fd2ea752","5261":"6e1a017f8f1027557f5b","5400":"c1c101c5b66a1667bdfd","5457":"ff5bac682c54abd38847","5462":"21beddaca145b7465c72","5485":"ab20c9303bf0ad373a0e","5802":"aed34ddbad09f03edefe","6027":"e3877fc3c30d5034ef45","6163":"acd5a50004e160b9e1de","6939":"41fbdef87597b5172ec6","7159":"a5991a5d4f0dd8f1c95f","7412":"3c1ced74bcd0c83da9fb","7431":"d772d0b75ef6dc75acfc","7639":"5ac65cc1b14ab07e3393","8094":"5c44190a325ac23e3e5c","8305":"b4b3fb49e18e0c1fb920","8558":"270e7f151717f17853c4","8583":"f69048e5ccf36a31d5c1","9195":"67370bcce2b967affbcb","9845":"255e7c7f7a88193b4e47","9862":"2763343cffe86fcafa33","9927":"dc2207f374d1b8cc50db"}[chunkId] + ".js";
391725
391988
  /******/ };
391726
391989
  /******/ })();
391727
391990
  /******/
@@ -44,7 +44,7 @@
44
44
  /******/ __webpack_require__.x = () => {
45
45
  /******/ // Load entry module and return exports
46
46
  /******/ // This entry module depends on other loaded chunks and execution need to be delayed
47
- /******/ var __webpack_exports__ = __webpack_require__.O(undefined, [4019,5400,6354,5448,2842], () => (__webpack_require__(82487)))
47
+ /******/ var __webpack_exports__ = __webpack_require__.O(undefined, [4019,5400,6354,4410,2842], () => (__webpack_require__(82487)))
48
48
  /******/ __webpack_exports__ = __webpack_require__.O(__webpack_exports__);
49
49
  /******/ return __webpack_exports__;
50
50
  /******/ };
@@ -136,7 +136,7 @@
136
136
  /******/ // This function allow to reference async chunks and sibling chunks for the entrypoint
137
137
  /******/ __webpack_require__.u = (chunkId) => {
138
138
  /******/ // return url for filenames based on template
139
- /******/ return "" + (chunkId === 3694 ? "compute" : chunkId) + ".bundle." + {"2842":"72b8e407027b26a34584","3694":"9d2a75c300c39d48be90","4019":"cdb81fb4777792f6175d","5400":"be4bdac337da734fdcd3","5448":"95f9ed97b8ab5ca9e6b0","6354":"c387737dc09c9cab4ff2"}[chunkId] + ".js";
139
+ /******/ return "" + (chunkId === 3694 ? "compute" : chunkId) + ".bundle." + {"2842":"323078a1185dc9a58ac7","3694":"85de00d380fec20ac4ac","4019":"9f338ce1c5ae27f6eab5","4410":"09d2d3bfb23511a9a7d4","5400":"c1c101c5b66a1667bdfd","6354":"c387737dc09c9cab4ff2"}[chunkId] + ".js";
140
140
  /******/ };
141
141
  /******/ })();
142
142
  /******/
@@ -237,7 +237,7 @@
237
237
  /******/ (() => {
238
238
  /******/ var next = __webpack_require__.x;
239
239
  /******/ __webpack_require__.x = () => {
240
- /******/ return Promise.all([4019,5400,6354,5448,2842].map(__webpack_require__.e, __webpack_require__)).then(next);
240
+ /******/ return Promise.all([4019,5400,6354,4410,2842].map(__webpack_require__.e, __webpack_require__)).then(next);
241
241
  /******/ };
242
242
  /******/ })();
243
243
  /******/
package/dist/index.html CHANGED
@@ -3,4 +3,4 @@
3
3
  return import(moduleId);
4
4
  }
5
5
 
6
- window.PUBLIC_URL = '/';</script><script defer="defer" src="/app.bundle.23afbbef42ad1c18e04f.js"></script><link href="/app.bundle.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="react-portal"></div><div id="root"></div></body></html>
6
+ window.PUBLIC_URL = '/';</script><script defer="defer" src="/app.bundle.41cea80449abee3ded4a.js"></script><link href="/app.bundle.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="react-portal"></div><div id="root"></div></body></html>
@@ -44,7 +44,7 @@
44
44
  /******/ __webpack_require__.x = () => {
45
45
  /******/ // Load entry module and return exports
46
46
  /******/ // This entry module depends on other loaded chunks and execution need to be delayed
47
- /******/ var __webpack_exports__ = __webpack_require__.O(undefined, [4019,3584,6354,5448,5549], () => (__webpack_require__(27862)))
47
+ /******/ var __webpack_exports__ = __webpack_require__.O(undefined, [4019,3584,6354,4410,5549], () => (__webpack_require__(27862)))
48
48
  /******/ __webpack_exports__ = __webpack_require__.O(__webpack_exports__);
49
49
  /******/ return __webpack_exports__;
50
50
  /******/ };
@@ -136,7 +136,7 @@
136
136
  /******/ // This function allow to reference async chunks and sibling chunks for the entrypoint
137
137
  /******/ __webpack_require__.u = (chunkId) => {
138
138
  /******/ // return url for filenames based on template
139
- /******/ return "" + (chunkId === 3694 ? "compute" : chunkId) + ".bundle." + {"3584":"839a16d349815b3f7c97","3694":"9d2a75c300c39d48be90","4019":"cdb81fb4777792f6175d","5448":"95f9ed97b8ab5ca9e6b0","5549":"1a5e24f59873b7a30799","6354":"c387737dc09c9cab4ff2","7758":"c8d106364298e7d288f0"}[chunkId] + ".js";
139
+ /******/ return "" + (chunkId === 3694 ? "compute" : chunkId) + ".bundle." + {"3584":"318f292fda0d5e1f54df","3694":"85de00d380fec20ac4ac","4019":"9f338ce1c5ae27f6eab5","4410":"09d2d3bfb23511a9a7d4","5549":"64c0f91bbed858352e1a","6354":"c387737dc09c9cab4ff2","7758":"c8d106364298e7d288f0"}[chunkId] + ".js";
140
140
  /******/ };
141
141
  /******/ })();
142
142
  /******/
@@ -237,7 +237,7 @@
237
237
  /******/ (() => {
238
238
  /******/ var next = __webpack_require__.x;
239
239
  /******/ __webpack_require__.x = () => {
240
- /******/ return Promise.all([4019,3584,6354,5448,5549].map(__webpack_require__.e, __webpack_require__)).then(next);
240
+ /******/ return Promise.all([4019,3584,6354,4410,5549].map(__webpack_require__.e, __webpack_require__)).then(next);
241
241
  /******/ };
242
242
  /******/ })();
243
243
  /******/