react-msaview 9.0.0 → 9.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (352) hide show
  1. package/README.md +19 -10
  2. package/bundle/index.js +111 -115
  3. package/bundle/index.js.map +4 -4
  4. package/dist/blosum62.d.ts +3 -0
  5. package/dist/blosum62.js +43 -0
  6. package/dist/blosum62.js.map +1 -0
  7. package/dist/colorSchemes.js +2 -3
  8. package/dist/colorSchemes.js.map +1 -1
  9. package/dist/columnCounts.d.ts +0 -1
  10. package/dist/columnCounts.js +1 -1
  11. package/dist/columnCounts.js.map +1 -1
  12. package/dist/components/Loading.d.ts +3 -2
  13. package/dist/components/Loading.js +7 -7
  14. package/dist/components/Loading.js.map +1 -1
  15. package/dist/components/MSAView.d.ts +3 -2
  16. package/dist/components/MSAView.js +7 -4
  17. package/dist/components/MSAView.js.map +1 -1
  18. package/dist/components/MSAViewer.d.ts +1941 -4
  19. package/dist/components/MSAViewer.js +144 -201
  20. package/dist/components/MSAViewer.js.map +1 -1
  21. package/dist/components/MetadataTable.d.ts +4 -1
  22. package/dist/components/MetadataTable.js +55 -16
  23. package/dist/components/MetadataTable.js.map +1 -1
  24. package/dist/components/ResizeHandles.js +3 -2
  25. package/dist/components/ResizeHandles.js.map +1 -1
  26. package/dist/components/Track.js +8 -1
  27. package/dist/components/Track.js.map +1 -1
  28. package/dist/components/controls.d.ts +11 -0
  29. package/dist/components/controls.js +49 -0
  30. package/dist/components/controls.js.map +1 -0
  31. package/dist/components/dialogs/AnnotationFileDialog.js +12 -18
  32. package/dist/components/dialogs/AnnotationFileDialog.js.map +1 -1
  33. package/dist/components/dialogs/ExportSVGDialog.js +5 -7
  34. package/dist/components/dialogs/ExportSVGDialog.js.map +1 -1
  35. package/dist/components/dialogs/FeatureDialog.js +2 -2
  36. package/dist/components/dialogs/FeatureDialog.js.map +1 -1
  37. package/dist/components/{header/TreeSettingsMenu.d.ts → dialogs/GapThresholdDialog.d.ts} +3 -2
  38. package/dist/components/dialogs/GapThresholdDialog.js +15 -0
  39. package/dist/components/dialogs/GapThresholdDialog.js.map +1 -0
  40. package/dist/components/{header → dialogs}/GappynessSlider.d.ts +1 -1
  41. package/dist/components/{header → dialogs}/GappynessSlider.js +3 -10
  42. package/dist/components/dialogs/GappynessSlider.js.map +1 -0
  43. package/dist/components/{header → dialogs}/GoToBox.d.ts +4 -2
  44. package/dist/components/dialogs/GoToBox.js +48 -0
  45. package/dist/components/dialogs/GoToBox.js.map +1 -0
  46. package/dist/components/dialogs/GoToDialog.d.ts +6 -0
  47. package/dist/components/dialogs/GoToDialog.js +10 -0
  48. package/dist/components/dialogs/GoToDialog.js.map +1 -0
  49. package/dist/components/dialogs/HelpDialog.d.ts +6 -0
  50. package/dist/components/dialogs/HelpDialog.js +30 -0
  51. package/dist/components/dialogs/HelpDialog.js.map +1 -0
  52. package/dist/components/dialogs/MetadataDialog.js +11 -3
  53. package/dist/components/dialogs/MetadataDialog.js.map +1 -1
  54. package/dist/components/dialogs/goTo.d.ts +5 -0
  55. package/dist/components/{header → dialogs}/goTo.js +1 -1
  56. package/dist/components/dialogs/goTo.js.map +1 -0
  57. package/dist/components/dialogs/metadataLabels.d.ts +4 -0
  58. package/dist/components/dialogs/metadataLabels.js +52 -0
  59. package/dist/components/dialogs/metadataLabels.js.map +1 -0
  60. package/dist/components/dialogs/metadataRecord.d.ts +1 -0
  61. package/dist/components/dialogs/metadataRecord.js +38 -0
  62. package/dist/components/dialogs/metadataRecord.js.map +1 -0
  63. package/dist/components/header/Header.d.ts +6 -2
  64. package/dist/components/header/Header.js +30 -34
  65. package/dist/components/header/Header.js.map +1 -1
  66. package/dist/components/header/HiddenColumnsChip.d.ts +6 -0
  67. package/dist/components/header/HiddenColumnsChip.js +15 -0
  68. package/dist/components/header/HiddenColumnsChip.js.map +1 -0
  69. package/dist/components/header/{FileMenu.d.ts → MenuBar.d.ts} +3 -3
  70. package/dist/components/header/MenuBar.js +33 -0
  71. package/dist/components/header/MenuBar.js.map +1 -0
  72. package/dist/components/header/ScrollZoomCheckbox.d.ts +7 -0
  73. package/dist/components/header/ScrollZoomCheckbox.js +19 -0
  74. package/dist/components/header/ScrollZoomCheckbox.js.map +1 -0
  75. package/dist/components/header/ZoomControls.js +12 -48
  76. package/dist/components/header/ZoomControls.js.map +1 -1
  77. package/dist/components/header/colorSchemeMenuItems.d.ts +4 -0
  78. package/dist/components/header/colorSchemeMenuItems.js +106 -0
  79. package/dist/components/header/colorSchemeMenuItems.js.map +1 -0
  80. package/dist/components/header/getAnnotationsMenu.d.ts +3 -30
  81. package/dist/components/header/getAnnotationsMenu.js +48 -54
  82. package/dist/components/header/getAnnotationsMenu.js.map +1 -1
  83. package/dist/components/header/menuBarItems.d.ts +11 -0
  84. package/dist/components/header/menuBarItems.js +277 -0
  85. package/dist/components/header/menuBarItems.js.map +1 -0
  86. package/dist/components/import/ImportForm.js +12 -6
  87. package/dist/components/import/ImportForm.js.map +1 -1
  88. package/dist/components/import/data/seq2.d.ts +0 -1
  89. package/dist/components/import/data/seq2.js +0 -17
  90. package/dist/components/import/data/seq2.js.map +1 -1
  91. package/dist/components/minimap/Minimap.js +7 -3
  92. package/dist/components/minimap/Minimap.js.map +1 -1
  93. package/dist/components/minimap/MinimapSVG.js +2 -1
  94. package/dist/components/minimap/MinimapSVG.js.map +1 -1
  95. package/dist/components/minimap/minimapLayout.d.ts +12 -0
  96. package/dist/components/minimap/minimapLayout.js +20 -0
  97. package/dist/components/minimap/minimapLayout.js.map +1 -1
  98. package/dist/components/msa/MSACanvas.js +28 -10
  99. package/dist/components/msa/MSACanvas.js.map +1 -1
  100. package/dist/components/msa/MSACanvasBlock.js +17 -16
  101. package/dist/components/msa/MSACanvasBlock.js.map +1 -1
  102. package/dist/components/msa/MSAMouseoverCanvas.js +2 -2
  103. package/dist/components/msa/MSAMouseoverCanvas.js.map +1 -1
  104. package/dist/components/msa/WheelZoomHint.d.ts +7 -0
  105. package/dist/components/msa/WheelZoomHint.js +38 -0
  106. package/dist/components/msa/WheelZoomHint.js.map +1 -0
  107. package/dist/components/msa/drawFeatureSpans.d.ts +50 -11
  108. package/dist/components/msa/drawFeatureSpans.js +99 -56
  109. package/dist/components/msa/drawFeatureSpans.js.map +1 -1
  110. package/dist/components/msa/msaKeys.js +3 -0
  111. package/dist/components/msa/msaKeys.js.map +1 -1
  112. package/dist/components/msa/msaRaster.d.ts +14 -2
  113. package/dist/components/msa/msaRaster.js +20 -10
  114. package/dist/components/msa/msaRaster.js.map +1 -1
  115. package/dist/components/msa/renderBoxFeatureCanvasBlock.d.ts +9 -0
  116. package/dist/components/msa/renderBoxFeatureCanvasBlock.js +39 -8
  117. package/dist/components/msa/renderBoxFeatureCanvasBlock.js.map +1 -1
  118. package/dist/components/msa/renderHighlights.d.ts +2 -5
  119. package/dist/components/msa/renderHighlights.js +5 -6
  120. package/dist/components/msa/renderHighlights.js.map +1 -1
  121. package/dist/components/msa/renderMSABlock.d.ts +6 -1
  122. package/dist/components/msa/renderMSABlock.js +44 -17
  123. package/dist/components/msa/renderMSABlock.js.map +1 -1
  124. package/dist/components/msa/renderMSAMouseover.js +2 -1
  125. package/dist/components/msa/renderMSAMouseover.js.map +1 -1
  126. package/dist/components/msa/tileColor.js +7 -0
  127. package/dist/components/msa/tileColor.js.map +1 -1
  128. package/dist/components/renderCtx.d.ts +1 -1
  129. package/dist/components/rowpanels/RowPanelBlock.js +2 -2
  130. package/dist/components/rowpanels/RowPanelBlock.js.map +1 -1
  131. package/dist/components/rowpanels/renderFeaturePanel.d.ts +5 -1
  132. package/dist/components/rowpanels/renderFeaturePanel.js +12 -5
  133. package/dist/components/rowpanels/renderFeaturePanel.js.map +1 -1
  134. package/dist/components/settings/MenuItemsForm.d.ts +10 -0
  135. package/dist/components/settings/MenuItemsForm.js +80 -0
  136. package/dist/components/settings/MenuItemsForm.js.map +1 -0
  137. package/dist/components/settings/SettingsPanel.d.ts +12 -0
  138. package/dist/components/settings/SettingsPanel.js +92 -0
  139. package/dist/components/settings/SettingsPanel.js.map +1 -0
  140. package/dist/components/{header/ZoomMenu.d.ts → settings/TrackList.d.ts} +2 -2
  141. package/dist/components/settings/TrackList.js +55 -0
  142. package/dist/components/settings/TrackList.js.map +1 -0
  143. package/dist/components/tracks/TrackBlocks.js +2 -2
  144. package/dist/components/tracks/TrackBlocks.js.map +1 -1
  145. package/dist/components/tracks/drawTracks.d.ts +1 -53
  146. package/dist/components/tracks/drawTracks.js +5 -5
  147. package/dist/components/tracks/drawTracks.js.map +1 -1
  148. package/dist/components/tree/CladeLabels.d.ts +1 -1
  149. package/dist/components/tree/CladeLabels.js +22 -34
  150. package/dist/components/tree/CladeLabels.js.map +1 -1
  151. package/dist/components/tree/TreeCanvasBlock.js +2 -2
  152. package/dist/components/tree/TreeCanvasBlock.js.map +1 -1
  153. package/dist/components/tree/TreeMenu.js +4 -6
  154. package/dist/components/tree/TreeMenu.js.map +1 -1
  155. package/dist/components/tree/TreeOverview.js +2 -2
  156. package/dist/components/tree/TreeOverview.js.map +1 -1
  157. package/dist/components/tree/cladeBrackets.d.ts +17 -10
  158. package/dist/components/tree/cladeBrackets.js +33 -3
  159. package/dist/components/tree/cladeBrackets.js.map +1 -1
  160. package/dist/components/tree/renderTreeCanvas.js +2 -8
  161. package/dist/components/tree/renderTreeCanvas.js.map +1 -1
  162. package/dist/components/tree/renderTreeOverview.js +4 -11
  163. package/dist/components/tree/renderTreeOverview.js.map +1 -1
  164. package/dist/constants.d.ts +4 -1
  165. package/dist/constants.js +7 -1
  166. package/dist/constants.js.map +1 -1
  167. package/dist/darkReader.d.ts +7 -0
  168. package/dist/darkReader.js +42 -0
  169. package/dist/darkReader.js.map +1 -0
  170. package/dist/element.js +25 -53
  171. package/dist/element.js.map +1 -1
  172. package/dist/exportLayout.d.ts +39 -0
  173. package/dist/exportLayout.js +78 -0
  174. package/dist/exportLayout.js.map +1 -0
  175. package/dist/featurePanels.d.ts +37 -0
  176. package/dist/featurePanels.js +187 -0
  177. package/dist/featurePanels.js.map +1 -0
  178. package/dist/filehandleLoader.d.ts +41 -0
  179. package/dist/filehandleLoader.js +99 -0
  180. package/dist/filehandleLoader.js.map +1 -0
  181. package/dist/headlessRenderEnv.d.ts +12 -39
  182. package/dist/headlessRenderEnv.js +18 -12
  183. package/dist/headlessRenderEnv.js.map +1 -1
  184. package/dist/hierarchy.d.ts +5 -8
  185. package/dist/hierarchy.js +5 -79
  186. package/dist/hierarchy.js.map +1 -1
  187. package/dist/index.d.ts +6 -1
  188. package/dist/index.js +6 -1
  189. package/dist/index.js.map +1 -1
  190. package/dist/measureTextCanvas.d.ts +7 -0
  191. package/dist/measureTextCanvas.js +8 -6
  192. package/dist/measureTextCanvas.js.map +1 -1
  193. package/dist/model/treeModel.d.ts +6 -2
  194. package/dist/model/treeModel.js +8 -4
  195. package/dist/model/treeModel.js.map +1 -1
  196. package/dist/model.d.ts +180 -76
  197. package/dist/model.js +358 -618
  198. package/dist/model.js.map +1 -1
  199. package/dist/neighborJoining.js +1 -40
  200. package/dist/neighborJoining.js.map +1 -1
  201. package/dist/renderToSvg.d.ts +2 -7
  202. package/dist/renderToSvg.js +33 -133
  203. package/dist/renderToSvg.js.map +1 -1
  204. package/dist/rerootTree.d.ts +1 -0
  205. package/dist/rerootTree.js +7 -6
  206. package/dist/rerootTree.js.map +1 -1
  207. package/dist/schemeResidueColor.d.ts +12 -0
  208. package/dist/schemeResidueColor.js +33 -0
  209. package/dist/schemeResidueColor.js.map +1 -0
  210. package/dist/similarityColors.d.ts +11 -0
  211. package/dist/similarityColors.js +90 -0
  212. package/dist/similarityColors.js.map +1 -0
  213. package/dist/svgTestUtil.d.ts +74 -32
  214. package/dist/treeDisplay.d.ts +37 -0
  215. package/dist/treeDisplay.js +209 -0
  216. package/dist/treeDisplay.js.map +1 -0
  217. package/dist/types.d.ts +6 -3
  218. package/dist/useWheelScroll.d.ts +3 -1
  219. package/dist/useWheelScroll.js +36 -17
  220. package/dist/useWheelScroll.js.map +1 -1
  221. package/dist/util.d.ts +2 -0
  222. package/dist/util.js +2 -0
  223. package/dist/util.js.map +1 -1
  224. package/dist/version.d.ts +1 -1
  225. package/dist/version.js +1 -1
  226. package/dist/viewerSnapshot.d.ts +169 -0
  227. package/dist/viewerSnapshot.js +100 -0
  228. package/dist/viewerSnapshot.js.map +1 -0
  229. package/dist/wheelZoom.d.ts +8 -3
  230. package/dist/wheelZoom.js +44 -32
  231. package/dist/wheelZoom.js.map +1 -1
  232. package/dist/zoomSnapshot.d.ts +29 -0
  233. package/dist/zoomSnapshot.js +47 -0
  234. package/dist/zoomSnapshot.js.map +1 -0
  235. package/package.json +11 -11
  236. package/src/blosum62.ts +45 -0
  237. package/src/colorSchemes.ts +2 -4
  238. package/src/columnCounts.ts +1 -1
  239. package/src/components/Loading.tsx +25 -14
  240. package/src/components/MSAView.tsx +22 -5
  241. package/src/components/MSAViewer.tsx +275 -251
  242. package/src/components/MetadataTable.tsx +83 -26
  243. package/src/components/ResizeHandles.tsx +9 -2
  244. package/src/components/Track.tsx +15 -1
  245. package/src/components/controls.ts +62 -0
  246. package/src/components/dialogs/AnnotationFileDialog.tsx +16 -21
  247. package/src/components/dialogs/ExportSVGDialog.tsx +8 -19
  248. package/src/components/dialogs/FeatureDialog.tsx +2 -5
  249. package/src/components/dialogs/GapThresholdDialog.tsx +36 -0
  250. package/src/components/{header → dialogs}/GappynessSlider.tsx +3 -10
  251. package/src/components/{header → dialogs}/GoToBox.tsx +36 -10
  252. package/src/components/dialogs/GoToDialog.tsx +30 -0
  253. package/src/components/dialogs/HelpDialog.tsx +79 -0
  254. package/src/components/dialogs/MetadataDialog.tsx +32 -4
  255. package/src/components/{header → dialogs}/goTo.ts +1 -1
  256. package/src/components/dialogs/metadataLabels.ts +54 -0
  257. package/src/components/dialogs/metadataRecord.tsx +61 -0
  258. package/src/components/header/Header.tsx +75 -44
  259. package/src/components/header/HiddenColumnsChip.tsx +39 -0
  260. package/src/components/header/MenuBar.tsx +64 -0
  261. package/src/components/header/ScrollZoomCheckbox.tsx +46 -0
  262. package/src/components/header/ZoomControls.tsx +23 -74
  263. package/src/components/header/colorSchemeMenuItems.ts +121 -0
  264. package/src/components/header/getAnnotationsMenu.ts +52 -56
  265. package/src/components/header/menuBarItems.ts +357 -0
  266. package/src/components/import/ImportForm.tsx +19 -7
  267. package/src/components/import/data/seq2.ts +0 -18
  268. package/src/components/minimap/Minimap.tsx +11 -3
  269. package/src/components/minimap/MinimapSVG.tsx +17 -1
  270. package/src/components/minimap/minimapLayout.ts +27 -0
  271. package/src/components/msa/MSACanvas.tsx +24 -4
  272. package/src/components/msa/MSACanvasBlock.tsx +20 -17
  273. package/src/components/msa/MSAMouseoverCanvas.tsx +2 -2
  274. package/src/components/msa/WheelZoomHint.tsx +56 -0
  275. package/src/components/msa/drawFeatureSpans.ts +160 -79
  276. package/src/components/msa/msaKeys.ts +3 -0
  277. package/src/components/msa/msaRaster.ts +26 -10
  278. package/src/components/msa/renderBoxFeatureCanvasBlock.ts +62 -24
  279. package/src/components/msa/renderHighlights.ts +5 -6
  280. package/src/components/msa/renderMSABlock.ts +51 -15
  281. package/src/components/msa/renderMSAMouseover.ts +5 -1
  282. package/src/components/msa/tileColor.ts +7 -0
  283. package/src/components/renderCtx.ts +0 -1
  284. package/src/components/rowpanels/RowPanelBlock.tsx +2 -2
  285. package/src/components/rowpanels/renderFeaturePanel.ts +26 -7
  286. package/src/components/settings/MenuItemsForm.tsx +225 -0
  287. package/src/components/settings/SettingsPanel.tsx +156 -0
  288. package/src/components/settings/TrackList.tsx +119 -0
  289. package/src/components/tracks/TrackBlocks.tsx +2 -2
  290. package/src/components/tracks/drawTracks.ts +5 -5
  291. package/src/components/tree/CladeLabels.tsx +30 -54
  292. package/src/components/tree/TreeCanvasBlock.tsx +2 -2
  293. package/src/components/tree/TreeMenu.tsx +4 -6
  294. package/src/components/tree/TreeOverview.tsx +2 -2
  295. package/src/components/tree/cladeBrackets.ts +50 -3
  296. package/src/components/tree/renderTreeCanvas.ts +2 -13
  297. package/src/components/tree/renderTreeOverview.ts +7 -14
  298. package/src/constants.ts +9 -1
  299. package/src/darkReader.ts +57 -0
  300. package/src/element.ts +37 -64
  301. package/src/exportLayout.ts +134 -0
  302. package/src/featurePanels.ts +269 -0
  303. package/src/filehandleLoader.ts +136 -0
  304. package/src/headlessRenderEnv.ts +24 -11
  305. package/src/hierarchy.ts +5 -88
  306. package/src/index.ts +9 -5
  307. package/src/measureTextCanvas.ts +8 -6
  308. package/src/model/treeModel.ts +9 -3
  309. package/src/model.ts +452 -807
  310. package/src/neighborJoining.ts +1 -42
  311. package/src/renderToSvg.tsx +56 -207
  312. package/src/rerootTree.ts +7 -6
  313. package/src/schemeResidueColor.ts +37 -0
  314. package/src/similarityColors.ts +112 -0
  315. package/src/treeDisplay.ts +278 -0
  316. package/src/types.ts +6 -4
  317. package/src/useWheelScroll.ts +43 -22
  318. package/src/util.ts +3 -0
  319. package/src/version.ts +1 -1
  320. package/src/viewerSnapshot.ts +147 -0
  321. package/src/wheelZoom.ts +55 -33
  322. package/src/zoomSnapshot.ts +80 -0
  323. package/dist/components/header/ColorSchemeMenu.d.ts +0 -12
  324. package/dist/components/header/ColorSchemeMenu.js +0 -37
  325. package/dist/components/header/ColorSchemeMenu.js.map +0 -1
  326. package/dist/components/header/FileMenu.js +0 -66
  327. package/dist/components/header/FileMenu.js.map +0 -1
  328. package/dist/components/header/GappynessSlider.js.map +0 -1
  329. package/dist/components/header/GoToBox.js +0 -31
  330. package/dist/components/header/GoToBox.js.map +0 -1
  331. package/dist/components/header/MSASettingsMenu.d.ts +0 -6
  332. package/dist/components/header/MSASettingsMenu.js +0 -11
  333. package/dist/components/header/MSASettingsMenu.js.map +0 -1
  334. package/dist/components/header/ScrollZoomIcons.d.ts +0 -6
  335. package/dist/components/header/ScrollZoomIcons.js +0 -35
  336. package/dist/components/header/ScrollZoomIcons.js.map +0 -1
  337. package/dist/components/header/TreeSettingsMenu.js +0 -42
  338. package/dist/components/header/TreeSettingsMenu.js.map +0 -1
  339. package/dist/components/header/ZoomMenu.js +0 -37
  340. package/dist/components/header/ZoomMenu.js.map +0 -1
  341. package/dist/components/header/goTo.d.ts +0 -20
  342. package/dist/components/header/goTo.js.map +0 -1
  343. package/dist/components/header/settingsMenuItems.d.ts +0 -4
  344. package/dist/components/header/settingsMenuItems.js +0 -127
  345. package/dist/components/header/settingsMenuItems.js.map +0 -1
  346. package/src/components/header/ColorSchemeMenu.tsx +0 -56
  347. package/src/components/header/FileMenu.tsx +0 -81
  348. package/src/components/header/MSASettingsMenu.tsx +0 -26
  349. package/src/components/header/ScrollZoomIcons.tsx +0 -52
  350. package/src/components/header/TreeSettingsMenu.tsx +0 -60
  351. package/src/components/header/ZoomMenu.tsx +0 -48
  352. package/src/components/header/settingsMenuItems.ts +0 -157
@@ -1,81 +0,0 @@
1
- import React, { lazy } from 'react'
2
-
3
- import CascadingMenuButton from '@jbrowse/core/ui/CascadingMenuButton'
4
- import AccountTree from '@mui/icons-material/AccountTree'
5
- import Assignment from '@mui/icons-material/Assignment'
6
- import FolderOpen from '@mui/icons-material/FolderOpen'
7
- import Menu from '@mui/icons-material/Menu'
8
- import PhotoCamera from '@mui/icons-material/PhotoCamera'
9
- import { observer } from 'mobx-react'
10
-
11
- import { getAnnotationsMenu } from './getAnnotationsMenu.ts'
12
-
13
- import type { MsaViewModel } from '../../model.ts'
14
-
15
- const MetadataDialog = lazy(() => import('../dialogs/MetadataDialog.tsx'))
16
- const ExportSVGDialog = lazy(() => import('../dialogs/ExportSVGDialog.tsx'))
17
-
18
- const FileMenu = observer(({ model }: { model: MsaViewModel }) => {
19
- return (
20
- <CascadingMenuButton
21
- data-testid="file_menu"
22
- tooltip="File"
23
- menuItems={[
24
- {
25
- label: 'Return to import form',
26
- icon: FolderOpen,
27
- onClick: () => {
28
- model.reset()
29
- },
30
- },
31
- {
32
- label: 'Metadata',
33
- icon: Assignment,
34
- onClick: () => {
35
- model.queueDialog(onClose => [
36
- MetadataDialog,
37
- {
38
- model,
39
- onClose,
40
- },
41
- ])
42
- },
43
- },
44
- {
45
- label: 'Annotations',
46
- type: 'subMenu',
47
- subMenu: getAnnotationsMenu({
48
- model,
49
- }),
50
- },
51
- {
52
- label: 'Export tree (Newick)',
53
- icon: AccountTree,
54
- disabled: !!model.tree.noTree,
55
- onClick: () => {
56
- model.exportNewick()
57
- },
58
- },
59
- {
60
- label: 'Export SVG',
61
- icon: PhotoCamera,
62
- onClick: () => {
63
- model.queueDialog(onClose => [
64
- ExportSVGDialog,
65
- {
66
- onClose,
67
- model,
68
- },
69
- ])
70
- },
71
- },
72
- ]}
73
- anchorOrigin={{ vertical: 'bottom', horizontal: 'left' }}
74
- transformOrigin={{ vertical: 'top', horizontal: 'left' }}
75
- >
76
- <Menu />
77
- </CascadingMenuButton>
78
- )
79
- })
80
-
81
- export default FileMenu
@@ -1,26 +0,0 @@
1
- import React from 'react'
2
-
3
- import CascadingMenuButton from '@jbrowse/core/ui/CascadingMenuButton'
4
- import Tune from '@mui/icons-material/Tune'
5
- import { observer } from 'mobx-react'
6
-
7
- import { msaSettingsMenuItems } from './settingsMenuItems.ts'
8
-
9
- import type { MsaViewModel } from '../../model.ts'
10
-
11
- const MSASettingsMenu = observer(function ({ model }: { model: MsaViewModel }) {
12
- return (
13
- <CascadingMenuButton
14
- data-testid="msa_settings_menu"
15
- tooltip="Alignment settings"
16
- closeAfterItemClick={false}
17
- anchorOrigin={{ vertical: 'bottom', horizontal: 'left' }}
18
- transformOrigin={{ vertical: 'top', horizontal: 'left' }}
19
- menuItems={msaSettingsMenuItems(model)}
20
- >
21
- <Tune />
22
- </CascadingMenuButton>
23
- )
24
- })
25
-
26
- export default MSASettingsMenu
@@ -1,52 +0,0 @@
1
- import React from 'react'
2
-
3
- import SvgIcon from '@mui/material/SvgIcon'
4
-
5
- import type { SvgIconProps } from '@mui/material/SvgIcon'
6
-
7
- // Mouse glyphs with outward arrows on the axes a wheel zoom scales.
8
- // @mui/icons-material ships only the plain `Mouse`, and three variants that
9
- // differ only in their arrows have to share one body to stay apart at 24px.
10
- // The body's inner subpath runs the opposite sweep, which punches the hole the
11
- // wheel bar sits in.
12
- const BODY =
13
- 'M12 5a4 4 0 0 0-4 4v6a4 4 0 0 0 8 0V9a4 4 0 0 0-4-4zm0 2a2 2 0 0 1 2 2v6a2 2 0 0 1-4 0V9a2 2 0 0 1 2-2z'
14
- const WHEEL = 'M11.2 8.6h1.6v3.2h-1.6z'
15
- const LEFT = 'M.4 12 5 15V9z'
16
- const RIGHT = 'M23.6 12 19 9v6z'
17
- const UP = 'M12 .4 15 4H9z'
18
- const DOWN = 'M12 23.6 9 20h6z'
19
-
20
- function MouseZoom({
21
- arrows,
22
- ...rest
23
- }: SvgIconProps & { arrows: readonly string[] }) {
24
- return (
25
- <SvgIcon {...rest}>
26
- <path d={BODY} />
27
- <path d={WHEEL} />
28
- {arrows.map(d => (
29
- <path key={d} d={d} />
30
- ))}
31
- </SvgIcon>
32
- )
33
- }
34
-
35
- // the bare body, for a wheel that scrolls. @mui/icons-material's own `Mouse` is
36
- // a solid silhouette, which would jump to a different drawing when the menu
37
- // changes the mode.
38
- export function MouseScroll(props: SvgIconProps) {
39
- return <MouseZoom {...props} arrows={[]} />
40
- }
41
-
42
- export function MouseZoomBoth(props: SvgIconProps) {
43
- return <MouseZoom {...props} arrows={[LEFT, RIGHT, UP, DOWN]} />
44
- }
45
-
46
- export function MouseZoomHorizontal(props: SvgIconProps) {
47
- return <MouseZoom {...props} arrows={[LEFT, RIGHT]} />
48
- }
49
-
50
- export function MouseZoomVertical(props: SvgIconProps) {
51
- return <MouseZoom {...props} arrows={[UP, DOWN]} />
52
- }
@@ -1,60 +0,0 @@
1
- import React from 'react'
2
-
3
- import CascadingMenuButton from '@jbrowse/core/ui/CascadingMenuButton'
4
- import AccountTree from '@mui/icons-material/AccountTree'
5
- import { observer } from 'mobx-react'
6
-
7
- import { maxNeighborJoiningRows } from '../../constants.ts'
8
- import { treeSettingsMenuItems } from './settingsMenuItems.ts'
9
-
10
- import type { MsaViewModel } from '../../model.ts'
11
-
12
- const TreeSettingsMenu = observer(function ({
13
- model,
14
- }: {
15
- model: MsaViewModel
16
- }) {
17
- const { rows } = model
18
- const tooManyRows = rows.length > maxNeighborJoiningRows
19
- return (
20
- <CascadingMenuButton
21
- data-testid="tree_settings_menu"
22
- tooltip="Tree settings"
23
- closeAfterItemClick={false}
24
- anchorOrigin={{ vertical: 'bottom', horizontal: 'left' }}
25
- transformOrigin={{ vertical: 'top', horizontal: 'left' }}
26
- menuItems={[
27
- ...treeSettingsMenuItems(model),
28
- ...(rows.length >= 2
29
- ? [
30
- {
31
- label: 'Advanced',
32
- type: 'subMenu' as const,
33
- subMenu: [
34
- {
35
- // the label shows the cap before a click would freeze the tab
36
- label: tooManyRows
37
- ? `Calculate neighbor joining tree (over ${maxNeighborJoiningRows} rows, use FastTree)`
38
- : 'Calculate neighbor joining tree (BLOSUM62)',
39
- disabled: tooManyRows,
40
- onClick: () => {
41
- try {
42
- model.calculateNeighborJoiningTreeFromMSA()
43
- } catch (e) {
44
- console.error('Failed to calculate NJ tree:', e)
45
- model.setError(e)
46
- }
47
- },
48
- },
49
- ],
50
- },
51
- ]
52
- : []),
53
- ]}
54
- >
55
- <AccountTree />
56
- </CascadingMenuButton>
57
- )
58
- })
59
-
60
- export default TreeSettingsMenu
@@ -1,48 +0,0 @@
1
- import React from 'react'
2
-
3
- import CascadingMenuButton from '@jbrowse/core/ui/CascadingMenuButton'
4
- import MoreVert from '@mui/icons-material/MoreVert'
5
- import RestartAlt from '@mui/icons-material/RestartAlt'
6
- import { observer } from 'mobx-react'
7
-
8
- import type { MsaViewModel } from '../../model.ts'
9
-
10
- const ZoomMenu = observer(function ({ model }: { model: MsaViewModel }) {
11
- return (
12
- <CascadingMenuButton
13
- tooltip="Fit / zoom options"
14
- menuItems={[
15
- {
16
- label: 'Fit both vertically/horizontally',
17
- onClick: () => {
18
- model.fit()
19
- },
20
- },
21
- {
22
- label: 'Fit vertically',
23
- onClick: () => {
24
- model.fitVertically()
25
- },
26
- },
27
- {
28
- label: 'Fit horizontally',
29
- onClick: () => {
30
- model.fitHorizontally()
31
- },
32
- },
33
-
34
- {
35
- label: 'Reset zoom to default',
36
- icon: RestartAlt,
37
- onClick: () => {
38
- model.resetZoom()
39
- },
40
- },
41
- ]}
42
- >
43
- <MoreVert />
44
- </CascadingMenuButton>
45
- )
46
- })
47
-
48
- export default ZoomMenu
@@ -1,157 +0,0 @@
1
- import { treeOrders } from '../../constants.ts'
2
-
3
- import type { MsaViewModel } from '../../model.ts'
4
- import type { TreeOrder } from '../../types.ts'
5
- import type { MenuItem } from '@jbrowse/core/ui/Menu'
6
-
7
- function radio(label: string, checked: boolean, onClick: () => void) {
8
- return { label, type: 'radio' as const, checked, onClick }
9
- }
10
-
11
- const treeOrderLabels: Record<TreeOrder, string> = {
12
- branchLength: 'By branch length',
13
- input: 'As written',
14
- ladderize: 'Ladderize, small clades first',
15
- ladderizeReverse: 'Ladderize, large clades first',
16
- }
17
-
18
- function outgroupLabel(outgroup: string[]) {
19
- const [first, ...rest] = outgroup
20
- return rest.length === 0
21
- ? `Outgroup ${first}`
22
- : `Outgroup ${first} … ${rest.at(-1)}`
23
- }
24
-
25
- function toggle(label: string, checked: boolean, set: (arg: boolean) => void) {
26
- return {
27
- label,
28
- type: 'checkbox' as const,
29
- checked,
30
- onClick: () => {
31
- set(!checked)
32
- },
33
- }
34
- }
35
-
36
- // the only place in the UI to turn a hidden track back on
37
- function tracksSubMenu(model: MsaViewModel): MenuItem[] {
38
- const shown = new Set(model.turnedOnTracks.map(t => t.model.id))
39
- return model.tracks.map(({ model: { id, name } }) =>
40
- toggle(name, shown.has(id), () => {
41
- model.toggleTrack(id)
42
- }),
43
- )
44
- }
45
-
46
- export function msaSettingsMenuItems(model: MsaViewModel): MenuItem[] {
47
- const { drawMsaLetters, hideGaps, bgColor, showColumnStats } = model
48
- return [
49
- {
50
- label: 'Tracks',
51
- type: 'subMenu' as const,
52
- subMenu: tracksSubMenu(model),
53
- },
54
- { type: 'divider' as const },
55
- toggle('Show track values on hover', showColumnStats, arg => {
56
- model.setShowColumnStats(arg)
57
- }),
58
- toggle('Draw letters', drawMsaLetters, arg => {
59
- model.setDrawMsaLetters(arg)
60
- }),
61
- // inverted: bgColor colors the tile, and off colors the letter
62
- toggle('Color letters, not cells', !bgColor, arg => {
63
- model.setBgColor(!arg)
64
- }),
65
- toggle('Hide gappy columns', hideGaps, arg => {
66
- model.setHideGaps(arg)
67
- }),
68
- ]
69
- }
70
-
71
- export function treeSettingsMenuItems(model: MsaViewModel): MenuItem[] {
72
- const {
73
- drawTree,
74
- showBranchLen,
75
- labelsAlignRight,
76
- drawNodeBubbles,
77
- drawNodeLabels,
78
- drawLabels,
79
- treeAreaWidth,
80
- showTreeOverview,
81
- treeOrder,
82
- treeRoot,
83
- rotated,
84
- } = model
85
- return [
86
- {
87
- label: 'Order',
88
- type: 'subMenu' as const,
89
- subMenu: [
90
- ...treeOrders.map(order =>
91
- radio(treeOrderLabels[order], treeOrder === order, () => {
92
- model.setTreeOrder(order)
93
- }),
94
- ),
95
- { type: 'divider' as const },
96
- {
97
- label: 'Undo rotations',
98
- disabled: rotated.length === 0,
99
- onClick: () => {
100
- model.clearRotated()
101
- },
102
- },
103
- ],
104
- },
105
- {
106
- label: 'Root',
107
- type: 'subMenu' as const,
108
- subMenu: [
109
- radio('As written', treeRoot === undefined, () => {
110
- model.setTreeRoot(undefined)
111
- }),
112
- radio('Midpoint', treeRoot === 'midpoint', () => {
113
- model.setTreeRoot('midpoint')
114
- }),
115
- // "Reroot here" in a node's menu sets the outgroup, so this only
116
- // reports it
117
- ...(typeof treeRoot === 'object'
118
- ? [
119
- {
120
- ...radio(outgroupLabel(treeRoot.outgroup), true, () => {}),
121
- disabled: true,
122
- },
123
- ]
124
- : []),
125
- ],
126
- },
127
- { type: 'divider' as const },
128
- toggle('Show branch length', showBranchLen, arg => {
129
- model.setShowBranchLen(arg)
130
- }),
131
- toggle('Show tree', drawTree, arg => {
132
- model.setDrawTree(arg)
133
- }),
134
- toggle('Draw bubbles on tree branches', drawNodeBubbles, arg => {
135
- model.setDrawNodeBubbles(arg)
136
- }),
137
- toggle('Draw internal node labels', drawNodeLabels, arg => {
138
- model.setDrawNodeLabels(arg)
139
- }),
140
- toggle('Show tree overview', showTreeOverview, arg => {
141
- model.setShowTreeOverview(arg)
142
- }),
143
- toggle('Tree labels align right', labelsAlignRight, arg => {
144
- model.setLabelsAlignRight(arg)
145
- }),
146
- toggle('Draw labels', drawLabels, arg => {
147
- model.setDrawLabels(arg)
148
- }),
149
- toggle(
150
- 'Fit tree area to labels and tree',
151
- treeAreaWidth === undefined,
152
- arg => {
153
- model.setTreeAreaWidth(arg ? undefined : model.effectiveTreeAreaWidth)
154
- },
155
- ),
156
- ]
157
- }