@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
@@ -3,10 +3,11 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
3
3
  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; }
4
4
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
5
5
  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); }
6
- import React, { useEffect, useState } from "react";
7
- import { Button, Form, InputGroup } from "react-bootstrap";
8
- import { useSettings, useSettingsDispatch } from "../../context/SettingsContext";
9
- import { ColorscaleSelect, ScaleSelect } from "../controls/Controls";
6
+ import { useEffect, useState } from 'react';
7
+ import { Button, Form, InputGroup } from 'react-bootstrap';
8
+ import { useSettings, useSettingsDispatch } from '../../context/SettingsContext';
9
+ import { ColorscaleSelect, ScaleSelect } from '../controls/Controls';
10
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
10
11
  export function DotplotControls() {
11
12
  const settings = useSettings();
12
13
  const dispatch = useSettingsDispatch();
@@ -26,88 +27,108 @@ export function DotplotControls() {
26
27
  expressionCutoff: settings.controls.expressionCutoff
27
28
  }));
28
29
  }, [settings.controls.colorAxis.cmin, settings.controls.colorAxis.cmax, settings.controls.expressionCutoff]);
29
- return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Form, null, /*#__PURE__*/React.createElement(ColorscaleSelect, null), /*#__PURE__*/React.createElement(Form.Group, {
30
- className: "mb-2"
31
- }, /*#__PURE__*/React.createElement(InputGroup, null, /*#__PURE__*/React.createElement(InputGroup.Text, null, "min"), /*#__PURE__*/React.createElement(Form.Control, {
32
- name: "scaleMin",
33
- size: "sm",
34
- type: "number",
35
- value: controls.colorAxis.cmin,
36
- step: 0.1,
37
- min: Math.min(settings.controls.colorAxis.dmin, 0.0),
38
- max: settings.controls.colorAxis.dmax,
39
- onChange: e => {
40
- setControls(_objectSpread(_objectSpread({}, controls), {}, {
41
- colorAxis: _objectSpread(_objectSpread({}, controls.colorAxis), {}, {
42
- cmin: e.target.value
30
+ return /*#__PURE__*/_jsx(_Fragment, {
31
+ children: /*#__PURE__*/_jsxs(Form, {
32
+ children: [/*#__PURE__*/_jsx(ColorscaleSelect, {}), /*#__PURE__*/_jsx(Form.Group, {
33
+ className: "mb-2",
34
+ children: /*#__PURE__*/_jsxs(InputGroup, {
35
+ children: [/*#__PURE__*/_jsx(InputGroup.Text, {
36
+ children: "min"
37
+ }), /*#__PURE__*/_jsx(Form.Control, {
38
+ name: "scaleMin",
39
+ size: "sm",
40
+ type: "number",
41
+ value: controls.colorAxis.cmin,
42
+ step: 0.1,
43
+ min: Math.min(settings.controls.colorAxis.dmin, 0.0),
44
+ max: settings.controls.colorAxis.dmax,
45
+ onChange: e => {
46
+ setControls(_objectSpread(_objectSpread({}, controls), {}, {
47
+ colorAxis: _objectSpread(_objectSpread({}, controls.colorAxis), {}, {
48
+ cmin: e.target.value
49
+ })
50
+ }));
51
+ }
52
+ }), /*#__PURE__*/_jsx(InputGroup.Text, {
53
+ children: "max"
54
+ }), /*#__PURE__*/_jsx(Form.Control, {
55
+ name: "scaleMax",
56
+ size: "sm",
57
+ type: "number",
58
+ value: controls.colorAxis.cmax,
59
+ step: 0.1,
60
+ min: controls.colorAxis.cmin,
61
+ max: settings.controls.colorAxis.dmax,
62
+ onChange: e => {
63
+ if (parseFloat(e.target.value) > settings.controls.colorAxis.dmax) {
64
+ e.target.value = settings.controls.colorAxis.dmax.toFixed(1);
65
+ }
66
+ setControls(_objectSpread(_objectSpread({}, controls), {}, {
67
+ colorAxis: _objectSpread(_objectSpread({}, controls.colorAxis), {}, {
68
+ cmax: e.target.value
69
+ })
70
+ }));
71
+ }
72
+ }), /*#__PURE__*/_jsx(Button, {
73
+ variant: "outline-primary",
74
+ onClick: () => dispatch({
75
+ type: 'set.controls.colorAxis.crange',
76
+ cmin: controls.colorAxis.cmin,
77
+ cmax: controls.colorAxis.cmax
78
+ }),
79
+ children: "Apply"
80
+ }), /*#__PURE__*/_jsx(Button, {
81
+ variant: "outline-primary",
82
+ onClick: () => dispatch({
83
+ type: 'set.controls.colorAxis.crange',
84
+ cmin: settings.controls.colorAxis.dmin,
85
+ cmax: settings.controls.colorAxis.dmax
86
+ }),
87
+ children: "Reset"
88
+ })]
43
89
  })
44
- }));
45
- }
46
- }), /*#__PURE__*/React.createElement(InputGroup.Text, null, "max"), /*#__PURE__*/React.createElement(Form.Control, {
47
- name: "scaleMax",
48
- size: "sm",
49
- type: "number",
50
- value: controls.colorAxis.cmax,
51
- step: 0.1,
52
- min: controls.colorAxis.cmin,
53
- max: settings.controls.colorAxis.dmax,
54
- onChange: e => {
55
- if (parseFloat(e.target.value) > settings.controls.colorAxis.dmax) {
56
- e.target.value = settings.controls.colorAxis.dmax.toFixed(1);
57
- }
58
- setControls(_objectSpread(_objectSpread({}, controls), {}, {
59
- colorAxis: _objectSpread(_objectSpread({}, controls.colorAxis), {}, {
60
- cmax: e.target.value
90
+ }), /*#__PURE__*/_jsx(ScaleSelect, {
91
+ plot: "dotplot"
92
+ }), /*#__PURE__*/_jsxs(Form.Group, {
93
+ className: "mb-2",
94
+ children: [/*#__PURE__*/_jsx(Form.Label, {
95
+ children: "Expression Cutoff"
96
+ }), /*#__PURE__*/_jsxs(InputGroup, {
97
+ children: [/*#__PURE__*/_jsx(Form.Control, {
98
+ size: "sm",
99
+ type: "number",
100
+ step: '0.1',
101
+ min: 0.0,
102
+ value: controls.expressionCutoff,
103
+ onChange: e => {
104
+ setControls(_objectSpread(_objectSpread({}, controls), {}, {
105
+ expressionCutoff: e.target.value
106
+ }));
107
+ }
108
+ }), /*#__PURE__*/_jsx(Button, {
109
+ variant: "outline-primary",
110
+ onClick: () => dispatch({
111
+ type: 'set.controls.expressionCutoff',
112
+ expressionCutoff: parseFloat(controls.expressionCutoff)
113
+ }),
114
+ children: "Apply"
115
+ })]
116
+ })]
117
+ }), /*#__PURE__*/_jsx(Form.Group, {
118
+ className: "mb-2",
119
+ children: /*#__PURE__*/_jsx(Form.Check, {
120
+ type: "switch",
121
+ id: "meanOnlyExpressed",
122
+ label: "Average only above cutoff",
123
+ checked: settings.controls.meanOnlyExpressed,
124
+ onChange: () => {
125
+ dispatch({
126
+ type: 'set.controls.meanOnlyExpressed',
127
+ meanOnlyExpressed: !settings.controls.meanOnlyExpressed
128
+ });
129
+ }
61
130
  })
62
- }));
63
- }
64
- }), /*#__PURE__*/React.createElement(Button, {
65
- variant: "outline-primary",
66
- onClick: () => dispatch({
67
- type: "set.controls.colorAxis.crange",
68
- cmin: controls.colorAxis.cmin,
69
- cmax: controls.colorAxis.cmax
131
+ })]
70
132
  })
71
- }, "Apply"), /*#__PURE__*/React.createElement(Button, {
72
- variant: "outline-primary",
73
- onClick: () => dispatch({
74
- type: "set.controls.colorAxis.crange",
75
- cmin: settings.controls.colorAxis.dmin,
76
- cmax: settings.controls.colorAxis.dmax
77
- })
78
- }, "Reset"))), /*#__PURE__*/React.createElement(ScaleSelect, {
79
- plot: "dotplot"
80
- }), /*#__PURE__*/React.createElement(Form.Group, {
81
- className: "mb-2"
82
- }, /*#__PURE__*/React.createElement(Form.Label, null, "Expression Cutoff"), /*#__PURE__*/React.createElement(InputGroup, null, /*#__PURE__*/React.createElement(Form.Control, {
83
- size: "sm",
84
- type: "number",
85
- step: "0.1",
86
- min: 0.0,
87
- value: controls.expressionCutoff,
88
- onChange: e => {
89
- setControls(_objectSpread(_objectSpread({}, controls), {}, {
90
- expressionCutoff: e.target.value
91
- }));
92
- }
93
- }), /*#__PURE__*/React.createElement(Button, {
94
- variant: "outline-primary",
95
- onClick: () => dispatch({
96
- type: "set.controls.expressionCutoff",
97
- expressionCutoff: parseFloat(controls.expressionCutoff)
98
- })
99
- }, "Apply"))), /*#__PURE__*/React.createElement(Form.Group, {
100
- className: "mb-2"
101
- }, /*#__PURE__*/React.createElement(Form.Check, {
102
- type: "switch",
103
- id: "meanOnlyExpressed",
104
- label: "Average only above cutoff",
105
- checked: settings.controls.meanOnlyExpressed,
106
- onChange: () => {
107
- dispatch({
108
- type: "set.controls.meanOnlyExpressed",
109
- meanOnlyExpressed: !settings.controls.meanOnlyExpressed
110
- });
111
- }
112
- }))));
133
+ });
113
134
  }
@@ -1,41 +1,40 @@
1
- const _excluded = ["isPseudospatial", "searchDiseases", "defaultPlotType"];
2
- 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); }
1
+ const _excluded = ["searchDiseases", "defaultPlotType"];
2
+ 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; }
3
+ 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; }
4
+ 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; }
5
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
6
+ 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); }
3
7
  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; }
4
8
  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; }
5
- import React, { useEffect, useMemo, useRef, useState } from "react";
6
- import { useMediaQuery } from "@mui/material";
7
- import { Card, Container, Modal } from "react-bootstrap";
8
- import { BREAKPOINTS, PLOT_TYPES, SELECTION_MODES, VIOLIN_MODES } from "../../constants/constants";
9
- import { DatasetProvider } from "../../context/DatasetContext";
10
- import { Dotplot } from "../dotplot/Dotplot";
11
- import { DotplotControls } from "../dotplot/DotplotControls";
12
- import { PlotTypeSelector } from "../full-page/PlotTypeSelector";
13
- import { Heatmap } from "../heatmap/Heatmap";
14
- import { HeatmapControls } from "../heatmap/HeatmapControls";
15
- import { Matrixplot } from "../matrixplot/Matrixplot";
16
- import { MatrixplotControls } from "../matrixplot/MatrixplotControls";
17
- import { ObsColsList } from "../obs-list/ObsList";
18
- import { OffcanvasControls, OffcanvasObs, OffcanvasObsm, OffcanvasVars } from "../offcanvas";
19
- import { Pseudospatial } from "../pseudospatial/Pseudospatial";
20
- import { PseudospatialToolbar } from "../pseudospatial/PseudospatialToolbar";
21
- import { Scatterplot } from "../scatterplot/Scatterplot";
22
- import { ScatterplotControls } from "../scatterplot/ScatterplotControls";
23
- import { SearchBar } from "../search-bar/SearchBar";
24
- import { VarNamesList } from "../var-list/VarList";
25
- import { Violin } from "../violin/Violin";
26
- import { ViolinControls } from "../violin/ViolinControls";
9
+ import { useEffect, useMemo, useState } from 'react';
10
+ import { useMediaQuery } from '@mui/material';
11
+ import { Card, Container, Modal } from 'react-bootstrap';
12
+ import { BREAKPOINTS, PLOT_TYPES, SELECTION_MODES, VIOLIN_MODES } from '../../constants/constants';
13
+ import { DatasetProvider } from '../../context/DatasetContext';
14
+ import { Dotplot } from '../dotplot/Dotplot';
15
+ import { DotplotControls } from '../dotplot/DotplotControls';
16
+ import { Heatmap } from '../heatmap/Heatmap';
17
+ import { HeatmapControls } from '../heatmap/HeatmapControls';
18
+ import { Matrixplot } from '../matrixplot/Matrixplot';
19
+ import { MatrixplotControls } from '../matrixplot/MatrixplotControls';
20
+ import { ObsColsList } from '../obs-list/ObsList';
21
+ import { OffcanvasControls, OffcanvasObs, OffcanvasObsm, OffcanvasVars } from '../offcanvas';
22
+ import { PlotTypeSelector } from './PlotTypeSelector';
23
+ import { Pseudospatial } from '../pseudospatial/Pseudospatial';
24
+ import { PseudospatialToolbar } from '../pseudospatial/PseudospatialToolbar';
25
+ import { Scatterplot } from '../scatterplot/Scatterplot';
26
+ import { ScatterplotControls } from '../scatterplot/ScatterplotControls';
27
+ import { SearchBar } from '../search-bar/SearchBar';
28
+ import { VarNamesList } from '../var-list/VarList';
29
+ import { Violin } from '../violin/Violin';
30
+ import { ViolinControls } from '../violin/ViolinControls';
31
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
27
32
  export function FullPage(_ref) {
28
33
  let {
29
- isPseudospatial = false,
30
34
  searchDiseases = true,
31
35
  defaultPlotType = PLOT_TYPES.SCATTERPLOT
32
36
  } = _ref,
33
37
  props = _objectWithoutProperties(_ref, _excluded);
34
- const appRef = useRef();
35
- const [appDimensions, setAppDimensions] = useState({
36
- width: 0,
37
- height: 0
38
- });
39
38
  const [showObs, setShowObs] = useState(false);
40
39
  const [showObsm, setShowObsm] = useState(false);
41
40
  const [showVars, setShowVars] = useState(false);
@@ -44,6 +43,9 @@ export function FullPage(_ref) {
44
43
  const [plotType, setPlotType] = useState(defaultPlotType || PLOT_TYPES.SCATTERPLOT);
45
44
  const [showPseudospatialControls, setShowPseudospatialControls] = useState(false);
46
45
  const [pseudospatialPlotType, setpseudospatialPlotType] = useState(null);
46
+ const {
47
+ isPseudospatial = false
48
+ } = props;
47
49
  useEffect(() => {
48
50
  setPlotType(defaultPlotType || PLOT_TYPES.SCATTERPLOT);
49
51
  }, [defaultPlotType]);
@@ -51,27 +53,6 @@ export function FullPage(_ref) {
51
53
  const XlBreakpoint = useMediaQuery(BREAKPOINTS.XL);
52
54
  const showObsBtn = LgBreakpoint;
53
55
  const showVarsBtn = XlBreakpoint;
54
- useEffect(() => {
55
- const updateDimensions = () => {
56
- if (appRef.current) {
57
- // Get the distance from the top of the page to the target element
58
- const rect = appRef.current.getBoundingClientRect();
59
- const distanceFromTop = rect.top + window.scrollY;
60
-
61
- // Calculate the available height for the Cherita app
62
- const availableHeight = window.innerHeight - distanceFromTop;
63
-
64
- // Update the dimensions to fit the viewport minus the navbar height
65
- setAppDimensions({
66
- width: appRef.current.offsetWidth,
67
- height: availableHeight
68
- });
69
- }
70
- };
71
- window.addEventListener("resize", updateDimensions);
72
- updateDimensions();
73
- return () => window.removeEventListener("resize", updateDimensions);
74
- }, []);
75
56
  const {
76
57
  plotControls,
77
58
  varMode,
@@ -108,94 +89,108 @@ export function FullPage(_ref) {
108
89
  showObsBtn,
109
90
  showVarsBtn,
110
91
  showCtrlsBtn: true,
92
+ plotType,
111
93
  setShowObs,
112
94
  setShowVars,
113
- setShowControls
95
+ setShowControls,
96
+ setPlotType
114
97
  };
115
98
  switch (plotType) {
116
99
  case PLOT_TYPES.DOTPLOT:
117
- return /*#__PURE__*/React.createElement(Dotplot, commonProps);
100
+ return /*#__PURE__*/_jsx(Dotplot, _objectSpread({}, commonProps));
118
101
  case PLOT_TYPES.MATRIXPLOT:
119
- return /*#__PURE__*/React.createElement(Matrixplot, commonProps);
102
+ return /*#__PURE__*/_jsx(Matrixplot, _objectSpread({}, commonProps));
120
103
  case PLOT_TYPES.HEATMAP:
121
- return /*#__PURE__*/React.createElement(Heatmap, commonProps);
104
+ return /*#__PURE__*/_jsx(Heatmap, _objectSpread({}, commonProps));
122
105
  case PLOT_TYPES.VIOLINPLOT:
123
- return /*#__PURE__*/React.createElement(Violin, _extends({
106
+ return /*#__PURE__*/_jsx(Violin, _objectSpread({
124
107
  mode: VIOLIN_MODES.MULTIKEY
125
108
  }, commonProps));
126
109
  case PLOT_TYPES.SCATTERPLOT:
127
110
  default:
128
- return /*#__PURE__*/React.createElement(Scatterplot, _extends({}, commonProps, {
111
+ return /*#__PURE__*/_jsx(Scatterplot, _objectSpread(_objectSpread({}, commonProps), {}, {
129
112
  isFullscreen: true
130
113
  }));
131
114
  }
132
115
  }, [plotType, showObsBtn, showVarsBtn]);
133
- return /*#__PURE__*/React.createElement("div", {
134
- ref: appRef,
116
+ return /*#__PURE__*/_jsx("div", {
135
117
  className: "cherita-app",
136
- style: {
137
- height: appDimensions.height
138
- }
139
- }, /*#__PURE__*/React.createElement(DatasetProvider, props, /*#__PURE__*/React.createElement(Container, {
140
- fluid: true,
141
- className: "cherita-app-container",
142
- style: {
143
- height: appDimensions.height
144
- }
145
- }, /*#__PURE__*/React.createElement("div", {
146
- className: "cherita-app-obs modern-scrollbars border-end h-100"
147
- }, /*#__PURE__*/React.createElement(ObsColsList, _extends({}, props, {
148
- showSelectedAsActive: showSelectedAsActive,
149
- showHistograms: varMode === SELECTION_MODES.SINGLE
150
- }))), /*#__PURE__*/React.createElement("div", {
151
- className: "cherita-app-canvas"
152
- }, plot), /*#__PURE__*/React.createElement("div", {
153
- className: "cherita-app-sidebar p-3"
154
- }, /*#__PURE__*/React.createElement(Card, null, /*#__PURE__*/React.createElement(Card.Body, {
155
- className: "d-flex flex-column p-0"
156
- }, /*#__PURE__*/React.createElement("div", {
157
- className: "sidebar-plotselector"
158
- }, /*#__PURE__*/React.createElement(PlotTypeSelector, {
159
- currentType: plotType,
160
- onChange: type => setPlotType(type)
161
- })), plotType === PLOT_TYPES.SCATTERPLOT && isPseudospatial ? /*#__PURE__*/React.createElement("div", {
162
- className: "sidebar-pseudospatial"
163
- }, /*#__PURE__*/React.createElement(Pseudospatial, {
164
- plotType: pseudospatialPlotType,
165
- setPlotType: setpseudospatialPlotType,
166
- setShowControls: setShowPseudospatialControls
167
- })) : /*#__PURE__*/React.createElement(React.Fragment, null), /*#__PURE__*/React.createElement("div", {
168
- className: "sidebar-features modern-scrollbars"
169
- }, /*#__PURE__*/React.createElement(SearchBar, {
170
- searchDiseases: searchDiseases,
171
- searchVar: true
172
- }), /*#__PURE__*/React.createElement(VarNamesList, {
173
- mode: varMode
174
- })))))), /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(Modal, {
175
- show: showModal,
176
- onHide: () => setShowModal(false),
177
- centered: true
178
- }, /*#__PURE__*/React.createElement(Modal.Header, {
179
- closeButton: true
180
- }), /*#__PURE__*/React.createElement(Modal.Body, null)), /*#__PURE__*/React.createElement(OffcanvasObs, _extends({}, props, {
181
- showSelectedAsActive: showSelectedAsActive,
182
- show: showObs,
183
- handleClose: () => setShowObs(false)
184
- })), /*#__PURE__*/React.createElement(OffcanvasVars, {
185
- show: showVars,
186
- handleClose: () => setShowVars(false),
187
- mode: varMode
188
- }), plotControls && /*#__PURE__*/React.createElement(OffcanvasControls, {
189
- show: showControls,
190
- handleClose: () => setShowControls(false),
191
- Controls: plotControls
192
- }), /*#__PURE__*/React.createElement(OffcanvasObsm, {
193
- show: showObsm,
194
- handleClose: () => setShowObsm(false)
195
- }), /*#__PURE__*/React.createElement(OffcanvasControls, {
196
- show: showPseudospatialControls,
197
- handleClose: () => setShowPseudospatialControls(false),
198
- Controls: PseudospatialToolbar,
199
- plotType: pseudospatialPlotType
200
- }))));
118
+ children: /*#__PURE__*/_jsxs(DatasetProvider, _objectSpread(_objectSpread({}, props), {}, {
119
+ children: [/*#__PURE__*/_jsxs(Container, {
120
+ fluid: true,
121
+ className: "cherita-app-container",
122
+ children: [/*#__PURE__*/_jsx("div", {
123
+ className: "cherita-app-obs modern-scrollbars border-end h-100",
124
+ children: /*#__PURE__*/_jsx(ObsColsList, _objectSpread(_objectSpread({}, props), {}, {
125
+ showSelectedAsActive: showSelectedAsActive,
126
+ showHistograms: varMode === SELECTION_MODES.SINGLE,
127
+ showColor: varMode === SELECTION_MODES.SINGLE
128
+ }))
129
+ }), /*#__PURE__*/_jsx("div", {
130
+ className: "cherita-app-canvas",
131
+ children: plot
132
+ }), /*#__PURE__*/_jsx("div", {
133
+ className: "cherita-app-sidebar p-3",
134
+ children: /*#__PURE__*/_jsx(Card, {
135
+ children: /*#__PURE__*/_jsxs(Card.Body, {
136
+ children: [/*#__PURE__*/_jsx("div", {
137
+ className: "plotselector",
138
+ children: /*#__PURE__*/_jsx(PlotTypeSelector, {
139
+ currentType: plotType,
140
+ onChange: type => setPlotType(type)
141
+ })
142
+ }), plotType === PLOT_TYPES.SCATTERPLOT && isPseudospatial ? /*#__PURE__*/_jsx("div", {
143
+ className: "sidebar-pseudospatial",
144
+ children: /*#__PURE__*/_jsx(Pseudospatial, {
145
+ plotType: pseudospatialPlotType,
146
+ setPlotType: setpseudospatialPlotType,
147
+ setShowControls: setShowPseudospatialControls
148
+ })
149
+ }) : /*#__PURE__*/_jsx(_Fragment, {}), /*#__PURE__*/_jsxs("div", {
150
+ className: "sidebar-features",
151
+ children: [/*#__PURE__*/_jsx(SearchBar, {
152
+ searchDiseases: searchDiseases,
153
+ searchVar: true
154
+ }), /*#__PURE__*/_jsx("div", {
155
+ className: "sidebar-features-list",
156
+ children: /*#__PURE__*/_jsx(VarNamesList, {
157
+ mode: varMode
158
+ })
159
+ })]
160
+ })]
161
+ })
162
+ })
163
+ })]
164
+ }), /*#__PURE__*/_jsxs("div", {
165
+ children: [/*#__PURE__*/_jsxs(Modal, {
166
+ show: showModal,
167
+ onHide: () => setShowModal(false),
168
+ centered: true,
169
+ children: [/*#__PURE__*/_jsx(Modal.Header, {
170
+ closeButton: true
171
+ }), /*#__PURE__*/_jsx(Modal.Body, {})]
172
+ }), /*#__PURE__*/_jsx(OffcanvasObs, _objectSpread(_objectSpread({}, props), {}, {
173
+ showSelectedAsActive: showSelectedAsActive,
174
+ show: showObs,
175
+ handleClose: () => setShowObs(false)
176
+ })), /*#__PURE__*/_jsx(OffcanvasVars, {
177
+ show: showVars,
178
+ handleClose: () => setShowVars(false),
179
+ mode: varMode
180
+ }), plotControls && /*#__PURE__*/_jsx(OffcanvasControls, {
181
+ show: showControls,
182
+ handleClose: () => setShowControls(false),
183
+ Controls: plotControls
184
+ }), /*#__PURE__*/_jsx(OffcanvasObsm, {
185
+ show: showObsm,
186
+ handleClose: () => setShowObsm(false)
187
+ }), /*#__PURE__*/_jsx(OffcanvasControls, {
188
+ show: showPseudospatialControls,
189
+ handleClose: () => setShowPseudospatialControls(false),
190
+ Controls: PseudospatialToolbar,
191
+ plotType: pseudospatialPlotType
192
+ })]
193
+ })]
194
+ }))
195
+ });
201
196
  }
@@ -0,0 +1,39 @@
1
+ import { useMediaQuery } from '@mui/material';
2
+ import { Alert } from 'react-bootstrap';
3
+ import { PlotTypeSelector } from './PlotTypeSelector';
4
+ import { BREAKPOINTS, PLOT_TYPES } from '../../constants/constants';
5
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
6
+ export function PlotAlert(_ref) {
7
+ let {
8
+ variant = 'warning',
9
+ plotType = PLOT_TYPES.SCATTERPLOT,
10
+ setPlotType,
11
+ heading,
12
+ children
13
+ } = _ref;
14
+ const XlBreakpoint = useMediaQuery(BREAKPOINTS.XL);
15
+ const showPlotSelector = XlBreakpoint;
16
+ return /*#__PURE__*/_jsxs(_Fragment, {
17
+ children: [showPlotSelector && /*#__PURE__*/_jsx("div", {
18
+ className: "plotselector",
19
+ children: /*#__PURE__*/_jsx(PlotTypeSelector, {
20
+ currentType: plotType,
21
+ onChange: type => {
22
+ if (setPlotType) setPlotType(type);
23
+ }
24
+ })
25
+ }), /*#__PURE__*/_jsx("div", {
26
+ className: "cherita-plot-alert h-100",
27
+ children: /*#__PURE__*/_jsx("div", {
28
+ className: "w-100 h-100 d-flex justify-content-center align-items-center",
29
+ children: /*#__PURE__*/_jsxs(Alert, {
30
+ variant: variant,
31
+ className: "m-0 w-75 w-lg-50 text-center",
32
+ children: [heading && /*#__PURE__*/_jsx(Alert.Heading, {
33
+ children: heading
34
+ }), " ", children]
35
+ })
36
+ })
37
+ })]
38
+ });
39
+ }