react-msaview 3.1.12 → 3.2.1

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 (233) hide show
  1. package/bundle/index.js +32 -31
  2. package/dist/colorSchemes.d.ts +2 -2
  3. package/dist/colorSchemes.js +5 -6
  4. package/dist/colorSchemes.js.map +1 -1
  5. package/dist/components/Loading.d.ts +1 -1
  6. package/dist/components/Loading.js +7 -5
  7. package/dist/components/Loading.js.map +1 -1
  8. package/dist/components/MSAView.d.ts +1 -1
  9. package/dist/components/MSAView.js +13 -9
  10. package/dist/components/MSAView.js.map +1 -1
  11. package/dist/components/ResizeHandles.d.ts +1 -1
  12. package/dist/components/ResizeHandles.js +8 -4
  13. package/dist/components/ResizeHandles.js.map +1 -1
  14. package/dist/components/SequenceTextArea.js +9 -3
  15. package/dist/components/SequenceTextArea.js.map +1 -1
  16. package/dist/components/TextTrack.d.ts +1 -1
  17. package/dist/components/TextTrack.js +1 -1
  18. package/dist/components/TextTrack.js.map +1 -1
  19. package/dist/components/Track.d.ts +1 -1
  20. package/dist/components/Track.js +6 -2
  21. package/dist/components/Track.js.map +1 -1
  22. package/dist/components/VerticalScrollbar.d.ts +6 -0
  23. package/dist/components/VerticalScrollbar.js +69 -0
  24. package/dist/components/VerticalScrollbar.js.map +1 -0
  25. package/dist/components/dialogs/AboutDialog.js +3 -1
  26. package/dist/components/dialogs/AboutDialog.js.map +1 -1
  27. package/dist/components/dialogs/AddTrackDialog.d.ts +3 -3
  28. package/dist/components/dialogs/AddTrackDialog.js +8 -3
  29. package/dist/components/dialogs/AddTrackDialog.js.map +1 -1
  30. package/dist/components/dialogs/DomainDialog.d.ts +1 -1
  31. package/dist/components/dialogs/DomainDialog.js +8 -4
  32. package/dist/components/dialogs/DomainDialog.js.map +1 -1
  33. package/dist/components/dialogs/ExportSVGDialog.d.ts +1 -1
  34. package/dist/components/dialogs/ExportSVGDialog.js +29 -17
  35. package/dist/components/dialogs/ExportSVGDialog.js.map +1 -1
  36. package/dist/components/dialogs/FeatureDialog.d.ts +1 -1
  37. package/dist/components/dialogs/FeatureDialog.js +8 -4
  38. package/dist/components/dialogs/FeatureDialog.js.map +1 -1
  39. package/dist/components/dialogs/{InterProScanPanel.d.ts → InterProScanDialog.d.ts} +1 -1
  40. package/dist/components/dialogs/{InterProScanPanel.js → InterProScanDialog.js} +26 -11
  41. package/dist/components/dialogs/InterProScanDialog.js.map +1 -0
  42. package/dist/components/dialogs/MetadataDialog.d.ts +1 -1
  43. package/dist/components/dialogs/MetadataDialog.js +3 -1
  44. package/dist/components/dialogs/MetadataDialog.js.map +1 -1
  45. package/dist/components/dialogs/SettingsDialog.d.ts +1 -1
  46. package/dist/components/dialogs/SettingsDialog.js +62 -15
  47. package/dist/components/dialogs/SettingsDialog.js.map +1 -1
  48. package/dist/components/dialogs/TracklistDialog.d.ts +3 -3
  49. package/dist/components/dialogs/TracklistDialog.js +8 -3
  50. package/dist/components/dialogs/TracklistDialog.js.map +1 -1
  51. package/dist/components/dialogs/UserProvidedDomainsDialog.d.ts +7 -0
  52. package/dist/components/dialogs/UserProvidedDomainsDialog.js +64 -0
  53. package/dist/components/dialogs/UserProvidedDomainsDialog.js.map +1 -0
  54. package/dist/components/header/Header.d.ts +1 -1
  55. package/dist/components/header/Header.js +11 -4
  56. package/dist/components/header/Header.js.map +1 -1
  57. package/dist/components/header/HeaderInfoArea.d.ts +1 -1
  58. package/dist/components/header/HeaderInfoArea.js +5 -2
  59. package/dist/components/header/HeaderInfoArea.js.map +1 -1
  60. package/dist/components/header/HeaderMenu.d.ts +1 -1
  61. package/dist/components/header/HeaderMenu.js +12 -4
  62. package/dist/components/header/HeaderMenu.js.map +1 -1
  63. package/dist/components/header/HeaderMenuExtra.d.ts +1 -1
  64. package/dist/components/header/HeaderMenuExtra.js +55 -35
  65. package/dist/components/header/HeaderMenuExtra.js.map +1 -1
  66. package/dist/components/header/HeaderStatusArea.d.ts +2 -2
  67. package/dist/components/header/HeaderStatusArea.js +1 -1
  68. package/dist/components/header/HeaderStatusArea.js.map +1 -1
  69. package/dist/components/header/MultiAlignmentSelector.d.ts +1 -1
  70. package/dist/components/header/ZoomControls.js +45 -3
  71. package/dist/components/header/ZoomControls.js.map +1 -1
  72. package/dist/components/import/ImportForm.d.ts +3 -3
  73. package/dist/components/import/ImportForm.js +15 -2
  74. package/dist/components/import/ImportForm.js.map +1 -1
  75. package/dist/components/import/ImportFormExamples.d.ts +1 -1
  76. package/dist/components/import/ImportFormExamples.js +53 -38
  77. package/dist/components/import/ImportFormExamples.js.map +1 -1
  78. package/dist/components/import/util.d.ts +2 -2
  79. package/dist/components/minimap/Minimap.d.ts +1 -1
  80. package/dist/components/minimap/Minimap.js +24 -17
  81. package/dist/components/minimap/Minimap.js.map +1 -1
  82. package/dist/components/minimap/MinimapSVG.d.ts +1 -1
  83. package/dist/components/minimap/MinimapSVG.js +1 -1
  84. package/dist/components/minimap/MinimapSVG.js.map +1 -1
  85. package/dist/components/msa/MSACanvas.d.ts +1 -1
  86. package/dist/components/msa/MSACanvas.js +3 -3
  87. package/dist/components/msa/MSACanvas.js.map +1 -1
  88. package/dist/components/msa/MSACanvasBlock.d.ts +3 -3
  89. package/dist/components/msa/MSACanvasBlock.js +9 -6
  90. package/dist/components/msa/MSACanvasBlock.js.map +1 -1
  91. package/dist/components/msa/MSAMouseoverCanvas.d.ts +1 -1
  92. package/dist/components/msa/MSAPanel.d.ts +1 -1
  93. package/dist/components/msa/renderBoxFeatureCanvasBlock.d.ts +1 -1
  94. package/dist/components/msa/renderBoxFeatureCanvasBlock.js +3 -4
  95. package/dist/components/msa/renderBoxFeatureCanvasBlock.js.map +1 -1
  96. package/dist/components/msa/renderMSABlock.d.ts +2 -2
  97. package/dist/components/msa/renderMSABlock.js +16 -16
  98. package/dist/components/msa/renderMSABlock.js.map +1 -1
  99. package/dist/components/msa/renderMSAMouseover.d.ts +1 -1
  100. package/dist/components/msa/renderMSAMouseover.js +3 -3
  101. package/dist/components/msa/renderMSAMouseover.js.map +1 -1
  102. package/dist/components/tree/TreeBranchMenu.d.ts +1 -1
  103. package/dist/components/tree/TreeBranchMenu.js +6 -3
  104. package/dist/components/tree/TreeBranchMenu.js.map +1 -1
  105. package/dist/components/tree/TreeCanvas.d.ts +1 -1
  106. package/dist/components/tree/TreeCanvas.js +13 -12
  107. package/dist/components/tree/TreeCanvas.js.map +1 -1
  108. package/dist/components/tree/TreeCanvasBlock.d.ts +1 -1
  109. package/dist/components/tree/TreeCanvasBlock.js +13 -5
  110. package/dist/components/tree/TreeCanvasBlock.js.map +1 -1
  111. package/dist/components/tree/TreeNodeMenu.d.ts +1 -1
  112. package/dist/components/tree/TreeNodeMenu.js +3 -3
  113. package/dist/components/tree/TreeNodeMenu.js.map +1 -1
  114. package/dist/components/tree/TreePanel.d.ts +1 -1
  115. package/dist/components/tree/TreeRuler.d.ts +1 -1
  116. package/dist/components/tree/dialogs/TreeNodeInfoDialog.d.ts +3 -3
  117. package/dist/components/tree/dialogs/TreeNodeInfoDialog.js +5 -2
  118. package/dist/components/tree/dialogs/TreeNodeInfoDialog.js.map +1 -1
  119. package/dist/components/tree/renderTreeCanvas.d.ts +3 -3
  120. package/dist/components/tree/renderTreeCanvas.js +25 -9
  121. package/dist/components/tree/renderTreeCanvas.js.map +1 -1
  122. package/dist/components/util.js +1 -4
  123. package/dist/components/util.js.map +1 -1
  124. package/dist/ggplotPalettes.js.map +1 -1
  125. package/dist/launchInterProScan.d.ts +1 -1
  126. package/dist/launchInterProScan.js +11 -13
  127. package/dist/launchInterProScan.js.map +1 -1
  128. package/dist/model/DataModel.d.ts +5 -1
  129. package/dist/model/DataModel.js +10 -1
  130. package/dist/model/DataModel.js.map +1 -1
  131. package/dist/model/DialogQueue.d.ts +1 -1
  132. package/dist/model/DialogQueue.js +0 -1
  133. package/dist/model/DialogQueue.js.map +1 -1
  134. package/dist/model.d.ts +187 -35
  135. package/dist/model.js +317 -94
  136. package/dist/model.js.map +1 -1
  137. package/dist/parseGFF.js +8 -6
  138. package/dist/parseGFF.js.map +1 -1
  139. package/dist/parseNewick.js +1 -2
  140. package/dist/parseNewick.js.map +1 -1
  141. package/dist/parsers/ClustalMSA.d.ts +2 -2
  142. package/dist/parsers/ClustalMSA.js.map +1 -1
  143. package/dist/parsers/FastaMSA.d.ts +1 -1
  144. package/dist/parsers/FastaMSA.js +3 -3
  145. package/dist/parsers/FastaMSA.js.map +1 -1
  146. package/dist/parsers/StockholmMSA.d.ts +7 -7
  147. package/dist/parsers/StockholmMSA.js +4 -4
  148. package/dist/parsers/StockholmMSA.js.map +1 -1
  149. package/dist/renderToSvg.d.ts +2 -2
  150. package/dist/renderToSvg.js +6 -11
  151. package/dist/renderToSvg.js.map +1 -1
  152. package/dist/reparseTree.d.ts +1 -1
  153. package/dist/rowCoordinateCalculations.d.ts +2 -0
  154. package/dist/rowCoordinateCalculations.js +26 -0
  155. package/dist/rowCoordinateCalculations.js.map +1 -0
  156. package/dist/rowCoordinateCalculations.test.d.ts +1 -0
  157. package/dist/rowCoordinateCalculations.test.js +18 -0
  158. package/dist/rowCoordinateCalculations.test.js.map +1 -0
  159. package/dist/util.d.ts +2 -2
  160. package/dist/util.js +0 -2
  161. package/dist/util.js.map +1 -1
  162. package/dist/version.d.ts +1 -1
  163. package/dist/version.js +1 -1
  164. package/dist/version.js.map +1 -1
  165. package/package.json +10 -3
  166. package/src/colorSchemes.ts +7 -6
  167. package/src/components/Checkbox2.tsx +1 -1
  168. package/src/components/Loading.tsx +18 -6
  169. package/src/components/MSAView.tsx +27 -18
  170. package/src/components/ResizeHandles.tsx +9 -5
  171. package/src/components/SequenceTextArea.tsx +10 -4
  172. package/src/components/TextTrack.tsx +3 -3
  173. package/src/components/Track.tsx +9 -5
  174. package/src/components/VerticalScrollbar.tsx +89 -0
  175. package/src/components/dialogs/AboutDialog.tsx +7 -1
  176. package/src/components/dialogs/AddTrackDialog.tsx +15 -5
  177. package/src/components/dialogs/DomainDialog.tsx +12 -5
  178. package/src/components/dialogs/ExportSVGDialog.tsx +37 -18
  179. package/src/components/dialogs/FeatureDialog.tsx +10 -8
  180. package/src/components/dialogs/{InterProScanPanel.tsx → InterProScanDialog.tsx} +30 -13
  181. package/src/components/dialogs/MetadataDialog.tsx +9 -2
  182. package/src/components/dialogs/SettingsDialog.tsx +98 -19
  183. package/src/components/dialogs/TracklistDialog.tsx +18 -4
  184. package/src/components/dialogs/UserProvidedDomainsDialog.tsx +139 -0
  185. package/src/components/header/Header.tsx +12 -5
  186. package/src/components/header/HeaderInfoArea.tsx +4 -3
  187. package/src/components/header/HeaderMenu.tsx +13 -8
  188. package/src/components/header/HeaderMenuExtra.tsx +59 -43
  189. package/src/components/header/HeaderStatusArea.tsx +2 -6
  190. package/src/components/header/MultiAlignmentSelector.tsx +1 -1
  191. package/src/components/header/ZoomControls.tsx +52 -2
  192. package/src/components/import/ImportForm.tsx +16 -4
  193. package/src/components/import/ImportFormExamples.tsx +77 -64
  194. package/src/components/import/util.ts +2 -2
  195. package/src/components/minimap/Minimap.tsx +34 -29
  196. package/src/components/minimap/MinimapSVG.tsx +2 -2
  197. package/src/components/msa/MSACanvas.tsx +11 -4
  198. package/src/components/msa/MSACanvasBlock.tsx +10 -7
  199. package/src/components/msa/MSAMouseoverCanvas.tsx +1 -1
  200. package/src/components/msa/MSAPanel.tsx +1 -1
  201. package/src/components/msa/renderBoxFeatureCanvasBlock.ts +8 -9
  202. package/src/components/msa/renderMSABlock.ts +44 -24
  203. package/src/components/msa/renderMSAMouseover.ts +4 -4
  204. package/src/components/tree/TreeBranchMenu.tsx +6 -4
  205. package/src/components/tree/TreeCanvas.tsx +15 -16
  206. package/src/components/tree/TreeCanvasBlock.tsx +14 -6
  207. package/src/components/tree/TreeNodeMenu.tsx +4 -4
  208. package/src/components/tree/TreePanel.tsx +1 -1
  209. package/src/components/tree/TreeRuler.tsx +1 -1
  210. package/src/components/tree/dialogs/TreeNodeInfoDialog.tsx +12 -3
  211. package/src/components/tree/renderTreeCanvas.ts +32 -12
  212. package/src/components/util.ts +2 -5
  213. package/src/ggplotPalettes.ts +1 -1
  214. package/src/launchInterProScan.ts +13 -15
  215. package/src/model/DataModel.ts +10 -0
  216. package/src/model/DialogQueue.ts +1 -2
  217. package/src/model.ts +355 -112
  218. package/src/parseGFF.ts +13 -11
  219. package/src/parseNewick.ts +4 -4
  220. package/src/parsers/ClustalMSA.ts +3 -3
  221. package/src/parsers/FastaMSA.ts +5 -5
  222. package/src/parsers/StockholmMSA.ts +11 -11
  223. package/src/renderToSvg.tsx +7 -8
  224. package/src/reparseTree.ts +1 -1
  225. package/src/rowCoordinateCalculations.test.ts +19 -0
  226. package/src/rowCoordinateCalculations.ts +26 -0
  227. package/src/util.ts +2 -4
  228. package/src/version.ts +1 -1
  229. package/dist/components/dialogs/InterProScanPanel.js.map +0 -1
  230. package/dist/components/dialogs/UserProvidedResultPanel.d.ts +0 -7
  231. package/dist/components/dialogs/UserProvidedResultPanel.js +0 -56
  232. package/dist/components/dialogs/UserProvidedResultPanel.js.map +0 -1
  233. package/src/components/dialogs/UserProvidedResultPanel.tsx +0 -119
package/src/parseGFF.ts CHANGED
@@ -8,23 +8,25 @@ export function parseGFF(str?: string) {
8
8
  f.split('\t')
9
9
 
10
10
  return {
11
- seq_id,
12
- source,
13
- type,
14
- start: +start,
15
- end: +end,
16
- score: +score,
17
- strand,
18
- phase,
11
+ seq_id: seq_id!,
12
+ source: source!,
13
+ type: type!,
14
+ start: +start!,
15
+ end: +end!,
16
+ score: +score!,
17
+ strand: strand!,
18
+ phase: phase!,
19
19
  ...Object.fromEntries(
20
- col9
20
+ col9!
21
21
  .split(';')
22
22
  .map(f => f.trim())
23
23
  .filter(f => !!f)
24
24
  .map(f => f.split('='))
25
25
  .map(([key, val]) => [
26
- key.trim(),
27
- decodeURIComponent(val).trim().split(',').join(' '),
26
+ key!.trim(),
27
+ val
28
+ ? decodeURIComponent(val).trim().split(',').join(' ')
29
+ : undefined,
28
30
  ]),
29
31
  ),
30
32
  }
@@ -59,11 +59,11 @@
59
59
  */
60
60
  export default function parse(s: string) {
61
61
  const ancestors = []
62
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
62
+
63
63
  let tree = {} as Record<string, any>
64
64
  const tokens = s.split(/\s*(;|\(|\)|,|:)\s*/)
65
65
  for (let i = 0; i < tokens.length; i++) {
66
- const token = tokens[i]
66
+ const token = tokens[i]!
67
67
  const subtree = {}
68
68
  switch (token) {
69
69
  case '(': // new branchset
@@ -81,11 +81,11 @@ export default function parse(s: string) {
81
81
  case ':': // optional length next
82
82
  break
83
83
  default: {
84
- const x = tokens[i - 1]
84
+ const x = tokens[i - 1]!
85
85
  if (x === ')' || x === '(' || x === ',') {
86
86
  tree.name = token
87
87
  } else if (x === ':') {
88
- tree.length = parseFloat(token)
88
+ tree.length = Number.parseFloat(token)
89
89
  }
90
90
  }
91
91
  }
@@ -1,5 +1,5 @@
1
1
  import { parse } from 'clustal-js'
2
- import { NodeWithIds } from '../util'
2
+ import type { NodeWithIds } from '../util'
3
3
  export default class ClustalMSA {
4
4
  private MSA: ReturnType<typeof parse>
5
5
 
@@ -11,12 +11,12 @@ export default class ClustalMSA {
11
11
  return this.MSA
12
12
  }
13
13
 
14
- getRow(name: string) {
14
+ getRow(name: string): string {
15
15
  return this.MSA.alns.find(aln => aln.id === name)?.seq || ''
16
16
  }
17
17
 
18
18
  getWidth() {
19
- return this.MSA.alns[0].seq.length
19
+ return this.MSA.alns[0]!.seq.length
20
20
  }
21
21
 
22
22
  getRowData() {
@@ -1,4 +1,4 @@
1
- import { NodeWithIds } from '../util'
1
+ import type { NodeWithIds } from '../util'
2
2
 
3
3
  function parseSmallFasta(text: string) {
4
4
  return text
@@ -6,7 +6,7 @@ function parseSmallFasta(text: string) {
6
6
  .filter(t => /\S/.test(t))
7
7
  .map(entryText => {
8
8
  const [defLine, ...seqLines] = entryText.split('\n')
9
- const [id, ...description] = defLine.split(' ')
9
+ const [id, ...description] = defLine!.split(' ')
10
10
  const descriptionStr = description.join(' ')
11
11
  const seqLinesStr = seqLines.join('')
12
12
  const sequence = seqLinesStr.replaceAll(/\s/g, '')
@@ -18,7 +18,7 @@ export default class FastaMSA {
18
18
  constructor(text: string) {
19
19
  this.MSA = {
20
20
  seqdata: Object.fromEntries(
21
- parseSmallFasta(text).map(m => [`${m.id}`, m.sequence]),
21
+ parseSmallFasta(text).map(m => [m.id, m.sequence]),
22
22
  ),
23
23
  }
24
24
  }
@@ -36,11 +36,11 @@ export default class FastaMSA {
36
36
  }
37
37
 
38
38
  getRow(name: string) {
39
- return this.MSA?.seqdata[name] || ''
39
+ return this.MSA.seqdata[name] || ''
40
40
  }
41
41
 
42
42
  getWidth() {
43
- const name = Object.keys(this.MSA?.seqdata)[0]
43
+ const name = Object.keys(this.MSA.seqdata)[0]!
44
44
  return this.getRow(name).length
45
45
  }
46
46
 
@@ -1,15 +1,15 @@
1
1
  import Stockholm from 'stockholm-js'
2
2
  import parseNewick from '../parseNewick'
3
3
 
4
- import { NodeWithIds, generateNodeIds } from '../util'
4
+ import { type NodeWithIds, generateNodeIds } from '../util'
5
5
  interface StockholmEntry {
6
6
  gf: {
7
7
  DE?: string[]
8
8
  NH?: string[]
9
9
  }
10
- gs: {
10
+ gs?: {
11
11
  AC: Record<string, string>
12
- DR: Record<string, string>
12
+ DR?: Record<string, string>
13
13
  }
14
14
  gc?: {
15
15
  SS_cons?: string
@@ -33,11 +33,11 @@ export default class StockholmMSA {
33
33
  }
34
34
 
35
35
  getRow(name: string) {
36
- return this.MSA?.seqdata[name] || ''
36
+ return this.MSA.seqdata[name] || ''
37
37
  }
38
38
 
39
39
  getWidth() {
40
- const name = Object.keys(this.MSA?.seqdata)[0]
40
+ const name = Object.keys(this.MSA.seqdata)[0]!
41
41
  return this.getRow(name).length
42
42
  }
43
43
 
@@ -56,7 +56,7 @@ export default class StockholmMSA {
56
56
  getRowData(rowName: string) {
57
57
  return {
58
58
  name: rowName,
59
- accession: this.MSA.gs?.AC?.[rowName],
59
+ accession: this.MSA.gs?.AC[rowName],
60
60
  dbxref: this.MSA.gs?.DR?.[rowName],
61
61
  }
62
62
  }
@@ -74,10 +74,10 @@ export default class StockholmMSA {
74
74
  .map(([id, dr]) => [id, pdbRegex.exec(dr)] as const)
75
75
  .filter((item): item is [string, RegExpExecArray] => !!item[1])
76
76
  .map(([id, match]) => {
77
- const pdb = match[1].toLowerCase()
78
- const chain = match[2]
79
- const startPos = +match[3]
80
- const endPos = +match[4]
77
+ const pdb = match[1]!.toLowerCase()
78
+ const chain = match[2]!
79
+ const startPos = +match[3]!
80
+ const endPos = +match[4]!
81
81
  return { id, pdb, chain, startPos, endPos }
82
82
  })
83
83
 
@@ -93,7 +93,7 @@ export default class StockholmMSA {
93
93
  }
94
94
 
95
95
  getTree(): NodeWithIds {
96
- const tree = this.MSA?.gf?.NH?.[0]
96
+ const tree = this.MSA.gf.NH?.[0]
97
97
  return tree
98
98
  ? generateNodeIds(parseNewick(tree))
99
99
  : {
@@ -1,11 +1,12 @@
1
+ /* eslint-disable react-refresh/only-export-components */
1
2
  import React from 'react'
2
3
  import { createRoot } from 'react-dom/client'
3
4
  import { when } from 'mobx'
4
5
  import { renderToStaticMarkup } from '@jbrowse/core/util'
5
- import { Theme } from '@mui/material'
6
+ import type { Theme } from '@mui/material'
6
7
 
7
8
  // locals
8
- import { MsaViewModel } from './model'
9
+ import type { MsaViewModel } from './model'
9
10
  import { renderTreeCanvas } from './components/tree/renderTreeCanvas'
10
11
  import { renderMSABlock } from './components/msa/renderMSABlock'
11
12
  import { colorContrast } from './util'
@@ -17,7 +18,7 @@ export async function renderToSvg(
17
18
  model: MsaViewModel,
18
19
  opts: { theme: Theme; includeMinimap?: boolean; exportType: string },
19
20
  ) {
20
- await when(() => !!model.initialized)
21
+ await when(() => !!model.dataInitialized)
21
22
  const { width, height, scrollX, scrollY } = model
22
23
  const { exportType, theme, includeMinimap } = opts
23
24
 
@@ -31,7 +32,8 @@ export async function renderToSvg(
31
32
  offsetX: 0,
32
33
  includeMinimap,
33
34
  })
34
- } else if (exportType === 'viewport') {
35
+ }
36
+ if (exportType === 'viewport') {
35
37
  return render({
36
38
  width,
37
39
  height,
@@ -41,9 +43,8 @@ export async function renderToSvg(
41
43
  offsetX: -scrollX,
42
44
  includeMinimap,
43
45
  })
44
- } else {
45
- throw new Error('unknown export type')
46
46
  }
47
+ throw new Error('unknown export type')
47
48
  }
48
49
 
49
50
  async function render({
@@ -153,13 +154,11 @@ function CoreRendering({
153
154
 
154
155
  <g
155
156
  clipPath={`url(#${clipId1})`}
156
- /* eslint-disable-next-line react/no-danger */
157
157
  dangerouslySetInnerHTML={{ __html: ctx1.getSvg().innerHTML }}
158
158
  />
159
159
  <g
160
160
  clipPath={`url(#${clipId2})`}
161
161
  transform={`translate(${treeAreaWidth} 0)`}
162
- /* eslint-disable-next-line react/no-danger */
163
162
  dangerouslySetInnerHTML={{ __html: ctx2.getSvg().innerHTML }}
164
163
  />
165
164
  </>
@@ -1,4 +1,4 @@
1
- import { NodeWithIds } from './util'
1
+ import type { NodeWithIds } from './util'
2
2
 
3
3
  export function reparseTree(tree: NodeWithIds): NodeWithIds {
4
4
  return {
@@ -0,0 +1,19 @@
1
+ import { expect, test } from 'vitest'
2
+ import { mouseOverCoordToGlobalCoord } from './rowCoordinateCalculations'
3
+ test('blanks3', () => {
4
+ const blanks = [2, 5, 8]
5
+ ;(
6
+ [
7
+ [0, 0],
8
+ [1, 1],
9
+ [2, 3],
10
+ [3, 4],
11
+ [4, 6],
12
+ [5, 7],
13
+ [6, 9],
14
+ [7, 10],
15
+ ] as const
16
+ ).forEach(r => {
17
+ expect(mouseOverCoordToGlobalCoord(blanks, r[0])).toBe(r[1])
18
+ })
19
+ })
@@ -0,0 +1,26 @@
1
+ export function mouseOverCoordToGlobalCoord(blanks: number[], pos: number) {
2
+ let i = 0 // 'mouse over coord'
3
+ let j = 0 // 'position in blanks array'
4
+ let k = 0 // 'global coord'/return value
5
+
6
+ for (; i < pos; i++, k++) {
7
+ // skip multiple gaps in a row
8
+ while (j < blanks.length && blanks[j]! - 1 === k) {
9
+ j++
10
+ k++
11
+ }
12
+ }
13
+ return k
14
+ }
15
+
16
+ export function globalCoordToRowSpecificCoord(seq: string, pos: number) {
17
+ let k = 0
18
+ for (let i = 0; i < pos; i++) {
19
+ if (seq[i] !== '-') {
20
+ k++
21
+ } else if (k >= pos) {
22
+ break
23
+ }
24
+ }
25
+ return k
26
+ }
package/src/util.ts CHANGED
@@ -1,6 +1,6 @@
1
- import { HierarchyNode } from 'd3-hierarchy'
1
+ import type { HierarchyNode } from 'd3-hierarchy'
2
2
  import { max } from 'd3-array'
3
- import { Theme } from '@mui/material'
3
+ import type { Theme } from '@mui/material'
4
4
  import { colord, extend } from 'colord'
5
5
  import namesPlugin from 'colord/plugins/names'
6
6
 
@@ -106,8 +106,6 @@ export function collapse(d: HierarchyNode<NodeWithIds>) {
106
106
  // @ts-expect-error
107
107
  d._children = d.children
108
108
  // @ts-expect-error
109
- d._children.forEach(collapse)
110
- // @ts-expect-error
111
109
  d.children = null
112
110
  }
113
111
  }
package/src/version.ts CHANGED
@@ -1 +1 @@
1
- export const version = '3.1.12'
1
+ export const version = '3.2.1'
@@ -1 +0,0 @@
1
- {"version":3,"file":"InterProScanPanel.js","sourceRoot":"","sources":["../../../src/components/dialogs/InterProScanPanel.tsx"],"names":[],"mappings":"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"}
@@ -1,7 +0,0 @@
1
- import React from 'react';
2
- import { MsaViewModel } from '../../model';
3
- declare const FeatureTypeDialog: ({ handleClose, model, }: {
4
- handleClose: () => void;
5
- model: MsaViewModel;
6
- }) => React.JSX.Element;
7
- export default FeatureTypeDialog;
@@ -1,56 +0,0 @@
1
- import React, { useState } from 'react';
2
- import { observer } from 'mobx-react';
3
- import { Button, DialogActions, DialogContent, FormControlLabel, FormControl, Radio, RadioGroup, TextField, Typography, } from '@mui/material';
4
- import { getSession } from '@jbrowse/core/util';
5
- import { jsonfetch } from '../../fetchUtils';
6
- const FeatureTypeDialog = observer(function ({ handleClose, model, }) {
7
- const [file, setFile] = useState();
8
- const [choice, setChoice] = useState('file');
9
- const [interProURL, setInterProURL] = useState('');
10
- return (React.createElement(React.Fragment, null,
11
- React.createElement(DialogContent, null,
12
- React.createElement("div", { style: { display: 'flex', margin: 30 } },
13
- React.createElement(Typography, null, "Open a JSON file of InterProScan results that you run remotely on EBI servers or locally"),
14
- React.createElement(FormControl, { component: "fieldset" },
15
- React.createElement(RadioGroup, { value: choice, onChange: event => setChoice(event.target.value) },
16
- React.createElement(FormControlLabel, { value: "url", control: React.createElement(Radio, null), label: "URL" }),
17
- React.createElement(FormControlLabel, { value: "file", control: React.createElement(Radio, null), label: "File" }))),
18
- choice === 'url' ? (React.createElement("div", null,
19
- React.createElement(Typography, null, "Open a InterProScan JSON file remote URL"),
20
- React.createElement(TextField, { label: "URL", value: interProURL, onChange: event => setInterProURL(event.target.value) }))) : null,
21
- choice === 'file' ? (React.createElement("div", { style: { paddingTop: 20 } },
22
- React.createElement(Typography, null, "Open a InterProScan JSON file file from your local drive"),
23
- React.createElement(Button, { variant: "outlined", component: "label" },
24
- "Choose File",
25
- React.createElement("input", { type: "file", hidden: true, onChange: ({ target }) => {
26
- const file = target?.files?.[0];
27
- if (file) {
28
- setFile(file);
29
- }
30
- } })))) : null)),
31
- React.createElement(DialogActions, null,
32
- React.createElement(Button, { variant: "contained", color: "primary", onClick: () => {
33
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
34
- ;
35
- (async () => {
36
- try {
37
- const ret = file
38
- ? JSON.parse(await file.text())
39
- : await jsonfetch(interProURL);
40
- model.setLoadedInterProAnnotations(Object.fromEntries(ret.results.map(r => [r.xref[0].id, r])));
41
- model.setShowDomains(true);
42
- getSession(model).notify('Loaded interproscan results', 'success');
43
- }
44
- catch (e) {
45
- console.error(e);
46
- getSession(model).notifyError(`${e}`, e);
47
- }
48
- finally {
49
- model.setStatus();
50
- }
51
- })();
52
- handleClose();
53
- } }, "Open results"))));
54
- });
55
- export default FeatureTypeDialog;
56
- //# sourceMappingURL=UserProvidedResultPanel.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"UserProvidedResultPanel.js","sourceRoot":"","sources":["../../../src/components/dialogs/UserProvidedResultPanel.tsx"],"names":[],"mappings":"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"}
@@ -1,119 +0,0 @@
1
- import React, { useState } from 'react'
2
- import { observer } from 'mobx-react'
3
- import {
4
- Button,
5
- DialogActions,
6
- DialogContent,
7
- FormControlLabel,
8
- FormControl,
9
- Radio,
10
- RadioGroup,
11
- TextField,
12
- Typography,
13
- } from '@mui/material'
14
- import { getSession } from '@jbrowse/core/util'
15
-
16
- // locals
17
- import { MsaViewModel } from '../../model'
18
- import { jsonfetch } from '../../fetchUtils'
19
- import { InterProScanResponse } from '../../launchInterProScan'
20
-
21
- const FeatureTypeDialog = observer(function ({
22
- handleClose,
23
- model,
24
- }: {
25
- handleClose: () => void
26
- model: MsaViewModel
27
- }) {
28
- const [file, setFile] = useState<File>()
29
- const [choice, setChoice] = useState('file')
30
- const [interProURL, setInterProURL] = useState('')
31
-
32
- return (
33
- <>
34
- <DialogContent>
35
- <div style={{ display: 'flex', margin: 30 }}>
36
- <Typography>
37
- Open a JSON file of InterProScan results that you run remotely on
38
- EBI servers or locally
39
- </Typography>
40
-
41
- <FormControl component="fieldset">
42
- <RadioGroup
43
- value={choice}
44
- onChange={event => setChoice(event.target.value)}
45
- >
46
- <FormControlLabel value="url" control={<Radio />} label="URL" />
47
- <FormControlLabel value="file" control={<Radio />} label="File" />
48
- </RadioGroup>
49
- </FormControl>
50
- {choice === 'url' ? (
51
- <div>
52
- <Typography>Open a InterProScan JSON file remote URL</Typography>
53
- <TextField
54
- label="URL"
55
- value={interProURL}
56
- onChange={event => setInterProURL(event.target.value)}
57
- />
58
- </div>
59
- ) : null}
60
- {choice === 'file' ? (
61
- <div style={{ paddingTop: 20 }}>
62
- <Typography>
63
- Open a InterProScan JSON file file from your local drive
64
- </Typography>
65
- <Button variant="outlined" component="label">
66
- Choose File
67
- <input
68
- type="file"
69
- hidden
70
- onChange={({ target }) => {
71
- const file = target?.files?.[0]
72
- if (file) {
73
- setFile(file)
74
- }
75
- }}
76
- />
77
- </Button>
78
- </div>
79
- ) : null}
80
- </div>
81
- </DialogContent>
82
- <DialogActions>
83
- <Button
84
- variant="contained"
85
- color="primary"
86
- onClick={() => {
87
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
88
- ;(async () => {
89
- try {
90
- const ret: InterProScanResponse = file
91
- ? JSON.parse(await file.text())
92
- : await jsonfetch(interProURL)
93
-
94
- model.setLoadedInterProAnnotations(
95
- Object.fromEntries(ret.results.map(r => [r.xref[0].id, r])),
96
- )
97
- model.setShowDomains(true)
98
- getSession(model).notify(
99
- 'Loaded interproscan results',
100
- 'success',
101
- )
102
- } catch (e) {
103
- console.error(e)
104
- getSession(model).notifyError(`${e}`, e)
105
- } finally {
106
- model.setStatus()
107
- }
108
- })()
109
- handleClose()
110
- }}
111
- >
112
- Open results
113
- </Button>
114
- </DialogActions>
115
- </>
116
- )
117
- })
118
-
119
- export default FeatureTypeDialog