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
@@ -1,7 +1,8 @@
1
- import { calcDepthToLeaf } from '../../hierarchy.js';
1
+ import { calcDepthToLeaf, nodeCoveringRows } from '../../hierarchy.js';
2
2
  import { setFontSize } from '../../setFontSize.js';
3
3
  import { getVisibleLeaves } from '../getVisibleLeaves.js';
4
4
  import { drawHighlightLabel, highlightLabelHeight, highlightRowFill, } from '../msa/renderHighlights.js';
5
+ import { bracketBarWidth, bracketGap } from './cladeBrackets.js';
5
6
  const radius = 2.5;
6
7
  const d = radius * 2;
7
8
  // How far outside a block a node's row-center can sit and still draw into it: a
@@ -17,12 +18,12 @@ function inYBlock(y, offsetY, by, pad) {
17
18
  }
18
19
  /**
19
20
  * Every node whose subtree reaches into the block, skipping the subtrees that
20
- * do not. A subtree's leaves are one contiguous run of rows -- clusterLayout
21
- * records the run as xMin/xMax -- so a block of a 200k-tip tree visits a few
22
- * dozen nodes instead of every one of them, three times over.
21
+ * do not. A subtree's leaves are one contiguous run of rows, recorded by
22
+ * clusterLayout as xMin/xMax, so a block of a 200k-tip tree visits a few dozen
23
+ * nodes.
23
24
  *
24
- * A link out of a visited node is still drawn even when the child it reaches is
25
- * pruned, which is what keeps a branch that crosses the block from vanishing.
25
+ * A link out of a visited node is drawn even when its child is pruned, so a
26
+ * branch crossing the block stays visible.
26
27
  */
27
28
  function forEachNodeInBlock(root, offsetY, by, pad, cb) {
28
29
  const top = offsetY - pad;
@@ -57,9 +58,10 @@ export function getNodeX(node, showBranchLen, tipX, maxDepthToLeaf) {
57
58
  return ((maxDepthToLeaf - depthToLeaf) / maxDepthToLeaf) * tipX;
58
59
  }
59
60
  function renderTree({ offsetY, ctx, model, theme, tipX, maxDepthToLeaf, blockSizeYOverride, }) {
60
- const { hierarchy, showBranchLenEffective: showBranchLen, blockSize } = model;
61
+ const { hierarchy, showBranchLenEffective: showBranchLen, blockSize, branchColors, } = model;
61
62
  const by = blockSizeYOverride ?? blockSize;
62
- ctx.strokeStyle = theme.palette.text.primary;
63
+ const defaultStroke = theme.palette.text.primary;
64
+ ctx.strokeStyle = defaultStroke;
63
65
  forEachNodeInBlock(hierarchy, offsetY, by, blockPad(model), source => {
64
66
  const sy = source.x;
65
67
  const sx = getNodeX(source, showBranchLen, tipX, maxDepthToLeaf);
@@ -78,6 +80,10 @@ function renderTree({ offsetY, ctx, model, theme, tipX, maxDepthToLeaf, blockSiz
78
80
  // optimization that allows us to skip drawing most tree links outside the
79
81
  // block
80
82
  if (offsetY + by >= y1 && y2 >= offsetY) {
83
+ // the edge belongs to the child, whose id the branch channel colors
84
+ if (branchColors) {
85
+ ctx.strokeStyle = branchColors.get(target.data.id) ?? defaultStroke;
86
+ }
81
87
  ctx.beginPath();
82
88
  ctx.moveTo(sx, sy);
83
89
  ctx.lineTo(sx, ty);
@@ -86,9 +92,10 @@ function renderTree({ offsetY, ctx, model, theme, tipX, maxDepthToLeaf, blockSiz
86
92
  }
87
93
  }
88
94
  });
95
+ ctx.strokeStyle = defaultStroke;
89
96
  }
90
97
  function renderCollapsedTriangles({ ctx, clickMap, offsetY, model, theme, tipX, maxDepthToLeaf, blockSizeYOverride, collapsedSet, }) {
91
- const { hierarchy, showBranchLenEffective: showBranchLen, blockSize, rowHeight, fontSize, marginLeft: ml, } = model;
98
+ const { hierarchy, showBranchLenEffective: showBranchLen, blockSize, rowHeight, fontSize, marginLeft: ml, branchColors, } = model;
92
99
  // nothing collapsed is the common case, and the traversal below visits every
93
100
  // node in the tree on every block of every redraw
94
101
  if (collapsedSet.size === 0) {
@@ -111,7 +118,7 @@ function renderCollapsedTriangles({ ctx, clickMap, offsetY, model, theme, tipX,
111
118
  ctx.lineTo(baseX, y - halfHeight);
112
119
  ctx.lineTo(baseX, y + halfHeight);
113
120
  ctx.closePath();
114
- ctx.fillStyle = theme.palette.action.disabled;
121
+ ctx.fillStyle = branchColors?.get(id) ?? theme.palette.action.disabled;
115
122
  ctx.fill();
116
123
  ctx.strokeStyle = theme.palette.text.primary;
117
124
  ctx.stroke();
@@ -141,7 +148,7 @@ function renderCollapsedTriangles({ ctx, clickMap, offsetY, model, theme, tipX,
141
148
  }
142
149
  // the bubbles are click targets whether or not they are painted, so this pass
143
150
  // always runs and `draw` only decides whether it also strokes the circles
144
- function renderNodeBubbles({ ctx, clickMap, offsetY, model, tipX, maxDepthToLeaf, blockSizeYOverride, collapsedSet, draw, }) {
151
+ function renderNodeBubbles({ ctx, theme, clickMap, offsetY, model, tipX, maxDepthToLeaf, blockSizeYOverride, collapsedSet, draw, }) {
145
152
  const { hierarchy, showBranchLenEffective: showBranchLen, blockSize, marginLeft: ml, } = model;
146
153
  const by = blockSizeYOverride ?? blockSize;
147
154
  forEachNodeInBlock(hierarchy, offsetY, by, blockPad(model), node => {
@@ -155,8 +162,10 @@ function renderNodeBubbles({ ctx, clickMap, offsetY, model, tipX, maxDepthToLeaf
155
162
  if (node.height >= 1 && inYBlock(y, offsetY, by, blockPad(model))) {
156
163
  const isCollapsed = collapsedSet.has(id);
157
164
  if (draw) {
158
- ctx.strokeStyle = 'black';
159
- ctx.fillStyle = isCollapsed ? 'black' : 'white';
165
+ ctx.strokeStyle = theme.palette.text.primary;
166
+ ctx.fillStyle = isCollapsed
167
+ ? theme.palette.text.primary
168
+ : theme.palette.background.default;
160
169
  ctx.beginPath();
161
170
  ctx.arc(x, y, radius, 0, 2 * Math.PI);
162
171
  ctx.fill();
@@ -178,8 +187,33 @@ function renderNodeBubbles({ ctx, clickMap, offsetY, model, tipX, maxDepthToLeaf
178
187
  }
179
188
  });
180
189
  }
190
+ // The label a newick file puts on an internal node, which is where a bootstrap
191
+ // or posterior support value lands: ((A,B)95,(C,D)80);. withId falls back to the
192
+ // path-derived id for an unnamed node, so a node whose name is its id has no
193
+ // label of its own and an ungated pass prints node-0-1-1 across the tree.
194
+ function renderNodeLabels({ ctx, theme, offsetY, model, tipX, maxDepthToLeaf, blockSizeYOverride, }) {
195
+ const { hierarchy, showBranchLenEffective: showBranchLen, blockSize, fontSize, } = model;
196
+ const by = blockSizeYOverride ?? blockSize;
197
+ const pad = blockPad(model);
198
+ setFontSize(ctx, Math.max(6, fontSize - 3));
199
+ ctx.fillStyle = theme.palette.text.primary;
200
+ ctx.textAlign = 'right';
201
+ forEachNodeInBlock(hierarchy, offsetY, by, pad, node => {
202
+ const { id, name } = node.data;
203
+ if (node.height < 1 || name === id) {
204
+ return;
205
+ }
206
+ const x = getNodeX(node, showBranchLen, tipX, maxDepthToLeaf);
207
+ const y = node.x;
208
+ if (x !== undefined && inYBlock(y, offsetY, by, pad)) {
209
+ ctx.fillText(name, x - radius - 1, y - radius - 1);
210
+ }
211
+ });
212
+ ctx.textAlign = 'start';
213
+ setFontSize(ctx, fontSize);
214
+ }
181
215
  function renderTreeLabels({ theme, model, offsetY, ctx, clickMap, tipX, maxDepthToLeaf, blockSizeYOverride, collapsedSet, }) {
182
- const { fontSize, showBranchLenEffective: showBranchLen, treeMetadata, blockSize, labelsAlignRight, drawTree, treeAreaWidthMinusMargin, marginLeft, noTree, labelWidthMap, labelWidthScale, } = model;
216
+ const { fontSize, showBranchLenEffective: showBranchLen, tipLabelColors, blockSize, labelsAlignRight, drawTree, treeAreaWidthMinusMargin, marginLeft, noTree, labelWidthMap, labelWidthScale, } = model;
183
217
  const by = blockSizeYOverride ?? blockSize;
184
218
  // labels only exist for leaves, which are laid out top to bottom, so take the
185
219
  // same slice the MSA renderer uses instead of walking every tip per block
@@ -197,12 +231,13 @@ function renderTreeLabels({ theme, model, offsetY, ctx, clickMap, tipX, maxDepth
197
231
  for (const node of visibleLeaves) {
198
232
  const { data: { name, id }, } = node;
199
233
  const y = node.x;
200
- const displayName = treeMetadata[name]?.genome || name;
234
+ const displayName = model.rowDataOf(name)?.genome || name;
201
235
  // a collapsed clade is drawn as a triangle + tip count; suppress its leaf
202
236
  // label when the "name" is just the auto-generated internal-node id
203
237
  const isAnonymousCollapsed = collapsedSet.has(id) && name === id;
204
238
  if (!isAnonymousCollapsed && inYBlock(y, offsetY, by, pad)) {
205
- // note: +rowHeight/4 matches with -rowHeight/4 in msa
239
+ // fontSize/4 below the row center, the baseline the alignment letters
240
+ // share
206
241
  const yp = y + fontSize / 4;
207
242
  let xp = 0;
208
243
  if (!noTree) {
@@ -212,7 +247,7 @@ function renderTreeLabels({ theme, model, offsetY, ctx, clickMap, tipX, maxDepth
212
247
  const width = measured === undefined
213
248
  ? ctx.measureText(displayName).width
214
249
  : measured * labelWidthScale;
215
- ctx.fillStyle = theme.palette.text.primary;
250
+ ctx.fillStyle = tipLabelColors?.get(name) ?? theme.palette.text.primary;
216
251
  if (labelsAlignRight) {
217
252
  const smallPadding = 2;
218
253
  const offset = treeAreaWidthMinusMargin - smallPadding;
@@ -254,22 +289,101 @@ function renderTreeLabels({ theme, model, offsetY, ctx, clickMap, tipX, maxDepth
254
289
  }
255
290
  ctx.setLineDash([]);
256
291
  }
257
- // the row sets of `highlights`, tinted across the tree area under the labels
258
- // with the label in the gutter at the first row of each set
292
+ // the first row of a set, as a loop: spreading into Math.min passes one
293
+ // argument per row, and the ~125k argument limit throws RangeError on a set
294
+ // covering the 230k-tip COVID tree
295
+ function firstRow(rowIndices) {
296
+ let min = Infinity;
297
+ for (const index of rowIndices) {
298
+ if (index < min) {
299
+ min = index;
300
+ }
301
+ }
302
+ return min;
303
+ }
304
+ // the highlight mark of the `clades` layer: a translucent rectangle from the
305
+ // clade's common ancestor to the right edge of the tree area, under the
306
+ // branches. A clade spanning hundreds of rows crosses several blocks, so each
307
+ // block draws the whole rectangle and the canvas takes the part that is its.
308
+ function renderCladeHighlights({ ctx, model, offsetY, tipX, maxDepthToLeaf, blockSizeYOverride, }) {
309
+ const { resolvedClades, hierarchy, showBranchLenEffective: showBranchLen, rowHeight, treeAreaWidth, marginLeft, blockSize, } = model;
310
+ const by = blockSizeYOverride ?? blockSize;
311
+ const right = treeAreaWidth - marginLeft;
312
+ for (const { rows, color, mark } of resolvedClades) {
313
+ if (mark !== 'highlight') {
314
+ continue;
315
+ }
316
+ const top = rows[0] * rowHeight;
317
+ const bottom = (rows[1] + 1) * rowHeight;
318
+ if (bottom < offsetY || top > offsetY + by) {
319
+ continue;
320
+ }
321
+ const node = nodeCoveringRows(hierarchy, top + rowHeight / 2, bottom - rowHeight / 2);
322
+ const x = getNodeX(node, showBranchLen, tipX, maxDepthToLeaf) ?? 0;
323
+ ctx.fillStyle = color;
324
+ ctx.fillRect(x, top, right - x, bottom - top);
325
+ }
326
+ }
327
+ // the bar of the bracket mark, in the gutter `cladeGutterWidth` reserves at the
328
+ // right of the tree area. The label beside it is DOM text on screen and a
329
+ // <text> in the export, since the canvas layer has no rotation.
330
+ function renderCladeBrackets({ ctx, model, theme, offsetY, blockSizeYOverride, }) {
331
+ const { resolvedClades, cladeGutterWidth, rowHeight, treeAreaWidth, marginLeft, blockSize, } = model;
332
+ if (cladeGutterWidth === 0) {
333
+ return;
334
+ }
335
+ const by = blockSizeYOverride ?? blockSize;
336
+ const x = treeAreaWidth -
337
+ marginLeft -
338
+ cladeGutterWidth +
339
+ bracketGap +
340
+ bracketBarWidth / 2;
341
+ ctx.lineWidth = bracketBarWidth;
342
+ for (const { rows, mark, markColor } of resolvedClades) {
343
+ const top = rows[0] * rowHeight + 1;
344
+ const bottom = (rows[1] + 1) * rowHeight - 1;
345
+ if (mark !== 'bracket' || bottom < offsetY || top > offsetY + by) {
346
+ continue;
347
+ }
348
+ ctx.strokeStyle = markColor ?? theme.palette.text.primary;
349
+ ctx.beginPath();
350
+ ctx.moveTo(x, top);
351
+ ctx.lineTo(x, bottom);
352
+ ctx.stroke();
353
+ }
354
+ ctx.lineWidth = 1;
355
+ ctx.strokeStyle = theme.palette.text.primary;
356
+ }
357
+ // the `rowTint` encoding and the row sets of `highlights`, washed across the
358
+ // tree area under the labels, with each set's label in the gutter at its first
359
+ // row
259
360
  function renderRowHighlights({ ctx, model, theme, offsetY, blockSizeYOverride, }) {
260
- const { resolvedHighlights, rowHeight, treeAreaWidth, marginLeft, blockSize, } = model;
361
+ const { resolvedHighlights, rowTints, rowHeight, treeAreaWidth, marginLeft, blockSize, } = model;
261
362
  const by = blockSizeYOverride ?? blockSize;
262
363
  const pad = blockPad(model);
263
364
  const placed = [];
365
+ const fillRow = (index) => {
366
+ ctx.fillRect(-marginLeft, index * rowHeight, treeAreaWidth, rowHeight);
367
+ };
368
+ if (rowTints) {
369
+ const top = Math.max(0, Math.floor((offsetY - pad) / rowHeight));
370
+ const bottom = Math.min(rowTints.length - 1, Math.ceil((offsetY + by + pad) / rowHeight));
371
+ for (let index = top; index <= bottom; index++) {
372
+ const color = rowTints[index];
373
+ if (color) {
374
+ ctx.fillStyle = color;
375
+ fillRow(index);
376
+ }
377
+ }
378
+ }
264
379
  for (const { rowIndices, label, color } of resolvedHighlights) {
265
380
  ctx.fillStyle = color ?? highlightRowFill;
266
381
  for (const index of rowIndices) {
267
- const y = index * rowHeight;
268
- if (inYBlock(y + rowHeight / 2, offsetY, by, pad)) {
269
- ctx.fillRect(-marginLeft, y, treeAreaWidth, rowHeight);
382
+ if (inYBlock(index * rowHeight + rowHeight / 2, offsetY, by, pad)) {
383
+ fillRow(index);
270
384
  }
271
385
  }
272
- const first = Math.min(...rowIndices);
386
+ const first = firstRow(rowIndices);
273
387
  if (label &&
274
388
  rowIndices.length &&
275
389
  inYBlock(first * rowHeight, offsetY, by, pad)) {
@@ -289,7 +403,7 @@ function renderRowHighlights({ ctx, model, theme, offsetY, blockSizeYOverride, }
289
403
  export function renderTreeCanvas({ model, clickMap, ctx, offsetY, theme, highResScaleFactorOverride, blockSizeYOverride, }) {
290
404
  clickMap?.clear();
291
405
  // Defer the finish call until after all inserts are done
292
- const { noTree, drawTree, drawNodeBubbles, highResScaleFactor, fontSize, showTreeText, marginLeft,
406
+ const { noTree, drawTree, drawNodeBubbles, drawNodeLabels, highResScaleFactor, fontSize, showTreeText, marginLeft,
293
407
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
294
408
  rowHeight: _rowHeight, // read so the draw autorun re-fires after a zoom change
295
409
  } = model;
@@ -310,6 +424,14 @@ export function renderTreeCanvas({ model, clickMap, ctx, offsetY, theme, highRes
310
424
  // built once for all three passes: each of them asks about a different node on
311
425
  // every block of every redraw, and `collapsed` is a list
312
426
  const collapsedSet = new Set(model.collapsed);
427
+ renderCladeHighlights({
428
+ ctx,
429
+ model,
430
+ offsetY,
431
+ tipX,
432
+ maxDepthToLeaf,
433
+ blockSizeYOverride,
434
+ });
313
435
  renderRowHighlights({ ctx, model, theme, offsetY, blockSizeYOverride });
314
436
  setFontSize(ctx, fontSize);
315
437
  if (!noTree && drawTree) {
@@ -335,6 +457,7 @@ export function renderTreeCanvas({ model, clickMap, ctx, offsetY, theme, highRes
335
457
  });
336
458
  renderNodeBubbles({
337
459
  ctx,
460
+ theme,
338
461
  offsetY,
339
462
  clickMap,
340
463
  model,
@@ -344,6 +467,17 @@ export function renderTreeCanvas({ model, clickMap, ctx, offsetY, theme, highRes
344
467
  collapsedSet,
345
468
  draw: drawNodeBubbles,
346
469
  });
470
+ if (drawNodeLabels) {
471
+ renderNodeLabels({
472
+ ctx,
473
+ theme,
474
+ offsetY,
475
+ model,
476
+ tipX,
477
+ maxDepthToLeaf,
478
+ blockSizeYOverride,
479
+ });
480
+ }
347
481
  }
348
482
  if (showTreeText) {
349
483
  renderTreeLabels({
@@ -358,6 +492,7 @@ export function renderTreeCanvas({ model, clickMap, ctx, offsetY, theme, highRes
358
492
  collapsedSet,
359
493
  });
360
494
  }
495
+ renderCladeBrackets({ ctx, model, theme, offsetY, blockSizeYOverride });
361
496
  // Finish the index so it's ready for queries
362
497
  clickMap?.finish();
363
498
  }
@@ -1 +1 @@
1
- {"version":3,"file":"renderTreeCanvas.js","sourceRoot":"","sources":["../../../src/components/tree/renderTreeCanvas.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"renderTreeCanvas.js","sourceRoot":"","sources":["../../../src/components/tree/renderTreeCanvas.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ import type { MsaViewModel } from '../../model.ts';
2
+ import type { RasterCanvas } from '../msa/msaRaster.ts';
3
+ import type { RenderCtx } from '../renderCtx.ts';
4
+ import type { Theme } from '@mui/material';
5
+ interface OverviewArgs {
6
+ model: MsaViewModel;
7
+ ctx: RenderCtx;
8
+ theme: Theme;
9
+ width: number;
10
+ height: number;
11
+ }
12
+ /**
13
+ * The whole tree at the size of the overview band, with the clade highlights
14
+ * under it.
15
+ *
16
+ * A branch that moves less than a pixel on both axes is dropped. The 230k-tip
17
+ * COVID tree has 460k of them over a 120px band, and the ones landing on the
18
+ * pixel their parent already covers cost a path segment each and change no
19
+ * pixel; the test in renderTreeOverview.test.ts measures a 200k-tip tree.
20
+ */
21
+ export declare function drawTreeOverview({ model, ctx, theme, width, height, }: OverviewArgs): void;
22
+ /**
23
+ * A box across the overview around a run of tip rows: the focused subtree's
24
+ * extent, or the one a hovered pixel would focus.
25
+ */
26
+ export declare function drawTreeOverviewBox({ model, ctx, color, rows, width, height, }: Omit<OverviewArgs, 'theme'> & {
27
+ color: string;
28
+ rows: [number, number];
29
+ }): void;
30
+ /**
31
+ * The overview as the figure carries it: the tree, the clade highlights and
32
+ * the focus box. The SVG export draws it straight onto a svgcanvas Context,
33
+ * and the live canvas blits `treeOverviewImage` in place of the first two.
34
+ */
35
+ export declare function renderTreeOverview(args: OverviewArgs): void;
36
+ /**
37
+ * The tree and its clade highlights on an offscreen canvas, drawn once per
38
+ * change of anything they depend on and blitted every frame after that. A
39
+ * 230k-branch tree takes hundreds of milliseconds to walk and cannot be redrawn
40
+ * as the focus box follows the pointer.
41
+ *
42
+ * Returns undefined where a canvas has no 2d context (jsdom), and the caller
43
+ * then draws the tree itself.
44
+ */
45
+ export declare function treeOverviewImage({ model, theme, width, height, scale, }: {
46
+ model: MsaViewModel;
47
+ theme: Theme;
48
+ width: number;
49
+ height: number;
50
+ scale: number;
51
+ }): RasterCanvas | undefined;
52
+ export {};
@@ -0,0 +1,138 @@
1
+ import { descendants } from '../../hierarchy.js';
2
+ import { getNodeX } from './renderTreeCanvas.js';
3
+ // the tree draws this far inside the band, so a box around the first or the
4
+ // last row keeps both of its edges
5
+ const pad = 1;
6
+ function rowScale(numTips, height) {
7
+ const inner = height - pad * 2;
8
+ return (row) => pad + (row / numTips) * inner;
9
+ }
10
+ /**
11
+ * The whole tree at the size of the overview band, with the clade highlights
12
+ * under it.
13
+ *
14
+ * A branch that moves less than a pixel on both axes is dropped. The 230k-tip
15
+ * COVID tree has 460k of them over a 120px band, and the ones landing on the
16
+ * pixel their parent already covers cost a path segment each and change no
17
+ * pixel; the test in renderTreeOverview.test.ts measures a 200k-tip tree.
18
+ */
19
+ export function drawTreeOverview({ model, ctx, theme, width, height, }) {
20
+ const layout = model.treeOverviewLayout;
21
+ if (!layout) {
22
+ return;
23
+ }
24
+ const { root, numTips, maxDepthToLeaf, showBranchLen } = layout;
25
+ const innerWidth = width - pad * 2;
26
+ const rowY = rowScale(numTips, height);
27
+ const nodeX = (node) => pad + (getNodeX(node, showBranchLen, 1, maxDepthToLeaf) ?? 0) * innerWidth;
28
+ for (const { rows, color } of model.treeOverviewClades) {
29
+ ctx.fillStyle = color;
30
+ ctx.fillRect(0, rowY(rows[0]), width, rowY(rows[1] + 1) - rowY(rows[0]));
31
+ }
32
+ ctx.strokeStyle = theme.palette.text.primary;
33
+ ctx.beginPath();
34
+ for (const source of descendants(root)) {
35
+ if (!source.children) {
36
+ continue;
37
+ }
38
+ const sx = nodeX(source);
39
+ const sy = rowY(source.x);
40
+ for (const target of source.children) {
41
+ const tx = nodeX(target);
42
+ const ty = rowY(target.x);
43
+ if (Math.abs(tx - sx) < 1 && Math.abs(ty - sy) < 1) {
44
+ continue;
45
+ }
46
+ ctx.moveTo(sx, sy);
47
+ ctx.lineTo(sx, ty);
48
+ ctx.lineTo(tx, ty);
49
+ }
50
+ }
51
+ ctx.stroke();
52
+ }
53
+ /**
54
+ * A box across the overview around a run of tip rows: the focused subtree's
55
+ * extent, or the one a hovered pixel would focus.
56
+ */
57
+ export function drawTreeOverviewBox({ model, ctx, color, rows, width, height, }) {
58
+ const layout = model.treeOverviewLayout;
59
+ if (!layout) {
60
+ return;
61
+ }
62
+ const rowY = rowScale(layout.numTips, height);
63
+ const top = rowY(rows[0]);
64
+ ctx.strokeStyle = color;
65
+ ctx.strokeRect(0.5, top, width - 1, Math.max(2, rowY(rows[1] + 1) - top));
66
+ }
67
+ /**
68
+ * The overview as the figure carries it: the tree, the clade highlights and
69
+ * the focus box. The SVG export draws it straight onto a svgcanvas Context,
70
+ * and the live canvas blits `treeOverviewImage` in place of the first two.
71
+ */
72
+ export function renderTreeOverview(args) {
73
+ drawTreeOverview(args);
74
+ const rows = args.model.treeOverviewFocusRows;
75
+ if (rows) {
76
+ drawTreeOverviewBox({
77
+ ...args,
78
+ rows,
79
+ color: args.theme.palette.text.primary,
80
+ });
81
+ }
82
+ }
83
+ const caches = new WeakMap();
84
+ /**
85
+ * Everything the drawn tree depends on. `treeOverviewLayout` and
86
+ * `treeOverviewClades` are computed views, which recompute on every read
87
+ * outside a reaction, so the key holds the values behind them instead.
88
+ */
89
+ function overviewKeys({ model, theme, width, height, scale, }) {
90
+ return [
91
+ model.data.tree,
92
+ model.data.msa,
93
+ model.currentAlignment,
94
+ model.collapsed.join(','),
95
+ JSON.stringify(model.clades),
96
+ model.showBranchLen,
97
+ width,
98
+ height,
99
+ scale,
100
+ theme.palette.text.primary,
101
+ ];
102
+ }
103
+ function makeCanvas(width, height) {
104
+ const canvas = typeof OffscreenCanvas !== 'undefined'
105
+ ? new OffscreenCanvas(width, height)
106
+ : typeof document !== 'undefined'
107
+ ? Object.assign(document.createElement('canvas'), { width, height })
108
+ : undefined;
109
+ const ctx = canvas?.getContext('2d');
110
+ return ctx && typeof ctx.stroke === 'function'
111
+ ? { canvas: canvas, ctx: ctx }
112
+ : undefined;
113
+ }
114
+ /**
115
+ * The tree and its clade highlights on an offscreen canvas, drawn once per
116
+ * change of anything they depend on and blitted every frame after that. A
117
+ * 230k-branch tree takes hundreds of milliseconds to walk and cannot be redrawn
118
+ * as the focus box follows the pointer.
119
+ *
120
+ * Returns undefined where a canvas has no 2d context (jsdom), and the caller
121
+ * then draws the tree itself.
122
+ */
123
+ export function treeOverviewImage({ model, theme, width, height, scale, }) {
124
+ const keys = overviewKeys({ model, theme, width, height, scale });
125
+ const prev = caches.get(model);
126
+ if (prev && keys.every((key, i) => key === prev.keys[i])) {
127
+ return prev.canvas;
128
+ }
129
+ const made = makeCanvas(Math.max(1, Math.round(width * scale)), Math.max(1, Math.round(height * scale)));
130
+ if (made) {
131
+ made.ctx.scale(scale, scale);
132
+ drawTreeOverview({ model, ctx: made.ctx, theme, width, height });
133
+ }
134
+ const next = { keys, canvas: made?.canvas };
135
+ caches.set(model, next);
136
+ return next.canvas;
137
+ }
138
+ //# sourceMappingURL=renderTreeOverview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderTreeOverview.js","sourceRoot":"","sources":["../../../src/components/tree/renderTreeOverview.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAQhD,4EAA4E;AAC5E,mCAAmC;AACnC,MAAM,GAAG,GAAG,CAAC,CAAA;AAUb,SAAS,QAAQ,CAAC,OAAe,EAAE,MAAc;IAC/C,MAAM,KAAK,GAAG,MAAM,GAAG,GAAG,GAAG,CAAC,CAAA;IAC9B,OAAO,CAAC,GAAW,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,KAAK,CAAA;AACvD,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,gBAAgB,CAAC,EAC/B,KAAK,EACL,GAAG,EACH,KAAK,EACL,KAAK,EACL,MAAM,GACO;IACb,MAAM,MAAM,GAAG,KAAK,CAAC,kBAAkB,CAAA;IACvC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAM;IACR,CAAC;IACD,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,GAAG,MAAM,CAAA;IAC/D,MAAM,UAAU,GAAG,KAAK,GAAG,GAAG,GAAG,CAAC,CAAA;IAClC,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;IACtC,MAAM,KAAK,GAAG,CAAC,IAAmB,EAAE,EAAE,CACpC,GAAG,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,aAAa,EAAE,CAAC,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC,GAAG,UAAU,CAAA;IAE5E,KAAK,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,KAAK,CAAC,kBAAkB,EAAE,CAAC;QACvD,GAAG,CAAC,SAAS,GAAG,KAAK,CAAA;QACrB,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAC1E,CAAC;IAED,GAAG,CAAC,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAA;IAC5C,GAAG,CAAC,SAAS,EAAE,CAAA;IACf,KAAK,MAAM,MAAM,IAAI,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;QACvC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YACrB,SAAQ;QACV,CAAC;QACD,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,CAAA;QACxB,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,CAAE,CAAC,CAAA;QAC1B,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACrC,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,CAAA;YACxB,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,CAAE,CAAC,CAAA;YAC1B,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;gBACnD,SAAQ;YACV,CAAC;YACD,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA;YAClB,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA;YAClB,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA;QACpB,CAAC;IACH,CAAC;IACD,GAAG,CAAC,MAAM,EAAE,CAAA;AACd,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,EAClC,KAAK,EACL,GAAG,EACH,KAAK,EACL,IAAI,EACJ,KAAK,EACL,MAAM,GAIP;IACC,MAAM,MAAM,GAAG,KAAK,CAAC,kBAAkB,CAAA;IACvC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAM;IACR,CAAC;IACD,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;IAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;IACzB,GAAG,CAAC,WAAW,GAAG,KAAK,CAAA;IACvB,GAAG,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAA;AAC3E,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAkB;IACnD,gBAAgB,CAAC,IAAI,CAAC,CAAA;IACtB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAA;IAC7C,IAAI,IAAI,EAAE,CAAC;QACT,mBAAmB,CAAC;YAClB,GAAG,IAAI;YACP,IAAI;YACJ,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO;SACvC,CAAC,CAAA;IACJ,CAAC;AACH,CAAC;AAOD,MAAM,MAAM,GAAG,IAAI,OAAO,EAAyB,CAAA;AAEnD;;;;GAIG;AACH,SAAS,YAAY,CAAC,EACpB,KAAK,EACL,KAAK,EACL,KAAK,EACL,MAAM,EACN,KAAK,GAON;IACC,OAAO;QACL,KAAK,CAAC,IAAI,CAAC,IAAI;QACf,KAAK,CAAC,IAAI,CAAC,GAAG;QACd,KAAK,CAAC,gBAAgB;QACtB,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC;QACzB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC;QAC5B,KAAK,CAAC,aAAa;QACnB,KAAK;QACL,MAAM;QACN,KAAK;QACL,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO;KAC3B,CAAA;AACH,CAAC;AAED,SAAS,UAAU,CAAC,KAAa,EAAE,MAAc;IAC/C,MAAM,MAAM,GACV,OAAO,eAAe,KAAK,WAAW;QACpC,CAAC,CAAC,IAAI,eAAe,CAAC,KAAK,EAAE,MAAM,CAAC;QACpC,CAAC,CAAC,OAAO,QAAQ,KAAK,WAAW;YAC/B,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;YACpE,CAAC,CAAC,SAAS,CAAA;IACjB,MAAM,GAAG,GAAG,MAAM,EAAE,UAAU,CAAC,IAAI,CAAC,CAAA;IACpC,OAAO,GAAG,IAAI,OAAQ,GAAgC,CAAC,MAAM,KAAK,UAAU;QAC1E,CAAC,CAAC,EAAE,MAAM,EAAE,MAAsB,EAAE,GAAG,EAAE,GAA+B,EAAE;QAC1E,CAAC,CAAC,SAAS,CAAA;AACf,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,iBAAiB,CAAC,EAChC,KAAK,EACL,KAAK,EACL,KAAK,EACL,MAAM,EACN,KAAK,GAON;IACC,MAAM,IAAI,GAAG,YAAY,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAA;IACjE,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;IAC9B,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACzD,OAAO,IAAI,CAAC,MAAM,CAAA;IACpB,CAAC;IACD,MAAM,IAAI,GAAG,UAAU,CACrB,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,EACtC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,CACxC,CAAA;IACD,IAAI,IAAI,EAAE,CAAC;QACT,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;QAC5B,gBAAgB,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;IAClE,CAAC;IACD,MAAM,IAAI,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAA;IAC3C,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;IACvB,OAAO,IAAI,CAAC,MAAM,CAAA;AACpB,CAAC"}
@@ -1,4 +1,4 @@
1
- import { useRef, useState } from 'react';
1
+ import { useState } from 'react';
2
2
  import { ClickMapIndex } from './clickMap.js';
3
3
  /**
4
4
  * Owns hit-testing for one tree block: the spatial index the render pass fills
@@ -7,9 +7,7 @@ import { ClickMapIndex } from './clickMap.js';
7
7
  * it lives in a ref; everything the component draws comes back as plain state.
8
8
  */
9
9
  export function useTreeHover({ model, offsetY, }) {
10
- const clickMapRef = useRef(null);
11
- clickMapRef.current ??= new ClickMapIndex();
12
- const clickMap = clickMapRef.current;
10
+ const [clickMap] = useState(() => new ClickMapIndex());
13
11
  const [hovered, setHovered] = useState();
14
12
  // leaf labels win over the branch/bubble targets they overlap, so a click on a
15
13
  // name opens the node menu rather than the branch menu
@@ -1 +1 @@
1
- {"version":3,"file":"useTreeHover.js","sourceRoot":"","sources":["../../../src/components/tree/useTreeHover.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAExC,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAW7C;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,EAC3B,KAAK,EACL,OAAO,GAIR;IACC,MAAM,WAAW,GAAG,MAAM,CAAgB,IAAI,CAAC,CAAA;IAC/C,WAAW,CAAC,OAAO,KAAK,IAAI,aAAa,EAAE,CAAA;IAC3C,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAA;IACpC,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,EAAmB,CAAA;IAEzD,+EAA+E;IAC/E,uDAAuD;IACvD,SAAS,OAAO,CAAC,KAAuB;QACtC,MAAM,CAAC,GAAG,KAAK,CAAC,WAAW,CAAC,OAAO,CAAA;QACnC,MAAM,CAAC,GAAG,KAAK,CAAC,WAAW,CAAC,OAAO,GAAG,OAAO,CAAA;QAC7C,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC;YAC9B,IAAI,EAAE,CAAC;YACP,IAAI,EAAE,CAAC,GAAG,CAAC;YACX,IAAI,EAAE,CAAC;YACP,IAAI,EAAE,CAAC,GAAG,CAAC;SACZ,CAAC,CAAA;QACF,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,CAAA;IAC3D,CAAC;IAED,SAAS,WAAW,CAAC,KAAuB;QAC1C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAA;QAC5B,UAAU,CACR,KAAK;YACH,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE;YAC9D,CAAC,CAAC,SAAS,CACd,CAAA;QACD,2EAA2E;QAC3E,qDAAqD;QACrD,KAAK,CAAC,kBAAkB,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;QACnC,KAAK,CAAC,WAAW,CACf,SAAS,EACT,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CACvE,CAAA;IACH,CAAC;IAED,SAAS,YAAY;QACnB,UAAU,CAAC,SAAS,CAAC,CAAA;QACrB,KAAK,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAA;QACnC,KAAK,CAAC,WAAW,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;IACzC,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,CAAA;AAClE,CAAC"}
1
+ {"version":3,"file":"useTreeHover.js","sourceRoot":"","sources":["../../../src/components/tree/useTreeHover.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAEhC,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAW7C;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,EAC3B,KAAK,EACL,OAAO,GAIR;IACC,MAAM,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,aAAa,EAAE,CAAC,CAAA;IACtD,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,EAAmB,CAAA;IAEzD,+EAA+E;IAC/E,uDAAuD;IACvD,SAAS,OAAO,CAAC,KAAuB;QACtC,MAAM,CAAC,GAAG,KAAK,CAAC,WAAW,CAAC,OAAO,CAAA;QACnC,MAAM,CAAC,GAAG,KAAK,CAAC,WAAW,CAAC,OAAO,GAAG,OAAO,CAAA;QAC7C,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC;YAC9B,IAAI,EAAE,CAAC;YACP,IAAI,EAAE,CAAC,GAAG,CAAC;YACX,IAAI,EAAE,CAAC;YACP,IAAI,EAAE,CAAC,GAAG,CAAC;SACZ,CAAC,CAAA;QACF,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,CAAA;IAC3D,CAAC;IAED,SAAS,WAAW,CAAC,KAAuB;QAC1C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAA;QAC5B,UAAU,CACR,KAAK;YACH,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE;YAC9D,CAAC,CAAC,SAAS,CACd,CAAA;QACD,2EAA2E;QAC3E,qDAAqD;QACrD,KAAK,CAAC,kBAAkB,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;QACnC,KAAK,CAAC,WAAW,CACf,SAAS,EACT,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CACvE,CAAA;IACH,CAAC;IAED,SAAS,YAAY;QACnB,UAAU,CAAC,SAAS,CAAC,CAAA;QACrB,KAAK,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAA;QACnC,KAAK,CAAC,WAAW,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;IACzC,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,CAAA;AAClE,CAAC"}
@@ -10,12 +10,17 @@ export declare const defaultHideGaps = true;
10
10
  export declare const defaultAllowedGappyness = 100;
11
11
  export declare const defaultSubFeatureRows = false;
12
12
  export declare const subFeatureRowHeight = 4;
13
+ export declare const domainUnderlineHeight = 3;
13
14
  export declare const segmentFeatureTypes: Set<string>;
14
15
  export declare const segmentShades: string[];
15
16
  export declare const defaultDrawMsaLetters = true;
16
17
  export declare const defaultScrollZoom = false;
18
+ export declare const scrollZoomAxes: readonly ['both', 'horizontal', 'vertical'];
19
+ export type ScrollZoomAxis = (typeof scrollZoomAxes)[number];
20
+ export declare const defaultScrollZoomAxis: ScrollZoomAxis;
17
21
  export declare const minLetterRowHeight = 8;
18
22
  export declare const minLetterColWidth = 5;
23
+ export declare const minFeatureLabelHeight = 9;
19
24
  export declare const labelReferenceFontSize = 16;
20
25
  export declare const minColWidth = 0.2;
21
26
  export declare const minRowHeight = 1;
@@ -30,5 +35,16 @@ export declare const defaultTreeWidth = 300;
30
35
  export declare const defaultShowBranchLen = true;
31
36
  export declare const defaultDrawTree = true;
32
37
  export declare const defaultDrawNodeBubbles = true;
38
+ export declare const defaultDrawNodeLabels = false;
39
+ export declare const defaultShowTreeOverview = false;
40
+ export declare const defaultOverviewHeight = 120;
33
41
  export declare const maxNeighborJoiningRows = 500;
42
+ export declare const rowTintAlpha = 0.25;
43
+ export declare const cladeHighlightColor = "#fff3c4";
44
+ export declare const cladeHighlightAlpha = 0.6;
34
45
  export declare const maxInlineSnapshotBytes = 50000;
46
+ export declare const rowPanelHeaderHeight = 56;
47
+ export declare const treeScaleBarHeight = 22;
48
+ export declare const defaultFeaturePanelWidth = 200;
49
+ export declare const msaOverlayZIndex = 1000;
50
+ export declare const legendZIndex: number;