@haniffalab/cherita-react 1.4.1-dev.2025-10-23.e95b5a90 → 1.4.1-dev.2025-10-23.55fbe6ff

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 (126) hide show
  1. package/README.md +1 -1
  2. package/dist/cjs/components/controls/Controls.js +4 -4
  3. package/dist/cjs/components/dotplot/Dotplot.js +8 -8
  4. package/dist/cjs/components/dotplot/DotplotControls.js +5 -5
  5. package/dist/cjs/components/full-page/FullPage.js +1 -2
  6. package/dist/cjs/components/full-page/PlotAlert.js +1 -1
  7. package/dist/cjs/components/full-page/PlotTypeSelector.js +13 -13
  8. package/dist/cjs/components/heatmap/Heatmap.js +7 -7
  9. package/dist/cjs/components/icons/DotPlotIcon.js +1 -1
  10. package/dist/cjs/components/icons/HeatmapIcon.js +1 -1
  11. package/dist/cjs/components/icons/MatrixPlotIcon.1.js +1 -1
  12. package/dist/cjs/components/icons/MatrixPlotIcon.js +1 -1
  13. package/dist/cjs/components/icons/ScatterplotIcon.1.js +1 -1
  14. package/dist/cjs/components/icons/ScatterplotIcon.js +1 -1
  15. package/dist/cjs/components/icons/ViolinPlotIcon.js +1 -1
  16. package/dist/cjs/components/matrixplot/Matrixplot.js +7 -7
  17. package/dist/cjs/components/obs-list/ObsItem.js +19 -19
  18. package/dist/cjs/components/obs-list/ObsList.js +17 -17
  19. package/dist/cjs/components/obsm-list/ObsmList.js +7 -7
  20. package/dist/cjs/components/pseudospatial/Pseudospatial.js +16 -16
  21. package/dist/cjs/components/pseudospatial/PseudospatialToolbar.js +10 -10
  22. package/dist/cjs/components/scatterplot/Scatterplot.js +16 -16
  23. package/dist/cjs/components/scatterplot/ScatterplotControls.js +1 -1
  24. package/dist/cjs/components/scatterplot/SpatialControls.js +9 -9
  25. package/dist/cjs/components/scatterplot/Toolbox.js +4 -4
  26. package/dist/cjs/components/search-bar/SearchBar.js +14 -14
  27. package/dist/cjs/components/search-bar/SearchInfo.js +3 -3
  28. package/dist/cjs/components/search-bar/SearchResults.js +2 -2
  29. package/dist/cjs/components/toolbar/Toolbar.js +3 -3
  30. package/dist/cjs/components/var-list/VarItem.js +15 -15
  31. package/dist/cjs/components/var-list/VarList.js +5 -5
  32. package/dist/cjs/components/var-list/VarListToolbar.js +4 -4
  33. package/dist/cjs/components/var-list/VarSet.js +13 -13
  34. package/dist/cjs/components/violin/Violin.js +10 -10
  35. package/dist/cjs/constants/colorscales.js +19 -19
  36. package/dist/cjs/constants/constants.js +47 -47
  37. package/dist/cjs/context/DatasetContext.js +3 -3
  38. package/dist/cjs/context/FilterContext.js +2 -2
  39. package/dist/cjs/context/SettingsContext.js +57 -57
  40. package/dist/cjs/helpers/color-helper.js +2 -2
  41. package/dist/cjs/helpers/zarr-helper.js +3 -3
  42. package/dist/cjs/utils/Filter.js +1 -1
  43. package/dist/cjs/utils/Histogram.js +2 -2
  44. package/dist/cjs/utils/ImageViewer.js +2 -2
  45. package/dist/cjs/utils/Legend.js +1 -1
  46. package/dist/cjs/utils/LoadingIndicators.js +1 -1
  47. package/dist/cjs/utils/Resolver.js +7 -7
  48. package/dist/cjs/utils/Skeleton.js +1 -1
  49. package/dist/cjs/utils/StyledTooltip.js +5 -5
  50. package/dist/cjs/utils/VirtualizedList.js +7 -7
  51. package/dist/cjs/utils/errors.js +15 -15
  52. package/dist/cjs/utils/requests.js +5 -5
  53. package/dist/cjs/utils/search.js +4 -4
  54. package/dist/cjs/utils/string.js +6 -6
  55. package/dist/cjs/utils/zarrData.js +5 -5
  56. package/dist/css/cherita.css +21 -20
  57. package/dist/css/cherita.css.map +1 -1
  58. package/dist/esm/components/controls/Controls.js +9 -9
  59. package/dist/esm/components/dotplot/Dotplot.js +21 -21
  60. package/dist/esm/components/dotplot/DotplotControls.js +9 -9
  61. package/dist/esm/components/full-page/FullPage.js +22 -23
  62. package/dist/esm/components/full-page/PlotAlert.js +5 -5
  63. package/dist/esm/components/full-page/PlotTypeSelector.js +21 -21
  64. package/dist/esm/components/heatmap/Heatmap.js +20 -20
  65. package/dist/esm/components/heatmap/HeatmapControls.js +2 -2
  66. package/dist/esm/components/icons/DotPlotIcon.js +1 -1
  67. package/dist/esm/components/icons/HeatmapIcon.js +1 -1
  68. package/dist/esm/components/icons/MatrixPlotIcon.1.js +1 -1
  69. package/dist/esm/components/icons/MatrixPlotIcon.js +1 -1
  70. package/dist/esm/components/icons/ScatterplotIcon.1.js +1 -1
  71. package/dist/esm/components/icons/ScatterplotIcon.js +1 -1
  72. package/dist/esm/components/icons/ViolinPlotIcon.js +1 -1
  73. package/dist/esm/components/matrixplot/Matrixplot.js +20 -20
  74. package/dist/esm/components/matrixplot/MatrixplotControls.js +2 -2
  75. package/dist/esm/components/obs-list/ObsItem.js +37 -37
  76. package/dist/esm/components/obs-list/ObsList.js +34 -34
  77. package/dist/esm/components/obs-list/ObsToolbar.js +1 -1
  78. package/dist/esm/components/obsm-list/ObsmList.js +15 -15
  79. package/dist/esm/components/offcanvas/index.js +6 -6
  80. package/dist/esm/components/pseudospatial/Pseudospatial.js +31 -31
  81. package/dist/esm/components/pseudospatial/PseudospatialToolbar.js +17 -17
  82. package/dist/esm/components/scatterplot/Scatterplot.js +38 -38
  83. package/dist/esm/components/scatterplot/ScatterplotControls.js +9 -9
  84. package/dist/esm/components/scatterplot/SpatialControls.js +23 -23
  85. package/dist/esm/components/scatterplot/Toolbox.js +7 -7
  86. package/dist/esm/components/search-bar/SearchBar.js +27 -27
  87. package/dist/esm/components/search-bar/SearchInfo.js +14 -14
  88. package/dist/esm/components/search-bar/SearchResults.js +10 -10
  89. package/dist/esm/components/toolbar/Toolbar.js +6 -6
  90. package/dist/esm/components/var-list/VarItem.js +27 -27
  91. package/dist/esm/components/var-list/VarList.js +21 -21
  92. package/dist/esm/components/var-list/VarListToolbar.js +10 -10
  93. package/dist/esm/components/var-list/VarSet.js +22 -22
  94. package/dist/esm/components/violin/Violin.js +26 -26
  95. package/dist/esm/components/violin/ViolinControls.js +2 -2
  96. package/dist/esm/constants/colorscales.js +19 -19
  97. package/dist/esm/constants/constants.js +47 -47
  98. package/dist/esm/context/DatasetContext.js +11 -11
  99. package/dist/esm/context/FilterContext.js +3 -3
  100. package/dist/esm/context/SettingsContext.js +61 -61
  101. package/dist/esm/context/ZarrDataContext.js +3 -3
  102. package/dist/esm/helpers/color-helper.js +5 -5
  103. package/dist/esm/helpers/map-helper.js +2 -2
  104. package/dist/esm/helpers/zarr-helper.js +6 -6
  105. package/dist/esm/index.js +22 -22
  106. package/dist/esm/utils/Filter.js +8 -8
  107. package/dist/esm/utils/Histogram.js +6 -6
  108. package/dist/esm/utils/ImageViewer.js +4 -4
  109. package/dist/esm/utils/Legend.js +9 -9
  110. package/dist/esm/utils/LoadingIndicators.js +2 -2
  111. package/dist/esm/utils/Resolver.js +13 -13
  112. package/dist/esm/utils/Skeleton.js +2 -2
  113. package/dist/esm/utils/StyledTooltip.js +6 -6
  114. package/dist/esm/utils/VirtualizedList.js +9 -9
  115. package/dist/esm/utils/errors.js +15 -15
  116. package/dist/esm/utils/requests.js +8 -8
  117. package/dist/esm/utils/search.js +7 -7
  118. package/dist/esm/utils/string.js +7 -7
  119. package/dist/esm/utils/zarrData.js +13 -13
  120. package/package.json +11 -7
  121. package/scss/cherita-bootstrap.scss +2 -2
  122. package/scss/cherita.scss +24 -17
  123. package/scss/components/accordions.scss +4 -1
  124. package/scss/components/layouts.scss +13 -12
  125. package/scss/components/lists.scss +8 -4
  126. package/scss/components/plotly.scss +1 -0
@@ -3,23 +3,23 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
3
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
4
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
5
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); }
6
- import { useContext, useEffect, useMemo, useState } from "react";
7
- import { faChevronDown, faChevronRight } from "@fortawesome/free-solid-svg-icons";
8
- import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
9
- import CommentIcon from "@mui/icons-material/Comment";
10
- import JoinInnerIcon from "@mui/icons-material/JoinInner";
11
- import WaterDropIcon from "@mui/icons-material/WaterDrop";
12
- import _ from "lodash";
13
- import { Alert } from "react-bootstrap";
14
- import Accordion from "react-bootstrap/Accordion";
15
- import { useAccordionButton } from "react-bootstrap/AccordionButton";
16
- import AccordionContext from "react-bootstrap/AccordionContext";
17
- import { CategoricalObs, ContinuousObs } from "./ObsItem";
18
- import { COLOR_ENCODINGS, DEFAULT_OBS_GROUP, OBS_TYPES } from "../../constants/constants";
19
- import { useDataset } from "../../context/DatasetContext";
20
- import { useSettings, useSettingsDispatch } from "../../context/SettingsContext";
21
- import { LoadingSpinner } from "../../utils/LoadingIndicators";
22
- import { useFetch } from "../../utils/requests";
6
+ import { useContext, useEffect, useMemo, useState } from 'react';
7
+ import { faChevronDown, faChevronRight } from '@fortawesome/free-solid-svg-icons';
8
+ import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
9
+ import CommentIcon from '@mui/icons-material/Comment';
10
+ import JoinInnerIcon from '@mui/icons-material/JoinInner';
11
+ import WaterDropIcon from '@mui/icons-material/WaterDrop';
12
+ import _ from 'lodash';
13
+ import { Alert } from 'react-bootstrap';
14
+ import Accordion from 'react-bootstrap/Accordion';
15
+ import { useAccordionButton } from 'react-bootstrap/AccordionButton';
16
+ import AccordionContext from 'react-bootstrap/AccordionContext';
17
+ import { CategoricalObs, ContinuousObs } from './ObsItem';
18
+ import { COLOR_ENCODINGS, DEFAULT_OBS_GROUP, OBS_TYPES } from '../../constants/constants';
19
+ import { useDataset } from '../../context/DatasetContext';
20
+ import { useSettings, useSettingsDispatch } from '../../context/SettingsContext';
21
+ import { LoadingSpinner } from '../../utils/LoadingIndicators';
22
+ import { useFetch } from '../../utils/requests';
23
23
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
24
24
  const ObsAccordionToggle = _ref => {
25
25
  let {
@@ -35,7 +35,7 @@ const ObsAccordionToggle = _ref => {
35
35
  handleAccordionToggle(eventKey, isCurrentEventKey);
36
36
  });
37
37
  return /*#__PURE__*/_jsxs("div", {
38
- className: "obs-accordion-header ".concat(isCurrentEventKey ? "active" : ""),
38
+ className: "obs-accordion-header ".concat(isCurrentEventKey ? 'active' : ''),
39
39
  onClick: decoratedOnClick,
40
40
  children: [/*#__PURE__*/_jsx("span", {
41
41
  className: "obs-accordion-header-chevron",
@@ -56,7 +56,7 @@ export function ObsColsList(_ref2) {
56
56
  showSelectedAsActive = false,
57
57
  showHistograms = true
58
58
  } = _ref2;
59
- const ENDPOINT = "obs/cols";
59
+ const ENDPOINT = 'obs/cols';
60
60
  const dataset = useDataset();
61
61
  const settings = useSettings();
62
62
  const dispatch = useSettingsDispatch();
@@ -67,7 +67,7 @@ export function ObsColsList(_ref2) {
67
67
  var _dataset$obsGroups;
68
68
  return _objectSpread({
69
69
  default: _.union(DEFAULT_OBS_GROUP, (_dataset$obsGroups = dataset.obsGroups) === null || _dataset$obsGroups === void 0 ? void 0 : _dataset$obsGroups.default)
70
- }, _.omit(dataset.obsGroups, "default"));
70
+ }, _.omit(dataset.obsGroups, 'default'));
71
71
  }, [dataset.obsGroups]);
72
72
  const [params, setParams] = useState(_objectSpread({
73
73
  url: dataset.url
@@ -121,7 +121,7 @@ export function ObsColsList(_ref2) {
121
121
  return _objectSpread(_objectSpread({}, d), {}, {
122
122
  omit: []
123
123
  });
124
- }), "name"));
124
+ }), 'name'));
125
125
  }
126
126
  }, [fetchedData, isPending, obsGroups, serverError, enableGroups, (_settings$selectedObs3 = settings.selectedObs) === null || _settings$selectedObs3 === void 0 ? void 0 : _settings$selectedObs3.name, (_settings$selectedObs4 = settings.selectedObs) === null || _settings$selectedObs4 === void 0 ? void 0 : _settings$selectedObs4.omit]);
127
127
  useEffect(() => {
@@ -130,7 +130,7 @@ export function ObsColsList(_ref2) {
130
130
  if (!obsCols[(_settings$selectedObs5 = settings.selectedObs) === null || _settings$selectedObs5 === void 0 ? void 0 : _settings$selectedObs5.name]) {
131
131
  setActive([]);
132
132
  dispatch({
133
- type: "select.obs",
133
+ type: 'select.obs',
134
134
  obs: null
135
135
  });
136
136
  }
@@ -155,7 +155,7 @@ export function ObsColsList(_ref2) {
155
155
  });
156
156
  if (((_settings$selectedObs6 = settings.selectedObs) === null || _settings$selectedObs6 === void 0 ? void 0 : _settings$selectedObs6.name) === item.name) {
157
157
  dispatch({
158
- type: "select.obs",
158
+ type: 'select.obs',
159
159
  obs: _objectSpread(_objectSpread({}, item), {}, {
160
160
  omit: omit
161
161
  })
@@ -166,29 +166,29 @@ export function ObsColsList(_ref2) {
166
166
  const inLabelObs = _.includes(settings.labelObs, item.name);
167
167
  if (inLabelObs) {
168
168
  dispatch({
169
- type: "remove.label.obs",
169
+ type: 'remove.label.obs',
170
170
  obsName: item.name
171
171
  });
172
172
  } else {
173
173
  dispatch({
174
- type: "add.label.obs",
174
+ type: 'add.label.obs',
175
175
  obs: item
176
176
  });
177
177
  }
178
178
  };
179
179
  const toggleSlice = item => {
180
180
  dispatch({
181
- type: "toggle.slice.obs",
181
+ type: 'toggle.slice.obs',
182
182
  obs: item
183
183
  });
184
184
  };
185
185
  const toggleColor = item => {
186
186
  dispatch({
187
- type: "select.obs",
187
+ type: 'select.obs',
188
188
  obs: item
189
189
  });
190
190
  dispatch({
191
- type: "set.colorEncoding",
191
+ type: 'set.colorEncoding',
192
192
  value: COLOR_ENCODINGS.OBS
193
193
  });
194
194
  };
@@ -209,7 +209,7 @@ export function ObsColsList(_ref2) {
209
209
  });
210
210
  if (((_settings$selectedObs7 = settings.selectedObs) === null || _settings$selectedObs7 === void 0 ? void 0 : _settings$selectedObs7.name) === item.name) {
211
211
  dispatch({
212
- type: "select.obs",
212
+ type: 'select.obs',
213
213
  obs: _objectSpread(_objectSpread({}, item), {}, {
214
214
  omit: omit
215
215
  })
@@ -238,7 +238,7 @@ export function ObsColsList(_ref2) {
238
238
  }), /*#__PURE__*/_jsxs("div", {
239
239
  className: "accordion-header-toolbar",
240
240
  children: [/*#__PURE__*/_jsx("span", {
241
- className: "mx-1 cursor-pointer ".concat(inLabelObs ? "active-icon" : "text-muted opacity-50"),
241
+ className: "mx-1 cursor-pointer ".concat(inLabelObs ? 'active-icon' : 'text-muted opacity-50'),
242
242
  onClick: event => {
243
243
  event.stopPropagation();
244
244
  toggleLabel(item);
@@ -246,7 +246,7 @@ export function ObsColsList(_ref2) {
246
246
  title: "Add to tooltip",
247
247
  children: /*#__PURE__*/_jsx(CommentIcon, {})
248
248
  }), /*#__PURE__*/_jsx("span", {
249
- className: "mx-1 cursor-pointer ".concat(inSliceObs ? "active-icon" : "text-muted opacity-50"),
249
+ className: "mx-1 cursor-pointer ".concat(inSliceObs ? 'active-icon' : 'text-muted opacity-50'),
250
250
  onClick: event => {
251
251
  event.stopPropagation();
252
252
  toggleSlice(item);
@@ -254,12 +254,12 @@ export function ObsColsList(_ref2) {
254
254
  title: "Filter applied",
255
255
  children: /*#__PURE__*/_jsx(JoinInnerIcon, {})
256
256
  }), /*#__PURE__*/_jsx("span", {
257
- className: "mx-1 cursor-pointer ".concat(isColorEncoding ? "active-icon" : "text-muted opacity-50"),
257
+ className: "mx-1 cursor-pointer ".concat(isColorEncoding ? 'active-icon' : 'text-muted opacity-50'),
258
258
  onClick: event => {
259
259
  event.stopPropagation();
260
260
  toggleColor(item);
261
261
  },
262
- title: showSelectedAsActive ? "Is selected" : "Is color encoding",
262
+ title: showSelectedAsActive ? 'Is selected' : 'Is color encoding',
263
263
  children: /*#__PURE__*/_jsx(WaterDropIcon, {})
264
264
  })]
265
265
  })]
@@ -294,7 +294,7 @@ export function ObsColsList(_ref2) {
294
294
  const groupItems = _.compact(_.map(_.sortBy(obsGroups[group], o => _.lowerCase(o.name)), item => {
295
295
  return obsItem(obsCols === null || obsCols === void 0 ? void 0 : obsCols[item]);
296
296
  }));
297
- if (group === "default") {
297
+ if (group === 'default') {
298
298
  return groupItems;
299
299
  } else {
300
300
  return /*#__PURE__*/_jsxs(Accordion.Item, {
@@ -1,4 +1,4 @@
1
- import { Form } from "react-bootstrap";
1
+ import { Form } from 'react-bootstrap';
2
2
  import { jsx as _jsx } from "react/jsx-runtime";
3
3
  export function ObsToolbar(_ref) {
4
4
  let {
@@ -3,20 +3,20 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
3
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
4
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
5
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); }
6
- import { useEffect, useState } from "react";
7
- import _ from "lodash";
8
- import { Button, ButtonGroup, Dropdown, DropdownButton, OverlayTrigger, Tooltip } from "react-bootstrap";
9
- import { DEFAULT_OBSM_KEYS } from "../../constants/constants";
10
- import { useDataset } from "../../context/DatasetContext";
11
- import { useSettings, useSettingsDispatch } from "../../context/SettingsContext";
12
- import { useFetch } from "../../utils/requests";
13
- import { ObsmKeysListBtn } from "../../utils/Skeleton";
6
+ import { useEffect, useState } from 'react';
7
+ import _ from 'lodash';
8
+ import { Button, ButtonGroup, Dropdown, DropdownButton, OverlayTrigger, Tooltip } from 'react-bootstrap';
9
+ import { DEFAULT_OBSM_KEYS } from '../../constants/constants';
10
+ import { useDataset } from '../../context/DatasetContext';
11
+ import { useSettings, useSettingsDispatch } from '../../context/SettingsContext';
12
+ import { useFetch } from '../../utils/requests';
13
+ import { ObsmKeysListBtn } from '../../utils/Skeleton';
14
14
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
15
15
  export function ObsmKeysList(_ref) {
16
16
  let {
17
17
  setHasObsm
18
18
  } = _ref;
19
- const ENDPOINT = "obsm/keys";
19
+ const ENDPOINT = 'obsm/keys';
20
20
  const dataset = useDataset();
21
21
  const settings = useSettings();
22
22
  const dispatch = useSettingsDispatch();
@@ -54,7 +54,7 @@ export function ObsmKeysList(_ref) {
54
54
  const defaultObsm = _.find(fetchedData, item => item.toLowerCase() === k);
55
55
  if (defaultObsm) {
56
56
  dispatch({
57
- type: "select.obsm",
57
+ type: 'select.obsm',
58
58
  obsm: defaultObsm
59
59
  });
60
60
  return false; // break
@@ -66,7 +66,7 @@ export function ObsmKeysList(_ref) {
66
66
  // If selected obsm is not in keys list, reset to null
67
67
  if (!_.includes(fetchedData || [], settings.selectedObsm)) {
68
68
  dispatch({
69
- type: "select.obsm",
69
+ type: 'select.obsm',
70
70
  obsm: null
71
71
  });
72
72
  } else {
@@ -77,10 +77,10 @@ export function ObsmKeysList(_ref) {
77
77
  }, [dispatch, fetchedData, isPending, serverError, setHasObsm, settings.selectedObsm]);
78
78
  const obsmList = obsmKeysList.map(item => {
79
79
  return /*#__PURE__*/_jsx(Dropdown.Item, {
80
- className: "custom ".concat(active === item && "active"),
80
+ className: "custom ".concat(active === item && 'active'),
81
81
  onClick: () => {
82
82
  dispatch({
83
- type: "select.obsm",
83
+ type: 'select.obsm',
84
84
  obsm: item
85
85
  });
86
86
  },
@@ -93,8 +93,8 @@ export function ObsmKeysList(_ref) {
93
93
  }
94
94
  return /*#__PURE__*/_jsxs(DropdownButton, {
95
95
  as: ButtonGroup,
96
- title: settings.selectedObsm || "Select an embedding",
97
- variant: settings.selectedObsm ? "primary" : "warning",
96
+ title: settings.selectedObsm || 'Select an embedding',
97
+ variant: settings.selectedObsm ? 'primary' : 'warning',
98
98
  id: "bg-nested-dropdown",
99
99
  size: "sm",
100
100
  children: [/*#__PURE__*/_jsx(Dropdown.Header, {
@@ -7,12 +7,12 @@ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol"
7
7
  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); }
8
8
  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; }
9
9
  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; }
10
- import Offcanvas from "react-bootstrap/Offcanvas";
11
- import { SELECTION_MODES } from "../../constants/constants";
12
- import { ObsColsList } from "../obs-list/ObsList";
13
- import { ObsmKeysList } from "../obsm-list/ObsmList";
14
- import { SearchBar } from "../search-bar/SearchBar";
15
- import { VarNamesList } from "../var-list/VarList";
10
+ import Offcanvas from 'react-bootstrap/Offcanvas';
11
+ import { SELECTION_MODES } from '../../constants/constants';
12
+ import { ObsColsList } from '../obs-list/ObsList';
13
+ import { ObsmKeysList } from '../obsm-list/ObsmList';
14
+ import { SearchBar } from '../search-bar/SearchBar';
15
+ import { VarNamesList } from '../var-list/VarList';
16
16
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
17
17
  export function OffcanvasObs(_ref) {
18
18
  let {
@@ -3,24 +3,24 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
3
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
4
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
5
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); }
6
- import { useCallback, useEffect, useMemo, useRef, useState } from "react";
7
- import { faEye, faSliders } from "@fortawesome/free-solid-svg-icons";
8
- import _ from "lodash";
9
- import { Alert } from "react-bootstrap";
10
- import Plot from "react-plotly.js";
11
- import { COLOR_ENCODINGS, OBS_TYPES, PSEUDOSPATIAL_PLOT_TYPES as PLOT_TYPES } from "../../constants/constants";
12
- import { useDataset } from "../../context/DatasetContext";
13
- import { useFilteredData } from "../../context/FilterContext";
14
- import { useSettings, useSettingsDispatch } from "../../context/SettingsContext";
15
- import { rgbToHex, useColor } from "../../helpers/color-helper";
16
- import { ImageViewer } from "../../utils/ImageViewer";
17
- import { Legend } from "../../utils/Legend";
18
- import { LoadingSpinner } from "../../utils/LoadingIndicators";
19
- import { useDebouncedFetch } from "../../utils/requests";
20
- import { useSelectedObs, useSelectedVar } from "../../utils/Resolver";
6
+ import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
7
+ import { faEye, faSliders } from '@fortawesome/free-solid-svg-icons';
8
+ import _ from 'lodash';
9
+ import { Alert } from 'react-bootstrap';
10
+ import Plot from 'react-plotly.js';
11
+ import { COLOR_ENCODINGS, OBS_TYPES, PSEUDOSPATIAL_PLOT_TYPES as PLOT_TYPES } from '../../constants/constants';
12
+ import { useDataset } from '../../context/DatasetContext';
13
+ import { useFilteredData } from '../../context/FilterContext';
14
+ import { useSettings, useSettingsDispatch } from '../../context/SettingsContext';
15
+ import { rgbToHex, useColor } from '../../helpers/color-helper';
16
+ import { ImageViewer } from '../../utils/ImageViewer';
17
+ import { Legend } from '../../utils/Legend';
18
+ import { LoadingSpinner } from '../../utils/LoadingIndicators';
19
+ import { useDebouncedFetch } from '../../utils/requests';
20
+ import { useSelectedObs, useSelectedVar } from '../../utils/Resolver';
21
21
  import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
22
22
  function usePseudospatialData(plotType) {
23
- const ENDPOINT = "pseudospatial";
23
+ const ENDPOINT = 'pseudospatial';
24
24
  const dataset = useDataset();
25
25
  const settings = useSettings();
26
26
  const {
@@ -37,7 +37,7 @@ function usePseudospatialData(plotType) {
37
37
  obsIndices: isSliced ? [...(obsIndices || [])] : null,
38
38
  varNamesCol: dataset.varNamesCol,
39
39
  showColorbar: false,
40
- format: "json"
40
+ format: 'json'
41
41
  };
42
42
  }, [dataset.url, settings.pseudospatial.maskSet, settings.pseudospatial.maskValues, dataset.varNamesCol, isSliced, obsIndices]);
43
43
  const getPlotParams = useCallback(() => {
@@ -57,7 +57,7 @@ function usePseudospatialData(plotType) {
57
57
  obsValues: !(selectedObs !== null && selectedObs !== void 0 && selectedObs.omit.length) ? null : _.difference(selectedObs === null || selectedObs === void 0 ? void 0 : selectedObs.values, selectedObs === null || selectedObs === void 0 ? void 0 : selectedObs.omit),
58
58
  mode: settings.pseudospatial.categoricalMode
59
59
  };
60
- } else if (plotType === "continuous") {
60
+ } else if (plotType === 'continuous') {
61
61
  return {
62
62
  obsCol: selectedObs,
63
63
  obsValues: !(selectedObs !== null && selectedObs !== void 0 && selectedObs.omit.length) ? null : _.difference(selectedObs === null || selectedObs === void 0 ? void 0 : selectedObs.values, selectedObs === null || selectedObs === void 0 ? void 0 : selectedObs.omit)
@@ -67,7 +67,7 @@ function usePseudospatialData(plotType) {
67
67
  const params = useMemo(() => {
68
68
  return _objectSpread(_objectSpread({}, baseParams), getPlotParams());
69
69
  }, [baseParams, getPlotParams]);
70
- return useDebouncedFetch(ENDPOINT + "/" + plotType, params, 500, {
70
+ return useDebouncedFetch(ENDPOINT + '/' + plotType, params, 500, {
71
71
  enabled: !!plotType && !!settings.pseudospatial.maskSet
72
72
  });
73
73
  }
@@ -100,7 +100,7 @@ export function Pseudospatial(_ref) {
100
100
  useEffect(() => {
101
101
  if (_.keys(settings.data.pseudospatial).length && !settings.pseudospatial.maskSet) {
102
102
  dispatch({
103
- type: "set.pseudospatial.maskSet",
103
+ type: 'set.pseudospatial.maskSet',
104
104
  maskSet: _.keys(settings.data.pseudospatial)[0]
105
105
  });
106
106
  }
@@ -194,17 +194,17 @@ export function Pseudospatial(_ref) {
194
194
  if (imageUrl) {
195
195
  return [_objectSpread({
196
196
  source: imageUrl,
197
- xref: "paper",
198
- yref: "paper",
197
+ xref: 'paper',
198
+ yref: 'paper',
199
199
  x: 0.5,
200
200
  y: 0.5,
201
201
  sizex: 1,
202
202
  sizey: 1,
203
- sizing: "contain",
204
- layer: "above",
205
- xanchor: "center",
206
- yanchor: "middle",
207
- name: "Reference Image"
203
+ sizing: 'contain',
204
+ layer: 'above',
205
+ xanchor: 'center',
206
+ yanchor: 'middle',
207
+ name: 'Reference Image'
208
208
  }, settings.pseudospatial.refImg)];
209
209
  }
210
210
  return [];
@@ -213,7 +213,7 @@ export function Pseudospatial(_ref) {
213
213
  var _settings$pseudospati;
214
214
  const isRefImgVisible = (_settings$pseudospati = settings.pseudospatial) === null || _settings$pseudospati === void 0 || (_settings$pseudospati = _settings$pseudospati.refImg) === null || _settings$pseudospati === void 0 ? void 0 : _settings$pseudospati.visible;
215
215
  return [{
216
- name: "Open plot controls",
216
+ name: 'Open plot controls',
217
217
  icon: {
218
218
  width: 512,
219
219
  height: 512,
@@ -221,14 +221,14 @@ export function Pseudospatial(_ref) {
221
221
  },
222
222
  click: () => setShowControls(prev => !prev)
223
223
  }, ...(imageUrl ? [{
224
- name: isRefImgVisible ? "Hide reference image" : "Show reference image",
224
+ name: isRefImgVisible ? 'Hide reference image' : 'Show reference image',
225
225
  icon: {
226
226
  width: 600,
227
227
  height: 512,
228
228
  path: faEye.icon[4]
229
229
  },
230
230
  click: () => dispatch({
231
- type: "toggle.pseudospatial.refImg.visible"
231
+ type: 'toggle.pseudospatial.refImg.visible'
232
232
  })
233
233
  }] : [])];
234
234
  }, [dispatch, imageUrl, setShowControls, (_settings$pseudospati2 = settings.pseudospatial) === null || _settings$pseudospati2 === void 0 || (_settings$pseudospati2 = _settings$pseudospati2.refImg) === null || _settings$pseudospati2 === void 0 ? void 0 : _settings$pseudospati2.visible]);
@@ -268,7 +268,7 @@ export function Pseudospatial(_ref) {
268
268
  }), hasSelections && showLegend && /*#__PURE__*/_jsx(Legend, {
269
269
  min: layout === null || layout === void 0 || (_layout$coloraxis5 = layout.coloraxis) === null || _layout$coloraxis5 === void 0 ? void 0 : _layout$coloraxis5.cmin,
270
270
  max: layout === null || layout === void 0 || (_layout$coloraxis6 = layout.coloraxis) === null || _layout$coloraxis6 === void 0 ? void 0 : _layout$coloraxis6.cmax,
271
- addText: plotType === PLOT_TYPES.GENE ? " - Mean expression" : plotType === PLOT_TYPES.CATEGORICAL ? " - %" : plotType === PLOT_TYPES.CONTINUOUS ? " - Mean value" : ""
271
+ addText: plotType === PLOT_TYPES.GENE ? ' - Mean expression' : plotType === PLOT_TYPES.CATEGORICAL ? ' - %' : plotType === PLOT_TYPES.CONTINUOUS ? ' - Mean value' : ''
272
272
  })]
273
273
  })
274
274
  });
@@ -1,10 +1,10 @@
1
- import { useState } from "react";
2
- import { Box, Slider, Typography } from "@mui/material";
3
- import _ from "lodash";
4
- import { ButtonGroup, Dropdown, Form } from "react-bootstrap";
5
- import { PSEUDOSPATIAL_CATEGORICAL_MODES as MODES, PSEUDOSPATIAL_PLOT_TYPES as PLOT_TYPES } from "../../constants/constants";
6
- import { useDataset } from "../../context/DatasetContext";
7
- import { useSettings, useSettingsDispatch } from "../../context/SettingsContext";
1
+ import { useState } from 'react';
2
+ import { Box, Slider, Typography } from '@mui/material';
3
+ import _ from 'lodash';
4
+ import { ButtonGroup, Dropdown, Form } from 'react-bootstrap';
5
+ import { PSEUDOSPATIAL_CATEGORICAL_MODES as MODES, PSEUDOSPATIAL_PLOT_TYPES as PLOT_TYPES } from '../../constants/constants';
6
+ import { useDataset } from '../../context/DatasetContext';
7
+ import { useSettings, useSettingsDispatch } from '../../context/SettingsContext';
8
8
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
9
9
  function CategoricalMode() {
10
10
  const settings = useSettings();
@@ -13,7 +13,7 @@ function CategoricalMode() {
13
13
  active: settings.pseudospatial.categoricalMode === m,
14
14
  onClick: () => {
15
15
  dispatch({
16
- type: "set.pseudospatial.categoricalMode",
16
+ type: 'set.pseudospatial.categoricalMode',
17
17
  categoricalMode: m.value
18
18
  });
19
19
  },
@@ -42,7 +42,7 @@ function MaskSet() {
42
42
  active: settings.pseudospatial.maskSet === key,
43
43
  onClick: () => {
44
44
  dispatch({
45
- type: "set.pseudospatial.maskSet",
45
+ type: 'set.pseudospatial.maskSet',
46
46
  maskSet: key
47
47
  });
48
48
  },
@@ -56,7 +56,7 @@ function MaskSet() {
56
56
  newMasks = null;
57
57
  }
58
58
  dispatch({
59
- type: "set.pseudospatial.maskValues",
59
+ type: 'set.pseudospatial.maskValues',
60
60
  maskValues: newMasks
61
61
  });
62
62
  };
@@ -64,12 +64,12 @@ function MaskSet() {
64
64
  var _settings$pseudospati3, _maskSets$settings$ps, _settings$pseudospati4;
65
65
  if (!settings.pseudospatial.maskValues || ((_settings$pseudospati3 = settings.pseudospatial.maskValues) === null || _settings$pseudospati3 === void 0 ? void 0 : _settings$pseudospati3.length) === (maskSets === null || maskSets === void 0 || (_maskSets$settings$ps = maskSets[(_settings$pseudospati4 = settings.pseudospatial) === null || _settings$pseudospati4 === void 0 ? void 0 : _settings$pseudospati4.maskSet]) === null || _maskSets$settings$ps === void 0 ? void 0 : _maskSets$settings$ps.length)) {
66
66
  dispatch({
67
- type: "set.pseudospatial.maskValues",
67
+ type: 'set.pseudospatial.maskValues',
68
68
  maskValues: []
69
69
  });
70
70
  } else {
71
71
  dispatch({
72
- type: "set.pseudospatial.maskValues",
72
+ type: 'set.pseudospatial.maskValues',
73
73
  maskValues: null
74
74
  });
75
75
  }
@@ -82,13 +82,13 @@ function MaskSet() {
82
82
  onChange: () => handleMaskChange(mask)
83
83
  })
84
84
  }, mask));
85
- const nMasks = settings.pseudospatial.maskValues ? (_settings$pseudospati6 = settings.pseudospatial.maskValues) === null || _settings$pseudospati6 === void 0 ? void 0 : _settings$pseudospati6.length : (maskSets === null || maskSets === void 0 || (_maskSets$settings$ps2 = maskSets[(_settings$pseudospati7 = settings.pseudospatial) === null || _settings$pseudospati7 === void 0 ? void 0 : _settings$pseudospati7.maskSet]) === null || _maskSets$settings$ps2 === void 0 ? void 0 : _maskSets$settings$ps2.length) || "No";
85
+ const nMasks = settings.pseudospatial.maskValues ? (_settings$pseudospati6 = settings.pseudospatial.maskValues) === null || _settings$pseudospati6 === void 0 ? void 0 : _settings$pseudospati6.length : (maskSets === null || maskSets === void 0 || (_maskSets$settings$ps2 = maskSets[(_settings$pseudospati7 = settings.pseudospatial) === null || _settings$pseudospati7 === void 0 ? void 0 : _settings$pseudospati7.maskSet]) === null || _maskSets$settings$ps2 === void 0 ? void 0 : _maskSets$settings$ps2.length) || 'No';
86
86
  const toggleAllChecked = !settings.pseudospatial.maskValues || ((_settings$pseudospati8 = settings.pseudospatial.maskValues) === null || _settings$pseudospati8 === void 0 ? void 0 : _settings$pseudospati8.length) === (maskSets === null || maskSets === void 0 || (_maskSets$settings$ps3 = maskSets[(_settings$pseudospati9 = settings.pseudospatial) === null || _settings$pseudospati9 === void 0 ? void 0 : _settings$pseudospati9.maskSet]) === null || _maskSets$settings$ps3 === void 0 ? void 0 : _maskSets$settings$ps3.length);
87
87
  return /*#__PURE__*/_jsxs(_Fragment, {
88
88
  children: [/*#__PURE__*/_jsxs(Dropdown, {
89
89
  children: [/*#__PURE__*/_jsx(Dropdown.Toggle, {
90
90
  variant: "light",
91
- children: _.capitalize(settings.pseudospatial.maskSet || "Select a mask set")
91
+ children: _.capitalize(settings.pseudospatial.maskSet || 'Select a mask set')
92
92
  }), /*#__PURE__*/_jsxs(Dropdown.Menu, {
93
93
  children: [/*#__PURE__*/_jsx(Dropdown.Header, {
94
94
  children: "Mask set"
@@ -140,10 +140,10 @@ function OpacitySlider(_ref) {
140
140
  valueLabelFormat: value => "".concat((value * 100).toFixed(0), "%"),
141
141
  marks: [{
142
142
  value: 0,
143
- label: "0%"
143
+ label: '0%'
144
144
  }, {
145
145
  value: 1,
146
- label: "100%"
146
+ label: '100%'
147
147
  }]
148
148
  })
149
149
  })]
@@ -170,7 +170,7 @@ export function PseudospatialToolbar(_ref2) {
170
170
  opacity: settings.pseudospatial.refImg.opacity,
171
171
  setOpacity: opacity => {
172
172
  dispatch({
173
- type: "set.pseudospatial.refImg.opacity",
173
+ type: 'set.pseudospatial.refImg.opacity',
174
174
  opacity: opacity
175
175
  });
176
176
  }