react-msaview 1.3.2 → 2.1.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 (245) hide show
  1. package/bundle/index.js +285 -97099
  2. package/dist/StructureModel.d.ts +9 -0
  3. package/dist/StructureModel.js +11 -0
  4. package/dist/StructureModel.js.map +1 -0
  5. package/dist/UniprotTrack.d.ts +27 -0
  6. package/dist/UniprotTrack.js +53 -0
  7. package/dist/UniprotTrack.js.map +1 -0
  8. package/dist/colorSchemes.d.ts +5 -11
  9. package/dist/colorSchemes.js +27 -32
  10. package/dist/colorSchemes.js.map +1 -0
  11. package/dist/components/BoxTrack.d.ts +6 -6
  12. package/dist/components/BoxTrack.js +9 -137
  13. package/dist/components/BoxTrack.js.map +1 -0
  14. package/dist/components/BoxTrackBlock.d.ts +8 -0
  15. package/dist/components/BoxTrackBlock.js +136 -0
  16. package/dist/components/BoxTrackBlock.js.map +1 -0
  17. package/dist/components/Header.d.ts +2 -2
  18. package/dist/components/Header.js +55 -48
  19. package/dist/components/Header.js.map +1 -0
  20. package/dist/components/ImportForm.d.ts +2 -2
  21. package/dist/components/ImportForm.js +59 -71
  22. package/dist/components/ImportForm.js.map +1 -0
  23. package/dist/components/MSABlock.d.ts +8 -0
  24. package/dist/components/MSABlock.js +103 -0
  25. package/dist/components/MSABlock.js.map +1 -0
  26. package/dist/components/MSACanvas.d.ts +2 -2
  27. package/dist/components/MSACanvas.js +32 -133
  28. package/dist/components/MSACanvas.js.map +1 -0
  29. package/dist/components/MSAMouseoverCanvas.d.ts +6 -0
  30. package/dist/components/MSAMouseoverCanvas.js +52 -0
  31. package/dist/components/MSAMouseoverCanvas.js.map +1 -0
  32. package/dist/components/MSAView.d.ts +2 -2
  33. package/dist/components/MSAView.js +17 -62
  34. package/dist/components/MSAView.js.map +1 -0
  35. package/dist/components/MultiAlignmentSelector.d.ts +6 -0
  36. package/dist/components/MultiAlignmentSelector.js +13 -0
  37. package/dist/components/MultiAlignmentSelector.js.map +1 -0
  38. package/dist/components/ResizeHandles.d.ts +5 -5
  39. package/dist/components/ResizeHandles.js +31 -32
  40. package/dist/components/ResizeHandles.js.map +1 -0
  41. package/dist/components/Rubberband.d.ts +3 -2
  42. package/dist/components/Rubberband.js +41 -64
  43. package/dist/components/Rubberband.js.map +1 -0
  44. package/dist/components/Ruler.d.ts +2 -16
  45. package/dist/components/Ruler.js +19 -88
  46. package/dist/components/Ruler.js.map +1 -0
  47. package/dist/components/TextTrack.d.ts +5 -5
  48. package/dist/components/TextTrack.js +23 -24
  49. package/dist/components/TextTrack.js.map +1 -0
  50. package/dist/components/Track.d.ts +5 -5
  51. package/dist/components/Track.js +41 -40
  52. package/dist/components/Track.js.map +1 -0
  53. package/dist/components/TreeBranchMenu.d.ts +14 -0
  54. package/dist/components/TreeBranchMenu.js +26 -0
  55. package/dist/components/TreeBranchMenu.js.map +1 -0
  56. package/dist/components/TreeCanvas.d.ts +2 -2
  57. package/dist/components/TreeCanvas.js +24 -356
  58. package/dist/components/TreeCanvas.js.map +1 -0
  59. package/dist/components/TreeCanvasBlock.d.ts +7 -0
  60. package/dist/components/TreeCanvasBlock.js +252 -0
  61. package/dist/components/TreeCanvasBlock.js.map +1 -0
  62. package/dist/components/TreeMenu.d.ts +12 -0
  63. package/dist/components/TreeMenu.js +56 -0
  64. package/dist/components/TreeMenu.js.map +1 -0
  65. package/dist/components/TreeRuler.d.ts +2 -2
  66. package/dist/components/TreeRuler.js +3 -3
  67. package/dist/components/TreeRuler.js.map +1 -0
  68. package/dist/components/VerticalGuide.d.ts +7 -0
  69. package/dist/components/VerticalGuide.js +30 -0
  70. package/dist/components/VerticalGuide.js.map +1 -0
  71. package/dist/components/ZoomControls.d.ts +6 -0
  72. package/dist/components/ZoomControls.js +58 -0
  73. package/dist/components/ZoomControls.js.map +1 -0
  74. package/dist/components/data/seq2.d.ts +3 -3
  75. package/dist/components/data/seq2.js +33 -3
  76. package/dist/components/data/seq2.js.map +1 -0
  77. package/dist/components/dialogs/AboutDlg.d.ts +4 -0
  78. package/dist/components/dialogs/AboutDlg.js +40 -0
  79. package/dist/components/dialogs/AboutDlg.js.map +1 -0
  80. package/{bundle/components → dist/components/dialogs}/AddTrackDlg.d.ts +3 -3
  81. package/dist/components/dialogs/AddTrackDlg.js +26 -0
  82. package/dist/components/dialogs/AddTrackDlg.js.map +1 -0
  83. package/dist/components/{AnnotationDlg.d.ts → dialogs/AnnotationDlg.d.ts} +3 -3
  84. package/dist/components/dialogs/AnnotationDlg.js +65 -0
  85. package/dist/components/dialogs/AnnotationDlg.js.map +1 -0
  86. package/dist/components/dialogs/DetailsDlg.d.ts +7 -0
  87. package/dist/components/dialogs/DetailsDlg.js +13 -0
  88. package/dist/components/dialogs/DetailsDlg.js.map +1 -0
  89. package/dist/components/dialogs/MoreInfoDlg.d.ts +6 -0
  90. package/dist/components/dialogs/MoreInfoDlg.js +11 -0
  91. package/dist/components/dialogs/MoreInfoDlg.js.map +1 -0
  92. package/dist/components/dialogs/SettingsDlg.d.ts +7 -0
  93. package/dist/components/dialogs/SettingsDlg.js +48 -0
  94. package/dist/components/dialogs/SettingsDlg.js.map +1 -0
  95. package/dist/components/dialogs/TrackInfoDlg.d.ts +9 -0
  96. package/{bundle/components → dist/components/dialogs}/TrackInfoDlg.js +12 -13
  97. package/dist/components/dialogs/TrackInfoDlg.js.map +1 -0
  98. package/dist/components/dialogs/TracklistDlg.d.ts +7 -0
  99. package/dist/components/dialogs/TracklistDlg.js +18 -0
  100. package/dist/components/dialogs/TracklistDlg.js.map +1 -0
  101. package/{bundle/components/Ruler.d.ts → dist/components/util.d.ts} +1 -6
  102. package/dist/components/util.js +68 -0
  103. package/dist/components/util.js.map +1 -0
  104. package/dist/index.d.ts +2 -4
  105. package/dist/index.js +3 -3
  106. package/dist/index.js.map +1 -0
  107. package/dist/layout.js +14 -20
  108. package/dist/layout.js.map +1 -0
  109. package/dist/model.d.ts +114 -97
  110. package/dist/model.js +248 -486
  111. package/dist/model.js.map +1 -0
  112. package/dist/parseNewick.d.ts +1 -5
  113. package/dist/parseNewick.js +11 -8
  114. package/dist/parseNewick.js.map +1 -0
  115. package/dist/parsers/ClustalMSA.d.ts +6 -18
  116. package/dist/parsers/ClustalMSA.js +55 -64
  117. package/dist/parsers/ClustalMSA.js.map +1 -0
  118. package/dist/parsers/FastaMSA.d.ts +5 -12
  119. package/dist/parsers/FastaMSA.js +55 -64
  120. package/dist/parsers/FastaMSA.js.map +1 -0
  121. package/dist/parsers/StockholmMSA.d.ts +10 -17
  122. package/dist/parsers/StockholmMSA.js +81 -110
  123. package/dist/parsers/StockholmMSA.js.map +1 -0
  124. package/dist/util.d.ts +34 -7
  125. package/dist/util.js +76 -24
  126. package/dist/util.js.map +1 -0
  127. package/dist/version.d.ts +1 -0
  128. package/dist/version.js +2 -0
  129. package/dist/version.js.map +1 -0
  130. package/package.json +34 -34
  131. package/src/StructureModel.ts +11 -0
  132. package/src/UniprotTrack.ts +59 -0
  133. package/src/colorSchemes.ts +520 -0
  134. package/src/components/BoxTrack.tsx +33 -0
  135. package/src/components/BoxTrackBlock.tsx +198 -0
  136. package/src/components/Header.tsx +106 -0
  137. package/src/components/ImportForm.tsx +192 -0
  138. package/src/components/MSABlock.tsx +164 -0
  139. package/src/components/MSACanvas.tsx +142 -0
  140. package/src/components/MSAMouseoverCanvas.tsx +87 -0
  141. package/src/components/MSAView.tsx +88 -0
  142. package/src/components/MultiAlignmentSelector.tsx +33 -0
  143. package/src/components/ResizeHandles.tsx +137 -0
  144. package/src/components/Rubberband.tsx +270 -0
  145. package/src/components/Ruler.tsx +123 -0
  146. package/src/components/TextTrack.tsx +120 -0
  147. package/src/components/Track.tsx +153 -0
  148. package/src/components/TreeBranchMenu.tsx +67 -0
  149. package/src/components/TreeCanvas.tsx +128 -0
  150. package/src/components/TreeCanvasBlock.tsx +359 -0
  151. package/src/components/TreeMenu.tsx +105 -0
  152. package/src/components/TreeRuler.tsx +12 -0
  153. package/src/components/VerticalGuide.tsx +50 -0
  154. package/src/components/ZoomControls.tsx +78 -0
  155. package/src/components/data/seq2.ts +35 -0
  156. package/src/components/dialogs/AboutDlg.tsx +58 -0
  157. package/src/components/dialogs/AddTrackDlg.tsx +74 -0
  158. package/src/components/dialogs/AnnotationDlg.tsx +144 -0
  159. package/src/components/dialogs/DetailsDlg.tsx +28 -0
  160. package/src/components/dialogs/MoreInfoDlg.tsx +21 -0
  161. package/src/components/dialogs/SettingsDlg.tsx +154 -0
  162. package/src/components/dialogs/TrackInfoDlg.tsx +59 -0
  163. package/src/components/dialogs/TracklistDlg.tsx +59 -0
  164. package/src/components/util.ts +93 -0
  165. package/src/declare.d.ts +1 -0
  166. package/src/index.ts +2 -0
  167. package/src/layout.ts +83 -0
  168. package/src/model.ts +793 -0
  169. package/{bundle/parseNewick.d.ts → src/parseNewick.ts} +35 -5
  170. package/src/parsers/ClustalMSA.ts +79 -0
  171. package/src/parsers/FastaMSA.ts +82 -0
  172. package/src/parsers/StockholmMSA.ts +137 -0
  173. package/src/util.ts +142 -0
  174. package/src/version.ts +1 -0
  175. package/bundle/colorSchemes.d.ts +0 -16
  176. package/bundle/colorSchemes.js +0 -455
  177. package/bundle/components/AboutDlg.d.ts +0 -5
  178. package/bundle/components/AboutDlg.js +0 -47
  179. package/bundle/components/AddTrackDlg.js +0 -26
  180. package/bundle/components/AnnotationDlg.d.ts +0 -11
  181. package/bundle/components/AnnotationDlg.js +0 -77
  182. package/bundle/components/BoxTrack.d.ts +0 -7
  183. package/bundle/components/BoxTrack.js +0 -143
  184. package/bundle/components/DetailsDlg.d.ts +0 -8
  185. package/bundle/components/DetailsDlg.js +0 -12
  186. package/bundle/components/Header.d.ts +0 -6
  187. package/bundle/components/Header.js +0 -63
  188. package/bundle/components/ImportForm.d.ts +0 -6
  189. package/bundle/components/ImportForm.js +0 -89
  190. package/bundle/components/MSACanvas.d.ts +0 -6
  191. package/bundle/components/MSACanvas.js +0 -210
  192. package/bundle/components/MSAView.d.ts +0 -6
  193. package/bundle/components/MSAView.js +0 -88
  194. package/bundle/components/MoreInfoDlg.d.ts +0 -6
  195. package/bundle/components/MoreInfoDlg.js +0 -11
  196. package/bundle/components/ResizeHandles.d.ts +0 -8
  197. package/bundle/components/ResizeHandles.js +0 -110
  198. package/bundle/components/Rubberband.d.ts +0 -7
  199. package/bundle/components/Rubberband.js +0 -196
  200. package/bundle/components/Ruler.js +0 -121
  201. package/bundle/components/SettingsDlg.d.ts +0 -8
  202. package/bundle/components/SettingsDlg.js +0 -40
  203. package/bundle/components/TextTrack.d.ts +0 -7
  204. package/bundle/components/TextTrack.js +0 -72
  205. package/bundle/components/Track.d.ts +0 -11
  206. package/bundle/components/Track.js +0 -81
  207. package/bundle/components/TrackInfoDlg.d.ts +0 -6
  208. package/bundle/components/TracklistDlg.d.ts +0 -8
  209. package/bundle/components/TracklistDlg.js +0 -18
  210. package/bundle/components/TreeCanvas.d.ts +0 -6
  211. package/bundle/components/TreeCanvas.js +0 -431
  212. package/bundle/components/TreeRuler.d.ts +0 -6
  213. package/bundle/components/TreeRuler.js +0 -8
  214. package/bundle/components/data/seq2.d.ts +0 -3
  215. package/bundle/components/data/seq2.js +0 -3
  216. package/bundle/index.d.ts +0 -4
  217. package/bundle/layout.d.ts +0 -23
  218. package/bundle/layout.js +0 -53
  219. package/bundle/model.d.ts +0 -364
  220. package/bundle/model.js +0 -894
  221. package/bundle/parseNewick.js +0 -94
  222. package/bundle/parsers/ClustalMSA.d.ts +0 -39
  223. package/bundle/parsers/ClustalMSA.js +0 -77
  224. package/bundle/parsers/FastaMSA.d.ts +0 -26
  225. package/bundle/parsers/FastaMSA.js +0 -78
  226. package/bundle/parsers/StockholmMSA.d.ts +0 -75
  227. package/bundle/parsers/StockholmMSA.js +0 -142
  228. package/bundle/util.d.ts +0 -17
  229. package/bundle/util.js +0 -33
  230. package/dist/components/AboutDlg.d.ts +0 -5
  231. package/dist/components/AboutDlg.js +0 -50
  232. package/dist/components/AddTrackDlg.d.ts +0 -8
  233. package/dist/components/AddTrackDlg.js +0 -26
  234. package/dist/components/AnnotationDlg.js +0 -77
  235. package/dist/components/DetailsDlg.d.ts +0 -8
  236. package/dist/components/DetailsDlg.js +0 -12
  237. package/dist/components/MoreInfoDlg.d.ts +0 -6
  238. package/dist/components/MoreInfoDlg.js +0 -11
  239. package/dist/components/SettingsDlg.d.ts +0 -8
  240. package/dist/components/SettingsDlg.js +0 -40
  241. package/dist/components/TrackInfoDlg.d.ts +0 -6
  242. package/dist/components/TrackInfoDlg.js +0 -33
  243. package/dist/components/TracklistDlg.d.ts +0 -8
  244. package/dist/components/TracklistDlg.js +0 -18
  245. package/dist/components/package.json +0 -62
@@ -0,0 +1,59 @@
1
+ import React from 'react'
2
+ import { Dialog } from '@jbrowse/core/ui'
3
+ import {
4
+ DialogContent,
5
+ FormControlLabel,
6
+ FormGroup,
7
+ Checkbox,
8
+ DialogActions,
9
+ Button,
10
+ Typography,
11
+ } from '@mui/material'
12
+ import { observer } from 'mobx-react'
13
+
14
+ // locals
15
+ import { MsaViewModel } from '../../model'
16
+
17
+ export default observer(function ({
18
+ model,
19
+ onClose,
20
+ }: {
21
+ model: MsaViewModel
22
+ onClose: () => void
23
+ }) {
24
+ const { tracks } = model
25
+
26
+ return (
27
+ <Dialog onClose={() => onClose()} open title="Add track">
28
+ <DialogContent>
29
+ <Typography>
30
+ Open relevant per-alignment tracks e.g. protein domains
31
+ </Typography>
32
+
33
+ <FormGroup>
34
+ {tracks.map(track => {
35
+ return (
36
+ <FormControlLabel
37
+ key={track.model.id}
38
+ control={
39
+ <Checkbox
40
+ checked={!model.turnedOffTracks.has(track.model.id)}
41
+ onChange={() => {
42
+ model.toggleTrack(track.model.id)
43
+ }}
44
+ />
45
+ }
46
+ label={track.model.name}
47
+ />
48
+ )
49
+ })}
50
+ </FormGroup>
51
+ <DialogActions>
52
+ <Button onClick={() => onClose()} variant="contained" color="primary">
53
+ Close
54
+ </Button>
55
+ </DialogActions>
56
+ </DialogContent>
57
+ </Dialog>
58
+ )
59
+ })
@@ -0,0 +1,93 @@
1
+ /**
2
+ * Given a scale ( bp/px ) and minimum distances (px) between major and minor
3
+ * gridlines, return an object like `{ majorPitch: bp, minorPitch: bp }` giving
4
+ * the gridline pitches to use.
5
+ */
6
+ export function chooseGridPitch(
7
+ scale: number,
8
+ minMajorPitchPx: number,
9
+ minMinorPitchPx: number,
10
+ ) {
11
+ scale = Math.abs(scale)
12
+ const minMajorPitchBp = minMajorPitchPx * scale
13
+ const majorMagnitude = parseInt(
14
+ Number(minMajorPitchBp).toExponential().split(/e/i)[1],
15
+ 10,
16
+ )
17
+
18
+ let majorPitch = 10 ** majorMagnitude
19
+ while (majorPitch < minMajorPitchBp) {
20
+ majorPitch *= 2
21
+ if (majorPitch >= minMajorPitchBp) {
22
+ break
23
+ }
24
+ majorPitch *= 2.5
25
+ }
26
+
27
+ majorPitch = Math.max(majorPitch, 5)
28
+
29
+ const majorPitchPx = majorPitch / scale
30
+
31
+ let minorPitch = 0
32
+ if (!(majorPitch % 10) && majorPitchPx / 10 >= minMinorPitchPx) {
33
+ minorPitch = majorPitch / 10
34
+ } else if (!(majorPitch % 5) && majorPitchPx / 5 >= minMinorPitchPx) {
35
+ minorPitch = majorPitch / 5
36
+ } else if (!(majorPitch % 2) && majorPitchPx / 2 >= minMinorPitchPx) {
37
+ minorPitch = majorPitch / 2
38
+ }
39
+
40
+ return { majorPitch, minorPitch }
41
+ }
42
+ export function makeTicks(
43
+ start: number,
44
+ end: number,
45
+ bpPerPx: number,
46
+ emitMajor = true,
47
+ emitMinor = true,
48
+ ) {
49
+ const gridPitch = chooseGridPitch(bpPerPx, 60, 15)
50
+
51
+ let minBase = start
52
+ let maxBase = end
53
+ if (minBase === null || maxBase === null) {
54
+ return []
55
+ }
56
+
57
+ if (bpPerPx < 0) {
58
+ ;[minBase, maxBase] = [maxBase, minBase]
59
+ }
60
+
61
+ // add 20px additional on the right and left to allow us to draw the ends of
62
+ // labels that lie a little outside our region
63
+ minBase -= Math.abs(20 * bpPerPx)
64
+ maxBase += Math.abs(20 * bpPerPx) + 1
65
+
66
+ const iterPitch = gridPitch.minorPitch || gridPitch.majorPitch
67
+ let index = 0
68
+ const ticks = []
69
+ for (
70
+ let base = Math.ceil(minBase / iterPitch) * iterPitch;
71
+ base < maxBase;
72
+ base += iterPitch
73
+ ) {
74
+ if (emitMinor && base % (gridPitch.majorPitch * 2)) {
75
+ ticks.push({ type: 'minor', base: base - 1, index })
76
+ index += 1
77
+ } else if (emitMajor && !(base % (gridPitch.majorPitch * 2))) {
78
+ ticks.push({ type: 'major', base: base - 1, index })
79
+ index += 1
80
+ }
81
+ }
82
+ return ticks
83
+ }
84
+
85
+ export function mathPower(num: number): string {
86
+ if (num < 999) {
87
+ return String(num)
88
+ }
89
+ return `${mathPower(~~(num / 1000))},${`00${~~(num % 1000)}`.slice(
90
+ -3,
91
+ -3 + 3,
92
+ )}`
93
+ }
@@ -0,0 +1 @@
1
+ declare module 'stockholm-js'
package/src/index.ts ADDED
@@ -0,0 +1,2 @@
1
+ export { default as MSAView } from './components/MSAView'
2
+ export { default as MSAModel, type MsaViewModel } from './model'
package/src/layout.ts ADDED
@@ -0,0 +1,83 @@
1
+ import RBush from 'rbush'
2
+
3
+ export default class Layout {
4
+ public rectangles: Map<
5
+ string,
6
+ {
7
+ minY: number
8
+ maxY: number
9
+ minX: number
10
+ maxX: number
11
+ id: string
12
+ data: unknown
13
+ }
14
+ >
15
+
16
+ public maxHeightReached: boolean
17
+
18
+ private maxHeight: number
19
+
20
+ private rbush: RBush<{ id: string }>
21
+
22
+ private pTotalHeight: number
23
+
24
+ constructor({
25
+ maxHeight = 10000,
26
+ }: {
27
+ maxHeight?: number
28
+ } = {}) {
29
+ this.maxHeightReached = false
30
+ this.rbush = new RBush()
31
+ this.rectangles = new Map()
32
+ this.maxHeight = Math.ceil(maxHeight)
33
+ this.pTotalHeight = 0 // total height, in units of bitmap squares (px/pitchY)
34
+ }
35
+
36
+ /**
37
+ * @returns top position for the rect, or Null if laying
38
+ * out the rect would exceed maxHeighe
39
+ */
40
+ addRect(
41
+ id: string,
42
+ left: number,
43
+ right: number,
44
+ height: number,
45
+ data: unknown,
46
+ ): number | null {
47
+ // add to rbush
48
+ const existingRecord = this.rectangles.get(id)
49
+ if (existingRecord) {
50
+ return existingRecord.minY
51
+ }
52
+
53
+ let currHeight = 0
54
+ while (
55
+ this.rbush.collides({
56
+ minX: left,
57
+ minY: currHeight,
58
+ maxX: right,
59
+ maxY: currHeight + height,
60
+ }) &&
61
+ currHeight <= this.maxHeight
62
+ ) {
63
+ currHeight += 1
64
+ }
65
+
66
+ const record = {
67
+ minX: left,
68
+ minY: currHeight,
69
+ maxX: right,
70
+ maxY: currHeight + height,
71
+ id,
72
+ data,
73
+ }
74
+ this.rbush.insert(record)
75
+ this.rectangles.set(id, record)
76
+ this.pTotalHeight = Math.max(this.pTotalHeight, currHeight)
77
+ return currHeight
78
+ }
79
+
80
+ get totalHeight() {
81
+ return this.pTotalHeight
82
+ }
83
+ }