@haniffalab/cherita-react 1.3.0 → 1.3.1

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 (137) 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 +85 -57
  4. package/dist/cjs/components/dotplot/DotplotControls.js +103 -83
  5. package/dist/cjs/components/full-page/FullPage.js +167 -114
  6. package/dist/cjs/components/full-page/PlotAlert.js +45 -0
  7. package/dist/cjs/components/full-page/PlotTypeSelector.js +102 -0
  8. package/dist/cjs/components/heatmap/Heatmap.js +83 -53
  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 +83 -54
  18. package/dist/cjs/components/matrixplot/MatrixplotControls.js +8 -5
  19. package/dist/cjs/components/obs-list/ObsItem.js +305 -216
  20. package/dist/cjs/components/obs-list/ObsList.js +164 -128
  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 +223 -175
  27. package/dist/cjs/components/scatterplot/ScatterplotControls.js +45 -31
  28. package/dist/cjs/components/scatterplot/SpatialControls.js +143 -116
  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 +79 -85
  32. package/dist/cjs/components/search-bar/SearchResults.js +93 -71
  33. package/dist/cjs/components/toolbar/Toolbar.js +111 -0
  34. package/dist/cjs/components/var-list/VarItem.js +131 -103
  35. package/dist/cjs/components/var-list/VarList.js +96 -74
  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 +124 -81
  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 +54 -39
  42. package/dist/cjs/context/DatasetContext.js +27 -17
  43. package/dist/cjs/context/FilterContext.js +11 -9
  44. package/dist/cjs/context/SettingsContext.js +339 -125
  45. package/dist/cjs/context/ZarrDataContext.js +6 -5
  46. package/dist/cjs/helpers/color-helper.js +2 -2
  47. package/dist/cjs/helpers/map-helper.js +2 -1
  48. package/dist/cjs/helpers/zarr-helper.js +3 -3
  49. package/dist/cjs/index.js +15 -21
  50. package/dist/cjs/utils/Filter.js +16 -11
  51. package/dist/cjs/utils/Histogram.js +35 -33
  52. package/dist/cjs/utils/ImageViewer.js +11 -8
  53. package/dist/cjs/utils/Legend.js +37 -30
  54. package/dist/cjs/utils/LoadingIndicators.js +15 -13
  55. package/dist/cjs/utils/Resolver.js +213 -0
  56. package/dist/cjs/utils/Skeleton.js +10 -10
  57. package/dist/cjs/utils/StyledTooltip.js +44 -0
  58. package/dist/cjs/utils/VirtualizedList.js +36 -29
  59. package/dist/cjs/utils/errors.js +15 -15
  60. package/dist/cjs/utils/requests.js +21 -9
  61. package/dist/cjs/utils/search.js +4 -4
  62. package/dist/cjs/utils/string.js +6 -6
  63. package/dist/cjs/utils/zarrData.js +20 -21
  64. package/dist/css/cherita.css +188 -65
  65. package/dist/css/cherita.css.map +1 -1
  66. package/dist/esm/components/controls/Controls.js +43 -35
  67. package/dist/esm/components/dotplot/Dotplot.js +93 -64
  68. package/dist/esm/components/dotplot/DotplotControls.js +106 -85
  69. package/dist/esm/components/full-page/FullPage.js +180 -124
  70. package/dist/esm/components/full-page/PlotAlert.js +39 -0
  71. package/dist/esm/components/full-page/PlotTypeSelector.js +95 -0
  72. package/dist/esm/components/heatmap/Heatmap.js +91 -60
  73. package/dist/esm/components/heatmap/HeatmapControls.js +8 -4
  74. package/dist/esm/components/icons/DotPlotIcon.js +58 -0
  75. package/dist/esm/components/icons/HeatmapIcon.js +39 -0
  76. package/dist/esm/components/icons/MatrixPlotIcon.1.js +51 -0
  77. package/dist/esm/components/icons/MatrixPlotIcon.js +53 -0
  78. package/dist/esm/components/icons/ScatterplotIcon.1.js +158 -0
  79. package/dist/esm/components/icons/ScatterplotIcon.js +138 -0
  80. package/dist/esm/components/icons/ViolinPlotIcon.js +36 -0
  81. package/dist/esm/components/matrixplot/Matrixplot.js +91 -61
  82. package/dist/esm/components/matrixplot/MatrixplotControls.js +10 -6
  83. package/dist/esm/components/obs-list/ObsItem.js +320 -228
  84. package/dist/esm/components/obs-list/ObsList.js +179 -142
  85. package/dist/esm/components/obs-list/ObsToolbar.js +3 -3
  86. package/dist/esm/components/obsm-list/ObsmList.js +71 -32
  87. package/dist/esm/components/offcanvas/index.js +68 -33
  88. package/dist/esm/components/pseudospatial/Pseudospatial.js +145 -88
  89. package/dist/esm/components/pseudospatial/PseudospatialToolbar.js +127 -78
  90. package/dist/esm/components/scatterplot/Scatterplot.js +243 -194
  91. package/dist/esm/components/scatterplot/ScatterplotControls.js +50 -35
  92. package/dist/esm/components/scatterplot/SpatialControls.js +155 -127
  93. package/dist/esm/components/scatterplot/Toolbox.js +44 -32
  94. package/dist/esm/components/search-bar/SearchBar.js +187 -130
  95. package/dist/esm/components/search-bar/SearchInfo.js +86 -91
  96. package/dist/esm/components/search-bar/SearchResults.js +100 -77
  97. package/dist/esm/components/toolbar/Toolbar.js +101 -0
  98. package/dist/esm/components/var-list/VarItem.js +142 -113
  99. package/dist/esm/components/var-list/VarList.js +108 -88
  100. package/dist/esm/components/var-list/VarListToolbar.js +64 -58
  101. package/dist/esm/components/var-list/VarSet.js +134 -115
  102. package/dist/esm/components/violin/Violin.js +135 -91
  103. package/dist/esm/components/violin/ViolinControls.js +10 -6
  104. package/dist/esm/constants/colorscales.js +19 -19
  105. package/dist/esm/constants/constants.js +53 -38
  106. package/dist/esm/context/DatasetContext.js +34 -23
  107. package/dist/esm/context/FilterContext.js +11 -8
  108. package/dist/esm/context/SettingsContext.js +341 -126
  109. package/dist/esm/context/ZarrDataContext.js +8 -6
  110. package/dist/esm/helpers/color-helper.js +5 -5
  111. package/dist/esm/helpers/map-helper.js +4 -3
  112. package/dist/esm/helpers/zarr-helper.js +6 -6
  113. package/dist/esm/index.js +22 -22
  114. package/dist/esm/utils/Filter.js +22 -17
  115. package/dist/esm/utils/Histogram.js +39 -37
  116. package/dist/esm/utils/ImageViewer.js +12 -8
  117. package/dist/esm/utils/Legend.js +44 -36
  118. package/dist/esm/utils/LoadingIndicators.js +16 -13
  119. package/dist/esm/utils/Resolver.js +201 -0
  120. package/dist/esm/utils/Skeleton.js +11 -10
  121. package/dist/esm/utils/StyledTooltip.js +38 -0
  122. package/dist/esm/utils/VirtualizedList.js +37 -29
  123. package/dist/esm/utils/errors.js +15 -15
  124. package/dist/esm/utils/requests.js +24 -12
  125. package/dist/esm/utils/search.js +7 -7
  126. package/dist/esm/utils/string.js +7 -7
  127. package/dist/esm/utils/zarrData.js +27 -28
  128. package/package.json +21 -8
  129. package/scss/cherita-bootstrap.scss +2 -2
  130. package/scss/cherita.scss +65 -17
  131. package/scss/components/accordions.scss +15 -2
  132. package/scss/components/layouts.scss +116 -30
  133. package/scss/components/lists.scss +16 -5
  134. package/scss/components/plotly.scss +40 -23
  135. package/scss/components/plots.scss +14 -1
  136. package/dist/cjs/components/full-page/FullPagePseudospatial.js +0 -157
  137. package/dist/esm/components/full-page/FullPagePseudospatial.js +0 -149
@@ -4,146 +4,199 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.FullPage = FullPage;
7
- exports.FullPagePlots = FullPagePlots;
8
- exports.FullPageScatterplot = FullPageScatterplot;
9
- var _react = _interopRequireWildcard(require("react"));
7
+ var _react = require("react");
8
+ var _material = require("@mui/material");
10
9
  var _reactBootstrap = require("react-bootstrap");
11
10
  var _constants = require("../../constants/constants");
12
11
  var _DatasetContext = require("../../context/DatasetContext");
13
12
  var _Dotplot = require("../dotplot/Dotplot");
13
+ var _DotplotControls = require("../dotplot/DotplotControls");
14
14
  var _Heatmap = require("../heatmap/Heatmap");
15
+ var _HeatmapControls = require("../heatmap/HeatmapControls");
15
16
  var _Matrixplot = require("../matrixplot/Matrixplot");
17
+ var _MatrixplotControls = require("../matrixplot/MatrixplotControls");
16
18
  var _ObsList = require("../obs-list/ObsList");
17
19
  var _offcanvas = require("../offcanvas");
20
+ var _PlotTypeSelector = require("./PlotTypeSelector");
21
+ var _Pseudospatial = require("../pseudospatial/Pseudospatial");
22
+ var _PseudospatialToolbar = require("../pseudospatial/PseudospatialToolbar");
18
23
  var _Scatterplot = require("../scatterplot/Scatterplot");
19
24
  var _ScatterplotControls = require("../scatterplot/ScatterplotControls");
20
25
  var _SearchBar = require("../search-bar/SearchBar");
21
26
  var _VarList = require("../var-list/VarList");
22
27
  var _Violin = require("../violin/Violin");
23
- const _excluded = ["children", "varMode", "searchDiseases"];
24
- 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); }
25
- 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); }
28
+ var _ViolinControls = require("../violin/ViolinControls");
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); }
26
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; }
27
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; }
28
38
  function FullPage(_ref) {
29
39
  let {
30
- children,
31
- varMode = _constants.SELECTION_MODES.SINGLE,
32
- searchDiseases = false
40
+ searchDiseases = true,
41
+ defaultPlotType = _constants.PLOT_TYPES.SCATTERPLOT
33
42
  } = _ref,
34
43
  props = _objectWithoutProperties(_ref, _excluded);
35
- const appRef = (0, _react.useRef)();
36
- const [appDimensions, setAppDimensions] = (0, _react.useState)({
37
- width: 0,
38
- height: 0
39
- });
40
44
  const [showObs, setShowObs] = (0, _react.useState)(false);
41
45
  const [showObsm, setShowObsm] = (0, _react.useState)(false);
42
46
  const [showVars, setShowVars] = (0, _react.useState)(false);
43
47
  const [showControls, setShowControls] = (0, _react.useState)(false);
44
48
  const [showModal, setShowModal] = (0, _react.useState)(false);
49
+ const [plotType, setPlotType] = (0, _react.useState)(defaultPlotType || _constants.PLOT_TYPES.SCATTERPLOT);
50
+ const [showPseudospatialControls, setShowPseudospatialControls] = (0, _react.useState)(false);
51
+ const [pseudospatialPlotType, setpseudospatialPlotType] = (0, _react.useState)(null);
52
+ const {
53
+ isPseudospatial = false
54
+ } = props;
45
55
  (0, _react.useEffect)(() => {
46
- const updateDimensions = () => {
47
- if (appRef.current) {
48
- // Get the distance from the top of the page to the target element
49
- const rect = appRef.current.getBoundingClientRect();
50
- const distanceFromTop = rect.top + window.scrollY;
51
-
52
- // Calculate the available height for the Cherita app
53
- const availableHeight = window.innerHeight - distanceFromTop;
54
-
55
- // Update the dimensions to fit the viewport minus the navbar height
56
- setAppDimensions({
57
- width: appRef.current.offsetWidth,
58
- height: availableHeight
59
- });
60
- }
61
- };
62
- window.addEventListener("resize", updateDimensions);
63
- updateDimensions(); // Initial update
64
- return () => window.removeEventListener("resize", updateDimensions);
65
- }, []);
66
- return /*#__PURE__*/_react.default.createElement("div", {
67
- ref: appRef,
68
- className: "cherita-app",
69
- style: {
70
- height: appDimensions.height
56
+ setPlotType(defaultPlotType || _constants.PLOT_TYPES.SCATTERPLOT);
57
+ }, [defaultPlotType]);
58
+ const LgBreakpoint = (0, _material.useMediaQuery)(_constants.BREAKPOINTS.LG);
59
+ const XlBreakpoint = (0, _material.useMediaQuery)(_constants.BREAKPOINTS.XL);
60
+ const showObsBtn = LgBreakpoint;
61
+ const showVarsBtn = XlBreakpoint;
62
+ const {
63
+ plotControls,
64
+ varMode,
65
+ showSelectedAsActive
66
+ } = {
67
+ [_constants.PLOT_TYPES.SCATTERPLOT]: {
68
+ plotControls: _ScatterplotControls.ScatterplotControls,
69
+ varMode: _constants.SELECTION_MODES.SINGLE,
70
+ showSelectedAsActive: false
71
+ },
72
+ [_constants.PLOT_TYPES.DOTPLOT]: {
73
+ plotControls: _DotplotControls.DotplotControls,
74
+ varMode: _constants.SELECTION_MODES.MULTIPLE,
75
+ showSelectedAsActive: true
76
+ },
77
+ [_constants.PLOT_TYPES.MATRIXPLOT]: {
78
+ plotControls: _MatrixplotControls.MatrixplotControls,
79
+ varMode: _constants.SELECTION_MODES.MULTIPLE,
80
+ showSelectedAsActive: true
81
+ },
82
+ [_constants.PLOT_TYPES.HEATMAP]: {
83
+ plotControls: _HeatmapControls.HeatmapControls,
84
+ varMode: _constants.SELECTION_MODES.MULTIPLE,
85
+ showSelectedAsActive: true
86
+ },
87
+ [_constants.PLOT_TYPES.VIOLINPLOT]: {
88
+ plotControls: _ViolinControls.ViolinControls,
89
+ varMode: _constants.SELECTION_MODES.MULTIPLE,
90
+ showSelectedAsActive: false
71
91
  }
72
- }, /*#__PURE__*/_react.default.createElement(_DatasetContext.DatasetProvider, props, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Container, {
73
- fluid: true,
74
- className: "d-flex g-0",
75
- style: {
76
- height: appDimensions.height
77
- }
78
- }, /*#__PURE__*/_react.default.createElement("div", {
79
- className: "cherita-app-obs modern-scrollbars border-end h-100"
80
- }, /*#__PURE__*/_react.default.createElement(_ObsList.ObsColsList, props)), /*#__PURE__*/_react.default.createElement("div", {
81
- className: "cherita-app-canvas flex-grow-1"
82
- }, children({
83
- setShowObs,
84
- setShowVars
85
- })), /*#__PURE__*/_react.default.createElement("div", {
86
- className: "cherita-app-sidebar p-3"
87
- }, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Card, null, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Card.Body, {
88
- className: "d-flex flex-column p-0"
89
- }, /*#__PURE__*/_react.default.createElement("div", {
90
- className: "sidebar-features modern-scrollbars"
91
- }, /*#__PURE__*/_react.default.createElement(_SearchBar.SearchBar, {
92
- searchDiseases: searchDiseases,
93
- searchVar: true
94
- }), /*#__PURE__*/_react.default.createElement(_VarList.VarNamesList, {
95
- mode: varMode
96
- })))))), /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Modal, {
97
- show: showModal,
98
- onHide: () => setShowModal(false),
99
- centered: true
100
- }, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Modal.Header, {
101
- closeButton: true
102
- }), /*#__PURE__*/_react.default.createElement(_reactBootstrap.Modal.Body, null)), /*#__PURE__*/_react.default.createElement(_offcanvas.OffcanvasObs, {
103
- show: showObs,
104
- handleClose: () => setShowObs(false)
105
- }), /*#__PURE__*/_react.default.createElement(_offcanvas.OffcanvasVars, {
106
- show: showVars,
107
- handleClose: () => setShowVars(false),
108
- mode: varMode
109
- }), /*#__PURE__*/_react.default.createElement(_offcanvas.OffcanvasControls, {
110
- show: showControls,
111
- handleClose: () => setShowControls(false),
112
- Controls: _ScatterplotControls.ScatterplotControls
113
- }), /*#__PURE__*/_react.default.createElement(_offcanvas.OffcanvasObsm, {
114
- show: showObsm,
115
- handleClose: () => setShowObsm(false)
116
- }))));
117
- }
118
- function FullPageScatterplot(props) {
119
- return /*#__PURE__*/_react.default.createElement(FullPage, _extends({}, props, {
120
- varMode: _constants.SELECTION_MODES.SINGLE
121
- }), _ref2 => {
122
- let {
92
+ }[plotType];
93
+ const plot = (0, _react.useMemo)(() => {
94
+ const commonProps = {
95
+ showObsBtn,
96
+ showVarsBtn,
97
+ showCtrlsBtn: true,
98
+ plotType,
123
99
  setShowObs,
124
- setShowVars
125
- } = _ref2;
126
- return /*#__PURE__*/_react.default.createElement(_Scatterplot.Scatterplot, {
127
- setShowObs: setShowObs,
128
- setShowVars: setShowVars,
129
- isFullscreen: true
130
- });
100
+ setShowVars,
101
+ setShowControls,
102
+ setPlotType
103
+ };
104
+ switch (plotType) {
105
+ case _constants.PLOT_TYPES.DOTPLOT:
106
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Dotplot.Dotplot, _objectSpread({}, commonProps));
107
+ case _constants.PLOT_TYPES.MATRIXPLOT:
108
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Matrixplot.Matrixplot, _objectSpread({}, commonProps));
109
+ case _constants.PLOT_TYPES.HEATMAP:
110
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Heatmap.Heatmap, _objectSpread({}, commonProps));
111
+ case _constants.PLOT_TYPES.VIOLINPLOT:
112
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Violin.Violin, _objectSpread({
113
+ mode: _constants.VIOLIN_MODES.MULTIKEY
114
+ }, commonProps));
115
+ case _constants.PLOT_TYPES.SCATTERPLOT:
116
+ default:
117
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Scatterplot.Scatterplot, _objectSpread(_objectSpread({}, commonProps), {}, {
118
+ isFullscreen: true
119
+ }));
120
+ }
121
+ }, [plotType, showObsBtn, showVarsBtn]);
122
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
123
+ className: "cherita-app",
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
+ }))
131
201
  });
132
- }
133
- function FullPagePlots(props) {
134
- return /*#__PURE__*/_react.default.createElement(FullPage, _extends({}, props, {
135
- varMode: _constants.SELECTION_MODES.MULTIPLE
136
- }), /*#__PURE__*/_react.default.createElement("div", {
137
- className: "container-fluid w-100 h-100 d-flex flex-column overflow-y-auto"
138
- }, /*#__PURE__*/_react.default.createElement("div", {
139
- className: "row flex-grow-1"
140
- }, /*#__PURE__*/_react.default.createElement(_Heatmap.Heatmap, null)), /*#__PURE__*/_react.default.createElement("div", {
141
- className: "row flex-grow-1"
142
- }, /*#__PURE__*/_react.default.createElement(_Matrixplot.Matrixplot, null)), /*#__PURE__*/_react.default.createElement("div", {
143
- className: "row flex-grow-1"
144
- }, /*#__PURE__*/_react.default.createElement(_Dotplot.Dotplot, null)), /*#__PURE__*/_react.default.createElement("div", {
145
- className: "row flex-grow-1"
146
- }, /*#__PURE__*/_react.default.createElement(_Violin.Violin, {
147
- mode: _constants.VIOLIN_MODES.GROUPBY
148
- }))));
149
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
+ }
@@ -0,0 +1,102 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.PlotTypeSelector = PlotTypeSelector;
7
+ var _react = require("react");
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");
16
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
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) {
49
+ let {
50
+ currentType,
51
+ onChange
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
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
+ });
102
+ }