@haniffalab/cherita-react 1.4.1 → 1.4.2

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 +100 -74
  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 +258 -210
  20. package/dist/cjs/components/obs-list/ObsList.js +161 -133
  21. package/dist/cjs/components/obs-list/ObsToolbar.js +2 -3
  22. package/dist/cjs/components/obsm-list/ObsmList.js +53 -38
  23. package/dist/cjs/components/offcanvas/index.js +61 -31
  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 +127 -99
  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 +168 -121
  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 +115 -88
  35. package/dist/cjs/components/var-list/VarList.js +85 -69
  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 -107
  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 +47 -47
  42. package/dist/cjs/context/DatasetContext.js +24 -16
  43. package/dist/cjs/context/FilterContext.js +11 -9
  44. package/dist/cjs/context/SettingsContext.js +255 -89
  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 +34 -27
  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 +64 -42
  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 +120 -93
  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 +273 -222
  82. package/dist/esm/components/obs-list/ObsList.js +176 -147
  83. package/dist/esm/components/obs-list/ObsToolbar.js +3 -3
  84. package/dist/esm/components/obsm-list/ObsmList.js +60 -44
  85. package/dist/esm/components/offcanvas/index.js +67 -37
  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 +148 -119
  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 +180 -132
  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 +126 -98
  97. package/dist/esm/components/var-list/VarList.js +99 -82
  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 -118
  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 +47 -47
  104. package/dist/esm/context/DatasetContext.js +31 -22
  105. package/dist/esm/context/FilterContext.js +11 -8
  106. package/dist/esm/context/SettingsContext.js +257 -90
  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 +35 -27
  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 +18 -7
  127. package/scss/cherita-bootstrap.scss +2 -2
  128. package/scss/cherita.scss +43 -17
  129. package/scss/components/accordions.scss +4 -1
  130. package/scss/components/layouts.scss +15 -33
  131. package/scss/components/lists.scss +8 -4
  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,21 +4,27 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.ScatterplotControls = void 0;
7
- var _react = _interopRequireWildcard(require("react"));
7
+ var _react = require("react");
8
8
  var _material = require("@mui/material");
9
9
  var _reactBootstrap = require("react-bootstrap");
10
10
  var _constants = require("../../constants/constants");
11
+ var _FilterContext = require("../../context/FilterContext");
11
12
  var _SettingsContext = require("../../context/SettingsContext");
13
+ var _Resolver = require("../../utils/Resolver");
12
14
  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); }
15
+ var _jsxRuntime = require("react/jsx-runtime");
14
16
  const ScatterplotControls = () => {
15
- var _settings$selectedObs;
16
17
  const settings = (0, _SettingsContext.useSettings)();
17
18
  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;
19
+ const [sliderValue, setSliderValue] = (0, _react.useState)(settings.controls.range || [0, 1]);
20
+ const {
21
+ valueMin,
22
+ valueMax
23
+ } = (0, _FilterContext.useFilteredData)();
24
+ const selectedObs = (0, _Resolver.useSelectedObs)();
25
+ const isCategorical = settings.colorEncoding === _constants.COLOR_ENCODINGS.OBS ? (selectedObs === null || selectedObs === void 0 ? void 0 : selectedObs.type) === _constants.OBS_TYPES.CATEGORICAL : false;
20
26
  const valueLabelFormat = value => {
21
- return (value * (settings.controls.valueRange[1] - settings.controls.valueRange[0]) + settings.controls.valueRange[0]).toFixed(2);
27
+ return (value * (valueMax - valueMin) + valueMin).toFixed(2);
22
28
  };
23
29
  const marks = [{
24
30
  value: 0,
@@ -33,36 +39,44 @@ const ScatterplotControls = () => {
33
39
  const updateRange = (_e, value) => {
34
40
  setSliderValue(value);
35
41
  dispatch({
36
- type: "set.controls.range",
42
+ type: 'set.controls.range',
37
43
  range: sliderValue
38
44
  });
39
45
  };
40
46
  (0, _react.useEffect)(() => {
41
47
  setSliderValue(settings.controls.range);
42
48
  }, [settings.controls.range]);
43
- const rangeSlider = /*#__PURE__*/_react.default.createElement(_material.Box, {
44
- className: "w-100"
45
- }, /*#__PURE__*/_react.default.createElement(_material.Typography, {
46
- id: "colorscale-range",
47
- gutterBottom: true
48
- }, "Colorscale range"), /*#__PURE__*/_react.default.createElement("div", {
49
- className: "px-4"
50
- }, /*#__PURE__*/_react.default.createElement(_material.Slider, {
51
- "aria-labelledby": "colorscale-range",
52
- min: 0,
53
- max: 1,
54
- step: 0.001,
55
- value: sliderValue,
56
- onChange: updateSlider,
57
- onChangeCommitted: updateRange,
58
- valueLabelDisplay: "auto",
59
- getAriaValueText: valueLabelFormat,
60
- valueLabelFormat: valueLabelFormat,
61
- marks: marks,
62
- disabled: isCategorical
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)));
49
+ const rangeSlider = /*#__PURE__*/(0, _jsxRuntime.jsxs)(_material.Box, {
50
+ className: "w-100",
51
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_material.Typography, {
52
+ id: "colorscale-range",
53
+ gutterBottom: true,
54
+ children: "Colorscale range"
55
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
56
+ className: "px-4",
57
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_material.Slider, {
58
+ "aria-labelledby": "colorscale-range",
59
+ min: 0,
60
+ max: 1,
61
+ step: 0.001,
62
+ value: sliderValue,
63
+ onChange: updateSlider,
64
+ onChangeCommitted: updateRange,
65
+ valueLabelDisplay: "auto",
66
+ getAriaValueText: valueLabelFormat,
67
+ valueLabelFormat: valueLabelFormat,
68
+ marks: marks,
69
+ disabled: isCategorical
70
+ })
71
+ })]
72
+ });
73
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_jsxRuntime.Fragment, {
74
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactBootstrap.Form, {
75
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Controls.ColorscaleSelect, {}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Form.Group, {
76
+ className: "mb-2",
77
+ children: rangeSlider
78
+ })]
79
+ })
80
+ });
67
81
  };
68
82
  exports.ScatterplotControls = ScatterplotControls;
@@ -4,7 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.SpatialControls = SpatialControls;
7
- var _react = _interopRequireWildcard(require("react"));
7
+ var _react = 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");
@@ -18,8 +18,8 @@ var _offcanvas = require("../offcanvas");
18
18
  var _ScatterplotControls = require("./ScatterplotControls");
19
19
  var _constants = require("../../constants/constants");
20
20
  var _SettingsContext = require("../../context/SettingsContext");
21
+ var _jsxRuntime = require("react/jsx-runtime");
21
22
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
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); }
23
23
  function SpatialControls(_ref) {
24
24
  var _features$features;
25
25
  let {
@@ -46,19 +46,19 @@ function SpatialControls(_ref) {
46
46
  const showVarsBtn = isFullscreen ? XlBreakpoint : true;
47
47
  const onSelect = (eventKey, event) => {
48
48
  switch (eventKey) {
49
- case "DrawPolygonMode":
49
+ case 'DrawPolygonMode':
50
50
  setMode(() => _editModes.DrawPolygonMode);
51
51
  break;
52
- case "DrawLineStringMode":
52
+ case 'DrawLineStringMode':
53
53
  setMode(() => _editModes.DrawLineStringMode);
54
54
  break;
55
- case "DrawPolygonByDraggingMode":
55
+ case 'DrawPolygonByDraggingMode':
56
56
  setMode(() => _editModes.DrawPolygonByDraggingMode);
57
57
  break;
58
- case "DrawRectangleMode":
58
+ case 'DrawRectangleMode':
59
59
  setMode(() => _editModes.DrawRectangleMode);
60
60
  break;
61
- case "ModifyMode":
61
+ case 'ModifyMode':
62
62
  setMode(() => _editModes.ModifyMode);
63
63
  break;
64
64
  default:
@@ -67,113 +67,140 @@ function SpatialControls(_ref) {
67
67
  };
68
68
  const deleteFeatures = (_eventKey, _event) => {
69
69
  setFeatures({
70
- type: "FeatureCollection",
70
+ type: 'FeatureCollection',
71
71
  features: []
72
72
  });
73
73
  };
74
- const polygonControls = /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_Button.default, {
75
- active: settings.sliceBy.polygons,
76
- title: "Filter data with polygons",
77
- onClick: () => {
78
- setMode(() => _editModes.ViewMode);
79
- dispatch({
80
- type: "toggle.slice.polygons"
81
- });
82
- }
83
- }, /*#__PURE__*/_react.default.createElement(_iconsMaterial.JoinInner, null)), /*#__PURE__*/_react.default.createElement(_Button.default, {
84
- title: "Delete selected polygons",
85
- onClick: () => {
86
- const newFeatures = features.features.filter((_f, i) => !selectedFeatureIndexes.includes(i));
87
- setFeatures({
88
- type: "FeatureCollection",
89
- features: newFeatures
90
- });
91
- },
92
- disabled: !selectedFeatureIndexes.length
93
- }, /*#__PURE__*/_react.default.createElement(_reactFontawesome.FontAwesomeIcon, {
94
- icon: _freeSolidSvgIcons.faTrash
95
- })));
96
- return /*#__PURE__*/_react.default.createElement("div", {
97
- className: "cherita-spatial-controls"
98
- }, (showObsBtn || showVarsBtn) && /*#__PURE__*/_react.default.createElement(_ButtonGroup.default, {
99
- vertical: true,
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")
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, {
129
- onClick: increaseZoom,
130
- title: "Increase zoom"
131
- }, /*#__PURE__*/_react.default.createElement(_reactFontawesome.FontAwesomeIcon, {
132
- icon: _freeSolidSvgIcons.faPlus
133
- })), /*#__PURE__*/_react.default.createElement(_Button.default, {
134
- onClick: decreaseZoom,
135
- title: "Decrease zoom"
136
- }, /*#__PURE__*/_react.default.createElement(_reactFontawesome.FontAwesomeIcon, {
137
- icon: _freeSolidSvgIcons.faMinus
138
- })), /*#__PURE__*/_react.default.createElement("div", {
139
- className: "border-bottom"
140
- }), " ", /*#__PURE__*/_react.default.createElement(_Button.default, {
141
- onClick: resetBounds,
142
- title: "Reset zoom and center"
143
- }, /*#__PURE__*/_react.default.createElement(_reactFontawesome.FontAwesomeIcon, {
144
- icon: _freeSolidSvgIcons.faCrosshairs
145
- })), /*#__PURE__*/_react.default.createElement(_Dropdown.default, {
146
- as: _ButtonGroup.default,
147
- className: "caret-off",
148
- drop: "end",
149
- onSelect: onSelect
150
- }, /*#__PURE__*/_react.default.createElement(_Dropdown.default.Toggle, {
151
- id: "dropdown-autoclose-outside",
152
- className: "caret-off ".concat(mode === _editModes.DrawPolygonByDraggingMode || mode === _editModes.ModifyMode ? "active" : "")
153
- }, /*#__PURE__*/_react.default.createElement(_reactFontawesome.FontAwesomeIcon, {
154
- icon: _freeSolidSvgIcons.faDrawPolygon
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, {
156
- eventKey: "DrawPolygonByDraggingMode"
157
- }, /*#__PURE__*/_react.default.createElement(_reactFontawesome.FontAwesomeIcon, {
158
- icon: _freeSolidSvgIcons.faDrawPolygon,
159
- className: "nav-icon"
160
- }), "Draw a polygon"), /*#__PURE__*/_react.default.createElement(_Dropdown.default.Item, {
161
- eventKey: "ModifyMode"
162
- }, /*#__PURE__*/_react.default.createElement(_reactFontawesome.FontAwesomeIcon, {
163
- icon: _freeSolidSvgIcons.faPen,
164
- className: "nav-icon"
165
- }), "Modify polygons"), /*#__PURE__*/_react.default.createElement(_Dropdown.default.Item, {
166
- onClick: deleteFeatures
167
- }, /*#__PURE__*/_react.default.createElement(_reactFontawesome.FontAwesomeIcon, {
168
- icon: _freeSolidSvgIcons.faTrash,
169
- className: "nav-icon"
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, {
175
- show: showControls,
176
- handleClose: handleCloseControls,
177
- Controls: _ScatterplotControls.ScatterplotControls
178
- }));
74
+ const polygonControls = /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
75
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Button.default, {
76
+ active: settings.sliceBy.polygons,
77
+ title: "Filter data with polygons",
78
+ onClick: () => {
79
+ setMode(() => _editModes.ViewMode);
80
+ dispatch({
81
+ type: 'toggle.slice.polygons'
82
+ });
83
+ },
84
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_iconsMaterial.JoinInner, {})
85
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Button.default, {
86
+ title: "Delete selected polygons",
87
+ onClick: () => {
88
+ const newFeatures = features.features.filter((_f, i) => !selectedFeatureIndexes.includes(i));
89
+ setFeatures({
90
+ type: 'FeatureCollection',
91
+ features: newFeatures
92
+ });
93
+ },
94
+ disabled: !selectedFeatureIndexes.length,
95
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactFontawesome.FontAwesomeIcon, {
96
+ icon: _freeSolidSvgIcons.faTrash
97
+ })
98
+ })]
99
+ });
100
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
101
+ className: "cherita-spatial-controls",
102
+ children: [(showObsBtn || showVarsBtn) && /*#__PURE__*/(0, _jsxRuntime.jsxs)(_ButtonGroup.default, {
103
+ vertical: true,
104
+ className: "w-100 mb-1",
105
+ children: [showObsBtn && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.OverlayTrigger, {
106
+ placement: "right",
107
+ overlay: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Tooltip, {
108
+ id: "tooltip-obs",
109
+ children: "Browse categories"
110
+ }),
111
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Button.default, {
112
+ onClick: () => setShowObs(true),
113
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactFontawesome.FontAwesomeIcon, {
114
+ icon: _freeSolidSvgIcons.faList
115
+ })
116
+ })
117
+ }), showVarsBtn && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.OverlayTrigger, {
118
+ placement: "right",
119
+ overlay: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Tooltip, {
120
+ id: "tooltip-vars",
121
+ children: "Search features"
122
+ }),
123
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Button.default, {
124
+ onClick: () => setShowVars(true),
125
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactFontawesome.FontAwesomeIcon, {
126
+ icon: _freeSolidSvgIcons.faSearch
127
+ })
128
+ })
129
+ })]
130
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_ButtonGroup.default, {
131
+ vertical: true,
132
+ className: "w-100",
133
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Button.default, {
134
+ onClick: () => setMode(() => _editModes.ViewMode),
135
+ title: "Set dragging mode",
136
+ active: mode === _editModes.ViewMode,
137
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactFontawesome.FontAwesomeIcon, {
138
+ icon: _freeSolidSvgIcons.faHand
139
+ })
140
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Button.default, {
141
+ onClick: increaseZoom,
142
+ title: "Increase zoom",
143
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactFontawesome.FontAwesomeIcon, {
144
+ icon: _freeSolidSvgIcons.faPlus
145
+ })
146
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Button.default, {
147
+ onClick: decreaseZoom,
148
+ title: "Decrease zoom",
149
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactFontawesome.FontAwesomeIcon, {
150
+ icon: _freeSolidSvgIcons.faMinus
151
+ })
152
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
153
+ className: "border-bottom"
154
+ }), " ", /*#__PURE__*/(0, _jsxRuntime.jsx)(_Button.default, {
155
+ onClick: resetBounds,
156
+ title: "Reset zoom and center",
157
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactFontawesome.FontAwesomeIcon, {
158
+ icon: _freeSolidSvgIcons.faCrosshairs
159
+ })
160
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Dropdown.default, {
161
+ as: _ButtonGroup.default,
162
+ className: "caret-off",
163
+ drop: "end",
164
+ onSelect: onSelect,
165
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Dropdown.default.Toggle, {
166
+ id: "dropdown-autoclose-outside",
167
+ className: "caret-off ".concat(mode === _editModes.DrawPolygonByDraggingMode || mode === _editModes.ModifyMode ? 'active' : ''),
168
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactFontawesome.FontAwesomeIcon, {
169
+ icon: _freeSolidSvgIcons.faDrawPolygon
170
+ })
171
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Dropdown.default.Menu, {
172
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Dropdown.default.Header, {
173
+ children: "Polygon tools"
174
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Dropdown.default.Item, {
175
+ eventKey: "DrawPolygonByDraggingMode",
176
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactFontawesome.FontAwesomeIcon, {
177
+ icon: _freeSolidSvgIcons.faDrawPolygon,
178
+ className: "nav-icon"
179
+ }), "Draw a polygon"]
180
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Dropdown.default.Item, {
181
+ eventKey: "ModifyMode",
182
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactFontawesome.FontAwesomeIcon, {
183
+ icon: _freeSolidSvgIcons.faPen,
184
+ className: "nav-icon"
185
+ }), "Modify polygons"]
186
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Dropdown.default.Item, {
187
+ onClick: deleteFeatures,
188
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactFontawesome.FontAwesomeIcon, {
189
+ icon: _freeSolidSvgIcons.faTrash,
190
+ className: "nav-icon"
191
+ }), "Delete polygons"]
192
+ })]
193
+ })]
194
+ }), !!(features !== null && features !== void 0 && (_features$features = features.features) !== null && _features$features !== void 0 && _features$features.length) && polygonControls, /*#__PURE__*/(0, _jsxRuntime.jsx)(_Button.default, {
195
+ onClick: handleShowControls,
196
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactFontawesome.FontAwesomeIcon, {
197
+ icon: _freeSolidSvgIcons.faSliders
198
+ })
199
+ })]
200
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_offcanvas.OffcanvasControls, {
201
+ show: showControls,
202
+ handleClose: handleCloseControls,
203
+ Controls: _ScatterplotControls.ScatterplotControls
204
+ })]
205
+ });
179
206
  }
@@ -4,42 +4,53 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.Toolbox = Toolbox;
7
- var _react = _interopRequireDefault(require("react"));
8
7
  var _reactBootstrap = require("react-bootstrap");
9
8
  var _string = require("../../utils/string");
10
9
  var _ObsmList = require("../obsm-list/ObsmList");
11
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
10
+ var _jsxRuntime = require("react/jsx-runtime");
12
11
  function Toolbox(_ref) {
13
12
  let {
14
13
  mode,
15
14
  obsLength,
16
- slicedLength
15
+ slicedLength,
16
+ setHasObsm
17
17
  } = _ref;
18
- return /*#__PURE__*/_react.default.createElement("div", {
19
- className: "cherita-toolbox"
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, {
21
- placement: "top",
22
- overlay: /*#__PURE__*/_react.default.createElement(_reactBootstrap.Tooltip, {
23
- id: "tooltip-dropped-mode"
24
- }, "You have selected ", (0, _string.formatNumerical)(slicedLength), " out of", " ", (0, _string.formatNumerical)(obsLength), " cells")
25
- }, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Button, {
26
- size: "sm",
27
- variant: "primary",
28
- style: {
29
- cursor: "default"
30
- },
31
- "aria-disabled": "true"
32
- }, (0, _string.formatNumerical)(slicedLength), " of ", (0, _string.formatNumerical)(obsLength), " ", "cells")) : /*#__PURE__*/_react.default.createElement(_reactBootstrap.OverlayTrigger, {
33
- placement: "top",
34
- overlay: /*#__PURE__*/_react.default.createElement(_reactBootstrap.Tooltip, {
35
- id: "tooltip-dropped-mode"
36
- }, "You are viewing ", (0, _string.formatNumerical)(obsLength), " cells")
37
- }, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Button, {
38
- size: "sm",
39
- variant: "primary",
40
- style: {
41
- cursor: "default"
42
- },
43
- "aria-disabled": "true"
44
- }, (0, _string.formatNumerical)(obsLength), " cells")))));
18
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
19
+ className: "cherita-toolbox",
20
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactBootstrap.ButtonGroup, {
21
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_ObsmList.ObsmKeysList, {
22
+ setHasObsm: setHasObsm
23
+ }), (mode || !isNaN(obsLength)) && (mode !== null && !isNaN(slicedLength) && slicedLength !== obsLength ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.OverlayTrigger, {
24
+ placement: "top",
25
+ overlay: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactBootstrap.Tooltip, {
26
+ id: "tooltip-dropped-mode",
27
+ children: ["You have selected ", (0, _string.formatNumerical)(slicedLength), " out of", ' ', (0, _string.formatNumerical)(obsLength), " cells"]
28
+ }),
29
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactBootstrap.Button, {
30
+ size: "sm",
31
+ variant: "primary",
32
+ style: {
33
+ cursor: 'default'
34
+ },
35
+ "aria-disabled": "true",
36
+ children: [(0, _string.formatNumerical)(slicedLength), " of ", (0, _string.formatNumerical)(obsLength), ' ', "cells"]
37
+ })
38
+ }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.OverlayTrigger, {
39
+ placement: "top",
40
+ overlay: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactBootstrap.Tooltip, {
41
+ id: "tooltip-dropped-mode",
42
+ children: ["You are viewing ", (0, _string.formatNumerical)(obsLength), " cells"]
43
+ }),
44
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactBootstrap.Button, {
45
+ size: "sm",
46
+ variant: "primary",
47
+ style: {
48
+ cursor: 'default'
49
+ },
50
+ "aria-disabled": "true",
51
+ children: [(0, _string.formatNumerical)(obsLength), " cells"]
52
+ })
53
+ }))]
54
+ })
55
+ });
45
56
  }