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 +1 @@
1
- {"version":3,"file":"Minimap.js","sourceRoot":"","sources":["../../../src/components/minimap/Minimap.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Minimap.js","sourceRoot":"","sources":["../../../src/components/minimap/Minimap.tsx"],"names":[],"mappings":"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"}
@@ -3,38 +3,46 @@ import ExpandLess from '@mui/icons-material/ExpandLess';
3
3
  import ExpandMore from '@mui/icons-material/ExpandMore';
4
4
  import { IconButton, Paper, Typography } from '@mui/material';
5
5
  import { observer } from 'mobx-react';
6
+ import { legendZIndex } from '../../constants.js';
7
+ import { legendRows } from './legendRows.js';
6
8
  const AnnotationLegend = observer(function ({ model, }) {
7
- const { actuallyShowDomains, visibleDomainTypes: visible, fillPalette, showDomainLegend: expanded, } = model;
9
+ const { legends, showDomainLegend: expanded } = model;
10
+ const rows = legendRows(legends);
8
11
  const ExpandIcon = expanded ? ExpandLess : ExpandMore;
9
- return actuallyShowDomains && visible.length > 0 ? (React.createElement(Paper, { elevation: 3, style: {
12
+ return rows.length > 0 ? (React.createElement(Paper, { elevation: 3, style: {
10
13
  position: 'absolute',
11
14
  top: 4,
12
15
  right: 4,
13
- zIndex: 100,
14
- maxWidth: 260,
16
+ zIndex: legendZIndex,
17
+ maxWidth: 220,
15
18
  maxHeight: '60%',
16
19
  display: 'flex',
17
20
  flexDirection: 'column',
18
21
  opacity: 0.95,
19
22
  } },
20
- React.createElement("div", { style: {
23
+ React.createElement(IconButton, { size: "small", title: expanded ? 'Collapse key' : 'Expand key', style: expanded
24
+ ? { position: 'absolute', top: 0, right: 0, padding: 1 }
25
+ : { padding: 1 }, onClick: () => {
26
+ model.setShowDomainLegend(!expanded);
27
+ } },
28
+ React.createElement(ExpandIcon, { style: { fontSize: 14 } })),
29
+ expanded ? (React.createElement("div", { style: { overflow: 'auto', padding: '2px 6px 4px' } }, rows.map((row, i) => (React.createElement("div", { key: row.key, style: {
21
30
  display: 'flex',
22
31
  alignItems: 'center',
23
- justifyContent: 'flex-end',
24
- padding: '2px 4px 2px 8px',
25
- } },
26
- React.createElement(IconButton, { size: "small", title: expanded ? 'Collapse key' : 'Expand key', onClick: () => {
27
- model.setShowDomainLegend(!expanded);
28
- } },
29
- React.createElement(ExpandIcon, { fontSize: "small" }))),
30
- expanded ? (React.createElement("div", { style: { overflow: 'auto', padding: '0 8px 6px' } }, visible.map(({ accession, name }) => (React.createElement("div", { key: accession, style: { display: 'flex', alignItems: 'center', gap: 6 }, title: accession },
31
- React.createElement("div", { style: {
32
- width: 12,
33
- height: 12,
32
+ gap: 4,
33
+ marginRight: i === 0 ? 18 : 0,
34
+ }, title: row.hint },
35
+ row.color ? (React.createElement("div", { style: {
36
+ width: 9,
37
+ height: 9,
34
38
  flexShrink: 0,
35
- background: fillPalette[accession],
36
- } }),
37
- React.createElement(Typography, { variant: "caption", noWrap: true }, name)))))) : null)) : null;
39
+ background: row.color,
40
+ } })) : null,
41
+ React.createElement(Typography, { variant: "caption", noWrap: true, style: {
42
+ fontSize: 10,
43
+ lineHeight: 1.4,
44
+ fontWeight: row.color ? undefined : 'bold',
45
+ } }, row.label)))))) : null)) : null;
38
46
  });
39
47
  export default AnnotationLegend;
40
48
  //# sourceMappingURL=AnnotationLegend.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AnnotationLegend.js","sourceRoot":"","sources":["../../../src/components/msa/AnnotationLegend.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,UAAU,MAAM,gCAAgC,CAAA;AACvD,OAAO,UAAU,MAAM,gCAAgC,CAAA;AACvD,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC7D,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAIrC,MAAM,gBAAgB,GAAG,QAAQ,CAAC,UAAU,EAC1C,KAAK,GAGN;IACC,MAAM,EACJ,mBAAmB,EACnB,kBAAkB,EAAE,OAAO,EAC3B,WAAW,EACX,gBAAgB,EAAE,QAAQ,GAC3B,GAAG,KAAK,CAAA;IACT,MAAM,UAAU,GAAG,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAA;IAErD,OAAO,mBAAmB,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CACjD,oBAAC,KAAK,IACJ,SAAS,EAAE,CAAC,EACZ,KAAK,EAAE;YACL,QAAQ,EAAE,UAAU;YACpB,GAAG,EAAE,CAAC;YACN,KAAK,EAAE,CAAC;YACR,MAAM,EAAE,GAAG;YACX,QAAQ,EAAE,GAAG;YACb,SAAS,EAAE,KAAK;YAChB,OAAO,EAAE,MAAM;YACf,aAAa,EAAE,QAAQ;YACvB,OAAO,EAAE,IAAI;SACd;QAED,6BACE,KAAK,EAAE;gBACL,OAAO,EAAE,MAAM;gBACf,UAAU,EAAE,QAAQ;gBACpB,cAAc,EAAE,UAAU;gBAC1B,OAAO,EAAE,iBAAiB;aAC3B;YAED,oBAAC,UAAU,IACT,IAAI,EAAC,OAAO,EACZ,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,YAAY,EAC/C,OAAO,EAAE,GAAG,EAAE;oBACZ,KAAK,CAAC,mBAAmB,CAAC,CAAC,QAAQ,CAAC,CAAA;gBACtC,CAAC;gBAED,oBAAC,UAAU,IAAC,QAAQ,EAAC,OAAO,GAAG,CACpB,CACT;QACL,QAAQ,CAAC,CAAC,CAAC,CACV,6BAAK,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,IACnD,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CACpC,6BACE,GAAG,EAAE,SAAS,EACd,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,EACxD,KAAK,EAAE,SAAS;YAEhB,6BACE,KAAK,EAAE;oBACL,KAAK,EAAE,EAAE;oBACT,MAAM,EAAE,EAAE;oBACV,UAAU,EAAE,CAAC;oBACb,UAAU,EAAE,WAAW,CAAC,SAAS,CAAC;iBACnC,GACD;YACF,oBAAC,UAAU,IAAC,OAAO,EAAC,SAAS,EAAC,MAAM,UACjC,IAAI,CACM,CACT,CACP,CAAC,CACE,CACP,CAAC,CAAC,CAAC,IAAI,CACF,CACT,CAAC,CAAC,CAAC,IAAI,CAAA;AACV,CAAC,CAAC,CAAA;AAEF,eAAe,gBAAgB,CAAA"}
1
+ {"version":3,"file":"AnnotationLegend.js","sourceRoot":"","sources":["../../../src/components/msa/AnnotationLegend.tsx"],"names":[],"mappings":"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"}
@@ -13,7 +13,7 @@ const MSACanvas = observer(function ({ model }) {
13
13
  model.doScrollY(d);
14
14
  }, [model]);
15
15
  const onZoom = useCallback((scaleFactor, offsetX, offsetY) => {
16
- model.zoomToPos(scaleFactor, offsetX, offsetY);
16
+ model.zoomToPos(scaleFactor, offsetX, offsetY, model.wheelZoomAxis);
17
17
  }, [model]);
18
18
  const { onMouseDown, onMouseUp } = useWheelScroll({
19
19
  ref,
@@ -22,9 +22,7 @@ const MSACanvas = observer(function ({ model }) {
22
22
  onZoom,
23
23
  scrollZoom,
24
24
  });
25
- return (React.createElement("div", { ref: ref, "data-testid": "msa_canvas", onMouseDown: onMouseDown, onMouseUp: onMouseUp, onMouseLeave: event => {
26
- event.preventDefault();
27
- }, style: {
25
+ return (React.createElement("div", { ref: ref, "data-testid": "msa_canvas", onMouseDown: onMouseDown, onMouseUp: onMouseUp, style: {
28
26
  position: 'relative',
29
27
  height,
30
28
  width: msaCanvasWidth,
@@ -1 +1 @@
1
- {"version":3,"file":"MSACanvas.js","sourceRoot":"","sources":["../../../src/components/msa/MSACanvas.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,OAAO,MAAM,cAAe,CAAA;AACnC,OAAO,cAAc,MAAM,qBAAsB,CAAA;AAIjD,MAAM,SAAS,GAAG,QAAQ,CAAC,UAAU,EAAE,KAAK,EAA2B;IACrE,MAAM,EACJ,GAAG,EACH,aAAa,EACb,MAAM,EACN,cAAc,EACd,QAAQ,EACR,UAAU,EACV,OAAO,EACP,OAAO,GACR,GAAG,KAAK,CAAA;IACT,MAAM,GAAG,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAA;IACxC,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,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,MAAM,GAAG,WAAW,CACxB,CAAC,WAAmB,EAAE,OAAe,EAAE,OAAe,EAAE,EAAE;QACxD,KAAK,CAAC,SAAS,CAAC,WAAW,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;IAChD,CAAC,EACD,CAAC,KAAK,CAAC,CACR,CAAA;IACD,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,GAAG,cAAc,CAAC;QAChD,GAAG;QACH,SAAS;QACT,SAAS;QACT,MAAM;QACN,UAAU;KACX,CAAC,CAAA;IAEF,OAAO,CACL,6BACE,GAAG,EAAE,GAAG,iBAKI,YAAY,EACxB,WAAW,EAAE,WAAW,EACxB,SAAS,EAAE,SAAS,EACpB,YAAY,EAAE,KAAK,CAAC,EAAE;YACpB,KAAK,CAAC,cAAc,EAAE,CAAA;QACxB,CAAC,EACD,KAAK,EAAE;YACL,QAAQ,EAAE,UAAU;YACpB,MAAM;YACN,KAAK,EAAE,cAAc;YACrB,QAAQ,EAAE,QAAQ;SACnB,IAEA,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAGrC,6BACE,KAAK,EAAE;YACL,QAAQ,EAAE,UAAU;YACpB,GAAG,EAAE,CAAC;YACN,IAAI,EAAE,CAAC;YACP,SAAS,EAAE,aAAa,OAAO,OAAO,OAAO,KAAK;YAClD,UAAU,EAAE,WAAW;SACxB,IAEA,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAC1B,oBAAC,cAAc,IACb,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAClB,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,EAAE,EACX,OAAO,EAAE,EAAE,GACX,CACH,CAAC,CACE,CACP,CAAC,CAAC,CAAC,CACF,oBAAC,OAAO,OAAG,CACZ,CACG,CACP,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,eAAe,SAAS,CAAA"}
1
+ {"version":3,"file":"MSACanvas.js","sourceRoot":"","sources":["../../../src/components/msa/MSACanvas.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,OAAO,MAAM,cAAe,CAAA;AACnC,OAAO,cAAc,MAAM,qBAAsB,CAAA;AAIjD,MAAM,SAAS,GAAG,QAAQ,CAAC,UAAU,EAAE,KAAK,EAA2B;IACrE,MAAM,EACJ,GAAG,EACH,aAAa,EACb,MAAM,EACN,cAAc,EACd,QAAQ,EACR,UAAU,EACV,OAAO,EACP,OAAO,GACR,GAAG,KAAK,CAAA;IACT,MAAM,GAAG,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAA;IACxC,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,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,MAAM,GAAG,WAAW,CACxB,CAAC,WAAmB,EAAE,OAAe,EAAE,OAAe,EAAE,EAAE;QACxD,KAAK,CAAC,SAAS,CAAC,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,aAAa,CAAC,CAAA;IACrE,CAAC,EACD,CAAC,KAAK,CAAC,CACR,CAAA;IACD,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,GAAG,cAAc,CAAC;QAChD,GAAG;QACH,SAAS;QACT,SAAS;QACT,MAAM;QACN,UAAU;KACX,CAAC,CAAA;IAEF,OAAO,CACL,6BACE,GAAG,EAAE,GAAG,iBAGI,YAAY,EACxB,WAAW,EAAE,WAAW,EACxB,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE;YACL,QAAQ,EAAE,UAAU;YACpB,MAAM;YACN,KAAK,EAAE,cAAc;YACrB,QAAQ,EAAE,QAAQ;SACnB,IAEA,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAGrC,6BACE,KAAK,EAAE;YACL,QAAQ,EAAE,UAAU;YACpB,GAAG,EAAE,CAAC;YACN,IAAI,EAAE,CAAC;YACP,SAAS,EAAE,aAAa,OAAO,OAAO,OAAO,KAAK;YAClD,UAAU,EAAE,WAAW;SACxB,IAEA,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAC1B,oBAAC,cAAc,IACb,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAClB,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,EAAE,EACX,OAAO,EAAE,EAAE,GACX,CACH,CAAC,CACE,CACP,CAAC,CAAC,CAAC,CACF,oBAAC,OAAO,OAAG,CACZ,CACG,CACP,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,eAAe,SAAS,CAAA"}
@@ -3,7 +3,6 @@ import BaseTooltip from '@jbrowse/core/ui/BaseTooltip';
3
3
  import { useTheme } from '@mui/material';
4
4
  import { observer } from 'mobx-react';
5
5
  import { useCanvasAutorun } from '../../useCanvasAutorun.js';
6
- import ColumnStats from './ColumnStats.js';
7
6
  import { drawMsaRaster, rasterSupported } from './msaRaster.js';
8
7
  import { renderBoxFeatureCanvasBlock } from './renderBoxFeatureCanvasBlock.js';
9
8
  import { renderMSABlock } from './renderMSABlock.js';
@@ -23,6 +22,7 @@ const MSACanvasBlock = observer(function ({ model, offsetX, offsetY, }) {
23
22
  ctx.clearRect(0, 0, canvasSize, canvasSize);
24
23
  renderBoxFeatureCanvasBlock({
25
24
  ctx,
25
+ theme,
26
26
  offsetX,
27
27
  offsetY,
28
28
  model,
@@ -47,7 +47,7 @@ const MSACanvasBlock = observer(function ({ model, offsetX, offsetY, }) {
47
47
  height: canvasSize,
48
48
  deps: [model, offsetX, offsetY, theme],
49
49
  });
50
- const { hoveredInsertion, mouseOverDomains, showColumnStats } = model;
50
+ const { hoveredInsertion, mouseOverDomains } = model;
51
51
  return (React.createElement(React.Fragment, null,
52
52
  React.createElement("canvas", { ref: ref, onMouseMove: event => {
53
53
  if (ref.current) {
@@ -74,19 +74,17 @@ const MSACanvasBlock = observer(function ({ model, offsetX, offsetY, }) {
74
74
  ' ',
75
75
  hoveredInsertion.letters.length > 20
76
76
  ? `${hoveredInsertion.letters.slice(0, 20)}...`
77
- : hoveredInsertion.letters)) : (React.createElement(React.Fragment, null,
78
- mouseOverDomains.map(d => (React.createElement("div", { key: `${d.accession}-${d.start}-${d.end}` },
79
- React.createElement("b", null, d.name),
80
- " (",
81
- d.accession,
82
- ") ",
83
- d.start,
84
- "-",
85
- d.end,
86
- d.description ? (React.createElement(React.Fragment, null,
87
- React.createElement("br", null),
88
- d.description)) : null))),
89
- showColumnStats ? React.createElement(ColumnStats, { model: model }) : null)))) : null));
77
+ : hoveredInsertion.letters)) : (mouseOverDomains.map(d => (React.createElement("div", { key: `${d.accession}-${d.start}-${d.end}` },
78
+ React.createElement("b", null, d.name),
79
+ " (",
80
+ d.accession,
81
+ ") ",
82
+ d.start,
83
+ "-",
84
+ d.end,
85
+ d.description ? (React.createElement(React.Fragment, null,
86
+ React.createElement("br", null),
87
+ d.description)) : null)))))) : null));
90
88
  });
91
89
  export default MSACanvasBlock;
92
90
  //# sourceMappingURL=MSACanvasBlock.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MSACanvasBlock.js","sourceRoot":"","sources":["../../../src/components/msa/MSACanvasBlock.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,WAAW,MAAM,8BAA8B,CAAA;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAErC,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AAC5D,OAAO,WAAW,MAAM,kBAAmB,CAAA;AAC3C,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAC/D,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAA;AAC9E,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAIxD,MAAM,cAAc,GAAG,QAAQ,CAAC,UAAU,EACxC,KAAK,EACL,OAAO,EACP,OAAO,GAKR;IACC,MAAM,EAAE,SAAS,EAAE,kBAAkB,EAAE,GAAG,KAAK,CAAA;IAC/C,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAA;IACxB,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,gBAAgB,CAC3E;QACE,KAAK;QACL,OAAO;QACP,OAAO;KACR,CACF,CAAA;IAED,MAAM,UAAU,GAAG,SAAS,GAAG,kBAAkB,CAAA;IACjD,MAAM,GAAG,GAAG,gBAAgB,CAAC;QAC3B,IAAI,EAAE,GAAG,CAAC,EAAE;YACV,GAAG,CAAC,cAAc,EAAE,CAAA;YACpB,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,UAAU,CAAC,CAAA;YAC3C,2BAA2B,CAAC;gBAC1B,GAAG;gBACH,OAAO;gBACP,OAAO;gBACP,KAAK;aACN,CAAC,CAAA;YACF,yEAAyE;YACzE,yEAAyE;YACzE,yBAAyB;YACzB,MAAM,WAAW,GACf,CAAC,KAAK,CAAC,mBAAmB,IAAI,KAAK,CAAC,OAAO,IAAI,eAAe,EAAE,CAAA;YAClE,IAAI,WAAW,EAAE,CAAC;gBAChB,aAAa,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAA;YACxD,CAAC;YACD,cAAc,CAAC;gBACb,GAAG;gBACH,KAAK;gBACL,OAAO;gBACP,OAAO;gBACP,KAAK;gBACL,WAAW;aACZ,CAAC,CAAA;QACJ,CAAC;QACD,KAAK,EAAE,UAAU;QACjB,MAAM,EAAE,UAAU;QAClB,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;KACvC,CAAC,CAAA;IAEF,MAAM,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,eAAe,EAAE,GAAG,KAAK,CAAA;IAErE,OAAO,CACL;QACE,gCACE,GAAG,EAAE,GAAG,EACR,WAAW,EAAE,KAAK,CAAC,EAAE;gBACnB,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;oBAChB,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,CAAA;gBACjC,CAAC;YACH,CAAC,EACD,OAAO,EAAE,KAAK,CAAC,EAAE;gBACf,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;oBAChB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,CAAA;gBAC7B,CAAC;YACH,CAAC,EACD,YAAY,EAAE,GAAG,EAAE;gBACjB,YAAY,EAAE,CAAA;YAChB,CAAC,EACD,KAAK,EAAE,UAAU,EACjB,MAAM,EAAE,UAAU,EAClB,KAAK,EAAE;gBACL,QAAQ,EAAE,UAAU;gBACpB,GAAG,EAAE,OAAO;gBACZ,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE,SAAS;gBAChB,MAAM,EAAE,SAAS;aAClB,GACD;QACD,YAAY,CAAC,CAAC,CAAC,CACd,oBAAC,WAAW,IACV,WAAW,EAAE,EAAE,CAAC,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,YAAY,CAAC,CAAC,GAAG,EAAE,EAAE,IAEzD,gBAAgB,CAAC,CAAC,CAAC,CAClB;;YACc,gBAAgB,CAAC,OAAO,CAAC,MAAM;YAC1C,KAAK,CAAC,YAAY,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI;;YAAI,GAAG;YACnD,gBAAgB,CAAC,OAAO,CAAC,MAAM,GAAG,EAAE;gBACnC,CAAC,CAAC,GAAG,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK;gBAC/C,CAAC,CAAC,gBAAgB,CAAC,OAAO,CAC3B,CACJ,CAAC,CAAC,CAAC,CACF;YACG,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CACzB,6BAAK,GAAG,EAAE,GAAG,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,EAAE;gBAC5C,+BAAI,CAAC,CAAC,IAAI,CAAK;;gBAAG,CAAC,CAAC,SAAS;;gBAAI,CAAC,CAAC,KAAK;;gBAAG,CAAC,CAAC,GAAG;gBAC/C,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CACf;oBACE,+BAAM;oBACL,CAAC,CAAC,WAAW,CACb,CACJ,CAAC,CAAC,CAAC,IAAI,CACJ,CACP,CAAC;YACD,eAAe,CAAC,CAAC,CAAC,oBAAC,WAAW,IAAC,KAAK,EAAE,KAAK,GAAI,CAAC,CAAC,CAAC,IAAI,CACtD,CACJ,CACW,CACf,CAAC,CAAC,CAAC,IAAI,CACP,CACJ,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,eAAe,cAAc,CAAA"}
1
+ {"version":3,"file":"MSACanvasBlock.js","sourceRoot":"","sources":["../../../src/components/msa/MSACanvasBlock.tsx"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@ import React from 'react';
2
2
  import { isAlive } from '@jbrowse/mobx-state-tree';
3
3
  import { useTheme } from '@mui/material';
4
4
  import { observer } from 'mobx-react';
5
+ import { msaOverlayZIndex } from '../../constants.js';
5
6
  import { useCanvasAutorun } from '../../useCanvasAutorun.js';
6
7
  import { renderMouseover } from './renderMSAMouseover.js';
7
8
  const MSAMouseoverCanvas = observer(function ({ model, }) {
@@ -25,7 +26,7 @@ const MSAMouseoverCanvas = observer(function ({ model, }) {
25
26
  left: 0,
26
27
  width,
27
28
  height,
28
- zIndex: 1000,
29
+ zIndex: msaOverlayZIndex,
29
30
  pointerEvents: 'none',
30
31
  } }));
31
32
  });
@@ -1 +1 @@
1
- {"version":3,"file":"MSAMouseoverCanvas.js","sourceRoot":"","sources":["../../../src/components/msa/MSAMouseoverCanvas.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAA;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAErC,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAIzD,MAAM,kBAAkB,GAAG,QAAQ,CAAC,UAAU,EAC5C,KAAK,GAGN;IACC,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,kBAAkB,EAAE,GAAG,KAAK,CAAA;IACnE,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAA;IACxB,MAAM,WAAW,GAAG,KAAK,GAAG,kBAAkB,CAAA;IAC9C,MAAM,YAAY,GAAG,MAAM,GAAG,kBAAkB,CAAA;IAChD,MAAM,GAAG,GAAG,gBAAgB,CAAC;QAC3B,IAAI,EAAE,GAAG,CAAC,EAAE;YACV,IAAI,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBACnB,eAAe,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;YACxC,CAAC;QACH,CAAC;QACD,KAAK,EAAE,WAAW;QAClB,MAAM,EAAE,YAAY;QACpB,IAAI,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC;KACrB,CAAC,CAAA;IAEF,OAAO,CACL,gCACE,GAAG,EAAE,GAAG,EACR,EAAE,EAAC,WAAW,EACd,KAAK,EAAE,WAAW,EAClB,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE;YACL,QAAQ,EAAE,UAAU;YACpB,GAAG,EAAE,CAAC;YACN,IAAI,EAAE,CAAC;YACP,KAAK;YACL,MAAM;YACN,MAAM,EAAE,IAAI;YACZ,aAAa,EAAE,MAAM;SACtB,GACD,CACH,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,eAAe,kBAAkB,CAAA"}
1
+ {"version":3,"file":"MSAMouseoverCanvas.js","sourceRoot":"","sources":["../../../src/components/msa/MSAMouseoverCanvas.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAA;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAErC,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAIzD,MAAM,kBAAkB,GAAG,QAAQ,CAAC,UAAU,EAC5C,KAAK,GAGN;IACC,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,kBAAkB,EAAE,GAAG,KAAK,CAAA;IACnE,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAA;IACxB,MAAM,WAAW,GAAG,KAAK,GAAG,kBAAkB,CAAA;IAC9C,MAAM,YAAY,GAAG,MAAM,GAAG,kBAAkB,CAAA;IAChD,MAAM,GAAG,GAAG,gBAAgB,CAAC;QAC3B,IAAI,EAAE,GAAG,CAAC,EAAE;YACV,IAAI,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBACnB,eAAe,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;YACxC,CAAC;QACH,CAAC;QACD,KAAK,EAAE,WAAW;QAClB,MAAM,EAAE,YAAY;QACpB,IAAI,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC;KACrB,CAAC,CAAA;IAEF,OAAO,CACL,gCACE,GAAG,EAAE,GAAG,EACR,EAAE,EAAC,WAAW,EACd,KAAK,EAAE,WAAW,EAClB,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE;YACL,QAAQ,EAAE,UAAU;YACpB,GAAG,EAAE,CAAC;YACN,IAAI,EAAE,CAAC;YACP,KAAK;YACL,MAAM;YACN,MAAM,EAAE,gBAAgB;YACxB,aAAa,EAAE,MAAM;SACtB,GACD,CACH,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,eAAe,kBAAkB,CAAA"}
@@ -1,17 +1,13 @@
1
1
  import type { DomainBand } from '../../types.ts';
2
2
  /**
3
- * Left-to-right cursor over one row's domain bands, answering "which band is
4
- * drawn on top at this column" — the fill a letter there has to contrast
5
- * against.
3
+ * Left-to-right cursor over one row's domain bands that returns the band drawn
4
+ * on top at a column, for a letter's contrast color.
6
5
  *
7
- * Not simply the first band covering the column. The overlay paints in
8
- * `domainBands` order, largest first, so where signatures nest — a family
9
- * enclosing a domain, which InterProScan emits routinely — the box a reader
10
- * actually sees is the last one painted over that column. `stackIndex` is that
11
- * paint order.
6
+ * The overlay paints in `domainBands` order, largest first, so where signatures
7
+ * nest (InterProScan often emits a family enclosing a domain) the visible band
8
+ * is the last one painted. `stackIndex` is that paint order.
12
9
  *
13
- * `bands` must be sorted by start column (`domainBandsByStart`), and columns
14
- * must be visited in increasing order, which is what the block renderer does.
15
- * Both keep this to one pass over the bands per row rather than a scan per cell.
10
+ * `bands` must be sorted by start column (`domainBandsByStart`) and columns
11
+ * visited in increasing order, which keeps this to one pass per row.
16
12
  */
17
13
  export declare function domainBandCursor(bands: DomainBand[] | undefined): (col: number) => DomainBand | undefined;
@@ -1,17 +1,13 @@
1
1
  /**
2
- * Left-to-right cursor over one row's domain bands, answering "which band is
3
- * drawn on top at this column" — the fill a letter there has to contrast
4
- * against.
2
+ * Left-to-right cursor over one row's domain bands that returns the band drawn
3
+ * on top at a column, for a letter's contrast color.
5
4
  *
6
- * Not simply the first band covering the column. The overlay paints in
7
- * `domainBands` order, largest first, so where signatures nest — a family
8
- * enclosing a domain, which InterProScan emits routinely — the box a reader
9
- * actually sees is the last one painted over that column. `stackIndex` is that
10
- * paint order.
5
+ * The overlay paints in `domainBands` order, largest first, so where signatures
6
+ * nest (InterProScan often emits a family enclosing a domain) the visible band
7
+ * is the last one painted. `stackIndex` is that paint order.
11
8
  *
12
- * `bands` must be sorted by start column (`domainBandsByStart`), and columns
13
- * must be visited in increasing order, which is what the block renderer does.
14
- * Both keep this to one pass over the bands per row rather than a scan per cell.
9
+ * `bands` must be sorted by start column (`domainBandsByStart`) and columns
10
+ * visited in increasing order, which keeps this to one pass per row.
15
11
  */
16
12
  export function domainBandCursor(bands) {
17
13
  let next = 0;
@@ -1 +1 @@
1
- {"version":3,"file":"domainBandCursor.js","sourceRoot":"","sources":["../../../src/components/msa/domainBandCursor.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAA+B;IAC9D,IAAI,IAAI,GAAG,CAAC,CAAA;IACZ,IAAI,MAAM,GAAiB,EAAE,CAAA;IAE7B,OAAO,CAAC,GAAW,EAAE,EAAE;QACrB,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,SAAS,CAAA;QAClB,CAAC;QACD,OAAO,IAAI,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,CAAE,CAAC,QAAQ,IAAI,GAAG,EAAE,CAAC;YAC3D,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAE,CAAC,CAAA;YACzB,IAAI,EAAE,CAAA;QACR,CAAC;QACD,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,IAAI,GAAG,CAAC,EAAE,CAAC;YAC5C,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAA;QACnD,CAAC;QACD,IAAI,GAA2B,CAAA;QAC/B,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;YAC1B,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC,UAAU,EAAE,CAAC;gBAC7C,GAAG,GAAG,IAAI,CAAA;YACZ,CAAC;QACH,CAAC;QACD,OAAO,GAAG,CAAA;IACZ,CAAC,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"domainBandCursor.js","sourceRoot":"","sources":["../../../src/components/msa/domainBandCursor.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;GAUG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAA+B;IAC9D,IAAI,IAAI,GAAG,CAAC,CAAA;IACZ,IAAI,MAAM,GAAiB,EAAE,CAAA;IAE7B,OAAO,CAAC,GAAW,EAAE,EAAE;QACrB,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,SAAS,CAAA;QAClB,CAAC;QACD,OAAO,IAAI,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,CAAE,CAAC,QAAQ,IAAI,GAAG,EAAE,CAAC;YAC3D,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAE,CAAC,CAAA;YACzB,IAAI,EAAE,CAAA;QACR,CAAC;QACD,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,IAAI,GAAG,CAAC,EAAE,CAAC;YAC5C,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAA;QACnD,CAAC;QACD,IAAI,GAA2B,CAAA;QAC/B,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;YAC1B,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC,UAAU,EAAE,CAAC;gBAC7C,GAAG,GAAG,IAAI,CAAA;YACZ,CAAC;QACH,CAAC;QACD,OAAO,GAAG,CAAA;IACZ,CAAC,CAAA;AACH,CAAC"}
@@ -0,0 +1,59 @@
1
+ import type { HierarchyNode } from '../../hierarchy.ts';
2
+ import type { Annotation, NodeWithIdsAndLength } from '../../types.ts';
3
+ import type { RenderCtx } from '../renderCtx.ts';
4
+ /** one drawn span: a feature, the lane it sits in, and its row's depth */
5
+ export interface SpanBand {
6
+ annotation: Annotation;
7
+ lane: number;
8
+ laneCount: number;
9
+ }
10
+ /** one row's spans, at the row baseline `y` the tree layout gives it */
11
+ export interface SpanRow<T extends SpanBand> {
12
+ y: number;
13
+ bands: T[];
14
+ }
15
+ /**
16
+ * Where a band lands inside its row. The alignment overlay fills the row, bars
17
+ * it along the bottom, or stacks thin sub-rows; a `features` row panel divides
18
+ * the row between its lanes.
19
+ */
20
+ export interface SpanLayout {
21
+ /** the band height in a row needing `laneCount` lanes */
22
+ height: (laneCount: number) => number;
23
+ /** the band's top edge, from its row baseline, its lane and its height */
24
+ top: (y: number, lane: number, height: number) => number;
25
+ /** how far back from the feature's end the head starts */
26
+ headLength: (height: number) => number;
27
+ /**
28
+ * how far the head rises above the band. A bar too thin to taper reads its
29
+ * direction off a head taller than itself, and the bar sits on the row's
30
+ * bottom edge, so the room is above.
31
+ */
32
+ headRise?: (height: number) => number;
33
+ }
34
+ /** the rows of `bandsByRow` that `leaves` covers, in display order */
35
+ export declare function spanRows<T extends SpanBand>(leaves: HierarchyNode<NodeWithIdsAndLength>[], bandsByRow: Map<string, T[]>): SpanRow<T>[];
36
+ /**
37
+ * The span mark, in whatever x space the caller maps its bands into: alignment
38
+ * columns for the domain overlay, panel pixels for a `features` row panel. A
39
+ * feature with a strand draws as an arrow, one without as a box, and a label
40
+ * draws inside the span wherever the text fits.
41
+ *
42
+ * `xOf` returns the span's `[xStart, xEnd]` in the context's coordinates, and
43
+ * the context is translated so that `y - rowHeight` is the row's top edge.
44
+ */
45
+ export declare function drawFeatureSpans<T extends SpanBand>({ ctx, rows, layout, xOf, colors, labelOf, labelDrawn, contrastText, xMin, xMax, }: {
46
+ ctx: RenderCtx;
47
+ rows: SpanRow<T>[];
48
+ layout: SpanLayout;
49
+ xOf: (band: T) => [number, number];
50
+ colors: Map<Annotation, {
51
+ fill: string;
52
+ stroke: string;
53
+ }>;
54
+ labelOf?: (band: T) => string | undefined;
55
+ labelDrawn?: (band: T) => void;
56
+ contrastText: (color: string) => string;
57
+ xMin: number;
58
+ xMax: number;
59
+ }): void;
@@ -0,0 +1,113 @@
1
+ import { minFeatureLabelHeight } from '../../constants.js';
2
+ /** the rows of `bandsByRow` that `leaves` covers, in display order */
3
+ export function spanRows(leaves, bandsByRow) {
4
+ const rows = [];
5
+ for (const leaf of leaves) {
6
+ const bands = bandsByRow.get(leaf.data.name);
7
+ if (bands && bands.length > 0) {
8
+ rows.push({ y: leaf.x, bands });
9
+ }
10
+ }
11
+ return rows;
12
+ }
13
+ /**
14
+ * The span mark, in whatever x space the caller maps its bands into: alignment
15
+ * columns for the domain overlay, panel pixels for a `features` row panel. A
16
+ * feature with a strand draws as an arrow, one without as a box, and a label
17
+ * draws inside the span wherever the text fits.
18
+ *
19
+ * `xOf` returns the span's `[xStart, xEnd]` in the context's coordinates, and
20
+ * the context is translated so that `y - rowHeight` is the row's top edge.
21
+ */
22
+ export function drawFeatureSpans({ ctx, rows, layout, xOf, colors, labelOf, labelDrawn, contrastText, xMin, xMax, }) {
23
+ // one row's spans are drawn before any of its labels. Bands are ordered
24
+ // longest-first so a nested one lands on top, and drawing each label with its
25
+ // own span put the child's box over the parent's text: `S` covered `RBD`, and
26
+ // `RBD` read as `RB`. Reused across rows rather than allocated per row.
27
+ const placed = [];
28
+ for (const { y, bands } of rows) {
29
+ const h = layout.height(bands[0].laneCount);
30
+ const headLen = layout.headLength(h);
31
+ const rise = layout.headRise?.(h) ?? 0;
32
+ const labelled = labelOf !== undefined && h >= minFeatureLabelHeight;
33
+ placed.length = 0;
34
+ for (const band of bands) {
35
+ const [xStart, xEnd] = xOf(band);
36
+ const w = xEnd - xStart;
37
+ if (xEnd < xMin || xStart > xMax) {
38
+ continue;
39
+ }
40
+ const t = layout.top(y, band.lane, h);
41
+ const { fill, stroke } = colors.get(band.annotation);
42
+ ctx.fillStyle = fill;
43
+ ctx.strokeStyle = stroke;
44
+ const { strand } = band.annotation;
45
+ const head = strand === undefined ? 0 : Math.min(headLen, w);
46
+ if (strand === undefined) {
47
+ ctx.fillRect(xStart, t, w, h);
48
+ ctx.strokeRect(xStart, t, w, h);
49
+ }
50
+ else {
51
+ drawGeneArrow({ ctx, x: xStart, t, w, h, head, rise, strand });
52
+ }
53
+ if (labelled) {
54
+ placed.push({ band, xStart, w, t, head, fill });
55
+ }
56
+ }
57
+ if (placed.length > 0) {
58
+ ctx.font = `${Math.min(h - 2, 11)}px sans-serif`;
59
+ ctx.textAlign = 'center';
60
+ ctx.textBaseline = 'middle';
61
+ for (const { band, xStart, w, t, head, fill } of placed) {
62
+ // asking for the label here rather than in the pass above keeps the
63
+ // once-per-block segment numbering in drawing order
64
+ const label = labelOf(band);
65
+ // the head narrows to a point, so only about half of it holds text
66
+ if (label !== undefined &&
67
+ ctx.measureText(label).width + 2 <= w - head / 2) {
68
+ labelDrawn?.(band);
69
+ ctx.fillStyle = contrastText(fill);
70
+ ctx.fillText(label, xStart + w / 2, t + h / 2);
71
+ }
72
+ }
73
+ }
74
+ }
75
+ }
76
+ /**
77
+ * A gene arrow, drawn the way gggenes and gggenomes draw one: the head is the
78
+ * last `head` pixels *of* the feature, tapering to a point at its end, and a
79
+ * feature shorter than the head is all head. The glyph therefore covers its
80
+ * start..end span and nothing else, so adjacent genes butt together instead of
81
+ * biting triangles out of each other, a neighbour never draws over a label, and
82
+ * a gene 20 columns wide reads as 20 columns wide.
83
+ *
84
+ * `rise` lifts the head above the band, for a bar too thin to taper.
85
+ */
86
+ function drawGeneArrow({ ctx, x, t, w, h, head, rise, strand, }) {
87
+ const tip = strand > 0 ? x + w : x;
88
+ const tail = strand > 0 ? x : x + w;
89
+ const flange = strand > 0 ? tip - head : tip + head;
90
+ const bottom = t + h;
91
+ const crown = t - rise;
92
+ const point = (crown + bottom) / 2;
93
+ ctx.beginPath();
94
+ if (head >= w) {
95
+ ctx.moveTo(tail, crown);
96
+ ctx.lineTo(tip, point);
97
+ ctx.lineTo(tail, bottom);
98
+ }
99
+ else {
100
+ ctx.moveTo(tail, t);
101
+ ctx.lineTo(flange, t);
102
+ if (rise > 0) {
103
+ ctx.lineTo(flange, crown);
104
+ }
105
+ ctx.lineTo(tip, point);
106
+ ctx.lineTo(flange, bottom);
107
+ ctx.lineTo(tail, bottom);
108
+ }
109
+ ctx.closePath();
110
+ ctx.fill();
111
+ ctx.stroke();
112
+ }
113
+ //# sourceMappingURL=drawFeatureSpans.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drawFeatureSpans.js","sourceRoot":"","sources":["../../../src/components/msa/drawFeatureSpans.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { Legend } from '../../types.ts';
2
+ export interface LegendRow {
3
+ key: string;
4
+ label: string;
5
+ color?: string;
6
+ hint?: string;
7
+ }
8
+ export declare function legendRows(legends: Legend[]): LegendRow[];
@@ -0,0 +1,16 @@
1
+ // the legends flattened into the rows both the overlay and the export stack
2
+ // top to bottom. A title row separates one legend from the next, and a lone
3
+ // legend needs no title.
4
+ export function legendRows(legends) {
5
+ const titled = legends.length > 1;
6
+ return legends.flatMap(legend => [
7
+ ...(titled ? [{ key: legend.id, label: legend.title }] : []),
8
+ ...legend.entries.map(entry => ({
9
+ key: `${legend.id}:${entry.id}`,
10
+ label: entry.label,
11
+ color: entry.color,
12
+ hint: entry.id,
13
+ })),
14
+ ]);
15
+ }
16
+ //# sourceMappingURL=legendRows.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"legendRows.js","sourceRoot":"","sources":["../../../src/components/msa/legendRows.ts"],"names":[],"mappings":"AASA,4EAA4E;AAC5E,4EAA4E;AAC5E,yBAAyB;AACzB,MAAM,UAAU,UAAU,CAAC,OAAiB;IAC1C,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAA;IACjC,OAAO,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC/B,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5D,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC9B,GAAG,EAAE,GAAG,MAAM,CAAC,EAAE,IAAI,KAAK,CAAC,EAAE,EAAE;YAC/B,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,IAAI,EAAE,KAAK,CAAC,EAAE;SACf,CAAC,CAAC;KACJ,CAAC,CAAA;AACJ,CAAC"}
@@ -12,21 +12,19 @@ export interface RasterSpec {
12
12
  }
13
13
  /**
14
14
  * CSS color string -> the packed pixel an ImageData holds for it. Painting a 1x1
15
- * canvas and reading it back handles every form a color scheme can produce --
16
- * hex, rgb(), hsl(), named -- without a parser of our own, and the cache means
17
- * each distinct color is resolved once per session rather than once per cell.
15
+ * canvas and reading it back parses hex, rgb(), hsl() and named colors; the
16
+ * cache resolves each distinct color once per session.
18
17
  */
19
18
  export declare function cssColorToPixel(css: string): number;
20
19
  /**
21
20
  * Packs a rectangle of the alignment into one pixel per cell, in `rowNames`
22
21
  * order, ready to hand to putImageData. Cells past the end of a row, and rows
23
- * with no sequence at all, stay transparent -- what the per-cell tile painter
24
- * also leaves behind.
22
+ * with no sequence, stay transparent, as in the per-cell painter.
25
23
  *
26
- * `colStep`/`rowStep` sample instead of covering, which is how the minimap fits
27
- * a whole alignment into a 12px bar. `colSpan`/`rowSpan` average each block of
28
- * that many cells into one pixel instead, so a zoom below a device pixel per
29
- * column still shows every column's color without blending neighbouring rows.
24
+ * `colStep`/`rowStep` sample every nth cell, which fits a whole alignment into
25
+ * the minimap's 12px bar. `colSpan`/`rowSpan` average each block of that many
26
+ * cells into one pixel, so a zoom below a device pixel per column still shows
27
+ * every column's color without blending neighbouring rows.
30
28
  */
31
29
  export declare function rasterPixels({ spec, col0, row0, width, height, colStep, rowStep, colSpan, rowSpan, toPixel, out, }: {
32
30
  spec: RasterSpec;
@@ -45,13 +43,12 @@ export declare function rasterSupported(): boolean;
45
43
  /**
46
44
  * Paints the alignment background of one MSA block from cached
47
45
  * one-pixel-per-cell tiles. The tiles do not depend on the zoom level, so a zoom
48
- * frame costs a handful of drawImage calls instead of a fillRect per visible
49
- * cell -- which ran to 885ms per block at the minimum column width.
46
+ * frame costs a handful of drawImage calls. A fillRect per visible cell measured
47
+ * 885ms per block at the minimum column width.
50
48
  *
51
- * Below a device pixel per cell the tiles average cells together instead, and
52
- * only along the axis that needs it. Leaving the downsampling to the browser's
53
- * image smoothing blurred both axes at once: at fit-to-width, where only the
54
- * columns are narrow, every row boundary turned into a gradient.
49
+ * Below a device pixel per cell the tiles average cells together, per axis.
50
+ * The browser's image smoothing blurs both axes, which turns every row
51
+ * boundary into a gradient at fit-to-width, where only the columns are narrow.
55
52
  */
56
53
  export declare function drawMsaRaster({ ctx, model, theme, offsetX, offsetY, }: {
57
54
  ctx: CanvasRenderingContext2D;
@@ -63,26 +60,23 @@ export declare function drawMsaRaster({ ctx, model, theme, offsetX, offsetY, }:
63
60
  /**
64
61
  * A raster canvas as a PNG data URI, for embedding in the SVG export.
65
62
  *
66
- * toDataURL is the synchronous read-back. The DOM canvas has it, and so does a
67
- * node canvas standing in for OffscreenCanvas headlessly; a browser
68
- * OffscreenCanvas -- which is what the tile and thumbnail caches hold wherever
69
- * it exists -- gets copied onto a DOM canvas first. Returns undefined wherever
70
- * the read-back is unavailable (jsdom) rather than throwing, which is the
71
- * signal to fall back to drawing the thing in vector.
63
+ * toDataURL is the synchronous read-back. The DOM canvas and a headless node
64
+ * canvas have it; a browser OffscreenCanvas, which the tile and thumbnail
65
+ * caches hold where it exists, is copied onto a DOM canvas first. Returns
66
+ * undefined where read-back is unavailable (jsdom), and the caller then draws
67
+ * in vector.
72
68
  */
73
69
  export declare function canvasHref(canvas: RasterCanvas | undefined): string | undefined;
74
70
  /**
75
71
  * The alignment rectangle [col0, col0+numCols) x [row0, row0+numRows) as a PNG
76
72
  * data URI, for the SVG export.
77
73
  *
78
- * SVG has no blit, so the export cannot reuse the tile cache the live canvas
79
- * draws from: one <image> is the whole background instead. That is the
80
- * difference between an export that scales and one that does not -- the vector
81
- * path emits a <rect> per cell, and a 200x500 alignment exhausts the heap
82
- * building them.
74
+ * SVG has no blit, so the export draws the whole background as one <image>. The
75
+ * vector path emits a <rect> per cell, and a 200x500 alignment exhausts the
76
+ * heap building them.
83
77
  *
84
- * Returns undefined wherever a canvas cannot be read back (jsdom, notably),
85
- * which is the signal to keep the per-cell path.
78
+ * Returns undefined where a canvas cannot be read back (jsdom), and the caller
79
+ * then keeps the per-cell path.
86
80
  */
87
81
  export declare function rasterImageHref({ model, theme, col0, row0, numCols, numRows, }: {
88
82
  model: MsaViewModel;
@@ -93,9 +87,8 @@ export declare function rasterImageHref({ model, theme, col0, row0, numCols, num
93
87
  numRows: number;
94
88
  }): string | undefined;
95
89
  /**
96
- * The whole alignment sampled down to a strip small enough to sit behind the
97
- * minimap thumb, cached alongside the block tiles because it goes stale under
98
- * exactly the same conditions.
90
+ * The whole alignment sampled down to a strip behind the minimap thumb, cached
91
+ * with the block tiles since the same keys invalidate both.
99
92
  */
100
93
  export declare function msaThumbnail({ model, theme, height, }: {
101
94
  model: MsaViewModel;