@haniffalab/cherita-react 1.2.0-dev.2025-05-21.e8f5ce54 → 1.2.0-dev.2025-05-21.e57ef5f2

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 (75) hide show
  1. package/dist/cjs/components/dotplot/Dotplot.js +26 -19
  2. package/dist/cjs/components/dotplot/DotplotControls.js +17 -19
  3. package/dist/cjs/components/full-page/FullPage.js +9 -7
  4. package/dist/cjs/components/full-page/FullPagePseudospatial.js +9 -7
  5. package/dist/cjs/components/heatmap/Heatmap.js +22 -13
  6. package/dist/cjs/components/matrixplot/Matrixplot.js +22 -13
  7. package/dist/cjs/components/obs-list/ObsItem.js +37 -29
  8. package/dist/cjs/components/obs-list/ObsList.js +47 -44
  9. package/dist/cjs/components/obsm-list/ObsmList.js +9 -6
  10. package/dist/cjs/components/offcanvas/index.js +13 -9
  11. package/dist/cjs/components/pseudospatial/Pseudospatial.js +61 -53
  12. package/dist/cjs/components/pseudospatial/PseudospatialToolbar.js +17 -11
  13. package/dist/cjs/components/scatterplot/Scatterplot.js +52 -52
  14. package/dist/cjs/components/scatterplot/ScatterplotControls.js +3 -3
  15. package/dist/cjs/components/scatterplot/SpatialControls.js +4 -4
  16. package/dist/cjs/components/search-bar/SearchBar.js +12 -10
  17. package/dist/cjs/components/search-bar/SearchInfo.js +14 -13
  18. package/dist/cjs/components/search-bar/SearchResults.js +16 -14
  19. package/dist/cjs/components/var-list/VarItem.js +10 -7
  20. package/dist/cjs/components/var-list/VarList.js +14 -9
  21. package/dist/cjs/components/var-list/VarListToolbar.js +1 -2
  22. package/dist/cjs/components/var-list/VarSet.js +1 -2
  23. package/dist/cjs/components/violin/Violin.js +44 -35
  24. package/dist/cjs/context/DatasetContext.js +17 -11
  25. package/dist/cjs/context/FilterContext.js +9 -8
  26. package/dist/cjs/context/SettingsContext.js +169 -237
  27. package/dist/cjs/context/ZarrDataContext.js +1 -2
  28. package/dist/cjs/helpers/color-helper.js +3 -3
  29. package/dist/cjs/helpers/zarr-helper.js +15 -12
  30. package/dist/cjs/utils/Filter.js +13 -9
  31. package/dist/cjs/utils/Histogram.js +4 -3
  32. package/dist/cjs/utils/ImageViewer.js +1 -2
  33. package/dist/cjs/utils/Legend.js +3 -3
  34. package/dist/cjs/utils/LoadingIndicators.js +1 -1
  35. package/dist/cjs/utils/VirtualizedList.js +16 -13
  36. package/dist/cjs/utils/errors.js +20 -22
  37. package/dist/cjs/utils/requests.js +13 -10
  38. package/dist/cjs/utils/zarrData.js +12 -8
  39. package/dist/css/cherita.css +13 -9
  40. package/dist/css/cherita.css.map +1 -1
  41. package/dist/esm/components/dotplot/Dotplot.js +25 -17
  42. package/dist/esm/components/dotplot/DotplotControls.js +16 -17
  43. package/dist/esm/components/full-page/FullPage.js +8 -5
  44. package/dist/esm/components/full-page/FullPagePseudospatial.js +8 -5
  45. package/dist/esm/components/heatmap/Heatmap.js +21 -11
  46. package/dist/esm/components/matrixplot/Matrixplot.js +21 -11
  47. package/dist/esm/components/obs-list/ObsItem.js +36 -27
  48. package/dist/esm/components/obs-list/ObsList.js +46 -42
  49. package/dist/esm/components/obsm-list/ObsmList.js +8 -4
  50. package/dist/esm/components/offcanvas/index.js +13 -9
  51. package/dist/esm/components/pseudospatial/Pseudospatial.js +60 -51
  52. package/dist/esm/components/pseudospatial/PseudospatialToolbar.js +16 -9
  53. package/dist/esm/components/scatterplot/Scatterplot.js +51 -50
  54. package/dist/esm/components/scatterplot/ScatterplotControls.js +2 -1
  55. package/dist/esm/components/scatterplot/SpatialControls.js +3 -2
  56. package/dist/esm/components/search-bar/SearchBar.js +11 -8
  57. package/dist/esm/components/search-bar/SearchInfo.js +13 -11
  58. package/dist/esm/components/search-bar/SearchResults.js +15 -12
  59. package/dist/esm/components/var-list/VarItem.js +9 -5
  60. package/dist/esm/components/var-list/VarList.js +13 -7
  61. package/dist/esm/components/violin/Violin.js +43 -33
  62. package/dist/esm/context/DatasetContext.js +16 -9
  63. package/dist/esm/context/FilterContext.js +8 -6
  64. package/dist/esm/context/SettingsContext.js +168 -235
  65. package/dist/esm/helpers/color-helper.js +3 -3
  66. package/dist/esm/helpers/zarr-helper.js +15 -12
  67. package/dist/esm/utils/Filter.js +13 -9
  68. package/dist/esm/utils/Histogram.js +4 -3
  69. package/dist/esm/utils/Legend.js +2 -1
  70. package/dist/esm/utils/LoadingIndicators.js +1 -1
  71. package/dist/esm/utils/VirtualizedList.js +15 -11
  72. package/dist/esm/utils/errors.js +20 -22
  73. package/dist/esm/utils/requests.js +13 -10
  74. package/dist/esm/utils/zarrData.js +12 -8
  75. package/package.json +4 -2
@@ -1,3 +1,8 @@
1
+ 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; }
2
+ 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; }
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
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
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); }
1
6
  import React, { createContext, useContext, useEffect, useReducer } from "react";
2
7
  import _ from "lodash";
3
8
  import { COLOR_ENCODINGS, DOTPLOT_SCALES, LOCAL_STORAGE_KEY, MATRIXPLOT_SCALES, OBS_TYPES, PSEUDOSPATIAL_CATEGORICAL_MODES, VAR_SORT, VAR_SORT_ORDER, VIOLINPLOT_SCALES } from "../constants/constants";
@@ -66,7 +71,7 @@ export function SettingsProvider(_ref2) {
66
71
  canOverrideSettings,
67
72
  children
68
73
  } = _ref2;
69
- const DATASET_STORAGE_KEY = `${LOCAL_STORAGE_KEY}-${dataset_url}`;
74
+ const DATASET_STORAGE_KEY = "".concat(LOCAL_STORAGE_KEY, "-").concat(dataset_url);
70
75
  // Use localStorage directly instead of useLocalStorage due to unnecessary re-renders
71
76
  // https://github.com/uidotdev/usehooks/issues/157
72
77
  const localSettings = JSON.parse(localStorage.getItem(DATASET_STORAGE_KEY)) || {};
@@ -104,133 +109,118 @@ function settingsReducer(settings, action) {
104
109
  switch (action.type) {
105
110
  case "select.obs":
106
111
  {
107
- return {
108
- ...settings,
112
+ var _action$obs;
113
+ return _objectSpread(_objectSpread({}, settings), {}, {
109
114
  selectedObs: action.obs,
110
- controls: {
111
- ...settings.controls,
112
- range: action.obs?.type === OBS_TYPES.CATEGORICAL ? [0, 1] : settings.controls.range
113
- },
115
+ controls: _objectSpread(_objectSpread({}, settings.controls), {}, {
116
+ range: ((_action$obs = action.obs) === null || _action$obs === void 0 ? void 0 : _action$obs.type) === OBS_TYPES.CATEGORICAL ? [0, 1] : settings.controls.range
117
+ }),
114
118
  colorEncoding: settings.colorEncoding === COLOR_ENCODINGS.OBS && !action.obs ? null : settings.colorEncoding,
115
- sliceBy: {
116
- ...settings.sliceBy,
119
+ sliceBy: _objectSpread(_objectSpread({}, settings.sliceBy), {}, {
117
120
  obs: action.obs ? settings.sliceBy.obs : false
118
- }
119
- };
121
+ })
122
+ });
120
123
  }
121
124
  case "select.obsm":
122
125
  {
123
- return {
124
- ...settings,
126
+ return _objectSpread(_objectSpread({}, settings), {}, {
125
127
  selectedObsm: action.obsm
126
- };
128
+ });
127
129
  }
128
130
  case "select.var":
129
131
  {
130
132
  if (settings.vars.find(v => _.isEqual(v, action.var))) {
131
- return {
132
- ...settings,
133
+ return _objectSpread(_objectSpread({}, settings), {}, {
133
134
  selectedVar: action.var
134
- };
135
+ });
135
136
  } else {
136
- return {
137
- ...settings,
137
+ return _objectSpread(_objectSpread({}, settings), {}, {
138
138
  selectedVar: action.var,
139
139
  vars: [...settings.vars, action.var]
140
- };
140
+ });
141
141
  }
142
142
  }
143
143
  case "select.multivar":
144
144
  {
145
145
  const vars = settings.vars.find(v => _.isEqual(v, action.var)) ? settings.vars : [...settings.vars, action.var];
146
146
  if (settings.selectedMultiVar.find(v => _.isEqual(v, action.var))) {
147
- return {
148
- ...settings,
147
+ return _objectSpread(_objectSpread({}, settings), {}, {
149
148
  vars: vars
150
- };
149
+ });
151
150
  } else {
152
- return {
153
- ...settings,
151
+ return _objectSpread(_objectSpread({}, settings), {}, {
154
152
  selectedMultiVar: [...settings.selectedMultiVar, action.var],
155
153
  vars: vars
156
- };
154
+ });
157
155
  }
158
156
  }
159
157
  case "deselect.multivar":
160
158
  {
161
- return {
162
- ...settings,
159
+ return _objectSpread(_objectSpread({}, settings), {}, {
163
160
  selectedMultiVar: settings.selectedMultiVar.filter(v => v !== action.var.name)
164
- };
161
+ });
165
162
  }
166
163
  case "toggle.multivar":
167
164
  {
168
165
  const inMultiVar = settings.selectedMultiVar.some(v => v.name === action.var.name);
169
166
  if (inMultiVar) {
170
- return {
171
- ...settings,
167
+ return _objectSpread(_objectSpread({}, settings), {}, {
172
168
  selectedMultiVar: settings.selectedMultiVar.filter(v => v.name !== action.var.name)
173
- };
169
+ });
174
170
  } else {
175
- return {
176
- ...settings,
171
+ return _objectSpread(_objectSpread({}, settings), {}, {
177
172
  selectedMultiVar: [...settings.selectedMultiVar, action.var]
178
- };
173
+ });
179
174
  }
180
175
  }
181
176
  case "set.colorEncoding":
182
177
  {
183
- return {
184
- ...settings,
178
+ return _objectSpread(_objectSpread({}, settings), {}, {
185
179
  colorEncoding: action.value
186
- };
180
+ });
187
181
  }
188
182
  case "reset.vars":
189
183
  {
190
- return {
191
- ...settings,
184
+ return _objectSpread(_objectSpread({}, settings), {}, {
192
185
  vars: [],
193
186
  selectedVar: null,
194
187
  selectedMultiVar: []
195
- };
188
+ });
196
189
  }
197
190
  case "reset.multiVar":
198
191
  {
199
- return {
200
- ...settings,
192
+ return _objectSpread(_objectSpread({}, settings), {}, {
201
193
  selectedMultiVar: [],
202
194
  colorEncoding: settings.colorEncoding === COLOR_ENCODINGS.VAR ? null : settings.colorEncoding
203
- };
195
+ });
204
196
  }
205
197
  case "reset.var":
206
198
  {
207
- return {
208
- ...settings,
199
+ return _objectSpread(_objectSpread({}, settings), {}, {
209
200
  selectedVar: null,
210
201
  colorEncoding: settings.colorEncoding === COLOR_ENCODINGS.VAR ? null : settings.colorEncoding
211
- };
202
+ });
212
203
  }
213
204
  case "add.var":
214
205
  {
215
206
  if (settings.vars.find(v => v.name === action.var.name)) {
216
207
  return settings;
217
208
  } else {
218
- return {
219
- ...settings,
209
+ return _objectSpread(_objectSpread({}, settings), {}, {
220
210
  vars: [...settings.vars, action.var]
221
- };
211
+ });
222
212
  }
223
213
  }
224
214
  case "remove.var":
225
215
  {
226
- const selectedVar = settings.selectedVar?.name === action.var.name ? null : settings.selectedVar;
216
+ var _settings$selectedVar;
217
+ const selectedVar = ((_settings$selectedVar = settings.selectedVar) === null || _settings$selectedVar === void 0 ? void 0 : _settings$selectedVar.name) === action.var.name ? null : settings.selectedVar;
227
218
  const selectedMultiVar = settings.selectedMultiVar.filter(v => v.name !== action.var.name);
228
- return {
229
- ...settings,
219
+ return _objectSpread(_objectSpread({}, settings), {}, {
230
220
  vars: settings.vars.filter(a => a.name !== action.var.name),
231
221
  selectedVar: selectedVar,
232
222
  selectedMultiVar: selectedMultiVar
233
- };
223
+ });
234
224
  }
235
225
  case "add.varSet.var":
236
226
  {
@@ -241,37 +231,34 @@ function settingsReducer(settings, action) {
241
231
  if (varSet.vars.some(v => v.name === action.var.name)) {
242
232
  return settings;
243
233
  } else {
234
+ var _settings$selectedVar2;
244
235
  const varSetVars = [...varSet.vars, action.var];
245
236
  const vars = settings.vars.map(v => {
246
237
  if (v.name === varSet.name) {
247
- return {
248
- ...v,
238
+ return _objectSpread(_objectSpread({}, v), {}, {
249
239
  vars: varSetVars
250
- };
240
+ });
251
241
  } else {
252
242
  return v;
253
243
  }
254
244
  });
255
- const selectedVar = settings.selectedVar?.name === action.varSet.name ? {
256
- ...varSet,
245
+ const selectedVar = ((_settings$selectedVar2 = settings.selectedVar) === null || _settings$selectedVar2 === void 0 ? void 0 : _settings$selectedVar2.name) === action.varSet.name ? _objectSpread(_objectSpread({}, varSet), {}, {
257
246
  vars: varSetVars
258
- } : settings.selectedVar;
247
+ }) : settings.selectedVar;
259
248
  const selectedMultiVar = settings.selectedMultiVar.map(v => {
260
249
  if (v.name === varSet.name) {
261
- return {
262
- ...v,
250
+ return _objectSpread(_objectSpread({}, v), {}, {
263
251
  vars: varSetVars
264
- };
252
+ });
265
253
  } else {
266
254
  return v;
267
255
  }
268
256
  });
269
- return {
270
- ...settings,
257
+ return _objectSpread(_objectSpread({}, settings), {}, {
271
258
  vars: vars,
272
259
  selectedVar: selectedVar,
273
260
  selectedMultiVar: selectedMultiVar
274
- };
261
+ });
275
262
  }
276
263
  }
277
264
  case "remove.varSet.var":
@@ -286,306 +273,252 @@ function settingsReducer(settings, action) {
286
273
  const varSetVars = varSet.vars.filter(v => v.name !== action.var.name);
287
274
  const vars = settings.vars.map(v => {
288
275
  if (v.name === varSet.name) {
289
- return {
290
- ...v,
276
+ return _objectSpread(_objectSpread({}, v), {}, {
291
277
  vars: varSetVars
292
- };
278
+ });
293
279
  } else {
294
280
  return v;
295
281
  }
296
282
  });
297
283
  // Remove from selected if varSet vars is empty
298
284
  if (!varSetVars.length) {
299
- const selectedVar = settings.selectedVar?.name === action.varSet.name ? null : settings.selectedVar;
285
+ var _settings$selectedVar3;
286
+ const selectedVar = ((_settings$selectedVar3 = settings.selectedVar) === null || _settings$selectedVar3 === void 0 ? void 0 : _settings$selectedVar3.name) === action.varSet.name ? null : settings.selectedVar;
300
287
  const selectedMultiVar = settings.selectedMultiVar.filter(v => v.name !== action.varSet.name);
301
- return {
302
- ...settings,
288
+ return _objectSpread(_objectSpread({}, settings), {}, {
303
289
  vars: vars,
304
290
  selectedVar: selectedVar,
305
291
  selectedMultiVar: selectedMultiVar
306
- };
292
+ });
307
293
  } else {
294
+ var _settings$selectedVar4;
308
295
  // Update selected if varSet is selected
309
- const selectedVar = settings.selectedVar?.name === action.varSet.name ? {
310
- ...varSet,
296
+ const selectedVar = ((_settings$selectedVar4 = settings.selectedVar) === null || _settings$selectedVar4 === void 0 ? void 0 : _settings$selectedVar4.name) === action.varSet.name ? _objectSpread(_objectSpread({}, varSet), {}, {
311
297
  vars: varSetVars
312
- } : settings.selectedVar;
298
+ }) : settings.selectedVar;
313
299
  const selectedMultiVar = settings.selectedMultiVar.map(v => {
314
300
  if (v.name === varSet.name) {
315
- return {
316
- ...v,
301
+ return _objectSpread(_objectSpread({}, v), {}, {
317
302
  vars: varSetVars
318
- };
303
+ });
319
304
  } else {
320
305
  return v;
321
306
  }
322
307
  });
323
- return {
324
- ...settings,
308
+ return _objectSpread(_objectSpread({}, settings), {}, {
325
309
  vars: vars,
326
310
  selectedVar: selectedVar,
327
311
  selectedMultiVar: selectedMultiVar
328
- };
312
+ });
329
313
  }
330
314
  }
331
315
  }
332
316
  case "set.controls.colorScale":
333
317
  {
334
- return {
335
- ...settings,
336
- controls: {
337
- ...settings.controls,
318
+ return _objectSpread(_objectSpread({}, settings), {}, {
319
+ controls: _objectSpread(_objectSpread({}, settings.controls), {}, {
338
320
  colorScale: action.colorScale
339
- }
340
- };
321
+ })
322
+ });
341
323
  }
342
324
  case "set.controls.valueRange":
343
325
  {
344
- return {
345
- ...settings,
346
- controls: {
347
- ...settings.controls,
326
+ return _objectSpread(_objectSpread({}, settings), {}, {
327
+ controls: _objectSpread(_objectSpread({}, settings.controls), {}, {
348
328
  valueRange: action.valueRange
349
- }
350
- };
329
+ })
330
+ });
351
331
  }
352
332
  case "set.controls.range":
353
333
  {
354
- return {
355
- ...settings,
356
- controls: {
357
- ...settings.controls,
334
+ return _objectSpread(_objectSpread({}, settings), {}, {
335
+ controls: _objectSpread(_objectSpread({}, settings.controls), {}, {
358
336
  range: action.range
359
- }
360
- };
337
+ })
338
+ });
361
339
  }
362
340
  case "set.controls.colorAxis":
363
341
  {
364
- return {
365
- ...settings,
366
- controls: {
367
- ...settings.controls,
342
+ return _objectSpread(_objectSpread({}, settings), {}, {
343
+ controls: _objectSpread(_objectSpread({}, settings.controls), {}, {
368
344
  colorAxis: action.colorAxis
369
- }
370
- };
345
+ })
346
+ });
371
347
  }
372
348
  case "set.controls.colorAxis.crange":
373
349
  {
374
- return {
375
- ...settings,
376
- controls: {
377
- ...settings.controls,
378
- colorAxis: {
379
- ...settings.controls.colorAxis,
350
+ return _objectSpread(_objectSpread({}, settings), {}, {
351
+ controls: _objectSpread(_objectSpread({}, settings.controls), {}, {
352
+ colorAxis: _objectSpread(_objectSpread({}, settings.controls.colorAxis), {}, {
380
353
  cmin: action.cmin,
381
354
  cmax: action.cmax
382
- }
383
- }
384
- };
355
+ })
356
+ })
357
+ });
385
358
  }
386
359
  case "set.controls.colorAxis.cmin":
387
360
  {
388
- return {
389
- ...settings,
390
- controls: {
391
- ...settings.controls,
392
- colorAxis: {
393
- ...settings.controls.colorAxis,
361
+ return _objectSpread(_objectSpread({}, settings), {}, {
362
+ controls: _objectSpread(_objectSpread({}, settings.controls), {}, {
363
+ colorAxis: _objectSpread(_objectSpread({}, settings.controls.colorAxis), {}, {
394
364
  cmin: action.cmin
395
- }
396
- }
397
- };
365
+ })
366
+ })
367
+ });
398
368
  }
399
369
  case "set.controls.colorAxis.cmax":
400
370
  {
401
- return {
402
- ...settings,
403
- controls: {
404
- ...settings.controls,
405
- colorAxis: {
406
- ...settings.controls.colorAxis,
371
+ return _objectSpread(_objectSpread({}, settings), {}, {
372
+ controls: _objectSpread(_objectSpread({}, settings.controls), {}, {
373
+ colorAxis: _objectSpread(_objectSpread({}, settings.controls.colorAxis), {}, {
407
374
  cmax: action.cmax
408
- }
409
- }
410
- };
375
+ })
376
+ })
377
+ });
411
378
  }
412
379
  case "set.controls.scale":
413
380
  {
414
- return {
415
- ...settings,
416
- controls: {
417
- ...settings.controls,
418
- scale: {
419
- ...settings.controls.scale,
381
+ return _objectSpread(_objectSpread({}, settings), {}, {
382
+ controls: _objectSpread(_objectSpread({}, settings.controls), {}, {
383
+ scale: _objectSpread(_objectSpread({}, settings.controls.scale), {}, {
420
384
  [action.plot]: action.scale
421
- }
422
- }
423
- };
385
+ })
386
+ })
387
+ });
424
388
  }
425
389
  case "set.controls.meanOnlyExpressed":
426
390
  {
427
- return {
428
- ...settings,
429
- controls: {
430
- ...settings.controls,
391
+ return _objectSpread(_objectSpread({}, settings), {}, {
392
+ controls: _objectSpread(_objectSpread({}, settings.controls), {}, {
431
393
  meanOnlyExpressed: action.meanOnlyExpressed
432
- }
433
- };
394
+ })
395
+ });
434
396
  }
435
397
  case "set.controls.expressionCutoff":
436
398
  {
437
- return {
438
- ...settings,
439
- controls: {
440
- ...settings.controls,
399
+ return _objectSpread(_objectSpread({}, settings), {}, {
400
+ controls: _objectSpread(_objectSpread({}, settings.controls), {}, {
441
401
  expressionCutoff: action.expressionCutoff
442
- }
443
- };
402
+ })
403
+ });
444
404
  }
445
405
  case "toggle.slice.obs":
446
406
  {
447
407
  if (_.isEqual(settings.selectedObs, action.obs)) {
448
- return {
449
- ...settings,
450
- sliceBy: {
451
- ...settings.sliceBy,
408
+ return _objectSpread(_objectSpread({}, settings), {}, {
409
+ sliceBy: _objectSpread(_objectSpread({}, settings.sliceBy), {}, {
452
410
  obs: !settings.sliceBy.obs
453
- }
454
- };
411
+ })
412
+ });
455
413
  } else {
456
- return {
457
- ...settings,
414
+ return _objectSpread(_objectSpread({}, settings), {}, {
458
415
  selectedObs: action.obs,
459
- sliceBy: {
460
- ...settings.sliceBy,
416
+ sliceBy: _objectSpread(_objectSpread({}, settings.sliceBy), {}, {
461
417
  obs: true
462
- }
463
- };
418
+ })
419
+ });
464
420
  }
465
421
  }
466
422
  case "toggle.slice.polygons":
467
423
  {
468
- return {
469
- ...settings,
470
- sliceBy: {
471
- ...settings.sliceBy,
424
+ return _objectSpread(_objectSpread({}, settings), {}, {
425
+ sliceBy: _objectSpread(_objectSpread({}, settings.sliceBy), {}, {
472
426
  polygons: !settings.sliceBy.polygons
473
- }
474
- };
427
+ })
428
+ });
475
429
  }
476
430
  case "disable.slice.polygons":
477
431
  {
478
- return {
479
- ...settings,
480
- sliceBy: {
481
- ...settings.sliceBy,
432
+ return _objectSpread(_objectSpread({}, settings), {}, {
433
+ sliceBy: _objectSpread(_objectSpread({}, settings.sliceBy), {}, {
482
434
  polygons: false
483
- }
484
- };
435
+ })
436
+ });
485
437
  }
486
438
  case "add.label.obs":
487
439
  {
488
440
  if (settings.labelObs.find(i => _.isEqual(i, action.obs))) {
489
441
  return settings;
490
442
  } else {
491
- return {
492
- ...settings,
443
+ return _objectSpread(_objectSpread({}, settings), {}, {
493
444
  labelObs: [...settings.labelObs, action.obs]
494
- };
445
+ });
495
446
  }
496
447
  }
497
448
  case "remove.label.obs":
498
449
  {
499
- return {
500
- ...settings,
450
+ return _objectSpread(_objectSpread({}, settings), {}, {
501
451
  labelObs: settings.labelObs.filter(a => a.name !== action.obsName)
502
- };
452
+ });
503
453
  }
504
454
  case "reset.label.obs":
505
455
  {
506
- return {
507
- ...settings,
456
+ return _objectSpread(_objectSpread({}, settings), {}, {
508
457
  labelObs: []
509
- };
458
+ });
510
459
  }
511
460
  case "set.varSort":
512
461
  {
513
- return {
514
- ...settings,
515
- varSort: {
516
- ...settings.varSort,
462
+ return _objectSpread(_objectSpread({}, settings), {}, {
463
+ varSort: _objectSpread(_objectSpread({}, settings.varSort), {}, {
517
464
  [action.var]: {
518
465
  sort: action.sort,
519
466
  sortOrder: action.sortOrder
520
467
  }
521
- }
522
- };
468
+ })
469
+ });
523
470
  }
524
471
  case "set.varSort.sort":
525
472
  {
526
- return {
527
- ...settings,
528
- varSort: {
529
- ...settings.varSort,
530
- [action.var]: {
531
- ...settings.varSort[action.var],
473
+ return _objectSpread(_objectSpread({}, settings), {}, {
474
+ varSort: _objectSpread(_objectSpread({}, settings.varSort), {}, {
475
+ [action.var]: _objectSpread(_objectSpread({}, settings.varSort[action.var]), {}, {
532
476
  sort: action.sort
533
- }
534
- }
535
- };
477
+ })
478
+ })
479
+ });
536
480
  }
537
481
  case "set.varSort.sortOrder":
538
482
  {
539
- return {
540
- ...settings,
541
- varSort: {
542
- ...settings.varSort,
543
- [action.var]: {
544
- ...settings.varSort[action.var],
483
+ return _objectSpread(_objectSpread({}, settings), {}, {
484
+ varSort: _objectSpread(_objectSpread({}, settings.varSort), {}, {
485
+ [action.var]: _objectSpread(_objectSpread({}, settings.varSort[action.var]), {}, {
545
486
  sortOrder: action.sortOrder
546
- }
547
- }
548
- };
487
+ })
488
+ })
489
+ });
549
490
  }
550
491
  case "set.polygons":
551
492
  {
552
- return {
553
- ...settings,
554
- polygons: {
555
- ...settings.polygons,
493
+ return _objectSpread(_objectSpread({}, settings), {}, {
494
+ polygons: _objectSpread(_objectSpread({}, settings.polygons), {}, {
556
495
  [action.obsm]: action.polygons
557
- }
558
- };
496
+ })
497
+ });
559
498
  }
560
499
  case "set.pseudospatial.maskSet":
561
500
  {
562
- return {
563
- ...settings,
564
- pseudospatial: {
565
- ...settings.pseudospatial,
501
+ return _objectSpread(_objectSpread({}, settings), {}, {
502
+ pseudospatial: _objectSpread(_objectSpread({}, settings.pseudospatial), {}, {
566
503
  maskSet: action.maskSet
567
- }
568
- };
504
+ })
505
+ });
569
506
  }
570
507
  case "set.pseudospatial.maskValues":
571
508
  {
572
- return {
573
- ...settings,
574
- pseudospatial: {
575
- ...settings.pseudospatial,
509
+ return _objectSpread(_objectSpread({}, settings), {}, {
510
+ pseudospatial: _objectSpread(_objectSpread({}, settings.pseudospatial), {}, {
576
511
  maskValues: action.maskValues
577
- }
578
- };
512
+ })
513
+ });
579
514
  }
580
515
  case "set.pseudospatial.categoricalMode":
581
516
  {
582
- return {
583
- ...settings,
584
- pseudospatial: {
585
- ...settings.pseudospatial,
517
+ return _objectSpread(_objectSpread({}, settings), {}, {
518
+ pseudospatial: _objectSpread(_objectSpread({}, settings.pseudospatial), {}, {
586
519
  categoricalMode: action.categoricalMode
587
- }
588
- };
520
+ })
521
+ });
589
522
  }
590
523
  default:
591
524
  {
@@ -3,9 +3,9 @@ import { COLORSCALES } from "../constants/colorscales";
3
3
  import { useSettings } from "../context/SettingsContext";
4
4
  const GRAY = [214, 212, 212];
5
5
  const parseHexColor = color => {
6
- const r = parseInt(color?.substring(1, 3), 16);
7
- const g = parseInt(color?.substring(3, 5), 16);
8
- const b = parseInt(color?.substring(5, 7), 16);
6
+ const r = parseInt(color === null || color === void 0 ? void 0 : color.substring(1, 3), 16);
7
+ const g = parseInt(color === null || color === void 0 ? void 0 : color.substring(3, 5), 16);
8
+ const b = parseInt(color === null || color === void 0 ? void 0 : color.substring(5, 7), 16);
9
9
  return [r, g, b];
10
10
  };
11
11
  const interpolateColor = (color1, color2, factor) => {