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.
Files changed (91) hide show
  1. package/bundle/index.js +104 -213
  2. package/bundle/index.js.LICENSE.txt +173 -0
  3. package/bundle/index.js.map +1 -0
  4. package/dist/components/TextTrack.d.ts +2 -1
  5. package/dist/components/TextTrack.js.map +1 -1
  6. package/dist/components/Track.js.map +1 -1
  7. package/dist/components/header/Header.js +10 -3
  8. package/dist/components/header/Header.js.map +1 -1
  9. package/dist/components/header/HeaderMenu.js +199 -11
  10. package/dist/components/header/HeaderMenu.js.map +1 -1
  11. package/dist/components/header/MultiAlignmentSelector.js +3 -3
  12. package/dist/components/header/MultiAlignmentSelector.js.map +1 -1
  13. package/dist/components/header/{HeaderMenuExtra.d.ts → SettingsMenu.d.ts} +2 -2
  14. package/dist/components/header/SettingsMenu.js +141 -0
  15. package/dist/components/header/SettingsMenu.js.map +1 -0
  16. package/dist/components/header/ZoomControls.d.ts +1 -1
  17. package/dist/components/header/ZoomControls.js +1 -46
  18. package/dist/components/header/ZoomControls.js.map +1 -1
  19. package/dist/components/header/ZoomMenu.d.ts +6 -0
  20. package/dist/components/header/ZoomMenu.js +33 -0
  21. package/dist/components/header/ZoomMenu.js.map +1 -0
  22. package/dist/components/header/ZoomStar.d.ts +6 -0
  23. package/dist/components/header/ZoomStar.js +40 -0
  24. package/dist/components/header/ZoomStar.js.map +1 -0
  25. package/dist/components/tree/renderTreeCanvas.js +6 -3
  26. package/dist/components/tree/renderTreeCanvas.js.map +1 -1
  27. package/dist/flatToTree.d.ts +17 -0
  28. package/dist/flatToTree.js +41 -0
  29. package/dist/flatToTree.js.map +1 -0
  30. package/dist/model.d.ts +21 -28
  31. package/dist/model.js +47 -32
  32. package/dist/model.js.map +1 -1
  33. package/dist/parseAsn1.d.ts +34 -0
  34. package/dist/parseAsn1.js +385 -0
  35. package/dist/parseAsn1.js.map +1 -0
  36. package/dist/parseAsn1.test.d.ts +1 -0
  37. package/dist/parseAsn1.test.js +8 -0
  38. package/dist/parseAsn1.test.js.map +1 -0
  39. package/dist/parsers/ClustalMSA.d.ts +1 -1
  40. package/dist/parsers/ClustalMSA.js.map +1 -1
  41. package/dist/parsers/EmfMSA.d.ts +1 -1
  42. package/dist/parsers/FastaMSA.d.ts +1 -1
  43. package/dist/parsers/StockholmMSA.d.ts +1 -1
  44. package/dist/parsers/StockholmMSA.js.map +1 -1
  45. package/dist/renderToSvg.d.ts +3 -2
  46. package/dist/renderToSvg.js.map +1 -1
  47. package/dist/reparseTree.d.ts +1 -1
  48. package/dist/reparseTree.js +2 -0
  49. package/dist/reparseTree.js.map +1 -1
  50. package/dist/types.d.ts +38 -0
  51. package/dist/types.js +2 -0
  52. package/dist/types.js.map +1 -0
  53. package/dist/util.d.ts +6 -20
  54. package/dist/util.js +19 -0
  55. package/dist/util.js.map +1 -1
  56. package/dist/version.d.ts +1 -1
  57. package/dist/version.js +1 -1
  58. package/dist/webpack.d.ts +5 -0
  59. package/dist/webpack.js +7 -0
  60. package/dist/webpack.js.map +1 -0
  61. package/package.json +4 -3
  62. package/src/__snapshots__/parseAsn1.test.ts.snap +2400 -0
  63. package/src/components/TextTrack.tsx +2 -1
  64. package/src/components/Track.tsx +0 -2
  65. package/src/components/header/Header.tsx +11 -3
  66. package/src/components/header/HeaderMenu.tsx +215 -11
  67. package/src/components/header/MultiAlignmentSelector.tsx +7 -6
  68. package/src/components/header/SettingsMenu.tsx +169 -0
  69. package/src/components/header/ZoomControls.tsx +1 -52
  70. package/src/components/header/ZoomMenu.tsx +42 -0
  71. package/src/components/header/ZoomStar.tsx +74 -0
  72. package/src/components/msa/renderBoxFeatureCanvasBlock.ts +1 -1
  73. package/src/components/msa/renderMSABlock.ts +1 -1
  74. package/src/components/tree/renderTreeCanvas.ts +13 -3
  75. package/src/flatToTree.ts +57 -0
  76. package/src/model.ts +75 -61
  77. package/src/parseAsn1.test.ts +11 -0
  78. package/src/parseAsn1.ts +494 -0
  79. package/src/parsers/ClustalMSA.ts +2 -1
  80. package/src/parsers/EmfMSA.ts +1 -1
  81. package/src/parsers/FastaMSA.ts +1 -1
  82. package/src/parsers/StockholmMSA.ts +4 -1
  83. package/src/renderToSvg.tsx +6 -4
  84. package/src/reparseTree.ts +3 -1
  85. package/src/types.ts +44 -0
  86. package/src/util.ts +26 -22
  87. package/src/version.ts +1 -1
  88. package/src/webpack.ts +9 -0
  89. package/dist/components/header/HeaderMenuExtra.js +0 -122
  90. package/dist/components/header/HeaderMenuExtra.js.map +0 -1
  91. 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,6 @@
1
+ import React from 'react';
2
+ import type { MsaViewModel } from '../../model';
3
+ declare const ZoomStar: ({ model }: {
4
+ model: MsaViewModel;
5
+ }) => React.JSX.Element;
6
+ export default ZoomStar;
@@ -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":"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"}
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 './util';
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
- export function isGzip(buf) {
31
- return buf[0] === 31 && buf[1] === 139 && buf[2] === 8;
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: 18,
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: 14,
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
- let ret;
542
- if (text) {
543
- let t;
544
- if (text.startsWith('SEQ')) {
545
- const r = new EmfTree(text);
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;