react-msaview 5.6.1 → 5.6.2

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 (92) hide show
  1. package/bundle/index.js +95 -95
  2. package/bundle/index.js.map +4 -4
  3. package/dist/clustalX.d.ts +4 -3
  4. package/dist/clustalX.js +25 -4
  5. package/dist/clustalX.js.map +1 -1
  6. package/dist/columnCounts.d.ts +37 -0
  7. package/dist/columnCounts.js +148 -0
  8. package/dist/columnCounts.js.map +1 -0
  9. package/dist/components/MSAView.js +1 -8
  10. package/dist/components/MSAView.js.map +1 -1
  11. package/dist/components/getVisibleLeaves.d.ts +6 -0
  12. package/dist/components/getVisibleLeaves.js.map +1 -0
  13. package/dist/components/msa/MSACanvasBlock.js +17 -54
  14. package/dist/components/msa/MSACanvasBlock.js.map +1 -1
  15. package/dist/components/msa/renderBoxFeatureCanvasBlock.d.ts +2 -1
  16. package/dist/components/msa/renderBoxFeatureCanvasBlock.js +21 -19
  17. package/dist/components/msa/renderBoxFeatureCanvasBlock.js.map +1 -1
  18. package/dist/components/msa/renderMSABlock.js +97 -96
  19. package/dist/components/msa/renderMSABlock.js.map +1 -1
  20. package/dist/components/msa/renderMSAMouseover.js +9 -32
  21. package/dist/components/msa/renderMSAMouseover.js.map +1 -1
  22. package/dist/components/msa/useMsaBlockMouse.d.ts +23 -0
  23. package/dist/components/msa/useMsaBlockMouse.js +45 -0
  24. package/dist/components/msa/useMsaBlockMouse.js.map +1 -0
  25. package/dist/components/tree/TreeCanvas.js +14 -19
  26. package/dist/components/tree/TreeCanvas.js.map +1 -1
  27. package/dist/components/tree/TreeCanvasBlock.js +40 -111
  28. package/dist/components/tree/TreeCanvasBlock.js.map +1 -1
  29. package/dist/components/tree/renderTreeCanvas.d.ts +2 -0
  30. package/dist/components/tree/renderTreeCanvas.js +15 -3
  31. package/dist/components/tree/renderTreeCanvas.js.map +1 -1
  32. package/dist/components/tree/useTreeHover.d.ts +24 -0
  33. package/dist/components/tree/useTreeHover.js +44 -0
  34. package/dist/components/tree/useTreeHover.js.map +1 -0
  35. package/dist/hierarchy.js +15 -9
  36. package/dist/hierarchy.js.map +1 -1
  37. package/dist/model/msaModel.js +4 -3
  38. package/dist/model/msaModel.js.map +1 -1
  39. package/dist/model/treeModel.js +9 -8
  40. package/dist/model/treeModel.js.map +1 -1
  41. package/dist/model.d.ts +52 -10
  42. package/dist/model.js +208 -93
  43. package/dist/model.js.map +1 -1
  44. package/dist/propertyConservation.d.ts +2 -1
  45. package/dist/propertyConservation.js +36 -25
  46. package/dist/propertyConservation.js.map +1 -1
  47. package/dist/seqPosToGlobalCol.d.ts +7 -0
  48. package/dist/seqPosToGlobalCol.js +17 -0
  49. package/dist/seqPosToGlobalCol.js.map +1 -1
  50. package/dist/stripDefault.d.ts +21 -0
  51. package/dist/stripDefault.js +26 -0
  52. package/dist/stripDefault.js.map +1 -0
  53. package/dist/types.d.ts +16 -0
  54. package/dist/version.d.ts +1 -1
  55. package/dist/version.js +1 -1
  56. package/package.json +3 -3
  57. package/src/clustalX.test.ts +9 -11
  58. package/src/clustalX.ts +27 -28
  59. package/src/columnCounts.test.ts +58 -0
  60. package/src/columnCounts.ts +170 -0
  61. package/src/components/MSAView.tsx +1 -9
  62. package/src/components/{msa/getVisibleLeaves.ts → getVisibleLeaves.ts} +1 -1
  63. package/src/components/msa/MSACanvasBlock.tsx +42 -110
  64. package/src/components/msa/renderBoxFeatureCanvasBlock.ts +25 -18
  65. package/src/components/msa/renderMSABlock.ts +113 -125
  66. package/src/components/msa/renderMSAMouseover.ts +11 -34
  67. package/src/components/msa/useMsaBlockMouse.ts +81 -0
  68. package/src/components/tree/TreeCanvas.tsx +16 -23
  69. package/src/components/tree/TreeCanvasBlock.tsx +62 -143
  70. package/src/components/tree/renderTreeCanvas.test.ts +100 -190
  71. package/src/components/tree/renderTreeCanvas.ts +14 -3
  72. package/src/components/tree/useTreeHover.ts +69 -0
  73. package/src/domainBands.test.ts +98 -0
  74. package/src/hierarchy.ts +15 -9
  75. package/src/model/msaModel.ts +4 -6
  76. package/src/model/treeModel.ts +9 -14
  77. package/src/model.ts +241 -112
  78. package/src/propertyConservation.test.ts +2 -13
  79. package/src/propertyConservation.ts +40 -31
  80. package/src/rowSpace.test.ts +46 -0
  81. package/src/seqPosToGlobalCol.ts +18 -0
  82. package/src/stripDefault.test.ts +48 -0
  83. package/src/stripDefault.ts +35 -0
  84. package/src/types.ts +23 -0
  85. package/src/version.ts +1 -1
  86. package/dist/components/msa/getVisibleLeaves.d.ts +0 -6
  87. package/dist/components/msa/getVisibleLeaves.js.map +0 -1
  88. package/dist/useDevicePixelRatio.d.ts +0 -1
  89. package/dist/useDevicePixelRatio.js +0 -27
  90. package/dist/useDevicePixelRatio.js.map +0 -1
  91. package/src/useDevicePixelRatio.ts +0 -29
  92. /package/dist/components/{msa/getVisibleLeaves.js → getVisibleLeaves.js} +0 -0
@@ -1,5 +1,6 @@
1
+ import type { ColumnCounts } from './columnCounts.ts';
1
2
  /**
2
- * Computes the ClustalX letter->color map for a single alignment column given
3
- * its residue counts (`stats`) and total residue count (`total`).
3
+ * Computes the ClustalX letter->color map for a single alignment column, read
4
+ * out of the alignment-wide `ColumnCounts` tally.
4
5
  */
5
- export declare function clustalXColumnColors(stats: Record<string, number>, total: number): Record<string, string>;
6
+ export declare function clustalXColumnColors(counts: ColumnCounts, col: number): Record<string, string>;
package/dist/clustalX.js CHANGED
@@ -11,11 +11,32 @@ const ORANGE = 'rgb(240, 144, 72)';
11
11
  const YELLOW = 'rgb(204, 204, 0)';
12
12
  const CYAN = 'rgb(26, 179, 179)';
13
13
  /**
14
- * Computes the ClustalX letter->color map for a single alignment column given
15
- * its residue counts (`stats`) and total residue count (`total`).
14
+ * Computes the ClustalX letter->color map for a single alignment column, read
15
+ * out of the alignment-wide `ColumnCounts` tally.
16
16
  */
17
- export function clustalXColumnColors(stats, total) {
18
- const { W = 0, L = 0, V = 0, I = 0, M = 0, A = 0, F = 0, C = 0, H = 0, P = 0, R = 0, K = 0, Q = 0, E = 0, D = 0, T = 0, S = 0, G = 0, Y = 0, N = 0, } = stats;
17
+ export function clustalXColumnColors(counts, col) {
18
+ const total = counts.total(col);
19
+ const n = (letter) => counts.count(col, letter);
20
+ const W = n('W');
21
+ const L = n('L');
22
+ const V = n('V');
23
+ const I = n('I');
24
+ const M = n('M');
25
+ const A = n('A');
26
+ const F = n('F');
27
+ const C = n('C');
28
+ const H = n('H');
29
+ const P = n('P');
30
+ const R = n('R');
31
+ const K = n('K');
32
+ const Q = n('Q');
33
+ const E = n('E');
34
+ const D = n('D');
35
+ const T = n('T');
36
+ const S = n('S');
37
+ const G = n('G');
38
+ const Y = n('Y');
39
+ const N = n('N');
19
40
  const hydrophobic = W + L + V + I + M + A + F + C + H + P + Y;
20
41
  const KR = K + R;
21
42
  const QE = Q + E;
@@ -1 +1 @@
1
- {"version":3,"file":"clustalX.js","sourceRoot":"","sources":["../src/clustalX.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"clustalX.js","sourceRoot":"","sources":["../src/clustalX.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ export declare function isGapSlot(slot: number): slot is 27 | 28;
2
+ export declare class ColumnCounts {
3
+ readonly numColumns: number;
4
+ private readonly counts;
5
+ readonly totals: Uint32Array;
6
+ private readonly slotTotals;
7
+ constructor(numColumns: number);
8
+ addRow(row: string): void;
9
+ add(col: number, letter: string): void;
10
+ total(col: number): number;
11
+ count(col: number, letter: string): number;
12
+ gapCount(col: number): number;
13
+ /**
14
+ * Visits every non-gap residue present in a column. Slots with a zero count
15
+ * are skipped, so this is ~the number of distinct residues, not 32.
16
+ */
17
+ forEachResidue(col: number, cb: (slot: number, count: number) => void): void;
18
+ /** non-gap [letter, count] pairs for one column, for display */
19
+ residueEntries(col: number): [string, number][];
20
+ /** the distinct non-gap letters appearing anywhere in the alignment */
21
+ get lettersPresent(): Set<string>;
22
+ }
23
+ export declare function letterOfResidueSlot(slot: number): string;
24
+ export declare function residueSlotOfLetter(letter: string): number;
25
+ export declare const numResidueSlots = 32;
26
+ /**
27
+ * Tally counts from alignment rows (gapped sequence strings, one per row). The
28
+ * column count follows the longest row, matching what a per-column tally of
29
+ * ragged input produces.
30
+ */
31
+ export declare function columnCountsFromRows(rows: string[]): ColumnCounts;
32
+ /**
33
+ * Tally counts from column strings (one string per column, listing that
34
+ * column's residues top to bottom). Convenient for tests and for callers that
35
+ * already think column-wise.
36
+ */
37
+ export declare function columnCountsFromColumns(columns: string[]): ColumnCounts;
@@ -0,0 +1,148 @@
1
+ // Per-column residue counts for an alignment, stored as a flat typed array
2
+ // instead of one `Record<string, number>` per column. Column statistics are the
3
+ // hottest computation in the viewer (they feed conservation, ClustalX coloring,
4
+ // consensus and the hover tooltip), and the object-per-column form spent all of
5
+ // its time on megamorphic string-keyed property increments: 1000x5000 residues
6
+ // took ~1.6s to tally that way versus ~35ms here.
7
+ //
8
+ // Each column owns a fixed stride of counter slots. Slots 1-26 are A-Z (case
9
+ // folded), plus a slot each for the two gap characters, '*', and anything else.
10
+ const SLOTS = 32;
11
+ const DASH = 27;
12
+ const DOT = 28;
13
+ const STAR = 29;
14
+ const OTHER = 30;
15
+ const A = 'A'.charCodeAt(0);
16
+ const Z = 'Z'.charCodeAt(0);
17
+ const a = 'a'.charCodeAt(0);
18
+ const z = 'z'.charCodeAt(0);
19
+ // charCode -> slot. A plain `code & 31` would fold digits and punctuation onto
20
+ // letter slots ('0' onto 'P'), so the mapping is an explicit table.
21
+ const slotOfCode = new Uint8Array(128).fill(OTHER);
22
+ for (let c = A; c <= Z; c++) {
23
+ slotOfCode[c] = c - A + 1;
24
+ }
25
+ for (let c = a; c <= z; c++) {
26
+ slotOfCode[c] = c - a + 1;
27
+ }
28
+ slotOfCode['-'.charCodeAt(0)] = DASH;
29
+ slotOfCode['.'.charCodeAt(0)] = DOT;
30
+ slotOfCode['*'.charCodeAt(0)] = STAR;
31
+ const letterOfSlot = Array.from({ length: SLOTS }, (_, slot) => slot >= 1 && slot <= 26 ? String.fromCharCode(A + slot - 1) : '');
32
+ letterOfSlot[DASH] = '-';
33
+ letterOfSlot[DOT] = '.';
34
+ letterOfSlot[STAR] = '*';
35
+ letterOfSlot[OTHER] = '?';
36
+ function slotOf(code) {
37
+ return code < 128 ? slotOfCode[code] : OTHER;
38
+ }
39
+ export function isGapSlot(slot) {
40
+ return slot === DASH || slot === DOT;
41
+ }
42
+ export class ColumnCounts {
43
+ numColumns;
44
+ counts;
45
+ // per-column residue+gap totals
46
+ totals;
47
+ // whole-alignment totals per slot, so "which letters appear anywhere" is a
48
+ // 32-slot scan rather than a walk over every column
49
+ slotTotals = new Uint32Array(SLOTS);
50
+ constructor(numColumns) {
51
+ this.numColumns = numColumns;
52
+ this.counts = new Uint32Array(numColumns * SLOTS);
53
+ this.totals = new Uint32Array(numColumns);
54
+ }
55
+ addRow(row) {
56
+ const { counts, totals, slotTotals } = this;
57
+ const n = Math.min(row.length, this.numColumns);
58
+ for (let col = 0; col < n; col++) {
59
+ const slot = slotOf(row.charCodeAt(col));
60
+ counts[col * SLOTS + slot]++;
61
+ totals[col]++;
62
+ slotTotals[slot]++;
63
+ }
64
+ }
65
+ add(col, letter) {
66
+ const slot = slotOf(letter.charCodeAt(0));
67
+ this.counts[col * SLOTS + slot]++;
68
+ this.totals[col]++;
69
+ this.slotTotals[slot]++;
70
+ }
71
+ total(col) {
72
+ return this.totals[col] ?? 0;
73
+ }
74
+ count(col, letter) {
75
+ return this.counts[col * SLOTS + slotOf(letter.charCodeAt(0))] ?? 0;
76
+ }
77
+ gapCount(col) {
78
+ const base = col * SLOTS;
79
+ return (this.counts[base + DASH] ?? 0) + (this.counts[base + DOT] ?? 0);
80
+ }
81
+ /**
82
+ * Visits every non-gap residue present in a column. Slots with a zero count
83
+ * are skipped, so this is ~the number of distinct residues, not 32.
84
+ */
85
+ forEachResidue(col, cb) {
86
+ const { counts } = this;
87
+ const base = col * SLOTS;
88
+ for (let slot = 1; slot < SLOTS; slot++) {
89
+ const count = counts[base + slot];
90
+ if (count > 0 && !isGapSlot(slot)) {
91
+ cb(slot, count);
92
+ }
93
+ }
94
+ }
95
+ /** non-gap [letter, count] pairs for one column, for display */
96
+ residueEntries(col) {
97
+ const entries = [];
98
+ this.forEachResidue(col, (slot, count) => {
99
+ entries.push([letterOfSlot[slot], count]);
100
+ });
101
+ return entries;
102
+ }
103
+ /** the distinct non-gap letters appearing anywhere in the alignment */
104
+ get lettersPresent() {
105
+ const letters = new Set();
106
+ for (let slot = 1; slot < SLOTS; slot++) {
107
+ if (this.slotTotals[slot] > 0 && !isGapSlot(slot)) {
108
+ letters.add(letterOfSlot[slot]);
109
+ }
110
+ }
111
+ return letters;
112
+ }
113
+ }
114
+ export function letterOfResidueSlot(slot) {
115
+ return letterOfSlot[slot];
116
+ }
117
+ export function residueSlotOfLetter(letter) {
118
+ return slotOf(letter.charCodeAt(0));
119
+ }
120
+ export const numResidueSlots = SLOTS;
121
+ /**
122
+ * Tally counts from alignment rows (gapped sequence strings, one per row). The
123
+ * column count follows the longest row, matching what a per-column tally of
124
+ * ragged input produces.
125
+ */
126
+ export function columnCountsFromRows(rows) {
127
+ const numColumns = rows.reduce((max, row) => Math.max(max, row.length), 0);
128
+ const counts = new ColumnCounts(numColumns);
129
+ for (const row of rows) {
130
+ counts.addRow(row);
131
+ }
132
+ return counts;
133
+ }
134
+ /**
135
+ * Tally counts from column strings (one string per column, listing that
136
+ * column's residues top to bottom). Convenient for tests and for callers that
137
+ * already think column-wise.
138
+ */
139
+ export function columnCountsFromColumns(columns) {
140
+ const counts = new ColumnCounts(columns.length);
141
+ for (const [col, column] of columns.entries()) {
142
+ for (const letter of column) {
143
+ counts.add(col, letter);
144
+ }
145
+ }
146
+ return counts;
147
+ }
148
+ //# sourceMappingURL=columnCounts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"columnCounts.js","sourceRoot":"","sources":["../src/columnCounts.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,5 @@
1
- import React, { Suspense, useEffect } from 'react';
1
+ import React, { Suspense } from 'react';
2
2
  import { observer } from 'mobx-react';
3
- import { useDevicePixelRatio } from "../useDevicePixelRatio.js";
4
3
  import { HorizontalResizeHandle, VerticalResizeHandle, } from "./ResizeHandles.js";
5
4
  import Track from "./Track.js";
6
5
  import VerticalScrollbar from "./VerticalScrollbar.js";
@@ -72,12 +71,6 @@ const View = observer(function ({ model }) {
72
71
  });
73
72
  const MSAView = observer(function ({ model }) {
74
73
  const { height, viewInitialized, DialogComponent, DialogProps } = model;
75
- // mirror the live device pixel ratio into the model so canvas backing stores
76
- // re-scale when the window moves between monitors or the browser zooms
77
- const devicePixelRatio = useDevicePixelRatio();
78
- useEffect(() => {
79
- model.setHighResScaleFactor(devicePixelRatio);
80
- }, [model, devicePixelRatio]);
81
74
  return (React.createElement("div", null, viewInitialized ? (React.createElement(React.Fragment, null,
82
75
  React.createElement("div", { style: { height, overflow: 'hidden' } },
83
76
  React.createElement(Header, { model: model }),
@@ -1 +1 @@
1
- {"version":3,"file":"MSAView.js","sourceRoot":"","sources":["../../src/components/MSAView.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MSAView.js","sourceRoot":"","sources":["../../src/components/MSAView.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { MsaViewModel } from '../model.ts';
2
+ export declare function getVisibleLeaves({ model, offsetY, blockSizeY, }: {
3
+ model: MsaViewModel;
4
+ offsetY: number;
5
+ blockSizeY: number;
6
+ }): import("../hierarchy.ts").HierarchyNode<import("../types.ts").NodeWithIdsAndLength>[];
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getVisibleLeaves.js","sourceRoot":"","sources":["../../src/components/getVisibleLeaves.ts"],"names":[],"mappings":"AAEA,2EAA2E;AAC3E,2DAA2D;AAC3D,MAAM,UAAU,gBAAgB,CAAC,EAC/B,KAAK,EACL,OAAO,EACP,UAAU,GAKX;IACC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,KAAK,CAAA;IACnC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG,SAAS,CAAC,GAAG,SAAS,CAAC,CAAC,CAAA;IACzE,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CACnB,CAAC,EACD,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,GAAG,UAAU,GAAG,SAAS,CAAC,GAAG,SAAS,CAAC,CAC1D,CAAA;IACD,OAAO,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;AACnC,CAAC"}
@@ -1,25 +1,25 @@
1
- import React, { useState } from 'react';
1
+ import React from 'react';
2
2
  import { BaseTooltip } from '@jbrowse/core/ui';
3
3
  import { observer } from 'mobx-react';
4
4
  import ColumnStats from "./ColumnStats.js";
5
5
  import { renderBoxFeatureCanvasBlock } from "./renderBoxFeatureCanvasBlock.js";
6
6
  import { renderMSABlock } from "./renderMSABlock.js";
7
+ import { useMsaBlockMouse } from "./useMsaBlockMouse.js";
7
8
  import { useCanvasAutorun } from "../../useCanvasAutorun.js";
8
9
  import { useColorContrast } from "../../useColorContrast.js";
9
- function eventToColRow(event, el, offsetX, offsetY, colWidth, rowHeight) {
10
- const { left, top } = el.getBoundingClientRect();
11
- return {
12
- col: Math.floor((event.clientX - left + offsetX) / colWidth),
13
- row: Math.floor((event.clientY - top + offsetY) / rowHeight),
14
- };
15
- }
16
10
  const MSACanvasBlock = observer(function ({ model, offsetX, offsetY, }) {
17
- const { colWidth, rowHeight, scrollY, scrollX, colorScheme, blockSize, mouseClickCol, mouseClickRow, highResScaleFactor, } = model;
11
+ const { scrollY, scrollX, colorScheme, blockSize, highResScaleFactor } = model;
18
12
  const { theme, contrastScheme } = useColorContrast(colorScheme);
13
+ const { tooltipPoint, onMouseMove, onClick, onMouseLeave } = useMsaBlockMouse({
14
+ model,
15
+ offsetX,
16
+ offsetY,
17
+ });
19
18
  const ref = useCanvasAutorun(ctx => {
19
+ const { blockSize, highResScaleFactor, actuallyShowDomains } = model;
20
20
  ctx.resetTransform();
21
21
  ctx.clearRect(0, 0, blockSize * highResScaleFactor, blockSize * highResScaleFactor);
22
- if (model.actuallyShowDomains) {
22
+ if (actuallyShowDomains) {
23
23
  renderBoxFeatureCanvasBlock({
24
24
  ctx,
25
25
  offsetX,
@@ -35,53 +35,19 @@ const MSACanvasBlock = observer(function ({ model, offsetX, offsetY, }) {
35
35
  contrastScheme,
36
36
  model,
37
37
  });
38
- }, [
39
- model,
40
- offsetX,
41
- offsetY,
42
- theme,
43
- blockSize,
44
- highResScaleFactor,
45
- contrastScheme,
46
- ]);
47
- const [mousePosition, setMousePosition] = useState();
38
+ }, [model, offsetX, offsetY, theme, contrastScheme]);
48
39
  const { hoveredInsertion, mouseOverDomains, showColumnStats } = model;
49
40
  return (React.createElement(React.Fragment, null,
50
41
  React.createElement("canvas", { ref: ref, onMouseMove: event => {
51
42
  if (ref.current) {
52
- const { col, row } = eventToColRow(event, ref.current, offsetX, offsetY, colWidth, rowHeight);
53
- // Only set mouse position if within valid MSA bounds
54
- if (col >= 0 &&
55
- col < model.numColumns &&
56
- row >= 0 &&
57
- row < model.numRows) {
58
- model.setMousePos(col, row);
59
- }
60
- else {
61
- model.setMousePos(undefined, undefined);
62
- }
63
- // only track client coords when there's something to show in the
64
- // tooltip: an insertion, a domain under the cursor, or column stats
65
- // (when that option is enabled). avoids a re-render on every move
66
- // when nothing would be shown
67
- const hasTooltip = model.hoveredInsertion ||
68
- model.mouseOverDomains.length > 0 ||
69
- (model.showColumnStats && !!model.mouseOverColumnStats);
70
- setMousePosition(hasTooltip ? { x: event.clientX, y: event.clientY } : undefined);
43
+ onMouseMove(event, ref.current);
71
44
  }
72
45
  }, onClick: event => {
73
46
  if (ref.current) {
74
- const { col, row } = eventToColRow(event, ref.current, offsetX, offsetY, colWidth, rowHeight);
75
- if (col === mouseClickCol && row === mouseClickRow) {
76
- model.setMouseClickPos(undefined, undefined);
77
- }
78
- else {
79
- model.setMouseClickPos(col, row);
80
- }
47
+ onClick(event, ref.current);
81
48
  }
82
49
  }, onMouseLeave: () => {
83
- model.setMousePos();
84
- setMousePosition(undefined);
50
+ onMouseLeave();
85
51
  }, width: blockSize * highResScaleFactor, height: blockSize * highResScaleFactor, style: {
86
52
  position: 'absolute',
87
53
  top: scrollY + offsetY,
@@ -89,7 +55,7 @@ const MSACanvasBlock = observer(function ({ model, offsetX, offsetY, }) {
89
55
  width: blockSize,
90
56
  height: blockSize,
91
57
  } }),
92
- hoveredInsertion && mousePosition ? (React.createElement(BaseTooltip, { clientPoint: { x: mousePosition.x, y: mousePosition.y + 15 } },
58
+ tooltipPoint ? (React.createElement(BaseTooltip, { clientPoint: { x: tooltipPoint.x, y: tooltipPoint.y + 15 } }, hoveredInsertion ? (React.createElement(React.Fragment, null,
93
59
  "Insertion (",
94
60
  hoveredInsertion.letters.length,
95
61
  model.sequenceType === 'amino' ? 'aa' : 'bp',
@@ -97,10 +63,7 @@ const MSACanvasBlock = observer(function ({ model, offsetX, offsetY, }) {
97
63
  ' ',
98
64
  hoveredInsertion.letters.length > 20
99
65
  ? `${hoveredInsertion.letters.slice(0, 20)}...`
100
- : hoveredInsertion.letters)) : null,
101
- !hoveredInsertion &&
102
- mousePosition &&
103
- (mouseOverDomains.length > 0 || showColumnStats) ? (React.createElement(BaseTooltip, { clientPoint: { x: mousePosition.x, y: mousePosition.y + 15 } },
66
+ : hoveredInsertion.letters)) : (React.createElement(React.Fragment, null,
104
67
  mouseOverDomains.map(d => (React.createElement("div", { key: `${d.accession}-${d.start}-${d.end}` },
105
68
  React.createElement("b", null, d.name),
106
69
  " (",
@@ -112,7 +75,7 @@ const MSACanvasBlock = observer(function ({ model, offsetX, offsetY, }) {
112
75
  d.description ? (React.createElement(React.Fragment, null,
113
76
  React.createElement("br", null),
114
77
  d.description)) : null))),
115
- showColumnStats ? React.createElement(ColumnStats, { model: model }) : null)) : null));
78
+ showColumnStats ? React.createElement(ColumnStats, { model: model }) : null)))) : null));
116
79
  });
117
80
  export default MSACanvasBlock;
118
81
  //# sourceMappingURL=MSACanvasBlock.js.map
@@ -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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"}
@@ -1,10 +1,11 @@
1
1
  import type { MsaViewModel } from '../../model.ts';
2
2
  import type { RenderCtx } from '../renderCtx.ts';
3
- export declare function renderBoxFeatureCanvasBlock({ model, offsetX, offsetY, ctx, highResScaleFactorOverride, blockSizeYOverride, }: {
3
+ export declare function renderBoxFeatureCanvasBlock({ model, offsetX, offsetY, ctx, highResScaleFactorOverride, blockSizeXOverride, blockSizeYOverride, }: {
4
4
  offsetX: number;
5
5
  offsetY: number;
6
6
  model: MsaViewModel;
7
7
  ctx: RenderCtx;
8
8
  highResScaleFactorOverride?: number;
9
+ blockSizeXOverride?: number;
9
10
  blockSizeYOverride?: number;
10
11
  }): void;
@@ -1,44 +1,46 @@
1
- import { getVisibleLeaves } from "./getVisibleLeaves.js";
2
1
  import { subFeatureRowHeight } from "../../constants.js";
3
- export function renderBoxFeatureCanvasBlock({ model, offsetX, offsetY, ctx, highResScaleFactorOverride, blockSizeYOverride, }) {
2
+ import { getVisibleLeaves } from "../getVisibleLeaves.js";
3
+ export function renderBoxFeatureCanvasBlock({ model, offsetX, offsetY, ctx, highResScaleFactorOverride, blockSizeXOverride, blockSizeYOverride, }) {
4
4
  const { blockSize, rowHeight, highResScaleFactor, showDomains } = model;
5
5
  if (showDomains) {
6
6
  const k = highResScaleFactorOverride ?? highResScaleFactor;
7
+ const bx = blockSizeXOverride ?? blockSize;
7
8
  const by = blockSizeYOverride ?? blockSize;
8
9
  ctx.resetTransform();
9
10
  ctx.scale(k, k);
10
11
  ctx.translate(-offsetX, rowHeight / 2 - offsetY);
11
- const visibleLeaves = getVisibleLeaves({ model, offsetY, blockSizeY: by });
12
12
  drawTiles({
13
13
  model,
14
14
  ctx,
15
- visibleLeaves,
15
+ visibleLeaves: getVisibleLeaves({ model, offsetY, blockSizeY: by }),
16
+ offsetX,
17
+ blockWidth: bx,
16
18
  });
17
19
  }
18
20
  }
19
- function drawTiles({ model, ctx, visibleLeaves, }) {
20
- const { subFeatureRows, colWidth, rowHeight, fillPalette, strokePalette, segmentLabels, showMsaLetters, tidyFilteredGatheredInterProAnnotations, } = model;
21
+ function drawTiles({ model, ctx, visibleLeaves, offsetX, blockWidth, }) {
22
+ const { subFeatureRows, colWidth, rowHeight, fillPalette, strokePalette, segmentLabels, showMsaLetters, domainBands, } = model;
21
23
  const h = subFeatureRows ? subFeatureRowHeight : rowHeight;
22
24
  // exon numbers label the bands only when residue letters aren't drawn (zoomed
23
25
  // out); when letters show, the alternating shades alone mark the boundaries
24
26
  // and a number would collide with the sequence
25
27
  const drawSegmentLabels = !showMsaLetters && !subFeatureRows && h >= 9;
28
+ // gene arrow heads stick out one row-height past the band, so pad the cull
29
+ // window enough that a band just outside the block still draws its head
30
+ const cull = h + colWidth;
31
+ const xMin = offsetX - cull;
32
+ const xMax = offsetX + blockWidth + cull;
26
33
  for (let i = 0, l1 = visibleLeaves.length; i < l1; i++) {
27
34
  const node = visibleLeaves[i];
28
- const { name } = node.data;
29
35
  const y = node.x;
30
- const entry = tidyFilteredGatheredInterProAnnotations[name];
31
- if (entry) {
32
- for (let j = 0, l2 = entry.length; j < l2; j++) {
33
- const { start, end, accession, strand } = entry[j];
34
- // Convert sequence positions to visible column positions
35
- // seqPos is 1-based from InterPro, so subtract 1 for 0-based
36
- const m1 = model.seqPosToVisibleCol(name, start - 1);
37
- const m2 = model.seqPosToVisibleCol(name, end);
38
- if (m1 !== undefined && m2 !== undefined) {
39
- const x = m1 * colWidth;
40
- const t = y - rowHeight + (subFeatureRows ? j * h : 0);
41
- const lw = colWidth * (m2 - m1);
36
+ const bands = domainBands.get(node.data.name);
37
+ if (bands) {
38
+ for (const { annotation, startCol, endCol, stackIndex } of bands) {
39
+ const { accession, strand } = annotation;
40
+ const x = startCol * colWidth;
41
+ const lw = colWidth * (endCol - startCol);
42
+ if (x + lw >= xMin && x <= xMax) {
43
+ const t = y - rowHeight + (subFeatureRows ? stackIndex * h : 0);
42
44
  ctx.fillStyle = fillPalette[accession];
43
45
  ctx.strokeStyle = strokePalette[accession];
44
46
  if (strand === undefined) {
@@ -1 +1 @@
1
- {"version":3,"file":"renderBoxFeatureCanvasBlock.js","sourceRoot":"","sources":["../../../src/components/msa/renderBoxFeatureCanvasBlock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AAOxD,MAAM,UAAU,2BAA2B,CAAC,EAC1C,KAAK,EACL,OAAO,EACP,OAAO,EACP,GAAG,EACH,0BAA0B,EAC1B,kBAAkB,GAQnB;IACC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,kBAAkB,EAAE,WAAW,EAAE,GAAG,KAAK,CAAA;IACvE,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,CAAC,GAAG,0BAA0B,IAAI,kBAAkB,CAAA;QAC1D,MAAM,EAAE,GAAG,kBAAkB,IAAI,SAAS,CAAA;QAC1C,GAAG,CAAC,cAAc,EAAE,CAAA;QACpB,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QACf,GAAG,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,SAAS,GAAG,CAAC,GAAG,OAAO,CAAC,CAAA;QAEhD,MAAM,aAAa,GAAG,gBAAgB,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAA;QAE1E,SAAS,CAAC;YACR,KAAK;YACL,GAAG;YACH,aAAa;SACd,CAAC,CAAA;IACJ,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,EACjB,KAAK,EACL,GAAG,EACH,aAAa,GAKd;IACC,MAAM,EACJ,cAAc,EACd,QAAQ,EACR,SAAS,EACT,WAAW,EACX,aAAa,EACb,aAAa,EACb,cAAc,EACd,uCAAuC,GACxC,GAAG,KAAK,CAAA;IACT,MAAM,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,SAAS,CAAA;IAC1D,8EAA8E;IAC9E,4EAA4E;IAC5E,+CAA+C;IAC/C,MAAM,iBAAiB,GAAG,CAAC,cAAc,IAAI,CAAC,cAAc,IAAI,CAAC,IAAI,CAAC,CAAA;IAEtE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;QACvD,MAAM,IAAI,GAAG,aAAa,CAAC,CAAC,CAAE,CAAA;QAC9B,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAA;QAC1B,MAAM,CAAC,GAAG,IAAI,CAAC,CAAE,CAAA;QACjB,MAAM,KAAK,GAAG,uCAAuC,CAAC,IAAI,CAAC,CAAA;QAE3D,IAAI,KAAK,EAAE,CAAC;YACV,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC/C,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,CAAE,CAAA;gBACnD,yDAAyD;gBACzD,6DAA6D;gBAC7D,MAAM,EAAE,GAAG,KAAK,CAAC,kBAAkB,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC,CAAA;gBACpD,MAAM,EAAE,GAAG,KAAK,CAAC,kBAAkB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;gBAC9C,IAAI,EAAE,KAAK,SAAS,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;oBACzC,MAAM,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAA;oBACvB,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;oBACtD,MAAM,EAAE,GAAG,QAAQ,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,CAAA;oBAC/B,GAAG,CAAC,SAAS,GAAG,WAAW,CAAC,SAAS,CAAE,CAAA;oBACvC,GAAG,CAAC,WAAW,GAAG,aAAa,CAAC,SAAS,CAAE,CAAA;oBAC3C,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;wBACzB,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAA;wBACzB,GAAG,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAA;wBAC3B,qEAAqE;wBACrE,oDAAoD;wBACpD,MAAM,KAAK,GAAG,iBAAiB;4BAC7B,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC;4BAC9B,CAAC,CAAC,SAAS,CAAA;wBACb,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;4BACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAA;4BACpC,GAAG,CAAC,IAAI,GAAG,GAAG,QAAQ,eAAe,CAAA;4BACrC,IAAI,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;gCAC3C,GAAG,CAAC,SAAS,GAAG,MAAM,CAAA;gCACtB,GAAG,CAAC,SAAS,GAAG,QAAQ,CAAA;gCACxB,GAAG,CAAC,YAAY,GAAG,QAAQ,CAAA;gCAC3B,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;4BAC5C,CAAC;wBACH,CAAC;oBACH,CAAC;yBAAM,CAAC;wBACN,aAAa,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,CAAA;oBAChD,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED,qEAAqE;AACrE,8EAA8E;AAC9E,8EAA8E;AAC9E,+EAA+E;AAC/E,6EAA6E;AAC7E,qEAAqE;AACrE,SAAS,aAAa,CAAC,EACrB,GAAG,EACH,CAAC,EACD,CAAC,EACD,CAAC,EACD,CAAC,EACD,MAAM,GAQP;IACC,0EAA0E;IAC1E,kDAAkD;IAClD,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAC/B,MAAM,SAAS,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;IACxC,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACtC,GAAG,CAAC,SAAS,EAAE,CAAA;IACf,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAA;IACxB,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAA;IACtB,GAAG,CAAC,MAAM,CAAC,OAAO,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;IACxC,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,CAAA;IAC1B,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC,CAAA;IAC5B,GAAG,CAAC,SAAS,EAAE,CAAA;IACf,GAAG,CAAC,IAAI,EAAE,CAAA;IACV,GAAG,CAAC,MAAM,EAAE,CAAA;AACd,CAAC"}
1
+ {"version":3,"file":"renderBoxFeatureCanvasBlock.js","sourceRoot":"","sources":["../../../src/components/msa/renderBoxFeatureCanvasBlock.ts"],"names":[],"mappings":"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"}