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
|
@@ -3,16 +3,70 @@ import { createJBrowseTheme } from '@jbrowse/core/ui/theme';
|
|
|
3
3
|
import useMeasure from '@jbrowse/core/util/useMeasure';
|
|
4
4
|
import { destroy, isAlive } from '@jbrowse/mobx-state-tree';
|
|
5
5
|
import { ThemeProvider } from '@mui/material/styles';
|
|
6
|
+
import { compareStructural, reaction, when } from 'mobx';
|
|
6
7
|
import MSAModelF from '../model.js';
|
|
7
8
|
import Loading from './Loading.js';
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
function resolveTheme(theme) {
|
|
10
|
+
return createJBrowseTheme(theme === 'dark'
|
|
11
|
+
? { palette: { mode: 'dark' } }
|
|
12
|
+
: typeof theme === 'object'
|
|
13
|
+
? theme
|
|
14
|
+
: undefined);
|
|
15
|
+
}
|
|
16
|
+
function sameSource(a, b) {
|
|
17
|
+
return (a.msa === b.msa &&
|
|
18
|
+
a.tree === b.tree &&
|
|
19
|
+
a.gff === b.gff &&
|
|
20
|
+
JSON.stringify([a.msaFilehandle, a.treeFilehandle, a.gffFilehandle]) ===
|
|
21
|
+
JSON.stringify([b.msaFilehandle, b.treeFilehandle, b.gffFilehandle]));
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* A new alignment, tree or annotation file needs a new model, so the viewer
|
|
25
|
+
* remounts when one of those props changes and keeps its model across every
|
|
26
|
+
* other change.
|
|
27
|
+
*/
|
|
28
|
+
export default function MSAViewer(props) {
|
|
29
|
+
const { msa, tree, gff, msaFilehandle, treeFilehandle, gffFilehandle } = props;
|
|
30
|
+
const source = {
|
|
31
|
+
msa,
|
|
32
|
+
tree,
|
|
33
|
+
gff,
|
|
34
|
+
msaFilehandle,
|
|
35
|
+
treeFilehandle,
|
|
36
|
+
gffFilehandle,
|
|
37
|
+
};
|
|
38
|
+
const [shown, setShown] = useState({ source, generation: 0 });
|
|
39
|
+
if (!sameSource(shown.source, source)) {
|
|
40
|
+
setShown({ source, generation: shown.generation + 1 });
|
|
41
|
+
}
|
|
42
|
+
return React.createElement(Viewer, { key: shown.generation, ...props });
|
|
43
|
+
}
|
|
44
|
+
function useModelReaction(model, key, handler) {
|
|
45
|
+
const latest = useRef(handler);
|
|
46
|
+
useEffect(() => {
|
|
47
|
+
latest.current = handler;
|
|
48
|
+
});
|
|
49
|
+
const listening = !!handler;
|
|
50
|
+
useEffect(() => listening
|
|
51
|
+
? reaction(() => model[key], value => {
|
|
52
|
+
latest.current?.(value);
|
|
53
|
+
}, { equals: compareStructural })
|
|
54
|
+
: undefined, [model, key, listening]);
|
|
55
|
+
}
|
|
56
|
+
function Viewer({ msa, tree, gff, msaFilehandle, treeFilehandle, gffFilehandle, colorScheme, height, colWidth, rowHeight, allowedGappyness, highlightColumns, highlights, clades, relativeTo, columnTracks, residueMappings, rowData, encodings, rowPanels, drawTree, residueEncoding, treeAreaWidth, autoTreeAreaWidth, showBranchLen, region, hideHeader, theme, onCellHover, onCellClick, onViewportChange, onModel, }) {
|
|
12
57
|
const [model] = useState(() => MSAModelF().create({
|
|
13
58
|
type: 'MsaView',
|
|
14
|
-
...(msa || tree || gff
|
|
15
|
-
? {
|
|
59
|
+
...(msa || tree || gff || rowData
|
|
60
|
+
? {
|
|
61
|
+
data: {
|
|
62
|
+
msa: msa ?? '',
|
|
63
|
+
tree: tree ?? '',
|
|
64
|
+
gff,
|
|
65
|
+
// the row table is stored as this JSON string, which is what a
|
|
66
|
+
// shared URL and the size limit already cover
|
|
67
|
+
...(rowData ? { treeMetadata: JSON.stringify(rowData) } : {}),
|
|
68
|
+
},
|
|
69
|
+
}
|
|
16
70
|
: {}),
|
|
17
71
|
...(msaFilehandle ? { msaFilehandle } : {}),
|
|
18
72
|
...(treeFilehandle ? { treeFilehandle } : {}),
|
|
@@ -24,12 +78,19 @@ export default function MSAViewer({ msa, tree, gff, msaFilehandle, treeFilehandl
|
|
|
24
78
|
...(allowedGappyness !== undefined ? { allowedGappyness } : {}),
|
|
25
79
|
...(highlightColumns ? { highlightColumns } : {}),
|
|
26
80
|
...(highlights ? { highlights } : {}),
|
|
81
|
+
...(clades ? { clades } : {}),
|
|
27
82
|
...(relativeTo ? { relativeTo } : {}),
|
|
28
83
|
...(columnTracks ? { columnTracks } : {}),
|
|
29
84
|
...(residueMappings ? { residueMappings } : {}),
|
|
85
|
+
...(encodings ? { encodings } : {}),
|
|
86
|
+
...(rowPanels ? { rowPanels } : {}),
|
|
30
87
|
...(drawTree !== undefined ? { drawTree } : {}),
|
|
31
88
|
...(treeAreaWidth ? { treeAreaWidth } : {}),
|
|
32
89
|
...(autoTreeAreaWidth ? { autoTreeAreaWidth } : {}),
|
|
90
|
+
...(showBranchLen !== undefined ? { showBranchLen } : {}),
|
|
91
|
+
...(residueEncoding !== undefined
|
|
92
|
+
? { bgColor: residueEncoding === 'fill' }
|
|
93
|
+
: {}),
|
|
33
94
|
}));
|
|
34
95
|
const destroyTimer = useRef(undefined);
|
|
35
96
|
const [ref, { width }] = useMeasure();
|
|
@@ -38,14 +99,8 @@ export default function MSAViewer({ msa, tree, gff, msaFilehandle, treeFilehandl
|
|
|
38
99
|
model.setWidth(width);
|
|
39
100
|
}
|
|
40
101
|
}, [model, width]);
|
|
41
|
-
//
|
|
42
|
-
//
|
|
43
|
-
// toggle, a color-scheme picker -- without remounting it and re-fetching its
|
|
44
|
-
// alignment. Each effect depends only on its own prop, so a change the user
|
|
45
|
-
// makes inside the viewer (picking a scheme from the menu, dragging a row
|
|
46
|
-
// taller) survives the host's next render rather than being snapped back.
|
|
47
|
-
// Data props are not among them: new msa/tree/gff is a different alignment,
|
|
48
|
-
// which is a new model, which React spells `key`.
|
|
102
|
+
// Each effect depends only on its own prop, so a change made inside the
|
|
103
|
+
// viewer survives the host's next render.
|
|
49
104
|
useEffect(() => {
|
|
50
105
|
if (height !== undefined) {
|
|
51
106
|
model.setHeight(height);
|
|
@@ -81,17 +136,33 @@ export default function MSAViewer({ msa, tree, gff, msaFilehandle, treeFilehandl
|
|
|
81
136
|
model.setTreeAreaWidth(treeAreaWidth);
|
|
82
137
|
}
|
|
83
138
|
}, [model, treeAreaWidth]);
|
|
84
|
-
|
|
139
|
+
useEffect(() => {
|
|
140
|
+
if (showBranchLen !== undefined) {
|
|
141
|
+
model.setShowBranchLen(showBranchLen);
|
|
142
|
+
}
|
|
143
|
+
}, [model, showBranchLen]);
|
|
144
|
+
useEffect(() => {
|
|
145
|
+
if (residueEncoding !== undefined) {
|
|
146
|
+
model.setBgColor(residueEncoding === 'fill');
|
|
147
|
+
}
|
|
148
|
+
}, [model, residueEncoding]);
|
|
149
|
+
useEffect(() => {
|
|
150
|
+
model.setHideHeader(!!hideHeader);
|
|
151
|
+
}, [model, hideHeader]);
|
|
152
|
+
// unguarded, so removing the prop turns the reference diff off
|
|
85
153
|
useEffect(() => {
|
|
86
154
|
model.drawRelativeTo(relativeTo);
|
|
87
155
|
}, [model, relativeTo]);
|
|
88
|
-
//
|
|
89
|
-
//
|
|
90
|
-
// redraw the overlay for nothing
|
|
156
|
+
// keyed by content, since a host computing a layer inline passes a new array
|
|
157
|
+
// on every render
|
|
91
158
|
const highlightsKey = JSON.stringify(highlights ?? []);
|
|
92
159
|
useEffect(() => {
|
|
93
160
|
model.setHighlights(JSON.parse(highlightsKey));
|
|
94
161
|
}, [model, highlightsKey]);
|
|
162
|
+
const cladesKey = JSON.stringify(clades ?? []);
|
|
163
|
+
useEffect(() => {
|
|
164
|
+
model.setClades(JSON.parse(cladesKey));
|
|
165
|
+
}, [model, cladesKey]);
|
|
95
166
|
const columnTracksKey = JSON.stringify(columnTracks ?? []);
|
|
96
167
|
useEffect(() => {
|
|
97
168
|
model.setColumnTracks(JSON.parse(columnTracksKey));
|
|
@@ -100,14 +171,48 @@ export default function MSAViewer({ msa, tree, gff, msaFilehandle, treeFilehandl
|
|
|
100
171
|
useEffect(() => {
|
|
101
172
|
model.setResidueMappings(JSON.parse(residueMappingsKey));
|
|
102
173
|
}, [model, residueMappingsKey]);
|
|
174
|
+
const rowDataKey = JSON.stringify(rowData ?? {});
|
|
175
|
+
useEffect(() => {
|
|
176
|
+
const table = JSON.parse(rowDataKey);
|
|
177
|
+
// an empty table leaves whatever the snapshot or a filehandle loaded
|
|
178
|
+
if (Object.keys(table).length) {
|
|
179
|
+
model.setRowData(table);
|
|
180
|
+
}
|
|
181
|
+
}, [model, rowDataKey]);
|
|
182
|
+
const encodingsKey = JSON.stringify(encodings ?? []);
|
|
183
|
+
useEffect(() => {
|
|
184
|
+
model.setEncodings(JSON.parse(encodingsKey));
|
|
185
|
+
}, [model, encodingsKey]);
|
|
186
|
+
const rowPanelsKey = JSON.stringify(rowPanels ?? []);
|
|
187
|
+
useEffect(() => {
|
|
188
|
+
model.setRowPanels(JSON.parse(rowPanelsKey));
|
|
189
|
+
}, [model, rowPanelsKey]);
|
|
103
190
|
const highlightColumnsKey = JSON.stringify(highlightColumns ?? null);
|
|
104
191
|
useEffect(() => {
|
|
105
192
|
model.setHighlightedColumns(JSON.parse(highlightColumnsKey) ?? undefined);
|
|
106
193
|
}, [model, highlightColumnsKey]);
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
194
|
+
const regionKey = JSON.stringify(region ?? null);
|
|
195
|
+
useEffect(() => {
|
|
196
|
+
const target = JSON.parse(regionKey);
|
|
197
|
+
return target
|
|
198
|
+
? when(() => model.viewInitialized && model.numColumns > 0, () => {
|
|
199
|
+
model.zoomToRegion(target);
|
|
200
|
+
})
|
|
201
|
+
: undefined;
|
|
202
|
+
}, [model, regionKey]);
|
|
203
|
+
useModelReaction(model, 'hoveredCell', onCellHover);
|
|
204
|
+
useModelReaction(model, 'clickedCell', onCellClick);
|
|
205
|
+
useModelReaction(model, 'viewport', onViewportChange);
|
|
206
|
+
const latestOnModel = useRef(onModel);
|
|
207
|
+
useEffect(() => {
|
|
208
|
+
latestOnModel.current = onModel;
|
|
209
|
+
});
|
|
210
|
+
useEffect(() => {
|
|
211
|
+
latestOnModel.current?.(model);
|
|
212
|
+
}, [model]);
|
|
213
|
+
// destroy releases the model's matchMedia listener and fetches. It waits a
|
|
214
|
+
// tick because StrictMode remounts with the same state, and the remount's
|
|
215
|
+
// effect cancels it.
|
|
111
216
|
useEffect(() => {
|
|
112
217
|
if (destroyTimer.current !== undefined) {
|
|
113
218
|
clearTimeout(destroyTimer.current);
|
|
@@ -122,7 +227,7 @@ export default function MSAViewer({ msa, tree, gff, msaFilehandle, treeFilehandl
|
|
|
122
227
|
});
|
|
123
228
|
};
|
|
124
229
|
}, [model]);
|
|
125
|
-
return (React.createElement(ThemeProvider, { theme: theme },
|
|
230
|
+
return (React.createElement(ThemeProvider, { theme: resolveTheme(theme) },
|
|
126
231
|
React.createElement("div", { ref: ref },
|
|
127
232
|
React.createElement(Loading, { model: model }))));
|
|
128
233
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MSAViewer.js","sourceRoot":"","sources":["../../src/components/MSAViewer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAE1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AAC3D,OAAO,UAAU,MAAM,+BAA+B,CAAA;AACtD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAA;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;
|
|
1
|
+
{"version":3,"file":"MSAViewer.js","sourceRoot":"","sources":["../../src/components/MSAViewer.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* A tooltip beside the pointer, portaled to the body. A panel's scroll
|
|
4
|
+
* transform is a containing block, so a fixed tooltip left inside it would
|
|
5
|
+
* position against the scrolled content instead of the window.
|
|
6
|
+
*/
|
|
7
|
+
export default function PortalTooltip({ clientX, clientY, children, }: {
|
|
8
|
+
clientX: number;
|
|
9
|
+
clientY: number;
|
|
10
|
+
children: React.ReactNode;
|
|
11
|
+
}): React.ReactPortal;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { makeStyles } from '@jbrowse/core/util/tss-react';
|
|
3
|
+
import { createPortal } from 'react-dom';
|
|
4
|
+
const useStyles = makeStyles()(theme => ({
|
|
5
|
+
tooltip: {
|
|
6
|
+
position: 'fixed',
|
|
7
|
+
pointerEvents: 'none',
|
|
8
|
+
zIndex: 10000,
|
|
9
|
+
backgroundColor: theme.palette.grey[700],
|
|
10
|
+
color: theme.palette.common.white,
|
|
11
|
+
padding: '4px 8px',
|
|
12
|
+
borderRadius: 4,
|
|
13
|
+
fontSize: 12,
|
|
14
|
+
whiteSpace: 'nowrap',
|
|
15
|
+
maxWidth: 300,
|
|
16
|
+
overflow: 'hidden',
|
|
17
|
+
textOverflow: 'ellipsis',
|
|
18
|
+
},
|
|
19
|
+
}));
|
|
20
|
+
/**
|
|
21
|
+
* A tooltip beside the pointer, portaled to the body. A panel's scroll
|
|
22
|
+
* transform is a containing block, so a fixed tooltip left inside it would
|
|
23
|
+
* position against the scrolled content instead of the window.
|
|
24
|
+
*/
|
|
25
|
+
export default function PortalTooltip({ clientX, clientY, children, }) {
|
|
26
|
+
const { classes } = useStyles();
|
|
27
|
+
return createPortal(React.createElement("div", { className: classes.tooltip, style: { left: clientX + 12, top: clientY + 12 } }, children), document.body);
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=PortalTooltip.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PortalTooltip.js","sourceRoot":"","sources":["../../src/components/PortalTooltip.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAA;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAExC,MAAM,SAAS,GAAG,UAAU,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACvC,OAAO,EAAE;QACP,QAAQ,EAAE,OAAO;QACjB,aAAa,EAAE,MAAM;QACrB,MAAM,EAAE,KAAK;QACb,eAAe,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;QACxC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK;QACjC,OAAO,EAAE,SAAS;QAClB,YAAY,EAAE,CAAC;QACf,QAAQ,EAAE,EAAE;QACZ,UAAU,EAAE,QAAQ;QACpB,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,QAAQ;QAClB,YAAY,EAAE,UAAU;KACzB;CACF,CAAC,CAAC,CAAA;AAEH;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,EACpC,OAAO,EACP,OAAO,EACP,QAAQ,GAKT;IACC,MAAM,EAAE,OAAO,EAAE,GAAG,SAAS,EAAE,CAAA;IAC/B,OAAO,YAAY,CACjB,6BACE,SAAS,EAAE,OAAO,CAAC,OAAO,EAC1B,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,GAAG,EAAE,EAAE,GAAG,EAAE,OAAO,GAAG,EAAE,EAAE,IAE/C,QAAQ,CACL,EACN,QAAQ,CAAC,IAAI,CACd,CAAA;AACH,CAAC"}
|
|
@@ -13,38 +13,20 @@ export const HorizontalResizeHandle = observer(function ({ model, }) {
|
|
|
13
13
|
}, [model]);
|
|
14
14
|
return (React.createElement(DragHandle, { axis: "y", variant: "resizer", getStart: () => model.height, onDrag: onDrag, style: { width: '100%', height: model.resizeHandleWidth } }));
|
|
15
15
|
});
|
|
16
|
-
// The volatile behind each resizable kind of computed track. Both bar tracks
|
|
17
|
-
// write one height so conservation and property conservation stay directly
|
|
18
|
-
// comparable; the logo keeps its own, being taller by default. Text tracks are
|
|
19
|
-
// absent: they are one alignment row tall and follow rowHeight, so the zoom
|
|
20
|
-
// controls already size them.
|
|
21
|
-
const setTrackHeight = {
|
|
22
|
-
bar: (model, height) => {
|
|
23
|
-
model.setConservationTrackHeight(height);
|
|
24
|
-
},
|
|
25
|
-
logo: (model, height) => {
|
|
26
|
-
model.setSequenceLogoTrackHeight(height);
|
|
27
|
-
},
|
|
28
|
-
arc: (model, height) => {
|
|
29
|
-
model.setArcTrackHeight(height);
|
|
30
|
-
},
|
|
31
|
-
};
|
|
32
16
|
export const TrackResizeHandle = observer(function ({ model, track, }) {
|
|
33
|
-
const { id,
|
|
34
|
-
|
|
35
|
-
//
|
|
36
|
-
//
|
|
37
|
-
|
|
17
|
+
const { id, heightKey, height } = track.model;
|
|
18
|
+
// tracks sharing a key resize together, so only the last turned-on one of
|
|
19
|
+
// them carries the divider: a second between conservation and property
|
|
20
|
+
// conservation would move the pair this one already moves. The drag divides
|
|
21
|
+
// across the group, so its bottom edge follows the cursor rather than half
|
|
22
|
+
const siblings = model.turnedOnTracks.filter(t => t.model.heightKey === heightKey);
|
|
23
|
+
const count = siblings.length;
|
|
38
24
|
const onDrag = useCallback((delta, startHeight) => {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
model.setColumnTrackHeight(id, next);
|
|
25
|
+
if (heightKey) {
|
|
26
|
+
model.setTrackHeight(heightKey, Math.max(10, startHeight + delta / count));
|
|
42
27
|
}
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
}
|
|
46
|
-
}, [model, id, kind, ownHeight]);
|
|
47
|
-
return setHeight ? (React.createElement(DragHandle, { axis: "y", variant: "resizer", getStart: () => height, onDrag: onDrag, style: {
|
|
28
|
+
}, [model, heightKey, count]);
|
|
29
|
+
return heightKey && siblings.at(-1)?.model.id === id ? (React.createElement(DragHandle, { axis: "y", variant: "resizer", getStart: () => height, onDrag: onDrag, style: {
|
|
48
30
|
position: 'absolute',
|
|
49
31
|
bottom: 0,
|
|
50
32
|
left: 0,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ResizeHandles.js","sourceRoot":"","sources":["../../src/components/ResizeHandles.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,WAAW,EAAE,MAAM,OAAO,CAAA;AAE1C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAErC,OAAO,UAAU,MAAM,iBAAkB,CAAA;AAKzC,MAAM,CAAC,MAAM,oBAAoB,GAAG,QAAQ,CAAC,UAAU,EACrD,KAAK,GAGN;IACC,MAAM,MAAM,GAAG,WAAW,CACxB,CAAC,KAAa,EAAE,UAAkB,EAAE,EAAE;QACpC,KAAK,CAAC,gBAAgB,CAAC,UAAU,GAAG,KAAK,CAAC,CAAA;IAC5C,CAAC,EACD,CAAC,KAAK,CAAC,CACR,CAAA;IACD,OAAO,CACL,oBAAC,UAAU,IACT,IAAI,EAAC,GAAG,EACR,OAAO,EAAC,SAAS,EACjB,QAAQ,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,aAAa,EACnC,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,iBAAiB,EAAE,GACzC,CACH,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG,QAAQ,CAAC,UAAU,EACvD,KAAK,GAGN;IACC,MAAM,MAAM,GAAG,WAAW,CACxB,CAAC,KAAa,EAAE,WAAmB,EAAE,EAAE;QACrC,KAAK,CAAC,SAAS,CAAC,WAAW,GAAG,KAAK,CAAC,CAAA;IACtC,CAAC,EACD,CAAC,KAAK,CAAC,CACR,CAAA;IACD,OAAO,CACL,oBAAC,UAAU,IACT,IAAI,EAAC,GAAG,EACR,OAAO,EAAC,SAAS,EACjB,QAAQ,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,EAC5B,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,iBAAiB,EAAE,GACzD,CACH,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,
|
|
1
|
+
{"version":3,"file":"ResizeHandles.js","sourceRoot":"","sources":["../../src/components/ResizeHandles.tsx"],"names":[],"mappings":"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"}
|
|
@@ -4,17 +4,16 @@ import { TextField } from '@mui/material';
|
|
|
4
4
|
import { getUngappedSequence } from 'msa-parsers';
|
|
5
5
|
import Checkbox2 from './Checkbox2.js';
|
|
6
6
|
import CopyButton from './CopyButton.js';
|
|
7
|
-
const useStyles = makeStyles()({
|
|
7
|
+
const useStyles = makeStyles()(theme => ({
|
|
8
8
|
textAreaFont: {
|
|
9
9
|
fontFamily: 'Courier New',
|
|
10
10
|
wordWrap: 'break-word',
|
|
11
11
|
},
|
|
12
12
|
dialogContent: {
|
|
13
|
-
background:
|
|
13
|
+
background: theme.palette.action.selected,
|
|
14
14
|
margin: 4,
|
|
15
|
-
minWidth: '80em',
|
|
16
15
|
},
|
|
17
|
-
});
|
|
16
|
+
}));
|
|
18
17
|
export default function SequenceTextArea({ str }) {
|
|
19
18
|
const { classes } = useStyles();
|
|
20
19
|
const [showGaps, setShowGaps] = useState(false);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SequenceTextArea.js","sourceRoot":"","sources":["../../src/components/SequenceTextArea.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAEvC,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAA;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AACzC,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAEjD,OAAO,SAAS,MAAM,gBAAiB,CAAA;AACvC,OAAO,UAAU,MAAM,iBAAkB,CAAA;AAEzC,MAAM,SAAS,GAAG,UAAU,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"SequenceTextArea.js","sourceRoot":"","sources":["../../src/components/SequenceTextArea.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAEvC,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAA;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AACzC,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAEjD,OAAO,SAAS,MAAM,gBAAiB,CAAA;AACvC,OAAO,UAAU,MAAM,iBAAkB,CAAA;AAEzC,MAAM,SAAS,GAAG,UAAU,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACvC,YAAY,EAAE;QACZ,UAAU,EAAE,aAAa;QACzB,QAAQ,EAAE,YAAY;KACvB;IACD,aAAa,EAAE;QACb,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ;QACzC,MAAM,EAAE,CAAC;KACV;CACF,CAAC,CAAC,CAAA;AAEH,MAAM,CAAC,OAAO,UAAU,gBAAgB,CAAC,EAAE,GAAG,EAA+B;IAC3E,MAAM,EAAE,OAAO,EAAE,GAAG,SAAS,EAAE,CAAA;IAC/B,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAC/C,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAEjD,MAAM,IAAI,GAAG,GAAG;SACb,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAU,CAAC;SACzE,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,SAAS,IAAI,CAAC,CAAC,EAAE,CAAC;SACrC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;SAClC,IAAI,CAAC,IAAI,CAAC,CAAA;IACb,OAAO,CACL;QACE,oBAAC,UAAU,IAAC,IAAI,EAAE,IAAI,GAAI;QAC1B,oBAAC,SAAS,IACR,KAAK,EAAC,WAAW,EACjB,OAAO,EAAE,QAAQ,EACjB,QAAQ,EAAE,GAAG,EAAE;gBACb,WAAW,CAAC,CAAC,QAAQ,CAAC,CAAA;YACxB,CAAC,GACD;QACF,oBAAC,SAAS,IACR,KAAK,EAAC,YAAY,EAClB,OAAO,EAAE,SAAS,EAClB,QAAQ,EAAE,GAAG,EAAE;gBACb,YAAY,CAAC,CAAC,SAAS,CAAC,CAAA;YAC1B,CAAC,GACD;QACF,oBAAC,SAAS,IACR,OAAO,EAAC,UAAU,EAClB,SAAS,QACT,SAAS,EAAE,OAAO,CAAC,aAAa,EAChC,OAAO,EAAE,CAAC,EACV,OAAO,EAAE,EAAE,EACX,SAAS,QACT,KAAK,EAAE,IAAI,EACX,SAAS,EAAE;gBACT,KAAK,EAAE;oBACL,QAAQ,EAAE,IAAI;oBACd,SAAS,EAAE,OAAO,CAAC,YAAY;iBAChC;aACF,GACD,CACD,CACJ,CAAA;AACH,CAAC"}
|
package/dist/components/Track.js
CHANGED
|
@@ -1,15 +1,29 @@
|
|
|
1
1
|
import React, { lazy, useCallback, useRef, useState } from 'react';
|
|
2
|
+
import BaseTooltip from '@jbrowse/core/ui/BaseTooltip';
|
|
2
3
|
import { makeStyles } from '@jbrowse/core/util/tss-react';
|
|
3
4
|
import ArrowDropDownIcon from '@mui/icons-material/ArrowDropDown';
|
|
4
5
|
import { IconButton, Menu, MenuItem } from '@mui/material';
|
|
5
6
|
import { observer } from 'mobx-react';
|
|
6
7
|
import { useWheelScroll } from '../useWheelScroll.js';
|
|
8
|
+
import TrackTooltipContent from './tracks/TrackTooltipContent.js';
|
|
9
|
+
import { useTrackHover } from './tracks/useTrackHover.js';
|
|
7
10
|
const TrackInfoDialog = lazy(() => import('./dialogs/TrackInfoDialog.js'));
|
|
8
|
-
const useStyles = makeStyles()({
|
|
11
|
+
const useStyles = makeStyles()(theme => ({
|
|
9
12
|
button: {
|
|
10
13
|
padding: 0,
|
|
11
14
|
},
|
|
12
|
-
|
|
15
|
+
// a hairline under every track but the last, across the labels as well as
|
|
16
|
+
// the alignment. The divider a track's resize handle draws covers only the
|
|
17
|
+
// alignment, and tracks sharing a height have no handle between them. Inset,
|
|
18
|
+
// so the line costs no layout height: totalTrackAreaHeight sums the model's
|
|
19
|
+
// heights, and the column indicator is drawn against that sum
|
|
20
|
+
row: {
|
|
21
|
+
display: 'flex',
|
|
22
|
+
'&:not(:last-child)': {
|
|
23
|
+
boxShadow: `inset 0 -1px 0 ${theme.palette.divider}`,
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
}));
|
|
13
27
|
const TrackLabel = observer(function TrackLabel({ model, track, }) {
|
|
14
28
|
const [anchorEl, setAnchorEl] = useState();
|
|
15
29
|
const closeMenu = () => {
|
|
@@ -23,14 +37,21 @@ const TrackLabel = observer(function TrackLabel({ model, track, }) {
|
|
|
23
37
|
width,
|
|
24
38
|
height,
|
|
25
39
|
flexShrink: 0,
|
|
26
|
-
|
|
40
|
+
display: 'flex',
|
|
41
|
+
alignItems: 'flex-start',
|
|
42
|
+
justifyContent: 'flex-end',
|
|
43
|
+
gap: 2,
|
|
27
44
|
fontSize: trackLabelHeight,
|
|
28
45
|
} },
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
46
|
+
React.createElement("span", { title: name, style: {
|
|
47
|
+
overflow: 'hidden',
|
|
48
|
+
textOverflow: 'ellipsis',
|
|
49
|
+
whiteSpace: 'nowrap',
|
|
50
|
+
} }, drawLabels ? name : ''),
|
|
51
|
+
React.createElement(IconButton, { className: classes.button, "aria-label": `${name} track menu`, style: {
|
|
32
52
|
width: trackLabelHeight,
|
|
33
53
|
height: trackLabelHeight,
|
|
54
|
+
flexShrink: 0,
|
|
34
55
|
}, onClick: event => {
|
|
35
56
|
setAnchorEl(event.currentTarget);
|
|
36
57
|
} },
|
|
@@ -41,7 +62,7 @@ const TrackLabel = observer(function TrackLabel({ model, track, }) {
|
|
|
41
62
|
React.createElement(MenuItem, { dense: true, onClick: () => {
|
|
42
63
|
model.toggleTrack(track.model.id);
|
|
43
64
|
closeMenu();
|
|
44
|
-
} }, "
|
|
65
|
+
} }, "Hide track"),
|
|
45
66
|
React.createElement(MenuItem, { dense: true, onClick: () => {
|
|
46
67
|
model.queueDialog(onClose => [
|
|
47
68
|
TrackInfoDialog,
|
|
@@ -51,33 +72,31 @@ const TrackLabel = observer(function TrackLabel({ model, track, }) {
|
|
|
51
72
|
} }, "Get info"))) : null));
|
|
52
73
|
});
|
|
53
74
|
const Track = observer(function ({ model, track, }) {
|
|
54
|
-
const { resizeHandleWidth,
|
|
75
|
+
const { resizeHandleWidth, rowPanelsWidth, showColumnStats } = model;
|
|
55
76
|
const { model: { height }, } = track;
|
|
56
77
|
const ref = useRef(null);
|
|
57
78
|
const onScrollX = useCallback((d) => {
|
|
58
79
|
model.doScrollX(d);
|
|
59
80
|
}, [model]);
|
|
60
81
|
useWheelScroll({ ref, onScrollX });
|
|
61
|
-
|
|
82
|
+
const { classes } = useStyles();
|
|
83
|
+
const { hover, onMouseMove, onMouseLeave } = useTrackHover({
|
|
84
|
+
model,
|
|
85
|
+
tooltip: showColumnStats,
|
|
86
|
+
});
|
|
87
|
+
return (React.createElement("div", { className: classes.row, style: { height } },
|
|
62
88
|
React.createElement(TrackLabel, { model: model, track: track }),
|
|
63
|
-
React.createElement("div", { style: { width: resizeHandleWidth, flexShrink: 0 } }),
|
|
64
|
-
React.createElement("div", { ref: ref, onMouseMove: event => {
|
|
65
|
-
if (
|
|
66
|
-
|
|
67
|
-
}
|
|
68
|
-
const { left } = ref.current.getBoundingClientRect();
|
|
69
|
-
const mouseX = event.clientX - left - scrollX;
|
|
70
|
-
const col = Math.floor(mouseX / colWidth);
|
|
71
|
-
if (col >= 0 && col < numColumns) {
|
|
72
|
-
model.setMousePos(col, undefined);
|
|
73
|
-
}
|
|
74
|
-
else {
|
|
75
|
-
model.setMousePos(undefined, undefined);
|
|
89
|
+
React.createElement("div", { style: { width: rowPanelsWidth + resizeHandleWidth, flexShrink: 0 } }),
|
|
90
|
+
React.createElement("div", { ref: ref, "data-testid": `track_${track.model.id}`, onMouseMove: event => {
|
|
91
|
+
if (ref.current) {
|
|
92
|
+
onMouseMove(event, ref.current);
|
|
76
93
|
}
|
|
77
94
|
}, onMouseLeave: () => {
|
|
78
|
-
|
|
95
|
+
onMouseLeave();
|
|
79
96
|
} },
|
|
80
|
-
React.createElement(track.ReactComponent, { model: model, track: track })
|
|
97
|
+
React.createElement(track.ReactComponent, { model: model, track: track }),
|
|
98
|
+
hover ? (React.createElement(BaseTooltip, { clientPoint: { x: hover.x, y: hover.y + 15 } },
|
|
99
|
+
React.createElement(TrackTooltipContent, { model: model, track: track, col: hover.col }))) : null)));
|
|
81
100
|
});
|
|
82
101
|
export default Track;
|
|
83
102
|
//# sourceMappingURL=Track.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Track.js","sourceRoot":"","sources":["../../src/components/Track.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAElE,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAA;AACzD,OAAO,iBAAiB,MAAM,mCAAmC,CAAA;AACjE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAErC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;
|
|
1
|
+
{"version":3,"file":"Track.js","sourceRoot":"","sources":["../../src/components/Track.tsx"],"names":[],"mappings":"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"}
|
|
@@ -11,32 +11,32 @@ export default function AboutDialog({ onClose }) {
|
|
|
11
11
|
"MSAView ",
|
|
12
12
|
version,
|
|
13
13
|
" (",
|
|
14
|
-
React.createElement(Link, { href: "https://github.com/gmod/react-msaview" }, "Github"),
|
|
14
|
+
React.createElement(Link, { target: "_blank", rel: "noopener", href: "https://github.com/gmod/react-msaview" }, "Github"),
|
|
15
15
|
")"),
|
|
16
16
|
React.createElement("ul", null,
|
|
17
17
|
React.createElement("li", null,
|
|
18
18
|
React.createElement(Typography, null,
|
|
19
19
|
"We use some color schemes from the",
|
|
20
20
|
' ',
|
|
21
|
-
React.createElement(Link, { href: "https://github.com/biotite-dev/biotite" }, "biotite"),
|
|
21
|
+
React.createElement(Link, { target: "_blank", rel: "noopener", href: "https://github.com/biotite-dev/biotite" }, "biotite"),
|
|
22
22
|
' ',
|
|
23
23
|
"project, and their license is reproduced",
|
|
24
24
|
' ',
|
|
25
|
-
React.createElement(Link, { href: "https://github.com/biotite-dev/biotite/blob/master/LICENSE.rst" }, "here"))),
|
|
25
|
+
React.createElement(Link, { target: "_blank", rel: "noopener", href: "https://github.com/biotite-dev/biotite/blob/master/LICENSE.rst" }, "here"))),
|
|
26
26
|
React.createElement("li", null,
|
|
27
27
|
React.createElement(Typography, null,
|
|
28
28
|
"See this page for some information on jalview colorings",
|
|
29
29
|
' ',
|
|
30
|
-
React.createElement(Link, { href: "https://www.jalview.org/help/html/colourSchemes/" }, "here"))),
|
|
30
|
+
React.createElement(Link, { target: "_blank", rel: "noopener", href: "https://www.jalview.org/help/html/colourSchemes/" }, "here"))),
|
|
31
31
|
React.createElement("li", null,
|
|
32
32
|
React.createElement(Typography, null,
|
|
33
33
|
"See this page for some info on the clustal, cinema, maeditor, and lesk color schemes",
|
|
34
34
|
' ',
|
|
35
|
-
React.createElement(Link, { href: "http://www.bioinformatics.nl/~berndb/aacolour.html" }, "here"))),
|
|
35
|
+
React.createElement(Link, { target: "_blank", rel: "noopener", href: "http://www.bioinformatics.nl/~berndb/aacolour.html" }, "here"))),
|
|
36
36
|
React.createElement("li", null,
|
|
37
37
|
React.createElement(Typography, null,
|
|
38
38
|
"See this paper about the flower color scheme",
|
|
39
39
|
' ',
|
|
40
|
-
React.createElement(Link, { href: "https://www.ncbi.nlm.nih.gov/pmc/articles/PMC7245768/" }, "here")))))));
|
|
40
|
+
React.createElement(Link, { target: "_blank", rel: "noopener", href: "https://www.ncbi.nlm.nih.gov/pmc/articles/PMC7245768/" }, "here")))))));
|
|
41
41
|
}
|
|
42
42
|
//# sourceMappingURL=AboutDialog.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AboutDialog.js","sourceRoot":"","sources":["../../../src/components/dialogs/AboutDialog.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACzC,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAE/D,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAE1C,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,EAAE,OAAO,EAA2B;IACtE,OAAO,CACL,oBAAC,MAAM,IACL,IAAI,QACJ,KAAK,EAAC,OAAO,EACb,OAAO,EAAE,GAAG,EAAE;YACZ,OAAO,EAAE,CAAA;QACX,CAAC;QAED,oBAAC,aAAa;YACZ,oBAAC,UAAU;;gBACA,OAAO;;gBAChB,oBAAC,IAAI,
|
|
1
|
+
{"version":3,"file":"AboutDialog.js","sourceRoot":"","sources":["../../../src/components/dialogs/AboutDialog.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACzC,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAE/D,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAE1C,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,EAAE,OAAO,EAA2B;IACtE,OAAO,CACL,oBAAC,MAAM,IACL,IAAI,QACJ,KAAK,EAAC,OAAO,EACb,OAAO,EAAE,GAAG,EAAE;YACZ,OAAO,EAAE,CAAA;QACX,CAAC;QAED,oBAAC,aAAa;YACZ,oBAAC,UAAU;;gBACA,OAAO;;gBAChB,oBAAC,IAAI,IACH,MAAM,EAAC,QAAQ,EACf,GAAG,EAAC,UAAU,EACd,IAAI,EAAC,uCAAuC,aAGvC;oBAEI;YAEb;gBACE;oBACE,oBAAC,UAAU;;wBAC0B,GAAG;wBACtC,oBAAC,IAAI,IACH,MAAM,EAAC,QAAQ,EACf,GAAG,EAAC,UAAU,EACd,IAAI,EAAC,wCAAwC,cAGxC;wBAAC,GAAG;;wBAC8B,GAAG;wBAC5C,oBAAC,IAAI,IACH,MAAM,EAAC,QAAQ,EACf,GAAG,EAAC,UAAU,EACd,IAAI,EAAC,gEAAgE,WAGhE,CACI,CACV;gBACL;oBACE,oBAAC,UAAU;;wBAC+C,GAAG;wBAC3D,oBAAC,IAAI,IACH,MAAM,EAAC,QAAQ,EACf,GAAG,EAAC,UAAU,EACd,IAAI,EAAC,kDAAkD,WAGlD,CACI,CACV;gBACL;oBACE,oBAAC,UAAU;;wBAEU,GAAG;wBACtB,oBAAC,IAAI,IACH,MAAM,EAAC,QAAQ,EACf,GAAG,EAAC,UAAU,EACd,IAAI,EAAC,oDAAoD,WAGpD,CACI,CACV;gBACL;oBACE,oBAAC,UAAU;;wBACoC,GAAG;wBAChD,oBAAC,IAAI,IACH,MAAM,EAAC,QAAQ,EACf,GAAG,EAAC,UAAU,EACd,IAAI,EAAC,uDAAuD,WAGvD,CACI,CACV,CACF,CACS,CACT,CACV,CAAA;AACH,CAAC"}
|
|
@@ -60,7 +60,7 @@ const AnnotationFileDialog = observer(function ({ handleClose, model, }) {
|
|
|
60
60
|
} })),
|
|
61
61
|
file ? React.createElement(Typography, null, file.name) : null)))),
|
|
62
62
|
React.createElement(DialogActions, null,
|
|
63
|
-
React.createElement(Button, { variant: "contained", color: "primary", disabled: loading, onClick: () => {
|
|
63
|
+
React.createElement(Button, { variant: "contained", color: "primary", disabled: loading || (choice === 'file' ? !file : !url.trim()), onClick: () => {
|
|
64
64
|
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
65
65
|
;
|
|
66
66
|
(async () => {
|
|
@@ -86,7 +86,10 @@ const AnnotationFileDialog = observer(function ({ handleClose, model, }) {
|
|
|
86
86
|
setLoading(false);
|
|
87
87
|
}
|
|
88
88
|
})();
|
|
89
|
-
} }, "Open annotations")
|
|
89
|
+
} }, "Open annotations"),
|
|
90
|
+
React.createElement(Button, { variant: "contained", color: "secondary", onClick: () => {
|
|
91
|
+
handleClose();
|
|
92
|
+
} }, "Cancel"))));
|
|
90
93
|
});
|
|
91
94
|
export default AnnotationFileDialog;
|
|
92
95
|
//# sourceMappingURL=AnnotationFileDialog.js.map
|