@haniffalab/cherita-react 0.2.0-dev.2024-05-21.ca7d726c → 0.2.0-dev.2024-09-26.f9979478

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 (32) hide show
  1. package/dist/App.scss +67 -12
  2. package/dist/components/Offcanvas/index.js +9 -6
  3. package/dist/components/dotplot/Dotplot.js +5 -189
  4. package/dist/components/dotplot/DotplotControls.js +197 -0
  5. package/dist/components/heatmap/Heatmap.js +5 -31
  6. package/dist/components/heatmap/HeatmapControls.js +36 -0
  7. package/dist/components/matrixplot/Matrixplot.js +5 -59
  8. package/dist/components/matrixplot/MatrixplotControls.js +65 -0
  9. package/dist/components/obs-list/ObsList.js +251 -93
  10. package/dist/components/obs-list/ObsValueList.js +101 -0
  11. package/dist/components/obsm-list/ObsmList.js +25 -16
  12. package/dist/components/scatterplot/Legend.js +28 -36
  13. package/dist/components/scatterplot/Scatterplot.js +303 -119
  14. package/dist/components/scatterplot/ScatterplotControls.js +93 -0
  15. package/dist/components/scatterplot/SpatialControls.js +172 -0
  16. package/dist/components/scatterplot/Toolbox.js +18 -72
  17. package/dist/components/search-bar/SearchBar.js +2 -2
  18. package/dist/components/search-bar/SearchResults.js +2 -2
  19. package/dist/components/var-list/VarList.js +102 -40
  20. package/dist/components/violin/Violin.js +7 -46
  21. package/dist/components/violin/ViolinControls.js +50 -0
  22. package/dist/constants/colorscales.js +28 -0
  23. package/dist/constants/constants.js +11 -43
  24. package/dist/context/DatasetContext.js +122 -23
  25. package/dist/helpers/color-helper.js +54 -21
  26. package/dist/helpers/zarr-helper.js +39 -17
  27. package/dist/index.js +17 -11
  28. package/dist/utils/LoadingIndicators.js +33 -0
  29. package/dist/utils/requests.js +1 -1
  30. package/dist/utils/search.js +4 -3
  31. package/package.json +10 -4
  32. package/dist/utils/LoadingSpinner.js +0 -44
@@ -0,0 +1,101 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.ObsValueList = ObsValueList;
7
+ var _react = _interopRequireWildcard(require("react"));
8
+ var _reactVirtual = require("@tanstack/react-virtual");
9
+ var _lodash = _interopRequireDefault(require("lodash"));
10
+ var _reactBootstrap = require("react-bootstrap");
11
+ var _jsxRuntime = require("react/jsx-runtime");
12
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
13
+ 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
+ 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
+ function ObsValueList(_ref) {
16
+ var _virtualItems$0$start, _virtualItems$;
17
+ let {
18
+ item,
19
+ onChange,
20
+ getFillColor
21
+ } = _ref;
22
+ const [parentNode, setParentNode] = (0, _react.useState)(null);
23
+ const valueVirtualizer = (0, _reactVirtual.useVirtualizer)({
24
+ count: item.values.length,
25
+ getScrollElement: () => parentNode,
26
+ estimateSize: () => 44,
27
+ overscan: 25
28
+ });
29
+ const refCallback = (0, _react.useCallback)(node => {
30
+ setParentNode(node);
31
+ }, []);
32
+ const virtualItems = valueVirtualizer.getVirtualItems();
33
+ (0, _react.useEffect)(() => {
34
+ valueVirtualizer.measure();
35
+ }, [valueVirtualizer, parentNode === null || parentNode === void 0 ? void 0 : parentNode.clientHeight]);
36
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_jsxRuntime.Fragment, {
37
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
38
+ ref: refCallback,
39
+ style: {
40
+ overflowY: "auto",
41
+ maxHeight: "80vh"
42
+ },
43
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
44
+ style: {
45
+ height: "".concat(valueVirtualizer.getTotalSize(), "px"),
46
+ width: "100%",
47
+ position: "relative",
48
+ willChange: "transform"
49
+ },
50
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
51
+ style: {
52
+ position: "absolute",
53
+ top: 0,
54
+ left: 0,
55
+ width: "100%",
56
+ 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
+ },
58
+ children: virtualItems.map(virtualItem => {
59
+ const value = item.values[virtualItem.index];
60
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
61
+ "data-index": virtualItem.index,
62
+ ref: valueVirtualizer.measureElement,
63
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.ListGroup.Item, {
64
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
65
+ className: "d-flex",
66
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
67
+ className: "flex-grow-1",
68
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Form.Check, {
69
+ // prettier-ignore
70
+ className: "obs-value-list-check",
71
+ type: "switch",
72
+ id: "custom-switch",
73
+ label: value,
74
+ checked: !_lodash.default.includes(item.omit, item.codes[value]),
75
+ onChange: () => onChange(value)
76
+ })
77
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
78
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)("svg", {
79
+ xmlns: "http://www.w3.org/2000/svg",
80
+ width: "24",
81
+ height: "24",
82
+ fill: "currentColor",
83
+ viewBox: "0 0 10 10",
84
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)("rect", {
85
+ x: "0",
86
+ y: "0",
87
+ width: "10",
88
+ height: "10",
89
+ fill: getFillColor(value)
90
+ })
91
+ })
92
+ })]
93
+ })
94
+ }, value)
95
+ }, virtualItem.key);
96
+ })
97
+ })
98
+ })
99
+ })
100
+ });
101
+ }
@@ -4,15 +4,14 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.ObsmKeysList = ObsmKeysList;
7
- require("bootstrap/dist/css/bootstrap.min.css");
8
7
  var _react = _interopRequireWildcard(require("react"));
9
- var _requests = require("../../utils/requests");
10
- var _DatasetContext = require("../../context/DatasetContext");
11
- var _LoadingSpinner = require("../../utils/LoadingSpinner");
12
8
  var _reactBootstrap = require("react-bootstrap");
9
+ var _DatasetContext = require("../../context/DatasetContext");
10
+ var _LoadingIndicators = require("../../utils/LoadingIndicators");
11
+ var _requests = require("../../utils/requests");
13
12
  var _jsxRuntime = require("react/jsx-runtime");
14
13
  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
- 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 && Object.prototype.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
+ 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
15
  function ObsmKeysList() {
17
16
  const ENDPOINT = "obsm/keys";
18
17
  const dataset = (0, _DatasetContext.useDataset)();
@@ -48,12 +47,11 @@ function ObsmKeysList() {
48
47
  }
49
48
  }, [dataset.selectedObsm]);
50
49
  const obsmList = obsmKeysList.map(item => {
51
- return /*#__PURE__*/(0, _jsxRuntime.jsx)("button", {
52
- type: "button",
53
- className: "list-group-item list-grou-item-action ".concat(active === item && "active"),
50
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Dropdown.Item, {
51
+ className: "custom ".concat(active === item && "active"),
54
52
  onClick: () => {
55
53
  dispatch({
56
- type: "obsmSelected",
54
+ type: "select.obsm",
57
55
  obsm: item
58
56
  });
59
57
  },
@@ -61,18 +59,29 @@ function ObsmKeysList() {
61
59
  }, item);
62
60
  });
63
61
  if (!serverError) {
64
- return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
65
- className: "",
66
- children: [isPending && /*#__PURE__*/(0, _jsxRuntime.jsx)(_LoadingSpinner.LoadingSpinner, {}), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
67
- className: "list-group overflow-auto mh-100",
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",
68
69
  children: obsmList
69
70
  })]
70
71
  });
71
72
  } else {
72
- return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
73
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Alert, {
74
- variant: "danger",
73
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.OverlayTrigger, {
74
+ placement: "top",
75
+ delay: {
76
+ show: 100,
77
+ hide: 200
78
+ },
79
+ overlay: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Tooltip, {
75
80
  children: serverError.message
81
+ }),
82
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Button, {
83
+ variant: "danger",
84
+ children: "Error"
76
85
  })
77
86
  });
78
87
  }
@@ -5,59 +5,51 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.Legend = Legend;
7
7
  var _react = require("react");
8
- require("bootstrap/dist/css/bootstrap.min.css");
9
8
  var _lodash = _interopRequireDefault(require("lodash"));
9
+ var _constants = require("../../constants/constants");
10
10
  var _DatasetContext = require("../../context/DatasetContext");
11
+ var _colorHelper = require("../../helpers/color-helper");
11
12
  var _jsxRuntime = require("react/jsx-runtime");
12
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
13
14
  function Legend(_ref) {
14
15
  let {
15
- scale
16
+ isCategorical = false,
17
+ min = 0,
18
+ max = 1
16
19
  } = _ref;
17
20
  const dataset = (0, _DatasetContext.useDataset)();
18
- const [legendData, setLegendData] = (0, _react.useState)({
19
- dmin: 0,
20
- dmax: 1,
21
- list: []
22
- });
23
- (0, _react.useEffect)(() => {
24
- if (scale) {
25
- const dom = scale.domain ? scale.domain() : [0, 1];
26
- const dmin = Math.min(dom[0], dom[dom.length - 1]);
27
- const dmax = Math.max(dom[dom.length - 1], dom[0]);
28
- const spanList = _lodash.default.range(100).map(i => {
29
- var color = scale(dmin + i / 100 * (dmax - dmin)).hex();
30
- return /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
31
- className: "grad-step",
32
- style: {
33
- backgroundColor: color
34
- }
35
- }, i);
36
- });
37
- setLegendData({
38
- dmin: dmin,
39
- dmax: dmax,
40
- list: spanList
41
- });
42
- }
43
- }, [scale]);
44
- if (dataset.colorEncoding === "var" && scale) {
21
+ const {
22
+ getColor
23
+ } = (0, _colorHelper.useColor)();
24
+ const spanList = (0, _react.useMemo)(() => {
25
+ return _lodash.default.range(100).map(i => {
26
+ var color = (0, _colorHelper.rgbToHex)(getColor(i / 100, isCategorical));
27
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
28
+ className: "grad-step",
29
+ style: {
30
+ backgroundColor: color
31
+ }
32
+ }, i);
33
+ });
34
+ }, [getColor, isCategorical]);
35
+ if (dataset.colorEncoding && !isCategorical) {
36
+ var _dataset$selectedVar, _dataset$selectedObs;
45
37
  return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
46
38
  className: "cherita-legend",
47
39
  children: /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
48
40
  className: "gradient",
49
41
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("p", {
50
42
  className: "small m-0 p-0",
51
- children: dataset.selectedVar ? dataset.selectedVar.name : ""
52
- }), legendData.list, /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
43
+ children: dataset.colorEncoding === _constants.COLOR_ENCODINGS.VAR ? (_dataset$selectedVar = dataset.selectedVar) === null || _dataset$selectedVar === void 0 ? void 0 : _dataset$selectedVar.name : (_dataset$selectedObs = dataset.selectedObs) === null || _dataset$selectedObs === void 0 ? void 0 : _dataset$selectedObs.name
44
+ }), spanList, /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
53
45
  className: "domain-min",
54
- children: legendData.dmin.toFixed(1)
46
+ children: min.toFixed(1)
55
47
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
56
48
  className: "domain-med",
57
- children: ((legendData.dmin + legendData.dmax) * 0.5).toFixed(1)
49
+ children: ((min + max) * 0.5).toFixed(1)
58
50
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
59
51
  className: "domain-max",
60
- children: legendData.dmax.toFixed(1)
52
+ children: max.toFixed(1)
61
53
  })]
62
54
  })
63
55
  });
@@ -68,7 +60,7 @@ function Legend(_ref) {
68
60
  className: "gradient",
69
61
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)("p", {
70
62
  className: "small m-0 p-0",
71
- children: dataset.selectedObs ? dataset.selectedObs.name : ""
63
+ children: dataset.colorEncoding === _constants.COLOR_ENCODINGS.OBS && dataset.selectedObs ? dataset.selectedObs.name : ""
72
64
  })
73
65
  })
74
66
  });