@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,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, { useContext, useEffect, useMemo, useState } from "react";
2
7
  import { faChevronDown, faChevronRight } from "@fortawesome/free-solid-svg-icons";
3
8
  import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
@@ -29,7 +34,7 @@ const ObsAccordionToggle = _ref => {
29
34
  handleAccordionToggle(eventKey, isCurrentEventKey);
30
35
  });
31
36
  return /*#__PURE__*/React.createElement("div", {
32
- className: `obs-accordion-header ${isCurrentEventKey ? "active" : ""}`,
37
+ className: "obs-accordion-header ".concat(isCurrentEventKey ? "active" : ""),
33
38
  onClick: decoratedOnClick
34
39
  }, /*#__PURE__*/React.createElement("span", {
35
40
  className: "obs-accordion-header-chevron"
@@ -40,6 +45,7 @@ const ObsAccordionToggle = _ref => {
40
45
  }, children));
41
46
  };
42
47
  export function ObsColsList(_ref2) {
48
+ var _settings$selectedObs;
43
49
  let {
44
50
  showColor = true,
45
51
  enableObsGroups = true
@@ -50,20 +56,21 @@ export function ObsColsList(_ref2) {
50
56
  const dispatch = useSettingsDispatch();
51
57
  const [enableGroups, setEnableGroups] = useState(enableObsGroups);
52
58
  const [obsCols, setObsCols] = useState(null);
53
- const [active, setActive] = useState([...[settings.selectedObs?.name]]);
59
+ const [active, setActive] = useState([...[(_settings$selectedObs = settings.selectedObs) === null || _settings$selectedObs === void 0 ? void 0 : _settings$selectedObs.name]]);
54
60
  const [params, setParams] = useState({
55
61
  url: dataset.url
56
62
  });
57
- const obsGroups = useMemo(() => ({
58
- default: _.union(DEFAULT_OBS_GROUP, dataset.obsGroups?.default),
59
- ..._.omit(dataset.obsGroups, "default")
60
- }), [dataset.obsGroups]);
63
+ const obsGroups = useMemo(() => {
64
+ var _dataset$obsGroups;
65
+ return _objectSpread({
66
+ default: _.union(DEFAULT_OBS_GROUP, (_dataset$obsGroups = dataset.obsGroups) === null || _dataset$obsGroups === void 0 ? void 0 : _dataset$obsGroups.default)
67
+ }, _.omit(dataset.obsGroups, "default"));
68
+ }, [dataset.obsGroups]);
61
69
  useEffect(() => {
62
70
  setParams(p => {
63
- return {
64
- ...p,
71
+ return _objectSpread(_objectSpread({}, p), {}, {
65
72
  url: dataset.url
66
- };
73
+ });
67
74
  });
68
75
  }, [dataset.url]);
69
76
  const {
@@ -84,7 +91,7 @@ export function ObsColsList(_ref2) {
84
91
  });
85
92
  if (!!filteredData.length && !groupFiltered.length) {
86
93
  setEnableGroups(false);
87
- console.warn(`No obs found in obsGroups ${JSON.stringify(obsGroups)}, disabling obsGroups`);
94
+ console.warn("No obs found in obsGroups ".concat(JSON.stringify(obsGroups), ", disabling obsGroups"));
88
95
  } else {
89
96
  filteredData = groupFiltered;
90
97
  }
@@ -95,17 +102,17 @@ export function ObsColsList(_ref2) {
95
102
  return d.type !== OBS_TYPES.DISCRETE;
96
103
  });
97
104
  setObsCols(_.keyBy(_.map(filteredData, d => {
98
- return {
99
- ...d,
105
+ return _objectSpread(_objectSpread({}, d), {}, {
100
106
  codesMap: _.invert(d.codes),
101
107
  omit: []
102
- };
108
+ });
103
109
  }), "name"));
104
110
  }
105
111
  }, [fetchedData, isPending, obsGroups, serverError, enableGroups]);
106
112
  useEffect(() => {
107
113
  if (obsCols) {
108
- if (!obsCols[settings.selectedObs?.name]) {
114
+ var _settings$selectedObs2;
115
+ if (!obsCols[(_settings$selectedObs2 = settings.selectedObs) === null || _settings$selectedObs2 === void 0 ? void 0 : _settings$selectedObs2.name]) {
109
116
  setActive([]);
110
117
  dispatch({
111
118
  type: "select.obs",
@@ -122,23 +129,21 @@ export function ObsColsList(_ref2) {
122
129
  }
123
130
  };
124
131
  const toggleAll = item => {
132
+ var _settings$selectedObs3;
125
133
  const omit = item.omit.length ? [] : _.map(item.values, v => item.codes[v]);
126
134
  setObsCols(o => {
127
- return {
128
- ...o,
129
- [item.name]: {
130
- ...item,
135
+ return _objectSpread(_objectSpread({}, o), {}, {
136
+ [item.name]: _objectSpread(_objectSpread({}, item), {}, {
131
137
  omit: omit
132
- }
133
- };
138
+ })
139
+ });
134
140
  });
135
- if (settings.selectedObs?.name === item.name) {
141
+ if (((_settings$selectedObs3 = settings.selectedObs) === null || _settings$selectedObs3 === void 0 ? void 0 : _settings$selectedObs3.name) === item.name) {
136
142
  dispatch({
137
143
  type: "select.obs",
138
- obs: {
139
- ...item,
144
+ obs: _objectSpread(_objectSpread({}, item), {}, {
140
145
  omit: omit
141
- }
146
+ })
142
147
  });
143
148
  }
144
149
  };
@@ -177,6 +182,7 @@ export function ObsColsList(_ref2) {
177
182
  });
178
183
  };
179
184
  const toggleObs = (item, value) => {
185
+ var _settings$selectedObs4;
180
186
  let omit;
181
187
  if (_.includes(item.omit, item.codes[value])) {
182
188
  omit = item.omit.filter(i => i !== item.codes[value]);
@@ -184,25 +190,23 @@ export function ObsColsList(_ref2) {
184
190
  omit = [...item.omit, item.codes[value]];
185
191
  }
186
192
  setObsCols(o => {
187
- return {
188
- ...o,
189
- [item.name]: {
190
- ...item,
193
+ return _objectSpread(_objectSpread({}, o), {}, {
194
+ [item.name]: _objectSpread(_objectSpread({}, item), {}, {
191
195
  omit: omit
192
- }
193
- };
196
+ })
197
+ });
194
198
  });
195
- if (settings.selectedObs?.name === item.name) {
199
+ if (((_settings$selectedObs4 = settings.selectedObs) === null || _settings$selectedObs4 === void 0 ? void 0 : _settings$selectedObs4.name) === item.name) {
196
200
  dispatch({
197
201
  type: "select.obs",
198
- obs: {
199
- ...item,
202
+ obs: _objectSpread(_objectSpread({}, item), {}, {
200
203
  omit: omit
201
- }
204
+ })
202
205
  });
203
206
  }
204
207
  };
205
208
  const obsItem = item => {
209
+ var _settings$selectedObs5, _settings$selectedObs6;
206
210
  if (!item) {
207
211
  return null;
208
212
  }
@@ -210,8 +214,8 @@ export function ObsColsList(_ref2) {
210
214
  return null;
211
215
  }
212
216
  const inLabelObs = _.some(settings.labelObs, i => i.name === item.name);
213
- const inSliceObs = settings.sliceBy.obs && settings.selectedObs?.name === item.name;
214
- const isColorEncoding = settings.colorEncoding === COLOR_ENCODINGS.OBS && settings.selectedObs?.name === item.name;
217
+ const inSliceObs = settings.sliceBy.obs && ((_settings$selectedObs5 = settings.selectedObs) === null || _settings$selectedObs5 === void 0 ? void 0 : _settings$selectedObs5.name) === item.name;
218
+ const isColorEncoding = settings.colorEncoding === COLOR_ENCODINGS.OBS && ((_settings$selectedObs6 = settings.selectedObs) === null || _settings$selectedObs6 === void 0 ? void 0 : _settings$selectedObs6.name) === item.name;
215
219
  return /*#__PURE__*/React.createElement("div", {
216
220
  className: "accordion-item",
217
221
  key: item.name
@@ -219,21 +223,21 @@ export function ObsColsList(_ref2) {
219
223
  eventKey: item.name,
220
224
  handleAccordionToggle: handleAccordionToggle
221
225
  }, /*#__PURE__*/React.createElement("div", null, item.name), /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("span", {
222
- className: `mx-1 cursor-pointer ${inLabelObs ? "active-icon" : "text-muted opacity-50"}`,
226
+ className: "mx-1 cursor-pointer ".concat(inLabelObs ? "active-icon" : "text-muted opacity-50"),
223
227
  onClick: event => {
224
228
  event.stopPropagation();
225
229
  toggleLabel(item);
226
230
  },
227
231
  title: "Add to tooltip"
228
232
  }, /*#__PURE__*/React.createElement(CommentIcon, null)), /*#__PURE__*/React.createElement("span", {
229
- className: `mx-1 cursor-pointer ${inSliceObs ? "active-icon" : "text-muted opacity-50"}`,
233
+ className: "mx-1 cursor-pointer ".concat(inSliceObs ? "active-icon" : "text-muted opacity-50"),
230
234
  onClick: event => {
231
235
  event.stopPropagation();
232
236
  toggleSlice(item);
233
237
  },
234
238
  title: "Filter applied"
235
239
  }, /*#__PURE__*/React.createElement(JoinInnerIcon, null)), /*#__PURE__*/React.createElement("span", {
236
- className: `mx-1 cursor-pointer ${isColorEncoding ? "active-icon" : "text-muted opacity-50"}`,
240
+ className: "mx-1 cursor-pointer ".concat(isColorEncoding ? "active-icon" : "text-muted opacity-50"),
237
241
  onClick: event => {
238
242
  event.stopPropagation();
239
243
  toggleColor(item);
@@ -263,9 +267,9 @@ export function ObsColsList(_ref2) {
263
267
  })))));
264
268
  };
265
269
  const groupList = _.map(_.keys(obsGroups), group => {
266
- const key = `group-${group}`;
270
+ const key = "group-".concat(group);
267
271
  const groupItems = _.compact(_.map(_.sortBy(obsGroups[group], o => _.lowerCase(o.name)), item => {
268
- return obsItem(obsCols?.[item]);
272
+ return obsItem(obsCols === null || obsCols === void 0 ? void 0 : obsCols[item]);
269
273
  }));
270
274
  if (group === "default") {
271
275
  return groupItems;
@@ -282,7 +286,7 @@ export function ObsColsList(_ref2) {
282
286
  }
283
287
  });
284
288
  const obsList = enableGroups ? /*#__PURE__*/React.createElement(React.Fragment, null, groupList) : _.map(_.sortBy(obsCols, o => _.lowerCase(o.name)), item => obsItem(item));
285
- const defaultActiveGroup = enableGroups ? `group-${_.findKey(obsGroups, g => g.includes(active?.[0]))}` : null;
289
+ const defaultActiveGroup = enableGroups ? "group-".concat(_.findKey(obsGroups, g => g.includes(active === null || active === void 0 ? void 0 : active[0]))) : null;
286
290
  if (!serverError) {
287
291
  return /*#__PURE__*/React.createElement("div", {
288
292
  className: "position-relative h-100"
@@ -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, { useEffect, useState } from "react";
2
7
  import { Button, ButtonGroup, Dropdown, DropdownButton, OverlayTrigger, Tooltip } from "react-bootstrap";
3
8
  import { useDataset } from "../../context/DatasetContext";
@@ -16,10 +21,9 @@ export function ObsmKeysList() {
16
21
  });
17
22
  useEffect(() => {
18
23
  setParams(p => {
19
- return {
20
- ...p,
24
+ return _objectSpread(_objectSpread({}, p), {}, {
21
25
  url: dataset.url
22
- };
26
+ });
23
27
  });
24
28
  }, [dataset.url]);
25
29
  const {
@@ -42,7 +46,7 @@ export function ObsmKeysList() {
42
46
  const obsmList = obsmKeysList.map(item => {
43
47
  return /*#__PURE__*/React.createElement(Dropdown.Item, {
44
48
  key: item,
45
- className: `custom ${active === item && "active"}`,
49
+ className: "custom ".concat(active === item && "active"),
46
50
  onClick: () => {
47
51
  dispatch({
48
52
  type: "select.obsm",
@@ -1,3 +1,7 @@
1
+ const _excluded = ["show", "handleClose"],
2
+ _excluded2 = ["show", "handleClose", "Controls"];
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; }
1
5
  import React from "react";
2
6
  import Offcanvas from "react-bootstrap/Offcanvas";
3
7
  import { SELECTION_MODES } from "../../constants/constants";
@@ -7,10 +11,10 @@ import { SearchBar } from "../search-bar/SearchBar";
7
11
  import { VarNamesList } from "../var-list/VarList";
8
12
  export function OffcanvasObs(_ref) {
9
13
  let {
10
- show,
11
- handleClose,
12
- ...props
13
- } = _ref;
14
+ show,
15
+ handleClose
16
+ } = _ref,
17
+ props = _objectWithoutProperties(_ref, _excluded);
14
18
  return /*#__PURE__*/React.createElement(Offcanvas, {
15
19
  show: show,
16
20
  onHide: handleClose,
@@ -52,11 +56,11 @@ export function OffcanvasVars(_ref3) {
52
56
  }
53
57
  export function OffcanvasControls(_ref4) {
54
58
  let {
55
- show,
56
- handleClose,
57
- Controls,
58
- ...props
59
- } = _ref4;
59
+ show,
60
+ handleClose,
61
+ Controls
62
+ } = _ref4,
63
+ props = _objectWithoutProperties(_ref4, _excluded2);
60
64
  return /*#__PURE__*/React.createElement(Offcanvas, {
61
65
  show: show,
62
66
  onHide: handleClose
@@ -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, useRef, useState } from "react";
2
7
  import { library } from "@fortawesome/fontawesome-svg-core";
3
8
  import { faSliders } from "@fortawesome/free-solid-svg-icons";
@@ -15,6 +20,7 @@ import { LoadingSpinner } from "../../utils/LoadingIndicators";
15
20
  import { useDebouncedFetch } from "../../utils/requests";
16
21
  library.add(faSliders);
17
22
  function usePseudospatialData(plotType) {
23
+ var _settings$selectedVar5, _settings$selectedVar6, _settings$selectedVar7, _settings$selectedVar8;
18
24
  const ENDPOINT = "pseudospatial";
19
25
  const dataset = useDataset();
20
26
  const settings = useSettings();
@@ -35,40 +41,49 @@ function usePseudospatialData(plotType) {
35
41
  }, [dataset.url, settings.pseudospatial.maskSet, settings.pseudospatial.maskValues, dataset.varNamesCol, isSliced, obsIndices]);
36
42
  const getPlotParams = useCallback(() => {
37
43
  if (plotType === PLOT_TYPES.GENE) {
38
- return {
39
- varKey: settings.selectedVar?.isSet ? {
40
- name: settings.selectedVar?.name,
41
- indices: settings.selectedVar?.vars.map(v => v.index)
42
- } : settings.selectedVar?.index,
43
- ...(settings.sliceBy.obs ? {
44
- obsCol: settings.selectedObs,
45
- obsValues: !settings.selectedObs?.omit.length ? null : _.difference(_.values(settings.selectedObs?.codes), settings.selectedObs?.omit).map(c => settings.selectedObs?.codesMap[c])
46
- } : {})
47
- };
44
+ var _settings$selectedVar, _settings$selectedVar2, _settings$selectedVar3, _settings$selectedVar4, _settings$selectedObs, _settings$selectedObs2, _settings$selectedObs3;
45
+ return _objectSpread({
46
+ varKey: (_settings$selectedVar = settings.selectedVar) !== null && _settings$selectedVar !== void 0 && _settings$selectedVar.isSet ? {
47
+ name: (_settings$selectedVar2 = settings.selectedVar) === null || _settings$selectedVar2 === void 0 ? void 0 : _settings$selectedVar2.name,
48
+ indices: (_settings$selectedVar3 = settings.selectedVar) === null || _settings$selectedVar3 === void 0 ? void 0 : _settings$selectedVar3.vars.map(v => v.index)
49
+ } : (_settings$selectedVar4 = settings.selectedVar) === null || _settings$selectedVar4 === void 0 ? void 0 : _settings$selectedVar4.index
50
+ }, settings.sliceBy.obs ? {
51
+ obsCol: settings.selectedObs,
52
+ 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 => {
53
+ var _settings$selectedObs4;
54
+ return (_settings$selectedObs4 = settings.selectedObs) === null || _settings$selectedObs4 === void 0 ? void 0 : _settings$selectedObs4.codesMap[c];
55
+ })
56
+ } : {});
48
57
  } else if (plotType === PLOT_TYPES.CATEGORICAL) {
58
+ var _settings$selectedObs5, _settings$selectedObs6, _settings$selectedObs7;
49
59
  return {
50
60
  obsCol: settings.selectedObs,
51
- obsValues: !settings.selectedObs?.omit.length ? null : _.difference(_.values(settings.selectedObs?.codes), settings.selectedObs?.omit).map(c => settings.selectedObs?.codesMap[c]),
61
+ 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 => {
62
+ var _settings$selectedObs8;
63
+ return (_settings$selectedObs8 = settings.selectedObs) === null || _settings$selectedObs8 === void 0 ? void 0 : _settings$selectedObs8.codesMap[c];
64
+ }),
52
65
  mode: settings.pseudospatial.categoricalMode
53
66
  };
54
67
  } else if (plotType === "continuous") {
68
+ var _settings$selectedObs9, _settings$selectedObs0, _settings$selectedObs1;
55
69
  return {
56
70
  obsCol: settings.selectedObs,
57
- obsValues: !settings.selectedObs?.omit.length ? null : _.difference(_.values(settings.selectedObs?.codes), settings.selectedObs?.omit).map(c => settings.selectedObs?.codesMap[c])
71
+ obsValues: !((_settings$selectedObs9 = settings.selectedObs) !== null && _settings$selectedObs9 !== void 0 && _settings$selectedObs9.omit.length) ? null : _.difference(_.values((_settings$selectedObs0 = settings.selectedObs) === null || _settings$selectedObs0 === void 0 ? void 0 : _settings$selectedObs0.codes), (_settings$selectedObs1 = settings.selectedObs) === null || _settings$selectedObs1 === void 0 ? void 0 : _settings$selectedObs1.omit).map(c => {
72
+ var _settings$selectedObs10;
73
+ return (_settings$selectedObs10 = settings.selectedObs) === null || _settings$selectedObs10 === void 0 ? void 0 : _settings$selectedObs10.codesMap[c];
74
+ })
58
75
  };
59
76
  }
60
- }, [settings.pseudospatial.categoricalMode, settings.selectedObs, settings.selectedVar?.index, settings.selectedVar?.isSet, settings.selectedVar?.name, settings.selectedVar?.vars, settings.sliceBy.obs, plotType]);
77
+ }, [settings.pseudospatial.categoricalMode, settings.selectedObs, (_settings$selectedVar5 = settings.selectedVar) === null || _settings$selectedVar5 === void 0 ? void 0 : _settings$selectedVar5.index, (_settings$selectedVar6 = settings.selectedVar) === null || _settings$selectedVar6 === void 0 ? void 0 : _settings$selectedVar6.isSet, (_settings$selectedVar7 = settings.selectedVar) === null || _settings$selectedVar7 === void 0 ? void 0 : _settings$selectedVar7.name, (_settings$selectedVar8 = settings.selectedVar) === null || _settings$selectedVar8 === void 0 ? void 0 : _settings$selectedVar8.vars, settings.sliceBy.obs, plotType]);
61
78
  const params = useMemo(() => {
62
- return {
63
- ...baseParams,
64
- ...getPlotParams()
65
- };
79
+ return _objectSpread(_objectSpread({}, baseParams), getPlotParams());
66
80
  }, [baseParams, getPlotParams]);
67
81
  return useDebouncedFetch(ENDPOINT + "/" + plotType, params, 500, {
68
82
  enabled: !!plotType && !!settings.pseudospatial.maskSet
69
83
  });
70
84
  }
71
85
  export function Pseudospatial(_ref) {
86
+ var _settings$selectedObs14, _layout$coloraxis3, _layout$coloraxis4;
72
87
  let {
73
88
  showLegend = true,
74
89
  sharedScaleRange = false,
@@ -85,21 +100,21 @@ export function Pseudospatial(_ref) {
85
100
  } = useColor();
86
101
  const colorscale = useRef(settings.controls.colorScale);
87
102
  useEffect(() => {
88
- setPlotType(settings.colorEncoding === COLOR_ENCODINGS.VAR ? PLOT_TYPES.GENE : settings.selectedObs?.type === OBS_TYPES.CATEGORICAL || settings.selectedObs?.type === OBS_TYPES.BOOLEAN ? PLOT_TYPES.CATEGORICAL : settings.selectedObs?.type === OBS_TYPES.CONTINUOUS ? PLOT_TYPES.CONTINUOUS : PLOT_TYPES.MASKS);
89
- }, [settings.colorEncoding, settings.selectedObs?.type, setPlotType]);
103
+ var _settings$selectedObs11, _settings$selectedObs12, _settings$selectedObs13;
104
+ setPlotType(settings.colorEncoding === COLOR_ENCODINGS.VAR ? PLOT_TYPES.GENE : ((_settings$selectedObs11 = settings.selectedObs) === null || _settings$selectedObs11 === void 0 ? void 0 : _settings$selectedObs11.type) === OBS_TYPES.CATEGORICAL || ((_settings$selectedObs12 = settings.selectedObs) === null || _settings$selectedObs12 === void 0 ? void 0 : _settings$selectedObs12.type) === OBS_TYPES.BOOLEAN ? PLOT_TYPES.CATEGORICAL : ((_settings$selectedObs13 = settings.selectedObs) === null || _settings$selectedObs13 === void 0 ? void 0 : _settings$selectedObs13.type) === OBS_TYPES.CONTINUOUS ? PLOT_TYPES.CONTINUOUS : PLOT_TYPES.MASKS);
105
+ }, [settings.colorEncoding, (_settings$selectedObs14 = settings.selectedObs) === null || _settings$selectedObs14 === void 0 ? void 0 : _settings$selectedObs14.type, setPlotType]);
90
106
  const updateColorscale = useCallback(colorscale => {
91
107
  setLayout(l => {
92
- return {
93
- ...l,
94
- coloraxis: {
95
- ...l.coloraxis,
108
+ return _objectSpread(_objectSpread({}, l), {}, {
109
+ coloraxis: _objectSpread(_objectSpread({}, l.coloraxis), {}, {
96
110
  colorscale: colorscale
97
- }
98
- };
111
+ })
112
+ });
99
113
  });
100
114
  setData(d => {
101
- const min = layout?.coloraxis?.cmin;
102
- const max = layout?.coloraxis?.cmax;
115
+ var _layout$coloraxis, _layout$coloraxis2;
116
+ const min = layout === null || layout === void 0 || (_layout$coloraxis = layout.coloraxis) === null || _layout$coloraxis === void 0 ? void 0 : _layout$coloraxis.cmin;
117
+ const max = layout === null || layout === void 0 || (_layout$coloraxis2 = layout.coloraxis) === null || _layout$coloraxis2 === void 0 ? void 0 : _layout$coloraxis2.cmax;
103
118
  return _.map(d, trace => {
104
119
  const v = trace.meta.value;
105
120
  if (v === null) {
@@ -108,17 +123,15 @@ export function Pseudospatial(_ref) {
108
123
  const color = rgbToHex(getColor({
109
124
  value: (v - min) / (max - min)
110
125
  }));
111
- return {
112
- ...trace,
126
+ return _objectSpread(_objectSpread({}, trace), {}, {
113
127
  fillcolor: color,
114
- line: {
115
- ...trace.line,
128
+ line: _objectSpread(_objectSpread({}, trace.line), {}, {
116
129
  color: color
117
- }
118
- };
130
+ })
131
+ });
119
132
  });
120
133
  });
121
- }, [getColor, layout?.coloraxis?.cmax, layout?.coloraxis?.cmin]);
134
+ }, [getColor, layout === null || layout === void 0 || (_layout$coloraxis3 = layout.coloraxis) === null || _layout$coloraxis3 === void 0 ? void 0 : _layout$coloraxis3.cmax, layout === null || layout === void 0 || (_layout$coloraxis4 = layout.coloraxis) === null || _layout$coloraxis4 === void 0 ? void 0 : _layout$coloraxis4.cmin]);
122
135
  const {
123
136
  fetchedData,
124
137
  isPending,
@@ -153,40 +166,36 @@ export function Pseudospatial(_ref) {
153
166
  const color = rgbToHex(getColor({
154
167
  value: (v - min) / (max - min)
155
168
  }));
156
- return {
157
- ...trace,
169
+ return _objectSpread(_objectSpread({}, trace), {}, {
158
170
  fillcolor: color,
159
- line: {
160
- ...trace.line,
171
+ line: _objectSpread(_objectSpread({}, trace.line), {}, {
161
172
  color: color
162
- }
163
- };
173
+ })
174
+ });
164
175
  });
165
176
  });
166
177
  setLayout(l => {
167
- return {
168
- ...l,
169
- coloraxis: {
170
- ...l.coloraxis,
178
+ return _objectSpread(_objectSpread({}, l), {}, {
179
+ coloraxis: _objectSpread(_objectSpread({}, l.coloraxis), {}, {
171
180
  cmin: min,
172
181
  cmax: max
173
- }
174
- };
182
+ })
183
+ });
175
184
  });
176
185
  }
177
186
  }, [settings.controls.range, settings.controls.valueMax, settings.controls.valueMin, settings.controls.valueRange, getColor, sharedScaleRange]);
178
187
  const hasSelections = !!plotType && !!settings.pseudospatial.maskSet;
179
188
  const faSlidersPath = faSliders.icon[4];
180
189
  if (!serverError) {
190
+ var _layout$coloraxis5, _layout$coloraxis6;
181
191
  return /*#__PURE__*/React.createElement("div", {
182
192
  className: "cherita-pseudospatial"
183
193
  }, /*#__PURE__*/React.createElement(React.Fragment, null, hasSelections && isPending && /*#__PURE__*/React.createElement(LoadingSpinner, null), hasSelections && /*#__PURE__*/React.createElement(Plot, {
184
194
  data: data,
185
- layout: {
186
- ...layout,
195
+ layout: _objectSpread(_objectSpread({}, layout), {}, {
187
196
  autosize: true,
188
197
  height: height
189
- },
198
+ }),
190
199
  useResizeHandler: true,
191
200
  className: "cherita-pseudospatial-plot",
192
201
  config: {
@@ -205,8 +214,8 @@ export function Pseudospatial(_ref) {
205
214
  }]
206
215
  }
207
216
  }), hasSelections && showLegend && /*#__PURE__*/React.createElement(Legend, {
208
- min: layout?.coloraxis?.cmin,
209
- max: layout?.coloraxis?.cmax,
217
+ min: layout === null || layout === void 0 || (_layout$coloraxis5 = layout.coloraxis) === null || _layout$coloraxis5 === void 0 ? void 0 : _layout$coloraxis5.cmin,
218
+ max: layout === null || layout === void 0 || (_layout$coloraxis6 = layout.coloraxis) === null || _layout$coloraxis6 === void 0 ? void 0 : _layout$coloraxis6.cmax,
210
219
  addText: plotType === PLOT_TYPES.GENE ? " - Mean expression" : plotType === PLOT_TYPES.CATEGORICAL ? " - %" : plotType === PLOT_TYPES.CONTINUOUS ? " - Mean value" : ""
211
220
  })));
212
221
  } else {
@@ -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, { useEffect, useState } from "react";
2
7
  import _ from "lodash";
3
8
  import { ButtonGroup, Dropdown, Form } from "react-bootstrap";
@@ -26,6 +31,7 @@ function CategoricalMode() {
26
31
  }, _.capitalize(mode.name)), /*#__PURE__*/React.createElement(Dropdown.Menu, null, modeList));
27
32
  }
28
33
  function MaskSet() {
34
+ var _settings$pseudospati5, _settings$pseudospati6, _maskSets$settings$ps2, _settings$pseudospati7, _settings$pseudospati8, _maskSets$settings$ps3, _settings$pseudospati9;
29
35
  const ENDPOINT = "masks";
30
36
  const dataset = useDataset();
31
37
  const settings = useSettings();
@@ -36,10 +42,9 @@ function MaskSet() {
36
42
  });
37
43
  useEffect(() => {
38
44
  setParams(p => {
39
- return {
40
- ...p,
45
+ return _objectSpread(_objectSpread({}, p), {}, {
41
46
  url: dataset.url
42
- };
47
+ });
43
48
  });
44
49
  }, [dataset.url]);
45
50
  const {
@@ -65,9 +70,10 @@ function MaskSet() {
65
70
  }
66
71
  }, _.capitalize(key)));
67
72
  const handleMaskChange = mask => {
68
- let newMasks = settings.pseudospatial.maskValues || maskSets?.[settings.pseudospatial?.maskSet];
73
+ var _settings$pseudospati, _settings$pseudospati2;
74
+ let newMasks = settings.pseudospatial.maskValues || (maskSets === null || maskSets === void 0 ? void 0 : maskSets[(_settings$pseudospati = settings.pseudospatial) === null || _settings$pseudospati === void 0 ? void 0 : _settings$pseudospati.maskSet]);
69
75
  newMasks = newMasks.includes(mask) ? newMasks.filter(m => m !== mask) : [...newMasks, mask];
70
- if (!_.difference(maskSets?.[settings.pseudospatial?.maskSet], newMasks).length) {
76
+ if (!_.difference(maskSets === null || maskSets === void 0 ? void 0 : maskSets[(_settings$pseudospati2 = settings.pseudospatial) === null || _settings$pseudospati2 === void 0 ? void 0 : _settings$pseudospati2.maskSet], newMasks).length) {
71
77
  newMasks = null;
72
78
  }
73
79
  dispatch({
@@ -76,7 +82,8 @@ function MaskSet() {
76
82
  });
77
83
  };
78
84
  const toggleMasks = () => {
79
- if (!settings.pseudospatial.maskValues || settings.pseudospatial.maskValues?.length === maskSets?.[settings.pseudospatial?.maskSet]?.length) {
85
+ var _settings$pseudospati3, _maskSets$settings$ps, _settings$pseudospati4;
86
+ 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)) {
80
87
  dispatch({
81
88
  type: "set.pseudospatial.maskValues",
82
89
  maskValues: []
@@ -88,7 +95,7 @@ function MaskSet() {
88
95
  });
89
96
  }
90
97
  };
91
- const masksList = _.map(maskSets?.[settings.pseudospatial?.maskSet], mask => /*#__PURE__*/React.createElement(Dropdown.ItemText, {
98
+ const masksList = _.map(maskSets === null || maskSets === void 0 ? void 0 : maskSets[(_settings$pseudospati5 = settings.pseudospatial) === null || _settings$pseudospati5 === void 0 ? void 0 : _settings$pseudospati5.maskSet], mask => /*#__PURE__*/React.createElement(Dropdown.ItemText, {
92
99
  key: mask
93
100
  }, /*#__PURE__*/React.createElement(Form.Check, {
94
101
  type: "checkbox",
@@ -96,8 +103,8 @@ function MaskSet() {
96
103
  checked: !settings.pseudospatial.maskValues || settings.pseudospatial.maskValues.includes(mask),
97
104
  onChange: () => handleMaskChange(mask)
98
105
  })));
99
- const nMasks = settings.pseudospatial.maskValues ? settings.pseudospatial.maskValues?.length : maskSets?.[settings.pseudospatial?.maskSet]?.length || "No";
100
- const toggleAllChecked = !settings.pseudospatial.maskValues || settings.pseudospatial.maskValues?.length === maskSets?.[settings.pseudospatial?.maskSet]?.length;
106
+ 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";
107
+ 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);
101
108
  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Dropdown, null, /*#__PURE__*/React.createElement(Dropdown.Toggle, {
102
109
  variant: "light"
103
110
  }, _.capitalize(settings.pseudospatial.maskSet || "Select a mask set")), /*#__PURE__*/React.createElement(Dropdown.Menu, null, /*#__PURE__*/React.createElement(Dropdown.Header, null, "Mask set"), maskSetList)), /*#__PURE__*/React.createElement(Dropdown, null, /*#__PURE__*/React.createElement(Dropdown.Toggle, {