react-msaview 6.5.0 → 8.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 (414) hide show
  1. package/README.md +13 -11
  2. package/bundle/index.js +122 -112
  3. package/bundle/index.js.map +4 -4
  4. package/dist/colorSchemes.js +1 -2
  5. package/dist/colorSchemes.js.map +1 -1
  6. package/dist/columnStats.d.ts +28 -0
  7. package/dist/columnStats.js +34 -0
  8. package/dist/columnStats.js.map +1 -0
  9. package/dist/components/DragHandle.d.ts +3 -2
  10. package/dist/components/DragHandle.js +11 -5
  11. package/dist/components/DragHandle.js.map +1 -1
  12. package/dist/components/Loading.js +2 -2
  13. package/dist/components/Loading.js.map +1 -1
  14. package/dist/components/MSAView.js +17 -6
  15. package/dist/components/MSAView.js.map +1 -1
  16. package/dist/components/MSAViewer.d.ts +69 -4
  17. package/dist/components/MSAViewer.js +201 -8
  18. package/dist/components/MSAViewer.js.map +1 -1
  19. package/dist/components/PortalTooltip.d.ts +11 -0
  20. package/dist/components/PortalTooltip.js +29 -0
  21. package/dist/components/PortalTooltip.js.map +1 -0
  22. package/dist/components/ResizeHandles.d.ts +3 -3
  23. package/dist/components/ResizeHandles.js +13 -24
  24. package/dist/components/ResizeHandles.js.map +1 -1
  25. package/dist/components/SequenceTextArea.js +3 -3
  26. package/dist/components/SequenceTextArea.js.map +1 -1
  27. package/dist/components/Track.js +41 -22
  28. package/dist/components/Track.js.map +1 -1
  29. package/dist/components/dialogs/{InterProScanDialog.d.ts → AnnotationFileDialog.d.ts} +2 -2
  30. package/dist/components/dialogs/AnnotationFileDialog.js +92 -0
  31. package/dist/components/dialogs/AnnotationFileDialog.js.map +1 -0
  32. package/dist/components/dialogs/ExportSVGDialog.js +5 -3
  33. package/dist/components/dialogs/ExportSVGDialog.js.map +1 -1
  34. package/dist/components/dialogs/FeatureDialog.js +13 -9
  35. package/dist/components/dialogs/FeatureDialog.js.map +1 -1
  36. package/dist/components/dialogs/TrackInfoDialog.js +1 -1
  37. package/dist/components/dialogs/TrackInfoDialog.js.map +1 -1
  38. package/dist/components/header/GappynessSlider.js +6 -11
  39. package/dist/components/header/GappynessSlider.js.map +1 -1
  40. package/dist/components/header/Header.js +7 -0
  41. package/dist/components/header/Header.js.map +1 -1
  42. package/dist/components/header/HeaderStatusArea.js +0 -2
  43. package/dist/components/header/HeaderStatusArea.js.map +1 -1
  44. package/dist/components/header/LoadWarnings.d.ts +6 -0
  45. package/dist/components/header/LoadWarnings.js +35 -0
  46. package/dist/components/header/LoadWarnings.js.map +1 -0
  47. package/dist/components/header/MultiAlignmentSelector.js +0 -0
  48. package/dist/components/header/MultiAlignmentSelector.js.map +1 -1
  49. package/dist/components/header/ScrollZoomIcons.d.ts +6 -0
  50. package/dist/components/header/ScrollZoomIcons.js +35 -0
  51. package/dist/components/header/ScrollZoomIcons.js.map +1 -0
  52. package/dist/components/header/TreeSettingsMenu.js +7 -1
  53. package/dist/components/header/TreeSettingsMenu.js.map +1 -1
  54. package/dist/components/header/UnshareableDataWarning.d.ts +6 -0
  55. package/dist/components/header/UnshareableDataWarning.js +40 -0
  56. package/dist/components/header/UnshareableDataWarning.js.map +1 -0
  57. package/dist/components/header/ZoomControls.js +49 -6
  58. package/dist/components/header/ZoomControls.js.map +1 -1
  59. package/dist/components/header/getAnnotationsMenu.js +11 -14
  60. package/dist/components/header/getAnnotationsMenu.js.map +1 -1
  61. package/dist/components/header/settingsMenuItems.js +10 -7
  62. package/dist/components/header/settingsMenuItems.js.map +1 -1
  63. package/dist/components/import/ImportForm.js +1 -1
  64. package/dist/components/import/ImportForm.js.map +1 -1
  65. package/dist/components/import/ImportFormExamples.js +2 -6
  66. package/dist/components/import/ImportFormExamples.js.map +1 -1
  67. package/dist/components/import/util.js +2 -0
  68. package/dist/components/import/util.js.map +1 -1
  69. package/dist/components/minimap/Minimap.js +1 -2
  70. package/dist/components/minimap/Minimap.js.map +1 -1
  71. package/dist/components/msa/AnnotationLegend.js +27 -19
  72. package/dist/components/msa/AnnotationLegend.js.map +1 -1
  73. package/dist/components/msa/MSACanvas.js +1 -1
  74. package/dist/components/msa/MSACanvas.js.map +1 -1
  75. package/dist/components/msa/MSACanvasBlock.js +17 -20
  76. package/dist/components/msa/MSACanvasBlock.js.map +1 -1
  77. package/dist/components/msa/MSAMouseoverCanvas.js +2 -1
  78. package/dist/components/msa/MSAMouseoverCanvas.js.map +1 -1
  79. package/dist/components/msa/domainBandCursor.d.ts +7 -11
  80. package/dist/components/msa/domainBandCursor.js +7 -11
  81. package/dist/components/msa/domainBandCursor.js.map +1 -1
  82. package/dist/components/msa/drawFeatureSpans.d.ts +53 -0
  83. package/dist/components/msa/drawFeatureSpans.js +78 -0
  84. package/dist/components/msa/drawFeatureSpans.js.map +1 -0
  85. package/dist/components/msa/legendRows.d.ts +8 -0
  86. package/dist/components/msa/legendRows.js +16 -0
  87. package/dist/components/msa/legendRows.js.map +1 -0
  88. package/dist/components/msa/msaRaster.d.ts +30 -27
  89. package/dist/components/msa/msaRaster.js +193 -90
  90. package/dist/components/msa/msaRaster.js.map +1 -1
  91. package/dist/components/msa/packDomainLanes.d.ts +20 -0
  92. package/dist/components/msa/packDomainLanes.js +33 -0
  93. package/dist/components/msa/packDomainLanes.js.map +1 -0
  94. package/dist/components/msa/renderBoxFeatureCanvasBlock.d.ts +3 -1
  95. package/dist/components/msa/renderBoxFeatureCanvasBlock.js +51 -87
  96. package/dist/components/msa/renderBoxFeatureCanvasBlock.js.map +1 -1
  97. package/dist/components/msa/renderHighlights.d.ts +44 -4
  98. package/dist/components/msa/renderHighlights.js +99 -11
  99. package/dist/components/msa/renderHighlights.js.map +1 -1
  100. package/dist/components/msa/renderMSABlock.d.ts +1 -2
  101. package/dist/components/msa/renderMSABlock.js +28 -31
  102. package/dist/components/msa/renderMSABlock.js.map +1 -1
  103. package/dist/components/msa/renderMSAMouseover.js +9 -30
  104. package/dist/components/msa/renderMSAMouseover.js.map +1 -1
  105. package/dist/components/msa/tileColor.js +4 -7
  106. package/dist/components/msa/tileColor.js.map +1 -1
  107. package/dist/components/msa/useMsaBlockMouse.d.ts +5 -3
  108. package/dist/components/msa/useMsaBlockMouse.js +6 -6
  109. package/dist/components/msa/useMsaBlockMouse.js.map +1 -1
  110. package/dist/components/renderCtx.d.ts +1 -1
  111. package/dist/components/rowpanels/RowPanelBlock.d.ts +9 -0
  112. package/dist/components/rowpanels/RowPanelBlock.js +86 -0
  113. package/dist/components/rowpanels/RowPanelBlock.js.map +1 -0
  114. package/dist/components/rowpanels/RowPanelHeaders.d.ts +12 -0
  115. package/dist/components/rowpanels/RowPanelHeaders.js +38 -0
  116. package/dist/components/rowpanels/RowPanelHeaders.js.map +1 -0
  117. package/dist/components/{msa/ColumnStats.d.ts → rowpanels/RowPanels.d.ts} +2 -2
  118. package/dist/components/rowpanels/RowPanels.js +32 -0
  119. package/dist/components/rowpanels/RowPanels.js.map +1 -0
  120. package/dist/components/rowpanels/headerLayout.d.ts +1 -0
  121. package/dist/components/rowpanels/headerLayout.js +5 -0
  122. package/dist/components/rowpanels/headerLayout.js.map +1 -0
  123. package/dist/components/rowpanels/renderFeaturePanel.d.ts +21 -0
  124. package/dist/components/rowpanels/renderFeaturePanel.js +37 -0
  125. package/dist/components/rowpanels/renderFeaturePanel.js.map +1 -0
  126. package/dist/components/rowpanels/renderRowPanel.d.ts +23 -0
  127. package/dist/components/rowpanels/renderRowPanel.js +22 -0
  128. package/dist/components/rowpanels/renderRowPanel.js.map +1 -0
  129. package/dist/components/rowpanels/renderStrip.d.ts +20 -0
  130. package/dist/components/rowpanels/renderStrip.js +26 -0
  131. package/dist/components/rowpanels/renderStrip.js.map +1 -0
  132. package/dist/components/tracks/TrackBlocks.js +13 -16
  133. package/dist/components/tracks/TrackBlocks.js.map +1 -1
  134. package/dist/components/tracks/TrackTooltipContent.d.ts +15 -0
  135. package/dist/components/tracks/TrackTooltipContent.js +109 -0
  136. package/dist/components/tracks/TrackTooltipContent.js.map +1 -0
  137. package/dist/components/tracks/drawTracks.d.ts +30 -12
  138. package/dist/components/tracks/drawTracks.js +127 -34
  139. package/dist/components/tracks/drawTracks.js.map +1 -1
  140. package/dist/components/tracks/useTrackHover.d.ts +22 -0
  141. package/dist/components/tracks/useTrackHover.js +30 -0
  142. package/dist/components/tracks/useTrackHover.js.map +1 -0
  143. package/dist/components/tree/CladeLabels.d.ts +12 -0
  144. package/dist/components/tree/CladeLabels.js +48 -0
  145. package/dist/components/tree/CladeLabels.js.map +1 -0
  146. package/dist/components/tree/TreeCanvas.js +6 -4
  147. package/dist/components/tree/TreeCanvas.js.map +1 -1
  148. package/dist/components/tree/TreeCanvasBlock.js +6 -21
  149. package/dist/components/tree/TreeCanvasBlock.js.map +1 -1
  150. package/dist/components/tree/TreeOverview.d.ts +14 -0
  151. package/dist/components/tree/TreeOverview.js +75 -0
  152. package/dist/components/tree/TreeOverview.js.map +1 -0
  153. package/dist/components/tree/TreeRuler.js +11 -5
  154. package/dist/components/tree/TreeRuler.js.map +1 -1
  155. package/dist/components/tree/cladeBrackets.d.ts +25 -0
  156. package/dist/components/tree/cladeBrackets.js +51 -0
  157. package/dist/components/tree/cladeBrackets.js.map +1 -0
  158. package/dist/components/tree/dialogs/TreeNodeInfoDialog.js +2 -2
  159. package/dist/components/tree/dialogs/TreeNodeInfoDialog.js.map +1 -1
  160. package/dist/components/tree/renderTreeCanvas.d.ts +0 -1
  161. package/dist/components/tree/renderTreeCanvas.js +221 -47
  162. package/dist/components/tree/renderTreeCanvas.js.map +1 -1
  163. package/dist/components/tree/renderTreeOverview.d.ts +52 -0
  164. package/dist/components/tree/renderTreeOverview.js +138 -0
  165. package/dist/components/tree/renderTreeOverview.js.map +1 -0
  166. package/dist/components/tree/scaleBar.d.ts +10 -0
  167. package/dist/components/tree/scaleBar.js +24 -0
  168. package/dist/components/tree/scaleBar.js.map +1 -0
  169. package/dist/components/tree/useTreeHover.js +2 -4
  170. package/dist/components/tree/useTreeHover.js.map +1 -1
  171. package/dist/constants.d.ts +18 -1
  172. package/dist/constants.js +51 -8
  173. package/dist/constants.js.map +1 -1
  174. package/dist/createPaletteMap.d.ts +7 -6
  175. package/dist/createPaletteMap.js +10 -9
  176. package/dist/createPaletteMap.js.map +1 -1
  177. package/dist/element.d.ts +13 -0
  178. package/dist/element.js +269 -0
  179. package/dist/element.js.map +1 -0
  180. package/dist/featureFields.d.ts +11 -0
  181. package/dist/featureFields.js +17 -0
  182. package/dist/featureFields.js.map +1 -0
  183. package/dist/fetchUtils.d.ts +7 -7
  184. package/dist/fetchUtils.js +4 -32
  185. package/dist/fetchUtils.js.map +1 -1
  186. package/dist/flatToTree.js +1 -2
  187. package/dist/flatToTree.js.map +1 -1
  188. package/dist/ggplotPalettes.d.ts +10 -0
  189. package/dist/ggplotPalettes.js +58 -0
  190. package/dist/ggplotPalettes.js.map +1 -1
  191. package/dist/hierarchy.d.ts +29 -1
  192. package/dist/hierarchy.js +82 -19
  193. package/dist/hierarchy.js.map +1 -1
  194. package/dist/index.d.ts +10 -1
  195. package/dist/index.js +10 -2
  196. package/dist/index.js.map +1 -1
  197. package/dist/model/DataModel.js +4 -4
  198. package/dist/model/DataModel.js.map +1 -1
  199. package/dist/model/msaModel.d.ts +3 -2
  200. package/dist/model/msaModel.js +3 -2
  201. package/dist/model/msaModel.js.map +1 -1
  202. package/dist/model/treeModel.d.ts +30 -0
  203. package/dist/model/treeModel.js +37 -1
  204. package/dist/model/treeModel.js.map +1 -1
  205. package/dist/model.d.ts +792 -259
  206. package/dist/model.js +2092 -675
  207. package/dist/model.js.map +1 -1
  208. package/dist/mount.d.ts +11 -0
  209. package/dist/mount.js +22 -0
  210. package/dist/mount.js.map +1 -0
  211. package/dist/neighborJoining.js +8 -32
  212. package/dist/neighborJoining.js.map +1 -1
  213. package/dist/renderToStaticMarkup.d.ts +15 -13
  214. package/dist/renderToStaticMarkup.js +37 -25
  215. package/dist/renderToStaticMarkup.js.map +1 -1
  216. package/dist/renderToSvg.js +198 -68
  217. package/dist/renderToSvg.js.map +1 -1
  218. package/dist/rowCoordinateCalculations.d.ts +26 -28
  219. package/dist/rowCoordinateCalculations.js +13 -39
  220. package/dist/rowCoordinateCalculations.js.map +1 -1
  221. package/dist/scales.d.ts +22 -0
  222. package/dist/scales.js +30 -0
  223. package/dist/scales.js.map +1 -0
  224. package/dist/seqPosToGlobalCol.d.ts +2 -3
  225. package/dist/seqPosToGlobalCol.js +5 -4
  226. package/dist/seqPosToGlobalCol.js.map +1 -1
  227. package/dist/sequenceLogo.d.ts +6 -11
  228. package/dist/sequenceLogo.js +6 -11
  229. package/dist/sequenceLogo.js.map +1 -1
  230. package/dist/stripDefault.d.ts +7 -14
  231. package/dist/stripDefault.js +7 -14
  232. package/dist/stripDefault.js.map +1 -1
  233. package/dist/svgTestUtil.d.ts +306 -124
  234. package/dist/types.d.ts +295 -3
  235. package/dist/umd.d.ts +2 -0
  236. package/dist/umd.js +4 -2
  237. package/dist/umd.js.map +1 -1
  238. package/dist/useCanvasAutorun.d.ts +5 -10
  239. package/dist/useCanvasAutorun.js +5 -10
  240. package/dist/useCanvasAutorun.js.map +1 -1
  241. package/dist/useMsaSvgFigure.d.ts +20 -0
  242. package/dist/useMsaSvgFigure.js +46 -0
  243. package/dist/useMsaSvgFigure.js.map +1 -0
  244. package/dist/util.d.ts +10 -4
  245. package/dist/util.js +37 -10
  246. package/dist/util.js.map +1 -1
  247. package/dist/version.d.ts +1 -1
  248. package/dist/version.js +1 -1
  249. package/dist/wuss.d.ts +14 -0
  250. package/dist/wuss.js +55 -0
  251. package/dist/wuss.js.map +1 -0
  252. package/package.json +23 -14
  253. package/src/colorSchemes.ts +1 -2
  254. package/src/columnStats.ts +58 -0
  255. package/src/components/DragHandle.tsx +18 -7
  256. package/src/components/Loading.tsx +14 -8
  257. package/src/components/MSAView.tsx +19 -5
  258. package/src/components/MSAViewer.tsx +326 -10
  259. package/src/components/PortalTooltip.tsx +47 -0
  260. package/src/components/ResizeHandles.tsx +21 -36
  261. package/src/components/SequenceTextArea.tsx +3 -3
  262. package/src/components/Track.tsx +55 -18
  263. package/src/components/dialogs/AnnotationFileDialog.tsx +162 -0
  264. package/src/components/dialogs/ExportSVGDialog.tsx +7 -2
  265. package/src/components/dialogs/FeatureDialog.tsx +13 -9
  266. package/src/components/dialogs/TrackInfoDialog.tsx +1 -1
  267. package/src/components/header/GappynessSlider.tsx +6 -11
  268. package/src/components/header/Header.tsx +10 -0
  269. package/src/components/header/HeaderStatusArea.tsx +0 -5
  270. package/src/components/header/LoadWarnings.tsx +48 -0
  271. package/src/components/header/MultiAlignmentSelector.tsx +0 -0
  272. package/src/components/header/ScrollZoomIcons.tsx +52 -0
  273. package/src/components/header/TreeSettingsMenu.tsx +7 -1
  274. package/src/components/header/UnshareableDataWarning.tsx +56 -0
  275. package/src/components/header/ZoomControls.tsx +74 -14
  276. package/src/components/header/getAnnotationsMenu.ts +13 -17
  277. package/src/components/header/settingsMenuItems.ts +11 -6
  278. package/src/components/import/ImportForm.tsx +2 -2
  279. package/src/components/import/ImportFormExamples.tsx +4 -8
  280. package/src/components/import/util.ts +2 -0
  281. package/src/components/minimap/Minimap.tsx +1 -2
  282. package/src/components/msa/AnnotationLegend.tsx +48 -38
  283. package/src/components/msa/MSACanvas.tsx +3 -5
  284. package/src/components/msa/MSACanvasBlock.tsx +17 -21
  285. package/src/components/msa/MSAMouseoverCanvas.tsx +2 -1
  286. package/src/components/msa/domainBandCursor.ts +7 -11
  287. package/src/components/msa/drawFeatureSpans.ts +150 -0
  288. package/src/components/msa/legendRows.ts +24 -0
  289. package/src/components/msa/msaRaster.ts +236 -88
  290. package/src/components/msa/packDomainLanes.ts +36 -0
  291. package/src/components/msa/renderBoxFeatureCanvasBlock.ts +69 -123
  292. package/src/components/msa/renderHighlights.ts +141 -10
  293. package/src/components/msa/renderMSABlock.ts +29 -38
  294. package/src/components/msa/renderMSAMouseover.ts +9 -39
  295. package/src/components/msa/tileColor.ts +4 -7
  296. package/src/components/msa/useMsaBlockMouse.ts +6 -6
  297. package/src/components/renderCtx.ts +1 -0
  298. package/src/components/rowpanels/RowPanelBlock.tsx +139 -0
  299. package/src/components/rowpanels/RowPanelHeaders.tsx +57 -0
  300. package/src/components/rowpanels/RowPanels.tsx +77 -0
  301. package/src/components/rowpanels/headerLayout.ts +5 -0
  302. package/src/components/rowpanels/renderFeaturePanel.ts +66 -0
  303. package/src/components/rowpanels/renderRowPanel.ts +41 -0
  304. package/src/components/rowpanels/renderStrip.ts +46 -0
  305. package/src/components/tracks/TrackBlocks.tsx +13 -18
  306. package/src/components/tracks/TrackTooltipContent.tsx +156 -0
  307. package/src/components/tracks/drawTracks.ts +169 -38
  308. package/src/components/tracks/useTrackHover.ts +42 -0
  309. package/src/components/tree/CladeLabels.tsx +77 -0
  310. package/src/components/tree/TreeCanvas.tsx +4 -3
  311. package/src/components/tree/TreeCanvasBlock.tsx +10 -32
  312. package/src/components/tree/TreeOverview.tsx +106 -0
  313. package/src/components/tree/TreeRuler.tsx +29 -5
  314. package/src/components/tree/cladeBrackets.ts +73 -0
  315. package/src/components/tree/dialogs/TreeNodeInfoDialog.tsx +2 -2
  316. package/src/components/tree/renderTreeCanvas.ts +312 -48
  317. package/src/components/tree/renderTreeOverview.ts +212 -0
  318. package/src/components/tree/scaleBar.ts +23 -0
  319. package/src/components/tree/useTreeHover.ts +2 -4
  320. package/src/constants.ts +61 -8
  321. package/src/createPaletteMap.ts +10 -9
  322. package/src/element.ts +321 -0
  323. package/src/featureFields.ts +19 -0
  324. package/src/fetchUtils.ts +7 -40
  325. package/src/flatToTree.ts +1 -2
  326. package/src/ggplotPalettes.ts +60 -0
  327. package/src/hierarchy.ts +97 -20
  328. package/src/index.ts +46 -6
  329. package/src/model/DataModel.ts +5 -4
  330. package/src/model/msaModel.ts +3 -2
  331. package/src/model/treeModel.ts +42 -0
  332. package/src/model.ts +2492 -793
  333. package/src/mount.tsx +32 -0
  334. package/src/neighborJoining.ts +8 -32
  335. package/src/rawImports.d.ts +9 -0
  336. package/src/renderToStaticMarkup.ts +41 -25
  337. package/src/renderToSvg.tsx +365 -92
  338. package/src/rowCoordinateCalculations.ts +16 -62
  339. package/src/scales.ts +47 -0
  340. package/src/seqPosToGlobalCol.ts +5 -4
  341. package/src/sequenceLogo.ts +6 -11
  342. package/src/stripDefault.ts +7 -14
  343. package/src/types.ts +352 -12
  344. package/src/umd.ts +4 -2
  345. package/src/useCanvasAutorun.ts +5 -10
  346. package/src/useMsaSvgFigure.ts +72 -0
  347. package/src/util.ts +40 -14
  348. package/src/version.ts +1 -1
  349. package/src/wuss.ts +62 -0
  350. package/dist/components/dialogs/InterProScanDialog.js +0 -137
  351. package/dist/components/dialogs/InterProScanDialog.js.map +0 -1
  352. package/dist/components/dialogs/InterProScanFileDialog.d.ts +0 -7
  353. package/dist/components/dialogs/InterProScanFileDialog.js +0 -64
  354. package/dist/components/dialogs/InterProScanFileDialog.js.map +0 -1
  355. package/dist/components/msa/ColumnStats.js +0 -42
  356. package/dist/components/msa/ColumnStats.js.map +0 -1
  357. package/dist/launchInterProScan.d.ts +0 -13
  358. package/dist/launchInterProScan.js +0 -110
  359. package/dist/launchInterProScan.js.map +0 -1
  360. package/dist/useColorContrast.d.ts +0 -10
  361. package/dist/useColorContrast.js +0 -13
  362. package/dist/useColorContrast.js.map +0 -1
  363. package/src/clustalX.test.ts +0 -74
  364. package/src/colSpace.test.ts +0 -67
  365. package/src/collapseLogic.test.ts +0 -115
  366. package/src/colorSchemes.docs.test.ts +0 -57
  367. package/src/columnCounts.test.ts +0 -73
  368. package/src/columnStats.test.ts +0 -94
  369. package/src/columnTracks.test.ts +0 -97
  370. package/src/components/dialogs/InterProScanDialog.tsx +0 -214
  371. package/src/components/dialogs/InterProScanFileDialog.tsx +0 -138
  372. package/src/components/minimap/minimapLayout.test.ts +0 -71
  373. package/src/components/msa/ColumnStats.tsx +0 -54
  374. package/src/components/msa/msaRaster.test.ts +0 -145
  375. package/src/components/msa/renderBoxFeatureCanvasBlock.test.ts +0 -51
  376. package/src/components/tree/renderTreeCanvas.test.ts +0 -296
  377. package/src/dataInitialized.test.ts +0 -42
  378. package/src/domainBands.test.ts +0 -122
  379. package/src/domainLetterColor.test.ts +0 -80
  380. package/src/exportFileName.test.ts +0 -40
  381. package/src/fetchUtils.test.ts +0 -83
  382. package/src/flatToTree.test.ts +0 -51
  383. package/src/hierarchy.test.ts +0 -228
  384. package/src/highlights.test.ts +0 -70
  385. package/src/impgRender.test.tsx +0 -68
  386. package/src/largeTree.test.ts +0 -67
  387. package/src/launchInterProScan.ts +0 -167
  388. package/src/loadErrorDisplay.test.tsx +0 -102
  389. package/src/modelFilehandleLoaders.test.ts +0 -137
  390. package/src/modelReset.test.ts +0 -120
  391. package/src/neighborJoining.test.ts +0 -164
  392. package/src/parseAsn1.test.ts +0 -36
  393. package/src/propertyConservation.test.ts +0 -36
  394. package/src/renderColumnTracksSvg.test.tsx +0 -108
  395. package/src/renderDomainsSvg.test.tsx +0 -118
  396. package/src/renderHighlightsSvg.test.tsx +0 -85
  397. package/src/renderMinimapSvg.test.tsx +0 -62
  398. package/src/renderRasterSvg.test.tsx +0 -144
  399. package/src/renderSequenceLogoSvg.test.tsx +0 -165
  400. package/src/renderToSvg.test.tsx +0 -65
  401. package/src/reset.test.ts +0 -61
  402. package/src/rowCoordinateCalculations.test.ts +0 -211
  403. package/src/rowSpace.test.ts +0 -46
  404. package/src/segmentOverlay.test.ts +0 -70
  405. package/src/seqPosToGlobalCol.test.ts +0 -59
  406. package/src/sequenceLogo.test.ts +0 -88
  407. package/src/setFontSize.test.ts +0 -33
  408. package/src/stripDefault.test.ts +0 -48
  409. package/src/stripDefaultSnapshot.test.ts +0 -87
  410. package/src/treeMetadata.test.ts +0 -39
  411. package/src/useCanvasAutorun.test.tsx +0 -98
  412. package/src/useColorContrast.ts +0 -18
  413. package/src/viewChrome.test.tsx +0 -134
  414. package/src/wheelZoom.test.ts +0 -46
package/dist/wuss.js ADDED
@@ -0,0 +1,55 @@
1
+ // WUSS notation (Rfam's `#=GC SS_cons`) names a consensus secondary structure
2
+ // by pairing columns. Nested helices use bracket pairs -- <>, (), [], {} --
3
+ // each type kept on its own stack, and a pseudoknot, which by definition
4
+ // crosses a helix it cannot nest inside, uses a letter pair instead: `A` opens
5
+ // and `a` closes, `B`/`b` for a second one. Everything else (. , _ - : ~) is
6
+ // unpaired.
7
+ const closeToOpen = {
8
+ '>': '<',
9
+ ')': '(',
10
+ ']': '[',
11
+ '}': '{',
12
+ };
13
+ const opens = new Set(Object.values(closeToOpen));
14
+ /**
15
+ * The base pairs a WUSS string encodes, as 0-based column indexes. Unmatched
16
+ * brackets are dropped rather than throwing: a hand-edited or truncated
17
+ * alignment should still draw the helices it does close.
18
+ */
19
+ export function parseWuss(ss) {
20
+ const stacks = new Map();
21
+ const pairs = [];
22
+ const push = (key, col) => {
23
+ const stack = stacks.get(key);
24
+ if (stack) {
25
+ stack.push(col);
26
+ }
27
+ else {
28
+ stacks.set(key, [col]);
29
+ }
30
+ };
31
+ const pop = (key, col, pseudoknot) => {
32
+ const start = stacks.get(key)?.pop();
33
+ if (start !== undefined) {
34
+ pairs.push({ start, end: col, pseudoknot });
35
+ }
36
+ };
37
+ for (let col = 0; col < ss.length; col++) {
38
+ const ch = ss[col];
39
+ const opener = closeToOpen[ch];
40
+ if (opens.has(ch)) {
41
+ push(ch, col);
42
+ }
43
+ else if (opener) {
44
+ pop(opener, col, false);
45
+ }
46
+ else if (ch >= 'A' && ch <= 'Z') {
47
+ push(ch, col);
48
+ }
49
+ else if (ch >= 'a' && ch <= 'z') {
50
+ pop(ch.toUpperCase(), col, true);
51
+ }
52
+ }
53
+ return pairs.sort((a, b) => a.start - b.start);
54
+ }
55
+ //# sourceMappingURL=wuss.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wuss.js","sourceRoot":"","sources":["../src/wuss.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,4EAA4E;AAC5E,yEAAyE;AACzE,+EAA+E;AAC/E,6EAA6E;AAC7E,YAAY;AAEZ,MAAM,WAAW,GAA2B;IAC1C,GAAG,EAAE,GAAG;IACR,GAAG,EAAE,GAAG;IACR,GAAG,EAAE,GAAG;IACR,GAAG,EAAE,GAAG;CACT,CAAA;AACD,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAA;AAWjD;;;;GAIG;AACH,MAAM,UAAU,SAAS,CAAC,EAAU;IAClC,MAAM,MAAM,GAAG,IAAI,GAAG,EAAoB,CAAA;IAC1C,MAAM,KAAK,GAAe,EAAE,CAAA;IAC5B,MAAM,IAAI,GAAG,CAAC,GAAW,EAAE,GAAW,EAAE,EAAE;QACxC,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAC7B,IAAI,KAAK,EAAE,CAAC;YACV,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QACjB,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAA;QACxB,CAAC;IACH,CAAC,CAAA;IACD,MAAM,GAAG,GAAG,CAAC,GAAW,EAAE,GAAW,EAAE,UAAmB,EAAE,EAAE;QAC5D,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAA;QACpC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,CAAA;QAC7C,CAAC;IACH,CAAC,CAAA;IAED,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC;QACzC,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,CAAE,CAAA;QACnB,MAAM,MAAM,GAAG,WAAW,CAAC,EAAE,CAAC,CAAA;QAC9B,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YAClB,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,CAAA;QACf,CAAC;aAAM,IAAI,MAAM,EAAE,CAAC;YAClB,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,CAAC,CAAA;QACzB,CAAC;aAAM,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE,IAAI,GAAG,EAAE,CAAC;YAClC,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,CAAA;QACf,CAAC;aAAM,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE,IAAI,GAAG,EAAE,CAAC;YAClC,GAAG,CAAC,EAAE,CAAC,WAAW,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA;QAClC,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAA;AAChD,CAAC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "react-msaview",
3
3
  "author": "Colin",
4
- "version": "6.5.0",
4
+ "version": "8.0.0",
5
5
  "license": "MIT",
6
6
  "type": "module",
7
7
  "repository": {
@@ -19,32 +19,41 @@
19
19
  "files": [
20
20
  "dist",
21
21
  "bundle",
22
- "src"
22
+ "src",
23
+ "!src/**/*.test.ts",
24
+ "!src/**/*.test.tsx"
23
25
  ],
24
26
  "engines": {
25
- "node": ">=10"
27
+ "node": ">=18"
26
28
  },
27
29
  "peerDependencies": {
28
- "@jbrowse/core": ">=2.0.0",
29
- "@jbrowse/mobx-state-tree": "^6.0.0",
30
- "@mui/icons-material": ">=5.0.0",
31
- "@mui/material": ">=5.0.0",
30
+ "@jbrowse/core": ">=5.0.0-0",
31
+ "@jbrowse/mobx-state-tree": ">=6.0.0",
32
+ "@mui/icons-material": ">=9.0.0",
33
+ "@mui/material": ">=9.0.0",
32
34
  "mobx": ">=7.0.0",
33
- "mobx-react": ">=9.0.0",
35
+ "mobx-react": ">=10.0.0",
34
36
  "react": ">=16.8.0",
35
37
  "react-dom": ">=16.8.0"
36
38
  },
37
39
  "devDependencies": {
38
40
  "@jbrowse/core": "file:vendor-jbrowse/jbrowse-core.tgz",
39
- "@types/node": "^26.1.2",
40
- "esbuild": "^0.28.1"
41
+ "@jbrowse/mobx-state-tree": "^6.5.1",
42
+ "@mui/icons-material": "^9.4.0",
43
+ "@mui/material": "^9.4.0",
44
+ "@types/node": "^26.5.1",
45
+ "esbuild": "^0.28.2",
46
+ "mobx": "^7.0.3",
47
+ "mobx-react": "^10.0.2",
48
+ "react": "^19.3.0",
49
+ "react-dom": "^19.3.0"
41
50
  },
42
51
  "dependencies": {
43
- "@gmod/newick": "^1.0.0",
44
- "@jbrowse/svgcanvas": "6.5.0",
45
- "colord": "^2.9.3",
52
+ "@gmod/newick": "^1.0.3",
53
+ "@jbrowse/svgcanvas": "8.0.0",
54
+ "colord": "^2.10.0",
46
55
  "flatbush": "^4.6.2",
47
- "msa-parsers": "6.5.0"
56
+ "msa-parsers": "8.0.0"
48
57
  },
49
58
  "scripts": {
50
59
  "clean": "rimraf dist bundle",
@@ -16,8 +16,7 @@ const dna = {
16
16
  U: red[500],
17
17
  }
18
18
 
19
- // annotated rather than asserted: the wide type is what lets a free-string
20
- // scheme name index this, and an annotation still checks the literal against it
19
+ // Record<string, ...> so a free-string scheme name can index it
21
20
  const colorSchemes: Record<string, Record<string, string>> = {
22
21
  none: {},
23
22
  nucleotide: dna,
@@ -0,0 +1,58 @@
1
+ import type { ColumnCounts } from './columnCounts.ts'
2
+
3
+ export interface ColumnStats {
4
+ col: number
5
+ total: number
6
+ gaps: number
7
+ gapFraction: number
8
+ conservation: number
9
+ propertyConservation: number | undefined
10
+ consensusLetter: string
11
+ consensusCount: number
12
+ consensusFraction: number
13
+ distribution: [string, number][]
14
+ }
15
+
16
+ /**
17
+ * Summarize one column: consensus residue and its identity fraction, the two
18
+ * conservation scores, gap fraction, and the non-gap residue distribution
19
+ * sorted by count. undefined past the end of the alignment or for a column with
20
+ * no sequences.
21
+ *
22
+ * A module-level function: a getter that reached the method through `this` made
23
+ * TypeScript infer the whole views object to type it, and fell back to `any`.
24
+ */
25
+ export function columnStats({
26
+ col,
27
+ colStats,
28
+ conservation,
29
+ propertyConservation,
30
+ }: {
31
+ col: number
32
+ colStats: ColumnCounts
33
+ conservation: number[]
34
+ propertyConservation: number[]
35
+ }): ColumnStats | undefined {
36
+ if (col >= colStats.numColumns) {
37
+ return undefined
38
+ }
39
+ const total = colStats.total(col)
40
+ if (!total) {
41
+ return undefined
42
+ }
43
+ const gaps = colStats.gapCount(col)
44
+ const distribution = colStats.residueEntries(col).sort((a, b) => b[1] - a[1])
45
+ const consensus = distribution[0]
46
+ return {
47
+ col,
48
+ total,
49
+ gaps,
50
+ gapFraction: gaps / total,
51
+ conservation: conservation[col] ?? 0,
52
+ propertyConservation: propertyConservation[col],
53
+ consensusLetter: consensus?.[0] ?? '',
54
+ consensusCount: consensus?.[1] ?? 0,
55
+ consensusFraction: consensus ? consensus[1] / total : 0,
56
+ distribution,
57
+ }
58
+ }
@@ -1,7 +1,11 @@
1
1
  import React, { useState } from 'react'
2
2
 
3
+ import { useTheme } from '@mui/material'
4
+
3
5
  import { useDragScroll } from '../useDragScroll.ts'
4
6
 
7
+ import type { Theme } from '@mui/material'
8
+
5
9
  export const scrollbarThumbFill = 'rgba(66,119,127,0.3)'
6
10
 
7
11
  // The scroll thumbs (minimap, vertical scrollbar) and the resize dividers are
@@ -11,23 +15,29 @@ export const scrollbarThumbFill = 'rgba(66,119,127,0.3)'
11
15
  const variants: Record<
12
16
  'thumb' | 'resizer',
13
17
  {
14
- fill: string
15
- fillHovered: string
18
+ fill: (theme: Theme) => string
19
+ fillHovered: (theme: Theme) => string
16
20
  cursor: (axis: 'x' | 'y') => string
17
21
  position: React.CSSProperties['position']
18
22
  zIndex?: number
19
23
  }
20
24
  > = {
21
25
  thumb: {
22
- fill: scrollbarThumbFill,
23
- fillHovered: 'rgba(66,119,127,0.6)',
26
+ fill: () => scrollbarThumbFill,
27
+ fillHovered: () => 'rgba(66,119,127,0.6)',
24
28
  cursor: () => 'pointer',
25
29
  position: 'absolute',
26
30
  zIndex: 100,
27
31
  },
28
32
  resizer: {
29
- fill: 'rgba(200,200,200)',
30
- fillHovered: 'rgba(150,150,150)',
33
+ fill: theme =>
34
+ theme.palette.mode === 'dark'
35
+ ? theme.palette.grey[800]
36
+ : 'rgba(200,200,200)',
37
+ fillHovered: theme =>
38
+ theme.palette.mode === 'dark'
39
+ ? theme.palette.grey[600]
40
+ : 'rgba(150,150,150)',
31
41
  cursor: axis => (axis === 'x' ? 'ew-resize' : 'ns-resize'),
32
42
  position: 'relative',
33
43
  },
@@ -54,6 +64,7 @@ export default function DragHandle({
54
64
  onDrag: (delta: number, startValue: number) => void
55
65
  style: React.CSSProperties
56
66
  }) {
67
+ const theme = useTheme()
57
68
  const [hovered, setHovered] = useState(false)
58
69
  const { startDrag } = useDragScroll(axis, onDrag)
59
70
  const { fill, fillHovered, cursor, position, zIndex } = variants[variant]
@@ -73,7 +84,7 @@ export default function DragHandle({
73
84
  position,
74
85
  zIndex,
75
86
  cursor: cursor(axis),
76
- background: hovered ? fillHovered : fill,
87
+ background: hovered ? fillHovered(theme) : fill(theme),
77
88
  ...style,
78
89
  }}
79
90
  />
@@ -83,13 +83,23 @@ const Reset = observer(function ({
83
83
  })
84
84
 
85
85
  const Loading = observer(function ({ model }: { model: MsaViewModel }) {
86
- const { isLoading, dataInitialized, error, msaFilehandle, treeFilehandle } =
87
- model
86
+ const {
87
+ isLoading,
88
+ dataInitialized,
89
+ error,
90
+ resetCount,
91
+ msaFilehandle,
92
+ treeFilehandle,
93
+ } = model
88
94
  const hasPendingFilehandle = !!(msaFilehandle || treeFilehandle)
89
95
 
90
96
  return (
91
97
  <div>
98
+ {/* keyed on the reset counter: the boundary holds the error it caught
99
+ until it is remounted, so without this "Return to import form" put
100
+ the model back and left the error screen up */}
92
101
  <ErrorBoundary
102
+ key={resetCount}
93
103
  FallbackComponent={e => <Reset model={model} error={e.error} />}
94
104
  >
95
105
  {dataInitialized ? (
@@ -99,12 +109,8 @@ const Loading = observer(function ({ model }: { model: MsaViewModel }) {
99
109
  <MSAView model={model} />
100
110
  )
101
111
  ) : error ? (
102
- // Ahead of the spinner, because a failed load KEEPS its filehandle --
103
- // only an abort clears it. So hasPendingFilehandle stays true, this
104
- // fell to the spinner below, and the ImportForm that renders
105
- // `model.error` was never reached: the reader got "Downloading file"
106
- // and a Cancel button for as long as they were willing to watch it.
107
- // Found on AlphaFold's files/msa/ prefix answering 403 to every key.
112
+ // checked before the spinner: a failed load keeps its filehandle
113
+ // (only an abort clears it), so hasPendingFilehandle stays true
108
114
  <Reset model={model} error={error} />
109
115
  ) : hasPendingFilehandle || isLoading ? (
110
116
  <LoadingSpinner model={model} />
@@ -12,16 +12,27 @@ import Header from './header/Header.tsx'
12
12
  import Minimap from './minimap/Minimap.tsx'
13
13
  import MSAPanel from './msa/MSAPanel.tsx'
14
14
  import { clickColor, hoverColor } from './overlayColors.ts'
15
+ import RowPanelHeaders from './rowpanels/RowPanelHeaders.tsx'
16
+ import RowPanels from './rowpanels/RowPanels.tsx'
17
+ import TreeOverview from './tree/TreeOverview.tsx'
15
18
  import TreePanel from './tree/TreePanel.tsx'
16
19
  import TreeRuler from './tree/TreeRuler.tsx'
17
20
 
18
21
  import type { MsaViewModel } from '../model.ts'
19
22
 
23
+ // The band above the panels: the tree overview and scale bar, the strip
24
+ // headers, and the minimap over the alignment. The spacer stands in for the
25
+ // resize handle, so the minimap starts exactly where the alignment canvas does.
20
26
  const TopArea = observer(function ({ model }: { model: MsaViewModel }) {
21
- const { showHorizontalScrollbar } = model
27
+ const { showHorizontalScrollbar, showTreeOverview, resizeHandleWidth } = model
22
28
  return (
23
29
  <div style={{ display: 'flex' }}>
24
- <TreeRuler model={model} />
30
+ <div style={{ flexShrink: 0 }}>
31
+ {showTreeOverview ? <TreeOverview model={model} /> : null}
32
+ <TreeRuler model={model} />
33
+ </div>
34
+ <RowPanelHeaders model={model} />
35
+ <div style={{ width: resizeHandleWidth, flexShrink: 0 }} />
25
36
  {showHorizontalScrollbar ? <Minimap model={model} /> : null}
26
37
  </div>
27
38
  )
@@ -38,6 +49,7 @@ const TrackColumnIndicator = observer(function ({
38
49
  colWidth,
39
50
  scrollX,
40
51
  treeAreaWidth,
52
+ rowPanelsWidth,
41
53
  resizeHandleWidth,
42
54
  totalTrackAreaHeight,
43
55
  msaCanvasWidth,
@@ -53,7 +65,7 @@ const TrackColumnIndicator = observer(function ({
53
65
  <div
54
66
  style={{
55
67
  position: 'absolute',
56
- left: treeAreaWidth + resizeHandleWidth,
68
+ left: treeAreaWidth + rowPanelsWidth + resizeHandleWidth,
57
69
  top: 0,
58
70
  width: msaCanvasWidth,
59
71
  height: totalTrackAreaHeight,
@@ -102,6 +114,7 @@ const MainArea = observer(function ({ model }: { model: MsaViewModel }) {
102
114
  return (
103
115
  <div style={{ display: 'flex' }}>
104
116
  <TreePanel model={model} />
117
+ <RowPanels model={model} />
105
118
  <VerticalResizeHandle model={model} />
106
119
  <MSAPanel model={model} />
107
120
  {showVerticalScrollbar ? <VerticalScrollbar model={model} /> : null}
@@ -120,14 +133,15 @@ const View = observer(function ({ model }: { model: MsaViewModel }) {
120
133
  })
121
134
 
122
135
  const MSAView = observer(function ({ model }: { model: MsaViewModel }) {
123
- const { height, viewInitialized, DialogComponent, DialogProps } = model
136
+ const { height, hideHeader, viewInitialized, DialogComponent, DialogProps } =
137
+ model
124
138
 
125
139
  return (
126
140
  <div>
127
141
  {viewInitialized ? (
128
142
  <>
129
143
  <div style={{ height, overflow: 'hidden' }}>
130
- <Header model={model} />
144
+ {hideHeader ? null : <Header model={model} />}
131
145
  <View model={model} />
132
146
  </div>
133
147
  <HorizontalResizeHandle model={model} />