@haniffalab/cherita-react 1.4.1-dev.2025-10-22.61540191 → 1.4.1-dev.2025-10-23.3179e534

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 (103) hide show
  1. package/dist/cjs/components/controls/Controls.js +38 -30
  2. package/dist/cjs/components/dotplot/Dotplot.js +40 -33
  3. package/dist/cjs/components/dotplot/DotplotControls.js +103 -83
  4. package/dist/cjs/components/full-page/FullPage.js +92 -69
  5. package/dist/cjs/components/full-page/PlotAlert.js +25 -16
  6. package/dist/cjs/components/full-page/PlotTypeSelector.js +43 -36
  7. package/dist/cjs/components/heatmap/Heatmap.js +40 -33
  8. package/dist/cjs/components/heatmap/HeatmapControls.js +6 -3
  9. package/dist/cjs/components/icons/DotPlotIcon.js +16 -10
  10. package/dist/cjs/components/icons/HeatmapIcon.js +17 -11
  11. package/dist/cjs/components/icons/MatrixPlotIcon.1.js +22 -16
  12. package/dist/cjs/components/icons/MatrixPlotIcon.js +22 -16
  13. package/dist/cjs/components/icons/ScatterplotIcon.1.js +21 -15
  14. package/dist/cjs/components/icons/ScatterplotIcon.js +21 -15
  15. package/dist/cjs/components/icons/ViolinPlotIcon.js +22 -14
  16. package/dist/cjs/components/matrixplot/Matrixplot.js +40 -33
  17. package/dist/cjs/components/matrixplot/MatrixplotControls.js +8 -5
  18. package/dist/cjs/components/obs-list/ObsItem.js +238 -190
  19. package/dist/cjs/components/obs-list/ObsList.js +106 -87
  20. package/dist/cjs/components/obs-list/ObsToolbar.js +2 -3
  21. package/dist/cjs/components/obsm-list/ObsmList.js +47 -32
  22. package/dist/cjs/components/offcanvas/index.js +61 -31
  23. package/dist/cjs/components/pseudospatial/Pseudospatial.js +46 -36
  24. package/dist/cjs/components/pseudospatial/PseudospatialToolbar.js +98 -68
  25. package/dist/cjs/components/scatterplot/Scatterplot.js +87 -65
  26. package/dist/cjs/components/scatterplot/ScatterplotControls.js +35 -27
  27. package/dist/cjs/components/scatterplot/SpatialControls.js +134 -107
  28. package/dist/cjs/components/scatterplot/Toolbox.js +41 -30
  29. package/dist/cjs/components/search-bar/SearchBar.js +157 -110
  30. package/dist/cjs/components/search-bar/SearchInfo.js +73 -47
  31. package/dist/cjs/components/search-bar/SearchResults.js +93 -71
  32. package/dist/cjs/components/toolbar/Toolbar.js +43 -34
  33. package/dist/cjs/components/var-list/VarItem.js +106 -79
  34. package/dist/cjs/components/var-list/VarList.js +67 -53
  35. package/dist/cjs/components/var-list/VarListToolbar.js +56 -51
  36. package/dist/cjs/components/var-list/VarSet.js +115 -97
  37. package/dist/cjs/components/violin/Violin.js +77 -58
  38. package/dist/cjs/components/violin/ViolinControls.js +8 -5
  39. package/dist/cjs/context/DatasetContext.js +20 -13
  40. package/dist/cjs/context/FilterContext.js +9 -7
  41. package/dist/cjs/context/SettingsContext.js +11 -9
  42. package/dist/cjs/context/ZarrDataContext.js +6 -5
  43. package/dist/cjs/utils/Histogram.js +35 -33
  44. package/dist/cjs/utils/ImageViewer.js +9 -6
  45. package/dist/cjs/utils/Legend.js +36 -29
  46. package/dist/cjs/utils/LoadingIndicators.js +14 -12
  47. package/dist/cjs/utils/Skeleton.js +10 -10
  48. package/dist/cjs/utils/StyledTooltip.js +7 -2
  49. package/dist/cjs/utils/VirtualizedList.js +32 -25
  50. package/dist/cjs/utils/errors.js +1 -1
  51. package/dist/css/cherita.css +6 -1
  52. package/dist/css/cherita.css.map +1 -1
  53. package/dist/esm/components/controls/Controls.js +38 -30
  54. package/dist/esm/components/dotplot/Dotplot.js +40 -33
  55. package/dist/esm/components/dotplot/DotplotControls.js +103 -82
  56. package/dist/esm/components/full-page/FullPage.js +92 -69
  57. package/dist/esm/components/full-page/PlotAlert.js +25 -16
  58. package/dist/esm/components/full-page/PlotTypeSelector.js +43 -36
  59. package/dist/esm/components/heatmap/Heatmap.js +40 -33
  60. package/dist/esm/components/heatmap/HeatmapControls.js +6 -2
  61. package/dist/esm/components/icons/DotPlotIcon.js +16 -10
  62. package/dist/esm/components/icons/HeatmapIcon.js +17 -11
  63. package/dist/esm/components/icons/MatrixPlotIcon.1.js +22 -16
  64. package/dist/esm/components/icons/MatrixPlotIcon.js +22 -16
  65. package/dist/esm/components/icons/ScatterplotIcon.1.js +21 -15
  66. package/dist/esm/components/icons/ScatterplotIcon.js +21 -15
  67. package/dist/esm/components/icons/ViolinPlotIcon.js +22 -14
  68. package/dist/esm/components/matrixplot/Matrixplot.js +40 -33
  69. package/dist/esm/components/matrixplot/MatrixplotControls.js +8 -4
  70. package/dist/esm/components/obs-list/ObsItem.js +237 -186
  71. package/dist/esm/components/obs-list/ObsList.js +106 -86
  72. package/dist/esm/components/obs-list/ObsToolbar.js +2 -2
  73. package/dist/esm/components/obsm-list/ObsmList.js +47 -31
  74. package/dist/esm/components/offcanvas/index.js +61 -31
  75. package/dist/esm/components/pseudospatial/Pseudospatial.js +46 -36
  76. package/dist/esm/components/pseudospatial/PseudospatialToolbar.js +98 -68
  77. package/dist/esm/components/scatterplot/Scatterplot.js +87 -64
  78. package/dist/esm/components/scatterplot/ScatterplotControls.js +35 -26
  79. package/dist/esm/components/scatterplot/SpatialControls.js +134 -106
  80. package/dist/esm/components/scatterplot/Toolbox.js +41 -29
  81. package/dist/esm/components/search-bar/SearchBar.js +157 -109
  82. package/dist/esm/components/search-bar/SearchInfo.js +73 -46
  83. package/dist/esm/components/search-bar/SearchResults.js +93 -70
  84. package/dist/esm/components/toolbar/Toolbar.js +43 -33
  85. package/dist/esm/components/var-list/VarItem.js +106 -78
  86. package/dist/esm/components/var-list/VarList.js +67 -52
  87. package/dist/esm/components/var-list/VarListToolbar.js +56 -50
  88. package/dist/esm/components/var-list/VarSet.js +115 -96
  89. package/dist/esm/components/violin/Violin.js +77 -58
  90. package/dist/esm/components/violin/ViolinControls.js +8 -4
  91. package/dist/esm/context/DatasetContext.js +20 -12
  92. package/dist/esm/context/FilterContext.js +9 -6
  93. package/dist/esm/context/SettingsContext.js +11 -8
  94. package/dist/esm/context/ZarrDataContext.js +6 -4
  95. package/dist/esm/utils/Histogram.js +35 -33
  96. package/dist/esm/utils/ImageViewer.js +9 -5
  97. package/dist/esm/utils/Legend.js +36 -28
  98. package/dist/esm/utils/LoadingIndicators.js +14 -11
  99. package/dist/esm/utils/Skeleton.js +10 -9
  100. package/dist/esm/utils/StyledTooltip.js +7 -2
  101. package/dist/esm/utils/VirtualizedList.js +32 -24
  102. package/dist/esm/utils/errors.js +1 -1
  103. package/package.json +3 -3
@@ -3,7 +3,7 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
3
3
  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; }
4
4
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
5
5
  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); }
6
- import React, { useCallback, useEffect, useMemo, useState } from "react";
6
+ import { useCallback, useEffect, useMemo, useState } from "react";
7
7
  import { Tooltip } from "@mui/material";
8
8
  import { Gauge, SparkLineChart } from "@mui/x-charts";
9
9
  import _ from "lodash";
@@ -41,7 +41,7 @@ import { useObsData } from "../../utils/zarrData";
41
41
  // };
42
42
  // return { ...data, bins: bins };
43
43
  // }
44
-
44
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
45
45
  function getContinuousLabel(code, binEdges) {
46
46
  return "[ ".concat(formatNumerical(binEdges[code][0]), ", ").concat(formatNumerical(binEdges[code][1], FORMATS.EXPONENTIAL)).concat(code === binEdges.length - 1 ? " ]" : " )");
47
47
  }
@@ -159,100 +159,118 @@ function CategoricalItem(_ref2) {
159
159
  const {
160
160
  getColor
161
161
  } = useColor();
162
- return /*#__PURE__*/React.createElement("div", {
163
- className: "virtualized-list-wrapper"
164
- }, /*#__PURE__*/React.createElement(ListGroup.Item, {
165
- key: value,
166
- className: "obs-item"
167
- }, /*#__PURE__*/React.createElement("div", {
168
- className: "d-flex align-items-center flex-wrap"
169
- }, /*#__PURE__*/React.createElement("div", {
170
- className: "flex-grow-1 me-auto mw-100"
171
- }, /*#__PURE__*/React.createElement(Form.Check, {
172
- className: "obs-value-list-check",
173
- type: "switch",
174
- title: label,
175
- label: label,
176
- checked: !isOmitted,
177
- onChange: () => onChange(value)
178
- })), /*#__PURE__*/React.createElement("div", {
179
- className: "d-flex align-items-center ms-auto"
180
- }, (!!histogramData.data || histogramData.isPending) && /*#__PURE__*/React.createElement("div", {
181
- className: "pl-1 m-0"
182
- }, /*#__PURE__*/React.createElement(Histogram, {
183
- data: histogramData.data,
184
- isPending: histogramData.isPending,
185
- altColor: histogramData.altColor
186
- })), /*#__PURE__*/React.createElement("div", {
187
- className: "pl-1 m-0"
188
- }, /*#__PURE__*/React.createElement(Tooltip, {
189
- title: isSliced ? /*#__PURE__*/React.createElement(React.Fragment, null, "Filtered:", " ", formatNumerical(filteredStats.pct, FORMATS.EXPONENTIAL), "%", /*#__PURE__*/React.createElement("br", null), "Total: ", formatNumerical(stats.pct, FORMATS.EXPONENTIAL), "%") : "".concat(formatNumerical(stats.pct, FORMATS.EXPONENTIAL), "%"),
190
- placement: "left",
191
- arrow: true
192
- }, /*#__PURE__*/React.createElement("div", {
193
- className: "d-flex align-items-center"
194
- }, /*#__PURE__*/React.createElement(Badge, {
195
- className: "value-count-badge"
196
- }, " ", isSliced && parseInt(filteredStats.value_counts) !== parseInt(stats.value_counts) && /*#__PURE__*/React.createElement(React.Fragment, null, formatNumerical(parseInt(filteredStats.value_counts)), " ", "out of", " "), formatNumerical(parseInt(stats.value_counts), FORMATS.EXPONENTIAL)), /*#__PURE__*/React.createElement("div", {
197
- className: "value-pct-gauge-container"
198
- }, isSliced ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Gauge, {
199
- className: "pct-gauge filtered-pct-gauge",
200
- value: filteredStats.pct,
201
- text: null,
202
- innerRadius: "50%",
203
- outerRadius: "75%",
204
- margin: {
205
- top: 0,
206
- right: 0,
207
- bottom: 0,
208
- left: 0
209
- }
210
- }), /*#__PURE__*/React.createElement(Gauge, {
211
- className: "pct-gauge",
212
- value: stats.pct,
213
- text: null,
214
- innerRadius: "75%",
215
- margin: {
216
- top: 0,
217
- right: 0,
218
- bottom: 0,
219
- left: 0
220
- }
221
- })) : /*#__PURE__*/React.createElement(Gauge, {
222
- value: stats.pct,
223
- text: null,
224
- innerRadius: "50%",
225
- margin: {
226
- top: 0,
227
- right: 0,
228
- bottom: 0,
229
- left: 0
230
- }
231
- }))))), showColor ? /*#__PURE__*/React.createElement("div", {
232
- className: "pl-1"
233
- }, /*#__PURE__*/React.createElement("svg", {
234
- xmlns: "http://www.w3.org/2000/svg",
235
- width: 24,
236
- height: 24,
237
- fill: "currentColor",
238
- viewBox: "0 0 10 10"
239
- }, /*#__PURE__*/React.createElement("rect", {
240
- x: "0",
241
- y: "0",
242
- width: "10",
243
- height: "10",
244
- fill: "rgb(".concat(getColor(_objectSpread({
245
- value: (code - min) / (max - min),
246
- categorical: true,
247
- grayOut: isOmitted,
248
- grayParams: {
249
- alpha: 1
250
- },
251
- colorEncoding: "obs"
252
- }, useUnsColors ? {
253
- colorscale: colors
254
- } : {})), ")")
255
- }))) : null))));
162
+ return /*#__PURE__*/_jsx("div", {
163
+ className: "virtualized-list-wrapper",
164
+ children: /*#__PURE__*/_jsx(ListGroup.Item, {
165
+ className: "obs-item",
166
+ children: /*#__PURE__*/_jsxs("div", {
167
+ className: "d-flex align-items-center flex-wrap",
168
+ children: [/*#__PURE__*/_jsx("div", {
169
+ className: "flex-grow-1 me-auto mw-100",
170
+ children: /*#__PURE__*/_jsx(Form.Check, {
171
+ className: "obs-value-list-check",
172
+ type: "switch",
173
+ title: label,
174
+ label: label,
175
+ checked: !isOmitted,
176
+ onChange: () => onChange(value)
177
+ })
178
+ }), /*#__PURE__*/_jsxs("div", {
179
+ className: "d-flex align-items-center ms-auto",
180
+ children: [(!!histogramData.data || histogramData.isPending) && /*#__PURE__*/_jsx("div", {
181
+ className: "pl-1 m-0",
182
+ children: /*#__PURE__*/_jsx(Histogram, {
183
+ data: histogramData.data,
184
+ isPending: histogramData.isPending,
185
+ altColor: histogramData.altColor
186
+ })
187
+ }), /*#__PURE__*/_jsx("div", {
188
+ className: "pl-1 m-0",
189
+ children: /*#__PURE__*/_jsx(Tooltip, {
190
+ title: isSliced ? /*#__PURE__*/_jsxs(_Fragment, {
191
+ children: ["Filtered:", " ", formatNumerical(filteredStats.pct, FORMATS.EXPONENTIAL), "%", /*#__PURE__*/_jsx("br", {}), "Total: ", formatNumerical(stats.pct, FORMATS.EXPONENTIAL), "%"]
192
+ }) : "".concat(formatNumerical(stats.pct, FORMATS.EXPONENTIAL), "%"),
193
+ placement: "left",
194
+ arrow: true,
195
+ children: /*#__PURE__*/_jsxs("div", {
196
+ className: "d-flex align-items-center",
197
+ children: [/*#__PURE__*/_jsxs(Badge, {
198
+ className: "value-count-badge",
199
+ children: [" ", isSliced && parseInt(filteredStats.value_counts) !== parseInt(stats.value_counts) && /*#__PURE__*/_jsxs(_Fragment, {
200
+ children: [formatNumerical(parseInt(filteredStats.value_counts)), " ", "out of", " "]
201
+ }), formatNumerical(parseInt(stats.value_counts), FORMATS.EXPONENTIAL)]
202
+ }), /*#__PURE__*/_jsx("div", {
203
+ className: "value-pct-gauge-container",
204
+ children: isSliced ? /*#__PURE__*/_jsxs(_Fragment, {
205
+ children: [/*#__PURE__*/_jsx(Gauge, {
206
+ className: "pct-gauge filtered-pct-gauge",
207
+ value: filteredStats.pct,
208
+ text: null,
209
+ innerRadius: "50%",
210
+ outerRadius: "75%",
211
+ margin: {
212
+ top: 0,
213
+ right: 0,
214
+ bottom: 0,
215
+ left: 0
216
+ }
217
+ }), /*#__PURE__*/_jsx(Gauge, {
218
+ className: "pct-gauge",
219
+ value: stats.pct,
220
+ text: null,
221
+ innerRadius: "75%",
222
+ margin: {
223
+ top: 0,
224
+ right: 0,
225
+ bottom: 0,
226
+ left: 0
227
+ }
228
+ })]
229
+ }) : /*#__PURE__*/_jsx(Gauge, {
230
+ value: stats.pct,
231
+ text: null,
232
+ innerRadius: "50%",
233
+ margin: {
234
+ top: 0,
235
+ right: 0,
236
+ bottom: 0,
237
+ left: 0
238
+ }
239
+ })
240
+ })]
241
+ })
242
+ })
243
+ }), showColor ? /*#__PURE__*/_jsx("div", {
244
+ className: "pl-1",
245
+ children: /*#__PURE__*/_jsx("svg", {
246
+ xmlns: "http://www.w3.org/2000/svg",
247
+ width: 24,
248
+ height: 24,
249
+ fill: "currentColor",
250
+ viewBox: "0 0 10 10",
251
+ children: /*#__PURE__*/_jsx("rect", {
252
+ x: "0",
253
+ y: "0",
254
+ width: "10",
255
+ height: "10",
256
+ fill: "rgb(".concat(getColor(_objectSpread({
257
+ value: (code - min) / (max - min),
258
+ categorical: true,
259
+ grayOut: isOmitted,
260
+ grayParams: {
261
+ alpha: 1
262
+ },
263
+ colorEncoding: "obs"
264
+ }, useUnsColors ? {
265
+ colorscale: colors
266
+ } : {})), ")")
267
+ })
268
+ })
269
+ }) : null]
270
+ })]
271
+ })
272
+ }, value)
273
+ });
256
274
  }
257
275
  export function CategoricalObs(_ref3) {
258
276
  let {
@@ -302,29 +320,31 @@ export function CategoricalObs(_ref3) {
302
320
  };
303
321
  }, [obs.values, obs.codes, obs.value_counts, obs.omit, obs.colors, totalCounts, enabledHistograms, obsHistograms.fetchedData, obsHistograms.isPending, isSliced, filteredObsData === null || filteredObsData === void 0 ? void 0 : filteredObsData.value_counts, filteredObsData === null || filteredObsData === void 0 ? void 0 : filteredObsData.pct]);
304
322
  showColor &= settings.colorEncoding === COLOR_ENCODINGS.OBS;
305
- return /*#__PURE__*/React.createElement(ListGroup, {
323
+ return /*#__PURE__*/_jsxs(ListGroup, {
306
324
  variant: "flush",
307
- className: "cherita-list"
308
- }, /*#__PURE__*/React.createElement(ListGroup.Item, {
309
- className: "unstyled"
310
- }, /*#__PURE__*/React.createElement(ObsToolbar, {
311
- item: obs,
312
- onToggleAllObs: toggleAll
313
- })), /*#__PURE__*/React.createElement(VirtualizedList, {
314
- getDataAtIndex: getDataAtIndex,
315
- count: obs.values.length,
316
- ItemComponent: CategoricalItem,
317
- totalCounts: totalCounts,
318
- min: min,
319
- max: max,
320
- onChange: toggleObs,
321
- showColor: showColor,
322
- estimateSize: i =>
323
- // rough attempt to determine size based on label length
324
- // estimate size of 68 pixels if label is long (>=25 chars if enabledHistograms, >=30 if showColor, >=35 otherwise), else 42
325
- // TODO: consider isSliced as count badge will be longer ?
326
- obs.values[i].length >= (enabledHistograms ? 25 : showColor ? 30 : 35) ? 68 : 42
327
- }));
325
+ className: "cherita-list",
326
+ children: [/*#__PURE__*/_jsx(ListGroup.Item, {
327
+ className: "unstyled",
328
+ children: /*#__PURE__*/_jsx(ObsToolbar, {
329
+ item: obs,
330
+ onToggleAllObs: toggleAll
331
+ })
332
+ }), /*#__PURE__*/_jsx(VirtualizedList, {
333
+ getDataAtIndex: getDataAtIndex,
334
+ count: obs.values.length,
335
+ ItemComponent: CategoricalItem,
336
+ totalCounts: totalCounts,
337
+ min: min,
338
+ max: max,
339
+ onChange: toggleObs,
340
+ showColor: showColor,
341
+ estimateSize: i =>
342
+ // rough attempt to determine size based on label length
343
+ // estimate size of 68 pixels if label is long (>=25 chars if enabledHistograms, >=30 if showColor, >=35 otherwise), else 42
344
+ // TODO: consider isSliced as count badge will be longer ?
345
+ obs.values[i].length >= (enabledHistograms ? 25 : showColor ? 30 : 35) ? 68 : 42
346
+ })]
347
+ });
328
348
  }
329
349
  function ObsContinuousStats(_ref4) {
330
350
  let {
@@ -343,49 +363,76 @@ function ObsContinuousStats(_ref4) {
343
363
  } = useFetch(ENDPOINT, params);
344
364
 
345
365
  // @TODO: fix width issue when min/max/etc values are too large
346
- return /*#__PURE__*/React.createElement("div", {
347
- className: "obs-statistics"
348
- }, /*#__PURE__*/React.createElement("h5", {
349
- className: "mb-2"
350
- }, "Statistics"), /*#__PURE__*/React.createElement("div", {
351
- className: "row"
352
- }, /*#__PURE__*/React.createElement("div", {
353
- className: "col-md-7"
354
- }, /*#__PURE__*/React.createElement("p", {
355
- className: "mb-1 small"
356
- }, "Distribution of continuous values"), isPending && /*#__PURE__*/React.createElement(LoadingLinear, null), !isPending && !serverError && /*#__PURE__*/React.createElement("div", {
357
- className: "obs-distribution"
358
- }, /*#__PURE__*/React.createElement(SparkLineChart, {
359
- data: fetchedData.kde_values[1],
360
- showHighlight: true,
361
- showTooltip: true,
362
- margin: {
363
- top: 10,
364
- right: 20,
365
- bottom: 10,
366
- left: 20
367
- },
368
- xAxis: {
369
- data: fetchedData.kde_values[0],
370
- valueFormatter: v => "".concat(formatNumerical(v, FORMATS.EXPONENTIAL))
371
- },
372
- valueFormatter: v => "".concat(formatNumerical(v, FORMATS.EXPONENTIAL)),
373
- slotProps: {
374
- popper: {
375
- className: "feature-histogram-tooltip"
376
- }
377
- }
378
- }))), /*#__PURE__*/React.createElement("div", {
379
- className: "col-md-5 d-flex flex-column text-end"
380
- }, /*#__PURE__*/React.createElement("div", {
381
- className: "d-flex justify-content-between"
382
- }, /*#__PURE__*/React.createElement("span", null, "Min"), " ", /*#__PURE__*/React.createElement("span", null, formatNumerical(obs.min, FORMATS.EXPONENTIAL))), /*#__PURE__*/React.createElement("div", {
383
- className: "d-flex justify-content-between"
384
- }, /*#__PURE__*/React.createElement("span", null, "Max"), " ", /*#__PURE__*/React.createElement("span", null, formatNumerical(obs.max, FORMATS.EXPONENTIAL))), /*#__PURE__*/React.createElement("div", {
385
- className: "d-flex justify-content-between"
386
- }, /*#__PURE__*/React.createElement("span", null, "Mean"), " ", /*#__PURE__*/React.createElement("span", null, formatNumerical(obs.mean, FORMATS.EXPONENTIAL))), /*#__PURE__*/React.createElement("div", {
387
- className: "d-flex justify-content-between"
388
- }, /*#__PURE__*/React.createElement("span", null, "Median"), " ", /*#__PURE__*/React.createElement("span", null, formatNumerical(obs.median, FORMATS.EXPONENTIAL))))));
366
+ return /*#__PURE__*/_jsxs("div", {
367
+ className: "obs-statistics",
368
+ children: [/*#__PURE__*/_jsx("h5", {
369
+ className: "mb-2",
370
+ children: "Statistics"
371
+ }), /*#__PURE__*/_jsxs("div", {
372
+ className: "row",
373
+ children: [/*#__PURE__*/_jsxs("div", {
374
+ className: "col-md-7",
375
+ children: [/*#__PURE__*/_jsx("p", {
376
+ className: "mb-1 small",
377
+ children: "Distribution of continuous values"
378
+ }), isPending && /*#__PURE__*/_jsx(LoadingLinear, {}), !isPending && !serverError && /*#__PURE__*/_jsx("div", {
379
+ className: "obs-distribution",
380
+ children: /*#__PURE__*/_jsx(SparkLineChart, {
381
+ data: fetchedData.kde_values[1],
382
+ showHighlight: true,
383
+ showTooltip: true,
384
+ margin: {
385
+ top: 10,
386
+ right: 20,
387
+ bottom: 10,
388
+ left: 20
389
+ },
390
+ xAxis: {
391
+ data: fetchedData.kde_values[0],
392
+ valueFormatter: v => "".concat(formatNumerical(v, FORMATS.EXPONENTIAL))
393
+ },
394
+ valueFormatter: v => "".concat(formatNumerical(v, FORMATS.EXPONENTIAL)),
395
+ slotProps: {
396
+ popper: {
397
+ className: "feature-histogram-tooltip"
398
+ }
399
+ }
400
+ })
401
+ })]
402
+ }), /*#__PURE__*/_jsxs("div", {
403
+ className: "col-md-5 d-flex flex-column text-end",
404
+ children: [/*#__PURE__*/_jsxs("div", {
405
+ className: "d-flex justify-content-between",
406
+ children: [/*#__PURE__*/_jsx("span", {
407
+ children: "Min"
408
+ }), " ", /*#__PURE__*/_jsx("span", {
409
+ children: formatNumerical(obs.min, FORMATS.EXPONENTIAL)
410
+ })]
411
+ }), /*#__PURE__*/_jsxs("div", {
412
+ className: "d-flex justify-content-between",
413
+ children: [/*#__PURE__*/_jsx("span", {
414
+ children: "Max"
415
+ }), " ", /*#__PURE__*/_jsx("span", {
416
+ children: formatNumerical(obs.max, FORMATS.EXPONENTIAL)
417
+ })]
418
+ }), /*#__PURE__*/_jsxs("div", {
419
+ className: "d-flex justify-content-between",
420
+ children: [/*#__PURE__*/_jsx("span", {
421
+ children: "Mean"
422
+ }), " ", /*#__PURE__*/_jsx("span", {
423
+ children: formatNumerical(obs.mean, FORMATS.EXPONENTIAL)
424
+ })]
425
+ }), /*#__PURE__*/_jsxs("div", {
426
+ className: "d-flex justify-content-between",
427
+ children: [/*#__PURE__*/_jsx("span", {
428
+ children: "Median"
429
+ }), " ", /*#__PURE__*/_jsx("span", {
430
+ children: formatNumerical(obs.median, FORMATS.EXPONENTIAL)
431
+ })]
432
+ })]
433
+ })]
434
+ })]
435
+ });
389
436
  }
390
437
 
391
438
  // @TODO: add bin controls
@@ -437,29 +484,33 @@ export function ContinuousObs(_ref5) {
437
484
  isSliced: isSliced
438
485
  };
439
486
  }, [enabledHistograms, filteredObsData === null || filteredObsData === void 0 ? void 0 : filteredObsData.pct, filteredObsData === null || filteredObsData === void 0 ? void 0 : filteredObsData.value_counts, getLabel, isSliced, obs.codes, obs.omit, obs.value_counts, obs.values, obsHistograms.fetchedData, obsHistograms.isPending, totalCounts]);
440
- return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(ListGroup, {
441
- variant: "flush",
442
- className: "cherita-list"
443
- }, /*#__PURE__*/React.createElement(ListGroup.Item, {
444
- className: "unstyled"
445
- }, /*#__PURE__*/React.createElement(ObsToolbar, {
446
- item: obs,
447
- onToggleAllObs: toggleAll
448
- })), /*#__PURE__*/React.createElement(VirtualizedList, {
449
- getDataAtIndex: getDataAtIndex,
450
- count: obs.values.length,
451
- ItemComponent: CategoricalItem,
452
- totalCounts: totalCounts,
453
- min: min,
454
- max: max,
455
- onChange: toggleObs,
456
- showColor: false,
457
- estimateSize: i =>
458
- // rough attempt to determine size based on label length
459
- // estimate size of 68 pixels if label is long (>=20 chars if enabledHistograms, >=30 otherwise), else 42
460
- // TODO: consider isSliced as count badge will be longer ?
461
- getLabel(i).length >= (enabledHistograms ? 20 : 30) ? 68 : 42
462
- })), /*#__PURE__*/React.createElement(ObsContinuousStats, {
463
- obs: obs
464
- }));
487
+ return /*#__PURE__*/_jsxs(_Fragment, {
488
+ children: [/*#__PURE__*/_jsxs(ListGroup, {
489
+ variant: "flush",
490
+ className: "cherita-list",
491
+ children: [/*#__PURE__*/_jsx(ListGroup.Item, {
492
+ className: "unstyled",
493
+ children: /*#__PURE__*/_jsx(ObsToolbar, {
494
+ item: obs,
495
+ onToggleAllObs: toggleAll
496
+ })
497
+ }), /*#__PURE__*/_jsx(VirtualizedList, {
498
+ getDataAtIndex: getDataAtIndex,
499
+ count: obs.values.length,
500
+ ItemComponent: CategoricalItem,
501
+ totalCounts: totalCounts,
502
+ min: min,
503
+ max: max,
504
+ onChange: toggleObs,
505
+ showColor: false,
506
+ estimateSize: i =>
507
+ // rough attempt to determine size based on label length
508
+ // estimate size of 68 pixels if label is long (>=20 chars if enabledHistograms, >=30 otherwise), else 42
509
+ // TODO: consider isSliced as count badge will be longer ?
510
+ getLabel(i).length >= (enabledHistograms ? 20 : 30) ? 68 : 42
511
+ })]
512
+ }), /*#__PURE__*/_jsx(ObsContinuousStats, {
513
+ obs: obs
514
+ })]
515
+ });
465
516
  }