react-msaview 4.1.1 → 4.3.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/bundle/index.js +104 -213
- package/bundle/index.js.LICENSE.txt +173 -0
- package/bundle/index.js.map +1 -0
- package/dist/components/TextTrack.d.ts +2 -1
- package/dist/components/TextTrack.js.map +1 -1
- package/dist/components/Track.js.map +1 -1
- package/dist/components/header/Header.js +10 -3
- package/dist/components/header/Header.js.map +1 -1
- package/dist/components/header/HeaderMenu.js +199 -11
- package/dist/components/header/HeaderMenu.js.map +1 -1
- package/dist/components/header/MultiAlignmentSelector.js +3 -3
- package/dist/components/header/MultiAlignmentSelector.js.map +1 -1
- package/dist/components/header/{HeaderMenuExtra.d.ts → SettingsMenu.d.ts} +2 -2
- package/dist/components/header/SettingsMenu.js +141 -0
- package/dist/components/header/SettingsMenu.js.map +1 -0
- package/dist/components/header/ZoomControls.d.ts +1 -1
- package/dist/components/header/ZoomControls.js +1 -46
- package/dist/components/header/ZoomControls.js.map +1 -1
- package/dist/components/header/ZoomMenu.d.ts +6 -0
- package/dist/components/header/ZoomMenu.js +33 -0
- package/dist/components/header/ZoomMenu.js.map +1 -0
- package/dist/components/header/ZoomStar.d.ts +6 -0
- package/dist/components/header/ZoomStar.js +40 -0
- package/dist/components/header/ZoomStar.js.map +1 -0
- package/dist/components/tree/renderTreeCanvas.js +6 -3
- package/dist/components/tree/renderTreeCanvas.js.map +1 -1
- package/dist/flatToTree.d.ts +17 -0
- package/dist/flatToTree.js +41 -0
- package/dist/flatToTree.js.map +1 -0
- package/dist/model.d.ts +21 -28
- package/dist/model.js +47 -32
- package/dist/model.js.map +1 -1
- package/dist/parseAsn1.d.ts +34 -0
- package/dist/parseAsn1.js +385 -0
- package/dist/parseAsn1.js.map +1 -0
- package/dist/parseAsn1.test.d.ts +1 -0
- package/dist/parseAsn1.test.js +8 -0
- package/dist/parseAsn1.test.js.map +1 -0
- package/dist/parsers/ClustalMSA.d.ts +1 -1
- package/dist/parsers/ClustalMSA.js.map +1 -1
- package/dist/parsers/EmfMSA.d.ts +1 -1
- package/dist/parsers/FastaMSA.d.ts +1 -1
- package/dist/parsers/StockholmMSA.d.ts +1 -1
- package/dist/parsers/StockholmMSA.js.map +1 -1
- package/dist/renderToSvg.d.ts +3 -2
- package/dist/renderToSvg.js.map +1 -1
- package/dist/reparseTree.d.ts +1 -1
- package/dist/reparseTree.js +2 -0
- package/dist/reparseTree.js.map +1 -1
- package/dist/types.d.ts +38 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/util.d.ts +6 -20
- package/dist/util.js +19 -0
- package/dist/util.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/webpack.d.ts +5 -0
- package/dist/webpack.js +7 -0
- package/dist/webpack.js.map +1 -0
- package/package.json +4 -3
- package/src/__snapshots__/parseAsn1.test.ts.snap +2400 -0
- package/src/components/TextTrack.tsx +2 -1
- package/src/components/Track.tsx +0 -2
- package/src/components/header/Header.tsx +11 -3
- package/src/components/header/HeaderMenu.tsx +215 -11
- package/src/components/header/MultiAlignmentSelector.tsx +7 -6
- package/src/components/header/SettingsMenu.tsx +169 -0
- package/src/components/header/ZoomControls.tsx +1 -52
- package/src/components/header/ZoomMenu.tsx +42 -0
- package/src/components/header/ZoomStar.tsx +74 -0
- package/src/components/msa/renderBoxFeatureCanvasBlock.ts +1 -1
- package/src/components/msa/renderMSABlock.ts +1 -1
- package/src/components/tree/renderTreeCanvas.ts +13 -3
- package/src/flatToTree.ts +57 -0
- package/src/model.ts +75 -61
- package/src/parseAsn1.test.ts +11 -0
- package/src/parseAsn1.ts +494 -0
- package/src/parsers/ClustalMSA.ts +2 -1
- package/src/parsers/EmfMSA.ts +1 -1
- package/src/parsers/FastaMSA.ts +1 -1
- package/src/parsers/StockholmMSA.ts +4 -1
- package/src/renderToSvg.tsx +6 -4
- package/src/reparseTree.ts +3 -1
- package/src/types.ts +44 -0
- package/src/util.ts +26 -22
- package/src/version.ts +1 -1
- package/src/webpack.ts +9 -0
- package/dist/components/header/HeaderMenuExtra.js +0 -122
- package/dist/components/header/HeaderMenuExtra.js.map +0 -1
- package/src/components/header/HeaderMenuExtra.tsx +0 -135
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import CascadingMenuButton from '@jbrowse/core/ui/CascadingMenuButton';
|
|
3
|
+
import MoreVert from '@mui/icons-material/MoreVert';
|
|
4
|
+
import RestartAlt from '@mui/icons-material/RestartAlt';
|
|
5
|
+
import { observer } from 'mobx-react';
|
|
6
|
+
const ZoomMenu = observer(function ({ model }) {
|
|
7
|
+
return (React.createElement(CascadingMenuButton, { menuItems: [
|
|
8
|
+
{
|
|
9
|
+
label: 'Fit to view',
|
|
10
|
+
onClick: () => {
|
|
11
|
+
model.showEntire();
|
|
12
|
+
},
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
label: 'Reset zoom to default',
|
|
16
|
+
icon: RestartAlt,
|
|
17
|
+
onClick: () => {
|
|
18
|
+
model.resetZoom();
|
|
19
|
+
},
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
label: 'Show extra zoom options',
|
|
23
|
+
checked: model.showZoomStar,
|
|
24
|
+
type: 'checkbox',
|
|
25
|
+
onClick: () => {
|
|
26
|
+
model.setShowZoomStar(!model.showZoomStar);
|
|
27
|
+
},
|
|
28
|
+
},
|
|
29
|
+
] },
|
|
30
|
+
React.createElement(MoreVert, null)));
|
|
31
|
+
});
|
|
32
|
+
export default ZoomMenu;
|
|
33
|
+
//# sourceMappingURL=ZoomMenu.js.map
|
|
@@ -0,0 +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,aAAa;gBACpB,OAAO,EAAE,GAAG,EAAE;oBACZ,KAAK,CAAC,UAAU,EAAE,CAAA;gBACpB,CAAC;aACF;YACD;gBACE,KAAK,EAAE,uBAAuB;gBAC9B,IAAI,EAAE,UAAU;gBAChB,OAAO,EAAE,GAAG,EAAE;oBACZ,KAAK,CAAC,SAAS,EAAE,CAAA;gBACnB,CAAC;aACF;YACD;gBACE,KAAK,EAAE,yBAAyB;gBAChC,OAAO,EAAE,KAAK,CAAC,YAAY;gBAC3B,IAAI,EAAE,UAAU;gBAChB,OAAO,EAAE,GAAG,EAAE;oBACZ,KAAK,CAAC,eAAe,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAA;gBAC5C,CAAC;aACF;SACF;QAED,oBAAC,QAAQ,OAAG,CACQ,CACvB,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,eAAe,QAAQ,CAAA"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import RestartAlt from '@mui/icons-material/RestartAlt';
|
|
3
|
+
import { IconButton } from '@mui/material';
|
|
4
|
+
import { observer } from 'mobx-react';
|
|
5
|
+
import { makeStyles } from 'tss-react/mui';
|
|
6
|
+
const useStyles = makeStyles()(theme => ({
|
|
7
|
+
dpad: {
|
|
8
|
+
display: 'grid',
|
|
9
|
+
gridTemplateColumns: 'repeat(3, 1fr)',
|
|
10
|
+
},
|
|
11
|
+
icon: {
|
|
12
|
+
padding: theme.spacing(0.5),
|
|
13
|
+
},
|
|
14
|
+
}));
|
|
15
|
+
const ZoomStar = observer(function ({ model }) {
|
|
16
|
+
const { classes } = useStyles();
|
|
17
|
+
return (React.createElement("div", { className: classes.dpad },
|
|
18
|
+
React.createElement("div", null),
|
|
19
|
+
React.createElement(IconButton, { className: classes.icon, onClick: () => {
|
|
20
|
+
model.zoomInVertical();
|
|
21
|
+
} }, "Y+"),
|
|
22
|
+
React.createElement("div", null),
|
|
23
|
+
React.createElement(IconButton, { className: classes.icon, onClick: () => {
|
|
24
|
+
model.zoomOutHorizontal();
|
|
25
|
+
} }, "X-"),
|
|
26
|
+
React.createElement(IconButton, { className: classes.icon, onClick: () => {
|
|
27
|
+
model.resetZoom();
|
|
28
|
+
} },
|
|
29
|
+
React.createElement(RestartAlt, null)),
|
|
30
|
+
React.createElement(IconButton, { className: classes.icon, onClick: () => {
|
|
31
|
+
model.zoomInHorizontal();
|
|
32
|
+
} }, "X+"),
|
|
33
|
+
React.createElement("div", null),
|
|
34
|
+
React.createElement(IconButton, { className: classes.icon, onClick: () => {
|
|
35
|
+
model.zoomOutVertical();
|
|
36
|
+
} }, "Y-"),
|
|
37
|
+
React.createElement("div", null)));
|
|
38
|
+
});
|
|
39
|
+
export default ZoomStar;
|
|
40
|
+
//# sourceMappingURL=ZoomStar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ZoomStar.js","sourceRoot":"","sources":["../../../src/components/header/ZoomStar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,UAAU,MAAM,gCAAgC,CAAA;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAI1C,MAAM,SAAS,GAAG,UAAU,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACvC,IAAI,EAAE;QACJ,OAAO,EAAE,MAAM;QACf,mBAAmB,EAAE,gBAAgB;KACtC;IACD,IAAI,EAAE;QACJ,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;KAC5B;CACF,CAAC,CAAC,CAAA;AAEH,MAAM,QAAQ,GAAG,QAAQ,CAAC,UAAU,EAAE,KAAK,EAA2B;IACpE,MAAM,EAAE,OAAO,EAAE,GAAG,SAAS,EAAE,CAAA;IAC/B,OAAO,CACL,6BAAK,SAAS,EAAE,OAAO,CAAC,IAAI;QAC1B,gCAAO;QACP,oBAAC,UAAU,IACT,SAAS,EAAE,OAAO,CAAC,IAAI,EACvB,OAAO,EAAE,GAAG,EAAE;gBACZ,KAAK,CAAC,cAAc,EAAE,CAAA;YACxB,CAAC,SAGU;QACb,gCAAO;QAEP,oBAAC,UAAU,IACT,SAAS,EAAE,OAAO,CAAC,IAAI,EACvB,OAAO,EAAE,GAAG,EAAE;gBACZ,KAAK,CAAC,iBAAiB,EAAE,CAAA;YAC3B,CAAC,SAGU;QACb,oBAAC,UAAU,IACT,SAAS,EAAE,OAAO,CAAC,IAAI,EACvB,OAAO,EAAE,GAAG,EAAE;gBACZ,KAAK,CAAC,SAAS,EAAE,CAAA;YACnB,CAAC;YAED,oBAAC,UAAU,OAAG,CACH;QACb,oBAAC,UAAU,IACT,SAAS,EAAE,OAAO,CAAC,IAAI,EACvB,OAAO,EAAE,GAAG,EAAE;gBACZ,KAAK,CAAC,gBAAgB,EAAE,CAAA;YAC1B,CAAC,SAGU;QAEb,gCAAO;QACP,oBAAC,UAAU,IACT,SAAS,EAAE,OAAO,CAAC,IAAI,EACvB,OAAO,EAAE,GAAG,EAAE;gBACZ,KAAK,CAAC,eAAe,EAAE,CAAA;YACzB,CAAC,SAGU;QACb,gCAAO,CACH,CACP,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,eAAe,QAAQ,CAAA"}
|
|
@@ -3,9 +3,10 @@ const extendBounds = 5;
|
|
|
3
3
|
const radius = 2.5;
|
|
4
4
|
const d = radius * 2;
|
|
5
5
|
export function renderTree({ offsetY, ctx, model, theme, blockSizeYOverride, }) {
|
|
6
|
-
const { hierarchy, showBranchLen, blockSize } = model;
|
|
6
|
+
const { hierarchy, allBranchesLength0, showBranchLen: showBranchLenPre, blockSize, } = model;
|
|
7
7
|
const by = blockSizeYOverride || blockSize;
|
|
8
8
|
ctx.strokeStyle = theme.palette.text.primary;
|
|
9
|
+
const showBranchLen = allBranchesLength0 ? false : showBranchLenPre;
|
|
9
10
|
for (const link of hierarchy.links()) {
|
|
10
11
|
const { source, target } = link;
|
|
11
12
|
if (target.height === 0 && !showBranchLen) {
|
|
@@ -32,8 +33,9 @@ export function renderTree({ offsetY, ctx, model, theme, blockSizeYOverride, })
|
|
|
32
33
|
}
|
|
33
34
|
}
|
|
34
35
|
export function renderNodeBubbles({ ctx, clickMap, offsetY, model, blockSizeYOverride, }) {
|
|
35
|
-
const { hierarchy, showBranchLen, collapsed, blockSize, marginLeft: ml, } = model;
|
|
36
|
+
const { hierarchy, showBranchLen: showBranchLenPre, allBranchesLength0, collapsed, blockSize, marginLeft: ml, } = model;
|
|
36
37
|
const by = blockSizeYOverride || blockSize;
|
|
38
|
+
const showBranchLen = allBranchesLength0 ? false : showBranchLenPre;
|
|
37
39
|
for (const node of hierarchy.descendants()) {
|
|
38
40
|
const val = showBranchLen ? 'len' : 'y';
|
|
39
41
|
// @ts-expect-error
|
|
@@ -62,7 +64,7 @@ export function renderNodeBubbles({ ctx, clickMap, offsetY, model, blockSizeYOve
|
|
|
62
64
|
}
|
|
63
65
|
}
|
|
64
66
|
export function renderTreeLabels({ theme, model, offsetY, ctx, clickMap, blockSizeYOverride, }) {
|
|
65
|
-
const { fontSize, showBranchLen, treeMetadata, hierarchy, collapsed, collapsedLeaves, blockSize, labelsAlignRight, drawTree, treeAreaWidth, treeWidth, treeAreaWidthMinusMargin, marginLeft, leaves, noTree, } = model;
|
|
67
|
+
const { fontSize, showBranchLen: showBranchLenPre, allBranchesLength0, treeMetadata, hierarchy, collapsed, collapsedLeaves, blockSize, labelsAlignRight, drawTree, treeAreaWidth, treeWidth, treeAreaWidthMinusMargin, marginLeft, leaves, noTree, } = model;
|
|
66
68
|
const by = blockSizeYOverride || blockSize;
|
|
67
69
|
if (labelsAlignRight) {
|
|
68
70
|
ctx.textAlign = 'right';
|
|
@@ -71,6 +73,7 @@ export function renderTreeLabels({ theme, model, offsetY, ctx, clickMap, blockSi
|
|
|
71
73
|
else {
|
|
72
74
|
ctx.textAlign = 'start';
|
|
73
75
|
}
|
|
76
|
+
const showBranchLen = allBranchesLength0 ? false : showBranchLenPre;
|
|
74
77
|
for (const node of leaves) {
|
|
75
78
|
const { data: { name, id },
|
|
76
79
|
// @ts-expect-error
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderTreeCanvas.js","sourceRoot":"","sources":["../../../src/components/tree/renderTreeCanvas.ts"],"names":[],"mappings":"AAIA,MAAM,CAAC,MAAM,OAAO,GAAG,GAAG,CAAA;AAE1B,MAAM,YAAY,GAAG,CAAC,CAAA;AACtB,MAAM,MAAM,GAAG,GAAG,CAAA;AAClB,MAAM,CAAC,GAAG,MAAM,GAAG,CAAC,CAAA;AAYpB,MAAM,UAAU,UAAU,CAAC,EACzB,OAAO,EACP,GAAG,EACH,KAAK,EACL,KAAK,EACL,kBAAkB,GAOnB;IACC,MAAM,
|
|
1
|
+
{"version":3,"file":"renderTreeCanvas.js","sourceRoot":"","sources":["../../../src/components/tree/renderTreeCanvas.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
interface FlatItem {
|
|
2
|
+
id: number;
|
|
3
|
+
parent?: number;
|
|
4
|
+
}
|
|
5
|
+
interface TreeNode {
|
|
6
|
+
id: string;
|
|
7
|
+
name: string;
|
|
8
|
+
parent?: string;
|
|
9
|
+
children: TreeNode[];
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Parses a flat list of items into a tree structure
|
|
13
|
+
* @param items - Array of flat items with id and optional parent
|
|
14
|
+
* @returns Array of root tree nodes
|
|
15
|
+
*/
|
|
16
|
+
export declare function flatToTree(items: FlatItem[]): TreeNode;
|
|
17
|
+
export {};
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parses a flat list of items into a tree structure
|
|
3
|
+
* @param items - Array of flat items with id and optional parent
|
|
4
|
+
* @returns Array of root tree nodes
|
|
5
|
+
*/
|
|
6
|
+
export function flatToTree(items) {
|
|
7
|
+
// Create a map to store all nodes by their id for quick lookup
|
|
8
|
+
const nodeMap = new Map();
|
|
9
|
+
// First pass: Create all tree nodes
|
|
10
|
+
items.forEach(item => {
|
|
11
|
+
nodeMap.set(item.id, {
|
|
12
|
+
...item,
|
|
13
|
+
id: `${item.id}`,
|
|
14
|
+
name: `${item.id}`,
|
|
15
|
+
parent: item.parent !== undefined ? `${item.parent}` : undefined,
|
|
16
|
+
children: [],
|
|
17
|
+
});
|
|
18
|
+
});
|
|
19
|
+
// Second pass: Build parent-child relationships
|
|
20
|
+
const roots = [];
|
|
21
|
+
items.forEach(item => {
|
|
22
|
+
const node = nodeMap.get(item.id);
|
|
23
|
+
if (item.parent !== undefined) {
|
|
24
|
+
// This item has a parent, add it to parent's children
|
|
25
|
+
const parentNode = nodeMap.get(item.parent);
|
|
26
|
+
if (parentNode) {
|
|
27
|
+
parentNode.children.push(node);
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
// Parent doesn't exist, treat as root
|
|
31
|
+
roots.push(node);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
// This item has no parent, it's a root node
|
|
36
|
+
roots.push(node);
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
return roots[0];
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=flatToTree.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flatToTree.js","sourceRoot":"","sources":["../src/flatToTree.ts"],"names":[],"mappings":"AAcA;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAC,KAAiB;IAC1C,+DAA+D;IAC/D,MAAM,OAAO,GAAG,IAAI,GAAG,EAAoB,CAAA;IAE3C,oCAAoC;IACpC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QACnB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE;YACnB,GAAG,IAAI;YACP,EAAE,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE;YAChB,IAAI,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE;YAClB,MAAM,EAAE,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,SAAS;YAChE,QAAQ,EAAE,EAAE;SACb,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,gDAAgD;IAChD,MAAM,KAAK,GAAe,EAAE,CAAA;IAE5B,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QACnB,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAE,CAAA;QAElC,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC9B,sDAAsD;YACtD,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;YAC3C,IAAI,UAAU,EAAE,CAAC;gBACf,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YAChC,CAAC;iBAAM,CAAC;gBACN,sCAAsC;gBACtC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YAClB,CAAC;QACH,CAAC;aAAM,CAAC;YACN,4CAA4C;YAC5C,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAClB,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,OAAO,KAAK,CAAC,CAAC,CAAE,CAAA;AAClB,CAAC"}
|
package/dist/model.d.ts
CHANGED
|
@@ -1,35 +1,13 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
1
|
import ClustalMSA from './parsers/ClustalMSA';
|
|
3
2
|
import EmfMSA from './parsers/EmfMSA';
|
|
4
3
|
import FastaMSA from './parsers/FastaMSA';
|
|
5
4
|
import StockholmMSA from './parsers/StockholmMSA';
|
|
6
5
|
import type { InterProScanResults } from './launchInterProScan';
|
|
7
|
-
import type { NodeWithIds, NodeWithIdsAndLength } from './
|
|
6
|
+
import type { Accession, BasicTrack, NodeWithIds, NodeWithIdsAndLength } from './types';
|
|
8
7
|
import type { FileLocation as FileLocationType } from '@jbrowse/core/util/types';
|
|
9
8
|
import type { Theme } from '@mui/material';
|
|
10
9
|
import type { HierarchyNode } from 'd3-hierarchy';
|
|
11
10
|
import type { Instance } from 'mobx-state-tree';
|
|
12
|
-
export interface Accession {
|
|
13
|
-
accession: string;
|
|
14
|
-
name: string;
|
|
15
|
-
description: string;
|
|
16
|
-
}
|
|
17
|
-
export interface BasicTrackModel {
|
|
18
|
-
id: string;
|
|
19
|
-
name: string;
|
|
20
|
-
associatedRowName?: string;
|
|
21
|
-
height: number;
|
|
22
|
-
}
|
|
23
|
-
export interface TextTrackModel extends BasicTrackModel {
|
|
24
|
-
customColorScheme?: Record<string, string>;
|
|
25
|
-
data: string;
|
|
26
|
-
}
|
|
27
|
-
export interface ITextTrack {
|
|
28
|
-
ReactComponent: React.FC<any>;
|
|
29
|
-
model: TextTrackModel;
|
|
30
|
-
}
|
|
31
|
-
export type BasicTrack = ITextTrack;
|
|
32
|
-
export declare function isGzip(buf: Uint8Array): boolean;
|
|
33
11
|
/**
|
|
34
12
|
* #stateModel MsaView
|
|
35
13
|
* extends
|
|
@@ -52,13 +30,12 @@ declare function stateModelFactory(): import("mobx-state-tree").IModelType<{
|
|
|
52
30
|
} & {
|
|
53
31
|
id: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
|
|
54
32
|
showDomains: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
33
|
+
hideGaps: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
55
34
|
allowedGappyness: import("mobx-state-tree").IType<number | undefined, number, number>;
|
|
56
35
|
contrastLettering: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
57
36
|
subFeatureRows: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
58
37
|
type: import("mobx-state-tree").ISimpleType<"MsaView">;
|
|
59
38
|
drawMsaLetters: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
60
|
-
hideGaps: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
61
|
-
drawTreeText: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
62
39
|
height: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<number>, [undefined]>;
|
|
63
40
|
rowHeight: import("mobx-state-tree").IType<number | undefined, number, number>;
|
|
64
41
|
scrollY: import("mobx-state-tree").IType<number | undefined, number, number>;
|
|
@@ -275,6 +252,11 @@ declare function stateModelFactory(): import("mobx-state-tree").IModelType<{
|
|
|
275
252
|
* screens
|
|
276
253
|
*/
|
|
277
254
|
highResScaleFactor: number;
|
|
255
|
+
/**
|
|
256
|
+
* #volatile
|
|
257
|
+
* obtained from localStorage
|
|
258
|
+
*/
|
|
259
|
+
showZoomStar: boolean;
|
|
278
260
|
/**
|
|
279
261
|
* #volatile
|
|
280
262
|
*/
|
|
@@ -367,6 +349,10 @@ declare function stateModelFactory(): import("mobx-state-tree").IModelType<{
|
|
|
367
349
|
* #action
|
|
368
350
|
*/
|
|
369
351
|
setLoadingMSA(arg: boolean): void;
|
|
352
|
+
/**
|
|
353
|
+
* #volatile
|
|
354
|
+
*/
|
|
355
|
+
setShowZoomStar(arg: boolean): void;
|
|
370
356
|
/**
|
|
371
357
|
* #action
|
|
372
358
|
*/
|
|
@@ -604,6 +590,10 @@ declare function stateModelFactory(): import("mobx-state-tree").IModelType<{
|
|
|
604
590
|
* #getter
|
|
605
591
|
*/
|
|
606
592
|
readonly leaves: HierarchyNode<NodeWithIdsAndLength>[];
|
|
593
|
+
/**
|
|
594
|
+
* #getter
|
|
595
|
+
*/
|
|
596
|
+
readonly allBranchesLength0: boolean;
|
|
607
597
|
} & {
|
|
608
598
|
/**
|
|
609
599
|
* #getter
|
|
@@ -648,6 +638,10 @@ declare function stateModelFactory(): import("mobx-state-tree").IModelType<{
|
|
|
648
638
|
* #action
|
|
649
639
|
*/
|
|
650
640
|
setDrawMsaLetters(arg: boolean): void;
|
|
641
|
+
/**
|
|
642
|
+
* #action
|
|
643
|
+
*/
|
|
644
|
+
resetZoom(): void;
|
|
651
645
|
/**
|
|
652
646
|
* #action
|
|
653
647
|
*/
|
|
@@ -727,7 +721,7 @@ declare function stateModelFactory(): import("mobx-state-tree").IModelType<{
|
|
|
727
721
|
/**
|
|
728
722
|
* #getter
|
|
729
723
|
*/
|
|
730
|
-
readonly turnedOnTracks: ITextTrack[];
|
|
724
|
+
readonly turnedOnTracks: import("./types").ITextTrack[];
|
|
731
725
|
/**
|
|
732
726
|
* #getter
|
|
733
727
|
*/
|
|
@@ -880,12 +874,11 @@ declare function stateModelFactory(): import("mobx-state-tree").IModelType<{
|
|
|
880
874
|
colorSchemeName: string;
|
|
881
875
|
id: string;
|
|
882
876
|
showDomains: boolean;
|
|
877
|
+
hideGaps: boolean;
|
|
883
878
|
allowedGappyness: number;
|
|
884
879
|
contrastLettering: boolean;
|
|
885
880
|
subFeatureRows: boolean;
|
|
886
881
|
drawMsaLetters: boolean;
|
|
887
|
-
hideGaps: boolean;
|
|
888
|
-
drawTreeText: boolean;
|
|
889
882
|
rowHeight: number;
|
|
890
883
|
scrollY: number;
|
|
891
884
|
scrollX: number;
|
package/dist/model.js
CHANGED
|
@@ -4,6 +4,7 @@ import { ElementId, FileLocation } from '@jbrowse/core/util/types/mst';
|
|
|
4
4
|
import { colord } from 'colord';
|
|
5
5
|
import { ascending } from 'd3-array';
|
|
6
6
|
import { cluster, hierarchy } from 'd3-hierarchy';
|
|
7
|
+
import { parseEmfTree } from 'emf-js';
|
|
7
8
|
import { saveAs } from 'file-saver';
|
|
8
9
|
import { autorun, transaction } from 'mobx';
|
|
9
10
|
import { addDisposer, cast, types } from 'mobx-state-tree';
|
|
@@ -12,24 +13,25 @@ import Stockholm from 'stockholm-js';
|
|
|
12
13
|
import { blocksX, blocksY } from './calculateBlocks';
|
|
13
14
|
import colorSchemes from './colorSchemes';
|
|
14
15
|
import TextTrack from './components/TextTrack';
|
|
16
|
+
import { flatToTree } from './flatToTree';
|
|
15
17
|
import palettes from './ggplotPalettes';
|
|
16
18
|
import { measureTextCanvas } from './measureTextCanvas';
|
|
17
19
|
import { DataModelF } from './model/DataModel';
|
|
18
20
|
import { DialogQueueSessionMixin } from './model/DialogQueue';
|
|
19
21
|
import { MSAModelF } from './model/msaModel';
|
|
20
22
|
import { TreeModelF } from './model/treeModel';
|
|
23
|
+
import { parseAsn1 } from './parseAsn1';
|
|
21
24
|
import parseNewick from './parseNewick';
|
|
22
25
|
import ClustalMSA from './parsers/ClustalMSA';
|
|
23
26
|
import EmfMSA from './parsers/EmfMSA';
|
|
24
|
-
import EmfTree from './parsers/EmfTree';
|
|
25
27
|
import FastaMSA from './parsers/FastaMSA';
|
|
26
28
|
import StockholmMSA from './parsers/StockholmMSA';
|
|
27
29
|
import { reparseTree } from './reparseTree';
|
|
28
30
|
import { globalCoordToRowSpecificCoord, mouseOverCoordToGlobalCoord, } from './rowCoordinateCalculations';
|
|
29
|
-
import { clamp, collapse, generateNodeIds, len, maxLength, setBrLength, skipBlanks, } from './util';
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
31
|
+
import { clamp, collapse, generateNodeIds, isGzip, len, localStorageGetBoolean, localStorageSetBoolean, maxLength, setBrLength, skipBlanks, } from './util';
|
|
32
|
+
const defaultRowHeight = 16;
|
|
33
|
+
const defaultColWidth = 12;
|
|
34
|
+
const showZoomStarKey = 'msa-showZoomStar';
|
|
33
35
|
/**
|
|
34
36
|
* #stateModel MsaView
|
|
35
37
|
* extends
|
|
@@ -49,6 +51,10 @@ function stateModelFactory() {
|
|
|
49
51
|
* #property
|
|
50
52
|
*/
|
|
51
53
|
showDomains: false,
|
|
54
|
+
/**
|
|
55
|
+
* #property
|
|
56
|
+
*/
|
|
57
|
+
hideGaps: true,
|
|
52
58
|
/**
|
|
53
59
|
* #property
|
|
54
60
|
*/
|
|
@@ -70,14 +76,6 @@ function stateModelFactory() {
|
|
|
70
76
|
* #property
|
|
71
77
|
*/
|
|
72
78
|
drawMsaLetters: true,
|
|
73
|
-
/**
|
|
74
|
-
* #property
|
|
75
|
-
*/
|
|
76
|
-
hideGaps: false,
|
|
77
|
-
/**
|
|
78
|
-
* #property
|
|
79
|
-
*/
|
|
80
|
-
drawTreeText: true,
|
|
81
79
|
/**
|
|
82
80
|
* #property
|
|
83
81
|
* height of the div containing the view, px
|
|
@@ -87,7 +85,7 @@ function stateModelFactory() {
|
|
|
87
85
|
* #property
|
|
88
86
|
* height of each row, px
|
|
89
87
|
*/
|
|
90
|
-
rowHeight:
|
|
88
|
+
rowHeight: defaultRowHeight,
|
|
91
89
|
/**
|
|
92
90
|
* #property
|
|
93
91
|
* scroll position, Y-offset, px
|
|
@@ -102,7 +100,7 @@ function stateModelFactory() {
|
|
|
102
100
|
* #property
|
|
103
101
|
* width of columns, px
|
|
104
102
|
*/
|
|
105
|
-
colWidth:
|
|
103
|
+
colWidth: defaultColWidth,
|
|
106
104
|
/**
|
|
107
105
|
* #property
|
|
108
106
|
* filehandle object for the tree
|
|
@@ -180,6 +178,11 @@ function stateModelFactory() {
|
|
|
180
178
|
* screens
|
|
181
179
|
*/
|
|
182
180
|
highResScaleFactor: 2,
|
|
181
|
+
/**
|
|
182
|
+
* #volatile
|
|
183
|
+
* obtained from localStorage
|
|
184
|
+
*/
|
|
185
|
+
showZoomStar: localStorageGetBoolean(showZoomStarKey, false),
|
|
183
186
|
/**
|
|
184
187
|
* #volatile
|
|
185
188
|
*/
|
|
@@ -280,6 +283,12 @@ function stateModelFactory() {
|
|
|
280
283
|
setLoadingMSA(arg) {
|
|
281
284
|
self.loadingMSA = arg;
|
|
282
285
|
},
|
|
286
|
+
/**
|
|
287
|
+
* #volatile
|
|
288
|
+
*/
|
|
289
|
+
setShowZoomStar(arg) {
|
|
290
|
+
self.showZoomStar = arg;
|
|
291
|
+
},
|
|
283
292
|
/**
|
|
284
293
|
* #action
|
|
285
294
|
*/
|
|
@@ -538,27 +547,16 @@ function stateModelFactory() {
|
|
|
538
547
|
*/
|
|
539
548
|
get tree() {
|
|
540
549
|
const text = self.data.tree;
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
t = r.data.tree;
|
|
547
|
-
}
|
|
548
|
-
else {
|
|
549
|
-
t = text;
|
|
550
|
-
}
|
|
551
|
-
ret = generateNodeIds(parseNewick(t));
|
|
552
|
-
}
|
|
553
|
-
else {
|
|
554
|
-
ret = this.MSA?.getTree() || {
|
|
550
|
+
return text
|
|
551
|
+
? reparseTree(generateNodeIds(text.startsWith('BioTreeContainer')
|
|
552
|
+
? flatToTree(parseAsn1(text))
|
|
553
|
+
: parseNewick(text.startsWith('SEQ') ? parseEmfTree(text).tree : text)))
|
|
554
|
+
: reparseTree(this.MSA?.getTree() || {
|
|
555
555
|
noTree: true,
|
|
556
556
|
children: [],
|
|
557
557
|
id: 'empty',
|
|
558
558
|
name: 'empty',
|
|
559
|
-
};
|
|
560
|
-
}
|
|
561
|
-
return reparseTree(ret);
|
|
559
|
+
});
|
|
562
560
|
},
|
|
563
561
|
/**
|
|
564
562
|
* #getter
|
|
@@ -736,6 +734,12 @@ function stateModelFactory() {
|
|
|
736
734
|
get leaves() {
|
|
737
735
|
return this.hierarchy.leaves();
|
|
738
736
|
},
|
|
737
|
+
/**
|
|
738
|
+
* #getter
|
|
739
|
+
*/
|
|
740
|
+
get allBranchesLength0() {
|
|
741
|
+
return this.hierarchy.links().every(s => !s.source.data.length);
|
|
742
|
+
},
|
|
739
743
|
}))
|
|
740
744
|
.views(self => ({
|
|
741
745
|
/**
|
|
@@ -822,6 +826,13 @@ function stateModelFactory() {
|
|
|
822
826
|
setDrawMsaLetters(arg) {
|
|
823
827
|
self.drawMsaLetters = arg;
|
|
824
828
|
},
|
|
829
|
+
/**
|
|
830
|
+
* #action
|
|
831
|
+
*/
|
|
832
|
+
resetZoom() {
|
|
833
|
+
self.setColWidth(defaultColWidth);
|
|
834
|
+
self.setRowHeight(defaultRowHeight);
|
|
835
|
+
},
|
|
825
836
|
/**
|
|
826
837
|
* #action
|
|
827
838
|
*/
|
|
@@ -1223,6 +1234,10 @@ function stateModelFactory() {
|
|
|
1223
1234
|
this.initFilter(key);
|
|
1224
1235
|
}
|
|
1225
1236
|
}));
|
|
1237
|
+
// autorun saves local settings
|
|
1238
|
+
addDisposer(self, autorun(() => {
|
|
1239
|
+
localStorageSetBoolean(showZoomStarKey, self.showZoomStar);
|
|
1240
|
+
}));
|
|
1226
1241
|
// autorun opens treeFilehandle
|
|
1227
1242
|
addDisposer(self, autorun(async () => {
|
|
1228
1243
|
const { treeFilehandle } = self;
|