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.
Files changed (34) 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/header/Header.js +4 -2
  5. package/dist/components/header/Header.js.map +1 -1
  6. package/dist/components/header/HeaderMenu.js +199 -11
  7. package/dist/components/header/HeaderMenu.js.map +1 -1
  8. package/dist/components/header/MultiAlignmentSelector.js +3 -3
  9. package/dist/components/header/MultiAlignmentSelector.js.map +1 -1
  10. package/dist/components/header/{HeaderMenuExtra.d.ts → SettingsMenu.d.ts} +2 -2
  11. package/dist/components/header/SettingsMenu.js +141 -0
  12. package/dist/components/header/SettingsMenu.js.map +1 -0
  13. package/dist/components/header/ZoomStar.js +1 -1
  14. package/dist/components/header/ZoomStar.js.map +1 -1
  15. package/dist/model.d.ts +2 -4
  16. package/dist/model.js +9 -16
  17. package/dist/model.js.map +1 -1
  18. package/dist/version.d.ts +1 -1
  19. package/dist/version.js +1 -1
  20. package/dist/webpack.d.ts +5 -0
  21. package/dist/webpack.js +7 -0
  22. package/dist/webpack.js.map +1 -0
  23. package/package.json +2 -2
  24. package/src/components/header/Header.tsx +4 -2
  25. package/src/components/header/HeaderMenu.tsx +215 -11
  26. package/src/components/header/MultiAlignmentSelector.tsx +7 -6
  27. package/src/components/header/SettingsMenu.tsx +169 -0
  28. package/src/components/header/ZoomStar.tsx +1 -2
  29. package/src/model.ts +23 -30
  30. package/src/version.ts +1 -1
  31. package/src/webpack.ts +9 -0
  32. package/dist/components/header/HeaderMenuExtra.js +0 -128
  33. package/dist/components/header/HeaderMenuExtra.js.map +0 -1
  34. 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, true),
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
- if (text) {
636
- return reparseTree(
637
- generateNodeIds(
638
- text.startsWith('BioTreeContainer')
639
- ? flatToTree(parseAsn1(text))
640
- : parseNewick(
641
- text.startsWith('SEQ') ? parseEmfTree(text).tree : text,
642
- ),
643
- ),
644
- )
645
- } else {
646
- return reparseTree(
647
- this.MSA?.getTree() || {
648
- noTree: true,
649
- children: [],
650
- id: 'empty',
651
- name: 'empty',
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.2.0'
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":"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"}
@@ -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