@haniffalab/cherita-react 1.4.5 → 1.4.6-dev.2026-01-12.1a2ee141

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.
@@ -49,20 +49,23 @@ function Dotplot(_ref) {
49
49
  const [hasSelections, setHasSelections] = (0, _react.useState)(false);
50
50
  const selectedObs = (0, _Resolver.useSelectedObs)();
51
51
  const selectedMultiVar = (0, _Resolver.useSelectedMultiVar)();
52
- const params = (0, _react.useMemo)(() => ({
53
- url: dataset.url,
54
- obsCol: selectedObs,
55
- obsValues: !(selectedObs !== null && selectedObs !== void 0 && selectedObs.omit.length) ? null : _lodash.default.difference(selectedObs === null || selectedObs === void 0 ? void 0 : selectedObs.values, selectedObs === null || selectedObs === void 0 ? void 0 : selectedObs.omit),
56
- varKeys: selectedMultiVar.map(i => i.isSet ? {
57
- name: i.name,
58
- indices: i.vars.map(v => v.index)
59
- } : i.index),
60
- obsIndices: isSliced ? [...(obsIndices || [])] : null,
61
- standardScale: settings.controls.scale.dotplot,
62
- meanOnlyExpressed: settings.controls.meanOnlyExpressed,
63
- expressionCutoff: settings.controls.expressionCutoff,
64
- varNamesCol: dataset.varNamesCol
65
- }), [dataset.url, dataset.varNamesCol, isSliced, obsIndices, selectedMultiVar, selectedObs, settings.controls.expressionCutoff, settings.controls.meanOnlyExpressed, settings.controls.scale.dotplot]);
52
+ const params = (0, _react.useMemo)(() => {
53
+ var _selectedObs$omit;
54
+ return {
55
+ url: dataset.url,
56
+ obsCol: selectedObs,
57
+ obsValues: !(selectedObs !== null && selectedObs !== void 0 && (_selectedObs$omit = selectedObs.omit) !== null && _selectedObs$omit !== void 0 && _selectedObs$omit.length) ? null : _lodash.default.difference(selectedObs === null || selectedObs === void 0 ? void 0 : selectedObs.values, selectedObs === null || selectedObs === void 0 ? void 0 : selectedObs.omit),
58
+ varKeys: selectedMultiVar.map(i => i.isSet ? {
59
+ name: i.name,
60
+ indices: i.vars.map(v => v.index)
61
+ } : i.index),
62
+ obsIndices: isSliced ? [...(obsIndices || [])] : null,
63
+ standardScale: settings.controls.scale.dotplot,
64
+ meanOnlyExpressed: settings.controls.meanOnlyExpressed,
65
+ expressionCutoff: settings.controls.expressionCutoff,
66
+ varNamesCol: dataset.varNamesCol
67
+ };
68
+ }, [dataset.url, dataset.varNamesCol, isSliced, obsIndices, selectedMultiVar, selectedObs, settings.controls.expressionCutoff, settings.controls.meanOnlyExpressed, settings.controls.scale.dotplot]);
66
69
  // @TODO: set default scale
67
70
 
68
71
  (0, _react.useEffect)(() => {
@@ -48,17 +48,20 @@ function Heatmap(_ref) {
48
48
  const [hasSelections, setHasSelections] = (0, _react.useState)(false);
49
49
  const selectedObs = (0, _Resolver.useSelectedObs)();
50
50
  const selectedMultiVar = (0, _Resolver.useSelectedMultiVar)();
51
- const params = (0, _react.useMemo)(() => ({
52
- url: dataset.url,
53
- obsCol: selectedObs,
54
- obsValues: !(selectedObs !== null && selectedObs !== void 0 && selectedObs.omit.length) ? null : _lodash.default.difference(selectedObs === null || selectedObs === void 0 ? void 0 : selectedObs.values, selectedObs === null || selectedObs === void 0 ? void 0 : selectedObs.omit),
55
- varKeys: selectedMultiVar.map(i => i.isSet ? {
56
- name: i.name,
57
- indices: i.vars.map(v => v.index)
58
- } : i.index),
59
- obsIndices: isSliced ? [...(obsIndices || [])] : null,
60
- varNamesCol: dataset.varNamesCol
61
- }), [dataset.url, dataset.varNamesCol, isSliced, obsIndices, selectedMultiVar, selectedObs]);
51
+ const params = (0, _react.useMemo)(() => {
52
+ var _selectedObs$omit;
53
+ return {
54
+ url: dataset.url,
55
+ obsCol: selectedObs,
56
+ obsValues: !(selectedObs !== null && selectedObs !== void 0 && (_selectedObs$omit = selectedObs.omit) !== null && _selectedObs$omit !== void 0 && _selectedObs$omit.length) ? null : _lodash.default.difference(selectedObs === null || selectedObs === void 0 ? void 0 : selectedObs.values, selectedObs === null || selectedObs === void 0 ? void 0 : selectedObs.omit),
57
+ varKeys: selectedMultiVar.map(i => i.isSet ? {
58
+ name: i.name,
59
+ indices: i.vars.map(v => v.index)
60
+ } : i.index),
61
+ obsIndices: isSliced ? [...(obsIndices || [])] : null,
62
+ varNamesCol: dataset.varNamesCol
63
+ };
64
+ }, [dataset.url, dataset.varNamesCol, isSliced, obsIndices, selectedMultiVar, selectedObs]);
62
65
  (0, _react.useEffect)(() => {
63
66
  if (selectedObs && selectedMultiVar.length) {
64
67
  setHasSelections(true);
@@ -48,18 +48,21 @@ function Matrixplot(_ref) {
48
48
  const [hasSelections, setHasSelections] = (0, _react.useState)(false);
49
49
  const selectedObs = (0, _Resolver.useSelectedObs)();
50
50
  const selectedMultiVar = (0, _Resolver.useSelectedMultiVar)();
51
- const params = (0, _react.useMemo)(() => ({
52
- url: dataset.url,
53
- obsCol: selectedObs,
54
- obsValues: !(selectedObs !== null && selectedObs !== void 0 && selectedObs.omit.length) ? null : _lodash.default.difference(selectedObs === null || selectedObs === void 0 ? void 0 : selectedObs.values, selectedObs === null || selectedObs === void 0 ? void 0 : selectedObs.omit),
55
- varKeys: selectedMultiVar.map(i => i.isSet ? {
56
- name: i.name,
57
- indices: i.vars.map(v => v.index)
58
- } : i.index),
59
- obsIndices: isSliced ? [...(obsIndices || [])] : null,
60
- standardScale: settings.controls.scale.matrixplot,
61
- varNamesCol: dataset.varNamesCol
62
- }), [dataset.url, dataset.varNamesCol, isSliced, obsIndices, selectedMultiVar, selectedObs, settings.controls.scale.matrixplot]);
51
+ const params = (0, _react.useMemo)(() => {
52
+ var _selectedObs$omit;
53
+ return {
54
+ url: dataset.url,
55
+ obsCol: selectedObs,
56
+ obsValues: !(selectedObs !== null && selectedObs !== void 0 && (_selectedObs$omit = selectedObs.omit) !== null && _selectedObs$omit !== void 0 && _selectedObs$omit.length) ? null : _lodash.default.difference(selectedObs === null || selectedObs === void 0 ? void 0 : selectedObs.values, selectedObs === null || selectedObs === void 0 ? void 0 : selectedObs.omit),
57
+ varKeys: selectedMultiVar.map(i => i.isSet ? {
58
+ name: i.name,
59
+ indices: i.vars.map(v => v.index)
60
+ } : i.index),
61
+ obsIndices: isSliced ? [...(obsIndices || [])] : null,
62
+ standardScale: settings.controls.scale.matrixplot,
63
+ varNamesCol: dataset.varNamesCol
64
+ };
65
+ }, [dataset.url, dataset.varNamesCol, isSliced, obsIndices, selectedMultiVar, selectedObs, settings.controls.scale.matrixplot]);
63
66
  (0, _react.useEffect)(() => {
64
67
  if (selectedObs && selectedMultiVar.length) {
65
68
  setHasSelections(true);
@@ -15,12 +15,12 @@ var _reactBootstrap = require("react-bootstrap");
15
15
  var _Accordion = _interopRequireDefault(require("react-bootstrap/Accordion"));
16
16
  var _AccordionButton = require("react-bootstrap/AccordionButton");
17
17
  var _AccordionContext = _interopRequireDefault(require("react-bootstrap/AccordionContext"));
18
+ var _ObsItem = require("./ObsItem");
18
19
  var _constants = require("../../constants/constants");
19
20
  var _DatasetContext = require("../../context/DatasetContext");
20
21
  var _SettingsContext = require("../../context/SettingsContext");
21
22
  var _LoadingIndicators = require("../../utils/LoadingIndicators");
22
23
  var _requests = require("../../utils/requests");
23
- var _ObsItem = require("./ObsItem");
24
24
  var _jsxRuntime = require("react/jsx-runtime");
25
25
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
26
26
  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; }
@@ -22,7 +22,7 @@ function ObsmKeysList(_ref) {
22
22
  const dataset = (0, _DatasetContext.useDataset)();
23
23
  const settings = (0, _SettingsContext.useSettings)();
24
24
  const dispatch = (0, _SettingsContext.useSettingsDispatch)();
25
- const [obsmKeysList, setObsmKeysList] = (0, _react.useState)([]);
25
+ const [keysList, setKeysList] = (0, _react.useState)([]);
26
26
  const [active, setActive] = (0, _react.useState)(null);
27
27
  const params = (0, _react.useMemo)(() => ({
28
28
  url: dataset.url
@@ -36,9 +36,16 @@ function ObsmKeysList(_ref) {
36
36
  });
37
37
  (0, _react.useEffect)(() => {
38
38
  if (!isPending) {
39
- if (serverError || !fetchedData || !fetchedData.length) {
39
+ if (serverError) {
40
+ if (settings.selectedObsm) {
41
+ dispatch({
42
+ type: 'select.obsm',
43
+ obsm: null
44
+ });
45
+ }
46
+ } else if (!fetchedData || !!fetchedData && !fetchedData.length) {
40
47
  setHasObsm(false);
41
- setObsmKeysList([]);
48
+ setKeysList([]);
42
49
  if (settings.selectedObsm) {
43
50
  dispatch({
44
51
  type: 'select.obsm',
@@ -47,7 +54,7 @@ function ObsmKeysList(_ref) {
47
54
  }
48
55
  } else {
49
56
  setHasObsm(true);
50
- setObsmKeysList(fetchedData);
57
+ setKeysList(fetchedData);
51
58
  if (settings.selectedObsm) {
52
59
  // If selected obsm is not in keys list, reset to null
53
60
  if (!_lodash.default.includes(fetchedData, settings.selectedObsm)) {
@@ -75,7 +82,7 @@ function ObsmKeysList(_ref) {
75
82
  }
76
83
  }
77
84
  }, [dispatch, fetchedData, isPending, serverError, setHasObsm, settings.selectedObsm]);
78
- const obsmList = obsmKeysList.map(item => {
85
+ const obsmList = keysList.map(item => {
79
86
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Dropdown.Item, {
80
87
  className: "custom ".concat(active === item && 'active'),
81
88
  onClick: () => {
@@ -0,0 +1,118 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.Plot = Plot;
7
+ var _react = require("react");
8
+ var _constants = require("../../constants/constants");
9
+ var _DatasetContext = require("../../context/DatasetContext");
10
+ var _Dotplot = require("../dotplot/Dotplot");
11
+ var _DotplotControls = require("../dotplot/DotplotControls");
12
+ var _Heatmap = require("../heatmap/Heatmap");
13
+ var _HeatmapControls = require("../heatmap/HeatmapControls");
14
+ var _Matrixplot = require("../matrixplot/Matrixplot");
15
+ var _MatrixplotControls = require("../matrixplot/MatrixplotControls");
16
+ var _offcanvas = require("../offcanvas");
17
+ var _Scatterplot = require("../scatterplot/Scatterplot");
18
+ var _ScatterplotControls = require("../scatterplot/ScatterplotControls");
19
+ var _Violin = require("../violin/Violin");
20
+ var _ViolinControls = require("../violin/ViolinControls");
21
+ var _jsxRuntime = require("react/jsx-runtime");
22
+ const _excluded = ["plotType", "showObsBtn", "showVarsBtn", "showCtrlsBtn", "canOverrideSettings"];
23
+ 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; }
24
+ 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; }
25
+ 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; }
26
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
27
+ 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); }
28
+ 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; }
29
+ 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; }
30
+ function Plot(_ref) {
31
+ let {
32
+ plotType = _constants.PLOT_TYPES.SCATTERPLOT,
33
+ showObsBtn = true,
34
+ showVarsBtn = true,
35
+ showCtrlsBtn = true,
36
+ canOverrideSettings = false
37
+ } = _ref,
38
+ props = _objectWithoutProperties(_ref, _excluded);
39
+ const [showObs, setShowObs] = (0, _react.useState)(false);
40
+ const [showObsm, setShowObsm] = (0, _react.useState)(false);
41
+ const [showVars, setShowVars] = (0, _react.useState)(false);
42
+ const [showControls, setShowControls] = (0, _react.useState)(false);
43
+ const {
44
+ plotControls,
45
+ varMode,
46
+ showSelectedAsActive
47
+ } = {
48
+ [_constants.PLOT_TYPES.SCATTERPLOT]: {
49
+ plotControls: _ScatterplotControls.ScatterplotControls,
50
+ varMode: _constants.SELECTION_MODES.SINGLE,
51
+ showSelectedAsActive: false
52
+ },
53
+ [_constants.PLOT_TYPES.DOTPLOT]: {
54
+ plotControls: _DotplotControls.DotplotControls,
55
+ varMode: _constants.SELECTION_MODES.MULTIPLE,
56
+ showSelectedAsActive: true
57
+ },
58
+ [_constants.PLOT_TYPES.MATRIXPLOT]: {
59
+ plotControls: _MatrixplotControls.MatrixplotControls,
60
+ varMode: _constants.SELECTION_MODES.MULTIPLE,
61
+ showSelectedAsActive: true
62
+ },
63
+ [_constants.PLOT_TYPES.HEATMAP]: {
64
+ plotControls: _HeatmapControls.HeatmapControls,
65
+ varMode: _constants.SELECTION_MODES.MULTIPLE,
66
+ showSelectedAsActive: true
67
+ },
68
+ [_constants.PLOT_TYPES.VIOLINPLOT]: {
69
+ plotControls: _ViolinControls.ViolinControls,
70
+ varMode: _constants.SELECTION_MODES.MULTIPLE,
71
+ showSelectedAsActive: false
72
+ }
73
+ }[plotType];
74
+ const commonProps = {
75
+ showObsBtn,
76
+ showVarsBtn,
77
+ showCtrlsBtn,
78
+ plotType,
79
+ setShowObs,
80
+ setShowVars,
81
+ setShowControls
82
+ };
83
+ const plot = () => {
84
+ switch (plotType) {
85
+ case _constants.PLOT_TYPES.DOTPLOT:
86
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Dotplot.Dotplot, _objectSpread({}, commonProps));
87
+ case _constants.PLOT_TYPES.MATRIXPLOT:
88
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Matrixplot.Matrixplot, _objectSpread({}, commonProps));
89
+ case _constants.PLOT_TYPES.HEATMAP:
90
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Heatmap.Heatmap, _objectSpread({}, commonProps));
91
+ case _constants.PLOT_TYPES.VIOLINPLOT:
92
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Violin.Violin, _objectSpread({
93
+ mode: _constants.VIOLIN_MODES.MULTIKEY
94
+ }, commonProps));
95
+ case _constants.PLOT_TYPES.SCATTERPLOT:
96
+ default:
97
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Scatterplot.Scatterplot, _objectSpread({}, commonProps));
98
+ }
99
+ };
100
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_DatasetContext.DatasetProvider, _objectSpread(_objectSpread({}, props), {}, {
101
+ children: [plot(), /*#__PURE__*/(0, _jsxRuntime.jsx)(_offcanvas.OffcanvasObs, _objectSpread(_objectSpread({}, props), {}, {
102
+ showSelectedAsActive: showSelectedAsActive,
103
+ show: showObs,
104
+ handleClose: () => setShowObs(false)
105
+ })), /*#__PURE__*/(0, _jsxRuntime.jsx)(_offcanvas.OffcanvasVars, _objectSpread(_objectSpread({}, props), {}, {
106
+ show: showVars,
107
+ handleClose: () => setShowVars(false),
108
+ mode: varMode
109
+ })), plotControls && /*#__PURE__*/(0, _jsxRuntime.jsx)(_offcanvas.OffcanvasControls, _objectSpread(_objectSpread({}, props), {}, {
110
+ show: showControls,
111
+ handleClose: () => setShowControls(false),
112
+ Controls: plotControls
113
+ })), /*#__PURE__*/(0, _jsxRuntime.jsx)(_offcanvas.OffcanvasObsm, _objectSpread(_objectSpread({}, props), {}, {
114
+ show: showObsm,
115
+ handleClose: () => setShowObsm(false)
116
+ }))]
117
+ }));
118
+ }
@@ -50,6 +50,7 @@ function usePseudospatialData(plotType) {
50
50
  }, [dataset.url, settings.pseudospatial.maskSet, settings.pseudospatial.maskValues, dataset.varNamesCol, isSliced, obsIndices]);
51
51
  const getPlotParams = (0, _react.useCallback)(() => {
52
52
  if (plotType === _constants.PSEUDOSPATIAL_PLOT_TYPES.GENE) {
53
+ var _selectedObs$omit;
53
54
  return _objectSpread({
54
55
  varKey: selectedVar !== null && selectedVar !== void 0 && selectedVar.isSet ? {
55
56
  name: selectedVar === null || selectedVar === void 0 ? void 0 : selectedVar.name,
@@ -57,18 +58,20 @@ function usePseudospatialData(plotType) {
57
58
  } : selectedVar === null || selectedVar === void 0 ? void 0 : selectedVar.index
58
59
  }, settings.sliceBy.obs ? {
59
60
  obsCol: selectedObs,
60
- obsValues: !(selectedObs !== null && selectedObs !== void 0 && selectedObs.omit.length) ? null : _lodash.default.difference(selectedObs === null || selectedObs === void 0 ? void 0 : selectedObs.values, selectedObs === null || selectedObs === void 0 ? void 0 : selectedObs.omit)
61
+ obsValues: !(selectedObs !== null && selectedObs !== void 0 && (_selectedObs$omit = selectedObs.omit) !== null && _selectedObs$omit !== void 0 && _selectedObs$omit.length) ? null : _lodash.default.difference(selectedObs === null || selectedObs === void 0 ? void 0 : selectedObs.values, selectedObs === null || selectedObs === void 0 ? void 0 : selectedObs.omit)
61
62
  } : {});
62
63
  } else if (plotType === _constants.PSEUDOSPATIAL_PLOT_TYPES.CATEGORICAL) {
64
+ var _selectedObs$omit2;
63
65
  return {
64
66
  obsCol: selectedObs,
65
- obsValues: !(selectedObs !== null && selectedObs !== void 0 && selectedObs.omit.length) ? null : _lodash.default.difference(selectedObs === null || selectedObs === void 0 ? void 0 : selectedObs.values, selectedObs === null || selectedObs === void 0 ? void 0 : selectedObs.omit),
67
+ obsValues: !(selectedObs !== null && selectedObs !== void 0 && (_selectedObs$omit2 = selectedObs.omit) !== null && _selectedObs$omit2 !== void 0 && _selectedObs$omit2.length) ? null : _lodash.default.difference(selectedObs === null || selectedObs === void 0 ? void 0 : selectedObs.values, selectedObs === null || selectedObs === void 0 ? void 0 : selectedObs.omit),
66
68
  mode: settings.pseudospatial.categoricalMode
67
69
  };
68
70
  } else if (plotType === 'continuous') {
71
+ var _selectedObs$omit3;
69
72
  return {
70
73
  obsCol: selectedObs,
71
- obsValues: !(selectedObs !== null && selectedObs !== void 0 && selectedObs.omit.length) ? null : _lodash.default.difference(selectedObs === null || selectedObs === void 0 ? void 0 : selectedObs.values, selectedObs === null || selectedObs === void 0 ? void 0 : selectedObs.omit)
74
+ obsValues: !(selectedObs !== null && selectedObs !== void 0 && (_selectedObs$omit3 = selectedObs.omit) !== null && _selectedObs$omit3 !== void 0 && _selectedObs$omit3.length) ? null : _lodash.default.difference(selectedObs === null || selectedObs === void 0 ? void 0 : selectedObs.values, selectedObs === null || selectedObs === void 0 ? void 0 : selectedObs.omit)
72
75
  };
73
76
  }
74
77
  }, [settings.pseudospatial.categoricalMode, selectedObs, selectedVar === null || selectedVar === void 0 ? void 0 : selectedVar.index, selectedVar === null || selectedVar === void 0 ? void 0 : selectedVar.isSet, selectedVar === null || selectedVar === void 0 ? void 0 : selectedVar.name, selectedVar === null || selectedVar === void 0 ? void 0 : selectedVar.vars, settings.sliceBy.obs, plotType]);
@@ -52,29 +52,32 @@ function Violin(_ref) {
52
52
  const selectedMultiVar = (0, _Resolver.useSelectedMultiVar)();
53
53
  const selectedVar = (0, _Resolver.useSelectedVar)();
54
54
  const selectedObs = (0, _Resolver.useSelectedObs)();
55
- const params = (0, _react.useMemo)(() => _objectSpread({
56
- url: dataset.url,
57
- mode: mode,
58
- scale: settings.controls.scale.violinplot,
59
- varNamesCol: dataset.varNamesCol
60
- }, {
61
- [_constants.VIOLIN_MODES.MULTIKEY]: {
62
- varKeys: selectedMultiVar.map(i => i.isSet ? {
63
- name: i.name,
64
- indices: i.vars.map(v => v.index)
65
- } : i.index),
66
- obsKeys: [] // @TODO: implement
67
- },
68
- [_constants.VIOLIN_MODES.GROUPBY]: {
69
- varKey: selectedVar !== null && selectedVar !== void 0 && selectedVar.isSet ? {
70
- name: selectedVar === null || selectedVar === void 0 ? void 0 : selectedVar.name,
71
- indices: selectedVar === null || selectedVar === void 0 ? void 0 : selectedVar.vars.map(v => v.index)
72
- } : selectedVar === null || selectedVar === void 0 ? void 0 : selectedVar.index,
73
- obsCol: selectedObs,
74
- obsValues: !(selectedObs !== null && selectedObs !== void 0 && selectedObs.omit.length) ? null : _lodash.default.difference(selectedObs === null || selectedObs === void 0 ? void 0 : selectedObs.values, selectedObs === null || selectedObs === void 0 ? void 0 : selectedObs.omit),
75
- obsIndices: isSliced ? [...(obsIndices || [])] : null
76
- }
77
- }[mode]), [dataset.url, dataset.varNamesCol, isSliced, mode, obsIndices, selectedMultiVar, selectedObs, selectedVar === null || selectedVar === void 0 ? void 0 : selectedVar.index, selectedVar === null || selectedVar === void 0 ? void 0 : selectedVar.isSet, selectedVar === null || selectedVar === void 0 ? void 0 : selectedVar.name, selectedVar === null || selectedVar === void 0 ? void 0 : selectedVar.vars, settings.controls.scale.violinplot]);
55
+ const params = (0, _react.useMemo)(() => {
56
+ var _selectedObs$omit;
57
+ return _objectSpread({
58
+ url: dataset.url,
59
+ mode: mode,
60
+ scale: settings.controls.scale.violinplot,
61
+ varNamesCol: dataset.varNamesCol
62
+ }, {
63
+ [_constants.VIOLIN_MODES.MULTIKEY]: {
64
+ varKeys: selectedMultiVar.map(i => i.isSet ? {
65
+ name: i.name,
66
+ indices: i.vars.map(v => v.index)
67
+ } : i.index),
68
+ obsKeys: [] // @TODO: implement
69
+ },
70
+ [_constants.VIOLIN_MODES.GROUPBY]: {
71
+ varKey: selectedVar !== null && selectedVar !== void 0 && selectedVar.isSet ? {
72
+ name: selectedVar === null || selectedVar === void 0 ? void 0 : selectedVar.name,
73
+ indices: selectedVar === null || selectedVar === void 0 ? void 0 : selectedVar.vars.map(v => v.index)
74
+ } : selectedVar === null || selectedVar === void 0 ? void 0 : selectedVar.index,
75
+ obsCol: selectedObs,
76
+ obsValues: !(selectedObs !== null && selectedObs !== void 0 && (_selectedObs$omit = selectedObs.omit) !== null && _selectedObs$omit !== void 0 && _selectedObs$omit.length) ? null : _lodash.default.difference(selectedObs === null || selectedObs === void 0 ? void 0 : selectedObs.values, selectedObs === null || selectedObs === void 0 ? void 0 : selectedObs.omit),
77
+ obsIndices: isSliced ? [...(obsIndices || [])] : null
78
+ }
79
+ }[mode]);
80
+ }, [dataset.url, dataset.varNamesCol, isSliced, mode, obsIndices, selectedMultiVar, selectedObs, selectedVar === null || selectedVar === void 0 ? void 0 : selectedVar.index, selectedVar === null || selectedVar === void 0 ? void 0 : selectedVar.isSet, selectedVar === null || selectedVar === void 0 ? void 0 : selectedVar.name, selectedVar === null || selectedVar === void 0 ? void 0 : selectedVar.vars, settings.controls.scale.violinplot]);
78
81
  // @TODO: set default scale
79
82
 
80
83
  (0, _react.useEffect)(() => {
@@ -60,7 +60,7 @@ const persistOptions = {
60
60
  return false;
61
61
  }
62
62
  },
63
- buster: "1.4.5" || '0.0.0'
63
+ buster: "1.4.6-dev.2026-01-12.1a2ee141" || '0.0.0'
64
64
  // @TODO: add maxAge and api version numbers as buster
65
65
  };
66
66
  const initialDataset = {
@@ -80,7 +80,7 @@ function DatasetProvider(_ref2) {
80
80
  children
81
81
  } = _ref2,
82
82
  dataset_params = _objectWithoutProperties(_ref2, _excluded);
83
- const dataset = _lodash.default.assign(initialDataset, _objectSpread({
83
+ const dataset = _lodash.default.assign({}, initialDataset, _objectSpread({
84
84
  url: dataset_url
85
85
  }, dataset_params));
86
86
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(DatasetContext.Provider, {
@@ -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.5") {
176
+ if (!buster || buster !== "1.4.6-dev.2026-01-12.1a2ee141") {
177
177
  localSettings = {};
178
178
  }
179
179
  const initSettings = (0, _react.useRef)(initializer({
@@ -198,7 +198,7 @@ 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.5" || '0.0.0',
201
+ buster: "1.4.6-dev.2026-01-12.1a2ee141" || '0.0.0',
202
202
  timestamp: Date.now()
203
203
  }, _lodash.default.omit(settings, 'data'))));
204
204
  } catch (err) {
@@ -3,69 +3,60 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.useZarr = exports.useMultipleZarr = exports.ZarrHelper = exports.GET_OPTIONS = void 0;
6
+ exports.useZarr = exports.useMultipleZarr = exports.ZarrHelper = void 0;
7
7
  var _react = require("react");
8
8
  var _reactQuery = require("@tanstack/react-query");
9
- var _zarr = require("zarr");
9
+ var zarr = _interopRequireWildcard(require("zarrita"));
10
+ var _ndarray = require("@zarrita/ndarray");
11
+ var _ndarrayUnpack = _interopRequireDefault(require("ndarray-unpack"));
12
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
13
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
10
14
  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; }
11
15
  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; }
12
16
  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; }
13
17
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
14
18
  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); }
15
- const GET_OPTIONS = exports.GET_OPTIONS = {
16
- concurrencyLimit: 10,
17
- // max number of concurrent requests (default 10)
18
- progressCallback: _ref => {
19
- let {
20
- progress,
21
- queueSize
22
- } = _ref;
23
- console.debug("".concat(progress / queueSize * 100, "% complete."));
24
- } // callback executed after each request
25
- };
26
19
  class ZarrHelper {
27
20
  async open(url, path) {
28
- const z = await (0, _zarr.openArray)({
29
- store: url,
30
- path: path,
31
- mode: 'r'
32
- });
21
+ const root = zarr.root(new zarr.FetchStore(url));
22
+ const z = await zarr.open(root.resolve(path));
33
23
  return z;
34
24
  }
35
25
  }
36
26
  exports.ZarrHelper = ZarrHelper;
37
- const fetchDataFromZarr = async (url, path, s, opts) => {
27
+ const fetchDataFromZarr = async (url, path, s) => {
38
28
  try {
39
29
  const zarrHelper = new ZarrHelper();
40
30
  const z = await zarrHelper.open(url, path);
41
- const result = await z.get(s, opts);
42
- return result.data;
31
+ const result = await (0, _ndarray.get)(z, s);
32
+ if (result.dtype === 'bigint64') throw new Error('bigint64 dtype not supported');
33
+ const arr = (0, _ndarrayUnpack.default)(result);
34
+ return arr;
43
35
  } catch (error) {
44
- if (error instanceof _zarr.ArrayNotFoundError || error instanceof _zarr.GroupNotFoundError) {
36
+ if (error instanceof zarr.NodeNotFoundError) {
45
37
  error.status = 404;
46
38
  }
47
39
  throw error;
48
40
  }
49
41
  };
50
- const useZarr = function (_ref2) {
42
+ const useZarr = function (_ref) {
51
43
  let {
52
44
  url,
53
45
  path,
54
46
  s = null
55
- } = _ref2;
56
- let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : GET_OPTIONS;
57
- let opts = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
47
+ } = _ref;
48
+ let opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
58
49
  const {
59
50
  data = null,
60
51
  isLoading: isPending = false,
61
52
  error: serverError = null
62
53
  } = (0, _reactQuery.useQuery)(_objectSpread({
63
54
  queryKey: ['zarr', url, path, s],
64
- queryFn: () => fetchDataFromZarr(url, path, s, options),
65
- retry: (failureCount, _ref3) => {
55
+ queryFn: () => fetchDataFromZarr(url, path, s),
56
+ retry: (failureCount, _ref2) => {
66
57
  let {
67
58
  error
68
- } = _ref3;
59
+ } = _ref2;
69
60
  if ([400, 401, 403, 404, 422].includes(error === null || error === void 0 ? void 0 : error.status)) return false;
70
61
  return failureCount < 3;
71
62
  }
@@ -86,9 +77,8 @@ const aggregateData = (inputs, data) => {
86
77
  return dataObject;
87
78
  };
88
79
  const useMultipleZarr = function (inputs) {
89
- let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : GET_OPTIONS;
90
- let opts = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
91
- let agg = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : aggregateData;
80
+ let opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
81
+ let agg = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : aggregateData;
92
82
  const combine = (0, _react.useCallback)(results => {
93
83
  return {
94
84
  data: agg(inputs, results.map(result => result.data)),
@@ -103,11 +93,11 @@ const useMultipleZarr = function (inputs) {
103
93
  } = (0, _reactQuery.useQueries)({
104
94
  queries: inputs.map(input => _objectSpread({
105
95
  queryKey: ['zarr', input.url, input.path, input.s],
106
- queryFn: () => fetchDataFromZarr(input.url, input.path, input.s, options),
107
- retry: (failureCount, _ref4) => {
96
+ queryFn: () => fetchDataFromZarr(input.url, input.path, input.s),
97
+ retry: (failureCount, _ref3) => {
108
98
  let {
109
99
  error
110
- } = _ref4;
100
+ } = _ref3;
111
101
  if ([400, 401, 403, 404, 422].includes(error === null || error === void 0 ? void 0 : error.status)) return false;
112
102
  return failureCount < 3;
113
103
  }
package/dist/cjs/index.js CHANGED
@@ -9,6 +9,12 @@ Object.defineProperty(exports, "COLORSCALES", {
9
9
  return _colorscales.COLORSCALES;
10
10
  }
11
11
  });
12
+ Object.defineProperty(exports, "COLOR_ENCODINGS", {
13
+ enumerable: true,
14
+ get: function () {
15
+ return _constants.COLOR_ENCODINGS;
16
+ }
17
+ });
12
18
  Object.defineProperty(exports, "DatasetProvider", {
13
19
  enumerable: true,
14
20
  get: function () {
@@ -105,6 +111,12 @@ Object.defineProperty(exports, "PLOT_TYPES", {
105
111
  return _constants.PLOT_TYPES;
106
112
  }
107
113
  });
114
+ Object.defineProperty(exports, "Plot", {
115
+ enumerable: true,
116
+ get: function () {
117
+ return _Plot.Plot;
118
+ }
119
+ });
108
120
  Object.defineProperty(exports, "Pseudospatial", {
109
121
  enumerable: true,
110
122
  get: function () {
@@ -167,7 +179,6 @@ Object.defineProperty(exports, "ViolinControls", {
167
179
  });
168
180
  var _Dotplot = require("./components/dotplot/Dotplot");
169
181
  var _DotplotControls = require("./components/dotplot/DotplotControls");
170
- var _FullPage = require("./components/full-page/FullPage");
171
182
  var _Heatmap = require("./components/heatmap/Heatmap");
172
183
  var _HeatmapControls = require("./components/heatmap/HeatmapControls");
173
184
  var _Matrixplot = require("./components/matrixplot/Matrixplot");
@@ -186,4 +197,6 @@ var _ViolinControls = require("./components/violin/ViolinControls");
186
197
  var _colorscales = require("./constants/colorscales");
187
198
  var _constants = require("./constants/constants");
188
199
  var _DatasetContext = require("./context/DatasetContext");
189
- var _FilterContext = require("./context/FilterContext");
200
+ var _FilterContext = require("./context/FilterContext");
201
+ var _FullPage = require("./components/full-page/FullPage");
202
+ var _Plot = require("./components/plot/Plot");
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.useXData = exports.useObsmData = exports.useObsData = exports.useLabelObsData = void 0;
7
7
  var _react = require("react");
8
8
  var _lodash = _interopRequireDefault(require("lodash"));
9
- var _zarr = require("zarr");
9
+ var _zarrita = require("zarrita");
10
10
  var _Resolver = require("./Resolver");
11
11
  var _constants = require("../constants/constants");
12
12
  var _DatasetContext = require("../context/DatasetContext");
@@ -22,9 +22,9 @@ const useObsmData = function () {
22
22
  const obsmParams = (0, _react.useMemo)(() => ({
23
23
  url: dataset.url,
24
24
  path: 'obsm/' + obsm,
25
- s: [null, (0, _zarr.slice)(null, 2)] // load only [:, :2]
25
+ s: [null, (0, _zarrita.slice)(null, 2)] // load only [:, :2]
26
26
  }), [dataset.url, obsm]);
27
- return (0, _zarrHelper.useZarr)(obsmParams, _zarrHelper.GET_OPTIONS, {
27
+ return (0, _zarrHelper.useZarr)(obsmParams, {
28
28
  enabled: !!obsm
29
29
  });
30
30
  };
@@ -52,7 +52,7 @@ const useXData = function () {
52
52
  s: [null, v.matrix_index]
53
53
  };
54
54
  }), [dataset.url, selectedVar]);
55
- return (0, _zarrHelper.useMultipleZarr)(xParams, _zarrHelper.GET_OPTIONS, {
55
+ return (0, _zarrHelper.useMultipleZarr)(xParams, {
56
56
  enabled: !!xParams.length
57
57
  }, agg);
58
58
  };
@@ -70,7 +70,7 @@ const useObsData = function () {
70
70
  path: 'obs/' + ((_obs = obs) === null || _obs === void 0 ? void 0 : _obs.name) + (((_obs2 = obs) === null || _obs2 === void 0 ? void 0 : _obs2.type) === _constants.OBS_TYPES.CATEGORICAL ? '/codes' : '')
71
71
  };
72
72
  }, [dataset.url, (_obs3 = obs) === null || _obs3 === void 0 ? void 0 : _obs3.name, (_obs4 = obs) === null || _obs4 === void 0 ? void 0 : _obs4.type]);
73
- return (0, _zarrHelper.useZarr)(obsParams, _zarrHelper.GET_OPTIONS, {
73
+ return (0, _zarrHelper.useZarr)(obsParams, {
74
74
  enabled: !!obs
75
75
  });
76
76
  };
@@ -86,7 +86,7 @@ const useLabelObsData = () => {
86
86
  key: obs.name
87
87
  };
88
88
  }), [dataset.url, settings.data.obs, settings.labelObs]);
89
- return (0, _zarrHelper.useMultipleZarr)(labelObsParams, _zarrHelper.GET_OPTIONS, {
89
+ return (0, _zarrHelper.useMultipleZarr)(labelObsParams, {
90
90
  enabled: !!labelObsParams.length
91
91
  });
92
92
  };