@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
@@ -4,106 +4,106 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.VIOLIN_MODES = exports.VIOLINPLOT_SCALES = exports.VAR_SORT_ORDER = exports.VAR_SORT = exports.UNSELECTED_POLYGON_FILLCOLOR = exports.SELECTION_MODES = exports.SELECTED_POLYGON_FILLCOLOR = exports.PSEUDOSPATIAL_PLOT_TYPES = exports.PSEUDOSPATIAL_CATEGORICAL_MODES = exports.PLOT_TYPES = exports.PLOTLY_MODEBAR_BUTTONS = exports.OBS_TYPES = exports.MATRIXPLOT_SCALES = exports.LOCAL_STORAGE_KEY = exports.DOTPLOT_SCALES = exports.DEFAULT_OBS_GROUP = exports.DEFAULT_OBSM_KEYS = exports.COLOR_ENCODINGS = exports.BREAKPOINTS = void 0;
7
- const LOCAL_STORAGE_KEY = exports.LOCAL_STORAGE_KEY = "CHERITA";
7
+ const LOCAL_STORAGE_KEY = exports.LOCAL_STORAGE_KEY = 'CHERITA';
8
8
  const PLOT_TYPES = exports.PLOT_TYPES = {
9
- SCATTERPLOT: "scatterplot",
10
- DOTPLOT: "dotplot",
11
- HEATMAP: "heatmap",
12
- MATRIXPLOT: "matrixplot",
13
- VIOLINPLOT: "violinplot"
9
+ SCATTERPLOT: 'scatterplot',
10
+ DOTPLOT: 'dotplot',
11
+ HEATMAP: 'heatmap',
12
+ MATRIXPLOT: 'matrixplot',
13
+ VIOLINPLOT: 'violinplot'
14
14
  };
15
15
  const COLOR_ENCODINGS = exports.COLOR_ENCODINGS = {
16
- VAR: "var",
17
- OBS: "obs"
16
+ VAR: 'var',
17
+ OBS: 'obs'
18
18
  };
19
19
  const OBS_TYPES = exports.OBS_TYPES = {
20
- CATEGORICAL: "categorical",
21
- DISCRETE: "discrete",
22
- CONTINUOUS: "continuous",
23
- BOOLEAN: "boolean"
20
+ CATEGORICAL: 'categorical',
21
+ DISCRETE: 'discrete',
22
+ CONTINUOUS: 'continuous',
23
+ BOOLEAN: 'boolean'
24
24
  };
25
25
  const VAR_SORT = exports.VAR_SORT = {
26
26
  NONE: null,
27
- NAME: "name",
28
- MATRIX: "matrix"
27
+ NAME: 'name',
28
+ MATRIX: 'matrix'
29
29
  };
30
30
  const VAR_SORT_ORDER = exports.VAR_SORT_ORDER = {
31
- ASC: "asc",
32
- DESC: "desc"
31
+ ASC: 'asc',
32
+ DESC: 'desc'
33
33
  };
34
34
  const SELECTED_POLYGON_FILLCOLOR = exports.SELECTED_POLYGON_FILLCOLOR = [107, 170, 209, 255 / 2];
35
35
  const UNSELECTED_POLYGON_FILLCOLOR = exports.UNSELECTED_POLYGON_FILLCOLOR = [167, 191, 211, 255 / 3];
36
36
  const SELECTION_MODES = exports.SELECTION_MODES = {
37
- SINGLE: "single",
38
- MULTIPLE: "multiple"
37
+ SINGLE: 'single',
38
+ MULTIPLE: 'multiple'
39
39
  };
40
40
  const VIOLIN_MODES = exports.VIOLIN_MODES = {
41
- MULTIKEY: "multikey",
42
- GROUPBY: "groupby"
41
+ MULTIKEY: 'multikey',
42
+ GROUPBY: 'groupby'
43
43
  };
44
44
  const MATRIXPLOT_SCALES = exports.MATRIXPLOT_SCALES = {
45
45
  NONE: {
46
46
  value: null,
47
- name: "None"
47
+ name: 'None'
48
48
  },
49
49
  GROUP: {
50
- value: "group",
51
- name: "Group"
50
+ value: 'group',
51
+ name: 'Group'
52
52
  },
53
53
  VAR: {
54
- value: "var",
55
- name: "Var"
54
+ value: 'var',
55
+ name: 'Var'
56
56
  }
57
57
  };
58
58
  const DOTPLOT_SCALES = exports.DOTPLOT_SCALES = {
59
59
  NONE: {
60
60
  value: null,
61
- name: "None"
61
+ name: 'None'
62
62
  },
63
63
  GROUP: {
64
- value: "group",
65
- name: "Group"
64
+ value: 'group',
65
+ name: 'Group'
66
66
  },
67
67
  VAR: {
68
- value: "var",
69
- name: "Var"
68
+ value: 'var',
69
+ name: 'Var'
70
70
  }
71
71
  };
72
72
  const VIOLINPLOT_SCALES = exports.VIOLINPLOT_SCALES = {
73
73
  WIDTH: {
74
- value: "width",
75
- name: "Width"
74
+ value: 'width',
75
+ name: 'Width'
76
76
  },
77
77
  COUNT: {
78
- value: "count",
79
- name: "Count"
78
+ value: 'count',
79
+ name: 'Count'
80
80
  }
81
81
  };
82
82
  const PSEUDOSPATIAL_PLOT_TYPES = exports.PSEUDOSPATIAL_PLOT_TYPES = {
83
- GENE: "gene",
84
- CATEGORICAL: "categorical",
85
- CONTINUOUS: "continuous",
86
- MASKS: "masks"
83
+ GENE: 'gene',
84
+ CATEGORICAL: 'categorical',
85
+ CONTINUOUS: 'continuous',
86
+ MASKS: 'masks'
87
87
  };
88
88
  const PSEUDOSPATIAL_CATEGORICAL_MODES = exports.PSEUDOSPATIAL_CATEGORICAL_MODES = {
89
89
  ACROSS: {
90
- value: "across",
91
- name: "% across sections"
90
+ value: 'across',
91
+ name: '% across sections'
92
92
  },
93
93
  WITHIN: {
94
- value: "within",
95
- name: "% within section"
94
+ value: 'within',
95
+ name: '% within section'
96
96
  }
97
97
  };
98
98
 
99
99
  // `default` cols to be shown out of accordion, at top of obslist
100
100
  // default values from cellxgene schema
101
- const DEFAULT_OBS_GROUP = exports.DEFAULT_OBS_GROUP = ["assay", "cell_type", "development_stage", "disease", "donor_id", "organism", "self_reported_ethnicity", "sex", "suspension_type", "tissue", "tissue_type"];
102
- const PLOTLY_MODEBAR_BUTTONS = exports.PLOTLY_MODEBAR_BUTTONS = ["toImage", "zoom2d", "pan2d", "zoomIn2d", "zoomOut2d", "autoScale2d", "resetScale2d"];
101
+ const DEFAULT_OBS_GROUP = exports.DEFAULT_OBS_GROUP = ['assay', 'cell_type', 'development_stage', 'disease', 'donor_id', 'organism', 'self_reported_ethnicity', 'sex', 'suspension_type', 'tissue', 'tissue_type'];
102
+ const PLOTLY_MODEBAR_BUTTONS = exports.PLOTLY_MODEBAR_BUTTONS = ['toImage', 'zoom2d', 'pan2d', 'zoomIn2d', 'zoomOut2d', 'autoScale2d', 'resetScale2d'];
103
103
  const BREAKPOINTS = exports.BREAKPOINTS = {
104
- LG: "(max-width: 991.98px)",
105
- XL: "(max-width: 1199.98px)"
104
+ LG: '(max-width: 991.98px)',
105
+ XL: '(max-width: 1199.98px)'
106
106
  };
107
107
 
108
108
  // In order of priority
109
- const DEFAULT_OBSM_KEYS = exports.DEFAULT_OBSM_KEYS = ["x_umap", "x_tsne", "x_scvi", "x_pca"];
109
+ const DEFAULT_OBSM_KEYS = exports.DEFAULT_OBSM_KEYS = ['x_umap', 'x_tsne', 'x_scvi', 'x_pca'];
@@ -43,7 +43,7 @@ const queryClient = new _reactQuery.QueryClient({
43
43
  })
44
44
  });
45
45
  // Type of queries to store responses
46
- const persistKeys = ["obs/cols", "var/names", "obsm/keys", "obs/bins", "obs/distribution"];
46
+ const persistKeys = ['obs/cols', 'var/names', 'obsm/keys', 'obs/bins', 'obs/distribution'];
47
47
  const persistOptions = {
48
48
  persister: (0, _querySyncStoragePersister.createSyncStoragePersister)({
49
49
  storage: window.localStorage
@@ -54,13 +54,13 @@ const persistOptions = {
54
54
  queryKey,
55
55
  state
56
56
  } = _ref;
57
- if (state.status === "success") {
57
+ if (state.status === 'success') {
58
58
  return persistKeys.includes(queryKey === null || queryKey === void 0 ? void 0 : queryKey[0]);
59
59
  }
60
60
  return false;
61
61
  }
62
62
  },
63
- buster: "1.4.1-dev.2025-10-23.e95b5a90" || "0.0.0"
63
+ buster: "1.4.1-dev.2025-10-23.55fbe6ff" || '0.0.0'
64
64
  // @TODO: add maxAge and api version numbers as buster
65
65
  };
66
66
  const initialDataset = {
@@ -44,7 +44,7 @@ function useFilteredDataDispatch() {
44
44
  }
45
45
  function filterReducer(filteredData, action) {
46
46
  switch (action.type) {
47
- case "set.obs.indices":
47
+ case 'set.obs.indices':
48
48
  {
49
49
  return _objectSpread(_objectSpread({}, filteredData), {}, {
50
50
  obsIndices: action.indices,
@@ -56,7 +56,7 @@ function filterReducer(filteredData, action) {
56
56
  }
57
57
  default:
58
58
  {
59
- throw Error("Unknown action: " + action.type);
59
+ throw Error('Unknown action: ' + action.type);
60
60
  }
61
61
  }
62
62
  }
@@ -43,7 +43,7 @@ const initialSettings = {
43
43
  },
44
44
  polygons: {},
45
45
  controls: {
46
- colorScale: "Viridis",
46
+ colorScale: 'Viridis',
47
47
  range: [0, 1],
48
48
  // normalized
49
49
  colorAxis: {
@@ -103,7 +103,7 @@ const validateSettings = settings => {
103
103
 
104
104
  // make sure selectedMultiVar are in vars
105
105
  if (settings.selectedMultiVar) {
106
- const notInVars = _lodash.default.differenceBy(settings.selectedMultiVar, settings.vars, "name");
106
+ const notInVars = _lodash.default.differenceBy(settings.selectedMultiVar, settings.vars, 'name');
107
107
  if (notInVars.length) {
108
108
  settings.vars = [...settings.vars, ...notInVars];
109
109
  }
@@ -173,7 +173,7 @@ function SettingsProvider(_ref2) {
173
173
 
174
174
  // If the buster is not set or does not match the current package version,
175
175
  // reset localSettings to avoid stale data
176
- if (!buster || buster !== "1.4.1-dev.2025-10-23.e95b5a90") {
176
+ if (!buster || buster !== "1.4.1-dev.2025-10-23.55fbe6ff") {
177
177
  localSettings = {};
178
178
  }
179
179
  const initSettings = (0, _react.useRef)(initializer({
@@ -187,9 +187,9 @@ function SettingsProvider(_ref2) {
187
187
  // If resolvedSettings is null, do not update settings
188
188
  if (resolvedSettings) {
189
189
  const validatedSettings = validateSettings(resolvedSettings);
190
- console.log("Initial settings:", validatedSettings);
190
+ console.log('Initial settings:', validatedSettings);
191
191
  dispatch({
192
- type: "init",
192
+ type: 'init',
193
193
  settings: validatedSettings
194
194
  });
195
195
  }
@@ -198,12 +198,12 @@ function SettingsProvider(_ref2) {
198
198
  if (canOverrideSettings && settings) {
199
199
  try {
200
200
  localStorage.setItem(DATASET_STORAGE_KEY, JSON.stringify(_objectSpread({
201
- buster: "1.4.1-dev.2025-10-23.e95b5a90" || "0.0.0",
201
+ buster: "1.4.1-dev.2025-10-23.55fbe6ff" || '0.0.0',
202
202
  timestamp: Date.now()
203
- }, _lodash.default.omit(settings, "data"))));
203
+ }, _lodash.default.omit(settings, 'data'))));
204
204
  } catch (err) {
205
- if (err.code === 22 || err.code === 1014 || err.name === "QuotaExceededError" || err.name === "NS_ERROR_DOM_QUOTA_REACHED") {
206
- console.err("Browser storage quota exceeded");
205
+ if (err.code === 22 || err.code === 1014 || err.name === 'QuotaExceededError' || err.name === 'NS_ERROR_DOM_QUOTA_REACHED') {
206
+ console.err('Browser storage quota exceeded');
207
207
  } else {
208
208
  console.err(err);
209
209
  }
@@ -224,17 +224,17 @@ function useSettings() {
224
224
  function useSettingsDispatch() {
225
225
  return (0, _react.useContext)(SettingsDispatchContext);
226
226
  }
227
- const OBS_DATA_KEYS = ["name", "type",
227
+ const OBS_DATA_KEYS = ['name', 'type',
228
228
  // categorical and numerical
229
- "codes", "codesMap", "values", "n_values", "value_counts",
229
+ 'codes', 'codesMap', 'values', 'n_values', 'value_counts',
230
230
  // numerical
231
- "bins", "min", "max", "mean", "median", "n_unique"];
231
+ 'bins', 'min', 'max', 'mean', 'median', 'n_unique'];
232
232
  const splitObs = obs => {
233
233
  if (!obs) return {
234
234
  settings: null,
235
235
  data: {}
236
236
  };
237
- const settings = _lodash.default.pick(obs, ["name", "omit", "bins"]);
237
+ const settings = _lodash.default.pick(obs, ['name', 'omit', 'bins']);
238
238
  const data = obs ? {
239
239
  [obs.name]: _lodash.default.pick(obs, OBS_DATA_KEYS)
240
240
  } : {};
@@ -250,16 +250,16 @@ const splitVar = v => {
250
250
  };
251
251
  let settings, data;
252
252
  if (v.isSet) {
253
- settings = _objectSpread(_objectSpread({}, _lodash.default.pick(v, ["name", "isSet"])), {}, {
253
+ settings = _objectSpread(_objectSpread({}, _lodash.default.pick(v, ['name', 'isSet'])), {}, {
254
254
  vars: _lodash.default.map(v.vars, vv => ({
255
255
  name: vv.name
256
256
  }))
257
257
  });
258
- data = _lodash.default.fromPairs(_lodash.default.map(v.vars, vv => [vv.name, _lodash.default.pick(vv, ["name", "index", "matrix_index"])]));
258
+ data = _lodash.default.fromPairs(_lodash.default.map(v.vars, vv => [vv.name, _lodash.default.pick(vv, ['name', 'index', 'matrix_index'])]));
259
259
  } else {
260
- settings = _lodash.default.pick(v, ["name", "isSet"]);
260
+ settings = _lodash.default.pick(v, ['name', 'isSet']);
261
261
  data = {
262
- [v.name]: _lodash.default.pick(v, ["name", "index", "matrix_index"])
262
+ [v.name]: _lodash.default.pick(v, ['name', 'index', 'matrix_index'])
263
263
  };
264
264
  }
265
265
  return {
@@ -269,11 +269,11 @@ const splitVar = v => {
269
269
  };
270
270
  function settingsReducer(settings, action) {
271
271
  switch (action.type) {
272
- case "init":
272
+ case 'init':
273
273
  {
274
274
  return action.settings;
275
275
  }
276
- case "select.obs":
276
+ case 'select.obs':
277
277
  {
278
278
  var _action$obs;
279
279
  const {
@@ -297,13 +297,13 @@ function settingsReducer(settings, action) {
297
297
  })
298
298
  });
299
299
  }
300
- case "select.obsm":
300
+ case 'select.obsm':
301
301
  {
302
302
  return _objectSpread(_objectSpread({}, settings), {}, {
303
303
  selectedObsm: action.obsm
304
304
  });
305
305
  }
306
- case "select.var":
306
+ case 'select.var':
307
307
  {
308
308
  const {
309
309
  settings: varSettings,
@@ -316,7 +316,7 @@ function settingsReducer(settings, action) {
316
316
  })
317
317
  }));
318
318
  }
319
- case "select.multivar":
319
+ case 'select.multivar':
320
320
  {
321
321
  const inMultiVar = settings.selectedMultiVar.some(v => v.name === action.var.name);
322
322
  if (inMultiVar) {
@@ -334,13 +334,13 @@ function settingsReducer(settings, action) {
334
334
  }));
335
335
  }
336
336
  }
337
- case "deselect.multivar":
337
+ case 'deselect.multivar':
338
338
  {
339
339
  return validateSettings(_objectSpread(_objectSpread({}, settings), {}, {
340
340
  selectedMultiVar: settings.selectedMultiVar.filter(v => v !== action.var.name)
341
341
  }));
342
342
  }
343
- case "toggle.multivar":
343
+ case 'toggle.multivar':
344
344
  {
345
345
  const inMultiVar = settings.selectedMultiVar.some(v => v.name === action.var.name);
346
346
  if (inMultiVar) {
@@ -360,13 +360,13 @@ function settingsReducer(settings, action) {
360
360
  }));
361
361
  }
362
362
  }
363
- case "set.colorEncoding":
363
+ case 'set.colorEncoding':
364
364
  {
365
365
  return validateSettings(_objectSpread(_objectSpread({}, settings), {}, {
366
366
  colorEncoding: action.value
367
367
  }));
368
368
  }
369
- case "reset.vars":
369
+ case 'reset.vars':
370
370
  {
371
371
  return validateSettings(_objectSpread(_objectSpread({}, settings), {}, {
372
372
  vars: [],
@@ -374,19 +374,19 @@ function settingsReducer(settings, action) {
374
374
  selectedMultiVar: []
375
375
  }));
376
376
  }
377
- case "reset.multiVar":
377
+ case 'reset.multiVar':
378
378
  {
379
379
  return validateSettings(_objectSpread(_objectSpread({}, settings), {}, {
380
380
  selectedMultiVar: []
381
381
  }));
382
382
  }
383
- case "reset.var":
383
+ case 'reset.var':
384
384
  {
385
385
  return validateSettings(_objectSpread(_objectSpread({}, settings), {}, {
386
386
  selectedVar: null
387
387
  }));
388
388
  }
389
- case "add.var":
389
+ case 'add.var':
390
390
  {
391
391
  if (settings.vars.find(v => v.name === action.var.name)) {
392
392
  return settings;
@@ -403,7 +403,7 @@ function settingsReducer(settings, action) {
403
403
  });
404
404
  }
405
405
  }
406
- case "remove.var":
406
+ case 'remove.var':
407
407
  {
408
408
  var _settings$selectedVar;
409
409
  const selectedVar = ((_settings$selectedVar = settings.selectedVar) === null || _settings$selectedVar === void 0 ? void 0 : _settings$selectedVar.name) === action.var.name ? null : settings.selectedVar;
@@ -414,7 +414,7 @@ function settingsReducer(settings, action) {
414
414
  selectedMultiVar: selectedMultiVar
415
415
  }));
416
416
  }
417
- case "add.varSet.var":
417
+ case 'add.varSet.var':
418
418
  {
419
419
  const varSet = settings.vars.find(s => s.isSet && s.name === action.varSet.name);
420
420
  if (!varSet) {
@@ -460,7 +460,7 @@ function settingsReducer(settings, action) {
460
460
  }));
461
461
  }
462
462
  }
463
- case "remove.varSet.var":
463
+ case 'remove.varSet.var':
464
464
  {
465
465
  const varSet = settings.vars.find(s => s.isSet && s.name === action.varSet.name);
466
466
  if (!varSet) {
@@ -512,7 +512,7 @@ function settingsReducer(settings, action) {
512
512
  }
513
513
  }
514
514
  }
515
- case "set.controls.colorScale":
515
+ case 'set.controls.colorScale':
516
516
  {
517
517
  return _objectSpread(_objectSpread({}, settings), {}, {
518
518
  controls: _objectSpread(_objectSpread({}, settings.controls), {}, {
@@ -520,7 +520,7 @@ function settingsReducer(settings, action) {
520
520
  })
521
521
  });
522
522
  }
523
- case "set.controls.range":
523
+ case 'set.controls.range':
524
524
  {
525
525
  return _objectSpread(_objectSpread({}, settings), {}, {
526
526
  controls: _objectSpread(_objectSpread({}, settings.controls), {}, {
@@ -528,7 +528,7 @@ function settingsReducer(settings, action) {
528
528
  })
529
529
  });
530
530
  }
531
- case "set.controls.colorAxis":
531
+ case 'set.controls.colorAxis':
532
532
  {
533
533
  return _objectSpread(_objectSpread({}, settings), {}, {
534
534
  controls: _objectSpread(_objectSpread({}, settings.controls), {}, {
@@ -536,7 +536,7 @@ function settingsReducer(settings, action) {
536
536
  })
537
537
  });
538
538
  }
539
- case "set.controls.colorAxis.crange":
539
+ case 'set.controls.colorAxis.crange':
540
540
  {
541
541
  return _objectSpread(_objectSpread({}, settings), {}, {
542
542
  controls: _objectSpread(_objectSpread({}, settings.controls), {}, {
@@ -547,7 +547,7 @@ function settingsReducer(settings, action) {
547
547
  })
548
548
  });
549
549
  }
550
- case "set.controls.colorAxis.cmin":
550
+ case 'set.controls.colorAxis.cmin':
551
551
  {
552
552
  return _objectSpread(_objectSpread({}, settings), {}, {
553
553
  controls: _objectSpread(_objectSpread({}, settings.controls), {}, {
@@ -557,7 +557,7 @@ function settingsReducer(settings, action) {
557
557
  })
558
558
  });
559
559
  }
560
- case "set.controls.colorAxis.cmax":
560
+ case 'set.controls.colorAxis.cmax':
561
561
  {
562
562
  return _objectSpread(_objectSpread({}, settings), {}, {
563
563
  controls: _objectSpread(_objectSpread({}, settings.controls), {}, {
@@ -567,7 +567,7 @@ function settingsReducer(settings, action) {
567
567
  })
568
568
  });
569
569
  }
570
- case "set.controls.scale":
570
+ case 'set.controls.scale':
571
571
  {
572
572
  return _objectSpread(_objectSpread({}, settings), {}, {
573
573
  controls: _objectSpread(_objectSpread({}, settings.controls), {}, {
@@ -577,7 +577,7 @@ function settingsReducer(settings, action) {
577
577
  })
578
578
  });
579
579
  }
580
- case "set.controls.meanOnlyExpressed":
580
+ case 'set.controls.meanOnlyExpressed':
581
581
  {
582
582
  return _objectSpread(_objectSpread({}, settings), {}, {
583
583
  controls: _objectSpread(_objectSpread({}, settings.controls), {}, {
@@ -585,7 +585,7 @@ function settingsReducer(settings, action) {
585
585
  })
586
586
  });
587
587
  }
588
- case "set.controls.expressionCutoff":
588
+ case 'set.controls.expressionCutoff':
589
589
  {
590
590
  return _objectSpread(_objectSpread({}, settings), {}, {
591
591
  controls: _objectSpread(_objectSpread({}, settings.controls), {}, {
@@ -593,7 +593,7 @@ function settingsReducer(settings, action) {
593
593
  })
594
594
  });
595
595
  }
596
- case "toggle.slice.obs":
596
+ case 'toggle.slice.obs':
597
597
  {
598
598
  if (settings.selectedObs && settings.selectedObs.name === action.obs.name) {
599
599
  return _objectSpread(_objectSpread({}, settings), {}, {
@@ -617,7 +617,7 @@ function settingsReducer(settings, action) {
617
617
  });
618
618
  }
619
619
  }
620
- case "toggle.slice.polygons":
620
+ case 'toggle.slice.polygons':
621
621
  {
622
622
  return _objectSpread(_objectSpread({}, settings), {}, {
623
623
  sliceBy: _objectSpread(_objectSpread({}, settings.sliceBy), {}, {
@@ -625,7 +625,7 @@ function settingsReducer(settings, action) {
625
625
  })
626
626
  });
627
627
  }
628
- case "disable.slice.polygons":
628
+ case 'disable.slice.polygons':
629
629
  {
630
630
  return _objectSpread(_objectSpread({}, settings), {}, {
631
631
  sliceBy: _objectSpread(_objectSpread({}, settings.sliceBy), {}, {
@@ -633,7 +633,7 @@ function settingsReducer(settings, action) {
633
633
  })
634
634
  });
635
635
  }
636
- case "add.label.obs":
636
+ case 'add.label.obs':
637
637
  {
638
638
  if (_lodash.default.includes(settings.labelObs, action.obs.name)) {
639
639
  return settings;
@@ -650,19 +650,19 @@ function settingsReducer(settings, action) {
650
650
  });
651
651
  }
652
652
  }
653
- case "remove.label.obs":
653
+ case 'remove.label.obs':
654
654
  {
655
655
  return validateSettings(_objectSpread(_objectSpread({}, settings), {}, {
656
656
  labelObs: settings.labelObs.filter(a => a !== action.obsName)
657
657
  }));
658
658
  }
659
- case "reset.label.obs":
659
+ case 'reset.label.obs':
660
660
  {
661
661
  return validateSettings(_objectSpread(_objectSpread({}, settings), {}, {
662
662
  labelObs: []
663
663
  }));
664
664
  }
665
- case "set.varSort":
665
+ case 'set.varSort':
666
666
  {
667
667
  return _objectSpread(_objectSpread({}, settings), {}, {
668
668
  varSort: _objectSpread(_objectSpread({}, settings.varSort), {}, {
@@ -673,7 +673,7 @@ function settingsReducer(settings, action) {
673
673
  })
674
674
  });
675
675
  }
676
- case "set.varSort.sort":
676
+ case 'set.varSort.sort':
677
677
  {
678
678
  return _objectSpread(_objectSpread({}, settings), {}, {
679
679
  varSort: _objectSpread(_objectSpread({}, settings.varSort), {}, {
@@ -683,7 +683,7 @@ function settingsReducer(settings, action) {
683
683
  })
684
684
  });
685
685
  }
686
- case "set.varSort.sortOrder":
686
+ case 'set.varSort.sortOrder':
687
687
  {
688
688
  return _objectSpread(_objectSpread({}, settings), {}, {
689
689
  varSort: _objectSpread(_objectSpread({}, settings.varSort), {}, {
@@ -693,7 +693,7 @@ function settingsReducer(settings, action) {
693
693
  })
694
694
  });
695
695
  }
696
- case "set.polygons":
696
+ case 'set.polygons':
697
697
  {
698
698
  return _objectSpread(_objectSpread({}, settings), {}, {
699
699
  polygons: _objectSpread(_objectSpread({}, settings.polygons), {}, {
@@ -701,7 +701,7 @@ function settingsReducer(settings, action) {
701
701
  })
702
702
  });
703
703
  }
704
- case "set.pseudospatial.maskSet":
704
+ case 'set.pseudospatial.maskSet':
705
705
  {
706
706
  return _objectSpread(_objectSpread({}, settings), {}, {
707
707
  pseudospatial: _objectSpread(_objectSpread({}, settings.pseudospatial), {}, {
@@ -709,7 +709,7 @@ function settingsReducer(settings, action) {
709
709
  })
710
710
  });
711
711
  }
712
- case "set.pseudospatial.maskValues":
712
+ case 'set.pseudospatial.maskValues':
713
713
  {
714
714
  return _objectSpread(_objectSpread({}, settings), {}, {
715
715
  pseudospatial: _objectSpread(_objectSpread({}, settings.pseudospatial), {}, {
@@ -717,7 +717,7 @@ function settingsReducer(settings, action) {
717
717
  })
718
718
  });
719
719
  }
720
- case "set.pseudospatial.categoricalMode":
720
+ case 'set.pseudospatial.categoricalMode':
721
721
  {
722
722
  return _objectSpread(_objectSpread({}, settings), {}, {
723
723
  pseudospatial: _objectSpread(_objectSpread({}, settings.pseudospatial), {}, {
@@ -725,7 +725,7 @@ function settingsReducer(settings, action) {
725
725
  })
726
726
  });
727
727
  }
728
- case "toggle.pseudospatial.refImg.visible":
728
+ case 'toggle.pseudospatial.refImg.visible':
729
729
  {
730
730
  return _objectSpread(_objectSpread({}, settings), {}, {
731
731
  pseudospatial: _objectSpread(_objectSpread({}, settings.pseudospatial), {}, {
@@ -735,7 +735,7 @@ function settingsReducer(settings, action) {
735
735
  })
736
736
  });
737
737
  }
738
- case "set.pseudospatial.refImg.opacity":
738
+ case 'set.pseudospatial.refImg.opacity':
739
739
  {
740
740
  return _objectSpread(_objectSpread({}, settings), {}, {
741
741
  pseudospatial: _objectSpread(_objectSpread({}, settings.pseudospatial), {}, {
@@ -747,7 +747,7 @@ function settingsReducer(settings, action) {
747
747
  }
748
748
  default:
749
749
  {
750
- throw Error("Unknown action: " + action.type);
750
+ throw Error('Unknown action: ' + action.type);
751
751
  }
752
752
  }
753
753
  }
@@ -37,7 +37,7 @@ const computeColor = (colormap, value) => {
37
37
  };
38
38
  const rgbToHex = color => {
39
39
  const [r, g, b] = color || [0, 0, 0, 0];
40
- return "#" + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1);
40
+ return '#' + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1);
41
41
  };
42
42
  exports.rgbToHex = rgbToHex;
43
43
  const useColor = () => {
@@ -54,7 +54,7 @@ const useColor = () => {
54
54
  colorEncoding = settings.colorEncoding,
55
55
  colorscale = null
56
56
  } = _ref;
57
- const colormap = colorscale || _colorscales.COLORSCALES[categorical ? "Accent" : settings.controls.colorScale];
57
+ const colormap = colorscale || _colorscales.COLORSCALES[categorical ? 'Accent' : settings.controls.colorScale];
58
58
  if (colorEncoding) {
59
59
  if (grayOut) {
60
60
  // Mix color with gray manually instead of chroma.mix to get better performance with deck.gl