@haniffalab/cherita-react 1.3.0-dev.2025-06-04.d986a94b → 1.3.0

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 (30) hide show
  1. package/dist/cjs/components/dotplot/Dotplot.js +5 -35
  2. package/dist/cjs/components/full-page/FullPage.js +50 -108
  3. package/dist/cjs/components/full-page/FullPagePseudospatial.js +157 -0
  4. package/dist/cjs/components/heatmap/Heatmap.js +5 -35
  5. package/dist/cjs/components/matrixplot/Matrixplot.js +5 -35
  6. package/dist/cjs/components/obs-list/ObsList.js +3 -4
  7. package/dist/cjs/components/scatterplot/SpatialControls.js +3 -3
  8. package/dist/cjs/components/violin/Violin.js +6 -37
  9. package/dist/cjs/constants/constants.js +2 -14
  10. package/dist/cjs/index.js +21 -15
  11. package/dist/css/cherita.css +23 -76
  12. package/dist/css/cherita.css.map +1 -1
  13. package/dist/esm/components/dotplot/Dotplot.js +6 -36
  14. package/dist/esm/components/full-page/FullPage.js +50 -110
  15. package/dist/esm/components/full-page/FullPagePseudospatial.js +149 -0
  16. package/dist/esm/components/heatmap/Heatmap.js +6 -36
  17. package/dist/esm/components/matrixplot/Matrixplot.js +6 -36
  18. package/dist/esm/components/obs-list/ObsList.js +3 -4
  19. package/dist/esm/components/scatterplot/SpatialControls.js +3 -3
  20. package/dist/esm/components/violin/Violin.js +8 -39
  21. package/dist/esm/constants/constants.js +1 -13
  22. package/dist/esm/index.js +4 -4
  23. package/package.json +3 -4
  24. package/scss/cherita.scss +1 -0
  25. package/scss/components/layouts.scss +1 -69
  26. package/scss/components/plotly.scss +14 -19
  27. package/dist/cjs/components/full-page/PlotTypeSelector.js +0 -57
  28. package/dist/cjs/components/toolbar/Toolbar.js +0 -102
  29. package/dist/esm/components/full-page/PlotTypeSelector.js +0 -50
  30. package/dist/esm/components/toolbar/Toolbar.js +0 -91
@@ -56,8 +56,7 @@ function ObsColsList(_ref2) {
56
56
  var _settings$selectedObs;
57
57
  let {
58
58
  showColor = true,
59
- enableObsGroups = true,
60
- showSelectedAsActive = false
59
+ enableObsGroups = true
61
60
  } = _ref2;
62
61
  const ENDPOINT = "obs/cols";
63
62
  const dataset = (0, _DatasetContext.useDataset)();
@@ -224,7 +223,7 @@ function ObsColsList(_ref2) {
224
223
  }
225
224
  const inLabelObs = _lodash.default.some(settings.labelObs, i => i.name === item.name);
226
225
  const inSliceObs = settings.sliceBy.obs && ((_settings$selectedObs5 = settings.selectedObs) === null || _settings$selectedObs5 === void 0 ? void 0 : _settings$selectedObs5.name) === item.name;
227
- const isColorEncoding = (showSelectedAsActive || settings.colorEncoding === _constants.COLOR_ENCODINGS.OBS) && ((_settings$selectedObs6 = settings.selectedObs) === null || _settings$selectedObs6 === void 0 ? void 0 : _settings$selectedObs6.name) === item.name;
226
+ const isColorEncoding = settings.colorEncoding === _constants.COLOR_ENCODINGS.OBS && ((_settings$selectedObs6 = settings.selectedObs) === null || _settings$selectedObs6 === void 0 ? void 0 : _settings$selectedObs6.name) === item.name;
228
227
  return /*#__PURE__*/_react.default.createElement("div", {
229
228
  className: "accordion-item",
230
229
  key: item.name
@@ -251,7 +250,7 @@ function ObsColsList(_ref2) {
251
250
  event.stopPropagation();
252
251
  toggleColor(item);
253
252
  },
254
- title: showSelectedAsActive ? "Is selected" : "Is color encoding"
253
+ title: "Is color encoding"
255
254
  }, /*#__PURE__*/_react.default.createElement(_WaterDrop.default, null)))), /*#__PURE__*/_react.default.createElement(_Accordion.default.Collapse, {
256
255
  eventKey: item.name
257
256
  }, /*#__PURE__*/_react.default.createElement("div", {
@@ -14,9 +14,9 @@ var _reactBootstrap = require("react-bootstrap");
14
14
  var _Button = _interopRequireDefault(require("react-bootstrap/Button"));
15
15
  var _ButtonGroup = _interopRequireDefault(require("react-bootstrap/ButtonGroup"));
16
16
  var _Dropdown = _interopRequireDefault(require("react-bootstrap/Dropdown"));
17
+ var _DatasetContext = require("../../context/DatasetContext");
17
18
  var _offcanvas = require("../offcanvas");
18
19
  var _ScatterplotControls = require("./ScatterplotControls");
19
- var _constants = require("../../constants/constants");
20
20
  var _SettingsContext = require("../../context/SettingsContext");
21
21
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
22
22
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
@@ -40,8 +40,8 @@ function SpatialControls(_ref) {
40
40
  const [showControls, setShowControls] = (0, _react.useState)(false);
41
41
  const handleCloseControls = () => setShowControls(false);
42
42
  const handleShowControls = () => setShowControls(true);
43
- const LgBreakpoint = (0, _useMediaQuery.default)(_constants.BREAKPOINTS.LG);
44
- const XlBreakpoint = (0, _useMediaQuery.default)(_constants.BREAKPOINTS.XL);
43
+ const LgBreakpoint = (0, _useMediaQuery.default)("(max-width: 991.98px)");
44
+ const XlBreakpoint = (0, _useMediaQuery.default)("(max-width: 1199.98px)");
45
45
  const showObsBtn = isFullscreen ? LgBreakpoint : true;
46
46
  const showVarsBtn = isFullscreen ? XlBreakpoint : true;
47
47
  const onSelect = (eventKey, event) => {
@@ -16,7 +16,6 @@ var _FilterContext = require("../../context/FilterContext");
16
16
  var _SettingsContext = require("../../context/SettingsContext");
17
17
  var _LoadingIndicators = require("../../utils/LoadingIndicators");
18
18
  var _requests = require("../../utils/requests");
19
- var _Toolbar = require("../toolbar/Toolbar");
20
19
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
21
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); }
22
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; }
@@ -27,13 +26,7 @@ function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e =
27
26
  function Violin(_ref) {
28
27
  var _settings$selectedVar, _settings$selectedVar2, _settings$selectedVar3, _settings$selectedVar4, _settings$selectedObs, _settings$selectedObs2, _settings$selectedObs3;
29
28
  let {
30
- mode = _constants.VIOLIN_MODES.MULTIKEY,
31
- showObsBtn = false,
32
- showVarsBtn = false,
33
- showCtrlsBtn = false,
34
- setShowObs,
35
- setShowVars,
36
- setShowControls
29
+ mode = _constants.VIOLIN_MODES.MULTIKEY
37
30
  } = _ref;
38
31
  const ENDPOINT = "violin";
39
32
  const dataset = (0, _DatasetContext.useDataset)();
@@ -132,29 +125,17 @@ function Violin(_ref) {
132
125
  setLayout(fetchedData.layout);
133
126
  }
134
127
  }, [fetchedData, hasSelections, isPending, serverError]);
135
- const customModeBarButtons = _lodash.default.compact([showObsBtn && (0, _Toolbar.ObsPlotlyToolbar)({
136
- onClick: setShowObs
137
- }), showVarsBtn && (0, _Toolbar.VarPlotlyToolbar)({
138
- onClick: setShowVars
139
- }), showCtrlsBtn && (0, _Toolbar.ControlsPlotlyToolbar)({
140
- onClick: setShowControls
141
- })]);
142
- const modeBarButtons = customModeBarButtons.length ? [customModeBarButtons, _constants.PLOTLY_MODEBAR_BUTTONS] : [_constants.PLOTLY_MODEBAR_BUTTONS];
143
128
  if (!serverError) {
144
129
  if (hasSelections) {
145
130
  return /*#__PURE__*/_react.default.createElement("div", {
146
- className: "cherita-plot cherita-violin position-relative"
131
+ className: "cherita-violin position-relative"
147
132
  }, isPending && /*#__PURE__*/_react.default.createElement(_LoadingIndicators.LoadingSpinner, null), /*#__PURE__*/_react.default.createElement(_reactPlotly.default, {
148
133
  data: data,
149
134
  layout: layout,
150
135
  useResizeHandler: true,
151
136
  style: {
152
- width: "100%",
153
- height: "100%"
154
- },
155
- config: {
156
- displaylogo: false,
157
- modeBarButtons: modeBarButtons
137
+ maxWidth: "100%",
138
+ maxHeight: "100%"
158
139
  }
159
140
  }), (fetchedData === null || fetchedData === void 0 ? void 0 : fetchedData.resampled) && /*#__PURE__*/_react.default.createElement(_reactBootstrap.Alert, {
160
141
  variant: "warning"
@@ -169,21 +150,9 @@ function Violin(_ref) {
169
150
  className: "cherita-violin"
170
151
  }, mode === _constants.VIOLIN_MODES.MULTIKEY && /*#__PURE__*/_react.default.createElement(_reactBootstrap.Alert, {
171
152
  variant: "light"
172
- }, "Select", " ", showVarsBtn ? /*#__PURE__*/_react.default.createElement(_reactBootstrap.Button, {
173
- variant: "link",
174
- className: "border-0 p-0 align-baseline",
175
- onClick: setShowVars
176
- }, "features") : "features"), mode === _constants.VIOLIN_MODES.GROUPBY && /*#__PURE__*/_react.default.createElement(_reactBootstrap.Alert, {
153
+ }, "Select features"), mode === _constants.VIOLIN_MODES.GROUPBY && /*#__PURE__*/_react.default.createElement(_reactBootstrap.Alert, {
177
154
  variant: "light"
178
- }, "Select", " ", showObsBtn ? /*#__PURE__*/_react.default.createElement(_reactBootstrap.Button, {
179
- variant: "link",
180
- className: "border-0 p-0 align-baseline",
181
- onClick: setShowObs
182
- }, "categories") : "categories", " ", "and a", " ", showVarsBtn ? /*#__PURE__*/_react.default.createElement(_reactBootstrap.Button, {
183
- variant: "link",
184
- className: "border-0 p-0 align-baseline",
185
- onClick: setShowVars
186
- }, "feature") : "feature"));
155
+ }, "Select categories and a feature"));
187
156
  } else {
188
157
  return /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Alert, {
189
158
  variant: "danger"
@@ -3,15 +3,8 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.VIOLIN_MODES = exports.VIOLINPLOT_SCALES = exports.VAR_SORT_ORDER = exports.VAR_SORT = exports.UNSELECTED_POLYGON_FILLCOLOR = exports.SELECTION_MODES = exports.SELECTED_POLYGON_FILLCOLOR = exports.PSEUDOSPATIAL_PLOT_TYPES = exports.PSEUDOSPATIAL_CATEGORICAL_MODES = exports.PLOT_TYPES = exports.PLOTLY_MODEBAR_BUTTONS = exports.OBS_TYPES = exports.MATRIXPLOT_SCALES = exports.LOCAL_STORAGE_KEY = exports.DOTPLOT_SCALES = exports.DEFAULT_OBS_GROUP = exports.COLOR_ENCODINGS = exports.BREAKPOINTS = void 0;
6
+ exports.VIOLIN_MODES = exports.VIOLINPLOT_SCALES = exports.VAR_SORT_ORDER = exports.VAR_SORT = exports.UNSELECTED_POLYGON_FILLCOLOR = exports.SELECTION_MODES = exports.SELECTED_POLYGON_FILLCOLOR = exports.PSEUDOSPATIAL_PLOT_TYPES = exports.PSEUDOSPATIAL_CATEGORICAL_MODES = exports.OBS_TYPES = exports.MATRIXPLOT_SCALES = exports.LOCAL_STORAGE_KEY = exports.DOTPLOT_SCALES = exports.DEFAULT_OBS_GROUP = exports.COLOR_ENCODINGS = void 0;
7
7
  const LOCAL_STORAGE_KEY = exports.LOCAL_STORAGE_KEY = "CHERITA";
8
- const PLOT_TYPES = exports.PLOT_TYPES = {
9
- SCATTERPLOT: "scatterplot",
10
- DOTPLOT: "dotplot",
11
- HEATMAP: "heatmap",
12
- MATRIXPLOT: "matrixplot",
13
- VIOLINPLOT: "violinplot"
14
- };
15
8
  const COLOR_ENCODINGS = exports.COLOR_ENCODINGS = {
16
9
  VAR: "var",
17
10
  OBS: "obs"
@@ -98,9 +91,4 @@ const PSEUDOSPATIAL_CATEGORICAL_MODES = exports.PSEUDOSPATIAL_CATEGORICAL_MODES
98
91
 
99
92
  // `default` cols to be shown out of accordion, at top of obslist
100
93
  // default values from cellxgene schema
101
- const DEFAULT_OBS_GROUP = exports.DEFAULT_OBS_GROUP = ["assay", "cell_type", "development_stage", "disease", "donor_id", "organism", "self_reported_ethnicity", "sex", "suspension_type", "tissue", "tissue_type"];
102
- const PLOTLY_MODEBAR_BUTTONS = exports.PLOTLY_MODEBAR_BUTTONS = ["toImage", "zoom2d", "pan2d", "zoomIn2d", "zoomOut2d", "autoScale2d", "resetScale2d"];
103
- const BREAKPOINTS = exports.BREAKPOINTS = {
104
- LG: "(max-width: 991.98px)",
105
- XL: "(max-width: 1199.98px)"
106
- };
94
+ const DEFAULT_OBS_GROUP = exports.DEFAULT_OBS_GROUP = ["assay", "cell_type", "development_stage", "disease", "donor_id", "organism", "self_reported_ethnicity", "sex", "suspension_type", "tissue", "tissue_type"];
package/dist/cjs/index.js CHANGED
@@ -39,6 +39,24 @@ Object.defineProperty(exports, "FullPage", {
39
39
  return _FullPage.FullPage;
40
40
  }
41
41
  });
42
+ Object.defineProperty(exports, "FullPagePlots", {
43
+ enumerable: true,
44
+ get: function () {
45
+ return _FullPage.FullPagePlots;
46
+ }
47
+ });
48
+ Object.defineProperty(exports, "FullPagePseudospatial", {
49
+ enumerable: true,
50
+ get: function () {
51
+ return _FullPagePseudospatial.FullPagePseudospatial;
52
+ }
53
+ });
54
+ Object.defineProperty(exports, "FullPageScatterplot", {
55
+ enumerable: true,
56
+ get: function () {
57
+ return _FullPage.FullPageScatterplot;
58
+ }
59
+ });
42
60
  Object.defineProperty(exports, "Heatmap", {
43
61
  enumerable: true,
44
62
  get: function () {
@@ -99,12 +117,6 @@ Object.defineProperty(exports, "OffcanvasVars", {
99
117
  return _offcanvas.OffcanvasVars;
100
118
  }
101
119
  });
102
- Object.defineProperty(exports, "PLOT_TYPES", {
103
- enumerable: true,
104
- get: function () {
105
- return _constants.PLOT_TYPES;
106
- }
107
- });
108
120
  Object.defineProperty(exports, "Pseudospatial", {
109
121
  enumerable: true,
110
122
  get: function () {
@@ -135,12 +147,6 @@ Object.defineProperty(exports, "SearchBar", {
135
147
  return _SearchBar.SearchBar;
136
148
  }
137
149
  });
138
- Object.defineProperty(exports, "Toolbar", {
139
- enumerable: true,
140
- get: function () {
141
- return _Toolbar.Toolbar;
142
- }
143
- });
144
150
  Object.defineProperty(exports, "VIOLIN_MODES", {
145
151
  enumerable: true,
146
152
  get: function () {
@@ -167,22 +173,22 @@ Object.defineProperty(exports, "ViolinControls", {
167
173
  });
168
174
  var _Dotplot = require("./components/dotplot/Dotplot");
169
175
  var _DotplotControls = require("./components/dotplot/DotplotControls");
170
- var _FullPage = require("./components/full-page/FullPage");
171
176
  var _Heatmap = require("./components/heatmap/Heatmap");
172
177
  var _HeatmapControls = require("./components/heatmap/HeatmapControls");
173
178
  var _Matrixplot = require("./components/matrixplot/Matrixplot");
174
179
  var _MatrixplotControls = require("./components/matrixplot/MatrixplotControls");
175
180
  var _ObsList = require("./components/obs-list/ObsList");
176
181
  var _ObsmList = require("./components/obsm-list/ObsmList");
177
- var _offcanvas = require("./components/offcanvas");
178
182
  var _Pseudospatial = require("./components/pseudospatial/Pseudospatial");
179
183
  var _Scatterplot = require("./components/scatterplot/Scatterplot");
180
184
  var _ScatterplotControls = require("./components/scatterplot/ScatterplotControls");
181
185
  var _SearchBar = require("./components/search-bar/SearchBar");
182
- var _Toolbar = require("./components/toolbar/Toolbar");
183
186
  var _VarList = require("./components/var-list/VarList");
184
187
  var _Violin = require("./components/violin/Violin");
185
188
  var _ViolinControls = require("./components/violin/ViolinControls");
189
+ var _FullPage = require("./components/full-page/FullPage");
190
+ var _FullPagePseudospatial = require("./components/full-page/FullPagePseudospatial");
191
+ var _offcanvas = require("./components/offcanvas");
186
192
  var _colorscales = require("./constants/colorscales");
187
193
  var _constants = require("./constants/constants");
188
194
  var _DatasetContext = require("./context/DatasetContext");
@@ -7216,7 +7216,7 @@ textarea.form-control-lg {
7216
7216
  display: inline-block !important;
7217
7217
  }
7218
7218
 
7219
- .d-block, .cherita-app .cherita-navbar, .cherita-app-container .cherita-app-canvas .cherita-navbar {
7219
+ .d-block, .cherita-app .cherita-navbar {
7220
7220
  display: block !important;
7221
7221
  }
7222
7222
 
@@ -7778,7 +7778,7 @@ textarea.form-control-lg {
7778
7778
  order: 6 !important;
7779
7779
  }
7780
7780
 
7781
- .m-0, .cherita-app-container .cherita-app-canvas .cherita-navbar {
7781
+ .m-0 {
7782
7782
  margin: 0 !important;
7783
7783
  }
7784
7784
 
@@ -7811,7 +7811,7 @@ textarea.form-control-lg {
7811
7811
  margin-left: 0 !important;
7812
7812
  }
7813
7813
 
7814
- .mx-1, .js-plotly-plot .plotly .modebar .modebar-group {
7814
+ .mx-1 {
7815
7815
  margin-right: 0.25rem !important;
7816
7816
  margin-left: 0.25rem !important;
7817
7817
  }
@@ -7988,11 +7988,11 @@ textarea.form-control-lg {
7988
7988
  margin-left: auto !important;
7989
7989
  }
7990
7990
 
7991
- .p-0, .cherita-app-container {
7991
+ .p-0 {
7992
7992
  padding: 0 !important;
7993
7993
  }
7994
7994
 
7995
- .p-1, .cherita-app-container .cherita-app-canvas {
7995
+ .p-1 {
7996
7996
  padding: 0.25rem !important;
7997
7997
  }
7998
7998
 
@@ -8666,7 +8666,7 @@ textarea.form-control-lg {
8666
8666
  --bs-link-underline-opacity: 1;
8667
8667
  }
8668
8668
 
8669
- .bg-primary, .js-plotly-plot .plotly .modebar .modebar-group {
8669
+ .bg-primary {
8670
8670
  --bs-bg-opacity: 1;
8671
8671
  background-color: rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important;
8672
8672
  }
@@ -11927,7 +11927,6 @@ textarea.form-control-lg {
11927
11927
 
11928
11928
  .cherita-app {
11929
11929
  position: relative;
11930
- width: 100%;
11931
11930
  }
11932
11931
 
11933
11932
  .cherita-app .cherita-navbar {
@@ -11962,18 +11961,6 @@ textarea.form-control-lg {
11962
11961
  .cherita-app-sidebar .card-body {
11963
11962
  overflow-y: hidden;
11964
11963
  }
11965
- .cherita-app-sidebar .sidebar-plotselector {
11966
- padding: 6px;
11967
- border-bottom: 1px solid #dee2e6;
11968
- }
11969
- .cherita-app-sidebar .sidebar-plotselector .plotselector-icon {
11970
- padding-bottom: 2px;
11971
- cursor: pointer;
11972
- }
11973
- .cherita-app-sidebar .sidebar-plotselector .plotselector-icon .active {
11974
- opacity: 1;
11975
- border-bottom: 2px solid #007bff;
11976
- }
11977
11964
  .cherita-app-sidebar .sidebar-pseudospatial {
11978
11965
  padding: 10px;
11979
11966
  border-bottom: 1px solid #dee2e6;
@@ -12024,77 +12011,36 @@ textarea.form-control-lg {
12024
12011
  border-left: 1px solid #dee2e6;
12025
12012
  }
12026
12013
 
12027
- .cherita-app-canvas .cherita-plot {
12028
- height: 100%;
12029
- min-height: 400px;
12030
- }
12031
-
12032
- .cherita-app-container {
12033
- display: flex;
12034
- flex-wrap: nowrap;
12035
- width: 100%;
12036
- height: 100%;
12037
- }
12038
- .cherita-app-container .cherita-app-obs {
12039
- flex: 0 0 auto;
12040
- min-width: 350px;
12041
- max-width: 20%;
12042
- overflow-y: auto;
12043
- }
12044
- .cherita-app-container .cherita-app-canvas {
12045
- flex: 1 1 auto;
12046
- min-width: 400px;
12047
- position: relative;
12048
- max-height: 100%;
12049
- display: flex;
12050
- flex-direction: column;
12051
- }
12052
- .cherita-app-container .cherita-app-canvas .cherita-navbar {
12053
- position: relative;
12054
- }
12055
- .cherita-app-container .cherita-app-sidebar {
12056
- flex: 0 0 auto;
12057
- min-width: 350px;
12058
- max-width: 20%;
12059
- position: relative;
12060
- }
12061
- @media (max-width: 1400px) {
12062
- .cherita-app-container .cherita-app-obs,
12063
- .cherita-app-container .cherita-app-sidebar {
12064
- max-width: 25%;
12065
- }
12066
- }
12067
-
12068
12014
  .ps-xs-1 {
12069
12015
  padding-left: 0.15rem !important;
12070
12016
  }
12071
12017
 
12072
- .js-plotly-plot .plotly .modebar .modebar-group {
12018
+ .js-plotly-plot .plotly .modebar {
12073
12019
  border-radius: 5px;
12074
- padding: 4px !important;
12020
+ background-color: rgba(0, 0, 0, 0.6);
12021
+ padding: 0 4px !important;
12022
+ }
12023
+ .js-plotly-plot .plotly .modebar .modebar-group {
12024
+ margin: 0 !important;
12025
+ padding: 0 !important;
12026
+ background-color: transparent !important;
12075
12027
  }
12076
12028
  .js-plotly-plot .plotly .modebar .modebar-group .modebar-btn {
12077
- display: inline-flex;
12078
- justify-content: center;
12029
+ fill: white !important; /* Ensures white icons */
12030
+ color: white !important; /* Ensures text/icons are visible */
12079
12031
  position: relative;
12080
- font-size: 1.25rem;
12081
- padding: 0.25rem;
12032
+ font-size: 16px;
12033
+ padding: 4px;
12082
12034
  height: auto;
12083
12035
  cursor: pointer;
12084
12036
  line-height: normal;
12085
12037
  }
12086
12038
  .js-plotly-plot .plotly .modebar .modebar-group .modebar-btn svg {
12087
12039
  position: relative;
12088
- top: 1px;
12089
- }
12090
- .js-plotly-plot .plotly .modebar .modebar-group .modebar-btn svg path {
12091
- fill: white !important;
12092
- color: white !important;
12093
- }
12094
-
12095
- .js-plotly-plot .plotly .modebar--hover > :not(.watermark) {
12096
- opacity: 0.5;
12097
- transition: opacity 0.3s;
12040
+ top: auto;
12041
+ bottom: auto;
12042
+ left: auto;
12043
+ right: auto;
12098
12044
  }
12099
12045
 
12100
12046
  .cherita-spatial-controls {
@@ -12172,6 +12118,7 @@ textarea.form-control-lg {
12172
12118
 
12173
12119
  /* End scrollbar styling */
12174
12120
  .cherita-container-plot {
12121
+ margin-top: 76px;
12175
12122
  padding: 20px;
12176
12123
  position: relative;
12177
12124
  min-height: 400px;