react-msaview 5.0.16 → 5.1.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 (85) hide show
  1. package/bundle/index.js +23 -23
  2. package/bundle/index.js.LICENSE.txt +1 -1
  3. package/bundle/index.js.map +1 -1
  4. package/dist/clustalX.d.ts +5 -0
  5. package/dist/clustalX.js +88 -0
  6. package/dist/clustalX.js.map +1 -0
  7. package/dist/components/SequenceTextArea.js +2 -2
  8. package/dist/components/SequenceTextArea.js.map +1 -1
  9. package/dist/components/TextTrack.js +3 -5
  10. package/dist/components/TextTrack.js.map +1 -1
  11. package/dist/components/Track.d.ts +2 -1
  12. package/dist/components/Track.js +4 -3
  13. package/dist/components/Track.js.map +1 -1
  14. package/dist/components/VerticalScrollbar.js +6 -31
  15. package/dist/components/VerticalScrollbar.js.map +1 -1
  16. package/dist/components/dialogs/InterProScanDialog.js +5 -3
  17. package/dist/components/dialogs/InterProScanDialog.js.map +1 -1
  18. package/dist/components/header/HeaderStatusArea.js +4 -2
  19. package/dist/components/header/HeaderStatusArea.js.map +1 -1
  20. package/dist/components/header/MSASettingsMenu.js +2 -27
  21. package/dist/components/header/MSASettingsMenu.js.map +1 -1
  22. package/dist/components/header/SettingsMenu.js +4 -69
  23. package/dist/components/header/SettingsMenu.js.map +1 -1
  24. package/dist/components/header/TreeSettingsMenu.js +3 -41
  25. package/dist/components/header/TreeSettingsMenu.js.map +1 -1
  26. package/dist/components/header/settingsMenuItems.d.ts +4 -0
  27. package/dist/components/header/settingsMenuItems.js +59 -0
  28. package/dist/components/header/settingsMenuItems.js.map +1 -0
  29. package/dist/components/minimap/Minimap.js +6 -31
  30. package/dist/components/minimap/Minimap.js.map +1 -1
  31. package/dist/components/msa/MSACanvasBlock.js +31 -33
  32. package/dist/components/msa/MSACanvasBlock.js.map +1 -1
  33. package/dist/components/msa/renderMSABlock.js +15 -9
  34. package/dist/components/msa/renderMSABlock.js.map +1 -1
  35. package/dist/components/tree/TreeCanvas.js +12 -14
  36. package/dist/components/tree/TreeCanvas.js.map +1 -1
  37. package/dist/components/tree/renderTreeCanvas.d.ts +9 -3
  38. package/dist/components/tree/renderTreeCanvas.js +14 -40
  39. package/dist/components/tree/renderTreeCanvas.js.map +1 -1
  40. package/dist/fetchUtils.d.ts +2 -1
  41. package/dist/fetchUtils.js +16 -2
  42. package/dist/fetchUtils.js.map +1 -1
  43. package/dist/hierarchy.d.ts +2 -0
  44. package/dist/hierarchy.js +25 -0
  45. package/dist/hierarchy.js.map +1 -1
  46. package/dist/launchInterProScan.d.ts +2 -1
  47. package/dist/launchInterProScan.js +31 -15
  48. package/dist/launchInterProScan.js.map +1 -1
  49. package/dist/model.d.ts +150 -494
  50. package/dist/model.js +23 -116
  51. package/dist/model.js.map +1 -1
  52. package/dist/useColorContrast.d.ts +10 -0
  53. package/dist/useColorContrast.js +13 -0
  54. package/dist/useColorContrast.js.map +1 -0
  55. package/dist/useDragScroll.d.ts +12 -0
  56. package/dist/useDragScroll.js +47 -0
  57. package/dist/useDragScroll.js.map +1 -0
  58. package/dist/version.d.ts +1 -1
  59. package/dist/version.js +1 -1
  60. package/dist/version.js.map +1 -1
  61. package/package.json +6 -6
  62. package/src/clustalX.test.ts +76 -0
  63. package/src/clustalX.ts +131 -0
  64. package/src/components/SequenceTextArea.tsx +2 -2
  65. package/src/components/TextTrack.tsx +3 -8
  66. package/src/components/Track.tsx +6 -9
  67. package/src/components/VerticalScrollbar.tsx +13 -40
  68. package/src/components/dialogs/InterProScanDialog.tsx +7 -1
  69. package/src/components/header/HeaderStatusArea.tsx +6 -1
  70. package/src/components/header/MSASettingsMenu.tsx +3 -27
  71. package/src/components/header/SettingsMenu.tsx +7 -79
  72. package/src/components/header/TreeSettingsMenu.tsx +4 -48
  73. package/src/components/header/settingsMenuItems.ts +68 -0
  74. package/src/components/minimap/Minimap.tsx +13 -38
  75. package/src/components/msa/MSACanvasBlock.tsx +53 -36
  76. package/src/components/msa/renderMSABlock.ts +16 -9
  77. package/src/components/tree/TreeCanvas.tsx +13 -35
  78. package/src/components/tree/renderTreeCanvas.ts +23 -38
  79. package/src/fetchUtils.ts +16 -2
  80. package/src/hierarchy.ts +27 -0
  81. package/src/launchInterProScan.ts +34 -10
  82. package/src/model.ts +32 -143
  83. package/src/useColorContrast.ts +18 -0
  84. package/src/useDragScroll.ts +55 -0
  85. package/src/version.ts +1 -1
@@ -0,0 +1,59 @@
1
+ export function msaSettingsMenuItems(model) {
2
+ const { drawMsaLetters, hideGaps, bgColor } = model;
3
+ return [
4
+ {
5
+ label: 'Draw letters',
6
+ type: 'checkbox',
7
+ checked: drawMsaLetters,
8
+ onClick: () => { model.setDrawMsaLetters(!drawMsaLetters); },
9
+ },
10
+ {
11
+ label: 'Color letters instead of background of tiles',
12
+ type: 'checkbox',
13
+ checked: !bgColor,
14
+ onClick: () => { model.setBgColor(!bgColor); },
15
+ },
16
+ {
17
+ label: 'Enable hiding gappy columns?',
18
+ type: 'checkbox',
19
+ checked: hideGaps,
20
+ onClick: () => { model.setHideGaps(!hideGaps); },
21
+ },
22
+ ];
23
+ }
24
+ export function treeSettingsMenuItems(model) {
25
+ const { drawTree, showBranchLen, labelsAlignRight, drawNodeBubbles, drawLabels, } = model;
26
+ return [
27
+ {
28
+ label: 'Show branch length',
29
+ type: 'checkbox',
30
+ checked: showBranchLen,
31
+ onClick: () => { model.setShowBranchLen(!showBranchLen); },
32
+ },
33
+ {
34
+ label: 'Show tree',
35
+ type: 'checkbox',
36
+ checked: drawTree,
37
+ onClick: () => { model.setDrawTree(!drawTree); },
38
+ },
39
+ {
40
+ label: 'Draw clickable bubbles on tree branches',
41
+ type: 'checkbox',
42
+ checked: drawNodeBubbles,
43
+ onClick: () => { model.setDrawNodeBubbles(!drawNodeBubbles); },
44
+ },
45
+ {
46
+ label: 'Tree labels align right',
47
+ type: 'checkbox',
48
+ checked: labelsAlignRight,
49
+ onClick: () => { model.setLabelsAlignRight(!labelsAlignRight); },
50
+ },
51
+ {
52
+ label: 'Draw labels',
53
+ type: 'checkbox',
54
+ checked: drawLabels,
55
+ onClick: () => { model.setDrawLabels(!drawLabels); },
56
+ },
57
+ ];
58
+ }
59
+ //# sourceMappingURL=settingsMenuItems.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settingsMenuItems.js","sourceRoot":"","sources":["../../../src/components/header/settingsMenuItems.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,oBAAoB,CAAC,KAAmB;IACtD,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,KAAK,CAAA;IACnD,OAAO;QACL;YACE,KAAK,EAAE,cAAc;YACrB,IAAI,EAAE,UAAU;YAChB,OAAO,EAAE,cAAc;YACvB,OAAO,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC,iBAAiB,CAAC,CAAC,cAAc,CAAC,CAAA,CAAC,CAAC;SAC5D;QACD;YACE,KAAK,EAAE,8CAA8C;YACrD,IAAI,EAAE,UAAU;YAChB,OAAO,EAAE,CAAC,OAAO;YACjB,OAAO,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAA,CAAC,CAAC;SAC9C;QACD;YACE,KAAK,EAAE,8BAA8B;YACrC,IAAI,EAAE,UAAU;YAChB,OAAO,EAAE,QAAQ;YACjB,OAAO,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,CAAA,CAAC,CAAC;SAChD;KACF,CAAA;AACH,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,KAAmB;IACvD,MAAM,EACJ,QAAQ,EACR,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,UAAU,GACX,GAAG,KAAK,CAAA;IACT,OAAO;QACL;YACE,KAAK,EAAE,oBAAoB;YAC3B,IAAI,EAAE,UAAU;YAChB,OAAO,EAAE,aAAa;YACtB,OAAO,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC,gBAAgB,CAAC,CAAC,aAAa,CAAC,CAAA,CAAC,CAAC;SAC1D;QACD;YACE,KAAK,EAAE,WAAW;YAClB,IAAI,EAAE,UAAU;YAChB,OAAO,EAAE,QAAQ;YACjB,OAAO,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,CAAA,CAAC,CAAC;SAChD;QACD;YACE,KAAK,EAAE,yCAAyC;YAChD,IAAI,EAAE,UAAU;YAChB,OAAO,EAAE,eAAe;YACxB,OAAO,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC,kBAAkB,CAAC,CAAC,eAAe,CAAC,CAAA,CAAC,CAAC;SAC9D;QACD;YACE,KAAK,EAAE,yBAAyB;YAChC,IAAI,EAAE,UAAU;YAChB,OAAO,EAAE,gBAAgB;YACzB,OAAO,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC,mBAAmB,CAAC,CAAC,gBAAgB,CAAC,CAAA,CAAC,CAAC;SAChE;QACD;YACE,KAAK,EAAE,aAAa;YACpB,IAAI,EAAE,UAAU;YAChB,OAAO,EAAE,UAAU;YACnB,OAAO,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC,aAAa,CAAC,CAAC,UAAU,CAAC,CAAA,CAAC,CAAC;SACpD;KACF,CAAA;AACH,CAAC"}
@@ -1,9 +1,8 @@
1
- import React, { useEffect, useRef, useState } from 'react';
1
+ import React, { useCallback, useState } from 'react';
2
2
  import { observer } from 'mobx-react';
3
+ import { useDragScroll } from "../../useDragScroll.js";
3
4
  const Minimap = observer(function ({ model }) {
4
- const [mouseDown, setMouseDown] = useState();
5
5
  const [hovered, setHovered] = useState(false);
6
- const scheduled = useRef(false);
7
6
  const { scrollX, msaAreaWidth, minimapHeight, colWidth, numColumns } = model;
8
7
  const unit = msaAreaWidth / numColumns / colWidth;
9
8
  const left = -scrollX;
@@ -12,30 +11,9 @@ const Minimap = observer(function ({ model }) {
12
11
  const e = right * unit;
13
12
  const fill = 'rgba(66, 119, 127, 0.3)';
14
13
  const w = Math.max(e - s, 20);
15
- useEffect(() => {
16
- function fn(event) {
17
- if (mouseDown !== undefined) {
18
- if (!scheduled.current) {
19
- scheduled.current = true;
20
- window.requestAnimationFrame(() => {
21
- model.setScrollX(mouseDown.scrollX - (event.clientX - mouseDown.clientX) / unit);
22
- scheduled.current = false;
23
- });
24
- }
25
- }
26
- }
27
- function fn2() {
28
- setMouseDown(undefined);
29
- }
30
- if (mouseDown !== undefined) {
31
- document.addEventListener('mousemove', fn);
32
- document.addEventListener('mouseup', fn2);
33
- return () => {
34
- document.removeEventListener('mousemove', fn);
35
- document.removeEventListener('mousemove', fn2);
36
- };
37
- }
38
- }, [model, unit, mouseDown]);
14
+ const { startDrag } = useDragScroll('x', useCallback((delta, startScroll) => {
15
+ model.setScrollX(startScroll - delta / unit);
16
+ }, [model, unit]));
39
17
  const barHeight = 12;
40
18
  const polygonHeight = minimapHeight - barHeight;
41
19
  return (React.createElement("div", { style: {
@@ -62,10 +40,7 @@ const Minimap = observer(function ({ model }) {
62
40
  }, onMouseOut: () => {
63
41
  setHovered(false);
64
42
  }, onMouseDown: event => {
65
- setMouseDown({
66
- clientX: event.clientX,
67
- scrollX: model.scrollX,
68
- });
43
+ startDrag(event, model.scrollX);
69
44
  } }),
70
45
  React.createElement("svg", { height: polygonHeight, style: { width: '100%' } },
71
46
  React.createElement("polygon", { fill: fill, points: [
@@ -1 +1 @@
1
- {"version":3,"file":"Minimap.js","sourceRoot":"","sources":["../../../src/components/minimap/Minimap.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Minimap.js","sourceRoot":"","sources":["../../../src/components/minimap/Minimap.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAEpD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAErC,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AAItD,MAAM,OAAO,GAAG,QAAQ,CAAC,UAAU,EAAE,KAAK,EAA2B;IACnE,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAC7C,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,KAAK,CAAA;IAC5E,MAAM,IAAI,GAAG,YAAY,GAAG,UAAU,GAAG,QAAQ,CAAA;IACjD,MAAM,IAAI,GAAG,CAAC,OAAO,CAAA;IACrB,MAAM,KAAK,GAAG,IAAI,GAAG,YAAY,CAAA;IACjC,MAAM,CAAC,GAAG,IAAI,GAAG,IAAI,CAAA;IACrB,MAAM,CAAC,GAAG,KAAK,GAAG,IAAI,CAAA;IACtB,MAAM,IAAI,GAAG,yBAAyB,CAAA;IACtC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAA;IAE7B,MAAM,EAAE,SAAS,EAAE,GAAG,aAAa,CACjC,GAAG,EACH,WAAW,CACT,CAAC,KAAa,EAAE,WAAmB,EAAE,EAAE;QACrC,KAAK,CAAC,UAAU,CAAC,WAAW,GAAG,KAAK,GAAG,IAAI,CAAC,CAAA;IAC9C,CAAC,EACD,CAAC,KAAK,EAAE,IAAI,CAAC,CACd,CACF,CAAA;IAED,MAAM,SAAS,GAAG,EAAE,CAAA;IACpB,MAAM,aAAa,GAAG,aAAa,GAAG,SAAS,CAAA;IAC/C,OAAO,CACL,6BACE,KAAK,EAAE;YACL,QAAQ,EAAE,UAAU;YACpB,MAAM,EAAE,aAAa;YACrB,KAAK,EAAE,MAAM;SACd;QAED,6BACE,KAAK,EAAE;gBACL,MAAM,EAAE,SAAS;gBACjB,SAAS,EAAE,YAAY;gBACvB,MAAM,EAAE,gBAAgB;aACzB,GACD;QACF,6BACE,KAAK,EAAE;gBACL,QAAQ,EAAE,UAAU;gBACpB,GAAG,EAAE,CAAC;gBACN,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;gBACpB,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,IAAI;gBACnD,MAAM,EAAE,SAAS;gBACjB,MAAM,EAAE,SAAS;gBACjB,KAAK,EAAE,CAAC;gBACR,MAAM,EAAE,GAAG;aACZ,EACD,WAAW,EAAE,GAAG,EAAE;gBAChB,UAAU,CAAC,IAAI,CAAC,CAAA;YAClB,CAAC,EACD,UAAU,EAAE,GAAG,EAAE;gBACf,UAAU,CAAC,KAAK,CAAC,CAAA;YACnB,CAAC,EACD,WAAW,EAAE,KAAK,CAAC,EAAE;gBACnB,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,CAAA;YACjC,CAAC,GACD;QAEF,6BAAK,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE;YAClD,iCACE,IAAI,EAAE,IAAI,EACV,MAAM,EAAE;oBACN,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;oBACV,CAAC,CAAC,EAAE,CAAC,CAAC;oBACN,CAAC,CAAC,EAAE,aAAa,CAAC;oBAClB,CAAC,YAAY,EAAE,aAAa,CAAC;iBAC9B,CAAC,QAAQ,EAAE,GACZ,CACE,CACF,CACP,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,eAAe,OAAO,CAAA"}
@@ -1,15 +1,20 @@
1
- import React, { useEffect, useMemo, useRef, useState } from 'react';
1
+ import React, { useEffect, useRef, useState } from 'react';
2
2
  import { BaseTooltip } from '@jbrowse/core/ui';
3
- import { useTheme } from '@mui/material';
4
3
  import { autorun } from 'mobx';
5
4
  import { observer } from 'mobx-react';
6
5
  import { renderBoxFeatureCanvasBlock } from "./renderBoxFeatureCanvasBlock.js";
7
6
  import { renderMSABlock } from "./renderMSABlock.js";
8
- import { colorContrast } from "../../util.js";
7
+ import { useColorContrast } from "../../useColorContrast.js";
8
+ function eventToColRow(event, el, offsetX, offsetY, colWidth, rowHeight) {
9
+ const { left, top } = el.getBoundingClientRect();
10
+ return {
11
+ col: Math.floor((event.clientX - left + offsetX) / colWidth),
12
+ row: Math.floor((event.clientY - top + offsetY) / rowHeight),
13
+ };
14
+ }
9
15
  const MSACanvasBlock = observer(function ({ model, offsetX, offsetY, }) {
10
16
  const { colWidth, rowHeight, scrollY, scrollX, colorScheme, blockSize, mouseClickCol, mouseClickRow, highResScaleFactor, } = model;
11
- const theme = useTheme();
12
- const contrastScheme = useMemo(() => colorContrast(colorScheme, theme), [colorScheme, theme]);
17
+ const { theme, contrastScheme } = useColorContrast(colorScheme);
13
18
  const ref = useRef(null);
14
19
  useEffect(() => {
15
20
  const ctx = ref.current?.getContext('2d');
@@ -49,36 +54,29 @@ const MSACanvasBlock = observer(function ({ model, offsetX, offsetY, }) {
49
54
  const { hoveredInsertion } = model;
50
55
  return (React.createElement(React.Fragment, null,
51
56
  React.createElement("canvas", { ref: ref, onMouseMove: event => {
52
- if (!ref.current) {
53
- return;
54
- }
55
- setMousePosition({ x: event.clientX, y: event.clientY });
56
- const { left, top } = ref.current.getBoundingClientRect();
57
- const mouseX = event.clientX - left + offsetX;
58
- const mouseY = event.clientY - top + offsetY;
59
- const x = Math.floor(mouseX / colWidth);
60
- const y = Math.floor(mouseY / rowHeight);
61
- // Only set mouse position if within valid MSA bounds
62
- if (x >= 0 && x < model.numColumns && y >= 0 && y < model.numRows) {
63
- model.setMousePos(x, y);
64
- }
65
- else {
66
- model.setMousePos(undefined, undefined);
57
+ if (ref.current) {
58
+ setMousePosition({ x: event.clientX, y: event.clientY });
59
+ const { col, row } = eventToColRow(event, ref.current, offsetX, offsetY, colWidth, rowHeight);
60
+ // Only set mouse position if within valid MSA bounds
61
+ if (col >= 0 &&
62
+ col < model.numColumns &&
63
+ row >= 0 &&
64
+ row < model.numRows) {
65
+ model.setMousePos(col, row);
66
+ }
67
+ else {
68
+ model.setMousePos(undefined, undefined);
69
+ }
67
70
  }
68
71
  }, onClick: event => {
69
- if (!ref.current) {
70
- return;
71
- }
72
- const { left, top } = ref.current.getBoundingClientRect();
73
- const mouseX = event.clientX - left + offsetX;
74
- const mouseY = event.clientY - top + offsetY;
75
- const x = Math.floor(mouseX / colWidth);
76
- const y = Math.floor(mouseY / rowHeight);
77
- if (x === mouseClickCol && y === mouseClickRow) {
78
- model.setMouseClickPos(undefined, undefined);
79
- }
80
- else {
81
- model.setMouseClickPos(x, y);
72
+ if (ref.current) {
73
+ const { col, row } = eventToColRow(event, ref.current, offsetX, offsetY, colWidth, rowHeight);
74
+ if (col === mouseClickCol && row === mouseClickRow) {
75
+ model.setMouseClickPos(undefined, undefined);
76
+ }
77
+ else {
78
+ model.setMouseClickPos(col, row);
79
+ }
82
80
  }
83
81
  }, onMouseLeave: () => {
84
82
  model.setMousePos();
@@ -1 +1 @@
1
- {"version":3,"file":"MSACanvasBlock.js","sourceRoot":"","sources":["../../../src/components/msa/MSACanvasBlock.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MSACanvasBlock.js","sourceRoot":"","sources":["../../../src/components/msa/MSACanvasBlock.tsx"],"names":[],"mappings":"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"}
@@ -7,7 +7,10 @@ export function renderMSABlock({ model, offsetX, offsetY, contrastScheme, ctx, t
7
7
  ctx.scale(k, k);
8
8
  ctx.translate(-offsetX, rowHeight / 2 - offsetY);
9
9
  ctx.textAlign = 'center';
10
- ctx.font = ctx.font.replace(/\d+px/, `${bgColor ? '' : 'bold '}${fontSize}px`);
10
+ // match an optional existing "bold " so re-renders don't accumulate it
11
+ // (an invalid "bold bold 16px" string would be silently ignored by canvas,
12
+ // freezing the font size against zoom changes)
13
+ ctx.font = ctx.font.replace(/(?:bold )?\d+px/, `${bgColor ? '' : 'bold '}${fontSize}px`);
11
14
  const yStart = Math.max(0, Math.floor((offsetY - rowHeight) / rowHeight));
12
15
  const yEnd = Math.max(0, Math.ceil((offsetY + by + rowHeight) / rowHeight));
13
16
  const xStart = Math.max(0, Math.floor(offsetX / colWidth));
@@ -61,14 +64,17 @@ function drawTiles({ model, offsetX, ctx, visibleLeaves, theme, xStart, xEnd, })
61
64
  const letter = str[j];
62
65
  // Use a muted background for positions that match reference
63
66
  const isMatchingReference = referenceSeq && name !== relativeTo && letter === referenceSeq[j];
64
- const color = isClustalX
65
- ? model.colClustalX[xStart + j][letter]
66
- : isPercentIdentity
67
- ? (() => {
68
- const consensus = model.colConsensus[xStart + j];
69
- return letter === consensus.letter ? consensus.color : undefined;
70
- })()
71
- : colorScheme[letter.toUpperCase()];
67
+ let color;
68
+ if (isClustalX) {
69
+ color = model.colClustalX[xStart + j][letter];
70
+ }
71
+ else if (isPercentIdentity) {
72
+ const consensus = model.colConsensus[xStart + j];
73
+ color = letter === consensus.letter ? consensus.color : undefined;
74
+ }
75
+ else {
76
+ color = colorScheme[letter.toUpperCase()];
77
+ }
72
78
  if (bgColor || isClustalX || isPercentIdentity) {
73
79
  // Use a very light background for matching positions in relative mode
74
80
  const finalColor = isMatchingReference
@@ -1 +1 @@
1
- {"version":3,"file":"renderMSABlock.js","sourceRoot":"","sources":["../../../src/components/msa/renderMSABlock.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"renderMSABlock.js","sourceRoot":"","sources":["../../../src/components/msa/renderMSABlock.ts"],"names":[],"mappings":"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"}
@@ -23,30 +23,28 @@ const TreeCanvas = observer(function ({ model }) {
23
23
  const { relativeTo, leaves, rowHeight, hoveredTreeNode, treeAreaWidth: w, height: h, scrollY: sy, mouseOverRowName, } = model;
24
24
  ctx.resetTransform();
25
25
  ctx.clearRect(0, 0, w, h);
26
- if (relativeTo) {
27
- const referenceLeaf = leaves.find(leaf => leaf.data.name === relativeTo);
28
- if (referenceLeaf) {
29
- ctx.fillStyle = referenceColor;
30
- ctx.fillRect(0, referenceLeaf.x + sy - rowHeight / 2, w, rowHeight);
26
+ const leafByName = new Map(leaves.map(leaf => [leaf.data.name, leaf]));
27
+ const fillRow = (name) => {
28
+ const leaf = leafByName.get(name);
29
+ if (leaf) {
30
+ ctx.fillRect(0, leaf.x + sy - rowHeight / 2, w, rowHeight);
31
31
  }
32
+ };
33
+ if (relativeTo) {
34
+ ctx.fillStyle = referenceColor;
35
+ fillRow(relativeTo);
32
36
  }
33
37
  if (hoveredTreeNode) {
34
38
  ctx.fillStyle = treeHoverColor;
35
39
  for (const descendantName of hoveredTreeNode.descendantNames) {
36
- const matchingLeaf = leaves.find(leaf => leaf.data.name === descendantName);
37
- if (matchingLeaf) {
38
- ctx.fillRect(0, matchingLeaf.x + sy - rowHeight / 2, w, rowHeight);
39
- }
40
+ fillRow(descendantName);
40
41
  }
41
42
  }
42
43
  if (mouseOverRowName &&
43
44
  mouseOverRowName !== relativeTo &&
44
45
  !hoveredTreeNode?.descendantNames.includes(mouseOverRowName)) {
45
- const matchingLeaf = leaves.find(leaf => leaf.data.name === mouseOverRowName);
46
- if (matchingLeaf) {
47
- ctx.fillStyle = treeHoverColor;
48
- ctx.fillRect(0, matchingLeaf.x + sy - rowHeight / 2, w, rowHeight);
49
- }
46
+ ctx.fillStyle = treeHoverColor;
47
+ fillRow(mouseOverRowName);
50
48
  }
51
49
  }
52
50
  })
@@ -1 +1 @@
1
- {"version":3,"file":"TreeCanvas.js","sourceRoot":"","sources":["../../../src/components/tree/TreeCanvas.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TreeCanvas.js","sourceRoot":"","sources":["../../../src/components/tree/TreeCanvas.tsx"],"names":[],"mappings":"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"}
@@ -21,26 +21,32 @@ interface ClickMapIndex {
21
21
  maxY: number;
22
22
  }): ClickEntry[];
23
23
  }
24
- export declare function renderTree({ offsetY, ctx, model, theme, blockSizeYOverride, }: {
24
+ export declare function renderTree({ offsetY, ctx, model, theme, maxBranchLen, maxDepthToLeaf, blockSizeYOverride, }: {
25
25
  offsetY: number;
26
26
  ctx: CanvasRenderingContext2D;
27
27
  model: MsaViewModel;
28
28
  theme: Theme;
29
+ maxBranchLen: number;
30
+ maxDepthToLeaf: number;
29
31
  blockSizeYOverride?: number;
30
32
  }): void;
31
- export declare function renderNodeBubbles({ ctx, clickMap, offsetY, model, blockSizeYOverride, }: {
33
+ export declare function renderNodeBubbles({ ctx, clickMap, offsetY, model, maxBranchLen, maxDepthToLeaf, blockSizeYOverride, }: {
32
34
  ctx: CanvasRenderingContext2D;
33
35
  clickMap?: ClickMapIndex;
34
36
  offsetY: number;
35
37
  model: MsaViewModel;
38
+ maxBranchLen: number;
39
+ maxDepthToLeaf: number;
36
40
  blockSizeYOverride?: number;
37
41
  }): void;
38
- export declare function renderTreeLabels({ theme, model, offsetY, ctx, clickMap, blockSizeYOverride, }: {
42
+ export declare function renderTreeLabels({ theme, model, offsetY, ctx, clickMap, maxBranchLen, maxDepthToLeaf, blockSizeYOverride, }: {
39
43
  model: MsaViewModel;
40
44
  offsetY: number;
41
45
  ctx: CanvasRenderingContext2D;
42
46
  clickMap?: ClickMapIndex;
43
47
  theme: Theme;
48
+ maxBranchLen: number;
49
+ maxDepthToLeaf: number;
44
50
  blockSizeYOverride?: number;
45
51
  }): void;
46
52
  export declare function renderTreeCanvas({ model, clickMap, ctx, offsetY, theme, highResScaleFactorOverride, blockSizeYOverride, }: {
@@ -1,37 +1,8 @@
1
- import { descendants, links } from "../../hierarchy.js";
1
+ import { calcDepthToLeaf, descendants, links } from "../../hierarchy.js";
2
2
  export const padding = 600;
3
3
  const extendBounds = 5;
4
4
  const radius = 2.5;
5
5
  const d = radius * 2;
6
- // Cladogram positioning algorithm based on ape package's plot.phylo
7
- // Uses topological depth (steps to tips) instead of branch length for x-positioning
8
- // This ensures all leaf nodes align at the same x-coordinate (rightmost position)
9
- // See: https://github.com/emmanuelparadis/ape/blob/master/R/plot.phylo.R
10
- function calcDepthToLeaf(node) {
11
- if (node.depthToLeaf !== undefined) {
12
- return node.depthToLeaf;
13
- }
14
- if (!node.children || node.children.length === 0) {
15
- node.depthToLeaf = 0;
16
- }
17
- else {
18
- let maxDepth = 0;
19
- for (const child of node.children) {
20
- maxDepth = Math.max(maxDepth, 1 + calcDepthToLeaf(child));
21
- }
22
- node.depthToLeaf = maxDepth;
23
- }
24
- return node.depthToLeaf;
25
- }
26
- function findMaxBranchLen(node) {
27
- let maxLen = node.len || 0;
28
- if (node.children) {
29
- for (const child of node.children) {
30
- maxLen = Math.max(maxLen, findMaxBranchLen(child));
31
- }
32
- }
33
- return maxLen;
34
- }
35
6
  // Calculate node x-coordinate for both phylogram (with branch lengths) and cladogram (topology only) modes
36
7
  // For cladograms: x = (maxDepthToLeaf - nodeDepthToLeaf) / maxDepthToLeaf * maxWidth
37
8
  // This positions: leaves at maxWidth (rightmost), root at 0 (leftmost), internal nodes proportionally in between
@@ -43,12 +14,10 @@ function getNodeX(node, showBranchLen, maxBranchLen, maxDepthToLeaf) {
43
14
  const depthToLeaf = calcDepthToLeaf(node);
44
15
  return ((maxDepthToLeaf - depthToLeaf) / maxDepthToLeaf) * maxBranchLen;
45
16
  }
46
- export function renderTree({ offsetY, ctx, model, theme, blockSizeYOverride, }) {
17
+ export function renderTree({ offsetY, ctx, model, theme, maxBranchLen, maxDepthToLeaf, blockSizeYOverride, }) {
47
18
  const { hierarchy, showBranchLenEffective: showBranchLen, blockSize } = model;
48
19
  const by = blockSizeYOverride || blockSize;
49
20
  ctx.strokeStyle = theme.palette.text.primary;
50
- const maxBranchLen = findMaxBranchLen(hierarchy);
51
- const maxDepthToLeaf = calcDepthToLeaf(hierarchy);
52
21
  for (const link of links(hierarchy)) {
53
22
  const { source, target } = link;
54
23
  const sy = source.x;
@@ -72,11 +41,9 @@ export function renderTree({ offsetY, ctx, model, theme, blockSizeYOverride, })
72
41
  }
73
42
  }
74
43
  }
75
- export function renderNodeBubbles({ ctx, clickMap, offsetY, model, blockSizeYOverride, }) {
44
+ export function renderNodeBubbles({ ctx, clickMap, offsetY, model, maxBranchLen, maxDepthToLeaf, blockSizeYOverride, }) {
76
45
  const { hierarchy, showBranchLenEffective: showBranchLen, collapsed, blockSize, marginLeft: ml, } = model;
77
46
  const by = blockSizeYOverride || blockSize;
78
- const maxBranchLen = findMaxBranchLen(hierarchy);
79
- const maxDepthToLeaf = calcDepthToLeaf(hierarchy);
80
47
  for (const node of descendants(hierarchy)) {
81
48
  const x = getNodeX(node, showBranchLen, maxBranchLen, maxDepthToLeaf);
82
49
  if (x === undefined) {
@@ -106,8 +73,8 @@ export function renderNodeBubbles({ ctx, clickMap, offsetY, model, blockSizeYOve
106
73
  }
107
74
  }
108
75
  }
109
- export function renderTreeLabels({ theme, model, offsetY, ctx, clickMap, blockSizeYOverride, }) {
110
- const { fontSize, showBranchLenEffective: showBranchLen, treeMetadata, blockSize, labelsAlignRight, drawTree, treeAreaWidth, treeAreaWidthMinusMargin, marginLeft, leaves, noTree, hierarchy, } = model;
76
+ export function renderTreeLabels({ theme, model, offsetY, ctx, clickMap, maxBranchLen, maxDepthToLeaf, blockSizeYOverride, }) {
77
+ const { fontSize, showBranchLenEffective: showBranchLen, treeMetadata, blockSize, labelsAlignRight, drawTree, treeAreaWidth, treeAreaWidthMinusMargin, marginLeft, leaves, noTree, } = model;
111
78
  const by = blockSizeYOverride || blockSize;
112
79
  const emHeight = ctx.measureText('M').width;
113
80
  if (labelsAlignRight) {
@@ -117,8 +84,6 @@ export function renderTreeLabels({ theme, model, offsetY, ctx, clickMap, blockSi
117
84
  else {
118
85
  ctx.textAlign = 'start';
119
86
  }
120
- const maxBranchLen = findMaxBranchLen(hierarchy);
121
- const maxDepthToLeaf = calcDepthToLeaf(hierarchy);
122
87
  for (const node of leaves) {
123
88
  const { data: { name, id }, } = node;
124
89
  const y = node.x;
@@ -186,12 +151,17 @@ export function renderTreeCanvas({ model, clickMap, ctx, offsetY, theme, highRes
186
151
  ctx.translate(marginLeft, -offsetY);
187
152
  const font = ctx.font;
188
153
  ctx.font = font.replace(/\d+px/, `${fontSize}px`);
154
+ // memoized on the model and shared across the tree/bubble/label passes (and
155
+ // across all tree blocks) rather than re-traversing the hierarchy in each
156
+ const { maxBranchLength: maxBranchLen, maxDepthToLeaf } = model;
189
157
  if (!noTree && drawTree) {
190
158
  renderTree({
191
159
  ctx,
192
160
  offsetY,
193
161
  model,
194
162
  theme,
163
+ maxBranchLen,
164
+ maxDepthToLeaf,
195
165
  blockSizeYOverride,
196
166
  });
197
167
  if (drawNodeBubbles) {
@@ -200,6 +170,8 @@ export function renderTreeCanvas({ model, clickMap, ctx, offsetY, theme, highRes
200
170
  offsetY,
201
171
  clickMap,
202
172
  model,
173
+ maxBranchLen,
174
+ maxDepthToLeaf,
203
175
  blockSizeYOverride,
204
176
  });
205
177
  }
@@ -211,6 +183,8 @@ export function renderTreeCanvas({ model, clickMap, ctx, offsetY, theme, highRes
211
183
  model,
212
184
  clickMap,
213
185
  theme,
186
+ maxBranchLen,
187
+ maxDepthToLeaf,
214
188
  blockSizeYOverride,
215
189
  });
216
190
  }
@@ -1 +1 @@
1
- {"version":3,"file":"renderTreeCanvas.js","sourceRoot":"","sources":["../../../src/components/tree/renderTreeCanvas.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"renderTreeCanvas.js","sourceRoot":"","sources":["../../../src/components/tree/renderTreeCanvas.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  export declare function myfetch(url: string, args?: RequestInit): Promise<Response>;
2
2
  export declare function textfetch(url: string, args?: RequestInit): Promise<string>;
3
3
  export declare function jsonfetch<T>(url: string, args?: RequestInit): Promise<T>;
4
- export declare function timeout(time: number): Promise<unknown>;
4
+ export declare function timeout(time: number, signal?: AbortSignal): Promise<void>;
5
+ export declare function isAbortError(e: unknown): boolean;
@@ -13,7 +13,21 @@ export async function jsonfetch(url, args) {
13
13
  const response = await myfetch(url, args);
14
14
  return response.json();
15
15
  }
16
- export function timeout(time) {
17
- return new Promise(res => setTimeout(res, time));
16
+ export function timeout(time, signal) {
17
+ return new Promise((resolve, reject) => {
18
+ if (signal?.aborted) {
19
+ reject(new DOMException('Aborted', 'AbortError'));
20
+ }
21
+ else {
22
+ const id = setTimeout(resolve, time);
23
+ signal?.addEventListener('abort', () => {
24
+ clearTimeout(id);
25
+ reject(new DOMException('Aborted', 'AbortError'));
26
+ });
27
+ }
28
+ });
29
+ }
30
+ export function isAbortError(e) {
31
+ return e instanceof DOMException && e.name === 'AbortError';
18
32
  }
19
33
  //# sourceMappingURL=fetchUtils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"fetchUtils.js","sourceRoot":"","sources":["../src/fetchUtils.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,GAAW,EAAE,IAAkB;IAC3D,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;IAEvC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CACb,QAAQ,QAAQ,CAAC,MAAM,aAAa,GAAG,IAAI,MAAM,QAAQ,CAAC,IAAI,EAAE,EAAE,CACnE,CAAA;IACH,CAAC;IAED,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,GAAW,EAAE,IAAkB;IAC7D,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;IACzC,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAA;AACxB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAI,GAAW,EAAE,IAAkB;IAChE,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;IACzC,OAAO,QAAQ,CAAC,IAAI,EAAO,CAAA;AAC7B,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,IAAY;IAClC,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAA;AAClD,CAAC"}
1
+ {"version":3,"file":"fetchUtils.js","sourceRoot":"","sources":["../src/fetchUtils.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,GAAW,EAAE,IAAkB;IAC3D,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;IAEvC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CACb,QAAQ,QAAQ,CAAC,MAAM,aAAa,GAAG,IAAI,MAAM,QAAQ,CAAC,IAAI,EAAE,EAAE,CACnE,CAAA;IACH,CAAC;IAED,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,GAAW,EAAE,IAAkB;IAC7D,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;IACzC,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAA;AACxB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAI,GAAW,EAAE,IAAkB;IAChE,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;IACzC,OAAO,QAAQ,CAAC,IAAI,EAAO,CAAA;AAC7B,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,IAAY,EAAE,MAAoB;IACxD,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC3C,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;YACpB,MAAM,CAAC,IAAI,YAAY,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC,CAAA;QACnD,CAAC;aAAM,CAAC;YACN,MAAM,EAAE,GAAG,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;YACpC,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;gBACrC,YAAY,CAAC,EAAE,CAAC,CAAA;gBAChB,MAAM,CAAC,IAAI,YAAY,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC,CAAA;YACnD,CAAC,CAAC,CAAA;QACJ,CAAC;IACH,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,CAAU;IACrC,OAAO,CAAC,YAAY,YAAY,IAAI,CAAC,CAAC,IAAI,KAAK,YAAY,CAAA;AAC7D,CAAC"}