@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
@@ -4,7 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.Heatmap = Heatmap;
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 Heatmap(_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 = "heatmap";
38
+ const ENDPOINT = 'heatmap';
36
39
  const dataset = (0, _DatasetContext.useDataset)();
37
40
  const settings = (0, _SettingsContext.useSettings)();
38
41
  const {
@@ -43,44 +46,26 @@ function Heatmap(_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
  varNamesCol: dataset.varNamesCol
59
- });
61
+ }), [dataset.url, dataset.varNamesCol, isSliced, obsIndices, selectedMultiVar, selectedObs]);
60
62
  (0, _react.useEffect)(() => {
61
- if (settings.selectedObs && settings.selectedMultiVar.length) {
63
+ if (selectedObs && selectedMultiVar.length) {
62
64
  setHasSelections(true);
63
65
  } else {
64
66
  setHasSelections(false);
65
67
  }
66
- setParams(p => {
67
- var _settings$selectedObs5, _settings$selectedObs6, _settings$selectedObs7;
68
- return _objectSpread(_objectSpread({}, p), {}, {
69
- url: dataset.url,
70
- obsCol: settings.selectedObs,
71
- 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 => {
72
- var _settings$selectedObs8;
73
- return (_settings$selectedObs8 = settings.selectedObs) === null || _settings$selectedObs8 === void 0 ? void 0 : _settings$selectedObs8.codesMap[c];
74
- }),
75
- varKeys: settings.selectedMultiVar.map(i => i.isSet ? {
76
- name: i.name,
77
- indices: i.vars.map(v => v.index)
78
- } : i.index),
79
- obsIndices: isSliced ? [...(obsIndices || [])] : null,
80
- varNamesCol: dataset.varNamesCol
81
- });
82
- });
83
- }, [settings.selectedMultiVar, settings.selectedObs, dataset.url, dataset.varNamesCol, obsIndices, isSliced]);
68
+ }, [selectedMultiVar, selectedObs, dataset.url, dataset.varNamesCol, obsIndices, isSliced]);
84
69
  const updateColorscale = (0, _react.useCallback)(colorscale => {
85
70
  setLayout(l => {
86
71
  return _objectSpread(_objectSpread({}, l), {}, {
@@ -95,13 +80,16 @@ function Heatmap(_ref) {
95
80
  isPending,
96
81
  serverError
97
82
  } = (0, _requests.useDebouncedFetch)(ENDPOINT, params, 500, {
98
- enabled: !!params.obsCol && !!params.varKeys.length
83
+ isEnabled: params => !!params.obsCol && !!params.varKeys.length
99
84
  });
100
85
  (0, _react.useEffect)(() => {
101
- if (hasSelections && !isPending && !serverError) {
86
+ if (hasSelections && !!fetchedData && !isPending && !serverError) {
102
87
  setData(fetchedData.data);
103
88
  setLayout(fetchedData.layout);
104
89
  updateColorscale(colorscale.current);
90
+ } else {
91
+ setData([]);
92
+ setLayout({});
105
93
  }
106
94
  }, [fetchedData, hasSelections, isPending, serverError, updateColorscale]);
107
95
  (0, _react.useEffect)(() => {
@@ -118,38 +106,50 @@ function Heatmap(_ref) {
118
106
  const modeBarButtons = customModeBarButtons.length ? [customModeBarButtons, _constants.PLOTLY_MODEBAR_BUTTONS] : [_constants.PLOTLY_MODEBAR_BUTTONS];
119
107
  if (!serverError) {
120
108
  if (hasSelections) {
121
- return /*#__PURE__*/_react.default.createElement("div", {
122
- className: "cherita-plot cherita-heatmap position-relative"
123
- }, isPending && /*#__PURE__*/_react.default.createElement(_LoadingIndicators.LoadingSpinner, null), /*#__PURE__*/_react.default.createElement(_reactPlotly.default, {
124
- data: data,
125
- layout: layout,
126
- useResizeHandler: true,
127
- style: {
128
- width: "100%",
129
- height: "100%"
130
- },
131
- config: {
132
- displaylogo: false,
133
- modeBarButtons: modeBarButtons
134
- }
135
- }));
109
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
110
+ className: "cherita-plot cherita-heatmap position-relative",
111
+ children: [isPending && /*#__PURE__*/(0, _jsxRuntime.jsx)(_LoadingIndicators.LoadingSpinner, {}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactPlotly.default, {
112
+ data: data,
113
+ layout: layout,
114
+ useResizeHandler: true,
115
+ style: {
116
+ width: '100%',
117
+ height: '100%'
118
+ },
119
+ config: {
120
+ displaylogo: false,
121
+ modeBarButtons: modeBarButtons
122
+ }
123
+ })]
124
+ });
136
125
  }
137
- return /*#__PURE__*/_react.default.createElement("div", {
138
- className: "cherita-heatmap"
139
- }, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Alert, {
140
- variant: "light"
141
- }, "Select", " ", showVarsBtn ? /*#__PURE__*/_react.default.createElement(_reactBootstrap.Button, {
142
- variant: "link",
143
- className: "border-0 p-0 align-baseline",
144
- onClick: setShowVars
145
- }, "features") : "features", " ", "and a", " ", showObsBtn ? /*#__PURE__*/_react.default.createElement(_reactBootstrap.Button, {
146
- variant: "link",
147
- className: "border-0 p-0 align-baseline",
148
- onClick: setShowObs
149
- }, "category") : "category"));
126
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_PlotAlert.PlotAlert, {
127
+ variant: "info",
128
+ heading: "Set up your heatmap",
129
+ plotType: plotType,
130
+ setPlotType: setPlotType,
131
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)("p", {
132
+ className: "p-0 m-0",
133
+ children: ["Select one or more", ' ', showVarsBtn ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Button, {
134
+ variant: "link",
135
+ className: "border-0 p-0 align-baseline",
136
+ onClick: setShowVars,
137
+ children: "features"
138
+ }) : 'features', ' ', "to display their expression, then choose a", ' ', showObsBtn ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Button, {
139
+ variant: "link",
140
+ className: "border-0 p-0 align-baseline",
141
+ onClick: setShowObs,
142
+ children: "category"
143
+ }) : 'category', ' ', "to group observations in the heatmap."]
144
+ })
145
+ });
150
146
  } else {
151
- return /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Alert, {
152
- variant: "danger"
153
- }, serverError.message));
147
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_PlotAlert.PlotAlert, {
148
+ variant: "danger",
149
+ heading: "Error displaying the heatmap",
150
+ plotType: plotType,
151
+ setPlotType: setPlotType,
152
+ children: serverError.message || 'An unexpected error occurred while generating the plot.'
153
+ });
154
154
  }
155
155
  }
@@ -4,10 +4,13 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.HeatmapControls = HeatmapControls;
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 HeatmapControls() {
12
- return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Form, null, /*#__PURE__*/_react.default.createElement(_Controls.ColorscaleSelect, null)));
11
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_jsxRuntime.Fragment, {
12
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Form, {
13
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Controls.ColorscaleSelect, {})
14
+ })
15
+ });
13
16
  }
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = DotPlotIcon;
7
+ var _jsxRuntime = require("react/jsx-runtime");
8
+ const _excluded = ["size", "colour", "gap"];
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 DotPlotIcon(_ref) {
17
+ let {
18
+ size = 40,
19
+ colour = '#000',
20
+ gap = 20
21
+ } = _ref,
22
+ props = _objectWithoutProperties(_ref, _excluded);
23
+ const rows = 3;
24
+ const cols = 3;
25
+
26
+ // Define two radii: small and large
27
+ const smallR = 10;
28
+ const largeR = 16;
29
+
30
+ // Indices for large circles
31
+ const largeIndices = [1, 4, 5, 6, 7];
32
+
33
+ // Indices for semi-transparent circles
34
+ const semiTransparentIndices = [0, 4, 8];
35
+ const circles = [];
36
+ for (let row = 0; row < rows; row++) {
37
+ for (let col = 0; col < cols; col++) {
38
+ const index = row * cols + col;
39
+ const r = largeIndices.includes(index) ? largeR : smallR;
40
+ circles.push({
41
+ cx: col * (2 * largeR + gap) + largeR,
42
+ cy: row * (2 * largeR + gap) + largeR,
43
+ r,
44
+ fill: colour,
45
+ fillOpacity: semiTransparentIndices.includes(index) ? 0.5 : 1
46
+ });
47
+ }
48
+ }
49
+ const viewBoxSize = (cols - 1) * (2 * largeR + gap) + 2 * largeR;
50
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)("svg", _objectSpread(_objectSpread({
51
+ width: size,
52
+ height: size,
53
+ viewBox: "0 0 ".concat(viewBoxSize, " ").concat(viewBoxSize),
54
+ xmlns: "http://www.w3.org/2000/svg"
55
+ }, props), {}, {
56
+ children: circles.map((circle, i) => /*#__PURE__*/(0, _jsxRuntime.jsx)("circle", {
57
+ cx: circle.cx,
58
+ cy: circle.cy,
59
+ r: circle.r,
60
+ fill: circle.fill,
61
+ fillOpacity: circle.fillOpacity
62
+ }, i))
63
+ }));
64
+ }
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = HeatmapIcon;
7
+ var _jsxRuntime = require("react/jsx-runtime");
8
+ const _excluded = ["size", "colour", "gap"];
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 HeatmapIcon(_ref) {
17
+ let {
18
+ size = 40,
19
+ colour = '#000',
20
+ gap = 1
21
+ } = _ref,
22
+ props = _objectWithoutProperties(_ref, _excluded);
23
+ const rows = 6; // genes
24
+ const cols = 8; // cells
25
+
26
+ // Example expression pattern for visual clusters
27
+ const expressionLevels = [[1, 0.8, 0.2, 0.2, 0.5, 0.9, 1, 0.7], [0.9, 0.7, 0.1, 0.2, 0.4, 0.8, 0.9, 0.6], [0.1, 0.2, 0.8, 0.9, 0.7, 0.2, 0.1, 0.3], [0.2, 0.3, 0.9, 1, 0.8, 0.3, 0.2, 0.4], [0.5, 0.6, 0.2, 0.1, 0.9, 0.7, 0.6, 0.8], [0.6, 0.7, 0.3, 0.2, 0.8, 0.6, 0.7, 0.9]];
28
+ const cellWidth = (size - (cols - 1) * gap) / cols;
29
+ const cellHeight = (size - (rows - 1) * gap) / rows;
30
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)("svg", _objectSpread(_objectSpread({
31
+ width: size,
32
+ height: size,
33
+ viewBox: "0 0 ".concat(size, " ").concat(size),
34
+ xmlns: "http://www.w3.org/2000/svg"
35
+ }, props), {}, {
36
+ children: expressionLevels.map((row, rowIndex) => row.map((value, colIndex) => /*#__PURE__*/(0, _jsxRuntime.jsx)("rect", {
37
+ x: colIndex * (cellWidth + gap),
38
+ y: rowIndex * (cellHeight + gap),
39
+ width: cellWidth,
40
+ height: cellHeight,
41
+ fill: colour,
42
+ fillOpacity: value
43
+ }, "".concat(rowIndex, "-").concat(colIndex))))
44
+ }));
45
+ }
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = MatrixPlotIcon;
7
+ var _jsxRuntime = require("react/jsx-runtime");
8
+ const _excluded = ["size", "colour", "gap"];
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 MatrixPlotIcon(_ref) {
17
+ let {
18
+ size = 40,
19
+ colour = '#000',
20
+ gap = 2
21
+ } = _ref,
22
+ props = _objectWithoutProperties(_ref, _excluded);
23
+ const rows = 4;
24
+ const cols = 4;
25
+ const squareSize = (size - gap * (cols - 1)) / cols;
26
+ const squares = [];
27
+ for (let row = 0; row < rows; row++) {
28
+ for (let col = 0; col < cols; col++) {
29
+ squares.push({
30
+ x: col * (squareSize + gap),
31
+ y: row * (squareSize + gap)
32
+ });
33
+ }
34
+ }
35
+ const semiTransparentSquares = [0, 5, 10, 15];
36
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)("svg", _objectSpread(_objectSpread({
37
+ width: size,
38
+ height: size,
39
+ viewBox: "0 0 ".concat(size, " ").concat(size),
40
+ xmlns: "http://www.w3.org/2000/svg"
41
+ }, props), {}, {
42
+ children: squares.map((_ref2, i) => {
43
+ let {
44
+ x,
45
+ y
46
+ } = _ref2;
47
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)("rect", {
48
+ x: x,
49
+ y: y,
50
+ width: squareSize,
51
+ height: squareSize,
52
+ fill: colour,
53
+ fillOpacity: semiTransparentSquares.includes(i) ? 0.5 : 1
54
+ }, i);
55
+ })
56
+ }));
57
+ }
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = MatrixPlotIcon;
7
+ var _jsxRuntime = require("react/jsx-runtime");
8
+ const _excluded = ["size", "colour", "gap"];
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 MatrixPlotIcon(_ref) {
17
+ let {
18
+ size = 40,
19
+ colour = '#000',
20
+ gap = 2
21
+ } = _ref,
22
+ props = _objectWithoutProperties(_ref, _excluded);
23
+ const rows = 3;
24
+ const cols = 3;
25
+ const squareSize = (size - gap * (cols - 1)) / cols;
26
+ const squares = [];
27
+ for (let row = 0; row < rows; row++) {
28
+ for (let col = 0; col < cols; col++) {
29
+ squares.push({
30
+ x: col * (squareSize + gap),
31
+ y: row * (squareSize + gap)
32
+ });
33
+ }
34
+ }
35
+
36
+ // Example: corners semi-transparent
37
+ const semiTransparentSquares = [0, 2, 6, 8];
38
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)("svg", _objectSpread(_objectSpread({
39
+ width: size,
40
+ height: size,
41
+ viewBox: "0 0 ".concat(size, " ").concat(size),
42
+ xmlns: "http://www.w3.org/2000/svg"
43
+ }, props), {}, {
44
+ children: squares.map((_ref2, i) => {
45
+ let {
46
+ x,
47
+ y
48
+ } = _ref2;
49
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)("rect", {
50
+ x: x,
51
+ y: y,
52
+ width: squareSize,
53
+ height: squareSize,
54
+ fill: colour,
55
+ fillOpacity: semiTransparentSquares.includes(i) ? 0.5 : 1
56
+ }, i);
57
+ })
58
+ }));
59
+ }
@@ -0,0 +1,164 @@
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
+ x: 14.8,
63
+ y: 48.5,
64
+ cluster: 0
65
+ }, {
66
+ x: 12.6,
67
+ y: 52.1,
68
+ cluster: 0
69
+ },
70
+ // Cluster 1
71
+ {
72
+ x: 29.4,
73
+ y: 37.0,
74
+ cluster: 1
75
+ }, {
76
+ x: 26.1,
77
+ y: 40.2,
78
+ cluster: 1
79
+ }, {
80
+ x: 29.8,
81
+ y: 42.0,
82
+ cluster: 1
83
+ }, {
84
+ x: 33.0,
85
+ y: 39.5,
86
+ cluster: 1
87
+ }, {
88
+ x: 34.9,
89
+ y: 43.6,
90
+ cluster: 1
91
+ }, {
92
+ x: 31.5,
93
+ y: 46.2,
94
+ cluster: 1
95
+ }, {
96
+ x: 29.3,
97
+ y: 49.5,
98
+ cluster: 1
99
+ }, {
100
+ x: 26.7,
101
+ y: 45.2,
102
+ cluster: 1
103
+ },
104
+ // Cluster 2
105
+ {
106
+ x: 21.6,
107
+ y: 53.1,
108
+ cluster: 2
109
+ }, {
110
+ x: 25.3,
111
+ y: 53.9,
112
+ cluster: 2
113
+ }, {
114
+ x: 25.8,
115
+ y: 57.9,
116
+ cluster: 2
117
+ }, {
118
+ x: 22.1,
119
+ y: 57.4,
120
+ cluster: 2
121
+ }, {
122
+ x: 18.4,
123
+ y: 56.0,
124
+ cluster: 2
125
+ }, {
126
+ x: 18.6,
127
+ y: 59.8,
128
+ cluster: 2
129
+ }, {
130
+ x: 22.5,
131
+ y: 61.7,
132
+ cluster: 2
133
+ }];
134
+ const radius = 1.8;
135
+ const opacity = 1.0; // uniform expression
136
+
137
+ // Compute viewBox dynamically
138
+ const xs = points.map(p => p.x);
139
+ const ys = points.map(p => p.y);
140
+ const minX = Math.min(...xs) - radius;
141
+ const minY = Math.min(...ys) - radius;
142
+ const maxX = Math.max(...xs) + radius;
143
+ const maxY = Math.max(...ys) + radius;
144
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)("svg", _objectSpread(_objectSpread({
145
+ width: size,
146
+ height: size,
147
+ viewBox: "".concat(minX, " ").concat(minY, " ").concat(maxX - minX, " ").concat(maxY - minY),
148
+ xmlns: "http://www.w3.org/2000/svg"
149
+ }, props), {}, {
150
+ children: points.map((_ref2, i) => {
151
+ let {
152
+ x,
153
+ y
154
+ } = _ref2;
155
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)("circle", {
156
+ cx: x,
157
+ cy: y,
158
+ r: radius,
159
+ fill: colour,
160
+ opacity: opacity
161
+ }, i);
162
+ })
163
+ }));
164
+ }