react-msaview 7.0.0 → 8.1.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 (335) hide show
  1. package/README.md +11 -10
  2. package/bundle/index.js +122 -111
  3. package/bundle/index.js.map +4 -4
  4. package/dist/calculateBlocks.js +5 -3
  5. package/dist/calculateBlocks.js.map +1 -1
  6. package/dist/colorSchemes.js +1 -2
  7. package/dist/colorSchemes.js.map +1 -1
  8. package/dist/columnStats.d.ts +28 -0
  9. package/dist/columnStats.js +34 -0
  10. package/dist/columnStats.js.map +1 -0
  11. package/dist/components/DragHandle.d.ts +3 -2
  12. package/dist/components/DragHandle.js +11 -5
  13. package/dist/components/DragHandle.js.map +1 -1
  14. package/dist/components/Loading.js +2 -8
  15. package/dist/components/Loading.js.map +1 -1
  16. package/dist/components/MSAView.js +17 -6
  17. package/dist/components/MSAView.js.map +1 -1
  18. package/dist/components/MSAViewer.d.ts +64 -7
  19. package/dist/components/MSAViewer.js +128 -23
  20. package/dist/components/MSAViewer.js.map +1 -1
  21. package/dist/components/PortalTooltip.d.ts +11 -0
  22. package/dist/components/PortalTooltip.js +29 -0
  23. package/dist/components/PortalTooltip.js.map +1 -0
  24. package/dist/components/ResizeHandles.js +11 -29
  25. package/dist/components/ResizeHandles.js.map +1 -1
  26. package/dist/components/SequenceTextArea.js +3 -4
  27. package/dist/components/SequenceTextArea.js.map +1 -1
  28. package/dist/components/Track.js +43 -24
  29. package/dist/components/Track.js.map +1 -1
  30. package/dist/components/dialogs/AboutDialog.js +6 -6
  31. package/dist/components/dialogs/AboutDialog.js.map +1 -1
  32. package/dist/components/dialogs/AnnotationFileDialog.js +5 -2
  33. package/dist/components/dialogs/AnnotationFileDialog.js.map +1 -1
  34. package/dist/components/dialogs/ExportSVGDialog.js +6 -4
  35. package/dist/components/dialogs/ExportSVGDialog.js.map +1 -1
  36. package/dist/components/dialogs/FeatureDialog.js +8 -3
  37. package/dist/components/dialogs/FeatureDialog.js.map +1 -1
  38. package/dist/components/dialogs/TrackInfoDialog.js +1 -1
  39. package/dist/components/dialogs/TrackInfoDialog.js.map +1 -1
  40. package/dist/components/header/GappynessSlider.js +6 -11
  41. package/dist/components/header/GappynessSlider.js.map +1 -1
  42. package/dist/components/header/Header.js +4 -1
  43. package/dist/components/header/Header.js.map +1 -1
  44. package/dist/components/header/LoadWarnings.js +6 -23
  45. package/dist/components/header/LoadWarnings.js.map +1 -1
  46. package/dist/components/header/ScrollZoomIcons.d.ts +6 -0
  47. package/dist/components/header/ScrollZoomIcons.js +35 -0
  48. package/dist/components/header/ScrollZoomIcons.js.map +1 -0
  49. package/dist/components/header/TreeSettingsMenu.js +1 -3
  50. package/dist/components/header/TreeSettingsMenu.js.map +1 -1
  51. package/dist/components/header/UnshareableDataWarning.js +2 -4
  52. package/dist/components/header/UnshareableDataWarning.js.map +1 -1
  53. package/dist/components/header/ZoomControls.js +49 -6
  54. package/dist/components/header/ZoomControls.js.map +1 -1
  55. package/dist/components/header/getAnnotationsMenu.js +3 -6
  56. package/dist/components/header/getAnnotationsMenu.js.map +1 -1
  57. package/dist/components/header/settingsMenuItems.js +12 -9
  58. package/dist/components/header/settingsMenuItems.js.map +1 -1
  59. package/dist/components/import/ImportForm.js +1 -1
  60. package/dist/components/import/ImportForm.js.map +1 -1
  61. package/dist/components/import/util.js +1 -2
  62. package/dist/components/import/util.js.map +1 -1
  63. package/dist/components/minimap/Minimap.js +1 -2
  64. package/dist/components/minimap/Minimap.js.map +1 -1
  65. package/dist/components/msa/AnnotationLegend.js +27 -19
  66. package/dist/components/msa/AnnotationLegend.js.map +1 -1
  67. package/dist/components/msa/MSACanvas.js +2 -4
  68. package/dist/components/msa/MSACanvas.js.map +1 -1
  69. package/dist/components/msa/MSACanvasBlock.js +13 -15
  70. package/dist/components/msa/MSACanvasBlock.js.map +1 -1
  71. package/dist/components/msa/MSAMouseoverCanvas.js +2 -1
  72. package/dist/components/msa/MSAMouseoverCanvas.js.map +1 -1
  73. package/dist/components/msa/domainBandCursor.d.ts +7 -11
  74. package/dist/components/msa/domainBandCursor.js +7 -11
  75. package/dist/components/msa/domainBandCursor.js.map +1 -1
  76. package/dist/components/msa/drawFeatureSpans.d.ts +59 -0
  77. package/dist/components/msa/drawFeatureSpans.js +113 -0
  78. package/dist/components/msa/drawFeatureSpans.js.map +1 -0
  79. package/dist/components/msa/legendRows.d.ts +8 -0
  80. package/dist/components/msa/legendRows.js +16 -0
  81. package/dist/components/msa/legendRows.js.map +1 -0
  82. package/dist/components/msa/msaRaster.d.ts +24 -31
  83. package/dist/components/msa/msaRaster.js +30 -39
  84. package/dist/components/msa/msaRaster.js.map +1 -1
  85. package/dist/components/msa/packDomainLanes.d.ts +20 -0
  86. package/dist/components/msa/packDomainLanes.js +33 -0
  87. package/dist/components/msa/packDomainLanes.js.map +1 -0
  88. package/dist/components/msa/renderBoxFeatureCanvasBlock.d.ts +3 -1
  89. package/dist/components/msa/renderBoxFeatureCanvasBlock.js +50 -87
  90. package/dist/components/msa/renderBoxFeatureCanvasBlock.js.map +1 -1
  91. package/dist/components/msa/renderHighlights.d.ts +15 -13
  92. package/dist/components/msa/renderHighlights.js +43 -20
  93. package/dist/components/msa/renderHighlights.js.map +1 -1
  94. package/dist/components/msa/renderMSABlock.js +12 -12
  95. package/dist/components/msa/renderMSABlock.js.map +1 -1
  96. package/dist/components/msa/tileColor.js +4 -7
  97. package/dist/components/msa/tileColor.js.map +1 -1
  98. package/dist/components/msa/useMsaBlockMouse.d.ts +5 -3
  99. package/dist/components/msa/useMsaBlockMouse.js +6 -6
  100. package/dist/components/msa/useMsaBlockMouse.js.map +1 -1
  101. package/dist/components/rowpanels/RowPanelBlock.d.ts +9 -0
  102. package/dist/components/rowpanels/RowPanelBlock.js +86 -0
  103. package/dist/components/rowpanels/RowPanelBlock.js.map +1 -0
  104. package/dist/components/rowpanels/RowPanelHeaders.d.ts +12 -0
  105. package/dist/components/rowpanels/RowPanelHeaders.js +38 -0
  106. package/dist/components/rowpanels/RowPanelHeaders.js.map +1 -0
  107. package/dist/components/{msa/ColumnStats.d.ts → rowpanels/RowPanels.d.ts} +2 -2
  108. package/dist/components/rowpanels/RowPanels.js +32 -0
  109. package/dist/components/rowpanels/RowPanels.js.map +1 -0
  110. package/dist/components/rowpanels/headerLayout.d.ts +1 -0
  111. package/dist/components/rowpanels/headerLayout.js +5 -0
  112. package/dist/components/rowpanels/headerLayout.js.map +1 -0
  113. package/dist/components/rowpanels/renderFeaturePanel.d.ts +21 -0
  114. package/dist/components/rowpanels/renderFeaturePanel.js +37 -0
  115. package/dist/components/rowpanels/renderFeaturePanel.js.map +1 -0
  116. package/dist/components/rowpanels/renderRowPanel.d.ts +23 -0
  117. package/dist/components/rowpanels/renderRowPanel.js +22 -0
  118. package/dist/components/rowpanels/renderRowPanel.js.map +1 -0
  119. package/dist/components/rowpanels/renderStrip.d.ts +20 -0
  120. package/dist/components/rowpanels/renderStrip.js +26 -0
  121. package/dist/components/rowpanels/renderStrip.js.map +1 -0
  122. package/dist/components/tracks/TrackBlocks.js +3 -5
  123. package/dist/components/tracks/TrackBlocks.js.map +1 -1
  124. package/dist/components/tracks/TrackTooltipContent.d.ts +15 -0
  125. package/dist/components/tracks/TrackTooltipContent.js +109 -0
  126. package/dist/components/tracks/TrackTooltipContent.js.map +1 -0
  127. package/dist/components/tracks/drawTracks.d.ts +4 -4
  128. package/dist/components/tracks/drawTracks.js +25 -39
  129. package/dist/components/tracks/drawTracks.js.map +1 -1
  130. package/dist/components/tracks/useTrackHover.d.ts +22 -0
  131. package/dist/components/tracks/useTrackHover.js +30 -0
  132. package/dist/components/tracks/useTrackHover.js.map +1 -0
  133. package/dist/components/tree/CladeLabels.d.ts +12 -0
  134. package/dist/components/tree/CladeLabels.js +48 -0
  135. package/dist/components/tree/CladeLabels.js.map +1 -0
  136. package/dist/components/tree/TreeBranchMenu.js +1 -1
  137. package/dist/components/tree/TreeBranchMenu.js.map +1 -1
  138. package/dist/components/tree/TreeCanvas.js +5 -4
  139. package/dist/components/tree/TreeCanvas.js.map +1 -1
  140. package/dist/components/tree/TreeCanvasBlock.js +4 -21
  141. package/dist/components/tree/TreeCanvasBlock.js.map +1 -1
  142. package/dist/components/tree/TreeNodeMenu.js +1 -1
  143. package/dist/components/tree/TreeNodeMenu.js.map +1 -1
  144. package/dist/components/tree/TreeOverview.d.ts +14 -0
  145. package/dist/components/tree/TreeOverview.js +75 -0
  146. package/dist/components/tree/TreeOverview.js.map +1 -0
  147. package/dist/components/tree/TreeRuler.js +9 -13
  148. package/dist/components/tree/TreeRuler.js.map +1 -1
  149. package/dist/components/tree/cladeBrackets.d.ts +25 -0
  150. package/dist/components/tree/cladeBrackets.js +51 -0
  151. package/dist/components/tree/cladeBrackets.js.map +1 -0
  152. package/dist/components/tree/dialogs/TreeNodeInfoDialog.js +2 -2
  153. package/dist/components/tree/dialogs/TreeNodeInfoDialog.js.map +1 -1
  154. package/dist/components/tree/renderTreeCanvas.js +160 -25
  155. package/dist/components/tree/renderTreeCanvas.js.map +1 -1
  156. package/dist/components/tree/renderTreeOverview.d.ts +52 -0
  157. package/dist/components/tree/renderTreeOverview.js +138 -0
  158. package/dist/components/tree/renderTreeOverview.js.map +1 -0
  159. package/dist/components/tree/useTreeHover.js +2 -4
  160. package/dist/components/tree/useTreeHover.js.map +1 -1
  161. package/dist/constants.d.ts +16 -0
  162. package/dist/constants.js +52 -22
  163. package/dist/constants.js.map +1 -1
  164. package/dist/createPaletteMap.d.ts +7 -6
  165. package/dist/createPaletteMap.js +10 -9
  166. package/dist/createPaletteMap.js.map +1 -1
  167. package/dist/element.d.ts +13 -0
  168. package/dist/element.js +269 -0
  169. package/dist/element.js.map +1 -0
  170. package/dist/featureFields.d.ts +11 -0
  171. package/dist/featureFields.js +17 -0
  172. package/dist/featureFields.js.map +1 -0
  173. package/dist/flatToTree.js +1 -2
  174. package/dist/flatToTree.js.map +1 -1
  175. package/dist/ggplotPalettes.d.ts +10 -0
  176. package/dist/ggplotPalettes.js +58 -0
  177. package/dist/ggplotPalettes.js.map +1 -1
  178. package/dist/hierarchy.d.ts +27 -0
  179. package/dist/hierarchy.js +66 -9
  180. package/dist/hierarchy.js.map +1 -1
  181. package/dist/index.d.ts +9 -1
  182. package/dist/index.js +5 -3
  183. package/dist/index.js.map +1 -1
  184. package/dist/model/DataModel.js +2 -5
  185. package/dist/model/DataModel.js.map +1 -1
  186. package/dist/model/msaModel.d.ts +3 -2
  187. package/dist/model/msaModel.js +3 -2
  188. package/dist/model/msaModel.js.map +1 -1
  189. package/dist/model/treeModel.d.ts +30 -0
  190. package/dist/model/treeModel.js +37 -1
  191. package/dist/model/treeModel.js.map +1 -1
  192. package/dist/model.d.ts +549 -294
  193. package/dist/model.js +1412 -621
  194. package/dist/model.js.map +1 -1
  195. package/dist/mount.d.ts +11 -0
  196. package/dist/mount.js +22 -0
  197. package/dist/mount.js.map +1 -0
  198. package/dist/neighborJoining.js +8 -32
  199. package/dist/neighborJoining.js.map +1 -1
  200. package/dist/renderToStaticMarkup.d.ts +10 -19
  201. package/dist/renderToStaticMarkup.js +13 -24
  202. package/dist/renderToStaticMarkup.js.map +1 -1
  203. package/dist/renderToSvg.js +180 -56
  204. package/dist/renderToSvg.js.map +1 -1
  205. package/dist/rowCoordinateCalculations.d.ts +4 -6
  206. package/dist/rowCoordinateCalculations.js +4 -6
  207. package/dist/rowCoordinateCalculations.js.map +1 -1
  208. package/dist/scales.d.ts +22 -0
  209. package/dist/scales.js +30 -0
  210. package/dist/scales.js.map +1 -0
  211. package/dist/seqPosToGlobalCol.d.ts +2 -3
  212. package/dist/seqPosToGlobalCol.js +2 -3
  213. package/dist/seqPosToGlobalCol.js.map +1 -1
  214. package/dist/sequenceLogo.d.ts +6 -11
  215. package/dist/sequenceLogo.js +6 -11
  216. package/dist/sequenceLogo.js.map +1 -1
  217. package/dist/stripDefault.d.ts +7 -14
  218. package/dist/stripDefault.js +7 -14
  219. package/dist/stripDefault.js.map +1 -1
  220. package/dist/svgTestUtil.d.ts +186 -70
  221. package/dist/types.d.ts +221 -21
  222. package/dist/umd.d.ts +2 -0
  223. package/dist/umd.js +4 -2
  224. package/dist/umd.js.map +1 -1
  225. package/dist/useCanvasAutorun.d.ts +5 -10
  226. package/dist/useCanvasAutorun.js +5 -10
  227. package/dist/useCanvasAutorun.js.map +1 -1
  228. package/dist/useMsaSvgFigure.d.ts +20 -0
  229. package/dist/useMsaSvgFigure.js +46 -0
  230. package/dist/useMsaSvgFigure.js.map +1 -0
  231. package/dist/useWheelScroll.js +0 -4
  232. package/dist/useWheelScroll.js.map +1 -1
  233. package/dist/util.d.ts +5 -6
  234. package/dist/util.js +13 -6
  235. package/dist/util.js.map +1 -1
  236. package/dist/version.d.ts +1 -1
  237. package/dist/version.js +1 -1
  238. package/package.json +19 -12
  239. package/src/calculateBlocks.ts +5 -3
  240. package/src/colorSchemes.ts +1 -2
  241. package/src/columnStats.ts +58 -0
  242. package/src/components/DragHandle.tsx +18 -7
  243. package/src/components/Loading.tsx +4 -36
  244. package/src/components/MSAView.tsx +19 -5
  245. package/src/components/MSAViewer.tsx +240 -28
  246. package/src/components/PortalTooltip.tsx +47 -0
  247. package/src/components/ResizeHandles.tsx +17 -32
  248. package/src/components/SequenceTextArea.tsx +3 -4
  249. package/src/components/Track.tsx +57 -19
  250. package/src/components/dialogs/AboutDialog.tsx +35 -6
  251. package/src/components/dialogs/AnnotationFileDialog.tsx +10 -1
  252. package/src/components/dialogs/ExportSVGDialog.tsx +8 -3
  253. package/src/components/dialogs/FeatureDialog.tsx +11 -3
  254. package/src/components/dialogs/TrackInfoDialog.tsx +1 -1
  255. package/src/components/header/GappynessSlider.tsx +6 -11
  256. package/src/components/header/Header.tsx +7 -1
  257. package/src/components/header/LoadWarnings.tsx +11 -25
  258. package/src/components/header/ScrollZoomIcons.tsx +52 -0
  259. package/src/components/header/TreeSettingsMenu.tsx +1 -3
  260. package/src/components/header/UnshareableDataWarning.tsx +2 -4
  261. package/src/components/header/ZoomControls.tsx +74 -14
  262. package/src/components/header/getAnnotationsMenu.ts +3 -6
  263. package/src/components/header/settingsMenuItems.ts +13 -8
  264. package/src/components/import/ImportForm.tsx +3 -5
  265. package/src/components/import/ImportFormExamples.tsx +2 -2
  266. package/src/components/import/util.ts +1 -2
  267. package/src/components/minimap/Minimap.tsx +1 -2
  268. package/src/components/msa/AnnotationLegend.tsx +48 -38
  269. package/src/components/msa/MSACanvas.tsx +3 -8
  270. package/src/components/msa/MSACanvasBlock.tsx +13 -16
  271. package/src/components/msa/MSAMouseoverCanvas.tsx +2 -1
  272. package/src/components/msa/domainBandCursor.ts +7 -11
  273. package/src/components/msa/drawFeatureSpans.ts +205 -0
  274. package/src/components/msa/legendRows.ts +24 -0
  275. package/src/components/msa/msaRaster.ts +30 -39
  276. package/src/components/msa/packDomainLanes.ts +36 -0
  277. package/src/components/msa/renderBoxFeatureCanvasBlock.ts +67 -123
  278. package/src/components/msa/renderHighlights.ts +53 -20
  279. package/src/components/msa/renderMSABlock.ts +14 -11
  280. package/src/components/msa/tileColor.ts +4 -7
  281. package/src/components/msa/useMsaBlockMouse.ts +6 -6
  282. package/src/components/rowpanels/RowPanelBlock.tsx +139 -0
  283. package/src/components/rowpanels/RowPanelHeaders.tsx +57 -0
  284. package/src/components/rowpanels/RowPanels.tsx +77 -0
  285. package/src/components/rowpanels/headerLayout.ts +5 -0
  286. package/src/components/rowpanels/renderFeaturePanel.ts +66 -0
  287. package/src/components/rowpanels/renderRowPanel.ts +41 -0
  288. package/src/components/rowpanels/renderStrip.ts +46 -0
  289. package/src/components/tracks/TrackBlocks.tsx +3 -5
  290. package/src/components/tracks/TrackTooltipContent.tsx +156 -0
  291. package/src/components/tracks/drawTracks.ts +25 -50
  292. package/src/components/tracks/useTrackHover.ts +42 -0
  293. package/src/components/tree/CladeLabels.tsx +77 -0
  294. package/src/components/tree/TreeBranchMenu.tsx +1 -2
  295. package/src/components/tree/TreeCanvas.tsx +2 -3
  296. package/src/components/tree/TreeCanvasBlock.tsx +8 -32
  297. package/src/components/tree/TreeNodeMenu.tsx +1 -2
  298. package/src/components/tree/TreeOverview.tsx +106 -0
  299. package/src/components/tree/TreeRuler.tsx +11 -22
  300. package/src/components/tree/cladeBrackets.ts +73 -0
  301. package/src/components/tree/dialogs/TreeNodeInfoDialog.tsx +2 -2
  302. package/src/components/tree/renderTreeCanvas.ts +242 -21
  303. package/src/components/tree/renderTreeOverview.ts +212 -0
  304. package/src/components/tree/useTreeHover.ts +2 -4
  305. package/src/constants.ts +61 -22
  306. package/src/createPaletteMap.ts +10 -9
  307. package/src/element.ts +321 -0
  308. package/src/featureFields.ts +19 -0
  309. package/src/flatToTree.ts +1 -2
  310. package/src/ggplotPalettes.ts +60 -0
  311. package/src/hierarchy.ts +77 -9
  312. package/src/index.ts +31 -7
  313. package/src/model/DataModel.ts +2 -5
  314. package/src/model/msaModel.ts +3 -2
  315. package/src/model/treeModel.ts +42 -0
  316. package/src/model.ts +1677 -643
  317. package/src/mount.tsx +32 -0
  318. package/src/neighborJoining.ts +8 -32
  319. package/src/renderToStaticMarkup.ts +13 -24
  320. package/src/renderToSvg.tsx +335 -68
  321. package/src/rowCoordinateCalculations.ts +4 -6
  322. package/src/scales.ts +47 -0
  323. package/src/seqPosToGlobalCol.ts +2 -3
  324. package/src/sequenceLogo.ts +6 -11
  325. package/src/stripDefault.ts +7 -14
  326. package/src/types.ts +260 -45
  327. package/src/umd.ts +4 -2
  328. package/src/useCanvasAutorun.ts +5 -10
  329. package/src/useMsaSvgFigure.ts +72 -0
  330. package/src/useWheelScroll.ts +0 -4
  331. package/src/util.ts +15 -6
  332. package/src/version.ts +1 -1
  333. package/dist/components/msa/ColumnStats.js +0 -42
  334. package/dist/components/msa/ColumnStats.js.map +0 -1
  335. package/src/components/msa/ColumnStats.tsx +0 -54
@@ -3,16 +3,70 @@ import { createJBrowseTheme } from '@jbrowse/core/ui/theme';
3
3
  import useMeasure from '@jbrowse/core/util/useMeasure';
4
4
  import { destroy, isAlive } from '@jbrowse/mobx-state-tree';
5
5
  import { ThemeProvider } from '@mui/material/styles';
6
+ import { compareStructural, reaction, when } from 'mobx';
6
7
  import MSAModelF from '../model.js';
7
8
  import Loading from './Loading.js';
8
- const theme = createJBrowseTheme();
9
- export default function MSAViewer({ msa, tree, gff, msaFilehandle, treeFilehandle, gffFilehandle, colorScheme, height, colWidth, rowHeight, allowedGappyness, highlightColumns, highlights, relativeTo, columnTracks, residueMappings, drawTree, treeAreaWidth, autoTreeAreaWidth, }) {
10
- // lazy initializer: the model is created exactly once from the initial props
11
- // (a stable MST instance — not a value safe to recompute, so not useMemo)
9
+ function resolveTheme(theme) {
10
+ return createJBrowseTheme(theme === 'dark'
11
+ ? { palette: { mode: 'dark' } }
12
+ : typeof theme === 'object'
13
+ ? theme
14
+ : undefined);
15
+ }
16
+ function sameSource(a, b) {
17
+ return (a.msa === b.msa &&
18
+ a.tree === b.tree &&
19
+ a.gff === b.gff &&
20
+ JSON.stringify([a.msaFilehandle, a.treeFilehandle, a.gffFilehandle]) ===
21
+ JSON.stringify([b.msaFilehandle, b.treeFilehandle, b.gffFilehandle]));
22
+ }
23
+ /**
24
+ * A new alignment, tree or annotation file needs a new model, so the viewer
25
+ * remounts when one of those props changes and keeps its model across every
26
+ * other change.
27
+ */
28
+ export default function MSAViewer(props) {
29
+ const { msa, tree, gff, msaFilehandle, treeFilehandle, gffFilehandle } = props;
30
+ const source = {
31
+ msa,
32
+ tree,
33
+ gff,
34
+ msaFilehandle,
35
+ treeFilehandle,
36
+ gffFilehandle,
37
+ };
38
+ const [shown, setShown] = useState({ source, generation: 0 });
39
+ if (!sameSource(shown.source, source)) {
40
+ setShown({ source, generation: shown.generation + 1 });
41
+ }
42
+ return React.createElement(Viewer, { key: shown.generation, ...props });
43
+ }
44
+ function useModelReaction(model, key, handler) {
45
+ const latest = useRef(handler);
46
+ useEffect(() => {
47
+ latest.current = handler;
48
+ });
49
+ const listening = !!handler;
50
+ useEffect(() => listening
51
+ ? reaction(() => model[key], value => {
52
+ latest.current?.(value);
53
+ }, { equals: compareStructural })
54
+ : undefined, [model, key, listening]);
55
+ }
56
+ function Viewer({ msa, tree, gff, msaFilehandle, treeFilehandle, gffFilehandle, colorScheme, height, colWidth, rowHeight, allowedGappyness, highlightColumns, highlights, clades, relativeTo, columnTracks, residueMappings, rowData, encodings, rowPanels, drawTree, residueEncoding, treeAreaWidth, autoTreeAreaWidth, showBranchLen, region, hideHeader, theme, onCellHover, onCellClick, onViewportChange, onModel, }) {
12
57
  const [model] = useState(() => MSAModelF().create({
13
58
  type: 'MsaView',
14
- ...(msa || tree || gff
15
- ? { data: { msa: msa ?? '', tree: tree ?? '', gff } }
59
+ ...(msa || tree || gff || rowData
60
+ ? {
61
+ data: {
62
+ msa: msa ?? '',
63
+ tree: tree ?? '',
64
+ gff,
65
+ // the row table is stored as this JSON string, which is what a
66
+ // shared URL and the size limit already cover
67
+ ...(rowData ? { treeMetadata: JSON.stringify(rowData) } : {}),
68
+ },
69
+ }
16
70
  : {}),
17
71
  ...(msaFilehandle ? { msaFilehandle } : {}),
18
72
  ...(treeFilehandle ? { treeFilehandle } : {}),
@@ -24,12 +78,19 @@ export default function MSAViewer({ msa, tree, gff, msaFilehandle, treeFilehandl
24
78
  ...(allowedGappyness !== undefined ? { allowedGappyness } : {}),
25
79
  ...(highlightColumns ? { highlightColumns } : {}),
26
80
  ...(highlights ? { highlights } : {}),
81
+ ...(clades ? { clades } : {}),
27
82
  ...(relativeTo ? { relativeTo } : {}),
28
83
  ...(columnTracks ? { columnTracks } : {}),
29
84
  ...(residueMappings ? { residueMappings } : {}),
85
+ ...(encodings ? { encodings } : {}),
86
+ ...(rowPanels ? { rowPanels } : {}),
30
87
  ...(drawTree !== undefined ? { drawTree } : {}),
31
88
  ...(treeAreaWidth ? { treeAreaWidth } : {}),
32
89
  ...(autoTreeAreaWidth ? { autoTreeAreaWidth } : {}),
90
+ ...(showBranchLen !== undefined ? { showBranchLen } : {}),
91
+ ...(residueEncoding !== undefined
92
+ ? { bgColor: residueEncoding === 'fill' }
93
+ : {}),
33
94
  }));
34
95
  const destroyTimer = useRef(undefined);
35
96
  const [ref, { width }] = useMeasure();
@@ -38,14 +99,8 @@ export default function MSAViewer({ msa, tree, gff, msaFilehandle, treeFilehandl
38
99
  model.setWidth(width);
39
100
  }
40
101
  }, [model, width]);
41
- // The props below stay live after mount: change one and it drives the model,
42
- // so a host can put a control on the viewer -- an expand button, a diff
43
- // toggle, a color-scheme picker -- without remounting it and re-fetching its
44
- // alignment. Each effect depends only on its own prop, so a change the user
45
- // makes inside the viewer (picking a scheme from the menu, dragging a row
46
- // taller) survives the host's next render rather than being snapped back.
47
- // Data props are not among them: new msa/tree/gff is a different alignment,
48
- // which is a new model, which React spells `key`.
102
+ // Each effect depends only on its own prop, so a change made inside the
103
+ // viewer survives the host's next render.
49
104
  useEffect(() => {
50
105
  if (height !== undefined) {
51
106
  model.setHeight(height);
@@ -81,17 +136,33 @@ export default function MSAViewer({ msa, tree, gff, msaFilehandle, treeFilehandl
81
136
  model.setTreeAreaWidth(treeAreaWidth);
82
137
  }
83
138
  }, [model, treeAreaWidth]);
84
- // unguarded: dropping the prop is how a host turns the reference diff back off
139
+ useEffect(() => {
140
+ if (showBranchLen !== undefined) {
141
+ model.setShowBranchLen(showBranchLen);
142
+ }
143
+ }, [model, showBranchLen]);
144
+ useEffect(() => {
145
+ if (residueEncoding !== undefined) {
146
+ model.setBgColor(residueEncoding === 'fill');
147
+ }
148
+ }, [model, residueEncoding]);
149
+ useEffect(() => {
150
+ model.setHideHeader(!!hideHeader);
151
+ }, [model, hideHeader]);
152
+ // unguarded, so removing the prop turns the reference diff off
85
153
  useEffect(() => {
86
154
  model.drawRelativeTo(relativeTo);
87
155
  }, [model, relativeTo]);
88
- // the data layers, keyed by content: a host that computes one inline hands a
89
- // new array on every render, and replacing the model's copy each time would
90
- // redraw the overlay for nothing
156
+ // keyed by content, since a host computing a layer inline passes a new array
157
+ // on every render
91
158
  const highlightsKey = JSON.stringify(highlights ?? []);
92
159
  useEffect(() => {
93
160
  model.setHighlights(JSON.parse(highlightsKey));
94
161
  }, [model, highlightsKey]);
162
+ const cladesKey = JSON.stringify(clades ?? []);
163
+ useEffect(() => {
164
+ model.setClades(JSON.parse(cladesKey));
165
+ }, [model, cladesKey]);
95
166
  const columnTracksKey = JSON.stringify(columnTracks ?? []);
96
167
  useEffect(() => {
97
168
  model.setColumnTracks(JSON.parse(columnTracksKey));
@@ -100,14 +171,48 @@ export default function MSAViewer({ msa, tree, gff, msaFilehandle, treeFilehandl
100
171
  useEffect(() => {
101
172
  model.setResidueMappings(JSON.parse(residueMappingsKey));
102
173
  }, [model, residueMappingsKey]);
174
+ const rowDataKey = JSON.stringify(rowData ?? {});
175
+ useEffect(() => {
176
+ const table = JSON.parse(rowDataKey);
177
+ // an empty table leaves whatever the snapshot or a filehandle loaded
178
+ if (Object.keys(table).length) {
179
+ model.setRowData(table);
180
+ }
181
+ }, [model, rowDataKey]);
182
+ const encodingsKey = JSON.stringify(encodings ?? []);
183
+ useEffect(() => {
184
+ model.setEncodings(JSON.parse(encodingsKey));
185
+ }, [model, encodingsKey]);
186
+ const rowPanelsKey = JSON.stringify(rowPanels ?? []);
187
+ useEffect(() => {
188
+ model.setRowPanels(JSON.parse(rowPanelsKey));
189
+ }, [model, rowPanelsKey]);
103
190
  const highlightColumnsKey = JSON.stringify(highlightColumns ?? null);
104
191
  useEffect(() => {
105
192
  model.setHighlightedColumns(JSON.parse(highlightColumnsKey) ?? undefined);
106
193
  }, [model, highlightColumnsKey]);
107
- // the model owns a matchMedia listener and whatever fetches its filehandles
108
- // started, so an unmounted viewer that keeps its model keeps those too. The
109
- // destroy is deferred by a tick because React's StrictMode mounts, unmounts
110
- // and remounts with the same state: the remount's effect cancels it
194
+ const regionKey = JSON.stringify(region ?? null);
195
+ useEffect(() => {
196
+ const target = JSON.parse(regionKey);
197
+ return target
198
+ ? when(() => model.viewInitialized && model.numColumns > 0, () => {
199
+ model.zoomToRegion(target);
200
+ })
201
+ : undefined;
202
+ }, [model, regionKey]);
203
+ useModelReaction(model, 'hoveredCell', onCellHover);
204
+ useModelReaction(model, 'clickedCell', onCellClick);
205
+ useModelReaction(model, 'viewport', onViewportChange);
206
+ const latestOnModel = useRef(onModel);
207
+ useEffect(() => {
208
+ latestOnModel.current = onModel;
209
+ });
210
+ useEffect(() => {
211
+ latestOnModel.current?.(model);
212
+ }, [model]);
213
+ // destroy releases the model's matchMedia listener and fetches. It waits a
214
+ // tick because StrictMode remounts with the same state, and the remount's
215
+ // effect cancels it.
111
216
  useEffect(() => {
112
217
  if (destroyTimer.current !== undefined) {
113
218
  clearTimeout(destroyTimer.current);
@@ -122,7 +227,7 @@ export default function MSAViewer({ msa, tree, gff, msaFilehandle, treeFilehandl
122
227
  });
123
228
  };
124
229
  }, [model]);
125
- return (React.createElement(ThemeProvider, { theme: theme },
230
+ return (React.createElement(ThemeProvider, { theme: resolveTheme(theme) },
126
231
  React.createElement("div", { ref: ref },
127
232
  React.createElement(Loading, { model: model }))));
128
233
  }
@@ -1 +1 @@
1
- {"version":3,"file":"MSAViewer.js","sourceRoot":"","sources":["../../src/components/MSAViewer.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MSAViewer.js","sourceRoot":"","sources":["../../src/components/MSAViewer.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import React from 'react';
2
+ /**
3
+ * A tooltip beside the pointer, portaled to the body. A panel's scroll
4
+ * transform is a containing block, so a fixed tooltip left inside it would
5
+ * position against the scrolled content instead of the window.
6
+ */
7
+ export default function PortalTooltip({ clientX, clientY, children, }: {
8
+ clientX: number;
9
+ clientY: number;
10
+ children: React.ReactNode;
11
+ }): React.ReactPortal;
@@ -0,0 +1,29 @@
1
+ import React from 'react';
2
+ import { makeStyles } from '@jbrowse/core/util/tss-react';
3
+ import { createPortal } from 'react-dom';
4
+ const useStyles = makeStyles()(theme => ({
5
+ tooltip: {
6
+ position: 'fixed',
7
+ pointerEvents: 'none',
8
+ zIndex: 10000,
9
+ backgroundColor: theme.palette.grey[700],
10
+ color: theme.palette.common.white,
11
+ padding: '4px 8px',
12
+ borderRadius: 4,
13
+ fontSize: 12,
14
+ whiteSpace: 'nowrap',
15
+ maxWidth: 300,
16
+ overflow: 'hidden',
17
+ textOverflow: 'ellipsis',
18
+ },
19
+ }));
20
+ /**
21
+ * A tooltip beside the pointer, portaled to the body. A panel's scroll
22
+ * transform is a containing block, so a fixed tooltip left inside it would
23
+ * position against the scrolled content instead of the window.
24
+ */
25
+ export default function PortalTooltip({ clientX, clientY, children, }) {
26
+ const { classes } = useStyles();
27
+ return createPortal(React.createElement("div", { className: classes.tooltip, style: { left: clientX + 12, top: clientY + 12 } }, children), document.body);
28
+ }
29
+ //# sourceMappingURL=PortalTooltip.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PortalTooltip.js","sourceRoot":"","sources":["../../src/components/PortalTooltip.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAA;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAExC,MAAM,SAAS,GAAG,UAAU,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACvC,OAAO,EAAE;QACP,QAAQ,EAAE,OAAO;QACjB,aAAa,EAAE,MAAM;QACrB,MAAM,EAAE,KAAK;QACb,eAAe,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;QACxC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK;QACjC,OAAO,EAAE,SAAS;QAClB,YAAY,EAAE,CAAC;QACf,QAAQ,EAAE,EAAE;QACZ,UAAU,EAAE,QAAQ;QACpB,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,QAAQ;QAClB,YAAY,EAAE,UAAU;KACzB;CACF,CAAC,CAAC,CAAA;AAEH;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,EACpC,OAAO,EACP,OAAO,EACP,QAAQ,GAKT;IACC,MAAM,EAAE,OAAO,EAAE,GAAG,SAAS,EAAE,CAAA;IAC/B,OAAO,YAAY,CACjB,6BACE,SAAS,EAAE,OAAO,CAAC,OAAO,EAC1B,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,GAAG,EAAE,EAAE,GAAG,EAAE,OAAO,GAAG,EAAE,EAAE,IAE/C,QAAQ,CACL,EACN,QAAQ,CAAC,IAAI,CACd,CAAA;AACH,CAAC"}
@@ -13,38 +13,20 @@ export const HorizontalResizeHandle = observer(function ({ model, }) {
13
13
  }, [model]);
14
14
  return (React.createElement(DragHandle, { axis: "y", variant: "resizer", getStart: () => model.height, onDrag: onDrag, style: { width: '100%', height: model.resizeHandleWidth } }));
15
15
  });
16
- // The volatile behind each resizable kind of computed track. Both bar tracks
17
- // write one height so conservation and property conservation stay directly
18
- // comparable; the logo keeps its own, being taller by default. Text tracks are
19
- // absent: they are one alignment row tall and follow rowHeight, so the zoom
20
- // controls already size them.
21
- const setTrackHeight = {
22
- bar: (model, height) => {
23
- model.setConservationTrackHeight(height);
24
- },
25
- logo: (model, height) => {
26
- model.setSequenceLogoTrackHeight(height);
27
- },
28
- arc: (model, height) => {
29
- model.setArcTrackHeight(height);
30
- },
31
- };
32
16
  export const TrackResizeHandle = observer(function ({ model, track, }) {
33
- const { id, kind, height } = track.model;
34
- const setHeight = setTrackHeight[kind];
35
- // a data track carries its own height, so its handle resizes that track --
36
- // dragging one used to resize every track of its kind instead
37
- const ownHeight = model.columnTracks.some(t => t.id === id);
17
+ const { id, heightKey, height } = track.model;
18
+ // tracks sharing a key resize together, so only the last turned-on one of
19
+ // them carries the divider: a second between conservation and property
20
+ // conservation would move the pair this one already moves. The drag divides
21
+ // across the group, so its bottom edge follows the cursor rather than half
22
+ const siblings = model.turnedOnTracks.filter(t => t.model.heightKey === heightKey);
23
+ const count = siblings.length;
38
24
  const onDrag = useCallback((delta, startHeight) => {
39
- const next = Math.max(10, startHeight + delta);
40
- if (ownHeight) {
41
- model.setColumnTrackHeight(id, next);
25
+ if (heightKey) {
26
+ model.setTrackHeight(heightKey, Math.max(10, startHeight + delta / count));
42
27
  }
43
- else {
44
- setTrackHeight[kind]?.(model, next);
45
- }
46
- }, [model, id, kind, ownHeight]);
47
- return setHeight ? (React.createElement(DragHandle, { axis: "y", variant: "resizer", getStart: () => height, onDrag: onDrag, style: {
28
+ }, [model, heightKey, count]);
29
+ return heightKey && siblings.at(-1)?.model.id === id ? (React.createElement(DragHandle, { axis: "y", variant: "resizer", getStart: () => height, onDrag: onDrag, style: {
48
30
  position: 'absolute',
49
31
  bottom: 0,
50
32
  left: 0,
@@ -1 +1 @@
1
- {"version":3,"file":"ResizeHandles.js","sourceRoot":"","sources":["../../src/components/ResizeHandles.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ResizeHandles.js","sourceRoot":"","sources":["../../src/components/ResizeHandles.tsx"],"names":[],"mappings":"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"}
@@ -4,17 +4,16 @@ import { TextField } from '@mui/material';
4
4
  import { getUngappedSequence } from 'msa-parsers';
5
5
  import Checkbox2 from './Checkbox2.js';
6
6
  import CopyButton from './CopyButton.js';
7
- const useStyles = makeStyles()({
7
+ const useStyles = makeStyles()(theme => ({
8
8
  textAreaFont: {
9
9
  fontFamily: 'Courier New',
10
10
  wordWrap: 'break-word',
11
11
  },
12
12
  dialogContent: {
13
- background: 'lightgrey',
13
+ background: theme.palette.action.selected,
14
14
  margin: 4,
15
- minWidth: '80em',
16
15
  },
17
- });
16
+ }));
18
17
  export default function SequenceTextArea({ str }) {
19
18
  const { classes } = useStyles();
20
19
  const [showGaps, setShowGaps] = useState(false);
@@ -1 +1 @@
1
- {"version":3,"file":"SequenceTextArea.js","sourceRoot":"","sources":["../../src/components/SequenceTextArea.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAEvC,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAA;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AACzC,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAEjD,OAAO,SAAS,MAAM,gBAAiB,CAAA;AACvC,OAAO,UAAU,MAAM,iBAAkB,CAAA;AAEzC,MAAM,SAAS,GAAG,UAAU,EAAE,CAAC;IAC7B,YAAY,EAAE;QACZ,UAAU,EAAE,aAAa;QACzB,QAAQ,EAAE,YAAY;KACvB;IACD,aAAa,EAAE;QACb,UAAU,EAAE,WAAW;QACvB,MAAM,EAAE,CAAC;QACT,QAAQ,EAAE,MAAM;KACjB;CACF,CAAC,CAAA;AAEF,MAAM,CAAC,OAAO,UAAU,gBAAgB,CAAC,EAAE,GAAG,EAA+B;IAC3E,MAAM,EAAE,OAAO,EAAE,GAAG,SAAS,EAAE,CAAA;IAC/B,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAC/C,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAEjD,MAAM,IAAI,GAAG,GAAG;SACb,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAU,CAAC;SACzE,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,SAAS,IAAI,CAAC,CAAC,EAAE,CAAC;SACrC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;SAClC,IAAI,CAAC,IAAI,CAAC,CAAA;IACb,OAAO,CACL;QACE,oBAAC,UAAU,IAAC,IAAI,EAAE,IAAI,GAAI;QAC1B,oBAAC,SAAS,IACR,KAAK,EAAC,WAAW,EACjB,OAAO,EAAE,QAAQ,EACjB,QAAQ,EAAE,GAAG,EAAE;gBACb,WAAW,CAAC,CAAC,QAAQ,CAAC,CAAA;YACxB,CAAC,GACD;QACF,oBAAC,SAAS,IACR,KAAK,EAAC,YAAY,EAClB,OAAO,EAAE,SAAS,EAClB,QAAQ,EAAE,GAAG,EAAE;gBACb,YAAY,CAAC,CAAC,SAAS,CAAC,CAAA;YAC1B,CAAC,GACD;QACF,oBAAC,SAAS,IACR,OAAO,EAAC,UAAU,EAClB,SAAS,QACT,SAAS,EAAE,OAAO,CAAC,aAAa,EAChC,OAAO,EAAE,CAAC,EACV,OAAO,EAAE,EAAE,EACX,SAAS,QACT,KAAK,EAAE,IAAI,EACX,SAAS,EAAE;gBACT,KAAK,EAAE;oBACL,QAAQ,EAAE,IAAI;oBACd,SAAS,EAAE,OAAO,CAAC,YAAY;iBAChC;aACF,GACD,CACD,CACJ,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"SequenceTextArea.js","sourceRoot":"","sources":["../../src/components/SequenceTextArea.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAEvC,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAA;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AACzC,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAEjD,OAAO,SAAS,MAAM,gBAAiB,CAAA;AACvC,OAAO,UAAU,MAAM,iBAAkB,CAAA;AAEzC,MAAM,SAAS,GAAG,UAAU,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACvC,YAAY,EAAE;QACZ,UAAU,EAAE,aAAa;QACzB,QAAQ,EAAE,YAAY;KACvB;IACD,aAAa,EAAE;QACb,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ;QACzC,MAAM,EAAE,CAAC;KACV;CACF,CAAC,CAAC,CAAA;AAEH,MAAM,CAAC,OAAO,UAAU,gBAAgB,CAAC,EAAE,GAAG,EAA+B;IAC3E,MAAM,EAAE,OAAO,EAAE,GAAG,SAAS,EAAE,CAAA;IAC/B,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAC/C,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAEjD,MAAM,IAAI,GAAG,GAAG;SACb,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAU,CAAC;SACzE,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,SAAS,IAAI,CAAC,CAAC,EAAE,CAAC;SACrC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;SAClC,IAAI,CAAC,IAAI,CAAC,CAAA;IACb,OAAO,CACL;QACE,oBAAC,UAAU,IAAC,IAAI,EAAE,IAAI,GAAI;QAC1B,oBAAC,SAAS,IACR,KAAK,EAAC,WAAW,EACjB,OAAO,EAAE,QAAQ,EACjB,QAAQ,EAAE,GAAG,EAAE;gBACb,WAAW,CAAC,CAAC,QAAQ,CAAC,CAAA;YACxB,CAAC,GACD;QACF,oBAAC,SAAS,IACR,KAAK,EAAC,YAAY,EAClB,OAAO,EAAE,SAAS,EAClB,QAAQ,EAAE,GAAG,EAAE;gBACb,YAAY,CAAC,CAAC,SAAS,CAAC,CAAA;YAC1B,CAAC,GACD;QACF,oBAAC,SAAS,IACR,OAAO,EAAC,UAAU,EAClB,SAAS,QACT,SAAS,EAAE,OAAO,CAAC,aAAa,EAChC,OAAO,EAAE,CAAC,EACV,OAAO,EAAE,EAAE,EACX,SAAS,QACT,KAAK,EAAE,IAAI,EACX,SAAS,EAAE;gBACT,KAAK,EAAE;oBACL,QAAQ,EAAE,IAAI;oBACd,SAAS,EAAE,OAAO,CAAC,YAAY;iBAChC;aACF,GACD,CACD,CACJ,CAAA;AACH,CAAC"}
@@ -1,15 +1,29 @@
1
1
  import React, { lazy, useCallback, useRef, useState } from 'react';
2
+ import BaseTooltip from '@jbrowse/core/ui/BaseTooltip';
2
3
  import { makeStyles } from '@jbrowse/core/util/tss-react';
3
4
  import ArrowDropDownIcon from '@mui/icons-material/ArrowDropDown';
4
5
  import { IconButton, Menu, MenuItem } from '@mui/material';
5
6
  import { observer } from 'mobx-react';
6
7
  import { useWheelScroll } from '../useWheelScroll.js';
8
+ import TrackTooltipContent from './tracks/TrackTooltipContent.js';
9
+ import { useTrackHover } from './tracks/useTrackHover.js';
7
10
  const TrackInfoDialog = lazy(() => import('./dialogs/TrackInfoDialog.js'));
8
- const useStyles = makeStyles()({
11
+ const useStyles = makeStyles()(theme => ({
9
12
  button: {
10
13
  padding: 0,
11
14
  },
12
- });
15
+ // a hairline under every track but the last, across the labels as well as
16
+ // the alignment. The divider a track's resize handle draws covers only the
17
+ // alignment, and tracks sharing a height have no handle between them. Inset,
18
+ // so the line costs no layout height: totalTrackAreaHeight sums the model's
19
+ // heights, and the column indicator is drawn against that sum
20
+ row: {
21
+ display: 'flex',
22
+ '&:not(:last-child)': {
23
+ boxShadow: `inset 0 -1px 0 ${theme.palette.divider}`,
24
+ },
25
+ },
26
+ }));
13
27
  const TrackLabel = observer(function TrackLabel({ model, track, }) {
14
28
  const [anchorEl, setAnchorEl] = useState();
15
29
  const closeMenu = () => {
@@ -23,14 +37,21 @@ const TrackLabel = observer(function TrackLabel({ model, track, }) {
23
37
  width,
24
38
  height,
25
39
  flexShrink: 0,
26
- textAlign: 'right',
40
+ display: 'flex',
41
+ alignItems: 'flex-start',
42
+ justifyContent: 'flex-end',
43
+ gap: 2,
27
44
  fontSize: trackLabelHeight,
28
45
  } },
29
- drawLabels ? name : '',
30
- ' ',
31
- React.createElement(IconButton, { className: classes.button, style: {
46
+ React.createElement("span", { title: name, style: {
47
+ overflow: 'hidden',
48
+ textOverflow: 'ellipsis',
49
+ whiteSpace: 'nowrap',
50
+ } }, drawLabels ? name : ''),
51
+ React.createElement(IconButton, { className: classes.button, "aria-label": `${name} track menu`, style: {
32
52
  width: trackLabelHeight,
33
53
  height: trackLabelHeight,
54
+ flexShrink: 0,
34
55
  }, onClick: event => {
35
56
  setAnchorEl(event.currentTarget);
36
57
  } },
@@ -41,7 +62,7 @@ const TrackLabel = observer(function TrackLabel({ model, track, }) {
41
62
  React.createElement(MenuItem, { dense: true, onClick: () => {
42
63
  model.toggleTrack(track.model.id);
43
64
  closeMenu();
44
- } }, "Close"),
65
+ } }, "Hide track"),
45
66
  React.createElement(MenuItem, { dense: true, onClick: () => {
46
67
  model.queueDialog(onClose => [
47
68
  TrackInfoDialog,
@@ -51,33 +72,31 @@ const TrackLabel = observer(function TrackLabel({ model, track, }) {
51
72
  } }, "Get info"))) : null));
52
73
  });
53
74
  const Track = observer(function ({ model, track, }) {
54
- const { resizeHandleWidth, colWidth, scrollX, numColumns } = model;
75
+ const { resizeHandleWidth, rowPanelsWidth, showColumnStats } = model;
55
76
  const { model: { height }, } = track;
56
77
  const ref = useRef(null);
57
78
  const onScrollX = useCallback((d) => {
58
79
  model.doScrollX(d);
59
80
  }, [model]);
60
81
  useWheelScroll({ ref, onScrollX });
61
- return (React.createElement("div", { style: { display: 'flex', height } },
82
+ const { classes } = useStyles();
83
+ const { hover, onMouseMove, onMouseLeave } = useTrackHover({
84
+ model,
85
+ tooltip: showColumnStats,
86
+ });
87
+ return (React.createElement("div", { className: classes.row, style: { height } },
62
88
  React.createElement(TrackLabel, { model: model, track: track }),
63
- React.createElement("div", { style: { width: resizeHandleWidth, flexShrink: 0 } }),
64
- React.createElement("div", { ref: ref, onMouseMove: event => {
65
- if (!ref.current) {
66
- return;
67
- }
68
- const { left } = ref.current.getBoundingClientRect();
69
- const mouseX = event.clientX - left - scrollX;
70
- const col = Math.floor(mouseX / colWidth);
71
- if (col >= 0 && col < numColumns) {
72
- model.setMousePos(col, undefined);
73
- }
74
- else {
75
- model.setMousePos(undefined, undefined);
89
+ React.createElement("div", { style: { width: rowPanelsWidth + resizeHandleWidth, flexShrink: 0 } }),
90
+ React.createElement("div", { ref: ref, "data-testid": `track_${track.model.id}`, onMouseMove: event => {
91
+ if (ref.current) {
92
+ onMouseMove(event, ref.current);
76
93
  }
77
94
  }, onMouseLeave: () => {
78
- model.setMousePos(undefined, undefined);
95
+ onMouseLeave();
79
96
  } },
80
- React.createElement(track.ReactComponent, { model: model, track: track }))));
97
+ React.createElement(track.ReactComponent, { model: model, track: track }),
98
+ hover ? (React.createElement(BaseTooltip, { clientPoint: { x: hover.x, y: hover.y + 15 } },
99
+ React.createElement(TrackTooltipContent, { model: model, track: track, col: hover.col }))) : null)));
81
100
  });
82
101
  export default Track;
83
102
  //# sourceMappingURL=Track.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Track.js","sourceRoot":"","sources":["../../src/components/Track.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Track.js","sourceRoot":"","sources":["../../src/components/Track.tsx"],"names":[],"mappings":"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"}
@@ -11,32 +11,32 @@ export default function AboutDialog({ onClose }) {
11
11
  "MSAView ",
12
12
  version,
13
13
  " (",
14
- React.createElement(Link, { href: "https://github.com/gmod/react-msaview" }, "Github"),
14
+ React.createElement(Link, { target: "_blank", rel: "noopener", href: "https://github.com/gmod/react-msaview" }, "Github"),
15
15
  ")"),
16
16
  React.createElement("ul", null,
17
17
  React.createElement("li", null,
18
18
  React.createElement(Typography, null,
19
19
  "We use some color schemes from the",
20
20
  ' ',
21
- React.createElement(Link, { href: "https://github.com/biotite-dev/biotite" }, "biotite"),
21
+ React.createElement(Link, { target: "_blank", rel: "noopener", href: "https://github.com/biotite-dev/biotite" }, "biotite"),
22
22
  ' ',
23
23
  "project, and their license is reproduced",
24
24
  ' ',
25
- React.createElement(Link, { href: "https://github.com/biotite-dev/biotite/blob/master/LICENSE.rst" }, "here"))),
25
+ React.createElement(Link, { target: "_blank", rel: "noopener", href: "https://github.com/biotite-dev/biotite/blob/master/LICENSE.rst" }, "here"))),
26
26
  React.createElement("li", null,
27
27
  React.createElement(Typography, null,
28
28
  "See this page for some information on jalview colorings",
29
29
  ' ',
30
- React.createElement(Link, { href: "https://www.jalview.org/help/html/colourSchemes/" }, "here"))),
30
+ React.createElement(Link, { target: "_blank", rel: "noopener", href: "https://www.jalview.org/help/html/colourSchemes/" }, "here"))),
31
31
  React.createElement("li", null,
32
32
  React.createElement(Typography, null,
33
33
  "See this page for some info on the clustal, cinema, maeditor, and lesk color schemes",
34
34
  ' ',
35
- React.createElement(Link, { href: "http://www.bioinformatics.nl/~berndb/aacolour.html" }, "here"))),
35
+ React.createElement(Link, { target: "_blank", rel: "noopener", href: "http://www.bioinformatics.nl/~berndb/aacolour.html" }, "here"))),
36
36
  React.createElement("li", null,
37
37
  React.createElement(Typography, null,
38
38
  "See this paper about the flower color scheme",
39
39
  ' ',
40
- React.createElement(Link, { href: "https://www.ncbi.nlm.nih.gov/pmc/articles/PMC7245768/" }, "here")))))));
40
+ React.createElement(Link, { target: "_blank", rel: "noopener", href: "https://www.ncbi.nlm.nih.gov/pmc/articles/PMC7245768/" }, "here")))))));
41
41
  }
42
42
  //# sourceMappingURL=AboutDialog.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AboutDialog.js","sourceRoot":"","sources":["../../../src/components/dialogs/AboutDialog.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACzC,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAE/D,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAE1C,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,EAAE,OAAO,EAA2B;IACtE,OAAO,CACL,oBAAC,MAAM,IACL,IAAI,QACJ,KAAK,EAAC,OAAO,EACb,OAAO,EAAE,GAAG,EAAE;YACZ,OAAO,EAAE,CAAA;QACX,CAAC;QAED,oBAAC,aAAa;YACZ,oBAAC,UAAU;;gBACA,OAAO;;gBAChB,oBAAC,IAAI,IAAC,IAAI,EAAC,uCAAuC,aAAc;oBACrD;YAEb;gBACE;oBACE,oBAAC,UAAU;;wBAC0B,GAAG;wBACtC,oBAAC,IAAI,IAAC,IAAI,EAAC,wCAAwC,cAAe;wBAAC,GAAG;;wBAC7B,GAAG;wBAC5C,oBAAC,IAAI,IAAC,IAAI,EAAC,gEAAgE,WAEpE,CACI,CACV;gBACL;oBACE,oBAAC,UAAU;;wBAC+C,GAAG;wBAC3D,oBAAC,IAAI,IAAC,IAAI,EAAC,kDAAkD,WAEtD,CACI,CACV;gBACL;oBACE,oBAAC,UAAU;;wBAEU,GAAG;wBACtB,oBAAC,IAAI,IAAC,IAAI,EAAC,oDAAoD,WAExD,CACI,CACV;gBACL;oBACE,oBAAC,UAAU;;wBACoC,GAAG;wBAChD,oBAAC,IAAI,IAAC,IAAI,EAAC,uDAAuD,WAE3D,CACI,CACV,CACF,CACS,CACT,CACV,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"AboutDialog.js","sourceRoot":"","sources":["../../../src/components/dialogs/AboutDialog.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACzC,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAE/D,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAE1C,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,EAAE,OAAO,EAA2B;IACtE,OAAO,CACL,oBAAC,MAAM,IACL,IAAI,QACJ,KAAK,EAAC,OAAO,EACb,OAAO,EAAE,GAAG,EAAE;YACZ,OAAO,EAAE,CAAA;QACX,CAAC;QAED,oBAAC,aAAa;YACZ,oBAAC,UAAU;;gBACA,OAAO;;gBAChB,oBAAC,IAAI,IACH,MAAM,EAAC,QAAQ,EACf,GAAG,EAAC,UAAU,EACd,IAAI,EAAC,uCAAuC,aAGvC;oBAEI;YAEb;gBACE;oBACE,oBAAC,UAAU;;wBAC0B,GAAG;wBACtC,oBAAC,IAAI,IACH,MAAM,EAAC,QAAQ,EACf,GAAG,EAAC,UAAU,EACd,IAAI,EAAC,wCAAwC,cAGxC;wBAAC,GAAG;;wBAC8B,GAAG;wBAC5C,oBAAC,IAAI,IACH,MAAM,EAAC,QAAQ,EACf,GAAG,EAAC,UAAU,EACd,IAAI,EAAC,gEAAgE,WAGhE,CACI,CACV;gBACL;oBACE,oBAAC,UAAU;;wBAC+C,GAAG;wBAC3D,oBAAC,IAAI,IACH,MAAM,EAAC,QAAQ,EACf,GAAG,EAAC,UAAU,EACd,IAAI,EAAC,kDAAkD,WAGlD,CACI,CACV;gBACL;oBACE,oBAAC,UAAU;;wBAEU,GAAG;wBACtB,oBAAC,IAAI,IACH,MAAM,EAAC,QAAQ,EACf,GAAG,EAAC,UAAU,EACd,IAAI,EAAC,oDAAoD,WAGpD,CACI,CACV;gBACL;oBACE,oBAAC,UAAU;;wBACoC,GAAG;wBAChD,oBAAC,IAAI,IACH,MAAM,EAAC,QAAQ,EACf,GAAG,EAAC,UAAU,EACd,IAAI,EAAC,uDAAuD,WAGvD,CACI,CACV,CACF,CACS,CACT,CACV,CAAA;AACH,CAAC"}
@@ -60,7 +60,7 @@ const AnnotationFileDialog = observer(function ({ handleClose, model, }) {
60
60
  } })),
61
61
  file ? React.createElement(Typography, null, file.name) : null)))),
62
62
  React.createElement(DialogActions, null,
63
- React.createElement(Button, { variant: "contained", color: "primary", disabled: loading, onClick: () => {
63
+ React.createElement(Button, { variant: "contained", color: "primary", disabled: loading || (choice === 'file' ? !file : !url.trim()), onClick: () => {
64
64
  // eslint-disable-next-line @typescript-eslint/no-floating-promises
65
65
  ;
66
66
  (async () => {
@@ -86,7 +86,10 @@ const AnnotationFileDialog = observer(function ({ handleClose, model, }) {
86
86
  setLoading(false);
87
87
  }
88
88
  })();
89
- } }, "Open annotations"))));
89
+ } }, "Open annotations"),
90
+ React.createElement(Button, { variant: "contained", color: "secondary", onClick: () => {
91
+ handleClose();
92
+ } }, "Cancel"))));
90
93
  });
91
94
  export default AnnotationFileDialog;
92
95
  //# sourceMappingURL=AnnotationFileDialog.js.map