@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.
- package/README.md +1 -1
- package/dist/cjs/components/controls/Controls.js +4 -4
- package/dist/cjs/components/dotplot/Dotplot.js +8 -8
- package/dist/cjs/components/dotplot/DotplotControls.js +5 -5
- package/dist/cjs/components/full-page/FullPage.js +1 -2
- package/dist/cjs/components/full-page/PlotAlert.js +1 -1
- package/dist/cjs/components/full-page/PlotTypeSelector.js +13 -13
- package/dist/cjs/components/heatmap/Heatmap.js +7 -7
- package/dist/cjs/components/icons/DotPlotIcon.js +1 -1
- package/dist/cjs/components/icons/HeatmapIcon.js +1 -1
- package/dist/cjs/components/icons/MatrixPlotIcon.1.js +1 -1
- package/dist/cjs/components/icons/MatrixPlotIcon.js +1 -1
- package/dist/cjs/components/icons/ScatterplotIcon.1.js +1 -1
- package/dist/cjs/components/icons/ScatterplotIcon.js +1 -1
- package/dist/cjs/components/icons/ViolinPlotIcon.js +1 -1
- package/dist/cjs/components/matrixplot/Matrixplot.js +7 -7
- package/dist/cjs/components/obs-list/ObsItem.js +19 -19
- package/dist/cjs/components/obs-list/ObsList.js +17 -17
- package/dist/cjs/components/obsm-list/ObsmList.js +7 -7
- package/dist/cjs/components/pseudospatial/Pseudospatial.js +16 -16
- package/dist/cjs/components/pseudospatial/PseudospatialToolbar.js +10 -10
- package/dist/cjs/components/scatterplot/Scatterplot.js +16 -16
- package/dist/cjs/components/scatterplot/ScatterplotControls.js +1 -1
- package/dist/cjs/components/scatterplot/SpatialControls.js +9 -9
- package/dist/cjs/components/scatterplot/Toolbox.js +4 -4
- package/dist/cjs/components/search-bar/SearchBar.js +14 -14
- package/dist/cjs/components/search-bar/SearchInfo.js +3 -3
- package/dist/cjs/components/search-bar/SearchResults.js +2 -2
- package/dist/cjs/components/toolbar/Toolbar.js +3 -3
- package/dist/cjs/components/var-list/VarItem.js +15 -15
- package/dist/cjs/components/var-list/VarList.js +5 -5
- package/dist/cjs/components/var-list/VarListToolbar.js +4 -4
- package/dist/cjs/components/var-list/VarSet.js +13 -13
- package/dist/cjs/components/violin/Violin.js +10 -10
- package/dist/cjs/constants/colorscales.js +19 -19
- package/dist/cjs/constants/constants.js +47 -47
- package/dist/cjs/context/DatasetContext.js +3 -3
- package/dist/cjs/context/FilterContext.js +2 -2
- package/dist/cjs/context/SettingsContext.js +57 -57
- package/dist/cjs/helpers/color-helper.js +2 -2
- package/dist/cjs/helpers/zarr-helper.js +3 -3
- package/dist/cjs/utils/Filter.js +1 -1
- package/dist/cjs/utils/Histogram.js +2 -2
- package/dist/cjs/utils/ImageViewer.js +2 -2
- package/dist/cjs/utils/Legend.js +1 -1
- package/dist/cjs/utils/LoadingIndicators.js +1 -1
- package/dist/cjs/utils/Resolver.js +7 -7
- package/dist/cjs/utils/Skeleton.js +1 -1
- package/dist/cjs/utils/StyledTooltip.js +5 -5
- package/dist/cjs/utils/VirtualizedList.js +7 -7
- package/dist/cjs/utils/errors.js +15 -15
- package/dist/cjs/utils/requests.js +5 -5
- package/dist/cjs/utils/search.js +4 -4
- package/dist/cjs/utils/string.js +6 -6
- package/dist/cjs/utils/zarrData.js +5 -5
- package/dist/css/cherita.css +21 -20
- package/dist/css/cherita.css.map +1 -1
- package/dist/esm/components/controls/Controls.js +9 -9
- package/dist/esm/components/dotplot/Dotplot.js +21 -21
- package/dist/esm/components/dotplot/DotplotControls.js +9 -9
- package/dist/esm/components/full-page/FullPage.js +22 -23
- package/dist/esm/components/full-page/PlotAlert.js +5 -5
- package/dist/esm/components/full-page/PlotTypeSelector.js +21 -21
- package/dist/esm/components/heatmap/Heatmap.js +20 -20
- package/dist/esm/components/heatmap/HeatmapControls.js +2 -2
- package/dist/esm/components/icons/DotPlotIcon.js +1 -1
- package/dist/esm/components/icons/HeatmapIcon.js +1 -1
- package/dist/esm/components/icons/MatrixPlotIcon.1.js +1 -1
- package/dist/esm/components/icons/MatrixPlotIcon.js +1 -1
- package/dist/esm/components/icons/ScatterplotIcon.1.js +1 -1
- package/dist/esm/components/icons/ScatterplotIcon.js +1 -1
- package/dist/esm/components/icons/ViolinPlotIcon.js +1 -1
- package/dist/esm/components/matrixplot/Matrixplot.js +20 -20
- package/dist/esm/components/matrixplot/MatrixplotControls.js +2 -2
- package/dist/esm/components/obs-list/ObsItem.js +37 -37
- package/dist/esm/components/obs-list/ObsList.js +34 -34
- package/dist/esm/components/obs-list/ObsToolbar.js +1 -1
- package/dist/esm/components/obsm-list/ObsmList.js +15 -15
- package/dist/esm/components/offcanvas/index.js +6 -6
- package/dist/esm/components/pseudospatial/Pseudospatial.js +31 -31
- package/dist/esm/components/pseudospatial/PseudospatialToolbar.js +17 -17
- package/dist/esm/components/scatterplot/Scatterplot.js +38 -38
- package/dist/esm/components/scatterplot/ScatterplotControls.js +9 -9
- package/dist/esm/components/scatterplot/SpatialControls.js +23 -23
- package/dist/esm/components/scatterplot/Toolbox.js +7 -7
- package/dist/esm/components/search-bar/SearchBar.js +27 -27
- package/dist/esm/components/search-bar/SearchInfo.js +14 -14
- package/dist/esm/components/search-bar/SearchResults.js +10 -10
- package/dist/esm/components/toolbar/Toolbar.js +6 -6
- package/dist/esm/components/var-list/VarItem.js +27 -27
- package/dist/esm/components/var-list/VarList.js +21 -21
- package/dist/esm/components/var-list/VarListToolbar.js +10 -10
- package/dist/esm/components/var-list/VarSet.js +22 -22
- package/dist/esm/components/violin/Violin.js +26 -26
- package/dist/esm/components/violin/ViolinControls.js +2 -2
- package/dist/esm/constants/colorscales.js +19 -19
- package/dist/esm/constants/constants.js +47 -47
- package/dist/esm/context/DatasetContext.js +11 -11
- package/dist/esm/context/FilterContext.js +3 -3
- package/dist/esm/context/SettingsContext.js +61 -61
- package/dist/esm/context/ZarrDataContext.js +3 -3
- package/dist/esm/helpers/color-helper.js +5 -5
- package/dist/esm/helpers/map-helper.js +2 -2
- package/dist/esm/helpers/zarr-helper.js +6 -6
- package/dist/esm/index.js +22 -22
- package/dist/esm/utils/Filter.js +8 -8
- package/dist/esm/utils/Histogram.js +6 -6
- package/dist/esm/utils/ImageViewer.js +4 -4
- package/dist/esm/utils/Legend.js +9 -9
- package/dist/esm/utils/LoadingIndicators.js +2 -2
- package/dist/esm/utils/Resolver.js +13 -13
- package/dist/esm/utils/Skeleton.js +2 -2
- package/dist/esm/utils/StyledTooltip.js +6 -6
- package/dist/esm/utils/VirtualizedList.js +9 -9
- package/dist/esm/utils/errors.js +15 -15
- package/dist/esm/utils/requests.js +8 -8
- package/dist/esm/utils/search.js +7 -7
- package/dist/esm/utils/string.js +7 -7
- package/dist/esm/utils/zarrData.js +13 -13
- package/package.json +11 -7
- package/scss/cherita-bootstrap.scss +2 -2
- package/scss/cherita.scss +24 -17
- package/scss/components/accordions.scss +4 -1
- package/scss/components/layouts.scss +13 -12
- package/scss/components/lists.scss +8 -4
- package/scss/components/plotly.scss +1 -0
|
@@ -6,10 +6,10 @@ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol"
|
|
|
6
6
|
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); }
|
|
7
7
|
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; }
|
|
8
8
|
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; }
|
|
9
|
-
import { createContext, useContext, useEffect, useReducer, useRef } from
|
|
10
|
-
import _ from
|
|
11
|
-
import { COLOR_ENCODINGS, DOTPLOT_SCALES, LOCAL_STORAGE_KEY, MATRIXPLOT_SCALES, OBS_TYPES, PSEUDOSPATIAL_CATEGORICAL_MODES, VAR_SORT, VAR_SORT_ORDER, VIOLINPLOT_SCALES } from
|
|
12
|
-
import { useResolver } from
|
|
9
|
+
import { createContext, useContext, useEffect, useReducer, useRef } from 'react';
|
|
10
|
+
import _ from 'lodash';
|
|
11
|
+
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';
|
|
12
|
+
import { useResolver } from '../utils/Resolver';
|
|
13
13
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
14
14
|
export const SettingsContext = /*#__PURE__*/createContext(null);
|
|
15
15
|
export const SettingsDispatchContext = /*#__PURE__*/createContext(null);
|
|
@@ -33,7 +33,7 @@ const initialSettings = {
|
|
|
33
33
|
},
|
|
34
34
|
polygons: {},
|
|
35
35
|
controls: {
|
|
36
|
-
colorScale:
|
|
36
|
+
colorScale: 'Viridis',
|
|
37
37
|
range: [0, 1],
|
|
38
38
|
// normalized
|
|
39
39
|
colorAxis: {
|
|
@@ -93,7 +93,7 @@ const validateSettings = settings => {
|
|
|
93
93
|
|
|
94
94
|
// make sure selectedMultiVar are in vars
|
|
95
95
|
if (settings.selectedMultiVar) {
|
|
96
|
-
const notInVars = _.differenceBy(settings.selectedMultiVar, settings.vars,
|
|
96
|
+
const notInVars = _.differenceBy(settings.selectedMultiVar, settings.vars, 'name');
|
|
97
97
|
if (notInVars.length) {
|
|
98
98
|
settings.vars = [...settings.vars, ...notInVars];
|
|
99
99
|
}
|
|
@@ -163,7 +163,7 @@ export function SettingsProvider(_ref2) {
|
|
|
163
163
|
|
|
164
164
|
// If the buster is not set or does not match the current package version,
|
|
165
165
|
// reset localSettings to avoid stale data
|
|
166
|
-
if (!buster || buster !== "1.4.1-dev.2025-10-23.
|
|
166
|
+
if (!buster || buster !== "1.4.1-dev.2025-10-23.55fbe6ff") {
|
|
167
167
|
localSettings = {};
|
|
168
168
|
}
|
|
169
169
|
const initSettings = useRef(initializer({
|
|
@@ -177,9 +177,9 @@ export function SettingsProvider(_ref2) {
|
|
|
177
177
|
// If resolvedSettings is null, do not update settings
|
|
178
178
|
if (resolvedSettings) {
|
|
179
179
|
const validatedSettings = validateSettings(resolvedSettings);
|
|
180
|
-
console.log(
|
|
180
|
+
console.log('Initial settings:', validatedSettings);
|
|
181
181
|
dispatch({
|
|
182
|
-
type:
|
|
182
|
+
type: 'init',
|
|
183
183
|
settings: validatedSettings
|
|
184
184
|
});
|
|
185
185
|
}
|
|
@@ -188,12 +188,12 @@ export function SettingsProvider(_ref2) {
|
|
|
188
188
|
if (canOverrideSettings && settings) {
|
|
189
189
|
try {
|
|
190
190
|
localStorage.setItem(DATASET_STORAGE_KEY, JSON.stringify(_objectSpread({
|
|
191
|
-
buster: "1.4.1-dev.2025-10-23.
|
|
191
|
+
buster: "1.4.1-dev.2025-10-23.55fbe6ff" || '0.0.0',
|
|
192
192
|
timestamp: Date.now()
|
|
193
|
-
}, _.omit(settings,
|
|
193
|
+
}, _.omit(settings, 'data'))));
|
|
194
194
|
} catch (err) {
|
|
195
|
-
if (err.code === 22 || err.code === 1014 || err.name ===
|
|
196
|
-
console.err(
|
|
195
|
+
if (err.code === 22 || err.code === 1014 || err.name === 'QuotaExceededError' || err.name === 'NS_ERROR_DOM_QUOTA_REACHED') {
|
|
196
|
+
console.err('Browser storage quota exceeded');
|
|
197
197
|
} else {
|
|
198
198
|
console.err(err);
|
|
199
199
|
}
|
|
@@ -214,17 +214,17 @@ export function useSettings() {
|
|
|
214
214
|
export function useSettingsDispatch() {
|
|
215
215
|
return useContext(SettingsDispatchContext);
|
|
216
216
|
}
|
|
217
|
-
const OBS_DATA_KEYS = [
|
|
217
|
+
const OBS_DATA_KEYS = ['name', 'type',
|
|
218
218
|
// categorical and numerical
|
|
219
|
-
|
|
219
|
+
'codes', 'codesMap', 'values', 'n_values', 'value_counts',
|
|
220
220
|
// numerical
|
|
221
|
-
|
|
221
|
+
'bins', 'min', 'max', 'mean', 'median', 'n_unique'];
|
|
222
222
|
const splitObs = obs => {
|
|
223
223
|
if (!obs) return {
|
|
224
224
|
settings: null,
|
|
225
225
|
data: {}
|
|
226
226
|
};
|
|
227
|
-
const settings = _.pick(obs, [
|
|
227
|
+
const settings = _.pick(obs, ['name', 'omit', 'bins']);
|
|
228
228
|
const data = obs ? {
|
|
229
229
|
[obs.name]: _.pick(obs, OBS_DATA_KEYS)
|
|
230
230
|
} : {};
|
|
@@ -240,16 +240,16 @@ const splitVar = v => {
|
|
|
240
240
|
};
|
|
241
241
|
let settings, data;
|
|
242
242
|
if (v.isSet) {
|
|
243
|
-
settings = _objectSpread(_objectSpread({}, _.pick(v, [
|
|
243
|
+
settings = _objectSpread(_objectSpread({}, _.pick(v, ['name', 'isSet'])), {}, {
|
|
244
244
|
vars: _.map(v.vars, vv => ({
|
|
245
245
|
name: vv.name
|
|
246
246
|
}))
|
|
247
247
|
});
|
|
248
|
-
data = _.fromPairs(_.map(v.vars, vv => [vv.name, _.pick(vv, [
|
|
248
|
+
data = _.fromPairs(_.map(v.vars, vv => [vv.name, _.pick(vv, ['name', 'index', 'matrix_index'])]));
|
|
249
249
|
} else {
|
|
250
|
-
settings = _.pick(v, [
|
|
250
|
+
settings = _.pick(v, ['name', 'isSet']);
|
|
251
251
|
data = {
|
|
252
|
-
[v.name]: _.pick(v, [
|
|
252
|
+
[v.name]: _.pick(v, ['name', 'index', 'matrix_index'])
|
|
253
253
|
};
|
|
254
254
|
}
|
|
255
255
|
return {
|
|
@@ -259,11 +259,11 @@ const splitVar = v => {
|
|
|
259
259
|
};
|
|
260
260
|
function settingsReducer(settings, action) {
|
|
261
261
|
switch (action.type) {
|
|
262
|
-
case
|
|
262
|
+
case 'init':
|
|
263
263
|
{
|
|
264
264
|
return action.settings;
|
|
265
265
|
}
|
|
266
|
-
case
|
|
266
|
+
case 'select.obs':
|
|
267
267
|
{
|
|
268
268
|
var _action$obs;
|
|
269
269
|
const {
|
|
@@ -287,13 +287,13 @@ function settingsReducer(settings, action) {
|
|
|
287
287
|
})
|
|
288
288
|
});
|
|
289
289
|
}
|
|
290
|
-
case
|
|
290
|
+
case 'select.obsm':
|
|
291
291
|
{
|
|
292
292
|
return _objectSpread(_objectSpread({}, settings), {}, {
|
|
293
293
|
selectedObsm: action.obsm
|
|
294
294
|
});
|
|
295
295
|
}
|
|
296
|
-
case
|
|
296
|
+
case 'select.var':
|
|
297
297
|
{
|
|
298
298
|
const {
|
|
299
299
|
settings: varSettings,
|
|
@@ -306,7 +306,7 @@ function settingsReducer(settings, action) {
|
|
|
306
306
|
})
|
|
307
307
|
}));
|
|
308
308
|
}
|
|
309
|
-
case
|
|
309
|
+
case 'select.multivar':
|
|
310
310
|
{
|
|
311
311
|
const inMultiVar = settings.selectedMultiVar.some(v => v.name === action.var.name);
|
|
312
312
|
if (inMultiVar) {
|
|
@@ -324,13 +324,13 @@ function settingsReducer(settings, action) {
|
|
|
324
324
|
}));
|
|
325
325
|
}
|
|
326
326
|
}
|
|
327
|
-
case
|
|
327
|
+
case 'deselect.multivar':
|
|
328
328
|
{
|
|
329
329
|
return validateSettings(_objectSpread(_objectSpread({}, settings), {}, {
|
|
330
330
|
selectedMultiVar: settings.selectedMultiVar.filter(v => v !== action.var.name)
|
|
331
331
|
}));
|
|
332
332
|
}
|
|
333
|
-
case
|
|
333
|
+
case 'toggle.multivar':
|
|
334
334
|
{
|
|
335
335
|
const inMultiVar = settings.selectedMultiVar.some(v => v.name === action.var.name);
|
|
336
336
|
if (inMultiVar) {
|
|
@@ -350,13 +350,13 @@ function settingsReducer(settings, action) {
|
|
|
350
350
|
}));
|
|
351
351
|
}
|
|
352
352
|
}
|
|
353
|
-
case
|
|
353
|
+
case 'set.colorEncoding':
|
|
354
354
|
{
|
|
355
355
|
return validateSettings(_objectSpread(_objectSpread({}, settings), {}, {
|
|
356
356
|
colorEncoding: action.value
|
|
357
357
|
}));
|
|
358
358
|
}
|
|
359
|
-
case
|
|
359
|
+
case 'reset.vars':
|
|
360
360
|
{
|
|
361
361
|
return validateSettings(_objectSpread(_objectSpread({}, settings), {}, {
|
|
362
362
|
vars: [],
|
|
@@ -364,19 +364,19 @@ function settingsReducer(settings, action) {
|
|
|
364
364
|
selectedMultiVar: []
|
|
365
365
|
}));
|
|
366
366
|
}
|
|
367
|
-
case
|
|
367
|
+
case 'reset.multiVar':
|
|
368
368
|
{
|
|
369
369
|
return validateSettings(_objectSpread(_objectSpread({}, settings), {}, {
|
|
370
370
|
selectedMultiVar: []
|
|
371
371
|
}));
|
|
372
372
|
}
|
|
373
|
-
case
|
|
373
|
+
case 'reset.var':
|
|
374
374
|
{
|
|
375
375
|
return validateSettings(_objectSpread(_objectSpread({}, settings), {}, {
|
|
376
376
|
selectedVar: null
|
|
377
377
|
}));
|
|
378
378
|
}
|
|
379
|
-
case
|
|
379
|
+
case 'add.var':
|
|
380
380
|
{
|
|
381
381
|
if (settings.vars.find(v => v.name === action.var.name)) {
|
|
382
382
|
return settings;
|
|
@@ -393,7 +393,7 @@ function settingsReducer(settings, action) {
|
|
|
393
393
|
});
|
|
394
394
|
}
|
|
395
395
|
}
|
|
396
|
-
case
|
|
396
|
+
case 'remove.var':
|
|
397
397
|
{
|
|
398
398
|
var _settings$selectedVar;
|
|
399
399
|
const selectedVar = ((_settings$selectedVar = settings.selectedVar) === null || _settings$selectedVar === void 0 ? void 0 : _settings$selectedVar.name) === action.var.name ? null : settings.selectedVar;
|
|
@@ -404,7 +404,7 @@ function settingsReducer(settings, action) {
|
|
|
404
404
|
selectedMultiVar: selectedMultiVar
|
|
405
405
|
}));
|
|
406
406
|
}
|
|
407
|
-
case
|
|
407
|
+
case 'add.varSet.var':
|
|
408
408
|
{
|
|
409
409
|
const varSet = settings.vars.find(s => s.isSet && s.name === action.varSet.name);
|
|
410
410
|
if (!varSet) {
|
|
@@ -450,7 +450,7 @@ function settingsReducer(settings, action) {
|
|
|
450
450
|
}));
|
|
451
451
|
}
|
|
452
452
|
}
|
|
453
|
-
case
|
|
453
|
+
case 'remove.varSet.var':
|
|
454
454
|
{
|
|
455
455
|
const varSet = settings.vars.find(s => s.isSet && s.name === action.varSet.name);
|
|
456
456
|
if (!varSet) {
|
|
@@ -502,7 +502,7 @@ function settingsReducer(settings, action) {
|
|
|
502
502
|
}
|
|
503
503
|
}
|
|
504
504
|
}
|
|
505
|
-
case
|
|
505
|
+
case 'set.controls.colorScale':
|
|
506
506
|
{
|
|
507
507
|
return _objectSpread(_objectSpread({}, settings), {}, {
|
|
508
508
|
controls: _objectSpread(_objectSpread({}, settings.controls), {}, {
|
|
@@ -510,7 +510,7 @@ function settingsReducer(settings, action) {
|
|
|
510
510
|
})
|
|
511
511
|
});
|
|
512
512
|
}
|
|
513
|
-
case
|
|
513
|
+
case 'set.controls.range':
|
|
514
514
|
{
|
|
515
515
|
return _objectSpread(_objectSpread({}, settings), {}, {
|
|
516
516
|
controls: _objectSpread(_objectSpread({}, settings.controls), {}, {
|
|
@@ -518,7 +518,7 @@ function settingsReducer(settings, action) {
|
|
|
518
518
|
})
|
|
519
519
|
});
|
|
520
520
|
}
|
|
521
|
-
case
|
|
521
|
+
case 'set.controls.colorAxis':
|
|
522
522
|
{
|
|
523
523
|
return _objectSpread(_objectSpread({}, settings), {}, {
|
|
524
524
|
controls: _objectSpread(_objectSpread({}, settings.controls), {}, {
|
|
@@ -526,7 +526,7 @@ function settingsReducer(settings, action) {
|
|
|
526
526
|
})
|
|
527
527
|
});
|
|
528
528
|
}
|
|
529
|
-
case
|
|
529
|
+
case 'set.controls.colorAxis.crange':
|
|
530
530
|
{
|
|
531
531
|
return _objectSpread(_objectSpread({}, settings), {}, {
|
|
532
532
|
controls: _objectSpread(_objectSpread({}, settings.controls), {}, {
|
|
@@ -537,7 +537,7 @@ function settingsReducer(settings, action) {
|
|
|
537
537
|
})
|
|
538
538
|
});
|
|
539
539
|
}
|
|
540
|
-
case
|
|
540
|
+
case 'set.controls.colorAxis.cmin':
|
|
541
541
|
{
|
|
542
542
|
return _objectSpread(_objectSpread({}, settings), {}, {
|
|
543
543
|
controls: _objectSpread(_objectSpread({}, settings.controls), {}, {
|
|
@@ -547,7 +547,7 @@ function settingsReducer(settings, action) {
|
|
|
547
547
|
})
|
|
548
548
|
});
|
|
549
549
|
}
|
|
550
|
-
case
|
|
550
|
+
case 'set.controls.colorAxis.cmax':
|
|
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
|
|
560
|
+
case 'set.controls.scale':
|
|
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
|
|
570
|
+
case 'set.controls.meanOnlyExpressed':
|
|
571
571
|
{
|
|
572
572
|
return _objectSpread(_objectSpread({}, settings), {}, {
|
|
573
573
|
controls: _objectSpread(_objectSpread({}, settings.controls), {}, {
|
|
@@ -575,7 +575,7 @@ function settingsReducer(settings, action) {
|
|
|
575
575
|
})
|
|
576
576
|
});
|
|
577
577
|
}
|
|
578
|
-
case
|
|
578
|
+
case 'set.controls.expressionCutoff':
|
|
579
579
|
{
|
|
580
580
|
return _objectSpread(_objectSpread({}, settings), {}, {
|
|
581
581
|
controls: _objectSpread(_objectSpread({}, settings.controls), {}, {
|
|
@@ -583,7 +583,7 @@ function settingsReducer(settings, action) {
|
|
|
583
583
|
})
|
|
584
584
|
});
|
|
585
585
|
}
|
|
586
|
-
case
|
|
586
|
+
case 'toggle.slice.obs':
|
|
587
587
|
{
|
|
588
588
|
if (settings.selectedObs && settings.selectedObs.name === action.obs.name) {
|
|
589
589
|
return _objectSpread(_objectSpread({}, settings), {}, {
|
|
@@ -607,7 +607,7 @@ function settingsReducer(settings, action) {
|
|
|
607
607
|
});
|
|
608
608
|
}
|
|
609
609
|
}
|
|
610
|
-
case
|
|
610
|
+
case 'toggle.slice.polygons':
|
|
611
611
|
{
|
|
612
612
|
return _objectSpread(_objectSpread({}, settings), {}, {
|
|
613
613
|
sliceBy: _objectSpread(_objectSpread({}, settings.sliceBy), {}, {
|
|
@@ -615,7 +615,7 @@ function settingsReducer(settings, action) {
|
|
|
615
615
|
})
|
|
616
616
|
});
|
|
617
617
|
}
|
|
618
|
-
case
|
|
618
|
+
case 'disable.slice.polygons':
|
|
619
619
|
{
|
|
620
620
|
return _objectSpread(_objectSpread({}, settings), {}, {
|
|
621
621
|
sliceBy: _objectSpread(_objectSpread({}, settings.sliceBy), {}, {
|
|
@@ -623,7 +623,7 @@ function settingsReducer(settings, action) {
|
|
|
623
623
|
})
|
|
624
624
|
});
|
|
625
625
|
}
|
|
626
|
-
case
|
|
626
|
+
case 'add.label.obs':
|
|
627
627
|
{
|
|
628
628
|
if (_.includes(settings.labelObs, action.obs.name)) {
|
|
629
629
|
return settings;
|
|
@@ -640,19 +640,19 @@ function settingsReducer(settings, action) {
|
|
|
640
640
|
});
|
|
641
641
|
}
|
|
642
642
|
}
|
|
643
|
-
case
|
|
643
|
+
case 'remove.label.obs':
|
|
644
644
|
{
|
|
645
645
|
return validateSettings(_objectSpread(_objectSpread({}, settings), {}, {
|
|
646
646
|
labelObs: settings.labelObs.filter(a => a !== action.obsName)
|
|
647
647
|
}));
|
|
648
648
|
}
|
|
649
|
-
case
|
|
649
|
+
case 'reset.label.obs':
|
|
650
650
|
{
|
|
651
651
|
return validateSettings(_objectSpread(_objectSpread({}, settings), {}, {
|
|
652
652
|
labelObs: []
|
|
653
653
|
}));
|
|
654
654
|
}
|
|
655
|
-
case
|
|
655
|
+
case 'set.varSort':
|
|
656
656
|
{
|
|
657
657
|
return _objectSpread(_objectSpread({}, settings), {}, {
|
|
658
658
|
varSort: _objectSpread(_objectSpread({}, settings.varSort), {}, {
|
|
@@ -663,7 +663,7 @@ function settingsReducer(settings, action) {
|
|
|
663
663
|
})
|
|
664
664
|
});
|
|
665
665
|
}
|
|
666
|
-
case
|
|
666
|
+
case 'set.varSort.sort':
|
|
667
667
|
{
|
|
668
668
|
return _objectSpread(_objectSpread({}, settings), {}, {
|
|
669
669
|
varSort: _objectSpread(_objectSpread({}, settings.varSort), {}, {
|
|
@@ -673,7 +673,7 @@ function settingsReducer(settings, action) {
|
|
|
673
673
|
})
|
|
674
674
|
});
|
|
675
675
|
}
|
|
676
|
-
case
|
|
676
|
+
case 'set.varSort.sortOrder':
|
|
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
|
|
686
|
+
case 'set.polygons':
|
|
687
687
|
{
|
|
688
688
|
return _objectSpread(_objectSpread({}, settings), {}, {
|
|
689
689
|
polygons: _objectSpread(_objectSpread({}, settings.polygons), {}, {
|
|
@@ -691,7 +691,7 @@ function settingsReducer(settings, action) {
|
|
|
691
691
|
})
|
|
692
692
|
});
|
|
693
693
|
}
|
|
694
|
-
case
|
|
694
|
+
case 'set.pseudospatial.maskSet':
|
|
695
695
|
{
|
|
696
696
|
return _objectSpread(_objectSpread({}, settings), {}, {
|
|
697
697
|
pseudospatial: _objectSpread(_objectSpread({}, settings.pseudospatial), {}, {
|
|
@@ -699,7 +699,7 @@ function settingsReducer(settings, action) {
|
|
|
699
699
|
})
|
|
700
700
|
});
|
|
701
701
|
}
|
|
702
|
-
case
|
|
702
|
+
case 'set.pseudospatial.maskValues':
|
|
703
703
|
{
|
|
704
704
|
return _objectSpread(_objectSpread({}, settings), {}, {
|
|
705
705
|
pseudospatial: _objectSpread(_objectSpread({}, settings.pseudospatial), {}, {
|
|
@@ -707,7 +707,7 @@ function settingsReducer(settings, action) {
|
|
|
707
707
|
})
|
|
708
708
|
});
|
|
709
709
|
}
|
|
710
|
-
case
|
|
710
|
+
case 'set.pseudospatial.categoricalMode':
|
|
711
711
|
{
|
|
712
712
|
return _objectSpread(_objectSpread({}, settings), {}, {
|
|
713
713
|
pseudospatial: _objectSpread(_objectSpread({}, settings.pseudospatial), {}, {
|
|
@@ -715,7 +715,7 @@ function settingsReducer(settings, action) {
|
|
|
715
715
|
})
|
|
716
716
|
});
|
|
717
717
|
}
|
|
718
|
-
case
|
|
718
|
+
case 'toggle.pseudospatial.refImg.visible':
|
|
719
719
|
{
|
|
720
720
|
return _objectSpread(_objectSpread({}, settings), {}, {
|
|
721
721
|
pseudospatial: _objectSpread(_objectSpread({}, settings.pseudospatial), {}, {
|
|
@@ -725,7 +725,7 @@ function settingsReducer(settings, action) {
|
|
|
725
725
|
})
|
|
726
726
|
});
|
|
727
727
|
}
|
|
728
|
-
case
|
|
728
|
+
case 'set.pseudospatial.refImg.opacity':
|
|
729
729
|
{
|
|
730
730
|
return _objectSpread(_objectSpread({}, settings), {}, {
|
|
731
731
|
pseudospatial: _objectSpread(_objectSpread({}, settings.pseudospatial), {}, {
|
|
@@ -737,7 +737,7 @@ function settingsReducer(settings, action) {
|
|
|
737
737
|
}
|
|
738
738
|
default:
|
|
739
739
|
{
|
|
740
|
-
throw Error(
|
|
740
|
+
throw Error('Unknown action: ' + action.type);
|
|
741
741
|
}
|
|
742
742
|
}
|
|
743
743
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { createContext, useContext } from
|
|
2
|
-
import { useFilter } from
|
|
3
|
-
import { useObsData, useObsmData, useXData } from
|
|
1
|
+
import { createContext, useContext } from 'react';
|
|
2
|
+
import { useFilter } from '../utils/Filter';
|
|
3
|
+
import { useObsData, useObsmData, useXData } from '../utils/zarrData';
|
|
4
4
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
5
5
|
const ZarrDataContext = /*#__PURE__*/createContext(null);
|
|
6
6
|
export function ZarrDataProvider(_ref) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { useCallback } from
|
|
2
|
-
import { COLORSCALES } from
|
|
3
|
-
import { useSettings } from
|
|
1
|
+
import { useCallback } from 'react';
|
|
2
|
+
import { COLORSCALES } from '../constants/colorscales';
|
|
3
|
+
import { useSettings } from '../context/SettingsContext';
|
|
4
4
|
const GRAY = [214, 212, 212];
|
|
5
5
|
const parseHexColor = color => {
|
|
6
6
|
const r = parseInt(color === null || color === void 0 ? void 0 : color.substring(1, 3), 16);
|
|
@@ -31,7 +31,7 @@ const computeColor = (colormap, value) => {
|
|
|
31
31
|
};
|
|
32
32
|
export const rgbToHex = color => {
|
|
33
33
|
const [r, g, b] = color || [0, 0, 0, 0];
|
|
34
|
-
return
|
|
34
|
+
return '#' + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1);
|
|
35
35
|
};
|
|
36
36
|
export const useColor = () => {
|
|
37
37
|
const settings = useSettings();
|
|
@@ -47,7 +47,7 @@ export const useColor = () => {
|
|
|
47
47
|
colorEncoding = settings.colorEncoding,
|
|
48
48
|
colorscale = null
|
|
49
49
|
} = _ref;
|
|
50
|
-
const colormap = colorscale || COLORSCALES[categorical ?
|
|
50
|
+
const colormap = colorscale || COLORSCALES[categorical ? 'Accent' : settings.controls.colorScale];
|
|
51
51
|
if (colorEncoding) {
|
|
52
52
|
if (grayOut) {
|
|
53
53
|
// Mix color with gray manually instead of chroma.mix to get better performance with deck.gl
|
|
@@ -3,9 +3,9 @@ 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 { useCallback } from
|
|
7
|
-
import { useQueries, useQuery } from
|
|
8
|
-
import { ArrayNotFoundError, GroupNotFoundError, openArray } from
|
|
6
|
+
import { useCallback } from 'react';
|
|
7
|
+
import { useQueries, useQuery } from '@tanstack/react-query';
|
|
8
|
+
import { ArrayNotFoundError, GroupNotFoundError, openArray } from 'zarr';
|
|
9
9
|
export const GET_OPTIONS = {
|
|
10
10
|
concurrencyLimit: 10,
|
|
11
11
|
// max number of concurrent requests (default 10)
|
|
@@ -22,7 +22,7 @@ export class ZarrHelper {
|
|
|
22
22
|
const z = await openArray({
|
|
23
23
|
store: url,
|
|
24
24
|
path: path,
|
|
25
|
-
mode:
|
|
25
|
+
mode: 'r'
|
|
26
26
|
});
|
|
27
27
|
return z;
|
|
28
28
|
}
|
|
@@ -53,7 +53,7 @@ export const useZarr = function (_ref2) {
|
|
|
53
53
|
isLoading: isPending = false,
|
|
54
54
|
error: serverError = null
|
|
55
55
|
} = useQuery(_objectSpread({
|
|
56
|
-
queryKey: [
|
|
56
|
+
queryKey: ['zarr', url, path, s],
|
|
57
57
|
queryFn: () => fetchDataFromZarr(url, path, s, options),
|
|
58
58
|
retry: (failureCount, _ref3) => {
|
|
59
59
|
let {
|
|
@@ -94,7 +94,7 @@ export const useMultipleZarr = function (inputs) {
|
|
|
94
94
|
serverError = null
|
|
95
95
|
} = useQueries({
|
|
96
96
|
queries: inputs.map(input => _objectSpread({
|
|
97
|
-
queryKey: [
|
|
97
|
+
queryKey: ['zarr', input.url, input.path, input.s],
|
|
98
98
|
queryFn: () => fetchDataFromZarr(input.url, input.path, input.s, options),
|
|
99
99
|
retry: (failureCount, _ref4) => {
|
|
100
100
|
let {
|
package/dist/esm/index.js
CHANGED
|
@@ -1,22 +1,22 @@
|
|
|
1
|
-
export { Dotplot } from
|
|
2
|
-
export { DotplotControls } from
|
|
3
|
-
export { FullPage } from
|
|
4
|
-
export { Heatmap } from
|
|
5
|
-
export { HeatmapControls } from
|
|
6
|
-
export { Matrixplot } from
|
|
7
|
-
export { MatrixplotControls } from
|
|
8
|
-
export { ObsColsList } from
|
|
9
|
-
export { ObsmKeysList } from
|
|
10
|
-
export { OffcanvasControls, OffcanvasObs, OffcanvasObsm, OffcanvasVars } from
|
|
11
|
-
export { Pseudospatial } from
|
|
12
|
-
export { Scatterplot } from
|
|
13
|
-
export { ScatterplotControls } from
|
|
14
|
-
export { SearchBar } from
|
|
15
|
-
export { Toolbar } from
|
|
16
|
-
export { VarNamesList } from
|
|
17
|
-
export { Violin } from
|
|
18
|
-
export { ViolinControls } from
|
|
19
|
-
export { COLORSCALES } from
|
|
20
|
-
export { PLOT_TYPES, SELECTION_MODES, VIOLIN_MODES } from
|
|
21
|
-
export { DatasetProvider } from
|
|
22
|
-
export { FilterProvider } from
|
|
1
|
+
export { Dotplot } from './components/dotplot/Dotplot';
|
|
2
|
+
export { DotplotControls } from './components/dotplot/DotplotControls';
|
|
3
|
+
export { FullPage } from './components/full-page/FullPage';
|
|
4
|
+
export { Heatmap } from './components/heatmap/Heatmap';
|
|
5
|
+
export { HeatmapControls } from './components/heatmap/HeatmapControls';
|
|
6
|
+
export { Matrixplot } from './components/matrixplot/Matrixplot';
|
|
7
|
+
export { MatrixplotControls } from './components/matrixplot/MatrixplotControls';
|
|
8
|
+
export { ObsColsList } from './components/obs-list/ObsList';
|
|
9
|
+
export { ObsmKeysList } from './components/obsm-list/ObsmList';
|
|
10
|
+
export { OffcanvasControls, OffcanvasObs, OffcanvasObsm, OffcanvasVars } from './components/offcanvas';
|
|
11
|
+
export { Pseudospatial } from './components/pseudospatial/Pseudospatial';
|
|
12
|
+
export { Scatterplot } from './components/scatterplot/Scatterplot';
|
|
13
|
+
export { ScatterplotControls } from './components/scatterplot/ScatterplotControls';
|
|
14
|
+
export { SearchBar } from './components/search-bar/SearchBar';
|
|
15
|
+
export { Toolbar } from './components/toolbar/Toolbar';
|
|
16
|
+
export { VarNamesList } from './components/var-list/VarList';
|
|
17
|
+
export { Violin } from './components/violin/Violin';
|
|
18
|
+
export { ViolinControls } from './components/violin/ViolinControls';
|
|
19
|
+
export { COLORSCALES } from './constants/colorscales';
|
|
20
|
+
export { PLOT_TYPES, SELECTION_MODES, VIOLIN_MODES } from './constants/constants';
|
|
21
|
+
export { DatasetProvider } from './context/DatasetContext';
|
|
22
|
+
export { FilterProvider } from './context/FilterContext';
|
package/dist/esm/utils/Filter.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { useEffect, useCallback, useMemo } from
|
|
2
|
-
import { booleanPointInPolygon, point } from
|
|
3
|
-
import _ from
|
|
4
|
-
import { useSelectedObs } from
|
|
5
|
-
import { COLOR_ENCODINGS, OBS_TYPES } from
|
|
6
|
-
import { useFilteredDataDispatch } from
|
|
7
|
-
import { useSettings } from
|
|
1
|
+
import { useEffect, useCallback, useMemo } from 'react';
|
|
2
|
+
import { booleanPointInPolygon, point } from '@turf/turf';
|
|
3
|
+
import _ from 'lodash';
|
|
4
|
+
import { useSelectedObs } from './Resolver';
|
|
5
|
+
import { COLOR_ENCODINGS, OBS_TYPES } from '../constants/constants';
|
|
6
|
+
import { useFilteredDataDispatch } from '../context/FilterContext';
|
|
7
|
+
import { useSettings } from '../context/SettingsContext';
|
|
8
8
|
const EPSILON = 1e-6;
|
|
9
9
|
const isInBins = (v, binEdges, indices) => {
|
|
10
10
|
const lastEdge = _.last(binEdges);
|
|
@@ -144,7 +144,7 @@ export const useFilter = data => {
|
|
|
144
144
|
useEffect(() => {
|
|
145
145
|
if (!isPending && !serverError) {
|
|
146
146
|
filterDataDispatch({
|
|
147
|
-
type:
|
|
147
|
+
type: 'set.obs.indices',
|
|
148
148
|
indices: isSliced ? filteredIndices : null,
|
|
149
149
|
valueMin: valueMin,
|
|
150
150
|
valueMax: valueMax,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { SparkLineChart, mangoFusionPalette, blueberryTwilightPalette } from
|
|
2
|
-
import _ from
|
|
3
|
-
import { LoadingLinear } from
|
|
4
|
-
import { formatNumerical, FORMATS } from
|
|
1
|
+
import { SparkLineChart, mangoFusionPalette, blueberryTwilightPalette } from '@mui/x-charts';
|
|
2
|
+
import _ from 'lodash';
|
|
3
|
+
import { LoadingLinear } from './LoadingIndicators';
|
|
4
|
+
import { formatNumerical, FORMATS } from './string';
|
|
5
5
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
6
6
|
export function Histogram(_ref) {
|
|
7
7
|
var _data$bin_edges;
|
|
@@ -34,11 +34,11 @@ export function Histogram(_ref) {
|
|
|
34
34
|
},
|
|
35
35
|
xAxis: {
|
|
36
36
|
data: _.range((_data$bin_edges = data.bin_edges) === null || _data$bin_edges === void 0 ? void 0 : _data$bin_edges.length) || null,
|
|
37
|
-
valueFormatter: v => "Bin [".concat(formatNumerical(data.bin_edges[v][0], FORMATS.EXPONENTIAL), ", ").concat(formatNumerical(data.bin_edges[v][1], FORMATS.EXPONENTIAL)).concat(v === data.bin_edges.length - 1 ?
|
|
37
|
+
valueFormatter: v => "Bin [".concat(formatNumerical(data.bin_edges[v][0], FORMATS.EXPONENTIAL), ", ").concat(formatNumerical(data.bin_edges[v][1], FORMATS.EXPONENTIAL)).concat(v === data.bin_edges.length - 1 ? ']' : ')')
|
|
38
38
|
},
|
|
39
39
|
slotProps: {
|
|
40
40
|
popper: {
|
|
41
|
-
className:
|
|
41
|
+
className: 'feature-histogram-tooltip'
|
|
42
42
|
}
|
|
43
43
|
}
|
|
44
44
|
})
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
import { useState } from
|
|
2
|
-
import { Alert } from
|
|
1
|
+
import { useState } from 'react';
|
|
2
|
+
import { Alert } from 'react-bootstrap';
|
|
3
3
|
import { jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
|
|
4
4
|
export const ImageViewer = _ref => {
|
|
5
5
|
let {
|
|
6
6
|
src,
|
|
7
7
|
alt,
|
|
8
|
-
className =
|
|
8
|
+
className = 'img-fluid'
|
|
9
9
|
} = _ref;
|
|
10
10
|
const [error, setError] = useState(false);
|
|
11
11
|
const handleError = () => {
|
|
12
|
-
console.error(
|
|
12
|
+
console.error('Error loading image from src:', src);
|
|
13
13
|
setError(true);
|
|
14
14
|
};
|
|
15
15
|
if (!error) {
|