@haniffalab/cherita-react 1.4.1-dev.2025-10-23.3179e534 → 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 +15 -28
  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 +14 -24
  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 +15 -26
  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 +17 -41
  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 +14 -10
  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 +28 -41
  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 +27 -37
  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 +28 -39
  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 +33 -57
  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 +17 -13
  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
@@ -48,13 +48,13 @@ function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e =
48
48
  // return { ...data, bins: bins };
49
49
  // }
50
50
  function getContinuousLabel(code, binEdges) {
51
- return "[ ".concat((0, _string.formatNumerical)(binEdges[code][0]), ", ").concat((0, _string.formatNumerical)(binEdges[code][1], _string.FORMATS.EXPONENTIAL)).concat(code === binEdges.length - 1 ? " ]" : " )");
51
+ return "[ ".concat((0, _string.formatNumerical)(binEdges[code][0]), ", ").concat((0, _string.formatNumerical)(binEdges[code][1], _string.FORMATS.EXPONENTIAL)).concat(code === binEdges.length - 1 ? ' ]' : ' )');
52
52
  }
53
53
  const useObsHistogram = (obs, _ref) => {
54
54
  let {
55
55
  enabled = true
56
56
  } = _ref;
57
- const ENDPOINT = "obs/histograms";
57
+ const ENDPOINT = 'obs/histograms';
58
58
  const dataset = (0, _DatasetContext.useDataset)();
59
59
  const settings = (0, _SettingsContext.useSettings)();
60
60
  const {
@@ -64,7 +64,7 @@ const useObsHistogram = (obs, _ref) => {
64
64
  const selectedVar = (0, _Resolver.useSelectedVar)();
65
65
  const [params, setParams] = (0, _react.useState)({
66
66
  url: dataset.url,
67
- obsCol: _lodash.default.omit(obs, "omit"),
67
+ obsCol: _lodash.default.omit(obs, 'omit'),
68
68
  // avoid re-rendering when toggling unselected obs
69
69
  varKey: selectedVar !== null && selectedVar !== void 0 && selectedVar.isSet ? {
70
70
  name: selectedVar === null || selectedVar === void 0 ? void 0 : selectedVar.name,
@@ -75,7 +75,7 @@ const useObsHistogram = (obs, _ref) => {
75
75
  (0, _react.useEffect)(() => {
76
76
  setParams(p => {
77
77
  return _objectSpread(_objectSpread({}, p), {}, {
78
- obsCol: _lodash.default.omit(obs, "omit"),
78
+ obsCol: _lodash.default.omit(obs, 'omit'),
79
79
  varKey: selectedVar !== null && selectedVar !== void 0 && selectedVar.isSet ? {
80
80
  name: selectedVar === null || selectedVar === void 0 ? void 0 : selectedVar.name,
81
81
  indices: selectedVar === null || selectedVar === void 0 ? void 0 : selectedVar.vars.map(v => v.index)
@@ -193,7 +193,7 @@ function CategoricalItem(_ref2) {
193
193
  className: "pl-1 m-0",
194
194
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_material.Tooltip, {
195
195
  title: isSliced ? /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
196
- children: ["Filtered:", " ", (0, _string.formatNumerical)(filteredStats.pct, _string.FORMATS.EXPONENTIAL), "%", /*#__PURE__*/(0, _jsxRuntime.jsx)("br", {}), "Total: ", (0, _string.formatNumerical)(stats.pct, _string.FORMATS.EXPONENTIAL), "%"]
196
+ children: ["Filtered:", ' ', (0, _string.formatNumerical)(filteredStats.pct, _string.FORMATS.EXPONENTIAL), "%", /*#__PURE__*/(0, _jsxRuntime.jsx)("br", {}), "Total: ", (0, _string.formatNumerical)(stats.pct, _string.FORMATS.EXPONENTIAL), "%"]
197
197
  }) : "".concat((0, _string.formatNumerical)(stats.pct, _string.FORMATS.EXPONENTIAL), "%"),
198
198
  placement: "left",
199
199
  arrow: true,
@@ -201,8 +201,8 @@ function CategoricalItem(_ref2) {
201
201
  className: "d-flex align-items-center",
202
202
  children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactBootstrap.Badge, {
203
203
  className: "value-count-badge",
204
- children: [" ", isSliced && parseInt(filteredStats.value_counts) !== parseInt(stats.value_counts) && /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
205
- children: [(0, _string.formatNumerical)(parseInt(filteredStats.value_counts)), " ", "out of", " "]
204
+ children: [' ', isSliced && parseInt(filteredStats.value_counts) !== parseInt(stats.value_counts) && /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
205
+ children: [(0, _string.formatNumerical)(parseInt(filteredStats.value_counts)), ' ', "out of", ' ']
206
206
  }), (0, _string.formatNumerical)(parseInt(stats.value_counts), _string.FORMATS.EXPONENTIAL)]
207
207
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
208
208
  className: "value-pct-gauge-container",
@@ -211,8 +211,8 @@ function CategoricalItem(_ref2) {
211
211
  className: "pct-gauge filtered-pct-gauge",
212
212
  value: filteredStats.pct,
213
213
  text: null,
214
- innerRadius: "50%",
215
- outerRadius: "75%",
214
+ innerRadius: '50%',
215
+ outerRadius: '75%',
216
216
  margin: {
217
217
  top: 0,
218
218
  right: 0,
@@ -223,7 +223,7 @@ function CategoricalItem(_ref2) {
223
223
  className: "pct-gauge",
224
224
  value: stats.pct,
225
225
  text: null,
226
- innerRadius: "75%",
226
+ innerRadius: '75%',
227
227
  margin: {
228
228
  top: 0,
229
229
  right: 0,
@@ -234,7 +234,7 @@ function CategoricalItem(_ref2) {
234
234
  }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_xCharts.Gauge, {
235
235
  value: stats.pct,
236
236
  text: null,
237
- innerRadius: "50%",
237
+ innerRadius: '50%',
238
238
  margin: {
239
239
  top: 0,
240
240
  right: 0,
@@ -265,7 +265,7 @@ function CategoricalItem(_ref2) {
265
265
  grayParams: {
266
266
  alpha: 1
267
267
  },
268
- colorEncoding: "obs"
268
+ colorEncoding: 'obs'
269
269
  }, useUnsColors ? {
270
270
  colorscale: colors
271
271
  } : {})), ")")
@@ -355,7 +355,7 @@ function ObsContinuousStats(_ref4) {
355
355
  let {
356
356
  obs
357
357
  } = _ref4;
358
- const ENDPOINT = "obs/distribution";
358
+ const ENDPOINT = 'obs/distribution';
359
359
  const dataset = (0, _DatasetContext.useDataset)();
360
360
  const params = {
361
361
  url: dataset.url,
@@ -399,7 +399,7 @@ function ObsContinuousStats(_ref4) {
399
399
  valueFormatter: v => "".concat((0, _string.formatNumerical)(v, _string.FORMATS.EXPONENTIAL)),
400
400
  slotProps: {
401
401
  popper: {
402
- className: "feature-histogram-tooltip"
402
+ className: 'feature-histogram-tooltip'
403
403
  }
404
404
  }
405
405
  })
@@ -410,28 +410,28 @@ function ObsContinuousStats(_ref4) {
410
410
  className: "d-flex justify-content-between",
411
411
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
412
412
  children: "Min"
413
- }), " ", /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
413
+ }), ' ', /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
414
414
  children: (0, _string.formatNumerical)(obs.min, _string.FORMATS.EXPONENTIAL)
415
415
  })]
416
416
  }), /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
417
417
  className: "d-flex justify-content-between",
418
418
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
419
419
  children: "Max"
420
- }), " ", /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
420
+ }), ' ', /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
421
421
  children: (0, _string.formatNumerical)(obs.max, _string.FORMATS.EXPONENTIAL)
422
422
  })]
423
423
  }), /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
424
424
  className: "d-flex justify-content-between",
425
425
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
426
426
  children: "Mean"
427
- }), " ", /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
427
+ }), ' ', /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
428
428
  children: (0, _string.formatNumerical)(obs.mean, _string.FORMATS.EXPONENTIAL)
429
429
  })]
430
430
  }), /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
431
431
  className: "d-flex justify-content-between",
432
432
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
433
433
  children: "Median"
434
- }), " ", /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
434
+ }), ' ', /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
435
435
  children: (0, _string.formatNumerical)(obs.median, _string.FORMATS.EXPONENTIAL)
436
436
  })]
437
437
  })]
@@ -461,7 +461,7 @@ function ContinuousObs(_ref5) {
461
461
  const filteredObsData = useFilteredObsData(obs);
462
462
  const enabledHistograms = (0, _react.useMemo)(() => showHistograms && settings.colorEncoding === _constants.COLOR_ENCODINGS.VAR, [settings.colorEncoding, showHistograms]);
463
463
  const getLabel = (0, _react.useCallback)(index => {
464
- return isNaN(obs.values[index]) ? "NaN" : getContinuousLabel(obs.codes[obs.values[index]], obs.bins.binEdges);
464
+ return isNaN(obs.values[index]) ? 'NaN' : getContinuousLabel(obs.codes[obs.values[index]], obs.bins.binEdges);
465
465
  }, [obs.bins.binEdges, obs.codes, obs.values]);
466
466
  const getDataAtIndex = (0, _react.useCallback)(index => {
467
467
  var _obsHistograms$fetche2;
@@ -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
  };