react-msaview 3.1.7 → 3.1.8

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 (270) hide show
  1. package/bundle/index.js +32 -32
  2. package/dist/components/Checkbox2.d.ts +7 -0
  3. package/dist/components/Checkbox2.js +10 -0
  4. package/dist/components/Checkbox2.js.map +1 -0
  5. package/dist/components/Loading.js +12 -4
  6. package/dist/components/Loading.js.map +1 -1
  7. package/dist/components/MSAView.js +5 -8
  8. package/dist/components/MSAView.js.map +1 -1
  9. package/dist/components/SequenceTextArea.d.ts +4 -0
  10. package/dist/components/SequenceTextArea.js +38 -0
  11. package/dist/components/SequenceTextArea.js.map +1 -0
  12. package/dist/components/Track.js +9 -8
  13. package/dist/components/Track.js.map +1 -1
  14. package/dist/components/dialogs/AddTrackDialog.js +0 -1
  15. package/dist/components/dialogs/AddTrackDialog.js.map +1 -1
  16. package/dist/components/{ExportSVGDialog.d.ts → dialogs/ExportSVGDialog.d.ts} +1 -1
  17. package/dist/components/{ExportSVGDialog.js → dialogs/ExportSVGDialog.js} +3 -4
  18. package/dist/components/dialogs/ExportSVGDialog.js.map +1 -0
  19. package/dist/components/dialogs/FeatureDialog.d.ts +7 -0
  20. package/dist/components/dialogs/FeatureDialog.js +52 -0
  21. package/dist/components/dialogs/FeatureDialog.js.map +1 -0
  22. package/dist/components/dialogs/InterProScanDialog.d.ts +7 -0
  23. package/dist/components/dialogs/InterProScanDialog.js +163 -0
  24. package/dist/components/dialogs/InterProScanDialog.js.map +1 -0
  25. package/dist/components/dialogs/MetadataDialog.js +6 -3
  26. package/dist/components/dialogs/MetadataDialog.js.map +1 -1
  27. package/dist/components/dialogs/SettingsDialog.js +6 -11
  28. package/dist/components/dialogs/SettingsDialog.js.map +1 -1
  29. package/dist/components/{Header.d.ts → header/Header.d.ts} +1 -1
  30. package/dist/components/header/Header.js +30 -0
  31. package/dist/components/header/Header.js.map +1 -0
  32. package/dist/components/{HeaderInfoArea.d.ts → header/HeaderInfoArea.d.ts} +2 -2
  33. package/dist/components/header/HeaderInfoArea.js +20 -0
  34. package/dist/components/header/HeaderInfoArea.js.map +1 -0
  35. package/dist/components/header/HeaderMenu.d.ts +6 -0
  36. package/dist/components/header/HeaderMenu.js +40 -0
  37. package/dist/components/header/HeaderMenu.js.map +1 -0
  38. package/dist/components/header/HeaderMenuExtra.d.ts +6 -0
  39. package/dist/components/header/HeaderMenuExtra.js +92 -0
  40. package/dist/components/header/HeaderMenuExtra.js.map +1 -0
  41. package/dist/components/header/HeaderStatusArea.d.ts +6 -0
  42. package/dist/components/header/HeaderStatusArea.js +20 -0
  43. package/dist/components/header/HeaderStatusArea.js.map +1 -0
  44. package/dist/components/{MultiAlignmentSelector.d.ts → header/MultiAlignmentSelector.d.ts} +1 -1
  45. package/dist/components/header/MultiAlignmentSelector.js.map +1 -0
  46. package/dist/components/{ZoomControls.d.ts → header/ZoomControls.d.ts} +1 -1
  47. package/dist/components/header/ZoomControls.js +15 -0
  48. package/dist/components/header/ZoomControls.js.map +1 -0
  49. package/dist/components/{ImportForm/index.js → import/ImportForm.js} +1 -1
  50. package/dist/components/import/ImportForm.js.map +1 -0
  51. package/dist/components/{ImportForm → import}/ImportFormExamples.js +6 -2
  52. package/dist/components/import/ImportFormExamples.js.map +1 -0
  53. package/dist/components/import/data/seq2.js.map +1 -0
  54. package/dist/components/import/util.js +10 -0
  55. package/dist/components/import/util.js.map +1 -0
  56. package/dist/components/{Minimap.d.ts → minimap/Minimap.d.ts} +1 -1
  57. package/dist/components/minimap/Minimap.js.map +1 -0
  58. package/dist/components/{MinimapSVG.d.ts → minimap/MinimapSVG.d.ts} +1 -1
  59. package/dist/components/minimap/MinimapSVG.js.map +1 -0
  60. package/dist/components/msa/Loading.js.map +1 -0
  61. package/dist/components/{MSAPanel → msa}/MSACanvas.js +3 -2
  62. package/dist/components/msa/MSACanvas.js.map +1 -0
  63. package/dist/components/{MSAPanel/MSABlock.js → msa/MSACanvasBlock.js} +21 -9
  64. package/dist/components/msa/MSACanvasBlock.js.map +1 -0
  65. package/dist/components/msa/MSAMouseoverCanvas.js.map +1 -0
  66. package/dist/components/msa/MSAPanel.d.ts +6 -0
  67. package/dist/components/{MSAPanel/index.js → msa/MSAPanel.js} +6 -3
  68. package/dist/components/msa/MSAPanel.js.map +1 -0
  69. package/dist/components/msa/renderBoxFeatureCanvasBlock.d.ts +9 -0
  70. package/dist/components/msa/renderBoxFeatureCanvasBlock.js +44 -0
  71. package/dist/components/msa/renderBoxFeatureCanvasBlock.js.map +1 -0
  72. package/dist/components/{MSAPanel → msa}/renderMSABlock.js +24 -20
  73. package/dist/components/msa/renderMSABlock.js.map +1 -0
  74. package/dist/components/msa/renderMSAMouseover.js.map +1 -0
  75. package/dist/components/tree/TreeBranchMenu.js.map +1 -0
  76. package/dist/components/{TreePanel → tree}/TreeCanvas.js +1 -1
  77. package/dist/components/tree/TreeCanvas.js.map +1 -0
  78. package/dist/components/{TreePanel → tree}/TreeCanvasBlock.js +1 -1
  79. package/dist/components/tree/TreeCanvasBlock.js.map +1 -0
  80. package/dist/components/{TreePanel → tree}/TreeNodeMenu.js +2 -33
  81. package/dist/components/tree/TreeNodeMenu.js.map +1 -0
  82. package/dist/components/{TreePanel/index.js → tree/TreePanel.js} +2 -2
  83. package/dist/components/tree/TreePanel.js.map +1 -0
  84. package/dist/components/tree/TreeRuler.js.map +1 -0
  85. package/dist/components/{TreePanel → tree}/dialogs/TreeNodeInfoDialog.js +6 -2
  86. package/dist/components/tree/dialogs/TreeNodeInfoDialog.js.map +1 -0
  87. package/dist/components/{TreePanel → tree}/renderTreeCanvas.js +23 -37
  88. package/dist/components/tree/renderTreeCanvas.js.map +1 -0
  89. package/dist/fetchUtils.d.ts +5 -0
  90. package/dist/fetchUtils.js +23 -0
  91. package/dist/fetchUtils.js.map +1 -0
  92. package/dist/ggplotPalettes.d.ts +3 -0
  93. package/dist/ggplotPalettes.js +24 -0
  94. package/dist/ggplotPalettes.js.map +1 -0
  95. package/dist/index.d.ts +1 -1
  96. package/dist/index.js +1 -1
  97. package/dist/index.js.map +1 -1
  98. package/dist/launchInterProScan.d.ts +32 -0
  99. package/dist/launchInterProScan.js +47 -0
  100. package/dist/launchInterProScan.js.map +1 -0
  101. package/dist/model/DataModel.js.map +1 -0
  102. package/dist/model/DialogQueue.js.map +1 -0
  103. package/dist/model/msaModel.d.ts +14 -0
  104. package/dist/model/msaModel.js +36 -0
  105. package/dist/model/msaModel.js.map +1 -0
  106. package/dist/model/treeModel.d.ts +46 -0
  107. package/dist/model/treeModel.js +105 -0
  108. package/dist/model/treeModel.js.map +1 -0
  109. package/dist/model.d.ts +261 -273
  110. package/dist/model.js +1043 -1029
  111. package/dist/model.js.map +1 -1
  112. package/dist/parseGFF.d.ts +10 -0
  113. package/dist/parseGFF.js +29 -0
  114. package/dist/parseGFF.js.map +1 -0
  115. package/dist/renderToSvg.js +23 -9
  116. package/dist/renderToSvg.js.map +1 -1
  117. package/dist/reparseTree.d.ts +2 -0
  118. package/dist/reparseTree.js +13 -0
  119. package/dist/reparseTree.js.map +1 -0
  120. package/dist/util.d.ts +4 -10
  121. package/dist/util.js +3 -28
  122. package/dist/util.js.map +1 -1
  123. package/dist/version.d.ts +1 -1
  124. package/dist/version.js +1 -1
  125. package/package.json +12 -2
  126. package/src/components/Checkbox2.tsx +34 -0
  127. package/src/components/Loading.tsx +27 -11
  128. package/src/components/MSAView.tsx +6 -10
  129. package/src/components/SequenceTextArea.tsx +63 -0
  130. package/src/components/Track.tsx +8 -13
  131. package/src/components/dialogs/AddTrackDialog.tsx +0 -1
  132. package/src/components/{ExportSVGDialog.tsx → dialogs/ExportSVGDialog.tsx} +9 -16
  133. package/src/components/dialogs/FeatureDialog.tsx +109 -0
  134. package/src/components/dialogs/InterProScanDialog.tsx +230 -0
  135. package/src/components/dialogs/MetadataDialog.tsx +9 -2
  136. package/src/components/dialogs/SettingsDialog.tsx +10 -30
  137. package/src/components/header/Header.tsx +44 -0
  138. package/src/components/header/HeaderInfoArea.tsx +27 -0
  139. package/src/components/header/HeaderMenu.tsx +54 -0
  140. package/src/components/header/HeaderMenuExtra.tsx +108 -0
  141. package/src/components/header/HeaderStatusArea.tsx +31 -0
  142. package/src/components/{MultiAlignmentSelector.tsx → header/MultiAlignmentSelector.tsx} +1 -1
  143. package/src/components/header/ZoomControls.tsx +28 -0
  144. package/src/components/{ImportForm → import}/ImportFormExamples.tsx +12 -1
  145. package/src/components/{ImportForm → import}/util.ts +5 -10
  146. package/src/components/{Minimap.tsx → minimap/Minimap.tsx} +1 -1
  147. package/src/components/{MinimapSVG.tsx → minimap/MinimapSVG.tsx} +1 -1
  148. package/src/components/{MSAPanel → msa}/MSACanvas.tsx +3 -2
  149. package/src/components/{MSAPanel/MSABlock.tsx → msa/MSACanvasBlock.tsx} +25 -12
  150. package/src/components/{MSAPanel/index.tsx → msa/MSAPanel.tsx} +8 -2
  151. package/src/components/msa/renderBoxFeatureCanvasBlock.ts +88 -0
  152. package/src/components/{MSAPanel → msa}/renderMSABlock.ts +26 -20
  153. package/src/components/{TreePanel → tree}/TreeCanvas.tsx +1 -1
  154. package/src/components/{TreePanel → tree}/TreeCanvasBlock.tsx +1 -1
  155. package/src/components/{TreePanel → tree}/TreeNodeMenu.tsx +1 -53
  156. package/src/components/{TreePanel/index.tsx → tree/TreePanel.tsx} +1 -1
  157. package/src/components/{TreePanel → tree}/dialogs/TreeNodeInfoDialog.tsx +9 -2
  158. package/src/components/{TreePanel → tree}/renderTreeCanvas.ts +25 -41
  159. package/src/fetchUtils.ts +30 -0
  160. package/src/ggplotPalettes.ts +25 -0
  161. package/src/index.ts +1 -1
  162. package/src/launchInterProScan.ts +98 -0
  163. package/src/model/msaModel.ts +39 -0
  164. package/src/model/treeModel.ts +116 -0
  165. package/src/model.ts +1124 -1126
  166. package/src/parseGFF.ts +32 -0
  167. package/src/renderToSvg.tsx +27 -8
  168. package/src/reparseTree.ts +16 -0
  169. package/src/util.ts +4 -33
  170. package/src/version.ts +1 -1
  171. package/dist/DataModel.js.map +0 -1
  172. package/dist/DialogQueue.js.map +0 -1
  173. package/dist/SelectedStructuresMixin.d.ts +0 -46
  174. package/dist/SelectedStructuresMixin.js +0 -52
  175. package/dist/SelectedStructuresMixin.js.map +0 -1
  176. package/dist/StructureModel.d.ts +0 -9
  177. package/dist/StructureModel.js +0 -11
  178. package/dist/StructureModel.js.map +0 -1
  179. package/dist/UniprotTrack.d.ts +0 -27
  180. package/dist/UniprotTrack.js +0 -53
  181. package/dist/UniprotTrack.js.map +0 -1
  182. package/dist/components/BoxTrack.d.ts +0 -7
  183. package/dist/components/BoxTrack.js +0 -15
  184. package/dist/components/BoxTrack.js.map +0 -1
  185. package/dist/components/BoxTrackBlock.d.ts +0 -8
  186. package/dist/components/BoxTrackBlock.js +0 -136
  187. package/dist/components/BoxTrackBlock.js.map +0 -1
  188. package/dist/components/ExportSVGDialog.js.map +0 -1
  189. package/dist/components/Header.js +0 -62
  190. package/dist/components/Header.js.map +0 -1
  191. package/dist/components/HeaderInfoArea.js +0 -12
  192. package/dist/components/HeaderInfoArea.js.map +0 -1
  193. package/dist/components/ImportForm/ImportFormExamples.js.map +0 -1
  194. package/dist/components/ImportForm/data/seq2.js.map +0 -1
  195. package/dist/components/ImportForm/index.js.map +0 -1
  196. package/dist/components/ImportForm/util.js +0 -16
  197. package/dist/components/ImportForm/util.js.map +0 -1
  198. package/dist/components/MSAPanel/Loading.js.map +0 -1
  199. package/dist/components/MSAPanel/MSABlock.js.map +0 -1
  200. package/dist/components/MSAPanel/MSACanvas.js.map +0 -1
  201. package/dist/components/MSAPanel/MSAMouseoverCanvas.js.map +0 -1
  202. package/dist/components/MSAPanel/index.d.ts +0 -5
  203. package/dist/components/MSAPanel/index.js.map +0 -1
  204. package/dist/components/MSAPanel/renderMSABlock.js.map +0 -1
  205. package/dist/components/MSAPanel/renderMSAMouseover.js.map +0 -1
  206. package/dist/components/Minimap.js.map +0 -1
  207. package/dist/components/MinimapSVG.js.map +0 -1
  208. package/dist/components/MultiAlignmentSelector.js.map +0 -1
  209. package/dist/components/TreePanel/TreeBranchMenu.js.map +0 -1
  210. package/dist/components/TreePanel/TreeCanvas.js.map +0 -1
  211. package/dist/components/TreePanel/TreeCanvasBlock.js.map +0 -1
  212. package/dist/components/TreePanel/TreeNodeMenu.js.map +0 -1
  213. package/dist/components/TreePanel/TreeRuler.js.map +0 -1
  214. package/dist/components/TreePanel/dialogs/TreeNodeInfoDialog.js.map +0 -1
  215. package/dist/components/TreePanel/index.js.map +0 -1
  216. package/dist/components/TreePanel/renderTreeCanvas.js.map +0 -1
  217. package/dist/components/VerticalGuide.d.ts +0 -7
  218. package/dist/components/VerticalGuide.js +0 -30
  219. package/dist/components/VerticalGuide.js.map +0 -1
  220. package/dist/components/ZoomControls.js +0 -59
  221. package/dist/components/ZoomControls.js.map +0 -1
  222. package/src/SelectedStructuresMixin.ts +0 -59
  223. package/src/StructureModel.ts +0 -11
  224. package/src/UniprotTrack.ts +0 -59
  225. package/src/components/BoxTrack.tsx +0 -33
  226. package/src/components/BoxTrackBlock.tsx +0 -200
  227. package/src/components/Header.tsx +0 -99
  228. package/src/components/HeaderInfoArea.tsx +0 -21
  229. package/src/components/VerticalGuide.tsx +0 -50
  230. package/src/components/ZoomControls.tsx +0 -86
  231. package/dist/components/{MultiAlignmentSelector.js → header/MultiAlignmentSelector.js} +0 -0
  232. package/dist/components/{ImportForm/index.d.ts → import/ImportForm.d.ts} +0 -0
  233. package/dist/components/{ImportForm → import}/ImportFormExamples.d.ts +0 -0
  234. package/dist/components/{ImportForm → import}/data/seq2.d.ts +0 -0
  235. package/dist/components/{ImportForm → import}/data/seq2.js +0 -0
  236. package/dist/components/{ImportForm → import}/util.d.ts +0 -0
  237. package/dist/components/{Minimap.js → minimap/Minimap.js} +0 -0
  238. package/dist/components/{MinimapSVG.js → minimap/MinimapSVG.js} +0 -0
  239. package/dist/components/{MSAPanel → msa}/Loading.d.ts +0 -0
  240. package/dist/components/{MSAPanel → msa}/Loading.js +0 -0
  241. package/dist/components/{MSAPanel → msa}/MSACanvas.d.ts +0 -0
  242. package/dist/components/{MSAPanel/MSABlock.d.ts → msa/MSACanvasBlock.d.ts} +0 -0
  243. package/dist/components/{MSAPanel → msa}/MSAMouseoverCanvas.d.ts +0 -0
  244. package/dist/components/{MSAPanel → msa}/MSAMouseoverCanvas.js +0 -0
  245. package/dist/components/{MSAPanel → msa}/renderMSABlock.d.ts +1 -1
  246. /package/dist/components/{MSAPanel → msa}/renderMSAMouseover.d.ts +0 -0
  247. /package/dist/components/{MSAPanel → msa}/renderMSAMouseover.js +0 -0
  248. /package/dist/components/{TreePanel → tree}/TreeBranchMenu.d.ts +0 -0
  249. /package/dist/components/{TreePanel → tree}/TreeBranchMenu.js +0 -0
  250. /package/dist/components/{TreePanel → tree}/TreeCanvas.d.ts +0 -0
  251. /package/dist/components/{TreePanel → tree}/TreeCanvasBlock.d.ts +0 -0
  252. /package/dist/components/{TreePanel → tree}/TreeNodeMenu.d.ts +0 -0
  253. /package/dist/components/{TreePanel/index.d.ts → tree/TreePanel.d.ts} +0 -0
  254. /package/dist/components/{TreePanel → tree}/TreeRuler.d.ts +0 -0
  255. /package/dist/components/{TreePanel → tree}/TreeRuler.js +0 -0
  256. /package/dist/components/{TreePanel → tree}/dialogs/TreeNodeInfoDialog.d.ts +0 -0
  257. /package/dist/components/{TreePanel → tree}/renderTreeCanvas.d.ts +0 -0
  258. /package/dist/{DataModel.d.ts → model/DataModel.d.ts} +0 -0
  259. /package/dist/{DataModel.js → model/DataModel.js} +0 -0
  260. /package/dist/{DialogQueue.d.ts → model/DialogQueue.d.ts} +0 -0
  261. /package/dist/{DialogQueue.js → model/DialogQueue.js} +0 -0
  262. /package/src/components/{ImportForm/index.tsx → import/ImportForm.tsx} +0 -0
  263. /package/src/components/{ImportForm → import}/data/seq2.ts +0 -0
  264. /package/src/components/{MSAPanel → msa}/Loading.tsx +0 -0
  265. /package/src/components/{MSAPanel → msa}/MSAMouseoverCanvas.tsx +0 -0
  266. /package/src/components/{MSAPanel → msa}/renderMSAMouseover.ts +0 -0
  267. /package/src/components/{TreePanel → tree}/TreeBranchMenu.tsx +0 -0
  268. /package/src/components/{TreePanel → tree}/TreeRuler.tsx +0 -0
  269. /package/src/{DataModel.ts → model/DataModel.ts} +0 -0
  270. /package/src/{DialogQueue.ts → model/DialogQueue.ts} +0 -0
@@ -1,200 +0,0 @@
1
- import React, { useRef, useMemo, useEffect } from 'react'
2
- import { observer } from 'mobx-react'
3
- import { getSnapshot, isStateTreeNode } from 'mobx-state-tree'
4
-
5
- // locals
6
- import { IBoxTrack, MsaViewModel } from '../model'
7
- import Layout from '../layout'
8
-
9
- interface Feat {
10
- start: number
11
- end: number
12
- }
13
-
14
- const BoxTrackBlock = observer(function ({
15
- track,
16
- model,
17
- offsetX,
18
- }: {
19
- track: IBoxTrack
20
- model: MsaViewModel
21
- offsetX: number
22
- }) {
23
- const {
24
- blockSize,
25
- colWidth,
26
- blanks,
27
- rowHeight,
28
- highResScaleFactor,
29
- fontSize,
30
- scrollX,
31
- } = model
32
- const { height, features, associatedRowName } = track.model
33
-
34
- const feats: Feat[] = isStateTreeNode(features)
35
- ? // @ts-expect-error
36
- getSnapshot(features)
37
- : features
38
-
39
- const layout = useMemo(() => {
40
- const temp = new Layout()
41
-
42
- feats?.forEach((feature, index) => {
43
- const { start, end } = feature
44
- if (associatedRowName) {
45
- const s = model.rowSpecificBpToPx(associatedRowName, start - 1)
46
- const e = model.rowSpecificBpToPx(associatedRowName, end)
47
- temp.addRect(`${index}`, s, e, rowHeight, feature)
48
- } else {
49
- const s = model.globalBpToPx(start - 1)
50
- const e = model.globalBpToPx(end)
51
- temp.addRect(`${index}`, s, e, rowHeight, feature)
52
- }
53
- })
54
- return temp
55
-
56
- // might convert to autorun based drawing
57
- // eslint-disable-next-line react-hooks/exhaustive-deps
58
- }, [rowHeight, feats, associatedRowName, model, blanks])
59
-
60
- const ref = useRef<HTMLCanvasElement>(null)
61
- const labelRef = useRef<HTMLCanvasElement>(null)
62
- const mouseoverRef = useRef<HTMLCanvasElement>(null)
63
-
64
- useEffect(() => {
65
- if (!ref.current) {
66
- return
67
- }
68
-
69
- const ctx = ref.current.getContext('2d')
70
- if (!ctx) {
71
- return
72
- }
73
-
74
- ctx.resetTransform()
75
- ctx.scale(highResScaleFactor, highResScaleFactor)
76
- ctx.clearRect(0, 0, blockSize, height)
77
- ctx.translate(-offsetX, 0)
78
- ctx.textAlign = 'center'
79
- ctx.font = ctx.font.replace(/\d+px/, `${fontSize}px`)
80
-
81
- const xStart = Math.max(0, Math.floor(offsetX / colWidth))
82
- ctx.fillStyle = 'goldenrod'
83
- layout.rectangles.forEach(value => {
84
- const { minX, maxX, minY, maxY } = value
85
-
86
- const x1 = (minX - xStart) * colWidth + offsetX - (offsetX % colWidth)
87
- const x2 = (maxX - xStart) * colWidth + offsetX - (offsetX % colWidth)
88
-
89
- if (x2 - x1 > 0) {
90
- ctx.fillRect(x1, minY, x2 - x1, (maxY - minY) / 2)
91
- }
92
- })
93
- }, [
94
- associatedRowName,
95
- fontSize,
96
- blockSize,
97
- colWidth,
98
- layout.rectangles,
99
- model,
100
- rowHeight,
101
- height,
102
- offsetX,
103
- highResScaleFactor,
104
- features,
105
- blanks,
106
- ])
107
-
108
- useEffect(() => {
109
- if (!labelRef.current) {
110
- return
111
- }
112
-
113
- const ctx = labelRef.current.getContext('2d')
114
- if (!ctx) {
115
- return
116
- }
117
-
118
- // this logic is very similar to MSACanvas
119
- ctx.resetTransform()
120
- ctx.scale(highResScaleFactor, highResScaleFactor)
121
- ctx.clearRect(0, 0, blockSize, height)
122
- ctx.translate(-offsetX, 0)
123
- ctx.textAlign = 'center'
124
- ctx.font = ctx.font.replace(/\d+px/, `${Math.max(8, rowHeight - 8)}px`)
125
-
126
- ctx.fillStyle = 'black'
127
- ctx.textAlign = 'left'
128
- for (const value of layout.rectangles.values()) {
129
- const { minX, maxX, maxY, minY, data } = value
130
-
131
- const x1 = minX * colWidth
132
- const x2 = maxX * colWidth
133
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
134
- const feature = data as any
135
-
136
- if (x2 - x1 > 0) {
137
- const note = feature.attributes?.Note?.[0]
138
- const name = feature.attributes?.Name?.[0]
139
- const type = feature.type
140
- ctx.fillText(
141
- [type, name, note].filter(f => !!f).join(' - '),
142
- Math.max(Math.min(-scrollX, x2), x1),
143
- minY + (maxY - minY),
144
- )
145
- }
146
- }
147
- }, [
148
- blockSize,
149
- colWidth,
150
- scrollX,
151
- highResScaleFactor,
152
- height,
153
- layout.rectangles,
154
- offsetX,
155
- features,
156
- model,
157
- rowHeight,
158
- blanks,
159
- ])
160
-
161
- return !features ? null : (
162
- <>
163
- <canvas
164
- ref={ref}
165
- height={height * highResScaleFactor}
166
- width={blockSize * highResScaleFactor}
167
- style={{
168
- position: 'absolute',
169
- left: scrollX + offsetX,
170
- width: blockSize,
171
- height,
172
- }}
173
- />
174
- <canvas
175
- ref={labelRef}
176
- height={height * highResScaleFactor}
177
- width={blockSize * highResScaleFactor}
178
- style={{
179
- position: 'absolute',
180
- left: scrollX + offsetX,
181
- width: blockSize,
182
- height,
183
- }}
184
- />
185
- <canvas
186
- ref={mouseoverRef}
187
- height={height * highResScaleFactor}
188
- width={blockSize * highResScaleFactor}
189
- style={{
190
- position: 'absolute',
191
- left: scrollX + offsetX,
192
- width: blockSize,
193
- height,
194
- }}
195
- />
196
- </>
197
- )
198
- })
199
-
200
- export default BoxTrackBlock
@@ -1,99 +0,0 @@
1
- import React, { Suspense, lazy, useState } from 'react'
2
- import { IconButton } from '@mui/material'
3
- import { observer } from 'mobx-react'
4
-
5
- // locals
6
- import { MsaViewModel } from '../model'
7
-
8
- // icons
9
- import FolderOpen from '@mui/icons-material/FolderOpen'
10
- import Settings from '@mui/icons-material/Settings'
11
- import Help from '@mui/icons-material/Help'
12
- import Assignment from '@mui/icons-material/Assignment'
13
- import List from '@mui/icons-material/List'
14
-
15
- // locals
16
- import ZoomControls from './ZoomControls'
17
- import MultiAlignmentSelector from './MultiAlignmentSelector'
18
- import HeaderInfoArea from './HeaderInfoArea'
19
-
20
- const SettingsDialog = lazy(() => import('./dialogs/SettingsDialog'))
21
- const AboutDialog = lazy(() => import('./dialogs/AboutDialog'))
22
- const MetadataDialog = lazy(() => import('./dialogs/MetadataDialog'))
23
- const TracklistDialog = lazy(() => import('./dialogs/TracklistDialog'))
24
-
25
- const Header = observer(function ({ model }: { model: MsaViewModel }) {
26
- const [settingsDialogViz, setSettingsDialogViz] = useState(false)
27
- const [aboutDialogViz, setAboutDialogViz] = useState(false)
28
- const [detailsDialogViz, setMetadataDialogViz] = useState(false)
29
- const [tracklistDialogViz, setTracklistDialogViz] = useState(false)
30
-
31
- return (
32
- <div style={{ display: 'flex' }}>
33
- <IconButton
34
- onClick={async () => {
35
- try {
36
- model.setData({ tree: '', msa: '' })
37
- model.clearSelectedStructures()
38
- model.setScrollY(0)
39
- model.setScrollX(0)
40
- model.setCurrentAlignment(0)
41
- await model.setTreeFilehandle(undefined)
42
- await model.setMSAFilehandle(undefined)
43
- } catch (e) {
44
- console.error(e)
45
- model.setError(e)
46
- }
47
- }}
48
- >
49
- <FolderOpen />
50
- </IconButton>
51
- <IconButton onClick={() => setSettingsDialogViz(true)}>
52
- <Settings />
53
- </IconButton>
54
- <IconButton onClick={() => setMetadataDialogViz(true)}>
55
- <Assignment />
56
- </IconButton>
57
- <IconButton onClick={() => setTracklistDialogViz(true)}>
58
- <List />
59
- </IconButton>
60
- <Suspense fallback={null}>
61
- {settingsDialogViz ? (
62
- <SettingsDialog
63
- model={model}
64
- onClose={() => setSettingsDialogViz(false)}
65
- />
66
- ) : null}
67
- {aboutDialogViz ? (
68
- <AboutDialog onClose={() => setAboutDialogViz(false)} />
69
- ) : null}
70
- {detailsDialogViz ? (
71
- <MetadataDialog
72
- model={model}
73
- onClose={() => setMetadataDialogViz(false)}
74
- />
75
- ) : null}
76
-
77
- {tracklistDialogViz ? (
78
- <TracklistDialog
79
- model={model}
80
- onClose={() => setTracklistDialogViz(false)}
81
- />
82
- ) : null}
83
- </Suspense>
84
- <MultiAlignmentSelector model={model} />
85
- <ZoomControls model={model} />
86
- <HeaderInfoArea model={model} />
87
- <Spacer />
88
- <IconButton onClick={() => setAboutDialogViz(true)}>
89
- <Help />
90
- </IconButton>
91
- </div>
92
- )
93
- })
94
-
95
- function Spacer() {
96
- return <div style={{ flex: 1 }} />
97
- }
98
-
99
- export default Header
@@ -1,21 +0,0 @@
1
- import React from 'react'
2
- import { Typography } from '@mui/material'
3
- import { observer } from 'mobx-react'
4
-
5
- // locals
6
- import { MsaViewModel } from '../model'
7
-
8
- const HeaderInfoArea = observer(({ model }: { model: MsaViewModel }) => {
9
- const { mouseOverRowName, mouseCol } = model
10
- return (
11
- <div>
12
- {mouseOverRowName && mouseCol !== undefined ? (
13
- <Typography>
14
- {mouseOverRowName}:{model.relativePxToBp(mouseOverRowName, mouseCol)}
15
- </Typography>
16
- ) : null}
17
- </div>
18
- )
19
- })
20
-
21
- export default HeaderInfoArea
@@ -1,50 +0,0 @@
1
- import React from 'react'
2
-
3
- import { observer } from 'mobx-react'
4
- import { makeStyles } from 'tss-react/mui'
5
- import { Tooltip } from '@mui/material'
6
-
7
- // icons
8
- import { MsaViewModel } from '../model'
9
-
10
- const useStyles = makeStyles()({
11
- guide: {
12
- pointerEvents: 'none',
13
- height: '100%',
14
- width: 1,
15
- position: 'absolute',
16
- zIndex: 10,
17
- },
18
- })
19
-
20
- const VerticalGuide = observer(function ({
21
- model,
22
- coordX,
23
- }: {
24
- model: MsaViewModel
25
- coordX: number
26
- }) {
27
- const { treeAreaWidth } = model
28
- const { classes } = useStyles()
29
- return (
30
- <>
31
- <Tooltip open placement="top" title={`${model.pxToBp(coordX) + 1}`} arrow>
32
- <div
33
- style={{
34
- left: coordX + treeAreaWidth,
35
- position: 'absolute',
36
- height: 1,
37
- }}
38
- />
39
- </Tooltip>
40
- <div
41
- className={classes.guide}
42
- style={{
43
- left: coordX + treeAreaWidth,
44
- background: 'red',
45
- }}
46
- />
47
- </>
48
- )
49
- })
50
- export default VerticalGuide
@@ -1,86 +0,0 @@
1
- import React, { Suspense, lazy, useState } from 'react'
2
- import { IconButton } from '@mui/material'
3
- import { observer } from 'mobx-react'
4
- import CascadingMenuButton from '@jbrowse/core/ui/CascadingMenuButton'
5
-
6
- // locals
7
- import { MsaViewModel } from '../model'
8
-
9
- // icons
10
- import MoreVert from '@mui/icons-material/MoreVert'
11
- import ZoomIn from '@mui/icons-material/ZoomIn'
12
- import ZoomOut from '@mui/icons-material/ZoomOut'
13
-
14
- // lazies
15
- const ExportSVGDialog = lazy(() => import('./ExportSVGDialog'))
16
-
17
- const ZoomControls = observer(function ZoomControls({
18
- model,
19
- }: {
20
- model: MsaViewModel
21
- }) {
22
- const { colWidth, rowHeight } = model
23
- const [exportSvgDialogOpen, setExportSvgDialogOpen] = useState(false)
24
- return (
25
- <>
26
- <IconButton
27
- onClick={() => {
28
- model.setColWidth(Math.ceil(colWidth * 1.5))
29
- model.setRowHeight(Math.ceil(rowHeight * 1.5))
30
- }}
31
- >
32
- <ZoomIn />
33
- </IconButton>
34
- <IconButton
35
- onClick={() => {
36
- model.setColWidth(Math.max(1, Math.floor(colWidth * 0.75)))
37
- model.setRowHeight(Math.max(1.5, Math.floor(rowHeight * 0.75)))
38
- }}
39
- >
40
- <ZoomOut />
41
- </IconButton>
42
- <CascadingMenuButton
43
- menuItems={[
44
- {
45
- label: 'Decrease row height',
46
- onClick: () => model.setRowHeight(Math.max(1.5, rowHeight * 0.75)),
47
- },
48
- {
49
- label: 'Increase row height',
50
- onClick: () => model.setRowHeight(rowHeight * 1.5),
51
- },
52
- {
53
- label: 'Decrease col width',
54
- onClick: () => model.setColWidth(Math.max(1, colWidth * 0.75)),
55
- },
56
- {
57
- label: 'Increase col width',
58
- onClick: () => model.setColWidth(colWidth * 1.5),
59
- },
60
- {
61
- label: 'Reset zoom to default',
62
- onClick: () => {
63
- model.setColWidth(16)
64
- model.setRowHeight(20)
65
- },
66
- },
67
- {
68
- label: 'Export SVG',
69
- onClick: () => setExportSvgDialogOpen(true),
70
- },
71
- ]}
72
- >
73
- <MoreVert />
74
- </CascadingMenuButton>
75
- {exportSvgDialogOpen ? (
76
- <Suspense fallback={null}>
77
- <ExportSVGDialog
78
- model={model}
79
- onClose={() => setExportSvgDialogOpen(false)}
80
- />
81
- </Suspense>
82
- ) : null}
83
- </>
84
- )
85
- })
86
- export default ZoomControls
File without changes
File without changes
File without changes
File without changes
@@ -1,5 +1,5 @@
1
- import { MsaViewModel } from '../../model';
2
1
  import { Theme } from '@mui/material';
2
+ import { MsaViewModel } from '../../model';
3
3
  export declare function renderMSABlock({ model, offsetX, offsetY, contrastScheme, ctx, theme, highResScaleFactorOverride, blockSizeXOverride, blockSizeYOverride, }: {
4
4
  offsetX: number;
5
5
  offsetY: number;
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes