react-msaview 1.3.1 → 2.0.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 (200) hide show
  1. package/bundle/index.js +283 -97265
  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 +52 -0
  7. package/dist/UniprotTrack.js.map +1 -0
  8. package/dist/colorSchemes.d.ts +2 -2
  9. package/dist/colorSchemes.js +24 -29
  10. package/dist/colorSchemes.js.map +1 -0
  11. package/dist/components/AboutDlg.d.ts +0 -1
  12. package/dist/components/AboutDlg.js +38 -48
  13. package/dist/components/AboutDlg.js.map +1 -0
  14. package/dist/components/AddTrackDlg.d.ts +0 -1
  15. package/dist/components/AddTrackDlg.js +13 -13
  16. package/dist/components/AddTrackDlg.js.map +1 -0
  17. package/dist/components/AnnotationDlg.d.ts +0 -1
  18. package/dist/components/AnnotationDlg.js +36 -48
  19. package/dist/components/AnnotationDlg.js.map +1 -0
  20. package/dist/components/BoxTrack.d.ts +3 -4
  21. package/dist/components/BoxTrack.js +51 -48
  22. package/dist/components/BoxTrack.js.map +1 -0
  23. package/dist/components/DetailsDlg.d.ts +0 -1
  24. package/dist/components/DetailsDlg.js +7 -7
  25. package/dist/components/DetailsDlg.js.map +1 -0
  26. package/dist/components/Header.d.ts +0 -1
  27. package/dist/components/Header.js +39 -34
  28. package/dist/components/Header.js.map +1 -0
  29. package/dist/components/ImportForm.d.ts +0 -1
  30. package/dist/components/ImportForm.js +59 -71
  31. package/dist/components/ImportForm.js.map +1 -0
  32. package/dist/components/MSACanvas.d.ts +0 -1
  33. package/dist/components/MSACanvas.js +71 -74
  34. package/dist/components/MSACanvas.js.map +1 -0
  35. package/dist/components/MSAView.d.ts +0 -1
  36. package/dist/components/MSAView.js +19 -38
  37. package/dist/components/MSAView.js.map +1 -0
  38. package/dist/components/MoreInfoDlg.d.ts +2 -3
  39. package/dist/components/MoreInfoDlg.js +5 -5
  40. package/dist/components/MoreInfoDlg.js.map +1 -0
  41. package/dist/components/ResizeHandles.d.ts +2 -3
  42. package/dist/components/ResizeHandles.js +31 -32
  43. package/dist/components/ResizeHandles.js.map +1 -0
  44. package/dist/components/Rubberband.d.ts +2 -1
  45. package/dist/components/Rubberband.js +42 -64
  46. package/dist/components/Rubberband.js.map +1 -0
  47. package/dist/components/Ruler.d.ts +0 -15
  48. package/dist/components/Ruler.js +18 -87
  49. package/dist/components/Ruler.js.map +1 -0
  50. package/dist/components/SettingsDlg.d.ts +0 -1
  51. package/dist/components/SettingsDlg.js +29 -22
  52. package/dist/components/SettingsDlg.js.map +1 -0
  53. package/dist/components/TextTrack.d.ts +3 -4
  54. package/dist/components/TextTrack.js +23 -24
  55. package/dist/components/TextTrack.js.map +1 -0
  56. package/dist/components/Track.d.ts +2 -3
  57. package/dist/components/Track.js +38 -38
  58. package/dist/components/Track.js.map +1 -0
  59. package/dist/components/TrackInfoDlg.d.ts +5 -3
  60. package/dist/components/TrackInfoDlg.js +12 -13
  61. package/dist/components/TrackInfoDlg.js.map +1 -0
  62. package/dist/components/TracklistDlg.d.ts +0 -1
  63. package/dist/components/TracklistDlg.js +9 -9
  64. package/dist/components/TracklistDlg.js.map +1 -0
  65. package/dist/components/TreeCanvas.d.ts +0 -1
  66. package/dist/components/TreeCanvas.js +135 -148
  67. package/dist/components/TreeCanvas.js.map +1 -0
  68. package/dist/components/TreeRuler.d.ts +0 -1
  69. package/dist/components/TreeRuler.js +3 -3
  70. package/dist/components/TreeRuler.js.map +1 -0
  71. package/dist/components/VerticalGuide.d.ts +6 -0
  72. package/dist/components/VerticalGuide.js +30 -0
  73. package/dist/components/VerticalGuide.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/{bundle/components/Ruler.d.ts → dist/components/util.d.ts} +1 -6
  78. package/dist/components/util.js +69 -0
  79. package/dist/components/util.js.map +1 -0
  80. package/dist/index.d.ts +2 -4
  81. package/dist/index.js +3 -3
  82. package/dist/index.js.map +1 -0
  83. package/dist/layout.js +14 -20
  84. package/dist/layout.js.map +1 -0
  85. package/dist/model.d.ts +94 -74
  86. package/dist/model.js +232 -473
  87. package/dist/model.js.map +1 -0
  88. package/dist/parseNewick.d.ts +1 -5
  89. package/dist/parseNewick.js +10 -7
  90. package/dist/parseNewick.js.map +1 -0
  91. package/dist/parsers/ClustalMSA.d.ts +6 -18
  92. package/dist/parsers/ClustalMSA.js +55 -64
  93. package/dist/parsers/ClustalMSA.js.map +1 -0
  94. package/dist/parsers/FastaMSA.d.ts +4 -9
  95. package/dist/parsers/FastaMSA.js +55 -64
  96. package/dist/parsers/FastaMSA.js.map +1 -0
  97. package/dist/parsers/StockholmMSA.d.ts +8 -13
  98. package/dist/parsers/StockholmMSA.js +78 -107
  99. package/dist/parsers/StockholmMSA.js.map +1 -0
  100. package/dist/util.d.ts +33 -4
  101. package/dist/util.js +76 -24
  102. package/dist/util.js.map +1 -0
  103. package/dist/version.d.ts +1 -0
  104. package/dist/version.js +2 -0
  105. package/dist/version.js.map +1 -0
  106. package/package.json +30 -30
  107. package/src/StructureModel.ts +11 -0
  108. package/src/UniprotTrack.ts +60 -0
  109. package/src/colorSchemes.ts +520 -0
  110. package/src/components/AboutDlg.tsx +64 -0
  111. package/src/components/AddTrackDlg.tsx +74 -0
  112. package/src/components/AnnotationDlg.tsx +144 -0
  113. package/src/components/BoxTrack.tsx +225 -0
  114. package/src/components/DetailsDlg.tsx +28 -0
  115. package/src/components/Header.tsx +117 -0
  116. package/src/components/ImportForm.tsx +192 -0
  117. package/src/components/MSACanvas.tsx +297 -0
  118. package/src/components/MSAView.tsx +132 -0
  119. package/src/components/MoreInfoDlg.tsx +21 -0
  120. package/src/components/ResizeHandles.tsx +137 -0
  121. package/src/components/Rubberband.tsx +271 -0
  122. package/src/components/Ruler.tsx +122 -0
  123. package/src/components/SettingsDlg.tsx +154 -0
  124. package/src/components/TextTrack.tsx +120 -0
  125. package/src/components/Track.tsx +150 -0
  126. package/src/components/TrackInfoDlg.tsx +59 -0
  127. package/src/components/TracklistDlg.tsx +61 -0
  128. package/src/components/TreeCanvas.tsx +633 -0
  129. package/src/components/TreeRuler.tsx +12 -0
  130. package/src/components/VerticalGuide.tsx +50 -0
  131. package/src/components/data/seq2.ts +35 -0
  132. package/src/components/util.ts +94 -0
  133. package/src/declare.d.ts +2 -0
  134. package/src/index.ts +2 -0
  135. package/src/layout.ts +83 -0
  136. package/src/model.ts +790 -0
  137. package/{bundle/parseNewick.d.ts → src/parseNewick.ts} +36 -5
  138. package/src/parsers/ClustalMSA.ts +79 -0
  139. package/src/parsers/FastaMSA.ts +82 -0
  140. package/src/parsers/StockholmMSA.ts +137 -0
  141. package/src/util.ts +142 -0
  142. package/src/version.ts +1 -0
  143. package/bundle/colorSchemes.d.ts +0 -16
  144. package/bundle/colorSchemes.js +0 -455
  145. package/bundle/components/AboutDlg.d.ts +0 -5
  146. package/bundle/components/AboutDlg.js +0 -47
  147. package/bundle/components/AddTrackDlg.d.ts +0 -8
  148. package/bundle/components/AddTrackDlg.js +0 -26
  149. package/bundle/components/AnnotationDlg.d.ts +0 -11
  150. package/bundle/components/AnnotationDlg.js +0 -77
  151. package/bundle/components/BoxTrack.d.ts +0 -7
  152. package/bundle/components/BoxTrack.js +0 -143
  153. package/bundle/components/DetailsDlg.d.ts +0 -8
  154. package/bundle/components/DetailsDlg.js +0 -12
  155. package/bundle/components/Header.d.ts +0 -6
  156. package/bundle/components/Header.js +0 -63
  157. package/bundle/components/ImportForm.d.ts +0 -6
  158. package/bundle/components/ImportForm.js +0 -89
  159. package/bundle/components/MSACanvas.d.ts +0 -6
  160. package/bundle/components/MSACanvas.js +0 -210
  161. package/bundle/components/MSAView.d.ts +0 -6
  162. package/bundle/components/MSAView.js +0 -88
  163. package/bundle/components/MoreInfoDlg.d.ts +0 -6
  164. package/bundle/components/MoreInfoDlg.js +0 -11
  165. package/bundle/components/ResizeHandles.d.ts +0 -8
  166. package/bundle/components/ResizeHandles.js +0 -110
  167. package/bundle/components/Rubberband.d.ts +0 -7
  168. package/bundle/components/Rubberband.js +0 -196
  169. package/bundle/components/Ruler.js +0 -121
  170. package/bundle/components/SettingsDlg.d.ts +0 -8
  171. package/bundle/components/SettingsDlg.js +0 -40
  172. package/bundle/components/TextTrack.d.ts +0 -7
  173. package/bundle/components/TextTrack.js +0 -72
  174. package/bundle/components/Track.d.ts +0 -11
  175. package/bundle/components/Track.js +0 -81
  176. package/bundle/components/TrackInfoDlg.d.ts +0 -6
  177. package/bundle/components/TrackInfoDlg.js +0 -33
  178. package/bundle/components/TracklistDlg.d.ts +0 -8
  179. package/bundle/components/TracklistDlg.js +0 -18
  180. package/bundle/components/TreeCanvas.d.ts +0 -6
  181. package/bundle/components/TreeCanvas.js +0 -431
  182. package/bundle/components/TreeRuler.d.ts +0 -6
  183. package/bundle/components/TreeRuler.js +0 -8
  184. package/bundle/components/data/seq2.d.ts +0 -3
  185. package/bundle/components/data/seq2.js +0 -3
  186. package/bundle/index.d.ts +0 -4
  187. package/bundle/layout.d.ts +0 -23
  188. package/bundle/layout.js +0 -53
  189. package/bundle/model.d.ts +0 -364
  190. package/bundle/model.js +0 -894
  191. package/bundle/parseNewick.js +0 -94
  192. package/bundle/parsers/ClustalMSA.d.ts +0 -39
  193. package/bundle/parsers/ClustalMSA.js +0 -77
  194. package/bundle/parsers/FastaMSA.d.ts +0 -26
  195. package/bundle/parsers/FastaMSA.js +0 -78
  196. package/bundle/parsers/StockholmMSA.d.ts +0 -75
  197. package/bundle/parsers/StockholmMSA.js +0 -142
  198. package/bundle/util.d.ts +0 -17
  199. package/bundle/util.js +0 -33
  200. package/dist/components/package.json +0 -62
@@ -0,0 +1,150 @@
1
+ import React, { useState, useRef, useEffect } from 'react'
2
+ import normalizeWheel from 'normalize-wheel'
3
+ import { observer } from 'mobx-react'
4
+ import { IconButton, Menu, MenuItem } from '@mui/material'
5
+ import { makeStyles } from 'tss-react/mui'
6
+
7
+ // icons
8
+ import ArrowDropDownIcon from '@mui/icons-material/ArrowDropDown'
9
+
10
+ // locals
11
+ import { MsaViewModel } from '../model'
12
+ import TrackInfoDialog from './TrackInfoDlg'
13
+
14
+ const useStyles = makeStyles()({
15
+ button: {
16
+ padding: 0,
17
+ },
18
+ })
19
+
20
+ export const TrackLabel = observer(function ({
21
+ model,
22
+ track,
23
+ }: {
24
+ model: MsaViewModel
25
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
26
+ track: any
27
+ }) {
28
+ const [anchorEl, setAnchorEl] = useState<HTMLButtonElement>()
29
+ const [trackInfoDlgOpen, setTrackInfoDlgOpen] = useState(false)
30
+ const { rowHeight, treeAreaWidth: width } = model
31
+ const {
32
+ height,
33
+ model: { name },
34
+ } = track
35
+ const { classes } = useStyles()
36
+ const trackLabelHeight = Math.max(8, rowHeight - 8)
37
+
38
+ return (
39
+ <div
40
+ style={{
41
+ width,
42
+ height,
43
+ flexShrink: 0,
44
+ textAlign: 'right',
45
+ fontSize: trackLabelHeight,
46
+ }}
47
+ >
48
+ {name}{' '}
49
+ <IconButton
50
+ className={classes.button}
51
+ style={{
52
+ width: trackLabelHeight,
53
+ height: trackLabelHeight,
54
+ }}
55
+ onClick={event => setAnchorEl(event.currentTarget)}
56
+ >
57
+ <ArrowDropDownIcon />
58
+ </IconButton>
59
+ {anchorEl ? (
60
+ <Menu
61
+ anchorEl={anchorEl}
62
+ transitionDuration={0}
63
+ open
64
+ onClose={() => setAnchorEl(undefined)}
65
+ >
66
+ <MenuItem
67
+ dense
68
+ onClick={() => {
69
+ model.toggleTrack(track.model.id)
70
+ setAnchorEl(undefined)
71
+ }}
72
+ >
73
+ Close
74
+ </MenuItem>
75
+ <MenuItem
76
+ dense
77
+ onClick={() => {
78
+ setTrackInfoDlgOpen(true)
79
+ setAnchorEl(undefined)
80
+ }}
81
+ >
82
+ Get info
83
+ </MenuItem>
84
+ </Menu>
85
+ ) : null}
86
+ {trackInfoDlgOpen ? (
87
+ <TrackInfoDialog
88
+ model={track.model}
89
+ onClose={() => setTrackInfoDlgOpen(false)}
90
+ />
91
+ ) : null}
92
+ </div>
93
+ )
94
+ })
95
+
96
+ const Track = observer(function ({
97
+ model,
98
+ track,
99
+ }: {
100
+ model: MsaViewModel
101
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
102
+ track: any
103
+ }) {
104
+ const { resizeHandleWidth } = model
105
+ const {
106
+ model: { height, error },
107
+ } = track
108
+ const ref = useRef<HTMLDivElement>(null)
109
+ const scheduled = useRef(false)
110
+ const deltaX = useRef(0)
111
+ useEffect(() => {
112
+ const curr = ref.current
113
+ if (!curr) {
114
+ return
115
+ }
116
+ function onWheel(origEvent: WheelEvent) {
117
+ const event = normalizeWheel(origEvent)
118
+ deltaX.current += event.pixelX
119
+
120
+ if (!scheduled.current) {
121
+ scheduled.current = true
122
+ requestAnimationFrame(() => {
123
+ model.doScrollX(-deltaX.current)
124
+ deltaX.current = 0
125
+ scheduled.current = false
126
+ })
127
+ }
128
+ origEvent.preventDefault()
129
+ }
130
+ curr.addEventListener('wheel', onWheel)
131
+ return () => {
132
+ curr.removeEventListener('wheel', onWheel)
133
+ }
134
+ }, [model])
135
+ return (
136
+ <div key={track.id} style={{ display: 'flex', height }}>
137
+ <TrackLabel model={model} track={track} />
138
+ <div style={{ width: resizeHandleWidth, flexShrink: 0 }} />
139
+ <div ref={ref}>
140
+ {error ? (
141
+ <div style={{ color: 'red', fontSize: 10 }}>{`${error}`}</div>
142
+ ) : (
143
+ <track.ReactComponent model={model} track={track} />
144
+ )}
145
+ </div>
146
+ </div>
147
+ )
148
+ })
149
+
150
+ export default Track
@@ -0,0 +1,59 @@
1
+ import React, { useState } from 'react'
2
+ import copy from 'copy-to-clipboard'
3
+ import { observer } from 'mobx-react'
4
+ import { Dialog } from '@jbrowse/core/ui'
5
+ import { Button, DialogActions, DialogContent } from '@mui/material'
6
+ import { makeStyles } from 'tss-react/mui'
7
+
8
+ const useStyles = makeStyles()(theme => ({
9
+ textArea: {
10
+ padding: theme.spacing(2),
11
+ overflow: 'auto',
12
+ background: '#ddd',
13
+ wordBreak: 'break-word',
14
+ },
15
+ }))
16
+
17
+ const TrackInfoDialog = observer(function ({
18
+ model,
19
+ onClose,
20
+ }: {
21
+ model: { name: string; data: string }
22
+ onClose: () => void
23
+ }) {
24
+ const [label, setLabel] = useState('Copy to clipboard')
25
+ const { classes } = useStyles()
26
+ return (
27
+ <Dialog
28
+ open
29
+ onClose={onClose}
30
+ fullWidth
31
+ maxWidth="lg"
32
+ title={`Track info - ${model.name}`}
33
+ >
34
+ <DialogContent>
35
+ <Button
36
+ variant="contained"
37
+ color="primary"
38
+ onClick={() => {
39
+ copy(model.data)
40
+ setLabel('Copied!')
41
+ setTimeout(() => {
42
+ setLabel('Copy to clipboard')
43
+ }, 300)
44
+ }}
45
+ >
46
+ {label}
47
+ </Button>
48
+ <pre className={classes.textArea}>{model.data}</pre>
49
+ </DialogContent>
50
+ <DialogActions>
51
+ <Button variant="contained" onClick={onClose} color="secondary">
52
+ Close
53
+ </Button>
54
+ </DialogActions>
55
+ </Dialog>
56
+ )
57
+ })
58
+
59
+ export default TrackInfoDialog
@@ -0,0 +1,61 @@
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
+ open,
21
+ }: {
22
+ model: MsaViewModel
23
+ onClose: () => void
24
+ open: boolean
25
+ }) {
26
+ const { tracks } = model
27
+
28
+ return (
29
+ <Dialog onClose={() => onClose()} open={open} title="Add track">
30
+ <DialogContent>
31
+ <Typography>
32
+ Open relevant per-alignment tracks e.g. protein domains
33
+ </Typography>
34
+
35
+ <FormGroup>
36
+ {tracks.map(track => {
37
+ return (
38
+ <FormControlLabel
39
+ key={track.model.id}
40
+ control={
41
+ <Checkbox
42
+ checked={!model.turnedOffTracks.has(track.model.id)}
43
+ onChange={() => {
44
+ model.toggleTrack(track.model.id)
45
+ }}
46
+ />
47
+ }
48
+ label={track.model.name}
49
+ />
50
+ )
51
+ })}
52
+ </FormGroup>
53
+ <DialogActions>
54
+ <Button onClick={() => onClose()} variant="contained" color="primary">
55
+ Close
56
+ </Button>
57
+ </DialogActions>
58
+ </DialogContent>
59
+ </Dialog>
60
+ )
61
+ })