@haniffalab/cherita-react 1.2.0-dev.2025-05-21.e8f5ce54 → 1.2.0-dev.2025-05-21.6154c7e3

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 (83) hide show
  1. package/dist/cjs/components/controls/Controls.js +60 -0
  2. package/dist/cjs/components/dotplot/Dotplot.js +29 -22
  3. package/dist/cjs/components/dotplot/DotplotControls.js +62 -99
  4. package/dist/cjs/components/full-page/FullPage.js +9 -7
  5. package/dist/cjs/components/full-page/FullPagePseudospatial.js +9 -7
  6. package/dist/cjs/components/heatmap/Heatmap.js +22 -13
  7. package/dist/cjs/components/heatmap/HeatmapControls.js +2 -19
  8. package/dist/cjs/components/matrixplot/Matrixplot.js +25 -16
  9. package/dist/cjs/components/matrixplot/MatrixplotControls.js +4 -34
  10. package/dist/cjs/components/obs-list/ObsItem.js +37 -29
  11. package/dist/cjs/components/obs-list/ObsList.js +47 -44
  12. package/dist/cjs/components/obsm-list/ObsmList.js +9 -6
  13. package/dist/cjs/components/offcanvas/index.js +13 -9
  14. package/dist/cjs/components/pseudospatial/Pseudospatial.js +61 -53
  15. package/dist/cjs/components/pseudospatial/PseudospatialToolbar.js +17 -11
  16. package/dist/cjs/components/scatterplot/Scatterplot.js +52 -52
  17. package/dist/cjs/components/scatterplot/ScatterplotControls.js +11 -24
  18. package/dist/cjs/components/scatterplot/SpatialControls.js +4 -4
  19. package/dist/cjs/components/search-bar/SearchBar.js +12 -10
  20. package/dist/cjs/components/search-bar/SearchInfo.js +14 -13
  21. package/dist/cjs/components/search-bar/SearchResults.js +16 -14
  22. package/dist/cjs/components/var-list/VarItem.js +10 -7
  23. package/dist/cjs/components/var-list/VarList.js +14 -9
  24. package/dist/cjs/components/var-list/VarListToolbar.js +1 -2
  25. package/dist/cjs/components/var-list/VarSet.js +1 -2
  26. package/dist/cjs/components/violin/Violin.js +48 -39
  27. package/dist/cjs/components/violin/ViolinControls.js +4 -20
  28. package/dist/cjs/context/DatasetContext.js +17 -11
  29. package/dist/cjs/context/FilterContext.js +9 -8
  30. package/dist/cjs/context/SettingsContext.js +172 -240
  31. package/dist/cjs/context/ZarrDataContext.js +1 -2
  32. package/dist/cjs/helpers/color-helper.js +3 -3
  33. package/dist/cjs/helpers/zarr-helper.js +15 -12
  34. package/dist/cjs/utils/Filter.js +13 -9
  35. package/dist/cjs/utils/Histogram.js +4 -3
  36. package/dist/cjs/utils/ImageViewer.js +1 -2
  37. package/dist/cjs/utils/Legend.js +3 -3
  38. package/dist/cjs/utils/LoadingIndicators.js +1 -1
  39. package/dist/cjs/utils/VirtualizedList.js +16 -13
  40. package/dist/cjs/utils/errors.js +20 -22
  41. package/dist/cjs/utils/requests.js +13 -10
  42. package/dist/cjs/utils/zarrData.js +12 -8
  43. package/dist/css/cherita.css +13 -9
  44. package/dist/css/cherita.css.map +1 -1
  45. package/dist/esm/components/controls/Controls.js +51 -0
  46. package/dist/esm/components/dotplot/Dotplot.js +28 -20
  47. package/dist/esm/components/dotplot/DotplotControls.js +62 -97
  48. package/dist/esm/components/full-page/FullPage.js +8 -5
  49. package/dist/esm/components/full-page/FullPagePseudospatial.js +8 -5
  50. package/dist/esm/components/heatmap/Heatmap.js +21 -11
  51. package/dist/esm/components/heatmap/HeatmapControls.js +3 -20
  52. package/dist/esm/components/matrixplot/Matrixplot.js +24 -14
  53. package/dist/esm/components/matrixplot/MatrixplotControls.js +5 -35
  54. package/dist/esm/components/obs-list/ObsItem.js +36 -27
  55. package/dist/esm/components/obs-list/ObsList.js +46 -42
  56. package/dist/esm/components/obsm-list/ObsmList.js +8 -4
  57. package/dist/esm/components/offcanvas/index.js +13 -9
  58. package/dist/esm/components/pseudospatial/Pseudospatial.js +60 -51
  59. package/dist/esm/components/pseudospatial/PseudospatialToolbar.js +16 -9
  60. package/dist/esm/components/scatterplot/Scatterplot.js +51 -50
  61. package/dist/esm/components/scatterplot/ScatterplotControls.js +11 -22
  62. package/dist/esm/components/scatterplot/SpatialControls.js +3 -2
  63. package/dist/esm/components/search-bar/SearchBar.js +11 -8
  64. package/dist/esm/components/search-bar/SearchInfo.js +13 -11
  65. package/dist/esm/components/search-bar/SearchResults.js +15 -12
  66. package/dist/esm/components/var-list/VarItem.js +9 -5
  67. package/dist/esm/components/var-list/VarList.js +13 -7
  68. package/dist/esm/components/violin/Violin.js +47 -37
  69. package/dist/esm/components/violin/ViolinControls.js +5 -21
  70. package/dist/esm/context/DatasetContext.js +16 -9
  71. package/dist/esm/context/FilterContext.js +8 -6
  72. package/dist/esm/context/SettingsContext.js +171 -238
  73. package/dist/esm/helpers/color-helper.js +3 -3
  74. package/dist/esm/helpers/zarr-helper.js +15 -12
  75. package/dist/esm/utils/Filter.js +13 -9
  76. package/dist/esm/utils/Histogram.js +4 -3
  77. package/dist/esm/utils/Legend.js +2 -1
  78. package/dist/esm/utils/LoadingIndicators.js +1 -1
  79. package/dist/esm/utils/VirtualizedList.js +15 -11
  80. package/dist/esm/utils/errors.js +20 -22
  81. package/dist/esm/utils/requests.js +13 -10
  82. package/dist/esm/utils/zarrData.js +12 -8
  83. package/package.json +4 -2
@@ -1,4 +1,7 @@
1
+ const _excluded = ["children", "varMode", "searchDiseases"];
1
2
  function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
3
+ function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
4
+ function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
2
5
  import React, { useEffect, useRef, useState } from "react";
3
6
  import { Card, Container, Modal } from "react-bootstrap";
4
7
  import { SELECTION_MODES, VIOLIN_MODES } from "../../constants/constants";
@@ -15,11 +18,11 @@ import { VarNamesList } from "../var-list/VarList";
15
18
  import { Violin } from "../violin/Violin";
16
19
  export function FullPage(_ref) {
17
20
  let {
18
- children,
19
- varMode = SELECTION_MODES.SINGLE,
20
- searchDiseases = false,
21
- ...props
22
- } = _ref;
21
+ children,
22
+ varMode = SELECTION_MODES.SINGLE,
23
+ searchDiseases = false
24
+ } = _ref,
25
+ props = _objectWithoutProperties(_ref, _excluded);
23
26
  const appRef = useRef();
24
27
  const [appDimensions, setAppDimensions] = useState({
25
28
  width: 0,
@@ -1,4 +1,7 @@
1
+ const _excluded = ["children", "varMode", "searchDiseases"];
1
2
  function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
3
+ function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
4
+ function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
2
5
  import React, { useEffect, useRef, useState } from "react";
3
6
  import { faArrowUpRightFromSquare } from "@fortawesome/free-solid-svg-icons";
4
7
  import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
@@ -15,11 +18,11 @@ import { SearchBar } from "../search-bar/SearchBar";
15
18
  import { VarNamesList } from "../var-list/VarList";
16
19
  export function FullPage(_ref) {
17
20
  let {
18
- children,
19
- varMode = SELECTION_MODES.SINGLE,
20
- searchDiseases = false,
21
- ...props
22
- } = _ref;
21
+ children,
22
+ varMode = SELECTION_MODES.SINGLE,
23
+ searchDiseases = false
24
+ } = _ref,
25
+ props = _objectWithoutProperties(_ref, _excluded);
23
26
  const appRef = useRef();
24
27
  const [appDimensions, setAppDimensions] = useState({
25
28
  width: 0,
@@ -1,3 +1,8 @@
1
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
2
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
3
+ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
4
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
5
+ function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
1
6
  import React, { useCallback, useEffect, useRef, useState } from "react";
2
7
  import _ from "lodash";
3
8
  import { Alert } from "react-bootstrap";
@@ -8,6 +13,7 @@ import { useSettings } from "../../context/SettingsContext";
8
13
  import { LoadingSpinner } from "../../utils/LoadingIndicators";
9
14
  import { useDebouncedFetch } from "../../utils/requests";
10
15
  export function Heatmap() {
16
+ var _settings$selectedObs, _settings$selectedObs2, _settings$selectedObs3;
11
17
  const ENDPOINT = "heatmap";
12
18
  const dataset = useDataset();
13
19
  const settings = useSettings();
@@ -22,7 +28,10 @@ export function Heatmap() {
22
28
  const [params, setParams] = useState({
23
29
  url: dataset.url,
24
30
  obsCol: settings.selectedObs,
25
- obsValues: !settings.selectedObs?.omit.length ? null : _.difference(_.values(settings.selectedObs?.codes), settings.selectedObs?.omit).map(c => settings.selectedObs?.codesMap[c]),
31
+ obsValues: !((_settings$selectedObs = settings.selectedObs) !== null && _settings$selectedObs !== void 0 && _settings$selectedObs.omit.length) ? null : _.difference(_.values((_settings$selectedObs2 = settings.selectedObs) === null || _settings$selectedObs2 === void 0 ? void 0 : _settings$selectedObs2.codes), (_settings$selectedObs3 = settings.selectedObs) === null || _settings$selectedObs3 === void 0 ? void 0 : _settings$selectedObs3.omit).map(c => {
32
+ var _settings$selectedObs4;
33
+ return (_settings$selectedObs4 = settings.selectedObs) === null || _settings$selectedObs4 === void 0 ? void 0 : _settings$selectedObs4.codesMap[c];
34
+ }),
26
35
  varKeys: settings.selectedMultiVar.map(i => i.isSet ? {
27
36
  name: i.name,
28
37
  indices: i.vars.map(v => v.index)
@@ -37,29 +46,30 @@ export function Heatmap() {
37
46
  setHasSelections(false);
38
47
  }
39
48
  setParams(p => {
40
- return {
41
- ...p,
49
+ var _settings$selectedObs5, _settings$selectedObs6, _settings$selectedObs7;
50
+ return _objectSpread(_objectSpread({}, p), {}, {
42
51
  url: dataset.url,
43
52
  obsCol: settings.selectedObs,
44
- obsValues: !settings.selectedObs?.omit.length ? null : _.difference(_.values(settings.selectedObs?.codes), settings.selectedObs?.omit).map(c => settings.selectedObs?.codesMap[c]),
53
+ obsValues: !((_settings$selectedObs5 = settings.selectedObs) !== null && _settings$selectedObs5 !== void 0 && _settings$selectedObs5.omit.length) ? null : _.difference(_.values((_settings$selectedObs6 = settings.selectedObs) === null || _settings$selectedObs6 === void 0 ? void 0 : _settings$selectedObs6.codes), (_settings$selectedObs7 = settings.selectedObs) === null || _settings$selectedObs7 === void 0 ? void 0 : _settings$selectedObs7.omit).map(c => {
54
+ var _settings$selectedObs8;
55
+ return (_settings$selectedObs8 = settings.selectedObs) === null || _settings$selectedObs8 === void 0 ? void 0 : _settings$selectedObs8.codesMap[c];
56
+ }),
45
57
  varKeys: settings.selectedMultiVar.map(i => i.isSet ? {
46
58
  name: i.name,
47
59
  indices: i.vars.map(v => v.index)
48
60
  } : i.index),
49
61
  obsIndices: isSliced ? [...(obsIndices || [])] : null,
50
62
  varNamesCol: dataset.varNamesCol
51
- };
63
+ });
52
64
  });
53
65
  }, [settings.selectedMultiVar, settings.selectedObs, dataset.url, dataset.varNamesCol, obsIndices, isSliced]);
54
66
  const updateColorscale = useCallback(colorscale => {
55
67
  setLayout(l => {
56
- return {
57
- ...l,
58
- coloraxis: {
59
- ...l.coloraxis,
68
+ return _objectSpread(_objectSpread({}, l), {}, {
69
+ coloraxis: _objectSpread(_objectSpread({}, l.coloraxis), {}, {
60
70
  colorscale: colorscale
61
- }
62
- };
71
+ })
72
+ });
63
73
  });
64
74
  }, []);
65
75
  const {
@@ -1,23 +1,6 @@
1
1
  import React from "react";
2
- import _ from "lodash";
3
- import { Dropdown } from "react-bootstrap";
4
- import { COLORSCALES } from "../../constants/colorscales";
5
- import { useSettings, useSettingsDispatch } from "../../context/SettingsContext";
2
+ import { Form } from "react-bootstrap";
3
+ import { ColorscaleSelect } from "../controls/Controls";
6
4
  export function HeatmapControls() {
7
- const settings = useSettings();
8
- const dispatch = useSettingsDispatch();
9
- const colormapList = _.keys(COLORSCALES).map(key => /*#__PURE__*/React.createElement(Dropdown.Item, {
10
- key: key,
11
- active: settings.controls.colorScale === key,
12
- onClick: () => {
13
- dispatch({
14
- type: "set.controls.colorScale",
15
- colorScale: key
16
- });
17
- }
18
- }, key));
19
- return /*#__PURE__*/React.createElement(Dropdown, null, /*#__PURE__*/React.createElement(Dropdown.Toggle, {
20
- id: "dropdownColorscale",
21
- variant: "light"
22
- }, settings.controls.colorScale), /*#__PURE__*/React.createElement(Dropdown.Menu, null, colormapList));
5
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Form, null, /*#__PURE__*/React.createElement(ColorscaleSelect, null)));
23
6
  }
@@ -1,3 +1,8 @@
1
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
2
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
3
+ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
4
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
5
+ function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
1
6
  import React, { useCallback, useEffect, useRef, useState } from "react";
2
7
  import _ from "lodash";
3
8
  import { Alert } from "react-bootstrap";
@@ -8,6 +13,7 @@ import { useSettings } from "../../context/SettingsContext";
8
13
  import { LoadingSpinner } from "../../utils/LoadingIndicators";
9
14
  import { useDebouncedFetch } from "../../utils/requests";
10
15
  export function Matrixplot() {
16
+ var _settings$selectedObs, _settings$selectedObs2, _settings$selectedObs3;
11
17
  const ENDPOINT = "matrixplot";
12
18
  const dataset = useDataset();
13
19
  const settings = useSettings();
@@ -22,13 +28,16 @@ export function Matrixplot() {
22
28
  const [params, setParams] = useState({
23
29
  url: dataset.url,
24
30
  obsCol: settings.selectedObs,
25
- obsValues: !settings.selectedObs?.omit.length ? null : _.difference(_.values(settings.selectedObs?.codes), settings.selectedObs?.omit).map(c => settings.selectedObs?.codesMap[c]),
31
+ obsValues: !((_settings$selectedObs = settings.selectedObs) !== null && _settings$selectedObs !== void 0 && _settings$selectedObs.omit.length) ? null : _.difference(_.values((_settings$selectedObs2 = settings.selectedObs) === null || _settings$selectedObs2 === void 0 ? void 0 : _settings$selectedObs2.codes), (_settings$selectedObs3 = settings.selectedObs) === null || _settings$selectedObs3 === void 0 ? void 0 : _settings$selectedObs3.omit).map(c => {
32
+ var _settings$selectedObs4;
33
+ return (_settings$selectedObs4 = settings.selectedObs) === null || _settings$selectedObs4 === void 0 ? void 0 : _settings$selectedObs4.codesMap[c];
34
+ }),
26
35
  varKeys: settings.selectedMultiVar.map(i => i.isSet ? {
27
36
  name: i.name,
28
37
  indices: i.vars.map(v => v.index)
29
38
  } : i.index),
30
39
  obsIndices: isSliced ? [...(obsIndices || [])] : null,
31
- standardScale: settings.controls.standardScale,
40
+ standardScale: settings.controls.scale.matrixplot,
32
41
  varNamesCol: dataset.varNamesCol
33
42
  });
34
43
  useEffect(() => {
@@ -38,30 +47,31 @@ export function Matrixplot() {
38
47
  setHasSelections(false);
39
48
  }
40
49
  setParams(p => {
41
- return {
42
- ...p,
50
+ var _settings$selectedObs5, _settings$selectedObs6, _settings$selectedObs7;
51
+ return _objectSpread(_objectSpread({}, p), {}, {
43
52
  url: dataset.url,
44
53
  obsCol: settings.selectedObs,
45
- obsValues: !settings.selectedObs?.omit.length ? null : _.difference(_.values(settings.selectedObs?.codes), settings.selectedObs?.omit).map(c => settings.selectedObs?.codesMap[c]),
54
+ obsValues: !((_settings$selectedObs5 = settings.selectedObs) !== null && _settings$selectedObs5 !== void 0 && _settings$selectedObs5.omit.length) ? null : _.difference(_.values((_settings$selectedObs6 = settings.selectedObs) === null || _settings$selectedObs6 === void 0 ? void 0 : _settings$selectedObs6.codes), (_settings$selectedObs7 = settings.selectedObs) === null || _settings$selectedObs7 === void 0 ? void 0 : _settings$selectedObs7.omit).map(c => {
55
+ var _settings$selectedObs8;
56
+ return (_settings$selectedObs8 = settings.selectedObs) === null || _settings$selectedObs8 === void 0 ? void 0 : _settings$selectedObs8.codesMap[c];
57
+ }),
46
58
  varKeys: settings.selectedMultiVar.map(i => i.isSet ? {
47
59
  name: i.name,
48
60
  indices: i.vars.map(v => v.index)
49
61
  } : i.index),
50
62
  obsIndices: isSliced ? [...(obsIndices || [])] : null,
51
- standardScale: settings.controls.standardScale,
63
+ standardScale: settings.controls.scale.matrixplot,
52
64
  varNamesCol: dataset.varNamesCol
53
- };
65
+ });
54
66
  });
55
- }, [settings.controls.standardScale, settings.selectedMultiVar, settings.selectedObs, dataset.url, dataset.varNamesCol, obsIndices, isSliced]);
67
+ }, [settings.controls.scale.matrixplot, settings.selectedMultiVar, settings.selectedObs, dataset.url, dataset.varNamesCol, obsIndices, isSliced]);
56
68
  const updateColorscale = useCallback(colorscale => {
57
69
  setLayout(l => {
58
- return {
59
- ...l,
60
- coloraxis: {
61
- ...l.coloraxis,
70
+ return _objectSpread(_objectSpread({}, l), {}, {
71
+ coloraxis: _objectSpread(_objectSpread({}, l.coloraxis), {}, {
62
72
  colorscale: colorscale
63
- }
64
- };
73
+ })
74
+ });
65
75
  });
66
76
  }, []);
67
77
  const {
@@ -1,38 +1,8 @@
1
1
  import React from "react";
2
- import _ from "lodash";
3
- import { Dropdown, ButtonGroup, ButtonToolbar, InputGroup } from "react-bootstrap";
4
- import { COLORSCALES } from "../../constants/colorscales";
5
- import { MATRIXPLOT_SCALES } from "../../constants/constants";
6
- import { useSettings, useSettingsDispatch } from "../../context/SettingsContext";
2
+ import { Form } from "react-bootstrap";
3
+ import { ColorscaleSelect, ScaleSelect } from "../controls/Controls";
7
4
  export function MatrixplotControls() {
8
- const settings = useSettings();
9
- const dispatch = useSettingsDispatch();
10
- const colorScaleList = _.keys(COLORSCALES).map(key => /*#__PURE__*/React.createElement(Dropdown.Item, {
11
- key: key,
12
- active: settings.controls.colorScale === key,
13
- onClick: () => {
14
- dispatch({
15
- type: "set.controls.colorScale",
16
- colorScale: key
17
- });
18
- }
19
- }, key));
20
- const standardScaleList = _.values(MATRIXPLOT_SCALES).map(scale => /*#__PURE__*/React.createElement(Dropdown.Item, {
21
- key: scale.value,
22
- active: settings.controls.scale.matrixplot.name === scale.name,
23
- onClick: () => {
24
- dispatch({
25
- type: "set.controls.scale",
26
- plot: "matrixplot",
27
- scale: scale
28
- });
29
- }
30
- }, scale.name));
31
- return /*#__PURE__*/React.createElement(ButtonToolbar, null, /*#__PURE__*/React.createElement(ButtonGroup, null, /*#__PURE__*/React.createElement(Dropdown, null, /*#__PURE__*/React.createElement(Dropdown.Toggle, {
32
- id: "dropdownColorscale",
33
- variant: "light"
34
- }, settings.controls.colorScale), /*#__PURE__*/React.createElement(Dropdown.Menu, null, colorScaleList))), /*#__PURE__*/React.createElement(ButtonGroup, null, /*#__PURE__*/React.createElement(InputGroup, null, /*#__PURE__*/React.createElement(InputGroup.Text, null, "Standard scale"), /*#__PURE__*/React.createElement(Dropdown, null, /*#__PURE__*/React.createElement(Dropdown.Toggle, {
35
- id: "dropdownStandardScale",
36
- variant: "light"
37
- }, settings.controls.scale.matrixplot.name), /*#__PURE__*/React.createElement(Dropdown.Menu, null, standardScaleList)))));
5
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Form, null, /*#__PURE__*/React.createElement(ColorscaleSelect, null), /*#__PURE__*/React.createElement(ScaleSelect, {
6
+ plot: "matrixplot"
7
+ })));
38
8
  }
@@ -1,3 +1,8 @@
1
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
2
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
3
+ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
4
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
5
+ function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
1
6
  import React, { useCallback, useEffect, useMemo, useState } from "react";
2
7
  import { Tooltip } from "@mui/material";
3
8
  import { Gauge, SparkLineChart } from "@mui/x-charts";
@@ -37,9 +42,10 @@ import { useObsData } from "../../utils/zarrData";
37
42
  // }
38
43
 
39
44
  function getContinuousLabel(code, binEdges) {
40
- return `[ ${formatNumerical(binEdges[code][0])}, ${formatNumerical(binEdges[code][1], FORMATS.EXPONENTIAL)}${code === binEdges.length - 1 ? " ]" : " )"}`;
45
+ return "[ ".concat(formatNumerical(binEdges[code][0]), ", ").concat(formatNumerical(binEdges[code][1], FORMATS.EXPONENTIAL)).concat(code === binEdges.length - 1 ? " ]" : " )");
41
46
  }
42
47
  const useObsHistogram = obs => {
48
+ var _settings$selectedVar, _settings$selectedVar2, _settings$selectedVar3, _settings$selectedVar4, _settings$selectedVar9, _settings$selectedVar0, _settings$selectedVar1, _settings$selectedVar10;
43
49
  const ENDPOINT = "obs/histograms";
44
50
  const dataset = useDataset();
45
51
  const settings = useSettings();
@@ -51,25 +57,25 @@ const useObsHistogram = obs => {
51
57
  url: dataset.url,
52
58
  obsCol: _.omit(obs, "omit"),
53
59
  // avoid re-rendering when toggling unselected obs
54
- varKey: settings.selectedVar?.isSet ? {
55
- name: settings.selectedVar?.name,
56
- indices: settings.selectedVar?.vars.map(v => v.index)
57
- } : settings.selectedVar?.index,
60
+ varKey: (_settings$selectedVar = settings.selectedVar) !== null && _settings$selectedVar !== void 0 && _settings$selectedVar.isSet ? {
61
+ name: (_settings$selectedVar2 = settings.selectedVar) === null || _settings$selectedVar2 === void 0 ? void 0 : _settings$selectedVar2.name,
62
+ indices: (_settings$selectedVar3 = settings.selectedVar) === null || _settings$selectedVar3 === void 0 ? void 0 : _settings$selectedVar3.vars.map(v => v.index)
63
+ } : (_settings$selectedVar4 = settings.selectedVar) === null || _settings$selectedVar4 === void 0 ? void 0 : _settings$selectedVar4.index,
58
64
  obsIndices: isSliced ? [...(obsIndices || [])] : null
59
65
  });
60
66
  useEffect(() => {
61
67
  setParams(p => {
62
- return {
63
- ...p,
68
+ var _settings$selectedVar5, _settings$selectedVar6, _settings$selectedVar7, _settings$selectedVar8;
69
+ return _objectSpread(_objectSpread({}, p), {}, {
64
70
  obsCol: _.omit(obs, "omit"),
65
- varKey: settings.selectedVar?.isSet ? {
66
- name: settings.selectedVar?.name,
67
- indices: settings.selectedVar?.vars.map(v => v.index)
68
- } : settings.selectedVar?.index,
71
+ varKey: (_settings$selectedVar5 = settings.selectedVar) !== null && _settings$selectedVar5 !== void 0 && _settings$selectedVar5.isSet ? {
72
+ name: (_settings$selectedVar6 = settings.selectedVar) === null || _settings$selectedVar6 === void 0 ? void 0 : _settings$selectedVar6.name,
73
+ indices: (_settings$selectedVar7 = settings.selectedVar) === null || _settings$selectedVar7 === void 0 ? void 0 : _settings$selectedVar7.vars.map(v => v.index)
74
+ } : (_settings$selectedVar8 = settings.selectedVar) === null || _settings$selectedVar8 === void 0 ? void 0 : _settings$selectedVar8.index,
69
75
  obsIndices: isSliced ? [...(obsIndices || [])] : null
70
- };
76
+ });
71
77
  });
72
- }, [settings.selectedVar?.index, settings.selectedVar?.isSet, settings.selectedVar?.name, settings.selectedVar?.vars, obsIndices, isSliced, obs]);
78
+ }, [(_settings$selectedVar9 = settings.selectedVar) === null || _settings$selectedVar9 === void 0 ? void 0 : _settings$selectedVar9.index, (_settings$selectedVar0 = settings.selectedVar) === null || _settings$selectedVar0 === void 0 ? void 0 : _settings$selectedVar0.isSet, (_settings$selectedVar1 = settings.selectedVar) === null || _settings$selectedVar1 === void 0 ? void 0 : _settings$selectedVar1.name, (_settings$selectedVar10 = settings.selectedVar) === null || _settings$selectedVar10 === void 0 ? void 0 : _settings$selectedVar10.vars, obsIndices, isSliced, obs]);
73
79
  return useFetch(ENDPOINT, params, {
74
80
  enabled: !!settings.selectedVar && settings.colorEncoding === COLOR_ENCODINGS.VAR,
75
81
  refetchOnMount: false
@@ -83,6 +89,7 @@ const getBinIndex = (v, binEdges) => {
83
89
  return _.findIndex(modifiedBinEdges, range => _.inRange(v, ...range));
84
90
  };
85
91
  const useFilteredObsData = obs => {
92
+ var _obs$bins2;
86
93
  const {
87
94
  obsIndices
88
95
  } = useFilteredData();
@@ -98,19 +105,20 @@ const useFilteredObsData = obs => {
98
105
  valueCounts = _.countBy(filteredObsValues);
99
106
  } else {
100
107
  valueCounts = _.countBy(filteredObsValues, v => {
101
- return getBinIndex(v, obs.bins?.binEdges || [[null, null]]);
108
+ var _obs$bins;
109
+ return getBinIndex(v, ((_obs$bins = obs.bins) === null || _obs$bins === void 0 ? void 0 : _obs$bins.binEdges) || [[null, null]]);
102
110
  });
103
111
  }
104
112
  valueCounts = _.mapKeys(valueCounts, (_v, i) => {
105
113
  return obs.codesMap[i];
106
114
  });
107
- const totalCounts = obsIndices?.size;
115
+ const totalCounts = obsIndices === null || obsIndices === void 0 ? void 0 : obsIndices.size;
108
116
  const pct = _.mapValues(valueCounts, v => v / totalCounts * 100);
109
117
  return {
110
118
  valueCounts,
111
119
  pct
112
120
  };
113
- }, [isCategorical, obs.bins?.binEdges, obs.codesMap, obsData.data, obsIndices]);
121
+ }, [isCategorical, (_obs$bins2 = obs.bins) === null || _obs$bins2 === void 0 ? void 0 : _obs$bins2.binEdges, obs.codesMap, obsData.data, obsIndices]);
114
122
  return {
115
123
  value_counts: valueCounts,
116
124
  pct: pct
@@ -170,7 +178,7 @@ function CategoricalItem(_ref) {
170
178
  })), /*#__PURE__*/React.createElement("div", {
171
179
  className: "pl-1 m-0"
172
180
  }, /*#__PURE__*/React.createElement(Tooltip, {
173
- title: isSliced ? /*#__PURE__*/React.createElement(React.Fragment, null, "Filtered:", " ", formatNumerical(filteredStats.pct, FORMATS.EXPONENTIAL), "%", /*#__PURE__*/React.createElement("br", null), "Total: ", formatNumerical(stats.pct, FORMATS.EXPONENTIAL), "%") : `${formatNumerical(stats.pct, FORMATS.EXPONENTIAL)}%`,
181
+ title: isSliced ? /*#__PURE__*/React.createElement(React.Fragment, null, "Filtered:", " ", formatNumerical(filteredStats.pct, FORMATS.EXPONENTIAL), "%", /*#__PURE__*/React.createElement("br", null), "Total: ", formatNumerical(stats.pct, FORMATS.EXPONENTIAL), "%") : "".concat(formatNumerical(stats.pct, FORMATS.EXPONENTIAL), "%"),
174
182
  placement: "left",
175
183
  arrow: true
176
184
  }, /*#__PURE__*/React.createElement("div", {
@@ -225,7 +233,7 @@ function CategoricalItem(_ref) {
225
233
  y: "0",
226
234
  width: "10",
227
235
  height: "10",
228
- fill: `rgb(${getColor({
236
+ fill: "rgb(".concat(getColor({
229
237
  value: (code - min) / (max - min),
230
238
  categorical: true,
231
239
  grayOut: isOmitted,
@@ -233,7 +241,7 @@ function CategoricalItem(_ref) {
233
241
  alpha: 1
234
242
  },
235
243
  colorEncoding: "obs"
236
- })})`
244
+ }), ")")
237
245
  }))) : null))));
238
246
  }
239
247
  export function CategoricalObs(_ref2) {
@@ -253,6 +261,7 @@ export function CategoricalObs(_ref2) {
253
261
  const obsHistograms = useObsHistogram(obs);
254
262
  const filteredObsData = useFilteredObsData(obs);
255
263
  const getDataAtIndex = useCallback(index => {
264
+ var _obsHistograms$fetche;
256
265
  return {
257
266
  value: obs.values[index],
258
267
  code: obs.codes[obs.values[index]],
@@ -263,7 +272,7 @@ export function CategoricalObs(_ref2) {
263
272
  isOmitted: _.includes(obs.omit, obs.codes[obs.values[index]]),
264
273
  label: obs.values[index],
265
274
  histogramData: settings.colorEncoding === COLOR_ENCODINGS.VAR ? {
266
- data: obsHistograms.fetchedData?.[obs.values[index]],
275
+ data: (_obsHistograms$fetche = obsHistograms.fetchedData) === null || _obsHistograms$fetche === void 0 ? void 0 : _obsHistograms$fetche[obs.values[index]],
267
276
  isPending: obsHistograms.isPending,
268
277
  altColor: isSliced
269
278
  } : {
@@ -271,12 +280,12 @@ export function CategoricalObs(_ref2) {
271
280
  isPending: false
272
281
  },
273
282
  filteredStats: {
274
- value_counts: filteredObsData?.value_counts[obs.values[index]] || 0,
275
- pct: filteredObsData?.pct[obs.values[index]] || 0
283
+ value_counts: (filteredObsData === null || filteredObsData === void 0 ? void 0 : filteredObsData.value_counts[obs.values[index]]) || 0,
284
+ pct: (filteredObsData === null || filteredObsData === void 0 ? void 0 : filteredObsData.pct[obs.values[index]]) || 0
276
285
  },
277
286
  isSliced: isSliced
278
287
  };
279
- }, [settings.colorEncoding, filteredObsData?.pct, filteredObsData?.value_counts, isSliced, obs.codes, obs.omit, obs.value_counts, obs.values, obsHistograms.fetchedData, obsHistograms.isPending, totalCounts]);
288
+ }, [settings.colorEncoding, filteredObsData === null || filteredObsData === void 0 ? void 0 : filteredObsData.pct, filteredObsData === null || filteredObsData === void 0 ? void 0 : filteredObsData.value_counts, isSliced, obs.codes, obs.omit, obs.value_counts, obs.values, obsHistograms.fetchedData, obsHistograms.isPending, totalCounts]);
280
289
  showColor &= settings.colorEncoding === COLOR_ENCODINGS.OBS;
281
290
  return /*#__PURE__*/React.createElement(ListGroup, {
282
291
  variant: "flush",
@@ -339,9 +348,9 @@ function ObsContinuousStats(_ref3) {
339
348
  },
340
349
  xAxis: {
341
350
  data: fetchedData.kde_values[0],
342
- valueFormatter: v => `${formatNumerical(v, FORMATS.EXPONENTIAL)}`
351
+ valueFormatter: v => "".concat(formatNumerical(v, FORMATS.EXPONENTIAL))
343
352
  },
344
- valueFormatter: v => `${formatNumerical(v, FORMATS.EXPONENTIAL)}`,
353
+ valueFormatter: v => "".concat(formatNumerical(v, FORMATS.EXPONENTIAL)),
345
354
  slotProps: {
346
355
  popper: {
347
356
  className: "feature-histogram-tooltip"
@@ -386,8 +395,8 @@ export function ContinuousObs(_ref4) {
386
395
  isOmitted: _.includes(obs.omit, obs.codes[obs.values[index]]),
387
396
  label: isNaN(obs.values[index]) ? "NaN" : getContinuousLabel(obs.codes[obs.values[index]], obs.bins.binEdges),
388
397
  filteredStats: {
389
- value_counts: filteredObsData?.value_counts[obs.values[index]] || 0,
390
- pct: filteredObsData?.pct[obs.values[index]] || 0
398
+ value_counts: (filteredObsData === null || filteredObsData === void 0 ? void 0 : filteredObsData.value_counts[obs.values[index]]) || 0,
399
+ pct: (filteredObsData === null || filteredObsData === void 0 ? void 0 : filteredObsData.pct[obs.values[index]]) || 0
391
400
  },
392
401
  isSliced: isSliced
393
402
  };