@haniffalab/cherita-react 0.2.0-dev.2024-05-22.5ce64346 → 0.2.0-dev.2024-09-26.775b9a06

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 +58 -24
  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 +231 -113
  10. package/dist/components/obs-list/ObsValueList.js +101 -0
  11. package/dist/components/obsm-list/ObsmList.js +13 -20
  12. package/dist/components/scatterplot/Legend.js +28 -36
  13. package/dist/components/scatterplot/Scatterplot.js +302 -124
  14. package/dist/components/scatterplot/ScatterplotControls.js +93 -0
  15. package/dist/components/scatterplot/SpatialControls.js +68 -17
  16. package/dist/components/scatterplot/Toolbox.js +14 -18
  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 +51 -24
  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,22 +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");
13
- var _Dropdown = _interopRequireDefault(require("react-bootstrap/Dropdown"));
14
- var _Button = _interopRequireDefault(require("react-bootstrap/Button"));
15
- var _DropdownButton = _interopRequireDefault(require("react-bootstrap/DropdownButton"));
16
- var _ButtonGroup = _interopRequireDefault(require("react-bootstrap/ButtonGroup"));
17
- var _OverlayTrigger = _interopRequireDefault(require("react-bootstrap/OverlayTrigger"));
18
- var _Tooltip = _interopRequireDefault(require("react-bootstrap/Tooltip"));
9
+ var _DatasetContext = require("../../context/DatasetContext");
10
+ var _LoadingIndicators = require("../../utils/LoadingIndicators");
11
+ var _requests = require("../../utils/requests");
19
12
  var _jsxRuntime = require("react/jsx-runtime");
20
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
21
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); }
22
- 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; }
23
15
  function ObsmKeysList() {
24
16
  const ENDPOINT = "obsm/keys";
25
17
  const dataset = (0, _DatasetContext.useDataset)();
@@ -55,11 +47,11 @@ function ObsmKeysList() {
55
47
  }
56
48
  }, [dataset.selectedObsm]);
57
49
  const obsmList = obsmKeysList.map(item => {
58
- return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Dropdown.default.Item, {
50
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Dropdown.Item, {
59
51
  className: "custom ".concat(active === item && "active"),
60
52
  onClick: () => {
61
53
  dispatch({
62
- type: "obsmSelected",
54
+ type: "select.obsm",
63
55
  obsm: item
64
56
  });
65
57
  },
@@ -68,25 +60,26 @@ function ObsmKeysList() {
68
60
  });
69
61
  if (!serverError) {
70
62
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
71
- children: [isPending && /*#__PURE__*/(0, _jsxRuntime.jsx)(_LoadingSpinner.LoadingSpinner, {}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_DropdownButton.default, {
72
- as: _ButtonGroup.default,
73
- title: dataset.selectedObsm,
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",
74
67
  id: "bg-nested-dropdown",
75
68
  size: "sm",
76
69
  children: obsmList
77
70
  })]
78
71
  });
79
72
  } else {
80
- return /*#__PURE__*/(0, _jsxRuntime.jsx)(_OverlayTrigger.default, {
73
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.OverlayTrigger, {
81
74
  placement: "top",
82
75
  delay: {
83
76
  show: 100,
84
77
  hide: 200
85
78
  },
86
- overlay: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Tooltip.default, {
79
+ overlay: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Tooltip, {
87
80
  children: serverError.message
88
81
  }),
89
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Button.default, {
82
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Button, {
90
83
  variant: "danger",
91
84
  children: "Error"
92
85
  })
@@ -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
  });