react-msaview 4.6.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 (93) 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.map +1 -1
  15. package/dist/components/tree/renderTreeCanvas.js +10 -8
  16. package/dist/components/tree/renderTreeCanvas.js.map +1 -1
  17. package/dist/model.d.ts +153 -16
  18. package/dist/model.js +97 -29
  19. package/dist/model.js.map +1 -1
  20. package/dist/rowCoordinateCalculations.d.ts +69 -9
  21. package/dist/rowCoordinateCalculations.js +118 -46
  22. package/dist/rowCoordinateCalculations.js.map +1 -1
  23. package/dist/rowCoordinateCalculations.test.js +152 -52
  24. package/dist/rowCoordinateCalculations.test.js.map +1 -1
  25. package/dist/seqPosToGlobalCol.d.ts +19 -0
  26. package/dist/seqPosToGlobalCol.js +34 -0
  27. package/dist/seqPosToGlobalCol.js.map +1 -0
  28. package/dist/seqPosToGlobalCol.test.js +60 -0
  29. package/dist/seqPosToGlobalCol.test.js.map +1 -0
  30. package/dist/util.d.ts +1 -2
  31. package/dist/util.js +0 -9
  32. package/dist/util.js.map +1 -1
  33. package/dist/version.d.ts +1 -1
  34. package/dist/version.js +1 -1
  35. package/package.json +7 -9
  36. package/src/components/header/HeaderInfoArea.tsx +2 -5
  37. package/src/components/import/ImportForm.tsx +6 -1
  38. package/src/components/import/util.ts +4 -0
  39. package/src/components/msa/renderBoxFeatureCanvasBlock.ts +7 -2
  40. package/src/components/msa/renderMSABlock.ts +5 -1
  41. package/src/components/tree/renderTreeCanvas.ts +11 -9
  42. package/src/declare.d.ts +0 -1
  43. package/src/model.ts +122 -42
  44. package/src/rowCoordinateCalculations.test.ts +167 -74
  45. package/src/rowCoordinateCalculations.ts +138 -63
  46. package/src/seqPosToGlobalCol.test.ts +71 -0
  47. package/src/seqPosToGlobalCol.ts +40 -0
  48. package/src/util.ts +1 -19
  49. package/src/version.ts +1 -1
  50. package/dist/parseGFF.d.ts +0 -10
  51. package/dist/parseGFF.js +0 -31
  52. package/dist/parseGFF.js.map +0 -1
  53. package/dist/parseNewick.d.ts +0 -60
  54. package/dist/parseNewick.js +0 -95
  55. package/dist/parseNewick.js.map +0 -1
  56. package/dist/parsers/A3mMSA.d.ts +0 -43
  57. package/dist/parsers/A3mMSA.js +0 -277
  58. package/dist/parsers/A3mMSA.js.map +0 -1
  59. package/dist/parsers/A3mMSA.test.js +0 -138
  60. package/dist/parsers/A3mMSA.test.js.map +0 -1
  61. package/dist/parsers/ClustalMSA.d.ts +0 -30
  62. package/dist/parsers/ClustalMSA.js +0 -55
  63. package/dist/parsers/ClustalMSA.js.map +0 -1
  64. package/dist/parsers/EmfMSA.d.ts +0 -27
  65. package/dist/parsers/EmfMSA.js +0 -53
  66. package/dist/parsers/EmfMSA.js.map +0 -1
  67. package/dist/parsers/EmfTree.d.ts +0 -5
  68. package/dist/parsers/EmfTree.js +0 -8
  69. package/dist/parsers/EmfTree.js.map +0 -1
  70. package/dist/parsers/FastaMSA.d.ts +0 -19
  71. package/dist/parsers/FastaMSA.js +0 -69
  72. package/dist/parsers/FastaMSA.js.map +0 -1
  73. package/dist/parsers/StockholmMSA.d.ts +0 -68
  74. package/dist/parsers/StockholmMSA.js +0 -107
  75. package/dist/parsers/StockholmMSA.js.map +0 -1
  76. package/dist/seqCoordToRowSpecificGlobalCoord.d.ts +0 -4
  77. package/dist/seqCoordToRowSpecificGlobalCoord.js +0 -19
  78. package/dist/seqCoordToRowSpecificGlobalCoord.js.map +0 -1
  79. package/dist/seqCoordToRowSpecificGlobalCoord.test.d.ts +0 -1
  80. package/dist/seqCoordToRowSpecificGlobalCoord.test.js +0 -42
  81. package/dist/seqCoordToRowSpecificGlobalCoord.test.js.map +0 -1
  82. package/src/parseGFF.ts +0 -34
  83. package/src/parseNewick.ts +0 -94
  84. package/src/parsers/A3mMSA.test.ts +0 -164
  85. package/src/parsers/A3mMSA.ts +0 -321
  86. package/src/parsers/ClustalMSA.ts +0 -69
  87. package/src/parsers/EmfMSA.ts +0 -67
  88. package/src/parsers/EmfTree.ts +0 -9
  89. package/src/parsers/FastaMSA.ts +0 -82
  90. package/src/parsers/StockholmMSA.ts +0 -140
  91. package/src/seqCoordToRowSpecificGlobalCoord.test.ts +0 -53
  92. package/src/seqCoordToRowSpecificGlobalCoord.ts +0 -25
  93. /package/dist/{parsers/A3mMSA.test.d.ts → seqPosToGlobalCol.test.d.ts} +0 -0
@@ -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":"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"}
package/dist/version.d.ts CHANGED
@@ -1 +1 @@
1
- export declare const version = "4.5.0";
1
+ export declare const version = "4.7.0";
package/dist/version.js CHANGED
@@ -1,2 +1,2 @@
1
- export const version = '4.5.0';
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.6.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]!
@@ -224,7 +224,11 @@ function drawText({
224
224
  : bgColor
225
225
  ? contrast
226
226
  : color || 'black'
227
- ctx.fillText(displayLetter, j * colWidth + offsetXAligned + halfColWidth, y)
227
+ ctx.fillText(
228
+ displayLetter,
229
+ j * colWidth + offsetXAligned + halfColWidth,
230
+ y,
231
+ )
228
232
  }
229
233
  }
230
234
  }
@@ -52,10 +52,11 @@ export function renderTree({
52
52
  }
53
53
  const sy = source.x!
54
54
  const ty = target.x!
55
- // @ts-expect-error
56
- const tx = showBranchLen ? target.len : target.y
57
- // @ts-expect-error
58
- const sx = showBranchLen ? source.len : source.y
55
+ const tx = showBranchLen ? (target as { len?: number }).len : target.y
56
+ const sx = showBranchLen ? (source as { len?: number }).len : source.y
57
+ if (tx === undefined || sx === undefined) {
58
+ continue
59
+ }
59
60
 
60
61
  const y1 = Math.min(sy, ty)
61
62
  const y2 = Math.max(sy, ty)
@@ -94,9 +95,11 @@ export function renderNodeBubbles({
94
95
  } = model
95
96
  const by = blockSizeYOverride || blockSize
96
97
  for (const node of hierarchy.descendants()) {
97
- const val = showBranchLen ? 'len' : 'y'
98
- // @ts-expect-error
99
- const { [val]: x, data } = node
98
+ const x = showBranchLen ? (node as { len?: number }).len : node.y
99
+ if (x === undefined) {
100
+ continue
101
+ }
102
+ const { data } = node
100
103
  const y = node.x!
101
104
  const { id, name } = data
102
105
  if (
@@ -167,9 +170,8 @@ export function renderTreeLabels({
167
170
  for (const node of leaves) {
168
171
  const {
169
172
  data: { name, id },
170
- // @ts-expect-error
171
- len,
172
173
  } = node
174
+ const len = (node as { len?: number }).len
173
175
  const y = node.x!
174
176
  const x = node.y!
175
177
 
package/src/declare.d.ts CHANGED
@@ -1,2 +1 @@
1
- declare module 'stockholm-js'
2
1
  declare module 'svgcanvas'
package/src/model.ts CHANGED
@@ -9,14 +9,25 @@ import {
9
9
  } from '@jbrowse/core/util'
10
10
  import { openLocation } from '@jbrowse/core/util/io'
11
11
  import { ElementId, FileLocation } from '@jbrowse/core/util/types/mst'
12
+ import {
13
+ A3mMSA,
14
+ ClustalMSA,
15
+ EmfMSA,
16
+ FastaMSA,
17
+ StockholmMSA,
18
+ generateNodeIds,
19
+ gffToInterProResults,
20
+ parseEmfTree,
21
+ parseGFF,
22
+ parseNewick,
23
+ stockholmSniff,
24
+ } from '@react-msaview/parsers'
12
25
  import { colord } from 'colord'
13
26
  import { ascending } from 'd3-array'
14
27
  import { cluster, hierarchy } from 'd3-hierarchy'
15
- import { parseEmfTree } from 'emf-js'
16
28
  import { saveAs } from 'file-saver'
17
29
  import { autorun, transaction } from 'mobx'
18
30
  import { addDisposer, cast, types } from 'mobx-state-tree'
19
- import Stockholm from 'stockholm-js'
20
31
 
21
32
  import { blocksX, blocksY } from './calculateBlocks'
22
33
  import colorSchemes from './colorSchemes'
@@ -55,26 +66,14 @@ import { MSAModelF } from './model/msaModel'
55
66
  import { TreeModelF } from './model/treeModel'
56
67
  import { calculateNeighborJoiningTree } from './neighborJoining'
57
68
  import { parseAsn1 } from './parseAsn1'
58
- import parseNewick from './parseNewick'
59
- import A3mMSA from './parsers/A3mMSA'
60
- import ClustalMSA from './parsers/ClustalMSA'
61
- import EmfMSA from './parsers/EmfMSA'
62
- import FastaMSA from './parsers/FastaMSA'
63
- import StockholmMSA from './parsers/StockholmMSA'
64
69
  import { reparseTree } from './reparseTree'
65
70
  import {
66
- mouseOverCoordToGapRemovedRowCoord,
67
- mouseOverCoordToGlobalCoord,
71
+ globalColToVisibleCol,
72
+ visibleColToGlobalCol,
73
+ visibleColToSeqPosForRow,
68
74
  } from './rowCoordinateCalculations'
69
- import { seqCoordToRowSpecificGlobalCoord } from './seqCoordToRowSpecificGlobalCoord'
70
- import {
71
- collapse,
72
- generateNodeIds,
73
- len,
74
- maxLength,
75
- setBrLength,
76
- skipBlanks,
77
- } from './util'
75
+ import { seqPosToGlobalCol } from './seqPosToGlobalCol'
76
+ import { collapse, len, maxLength, setBrLength, skipBlanks } from './util'
78
77
 
79
78
  import type { InterProScanResults } from './launchInterProScan'
80
79
  import type {
@@ -193,6 +192,12 @@ function stateModelFactory() {
193
192
  */
194
193
  treeMetadataFilehandle: types.maybe(FileLocation),
195
194
 
195
+ /**
196
+ * #property
197
+ * filehandle object for InterProScan GFF file
198
+ */
199
+ gffFilehandle: types.maybe(FileLocation),
200
+
196
201
  /**
197
202
  * #property
198
203
  *
@@ -569,6 +574,13 @@ function stateModelFactory() {
569
574
  self.treeFilehandle = treeFilehandle
570
575
  },
571
576
 
577
+ /**
578
+ * #action
579
+ */
580
+ setGFFFilehandle(gffFilehandle?: FileLocationType) {
581
+ self.gffFilehandle = gffFilehandle
582
+ },
583
+
572
584
  /**
573
585
  * #action
574
586
  */
@@ -690,7 +702,7 @@ function stateModelFactory() {
690
702
  get MSA() {
691
703
  const text = self.data.msa
692
704
  if (text) {
693
- if (Stockholm.sniff(text)) {
705
+ if (stockholmSniff(text)) {
694
706
  return new StockholmMSA(text, self.currentAlignment)
695
707
  } else if (A3mMSA.sniff(text)) {
696
708
  return new A3mMSA(text)
@@ -1485,7 +1497,7 @@ function stateModelFactory() {
1485
1497
  .map(t => ({
1486
1498
  model: {
1487
1499
  ...t,
1488
- data: hideGapsEffective ? skipBlanks(blanks, t.data!) : t.data,
1500
+ data: hideGapsEffective ? skipBlanks(blanks, t.data!) : t.data!,
1489
1501
  height: rowHeight,
1490
1502
  } as TextTrackModel,
1491
1503
  ReactComponent: TextTrack,
@@ -1531,22 +1543,30 @@ function stateModelFactory() {
1531
1543
 
1532
1544
  /**
1533
1545
  * #method
1534
- * return a row-specific letter, or undefined if gap
1546
+ * Return a row-specific letter at a visible column, or undefined if gap.
1547
+ *
1548
+ * @param rowName - The name of the row
1549
+ * @param visibleCol - The visible column index (what the user sees on screen)
1550
+ * @returns The letter at that position, or undefined if it's a gap
1535
1551
  */
1536
- mouseOverCoordToRowLetter(rowName: string, pos: number) {
1552
+ visibleColToRowLetter(rowName: string, visibleCol: number) {
1537
1553
  const { rowMap, blanks } = self
1538
- return rowMap.get(rowName)?.[mouseOverCoordToGlobalCoord(blanks, pos)]
1554
+ return rowMap.get(rowName)?.[visibleColToGlobalCol(blanks, visibleCol)]
1539
1555
  },
1540
1556
 
1541
1557
  /**
1542
1558
  * #method
1543
- * return a row-specific sequence coordinate, skipping gaps, given a
1544
- * global coordinate
1559
+ * Convert a visible column to a row-specific sequence position (0-based).
1560
+ * Returns undefined if the position is a gap in the sequence.
1561
+ *
1562
+ * @param rowName - The name of the row
1563
+ * @param visibleCol - The visible column index
1564
+ * @returns The sequence position (0-based), or undefined if it's a gap
1545
1565
  */
1546
- mouseOverCoordToGapRemovedRowCoord(rowName: string, position: number) {
1547
- return mouseOverCoordToGapRemovedRowCoord({
1566
+ visibleColToSeqPos(rowName: string, visibleCol: number) {
1567
+ return visibleColToSeqPosForRow({
1548
1568
  rowName,
1549
- position,
1569
+ visibleCol,
1550
1570
  rowMap: self.rowMap,
1551
1571
  blanks: self.blanks,
1552
1572
  })
@@ -1554,32 +1574,67 @@ function stateModelFactory() {
1554
1574
 
1555
1575
  /**
1556
1576
  * #method
1557
- * return a row-specific sequence coordinate, skipping gaps, given a
1558
- * global coordinate
1559
- */
1560
- mouseOverCoordToGapRemovedRowCoordOneBased(
1561
- rowName: string,
1562
- position: number,
1563
- ) {
1564
- const val = this.mouseOverCoordToGapRemovedRowCoord(rowName, position)
1577
+ * Convert a visible column to a row-specific sequence position (1-based).
1578
+ * Returns undefined if the position is a gap in the sequence.
1579
+ *
1580
+ * @param rowName - The name of the row
1581
+ * @param visibleCol - The visible column index
1582
+ * @returns The sequence position (1-based), or undefined if it's a gap
1583
+ */
1584
+ visibleColToSeqPosOneBased(rowName: string, visibleCol: number) {
1585
+ const val = this.visibleColToSeqPos(rowName, visibleCol)
1565
1586
  return val !== undefined ? val + 1 : undefined
1566
1587
  },
1567
1588
 
1568
1589
  /**
1569
1590
  * #method
1570
- * return a global coordinate given a row-specific sequence coordinate
1571
- * which does not not include gaps
1591
+ * Convert a global column index to a visible column index.
1592
+ * Returns undefined if the column is hidden (in blanks).
1593
+ * This is the inverse of visibleColToGlobalCol.
1594
+ *
1595
+ * @param globalCol - The global column index in the full MSA
1596
+ * @returns The visible column index, or undefined if the column is hidden
1597
+ */
1598
+ globalColToVisibleCol(globalCol: number) {
1599
+ const { blanks, hideGapsEffective } = self
1600
+ if (!hideGapsEffective) {
1601
+ return globalCol
1602
+ }
1603
+ return globalColToVisibleCol(blanks, globalCol)
1604
+ },
1605
+
1606
+ /**
1607
+ * #method
1608
+ * Convert a sequence position (ungapped) to a global column index.
1609
+ *
1610
+ * @param rowName - The name of the row
1611
+ * @param seqPos - The sequence position (0-based, ungapped)
1612
+ * @returns The global column index in the full MSA
1572
1613
  */
1573
- seqCoordToRowSpecificGlobalCoord(rowName: string, position: number) {
1614
+ seqPosToGlobalCol(rowName: string, seqPos: number) {
1574
1615
  const { rowNames, rows } = self
1575
1616
  const index = rowNames.indexOf(rowName)
1576
1617
  return index !== -1 && rows[index]
1577
- ? seqCoordToRowSpecificGlobalCoord({
1618
+ ? seqPosToGlobalCol({
1578
1619
  row: rows[index][1],
1579
- position,
1620
+ seqPos,
1580
1621
  })
1581
1622
  : 0
1582
1623
  },
1624
+
1625
+ /**
1626
+ * #method
1627
+ * Convert a sequence position (ungapped) directly to a visible column index.
1628
+ * This combines seqPosToGlobalCol and globalColToVisibleCol.
1629
+ *
1630
+ * @param rowName - The name of the row
1631
+ * @param seqPos - The sequence position (0-based, ungapped)
1632
+ * @returns The visible column index, or undefined if the column is hidden
1633
+ */
1634
+ seqPosToVisibleCol(rowName: string, seqPos: number) {
1635
+ const globalCol = this.seqPosToGlobalCol(rowName, seqPos)
1636
+ return this.globalColToVisibleCol(globalCol)
1637
+ },
1583
1638
  }))
1584
1639
 
1585
1640
  .views(self => ({
@@ -1851,6 +1906,31 @@ function stateModelFactory() {
1851
1906
  }),
1852
1907
  )
1853
1908
 
1909
+ // autorun opens gffFilehandle for InterProScan domains
1910
+ addDisposer(
1911
+ self,
1912
+ autorun(async () => {
1913
+ const { gffFilehandle } = self
1914
+ if (gffFilehandle) {
1915
+ try {
1916
+ const gffText = await fetchAndMaybeUnzipText(
1917
+ openLocation(gffFilehandle),
1918
+ )
1919
+ const gffRecords = parseGFF(gffText)
1920
+ const interProResults = gffToInterProResults(gffRecords)
1921
+ self.setInterProAnnotations(interProResults)
1922
+ self.setShowDomains(true)
1923
+ if (gffFilehandle.locationType === 'BlobLocation') {
1924
+ self.setGFFFilehandle(undefined)
1925
+ }
1926
+ } catch (e) {
1927
+ console.error(e)
1928
+ self.setError(e)
1929
+ }
1930
+ }
1931
+ }),
1932
+ )
1933
+
1854
1934
  // autorun opens msaFilehandle
1855
1935
  addDisposer(
1856
1936
  self,