@haniffalab/cherita-react 1.4.1-dev.2025-10-23.e95b5a90 → 1.4.1-dev.2025-10-23.55fbe6ff
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 +1 -1
- package/dist/cjs/components/controls/Controls.js +4 -4
- package/dist/cjs/components/dotplot/Dotplot.js +8 -8
- package/dist/cjs/components/dotplot/DotplotControls.js +5 -5
- package/dist/cjs/components/full-page/FullPage.js +1 -2
- package/dist/cjs/components/full-page/PlotAlert.js +1 -1
- package/dist/cjs/components/full-page/PlotTypeSelector.js +13 -13
- package/dist/cjs/components/heatmap/Heatmap.js +7 -7
- package/dist/cjs/components/icons/DotPlotIcon.js +1 -1
- package/dist/cjs/components/icons/HeatmapIcon.js +1 -1
- package/dist/cjs/components/icons/MatrixPlotIcon.1.js +1 -1
- package/dist/cjs/components/icons/MatrixPlotIcon.js +1 -1
- package/dist/cjs/components/icons/ScatterplotIcon.1.js +1 -1
- package/dist/cjs/components/icons/ScatterplotIcon.js +1 -1
- package/dist/cjs/components/icons/ViolinPlotIcon.js +1 -1
- package/dist/cjs/components/matrixplot/Matrixplot.js +7 -7
- package/dist/cjs/components/obs-list/ObsItem.js +19 -19
- package/dist/cjs/components/obs-list/ObsList.js +17 -17
- package/dist/cjs/components/obsm-list/ObsmList.js +7 -7
- package/dist/cjs/components/pseudospatial/Pseudospatial.js +16 -16
- package/dist/cjs/components/pseudospatial/PseudospatialToolbar.js +10 -10
- package/dist/cjs/components/scatterplot/Scatterplot.js +16 -16
- package/dist/cjs/components/scatterplot/ScatterplotControls.js +1 -1
- package/dist/cjs/components/scatterplot/SpatialControls.js +9 -9
- package/dist/cjs/components/scatterplot/Toolbox.js +4 -4
- package/dist/cjs/components/search-bar/SearchBar.js +14 -14
- package/dist/cjs/components/search-bar/SearchInfo.js +3 -3
- package/dist/cjs/components/search-bar/SearchResults.js +2 -2
- package/dist/cjs/components/toolbar/Toolbar.js +3 -3
- package/dist/cjs/components/var-list/VarItem.js +15 -15
- package/dist/cjs/components/var-list/VarList.js +5 -5
- package/dist/cjs/components/var-list/VarListToolbar.js +4 -4
- package/dist/cjs/components/var-list/VarSet.js +13 -13
- package/dist/cjs/components/violin/Violin.js +10 -10
- package/dist/cjs/constants/colorscales.js +19 -19
- package/dist/cjs/constants/constants.js +47 -47
- package/dist/cjs/context/DatasetContext.js +3 -3
- package/dist/cjs/context/FilterContext.js +2 -2
- package/dist/cjs/context/SettingsContext.js +57 -57
- package/dist/cjs/helpers/color-helper.js +2 -2
- package/dist/cjs/helpers/zarr-helper.js +3 -3
- package/dist/cjs/utils/Filter.js +1 -1
- package/dist/cjs/utils/Histogram.js +2 -2
- package/dist/cjs/utils/ImageViewer.js +2 -2
- package/dist/cjs/utils/Legend.js +1 -1
- package/dist/cjs/utils/LoadingIndicators.js +1 -1
- package/dist/cjs/utils/Resolver.js +7 -7
- package/dist/cjs/utils/Skeleton.js +1 -1
- package/dist/cjs/utils/StyledTooltip.js +5 -5
- package/dist/cjs/utils/VirtualizedList.js +7 -7
- package/dist/cjs/utils/errors.js +15 -15
- package/dist/cjs/utils/requests.js +5 -5
- package/dist/cjs/utils/search.js +4 -4
- package/dist/cjs/utils/string.js +6 -6
- package/dist/cjs/utils/zarrData.js +5 -5
- package/dist/css/cherita.css +21 -20
- package/dist/css/cherita.css.map +1 -1
- package/dist/esm/components/controls/Controls.js +9 -9
- package/dist/esm/components/dotplot/Dotplot.js +21 -21
- package/dist/esm/components/dotplot/DotplotControls.js +9 -9
- package/dist/esm/components/full-page/FullPage.js +22 -23
- package/dist/esm/components/full-page/PlotAlert.js +5 -5
- package/dist/esm/components/full-page/PlotTypeSelector.js +21 -21
- package/dist/esm/components/heatmap/Heatmap.js +20 -20
- package/dist/esm/components/heatmap/HeatmapControls.js +2 -2
- package/dist/esm/components/icons/DotPlotIcon.js +1 -1
- package/dist/esm/components/icons/HeatmapIcon.js +1 -1
- package/dist/esm/components/icons/MatrixPlotIcon.1.js +1 -1
- package/dist/esm/components/icons/MatrixPlotIcon.js +1 -1
- package/dist/esm/components/icons/ScatterplotIcon.1.js +1 -1
- package/dist/esm/components/icons/ScatterplotIcon.js +1 -1
- package/dist/esm/components/icons/ViolinPlotIcon.js +1 -1
- package/dist/esm/components/matrixplot/Matrixplot.js +20 -20
- package/dist/esm/components/matrixplot/MatrixplotControls.js +2 -2
- package/dist/esm/components/obs-list/ObsItem.js +37 -37
- package/dist/esm/components/obs-list/ObsList.js +34 -34
- package/dist/esm/components/obs-list/ObsToolbar.js +1 -1
- package/dist/esm/components/obsm-list/ObsmList.js +15 -15
- package/dist/esm/components/offcanvas/index.js +6 -6
- package/dist/esm/components/pseudospatial/Pseudospatial.js +31 -31
- package/dist/esm/components/pseudospatial/PseudospatialToolbar.js +17 -17
- package/dist/esm/components/scatterplot/Scatterplot.js +38 -38
- package/dist/esm/components/scatterplot/ScatterplotControls.js +9 -9
- package/dist/esm/components/scatterplot/SpatialControls.js +23 -23
- package/dist/esm/components/scatterplot/Toolbox.js +7 -7
- package/dist/esm/components/search-bar/SearchBar.js +27 -27
- package/dist/esm/components/search-bar/SearchInfo.js +14 -14
- package/dist/esm/components/search-bar/SearchResults.js +10 -10
- package/dist/esm/components/toolbar/Toolbar.js +6 -6
- package/dist/esm/components/var-list/VarItem.js +27 -27
- package/dist/esm/components/var-list/VarList.js +21 -21
- package/dist/esm/components/var-list/VarListToolbar.js +10 -10
- package/dist/esm/components/var-list/VarSet.js +22 -22
- package/dist/esm/components/violin/Violin.js +26 -26
- package/dist/esm/components/violin/ViolinControls.js +2 -2
- package/dist/esm/constants/colorscales.js +19 -19
- package/dist/esm/constants/constants.js +47 -47
- package/dist/esm/context/DatasetContext.js +11 -11
- package/dist/esm/context/FilterContext.js +3 -3
- package/dist/esm/context/SettingsContext.js +61 -61
- package/dist/esm/context/ZarrDataContext.js +3 -3
- package/dist/esm/helpers/color-helper.js +5 -5
- package/dist/esm/helpers/map-helper.js +2 -2
- package/dist/esm/helpers/zarr-helper.js +6 -6
- package/dist/esm/index.js +22 -22
- package/dist/esm/utils/Filter.js +8 -8
- package/dist/esm/utils/Histogram.js +6 -6
- package/dist/esm/utils/ImageViewer.js +4 -4
- package/dist/esm/utils/Legend.js +9 -9
- package/dist/esm/utils/LoadingIndicators.js +2 -2
- package/dist/esm/utils/Resolver.js +13 -13
- package/dist/esm/utils/Skeleton.js +2 -2
- package/dist/esm/utils/StyledTooltip.js +6 -6
- package/dist/esm/utils/VirtualizedList.js +9 -9
- package/dist/esm/utils/errors.js +15 -15
- package/dist/esm/utils/requests.js +8 -8
- package/dist/esm/utils/search.js +7 -7
- package/dist/esm/utils/string.js +7 -7
- package/dist/esm/utils/zarrData.js +13 -13
- package/package.json +11 -7
- package/scss/cherita-bootstrap.scss +2 -2
- package/scss/cherita.scss +24 -17
- package/scss/components/accordions.scss +4 -1
- package/scss/components/layouts.scss +13 -12
- package/scss/components/lists.scss +8 -4
- package/scss/components/plotly.scss +1 -0
|
@@ -3,24 +3,24 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
|
|
|
3
3
|
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; }
|
|
4
4
|
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
5
5
|
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); }
|
|
6
|
-
import { useEffect, useState } from
|
|
7
|
-
import { faDroplet, faPlus, faTrash } from
|
|
8
|
-
import { FontAwesomeIcon } from
|
|
9
|
-
import { MoreVert } from
|
|
10
|
-
import _ from
|
|
11
|
-
import { Button, Collapse, ListGroup, Table } from
|
|
12
|
-
import { COLOR_ENCODINGS, SELECTION_MODES } from
|
|
13
|
-
import { useDataset } from
|
|
14
|
-
import { useFilteredData } from
|
|
15
|
-
import { useSettings, useSettingsDispatch } from
|
|
16
|
-
import { Histogram } from
|
|
17
|
-
import { useDebouncedFetch, useFetch } from
|
|
6
|
+
import { useEffect, useState } from 'react';
|
|
7
|
+
import { faDroplet, faPlus, faTrash } from '@fortawesome/free-solid-svg-icons';
|
|
8
|
+
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
|
|
9
|
+
import { MoreVert } from '@mui/icons-material';
|
|
10
|
+
import _ from 'lodash';
|
|
11
|
+
import { Button, Collapse, ListGroup, Table } from 'react-bootstrap';
|
|
12
|
+
import { COLOR_ENCODINGS, SELECTION_MODES } from '../../constants/constants';
|
|
13
|
+
import { useDataset } from '../../context/DatasetContext';
|
|
14
|
+
import { useFilteredData } from '../../context/FilterContext';
|
|
15
|
+
import { useSettings, useSettingsDispatch } from '../../context/SettingsContext';
|
|
16
|
+
import { Histogram } from '../../utils/Histogram';
|
|
17
|
+
import { useDebouncedFetch, useFetch } from '../../utils/requests';
|
|
18
18
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
19
19
|
function VarHistogram(_ref) {
|
|
20
20
|
let {
|
|
21
21
|
item
|
|
22
22
|
} = _ref;
|
|
23
|
-
const ENDPOINT =
|
|
23
|
+
const ENDPOINT = 'var/histograms';
|
|
24
24
|
const dataset = useDataset();
|
|
25
25
|
const settings = useSettings();
|
|
26
26
|
const {
|
|
@@ -70,13 +70,13 @@ function VarDiseaseInfoItem(item) {
|
|
|
70
70
|
children: [/*#__PURE__*/_jsx("td", {
|
|
71
71
|
children: "Confidence"
|
|
72
72
|
}), /*#__PURE__*/_jsx("td", {
|
|
73
|
-
children: item.confidence ||
|
|
73
|
+
children: item.confidence || 'unknown'
|
|
74
74
|
})]
|
|
75
75
|
}), /*#__PURE__*/_jsxs("tr", {
|
|
76
76
|
children: [/*#__PURE__*/_jsxs("td", {
|
|
77
|
-
children: ["Organ", item.organs.length > 1 ?
|
|
77
|
+
children: ["Organ", item.organs.length > 1 ? 's' : '']
|
|
78
78
|
}), /*#__PURE__*/_jsx("td", {
|
|
79
|
-
children: item.organs.map(o => o.name).join(
|
|
79
|
+
children: item.organs.map(o => o.name).join(', ')
|
|
80
80
|
})]
|
|
81
81
|
}), !_.isEmpty(item.metadata) && _.map(item.metadata, (value, key) => {
|
|
82
82
|
if (value !== null && value !== undefined) {
|
|
@@ -114,7 +114,7 @@ export function SelectionItem(_ref3) {
|
|
|
114
114
|
showRemove = true,
|
|
115
115
|
isMultiple = false
|
|
116
116
|
} = _ref3;
|
|
117
|
-
const ENDPOINT =
|
|
117
|
+
const ENDPOINT = 'disease/gene';
|
|
118
118
|
const [openInfo, setOpenInfo] = useState(false);
|
|
119
119
|
const dataset = useDataset();
|
|
120
120
|
const params = {
|
|
@@ -133,7 +133,7 @@ export function SelectionItem(_ref3) {
|
|
|
133
133
|
const hasDiseaseInfo = !isPending && !serverError && !!(fetchedData !== null && fetchedData !== void 0 && fetchedData.length);
|
|
134
134
|
return /*#__PURE__*/_jsxs(_Fragment, {
|
|
135
135
|
children: [/*#__PURE__*/_jsx("div", {
|
|
136
|
-
className: hasDiseaseInfo ?
|
|
136
|
+
className: hasDiseaseInfo ? 'cursor-pointer' : '',
|
|
137
137
|
onClick: () => {
|
|
138
138
|
setOpenInfo(o => !o);
|
|
139
139
|
},
|
|
@@ -149,14 +149,14 @@ export function SelectionItem(_ref3) {
|
|
|
149
149
|
item: item
|
|
150
150
|
}), showSetColorEncoding && /*#__PURE__*/_jsxs(Button, {
|
|
151
151
|
type: "button",
|
|
152
|
-
variant: isActive ?
|
|
152
|
+
variant: isActive ? 'primary' : isNotInData ? 'outline-secondary' : 'outline-primary',
|
|
153
153
|
className: "m-0 p-0 px-1",
|
|
154
154
|
onClick: e => {
|
|
155
155
|
e.stopPropagation();
|
|
156
156
|
selectVar();
|
|
157
157
|
},
|
|
158
158
|
disabled: isNotInData,
|
|
159
|
-
title: isNotInData ?
|
|
159
|
+
title: isNotInData ? 'Not present in data' : 'Set as color encoding',
|
|
160
160
|
children: [/*#__PURE__*/_jsx(FontAwesomeIcon, {
|
|
161
161
|
icon: faDroplet
|
|
162
162
|
}), isMultiple && /*#__PURE__*/_jsx(FontAwesomeIcon, {
|
|
@@ -193,17 +193,17 @@ export function SelectionItem(_ref3) {
|
|
|
193
193
|
const select = (dispatch, mode, item) => {
|
|
194
194
|
if (mode === SELECTION_MODES.SINGLE) {
|
|
195
195
|
dispatch({
|
|
196
|
-
type:
|
|
196
|
+
type: 'select.var',
|
|
197
197
|
var: item
|
|
198
198
|
});
|
|
199
199
|
} else if (mode === SELECTION_MODES.MULTIPLE) {
|
|
200
200
|
dispatch({
|
|
201
|
-
type:
|
|
201
|
+
type: 'select.multivar',
|
|
202
202
|
var: item
|
|
203
203
|
});
|
|
204
204
|
}
|
|
205
205
|
dispatch({
|
|
206
|
-
type:
|
|
206
|
+
type: 'set.colorEncoding',
|
|
207
207
|
value: COLOR_ENCODINGS.VAR
|
|
208
208
|
});
|
|
209
209
|
};
|
|
@@ -219,19 +219,19 @@ export function VarItem(_ref4) {
|
|
|
219
219
|
const selectVar = () => debounceSelect(dispatch, mode, item);
|
|
220
220
|
const removeVar = () => {
|
|
221
221
|
dispatch({
|
|
222
|
-
type:
|
|
222
|
+
type: 'remove.var',
|
|
223
223
|
var: item
|
|
224
224
|
});
|
|
225
225
|
if (mode === SELECTION_MODES.SINGLE) {
|
|
226
226
|
if (active === item.matrix_index) {
|
|
227
227
|
dispatch({
|
|
228
|
-
type:
|
|
228
|
+
type: 'reset.var'
|
|
229
229
|
});
|
|
230
230
|
}
|
|
231
231
|
} else if (mode === SELECTION_MODES.MULTIPLE) {
|
|
232
232
|
if (active.includes(item.matrix_index)) {
|
|
233
233
|
dispatch({
|
|
234
|
-
type:
|
|
234
|
+
type: 'deselect.multivar',
|
|
235
235
|
var: item
|
|
236
236
|
});
|
|
237
237
|
}
|
|
@@ -239,7 +239,7 @@ export function VarItem(_ref4) {
|
|
|
239
239
|
};
|
|
240
240
|
const toggleVar = () => {
|
|
241
241
|
dispatch({
|
|
242
|
-
type:
|
|
242
|
+
type: 'toggle.multivar',
|
|
243
243
|
var: item
|
|
244
244
|
});
|
|
245
245
|
};
|
|
@@ -3,26 +3,26 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
|
|
|
3
3
|
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; }
|
|
4
4
|
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
5
5
|
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); }
|
|
6
|
-
import { useEffect, useState } from
|
|
7
|
-
import { faTimes } from
|
|
8
|
-
import { FontAwesomeIcon } from
|
|
9
|
-
import _ from
|
|
10
|
-
import { Alert, Button, ListGroup } from
|
|
11
|
-
import ButtonGroup from
|
|
12
|
-
import { VarItem } from
|
|
13
|
-
import { VarListToolbar } from
|
|
14
|
-
import { VarSet } from
|
|
15
|
-
import { SELECTION_MODES, VAR_SORT } from
|
|
16
|
-
import { useDataset } from
|
|
17
|
-
import { useFilteredData } from
|
|
18
|
-
import { useSettings, useSettingsDispatch } from
|
|
19
|
-
import { LoadingSpinner } from
|
|
20
|
-
import { useFetch } from
|
|
21
|
-
import { useSelectedMultiVar, useSelectedVar, useSettingsVars } from
|
|
6
|
+
import { useEffect, useState } from 'react';
|
|
7
|
+
import { faTimes } from '@fortawesome/free-solid-svg-icons';
|
|
8
|
+
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
|
|
9
|
+
import _ from 'lodash';
|
|
10
|
+
import { Alert, Button, ListGroup } from 'react-bootstrap';
|
|
11
|
+
import ButtonGroup from 'react-bootstrap/ButtonGroup';
|
|
12
|
+
import { VarItem } from './VarItem';
|
|
13
|
+
import { VarListToolbar } from './VarListToolbar';
|
|
14
|
+
import { VarSet } from './VarSet';
|
|
15
|
+
import { SELECTION_MODES, VAR_SORT } from '../../constants/constants';
|
|
16
|
+
import { useDataset } from '../../context/DatasetContext';
|
|
17
|
+
import { useFilteredData } from '../../context/FilterContext';
|
|
18
|
+
import { useSettings, useSettingsDispatch } from '../../context/SettingsContext';
|
|
19
|
+
import { LoadingSpinner } from '../../utils/LoadingIndicators';
|
|
20
|
+
import { useFetch } from '../../utils/requests';
|
|
21
|
+
import { useSelectedMultiVar, useSelectedVar, useSettingsVars } from '../../utils/Resolver';
|
|
22
22
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
23
23
|
export const useVarMean = function (varKeys) {
|
|
24
24
|
let enabled = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
25
|
-
const ENDPOINT =
|
|
25
|
+
const ENDPOINT = 'matrix/mean';
|
|
26
26
|
const dataset = useDataset();
|
|
27
27
|
const {
|
|
28
28
|
obsIndices
|
|
@@ -60,7 +60,7 @@ export const sortMeans = (i, means) => {
|
|
|
60
60
|
export function VarNamesList(_ref) {
|
|
61
61
|
let {
|
|
62
62
|
mode = SELECTION_MODES.SINGLE,
|
|
63
|
-
displayName =
|
|
63
|
+
displayName = 'genes'
|
|
64
64
|
} = _ref;
|
|
65
65
|
const settings = useSettings();
|
|
66
66
|
const dispatch = useSettingsDispatch();
|
|
@@ -90,7 +90,7 @@ export function VarNamesList(_ref) {
|
|
|
90
90
|
}, settings.varSort.var.sortOrder));
|
|
91
91
|
}
|
|
92
92
|
} else if (settings.varSort.var.sort === VAR_SORT.NAME) {
|
|
93
|
-
setSortedVars(_.orderBy(settingsVars,
|
|
93
|
+
setSortedVars(_.orderBy(settingsVars, 'name', settings.varSort.var.sortOrder));
|
|
94
94
|
} else {
|
|
95
95
|
setSortedVars(settingsVars);
|
|
96
96
|
}
|
|
@@ -146,7 +146,7 @@ export function VarNamesList(_ref) {
|
|
|
146
146
|
variant: "info",
|
|
147
147
|
onClick: () => {
|
|
148
148
|
dispatch({
|
|
149
|
-
type:
|
|
149
|
+
type: 'add.var',
|
|
150
150
|
var: {
|
|
151
151
|
name: newSetName(),
|
|
152
152
|
vars: [],
|
|
@@ -159,7 +159,7 @@ export function VarNamesList(_ref) {
|
|
|
159
159
|
variant: "info",
|
|
160
160
|
onClick: () => {
|
|
161
161
|
dispatch({
|
|
162
|
-
type:
|
|
162
|
+
type: 'reset.vars'
|
|
163
163
|
});
|
|
164
164
|
},
|
|
165
165
|
children: [/*#__PURE__*/_jsx(FontAwesomeIcon, {
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
import { useState } from
|
|
2
|
-
import { faArrowDown19, faArrowDownAZ, faArrowUp91, faArrowUpZA, faXmark } from
|
|
3
|
-
import { FontAwesomeIcon } from
|
|
4
|
-
import { ToggleButton, ToggleButtonGroup } from
|
|
5
|
-
import { VAR_SORT, VAR_SORT_ORDER } from
|
|
6
|
-
import { useSettings, useSettingsDispatch } from
|
|
1
|
+
import { useState } from 'react';
|
|
2
|
+
import { faArrowDown19, faArrowDownAZ, faArrowUp91, faArrowUpZA, faXmark } from '@fortawesome/free-solid-svg-icons';
|
|
3
|
+
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
|
|
4
|
+
import { ToggleButton, ToggleButtonGroup } from 'react-bootstrap';
|
|
5
|
+
import { VAR_SORT, VAR_SORT_ORDER } from '../../constants/constants';
|
|
6
|
+
import { useSettings, useSettingsDispatch } from '../../context/SettingsContext';
|
|
7
7
|
|
|
8
8
|
// @TODO: set option for "var" and "disease"
|
|
9
9
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
10
10
|
export function VarListToolbar(_ref) {
|
|
11
11
|
let {
|
|
12
|
-
varType =
|
|
12
|
+
varType = 'var'
|
|
13
13
|
} = _ref;
|
|
14
14
|
const settings = useSettings();
|
|
15
15
|
const dispatch = useSettingsDispatch();
|
|
@@ -20,7 +20,7 @@ export function VarListToolbar(_ref) {
|
|
|
20
20
|
if (sort !== sortValue) {
|
|
21
21
|
setSort(sortValue);
|
|
22
22
|
dispatch({
|
|
23
|
-
type:
|
|
23
|
+
type: 'set.varSort',
|
|
24
24
|
var: varType,
|
|
25
25
|
sort: sortValue,
|
|
26
26
|
sortOrder: sortOrder
|
|
@@ -29,7 +29,7 @@ export function VarListToolbar(_ref) {
|
|
|
29
29
|
const newSortOrder = sortOrder === VAR_SORT_ORDER.ASC ? VAR_SORT_ORDER.DESC : VAR_SORT_ORDER.ASC;
|
|
30
30
|
setSortOrder(newSortOrder);
|
|
31
31
|
dispatch({
|
|
32
|
-
type:
|
|
32
|
+
type: 'set.varSort',
|
|
33
33
|
var: varType,
|
|
34
34
|
sort: sortValue,
|
|
35
35
|
sortOrder: newSortOrder
|
|
@@ -79,7 +79,7 @@ export function VarListToolbar(_ref) {
|
|
|
79
79
|
onClick: () => {
|
|
80
80
|
setSort(VAR_SORT.NONE);
|
|
81
81
|
dispatch({
|
|
82
|
-
type:
|
|
82
|
+
type: 'set.varSort.sort',
|
|
83
83
|
var: varType,
|
|
84
84
|
sort: VAR_SORT.NONE
|
|
85
85
|
});
|
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
import { useState } from
|
|
2
|
-
import { faChevronDown, faChevronUp, faCircleInfo, faDroplet, faPlus, faTrash } from
|
|
3
|
-
import { FontAwesomeIcon } from
|
|
4
|
-
import _ from
|
|
5
|
-
import { Button, Collapse, ListGroup, OverlayTrigger, Tooltip } from
|
|
6
|
-
import { SelectionItem } from
|
|
7
|
-
import { COLOR_ENCODINGS, SELECTION_MODES } from
|
|
8
|
-
import { useSettings, useSettingsDispatch } from
|
|
9
|
-
import { SearchModal } from
|
|
1
|
+
import { useState } from 'react';
|
|
2
|
+
import { faChevronDown, faChevronUp, faCircleInfo, faDroplet, faPlus, faTrash } from '@fortawesome/free-solid-svg-icons';
|
|
3
|
+
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
|
|
4
|
+
import _ from 'lodash';
|
|
5
|
+
import { Button, Collapse, ListGroup, OverlayTrigger, Tooltip } from 'react-bootstrap';
|
|
6
|
+
import { SelectionItem } from './VarItem';
|
|
7
|
+
import { COLOR_ENCODINGS, SELECTION_MODES } from '../../constants/constants';
|
|
8
|
+
import { useSettings, useSettingsDispatch } from '../../context/SettingsContext';
|
|
9
|
+
import { SearchModal } from '../search-bar/SearchBar';
|
|
10
10
|
|
|
11
11
|
// @TODO: add button to score genes and plot
|
|
12
12
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
13
13
|
const addVarToSet = (dispatch, set, v) => {
|
|
14
14
|
dispatch({
|
|
15
|
-
type:
|
|
15
|
+
type: 'add.varSet.var',
|
|
16
16
|
varSet: set,
|
|
17
17
|
var: v
|
|
18
18
|
});
|
|
@@ -28,7 +28,7 @@ function SelectionSet(_ref) {
|
|
|
28
28
|
} = _ref;
|
|
29
29
|
const [openSet, setOpenSet] = useState(false);
|
|
30
30
|
const [showModal, setShowModal] = useState(false);
|
|
31
|
-
const [searchText, setSearchText] = useState(
|
|
31
|
+
const [searchText, setSearchText] = useState('');
|
|
32
32
|
const varList = set.vars.length ? _.map(set.vars, v => {
|
|
33
33
|
return /*#__PURE__*/_jsx(ListGroup.Item, {
|
|
34
34
|
children: /*#__PURE__*/_jsx(SelectionItem, {
|
|
@@ -88,7 +88,7 @@ function SelectionSet(_ref) {
|
|
|
88
88
|
})
|
|
89
89
|
}), /*#__PURE__*/_jsxs(Button, {
|
|
90
90
|
type: "button",
|
|
91
|
-
variant: isActive ?
|
|
91
|
+
variant: isActive ? 'primary' : 'outline-primary',
|
|
92
92
|
className: "m-0 p-0 px-1",
|
|
93
93
|
onClick: e => {
|
|
94
94
|
e.stopPropagation();
|
|
@@ -133,7 +133,7 @@ function SelectionSet(_ref) {
|
|
|
133
133
|
handleClose: () => setShowModal(false),
|
|
134
134
|
text: searchText,
|
|
135
135
|
setText: setSearchText,
|
|
136
|
-
displayText:
|
|
136
|
+
displayText: 'features',
|
|
137
137
|
handleSelect: (d, i) => {
|
|
138
138
|
addVarToSet(d, set, i);
|
|
139
139
|
},
|
|
@@ -153,16 +153,16 @@ export function VarSet(_ref2) {
|
|
|
153
153
|
const selectSet = () => {
|
|
154
154
|
if (mode === SELECTION_MODES.SINGLE) {
|
|
155
155
|
dispatch({
|
|
156
|
-
type:
|
|
156
|
+
type: 'select.var',
|
|
157
157
|
var: set
|
|
158
158
|
});
|
|
159
159
|
dispatch({
|
|
160
|
-
type:
|
|
161
|
-
value:
|
|
160
|
+
type: 'set.colorEncoding',
|
|
161
|
+
value: 'var'
|
|
162
162
|
});
|
|
163
163
|
} else if (mode === SELECTION_MODES.MULTIPLE) {
|
|
164
164
|
dispatch({
|
|
165
|
-
type:
|
|
165
|
+
type: 'select.multivar',
|
|
166
166
|
var: set
|
|
167
167
|
});
|
|
168
168
|
}
|
|
@@ -171,32 +171,32 @@ export function VarSet(_ref2) {
|
|
|
171
171
|
if (mode === SELECTION_MODES.SINGLE) {
|
|
172
172
|
if (active === set.name) {
|
|
173
173
|
dispatch({
|
|
174
|
-
type:
|
|
174
|
+
type: 'reset.var'
|
|
175
175
|
});
|
|
176
176
|
}
|
|
177
177
|
} else if (mode === SELECTION_MODES.MULTIPLE) {
|
|
178
178
|
if (active.includes(set.name)) {
|
|
179
179
|
dispatch({
|
|
180
|
-
type:
|
|
180
|
+
type: 'deselect.multivar',
|
|
181
181
|
var: set
|
|
182
182
|
});
|
|
183
183
|
}
|
|
184
184
|
}
|
|
185
185
|
dispatch({
|
|
186
|
-
type:
|
|
186
|
+
type: 'remove.var',
|
|
187
187
|
var: set
|
|
188
188
|
});
|
|
189
189
|
};
|
|
190
190
|
const removeSetVar = v => {
|
|
191
191
|
dispatch({
|
|
192
|
-
type:
|
|
192
|
+
type: 'remove.varSet.var',
|
|
193
193
|
varSet: set,
|
|
194
194
|
var: v
|
|
195
195
|
});
|
|
196
196
|
};
|
|
197
197
|
const toggleSet = () => {
|
|
198
198
|
dispatch({
|
|
199
|
-
type:
|
|
199
|
+
type: 'toggle.multivar',
|
|
200
200
|
var: set
|
|
201
201
|
});
|
|
202
202
|
};
|
|
@@ -3,22 +3,22 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
|
|
|
3
3
|
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; }
|
|
4
4
|
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
5
5
|
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); }
|
|
6
|
-
import { useEffect, useMemo, useState } from
|
|
7
|
-
import { faCircleInfo } from
|
|
8
|
-
import { FontAwesomeIcon } from
|
|
9
|
-
import _ from
|
|
10
|
-
import { Badge, Button } from
|
|
11
|
-
import Plot from
|
|
12
|
-
import { PLOTLY_MODEBAR_BUTTONS, VIOLIN_MODES } from
|
|
13
|
-
import { useDataset } from
|
|
14
|
-
import { useFilteredData } from
|
|
15
|
-
import { useSettings } from
|
|
16
|
-
import { LoadingSpinner } from
|
|
17
|
-
import { useDebouncedFetch } from
|
|
18
|
-
import { useSelectedMultiVar, useSelectedObs, useSelectedVar } from
|
|
19
|
-
import { StyledTooltip } from
|
|
20
|
-
import { PlotAlert } from
|
|
21
|
-
import { ControlsPlotlyToolbar, ObsPlotlyToolbar, VarPlotlyToolbar } from
|
|
6
|
+
import { useEffect, useMemo, useState } from 'react';
|
|
7
|
+
import { faCircleInfo } from '@fortawesome/free-solid-svg-icons';
|
|
8
|
+
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
|
|
9
|
+
import _ from 'lodash';
|
|
10
|
+
import { Badge, Button } from 'react-bootstrap';
|
|
11
|
+
import Plot from 'react-plotly.js';
|
|
12
|
+
import { PLOTLY_MODEBAR_BUTTONS, VIOLIN_MODES } from '../../constants/constants';
|
|
13
|
+
import { useDataset } from '../../context/DatasetContext';
|
|
14
|
+
import { useFilteredData } from '../../context/FilterContext';
|
|
15
|
+
import { useSettings } from '../../context/SettingsContext';
|
|
16
|
+
import { LoadingSpinner } from '../../utils/LoadingIndicators';
|
|
17
|
+
import { useDebouncedFetch } from '../../utils/requests';
|
|
18
|
+
import { useSelectedMultiVar, useSelectedObs, useSelectedVar } from '../../utils/Resolver';
|
|
19
|
+
import { StyledTooltip } from '../../utils/StyledTooltip';
|
|
20
|
+
import { PlotAlert } from '../full-page/PlotAlert';
|
|
21
|
+
import { ControlsPlotlyToolbar, ObsPlotlyToolbar, VarPlotlyToolbar } from '../toolbar/Toolbar';
|
|
22
22
|
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
23
23
|
export function Violin(_ref) {
|
|
24
24
|
let {
|
|
@@ -32,7 +32,7 @@ export function Violin(_ref) {
|
|
|
32
32
|
plotType,
|
|
33
33
|
setPlotType
|
|
34
34
|
} = _ref;
|
|
35
|
-
const ENDPOINT =
|
|
35
|
+
const ENDPOINT = 'violin';
|
|
36
36
|
const dataset = useDataset();
|
|
37
37
|
const settings = useSettings();
|
|
38
38
|
const {
|
|
@@ -118,15 +118,15 @@ export function Violin(_ref) {
|
|
|
118
118
|
children: [/*#__PURE__*/_jsx("div", {
|
|
119
119
|
className: "flex-grow-1 position-relative",
|
|
120
120
|
style: {
|
|
121
|
-
minHeight:
|
|
121
|
+
minHeight: '0'
|
|
122
122
|
},
|
|
123
123
|
children: /*#__PURE__*/_jsx(Plot, {
|
|
124
124
|
data: data,
|
|
125
125
|
layout: layout,
|
|
126
126
|
useResizeHandler: true,
|
|
127
127
|
style: {
|
|
128
|
-
width:
|
|
129
|
-
height:
|
|
128
|
+
width: '100%',
|
|
129
|
+
height: '100%'
|
|
130
130
|
},
|
|
131
131
|
config: {
|
|
132
132
|
displaylogo: false,
|
|
@@ -164,25 +164,25 @@ export function Violin(_ref) {
|
|
|
164
164
|
setPlotType: setPlotType,
|
|
165
165
|
children: [mode === VIOLIN_MODES.MULTIKEY && /*#__PURE__*/_jsxs("p", {
|
|
166
166
|
className: "p-0 m-0",
|
|
167
|
-
children: ["Select one or more",
|
|
167
|
+
children: ["Select one or more", ' ', showVarsBtn ? /*#__PURE__*/_jsx(Button, {
|
|
168
168
|
variant: "link",
|
|
169
169
|
className: "border-0 p-0 align-baseline",
|
|
170
170
|
onClick: setShowVars,
|
|
171
171
|
children: "features"
|
|
172
|
-
}) :
|
|
172
|
+
}) : 'features', ' ', "to display their expression distributions across all observations."]
|
|
173
173
|
}), mode === VIOLIN_MODES.GROUPBY && /*#__PURE__*/_jsxs("p", {
|
|
174
174
|
className: "p-0 m-0",
|
|
175
|
-
children: ["Select a",
|
|
175
|
+
children: ["Select a", ' ', showObsBtn ? /*#__PURE__*/_jsx(Button, {
|
|
176
176
|
variant: "link",
|
|
177
177
|
className: "border-0 p-0 align-baseline",
|
|
178
178
|
onClick: setShowObs,
|
|
179
179
|
children: "category"
|
|
180
|
-
}) :
|
|
180
|
+
}) : 'category', ' ', "to group observations, and choose a", ' ', showVarsBtn ? /*#__PURE__*/_jsx(Button, {
|
|
181
181
|
variant: "link",
|
|
182
182
|
className: "border-0 p-0 align-baseline",
|
|
183
183
|
onClick: setShowVars,
|
|
184
184
|
children: "feature"
|
|
185
|
-
}) :
|
|
185
|
+
}) : 'feature', ' ', "to view its distribution within each group."]
|
|
186
186
|
})]
|
|
187
187
|
});
|
|
188
188
|
} else {
|
|
@@ -191,7 +191,7 @@ export function Violin(_ref) {
|
|
|
191
191
|
heading: "Error displaying the violin plot",
|
|
192
192
|
plotType: plotType,
|
|
193
193
|
setPlotType: setPlotType,
|
|
194
|
-
children: serverError.message ||
|
|
194
|
+
children: serverError.message || 'An unexpected error occurred while generating the plot.'
|
|
195
195
|
});
|
|
196
196
|
}
|
|
197
197
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { Form } from
|
|
2
|
-
import { ScaleSelect } from
|
|
1
|
+
import { Form } from 'react-bootstrap';
|
|
2
|
+
import { ScaleSelect } from '../controls/Controls';
|
|
3
3
|
import { jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
|
|
4
4
|
export function ViolinControls() {
|
|
5
5
|
return /*#__PURE__*/_jsx(_Fragment, {
|
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
// From plotly https://github.com/plotly/plotly.js/blob/5bc25b490702e5ed61265207833dbd58e8ab27f1/src/components/colorscale/scales.js
|
|
2
2
|
export const COLORSCALES = {
|
|
3
|
-
Greys: [
|
|
4
|
-
YlGnBu: [
|
|
5
|
-
Greens: [
|
|
6
|
-
YlOrRd: [
|
|
7
|
-
Bluered: [
|
|
8
|
-
RdBu: [
|
|
9
|
-
Reds: [
|
|
10
|
-
Blues: [
|
|
11
|
-
Picnic: [
|
|
12
|
-
Rainbow: [
|
|
13
|
-
Portland: [
|
|
14
|
-
Jet: [
|
|
15
|
-
Hot: [
|
|
16
|
-
Blackbody: [
|
|
17
|
-
Earth: [
|
|
18
|
-
Electric: [
|
|
19
|
-
Viridis: [
|
|
20
|
-
Cividis: [
|
|
21
|
-
Accent: [
|
|
3
|
+
Greys: ['#000000', '#ffffff'],
|
|
4
|
+
YlGnBu: ['#081d58', '#253494', '#225ea8', '#1d91c0', '#41b6c4', '#7fcdbb', '#c7e9b4', '#edf8d9', '#ffffd9'],
|
|
5
|
+
Greens: ['#00441b', '#006d2c', '#238b45', '#41ab5d', '#74c476', '#a1d9a5', '#c7e9c0', '#e5f5e0', '#f7fcf5'],
|
|
6
|
+
YlOrRd: ['#800026', '#bd0026', '#e31a1c', '#fc4e2a', '#fd8d3c', '#feb24c', '#fed976', '#ffed9f', '#ffffcc'],
|
|
7
|
+
Bluered: ['#0000ff', '#ff0000'],
|
|
8
|
+
RdBu: ['#050aac', '#6a89f7', '#bebebe', '#dcaa84', '#e6915a', '#b20a1c'],
|
|
9
|
+
Reds: ['#dcdcdc', '#f5c39d', '#f5a069', '#b20a1c'],
|
|
10
|
+
Blues: ['#050aac', '#283cba', '#4664f5', '#5a78f5', '#6a89f7', '#dcdcdc'],
|
|
11
|
+
Picnic: ['#0000ff', '#3399ff', '#66ccff', '#99ccff', '#ccccff', '#ffffff', '#ffccff', '#ff99ff', '#ff66cc', '#ff6666', '#ff0000'],
|
|
12
|
+
Rainbow: ['#96005a', '#0000c8', '#0019ff', '#0098ff', '#2cff96', '#97ff00', '#ffe600', '#ff6f00', '#ff0000'],
|
|
13
|
+
Portland: ['#0c3383', '#0a88ba', '#f2d338', '#f28f38', '#d91e1e'],
|
|
14
|
+
Jet: ['#000083', '#003caa', '#05ffff', '#ffff00', '#fa0000', '#800000'],
|
|
15
|
+
Hot: ['#000000', '#e60000', '#ffd200', '#ffffff'],
|
|
16
|
+
Blackbody: ['#000000', '#e60000', '#e6d200', '#ffffff', '#a0c8ff'],
|
|
17
|
+
Earth: ['#000082', '#00b4b4', '#28d228', '#e6e632', '#784614', '#ffffff'],
|
|
18
|
+
Electric: ['#000000', '#1e0064', '#780064', '#a05a00', '#e6c800', '#fffadc'],
|
|
19
|
+
Viridis: ['#440154', '#48186a', '#472d7b', '#424086', '#3b528b', '#33638d', '#2c728e', '#26828e', '#21918c', '#1fa088', '#28ae80', '#3fbc73', '#5ec962', '#84d44b', '#addc30', '#d8e219', '#fde725'],
|
|
20
|
+
Cividis: ['#00204c', '#002a66', '#00346e', '#273f6c', '#3c4a6c', '#4c556b', '#5b5f6d', '#686a70', '#757575', '#838178', '#929c78', '#a19676', '#b0a572', '#c0af6d', '#d1ba65', '#e1c75c', '#f3db4f', '#ffe945'],
|
|
21
|
+
Accent: ['#7fc97f', '#beaed4', '#fdc086', '#ffff99', '#386cb0', '#f0027f', '#bf5b17', '#666666']
|
|
22
22
|
};
|