@vitessce/heatmap 3.5.2 → 3.5.3

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.
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { a, H } from "./index-6ef9e70c.js";
1
+ import { a, H } from "./index-fc077d81.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-6ef9e70c.js";
1
+ import { B as BaseDecoder } from "./index-fc077d81.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-6ef9e70c.js";
2
+ import { g as getDefaultExportFromCjs, B as BaseDecoder } from "./index-fc077d81.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-6ef9e70c.js";
1
+ import { B as BaseDecoder } from "./index-fc077d81.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-6ef9e70c.js";
1
+ import { B as BaseDecoder } from "./index-fc077d81.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-6ef9e70c.js";
1
+ import { B as BaseDecoder } from "./index-fc077d81.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-6ef9e70c.js";
1
+ import { B as BaseDecoder } from "./index-fc077d81.js";
2
2
  import "react";
3
3
  import "@vitessce/vit-s";
4
4
  import "react-dom";
@@ -1 +1 @@
1
- {"version":3,"file":"Heatmap.d.ts","sourceRoot":"","sources":["../src/Heatmap.js"],"names":[],"mappings":";AAsDA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,2BAywBG"}
1
+ {"version":3,"file":"Heatmap.d.ts","sourceRoot":"","sources":["../src/Heatmap.js"],"names":[],"mappings":";AAuDA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,2BAixBG"}
@@ -4,7 +4,7 @@ import React, { useRef, useState, useCallback, useMemo, useEffect, useReducer, f
4
4
  import { v4 as uuidv4 } from 'uuid';
5
5
  import { deck, luma, HeatmapCompositeTextLayer, PixelatedBitmapLayer, PaddedExpressionHeatmapBitmapLayer, HeatmapBitmapLayer, TILE_SIZE, MAX_ROW_AGG, MIN_ROW_AGG, COLOR_BAR_SIZE, AXIS_MARGIN, DATA_TEXTURE_SIZE, PIXELATED_TEXTURE_PARAMETERS, } from '@vitessce/gl';
6
6
  import { range, clamp, isEqual } from 'lodash-es';
7
- import { getLongestString, DEFAULT_GL_OPTIONS, createDefaultUpdateCellsHover, createDefaultUpdateGenesHover, createDefaultUpdateTracksHover, createDefaultUpdateViewInfo, copyUint8Array, getDefaultColor, } from '@vitessce/utils';
7
+ import { getLongestString, DEFAULT_GL_OPTIONS, createDefaultUpdateCellsHover, createDefaultUpdateGenesHover, createDefaultUpdateTracksHover, createDefaultUpdateViewInfo, copyUint8Array, getDefaultColor, cleanFeatureId, } from '@vitessce/utils';
8
8
  import { layerFilter, getAxisSizes, mouseToHeatmapPosition, heatmapToMousePosition, mouseToCellColorPosition, } from './utils.js';
9
9
  import HeatmapWorkerPool from './HeatmapWorkerPool.js';
10
10
  // Only allocate the memory once for the container
@@ -386,10 +386,14 @@ const Heatmap = forwardRef((props, deckRef) => {
386
386
  // We do the mapping with featureLabelsMap here at one of the final steps before rendering
387
387
  // since it is for presentational purposes.
388
388
  const axisTopLabelData = useMemo(() => (!transpose && featureLabelsMap
389
- ? axisTopLabels.map(d => featureLabelsMap.get(d) || d)
389
+ ? axisTopLabels.map(d => (featureLabelsMap.get(d)
390
+ || featureLabelsMap.get(cleanFeatureId(d))
391
+ || d))
390
392
  : axisTopLabels).map((d, i) => [i, (axisTopDashes ? `- ${d}` : d)]), [axisTopLabels, axisTopDashes, transpose, featureLabelsMap]);
391
393
  const axisLeftLabelData = useMemo(() => (transpose && featureLabelsMap
392
- ? axisLeftLabels.map(d => featureLabelsMap.get(d) || d)
394
+ ? axisLeftLabels.map(d => (featureLabelsMap.get(d)
395
+ || featureLabelsMap.get(cleanFeatureId(d))
396
+ || d))
393
397
  : axisLeftLabels).map((d, i) => [i, (axisLeftDashes ? `${d} -` : d)]), [axisLeftLabels, axisLeftDashes, transpose, featureLabelsMap]);
394
398
  const cellColorLabelsData = useMemo(() => cellColorLabels.map((d, i) => [i, d && (transpose ? `${d} -` : `- ${d}`)]), [cellColorLabels, transpose]);
395
399
  const hideTopLabels = (transpose ? hideObservationLabels : hideVariableLabels);
@@ -1 +1 @@
1
- {"version":3,"file":"HeatmapSubscriber.d.ts","sourceRoot":"","sources":["../src/HeatmapSubscriber.js"],"names":[],"mappings":"AA2BA;;;;;;;;;;GAUG;AACH,yCATG;IAAsB,IAAI,EAAlB,MAAM;IACQ,kBAAkB,EAAhC,MAAM;IAEU,mBAAmB;IAErB,KAAK,EAAnB,MAAM;IACS,SAAS,EAAxB,OAAO;CAEjB,eA2PA"}
1
+ {"version":3,"file":"HeatmapSubscriber.d.ts","sourceRoot":"","sources":["../src/HeatmapSubscriber.js"],"names":[],"mappings":"AA4BA;;;;;;;;;;GAUG;AACH,yCATG;IAAsB,IAAI,EAAlB,MAAM;IACQ,kBAAkB,EAAhC,MAAM;IAEU,mBAAmB;IAErB,KAAK,EAAnB,MAAM;IACS,SAAS,EAAxB,OAAO;CAEjB,eAuQA"}
@@ -1,7 +1,7 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import React, { useState, useCallback, useMemo, } from 'react';
3
- import { TitleInfo, useDeckCanvasSize, useGetObsMembership, useGetObsInfo, useReady, useUrls, useObsSetsData, useObsFeatureMatrixData, useUint8ObsFeatureMatrix, useMultiObsLabels, useFeatureLabelsData, useCoordination, useLoaders, useSetComponentHover, useSetComponentViewInfo, } from '@vitessce/vit-s';
4
- import { pluralize as plur, capitalize, commaNumber } from '@vitessce/utils';
3
+ import { TitleInfo, useDeckCanvasSize, useGetObsMembership, useGetObsInfo, useReady, useUrls, useObsSetsData, useObsFeatureMatrixData, useUint8ObsFeatureMatrix, useMultiObsLabels, useFeatureLabelsData, useCoordination, useLoaders, useSetComponentHover, useSetComponentViewInfo, useExpandedFeatureLabelsMap, } from '@vitessce/vit-s';
4
+ import { pluralize as plur, capitalize, commaNumber, cleanFeatureId } from '@vitessce/utils';
5
5
  import { mergeObsSets, findLongestCommonPath, getCellColors } from '@vitessce/sets-utils';
6
6
  import { COMPONENT_COORDINATION_TYPES, ViewType, ViewHelpMapping } from '@vitessce/constants-internal';
7
7
  import { Legend } from '@vitessce/legend';
@@ -41,11 +41,14 @@ export function HeatmapSubscriber(props) {
41
41
  // Get data from loaders using the data hooks.
42
42
  const [obsLabelsTypes, obsLabelsData] = useMultiObsLabels(coordinationScopes, obsType, loaders, dataset);
43
43
  // TODO: support multiple feature labels using featureLabelsType coordination values.
44
- const [{ featureLabelsMap }, featureLabelsStatus, featureLabelsUrls] = useFeatureLabelsData(loaders, dataset, false, {}, {}, { featureType });
44
+ // eslint-disable-next-line max-len
45
+ const [{ featureLabelsMap: featureLabelsMapOrig }, featureLabelsStatus, featureLabelsUrls] = useFeatureLabelsData(loaders, dataset, false, {}, {}, { featureType });
46
+ const [featureLabelsMap, expandedFeatureLabelsStatus] = useExpandedFeatureLabelsMap(featureType, featureLabelsMapOrig, { stripCuriePrefixes: true });
45
47
  const [{ obsIndex, featureIndex, obsFeatureMatrix }, matrixStatus, matrixUrls,] = useObsFeatureMatrixData(loaders, dataset, true, {}, {}, { obsType, featureType, featureValueType });
46
48
  const [{ obsSets: cellSets, obsSetsMembership }, obsSetsStatus, obsSetsUrls] = useObsSetsData(loaders, dataset, false, { setObsSetSelection: setCellSetSelection, setObsSetColor: setCellSetColor }, { obsSetSelection: cellSetSelection, obsSetColor: cellSetColor }, { obsType });
47
49
  const isReady = useReady([
48
50
  featureLabelsStatus,
51
+ expandedFeatureLabelsStatus,
49
52
  matrixStatus,
50
53
  obsSetsStatus,
51
54
  ]);
@@ -68,7 +71,9 @@ export function HeatmapSubscriber(props) {
68
71
  const getObsMembership = useGetObsMembership(obsSetsMembership);
69
72
  const getFeatureInfo = useCallback((featureId) => {
70
73
  if (featureId) {
71
- const featureLabel = featureLabelsMap?.get(featureId) || featureId;
74
+ const featureLabel = (featureLabelsMap?.get(featureId)
75
+ || featureLabelsMap?.get(cleanFeatureId(featureId))
76
+ || featureId);
72
77
  return { [`${capitalize(variablesLabel)} ID`]: featureLabel };
73
78
  }
74
79
  return null;
@@ -107,5 +112,5 @@ export function HeatmapSubscriber(props) {
107
112
  setTargetY(target[1]);
108
113
  }, colormapRange: geneExpressionColormapRange, setColormapRange: setGeneExpressionColormapRange, height: height, width: width, theme: theme, uuid: uuid, uint8ObsFeatureMatrix: uint8ObsFeatureMatrix?.data, cellColors: cellColors, colormap: geneExpressionColormap, setIsRendering: setIsRendering, setCellHighlight: setCellHighlight, setGeneHighlight: setGeneHighlight, featureLabelsMap: featureLabelsMap, obsIndex: obsIndex, featureIndex: featureIndex, setTrackHighlight: setTrackHighlight, setComponentHover: () => {
109
114
  setComponentHover(uuid);
110
- }, updateViewInfo: setComponentViewInfo, observationsTitle: observationsTitle, variablesTitle: variablesTitle, variablesDashes: false, observationsDashes: false, cellColorLabels: cellColorLabels, useDevicePixels: true, onHeatmapClick: onHeatmapClick, setColorEncoding: setHoveredColorEncoding }), tooltipsVisible && (_jsx(HeatmapTooltipSubscriber, { parentUuid: uuid, width: width, height: height, transpose: transpose, getObsInfo: getObsInfo, getFeatureInfo: getFeatureInfo, obsHighlight: cellHighlight, featureHighlight: geneHighlight })), _jsx(Legend, { visible: true, theme: theme, featureType: featureType, featureValueType: featureValueType, obsColorEncoding: "geneExpression", considerSelections: false, featureSelection: geneSelection, obsSetSelection: cellSetSelection, featureValueColormap: geneExpressionColormap, featureValueColormapRange: geneExpressionColormapRange, extent: obsFeatureMatrixExtent })] }));
115
+ }, updateViewInfo: setComponentViewInfo, observationsTitle: observationsTitle, variablesTitle: variablesTitle, variablesDashes: false, observationsDashes: false, cellColorLabels: cellColorLabels, useDevicePixels: true, onHeatmapClick: onHeatmapClick, setColorEncoding: setHoveredColorEncoding }), tooltipsVisible && (_jsx(HeatmapTooltipSubscriber, { parentUuid: uuid, width: width, height: height, transpose: transpose, getObsInfo: getObsInfo, getFeatureInfo: getFeatureInfo, obsHighlight: cellHighlight, featureHighlight: geneHighlight, featureType: featureType, featureLabelsMap: featureLabelsMap })), _jsx(Legend, { visible: true, theme: theme, featureType: featureType, featureValueType: featureValueType, obsColorEncoding: "geneExpression", considerSelections: false, featureSelection: geneSelection, obsSetSelection: cellSetSelection, featureValueColormap: geneExpressionColormap, featureValueColormapRange: geneExpressionColormapRange, extent: obsFeatureMatrixExtent })] }));
111
116
  }
@@ -1 +1 @@
1
- {"version":3,"file":"HeatmapTooltipSubscriber.d.ts","sourceRoot":"","sources":["../src/HeatmapTooltipSubscriber.js"],"names":[],"mappings":"AAIA,iFA8CC"}
1
+ {"version":3,"file":"HeatmapTooltipSubscriber.d.ts","sourceRoot":"","sources":["../src/HeatmapTooltipSubscriber.js"],"names":[],"mappings":"AAIA,iFAoDC"}
@@ -3,7 +3,7 @@ import React from 'react';
3
3
  import { Tooltip2D, TooltipContent } from '@vitessce/tooltip';
4
4
  import { useComponentHover, useComponentViewInfo } from '@vitessce/vit-s';
5
5
  export default function HeatmapTooltipSubscriber(props) {
6
- const { parentUuid, width, height, transpose, getObsInfo, getFeatureInfo, obsHighlight, featureHighlight, } = props;
6
+ const { parentUuid, width, height, transpose, getObsInfo, getFeatureInfo, obsHighlight, featureHighlight, featureType, featureLabelsMap, } = props;
7
7
  const sourceUuid = useComponentHover();
8
8
  const viewInfo = useComponentViewInfo(parentUuid);
9
9
  const [cellInfo, cellCoord] = (obsHighlight && getObsInfo ? ([
@@ -20,5 +20,5 @@ export default function HeatmapTooltipSubscriber(props) {
20
20
  ]) : ([null, null]));
21
21
  const x = (transpose ? cellCoord : geneCoord);
22
22
  const y = (transpose ? geneCoord : cellCoord);
23
- return ((cellInfo || geneInfo ? (_jsx(Tooltip2D, { x: x, y: y, parentUuid: parentUuid, parentWidth: width, parentHeight: height, sourceUuid: sourceUuid, children: _jsx(TooltipContent, { info: { ...geneInfo, ...cellInfo } }) })) : null));
23
+ return ((cellInfo || geneInfo ? (_jsx(Tooltip2D, { x: x, y: y, parentUuid: parentUuid, parentWidth: width, parentHeight: height, sourceUuid: sourceUuid, children: _jsx(TooltipContent, { info: { ...geneInfo, ...cellInfo }, featureType: featureType, featureLabelsMap: featureLabelsMap }) })) : null));
24
24
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vitessce/heatmap",
3
- "version": "3.5.2",
3
+ "version": "3.5.3",
4
4
  "author": "HIDIVE Lab at HMS",
5
5
  "homepage": "http://vitessce.io",
6
6
  "repository": {
@@ -20,14 +20,14 @@
20
20
  "lodash-es": "^4.17.21",
21
21
  "uuid": "^9.0.0",
22
22
  "react-aria": "^3.28.0",
23
- "@vitessce/constants-internal": "3.5.2",
24
- "@vitessce/gl": "3.5.2",
25
- "@vitessce/legend": "3.5.2",
26
- "@vitessce/sets-utils": "3.5.2",
27
- "@vitessce/tooltip": "3.5.2",
28
- "@vitessce/utils": "3.5.2",
29
- "@vitessce/vit-s": "3.5.2",
30
- "@vitessce/workers": "3.5.2"
23
+ "@vitessce/constants-internal": "3.5.3",
24
+ "@vitessce/gl": "3.5.3",
25
+ "@vitessce/legend": "3.5.3",
26
+ "@vitessce/sets-utils": "3.5.3",
27
+ "@vitessce/tooltip": "3.5.3",
28
+ "@vitessce/utils": "3.5.3",
29
+ "@vitessce/vit-s": "3.5.3",
30
+ "@vitessce/workers": "3.5.3"
31
31
  },
32
32
  "devDependencies": {
33
33
  "@testing-library/jest-dom": "^5.16.4",
package/src/Heatmap.js CHANGED
@@ -27,6 +27,7 @@ import {
27
27
  createDefaultUpdateViewInfo,
28
28
  copyUint8Array,
29
29
  getDefaultColor,
30
+ cleanFeatureId,
30
31
  } from '@vitessce/utils';
31
32
 
32
33
 
@@ -511,11 +512,19 @@ const Heatmap = forwardRef((props, deckRef) => {
511
512
  // We do the mapping with featureLabelsMap here at one of the final steps before rendering
512
513
  // since it is for presentational purposes.
513
514
  const axisTopLabelData = useMemo(() => (!transpose && featureLabelsMap
514
- ? axisTopLabels.map(d => featureLabelsMap.get(d) || d)
515
+ ? axisTopLabels.map(d => (
516
+ featureLabelsMap.get(d)
517
+ || featureLabelsMap.get(cleanFeatureId(d))
518
+ || d
519
+ ))
515
520
  : axisTopLabels
516
521
  ).map((d, i) => [i, (axisTopDashes ? `- ${d}` : d)]), [axisTopLabels, axisTopDashes, transpose, featureLabelsMap]);
517
522
  const axisLeftLabelData = useMemo(() => (transpose && featureLabelsMap
518
- ? axisLeftLabels.map(d => featureLabelsMap.get(d) || d)
523
+ ? axisLeftLabels.map(d => (
524
+ featureLabelsMap.get(d)
525
+ || featureLabelsMap.get(cleanFeatureId(d))
526
+ || d
527
+ ))
519
528
  : axisLeftLabels
520
529
  ).map((d, i) => [i, (axisLeftDashes ? `${d} -` : d)]), [axisLeftLabels, axisLeftDashes, transpose, featureLabelsMap]);
521
530
  const cellColorLabelsData = useMemo(() => cellColorLabels.map((d, i) => [i, d && (transpose ? `${d} -` : `- ${d}`)]), [cellColorLabels, transpose]);
@@ -15,8 +15,9 @@ import {
15
15
  useFeatureLabelsData,
16
16
  useCoordination, useLoaders,
17
17
  useSetComponentHover, useSetComponentViewInfo,
18
+ useExpandedFeatureLabelsMap,
18
19
  } from '@vitessce/vit-s';
19
- import { pluralize as plur, capitalize, commaNumber } from '@vitessce/utils';
20
+ import { pluralize as plur, capitalize, commaNumber, cleanFeatureId } from '@vitessce/utils';
20
21
  import { mergeObsSets, findLongestCommonPath, getCellColors } from '@vitessce/sets-utils';
21
22
  import { COMPONENT_COORDINATION_TYPES, ViewType, ViewHelpMapping } from '@vitessce/constants-internal';
22
23
  import { Legend } from '@vitessce/legend';
@@ -110,10 +111,15 @@ export function HeatmapSubscriber(props) {
110
111
  coordinationScopes, obsType, loaders, dataset,
111
112
  );
112
113
  // TODO: support multiple feature labels using featureLabelsType coordination values.
113
- const [{ featureLabelsMap }, featureLabelsStatus, featureLabelsUrls] = useFeatureLabelsData(
114
+ // eslint-disable-next-line max-len
115
+ const [{ featureLabelsMap: featureLabelsMapOrig }, featureLabelsStatus, featureLabelsUrls] = useFeatureLabelsData(
114
116
  loaders, dataset, false, {}, {},
115
117
  { featureType },
116
118
  );
119
+ const [featureLabelsMap, expandedFeatureLabelsStatus] = useExpandedFeatureLabelsMap(
120
+ featureType, featureLabelsMapOrig, { stripCuriePrefixes: true },
121
+ );
122
+
117
123
  const [
118
124
  { obsIndex, featureIndex, obsFeatureMatrix }, matrixStatus, matrixUrls,
119
125
  ] = useObsFeatureMatrixData(
@@ -128,6 +134,7 @@ export function HeatmapSubscriber(props) {
128
134
  );
129
135
  const isReady = useReady([
130
136
  featureLabelsStatus,
137
+ expandedFeatureLabelsStatus,
131
138
  matrixStatus,
132
139
  obsSetsStatus,
133
140
  ]);
@@ -162,7 +169,11 @@ export function HeatmapSubscriber(props) {
162
169
 
163
170
  const getFeatureInfo = useCallback((featureId) => {
164
171
  if (featureId) {
165
- const featureLabel = featureLabelsMap?.get(featureId) || featureId;
172
+ const featureLabel = (
173
+ featureLabelsMap?.get(featureId)
174
+ || featureLabelsMap?.get(cleanFeatureId(featureId))
175
+ || featureId
176
+ );
166
177
  return { [`${capitalize(variablesLabel)} ID`]: featureLabel };
167
178
  }
168
179
  return null;
@@ -269,6 +280,8 @@ export function HeatmapSubscriber(props) {
269
280
  getFeatureInfo={getFeatureInfo}
270
281
  obsHighlight={cellHighlight}
271
282
  featureHighlight={geneHighlight}
283
+ featureType={featureType}
284
+ featureLabelsMap={featureLabelsMap}
272
285
  />
273
286
  )}
274
287
  <Legend
@@ -8,6 +8,8 @@ export default function HeatmapTooltipSubscriber(props) {
8
8
  width, height, transpose,
9
9
  getObsInfo, getFeatureInfo,
10
10
  obsHighlight, featureHighlight,
11
+ featureType,
12
+ featureLabelsMap,
11
13
  } = props;
12
14
 
13
15
  const sourceUuid = useComponentHover();
@@ -44,7 +46,11 @@ export default function HeatmapTooltipSubscriber(props) {
44
46
  parentHeight={height}
45
47
  sourceUuid={sourceUuid}
46
48
  >
47
- <TooltipContent info={{ ...geneInfo, ...cellInfo }} />
49
+ <TooltipContent
50
+ info={{ ...geneInfo, ...cellInfo }}
51
+ featureType={featureType}
52
+ featureLabelsMap={featureLabelsMap}
53
+ />
48
54
  </Tooltip2D>
49
55
  ) : null)
50
56
  );