react-msaview 4.2.0 → 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/header/Header.js +4 -2
- 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/ZoomStar.js +1 -1
- package/dist/components/header/ZoomStar.js.map +1 -1
- package/dist/model.d.ts +2 -4
- package/dist/model.js +9 -16
- package/dist/model.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 +2 -2
- package/src/components/header/Header.tsx +4 -2
- 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/ZoomStar.tsx +1 -2
- package/src/model.ts +23 -30
- package/src/version.ts +1 -1
- package/src/webpack.ts +9 -0
- package/dist/components/header/HeaderMenuExtra.js +0 -128
- package/dist/components/header/HeaderMenuExtra.js.map +0 -1
- package/src/components/header/HeaderMenuExtra.tsx +0 -141
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
import React, { lazy } from 'react'
|
|
2
|
+
|
|
3
|
+
import CascadingMenuButton from '@jbrowse/core/ui/CascadingMenuButton'
|
|
4
|
+
import AccountTreeIcon from '@mui/icons-material/AccountTree'
|
|
5
|
+
import ColorLensIcon from '@mui/icons-material/ColorLens'
|
|
6
|
+
import GridOn from '@mui/icons-material/GridOn'
|
|
7
|
+
import Settings from '@mui/icons-material/Settings'
|
|
8
|
+
import { observer } from 'mobx-react'
|
|
9
|
+
|
|
10
|
+
import colorSchemes from '../../colorSchemes'
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
import type { MsaViewModel } from '../../model'
|
|
14
|
+
|
|
15
|
+
// lazies
|
|
16
|
+
const SettingsDialog = lazy(() => import('../dialogs/SettingsDialog'))
|
|
17
|
+
|
|
18
|
+
const SettingsMenu = observer(({ model }: { model: MsaViewModel }) => {
|
|
19
|
+
const {
|
|
20
|
+
drawTree,
|
|
21
|
+
showBranchLen,
|
|
22
|
+
labelsAlignRight,
|
|
23
|
+
drawNodeBubbles,
|
|
24
|
+
drawLabels,
|
|
25
|
+
treeWidthMatchesArea,
|
|
26
|
+
drawMsaLetters,
|
|
27
|
+
noTree,
|
|
28
|
+
bgColor,
|
|
29
|
+
hideGaps,
|
|
30
|
+
contrastLettering,
|
|
31
|
+
colorSchemeName,
|
|
32
|
+
} = model
|
|
33
|
+
return (
|
|
34
|
+
<CascadingMenuButton
|
|
35
|
+
menuItems={[
|
|
36
|
+
{
|
|
37
|
+
label: 'Tree settings',
|
|
38
|
+
type: 'subMenu',
|
|
39
|
+
icon: AccountTreeIcon,
|
|
40
|
+
subMenu: [
|
|
41
|
+
{
|
|
42
|
+
label: 'Show branch length',
|
|
43
|
+
type: 'checkbox',
|
|
44
|
+
checked: showBranchLen,
|
|
45
|
+
onClick: () => {
|
|
46
|
+
model.setShowBranchLen(!showBranchLen)
|
|
47
|
+
},
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
label: 'Show tree',
|
|
51
|
+
type: 'checkbox',
|
|
52
|
+
checked: drawTree,
|
|
53
|
+
onClick: () => {
|
|
54
|
+
model.setDrawTree(!drawTree)
|
|
55
|
+
},
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
label: 'Draw clickable bubbles on tree branches',
|
|
59
|
+
type: 'checkbox',
|
|
60
|
+
checked: drawNodeBubbles,
|
|
61
|
+
onClick: () => {
|
|
62
|
+
model.setDrawNodeBubbles(!drawNodeBubbles)
|
|
63
|
+
},
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
label: 'Tree labels align right',
|
|
67
|
+
type: 'checkbox',
|
|
68
|
+
checked: labelsAlignRight,
|
|
69
|
+
onClick: () => {
|
|
70
|
+
model.setLabelsAlignRight(!labelsAlignRight)
|
|
71
|
+
},
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
label: 'Draw labels',
|
|
75
|
+
type: 'checkbox',
|
|
76
|
+
checked: drawLabels,
|
|
77
|
+
onClick: () => {
|
|
78
|
+
model.setDrawLabels(!drawLabels)
|
|
79
|
+
},
|
|
80
|
+
},
|
|
81
|
+
...(noTree
|
|
82
|
+
? []
|
|
83
|
+
: [
|
|
84
|
+
{
|
|
85
|
+
label: 'Make tree width fit to tree area',
|
|
86
|
+
type: 'checkbox' as const,
|
|
87
|
+
checked: treeWidthMatchesArea,
|
|
88
|
+
onClick: () => {
|
|
89
|
+
model.setTreeWidthMatchesArea(!treeWidthMatchesArea)
|
|
90
|
+
},
|
|
91
|
+
},
|
|
92
|
+
]),
|
|
93
|
+
],
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
label: 'MSA settings',
|
|
97
|
+
type: 'subMenu',
|
|
98
|
+
icon: GridOn,
|
|
99
|
+
subMenu: [
|
|
100
|
+
{
|
|
101
|
+
label: 'Draw letters',
|
|
102
|
+
type: 'checkbox',
|
|
103
|
+
checked: drawMsaLetters,
|
|
104
|
+
onClick: () => {
|
|
105
|
+
model.setDrawMsaLetters(!drawMsaLetters)
|
|
106
|
+
},
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
label: 'Color background tiles of MSA?',
|
|
110
|
+
type: 'checkbox',
|
|
111
|
+
checked: bgColor,
|
|
112
|
+
onClick: () => {
|
|
113
|
+
model.setBgColor(!bgColor)
|
|
114
|
+
},
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
label: 'Use contrast lettering',
|
|
118
|
+
type: 'checkbox',
|
|
119
|
+
checked: contrastLettering,
|
|
120
|
+
onClick: () => {
|
|
121
|
+
model.setContrastLettering(!contrastLettering)
|
|
122
|
+
},
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
label: 'Enable hiding gappy columns?',
|
|
126
|
+
type: 'checkbox',
|
|
127
|
+
checked: hideGaps,
|
|
128
|
+
onClick: () => {
|
|
129
|
+
model.setHideGaps(!hideGaps)
|
|
130
|
+
},
|
|
131
|
+
},
|
|
132
|
+
],
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
label: 'Color scheme',
|
|
136
|
+
type: 'subMenu',
|
|
137
|
+
icon: ColorLensIcon,
|
|
138
|
+
subMenu: Object.keys(colorSchemes).map(
|
|
139
|
+
option =>
|
|
140
|
+
({
|
|
141
|
+
label: option,
|
|
142
|
+
type: 'radio',
|
|
143
|
+
checked: colorSchemeName === option,
|
|
144
|
+
onClick: () => {
|
|
145
|
+
model.setColorSchemeName(option)
|
|
146
|
+
},
|
|
147
|
+
}) as const,
|
|
148
|
+
),
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
label: 'More settings',
|
|
152
|
+
onClick: () => {
|
|
153
|
+
model.queueDialog(onClose => [
|
|
154
|
+
SettingsDialog,
|
|
155
|
+
{
|
|
156
|
+
model,
|
|
157
|
+
onClose,
|
|
158
|
+
},
|
|
159
|
+
])
|
|
160
|
+
},
|
|
161
|
+
},
|
|
162
|
+
]}
|
|
163
|
+
>
|
|
164
|
+
<Settings />
|
|
165
|
+
</CascadingMenuButton>
|
|
166
|
+
)
|
|
167
|
+
})
|
|
168
|
+
|
|
169
|
+
export default SettingsMenu
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import React from 'react'
|
|
2
2
|
|
|
3
|
+
import RestartAlt from '@mui/icons-material/RestartAlt'
|
|
3
4
|
import { IconButton } from '@mui/material'
|
|
4
5
|
import { observer } from 'mobx-react'
|
|
5
6
|
import { makeStyles } from 'tss-react/mui'
|
|
6
7
|
|
|
7
|
-
import { RestartAlt } from '@mui/icons-material'
|
|
8
|
-
|
|
9
8
|
import type { MsaViewModel } from '../../model'
|
|
10
9
|
|
|
11
10
|
const useStyles = makeStyles()(theme => ({
|
package/src/model.ts
CHANGED
|
@@ -86,6 +86,10 @@ function stateModelFactory() {
|
|
|
86
86
|
* #property
|
|
87
87
|
*/
|
|
88
88
|
showDomains: false,
|
|
89
|
+
/**
|
|
90
|
+
* #property
|
|
91
|
+
*/
|
|
92
|
+
hideGaps: true,
|
|
89
93
|
/**
|
|
90
94
|
* #property
|
|
91
95
|
*/
|
|
@@ -110,15 +114,6 @@ function stateModelFactory() {
|
|
|
110
114
|
* #property
|
|
111
115
|
*/
|
|
112
116
|
drawMsaLetters: true,
|
|
113
|
-
/**
|
|
114
|
-
* #property
|
|
115
|
-
*/
|
|
116
|
-
hideGaps: false,
|
|
117
|
-
|
|
118
|
-
/**
|
|
119
|
-
* #property
|
|
120
|
-
*/
|
|
121
|
-
drawTreeText: true,
|
|
122
117
|
|
|
123
118
|
/**
|
|
124
119
|
* #property
|
|
@@ -240,7 +235,7 @@ function stateModelFactory() {
|
|
|
240
235
|
* #volatile
|
|
241
236
|
* obtained from localStorage
|
|
242
237
|
*/
|
|
243
|
-
showZoomStar: localStorageGetBoolean(showZoomStarKey,
|
|
238
|
+
showZoomStar: localStorageGetBoolean(showZoomStarKey, false),
|
|
244
239
|
/**
|
|
245
240
|
* #volatile
|
|
246
241
|
*/
|
|
@@ -632,26 +627,24 @@ function stateModelFactory() {
|
|
|
632
627
|
*/
|
|
633
628
|
get tree(): NodeWithIds {
|
|
634
629
|
const text = self.data.tree
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
)
|
|
654
|
-
}
|
|
630
|
+
return text
|
|
631
|
+
? reparseTree(
|
|
632
|
+
generateNodeIds(
|
|
633
|
+
text.startsWith('BioTreeContainer')
|
|
634
|
+
? flatToTree(parseAsn1(text))
|
|
635
|
+
: parseNewick(
|
|
636
|
+
text.startsWith('SEQ') ? parseEmfTree(text).tree : text,
|
|
637
|
+
),
|
|
638
|
+
),
|
|
639
|
+
)
|
|
640
|
+
: reparseTree(
|
|
641
|
+
this.MSA?.getTree() || {
|
|
642
|
+
noTree: true,
|
|
643
|
+
children: [],
|
|
644
|
+
id: 'empty',
|
|
645
|
+
name: 'empty',
|
|
646
|
+
},
|
|
647
|
+
)
|
|
655
648
|
},
|
|
656
649
|
|
|
657
650
|
/**
|
package/src/version.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export const version = '4.
|
|
1
|
+
export const version = '4.3.0'
|
package/src/webpack.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import * as React from 'react'
|
|
2
|
+
|
|
3
|
+
export { default as MSAView } from './components/Loading'
|
|
4
|
+
export { type MsaViewModel, default as MSAModelF } from './model'
|
|
5
|
+
|
|
6
|
+
export * from 'react-dom/client'
|
|
7
|
+
|
|
8
|
+
// eslint-disable-next-line unicorn/prefer-export-from
|
|
9
|
+
export { React }
|
|
@@ -1,128 +0,0 @@
|
|
|
1
|
-
import React, { lazy } from 'react';
|
|
2
|
-
import CascadingMenuButton from '@jbrowse/core/ui/CascadingMenuButton';
|
|
3
|
-
import Assignment from '@mui/icons-material/Assignment';
|
|
4
|
-
import FilterAlt from '@mui/icons-material/FilterAlt';
|
|
5
|
-
import FolderOpen from '@mui/icons-material/FolderOpen';
|
|
6
|
-
import List from '@mui/icons-material/List';
|
|
7
|
-
import MoreVert from '@mui/icons-material/Menu';
|
|
8
|
-
import PhotoCamera from '@mui/icons-material/PhotoCamera';
|
|
9
|
-
import Search from '@mui/icons-material/Search';
|
|
10
|
-
import Settings from '@mui/icons-material/Settings';
|
|
11
|
-
import Sort from '@mui/icons-material/Sort';
|
|
12
|
-
import Visibility from '@mui/icons-material/Visibility';
|
|
13
|
-
import { observer } from 'mobx-react';
|
|
14
|
-
// lazies
|
|
15
|
-
const SettingsDialog = lazy(() => import('../dialogs/SettingsDialog'));
|
|
16
|
-
const MetadataDialog = lazy(() => import('../dialogs/MetadataDialog'));
|
|
17
|
-
const TracklistDialog = lazy(() => import('../dialogs/TracklistDialog'));
|
|
18
|
-
const ExportSVGDialog = lazy(() => import('../dialogs/ExportSVGDialog'));
|
|
19
|
-
const FeatureFilterDialog = lazy(() => import('../dialogs/FeatureDialog'));
|
|
20
|
-
const UserProvidedDomainsDialog = lazy(() => import('../dialogs/UserProvidedDomainsDialog'));
|
|
21
|
-
const InterProScanDialog = lazy(() => import('../dialogs/InterProScanDialog'));
|
|
22
|
-
const HeaderMenuExtra = observer(({ model }) => {
|
|
23
|
-
const { showDomains, actuallyShowDomains, subFeatureRows, noDomains } = model;
|
|
24
|
-
return (React.createElement(CascadingMenuButton, { menuItems: [
|
|
25
|
-
{
|
|
26
|
-
label: 'Return to import form',
|
|
27
|
-
icon: FolderOpen,
|
|
28
|
-
onClick: () => {
|
|
29
|
-
model.reset();
|
|
30
|
-
},
|
|
31
|
-
},
|
|
32
|
-
{
|
|
33
|
-
label: 'Settings',
|
|
34
|
-
onClick: () => {
|
|
35
|
-
model.queueDialog(onClose => [SettingsDialog, { model, onClose }]);
|
|
36
|
-
},
|
|
37
|
-
icon: Settings,
|
|
38
|
-
},
|
|
39
|
-
{
|
|
40
|
-
label: 'Metadata',
|
|
41
|
-
onClick: () => {
|
|
42
|
-
model.queueDialog(onClose => [MetadataDialog, { model, onClose }]);
|
|
43
|
-
},
|
|
44
|
-
icon: Assignment,
|
|
45
|
-
},
|
|
46
|
-
{
|
|
47
|
-
label: 'Extra tracks',
|
|
48
|
-
onClick: () => {
|
|
49
|
-
model.queueDialog(onClose => [TracklistDialog, { model, onClose }]);
|
|
50
|
-
},
|
|
51
|
-
icon: List,
|
|
52
|
-
},
|
|
53
|
-
{
|
|
54
|
-
label: 'Export SVG',
|
|
55
|
-
icon: PhotoCamera,
|
|
56
|
-
onClick: () => {
|
|
57
|
-
model.queueDialog(onClose => [ExportSVGDialog, { onClose, model }]);
|
|
58
|
-
},
|
|
59
|
-
},
|
|
60
|
-
{
|
|
61
|
-
label: 'Features/protein domains',
|
|
62
|
-
type: 'subMenu',
|
|
63
|
-
subMenu: [
|
|
64
|
-
{
|
|
65
|
-
label: 'Open domains...',
|
|
66
|
-
icon: FolderOpen,
|
|
67
|
-
onClick: () => {
|
|
68
|
-
model.queueDialog(handleClose => [
|
|
69
|
-
UserProvidedDomainsDialog,
|
|
70
|
-
{
|
|
71
|
-
handleClose,
|
|
72
|
-
model,
|
|
73
|
-
},
|
|
74
|
-
]);
|
|
75
|
-
},
|
|
76
|
-
},
|
|
77
|
-
{
|
|
78
|
-
label: 'Query InterProScan for domains...',
|
|
79
|
-
icon: Search,
|
|
80
|
-
onClick: () => {
|
|
81
|
-
model.queueDialog(handleClose => [
|
|
82
|
-
InterProScanDialog,
|
|
83
|
-
{ handleClose, model },
|
|
84
|
-
]);
|
|
85
|
-
},
|
|
86
|
-
},
|
|
87
|
-
{
|
|
88
|
-
label: `Show domains${noDomains ? ' (no domains loaded)' : ''}`,
|
|
89
|
-
disabled: noDomains,
|
|
90
|
-
icon: Visibility,
|
|
91
|
-
checked: actuallyShowDomains ? showDomains : false,
|
|
92
|
-
type: 'checkbox',
|
|
93
|
-
onClick: () => {
|
|
94
|
-
model.setShowDomains(!showDomains);
|
|
95
|
-
},
|
|
96
|
-
},
|
|
97
|
-
{
|
|
98
|
-
label: `Use sub-row layout${noDomains ? ' (no domains loaded)' : ''}`,
|
|
99
|
-
disabled: noDomains,
|
|
100
|
-
checked: actuallyShowDomains ? subFeatureRows : false,
|
|
101
|
-
icon: Sort,
|
|
102
|
-
type: 'checkbox',
|
|
103
|
-
onClick: () => {
|
|
104
|
-
model.setSubFeatureRows(!subFeatureRows);
|
|
105
|
-
},
|
|
106
|
-
},
|
|
107
|
-
{
|
|
108
|
-
label: `Filter domains${noDomains ? ' (no domains loaded)' : ''}`,
|
|
109
|
-
icon: FilterAlt,
|
|
110
|
-
disabled: noDomains,
|
|
111
|
-
onClick: () => {
|
|
112
|
-
model.queueDialog(onClose => [
|
|
113
|
-
FeatureFilterDialog,
|
|
114
|
-
{
|
|
115
|
-
onClose,
|
|
116
|
-
model,
|
|
117
|
-
},
|
|
118
|
-
]);
|
|
119
|
-
},
|
|
120
|
-
},
|
|
121
|
-
],
|
|
122
|
-
},
|
|
123
|
-
...model.extraViewMenuItems(),
|
|
124
|
-
] },
|
|
125
|
-
React.createElement(MoreVert, null)));
|
|
126
|
-
});
|
|
127
|
-
export default HeaderMenuExtra;
|
|
128
|
-
//# sourceMappingURL=HeaderMenuExtra.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"HeaderMenuExtra.js","sourceRoot":"","sources":["../../../src/components/header/HeaderMenuExtra.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,OAAO,CAAA;AAEnC,OAAO,mBAAmB,MAAM,sCAAsC,CAAA;AACtE,OAAO,UAAU,MAAM,gCAAgC,CAAA;AACvD,OAAO,SAAS,MAAM,+BAA+B,CAAA;AACrD,OAAO,UAAU,MAAM,gCAAgC,CAAA;AACvD,OAAO,IAAI,MAAM,0BAA0B,CAAA;AAC3C,OAAO,QAAQ,MAAM,0BAA0B,CAAA;AAC/C,OAAO,WAAW,MAAM,iCAAiC,CAAA;AACzD,OAAO,MAAM,MAAM,4BAA4B,CAAA;AAC/C,OAAO,QAAQ,MAAM,8BAA8B,CAAA;AACnD,OAAO,IAAI,MAAM,0BAA0B,CAAA;AAC3C,OAAO,UAAU,MAAM,gCAAgC,CAAA;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAIrC,SAAS;AACT,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,2BAA2B,CAAC,CAAC,CAAA;AACtE,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,2BAA2B,CAAC,CAAC,CAAA;AACtE,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,4BAA4B,CAAC,CAAC,CAAA;AACxE,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,4BAA4B,CAAC,CAAC,CAAA;AACxE,MAAM,mBAAmB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,0BAA0B,CAAC,CAAC,CAAA;AAC1E,MAAM,yBAAyB,GAAG,IAAI,CACpC,GAAG,EAAE,CAAC,MAAM,CAAC,sCAAsC,CAAC,CACrD,CAAA;AACD,MAAM,kBAAkB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,+BAA+B,CAAC,CAAC,CAAA;AAE9E,MAAM,eAAe,GAAG,QAAQ,CAAC,CAAC,EAAE,KAAK,EAA2B,EAAE,EAAE;IACtE,MAAM,EAAE,WAAW,EAAE,mBAAmB,EAAE,cAAc,EAAE,SAAS,EAAE,GAAG,KAAK,CAAA;IAC7E,OAAO,CACL,oBAAC,mBAAmB,IAClB,SAAS,EAAE;YACT;gBACE,KAAK,EAAE,uBAAuB;gBAC9B,IAAI,EAAE,UAAU;gBAChB,OAAO,EAAE,GAAG,EAAE;oBACZ,KAAK,CAAC,KAAK,EAAE,CAAA;gBACf,CAAC;aACF;YACD;gBACE,KAAK,EAAE,UAAU;gBACjB,OAAO,EAAE,GAAG,EAAE;oBACZ,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,cAAc,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,CAAA;gBACpE,CAAC;gBACD,IAAI,EAAE,QAAQ;aACf;YACD;gBACE,KAAK,EAAE,UAAU;gBACjB,OAAO,EAAE,GAAG,EAAE;oBACZ,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,cAAc,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,CAAA;gBACpE,CAAC;gBACD,IAAI,EAAE,UAAU;aACjB;YACD;gBACE,KAAK,EAAE,cAAc;gBACrB,OAAO,EAAE,GAAG,EAAE;oBACZ,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,eAAe,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,CAAA;gBACrE,CAAC;gBACD,IAAI,EAAE,IAAI;aACX;YAED;gBACE,KAAK,EAAE,YAAY;gBACnB,IAAI,EAAE,WAAW;gBACjB,OAAO,EAAE,GAAG,EAAE;oBACZ,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,eAAe,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAA;gBACrE,CAAC;aACF;YACD;gBACE,KAAK,EAAE,0BAA0B;gBACjC,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE;oBACP;wBACE,KAAK,EAAE,iBAAiB;wBACxB,IAAI,EAAE,UAAU;wBAChB,OAAO,EAAE,GAAG,EAAE;4BACZ,KAAK,CAAC,WAAW,CAAC,WAAW,CAAC,EAAE,CAAC;gCAC/B,yBAAyB;gCACzB;oCACE,WAAW;oCACX,KAAK;iCACN;6BACF,CAAC,CAAA;wBACJ,CAAC;qBACF;oBACD;wBACE,KAAK,EAAE,mCAAmC;wBAC1C,IAAI,EAAE,MAAM;wBACZ,OAAO,EAAE,GAAG,EAAE;4BACZ,KAAK,CAAC,WAAW,CAAC,WAAW,CAAC,EAAE,CAAC;gCAC/B,kBAAkB;gCAClB,EAAE,WAAW,EAAE,KAAK,EAAE;6BACvB,CAAC,CAAA;wBACJ,CAAC;qBACF;oBACD;wBACE,KAAK,EAAE,eAAe,SAAS,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,EAAE,EAAE;wBAC/D,QAAQ,EAAE,SAAS;wBACnB,IAAI,EAAE,UAAU;wBAChB,OAAO,EAAE,mBAAmB,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK;wBAClD,IAAI,EAAE,UAAU;wBAChB,OAAO,EAAE,GAAG,EAAE;4BACZ,KAAK,CAAC,cAAc,CAAC,CAAC,WAAW,CAAC,CAAA;wBACpC,CAAC;qBACF;oBACD;wBACE,KAAK,EAAE,qBAAqB,SAAS,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,EAAE,EAAE;wBACrE,QAAQ,EAAE,SAAS;wBACnB,OAAO,EAAE,mBAAmB,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK;wBACrD,IAAI,EAAE,IAAI;wBACV,IAAI,EAAE,UAAU;wBAChB,OAAO,EAAE,GAAG,EAAE;4BACZ,KAAK,CAAC,iBAAiB,CAAC,CAAC,cAAc,CAAC,CAAA;wBAC1C,CAAC;qBACF;oBACD;wBACE,KAAK,EAAE,iBAAiB,SAAS,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,EAAE,EAAE;wBACjE,IAAI,EAAE,SAAS;wBACf,QAAQ,EAAE,SAAS;wBACnB,OAAO,EAAE,GAAG,EAAE;4BACZ,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC;gCAC3B,mBAAmB;gCACnB;oCACE,OAAO;oCACP,KAAK;iCACN;6BACF,CAAC,CAAA;wBACJ,CAAC;qBACF;iBACF;aACF;YACD,GAAG,KAAK,CAAC,kBAAkB,EAAE;SAC9B;QAED,oBAAC,QAAQ,OAAG,CACQ,CACvB,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,eAAe,eAAe,CAAA"}
|
|
@@ -1,141 +0,0 @@
|
|
|
1
|
-
import React, { lazy } from 'react'
|
|
2
|
-
|
|
3
|
-
import CascadingMenuButton from '@jbrowse/core/ui/CascadingMenuButton'
|
|
4
|
-
import Assignment from '@mui/icons-material/Assignment'
|
|
5
|
-
import FilterAlt from '@mui/icons-material/FilterAlt'
|
|
6
|
-
import FolderOpen from '@mui/icons-material/FolderOpen'
|
|
7
|
-
import List from '@mui/icons-material/List'
|
|
8
|
-
import MoreVert from '@mui/icons-material/Menu'
|
|
9
|
-
import PhotoCamera from '@mui/icons-material/PhotoCamera'
|
|
10
|
-
import Search from '@mui/icons-material/Search'
|
|
11
|
-
import Settings from '@mui/icons-material/Settings'
|
|
12
|
-
import Sort from '@mui/icons-material/Sort'
|
|
13
|
-
import Visibility from '@mui/icons-material/Visibility'
|
|
14
|
-
import { observer } from 'mobx-react'
|
|
15
|
-
|
|
16
|
-
import type { MsaViewModel } from '../../model'
|
|
17
|
-
|
|
18
|
-
// lazies
|
|
19
|
-
const SettingsDialog = lazy(() => import('../dialogs/SettingsDialog'))
|
|
20
|
-
const MetadataDialog = lazy(() => import('../dialogs/MetadataDialog'))
|
|
21
|
-
const TracklistDialog = lazy(() => import('../dialogs/TracklistDialog'))
|
|
22
|
-
const ExportSVGDialog = lazy(() => import('../dialogs/ExportSVGDialog'))
|
|
23
|
-
const FeatureFilterDialog = lazy(() => import('../dialogs/FeatureDialog'))
|
|
24
|
-
const UserProvidedDomainsDialog = lazy(
|
|
25
|
-
() => import('../dialogs/UserProvidedDomainsDialog'),
|
|
26
|
-
)
|
|
27
|
-
const InterProScanDialog = lazy(() => import('../dialogs/InterProScanDialog'))
|
|
28
|
-
|
|
29
|
-
const HeaderMenuExtra = observer(({ model }: { model: MsaViewModel }) => {
|
|
30
|
-
const { showDomains, actuallyShowDomains, subFeatureRows, noDomains } = model
|
|
31
|
-
return (
|
|
32
|
-
<CascadingMenuButton
|
|
33
|
-
menuItems={[
|
|
34
|
-
{
|
|
35
|
-
label: 'Return to import form',
|
|
36
|
-
icon: FolderOpen,
|
|
37
|
-
onClick: () => {
|
|
38
|
-
model.reset()
|
|
39
|
-
},
|
|
40
|
-
},
|
|
41
|
-
{
|
|
42
|
-
label: 'Settings',
|
|
43
|
-
onClick: () => {
|
|
44
|
-
model.queueDialog(onClose => [SettingsDialog, { model, onClose }])
|
|
45
|
-
},
|
|
46
|
-
icon: Settings,
|
|
47
|
-
},
|
|
48
|
-
{
|
|
49
|
-
label: 'Metadata',
|
|
50
|
-
onClick: () => {
|
|
51
|
-
model.queueDialog(onClose => [MetadataDialog, { model, onClose }])
|
|
52
|
-
},
|
|
53
|
-
icon: Assignment,
|
|
54
|
-
},
|
|
55
|
-
{
|
|
56
|
-
label: 'Extra tracks',
|
|
57
|
-
onClick: () => {
|
|
58
|
-
model.queueDialog(onClose => [TracklistDialog, { model, onClose }])
|
|
59
|
-
},
|
|
60
|
-
icon: List,
|
|
61
|
-
},
|
|
62
|
-
|
|
63
|
-
{
|
|
64
|
-
label: 'Export SVG',
|
|
65
|
-
icon: PhotoCamera,
|
|
66
|
-
onClick: () => {
|
|
67
|
-
model.queueDialog(onClose => [ExportSVGDialog, { onClose, model }])
|
|
68
|
-
},
|
|
69
|
-
},
|
|
70
|
-
{
|
|
71
|
-
label: 'Features/protein domains',
|
|
72
|
-
type: 'subMenu',
|
|
73
|
-
subMenu: [
|
|
74
|
-
{
|
|
75
|
-
label: 'Open domains...',
|
|
76
|
-
icon: FolderOpen,
|
|
77
|
-
onClick: () => {
|
|
78
|
-
model.queueDialog(handleClose => [
|
|
79
|
-
UserProvidedDomainsDialog,
|
|
80
|
-
{
|
|
81
|
-
handleClose,
|
|
82
|
-
model,
|
|
83
|
-
},
|
|
84
|
-
])
|
|
85
|
-
},
|
|
86
|
-
},
|
|
87
|
-
{
|
|
88
|
-
label: 'Query InterProScan for domains...',
|
|
89
|
-
icon: Search,
|
|
90
|
-
onClick: () => {
|
|
91
|
-
model.queueDialog(handleClose => [
|
|
92
|
-
InterProScanDialog,
|
|
93
|
-
{ handleClose, model },
|
|
94
|
-
])
|
|
95
|
-
},
|
|
96
|
-
},
|
|
97
|
-
{
|
|
98
|
-
label: `Show domains${noDomains ? ' (no domains loaded)' : ''}`,
|
|
99
|
-
disabled: noDomains,
|
|
100
|
-
icon: Visibility,
|
|
101
|
-
checked: actuallyShowDomains ? showDomains : false,
|
|
102
|
-
type: 'checkbox',
|
|
103
|
-
onClick: () => {
|
|
104
|
-
model.setShowDomains(!showDomains)
|
|
105
|
-
},
|
|
106
|
-
},
|
|
107
|
-
{
|
|
108
|
-
label: `Use sub-row layout${noDomains ? ' (no domains loaded)' : ''}`,
|
|
109
|
-
disabled: noDomains,
|
|
110
|
-
checked: actuallyShowDomains ? subFeatureRows : false,
|
|
111
|
-
icon: Sort,
|
|
112
|
-
type: 'checkbox',
|
|
113
|
-
onClick: () => {
|
|
114
|
-
model.setSubFeatureRows(!subFeatureRows)
|
|
115
|
-
},
|
|
116
|
-
},
|
|
117
|
-
{
|
|
118
|
-
label: `Filter domains${noDomains ? ' (no domains loaded)' : ''}`,
|
|
119
|
-
icon: FilterAlt,
|
|
120
|
-
disabled: noDomains,
|
|
121
|
-
onClick: () => {
|
|
122
|
-
model.queueDialog(onClose => [
|
|
123
|
-
FeatureFilterDialog,
|
|
124
|
-
{
|
|
125
|
-
onClose,
|
|
126
|
-
model,
|
|
127
|
-
},
|
|
128
|
-
])
|
|
129
|
-
},
|
|
130
|
-
},
|
|
131
|
-
],
|
|
132
|
-
},
|
|
133
|
-
...model.extraViewMenuItems(),
|
|
134
|
-
]}
|
|
135
|
-
>
|
|
136
|
-
<MoreVert />
|
|
137
|
-
</CascadingMenuButton>
|
|
138
|
-
)
|
|
139
|
-
})
|
|
140
|
-
|
|
141
|
-
export default HeaderMenuExtra
|