@vitessce/statistical-plots 3.4.9 → 3.4.11

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.
@@ -1,5 +1,5 @@
1
1
  import { i as inflate_1 } from "./pako.esm-68f84e2a.js";
2
- import { B as BaseDecoder } from "./index-ff4d0660.js";
2
+ import { B as BaseDecoder } from "./index-7aa37ee9.js";
3
3
  import "react";
4
4
  import "@vitessce/vit-s";
5
5
  import "react-dom";
@@ -979,6 +979,7 @@ const FileType$1 = {
979
979
  // Joint file types
980
980
  ANNDATA_ZARR: "anndata.zarr",
981
981
  ANNDATA_ZARR_ZIP: "anndata.zarr.zip",
982
+ ANNDATA_H5AD: "anndata.h5ad",
982
983
  SPATIALDATA_ZARR: "spatialdata.zarr",
983
984
  // Atomic file types
984
985
  OBS_EMBEDDING_CSV: "obsEmbedding.csv",
@@ -1019,6 +1020,18 @@ const FileType$1 = {
1019
1020
  OBS_LABELS_ANNDATA_ZARR_ZIP: "obsLabels.anndata.zarr.zip",
1020
1021
  FEATURE_LABELS_ANNDATA_ZARR_ZIP: "featureLabels.anndata.zarr.zip",
1021
1022
  SAMPLE_EDGES_ANNDATA_ZARR_ZIP: "sampleEdges.anndata.zarr.zip",
1023
+ // AnnData - h5ad via reference spec
1024
+ OBS_FEATURE_MATRIX_ANNDATA_H5AD: "obsFeatureMatrix.anndata.h5ad",
1025
+ OBS_FEATURE_COLUMNS_ANNDATA_H5AD: "obsFeatureColumns.anndata.h5ad",
1026
+ OBS_SETS_ANNDATA_H5AD: "obsSets.anndata.h5ad",
1027
+ OBS_EMBEDDING_ANNDATA_H5AD: "obsEmbedding.anndata.h5ad",
1028
+ OBS_SPOTS_ANNDATA_H5AD: "obsSpots.anndata.h5ad",
1029
+ OBS_POINTS_ANNDATA_H5AD: "obsPoints.anndata.h5ad",
1030
+ OBS_LOCATIONS_ANNDATA_H5AD: "obsLocations.anndata.h5ad",
1031
+ OBS_SEGMENTATIONS_ANNDATA_H5AD: "obsSegmentations.anndata.h5ad",
1032
+ OBS_LABELS_ANNDATA_H5AD: "obsLabels.anndata.h5ad",
1033
+ FEATURE_LABELS_ANNDATA_H5AD: "featureLabels.anndata.h5ad",
1034
+ SAMPLE_EDGES_ANNDATA_H5AD: "sampleEdges.anndata.h5ad",
1022
1035
  // SpatialData
1023
1036
  IMAGE_SPATIALDATA_ZARR: "image.spatialdata.zarr",
1024
1037
  LABELS_SPATIALDATA_ZARR: "labels.spatialdata.zarr",
@@ -1203,6 +1216,23 @@ const CoordinationType$1 = {
1203
1216
  CONTOUR_COLOR_ENCODING: "contourColorEncoding",
1204
1217
  CONTOUR_COLOR: "contourColor"
1205
1218
  };
1219
+ const ViewHelpMapping = {
1220
+ SCATTERPLOT: "The scatterplot displays two-dimensional (pre-computed) dimensionality reduction results (such as from t-SNE or UMAP). Each point on the scatterplot represents an observation (e.g., cell).",
1221
+ HEATMAP: "The heatmap displays an observation-by-feature (e.g., cell-by-gene) matrix, typically with transformed (e.g., normalized or standardized) values.",
1222
+ SPATIAL: "The spatial view displays (potentially layered) spatially-resolved data including RGB or multiplexed images, segmentations of observations (bitmask- or polygon-based), and/or points (e.g., representing FISH transcripts).",
1223
+ DESCRIPTION: "The description view displays additional information about a dataset. When images are included in a dataset, the description view also includes image metadata (if contained in the image files).",
1224
+ STATUS: "The status view displays debugging messages, including app-wide error messages when datasets fail to load or when schemas fail to validate. Details about the entity under the mouse cursor (cell, gene, and/or molecule) are displayed during hover interactions.",
1225
+ LAYER_CONTROLLER: "The spatial layer controller provides an interface for manipulating the visualization layers displayed in the spatial view.",
1226
+ GENOMIC_PROFILES: "The genomic profiles view displays genome browser tracks (using the genomic-profiles data type) containing bar plots, where the genome is along the x-axis and the value at each genome position is encoded with a bar along the y-axis.",
1227
+ GATING: "The gating scatterplot displays expression data for two genes (along the X and Y axes). Users can select two genes, and the scatterplot is dynamically generated using observation-by-feature matrix data. Gating can then be performed by using the lasso or box select tools.",
1228
+ FEATURE_LIST: "The feature list controller displays an interactive list of features (e.g., genes).",
1229
+ OBS_SETS: "The observation sets controller displays an interactive list of (potentially hierarchical) observation sets (e.g., cell clusters or cell type annotations).",
1230
+ OBS_SET_SIZES: "The observation set sizes view displays a bar plot with the currently-selected observation sets (e.g., cell types) on the x-axis and bars representing their size (e.g., number of cells) on the y-axis.",
1231
+ OBS_SET_FEATURE_VALUE_DISTRIBUTION: "The observation set feature value distribution view displays a violin plot with values (e.g., expression values) per set (e.g., cell type) for the selected feature (e.g., gene).",
1232
+ FEATURE_VALUE_HISTOGRAM: "The feature value histogram displays the distribution of values (e.g., expression) for the selected feature (e.g., gene).",
1233
+ DOT_PLOT: "The dot plot displays summary information about expression of the selected features (e.g., genes) for each selected observation set (e.g., cell type).",
1234
+ FEATURE_BAR_PLOT: "The feature bar plot displays one bar per observation (e.g., cell) along the x-axis, where the value of a selected feature (e.g., gene) is encoded along the y-axis."
1235
+ };
1206
1236
  const COMPONENT_COORDINATION_TYPES = {
1207
1237
  [ViewType$1.SCATTERPLOT]: [
1208
1238
  CoordinationType$1.DATASET,
@@ -8968,6 +8998,9 @@ const configSchema1_0_16 = configSchema1_0_13.extend({
8968
8998
  coordinationScopesBy: componentCoordinationScopesBy.optional()
8969
8999
  }))
8970
9000
  });
9001
+ const configSchema1_0_17 = configSchema1_0_16.extend({
9002
+ version: z.literal("1.0.17")
9003
+ });
8971
9004
  configSchema1_0_0.shape.coordinationSpace.unwrap();
8972
9005
  configSchema1_0_0.shape.layout.element.shape.coordinationScopes.unwrap();
8973
9006
  function upgradeReplaceViewProp(prefix2, view, coordinationSpace) {
@@ -9439,7 +9472,43 @@ function upgradeFrom1_0_15(config2) {
9439
9472
  version: "1.0.16"
9440
9473
  };
9441
9474
  }
9442
- const latestConfigSchema = configSchema1_0_16;
9475
+ function upgradeFrom1_0_16(config2) {
9476
+ const newConfig = cloneDeep(config2);
9477
+ const { datasets } = newConfig;
9478
+ const newDatasets = datasets.map((datasetDef) => {
9479
+ const { files: files2 } = datasetDef;
9480
+ const newFiles = files2.map((fileDef) => {
9481
+ const { fileType, options } = fileDef;
9482
+ if (fileType === "obsSets.anndata.zarr") {
9483
+ return {
9484
+ ...fileDef,
9485
+ options: {
9486
+ obsSets: options
9487
+ }
9488
+ };
9489
+ }
9490
+ if (fileType === "obsFeatureColumns.anndata.zarr") {
9491
+ return {
9492
+ ...fileDef,
9493
+ options: {
9494
+ obsFeatureColumns: options
9495
+ }
9496
+ };
9497
+ }
9498
+ return fileDef;
9499
+ });
9500
+ return {
9501
+ ...datasetDef,
9502
+ files: newFiles
9503
+ };
9504
+ });
9505
+ return {
9506
+ ...newConfig,
9507
+ datasets: newDatasets,
9508
+ version: "1.0.17"
9509
+ };
9510
+ }
9511
+ const latestConfigSchema = configSchema1_0_17;
9443
9512
  const SCHEMA_HANDLERS = [
9444
9513
  [configSchema0_1_0, upgradeFrom0_1_0],
9445
9514
  [configSchema1_0_0, upgradeFrom1_0_0],
@@ -9457,7 +9526,8 @@ const SCHEMA_HANDLERS = [
9457
9526
  [configSchema1_0_12, upgradeFrom1_0_12],
9458
9527
  [configSchema1_0_13, upgradeFrom1_0_13],
9459
9528
  [configSchema1_0_14, upgradeFrom1_0_14],
9460
- [configSchema1_0_15, upgradeFrom1_0_15]
9529
+ [configSchema1_0_15, upgradeFrom1_0_15],
9530
+ [configSchema1_0_16, upgradeFrom1_0_16]
9461
9531
  ];
9462
9532
  var re$7 = { exports: {} };
9463
9533
  const SEMVER_SPEC_VERSION$1 = "2.0.0";
@@ -11728,10 +11798,11 @@ function makeConstantWithDeprecationMessage(currObj, oldObj) {
11728
11798
  const handler = {
11729
11799
  get(obj, prop) {
11730
11800
  const oldKeys = Object.keys(oldObj);
11731
- if (oldKeys.includes(prop)) {
11732
- console.warn(`Notice about the constant mapping ${prop}: '${oldObj[prop][0]}':
11733
- ${oldObj[prop][1]}`);
11734
- return oldObj[prop];
11801
+ const propKey = String(prop);
11802
+ if (oldKeys.includes(propKey)) {
11803
+ console.warn(`Notice about the constant mapping ${propKey}: '${oldObj[propKey][0]}':
11804
+ ${oldObj[propKey][1]}`);
11805
+ return oldObj[propKey];
11735
11806
  }
11736
11807
  return obj[prop];
11737
11808
  }
@@ -11816,7 +11887,7 @@ const annDataObsFeatureMatrix = z.object({
11816
11887
  featureFilterPath: z.string().optional().describe("If the feature index should be filtered, put a boolean column here (analogous to the previous geneFilter option). e.g., var/in_obsm_X_small_matrix"),
11817
11888
  initialFeatureFilterPath: z.string().optional().describe("If only a subset of the matrix should be loaded initially, put a boolean column along the feature axis here (analogous to the previous matrixGeneFilter option). e.g., var/highly_variable")
11818
11889
  });
11819
- const annDataObsSets = z.array(z.object({
11890
+ const annDataObsSetsArr = z.array(z.object({
11820
11891
  name: z.string().describe("The display name for the set, like 'Cell Type' or 'Louvain.'"),
11821
11892
  path: z.union([
11822
11893
  z.string().describe("The location in the AnnData store for the set, like 'obs/louvain' or 'obs/celltype.'"),
@@ -11824,9 +11895,15 @@ const annDataObsSets = z.array(z.object({
11824
11895
  ]),
11825
11896
  scorePath: z.string().optional().describe("The location in the AnnData store for the set confidence scores, like 'obs/celltype_prediction_score.'")
11826
11897
  }));
11827
- z.array(z.object({
11898
+ const annDataObsSets = z.object({
11899
+ obsSets: annDataObsSetsArr
11900
+ });
11901
+ const annDataObsFeatureColumnsArr = z.array(z.object({
11828
11902
  path: z.string()
11829
11903
  }));
11904
+ z.object({
11905
+ obsFeatureColumns: annDataObsFeatureColumnsArr
11906
+ });
11830
11907
  const annDataObsSpots = annDataObsm;
11831
11908
  const annDataObsPoints = annDataObsm;
11832
11909
  const annDataObsLocations = annDataObsm;
@@ -11949,7 +12026,7 @@ z.object({
11949
12026
  scoreColumn: z.string().optional()
11950
12027
  }))
11951
12028
  });
11952
- z.object({
12029
+ const anndataZarrSchema = z.object({
11953
12030
  obsLabels: z.union([
11954
12031
  annDataObsLabels,
11955
12032
  z.array(annDataConvenienceObsLabelsItem)
@@ -11959,7 +12036,7 @@ z.object({
11959
12036
  z.array(annDataConvenienceFeatureLabelsItem)
11960
12037
  ]),
11961
12038
  obsFeatureMatrix: annDataObsFeatureMatrix,
11962
- obsSets: annDataObsSets,
12039
+ obsSets: annDataObsSetsArr,
11963
12040
  obsSpots: annDataObsSpots,
11964
12041
  obsPoints: annDataObsPoints,
11965
12042
  obsLocations: annDataObsLocations,
@@ -11970,6 +12047,9 @@ z.object({
11970
12047
  ]),
11971
12048
  sampleEdges: annDataSampleEdges
11972
12049
  }).partial();
12050
+ anndataZarrSchema.extend({
12051
+ refSpecUrl: z.string()
12052
+ });
11973
12053
  z.object({
11974
12054
  // TODO: should `image` be a special schema
11975
12055
  // to allow specifying fileUid (like for embeddingType)?
@@ -133128,16 +133208,16 @@ function addDecoder(cases2, importFn) {
133128
133208
  }
133129
133209
  cases2.forEach((c2) => registry$1.set(c2, importFn));
133130
133210
  }
133131
- addDecoder([void 0, 1], () => import("./raw-18214a1e.js").then((m2) => m2.default));
133132
- addDecoder(5, () => import("./lzw-f9f89edb.js").then((m2) => m2.default));
133211
+ addDecoder([void 0, 1], () => import("./raw-2c83cfa0.js").then((m2) => m2.default));
133212
+ addDecoder(5, () => import("./lzw-d8b09410.js").then((m2) => m2.default));
133133
133213
  addDecoder(6, () => {
133134
133214
  throw new Error("old style JPEG compression is not supported.");
133135
133215
  });
133136
- addDecoder(7, () => import("./jpeg-9d65dc0f.js").then((m2) => m2.default));
133137
- addDecoder([8, 32946], () => import("./deflate-9b949812.js").then((m2) => m2.default));
133138
- addDecoder(32773, () => import("./packbits-92275192.js").then((m2) => m2.default));
133139
- addDecoder(34887, () => import("./lerc-5d951898.js").then((m2) => m2.default));
133140
- addDecoder(50001, () => import("./webimage-6f128314.js").then((m2) => m2.default));
133216
+ addDecoder(7, () => import("./jpeg-ba7bae31.js").then((m2) => m2.default));
133217
+ addDecoder([8, 32946], () => import("./deflate-49ab3d32.js").then((m2) => m2.default));
133218
+ addDecoder(32773, () => import("./packbits-937f8889.js").then((m2) => m2.default));
133219
+ addDecoder(34887, () => import("./lerc-2c40d55c.js").then((m2) => m2.default));
133220
+ addDecoder(50001, () => import("./webimage-bffbce5c.js").then((m2) => m2.default));
133141
133221
  function decodeRowAcc(row, stride) {
133142
133222
  let length2 = row.length - stride;
133143
133223
  let offset5 = 0;
@@ -153826,7 +153906,8 @@ function CellSetExpressionPlotSubscriber(props) {
153826
153906
  theme,
153827
153907
  jitter: jitter2 = false,
153828
153908
  yMin = null,
153829
- yUnits = null
153909
+ yUnits = null,
153910
+ helpText = ViewHelpMapping.OBS_SET_FEATURE_VALUE_DISTRIBUTION
153830
153911
  } = props;
153831
153912
  const classes = useStyles$1();
153832
153913
  const loaders = useLoaders();
@@ -153944,6 +154025,7 @@ function CellSetExpressionPlotSubscriber(props) {
153944
154025
  urls,
153945
154026
  theme,
153946
154027
  isReady,
154028
+ helpText,
153947
154029
  options: /* @__PURE__ */ jsxRuntimeExports.jsx(
153948
154030
  CellSetExpressionPlotOptions,
153949
154031
  {
@@ -205685,7 +205767,8 @@ function CellSetSizesPlotSubscriber(props) {
205685
205767
  downloadButtonVisible,
205686
205768
  removeGridComponent,
205687
205769
  theme,
205688
- title: titleOverride
205770
+ title: titleOverride,
205771
+ helpText = ViewHelpMapping.OBS_SET_SIZES
205689
205772
  } = props;
205690
205773
  const classes = useStyles$1();
205691
205774
  const loaders = useLoaders();
@@ -205774,6 +205857,7 @@ function CellSetSizesPlotSubscriber(props) {
205774
205857
  urls,
205775
205858
  theme,
205776
205859
  isReady,
205860
+ helpText,
205777
205861
  children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { ref: containerRef, className: classes.vegaContainer, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
205778
205862
  CellSetSizesPlot,
205779
205863
  {
@@ -205869,7 +205953,8 @@ function ExpressionHistogramSubscriber(props) {
205869
205953
  closeButtonVisible,
205870
205954
  downloadButtonVisible,
205871
205955
  removeGridComponent,
205872
- theme
205956
+ theme,
205957
+ helpText = ViewHelpMapping.FEATURE_VALUE_HISTOGRAM
205873
205958
  } = props;
205874
205959
  const classes = useStyles$1();
205875
205960
  const loaders = useLoaders();
@@ -205971,6 +206056,7 @@ function ExpressionHistogramSubscriber(props) {
205971
206056
  urls,
205972
206057
  theme,
205973
206058
  isReady,
206059
+ helpText,
205974
206060
  children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { ref: containerRef, className: classes.vegaContainer, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
205975
206061
  ExpressionHistogram,
205976
206062
  {
@@ -206189,7 +206275,8 @@ function DotPlotSubscriber(props) {
206189
206275
  removeGridComponent,
206190
206276
  theme,
206191
206277
  title: title2 = "Dot Plot",
206192
- transpose: transpose2 = true
206278
+ transpose: transpose2 = true,
206279
+ helpText = ViewHelpMapping.DOT_PLOT
206193
206280
  } = props;
206194
206281
  const classes = useStyles$1();
206195
206282
  const loaders = useLoaders();
@@ -206307,6 +206394,7 @@ function DotPlotSubscriber(props) {
206307
206394
  urls,
206308
206395
  theme,
206309
206396
  isReady,
206397
+ helpText,
206310
206398
  options: /* @__PURE__ */ jsxRuntimeExports.jsx(
206311
206399
  CellSetExpressionPlotOptions,
206312
206400
  {
@@ -206491,7 +206579,8 @@ function FeatureBarPlotSubscriber(props) {
206491
206579
  removeGridComponent,
206492
206580
  theme,
206493
206581
  yMin = 0,
206494
- yUnits = null
206582
+ yUnits = null,
206583
+ helpText = ViewHelpMapping.FEATURE_BAR_PLOT
206495
206584
  } = props;
206496
206585
  const classes = useStyles$1();
206497
206586
  const loaders = useLoaders();
@@ -206607,6 +206696,7 @@ function FeatureBarPlotSubscriber(props) {
206607
206696
  urls,
206608
206697
  theme,
206609
206698
  isReady,
206699
+ helpText,
206610
206700
  children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { ref: containerRef, className: classes.vegaContainer, children: expressionArr ? /* @__PURE__ */ jsxRuntimeExports.jsx(
206611
206701
  FeatureBarPlot,
206612
206702
  {
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { c, C, b, a, e, D, d, E, F } from "./index-ff4d0660.js";
1
+ import { c, C, b, a, e, D, d, E, F } from "./index-7aa37ee9.js";
2
2
  import "react";
3
3
  import "@vitessce/vit-s";
4
4
  import "react-dom";
@@ -1,4 +1,4 @@
1
- import { B as BaseDecoder } from "./index-ff4d0660.js";
1
+ import { B as BaseDecoder } from "./index-7aa37ee9.js";
2
2
  import "react";
3
3
  import "@vitessce/vit-s";
4
4
  import "react-dom";
@@ -1,5 +1,5 @@
1
1
  import { i as inflate_1 } from "./pako.esm-68f84e2a.js";
2
- import { g as getDefaultExportFromCjs, B as BaseDecoder } from "./index-ff4d0660.js";
2
+ import { g as getDefaultExportFromCjs, B as BaseDecoder } from "./index-7aa37ee9.js";
3
3
  import "react";
4
4
  import "@vitessce/vit-s";
5
5
  import "react-dom";
@@ -1,4 +1,4 @@
1
- import { B as BaseDecoder } from "./index-ff4d0660.js";
1
+ import { B as BaseDecoder } from "./index-7aa37ee9.js";
2
2
  import "react";
3
3
  import "@vitessce/vit-s";
4
4
  import "react-dom";
@@ -1,4 +1,4 @@
1
- import { B as BaseDecoder } from "./index-ff4d0660.js";
1
+ import { B as BaseDecoder } from "./index-7aa37ee9.js";
2
2
  import "react";
3
3
  import "@vitessce/vit-s";
4
4
  import "react-dom";
@@ -1,4 +1,4 @@
1
- import { B as BaseDecoder } from "./index-ff4d0660.js";
1
+ import { B as BaseDecoder } from "./index-7aa37ee9.js";
2
2
  import "react";
3
3
  import "@vitessce/vit-s";
4
4
  import "react-dom";
@@ -1,4 +1,4 @@
1
- import { B as BaseDecoder } from "./index-ff4d0660.js";
1
+ import { B as BaseDecoder } from "./index-7aa37ee9.js";
2
2
  import "react";
3
3
  import "@vitessce/vit-s";
4
4
  import "react-dom";
@@ -1 +1 @@
1
- {"version":3,"file":"CellSetExpressionPlotSubscriber.d.ts","sourceRoot":"","sources":["../src/CellSetExpressionPlotSubscriber.js"],"names":[],"mappings":"AAkGA;;;;;;;;;GASG;AACH,uDALG;IAAwB,mBAAmB;IACrB,kBAAkB,EAAhC,MAAM;IAEQ,KAAK,EAAnB,MAAM;CAChB,eAyJA"}
1
+ {"version":3,"file":"CellSetExpressionPlotSubscriber.d.ts","sourceRoot":"","sources":["../src/CellSetExpressionPlotSubscriber.js"],"names":[],"mappings":"AAkGA;;;;;;;;;GASG;AACH,uDALG;IAAwB,mBAAmB;IACrB,kBAAkB,EAAhC,MAAM;IAEQ,KAAK,EAAnB,MAAM;CAChB,eA2JA"}
@@ -1,7 +1,7 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import React, { useMemo } from 'react';
3
3
  import { TitleInfo, useCoordination, useLoaders, useUrls, useReady, useGridItemSize, useFeatureSelection, useObsSetsData, useObsFeatureMatrixIndices, useFeatureLabelsData, useSampleSetsData, useSampleEdgesData, } from '@vitessce/vit-s';
4
- import { ViewType, COMPONENT_COORDINATION_TYPES } from '@vitessce/constants-internal';
4
+ import { ViewType, COMPONENT_COORDINATION_TYPES, ViewHelpMapping } from '@vitessce/constants-internal';
5
5
  import { VALUE_TRANSFORM_OPTIONS, capitalize } from '@vitessce/utils';
6
6
  import { treeToSetSizesBySetNames, mergeObsSets, stratifyExpressionData, aggregateStratifiedExpressionData, } from '@vitessce/sets-utils';
7
7
  import CellSetExpressionPlotOptions from './CellSetExpressionPlotOptions.js';
@@ -63,7 +63,7 @@ function useExpressionByCellSet(sampleEdges, sampleSets, sampleSetSelection, exp
63
63
  * @param {string} props.theme The name of the current Vitessce theme.
64
64
  */
65
65
  export function CellSetExpressionPlotSubscriber(props) {
66
- const { coordinationScopes, closeButtonVisible, downloadButtonVisible, removeGridComponent, theme, jitter = false, yMin = null, yUnits = null, } = props;
66
+ const { coordinationScopes, closeButtonVisible, downloadButtonVisible, removeGridComponent, theme, jitter = false, yMin = null, yUnits = null, helpText = ViewHelpMapping.OBS_SET_FEATURE_VALUE_DISTRIBUTION, } = props;
67
67
  const classes = useStyles();
68
68
  const loaders = useLoaders();
69
69
  // Get "props" from the coordination space.
@@ -99,5 +99,5 @@ export function CellSetExpressionPlotSubscriber(props) {
99
99
  ? (featureLabelsMap?.get(geneSelection[0]) || geneSelection[0])
100
100
  : null;
101
101
  const selectedTransformName = transformOptions.find(o => o.value === featureValueTransform)?.name;
102
- return (_jsx(TitleInfo, { title: `Expression by ${capitalize(obsType)} Set${(firstGeneSelected ? ` (${firstGeneSelected})` : '')}`, closeButtonVisible: closeButtonVisible, downloadButtonVisible: downloadButtonVisible, removeGridComponent: removeGridComponent, urls: urls, theme: theme, isReady: isReady, options: (_jsx(CellSetExpressionPlotOptions, { featureValueTransform: featureValueTransform, setFeatureValueTransform: setFeatureValueTransform, featureValueTransformCoefficient: featureValueTransformCoefficient, setFeatureValueTransformCoefficient: setFeatureValueTransformCoefficient, transformOptions: transformOptions })), children: _jsx("div", { ref: containerRef, className: classes.vegaContainer, children: histogramData ? (_jsx(CellSetExpressionPlot, { yMin: yMin, yUnits: yUnits, jitter: jitter, cellSetSelection: cellSetSelection, sampleSetSelection: sampleSetSelection, sampleSetColor: sampleSetColor, colors: setArr, data: histogramData, exprMax: exprMax, theme: theme, width: width, height: height, obsType: obsType, featureType: featureType, featureValueType: featureValueType, featureValueTransformName: selectedTransformName })) : (_jsxs("span", { children: ["Select a ", featureType, "."] })) }) }));
102
+ return (_jsx(TitleInfo, { title: `Expression by ${capitalize(obsType)} Set${(firstGeneSelected ? ` (${firstGeneSelected})` : '')}`, closeButtonVisible: closeButtonVisible, downloadButtonVisible: downloadButtonVisible, removeGridComponent: removeGridComponent, urls: urls, theme: theme, isReady: isReady, helpText: helpText, options: (_jsx(CellSetExpressionPlotOptions, { featureValueTransform: featureValueTransform, setFeatureValueTransform: setFeatureValueTransform, featureValueTransformCoefficient: featureValueTransformCoefficient, setFeatureValueTransformCoefficient: setFeatureValueTransformCoefficient, transformOptions: transformOptions })), children: _jsx("div", { ref: containerRef, className: classes.vegaContainer, children: histogramData ? (_jsx(CellSetExpressionPlot, { yMin: yMin, yUnits: yUnits, jitter: jitter, cellSetSelection: cellSetSelection, sampleSetSelection: sampleSetSelection, sampleSetColor: sampleSetColor, colors: setArr, data: histogramData, exprMax: exprMax, theme: theme, width: width, height: height, obsType: obsType, featureType: featureType, featureValueType: featureValueType, featureValueTransformName: selectedTransformName })) : (_jsxs("span", { children: ["Select a ", featureType, "."] })) }) }));
103
103
  }
@@ -1 +1 @@
1
- {"version":3,"file":"CellSetSizesPlotSubscriber.d.ts","sourceRoot":"","sources":["../src/CellSetSizesPlotSubscriber.js"],"names":[],"mappings":"AAgBA;;;;;;;;;;GAUG;AACH,kDANG;IAAwB,mBAAmB;IACnB,OAAO;IAET,KAAK,EAAnB,MAAM;IACQ,KAAK,EAAnB,MAAM;CAChB,eA8HA"}
1
+ {"version":3,"file":"CellSetSizesPlotSubscriber.d.ts","sourceRoot":"","sources":["../src/CellSetSizesPlotSubscriber.js"],"names":[],"mappings":"AAgBA;;;;;;;;;;GAUG;AACH,kDANG;IAAwB,mBAAmB;IACnB,OAAO;IAET,KAAK,EAAnB,MAAM;IACQ,KAAK,EAAnB,MAAM;CAChB,eAgIA"}
@@ -2,7 +2,7 @@ import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import React, { useMemo, useState } from 'react';
3
3
  import { TitleInfo, useCoordination, useLoaders, useUrls, useReady, useGridItemSize, useObsSetsData, } from '@vitessce/vit-s';
4
4
  import { isEqual } from 'lodash-es';
5
- import { ViewType, COMPONENT_COORDINATION_TYPES } from '@vitessce/constants-internal';
5
+ import { ViewType, COMPONENT_COORDINATION_TYPES, ViewHelpMapping } from '@vitessce/constants-internal';
6
6
  import { mergeObsSets, treeToSetSizesBySetNames, filterPathsByExpansionAndSelection, findChangedHierarchy, } from '@vitessce/sets-utils';
7
7
  import { capitalize } from '@vitessce/utils';
8
8
  import CellSetSizesPlot from './CellSetSizesPlot.js';
@@ -19,7 +19,7 @@ import { useStyles } from './styles.js';
19
19
  * @param {string} props.title The component title.
20
20
  */
21
21
  export function CellSetSizesPlotSubscriber(props) {
22
- const { coordinationScopes, closeButtonVisible, downloadButtonVisible, removeGridComponent, theme, title: titleOverride, } = props;
22
+ const { coordinationScopes, closeButtonVisible, downloadButtonVisible, removeGridComponent, theme, title: titleOverride, helpText = ViewHelpMapping.OBS_SET_SIZES, } = props;
23
23
  const classes = useStyles();
24
24
  const loaders = useLoaders();
25
25
  // Get "props" from the coordination space.
@@ -71,5 +71,5 @@ export function CellSetSizesPlotSubscriber(props) {
71
71
  setCellSetSelection([...cellSetSelection, setNamePath]);
72
72
  }
73
73
  };
74
- return (_jsx(TitleInfo, { title: title, closeButtonVisible: closeButtonVisible, downloadButtonVisible: downloadButtonVisible, removeGridComponent: removeGridComponent, urls: urls, theme: theme, isReady: isReady, children: _jsx("div", { ref: containerRef, className: classes.vegaContainer, children: _jsx(CellSetSizesPlot, { data: data, onBarSelect: onBarSelect, theme: theme, width: width, height: height, obsType: obsType }) }) }));
74
+ return (_jsx(TitleInfo, { title: title, closeButtonVisible: closeButtonVisible, downloadButtonVisible: downloadButtonVisible, removeGridComponent: removeGridComponent, urls: urls, theme: theme, isReady: isReady, helpText: helpText, children: _jsx("div", { ref: containerRef, className: classes.vegaContainer, children: _jsx(CellSetSizesPlot, { data: data, onBarSelect: onBarSelect, theme: theme, width: width, height: height, obsType: obsType }) }) }));
75
75
  }
@@ -1 +1 @@
1
- {"version":3,"file":"DotPlotSubscriber.d.ts","sourceRoot":"","sources":["../src/DotPlotSubscriber.js"],"names":[],"mappings":"AAmBA;;;;;;;GAOG;AACH,yCALG;IAAwB,mBAAmB;IACrB,kBAAkB,EAAhC,MAAM;IAEQ,KAAK,EAAnB,MAAM;CAChB,eAkJA"}
1
+ {"version":3,"file":"DotPlotSubscriber.d.ts","sourceRoot":"","sources":["../src/DotPlotSubscriber.js"],"names":[],"mappings":"AAmBA;;;;;;;GAOG;AACH,yCALG;IAAwB,mBAAmB;IACrB,kBAAkB,EAAhC,MAAM;IAEQ,KAAK,EAAnB,MAAM;CAChB,eAoJA"}
@@ -1,7 +1,7 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import React from 'react';
3
3
  import { TitleInfo, useCoordination, useLoaders, useUrls, useReady, useGridItemSize, useFeatureSelection, useObsSetsData, useObsFeatureMatrixIndices, useFeatureLabelsData, useSampleSetsData, useSampleEdgesData, } from '@vitessce/vit-s';
4
- import { ViewType, COMPONENT_COORDINATION_TYPES } from '@vitessce/constants-internal';
4
+ import { ViewType, COMPONENT_COORDINATION_TYPES, ViewHelpMapping } from '@vitessce/constants-internal';
5
5
  import { VALUE_TRANSFORM_OPTIONS } from '@vitessce/utils';
6
6
  import CellSetExpressionPlotOptions from './CellSetExpressionPlotOptions.js';
7
7
  import DotPlot from './DotPlot.js';
@@ -16,7 +16,7 @@ import { useExpressionSummaries } from './dot-plot-hook.js';
16
16
  * @param {string} props.theme The name of the current Vitessce theme.
17
17
  */
18
18
  export function DotPlotSubscriber(props) {
19
- const { coordinationScopes, removeGridComponent, theme, title = 'Dot Plot', transpose = true, } = props;
19
+ const { coordinationScopes, removeGridComponent, theme, title = 'Dot Plot', transpose = true, helpText = ViewHelpMapping.DOT_PLOT, } = props;
20
20
  const classes = useStyles();
21
21
  const loaders = useLoaders();
22
22
  // Get "props" from the coordination space.
@@ -50,5 +50,5 @@ export function DotPlotSubscriber(props) {
50
50
  ]);
51
51
  const [resultArr, meanExpressionMax] = useExpressionSummaries(sampleEdges, sampleSets, sampleSetSelection, expressionData, obsIndex, cellSets, additionalCellSets, geneSelection, cellSetSelection, cellSetColor, featureValueTransform, featureValueTransformCoefficient, posThreshold, featureLabelsMap);
52
52
  const selectedTransformName = transformOptions.find(o => o.value === featureValueTransform)?.name;
53
- return (_jsx(TitleInfo, { title: title, removeGridComponent: removeGridComponent, urls: urls, theme: theme, isReady: isReady, options: (_jsx(CellSetExpressionPlotOptions, { featureValueTransform: featureValueTransform, setFeatureValueTransform: setFeatureValueTransform, featureValueTransformCoefficient: featureValueTransformCoefficient, setFeatureValueTransformCoefficient: setFeatureValueTransformCoefficient, transformOptions: transformOptions, featureValuePositivityThreshold: posThreshold, setFeatureValuePositivityThreshold: setPosThreshold, featureValueColormap: featureValueColormap, setFeatureValueColormap: setFeatureValueColormap })), children: _jsx("div", { ref: containerRef, className: classes.vegaContainer, children: resultArr ? (_jsx(DotPlot, { isStratified: isStratified, transpose: transpose, domainMax: meanExpressionMax, data: resultArr, theme: theme, width: width, height: height, obsType: obsType, featureType: featureType, featureValueType: featureValueType, featureValueTransformName: selectedTransformName, featureValueColormap: featureValueColormap, cellSetSelection: cellSetSelection })) : (_jsxs("span", { children: ["Select at least one ", featureType, "."] })) }) }));
53
+ return (_jsx(TitleInfo, { title: title, removeGridComponent: removeGridComponent, urls: urls, theme: theme, isReady: isReady, helpText: helpText, options: (_jsx(CellSetExpressionPlotOptions, { featureValueTransform: featureValueTransform, setFeatureValueTransform: setFeatureValueTransform, featureValueTransformCoefficient: featureValueTransformCoefficient, setFeatureValueTransformCoefficient: setFeatureValueTransformCoefficient, transformOptions: transformOptions, featureValuePositivityThreshold: posThreshold, setFeatureValuePositivityThreshold: setPosThreshold, featureValueColormap: featureValueColormap, setFeatureValueColormap: setFeatureValueColormap })), children: _jsx("div", { ref: containerRef, className: classes.vegaContainer, children: resultArr ? (_jsx(DotPlot, { isStratified: isStratified, transpose: transpose, domainMax: meanExpressionMax, data: resultArr, theme: theme, width: width, height: height, obsType: obsType, featureType: featureType, featureValueType: featureValueType, featureValueTransformName: selectedTransformName, featureValueColormap: featureValueColormap, cellSetSelection: cellSetSelection })) : (_jsxs("span", { children: ["Select at least one ", featureType, "."] })) }) }));
54
54
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ExpressionHistogramSubscriber.d.ts","sourceRoot":"","sources":["../src/ExpressionHistogramSubscriber.js"],"names":[],"mappings":"AAcA;;;;;;;;;GASG;AACH,qDALG;IAAwB,mBAAmB;IACrB,kBAAkB,EAAhC,MAAM;IAEQ,KAAK,EAAnB,MAAM;CAChB,eA0HA"}
1
+ {"version":3,"file":"ExpressionHistogramSubscriber.d.ts","sourceRoot":"","sources":["../src/ExpressionHistogramSubscriber.js"],"names":[],"mappings":"AAcA;;;;;;;;;GASG;AACH,qDALG;IAAwB,mBAAmB;IACrB,kBAAkB,EAAhC,MAAM;IAEQ,KAAK,EAAnB,MAAM;CAChB,eA4HA"}
@@ -2,7 +2,7 @@ import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import React, { useMemo, useCallback, } from 'react';
3
3
  import { sum } from 'd3-array';
4
4
  import { TitleInfo, useCoordination, useLoaders, useUrls, useReady, useGridItemSize, useObsFeatureMatrixData, useFeatureSelection, } from '@vitessce/vit-s';
5
- import { ViewType, COMPONENT_COORDINATION_TYPES } from '@vitessce/constants-internal';
5
+ import { ViewType, COMPONENT_COORDINATION_TYPES, ViewHelpMapping } from '@vitessce/constants-internal';
6
6
  import { setObsSelection, getObsInfoFromDataWithinRange } from '@vitessce/sets-utils';
7
7
  import ExpressionHistogram from './ExpressionHistogram.js';
8
8
  import { useStyles } from './styles.js';
@@ -17,7 +17,7 @@ import { useStyles } from './styles.js';
17
17
  * @param {string} props.theme The name of the current Vitessce theme.
18
18
  */
19
19
  export function ExpressionHistogramSubscriber(props) {
20
- const { coordinationScopes, closeButtonVisible, downloadButtonVisible, removeGridComponent, theme, } = props;
20
+ const { coordinationScopes, closeButtonVisible, downloadButtonVisible, removeGridComponent, theme, helpText = ViewHelpMapping.FEATURE_VALUE_HISTOGRAM, } = props;
21
21
  const classes = useStyles();
22
22
  const loaders = useLoaders();
23
23
  // Get "props" from the coordination space.
@@ -67,5 +67,5 @@ export function ExpressionHistogramSubscriber(props) {
67
67
  }, [additionalCellSets, cellSetColor, data, setAdditionalCellSets,
68
68
  setCellColorEncoding, setCellSetColor, setCellSetSelection, firstGeneSelected,
69
69
  ]);
70
- return (_jsx(TitleInfo, { title: `Histogram${(firstGeneSelected ? ` (${firstGeneSelected})` : '')}`, closeButtonVisible: closeButtonVisible, downloadButtonVisible: downloadButtonVisible, removeGridComponent: removeGridComponent, urls: urls, theme: theme, isReady: isReady, children: _jsx("div", { ref: containerRef, className: classes.vegaContainer, children: _jsx(ExpressionHistogram, { geneSelection: geneSelection, obsType: obsType, featureType: featureType, featureValueType: featureValueType, onSelect: onSelect, data: data, theme: theme, width: width, height: height }) }) }));
70
+ return (_jsx(TitleInfo, { title: `Histogram${(firstGeneSelected ? ` (${firstGeneSelected})` : '')}`, closeButtonVisible: closeButtonVisible, downloadButtonVisible: downloadButtonVisible, removeGridComponent: removeGridComponent, urls: urls, theme: theme, isReady: isReady, helpText: helpText, children: _jsx("div", { ref: containerRef, className: classes.vegaContainer, children: _jsx(ExpressionHistogram, { geneSelection: geneSelection, obsType: obsType, featureType: featureType, featureValueType: featureValueType, onSelect: onSelect, data: data, theme: theme, width: width, height: height }) }) }));
71
71
  }
@@ -1 +1 @@
1
- {"version":3,"file":"FeatureBarPlotSubscriber.d.ts","sourceRoot":"","sources":["../src/FeatureBarPlotSubscriber.js"],"names":[],"mappings":"AAkBA,kEA0IC"}
1
+ {"version":3,"file":"FeatureBarPlotSubscriber.d.ts","sourceRoot":"","sources":["../src/FeatureBarPlotSubscriber.js"],"names":[],"mappings":"AAkBA,kEA4IC"}
@@ -1,12 +1,12 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import React, { useMemo, useCallback } from 'react';
3
3
  import { TitleInfo, useCoordination, useLoaders, useUrls, useReady, useGridItemSize, useFeatureSelection, useObsFeatureMatrixIndices, useFeatureLabelsData, } from '@vitessce/vit-s';
4
- import { ViewType, COMPONENT_COORDINATION_TYPES } from '@vitessce/constants-internal';
4
+ import { ViewType, COMPONENT_COORDINATION_TYPES, ViewHelpMapping } from '@vitessce/constants-internal';
5
5
  import { setObsSelection } from '@vitessce/sets-utils';
6
6
  import FeatureBarPlot from './FeatureBarPlot.js';
7
7
  import { useStyles } from './styles.js';
8
8
  export function FeatureBarPlotSubscriber(props) {
9
- const { coordinationScopes, removeGridComponent, theme, yMin = 0, yUnits = null, } = props;
9
+ const { coordinationScopes, removeGridComponent, theme, yMin = 0, yUnits = null, helpText = ViewHelpMapping.FEATURE_BAR_PLOT, } = props;
10
10
  const classes = useStyles();
11
11
  const loaders = useLoaders();
12
12
  // Get "props" from the coordination space.
@@ -58,5 +58,5 @@ export function FeatureBarPlotSubscriber(props) {
58
58
  featureValueTransform, featureValueTransformCoefficient,
59
59
  firstGeneSelected,
60
60
  ]);
61
- return (_jsx(TitleInfo, { title: `Feature Values${(firstGeneSelected ? ` (${firstGeneSelected})` : '')}`, removeGridComponent: removeGridComponent, urls: urls, theme: theme, isReady: isReady, children: _jsx("div", { ref: containerRef, className: classes.vegaContainer, children: expressionArr ? (_jsx(FeatureBarPlot, { yMin: yMin, yMax: expressionMax, yUnits: yUnits, data: expressionArr, theme: theme, width: width, height: height, obsType: obsType, cellHighlight: cellHighlight, cellSetSelection: cellSetSelection, additionalCellSets: additionalCellSets, cellSetColor: cellSetColor, featureType: featureType, featureValueType: featureValueType, featureName: firstGeneSelected, onBarSelect: onBarSelect, onBarHighlight: onBarHighlight })) : (_jsxs("span", { children: ["Select a ", featureType, "."] })) }) }));
61
+ return (_jsx(TitleInfo, { title: `Feature Values${(firstGeneSelected ? ` (${firstGeneSelected})` : '')}`, removeGridComponent: removeGridComponent, urls: urls, theme: theme, isReady: isReady, helpText: helpText, children: _jsx("div", { ref: containerRef, className: classes.vegaContainer, children: expressionArr ? (_jsx(FeatureBarPlot, { yMin: yMin, yMax: expressionMax, yUnits: yUnits, data: expressionArr, theme: theme, width: width, height: height, obsType: obsType, cellHighlight: cellHighlight, cellSetSelection: cellSetSelection, additionalCellSets: additionalCellSets, cellSetColor: cellSetColor, featureType: featureType, featureValueType: featureValueType, featureName: firstGeneSelected, onBarSelect: onBarSelect, onBarHighlight: onBarHighlight })) : (_jsxs("span", { children: ["Select a ", featureType, "."] })) }) }));
62
62
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vitessce/statistical-plots",
3
- "version": "3.4.9",
3
+ "version": "3.4.11",
4
4
  "author": "Gehlenborg Lab",
5
5
  "homepage": "http://vitessce.io",
6
6
  "repository": {
@@ -28,12 +28,12 @@
28
28
  "react-aria": "^3.28.0",
29
29
  "internmap": "^2.0.3",
30
30
  "uuid": "^9.0.0",
31
- "@vitessce/constants-internal": "3.4.9",
32
- "@vitessce/sets-utils": "3.4.9",
33
- "@vitessce/utils": "3.4.9",
34
- "@vitessce/vega": "3.4.9",
35
- "@vitessce/vit-s": "3.4.9",
36
- "@vitessce/gl": "3.4.9"
31
+ "@vitessce/constants-internal": "3.4.11",
32
+ "@vitessce/sets-utils": "3.4.11",
33
+ "@vitessce/utils": "3.4.11",
34
+ "@vitessce/vega": "3.4.11",
35
+ "@vitessce/vit-s": "3.4.11",
36
+ "@vitessce/gl": "3.4.11"
37
37
  },
38
38
  "devDependencies": {
39
39
  "react": "^18.0.0",
@@ -9,7 +9,7 @@ import {
9
9
  useSampleSetsData,
10
10
  useSampleEdgesData,
11
11
  } from '@vitessce/vit-s';
12
- import { ViewType, COMPONENT_COORDINATION_TYPES } from '@vitessce/constants-internal';
12
+ import { ViewType, COMPONENT_COORDINATION_TYPES, ViewHelpMapping } from '@vitessce/constants-internal';
13
13
  import { VALUE_TRANSFORM_OPTIONS, capitalize } from '@vitessce/utils';
14
14
  import {
15
15
  treeToSetSizesBySetNames,
@@ -116,6 +116,7 @@ export function CellSetExpressionPlotSubscriber(props) {
116
116
  jitter = false,
117
117
  yMin = null,
118
118
  yUnits = null,
119
+ helpText = ViewHelpMapping.OBS_SET_FEATURE_VALUE_DISTRIBUTION,
119
120
  } = props;
120
121
 
121
122
  const classes = useStyles();
@@ -222,6 +223,7 @@ export function CellSetExpressionPlotSubscriber(props) {
222
223
  urls={urls}
223
224
  theme={theme}
224
225
  isReady={isReady}
226
+ helpText={helpText}
225
227
  options={(
226
228
  <CellSetExpressionPlotOptions
227
229
  featureValueTransform={featureValueTransform}
@@ -6,7 +6,7 @@ import {
6
6
  useObsSetsData,
7
7
  } from '@vitessce/vit-s';
8
8
  import { isEqual } from 'lodash-es';
9
- import { ViewType, COMPONENT_COORDINATION_TYPES } from '@vitessce/constants-internal';
9
+ import { ViewType, COMPONENT_COORDINATION_TYPES, ViewHelpMapping } from '@vitessce/constants-internal';
10
10
  import {
11
11
  mergeObsSets, treeToSetSizesBySetNames, filterPathsByExpansionAndSelection, findChangedHierarchy,
12
12
  } from '@vitessce/sets-utils';
@@ -33,6 +33,7 @@ export function CellSetSizesPlotSubscriber(props) {
33
33
  removeGridComponent,
34
34
  theme,
35
35
  title: titleOverride,
36
+ helpText = ViewHelpMapping.OBS_SET_SIZES,
36
37
  } = props;
37
38
 
38
39
  const classes = useStyles();
@@ -137,6 +138,7 @@ export function CellSetSizesPlotSubscriber(props) {
137
138
  urls={urls}
138
139
  theme={theme}
139
140
  isReady={isReady}
141
+ helpText={helpText}
140
142
  >
141
143
  <div ref={containerRef} className={classes.vegaContainer}>
142
144
  <CellSetSizesPlot
@@ -9,7 +9,7 @@ import {
9
9
  useSampleSetsData,
10
10
  useSampleEdgesData,
11
11
  } from '@vitessce/vit-s';
12
- import { ViewType, COMPONENT_COORDINATION_TYPES } from '@vitessce/constants-internal';
12
+ import { ViewType, COMPONENT_COORDINATION_TYPES, ViewHelpMapping } from '@vitessce/constants-internal';
13
13
  import { VALUE_TRANSFORM_OPTIONS } from '@vitessce/utils';
14
14
  import CellSetExpressionPlotOptions from './CellSetExpressionPlotOptions.js';
15
15
  import DotPlot from './DotPlot.js';
@@ -32,6 +32,7 @@ export function DotPlotSubscriber(props) {
32
32
  theme,
33
33
  title = 'Dot Plot',
34
34
  transpose = true,
35
+ helpText = ViewHelpMapping.DOT_PLOT,
35
36
  } = props;
36
37
 
37
38
  const classes = useStyles();
@@ -133,6 +134,7 @@ export function DotPlotSubscriber(props) {
133
134
  urls={urls}
134
135
  theme={theme}
135
136
  isReady={isReady}
137
+ helpText={helpText}
136
138
  options={(
137
139
  <CellSetExpressionPlotOptions
138
140
  featureValueTransform={featureValueTransform}
@@ -8,7 +8,7 @@ import {
8
8
  useUrls, useReady, useGridItemSize,
9
9
  useObsFeatureMatrixData, useFeatureSelection,
10
10
  } from '@vitessce/vit-s';
11
- import { ViewType, COMPONENT_COORDINATION_TYPES } from '@vitessce/constants-internal';
11
+ import { ViewType, COMPONENT_COORDINATION_TYPES, ViewHelpMapping } from '@vitessce/constants-internal';
12
12
  import { setObsSelection, getObsInfoFromDataWithinRange } from '@vitessce/sets-utils';
13
13
  import ExpressionHistogram from './ExpressionHistogram.js';
14
14
  import { useStyles } from './styles.js';
@@ -29,6 +29,7 @@ export function ExpressionHistogramSubscriber(props) {
29
29
  downloadButtonVisible,
30
30
  removeGridComponent,
31
31
  theme,
32
+ helpText = ViewHelpMapping.FEATURE_VALUE_HISTOGRAM,
32
33
  } = props;
33
34
 
34
35
  const classes = useStyles();
@@ -127,6 +128,7 @@ export function ExpressionHistogramSubscriber(props) {
127
128
  urls={urls}
128
129
  theme={theme}
129
130
  isReady={isReady}
131
+ helpText={helpText}
130
132
  >
131
133
  <div ref={containerRef} className={classes.vegaContainer}>
132
134
  <ExpressionHistogram
@@ -10,7 +10,7 @@ import {
10
10
  useObsFeatureMatrixIndices,
11
11
  useFeatureLabelsData,
12
12
  } from '@vitessce/vit-s';
13
- import { ViewType, COMPONENT_COORDINATION_TYPES } from '@vitessce/constants-internal';
13
+ import { ViewType, COMPONENT_COORDINATION_TYPES, ViewHelpMapping } from '@vitessce/constants-internal';
14
14
  import { setObsSelection } from '@vitessce/sets-utils';
15
15
  import FeatureBarPlot from './FeatureBarPlot.js';
16
16
  import { useStyles } from './styles.js';
@@ -23,6 +23,7 @@ export function FeatureBarPlotSubscriber(props) {
23
23
  theme,
24
24
  yMin = 0,
25
25
  yUnits = null,
26
+ helpText = ViewHelpMapping.FEATURE_BAR_PLOT,
26
27
  } = props;
27
28
 
28
29
  const classes = useStyles();
@@ -126,6 +127,7 @@ export function FeatureBarPlotSubscriber(props) {
126
127
  urls={urls}
127
128
  theme={theme}
128
129
  isReady={isReady}
130
+ helpText={helpText}
129
131
  >
130
132
  <div ref={containerRef} className={classes.vegaContainer}>
131
133
  {expressionArr ? (