cloudmr-ux 2.0.7 → 3.0.1
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/README.md +24 -24
- package/dist/CmrComponents/CmrButton/CmrButton.css +0 -0
- package/dist/CmrComponents/CmrButton/CmrButton.d.ts +4 -0
- package/dist/CmrComponents/CmrButton/CmrButton.js +30 -0
- package/dist/CmrComponents/CmrButton/index.d.ts +1 -0
- package/dist/CmrComponents/CmrButton/index.js +1 -0
- package/dist/CmrComponents/CmrCheckbox/CmrCheckbox.css +29 -0
- package/dist/CmrComponents/CmrCheckbox/CmrCheckbox.d.ts +14 -0
- package/dist/CmrComponents/CmrCheckbox/CmrCheckbox.js +30 -0
- package/dist/CmrComponents/CmrCheckbox/index.d.ts +1 -0
- package/dist/CmrComponents/CmrCheckbox/index.js +1 -0
- package/dist/CmrComponents/CmrColorPicker/CmrColorPicker.d.ts +8 -0
- package/dist/CmrComponents/CmrColorPicker/CmrColorPicker.js +29 -0
- package/dist/CmrComponents/CmrColorPicker/CmrColorPicker.scss +27 -0
- package/dist/CmrComponents/CmrInput/CmrInput.css +27 -0
- package/dist/CmrComponents/CmrInput/CmrInput.d.ts +17 -0
- package/dist/CmrComponents/CmrInput/CmrInput.js +29 -0
- package/dist/CmrComponents/CmrInput/index.d.ts +1 -0
- package/dist/CmrComponents/CmrInput/index.js +1 -0
- package/dist/CmrComponents/CmrRadioGroup/CmrRadioGroup.css +25 -0
- package/dist/CmrComponents/CmrRadioGroup/CmrRadioGroup.d.ts +15 -0
- package/dist/CmrComponents/CmrRadioGroup/CmrRadioGroup.js +37 -0
- package/dist/CmrComponents/CmrRadioGroup/index.d.ts +1 -0
- package/dist/CmrComponents/CmrRadioGroup/index.js +1 -0
- package/dist/CmrComponents/CmrSelect/CmrSelect.css +1 -0
- package/dist/CmrComponents/CmrSelect/CmrSelect.d.ts +24 -0
- package/dist/CmrComponents/CmrSelect/CmrSelect.js +46 -0
- package/dist/CmrComponents/CmrSelect/index.d.ts +1 -0
- package/dist/CmrComponents/CmrSelect/index.js +1 -0
- package/dist/CmrComponents/checkbox/Checkbox.css +8 -0
- package/dist/CmrComponents/checkbox/Checkbox.d.ts +15 -0
- package/dist/CmrComponents/checkbox/Checkbox.js +25 -0
- package/dist/CmrComponents/collapse/Collapse.css +3 -0
- package/dist/CmrComponents/collapse/Collapse.d.ts +18 -0
- package/dist/CmrComponents/collapse/Collapse.js +87 -0
- package/dist/CmrComponents/dialogue/Confirmation.d.ts +20 -0
- package/dist/CmrComponents/dialogue/Confirmation.js +36 -0
- package/dist/CmrComponents/dialogue/DeletionDialog.d.ts +4 -0
- package/dist/CmrComponents/dialogue/DeletionDialog.js +39 -0
- package/dist/CmrComponents/dialogue/EditConfirmation.d.ts +13 -0
- package/dist/CmrComponents/dialogue/EditConfirmation.js +45 -0
- package/dist/CmrComponents/double-slider/DualSlider.d.ts +21 -0
- package/dist/CmrComponents/double-slider/DualSlider.js +152 -0
- package/dist/CmrComponents/double-slider/InvertibleDualSlider.d.ts +24 -0
- package/dist/CmrComponents/double-slider/InvertibleDualSlider.js +174 -0
- package/dist/CmrComponents/gui-slider/ControlledSlider.d.ts +9 -0
- package/dist/CmrComponents/gui-slider/ControlledSlider.js +96 -0
- package/dist/CmrComponents/gui-slider/Slider.d.ts +20 -0
- package/dist/CmrComponents/gui-slider/Slider.js +127 -0
- package/dist/CmrComponents/header/Header.d.ts +17 -0
- package/dist/CmrComponents/header/Header.js +90 -0
- package/dist/CmrComponents/header/Header.scss +32 -0
- package/dist/CmrComponents/input-number/InputNumber.css +0 -0
- package/dist/CmrComponents/input-number/InputNumber.d.ts +17 -0
- package/dist/CmrComponents/input-number/InputNumber.js +30 -0
- package/dist/CmrComponents/label/Label.css +13 -0
- package/dist/CmrComponents/label/Label.d.ts +9 -0
- package/dist/CmrComponents/label/Label.js +18 -0
- package/dist/CmrComponents/panel/Panel.css +5 -0
- package/dist/CmrComponents/panel/Panel.d.ts +12 -0
- package/dist/CmrComponents/panel/Panel.js +42 -0
- package/dist/CmrComponents/rename/edit.d.ts +7 -0
- package/dist/CmrComponents/rename/edit.js +117 -0
- package/dist/CmrComponents/select-upload/SelectUpload.css +26 -0
- package/dist/CmrComponents/select-upload/SelectUpload.d.ts +33 -0
- package/dist/CmrComponents/select-upload/SelectUpload.js +90 -0
- package/dist/CmrComponents/tk-dualrange/TKDualRange.d.ts +17 -0
- package/dist/CmrComponents/tk-dualrange/TKDualRange.js +65 -0
- package/dist/CmrComponents/tk-dualrange/tk-dual-range.css +140 -0
- package/dist/CmrComponents/tooltip/Tooltip.css +0 -0
- package/dist/CmrComponents/tooltip/Tooltip.d.ts +18 -0
- package/dist/CmrComponents/tooltip/Tooltip.js +30 -0
- package/dist/CmrComponents/upload/Upload.css +5 -0
- package/dist/CmrComponents/upload/Upload.d.ts +80 -0
- package/dist/CmrComponents/upload/Upload.js +185 -0
- package/dist/CmrComponents/upload/UploadWindow.d.ts +15 -0
- package/dist/CmrComponents/upload/UploadWindow.js +286 -0
- package/dist/CmrTable/CmrTable.css +26 -0
- package/dist/CmrTable/CmrTable.d.ts +13 -0
- package/dist/CmrTable/CmrTable.js +47 -0
- package/dist/CmrTabs/CmrTabs.d.ts +7 -0
- package/dist/CmrTabs/CmrTabs.js +64 -0
- package/dist/CmrTabs/tab.model.d.ts +12 -0
- package/dist/CmrTabs/tab.model.js +1 -0
- package/dist/core/app/main/Main.d.ts +6 -0
- package/dist/core/app/main/Main.js +18 -0
- package/dist/core/app/results/Logs.d.ts +1 -0
- package/dist/core/app/results/Logs.js +33 -0
- package/dist/core/app/results/PreprocessJob.d.ts +1 -0
- package/dist/core/app/results/PreprocessJob.js +100 -0
- package/dist/core/app/results/Results.d.ts +15 -0
- package/dist/core/app/results/Results.js +372 -0
- package/dist/core/app/results/Results.scss +92 -0
- package/dist/core/app/results/Rois.d.ts +11 -0
- package/dist/core/app/results/Rois.js +269 -0
- package/dist/core/app/settings/Settings.d.ts +1 -0
- package/dist/core/app/settings/Settings.js +109 -0
- package/dist/core/app/signin/ForgotPassword.d.ts +3 -0
- package/dist/core/app/signin/ForgotPassword.js +142 -0
- package/dist/core/app/signin/Register.d.ts +3 -0
- package/dist/core/app/signin/Register.js +126 -0
- package/dist/core/app/signin/Signin.d.ts +5 -0
- package/dist/core/app/signin/Signin.js +84 -0
- package/dist/core/app/signin/Signin.scss +86 -0
- package/dist/core/app/upload/Upload.d.ts +3 -0
- package/dist/core/app/upload/Upload.js +261 -0
- package/dist/core/app/upload/Upload.scss +0 -0
- package/dist/core/common/components/CmrColorPicker/CmrColorPicker.d.ts +8 -0
- package/dist/core/common/components/CmrColorPicker/CmrColorPicker.js +29 -0
- package/dist/core/common/components/CmrColorPicker/CmrColorPicker.scss +27 -0
- package/dist/core/common/components/NiivueTools/Niivue.css +8 -0
- package/dist/core/common/components/NiivueTools/Niivue.d.ts +14 -0
- package/dist/core/common/components/NiivueTools/Niivue.js +1270 -0
- package/dist/core/common/components/NiivueTools/NiivuePatcher.js +1875 -0
- package/dist/core/common/components/NiivueTools/components/ColorPicker.d.ts +5 -0
- package/dist/core/common/components/NiivueTools/components/ColorPicker.js +68 -0
- package/dist/core/common/components/NiivueTools/components/DrawPlatte.d.ts +10 -0
- package/dist/core/common/components/NiivueTools/components/DrawPlatte.js +88 -0
- package/dist/core/common/components/NiivueTools/components/DrawToolKit.d.ts +32 -0
- package/dist/core/common/components/NiivueTools/components/DrawToolKit.js +164 -0
- package/dist/core/common/components/NiivueTools/components/EraserPlatte.d.ts +10 -0
- package/dist/core/common/components/NiivueTools/components/EraserPlatte.js +43 -0
- package/dist/core/common/components/NiivueTools/components/Layer.d.ts +10 -0
- package/dist/core/common/components/NiivueTools/components/Layer.js +117 -0
- package/dist/core/common/components/NiivueTools/components/LayersPanel.d.ts +8 -0
- package/dist/core/common/components/NiivueTools/components/LayersPanel.js +108 -0
- package/dist/core/common/components/NiivueTools/components/LocationTable.d.ts +9 -0
- package/dist/core/common/components/NiivueTools/components/LocationTable.js +42 -0
- package/dist/core/common/components/NiivueTools/components/MaskPlatte.d.ts +10 -0
- package/dist/core/common/components/NiivueTools/components/MaskPlatte.js +123 -0
- package/dist/core/common/components/NiivueTools/components/NiivuePanel.d.ts +34 -0
- package/dist/core/common/components/NiivueTools/components/NiivuePanel.js +305 -0
- package/dist/core/common/components/NiivueTools/components/NumberPicker.d.ts +8 -0
- package/dist/core/common/components/NiivueTools/components/NumberPicker.js +40 -0
- package/dist/core/common/components/NiivueTools/components/SettingsPanel.d.ts +7 -0
- package/dist/core/common/components/NiivueTools/components/SettingsPanel.js +30 -0
- package/dist/core/common/components/NiivueTools/components/Switch.d.ts +5 -0
- package/dist/core/common/components/NiivueTools/components/Switch.js +26 -0
- package/dist/core/common/components/NiivueTools/components/Toolbar.d.ts +40 -0
- package/dist/core/common/components/NiivueTools/components/Toolbar.js +184 -0
- package/dist/core/common/components/NiivueTools/components/Toolbar.scss +39 -0
- package/dist/core/common/components/NiivueTools/components/stats.d.ts +2 -0
- package/dist/core/common/components/NiivueTools/components/stats.js +13 -0
- package/dist/core/common/components/NiivueTools/index.css +14 -0
- package/dist/core/common/components/NiivueTools/util.js +309 -0
- package/dist/core/common/components/footer/Footer.d.ts +3 -0
- package/dist/core/common/components/footer/Footer.js +20 -0
- package/dist/core/common/components/footer/Footer.scss +5 -0
- package/dist/core/common/utilities/AuthenticatedRequests.d.ts +16 -0
- package/dist/core/common/utilities/AuthenticatedRequests.js +158 -0
- package/dist/core/common/utilities/CalendarHelper.d.ts +5 -0
- package/dist/core/common/utilities/CalendarHelper.js +27 -0
- package/dist/core/common/utilities/DownloadFromText.d.ts +3 -0
- package/dist/core/common/utilities/DownloadFromText.js +20 -0
- package/dist/core/common/utilities/StoreToRequest.d.ts +1 -0
- package/dist/core/common/utilities/StoreToRequest.js +4 -0
- package/dist/core/common/utilities/SystemUtilities.d.ts +4 -0
- package/dist/core/common/utilities/SystemUtilities.js +79 -0
- package/dist/core/common/utilities/file-transformation/anonymize.d.ts +1 -0
- package/dist/core/common/utilities/file-transformation/anonymize.js +114 -0
- package/dist/core/common/utilities/file-transformation/utilities.d.ts +2 -0
- package/dist/core/common/utilities/file-transformation/utilities.js +23 -0
- package/dist/core/common/utilities/index.d.ts +25 -0
- package/dist/core/common/utilities/index.js +118 -0
- package/dist/core/common/utilities/parse-jwt.d.ts +1 -0
- package/dist/core/common/utilities/parse-jwt.js +14 -0
- package/dist/core/components/PasswordRequirements.d.ts +7 -0
- package/dist/core/components/PasswordRequirements.js +30 -0
- package/dist/core/config/AppConfig.d.ts +5 -0
- package/dist/core/config/AppConfig.js +42 -0
- package/dist/core/config/types.d.ts +40 -0
- package/dist/core/config/types.js +1 -0
- package/dist/core/features/authenticate/authenticateActionCreation.d.ts +46 -0
- package/dist/core/features/authenticate/authenticateActionCreation.js +326 -0
- package/dist/core/features/authenticate/authenticateSlice.d.ts +45 -0
- package/dist/core/features/authenticate/authenticateSlice.js +203 -0
- package/dist/core/features/data/dataActionCreation.d.ts +40 -0
- package/dist/core/features/data/dataActionCreation.js +340 -0
- package/dist/core/features/data/dataSlice.d.ts +37 -0
- package/dist/core/features/data/dataSlice.js +87 -0
- package/dist/core/features/jobs/jobActionCreation.d.ts +35 -0
- package/dist/core/features/jobs/jobActionCreation.js +242 -0
- package/dist/core/features/jobs/jobsSlice.d.ts +57 -0
- package/dist/core/features/jobs/jobsSlice.js +54 -0
- package/dist/core/features/rois/resultActionCreation.d.ts +21 -0
- package/dist/core/features/rois/resultActionCreation.js +114 -0
- package/dist/core/features/rois/resultSlice.d.ts +24 -0
- package/dist/core/features/rois/resultSlice.js +68 -0
- package/dist/core/features/rois/roiTypes.d.ts +44 -0
- package/dist/core/features/rois/roiTypes.js +1 -0
- package/dist/core/features/setup/setupActionCreation.d.ts +7 -0
- package/dist/core/features/setup/setupActionCreation.js +100 -0
- package/dist/core/index.d.ts +22 -0
- package/dist/core/index.js +27 -0
- package/dist/core/store/configureStore.d.ts +13 -0
- package/dist/core/store/configureStore.js +38 -0
- package/dist/core/store/hooks.d.ts +11 -0
- package/dist/core/store/hooks.js +5 -0
- package/dist/core/utils/passwordValidation.d.ts +25 -0
- package/dist/core/utils/passwordValidation.js +19 -0
- package/dist/index.d.ts +29 -329
- package/dist/index.js +26 -1402
- package/dist/style.css +47 -0
- package/package.json +309 -41
- package/dist/index.css +0 -170
- package/dist/index.mjs +0 -1354
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
var __assign = (this && this.__assign) || function () {
|
|
2
|
+
__assign = Object.assign || function(t) {
|
|
3
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
4
|
+
s = arguments[i];
|
|
5
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
6
|
+
t[p] = s[p];
|
|
7
|
+
}
|
|
8
|
+
return t;
|
|
9
|
+
};
|
|
10
|
+
return __assign.apply(this, arguments);
|
|
11
|
+
};
|
|
12
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
13
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
14
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
15
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
16
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
17
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
18
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
19
|
+
});
|
|
20
|
+
};
|
|
21
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
22
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
23
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
24
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
25
|
+
function step(op) {
|
|
26
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
27
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
28
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
29
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
30
|
+
switch (op[0]) {
|
|
31
|
+
case 0: case 1: t = op; break;
|
|
32
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
33
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
34
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
35
|
+
default:
|
|
36
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
37
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
38
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
39
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
40
|
+
if (t[2]) _.ops.pop();
|
|
41
|
+
_.trys.pop(); continue;
|
|
42
|
+
}
|
|
43
|
+
op = body.call(thisArg, _);
|
|
44
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
45
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
49
|
+
import { Drawer } from "@mui/material";
|
|
50
|
+
import { Box } from "@mui/material";
|
|
51
|
+
import { IconButton } from "@mui/material";
|
|
52
|
+
import { Button } from "@mui/material";
|
|
53
|
+
import ArrowBackIcon from "@mui/icons-material/ArrowBack";
|
|
54
|
+
import GestureIcon from "@mui/icons-material/Gesture";
|
|
55
|
+
import CodeIcon from "@mui/icons-material/Code";
|
|
56
|
+
import LayersIcon from "@mui/icons-material/Layers";
|
|
57
|
+
import AddIcon from "@mui/icons-material/Add";
|
|
58
|
+
export function LayersPanel(props) {
|
|
59
|
+
function handleAddLayer() {
|
|
60
|
+
var input = document.createElement("input");
|
|
61
|
+
input.type = "file";
|
|
62
|
+
input.onchange = function () {
|
|
63
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
64
|
+
return __generator(this, function (_a) {
|
|
65
|
+
if (input.files) {
|
|
66
|
+
props.onAddLayer(input.files[0]);
|
|
67
|
+
}
|
|
68
|
+
return [2 /*return*/];
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
};
|
|
72
|
+
input.click();
|
|
73
|
+
}
|
|
74
|
+
return (_jsx(Drawer, __assign({ open: props.open, variant: "temporary", anchor: "left", sx: {
|
|
75
|
+
width: props.width
|
|
76
|
+
} }, { children: _jsxs(Box, __assign({ sx: {
|
|
77
|
+
width: props.width,
|
|
78
|
+
display: "flex",
|
|
79
|
+
flexDirection: "row",
|
|
80
|
+
height: "100%"
|
|
81
|
+
} }, { children: [_jsxs(Box, __assign({ sx: {
|
|
82
|
+
width: 48,
|
|
83
|
+
display: "flex",
|
|
84
|
+
flexDirection: "column",
|
|
85
|
+
backgroundColor: "#F8F8F8",
|
|
86
|
+
height: "100%",
|
|
87
|
+
alignItems: "center"
|
|
88
|
+
} }, { children: [_jsx(IconButton, __assign({ style: {
|
|
89
|
+
marginTop: "36px"
|
|
90
|
+
} }, { children: _jsx(LayersIcon, { color: "primary" }) })), _jsx(IconButton, __assign({ style: {
|
|
91
|
+
marginTop: "8px"
|
|
92
|
+
} }, { children: _jsx(GestureIcon, {}) })), _jsx(IconButton, __assign({ style: {
|
|
93
|
+
marginTop: "8px"
|
|
94
|
+
} }, { children: _jsx(CodeIcon, {}) }))] })), _jsxs(Box, __assign({ sx: {
|
|
95
|
+
width: props.width,
|
|
96
|
+
role: "presentation",
|
|
97
|
+
display: "flex",
|
|
98
|
+
height: "100%",
|
|
99
|
+
flexDirection: "column",
|
|
100
|
+
justifyContent: "flex-start",
|
|
101
|
+
ml: 1,
|
|
102
|
+
mr: 1
|
|
103
|
+
} }, { children: [_jsx(Box, __assign({ sx: {
|
|
104
|
+
display: "flex"
|
|
105
|
+
} }, { children: _jsx(IconButton, __assign({ onClick: props.onToggleMenu, style: { marginLeft: "auto" } }, { children: _jsx(ArrowBackIcon, {}) })) })), _jsx(Box, __assign({ sx: {
|
|
106
|
+
display: "flex"
|
|
107
|
+
} }, { children: _jsx(Button, __assign({ onClick: handleAddLayer, endIcon: _jsx(AddIcon, {}), size: "small" }, { children: "Add Layer" })) })), props.children] }))] })) })));
|
|
108
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
export default function LocationTable(props: {
|
|
3
|
+
isVisible: boolean;
|
|
4
|
+
decimalPrecision: number;
|
|
5
|
+
tableData: any[];
|
|
6
|
+
showDistribution?: boolean;
|
|
7
|
+
style: React.CSSProperties;
|
|
8
|
+
label?: string;
|
|
9
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
var __assign = (this && this.__assign) || function () {
|
|
2
|
+
__assign = Object.assign || function(t) {
|
|
3
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
4
|
+
s = arguments[i];
|
|
5
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
6
|
+
t[p] = s[p];
|
|
7
|
+
}
|
|
8
|
+
return t;
|
|
9
|
+
};
|
|
10
|
+
return __assign.apply(this, arguments);
|
|
11
|
+
};
|
|
12
|
+
import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
|
|
13
|
+
import Box from "@mui/material/Box";
|
|
14
|
+
export default function LocationTable(props) {
|
|
15
|
+
var display = "none";
|
|
16
|
+
if (props.isVisible) {
|
|
17
|
+
display = "";
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
display = "none";
|
|
21
|
+
}
|
|
22
|
+
var data = props.tableData[0];
|
|
23
|
+
var value = (data === null || data === void 0 ? void 0 : data.power)
|
|
24
|
+
? data
|
|
25
|
+
? (data.value / data.transformA + data.transformB).toExponential(3)
|
|
26
|
+
: undefined
|
|
27
|
+
: data
|
|
28
|
+
? data.value.toFixed(props.decimalPrecision)
|
|
29
|
+
: undefined;
|
|
30
|
+
return (_jsx(Box, __assign({ sx: {
|
|
31
|
+
display: display === "none" ? "none" : "flex",
|
|
32
|
+
height: "100%",
|
|
33
|
+
width: props.showDistribution ? "70%" : "100%"
|
|
34
|
+
}, style: props.style }, { children: _jsxs("div", __assign({ className: "row" }, { children: [_jsx("div", __assign({ className: "col-auto" }, { children: props.label && _jsxs(HintText, { children: [props.label, ":"] }) })), _jsx("div", __assign({ className: "col-auto" }, { children: _jsx(HintText, { children: "Value: ".concat(value ? value : undefined) }) })), _jsx("div", __assign({ className: "col-auto" }, { children: _jsx(HintText, { children: data
|
|
35
|
+
? "Coordinates: (".concat(data.mm[0].toFixed(props.decimalPrecision), ", ").concat(data.mm[1].toFixed(props.decimalPrecision), ", ").concat(data.mm[2].toFixed(props.decimalPrecision), ")")
|
|
36
|
+
: "Coordinates: undefined" }) })), _jsx("div", __assign({ className: "col-auto" }, { children: _jsx(HintText, { children: data
|
|
37
|
+
? "Voxel location: (".concat(data.vox[0], ",").concat(data.vox[1], ",").concat(data.vox[2], ")")
|
|
38
|
+
: "Voxel location: undefined" }) }))] })) })));
|
|
39
|
+
}
|
|
40
|
+
var HintText = function (props) {
|
|
41
|
+
return (_jsx("span", __assign({ style: { color: "white", fontSize: "inherit" } }, { children: props.children })));
|
|
42
|
+
};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
interface MaskPlatteProps {
|
|
3
|
+
expanded: boolean;
|
|
4
|
+
nv: any;
|
|
5
|
+
setMaskColor: (color: string | undefined) => void;
|
|
6
|
+
resampleImage: () => void;
|
|
7
|
+
unfocus: () => void;
|
|
8
|
+
}
|
|
9
|
+
declare const MaskPlatte: React.FC<MaskPlatteProps>;
|
|
10
|
+
export default MaskPlatte;
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
var __assign = (this && this.__assign) || function () {
|
|
2
|
+
__assign = Object.assign || function(t) {
|
|
3
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
4
|
+
s = arguments[i];
|
|
5
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
6
|
+
t[p] = s[p];
|
|
7
|
+
}
|
|
8
|
+
return t;
|
|
9
|
+
};
|
|
10
|
+
return __assign.apply(this, arguments);
|
|
11
|
+
};
|
|
12
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
13
|
+
import { useEffect, useState } from "react";
|
|
14
|
+
import { Stack, IconButton, Typography, Box } from "@mui/material";
|
|
15
|
+
import FiberManualRecordIcon from "@mui/icons-material/FiberManualRecord";
|
|
16
|
+
import CheckIcon from "@mui/icons-material/Check";
|
|
17
|
+
import CloseIcon from "@mui/icons-material/Close";
|
|
18
|
+
import { InvertibleDualSlider, CmrCheckbox } from "../../../../../index";
|
|
19
|
+
var MaskPlatte = function (_a) {
|
|
20
|
+
var expanded = _a.expanded, nv = _a.nv, setMaskColor = _a.setMaskColor, resampleImage = _a.resampleImage, unfocus = _a.unfocus;
|
|
21
|
+
var _b = useState(0), colorIndex = _b[0], storeColorIndex = _b[1];
|
|
22
|
+
var _c = useState("red"), maskColor = _c[0], storeMaskColor = _c[1];
|
|
23
|
+
var _d = useState(false), checked = _d[0], setChecked = _d[1];
|
|
24
|
+
var _e = useState(undefined), original = _e[0], setOriginal = _e[1];
|
|
25
|
+
var colors = ["red", "green", "blue", "yellow", "cyan", "#e81ce8"];
|
|
26
|
+
var filledOptions = colors.map(function (color) { return (_jsx(FiberManualRecordIcon, { sx: { color: color } })); });
|
|
27
|
+
// if (expanded) { // TODO RJW: doing this this causes errors, skip for now
|
|
28
|
+
// setMaskColor(maskColor);
|
|
29
|
+
// } else {
|
|
30
|
+
// setMaskColor(undefined);
|
|
31
|
+
// }
|
|
32
|
+
var _f = useState(nv.volumes[0] ? nv.volumes[0].vox_min : 0), min = _f[0], setMin = _f[1];
|
|
33
|
+
var _g = useState(nv.volumes[0] ? nv.volumes[0].vox_max : 1), max = _g[0], setMax = _g[1];
|
|
34
|
+
var cancelMask = function () {
|
|
35
|
+
if (original)
|
|
36
|
+
nv.drawBitmap = new Uint8Array(original);
|
|
37
|
+
else
|
|
38
|
+
return;
|
|
39
|
+
nv.refreshDrawing(true);
|
|
40
|
+
resampleImage();
|
|
41
|
+
setOriginal(undefined);
|
|
42
|
+
};
|
|
43
|
+
useEffect(function () {
|
|
44
|
+
if (!expanded) {
|
|
45
|
+
cancelMask();
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
if (colorIndex != -1)
|
|
49
|
+
nv.fillRange(min, max, colorIndex + 1, checked, original, setOriginal);
|
|
50
|
+
resampleImage();
|
|
51
|
+
}
|
|
52
|
+
}, [expanded]);
|
|
53
|
+
useEffect(function () {
|
|
54
|
+
if (colorIndex != -1 && expanded)
|
|
55
|
+
nv.fillRange(min, max, colorIndex + 1, checked, original, setOriginal);
|
|
56
|
+
}, [min, max, checked]);
|
|
57
|
+
return (_jsxs(Stack, __assign({ style: {
|
|
58
|
+
position: "absolute",
|
|
59
|
+
top: "100%",
|
|
60
|
+
left: 0,
|
|
61
|
+
zIndex: 10,
|
|
62
|
+
border: "".concat(expanded ? "1px" : 0, " solid #bbb"),
|
|
63
|
+
maxWidth: expanded ? 450 : 0,
|
|
64
|
+
// transition: 'all 0.5s',
|
|
65
|
+
overflow: "hidden",
|
|
66
|
+
borderRadius: "16px",
|
|
67
|
+
borderTopLeftRadius: "6pt",
|
|
68
|
+
borderTopRightRadius: "6pt",
|
|
69
|
+
background: "#333"
|
|
70
|
+
}, direction: "column" }, { children: [_jsx(Stack, __assign({ alignItems: "center" }, { children: _jsx(Typography, __assign({ color: "white", gutterBottom: true, width: "100%", marginLeft: "10pt", fontSize: "11pt", alignItems: "start" }, { children: "Mask range:" })) })), _jsxs(Stack
|
|
71
|
+
// style={{
|
|
72
|
+
// border: `${expandDrawOptions ? '1px' : 0} solid #ccc`,
|
|
73
|
+
// maxWidth: expandDrawOptions ? 300 : 0,
|
|
74
|
+
// transition: 'all 0.5s',
|
|
75
|
+
// overflow: 'hidden',
|
|
76
|
+
// borderRadius: '16px'
|
|
77
|
+
// }}
|
|
78
|
+
, __assign({
|
|
79
|
+
// style={{
|
|
80
|
+
// border: `${expandDrawOptions ? '1px' : 0} solid #ccc`,
|
|
81
|
+
// maxWidth: expandDrawOptions ? 300 : 0,
|
|
82
|
+
// transition: 'all 0.5s',
|
|
83
|
+
// overflow: 'hidden',
|
|
84
|
+
// borderRadius: '16px'
|
|
85
|
+
// }}
|
|
86
|
+
direction: "row", flexDirection: "row", justifyContent: "center" }, { children: [filledOptions.map(function (value, index) { return (_jsx(IconButton, __assign({ onClick: function () {
|
|
87
|
+
storeColorIndex(index);
|
|
88
|
+
storeMaskColor(colors[index]);
|
|
89
|
+
setMaskColor(colors[index]);
|
|
90
|
+
nv.fillRange(min, max, index + 1, checked, original, setOriginal);
|
|
91
|
+
resampleImage();
|
|
92
|
+
} }, { children: value }), index)); }), _jsx(CmrCheckbox, __assign({ style: { color: "white" }, onChange: function (e) {
|
|
93
|
+
e.stopPropagation();
|
|
94
|
+
setChecked(e.target.checked);
|
|
95
|
+
resampleImage();
|
|
96
|
+
} }, { children: "Inverted" }))] })), _jsx(Stack, __assign({ direction: "row", sx: { mb: 1 } }, { children: _jsx(Box, __assign({ width: 400, style: { paddingLeft: "10px", paddingRight: "10px" } }, { children: _jsx(InvertibleDualSlider, { name: "", min: nv.volumes[0] ? nv.volumes[0].vox_min : 0, max: nv.volumes[0] ? nv.volumes[0].vox_max : 1, reverse: checked, setMin: setMin, setMax: setMax, onFinalize: function () {
|
|
97
|
+
resampleImage();
|
|
98
|
+
} }) })) })), _jsxs(Stack
|
|
99
|
+
// style={{
|
|
100
|
+
// border: `${expandDrawOptions ? '1px' : 0} solid #ccc`,
|
|
101
|
+
// maxWidth: expandDrawOptions ? 300 : 0,
|
|
102
|
+
// transition: 'all 0.5s',
|
|
103
|
+
// overflow: 'hidden',
|
|
104
|
+
// borderRadius: '16px'
|
|
105
|
+
// }}
|
|
106
|
+
, __assign({
|
|
107
|
+
// style={{
|
|
108
|
+
// border: `${expandDrawOptions ? '1px' : 0} solid #ccc`,
|
|
109
|
+
// maxWidth: expandDrawOptions ? 300 : 0,
|
|
110
|
+
// transition: 'all 0.5s',
|
|
111
|
+
// overflow: 'hidden',
|
|
112
|
+
// borderRadius: '16px'
|
|
113
|
+
// }}
|
|
114
|
+
direction: "row", flexDirection: "row", justifyContent: "center" }, { children: [_jsx(IconButton, __assign({ onClick: function () {
|
|
115
|
+
setOriginal(undefined);
|
|
116
|
+
nv.drawAddUndoBitmapWithHiddenVoxels();
|
|
117
|
+
unfocus();
|
|
118
|
+
} }, { children: _jsx(CheckIcon, { style: { color: "green" } }) })), _jsx(IconButton, __assign({ onClick: function () {
|
|
119
|
+
cancelMask();
|
|
120
|
+
unfocus();
|
|
121
|
+
} }, { children: _jsx(CloseIcon, { style: { color: "red" } }) }))] }))] })));
|
|
122
|
+
};
|
|
123
|
+
export default MaskPlatte;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { DrawToolkitProps } from "./DrawToolKit";
|
|
3
|
+
import "./Toolbar.scss";
|
|
4
|
+
interface NiivuePanelProps {
|
|
5
|
+
nv: any;
|
|
6
|
+
pipelineID: string;
|
|
7
|
+
locationTableVisible: boolean;
|
|
8
|
+
locationData: any[];
|
|
9
|
+
decimalPrecision: number;
|
|
10
|
+
drawToolkitProps: DrawToolkitProps;
|
|
11
|
+
resampleImage: () => void;
|
|
12
|
+
layerList: React.ComponentProps<any>[];
|
|
13
|
+
mins: number[];
|
|
14
|
+
maxs: number[];
|
|
15
|
+
mms: number[];
|
|
16
|
+
rois: {}[];
|
|
17
|
+
min: number;
|
|
18
|
+
max: number;
|
|
19
|
+
setMin: (min: number) => void;
|
|
20
|
+
setMax: (max: number) => void;
|
|
21
|
+
zipAndSendROI: (url: string, filename: string, blob: Blob) => Promise<void>;
|
|
22
|
+
unzipAndRenderROI: (url: string) => Promise<void>;
|
|
23
|
+
setLabelAlias: (label: string | number, alias: string) => void;
|
|
24
|
+
transformFactors: {
|
|
25
|
+
a: number;
|
|
26
|
+
b: number;
|
|
27
|
+
};
|
|
28
|
+
rangeKey: number;
|
|
29
|
+
gamma: number;
|
|
30
|
+
gammaKey: number;
|
|
31
|
+
setGamma: (val: number) => void;
|
|
32
|
+
}
|
|
33
|
+
export declare function NiivuePanel(props: NiivuePanelProps): import("react/jsx-runtime").JSX.Element;
|
|
34
|
+
export {};
|
|
@@ -0,0 +1,305 @@
|
|
|
1
|
+
var __assign = (this && this.__assign) || function () {
|
|
2
|
+
__assign = Object.assign || function(t) {
|
|
3
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
4
|
+
s = arguments[i];
|
|
5
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
6
|
+
t[p] = s[p];
|
|
7
|
+
}
|
|
8
|
+
return t;
|
|
9
|
+
};
|
|
10
|
+
return __assign.apply(this, arguments);
|
|
11
|
+
};
|
|
12
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
13
|
+
import React from "react";
|
|
14
|
+
import { Box, Card, CardContent } from "@mui/material";
|
|
15
|
+
import LocationTable from "./LocationTable";
|
|
16
|
+
import { ROITable } from "../../../../app/results/Rois";
|
|
17
|
+
import { DrawToolkit } from "./DrawToolKit";
|
|
18
|
+
// import GUI from "lil-gui";
|
|
19
|
+
import "./Toolbar.scss";
|
|
20
|
+
import TKDualRange from "../../../../../CmrComponents/tk-dualrange/TKDualRange";
|
|
21
|
+
function toRatio(val, min, max) {
|
|
22
|
+
return (val - min) / (max - min);
|
|
23
|
+
}
|
|
24
|
+
export function NiivuePanel(props) {
|
|
25
|
+
var _a, _b, _c, _d;
|
|
26
|
+
var sliceControl = React.useRef(null);
|
|
27
|
+
var canvas = React.useRef(null);
|
|
28
|
+
var histogram = React.useRef(null);
|
|
29
|
+
var mins = props.mins, maxs = props.maxs, mms = props.mms;
|
|
30
|
+
// const {gui} = createGUI(props.nv);
|
|
31
|
+
var height = window.innerHeight * 0.75;
|
|
32
|
+
// This hook is for initialization, called only once
|
|
33
|
+
React.useEffect(function () {
|
|
34
|
+
props.nv.attachTo("niiCanvas");
|
|
35
|
+
props.nv.opts.dragMode = props.nv.dragModes.pan;
|
|
36
|
+
}, [canvas]);
|
|
37
|
+
// This hook is called when show distribution state changed
|
|
38
|
+
React.useEffect(function () {
|
|
39
|
+
props.nv.resizeListener();
|
|
40
|
+
props.nv.setMultiplanarLayout(2);
|
|
41
|
+
props.nv.setMultiplanarPadPixels(10);
|
|
42
|
+
props.resampleImage();
|
|
43
|
+
}, [window.innerWidth, window.innerHeight]);
|
|
44
|
+
React.useEffect(function () {
|
|
45
|
+
setTimeout(function () {
|
|
46
|
+
props.nv.resizeListener();
|
|
47
|
+
props.nv.setMultiplanarLayout(2);
|
|
48
|
+
props.nv.setMultiplanarPadPixels(10);
|
|
49
|
+
props.resampleImage();
|
|
50
|
+
}, 300);
|
|
51
|
+
}, []);
|
|
52
|
+
React.useEffect(function () {
|
|
53
|
+
props.resampleImage();
|
|
54
|
+
}, [histogram]);
|
|
55
|
+
var _e = React.useState(false), pause = _e[0], pauseUpdate = _e[1];
|
|
56
|
+
// const [rangeMin, setRangeMin] = useState(undefined);
|
|
57
|
+
// const [rangeMax, setRangemax] = useState(undefined);
|
|
58
|
+
//Transform factors are applied when scientific notation for voxel values become necessary
|
|
59
|
+
var _f = props.transformFactors, a = _f.a, b = _f.b;
|
|
60
|
+
var safeSpan = function (i) { return Math.max(1e-9, maxs[i] - mins[i]); };
|
|
61
|
+
var ratio = function (val, i) { return (val - mins[i]) / safeSpan(i); };
|
|
62
|
+
// --- X Slice ---
|
|
63
|
+
// helper to clamp and round
|
|
64
|
+
var clamp = function (v, lo, hi) {
|
|
65
|
+
return Math.max(lo, Math.min(hi, v));
|
|
66
|
+
};
|
|
67
|
+
var round3 = function (v) { return Math.round(v * 1000) / 1000; };
|
|
68
|
+
// Local state mirrors props.mms[0]
|
|
69
|
+
var _g = React.useState(round3(mms[0])), xVal = _g[0], setXVal = _g[1];
|
|
70
|
+
// Keep local state in sync when Niivue (or parent) updates mms[0]
|
|
71
|
+
React.useEffect(function () {
|
|
72
|
+
setXVal(round3(mms[0]));
|
|
73
|
+
}, [mms[0]]);
|
|
74
|
+
// Shared updater: write to Niivue, then draw
|
|
75
|
+
var applyX = function (val) {
|
|
76
|
+
var v = clamp(round3(val), mins[0], maxs[0]);
|
|
77
|
+
setXVal(v);
|
|
78
|
+
// Use local yVal/zVal so we don't regress other axes
|
|
79
|
+
props.nv.scene.crosshairPos = [ratio(v, 0), ratio(yVal, 1), ratio(zVal, 2)];
|
|
80
|
+
props.nv.drawScene();
|
|
81
|
+
};
|
|
82
|
+
// --- Y Slice ---
|
|
83
|
+
var _h = React.useState(round3(mms[1])), yVal = _h[0], setYVal = _h[1];
|
|
84
|
+
React.useEffect(function () {
|
|
85
|
+
setYVal(round3(mms[1]));
|
|
86
|
+
}, [mms[1]]);
|
|
87
|
+
var applyY = function (val) {
|
|
88
|
+
var v = clamp(round3(val), mins[1], maxs[1]);
|
|
89
|
+
setYVal(v);
|
|
90
|
+
// Use local xVal/zVal
|
|
91
|
+
props.nv.scene.crosshairPos = [ratio(xVal, 0), ratio(v, 1), ratio(zVal, 2)];
|
|
92
|
+
props.nv.drawScene();
|
|
93
|
+
};
|
|
94
|
+
// --- Z Slice ---
|
|
95
|
+
var _j = React.useState(round3(mms[2])), zVal = _j[0], setZVal = _j[1];
|
|
96
|
+
React.useEffect(function () {
|
|
97
|
+
setZVal(round3(mms[2]));
|
|
98
|
+
}, [mms[2]]);
|
|
99
|
+
var applyZ = function (val) {
|
|
100
|
+
var v = clamp(round3(val), mins[2], maxs[2]);
|
|
101
|
+
setZVal(v);
|
|
102
|
+
// Use local xVal/yVal
|
|
103
|
+
props.nv.scene.crosshairPos = [ratio(xVal, 0), ratio(yVal, 1), ratio(v, 2)];
|
|
104
|
+
props.nv.drawScene();
|
|
105
|
+
};
|
|
106
|
+
return (_jsxs(Box, __assign({ sx: {
|
|
107
|
+
width: "100%",
|
|
108
|
+
display: "flex",
|
|
109
|
+
flexDirection: {
|
|
110
|
+
xs: "column",
|
|
111
|
+
md: "row"
|
|
112
|
+
},
|
|
113
|
+
// minHeight: 0,
|
|
114
|
+
flexWrap: "nowrap"
|
|
115
|
+
} }, { children: [_jsxs(Box, __assign({ sx: {
|
|
116
|
+
width: {
|
|
117
|
+
xs: "100%",
|
|
118
|
+
md: "63%"
|
|
119
|
+
},
|
|
120
|
+
display: "flex",
|
|
121
|
+
flexDirection: "column",
|
|
122
|
+
minHeight: 0,
|
|
123
|
+
alignItems: "center",
|
|
124
|
+
justifyContent: "flex-start",
|
|
125
|
+
mb: { xs: 2, md: 0 }
|
|
126
|
+
} }, { children: [_jsx(LocationTable, { tableData: props.locationData, isVisible: true, decimalPrecision: props.decimalPrecision, style: {
|
|
127
|
+
width: "100%",
|
|
128
|
+
height: "30pt",
|
|
129
|
+
paddingTop: "10px",
|
|
130
|
+
color: "white",
|
|
131
|
+
background: "black"
|
|
132
|
+
} }), _jsx(Box, __assign({ sx: {
|
|
133
|
+
position: "relative",
|
|
134
|
+
width: "100%",
|
|
135
|
+
height: {
|
|
136
|
+
xs: 300,
|
|
137
|
+
sm: 400,
|
|
138
|
+
md: 1035
|
|
139
|
+
}
|
|
140
|
+
} }, { children: _jsx("canvas", { id: "niiCanvas", ref: canvas, style: {
|
|
141
|
+
position: "absolute",
|
|
142
|
+
top: 0,
|
|
143
|
+
left: 0,
|
|
144
|
+
width: "100%",
|
|
145
|
+
height: "100%"
|
|
146
|
+
} }) }))] })), _jsxs(Box, __assign({ sx: {
|
|
147
|
+
width: {
|
|
148
|
+
xs: "100%",
|
|
149
|
+
md: "35%"
|
|
150
|
+
},
|
|
151
|
+
display: "flex",
|
|
152
|
+
flexDirection: "column",
|
|
153
|
+
ml: {
|
|
154
|
+
xs: 0,
|
|
155
|
+
md: 1
|
|
156
|
+
},
|
|
157
|
+
minHeight: 0,
|
|
158
|
+
height: "100%"
|
|
159
|
+
} }, { children: [_jsx(DrawToolkit, __assign({}, props.drawToolkitProps, { style: {
|
|
160
|
+
height: "30pt",
|
|
161
|
+
marginBottom: "10px"
|
|
162
|
+
} })), _jsx(Box, __assign({ id: "controlDock", className: "title", style: { width: "100%" }, ref: sliceControl }, { children: "Slice Position" })), _jsx(Card, __assign({ variant: "outlined", sx: {
|
|
163
|
+
mb: 2,
|
|
164
|
+
borderTopLeftRadius: 0,
|
|
165
|
+
borderTopRightRadius: 0
|
|
166
|
+
} }, { children: _jsx(CardContent, { children: _jsxs(Box, __assign({ style: {
|
|
167
|
+
display: "flex",
|
|
168
|
+
flex: 1,
|
|
169
|
+
minWidth: "245px",
|
|
170
|
+
flexDirection: "column"
|
|
171
|
+
} }, { children: [_jsxs("div", __assign({ style: { marginBottom: 20 } }, { children: [_jsxs("div", __assign({ style: {
|
|
172
|
+
display: "flex",
|
|
173
|
+
alignItems: "center",
|
|
174
|
+
gap: 10,
|
|
175
|
+
marginBottom: 6
|
|
176
|
+
} }, { children: [_jsx("label", __assign({ htmlFor: "xSlice" }, { children: "X:" })), _jsx("input", { type: "number", value: xVal, min: mins[0], max: maxs[0], step: 1, onChange: function (e) {
|
|
177
|
+
var next = Number(e.target.value);
|
|
178
|
+
if (!Number.isFinite(next))
|
|
179
|
+
return;
|
|
180
|
+
applyX(next);
|
|
181
|
+
}, onBlur: function (e) {
|
|
182
|
+
var next = Number(e.target.value);
|
|
183
|
+
applyX(clamp(next, mins[0], maxs[0]));
|
|
184
|
+
}, style: {
|
|
185
|
+
width: 80,
|
|
186
|
+
padding: "4px 6px",
|
|
187
|
+
borderRadius: 6,
|
|
188
|
+
border: "1px solid #ccc",
|
|
189
|
+
fontSize: "0.9rem"
|
|
190
|
+
} })] })), _jsx("input", { id: "xSlice", type: "range", min: mins[0], max: maxs[0], step: 1, value: xVal, onChange: function (e) {
|
|
191
|
+
var next = Number(e.target.value);
|
|
192
|
+
applyX(next);
|
|
193
|
+
}, style: {
|
|
194
|
+
width: "100%",
|
|
195
|
+
accentColor: "#580f8b"
|
|
196
|
+
} })] })), _jsxs("div", __assign({ style: { marginBottom: 20 } }, { children: [_jsxs("div", __assign({ style: {
|
|
197
|
+
display: "flex",
|
|
198
|
+
alignItems: "center",
|
|
199
|
+
gap: 10,
|
|
200
|
+
marginBottom: 6
|
|
201
|
+
} }, { children: [_jsx("label", __assign({ htmlFor: "ySlice" }, { children: "Y:" })), _jsx("input", { type: "number",
|
|
202
|
+
// keep the input's value as a number for smooth dragging,
|
|
203
|
+
// but still *show* 3 decimals by formatting on blur.
|
|
204
|
+
value: yVal, min: mins[1], max: maxs[1], step: 0.001, onChange: function (e) {
|
|
205
|
+
var next = Number(e.target.value);
|
|
206
|
+
if (!Number.isFinite(next))
|
|
207
|
+
return;
|
|
208
|
+
applyY(next);
|
|
209
|
+
}, onBlur: function (e) {
|
|
210
|
+
var next = Number(e.target.value);
|
|
211
|
+
// snap the field to 3-decimal formatting on blur
|
|
212
|
+
applyY(next);
|
|
213
|
+
}, style: {
|
|
214
|
+
width: 100,
|
|
215
|
+
padding: "4px 6px",
|
|
216
|
+
borderRadius: 6,
|
|
217
|
+
border: "1px solid #ccc",
|
|
218
|
+
fontSize: "0.9rem"
|
|
219
|
+
} })] })), _jsx("input", { id: "ySlice", type: "range", min: mins[1], max: maxs[1], step: 0.001, value: yVal, onChange: function (e) {
|
|
220
|
+
var next = Number(e.target.value);
|
|
221
|
+
applyY(next);
|
|
222
|
+
}, style: {
|
|
223
|
+
width: "100%",
|
|
224
|
+
accentColor: "#580f8b"
|
|
225
|
+
} })] })), _jsxs("div", { children: [_jsxs("div", __assign({ style: {
|
|
226
|
+
display: "flex",
|
|
227
|
+
alignItems: "center",
|
|
228
|
+
gap: 10,
|
|
229
|
+
marginBottom: 6
|
|
230
|
+
} }, { children: [_jsx("label", __assign({ htmlFor: "zSlice" }, { children: "Z:" })), _jsx("input", { type: "number", value: zVal.toFixed(3), min: mins[2], max: maxs[2], step: 0.001, onChange: function (e) {
|
|
231
|
+
var next = Number(e.target.value);
|
|
232
|
+
if (!Number.isFinite(next))
|
|
233
|
+
return;
|
|
234
|
+
applyZ(next);
|
|
235
|
+
}, onBlur: function (e) {
|
|
236
|
+
var next = Number(e.target.value);
|
|
237
|
+
applyZ(clamp(next, mins[2], maxs[2]));
|
|
238
|
+
}, style: {
|
|
239
|
+
width: 100,
|
|
240
|
+
padding: "4px 6px",
|
|
241
|
+
borderRadius: 6,
|
|
242
|
+
border: "1px solid #ccc",
|
|
243
|
+
fontSize: "0.9rem"
|
|
244
|
+
} })] })), _jsx("input", { id: "zSlice", type: "range", min: mins[2], max: maxs[2], step: 0.001, value: zVal, onChange: function (e) {
|
|
245
|
+
var next = Number(e.target.value);
|
|
246
|
+
applyZ(next);
|
|
247
|
+
}, style: {
|
|
248
|
+
width: "100%",
|
|
249
|
+
accentColor: "#580f8b"
|
|
250
|
+
} })] })] })) }) })), _jsx(Box, __assign({ id: "controlDock", className: "title", style: { width: "100%" }, ref: sliceControl }, { children: "Contast Adjustments" })), _jsx(Card, __assign({ variant: "outlined", sx: {
|
|
251
|
+
mb: 2,
|
|
252
|
+
borderTopLeftRadius: 0,
|
|
253
|
+
borderTopRightRadius: 0
|
|
254
|
+
} }, { children: _jsx(CardContent, { children: _jsxs(Box, __assign({ style: {
|
|
255
|
+
display: "flex",
|
|
256
|
+
flex: 1,
|
|
257
|
+
minWidth: "245px",
|
|
258
|
+
flexDirection: "column"
|
|
259
|
+
} }, { children: [_jsx(TKDualRange, { name: "Values:",
|
|
260
|
+
/* Domain in REAL space: robust range for the track */
|
|
261
|
+
minDomain: (_b = (_a = props.nv.volumes[0]) === null || _a === void 0 ? void 0 : _a.robust_min) !== null && _b !== void 0 ? _b : 0, maxDomain: (_d = (_c = props.nv.volumes[0]) === null || _c === void 0 ? void 0 : _c.robust_max) !== null && _d !== void 0 ? _d : 1,
|
|
262
|
+
/* Current window in REAL space: cal_min / cal_max mirrored in React */
|
|
263
|
+
valueLow: props.min, valueHigh: props.max,
|
|
264
|
+
/* When user drags either thumb or edits the inputs */
|
|
265
|
+
onChangeLow: function (min) {
|
|
266
|
+
var v = props.nv.volumes[0];
|
|
267
|
+
if (!v)
|
|
268
|
+
return;
|
|
269
|
+
v.cal_min = min;
|
|
270
|
+
props.nv.refreshLayers(v, 0, props.nv.volumes.length);
|
|
271
|
+
props.nv.drawScene();
|
|
272
|
+
props.setMin(min);
|
|
273
|
+
}, onChangeHigh: function (max) {
|
|
274
|
+
var v = props.nv.volumes[0];
|
|
275
|
+
if (!v)
|
|
276
|
+
return;
|
|
277
|
+
v.cal_max = max;
|
|
278
|
+
props.nv.refreshLayers(v, 0, props.nv.volumes.length);
|
|
279
|
+
props.nv.drawScene();
|
|
280
|
+
props.setMax(max);
|
|
281
|
+
},
|
|
282
|
+
/* Preserve your value masking (scientific notation pair) */
|
|
283
|
+
transform: function (x) { return x / a + b; }, inverse: function (y) { return a * y - a * b; },
|
|
284
|
+
/* Optional tuning to feel closer to TestKarts */
|
|
285
|
+
step: 0.001, precision: 3, accentColor: "#580f8b" }), _jsxs("div", __assign({ style: { marginTop: 12 } }, { children: [_jsxs("label", __assign({ htmlFor: "gamma", style: {
|
|
286
|
+
display: "block",
|
|
287
|
+
marginBottom: 6
|
|
288
|
+
} }, { children: ["Gamma: ", props.gamma.toFixed(2)] })), _jsx("input", { id: "gamma", type: "range", min: 0.1, max: 3.0, step: 0.05, value: props.gamma, onChange: function (e) {
|
|
289
|
+
var val = Number(e.target.value);
|
|
290
|
+
props.setGamma(val); // update in Niivue.jsx
|
|
291
|
+
props.nv.setGamma(val); // update the Niivue engine
|
|
292
|
+
}, style: {
|
|
293
|
+
width: "100%",
|
|
294
|
+
accentColor: "#580f8b"
|
|
295
|
+
} }, props.gammaKey)] })), _jsx(Box, __assign({ style: { height: "100%" } }, { children: props.layerList }))] })) }) })), _jsxs(Box, __assign({ sx: { width: "100%", height: 600 } }, { children: [_jsx(Box, { ref: histogram, id: "histoplot", sx: {
|
|
296
|
+
width: "100%",
|
|
297
|
+
height: 250,
|
|
298
|
+
mb: 2
|
|
299
|
+
} }), _jsx(Box, __assign({ sx: { width: "100%", height: 350 } }, { children: _jsx(ROITable, { pipelineID: props.pipelineID, rois: props.rois, style: {
|
|
300
|
+
width: "100%",
|
|
301
|
+
height: "100%",
|
|
302
|
+
display: "flex",
|
|
303
|
+
flexDirection: "column"
|
|
304
|
+
}, nv: props.nv, resampleImage: props.resampleImage, unpackROI: props.unzipAndRenderROI, zipAndSendROI: props.zipAndSendROI, setLabelAlias: props.setLabelAlias }) }))] }))] }))] })));
|
|
305
|
+
}
|