react-msaview 5.4.1 → 5.6.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/LICENSE +21 -0
- package/bundle/index.js +487 -149
- package/bundle/index.js.map +7 -1
- package/dist/colorSchemes.js +11 -7
- package/dist/colorSchemes.js.map +1 -1
- package/dist/components/ConservationTrack.js +20 -26
- package/dist/components/ConservationTrack.js.map +1 -1
- package/dist/components/MSAViewer.d.ts +13 -1
- package/dist/components/MSAViewer.js +13 -7
- package/dist/components/MSAViewer.js.map +1 -1
- package/dist/components/SequenceTextArea.js +1 -1
- package/dist/components/SequenceTextArea.js.map +1 -1
- package/dist/components/TextTrack.js +20 -27
- package/dist/components/TextTrack.js.map +1 -1
- package/dist/components/Track.js +9 -6
- package/dist/components/Track.js.map +1 -1
- package/dist/components/dialogs/FeatureDialog.js +27 -23
- 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/ColorSchemeMenu.js +1 -1
- package/dist/components/header/ColorSchemeMenu.js.map +1 -1
- package/dist/components/header/FileMenu.js +1 -16
- package/dist/components/header/FileMenu.js.map +1 -1
- package/dist/components/header/Header.js +6 -5
- package/dist/components/header/Header.js.map +1 -1
- package/dist/components/header/HeaderInfoArea.js +1 -1
- package/dist/components/header/HeaderInfoArea.js.map +1 -1
- package/dist/components/header/HeaderStatusArea.js +1 -1
- package/dist/components/header/HeaderStatusArea.js.map +1 -1
- package/dist/components/header/MSASettingsMenu.js +1 -1
- package/dist/components/header/MSASettingsMenu.js.map +1 -1
- package/dist/components/header/MultiAlignmentSelector.js +0 -0
- package/dist/components/header/MultiAlignmentSelector.js.map +1 -1
- package/dist/components/header/TreeSettingsMenu.js +1 -1
- package/dist/components/header/TreeSettingsMenu.js.map +1 -1
- package/dist/components/header/ZoomControls.js +14 -12
- package/dist/components/header/ZoomControls.js.map +1 -1
- package/dist/components/header/ZoomMenu.js +1 -10
- package/dist/components/header/ZoomMenu.js.map +1 -1
- package/dist/components/header/settingsMenuItems.js +9 -1
- package/dist/components/header/settingsMenuItems.js.map +1 -1
- package/dist/components/{header/HeaderMenu.d.ts → msa/ColumnStats.d.ts} +3 -3
- package/dist/components/msa/ColumnStats.js +42 -0
- package/dist/components/msa/ColumnStats.js.map +1 -0
- package/dist/components/msa/DomainLegend.d.ts +6 -0
- package/dist/components/msa/DomainLegend.js +41 -0
- package/dist/components/msa/DomainLegend.js.map +1 -0
- package/dist/components/msa/MSACanvasBlock.js +41 -29
- package/dist/components/msa/MSACanvasBlock.js.map +1 -1
- package/dist/components/msa/MSAMouseoverCanvas.js +6 -12
- package/dist/components/msa/MSAMouseoverCanvas.js.map +1 -1
- package/dist/components/msa/MSAPanel.js +3 -1
- package/dist/components/msa/MSAPanel.js.map +1 -1
- package/dist/components/msa/renderBoxFeatureCanvasBlock.js +60 -14
- package/dist/components/msa/renderBoxFeatureCanvasBlock.js.map +1 -1
- package/dist/components/msa/renderMSABlock.js +3 -3
- package/dist/components/msa/renderMSABlock.js.map +1 -1
- package/dist/components/msa/renderMSAMouseover.js +33 -6
- package/dist/components/msa/renderMSAMouseover.js.map +1 -1
- package/dist/components/overlayColors.d.ts +3 -0
- package/dist/components/overlayColors.js +11 -0
- package/dist/components/overlayColors.js.map +1 -0
- package/dist/components/renderCtx.d.ts +1 -1
- package/dist/components/tracks/renderTracksSvg.d.ts +6 -3
- package/dist/components/tracks/renderTracksSvg.js +20 -11
- package/dist/components/tracks/renderTracksSvg.js.map +1 -1
- package/dist/components/tree/TreeCanvas.js +31 -38
- package/dist/components/tree/TreeCanvas.js.map +1 -1
- package/dist/components/tree/TreeCanvasBlock.js +12 -47
- package/dist/components/tree/TreeCanvasBlock.js.map +1 -1
- package/dist/components/tree/clickMap.d.ts +24 -0
- package/dist/components/tree/clickMap.js +33 -0
- package/dist/components/tree/clickMap.js.map +1 -0
- package/dist/components/tree/renderTreeCanvas.d.ts +1 -21
- package/dist/components/tree/renderTreeCanvas.js +8 -7
- package/dist/components/tree/renderTreeCanvas.js.map +1 -1
- package/dist/constants.d.ts +4 -0
- package/dist/constants.js +17 -0
- package/dist/constants.js.map +1 -1
- package/dist/createPaletteMap.d.ts +5 -2
- package/dist/createPaletteMap.js +15 -5
- package/dist/createPaletteMap.js.map +1 -1
- package/dist/fetchUtils.d.ts +2 -1
- package/dist/fetchUtils.js +3 -2
- package/dist/fetchUtils.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/launchInterProScan.d.ts +2 -0
- package/dist/launchInterProScan.js.map +1 -1
- package/dist/model/msaModel.d.ts +25 -2
- package/dist/model/msaModel.js +15 -3
- package/dist/model/msaModel.js.map +1 -1
- package/dist/model/treeModel.d.ts +46 -5
- package/dist/model/treeModel.js +20 -7
- package/dist/model/treeModel.js.map +1 -1
- package/dist/model.d.ts +641 -133
- package/dist/model.js +191 -77
- package/dist/model.js.map +1 -1
- package/dist/propertyConservation.d.ts +7 -0
- package/dist/propertyConservation.js +66 -0
- package/dist/propertyConservation.js.map +1 -0
- package/dist/renderToSvg.js +104 -74
- package/dist/renderToSvg.js.map +1 -1
- package/dist/types.d.ts +4 -1
- package/dist/{webpack.js → umd.js} +1 -1
- package/dist/umd.js.map +1 -0
- package/dist/useCanvasAutorun.d.ts +2 -0
- package/dist/useCanvasAutorun.js +23 -0
- package/dist/useCanvasAutorun.js.map +1 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +7 -8
- package/src/colorSchemes.docs.test.ts +55 -0
- package/src/colorSchemes.ts +12 -7
- package/src/columnStats.test.ts +94 -0
- package/src/components/ConservationTrack.tsx +17 -15
- package/src/components/MSAViewer.tsx +42 -18
- package/src/components/SequenceTextArea.tsx +1 -1
- package/src/components/TextTrack.tsx +7 -11
- package/src/components/Track.tsx +9 -6
- package/src/components/dialogs/FeatureDialog.tsx +62 -48
- package/src/components/dialogs/TrackInfoDialog.tsx +1 -1
- package/src/components/header/ColorSchemeMenu.tsx +1 -0
- package/src/components/header/FileMenu.tsx +1 -15
- package/src/components/header/Header.tsx +11 -8
- package/src/components/header/HeaderInfoArea.tsx +1 -1
- package/src/components/header/HeaderStatusArea.tsx +1 -1
- package/src/components/header/MSASettingsMenu.tsx +1 -0
- package/src/components/header/MultiAlignmentSelector.tsx +0 -0
- package/src/components/header/TreeSettingsMenu.tsx +1 -0
- package/src/components/header/ZoomControls.tsx +24 -17
- package/src/components/header/ZoomMenu.tsx +1 -10
- package/src/components/header/settingsMenuItems.ts +9 -1
- package/src/components/msa/ColumnStats.tsx +54 -0
- package/src/components/msa/DomainLegend.tsx +78 -0
- package/src/components/msa/MSACanvasBlock.tsx +46 -25
- package/src/components/msa/MSAMouseoverCanvas.tsx +10 -13
- package/src/components/msa/MSAPanel.tsx +2 -0
- package/src/components/msa/renderBoxFeatureCanvasBlock.ts +75 -17
- package/src/components/msa/renderMSABlock.ts +3 -3
- package/src/components/msa/renderMSAMouseover.ts +34 -6
- package/src/components/overlayColors.ts +12 -0
- package/src/components/renderCtx.ts +1 -0
- package/src/components/tracks/renderTracksSvg.ts +25 -11
- package/src/components/tree/TreeCanvas.tsx +47 -54
- package/src/components/tree/TreeCanvasBlock.tsx +10 -68
- package/src/components/tree/clickMap.ts +55 -0
- package/src/components/tree/renderTreeCanvas.ts +10 -34
- package/src/constants.ts +19 -0
- package/src/createPaletteMap.ts +18 -5
- package/src/fetchUtils.ts +6 -3
- package/src/index.ts +1 -1
- package/src/launchInterProScan.ts +3 -1
- package/src/model/msaModel.ts +21 -3
- package/src/model/treeModel.ts +21 -7
- package/src/model.ts +221 -119
- package/src/propertyConservation.test.ts +47 -0
- package/src/propertyConservation.ts +73 -0
- package/src/renderDomainLegendSvg.test.tsx +134 -0
- package/src/renderToSvg.tsx +210 -147
- package/src/segmentOverlay.test.ts +70 -0
- package/src/stripDefaultSnapshot.test.ts +54 -0
- package/src/types.ts +7 -1
- package/src/useCanvasAutorun.ts +28 -0
- package/src/version.ts +1 -1
- package/bundle/index.js.LICENSE.txt +0 -100
- package/dist/components/dialogs/SettingsDialog.d.ts +0 -7
- package/dist/components/dialogs/SettingsDialog.js +0 -100
- package/dist/components/dialogs/SettingsDialog.js.map +0 -1
- package/dist/components/header/HeaderMenu.js +0 -27
- package/dist/components/header/HeaderMenu.js.map +0 -1
- package/dist/components/util.d.ts +0 -1
- package/dist/components/util.js +0 -7
- package/dist/components/util.js.map +0 -1
- package/dist/webpack.js.map +0 -1
- package/src/components/dialogs/SettingsDialog.tsx +0 -234
- package/src/components/header/HeaderMenu.tsx +0 -38
- package/src/components/util.ts +0 -9
- /package/dist/{webpack.d.ts → umd.d.ts} +0 -0
- /package/src/{webpack.ts → umd.ts} +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
+
import { makeStyles } from '@jbrowse/core/util/tss-react';
|
|
2
3
|
import { Typography } from '@mui/material';
|
|
3
4
|
import { observer } from 'mobx-react';
|
|
4
|
-
import { makeStyles } from 'tss-react/mui';
|
|
5
5
|
const useStyles = makeStyles()({
|
|
6
6
|
container: {
|
|
7
7
|
display: 'flex',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HeaderInfoArea.js","sourceRoot":"","sources":["../../../src/components/header/HeaderInfoArea.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,UAAU,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"HeaderInfoArea.js","sourceRoot":"","sources":["../../../src/components/header/HeaderInfoArea.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAA;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAIrC,MAAM,SAAS,GAAG,UAAU,EAAE,CAAC;IAC7B,SAAS,EAAE;QACT,OAAO,EAAE,MAAM;QACf,QAAQ,EAAE,QAAQ;QAClB,MAAM,EAAE,MAAM;QACd,UAAU,EAAE,EAAE;KACf;IACD,SAAS,EAAE;QACT,QAAQ,EAAE,QAAQ;QAClB,YAAY,EAAE,UAAU;QACxB,UAAU,EAAE,QAAQ;QACpB,QAAQ,EAAE,CAAC;KACZ;IACD,QAAQ,EAAE;QACR,UAAU,EAAE,QAAQ;QACpB,UAAU,EAAE,CAAC;KACd;CACF,CAAC,CAAA;AAEF,MAAM,cAAc,GAAG,QAAQ,CAAC,UAAU,EAAE,KAAK,EAA2B;IAC1E,MAAM,EAAE,gBAAgB,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAA;IAC5C,MAAM,EAAE,OAAO,EAAE,GAAG,SAAS,EAAE,CAAA;IAC/B,IAAI,CAAC,gBAAgB,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAChD,OAAO,IAAI,CAAA;IACb,CAAC;IACD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IACnD,MAAM,GAAG,GAAG,KAAK,CAAC,0BAA0B,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAA;IACxE,MAAM,MAAM,GAAG,KAAK,CAAC,qBAAqB,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAA;IACtE,OAAO,CACL,oBAAC,UAAU,IACT,SAAS,EAAC,KAAK,EACf,SAAS,EAAE,OAAO,CAAC,SAAS,EAC5B,KAAK,EAAE,gBAAgB;QAEvB,8BAAM,SAAS,EAAE,OAAO,CAAC,SAAS,IAC/B,gBAAgB,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAC1B;QACP,8BAAM,SAAS,EAAE,OAAO,CAAC,QAAQ;YAC9B,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC;;YAAG,GAAG;;YAAI,MAAM;gBACvC,CACI,CACd,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,eAAe,cAAc,CAAA"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { LoadingEllipses } from '@jbrowse/core/ui';
|
|
3
|
+
import { makeStyles } from '@jbrowse/core/util/tss-react';
|
|
3
4
|
import { Button, Typography } from '@mui/material';
|
|
4
5
|
import { observer } from 'mobx-react';
|
|
5
|
-
import { makeStyles } from 'tss-react/mui';
|
|
6
6
|
const useStyles = makeStyles()({
|
|
7
7
|
margin: {
|
|
8
8
|
margin: 'auto',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HeaderStatusArea.js","sourceRoot":"","sources":["../../../src/components/header/HeaderStatusArea.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAClD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"HeaderStatusArea.js","sourceRoot":"","sources":["../../../src/components/header/HeaderStatusArea.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAA;AACzD,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAIrC,MAAM,SAAS,GAAG,UAAU,EAAE,CAAC;IAC7B,MAAM,EAAE;QACN,MAAM,EAAE,MAAM;QACd,UAAU,EAAE,EAAE;KACf;CACF,CAAC,CAAA;AAEF,MAAM,gBAAgB,GAAG,QAAQ,CAAC,CAAC,EAAE,KAAK,EAA2B,EAAE,EAAE;IACvE,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK,CAAA;IACxB,MAAM,EAAE,OAAO,EAAE,GAAG,SAAS,EAAE,CAAA;IAC/B,OAAO,MAAM,CAAC,CAAC,CAAC,CACd,oBAAC,UAAU,IAAC,SAAS,EAAE,OAAO,CAAC,MAAM;QACnC,oBAAC,eAAe,IAAC,OAAO,EAAE,MAAM,CAAC,GAAG,EAAE,SAAS,EAAC,MAAM,GAAG;QAAC,GAAG;QAC5D,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CACZ,2BAAG,IAAI,EAAE,MAAM,CAAC,GAAG,EAAE,MAAM,EAAC,QAAQ,EAAC,GAAG,EAAC,YAAY,eAEjD,CACL,CAAC,CAAC,CAAC,IAAI;QAAE,GAAG;QACZ,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CACjB,oBAAC,MAAM,IAAC,IAAI,EAAC,OAAO,EAAC,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,aAE9C,CACV,CAAC,CAAC,CAAC,IAAI,CACG,CACd,CAAC,CAAC,CAAC,IAAI,CAAA;AACV,CAAC,CAAC,CAAA;AAEF,eAAe,gBAAgB,CAAA"}
|
|
@@ -4,7 +4,7 @@ import Tune from '@mui/icons-material/Tune';
|
|
|
4
4
|
import { observer } from 'mobx-react';
|
|
5
5
|
import { msaSettingsMenuItems } from "./settingsMenuItems.js";
|
|
6
6
|
const MSASettingsMenu = observer(function ({ model }) {
|
|
7
|
-
return (React.createElement(CascadingMenuButton, { "data-testid": "msa_settings_menu", closeAfterItemClick: false, anchorOrigin: { vertical: 'bottom', horizontal: 'left' }, transformOrigin: { vertical: 'top', horizontal: 'left' }, menuItems: msaSettingsMenuItems(model) },
|
|
7
|
+
return (React.createElement(CascadingMenuButton, { "data-testid": "msa_settings_menu", tooltip: "Alignment settings", closeAfterItemClick: false, anchorOrigin: { vertical: 'bottom', horizontal: 'left' }, transformOrigin: { vertical: 'top', horizontal: 'left' }, menuItems: msaSettingsMenuItems(model) },
|
|
8
8
|
React.createElement(Tune, null)));
|
|
9
9
|
});
|
|
10
10
|
export default MSASettingsMenu;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MSASettingsMenu.js","sourceRoot":"","sources":["../../../src/components/header/MSASettingsMenu.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,mBAAmB,MAAM,sCAAsC,CAAA;AACtE,OAAO,IAAI,MAAM,0BAA0B,CAAA;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAErC,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAI7D,MAAM,eAAe,GAAG,QAAQ,CAAC,UAAU,EAAE,KAAK,EAA2B;IAC3E,OAAO,CACL,oBAAC,mBAAmB,mBACN,mBAAmB,EAC/B,mBAAmB,EAAE,KAAK,EAC1B,YAAY,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,EACxD,eAAe,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,EACxD,SAAS,EAAE,oBAAoB,CAAC,KAAK,CAAC;QAEtC,oBAAC,IAAI,OAAG,CACY,CACvB,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,eAAe,eAAe,CAAA"}
|
|
1
|
+
{"version":3,"file":"MSASettingsMenu.js","sourceRoot":"","sources":["../../../src/components/header/MSASettingsMenu.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,mBAAmB,MAAM,sCAAsC,CAAA;AACtE,OAAO,IAAI,MAAM,0BAA0B,CAAA;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAErC,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAI7D,MAAM,eAAe,GAAG,QAAQ,CAAC,UAAU,EAAE,KAAK,EAA2B;IAC3E,OAAO,CACL,oBAAC,mBAAmB,mBACN,mBAAmB,EAC/B,OAAO,EAAC,oBAAoB,EAC5B,mBAAmB,EAAE,KAAK,EAC1B,YAAY,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,EACxD,eAAe,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,EACxD,SAAS,EAAE,oBAAoB,CAAC,KAAK,CAAC;QAEtC,oBAAC,IAAI,OAAG,CACY,CACvB,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,eAAe,eAAe,CAAA"}
|
|
Binary file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MultiAlignmentSelector.js","sourceRoot":"","sources":["../../../src/components/header/MultiAlignmentSelector.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAIrC,MAAM,sBAAsB,GAAG,QAAQ,CAAC,UAAU,EAChD,KAAK,GAGN;IACC,MAAM,EAAE,gBAAgB,EAAE,cAAc,EAAE,GAAG,KAAK,CAAA;IAClD,OAAO,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CACjC,oBAAC,SAAS,IACR,MAAM,QACN,OAAO,EAAC,UAAU,EAClB,KAAK,EAAE,gBAAgB,EACvB,IAAI,EAAC,OAAO,EACZ,QAAQ,EAAE,KAAK,CAAC,EAAE;YAChB,KAAK,CAAC,mBAAmB,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;YAC9C,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;YACnB,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;QACrB,CAAC,IAEA,cAAc,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"MultiAlignmentSelector.js","sourceRoot":"","sources":["../../../src/components/header/MultiAlignmentSelector.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAIrC,MAAM,sBAAsB,GAAG,QAAQ,CAAC,UAAU,EAChD,KAAK,GAGN;IACC,MAAM,EAAE,gBAAgB,EAAE,cAAc,EAAE,GAAG,KAAK,CAAA;IAClD,8EAA8E;IAC9E,6EAA6E;IAC7E,2EAA2E;IAC3E,sEAAsE;IACtE,MAAM,IAAI,GAAG,IAAI,GAAG,EAAkB,CAAA;IACtC,OAAO,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CACjC,oBAAC,SAAS,IACR,MAAM,QACN,OAAO,EAAC,UAAU,EAClB,KAAK,EAAE,gBAAgB,EACvB,IAAI,EAAC,OAAO,EACZ,QAAQ,EAAE,KAAK,CAAC,EAAE;YAChB,KAAK,CAAC,mBAAmB,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;YAC9C,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;YACnB,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;QACrB,CAAC,IAEA,cAAc,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;QACpC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QAC/B,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAA;QACvB,OAAO,CACL,oBAAC,QAAQ,IAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,IAC7D,MAAM,CACE,CACZ,CAAA;IACH,CAAC,CAAC,CACQ,CACb,CAAC,CAAC,CAAC,IAAI,CAAA;AACV,CAAC,CAAC,CAAA;AACF,eAAe,sBAAsB,CAAA"}
|
|
@@ -5,7 +5,7 @@ import { observer } from 'mobx-react';
|
|
|
5
5
|
import { treeSettingsMenuItems } from "./settingsMenuItems.js";
|
|
6
6
|
const TreeSettingsMenu = observer(function ({ model, }) {
|
|
7
7
|
const { rows } = model;
|
|
8
|
-
return (React.createElement(CascadingMenuButton, { "data-testid": "tree_settings_menu", closeAfterItemClick: false, anchorOrigin: { vertical: 'bottom', horizontal: 'left' }, transformOrigin: { vertical: 'top', horizontal: 'left' }, menuItems: [
|
|
8
|
+
return (React.createElement(CascadingMenuButton, { "data-testid": "tree_settings_menu", tooltip: "Tree settings", closeAfterItemClick: false, anchorOrigin: { vertical: 'bottom', horizontal: 'left' }, transformOrigin: { vertical: 'top', horizontal: 'left' }, menuItems: [
|
|
9
9
|
...treeSettingsMenuItems(model),
|
|
10
10
|
...(rows.length >= 2
|
|
11
11
|
? [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TreeSettingsMenu.js","sourceRoot":"","sources":["../../../src/components/header/TreeSettingsMenu.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,mBAAmB,MAAM,sCAAsC,CAAA;AACtE,OAAO,WAAW,MAAM,iCAAiC,CAAA;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAErC,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAA;AAI9D,MAAM,gBAAgB,GAAG,QAAQ,CAAC,UAAU,EAC1C,KAAK,GAGN;IACC,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,CAAA;IACtB,OAAO,CACL,oBAAC,mBAAmB,mBACN,oBAAoB,EAChC,mBAAmB,EAAE,KAAK,EAC1B,YAAY,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,EACxD,eAAe,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,EACxD,SAAS,EAAE;YACT,GAAG,qBAAqB,CAAC,KAAK,CAAC;YAC/B,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC;gBAClB,CAAC,CAAC;oBACE;wBACE,KAAK,EAAE,UAAU;wBACjB,IAAI,EAAE,SAAkB;wBACxB,OAAO,EAAE;4BACP;gCACE,KAAK,EAAE,4CAA4C;gCACnD,OAAO,EAAE,GAAG,EAAE;oCACZ,IAAI,CAAC;wCACH,KAAK,CAAC,mCAAmC,EAAE,CAAA;oCAC7C,CAAC;oCAAC,OAAO,CAAC,EAAE,CAAC;wCACX,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,CAAC,CAAC,CAAA;wCAChD,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;oCACnB,CAAC;gCACH,CAAC;6BACF;yBACF;qBACF;iBACF;gBACH,CAAC,CAAC,EAAE,CAAC;SACR;QAED,oBAAC,WAAW,OAAG,CACK,CACvB,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,eAAe,gBAAgB,CAAA"}
|
|
1
|
+
{"version":3,"file":"TreeSettingsMenu.js","sourceRoot":"","sources":["../../../src/components/header/TreeSettingsMenu.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,mBAAmB,MAAM,sCAAsC,CAAA;AACtE,OAAO,WAAW,MAAM,iCAAiC,CAAA;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAErC,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAA;AAI9D,MAAM,gBAAgB,GAAG,QAAQ,CAAC,UAAU,EAC1C,KAAK,GAGN;IACC,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,CAAA;IACtB,OAAO,CACL,oBAAC,mBAAmB,mBACN,oBAAoB,EAChC,OAAO,EAAC,eAAe,EACvB,mBAAmB,EAAE,KAAK,EAC1B,YAAY,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,EACxD,eAAe,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,EACxD,SAAS,EAAE;YACT,GAAG,qBAAqB,CAAC,KAAK,CAAC;YAC/B,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC;gBAClB,CAAC,CAAC;oBACE;wBACE,KAAK,EAAE,UAAU;wBACjB,IAAI,EAAE,SAAkB;wBACxB,OAAO,EAAE;4BACP;gCACE,KAAK,EAAE,4CAA4C;gCACnD,OAAO,EAAE,GAAG,EAAE;oCACZ,IAAI,CAAC;wCACH,KAAK,CAAC,mCAAmC,EAAE,CAAA;oCAC7C,CAAC;oCAAC,OAAO,CAAC,EAAE,CAAC;wCACX,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,CAAC,CAAC,CAAA;wCAChD,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;oCACnB,CAAC;gCACH,CAAC;6BACF;yBACF;qBACF;iBACF;gBACH,CAAC,CAAC,EAAE,CAAC;SACR;QAED,oBAAC,WAAW,OAAG,CACK,CACvB,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,eAAe,gBAAgB,CAAA"}
|
|
@@ -1,23 +1,25 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
+
import Mouse from '@mui/icons-material/Mouse';
|
|
2
3
|
import ZoomIn from '@mui/icons-material/ZoomIn';
|
|
3
|
-
import ZoomInMap from '@mui/icons-material/ZoomInMap';
|
|
4
4
|
import ZoomOut from '@mui/icons-material/ZoomOut';
|
|
5
|
-
import { IconButton, ToggleButton } from '@mui/material';
|
|
5
|
+
import { IconButton, ToggleButton, Tooltip } from '@mui/material';
|
|
6
6
|
import { observer } from 'mobx-react';
|
|
7
7
|
const ZoomControls = observer(function ZoomControls({ model, }) {
|
|
8
8
|
return (React.createElement(React.Fragment, null,
|
|
9
|
-
React.createElement(
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
9
|
+
React.createElement(Tooltip, { title: "Zoom in" },
|
|
10
|
+
React.createElement(IconButton, { "aria-label": "Zoom in", onClick: () => {
|
|
11
|
+
model.zoomIn();
|
|
12
|
+
} },
|
|
13
|
+
React.createElement(ZoomIn, null))),
|
|
14
|
+
React.createElement(Tooltip, { title: "Zoom out" },
|
|
15
|
+
React.createElement(IconButton, { "aria-label": "Zoom out", onClick: () => {
|
|
16
|
+
model.zoomOut();
|
|
17
|
+
} },
|
|
18
|
+
React.createElement(ZoomOut, null))),
|
|
19
|
+
React.createElement(ToggleButton, { value: "scrollZoom", selected: model.scrollZoom, "aria-label": "Toggle scroll-to-zoom", title: "Toggle scroll-to-zoom (zoom on plain mouse wheel; ctrl+wheel always zooms)", size: "small", sx: { border: 'none' }, onChange: () => {
|
|
18
20
|
model.setScrollZoom(!model.scrollZoom);
|
|
19
21
|
} },
|
|
20
|
-
React.createElement(
|
|
22
|
+
React.createElement(Mouse, null))));
|
|
21
23
|
});
|
|
22
24
|
export default ZoomControls;
|
|
23
25
|
//# sourceMappingURL=ZoomControls.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ZoomControls.js","sourceRoot":"","sources":["../../../src/components/header/ZoomControls.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,
|
|
1
|
+
{"version":3,"file":"ZoomControls.js","sourceRoot":"","sources":["../../../src/components/header/ZoomControls.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,KAAK,MAAM,2BAA2B,CAAA;AAC7C,OAAO,MAAM,MAAM,4BAA4B,CAAA;AAC/C,OAAO,OAAO,MAAM,6BAA6B,CAAA;AACjD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACjE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAIrC,MAAM,YAAY,GAAG,QAAQ,CAAC,SAAS,YAAY,CAAC,EAClD,KAAK,GAGN;IACC,OAAO,CACL;QACE,oBAAC,OAAO,IAAC,KAAK,EAAC,SAAS;YACtB,oBAAC,UAAU,kBACE,SAAS,EACpB,OAAO,EAAE,GAAG,EAAE;oBACZ,KAAK,CAAC,MAAM,EAAE,CAAA;gBAChB,CAAC;gBAED,oBAAC,MAAM,OAAG,CACC,CACL;QACV,oBAAC,OAAO,IAAC,KAAK,EAAC,UAAU;YACvB,oBAAC,UAAU,kBACE,UAAU,EACrB,OAAO,EAAE,GAAG,EAAE;oBACZ,KAAK,CAAC,OAAO,EAAE,CAAA;gBACjB,CAAC;gBAED,oBAAC,OAAO,OAAG,CACA,CACL;QACV,oBAAC,YAAY,IACX,KAAK,EAAC,YAAY,EAClB,QAAQ,EAAE,KAAK,CAAC,UAAU,gBACf,uBAAuB,EAClC,KAAK,EAAC,4EAA4E,EAClF,IAAI,EAAC,OAAO,EACZ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,EACtB,QAAQ,EAAE,GAAG,EAAE;gBACb,KAAK,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA;YACxC,CAAC;YAED,oBAAC,KAAK,OAAG,CACI,CACd,CACJ,CAAA;AACH,CAAC,CAAC,CAAA;AACF,eAAe,YAAY,CAAA"}
|
|
@@ -4,7 +4,7 @@ import MoreVert from '@mui/icons-material/MoreVert';
|
|
|
4
4
|
import RestartAlt from '@mui/icons-material/RestartAlt';
|
|
5
5
|
import { observer } from 'mobx-react';
|
|
6
6
|
const ZoomMenu = observer(function ({ model }) {
|
|
7
|
-
return (React.createElement(CascadingMenuButton, { menuItems: [
|
|
7
|
+
return (React.createElement(CascadingMenuButton, { tooltip: "Fit / zoom options", menuItems: [
|
|
8
8
|
{
|
|
9
9
|
label: 'Fit both vertically/horizontally',
|
|
10
10
|
onClick: () => {
|
|
@@ -30,15 +30,6 @@ const ZoomMenu = observer(function ({ model }) {
|
|
|
30
30
|
model.resetZoom();
|
|
31
31
|
},
|
|
32
32
|
},
|
|
33
|
-
{
|
|
34
|
-
label: 'Scroll zoom',
|
|
35
|
-
type: 'checkbox',
|
|
36
|
-
checked: model.scrollZoom,
|
|
37
|
-
onClick: () => {
|
|
38
|
-
model.setScrollZoom(!model.scrollZoom);
|
|
39
|
-
},
|
|
40
|
-
helpText: 'When enabled, scrolling the mouse wheel zooms in and out without holding ctrl. Hold shift to pan instead. Ctrl/⌘+wheel always zooms.',
|
|
41
|
-
},
|
|
42
33
|
] },
|
|
43
34
|
React.createElement(MoreVert, null)));
|
|
44
35
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ZoomMenu.js","sourceRoot":"","sources":["../../../src/components/header/ZoomMenu.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,mBAAmB,MAAM,sCAAsC,CAAA;AACtE,OAAO,QAAQ,MAAM,8BAA8B,CAAA;AACnD,OAAO,UAAU,MAAM,gCAAgC,CAAA;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAIrC,MAAM,QAAQ,GAAG,QAAQ,CAAC,UAAU,EAAE,KAAK,EAA2B;IACpE,OAAO,CACL,oBAAC,mBAAmB,IAClB,SAAS,EAAE;YACT;gBACE,KAAK,EAAE,kCAAkC;gBACzC,OAAO,EAAE,GAAG,EAAE;oBACZ,KAAK,CAAC,GAAG,EAAE,CAAA;gBACb,CAAC;aACF;YACD;gBACE,KAAK,EAAE,gBAAgB;gBACvB,OAAO,EAAE,GAAG,EAAE;oBACZ,KAAK,CAAC,aAAa,EAAE,CAAA;gBACvB,CAAC;aACF;YACD;gBACE,KAAK,EAAE,kBAAkB;gBACzB,OAAO,EAAE,GAAG,EAAE;oBACZ,KAAK,CAAC,eAAe,EAAE,CAAA;gBACzB,CAAC;aACF;YAED;gBACE,KAAK,EAAE,uBAAuB;gBAC9B,IAAI,EAAE,UAAU;gBAChB,OAAO,EAAE,GAAG,EAAE;oBACZ,KAAK,CAAC,SAAS,EAAE,CAAA;gBACnB,CAAC;aACF;
|
|
1
|
+
{"version":3,"file":"ZoomMenu.js","sourceRoot":"","sources":["../../../src/components/header/ZoomMenu.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,mBAAmB,MAAM,sCAAsC,CAAA;AACtE,OAAO,QAAQ,MAAM,8BAA8B,CAAA;AACnD,OAAO,UAAU,MAAM,gCAAgC,CAAA;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAIrC,MAAM,QAAQ,GAAG,QAAQ,CAAC,UAAU,EAAE,KAAK,EAA2B;IACpE,OAAO,CACL,oBAAC,mBAAmB,IAClB,OAAO,EAAC,oBAAoB,EAC5B,SAAS,EAAE;YACT;gBACE,KAAK,EAAE,kCAAkC;gBACzC,OAAO,EAAE,GAAG,EAAE;oBACZ,KAAK,CAAC,GAAG,EAAE,CAAA;gBACb,CAAC;aACF;YACD;gBACE,KAAK,EAAE,gBAAgB;gBACvB,OAAO,EAAE,GAAG,EAAE;oBACZ,KAAK,CAAC,aAAa,EAAE,CAAA;gBACvB,CAAC;aACF;YACD;gBACE,KAAK,EAAE,kBAAkB;gBACzB,OAAO,EAAE,GAAG,EAAE;oBACZ,KAAK,CAAC,eAAe,EAAE,CAAA;gBACzB,CAAC;aACF;YAED;gBACE,KAAK,EAAE,uBAAuB;gBAC9B,IAAI,EAAE,UAAU;gBAChB,OAAO,EAAE,GAAG,EAAE;oBACZ,KAAK,CAAC,SAAS,EAAE,CAAA;gBACnB,CAAC;aACF;SACF;QAED,oBAAC,QAAQ,OAAG,CACQ,CACvB,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,eAAe,QAAQ,CAAA"}
|
|
@@ -1,6 +1,14 @@
|
|
|
1
1
|
export function msaSettingsMenuItems(model) {
|
|
2
|
-
const { drawMsaLetters, hideGaps, bgColor } = model;
|
|
2
|
+
const { drawMsaLetters, hideGaps, bgColor, showColumnStats } = model;
|
|
3
3
|
return [
|
|
4
|
+
{
|
|
5
|
+
label: 'Show column statistics on hover',
|
|
6
|
+
type: 'checkbox',
|
|
7
|
+
checked: showColumnStats,
|
|
8
|
+
onClick: () => {
|
|
9
|
+
model.setShowColumnStats(!showColumnStats);
|
|
10
|
+
},
|
|
11
|
+
},
|
|
4
12
|
{
|
|
5
13
|
label: 'Draw letters',
|
|
6
14
|
type: 'checkbox',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settingsMenuItems.js","sourceRoot":"","sources":["../../../src/components/header/settingsMenuItems.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,oBAAoB,CAAC,KAAmB;IACtD,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,KAAK,CAAA;
|
|
1
|
+
{"version":3,"file":"settingsMenuItems.js","sourceRoot":"","sources":["../../../src/components/header/settingsMenuItems.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,oBAAoB,CAAC,KAAmB;IACtD,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,OAAO,EAAE,eAAe,EAAE,GAAG,KAAK,CAAA;IACpE,OAAO;QACL;YACE,KAAK,EAAE,iCAAiC;YACxC,IAAI,EAAE,UAAU;YAChB,OAAO,EAAE,eAAe;YACxB,OAAO,EAAE,GAAG,EAAE;gBACZ,KAAK,CAAC,kBAAkB,CAAC,CAAC,eAAe,CAAC,CAAA;YAC5C,CAAC;SACF;QACD;YACE,KAAK,EAAE,cAAc;YACrB,IAAI,EAAE,UAAU;YAChB,OAAO,EAAE,cAAc;YACvB,OAAO,EAAE,GAAG,EAAE;gBACZ,KAAK,CAAC,iBAAiB,CAAC,CAAC,cAAc,CAAC,CAAA;YAC1C,CAAC;SACF;QACD;YACE,KAAK,EAAE,8CAA8C;YACrD,IAAI,EAAE,UAAU;YAChB,OAAO,EAAE,CAAC,OAAO;YACjB,OAAO,EAAE,GAAG,EAAE;gBACZ,KAAK,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAA;YAC5B,CAAC;SACF;QACD;YACE,KAAK,EAAE,8BAA8B;YACrC,IAAI,EAAE,UAAU;YAChB,OAAO,EAAE,QAAQ;YACjB,OAAO,EAAE,GAAG,EAAE;gBACZ,KAAK,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,CAAA;YAC9B,CAAC;SACF;KACF,CAAA;AACH,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,KAAmB;IACvD,MAAM,EACJ,QAAQ,EACR,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,UAAU,GACX,GAAG,KAAK,CAAA;IACT,OAAO;QACL;YACE,KAAK,EAAE,oBAAoB;YAC3B,IAAI,EAAE,UAAU;YAChB,OAAO,EAAE,aAAa;YACtB,OAAO,EAAE,GAAG,EAAE;gBACZ,KAAK,CAAC,gBAAgB,CAAC,CAAC,aAAa,CAAC,CAAA;YACxC,CAAC;SACF;QACD;YACE,KAAK,EAAE,WAAW;YAClB,IAAI,EAAE,UAAU;YAChB,OAAO,EAAE,QAAQ;YACjB,OAAO,EAAE,GAAG,EAAE;gBACZ,KAAK,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,CAAA;YAC9B,CAAC;SACF;QACD;YACE,KAAK,EAAE,yCAAyC;YAChD,IAAI,EAAE,UAAU;YAChB,OAAO,EAAE,eAAe;YACxB,OAAO,EAAE,GAAG,EAAE;gBACZ,KAAK,CAAC,kBAAkB,CAAC,CAAC,eAAe,CAAC,CAAA;YAC5C,CAAC;SACF;QACD;YACE,KAAK,EAAE,yBAAyB;YAChC,IAAI,EAAE,UAAU;YAChB,OAAO,EAAE,gBAAgB;YACzB,OAAO,EAAE,GAAG,EAAE;gBACZ,KAAK,CAAC,mBAAmB,CAAC,CAAC,gBAAgB,CAAC,CAAA;YAC9C,CAAC;SACF;QACD;YACE,KAAK,EAAE,aAAa;YACpB,IAAI,EAAE,UAAU;YAChB,OAAO,EAAE,UAAU;YACnB,OAAO,EAAE,GAAG,EAAE;gBACZ,KAAK,CAAC,aAAa,CAAC,CAAC,UAAU,CAAC,CAAA;YAClC,CAAC;SACF;KACF,CAAA;AACH,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import type { MsaViewModel } from '../../model.ts';
|
|
3
|
-
declare const
|
|
3
|
+
declare const ColumnStats: ({ model }: {
|
|
4
4
|
model: MsaViewModel;
|
|
5
|
-
}) => React.JSX.Element;
|
|
6
|
-
export default
|
|
5
|
+
}) => React.JSX.Element | null;
|
|
6
|
+
export default ColumnStats;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { observer } from 'mobx-react';
|
|
3
|
+
const pct = (n) => `${Math.round(n * 100)}%`;
|
|
4
|
+
const ColumnStats = observer(function ({ model }) {
|
|
5
|
+
const stats = model.mouseOverColumnStats;
|
|
6
|
+
if (!stats) {
|
|
7
|
+
return null;
|
|
8
|
+
}
|
|
9
|
+
const { col, total, conservation, propertyConservation, consensusLetter, consensusFraction, gapFraction, distribution, } = stats;
|
|
10
|
+
const top = distribution.slice(0, 6);
|
|
11
|
+
return (React.createElement("div", null,
|
|
12
|
+
React.createElement("b", null,
|
|
13
|
+
"Column ",
|
|
14
|
+
col + 1),
|
|
15
|
+
" (",
|
|
16
|
+
total,
|
|
17
|
+
" seqs)",
|
|
18
|
+
React.createElement("br", null),
|
|
19
|
+
"Consensus: ",
|
|
20
|
+
consensusLetter || '-',
|
|
21
|
+
" (",
|
|
22
|
+
pct(consensusFraction),
|
|
23
|
+
")",
|
|
24
|
+
React.createElement("br", null),
|
|
25
|
+
"Conservation: ",
|
|
26
|
+
conservation.toFixed(2),
|
|
27
|
+
propertyConservation === undefined ? null : (React.createElement(React.Fragment, null,
|
|
28
|
+
React.createElement("br", null),
|
|
29
|
+
"Property conservation: ",
|
|
30
|
+
propertyConservation.toFixed(2))),
|
|
31
|
+
React.createElement("br", null),
|
|
32
|
+
"Gaps: ",
|
|
33
|
+
pct(gapFraction),
|
|
34
|
+
top.length > 0 ? (React.createElement(React.Fragment, null,
|
|
35
|
+
React.createElement("br", null),
|
|
36
|
+
top.map(([letter, count]) => (React.createElement("span", { key: letter, style: { marginRight: 8 } },
|
|
37
|
+
letter,
|
|
38
|
+
" ",
|
|
39
|
+
pct(count / total)))))) : null));
|
|
40
|
+
});
|
|
41
|
+
export default ColumnStats;
|
|
42
|
+
//# sourceMappingURL=ColumnStats.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ColumnStats.js","sourceRoot":"","sources":["../../../src/components/msa/ColumnStats.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAIrC,MAAM,GAAG,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAA;AAEpD,MAAM,WAAW,GAAG,QAAQ,CAAC,UAAU,EAAE,KAAK,EAA2B;IACvE,MAAM,KAAK,GAAG,KAAK,CAAC,oBAAoB,CAAA;IACxC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,IAAI,CAAA;IACb,CAAC;IACD,MAAM,EACJ,GAAG,EACH,KAAK,EACL,YAAY,EACZ,oBAAoB,EACpB,eAAe,EACf,iBAAiB,EACjB,WAAW,EACX,YAAY,GACb,GAAG,KAAK,CAAA;IACT,MAAM,GAAG,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IACpC,OAAO,CACL;QACE;;YAAW,GAAG,GAAG,CAAC,CAAK;;QAAG,KAAK;;QAC/B,+BAAM;;QACM,eAAe,IAAI,GAAG;;QAAI,GAAG,CAAC,iBAAiB,CAAC;;QAC5D,+BAAM;;QACS,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;QACrC,oBAAoB,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAC3C;YACE,+BAAM;;YACkB,oBAAoB,CAAC,OAAO,CAAC,CAAC,CAAC,CACtD,CACJ;QACD,+BAAM;;QACC,GAAG,CAAC,WAAW,CAAC;QACtB,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAChB;YACE,+BAAM;YACL,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAC5B,8BAAM,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE;gBACzC,MAAM;;gBAAG,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC,CACvB,CACR,CAAC,CACD,CACJ,CAAC,CAAC,CAAC,IAAI,CACJ,CACP,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,eAAe,WAAW,CAAA"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import React, { useState } from 'react';
|
|
2
|
+
import ExpandLess from '@mui/icons-material/ExpandLess';
|
|
3
|
+
import ExpandMore from '@mui/icons-material/ExpandMore';
|
|
4
|
+
import { IconButton, Paper, Typography } from '@mui/material';
|
|
5
|
+
import { observer } from 'mobx-react';
|
|
6
|
+
const DomainLegend = observer(function ({ model }) {
|
|
7
|
+
const [expanded, setExpanded] = useState(true);
|
|
8
|
+
const { actuallyShowDomains, visibleDomainTypes: visible, fillPalette, } = model;
|
|
9
|
+
const ExpandIcon = expanded ? ExpandLess : ExpandMore;
|
|
10
|
+
return actuallyShowDomains && visible.length > 0 ? (React.createElement(Paper, { elevation: 3, style: {
|
|
11
|
+
position: 'absolute',
|
|
12
|
+
top: 4,
|
|
13
|
+
right: 4,
|
|
14
|
+
zIndex: 100,
|
|
15
|
+
maxWidth: 260,
|
|
16
|
+
maxHeight: '60%',
|
|
17
|
+
display: 'flex',
|
|
18
|
+
flexDirection: 'column',
|
|
19
|
+
opacity: 0.95,
|
|
20
|
+
} },
|
|
21
|
+
React.createElement("div", { style: {
|
|
22
|
+
display: 'flex',
|
|
23
|
+
alignItems: 'center',
|
|
24
|
+
justifyContent: 'flex-end',
|
|
25
|
+
padding: '2px 4px 2px 8px',
|
|
26
|
+
} },
|
|
27
|
+
React.createElement(IconButton, { size: "small", onClick: () => {
|
|
28
|
+
setExpanded(!expanded);
|
|
29
|
+
} },
|
|
30
|
+
React.createElement(ExpandIcon, { fontSize: "small" }))),
|
|
31
|
+
expanded ? (React.createElement("div", { style: { overflow: 'auto', padding: '0 8px 6px' } }, visible.map(({ accession, name }) => (React.createElement("div", { key: accession, style: { display: 'flex', alignItems: 'center', gap: 6 }, title: accession },
|
|
32
|
+
React.createElement("div", { style: {
|
|
33
|
+
width: 12,
|
|
34
|
+
height: 12,
|
|
35
|
+
flexShrink: 0,
|
|
36
|
+
background: fillPalette[accession],
|
|
37
|
+
} }),
|
|
38
|
+
React.createElement(Typography, { variant: "caption", noWrap: true }, name)))))) : null)) : null;
|
|
39
|
+
});
|
|
40
|
+
export default DomainLegend;
|
|
41
|
+
//# sourceMappingURL=DomainLegend.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DomainLegend.js","sourceRoot":"","sources":["../../../src/components/msa/DomainLegend.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAEvC,OAAO,UAAU,MAAM,gCAAgC,CAAA;AACvD,OAAO,UAAU,MAAM,gCAAgC,CAAA;AACvD,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC7D,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAIrC,MAAM,YAAY,GAAG,QAAQ,CAAC,UAAU,EAAE,KAAK,EAA2B;IACxE,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAA;IAC9C,MAAM,EACJ,mBAAmB,EACnB,kBAAkB,EAAE,OAAO,EAC3B,WAAW,GACZ,GAAG,KAAK,CAAA;IACT,MAAM,UAAU,GAAG,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAA;IAErD,OAAO,mBAAmB,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CACjD,oBAAC,KAAK,IACJ,SAAS,EAAE,CAAC,EACZ,KAAK,EAAE;YACL,QAAQ,EAAE,UAAU;YACpB,GAAG,EAAE,CAAC;YACN,KAAK,EAAE,CAAC;YACR,MAAM,EAAE,GAAG;YACX,QAAQ,EAAE,GAAG;YACb,SAAS,EAAE,KAAK;YAChB,OAAO,EAAE,MAAM;YACf,aAAa,EAAE,QAAQ;YACvB,OAAO,EAAE,IAAI;SACd;QAED,6BACE,KAAK,EAAE;gBACL,OAAO,EAAE,MAAM;gBACf,UAAU,EAAE,QAAQ;gBACpB,cAAc,EAAE,UAAU;gBAC1B,OAAO,EAAE,iBAAiB;aAC3B;YAED,oBAAC,UAAU,IACT,IAAI,EAAC,OAAO,EACZ,OAAO,EAAE,GAAG,EAAE;oBACZ,WAAW,CAAC,CAAC,QAAQ,CAAC,CAAA;gBACxB,CAAC;gBAED,oBAAC,UAAU,IAAC,QAAQ,EAAC,OAAO,GAAG,CACpB,CACT;QACL,QAAQ,CAAC,CAAC,CAAC,CACV,6BAAK,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,IACnD,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CACpC,6BACE,GAAG,EAAE,SAAS,EACd,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,EACxD,KAAK,EAAE,SAAS;YAEhB,6BACE,KAAK,EAAE;oBACL,KAAK,EAAE,EAAE;oBACT,MAAM,EAAE,EAAE;oBACV,UAAU,EAAE,CAAC;oBACb,UAAU,EAAE,WAAW,CAAC,SAAS,CAAC;iBACnC,GACD;YACF,oBAAC,UAAU,IAAC,OAAO,EAAC,SAAS,EAAC,MAAM,UACjC,IAAI,CACM,CACT,CACP,CAAC,CACE,CACP,CAAC,CAAC,CAAC,IAAI,CACF,CACT,CAAC,CAAC,CAAC,IAAI,CAAA;AACV,CAAC,CAAC,CAAA;AAEF,eAAe,YAAY,CAAA"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import React, {
|
|
1
|
+
import React, { useState } from 'react';
|
|
2
2
|
import { BaseTooltip } from '@jbrowse/core/ui';
|
|
3
|
-
import { autorun } from 'mobx';
|
|
4
3
|
import { observer } from 'mobx-react';
|
|
4
|
+
import ColumnStats from "./ColumnStats.js";
|
|
5
5
|
import { renderBoxFeatureCanvasBlock } from "./renderBoxFeatureCanvasBlock.js";
|
|
6
6
|
import { renderMSABlock } from "./renderMSABlock.js";
|
|
7
|
+
import { useCanvasAutorun } from "../../useCanvasAutorun.js";
|
|
7
8
|
import { useColorContrast } from "../../useColorContrast.js";
|
|
8
9
|
function eventToColRow(event, el, offsetX, offsetY, colWidth, rowHeight) {
|
|
9
10
|
const { left, top } = el.getBoundingClientRect();
|
|
@@ -15,31 +16,24 @@ function eventToColRow(event, el, offsetX, offsetY, colWidth, rowHeight) {
|
|
|
15
16
|
const MSACanvasBlock = observer(function ({ model, offsetX, offsetY, }) {
|
|
16
17
|
const { colWidth, rowHeight, scrollY, scrollX, colorScheme, blockSize, mouseClickCol, mouseClickRow, highResScaleFactor, } = model;
|
|
17
18
|
const { theme, contrastScheme } = useColorContrast(colorScheme);
|
|
18
|
-
const ref =
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
if (
|
|
22
|
-
|
|
23
|
-
}
|
|
24
|
-
return autorun(() => {
|
|
25
|
-
ctx.resetTransform();
|
|
26
|
-
ctx.clearRect(0, 0, blockSize * highResScaleFactor, blockSize * highResScaleFactor);
|
|
27
|
-
if (model.actuallyShowDomains) {
|
|
28
|
-
renderBoxFeatureCanvasBlock({
|
|
29
|
-
ctx,
|
|
30
|
-
offsetX,
|
|
31
|
-
offsetY,
|
|
32
|
-
model,
|
|
33
|
-
});
|
|
34
|
-
}
|
|
35
|
-
renderMSABlock({
|
|
19
|
+
const ref = useCanvasAutorun(ctx => {
|
|
20
|
+
ctx.resetTransform();
|
|
21
|
+
ctx.clearRect(0, 0, blockSize * highResScaleFactor, blockSize * highResScaleFactor);
|
|
22
|
+
if (model.actuallyShowDomains) {
|
|
23
|
+
renderBoxFeatureCanvasBlock({
|
|
36
24
|
ctx,
|
|
37
|
-
theme,
|
|
38
25
|
offsetX,
|
|
39
26
|
offsetY,
|
|
40
|
-
contrastScheme,
|
|
41
27
|
model,
|
|
42
28
|
});
|
|
29
|
+
}
|
|
30
|
+
renderMSABlock({
|
|
31
|
+
ctx,
|
|
32
|
+
theme,
|
|
33
|
+
offsetX,
|
|
34
|
+
offsetY,
|
|
35
|
+
contrastScheme,
|
|
36
|
+
model,
|
|
43
37
|
});
|
|
44
38
|
}, [
|
|
45
39
|
model,
|
|
@@ -51,7 +45,7 @@ const MSACanvasBlock = observer(function ({ model, offsetX, offsetY, }) {
|
|
|
51
45
|
contrastScheme,
|
|
52
46
|
]);
|
|
53
47
|
const [mousePosition, setMousePosition] = useState();
|
|
54
|
-
const { hoveredInsertion } = model;
|
|
48
|
+
const { hoveredInsertion, mouseOverDomains, showColumnStats } = model;
|
|
55
49
|
return (React.createElement(React.Fragment, null,
|
|
56
50
|
React.createElement("canvas", { ref: ref, onMouseMove: event => {
|
|
57
51
|
if (ref.current) {
|
|
@@ -66,11 +60,14 @@ const MSACanvasBlock = observer(function ({ model, offsetX, offsetY, }) {
|
|
|
66
60
|
else {
|
|
67
61
|
model.setMousePos(undefined, undefined);
|
|
68
62
|
}
|
|
69
|
-
// only track client coords when
|
|
70
|
-
//
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
63
|
+
// only track client coords when there's something to show in the
|
|
64
|
+
// tooltip: an insertion, a domain under the cursor, or column stats
|
|
65
|
+
// (when that option is enabled). avoids a re-render on every move
|
|
66
|
+
// when nothing would be shown
|
|
67
|
+
const hasTooltip = model.hoveredInsertion ||
|
|
68
|
+
model.mouseOverDomains.length > 0 ||
|
|
69
|
+
(model.showColumnStats && !!model.mouseOverColumnStats);
|
|
70
|
+
setMousePosition(hasTooltip ? { x: event.clientX, y: event.clientY } : undefined);
|
|
74
71
|
}
|
|
75
72
|
}, onClick: event => {
|
|
76
73
|
if (ref.current) {
|
|
@@ -100,7 +97,22 @@ const MSACanvasBlock = observer(function ({ model, offsetX, offsetY, }) {
|
|
|
100
97
|
' ',
|
|
101
98
|
hoveredInsertion.letters.length > 20
|
|
102
99
|
? `${hoveredInsertion.letters.slice(0, 20)}...`
|
|
103
|
-
: hoveredInsertion.letters)) : null
|
|
100
|
+
: hoveredInsertion.letters)) : null,
|
|
101
|
+
!hoveredInsertion &&
|
|
102
|
+
mousePosition &&
|
|
103
|
+
(mouseOverDomains.length > 0 || showColumnStats) ? (React.createElement(BaseTooltip, { clientPoint: { x: mousePosition.x, y: mousePosition.y + 15 } },
|
|
104
|
+
mouseOverDomains.map(d => (React.createElement("div", { key: `${d.accession}-${d.start}-${d.end}` },
|
|
105
|
+
React.createElement("b", null, d.name),
|
|
106
|
+
" (",
|
|
107
|
+
d.accession,
|
|
108
|
+
") ",
|
|
109
|
+
d.start,
|
|
110
|
+
"-",
|
|
111
|
+
d.end,
|
|
112
|
+
d.description ? (React.createElement(React.Fragment, null,
|
|
113
|
+
React.createElement("br", null),
|
|
114
|
+
d.description)) : null))),
|
|
115
|
+
showColumnStats ? React.createElement(ColumnStats, { model: model }) : null)) : null));
|
|
104
116
|
});
|
|
105
117
|
export default MSACanvasBlock;
|
|
106
118
|
//# sourceMappingURL=MSACanvasBlock.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MSACanvasBlock.js","sourceRoot":"","sources":["../../../src/components/msa/MSACanvasBlock.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"MSACanvasBlock.js","sourceRoot":"","sources":["../../../src/components/msa/MSACanvasBlock.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,21 +1,15 @@
|
|
|
1
|
-
import React
|
|
1
|
+
import React from 'react';
|
|
2
2
|
import { isAlive } from '@jbrowse/mobx-state-tree';
|
|
3
|
-
import { autorun } from 'mobx';
|
|
4
3
|
import { observer } from 'mobx-react';
|
|
5
4
|
import { renderMouseover } from "./renderMSAMouseover.js";
|
|
5
|
+
import { useCanvasAutorun } from "../../useCanvasAutorun.js";
|
|
6
6
|
const MSAMouseoverCanvas = observer(function ({ model, }) {
|
|
7
|
-
const ref = useRef(null);
|
|
8
7
|
const { height, msaAreaWidth, verticalScrollbarWidth, highResScaleFactor } = model;
|
|
9
8
|
const width = msaAreaWidth - verticalScrollbarWidth;
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
if (isAlive(model)) {
|
|
15
|
-
renderMouseover({ ctx, model });
|
|
16
|
-
}
|
|
17
|
-
})
|
|
18
|
-
: undefined;
|
|
9
|
+
const ref = useCanvasAutorun(ctx => {
|
|
10
|
+
if (isAlive(model)) {
|
|
11
|
+
renderMouseover({ ctx, model });
|
|
12
|
+
}
|
|
19
13
|
}, [model]);
|
|
20
14
|
return (React.createElement("canvas", { ref: ref, id: "mouseover", width: width * highResScaleFactor, height: height * highResScaleFactor, style: {
|
|
21
15
|
position: 'absolute',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MSAMouseoverCanvas.js","sourceRoot":"","sources":["../../../src/components/msa/MSAMouseoverCanvas.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"MSAMouseoverCanvas.js","sourceRoot":"","sources":["../../../src/components/msa/MSAMouseoverCanvas.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAA;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAErC,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AAI5D,MAAM,kBAAkB,GAAG,QAAQ,CAAC,UAAU,EAC5C,KAAK,GAGN;IACC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,GACxE,KAAK,CAAA;IACP,MAAM,KAAK,GAAG,YAAY,GAAG,sBAAsB,CAAA;IACnD,MAAM,GAAG,GAAG,gBAAgB,CAC1B,GAAG,CAAC,EAAE;QACJ,IAAI,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACnB,eAAe,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAA;QACjC,CAAC;IACH,CAAC,EACD,CAAC,KAAK,CAAC,CACR,CAAA;IAED,OAAO,CACL,gCACE,GAAG,EAAE,GAAG,EACR,EAAE,EAAC,WAAW,EACd,KAAK,EAAE,KAAK,GAAG,kBAAkB,EACjC,MAAM,EAAE,MAAM,GAAG,kBAAkB,EACnC,KAAK,EAAE;YACL,QAAQ,EAAE,UAAU;YACpB,GAAG,EAAE,CAAC;YACN,IAAI,EAAE,CAAC;YACP,KAAK;YACL,MAAM;YACN,MAAM,EAAE,IAAI;YACZ,aAAa,EAAE,MAAM;SACtB,GACD,CACH,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,eAAe,kBAAkB,CAAA"}
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { observer } from 'mobx-react';
|
|
3
|
+
import DomainLegend from "./DomainLegend.js";
|
|
3
4
|
import MSACanvas from "./MSACanvas.js";
|
|
4
5
|
import MSAMouseoverCanvas from "./MSAMouseoverCanvas.js";
|
|
5
6
|
const MSAPanel = observer(function ({ model }) {
|
|
6
7
|
return (React.createElement("div", { style: { position: 'relative' } },
|
|
7
8
|
React.createElement(MSACanvas, { model: model }),
|
|
8
|
-
React.createElement(MSAMouseoverCanvas, { model: model })
|
|
9
|
+
React.createElement(MSAMouseoverCanvas, { model: model }),
|
|
10
|
+
React.createElement(DomainLegend, { model: model })));
|
|
9
11
|
});
|
|
10
12
|
export default MSAPanel;
|
|
11
13
|
//# sourceMappingURL=MSAPanel.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MSAPanel.js","sourceRoot":"","sources":["../../../src/components/msa/MSAPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAErC,OAAO,SAAS,MAAM,gBAAiB,CAAA;AACvC,OAAO,kBAAkB,MAAM,yBAA0B,CAAA;AAKzD,MAAM,QAAQ,GAAG,QAAQ,CAAC,UAAU,EAAE,KAAK,EAA2B;IACpE,OAAO,CACL,6BAAK,KAAK,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE;QAClC,oBAAC,SAAS,IAAC,KAAK,EAAE,KAAK,GAAI;QAC3B,oBAAC,kBAAkB,IAAC,KAAK,EAAE,KAAK,GAAI,
|
|
1
|
+
{"version":3,"file":"MSAPanel.js","sourceRoot":"","sources":["../../../src/components/msa/MSAPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAErC,OAAO,YAAY,MAAM,mBAAoB,CAAA;AAC7C,OAAO,SAAS,MAAM,gBAAiB,CAAA;AACvC,OAAO,kBAAkB,MAAM,yBAA0B,CAAA;AAKzD,MAAM,QAAQ,GAAG,QAAQ,CAAC,UAAU,EAAE,KAAK,EAA2B;IACpE,OAAO,CACL,6BAAK,KAAK,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE;QAClC,oBAAC,SAAS,IAAC,KAAK,EAAE,KAAK,GAAI;QAC3B,oBAAC,kBAAkB,IAAC,KAAK,EAAE,KAAK,GAAI;QACpC,oBAAC,YAAY,IAAC,KAAK,EAAE,KAAK,GAAI,CAC1B,CACP,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,eAAe,QAAQ,CAAA"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { getVisibleLeaves } from "./getVisibleLeaves.js";
|
|
2
|
+
import { subFeatureRowHeight } from "../../constants.js";
|
|
2
3
|
export function renderBoxFeatureCanvasBlock({ model, offsetX, offsetY, ctx, highResScaleFactorOverride, blockSizeYOverride, }) {
|
|
3
4
|
const { blockSize, rowHeight, highResScaleFactor, showDomains } = model;
|
|
4
5
|
if (showDomains) {
|
|
@@ -16,32 +17,77 @@ export function renderBoxFeatureCanvasBlock({ model, offsetX, offsetY, ctx, high
|
|
|
16
17
|
}
|
|
17
18
|
}
|
|
18
19
|
function drawTiles({ model, ctx, visibleLeaves, }) {
|
|
19
|
-
const { subFeatureRows, colWidth, rowHeight, fillPalette, strokePalette, tidyFilteredGatheredInterProAnnotations, } = model;
|
|
20
|
+
const { subFeatureRows, colWidth, rowHeight, fillPalette, strokePalette, segmentLabels, showMsaLetters, tidyFilteredGatheredInterProAnnotations, } = model;
|
|
21
|
+
const h = subFeatureRows ? subFeatureRowHeight : rowHeight;
|
|
22
|
+
// exon numbers label the bands only when residue letters aren't drawn (zoomed
|
|
23
|
+
// out); when letters show, the alternating shades alone mark the boundaries
|
|
24
|
+
// and a number would collide with the sequence
|
|
25
|
+
const drawSegmentLabels = !showMsaLetters && !subFeatureRows && h >= 9;
|
|
20
26
|
for (let i = 0, l1 = visibleLeaves.length; i < l1; i++) {
|
|
21
27
|
const node = visibleLeaves[i];
|
|
22
|
-
const {
|
|
23
|
-
const y = x;
|
|
28
|
+
const { name } = node.data;
|
|
29
|
+
const y = node.x;
|
|
24
30
|
const entry = tidyFilteredGatheredInterProAnnotations[name];
|
|
25
31
|
if (entry) {
|
|
26
32
|
for (let j = 0, l2 = entry.length; j < l2; j++) {
|
|
27
|
-
const { start, end, accession } = entry[j];
|
|
33
|
+
const { start, end, accession, strand } = entry[j];
|
|
28
34
|
// Convert sequence positions to visible column positions
|
|
29
35
|
// seqPos is 1-based from InterPro, so subtract 1 for 0-based
|
|
30
36
|
const m1 = model.seqPosToVisibleCol(name, start - 1);
|
|
31
37
|
const m2 = model.seqPosToVisibleCol(name, end);
|
|
32
|
-
if (m1
|
|
33
|
-
|
|
38
|
+
if (m1 !== undefined && m2 !== undefined) {
|
|
39
|
+
const x = m1 * colWidth;
|
|
40
|
+
const t = y - rowHeight + (subFeatureRows ? j * h : 0);
|
|
41
|
+
const lw = colWidth * (m2 - m1);
|
|
42
|
+
ctx.fillStyle = fillPalette[accession];
|
|
43
|
+
ctx.strokeStyle = strokePalette[accession];
|
|
44
|
+
if (strand === undefined) {
|
|
45
|
+
ctx.fillRect(x, t, lw, h);
|
|
46
|
+
ctx.strokeRect(x, t, lw, h);
|
|
47
|
+
// segment (exon) number drawn once per band, on the top visible row,
|
|
48
|
+
// so it reads as a column header for the whole band
|
|
49
|
+
const label = drawSegmentLabels
|
|
50
|
+
? segmentLabels.get(accession)
|
|
51
|
+
: undefined;
|
|
52
|
+
if (label !== undefined && i === 0) {
|
|
53
|
+
const fontSize = Math.min(h - 2, 11);
|
|
54
|
+
ctx.font = `${fontSize}px sans-serif`;
|
|
55
|
+
if (ctx.measureText(label).width + 2 <= lw) {
|
|
56
|
+
ctx.fillStyle = '#222';
|
|
57
|
+
ctx.textAlign = 'center';
|
|
58
|
+
ctx.textBaseline = 'middle';
|
|
59
|
+
ctx.fillText(label, x + lw / 2, t + h / 2);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
drawGeneArrow({ ctx, x, t, w: lw, h, strand });
|
|
65
|
+
}
|
|
34
66
|
}
|
|
35
|
-
const x = m1 * colWidth;
|
|
36
|
-
ctx.fillStyle = fillPalette[accession];
|
|
37
|
-
ctx.strokeStyle = strokePalette[accession];
|
|
38
|
-
const h = subFeatureRows ? 4 : rowHeight;
|
|
39
|
-
const t = y - rowHeight + (subFeatureRows ? j * h : 0);
|
|
40
|
-
const lw = colWidth * (m2 - m1);
|
|
41
|
-
ctx.fillRect(x, t, lw, h);
|
|
42
|
-
ctx.strokeRect(x, t, lw, h);
|
|
43
67
|
}
|
|
44
68
|
}
|
|
45
69
|
}
|
|
46
70
|
}
|
|
71
|
+
// A gene arrow: a full-width rectangular body spanning the feature's
|
|
72
|
+
// start..end columns, plus a triangular head that points *beyond* that end in
|
|
73
|
+
// the strand direction (right for +, left for -). Keeping the body aligned to
|
|
74
|
+
// the exact start/end columns means + and - strand features read as having the
|
|
75
|
+
// same boundaries; the arrow lives outside them purely to show transcription
|
|
76
|
+
// direction, preserving the column-by-column homology down the rows.
|
|
77
|
+
function drawGeneArrow({ ctx, x, t, w, h, strand, }) {
|
|
78
|
+
// body spans bodyStart..bodyEnd (the exact columns); the head extends one
|
|
79
|
+
// row-height past bodyEnd in the strand direction
|
|
80
|
+
const dir = strand > 0 ? 1 : -1;
|
|
81
|
+
const bodyStart = strand > 0 ? x : x + w;
|
|
82
|
+
const bodyEnd = strand > 0 ? x + w : x;
|
|
83
|
+
ctx.beginPath();
|
|
84
|
+
ctx.moveTo(bodyStart, t);
|
|
85
|
+
ctx.lineTo(bodyEnd, t);
|
|
86
|
+
ctx.lineTo(bodyEnd + dir * h, t + h / 2);
|
|
87
|
+
ctx.lineTo(bodyEnd, t + h);
|
|
88
|
+
ctx.lineTo(bodyStart, t + h);
|
|
89
|
+
ctx.closePath();
|
|
90
|
+
ctx.fill();
|
|
91
|
+
ctx.stroke();
|
|
92
|
+
}
|
|
47
93
|
//# sourceMappingURL=renderBoxFeatureCanvasBlock.js.map
|