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
@@ -1,87 +0,0 @@
1
- import { getSnapshot } from '@jbrowse/mobx-state-tree'
2
- import { expect, test } from 'vitest'
3
-
4
- import stateModelFactory from './model.ts'
5
-
6
- const MsaView = stateModelFactory()
7
-
8
- test('default view produces a minimal snapshot (defaults stripped)', () => {
9
- const model = MsaView.create({ type: 'MsaView' })
10
- const snap = getSnapshot(model)
11
- // only the always-present keys remain; every defaulted scalar/collection is gone
12
- expect(snap.colWidth).toBeUndefined()
13
- expect(snap.rowHeight).toBeUndefined()
14
- expect(snap.showDomains).toBeUndefined()
15
- expect(snap.colorSchemeName).toBeUndefined()
16
- expect(snap.drawTree).toBeUndefined()
17
- expect(snap.treeAreaWidth).toBeUndefined()
18
- expect(snap.collapsed).toBeUndefined()
19
- expect(snap.turnedOffTracks).toBeUndefined()
20
- expect(snap.type).toBe('MsaView')
21
- })
22
-
23
- test('non-default values are retained in the snapshot', () => {
24
- const model = MsaView.create({ type: 'MsaView' })
25
- model.setColWidth(30)
26
- model.setColorSchemeName('clustalx')
27
- model.setDrawTree(false)
28
- model.toggleCollapsed('nodeA')
29
- const snap = getSnapshot(model)
30
- expect(snap.colWidth).toBe(30)
31
- expect(snap.colorSchemeName).toBe('clustalx')
32
- expect(snap.drawTree).toBe(false)
33
- expect(snap.collapsed).toEqual(['nodeA'])
34
- })
35
-
36
- test('setting a value back to its default strips it again', () => {
37
- const model = MsaView.create({ type: 'MsaView' })
38
- model.setColWidth(30)
39
- expect(getSnapshot(model).colWidth).toBe(30)
40
- model.setColWidth(12) // defaultColWidth
41
- expect(getSnapshot(model).colWidth).toBeUndefined()
42
- })
43
-
44
- test('inline data is stripped when a filehandle can refetch it', () => {
45
- const model = MsaView.create({
46
- type: 'MsaView',
47
- data: { msa: '>s1\nACGT', tree: '(a,b);' },
48
- msaFilehandle: {
49
- uri: 'http://example.com/x.fa',
50
- locationType: 'UriLocation',
51
- },
52
- })
53
- const snap = getSnapshot(model)
54
- // msa dropped (msaFilehandle present), tree kept (no treeFilehandle)
55
- expect(snap.data.msa).toBeUndefined()
56
- expect(snap.data.tree).toBe('(a,b);')
57
- })
58
-
59
- test('inline gff survives the snapshot when no gffFilehandle can refetch it', () => {
60
- const gff = 's1\tx\tprotein_match\t1\t3\t.\t.\t.\tName=PF1'
61
- const withInlineGff = MsaView.create({
62
- type: 'MsaView',
63
- data: { msa: '>s1\nACGT', gff },
64
- })
65
- expect(getSnapshot(withInlineGff).data.gff).toBe(gff)
66
-
67
- const withFilehandle = MsaView.create({
68
- type: 'MsaView',
69
- data: { msa: '>s1\nACGT', gff },
70
- gffFilehandle: {
71
- uri: 'http://example.com/x.gff',
72
- locationType: 'UriLocation',
73
- },
74
- })
75
- expect(getSnapshot(withFilehandle).data.gff).toBeUndefined()
76
- })
77
-
78
- // The legend floats over the top-right of the alignment, so collapsing it is a
79
- // way of seeing the residues under it. As component state that choice was lost
80
- // on every reload and could not be set by a session or a figure at all.
81
- test('a collapsed domain legend survives into the snapshot', () => {
82
- const model = MsaView.create({ type: 'MsaView' })
83
- expect(getSnapshot(model).showDomainLegend).toBeUndefined()
84
- model.setShowDomainLegend(false)
85
- expect(getSnapshot(model).showDomainLegend).toBe(false)
86
- expect(MsaView.create(getSnapshot(model)).showDomainLegend).toBe(false)
87
- })
@@ -1,39 +0,0 @@
1
- import { expect, test, vi } from 'vitest'
2
-
3
- import stateModelFactory from './model.ts'
4
-
5
- const MsaView = stateModelFactory()
6
-
7
- const msa = '>seq1\nACGT\n>seq2\nACCT\n'
8
-
9
- test('treeMetadata is parsed and keyed by row name', () => {
10
- const model = MsaView.create({ type: 'MsaView' })
11
- model.setData({
12
- msa,
13
- treeMetadata: JSON.stringify({ seq1: { genome: 'Human' } }),
14
- })
15
- expect(model.treeMetadata.seq1?.genome).toBe('Human')
16
- expect(model.treeMetadata.seq2).toBeUndefined()
17
- expect(model.getRowData('seq1').treeMetadata).toEqual({ genome: 'Human' })
18
- })
19
-
20
- test('malformed treeMetadata degrades to empty rather than throwing', () => {
21
- const model = MsaView.create({ type: 'MsaView' })
22
- const spy = vi.spyOn(console, 'error').mockImplementation(() => {})
23
- model.setData({ msa, treeMetadata: '{not json' })
24
-
25
- // treeMetadata comes from a user-supplied file, and consumers of this
26
- // computed run during layout/render (labelWidthMap measures every label), so
27
- // a parse failure must not throw out of them
28
- expect(model.treeMetadata).toEqual({})
29
- expect(() => model.getRowData('seq1')).not.toThrow()
30
- expect(spy).toHaveBeenCalled()
31
- spy.mockRestore()
32
- })
33
-
34
- test('non-object treeMetadata degrades to empty', () => {
35
- const model = MsaView.create({ type: 'MsaView' })
36
- model.setData({ msa, treeMetadata: 'null' })
37
- expect(model.treeMetadata).toEqual({})
38
- expect(() => model.getRowData('seq1')).not.toThrow()
39
- })
@@ -1,98 +0,0 @@
1
- // @vitest-environment jsdom
2
- //
3
- // Assigning width/height to a canvas resets its bitmap, and React assigns them
4
- // on every commit where they changed. A draw that ran during the mobx reaction
5
- // -- before React commits -- is therefore wiped by the resize that follows it,
6
- // which is what used to blank the tree on a tree-area drag and the consensus
7
- // tracks on a vertical zoom. So the hook has to draw again after the resize.
8
- import React, { act } from 'react'
9
-
10
- import { observable, runInAction } from 'mobx'
11
- import { observer } from 'mobx-react'
12
- import { createRoot } from 'react-dom/client'
13
- import { afterEach, beforeAll, beforeEach, expect, test } from 'vitest'
14
-
15
- import { useCanvasAutorun } from './useCanvasAutorun.ts'
16
-
17
- import type { Root } from 'react-dom/client'
18
-
19
- Reflect.set(globalThis, 'IS_REACT_ACT_ENVIRONMENT', true)
20
-
21
- beforeAll(() => {
22
- HTMLCanvasElement.prototype.getContext = function (this: HTMLCanvasElement) {
23
- return { canvas: this } as unknown as CanvasRenderingContext2D
24
- } as unknown as typeof HTMLCanvasElement.prototype.getContext
25
- })
26
-
27
- const state = observable({ width: 100, color: 'red' })
28
- // what each draw saw: the observables it renders from, and the size of the
29
- // canvas it was drawing onto
30
- let draws: { observed: number; color: string; canvas: number }[] = []
31
-
32
- const Probe = observer(function () {
33
- const ref = useCanvasAutorun({
34
- draw: ctx => {
35
- draws.push({
36
- observed: state.width,
37
- color: state.color,
38
- canvas: ctx.canvas.width,
39
- })
40
- },
41
- width: state.width,
42
- height: 50,
43
- deps: [],
44
- })
45
- return <canvas ref={ref} width={state.width} height={50} />
46
- })
47
-
48
- let container: HTMLElement
49
- let root: Root
50
-
51
- beforeEach(() => {
52
- draws = []
53
- runInAction(() => {
54
- state.width = 100
55
- state.color = 'red'
56
- })
57
- container = document.createElement('div')
58
- document.body.appendChild(container)
59
- root = createRoot(container)
60
- act(() => {
61
- root.render(<Probe />)
62
- })
63
- })
64
-
65
- afterEach(() => {
66
- act(() => {
67
- root.unmount()
68
- })
69
- container.remove()
70
- })
71
-
72
- test('the first draw sees the canvas at its rendered size', () => {
73
- expect(draws).toEqual([{ observed: 100, color: 'red', canvas: 100 }])
74
- })
75
-
76
- test('a resize is followed by a draw onto the resized canvas', () => {
77
- act(() => {
78
- runInAction(() => {
79
- state.width = 300
80
- })
81
- })
82
-
83
- expect(container.querySelector('canvas')!.width).toBe(300)
84
- expect(draws.at(-1)).toEqual({ observed: 300, color: 'red', canvas: 300 })
85
- })
86
-
87
- test('a change that leaves the size alone draws exactly once', () => {
88
- act(() => {
89
- runInAction(() => {
90
- state.color = 'blue'
91
- })
92
- })
93
-
94
- expect(draws).toEqual([
95
- { observed: 100, color: 'red', canvas: 100 },
96
- { observed: 100, color: 'blue', canvas: 100 },
97
- ])
98
- })
@@ -1,18 +0,0 @@
1
- import { useMemo } from 'react'
2
-
3
- import { useTheme } from '@mui/material'
4
-
5
- import { colorContrast } from './util.ts'
6
-
7
- /**
8
- * Resolves the current theme and a memoized contrast-color scheme for a given
9
- * color scheme. Shared by the MSA and text-track canvas blocks.
10
- */
11
- export function useColorContrast(colorScheme: Record<string, string>) {
12
- const theme = useTheme()
13
- const contrastScheme = useMemo(
14
- () => colorContrast(colorScheme, theme),
15
- [colorScheme, theme],
16
- )
17
- return { theme, contrastScheme }
18
- }
@@ -1,134 +0,0 @@
1
- // @vitest-environment jsdom
2
- //
3
- // The chrome around the alignment -- the tree/height resize handles, the
4
- // minimap and the vertical scrollbar -- is all built from the same
5
- // mousedown-then-drag hook, and none of it is exercised by the render tests.
6
- // This mounts the real view and drives one handle of each kind.
7
- import React, { act } from 'react'
8
-
9
- import { createRoot } from 'react-dom/client'
10
- import { afterEach, beforeAll, beforeEach, expect, test } from 'vitest'
11
-
12
- import MSAView from './components/Loading.tsx'
13
- import MSAModelF from './model.ts'
14
-
15
- import type { MsaViewModel } from './model.ts'
16
- import type { Root } from 'react-dom/client'
17
-
18
- Reflect.set(globalThis, 'IS_REACT_ACT_ENVIRONMENT', true)
19
-
20
- beforeAll(() => {
21
- HTMLCanvasElement.prototype.getContext = function (this: HTMLCanvasElement) {
22
- return {
23
- canvas: this,
24
- font: '12px sans-serif',
25
- measureText: (t: string) => ({ width: t.length * 7 }),
26
- arc() {},
27
- beginPath() {},
28
- clearRect() {},
29
- closePath() {},
30
- fill() {},
31
- fillRect() {},
32
- fillText() {},
33
- lineTo() {},
34
- moveTo() {},
35
- resetTransform() {},
36
- scale() {},
37
- setLineDash() {},
38
- stroke() {},
39
- strokeRect() {},
40
- translate() {},
41
- } as unknown as CanvasRenderingContext2D
42
- } as unknown as typeof HTMLCanvasElement.prototype.getContext
43
- })
44
-
45
- // tall and wide enough that both scrollbars are on screen
46
- const names = Array.from({ length: 20 }, (_, i) => `seq${i}`)
47
- const msa = names.map(name => `>${name}\n${'ACGT'.repeat(25)}`).join('\n')
48
- const tree = `(${names.map(n => `${n}:0.1`).join(',')});`
49
-
50
- let container: HTMLDivElement
51
- let root: Root
52
- let model: MsaViewModel
53
-
54
- beforeEach(() => {
55
- container = document.createElement('div')
56
- document.body.append(container)
57
- root = createRoot(container)
58
- model = MSAModelF().create({
59
- type: 'MsaView',
60
- msaFormat: 'fasta',
61
- height: 200,
62
- data: { msa, tree },
63
- })
64
- model.setWidth(800)
65
- act(() => {
66
- root.render(<MSAView model={model} />)
67
- })
68
- })
69
-
70
- afterEach(() => {
71
- act(() => {
72
- root.unmount()
73
- })
74
- container.remove()
75
- })
76
-
77
- function byCursor(cursor: string) {
78
- return [...container.querySelectorAll<HTMLElement>('div')].filter(
79
- el => el.style.cursor === cursor,
80
- )
81
- }
82
-
83
- // useDragScroll defers each move to an animation frame, so a drag needs one
84
- // flushed frame before the model has moved
85
- async function drag(el: HTMLElement, { x = 0, y = 0 }) {
86
- await act(async () => {
87
- el.dispatchEvent(
88
- new MouseEvent('mousedown', { bubbles: true, clientX: 0, clientY: 0 }),
89
- )
90
- })
91
- await act(async () => {
92
- document.dispatchEvent(
93
- new MouseEvent('mousemove', { bubbles: true, clientX: x, clientY: y }),
94
- )
95
- await new Promise(resolve => {
96
- requestAnimationFrame(resolve)
97
- })
98
- })
99
- await act(async () => {
100
- document.dispatchEvent(new MouseEvent('mouseup', { bubbles: true }))
101
- })
102
- }
103
-
104
- test('the view mounts with both scrollbars', () => {
105
- expect(container.querySelector('[data-testid="msa_canvas"]')).toBeTruthy()
106
- expect(model.showVerticalScrollbar).toBe(true)
107
- expect(model.showHorizontalScrollbar).toBe(true)
108
- // one horizontal divider (tree/msa), two vertical (view height, and the
109
- // conservation track's own)
110
- expect(byCursor('ew-resize')).toHaveLength(1)
111
- expect(byCursor('ns-resize')).toHaveLength(2)
112
- })
113
-
114
- test('dragging the tree divider widens the tree area', async () => {
115
- const before = model.treeAreaWidth
116
- await drag(byCursor('ew-resize')[0]!, { x: 60 })
117
- expect(model.treeAreaWidth).toBe(before + 60)
118
- })
119
-
120
- test('dragging the view divider grows the view', async () => {
121
- const before = model.height
122
- // the last ns-resize handle is the one below the whole view
123
- await drag(byCursor('ns-resize').at(-1)!, { y: 50 })
124
- expect(model.height).toBe(before + 50)
125
- })
126
-
127
- test('dragging the scrollbar thumb scrolls the alignment', async () => {
128
- const thumb = container.querySelector<HTMLElement>(
129
- 'div[style*="cursor: pointer"]',
130
- )!
131
- expect(model.scrollX).toBe(0)
132
- await drag(thumb, { x: 40 })
133
- expect(model.scrollX).toBeLessThan(0)
134
- })
@@ -1,46 +0,0 @@
1
- import { describe, expect, test } from 'vitest'
2
-
3
- import {
4
- getZoomNormalizer,
5
- normalizeWheelDelta,
6
- zoomFactorFromAccum,
7
- } from './wheelZoom.ts'
8
-
9
- describe('normalizeWheelDelta', () => {
10
- test('pixel mode passes through', () => {
11
- expect(normalizeWheelDelta(120, 0)).toBe(120)
12
- })
13
- test('line mode scales to pixels', () => {
14
- expect(normalizeWheelDelta(3, 1)).toBe(48)
15
- })
16
- test('page mode scales to pixels', () => {
17
- expect(normalizeWheelDelta(2, 2)).toBe(200)
18
- })
19
- })
20
-
21
- describe('getZoomNormalizer', () => {
22
- test('tiny pinch deltas get the smallest divisor (largest step)', () => {
23
- expect(getZoomNormalizer(3)).toBe(25)
24
- })
25
- test('large mouse notches get the largest divisor (finest step)', () => {
26
- expect(getZoomNormalizer(200)).toBe(500)
27
- })
28
- test('medium deltas land in between', () => {
29
- expect(getZoomNormalizer(50)).toBe(150)
30
- expect(getZoomNormalizer(20)).toBe(75)
31
- })
32
- })
33
-
34
- describe('zoomFactorFromAccum', () => {
35
- test('negative accum zooms in (factor > 1)', () => {
36
- expect(zoomFactorFromAccum(-0.1, 16.67)).toBeCloseTo(1.1)
37
- })
38
- test('positive accum zooms out (factor < 1)', () => {
39
- expect(zoomFactorFromAccum(0.1, 16.67)).toBeCloseTo(1 / 1.1)
40
- })
41
- test('rate-limits a big burst to ~0.2 per frame', () => {
42
- // a huge accumulated delta cannot zoom more than the per-frame cap
43
- expect(zoomFactorFromAccum(99, 16.67)).toBeCloseTo(1 / 1.2, 2)
44
- expect(zoomFactorFromAccum(-99, 16.67)).toBeCloseTo(1.2, 2)
45
- })
46
- })