@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,20 +4,20 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.FullPage = FullPage;
7
- var _react = _interopRequireWildcard(require("react"));
7
+ var _react = require("react");
8
8
  var _material = require("@mui/material");
9
9
  var _reactBootstrap = require("react-bootstrap");
10
10
  var _constants = require("../../constants/constants");
11
11
  var _DatasetContext = require("../../context/DatasetContext");
12
12
  var _Dotplot = require("../dotplot/Dotplot");
13
13
  var _DotplotControls = require("../dotplot/DotplotControls");
14
- var _PlotTypeSelector = require("../full-page/PlotTypeSelector");
15
14
  var _Heatmap = require("../heatmap/Heatmap");
16
15
  var _HeatmapControls = require("../heatmap/HeatmapControls");
17
16
  var _Matrixplot = require("../matrixplot/Matrixplot");
18
17
  var _MatrixplotControls = require("../matrixplot/MatrixplotControls");
19
18
  var _ObsList = require("../obs-list/ObsList");
20
19
  var _offcanvas = require("../offcanvas");
20
+ var _PlotTypeSelector = require("./PlotTypeSelector");
21
21
  var _Pseudospatial = require("../pseudospatial/Pseudospatial");
22
22
  var _PseudospatialToolbar = require("../pseudospatial/PseudospatialToolbar");
23
23
  var _Scatterplot = require("../scatterplot/Scatterplot");
@@ -26,23 +26,21 @@ var _SearchBar = require("../search-bar/SearchBar");
26
26
  var _VarList = require("../var-list/VarList");
27
27
  var _Violin = require("../violin/Violin");
28
28
  var _ViolinControls = require("../violin/ViolinControls");
29
- const _excluded = ["isPseudospatial", "searchDiseases", "defaultPlotType"];
30
- 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); }
31
- function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
29
+ var _jsxRuntime = require("react/jsx-runtime");
30
+ const _excluded = ["searchDiseases", "defaultPlotType"];
31
+ 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; }
32
+ 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; }
33
+ 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; }
34
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
35
+ 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); }
32
36
  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; }
33
37
  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; }
34
38
  function FullPage(_ref) {
35
39
  let {
36
- isPseudospatial = false,
37
40
  searchDiseases = true,
38
41
  defaultPlotType = _constants.PLOT_TYPES.SCATTERPLOT
39
42
  } = _ref,
40
43
  props = _objectWithoutProperties(_ref, _excluded);
41
- const appRef = (0, _react.useRef)();
42
- const [appDimensions, setAppDimensions] = (0, _react.useState)({
43
- width: 0,
44
- height: 0
45
- });
46
44
  const [showObs, setShowObs] = (0, _react.useState)(false);
47
45
  const [showObsm, setShowObsm] = (0, _react.useState)(false);
48
46
  const [showVars, setShowVars] = (0, _react.useState)(false);
@@ -51,6 +49,9 @@ function FullPage(_ref) {
51
49
  const [plotType, setPlotType] = (0, _react.useState)(defaultPlotType || _constants.PLOT_TYPES.SCATTERPLOT);
52
50
  const [showPseudospatialControls, setShowPseudospatialControls] = (0, _react.useState)(false);
53
51
  const [pseudospatialPlotType, setpseudospatialPlotType] = (0, _react.useState)(null);
52
+ const {
53
+ isPseudospatial = false
54
+ } = props;
54
55
  (0, _react.useEffect)(() => {
55
56
  setPlotType(defaultPlotType || _constants.PLOT_TYPES.SCATTERPLOT);
56
57
  }, [defaultPlotType]);
@@ -58,27 +59,6 @@ function FullPage(_ref) {
58
59
  const XlBreakpoint = (0, _material.useMediaQuery)(_constants.BREAKPOINTS.XL);
59
60
  const showObsBtn = LgBreakpoint;
60
61
  const showVarsBtn = XlBreakpoint;
61
- (0, _react.useEffect)(() => {
62
- const updateDimensions = () => {
63
- if (appRef.current) {
64
- // Get the distance from the top of the page to the target element
65
- const rect = appRef.current.getBoundingClientRect();
66
- const distanceFromTop = rect.top + window.scrollY;
67
-
68
- // Calculate the available height for the Cherita app
69
- const availableHeight = window.innerHeight - distanceFromTop;
70
-
71
- // Update the dimensions to fit the viewport minus the navbar height
72
- setAppDimensions({
73
- width: appRef.current.offsetWidth,
74
- height: availableHeight
75
- });
76
- }
77
- };
78
- window.addEventListener("resize", updateDimensions);
79
- updateDimensions();
80
- return () => window.removeEventListener("resize", updateDimensions);
81
- }, []);
82
62
  const {
83
63
  plotControls,
84
64
  varMode,
@@ -115,94 +95,108 @@ function FullPage(_ref) {
115
95
  showObsBtn,
116
96
  showVarsBtn,
117
97
  showCtrlsBtn: true,
98
+ plotType,
118
99
  setShowObs,
119
100
  setShowVars,
120
- setShowControls
101
+ setShowControls,
102
+ setPlotType
121
103
  };
122
104
  switch (plotType) {
123
105
  case _constants.PLOT_TYPES.DOTPLOT:
124
- return /*#__PURE__*/_react.default.createElement(_Dotplot.Dotplot, commonProps);
106
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Dotplot.Dotplot, _objectSpread({}, commonProps));
125
107
  case _constants.PLOT_TYPES.MATRIXPLOT:
126
- return /*#__PURE__*/_react.default.createElement(_Matrixplot.Matrixplot, commonProps);
108
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Matrixplot.Matrixplot, _objectSpread({}, commonProps));
127
109
  case _constants.PLOT_TYPES.HEATMAP:
128
- return /*#__PURE__*/_react.default.createElement(_Heatmap.Heatmap, commonProps);
110
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Heatmap.Heatmap, _objectSpread({}, commonProps));
129
111
  case _constants.PLOT_TYPES.VIOLINPLOT:
130
- return /*#__PURE__*/_react.default.createElement(_Violin.Violin, _extends({
112
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Violin.Violin, _objectSpread({
131
113
  mode: _constants.VIOLIN_MODES.MULTIKEY
132
114
  }, commonProps));
133
115
  case _constants.PLOT_TYPES.SCATTERPLOT:
134
116
  default:
135
- return /*#__PURE__*/_react.default.createElement(_Scatterplot.Scatterplot, _extends({}, commonProps, {
117
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Scatterplot.Scatterplot, _objectSpread(_objectSpread({}, commonProps), {}, {
136
118
  isFullscreen: true
137
119
  }));
138
120
  }
139
121
  }, [plotType, showObsBtn, showVarsBtn]);
140
- return /*#__PURE__*/_react.default.createElement("div", {
141
- ref: appRef,
122
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
142
123
  className: "cherita-app",
143
- style: {
144
- height: appDimensions.height
145
- }
146
- }, /*#__PURE__*/_react.default.createElement(_DatasetContext.DatasetProvider, props, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Container, {
147
- fluid: true,
148
- className: "cherita-app-container",
149
- style: {
150
- height: appDimensions.height
151
- }
152
- }, /*#__PURE__*/_react.default.createElement("div", {
153
- className: "cherita-app-obs modern-scrollbars border-end h-100"
154
- }, /*#__PURE__*/_react.default.createElement(_ObsList.ObsColsList, _extends({}, props, {
155
- showSelectedAsActive: showSelectedAsActive,
156
- showHistograms: varMode === _constants.SELECTION_MODES.SINGLE
157
- }))), /*#__PURE__*/_react.default.createElement("div", {
158
- className: "cherita-app-canvas"
159
- }, plot), /*#__PURE__*/_react.default.createElement("div", {
160
- className: "cherita-app-sidebar p-3"
161
- }, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Card, null, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Card.Body, {
162
- className: "d-flex flex-column p-0"
163
- }, /*#__PURE__*/_react.default.createElement("div", {
164
- className: "sidebar-plotselector"
165
- }, /*#__PURE__*/_react.default.createElement(_PlotTypeSelector.PlotTypeSelector, {
166
- currentType: plotType,
167
- onChange: type => setPlotType(type)
168
- })), plotType === _constants.PLOT_TYPES.SCATTERPLOT && isPseudospatial ? /*#__PURE__*/_react.default.createElement("div", {
169
- className: "sidebar-pseudospatial"
170
- }, /*#__PURE__*/_react.default.createElement(_Pseudospatial.Pseudospatial, {
171
- plotType: pseudospatialPlotType,
172
- setPlotType: setpseudospatialPlotType,
173
- setShowControls: setShowPseudospatialControls
174
- })) : /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null), /*#__PURE__*/_react.default.createElement("div", {
175
- className: "sidebar-features modern-scrollbars"
176
- }, /*#__PURE__*/_react.default.createElement(_SearchBar.SearchBar, {
177
- searchDiseases: searchDiseases,
178
- searchVar: true
179
- }), /*#__PURE__*/_react.default.createElement(_VarList.VarNamesList, {
180
- mode: varMode
181
- })))))), /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Modal, {
182
- show: showModal,
183
- onHide: () => setShowModal(false),
184
- centered: true
185
- }, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Modal.Header, {
186
- closeButton: true
187
- }), /*#__PURE__*/_react.default.createElement(_reactBootstrap.Modal.Body, null)), /*#__PURE__*/_react.default.createElement(_offcanvas.OffcanvasObs, _extends({}, props, {
188
- showSelectedAsActive: showSelectedAsActive,
189
- show: showObs,
190
- handleClose: () => setShowObs(false)
191
- })), /*#__PURE__*/_react.default.createElement(_offcanvas.OffcanvasVars, {
192
- show: showVars,
193
- handleClose: () => setShowVars(false),
194
- mode: varMode
195
- }), plotControls && /*#__PURE__*/_react.default.createElement(_offcanvas.OffcanvasControls, {
196
- show: showControls,
197
- handleClose: () => setShowControls(false),
198
- Controls: plotControls
199
- }), /*#__PURE__*/_react.default.createElement(_offcanvas.OffcanvasObsm, {
200
- show: showObsm,
201
- handleClose: () => setShowObsm(false)
202
- }), /*#__PURE__*/_react.default.createElement(_offcanvas.OffcanvasControls, {
203
- show: showPseudospatialControls,
204
- handleClose: () => setShowPseudospatialControls(false),
205
- Controls: _PseudospatialToolbar.PseudospatialToolbar,
206
- plotType: pseudospatialPlotType
207
- }))));
124
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_DatasetContext.DatasetProvider, _objectSpread(_objectSpread({}, props), {}, {
125
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactBootstrap.Container, {
126
+ fluid: true,
127
+ className: "cherita-app-container",
128
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
129
+ className: "cherita-app-obs modern-scrollbars border-end h-100",
130
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_ObsList.ObsColsList, _objectSpread(_objectSpread({}, props), {}, {
131
+ showSelectedAsActive: showSelectedAsActive,
132
+ showHistograms: varMode === _constants.SELECTION_MODES.SINGLE,
133
+ showColor: varMode === _constants.SELECTION_MODES.SINGLE
134
+ }))
135
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
136
+ className: "cherita-app-canvas",
137
+ children: plot
138
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
139
+ className: "cherita-app-sidebar p-3",
140
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Card, {
141
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactBootstrap.Card.Body, {
142
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
143
+ className: "plotselector",
144
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_PlotTypeSelector.PlotTypeSelector, {
145
+ currentType: plotType,
146
+ onChange: type => setPlotType(type)
147
+ })
148
+ }), plotType === _constants.PLOT_TYPES.SCATTERPLOT && isPseudospatial ? /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
149
+ className: "sidebar-pseudospatial",
150
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Pseudospatial.Pseudospatial, {
151
+ plotType: pseudospatialPlotType,
152
+ setPlotType: setpseudospatialPlotType,
153
+ setShowControls: setShowPseudospatialControls
154
+ })
155
+ }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_jsxRuntime.Fragment, {}), /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
156
+ className: "sidebar-features",
157
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_SearchBar.SearchBar, {
158
+ searchDiseases: searchDiseases,
159
+ searchVar: true
160
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
161
+ className: "sidebar-features-list",
162
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_VarList.VarNamesList, {
163
+ mode: varMode
164
+ })
165
+ })]
166
+ })]
167
+ })
168
+ })
169
+ })]
170
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
171
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactBootstrap.Modal, {
172
+ show: showModal,
173
+ onHide: () => setShowModal(false),
174
+ centered: true,
175
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Modal.Header, {
176
+ closeButton: true
177
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Modal.Body, {})]
178
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_offcanvas.OffcanvasObs, _objectSpread(_objectSpread({}, props), {}, {
179
+ showSelectedAsActive: showSelectedAsActive,
180
+ show: showObs,
181
+ handleClose: () => setShowObs(false)
182
+ })), /*#__PURE__*/(0, _jsxRuntime.jsx)(_offcanvas.OffcanvasVars, {
183
+ show: showVars,
184
+ handleClose: () => setShowVars(false),
185
+ mode: varMode
186
+ }), plotControls && /*#__PURE__*/(0, _jsxRuntime.jsx)(_offcanvas.OffcanvasControls, {
187
+ show: showControls,
188
+ handleClose: () => setShowControls(false),
189
+ Controls: plotControls
190
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_offcanvas.OffcanvasObsm, {
191
+ show: showObsm,
192
+ handleClose: () => setShowObsm(false)
193
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_offcanvas.OffcanvasControls, {
194
+ show: showPseudospatialControls,
195
+ handleClose: () => setShowPseudospatialControls(false),
196
+ Controls: _PseudospatialToolbar.PseudospatialToolbar,
197
+ plotType: pseudospatialPlotType
198
+ })]
199
+ })]
200
+ }))
201
+ });
208
202
  }
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.PlotAlert = PlotAlert;
7
+ var _material = require("@mui/material");
8
+ var _reactBootstrap = require("react-bootstrap");
9
+ var _PlotTypeSelector = require("./PlotTypeSelector");
10
+ var _constants = require("../../constants/constants");
11
+ var _jsxRuntime = require("react/jsx-runtime");
12
+ function PlotAlert(_ref) {
13
+ let {
14
+ variant = 'warning',
15
+ plotType = _constants.PLOT_TYPES.SCATTERPLOT,
16
+ setPlotType,
17
+ heading,
18
+ children
19
+ } = _ref;
20
+ const XlBreakpoint = (0, _material.useMediaQuery)(_constants.BREAKPOINTS.XL);
21
+ const showPlotSelector = XlBreakpoint;
22
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
23
+ children: [showPlotSelector && /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
24
+ className: "plotselector",
25
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_PlotTypeSelector.PlotTypeSelector, {
26
+ currentType: plotType,
27
+ onChange: type => {
28
+ if (setPlotType) setPlotType(type);
29
+ }
30
+ })
31
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
32
+ className: "cherita-plot-alert h-100",
33
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
34
+ className: "w-100 h-100 d-flex justify-content-center align-items-center",
35
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactBootstrap.Alert, {
36
+ variant: variant,
37
+ className: "m-0 w-75 w-lg-50 text-center",
38
+ children: [heading && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Alert.Heading, {
39
+ children: heading
40
+ }), " ", children]
41
+ })
42
+ })
43
+ })]
44
+ });
45
+ }
@@ -4,54 +4,99 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.PlotTypeSelector = PlotTypeSelector;
7
- var _react = _interopRequireDefault(require("react"));
8
- var _dotplot = _interopRequireDefault(require("../../../assets/images/plots/dotplot.svg"));
9
- var _heatmap = _interopRequireDefault(require("../../../assets/images/plots/heatmap.svg"));
10
- var _matrixplot = _interopRequireDefault(require("../../../assets/images/plots/matrixplot.svg"));
11
- var _scatterplot = _interopRequireDefault(require("../../../assets/images/plots/scatterplot.svg"));
12
- var _violin = _interopRequireDefault(require("../../../assets/images/plots/violin.svg"));
7
+ var _react = require("react");
13
8
  var _constants = require("../../constants/constants");
9
+ var _StyledTooltip = require("../../utils/StyledTooltip");
10
+ var _DotPlotIcon = _interopRequireDefault(require("../icons/DotPlotIcon"));
11
+ var _HeatmapIcon = _interopRequireDefault(require("../icons/HeatmapIcon"));
12
+ var _MatrixPlotIcon = _interopRequireDefault(require("../icons/MatrixPlotIcon"));
13
+ var _ScatterplotIcon = _interopRequireDefault(require("../icons/ScatterplotIcon"));
14
+ var _ViolinPlotIcon = _interopRequireDefault(require("../icons/ViolinPlotIcon"));
15
+ var _jsxRuntime = require("react/jsx-runtime");
14
16
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
15
- const iconMap = {
16
- [_constants.PLOT_TYPES.DOTPLOT]: _dotplot.default,
17
- [_constants.PLOT_TYPES.MATRIXPLOT]: _matrixplot.default,
18
- [_constants.PLOT_TYPES.VIOLINPLOT]: _violin.default,
19
- [_constants.PLOT_TYPES.SCATTERPLOT]: _scatterplot.default,
20
- [_constants.PLOT_TYPES.HEATMAP]: _heatmap.default
21
- };
22
- const plotTypes = Object.entries(iconMap).map(_ref => {
23
- let [type, icon] = _ref;
24
- return {
25
- type,
26
- icon,
27
- alt: type.charAt(0).toUpperCase() + type.slice(1)
28
- };
29
- });
30
- function PlotTypeSelector(_ref2) {
17
+ 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; }
18
+ 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; }
19
+ 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; }
20
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
21
+ 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); }
22
+ const plotTypes = [{
23
+ type: _constants.PLOT_TYPES.SCATTERPLOT,
24
+ icon: _ScatterplotIcon.default,
25
+ name: 'Scatterplot',
26
+ description: 'Displays cells in 2D based on dimensionality reduction.'
27
+ }, {
28
+ type: _constants.PLOT_TYPES.MATRIXPLOT,
29
+ icon: _MatrixPlotIcon.default,
30
+ name: 'Matrix Plot',
31
+ description: 'Shows expression values of genes across categories.'
32
+ }, {
33
+ type: _constants.PLOT_TYPES.DOTPLOT,
34
+ icon: _DotPlotIcon.default,
35
+ name: 'Dot Plot',
36
+ description: 'Shows proportion and expression of genes across groups.'
37
+ }, {
38
+ type: _constants.PLOT_TYPES.HEATMAP,
39
+ icon: _HeatmapIcon.default,
40
+ name: 'Heatmap',
41
+ description: 'Visualises gene expression or feature activity as a colour-coded matrix.'
42
+ }, {
43
+ type: _constants.PLOT_TYPES.VIOLINPLOT,
44
+ icon: _ViolinPlotIcon.default,
45
+ name: 'Violin Plot',
46
+ description: 'Displays distribution of gene expression across categories.'
47
+ }];
48
+ function PlotTypeSelector(_ref) {
31
49
  let {
32
50
  currentType,
33
51
  onChange
34
- } = _ref2;
35
- return /*#__PURE__*/_react.default.createElement("div", {
36
- className: "d-flex gap-2 justify-content-between"
37
- }, plotTypes.map(_ref3 => {
38
- let {
39
- type,
40
- icon,
41
- alt
42
- } = _ref3;
43
- return /*#__PURE__*/_react.default.createElement("img", {
44
- key: type,
45
- src: icon,
46
- alt: alt,
47
- height: 32,
48
- width: 32,
49
- className: "plotselector-icon".concat(currentType === type ? " active" : ""),
50
- onClick: () => onChange(type),
51
- style: {
52
- borderBottom: currentType === type ? "2px solid #007bff" : "none"
53
- },
54
- title: alt
55
- });
52
+ } = _ref;
53
+ const [hoveredMap, setHoveredMap] = (0, _react.useState)({});
54
+ const handleMouseEnter = type => setHoveredMap(prev => _objectSpread(_objectSpread({}, prev), {}, {
55
+ [type]: true
56
+ }));
57
+ const handleMouseLeave = type => setHoveredMap(prev => _objectSpread(_objectSpread({}, prev), {}, {
58
+ [type]: false
56
59
  }));
60
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
61
+ className: "d-flex gap-2 justify-content-between",
62
+ children: plotTypes.map(_ref2 => {
63
+ let {
64
+ type,
65
+ icon: Icon,
66
+ name,
67
+ description
68
+ } = _ref2;
69
+ const isActive = currentType === type;
70
+ const hovered = hoveredMap[type] || false;
71
+ const colour = isActive ? '#005a86' : hovered ? '#0071a7' : '#000';
72
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_StyledTooltip.StyledTooltip, {
73
+ title: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
74
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("strong", {
75
+ children: name
76
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("br", {}), description]
77
+ }),
78
+ placement: "bottom",
79
+ slotProps: {
80
+ popper: {
81
+ modifiers: [{
82
+ name: 'offset',
83
+ options: {
84
+ offset: [0, -12]
85
+ }
86
+ }]
87
+ }
88
+ },
89
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
90
+ onMouseEnter: () => handleMouseEnter(type),
91
+ onMouseLeave: () => handleMouseLeave(type),
92
+ onClick: () => onChange(type),
93
+ className: "plotselector-icon".concat(isActive ? ' active' : ''),
94
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(Icon, {
95
+ size: 34,
96
+ colour: colour
97
+ })
98
+ })
99
+ }, type);
100
+ })
101
+ });
57
102
  }