@haniffalab/cherita-react 1.0.0 → 1.1.0-dev.2025-04-01.1c91bb8b
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/LICENSE +1 -1
- package/dist/{components → cjs/components}/full-page/FullPage.js +32 -22
- package/dist/{components → cjs/components}/full-page/FullPagePseudospatial.js +7 -6
- package/dist/{components → cjs/components}/obs-list/ObsItem.js +88 -77
- package/dist/{components → cjs/components}/obs-list/ObsList.js +133 -50
- package/dist/cjs/components/obs-list/ObsToolbar.js +24 -0
- package/dist/{components → cjs/components}/obsm-list/ObsmList.js +8 -5
- package/dist/{components → cjs/components}/offcanvas/index.js +24 -20
- package/dist/{components → cjs/components}/pseudospatial/Pseudospatial.js +10 -9
- package/dist/{components → cjs/components}/pseudospatial/PseudospatialToolbar.js +4 -3
- package/dist/{components → cjs/components}/scatterplot/Scatterplot.js +33 -24
- package/dist/{components → cjs/components}/scatterplot/SpatialControls.js +43 -42
- package/dist/cjs/components/scatterplot/Toolbox.js +62 -0
- package/dist/{components → cjs/components}/search-bar/SearchBar.js +24 -7
- package/dist/{components → cjs/components}/search-bar/SearchResults.js +13 -17
- package/dist/{components → cjs/components}/var-list/VarItem.js +38 -29
- package/dist/{components → cjs/components}/var-list/VarList.js +59 -31
- package/dist/{components → cjs/components}/var-list/VarListToolbar.js +18 -14
- package/dist/{components → cjs/components}/var-list/VarSet.js +24 -20
- package/dist/{components → cjs/components}/violin/Violin.js +4 -3
- package/dist/{constants → cjs/constants}/constants.js +6 -2
- package/dist/{context → cjs/context}/DatasetContext.js +12 -11
- package/dist/{context → cjs/context}/FilterContext.js +4 -3
- package/dist/{context → cjs/context}/ZarrDataContext.js +4 -3
- package/dist/{helpers → cjs/helpers}/color-helper.js +12 -11
- package/dist/{helpers → cjs/helpers}/map-helper.js +8 -7
- package/dist/{helpers → cjs/helpers}/zarr-helper.js +30 -38
- package/dist/{utils → cjs/utils}/Filter.js +1 -1
- package/dist/{utils → cjs/utils}/Histogram.js +12 -8
- package/dist/{utils → cjs/utils}/ImageViewer.js +6 -5
- package/dist/{utils → cjs/utils}/Legend.js +8 -7
- package/dist/{utils → cjs/utils}/LoadingIndicators.js +5 -4
- package/dist/cjs/utils/Skeleton.js +19 -0
- package/dist/{utils → cjs/utils}/VirtualizedList.js +10 -9
- package/dist/{utils → cjs/utils}/requests.js +37 -39
- package/dist/{utils → cjs/utils}/string.js +9 -4
- package/dist/{utils → cjs/utils}/zarrData.js +12 -4
- package/dist/css/cherita.css +147 -152
- package/dist/css/cherita.css.map +1 -1
- package/dist/esm/components/dotplot/Dotplot.js +135 -0
- package/dist/esm/components/dotplot/DotplotControls.js +148 -0
- package/dist/esm/components/full-page/FullPage.js +143 -0
- package/dist/esm/components/full-page/FullPagePseudospatial.js +151 -0
- package/dist/esm/components/heatmap/Heatmap.js +105 -0
- package/dist/esm/components/heatmap/HeatmapControls.js +23 -0
- package/dist/esm/components/matrixplot/Matrixplot.js +107 -0
- package/dist/esm/components/matrixplot/MatrixplotControls.js +38 -0
- package/dist/esm/components/obs-list/ObsItem.js +484 -0
- package/dist/esm/components/obs-list/ObsList.js +338 -0
- package/dist/esm/components/obs-list/ObsToolbar.js +17 -0
- package/dist/esm/components/obsm-list/ObsmList.js +75 -0
- package/dist/esm/components/offcanvas/index.js +67 -0
- package/dist/esm/components/pseudospatial/Pseudospatial.js +228 -0
- package/dist/esm/components/pseudospatial/PseudospatialToolbar.js +123 -0
- package/dist/esm/components/scatterplot/Scatterplot.js +394 -0
- package/dist/esm/components/scatterplot/ScatterplotControls.js +71 -0
- package/dist/esm/components/scatterplot/SpatialControls.js +140 -0
- package/dist/esm/components/scatterplot/Toolbox.js +55 -0
- package/dist/esm/components/search-bar/SearchBar.js +90 -0
- package/dist/esm/components/search-bar/SearchResults.js +139 -0
- package/dist/esm/components/var-list/VarItem.js +254 -0
- package/dist/esm/components/var-list/VarList.js +291 -0
- package/dist/esm/components/var-list/VarListToolbar.js +87 -0
- package/dist/esm/components/var-list/VarSet.js +194 -0
- package/dist/esm/components/violin/Violin.js +141 -0
- package/dist/esm/components/violin/ViolinControls.js +24 -0
- package/dist/esm/constants/colorscales.js +22 -0
- package/dist/esm/constants/constants.js +88 -0
- package/dist/esm/context/DatasetContext.js +571 -0
- package/dist/esm/context/FilterContext.js +48 -0
- package/dist/esm/context/ZarrDataContext.js +26 -0
- package/dist/esm/helpers/color-helper.js +66 -0
- package/dist/esm/helpers/map-helper.js +53 -0
- package/dist/esm/helpers/zarr-helper.js +111 -0
- package/dist/esm/index.js +22 -0
- package/dist/esm/utils/Filter.js +147 -0
- package/dist/esm/utils/Histogram.js +44 -0
- package/dist/esm/utils/ImageViewer.js +27 -0
- package/dist/esm/utils/Legend.js +58 -0
- package/dist/esm/utils/LoadingIndicators.js +22 -0
- package/dist/esm/utils/Skeleton.js +12 -0
- package/dist/esm/utils/VirtualizedList.js +55 -0
- package/dist/esm/utils/errors.js +47 -0
- package/dist/esm/utils/requests.js +102 -0
- package/dist/esm/utils/search.js +39 -0
- package/dist/esm/utils/string.js +59 -0
- package/dist/esm/utils/zarrData.js +102 -0
- package/package.json +22 -9
- package/scss/cherita.scss +19 -50
- package/scss/components/accordions.scss +32 -0
- package/scss/components/layouts.scss +2 -1
- package/scss/components/lists.scss +14 -0
- package/dist/components/obs-list/ObsToolbar.js +0 -64
- package/dist/components/scatterplot/Toolbox.js +0 -31
- /package/dist/{components → cjs/components}/dotplot/Dotplot.js +0 -0
- /package/dist/{components → cjs/components}/dotplot/DotplotControls.js +0 -0
- /package/dist/{components → cjs/components}/heatmap/Heatmap.js +0 -0
- /package/dist/{components → cjs/components}/heatmap/HeatmapControls.js +0 -0
- /package/dist/{components → cjs/components}/matrixplot/Matrixplot.js +0 -0
- /package/dist/{components → cjs/components}/matrixplot/MatrixplotControls.js +0 -0
- /package/dist/{components → cjs/components}/scatterplot/ScatterplotControls.js +0 -0
- /package/dist/{components → cjs/components}/violin/ViolinControls.js +0 -0
- /package/dist/{constants → cjs/constants}/colorscales.js +0 -0
- /package/dist/{index.js → cjs/index.js} +0 -0
- /package/dist/{utils → cjs/utils}/errors.js +0 -0
- /package/dist/{utils → cjs/utils}/search.js +0 -0
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.ObsToolbar = ObsToolbar;
|
|
7
|
+
var _react = _interopRequireDefault(require("react"));
|
|
8
|
+
var _reactBootstrap = require("react-bootstrap");
|
|
9
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
10
|
+
function ObsToolbar(_ref) {
|
|
11
|
+
let {
|
|
12
|
+
item,
|
|
13
|
+
showToggleAllObs = true,
|
|
14
|
+
onToggleAllObs
|
|
15
|
+
} = _ref;
|
|
16
|
+
const allToggledOn = !item.omit.length;
|
|
17
|
+
return showToggleAllObs && /*#__PURE__*/_react.default.createElement(_reactBootstrap.Form.Check, {
|
|
18
|
+
type: "switch",
|
|
19
|
+
id: "custom-switch",
|
|
20
|
+
label: "Toggle all",
|
|
21
|
+
checked: allToggledOn,
|
|
22
|
+
onChange: onToggleAllObs
|
|
23
|
+
});
|
|
24
|
+
}
|
|
@@ -7,8 +7,8 @@ exports.ObsmKeysList = ObsmKeysList;
|
|
|
7
7
|
var _react = _interopRequireWildcard(require("react"));
|
|
8
8
|
var _reactBootstrap = require("react-bootstrap");
|
|
9
9
|
var _DatasetContext = require("../../context/DatasetContext");
|
|
10
|
-
var _LoadingIndicators = require("../../utils/LoadingIndicators");
|
|
11
10
|
var _requests = require("../../utils/requests");
|
|
11
|
+
var _Skeleton = require("../../utils/Skeleton");
|
|
12
12
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
13
13
|
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; }
|
|
14
14
|
function ObsmKeysList() {
|
|
@@ -36,7 +36,7 @@ function ObsmKeysList() {
|
|
|
36
36
|
refetchOnMount: false
|
|
37
37
|
});
|
|
38
38
|
(0, _react.useEffect)(() => {
|
|
39
|
-
if (!isPending && !serverError) {
|
|
39
|
+
if (!isPending && !serverError && fetchedData) {
|
|
40
40
|
setObsmKeysList(fetchedData);
|
|
41
41
|
}
|
|
42
42
|
}, [fetchedData, isPending, serverError]);
|
|
@@ -58,13 +58,16 @@ function ObsmKeysList() {
|
|
|
58
58
|
}, item);
|
|
59
59
|
});
|
|
60
60
|
if (!serverError) {
|
|
61
|
-
|
|
61
|
+
if (isPending) {
|
|
62
|
+
return /*#__PURE__*/_react.default.createElement(_Skeleton.ObsmKeysListBtn, null);
|
|
63
|
+
}
|
|
64
|
+
return /*#__PURE__*/_react.default.createElement(_reactBootstrap.DropdownButton, {
|
|
62
65
|
as: _reactBootstrap.ButtonGroup,
|
|
63
66
|
title: dataset.selectedObsm || "Select an embedding",
|
|
64
|
-
variant: dataset.selectedObsm ? "primary" : "
|
|
67
|
+
variant: dataset.selectedObsm ? "primary" : "warning",
|
|
65
68
|
id: "bg-nested-dropdown",
|
|
66
69
|
size: "sm"
|
|
67
|
-
}, obsmList)
|
|
70
|
+
}, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Dropdown.Header, null, "Embeddings"), obsmList);
|
|
68
71
|
} else {
|
|
69
72
|
return /*#__PURE__*/_react.default.createElement(_reactBootstrap.OverlayTrigger, {
|
|
70
73
|
placement: "top",
|
|
@@ -15,11 +15,12 @@ var _ObsmList = require("../obsm-list/ObsmList");
|
|
|
15
15
|
var _SearchBar = require("../search-bar/SearchBar");
|
|
16
16
|
var _VarList = require("../var-list/VarList");
|
|
17
17
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
18
|
-
function OffcanvasObs({
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
18
|
+
function OffcanvasObs(_ref) {
|
|
19
|
+
let {
|
|
20
|
+
show,
|
|
21
|
+
handleClose,
|
|
22
|
+
...props
|
|
23
|
+
} = _ref;
|
|
23
24
|
return /*#__PURE__*/_react.default.createElement(_Offcanvas.default, {
|
|
24
25
|
show: show,
|
|
25
26
|
onHide: handleClose,
|
|
@@ -31,10 +32,11 @@ function OffcanvasObs({
|
|
|
31
32
|
className: "p-0"
|
|
32
33
|
}, /*#__PURE__*/_react.default.createElement(_ObsList.ObsColsList, props)));
|
|
33
34
|
}
|
|
34
|
-
function OffcanvasObsm({
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
35
|
+
function OffcanvasObsm(_ref2) {
|
|
36
|
+
let {
|
|
37
|
+
show,
|
|
38
|
+
handleClose
|
|
39
|
+
} = _ref2;
|
|
38
40
|
return /*#__PURE__*/_react.default.createElement(_Offcanvas.default, {
|
|
39
41
|
show: show,
|
|
40
42
|
onHide: handleClose
|
|
@@ -42,11 +44,12 @@ function OffcanvasObsm({
|
|
|
42
44
|
closeButton: true
|
|
43
45
|
}, /*#__PURE__*/_react.default.createElement(_Offcanvas.default.Title, null, "Embedding space")), /*#__PURE__*/_react.default.createElement(_Offcanvas.default.Body, null, /*#__PURE__*/_react.default.createElement(_ObsmList.ObsmKeysList, null)));
|
|
44
46
|
}
|
|
45
|
-
function OffcanvasVars({
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
47
|
+
function OffcanvasVars(_ref3) {
|
|
48
|
+
let {
|
|
49
|
+
show,
|
|
50
|
+
handleClose,
|
|
51
|
+
mode = _constants.SELECTION_MODES.MULTIPLE
|
|
52
|
+
} = _ref3;
|
|
50
53
|
return /*#__PURE__*/_react.default.createElement(_Offcanvas.default, {
|
|
51
54
|
show: show,
|
|
52
55
|
onHide: handleClose
|
|
@@ -58,12 +61,13 @@ function OffcanvasVars({
|
|
|
58
61
|
mode: mode
|
|
59
62
|
})));
|
|
60
63
|
}
|
|
61
|
-
function OffcanvasControls({
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
64
|
+
function OffcanvasControls(_ref4) {
|
|
65
|
+
let {
|
|
66
|
+
show,
|
|
67
|
+
handleClose,
|
|
68
|
+
Controls,
|
|
69
|
+
...props
|
|
70
|
+
} = _ref4;
|
|
67
71
|
return /*#__PURE__*/_react.default.createElement(_Offcanvas.default, {
|
|
68
72
|
show: show,
|
|
69
73
|
onHide: handleClose
|
|
@@ -76,14 +76,15 @@ function usePseudospatialData(plotType) {
|
|
|
76
76
|
enabled: !!plotType && !!dataset.pseudospatial.maskSet
|
|
77
77
|
});
|
|
78
78
|
}
|
|
79
|
-
function Pseudospatial({
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
79
|
+
function Pseudospatial(_ref) {
|
|
80
|
+
let {
|
|
81
|
+
showLegend = true,
|
|
82
|
+
sharedScaleRange = false,
|
|
83
|
+
height = 200,
|
|
84
|
+
setShowControls,
|
|
85
|
+
plotType,
|
|
86
|
+
setPlotType
|
|
87
|
+
} = _ref;
|
|
87
88
|
const dataset = (0, _DatasetContext.useDataset)();
|
|
88
89
|
const [data, setData] = (0, _react.useState)([]);
|
|
89
90
|
const [layout, setLayout] = (0, _react.useState)({});
|
|
@@ -132,7 +133,7 @@ function Pseudospatial({
|
|
|
132
133
|
serverError
|
|
133
134
|
} = usePseudospatialData(plotType);
|
|
134
135
|
(0, _react.useEffect)(() => {
|
|
135
|
-
if (!isPending && !serverError) {
|
|
136
|
+
if (!isPending && !serverError && fetchedData) {
|
|
136
137
|
setData(fetchedData.data);
|
|
137
138
|
setLayout(fetchedData.layout);
|
|
138
139
|
updateColorscale(colorscale.current);
|
|
@@ -122,9 +122,10 @@ function MaskSet() {
|
|
|
122
122
|
}
|
|
123
123
|
|
|
124
124
|
// @TODO: add colormap, colorbar slider
|
|
125
|
-
function PseudospatialToolbar({
|
|
126
|
-
|
|
127
|
-
|
|
125
|
+
function PseudospatialToolbar(_ref) {
|
|
126
|
+
let {
|
|
127
|
+
plotType
|
|
128
|
+
} = _ref;
|
|
128
129
|
return /*#__PURE__*/_react.default.createElement("div", {
|
|
129
130
|
className: "cherita-pseudospatial-toolbar"
|
|
130
131
|
}, /*#__PURE__*/_react.default.createElement(_reactBootstrap.ButtonGroup, null, /*#__PURE__*/_react.default.createElement(MaskSet, null)), /*#__PURE__*/_react.default.createElement(_reactBootstrap.ButtonGroup, null, plotType === _constants.PSEUDOSPATIAL_PLOT_TYPES.CATEGORICAL && /*#__PURE__*/_react.default.createElement(CategoricalMode, null)));
|
|
@@ -13,8 +13,6 @@ var _editModes = require("@nebula.gl/edit-modes");
|
|
|
13
13
|
var _layers2 = require("@nebula.gl/layers");
|
|
14
14
|
var _lodash = _interopRequireDefault(require("lodash"));
|
|
15
15
|
var _reactBootstrap = require("react-bootstrap");
|
|
16
|
-
var _SpatialControls = require("./SpatialControls");
|
|
17
|
-
var _Toolbox = require("./Toolbox");
|
|
18
16
|
var _constants = require("../../constants/constants");
|
|
19
17
|
var _DatasetContext = require("../../context/DatasetContext");
|
|
20
18
|
var _FilterContext = require("../../context/FilterContext");
|
|
@@ -25,6 +23,8 @@ var _Legend = require("../../utils/Legend");
|
|
|
25
23
|
var _LoadingIndicators = require("../../utils/LoadingIndicators");
|
|
26
24
|
var _string = require("../../utils/string");
|
|
27
25
|
var _zarrData = require("../../utils/zarrData");
|
|
26
|
+
var _SpatialControls = require("./SpatialControls");
|
|
27
|
+
var _Toolbox = require("./Toolbox");
|
|
28
28
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
29
29
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
30
30
|
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; }
|
|
@@ -37,9 +37,10 @@ const INITIAL_VIEW_STATE = {
|
|
|
37
37
|
pitch: 0,
|
|
38
38
|
bearing: 0
|
|
39
39
|
};
|
|
40
|
-
function Scatterplot({
|
|
41
|
-
|
|
42
|
-
|
|
40
|
+
function Scatterplot(_ref) {
|
|
41
|
+
let {
|
|
42
|
+
radius = 30
|
|
43
|
+
} = _ref;
|
|
43
44
|
const dataset = (0, _DatasetContext.useDataset)();
|
|
44
45
|
const {
|
|
45
46
|
obsIndices,
|
|
@@ -204,9 +205,10 @@ function Scatterplot({
|
|
|
204
205
|
min: dataset.controls.range[0] * (valueMax - valueMin) + valueMin,
|
|
205
206
|
max: dataset.controls.range[1] * (valueMax - valueMin) + valueMin
|
|
206
207
|
};
|
|
207
|
-
const getFillColor = (0, _react.useCallback)((_d, {
|
|
208
|
-
|
|
209
|
-
|
|
208
|
+
const getFillColor = (0, _react.useCallback)((_d, _ref2) => {
|
|
209
|
+
let {
|
|
210
|
+
index
|
|
211
|
+
} = _ref2;
|
|
210
212
|
const grayOut = obsIndices && !obsIndices.has(index);
|
|
211
213
|
return getColor({
|
|
212
214
|
value: (data.values[index] - min) / (max - min),
|
|
@@ -216,9 +218,10 @@ function Scatterplot({
|
|
|
216
218
|
}, [data.values, obsIndices, getColor, isCategorical, max, min]);
|
|
217
219
|
|
|
218
220
|
// @TODO: add support for pseudospatial hover to reflect in radius
|
|
219
|
-
const getRadius = (0, _react.useCallback)((_d, {
|
|
220
|
-
|
|
221
|
-
|
|
221
|
+
const getRadius = (0, _react.useCallback)((_d, _ref3) => {
|
|
222
|
+
let {
|
|
223
|
+
index
|
|
224
|
+
} = _ref3;
|
|
222
225
|
const grayOut = obsIndices && !obsIndices.has(index);
|
|
223
226
|
return grayOut ? 1 : 3;
|
|
224
227
|
}, [obsIndices]);
|
|
@@ -241,11 +244,12 @@ function Scatterplot({
|
|
|
241
244
|
data: features,
|
|
242
245
|
mode: mode,
|
|
243
246
|
selectedFeatureIndexes,
|
|
244
|
-
onEdit:
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
247
|
+
onEdit: _ref4 => {
|
|
248
|
+
let {
|
|
249
|
+
updatedData,
|
|
250
|
+
editType,
|
|
251
|
+
editContext
|
|
252
|
+
} = _ref4;
|
|
249
253
|
setFeatures(updatedData);
|
|
250
254
|
let updatedSelectedFeatureIndexes = selectedFeatureIndexes;
|
|
251
255
|
if (editType === "addFeature") {
|
|
@@ -293,17 +297,19 @@ function Scatterplot({
|
|
|
293
297
|
}
|
|
294
298
|
setSelectedFeatureIndexes(f => info.object ? info.layer.id === "cherita-layer-draw" ? [info.index] : f : []);
|
|
295
299
|
}
|
|
296
|
-
const getLabel = (o, v
|
|
300
|
+
const getLabel = function (o, v) {
|
|
301
|
+
let isVar = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
|
297
302
|
if (isVar || o.type === _constants.OBS_TYPES.CONTINUOUS) {
|
|
298
303
|
return `${o.name}: ${(0, _string.formatNumerical)(parseFloat(v))}`;
|
|
299
304
|
} else {
|
|
300
305
|
return `${o.name}: ${o.codesMap[v]}`;
|
|
301
306
|
}
|
|
302
307
|
};
|
|
303
|
-
const getTooltip =
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
308
|
+
const getTooltip = _ref5 => {
|
|
309
|
+
let {
|
|
310
|
+
object,
|
|
311
|
+
index
|
|
312
|
+
} = _ref5;
|
|
307
313
|
if (!object || object?.type === "Feature") return;
|
|
308
314
|
const text = [];
|
|
309
315
|
if (dataset.colorEncoding === _constants.COLOR_ENCODINGS.OBS && dataset.selectedObs && !_lodash.default.some(dataset.labelObs, {
|
|
@@ -355,9 +361,12 @@ function Scatterplot({
|
|
|
355
361
|
setIsRendering(false);
|
|
356
362
|
},
|
|
357
363
|
useDevicePixels: false,
|
|
358
|
-
getCursor:
|
|
359
|
-
|
|
360
|
-
|
|
364
|
+
getCursor: _ref6 => {
|
|
365
|
+
let {
|
|
366
|
+
isDragging
|
|
367
|
+
} = _ref6;
|
|
368
|
+
return mode !== _editModes.ViewMode ? "crosshair" : isDragging ? "grabbing" : "grab";
|
|
369
|
+
},
|
|
361
370
|
ref: deckRef
|
|
362
371
|
}), /*#__PURE__*/_react.default.createElement(_SpatialControls.SpatialControls, {
|
|
363
372
|
mode: mode,
|
|
@@ -12,23 +12,23 @@ var _editModes = require("@nebula.gl/edit-modes");
|
|
|
12
12
|
var _Button = _interopRequireDefault(require("react-bootstrap/Button"));
|
|
13
13
|
var _ButtonGroup = _interopRequireDefault(require("react-bootstrap/ButtonGroup"));
|
|
14
14
|
var _Dropdown = _interopRequireDefault(require("react-bootstrap/Dropdown"));
|
|
15
|
-
var _DropdownButton = _interopRequireDefault(require("react-bootstrap/DropdownButton"));
|
|
16
|
-
var _ScatterplotControls = require("./ScatterplotControls");
|
|
17
15
|
var _DatasetContext = require("../../context/DatasetContext");
|
|
18
16
|
var _offcanvas = require("../offcanvas");
|
|
17
|
+
var _ScatterplotControls = require("./ScatterplotControls");
|
|
19
18
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
20
19
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
21
20
|
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; }
|
|
22
|
-
function SpatialControls({
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
21
|
+
function SpatialControls(_ref) {
|
|
22
|
+
let {
|
|
23
|
+
mode,
|
|
24
|
+
setMode,
|
|
25
|
+
features,
|
|
26
|
+
setFeatures,
|
|
27
|
+
selectedFeatureIndexes,
|
|
28
|
+
resetBounds,
|
|
29
|
+
increaseZoom,
|
|
30
|
+
decreaseZoom
|
|
31
|
+
} = _ref;
|
|
32
32
|
const dataset = (0, _DatasetContext.useDataset)();
|
|
33
33
|
const dispatch = (0, _DatasetContext.useDatasetDispatch)();
|
|
34
34
|
const [showControls, setShowControls] = (0, _react.useState)(false);
|
|
@@ -61,13 +61,8 @@ function SpatialControls({
|
|
|
61
61
|
features: []
|
|
62
62
|
});
|
|
63
63
|
};
|
|
64
|
-
const polygonControls = /*#__PURE__*/_react.default.createElement(
|
|
65
|
-
|
|
66
|
-
}, /*#__PURE__*/_react.default.createElement(_ButtonGroup.default, {
|
|
67
|
-
vertical: true,
|
|
68
|
-
className: "w-100"
|
|
69
|
-
}, /*#__PURE__*/_react.default.createElement(_Button.default, {
|
|
70
|
-
variant: dataset.sliceBy.polygons ? "primary" : "outline-primary",
|
|
64
|
+
const polygonControls = /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_Button.default, {
|
|
65
|
+
active: dataset.sliceBy.polygons,
|
|
71
66
|
title: "Filter data with polygons",
|
|
72
67
|
onClick: () => {
|
|
73
68
|
setMode(() => _editModes.ViewMode);
|
|
@@ -76,7 +71,6 @@ function SpatialControls({
|
|
|
76
71
|
});
|
|
77
72
|
}
|
|
78
73
|
}, /*#__PURE__*/_react.default.createElement(_iconsMaterial.JoinInner, null)), /*#__PURE__*/_react.default.createElement(_Button.default, {
|
|
79
|
-
variant: "outline-primary",
|
|
80
74
|
title: "Delete selected polygons",
|
|
81
75
|
onClick: () => {
|
|
82
76
|
const newFeatures = features.features.filter((_f, i) => !selectedFeatureIndexes.includes(i));
|
|
@@ -88,12 +82,12 @@ function SpatialControls({
|
|
|
88
82
|
disabled: !selectedFeatureIndexes.length
|
|
89
83
|
}, /*#__PURE__*/_react.default.createElement(_reactFontawesome.FontAwesomeIcon, {
|
|
90
84
|
icon: _freeSolidSvgIcons.faTrash
|
|
91
|
-
})))
|
|
85
|
+
})));
|
|
92
86
|
return /*#__PURE__*/_react.default.createElement("div", {
|
|
93
87
|
className: "cherita-spatial-controls"
|
|
94
88
|
}, /*#__PURE__*/_react.default.createElement(_ButtonGroup.default, {
|
|
95
89
|
vertical: true,
|
|
96
|
-
className: "w-100"
|
|
90
|
+
className: "w-100 mb-1"
|
|
97
91
|
}, /*#__PURE__*/_react.default.createElement(_Button.default, {
|
|
98
92
|
onClick: increaseZoom,
|
|
99
93
|
title: "Increase zoom"
|
|
@@ -110,37 +104,44 @@ function SpatialControls({
|
|
|
110
104
|
}, /*#__PURE__*/_react.default.createElement(_reactFontawesome.FontAwesomeIcon, {
|
|
111
105
|
icon: _freeSolidSvgIcons.faCrosshairs
|
|
112
106
|
})), /*#__PURE__*/_react.default.createElement(_Button.default, {
|
|
107
|
+
onClick: handleShowControls
|
|
108
|
+
}, /*#__PURE__*/_react.default.createElement(_reactFontawesome.FontAwesomeIcon, {
|
|
109
|
+
icon: _freeSolidSvgIcons.faSliders
|
|
110
|
+
}))), /*#__PURE__*/_react.default.createElement(_ButtonGroup.default, {
|
|
111
|
+
vertical: true,
|
|
112
|
+
className: "w-100"
|
|
113
|
+
}, /*#__PURE__*/_react.default.createElement(_Button.default, {
|
|
113
114
|
onClick: () => setMode(() => _editModes.ViewMode),
|
|
114
115
|
title: "Set dragging mode",
|
|
115
|
-
|
|
116
|
+
active: mode === _editModes.ViewMode
|
|
116
117
|
}, /*#__PURE__*/_react.default.createElement(_reactFontawesome.FontAwesomeIcon, {
|
|
117
118
|
icon: _freeSolidSvgIcons.faHand
|
|
118
|
-
})), /*#__PURE__*/_react.default.createElement(
|
|
119
|
+
})), /*#__PURE__*/_react.default.createElement(_Dropdown.default, {
|
|
119
120
|
as: _ButtonGroup.default,
|
|
120
|
-
title: /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_reactFontawesome.FontAwesomeIcon, {
|
|
121
|
-
icon: _freeSolidSvgIcons.faDrawPolygon
|
|
122
|
-
})),
|
|
123
|
-
drop: "end",
|
|
124
|
-
id: "bg-vertical-dropdown-1",
|
|
125
121
|
className: "caret-off",
|
|
122
|
+
drop: "end",
|
|
126
123
|
onSelect: onSelect
|
|
127
|
-
}, /*#__PURE__*/_react.default.createElement(_Dropdown.default.
|
|
128
|
-
|
|
129
|
-
|
|
124
|
+
}, /*#__PURE__*/_react.default.createElement(_Dropdown.default.Toggle, {
|
|
125
|
+
id: "dropdown-autoclose-outside",
|
|
126
|
+
className: `caret-off ${mode === _editModes.DrawPolygonByDraggingMode || mode === _editModes.ModifyMode ? "active" : ""}`
|
|
127
|
+
}, /*#__PURE__*/_react.default.createElement(_reactFontawesome.FontAwesomeIcon, {
|
|
128
|
+
icon: _freeSolidSvgIcons.faDrawPolygon
|
|
129
|
+
})), /*#__PURE__*/_react.default.createElement(_Dropdown.default.Menu, null, /*#__PURE__*/_react.default.createElement(_Dropdown.default.Header, null, "Polygon tools"), /*#__PURE__*/_react.default.createElement(_Dropdown.default.Item, {
|
|
130
130
|
eventKey: "DrawPolygonByDraggingMode"
|
|
131
|
-
},
|
|
131
|
+
}, /*#__PURE__*/_react.default.createElement(_reactFontawesome.FontAwesomeIcon, {
|
|
132
|
+
icon: _freeSolidSvgIcons.faDrawPolygon,
|
|
133
|
+
className: "nav-icon"
|
|
134
|
+
}), "Draw a polygon"), /*#__PURE__*/_react.default.createElement(_Dropdown.default.Item, {
|
|
132
135
|
eventKey: "ModifyMode"
|
|
133
|
-
}, "Modify polygons"), /*#__PURE__*/_react.default.createElement(_Dropdown.default.Item, {
|
|
134
|
-
eventKey: "ViewMode"
|
|
135
|
-
}, "Viewing mode"), /*#__PURE__*/_react.default.createElement(_Dropdown.default.Item, {
|
|
136
|
-
onClick: deleteFeatures
|
|
137
136
|
}, /*#__PURE__*/_react.default.createElement(_reactFontawesome.FontAwesomeIcon, {
|
|
138
|
-
icon: _freeSolidSvgIcons.
|
|
139
|
-
|
|
140
|
-
|
|
137
|
+
icon: _freeSolidSvgIcons.faPen,
|
|
138
|
+
className: "nav-icon"
|
|
139
|
+
}), "Modify polygons"), /*#__PURE__*/_react.default.createElement(_Dropdown.default.Item, {
|
|
140
|
+
onClick: deleteFeatures
|
|
141
141
|
}, /*#__PURE__*/_react.default.createElement(_reactFontawesome.FontAwesomeIcon, {
|
|
142
|
-
icon: _freeSolidSvgIcons.
|
|
143
|
-
|
|
142
|
+
icon: _freeSolidSvgIcons.faTrash,
|
|
143
|
+
className: "nav-icon"
|
|
144
|
+
}), "Delete polygons"))), !!features?.features?.length && polygonControls), /*#__PURE__*/_react.default.createElement(_offcanvas.OffcanvasControls, {
|
|
144
145
|
show: showControls,
|
|
145
146
|
handleClose: handleCloseControls,
|
|
146
147
|
Controls: _ScatterplotControls.ScatterplotControls
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.Toolbox = Toolbox;
|
|
7
|
+
var _react = _interopRequireDefault(require("react"));
|
|
8
|
+
var _freeSolidSvgIcons = require("@fortawesome/free-solid-svg-icons");
|
|
9
|
+
var _reactFontawesome = require("@fortawesome/react-fontawesome");
|
|
10
|
+
var _reactBootstrap = require("react-bootstrap");
|
|
11
|
+
var _string = require("../../utils/string");
|
|
12
|
+
var _ObsmList = require("../obsm-list/ObsmList");
|
|
13
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
14
|
+
function Toolbox(_ref) {
|
|
15
|
+
let {
|
|
16
|
+
mode,
|
|
17
|
+
obsLength,
|
|
18
|
+
slicedLength
|
|
19
|
+
} = _ref;
|
|
20
|
+
return /*#__PURE__*/_react.default.createElement("div", {
|
|
21
|
+
className: "cherita-toolbox"
|
|
22
|
+
}, /*#__PURE__*/_react.default.createElement(_reactBootstrap.ButtonGroup, null, /*#__PURE__*/_react.default.createElement(_ObsmList.ObsmKeysList, null), mode && /*#__PURE__*/_react.default.createElement(_reactBootstrap.OverlayTrigger, {
|
|
23
|
+
placement: "top",
|
|
24
|
+
overlay: /*#__PURE__*/_react.default.createElement(_reactBootstrap.Tooltip, {
|
|
25
|
+
id: "tooltip-dropped-mode"
|
|
26
|
+
}, "The color scale is currently set to ", mode)
|
|
27
|
+
}, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Button, {
|
|
28
|
+
size: "sm",
|
|
29
|
+
variant: "primary",
|
|
30
|
+
style: {
|
|
31
|
+
cursor: "default"
|
|
32
|
+
},
|
|
33
|
+
"aria-disabled": "true"
|
|
34
|
+
}, /*#__PURE__*/_react.default.createElement(_reactFontawesome.FontAwesomeIcon, {
|
|
35
|
+
icon: _freeSolidSvgIcons.faDroplet,
|
|
36
|
+
className: "me-1"
|
|
37
|
+
}), " ", mode)), (mode || !isNaN(obsLength)) && (mode !== null && !isNaN(slicedLength) && slicedLength !== obsLength ? /*#__PURE__*/_react.default.createElement(_reactBootstrap.OverlayTrigger, {
|
|
38
|
+
placement: "top",
|
|
39
|
+
overlay: /*#__PURE__*/_react.default.createElement(_reactBootstrap.Tooltip, {
|
|
40
|
+
id: "tooltip-dropped-mode"
|
|
41
|
+
}, "You have selected ", (0, _string.formatNumerical)(slicedLength), " out of", " ", (0, _string.formatNumerical)(obsLength), " cells")
|
|
42
|
+
}, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Button, {
|
|
43
|
+
size: "sm",
|
|
44
|
+
variant: "primary",
|
|
45
|
+
style: {
|
|
46
|
+
cursor: "default"
|
|
47
|
+
},
|
|
48
|
+
"aria-disabled": "true"
|
|
49
|
+
}, (0, _string.formatNumerical)(slicedLength), " of ", (0, _string.formatNumerical)(obsLength), " ", "cells")) : /*#__PURE__*/_react.default.createElement(_reactBootstrap.OverlayTrigger, {
|
|
50
|
+
placement: "top",
|
|
51
|
+
overlay: /*#__PURE__*/_react.default.createElement(_reactBootstrap.Tooltip, {
|
|
52
|
+
id: "tooltip-dropped-mode"
|
|
53
|
+
}, "You are viewing ", (0, _string.formatNumerical)(obsLength), " cells")
|
|
54
|
+
}, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Button, {
|
|
55
|
+
size: "sm",
|
|
56
|
+
variant: "primary",
|
|
57
|
+
style: {
|
|
58
|
+
cursor: "default"
|
|
59
|
+
},
|
|
60
|
+
"aria-disabled": "true"
|
|
61
|
+
}, (0, _string.formatNumerical)(obsLength), " cells")))));
|
|
62
|
+
}
|
|
@@ -5,6 +5,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.SearchBar = SearchBar;
|
|
7
7
|
var _react = _interopRequireWildcard(require("react"));
|
|
8
|
+
var _Search = _interopRequireDefault(require("@mui/icons-material/Search"));
|
|
8
9
|
var _lodash = _interopRequireDefault(require("lodash"));
|
|
9
10
|
var _reactBootstrap = require("react-bootstrap");
|
|
10
11
|
var _SearchResults = require("./SearchResults");
|
|
@@ -25,11 +26,12 @@ function onVarSelect(dispatch, item) {
|
|
|
25
26
|
value: "var"
|
|
26
27
|
});
|
|
27
28
|
}
|
|
28
|
-
function SearchBar({
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
29
|
+
function SearchBar(_ref) {
|
|
30
|
+
let {
|
|
31
|
+
searchVar = true,
|
|
32
|
+
searchDiseases = false,
|
|
33
|
+
handleSelect = onVarSelect
|
|
34
|
+
} = _ref;
|
|
33
35
|
const [showSuggestions, setShowSuggestions] = (0, _react.useState)(false);
|
|
34
36
|
const [text, setText] = (0, _react.useState)("");
|
|
35
37
|
const inputRef = (0, _react.useRef)(null);
|
|
@@ -39,11 +41,13 @@ function SearchBar({
|
|
|
39
41
|
setShowSuggestions(true);
|
|
40
42
|
}
|
|
41
43
|
}, [text]);
|
|
44
|
+
|
|
45
|
+
//@TODO: Abstract styles
|
|
42
46
|
return /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Form, {
|
|
43
47
|
onSubmit: e => {
|
|
44
48
|
e.preventDefault();
|
|
45
49
|
}
|
|
46
|
-
}, /*#__PURE__*/_react.default.createElement(_reactBootstrap.FormGroup, null, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Form.Control, {
|
|
50
|
+
}, /*#__PURE__*/_react.default.createElement(_reactBootstrap.FormGroup, null, /*#__PURE__*/_react.default.createElement(_reactBootstrap.InputGroup, null, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Form.Control, {
|
|
47
51
|
ref: inputRef,
|
|
48
52
|
onFocus: () => {
|
|
49
53
|
setShowSuggestions(text.length > 0);
|
|
@@ -58,8 +62,21 @@ function SearchBar({
|
|
|
58
62
|
value: text,
|
|
59
63
|
onChange: e => {
|
|
60
64
|
setText(e.target.value);
|
|
65
|
+
},
|
|
66
|
+
style: {
|
|
67
|
+
paddingLeft: "2.5rem",
|
|
68
|
+
borderRadius: "5px"
|
|
69
|
+
}
|
|
70
|
+
}), /*#__PURE__*/_react.default.createElement("div", {
|
|
71
|
+
style: {
|
|
72
|
+
position: "absolute",
|
|
73
|
+
left: "10px",
|
|
74
|
+
top: "50%",
|
|
75
|
+
transform: "translateY(-50%)",
|
|
76
|
+
pointerEvents: "none",
|
|
77
|
+
zIndex: 10
|
|
61
78
|
}
|
|
62
|
-
}), /*#__PURE__*/_react.default.createElement(_reactBootstrap.Dropdown, {
|
|
79
|
+
}, /*#__PURE__*/_react.default.createElement(_Search.default, null))), /*#__PURE__*/_react.default.createElement(_reactBootstrap.Dropdown, {
|
|
63
80
|
show: showSuggestions,
|
|
64
81
|
onMouseDown: e => {
|
|
65
82
|
e.preventDefault();
|
|
@@ -13,11 +13,12 @@ var _search = require("../../utils/search");
|
|
|
13
13
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
14
14
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
15
15
|
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.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 VarSearchResults({
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
16
|
+
function VarSearchResults(_ref) {
|
|
17
|
+
let {
|
|
18
|
+
text,
|
|
19
|
+
setShowSuggestions,
|
|
20
|
+
handleSelect
|
|
21
|
+
} = _ref;
|
|
21
22
|
const [suggestions, setSuggestions] = (0, _react.useState)([]);
|
|
22
23
|
const dispatch = (0, _DatasetContext.useDatasetDispatch)();
|
|
23
24
|
const {
|
|
@@ -71,20 +72,18 @@ function VarSearchResults({
|
|
|
71
72
|
});
|
|
72
73
|
}, [deferredData, dispatch, handleSelect, isStale, setShowSuggestions]);
|
|
73
74
|
return /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Dropdown.Header, null, "Features"), /*#__PURE__*/_react.default.createElement("div", {
|
|
74
|
-
|
|
75
|
-
maxHeight: "25vh",
|
|
76
|
-
overflowY: "scroll"
|
|
77
|
-
}
|
|
75
|
+
className: "search-results"
|
|
78
76
|
}, deferredData?.length ? suggestionsList : /*#__PURE__*/_react.default.createElement(_reactBootstrap.Dropdown.Item, {
|
|
79
77
|
key: "empty",
|
|
80
78
|
as: "button",
|
|
81
79
|
disabled: true
|
|
82
80
|
}, !serverError ? isStale || isPending ? "Loading..." : "No items found" : "Failed to fetch data")));
|
|
83
81
|
}
|
|
84
|
-
function DiseasesSearchResults({
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
82
|
+
function DiseasesSearchResults(_ref2) {
|
|
83
|
+
let {
|
|
84
|
+
text,
|
|
85
|
+
setShowSuggestions
|
|
86
|
+
} = _ref2;
|
|
88
87
|
const [suggestions, setSuggestions] = (0, _react.useState)([]);
|
|
89
88
|
const dispatch = (0, _DatasetContext.useDatasetDispatch)();
|
|
90
89
|
const {
|
|
@@ -141,10 +140,7 @@ function DiseasesSearchResults({
|
|
|
141
140
|
});
|
|
142
141
|
}, [deferredData, dispatch, isStale, setShowSuggestions]);
|
|
143
142
|
return /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Dropdown.Header, null, "Diseases"), /*#__PURE__*/_react.default.createElement("div", {
|
|
144
|
-
|
|
145
|
-
maxHeight: "25vh",
|
|
146
|
-
overflowY: "scroll"
|
|
147
|
-
}
|
|
143
|
+
className: "search-results"
|
|
148
144
|
}, deferredData?.length ? suggestionsList : /*#__PURE__*/_react.default.createElement(_reactBootstrap.Dropdown.Item, {
|
|
149
145
|
key: "empty",
|
|
150
146
|
as: "button",
|