@haniffalab/cherita-react 1.3.0-dev.2025-06-06.f1eddad0 → 1.3.1-dev.2025-10-29.6de4119f

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 (138) hide show
  1. package/README.md +1 -1
  2. package/dist/cjs/components/controls/Controls.js +38 -30
  3. package/dist/cjs/components/dotplot/Dotplot.js +67 -69
  4. package/dist/cjs/components/dotplot/DotplotControls.js +103 -83
  5. package/dist/cjs/components/full-page/FullPage.js +99 -105
  6. package/dist/cjs/components/full-page/PlotAlert.js +45 -0
  7. package/dist/cjs/components/full-page/PlotTypeSelector.js +89 -44
  8. package/dist/cjs/components/heatmap/Heatmap.js +65 -65
  9. package/dist/cjs/components/heatmap/HeatmapControls.js +6 -3
  10. package/dist/cjs/components/icons/DotPlotIcon.js +64 -0
  11. package/dist/cjs/components/icons/HeatmapIcon.js +45 -0
  12. package/dist/cjs/components/icons/MatrixPlotIcon.1.js +57 -0
  13. package/dist/cjs/components/icons/MatrixPlotIcon.js +59 -0
  14. package/dist/cjs/components/icons/ScatterplotIcon.1.js +164 -0
  15. package/dist/cjs/components/icons/ScatterplotIcon.js +144 -0
  16. package/dist/cjs/components/icons/ViolinPlotIcon.js +42 -0
  17. package/dist/cjs/components/matrixplot/Matrixplot.js +65 -66
  18. package/dist/cjs/components/matrixplot/MatrixplotControls.js +8 -5
  19. package/dist/cjs/components/obs-list/ObsItem.js +267 -205
  20. package/dist/cjs/components/obs-list/ObsList.js +161 -129
  21. package/dist/cjs/components/obs-list/ObsToolbar.js +2 -3
  22. package/dist/cjs/components/obsm-list/ObsmList.js +67 -28
  23. package/dist/cjs/components/offcanvas/index.js +62 -27
  24. package/dist/cjs/components/pseudospatial/Pseudospatial.js +132 -76
  25. package/dist/cjs/components/pseudospatial/PseudospatialToolbar.js +122 -74
  26. package/dist/cjs/components/scatterplot/Scatterplot.js +128 -100
  27. package/dist/cjs/components/scatterplot/ScatterplotControls.js +45 -31
  28. package/dist/cjs/components/scatterplot/SpatialControls.js +140 -113
  29. package/dist/cjs/components/scatterplot/Toolbox.js +41 -30
  30. package/dist/cjs/components/search-bar/SearchBar.js +176 -120
  31. package/dist/cjs/components/search-bar/SearchInfo.js +76 -50
  32. package/dist/cjs/components/search-bar/SearchResults.js +93 -71
  33. package/dist/cjs/components/toolbar/Toolbar.js +46 -37
  34. package/dist/cjs/components/var-list/VarItem.js +131 -103
  35. package/dist/cjs/components/var-list/VarList.js +85 -71
  36. package/dist/cjs/components/var-list/VarListToolbar.js +59 -54
  37. package/dist/cjs/components/var-list/VarSet.js +126 -108
  38. package/dist/cjs/components/violin/Violin.js +109 -97
  39. package/dist/cjs/components/violin/ViolinControls.js +8 -5
  40. package/dist/cjs/constants/colorscales.js +19 -19
  41. package/dist/cjs/constants/constants.js +51 -48
  42. package/dist/cjs/context/DatasetContext.js +26 -17
  43. package/dist/cjs/context/FilterContext.js +11 -9
  44. package/dist/cjs/context/SettingsContext.js +271 -88
  45. package/dist/cjs/context/ZarrDataContext.js +6 -5
  46. package/dist/cjs/helpers/color-helper.js +2 -2
  47. package/dist/cjs/helpers/zarr-helper.js +3 -3
  48. package/dist/cjs/utils/Filter.js +16 -11
  49. package/dist/cjs/utils/Histogram.js +35 -33
  50. package/dist/cjs/utils/ImageViewer.js +11 -8
  51. package/dist/cjs/utils/Legend.js +37 -30
  52. package/dist/cjs/utils/LoadingIndicators.js +15 -13
  53. package/dist/cjs/utils/Resolver.js +213 -0
  54. package/dist/cjs/utils/Skeleton.js +10 -10
  55. package/dist/cjs/utils/StyledTooltip.js +44 -0
  56. package/dist/cjs/utils/VirtualizedList.js +36 -29
  57. package/dist/cjs/utils/errors.js +15 -15
  58. package/dist/cjs/utils/requests.js +21 -9
  59. package/dist/cjs/utils/search.js +4 -4
  60. package/dist/cjs/utils/string.js +6 -6
  61. package/dist/cjs/utils/zarrData.js +20 -21
  62. package/dist/css/cherita.css +135 -65
  63. package/dist/css/cherita.css.map +1 -1
  64. package/dist/esm/components/controls/Controls.js +43 -35
  65. package/dist/esm/components/dotplot/Dotplot.js +77 -78
  66. package/dist/esm/components/dotplot/DotplotControls.js +106 -85
  67. package/dist/esm/components/full-page/FullPage.js +119 -124
  68. package/dist/esm/components/full-page/PlotAlert.js +39 -0
  69. package/dist/esm/components/full-page/PlotTypeSelector.js +90 -45
  70. package/dist/esm/components/heatmap/Heatmap.js +75 -74
  71. package/dist/esm/components/heatmap/HeatmapControls.js +8 -4
  72. package/dist/esm/components/icons/DotPlotIcon.js +58 -0
  73. package/dist/esm/components/icons/HeatmapIcon.js +39 -0
  74. package/dist/esm/components/icons/MatrixPlotIcon.1.js +51 -0
  75. package/dist/esm/components/icons/MatrixPlotIcon.js +53 -0
  76. package/dist/esm/components/icons/ScatterplotIcon.1.js +158 -0
  77. package/dist/esm/components/icons/ScatterplotIcon.js +138 -0
  78. package/dist/esm/components/icons/ViolinPlotIcon.js +36 -0
  79. package/dist/esm/components/matrixplot/Matrixplot.js +75 -75
  80. package/dist/esm/components/matrixplot/MatrixplotControls.js +10 -6
  81. package/dist/esm/components/obs-list/ObsItem.js +282 -217
  82. package/dist/esm/components/obs-list/ObsList.js +176 -143
  83. package/dist/esm/components/obs-list/ObsToolbar.js +3 -3
  84. package/dist/esm/components/obsm-list/ObsmList.js +71 -32
  85. package/dist/esm/components/offcanvas/index.js +68 -33
  86. package/dist/esm/components/pseudospatial/Pseudospatial.js +145 -88
  87. package/dist/esm/components/pseudospatial/PseudospatialToolbar.js +127 -78
  88. package/dist/esm/components/scatterplot/Scatterplot.js +149 -120
  89. package/dist/esm/components/scatterplot/ScatterplotControls.js +50 -35
  90. package/dist/esm/components/scatterplot/SpatialControls.js +153 -125
  91. package/dist/esm/components/scatterplot/Toolbox.js +44 -32
  92. package/dist/esm/components/search-bar/SearchBar.js +187 -130
  93. package/dist/esm/components/search-bar/SearchInfo.js +86 -59
  94. package/dist/esm/components/search-bar/SearchResults.js +100 -77
  95. package/dist/esm/components/toolbar/Toolbar.js +49 -39
  96. package/dist/esm/components/var-list/VarItem.js +142 -113
  97. package/dist/esm/components/var-list/VarList.js +99 -84
  98. package/dist/esm/components/var-list/VarListToolbar.js +64 -58
  99. package/dist/esm/components/var-list/VarSet.js +134 -115
  100. package/dist/esm/components/violin/Violin.js +121 -108
  101. package/dist/esm/components/violin/ViolinControls.js +10 -6
  102. package/dist/esm/constants/colorscales.js +19 -19
  103. package/dist/esm/constants/constants.js +50 -47
  104. package/dist/esm/context/DatasetContext.js +33 -23
  105. package/dist/esm/context/FilterContext.js +11 -8
  106. package/dist/esm/context/SettingsContext.js +273 -89
  107. package/dist/esm/context/ZarrDataContext.js +8 -6
  108. package/dist/esm/helpers/color-helper.js +5 -5
  109. package/dist/esm/helpers/map-helper.js +2 -2
  110. package/dist/esm/helpers/zarr-helper.js +6 -6
  111. package/dist/esm/index.js +22 -22
  112. package/dist/esm/utils/Filter.js +22 -17
  113. package/dist/esm/utils/Histogram.js +39 -37
  114. package/dist/esm/utils/ImageViewer.js +12 -8
  115. package/dist/esm/utils/Legend.js +44 -36
  116. package/dist/esm/utils/LoadingIndicators.js +16 -13
  117. package/dist/esm/utils/Resolver.js +201 -0
  118. package/dist/esm/utils/Skeleton.js +11 -10
  119. package/dist/esm/utils/StyledTooltip.js +38 -0
  120. package/dist/esm/utils/VirtualizedList.js +37 -29
  121. package/dist/esm/utils/errors.js +15 -15
  122. package/dist/esm/utils/requests.js +24 -12
  123. package/dist/esm/utils/search.js +7 -7
  124. package/dist/esm/utils/string.js +7 -7
  125. package/dist/esm/utils/zarrData.js +27 -28
  126. package/package.json +20 -8
  127. package/scss/cherita-bootstrap.scss +2 -2
  128. package/scss/cherita.scss +65 -16
  129. package/scss/components/accordions.scss +15 -2
  130. package/scss/components/layouts.scss +68 -50
  131. package/scss/components/lists.scss +16 -5
  132. package/scss/components/plotly.scss +38 -26
  133. package/scss/components/plots.scss +14 -1
  134. package/dist/assets/images/plots/dotplot.svg +0 -152
  135. package/dist/assets/images/plots/heatmap.svg +0 -193
  136. package/dist/assets/images/plots/matrixplot.svg +0 -275
  137. package/dist/assets/images/plots/scatterplot.svg +0 -198
  138. package/dist/assets/images/plots/violin.svg +0 -50
@@ -4,7 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.Violin = Violin;
7
- var _react = _interopRequireWildcard(require("react"));
7
+ var _react = require("react");
8
8
  var _freeSolidSvgIcons = require("@fortawesome/free-solid-svg-icons");
9
9
  var _reactFontawesome = require("@fortawesome/react-fontawesome");
10
10
  var _lodash = _interopRequireDefault(require("lodash"));
@@ -16,16 +16,18 @@ var _FilterContext = require("../../context/FilterContext");
16
16
  var _SettingsContext = require("../../context/SettingsContext");
17
17
  var _LoadingIndicators = require("../../utils/LoadingIndicators");
18
18
  var _requests = require("../../utils/requests");
19
+ var _Resolver = require("../../utils/Resolver");
20
+ var _StyledTooltip = require("../../utils/StyledTooltip");
21
+ var _PlotAlert = require("../full-page/PlotAlert");
19
22
  var _Toolbar = require("../toolbar/Toolbar");
23
+ var _jsxRuntime = require("react/jsx-runtime");
20
24
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
21
- 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); }
22
25
  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; }
23
26
  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; }
24
27
  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; }
25
28
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
26
29
  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); }
27
30
  function Violin(_ref) {
28
- var _settings$selectedVar, _settings$selectedVar2, _settings$selectedVar3, _settings$selectedVar4, _settings$selectedObs, _settings$selectedObs2, _settings$selectedObs3;
29
31
  let {
30
32
  mode = _constants.VIOLIN_MODES.MULTIKEY,
31
33
  showObsBtn = false,
@@ -33,9 +35,11 @@ function Violin(_ref) {
33
35
  showCtrlsBtn = false,
34
36
  setShowObs,
35
37
  setShowVars,
36
- setShowControls
38
+ setShowControls,
39
+ plotType,
40
+ setPlotType
37
41
  } = _ref;
38
- const ENDPOINT = "violin";
42
+ const ENDPOINT = 'violin';
39
43
  const dataset = (0, _DatasetContext.useDataset)();
40
44
  const settings = (0, _SettingsContext.useSettings)();
41
45
  const {
@@ -45,91 +49,63 @@ function Violin(_ref) {
45
49
  const [data, setData] = (0, _react.useState)([]);
46
50
  const [layout, setLayout] = (0, _react.useState)({});
47
51
  const [hasSelections, setHasSelections] = (0, _react.useState)(false);
48
- const [params, setParams] = (0, _react.useState)(_objectSpread({
52
+ const selectedMultiVar = (0, _Resolver.useSelectedMultiVar)();
53
+ const selectedVar = (0, _Resolver.useSelectedVar)();
54
+ const selectedObs = (0, _Resolver.useSelectedObs)();
55
+ const params = (0, _react.useMemo)(() => _objectSpread({
49
56
  url: dataset.url,
50
57
  mode: mode,
51
58
  scale: settings.controls.scale.violinplot,
52
59
  varNamesCol: dataset.varNamesCol
53
60
  }, {
54
61
  [_constants.VIOLIN_MODES.MULTIKEY]: {
55
- varKeys: settings.selectedMultiVar.map(i => i.isSet ? {
62
+ varKeys: selectedMultiVar.map(i => i.isSet ? {
56
63
  name: i.name,
57
64
  indices: i.vars.map(v => v.index)
58
65
  } : i.index),
59
66
  obsKeys: [] // @TODO: implement
60
67
  },
61
68
  [_constants.VIOLIN_MODES.GROUPBY]: {
62
- varKey: (_settings$selectedVar = settings.selectedVar) !== null && _settings$selectedVar !== void 0 && _settings$selectedVar.isSet ? {
63
- name: (_settings$selectedVar2 = settings.selectedVar) === null || _settings$selectedVar2 === void 0 ? void 0 : _settings$selectedVar2.name,
64
- indices: (_settings$selectedVar3 = settings.selectedVar) === null || _settings$selectedVar3 === void 0 ? void 0 : _settings$selectedVar3.vars.map(v => v.index)
65
- } : (_settings$selectedVar4 = settings.selectedVar) === null || _settings$selectedVar4 === void 0 ? void 0 : _settings$selectedVar4.index,
66
- obsCol: settings.selectedObs,
67
- obsValues: !((_settings$selectedObs = settings.selectedObs) !== null && _settings$selectedObs !== void 0 && _settings$selectedObs.omit.length) ? null : _lodash.default.difference(_lodash.default.values((_settings$selectedObs2 = settings.selectedObs) === null || _settings$selectedObs2 === void 0 ? void 0 : _settings$selectedObs2.codes), (_settings$selectedObs3 = settings.selectedObs) === null || _settings$selectedObs3 === void 0 ? void 0 : _settings$selectedObs3.omit).map(c => {
68
- var _settings$selectedObs4;
69
- return (_settings$selectedObs4 = settings.selectedObs) === null || _settings$selectedObs4 === void 0 ? void 0 : _settings$selectedObs4.codesMap[c];
70
- }),
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),
71
75
  obsIndices: isSliced ? [...(obsIndices || [])] : null
72
76
  }
73
- }[mode]));
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]);
74
78
  // @TODO: set default scale
75
79
 
76
80
  (0, _react.useEffect)(() => {
77
81
  if (mode === _constants.VIOLIN_MODES.MULTIKEY) {
78
- if (settings.selectedMultiVar.length) {
82
+ if (selectedMultiVar.length) {
79
83
  setHasSelections(true);
80
84
  } else {
81
85
  setHasSelections(false);
82
86
  }
83
- setParams(p => {
84
- return _objectSpread(_objectSpread({}, p), {}, {
85
- url: dataset.url,
86
- mode: mode,
87
- varKeys: settings.selectedMultiVar.map(i => i.isSet ? {
88
- name: i.name,
89
- indices: i.vars.map(v => v.index)
90
- } : i.index),
91
- scale: settings.controls.scale.violinplot,
92
- varNamesCol: dataset.varNamesCol
93
- });
94
- });
95
87
  } else if (mode === _constants.VIOLIN_MODES.GROUPBY) {
96
- if (settings.selectedObs && settings.selectedVar) {
88
+ if (selectedObs && selectedVar) {
97
89
  setHasSelections(true);
98
90
  } else {
99
91
  setHasSelections(false);
100
92
  }
101
- setParams(p => {
102
- var _settings$selectedVar5, _settings$selectedVar6, _settings$selectedVar7, _settings$selectedVar8, _settings$selectedObs5, _settings$selectedObs6, _settings$selectedObs7;
103
- return _objectSpread(_objectSpread({}, p), {}, {
104
- url: dataset.url,
105
- mode: mode,
106
- varKey: (_settings$selectedVar5 = settings.selectedVar) !== null && _settings$selectedVar5 !== void 0 && _settings$selectedVar5.isSet ? {
107
- name: (_settings$selectedVar6 = settings.selectedVar) === null || _settings$selectedVar6 === void 0 ? void 0 : _settings$selectedVar6.name,
108
- indices: (_settings$selectedVar7 = settings.selectedVar) === null || _settings$selectedVar7 === void 0 ? void 0 : _settings$selectedVar7.vars.map(v => v.index)
109
- } : (_settings$selectedVar8 = settings.selectedVar) === null || _settings$selectedVar8 === void 0 ? void 0 : _settings$selectedVar8.index,
110
- obsCol: settings.selectedObs,
111
- obsValues: !((_settings$selectedObs5 = settings.selectedObs) !== null && _settings$selectedObs5 !== void 0 && _settings$selectedObs5.omit.length) ? null : _lodash.default.difference(_lodash.default.values((_settings$selectedObs6 = settings.selectedObs) === null || _settings$selectedObs6 === void 0 ? void 0 : _settings$selectedObs6.codes), (_settings$selectedObs7 = settings.selectedObs) === null || _settings$selectedObs7 === void 0 ? void 0 : _settings$selectedObs7.omit).map(c => {
112
- var _settings$selectedObs8;
113
- return (_settings$selectedObs8 = settings.selectedObs) === null || _settings$selectedObs8 === void 0 ? void 0 : _settings$selectedObs8.codesMap[c];
114
- }),
115
- obsIndices: isSliced ? [...(obsIndices || [])] : null,
116
- scale: settings.controls.scale.violinplot,
117
- varNamesCol: dataset.varNamesCol
118
- });
119
- });
120
93
  }
121
- }, [settings.controls.scale.violinplot, settings.selectedMultiVar, settings.selectedObs, settings.selectedVar, dataset.url, dataset.varNamesCol, obsIndices, isSliced, mode]);
94
+ }, [settings.controls.scale.violinplot, selectedMultiVar, selectedObs, selectedVar, dataset.url, dataset.varNamesCol, obsIndices, isSliced, mode]);
122
95
  const {
123
96
  fetchedData,
124
97
  isPending,
125
98
  serverError
126
99
  } = (0, _requests.useDebouncedFetch)(ENDPOINT, params, 500, {
127
- enabled: mode === _constants.VIOLIN_MODES.MULTIKEY && (!!params.varKeys.length || !!params.obsKeys.length) || mode === _constants.VIOLIN_MODES.GROUPBY && !!params.varKey && !!params.obsCol
100
+ isEnabled: mode === _constants.VIOLIN_MODES.MULTIKEY && (params => !!params.varKeys.length || !!params.obsKeys.length) || mode === _constants.VIOLIN_MODES.GROUPBY && (params => !!params.varKey && !!params.obsCol)
128
101
  });
129
102
  (0, _react.useEffect)(() => {
130
- if (hasSelections && !isPending && !serverError) {
103
+ if (hasSelections && !!fetchedData && !isPending && !serverError) {
131
104
  setData(fetchedData.data);
132
105
  setLayout(fetchedData.layout);
106
+ } else {
107
+ setData([]);
108
+ setLayout({});
133
109
  }
134
110
  }, [fetchedData, hasSelections, isPending, serverError]);
135
111
  const customModeBarButtons = _lodash.default.compact([showObsBtn && (0, _Toolbar.ObsPlotlyToolbar)({
@@ -142,51 +118,87 @@ function Violin(_ref) {
142
118
  const modeBarButtons = customModeBarButtons.length ? [customModeBarButtons, _constants.PLOTLY_MODEBAR_BUTTONS] : [_constants.PLOTLY_MODEBAR_BUTTONS];
143
119
  if (!serverError) {
144
120
  if (hasSelections) {
145
- return /*#__PURE__*/_react.default.createElement("div", {
146
- className: "cherita-plot cherita-violin position-relative"
147
- }, isPending && /*#__PURE__*/_react.default.createElement(_LoadingIndicators.LoadingSpinner, null), /*#__PURE__*/_react.default.createElement(_reactPlotly.default, {
148
- data: data,
149
- layout: layout,
150
- useResizeHandler: true,
151
- style: {
152
- width: "100%",
153
- height: "100%"
154
- },
155
- config: {
156
- displaylogo: false,
157
- modeBarButtons: modeBarButtons
158
- }
159
- }), (fetchedData === null || fetchedData === void 0 ? void 0 : fetchedData.resampled) && /*#__PURE__*/_react.default.createElement(_reactBootstrap.Alert, {
160
- variant: "warning"
161
- }, /*#__PURE__*/_react.default.createElement("b", null, "Warning:"), " For performance reasons this plot was generated with resampled data. It will not be exactly the same as one produced with the entire dataset. \xA0", /*#__PURE__*/_react.default.createElement(_reactBootstrap.OverlayTrigger, {
162
- placement: "top",
163
- overlay: /*#__PURE__*/_react.default.createElement(_reactBootstrap.Tooltip, null, "Resampled to 100K values following a Monte Carlo style approach to help ensure resampled data is a good representation of the original dataset's distribution.")
164
- }, /*#__PURE__*/_react.default.createElement(_reactFontawesome.FontAwesomeIcon, {
165
- icon: _freeSolidSvgIcons.faCircleInfo
166
- }))));
121
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
122
+ className: "cherita-plot cherita-violin",
123
+ children: [isPending && /*#__PURE__*/(0, _jsxRuntime.jsx)(_LoadingIndicators.LoadingSpinner, {}), /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
124
+ className: "d-flex flex-column h-100",
125
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
126
+ className: "flex-grow-1 position-relative",
127
+ style: {
128
+ minHeight: '0'
129
+ },
130
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactPlotly.default, {
131
+ data: data,
132
+ layout: layout,
133
+ useResizeHandler: true,
134
+ style: {
135
+ width: '100%',
136
+ height: '100%'
137
+ },
138
+ config: {
139
+ displaylogo: false,
140
+ modeBarButtons: modeBarButtons
141
+ }
142
+ })
143
+ }), (fetchedData === null || fetchedData === void 0 ? void 0 : fetchedData.resampled) && /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
144
+ className: "resampled-tooltip-container",
145
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_StyledTooltip.StyledTooltip, {
146
+ title: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
147
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("strong", {
148
+ children: "Note:"
149
+ }), " This plot uses resampled data to improve performance, so values may differ slightly from the full dataset. The data were resampled to exactly 100,000 values using a Monte Carlo\u2013style approach to provide a representative view of the full distribution while reducing processing time."]
150
+ }),
151
+ placement: "bottom",
152
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactBootstrap.Badge, {
153
+ bg: "info",
154
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactFontawesome.FontAwesomeIcon, {
155
+ className: "fs-6",
156
+ icon: _freeSolidSvgIcons.faCircleInfo
157
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
158
+ className: "d-none d-lg-inline ms-2 fs-6 text-uppercase",
159
+ children: "Resampled"
160
+ })]
161
+ })
162
+ })
163
+ })]
164
+ })]
165
+ });
167
166
  }
168
- return /*#__PURE__*/_react.default.createElement("div", {
169
- className: "cherita-violin"
170
- }, mode === _constants.VIOLIN_MODES.MULTIKEY && /*#__PURE__*/_react.default.createElement(_reactBootstrap.Alert, {
171
- variant: "light"
172
- }, "Select", " ", showVarsBtn ? /*#__PURE__*/_react.default.createElement(_reactBootstrap.Button, {
173
- variant: "link",
174
- className: "border-0 p-0 align-baseline",
175
- onClick: setShowVars
176
- }, "features") : "features"), mode === _constants.VIOLIN_MODES.GROUPBY && /*#__PURE__*/_react.default.createElement(_reactBootstrap.Alert, {
177
- variant: "light"
178
- }, "Select", " ", showObsBtn ? /*#__PURE__*/_react.default.createElement(_reactBootstrap.Button, {
179
- variant: "link",
180
- className: "border-0 p-0 align-baseline",
181
- onClick: setShowObs
182
- }, "categories") : "categories", " ", "and a", " ", showVarsBtn ? /*#__PURE__*/_react.default.createElement(_reactBootstrap.Button, {
183
- variant: "link",
184
- className: "border-0 p-0 align-baseline",
185
- onClick: setShowVars
186
- }, "feature") : "feature"));
167
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_PlotAlert.PlotAlert, {
168
+ variant: "info",
169
+ heading: "Set up your violin plot",
170
+ plotType: plotType,
171
+ setPlotType: setPlotType,
172
+ children: [mode === _constants.VIOLIN_MODES.MULTIKEY && /*#__PURE__*/(0, _jsxRuntime.jsxs)("p", {
173
+ className: "p-0 m-0",
174
+ children: ["Select one or more", ' ', showVarsBtn ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Button, {
175
+ variant: "link",
176
+ className: "border-0 p-0 align-baseline",
177
+ onClick: setShowVars,
178
+ children: "features"
179
+ }) : 'features', ' ', "to display their expression distributions across all observations."]
180
+ }), mode === _constants.VIOLIN_MODES.GROUPBY && /*#__PURE__*/(0, _jsxRuntime.jsxs)("p", {
181
+ className: "p-0 m-0",
182
+ children: ["Select a", ' ', showObsBtn ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Button, {
183
+ variant: "link",
184
+ className: "border-0 p-0 align-baseline",
185
+ onClick: setShowObs,
186
+ children: "category"
187
+ }) : 'category', ' ', "to group observations, and choose a", ' ', showVarsBtn ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Button, {
188
+ variant: "link",
189
+ className: "border-0 p-0 align-baseline",
190
+ onClick: setShowVars,
191
+ children: "feature"
192
+ }) : 'feature', ' ', "to view its distribution within each group."]
193
+ })]
194
+ });
187
195
  } else {
188
- return /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Alert, {
189
- variant: "danger"
190
- }, serverError.message));
196
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_PlotAlert.PlotAlert, {
197
+ variant: "danger",
198
+ heading: "Error displaying the violin plot",
199
+ plotType: plotType,
200
+ setPlotType: setPlotType,
201
+ children: serverError.message || 'An unexpected error occurred while generating the plot.'
202
+ });
191
203
  }
192
204
  }
@@ -4,12 +4,15 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.ViolinControls = ViolinControls;
7
- var _react = _interopRequireDefault(require("react"));
8
7
  var _reactBootstrap = require("react-bootstrap");
9
8
  var _Controls = require("../controls/Controls");
10
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
9
+ var _jsxRuntime = require("react/jsx-runtime");
11
10
  function ViolinControls() {
12
- return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Form, null, /*#__PURE__*/_react.default.createElement(_Controls.ScaleSelect, {
13
- plot: "violinplot"
14
- })));
11
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_jsxRuntime.Fragment, {
12
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Form, {
13
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Controls.ScaleSelect, {
14
+ plot: "violinplot"
15
+ })
16
+ })
17
+ });
15
18
  }
@@ -6,23 +6,23 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.COLORSCALES = void 0;
7
7
  // From plotly https://github.com/plotly/plotly.js/blob/5bc25b490702e5ed61265207833dbd58e8ab27f1/src/components/colorscale/scales.js
8
8
  const COLORSCALES = exports.COLORSCALES = {
9
- Greys: ["#000000", "#ffffff"],
10
- YlGnBu: ["#081d58", "#253494", "#225ea8", "#1d91c0", "#41b6c4", "#7fcdbb", "#c7e9b4", "#edf8d9", "#ffffd9"],
11
- Greens: ["#00441b", "#006d2c", "#238b45", "#41ab5d", "#74c476", "#a1d9a5", "#c7e9c0", "#e5f5e0", "#f7fcf5"],
12
- YlOrRd: ["#800026", "#bd0026", "#e31a1c", "#fc4e2a", "#fd8d3c", "#feb24c", "#fed976", "#ffed9f", "#ffffcc"],
13
- Bluered: ["#0000ff", "#ff0000"],
14
- RdBu: ["#050aac", "#6a89f7", "#bebebe", "#dcaa84", "#e6915a", "#b20a1c"],
15
- Reds: ["#dcdcdc", "#f5c39d", "#f5a069", "#b20a1c"],
16
- Blues: ["#050aac", "#283cba", "#4664f5", "#5a78f5", "#6a89f7", "#dcdcdc"],
17
- Picnic: ["#0000ff", "#3399ff", "#66ccff", "#99ccff", "#ccccff", "#ffffff", "#ffccff", "#ff99ff", "#ff66cc", "#ff6666", "#ff0000"],
18
- Rainbow: ["#96005a", "#0000c8", "#0019ff", "#0098ff", "#2cff96", "#97ff00", "#ffe600", "#ff6f00", "#ff0000"],
19
- Portland: ["#0c3383", "#0a88ba", "#f2d338", "#f28f38", "#d91e1e"],
20
- Jet: ["#000083", "#003caa", "#05ffff", "#ffff00", "#fa0000", "#800000"],
21
- Hot: ["#000000", "#e60000", "#ffd200", "#ffffff"],
22
- Blackbody: ["#000000", "#e60000", "#e6d200", "#ffffff", "#a0c8ff"],
23
- Earth: ["#000082", "#00b4b4", "#28d228", "#e6e632", "#784614", "#ffffff"],
24
- Electric: ["#000000", "#1e0064", "#780064", "#a05a00", "#e6c800", "#fffadc"],
25
- Viridis: ["#440154", "#48186a", "#472d7b", "#424086", "#3b528b", "#33638d", "#2c728e", "#26828e", "#21918c", "#1fa088", "#28ae80", "#3fbc73", "#5ec962", "#84d44b", "#addc30", "#d8e219", "#fde725"],
26
- Cividis: ["#00204c", "#002a66", "#00346e", "#273f6c", "#3c4a6c", "#4c556b", "#5b5f6d", "#686a70", "#757575", "#838178", "#929c78", "#a19676", "#b0a572", "#c0af6d", "#d1ba65", "#e1c75c", "#f3db4f", "#ffe945"],
27
- Accent: ["#7fc97f", "#beaed4", "#fdc086", "#ffff99", "#386cb0", "#f0027f", "#bf5b17", "#666666"]
9
+ Greys: ['#000000', '#ffffff'],
10
+ YlGnBu: ['#081d58', '#253494', '#225ea8', '#1d91c0', '#41b6c4', '#7fcdbb', '#c7e9b4', '#edf8d9', '#ffffd9'],
11
+ Greens: ['#00441b', '#006d2c', '#238b45', '#41ab5d', '#74c476', '#a1d9a5', '#c7e9c0', '#e5f5e0', '#f7fcf5'],
12
+ YlOrRd: ['#800026', '#bd0026', '#e31a1c', '#fc4e2a', '#fd8d3c', '#feb24c', '#fed976', '#ffed9f', '#ffffcc'],
13
+ Bluered: ['#0000ff', '#ff0000'],
14
+ RdBu: ['#050aac', '#6a89f7', '#bebebe', '#dcaa84', '#e6915a', '#b20a1c'],
15
+ Reds: ['#dcdcdc', '#f5c39d', '#f5a069', '#b20a1c'],
16
+ Blues: ['#050aac', '#283cba', '#4664f5', '#5a78f5', '#6a89f7', '#dcdcdc'],
17
+ Picnic: ['#0000ff', '#3399ff', '#66ccff', '#99ccff', '#ccccff', '#ffffff', '#ffccff', '#ff99ff', '#ff66cc', '#ff6666', '#ff0000'],
18
+ Rainbow: ['#96005a', '#0000c8', '#0019ff', '#0098ff', '#2cff96', '#97ff00', '#ffe600', '#ff6f00', '#ff0000'],
19
+ Portland: ['#0c3383', '#0a88ba', '#f2d338', '#f28f38', '#d91e1e'],
20
+ Jet: ['#000083', '#003caa', '#05ffff', '#ffff00', '#fa0000', '#800000'],
21
+ Hot: ['#000000', '#e60000', '#ffd200', '#ffffff'],
22
+ Blackbody: ['#000000', '#e60000', '#e6d200', '#ffffff', '#a0c8ff'],
23
+ Earth: ['#000082', '#00b4b4', '#28d228', '#e6e632', '#784614', '#ffffff'],
24
+ Electric: ['#000000', '#1e0064', '#780064', '#a05a00', '#e6c800', '#fffadc'],
25
+ Viridis: ['#440154', '#48186a', '#472d7b', '#424086', '#3b528b', '#33638d', '#2c728e', '#26828e', '#21918c', '#1fa088', '#28ae80', '#3fbc73', '#5ec962', '#84d44b', '#addc30', '#d8e219', '#fde725'],
26
+ Cividis: ['#00204c', '#002a66', '#00346e', '#273f6c', '#3c4a6c', '#4c556b', '#5b5f6d', '#686a70', '#757575', '#838178', '#929c78', '#a19676', '#b0a572', '#c0af6d', '#d1ba65', '#e1c75c', '#f3db4f', '#ffe945'],
27
+ Accent: ['#7fc97f', '#beaed4', '#fdc086', '#ffff99', '#386cb0', '#f0027f', '#bf5b17', '#666666']
28
28
  };
@@ -3,104 +3,107 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.VIOLIN_MODES = exports.VIOLINPLOT_SCALES = exports.VAR_SORT_ORDER = exports.VAR_SORT = exports.UNSELECTED_POLYGON_FILLCOLOR = exports.SELECTION_MODES = exports.SELECTED_POLYGON_FILLCOLOR = exports.PSEUDOSPATIAL_PLOT_TYPES = exports.PSEUDOSPATIAL_CATEGORICAL_MODES = exports.PLOT_TYPES = exports.PLOTLY_MODEBAR_BUTTONS = exports.OBS_TYPES = exports.MATRIXPLOT_SCALES = exports.LOCAL_STORAGE_KEY = exports.DOTPLOT_SCALES = exports.DEFAULT_OBS_GROUP = exports.COLOR_ENCODINGS = exports.BREAKPOINTS = void 0;
7
- const LOCAL_STORAGE_KEY = exports.LOCAL_STORAGE_KEY = "CHERITA";
6
+ exports.VIOLIN_MODES = exports.VIOLINPLOT_SCALES = exports.VAR_SORT_ORDER = exports.VAR_SORT = exports.UNSELECTED_POLYGON_FILLCOLOR = exports.SELECTION_MODES = exports.SELECTED_POLYGON_FILLCOLOR = exports.PSEUDOSPATIAL_PLOT_TYPES = exports.PSEUDOSPATIAL_CATEGORICAL_MODES = exports.PLOT_TYPES = exports.PLOTLY_MODEBAR_BUTTONS = exports.OBS_TYPES = exports.MATRIXPLOT_SCALES = exports.LOCAL_STORAGE_KEY = exports.DOTPLOT_SCALES = exports.DEFAULT_OBS_GROUP = exports.DEFAULT_OBSM_KEYS = exports.COLOR_ENCODINGS = exports.BREAKPOINTS = void 0;
7
+ const LOCAL_STORAGE_KEY = exports.LOCAL_STORAGE_KEY = 'CHERITA';
8
8
  const PLOT_TYPES = exports.PLOT_TYPES = {
9
- SCATTERPLOT: "scatterplot",
10
- DOTPLOT: "dotplot",
11
- HEATMAP: "heatmap",
12
- MATRIXPLOT: "matrixplot",
13
- VIOLINPLOT: "violinplot"
9
+ SCATTERPLOT: 'scatterplot',
10
+ DOTPLOT: 'dotplot',
11
+ HEATMAP: 'heatmap',
12
+ MATRIXPLOT: 'matrixplot',
13
+ VIOLINPLOT: 'violinplot'
14
14
  };
15
15
  const COLOR_ENCODINGS = exports.COLOR_ENCODINGS = {
16
- VAR: "var",
17
- OBS: "obs"
16
+ VAR: 'var',
17
+ OBS: 'obs'
18
18
  };
19
19
  const OBS_TYPES = exports.OBS_TYPES = {
20
- CATEGORICAL: "categorical",
21
- DISCRETE: "discrete",
22
- CONTINUOUS: "continuous",
23
- BOOLEAN: "boolean"
20
+ CATEGORICAL: 'categorical',
21
+ DISCRETE: 'discrete',
22
+ CONTINUOUS: 'continuous',
23
+ BOOLEAN: 'boolean'
24
24
  };
25
25
  const VAR_SORT = exports.VAR_SORT = {
26
26
  NONE: null,
27
- NAME: "name",
28
- MATRIX: "matrix"
27
+ NAME: 'name',
28
+ MATRIX: 'matrix'
29
29
  };
30
30
  const VAR_SORT_ORDER = exports.VAR_SORT_ORDER = {
31
- ASC: "asc",
32
- DESC: "desc"
31
+ ASC: 'asc',
32
+ DESC: 'desc'
33
33
  };
34
34
  const SELECTED_POLYGON_FILLCOLOR = exports.SELECTED_POLYGON_FILLCOLOR = [107, 170, 209, 255 / 2];
35
35
  const UNSELECTED_POLYGON_FILLCOLOR = exports.UNSELECTED_POLYGON_FILLCOLOR = [167, 191, 211, 255 / 3];
36
36
  const SELECTION_MODES = exports.SELECTION_MODES = {
37
- SINGLE: "single",
38
- MULTIPLE: "multiple"
37
+ SINGLE: 'single',
38
+ MULTIPLE: 'multiple'
39
39
  };
40
40
  const VIOLIN_MODES = exports.VIOLIN_MODES = {
41
- MULTIKEY: "multikey",
42
- GROUPBY: "groupby"
41
+ MULTIKEY: 'multikey',
42
+ GROUPBY: 'groupby'
43
43
  };
44
44
  const MATRIXPLOT_SCALES = exports.MATRIXPLOT_SCALES = {
45
45
  NONE: {
46
46
  value: null,
47
- name: "None"
47
+ name: 'None'
48
48
  },
49
49
  GROUP: {
50
- value: "group",
51
- name: "Group"
50
+ value: 'group',
51
+ name: 'Group'
52
52
  },
53
53
  VAR: {
54
- value: "var",
55
- name: "Var"
54
+ value: 'var',
55
+ name: 'Var'
56
56
  }
57
57
  };
58
58
  const DOTPLOT_SCALES = exports.DOTPLOT_SCALES = {
59
59
  NONE: {
60
60
  value: null,
61
- name: "None"
61
+ name: 'None'
62
62
  },
63
63
  GROUP: {
64
- value: "group",
65
- name: "Group"
64
+ value: 'group',
65
+ name: 'Group'
66
66
  },
67
67
  VAR: {
68
- value: "var",
69
- name: "Var"
68
+ value: 'var',
69
+ name: 'Var'
70
70
  }
71
71
  };
72
72
  const VIOLINPLOT_SCALES = exports.VIOLINPLOT_SCALES = {
73
73
  WIDTH: {
74
- value: "width",
75
- name: "Width"
74
+ value: 'width',
75
+ name: 'Width'
76
76
  },
77
77
  COUNT: {
78
- value: "count",
79
- name: "Count"
78
+ value: 'count',
79
+ name: 'Count'
80
80
  }
81
81
  };
82
82
  const PSEUDOSPATIAL_PLOT_TYPES = exports.PSEUDOSPATIAL_PLOT_TYPES = {
83
- GENE: "gene",
84
- CATEGORICAL: "categorical",
85
- CONTINUOUS: "continuous",
86
- MASKS: "masks"
83
+ GENE: 'gene',
84
+ CATEGORICAL: 'categorical',
85
+ CONTINUOUS: 'continuous',
86
+ MASKS: 'masks'
87
87
  };
88
88
  const PSEUDOSPATIAL_CATEGORICAL_MODES = exports.PSEUDOSPATIAL_CATEGORICAL_MODES = {
89
89
  ACROSS: {
90
- value: "across",
91
- name: "% across sections"
90
+ value: 'across',
91
+ name: '% across sections'
92
92
  },
93
93
  WITHIN: {
94
- value: "within",
95
- name: "% within section"
94
+ value: 'within',
95
+ name: '% within section'
96
96
  }
97
97
  };
98
98
 
99
99
  // `default` cols to be shown out of accordion, at top of obslist
100
100
  // default values from cellxgene schema
101
- const DEFAULT_OBS_GROUP = exports.DEFAULT_OBS_GROUP = ["assay", "cell_type", "development_stage", "disease", "donor_id", "organism", "self_reported_ethnicity", "sex", "suspension_type", "tissue", "tissue_type"];
102
- const PLOTLY_MODEBAR_BUTTONS = exports.PLOTLY_MODEBAR_BUTTONS = ["toImage", "zoom2d", "pan2d", "zoomIn2d", "zoomOut2d", "autoScale2d", "resetScale2d"];
101
+ const DEFAULT_OBS_GROUP = exports.DEFAULT_OBS_GROUP = ['assay', 'cell_type', 'development_stage', 'disease', 'donor_id', 'organism', 'self_reported_ethnicity', 'sex', 'suspension_type', 'tissue', 'tissue_type'];
102
+ const PLOTLY_MODEBAR_BUTTONS = exports.PLOTLY_MODEBAR_BUTTONS = ['toImage', 'zoom2d', 'pan2d', 'zoomIn2d', 'zoomOut2d', 'autoScale2d', 'resetScale2d'];
103
103
  const BREAKPOINTS = exports.BREAKPOINTS = {
104
- LG: "(max-width: 991.98px)",
105
- XL: "(max-width: 1199.98px)"
106
- };
104
+ LG: '(max-width: 991.98px)',
105
+ XL: '(max-width: 1199.98px)'
106
+ };
107
+
108
+ // In order of priority
109
+ const DEFAULT_OBSM_KEYS = exports.DEFAULT_OBSM_KEYS = ['x_umap', 'x_tsne', 'x_scvi', 'x_pca'];
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.DatasetContext = void 0;
7
7
  exports.DatasetProvider = DatasetProvider;
8
8
  exports.useDataset = useDataset;
9
- var _react = _interopRequireWildcard(require("react"));
9
+ var _react = require("react");
10
10
  var _querySyncStoragePersister = require("@tanstack/query-sync-storage-persister");
11
11
  var _reactQuery = require("@tanstack/react-query");
12
12
  var _reactQueryPersistClient = require("@tanstack/react-query-persist-client");
@@ -14,9 +14,9 @@ var _lodash = _interopRequireDefault(require("lodash"));
14
14
  var _FilterContext = require("./FilterContext");
15
15
  var _SettingsContext = require("./SettingsContext");
16
16
  var _ZarrDataContext = require("./ZarrDataContext");
17
+ var _jsxRuntime = require("react/jsx-runtime");
17
18
  const _excluded = ["dataset_url", "children"];
18
19
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
19
- 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); }
20
20
  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; }
21
21
  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; }
22
22
  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; }
@@ -43,7 +43,7 @@ const queryClient = new _reactQuery.QueryClient({
43
43
  })
44
44
  });
45
45
  // Type of queries to store responses
46
- const persistKeys = ["obs/cols", "var/names", "obsm/keys", "obs/bins", "obs/distribution"];
46
+ const persistKeys = ['obs/cols', 'var/names', 'obsm/keys', 'obs/bins', 'obs/distribution'];
47
47
  const persistOptions = {
48
48
  persister: (0, _querySyncStoragePersister.createSyncStoragePersister)({
49
49
  storage: window.localStorage
@@ -54,13 +54,14 @@ const persistOptions = {
54
54
  queryKey,
55
55
  state
56
56
  } = _ref;
57
- if (state.status === "success") {
57
+ if (state.status === 'success') {
58
58
  return persistKeys.includes(queryKey === null || queryKey === void 0 ? void 0 : queryKey[0]);
59
59
  }
60
60
  return false;
61
61
  }
62
- }
63
- // @TODO: add maxAge and buster (app and api version numbers as busters)
62
+ },
63
+ buster: "1.3.1-dev.2025-10-29.6de4119f" || '0.0.0'
64
+ // @TODO: add maxAge and api version numbers as buster
64
65
  };
65
66
  const initialDataset = {
66
67
  url: null,
@@ -70,7 +71,8 @@ const initialDataset = {
70
71
  imageUrl: null,
71
72
  defaultSettings: {},
72
73
  canOverrideSettings: true,
73
- useUnsColors: false
74
+ useUnsColors: false,
75
+ isPseudospatial: false
74
76
  };
75
77
  function DatasetProvider(_ref2) {
76
78
  let {
@@ -81,16 +83,23 @@ function DatasetProvider(_ref2) {
81
83
  const dataset = _lodash.default.assign(initialDataset, _objectSpread({
82
84
  url: dataset_url
83
85
  }, dataset_params));
84
- return /*#__PURE__*/_react.default.createElement(DatasetContext.Provider, {
85
- value: dataset
86
- }, /*#__PURE__*/_react.default.createElement(_SettingsContext.SettingsProvider, {
87
- dataset_url: dataset.url,
88
- defaultSettings: dataset.defaultSettings,
89
- canOverrideSettings: dataset.canOverrideSettings
90
- }, /*#__PURE__*/_react.default.createElement(_reactQueryPersistClient.PersistQueryClientProvider, {
91
- client: queryClient,
92
- persistOptions: persistOptions
93
- }, /*#__PURE__*/_react.default.createElement(_FilterContext.FilterProvider, null, /*#__PURE__*/_react.default.createElement(_ZarrDataContext.ZarrDataProvider, null, children)))));
86
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(DatasetContext.Provider, {
87
+ value: dataset,
88
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactQueryPersistClient.PersistQueryClientProvider, {
89
+ client: queryClient,
90
+ persistOptions: persistOptions,
91
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_SettingsContext.SettingsProvider, {
92
+ dataset_url: dataset.url,
93
+ defaultSettings: dataset.defaultSettings,
94
+ canOverrideSettings: dataset.canOverrideSettings,
95
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_FilterContext.FilterProvider, {
96
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_ZarrDataContext.ZarrDataProvider, {
97
+ children: children
98
+ })
99
+ })
100
+ })
101
+ })
102
+ });
94
103
  }
95
104
  function useDataset() {
96
105
  return (0, _react.useContext)(DatasetContext);