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.
- package/bundle/index.js +32 -31
- package/dist/colorSchemes.d.ts +2 -2
- package/dist/colorSchemes.js +5 -6
- package/dist/colorSchemes.js.map +1 -1
- package/dist/components/Loading.d.ts +1 -1
- package/dist/components/Loading.js +7 -5
- package/dist/components/Loading.js.map +1 -1
- package/dist/components/MSAView.d.ts +1 -1
- package/dist/components/MSAView.js +13 -9
- package/dist/components/MSAView.js.map +1 -1
- package/dist/components/ResizeHandles.d.ts +1 -1
- package/dist/components/ResizeHandles.js +8 -4
- package/dist/components/ResizeHandles.js.map +1 -1
- package/dist/components/SequenceTextArea.js +9 -3
- package/dist/components/SequenceTextArea.js.map +1 -1
- package/dist/components/TextTrack.d.ts +1 -1
- package/dist/components/TextTrack.js +1 -1
- package/dist/components/TextTrack.js.map +1 -1
- package/dist/components/Track.d.ts +1 -1
- package/dist/components/Track.js +6 -2
- package/dist/components/Track.js.map +1 -1
- package/dist/components/VerticalScrollbar.d.ts +6 -0
- package/dist/components/VerticalScrollbar.js +69 -0
- package/dist/components/VerticalScrollbar.js.map +1 -0
- package/dist/components/dialogs/AboutDialog.js +3 -1
- package/dist/components/dialogs/AboutDialog.js.map +1 -1
- package/dist/components/dialogs/AddTrackDialog.d.ts +3 -3
- package/dist/components/dialogs/AddTrackDialog.js +8 -3
- package/dist/components/dialogs/AddTrackDialog.js.map +1 -1
- package/dist/components/dialogs/DomainDialog.d.ts +1 -1
- package/dist/components/dialogs/DomainDialog.js +8 -4
- package/dist/components/dialogs/DomainDialog.js.map +1 -1
- package/dist/components/dialogs/ExportSVGDialog.d.ts +1 -1
- package/dist/components/dialogs/ExportSVGDialog.js +29 -17
- package/dist/components/dialogs/ExportSVGDialog.js.map +1 -1
- package/dist/components/dialogs/FeatureDialog.d.ts +1 -1
- package/dist/components/dialogs/FeatureDialog.js +8 -4
- package/dist/components/dialogs/FeatureDialog.js.map +1 -1
- package/dist/components/dialogs/{InterProScanPanel.d.ts → InterProScanDialog.d.ts} +1 -1
- package/dist/components/dialogs/{InterProScanPanel.js → InterProScanDialog.js} +26 -11
- package/dist/components/dialogs/InterProScanDialog.js.map +1 -0
- package/dist/components/dialogs/MetadataDialog.d.ts +1 -1
- package/dist/components/dialogs/MetadataDialog.js +3 -1
- package/dist/components/dialogs/MetadataDialog.js.map +1 -1
- package/dist/components/dialogs/SettingsDialog.d.ts +1 -1
- package/dist/components/dialogs/SettingsDialog.js +62 -15
- package/dist/components/dialogs/SettingsDialog.js.map +1 -1
- package/dist/components/dialogs/TracklistDialog.d.ts +3 -3
- package/dist/components/dialogs/TracklistDialog.js +8 -3
- package/dist/components/dialogs/TracklistDialog.js.map +1 -1
- package/dist/components/dialogs/UserProvidedDomainsDialog.d.ts +7 -0
- package/dist/components/dialogs/UserProvidedDomainsDialog.js +64 -0
- package/dist/components/dialogs/UserProvidedDomainsDialog.js.map +1 -0
- package/dist/components/header/Header.d.ts +1 -1
- package/dist/components/header/Header.js +11 -4
- package/dist/components/header/Header.js.map +1 -1
- package/dist/components/header/HeaderInfoArea.d.ts +1 -1
- package/dist/components/header/HeaderInfoArea.js +5 -2
- package/dist/components/header/HeaderInfoArea.js.map +1 -1
- package/dist/components/header/HeaderMenu.d.ts +1 -1
- package/dist/components/header/HeaderMenu.js +12 -4
- package/dist/components/header/HeaderMenu.js.map +1 -1
- package/dist/components/header/HeaderMenuExtra.d.ts +1 -1
- package/dist/components/header/HeaderMenuExtra.js +55 -35
- package/dist/components/header/HeaderMenuExtra.js.map +1 -1
- package/dist/components/header/HeaderStatusArea.d.ts +2 -2
- package/dist/components/header/HeaderStatusArea.js +1 -1
- package/dist/components/header/HeaderStatusArea.js.map +1 -1
- package/dist/components/header/MultiAlignmentSelector.d.ts +1 -1
- package/dist/components/header/ZoomControls.js +45 -3
- package/dist/components/header/ZoomControls.js.map +1 -1
- package/dist/components/import/ImportForm.d.ts +3 -3
- package/dist/components/import/ImportForm.js +15 -2
- package/dist/components/import/ImportForm.js.map +1 -1
- package/dist/components/import/ImportFormExamples.d.ts +1 -1
- package/dist/components/import/ImportFormExamples.js +53 -38
- package/dist/components/import/ImportFormExamples.js.map +1 -1
- package/dist/components/import/util.d.ts +2 -2
- package/dist/components/minimap/Minimap.d.ts +1 -1
- package/dist/components/minimap/Minimap.js +24 -17
- package/dist/components/minimap/Minimap.js.map +1 -1
- package/dist/components/minimap/MinimapSVG.d.ts +1 -1
- package/dist/components/minimap/MinimapSVG.js +1 -1
- package/dist/components/minimap/MinimapSVG.js.map +1 -1
- package/dist/components/msa/MSACanvas.d.ts +1 -1
- package/dist/components/msa/MSACanvas.js +3 -3
- package/dist/components/msa/MSACanvas.js.map +1 -1
- package/dist/components/msa/MSACanvasBlock.d.ts +3 -3
- package/dist/components/msa/MSACanvasBlock.js +9 -6
- package/dist/components/msa/MSACanvasBlock.js.map +1 -1
- package/dist/components/msa/MSAMouseoverCanvas.d.ts +1 -1
- package/dist/components/msa/MSAPanel.d.ts +1 -1
- package/dist/components/msa/renderBoxFeatureCanvasBlock.d.ts +1 -1
- package/dist/components/msa/renderBoxFeatureCanvasBlock.js +3 -4
- package/dist/components/msa/renderBoxFeatureCanvasBlock.js.map +1 -1
- package/dist/components/msa/renderMSABlock.d.ts +2 -2
- package/dist/components/msa/renderMSABlock.js +16 -16
- package/dist/components/msa/renderMSABlock.js.map +1 -1
- package/dist/components/msa/renderMSAMouseover.d.ts +1 -1
- package/dist/components/msa/renderMSAMouseover.js +3 -3
- package/dist/components/msa/renderMSAMouseover.js.map +1 -1
- package/dist/components/tree/TreeBranchMenu.d.ts +1 -1
- package/dist/components/tree/TreeBranchMenu.js +6 -3
- package/dist/components/tree/TreeBranchMenu.js.map +1 -1
- package/dist/components/tree/TreeCanvas.d.ts +1 -1
- package/dist/components/tree/TreeCanvas.js +13 -12
- package/dist/components/tree/TreeCanvas.js.map +1 -1
- package/dist/components/tree/TreeCanvasBlock.d.ts +1 -1
- package/dist/components/tree/TreeCanvasBlock.js +13 -5
- package/dist/components/tree/TreeCanvasBlock.js.map +1 -1
- package/dist/components/tree/TreeNodeMenu.d.ts +1 -1
- package/dist/components/tree/TreeNodeMenu.js +3 -3
- package/dist/components/tree/TreeNodeMenu.js.map +1 -1
- package/dist/components/tree/TreePanel.d.ts +1 -1
- package/dist/components/tree/TreeRuler.d.ts +1 -1
- package/dist/components/tree/dialogs/TreeNodeInfoDialog.d.ts +3 -3
- package/dist/components/tree/dialogs/TreeNodeInfoDialog.js +5 -2
- package/dist/components/tree/dialogs/TreeNodeInfoDialog.js.map +1 -1
- package/dist/components/tree/renderTreeCanvas.d.ts +3 -3
- package/dist/components/tree/renderTreeCanvas.js +25 -9
- package/dist/components/tree/renderTreeCanvas.js.map +1 -1
- package/dist/components/util.js +1 -4
- package/dist/components/util.js.map +1 -1
- package/dist/ggplotPalettes.js.map +1 -1
- package/dist/launchInterProScan.d.ts +1 -1
- package/dist/launchInterProScan.js +11 -13
- package/dist/launchInterProScan.js.map +1 -1
- package/dist/model/DataModel.d.ts +5 -1
- package/dist/model/DataModel.js +10 -1
- package/dist/model/DataModel.js.map +1 -1
- package/dist/model/DialogQueue.d.ts +1 -1
- package/dist/model/DialogQueue.js +0 -1
- package/dist/model/DialogQueue.js.map +1 -1
- package/dist/model.d.ts +187 -35
- package/dist/model.js +317 -94
- package/dist/model.js.map +1 -1
- package/dist/parseGFF.js +8 -6
- package/dist/parseGFF.js.map +1 -1
- package/dist/parseNewick.js +1 -2
- package/dist/parseNewick.js.map +1 -1
- package/dist/parsers/ClustalMSA.d.ts +2 -2
- package/dist/parsers/ClustalMSA.js.map +1 -1
- package/dist/parsers/FastaMSA.d.ts +1 -1
- package/dist/parsers/FastaMSA.js +3 -3
- package/dist/parsers/FastaMSA.js.map +1 -1
- package/dist/parsers/StockholmMSA.d.ts +7 -7
- package/dist/parsers/StockholmMSA.js +4 -4
- package/dist/parsers/StockholmMSA.js.map +1 -1
- package/dist/renderToSvg.d.ts +2 -2
- package/dist/renderToSvg.js +6 -11
- package/dist/renderToSvg.js.map +1 -1
- package/dist/reparseTree.d.ts +1 -1
- package/dist/rowCoordinateCalculations.d.ts +2 -0
- package/dist/rowCoordinateCalculations.js +26 -0
- package/dist/rowCoordinateCalculations.js.map +1 -0
- package/dist/rowCoordinateCalculations.test.d.ts +1 -0
- package/dist/rowCoordinateCalculations.test.js +18 -0
- package/dist/rowCoordinateCalculations.test.js.map +1 -0
- package/dist/util.d.ts +2 -2
- package/dist/util.js +0 -2
- package/dist/util.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/version.js.map +1 -1
- package/package.json +10 -3
- package/src/colorSchemes.ts +7 -6
- package/src/components/Checkbox2.tsx +1 -1
- package/src/components/Loading.tsx +18 -6
- package/src/components/MSAView.tsx +27 -18
- package/src/components/ResizeHandles.tsx +9 -5
- package/src/components/SequenceTextArea.tsx +10 -4
- package/src/components/TextTrack.tsx +3 -3
- package/src/components/Track.tsx +9 -5
- package/src/components/VerticalScrollbar.tsx +89 -0
- package/src/components/dialogs/AboutDialog.tsx +7 -1
- package/src/components/dialogs/AddTrackDialog.tsx +15 -5
- package/src/components/dialogs/DomainDialog.tsx +12 -5
- package/src/components/dialogs/ExportSVGDialog.tsx +37 -18
- package/src/components/dialogs/FeatureDialog.tsx +10 -8
- package/src/components/dialogs/{InterProScanPanel.tsx → InterProScanDialog.tsx} +30 -13
- package/src/components/dialogs/MetadataDialog.tsx +9 -2
- package/src/components/dialogs/SettingsDialog.tsx +98 -19
- package/src/components/dialogs/TracklistDialog.tsx +18 -4
- package/src/components/dialogs/UserProvidedDomainsDialog.tsx +139 -0
- package/src/components/header/Header.tsx +12 -5
- package/src/components/header/HeaderInfoArea.tsx +4 -3
- package/src/components/header/HeaderMenu.tsx +13 -8
- package/src/components/header/HeaderMenuExtra.tsx +59 -43
- package/src/components/header/HeaderStatusArea.tsx +2 -6
- package/src/components/header/MultiAlignmentSelector.tsx +1 -1
- package/src/components/header/ZoomControls.tsx +52 -2
- package/src/components/import/ImportForm.tsx +16 -4
- package/src/components/import/ImportFormExamples.tsx +77 -64
- package/src/components/import/util.ts +2 -2
- package/src/components/minimap/Minimap.tsx +34 -29
- package/src/components/minimap/MinimapSVG.tsx +2 -2
- package/src/components/msa/MSACanvas.tsx +11 -4
- package/src/components/msa/MSACanvasBlock.tsx +10 -7
- package/src/components/msa/MSAMouseoverCanvas.tsx +1 -1
- package/src/components/msa/MSAPanel.tsx +1 -1
- package/src/components/msa/renderBoxFeatureCanvasBlock.ts +8 -9
- package/src/components/msa/renderMSABlock.ts +44 -24
- package/src/components/msa/renderMSAMouseover.ts +4 -4
- package/src/components/tree/TreeBranchMenu.tsx +6 -4
- package/src/components/tree/TreeCanvas.tsx +15 -16
- package/src/components/tree/TreeCanvasBlock.tsx +14 -6
- package/src/components/tree/TreeNodeMenu.tsx +4 -4
- package/src/components/tree/TreePanel.tsx +1 -1
- package/src/components/tree/TreeRuler.tsx +1 -1
- package/src/components/tree/dialogs/TreeNodeInfoDialog.tsx +12 -3
- package/src/components/tree/renderTreeCanvas.ts +32 -12
- package/src/components/util.ts +2 -5
- package/src/ggplotPalettes.ts +1 -1
- package/src/launchInterProScan.ts +13 -15
- package/src/model/DataModel.ts +10 -0
- package/src/model/DialogQueue.ts +1 -2
- package/src/model.ts +355 -112
- package/src/parseGFF.ts +13 -11
- package/src/parseNewick.ts +4 -4
- package/src/parsers/ClustalMSA.ts +3 -3
- package/src/parsers/FastaMSA.ts +5 -5
- package/src/parsers/StockholmMSA.ts +11 -11
- package/src/renderToSvg.tsx +7 -8
- package/src/reparseTree.ts +1 -1
- package/src/rowCoordinateCalculations.test.ts +19 -0
- package/src/rowCoordinateCalculations.ts +26 -0
- package/src/util.ts +2 -4
- package/src/version.ts +1 -1
- package/dist/components/dialogs/InterProScanPanel.js.map +0 -1
- package/dist/components/dialogs/UserProvidedResultPanel.d.ts +0 -7
- package/dist/components/dialogs/UserProvidedResultPanel.js +0 -56
- package/dist/components/dialogs/UserProvidedResultPanel.js.map +0 -1
- 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
|
|
27
|
-
|
|
26
|
+
key!.trim(),
|
|
27
|
+
val
|
|
28
|
+
? decodeURIComponent(val).trim().split(',').join(' ')
|
|
29
|
+
: undefined,
|
|
28
30
|
]),
|
|
29
31
|
),
|
|
30
32
|
}
|
package/src/parseNewick.ts
CHANGED
|
@@ -59,11 +59,11 @@
|
|
|
59
59
|
*/
|
|
60
60
|
export default function parse(s: string) {
|
|
61
61
|
const ancestors = []
|
|
62
|
-
|
|
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]
|
|
19
|
+
return this.MSA.alns[0]!.seq.length
|
|
20
20
|
}
|
|
21
21
|
|
|
22
22
|
getRowData() {
|
package/src/parsers/FastaMSA.ts
CHANGED
|
@@ -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
|
|
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 => [
|
|
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
|
|
39
|
+
return this.MSA.seqdata[name] || ''
|
|
40
40
|
}
|
|
41
41
|
|
|
42
42
|
getWidth() {
|
|
43
|
-
const name = Object.keys(this.MSA
|
|
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
|
|
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
|
|
36
|
+
return this.MSA.seqdata[name] || ''
|
|
37
37
|
}
|
|
38
38
|
|
|
39
39
|
getWidth() {
|
|
40
|
-
const name = Object.keys(this.MSA
|
|
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
|
|
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]
|
|
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
|
|
96
|
+
const tree = this.MSA.gf.NH?.[0]
|
|
97
97
|
return tree
|
|
98
98
|
? generateNodeIds(parseNewick(tree))
|
|
99
99
|
: {
|
package/src/renderToSvg.tsx
CHANGED
|
@@ -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.
|
|
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
|
-
}
|
|
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
|
</>
|
package/src/reparseTree.ts
CHANGED
|
@@ -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
|
|
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,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
|