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 +1 @@
1
- {"version":3,"file":"renderMSAMouseover.js","sourceRoot":"","sources":["../../../src/components/msa/renderMSAMouseover.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"renderMSAMouseover.js","sourceRoot":"","sources":["../../../src/components/msa/renderMSAMouseover.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AAChF,OAAO,EAAE,0BAA0B,EAAE,MAAM,uBAAuB,CAAA;AAKlE,MAAM,UAAU,eAAe,CAAC,EAC9B,GAAG,EACH,KAAK,EACL,KAAK,GAKN;IACC,MAAM,EACJ,QAAQ,EACR,QAAQ,EACR,cAAc,EAAE,KAAK,EACrB,MAAM,EACN,SAAS,EACT,OAAO,EACP,OAAO,EACP,QAAQ,EACR,aAAa,EACb,aAAa,EACb,kBAAkB,EAClB,iBAAiB,GAClB,GAAG,KAAK,CAAA;IACT,GAAG,CAAC,cAAc,EAAE,CAAA;IACpB,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,GAAG,kBAAkB,EAAE,MAAM,GAAG,kBAAkB,CAAC,CAAA;IAC5E,GAAG,CAAC,KAAK,CAAC,kBAAkB,EAAE,kBAAkB,CAAC,CAAA;IAEjD,8EAA8E;IAC9E,oEAAoE;IACpE,MAAM,OAAO,GAAG,CAAC,KAAa,EAAE,EAAE;QAChC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,KAAK,GAAG,SAAS,GAAG,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC,CAAA;IAChE,CAAC,CAAA;IACD,MAAM,OAAO,GAAG,CAAC,KAAa,EAAE,EAAE;QAChC,GAAG,CAAC,QAAQ,CAAC,KAAK,GAAG,QAAQ,GAAG,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAA;IAC/D,CAAC,CAAA;IAED,0BAA0B,CAAC;QACzB,GAAG;QACH,KAAK;QACL,KAAK;QACL,OAAO,EAAE,CAAC,OAAO;QACjB,OAAO,EAAE,CAAC,OAAO;QACjB,KAAK;QACL,MAAM;KACP,CAAC,CAAA;IAEF,gDAAgD;IAChD,GAAG,CAAC,SAAS,GAAG,kBAAkB,CAAA;IAClC,KAAK,MAAM,QAAQ,IAAI,iBAAiB,EAAE,CAAC;QACzC,OAAO,CAAC,QAAQ,CAAC,CAAA;IACnB,CAAC;IAED,GAAG,CAAC,SAAS,GAAG,UAAU,CAAA;IAC1B,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO,CAAC,QAAQ,CAAC,CAAA;IACnB,CAAC;IACD,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO,CAAC,QAAQ,CAAC,CAAA;IACnB,CAAC;IACD,GAAG,CAAC,SAAS,GAAG,UAAU,CAAA;IAC1B,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;QAChC,OAAO,CAAC,aAAa,CAAC,CAAA;IACxB,CAAC;IACD,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;QAChC,OAAO,CAAC,aAAa,CAAC,CAAA;IACxB,CAAC;AACH,CAAC"}
@@ -1,8 +1,6 @@
1
- // Per-cell tile color for the active scheme. The scheme is fixed for the whole
2
- // block, so resolve which rule applies once rather than re-testing the scheme
3
- // name inside the innermost loop. Reading only the column table the active
4
- // scheme needs also keeps the other one -- a per-column map for every column of
5
- // the alignment -- from being computed at all.
1
+ // Per-cell tile color for the active scheme, resolved once per block. Reading
2
+ // only the active scheme's column table leaves the other per-column table
3
+ // uncomputed.
6
4
  export function tileColorFn(model) {
7
5
  const { colorSchemeName } = model;
8
6
  if (colorSchemeName === 'clustalx_protein_dynamic') {
@@ -20,8 +18,7 @@ export function tileColorFn(model) {
20
18
  return (_col, letter) => colorScheme[letter];
21
19
  }
22
20
  // The column table the active scheme colors from, or undefined for the static
23
- // schemes. Identity of this plus the scheme name is what a cache of rendered
24
- // colors has to key on.
21
+ // schemes. A cache of rendered colors keys on its identity plus the scheme name.
25
22
  export function tileColorTable(model) {
26
23
  const { colorSchemeName } = model;
27
24
  if (colorSchemeName === 'clustalx_protein_dynamic') {
@@ -1 +1 @@
1
- {"version":3,"file":"tileColor.js","sourceRoot":"","sources":["../../../src/components/msa/tileColor.ts"],"names":[],"mappings":"AAEA,+EAA+E;AAC/E,8EAA8E;AAC9E,2EAA2E;AAC3E,gFAAgF;AAChF,+CAA+C;AAC/C,MAAM,UAAU,WAAW,CAAC,KAAmB;IAC7C,MAAM,EAAE,eAAe,EAAE,GAAG,KAAK,CAAA;IACjC,IAAI,eAAe,KAAK,0BAA0B,EAAE,CAAC;QACnD,MAAM,EAAE,WAAW,EAAE,GAAG,KAAK,CAAA;QAC7B,OAAO,CAAC,GAAW,EAAE,MAAc,EAAE,EAAE,CAAC,WAAW,CAAC,GAAG,CAAE,CAAC,MAAM,CAAC,CAAA;IACnE,CAAC;IACD,IAAI,eAAe,KAAK,0BAA0B,EAAE,CAAC;QACnD,MAAM,EAAE,YAAY,EAAE,GAAG,KAAK,CAAA;QAC9B,OAAO,CAAC,GAAW,EAAE,MAAc,EAAE,EAAE;YACrC,MAAM,SAAS,GAAG,YAAY,CAAC,GAAG,CAAE,CAAA;YACpC,OAAO,MAAM,KAAK,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAA;QAClE,CAAC,CAAA;IACH,CAAC;IACD,MAAM,EAAE,WAAW,EAAE,GAAG,KAAK,CAAA;IAC7B,OAAO,CAAC,IAAY,EAAE,MAAc,EAAE,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,CAAA;AAC9D,CAAC;AAED,8EAA8E;AAC9E,6EAA6E;AAC7E,wBAAwB;AACxB,MAAM,UAAU,cAAc,CAAC,KAAmB;IAChD,MAAM,EAAE,eAAe,EAAE,GAAG,KAAK,CAAA;IACjC,IAAI,eAAe,KAAK,0BAA0B,EAAE,CAAC;QACnD,OAAO,KAAK,CAAC,WAAW,CAAA;IAC1B,CAAC;IACD,IAAI,eAAe,KAAK,0BAA0B,EAAE,CAAC;QACnD,OAAO,KAAK,CAAC,YAAY,CAAA;IAC3B,CAAC;IACD,OAAO,KAAK,CAAC,WAAW,CAAA;AAC1B,CAAC"}
1
+ {"version":3,"file":"tileColor.js","sourceRoot":"","sources":["../../../src/components/msa/tileColor.ts"],"names":[],"mappings":"AAEA,8EAA8E;AAC9E,0EAA0E;AAC1E,cAAc;AACd,MAAM,UAAU,WAAW,CAAC,KAAmB;IAC7C,MAAM,EAAE,eAAe,EAAE,GAAG,KAAK,CAAA;IACjC,IAAI,eAAe,KAAK,0BAA0B,EAAE,CAAC;QACnD,MAAM,EAAE,WAAW,EAAE,GAAG,KAAK,CAAA;QAC7B,OAAO,CAAC,GAAW,EAAE,MAAc,EAAE,EAAE,CAAC,WAAW,CAAC,GAAG,CAAE,CAAC,MAAM,CAAC,CAAA;IACnE,CAAC;IACD,IAAI,eAAe,KAAK,0BAA0B,EAAE,CAAC;QACnD,MAAM,EAAE,YAAY,EAAE,GAAG,KAAK,CAAA;QAC9B,OAAO,CAAC,GAAW,EAAE,MAAc,EAAE,EAAE;YACrC,MAAM,SAAS,GAAG,YAAY,CAAC,GAAG,CAAE,CAAA;YACpC,OAAO,MAAM,KAAK,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAA;QAClE,CAAC,CAAA;IACH,CAAC;IACD,MAAM,EAAE,WAAW,EAAE,GAAG,KAAK,CAAA;IAC7B,OAAO,CAAC,IAAY,EAAE,MAAc,EAAE,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,CAAA;AAC9D,CAAC;AAED,8EAA8E;AAC9E,iFAAiF;AACjF,MAAM,UAAU,cAAc,CAAC,KAAmB;IAChD,MAAM,EAAE,eAAe,EAAE,GAAG,KAAK,CAAA;IACjC,IAAI,eAAe,KAAK,0BAA0B,EAAE,CAAC;QACnD,OAAO,KAAK,CAAC,WAAW,CAAA;IAC1B,CAAC;IACD,IAAI,eAAe,KAAK,0BAA0B,EAAE,CAAC;QACnD,OAAO,KAAK,CAAC,YAAY,CAAA;IAC3B,CAAC;IACD,OAAO,KAAK,CAAC,WAAW,CAAA;AAC1B,CAAC"}
@@ -4,9 +4,11 @@ import type React from 'react';
4
4
  * Translates pointer events over one MSA block into model column/row hover and
5
5
  * click state, and reports where a tooltip should be anchored.
6
6
  *
7
- * The anchor is only tracked when there is something to show (an insertion, a
8
- * domain under the cursor, or column stats), so plain mouse movement over the
9
- * alignment updates the canvas overlay without re-rendering this component.
7
+ * The anchor is only tracked when there is something to show (an insertion or a
8
+ * domain under the cursor), so plain mouse movement over the alignment updates
9
+ * the canvas overlay without re-rendering this component. Each track tooltips
10
+ * its own column statistics, and the header reads out the hovered row, residue
11
+ * and position.
10
12
  */
11
13
  export declare function useMsaBlockMouse({ model, offsetX, offsetY, }: {
12
14
  model: MsaViewModel;
@@ -10,9 +10,11 @@ function eventToColRow({ event, el, offsetX, offsetY, colWidth, rowHeight, }) {
10
10
  * Translates pointer events over one MSA block into model column/row hover and
11
11
  * click state, and reports where a tooltip should be anchored.
12
12
  *
13
- * The anchor is only tracked when there is something to show (an insertion, a
14
- * domain under the cursor, or column stats), so plain mouse movement over the
15
- * alignment updates the canvas overlay without re-rendering this component.
13
+ * The anchor is only tracked when there is something to show (an insertion or a
14
+ * domain under the cursor), so plain mouse movement over the alignment updates
15
+ * the canvas overlay without re-rendering this component. Each track tooltips
16
+ * its own column statistics, and the header reads out the hovered row, residue
17
+ * and position.
16
18
  */
17
19
  export function useMsaBlockMouse({ model, offsetX, offsetY, }) {
18
20
  const [tooltipPoint, setTooltipPoint] = useState();
@@ -30,9 +32,7 @@ export function useMsaBlockMouse({ model, offsetX, offsetY, }) {
30
32
  const pos = colRow(event, el);
31
33
  const hit = inBounds(pos);
32
34
  model.setMousePos(hit ? pos.col : undefined, hit ? pos.row : undefined);
33
- const hasTooltip = !!model.hoveredInsertion ||
34
- model.mouseOverDomains.length > 0 ||
35
- (model.showColumnStats && !!model.mouseOverColumnStats);
35
+ const hasTooltip = !!model.hoveredInsertion || model.mouseOverDomains.length > 0;
36
36
  setTooltipPoint(hasTooltip ? { x: event.clientX, y: event.clientY } : undefined);
37
37
  }
38
38
  function onClick(event, el) {
@@ -1 +1 @@
1
- {"version":3,"file":"useMsaBlockMouse.js","sourceRoot":"","sources":["../../../src/components/msa/useMsaBlockMouse.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useMsaBlockMouse.js","sourceRoot":"","sources":["../../../src/components/msa/useMsaBlockMouse.ts"],"names":[],"mappings":"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"}
@@ -4,4 +4,4 @@
4
4
  * SVG export) satisfy this, so renderers can be typed against it without an
5
5
  * `as any` cast at the SVG-export boundary.
6
6
  */
7
- export type RenderCtx = Pick<CanvasRenderingContext2D, 'arc' | 'beginPath' | 'clearRect' | 'closePath' | 'fill' | 'fillRect' | 'fillStyle' | 'fillText' | 'font' | 'lineTo' | 'lineWidth' | 'measureText' | 'moveTo' | 'resetTransform' | 'restore' | 'save' | 'scale' | 'setLineDash' | 'stroke' | 'strokeRect' | 'strokeStyle' | 'textAlign' | 'textBaseline' | 'translate'>;
7
+ export type RenderCtx = Pick<CanvasRenderingContext2D, 'arc' | 'beginPath' | 'clearRect' | 'closePath' | 'fill' | 'fillRect' | 'fillStyle' | 'fillText' | 'font' | 'lineTo' | 'lineWidth' | 'measureText' | 'moveTo' | 'quadraticCurveTo' | 'resetTransform' | 'restore' | 'save' | 'scale' | 'setLineDash' | 'stroke' | 'strokeRect' | 'strokeStyle' | 'textAlign' | 'textBaseline' | 'translate'>;
@@ -0,0 +1,9 @@
1
+ import React from 'react';
2
+ import type { MsaViewModel } from '../../model.ts';
3
+ import type { ResolvedRowPanel } from '../../types.ts';
4
+ declare const RowPanelBlock: ({ model, panel, offsetY, }: {
5
+ model: MsaViewModel;
6
+ panel: ResolvedRowPanel;
7
+ offsetY: number;
8
+ }) => React.JSX.Element;
9
+ export default RowPanelBlock;
@@ -0,0 +1,86 @@
1
+ import React, { useState } from 'react';
2
+ import { useTheme } from '@mui/material';
3
+ import { observer } from 'mobx-react';
4
+ import { featureField, featureName } from '../../featureFields.js';
5
+ import { useCanvasAutorun } from '../../useCanvasAutorun.js';
6
+ import PortalTooltip from '../PortalTooltip.js';
7
+ import { renderRowPanel } from './renderRowPanel.js';
8
+ // what the cell or span under the pointer reads, which is the field a strip
9
+ // colors by, and a span's name, its coordinates and its encoded field
10
+ function hoverLines({ model, panel, name, x, }) {
11
+ if (panel.kind === 'strip') {
12
+ return [
13
+ `${panel.header}: ${model.rowDataOf(name)?.[panel.field] ?? '(none)'}`,
14
+ ];
15
+ }
16
+ const span = panel.spans
17
+ .get(name)
18
+ ?.findLast(s => x >= s.xStart && x <= s.xEnd);
19
+ if (!span) {
20
+ return [];
21
+ }
22
+ const { annotation } = span;
23
+ const strand = annotation.strand === undefined
24
+ ? ''
25
+ : annotation.strand < 0
26
+ ? ' (-)'
27
+ : ' (+)';
28
+ const value = panel.field ? featureField(annotation, panel.field) : undefined;
29
+ return [
30
+ featureName(annotation) ?? annotation.accession,
31
+ `${annotation.start}-${annotation.end}${strand}`,
32
+ ...(value === undefined ? [] : [`${panel.field}: ${value}`]),
33
+ ];
34
+ }
35
+ const RowPanelBlock = observer(function ({ model, panel, offsetY, }) {
36
+ const [hovered, setHovered] = useState();
37
+ const theme = useTheme();
38
+ const { blockSize, highResScaleFactor, rowHeight } = model;
39
+ const width = panel.width;
40
+ const height = blockSize;
41
+ const canvasWidth = width * highResScaleFactor;
42
+ const canvasHeight = height * highResScaleFactor;
43
+ const ref = useCanvasAutorun({
44
+ draw: ctx => {
45
+ ctx.resetTransform();
46
+ ctx.clearRect(0, 0, canvasWidth, canvasHeight);
47
+ renderRowPanel({ ctx, model, theme, panel, x: 0, offsetY });
48
+ },
49
+ width: canvasWidth,
50
+ height: canvasHeight,
51
+ deps: [model, theme, panel, offsetY],
52
+ });
53
+ return (React.createElement(React.Fragment, null,
54
+ React.createElement("canvas", { ref: ref, width: canvasWidth, height: canvasHeight, style: { position: 'absolute', top: offsetY, left: 0, width, height }, onMouseMove: event => {
55
+ // the blocks are laid out in row space and scrolled by a transform
56
+ // on their container, so the pointer's row comes off the canvas box
57
+ const { left, top } = event.currentTarget.getBoundingClientRect();
58
+ const row = Math.floor((event.clientY - top + offsetY) / rowHeight);
59
+ const name = model.leaves[row]?.data.name;
60
+ const lines = name === undefined
61
+ ? []
62
+ : hoverLines({
63
+ model,
64
+ panel,
65
+ name,
66
+ x: event.clientX - left,
67
+ });
68
+ setHovered(name === undefined || lines.length === 0
69
+ ? undefined
70
+ : {
71
+ name,
72
+ lines,
73
+ clientX: event.clientX,
74
+ clientY: event.clientY,
75
+ });
76
+ model.setMousePos(undefined, name === undefined ? undefined : row);
77
+ }, onMouseLeave: () => {
78
+ setHovered(undefined);
79
+ model.setMousePos(undefined, undefined);
80
+ } }),
81
+ hovered ? (React.createElement(PortalTooltip, { clientX: hovered.clientX, clientY: hovered.clientY },
82
+ React.createElement("div", null, hovered.name),
83
+ hovered.lines.map(line => (React.createElement("div", { key: line }, line))))) : null));
84
+ });
85
+ export default RowPanelBlock;
86
+ //# sourceMappingURL=RowPanelBlock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RowPanelBlock.js","sourceRoot":"","sources":["../../../src/components/rowpanels/RowPanelBlock.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import React from 'react';
2
+ import type { MsaViewModel } from '../../model.ts';
3
+ /**
4
+ * The row panel headers, in a band above the panels beside the tree ruler and
5
+ * the minimap. A narrow strip's name is DOM text turned on its side, since the
6
+ * canvas layer has no rotation, and the SVG export draws it with a
7
+ * `rotate(-90)`. A panel wider than the band is tall writes its name across.
8
+ */
9
+ declare const RowPanelHeaders: ({ model }: {
10
+ model: MsaViewModel;
11
+ }) => React.JSX.Element | null;
12
+ export default RowPanelHeaders;
@@ -0,0 +1,38 @@
1
+ import React from 'react';
2
+ import { observer } from 'mobx-react';
3
+ import { headerRunsAcross } from './headerLayout.js';
4
+ /**
5
+ * The row panel headers, in a band above the panels beside the tree ruler and
6
+ * the minimap. A narrow strip's name is DOM text turned on its side, since the
7
+ * canvas layer has no rotation, and the SVG export draws it with a
8
+ * `rotate(-90)`. A panel wider than the band is tall writes its name across.
9
+ */
10
+ const RowPanelHeaders = observer(function ({ model }) {
11
+ const { resolvedRowPanels, rowPanelsHeaderHeight, fontSize } = model;
12
+ return resolvedRowPanels.length > 0 ? (React.createElement("div", { style: {
13
+ display: 'flex',
14
+ flexShrink: 0,
15
+ height: rowPanelsHeaderHeight,
16
+ alignItems: 'flex-end',
17
+ } }, resolvedRowPanels.map(panel => {
18
+ const across = headerRunsAcross(panel.width);
19
+ return (React.createElement("div", { key: panel.id, title: panel.header, style: {
20
+ width: panel.width,
21
+ overflow: 'hidden',
22
+ textOverflow: 'ellipsis',
23
+ whiteSpace: 'nowrap',
24
+ ...(across
25
+ ? { fontSize, textAlign: 'center' }
26
+ : {
27
+ height: rowPanelsHeaderHeight,
28
+ fontSize: Math.min(fontSize, panel.width),
29
+ // vertical-rl reads top to bottom, and the half turn makes
30
+ // it read upwards from the strip, as rotate(-90) exports
31
+ writingMode: 'vertical-rl',
32
+ transform: 'rotate(180deg)',
33
+ }),
34
+ } }, panel.header));
35
+ }))) : null;
36
+ });
37
+ export default RowPanelHeaders;
38
+ //# sourceMappingURL=RowPanelHeaders.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RowPanelHeaders.js","sourceRoot":"","sources":["../../../src/components/rowpanels/RowPanelHeaders.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAErC,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAIpD;;;;;GAKG;AACH,MAAM,eAAe,GAAG,QAAQ,CAAC,UAAU,EAAE,KAAK,EAA2B;IAC3E,MAAM,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAA;IACpE,OAAO,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CACpC,6BACE,KAAK,EAAE;YACL,OAAO,EAAE,MAAM;YACf,UAAU,EAAE,CAAC;YACb,MAAM,EAAE,qBAAqB;YAC7B,UAAU,EAAE,UAAU;SACvB,IAEA,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;QAC7B,MAAM,MAAM,GAAG,gBAAgB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;QAC5C,OAAO,CACL,6BACE,GAAG,EAAE,KAAK,CAAC,EAAE,EACb,KAAK,EAAE,KAAK,CAAC,MAAM,EACnB,KAAK,EAAE;gBACL,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,QAAQ,EAAE,QAAQ;gBAClB,YAAY,EAAE,UAAU;gBACxB,UAAU,EAAE,QAAQ;gBACpB,GAAG,CAAC,MAAM;oBACR,CAAC,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE;oBACnC,CAAC,CAAC;wBACE,MAAM,EAAE,qBAAqB;wBAC7B,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC;wBACzC,2DAA2D;wBAC3D,yDAAyD;wBACzD,WAAW,EAAE,aAAa;wBAC1B,SAAS,EAAE,gBAAgB;qBAC5B,CAAC;aACP,IAEA,KAAK,CAAC,MAAM,CACT,CACP,CAAA;IACH,CAAC,CAAC,CACE,CACP,CAAC,CAAC,CAAC,IAAI,CAAA;AACV,CAAC,CAAC,CAAA;AAEF,eAAe,eAAe,CAAA"}
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  import type { MsaViewModel } from '../../model.ts';
3
- declare const ColumnStats: ({ model }: {
3
+ declare const RowPanels: ({ model }: {
4
4
  model: MsaViewModel;
5
5
  }) => React.JSX.Element | null;
6
- export default ColumnStats;
6
+ export default RowPanels;
@@ -0,0 +1,32 @@
1
+ import React, { useCallback, useRef } from 'react';
2
+ import { observer } from 'mobx-react';
3
+ import { useWheelScroll } from '../../useWheelScroll.js';
4
+ import RowPanelBlock from './RowPanelBlock.js';
5
+ const RowPanel = observer(function ({ model, panel, }) {
6
+ const ref = useRef(null);
7
+ const { height, blocksY, scrollY } = model;
8
+ const onScrollY = useCallback((d) => {
9
+ model.doScrollY(d);
10
+ }, [model]);
11
+ const { onMouseDown, onMouseUp } = useWheelScroll({ ref, onScrollY });
12
+ return (React.createElement("div", { ref: ref, "data-testid": `rowpanel_${panel.id}`, onMouseDown: onMouseDown, onMouseUp: onMouseUp, style: {
13
+ height,
14
+ width: panel.width,
15
+ flexShrink: 0,
16
+ overflow: 'hidden',
17
+ position: 'relative',
18
+ } },
19
+ React.createElement("div", { style: {
20
+ position: 'absolute',
21
+ top: 0,
22
+ left: 0,
23
+ transform: `translateY(${scrollY}px)`,
24
+ willChange: 'transform',
25
+ } }, blocksY.map(block => (React.createElement(RowPanelBlock, { key: block, model: model, panel: panel, offsetY: block }))))));
26
+ });
27
+ const RowPanels = observer(function ({ model }) {
28
+ const { resolvedRowPanels } = model;
29
+ return resolvedRowPanels.length > 0 ? (React.createElement("div", { style: { display: 'flex', flexShrink: 0 } }, resolvedRowPanels.map(panel => (React.createElement(RowPanel, { key: panel.id, model: model, panel: panel }))))) : null;
30
+ });
31
+ export default RowPanels;
32
+ //# sourceMappingURL=RowPanels.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RowPanels.js","sourceRoot":"","sources":["../../../src/components/rowpanels/RowPanels.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,OAAO,CAAA;AAElD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAErC,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AACxD,OAAO,aAAa,MAAM,oBAAqB,CAAA;AAK/C,MAAM,QAAQ,GAAG,QAAQ,CAAC,UAAU,EAClC,KAAK,EACL,KAAK,GAIN;IACC,MAAM,GAAG,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAA;IACxC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,KAAK,CAAA;IAC1C,MAAM,SAAS,GAAG,WAAW,CAC3B,CAAC,CAAS,EAAE,EAAE;QACZ,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;IACpB,CAAC,EACD,CAAC,KAAK,CAAC,CACR,CAAA;IACD,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,GAAG,cAAc,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,CAAA;IAErE,OAAO,CACL,6BACE,GAAG,EAAE,GAAG,iBACK,YAAY,KAAK,CAAC,EAAE,EAAE,EACnC,WAAW,EAAE,WAAW,EACxB,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE;YACL,MAAM;YACN,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,UAAU,EAAE,CAAC;YACb,QAAQ,EAAE,QAAQ;YAClB,QAAQ,EAAE,UAAU;SACrB;QAID,6BACE,KAAK,EAAE;gBACL,QAAQ,EAAE,UAAU;gBACpB,GAAG,EAAE,CAAC;gBACN,IAAI,EAAE,CAAC;gBACP,SAAS,EAAE,cAAc,OAAO,KAAK;gBACrC,UAAU,EAAE,WAAW;aACxB,IAEA,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CACpB,oBAAC,aAAa,IACZ,GAAG,EAAE,KAAK,EACV,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,KAAK,GACd,CACH,CAAC,CACE,CACF,CACP,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,MAAM,SAAS,GAAG,QAAQ,CAAC,UAAU,EAAE,KAAK,EAA2B;IACrE,MAAM,EAAE,iBAAiB,EAAE,GAAG,KAAK,CAAA;IACnC,OAAO,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CACpC,6BAAK,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,EAAE,IAC3C,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAC9B,oBAAC,QAAQ,IAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,GAAI,CACxD,CAAC,CACE,CACP,CAAC,CAAC,CAAC,IAAI,CAAA;AACV,CAAC,CAAC,CAAA;AAEF,eAAe,SAAS,CAAA"}
@@ -0,0 +1 @@
1
+ export declare function headerRunsAcross(panelWidth: number): boolean;
@@ -0,0 +1,5 @@
1
+ import { rowPanelHeaderHeight } from '../../constants.js';
2
+ export function headerRunsAcross(panelWidth) {
3
+ return panelWidth > rowPanelHeaderHeight;
4
+ }
5
+ //# sourceMappingURL=headerLayout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"headerLayout.js","sourceRoot":"","sources":["../../../src/components/rowpanels/headerLayout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAA;AAEzD,MAAM,UAAU,gBAAgB,CAAC,UAAkB;IACjD,OAAO,UAAU,GAAG,oBAAoB,CAAA;AAC1C,CAAC"}
@@ -0,0 +1,21 @@
1
+ import type { MsaViewModel } from '../../model.ts';
2
+ import type { ResolvedFeaturePanel } from '../../types.ts';
3
+ import type { RenderCtx } from '../renderCtx.ts';
4
+ import type { Theme } from '@mui/material';
5
+ /**
6
+ * The spans of a `features` panel, drawn with the mark the alignment overlay
7
+ * draws: an arrow where the feature carries a strand, a box otherwise, labeled
8
+ * where the text fits. The x mapping is the panel's own, resolved in
9
+ * `resolvedRowPanels`; a row needing several lanes divides its height between
10
+ * them.
11
+ */
12
+ export declare function renderFeaturePanel({ ctx, model, theme, panel, x, offsetY, blockSizeYOverride, highResScaleFactorOverride, }: {
13
+ ctx: RenderCtx;
14
+ model: MsaViewModel;
15
+ theme: Theme;
16
+ panel: ResolvedFeaturePanel;
17
+ x: number;
18
+ offsetY: number;
19
+ blockSizeYOverride?: number;
20
+ highResScaleFactorOverride?: number;
21
+ }): void;
@@ -0,0 +1,37 @@
1
+ import { contrastTextFn } from '../../util.js';
2
+ import { getVisibleLeaves } from '../getVisibleLeaves.js';
3
+ import { drawFeatureSpans, spanRows } from '../msa/drawFeatureSpans.js';
4
+ // a span keeps a pixel clear above and below it, so stacked lanes and adjacent
5
+ // rows read apart
6
+ const rowPadding = 2;
7
+ /**
8
+ * The spans of a `features` panel, drawn with the mark the alignment overlay
9
+ * draws: an arrow where the feature carries a strand, a box otherwise, labeled
10
+ * where the text fits. The x mapping is the panel's own, resolved in
11
+ * `resolvedRowPanels`; a row needing several lanes divides its height between
12
+ * them.
13
+ */
14
+ export function renderFeaturePanel({ ctx, model, theme, panel, x, offsetY, blockSizeYOverride, highResScaleFactorOverride, }) {
15
+ const { rowHeight, blockSize, highResScaleFactor } = model;
16
+ const by = blockSizeYOverride ?? blockSize;
17
+ const k = highResScaleFactorOverride ?? highResScaleFactor;
18
+ ctx.resetTransform();
19
+ ctx.scale(k, k);
20
+ ctx.translate(x, rowHeight / 2 - offsetY);
21
+ drawFeatureSpans({
22
+ ctx,
23
+ rows: spanRows(getVisibleLeaves({ model, offsetY, blockSizeY: by }), panel.spans),
24
+ layout: {
25
+ height: laneCount => Math.max(1, rowHeight / laneCount - rowPadding),
26
+ top: (y, lane, h) => y - rowHeight + lane * (h + rowPadding) + rowPadding / 2,
27
+ headLength: h => h,
28
+ },
29
+ xOf: span => [span.xStart, span.xEnd],
30
+ colors: panel.colors,
31
+ labelOf: span => panel.labels?.get(span.annotation),
32
+ contrastText: contrastTextFn(theme),
33
+ xMin: 0,
34
+ xMax: panel.width,
35
+ });
36
+ }
37
+ //# sourceMappingURL=renderFeaturePanel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderFeaturePanel.js","sourceRoot":"","sources":["../../../src/components/rowpanels/renderFeaturePanel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AACzD,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAA;AAOvE,+EAA+E;AAC/E,kBAAkB;AAClB,MAAM,UAAU,GAAG,CAAC,CAAA;AAEpB;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAAC,EACjC,GAAG,EACH,KAAK,EACL,KAAK,EACL,KAAK,EACL,CAAC,EACD,OAAO,EACP,kBAAkB,EAClB,0BAA0B,GAU3B;IACC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,kBAAkB,EAAE,GAAG,KAAK,CAAA;IAC1D,MAAM,EAAE,GAAG,kBAAkB,IAAI,SAAS,CAAA;IAC1C,MAAM,CAAC,GAAG,0BAA0B,IAAI,kBAAkB,CAAA;IAC1D,GAAG,CAAC,cAAc,EAAE,CAAA;IACpB,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IACf,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,GAAG,CAAC,GAAG,OAAO,CAAC,CAAA;IAEzC,gBAAgB,CAAe;QAC7B,GAAG;QACH,IAAI,EAAE,QAAQ,CACZ,gBAAgB,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,EACpD,KAAK,CAAC,KAAK,CACZ;QACD,MAAM,EAAE;YACN,MAAM,EAAE,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,UAAU,CAAC;YACpE,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,CAClB,CAAC,GAAG,SAAS,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,GAAG,UAAU,GAAG,CAAC;YAC1D,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;SACnB;QACD,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC;QACrC,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC;QACnD,YAAY,EAAE,cAAc,CAAC,KAAK,CAAC;QACnC,IAAI,EAAE,CAAC;QACP,IAAI,EAAE,KAAK,CAAC,KAAK;KAClB,CAAC,CAAA;AACJ,CAAC"}
@@ -0,0 +1,23 @@
1
+ import type { MsaViewModel } from '../../model.ts';
2
+ import type { ResolvedRowPanel } from '../../types.ts';
3
+ import type { RenderCtx } from '../renderCtx.ts';
4
+ import type { Theme } from '@mui/material';
5
+ interface PanelArgs {
6
+ ctx: RenderCtx;
7
+ model: MsaViewModel;
8
+ theme: Theme;
9
+ panel: ResolvedRowPanel;
10
+ x: number;
11
+ offsetY: number;
12
+ blockSizeYOverride?: number;
13
+ highResScaleFactorOverride?: number;
14
+ }
15
+ /**
16
+ * One row panel, by kind. `x` is the panel's left edge in the context: the
17
+ * live view gives each panel a canvas of its own and passes 0, and the export
18
+ * packs every panel into one context and passes the panel's own offset.
19
+ */
20
+ export declare function renderRowPanel({ panel, ...rest }: PanelArgs): void;
21
+ /** every row panel side by side in one context, for the SVG export */
22
+ export declare function renderRowPanels({ model, ...rest }: Omit<PanelArgs, 'panel' | 'x'>): void;
23
+ export {};
@@ -0,0 +1,22 @@
1
+ import { renderFeaturePanel } from './renderFeaturePanel.js';
2
+ import { renderStrip } from './renderStrip.js';
3
+ /**
4
+ * One row panel, by kind. `x` is the panel's left edge in the context: the
5
+ * live view gives each panel a canvas of its own and passes 0, and the export
6
+ * packs every panel into one context and passes the panel's own offset.
7
+ */
8
+ export function renderRowPanel({ panel, ...rest }) {
9
+ if (panel.kind === 'features') {
10
+ renderFeaturePanel({ panel, ...rest });
11
+ }
12
+ else {
13
+ renderStrip({ panel, ...rest });
14
+ }
15
+ }
16
+ /** every row panel side by side in one context, for the SVG export */
17
+ export function renderRowPanels({ model, ...rest }) {
18
+ for (const panel of model.resolvedRowPanels) {
19
+ renderRowPanel({ model, panel, x: panel.offsetX, ...rest });
20
+ }
21
+ }
22
+ //# sourceMappingURL=renderRowPanel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderRowPanel.js","sourceRoot":"","sources":["../../../src/components/rowpanels/renderRowPanel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAkB9C;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,EAAE,KAAK,EAAE,GAAG,IAAI,EAAa;IAC1D,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QAC9B,kBAAkB,CAAC,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,CAAC,CAAA;IACxC,CAAC;SAAM,CAAC;QACN,WAAW,CAAC,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,CAAC,CAAA;IACjC,CAAC;AACH,CAAC;AAED,sEAAsE;AACtE,MAAM,UAAU,eAAe,CAAC,EAC9B,KAAK,EACL,GAAG,IAAI,EACwB;IAC/B,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,iBAAiB,EAAE,CAAC;QAC5C,cAAc,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,CAAC,OAAO,EAAE,GAAG,IAAI,EAAE,CAAC,CAAA;IAC7D,CAAC;AACH,CAAC"}
@@ -0,0 +1,20 @@
1
+ import type { MsaViewModel } from '../../model.ts';
2
+ import type { ResolvedStripPanel } from '../../types.ts';
3
+ import type { RenderCtx } from '../renderCtx.ts';
4
+ /**
5
+ * One cell per row of a `strip` panel, in the color its field takes through
6
+ * the panel's scale. A row the table has no value for leaves the cell empty.
7
+ *
8
+ * `x` is the panel's left edge in the context: the live view gives each panel
9
+ * a canvas of its own and passes 0, and the export packs every panel into one
10
+ * context and passes the panel's own offset.
11
+ */
12
+ export declare function renderStrip({ ctx, model, panel, x, offsetY, blockSizeYOverride, highResScaleFactorOverride, }: {
13
+ ctx: RenderCtx;
14
+ model: MsaViewModel;
15
+ panel: ResolvedStripPanel;
16
+ x: number;
17
+ offsetY: number;
18
+ blockSizeYOverride?: number;
19
+ highResScaleFactorOverride?: number;
20
+ }): void;
@@ -0,0 +1,26 @@
1
+ import { getVisibleLeaves } from '../getVisibleLeaves.js';
2
+ /**
3
+ * One cell per row of a `strip` panel, in the color its field takes through
4
+ * the panel's scale. A row the table has no value for leaves the cell empty.
5
+ *
6
+ * `x` is the panel's left edge in the context: the live view gives each panel
7
+ * a canvas of its own and passes 0, and the export packs every panel into one
8
+ * context and passes the panel's own offset.
9
+ */
10
+ export function renderStrip({ ctx, model, panel, x, offsetY, blockSizeYOverride, highResScaleFactorOverride, }) {
11
+ const { rowHeight, blockSize, highResScaleFactor } = model;
12
+ const by = blockSizeYOverride ?? blockSize;
13
+ ctx.resetTransform();
14
+ const k = highResScaleFactorOverride ?? highResScaleFactor;
15
+ ctx.scale(k, k);
16
+ ctx.translate(x, -offsetY);
17
+ for (const leaf of getVisibleLeaves({ model, offsetY, blockSizeY: by })) {
18
+ const color = panel.colors.get(leaf.data.name);
19
+ if (color) {
20
+ ctx.fillStyle = color;
21
+ // leaf.x is the row's center, at rowHeight*(index+0.5)
22
+ ctx.fillRect(0, leaf.x - rowHeight / 2, panel.width, rowHeight);
23
+ }
24
+ }
25
+ }
26
+ //# sourceMappingURL=renderStrip.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderStrip.js","sourceRoot":"","sources":["../../../src/components/rowpanels/renderStrip.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAMzD;;;;;;;GAOG;AACH,MAAM,UAAU,WAAW,CAAC,EAC1B,GAAG,EACH,KAAK,EACL,KAAK,EACL,CAAC,EACD,OAAO,EACP,kBAAkB,EAClB,0BAA0B,GAS3B;IACC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,kBAAkB,EAAE,GAAG,KAAK,CAAA;IAC1D,MAAM,EAAE,GAAG,kBAAkB,IAAI,SAAS,CAAA;IAC1C,GAAG,CAAC,cAAc,EAAE,CAAA;IACpB,MAAM,CAAC,GAAG,0BAA0B,IAAI,kBAAkB,CAAA;IAC1D,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IACf,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAA;IAC1B,KAAK,MAAM,IAAI,IAAI,gBAAgB,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;QACxE,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC9C,IAAI,KAAK,EAAE,CAAC;YACV,GAAG,CAAC,SAAS,GAAG,KAAK,CAAA;YACrB,uDAAuD;YACvD,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,CAAE,GAAG,SAAS,GAAG,CAAC,EAAE,KAAK,CAAC,KAAK,EAAE,SAAS,CAAC,CAAA;QAClE,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -1,24 +1,24 @@
1
1
  import React from 'react';
2
+ import { useTheme } from '@mui/material';
2
3
  import { observer } from 'mobx-react';
3
4
  import { useCanvasAutorun } from '../../useCanvasAutorun.js';
4
- import { useColorContrast } from '../../useColorContrast.js';
5
5
  import { TrackResizeHandle } from '../ResizeHandles.js';
6
6
  import { drawTrackBlock } from './drawTracks.js';
7
7
  const TrackBlock = observer(function ({ model, track, offsetX, }) {
8
- const { blockSize, colorScheme, highResScaleFactor } = model;
9
- const { height, customColorScheme } = track.model;
10
- const { theme, contrastScheme } = useColorContrast(customColorScheme ?? colorScheme);
8
+ const { blockSize, highResScaleFactor } = model;
9
+ const { height } = track.model;
10
+ const theme = useTheme();
11
11
  const canvasWidth = blockSize * highResScaleFactor;
12
12
  const canvasHeight = height * highResScaleFactor;
13
13
  const ref = useCanvasAutorun({
14
14
  draw: ctx => {
15
15
  ctx.resetTransform();
16
16
  ctx.clearRect(0, 0, canvasWidth, canvasHeight);
17
- drawTrackBlock({ model, ctx, track, offsetX, theme, contrastScheme });
17
+ drawTrackBlock({ model, ctx, track, offsetX, theme });
18
18
  },
19
19
  width: canvasWidth,
20
20
  height: canvasHeight,
21
- deps: [model, track, offsetX, theme, contrastScheme],
21
+ deps: [model, track, offsetX, theme],
22
22
  });
23
23
  return (React.createElement("canvas", { ref: ref, width: canvasWidth, height: canvasHeight, style: {
24
24
  position: 'absolute',
@@ -34,16 +34,13 @@ const TrackBlock = observer(function ({ model, track, offsetX, }) {
34
34
  * not how the blocks are laid out or kept in sync with the horizontal scroll.
35
35
  */
36
36
  const TrackBlocks = observer(function ({ model, track, }) {
37
- // msaCanvasWidth, not msaAreaWidth: a track row is a legend for the columns
38
- // directly below it, so it has to stop where the alignment canvas does rather
39
- // than running on another 20px under the vertical scrollbar -- otherwise the
40
- // last columns appear in the tracks but not in the alignment, and the hovered
41
- // -column indicator (sized to the canvas) stops short of the track it crosses
37
+ // msaCanvasWidth, not msaAreaWidth: tracks stop where the alignment canvas
38
+ // does, not 20px further under the vertical scrollbar, so their columns and
39
+ // the hover indicator line up with the alignment
42
40
  const { blocksX, msaCanvasWidth, scrollX } = model;
43
- const { kind, height, data } = track.model;
44
- // a text track with no data draws nothing, and an empty row of its own would
45
- // still take up vertical space
46
- if (kind === 'text' && !data) {
41
+ const { kind, height, data, arcs } = track.model;
42
+ // a track with nothing to draw would still take up its vertical space
43
+ if ((kind === 'text' && !data) || (kind === 'arc' && !arcs?.length)) {
47
44
  return null;
48
45
  }
49
46
  return (React.createElement("div", { style: {
@@ -59,7 +56,7 @@ const TrackBlocks = observer(function ({ model, track, }) {
59
56
  transform: `translateX(${scrollX}px)`,
60
57
  willChange: 'transform',
61
58
  } }, blocksX.map(bx => (React.createElement(TrackBlock, { key: bx, model: model, track: track, offsetX: bx })))),
62
- React.createElement(TrackResizeHandle, { model: model, kind: kind })));
59
+ React.createElement(TrackResizeHandle, { model: model, track: track })));
63
60
  });
64
61
  export default TrackBlocks;
65
62
  //# sourceMappingURL=TrackBlocks.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TrackBlocks.js","sourceRoot":"","sources":["../../../src/components/tracks/TrackBlocks.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TrackBlocks.js","sourceRoot":"","sources":["../../../src/components/tracks/TrackBlocks.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import React from 'react';
2
+ import type { MsaViewModel } from '../../model.ts';
3
+ import type { BasicTrack } from '../../types.ts';
4
+ /**
5
+ * One track's reading at the hovered column: a bar track's value, the logo's
6
+ * information content and composition, the columns an arc joins, the letter on a
7
+ * text track. `drawTrackBlock` dispatches on the same `kind`, so a new kind
8
+ * needs a case in both.
9
+ */
10
+ declare const TrackTooltipContent: ({ model, track, col, }: {
11
+ model: MsaViewModel;
12
+ track: BasicTrack;
13
+ col: number;
14
+ }) => React.JSX.Element;
15
+ export default TrackTooltipContent;