@haniffalab/cherita-react 1.0.0 → 1.1.0-dev.2025-04-01.1c91bb8b

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 (106) hide show
  1. package/LICENSE +1 -1
  2. package/dist/{components → cjs/components}/full-page/FullPage.js +32 -22
  3. package/dist/{components → cjs/components}/full-page/FullPagePseudospatial.js +7 -6
  4. package/dist/{components → cjs/components}/obs-list/ObsItem.js +88 -77
  5. package/dist/{components → cjs/components}/obs-list/ObsList.js +133 -50
  6. package/dist/cjs/components/obs-list/ObsToolbar.js +24 -0
  7. package/dist/{components → cjs/components}/obsm-list/ObsmList.js +8 -5
  8. package/dist/{components → cjs/components}/offcanvas/index.js +24 -20
  9. package/dist/{components → cjs/components}/pseudospatial/Pseudospatial.js +10 -9
  10. package/dist/{components → cjs/components}/pseudospatial/PseudospatialToolbar.js +4 -3
  11. package/dist/{components → cjs/components}/scatterplot/Scatterplot.js +33 -24
  12. package/dist/{components → cjs/components}/scatterplot/SpatialControls.js +43 -42
  13. package/dist/cjs/components/scatterplot/Toolbox.js +62 -0
  14. package/dist/{components → cjs/components}/search-bar/SearchBar.js +24 -7
  15. package/dist/{components → cjs/components}/search-bar/SearchResults.js +13 -17
  16. package/dist/{components → cjs/components}/var-list/VarItem.js +38 -29
  17. package/dist/{components → cjs/components}/var-list/VarList.js +59 -31
  18. package/dist/{components → cjs/components}/var-list/VarListToolbar.js +18 -14
  19. package/dist/{components → cjs/components}/var-list/VarSet.js +24 -20
  20. package/dist/{components → cjs/components}/violin/Violin.js +4 -3
  21. package/dist/{constants → cjs/constants}/constants.js +6 -2
  22. package/dist/{context → cjs/context}/DatasetContext.js +12 -11
  23. package/dist/{context → cjs/context}/FilterContext.js +4 -3
  24. package/dist/{context → cjs/context}/ZarrDataContext.js +4 -3
  25. package/dist/{helpers → cjs/helpers}/color-helper.js +12 -11
  26. package/dist/{helpers → cjs/helpers}/map-helper.js +8 -7
  27. package/dist/{helpers → cjs/helpers}/zarr-helper.js +30 -38
  28. package/dist/{utils → cjs/utils}/Filter.js +1 -1
  29. package/dist/{utils → cjs/utils}/Histogram.js +12 -8
  30. package/dist/{utils → cjs/utils}/ImageViewer.js +6 -5
  31. package/dist/{utils → cjs/utils}/Legend.js +8 -7
  32. package/dist/{utils → cjs/utils}/LoadingIndicators.js +5 -4
  33. package/dist/cjs/utils/Skeleton.js +19 -0
  34. package/dist/{utils → cjs/utils}/VirtualizedList.js +10 -9
  35. package/dist/{utils → cjs/utils}/requests.js +37 -39
  36. package/dist/{utils → cjs/utils}/string.js +9 -4
  37. package/dist/{utils → cjs/utils}/zarrData.js +12 -4
  38. package/dist/css/cherita.css +147 -152
  39. package/dist/css/cherita.css.map +1 -1
  40. package/dist/esm/components/dotplot/Dotplot.js +135 -0
  41. package/dist/esm/components/dotplot/DotplotControls.js +148 -0
  42. package/dist/esm/components/full-page/FullPage.js +143 -0
  43. package/dist/esm/components/full-page/FullPagePseudospatial.js +151 -0
  44. package/dist/esm/components/heatmap/Heatmap.js +105 -0
  45. package/dist/esm/components/heatmap/HeatmapControls.js +23 -0
  46. package/dist/esm/components/matrixplot/Matrixplot.js +107 -0
  47. package/dist/esm/components/matrixplot/MatrixplotControls.js +38 -0
  48. package/dist/esm/components/obs-list/ObsItem.js +484 -0
  49. package/dist/esm/components/obs-list/ObsList.js +338 -0
  50. package/dist/esm/components/obs-list/ObsToolbar.js +17 -0
  51. package/dist/esm/components/obsm-list/ObsmList.js +75 -0
  52. package/dist/esm/components/offcanvas/index.js +67 -0
  53. package/dist/esm/components/pseudospatial/Pseudospatial.js +228 -0
  54. package/dist/esm/components/pseudospatial/PseudospatialToolbar.js +123 -0
  55. package/dist/esm/components/scatterplot/Scatterplot.js +394 -0
  56. package/dist/esm/components/scatterplot/ScatterplotControls.js +71 -0
  57. package/dist/esm/components/scatterplot/SpatialControls.js +140 -0
  58. package/dist/esm/components/scatterplot/Toolbox.js +55 -0
  59. package/dist/esm/components/search-bar/SearchBar.js +90 -0
  60. package/dist/esm/components/search-bar/SearchResults.js +139 -0
  61. package/dist/esm/components/var-list/VarItem.js +254 -0
  62. package/dist/esm/components/var-list/VarList.js +291 -0
  63. package/dist/esm/components/var-list/VarListToolbar.js +87 -0
  64. package/dist/esm/components/var-list/VarSet.js +194 -0
  65. package/dist/esm/components/violin/Violin.js +141 -0
  66. package/dist/esm/components/violin/ViolinControls.js +24 -0
  67. package/dist/esm/constants/colorscales.js +22 -0
  68. package/dist/esm/constants/constants.js +88 -0
  69. package/dist/esm/context/DatasetContext.js +571 -0
  70. package/dist/esm/context/FilterContext.js +48 -0
  71. package/dist/esm/context/ZarrDataContext.js +26 -0
  72. package/dist/esm/helpers/color-helper.js +66 -0
  73. package/dist/esm/helpers/map-helper.js +53 -0
  74. package/dist/esm/helpers/zarr-helper.js +111 -0
  75. package/dist/esm/index.js +22 -0
  76. package/dist/esm/utils/Filter.js +147 -0
  77. package/dist/esm/utils/Histogram.js +44 -0
  78. package/dist/esm/utils/ImageViewer.js +27 -0
  79. package/dist/esm/utils/Legend.js +58 -0
  80. package/dist/esm/utils/LoadingIndicators.js +22 -0
  81. package/dist/esm/utils/Skeleton.js +12 -0
  82. package/dist/esm/utils/VirtualizedList.js +55 -0
  83. package/dist/esm/utils/errors.js +47 -0
  84. package/dist/esm/utils/requests.js +102 -0
  85. package/dist/esm/utils/search.js +39 -0
  86. package/dist/esm/utils/string.js +59 -0
  87. package/dist/esm/utils/zarrData.js +102 -0
  88. package/package.json +22 -9
  89. package/scss/cherita.scss +19 -50
  90. package/scss/components/accordions.scss +32 -0
  91. package/scss/components/layouts.scss +2 -1
  92. package/scss/components/lists.scss +14 -0
  93. package/dist/components/obs-list/ObsToolbar.js +0 -64
  94. package/dist/components/scatterplot/Toolbox.js +0 -31
  95. /package/dist/{components → cjs/components}/dotplot/Dotplot.js +0 -0
  96. /package/dist/{components → cjs/components}/dotplot/DotplotControls.js +0 -0
  97. /package/dist/{components → cjs/components}/heatmap/Heatmap.js +0 -0
  98. /package/dist/{components → cjs/components}/heatmap/HeatmapControls.js +0 -0
  99. /package/dist/{components → cjs/components}/matrixplot/Matrixplot.js +0 -0
  100. /package/dist/{components → cjs/components}/matrixplot/MatrixplotControls.js +0 -0
  101. /package/dist/{components → cjs/components}/scatterplot/ScatterplotControls.js +0 -0
  102. /package/dist/{components → cjs/components}/violin/ViolinControls.js +0 -0
  103. /package/dist/{constants → cjs/constants}/colorscales.js +0 -0
  104. /package/dist/{index.js → cjs/index.js} +0 -0
  105. /package/dist/{utils → cjs/utils}/errors.js +0 -0
  106. /package/dist/{utils → cjs/utils}/search.js +0 -0
@@ -20,9 +20,10 @@ var _VirtualizedList = require("../../utils/VirtualizedList");
20
20
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
21
21
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
22
22
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
23
- function VarHistogram({
24
- item
25
- }) {
23
+ function VarHistogram(_ref) {
24
+ let {
25
+ item
26
+ } = _ref;
26
27
  const ENDPOINT = "var/histograms";
27
28
  const dataset = (0, _DatasetContext.useDataset)();
28
29
  const {
@@ -80,9 +81,10 @@ function VarDiseaseInfoItem(item) {
80
81
  }
81
82
  })))));
82
83
  }
83
- function VarDiseaseInfo({
84
- data
85
- }) {
84
+ function VarDiseaseInfo(_ref2) {
85
+ let {
86
+ data
87
+ } = _ref2;
86
88
  return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_reactBootstrap.ListGroup, null, /*#__PURE__*/_react.default.createElement(_VirtualizedList.VirtualizedList, {
87
89
  getDataAtIndex: index => data[index],
88
90
  count: data.length,
@@ -91,15 +93,16 @@ function VarDiseaseInfo({
91
93
  ItemComponent: VarDiseaseInfoItem
92
94
  })));
93
95
  }
94
- function SingleSelectionItem({
95
- item,
96
- isActive,
97
- selectVar,
98
- removeVar,
99
- isDiseaseGene = false,
100
- showSetColorEncoding = true,
101
- showRemove = true
102
- }) {
96
+ function SingleSelectionItem(_ref3) {
97
+ let {
98
+ item,
99
+ isActive,
100
+ selectVar,
101
+ removeVar,
102
+ isDiseaseGene = false,
103
+ showSetColorEncoding = true,
104
+ showRemove = true
105
+ } = _ref3;
103
106
  const ENDPOINT = "disease/gene";
104
107
  const [openInfo, setOpenInfo] = (0, _react.useState)(false);
105
108
  const dataset = (0, _DatasetContext.useDataset)();
@@ -116,7 +119,7 @@ function SingleSelectionItem({
116
119
  refetchOnMount: false,
117
120
  enabled: !!dataset.diseaseDatasets.length
118
121
  });
119
- const hasDiseaseInfo = !isPending && !serverError && !!fetchedData.length;
122
+ const hasDiseaseInfo = !isPending && !serverError && !!fetchedData?.length;
120
123
  return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", {
121
124
  className: `d-flex justify-content-between ${hasDiseaseInfo ? "cursor-pointer" : ""}`,
122
125
  onClick: () => {
@@ -160,11 +163,12 @@ function SingleSelectionItem({
160
163
  data: fetchedData
161
164
  }))));
162
165
  }
163
- function MultipleSelectionItem({
164
- item,
165
- isActive,
166
- toggleVar
167
- }) {
166
+ function MultipleSelectionItem(_ref4) {
167
+ let {
168
+ item,
169
+ isActive,
170
+ toggleVar
171
+ } = _ref4;
168
172
  const isNotInData = item.matrix_index === -1;
169
173
  return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", {
170
174
  className: "d-flex"
@@ -180,13 +184,14 @@ function MultipleSelectionItem({
180
184
  title: isNotInData ? "Not present in data" : item.name
181
185
  }, item.name))));
182
186
  }
183
- function VarItem({
184
- item,
185
- active,
186
- setVarButtons,
187
- mode = _constants.SELECTION_MODES.SINGLE,
188
- isDiseaseGene = false
189
- }) {
187
+ function VarItem(_ref5) {
188
+ let {
189
+ item,
190
+ active,
191
+ setVarButtons,
192
+ mode = _constants.SELECTION_MODES.SINGLE,
193
+ isDiseaseGene = false
194
+ } = _ref5;
190
195
  const dataset = (0, _DatasetContext.useDataset)();
191
196
  const dispatch = (0, _DatasetContext.useDatasetDispatch)();
192
197
  const selectVar = () => {
@@ -197,13 +202,17 @@ function VarItem({
197
202
  });
198
203
  dispatch({
199
204
  type: "set.colorEncoding",
200
- value: "var"
205
+ value: _constants.COLOR_ENCODINGS.VAR
201
206
  });
202
207
  } else if (mode === _constants.SELECTION_MODES.MULTIPLE) {
203
208
  dispatch({
204
209
  type: "select.multivar",
205
210
  var: item
206
211
  });
212
+ dispatch({
213
+ type: "set.colorEncoding",
214
+ value: _constants.COLOR_ENCODINGS.VAR
215
+ });
207
216
  }
208
217
  };
209
218
  const removeVar = () => {
@@ -5,20 +5,23 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.VarNamesList = VarNamesList;
7
7
  var _react = _interopRequireWildcard(require("react"));
8
- var _iconsMaterial = require("@mui/icons-material");
8
+ var _freeSolidSvgIcons = require("@fortawesome/free-solid-svg-icons");
9
+ var _reactFontawesome = require("@fortawesome/react-fontawesome");
9
10
  var _lodash = _interopRequireDefault(require("lodash"));
10
11
  var _reactBootstrap = require("react-bootstrap");
11
- var _VarItem = require("./VarItem");
12
- var _VarListToolbar = require("./VarListToolbar");
13
- var _VarSet = require("./VarSet");
12
+ var _ButtonGroup = _interopRequireDefault(require("react-bootstrap/ButtonGroup"));
14
13
  var _constants = require("../../constants/constants");
15
14
  var _DatasetContext = require("../../context/DatasetContext");
16
15
  var _LoadingIndicators = require("../../utils/LoadingIndicators");
17
16
  var _requests = require("../../utils/requests");
17
+ var _VarItem = require("./VarItem");
18
+ var _VarListToolbar = require("./VarListToolbar");
19
+ var _VarSet = require("./VarSet");
18
20
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
19
21
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
20
22
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
21
- const useVarMean = (varKeys, enabled = false) => {
23
+ const useVarMean = function (varKeys) {
24
+ let enabled = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
22
25
  const ENDPOINT = "matrix/mean";
23
26
  const dataset = (0, _DatasetContext.useDataset)();
24
27
  const [params, setParams] = (0, _react.useState)({
@@ -47,11 +50,17 @@ const useVarMean = (varKeys, enabled = false) => {
47
50
  });
48
51
  };
49
52
 
53
+ // ensure nulls are lowest values
54
+ const sortMeans = (i, means) => {
55
+ return means[i.name] || _lodash.default.min(_lodash.default.values(means)) - 1;
56
+ };
57
+
50
58
  // @TODO: display where disease data comes from
51
59
  // add to disease dataset metadata
52
- function DiseaseVarList({
53
- makeListItem
54
- }) {
60
+ function DiseaseVarList(_ref) {
61
+ let {
62
+ makeListItem
63
+ } = _ref;
55
64
  const ENDPOINT = "disease/genes";
56
65
  const dataset = (0, _DatasetContext.useDataset)();
57
66
  const dispatch = (0, _DatasetContext.useDatasetDispatch)();
@@ -80,12 +89,12 @@ function DiseaseVarList({
80
89
  setDiseaseVars(diseaseData.fetchedData);
81
90
  }
82
91
  }, [diseaseData.fetchedData, diseaseData.isPending, diseaseData.serverError]);
83
- const varMeans = useVarMean(diseaseVars, diseaseVars && dataset.varSort.disease.sort === _constants.VAR_SORT.MATRIX);
92
+ const varMeans = useVarMean(diseaseVars, !!diseaseVars?.length && dataset.varSort.disease.sort === _constants.VAR_SORT.MATRIX);
84
93
  (0, _react.useEffect)(() => {
85
94
  if (dataset.varSort.disease.sort === _constants.VAR_SORT.MATRIX) {
86
95
  if (!varMeans.isPending && !varMeans.serverError) {
87
96
  setSortedDiseaseVars(_lodash.default.orderBy(diseaseVars, o => {
88
- return varMeans.fetchedData[o.name];
97
+ return sortMeans(o, varMeans.fetchedData);
89
98
  }, dataset.varSort.disease.sortOrder));
90
99
  }
91
100
  } else if (dataset.varSort.disease.sort === _constants.VAR_SORT.NAME) {
@@ -103,25 +112,35 @@ function DiseaseVarList({
103
112
  }, /*#__PURE__*/_react.default.createElement("h5", null, "Disease genes")), /*#__PURE__*/_react.default.createElement(_reactBootstrap.Alert, {
104
113
  variant: "light"
105
114
  }, "No disease genes found.")) : /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", {
106
- className: "d-flex justify-content-between mt-3"
107
- }, /*#__PURE__*/_react.default.createElement("h5", null, "Disease genes"), /*#__PURE__*/_react.default.createElement(_reactBootstrap.Button, {
108
- variant: "link",
115
+ className: "d-flex justify-content-between my-2"
116
+ }, /*#__PURE__*/_react.default.createElement("h5", null, "Disease genes"), /*#__PURE__*/_react.default.createElement(_ButtonGroup.default, {
117
+ "aria-label": "Feature options",
118
+ size: "sm"
119
+ }, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Button, {
120
+ variant: "info",
109
121
  onClick: () => {
110
122
  dispatch({
111
123
  type: "reset.disease"
112
124
  });
113
125
  }
114
- }, "clear")), /*#__PURE__*/_react.default.createElement("p", null, dataset.selectedDisease?.name), /*#__PURE__*/_react.default.createElement(_VarListToolbar.VarListToolbar, {
126
+ }, /*#__PURE__*/_react.default.createElement(_reactFontawesome.FontAwesomeIcon, {
127
+ icon: _freeSolidSvgIcons.faTimes,
128
+ className: "me-1"
129
+ }), "Clear"))), /*#__PURE__*/_react.default.createElement("p", null, dataset.selectedDisease?.name), /*#__PURE__*/_react.default.createElement(_VarListToolbar.VarListToolbar, {
115
130
  varType: "disease"
116
131
  }), /*#__PURE__*/_react.default.createElement("div", {
117
132
  className: "position-relative"
118
- }, isPending && /*#__PURE__*/_react.default.createElement(_LoadingIndicators.LoadingSpinner, null), /*#__PURE__*/_react.default.createElement(_reactBootstrap.ListGroup, null, diseaseVarList)))));
133
+ }, isPending && /*#__PURE__*/_react.default.createElement(_LoadingIndicators.LoadingSpinner, null), /*#__PURE__*/_react.default.createElement(_reactBootstrap.ListGroup, {
134
+ variant: "flush",
135
+ className: "cherita-list"
136
+ }, diseaseVarList)))));
119
137
  }
120
- function VarNamesList({
121
- mode = _constants.SELECTION_MODES.SINGLE,
122
- displayName = "genes",
123
- showDiseaseVarList = true
124
- }) {
138
+ function VarNamesList(_ref2) {
139
+ let {
140
+ mode = _constants.SELECTION_MODES.SINGLE,
141
+ displayName = "genes",
142
+ showDiseaseVarList = true
143
+ } = _ref2;
125
144
  const dataset = (0, _DatasetContext.useDataset)();
126
145
  const dispatch = (0, _DatasetContext.useDatasetDispatch)();
127
146
  const [varButtons, setVarButtons] = (0, _react.useState)(mode === _constants.SELECTION_MODES.SINGLE ? dataset.selectedVar ? _lodash.default.unionWith([dataset.selectedVar], dataset.varSets, _lodash.default.isEqual) : [...dataset.varSets] : [...dataset.selectedMultiVar, ...dataset.varSets]);
@@ -181,9 +200,9 @@ function VarNamesList({
181
200
  // @TODO: deferr sortedVarButtons ?
182
201
  (0, _react.useEffect)(() => {
183
202
  if (dataset.varSort.var.sort === _constants.VAR_SORT.MATRIX) {
184
- if (!varMeans.isPending && !varMeans.serverError) {
203
+ if (!varMeans.isPending && !varMeans.serverError && varMeans.fetchedData) {
185
204
  setSortedVarButtons(_lodash.default.orderBy(varButtons, o => {
186
- return varMeans.fetchedData[o.name];
205
+ return sortMeans(o, varMeans.fetchedData);
187
206
  }, dataset.varSort.var.sortOrder));
188
207
  }
189
208
  } else if (dataset.varSort.var.sort === _constants.VAR_SORT.NAME) {
@@ -192,7 +211,8 @@ function VarNamesList({
192
211
  setSortedVarButtons(varButtons);
193
212
  }
194
213
  }, [dataset.varSort.var.sort, dataset.varSort.var.sortOrder, varButtons, varMeans.isPending, varMeans.serverError, varMeans.fetchedData]);
195
- const makeListItem = (item, isDiseaseGene = false) => {
214
+ const makeListItem = function (item) {
215
+ let isDiseaseGene = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
196
216
  return /*#__PURE__*/_react.default.createElement(_reactBootstrap.ListGroup.Item, {
197
217
  key: item.matrix_index
198
218
  }, /*#__PURE__*/_react.default.createElement(_VarItem.VarItem, {
@@ -237,10 +257,12 @@ function VarNamesList({
237
257
  }, /*#__PURE__*/_react.default.createElement("div", {
238
258
  className: "overflow-auto mt-3"
239
259
  }, /*#__PURE__*/_react.default.createElement("div", {
240
- className: "d-flex justify-content-between"
241
- }, /*#__PURE__*/_react.default.createElement("h5", null, _lodash.default.capitalize(displayName)), /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Button, {
242
- variant: "light",
243
- className: "p-1",
260
+ className: "d-flex justify-content-between mb-2"
261
+ }, /*#__PURE__*/_react.default.createElement("h5", null, _lodash.default.capitalize(displayName)), /*#__PURE__*/_react.default.createElement(_ButtonGroup.default, {
262
+ "aria-label": "Feature options",
263
+ size: "sm"
264
+ }, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Button, {
265
+ variant: "info",
244
266
  onClick: () => {
245
267
  dispatch({
246
268
  type: "add.varSet",
@@ -251,8 +273,8 @@ function VarNamesList({
251
273
  }
252
274
  });
253
275
  }
254
- }, /*#__PURE__*/_react.default.createElement(_iconsMaterial.Add, null), "New set"), /*#__PURE__*/_react.default.createElement(_reactBootstrap.Button, {
255
- variant: "link",
276
+ }, "New set"), /*#__PURE__*/_react.default.createElement(_reactBootstrap.Button, {
277
+ variant: "info",
256
278
  onClick: () => {
257
279
  setVarButtons([]);
258
280
  dispatch({
@@ -262,11 +284,17 @@ function VarNamesList({
262
284
  type: "reset.varSets"
263
285
  });
264
286
  }
265
- }, "clear"))), /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, !varList.length ? /*#__PURE__*/_react.default.createElement(_reactBootstrap.Alert, {
287
+ }, /*#__PURE__*/_react.default.createElement(_reactFontawesome.FontAwesomeIcon, {
288
+ icon: _freeSolidSvgIcons.faTimes,
289
+ className: "me-1"
290
+ }), "Clear"))), /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, !varList.length ? /*#__PURE__*/_react.default.createElement(_reactBootstrap.Alert, {
266
291
  variant: "light"
267
292
  }, "Search for a feature.") : /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_VarListToolbar.VarListToolbar, null), /*#__PURE__*/_react.default.createElement("div", {
268
293
  className: "position-relative"
269
- }, isPending && /*#__PURE__*/_react.default.createElement(_LoadingIndicators.LoadingSpinner, null), /*#__PURE__*/_react.default.createElement(_reactBootstrap.ListGroup, null, varList)))), /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, showDiseaseVarList && /*#__PURE__*/_react.default.createElement(DiseaseVarList, {
294
+ }, isPending && /*#__PURE__*/_react.default.createElement(_LoadingIndicators.LoadingSpinner, null), /*#__PURE__*/_react.default.createElement(_reactBootstrap.ListGroup, {
295
+ variant: "flush",
296
+ className: "cherita-list"
297
+ }, varList)))), /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, showDiseaseVarList && /*#__PURE__*/_react.default.createElement(DiseaseVarList, {
270
298
  makeListItem: makeListItem
271
299
  }))));
272
300
  }
@@ -7,16 +7,16 @@ exports.VarListToolbar = VarListToolbar;
7
7
  var _react = _interopRequireWildcard(require("react"));
8
8
  var _freeSolidSvgIcons = require("@fortawesome/free-solid-svg-icons");
9
9
  var _reactFontawesome = require("@fortawesome/react-fontawesome");
10
- var _material = require("@mui/material");
11
10
  var _reactBootstrap = require("react-bootstrap");
12
11
  var _constants = require("../../constants/constants");
13
12
  var _DatasetContext = require("../../context/DatasetContext");
14
13
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
15
14
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
16
15
  // @TODO: set option for "var" and "disease"
17
- function VarListToolbar({
18
- varType = "var"
19
- }) {
16
+ function VarListToolbar(_ref) {
17
+ let {
18
+ varType = "var"
19
+ } = _ref;
20
20
  const dataset = (0, _DatasetContext.useDataset)();
21
21
  const dispatch = (0, _DatasetContext.useDatasetDispatch)();
22
22
  const [sort, setSort] = (0, _react.useState)(dataset.varSort.var.sort);
@@ -42,13 +42,15 @@ function VarListToolbar({
42
42
  });
43
43
  }
44
44
  };
45
- return /*#__PURE__*/_react.default.createElement(_reactBootstrap.Navbar, {
46
- className: "var-list-toolbar"
47
- }, /*#__PURE__*/_react.default.createElement(_reactBootstrap.InputGroup, null, /*#__PURE__*/_react.default.createElement(_reactBootstrap.InputGroup.Text, null, "Sort by:"), /*#__PURE__*/_react.default.createElement(_material.ToggleButtonGroup, {
48
- "aria-label": "Sort feature by",
49
- size: "small",
50
- className: "mh-100"
51
- }, /*#__PURE__*/_react.default.createElement(_material.ToggleButton, {
45
+ return /*#__PURE__*/_react.default.createElement("div", {
46
+ className: "d-flex justify-content-end align-items-center mb-2"
47
+ }, /*#__PURE__*/_react.default.createElement(_reactBootstrap.ToggleButtonGroup, {
48
+ name: "sortfeatures",
49
+ "aria-label": "Sort features by",
50
+ size: "sm",
51
+ type: "radio"
52
+ }, /*#__PURE__*/_react.default.createElement(_reactBootstrap.ToggleButton, {
53
+ id: _constants.VAR_SORT.NAME,
52
54
  value: _constants.VAR_SORT.NAME,
53
55
  "aria-label": "alphabetical",
54
56
  title: "Sort alphabetically",
@@ -60,7 +62,8 @@ function VarListToolbar({
60
62
  icon: _freeSolidSvgIcons.faArrowDownAZ
61
63
  }) : /*#__PURE__*/_react.default.createElement(_reactFontawesome.FontAwesomeIcon, {
62
64
  icon: _freeSolidSvgIcons.faArrowUpZA
63
- })), /*#__PURE__*/_react.default.createElement(_material.ToggleButton, {
65
+ })), /*#__PURE__*/_react.default.createElement(_reactBootstrap.ToggleButton, {
66
+ id: _constants.VAR_SORT.MATRIX,
64
67
  value: _constants.VAR_SORT.MATRIX,
65
68
  "aria-label": "matrix value",
66
69
  title: "Sort by matrix value",
@@ -72,7 +75,8 @@ function VarListToolbar({
72
75
  icon: _freeSolidSvgIcons.faArrowDown19
73
76
  }) : /*#__PURE__*/_react.default.createElement(_reactFontawesome.FontAwesomeIcon, {
74
77
  icon: _freeSolidSvgIcons.faArrowUp91
75
- })), /*#__PURE__*/_react.default.createElement(_material.ToggleButton, {
78
+ })), /*#__PURE__*/_react.default.createElement(_reactBootstrap.ToggleButton, {
79
+ id: "none",
76
80
  value: "none",
77
81
  "aria-label": "none",
78
82
  title: "No sorting",
@@ -86,5 +90,5 @@ function VarListToolbar({
86
90
  }
87
91
  }, /*#__PURE__*/_react.default.createElement(_reactFontawesome.FontAwesomeIcon, {
88
92
  icon: _freeSolidSvgIcons.faXmark
89
- })))));
93
+ }))));
90
94
  }
@@ -10,10 +10,10 @@ var _reactFontawesome = require("@fortawesome/react-fontawesome");
10
10
  var _iconsMaterial = require("@mui/icons-material");
11
11
  var _lodash = _interopRequireDefault(require("lodash"));
12
12
  var _reactBootstrap = require("react-bootstrap");
13
- var _VarItem = require("./VarItem");
14
13
  var _constants = require("../../constants/constants");
15
14
  var _DatasetContext = require("../../context/DatasetContext");
16
15
  var _SearchBar = require("../search-bar/SearchBar");
16
+ var _VarItem = require("./VarItem");
17
17
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
18
18
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
19
19
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
@@ -26,14 +26,15 @@ const addVarToSet = (dispatch, set, v) => {
26
26
  var: v
27
27
  });
28
28
  };
29
- function SingleSelectionSet({
30
- set,
31
- isActive,
32
- selectSet,
33
- removeSet,
34
- removeSetVar,
35
- showSearchBar = true
36
- }) {
29
+ function SingleSelectionSet(_ref) {
30
+ let {
31
+ set,
32
+ isActive,
33
+ selectSet,
34
+ removeSet,
35
+ removeSetVar,
36
+ showSearchBar = true
37
+ } = _ref;
37
38
  const [openSet, setOpenSet] = (0, _react.useState)(false);
38
39
  const varList = set.vars.length ? _lodash.default.map(set.vars, v => {
39
40
  return /*#__PURE__*/_react.default.createElement(_reactBootstrap.ListGroup.Item, {
@@ -96,14 +97,16 @@ function SingleSelectionSet({
96
97
  }), /*#__PURE__*/_react.default.createElement("div", {
97
98
  className: "mx-2"
98
99
  }, /*#__PURE__*/_react.default.createElement(_reactBootstrap.ListGroup, {
99
- variant: "flush"
100
+ variant: "flush",
101
+ className: "cherita-list"
100
102
  }, varList)))));
101
103
  }
102
- function MultipleSelectionSet({
103
- set,
104
- isActive,
105
- toggleSet
106
- }) {
104
+ function MultipleSelectionSet(_ref2) {
105
+ let {
106
+ set,
107
+ isActive,
108
+ toggleSet
109
+ } = _ref2;
107
110
  return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", {
108
111
  className: "d-flex"
109
112
  }, /*#__PURE__*/_react.default.createElement("div", {
@@ -117,11 +120,12 @@ function MultipleSelectionSet({
117
120
  title: set.name
118
121
  }, set.name))));
119
122
  }
120
- function VarSet({
121
- set,
122
- active,
123
- mode = _constants.SELECTION_MODES.SINGLE
124
- }) {
123
+ function VarSet(_ref3) {
124
+ let {
125
+ set,
126
+ active,
127
+ mode = _constants.SELECTION_MODES.SINGLE
128
+ } = _ref3;
125
129
  const dataset = (0, _DatasetContext.useDataset)();
126
130
  const dispatch = (0, _DatasetContext.useDatasetDispatch)();
127
131
  const selectSet = () => {
@@ -18,9 +18,10 @@ var _requests = require("../../utils/requests");
18
18
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
19
19
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
20
20
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
21
- function Violin({
22
- mode = _constants.VIOLIN_MODES.MULTIKEY
23
- }) {
21
+ function Violin(_ref) {
22
+ let {
23
+ mode = _constants.VIOLIN_MODES.MULTIKEY
24
+ } = _ref;
24
25
  const ENDPOINT = "violin";
25
26
  const dataset = (0, _DatasetContext.useDataset)();
26
27
  const {
@@ -3,7 +3,7 @@
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.OBS_TYPES = exports.MATRIXPLOT_SCALES = exports.LOCAL_STORAGE_KEY = exports.DOTPLOT_SCALES = exports.COLOR_ENCODINGS = void 0;
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.OBS_TYPES = exports.MATRIXPLOT_SCALES = exports.LOCAL_STORAGE_KEY = exports.DOTPLOT_SCALES = exports.DEFAULT_OBS_GROUP = exports.COLOR_ENCODINGS = void 0;
7
7
  const LOCAL_STORAGE_KEY = exports.LOCAL_STORAGE_KEY = "CHERITA";
8
8
  const COLOR_ENCODINGS = exports.COLOR_ENCODINGS = {
9
9
  VAR: "var",
@@ -87,4 +87,8 @@ const PSEUDOSPATIAL_CATEGORICAL_MODES = exports.PSEUDOSPATIAL_CATEGORICAL_MODES
87
87
  value: "within",
88
88
  name: "% within section"
89
89
  }
90
- };
90
+ };
91
+
92
+ // `default` cols to be shown out of accordion, at top of obslist
93
+ // default values from cellxgene schema
94
+ 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"];
@@ -44,10 +44,11 @@ const persistOptions = {
44
44
  storage: window.localStorage
45
45
  }),
46
46
  dehydrateOptions: {
47
- shouldDehydrateQuery: ({
48
- queryKey,
49
- state
50
- }) => {
47
+ shouldDehydrateQuery: _ref => {
48
+ let {
49
+ queryKey,
50
+ state
51
+ } = _ref;
51
52
  if (state.status === "success") {
52
53
  return persistKeys.includes(queryKey?.[0]);
53
54
  }
@@ -100,8 +101,7 @@ const initialDataset = {
100
101
  sortOrder: _constants.VAR_SORT_ORDER.ASC
101
102
  }
102
103
  },
103
- obsCols: null,
104
- // @TODO: implement specifying groups/categories for dropdowns
104
+ obsGroups: null,
105
105
  imageUrl: null,
106
106
  pseudospatial: {
107
107
  maskSet: null,
@@ -116,11 +116,12 @@ const initializer = initialState => {
116
116
  const localValues = _lodash.default.pick(localObj, keys);
117
117
  return _lodash.default.assign(initialState, localValues);
118
118
  };
119
- function DatasetProvider({
120
- dataset_url,
121
- children,
122
- ...dataset_params
123
- }) {
119
+ function DatasetProvider(_ref2) {
120
+ let {
121
+ dataset_url,
122
+ children,
123
+ ...dataset_params
124
+ } = _ref2;
124
125
  const [dataset, dispatch] = (0, _react.useReducer)(datasetReducer, _lodash.default.assign(initializer({
125
126
  url: dataset_url,
126
127
  ...initialDataset
@@ -19,9 +19,10 @@ const initialFilterData = {
19
19
  slicedLength: null,
20
20
  isSliced: false
21
21
  };
22
- function FilterProvider({
23
- children
24
- }) {
22
+ function FilterProvider(_ref) {
23
+ let {
24
+ children
25
+ } = _ref;
25
26
  const [filteredData, dispatch] = (0, _react.useReducer)(filterReducer, {
26
27
  ...initialFilterData
27
28
  });
@@ -11,9 +11,10 @@ var _zarrData = require("../utils/zarrData");
11
11
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
12
12
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
13
13
  const ZarrDataContext = /*#__PURE__*/(0, _react.createContext)(null);
14
- function ZarrDataProvider({
15
- children
16
- }) {
14
+ function ZarrDataProvider(_ref) {
15
+ let {
16
+ children
17
+ } = _ref;
17
18
  const obsmData = (0, _zarrData.useObsmData)();
18
19
  const obsData = (0, _zarrData.useObsData)();
19
20
  const xData = (0, _zarrData.useXData)();
@@ -42,17 +42,18 @@ const rgbToHex = color => {
42
42
  exports.rgbToHex = rgbToHex;
43
43
  const useColor = () => {
44
44
  const dataset = (0, _DatasetContext.useDataset)();
45
- const getColor = (0, _react.useCallback)(({
46
- value,
47
- categorical = false,
48
- grayOut = false,
49
- grayParams: {
50
- alpha = 0.75,
51
- gray = 0.95
52
- } = {},
53
- colorEncoding = dataset.colorEncoding,
54
- colorscale = null
55
- }) => {
45
+ const getColor = (0, _react.useCallback)(_ref => {
46
+ let {
47
+ value,
48
+ categorical = false,
49
+ grayOut = false,
50
+ grayParams: {
51
+ alpha = 0.75,
52
+ gray = 0.95
53
+ } = {},
54
+ colorEncoding = dataset.colorEncoding,
55
+ colorscale = null
56
+ } = _ref;
56
57
  const colormap = colorscale || _colorscales.COLORSCALES[categorical ? "Accent" : dataset.controls.colorScale];
57
58
  if (colorEncoding) {
58
59
  if (grayOut) {
@@ -8,13 +8,14 @@ var _core = require("@deck.gl/core");
8
8
  var _lodash = _interopRequireDefault(require("lodash"));
9
9
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
10
10
  class MapHelper {
11
- fitBounds(coords, {
12
- width = 400,
13
- height = 600
14
- } = {
15
- width: 400,
16
- height: 600
17
- }) {
11
+ fitBounds(coords) {
12
+ let {
13
+ width = 400,
14
+ height = 600
15
+ } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {
16
+ width: 400,
17
+ height: 600
18
+ };
18
19
  let view = new _core.WebMercatorViewport({
19
20
  width: width,
20
21
  height: height,