@haniffalab/cherita-react 0.2.0-dev.2025-01-22.f523ac5e → 0.2.0-dev.2025-01-28.4d5ab0a4

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.
Files changed (43) hide show
  1. package/README.md +5 -0
  2. package/dist/components/dotplot/Dotplot.js +19 -26
  3. package/dist/components/dotplot/DotplotControls.js +106 -147
  4. package/dist/components/full-page/FullPage.js +99 -148
  5. package/dist/components/heatmap/Heatmap.js +19 -26
  6. package/dist/components/heatmap/HeatmapControls.js +7 -13
  7. package/dist/components/matrixplot/Matrixplot.js +19 -26
  8. package/dist/components/matrixplot/MatrixplotControls.js +14 -35
  9. package/dist/components/obs-list/ObsItem.js +182 -239
  10. package/dist/components/obs-list/ObsList.js +40 -49
  11. package/dist/components/obs-list/ObsToolbar.js +44 -55
  12. package/dist/components/obsm-list/ObsmList.js +15 -23
  13. package/dist/components/offcanvas/index.js +45 -75
  14. package/dist/components/pseudospatial/Pseudospatial.js +26 -34
  15. package/dist/components/pseudospatial/PseudospatialControls.js +1 -2
  16. package/dist/components/pseudospatial/PseudospatialToolbar.js +37 -65
  17. package/dist/components/scatterplot/Scatterplot.js +74 -89
  18. package/dist/components/scatterplot/ScatterplotControls.js +28 -39
  19. package/dist/components/scatterplot/SpatialControls.js +94 -117
  20. package/dist/components/scatterplot/Toolbox.js +16 -24
  21. package/dist/components/search-bar/SearchBar.js +45 -54
  22. package/dist/components/search-bar/SearchResults.js +36 -49
  23. package/dist/components/var-list/VarItem.js +112 -160
  24. package/dist/components/var-list/VarList.js +81 -124
  25. package/dist/components/var-list/VarListToolbar.js +48 -59
  26. package/dist/components/var-list/VarSet.js +95 -120
  27. package/dist/components/violin/Violin.js +31 -46
  28. package/dist/components/violin/ViolinControls.js +8 -22
  29. package/dist/context/DatasetContext.js +17 -27
  30. package/dist/context/FilterContext.js +8 -12
  31. package/dist/context/ZarrDataContext.js +6 -9
  32. package/dist/helpers/color-helper.js +11 -12
  33. package/dist/helpers/map-helper.js +7 -8
  34. package/dist/helpers/zarr-helper.js +9 -15
  35. package/dist/utils/Histogram.js +34 -41
  36. package/dist/utils/ImageViewer.js +9 -14
  37. package/dist/utils/Legend.js +30 -40
  38. package/dist/utils/LoadingIndicators.js +16 -19
  39. package/dist/utils/VirtualizedList.js +32 -39
  40. package/dist/utils/requests.js +15 -25
  41. package/dist/utils/string.js +4 -9
  42. package/dist/utils/zarrData.js +2 -8
  43. package/package.json +40 -34
@@ -11,65 +11,54 @@ var _lodash = _interopRequireDefault(require("lodash"));
11
11
  var _reactBootstrap = require("react-bootstrap");
12
12
  var _constants = require("../../constants/constants");
13
13
  var _DatasetContext = require("../../context/DatasetContext");
14
- var _jsxRuntime = require("react/jsx-runtime");
15
14
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
16
- function ObsToolbar(_ref) {
17
- let {
18
- item,
19
- showToggleAllObs = true,
20
- showLabel = true,
21
- showSlice = true,
22
- showColor = true,
23
- onToggleAllObs,
24
- onToggleLabel,
25
- onToggleSlice,
26
- onToggleColor
27
- } = _ref;
15
+ function ObsToolbar({
16
+ item,
17
+ showToggleAllObs = true,
18
+ showLabel = true,
19
+ showSlice = true,
20
+ showColor = true,
21
+ onToggleAllObs,
22
+ onToggleLabel,
23
+ onToggleSlice,
24
+ onToggleColor
25
+ }) {
28
26
  const dataset = (0, _DatasetContext.useDataset)();
29
27
  const allToggledOn = !item.omit.length;
30
28
  const inLabelObs = _lodash.default.some(dataset.labelObs, i => i.name === item.name);
31
29
  const inSliceObs = dataset.sliceBy.obs && dataset.selectedObs?.name === item.name;
32
30
  const isColorEncoding = dataset.colorEncoding === _constants.COLOR_ENCODINGS.OBS && dataset.selectedObs?.name === item.name;
33
- return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
34
- className: "d-flex",
35
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
36
- className: "flex-grow-1",
37
- children: showToggleAllObs && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Form.Check, {
38
- // prettier-ignore
39
- type: "switch",
40
- id: "custom-switch",
41
- label: "Toggle all",
42
- checked: allToggledOn,
43
- onChange: onToggleAllObs
44
- })
45
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
46
- children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactBootstrap.ButtonGroup, {
47
- children: [showLabel && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Button, {
48
- variant: inLabelObs ? "primary" : "outline-primary",
49
- size: "sm",
50
- onClick: onToggleLabel,
51
- title: "Add to tooltip",
52
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactFontawesome.FontAwesomeIcon, {
53
- icon: _freeSolidSvgIcons.faFont
54
- })
55
- }), showSlice && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Button, {
56
- variant: inSliceObs ? "primary" : "outline-primary",
57
- size: "sm",
58
- onClick: onToggleSlice,
59
- title: "Slice to selected",
60
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactFontawesome.FontAwesomeIcon, {
61
- icon: _freeSolidSvgIcons.faEye
62
- })
63
- }), showColor && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Button, {
64
- variant: isColorEncoding ? "primary" : "outline-primary",
65
- size: "sm",
66
- onClick: onToggleColor,
67
- title: "Set as color encoding",
68
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactFontawesome.FontAwesomeIcon, {
69
- icon: _freeSolidSvgIcons.faDroplet
70
- })
71
- })]
72
- })
73
- })]
74
- });
31
+ return /*#__PURE__*/_react.default.createElement("div", {
32
+ className: "d-flex"
33
+ }, /*#__PURE__*/_react.default.createElement("div", {
34
+ className: "flex-grow-1"
35
+ }, showToggleAllObs && /*#__PURE__*/_react.default.createElement(_reactBootstrap.Form.Check, {
36
+ // prettier-ignore
37
+ type: "switch",
38
+ id: "custom-switch",
39
+ label: "Toggle all",
40
+ checked: allToggledOn,
41
+ onChange: onToggleAllObs
42
+ })), /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement(_reactBootstrap.ButtonGroup, null, showLabel && /*#__PURE__*/_react.default.createElement(_reactBootstrap.Button, {
43
+ variant: inLabelObs ? "primary" : "outline-primary",
44
+ size: "sm",
45
+ onClick: onToggleLabel,
46
+ title: "Add to tooltip"
47
+ }, /*#__PURE__*/_react.default.createElement(_reactFontawesome.FontAwesomeIcon, {
48
+ icon: _freeSolidSvgIcons.faFont
49
+ })), showSlice && /*#__PURE__*/_react.default.createElement(_reactBootstrap.Button, {
50
+ variant: inSliceObs ? "primary" : "outline-primary",
51
+ size: "sm",
52
+ onClick: onToggleSlice,
53
+ title: "Slice to selected"
54
+ }, /*#__PURE__*/_react.default.createElement(_reactFontawesome.FontAwesomeIcon, {
55
+ icon: _freeSolidSvgIcons.faEye
56
+ })), showColor && /*#__PURE__*/_react.default.createElement(_reactBootstrap.Button, {
57
+ variant: isColorEncoding ? "primary" : "outline-primary",
58
+ size: "sm",
59
+ onClick: onToggleColor,
60
+ title: "Set as color encoding"
61
+ }, /*#__PURE__*/_react.default.createElement(_reactFontawesome.FontAwesomeIcon, {
62
+ icon: _freeSolidSvgIcons.faDroplet
63
+ })))));
75
64
  }
@@ -9,7 +9,6 @@ var _reactBootstrap = require("react-bootstrap");
9
9
  var _DatasetContext = require("../../context/DatasetContext");
10
10
  var _LoadingIndicators = require("../../utils/LoadingIndicators");
11
11
  var _requests = require("../../utils/requests");
12
- var _jsxRuntime = require("react/jsx-runtime");
13
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); }
14
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; }
15
14
  function ObsmKeysList() {
@@ -47,42 +46,35 @@ function ObsmKeysList() {
47
46
  }
48
47
  }, [dataset.selectedObsm]);
49
48
  const obsmList = obsmKeysList.map(item => {
50
- return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Dropdown.Item, {
49
+ return /*#__PURE__*/_react.default.createElement(_reactBootstrap.Dropdown.Item, {
50
+ key: item,
51
51
  className: `custom ${active === item && "active"}`,
52
52
  onClick: () => {
53
53
  dispatch({
54
54
  type: "select.obsm",
55
55
  obsm: item
56
56
  });
57
- },
58
- children: item
57
+ }
59
58
  }, item);
60
59
  });
61
60
  if (!serverError) {
62
- return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
63
- children: [isPending && /*#__PURE__*/(0, _jsxRuntime.jsx)(_LoadingIndicators.LoadingSpinner, {}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.DropdownButton, {
64
- as: _reactBootstrap.ButtonGroup,
65
- title: dataset.selectedObsm || "Select an embedding",
66
- variant: dataset.selectedObsm ? "primary" : "outline-primary",
67
- id: "bg-nested-dropdown",
68
- size: "sm",
69
- children: obsmList
70
- })]
71
- });
61
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, isPending && /*#__PURE__*/_react.default.createElement(_LoadingIndicators.LoadingSpinner, null), /*#__PURE__*/_react.default.createElement(_reactBootstrap.DropdownButton, {
62
+ as: _reactBootstrap.ButtonGroup,
63
+ title: dataset.selectedObsm || "Select an embedding",
64
+ variant: dataset.selectedObsm ? "primary" : "outline-primary",
65
+ id: "bg-nested-dropdown",
66
+ size: "sm"
67
+ }, obsmList));
72
68
  } else {
73
- return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.OverlayTrigger, {
69
+ return /*#__PURE__*/_react.default.createElement(_reactBootstrap.OverlayTrigger, {
74
70
  placement: "top",
75
71
  delay: {
76
72
  show: 100,
77
73
  hide: 200
78
74
  },
79
- overlay: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Tooltip, {
80
- children: serverError.message
81
- }),
82
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Button, {
83
- variant: "danger",
84
- children: "Error"
85
- })
86
- });
75
+ overlay: /*#__PURE__*/_react.default.createElement(_reactBootstrap.Tooltip, null, serverError.message)
76
+ }, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Button, {
77
+ variant: "danger"
78
+ }, "Error"));
87
79
  }
88
80
  }
@@ -14,89 +14,59 @@ var _ObsList = require("../obs-list/ObsList");
14
14
  var _ObsmList = require("../obsm-list/ObsmList");
15
15
  var _SearchBar = require("../search-bar/SearchBar");
16
16
  var _VarList = require("../var-list/VarList");
17
- var _jsxRuntime = require("react/jsx-runtime");
18
17
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
19
- function OffcanvasObs(_ref) {
20
- let {
21
- show,
22
- handleClose,
23
- ...props
24
- } = _ref;
25
- return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Offcanvas.default, {
18
+ function OffcanvasObs({
19
+ show,
20
+ handleClose,
21
+ ...props
22
+ }) {
23
+ return /*#__PURE__*/_react.React.createElement(_Offcanvas.default, {
26
24
  show: show,
27
25
  onHide: handleClose,
28
26
  scroll: true,
29
- backdrop: false,
30
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Offcanvas.default.Header, {
31
- closeButton: true,
32
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Offcanvas.default.Title, {
33
- children: "Categories"
34
- })
35
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Offcanvas.default.Body, {
36
- className: "p-0",
37
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_ObsList.ObsColsList, {
38
- ...props
39
- })
40
- })]
41
- });
27
+ backdrop: false
28
+ }, /*#__PURE__*/_react.React.createElement(_Offcanvas.default.Header, {
29
+ closeButton: true
30
+ }, /*#__PURE__*/_react.React.createElement(_Offcanvas.default.Title, null, "Categories")), /*#__PURE__*/_react.React.createElement(_Offcanvas.default.Body, {
31
+ className: "p-0"
32
+ }, /*#__PURE__*/_react.React.createElement(_ObsList.ObsColsList, props)));
42
33
  }
43
- function OffcanvasObsm(_ref2) {
44
- let {
45
- show,
46
- handleClose
47
- } = _ref2;
48
- return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Offcanvas.default, {
34
+ function OffcanvasObsm({
35
+ show,
36
+ handleClose
37
+ }) {
38
+ return /*#__PURE__*/_react.React.createElement(_Offcanvas.default, {
49
39
  show: show,
50
- onHide: handleClose,
51
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Offcanvas.default.Header, {
52
- closeButton: true,
53
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Offcanvas.default.Title, {
54
- children: "Embedding space"
55
- })
56
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Offcanvas.default.Body, {
57
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_ObsmList.ObsmKeysList, {})
58
- })]
59
- });
40
+ onHide: handleClose
41
+ }, /*#__PURE__*/_react.React.createElement(_Offcanvas.default.Header, {
42
+ closeButton: true
43
+ }, /*#__PURE__*/_react.React.createElement(_Offcanvas.default.Title, null, "Embedding space")), /*#__PURE__*/_react.React.createElement(_Offcanvas.default.Body, null, /*#__PURE__*/_react.React.createElement(_ObsmList.ObsmKeysList, null)));
60
44
  }
61
- function OffcanvasVars(_ref3) {
62
- let {
63
- show,
64
- handleClose,
65
- mode = _constants.SELECTION_MODES.MULTIPLE
66
- } = _ref3;
67
- return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Offcanvas.default, {
45
+ function OffcanvasVars({
46
+ show,
47
+ handleClose,
48
+ mode = _constants.SELECTION_MODES.MULTIPLE
49
+ }) {
50
+ return /*#__PURE__*/_react.React.createElement(_Offcanvas.default, {
68
51
  show: show,
69
- onHide: handleClose,
70
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Offcanvas.default.Header, {
71
- closeButton: true,
72
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Offcanvas.default.Title, {
73
- children: "Features"
74
- })
75
- }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Offcanvas.default.Body, {
76
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_SearchBar.SearchBar, {
77
- searchDiseases: true
78
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_VarList.VarNamesList, {
79
- mode: mode
80
- })]
81
- })]
82
- });
52
+ onHide: handleClose
53
+ }, /*#__PURE__*/_react.React.createElement(_Offcanvas.default.Header, {
54
+ closeButton: true
55
+ }, /*#__PURE__*/_react.React.createElement(_Offcanvas.default.Title, null, "Features")), /*#__PURE__*/_react.React.createElement(_Offcanvas.default.Body, null, /*#__PURE__*/_react.React.createElement(_SearchBar.SearchBar, {
56
+ searchDiseases: true
57
+ }), /*#__PURE__*/_react.React.createElement(_VarList.VarNamesList, {
58
+ mode: mode
59
+ })));
83
60
  }
84
- function OffcanvasControls(_ref4) {
85
- let {
86
- show,
87
- handleClose,
88
- Controls
89
- } = _ref4;
90
- return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Offcanvas.default, {
61
+ function OffcanvasControls({
62
+ show,
63
+ handleClose,
64
+ Controls
65
+ }) {
66
+ return /*#__PURE__*/_react.React.createElement(_Offcanvas.default, {
91
67
  show: show,
92
- onHide: handleClose,
93
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Offcanvas.default.Header, {
94
- closeButton: true,
95
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Offcanvas.default.Title, {
96
- children: "Controls"
97
- })
98
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Offcanvas.default.Body, {
99
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(Controls, {})
100
- })]
101
- });
68
+ onHide: handleClose
69
+ }, /*#__PURE__*/_react.React.createElement(_Offcanvas.default.Header, {
70
+ closeButton: true
71
+ }, /*#__PURE__*/_react.React.createElement(_Offcanvas.default.Title, null, "Controls")), /*#__PURE__*/_react.React.createElement(_Offcanvas.default.Body, null, /*#__PURE__*/_react.React.createElement(Controls, null)));
102
72
  }
@@ -18,7 +18,6 @@ var _ImageViewer = require("../../utils/ImageViewer");
18
18
  var _Legend = require("../../utils/Legend");
19
19
  var _LoadingIndicators = require("../../utils/LoadingIndicators");
20
20
  var _requests = require("../../utils/requests");
21
- var _jsxRuntime = require("react/jsx-runtime");
22
21
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
23
22
  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); }
24
23
  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; }
@@ -75,11 +74,10 @@ function usePseudospatialData(plotType) {
75
74
  enabled: !!plotType && !!dataset.pseudospatial.maskSet
76
75
  });
77
76
  }
78
- function Pseudospatial(_ref) {
79
- let {
80
- showLegend = true,
81
- sharedScaleRange = false
82
- } = _ref;
77
+ function Pseudospatial({
78
+ showLegend = true,
79
+ sharedScaleRange = false
80
+ }) {
83
81
  const dataset = (0, _DatasetContext.useDataset)();
84
82
  const [data, setData] = (0, _react.useState)([]);
85
83
  const [layout, setLayout] = (0, _react.useState)({});
@@ -178,33 +176,27 @@ function Pseudospatial(_ref) {
178
176
  }, [dataset.controls.range, dataset.controls.valueMax, dataset.controls.valueMin, dataset.controls.valueRange, getColor, sharedScaleRange]);
179
177
  const hasSelections = !!plotType && !!dataset.pseudospatial.maskSet;
180
178
  if (!serverError) {
181
- return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
182
- className: "cherita-pseudospatial position-relative",
183
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_PseudospatialToolbar.PseudospatialToolbar, {
184
- plotType: plotType
185
- }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
186
- children: [hasSelections && isPending && /*#__PURE__*/(0, _jsxRuntime.jsx)(_LoadingIndicators.LoadingSpinner, {}), hasSelections && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactPlotly.default, {
187
- data: data,
188
- layout: layout,
189
- useResizeHandler: true,
190
- className: "cherita-pseudospatial-plot",
191
- config: {
192
- displaylogo: false
193
- }
194
- }), hasSelections && showLegend && /*#__PURE__*/(0, _jsxRuntime.jsx)(_Legend.Legend, {
195
- min: layout?.coloraxis?.cmin,
196
- max: layout?.coloraxis?.cmax,
197
- addText: plotType === _constants.PSEUDOSPATIAL_PLOT_TYPES.GENE ? " - Mean expression" : plotType === _constants.PSEUDOSPATIAL_PLOT_TYPES.CATEGORICAL ? " - %" : plotType === _constants.PSEUDOSPATIAL_PLOT_TYPES.CONTINUOUS ? " - Mean value" : ""
198
- })]
199
- })]
200
- });
179
+ return /*#__PURE__*/_react.default.createElement("div", {
180
+ className: "cherita-pseudospatial position-relative"
181
+ }, /*#__PURE__*/_react.default.createElement(_PseudospatialToolbar.PseudospatialToolbar, {
182
+ plotType: plotType
183
+ }), /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, hasSelections && isPending && /*#__PURE__*/_react.default.createElement(_LoadingIndicators.LoadingSpinner, null), hasSelections && /*#__PURE__*/_react.default.createElement(_reactPlotly.default, {
184
+ data: data,
185
+ layout: layout,
186
+ useResizeHandler: true,
187
+ className: "cherita-pseudospatial-plot",
188
+ config: {
189
+ displaylogo: false
190
+ }
191
+ }), hasSelections && showLegend && /*#__PURE__*/_react.default.createElement(_Legend.Legend, {
192
+ min: layout?.coloraxis?.cmin,
193
+ max: layout?.coloraxis?.cmax,
194
+ addText: plotType === _constants.PSEUDOSPATIAL_PLOT_TYPES.GENE ? " - Mean expression" : plotType === _constants.PSEUDOSPATIAL_PLOT_TYPES.CATEGORICAL ? " - %" : plotType === _constants.PSEUDOSPATIAL_PLOT_TYPES.CONTINUOUS ? " - Mean value" : ""
195
+ })));
201
196
  } else {
202
- return /*#__PURE__*/(0, _jsxRuntime.jsx)(_jsxRuntime.Fragment, {
203
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Alert, {
204
- variant: "danger",
205
- children: serverError.message
206
- })
207
- });
197
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Alert, {
198
+ variant: "danger"
199
+ }, serverError.message));
208
200
  }
209
201
  }
210
202
 
@@ -212,11 +204,11 @@ function Pseudospatial(_ref) {
212
204
  function PseudospatialImage() {
213
205
  const dataset = (0, _DatasetContext.useDataset)();
214
206
  if (dataset.imageUrl) {
215
- return /*#__PURE__*/(0, _jsxRuntime.jsx)(_ImageViewer.ImageViewer, {
207
+ return /*#__PURE__*/_react.default.createElement(_ImageViewer.ImageViewer, {
216
208
  src: dataset.imageUrl,
217
209
  alt: "Pseudospatial reference image"
218
210
  });
219
211
  } else {
220
- return /*#__PURE__*/(0, _jsxRuntime.jsx)(_jsxRuntime.Fragment, {});
212
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null);
221
213
  }
222
214
  }
@@ -5,8 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.PseudospatialControls = PseudospatialControls;
7
7
  var _react = _interopRequireDefault(require("react"));
8
- var _jsxRuntime = require("react/jsx-runtime");
9
8
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
10
9
  function PseudospatialControls() {
11
- return /*#__PURE__*/(0, _jsxRuntime.jsx)(_jsxRuntime.Fragment, {});
10
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null);
12
11
  }
@@ -10,34 +10,28 @@ var _reactBootstrap = require("react-bootstrap");
10
10
  var _constants = require("../../constants/constants");
11
11
  var _DatasetContext = require("../../context/DatasetContext");
12
12
  var _requests = require("../../utils/requests");
13
- var _jsxRuntime = require("react/jsx-runtime");
14
13
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
15
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); }
16
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; }
17
16
  function CategoricalMode() {
18
17
  const dataset = (0, _DatasetContext.useDataset)();
19
18
  const dispatch = (0, _DatasetContext.useDatasetDispatch)();
20
- const modeList = _lodash.default.map(_constants.PSEUDOSPATIAL_CATEGORICAL_MODES, (m, key) => /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Dropdown.Item, {
19
+ const modeList = _lodash.default.map(_constants.PSEUDOSPATIAL_CATEGORICAL_MODES, (m, key) => /*#__PURE__*/_react.default.createElement(_reactBootstrap.Dropdown.Item, {
20
+ key: key,
21
21
  active: dataset.pseudospatial.categoricalMode === m,
22
22
  onClick: () => {
23
23
  dispatch({
24
24
  type: "set.pseudospatial.categoricalMode",
25
25
  categoricalMode: m.value
26
26
  });
27
- },
28
- children: _lodash.default.capitalize(m.name)
29
- }, key));
27
+ }
28
+ }, _lodash.default.capitalize(m.name)));
30
29
  const mode = _lodash.default.find(_constants.PSEUDOSPATIAL_CATEGORICAL_MODES, {
31
30
  value: dataset.pseudospatial.categoricalMode
32
31
  });
33
- return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactBootstrap.Dropdown, {
34
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Dropdown.Toggle, {
35
- variant: "light",
36
- children: _lodash.default.capitalize(mode.name)
37
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Dropdown.Menu, {
38
- children: modeList
39
- })]
40
- });
32
+ return /*#__PURE__*/_react.default.createElement(_reactBootstrap.Dropdown, null, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Dropdown.Toggle, {
33
+ variant: "light"
34
+ }, _lodash.default.capitalize(mode.name)), /*#__PURE__*/_react.default.createElement(_reactBootstrap.Dropdown.Menu, null, modeList));
41
35
  }
42
36
  function MaskSet() {
43
37
  const ENDPOINT = "masks";
@@ -67,16 +61,16 @@ function MaskSet() {
67
61
  setMaskSets(fetchedData);
68
62
  }
69
63
  }, [fetchedData, isPending, serverError]);
70
- const maskSetList = _lodash.default.map(maskSets, (ms, key) => /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Dropdown.Item, {
64
+ const maskSetList = _lodash.default.map(maskSets, (ms, key) => /*#__PURE__*/_react.default.createElement(_reactBootstrap.Dropdown.Item, {
65
+ key: key,
71
66
  active: dataset.pseudospatial.maskSet === key,
72
67
  onClick: () => {
73
68
  dispatch({
74
69
  type: "set.pseudospatial.maskSet",
75
70
  maskSet: key
76
71
  });
77
- },
78
- children: _lodash.default.capitalize(key)
79
- }, key));
72
+ }
73
+ }, _lodash.default.capitalize(key)));
80
74
  const handleMaskChange = mask => {
81
75
  let newMasks = dataset.pseudospatial.maskValues || maskSets?.[dataset.pseudospatial?.maskSet];
82
76
  newMasks = newMasks.includes(mask) ? newMasks.filter(m => m !== mask) : [...newMasks, mask];
@@ -101,57 +95,35 @@ function MaskSet() {
101
95
  });
102
96
  }
103
97
  };
104
- const masksList = _lodash.default.map(maskSets?.[dataset.pseudospatial?.maskSet], mask => /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Dropdown.ItemText, {
105
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Form.Check, {
106
- type: "checkbox",
107
- label: mask,
108
- checked: !dataset.pseudospatial.maskValues || dataset.pseudospatial.maskValues.includes(mask),
109
- onChange: () => handleMaskChange(mask)
110
- })
111
- }, mask));
98
+ const masksList = _lodash.default.map(maskSets?.[dataset.pseudospatial?.maskSet], mask => /*#__PURE__*/_react.default.createElement(_reactBootstrap.Dropdown.ItemText, {
99
+ key: mask
100
+ }, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Form.Check, {
101
+ type: "checkbox",
102
+ label: mask,
103
+ checked: !dataset.pseudospatial.maskValues || dataset.pseudospatial.maskValues.includes(mask),
104
+ onChange: () => handleMaskChange(mask)
105
+ })));
112
106
  const nMasks = dataset.pseudospatial.maskValues ? dataset.pseudospatial.maskValues?.length : maskSets?.[dataset.pseudospatial?.maskSet]?.length || "No";
113
107
  const toggleAllChecked = !dataset.pseudospatial.maskValues || dataset.pseudospatial.maskValues?.length === maskSets?.[dataset.pseudospatial?.maskSet]?.length;
114
- return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
115
- children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactBootstrap.Dropdown, {
116
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Dropdown.Toggle, {
117
- variant: "light",
118
- children: _lodash.default.capitalize(dataset.pseudospatial.maskSet || "Select a mask set")
119
- }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactBootstrap.Dropdown.Menu, {
120
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Dropdown.Header, {
121
- children: "Mask set"
122
- }), maskSetList]
123
- })]
124
- }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactBootstrap.Dropdown, {
125
- children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactBootstrap.Dropdown.Toggle, {
126
- variant: "light",
127
- children: [nMasks, " masks selected"]
128
- }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactBootstrap.Dropdown.Menu, {
129
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Dropdown.Header, {
130
- children: "Masks"
131
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Dropdown.ItemText, {
132
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Form.Check, {
133
- type: "checkbox",
134
- label: "Toggle all",
135
- checked: toggleAllChecked,
136
- onChange: toggleMasks
137
- })
138
- }, "toggle-all"), masksList]
139
- })]
140
- })]
141
- });
108
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Dropdown, null, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Dropdown.Toggle, {
109
+ variant: "light"
110
+ }, _lodash.default.capitalize(dataset.pseudospatial.maskSet || "Select a mask set")), /*#__PURE__*/_react.default.createElement(_reactBootstrap.Dropdown.Menu, null, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Dropdown.Header, null, "Mask set"), maskSetList)), /*#__PURE__*/_react.default.createElement(_reactBootstrap.Dropdown, null, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Dropdown.Toggle, {
111
+ variant: "light"
112
+ }, nMasks, " masks selected"), /*#__PURE__*/_react.default.createElement(_reactBootstrap.Dropdown.Menu, null, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Dropdown.Header, null, "Masks"), /*#__PURE__*/_react.default.createElement(_reactBootstrap.Dropdown.ItemText, {
113
+ key: "toggle-all"
114
+ }, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Form.Check, {
115
+ type: "checkbox",
116
+ label: "Toggle all",
117
+ checked: toggleAllChecked,
118
+ onChange: toggleMasks
119
+ })), masksList)));
142
120
  }
143
121
 
144
122
  // @TODO: add colormap, colorbar slider
145
- function PseudospatialToolbar(_ref) {
146
- let {
147
- plotType
148
- } = _ref;
149
- return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
150
- className: "cherita-pseudospatial-toolbar",
151
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.ButtonGroup, {
152
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(MaskSet, {})
153
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.ButtonGroup, {
154
- children: plotType === _constants.PSEUDOSPATIAL_PLOT_TYPES.CATEGORICAL && /*#__PURE__*/(0, _jsxRuntime.jsx)(CategoricalMode, {})
155
- })]
156
- });
123
+ function PseudospatialToolbar({
124
+ plotType
125
+ }) {
126
+ return /*#__PURE__*/_react.default.createElement("div", {
127
+ className: "cherita-pseudospatial-toolbar"
128
+ }, /*#__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)));
157
129
  }