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.
- package/README.md +11 -10
- package/bundle/index.js +122 -111
- package/bundle/index.js.map +4 -4
- package/dist/calculateBlocks.js +5 -3
- package/dist/calculateBlocks.js.map +1 -1
- package/dist/colorSchemes.js +1 -2
- package/dist/colorSchemes.js.map +1 -1
- package/dist/columnStats.d.ts +28 -0
- package/dist/columnStats.js +34 -0
- package/dist/columnStats.js.map +1 -0
- package/dist/components/DragHandle.d.ts +3 -2
- package/dist/components/DragHandle.js +11 -5
- package/dist/components/DragHandle.js.map +1 -1
- package/dist/components/Loading.js +2 -8
- package/dist/components/Loading.js.map +1 -1
- package/dist/components/MSAView.js +17 -6
- package/dist/components/MSAView.js.map +1 -1
- package/dist/components/MSAViewer.d.ts +64 -7
- package/dist/components/MSAViewer.js +128 -23
- package/dist/components/MSAViewer.js.map +1 -1
- package/dist/components/PortalTooltip.d.ts +11 -0
- package/dist/components/PortalTooltip.js +29 -0
- package/dist/components/PortalTooltip.js.map +1 -0
- package/dist/components/ResizeHandles.js +11 -29
- package/dist/components/ResizeHandles.js.map +1 -1
- package/dist/components/SequenceTextArea.js +3 -4
- package/dist/components/SequenceTextArea.js.map +1 -1
- package/dist/components/Track.js +43 -24
- package/dist/components/Track.js.map +1 -1
- package/dist/components/dialogs/AboutDialog.js +6 -6
- package/dist/components/dialogs/AboutDialog.js.map +1 -1
- package/dist/components/dialogs/AnnotationFileDialog.js +5 -2
- package/dist/components/dialogs/AnnotationFileDialog.js.map +1 -1
- package/dist/components/dialogs/ExportSVGDialog.js +6 -4
- package/dist/components/dialogs/ExportSVGDialog.js.map +1 -1
- package/dist/components/dialogs/FeatureDialog.js +8 -3
- package/dist/components/dialogs/FeatureDialog.js.map +1 -1
- package/dist/components/dialogs/TrackInfoDialog.js +1 -1
- package/dist/components/dialogs/TrackInfoDialog.js.map +1 -1
- package/dist/components/header/GappynessSlider.js +6 -11
- package/dist/components/header/GappynessSlider.js.map +1 -1
- package/dist/components/header/Header.js +4 -1
- package/dist/components/header/Header.js.map +1 -1
- package/dist/components/header/LoadWarnings.js +6 -23
- package/dist/components/header/LoadWarnings.js.map +1 -1
- package/dist/components/header/ScrollZoomIcons.d.ts +6 -0
- package/dist/components/header/ScrollZoomIcons.js +35 -0
- package/dist/components/header/ScrollZoomIcons.js.map +1 -0
- package/dist/components/header/TreeSettingsMenu.js +1 -3
- package/dist/components/header/TreeSettingsMenu.js.map +1 -1
- package/dist/components/header/UnshareableDataWarning.js +2 -4
- package/dist/components/header/UnshareableDataWarning.js.map +1 -1
- package/dist/components/header/ZoomControls.js +49 -6
- package/dist/components/header/ZoomControls.js.map +1 -1
- package/dist/components/header/getAnnotationsMenu.js +3 -6
- package/dist/components/header/getAnnotationsMenu.js.map +1 -1
- package/dist/components/header/settingsMenuItems.js +12 -9
- package/dist/components/header/settingsMenuItems.js.map +1 -1
- package/dist/components/import/ImportForm.js +1 -1
- package/dist/components/import/ImportForm.js.map +1 -1
- package/dist/components/import/util.js +1 -2
- package/dist/components/import/util.js.map +1 -1
- package/dist/components/minimap/Minimap.js +1 -2
- package/dist/components/minimap/Minimap.js.map +1 -1
- package/dist/components/msa/AnnotationLegend.js +27 -19
- package/dist/components/msa/AnnotationLegend.js.map +1 -1
- package/dist/components/msa/MSACanvas.js +2 -4
- package/dist/components/msa/MSACanvas.js.map +1 -1
- package/dist/components/msa/MSACanvasBlock.js +13 -15
- package/dist/components/msa/MSACanvasBlock.js.map +1 -1
- package/dist/components/msa/MSAMouseoverCanvas.js +2 -1
- package/dist/components/msa/MSAMouseoverCanvas.js.map +1 -1
- package/dist/components/msa/domainBandCursor.d.ts +7 -11
- package/dist/components/msa/domainBandCursor.js +7 -11
- package/dist/components/msa/domainBandCursor.js.map +1 -1
- package/dist/components/msa/drawFeatureSpans.d.ts +59 -0
- package/dist/components/msa/drawFeatureSpans.js +113 -0
- package/dist/components/msa/drawFeatureSpans.js.map +1 -0
- package/dist/components/msa/legendRows.d.ts +8 -0
- package/dist/components/msa/legendRows.js +16 -0
- package/dist/components/msa/legendRows.js.map +1 -0
- package/dist/components/msa/msaRaster.d.ts +24 -31
- package/dist/components/msa/msaRaster.js +30 -39
- package/dist/components/msa/msaRaster.js.map +1 -1
- package/dist/components/msa/packDomainLanes.d.ts +20 -0
- package/dist/components/msa/packDomainLanes.js +33 -0
- package/dist/components/msa/packDomainLanes.js.map +1 -0
- package/dist/components/msa/renderBoxFeatureCanvasBlock.d.ts +3 -1
- package/dist/components/msa/renderBoxFeatureCanvasBlock.js +50 -87
- package/dist/components/msa/renderBoxFeatureCanvasBlock.js.map +1 -1
- package/dist/components/msa/renderHighlights.d.ts +15 -13
- package/dist/components/msa/renderHighlights.js +43 -20
- package/dist/components/msa/renderHighlights.js.map +1 -1
- package/dist/components/msa/renderMSABlock.js +12 -12
- package/dist/components/msa/renderMSABlock.js.map +1 -1
- package/dist/components/msa/tileColor.js +4 -7
- package/dist/components/msa/tileColor.js.map +1 -1
- package/dist/components/msa/useMsaBlockMouse.d.ts +5 -3
- package/dist/components/msa/useMsaBlockMouse.js +6 -6
- package/dist/components/msa/useMsaBlockMouse.js.map +1 -1
- package/dist/components/rowpanels/RowPanelBlock.d.ts +9 -0
- package/dist/components/rowpanels/RowPanelBlock.js +86 -0
- package/dist/components/rowpanels/RowPanelBlock.js.map +1 -0
- package/dist/components/rowpanels/RowPanelHeaders.d.ts +12 -0
- package/dist/components/rowpanels/RowPanelHeaders.js +38 -0
- package/dist/components/rowpanels/RowPanelHeaders.js.map +1 -0
- package/dist/components/{msa/ColumnStats.d.ts → rowpanels/RowPanels.d.ts} +2 -2
- package/dist/components/rowpanels/RowPanels.js +32 -0
- package/dist/components/rowpanels/RowPanels.js.map +1 -0
- package/dist/components/rowpanels/headerLayout.d.ts +1 -0
- package/dist/components/rowpanels/headerLayout.js +5 -0
- package/dist/components/rowpanels/headerLayout.js.map +1 -0
- package/dist/components/rowpanels/renderFeaturePanel.d.ts +21 -0
- package/dist/components/rowpanels/renderFeaturePanel.js +37 -0
- package/dist/components/rowpanels/renderFeaturePanel.js.map +1 -0
- package/dist/components/rowpanels/renderRowPanel.d.ts +23 -0
- package/dist/components/rowpanels/renderRowPanel.js +22 -0
- package/dist/components/rowpanels/renderRowPanel.js.map +1 -0
- package/dist/components/rowpanels/renderStrip.d.ts +20 -0
- package/dist/components/rowpanels/renderStrip.js +26 -0
- package/dist/components/rowpanels/renderStrip.js.map +1 -0
- package/dist/components/tracks/TrackBlocks.js +3 -5
- package/dist/components/tracks/TrackBlocks.js.map +1 -1
- package/dist/components/tracks/TrackTooltipContent.d.ts +15 -0
- package/dist/components/tracks/TrackTooltipContent.js +109 -0
- package/dist/components/tracks/TrackTooltipContent.js.map +1 -0
- package/dist/components/tracks/drawTracks.d.ts +4 -4
- package/dist/components/tracks/drawTracks.js +25 -39
- package/dist/components/tracks/drawTracks.js.map +1 -1
- package/dist/components/tracks/useTrackHover.d.ts +22 -0
- package/dist/components/tracks/useTrackHover.js +30 -0
- package/dist/components/tracks/useTrackHover.js.map +1 -0
- package/dist/components/tree/CladeLabels.d.ts +12 -0
- package/dist/components/tree/CladeLabels.js +48 -0
- package/dist/components/tree/CladeLabels.js.map +1 -0
- package/dist/components/tree/TreeBranchMenu.js +1 -1
- package/dist/components/tree/TreeBranchMenu.js.map +1 -1
- package/dist/components/tree/TreeCanvas.js +5 -4
- package/dist/components/tree/TreeCanvas.js.map +1 -1
- package/dist/components/tree/TreeCanvasBlock.js +4 -21
- package/dist/components/tree/TreeCanvasBlock.js.map +1 -1
- package/dist/components/tree/TreeNodeMenu.js +1 -1
- package/dist/components/tree/TreeNodeMenu.js.map +1 -1
- package/dist/components/tree/TreeOverview.d.ts +14 -0
- package/dist/components/tree/TreeOverview.js +75 -0
- package/dist/components/tree/TreeOverview.js.map +1 -0
- package/dist/components/tree/TreeRuler.js +9 -13
- package/dist/components/tree/TreeRuler.js.map +1 -1
- package/dist/components/tree/cladeBrackets.d.ts +25 -0
- package/dist/components/tree/cladeBrackets.js +51 -0
- package/dist/components/tree/cladeBrackets.js.map +1 -0
- package/dist/components/tree/dialogs/TreeNodeInfoDialog.js +2 -2
- package/dist/components/tree/dialogs/TreeNodeInfoDialog.js.map +1 -1
- package/dist/components/tree/renderTreeCanvas.js +160 -25
- package/dist/components/tree/renderTreeCanvas.js.map +1 -1
- package/dist/components/tree/renderTreeOverview.d.ts +52 -0
- package/dist/components/tree/renderTreeOverview.js +138 -0
- package/dist/components/tree/renderTreeOverview.js.map +1 -0
- package/dist/components/tree/useTreeHover.js +2 -4
- package/dist/components/tree/useTreeHover.js.map +1 -1
- package/dist/constants.d.ts +16 -0
- package/dist/constants.js +52 -22
- package/dist/constants.js.map +1 -1
- package/dist/createPaletteMap.d.ts +7 -6
- package/dist/createPaletteMap.js +10 -9
- package/dist/createPaletteMap.js.map +1 -1
- package/dist/element.d.ts +13 -0
- package/dist/element.js +269 -0
- package/dist/element.js.map +1 -0
- package/dist/featureFields.d.ts +11 -0
- package/dist/featureFields.js +17 -0
- package/dist/featureFields.js.map +1 -0
- package/dist/flatToTree.js +1 -2
- package/dist/flatToTree.js.map +1 -1
- package/dist/ggplotPalettes.d.ts +10 -0
- package/dist/ggplotPalettes.js +58 -0
- package/dist/ggplotPalettes.js.map +1 -1
- package/dist/hierarchy.d.ts +27 -0
- package/dist/hierarchy.js +66 -9
- package/dist/hierarchy.js.map +1 -1
- package/dist/index.d.ts +9 -1
- package/dist/index.js +5 -3
- package/dist/index.js.map +1 -1
- package/dist/model/DataModel.js +2 -5
- package/dist/model/DataModel.js.map +1 -1
- package/dist/model/msaModel.d.ts +3 -2
- package/dist/model/msaModel.js +3 -2
- package/dist/model/msaModel.js.map +1 -1
- package/dist/model/treeModel.d.ts +30 -0
- package/dist/model/treeModel.js +37 -1
- package/dist/model/treeModel.js.map +1 -1
- package/dist/model.d.ts +549 -294
- package/dist/model.js +1412 -621
- package/dist/model.js.map +1 -1
- package/dist/mount.d.ts +11 -0
- package/dist/mount.js +22 -0
- package/dist/mount.js.map +1 -0
- package/dist/neighborJoining.js +8 -32
- package/dist/neighborJoining.js.map +1 -1
- package/dist/renderToStaticMarkup.d.ts +10 -19
- package/dist/renderToStaticMarkup.js +13 -24
- package/dist/renderToStaticMarkup.js.map +1 -1
- package/dist/renderToSvg.js +180 -56
- package/dist/renderToSvg.js.map +1 -1
- package/dist/rowCoordinateCalculations.d.ts +4 -6
- package/dist/rowCoordinateCalculations.js +4 -6
- package/dist/rowCoordinateCalculations.js.map +1 -1
- package/dist/scales.d.ts +22 -0
- package/dist/scales.js +30 -0
- package/dist/scales.js.map +1 -0
- package/dist/seqPosToGlobalCol.d.ts +2 -3
- package/dist/seqPosToGlobalCol.js +2 -3
- package/dist/seqPosToGlobalCol.js.map +1 -1
- package/dist/sequenceLogo.d.ts +6 -11
- package/dist/sequenceLogo.js +6 -11
- package/dist/sequenceLogo.js.map +1 -1
- package/dist/stripDefault.d.ts +7 -14
- package/dist/stripDefault.js +7 -14
- package/dist/stripDefault.js.map +1 -1
- package/dist/svgTestUtil.d.ts +186 -70
- package/dist/types.d.ts +221 -21
- package/dist/umd.d.ts +2 -0
- package/dist/umd.js +4 -2
- package/dist/umd.js.map +1 -1
- package/dist/useCanvasAutorun.d.ts +5 -10
- package/dist/useCanvasAutorun.js +5 -10
- package/dist/useCanvasAutorun.js.map +1 -1
- package/dist/useMsaSvgFigure.d.ts +20 -0
- package/dist/useMsaSvgFigure.js +46 -0
- package/dist/useMsaSvgFigure.js.map +1 -0
- package/dist/useWheelScroll.js +0 -4
- package/dist/useWheelScroll.js.map +1 -1
- package/dist/util.d.ts +5 -6
- package/dist/util.js +13 -6
- package/dist/util.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +19 -12
- package/src/calculateBlocks.ts +5 -3
- package/src/colorSchemes.ts +1 -2
- package/src/columnStats.ts +58 -0
- package/src/components/DragHandle.tsx +18 -7
- package/src/components/Loading.tsx +4 -36
- package/src/components/MSAView.tsx +19 -5
- package/src/components/MSAViewer.tsx +240 -28
- package/src/components/PortalTooltip.tsx +47 -0
- package/src/components/ResizeHandles.tsx +17 -32
- package/src/components/SequenceTextArea.tsx +3 -4
- package/src/components/Track.tsx +57 -19
- package/src/components/dialogs/AboutDialog.tsx +35 -6
- package/src/components/dialogs/AnnotationFileDialog.tsx +10 -1
- package/src/components/dialogs/ExportSVGDialog.tsx +8 -3
- package/src/components/dialogs/FeatureDialog.tsx +11 -3
- package/src/components/dialogs/TrackInfoDialog.tsx +1 -1
- package/src/components/header/GappynessSlider.tsx +6 -11
- package/src/components/header/Header.tsx +7 -1
- package/src/components/header/LoadWarnings.tsx +11 -25
- package/src/components/header/ScrollZoomIcons.tsx +52 -0
- package/src/components/header/TreeSettingsMenu.tsx +1 -3
- package/src/components/header/UnshareableDataWarning.tsx +2 -4
- package/src/components/header/ZoomControls.tsx +74 -14
- package/src/components/header/getAnnotationsMenu.ts +3 -6
- package/src/components/header/settingsMenuItems.ts +13 -8
- package/src/components/import/ImportForm.tsx +3 -5
- package/src/components/import/ImportFormExamples.tsx +2 -2
- package/src/components/import/util.ts +1 -2
- package/src/components/minimap/Minimap.tsx +1 -2
- package/src/components/msa/AnnotationLegend.tsx +48 -38
- package/src/components/msa/MSACanvas.tsx +3 -8
- package/src/components/msa/MSACanvasBlock.tsx +13 -16
- package/src/components/msa/MSAMouseoverCanvas.tsx +2 -1
- package/src/components/msa/domainBandCursor.ts +7 -11
- package/src/components/msa/drawFeatureSpans.ts +205 -0
- package/src/components/msa/legendRows.ts +24 -0
- package/src/components/msa/msaRaster.ts +30 -39
- package/src/components/msa/packDomainLanes.ts +36 -0
- package/src/components/msa/renderBoxFeatureCanvasBlock.ts +67 -123
- package/src/components/msa/renderHighlights.ts +53 -20
- package/src/components/msa/renderMSABlock.ts +14 -11
- package/src/components/msa/tileColor.ts +4 -7
- package/src/components/msa/useMsaBlockMouse.ts +6 -6
- package/src/components/rowpanels/RowPanelBlock.tsx +139 -0
- package/src/components/rowpanels/RowPanelHeaders.tsx +57 -0
- package/src/components/rowpanels/RowPanels.tsx +77 -0
- package/src/components/rowpanels/headerLayout.ts +5 -0
- package/src/components/rowpanels/renderFeaturePanel.ts +66 -0
- package/src/components/rowpanels/renderRowPanel.ts +41 -0
- package/src/components/rowpanels/renderStrip.ts +46 -0
- package/src/components/tracks/TrackBlocks.tsx +3 -5
- package/src/components/tracks/TrackTooltipContent.tsx +156 -0
- package/src/components/tracks/drawTracks.ts +25 -50
- package/src/components/tracks/useTrackHover.ts +42 -0
- package/src/components/tree/CladeLabels.tsx +77 -0
- package/src/components/tree/TreeBranchMenu.tsx +1 -2
- package/src/components/tree/TreeCanvas.tsx +2 -3
- package/src/components/tree/TreeCanvasBlock.tsx +8 -32
- package/src/components/tree/TreeNodeMenu.tsx +1 -2
- package/src/components/tree/TreeOverview.tsx +106 -0
- package/src/components/tree/TreeRuler.tsx +11 -22
- package/src/components/tree/cladeBrackets.ts +73 -0
- package/src/components/tree/dialogs/TreeNodeInfoDialog.tsx +2 -2
- package/src/components/tree/renderTreeCanvas.ts +242 -21
- package/src/components/tree/renderTreeOverview.ts +212 -0
- package/src/components/tree/useTreeHover.ts +2 -4
- package/src/constants.ts +61 -22
- package/src/createPaletteMap.ts +10 -9
- package/src/element.ts +321 -0
- package/src/featureFields.ts +19 -0
- package/src/flatToTree.ts +1 -2
- package/src/ggplotPalettes.ts +60 -0
- package/src/hierarchy.ts +77 -9
- package/src/index.ts +31 -7
- package/src/model/DataModel.ts +2 -5
- package/src/model/msaModel.ts +3 -2
- package/src/model/treeModel.ts +42 -0
- package/src/model.ts +1677 -643
- package/src/mount.tsx +32 -0
- package/src/neighborJoining.ts +8 -32
- package/src/renderToStaticMarkup.ts +13 -24
- package/src/renderToSvg.tsx +335 -68
- package/src/rowCoordinateCalculations.ts +4 -6
- package/src/scales.ts +47 -0
- package/src/seqPosToGlobalCol.ts +2 -3
- package/src/sequenceLogo.ts +6 -11
- package/src/stripDefault.ts +7 -14
- package/src/types.ts +260 -45
- package/src/umd.ts +4 -2
- package/src/useCanvasAutorun.ts +5 -10
- package/src/useMsaSvgFigure.ts +72 -0
- package/src/useWheelScroll.ts +0 -4
- package/src/util.ts +15 -6
- package/src/version.ts +1 -1
- package/dist/components/msa/ColumnStats.js +0 -42
- package/dist/components/msa/ColumnStats.js.map +0 -1
- package/src/components/msa/ColumnStats.tsx +0 -54
|
@@ -34,11 +34,9 @@ const TrackBlock = observer(function ({ model, track, offsetX, }) {
|
|
|
34
34
|
* not how the blocks are laid out or kept in sync with the horizontal scroll.
|
|
35
35
|
*/
|
|
36
36
|
const TrackBlocks = observer(function ({ model, track, }) {
|
|
37
|
-
// msaCanvasWidth, not msaAreaWidth:
|
|
38
|
-
//
|
|
39
|
-
//
|
|
40
|
-
// last columns appear in the tracks but not in the alignment, and the hovered
|
|
41
|
-
// -column indicator (sized to the canvas) stops short of the track it crosses
|
|
37
|
+
// msaCanvasWidth, not msaAreaWidth: tracks stop where the alignment canvas
|
|
38
|
+
// does, not 20px further under the vertical scrollbar, so their columns and
|
|
39
|
+
// the hover indicator line up with the alignment
|
|
42
40
|
const { blocksX, msaCanvasWidth, scrollX } = model;
|
|
43
41
|
const { kind, height, data, arcs } = track.model;
|
|
44
42
|
// a track with nothing to draw would still take up its vertical space
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TrackBlocks.js","sourceRoot":"","sources":["../../../src/components/tracks/TrackBlocks.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,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,iBAAiB,EAAE,MAAM,qBAAsB,CAAA;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAKhD,MAAM,UAAU,GAAG,QAAQ,CAAC,UAAU,EACpC,KAAK,EACL,KAAK,EACL,OAAO,GAKR;IACC,MAAM,EAAE,SAAS,EAAE,kBAAkB,EAAE,GAAG,KAAK,CAAA;IAC/C,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC,KAAK,CAAA;IAC9B,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAA;IACxB,MAAM,WAAW,GAAG,SAAS,GAAG,kBAAkB,CAAA;IAClD,MAAM,YAAY,GAAG,MAAM,GAAG,kBAAkB,CAAA;IAEhD,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,WAAW,EAAE,YAAY,CAAC,CAAA;YAC9C,cAAc,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAA;QACvD,CAAC;QACD,KAAK,EAAE,WAAW;QAClB,MAAM,EAAE,YAAY;QACpB,IAAI,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC;KACrC,CAAC,CAAA;IAEF,OAAO,CACL,gCACE,GAAG,EAAE,GAAG,EACR,KAAK,EAAE,WAAW,EAClB,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE;YACL,QAAQ,EAAE,UAAU;YACpB,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,SAAS;YAChB,MAAM;SACP,GACD,CACH,CAAA;AACH,CAAC,CAAC,CAAA;AAEF;;;;;GAKG;AACH,MAAM,WAAW,GAAG,QAAQ,CAAC,UAAU,EACrC,KAAK,EACL,KAAK,GAIN;IACC,4EAA4E;IAC5E,
|
|
1
|
+
{"version":3,"file":"TrackBlocks.js","sourceRoot":"","sources":["../../../src/components/tracks/TrackBlocks.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { MsaViewModel } from '../../model.ts';
|
|
3
|
+
import type { BasicTrack } from '../../types.ts';
|
|
4
|
+
/**
|
|
5
|
+
* One track's reading at the hovered column: a bar track's value, the logo's
|
|
6
|
+
* information content and composition, the columns an arc joins, the letter on a
|
|
7
|
+
* text track. `drawTrackBlock` dispatches on the same `kind`, so a new kind
|
|
8
|
+
* needs a case in both.
|
|
9
|
+
*/
|
|
10
|
+
declare const TrackTooltipContent: ({ model, track, col, }: {
|
|
11
|
+
model: MsaViewModel;
|
|
12
|
+
track: BasicTrack;
|
|
13
|
+
col: number;
|
|
14
|
+
}) => React.JSX.Element;
|
|
15
|
+
export default TrackTooltipContent;
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { observer } from 'mobx-react';
|
|
3
|
+
import { columnLogoStack } from '../../sequenceLogo.js';
|
|
4
|
+
import { barTrackValues } from './drawTracks.js';
|
|
5
|
+
const pct = (n) => `${Math.round(n * 100)}%`;
|
|
6
|
+
const MAX_PARTNERS = 8;
|
|
7
|
+
function ColumnLabel({ model, col }) {
|
|
8
|
+
const { relativeTo } = model;
|
|
9
|
+
const pos = relativeTo
|
|
10
|
+
? model.visibleColToSeqPosOneBased(relativeTo, col)
|
|
11
|
+
: undefined;
|
|
12
|
+
return (React.createElement("b", null,
|
|
13
|
+
"Column ",
|
|
14
|
+
col + 1,
|
|
15
|
+
pos === undefined ? null : ` (${relativeTo}:${pos})`));
|
|
16
|
+
}
|
|
17
|
+
function BarTooltip({ model, track, col, }) {
|
|
18
|
+
const { id, name } = track.model;
|
|
19
|
+
const value = barTrackValues(model, id)[col];
|
|
20
|
+
return value === undefined ? null : (React.createElement("div", null,
|
|
21
|
+
React.createElement(ColumnLabel, { model: model, col: col }),
|
|
22
|
+
React.createElement("br", null),
|
|
23
|
+
name,
|
|
24
|
+
": ",
|
|
25
|
+
value.toFixed(2)));
|
|
26
|
+
}
|
|
27
|
+
function LogoTooltip({ model, col }) {
|
|
28
|
+
const stats = model.columnStatsAt(col);
|
|
29
|
+
if (!stats) {
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
const { total, consensusLetter, consensusFraction, gapFraction } = stats;
|
|
33
|
+
const stack = columnLogoStack(model.colStats, col, model.alphabetMaxBits);
|
|
34
|
+
const bits = stack.reduce((a, b) => a + b.bits, 0);
|
|
35
|
+
return (React.createElement("div", null,
|
|
36
|
+
React.createElement(ColumnLabel, { model: model, col: col }),
|
|
37
|
+
" (",
|
|
38
|
+
total,
|
|
39
|
+
" seqs)",
|
|
40
|
+
React.createElement("br", null),
|
|
41
|
+
"Information: ",
|
|
42
|
+
bits.toFixed(2),
|
|
43
|
+
" bits",
|
|
44
|
+
React.createElement("br", null),
|
|
45
|
+
"Consensus: ",
|
|
46
|
+
consensusLetter || '-',
|
|
47
|
+
" (",
|
|
48
|
+
pct(consensusFraction),
|
|
49
|
+
")",
|
|
50
|
+
React.createElement("br", null),
|
|
51
|
+
"Gaps: ",
|
|
52
|
+
pct(gapFraction),
|
|
53
|
+
React.createElement("br", null),
|
|
54
|
+
stats.distribution.slice(0, 6).map(([letter, count]) => (React.createElement("span", { key: letter, style: { marginRight: 8 } },
|
|
55
|
+
letter,
|
|
56
|
+
" ",
|
|
57
|
+
pct(count / total))))));
|
|
58
|
+
}
|
|
59
|
+
function TextTooltip({ model, track, col, }) {
|
|
60
|
+
const { name, data } = track.model;
|
|
61
|
+
const letter = data?.[col];
|
|
62
|
+
return letter === undefined ? null : (React.createElement("div", null,
|
|
63
|
+
React.createElement(ColumnLabel, { model: model, col: col }),
|
|
64
|
+
React.createElement("br", null),
|
|
65
|
+
name,
|
|
66
|
+
": ",
|
|
67
|
+
letter === ' ' ? 'blank' : letter));
|
|
68
|
+
}
|
|
69
|
+
function ArcTooltip({ model, track, col, }) {
|
|
70
|
+
const { name, arcs } = track.model;
|
|
71
|
+
const partners = (arcs ?? [])
|
|
72
|
+
.filter(arc => arc.start === col || arc.end === col)
|
|
73
|
+
.map(arc => (arc.start === col ? arc.end : arc.start) + 1);
|
|
74
|
+
return partners.length === 0 ? null : (React.createElement("div", null,
|
|
75
|
+
React.createElement(ColumnLabel, { model: model, col: col }),
|
|
76
|
+
React.createElement("br", null),
|
|
77
|
+
name,
|
|
78
|
+
": pairs with ",
|
|
79
|
+
partners.slice(0, MAX_PARTNERS).join(', '),
|
|
80
|
+
partners.length > MAX_PARTNERS ? '...' : null));
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* One track's reading at the hovered column: a bar track's value, the logo's
|
|
84
|
+
* information content and composition, the columns an arc joins, the letter on a
|
|
85
|
+
* text track. `drawTrackBlock` dispatches on the same `kind`, so a new kind
|
|
86
|
+
* needs a case in both.
|
|
87
|
+
*/
|
|
88
|
+
const TrackTooltipContent = observer(function ({ model, track, col, }) {
|
|
89
|
+
switch (track.model.kind) {
|
|
90
|
+
case 'bar': {
|
|
91
|
+
return React.createElement(BarTooltip, { model: model, track: track, col: col });
|
|
92
|
+
}
|
|
93
|
+
case 'logo': {
|
|
94
|
+
return React.createElement(LogoTooltip, { model: model, col: col });
|
|
95
|
+
}
|
|
96
|
+
case 'text': {
|
|
97
|
+
return React.createElement(TextTooltip, { model: model, track: track, col: col });
|
|
98
|
+
}
|
|
99
|
+
case 'arc': {
|
|
100
|
+
return React.createElement(ArcTooltip, { model: model, track: track, col: col });
|
|
101
|
+
}
|
|
102
|
+
case 'ruler': {
|
|
103
|
+
return (React.createElement("div", null,
|
|
104
|
+
React.createElement(ColumnLabel, { model: model, col: col })));
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
export default TrackTooltipContent;
|
|
109
|
+
//# sourceMappingURL=TrackTooltipContent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TrackTooltipContent.js","sourceRoot":"","sources":["../../../src/components/tracks/TrackTooltipContent.tsx"],"names":[],"mappings":"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"}
|
|
@@ -58,9 +58,9 @@ export declare function drawSequenceLogo({ ctx, colStats, colorScheme, maxBits,
|
|
|
58
58
|
}): void;
|
|
59
59
|
/**
|
|
60
60
|
* Draw one track's content into a block of the alignment's column space, at
|
|
61
|
-
* `offsetY` within the ctx. Owns the transform, so
|
|
62
|
-
*
|
|
63
|
-
*
|
|
61
|
+
* `offsetY` within the ctx. Owns the transform, so the live canvas blocks and
|
|
62
|
+
* the SVG export draw into the same coordinate space. A new track kind needs a
|
|
63
|
+
* `kind`, a draw function above, and a case here.
|
|
64
64
|
*/
|
|
65
65
|
export declare function drawTrackBlock({ model, ctx, track, offsetX, offsetY, theme, blockSizeXOverride, highResScaleFactorOverride, }: {
|
|
66
66
|
model: MsaViewModel;
|
|
@@ -74,7 +74,7 @@ export declare function drawTrackBlock({ model, ctx, track, offsetX, offsetY, th
|
|
|
74
74
|
}): void;
|
|
75
75
|
/**
|
|
76
76
|
* Every turned-on track stacked top to bottom, for the SVG export. The live
|
|
77
|
-
* view draws the same content one canvas block at a time
|
|
77
|
+
* view draws the same content one canvas block at a time in TrackBlocks.
|
|
78
78
|
*/
|
|
79
79
|
export declare function renderAllTracks({ model, ctx, offsetX, theme, blockSizeXOverride, highResScaleFactorOverride, }: {
|
|
80
80
|
model: MsaViewModel;
|
|
@@ -16,8 +16,8 @@ export function drawConservationBars({ ctx, values, color, colWidth, trackHeight
|
|
|
16
16
|
ctx.fillRect(x, trackHeight - barHeight, colWidth, barHeight);
|
|
17
17
|
}
|
|
18
18
|
}
|
|
19
|
-
//
|
|
20
|
-
//
|
|
19
|
+
// bar-track values are model getters, off the plain track object, so the canvas
|
|
20
|
+
// autorun stays reactive
|
|
21
21
|
export function barTrackValues(model, trackId) {
|
|
22
22
|
const supplied = model.columnTrackContent.get(trackId)?.values;
|
|
23
23
|
if (supplied) {
|
|
@@ -27,10 +27,8 @@ export function barTrackValues(model, trackId) {
|
|
|
27
27
|
? model.propertyConservation
|
|
28
28
|
: model.conservation;
|
|
29
29
|
}
|
|
30
|
-
// An arc's apex scales with
|
|
31
|
-
// and a
|
|
32
|
-
// than linear because a contact map's spans are heavily skewed towards short
|
|
33
|
-
// ones, which linear scaling flattens into a smear along the baseline.
|
|
30
|
+
// An arc's apex scales with the square root of its span. Contact-map spans skew
|
|
31
|
+
// short, and a linear scale flattens them along the baseline.
|
|
34
32
|
export function drawArcs({ ctx, arcs, color, colWidth, trackHeight, offsetX, blockSize, }) {
|
|
35
33
|
if (!arcs?.length) {
|
|
36
34
|
return;
|
|
@@ -79,16 +77,12 @@ export function drawTextTrackContent({ ctx, data, colorScheme, contrastText, bgC
|
|
|
79
77
|
ctx.fillRect(x, 0, colWidth, rowHeight);
|
|
80
78
|
}
|
|
81
79
|
if (drawLetters) {
|
|
82
|
-
// a letter on a colored tile needs that tile's contrast color; otherwise
|
|
83
|
-
// it sits on the plain background and takes the theme's text color
|
|
84
80
|
ctx.fillStyle = contrastText(fill);
|
|
85
81
|
ctx.fillText(letter, x + colWidth / 2, rowHeight / 2);
|
|
86
82
|
}
|
|
87
83
|
}
|
|
88
84
|
}
|
|
89
|
-
//
|
|
90
|
-
// smallest 1/2/5 x 10^n that leaves room for a label, so a zoom changes how many
|
|
91
|
-
// numbers appear rather than crowding them.
|
|
85
|
+
// the smallest 1/2/5 x 10^n column step that leaves room for a label
|
|
92
86
|
export function rulerStep(colWidth, minPixels = 55) {
|
|
93
87
|
let step = 1;
|
|
94
88
|
const mantissas = [1, 2, 5];
|
|
@@ -126,17 +120,11 @@ export function drawColumnRuler({ ctx, numColumns, label, textColor, colWidth, t
|
|
|
126
120
|
ctx.stroke();
|
|
127
121
|
}
|
|
128
122
|
}
|
|
129
|
-
// Cap height as a fraction of the font size
|
|
130
|
-
//
|
|
131
|
-
//
|
|
132
|
-
//
|
|
133
|
-
// backend, so the ratio is a constant: the cap height of the sans-serif faces
|
|
134
|
-
// both backends use, within a percent or two. It only has to be consistent --
|
|
135
|
-
// the same ratio for every letter is what makes the slices sum to the stack
|
|
136
|
-
// height instead of drifting apart.
|
|
123
|
+
// Cap height as a fraction of the font size, within a percent or two for the
|
|
124
|
+
// sans-serif faces both backends use. `measureText` reports no vertical box in
|
|
125
|
+
// the SVG export backend, so one constant ratio scales every logo letter, and
|
|
126
|
+
// the slices sum to the stack height.
|
|
137
127
|
const CAP_HEIGHT_RATIO = 0.72;
|
|
138
|
-
// letters below this many pixels are noise, and a stack that thin reads better
|
|
139
|
-
// as the bar chart it approximates
|
|
140
128
|
const MIN_LETTER_PX = 3;
|
|
141
129
|
export function drawSequenceLogo({ ctx, colStats, colorScheme, maxBits, textColor, colWidth, trackHeight, offsetX, blockSize, }) {
|
|
142
130
|
const { xStart, xEnd } = visibleColRange({
|
|
@@ -145,8 +133,8 @@ export function drawSequenceLogo({ ctx, colStats, colorScheme, maxBits, textColo
|
|
|
145
133
|
colWidth,
|
|
146
134
|
});
|
|
147
135
|
const end = Math.min(xEnd, colStats.numColumns);
|
|
148
|
-
// one reference size for
|
|
149
|
-
//
|
|
136
|
+
// one reference font size for the block; each letter's transform scales it to
|
|
137
|
+
// a height proportional to its frequency
|
|
150
138
|
const referenceFontSize = trackHeight;
|
|
151
139
|
setFontSize(ctx, referenceFontSize);
|
|
152
140
|
ctx.textAlign = 'left';
|
|
@@ -158,9 +146,7 @@ export function drawSequenceLogo({ ctx, colStats, colorScheme, maxBits, textColo
|
|
|
158
146
|
continue;
|
|
159
147
|
}
|
|
160
148
|
const x = col * colWidth;
|
|
161
|
-
//
|
|
162
|
-
// lands on top, which is the convention that makes a logo readable at a
|
|
163
|
-
// glance
|
|
149
|
+
// the stack is ascending, so the tallest letter lands on top
|
|
164
150
|
let bottom = trackHeight;
|
|
165
151
|
for (const { letter, bits } of stack) {
|
|
166
152
|
const h = (bits / maxBits) * trackHeight;
|
|
@@ -187,12 +173,14 @@ export function drawSequenceLogo({ ctx, colStats, colorScheme, maxBits, textColo
|
|
|
187
173
|
}
|
|
188
174
|
/**
|
|
189
175
|
* Draw one track's content into a block of the alignment's column space, at
|
|
190
|
-
* `offsetY` within the ctx. Owns the transform, so
|
|
191
|
-
*
|
|
192
|
-
*
|
|
176
|
+
* `offsetY` within the ctx. Owns the transform, so the live canvas blocks and
|
|
177
|
+
* the SVG export draw into the same coordinate space. A new track kind needs a
|
|
178
|
+
* `kind`, a draw function above, and a case here.
|
|
193
179
|
*/
|
|
194
180
|
export function drawTrackBlock({ model, ctx, track, offsetX, offsetY = 0, theme, blockSizeXOverride, highResScaleFactorOverride, }) {
|
|
195
|
-
|
|
181
|
+
// an autorun tracks every model read here, so each kind reads only what it
|
|
182
|
+
// draws and a vertical zoom leaves the bar and arc canvases alone
|
|
183
|
+
const { blockSize, colWidth, highResScaleFactor } = model;
|
|
196
184
|
const { id, kind, height: trackHeight, barColor, arcColor, arcs, customColorScheme, data, } = track.model;
|
|
197
185
|
const blockSizeX = blockSizeXOverride ?? blockSize;
|
|
198
186
|
const k = highResScaleFactorOverride ?? highResScaleFactor;
|
|
@@ -228,9 +216,9 @@ export function drawTrackBlock({ model, ctx, track, offsetX, offsetY = 0, theme,
|
|
|
228
216
|
case 'logo': {
|
|
229
217
|
drawSequenceLogo({
|
|
230
218
|
ctx,
|
|
231
|
-
colStats,
|
|
232
|
-
colorScheme:
|
|
233
|
-
maxBits: alphabetMaxBits,
|
|
219
|
+
colStats: model.colStats,
|
|
220
|
+
colorScheme: model.colorScheme,
|
|
221
|
+
maxBits: model.alphabetMaxBits,
|
|
234
222
|
textColor,
|
|
235
223
|
colWidth,
|
|
236
224
|
trackHeight,
|
|
@@ -244,8 +232,7 @@ export function drawTrackBlock({ model, ctx, track, offsetX, offsetY = 0, theme,
|
|
|
244
232
|
drawColumnRuler({
|
|
245
233
|
ctx,
|
|
246
234
|
numColumns,
|
|
247
|
-
//
|
|
248
|
-
// drawn relative to one, which is what the rest of the view counts in
|
|
235
|
+
// with relativeTo set, number by the reference row's residues
|
|
249
236
|
label: relativeTo
|
|
250
237
|
? col => {
|
|
251
238
|
const pos = model.visibleColToSeqPosOneBased(relativeTo, col);
|
|
@@ -261,17 +248,16 @@ export function drawTrackBlock({ model, ctx, track, offsetX, offsetY = 0, theme,
|
|
|
261
248
|
break;
|
|
262
249
|
}
|
|
263
250
|
case 'text': {
|
|
251
|
+
const { bgColor, fontSize, rowHeight, showMsaLetters } = model;
|
|
264
252
|
ctx.textAlign = 'center';
|
|
265
253
|
ctx.textBaseline = 'middle';
|
|
266
254
|
setFontSize(ctx, fontSize);
|
|
267
255
|
drawTextTrackContent({
|
|
268
256
|
ctx,
|
|
269
257
|
data,
|
|
270
|
-
colorScheme: customColorScheme ??
|
|
258
|
+
colorScheme: customColorScheme ?? model.colorScheme,
|
|
271
259
|
contrastText: contrastTextFn(theme),
|
|
272
260
|
bgColor,
|
|
273
|
-
// a text track is one alignment row tall, so it shows letters exactly
|
|
274
|
-
// when the alignment does
|
|
275
261
|
drawLetters: showMsaLetters,
|
|
276
262
|
colWidth,
|
|
277
263
|
rowHeight,
|
|
@@ -285,7 +271,7 @@ export function drawTrackBlock({ model, ctx, track, offsetX, offsetY = 0, theme,
|
|
|
285
271
|
}
|
|
286
272
|
/**
|
|
287
273
|
* Every turned-on track stacked top to bottom, for the SVG export. The live
|
|
288
|
-
* view draws the same content one canvas block at a time
|
|
274
|
+
* view draws the same content one canvas block at a time in TrackBlocks.
|
|
289
275
|
*/
|
|
290
276
|
export function renderAllTracks({ model, ctx, offsetX, theme, blockSizeXOverride, highResScaleFactorOverride, }) {
|
|
291
277
|
let currentY = 0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"drawTracks.js","sourceRoot":"","sources":["../../../src/components/tracks/drawTracks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAQ3D,MAAM,UAAU,oBAAoB,CAAC,EACnC,GAAG,EACH,MAAM,EACN,KAAK,EACL,QAAQ,EACR,WAAW,EACX,OAAO,EACP,SAAS,GASV;IACC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,eAAe,CAAC;QACvC,OAAO;QACP,UAAU,EAAE,SAAS;QACrB,QAAQ;KACT,CAAC,CAAA;IAEF,GAAG,CAAC,SAAS,GAAG,KAAK,CAAA;IACrB,KAAK,IAAI,CAAC,GAAG,MAAM,EAAE,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACxD,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAE,CAAA;QACxB,MAAM,SAAS,GAAG,KAAK,GAAG,WAAW,CAAA;QACrC,MAAM,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAA;QACtB,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,WAAW,GAAG,SAAS,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAA;IAC/D,CAAC;AACH,CAAC;AAED,
|
|
1
|
+
{"version":3,"file":"drawTracks.js","sourceRoot":"","sources":["../../../src/components/tracks/drawTracks.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { MsaViewModel } from '../../model.ts';
|
|
2
|
+
import type React from 'react';
|
|
3
|
+
/**
|
|
4
|
+
* Translates pointer events over a track's row into the hovered column and a
|
|
5
|
+
* tooltip anchor. The track shares the alignment's columns, so hovering it sets
|
|
6
|
+
* the model's mouse column too and the alignment's hover band follows along.
|
|
7
|
+
*
|
|
8
|
+
* `tooltip` off skips the anchor, so a track whose tooltip is turned off still
|
|
9
|
+
* drives the hover band without re-rendering on every mouse move.
|
|
10
|
+
*/
|
|
11
|
+
export declare function useTrackHover({ model, tooltip, }: {
|
|
12
|
+
model: MsaViewModel;
|
|
13
|
+
tooltip: boolean;
|
|
14
|
+
}): {
|
|
15
|
+
hover: {
|
|
16
|
+
col: number;
|
|
17
|
+
x: number;
|
|
18
|
+
y: number;
|
|
19
|
+
} | undefined;
|
|
20
|
+
onMouseMove: (event: React.MouseEvent, el: HTMLElement) => void;
|
|
21
|
+
onMouseLeave: () => void;
|
|
22
|
+
};
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { useState } from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* Translates pointer events over a track's row into the hovered column and a
|
|
4
|
+
* tooltip anchor. The track shares the alignment's columns, so hovering it sets
|
|
5
|
+
* the model's mouse column too and the alignment's hover band follows along.
|
|
6
|
+
*
|
|
7
|
+
* `tooltip` off skips the anchor, so a track whose tooltip is turned off still
|
|
8
|
+
* drives the hover band without re-rendering on every mouse move.
|
|
9
|
+
*/
|
|
10
|
+
export function useTrackHover({ model, tooltip, }) {
|
|
11
|
+
const [hover, setHover] = useState();
|
|
12
|
+
// the blocks are laid out in column space and scrolled by a transform on
|
|
13
|
+
// their container, so the pointer's column comes off the untransformed row
|
|
14
|
+
function onMouseMove(event, el) {
|
|
15
|
+
const { colWidth, scrollX, numColumns } = model;
|
|
16
|
+
const { left } = el.getBoundingClientRect();
|
|
17
|
+
const col = Math.floor((event.clientX - left - scrollX) / colWidth);
|
|
18
|
+
const hit = col >= 0 && col < numColumns;
|
|
19
|
+
model.setMousePos(hit ? col : undefined, undefined);
|
|
20
|
+
if (tooltip) {
|
|
21
|
+
setHover(hit ? { col, x: event.clientX, y: event.clientY } : undefined);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
function onMouseLeave() {
|
|
25
|
+
setHover(undefined);
|
|
26
|
+
model.setMousePos(undefined, undefined);
|
|
27
|
+
}
|
|
28
|
+
return { hover: tooltip ? hover : undefined, onMouseMove, onMouseLeave };
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=useTrackHover.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useTrackHover.js","sourceRoot":"","sources":["../../../src/components/tracks/useTrackHover.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAKhC;;;;;;;GAOG;AACH,MAAM,UAAU,aAAa,CAAC,EAC5B,KAAK,EACL,OAAO,GAIR;IACC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,EAAyC,CAAA;IAE3E,yEAAyE;IACzE,2EAA2E;IAC3E,SAAS,WAAW,CAAC,KAAuB,EAAE,EAAe;QAC3D,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,KAAK,CAAA;QAC/C,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,qBAAqB,EAAE,CAAA;QAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,GAAG,OAAO,CAAC,GAAG,QAAQ,CAAC,CAAA;QACnE,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,IAAI,GAAG,GAAG,UAAU,CAAA;QACxC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;QACnD,IAAI,OAAO,EAAE,CAAC;YACZ,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;QACzE,CAAC;IACH,CAAC;IAED,SAAS,YAAY;QACnB,QAAQ,CAAC,SAAS,CAAC,CAAA;QACnB,KAAK,CAAC,WAAW,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;IACzC,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,CAAA;AAC1E,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { MsaViewModel } from '../../model.ts';
|
|
3
|
+
/**
|
|
4
|
+
* The label of each bracket, in the gutter beside its bar, where the canvas
|
|
5
|
+
* draws the bar itself. The text is DOM text, turned on its side for a clade
|
|
6
|
+
* shorter than the font, the way the strip headers are; the SVG export draws
|
|
7
|
+
* the same labels with a `rotate(-90)`.
|
|
8
|
+
*/
|
|
9
|
+
declare const CladeLabels: ({ model }: {
|
|
10
|
+
model: MsaViewModel;
|
|
11
|
+
}) => React.JSX.Element | null;
|
|
12
|
+
export default CladeLabels;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { useTheme } from '@mui/material';
|
|
3
|
+
import { observer } from 'mobx-react';
|
|
4
|
+
import { bracketGap, cladeHeight, cladeInGutter, cladeLabelHorizontal, cladeLabelOffset, } from './cladeBrackets.js';
|
|
5
|
+
/**
|
|
6
|
+
* The label of each bracket, in the gutter beside its bar, where the canvas
|
|
7
|
+
* draws the bar itself. The text is DOM text, turned on its side for a clade
|
|
8
|
+
* shorter than the font, the way the strip headers are; the SVG export draws
|
|
9
|
+
* the same labels with a `rotate(-90)`.
|
|
10
|
+
*/
|
|
11
|
+
const CladeLabels = observer(function ({ model }) {
|
|
12
|
+
const { resolvedClades, cladeGutterWidth, rowHeight, treeAreaWidth, fontSize, } = model;
|
|
13
|
+
const theme = useTheme();
|
|
14
|
+
if (cladeGutterWidth === 0) {
|
|
15
|
+
return null;
|
|
16
|
+
}
|
|
17
|
+
const gutterLeft = treeAreaWidth - cladeGutterWidth;
|
|
18
|
+
return (React.createElement(React.Fragment, null, resolvedClades.map((clade, index) => {
|
|
19
|
+
const { label, markColor, rows } = clade;
|
|
20
|
+
if (!label || !cladeInGutter(clade)) {
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
const left = gutterLeft + cladeLabelOffset(clade);
|
|
24
|
+
const horizontal = cladeLabelHorizontal(clade, rowHeight, fontSize);
|
|
25
|
+
return (React.createElement("div", { key: `${rows[0]}-${rows[1]}-${index}`, title: label, style: {
|
|
26
|
+
position: 'absolute',
|
|
27
|
+
left,
|
|
28
|
+
top: rows[0] * rowHeight,
|
|
29
|
+
width: treeAreaWidth - left - bracketGap,
|
|
30
|
+
height: cladeHeight(clade, rowHeight),
|
|
31
|
+
display: 'flex',
|
|
32
|
+
alignItems: 'center',
|
|
33
|
+
color: markColor ?? theme.palette.text.primary,
|
|
34
|
+
fontSize,
|
|
35
|
+
overflow: 'hidden',
|
|
36
|
+
textOverflow: 'ellipsis',
|
|
37
|
+
whiteSpace: 'nowrap',
|
|
38
|
+
pointerEvents: 'none',
|
|
39
|
+
// vertical-rl reads top to bottom, and the half turn makes it
|
|
40
|
+
// read upwards, which is what rotate(-90) exports
|
|
41
|
+
...(horizontal
|
|
42
|
+
? {}
|
|
43
|
+
: { writingMode: 'vertical-rl', transform: 'rotate(180deg)' }),
|
|
44
|
+
} }, label));
|
|
45
|
+
})));
|
|
46
|
+
});
|
|
47
|
+
export default CladeLabels;
|
|
48
|
+
//# sourceMappingURL=CladeLabels.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CladeLabels.js","sourceRoot":"","sources":["../../../src/components/tree/CladeLabels.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAErC,OAAO,EACL,UAAU,EACV,WAAW,EACX,aAAa,EACb,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,oBAAoB,CAAA;AAI3B;;;;;GAKG;AACH,MAAM,WAAW,GAAG,QAAQ,CAAC,UAAU,EAAE,KAAK,EAA2B;IACvE,MAAM,EACJ,cAAc,EACd,gBAAgB,EAChB,SAAS,EACT,aAAa,EACb,QAAQ,GACT,GAAG,KAAK,CAAA;IACT,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAA;IACxB,IAAI,gBAAgB,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO,IAAI,CAAA;IACb,CAAC;IACD,MAAM,UAAU,GAAG,aAAa,GAAG,gBAAgB,CAAA;IACnD,OAAO,CACL,0CACG,cAAc,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QACnC,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,KAAK,CAAA;QACxC,IAAI,CAAC,KAAK,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;YACpC,OAAO,IAAI,CAAA;QACb,CAAC;QACD,MAAM,IAAI,GAAG,UAAU,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAA;QACjD,MAAM,UAAU,GAAG,oBAAoB,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAA;QACnE,OAAO,CACL,6BACE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,EAAE,EACrC,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE;gBACL,QAAQ,EAAE,UAAU;gBACpB,IAAI;gBACJ,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,SAAS;gBACxB,KAAK,EAAE,aAAa,GAAG,IAAI,GAAG,UAAU;gBACxC,MAAM,EAAE,WAAW,CAAC,KAAK,EAAE,SAAS,CAAC;gBACrC,OAAO,EAAE,MAAM;gBACf,UAAU,EAAE,QAAQ;gBACpB,KAAK,EAAE,SAAS,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO;gBAC9C,QAAQ;gBACR,QAAQ,EAAE,QAAQ;gBAClB,YAAY,EAAE,UAAU;gBACxB,UAAU,EAAE,QAAQ;gBACpB,aAAa,EAAE,MAAM;gBACrB,8DAA8D;gBAC9D,kDAAkD;gBAClD,GAAG,CAAC,UAAU;oBACZ,CAAC,CAAC,EAAE;oBACJ,CAAC,CAAC,EAAE,WAAW,EAAE,aAAa,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC;aACjE,IAEA,KAAK,CACF,CACP,CAAA;IACH,CAAC,CAAC,CACD,CACJ,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,eAAe,WAAW,CAAA"}
|
|
@@ -5,7 +5,7 @@ const TreeBranchMenu = observer(function ({ node, model, onClose, }) {
|
|
|
5
5
|
return (React.createElement(Menu, { anchorReference: "anchorPosition", anchorPosition: {
|
|
6
6
|
left: node.x,
|
|
7
7
|
top: node.y,
|
|
8
|
-
}, transitionDuration: 0,
|
|
8
|
+
}, transitionDuration: 0, open: true, onClose: onClose },
|
|
9
9
|
React.createElement(MenuItem, { dense: true, disabled: true }, node.name),
|
|
10
10
|
React.createElement(MenuItem, { dense: true, onClick: () => {
|
|
11
11
|
model.toggleCollapsed(node.id);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TreeBranchMenu.js","sourceRoot":"","sources":["../../../src/components/tree/TreeBranchMenu.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAWrC,MAAM,cAAc,GAAG,QAAQ,CAAC,UAAU,EACxC,IAAI,EACJ,KAAK,EACL,OAAO,GAKR;IACC,OAAO,CACL,oBAAC,IAAI,IACH,eAAe,EAAC,gBAAgB,EAChC,cAAc,EAAE;YACd,IAAI,EAAE,IAAI,CAAC,CAAC;YACZ,GAAG,EAAE,IAAI,CAAC,CAAC;SACZ,EACD,kBAAkB,EAAE,CAAC,EACrB,
|
|
1
|
+
{"version":3,"file":"TreeBranchMenu.js","sourceRoot":"","sources":["../../../src/components/tree/TreeBranchMenu.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAWrC,MAAM,cAAc,GAAG,QAAQ,CAAC,UAAU,EACxC,IAAI,EACJ,KAAK,EACL,OAAO,GAKR;IACC,OAAO,CACL,oBAAC,IAAI,IACH,eAAe,EAAC,gBAAgB,EAChC,cAAc,EAAE;YACd,IAAI,EAAE,IAAI,CAAC,CAAC;YACZ,GAAG,EAAE,IAAI,CAAC,CAAC;SACZ,EACD,kBAAkB,EAAE,CAAC,EACrB,IAAI,QACJ,OAAO,EAAE,OAAO;QAEhB,oBAAC,QAAQ,IAAC,KAAK,QAAC,QAAQ,UACrB,IAAI,CAAC,IAAI,CACD;QACX,oBAAC,QAAQ,IACP,KAAK,QACL,OAAO,EAAE,GAAG,EAAE;gBACZ,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;gBAC9B,OAAO,EAAE,CAAA;YACX,CAAC,IAEA,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAChC,CAAC,CAAC,kBAAkB;YACpB,CAAC,CAAC,oBAAoB,CACf;QACX,oBAAC,QAAQ,IACP,KAAK,QACL,OAAO,EAAE,GAAG,EAAE;gBACZ,IAAI,KAAK,CAAC,QAAQ,KAAK,IAAI,CAAC,EAAE,EAAE,CAAC;oBAC/B,KAAK,CAAC,WAAW,CAAC,SAAS,CAAC,CAAA;gBAC9B,CAAC;qBAAM,CAAC;oBACN,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;gBAC5B,CAAC;gBACD,OAAO,EAAE,CAAA;YACX,CAAC,IAEA,KAAK,CAAC,QAAQ,KAAK,IAAI,CAAC,EAAE;YACzB,CAAC,CAAC,6BAA6B;YAC/B,CAAC,CAAC,qBAAqB,CAChB,CACN,CACR,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,eAAe,cAAc,CAAA"}
|
|
@@ -4,6 +4,7 @@ import { observer } from 'mobx-react';
|
|
|
4
4
|
import { useCanvasAutorun } from '../../useCanvasAutorun.js';
|
|
5
5
|
import { useWheelScroll } from '../../useWheelScroll.js';
|
|
6
6
|
import { referenceColor, treeHoverColor } from '../overlayColors.js';
|
|
7
|
+
import CladeLabels from './CladeLabels.js';
|
|
7
8
|
import TreeCanvasBlock from './TreeCanvasBlock.js';
|
|
8
9
|
const TreeCanvas = observer(function ({ model }) {
|
|
9
10
|
const ref = useRef(null);
|
|
@@ -42,9 +43,7 @@ const TreeCanvas = observer(function ({ model }) {
|
|
|
42
43
|
height,
|
|
43
44
|
deps: [model],
|
|
44
45
|
});
|
|
45
|
-
return (React.createElement("div", { ref: ref, onMouseDown: onMouseDown, onMouseUp: onMouseUp,
|
|
46
|
-
event.preventDefault();
|
|
47
|
-
}, style: {
|
|
46
|
+
return (React.createElement("div", { ref: ref, onMouseDown: onMouseDown, onMouseUp: onMouseUp, style: {
|
|
48
47
|
height,
|
|
49
48
|
position: 'relative',
|
|
50
49
|
width: treeAreaWidth,
|
|
@@ -55,7 +54,9 @@ const TreeCanvas = observer(function ({ model }) {
|
|
|
55
54
|
left: 0,
|
|
56
55
|
transform: `translateY(${scrollY}px)`,
|
|
57
56
|
willChange: 'transform',
|
|
58
|
-
} },
|
|
57
|
+
} },
|
|
58
|
+
blocksY.map(block => (React.createElement(TreeCanvasBlock, { key: block, model: model, offsetY: block }))),
|
|
59
|
+
React.createElement(CladeLabels, { model: model })),
|
|
59
60
|
React.createElement("canvas", { ref: mouseoverRef, width: treeAreaWidth, height: height, style: {
|
|
60
61
|
position: 'absolute',
|
|
61
62
|
top: 0,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TreeCanvas.js","sourceRoot":"","sources":["../../../src/components/tree/TreeCanvas.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,OAAO,CAAA;AAElD,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAA;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAErC,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AACxD,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACpE,OAAO,eAAe,MAAM,sBAAuB,CAAA;AAInD,MAAM,UAAU,GAAG,QAAQ,CAAC,UAAU,EAAE,KAAK,EAA2B;IACtE,MAAM,GAAG,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAA;IACxC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,GAAG,KAAK,CAAA;IACzD,MAAM,SAAS,GAAG,WAAW,CAC3B,CAAC,CAAS,EAAE,EAAE;QACZ,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;IACpB,CAAC,EACD,CAAC,KAAK,CAAC,CACR,CAAA;IACD,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,GAAG,cAAc,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,CAAA;IAErE,MAAM,YAAY,GAAG,gBAAgB,CAAC;QACpC,IAAI,EAAE,GAAG,CAAC,EAAE;YACV,IAAI,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBACnB,MAAM,EACJ,SAAS,EACT,aAAa,EAAE,CAAC,EAChB,MAAM,EAAE,CAAC,EACT,OAAO,EAAE,EAAE,EACX,QAAQ,EACR,iBAAiB,EACjB,iBAAiB,GAClB,GAAG,KAAK,CAAA;gBACT,GAAG,CAAC,cAAc,EAAE,CAAA;gBACpB,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;gBAEzB,oEAAoE;gBACpE,6DAA6D;gBAC7D,MAAM,OAAO,GAAG,CAAC,KAAa,EAAE,EAAE;oBAChC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,KAAK,GAAG,SAAS,GAAG,EAAE,EAAE,CAAC,EAAE,SAAS,CAAC,CAAA;gBACvD,CAAC,CAAA;gBAED,IAAI,iBAAiB,KAAK,SAAS,EAAE,CAAC;oBACpC,GAAG,CAAC,SAAS,GAAG,cAAc,CAAA;oBAC9B,OAAO,CAAC,iBAAiB,CAAC,CAAA;gBAC5B,CAAC;gBAED,GAAG,CAAC,SAAS,GAAG,cAAc,CAAA;gBAC9B,KAAK,MAAM,KAAK,IAAI,iBAAiB,EAAE,CAAC;oBACtC,OAAO,CAAC,KAAK,CAAC,CAAA;gBAChB,CAAC;gBACD,IACE,QAAQ,KAAK,SAAS;oBACtB,QAAQ,KAAK,iBAAiB;oBAC9B,CAAC,iBAAiB,CAAC,QAAQ,CAAC,QAAQ,CAAC,EACrC,CAAC;oBACD,OAAO,CAAC,QAAQ,CAAC,CAAA;gBACnB,CAAC;YACH,CAAC;QACH,CAAC;QACD,KAAK,EAAE,aAAa;QACpB,MAAM;QACN,IAAI,EAAE,CAAC,KAAK,CAAC;KACd,CAAC,CAAA;IAEF,OAAO,CACL,6BACE,GAAG,EAAE,GAAG,EACR,WAAW,EAAE,WAAW,EACxB,SAAS,EAAE,SAAS,EACpB,
|
|
1
|
+
{"version":3,"file":"TreeCanvas.js","sourceRoot":"","sources":["../../../src/components/tree/TreeCanvas.tsx"],"names":[],"mappings":"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"}
|