@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.
- package/dist/{1185.bundle.a6e220f00576d6926fe7.js → 1185.bundle.d328aabb2b43e9ea1f96.js} +62 -14
- package/dist/{1266.bundle.8fd38b710e91305721e5.js → 1266.bundle.46de27eda2ef1fce1243.js} +5 -0
- package/dist/{1436.bundle.773756cd51b69e887bac.js → 1436.bundle.27ae9c87e9fc7f52cad3.js} +234 -63
- package/dist/{1927.bundle.49539e3ab5b0aad1399c.js → 1927.bundle.2b2fa0b539d6ac5b0dc3.js} +1 -1
- package/dist/{3200.bundle.45b19ea468d6208f0e7e.js → 3200.bundle.ccb809fb554332d9a0f5.js} +62 -9
- package/dist/{149.bundle.b8d177954628f4631fc0.js → 3900.bundle.3937999d1ee1f391647a.js} +46 -7
- package/dist/{4571.bundle.3b1691730b3c57bf4d35.js → 4571.bundle.a37be49663df2f4a2c8a.js} +99 -89
- package/dist/{5247.bundle.03fa8aac71d4e597d708.js → 5247.bundle.1a1d7c27de482e4a73f3.js} +2 -2
- package/dist/{5252.bundle.5ec502c53a9cc877ed8d.js → 5252.bundle.f2675336275573a288d5.js} +13 -1
- package/dist/{1520.bundle.fde5eb31364855194519.js → 5630.bundle.1bd2402f37597078c1a1.js} +70 -59
- package/dist/{5717.bundle.848e13f256818475f57f.js → 5717.bundle.32836c212103dbbe8e4a.js} +247 -64
- package/dist/{7197.bundle.db0d51e5529d88a4cd7f.js → 7197.bundle.42a975bb7ae4a8df2d00.js} +2 -2
- package/dist/{7955.bundle.699bffabae3a9915c326.js → 7955.bundle.f6c5edb284bdf8b80f2a.js} +1 -1
- package/dist/{8228.bundle.55ac03d7165248f47d4e.js → 8228.bundle.0a7997d04c82dd8c11c5.js} +2 -2
- package/dist/{8523.bundle.648334132159465cdc41.js → 8523.bundle.c0ec85de98ba380ebeb4.js} +55 -13
- package/dist/{9551.bundle.13a3eec1e003a46095bc.js → 9551.bundle.63b2679dd7beee6396d8.js} +1 -1
- package/dist/{app.bundle.8e454976c3d4c3348750.js → app.bundle.632bc6188462e1c95a41.js} +156 -89
- package/dist/app.bundle.css +2 -2
- package/dist/index.html +1 -1
- package/dist/{polySeg.bundle.b79ae514989e86301c71.js → polySeg.bundle.6e85073e3abf2e6e6078.js} +1 -1
- package/dist/serve.json +1 -10
- package/dist/{suv-peak-worker.bundle.76dd4fdf82aaa2c3ad41.js → suv-peak-worker.bundle.1f483dc7131d7c26b517.js} +3 -3
- package/dist/sw.js +1 -1
- package/package.json +19 -19
- /package/dist/{1374.bundle.f56c07364d8f6ed2d00e.js → 1374.bundle.1ee8326c0748c7b1a7c0.js} +0 -0
- /package/dist/{213.bundle.38caad239bcfec1d28fb.js → 213.bundle.8c04fecea2e3796e4d73.js} +0 -0
- /package/dist/{2424.bundle.c7b6d3475da1ffff744b.js → 2424.bundle.38b19314ebd984c9d393.js} +0 -0
- /package/dist/{2825.bundle.ba60e0011bcebdf7a413.js → 2825.bundle.0307cae794e8b057c674.js} +0 -0
- /package/dist/{3198.bundle.9b80ca2f1d99a7f9a4fe.js → 3198.bundle.ab612063af0d67397377.js} +0 -0
- /package/dist/{4834.bundle.4bfa1bd1d4a163de3350.js → 4834.bundle.c25348524be5214e90d6.js} +0 -0
- /package/dist/{5139.bundle.b185b1df3847a2025829.js → 5139.bundle.db30dc02cf41e91c8985.js} +0 -0
- /package/dist/{5687.bundle.3a558ac2eb26f5295668.js → 5687.bundle.05de4787676bf79f9906.js} +0 -0
- /package/dist/{717.bundle.62437bfeb54f01269abe.js → 717.bundle.3a4b8835adf03e4554c7.js} +0 -0
- /package/dist/{8008.bundle.1ab47eccf7608fe14e92.js → 8008.bundle.d4187a30e8f656a21316.js} +0 -0
- /package/dist/{8259.bundle.4385bd89c3f7f4ced27c.js → 8259.bundle.990db2fa9ce0800319e9.js} +0 -0
- /package/dist/{8558.bundle.3b0654ad2a52ac9786dd.js → 8558.bundle.63714e2329c22c9cb9da.js} +0 -0
- /package/dist/{9611.bundle.767595c93877e5166c03.js → 9611.bundle.78a4ffb439f65cfd0379.js} +0 -0
- /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 +
|
|
26
|
-
var default_src = __webpack_require__(
|
|
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 +
|
|
1163
|
-
var default_src = __webpack_require__(
|
|
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)(
|
|
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(
|
|
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
|
-
|
|
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([[
|
|
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
|
-
|
|
8057
|
-
|
|
8058
|
-
|
|
8059
|
-
|
|
8060
|
-
|
|
8061
|
-
|
|
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
|
-
|
|
1251
|
-
|
|
1252
|
-
|
|
1253
|
-
|
|
1254
|
-
|
|
1255
|
-
|
|
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
|
-
|
|
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 +
|
|
1383
|
-
var default_src = __webpack_require__(
|
|
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];
|