@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
@@ -5,7 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.DiseasesSearchResults = DiseasesSearchResults;
7
7
  exports.VarSearchResults = VarSearchResults;
8
- var _react = _interopRequireWildcard(require("react"));
8
+ var _react = require("react");
9
9
  var _freeSolidSvgIcons = require("@fortawesome/free-solid-svg-icons");
10
10
  var _reactFontawesome = require("@fortawesome/react-fontawesome");
11
11
  var _lodash = _interopRequireDefault(require("lodash"));
@@ -13,8 +13,8 @@ var _reactBootstrap = require("react-bootstrap");
13
13
  var _SettingsContext = require("../../context/SettingsContext");
14
14
  var _search = require("../../utils/search");
15
15
  var _VirtualizedList = require("../../utils/VirtualizedList");
16
+ var _jsxRuntime = require("react/jsx-runtime");
16
17
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
17
- 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); }
18
18
  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; }
19
19
  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; }
20
20
  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; }
@@ -64,47 +64,59 @@ function VarSearchResults(_ref) {
64
64
  }
65
65
  }, [fetchedData, isPending, serverError, setResultsLength]);
66
66
  const getDataAtIndex = index => deferredData[index];
67
- const ItemComponent = item => /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", {
68
- className: "virtualized-list-wrapper"
69
- }, /*#__PURE__*/_react.default.createElement(_reactBootstrap.ListGroup.Item, {
70
- key: item,
71
- onClick: () => {
72
- setSelectedResult(item);
73
- },
74
- active: (selectedResult === null || selectedResult === void 0 ? void 0 : selectedResult.index) === item.index
75
- }, /*#__PURE__*/_react.default.createElement("div", {
76
- className: "d-flex justify-content-between align-items-center w-100"
77
- }, /*#__PURE__*/_react.default.createElement("div", null, item.name), /*#__PURE__*/_react.default.createElement("div", {
78
- className: "d-flex align-items-center gap-1"
79
- }, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Button, {
80
- type: "button",
81
- className: "m-0 p-0 px-1",
82
- variant: "outline-secondary",
83
- title: "Add to list",
84
- disabled: isStale,
85
- onClick: () => {
86
- handleSelect(dispatch, item);
87
- }
88
- }, /*#__PURE__*/_react.default.createElement(_reactFontawesome.FontAwesomeIcon, {
89
- icon: _freeSolidSvgIcons.faPlus
90
- })))))));
91
- return /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement("div", {
92
- className: "search-results"
93
- }, /*#__PURE__*/_react.default.createElement(_reactBootstrap.ListGroup, {
94
- variant: "flush",
95
- className: "cherita-list"
96
- }, deferredData !== null && deferredData !== void 0 && deferredData.length ? /*#__PURE__*/_react.default.createElement(_VirtualizedList.VirtualizedList, {
97
- getDataAtIndex: getDataAtIndex,
98
- count: deferredData.length,
99
- ItemComponent: ItemComponent,
100
- overscan: 500,
101
- estimateSize: 42,
102
- maxHeight: "70vh"
103
- }) : /*#__PURE__*/_react.default.createElement(_reactBootstrap.ListGroup.Item, {
104
- key: "empty",
105
- as: "button",
106
- disabled: true
107
- }, !text.length ? "Search features" : !serverError ? isStale || isPending ? "Loading..." : "No items found" : "Failed to fetch data"))));
67
+ const ItemComponent = item => /*#__PURE__*/(0, _jsxRuntime.jsx)(_jsxRuntime.Fragment, {
68
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
69
+ className: "virtualized-list-wrapper",
70
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.ListGroup.Item, {
71
+ onClick: () => {
72
+ setSelectedResult(item);
73
+ },
74
+ active: (selectedResult === null || selectedResult === void 0 ? void 0 : selectedResult.index) === item.index,
75
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
76
+ className: "d-flex justify-content-between align-items-center w-100",
77
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
78
+ children: item.name
79
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
80
+ className: "d-flex align-items-center gap-1",
81
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Button, {
82
+ type: "button",
83
+ className: "m-0 p-0 px-1",
84
+ variant: "outline-secondary",
85
+ title: "Add to list",
86
+ disabled: isStale,
87
+ onClick: () => {
88
+ handleSelect(dispatch, item);
89
+ },
90
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactFontawesome.FontAwesomeIcon, {
91
+ icon: _freeSolidSvgIcons.faPlus
92
+ })
93
+ })
94
+ })]
95
+ })
96
+ }, item)
97
+ })
98
+ });
99
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
100
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
101
+ className: "search-results",
102
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.ListGroup, {
103
+ variant: "flush",
104
+ className: "cherita-list",
105
+ children: deferredData !== null && deferredData !== void 0 && deferredData.length ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_VirtualizedList.VirtualizedList, {
106
+ getDataAtIndex: getDataAtIndex,
107
+ count: deferredData.length,
108
+ ItemComponent: ItemComponent,
109
+ overscan: 500,
110
+ estimateSize: () => 42,
111
+ maxHeight: "70vh"
112
+ }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.ListGroup.Item, {
113
+ as: "button",
114
+ disabled: true,
115
+ children: !text.length ? 'Search features' : !serverError ? isStale || isPending ? 'Loading...' : 'No items found' : 'Failed to fetch data'
116
+ }, "empty")
117
+ })
118
+ })
119
+ });
108
120
  }
109
121
  function DiseasesSearchResults(_ref2) {
110
122
  let {
@@ -148,32 +160,42 @@ function DiseasesSearchResults(_ref2) {
148
160
  }
149
161
  }, [fetchedData, isPending, serverError, setResultsLength]);
150
162
  const getDataAtIndex = index => deferredData[index];
151
- const ItemComponent = item => /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", {
152
- className: "virtualized-list-wrapper"
153
- }, /*#__PURE__*/_react.default.createElement(_reactBootstrap.ListGroup.Item, {
154
- key: item.name,
155
- onClick: () => {
156
- setSelectedResult(item);
157
- },
158
- active: (selectedResult === null || selectedResult === void 0 ? void 0 : selectedResult.id) === item.id
159
- }, /*#__PURE__*/_react.default.createElement("div", {
160
- className: "d-flex justify-content-between align-items-center w-100"
161
- }, /*#__PURE__*/_react.default.createElement("div", null, item.disease_name)))));
162
- return /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement("div", {
163
- className: "search-results"
164
- }, /*#__PURE__*/_react.default.createElement(_reactBootstrap.ListGroup, {
165
- variant: "flush",
166
- className: "cherita-list"
167
- }, deferredData !== null && deferredData !== void 0 && deferredData.length ? /*#__PURE__*/_react.default.createElement(_VirtualizedList.VirtualizedList, {
168
- getDataAtIndex: getDataAtIndex,
169
- count: deferredData.length,
170
- ItemComponent: ItemComponent,
171
- overscan: 250,
172
- estimateSize: 32,
173
- maxHeight: "70vh"
174
- }) : /*#__PURE__*/_react.default.createElement(_reactBootstrap.ListGroup.Item, {
175
- key: "empty",
176
- as: "button",
177
- disabled: true
178
- }, !text.length ? "Search diseases" : !serverError ? isStale || isPending ? "Loading..." : "No items found" : "Failed to fetch data"))));
163
+ const ItemComponent = item => /*#__PURE__*/(0, _jsxRuntime.jsx)(_jsxRuntime.Fragment, {
164
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
165
+ className: "virtualized-list-wrapper",
166
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.ListGroup.Item, {
167
+ onClick: () => {
168
+ setSelectedResult(item);
169
+ },
170
+ active: (selectedResult === null || selectedResult === void 0 ? void 0 : selectedResult.id) === item.id,
171
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
172
+ className: "d-flex justify-content-between align-items-center w-100",
173
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
174
+ children: item.disease_name
175
+ })
176
+ })
177
+ }, item.name)
178
+ })
179
+ });
180
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
181
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
182
+ className: "search-results",
183
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.ListGroup, {
184
+ variant: "flush",
185
+ className: "cherita-list",
186
+ children: deferredData !== null && deferredData !== void 0 && deferredData.length ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_VirtualizedList.VirtualizedList, {
187
+ getDataAtIndex: getDataAtIndex,
188
+ count: deferredData.length,
189
+ ItemComponent: ItemComponent,
190
+ overscan: 250,
191
+ estimateSize: () => 32,
192
+ maxHeight: "70vh"
193
+ }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.ListGroup.Item, {
194
+ as: "button",
195
+ disabled: true,
196
+ children: !text.length ? 'Search diseases' : !serverError ? isStale || isPending ? 'Loading...' : 'No items found' : 'Failed to fetch data'
197
+ }, "empty")
198
+ })
199
+ })
200
+ });
179
201
  }
@@ -0,0 +1,111 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.VarPlotlyToolbar = exports.Toolbar = exports.ObsPlotlyToolbar = exports.ControlsPlotlyToolbar = void 0;
7
+ var _freeSolidSvgIcons = require("@fortawesome/free-solid-svg-icons");
8
+ var _reactFontawesome = require("@fortawesome/react-fontawesome");
9
+ var _reactBootstrap = require("react-bootstrap");
10
+ var _jsxRuntime = require("react/jsx-runtime");
11
+ const Toolbar = _ref => {
12
+ let {
13
+ showObsBtn = true,
14
+ showVarsBtn = true,
15
+ showCtrlsBtn = true,
16
+ setShowObs,
17
+ setShowVars,
18
+ setShowControls
19
+ } = _ref;
20
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Navbar, {
21
+ expand: "md",
22
+ bg: "primary",
23
+ variant: "dark",
24
+ className: "cherita-navbar",
25
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactBootstrap.Container, {
26
+ fluid: true,
27
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Navbar.Toggle, {
28
+ "aria-controls": "navbarScroll"
29
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Navbar.Collapse, {
30
+ id: "navbarScroll",
31
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactBootstrap.Nav, {
32
+ navbarScroll: true,
33
+ children: [showObsBtn && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Nav.Item, {
34
+ className: "me-2",
35
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactBootstrap.Nav.Link, {
36
+ onClick: () => setShowObs(true),
37
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactFontawesome.FontAwesomeIcon, {
38
+ icon: _freeSolidSvgIcons.faList,
39
+ className: "me-2"
40
+ }), "Explore Categories"]
41
+ })
42
+ }), showVarsBtn && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Nav.Item, {
43
+ className: "me-2",
44
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactBootstrap.Nav.Link, {
45
+ onClick: () => setShowVars(true),
46
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactFontawesome.FontAwesomeIcon, {
47
+ icon: _freeSolidSvgIcons.faSearch,
48
+ className: "me-2"
49
+ }), "Search Genes"]
50
+ })
51
+ }), showCtrlsBtn && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Nav.Item, {
52
+ className: "me-2",
53
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactBootstrap.Nav.Link, {
54
+ onClick: () => setShowControls(true),
55
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactFontawesome.FontAwesomeIcon, {
56
+ icon: _freeSolidSvgIcons.faSliders,
57
+ className: "me-2"
58
+ }), "Controls"]
59
+ })
60
+ })]
61
+ })
62
+ })]
63
+ })
64
+ });
65
+ };
66
+ exports.Toolbar = Toolbar;
67
+ const ObsPlotlyToolbar = _ref2 => {
68
+ let {
69
+ onClick
70
+ } = _ref2;
71
+ return {
72
+ name: 'Categories',
73
+ icon: {
74
+ width: 512,
75
+ height: 512,
76
+ path: _freeSolidSvgIcons.faList.icon[4]
77
+ },
78
+ click: onClick
79
+ };
80
+ };
81
+ exports.ObsPlotlyToolbar = ObsPlotlyToolbar;
82
+ const VarPlotlyToolbar = _ref3 => {
83
+ let {
84
+ onClick
85
+ } = _ref3;
86
+ return {
87
+ name: 'Features',
88
+ icon: {
89
+ width: 512,
90
+ height: 512,
91
+ path: _freeSolidSvgIcons.faSearch.icon[4]
92
+ },
93
+ click: onClick
94
+ };
95
+ };
96
+ exports.VarPlotlyToolbar = VarPlotlyToolbar;
97
+ const ControlsPlotlyToolbar = _ref4 => {
98
+ let {
99
+ onClick
100
+ } = _ref4;
101
+ return {
102
+ name: 'Controls',
103
+ icon: {
104
+ width: 512,
105
+ height: 512,
106
+ path: _freeSolidSvgIcons.faSliders.icon[4]
107
+ },
108
+ click: onClick
109
+ };
110
+ };
111
+ exports.ControlsPlotlyToolbar = ControlsPlotlyToolbar;
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.SelectionItem = SelectionItem;
7
7
  exports.VarDiseaseInfo = VarDiseaseInfo;
8
8
  exports.VarItem = VarItem;
9
- var _react = _interopRequireWildcard(require("react"));
9
+ var _react = require("react");
10
10
  var _freeSolidSvgIcons = require("@fortawesome/free-solid-svg-icons");
11
11
  var _reactFontawesome = require("@fortawesome/react-fontawesome");
12
12
  var _iconsMaterial = require("@mui/icons-material");
@@ -18,9 +18,8 @@ var _FilterContext = require("../../context/FilterContext");
18
18
  var _SettingsContext = require("../../context/SettingsContext");
19
19
  var _Histogram = require("../../utils/Histogram");
20
20
  var _requests = require("../../utils/requests");
21
+ var _jsxRuntime = require("react/jsx-runtime");
21
22
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
22
- 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); }
23
- 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); }
24
23
  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; }
25
24
  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; }
26
25
  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; }
@@ -30,7 +29,7 @@ function VarHistogram(_ref) {
30
29
  let {
31
30
  item
32
31
  } = _ref;
33
- const ENDPOINT = "var/histograms";
32
+ const ENDPOINT = 'var/histograms';
34
33
  const dataset = (0, _DatasetContext.useDataset)();
35
34
  const settings = (0, _SettingsContext.useSettings)();
36
35
  const {
@@ -58,42 +57,61 @@ function VarHistogram(_ref) {
58
57
  } = (0, _requests.useDebouncedFetch)(ENDPOINT, params, {
59
58
  refetchOnMount: false
60
59
  });
61
- return !serverError && /*#__PURE__*/_react.default.createElement(_Histogram.Histogram, {
60
+ return !serverError && /*#__PURE__*/(0, _jsxRuntime.jsx)(_Histogram.Histogram, {
62
61
  data: fetchedData,
63
62
  isPending: isPending,
64
63
  altColor: isSliced
65
64
  });
66
65
  }
67
66
  function VarDiseaseInfoItem(item) {
68
- return /*#__PURE__*/_react.default.createElement(_reactBootstrap.ListGroup.Item, {
69
- key: item.disease_id,
70
- className: "feature-disease-info"
71
- }, /*#__PURE__*/_react.default.createElement("button", {
72
- type: "button",
73
- className: "btn btn-link disease-link"
74
- }, item.disease_name), /*#__PURE__*/_react.default.createElement(_reactBootstrap.Table, {
75
- striped: true,
76
- size: "sm",
77
- responsive: true
78
- }, /*#__PURE__*/_react.default.createElement("tbody", null, /*#__PURE__*/_react.default.createElement("tr", null, /*#__PURE__*/_react.default.createElement("td", null, "Confidence"), /*#__PURE__*/_react.default.createElement("td", null, item.confidence || "unknown")), /*#__PURE__*/_react.default.createElement("tr", null, /*#__PURE__*/_react.default.createElement("td", null, "Organ", item.organs.length > 1 ? "s" : ""), /*#__PURE__*/_react.default.createElement("td", null, item.organs.map(o => o.name).join(", "))), !_lodash.default.isEmpty(item.metadata) && _lodash.default.map(item.metadata, (value, key) => {
79
- if (value !== null && value !== undefined) {
80
- return /*#__PURE__*/_react.default.createElement("tr", {
81
- key: key
82
- }, /*#__PURE__*/_react.default.createElement("td", null, _lodash.default.upperFirst(key)), /*#__PURE__*/_react.default.createElement("td", null, value));
83
- }
84
- }))));
67
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactBootstrap.ListGroup.Item, {
68
+ className: "feature-disease-info",
69
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("button", {
70
+ type: "button",
71
+ className: "btn btn-link disease-link",
72
+ children: item.disease_name
73
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Table, {
74
+ striped: true,
75
+ size: "sm",
76
+ responsive: true,
77
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)("tbody", {
78
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)("tr", {
79
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("td", {
80
+ children: "Confidence"
81
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("td", {
82
+ children: item.confidence || 'unknown'
83
+ })]
84
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)("tr", {
85
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)("td", {
86
+ children: ["Organ", item.organs.length > 1 ? 's' : '']
87
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("td", {
88
+ children: item.organs.map(o => o.name).join(', ')
89
+ })]
90
+ }), !_lodash.default.isEmpty(item.metadata) && _lodash.default.map(item.metadata, (value, key) => {
91
+ if (value !== null && value !== undefined) {
92
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)("tr", {
93
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("td", {
94
+ children: _lodash.default.upperFirst(key)
95
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("td", {
96
+ children: value
97
+ })]
98
+ }, key);
99
+ }
100
+ })]
101
+ })
102
+ })]
103
+ }, item.disease_id);
85
104
  }
86
105
  function VarDiseaseInfo(_ref2) {
87
106
  let {
88
107
  data
89
108
  } = _ref2;
90
- return /*#__PURE__*/_react.default.createElement(_reactBootstrap.ListGroup, {
91
- className: "feature-disease-info-list"
92
- }, data.map(item => {
93
- return /*#__PURE__*/_react.default.createElement(VarDiseaseInfoItem, _extends({
94
- key: item.disease_id
95
- }, item));
96
- }));
109
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.ListGroup, {
110
+ className: "feature-disease-info-list",
111
+ children: data.map(item => {
112
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(VarDiseaseInfoItem, _objectSpread({}, item), item.disease_id);
113
+ })
114
+ });
97
115
  }
98
116
  function SelectionItem(_ref3) {
99
117
  let {
@@ -105,7 +123,7 @@ function SelectionItem(_ref3) {
105
123
  showRemove = true,
106
124
  isMultiple = false
107
125
  } = _ref3;
108
- const ENDPOINT = "disease/gene";
126
+ const ENDPOINT = 'disease/gene';
109
127
  const [openInfo, setOpenInfo] = (0, _react.useState)(false);
110
128
  const dataset = (0, _DatasetContext.useDataset)();
111
129
  const params = {
@@ -122,53 +140,83 @@ function SelectionItem(_ref3) {
122
140
  enabled: !!dataset.diseaseDatasets.length
123
141
  });
124
142
  const hasDiseaseInfo = !isPending && !serverError && !!(fetchedData !== null && fetchedData !== void 0 && fetchedData.length);
125
- return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", {
126
- className: "d-flex justify-content-between ".concat(hasDiseaseInfo ? "cursor-pointer" : ""),
127
- onClick: () => {
128
- setOpenInfo(o => !o);
129
- }
130
- }, /*#__PURE__*/_react.default.createElement("div", {
131
- className: "d-flex justify-content-between align-items-center w-100"
132
- }, /*#__PURE__*/_react.default.createElement("div", null, item.name), /*#__PURE__*/_react.default.createElement("div", {
133
- className: "d-flex align-items-center gap-1"
134
- }, hasDiseaseInfo && /*#__PURE__*/_react.default.createElement(_iconsMaterial.MoreVert, null), /*#__PURE__*/_react.default.createElement(VarHistogram, {
135
- item: item
136
- }), showSetColorEncoding && /*#__PURE__*/_react.default.createElement(_reactBootstrap.Button, {
137
- type: "button",
138
- key: item.matrix_index,
139
- variant: isActive ? "primary" : isNotInData ? "outline-secondary" : "outline-primary",
140
- className: "m-0 p-0 px-1",
141
- onClick: e => {
142
- e.stopPropagation();
143
- selectVar();
144
- },
145
- disabled: isNotInData,
146
- title: isNotInData ? "Not present in data" : "Set as color encoding"
147
- }, /*#__PURE__*/_react.default.createElement(_reactFontawesome.FontAwesomeIcon, {
148
- icon: _freeSolidSvgIcons.faDroplet
149
- }), isMultiple && /*#__PURE__*/_react.default.createElement(_reactFontawesome.FontAwesomeIcon, {
150
- icon: _freeSolidSvgIcons.faPlus,
151
- size: "xs",
152
- className: "ps-xs-1"
153
- })), showRemove && /*#__PURE__*/_react.default.createElement(_reactBootstrap.Button, {
154
- type: "button",
155
- className: "m-0 p-0 px-1",
156
- variant: "outline-secondary",
157
- title: "Remove from list",
158
- onClick: e => {
159
- e.stopPropagation();
160
- removeVar();
161
- }
162
- }, /*#__PURE__*/_react.default.createElement(_reactFontawesome.FontAwesomeIcon, {
163
- icon: _freeSolidSvgIcons.faTrash
164
- }))))), hasDiseaseInfo && /*#__PURE__*/_react.default.createElement(_reactBootstrap.Collapse, {
165
- in: openInfo
166
- }, /*#__PURE__*/_react.default.createElement("div", {
167
- className: "mt-2 var-disease-info-collapse"
168
- }, /*#__PURE__*/_react.default.createElement(VarDiseaseInfo, {
169
- data: fetchedData
170
- }))));
143
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
144
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
145
+ className: hasDiseaseInfo ? 'cursor-pointer' : '',
146
+ onClick: () => {
147
+ setOpenInfo(o => !o);
148
+ },
149
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
150
+ className: "d-flex align-items-center",
151
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
152
+ className: "var-item-name",
153
+ title: item.name,
154
+ children: item.name
155
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
156
+ className: "ms-auto d-flex align-items-center gap-1",
157
+ children: [hasDiseaseInfo && /*#__PURE__*/(0, _jsxRuntime.jsx)(_iconsMaterial.MoreVert, {}), /*#__PURE__*/(0, _jsxRuntime.jsx)(VarHistogram, {
158
+ item: item
159
+ }), showSetColorEncoding && /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactBootstrap.Button, {
160
+ type: "button",
161
+ variant: isActive ? 'primary' : isNotInData ? 'outline-secondary' : 'outline-primary',
162
+ className: "m-0 p-0 px-1",
163
+ onClick: e => {
164
+ e.stopPropagation();
165
+ selectVar();
166
+ },
167
+ disabled: isNotInData,
168
+ title: isNotInData ? 'Not present in data' : 'Set as color encoding',
169
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactFontawesome.FontAwesomeIcon, {
170
+ icon: _freeSolidSvgIcons.faDroplet
171
+ }), isMultiple && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactFontawesome.FontAwesomeIcon, {
172
+ icon: _freeSolidSvgIcons.faPlus,
173
+ size: "xs",
174
+ className: "ps-xs-1"
175
+ })]
176
+ }, item.matrix_index), showRemove && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Button, {
177
+ type: "button",
178
+ className: "m-0 p-0 px-1",
179
+ variant: "outline-secondary",
180
+ title: "Remove from list",
181
+ onClick: e => {
182
+ e.stopPropagation();
183
+ removeVar();
184
+ },
185
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactFontawesome.FontAwesomeIcon, {
186
+ icon: _freeSolidSvgIcons.faTrash
187
+ })
188
+ })]
189
+ })]
190
+ })
191
+ }), hasDiseaseInfo && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Collapse, {
192
+ in: openInfo,
193
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
194
+ className: "mt-2 var-disease-info-collapse",
195
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(VarDiseaseInfo, {
196
+ data: fetchedData
197
+ })
198
+ })
199
+ })]
200
+ });
171
201
  }
202
+ const select = (dispatch, mode, item) => {
203
+ if (mode === _constants.SELECTION_MODES.SINGLE) {
204
+ dispatch({
205
+ type: 'select.var',
206
+ var: item
207
+ });
208
+ } else if (mode === _constants.SELECTION_MODES.MULTIPLE) {
209
+ dispatch({
210
+ type: 'select.multivar',
211
+ var: item
212
+ });
213
+ }
214
+ dispatch({
215
+ type: 'set.colorEncoding',
216
+ value: _constants.COLOR_ENCODINGS.VAR
217
+ });
218
+ };
219
+ const debounceSelect = _lodash.default.debounce(select, 200);
172
220
  function VarItem(_ref4) {
173
221
  let {
174
222
  item,
@@ -177,42 +225,22 @@ function VarItem(_ref4) {
177
225
  } = _ref4;
178
226
  const settings = (0, _SettingsContext.useSettings)();
179
227
  const dispatch = (0, _SettingsContext.useSettingsDispatch)();
180
- const selectVar = () => {
181
- if (mode === _constants.SELECTION_MODES.SINGLE) {
182
- dispatch({
183
- type: "select.var",
184
- var: item
185
- });
186
- dispatch({
187
- type: "set.colorEncoding",
188
- value: _constants.COLOR_ENCODINGS.VAR
189
- });
190
- } else if (mode === _constants.SELECTION_MODES.MULTIPLE) {
191
- dispatch({
192
- type: "select.multivar",
193
- var: item
194
- });
195
- dispatch({
196
- type: "set.colorEncoding",
197
- value: _constants.COLOR_ENCODINGS.VAR
198
- });
199
- }
200
- };
228
+ const selectVar = () => debounceSelect(dispatch, mode, item);
201
229
  const removeVar = () => {
202
230
  dispatch({
203
- type: "remove.var",
231
+ type: 'remove.var',
204
232
  var: item
205
233
  });
206
234
  if (mode === _constants.SELECTION_MODES.SINGLE) {
207
235
  if (active === item.matrix_index) {
208
236
  dispatch({
209
- type: "reset.var"
237
+ type: 'reset.var'
210
238
  });
211
239
  }
212
240
  } else if (mode === _constants.SELECTION_MODES.MULTIPLE) {
213
241
  if (active.includes(item.matrix_index)) {
214
242
  dispatch({
215
- type: "deselect.multivar",
243
+ type: 'deselect.multivar',
216
244
  var: item
217
245
  });
218
246
  }
@@ -220,19 +248,19 @@ function VarItem(_ref4) {
220
248
  };
221
249
  const toggleVar = () => {
222
250
  dispatch({
223
- type: "toggle.multivar",
251
+ type: 'toggle.multivar',
224
252
  var: item
225
253
  });
226
254
  };
227
255
  if (item && mode === _constants.SELECTION_MODES.SINGLE) {
228
- return /*#__PURE__*/_react.default.createElement(SelectionItem, {
256
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(SelectionItem, {
229
257
  item: item,
230
258
  isActive: settings.colorEncoding === _constants.COLOR_ENCODINGS.VAR && active === item.matrix_index,
231
259
  selectVar: selectVar,
232
260
  removeVar: removeVar
233
261
  });
234
262
  } else if (mode === _constants.SELECTION_MODES.MULTIPLE) {
235
- return /*#__PURE__*/_react.default.createElement(SelectionItem, {
263
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(SelectionItem, {
236
264
  item: item,
237
265
  isActive: item.matrix_index !== -1 && _lodash.default.includes(active, item.matrix_index),
238
266
  selectVar: toggleVar,