@haniffalab/cherita-react 1.4.1-dev.2025-10-20.528e0f75 → 1.4.1-dev.2025-10-22.61540191
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.
- package/dist/cjs/components/dotplot/Dotplot.js +23 -15
- package/dist/cjs/components/full-page/FullPage.js +32 -30
- package/dist/cjs/components/full-page/PlotAlert.js +36 -0
- package/dist/cjs/components/full-page/PlotTypeSelector.js +77 -39
- package/dist/cjs/components/heatmap/Heatmap.js +23 -15
- package/dist/cjs/components/icons/DotPlotIcon.js +58 -0
- package/dist/cjs/components/icons/HeatmapIcon.js +39 -0
- package/dist/cjs/components/icons/MatrixPlotIcon.1.js +51 -0
- package/dist/cjs/components/icons/MatrixPlotIcon.js +53 -0
- package/dist/cjs/components/icons/ScatterplotIcon.1.js +158 -0
- package/dist/cjs/components/icons/ScatterplotIcon.js +138 -0
- package/dist/cjs/components/icons/ViolinPlotIcon.js +34 -0
- package/dist/cjs/components/matrixplot/Matrixplot.js +25 -17
- package/dist/cjs/components/pseudospatial/Pseudospatial.js +64 -25
- package/dist/cjs/components/pseudospatial/PseudospatialToolbar.js +63 -15
- package/dist/cjs/components/violin/Violin.js +41 -30
- package/dist/cjs/context/DatasetContext.js +1 -1
- package/dist/cjs/context/SettingsContext.js +27 -3
- package/dist/cjs/utils/StyledTooltip.js +39 -0
- package/dist/css/cherita.css +37 -22
- package/dist/css/cherita.css.map +1 -1
- package/dist/esm/components/dotplot/Dotplot.js +22 -13
- package/dist/esm/components/full-page/FullPage.js +6 -3
- package/dist/esm/components/full-page/PlotAlert.js +30 -0
- package/dist/esm/components/full-page/PlotTypeSelector.js +76 -38
- package/dist/esm/components/heatmap/Heatmap.js +22 -13
- package/dist/esm/components/icons/DotPlotIcon.js +52 -0
- package/dist/esm/components/icons/HeatmapIcon.js +33 -0
- package/dist/esm/components/icons/MatrixPlotIcon.1.js +45 -0
- package/dist/esm/components/icons/MatrixPlotIcon.js +47 -0
- package/dist/esm/components/icons/ScatterplotIcon.1.js +152 -0
- package/dist/esm/components/icons/ScatterplotIcon.js +132 -0
- package/dist/esm/components/icons/ViolinPlotIcon.js +28 -0
- package/dist/esm/components/matrixplot/Matrixplot.js +24 -15
- package/dist/esm/components/pseudospatial/Pseudospatial.js +58 -18
- package/dist/esm/components/pseudospatial/PseudospatialToolbar.js +52 -4
- package/dist/esm/components/violin/Violin.js +36 -24
- package/dist/esm/context/DatasetContext.js +1 -1
- package/dist/esm/context/SettingsContext.js +27 -3
- package/dist/esm/utils/StyledTooltip.js +33 -0
- package/package.json +2 -2
- package/scss/cherita.scss +19 -1
- package/scss/components/layouts.scss +2 -21
- package/scss/components/plotly.scss +37 -26
- package/scss/components/plots.scss +14 -1
- package/dist/assets/images/plots/dotplot.svg +0 -152
- package/dist/assets/images/plots/heatmap.svg +0 -193
- package/dist/assets/images/plots/matrixplot.svg +0 -275
- package/dist/assets/images/plots/scatterplot.svg +0 -198
- package/dist/assets/images/plots/violin.svg +0 -50
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = MatrixPlotIcon;
|
|
7
|
+
const _excluded = ["size", "colour", "gap"];
|
|
8
|
+
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); }
|
|
9
|
+
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; }
|
|
10
|
+
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; }
|
|
11
|
+
function MatrixPlotIcon(_ref) {
|
|
12
|
+
let {
|
|
13
|
+
size = 40,
|
|
14
|
+
colour = "#000",
|
|
15
|
+
gap = 2
|
|
16
|
+
} = _ref,
|
|
17
|
+
props = _objectWithoutProperties(_ref, _excluded);
|
|
18
|
+
const rows = 3;
|
|
19
|
+
const cols = 3;
|
|
20
|
+
const squareSize = (size - gap * (cols - 1)) / cols;
|
|
21
|
+
const squares = [];
|
|
22
|
+
for (let row = 0; row < rows; row++) {
|
|
23
|
+
for (let col = 0; col < cols; col++) {
|
|
24
|
+
squares.push({
|
|
25
|
+
x: col * (squareSize + gap),
|
|
26
|
+
y: row * (squareSize + gap)
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
// Example: corners semi-transparent
|
|
32
|
+
const semiTransparentSquares = [0, 2, 6, 8];
|
|
33
|
+
return /*#__PURE__*/React.createElement("svg", _extends({
|
|
34
|
+
width: size,
|
|
35
|
+
height: size,
|
|
36
|
+
viewBox: "0 0 ".concat(size, " ").concat(size),
|
|
37
|
+
xmlns: "http://www.w3.org/2000/svg"
|
|
38
|
+
}, props), squares.map((_ref2, i) => {
|
|
39
|
+
let {
|
|
40
|
+
x,
|
|
41
|
+
y
|
|
42
|
+
} = _ref2;
|
|
43
|
+
return /*#__PURE__*/React.createElement("rect", {
|
|
44
|
+
key: i,
|
|
45
|
+
x: x,
|
|
46
|
+
y: y,
|
|
47
|
+
width: squareSize,
|
|
48
|
+
height: squareSize,
|
|
49
|
+
fill: colour,
|
|
50
|
+
fillOpacity: semiTransparentSquares.includes(i) ? 0.5 : 1
|
|
51
|
+
});
|
|
52
|
+
}));
|
|
53
|
+
}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = ScatterplotIcon;
|
|
7
|
+
const _excluded = ["size", "colour"];
|
|
8
|
+
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); }
|
|
9
|
+
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; }
|
|
10
|
+
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; }
|
|
11
|
+
function ScatterplotIcon(_ref) {
|
|
12
|
+
let {
|
|
13
|
+
size = 40,
|
|
14
|
+
colour = "#000"
|
|
15
|
+
} = _ref,
|
|
16
|
+
props = _objectWithoutProperties(_ref, _excluded);
|
|
17
|
+
// Points with cluster assignments
|
|
18
|
+
const points = [
|
|
19
|
+
// Cluster 0
|
|
20
|
+
{
|
|
21
|
+
x: 15.2,
|
|
22
|
+
y: 35.9,
|
|
23
|
+
cluster: 0
|
|
24
|
+
}, {
|
|
25
|
+
x: 10.0,
|
|
26
|
+
y: 38.0,
|
|
27
|
+
cluster: 0
|
|
28
|
+
}, {
|
|
29
|
+
x: 12.3,
|
|
30
|
+
y: 40.7,
|
|
31
|
+
cluster: 0
|
|
32
|
+
}, {
|
|
33
|
+
x: 15.7,
|
|
34
|
+
y: 39.9,
|
|
35
|
+
cluster: 0
|
|
36
|
+
}, {
|
|
37
|
+
x: 8.1,
|
|
38
|
+
y: 42.2,
|
|
39
|
+
cluster: 0
|
|
40
|
+
}, {
|
|
41
|
+
x: 10.8,
|
|
42
|
+
y: 44.5,
|
|
43
|
+
cluster: 0
|
|
44
|
+
}, {
|
|
45
|
+
x: 14.3,
|
|
46
|
+
y: 44.6,
|
|
47
|
+
cluster: 0
|
|
48
|
+
}, {
|
|
49
|
+
x: 7.4,
|
|
50
|
+
y: 46.7,
|
|
51
|
+
cluster: 0
|
|
52
|
+
}, {
|
|
53
|
+
x: 11.1,
|
|
54
|
+
y: 48.8,
|
|
55
|
+
cluster: 0
|
|
56
|
+
}, {
|
|
57
|
+
x: 14.8,
|
|
58
|
+
y: 48.5,
|
|
59
|
+
cluster: 0
|
|
60
|
+
}, {
|
|
61
|
+
x: 12.6,
|
|
62
|
+
y: 52.1,
|
|
63
|
+
cluster: 0
|
|
64
|
+
},
|
|
65
|
+
// Cluster 1
|
|
66
|
+
{
|
|
67
|
+
x: 29.4,
|
|
68
|
+
y: 37.0,
|
|
69
|
+
cluster: 1
|
|
70
|
+
}, {
|
|
71
|
+
x: 26.1,
|
|
72
|
+
y: 40.2,
|
|
73
|
+
cluster: 1
|
|
74
|
+
}, {
|
|
75
|
+
x: 29.8,
|
|
76
|
+
y: 42.0,
|
|
77
|
+
cluster: 1
|
|
78
|
+
}, {
|
|
79
|
+
x: 33.0,
|
|
80
|
+
y: 39.5,
|
|
81
|
+
cluster: 1
|
|
82
|
+
}, {
|
|
83
|
+
x: 34.9,
|
|
84
|
+
y: 43.6,
|
|
85
|
+
cluster: 1
|
|
86
|
+
}, {
|
|
87
|
+
x: 31.5,
|
|
88
|
+
y: 46.2,
|
|
89
|
+
cluster: 1
|
|
90
|
+
}, {
|
|
91
|
+
x: 29.3,
|
|
92
|
+
y: 49.5,
|
|
93
|
+
cluster: 1
|
|
94
|
+
}, {
|
|
95
|
+
x: 26.7,
|
|
96
|
+
y: 45.2,
|
|
97
|
+
cluster: 1
|
|
98
|
+
},
|
|
99
|
+
// Cluster 2
|
|
100
|
+
{
|
|
101
|
+
x: 21.6,
|
|
102
|
+
y: 53.1,
|
|
103
|
+
cluster: 2
|
|
104
|
+
}, {
|
|
105
|
+
x: 25.3,
|
|
106
|
+
y: 53.9,
|
|
107
|
+
cluster: 2
|
|
108
|
+
}, {
|
|
109
|
+
x: 25.8,
|
|
110
|
+
y: 57.9,
|
|
111
|
+
cluster: 2
|
|
112
|
+
}, {
|
|
113
|
+
x: 22.1,
|
|
114
|
+
y: 57.4,
|
|
115
|
+
cluster: 2
|
|
116
|
+
}, {
|
|
117
|
+
x: 18.4,
|
|
118
|
+
y: 56.0,
|
|
119
|
+
cluster: 2
|
|
120
|
+
}, {
|
|
121
|
+
x: 18.6,
|
|
122
|
+
y: 59.8,
|
|
123
|
+
cluster: 2
|
|
124
|
+
}, {
|
|
125
|
+
x: 22.5,
|
|
126
|
+
y: 61.7,
|
|
127
|
+
cluster: 2
|
|
128
|
+
}];
|
|
129
|
+
const radius = 1.8;
|
|
130
|
+
const opacity = 1.0; // uniform expression
|
|
131
|
+
|
|
132
|
+
// Compute viewBox dynamically
|
|
133
|
+
const xs = points.map(p => p.x);
|
|
134
|
+
const ys = points.map(p => p.y);
|
|
135
|
+
const minX = Math.min(...xs) - radius;
|
|
136
|
+
const minY = Math.min(...ys) - radius;
|
|
137
|
+
const maxX = Math.max(...xs) + radius;
|
|
138
|
+
const maxY = Math.max(...ys) + radius;
|
|
139
|
+
return /*#__PURE__*/React.createElement("svg", _extends({
|
|
140
|
+
width: size,
|
|
141
|
+
height: size,
|
|
142
|
+
viewBox: "".concat(minX, " ").concat(minY, " ").concat(maxX - minX, " ").concat(maxY - minY),
|
|
143
|
+
xmlns: "http://www.w3.org/2000/svg"
|
|
144
|
+
}, props), points.map((_ref2, i) => {
|
|
145
|
+
let {
|
|
146
|
+
x,
|
|
147
|
+
y
|
|
148
|
+
} = _ref2;
|
|
149
|
+
return /*#__PURE__*/React.createElement("circle", {
|
|
150
|
+
key: i,
|
|
151
|
+
cx: x,
|
|
152
|
+
cy: y,
|
|
153
|
+
r: radius,
|
|
154
|
+
fill: colour,
|
|
155
|
+
opacity: opacity
|
|
156
|
+
});
|
|
157
|
+
}));
|
|
158
|
+
}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = ScatterplotIcon;
|
|
7
|
+
const _excluded = ["size", "colour"];
|
|
8
|
+
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); }
|
|
9
|
+
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; }
|
|
10
|
+
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; }
|
|
11
|
+
function ScatterplotIcon(_ref) {
|
|
12
|
+
let {
|
|
13
|
+
size = 40,
|
|
14
|
+
colour = "#000"
|
|
15
|
+
} = _ref,
|
|
16
|
+
props = _objectWithoutProperties(_ref, _excluded);
|
|
17
|
+
// Points with cluster assignments
|
|
18
|
+
const points = [
|
|
19
|
+
// Cluster 0
|
|
20
|
+
{
|
|
21
|
+
x: 15.2,
|
|
22
|
+
y: 35.9,
|
|
23
|
+
cluster: 0
|
|
24
|
+
}, {
|
|
25
|
+
x: 10.0,
|
|
26
|
+
y: 38.0,
|
|
27
|
+
cluster: 0
|
|
28
|
+
}, {
|
|
29
|
+
x: 12.3,
|
|
30
|
+
y: 40.7,
|
|
31
|
+
cluster: 0
|
|
32
|
+
}, {
|
|
33
|
+
x: 15.7,
|
|
34
|
+
y: 39.9,
|
|
35
|
+
cluster: 0
|
|
36
|
+
}, {
|
|
37
|
+
x: 8.1,
|
|
38
|
+
y: 42.2,
|
|
39
|
+
cluster: 0
|
|
40
|
+
}, {
|
|
41
|
+
x: 10.8,
|
|
42
|
+
y: 44.5,
|
|
43
|
+
cluster: 0
|
|
44
|
+
}, {
|
|
45
|
+
x: 14.3,
|
|
46
|
+
y: 44.6,
|
|
47
|
+
cluster: 0
|
|
48
|
+
}, {
|
|
49
|
+
x: 7.4,
|
|
50
|
+
y: 46.7,
|
|
51
|
+
cluster: 0
|
|
52
|
+
}, {
|
|
53
|
+
x: 11.1,
|
|
54
|
+
y: 48.8,
|
|
55
|
+
cluster: 0
|
|
56
|
+
},
|
|
57
|
+
// Cluster 1
|
|
58
|
+
{
|
|
59
|
+
x: 29.4,
|
|
60
|
+
y: 37.0,
|
|
61
|
+
cluster: 1
|
|
62
|
+
}, {
|
|
63
|
+
x: 26.1,
|
|
64
|
+
y: 40.2,
|
|
65
|
+
cluster: 1
|
|
66
|
+
}, {
|
|
67
|
+
x: 29.8,
|
|
68
|
+
y: 42.0,
|
|
69
|
+
cluster: 1
|
|
70
|
+
}, {
|
|
71
|
+
x: 33.0,
|
|
72
|
+
y: 39.5,
|
|
73
|
+
cluster: 1
|
|
74
|
+
}, {
|
|
75
|
+
x: 34.9,
|
|
76
|
+
y: 43.6,
|
|
77
|
+
cluster: 1
|
|
78
|
+
}, {
|
|
79
|
+
x: 31.5,
|
|
80
|
+
y: 46.2,
|
|
81
|
+
cluster: 1
|
|
82
|
+
},
|
|
83
|
+
// Cluster 2
|
|
84
|
+
{
|
|
85
|
+
x: 21.6,
|
|
86
|
+
y: 53.1,
|
|
87
|
+
cluster: 2
|
|
88
|
+
}, {
|
|
89
|
+
x: 25.3,
|
|
90
|
+
y: 53.9,
|
|
91
|
+
cluster: 2
|
|
92
|
+
}, {
|
|
93
|
+
x: 25.8,
|
|
94
|
+
y: 57.9,
|
|
95
|
+
cluster: 2
|
|
96
|
+
}, {
|
|
97
|
+
x: 22.1,
|
|
98
|
+
y: 57.4,
|
|
99
|
+
cluster: 2
|
|
100
|
+
}, {
|
|
101
|
+
x: 18.4,
|
|
102
|
+
y: 56.0,
|
|
103
|
+
cluster: 2
|
|
104
|
+
}, {
|
|
105
|
+
x: 22.5,
|
|
106
|
+
y: 61.7,
|
|
107
|
+
cluster: 2
|
|
108
|
+
}];
|
|
109
|
+
const radius = 1.8;
|
|
110
|
+
const opacity = 1.0; // uniform expression
|
|
111
|
+
|
|
112
|
+
// Compute viewBox dynamically
|
|
113
|
+
const xs = points.map(p => p.x);
|
|
114
|
+
const ys = points.map(p => p.y);
|
|
115
|
+
const minX = Math.min(...xs) - radius;
|
|
116
|
+
const minY = Math.min(...ys) - radius;
|
|
117
|
+
const maxX = Math.max(...xs) + radius;
|
|
118
|
+
const maxY = Math.max(...ys) + radius;
|
|
119
|
+
return /*#__PURE__*/React.createElement("svg", _extends({
|
|
120
|
+
width: size,
|
|
121
|
+
height: size,
|
|
122
|
+
viewBox: "".concat(minX, " ").concat(minY, " ").concat(maxX - minX, " ").concat(maxY - minY),
|
|
123
|
+
xmlns: "http://www.w3.org/2000/svg"
|
|
124
|
+
}, props), points.map((_ref2, i) => {
|
|
125
|
+
let {
|
|
126
|
+
x,
|
|
127
|
+
y
|
|
128
|
+
} = _ref2;
|
|
129
|
+
return /*#__PURE__*/React.createElement("circle", {
|
|
130
|
+
key: i,
|
|
131
|
+
cx: x,
|
|
132
|
+
cy: y,
|
|
133
|
+
r: radius,
|
|
134
|
+
fill: colour,
|
|
135
|
+
opacity: opacity
|
|
136
|
+
});
|
|
137
|
+
}));
|
|
138
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = ViolinPlotIcon;
|
|
7
|
+
const _excluded = ["size", "colour"];
|
|
8
|
+
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); }
|
|
9
|
+
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; }
|
|
10
|
+
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; }
|
|
11
|
+
function ViolinPlotIcon(_ref) {
|
|
12
|
+
let {
|
|
13
|
+
size = 40,
|
|
14
|
+
colour = "#000"
|
|
15
|
+
} = _ref,
|
|
16
|
+
props = _objectWithoutProperties(_ref, _excluded);
|
|
17
|
+
return /*#__PURE__*/React.createElement("svg", _extends({
|
|
18
|
+
viewBox: "0 0 37 40",
|
|
19
|
+
width: size,
|
|
20
|
+
height: size,
|
|
21
|
+
xmlns: "http://www.w3.org/2000/svg"
|
|
22
|
+
}, props), /*#__PURE__*/React.createElement("g", {
|
|
23
|
+
fill: colour,
|
|
24
|
+
stroke: colour,
|
|
25
|
+
strokeWidth: "0.5",
|
|
26
|
+
transform: "translate(-12 -8)"
|
|
27
|
+
}, /*#__PURE__*/React.createElement("path", {
|
|
28
|
+
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"
|
|
29
|
+
}), /*#__PURE__*/React.createElement("path", {
|
|
30
|
+
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"
|
|
31
|
+
}), /*#__PURE__*/React.createElement("path", {
|
|
32
|
+
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"
|
|
33
|
+
})));
|
|
34
|
+
}
|
|
@@ -4,7 +4,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.Matrixplot = Matrixplot;
|
|
7
|
-
var _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"));
|
|
@@ -15,9 +15,9 @@ var _SettingsContext = require("../../context/SettingsContext");
|
|
|
15
15
|
var _LoadingIndicators = require("../../utils/LoadingIndicators");
|
|
16
16
|
var _requests = require("../../utils/requests");
|
|
17
17
|
var _Resolver = require("../../utils/Resolver");
|
|
18
|
+
var _PlotAlert = require("../full-page/PlotAlert");
|
|
18
19
|
var _Toolbar = require("../toolbar/Toolbar");
|
|
19
20
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
20
|
-
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); }
|
|
21
21
|
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; }
|
|
22
22
|
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; }
|
|
23
23
|
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 +30,9 @@ function Matrixplot(_ref) {
|
|
|
30
30
|
showCtrlsBtn = false,
|
|
31
31
|
setShowObs,
|
|
32
32
|
setShowVars,
|
|
33
|
-
setShowControls
|
|
33
|
+
setShowControls,
|
|
34
|
+
plotType,
|
|
35
|
+
setPlotType
|
|
34
36
|
} = _ref;
|
|
35
37
|
const ENDPOINT = "matrixplot";
|
|
36
38
|
const dataset = (0, _DatasetContext.useDataset)();
|
|
@@ -115,9 +117,9 @@ function Matrixplot(_ref) {
|
|
|
115
117
|
const modeBarButtons = customModeBarButtons.length ? [customModeBarButtons, _constants.PLOTLY_MODEBAR_BUTTONS] : [_constants.PLOTLY_MODEBAR_BUTTONS];
|
|
116
118
|
if (!serverError) {
|
|
117
119
|
if (hasSelections) {
|
|
118
|
-
return /*#__PURE__*/
|
|
120
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
119
121
|
className: "cherita-plot cherita-matrixplot position-relative"
|
|
120
|
-
}, isPending && /*#__PURE__*/
|
|
122
|
+
}, isPending && /*#__PURE__*/React.createElement(_LoadingIndicators.LoadingSpinner, null), /*#__PURE__*/React.createElement(_reactPlotly.default, {
|
|
121
123
|
data: data,
|
|
122
124
|
layout: layout,
|
|
123
125
|
useResizeHandler: true,
|
|
@@ -131,22 +133,28 @@ function Matrixplot(_ref) {
|
|
|
131
133
|
}
|
|
132
134
|
}));
|
|
133
135
|
}
|
|
134
|
-
return /*#__PURE__*/
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
136
|
+
return /*#__PURE__*/React.createElement(_PlotAlert.PlotAlert, {
|
|
137
|
+
variant: "info",
|
|
138
|
+
heading: "Matrixplot",
|
|
139
|
+
plotType: plotType,
|
|
140
|
+
setPlotType: setPlotType
|
|
141
|
+
}, /*#__PURE__*/React.createElement("p", {
|
|
142
|
+
className: "p-0 m-0"
|
|
143
|
+
}, "Select a", " ", showObsBtn ? /*#__PURE__*/React.createElement(_reactBootstrap.Button, {
|
|
139
144
|
variant: "link",
|
|
140
145
|
className: "border-0 p-0 align-baseline",
|
|
141
|
-
onClick:
|
|
142
|
-
}, "
|
|
146
|
+
onClick: setShowObs
|
|
147
|
+
}, "category") : "category", " ", "to group observations, then choose one or more", " ", showVarsBtn ? /*#__PURE__*/React.createElement(_reactBootstrap.Button, {
|
|
143
148
|
variant: "link",
|
|
144
149
|
className: "border-0 p-0 align-baseline",
|
|
145
|
-
onClick:
|
|
146
|
-
}, "
|
|
150
|
+
onClick: setShowVars
|
|
151
|
+
}, "features") : "features", " ", "to display the matrix plot."));
|
|
147
152
|
} else {
|
|
148
|
-
return /*#__PURE__*/
|
|
149
|
-
variant: "danger"
|
|
150
|
-
|
|
153
|
+
return /*#__PURE__*/React.createElement(_PlotAlert.PlotAlert, {
|
|
154
|
+
variant: "danger",
|
|
155
|
+
heading: "Matrixplot",
|
|
156
|
+
plotType: plotType,
|
|
157
|
+
setPlotType: setPlotType
|
|
158
|
+
}, serverError.message || "An unexpected error occurred while generating the plot.");
|
|
151
159
|
}
|
|
152
160
|
}
|
|
@@ -5,8 +5,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.Pseudospatial = Pseudospatial;
|
|
7
7
|
exports.PseudospatialImage = PseudospatialImage;
|
|
8
|
-
var _react =
|
|
9
|
-
var _fontawesomeSvgCore = require("@fortawesome/fontawesome-svg-core");
|
|
8
|
+
var _react = require("react");
|
|
10
9
|
var _freeSolidSvgIcons = require("@fortawesome/free-solid-svg-icons");
|
|
11
10
|
var _lodash = _interopRequireDefault(require("lodash"));
|
|
12
11
|
var _reactBootstrap = require("react-bootstrap");
|
|
@@ -22,13 +21,11 @@ var _LoadingIndicators = require("../../utils/LoadingIndicators");
|
|
|
22
21
|
var _requests = require("../../utils/requests");
|
|
23
22
|
var _Resolver = require("../../utils/Resolver");
|
|
24
23
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
25
|
-
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); }
|
|
26
24
|
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; }
|
|
27
25
|
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; }
|
|
28
26
|
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; }
|
|
29
27
|
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
30
28
|
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); }
|
|
31
|
-
_fontawesomeSvgCore.library.add(_freeSolidSvgIcons.faSliders);
|
|
32
29
|
function usePseudospatialData(plotType) {
|
|
33
30
|
const ENDPOINT = "pseudospatial";
|
|
34
31
|
const dataset = (0, _DatasetContext.useDataset)();
|
|
@@ -82,7 +79,7 @@ function usePseudospatialData(plotType) {
|
|
|
82
79
|
});
|
|
83
80
|
}
|
|
84
81
|
function Pseudospatial(_ref) {
|
|
85
|
-
var _layout$coloraxis3, _layout$coloraxis4;
|
|
82
|
+
var _layout$coloraxis3, _layout$coloraxis4, _settings$pseudospati2;
|
|
86
83
|
let {
|
|
87
84
|
showLegend = true,
|
|
88
85
|
sharedScaleRange = false,
|
|
@@ -91,6 +88,9 @@ function Pseudospatial(_ref) {
|
|
|
91
88
|
plotType,
|
|
92
89
|
setPlotType
|
|
93
90
|
} = _ref;
|
|
91
|
+
const {
|
|
92
|
+
imageUrl
|
|
93
|
+
} = (0, _DatasetContext.useDataset)();
|
|
94
94
|
const settings = (0, _SettingsContext.useSettings)();
|
|
95
95
|
const dispatch = (0, _SettingsContext.useSettingsDispatch)();
|
|
96
96
|
const [data, setData] = (0, _react.useState)([]);
|
|
@@ -197,45 +197,84 @@ function Pseudospatial(_ref) {
|
|
|
197
197
|
}
|
|
198
198
|
}, [settings.controls.range, settings.controls.valueMax, settings.controls.valueMin, getColor, sharedScaleRange, valueMax, valueMin]);
|
|
199
199
|
const hasSelections = !!plotType && !!settings.pseudospatial.maskSet;
|
|
200
|
-
const
|
|
200
|
+
const images = (0, _react.useMemo)(() => {
|
|
201
|
+
if (imageUrl) {
|
|
202
|
+
return [_objectSpread({
|
|
203
|
+
source: imageUrl,
|
|
204
|
+
xref: "paper",
|
|
205
|
+
yref: "paper",
|
|
206
|
+
x: 0.5,
|
|
207
|
+
y: 0.5,
|
|
208
|
+
sizex: 1,
|
|
209
|
+
sizey: 1,
|
|
210
|
+
sizing: "contain",
|
|
211
|
+
layer: "above",
|
|
212
|
+
xanchor: "center",
|
|
213
|
+
yanchor: "middle",
|
|
214
|
+
name: "Reference Image"
|
|
215
|
+
}, settings.pseudospatial.refImg)];
|
|
216
|
+
}
|
|
217
|
+
return [];
|
|
218
|
+
}, [imageUrl, settings.pseudospatial.refImg]);
|
|
219
|
+
const modeBarButtons = (0, _react.useMemo)(() => {
|
|
220
|
+
var _settings$pseudospati;
|
|
221
|
+
const isRefImgVisible = (_settings$pseudospati = settings.pseudospatial) === null || _settings$pseudospati === void 0 || (_settings$pseudospati = _settings$pseudospati.refImg) === null || _settings$pseudospati === void 0 ? void 0 : _settings$pseudospati.visible;
|
|
222
|
+
return [{
|
|
223
|
+
name: "Open plot controls",
|
|
224
|
+
icon: {
|
|
225
|
+
width: 512,
|
|
226
|
+
height: 512,
|
|
227
|
+
path: _freeSolidSvgIcons.faSliders.icon[4]
|
|
228
|
+
},
|
|
229
|
+
click: () => setShowControls(prev => !prev)
|
|
230
|
+
}, ...(imageUrl ? [{
|
|
231
|
+
name: isRefImgVisible ? "Hide reference image" : "Show reference image",
|
|
232
|
+
icon: {
|
|
233
|
+
width: 600,
|
|
234
|
+
height: 512,
|
|
235
|
+
path: _freeSolidSvgIcons.faEye.icon[4]
|
|
236
|
+
},
|
|
237
|
+
click: () => dispatch({
|
|
238
|
+
type: "toggle.pseudospatial.refImg.visible"
|
|
239
|
+
})
|
|
240
|
+
}] : [])];
|
|
241
|
+
}, [dispatch, imageUrl, setShowControls, (_settings$pseudospati2 = settings.pseudospatial) === null || _settings$pseudospati2 === void 0 || (_settings$pseudospati2 = _settings$pseudospati2.refImg) === null || _settings$pseudospati2 === void 0 ? void 0 : _settings$pseudospati2.visible]);
|
|
201
242
|
if (!_lodash.default.keys(settings.data.pseudospatial).length) {
|
|
202
|
-
return /*#__PURE__*/
|
|
243
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(_reactBootstrap.Alert, {
|
|
203
244
|
variant: "warning"
|
|
204
245
|
}, "No pseudospatial data"));
|
|
205
246
|
} else if (!serverError) {
|
|
206
247
|
var _layout$coloraxis5, _layout$coloraxis6;
|
|
207
|
-
return /*#__PURE__*/
|
|
248
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
208
249
|
className: "cherita-pseudospatial"
|
|
209
|
-
}, /*#__PURE__*/
|
|
250
|
+
}, /*#__PURE__*/React.createElement(React.Fragment, null, hasSelections && isPending && /*#__PURE__*/React.createElement(_LoadingIndicators.LoadingSpinner, null), hasSelections && /*#__PURE__*/React.createElement(_reactPlotly.default, {
|
|
210
251
|
data: data,
|
|
211
252
|
layout: _objectSpread(_objectSpread({}, layout), {}, {
|
|
212
253
|
autosize: true,
|
|
213
|
-
height: height
|
|
254
|
+
height: height,
|
|
255
|
+
margin: {
|
|
256
|
+
l: 0,
|
|
257
|
+
r: 0,
|
|
258
|
+
t: 0,
|
|
259
|
+
b: 0,
|
|
260
|
+
pad: 0
|
|
261
|
+
},
|
|
262
|
+
images: images
|
|
214
263
|
}),
|
|
215
264
|
useResizeHandler: true,
|
|
216
265
|
className: "cherita-pseudospatial-plot",
|
|
217
266
|
config: {
|
|
218
267
|
displaylogo: false,
|
|
219
268
|
displayModeBar: true,
|
|
220
|
-
modeBarButtonsToAdd:
|
|
221
|
-
name: "Open plot controls",
|
|
222
|
-
icon: {
|
|
223
|
-
width: 512,
|
|
224
|
-
height: 512,
|
|
225
|
-
path: faSlidersPath,
|
|
226
|
-
ascent: 512,
|
|
227
|
-
descent: 0
|
|
228
|
-
},
|
|
229
|
-
click: () => setShowControls(prev => !prev)
|
|
230
|
-
}]
|
|
269
|
+
modeBarButtonsToAdd: modeBarButtons
|
|
231
270
|
}
|
|
232
|
-
}), hasSelections && showLegend && /*#__PURE__*/
|
|
271
|
+
}), hasSelections && showLegend && /*#__PURE__*/React.createElement(_Legend.Legend, {
|
|
233
272
|
min: layout === null || layout === void 0 || (_layout$coloraxis5 = layout.coloraxis) === null || _layout$coloraxis5 === void 0 ? void 0 : _layout$coloraxis5.cmin,
|
|
234
273
|
max: layout === null || layout === void 0 || (_layout$coloraxis6 = layout.coloraxis) === null || _layout$coloraxis6 === void 0 ? void 0 : _layout$coloraxis6.cmax,
|
|
235
274
|
addText: plotType === _constants.PSEUDOSPATIAL_PLOT_TYPES.GENE ? " - Mean expression" : plotType === _constants.PSEUDOSPATIAL_PLOT_TYPES.CATEGORICAL ? " - %" : plotType === _constants.PSEUDOSPATIAL_PLOT_TYPES.CONTINUOUS ? " - Mean value" : ""
|
|
236
275
|
})));
|
|
237
276
|
} else {
|
|
238
|
-
return /*#__PURE__*/
|
|
277
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(_reactBootstrap.Alert, {
|
|
239
278
|
variant: "danger"
|
|
240
279
|
}, serverError.message));
|
|
241
280
|
}
|
|
@@ -245,11 +284,11 @@ function Pseudospatial(_ref) {
|
|
|
245
284
|
function PseudospatialImage() {
|
|
246
285
|
const dataset = (0, _DatasetContext.useDataset)();
|
|
247
286
|
if (dataset.imageUrl) {
|
|
248
|
-
return /*#__PURE__*/
|
|
287
|
+
return /*#__PURE__*/React.createElement(_ImageViewer.ImageViewer, {
|
|
249
288
|
src: dataset.imageUrl,
|
|
250
289
|
alt: "Pseudospatial reference image"
|
|
251
290
|
});
|
|
252
291
|
} else {
|
|
253
|
-
return /*#__PURE__*/
|
|
292
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null);
|
|
254
293
|
}
|
|
255
294
|
}
|