@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
@@ -42,7 +42,7 @@ const ObsAccordionToggle = _ref => {
42
42
  handleAccordionToggle(eventKey, isCurrentEventKey);
43
43
  });
44
44
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
45
- className: "obs-accordion-header ".concat(isCurrentEventKey ? "active" : ""),
45
+ className: "obs-accordion-header ".concat(isCurrentEventKey ? 'active' : ''),
46
46
  onClick: decoratedOnClick,
47
47
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
48
48
  className: "obs-accordion-header-chevron",
@@ -63,7 +63,7 @@ function ObsColsList(_ref2) {
63
63
  showSelectedAsActive = false,
64
64
  showHistograms = true
65
65
  } = _ref2;
66
- const ENDPOINT = "obs/cols";
66
+ const ENDPOINT = 'obs/cols';
67
67
  const dataset = (0, _DatasetContext.useDataset)();
68
68
  const settings = (0, _SettingsContext.useSettings)();
69
69
  const dispatch = (0, _SettingsContext.useSettingsDispatch)();
@@ -74,7 +74,7 @@ function ObsColsList(_ref2) {
74
74
  var _dataset$obsGroups;
75
75
  return _objectSpread({
76
76
  default: _lodash.default.union(_constants.DEFAULT_OBS_GROUP, (_dataset$obsGroups = dataset.obsGroups) === null || _dataset$obsGroups === void 0 ? void 0 : _dataset$obsGroups.default)
77
- }, _lodash.default.omit(dataset.obsGroups, "default"));
77
+ }, _lodash.default.omit(dataset.obsGroups, 'default'));
78
78
  }, [dataset.obsGroups]);
79
79
  const [params, setParams] = (0, _react.useState)(_objectSpread({
80
80
  url: dataset.url
@@ -128,7 +128,7 @@ function ObsColsList(_ref2) {
128
128
  return _objectSpread(_objectSpread({}, d), {}, {
129
129
  omit: []
130
130
  });
131
- }), "name"));
131
+ }), 'name'));
132
132
  }
133
133
  }, [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]);
134
134
  (0, _react.useEffect)(() => {
@@ -137,7 +137,7 @@ function ObsColsList(_ref2) {
137
137
  if (!obsCols[(_settings$selectedObs5 = settings.selectedObs) === null || _settings$selectedObs5 === void 0 ? void 0 : _settings$selectedObs5.name]) {
138
138
  setActive([]);
139
139
  dispatch({
140
- type: "select.obs",
140
+ type: 'select.obs',
141
141
  obs: null
142
142
  });
143
143
  }
@@ -162,7 +162,7 @@ function ObsColsList(_ref2) {
162
162
  });
163
163
  if (((_settings$selectedObs6 = settings.selectedObs) === null || _settings$selectedObs6 === void 0 ? void 0 : _settings$selectedObs6.name) === item.name) {
164
164
  dispatch({
165
- type: "select.obs",
165
+ type: 'select.obs',
166
166
  obs: _objectSpread(_objectSpread({}, item), {}, {
167
167
  omit: omit
168
168
  })
@@ -173,29 +173,29 @@ function ObsColsList(_ref2) {
173
173
  const inLabelObs = _lodash.default.includes(settings.labelObs, item.name);
174
174
  if (inLabelObs) {
175
175
  dispatch({
176
- type: "remove.label.obs",
176
+ type: 'remove.label.obs',
177
177
  obsName: item.name
178
178
  });
179
179
  } else {
180
180
  dispatch({
181
- type: "add.label.obs",
181
+ type: 'add.label.obs',
182
182
  obs: item
183
183
  });
184
184
  }
185
185
  };
186
186
  const toggleSlice = item => {
187
187
  dispatch({
188
- type: "toggle.slice.obs",
188
+ type: 'toggle.slice.obs',
189
189
  obs: item
190
190
  });
191
191
  };
192
192
  const toggleColor = item => {
193
193
  dispatch({
194
- type: "select.obs",
194
+ type: 'select.obs',
195
195
  obs: item
196
196
  });
197
197
  dispatch({
198
- type: "set.colorEncoding",
198
+ type: 'set.colorEncoding',
199
199
  value: _constants.COLOR_ENCODINGS.OBS
200
200
  });
201
201
  };
@@ -216,7 +216,7 @@ function ObsColsList(_ref2) {
216
216
  });
217
217
  if (((_settings$selectedObs7 = settings.selectedObs) === null || _settings$selectedObs7 === void 0 ? void 0 : _settings$selectedObs7.name) === item.name) {
218
218
  dispatch({
219
- type: "select.obs",
219
+ type: 'select.obs',
220
220
  obs: _objectSpread(_objectSpread({}, item), {}, {
221
221
  omit: omit
222
222
  })
@@ -245,7 +245,7 @@ function ObsColsList(_ref2) {
245
245
  }), /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
246
246
  className: "accordion-header-toolbar",
247
247
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
248
- className: "mx-1 cursor-pointer ".concat(inLabelObs ? "active-icon" : "text-muted opacity-50"),
248
+ className: "mx-1 cursor-pointer ".concat(inLabelObs ? 'active-icon' : 'text-muted opacity-50'),
249
249
  onClick: event => {
250
250
  event.stopPropagation();
251
251
  toggleLabel(item);
@@ -253,7 +253,7 @@ function ObsColsList(_ref2) {
253
253
  title: "Add to tooltip",
254
254
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Comment.default, {})
255
255
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
256
- className: "mx-1 cursor-pointer ".concat(inSliceObs ? "active-icon" : "text-muted opacity-50"),
256
+ className: "mx-1 cursor-pointer ".concat(inSliceObs ? 'active-icon' : 'text-muted opacity-50'),
257
257
  onClick: event => {
258
258
  event.stopPropagation();
259
259
  toggleSlice(item);
@@ -261,12 +261,12 @@ function ObsColsList(_ref2) {
261
261
  title: "Filter applied",
262
262
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_JoinInner.default, {})
263
263
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
264
- className: "mx-1 cursor-pointer ".concat(isColorEncoding ? "active-icon" : "text-muted opacity-50"),
264
+ className: "mx-1 cursor-pointer ".concat(isColorEncoding ? 'active-icon' : 'text-muted opacity-50'),
265
265
  onClick: event => {
266
266
  event.stopPropagation();
267
267
  toggleColor(item);
268
268
  },
269
- title: showSelectedAsActive ? "Is selected" : "Is color encoding",
269
+ title: showSelectedAsActive ? 'Is selected' : 'Is color encoding',
270
270
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_WaterDrop.default, {})
271
271
  })]
272
272
  })]
@@ -301,7 +301,7 @@ function ObsColsList(_ref2) {
301
301
  const groupItems = _lodash.default.compact(_lodash.default.map(_lodash.default.sortBy(obsGroups[group], o => _lodash.default.lowerCase(o.name)), item => {
302
302
  return obsItem(obsCols === null || obsCols === void 0 ? void 0 : obsCols[item]);
303
303
  }));
304
- if (group === "default") {
304
+ if (group === 'default') {
305
305
  return groupItems;
306
306
  } else {
307
307
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Accordion.default.Item, {
@@ -23,7 +23,7 @@ function ObsmKeysList(_ref) {
23
23
  let {
24
24
  setHasObsm
25
25
  } = _ref;
26
- const ENDPOINT = "obsm/keys";
26
+ const ENDPOINT = 'obsm/keys';
27
27
  const dataset = (0, _DatasetContext.useDataset)();
28
28
  const settings = (0, _SettingsContext.useSettings)();
29
29
  const dispatch = (0, _SettingsContext.useSettingsDispatch)();
@@ -61,7 +61,7 @@ function ObsmKeysList(_ref) {
61
61
  const defaultObsm = _lodash.default.find(fetchedData, item => item.toLowerCase() === k);
62
62
  if (defaultObsm) {
63
63
  dispatch({
64
- type: "select.obsm",
64
+ type: 'select.obsm',
65
65
  obsm: defaultObsm
66
66
  });
67
67
  return false; // break
@@ -73,7 +73,7 @@ function ObsmKeysList(_ref) {
73
73
  // If selected obsm is not in keys list, reset to null
74
74
  if (!_lodash.default.includes(fetchedData || [], settings.selectedObsm)) {
75
75
  dispatch({
76
- type: "select.obsm",
76
+ type: 'select.obsm',
77
77
  obsm: null
78
78
  });
79
79
  } else {
@@ -84,10 +84,10 @@ function ObsmKeysList(_ref) {
84
84
  }, [dispatch, fetchedData, isPending, serverError, setHasObsm, settings.selectedObsm]);
85
85
  const obsmList = obsmKeysList.map(item => {
86
86
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Dropdown.Item, {
87
- className: "custom ".concat(active === item && "active"),
87
+ className: "custom ".concat(active === item && 'active'),
88
88
  onClick: () => {
89
89
  dispatch({
90
- type: "select.obsm",
90
+ type: 'select.obsm',
91
91
  obsm: item
92
92
  });
93
93
  },
@@ -100,8 +100,8 @@ function ObsmKeysList(_ref) {
100
100
  }
101
101
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactBootstrap.DropdownButton, {
102
102
  as: _reactBootstrap.ButtonGroup,
103
- title: settings.selectedObsm || "Select an embedding",
104
- variant: settings.selectedObsm ? "primary" : "warning",
103
+ title: settings.selectedObsm || 'Select an embedding',
104
+ variant: settings.selectedObsm ? 'primary' : 'warning',
105
105
  id: "bg-nested-dropdown",
106
106
  size: "sm",
107
107
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Dropdown.Header, {
@@ -28,7 +28,7 @@ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object
28
28
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
29
29
  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); }
30
30
  function usePseudospatialData(plotType) {
31
- const ENDPOINT = "pseudospatial";
31
+ const ENDPOINT = 'pseudospatial';
32
32
  const dataset = (0, _DatasetContext.useDataset)();
33
33
  const settings = (0, _SettingsContext.useSettings)();
34
34
  const {
@@ -45,7 +45,7 @@ function usePseudospatialData(plotType) {
45
45
  obsIndices: isSliced ? [...(obsIndices || [])] : null,
46
46
  varNamesCol: dataset.varNamesCol,
47
47
  showColorbar: false,
48
- format: "json"
48
+ format: 'json'
49
49
  };
50
50
  }, [dataset.url, settings.pseudospatial.maskSet, settings.pseudospatial.maskValues, dataset.varNamesCol, isSliced, obsIndices]);
51
51
  const getPlotParams = (0, _react.useCallback)(() => {
@@ -65,7 +65,7 @@ function usePseudospatialData(plotType) {
65
65
  obsValues: !(selectedObs !== null && selectedObs !== void 0 && selectedObs.omit.length) ? null : _lodash.default.difference(selectedObs === null || selectedObs === void 0 ? void 0 : selectedObs.values, selectedObs === null || selectedObs === void 0 ? void 0 : selectedObs.omit),
66
66
  mode: settings.pseudospatial.categoricalMode
67
67
  };
68
- } else if (plotType === "continuous") {
68
+ } else if (plotType === 'continuous') {
69
69
  return {
70
70
  obsCol: selectedObs,
71
71
  obsValues: !(selectedObs !== null && selectedObs !== void 0 && selectedObs.omit.length) ? null : _lodash.default.difference(selectedObs === null || selectedObs === void 0 ? void 0 : selectedObs.values, selectedObs === null || selectedObs === void 0 ? void 0 : selectedObs.omit)
@@ -75,7 +75,7 @@ function usePseudospatialData(plotType) {
75
75
  const params = (0, _react.useMemo)(() => {
76
76
  return _objectSpread(_objectSpread({}, baseParams), getPlotParams());
77
77
  }, [baseParams, getPlotParams]);
78
- return (0, _requests.useDebouncedFetch)(ENDPOINT + "/" + plotType, params, 500, {
78
+ return (0, _requests.useDebouncedFetch)(ENDPOINT + '/' + plotType, params, 500, {
79
79
  enabled: !!plotType && !!settings.pseudospatial.maskSet
80
80
  });
81
81
  }
@@ -108,7 +108,7 @@ function Pseudospatial(_ref) {
108
108
  (0, _react.useEffect)(() => {
109
109
  if (_lodash.default.keys(settings.data.pseudospatial).length && !settings.pseudospatial.maskSet) {
110
110
  dispatch({
111
- type: "set.pseudospatial.maskSet",
111
+ type: 'set.pseudospatial.maskSet',
112
112
  maskSet: _lodash.default.keys(settings.data.pseudospatial)[0]
113
113
  });
114
114
  }
@@ -202,17 +202,17 @@ function Pseudospatial(_ref) {
202
202
  if (imageUrl) {
203
203
  return [_objectSpread({
204
204
  source: imageUrl,
205
- xref: "paper",
206
- yref: "paper",
205
+ xref: 'paper',
206
+ yref: 'paper',
207
207
  x: 0.5,
208
208
  y: 0.5,
209
209
  sizex: 1,
210
210
  sizey: 1,
211
- sizing: "contain",
212
- layer: "above",
213
- xanchor: "center",
214
- yanchor: "middle",
215
- name: "Reference Image"
211
+ sizing: 'contain',
212
+ layer: 'above',
213
+ xanchor: 'center',
214
+ yanchor: 'middle',
215
+ name: 'Reference Image'
216
216
  }, settings.pseudospatial.refImg)];
217
217
  }
218
218
  return [];
@@ -221,7 +221,7 @@ function Pseudospatial(_ref) {
221
221
  var _settings$pseudospati;
222
222
  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;
223
223
  return [{
224
- name: "Open plot controls",
224
+ name: 'Open plot controls',
225
225
  icon: {
226
226
  width: 512,
227
227
  height: 512,
@@ -229,14 +229,14 @@ function Pseudospatial(_ref) {
229
229
  },
230
230
  click: () => setShowControls(prev => !prev)
231
231
  }, ...(imageUrl ? [{
232
- name: isRefImgVisible ? "Hide reference image" : "Show reference image",
232
+ name: isRefImgVisible ? 'Hide reference image' : 'Show reference image',
233
233
  icon: {
234
234
  width: 600,
235
235
  height: 512,
236
236
  path: _freeSolidSvgIcons.faEye.icon[4]
237
237
  },
238
238
  click: () => dispatch({
239
- type: "toggle.pseudospatial.refImg.visible"
239
+ type: 'toggle.pseudospatial.refImg.visible'
240
240
  })
241
241
  }] : [])];
242
242
  }, [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]);
@@ -276,7 +276,7 @@ function Pseudospatial(_ref) {
276
276
  }), hasSelections && showLegend && /*#__PURE__*/(0, _jsxRuntime.jsx)(_Legend.Legend, {
277
277
  min: layout === null || layout === void 0 || (_layout$coloraxis5 = layout.coloraxis) === null || _layout$coloraxis5 === void 0 ? void 0 : _layout$coloraxis5.cmin,
278
278
  max: layout === null || layout === void 0 || (_layout$coloraxis6 = layout.coloraxis) === null || _layout$coloraxis6 === void 0 ? void 0 : _layout$coloraxis6.cmax,
279
- addText: plotType === _constants.PSEUDOSPATIAL_PLOT_TYPES.GENE ? " - Mean expression" : plotType === _constants.PSEUDOSPATIAL_PLOT_TYPES.CATEGORICAL ? " - %" : plotType === _constants.PSEUDOSPATIAL_PLOT_TYPES.CONTINUOUS ? " - Mean value" : ""
279
+ addText: plotType === _constants.PSEUDOSPATIAL_PLOT_TYPES.GENE ? ' - Mean expression' : plotType === _constants.PSEUDOSPATIAL_PLOT_TYPES.CATEGORICAL ? ' - %' : plotType === _constants.PSEUDOSPATIAL_PLOT_TYPES.CONTINUOUS ? ' - Mean value' : ''
280
280
  })]
281
281
  })
282
282
  });
@@ -20,7 +20,7 @@ function CategoricalMode() {
20
20
  active: settings.pseudospatial.categoricalMode === m,
21
21
  onClick: () => {
22
22
  dispatch({
23
- type: "set.pseudospatial.categoricalMode",
23
+ type: 'set.pseudospatial.categoricalMode',
24
24
  categoricalMode: m.value
25
25
  });
26
26
  },
@@ -49,7 +49,7 @@ function MaskSet() {
49
49
  active: settings.pseudospatial.maskSet === key,
50
50
  onClick: () => {
51
51
  dispatch({
52
- type: "set.pseudospatial.maskSet",
52
+ type: 'set.pseudospatial.maskSet',
53
53
  maskSet: key
54
54
  });
55
55
  },
@@ -63,7 +63,7 @@ function MaskSet() {
63
63
  newMasks = null;
64
64
  }
65
65
  dispatch({
66
- type: "set.pseudospatial.maskValues",
66
+ type: 'set.pseudospatial.maskValues',
67
67
  maskValues: newMasks
68
68
  });
69
69
  };
@@ -71,12 +71,12 @@ function MaskSet() {
71
71
  var _settings$pseudospati3, _maskSets$settings$ps, _settings$pseudospati4;
72
72
  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)) {
73
73
  dispatch({
74
- type: "set.pseudospatial.maskValues",
74
+ type: 'set.pseudospatial.maskValues',
75
75
  maskValues: []
76
76
  });
77
77
  } else {
78
78
  dispatch({
79
- type: "set.pseudospatial.maskValues",
79
+ type: 'set.pseudospatial.maskValues',
80
80
  maskValues: null
81
81
  });
82
82
  }
@@ -89,13 +89,13 @@ function MaskSet() {
89
89
  onChange: () => handleMaskChange(mask)
90
90
  })
91
91
  }, mask));
92
- 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";
92
+ 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';
93
93
  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);
94
94
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
95
95
  children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactBootstrap.Dropdown, {
96
96
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Dropdown.Toggle, {
97
97
  variant: "light",
98
- children: _lodash.default.capitalize(settings.pseudospatial.maskSet || "Select a mask set")
98
+ children: _lodash.default.capitalize(settings.pseudospatial.maskSet || 'Select a mask set')
99
99
  }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactBootstrap.Dropdown.Menu, {
100
100
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Dropdown.Header, {
101
101
  children: "Mask set"
@@ -147,10 +147,10 @@ function OpacitySlider(_ref) {
147
147
  valueLabelFormat: value => "".concat((value * 100).toFixed(0), "%"),
148
148
  marks: [{
149
149
  value: 0,
150
- label: "0%"
150
+ label: '0%'
151
151
  }, {
152
152
  value: 1,
153
- label: "100%"
153
+ label: '100%'
154
154
  }]
155
155
  })
156
156
  })]
@@ -177,7 +177,7 @@ function PseudospatialToolbar(_ref2) {
177
177
  opacity: settings.pseudospatial.refImg.opacity,
178
178
  setOpacity: opacity => {
179
179
  dispatch({
180
- type: "set.pseudospatial.refImg.opacity",
180
+ type: 'set.pseudospatial.refImg.opacity',
181
181
  opacity: opacity
182
182
  });
183
183
  }
@@ -13,6 +13,8 @@ var _editModes = require("@nebula.gl/edit-modes");
13
13
  var _layers2 = require("@nebula.gl/layers");
14
14
  var _lodash = _interopRequireDefault(require("lodash"));
15
15
  var _reactBootstrap = require("react-bootstrap");
16
+ var _SpatialControls = require("./SpatialControls");
17
+ var _Toolbox = require("./Toolbox");
16
18
  var _constants = require("../../constants/constants");
17
19
  var _DatasetContext = require("../../context/DatasetContext");
18
20
  var _FilterContext = require("../../context/FilterContext");
@@ -26,8 +28,6 @@ var _Resolver = require("../../utils/Resolver");
26
28
  var _string = require("../../utils/string");
27
29
  var _zarrData = require("../../utils/zarrData");
28
30
  var _PlotAlert = require("../full-page/PlotAlert");
29
- var _SpatialControls = require("./SpatialControls");
30
- var _Toolbox = require("./Toolbox");
31
31
  var _jsxRuntime = require("react/jsx-runtime");
32
32
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
33
33
  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; }
@@ -85,7 +85,7 @@ function Scatterplot(_ref) {
85
85
  // EditableGeoJsonLayer
86
86
  const [mode, setMode] = (0, _react.useState)(() => _editModes.ViewMode);
87
87
  const [features, setFeatures] = (0, _react.useState)({
88
- type: "FeatureCollection",
88
+ type: 'FeatureCollection',
89
89
  features: settings.polygons[settings.selectedObsm] || []
90
90
  });
91
91
  const [selectedFeatureIndexes, setSelectedFeatureIndexes] = (0, _react.useState)([]);
@@ -132,7 +132,7 @@ function Scatterplot(_ref) {
132
132
  }
133
133
  if (!obsmData.serverError && obsmData.data) {
134
134
  if (obsmData.data[0].length !== 2) {
135
- setCoordsError("Invalid coordinates. Expected 2D coordinates");
135
+ setCoordsError('Invalid coordinates. Expected 2D coordinates');
136
136
  return {
137
137
  positions: [],
138
138
  values: []
@@ -260,7 +260,7 @@ function Scatterplot(_ref) {
260
260
  }, [sortedObsIndices]);
261
261
  const memoizedLayers = (0, _react.useMemo)(() => {
262
262
  return [new _layers.ScatterplotLayer({
263
- id: "cherita-layer-scatterplot",
263
+ id: 'cherita-layer-scatterplot',
264
264
  pickable: true,
265
265
  data: sortedData.positions,
266
266
  radiusScale: radiusScale,
@@ -273,7 +273,7 @@ function Scatterplot(_ref) {
273
273
  getRadius: getRadius
274
274
  }
275
275
  }), new _layers2.EditableGeoJsonLayer({
276
- id: "cherita-layer-draw",
276
+ id: 'cherita-layer-draw',
277
277
  data: features,
278
278
  mode: mode,
279
279
  selectedFeatureIndexes,
@@ -285,7 +285,7 @@ function Scatterplot(_ref) {
285
285
  } = _ref4;
286
286
  setFeatures(updatedData);
287
287
  let updatedSelectedFeatureIndexes = selectedFeatureIndexes;
288
- if (editType === "addFeature") {
288
+ if (editType === 'addFeature') {
289
289
  const {
290
290
  featureIndexes
291
291
  } = editContext;
@@ -313,13 +313,13 @@ function Scatterplot(_ref) {
313
313
  var _features$features;
314
314
  if (!(features !== null && features !== void 0 && (_features$features = features.features) !== null && _features$features !== void 0 && _features$features.length)) {
315
315
  dispatch({
316
- type: "disable.slice.polygons"
316
+ type: 'disable.slice.polygons'
317
317
  });
318
318
  }
319
319
  }, [dispatch, features === null || features === void 0 || (_features$features2 = features.features) === null || _features$features2 === void 0 ? void 0 : _features$features2.length]);
320
320
  (0, _react.useEffect)(() => {
321
321
  dispatch({
322
- type: "set.polygons",
322
+ type: 'set.polygons',
323
323
  obsm: settings.selectedObsm,
324
324
  polygons: (features === null || features === void 0 ? void 0 : features.features) || []
325
325
  });
@@ -329,7 +329,7 @@ function Scatterplot(_ref) {
329
329
  // don't change selection while editing
330
330
  return;
331
331
  }
332
- setSelectedFeatureIndexes(f => info.object ? info.layer.id === "cherita-layer-draw" ? [info.index] : f : []);
332
+ setSelectedFeatureIndexes(f => info.object ? info.layer.id === 'cherita-layer-draw' ? [info.index] : f : []);
333
333
  }
334
334
  const getLabel = function (o, v) {
335
335
  let isVar = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
@@ -344,7 +344,7 @@ function Scatterplot(_ref) {
344
344
  object,
345
345
  index
346
346
  } = _ref5;
347
- if (!object || (object === null || object === void 0 ? void 0 : object.type) === "Feature") return;
347
+ if (!object || (object === null || object === void 0 ? void 0 : object.type) === 'Feature') return;
348
348
  const text = [];
349
349
  if (settings.colorEncoding === _constants.COLOR_ENCODINGS.OBS && selectedObs && !_lodash.default.includes(settings.labelObs, selectedObs.name)) {
350
350
  var _data$values;
@@ -363,14 +363,14 @@ function Scatterplot(_ref) {
363
363
  if (!text.length) return;
364
364
  const grayOut = sortedObsIndices && !sortedObsIndices.has(index);
365
365
  return {
366
- text: text.length ? _lodash.default.compact(text).join("\n") : null,
367
- className: grayOut ? "tooltip-grayout" : "deck-tooltip",
366
+ text: text.length ? _lodash.default.compact(text).join('\n') : null,
367
+ className: grayOut ? 'tooltip-grayout' : 'deck-tooltip',
368
368
  style: !grayOut ? {
369
- "border-left": "3px solid ".concat((0, _colorHelper.rgbToHex)(getFillColor(null, {
369
+ 'border-left': "3px solid ".concat((0, _colorHelper.rgbToHex)(getFillColor(null, {
370
370
  index
371
371
  })))
372
372
  } : {
373
- "border-left": "none"
373
+ 'border-left': 'none'
374
374
  }
375
375
  };
376
376
  };
@@ -407,7 +407,7 @@ function Scatterplot(_ref) {
407
407
  let {
408
408
  isDragging
409
409
  } = _ref6;
410
- return mode !== _editModes.ViewMode ? "crosshair" : isDragging ? "grabbing" : "grab";
410
+ return mode !== _editModes.ViewMode ? 'crosshair' : isDragging ? 'grabbing' : 'grab';
411
411
  },
412
412
  ref: deckRef
413
413
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_SpatialControls.SpatialControls, {
@@ -39,7 +39,7 @@ const ScatterplotControls = () => {
39
39
  const updateRange = (_e, value) => {
40
40
  setSliderValue(value);
41
41
  dispatch({
42
- type: "set.controls.range",
42
+ type: 'set.controls.range',
43
43
  range: sliderValue
44
44
  });
45
45
  };
@@ -46,19 +46,19 @@ function SpatialControls(_ref) {
46
46
  const showVarsBtn = isFullscreen ? XlBreakpoint : true;
47
47
  const onSelect = (eventKey, event) => {
48
48
  switch (eventKey) {
49
- case "DrawPolygonMode":
49
+ case 'DrawPolygonMode':
50
50
  setMode(() => _editModes.DrawPolygonMode);
51
51
  break;
52
- case "DrawLineStringMode":
52
+ case 'DrawLineStringMode':
53
53
  setMode(() => _editModes.DrawLineStringMode);
54
54
  break;
55
- case "DrawPolygonByDraggingMode":
55
+ case 'DrawPolygonByDraggingMode':
56
56
  setMode(() => _editModes.DrawPolygonByDraggingMode);
57
57
  break;
58
- case "DrawRectangleMode":
58
+ case 'DrawRectangleMode':
59
59
  setMode(() => _editModes.DrawRectangleMode);
60
60
  break;
61
- case "ModifyMode":
61
+ case 'ModifyMode':
62
62
  setMode(() => _editModes.ModifyMode);
63
63
  break;
64
64
  default:
@@ -67,7 +67,7 @@ function SpatialControls(_ref) {
67
67
  };
68
68
  const deleteFeatures = (_eventKey, _event) => {
69
69
  setFeatures({
70
- type: "FeatureCollection",
70
+ type: 'FeatureCollection',
71
71
  features: []
72
72
  });
73
73
  };
@@ -78,7 +78,7 @@ function SpatialControls(_ref) {
78
78
  onClick: () => {
79
79
  setMode(() => _editModes.ViewMode);
80
80
  dispatch({
81
- type: "toggle.slice.polygons"
81
+ type: 'toggle.slice.polygons'
82
82
  });
83
83
  },
84
84
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_iconsMaterial.JoinInner, {})
@@ -87,7 +87,7 @@ function SpatialControls(_ref) {
87
87
  onClick: () => {
88
88
  const newFeatures = features.features.filter((_f, i) => !selectedFeatureIndexes.includes(i));
89
89
  setFeatures({
90
- type: "FeatureCollection",
90
+ type: 'FeatureCollection',
91
91
  features: newFeatures
92
92
  });
93
93
  },
@@ -164,7 +164,7 @@ function SpatialControls(_ref) {
164
164
  onSelect: onSelect,
165
165
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Dropdown.default.Toggle, {
166
166
  id: "dropdown-autoclose-outside",
167
- className: "caret-off ".concat(mode === _editModes.DrawPolygonByDraggingMode || mode === _editModes.ModifyMode ? "active" : ""),
167
+ className: "caret-off ".concat(mode === _editModes.DrawPolygonByDraggingMode || mode === _editModes.ModifyMode ? 'active' : ''),
168
168
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactFontawesome.FontAwesomeIcon, {
169
169
  icon: _freeSolidSvgIcons.faDrawPolygon
170
170
  })
@@ -24,16 +24,16 @@ function Toolbox(_ref) {
24
24
  placement: "top",
25
25
  overlay: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactBootstrap.Tooltip, {
26
26
  id: "tooltip-dropped-mode",
27
- children: ["You have selected ", (0, _string.formatNumerical)(slicedLength), " out of", " ", (0, _string.formatNumerical)(obsLength), " cells"]
27
+ children: ["You have selected ", (0, _string.formatNumerical)(slicedLength), " out of", ' ', (0, _string.formatNumerical)(obsLength), " cells"]
28
28
  }),
29
29
  children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactBootstrap.Button, {
30
30
  size: "sm",
31
31
  variant: "primary",
32
32
  style: {
33
- cursor: "default"
33
+ cursor: 'default'
34
34
  },
35
35
  "aria-disabled": "true",
36
- children: [(0, _string.formatNumerical)(slicedLength), " of ", (0, _string.formatNumerical)(obsLength), " ", "cells"]
36
+ children: [(0, _string.formatNumerical)(slicedLength), " of ", (0, _string.formatNumerical)(obsLength), ' ', "cells"]
37
37
  })
38
38
  }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.OverlayTrigger, {
39
39
  placement: "top",
@@ -45,7 +45,7 @@ function Toolbox(_ref) {
45
45
  size: "sm",
46
46
  variant: "primary",
47
47
  style: {
48
- cursor: "default"
48
+ cursor: 'default'
49
49
  },
50
50
  "aria-disabled": "true",
51
51
  children: [(0, _string.formatNumerical)(obsLength), " cells"]