@haniffalab/cherita-react 1.3.0-dev.2025-06-06.f1eddad0 → 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 (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 +21 -10
  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
@@ -0,0 +1,144 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = ScatterplotIcon;
7
+ var _jsxRuntime = require("react/jsx-runtime");
8
+ const _excluded = ["size", "colour"];
9
+ 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; }
10
+ 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; }
11
+ 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; }
12
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
13
+ 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); }
14
+ 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; }
15
+ 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; }
16
+ function ScatterplotIcon(_ref) {
17
+ let {
18
+ size = 40,
19
+ colour = '#000'
20
+ } = _ref,
21
+ props = _objectWithoutProperties(_ref, _excluded);
22
+ // Points with cluster assignments
23
+ const points = [
24
+ // Cluster 0
25
+ {
26
+ x: 15.2,
27
+ y: 35.9,
28
+ cluster: 0
29
+ }, {
30
+ x: 10.0,
31
+ y: 38.0,
32
+ cluster: 0
33
+ }, {
34
+ x: 12.3,
35
+ y: 40.7,
36
+ cluster: 0
37
+ }, {
38
+ x: 15.7,
39
+ y: 39.9,
40
+ cluster: 0
41
+ }, {
42
+ x: 8.1,
43
+ y: 42.2,
44
+ cluster: 0
45
+ }, {
46
+ x: 10.8,
47
+ y: 44.5,
48
+ cluster: 0
49
+ }, {
50
+ x: 14.3,
51
+ y: 44.6,
52
+ cluster: 0
53
+ }, {
54
+ x: 7.4,
55
+ y: 46.7,
56
+ cluster: 0
57
+ }, {
58
+ x: 11.1,
59
+ y: 48.8,
60
+ cluster: 0
61
+ },
62
+ // Cluster 1
63
+ {
64
+ x: 29.4,
65
+ y: 37.0,
66
+ cluster: 1
67
+ }, {
68
+ x: 26.1,
69
+ y: 40.2,
70
+ cluster: 1
71
+ }, {
72
+ x: 29.8,
73
+ y: 42.0,
74
+ cluster: 1
75
+ }, {
76
+ x: 33.0,
77
+ y: 39.5,
78
+ cluster: 1
79
+ }, {
80
+ x: 34.9,
81
+ y: 43.6,
82
+ cluster: 1
83
+ }, {
84
+ x: 31.5,
85
+ y: 46.2,
86
+ cluster: 1
87
+ },
88
+ // Cluster 2
89
+ {
90
+ x: 21.6,
91
+ y: 53.1,
92
+ cluster: 2
93
+ }, {
94
+ x: 25.3,
95
+ y: 53.9,
96
+ cluster: 2
97
+ }, {
98
+ x: 25.8,
99
+ y: 57.9,
100
+ cluster: 2
101
+ }, {
102
+ x: 22.1,
103
+ y: 57.4,
104
+ cluster: 2
105
+ }, {
106
+ x: 18.4,
107
+ y: 56.0,
108
+ cluster: 2
109
+ }, {
110
+ x: 22.5,
111
+ y: 61.7,
112
+ cluster: 2
113
+ }];
114
+ const radius = 1.8;
115
+ const opacity = 1.0; // uniform expression
116
+
117
+ // Compute viewBox dynamically
118
+ const xs = points.map(p => p.x);
119
+ const ys = points.map(p => p.y);
120
+ const minX = Math.min(...xs) - radius;
121
+ const minY = Math.min(...ys) - radius;
122
+ const maxX = Math.max(...xs) + radius;
123
+ const maxY = Math.max(...ys) + radius;
124
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)("svg", _objectSpread(_objectSpread({
125
+ width: size,
126
+ height: size,
127
+ viewBox: "".concat(minX, " ").concat(minY, " ").concat(maxX - minX, " ").concat(maxY - minY),
128
+ xmlns: "http://www.w3.org/2000/svg"
129
+ }, props), {}, {
130
+ children: points.map((_ref2, i) => {
131
+ let {
132
+ x,
133
+ y
134
+ } = _ref2;
135
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)("circle", {
136
+ cx: x,
137
+ cy: y,
138
+ r: radius,
139
+ fill: colour,
140
+ opacity: opacity
141
+ }, i);
142
+ })
143
+ }));
144
+ }
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = ViolinPlotIcon;
7
+ var _jsxRuntime = require("react/jsx-runtime");
8
+ const _excluded = ["size", "colour"];
9
+ 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; }
10
+ 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; }
11
+ 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; }
12
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
13
+ 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); }
14
+ 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; }
15
+ 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; }
16
+ function ViolinPlotIcon(_ref) {
17
+ let {
18
+ size = 40,
19
+ colour = '#000'
20
+ } = _ref,
21
+ props = _objectWithoutProperties(_ref, _excluded);
22
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)("svg", _objectSpread(_objectSpread({
23
+ viewBox: "0 0 37 40",
24
+ width: size,
25
+ height: size,
26
+ xmlns: "http://www.w3.org/2000/svg"
27
+ }, props), {}, {
28
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)("g", {
29
+ fill: colour,
30
+ stroke: colour,
31
+ strokeWidth: "0.5",
32
+ transform: "translate(-12 -8)",
33
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("path", {
34
+ d: "M19.9971,24.5 A6.3078,6.3078 0 0 0 18.5732,20.8389 7.1479,7.1479 0 0 1 16.9971,16.5 V16.0029 H16.0029 V16.5 a7.1479,7.1479 0 0 1 -1.5761,4.3389 6.3078,6.3078 0 0 0 -1.4239,3.6611 12.4967,12.4967 0 0 1 -0.4853,3.38 13.5076,13.5076 0 0 0 -0.5147,3.62 6.3078,6.3078 0 0 0 1.4239,3.6611 7.1479,7.1479 0 0 1 1.5761,4.3389 19.2486,19.2486 0 0 0 0.5664,4.7246 13.6883,13.6883 0 0 1 0.4336,3.2754 v0.4971 h0.9942 V47.5 A13.6883,13.6883 0 0 1 17.4307,44.2246 19.2486,19.2486 0 0 0 17.9971,39.5 7.1479,7.1479 0 0 1 19.5732,35.1611 6.3078,6.3078 0 0 0 20.9971,31.5 13.5076,13.5076 0 0 0 20.4824,27.88 12.4967,12.4967 0 0 1 19.9971,24.5 Z"
35
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("path", {
36
+ d: "M34.6436,12.6963 C32.8506,11.5537 30.9971,10.3711 30.9971,8.5 V8.0029 H30.0029 V8.5 c0,1.8711 -1.8535,3.0537 -3.6465,4.1963 -1.7246,1.1006 -3.3535,2.1387 -3.3535,3.8037 0,1.6152 1.2188,2.7031 2.3975,3.7549 1.2793,1.1426 2.6025,2.3242 2.6025,4.2451 a18.1508,18.1508 0 0 1 -0.542,4.5068 14.5,14.5 0 0 0 -0.458,3.4932 6.038,6.038 0 0 0 1.6,3.7979 5.179,5.179 0 0 1 1.4,3.2021 v0.4971 h0.9942 V39.5 a5.179,5.179 0 0 1 1.4,-3.2021 6.038,6.038 0 0 0 1.6,-3.7979 14.5,14.5 0 0 0 -0.458,-3.4932 18.1508,18.1508 0 0 1 -0.542,-4.5068 c0,-1.9209 1.3232,-3.1025 2.6025,-4.2451 1.1787,-1.0518 2.3975,-2.14 2.3975,-3.7549 0,-1.665 -1.6289,-2.7031 -3.3535,-3.8037 z"
37
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("path", {
38
+ d: "M47.3975,35.7021 A5.179,5.179 0 0 1 45.9975,32.5 14.5,14.5 0 0 0 45.5395,29.0068 18.1508,18.1508 0 0 1 44.9975,24.5 V24.0029 H44.0033 V24.5 a18.1508,18.1508 0 0 1 -0.542,4.5068 14.5,14.5 0 0 0 -0.458,3.4932 5.179,5.179 0 0 1 -1.4,3.2021 6.038,6.038 0 0 0 -1.6,3.7979 c0,1.582 0.9717,2.667 1.9121,3.7158 1.0264,1.1455 2.0879,2.3311 2.0879,4.2842 v0.4971 h0.9942 V47.5 c0,-1.9531 1.0615,-3.1387 2.0879,-4.2842 0.94,-1.0488 1.9121,-2.1338 1.9121,-3.7158 a6.038,6.038 0 0 0 -1.6,-3.7979 z"
39
+ })]
40
+ })
41
+ }));
42
+ }
@@ -4,7 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.Matrixplot = Matrixplot;
7
- var _react = _interopRequireWildcard(require("react"));
7
+ var _react = require("react");
8
8
  var _lodash = _interopRequireDefault(require("lodash"));
9
9
  var _reactBootstrap = require("react-bootstrap");
10
10
  var _reactPlotly = _interopRequireDefault(require("react-plotly.js"));
@@ -14,25 +14,28 @@ var _FilterContext = require("../../context/FilterContext");
14
14
  var _SettingsContext = require("../../context/SettingsContext");
15
15
  var _LoadingIndicators = require("../../utils/LoadingIndicators");
16
16
  var _requests = require("../../utils/requests");
17
+ var _Resolver = require("../../utils/Resolver");
18
+ var _PlotAlert = require("../full-page/PlotAlert");
17
19
  var _Toolbar = require("../toolbar/Toolbar");
20
+ var _jsxRuntime = require("react/jsx-runtime");
18
21
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
19
- 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); }
20
22
  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; }
21
23
  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; }
22
24
  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; }
23
25
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
24
26
  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); }
25
27
  function Matrixplot(_ref) {
26
- var _settings$selectedObs, _settings$selectedObs2, _settings$selectedObs3;
27
28
  let {
28
29
  showObsBtn = false,
29
30
  showVarsBtn = false,
30
31
  showCtrlsBtn = false,
31
32
  setShowObs,
32
33
  setShowVars,
33
- setShowControls
34
+ setShowControls,
35
+ plotType,
36
+ setPlotType
34
37
  } = _ref;
35
- const ENDPOINT = "matrixplot";
38
+ const ENDPOINT = 'matrixplot';
36
39
  const dataset = (0, _DatasetContext.useDataset)();
37
40
  const settings = (0, _SettingsContext.useSettings)();
38
41
  const {
@@ -43,46 +46,27 @@ function Matrixplot(_ref) {
43
46
  const [data, setData] = (0, _react.useState)([]);
44
47
  const [layout, setLayout] = (0, _react.useState)({});
45
48
  const [hasSelections, setHasSelections] = (0, _react.useState)(false);
46
- const [params, setParams] = (0, _react.useState)({
49
+ const selectedObs = (0, _Resolver.useSelectedObs)();
50
+ const selectedMultiVar = (0, _Resolver.useSelectedMultiVar)();
51
+ const params = (0, _react.useMemo)(() => ({
47
52
  url: dataset.url,
48
- obsCol: settings.selectedObs,
49
- obsValues: !((_settings$selectedObs = settings.selectedObs) !== null && _settings$selectedObs !== void 0 && _settings$selectedObs.omit.length) ? null : _lodash.default.difference(_lodash.default.values((_settings$selectedObs2 = settings.selectedObs) === null || _settings$selectedObs2 === void 0 ? void 0 : _settings$selectedObs2.codes), (_settings$selectedObs3 = settings.selectedObs) === null || _settings$selectedObs3 === void 0 ? void 0 : _settings$selectedObs3.omit).map(c => {
50
- var _settings$selectedObs4;
51
- return (_settings$selectedObs4 = settings.selectedObs) === null || _settings$selectedObs4 === void 0 ? void 0 : _settings$selectedObs4.codesMap[c];
52
- }),
53
- varKeys: settings.selectedMultiVar.map(i => i.isSet ? {
53
+ obsCol: selectedObs,
54
+ obsValues: !(selectedObs !== null && selectedObs !== void 0 && selectedObs.omit.length) ? null : _lodash.default.difference(selectedObs === null || selectedObs === void 0 ? void 0 : selectedObs.values, selectedObs === null || selectedObs === void 0 ? void 0 : selectedObs.omit),
55
+ varKeys: selectedMultiVar.map(i => i.isSet ? {
54
56
  name: i.name,
55
57
  indices: i.vars.map(v => v.index)
56
58
  } : i.index),
57
59
  obsIndices: isSliced ? [...(obsIndices || [])] : null,
58
60
  standardScale: settings.controls.scale.matrixplot,
59
61
  varNamesCol: dataset.varNamesCol
60
- });
62
+ }), [dataset.url, dataset.varNamesCol, isSliced, obsIndices, selectedMultiVar, selectedObs, settings.controls.scale.matrixplot]);
61
63
  (0, _react.useEffect)(() => {
62
- if (settings.selectedObs && settings.selectedMultiVar.length) {
64
+ if (selectedObs && selectedMultiVar.length) {
63
65
  setHasSelections(true);
64
66
  } else {
65
67
  setHasSelections(false);
66
68
  }
67
- setParams(p => {
68
- var _settings$selectedObs5, _settings$selectedObs6, _settings$selectedObs7;
69
- return _objectSpread(_objectSpread({}, p), {}, {
70
- url: dataset.url,
71
- obsCol: settings.selectedObs,
72
- obsValues: !((_settings$selectedObs5 = settings.selectedObs) !== null && _settings$selectedObs5 !== void 0 && _settings$selectedObs5.omit.length) ? null : _lodash.default.difference(_lodash.default.values((_settings$selectedObs6 = settings.selectedObs) === null || _settings$selectedObs6 === void 0 ? void 0 : _settings$selectedObs6.codes), (_settings$selectedObs7 = settings.selectedObs) === null || _settings$selectedObs7 === void 0 ? void 0 : _settings$selectedObs7.omit).map(c => {
73
- var _settings$selectedObs8;
74
- return (_settings$selectedObs8 = settings.selectedObs) === null || _settings$selectedObs8 === void 0 ? void 0 : _settings$selectedObs8.codesMap[c];
75
- }),
76
- varKeys: settings.selectedMultiVar.map(i => i.isSet ? {
77
- name: i.name,
78
- indices: i.vars.map(v => v.index)
79
- } : i.index),
80
- obsIndices: isSliced ? [...(obsIndices || [])] : null,
81
- standardScale: settings.controls.scale.matrixplot,
82
- varNamesCol: dataset.varNamesCol
83
- });
84
- });
85
- }, [settings.controls.scale.matrixplot, settings.selectedMultiVar, settings.selectedObs, dataset.url, dataset.varNamesCol, obsIndices, isSliced]);
69
+ }, [selectedMultiVar.length, selectedObs]);
86
70
  const updateColorscale = (0, _react.useCallback)(colorscale => {
87
71
  setLayout(l => {
88
72
  return _objectSpread(_objectSpread({}, l), {}, {
@@ -97,13 +81,16 @@ function Matrixplot(_ref) {
97
81
  isPending,
98
82
  serverError
99
83
  } = (0, _requests.useDebouncedFetch)(ENDPOINT, params, 500, {
100
- enabled: !!params.obsCol && !!params.varKeys.length
84
+ isEnabled: params => !!params.obsCol && !!params.varKeys.length
101
85
  });
102
86
  (0, _react.useEffect)(() => {
103
- if (hasSelections && !isPending && !serverError) {
87
+ if (hasSelections && !!fetchedData && !isPending && !serverError) {
104
88
  setData(fetchedData.data);
105
89
  setLayout(fetchedData.layout);
106
90
  updateColorscale(colorscale.current);
91
+ } else {
92
+ setData([]);
93
+ setLayout({});
107
94
  }
108
95
  }, [fetchedData, hasSelections, isPending, serverError, updateColorscale]);
109
96
  (0, _react.useEffect)(() => {
@@ -120,38 +107,50 @@ function Matrixplot(_ref) {
120
107
  const modeBarButtons = customModeBarButtons.length ? [customModeBarButtons, _constants.PLOTLY_MODEBAR_BUTTONS] : [_constants.PLOTLY_MODEBAR_BUTTONS];
121
108
  if (!serverError) {
122
109
  if (hasSelections) {
123
- return /*#__PURE__*/_react.default.createElement("div", {
124
- className: "cherita-plot cherita-matrixplot position-relative"
125
- }, isPending && /*#__PURE__*/_react.default.createElement(_LoadingIndicators.LoadingSpinner, null), /*#__PURE__*/_react.default.createElement(_reactPlotly.default, {
126
- data: data,
127
- layout: layout,
128
- useResizeHandler: true,
129
- style: {
130
- width: "100%",
131
- height: "100%"
132
- },
133
- config: {
134
- displaylogo: false,
135
- modeBarButtons: modeBarButtons
136
- }
137
- }));
110
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
111
+ className: "cherita-plot cherita-matrixplot position-relative",
112
+ children: [isPending && /*#__PURE__*/(0, _jsxRuntime.jsx)(_LoadingIndicators.LoadingSpinner, {}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactPlotly.default, {
113
+ data: data,
114
+ layout: layout,
115
+ useResizeHandler: true,
116
+ style: {
117
+ width: '100%',
118
+ height: '100%'
119
+ },
120
+ config: {
121
+ displaylogo: false,
122
+ modeBarButtons: modeBarButtons
123
+ }
124
+ })]
125
+ });
138
126
  }
139
- return /*#__PURE__*/_react.default.createElement("div", {
140
- className: "cherita-matrixplot"
141
- }, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Alert, {
142
- variant: "light"
143
- }, "Select", " ", showVarsBtn ? /*#__PURE__*/_react.default.createElement(_reactBootstrap.Button, {
144
- variant: "link",
145
- className: "border-0 p-0 align-baseline",
146
- onClick: setShowVars
147
- }, "features") : "features", " ", "and a", " ", showObsBtn ? /*#__PURE__*/_react.default.createElement(_reactBootstrap.Button, {
148
- variant: "link",
149
- className: "border-0 p-0 align-baseline",
150
- onClick: setShowObs
151
- }, "category") : "category"));
127
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_PlotAlert.PlotAlert, {
128
+ variant: "info",
129
+ heading: "Set up your matrix plot",
130
+ plotType: plotType,
131
+ setPlotType: setPlotType,
132
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)("p", {
133
+ className: "p-0 m-0",
134
+ children: ["Select a", ' ', showObsBtn ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Button, {
135
+ variant: "link",
136
+ className: "border-0 p-0 align-baseline",
137
+ onClick: setShowObs,
138
+ children: "category"
139
+ }) : 'category', ' ', "to group observations, then choose one or more", ' ', showVarsBtn ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Button, {
140
+ variant: "link",
141
+ className: "border-0 p-0 align-baseline",
142
+ onClick: setShowVars,
143
+ children: "features"
144
+ }) : 'features', ' ', "to display the matrix plot."]
145
+ })
146
+ });
152
147
  } else {
153
- return /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Alert, {
154
- variant: "danger"
155
- }, serverError.message));
148
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_PlotAlert.PlotAlert, {
149
+ variant: "danger",
150
+ heading: "Error displaying the matrix plot",
151
+ plotType: plotType,
152
+ setPlotType: setPlotType,
153
+ children: serverError.message || 'An unexpected error occurred while generating the plot.'
154
+ });
156
155
  }
157
156
  }
@@ -4,12 +4,15 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.MatrixplotControls = MatrixplotControls;
7
- var _react = _interopRequireDefault(require("react"));
8
7
  var _reactBootstrap = require("react-bootstrap");
9
8
  var _Controls = require("../controls/Controls");
10
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
9
+ var _jsxRuntime = require("react/jsx-runtime");
11
10
  function MatrixplotControls() {
12
- return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Form, null, /*#__PURE__*/_react.default.createElement(_Controls.ColorscaleSelect, null), /*#__PURE__*/_react.default.createElement(_Controls.ScaleSelect, {
13
- plot: "matrixplot"
14
- })));
11
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_jsxRuntime.Fragment, {
12
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactBootstrap.Form, {
13
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Controls.ColorscaleSelect, {}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Controls.ScaleSelect, {
14
+ plot: "matrixplot"
15
+ })]
16
+ })
17
+ });
15
18
  }