@haniffalab/cherita-react 1.2.0-dev.2025-05-21.31931945 → 1.2.0-dev.2025-05-21.e57ef5f2
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 +26 -19
- package/dist/cjs/components/dotplot/DotplotControls.js +17 -19
- package/dist/cjs/components/full-page/FullPage.js +9 -7
- package/dist/cjs/components/full-page/FullPagePseudospatial.js +9 -7
- package/dist/cjs/components/heatmap/Heatmap.js +22 -13
- package/dist/cjs/components/matrixplot/Matrixplot.js +22 -13
- package/dist/cjs/components/obs-list/ObsItem.js +37 -29
- package/dist/cjs/components/obs-list/ObsList.js +47 -44
- package/dist/cjs/components/obsm-list/ObsmList.js +9 -6
- package/dist/cjs/components/offcanvas/index.js +13 -9
- package/dist/cjs/components/pseudospatial/Pseudospatial.js +61 -53
- package/dist/cjs/components/pseudospatial/PseudospatialToolbar.js +17 -11
- package/dist/cjs/components/scatterplot/Scatterplot.js +52 -52
- package/dist/cjs/components/scatterplot/ScatterplotControls.js +3 -3
- package/dist/cjs/components/scatterplot/SpatialControls.js +4 -4
- package/dist/cjs/components/search-bar/SearchBar.js +12 -10
- package/dist/cjs/components/search-bar/SearchInfo.js +14 -13
- package/dist/cjs/components/search-bar/SearchResults.js +16 -14
- package/dist/cjs/components/var-list/VarItem.js +37 -120
- package/dist/cjs/components/var-list/VarList.js +16 -13
- package/dist/cjs/components/var-list/VarListToolbar.js +1 -2
- package/dist/cjs/components/var-list/VarSet.js +17 -29
- package/dist/cjs/components/violin/Violin.js +44 -35
- package/dist/cjs/context/DatasetContext.js +17 -11
- package/dist/cjs/context/FilterContext.js +9 -8
- package/dist/cjs/context/SettingsContext.js +169 -237
- package/dist/cjs/context/ZarrDataContext.js +1 -2
- package/dist/cjs/helpers/color-helper.js +3 -3
- package/dist/cjs/helpers/zarr-helper.js +15 -12
- package/dist/cjs/utils/Filter.js +13 -9
- package/dist/cjs/utils/Histogram.js +4 -3
- package/dist/cjs/utils/ImageViewer.js +1 -2
- package/dist/cjs/utils/Legend.js +3 -3
- package/dist/cjs/utils/LoadingIndicators.js +1 -1
- package/dist/cjs/utils/VirtualizedList.js +16 -13
- package/dist/cjs/utils/errors.js +20 -22
- package/dist/cjs/utils/requests.js +13 -10
- package/dist/cjs/utils/zarrData.js +12 -8
- package/dist/css/cherita.css +24 -10
- package/dist/css/cherita.css.map +1 -1
- package/dist/esm/components/dotplot/Dotplot.js +25 -17
- package/dist/esm/components/dotplot/DotplotControls.js +16 -17
- package/dist/esm/components/full-page/FullPage.js +8 -5
- package/dist/esm/components/full-page/FullPagePseudospatial.js +8 -5
- package/dist/esm/components/heatmap/Heatmap.js +21 -11
- package/dist/esm/components/matrixplot/Matrixplot.js +21 -11
- package/dist/esm/components/obs-list/ObsItem.js +36 -27
- package/dist/esm/components/obs-list/ObsList.js +46 -42
- package/dist/esm/components/obsm-list/ObsmList.js +8 -4
- package/dist/esm/components/offcanvas/index.js +13 -9
- package/dist/esm/components/pseudospatial/Pseudospatial.js +60 -51
- package/dist/esm/components/pseudospatial/PseudospatialToolbar.js +16 -9
- package/dist/esm/components/scatterplot/Scatterplot.js +51 -50
- package/dist/esm/components/scatterplot/ScatterplotControls.js +2 -1
- package/dist/esm/components/scatterplot/SpatialControls.js +3 -2
- package/dist/esm/components/search-bar/SearchBar.js +11 -8
- package/dist/esm/components/search-bar/SearchInfo.js +13 -11
- package/dist/esm/components/search-bar/SearchResults.js +15 -12
- package/dist/esm/components/var-list/VarItem.js +36 -117
- package/dist/esm/components/var-list/VarList.js +15 -11
- package/dist/esm/components/var-list/VarSet.js +17 -28
- package/dist/esm/components/violin/Violin.js +43 -33
- package/dist/esm/context/DatasetContext.js +16 -9
- package/dist/esm/context/FilterContext.js +8 -6
- package/dist/esm/context/SettingsContext.js +168 -235
- package/dist/esm/helpers/color-helper.js +3 -3
- package/dist/esm/helpers/zarr-helper.js +15 -12
- package/dist/esm/utils/Filter.js +13 -9
- package/dist/esm/utils/Histogram.js +4 -3
- package/dist/esm/utils/Legend.js +2 -1
- package/dist/esm/utils/LoadingIndicators.js +1 -1
- package/dist/esm/utils/VirtualizedList.js +15 -11
- package/dist/esm/utils/errors.js +20 -22
- package/dist/esm/utils/requests.js +13 -10
- package/dist/esm/utils/zarrData.js +12 -8
- package/package.json +4 -2
- package/scss/cherita.scss +5 -0
- package/scss/components/layouts.scss +4 -0
- package/scss/components/lists.scss +4 -5
|
@@ -8,8 +8,7 @@ exports.useZarrData = useZarrData;
|
|
|
8
8
|
var _react = _interopRequireWildcard(require("react"));
|
|
9
9
|
var _Filter = require("../utils/Filter");
|
|
10
10
|
var _zarrData = require("../utils/zarrData");
|
|
11
|
-
function
|
|
12
|
-
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; }
|
|
11
|
+
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); }
|
|
13
12
|
const ZarrDataContext = /*#__PURE__*/(0, _react.createContext)(null);
|
|
14
13
|
function ZarrDataProvider(_ref) {
|
|
15
14
|
let {
|
|
@@ -9,9 +9,9 @@ var _colorscales = require("../constants/colorscales");
|
|
|
9
9
|
var _SettingsContext = require("../context/SettingsContext");
|
|
10
10
|
const GRAY = [214, 212, 212];
|
|
11
11
|
const parseHexColor = color => {
|
|
12
|
-
const r = parseInt(color
|
|
13
|
-
const g = parseInt(color
|
|
14
|
-
const b = parseInt(color
|
|
12
|
+
const r = parseInt(color === null || color === void 0 ? void 0 : color.substring(1, 3), 16);
|
|
13
|
+
const g = parseInt(color === null || color === void 0 ? void 0 : color.substring(3, 5), 16);
|
|
14
|
+
const b = parseInt(color === null || color === void 0 ? void 0 : color.substring(5, 7), 16);
|
|
15
15
|
return [r, g, b];
|
|
16
16
|
};
|
|
17
17
|
const interpolateColor = (color1, color2, factor) => {
|
|
@@ -7,6 +7,11 @@ exports.useZarr = exports.useMultipleZarr = exports.ZarrHelper = exports.GET_OPT
|
|
|
7
7
|
var _react = require("react");
|
|
8
8
|
var _reactQuery = require("@tanstack/react-query");
|
|
9
9
|
var _zarr = require("zarr");
|
|
10
|
+
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
|
+
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
|
+
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
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
14
|
+
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); }
|
|
10
15
|
const GET_OPTIONS = exports.GET_OPTIONS = {
|
|
11
16
|
concurrencyLimit: 10,
|
|
12
17
|
// max number of concurrent requests (default 10)
|
|
@@ -15,7 +20,7 @@ const GET_OPTIONS = exports.GET_OPTIONS = {
|
|
|
15
20
|
progress,
|
|
16
21
|
queueSize
|
|
17
22
|
} = _ref;
|
|
18
|
-
console.debug(
|
|
23
|
+
console.debug("".concat(progress / queueSize * 100, "% complete."));
|
|
19
24
|
} // callback executed after each request
|
|
20
25
|
};
|
|
21
26
|
class ZarrHelper {
|
|
@@ -54,18 +59,17 @@ const useZarr = function (_ref2) {
|
|
|
54
59
|
data = null,
|
|
55
60
|
isLoading: isPending = false,
|
|
56
61
|
error: serverError = null
|
|
57
|
-
} = (0, _reactQuery.useQuery)({
|
|
62
|
+
} = (0, _reactQuery.useQuery)(_objectSpread({
|
|
58
63
|
queryKey: ["zarr", url, path, s],
|
|
59
64
|
queryFn: () => fetchDataFromZarr(url, path, s, options),
|
|
60
65
|
retry: (failureCount, _ref3) => {
|
|
61
66
|
let {
|
|
62
67
|
error
|
|
63
68
|
} = _ref3;
|
|
64
|
-
if ([400, 401, 403, 404, 422].includes(error
|
|
69
|
+
if ([400, 401, 403, 404, 422].includes(error === null || error === void 0 ? void 0 : error.status)) return false;
|
|
65
70
|
return failureCount < 3;
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
});
|
|
71
|
+
}
|
|
72
|
+
}, opts));
|
|
69
73
|
return {
|
|
70
74
|
data,
|
|
71
75
|
isPending,
|
|
@@ -77,7 +81,7 @@ const aggregateData = (inputs, data) => {
|
|
|
77
81
|
const dataObject = {};
|
|
78
82
|
inputs.forEach((input, index) => {
|
|
79
83
|
const key = input.key;
|
|
80
|
-
dataObject[key] = data
|
|
84
|
+
dataObject[key] = data === null || data === void 0 ? void 0 : data[index];
|
|
81
85
|
});
|
|
82
86
|
return dataObject;
|
|
83
87
|
};
|
|
@@ -97,18 +101,17 @@ const useMultipleZarr = function (inputs) {
|
|
|
97
101
|
isLoading: isPending = false,
|
|
98
102
|
serverError = null
|
|
99
103
|
} = (0, _reactQuery.useQueries)({
|
|
100
|
-
queries: inputs.map(input => ({
|
|
104
|
+
queries: inputs.map(input => _objectSpread({
|
|
101
105
|
queryKey: ["zarr", input.url, input.path, input.s],
|
|
102
106
|
queryFn: () => fetchDataFromZarr(input.url, input.path, input.s, options),
|
|
103
107
|
retry: (failureCount, _ref4) => {
|
|
104
108
|
let {
|
|
105
109
|
error
|
|
106
110
|
} = _ref4;
|
|
107
|
-
if ([400, 401, 403, 404, 422].includes(error
|
|
111
|
+
if ([400, 401, 403, 404, 422].includes(error === null || error === void 0 ? void 0 : error.status)) return false;
|
|
108
112
|
return failureCount < 3;
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
})),
|
|
113
|
+
}
|
|
114
|
+
}, opts)),
|
|
112
115
|
combine
|
|
113
116
|
});
|
|
114
117
|
return {
|
package/dist/cjs/utils/Filter.js
CHANGED
|
@@ -22,7 +22,7 @@ const isInBins = (v, binEdges, indices) => {
|
|
|
22
22
|
return _lodash.default.some(ranges, range => _lodash.default.inRange(v, ...range));
|
|
23
23
|
};
|
|
24
24
|
const isInPolygons = (polygons, positions, index) => {
|
|
25
|
-
if (!polygons
|
|
25
|
+
if (!(polygons !== null && polygons !== void 0 && polygons.length) || !(positions !== null && positions !== void 0 && positions.length)) {
|
|
26
26
|
return false;
|
|
27
27
|
}
|
|
28
28
|
return _lodash.default.some(polygons, (_f, i) => {
|
|
@@ -30,12 +30,13 @@ const isInPolygons = (polygons, positions, index) => {
|
|
|
30
30
|
});
|
|
31
31
|
};
|
|
32
32
|
const isInValues = (omit, value) => {
|
|
33
|
-
if (!omit
|
|
33
|
+
if (!(omit !== null && omit !== void 0 && omit.length)) {
|
|
34
34
|
return true;
|
|
35
35
|
}
|
|
36
36
|
return !_lodash.default.includes(omit, value);
|
|
37
37
|
};
|
|
38
38
|
const useFilter = data => {
|
|
39
|
+
var _settings$selectedObs, _settings$selectedObs2, _settings$selectedObs3, _settings$selectedObs4, _settings$selectedObs7, _settings$selectedObs8;
|
|
39
40
|
const settings = (0, _SettingsContext.useSettings)();
|
|
40
41
|
const filterDataDispatch = (0, _FilterContext.useFilteredDataDispatch)();
|
|
41
42
|
const {
|
|
@@ -45,24 +46,26 @@ const useFilter = data => {
|
|
|
45
46
|
isPending,
|
|
46
47
|
serverError
|
|
47
48
|
} = data;
|
|
48
|
-
const isCategorical = settings.selectedObs
|
|
49
|
-
const isContinuous = settings.selectedObs
|
|
50
|
-
const sliceByObs = settings.colorEncoding === _constants.COLOR_ENCODINGS.OBS && !!settings.selectedObs
|
|
49
|
+
const isCategorical = ((_settings$selectedObs = settings.selectedObs) === null || _settings$selectedObs === void 0 ? void 0 : _settings$selectedObs.type) === _constants.OBS_TYPES.CATEGORICAL || ((_settings$selectedObs2 = settings.selectedObs) === null || _settings$selectedObs2 === void 0 ? void 0 : _settings$selectedObs2.type) === _constants.OBS_TYPES.BOOLEAN;
|
|
50
|
+
const isContinuous = ((_settings$selectedObs3 = settings.selectedObs) === null || _settings$selectedObs3 === void 0 ? void 0 : _settings$selectedObs3.type) === _constants.OBS_TYPES.CONTINUOUS;
|
|
51
|
+
const sliceByObs = settings.colorEncoding === _constants.COLOR_ENCODINGS.OBS && !!((_settings$selectedObs4 = settings.selectedObs) !== null && _settings$selectedObs4 !== void 0 && _settings$selectedObs4.omit.length) || settings.sliceBy.obs;
|
|
51
52
|
const isInObsSlice = (0, _react.useCallback)((index, values) => {
|
|
52
53
|
let inSlice = true;
|
|
53
54
|
if (values && sliceByObs) {
|
|
54
55
|
if (isCategorical) {
|
|
55
|
-
|
|
56
|
+
var _settings$selectedObs5;
|
|
57
|
+
inSlice &= isInValues((_settings$selectedObs5 = settings.selectedObs) === null || _settings$selectedObs5 === void 0 ? void 0 : _settings$selectedObs5.omit, values[index]);
|
|
56
58
|
} else if (isContinuous) {
|
|
57
59
|
if (isNaN(values[index])) {
|
|
58
|
-
|
|
60
|
+
var _settings$selectedObs6;
|
|
61
|
+
inSlice &= isInValues((_settings$selectedObs6 = settings.selectedObs) === null || _settings$selectedObs6 === void 0 ? void 0 : _settings$selectedObs6.omit, -1);
|
|
59
62
|
} else {
|
|
60
63
|
inSlice &= isInBins(values[index], settings.selectedObs.bins.binEdges, _lodash.default.without(settings.selectedObs.omit, -1));
|
|
61
64
|
}
|
|
62
65
|
}
|
|
63
66
|
}
|
|
64
67
|
return inSlice;
|
|
65
|
-
}, [settings.selectedObs
|
|
68
|
+
}, [(_settings$selectedObs7 = settings.selectedObs) === null || _settings$selectedObs7 === void 0 || (_settings$selectedObs7 = _settings$selectedObs7.bins) === null || _settings$selectedObs7 === void 0 ? void 0 : _settings$selectedObs7.binEdges, (_settings$selectedObs8 = settings.selectedObs) === null || _settings$selectedObs8 === void 0 ? void 0 : _settings$selectedObs8.omit, isCategorical, isContinuous, sliceByObs]);
|
|
66
69
|
const isInPolygonsSlice = (0, _react.useCallback)((index, positions) => {
|
|
67
70
|
let inSlice = true;
|
|
68
71
|
if (settings.sliceBy.polygons && positions) {
|
|
@@ -128,11 +131,12 @@ const useFilter = data => {
|
|
|
128
131
|
slicedLength: filtered.length
|
|
129
132
|
};
|
|
130
133
|
} else {
|
|
134
|
+
var _obsData$data;
|
|
131
135
|
return {
|
|
132
136
|
filteredIndices: null,
|
|
133
137
|
valueMin: _lodash.default.min(obsData.data),
|
|
134
138
|
valueMax: _lodash.default.max(obsData.data),
|
|
135
|
-
slicedLength: obsData.data
|
|
139
|
+
slicedLength: (_obsData$data = obsData.data) === null || _obsData$data === void 0 ? void 0 : _obsData$data.length
|
|
136
140
|
};
|
|
137
141
|
}
|
|
138
142
|
}, [settings.colorEncoding, isContinuous, isInSlice, isPending, obsData.data, obsmData.data, serverError, xData.data]);
|
|
@@ -11,6 +11,7 @@ var _LoadingIndicators = require("./LoadingIndicators");
|
|
|
11
11
|
var _string = require("./string");
|
|
12
12
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
13
13
|
function Histogram(_ref) {
|
|
14
|
+
var _data$bin_edges;
|
|
14
15
|
let {
|
|
15
16
|
data,
|
|
16
17
|
isPending,
|
|
@@ -36,11 +37,11 @@ function Histogram(_ref) {
|
|
|
36
37
|
let {
|
|
37
38
|
dataIndex
|
|
38
39
|
} = _ref2;
|
|
39
|
-
return
|
|
40
|
+
return "".concat((0, _string.formatNumerical)(data.hist[dataIndex]));
|
|
40
41
|
},
|
|
41
42
|
xAxis: {
|
|
42
|
-
data: _lodash.default.range(data.bin_edges
|
|
43
|
-
valueFormatter: v =>
|
|
43
|
+
data: _lodash.default.range((_data$bin_edges = data.bin_edges) === null || _data$bin_edges === void 0 ? void 0 : _data$bin_edges.length) || null,
|
|
44
|
+
valueFormatter: v => "Bin [".concat((0, _string.formatNumerical)(data.bin_edges[v][0], _string.FORMATS.EXPONENTIAL), ", ").concat((0, _string.formatNumerical)(data.bin_edges[v][1], _string.FORMATS.EXPONENTIAL)).concat(v === data.bin_edges.length - 1 ? "]" : ")")
|
|
44
45
|
},
|
|
45
46
|
slotProps: {
|
|
46
47
|
popper: {
|
|
@@ -6,8 +6,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.ImageViewer = void 0;
|
|
7
7
|
var _react = _interopRequireWildcard(require("react"));
|
|
8
8
|
var _reactBootstrap = require("react-bootstrap");
|
|
9
|
-
function
|
|
10
|
-
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; }
|
|
9
|
+
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); }
|
|
11
10
|
const ImageViewer = _ref => {
|
|
12
11
|
let {
|
|
13
12
|
src,
|
package/dist/cjs/utils/Legend.js
CHANGED
|
@@ -13,8 +13,7 @@ var _constants = require("../constants/constants");
|
|
|
13
13
|
var _SettingsContext = require("../context/SettingsContext");
|
|
14
14
|
var _colorHelper = require("../helpers/color-helper");
|
|
15
15
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
16
|
-
function
|
|
17
|
-
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
|
+
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); }
|
|
18
17
|
function Legend(_ref) {
|
|
19
18
|
let {
|
|
20
19
|
isCategorical = false,
|
|
@@ -44,6 +43,7 @@ function Legend(_ref) {
|
|
|
44
43
|
});
|
|
45
44
|
}, [colorscale, getColor, isCategorical]);
|
|
46
45
|
if (settings.colorEncoding && !isCategorical) {
|
|
46
|
+
var _settings$selectedVar, _settings$selectedObs;
|
|
47
47
|
return /*#__PURE__*/_react.default.createElement("div", {
|
|
48
48
|
className: "cherita-legend"
|
|
49
49
|
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
@@ -53,7 +53,7 @@ function Legend(_ref) {
|
|
|
53
53
|
}, /*#__PURE__*/_react.default.createElement(_reactFontawesome.FontAwesomeIcon, {
|
|
54
54
|
icon: _freeSolidSvgIcons.faDroplet,
|
|
55
55
|
className: "me-1"
|
|
56
|
-
}), (settings.colorEncoding === _constants.COLOR_ENCODINGS.VAR ? settings.selectedVar
|
|
56
|
+
}), (settings.colorEncoding === _constants.COLOR_ENCODINGS.VAR ? (_settings$selectedVar = settings.selectedVar) === null || _settings$selectedVar === void 0 ? void 0 : _settings$selectedVar.name : (_settings$selectedObs = settings.selectedObs) === null || _settings$selectedObs === void 0 ? void 0 : _settings$selectedObs.name) + addText), spanList, /*#__PURE__*/_react.default.createElement("span", {
|
|
57
57
|
className: "domain-min"
|
|
58
58
|
}, (0, _string.formatNumerical)(min, _string.FORMATS.EXPONENTIAL)), /*#__PURE__*/_react.default.createElement("span", {
|
|
59
59
|
className: "domain-med"
|
|
@@ -16,7 +16,7 @@ const LoadingSpinner = _ref => {
|
|
|
16
16
|
className: "loading-spinner"
|
|
17
17
|
}, /*#__PURE__*/_react.default.createElement(_material.CircularProgress, {
|
|
18
18
|
disableShrink: disableShrink
|
|
19
|
-
}), text
|
|
19
|
+
}), (text === null || text === void 0 ? void 0 : text.length) && /*#__PURE__*/_react.default.createElement("span", {
|
|
20
20
|
className: "visually-hidden"
|
|
21
21
|
}, text));
|
|
22
22
|
};
|
|
@@ -6,19 +6,22 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.VirtualizedList = VirtualizedList;
|
|
7
7
|
var _react = _interopRequireWildcard(require("react"));
|
|
8
8
|
var _reactVirtual = require("@tanstack/react-virtual");
|
|
9
|
-
|
|
10
|
-
function _interopRequireWildcard(e, r) { if (!
|
|
9
|
+
const _excluded = ["getDataAtIndex", "count", "ItemComponent", "estimateSize", "overscan", "maxHeight"];
|
|
10
|
+
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); }
|
|
11
11
|
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
|
|
12
|
+
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; }
|
|
13
|
+
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; }
|
|
12
14
|
function VirtualizedList(_ref) {
|
|
15
|
+
var _virtualItems$0$start, _virtualItems$;
|
|
13
16
|
let {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
17
|
+
getDataAtIndex,
|
|
18
|
+
count,
|
|
19
|
+
ItemComponent,
|
|
20
|
+
estimateSize = 45,
|
|
21
|
+
overscan = 25,
|
|
22
|
+
maxHeight = "65vh"
|
|
23
|
+
} = _ref,
|
|
24
|
+
props = _objectWithoutProperties(_ref, _excluded);
|
|
22
25
|
const [parentNode, setParentNode] = (0, _react.useState)(null);
|
|
23
26
|
const itemVirtualizer = (0, _reactVirtual.useVirtualizer)({
|
|
24
27
|
count: count,
|
|
@@ -32,7 +35,7 @@ function VirtualizedList(_ref) {
|
|
|
32
35
|
const virtualItems = itemVirtualizer.getVirtualItems();
|
|
33
36
|
(0, _react.useEffect)(() => {
|
|
34
37
|
itemVirtualizer.measure();
|
|
35
|
-
}, [itemVirtualizer, parentNode
|
|
38
|
+
}, [itemVirtualizer, parentNode === null || parentNode === void 0 ? void 0 : parentNode.clientHeight, getDataAtIndex]);
|
|
36
39
|
return /*#__PURE__*/_react.default.createElement("div", {
|
|
37
40
|
ref: refCallback,
|
|
38
41
|
style: {
|
|
@@ -42,7 +45,7 @@ function VirtualizedList(_ref) {
|
|
|
42
45
|
className: "modern-scrollbars"
|
|
43
46
|
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
44
47
|
style: {
|
|
45
|
-
height:
|
|
48
|
+
height: "".concat(itemVirtualizer.getTotalSize(), "px"),
|
|
46
49
|
width: "100%",
|
|
47
50
|
position: "relative",
|
|
48
51
|
willChange: "transform"
|
|
@@ -53,7 +56,7 @@ function VirtualizedList(_ref) {
|
|
|
53
56
|
top: 0,
|
|
54
57
|
left: 0,
|
|
55
58
|
width: "100%",
|
|
56
|
-
transform:
|
|
59
|
+
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
60
|
}
|
|
58
61
|
}, virtualItems.map(virtualItem => /*#__PURE__*/_react.default.createElement("div", {
|
|
59
62
|
key: virtualItem.key,
|
package/dist/cjs/utils/errors.js
CHANGED
|
@@ -4,6 +4,11 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.parseError = void 0;
|
|
7
|
+
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; }
|
|
8
|
+
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; }
|
|
9
|
+
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; }
|
|
10
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
11
|
+
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); }
|
|
7
12
|
const parseError = err => {
|
|
8
13
|
if (err === DOMException.TIMEOUT_ERR) {
|
|
9
14
|
return {
|
|
@@ -11,42 +16,35 @@ const parseError = err => {
|
|
|
11
16
|
name: err
|
|
12
17
|
};
|
|
13
18
|
}
|
|
14
|
-
switch (err
|
|
19
|
+
switch (err === null || err === void 0 ? void 0 : err.name) {
|
|
15
20
|
case "TypeError":
|
|
16
|
-
return {
|
|
17
|
-
...err,
|
|
21
|
+
return _objectSpread(_objectSpread({}, err), {}, {
|
|
18
22
|
message: "Failed to fetch data from server"
|
|
19
|
-
};
|
|
23
|
+
});
|
|
20
24
|
case "ReadZarrError":
|
|
21
|
-
return {
|
|
22
|
-
...err,
|
|
25
|
+
return _objectSpread(_objectSpread({}, err), {}, {
|
|
23
26
|
message: "Failed to read AnnData-Zarr"
|
|
24
|
-
};
|
|
27
|
+
});
|
|
25
28
|
case "InvalidObs":
|
|
26
|
-
return {
|
|
27
|
-
...err,
|
|
29
|
+
return _objectSpread(_objectSpread({}, err), {}, {
|
|
28
30
|
message: "Observation not found in dataset"
|
|
29
|
-
};
|
|
31
|
+
});
|
|
30
32
|
case "InvalidVar":
|
|
31
|
-
return {
|
|
32
|
-
...err,
|
|
33
|
+
return _objectSpread(_objectSpread({}, err), {}, {
|
|
33
34
|
message: "Feature not found in dataset"
|
|
34
|
-
};
|
|
35
|
+
});
|
|
35
36
|
case "InvalidKey":
|
|
36
|
-
return {
|
|
37
|
-
...err,
|
|
37
|
+
return _objectSpread(_objectSpread({}, err), {}, {
|
|
38
38
|
message: "Key not found in datset"
|
|
39
|
-
};
|
|
39
|
+
});
|
|
40
40
|
case "BadRequest":
|
|
41
|
-
return {
|
|
42
|
-
...err,
|
|
41
|
+
return _objectSpread(_objectSpread({}, err), {}, {
|
|
43
42
|
message: "Invalid request to server"
|
|
44
|
-
};
|
|
43
|
+
});
|
|
45
44
|
case "InternalServerError":
|
|
46
|
-
return {
|
|
47
|
-
...err,
|
|
45
|
+
return _objectSpread(_objectSpread({}, err), {}, {
|
|
48
46
|
message: "Server error"
|
|
49
|
-
};
|
|
47
|
+
});
|
|
50
48
|
default:
|
|
51
49
|
return err;
|
|
52
50
|
}
|
|
@@ -8,6 +8,11 @@ exports.useFetch = exports.useDebouncedFetch = void 0;
|
|
|
8
8
|
var _reactQuery = require("@tanstack/react-query");
|
|
9
9
|
var _usehooks = require("@uidotdev/usehooks");
|
|
10
10
|
var _errors = require("./errors");
|
|
11
|
+
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; }
|
|
12
|
+
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; }
|
|
13
|
+
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; }
|
|
14
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
15
|
+
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); }
|
|
11
16
|
async function fetchData(endpoint, params) {
|
|
12
17
|
let signal = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
|
|
13
18
|
let ms = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 300000;
|
|
@@ -49,7 +54,7 @@ const useFetch = function (endpoint, params) {
|
|
|
49
54
|
data: fetchedData = null,
|
|
50
55
|
isLoading: isPending = false,
|
|
51
56
|
error: serverError = null
|
|
52
|
-
} = (0, _reactQuery.useQuery)({
|
|
57
|
+
} = (0, _reactQuery.useQuery)(_objectSpread({
|
|
53
58
|
queryKey: [endpoint, params],
|
|
54
59
|
queryFn: _ref => {
|
|
55
60
|
let {
|
|
@@ -61,11 +66,10 @@ const useFetch = function (endpoint, params) {
|
|
|
61
66
|
let {
|
|
62
67
|
error
|
|
63
68
|
} = _ref2;
|
|
64
|
-
if ([400, 401, 403, 404, 422].includes(error
|
|
69
|
+
if ([400, 401, 403, 404, 422].includes(error === null || error === void 0 ? void 0 : error.status)) return false;
|
|
65
70
|
return failureCount < 3;
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
});
|
|
71
|
+
}
|
|
72
|
+
}, opts));
|
|
69
73
|
return {
|
|
70
74
|
fetchedData,
|
|
71
75
|
isPending,
|
|
@@ -85,7 +89,7 @@ const useDebouncedFetch = function (endpoint, params) {
|
|
|
85
89
|
data: fetchedData = null,
|
|
86
90
|
isLoading: isPending = false,
|
|
87
91
|
error: serverError = null
|
|
88
|
-
} = (0, _reactQuery.useQuery)({
|
|
92
|
+
} = (0, _reactQuery.useQuery)(_objectSpread({
|
|
89
93
|
queryKey: [endpoint, debouncedParams],
|
|
90
94
|
queryFn: _ref3 => {
|
|
91
95
|
let {
|
|
@@ -97,11 +101,10 @@ const useDebouncedFetch = function (endpoint, params) {
|
|
|
97
101
|
let {
|
|
98
102
|
error
|
|
99
103
|
} = _ref4;
|
|
100
|
-
if ([400, 401, 403, 404, 422].includes(error
|
|
104
|
+
if ([400, 401, 403, 404, 422].includes(error === null || error === void 0 ? void 0 : error.status)) return false;
|
|
101
105
|
return failureCount < 3;
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
});
|
|
106
|
+
}
|
|
107
|
+
}, opts));
|
|
105
108
|
return {
|
|
106
109
|
fetchedData,
|
|
107
110
|
isPending,
|
|
@@ -44,14 +44,15 @@ const meanData = (_i, data) => {
|
|
|
44
44
|
});
|
|
45
45
|
};
|
|
46
46
|
const useXData = function () {
|
|
47
|
+
var _settings$selectedVar, _settings$selectedVar2, _settings$selectedVar3;
|
|
47
48
|
let agg = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : meanData;
|
|
48
49
|
const dataset = (0, _DatasetContext.useDataset)();
|
|
49
50
|
const settings = (0, _SettingsContext.useSettings)();
|
|
50
|
-
const [xParams, setXParams] = (0, _react.useState)(!settings.selectedVar ? [] : !settings.selectedVar
|
|
51
|
+
const [xParams, setXParams] = (0, _react.useState)(!settings.selectedVar ? [] : !((_settings$selectedVar = settings.selectedVar) !== null && _settings$selectedVar !== void 0 && _settings$selectedVar.isSet) ? [{
|
|
51
52
|
url: dataset.url,
|
|
52
53
|
path: "X",
|
|
53
|
-
s: [null, settings.selectedVar
|
|
54
|
-
}] : _lodash.default.map(settings.selectedVar
|
|
54
|
+
s: [null, (_settings$selectedVar2 = settings.selectedVar) === null || _settings$selectedVar2 === void 0 ? void 0 : _settings$selectedVar2.matrix_index]
|
|
55
|
+
}] : _lodash.default.map((_settings$selectedVar3 = settings.selectedVar) === null || _settings$selectedVar3 === void 0 ? void 0 : _settings$selectedVar3.vars, v => {
|
|
55
56
|
return {
|
|
56
57
|
url: dataset.url,
|
|
57
58
|
path: "X",
|
|
@@ -59,11 +60,12 @@ const useXData = function () {
|
|
|
59
60
|
};
|
|
60
61
|
}));
|
|
61
62
|
(0, _react.useEffect)(() => {
|
|
62
|
-
|
|
63
|
+
var _settings$selectedVar4, _settings$selectedVar5, _settings$selectedVar6;
|
|
64
|
+
setXParams(!settings.selectedVar ? [] : !((_settings$selectedVar4 = settings.selectedVar) !== null && _settings$selectedVar4 !== void 0 && _settings$selectedVar4.isSet) ? [{
|
|
63
65
|
url: dataset.url,
|
|
64
66
|
path: "X",
|
|
65
|
-
s: [null, settings.selectedVar
|
|
66
|
-
}] : _lodash.default.map(settings.selectedVar
|
|
67
|
+
s: [null, (_settings$selectedVar5 = settings.selectedVar) === null || _settings$selectedVar5 === void 0 ? void 0 : _settings$selectedVar5.matrix_index]
|
|
68
|
+
}] : _lodash.default.map((_settings$selectedVar6 = settings.selectedVar) === null || _settings$selectedVar6 === void 0 ? void 0 : _settings$selectedVar6.vars, v => {
|
|
67
69
|
return {
|
|
68
70
|
url: dataset.url,
|
|
69
71
|
path: "X",
|
|
@@ -77,18 +79,20 @@ const useXData = function () {
|
|
|
77
79
|
};
|
|
78
80
|
exports.useXData = useXData;
|
|
79
81
|
const useObsData = function () {
|
|
82
|
+
var _obs, _obs2;
|
|
80
83
|
let obs = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
|
|
81
84
|
const dataset = (0, _DatasetContext.useDataset)();
|
|
82
85
|
const settings = (0, _SettingsContext.useSettings)();
|
|
83
86
|
obs = obs || settings.selectedObs;
|
|
84
87
|
const [obsParams, setObsParams] = (0, _react.useState)({
|
|
85
88
|
url: dataset.url,
|
|
86
|
-
path: "obs/" + obs
|
|
89
|
+
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" : "")
|
|
87
90
|
});
|
|
88
91
|
(0, _react.useEffect)(() => {
|
|
92
|
+
var _obs3, _obs4;
|
|
89
93
|
setObsParams({
|
|
90
94
|
url: dataset.url,
|
|
91
|
-
path: "obs/" + obs
|
|
95
|
+
path: "obs/" + ((_obs3 = obs) === null || _obs3 === void 0 ? void 0 : _obs3.name) + (((_obs4 = obs) === null || _obs4 === void 0 ? void 0 : _obs4.type) === _constants.OBS_TYPES.CATEGORICAL ? "/codes" : "")
|
|
92
96
|
});
|
|
93
97
|
}, [dataset.url, obs]);
|
|
94
98
|
return (0, _zarrHelper.useZarr)(obsParams, _zarrHelper.GET_OPTIONS, {
|
package/dist/css/cherita.css
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
@charset "UTF-8";
|
|
2
2
|
/*!
|
|
3
|
-
* Bootstrap v5.3.
|
|
3
|
+
* Bootstrap v5.3.6 (https://getbootstrap.com/)
|
|
4
4
|
* Copyright 2011-2025 The Bootstrap Authors
|
|
5
5
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
|
6
6
|
*/
|
|
@@ -4454,24 +4454,24 @@ textarea.form-control-lg {
|
|
|
4454
4454
|
border-top-right-radius: 0;
|
|
4455
4455
|
border-bottom-right-radius: 0;
|
|
4456
4456
|
}
|
|
4457
|
-
.card-group > .card:not(:last-child) .card-img-top,
|
|
4458
|
-
.card-group > .card:not(:last-child) .card-header {
|
|
4457
|
+
.card-group > .card:not(:last-child) > .card-img-top,
|
|
4458
|
+
.card-group > .card:not(:last-child) > .card-header {
|
|
4459
4459
|
border-top-right-radius: 0;
|
|
4460
4460
|
}
|
|
4461
|
-
.card-group > .card:not(:last-child) .card-img-bottom,
|
|
4462
|
-
.card-group > .card:not(:last-child) .card-footer {
|
|
4461
|
+
.card-group > .card:not(:last-child) > .card-img-bottom,
|
|
4462
|
+
.card-group > .card:not(:last-child) > .card-footer {
|
|
4463
4463
|
border-bottom-right-radius: 0;
|
|
4464
4464
|
}
|
|
4465
4465
|
.card-group > .card:not(:first-child) {
|
|
4466
4466
|
border-top-left-radius: 0;
|
|
4467
4467
|
border-bottom-left-radius: 0;
|
|
4468
4468
|
}
|
|
4469
|
-
.card-group > .card:not(:first-child) .card-img-top,
|
|
4470
|
-
.card-group > .card:not(:first-child) .card-header {
|
|
4469
|
+
.card-group > .card:not(:first-child) > .card-img-top,
|
|
4470
|
+
.card-group > .card:not(:first-child) > .card-header {
|
|
4471
4471
|
border-top-left-radius: 0;
|
|
4472
4472
|
}
|
|
4473
|
-
.card-group > .card:not(:first-child) .card-img-bottom,
|
|
4474
|
-
.card-group > .card:not(:first-child) .card-footer {
|
|
4473
|
+
.card-group > .card:not(:first-child) > .card-img-bottom,
|
|
4474
|
+
.card-group > .card:not(:first-child) > .card-footer {
|
|
4475
4475
|
border-bottom-left-radius: 0;
|
|
4476
4476
|
}
|
|
4477
4477
|
}
|
|
@@ -7054,6 +7054,10 @@ textarea.form-control-lg {
|
|
|
7054
7054
|
.visually-hidden-focusable:not(:focus):not(:focus-within):not(caption) {
|
|
7055
7055
|
position: absolute !important;
|
|
7056
7056
|
}
|
|
7057
|
+
.visually-hidden *,
|
|
7058
|
+
.visually-hidden-focusable:not(:focus):not(:focus-within) * {
|
|
7059
|
+
overflow: hidden !important;
|
|
7060
|
+
}
|
|
7057
7061
|
|
|
7058
7062
|
.stretched-link::after {
|
|
7059
7063
|
position: absolute;
|
|
@@ -11915,7 +11919,8 @@ textarea.form-control-lg {
|
|
|
11915
11919
|
border-radius: var(--bs-border-radius);
|
|
11916
11920
|
}
|
|
11917
11921
|
|
|
11918
|
-
.cherita-list.var-set-list .list-group-item {
|
|
11922
|
+
.cherita-list.var-set-list > .list-group-item {
|
|
11923
|
+
filter: brightness(0.95);
|
|
11919
11924
|
padding-right: 0;
|
|
11920
11925
|
padding-left: 0.35rem;
|
|
11921
11926
|
}
|
|
@@ -12006,6 +12011,10 @@ textarea.form-control-lg {
|
|
|
12006
12011
|
border-left: 1px solid #dee2e6;
|
|
12007
12012
|
}
|
|
12008
12013
|
|
|
12014
|
+
.ps-xs-1 {
|
|
12015
|
+
padding-left: 0.15rem !important;
|
|
12016
|
+
}
|
|
12017
|
+
|
|
12009
12018
|
.js-plotly-plot .plotly .modebar {
|
|
12010
12019
|
border-radius: 5px;
|
|
12011
12020
|
background-color: rgba(0, 0, 0, 0.6);
|
|
@@ -12324,6 +12333,11 @@ textarea.form-control-lg {
|
|
|
12324
12333
|
font-size: 0.85rem !important;
|
|
12325
12334
|
}
|
|
12326
12335
|
|
|
12336
|
+
.feature-disease-info-list {
|
|
12337
|
+
max-height: 300px;
|
|
12338
|
+
overflow-y: auto;
|
|
12339
|
+
}
|
|
12340
|
+
|
|
12327
12341
|
.feature-disease-info {
|
|
12328
12342
|
font-weight: 300;
|
|
12329
12343
|
padding-left: 0 !important;
|