@haniffalab/cherita-react 1.2.0 → 1.3.0-dev.2025-05-29.ee7e9b72

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 (91) hide show
  1. package/dist/cjs/components/controls/Controls.js +60 -0
  2. package/dist/cjs/components/dotplot/Dotplot.js +47 -38
  3. package/dist/cjs/components/dotplot/DotplotControls.js +77 -114
  4. package/dist/cjs/components/full-page/FullPage.js +29 -33
  5. package/dist/cjs/components/full-page/FullPagePseudospatial.js +30 -33
  6. package/dist/cjs/components/heatmap/Heatmap.js +33 -22
  7. package/dist/cjs/components/heatmap/HeatmapControls.js +2 -19
  8. package/dist/cjs/components/matrixplot/Matrixplot.js +35 -24
  9. package/dist/cjs/components/matrixplot/MatrixplotControls.js +4 -34
  10. package/dist/cjs/components/obs-list/ObsItem.js +63 -51
  11. package/dist/cjs/components/obs-list/ObsList.js +53 -48
  12. package/dist/cjs/components/obsm-list/ObsmList.js +17 -12
  13. package/dist/cjs/components/offcanvas/index.js +14 -11
  14. package/dist/cjs/components/pseudospatial/Pseudospatial.js +78 -68
  15. package/dist/cjs/components/pseudospatial/PseudospatialToolbar.js +27 -21
  16. package/dist/cjs/components/scatterplot/Scatterplot.js +82 -76
  17. package/dist/cjs/components/scatterplot/ScatterplotControls.js +18 -31
  18. package/dist/cjs/components/scatterplot/SpatialControls.js +53 -23
  19. package/dist/cjs/components/scatterplot/Toolbox.js +1 -18
  20. package/dist/cjs/components/search-bar/SearchBar.js +156 -59
  21. package/dist/cjs/components/search-bar/SearchInfo.js +182 -0
  22. package/dist/cjs/components/search-bar/SearchResults.js +90 -60
  23. package/dist/cjs/components/var-list/VarItem.js +52 -75
  24. package/dist/cjs/components/var-list/VarList.js +47 -172
  25. package/dist/cjs/components/var-list/VarListToolbar.js +7 -8
  26. package/dist/cjs/components/var-list/VarSet.js +66 -57
  27. package/dist/cjs/components/violin/Violin.js +54 -43
  28. package/dist/cjs/components/violin/ViolinControls.js +4 -20
  29. package/dist/cjs/context/DatasetContext.js +26 -513
  30. package/dist/cjs/context/FilterContext.js +9 -8
  31. package/dist/cjs/context/SettingsContext.js +539 -0
  32. package/dist/cjs/context/ZarrDataContext.js +1 -2
  33. package/dist/cjs/helpers/color-helper.js +8 -8
  34. package/dist/cjs/helpers/zarr-helper.js +19 -16
  35. package/dist/cjs/utils/Filter.js +25 -21
  36. package/dist/cjs/utils/Histogram.js +4 -3
  37. package/dist/cjs/utils/ImageViewer.js +1 -2
  38. package/dist/cjs/utils/Legend.js +18 -12
  39. package/dist/cjs/utils/LoadingIndicators.js +1 -1
  40. package/dist/cjs/utils/VirtualizedList.js +16 -13
  41. package/dist/cjs/utils/errors.js +20 -22
  42. package/dist/cjs/utils/requests.js +13 -10
  43. package/dist/cjs/utils/zarrData.js +31 -50
  44. package/dist/css/cherita.css +84 -24
  45. package/dist/css/cherita.css.map +1 -1
  46. package/dist/esm/components/controls/Controls.js +51 -0
  47. package/dist/esm/components/dotplot/Dotplot.js +47 -37
  48. package/dist/esm/components/dotplot/DotplotControls.js +77 -112
  49. package/dist/esm/components/full-page/FullPage.js +29 -32
  50. package/dist/esm/components/full-page/FullPagePseudospatial.js +30 -32
  51. package/dist/esm/components/heatmap/Heatmap.js +32 -20
  52. package/dist/esm/components/heatmap/HeatmapControls.js +3 -20
  53. package/dist/esm/components/matrixplot/Matrixplot.js +34 -22
  54. package/dist/esm/components/matrixplot/MatrixplotControls.js +5 -35
  55. package/dist/esm/components/obs-list/ObsItem.js +63 -49
  56. package/dist/esm/components/obs-list/ObsList.js +53 -47
  57. package/dist/esm/components/obsm-list/ObsmList.js +17 -11
  58. package/dist/esm/components/offcanvas/index.js +14 -11
  59. package/dist/esm/components/pseudospatial/Pseudospatial.js +77 -66
  60. package/dist/esm/components/pseudospatial/PseudospatialToolbar.js +27 -20
  61. package/dist/esm/components/scatterplot/Scatterplot.js +81 -74
  62. package/dist/esm/components/scatterplot/ScatterplotControls.js +18 -29
  63. package/dist/esm/components/scatterplot/SpatialControls.js +54 -23
  64. package/dist/esm/components/scatterplot/Toolbox.js +1 -18
  65. package/dist/esm/components/search-bar/SearchBar.js +156 -59
  66. package/dist/esm/components/search-bar/SearchInfo.js +173 -0
  67. package/dist/esm/components/search-bar/SearchResults.js +91 -60
  68. package/dist/esm/components/var-list/VarItem.js +53 -76
  69. package/dist/esm/components/var-list/VarList.js +47 -171
  70. package/dist/esm/components/var-list/VarListToolbar.js +6 -6
  71. package/dist/esm/components/var-list/VarSet.js +67 -57
  72. package/dist/esm/components/violin/Violin.js +53 -41
  73. package/dist/esm/components/violin/ViolinControls.js +5 -21
  74. package/dist/esm/context/DatasetContext.js +25 -510
  75. package/dist/esm/context/FilterContext.js +8 -6
  76. package/dist/esm/context/SettingsContext.js +528 -0
  77. package/dist/esm/helpers/color-helper.js +8 -8
  78. package/dist/esm/helpers/zarr-helper.js +19 -16
  79. package/dist/esm/utils/Filter.js +25 -21
  80. package/dist/esm/utils/Histogram.js +4 -3
  81. package/dist/esm/utils/Legend.js +17 -10
  82. package/dist/esm/utils/LoadingIndicators.js +1 -1
  83. package/dist/esm/utils/VirtualizedList.js +15 -11
  84. package/dist/esm/utils/errors.js +20 -22
  85. package/dist/esm/utils/requests.js +13 -10
  86. package/dist/esm/utils/zarrData.js +33 -51
  87. package/package.json +6 -3
  88. package/scss/cherita.scss +50 -9
  89. package/scss/components/layouts.scss +24 -13
  90. package/scss/components/lists.scss +10 -0
  91. package/scss/components/plots.scss +3 -5
@@ -13,9 +13,11 @@ var _editModes = require("@nebula.gl/edit-modes");
13
13
  var _layers2 = require("@nebula.gl/layers");
14
14
  var _lodash = _interopRequireDefault(require("lodash"));
15
15
  var _reactBootstrap = require("react-bootstrap");
16
+ var _SpatialControls = require("./SpatialControls");
17
+ var _Toolbox = require("./Toolbox");
16
18
  var _constants = require("../../constants/constants");
17
- var _DatasetContext = require("../../context/DatasetContext");
18
19
  var _FilterContext = require("../../context/FilterContext");
20
+ var _SettingsContext = require("../../context/SettingsContext");
19
21
  var _ZarrDataContext = require("../../context/ZarrDataContext");
20
22
  var _colorHelper = require("../../helpers/color-helper");
21
23
  var _mapHelper = require("../../helpers/map-helper");
@@ -23,11 +25,13 @@ var _Legend = require("../../utils/Legend");
23
25
  var _LoadingIndicators = require("../../utils/LoadingIndicators");
24
26
  var _string = require("../../utils/string");
25
27
  var _zarrData = require("../../utils/zarrData");
26
- var _SpatialControls = require("./SpatialControls");
27
- var _Toolbox = require("./Toolbox");
28
28
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
29
- function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
30
- function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
29
+ 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); }
30
+ 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; }
31
+ 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; }
32
+ 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; }
33
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
34
+ 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
35
  window.deck.log.level = 1;
32
36
  const INITIAL_VIEW_STATE = {
33
37
  longitude: 0,
@@ -38,17 +42,21 @@ const INITIAL_VIEW_STATE = {
38
42
  bearing: 0
39
43
  };
40
44
  function Scatterplot(_ref) {
45
+ var _settings$selectedObs3, _features$features2, _obsmData$serverError, _xData$serverError, _obsData$serverError, _labelObsData$serverE, _settings$selectedVar, _settings$selectedObs4, _obsmData$data;
41
46
  let {
42
- radius = 30
47
+ radius = 30,
48
+ setShowObs,
49
+ setShowVars,
50
+ isFullscreen = false
43
51
  } = _ref;
44
- const dataset = (0, _DatasetContext.useDataset)();
52
+ const settings = (0, _SettingsContext.useSettings)();
45
53
  const {
46
54
  obsIndices,
47
55
  valueMin,
48
56
  valueMax,
49
57
  slicedLength
50
58
  } = (0, _FilterContext.useFilteredData)();
51
- const dispatch = (0, _DatasetContext.useDatasetDispatch)();
59
+ const dispatch = (0, _SettingsContext.useSettingsDispatch)();
52
60
  const {
53
61
  getColor
54
62
  } = (0, _colorHelper.useColor)();
@@ -66,7 +74,7 @@ function Scatterplot(_ref) {
66
74
  const [mode, setMode] = (0, _react.useState)(() => _editModes.ViewMode);
67
75
  const [features, setFeatures] = (0, _react.useState)({
68
76
  type: "FeatureCollection",
69
- features: dataset.polygons[dataset.selectedObsm] || []
77
+ features: settings.polygons[settings.selectedObsm] || []
70
78
  });
71
79
  const [selectedFeatureIndexes, setSelectedFeatureIndexes] = (0, _react.useState)([]);
72
80
  const {
@@ -79,12 +87,12 @@ function Scatterplot(_ref) {
79
87
 
80
88
  (0, _react.useEffect)(() => {
81
89
  if (!obsmData.isPending && !obsmData.serverError) {
90
+ var _deckRef$current, _deckRef$current2;
82
91
  setIsRendering(true);
83
92
  setData(d => {
84
- return {
85
- ...d,
93
+ return _objectSpread(_objectSpread({}, d), {}, {
86
94
  positions: obsmData.data
87
- };
95
+ });
88
96
  });
89
97
  const mapHelper = new _mapHelper.MapHelper();
90
98
  const {
@@ -92,35 +100,34 @@ function Scatterplot(_ref) {
92
100
  longitude,
93
101
  zoom
94
102
  } = mapHelper.fitBounds(obsmData.data, {
95
- width: deckRef?.current?.deck?.width,
96
- height: deckRef?.current?.deck?.height
103
+ width: deckRef === null || deckRef === void 0 || (_deckRef$current = deckRef.current) === null || _deckRef$current === void 0 || (_deckRef$current = _deckRef$current.deck) === null || _deckRef$current === void 0 ? void 0 : _deckRef$current.width,
104
+ height: deckRef === null || deckRef === void 0 || (_deckRef$current2 = deckRef.current) === null || _deckRef$current2 === void 0 || (_deckRef$current2 = _deckRef$current2.deck) === null || _deckRef$current2 === void 0 ? void 0 : _deckRef$current2.height
97
105
  });
98
106
  setViewState(v => {
99
- return {
100
- ...v,
107
+ return _objectSpread(_objectSpread({}, v), {}, {
101
108
  longitude: longitude,
102
109
  latitude: latitude,
103
110
  zoom: zoom
104
- };
111
+ });
105
112
  });
106
113
  } else if (!obsmData.isPending && obsmData.serverError) {
107
114
  setIsRendering(true);
108
115
  setData(d => {
109
- return {
110
- ...d,
116
+ return _objectSpread(_objectSpread({}, d), {}, {
111
117
  positions: []
112
- };
118
+ });
113
119
  });
114
120
  }
115
- }, [dataset.selectedObsm, obsmData.data, obsmData.isPending, obsmData.serverError]);
121
+ }, [settings.selectedObsm, obsmData.data, obsmData.isPending, obsmData.serverError]);
116
122
  const getBounds = (0, _react.useCallback)(() => {
123
+ var _deckRef$current3, _deckRef$current4;
117
124
  const {
118
125
  latitude,
119
126
  longitude,
120
127
  zoom
121
128
  } = new _mapHelper.MapHelper().fitBounds(data.positions, {
122
- width: deckRef?.current?.deck?.width,
123
- height: deckRef?.current?.deck?.height
129
+ width: deckRef === null || deckRef === void 0 || (_deckRef$current3 = deckRef.current) === null || _deckRef$current3 === void 0 || (_deckRef$current3 = _deckRef$current3.deck) === null || _deckRef$current3 === void 0 ? void 0 : _deckRef$current3.width,
130
+ height: deckRef === null || deckRef === void 0 || (_deckRef$current4 = deckRef.current) === null || _deckRef$current4 === void 0 || (_deckRef$current4 = _deckRef$current4.deck) === null || _deckRef$current4 === void 0 ? void 0 : _deckRef$current4.height
124
131
  });
125
132
  return {
126
133
  latitude,
@@ -129,69 +136,64 @@ function Scatterplot(_ref) {
129
136
  };
130
137
  }, [data.positions]);
131
138
  (0, _react.useEffect)(() => {
132
- if (dataset.colorEncoding === _constants.COLOR_ENCODINGS.VAR) {
139
+ if (settings.colorEncoding === _constants.COLOR_ENCODINGS.VAR) {
133
140
  setIsRendering(true);
134
141
  if (!xData.isPending && !xData.serverError) {
135
142
  // @TODO: add condition to check obs slicing
136
143
  setData(d => {
137
- return {
138
- ...d,
144
+ return _objectSpread(_objectSpread({}, d), {}, {
139
145
  values: xData.data
140
- };
146
+ });
141
147
  });
142
148
  } else if (!xData.isPending && xData.serverError) {
143
149
  setData(d => {
144
- return {
145
- ...d,
150
+ return _objectSpread(_objectSpread({}, d), {}, {
146
151
  values: []
147
- };
152
+ });
148
153
  });
149
154
  }
150
155
  }
151
- }, [dataset.colorEncoding, xData.data, xData.isPending, xData.serverError, getColor]);
156
+ }, [settings.colorEncoding, xData.data, xData.isPending, xData.serverError, getColor]);
152
157
  (0, _react.useEffect)(() => {
153
- if (dataset.colorEncoding === _constants.COLOR_ENCODINGS.OBS) {
158
+ if (settings.colorEncoding === _constants.COLOR_ENCODINGS.OBS) {
154
159
  setIsRendering(true);
155
160
  if (!obsData.isPending && !obsData.serverError) {
156
161
  setData(d => {
157
- return {
158
- ...d,
162
+ return _objectSpread(_objectSpread({}, d), {}, {
159
163
  values: obsData.data
160
- };
164
+ });
161
165
  });
162
166
  } else if (!obsData.isPending && obsData.serverError) {
163
167
  setData(d => {
164
- return {
165
- ...d,
168
+ return _objectSpread(_objectSpread({}, d), {}, {
166
169
  values: []
167
- };
170
+ });
168
171
  });
169
172
  }
170
- } else if (dataset.colorEncoding === _constants.COLOR_ENCODINGS.VAR && dataset.sliceBy.obs) {
173
+ } else if (settings.colorEncoding === _constants.COLOR_ENCODINGS.VAR && settings.sliceBy.obs) {
171
174
  if (!obsData.isPending && !obsData.serverError) {
172
175
  setData(d => {
173
- return {
174
- ...d,
176
+ return _objectSpread(_objectSpread({}, d), {}, {
175
177
  sliceValues: obsData.data
176
- };
178
+ });
177
179
  });
178
180
  } else if (!obsData.isPending && obsData.serverError) {
179
181
  setData(d => {
180
- return {
181
- ...d,
182
+ return _objectSpread(_objectSpread({}, d), {}, {
182
183
  sliceValues: []
183
- };
184
+ });
184
185
  });
185
186
  }
186
187
  }
187
- }, [dataset.colorEncoding, obsData.data, obsData.isPending, obsData.serverError, dataset.sliceBy.obs]);
188
+ }, [settings.colorEncoding, obsData.data, obsData.isPending, obsData.serverError, settings.sliceBy.obs]);
188
189
  const isCategorical = (0, _react.useMemo)(() => {
189
- if (dataset.colorEncoding === _constants.COLOR_ENCODINGS.OBS) {
190
- return dataset.selectedObs?.type === _constants.OBS_TYPES.CATEGORICAL || dataset.selectedObs?.type === _constants.OBS_TYPES.BOOLEAN;
190
+ if (settings.colorEncoding === _constants.COLOR_ENCODINGS.OBS) {
191
+ var _settings$selectedObs, _settings$selectedObs2;
192
+ return ((_settings$selectedObs = settings.selectedObs) === null || _settings$selectedObs === void 0 ? void 0 : _settings$selectedObs.type) === _constants.OBS_TYPES.CATEGORICAL || ((_settings$selectedObs2 = settings.selectedObs) === null || _settings$selectedObs2 === void 0 ? void 0 : _settings$selectedObs2.type) === _constants.OBS_TYPES.BOOLEAN;
191
193
  } else {
192
194
  return false;
193
195
  }
194
- }, [dataset.colorEncoding, dataset.selectedObs?.type]);
196
+ }, [settings.colorEncoding, (_settings$selectedObs3 = settings.selectedObs) === null || _settings$selectedObs3 === void 0 ? void 0 : _settings$selectedObs3.type]);
195
197
  (0, _react.useEffect)(() => {
196
198
  dispatch({
197
199
  type: "set.controls.valueRange",
@@ -202,8 +204,8 @@ function Scatterplot(_ref) {
202
204
  min,
203
205
  max
204
206
  } = {
205
- min: dataset.controls.range[0] * (valueMax - valueMin) + valueMin,
206
- max: dataset.controls.range[1] * (valueMax - valueMin) + valueMin
207
+ min: settings.controls.range[0] * (valueMax - valueMin) + valueMin,
208
+ max: settings.controls.range[1] * (valueMax - valueMin) + valueMin
207
209
  };
208
210
  const getFillColor = (0, _react.useCallback)((_d, _ref2) => {
209
211
  let {
@@ -277,19 +279,20 @@ function Scatterplot(_ref) {
277
279
  const layers = (0, _react.useDeferredValue)(mode === _editModes.ViewMode ? memoizedLayers.reverse() : memoizedLayers); // draw scatterplot on top of polygons when in ViewMode
278
280
 
279
281
  (0, _react.useEffect)(() => {
280
- if (!features?.features?.length) {
282
+ var _features$features;
283
+ if (!(features !== null && features !== void 0 && (_features$features = features.features) !== null && _features$features !== void 0 && _features$features.length)) {
281
284
  dispatch({
282
285
  type: "disable.slice.polygons"
283
286
  });
284
287
  }
285
- }, [dispatch, features?.features?.length]);
288
+ }, [dispatch, features === null || features === void 0 || (_features$features2 = features.features) === null || _features$features2 === void 0 ? void 0 : _features$features2.length]);
286
289
  (0, _react.useEffect)(() => {
287
290
  dispatch({
288
291
  type: "set.polygons",
289
- obsm: dataset.selectedObsm,
290
- polygons: features?.features || []
292
+ obsm: settings.selectedObsm,
293
+ polygons: (features === null || features === void 0 ? void 0 : features.features) || []
291
294
  });
292
- }, [dataset.selectedObsm, dispatch, features.features]);
295
+ }, [settings.selectedObsm, dispatch, features.features]);
293
296
  function onLayerClick(info) {
294
297
  if (mode !== _editModes.ViewMode) {
295
298
  // don't change selection while editing
@@ -300,9 +303,9 @@ function Scatterplot(_ref) {
300
303
  const getLabel = function (o, v) {
301
304
  let isVar = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
302
305
  if (isVar || o.type === _constants.OBS_TYPES.CONTINUOUS) {
303
- return `${o.name}: ${(0, _string.formatNumerical)(parseFloat(v))}`;
306
+ return "".concat(o.name, ": ").concat((0, _string.formatNumerical)(parseFloat(v)));
304
307
  } else {
305
- return `${o.name}: ${o.codesMap[v]}`;
308
+ return "".concat(o.name, ": ").concat(o.codesMap[v]);
306
309
  }
307
310
  };
308
311
  const getTooltip = _ref5 => {
@@ -310,19 +313,21 @@ function Scatterplot(_ref) {
310
313
  object,
311
314
  index
312
315
  } = _ref5;
313
- if (!object || object?.type === "Feature") return;
316
+ if (!object || (object === null || object === void 0 ? void 0 : object.type) === "Feature") return;
314
317
  const text = [];
315
- if (dataset.colorEncoding === _constants.COLOR_ENCODINGS.OBS && dataset.selectedObs && !_lodash.default.some(dataset.labelObs, {
316
- name: dataset.selectedObs.name
318
+ if (settings.colorEncoding === _constants.COLOR_ENCODINGS.OBS && settings.selectedObs && !_lodash.default.some(settings.labelObs, {
319
+ name: settings.selectedObs.name
317
320
  })) {
318
- text.push(getLabel(dataset.selectedObs, obsData.data?.[index]));
321
+ var _obsData$data;
322
+ text.push(getLabel(settings.selectedObs, (_obsData$data = obsData.data) === null || _obsData$data === void 0 ? void 0 : _obsData$data[index]));
319
323
  }
320
- if (dataset.colorEncoding === _constants.COLOR_ENCODINGS.VAR && dataset.selectedVar) {
321
- text.push(getLabel(dataset.selectedVar, xData.data?.[index], true));
324
+ if (settings.colorEncoding === _constants.COLOR_ENCODINGS.VAR && settings.selectedVar) {
325
+ var _xData$data;
326
+ text.push(getLabel(settings.selectedVar, (_xData$data = xData.data) === null || _xData$data === void 0 ? void 0 : _xData$data[index], true));
322
327
  }
323
- if (dataset.labelObs.length) {
328
+ if (settings.labelObs.length) {
324
329
  text.push(..._lodash.default.map(labelObsData.data, (v, k) => {
325
- const labelObs = _lodash.default.find(dataset.labelObs, o => o.name === k);
330
+ const labelObs = _lodash.default.find(settings.labelObs, o => o.name === k);
326
331
  return getLabel(labelObs, v[index]);
327
332
  }));
328
333
  }
@@ -332,16 +337,16 @@ function Scatterplot(_ref) {
332
337
  text: text.length ? _lodash.default.compact(text).join("\n") : null,
333
338
  className: grayOut ? "tooltip-grayout" : "deck-tooltip",
334
339
  style: !grayOut ? {
335
- "border-left": `3px solid ${(0, _colorHelper.rgbToHex)(getFillColor(null, {
340
+ "border-left": "3px solid ".concat((0, _colorHelper.rgbToHex)(getFillColor(null, {
336
341
  index
337
- }))}`
342
+ })))
338
343
  } : {
339
344
  "border-left": "none"
340
345
  }
341
346
  };
342
347
  };
343
348
  const isPending = (isRendering || xData.isPending || obsmData.isPending) && !obsmData.isPending;
344
- const error = dataset.selectedObsm && obsmData.serverError?.length || dataset.colorEncoding === _constants.COLOR_ENCODINGS.VAR && xData.serverError?.length || dataset.colorEncoding === _constants.COLOR_ENCODINGS.OBS && obsData.serverError?.length || dataset.labelObs.lengh && labelObsData.serverError?.length;
349
+ const error = settings.selectedObsm && ((_obsmData$serverError = obsmData.serverError) === null || _obsmData$serverError === void 0 ? void 0 : _obsmData$serverError.length) || settings.colorEncoding === _constants.COLOR_ENCODINGS.VAR && ((_xData$serverError = xData.serverError) === null || _xData$serverError === void 0 ? void 0 : _xData$serverError.length) || settings.colorEncoding === _constants.COLOR_ENCODINGS.OBS && ((_obsData$serverError = obsData.serverError) === null || _obsData$serverError === void 0 ? void 0 : _obsData$serverError.length) || settings.labelObs.lengh && ((_labelObsData$serverE = labelObsData.serverError) === null || _labelObsData$serverE === void 0 ? void 0 : _labelObsData$serverE.length);
345
350
  return /*#__PURE__*/_react.default.createElement("div", {
346
351
  className: "cherita-container-scatterplot"
347
352
  }, /*#__PURE__*/_react.default.createElement("div", {
@@ -375,14 +380,15 @@ function Scatterplot(_ref) {
375
380
  setFeatures: setFeatures,
376
381
  selectedFeatureIndexes: selectedFeatureIndexes,
377
382
  resetBounds: () => setViewState(getBounds()),
378
- increaseZoom: () => setViewState(v => ({
379
- ...v,
383
+ increaseZoom: () => setViewState(v => _objectSpread(_objectSpread({}, v), {}, {
380
384
  zoom: v.zoom + 1
381
385
  })),
382
- decreaseZoom: () => setViewState(v => ({
383
- ...v,
386
+ decreaseZoom: () => setViewState(v => _objectSpread(_objectSpread({}, v), {}, {
384
387
  zoom: v.zoom - 1
385
- }))
388
+ })),
389
+ setShowObs: setShowObs,
390
+ setShowVars: setShowVars,
391
+ isFullscreen: isFullscreen
386
392
  }), /*#__PURE__*/_react.default.createElement("div", {
387
393
  className: "cherita-spatial-footer"
388
394
  }, /*#__PURE__*/_react.default.createElement("div", {
@@ -392,8 +398,8 @@ function Scatterplot(_ref) {
392
398
  }, /*#__PURE__*/_react.default.createElement(_reactFontawesome.FontAwesomeIcon, {
393
399
  icon: _freeSolidSvgIcons.faTriangleExclamation
394
400
  }), "\xA0Error loading data"), /*#__PURE__*/_react.default.createElement(_Toolbox.Toolbox, {
395
- mode: dataset.colorEncoding === _constants.COLOR_ENCODINGS.VAR ? dataset.selectedVar.name : dataset.colorEncoding === _constants.COLOR_ENCODINGS.OBS ? dataset.selectedObs.name : null,
396
- obsLength: parseInt(obsmData.data?.length),
401
+ mode: settings.colorEncoding === _constants.COLOR_ENCODINGS.VAR ? (_settings$selectedVar = settings.selectedVar) === null || _settings$selectedVar === void 0 ? void 0 : _settings$selectedVar.name : settings.colorEncoding === _constants.COLOR_ENCODINGS.OBS ? (_settings$selectedObs4 = settings.selectedObs) === null || _settings$selectedObs4 === void 0 ? void 0 : _settings$selectedObs4.name : null,
402
+ obsLength: parseInt((_obsmData$data = obsmData.data) === null || _obsmData$data === void 0 ? void 0 : _obsmData$data.length),
397
403
  slicedLength: parseInt(slicedLength)
398
404
  })), /*#__PURE__*/_react.default.createElement(_Legend.Legend, {
399
405
  isCategorical: isCategorical,
@@ -6,31 +6,19 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.ScatterplotControls = void 0;
7
7
  var _react = _interopRequireWildcard(require("react"));
8
8
  var _material = require("@mui/material");
9
- var _lodash = _interopRequireDefault(require("lodash"));
10
9
  var _reactBootstrap = require("react-bootstrap");
11
- var _colorscales = require("../../constants/colorscales");
12
10
  var _constants = require("../../constants/constants");
13
- var _DatasetContext = require("../../context/DatasetContext");
14
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
15
- function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
16
- function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
11
+ var _SettingsContext = require("../../context/SettingsContext");
12
+ var _Controls = require("../controls/Controls");
13
+ 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); }
17
14
  const ScatterplotControls = () => {
18
- const dataset = (0, _DatasetContext.useDataset)();
19
- const dispatch = (0, _DatasetContext.useDatasetDispatch)();
20
- const [sliderValue, setSliderValue] = _react.default.useState(dataset.controls.range || [0, 1]);
21
- const isCategorical = dataset.colorEncoding === _constants.COLOR_ENCODINGS.OBS ? dataset.selectedObs?.type === _constants.OBS_TYPES.CATEGORICAL : false;
22
- const colormapList = _lodash.default.keys(_colorscales.COLORSCALES).map(key => /*#__PURE__*/_react.default.createElement(_reactBootstrap.Dropdown.Item, {
23
- key: key,
24
- active: dataset.controls.colorScale === key,
25
- onClick: () => {
26
- dispatch({
27
- type: "set.controls.colorScale",
28
- colorScale: key
29
- });
30
- }
31
- }, key));
15
+ var _settings$selectedObs;
16
+ const settings = (0, _SettingsContext.useSettings)();
17
+ const dispatch = (0, _SettingsContext.useSettingsDispatch)();
18
+ const [sliderValue, setSliderValue] = _react.default.useState(settings.controls.range || [0, 1]);
19
+ const isCategorical = settings.colorEncoding === _constants.COLOR_ENCODINGS.OBS ? ((_settings$selectedObs = settings.selectedObs) === null || _settings$selectedObs === void 0 ? void 0 : _settings$selectedObs.type) === _constants.OBS_TYPES.CATEGORICAL : false;
32
20
  const valueLabelFormat = value => {
33
- return (value * (dataset.controls.valueRange[1] - dataset.controls.valueRange[0]) + dataset.controls.valueRange[0]).toFixed(2);
21
+ return (value * (settings.controls.valueRange[1] - settings.controls.valueRange[0]) + settings.controls.valueRange[0]).toFixed(2);
34
22
  };
35
23
  const marks = [{
36
24
  value: 0,
@@ -50,14 +38,16 @@ const ScatterplotControls = () => {
50
38
  });
51
39
  };
52
40
  (0, _react.useEffect)(() => {
53
- setSliderValue(dataset.controls.range);
54
- }, [dataset.controls.range]);
41
+ setSliderValue(settings.controls.range);
42
+ }, [settings.controls.range]);
55
43
  const rangeSlider = /*#__PURE__*/_react.default.createElement(_material.Box, {
56
44
  className: "w-100"
57
45
  }, /*#__PURE__*/_react.default.createElement(_material.Typography, {
58
46
  id: "colorscale-range",
59
47
  gutterBottom: true
60
- }, "Colorscale range"), /*#__PURE__*/_react.default.createElement(_material.Slider, {
48
+ }, "Colorscale range"), /*#__PURE__*/_react.default.createElement("div", {
49
+ className: "px-4"
50
+ }, /*#__PURE__*/_react.default.createElement(_material.Slider, {
61
51
  "aria-labelledby": "colorscale-range",
62
52
  min: 0,
63
53
  max: 1,
@@ -70,12 +60,9 @@ const ScatterplotControls = () => {
70
60
  valueLabelFormat: valueLabelFormat,
71
61
  marks: marks,
72
62
  disabled: isCategorical
73
- }));
74
- return /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Dropdown, null, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Dropdown.Toggle, {
75
- id: "dropdownColorscale",
76
- variant: "light"
77
- }, dataset.controls.colorScale), /*#__PURE__*/_react.default.createElement(_reactBootstrap.Dropdown.Menu, null, colormapList)), /*#__PURE__*/_react.default.createElement("div", {
78
- className: "m-4"
79
- }, rangeSlider));
63
+ })));
64
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Form, null, /*#__PURE__*/_react.default.createElement(_Controls.ColorscaleSelect, null), /*#__PURE__*/_react.default.createElement(_reactBootstrap.Form.Group, {
65
+ className: "mb-2"
66
+ }, rangeSlider)));
80
67
  };
81
68
  exports.ScatterplotControls = ScatterplotControls;
@@ -8,17 +8,20 @@ var _react = _interopRequireWildcard(require("react"));
8
8
  var _freeSolidSvgIcons = require("@fortawesome/free-solid-svg-icons");
9
9
  var _reactFontawesome = require("@fortawesome/react-fontawesome");
10
10
  var _iconsMaterial = require("@mui/icons-material");
11
+ var _useMediaQuery = _interopRequireDefault(require("@mui/material/useMediaQuery"));
11
12
  var _editModes = require("@nebula.gl/edit-modes");
13
+ var _reactBootstrap = require("react-bootstrap");
12
14
  var _Button = _interopRequireDefault(require("react-bootstrap/Button"));
13
15
  var _ButtonGroup = _interopRequireDefault(require("react-bootstrap/ButtonGroup"));
14
16
  var _Dropdown = _interopRequireDefault(require("react-bootstrap/Dropdown"));
15
17
  var _DatasetContext = require("../../context/DatasetContext");
16
18
  var _offcanvas = require("../offcanvas");
17
19
  var _ScatterplotControls = require("./ScatterplotControls");
20
+ var _SettingsContext = require("../../context/SettingsContext");
18
21
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
19
- function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
20
- function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
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); }
21
23
  function SpatialControls(_ref) {
24
+ var _features$features;
22
25
  let {
23
26
  mode,
24
27
  setMode,
@@ -27,13 +30,20 @@ function SpatialControls(_ref) {
27
30
  selectedFeatureIndexes,
28
31
  resetBounds,
29
32
  increaseZoom,
30
- decreaseZoom
33
+ decreaseZoom,
34
+ setShowObs,
35
+ setShowVars,
36
+ isFullscreen
31
37
  } = _ref;
32
- const dataset = (0, _DatasetContext.useDataset)();
33
- const dispatch = (0, _DatasetContext.useDatasetDispatch)();
38
+ const settings = (0, _SettingsContext.useSettings)();
39
+ const dispatch = (0, _SettingsContext.useSettingsDispatch)();
34
40
  const [showControls, setShowControls] = (0, _react.useState)(false);
35
41
  const handleCloseControls = () => setShowControls(false);
36
42
  const handleShowControls = () => setShowControls(true);
43
+ const LgBreakpoint = (0, _useMediaQuery.default)("(max-width: 991.98px)");
44
+ const XlBreakpoint = (0, _useMediaQuery.default)("(max-width: 1199.98px)");
45
+ const showObsBtn = isFullscreen ? LgBreakpoint : true;
46
+ const showVarsBtn = isFullscreen ? XlBreakpoint : true;
37
47
  const onSelect = (eventKey, event) => {
38
48
  switch (eventKey) {
39
49
  case "DrawPolygonMode":
@@ -62,7 +72,7 @@ function SpatialControls(_ref) {
62
72
  });
63
73
  };
64
74
  const polygonControls = /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_Button.default, {
65
- active: dataset.sliceBy.polygons,
75
+ active: settings.sliceBy.polygons,
66
76
  title: "Filter data with polygons",
67
77
  onClick: () => {
68
78
  setMode(() => _editModes.ViewMode);
@@ -85,10 +95,37 @@ function SpatialControls(_ref) {
85
95
  })));
86
96
  return /*#__PURE__*/_react.default.createElement("div", {
87
97
  className: "cherita-spatial-controls"
88
- }, /*#__PURE__*/_react.default.createElement(_ButtonGroup.default, {
98
+ }, (showObsBtn || showVarsBtn) && /*#__PURE__*/_react.default.createElement(_ButtonGroup.default, {
89
99
  vertical: true,
90
100
  className: "w-100 mb-1"
101
+ }, showObsBtn && /*#__PURE__*/_react.default.createElement(_reactBootstrap.OverlayTrigger, {
102
+ placement: "right",
103
+ overlay: /*#__PURE__*/_react.default.createElement(_reactBootstrap.Tooltip, {
104
+ id: "tooltip-obs"
105
+ }, "Browse categories")
91
106
  }, /*#__PURE__*/_react.default.createElement(_Button.default, {
107
+ onClick: () => setShowObs(true)
108
+ }, /*#__PURE__*/_react.default.createElement(_reactFontawesome.FontAwesomeIcon, {
109
+ icon: _freeSolidSvgIcons.faList
110
+ }))), showVarsBtn && /*#__PURE__*/_react.default.createElement(_reactBootstrap.OverlayTrigger, {
111
+ placement: "right",
112
+ overlay: /*#__PURE__*/_react.default.createElement(_reactBootstrap.Tooltip, {
113
+ id: "tooltip-vars"
114
+ }, "Search features")
115
+ }, /*#__PURE__*/_react.default.createElement(_Button.default, {
116
+ onClick: () => setShowVars(true)
117
+ }, /*#__PURE__*/_react.default.createElement(_reactFontawesome.FontAwesomeIcon, {
118
+ icon: _freeSolidSvgIcons.faSearch
119
+ })))), /*#__PURE__*/_react.default.createElement(_ButtonGroup.default, {
120
+ vertical: true,
121
+ className: "w-100"
122
+ }, /*#__PURE__*/_react.default.createElement(_Button.default, {
123
+ onClick: () => setMode(() => _editModes.ViewMode),
124
+ title: "Set dragging mode",
125
+ active: mode === _editModes.ViewMode
126
+ }, /*#__PURE__*/_react.default.createElement(_reactFontawesome.FontAwesomeIcon, {
127
+ icon: _freeSolidSvgIcons.faHand
128
+ })), /*#__PURE__*/_react.default.createElement(_Button.default, {
92
129
  onClick: increaseZoom,
93
130
  title: "Increase zoom"
94
131
  }, /*#__PURE__*/_react.default.createElement(_reactFontawesome.FontAwesomeIcon, {
@@ -98,24 +135,13 @@ function SpatialControls(_ref) {
98
135
  title: "Decrease zoom"
99
136
  }, /*#__PURE__*/_react.default.createElement(_reactFontawesome.FontAwesomeIcon, {
100
137
  icon: _freeSolidSvgIcons.faMinus
101
- })), /*#__PURE__*/_react.default.createElement(_Button.default, {
138
+ })), /*#__PURE__*/_react.default.createElement("div", {
139
+ className: "border-bottom"
140
+ }), " ", /*#__PURE__*/_react.default.createElement(_Button.default, {
102
141
  onClick: resetBounds,
103
142
  title: "Reset zoom and center"
104
143
  }, /*#__PURE__*/_react.default.createElement(_reactFontawesome.FontAwesomeIcon, {
105
144
  icon: _freeSolidSvgIcons.faCrosshairs
106
- })), /*#__PURE__*/_react.default.createElement(_Button.default, {
107
- onClick: handleShowControls
108
- }, /*#__PURE__*/_react.default.createElement(_reactFontawesome.FontAwesomeIcon, {
109
- icon: _freeSolidSvgIcons.faSliders
110
- }))), /*#__PURE__*/_react.default.createElement(_ButtonGroup.default, {
111
- vertical: true,
112
- className: "w-100"
113
- }, /*#__PURE__*/_react.default.createElement(_Button.default, {
114
- onClick: () => setMode(() => _editModes.ViewMode),
115
- title: "Set dragging mode",
116
- active: mode === _editModes.ViewMode
117
- }, /*#__PURE__*/_react.default.createElement(_reactFontawesome.FontAwesomeIcon, {
118
- icon: _freeSolidSvgIcons.faHand
119
145
  })), /*#__PURE__*/_react.default.createElement(_Dropdown.default, {
120
146
  as: _ButtonGroup.default,
121
147
  className: "caret-off",
@@ -123,7 +149,7 @@ function SpatialControls(_ref) {
123
149
  onSelect: onSelect
124
150
  }, /*#__PURE__*/_react.default.createElement(_Dropdown.default.Toggle, {
125
151
  id: "dropdown-autoclose-outside",
126
- className: `caret-off ${mode === _editModes.DrawPolygonByDraggingMode || mode === _editModes.ModifyMode ? "active" : ""}`
152
+ className: "caret-off ".concat(mode === _editModes.DrawPolygonByDraggingMode || mode === _editModes.ModifyMode ? "active" : "")
127
153
  }, /*#__PURE__*/_react.default.createElement(_reactFontawesome.FontAwesomeIcon, {
128
154
  icon: _freeSolidSvgIcons.faDrawPolygon
129
155
  })), /*#__PURE__*/_react.default.createElement(_Dropdown.default.Menu, null, /*#__PURE__*/_react.default.createElement(_Dropdown.default.Header, null, "Polygon tools"), /*#__PURE__*/_react.default.createElement(_Dropdown.default.Item, {
@@ -141,7 +167,11 @@ function SpatialControls(_ref) {
141
167
  }, /*#__PURE__*/_react.default.createElement(_reactFontawesome.FontAwesomeIcon, {
142
168
  icon: _freeSolidSvgIcons.faTrash,
143
169
  className: "nav-icon"
144
- }), "Delete polygons"))), !!features?.features?.length && polygonControls), /*#__PURE__*/_react.default.createElement(_offcanvas.OffcanvasControls, {
170
+ }), "Delete polygons"))), !!(features !== null && features !== void 0 && (_features$features = features.features) !== null && _features$features !== void 0 && _features$features.length) && polygonControls, /*#__PURE__*/_react.default.createElement(_Button.default, {
171
+ onClick: handleShowControls
172
+ }, /*#__PURE__*/_react.default.createElement(_reactFontawesome.FontAwesomeIcon, {
173
+ icon: _freeSolidSvgIcons.faSliders
174
+ }))), /*#__PURE__*/_react.default.createElement(_offcanvas.OffcanvasControls, {
145
175
  show: showControls,
146
176
  handleClose: handleCloseControls,
147
177
  Controls: _ScatterplotControls.ScatterplotControls
@@ -5,8 +5,6 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.Toolbox = Toolbox;
7
7
  var _react = _interopRequireDefault(require("react"));
8
- var _freeSolidSvgIcons = require("@fortawesome/free-solid-svg-icons");
9
- var _reactFontawesome = require("@fortawesome/react-fontawesome");
10
8
  var _reactBootstrap = require("react-bootstrap");
11
9
  var _string = require("../../utils/string");
12
10
  var _ObsmList = require("../obsm-list/ObsmList");
@@ -19,22 +17,7 @@ function Toolbox(_ref) {
19
17
  } = _ref;
20
18
  return /*#__PURE__*/_react.default.createElement("div", {
21
19
  className: "cherita-toolbox"
22
- }, /*#__PURE__*/_react.default.createElement(_reactBootstrap.ButtonGroup, null, /*#__PURE__*/_react.default.createElement(_ObsmList.ObsmKeysList, null), mode && /*#__PURE__*/_react.default.createElement(_reactBootstrap.OverlayTrigger, {
23
- placement: "top",
24
- overlay: /*#__PURE__*/_react.default.createElement(_reactBootstrap.Tooltip, {
25
- id: "tooltip-dropped-mode"
26
- }, "The color scale is currently set to ", mode)
27
- }, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Button, {
28
- size: "sm",
29
- variant: "primary",
30
- style: {
31
- cursor: "default"
32
- },
33
- "aria-disabled": "true"
34
- }, /*#__PURE__*/_react.default.createElement(_reactFontawesome.FontAwesomeIcon, {
35
- icon: _freeSolidSvgIcons.faDroplet,
36
- className: "me-1"
37
- }), " ", mode)), (mode || !isNaN(obsLength)) && (mode !== null && !isNaN(slicedLength) && slicedLength !== obsLength ? /*#__PURE__*/_react.default.createElement(_reactBootstrap.OverlayTrigger, {
20
+ }, /*#__PURE__*/_react.default.createElement(_reactBootstrap.ButtonGroup, null, /*#__PURE__*/_react.default.createElement(_ObsmList.ObsmKeysList, null), (mode || !isNaN(obsLength)) && (mode !== null && !isNaN(slicedLength) && slicedLength !== obsLength ? /*#__PURE__*/_react.default.createElement(_reactBootstrap.OverlayTrigger, {
38
21
  placement: "top",
39
22
  overlay: /*#__PURE__*/_react.default.createElement(_reactBootstrap.Tooltip, {
40
23
  id: "tooltip-dropped-mode"