@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
@@ -28,7 +28,7 @@ class ZarrHelper {
28
28
  const z = await (0, _zarr.openArray)({
29
29
  store: url,
30
30
  path: path,
31
- mode: "r"
31
+ mode: 'r'
32
32
  });
33
33
  return z;
34
34
  }
@@ -60,7 +60,7 @@ const useZarr = function (_ref2) {
60
60
  isLoading: isPending = false,
61
61
  error: serverError = null
62
62
  } = (0, _reactQuery.useQuery)(_objectSpread({
63
- queryKey: ["zarr", url, path, s],
63
+ queryKey: ['zarr', url, path, s],
64
64
  queryFn: () => fetchDataFromZarr(url, path, s, options),
65
65
  retry: (failureCount, _ref3) => {
66
66
  let {
@@ -102,7 +102,7 @@ const useMultipleZarr = function (inputs) {
102
102
  serverError = null
103
103
  } = (0, _reactQuery.useQueries)({
104
104
  queries: inputs.map(input => _objectSpread({
105
- queryKey: ["zarr", input.url, input.path, input.s],
105
+ queryKey: ['zarr', input.url, input.path, input.s],
106
106
  queryFn: () => fetchDataFromZarr(input.url, input.path, input.s, options),
107
107
  retry: (failureCount, _ref4) => {
108
108
  let {
@@ -151,7 +151,7 @@ const useFilter = data => {
151
151
  (0, _react.useEffect)(() => {
152
152
  if (!isPending && !serverError) {
153
153
  filterDataDispatch({
154
- type: "set.obs.indices",
154
+ type: 'set.obs.indices',
155
155
  indices: isSliced ? filteredIndices : null,
156
156
  valueMin: valueMin,
157
157
  valueMax: valueMax,
@@ -41,11 +41,11 @@ function Histogram(_ref) {
41
41
  },
42
42
  xAxis: {
43
43
  data: _lodash.default.range((_data$bin_edges = data.bin_edges) === null || _data$bin_edges === void 0 ? void 0 : _data$bin_edges.length) || null,
44
- valueFormatter: v => "Bin [".concat((0, _string.formatNumerical)(data.bin_edges[v][0], _string.FORMATS.EXPONENTIAL), ", ").concat((0, _string.formatNumerical)(data.bin_edges[v][1], _string.FORMATS.EXPONENTIAL)).concat(v === data.bin_edges.length - 1 ? "]" : ")")
44
+ valueFormatter: v => "Bin [".concat((0, _string.formatNumerical)(data.bin_edges[v][0], _string.FORMATS.EXPONENTIAL), ", ").concat((0, _string.formatNumerical)(data.bin_edges[v][1], _string.FORMATS.EXPONENTIAL)).concat(v === data.bin_edges.length - 1 ? ']' : ')')
45
45
  },
46
46
  slotProps: {
47
47
  popper: {
48
- className: "feature-histogram-tooltip"
48
+ className: 'feature-histogram-tooltip'
49
49
  }
50
50
  }
51
51
  })
@@ -11,11 +11,11 @@ const ImageViewer = _ref => {
11
11
  let {
12
12
  src,
13
13
  alt,
14
- className = "img-fluid"
14
+ className = 'img-fluid'
15
15
  } = _ref;
16
16
  const [error, setError] = (0, _react.useState)(false);
17
17
  const handleError = () => {
18
- console.error("Error loading image from src:", src);
18
+ console.error('Error loading image from src:', src);
19
19
  setError(true);
20
20
  };
21
21
  if (!error) {
@@ -20,7 +20,7 @@ function Legend(_ref) {
20
20
  min = 0,
21
21
  max = 1,
22
22
  colorscale = null,
23
- addText = ""
23
+ addText = ''
24
24
  } = _ref;
25
25
  const settings = (0, _SettingsContext.useSettings)();
26
26
  const {
@@ -25,7 +25,7 @@ exports.LoadingSpinner = LoadingSpinner;
25
25
  const LoadingLinear = () => {
26
26
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_material.Box, {
27
27
  sx: {
28
- width: "100%"
28
+ width: '100%'
29
29
  },
30
30
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_material.LinearProgress, {})
31
31
  });
@@ -76,7 +76,7 @@ const useResolver = initSettings => {
76
76
  // all obs should be in initSettings.selectedObs and initSettings.labelObs
77
77
  const initObs = _lodash.default.uniqBy(_lodash.default.compact([initSettings.selectedObs, ..._lodash.default.map(initSettings.labelObs, o => ({
78
78
  name: o
79
- }))]), "name");
79
+ }))]), 'name');
80
80
  const initObsNames = _lodash.default.map(initObs, o => o.name);
81
81
  const [obsParams] = (0, _react.useState)({
82
82
  url: dataset.url,
@@ -89,7 +89,7 @@ const useResolver = initSettings => {
89
89
  fetchedData: obsData,
90
90
  isPending: obsDataPending,
91
91
  serverError: obsDataError
92
- } = (0, _requests.useFetch)("obs/cols", obsParams, {
92
+ } = (0, _requests.useFetch)('obs/cols', obsParams, {
93
93
  enabled: !!initObsNames.length
94
94
  });
95
95
 
@@ -106,7 +106,7 @@ const useResolver = initSettings => {
106
106
  fetchedData: varData,
107
107
  isPending: varDataPending,
108
108
  serverError: varDataError
109
- } = (0, _requests.useFetch)("var/cols/names", varParams, {
109
+ } = (0, _requests.useFetch)('var/cols/names', varParams, {
110
110
  enabled: !!varParams.names.length
111
111
  });
112
112
 
@@ -119,7 +119,7 @@ const useResolver = initSettings => {
119
119
  fetchedData: pseudospatialData,
120
120
  isPending: pseudospatialDataPending,
121
121
  serverError: pseudospatialDataError
122
- } = (0, _requests.useFetch)("masks", pseudospatialParams, {
122
+ } = (0, _requests.useFetch)('masks', pseudospatialParams, {
123
123
  enabled: pseudospatialEnabled,
124
124
  retry: false
125
125
  });
@@ -136,13 +136,13 @@ const useResolver = initSettings => {
136
136
  return;
137
137
  }
138
138
  if (obsDataError) {
139
- console.error("Error fetching obs data:", obsDataError);
139
+ console.error('Error fetching obs data:', obsDataError);
140
140
  }
141
141
  if (varDataError) {
142
- console.error("Error fetching var data:", varDataError);
142
+ console.error('Error fetching var data:', varDataError);
143
143
  }
144
144
  if (pseudospatialDataError) {
145
- console.error("Error fetching pseudospatial masks data:", pseudospatialDataError);
145
+ console.error('Error fetching pseudospatial masks data:', pseudospatialDataError);
146
146
  }
147
147
  const data = {
148
148
  obs: obsData ? _lodash.default.fromPairs(_lodash.default.map(obsData, o => [o.name, o])) : {},
@@ -13,7 +13,7 @@ const ObsmKeysListBtn = () => {
13
13
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Placeholder, {
14
14
  xs: 6,
15
15
  style: {
16
- width: "40px"
16
+ width: '40px'
17
17
  }
18
18
  })
19
19
  });
@@ -30,15 +30,15 @@ const StyledTooltip = exports.StyledTooltip = (0, _material.styled)(_ref => {
30
30
  } = _ref2;
31
31
  return {
32
32
  ["& .".concat(_material.tooltipClasses.tooltip)]: {
33
- backgroundColor: "#000",
34
- color: "#fff",
33
+ backgroundColor: '#000',
34
+ color: '#fff',
35
35
  maxWidth: 220,
36
36
  fontSize: 13,
37
37
  borderRadius: 4,
38
38
  padding: theme.spacing(0.5, 1),
39
- whiteSpace: "pre-line",
40
- textAlign: "center",
41
- boxShadow: "0 0.25rem 0.75rem rgba(0, 0, 0, 0.1)"
39
+ whiteSpace: 'pre-line',
40
+ textAlign: 'center',
41
+ boxShadow: '0 0.25rem 0.75rem rgba(0, 0, 0, 0.1)'
42
42
  }
43
43
  };
44
44
  });
@@ -23,7 +23,7 @@ function VirtualizedList(_ref) {
23
23
  ItemComponent,
24
24
  estimateSize = () => 45,
25
25
  overscan = 25,
26
- maxHeight = "65vh"
26
+ maxHeight = '65vh'
27
27
  } = _ref,
28
28
  props = _objectWithoutProperties(_ref, _excluded);
29
29
  const [parentNode, setParentNode] = (0, _react.useState)(null);
@@ -43,23 +43,23 @@ function VirtualizedList(_ref) {
43
43
  return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
44
44
  ref: refCallback,
45
45
  style: {
46
- overflowY: "auto",
46
+ overflowY: 'auto',
47
47
  maxHeight: maxHeight
48
48
  },
49
49
  className: "modern-scrollbars",
50
50
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
51
51
  style: {
52
52
  height: "".concat(itemVirtualizer.getTotalSize(), "px"),
53
- width: "100%",
54
- position: "relative",
55
- willChange: "transform"
53
+ width: '100%',
54
+ position: 'relative',
55
+ willChange: 'transform'
56
56
  },
57
57
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
58
58
  style: {
59
- position: "absolute",
59
+ position: 'absolute',
60
60
  top: 0,
61
61
  left: 0,
62
- width: "100%",
62
+ width: '100%',
63
63
  transform: "translateY(".concat((_virtualItems$0$start = (_virtualItems$ = virtualItems[0]) === null || _virtualItems$ === void 0 ? void 0 : _virtualItems$.start) !== null && _virtualItems$0$start !== void 0 ? _virtualItems$0$start : 0, "px)")
64
64
  },
65
65
  children: virtualItems.map(virtualItem => /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
@@ -12,38 +12,38 @@ function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e =
12
12
  const parseError = err => {
13
13
  if (err === DOMException.TIMEOUT_ERR) {
14
14
  return {
15
- message: "Timeout error",
15
+ message: 'Timeout error',
16
16
  name: err
17
17
  };
18
18
  }
19
19
  switch (err === null || err === void 0 ? void 0 : err.name) {
20
- case "TypeError":
20
+ case 'TypeError':
21
21
  return _objectSpread(_objectSpread({}, err), {}, {
22
- message: "Failed to fetch data from server"
22
+ message: 'Failed to fetch data from server'
23
23
  });
24
- case "ReadZarrError":
24
+ case 'ReadZarrError':
25
25
  return _objectSpread(_objectSpread({}, err), {}, {
26
- message: "Failed to read AnnData-Zarr"
26
+ message: 'Failed to read AnnData-Zarr'
27
27
  });
28
- case "InvalidObs":
28
+ case 'InvalidObs':
29
29
  return _objectSpread(_objectSpread({}, err), {}, {
30
- message: "Observation not found in dataset"
30
+ message: 'Observation not found in dataset'
31
31
  });
32
- case "InvalidVar":
32
+ case 'InvalidVar':
33
33
  return _objectSpread(_objectSpread({}, err), {}, {
34
- message: "Feature not found in dataset"
34
+ message: 'Feature not found in dataset'
35
35
  });
36
- case "InvalidKey":
36
+ case 'InvalidKey':
37
37
  return _objectSpread(_objectSpread({}, err), {}, {
38
- message: "Key not found in dataset"
38
+ message: 'Key not found in dataset'
39
39
  });
40
- case "BadRequest":
40
+ case 'BadRequest':
41
41
  return _objectSpread(_objectSpread({}, err), {}, {
42
- message: "Invalid request to server"
42
+ message: 'Invalid request to server'
43
43
  });
44
- case "InternalServerError":
44
+ case 'InternalServerError':
45
45
  return _objectSpread(_objectSpread({}, err), {}, {
46
- message: "Server error"
46
+ message: 'Server error'
47
47
  });
48
48
  default:
49
49
  return err;
@@ -22,13 +22,13 @@ async function fetchData(endpoint, params) {
22
22
  const timeout = setTimeout(() => {
23
23
  controller.abort(DOMException.TIMEOUT_ERR);
24
24
  }, ms || 300000);
25
- if (signal) signal.addEventListener("abort", () => controller.abort());
25
+ if (signal) signal.addEventListener('abort', () => controller.abort());
26
26
  const response = await fetch(new URL(endpoint, apiUrl), {
27
- method: "POST",
28
- mode: "cors",
27
+ method: 'POST',
28
+ mode: 'cors',
29
29
  headers: {
30
- "Content-Type": "application/json",
31
- Accept: "application/json"
30
+ 'Content-Type': 'application/json',
31
+ Accept: 'application/json'
32
32
  },
33
33
  body: JSON.stringify(params),
34
34
  signal: controller.signal
@@ -8,12 +8,12 @@ var _react = require("react");
8
8
  var _requests = require("./requests");
9
9
  var _DatasetContext = require("../context/DatasetContext");
10
10
  const useDiseaseSearch = () => {
11
- const ENDPOINT = "diseases";
11
+ const ENDPOINT = 'diseases';
12
12
  const dataset = (0, _DatasetContext.useDataset)();
13
13
  const [params, setParams] = (0, _react.useState)({
14
14
  url: dataset.url,
15
15
  diseaseDatasets: dataset.diseaseDatasets,
16
- text: ""
16
+ text: ''
17
17
  });
18
18
  const data = (0, _requests.useFetch)(ENDPOINT, params, {
19
19
  enabled: !!params.text.length,
@@ -27,12 +27,12 @@ const useDiseaseSearch = () => {
27
27
  };
28
28
  exports.useDiseaseSearch = useDiseaseSearch;
29
29
  const useVarSearch = () => {
30
- const ENDPOINT = "var/names";
30
+ const ENDPOINT = 'var/names';
31
31
  const dataset = (0, _DatasetContext.useDataset)();
32
32
  const [params, setParams] = (0, _react.useState)({
33
33
  url: dataset.url,
34
34
  col: dataset.varNamesCol,
35
- text: ""
35
+ text: ''
36
36
  });
37
37
  const data = (0, _requests.useFetch)(ENDPOINT, params, {
38
38
  enabled: !!params.text.length,
@@ -9,9 +9,9 @@ exports.formatString = formatString;
9
9
  var _numbro = _interopRequireDefault(require("numbro"));
10
10
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
11
11
  const FORMATS = exports.FORMATS = {
12
- EXPONENTIAL: "exponential",
13
- ABBREVIATION: "abbreviation",
14
- THOUSAND: "thousand"
12
+ EXPONENTIAL: 'exponential',
13
+ ABBREVIATION: 'abbreviation',
14
+ THOUSAND: 'thousand'
15
15
  };
16
16
  function formatThousand(n) {
17
17
  let precision = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 3;
@@ -41,9 +41,9 @@ function formatNumerical(n) {
41
41
  let format = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : FORMATS.THOUSAND;
42
42
  let precision = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 3;
43
43
  if (n === 0) {
44
- return "0";
44
+ return '0';
45
45
  } else if (!n || n === undefined || isNaN(n)) {
46
- return "NaN";
46
+ return 'NaN';
47
47
  }
48
48
  switch (format) {
49
49
  case FORMATS.EXPONENTIAL:
@@ -64,5 +64,5 @@ function formatNumerical(n) {
64
64
  }
65
65
  }
66
66
  function formatString(s) {
67
- return s.trim().replace(/_/g, " ");
67
+ return s.trim().replace(/_/g, ' ');
68
68
  }
@@ -21,7 +21,7 @@ const useObsmData = function () {
21
21
  obsm = obsm || settings.selectedObsm;
22
22
  const obsmParams = (0, _react.useMemo)(() => ({
23
23
  url: dataset.url,
24
- path: "obsm/" + obsm,
24
+ path: 'obsm/' + obsm,
25
25
  s: [null, (0, _zarr.slice)(null, 2)] // load only [:, :2]
26
26
  }), [dataset.url, obsm]);
27
27
  return (0, _zarrHelper.useZarr)(obsmParams, _zarrHelper.GET_OPTIONS, {
@@ -43,12 +43,12 @@ const useXData = function () {
43
43
  const selectedVar = (0, _Resolver.useSelectedVar)();
44
44
  const xParams = (0, _react.useMemo)(() => !selectedVar ? [] : !(selectedVar !== null && selectedVar !== void 0 && selectedVar.isSet) ? [{
45
45
  url: dataset.url,
46
- path: "X",
46
+ path: 'X',
47
47
  s: [null, selectedVar === null || selectedVar === void 0 ? void 0 : selectedVar.matrix_index]
48
48
  }] : _lodash.default.map(selectedVar === null || selectedVar === void 0 ? void 0 : selectedVar.vars, v => {
49
49
  return {
50
50
  url: dataset.url,
51
- path: "X",
51
+ path: 'X',
52
52
  s: [null, v.matrix_index]
53
53
  };
54
54
  }), [dataset.url, selectedVar]);
@@ -67,7 +67,7 @@ const useObsData = function () {
67
67
  var _obs, _obs2;
68
68
  return {
69
69
  url: dataset.url,
70
- path: "obs/" + ((_obs = obs) === null || _obs === void 0 ? void 0 : _obs.name) + (((_obs2 = obs) === null || _obs2 === void 0 ? void 0 : _obs2.type) === _constants.OBS_TYPES.CATEGORICAL ? "/codes" : "")
70
+ path: 'obs/' + ((_obs = obs) === null || _obs === void 0 ? void 0 : _obs.name) + (((_obs2 = obs) === null || _obs2 === void 0 ? void 0 : _obs2.type) === _constants.OBS_TYPES.CATEGORICAL ? '/codes' : '')
71
71
  };
72
72
  }, [dataset.url, (_obs3 = obs) === null || _obs3 === void 0 ? void 0 : _obs3.name, (_obs4 = obs) === null || _obs4 === void 0 ? void 0 : _obs4.type]);
73
73
  return (0, _zarrHelper.useZarr)(obsParams, _zarrHelper.GET_OPTIONS, {
@@ -82,7 +82,7 @@ const useLabelObsData = () => {
82
82
  const obs = settings.data.obs[obsName] || null;
83
83
  return {
84
84
  url: dataset.url,
85
- path: "obs/" + obs.name + (obs.type === _constants.OBS_TYPES.CATEGORICAL ? "/codes" : ""),
85
+ path: 'obs/' + obs.name + (obs.type === _constants.OBS_TYPES.CATEGORICAL ? '/codes' : ''),
86
86
  key: obs.name
87
87
  };
88
88
  }), [dataset.url, settings.data.obs, settings.labelObs]);
@@ -11895,7 +11895,7 @@ textarea.form-control-lg {
11895
11895
  }
11896
11896
 
11897
11897
  .list-group.cherita-list .virtualized-list-wrapper {
11898
- padding: 0 0.25rem 0.25rem 0.25rem;
11898
+ padding: 0 0.25rem 0.25rem;
11899
11899
  }
11900
11900
  .list-group.cherita-list .list-group-item.unstyled {
11901
11901
  background-color: transparent;
@@ -11915,7 +11915,7 @@ textarea.form-control-lg {
11915
11915
 
11916
11916
  .obs-statistics {
11917
11917
  border: 0;
11918
- margin: 0 0.25rem 0.25rem 0.25rem;
11918
+ margin: 0 0.25rem 0.25rem;
11919
11919
  padding: 0.375rem 0.75rem;
11920
11920
  line-height: 1.5;
11921
11921
  color: var(--bs-body-color);
@@ -11939,7 +11939,6 @@ textarea.form-control-lg {
11939
11939
  flex-direction: column;
11940
11940
  overflow: auto;
11941
11941
  }
11942
-
11943
11942
  .cherita-app .cherita-navbar {
11944
11943
  position: absolute;
11945
11944
  z-index: 11;
@@ -11948,16 +11947,12 @@ textarea.form-control-lg {
11948
11947
  right: 0;
11949
11948
  border-radius: 0.25rem;
11950
11949
  }
11951
- @media (min-width: 992px) and (max-width: 1199px) {
11950
+ @media (width >= 992px) and (width <= 1199px) {
11952
11951
  .cherita-app .cherita-navbar {
11953
- margin-left: calc(33.33333333% + 1rem) !important;
11952
+ margin-left: calc(33.3333% + 1rem) !important;
11954
11953
  }
11955
11954
  }
11956
11955
 
11957
- .cherita-app-canvas {
11958
- position: relative;
11959
- }
11960
-
11961
11956
  .cherita-app-obs {
11962
11957
  overflow-y: auto;
11963
11958
  }
@@ -11989,7 +11984,7 @@ textarea.form-control-lg {
11989
11984
  align-items: center;
11990
11985
  width: 100%;
11991
11986
  }
11992
- .cherita-app-sidebar .accordion-header-wrapper:after {
11987
+ .cherita-app-sidebar .accordion-header-wrapper::after {
11993
11988
  content: "";
11994
11989
  flex-shrink: 0;
11995
11990
  width: var(--geeks-accordion-btn-icon-width);
@@ -12004,7 +11999,7 @@ textarea.form-control-lg {
12004
11999
  color: var(--geeks-accordion-active-color);
12005
12000
  background-color: var(--geeks-accordion-active-bg);
12006
12001
  }
12007
- .cherita-app-sidebar .accordion-header-wrapper:not(.collapsed):after {
12002
+ .cherita-app-sidebar .accordion-header-wrapper:not(.collapsed)::after {
12008
12003
  background-image: var(--geeks-accordion-btn-active-icon);
12009
12004
  transform: var(--geeks-accordion-btn-icon-transform);
12010
12005
  }
@@ -12042,6 +12037,9 @@ textarea.form-control-lg {
12042
12037
  border-left: 1px solid #dee2e6;
12043
12038
  }
12044
12039
 
12040
+ .cherita-app-canvas {
12041
+ position: relative;
12042
+ }
12045
12043
  .cherita-app-canvas .cherita-plot {
12046
12044
  position: relative;
12047
12045
  height: 100%;
@@ -12077,7 +12075,7 @@ textarea.form-control-lg {
12077
12075
  max-width: 20%;
12078
12076
  position: relative;
12079
12077
  }
12080
- @media (max-width: 1400px) {
12078
+ @media (width <= 1400px) {
12081
12079
  .cherita-app-container .cherita-app-obs,
12082
12080
  .cherita-app-container .cherita-app-sidebar {
12083
12081
  max-width: 25%;
@@ -12269,7 +12267,7 @@ textarea.form-control-lg {
12269
12267
  display: inline-block;
12270
12268
  }
12271
12269
 
12272
- @media (max-width: 600px) {
12270
+ @media (width <= 600px) {
12273
12271
  .cherita-spatial-footer {
12274
12272
  flex-direction: column;
12275
12273
  align-items: center;
@@ -12370,13 +12368,13 @@ textarea.form-control-lg {
12370
12368
  }
12371
12369
 
12372
12370
  .value-count-badge {
12373
- color: #000000 !important;
12371
+ color: #000 !important;
12374
12372
  background-color: #dedede !important;
12375
12373
  font-weight: lighter;
12376
12374
  }
12377
12375
 
12378
12376
  .filtered-value-count-badge {
12379
- color: #ffffff !important;
12377
+ color: #fff !important;
12380
12378
  font-weight: normal;
12381
12379
  }
12382
12380
 
@@ -12407,23 +12405,26 @@ textarea.form-control-lg {
12407
12405
  background-color: #dedede;
12408
12406
  }
12409
12407
 
12408
+ .feature-histogram-tooltip td > p {
12409
+ font-size: 0.85rem !important;
12410
+ }
12411
+
12412
+ /* stylelint-disable-next-line selector-class-pattern */
12410
12413
  .feature-histogram-tooltip .MuiChartsTooltip-markCell,
12411
12414
  .MuiChartsTooltip-labelCell {
12412
12415
  display: none;
12413
12416
  }
12414
12417
 
12418
+ /* stylelint-disable-next-line selector-class-pattern */
12415
12419
  .feature-histogram-tooltip .MuiChartsTooltip-valueCell {
12416
12420
  padding: 0.5rem !important;
12417
12421
  }
12418
12422
 
12423
+ /* stylelint-disable-next-line selector-class-pattern */
12419
12424
  .feature-histogram-tooltip .MuiChartsTooltip-valueCell > p {
12420
12425
  font-size: 0.85rem !important;
12421
12426
  }
12422
12427
 
12423
- .feature-histogram-tooltip td > p {
12424
- font-size: 0.85rem !important;
12425
- }
12426
-
12427
12428
  .feature-disease-info-list {
12428
12429
  max-height: 300px;
12429
12430
  overflow-y: auto;
@@ -12558,7 +12559,7 @@ input[type=checkbox] {
12558
12559
  z-index: 10;
12559
12560
  width: max-content;
12560
12561
  }
12561
- @media (min-width: 991px) {
12562
+ @media (width >= 991px) {
12562
12563
  .resampled-tooltip-container {
12563
12564
  top: 16px;
12564
12565
  left: 16px;