@haniffalab/cherita-react 1.4.1-dev.2025-10-22.61540191 → 1.4.1-dev.2025-10-23.3179e534

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 (103) hide show
  1. package/dist/cjs/components/controls/Controls.js +38 -30
  2. package/dist/cjs/components/dotplot/Dotplot.js +40 -33
  3. package/dist/cjs/components/dotplot/DotplotControls.js +103 -83
  4. package/dist/cjs/components/full-page/FullPage.js +92 -69
  5. package/dist/cjs/components/full-page/PlotAlert.js +25 -16
  6. package/dist/cjs/components/full-page/PlotTypeSelector.js +43 -36
  7. package/dist/cjs/components/heatmap/Heatmap.js +40 -33
  8. package/dist/cjs/components/heatmap/HeatmapControls.js +6 -3
  9. package/dist/cjs/components/icons/DotPlotIcon.js +16 -10
  10. package/dist/cjs/components/icons/HeatmapIcon.js +17 -11
  11. package/dist/cjs/components/icons/MatrixPlotIcon.1.js +22 -16
  12. package/dist/cjs/components/icons/MatrixPlotIcon.js +22 -16
  13. package/dist/cjs/components/icons/ScatterplotIcon.1.js +21 -15
  14. package/dist/cjs/components/icons/ScatterplotIcon.js +21 -15
  15. package/dist/cjs/components/icons/ViolinPlotIcon.js +22 -14
  16. package/dist/cjs/components/matrixplot/Matrixplot.js +40 -33
  17. package/dist/cjs/components/matrixplot/MatrixplotControls.js +8 -5
  18. package/dist/cjs/components/obs-list/ObsItem.js +238 -190
  19. package/dist/cjs/components/obs-list/ObsList.js +106 -87
  20. package/dist/cjs/components/obs-list/ObsToolbar.js +2 -3
  21. package/dist/cjs/components/obsm-list/ObsmList.js +47 -32
  22. package/dist/cjs/components/offcanvas/index.js +61 -31
  23. package/dist/cjs/components/pseudospatial/Pseudospatial.js +46 -36
  24. package/dist/cjs/components/pseudospatial/PseudospatialToolbar.js +98 -68
  25. package/dist/cjs/components/scatterplot/Scatterplot.js +87 -65
  26. package/dist/cjs/components/scatterplot/ScatterplotControls.js +35 -27
  27. package/dist/cjs/components/scatterplot/SpatialControls.js +134 -107
  28. package/dist/cjs/components/scatterplot/Toolbox.js +41 -30
  29. package/dist/cjs/components/search-bar/SearchBar.js +157 -110
  30. package/dist/cjs/components/search-bar/SearchInfo.js +73 -47
  31. package/dist/cjs/components/search-bar/SearchResults.js +93 -71
  32. package/dist/cjs/components/toolbar/Toolbar.js +43 -34
  33. package/dist/cjs/components/var-list/VarItem.js +106 -79
  34. package/dist/cjs/components/var-list/VarList.js +67 -53
  35. package/dist/cjs/components/var-list/VarListToolbar.js +56 -51
  36. package/dist/cjs/components/var-list/VarSet.js +115 -97
  37. package/dist/cjs/components/violin/Violin.js +77 -58
  38. package/dist/cjs/components/violin/ViolinControls.js +8 -5
  39. package/dist/cjs/context/DatasetContext.js +20 -13
  40. package/dist/cjs/context/FilterContext.js +9 -7
  41. package/dist/cjs/context/SettingsContext.js +11 -9
  42. package/dist/cjs/context/ZarrDataContext.js +6 -5
  43. package/dist/cjs/utils/Histogram.js +35 -33
  44. package/dist/cjs/utils/ImageViewer.js +9 -6
  45. package/dist/cjs/utils/Legend.js +36 -29
  46. package/dist/cjs/utils/LoadingIndicators.js +14 -12
  47. package/dist/cjs/utils/Skeleton.js +10 -10
  48. package/dist/cjs/utils/StyledTooltip.js +7 -2
  49. package/dist/cjs/utils/VirtualizedList.js +32 -25
  50. package/dist/cjs/utils/errors.js +1 -1
  51. package/dist/css/cherita.css +6 -1
  52. package/dist/css/cherita.css.map +1 -1
  53. package/dist/esm/components/controls/Controls.js +38 -30
  54. package/dist/esm/components/dotplot/Dotplot.js +40 -33
  55. package/dist/esm/components/dotplot/DotplotControls.js +103 -82
  56. package/dist/esm/components/full-page/FullPage.js +92 -69
  57. package/dist/esm/components/full-page/PlotAlert.js +25 -16
  58. package/dist/esm/components/full-page/PlotTypeSelector.js +43 -36
  59. package/dist/esm/components/heatmap/Heatmap.js +40 -33
  60. package/dist/esm/components/heatmap/HeatmapControls.js +6 -2
  61. package/dist/esm/components/icons/DotPlotIcon.js +16 -10
  62. package/dist/esm/components/icons/HeatmapIcon.js +17 -11
  63. package/dist/esm/components/icons/MatrixPlotIcon.1.js +22 -16
  64. package/dist/esm/components/icons/MatrixPlotIcon.js +22 -16
  65. package/dist/esm/components/icons/ScatterplotIcon.1.js +21 -15
  66. package/dist/esm/components/icons/ScatterplotIcon.js +21 -15
  67. package/dist/esm/components/icons/ViolinPlotIcon.js +22 -14
  68. package/dist/esm/components/matrixplot/Matrixplot.js +40 -33
  69. package/dist/esm/components/matrixplot/MatrixplotControls.js +8 -4
  70. package/dist/esm/components/obs-list/ObsItem.js +237 -186
  71. package/dist/esm/components/obs-list/ObsList.js +106 -86
  72. package/dist/esm/components/obs-list/ObsToolbar.js +2 -2
  73. package/dist/esm/components/obsm-list/ObsmList.js +47 -31
  74. package/dist/esm/components/offcanvas/index.js +61 -31
  75. package/dist/esm/components/pseudospatial/Pseudospatial.js +46 -36
  76. package/dist/esm/components/pseudospatial/PseudospatialToolbar.js +98 -68
  77. package/dist/esm/components/scatterplot/Scatterplot.js +87 -64
  78. package/dist/esm/components/scatterplot/ScatterplotControls.js +35 -26
  79. package/dist/esm/components/scatterplot/SpatialControls.js +134 -106
  80. package/dist/esm/components/scatterplot/Toolbox.js +41 -29
  81. package/dist/esm/components/search-bar/SearchBar.js +157 -109
  82. package/dist/esm/components/search-bar/SearchInfo.js +73 -46
  83. package/dist/esm/components/search-bar/SearchResults.js +93 -70
  84. package/dist/esm/components/toolbar/Toolbar.js +43 -33
  85. package/dist/esm/components/var-list/VarItem.js +106 -78
  86. package/dist/esm/components/var-list/VarList.js +67 -52
  87. package/dist/esm/components/var-list/VarListToolbar.js +56 -50
  88. package/dist/esm/components/var-list/VarSet.js +115 -96
  89. package/dist/esm/components/violin/Violin.js +77 -58
  90. package/dist/esm/components/violin/ViolinControls.js +8 -4
  91. package/dist/esm/context/DatasetContext.js +20 -12
  92. package/dist/esm/context/FilterContext.js +9 -6
  93. package/dist/esm/context/SettingsContext.js +11 -8
  94. package/dist/esm/context/ZarrDataContext.js +6 -4
  95. package/dist/esm/utils/Histogram.js +35 -33
  96. package/dist/esm/utils/ImageViewer.js +9 -5
  97. package/dist/esm/utils/Legend.js +36 -28
  98. package/dist/esm/utils/LoadingIndicators.js +14 -11
  99. package/dist/esm/utils/Skeleton.js +10 -9
  100. package/dist/esm/utils/StyledTooltip.js +7 -2
  101. package/dist/esm/utils/VirtualizedList.js +32 -24
  102. package/dist/esm/utils/errors.js +1 -1
  103. package/package.json +3 -3
@@ -3,7 +3,7 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
3
3
  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
4
4
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
5
5
  function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
6
- import React, { useContext, useEffect, useMemo, useState } from "react";
6
+ import { useContext, useEffect, useMemo, useState } from "react";
7
7
  import { faChevronDown, faChevronRight } from "@fortawesome/free-solid-svg-icons";
8
8
  import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
9
9
  import CommentIcon from "@mui/icons-material/Comment";
@@ -20,6 +20,7 @@ import { useDataset } from "../../context/DatasetContext";
20
20
  import { useSettings, useSettingsDispatch } from "../../context/SettingsContext";
21
21
  import { LoadingSpinner } from "../../utils/LoadingIndicators";
22
22
  import { useFetch } from "../../utils/requests";
23
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
23
24
  const ObsAccordionToggle = _ref => {
24
25
  let {
25
26
  children,
@@ -33,16 +34,19 @@ const ObsAccordionToggle = _ref => {
33
34
  const decoratedOnClick = useAccordionButton(eventKey, () => {
34
35
  handleAccordionToggle(eventKey, isCurrentEventKey);
35
36
  });
36
- return /*#__PURE__*/React.createElement("div", {
37
+ return /*#__PURE__*/_jsxs("div", {
37
38
  className: "obs-accordion-header ".concat(isCurrentEventKey ? "active" : ""),
38
- onClick: decoratedOnClick
39
- }, /*#__PURE__*/React.createElement("span", {
40
- className: "obs-accordion-header-chevron"
41
- }, /*#__PURE__*/React.createElement(FontAwesomeIcon, {
42
- icon: isCurrentEventKey ? faChevronDown : faChevronRight
43
- })), /*#__PURE__*/React.createElement("span", {
44
- className: "obs-accordion-header-span"
45
- }, children));
39
+ onClick: decoratedOnClick,
40
+ children: [/*#__PURE__*/_jsx("span", {
41
+ className: "obs-accordion-header-chevron",
42
+ children: /*#__PURE__*/_jsx(FontAwesomeIcon, {
43
+ icon: isCurrentEventKey ? faChevronDown : faChevronRight
44
+ })
45
+ }), /*#__PURE__*/_jsx("span", {
46
+ className: "obs-accordion-header-span",
47
+ children: children
48
+ })]
49
+ });
46
50
  };
47
51
  export function ObsColsList(_ref2) {
48
52
  var _settings$selectedObs, _settings$selectedObs3, _settings$selectedObs4;
@@ -223,61 +227,67 @@ export function ObsColsList(_ref2) {
223
227
  const inLabelObs = _.includes(settings.labelObs, item.name);
224
228
  const inSliceObs = settings.sliceBy.obs && ((_settings$selectedObs8 = settings.selectedObs) === null || _settings$selectedObs8 === void 0 ? void 0 : _settings$selectedObs8.name) === item.name;
225
229
  const isColorEncoding = (showSelectedAsActive || settings.colorEncoding === COLOR_ENCODINGS.OBS) && ((_settings$selectedObs9 = settings.selectedObs) === null || _settings$selectedObs9 === void 0 ? void 0 : _settings$selectedObs9.name) === item.name;
226
- return /*#__PURE__*/React.createElement("div", {
230
+ return /*#__PURE__*/_jsxs("div", {
227
231
  className: "accordion-item",
228
- key: item.name
229
- }, /*#__PURE__*/React.createElement(ObsAccordionToggle, {
230
- eventKey: item.name,
231
- handleAccordionToggle: handleAccordionToggle
232
- }, /*#__PURE__*/React.createElement("div", {
233
- className: "accordion-header-title"
234
- }, item.name), /*#__PURE__*/React.createElement("div", {
235
- className: "accordion-header-toolbar"
236
- }, /*#__PURE__*/React.createElement("span", {
237
- className: "mx-1 cursor-pointer ".concat(inLabelObs ? "active-icon" : "text-muted opacity-50"),
238
- onClick: event => {
239
- event.stopPropagation();
240
- toggleLabel(item);
241
- },
242
- title: "Add to tooltip"
243
- }, /*#__PURE__*/React.createElement(CommentIcon, null)), /*#__PURE__*/React.createElement("span", {
244
- className: "mx-1 cursor-pointer ".concat(inSliceObs ? "active-icon" : "text-muted opacity-50"),
245
- onClick: event => {
246
- event.stopPropagation();
247
- toggleSlice(item);
248
- },
249
- title: "Filter applied"
250
- }, /*#__PURE__*/React.createElement(JoinInnerIcon, null)), /*#__PURE__*/React.createElement("span", {
251
- className: "mx-1 cursor-pointer ".concat(isColorEncoding ? "active-icon" : "text-muted opacity-50"),
252
- onClick: event => {
253
- event.stopPropagation();
254
- toggleColor(item);
255
- },
256
- title: showSelectedAsActive ? "Is selected" : "Is color encoding"
257
- }, /*#__PURE__*/React.createElement(WaterDropIcon, null)))), /*#__PURE__*/React.createElement(Accordion.Collapse, {
258
- eventKey: item.name
259
- }, /*#__PURE__*/React.createElement("div", {
260
- className: "obs-accordion-body"
261
- }, active.includes(item.name) && (item.type === OBS_TYPES.CATEGORICAL || item.type === OBS_TYPES.BOOLEAN ? /*#__PURE__*/React.createElement(CategoricalObs, {
262
- key: item.name,
263
- obs: item,
264
- toggleAll: () => toggleAll(item),
265
- toggleObs: value => toggleObs(item, value),
266
- toggleLabel: () => toggleLabel(item),
267
- toggleSlice: () => toggleSlice(item),
268
- toggleColor: () => toggleColor(item),
269
- showColor: showColor && isColorEncoding,
270
- showHistograms: showHistograms
271
- }) : /*#__PURE__*/React.createElement(ContinuousObs, {
272
- key: item.name,
273
- obs: item,
274
- toggleAll: () => toggleAll(item),
275
- toggleObs: value => toggleObs(item, value),
276
- toggleLabel: () => toggleLabel(item),
277
- toggleSlice: () => toggleSlice(item),
278
- toggleColor: () => toggleColor(item),
279
- showHistograms: showHistograms
280
- })))));
232
+ children: [/*#__PURE__*/_jsxs(ObsAccordionToggle, {
233
+ eventKey: item.name,
234
+ handleAccordionToggle: handleAccordionToggle,
235
+ children: [/*#__PURE__*/_jsx("div", {
236
+ className: "accordion-header-title",
237
+ children: item.name
238
+ }), /*#__PURE__*/_jsxs("div", {
239
+ className: "accordion-header-toolbar",
240
+ children: [/*#__PURE__*/_jsx("span", {
241
+ className: "mx-1 cursor-pointer ".concat(inLabelObs ? "active-icon" : "text-muted opacity-50"),
242
+ onClick: event => {
243
+ event.stopPropagation();
244
+ toggleLabel(item);
245
+ },
246
+ title: "Add to tooltip",
247
+ children: /*#__PURE__*/_jsx(CommentIcon, {})
248
+ }), /*#__PURE__*/_jsx("span", {
249
+ className: "mx-1 cursor-pointer ".concat(inSliceObs ? "active-icon" : "text-muted opacity-50"),
250
+ onClick: event => {
251
+ event.stopPropagation();
252
+ toggleSlice(item);
253
+ },
254
+ title: "Filter applied",
255
+ children: /*#__PURE__*/_jsx(JoinInnerIcon, {})
256
+ }), /*#__PURE__*/_jsx("span", {
257
+ className: "mx-1 cursor-pointer ".concat(isColorEncoding ? "active-icon" : "text-muted opacity-50"),
258
+ onClick: event => {
259
+ event.stopPropagation();
260
+ toggleColor(item);
261
+ },
262
+ title: showSelectedAsActive ? "Is selected" : "Is color encoding",
263
+ children: /*#__PURE__*/_jsx(WaterDropIcon, {})
264
+ })]
265
+ })]
266
+ }), /*#__PURE__*/_jsx(Accordion.Collapse, {
267
+ eventKey: item.name,
268
+ children: /*#__PURE__*/_jsx("div", {
269
+ className: "obs-accordion-body",
270
+ children: active.includes(item.name) && (item.type === OBS_TYPES.CATEGORICAL || item.type === OBS_TYPES.BOOLEAN ? /*#__PURE__*/_jsx(CategoricalObs, {
271
+ obs: item,
272
+ toggleAll: () => toggleAll(item),
273
+ toggleObs: value => toggleObs(item, value),
274
+ toggleLabel: () => toggleLabel(item),
275
+ toggleSlice: () => toggleSlice(item),
276
+ toggleColor: () => toggleColor(item),
277
+ showColor: showColor && isColorEncoding,
278
+ showHistograms: showHistograms
279
+ }, item.name) : /*#__PURE__*/_jsx(ContinuousObs, {
280
+ obs: item,
281
+ toggleAll: () => toggleAll(item),
282
+ toggleObs: value => toggleObs(item, value),
283
+ toggleLabel: () => toggleLabel(item),
284
+ toggleSlice: () => toggleSlice(item),
285
+ toggleColor: () => toggleColor(item),
286
+ showHistograms: showHistograms
287
+ }, item.name))
288
+ })
289
+ })]
290
+ }, item.name);
281
291
  };
282
292
  const groupList = _.map(_.keys(obsGroups), group => {
283
293
  const key = "group-".concat(group);
@@ -287,33 +297,43 @@ export function ObsColsList(_ref2) {
287
297
  if (group === "default") {
288
298
  return groupItems;
289
299
  } else {
290
- return /*#__PURE__*/React.createElement(Accordion.Item, {
291
- key: key,
300
+ return /*#__PURE__*/_jsxs(Accordion.Item, {
292
301
  eventKey: key,
293
- className: "obs-group-accordion-item"
294
- }, /*#__PURE__*/React.createElement(Accordion.Header, {
295
- className: "obs-group-accordion-header"
296
- }, group), /*#__PURE__*/React.createElement(Accordion.Body, {
297
- className: "obs-group-accordion-body"
298
- }, groupItems));
302
+ className: "obs-group-accordion-item",
303
+ children: [/*#__PURE__*/_jsx(Accordion.Header, {
304
+ className: "obs-group-accordion-header",
305
+ children: group
306
+ }), /*#__PURE__*/_jsx(Accordion.Body, {
307
+ className: "obs-group-accordion-body",
308
+ children: groupItems
309
+ })]
310
+ }, key);
299
311
  }
300
312
  });
301
- const obsList = enableGroups ? /*#__PURE__*/React.createElement(React.Fragment, null, groupList) : _.map(_.sortBy(obsCols, o => _.lowerCase(o.name)), item => obsItem(item));
313
+ const obsList = enableGroups ? /*#__PURE__*/_jsx(_Fragment, {
314
+ children: groupList
315
+ }) : _.map(_.sortBy(obsCols, o => _.lowerCase(o.name)), item => obsItem(item));
302
316
  const defaultActiveGroup = enableGroups ? "group-".concat(_.findKey(obsGroups, g => g.includes(active === null || active === void 0 ? void 0 : active[0]))) : null;
303
317
  if (!serverError) {
304
- return /*#__PURE__*/React.createElement("div", {
305
- className: "position-relative h-100"
306
- }, isPending ? /*#__PURE__*/React.createElement(LoadingSpinner, null) : !!obsCols && !_.size(obsCols) ? /*#__PURE__*/React.createElement(Alert, {
307
- variant: "danger"
308
- }, "No observations found.") : /*#__PURE__*/React.createElement(Accordion, {
309
- flush: true,
310
- defaultActiveKey: [...active, ...[defaultActiveGroup]],
311
- alwaysOpen: true,
312
- className: "obs-accordion"
313
- }, obsList));
318
+ return /*#__PURE__*/_jsx("div", {
319
+ className: "position-relative h-100",
320
+ children: isPending ? /*#__PURE__*/_jsx(LoadingSpinner, {}) : !!obsCols && !_.size(obsCols) ? /*#__PURE__*/_jsx(Alert, {
321
+ variant: "danger",
322
+ children: "No observations found."
323
+ }) : /*#__PURE__*/_jsx(Accordion, {
324
+ flush: true,
325
+ defaultActiveKey: [...active, ...[defaultActiveGroup]],
326
+ alwaysOpen: true,
327
+ className: "obs-accordion",
328
+ children: obsList
329
+ })
330
+ });
314
331
  } else {
315
- return /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(Alert, {
316
- variant: "danger"
317
- }, serverError.message));
332
+ return /*#__PURE__*/_jsx("div", {
333
+ children: /*#__PURE__*/_jsx(Alert, {
334
+ variant: "danger",
335
+ children: serverError.message
336
+ })
337
+ });
318
338
  }
319
339
  }
@@ -1,5 +1,5 @@
1
- import React from "react";
2
1
  import { Form } from "react-bootstrap";
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
3
  export function ObsToolbar(_ref) {
4
4
  let {
5
5
  item,
@@ -7,7 +7,7 @@ export function ObsToolbar(_ref) {
7
7
  onToggleAllObs
8
8
  } = _ref;
9
9
  const allToggledOn = !item.omit.length;
10
- return showToggleAllObs && /*#__PURE__*/React.createElement(Form.Check, {
10
+ return showToggleAllObs && /*#__PURE__*/_jsx(Form.Check, {
11
11
  type: "switch",
12
12
  id: "custom-switch",
13
13
  label: "Toggle all",
@@ -3,7 +3,7 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
3
3
  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
4
4
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
5
5
  function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
6
- import React, { useEffect, useState } from "react";
6
+ import { useEffect, useState } from "react";
7
7
  import _ from "lodash";
8
8
  import { Button, ButtonGroup, Dropdown, DropdownButton, OverlayTrigger, Tooltip } from "react-bootstrap";
9
9
  import { DEFAULT_OBSM_KEYS } from "../../constants/constants";
@@ -11,7 +11,11 @@ import { useDataset } from "../../context/DatasetContext";
11
11
  import { useSettings, useSettingsDispatch } from "../../context/SettingsContext";
12
12
  import { useFetch } from "../../utils/requests";
13
13
  import { ObsmKeysListBtn } from "../../utils/Skeleton";
14
- export function ObsmKeysList() {
14
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
15
+ export function ObsmKeysList(_ref) {
16
+ let {
17
+ setHasObsm
18
+ } = _ref;
15
19
  const ENDPOINT = "obsm/keys";
16
20
  const dataset = useDataset();
17
21
  const settings = useSettings();
@@ -36,26 +40,31 @@ export function ObsmKeysList() {
36
40
  refetchOnMount: false
37
41
  });
38
42
  useEffect(() => {
39
- if (!isPending && !serverError && fetchedData) {
40
- setObsmKeysList(fetchedData);
43
+ if (!isPending && !serverError) {
44
+ if (!fetchedData || !fetchedData.length) {
45
+ setHasObsm(false);
46
+ } else {
47
+ setHasObsm(true);
48
+ setObsmKeysList(fetchedData);
41
49
 
42
- // Set default obsm if in keys list and not selected
43
- if (!settings.selectedObsm && !!fetchedData.length) {
44
- // Follow DEFAULT_OBSM_KEYS order
45
- _.each(DEFAULT_OBSM_KEYS, k => {
46
- const defaultObsm = _.find(fetchedData, item => item.toLowerCase() === k);
47
- if (defaultObsm) {
48
- dispatch({
49
- type: "select.obsm",
50
- obsm: defaultObsm
51
- });
52
- return false; // break
53
- }
54
- });
50
+ // Set default obsm if in keys list and not selected
51
+ if (!settings.selectedObsm) {
52
+ // Follow DEFAULT_OBSM_KEYS order
53
+ _.each(DEFAULT_OBSM_KEYS, k => {
54
+ const defaultObsm = _.find(fetchedData, item => item.toLowerCase() === k);
55
+ if (defaultObsm) {
56
+ dispatch({
57
+ type: "select.obsm",
58
+ obsm: defaultObsm
59
+ });
60
+ return false; // break
61
+ }
62
+ });
63
+ }
55
64
  }
56
65
  if (settings.selectedObsm) {
57
66
  // If selected obsm is not in keys list, reset to null
58
- if (!_.includes(fetchedData, settings.selectedObsm)) {
67
+ if (!_.includes(fetchedData || [], settings.selectedObsm)) {
59
68
  dispatch({
60
69
  type: "select.obsm",
61
70
  obsm: null
@@ -65,40 +74,47 @@ export function ObsmKeysList() {
65
74
  }
66
75
  }
67
76
  }
68
- }, [dispatch, fetchedData, isPending, serverError, settings.selectedObsm]);
77
+ }, [dispatch, fetchedData, isPending, serverError, setHasObsm, settings.selectedObsm]);
69
78
  const obsmList = obsmKeysList.map(item => {
70
- return /*#__PURE__*/React.createElement(Dropdown.Item, {
71
- key: item,
79
+ return /*#__PURE__*/_jsx(Dropdown.Item, {
72
80
  className: "custom ".concat(active === item && "active"),
73
81
  onClick: () => {
74
82
  dispatch({
75
83
  type: "select.obsm",
76
84
  obsm: item
77
85
  });
78
- }
86
+ },
87
+ children: item
79
88
  }, item);
80
89
  });
81
90
  if (!serverError) {
82
91
  if (isPending) {
83
- return /*#__PURE__*/React.createElement(ObsmKeysListBtn, null);
92
+ return /*#__PURE__*/_jsx(ObsmKeysListBtn, {});
84
93
  }
85
- return /*#__PURE__*/React.createElement(DropdownButton, {
94
+ return /*#__PURE__*/_jsxs(DropdownButton, {
86
95
  as: ButtonGroup,
87
96
  title: settings.selectedObsm || "Select an embedding",
88
97
  variant: settings.selectedObsm ? "primary" : "warning",
89
98
  id: "bg-nested-dropdown",
90
- size: "sm"
91
- }, /*#__PURE__*/React.createElement(Dropdown.Header, null, "Embeddings"), obsmList);
99
+ size: "sm",
100
+ children: [/*#__PURE__*/_jsx(Dropdown.Header, {
101
+ children: "Embeddings"
102
+ }), obsmList]
103
+ });
92
104
  } else {
93
- return /*#__PURE__*/React.createElement(OverlayTrigger, {
105
+ return /*#__PURE__*/_jsx(OverlayTrigger, {
94
106
  placement: "top",
95
107
  delay: {
96
108
  show: 100,
97
109
  hide: 200
98
110
  },
99
- overlay: /*#__PURE__*/React.createElement(Tooltip, null, serverError.message)
100
- }, /*#__PURE__*/React.createElement(Button, {
101
- variant: "danger"
102
- }, "Error"));
111
+ overlay: /*#__PURE__*/_jsx(Tooltip, {
112
+ children: serverError.message
113
+ }),
114
+ children: /*#__PURE__*/_jsx(Button, {
115
+ variant: "danger",
116
+ children: "Error"
117
+ })
118
+ });
103
119
  }
104
120
  }
@@ -1,41 +1,57 @@
1
1
  const _excluded = ["show", "handleClose"],
2
2
  _excluded2 = ["show", "handleClose", "Controls"];
3
+ 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; }
4
+ 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; }
5
+ 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; }
6
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
7
+ function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
3
8
  function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
4
9
  function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
5
- import React from "react";
6
10
  import Offcanvas from "react-bootstrap/Offcanvas";
7
11
  import { SELECTION_MODES } from "../../constants/constants";
8
12
  import { ObsColsList } from "../obs-list/ObsList";
9
13
  import { ObsmKeysList } from "../obsm-list/ObsmList";
10
14
  import { SearchBar } from "../search-bar/SearchBar";
11
15
  import { VarNamesList } from "../var-list/VarList";
16
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
12
17
  export function OffcanvasObs(_ref) {
13
18
  let {
14
19
  show,
15
20
  handleClose
16
21
  } = _ref,
17
22
  props = _objectWithoutProperties(_ref, _excluded);
18
- return /*#__PURE__*/React.createElement(Offcanvas, {
23
+ return /*#__PURE__*/_jsxs(Offcanvas, {
19
24
  show: show,
20
25
  onHide: handleClose,
21
- scroll: true
22
- }, /*#__PURE__*/React.createElement(Offcanvas.Header, {
23
- closeButton: true
24
- }, /*#__PURE__*/React.createElement(Offcanvas.Title, null, "Categories")), /*#__PURE__*/React.createElement(Offcanvas.Body, {
25
- className: "p-0"
26
- }, /*#__PURE__*/React.createElement(ObsColsList, props)));
26
+ scroll: true,
27
+ children: [/*#__PURE__*/_jsx(Offcanvas.Header, {
28
+ closeButton: true,
29
+ children: /*#__PURE__*/_jsx(Offcanvas.Title, {
30
+ children: "Categories"
31
+ })
32
+ }), /*#__PURE__*/_jsx(Offcanvas.Body, {
33
+ className: "p-0",
34
+ children: /*#__PURE__*/_jsx(ObsColsList, _objectSpread({}, props))
35
+ })]
36
+ });
27
37
  }
28
38
  export function OffcanvasObsm(_ref2) {
29
39
  let {
30
40
  show,
31
41
  handleClose
32
42
  } = _ref2;
33
- return /*#__PURE__*/React.createElement(Offcanvas, {
43
+ return /*#__PURE__*/_jsxs(Offcanvas, {
34
44
  show: show,
35
- onHide: handleClose
36
- }, /*#__PURE__*/React.createElement(Offcanvas.Header, {
37
- closeButton: true
38
- }, /*#__PURE__*/React.createElement(Offcanvas.Title, null, "Embedding space")), /*#__PURE__*/React.createElement(Offcanvas.Body, null, /*#__PURE__*/React.createElement(ObsmKeysList, null)));
45
+ onHide: handleClose,
46
+ children: [/*#__PURE__*/_jsx(Offcanvas.Header, {
47
+ closeButton: true,
48
+ children: /*#__PURE__*/_jsx(Offcanvas.Title, {
49
+ children: "Embedding space"
50
+ })
51
+ }), /*#__PURE__*/_jsx(Offcanvas.Body, {
52
+ children: /*#__PURE__*/_jsx(ObsmKeysList, {})
53
+ })]
54
+ });
39
55
  }
40
56
  export function OffcanvasVars(_ref3) {
41
57
  let {
@@ -43,21 +59,29 @@ export function OffcanvasVars(_ref3) {
43
59
  handleClose,
44
60
  mode = SELECTION_MODES.MULTIPLE
45
61
  } = _ref3;
46
- return /*#__PURE__*/React.createElement(Offcanvas, {
62
+ return /*#__PURE__*/_jsxs(Offcanvas, {
47
63
  show: show,
48
64
  onHide: handleClose,
49
- className: "offcanvas-vars"
50
- }, /*#__PURE__*/React.createElement(Offcanvas.Header, {
51
- closeButton: true
52
- }, /*#__PURE__*/React.createElement(Offcanvas.Title, null, "Features")), /*#__PURE__*/React.createElement(Offcanvas.Body, null, /*#__PURE__*/React.createElement("div", {
53
- className: "sidebar-features"
54
- }, /*#__PURE__*/React.createElement(SearchBar, {
55
- searchDiseases: true
56
- }), /*#__PURE__*/React.createElement("div", {
57
- className: "sidebar-features-list"
58
- }, /*#__PURE__*/React.createElement(VarNamesList, {
59
- mode: mode
60
- })))));
65
+ className: "offcanvas-vars",
66
+ children: [/*#__PURE__*/_jsx(Offcanvas.Header, {
67
+ closeButton: true,
68
+ children: /*#__PURE__*/_jsx(Offcanvas.Title, {
69
+ children: "Features"
70
+ })
71
+ }), /*#__PURE__*/_jsx(Offcanvas.Body, {
72
+ children: /*#__PURE__*/_jsxs("div", {
73
+ className: "sidebar-features",
74
+ children: [/*#__PURE__*/_jsx(SearchBar, {
75
+ searchDiseases: true
76
+ }), /*#__PURE__*/_jsx("div", {
77
+ className: "sidebar-features-list",
78
+ children: /*#__PURE__*/_jsx(VarNamesList, {
79
+ mode: mode
80
+ })
81
+ })]
82
+ })
83
+ })]
84
+ });
61
85
  }
62
86
  export function OffcanvasControls(_ref4) {
63
87
  let {
@@ -66,10 +90,16 @@ export function OffcanvasControls(_ref4) {
66
90
  Controls
67
91
  } = _ref4,
68
92
  props = _objectWithoutProperties(_ref4, _excluded2);
69
- return /*#__PURE__*/React.createElement(Offcanvas, {
93
+ return /*#__PURE__*/_jsxs(Offcanvas, {
70
94
  show: show,
71
- onHide: handleClose
72
- }, /*#__PURE__*/React.createElement(Offcanvas.Header, {
73
- closeButton: true
74
- }, /*#__PURE__*/React.createElement(Offcanvas.Title, null, "Controls")), /*#__PURE__*/React.createElement(Offcanvas.Body, null, /*#__PURE__*/React.createElement(Controls, props)));
95
+ onHide: handleClose,
96
+ children: [/*#__PURE__*/_jsx(Offcanvas.Header, {
97
+ closeButton: true,
98
+ children: /*#__PURE__*/_jsx(Offcanvas.Title, {
99
+ children: "Controls"
100
+ })
101
+ }), /*#__PURE__*/_jsx(Offcanvas.Body, {
102
+ children: /*#__PURE__*/_jsx(Controls, _objectSpread({}, props))
103
+ })]
104
+ });
75
105
  }
@@ -18,6 +18,7 @@ import { Legend } from "../../utils/Legend";
18
18
  import { LoadingSpinner } from "../../utils/LoadingIndicators";
19
19
  import { useDebouncedFetch } from "../../utils/requests";
20
20
  import { useSelectedObs, useSelectedVar } from "../../utils/Resolver";
21
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
21
22
  function usePseudospatialData(plotType) {
22
23
  const ENDPOINT = "pseudospatial";
23
24
  const dataset = useDataset();
@@ -232,43 +233,52 @@ export function Pseudospatial(_ref) {
232
233
  }] : [])];
233
234
  }, [dispatch, imageUrl, setShowControls, (_settings$pseudospati2 = settings.pseudospatial) === null || _settings$pseudospati2 === void 0 || (_settings$pseudospati2 = _settings$pseudospati2.refImg) === null || _settings$pseudospati2 === void 0 ? void 0 : _settings$pseudospati2.visible]);
234
235
  if (!_.keys(settings.data.pseudospatial).length) {
235
- return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Alert, {
236
- variant: "warning"
237
- }, "No pseudospatial data"));
236
+ return /*#__PURE__*/_jsx(_Fragment, {
237
+ children: /*#__PURE__*/_jsx(Alert, {
238
+ variant: "warning",
239
+ children: "No pseudospatial data"
240
+ })
241
+ });
238
242
  } else if (!serverError) {
239
243
  var _layout$coloraxis5, _layout$coloraxis6;
240
- return /*#__PURE__*/React.createElement("div", {
241
- className: "cherita-pseudospatial"
242
- }, /*#__PURE__*/React.createElement(React.Fragment, null, hasSelections && isPending && /*#__PURE__*/React.createElement(LoadingSpinner, null), hasSelections && /*#__PURE__*/React.createElement(Plot, {
243
- data: data,
244
- layout: _objectSpread(_objectSpread({}, layout), {}, {
245
- autosize: true,
246
- height: height,
247
- margin: {
248
- l: 0,
249
- r: 0,
250
- t: 0,
251
- b: 0,
252
- pad: 0
253
- },
254
- images: images
255
- }),
256
- useResizeHandler: true,
257
- className: "cherita-pseudospatial-plot",
258
- config: {
259
- displaylogo: false,
260
- displayModeBar: true,
261
- modeBarButtonsToAdd: modeBarButtons
262
- }
263
- }), hasSelections && showLegend && /*#__PURE__*/React.createElement(Legend, {
264
- min: layout === null || layout === void 0 || (_layout$coloraxis5 = layout.coloraxis) === null || _layout$coloraxis5 === void 0 ? void 0 : _layout$coloraxis5.cmin,
265
- max: layout === null || layout === void 0 || (_layout$coloraxis6 = layout.coloraxis) === null || _layout$coloraxis6 === void 0 ? void 0 : _layout$coloraxis6.cmax,
266
- addText: plotType === PLOT_TYPES.GENE ? " - Mean expression" : plotType === PLOT_TYPES.CATEGORICAL ? " - %" : plotType === PLOT_TYPES.CONTINUOUS ? " - Mean value" : ""
267
- })));
244
+ return /*#__PURE__*/_jsx("div", {
245
+ className: "cherita-pseudospatial",
246
+ children: /*#__PURE__*/_jsxs(_Fragment, {
247
+ children: [hasSelections && isPending && /*#__PURE__*/_jsx(LoadingSpinner, {}), hasSelections && /*#__PURE__*/_jsx(Plot, {
248
+ data: data,
249
+ layout: _objectSpread(_objectSpread({}, layout), {}, {
250
+ autosize: true,
251
+ height: height,
252
+ margin: {
253
+ l: 0,
254
+ r: 0,
255
+ t: 0,
256
+ b: 0,
257
+ pad: 0
258
+ },
259
+ images: images
260
+ }),
261
+ useResizeHandler: true,
262
+ className: "cherita-pseudospatial-plot",
263
+ config: {
264
+ displaylogo: false,
265
+ displayModeBar: true,
266
+ modeBarButtonsToAdd: modeBarButtons
267
+ }
268
+ }), hasSelections && showLegend && /*#__PURE__*/_jsx(Legend, {
269
+ min: layout === null || layout === void 0 || (_layout$coloraxis5 = layout.coloraxis) === null || _layout$coloraxis5 === void 0 ? void 0 : _layout$coloraxis5.cmin,
270
+ max: layout === null || layout === void 0 || (_layout$coloraxis6 = layout.coloraxis) === null || _layout$coloraxis6 === void 0 ? void 0 : _layout$coloraxis6.cmax,
271
+ addText: plotType === PLOT_TYPES.GENE ? " - Mean expression" : plotType === PLOT_TYPES.CATEGORICAL ? " - %" : plotType === PLOT_TYPES.CONTINUOUS ? " - Mean value" : ""
272
+ })]
273
+ })
274
+ });
268
275
  } else {
269
- return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Alert, {
270
- variant: "danger"
271
- }, serverError.message));
276
+ return /*#__PURE__*/_jsx(_Fragment, {
277
+ children: /*#__PURE__*/_jsx(Alert, {
278
+ variant: "danger",
279
+ children: serverError.message
280
+ })
281
+ });
272
282
  }
273
283
  }
274
284
 
@@ -276,11 +286,11 @@ export function Pseudospatial(_ref) {
276
286
  export function PseudospatialImage() {
277
287
  const dataset = useDataset();
278
288
  if (dataset.imageUrl) {
279
- return /*#__PURE__*/React.createElement(ImageViewer, {
289
+ return /*#__PURE__*/_jsx(ImageViewer, {
280
290
  src: dataset.imageUrl,
281
291
  alt: "Pseudospatial reference image"
282
292
  });
283
293
  } else {
284
- return /*#__PURE__*/React.createElement(React.Fragment, null);
294
+ return /*#__PURE__*/_jsx(_Fragment, {});
285
295
  }
286
296
  }