@ohif/app 3.9.0 → 3.9.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/dist/{1185.bundle.a6e220f00576d6926fe7.js → 1185.bundle.d328aabb2b43e9ea1f96.js} +62 -14
  2. package/dist/{1266.bundle.8fd38b710e91305721e5.js → 1266.bundle.46de27eda2ef1fce1243.js} +5 -0
  3. package/dist/{1436.bundle.773756cd51b69e887bac.js → 1436.bundle.27ae9c87e9fc7f52cad3.js} +234 -63
  4. package/dist/{1927.bundle.49539e3ab5b0aad1399c.js → 1927.bundle.2b2fa0b539d6ac5b0dc3.js} +1 -1
  5. package/dist/{3200.bundle.45b19ea468d6208f0e7e.js → 3200.bundle.ccb809fb554332d9a0f5.js} +62 -9
  6. package/dist/{149.bundle.b8d177954628f4631fc0.js → 3900.bundle.3937999d1ee1f391647a.js} +46 -7
  7. package/dist/{4571.bundle.3b1691730b3c57bf4d35.js → 4571.bundle.a37be49663df2f4a2c8a.js} +99 -89
  8. package/dist/{5247.bundle.03fa8aac71d4e597d708.js → 5247.bundle.1a1d7c27de482e4a73f3.js} +2 -2
  9. package/dist/{5252.bundle.5ec502c53a9cc877ed8d.js → 5252.bundle.f2675336275573a288d5.js} +13 -1
  10. package/dist/{1520.bundle.fde5eb31364855194519.js → 5630.bundle.1bd2402f37597078c1a1.js} +70 -59
  11. package/dist/{5717.bundle.848e13f256818475f57f.js → 5717.bundle.32836c212103dbbe8e4a.js} +247 -64
  12. package/dist/{7197.bundle.db0d51e5529d88a4cd7f.js → 7197.bundle.42a975bb7ae4a8df2d00.js} +2 -2
  13. package/dist/{7955.bundle.699bffabae3a9915c326.js → 7955.bundle.f6c5edb284bdf8b80f2a.js} +1 -1
  14. package/dist/{8228.bundle.55ac03d7165248f47d4e.js → 8228.bundle.0a7997d04c82dd8c11c5.js} +2 -2
  15. package/dist/{8523.bundle.648334132159465cdc41.js → 8523.bundle.c0ec85de98ba380ebeb4.js} +55 -13
  16. package/dist/{9551.bundle.13a3eec1e003a46095bc.js → 9551.bundle.63b2679dd7beee6396d8.js} +1 -1
  17. package/dist/{app.bundle.8e454976c3d4c3348750.js → app.bundle.632bc6188462e1c95a41.js} +156 -89
  18. package/dist/app.bundle.css +2 -2
  19. package/dist/index.html +1 -1
  20. package/dist/{polySeg.bundle.b79ae514989e86301c71.js → polySeg.bundle.6e85073e3abf2e6e6078.js} +1 -1
  21. package/dist/serve.json +1 -10
  22. package/dist/{suv-peak-worker.bundle.76dd4fdf82aaa2c3ad41.js → suv-peak-worker.bundle.1f483dc7131d7c26b517.js} +3 -3
  23. package/dist/sw.js +1 -1
  24. package/package.json +19 -19
  25. /package/dist/{1374.bundle.f56c07364d8f6ed2d00e.js → 1374.bundle.1ee8326c0748c7b1a7c0.js} +0 -0
  26. /package/dist/{213.bundle.38caad239bcfec1d28fb.js → 213.bundle.8c04fecea2e3796e4d73.js} +0 -0
  27. /package/dist/{2424.bundle.c7b6d3475da1ffff744b.js → 2424.bundle.38b19314ebd984c9d393.js} +0 -0
  28. /package/dist/{2825.bundle.ba60e0011bcebdf7a413.js → 2825.bundle.0307cae794e8b057c674.js} +0 -0
  29. /package/dist/{3198.bundle.9b80ca2f1d99a7f9a4fe.js → 3198.bundle.ab612063af0d67397377.js} +0 -0
  30. /package/dist/{4834.bundle.4bfa1bd1d4a163de3350.js → 4834.bundle.c25348524be5214e90d6.js} +0 -0
  31. /package/dist/{5139.bundle.b185b1df3847a2025829.js → 5139.bundle.db30dc02cf41e91c8985.js} +0 -0
  32. /package/dist/{5687.bundle.3a558ac2eb26f5295668.js → 5687.bundle.05de4787676bf79f9906.js} +0 -0
  33. /package/dist/{717.bundle.62437bfeb54f01269abe.js → 717.bundle.3a4b8835adf03e4554c7.js} +0 -0
  34. /package/dist/{8008.bundle.1ab47eccf7608fe14e92.js → 8008.bundle.d4187a30e8f656a21316.js} +0 -0
  35. /package/dist/{8259.bundle.4385bd89c3f7f4ced27c.js → 8259.bundle.990db2fa9ce0800319e9.js} +0 -0
  36. /package/dist/{8558.bundle.3b0654ad2a52ac9786dd.js → 8558.bundle.63714e2329c22c9cb9da.js} +0 -0
  37. /package/dist/{9611.bundle.767595c93877e5166c03.js → 9611.bundle.78a4ffb439f65cfd0379.js} +0 -0
  38. /package/dist/{9862.bundle.7146682e56aa66130ae6.js → 9862.bundle.aa2f8e0010f1be1bc87d.js} +0 -0
@@ -22,8 +22,8 @@ var es = __webpack_require__(70574);
22
22
  var react_es = __webpack_require__(95261);
23
23
  // EXTERNAL MODULE: ../../ui/src/index.js + 690 modules
24
24
  var src = __webpack_require__(35647);
25
- // EXTERNAL MODULE: ../../../extensions/default/src/index.ts + 114 modules
26
- var default_src = __webpack_require__(71520);
25
+ // EXTERNAL MODULE: ../../../extensions/default/src/index.ts + 115 modules
26
+ var default_src = __webpack_require__(55630);
27
27
  ;// CONCATENATED MODULE: ../../../extensions/measurement-tracking/src/contexts/TrackedMeasurementsContext/measurementTrackingMachine.js
28
28
 
29
29
  const RESPONSE = {
@@ -1159,8 +1159,8 @@ var src = __webpack_require__(29463);
1159
1159
  var ui_src = __webpack_require__(35647);
1160
1160
  // EXTERNAL MODULE: ../../ui-next/src/index.ts + 2483 modules
1161
1161
  var ui_next_src = __webpack_require__(35570);
1162
- // EXTERNAL MODULE: ../../../extensions/default/src/index.ts + 114 modules
1163
- var default_src = __webpack_require__(71520);
1162
+ // EXTERNAL MODULE: ../../../extensions/default/src/index.ts + 115 modules
1163
+ var default_src = __webpack_require__(55630);
1164
1164
  ;// CONCATENATED MODULE: ../../../extensions/measurement-tracking/src/panels/PanelStudyBrowserTracking/constants/actionIcons.ts
1165
1165
  const defaultActionIcons = [{
1166
1166
  id: 'settings',
@@ -1222,6 +1222,12 @@ function PanelStudyBrowserTracking({
1222
1222
  customizationService
1223
1223
  } = servicesManager.services;
1224
1224
  const navigate = (0,dist/* useNavigate */.Zp)();
1225
+ const {
1226
+ mode: studyMode
1227
+ } = customizationService.getCustomization('PanelStudyBrowser.studyMode', {
1228
+ id: 'default',
1229
+ mode: 'all'
1230
+ });
1225
1231
  const {
1226
1232
  t
1227
1233
  } = (0,es/* useTranslation */.Bd)('Common');
@@ -1238,7 +1244,7 @@ function PanelStudyBrowserTracking({
1238
1244
  isHangingProtocolLayout
1239
1245
  }, viewportGridService] = (0,ui_src/* useViewportGrid */.ih)();
1240
1246
  const [trackedMeasurements, sendTrackedMeasurementsEvent] = (0,getContextModule/* useTrackedMeasurements */.B)();
1241
- const [activeTabName, setActiveTabName] = (0,react.useState)('all');
1247
+ const [activeTabName, setActiveTabName] = (0,react.useState)(studyMode);
1242
1248
  const [expandedStudyInstanceUIDs, setExpandedStudyInstanceUIDs] = (0,react.useState)([...StudyInstanceUIDs]);
1243
1249
  const [studyDisplayList, setStudyDisplayList] = (0,react.useState)([]);
1244
1250
  const [hasLoadedViewports, setHasLoadedViewports] = (0,react.useState)(false);
@@ -1283,6 +1289,9 @@ function PanelStudyBrowserTracking({
1283
1289
  const {
1284
1290
  trackedSeries
1285
1291
  } = trackedMeasurements.context;
1292
+ (0,react.useEffect)(() => {
1293
+ setActiveTabName(studyMode);
1294
+ }, [studyMode]);
1286
1295
 
1287
1296
  // ~~ studyDisplayList
1288
1297
  (0,react.useEffect)(() => {
@@ -1604,7 +1613,6 @@ PanelStudyBrowserTracking.propTypes = {
1604
1613
  getStudiesForPatientByMRN: (prop_types_default()).func.isRequired,
1605
1614
  requestDisplaySetCreationForStudy: (prop_types_default()).func.isRequired
1606
1615
  };
1607
- /* harmony default export */ const PanelStudyBrowserTracking_PanelStudyBrowserTracking = (PanelStudyBrowserTracking);
1608
1616
  function getImageIdForThumbnail(displaySet, imageIds) {
1609
1617
  let imageId;
1610
1618
  if (displaySet.isDynamicVolume) {
@@ -1841,7 +1849,7 @@ function WrappedPanelStudyBrowserTracking({
1841
1849
  const _getStudiesForPatientByMRN = getStudiesForPatientByMRN.bind(null, dataSource);
1842
1850
  const _getImageSrcFromImageId = (0,react.useCallback)(_createGetImageSrcFromImageIdFn(extensionManager), []);
1843
1851
  const _requestDisplaySetCreationForStudy = PanelStudyBrowserTracking_requestDisplaySetCreationForStudy.bind(null, dataSource);
1844
- return /*#__PURE__*/react.createElement(PanelStudyBrowserTracking_PanelStudyBrowserTracking, {
1852
+ return /*#__PURE__*/react.createElement(PanelStudyBrowserTracking, {
1845
1853
  servicesManager: servicesManager,
1846
1854
  commandsManager: commandsManager,
1847
1855
  dataSource: dataSource,
@@ -1912,7 +1920,8 @@ function PanelMeasurementTableTracking({
1912
1920
  } = (0,es/* useTranslation */.Bd)('MeasurementTable');
1913
1921
  const {
1914
1922
  measurementService,
1915
- customizationService
1923
+ customizationService,
1924
+ uiDialogService
1916
1925
  } = servicesManager.services;
1917
1926
  const [trackedMeasurements, sendTrackedMeasurementsEvent] = (0,getContextModule/* useTrackedMeasurements */.B)();
1918
1927
  const {
@@ -2011,7 +2020,51 @@ function PanelMeasurementTableTracking({
2011
2020
  variant: "ghost",
2012
2021
  className: "pl-0.5",
2013
2022
  onClick: () => {
2014
- measurementService.clearMeasurements();
2023
+ uiDialogService.create({
2024
+ id: 'delete-all-measurements',
2025
+ centralize: true,
2026
+ isDraggable: false,
2027
+ showOverlay: true,
2028
+ content: ui_src/* Dialog */.lG,
2029
+ contentProps: {
2030
+ title: 'Delete All Measurements',
2031
+ body: () => /*#__PURE__*/react.createElement("div", {
2032
+ className: "bg-primary-dark text-white"
2033
+ }, /*#__PURE__*/react.createElement("p", null, "Are you sure you want to delete all measurements?"), /*#__PURE__*/react.createElement("p", {
2034
+ className: "mt-2"
2035
+ }, "This action cannot be undone.")),
2036
+ actions: [{
2037
+ id: 'cancel',
2038
+ text: 'Cancel',
2039
+ type: ui_src/* ButtonEnums.type */.Ny.NW.secondary
2040
+ }, {
2041
+ id: 'yes',
2042
+ text: 'Delete All',
2043
+ type: ui_src/* ButtonEnums.type */.Ny.NW.primary,
2044
+ classes: ['delete-all-yes-button']
2045
+ }],
2046
+ onClose: () => uiDialogService.dismiss({
2047
+ id: 'delete-all-measurements'
2048
+ }),
2049
+ onSubmit: async ({
2050
+ action
2051
+ }) => {
2052
+ switch (action.id) {
2053
+ case 'yes':
2054
+ measurementService.clearMeasurements();
2055
+ uiDialogService.dismiss({
2056
+ id: 'delete-all-measurements'
2057
+ });
2058
+ break;
2059
+ case 'cancel':
2060
+ uiDialogService.dismiss({
2061
+ id: 'delete-all-measurements'
2062
+ });
2063
+ break;
2064
+ }
2065
+ }
2066
+ }
2067
+ });
2015
2068
  }
2016
2069
  }, /*#__PURE__*/react.createElement(ui_next_src/* Icons */.FI.Delete, null), "Delete All")));
2017
2070
  }
@@ -1,4 +1,4 @@
1
- (self["webpackChunk"] = self["webpackChunk"] || []).push([[149],{
1
+ (self["webpackChunk"] = self["webpackChunk"] || []).push([[3900],{
2
2
 
3
3
  /***/ 97181:
4
4
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
@@ -2123,6 +2123,40 @@ function triggerSegmentationRepresentationRemoved(viewportId, segmentationId, ty
2123
2123
  }
2124
2124
 
2125
2125
 
2126
+ /***/ }),
2127
+
2128
+ /***/ 50409:
2129
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2130
+
2131
+ "use strict";
2132
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
2133
+ /* harmony export */ B: () => (/* binding */ getColorLUT)
2134
+ /* harmony export */ });
2135
+ /* harmony import */ var _SegmentationStateManager__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(59475);
2136
+
2137
+ function getColorLUT(index) {
2138
+ const segmentationStateManager = _SegmentationStateManager__WEBPACK_IMPORTED_MODULE_0__/* .defaultSegmentationStateManager */ ._6;
2139
+ return segmentationStateManager.getColorLUT(index);
2140
+ }
2141
+
2142
+
2143
+ /***/ }),
2144
+
2145
+ /***/ 70906:
2146
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2147
+
2148
+ "use strict";
2149
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
2150
+ /* harmony export */ u: () => (/* binding */ getNextColorLUTIndex)
2151
+ /* harmony export */ });
2152
+ /* harmony import */ var _SegmentationStateManager__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(59475);
2153
+
2154
+ function getNextColorLUTIndex() {
2155
+ const segmentationStateManager = _SegmentationStateManager__WEBPACK_IMPORTED_MODULE_0__/* .defaultSegmentationStateManager */ ._6;
2156
+ return segmentationStateManager.getNextColorLUTIndex();
2157
+ }
2158
+
2159
+
2126
2160
  /***/ }),
2127
2161
 
2128
2162
  /***/ 33283:
@@ -8053,12 +8087,14 @@ function _stopClip(element, options = { stopDynamicCine: true, viewportId: undef
8053
8087
  }
8054
8088
  function _stopDynamicVolumeCine(element) {
8055
8089
  const { viewport } = (0,dist_esm.getEnabledElement)(element);
8056
- const volume = _getVolumeFromViewport(viewport);
8057
- if (volume?.isDynamicVolume()) {
8058
- const dynamicCineElement = dynamicVolumesPlayingMap.get(volume.volumeId);
8059
- dynamicVolumesPlayingMap.delete(volume.volumeId);
8060
- if (dynamicCineElement && dynamicCineElement !== element) {
8061
- stopClip(dynamicCineElement);
8090
+ if (viewport instanceof dist_esm.VolumeViewport) {
8091
+ const volume = _getVolumeFromViewport(viewport);
8092
+ if (volume?.isDynamicVolume()) {
8093
+ const dynamicCineElement = dynamicVolumesPlayingMap.get(volume.volumeId);
8094
+ dynamicVolumesPlayingMap.delete(volume.volumeId);
8095
+ if (dynamicCineElement && dynamicCineElement !== element) {
8096
+ stopClip(dynamicCineElement);
8097
+ }
8062
8098
  }
8063
8099
  }
8064
8100
  }
@@ -8108,6 +8144,9 @@ function _stopClipWithData(playClipData) {
8108
8144
  }
8109
8145
  }
8110
8146
  function _getVolumeFromViewport(viewport) {
8147
+ if (!(viewport instanceof dist_esm.VolumeViewport)) {
8148
+ return undefined;
8149
+ }
8111
8150
  const volumeIds = viewport.getAllVolumeIds();
8112
8151
  if (!volumeIds?.length) {
8113
8152
  return undefined;
@@ -1213,6 +1213,10 @@ function getPixelDataTypeFromMinMax(min, max) {
1213
1213
  }
1214
1214
  return pixelDataType || Float32Array;
1215
1215
  }
1216
+ function validatePixelDataType(min, max, type) {
1217
+ const pixelDataType = getPixelDataTypeFromMinMax(min, max);
1218
+ return pixelDataType === type;
1219
+ }
1216
1220
 
1217
1221
  ;// CONCATENATED MODULE: ../../../node_modules/@cornerstonejs/dicom-image-loader/dist/esm/shared/isColorImage.js
1218
1222
  /* harmony default export */ function isColorImage(photoMetricInterpretation) {
@@ -1247,87 +1251,12 @@ const imageUtils = {
1247
1251
  bilinear: bilinear,
1248
1252
  replicate: replicate,
1249
1253
  };
1250
- async function decodeImageFrame(imageFrame, transferSyntax, pixelData, decodeConfig, options, callbackFn) {
1251
- const start = new Date().getTime();
1252
- let decodePromise = null;
1253
- let opts;
1254
- switch (transferSyntax) {
1255
- case '1.2.840.10008.1.2':
1256
- case '1.2.840.10008.1.2.1':
1257
- decodePromise = decoders_decodeLittleEndian(imageFrame, pixelData);
1258
- break;
1259
- case '1.2.840.10008.1.2.2':
1260
- decodePromise = decoders_decodeBigEndian(imageFrame, pixelData);
1261
- break;
1262
- case '1.2.840.10008.1.2.1.99':
1263
- decodePromise = decoders_decodeLittleEndian(imageFrame, pixelData);
1264
- break;
1265
- case '1.2.840.10008.1.2.5':
1266
- decodePromise = decoders_decodeRLE(imageFrame, pixelData);
1267
- break;
1268
- case '1.2.840.10008.1.2.4.50':
1269
- opts = {
1270
- ...imageFrame,
1271
- };
1272
- decodePromise = decodeJPEGBaseline8Bit(pixelData, opts);
1273
- break;
1274
- case '1.2.840.10008.1.2.4.51':
1275
- decodePromise = decodeJPEGBaseline12Bit_js(imageFrame, pixelData);
1276
- break;
1277
- case '1.2.840.10008.1.2.4.57':
1278
- decodePromise = decoders_decodeJPEGLossless(imageFrame, pixelData);
1279
- break;
1280
- case '1.2.840.10008.1.2.4.70':
1281
- decodePromise = decoders_decodeJPEGLossless(imageFrame, pixelData);
1282
- break;
1283
- case '1.2.840.10008.1.2.4.80':
1284
- opts = {
1285
- signed: imageFrame.pixelRepresentation === 1,
1286
- bytesPerPixel: imageFrame.bitsAllocated <= 8 ? 1 : 2,
1287
- ...imageFrame,
1288
- };
1289
- decodePromise = decodeJPEGLS(pixelData, opts);
1290
- break;
1291
- case '1.2.840.10008.1.2.4.81':
1292
- opts = {
1293
- signed: imageFrame.pixelRepresentation === 1,
1294
- bytesPerPixel: imageFrame.bitsAllocated <= 8 ? 1 : 2,
1295
- ...imageFrame,
1296
- };
1297
- decodePromise = decodeJPEGLS(pixelData, opts);
1298
- break;
1299
- case '1.2.840.10008.1.2.4.90':
1300
- opts = {
1301
- ...imageFrame,
1302
- };
1303
- decodePromise = decodeJPEG2000(pixelData, opts);
1304
- break;
1305
- case '1.2.840.10008.1.2.4.91':
1306
- opts = {
1307
- ...imageFrame,
1308
- };
1309
- decodePromise = decodeJPEG2000(pixelData, opts);
1310
- break;
1311
- case '3.2.840.10008.1.2.4.96':
1312
- case '1.2.840.10008.1.2.4.201':
1313
- case '1.2.840.10008.1.2.4.202':
1314
- case '1.2.840.10008.1.2.4.203':
1315
- opts = {
1316
- ...imageFrame,
1317
- };
1318
- decodePromise = decodeHTJ2K(pixelData, opts);
1319
- break;
1320
- default:
1321
- throw new Error(`no decoder for transfer syntax ${transferSyntax}`);
1322
- }
1323
- if (!decodePromise) {
1324
- throw new Error('decodePromise not defined');
1325
- }
1326
- const decodedFrame = await decodePromise;
1327
- const postProcessed = postProcessDecodedPixels(decodedFrame, options, start, decodeConfig);
1328
- callbackFn?.(postProcessed);
1329
- return postProcessed;
1330
- }
1254
+ const typedArrayConstructors = {
1255
+ Uint8Array,
1256
+ Uint16Array,
1257
+ Int16Array,
1258
+ Float32Array,
1259
+ };
1331
1260
  function postProcessDecodedPixels(imageFrame, options, start, decodeConfig) {
1332
1261
  const shouldShift = imageFrame.pixelRepresentation !== undefined &&
1333
1262
  imageFrame.pixelRepresentation === 1;
@@ -1342,22 +1271,22 @@ function postProcessDecodedPixels(imageFrame, options, start, decodeConfig) {
1342
1271
  let pixelDataArray = imageFrame.pixelData;
1343
1272
  imageFrame.pixelDataLength = imageFrame.pixelData.length;
1344
1273
  const { min: minBeforeScale, max: maxBeforeScale } = shared_getMinMax(imageFrame.pixelData);
1345
- const typedArrayConstructors = {
1346
- Uint8Array,
1347
- Uint16Array,
1348
- Int16Array,
1349
- Float32Array,
1350
- };
1351
- const type = options.targetBuffer?.type;
1352
1274
  const canRenderFloat = typeof options.allowFloatRendering !== 'undefined'
1353
1275
  ? options.allowFloatRendering
1354
1276
  : true;
1355
- const invalidType = isColorImage(imageFrame.photometricInterpretation) &&
1277
+ let invalidType = isColorImage(imageFrame.photometricInterpretation) &&
1356
1278
  options.targetBuffer?.offset === undefined;
1357
1279
  const willScale = options.preScale?.enabled;
1358
1280
  const hasFloatRescale = willScale &&
1359
1281
  Object.values(options.preScale.scalingParameters).some((v) => typeof v === 'number' && !Number.isInteger(v));
1360
1282
  const disableScale = !options.preScale.enabled || (!canRenderFloat && hasFloatRescale);
1283
+ const type = options.targetBuffer?.type;
1284
+ if (type && options.preScale.enabled && !disableScale) {
1285
+ const { rescaleSlope, rescaleIntercept } = options.preScale.scalingParameters;
1286
+ const minAfterScale = rescaleSlope * minBeforeScale + rescaleIntercept;
1287
+ const maxAfterScale = rescaleSlope * maxBeforeScale + rescaleIntercept;
1288
+ invalidType = !validatePixelDataType(minAfterScale, maxAfterScale, type);
1289
+ }
1361
1290
  if (type && !invalidType) {
1362
1291
  pixelDataArray = _handleTargetBuffer(options, imageFrame, typedArrayConstructors, pixelDataArray);
1363
1292
  }
@@ -1484,6 +1413,87 @@ function scaleImageFrame(imageFrame, targetBuffer, TypedArrayConstructor) {
1484
1413
  imageFrame.pixelDataLength = imageFrame.pixelData.length;
1485
1414
  return imageFrame;
1486
1415
  }
1416
+ async function decodeImageFrame(imageFrame, transferSyntax, pixelData, decodeConfig, options, callbackFn) {
1417
+ const start = new Date().getTime();
1418
+ let decodePromise = null;
1419
+ let opts;
1420
+ switch (transferSyntax) {
1421
+ case '1.2.840.10008.1.2':
1422
+ case '1.2.840.10008.1.2.1':
1423
+ decodePromise = decoders_decodeLittleEndian(imageFrame, pixelData);
1424
+ break;
1425
+ case '1.2.840.10008.1.2.2':
1426
+ decodePromise = decoders_decodeBigEndian(imageFrame, pixelData);
1427
+ break;
1428
+ case '1.2.840.10008.1.2.1.99':
1429
+ decodePromise = decoders_decodeLittleEndian(imageFrame, pixelData);
1430
+ break;
1431
+ case '1.2.840.10008.1.2.5':
1432
+ decodePromise = decoders_decodeRLE(imageFrame, pixelData);
1433
+ break;
1434
+ case '1.2.840.10008.1.2.4.50':
1435
+ opts = {
1436
+ ...imageFrame,
1437
+ };
1438
+ decodePromise = decodeJPEGBaseline8Bit(pixelData, opts);
1439
+ break;
1440
+ case '1.2.840.10008.1.2.4.51':
1441
+ decodePromise = decodeJPEGBaseline12Bit_js(imageFrame, pixelData);
1442
+ break;
1443
+ case '1.2.840.10008.1.2.4.57':
1444
+ decodePromise = decoders_decodeJPEGLossless(imageFrame, pixelData);
1445
+ break;
1446
+ case '1.2.840.10008.1.2.4.70':
1447
+ decodePromise = decoders_decodeJPEGLossless(imageFrame, pixelData);
1448
+ break;
1449
+ case '1.2.840.10008.1.2.4.80':
1450
+ opts = {
1451
+ signed: imageFrame.pixelRepresentation === 1,
1452
+ bytesPerPixel: imageFrame.bitsAllocated <= 8 ? 1 : 2,
1453
+ ...imageFrame,
1454
+ };
1455
+ decodePromise = decodeJPEGLS(pixelData, opts);
1456
+ break;
1457
+ case '1.2.840.10008.1.2.4.81':
1458
+ opts = {
1459
+ signed: imageFrame.pixelRepresentation === 1,
1460
+ bytesPerPixel: imageFrame.bitsAllocated <= 8 ? 1 : 2,
1461
+ ...imageFrame,
1462
+ };
1463
+ decodePromise = decodeJPEGLS(pixelData, opts);
1464
+ break;
1465
+ case '1.2.840.10008.1.2.4.90':
1466
+ opts = {
1467
+ ...imageFrame,
1468
+ };
1469
+ decodePromise = decodeJPEG2000(pixelData, opts);
1470
+ break;
1471
+ case '1.2.840.10008.1.2.4.91':
1472
+ opts = {
1473
+ ...imageFrame,
1474
+ };
1475
+ decodePromise = decodeJPEG2000(pixelData, opts);
1476
+ break;
1477
+ case '3.2.840.10008.1.2.4.96':
1478
+ case '1.2.840.10008.1.2.4.201':
1479
+ case '1.2.840.10008.1.2.4.202':
1480
+ case '1.2.840.10008.1.2.4.203':
1481
+ opts = {
1482
+ ...imageFrame,
1483
+ };
1484
+ decodePromise = decodeHTJ2K(pixelData, opts);
1485
+ break;
1486
+ default:
1487
+ throw new Error(`no decoder for transfer syntax ${transferSyntax}`);
1488
+ }
1489
+ if (!decodePromise) {
1490
+ throw new Error('decodePromise not defined');
1491
+ }
1492
+ const decodedFrame = await decodePromise;
1493
+ const postProcessed = postProcessDecodedPixels(decodedFrame, options, start, decodeConfig);
1494
+ callbackFn?.(postProcessed);
1495
+ return postProcessed;
1496
+ }
1487
1497
  const obj = {
1488
1498
  decodeTask({ imageFrame, transferSyntax, decodeConfig, options, pixelData, callbackFn, }) {
1489
1499
  return decodeImageFrame(imageFrame, transferSyntax, pixelData, decodeConfig, options, callbackFn);
@@ -1379,8 +1379,8 @@ MicroscopyService.REGISTRATION = servicesManager => {
1379
1379
 
1380
1380
  // EXTERNAL MODULE: ../../../node_modules/dcmjs/build/dcmjs.es.js
1381
1381
  var dcmjs_es = __webpack_require__(5842);
1382
- // EXTERNAL MODULE: ../../../extensions/default/src/index.ts + 114 modules
1383
- var default_src = __webpack_require__(71520);
1382
+ // EXTERNAL MODULE: ../../../extensions/default/src/index.ts + 115 modules
1383
+ var default_src = __webpack_require__(55630);
1384
1384
  ;// CONCATENATED MODULE: ../../../extensions/dicom-microscopy/src/utils/DEVICE_OBSERVER_UID.js
1385
1385
  // We need to define a UID for this extension as a device, and it should be the same for all saves:
1386
1386
 
@@ -2709,6 +2709,15 @@ const imageRetrieveMetadataProvider = {
2709
2709
  add: (key, payload) => {
2710
2710
  retrieveConfigurationState.set(key, payload);
2711
2711
  },
2712
+ clone: () => {
2713
+ return new Map(retrieveConfigurationState);
2714
+ },
2715
+ restore: (state) => {
2716
+ retrieveConfigurationState.clear();
2717
+ state.forEach((value, key) => {
2718
+ retrieveConfigurationState.set(key, value);
2719
+ });
2720
+ },
2712
2721
  get: (type, ...queries) => {
2713
2722
  if (type === IMAGE_RETRIEVE_CONFIGURATION) {
2714
2723
  return queries
@@ -3633,7 +3642,10 @@ function calculateViewportsSpatialRegistration(viewport1, viewport2) {
3633
3642
 
3634
3643
  ;// CONCATENATED MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/utilities/getViewportImageCornersInWorld.js
3635
3644
  function getViewportImageCornersInWorld(viewport) {
3636
- const { imageData, dimensions } = viewport.getImageData();
3645
+ const { imageData, dimensions } = viewport.getImageData() || {};
3646
+ if (!imageData || !dimensions) {
3647
+ return [];
3648
+ }
3637
3649
  const { canvas } = viewport;
3638
3650
  const ratio = window.devicePixelRatio;
3639
3651
  const topLeftCanvas = [0, 0];