@haniffalab/cherita-react 1.4.5 → 1.4.6-dev.2026-01-12.1a2ee141
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/cjs/components/dotplot/Dotplot.js +17 -14
- package/dist/cjs/components/heatmap/Heatmap.js +14 -11
- package/dist/cjs/components/matrixplot/Matrixplot.js +15 -12
- package/dist/cjs/components/obs-list/ObsList.js +1 -1
- package/dist/cjs/components/obsm-list/ObsmList.js +12 -5
- package/dist/cjs/components/plot/Plot.js +118 -0
- package/dist/cjs/components/pseudospatial/Pseudospatial.js +6 -3
- package/dist/cjs/components/violin/Violin.js +26 -23
- package/dist/cjs/context/DatasetContext.js +2 -2
- package/dist/cjs/context/SettingsContext.js +2 -2
- package/dist/cjs/helpers/zarr-helper.js +25 -35
- package/dist/cjs/index.js +15 -2
- package/dist/cjs/utils/zarrData.js +6 -6
- package/dist/esm/components/dotplot/Dotplot.js +17 -14
- package/dist/esm/components/heatmap/Heatmap.js +14 -11
- package/dist/esm/components/matrixplot/Matrixplot.js +15 -12
- package/dist/esm/components/obs-list/ObsList.js +1 -1
- package/dist/esm/components/obsm-list/ObsmList.js +12 -5
- package/dist/esm/components/plot/Plot.js +112 -0
- package/dist/esm/components/pseudospatial/Pseudospatial.js +6 -3
- package/dist/esm/components/violin/Violin.js +26 -23
- package/dist/esm/context/DatasetContext.js +2 -2
- package/dist/esm/context/SettingsContext.js +2 -2
- package/dist/esm/helpers/zarr-helper.js +22 -34
- package/dist/esm/index.js +4 -3
- package/dist/esm/utils/zarrData.js +6 -6
- package/package.json +7 -4
|
@@ -49,20 +49,23 @@ function Dotplot(_ref) {
|
|
|
49
49
|
const [hasSelections, setHasSelections] = (0, _react.useState)(false);
|
|
50
50
|
const selectedObs = (0, _Resolver.useSelectedObs)();
|
|
51
51
|
const selectedMultiVar = (0, _Resolver.useSelectedMultiVar)();
|
|
52
|
-
const params = (0, _react.useMemo)(() =>
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
52
|
+
const params = (0, _react.useMemo)(() => {
|
|
53
|
+
var _selectedObs$omit;
|
|
54
|
+
return {
|
|
55
|
+
url: dataset.url,
|
|
56
|
+
obsCol: selectedObs,
|
|
57
|
+
obsValues: !(selectedObs !== null && selectedObs !== void 0 && (_selectedObs$omit = selectedObs.omit) !== null && _selectedObs$omit !== void 0 && _selectedObs$omit.length) ? null : _lodash.default.difference(selectedObs === null || selectedObs === void 0 ? void 0 : selectedObs.values, selectedObs === null || selectedObs === void 0 ? void 0 : selectedObs.omit),
|
|
58
|
+
varKeys: selectedMultiVar.map(i => i.isSet ? {
|
|
59
|
+
name: i.name,
|
|
60
|
+
indices: i.vars.map(v => v.index)
|
|
61
|
+
} : i.index),
|
|
62
|
+
obsIndices: isSliced ? [...(obsIndices || [])] : null,
|
|
63
|
+
standardScale: settings.controls.scale.dotplot,
|
|
64
|
+
meanOnlyExpressed: settings.controls.meanOnlyExpressed,
|
|
65
|
+
expressionCutoff: settings.controls.expressionCutoff,
|
|
66
|
+
varNamesCol: dataset.varNamesCol
|
|
67
|
+
};
|
|
68
|
+
}, [dataset.url, dataset.varNamesCol, isSliced, obsIndices, selectedMultiVar, selectedObs, settings.controls.expressionCutoff, settings.controls.meanOnlyExpressed, settings.controls.scale.dotplot]);
|
|
66
69
|
// @TODO: set default scale
|
|
67
70
|
|
|
68
71
|
(0, _react.useEffect)(() => {
|
|
@@ -48,17 +48,20 @@ function Heatmap(_ref) {
|
|
|
48
48
|
const [hasSelections, setHasSelections] = (0, _react.useState)(false);
|
|
49
49
|
const selectedObs = (0, _Resolver.useSelectedObs)();
|
|
50
50
|
const selectedMultiVar = (0, _Resolver.useSelectedMultiVar)();
|
|
51
|
-
const params = (0, _react.useMemo)(() =>
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
51
|
+
const params = (0, _react.useMemo)(() => {
|
|
52
|
+
var _selectedObs$omit;
|
|
53
|
+
return {
|
|
54
|
+
url: dataset.url,
|
|
55
|
+
obsCol: selectedObs,
|
|
56
|
+
obsValues: !(selectedObs !== null && selectedObs !== void 0 && (_selectedObs$omit = selectedObs.omit) !== null && _selectedObs$omit !== void 0 && _selectedObs$omit.length) ? null : _lodash.default.difference(selectedObs === null || selectedObs === void 0 ? void 0 : selectedObs.values, selectedObs === null || selectedObs === void 0 ? void 0 : selectedObs.omit),
|
|
57
|
+
varKeys: selectedMultiVar.map(i => i.isSet ? {
|
|
58
|
+
name: i.name,
|
|
59
|
+
indices: i.vars.map(v => v.index)
|
|
60
|
+
} : i.index),
|
|
61
|
+
obsIndices: isSliced ? [...(obsIndices || [])] : null,
|
|
62
|
+
varNamesCol: dataset.varNamesCol
|
|
63
|
+
};
|
|
64
|
+
}, [dataset.url, dataset.varNamesCol, isSliced, obsIndices, selectedMultiVar, selectedObs]);
|
|
62
65
|
(0, _react.useEffect)(() => {
|
|
63
66
|
if (selectedObs && selectedMultiVar.length) {
|
|
64
67
|
setHasSelections(true);
|
|
@@ -48,18 +48,21 @@ function Matrixplot(_ref) {
|
|
|
48
48
|
const [hasSelections, setHasSelections] = (0, _react.useState)(false);
|
|
49
49
|
const selectedObs = (0, _Resolver.useSelectedObs)();
|
|
50
50
|
const selectedMultiVar = (0, _Resolver.useSelectedMultiVar)();
|
|
51
|
-
const params = (0, _react.useMemo)(() =>
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
51
|
+
const params = (0, _react.useMemo)(() => {
|
|
52
|
+
var _selectedObs$omit;
|
|
53
|
+
return {
|
|
54
|
+
url: dataset.url,
|
|
55
|
+
obsCol: selectedObs,
|
|
56
|
+
obsValues: !(selectedObs !== null && selectedObs !== void 0 && (_selectedObs$omit = selectedObs.omit) !== null && _selectedObs$omit !== void 0 && _selectedObs$omit.length) ? null : _lodash.default.difference(selectedObs === null || selectedObs === void 0 ? void 0 : selectedObs.values, selectedObs === null || selectedObs === void 0 ? void 0 : selectedObs.omit),
|
|
57
|
+
varKeys: selectedMultiVar.map(i => i.isSet ? {
|
|
58
|
+
name: i.name,
|
|
59
|
+
indices: i.vars.map(v => v.index)
|
|
60
|
+
} : i.index),
|
|
61
|
+
obsIndices: isSliced ? [...(obsIndices || [])] : null,
|
|
62
|
+
standardScale: settings.controls.scale.matrixplot,
|
|
63
|
+
varNamesCol: dataset.varNamesCol
|
|
64
|
+
};
|
|
65
|
+
}, [dataset.url, dataset.varNamesCol, isSliced, obsIndices, selectedMultiVar, selectedObs, settings.controls.scale.matrixplot]);
|
|
63
66
|
(0, _react.useEffect)(() => {
|
|
64
67
|
if (selectedObs && selectedMultiVar.length) {
|
|
65
68
|
setHasSelections(true);
|
|
@@ -15,12 +15,12 @@ var _reactBootstrap = require("react-bootstrap");
|
|
|
15
15
|
var _Accordion = _interopRequireDefault(require("react-bootstrap/Accordion"));
|
|
16
16
|
var _AccordionButton = require("react-bootstrap/AccordionButton");
|
|
17
17
|
var _AccordionContext = _interopRequireDefault(require("react-bootstrap/AccordionContext"));
|
|
18
|
+
var _ObsItem = require("./ObsItem");
|
|
18
19
|
var _constants = require("../../constants/constants");
|
|
19
20
|
var _DatasetContext = require("../../context/DatasetContext");
|
|
20
21
|
var _SettingsContext = require("../../context/SettingsContext");
|
|
21
22
|
var _LoadingIndicators = require("../../utils/LoadingIndicators");
|
|
22
23
|
var _requests = require("../../utils/requests");
|
|
23
|
-
var _ObsItem = require("./ObsItem");
|
|
24
24
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
25
25
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
26
26
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
@@ -22,7 +22,7 @@ function ObsmKeysList(_ref) {
|
|
|
22
22
|
const dataset = (0, _DatasetContext.useDataset)();
|
|
23
23
|
const settings = (0, _SettingsContext.useSettings)();
|
|
24
24
|
const dispatch = (0, _SettingsContext.useSettingsDispatch)();
|
|
25
|
-
const [
|
|
25
|
+
const [keysList, setKeysList] = (0, _react.useState)([]);
|
|
26
26
|
const [active, setActive] = (0, _react.useState)(null);
|
|
27
27
|
const params = (0, _react.useMemo)(() => ({
|
|
28
28
|
url: dataset.url
|
|
@@ -36,9 +36,16 @@ function ObsmKeysList(_ref) {
|
|
|
36
36
|
});
|
|
37
37
|
(0, _react.useEffect)(() => {
|
|
38
38
|
if (!isPending) {
|
|
39
|
-
if (serverError
|
|
39
|
+
if (serverError) {
|
|
40
|
+
if (settings.selectedObsm) {
|
|
41
|
+
dispatch({
|
|
42
|
+
type: 'select.obsm',
|
|
43
|
+
obsm: null
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
} else if (!fetchedData || !!fetchedData && !fetchedData.length) {
|
|
40
47
|
setHasObsm(false);
|
|
41
|
-
|
|
48
|
+
setKeysList([]);
|
|
42
49
|
if (settings.selectedObsm) {
|
|
43
50
|
dispatch({
|
|
44
51
|
type: 'select.obsm',
|
|
@@ -47,7 +54,7 @@ function ObsmKeysList(_ref) {
|
|
|
47
54
|
}
|
|
48
55
|
} else {
|
|
49
56
|
setHasObsm(true);
|
|
50
|
-
|
|
57
|
+
setKeysList(fetchedData);
|
|
51
58
|
if (settings.selectedObsm) {
|
|
52
59
|
// If selected obsm is not in keys list, reset to null
|
|
53
60
|
if (!_lodash.default.includes(fetchedData, settings.selectedObsm)) {
|
|
@@ -75,7 +82,7 @@ function ObsmKeysList(_ref) {
|
|
|
75
82
|
}
|
|
76
83
|
}
|
|
77
84
|
}, [dispatch, fetchedData, isPending, serverError, setHasObsm, settings.selectedObsm]);
|
|
78
|
-
const obsmList =
|
|
85
|
+
const obsmList = keysList.map(item => {
|
|
79
86
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Dropdown.Item, {
|
|
80
87
|
className: "custom ".concat(active === item && 'active'),
|
|
81
88
|
onClick: () => {
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.Plot = Plot;
|
|
7
|
+
var _react = require("react");
|
|
8
|
+
var _constants = require("../../constants/constants");
|
|
9
|
+
var _DatasetContext = require("../../context/DatasetContext");
|
|
10
|
+
var _Dotplot = require("../dotplot/Dotplot");
|
|
11
|
+
var _DotplotControls = require("../dotplot/DotplotControls");
|
|
12
|
+
var _Heatmap = require("../heatmap/Heatmap");
|
|
13
|
+
var _HeatmapControls = require("../heatmap/HeatmapControls");
|
|
14
|
+
var _Matrixplot = require("../matrixplot/Matrixplot");
|
|
15
|
+
var _MatrixplotControls = require("../matrixplot/MatrixplotControls");
|
|
16
|
+
var _offcanvas = require("../offcanvas");
|
|
17
|
+
var _Scatterplot = require("../scatterplot/Scatterplot");
|
|
18
|
+
var _ScatterplotControls = require("../scatterplot/ScatterplotControls");
|
|
19
|
+
var _Violin = require("../violin/Violin");
|
|
20
|
+
var _ViolinControls = require("../violin/ViolinControls");
|
|
21
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
22
|
+
const _excluded = ["plotType", "showObsBtn", "showVarsBtn", "showCtrlsBtn", "canOverrideSettings"];
|
|
23
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
24
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
25
|
+
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
|
26
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
27
|
+
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
28
|
+
function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
|
|
29
|
+
function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
|
|
30
|
+
function Plot(_ref) {
|
|
31
|
+
let {
|
|
32
|
+
plotType = _constants.PLOT_TYPES.SCATTERPLOT,
|
|
33
|
+
showObsBtn = true,
|
|
34
|
+
showVarsBtn = true,
|
|
35
|
+
showCtrlsBtn = true,
|
|
36
|
+
canOverrideSettings = false
|
|
37
|
+
} = _ref,
|
|
38
|
+
props = _objectWithoutProperties(_ref, _excluded);
|
|
39
|
+
const [showObs, setShowObs] = (0, _react.useState)(false);
|
|
40
|
+
const [showObsm, setShowObsm] = (0, _react.useState)(false);
|
|
41
|
+
const [showVars, setShowVars] = (0, _react.useState)(false);
|
|
42
|
+
const [showControls, setShowControls] = (0, _react.useState)(false);
|
|
43
|
+
const {
|
|
44
|
+
plotControls,
|
|
45
|
+
varMode,
|
|
46
|
+
showSelectedAsActive
|
|
47
|
+
} = {
|
|
48
|
+
[_constants.PLOT_TYPES.SCATTERPLOT]: {
|
|
49
|
+
plotControls: _ScatterplotControls.ScatterplotControls,
|
|
50
|
+
varMode: _constants.SELECTION_MODES.SINGLE,
|
|
51
|
+
showSelectedAsActive: false
|
|
52
|
+
},
|
|
53
|
+
[_constants.PLOT_TYPES.DOTPLOT]: {
|
|
54
|
+
plotControls: _DotplotControls.DotplotControls,
|
|
55
|
+
varMode: _constants.SELECTION_MODES.MULTIPLE,
|
|
56
|
+
showSelectedAsActive: true
|
|
57
|
+
},
|
|
58
|
+
[_constants.PLOT_TYPES.MATRIXPLOT]: {
|
|
59
|
+
plotControls: _MatrixplotControls.MatrixplotControls,
|
|
60
|
+
varMode: _constants.SELECTION_MODES.MULTIPLE,
|
|
61
|
+
showSelectedAsActive: true
|
|
62
|
+
},
|
|
63
|
+
[_constants.PLOT_TYPES.HEATMAP]: {
|
|
64
|
+
plotControls: _HeatmapControls.HeatmapControls,
|
|
65
|
+
varMode: _constants.SELECTION_MODES.MULTIPLE,
|
|
66
|
+
showSelectedAsActive: true
|
|
67
|
+
},
|
|
68
|
+
[_constants.PLOT_TYPES.VIOLINPLOT]: {
|
|
69
|
+
plotControls: _ViolinControls.ViolinControls,
|
|
70
|
+
varMode: _constants.SELECTION_MODES.MULTIPLE,
|
|
71
|
+
showSelectedAsActive: false
|
|
72
|
+
}
|
|
73
|
+
}[plotType];
|
|
74
|
+
const commonProps = {
|
|
75
|
+
showObsBtn,
|
|
76
|
+
showVarsBtn,
|
|
77
|
+
showCtrlsBtn,
|
|
78
|
+
plotType,
|
|
79
|
+
setShowObs,
|
|
80
|
+
setShowVars,
|
|
81
|
+
setShowControls
|
|
82
|
+
};
|
|
83
|
+
const plot = () => {
|
|
84
|
+
switch (plotType) {
|
|
85
|
+
case _constants.PLOT_TYPES.DOTPLOT:
|
|
86
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Dotplot.Dotplot, _objectSpread({}, commonProps));
|
|
87
|
+
case _constants.PLOT_TYPES.MATRIXPLOT:
|
|
88
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Matrixplot.Matrixplot, _objectSpread({}, commonProps));
|
|
89
|
+
case _constants.PLOT_TYPES.HEATMAP:
|
|
90
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Heatmap.Heatmap, _objectSpread({}, commonProps));
|
|
91
|
+
case _constants.PLOT_TYPES.VIOLINPLOT:
|
|
92
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Violin.Violin, _objectSpread({
|
|
93
|
+
mode: _constants.VIOLIN_MODES.MULTIKEY
|
|
94
|
+
}, commonProps));
|
|
95
|
+
case _constants.PLOT_TYPES.SCATTERPLOT:
|
|
96
|
+
default:
|
|
97
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Scatterplot.Scatterplot, _objectSpread({}, commonProps));
|
|
98
|
+
}
|
|
99
|
+
};
|
|
100
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_DatasetContext.DatasetProvider, _objectSpread(_objectSpread({}, props), {}, {
|
|
101
|
+
children: [plot(), /*#__PURE__*/(0, _jsxRuntime.jsx)(_offcanvas.OffcanvasObs, _objectSpread(_objectSpread({}, props), {}, {
|
|
102
|
+
showSelectedAsActive: showSelectedAsActive,
|
|
103
|
+
show: showObs,
|
|
104
|
+
handleClose: () => setShowObs(false)
|
|
105
|
+
})), /*#__PURE__*/(0, _jsxRuntime.jsx)(_offcanvas.OffcanvasVars, _objectSpread(_objectSpread({}, props), {}, {
|
|
106
|
+
show: showVars,
|
|
107
|
+
handleClose: () => setShowVars(false),
|
|
108
|
+
mode: varMode
|
|
109
|
+
})), plotControls && /*#__PURE__*/(0, _jsxRuntime.jsx)(_offcanvas.OffcanvasControls, _objectSpread(_objectSpread({}, props), {}, {
|
|
110
|
+
show: showControls,
|
|
111
|
+
handleClose: () => setShowControls(false),
|
|
112
|
+
Controls: plotControls
|
|
113
|
+
})), /*#__PURE__*/(0, _jsxRuntime.jsx)(_offcanvas.OffcanvasObsm, _objectSpread(_objectSpread({}, props), {}, {
|
|
114
|
+
show: showObsm,
|
|
115
|
+
handleClose: () => setShowObsm(false)
|
|
116
|
+
}))]
|
|
117
|
+
}));
|
|
118
|
+
}
|
|
@@ -50,6 +50,7 @@ function usePseudospatialData(plotType) {
|
|
|
50
50
|
}, [dataset.url, settings.pseudospatial.maskSet, settings.pseudospatial.maskValues, dataset.varNamesCol, isSliced, obsIndices]);
|
|
51
51
|
const getPlotParams = (0, _react.useCallback)(() => {
|
|
52
52
|
if (plotType === _constants.PSEUDOSPATIAL_PLOT_TYPES.GENE) {
|
|
53
|
+
var _selectedObs$omit;
|
|
53
54
|
return _objectSpread({
|
|
54
55
|
varKey: selectedVar !== null && selectedVar !== void 0 && selectedVar.isSet ? {
|
|
55
56
|
name: selectedVar === null || selectedVar === void 0 ? void 0 : selectedVar.name,
|
|
@@ -57,18 +58,20 @@ function usePseudospatialData(plotType) {
|
|
|
57
58
|
} : selectedVar === null || selectedVar === void 0 ? void 0 : selectedVar.index
|
|
58
59
|
}, settings.sliceBy.obs ? {
|
|
59
60
|
obsCol: selectedObs,
|
|
60
|
-
obsValues: !(selectedObs !== null && selectedObs !== void 0 && selectedObs.omit.length) ? null : _lodash.default.difference(selectedObs === null || selectedObs === void 0 ? void 0 : selectedObs.values, selectedObs === null || selectedObs === void 0 ? void 0 : selectedObs.omit)
|
|
61
|
+
obsValues: !(selectedObs !== null && selectedObs !== void 0 && (_selectedObs$omit = selectedObs.omit) !== null && _selectedObs$omit !== void 0 && _selectedObs$omit.length) ? null : _lodash.default.difference(selectedObs === null || selectedObs === void 0 ? void 0 : selectedObs.values, selectedObs === null || selectedObs === void 0 ? void 0 : selectedObs.omit)
|
|
61
62
|
} : {});
|
|
62
63
|
} else if (plotType === _constants.PSEUDOSPATIAL_PLOT_TYPES.CATEGORICAL) {
|
|
64
|
+
var _selectedObs$omit2;
|
|
63
65
|
return {
|
|
64
66
|
obsCol: selectedObs,
|
|
65
|
-
obsValues: !(selectedObs !== null && selectedObs !== void 0 && selectedObs.omit.length) ? null : _lodash.default.difference(selectedObs === null || selectedObs === void 0 ? void 0 : selectedObs.values, selectedObs === null || selectedObs === void 0 ? void 0 : selectedObs.omit),
|
|
67
|
+
obsValues: !(selectedObs !== null && selectedObs !== void 0 && (_selectedObs$omit2 = selectedObs.omit) !== null && _selectedObs$omit2 !== void 0 && _selectedObs$omit2.length) ? null : _lodash.default.difference(selectedObs === null || selectedObs === void 0 ? void 0 : selectedObs.values, selectedObs === null || selectedObs === void 0 ? void 0 : selectedObs.omit),
|
|
66
68
|
mode: settings.pseudospatial.categoricalMode
|
|
67
69
|
};
|
|
68
70
|
} else if (plotType === 'continuous') {
|
|
71
|
+
var _selectedObs$omit3;
|
|
69
72
|
return {
|
|
70
73
|
obsCol: selectedObs,
|
|
71
|
-
obsValues: !(selectedObs !== null && selectedObs !== void 0 && selectedObs.omit.length) ? null : _lodash.default.difference(selectedObs === null || selectedObs === void 0 ? void 0 : selectedObs.values, selectedObs === null || selectedObs === void 0 ? void 0 : selectedObs.omit)
|
|
74
|
+
obsValues: !(selectedObs !== null && selectedObs !== void 0 && (_selectedObs$omit3 = selectedObs.omit) !== null && _selectedObs$omit3 !== void 0 && _selectedObs$omit3.length) ? null : _lodash.default.difference(selectedObs === null || selectedObs === void 0 ? void 0 : selectedObs.values, selectedObs === null || selectedObs === void 0 ? void 0 : selectedObs.omit)
|
|
72
75
|
};
|
|
73
76
|
}
|
|
74
77
|
}, [settings.pseudospatial.categoricalMode, selectedObs, selectedVar === null || selectedVar === void 0 ? void 0 : selectedVar.index, selectedVar === null || selectedVar === void 0 ? void 0 : selectedVar.isSet, selectedVar === null || selectedVar === void 0 ? void 0 : selectedVar.name, selectedVar === null || selectedVar === void 0 ? void 0 : selectedVar.vars, settings.sliceBy.obs, plotType]);
|
|
@@ -52,29 +52,32 @@ function Violin(_ref) {
|
|
|
52
52
|
const selectedMultiVar = (0, _Resolver.useSelectedMultiVar)();
|
|
53
53
|
const selectedVar = (0, _Resolver.useSelectedVar)();
|
|
54
54
|
const selectedObs = (0, _Resolver.useSelectedObs)();
|
|
55
|
-
const params = (0, _react.useMemo)(() =>
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
55
|
+
const params = (0, _react.useMemo)(() => {
|
|
56
|
+
var _selectedObs$omit;
|
|
57
|
+
return _objectSpread({
|
|
58
|
+
url: dataset.url,
|
|
59
|
+
mode: mode,
|
|
60
|
+
scale: settings.controls.scale.violinplot,
|
|
61
|
+
varNamesCol: dataset.varNamesCol
|
|
62
|
+
}, {
|
|
63
|
+
[_constants.VIOLIN_MODES.MULTIKEY]: {
|
|
64
|
+
varKeys: selectedMultiVar.map(i => i.isSet ? {
|
|
65
|
+
name: i.name,
|
|
66
|
+
indices: i.vars.map(v => v.index)
|
|
67
|
+
} : i.index),
|
|
68
|
+
obsKeys: [] // @TODO: implement
|
|
69
|
+
},
|
|
70
|
+
[_constants.VIOLIN_MODES.GROUPBY]: {
|
|
71
|
+
varKey: selectedVar !== null && selectedVar !== void 0 && selectedVar.isSet ? {
|
|
72
|
+
name: selectedVar === null || selectedVar === void 0 ? void 0 : selectedVar.name,
|
|
73
|
+
indices: selectedVar === null || selectedVar === void 0 ? void 0 : selectedVar.vars.map(v => v.index)
|
|
74
|
+
} : selectedVar === null || selectedVar === void 0 ? void 0 : selectedVar.index,
|
|
75
|
+
obsCol: selectedObs,
|
|
76
|
+
obsValues: !(selectedObs !== null && selectedObs !== void 0 && (_selectedObs$omit = selectedObs.omit) !== null && _selectedObs$omit !== void 0 && _selectedObs$omit.length) ? null : _lodash.default.difference(selectedObs === null || selectedObs === void 0 ? void 0 : selectedObs.values, selectedObs === null || selectedObs === void 0 ? void 0 : selectedObs.omit),
|
|
77
|
+
obsIndices: isSliced ? [...(obsIndices || [])] : null
|
|
78
|
+
}
|
|
79
|
+
}[mode]);
|
|
80
|
+
}, [dataset.url, dataset.varNamesCol, isSliced, mode, obsIndices, selectedMultiVar, selectedObs, selectedVar === null || selectedVar === void 0 ? void 0 : selectedVar.index, selectedVar === null || selectedVar === void 0 ? void 0 : selectedVar.isSet, selectedVar === null || selectedVar === void 0 ? void 0 : selectedVar.name, selectedVar === null || selectedVar === void 0 ? void 0 : selectedVar.vars, settings.controls.scale.violinplot]);
|
|
78
81
|
// @TODO: set default scale
|
|
79
82
|
|
|
80
83
|
(0, _react.useEffect)(() => {
|
|
@@ -60,7 +60,7 @@ const persistOptions = {
|
|
|
60
60
|
return false;
|
|
61
61
|
}
|
|
62
62
|
},
|
|
63
|
-
buster: "1.4.
|
|
63
|
+
buster: "1.4.6-dev.2026-01-12.1a2ee141" || '0.0.0'
|
|
64
64
|
// @TODO: add maxAge and api version numbers as buster
|
|
65
65
|
};
|
|
66
66
|
const initialDataset = {
|
|
@@ -80,7 +80,7 @@ function DatasetProvider(_ref2) {
|
|
|
80
80
|
children
|
|
81
81
|
} = _ref2,
|
|
82
82
|
dataset_params = _objectWithoutProperties(_ref2, _excluded);
|
|
83
|
-
const dataset = _lodash.default.assign(initialDataset, _objectSpread({
|
|
83
|
+
const dataset = _lodash.default.assign({}, initialDataset, _objectSpread({
|
|
84
84
|
url: dataset_url
|
|
85
85
|
}, dataset_params));
|
|
86
86
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)(DatasetContext.Provider, {
|
|
@@ -173,7 +173,7 @@ function SettingsProvider(_ref2) {
|
|
|
173
173
|
|
|
174
174
|
// If the buster is not set or does not match the current package version,
|
|
175
175
|
// reset localSettings to avoid stale data
|
|
176
|
-
if (!buster || buster !== "1.4.
|
|
176
|
+
if (!buster || buster !== "1.4.6-dev.2026-01-12.1a2ee141") {
|
|
177
177
|
localSettings = {};
|
|
178
178
|
}
|
|
179
179
|
const initSettings = (0, _react.useRef)(initializer({
|
|
@@ -198,7 +198,7 @@ function SettingsProvider(_ref2) {
|
|
|
198
198
|
if (canOverrideSettings && settings) {
|
|
199
199
|
try {
|
|
200
200
|
localStorage.setItem(DATASET_STORAGE_KEY, JSON.stringify(_objectSpread({
|
|
201
|
-
buster: "1.4.
|
|
201
|
+
buster: "1.4.6-dev.2026-01-12.1a2ee141" || '0.0.0',
|
|
202
202
|
timestamp: Date.now()
|
|
203
203
|
}, _lodash.default.omit(settings, 'data'))));
|
|
204
204
|
} catch (err) {
|
|
@@ -3,69 +3,60 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.useZarr = exports.useMultipleZarr = exports.ZarrHelper =
|
|
6
|
+
exports.useZarr = exports.useMultipleZarr = exports.ZarrHelper = void 0;
|
|
7
7
|
var _react = require("react");
|
|
8
8
|
var _reactQuery = require("@tanstack/react-query");
|
|
9
|
-
var
|
|
9
|
+
var zarr = _interopRequireWildcard(require("zarrita"));
|
|
10
|
+
var _ndarray = require("@zarrita/ndarray");
|
|
11
|
+
var _ndarrayUnpack = _interopRequireDefault(require("ndarray-unpack"));
|
|
12
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
13
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
10
14
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
11
15
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
12
16
|
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
|
13
17
|
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
14
18
|
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
15
|
-
const GET_OPTIONS = exports.GET_OPTIONS = {
|
|
16
|
-
concurrencyLimit: 10,
|
|
17
|
-
// max number of concurrent requests (default 10)
|
|
18
|
-
progressCallback: _ref => {
|
|
19
|
-
let {
|
|
20
|
-
progress,
|
|
21
|
-
queueSize
|
|
22
|
-
} = _ref;
|
|
23
|
-
console.debug("".concat(progress / queueSize * 100, "% complete."));
|
|
24
|
-
} // callback executed after each request
|
|
25
|
-
};
|
|
26
19
|
class ZarrHelper {
|
|
27
20
|
async open(url, path) {
|
|
28
|
-
const
|
|
29
|
-
|
|
30
|
-
path: path,
|
|
31
|
-
mode: 'r'
|
|
32
|
-
});
|
|
21
|
+
const root = zarr.root(new zarr.FetchStore(url));
|
|
22
|
+
const z = await zarr.open(root.resolve(path));
|
|
33
23
|
return z;
|
|
34
24
|
}
|
|
35
25
|
}
|
|
36
26
|
exports.ZarrHelper = ZarrHelper;
|
|
37
|
-
const fetchDataFromZarr = async (url, path, s
|
|
27
|
+
const fetchDataFromZarr = async (url, path, s) => {
|
|
38
28
|
try {
|
|
39
29
|
const zarrHelper = new ZarrHelper();
|
|
40
30
|
const z = await zarrHelper.open(url, path);
|
|
41
|
-
const result = await
|
|
42
|
-
|
|
31
|
+
const result = await (0, _ndarray.get)(z, s);
|
|
32
|
+
if (result.dtype === 'bigint64') throw new Error('bigint64 dtype not supported');
|
|
33
|
+
const arr = (0, _ndarrayUnpack.default)(result);
|
|
34
|
+
return arr;
|
|
43
35
|
} catch (error) {
|
|
44
|
-
if (error instanceof
|
|
36
|
+
if (error instanceof zarr.NodeNotFoundError) {
|
|
45
37
|
error.status = 404;
|
|
46
38
|
}
|
|
47
39
|
throw error;
|
|
48
40
|
}
|
|
49
41
|
};
|
|
50
|
-
const useZarr = function (
|
|
42
|
+
const useZarr = function (_ref) {
|
|
51
43
|
let {
|
|
52
44
|
url,
|
|
53
45
|
path,
|
|
54
46
|
s = null
|
|
55
|
-
} =
|
|
56
|
-
let
|
|
57
|
-
let opts = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
|
47
|
+
} = _ref;
|
|
48
|
+
let opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
58
49
|
const {
|
|
59
50
|
data = null,
|
|
60
51
|
isLoading: isPending = false,
|
|
61
52
|
error: serverError = null
|
|
62
53
|
} = (0, _reactQuery.useQuery)(_objectSpread({
|
|
63
54
|
queryKey: ['zarr', url, path, s],
|
|
64
|
-
queryFn: () => fetchDataFromZarr(url, path, s
|
|
65
|
-
retry: (failureCount,
|
|
55
|
+
queryFn: () => fetchDataFromZarr(url, path, s),
|
|
56
|
+
retry: (failureCount, _ref2) => {
|
|
66
57
|
let {
|
|
67
58
|
error
|
|
68
|
-
} =
|
|
59
|
+
} = _ref2;
|
|
69
60
|
if ([400, 401, 403, 404, 422].includes(error === null || error === void 0 ? void 0 : error.status)) return false;
|
|
70
61
|
return failureCount < 3;
|
|
71
62
|
}
|
|
@@ -86,9 +77,8 @@ const aggregateData = (inputs, data) => {
|
|
|
86
77
|
return dataObject;
|
|
87
78
|
};
|
|
88
79
|
const useMultipleZarr = function (inputs) {
|
|
89
|
-
let
|
|
90
|
-
let
|
|
91
|
-
let agg = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : aggregateData;
|
|
80
|
+
let opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
81
|
+
let agg = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : aggregateData;
|
|
92
82
|
const combine = (0, _react.useCallback)(results => {
|
|
93
83
|
return {
|
|
94
84
|
data: agg(inputs, results.map(result => result.data)),
|
|
@@ -103,11 +93,11 @@ const useMultipleZarr = function (inputs) {
|
|
|
103
93
|
} = (0, _reactQuery.useQueries)({
|
|
104
94
|
queries: inputs.map(input => _objectSpread({
|
|
105
95
|
queryKey: ['zarr', input.url, input.path, input.s],
|
|
106
|
-
queryFn: () => fetchDataFromZarr(input.url, input.path, input.s
|
|
107
|
-
retry: (failureCount,
|
|
96
|
+
queryFn: () => fetchDataFromZarr(input.url, input.path, input.s),
|
|
97
|
+
retry: (failureCount, _ref3) => {
|
|
108
98
|
let {
|
|
109
99
|
error
|
|
110
|
-
} =
|
|
100
|
+
} = _ref3;
|
|
111
101
|
if ([400, 401, 403, 404, 422].includes(error === null || error === void 0 ? void 0 : error.status)) return false;
|
|
112
102
|
return failureCount < 3;
|
|
113
103
|
}
|
package/dist/cjs/index.js
CHANGED
|
@@ -9,6 +9,12 @@ Object.defineProperty(exports, "COLORSCALES", {
|
|
|
9
9
|
return _colorscales.COLORSCALES;
|
|
10
10
|
}
|
|
11
11
|
});
|
|
12
|
+
Object.defineProperty(exports, "COLOR_ENCODINGS", {
|
|
13
|
+
enumerable: true,
|
|
14
|
+
get: function () {
|
|
15
|
+
return _constants.COLOR_ENCODINGS;
|
|
16
|
+
}
|
|
17
|
+
});
|
|
12
18
|
Object.defineProperty(exports, "DatasetProvider", {
|
|
13
19
|
enumerable: true,
|
|
14
20
|
get: function () {
|
|
@@ -105,6 +111,12 @@ Object.defineProperty(exports, "PLOT_TYPES", {
|
|
|
105
111
|
return _constants.PLOT_TYPES;
|
|
106
112
|
}
|
|
107
113
|
});
|
|
114
|
+
Object.defineProperty(exports, "Plot", {
|
|
115
|
+
enumerable: true,
|
|
116
|
+
get: function () {
|
|
117
|
+
return _Plot.Plot;
|
|
118
|
+
}
|
|
119
|
+
});
|
|
108
120
|
Object.defineProperty(exports, "Pseudospatial", {
|
|
109
121
|
enumerable: true,
|
|
110
122
|
get: function () {
|
|
@@ -167,7 +179,6 @@ Object.defineProperty(exports, "ViolinControls", {
|
|
|
167
179
|
});
|
|
168
180
|
var _Dotplot = require("./components/dotplot/Dotplot");
|
|
169
181
|
var _DotplotControls = require("./components/dotplot/DotplotControls");
|
|
170
|
-
var _FullPage = require("./components/full-page/FullPage");
|
|
171
182
|
var _Heatmap = require("./components/heatmap/Heatmap");
|
|
172
183
|
var _HeatmapControls = require("./components/heatmap/HeatmapControls");
|
|
173
184
|
var _Matrixplot = require("./components/matrixplot/Matrixplot");
|
|
@@ -186,4 +197,6 @@ var _ViolinControls = require("./components/violin/ViolinControls");
|
|
|
186
197
|
var _colorscales = require("./constants/colorscales");
|
|
187
198
|
var _constants = require("./constants/constants");
|
|
188
199
|
var _DatasetContext = require("./context/DatasetContext");
|
|
189
|
-
var _FilterContext = require("./context/FilterContext");
|
|
200
|
+
var _FilterContext = require("./context/FilterContext");
|
|
201
|
+
var _FullPage = require("./components/full-page/FullPage");
|
|
202
|
+
var _Plot = require("./components/plot/Plot");
|
|
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.useXData = exports.useObsmData = exports.useObsData = exports.useLabelObsData = void 0;
|
|
7
7
|
var _react = require("react");
|
|
8
8
|
var _lodash = _interopRequireDefault(require("lodash"));
|
|
9
|
-
var
|
|
9
|
+
var _zarrita = require("zarrita");
|
|
10
10
|
var _Resolver = require("./Resolver");
|
|
11
11
|
var _constants = require("../constants/constants");
|
|
12
12
|
var _DatasetContext = require("../context/DatasetContext");
|
|
@@ -22,9 +22,9 @@ const useObsmData = function () {
|
|
|
22
22
|
const obsmParams = (0, _react.useMemo)(() => ({
|
|
23
23
|
url: dataset.url,
|
|
24
24
|
path: 'obsm/' + obsm,
|
|
25
|
-
s: [null, (0,
|
|
25
|
+
s: [null, (0, _zarrita.slice)(null, 2)] // load only [:, :2]
|
|
26
26
|
}), [dataset.url, obsm]);
|
|
27
|
-
return (0, _zarrHelper.useZarr)(obsmParams,
|
|
27
|
+
return (0, _zarrHelper.useZarr)(obsmParams, {
|
|
28
28
|
enabled: !!obsm
|
|
29
29
|
});
|
|
30
30
|
};
|
|
@@ -52,7 +52,7 @@ const useXData = function () {
|
|
|
52
52
|
s: [null, v.matrix_index]
|
|
53
53
|
};
|
|
54
54
|
}), [dataset.url, selectedVar]);
|
|
55
|
-
return (0, _zarrHelper.useMultipleZarr)(xParams,
|
|
55
|
+
return (0, _zarrHelper.useMultipleZarr)(xParams, {
|
|
56
56
|
enabled: !!xParams.length
|
|
57
57
|
}, agg);
|
|
58
58
|
};
|
|
@@ -70,7 +70,7 @@ const useObsData = function () {
|
|
|
70
70
|
path: 'obs/' + ((_obs = obs) === null || _obs === void 0 ? void 0 : _obs.name) + (((_obs2 = obs) === null || _obs2 === void 0 ? void 0 : _obs2.type) === _constants.OBS_TYPES.CATEGORICAL ? '/codes' : '')
|
|
71
71
|
};
|
|
72
72
|
}, [dataset.url, (_obs3 = obs) === null || _obs3 === void 0 ? void 0 : _obs3.name, (_obs4 = obs) === null || _obs4 === void 0 ? void 0 : _obs4.type]);
|
|
73
|
-
return (0, _zarrHelper.useZarr)(obsParams,
|
|
73
|
+
return (0, _zarrHelper.useZarr)(obsParams, {
|
|
74
74
|
enabled: !!obs
|
|
75
75
|
});
|
|
76
76
|
};
|
|
@@ -86,7 +86,7 @@ const useLabelObsData = () => {
|
|
|
86
86
|
key: obs.name
|
|
87
87
|
};
|
|
88
88
|
}), [dataset.url, settings.data.obs, settings.labelObs]);
|
|
89
|
-
return (0, _zarrHelper.useMultipleZarr)(labelObsParams,
|
|
89
|
+
return (0, _zarrHelper.useMultipleZarr)(labelObsParams, {
|
|
90
90
|
enabled: !!labelObsParams.length
|
|
91
91
|
});
|
|
92
92
|
};
|