react-msaview 4.5.0 → 4.8.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 (98) hide show
  1. package/bundle/index.js +99 -99
  2. package/bundle/index.js.LICENSE.txt +6 -6
  3. package/bundle/index.js.map +1 -1
  4. package/dist/__snapshots__/parseAsn1.test.js.snap +2400 -0
  5. package/dist/components/header/HeaderInfoArea.js +3 -4
  6. package/dist/components/header/HeaderInfoArea.js.map +1 -1
  7. package/dist/components/import/ImportForm.js +6 -2
  8. package/dist/components/import/ImportForm.js.map +1 -1
  9. package/dist/components/import/util.d.ts +1 -1
  10. package/dist/components/import/util.js +4 -1
  11. package/dist/components/import/util.js.map +1 -1
  12. package/dist/components/msa/renderBoxFeatureCanvasBlock.js +7 -2
  13. package/dist/components/msa/renderBoxFeatureCanvasBlock.js.map +1 -1
  14. package/dist/components/msa/renderMSABlock.js +20 -18
  15. package/dist/components/msa/renderMSABlock.js.map +1 -1
  16. package/dist/components/msa/renderMSAMouseover.js +8 -1
  17. package/dist/components/msa/renderMSAMouseover.js.map +1 -1
  18. package/dist/components/tree/renderTreeCanvas.d.ts +0 -1
  19. package/dist/components/tree/renderTreeCanvas.js +32 -31
  20. package/dist/components/tree/renderTreeCanvas.js.map +1 -1
  21. package/dist/model.d.ts +168 -16
  22. package/dist/model.js +116 -29
  23. package/dist/model.js.map +1 -1
  24. package/dist/rowCoordinateCalculations.d.ts +69 -9
  25. package/dist/rowCoordinateCalculations.js +118 -46
  26. package/dist/rowCoordinateCalculations.js.map +1 -1
  27. package/dist/rowCoordinateCalculations.test.js +152 -52
  28. package/dist/rowCoordinateCalculations.test.js.map +1 -1
  29. package/dist/seqPosToGlobalCol.d.ts +19 -0
  30. package/dist/seqPosToGlobalCol.js +34 -0
  31. package/dist/seqPosToGlobalCol.js.map +1 -0
  32. package/dist/seqPosToGlobalCol.test.js +60 -0
  33. package/dist/seqPosToGlobalCol.test.js.map +1 -0
  34. package/dist/util.d.ts +1 -2
  35. package/dist/util.js +0 -9
  36. package/dist/util.js.map +1 -1
  37. package/dist/version.d.ts +1 -1
  38. package/dist/version.js +1 -1
  39. package/package.json +7 -9
  40. package/src/components/header/HeaderInfoArea.tsx +2 -5
  41. package/src/components/import/ImportForm.tsx +6 -1
  42. package/src/components/import/util.ts +4 -0
  43. package/src/components/msa/renderBoxFeatureCanvasBlock.ts +7 -2
  44. package/src/components/msa/renderMSABlock.ts +26 -19
  45. package/src/components/msa/renderMSAMouseover.ts +9 -0
  46. package/src/components/tree/renderTreeCanvas.ts +35 -42
  47. package/src/declare.d.ts +0 -1
  48. package/src/model.ts +143 -42
  49. package/src/rowCoordinateCalculations.test.ts +167 -74
  50. package/src/rowCoordinateCalculations.ts +138 -63
  51. package/src/seqPosToGlobalCol.test.ts +71 -0
  52. package/src/seqPosToGlobalCol.ts +40 -0
  53. package/src/util.ts +1 -19
  54. package/src/version.ts +1 -1
  55. package/dist/parseGFF.d.ts +0 -10
  56. package/dist/parseGFF.js +0 -31
  57. package/dist/parseGFF.js.map +0 -1
  58. package/dist/parseNewick.d.ts +0 -60
  59. package/dist/parseNewick.js +0 -95
  60. package/dist/parseNewick.js.map +0 -1
  61. package/dist/parsers/A3mMSA.d.ts +0 -43
  62. package/dist/parsers/A3mMSA.js +0 -277
  63. package/dist/parsers/A3mMSA.js.map +0 -1
  64. package/dist/parsers/A3mMSA.test.js +0 -138
  65. package/dist/parsers/A3mMSA.test.js.map +0 -1
  66. package/dist/parsers/ClustalMSA.d.ts +0 -30
  67. package/dist/parsers/ClustalMSA.js +0 -55
  68. package/dist/parsers/ClustalMSA.js.map +0 -1
  69. package/dist/parsers/EmfMSA.d.ts +0 -27
  70. package/dist/parsers/EmfMSA.js +0 -53
  71. package/dist/parsers/EmfMSA.js.map +0 -1
  72. package/dist/parsers/EmfTree.d.ts +0 -5
  73. package/dist/parsers/EmfTree.js +0 -8
  74. package/dist/parsers/EmfTree.js.map +0 -1
  75. package/dist/parsers/FastaMSA.d.ts +0 -19
  76. package/dist/parsers/FastaMSA.js +0 -69
  77. package/dist/parsers/FastaMSA.js.map +0 -1
  78. package/dist/parsers/StockholmMSA.d.ts +0 -68
  79. package/dist/parsers/StockholmMSA.js +0 -107
  80. package/dist/parsers/StockholmMSA.js.map +0 -1
  81. package/dist/seqCoordToRowSpecificGlobalCoord.d.ts +0 -4
  82. package/dist/seqCoordToRowSpecificGlobalCoord.js +0 -19
  83. package/dist/seqCoordToRowSpecificGlobalCoord.js.map +0 -1
  84. package/dist/seqCoordToRowSpecificGlobalCoord.test.d.ts +0 -1
  85. package/dist/seqCoordToRowSpecificGlobalCoord.test.js +0 -42
  86. package/dist/seqCoordToRowSpecificGlobalCoord.test.js.map +0 -1
  87. package/src/parseGFF.ts +0 -34
  88. package/src/parseNewick.ts +0 -94
  89. package/src/parsers/A3mMSA.test.ts +0 -164
  90. package/src/parsers/A3mMSA.ts +0 -321
  91. package/src/parsers/ClustalMSA.ts +0 -69
  92. package/src/parsers/EmfMSA.ts +0 -67
  93. package/src/parsers/EmfTree.ts +0 -9
  94. package/src/parsers/FastaMSA.ts +0 -82
  95. package/src/parsers/StockholmMSA.ts +0 -140
  96. package/src/seqCoordToRowSpecificGlobalCoord.test.ts +0 -53
  97. package/src/seqCoordToRowSpecificGlobalCoord.ts +0 -25
  98. /package/dist/{parsers/A3mMSA.test.d.ts → seqPosToGlobalCol.test.d.ts} +0 -0
@@ -1,6 +1,7 @@
1
1
  import { expect, test } from 'vitest';
2
- import { globalCoordToRowSpecificCoord, mouseOverCoordToGapRemovedCoord, mouseOverCoordToGlobalCoord, } from './rowCoordinateCalculations';
3
- test('with blanks at positions [2, 5, 8]', () => {
2
+ import { globalColToSeqPos, globalColToVisibleCol, visibleColToGlobalCol, visibleColToSeqPos, } from './rowCoordinateCalculations';
3
+ // Tests for visibleColToGlobalCol (visible global)
4
+ test('visibleColToGlobalCol with blanks at positions [2, 5, 8]', () => {
4
5
  const blanks = [2, 5, 8];
5
6
  [
6
7
  [0, 0],
@@ -12,10 +13,10 @@ test('with blanks at positions [2, 5, 8]', () => {
12
13
  [6, 9],
13
14
  [7, 10],
14
15
  ].forEach(r => {
15
- expect(mouseOverCoordToGlobalCoord(blanks, r[0])).toBe(r[1]);
16
+ expect(visibleColToGlobalCol(blanks, r[0])).toBe(r[1]);
16
17
  });
17
18
  });
18
- test('with no blanks', () => {
19
+ test('visibleColToGlobalCol with no blanks', () => {
19
20
  const blanks = [];
20
21
  [
21
22
  [0, 0],
@@ -23,10 +24,10 @@ test('with no blanks', () => {
23
24
  [5, 5],
24
25
  [10, 10],
25
26
  ].forEach(r => {
26
- expect(mouseOverCoordToGlobalCoord(blanks, r[0])).toBe(r[1]);
27
+ expect(visibleColToGlobalCol(blanks, r[0])).toBe(r[1]);
27
28
  });
28
29
  });
29
- test('with consecutive blanks', () => {
30
+ test('visibleColToGlobalCol with consecutive blanks', () => {
30
31
  const blanks = [2, 3, 4, 7, 8];
31
32
  [
32
33
  [0, 0],
@@ -36,10 +37,10 @@ test('with consecutive blanks', () => {
36
37
  [4, 9], // After position 3, skip 2 blanks (7,8)
37
38
  [5, 10],
38
39
  ].forEach(r => {
39
- expect(mouseOverCoordToGlobalCoord(blanks, r[0])).toBe(r[1]);
40
+ expect(visibleColToGlobalCol(blanks, r[0])).toBe(r[1]);
40
41
  });
41
42
  });
42
- test('with blanks at the beginning', () => {
43
+ test('visibleColToGlobalCol with blanks at the beginning', () => {
43
44
  const blanks = [1, 2, 5];
44
45
  [
45
46
  [0, 0],
@@ -48,10 +49,10 @@ test('with blanks at the beginning', () => {
48
49
  [3, 6], // After position 2, skip 1 blank (5)
49
50
  [4, 7],
50
51
  ].forEach(r => {
51
- expect(mouseOverCoordToGlobalCoord(blanks, r[0])).toBe(r[1]);
52
+ expect(visibleColToGlobalCol(blanks, r[0])).toBe(r[1]);
52
53
  });
53
54
  });
54
- test('with position exceeding blanks array', () => {
55
+ test('visibleColToGlobalCol with position exceeding blanks array', () => {
55
56
  const blanks = [2, 5];
56
57
  [
57
58
  [0, 0],
@@ -61,64 +62,163 @@ test('with position exceeding blanks array', () => {
61
62
  [4, 6], // After position 3, skip 1 blank (5)
62
63
  [10, 12], // Far beyond blanks array
63
64
  ].forEach(r => {
64
- expect(mouseOverCoordToGlobalCoord(blanks, r[0])).toBe(r[1]);
65
+ expect(visibleColToGlobalCol(blanks, r[0])).toBe(r[1]);
65
66
  });
66
67
  });
67
- test('with gaps in sequence', () => {
68
+ // Tests for globalColToVisibleCol (global visible)
69
+ test('globalColToVisibleCol with blanks at positions [2, 5, 8]', () => {
70
+ const blanks = [2, 5, 8];
71
+ // Inverse of visibleColToGlobalCol
72
+ expect(globalColToVisibleCol(blanks, 0)).toBe(0);
73
+ expect(globalColToVisibleCol(blanks, 1)).toBe(1);
74
+ expect(globalColToVisibleCol(blanks, 2)).toBe(undefined); // Hidden
75
+ expect(globalColToVisibleCol(blanks, 3)).toBe(2);
76
+ expect(globalColToVisibleCol(blanks, 4)).toBe(3);
77
+ expect(globalColToVisibleCol(blanks, 5)).toBe(undefined); // Hidden
78
+ expect(globalColToVisibleCol(blanks, 6)).toBe(4);
79
+ expect(globalColToVisibleCol(blanks, 7)).toBe(5);
80
+ expect(globalColToVisibleCol(blanks, 8)).toBe(undefined); // Hidden
81
+ expect(globalColToVisibleCol(blanks, 9)).toBe(6);
82
+ expect(globalColToVisibleCol(blanks, 10)).toBe(7);
83
+ });
84
+ test('globalColToVisibleCol with no blanks', () => {
85
+ const blanks = [];
86
+ expect(globalColToVisibleCol(blanks, 0)).toBe(0);
87
+ expect(globalColToVisibleCol(blanks, 5)).toBe(5);
88
+ expect(globalColToVisibleCol(blanks, 10)).toBe(10);
89
+ });
90
+ test('globalColToVisibleCol with consecutive blanks', () => {
91
+ const blanks = [2, 3, 4, 7, 8];
92
+ expect(globalColToVisibleCol(blanks, 0)).toBe(0);
93
+ expect(globalColToVisibleCol(blanks, 1)).toBe(1);
94
+ expect(globalColToVisibleCol(blanks, 2)).toBe(undefined); // Hidden
95
+ expect(globalColToVisibleCol(blanks, 3)).toBe(undefined); // Hidden
96
+ expect(globalColToVisibleCol(blanks, 4)).toBe(undefined); // Hidden
97
+ expect(globalColToVisibleCol(blanks, 5)).toBe(2);
98
+ expect(globalColToVisibleCol(blanks, 6)).toBe(3);
99
+ expect(globalColToVisibleCol(blanks, 7)).toBe(undefined); // Hidden
100
+ expect(globalColToVisibleCol(blanks, 8)).toBe(undefined); // Hidden
101
+ expect(globalColToVisibleCol(blanks, 9)).toBe(4);
102
+ expect(globalColToVisibleCol(blanks, 10)).toBe(5);
103
+ });
104
+ // Tests for globalColToSeqPos (global column → sequence position)
105
+ test('globalColToSeqPos with gaps in sequence', () => {
68
106
  const sequence = 'AC-GT-A';
69
- expect(globalCoordToRowSpecificCoord(sequence, 0)).toBe(0);
70
- expect(globalCoordToRowSpecificCoord(sequence, 1)).toBe(1);
71
- expect(globalCoordToRowSpecificCoord(sequence, 2)).toBe(2);
107
+ expect(globalColToSeqPos(sequence, 0)).toBe(0);
108
+ expect(globalColToSeqPos(sequence, 1)).toBe(1);
109
+ expect(globalColToSeqPos(sequence, 2)).toBe(2);
72
110
  // Position 2 is a gap, so count before it is 2
73
- expect(globalCoordToRowSpecificCoord(sequence, 3)).toBe(2);
74
- expect(globalCoordToRowSpecificCoord(sequence, 4)).toBe(3);
75
- expect(globalCoordToRowSpecificCoord(sequence, 5)).toBe(4);
111
+ expect(globalColToSeqPos(sequence, 3)).toBe(2);
112
+ expect(globalColToSeqPos(sequence, 4)).toBe(3);
113
+ expect(globalColToSeqPos(sequence, 5)).toBe(4);
76
114
  // Position 5 is a gap, so count before it is 4
77
- expect(globalCoordToRowSpecificCoord(sequence, 6)).toBe(4);
115
+ expect(globalColToSeqPos(sequence, 6)).toBe(4);
78
116
  });
79
- test('with mixed gap characters (- and .)', () => {
117
+ test('globalColToSeqPos with mixed gap characters (- and .)', () => {
80
118
  const sequence = 'AC.GT-A';
81
- expect(globalCoordToRowSpecificCoord(sequence, 0)).toBe(0);
82
- expect(globalCoordToRowSpecificCoord(sequence, 1)).toBe(1);
119
+ expect(globalColToSeqPos(sequence, 0)).toBe(0);
120
+ expect(globalColToSeqPos(sequence, 1)).toBe(1);
83
121
  // Position 2 is a gap (.), so count before it is 2
84
- expect(globalCoordToRowSpecificCoord(sequence, 2)).toBe(2);
85
- expect(globalCoordToRowSpecificCoord(sequence, 3)).toBe(2);
86
- expect(globalCoordToRowSpecificCoord(sequence, 4)).toBe(3);
122
+ expect(globalColToSeqPos(sequence, 2)).toBe(2);
123
+ expect(globalColToSeqPos(sequence, 3)).toBe(2);
124
+ expect(globalColToSeqPos(sequence, 4)).toBe(3);
87
125
  // Position 5 is a gap (-), so count before it is 4
88
- expect(globalCoordToRowSpecificCoord(sequence, 5)).toBe(4);
89
- expect(globalCoordToRowSpecificCoord(sequence, 6)).toBe(4);
126
+ expect(globalColToSeqPos(sequence, 5)).toBe(4);
127
+ expect(globalColToSeqPos(sequence, 6)).toBe(4);
90
128
  });
91
- test('with no gaps in sequence', () => {
129
+ test('globalColToSeqPos with no gaps in sequence', () => {
92
130
  const sequence = 'ACGTA';
93
- expect(globalCoordToRowSpecificCoord(sequence, 0)).toBe(0);
94
- expect(globalCoordToRowSpecificCoord(sequence, 1)).toBe(1);
95
- expect(globalCoordToRowSpecificCoord(sequence, 2)).toBe(2);
96
- expect(globalCoordToRowSpecificCoord(sequence, 3)).toBe(3);
97
- expect(globalCoordToRowSpecificCoord(sequence, 4)).toBe(4);
131
+ expect(globalColToSeqPos(sequence, 0)).toBe(0);
132
+ expect(globalColToSeqPos(sequence, 1)).toBe(1);
133
+ expect(globalColToSeqPos(sequence, 2)).toBe(2);
134
+ expect(globalColToSeqPos(sequence, 3)).toBe(3);
135
+ expect(globalColToSeqPos(sequence, 4)).toBe(4);
98
136
  });
99
- test('with all gaps in sequence', () => {
137
+ test('globalColToSeqPos with all gaps in sequence', () => {
100
138
  const sequence = '-----';
101
- expect(globalCoordToRowSpecificCoord(sequence, 0)).toBe(0);
102
- expect(globalCoordToRowSpecificCoord(sequence, 1)).toBe(0);
103
- expect(globalCoordToRowSpecificCoord(sequence, 2)).toBe(0);
104
- expect(globalCoordToRowSpecificCoord(sequence, 3)).toBe(0);
105
- expect(globalCoordToRowSpecificCoord(sequence, 4)).toBe(0);
139
+ expect(globalColToSeqPos(sequence, 0)).toBe(0);
140
+ expect(globalColToSeqPos(sequence, 1)).toBe(0);
141
+ expect(globalColToSeqPos(sequence, 2)).toBe(0);
142
+ expect(globalColToSeqPos(sequence, 3)).toBe(0);
143
+ expect(globalColToSeqPos(sequence, 4)).toBe(0);
106
144
  });
107
- test('with position exceeding sequence length', () => {
145
+ test('globalColToSeqPos with position exceeding sequence length', () => {
108
146
  const sequence = 'AC-GT';
109
- expect(globalCoordToRowSpecificCoord(sequence, 10)).toBe(4);
147
+ expect(globalColToSeqPos(sequence, 10)).toBe(4);
110
148
  });
111
- test('mouseOverCoordToGapRemovedCoord', () => {
149
+ // Tests for visibleColToSeqPos (visible column → sequence position)
150
+ test('visibleColToSeqPos returns sequence position or undefined for gaps', () => {
112
151
  const seq = 'AC--GT--CT';
113
- expect(mouseOverCoordToGapRemovedCoord({ seq, position: 0, blanks: [] })).toBe(0);
114
- expect(mouseOverCoordToGapRemovedCoord({ seq, position: 1, blanks: [] })).toBe(1);
115
- expect(mouseOverCoordToGapRemovedCoord({ seq, position: 2, blanks: [] })).toBe(undefined);
116
- expect(mouseOverCoordToGapRemovedCoord({ seq, position: 3, blanks: [] })).toBe(undefined);
117
- expect(mouseOverCoordToGapRemovedCoord({ seq, position: 4, blanks: [] })).toBe(2);
118
- expect(mouseOverCoordToGapRemovedCoord({ seq, position: 5, blanks: [] })).toBe(3);
119
- expect(mouseOverCoordToGapRemovedCoord({ seq, position: 6, blanks: [] })).toBe(undefined);
120
- expect(mouseOverCoordToGapRemovedCoord({ seq, position: 7, blanks: [] })).toBe(undefined);
121
- expect(mouseOverCoordToGapRemovedCoord({ seq, position: 8, blanks: [] })).toBe(4);
122
- expect(mouseOverCoordToGapRemovedCoord({ seq, position: 9, blanks: [] })).toBe(5);
152
+ expect(visibleColToSeqPos({ seq, visibleCol: 0, blanks: [] })).toBe(0);
153
+ expect(visibleColToSeqPos({ seq, visibleCol: 1, blanks: [] })).toBe(1);
154
+ expect(visibleColToSeqPos({ seq, visibleCol: 2, blanks: [] })).toBe(undefined);
155
+ expect(visibleColToSeqPos({ seq, visibleCol: 3, blanks: [] })).toBe(undefined);
156
+ expect(visibleColToSeqPos({ seq, visibleCol: 4, blanks: [] })).toBe(2);
157
+ expect(visibleColToSeqPos({ seq, visibleCol: 5, blanks: [] })).toBe(3);
158
+ expect(visibleColToSeqPos({ seq, visibleCol: 6, blanks: [] })).toBe(undefined);
159
+ expect(visibleColToSeqPos({ seq, visibleCol: 7, blanks: [] })).toBe(undefined);
160
+ expect(visibleColToSeqPos({ seq, visibleCol: 8, blanks: [] })).toBe(4);
161
+ expect(visibleColToSeqPos({ seq, visibleCol: 9, blanks: [] })).toBe(5);
162
+ });
163
+ // Round-trip tests: visible → global → visible should be identity for valid columns
164
+ test('round-trip: visibleColToGlobalCol and globalColToVisibleCol are inverses', () => {
165
+ const blanks = [2, 5, 8];
166
+ // For each visible column, going to global and back should return the same value
167
+ for (let visibleCol = 0; visibleCol < 10; visibleCol++) {
168
+ const globalCol = visibleColToGlobalCol(blanks, visibleCol);
169
+ const backToVisible = globalColToVisibleCol(blanks, globalCol);
170
+ expect(backToVisible).toBe(visibleCol);
171
+ }
172
+ });
173
+ test('round-trip: globalColToVisibleCol and visibleColToGlobalCol for non-hidden columns', () => {
174
+ const blanks = [2, 5, 8];
175
+ // For each global column that is NOT hidden, going to visible and back should return the same value
176
+ for (let globalCol = 0; globalCol < 15; globalCol++) {
177
+ const visibleCol = globalColToVisibleCol(blanks, globalCol);
178
+ if (visibleCol !== undefined) {
179
+ const backToGlobal = visibleColToGlobalCol(blanks, visibleCol);
180
+ expect(backToGlobal).toBe(globalCol);
181
+ }
182
+ }
183
+ });
184
+ // Edge case: blanks at position 0
185
+ test('globalColToVisibleCol with blank at position 0', () => {
186
+ const blanks = [0, 1, 5];
187
+ expect(globalColToVisibleCol(blanks, 0)).toBe(undefined); // Hidden
188
+ expect(globalColToVisibleCol(blanks, 1)).toBe(undefined); // Hidden
189
+ expect(globalColToVisibleCol(blanks, 2)).toBe(0); // First visible column
190
+ expect(globalColToVisibleCol(blanks, 3)).toBe(1);
191
+ expect(globalColToVisibleCol(blanks, 4)).toBe(2);
192
+ expect(globalColToVisibleCol(blanks, 5)).toBe(undefined); // Hidden
193
+ expect(globalColToVisibleCol(blanks, 6)).toBe(3);
194
+ });
195
+ test('visibleColToGlobalCol with blank at position 0', () => {
196
+ const blanks = [0, 1, 5];
197
+ expect(visibleColToGlobalCol(blanks, 0)).toBe(2); // Skips 0, 1
198
+ expect(visibleColToGlobalCol(blanks, 1)).toBe(3);
199
+ expect(visibleColToGlobalCol(blanks, 2)).toBe(4);
200
+ expect(visibleColToGlobalCol(blanks, 3)).toBe(6); // Skips 5
201
+ });
202
+ // Edge case: all columns before a position are blanks
203
+ test('globalColToVisibleCol with many leading blanks', () => {
204
+ const blanks = [0, 1, 2, 3, 4];
205
+ expect(globalColToVisibleCol(blanks, 0)).toBe(undefined);
206
+ expect(globalColToVisibleCol(blanks, 4)).toBe(undefined);
207
+ expect(globalColToVisibleCol(blanks, 5)).toBe(0); // First visible
208
+ expect(globalColToVisibleCol(blanks, 6)).toBe(1);
209
+ expect(globalColToVisibleCol(blanks, 10)).toBe(5);
210
+ });
211
+ // Test visibleColToSeqPos with blanks (combined gap hiding and row gaps)
212
+ test('visibleColToSeqPos with both blanks and row gaps', () => {
213
+ // Sequence: A-C-G (global cols 0,1,2,3,4)
214
+ // If blanks = [1, 3], visible sequence becomes: A C G (visible cols 0,1,2)
215
+ const seq = 'A-C-G';
216
+ const blanks = [1, 3];
217
+ // Visible col 0 → global col 0 → 'A' → seqPos 0
218
+ expect(visibleColToSeqPos({ seq, visibleCol: 0, blanks })).toBe(0);
219
+ // Visible col 1 → global col 2 → 'C' → seqPos 1
220
+ expect(visibleColToSeqPos({ seq, visibleCol: 1, blanks })).toBe(1);
221
+ // Visible col 2 → global col 4 → 'G' → seqPos 2
222
+ expect(visibleColToSeqPos({ seq, visibleCol: 2, blanks })).toBe(2);
123
223
  });
124
224
  //# sourceMappingURL=rowCoordinateCalculations.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"rowCoordinateCalculations.test.js","sourceRoot":"","sources":["../src/rowCoordinateCalculations.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rowCoordinateCalculations.test.js","sourceRoot":"","sources":["../src/rowCoordinateCalculations.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Convert a sequence position (ungapped, 0-based) to a global column index.
3
+ * This finds the global column that contains the Nth non-gap character.
4
+ *
5
+ * @param row - The row's sequence string (including gaps)
6
+ * @param seqPos - The sequence position (0-based count of non-gap characters)
7
+ * @returns The global column index containing the seqPos-th non-gap character
8
+ *
9
+ * @example
10
+ * // Row: "A-TG-C" (A at 0, T at 2, G at 3, C at 5)
11
+ * seqPosToGlobalCol({ row: "A-TG-C", seqPos: 0 }) // → 0 (A)
12
+ * seqPosToGlobalCol({ row: "A-TG-C", seqPos: 1 }) // → 2 (T)
13
+ * seqPosToGlobalCol({ row: "A-TG-C", seqPos: 2 }) // → 3 (G)
14
+ * seqPosToGlobalCol({ row: "A-TG-C", seqPos: 3 }) // → 5 (C)
15
+ */
16
+ export declare function seqPosToGlobalCol({ row, seqPos, }: {
17
+ row: string;
18
+ seqPos: number;
19
+ }): number;
@@ -0,0 +1,34 @@
1
+ import { isBlank } from './util';
2
+ /**
3
+ * Convert a sequence position (ungapped, 0-based) to a global column index.
4
+ * This finds the global column that contains the Nth non-gap character.
5
+ *
6
+ * @param row - The row's sequence string (including gaps)
7
+ * @param seqPos - The sequence position (0-based count of non-gap characters)
8
+ * @returns The global column index containing the seqPos-th non-gap character
9
+ *
10
+ * @example
11
+ * // Row: "A-TG-C" (A at 0, T at 2, G at 3, C at 5)
12
+ * seqPosToGlobalCol({ row: "A-TG-C", seqPos: 0 }) // → 0 (A)
13
+ * seqPosToGlobalCol({ row: "A-TG-C", seqPos: 1 }) // → 2 (T)
14
+ * seqPosToGlobalCol({ row: "A-TG-C", seqPos: 2 }) // → 3 (G)
15
+ * seqPosToGlobalCol({ row: "A-TG-C", seqPos: 3 }) // → 5 (C)
16
+ */
17
+ export function seqPosToGlobalCol({ row, seqPos, }) {
18
+ let nonGapCount = 0;
19
+ let globalCol = 0;
20
+ // Find the seqPos-th non-gap character
21
+ while (globalCol < row.length) {
22
+ if (!isBlank(row[globalCol])) {
23
+ if (nonGapCount === seqPos) {
24
+ return globalCol;
25
+ }
26
+ nonGapCount++;
27
+ }
28
+ globalCol++;
29
+ }
30
+ // If seqPos is 0 and we didn't find any non-gap character, return 0
31
+ // Otherwise return globalCol (which is row.length at this point)
32
+ return seqPos === 0 ? 0 : globalCol;
33
+ }
34
+ //# sourceMappingURL=seqPosToGlobalCol.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seqPosToGlobalCol.js","sourceRoot":"","sources":["../src/seqPosToGlobalCol.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAA;AAEhC;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,iBAAiB,CAAC,EAChC,GAAG,EACH,MAAM,GAIP;IACC,IAAI,WAAW,GAAG,CAAC,CAAA;IACnB,IAAI,SAAS,GAAG,CAAC,CAAA;IACjB,uCAAuC;IACvC,OAAO,SAAS,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC;QAC9B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;YAC7B,IAAI,WAAW,KAAK,MAAM,EAAE,CAAC;gBAC3B,OAAO,SAAS,CAAA;YAClB,CAAC;YACD,WAAW,EAAE,CAAA;QACf,CAAC;QACD,SAAS,EAAE,CAAA;IACb,CAAC;IACD,oEAAoE;IACpE,iEAAiE;IACjE,OAAO,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;AACrC,CAAC"}
@@ -0,0 +1,60 @@
1
+ import { describe, expect, test } from 'vitest';
2
+ import { seqPosToGlobalCol } from './seqPosToGlobalCol';
3
+ describe('seqPosToGlobalCol', () => {
4
+ test('converts sequence position to global column with no gaps', () => {
5
+ const row = 'ATGCATGC';
6
+ expect(seqPosToGlobalCol({ row, seqPos: 0 })).toBe(0);
7
+ expect(seqPosToGlobalCol({ row, seqPos: 3 })).toBe(3);
8
+ expect(seqPosToGlobalCol({ row, seqPos: 7 })).toBe(7);
9
+ expect(seqPosToGlobalCol({ row, seqPos: 8 })).toBe(8); // Past end
10
+ });
11
+ test('converts sequence position to global column with gaps', () => {
12
+ const row = 'A-TG-CA-TGC';
13
+ // Global: A(0) -(1) T(2) G(3) -(4) C(5) A(6) -(7) T(8) G(9) C(10)
14
+ // SeqPos: A(0) T(1) G(2) C(3) A(4) T(5) G(6) C(7)
15
+ expect(seqPosToGlobalCol({ row, seqPos: 0 })).toBe(0); // A
16
+ expect(seqPosToGlobalCol({ row, seqPos: 1 })).toBe(2); // T
17
+ expect(seqPosToGlobalCol({ row, seqPos: 2 })).toBe(3); // G
18
+ expect(seqPosToGlobalCol({ row, seqPos: 3 })).toBe(5); // C
19
+ expect(seqPosToGlobalCol({ row, seqPos: 4 })).toBe(6); // A
20
+ expect(seqPosToGlobalCol({ row, seqPos: 5 })).toBe(8); // T
21
+ expect(seqPosToGlobalCol({ row, seqPos: 6 })).toBe(9); // G
22
+ expect(seqPosToGlobalCol({ row, seqPos: 7 })).toBe(10); // C
23
+ expect(seqPosToGlobalCol({ row, seqPos: 8 })).toBe(11); // Past end
24
+ });
25
+ test('handles empty row', () => {
26
+ expect(seqPosToGlobalCol({ row: '', seqPos: 0 })).toBe(0);
27
+ });
28
+ test('handles row with only gaps', () => {
29
+ const row = '---..--';
30
+ expect(seqPosToGlobalCol({ row, seqPos: 0 })).toBe(0);
31
+ expect(seqPosToGlobalCol({ row, seqPos: 1 })).toBe(7); // Past end
32
+ });
33
+ test('handles mixed gap characters (- and .)', () => {
34
+ const row = 'A-.G-C.';
35
+ // Global: A(0) -(1) .(2) G(3) -(4) C(5) .(6)
36
+ // SeqPos: A(0) G(1) C(2)
37
+ expect(seqPosToGlobalCol({ row, seqPos: 0 })).toBe(0); // A
38
+ expect(seqPosToGlobalCol({ row, seqPos: 1 })).toBe(3); // G
39
+ expect(seqPosToGlobalCol({ row, seqPos: 2 })).toBe(5); // C
40
+ expect(seqPosToGlobalCol({ row, seqPos: 3 })).toBe(7); // Past end
41
+ });
42
+ test('handles leading gaps', () => {
43
+ const row = '--ACG';
44
+ // Global: -(0) -(1) A(2) C(3) G(4)
45
+ // SeqPos: A(0) C(1) G(2)
46
+ expect(seqPosToGlobalCol({ row, seqPos: 0 })).toBe(2); // A
47
+ expect(seqPosToGlobalCol({ row, seqPos: 1 })).toBe(3); // C
48
+ expect(seqPosToGlobalCol({ row, seqPos: 2 })).toBe(4); // G
49
+ });
50
+ test('handles trailing gaps', () => {
51
+ const row = 'ACG--';
52
+ // Global: A(0) C(1) G(2) -(3) -(4)
53
+ // SeqPos: A(0) C(1) G(2)
54
+ expect(seqPosToGlobalCol({ row, seqPos: 0 })).toBe(0); // A
55
+ expect(seqPosToGlobalCol({ row, seqPos: 1 })).toBe(1); // C
56
+ expect(seqPosToGlobalCol({ row, seqPos: 2 })).toBe(2); // G
57
+ expect(seqPosToGlobalCol({ row, seqPos: 3 })).toBe(5); // Past end
58
+ });
59
+ });
60
+ //# sourceMappingURL=seqPosToGlobalCol.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seqPosToGlobalCol.test.js","sourceRoot":"","sources":["../src/seqPosToGlobalCol.test.ts"],"names":[],"mappings":"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"}
package/dist/util.d.ts CHANGED
@@ -1,10 +1,9 @@
1
- import type { Node, NodeWithIds } from './types';
1
+ import type { NodeWithIds } from './types';
2
2
  import type { Theme } from '@mui/material';
3
3
  import type { HierarchyNode } from 'd3-hierarchy';
4
4
  export declare function transform<T>(obj: Record<string, T>, cb: (arg0: [string, T]) => [string, T]): {
5
5
  [k: string]: T;
6
6
  };
7
- export declare function generateNodeIds(tree: Node, parent?: string, depth?: number): NodeWithIds;
8
7
  export declare function colorContrast(colorScheme: Record<string, string>, theme: Theme): {
9
8
  [k: string]: string;
10
9
  };
package/dist/util.js CHANGED
@@ -5,15 +5,6 @@ extend([namesPlugin]);
5
5
  export function transform(obj, cb) {
6
6
  return Object.fromEntries(Object.entries(obj).map(cb));
7
7
  }
8
- export function generateNodeIds(tree, parent = 'node', depth = 0) {
9
- const id = `${parent}-${depth}`;
10
- return {
11
- ...tree,
12
- id,
13
- name: tree.name || id,
14
- children: tree.children?.map((b, i) => generateNodeIds(b, `${id}-${i}`, depth + 1)) || [],
15
- };
16
- }
17
8
  export function colorContrast(colorScheme, theme) {
18
9
  return transform(colorScheme, ([letter, color]) => [
19
10
  letter,
package/dist/util.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AACvC,OAAO,WAAW,MAAM,sBAAsB,CAAA;AAC9C,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAM9B,MAAM,CAAC,CAAC,WAAW,CAAC,CAAC,CAAA;AAErB,MAAM,UAAU,SAAS,CACvB,GAAsB,EACtB,EAAsC;IAEtC,OAAO,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;AACxD,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,WAAmC,EACnC,KAAY;IAEZ,OAAO,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC;QACjD,MAAM;QACN,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC;KACrD,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAAgB,EAAE,GAAsB;IACjE,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACrD,CAAC;IACD,MAAM,MAAM,GAAG,EAAE,CAAA;IACjB,IAAI,OAAO,GAAG,CAAC,CAAA;IACf,KAAK,MAAM,QAAQ,IAAI,MAAM,EAAE,CAAC;QAC9B,IAAI,QAAQ,GAAG,OAAO,EAAE,CAAC;YACvB,MAAM,CAAC,IAAI,CACT,OAAO,GAAG,KAAK,QAAQ;gBACrB,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC;gBAC9B,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAC1C,CAAA;QACH,CAAC;QACD,OAAO,GAAG,QAAQ,GAAG,CAAC,CAAA;IACxB,CAAC;IACD,IAAI,OAAO,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC;QACzB,MAAM,CAAC,IAAI,CACT,OAAO,GAAG,KAAK,QAAQ;YACrB,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC;YACpB,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAChC,CAAA;IACH,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;AACxB,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,WAAW,CACzB,CAA6B,EAC7B,EAAU,EACV,CAAS;IAET,mBAAmB;IACnB,CAAC,CAAC,GAAG,GAAG,CAAC,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;IAEnD,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;QACf,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;YACrB,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAA;QACvB,CAAC,CAAC,CAAA;IACJ,CAAC;AACH,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,SAAS,CAAC,CAA6B;IACrD,OAAO,CACL,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAC1E,CAAA;AACH,CAAC;AAED,gDAAgD;AAChD,8DAA8D;AAC9D,MAAM,UAAU,QAAQ,CAAC,CAA6B;IACpD,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;QACf,mBAAmB;QACnB,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,QAAQ,CAAA;QACxB,mBAAmB;QACnB,CAAC,CAAC,QAAQ,GAAG,IAAI,CAAA;IACnB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,GAAG,CAAC,CAAiC;IACnD,OAAO,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,CAAA;AACxB,CAAC;AAED,8CAA8C;AAC9C,oCAAoC;AACpC,MAAM,UAAU,OAAO,CAAC,CAAU;IAChC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,CAAA;AAC/B,CAAC"}
package/dist/version.d.ts CHANGED
@@ -1 +1 @@
1
- export declare const version = "4.4.7";
1
+ export declare const version = "4.7.0";
package/dist/version.js CHANGED
@@ -1,2 +1,2 @@
1
- export const version = '4.4.7';
1
+ export const version = '4.7.0';
2
2
  //# sourceMappingURL=version.js.map
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "react-msaview",
3
3
  "author": "Colin",
4
- "version": "4.5.0",
4
+ "version": "4.8.0",
5
5
  "license": "MIT",
6
6
  "repository": {
7
7
  "type": "git",
@@ -20,17 +20,17 @@
20
20
  },
21
21
  "scripts": {
22
22
  "clean": "rimraf dist",
23
- "watch": "yarn build:esm --watch",
23
+ "watch": "pnpm build:esm --watch",
24
24
  "format": "prettier --write .",
25
- "prebuild": "yarn clean",
25
+ "prebuild": "pnpm clean",
26
26
  "preversion": "node output-version.js > src/version.ts && git add -A src && git commit -m '[skip ci] Bump version.ts'",
27
27
  "build:esm": "tsc",
28
28
  "build:bundle": "webpack",
29
- "build": "yarn build:esm && yarn build:bundle",
30
- "prepack": "yarn build",
29
+ "build": "pnpm build:esm && pnpm build:bundle",
30
+ "prepack": "pnpm build",
31
31
  "postversion": "git push --follow-tags",
32
32
  "statedocs": "rm -rf apidocs && mkdir apidocs && node --experimental-strip-types docgen/generateStateModelDocs.ts",
33
- "poststatedocs": "yarn format",
33
+ "poststatedocs": "pnpm format",
34
34
  "test": "vitest"
35
35
  },
36
36
  "peerDependencies": {
@@ -46,16 +46,14 @@
46
46
  "dependencies": {
47
47
  "@mui/icons-material": "^7.0.1",
48
48
  "@mui/material": "^7.0.1",
49
- "clustal-js": "^2.0.0",
49
+ "@react-msaview/parsers": "workspace:*",
50
50
  "colord": "^2.9.3",
51
51
  "copy-to-clipboard": "^3.3.1",
52
52
  "d3-array": "^3.2.3",
53
53
  "d3-hierarchy": "^3.1.2",
54
- "emf-js": "^2.0.0",
55
54
  "file-saver": "^2.0.5",
56
55
  "flatbush": "^4.4.0",
57
56
  "pako": "^2.1.0",
58
- "stockholm-js": "^1.0.10",
59
57
  "svgcanvas": "^2.5.0"
60
58
  }
61
59
  }
@@ -19,11 +19,8 @@ const HeaderInfoArea = observer(function ({ model }: { model: MsaViewModel }) {
19
19
  return mouseOverRowName && mouseCol !== undefined ? (
20
20
  <Typography className={classes.margin}>
21
21
  {mouseOverRowName}:
22
- {model.mouseOverCoordToGapRemovedRowCoordOneBased(
23
- mouseOverRowName,
24
- mouseCol,
25
- )}{' '}
26
- ({model.mouseOverCoordToRowLetter(mouseOverRowName, mouseCol)})
22
+ {model.visibleColToSeqPosOneBased(mouseOverRowName, mouseCol)} (
23
+ {model.visibleColToRowLetter(mouseOverRowName, mouseCol)})
27
24
  </Typography>
28
25
  ) : null
29
26
  })
@@ -13,6 +13,7 @@ import type { FileLocation } from '@jbrowse/core/util/types'
13
13
  const ImportForm = observer(function ({ model }: { model: MsaViewModel }) {
14
14
  const [msaFile, setMsaFile] = useState<FileLocation>()
15
15
  const [treeFile, setTreeFile] = useState<FileLocation>()
16
+ const [gffFile, setGffFile] = useState<FileLocation>()
16
17
  const { error } = model
17
18
 
18
19
  return (
@@ -48,6 +49,10 @@ const ImportForm = observer(function ({ model }: { model: MsaViewModel }) {
48
49
  <Typography>Tree file or URL</Typography>
49
50
  <FileSelector location={treeFile} setLocation={setTreeFile} />
50
51
  </div>
52
+ <div>
53
+ <Typography>InterProScan GFF file or URL (optional)</Typography>
54
+ <FileSelector location={gffFile} setLocation={setGffFile} />
55
+ </div>
51
56
  </div>
52
57
  <div>
53
58
  <Button
@@ -55,7 +60,7 @@ const ImportForm = observer(function ({ model }: { model: MsaViewModel }) {
55
60
  // eslint-disable-next-line @typescript-eslint/no-floating-promises
56
61
  ;(async () => {
57
62
  try {
58
- await load(model, msaFile, treeFile)
63
+ await load(model, msaFile, treeFile, gffFile)
59
64
  } catch (e) {
60
65
  console.error(e)
61
66
  model.setError(e)
@@ -5,6 +5,7 @@ export async function load(
5
5
  model: MsaViewModel,
6
6
  msaFile?: FileLocation,
7
7
  treeFile?: FileLocation,
8
+ gffFile?: FileLocation,
8
9
  ) {
9
10
  model.setError(undefined)
10
11
  if (msaFile) {
@@ -13,4 +14,7 @@ export async function load(
13
14
  if (treeFile) {
14
15
  model.setTreeFilehandle(treeFile)
15
16
  }
17
+ if (gffFile) {
18
+ model.setGFFFilehandle(gffFile)
19
+ }
16
20
  }
@@ -69,8 +69,13 @@ function drawTiles({
69
69
  if (entry) {
70
70
  for (let j = 0, l2 = entry.length; j < l2; j++) {
71
71
  const { start, end, accession } = entry[j]!
72
- const m1 = model.seqCoordToRowSpecificGlobalCoord(name, start - 1)
73
- const m2 = model.seqCoordToRowSpecificGlobalCoord(name, end)
72
+ // Convert sequence positions to visible column positions
73
+ // seqPos is 1-based from InterPro, so subtract 1 for 0-based
74
+ const m1 = model.seqPosToVisibleCol(name, start - 1)
75
+ const m2 = model.seqPosToVisibleCol(name, end)
76
+ if (m1 === undefined || m2 === undefined) {
77
+ continue // Skip if either position is hidden
78
+ }
74
79
  const x = m1 * colWidth
75
80
  ctx.fillStyle = fillPalette[accession]!
76
81
  ctx.strokeStyle = strokePalette[accession]!