react-msaview 5.6.3 → 5.7.0

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 (111) hide show
  1. package/bundle/index.js +134 -140
  2. package/bundle/index.js.map +4 -4
  3. package/dist/colorSchemes.js +1 -1
  4. package/dist/components/ConservationTrack.js +3 -3
  5. package/dist/components/ConservationTrack.js.map +1 -1
  6. package/dist/components/Loading.js +3 -4
  7. package/dist/components/Loading.js.map +1 -1
  8. package/dist/components/MSAView.js +8 -8
  9. package/dist/components/MSAViewer.js +2 -2
  10. package/dist/components/ResizeHandles.js +1 -1
  11. package/dist/components/SequenceTextArea.js +2 -2
  12. package/dist/components/SequenceTextArea.js.map +1 -1
  13. package/dist/components/TextTrack.js +7 -6
  14. package/dist/components/TextTrack.js.map +1 -1
  15. package/dist/components/Track.js +2 -2
  16. package/dist/components/VerticalScrollbar.js +1 -1
  17. package/dist/components/dialogs/AboutDialog.js +1 -1
  18. package/dist/components/dialogs/DomainDialog.js +2 -2
  19. package/dist/components/dialogs/ExportSVGDialog.js +1 -1
  20. package/dist/components/dialogs/InterProScanDialog.js +1 -1
  21. package/dist/components/dialogs/MetadataDialog.js +1 -1
  22. package/dist/components/dialogs/TrackInfoDialog.js +1 -1
  23. package/dist/components/dialogs/UserProvidedDomainsDialog.js +1 -1
  24. package/dist/components/header/ColorSchemeMenu.js +1 -1
  25. package/dist/components/header/FileMenu.js +3 -3
  26. package/dist/components/header/Header.js +11 -11
  27. package/dist/components/header/MSASettingsMenu.js +1 -1
  28. package/dist/components/header/SettingsMenu.js +2 -2
  29. package/dist/components/header/SettingsMenu.js.map +1 -1
  30. package/dist/components/header/TreeSettingsMenu.js +1 -1
  31. package/dist/components/header/getDomainsMenu.d.ts +4 -4
  32. package/dist/components/header/getDomainsMenu.js +3 -3
  33. package/dist/components/import/ImportForm.js +2 -2
  34. package/dist/components/import/ImportFormExamples.js +2 -2
  35. package/dist/components/minimap/Minimap.js +2 -2
  36. package/dist/components/minimap/Minimap.js.map +1 -1
  37. package/dist/components/minimap/MinimapSVG.js +1 -1
  38. package/dist/components/msa/MSACanvas.js +4 -4
  39. package/dist/components/msa/MSACanvas.js.map +1 -1
  40. package/dist/components/msa/MSACanvasBlock.js +7 -7
  41. package/dist/components/msa/MSACanvasBlock.js.map +1 -1
  42. package/dist/components/msa/MSAMouseoverCanvas.js +2 -2
  43. package/dist/components/msa/MSAMouseoverCanvas.js.map +1 -1
  44. package/dist/components/msa/MSAPanel.js +3 -3
  45. package/dist/components/msa/renderBoxFeatureCanvasBlock.js +2 -2
  46. package/dist/components/msa/renderMSABlock.js +4 -4
  47. package/dist/components/msa/renderMSABlock.js.map +1 -1
  48. package/dist/components/msa/renderMSAMouseover.js +1 -1
  49. package/dist/components/msa/useMsaBlockMouse.d.ts +1 -1
  50. package/dist/components/msa/useMsaBlockMouse.js +15 -6
  51. package/dist/components/msa/useMsaBlockMouse.js.map +1 -1
  52. package/dist/components/tracks/renderTracksSvg.d.ts +7 -3
  53. package/dist/components/tracks/renderTracksSvg.js +19 -12
  54. package/dist/components/tracks/renderTracksSvg.js.map +1 -1
  55. package/dist/components/tree/TreeCanvas.js +5 -5
  56. package/dist/components/tree/TreeCanvas.js.map +1 -1
  57. package/dist/components/tree/TreeCanvasBlock.js +5 -5
  58. package/dist/components/tree/TreeCanvasBlock.js.map +1 -1
  59. package/dist/components/tree/TreeNodeMenu.js +1 -1
  60. package/dist/components/tree/TreePanel.js +1 -1
  61. package/dist/components/tree/dialogs/TreeNodeInfoDialog.js +1 -1
  62. package/dist/components/tree/renderTreeCanvas.d.ts +1 -1
  63. package/dist/components/tree/renderTreeCanvas.js +3 -3
  64. package/dist/components/tree/useTreeHover.d.ts +2 -2
  65. package/dist/components/tree/useTreeHover.js +1 -1
  66. package/dist/components/tree/useTreeHover.js.map +1 -1
  67. package/dist/createPaletteMap.js +1 -1
  68. package/dist/fetchUtils.js.map +1 -1
  69. package/dist/index.js +4 -4
  70. package/dist/launchInterProScan.js +1 -1
  71. package/dist/measureTextCanvas.js +1 -1
  72. package/dist/model/msaModel.js +2 -2
  73. package/dist/model/treeModel.js +2 -2
  74. package/dist/model.d.ts +69 -64
  75. package/dist/model.js +44 -26
  76. package/dist/model.js.map +1 -1
  77. package/dist/propertyConservation.js +1 -1
  78. package/dist/renderToSvg.js +8 -9
  79. package/dist/renderToSvg.js.map +1 -1
  80. package/dist/rowCoordinateCalculations.js +1 -1
  81. package/dist/seqPosToGlobalCol.js +1 -1
  82. package/dist/umd.js +2 -2
  83. package/dist/useCanvasAutorun.js +1 -1
  84. package/dist/useCanvasAutorun.js.map +1 -1
  85. package/dist/useColorContrast.js +1 -1
  86. package/dist/useWheelScroll.js +1 -1
  87. package/dist/version.d.ts +1 -1
  88. package/dist/version.js +1 -1
  89. package/dist/wheelZoom.d.ts +1 -1
  90. package/package.json +8 -7
  91. package/src/components/ConservationTrack.tsx +1 -1
  92. package/src/components/SequenceTextArea.tsx +1 -1
  93. package/src/components/TextTrack.tsx +3 -2
  94. package/src/components/header/SettingsMenu.tsx +1 -1
  95. package/src/components/minimap/Minimap.tsx +1 -1
  96. package/src/components/msa/MSACanvas.tsx +6 -1
  97. package/src/components/msa/MSACanvasBlock.tsx +3 -3
  98. package/src/components/msa/MSAMouseoverCanvas.tsx +1 -1
  99. package/src/components/msa/renderMSABlock.ts +1 -1
  100. package/src/components/msa/useMsaBlockMouse.ts +17 -8
  101. package/src/components/tracks/renderTracksSvg.ts +21 -7
  102. package/src/components/tree/TreeCanvas.tsx +2 -2
  103. package/src/components/tree/TreeCanvasBlock.tsx +1 -1
  104. package/src/components/tree/renderTreeCanvas.test.ts +1 -1
  105. package/src/components/tree/renderTreeCanvas.ts +1 -1
  106. package/src/components/tree/useTreeHover.ts +2 -2
  107. package/src/model.ts +25 -6
  108. package/src/renderToSvg.tsx +1 -1
  109. package/src/treeMetadata.test.ts +39 -0
  110. package/src/useCanvasAutorun.ts +3 -2
  111. package/src/version.ts +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"renderToSvg.js","sourceRoot":"","sources":["../src/renderToSvg.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"renderToSvg.js","sourceRoot":"","sources":["../src/renderToSvg.tsx"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { isBlank } from "./util.js";
1
+ import { isBlank } from './util.js';
2
2
  /**
3
3
  * MSA Coordinate Systems:
4
4
  *
@@ -1,4 +1,4 @@
1
- import { isBlank } from "./util.js";
1
+ import { isBlank } from './util.js';
2
2
  /**
3
3
  * Convert a sequence position (ungapped, 0-based) to a global column index.
4
4
  * This finds the global column that contains the Nth non-gap character.
package/dist/umd.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import * as React from 'react';
2
- export { default as MSAView } from "./components/Loading.js";
3
- export { default as MSAModelF } from "./model.js";
2
+ export { default as MSAView } from './components/Loading.js';
3
+ export { default as MSAModelF } from './model.js';
4
4
  export * from 'react-dom/client';
5
5
  export { React };
6
6
  //# sourceMappingURL=umd.js.map
@@ -16,7 +16,7 @@ export function useCanvasAutorun(draw, deps) {
16
16
  draw(ctx);
17
17
  })
18
18
  : undefined;
19
- // eslint-disable-next-line @eslint-react/exhaustive-deps
19
+ // eslint-disable-next-line react-hooks/exhaustive-deps
20
20
  }, deps);
21
21
  return ref;
22
22
  }
@@ -1 +1 @@
1
- {"version":3,"file":"useCanvasAutorun.js","sourceRoot":"","sources":["../src/useCanvasAutorun.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAA;AAGzC,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAE9B,6EAA6E;AAC7E,gFAAgF;AAChF,0EAA0E;AAC1E,2EAA2E;AAC3E,8EAA8E;AAC9E,MAAM,UAAU,gBAAgB,CAC9B,IAA6C,EAC7C,IAA0B;IAE1B,MAAM,GAAG,GAAG,MAAM,CAAoB,IAAI,CAAC,CAAA;IAC3C,8EAA8E;IAC9E,oEAAoE;IACpE,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,EAAE,UAAU,CAAC,IAAI,CAAC,CAAA;QACzC,OAAO,GAAG;YACR,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE;gBACX,IAAI,CAAC,GAAG,CAAC,CAAA;YACX,CAAC,CAAC;YACJ,CAAC,CAAC,SAAS,CAAA;QACb,yDAAyD;IAC3D,CAAC,EAAE,IAAI,CAAC,CAAA;IACR,OAAO,GAAG,CAAA;AACZ,CAAC"}
1
+ {"version":3,"file":"useCanvasAutorun.js","sourceRoot":"","sources":["../src/useCanvasAutorun.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAA;AAEzC,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAI9B,6EAA6E;AAC7E,gFAAgF;AAChF,0EAA0E;AAC1E,2EAA2E;AAC3E,8EAA8E;AAC9E,MAAM,UAAU,gBAAgB,CAC9B,IAA6C,EAC7C,IAA0B;IAE1B,MAAM,GAAG,GAAG,MAAM,CAAoB,IAAI,CAAC,CAAA;IAC3C,8EAA8E;IAC9E,oEAAoE;IACpE,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,EAAE,UAAU,CAAC,IAAI,CAAC,CAAA;QACzC,OAAO,GAAG;YACR,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE;gBACX,IAAI,CAAC,GAAG,CAAC,CAAA;YACX,CAAC,CAAC;YACJ,CAAC,CAAC,SAAS,CAAA;QACb,uDAAuD;IACzD,CAAC,EAAE,IAAI,CAAC,CAAA;IACR,OAAO,GAAG,CAAA;AACZ,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import { useMemo } from 'react';
2
2
  import { useTheme } from '@mui/material';
3
- import { colorContrast } from "./util.js";
3
+ import { colorContrast } from './util.js';
4
4
  /**
5
5
  * Resolves the current theme and a memoized contrast-color scheme for a given
6
6
  * color scheme. Shared by the MSA and text-track canvas blocks.
@@ -1,5 +1,5 @@
1
1
  import { useEffect, useRef, useState } from 'react';
2
- import { SCROLL_ZOOM_DIVISOR, getZoomNormalizer, normalizeWheelDelta, zoomFactorFromAccum, } from "./wheelZoom.js";
2
+ import { SCROLL_ZOOM_DIVISOR, getZoomNormalizer, normalizeWheelDelta, zoomFactorFromAccum, } from './wheelZoom.js';
3
3
  export function useWheelScroll({ ref, onScrollX, onScrollY, onZoom, scrollZoom, }) {
4
4
  const scheduled = useRef(false);
5
5
  const zoomScheduled = useRef(false);
package/dist/version.d.ts CHANGED
@@ -1 +1 @@
1
- export declare const version = "5.6.3";
1
+ export declare const version = "5.7.0";
package/dist/version.js CHANGED
@@ -1,2 +1,2 @@
1
- export const version = '5.6.3';
1
+ export const version = '5.7.0';
2
2
  //# sourceMappingURL=version.js.map
@@ -1,4 +1,4 @@
1
1
  export declare const SCROLL_ZOOM_DIVISOR = 500;
2
2
  export declare function normalizeWheelDelta(delta: number, mode: number): number;
3
- export declare function getZoomNormalizer(deltaY: number): 500 | 25 | 150 | 75;
3
+ export declare function getZoomNormalizer(deltaY: number): 25 | 75 | 150 | 500;
4
4
  export declare function zoomFactorFromAccum(zoomAccum: number, elapsedMs: number): number;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "react-msaview",
3
3
  "author": "Colin",
4
- "version": "5.6.3",
4
+ "version": "5.7.0",
5
5
  "license": "MIT",
6
6
  "type": "module",
7
7
  "repository": {
@@ -26,23 +26,24 @@
26
26
  },
27
27
  "peerDependencies": {
28
28
  "@jbrowse/core": ">=2.0.0",
29
- "@jbrowse/mobx-state-tree": "^5.0.0",
29
+ "@jbrowse/mobx-state-tree": "^6.0.0",
30
30
  "@mui/icons-material": ">=5.0.0",
31
31
  "@mui/material": ">=5.0.0",
32
- "mobx": ">=6.0.0",
33
- "mobx-react": ">=7.0.0",
32
+ "mobx": ">=7.0.0",
33
+ "mobx-react": ">=9.0.0",
34
34
  "react": ">=16.8.0",
35
35
  "react-dom": ">=16.8.0"
36
36
  },
37
37
  "devDependencies": {
38
- "@types/node": "^26.1.1",
38
+ "@jbrowse/core": "file:vendor-jbrowse/jbrowse-core.tgz",
39
+ "@types/node": "^26.1.2",
39
40
  "esbuild": "^0.28.1"
40
41
  },
41
42
  "dependencies": {
42
43
  "colord": "^2.9.3",
43
44
  "flatbush": "^4.6.2",
44
- "@jbrowse/svgcanvas": "5.6.3",
45
- "msa-parsers": "5.6.3"
45
+ "@jbrowse/svgcanvas": "5.7.0",
46
+ "msa-parsers": "5.7.0"
46
47
  },
47
48
  "scripts": {
48
49
  "clean": "rimraf dist bundle",
@@ -2,8 +2,8 @@ import React from 'react'
2
2
 
3
3
  import { observer } from 'mobx-react'
4
4
 
5
- import { ConservationTrackResizeHandle } from './ResizeHandles.tsx'
6
5
  import { useCanvasAutorun } from '../useCanvasAutorun.ts'
6
+ import { ConservationTrackResizeHandle } from './ResizeHandles.tsx'
7
7
  import {
8
8
  barTrackValues,
9
9
  drawConservationBars,
@@ -3,8 +3,8 @@ import React, { useState } from 'react'
3
3
  import { makeStyles } from '@jbrowse/core/util/tss-react'
4
4
  import { Button, TextField } from '@mui/material'
5
5
 
6
- import Checkbox2 from './Checkbox2.tsx'
7
6
  import copy from '../vendor/copyToClipboard.ts'
7
+ import Checkbox2 from './Checkbox2.tsx'
8
8
 
9
9
  const useStyles = makeStyles()({
10
10
  textAreaFont: {
@@ -31,7 +31,7 @@ const AnnotationBlock = observer(function ({
31
31
  } = track
32
32
 
33
33
  const colorScheme = customColorScheme ?? modelColorScheme
34
- const { contrastScheme } = useColorContrast(colorScheme)
34
+ const { theme, contrastScheme } = useColorContrast(colorScheme)
35
35
  const ref = useCanvasAutorun(
36
36
  ctx => {
37
37
  const {
@@ -55,13 +55,14 @@ const AnnotationBlock = observer(function ({
55
55
  colorScheme,
56
56
  contrastScheme,
57
57
  bgColor,
58
+ textColor: theme.palette.text.primary,
58
59
  colWidth,
59
60
  rowHeight,
60
61
  offsetX,
61
62
  blockSize,
62
63
  })
63
64
  },
64
- [model, offsetX, contrastScheme, colorScheme, data],
65
+ [model, offsetX, theme, contrastScheme, colorScheme, data],
65
66
  )
66
67
  return (
67
68
  <canvas
@@ -6,11 +6,11 @@ import Palette from '@mui/icons-material/Palette'
6
6
  import Settings from '@mui/icons-material/Settings'
7
7
  import { observer } from 'mobx-react'
8
8
 
9
+ import colorSchemes from '../../colorSchemes.ts'
9
10
  import {
10
11
  msaSettingsMenuItems,
11
12
  treeSettingsMenuItems,
12
13
  } from './settingsMenuItems.ts'
13
- import colorSchemes from '../../colorSchemes.ts'
14
14
 
15
15
  import type { MsaViewModel } from '../../model.ts'
16
16
 
@@ -2,8 +2,8 @@ import React, { useCallback, useState } from 'react'
2
2
 
3
3
  import { observer } from 'mobx-react'
4
4
 
5
- import { MINIMAP_BAR_HEIGHT, getMinimapLayout } from './minimapLayout.ts'
6
5
  import { useDragScroll } from '../../useDragScroll.ts'
6
+ import { MINIMAP_BAR_HEIGHT, getMinimapLayout } from './minimapLayout.ts'
7
7
 
8
8
  import type { MsaViewModel } from '../../model.ts'
9
9
 
@@ -2,9 +2,9 @@ import React, { useCallback, useRef } from 'react'
2
2
 
3
3
  import { observer } from 'mobx-react'
4
4
 
5
+ import { useWheelScroll } from '../../useWheelScroll.ts'
5
6
  import Loading from './Loading.tsx'
6
7
  import MSACanvasBlock from './MSACanvasBlock.tsx'
7
- import { useWheelScroll } from '../../useWheelScroll.ts'
8
8
 
9
9
  import type { MsaViewModel } from '../../model.ts'
10
10
 
@@ -48,6 +48,11 @@ const MSACanvas = observer(function ({ model }: { model: MsaViewModel }) {
48
48
  return (
49
49
  <div
50
50
  ref={ref}
51
+ // the MSA viewport: its rect is the origin every column/row offset is
52
+ // measured from (col*colWidth + scrollX, row*rowHeight + scrollY), which
53
+ // is what lets a screenshot callout anchor to an alignment column instead
54
+ // of a hand-measured pixel
55
+ data-testid="msa_canvas"
51
56
  onMouseDown={onMouseDown}
52
57
  onMouseUp={onMouseUp}
53
58
  onMouseLeave={event => {
@@ -1,14 +1,14 @@
1
1
  import React from 'react'
2
2
 
3
- import { BaseTooltip } from '@jbrowse/core/ui'
3
+ import BaseTooltip from '@jbrowse/core/ui/BaseTooltip'
4
4
  import { observer } from 'mobx-react'
5
5
 
6
+ import { useCanvasAutorun } from '../../useCanvasAutorun.ts'
7
+ import { useColorContrast } from '../../useColorContrast.ts'
6
8
  import ColumnStats from './ColumnStats.tsx'
7
9
  import { renderBoxFeatureCanvasBlock } from './renderBoxFeatureCanvasBlock.ts'
8
10
  import { renderMSABlock } from './renderMSABlock.ts'
9
11
  import { useMsaBlockMouse } from './useMsaBlockMouse.ts'
10
- import { useCanvasAutorun } from '../../useCanvasAutorun.ts'
11
- import { useColorContrast } from '../../useColorContrast.ts'
12
12
 
13
13
  import type { MsaViewModel } from '../../model.ts'
14
14
 
@@ -3,8 +3,8 @@ import React from 'react'
3
3
  import { isAlive } from '@jbrowse/mobx-state-tree'
4
4
  import { observer } from 'mobx-react'
5
5
 
6
- import { renderMouseover } from './renderMSAMouseover.ts'
7
6
  import { useCanvasAutorun } from '../../useCanvasAutorun.ts'
7
+ import { renderMouseover } from './renderMSAMouseover.ts'
8
8
 
9
9
  import type { MsaViewModel } from '../../model.ts'
10
10
 
@@ -1,7 +1,7 @@
1
- import { visibleColRange } from './visibleColRange.ts'
2
1
  import { setFontSize } from '../../setFontSize.ts'
3
2
  import { adjustColorForContrast } from '../../util.ts'
4
3
  import { getVisibleLeaves } from '../getVisibleLeaves.ts'
4
+ import { visibleColRange } from './visibleColRange.ts'
5
5
 
6
6
  import type { HierarchyNode } from '../../hierarchy.ts'
7
7
  import type { MsaViewModel } from '../../model.ts'
@@ -1,7 +1,7 @@
1
1
  import { useState } from 'react'
2
- import type React from 'react'
3
2
 
4
3
  import type { MsaViewModel } from '../../model.ts'
4
+ import type React from 'react'
5
5
 
6
6
  function eventToColRow({
7
7
  event,
@@ -49,11 +49,17 @@ export function useMsaBlockMouse({
49
49
  return eventToColRow({ event, el, offsetX, offsetY, colWidth, rowHeight })
50
50
  }
51
51
 
52
+ // a block can extend past the alignment (the last block is a full tile wide,
53
+ // and the panel is taller than the rows when there are few of them), so a
54
+ // pointer inside the block is not necessarily over a cell
55
+ function inBounds({ col, row }: { col: number; row: number }) {
56
+ return col >= 0 && col < model.numColumns && row >= 0 && row < model.numRows
57
+ }
58
+
52
59
  function onMouseMove(event: React.MouseEvent, el: HTMLElement) {
53
- const { col, row } = colRow(event, el)
54
- const inBounds =
55
- col >= 0 && col < model.numColumns && row >= 0 && row < model.numRows
56
- model.setMousePos(inBounds ? col : undefined, inBounds ? row : undefined)
60
+ const pos = colRow(event, el)
61
+ const hit = inBounds(pos)
62
+ model.setMousePos(hit ? pos.col : undefined, hit ? pos.row : undefined)
57
63
 
58
64
  const hasTooltip =
59
65
  !!model.hoveredInsertion ||
@@ -65,11 +71,14 @@ export function useMsaBlockMouse({
65
71
  }
66
72
 
67
73
  function onClick(event: React.MouseEvent, el: HTMLElement) {
68
- const { col, row } = colRow(event, el)
74
+ const pos = colRow(event, el)
75
+ const { col, row } = pos
69
76
  const { mouseClickCol, mouseClickRow } = model
70
- // clicking the same cell again clears the pinned crosshair
77
+ // clicking the same cell again clears the pinned crosshair, and so does
78
+ // clicking past the end of the alignment -- there is no cell to pin there
71
79
  const same = col === mouseClickCol && row === mouseClickRow
72
- model.setMouseClickPos(same ? undefined : col, same ? undefined : row)
80
+ const keep = inBounds(pos) && !same
81
+ model.setMouseClickPos(keep ? col : undefined, keep ? row : undefined)
73
82
  }
74
83
 
75
84
  function onMouseLeave() {
@@ -4,6 +4,7 @@ import { visibleColRange } from '../msa/visibleColRange.ts'
4
4
  import type { MsaViewModel } from '../../model.ts'
5
5
  import type { BasicTrack } from '../../types.ts'
6
6
  import type { RenderCtx } from '../renderCtx.ts'
7
+ import type { Theme } from '@mui/material'
7
8
 
8
9
  export function drawConservationBars({
9
10
  ctx,
@@ -51,6 +52,7 @@ export function drawTextTrackContent({
51
52
  colorScheme,
52
53
  contrastScheme,
53
54
  bgColor,
55
+ textColor,
54
56
  colWidth,
55
57
  rowHeight,
56
58
  offsetX,
@@ -61,6 +63,7 @@ export function drawTextTrackContent({
61
63
  colorScheme: Record<string, string>
62
64
  contrastScheme: Record<string, string>
63
65
  bgColor: boolean
66
+ textColor: string
64
67
  colWidth: number
65
68
  rowHeight: number
66
69
  offsetX: number
@@ -72,18 +75,23 @@ export function drawTextTrackContent({
72
75
  colWidth,
73
76
  })
74
77
  const str = data?.slice(xStart, xEnd)
78
+ const drawLetters = rowHeight >= 10 && colWidth >= rowHeight / 2
75
79
 
76
80
  for (let i = 0; str && i < str.length; i++) {
77
81
  const letter = str[i]!
78
82
  const upper = letter.toUpperCase()
79
- if (bgColor) {
80
- const x = (xStart + i) * colWidth
81
- ctx.fillStyle = colorScheme[upper] || 'white'
83
+ const color = colorScheme[upper]
84
+ const x = (xStart + i) * colWidth
85
+ const filled = bgColor && !!color
86
+ if (filled) {
87
+ ctx.fillStyle = color!
82
88
  ctx.fillRect(x, 0, colWidth, rowHeight)
83
- if (rowHeight >= 10 && colWidth >= rowHeight / 2) {
84
- ctx.fillStyle = contrastScheme[upper] || 'black'
85
- ctx.fillText(letter, x + colWidth / 2, rowHeight / 2 + 1)
86
- }
89
+ }
90
+ if (drawLetters) {
91
+ // a letter on a colored tile needs the tile's contrast color; otherwise it
92
+ // sits on the plain background and takes the theme's text color
93
+ ctx.fillStyle = filled ? (contrastScheme[upper] ?? 'black') : textColor
94
+ ctx.fillText(letter, x + colWidth / 2, rowHeight / 2 + 1)
87
95
  }
88
96
  }
89
97
  }
@@ -135,6 +143,7 @@ export function renderTextTrack({
135
143
  offsetX,
136
144
  offsetY,
137
145
  contrastScheme,
146
+ theme,
138
147
  blockSizeXOverride,
139
148
  highResScaleFactorOverride,
140
149
  }: {
@@ -144,6 +153,7 @@ export function renderTextTrack({
144
153
  offsetX: number
145
154
  offsetY: number
146
155
  contrastScheme: Record<string, string>
156
+ theme: Theme
147
157
  blockSizeXOverride?: number
148
158
  highResScaleFactorOverride?: number
149
159
  }) {
@@ -174,6 +184,7 @@ export function renderTextTrack({
174
184
  colorScheme,
175
185
  contrastScheme,
176
186
  bgColor,
187
+ textColor: theme.palette.text.primary,
177
188
  colWidth,
178
189
  rowHeight,
179
190
  offsetX,
@@ -188,6 +199,7 @@ export function renderAllTracks({
188
199
  ctx,
189
200
  offsetX,
190
201
  contrastScheme,
202
+ theme,
191
203
  blockSizeXOverride,
192
204
  highResScaleFactorOverride,
193
205
  }: {
@@ -195,6 +207,7 @@ export function renderAllTracks({
195
207
  ctx: RenderCtx
196
208
  offsetX: number
197
209
  contrastScheme: Record<string, string>
210
+ theme: Theme
198
211
  blockSizeXOverride?: number
199
212
  highResScaleFactorOverride?: number
200
213
  }) {
@@ -223,6 +236,7 @@ export function renderAllTracks({
223
236
  offsetX,
224
237
  offsetY: currentY,
225
238
  contrastScheme,
239
+ theme,
226
240
  blockSizeXOverride,
227
241
  highResScaleFactorOverride,
228
242
  })
@@ -3,11 +3,11 @@ import React, { useCallback, useRef } from 'react'
3
3
  import { isAlive } from '@jbrowse/mobx-state-tree'
4
4
  import { observer } from 'mobx-react'
5
5
 
6
- import TreeCanvasBlock from './TreeCanvasBlock.tsx'
7
- import { padding } from './renderTreeCanvas.ts'
8
6
  import { useCanvasAutorun } from '../../useCanvasAutorun.ts'
9
7
  import { useWheelScroll } from '../../useWheelScroll.ts'
10
8
  import { referenceColor, treeHoverColor } from '../overlayColors.ts'
9
+ import TreeCanvasBlock from './TreeCanvasBlock.tsx'
10
+ import { padding } from './renderTreeCanvas.ts'
11
11
 
12
12
  import type { MsaViewModel } from '../../model.ts'
13
13
 
@@ -4,11 +4,11 @@ import { makeStyles } from '@jbrowse/core/util/tss-react'
4
4
  import { useTheme } from '@mui/material'
5
5
  import { observer } from 'mobx-react'
6
6
 
7
+ import { useCanvasAutorun } from '../../useCanvasAutorun.ts'
7
8
  import TreeBranchMenu from './TreeBranchMenu.tsx'
8
9
  import TreeNodeMenu from './TreeNodeMenu.tsx'
9
10
  import { padding, renderTreeCanvas } from './renderTreeCanvas.ts'
10
11
  import { useTreeHover } from './useTreeHover.ts'
11
- import { useCanvasAutorun } from '../../useCanvasAutorun.ts'
12
12
 
13
13
  import type { MsaViewModel } from '../../model.ts'
14
14
 
@@ -1,7 +1,7 @@
1
1
  import { describe, expect, it } from 'vitest'
2
2
 
3
- import { getNodeX } from './renderTreeCanvas.ts'
4
3
  import { calcDepthToLeaf, findMaxBranchLen } from '../../hierarchy.ts'
4
+ import { getNodeX } from './renderTreeCanvas.ts'
5
5
 
6
6
  import type { HierarchyNode } from '../../hierarchy.ts'
7
7
 
@@ -6,10 +6,10 @@ import {
6
6
  import { setFontSize } from '../../setFontSize.ts'
7
7
  import { getVisibleLeaves } from '../getVisibleLeaves.ts'
8
8
 
9
- import type { ClickMapIndex } from './clickMap.ts'
10
9
  import type { HierarchyNode } from '../../hierarchy.ts'
11
10
  import type { MsaViewModel } from '../../model.ts'
12
11
  import type { RenderCtx } from '../renderCtx.ts'
12
+ import type { ClickMapIndex } from './clickMap.ts'
13
13
  import type { Theme } from '@mui/material'
14
14
 
15
15
  export const padding = 600
@@ -1,10 +1,10 @@
1
1
  import { useRef, useState } from 'react'
2
- import type React from 'react'
3
2
 
4
3
  import { ClickMapIndex } from './clickMap.ts'
5
4
 
6
- import type { ClickEntry } from './clickMap.ts'
7
5
  import type { MsaViewModel } from '../../model.ts'
6
+ import type { ClickEntry } from './clickMap.ts'
7
+ import type React from 'react'
8
8
 
9
9
  export interface TreeHoverTarget extends ClickEntry {
10
10
  clientX: number
package/src/model.ts CHANGED
@@ -13,7 +13,6 @@ import {
13
13
  parseNewick,
14
14
  } from 'msa-parsers'
15
15
 
16
-
17
16
  import { calculateBlocks } from './calculateBlocks.ts'
18
17
  import { clustalXColumnColors } from './clustalX.ts'
19
18
  import colorSchemes from './colorSchemes.ts'
@@ -280,7 +279,8 @@ function stateModelFactory() {
280
279
  * #volatile
281
280
  */
282
281
  status: undefined as
283
- { msg: string; url?: string; onCancel?: () => void } | undefined,
282
+ | { msg: string; url?: string; onCancel?: () => void }
283
+ | undefined,
284
284
  /**
285
285
  * #volatile
286
286
  * high resolution scale factor, helps make canvas look better on hi-dpi
@@ -343,7 +343,8 @@ function stateModelFactory() {
343
343
  * the currently hovered tree node ID and its descendant leaf names
344
344
  */
345
345
  hoveredTreeNode: undefined as
346
- { nodeId: string; descendantNames: string[] } | undefined,
346
+ | { nodeId: string; descendantNames: string[] }
347
+ | undefined,
347
348
 
348
349
  /**
349
350
  * #volatile
@@ -376,7 +377,8 @@ function stateModelFactory() {
376
377
  * #volatile
377
378
  */
378
379
  interProAnnotations: undefined as
379
- undefined | Record<string, InterProScanResults>,
380
+ | undefined
381
+ | Record<string, InterProScanResults>,
380
382
  }))
381
383
  .actions(self => ({
382
384
  /**
@@ -681,9 +683,26 @@ function stateModelFactory() {
681
683
  },
682
684
  /**
683
685
  * #getter
686
+ * extra per-row attributes, keyed by row name. Parsed defensively: the
687
+ * source is a user-supplied document (treeMetadataFilehandle, or a
688
+ * session snapshot), and this computed is read by labelWidthMap on every
689
+ * layout, so a malformed file would otherwise throw out of rendering and
690
+ * take the whole view down over a decorative field.
684
691
  */
685
- get treeMetadata() {
686
- return self.data.treeMetadata ? JSON.parse(self.data.treeMetadata) : {}
692
+ get treeMetadata(): Record<string, Record<string, string> | undefined> {
693
+ const text = self.data.treeMetadata
694
+ if (!text) {
695
+ return {}
696
+ }
697
+ try {
698
+ const parsed: unknown = JSON.parse(text)
699
+ return typeof parsed === 'object' && parsed !== null
700
+ ? (parsed as Record<string, Record<string, string> | undefined>)
701
+ : {}
702
+ } catch (e) {
703
+ console.error('failed to parse treeMetadata', e)
704
+ return {}
705
+ }
687
706
  },
688
707
  /**
689
708
  * #getter
@@ -306,6 +306,7 @@ function TrackRendering({
306
306
  model,
307
307
  ctx,
308
308
  contrastScheme,
309
+ theme,
309
310
  offsetX,
310
311
  blockSizeXOverride: msaAreaWidth,
311
312
  highResScaleFactorOverride: 1,
@@ -348,7 +349,6 @@ function ClipGroup({
348
349
  <g
349
350
  clipPath={`url(#${clipId})`}
350
351
  transform={transform}
351
- // eslint-disable-next-line @eslint-react/dom-no-dangerously-set-innerhtml
352
352
  dangerouslySetInnerHTML={{ __html: ctx.getSvg().innerHTML }}
353
353
  />
354
354
  </>
@@ -0,0 +1,39 @@
1
+ import { expect, test, vi } from 'vitest'
2
+
3
+ import stateModelFactory from './model.ts'
4
+
5
+ const MsaView = stateModelFactory()
6
+
7
+ const msa = '>seq1\nACGT\n>seq2\nACCT\n'
8
+
9
+ test('treeMetadata is parsed and keyed by row name', () => {
10
+ const model = MsaView.create({ type: 'MsaView' })
11
+ model.setData({
12
+ msa,
13
+ treeMetadata: JSON.stringify({ seq1: { genome: 'Human' } }),
14
+ })
15
+ expect(model.treeMetadata.seq1?.genome).toBe('Human')
16
+ expect(model.treeMetadata.seq2).toBeUndefined()
17
+ expect(model.getRowData('seq1').treeMetadata).toEqual({ genome: 'Human' })
18
+ })
19
+
20
+ test('malformed treeMetadata degrades to empty rather than throwing', () => {
21
+ const model = MsaView.create({ type: 'MsaView' })
22
+ const spy = vi.spyOn(console, 'error').mockImplementation(() => {})
23
+ model.setData({ msa, treeMetadata: '{not json' })
24
+
25
+ // treeMetadata comes from a user-supplied file, and consumers of this
26
+ // computed run during layout/render (labelWidthMap measures every label), so
27
+ // a parse failure must not throw out of them
28
+ expect(model.treeMetadata).toEqual({})
29
+ expect(() => model.getRowData('seq1')).not.toThrow()
30
+ expect(spy).toHaveBeenCalled()
31
+ spy.mockRestore()
32
+ })
33
+
34
+ test('non-object treeMetadata degrades to empty', () => {
35
+ const model = MsaView.create({ type: 'MsaView' })
36
+ model.setData({ msa, treeMetadata: 'null' })
37
+ expect(model.treeMetadata).toEqual({})
38
+ expect(() => model.getRowData('seq1')).not.toThrow()
39
+ })
@@ -1,8 +1,9 @@
1
1
  import { useEffect, useRef } from 'react'
2
- import type React from 'react'
3
2
 
4
3
  import { autorun } from 'mobx'
5
4
 
5
+ import type React from 'react'
6
+
6
7
  // Wires a canvas ref to a mobx autorun: grabs the 2d context once the canvas
7
8
  // mounts and re-runs `draw` whenever any observable it reads changes. Collapses
8
9
  // the getContext/null-guard/autorun-dispose boilerplate repeated by every
@@ -22,7 +23,7 @@ export function useCanvasAutorun(
22
23
  draw(ctx)
23
24
  })
24
25
  : undefined
25
- // eslint-disable-next-line @eslint-react/exhaustive-deps
26
+ // eslint-disable-next-line react-hooks/exhaustive-deps
26
27
  }, deps)
27
28
  return ref
28
29
  }