@haniffalab/cherita-react 0.2.0-dev.2024-05-21.ca7d726c → 0.2.0-dev.2024-09-26.f9979478
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/App.scss +67 -12
- package/dist/components/Offcanvas/index.js +9 -6
- package/dist/components/dotplot/Dotplot.js +5 -189
- package/dist/components/dotplot/DotplotControls.js +197 -0
- package/dist/components/heatmap/Heatmap.js +5 -31
- package/dist/components/heatmap/HeatmapControls.js +36 -0
- package/dist/components/matrixplot/Matrixplot.js +5 -59
- package/dist/components/matrixplot/MatrixplotControls.js +65 -0
- package/dist/components/obs-list/ObsList.js +251 -93
- package/dist/components/obs-list/ObsValueList.js +101 -0
- package/dist/components/obsm-list/ObsmList.js +25 -16
- package/dist/components/scatterplot/Legend.js +28 -36
- package/dist/components/scatterplot/Scatterplot.js +303 -119
- package/dist/components/scatterplot/ScatterplotControls.js +93 -0
- package/dist/components/scatterplot/SpatialControls.js +172 -0
- package/dist/components/scatterplot/Toolbox.js +18 -72
- package/dist/components/search-bar/SearchBar.js +2 -2
- package/dist/components/search-bar/SearchResults.js +2 -2
- package/dist/components/var-list/VarList.js +102 -40
- package/dist/components/violin/Violin.js +7 -46
- package/dist/components/violin/ViolinControls.js +50 -0
- package/dist/constants/colorscales.js +28 -0
- package/dist/constants/constants.js +11 -43
- package/dist/context/DatasetContext.js +122 -23
- package/dist/helpers/color-helper.js +54 -21
- package/dist/helpers/zarr-helper.js +39 -17
- package/dist/index.js +17 -11
- package/dist/utils/LoadingIndicators.js +33 -0
- package/dist/utils/requests.js +1 -1
- package/dist/utils/search.js +4 -3
- package/package.json +10 -4
- package/dist/utils/LoadingSpinner.js +0 -44
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.ObsValueList = ObsValueList;
|
|
7
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
8
|
+
var _reactVirtual = require("@tanstack/react-virtual");
|
|
9
|
+
var _lodash = _interopRequireDefault(require("lodash"));
|
|
10
|
+
var _reactBootstrap = require("react-bootstrap");
|
|
11
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
12
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
13
|
+
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
14
|
+
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
15
|
+
function ObsValueList(_ref) {
|
|
16
|
+
var _virtualItems$0$start, _virtualItems$;
|
|
17
|
+
let {
|
|
18
|
+
item,
|
|
19
|
+
onChange,
|
|
20
|
+
getFillColor
|
|
21
|
+
} = _ref;
|
|
22
|
+
const [parentNode, setParentNode] = (0, _react.useState)(null);
|
|
23
|
+
const valueVirtualizer = (0, _reactVirtual.useVirtualizer)({
|
|
24
|
+
count: item.values.length,
|
|
25
|
+
getScrollElement: () => parentNode,
|
|
26
|
+
estimateSize: () => 44,
|
|
27
|
+
overscan: 25
|
|
28
|
+
});
|
|
29
|
+
const refCallback = (0, _react.useCallback)(node => {
|
|
30
|
+
setParentNode(node);
|
|
31
|
+
}, []);
|
|
32
|
+
const virtualItems = valueVirtualizer.getVirtualItems();
|
|
33
|
+
(0, _react.useEffect)(() => {
|
|
34
|
+
valueVirtualizer.measure();
|
|
35
|
+
}, [valueVirtualizer, parentNode === null || parentNode === void 0 ? void 0 : parentNode.clientHeight]);
|
|
36
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_jsxRuntime.Fragment, {
|
|
37
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
38
|
+
ref: refCallback,
|
|
39
|
+
style: {
|
|
40
|
+
overflowY: "auto",
|
|
41
|
+
maxHeight: "80vh"
|
|
42
|
+
},
|
|
43
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
44
|
+
style: {
|
|
45
|
+
height: "".concat(valueVirtualizer.getTotalSize(), "px"),
|
|
46
|
+
width: "100%",
|
|
47
|
+
position: "relative",
|
|
48
|
+
willChange: "transform"
|
|
49
|
+
},
|
|
50
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
51
|
+
style: {
|
|
52
|
+
position: "absolute",
|
|
53
|
+
top: 0,
|
|
54
|
+
left: 0,
|
|
55
|
+
width: "100%",
|
|
56
|
+
transform: "translateY(".concat((_virtualItems$0$start = (_virtualItems$ = virtualItems[0]) === null || _virtualItems$ === void 0 ? void 0 : _virtualItems$.start) !== null && _virtualItems$0$start !== void 0 ? _virtualItems$0$start : 0, "px)")
|
|
57
|
+
},
|
|
58
|
+
children: virtualItems.map(virtualItem => {
|
|
59
|
+
const value = item.values[virtualItem.index];
|
|
60
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
61
|
+
"data-index": virtualItem.index,
|
|
62
|
+
ref: valueVirtualizer.measureElement,
|
|
63
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.ListGroup.Item, {
|
|
64
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
|
|
65
|
+
className: "d-flex",
|
|
66
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
67
|
+
className: "flex-grow-1",
|
|
68
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Form.Check, {
|
|
69
|
+
// prettier-ignore
|
|
70
|
+
className: "obs-value-list-check",
|
|
71
|
+
type: "switch",
|
|
72
|
+
id: "custom-switch",
|
|
73
|
+
label: value,
|
|
74
|
+
checked: !_lodash.default.includes(item.omit, item.codes[value]),
|
|
75
|
+
onChange: () => onChange(value)
|
|
76
|
+
})
|
|
77
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
78
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)("svg", {
|
|
79
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
80
|
+
width: "24",
|
|
81
|
+
height: "24",
|
|
82
|
+
fill: "currentColor",
|
|
83
|
+
viewBox: "0 0 10 10",
|
|
84
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)("rect", {
|
|
85
|
+
x: "0",
|
|
86
|
+
y: "0",
|
|
87
|
+
width: "10",
|
|
88
|
+
height: "10",
|
|
89
|
+
fill: getFillColor(value)
|
|
90
|
+
})
|
|
91
|
+
})
|
|
92
|
+
})]
|
|
93
|
+
})
|
|
94
|
+
}, value)
|
|
95
|
+
}, virtualItem.key);
|
|
96
|
+
})
|
|
97
|
+
})
|
|
98
|
+
})
|
|
99
|
+
})
|
|
100
|
+
});
|
|
101
|
+
}
|
|
@@ -4,15 +4,14 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.ObsmKeysList = ObsmKeysList;
|
|
7
|
-
require("bootstrap/dist/css/bootstrap.min.css");
|
|
8
7
|
var _react = _interopRequireWildcard(require("react"));
|
|
9
|
-
var _requests = require("../../utils/requests");
|
|
10
|
-
var _DatasetContext = require("../../context/DatasetContext");
|
|
11
|
-
var _LoadingSpinner = require("../../utils/LoadingSpinner");
|
|
12
8
|
var _reactBootstrap = require("react-bootstrap");
|
|
9
|
+
var _DatasetContext = require("../../context/DatasetContext");
|
|
10
|
+
var _LoadingIndicators = require("../../utils/LoadingIndicators");
|
|
11
|
+
var _requests = require("../../utils/requests");
|
|
13
12
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
14
13
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
15
|
-
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u &&
|
|
14
|
+
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
16
15
|
function ObsmKeysList() {
|
|
17
16
|
const ENDPOINT = "obsm/keys";
|
|
18
17
|
const dataset = (0, _DatasetContext.useDataset)();
|
|
@@ -48,12 +47,11 @@ function ObsmKeysList() {
|
|
|
48
47
|
}
|
|
49
48
|
}, [dataset.selectedObsm]);
|
|
50
49
|
const obsmList = obsmKeysList.map(item => {
|
|
51
|
-
return /*#__PURE__*/(0, _jsxRuntime.jsx)(
|
|
52
|
-
|
|
53
|
-
className: "list-group-item list-grou-item-action ".concat(active === item && "active"),
|
|
50
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Dropdown.Item, {
|
|
51
|
+
className: "custom ".concat(active === item && "active"),
|
|
54
52
|
onClick: () => {
|
|
55
53
|
dispatch({
|
|
56
|
-
type: "
|
|
54
|
+
type: "select.obsm",
|
|
57
55
|
obsm: item
|
|
58
56
|
});
|
|
59
57
|
},
|
|
@@ -61,18 +59,29 @@ function ObsmKeysList() {
|
|
|
61
59
|
}, item);
|
|
62
60
|
});
|
|
63
61
|
if (!serverError) {
|
|
64
|
-
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
62
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
|
|
63
|
+
children: [isPending && /*#__PURE__*/(0, _jsxRuntime.jsx)(_LoadingIndicators.LoadingSpinner, {}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.DropdownButton, {
|
|
64
|
+
as: _reactBootstrap.ButtonGroup,
|
|
65
|
+
title: dataset.selectedObsm || "Select an embedding",
|
|
66
|
+
variant: dataset.selectedObsm ? "primary" : "outline-primary",
|
|
67
|
+
id: "bg-nested-dropdown",
|
|
68
|
+
size: "sm",
|
|
68
69
|
children: obsmList
|
|
69
70
|
})]
|
|
70
71
|
});
|
|
71
72
|
} else {
|
|
72
|
-
return /*#__PURE__*/(0, _jsxRuntime.jsx)(
|
|
73
|
-
|
|
74
|
-
|
|
73
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.OverlayTrigger, {
|
|
74
|
+
placement: "top",
|
|
75
|
+
delay: {
|
|
76
|
+
show: 100,
|
|
77
|
+
hide: 200
|
|
78
|
+
},
|
|
79
|
+
overlay: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Tooltip, {
|
|
75
80
|
children: serverError.message
|
|
81
|
+
}),
|
|
82
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Button, {
|
|
83
|
+
variant: "danger",
|
|
84
|
+
children: "Error"
|
|
76
85
|
})
|
|
77
86
|
});
|
|
78
87
|
}
|
|
@@ -5,59 +5,51 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.Legend = Legend;
|
|
7
7
|
var _react = require("react");
|
|
8
|
-
require("bootstrap/dist/css/bootstrap.min.css");
|
|
9
8
|
var _lodash = _interopRequireDefault(require("lodash"));
|
|
9
|
+
var _constants = require("../../constants/constants");
|
|
10
10
|
var _DatasetContext = require("../../context/DatasetContext");
|
|
11
|
+
var _colorHelper = require("../../helpers/color-helper");
|
|
11
12
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
12
|
-
function _interopRequireDefault(
|
|
13
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
13
14
|
function Legend(_ref) {
|
|
14
15
|
let {
|
|
15
|
-
|
|
16
|
+
isCategorical = false,
|
|
17
|
+
min = 0,
|
|
18
|
+
max = 1
|
|
16
19
|
} = _ref;
|
|
17
20
|
const dataset = (0, _DatasetContext.useDataset)();
|
|
18
|
-
const
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
}
|
|
35
|
-
}, i);
|
|
36
|
-
});
|
|
37
|
-
setLegendData({
|
|
38
|
-
dmin: dmin,
|
|
39
|
-
dmax: dmax,
|
|
40
|
-
list: spanList
|
|
41
|
-
});
|
|
42
|
-
}
|
|
43
|
-
}, [scale]);
|
|
44
|
-
if (dataset.colorEncoding === "var" && scale) {
|
|
21
|
+
const {
|
|
22
|
+
getColor
|
|
23
|
+
} = (0, _colorHelper.useColor)();
|
|
24
|
+
const spanList = (0, _react.useMemo)(() => {
|
|
25
|
+
return _lodash.default.range(100).map(i => {
|
|
26
|
+
var color = (0, _colorHelper.rgbToHex)(getColor(i / 100, isCategorical));
|
|
27
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
|
|
28
|
+
className: "grad-step",
|
|
29
|
+
style: {
|
|
30
|
+
backgroundColor: color
|
|
31
|
+
}
|
|
32
|
+
}, i);
|
|
33
|
+
});
|
|
34
|
+
}, [getColor, isCategorical]);
|
|
35
|
+
if (dataset.colorEncoding && !isCategorical) {
|
|
36
|
+
var _dataset$selectedVar, _dataset$selectedObs;
|
|
45
37
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
46
38
|
className: "cherita-legend",
|
|
47
39
|
children: /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
|
|
48
40
|
className: "gradient",
|
|
49
41
|
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("p", {
|
|
50
42
|
className: "small m-0 p-0",
|
|
51
|
-
children: dataset.
|
|
52
|
-
}),
|
|
43
|
+
children: dataset.colorEncoding === _constants.COLOR_ENCODINGS.VAR ? (_dataset$selectedVar = dataset.selectedVar) === null || _dataset$selectedVar === void 0 ? void 0 : _dataset$selectedVar.name : (_dataset$selectedObs = dataset.selectedObs) === null || _dataset$selectedObs === void 0 ? void 0 : _dataset$selectedObs.name
|
|
44
|
+
}), spanList, /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
|
|
53
45
|
className: "domain-min",
|
|
54
|
-
children:
|
|
46
|
+
children: min.toFixed(1)
|
|
55
47
|
}), /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
|
|
56
48
|
className: "domain-med",
|
|
57
|
-
children: ((
|
|
49
|
+
children: ((min + max) * 0.5).toFixed(1)
|
|
58
50
|
}), /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
|
|
59
51
|
className: "domain-max",
|
|
60
|
-
children:
|
|
52
|
+
children: max.toFixed(1)
|
|
61
53
|
})]
|
|
62
54
|
})
|
|
63
55
|
});
|
|
@@ -68,7 +60,7 @@ function Legend(_ref) {
|
|
|
68
60
|
className: "gradient",
|
|
69
61
|
children: /*#__PURE__*/(0, _jsxRuntime.jsx)("p", {
|
|
70
62
|
className: "small m-0 p-0",
|
|
71
|
-
children: dataset.selectedObs ? dataset.selectedObs.name : ""
|
|
63
|
+
children: dataset.colorEncoding === _constants.COLOR_ENCODINGS.OBS && dataset.selectedObs ? dataset.selectedObs.name : ""
|
|
72
64
|
})
|
|
73
65
|
})
|
|
74
66
|
});
|