@jbrowse/plugin-linear-comparative-view 2.15.4 → 2.16.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 (101) hide show
  1. package/dist/LaunchLinearSyntenyView.js +41 -11
  2. package/dist/LinearComparativeDisplay/stateModelFactory.d.ts +14 -9
  3. package/dist/LinearComparativeDisplay/stateModelFactory.js +8 -9
  4. package/dist/LinearComparativeView/components/Header.d.ts +2 -3
  5. package/dist/LinearComparativeView/components/Header.js +72 -62
  6. package/dist/LinearComparativeView/components/HeaderSearchBoxes.d.ts +6 -0
  7. package/dist/LinearComparativeView/components/HeaderSearchBoxes.js +34 -0
  8. package/dist/LinearComparativeView/components/LinearComparativeRenderArea.d.ts +6 -0
  9. package/dist/LinearComparativeView/components/LinearComparativeRenderArea.js +61 -0
  10. package/dist/LinearComparativeView/components/LinearComparativeView.d.ts +2 -4
  11. package/dist/LinearComparativeView/components/LinearComparativeView.js +3 -67
  12. package/dist/LinearComparativeView/components/Rubberband.js +1 -1
  13. package/dist/LinearComparativeView/index.js +3 -0
  14. package/dist/LinearComparativeView/model.d.ts +265 -12
  15. package/dist/LinearComparativeView/model.js +45 -75
  16. package/dist/LinearSyntenyDisplay/afterAttach.js +5 -3
  17. package/dist/LinearSyntenyDisplay/components/LinearSyntenyRendering.js +32 -24
  18. package/dist/LinearSyntenyDisplay/components/SyntenyContextMenu.js +12 -6
  19. package/dist/LinearSyntenyDisplay/components/util.d.ts +2 -1
  20. package/dist/LinearSyntenyDisplay/components/util.js +5 -5
  21. package/dist/LinearSyntenyDisplay/drawSynteny.d.ts +1 -1
  22. package/dist/LinearSyntenyDisplay/drawSynteny.js +28 -22
  23. package/dist/LinearSyntenyDisplay/index.js +1 -1
  24. package/dist/LinearSyntenyDisplay/model.d.ts +12 -11
  25. package/dist/LinearSyntenyDisplay/model.js +7 -0
  26. package/dist/LinearSyntenyView/components/ImportForm/{ImportCustomTrack.d.ts → AddCustomTrack.d.ts} +2 -3
  27. package/dist/LinearSyntenyView/components/ImportForm/{ImportCustomTrack.js → AddCustomTrack.js} +3 -3
  28. package/dist/LinearSyntenyView/components/ImportForm/LinearSyntenyImportForm.js +195 -0
  29. package/dist/LinearSyntenyView/components/ImportForm/Spacer.d.ts +2 -0
  30. package/dist/LinearSyntenyView/components/ImportForm/Spacer.js +10 -0
  31. package/dist/LinearSyntenyView/components/ImportForm/TrackSelector.d.ts +10 -0
  32. package/dist/LinearSyntenyView/components/ImportForm/{ImportSyntenyTrackSelector.js → TrackSelector.js} +15 -20
  33. package/dist/LinearSyntenyView/components/ImportForm/TrackSelectorUtil.d.ts +14 -0
  34. package/dist/LinearSyntenyView/components/ImportForm/TrackSelectorUtil.js +52 -0
  35. package/dist/LinearSyntenyView/components/LinearSyntenyView.js +3 -3
  36. package/dist/LinearSyntenyView/index.js +1 -1
  37. package/dist/LinearSyntenyView/model.d.ts +267 -9
  38. package/dist/LinearSyntenyView/model.js +2 -2
  39. package/dist/LinearSyntenyView/svgcomponents/SVGLinearGenomeView.d.ts +12 -0
  40. package/dist/LinearSyntenyView/svgcomponents/SVGLinearGenomeView.js +19 -0
  41. package/dist/LinearSyntenyView/svgcomponents/SVGLinearSyntenyView.d.ts +1 -3
  42. package/dist/LinearSyntenyView/svgcomponents/SVGLinearSyntenyView.js +36 -27
  43. package/dist/LinearSyntenyViewHelper/index.d.ts +2 -0
  44. package/dist/LinearSyntenyViewHelper/index.js +25 -0
  45. package/dist/LinearSyntenyViewHelper/stateModelFactory.d.ts +30 -0
  46. package/dist/LinearSyntenyViewHelper/stateModelFactory.js +105 -0
  47. package/dist/index.js +2 -0
  48. package/esm/LaunchLinearSyntenyView.js +41 -11
  49. package/esm/LinearComparativeDisplay/stateModelFactory.d.ts +14 -9
  50. package/esm/LinearComparativeDisplay/stateModelFactory.js +9 -10
  51. package/esm/LinearComparativeView/components/Header.d.ts +2 -3
  52. package/esm/LinearComparativeView/components/Header.js +73 -63
  53. package/esm/LinearComparativeView/components/HeaderSearchBoxes.d.ts +6 -0
  54. package/esm/LinearComparativeView/components/HeaderSearchBoxes.js +29 -0
  55. package/esm/LinearComparativeView/components/LinearComparativeRenderArea.d.ts +6 -0
  56. package/esm/LinearComparativeView/components/LinearComparativeRenderArea.js +56 -0
  57. package/esm/LinearComparativeView/components/LinearComparativeView.d.ts +2 -4
  58. package/esm/LinearComparativeView/components/LinearComparativeView.js +3 -67
  59. package/esm/LinearComparativeView/components/Rubberband.js +1 -1
  60. package/esm/LinearComparativeView/index.js +3 -0
  61. package/esm/LinearComparativeView/model.d.ts +265 -12
  62. package/esm/LinearComparativeView/model.js +47 -77
  63. package/esm/LinearSyntenyDisplay/afterAttach.js +6 -4
  64. package/esm/LinearSyntenyDisplay/components/LinearSyntenyRendering.js +33 -25
  65. package/esm/LinearSyntenyDisplay/components/SyntenyContextMenu.js +12 -6
  66. package/esm/LinearSyntenyDisplay/components/util.d.ts +2 -1
  67. package/esm/LinearSyntenyDisplay/components/util.js +5 -5
  68. package/esm/LinearSyntenyDisplay/drawSynteny.d.ts +1 -1
  69. package/esm/LinearSyntenyDisplay/drawSynteny.js +28 -22
  70. package/esm/LinearSyntenyDisplay/index.js +1 -1
  71. package/esm/LinearSyntenyDisplay/model.d.ts +12 -11
  72. package/esm/LinearSyntenyDisplay/model.js +8 -1
  73. package/esm/LinearSyntenyView/components/ImportForm/{ImportCustomTrack.d.ts → AddCustomTrack.d.ts} +2 -3
  74. package/esm/LinearSyntenyView/components/ImportForm/{ImportCustomTrack.js → AddCustomTrack.js} +3 -3
  75. package/esm/LinearSyntenyView/components/ImportForm/LinearSyntenyImportForm.js +167 -0
  76. package/esm/LinearSyntenyView/components/ImportForm/Spacer.d.ts +2 -0
  77. package/esm/LinearSyntenyView/components/ImportForm/Spacer.js +4 -0
  78. package/esm/LinearSyntenyView/components/ImportForm/TrackSelector.d.ts +10 -0
  79. package/esm/LinearSyntenyView/components/ImportForm/{ImportSyntenyTrackSelector.js → TrackSelector.js} +15 -20
  80. package/esm/LinearSyntenyView/components/ImportForm/TrackSelectorUtil.d.ts +14 -0
  81. package/esm/LinearSyntenyView/components/ImportForm/TrackSelectorUtil.js +23 -0
  82. package/esm/LinearSyntenyView/components/LinearSyntenyView.js +3 -3
  83. package/esm/LinearSyntenyView/index.js +1 -1
  84. package/esm/LinearSyntenyView/model.d.ts +267 -9
  85. package/esm/LinearSyntenyView/model.js +2 -2
  86. package/esm/LinearSyntenyView/svgcomponents/SVGLinearGenomeView.d.ts +12 -0
  87. package/esm/LinearSyntenyView/svgcomponents/SVGLinearGenomeView.js +13 -0
  88. package/esm/LinearSyntenyView/svgcomponents/SVGLinearSyntenyView.d.ts +1 -3
  89. package/esm/LinearSyntenyView/svgcomponents/SVGLinearSyntenyView.js +38 -29
  90. package/esm/LinearSyntenyViewHelper/index.d.ts +2 -0
  91. package/esm/LinearSyntenyViewHelper/index.js +19 -0
  92. package/esm/LinearSyntenyViewHelper/stateModelFactory.d.ts +30 -0
  93. package/esm/LinearSyntenyViewHelper/stateModelFactory.js +102 -0
  94. package/esm/index.js +2 -0
  95. package/package.json +2 -2
  96. package/dist/LinearSyntenyView/components/ImportForm/ImportSyntenyTrackSelector.d.ts +0 -9
  97. package/dist/LinearSyntenyView/components/ImportForm/index.js +0 -138
  98. package/esm/LinearSyntenyView/components/ImportForm/ImportSyntenyTrackSelector.d.ts +0 -9
  99. package/esm/LinearSyntenyView/components/ImportForm/index.js +0 -110
  100. /package/dist/LinearSyntenyView/components/ImportForm/{index.d.ts → LinearSyntenyImportForm.d.ts} +0 -0
  101. /package/esm/LinearSyntenyView/components/ImportForm/{index.d.ts → LinearSyntenyImportForm.d.ts} +0 -0
@@ -0,0 +1,167 @@
1
+ import React, { useState } from 'react';
2
+ import { Button, Container, IconButton } from '@mui/material';
3
+ import { makeStyles } from 'tss-react/mui';
4
+ import { observer } from 'mobx-react';
5
+ import { getSession, isSessionWithAddTracks, notEmpty, } from '@jbrowse/core/util';
6
+ import { ErrorMessage, AssemblySelector } from '@jbrowse/core/ui';
7
+ // icons
8
+ import CloseIcon from '@mui/icons-material/Close';
9
+ import ArrowForwardIosIcon from '@mui/icons-material/ArrowForwardIos';
10
+ import TrackSelector from './TrackSelectorUtil';
11
+ import Spacer from './Spacer';
12
+ const useStyles = makeStyles()(theme => ({
13
+ importFormContainer: {
14
+ padding: theme.spacing(4),
15
+ },
16
+ button: {
17
+ margin: theme.spacing(2),
18
+ },
19
+ rel: {
20
+ position: 'relative',
21
+ },
22
+ synbutton: {
23
+ position: 'absolute',
24
+ top: 30,
25
+ },
26
+ flex: {
27
+ display: 'flex',
28
+ },
29
+ mb: {
30
+ marginBottom: 10,
31
+ },
32
+ bg: {
33
+ background: theme.palette.divider,
34
+ },
35
+ fixedWidth: {
36
+ width: 700,
37
+ },
38
+ }));
39
+ const LinearSyntenyViewImportForm = observer(function ({ model, }) {
40
+ const { classes, cx } = useStyles();
41
+ const session = getSession(model);
42
+ const { assemblyNames } = session;
43
+ const defaultAssemblyName = assemblyNames[0] || '';
44
+ const [selectedRow, setSelectedRow] = useState(0);
45
+ const [selectedAssemblyNames, setSelectedAssemblyNames] = useState([
46
+ defaultAssemblyName,
47
+ defaultAssemblyName,
48
+ ]);
49
+ const [error, setError] = useState();
50
+ const [userOpenedSyntenyTracksToShow, setUserOpenedSyntenyTracksToShow] = useState([]);
51
+ const [preConfiguredSyntenyTracksToShow, setPreConfiguredSyntenyTracksToShow,] = useState([]);
52
+ return (React.createElement(Container, { className: classes.importFormContainer },
53
+ error ? React.createElement(ErrorMessage, { error: error }) : null,
54
+ React.createElement("div", { className: classes.flex },
55
+ React.createElement(Spacer, null),
56
+ React.createElement("div", null,
57
+ React.createElement("div", { className: classes.mb }, "Select assemblies for linear synteny view"),
58
+ selectedAssemblyNames.map((assemblyName, idx) => (React.createElement("div", { key: `${assemblyName}-${idx}`, className: classes.rel },
59
+ React.createElement("span", null,
60
+ "Row ",
61
+ idx + 1,
62
+ ": "),
63
+ React.createElement(IconButton, { disabled: selectedAssemblyNames.length <= 2, onClick: () => {
64
+ setSelectedAssemblyNames(selectedAssemblyNames
65
+ .map((asm, idx2) => (idx2 === idx ? undefined : asm))
66
+ .filter(notEmpty));
67
+ setPreConfiguredSyntenyTracksToShow(preConfiguredSyntenyTracksToShow
68
+ .map((asm, idx2) => (idx2 === idx ? undefined : asm))
69
+ .filter(notEmpty));
70
+ setUserOpenedSyntenyTracksToShow(userOpenedSyntenyTracksToShow
71
+ .map((asm, idx2) => (idx2 === idx ? undefined : asm))
72
+ .filter(notEmpty));
73
+ if (selectedRow >= selectedAssemblyNames.length - 2) {
74
+ setSelectedRow(0);
75
+ }
76
+ } },
77
+ React.createElement(CloseIcon, null)),
78
+ React.createElement(AssemblySelector, { helperText: "", selected: assemblyName, onChange: newAssembly => {
79
+ setSelectedAssemblyNames(selectedAssemblyNames.map((asm, idx2) => idx2 === idx ? newAssembly : asm));
80
+ }, session: session }),
81
+ idx !== selectedAssemblyNames.length - 1 ? (React.createElement(IconButton, { className: cx(classes.synbutton, idx === selectedRow ? classes.bg : undefined), onClick: () => {
82
+ setSelectedRow(idx);
83
+ } },
84
+ React.createElement(ArrowForwardIosIcon, null))) : null))),
85
+ React.createElement("div", null,
86
+ React.createElement(Button, { className: classes.button, variant: "contained", color: "secondary", onClick: () => {
87
+ setSelectedAssemblyNames([
88
+ ...selectedAssemblyNames,
89
+ defaultAssemblyName,
90
+ ]);
91
+ } }, "Add row"),
92
+ React.createElement(Button, { className: classes.button, onClick: () => {
93
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
94
+ ;
95
+ (async () => {
96
+ try {
97
+ setError(undefined);
98
+ await doSubmit({
99
+ userOpenedSyntenyTracksToShow,
100
+ preConfiguredSyntenyTracksToShow,
101
+ selectedAssemblyNames,
102
+ model,
103
+ });
104
+ }
105
+ catch (e) {
106
+ console.error(e);
107
+ setError(e);
108
+ }
109
+ })();
110
+ }, variant: "contained", color: "primary" }, "Launch"))),
111
+ React.createElement(Spacer, null),
112
+ React.createElement("div", { className: classes.fixedWidth },
113
+ React.createElement("div", null,
114
+ "Synteny dataset to display between row ",
115
+ selectedRow + 1,
116
+ " and",
117
+ ' ',
118
+ selectedRow + 2),
119
+ React.createElement(TrackSelector, { model: model, preConfiguredSyntenyTrack: preConfiguredSyntenyTracksToShow[selectedRow], assembly1: selectedAssemblyNames[selectedRow], assembly2: selectedAssemblyNames[selectedRow + 1], setPreConfiguredSyntenyTrack: arg => {
120
+ const clone = [...preConfiguredSyntenyTracksToShow];
121
+ clone[selectedRow] = arg;
122
+ setPreConfiguredSyntenyTracksToShow(clone);
123
+ }, setUserOpenedSyntenyTrack: arg => {
124
+ const clone = [...userOpenedSyntenyTracksToShow];
125
+ clone[selectedRow] = arg;
126
+ setUserOpenedSyntenyTracksToShow(clone);
127
+ } }))),
128
+ React.createElement(Spacer, null)));
129
+ });
130
+ async function doSubmit({ selectedAssemblyNames, model, preConfiguredSyntenyTracksToShow, userOpenedSyntenyTracksToShow, }) {
131
+ const session = getSession(model);
132
+ const { assemblyManager } = session;
133
+ model.setViews(await Promise.all(selectedAssemblyNames.map(async (assemblyName) => {
134
+ const asm = await assemblyManager.waitForAssembly(assemblyName);
135
+ if (!asm) {
136
+ throw new Error(`Assembly "${assemblyName}" failed to load`);
137
+ }
138
+ return {
139
+ type: 'LinearGenomeView',
140
+ bpPerPx: 1,
141
+ offsetPx: 0,
142
+ hideHeader: true,
143
+ displayedRegions: asm.regions,
144
+ };
145
+ })));
146
+ for (const view of model.views) {
147
+ view.setWidth(model.width);
148
+ view.showAllRegions();
149
+ }
150
+ if (!isSessionWithAddTracks(session)) {
151
+ session.notify("Can't add tracks", 'warning');
152
+ }
153
+ else {
154
+ userOpenedSyntenyTracksToShow.map((f, idx) => {
155
+ if (f) {
156
+ session.addTrackConf(f);
157
+ model.toggleTrack(f.trackId, idx);
158
+ }
159
+ });
160
+ }
161
+ preConfiguredSyntenyTracksToShow.map((f, idx) => {
162
+ if (f) {
163
+ model.showTrack(f, idx);
164
+ }
165
+ });
166
+ }
167
+ export default LinearSyntenyViewImportForm;
@@ -0,0 +1,2 @@
1
+ import React from 'react';
2
+ export default function Spacer(): React.JSX.Element;
@@ -0,0 +1,4 @@
1
+ import React from 'react';
2
+ export default function Spacer() {
3
+ return React.createElement("div", { style: { flexGrow: 1 } });
4
+ }
@@ -0,0 +1,10 @@
1
+ import React from 'react';
2
+ import { LinearSyntenyViewModel } from '../../model';
3
+ declare const ImportSyntenyTrackSelector: ({ model, assembly1, assembly2, preConfiguredSyntenyTrack, setPreConfiguredSyntenyTrack, }: {
4
+ model: LinearSyntenyViewModel;
5
+ assembly1: string;
6
+ assembly2: string;
7
+ preConfiguredSyntenyTrack: string | undefined;
8
+ setPreConfiguredSyntenyTrack: (arg: string) => void;
9
+ }) => React.JSX.Element;
10
+ export default ImportSyntenyTrackSelector;
@@ -5,35 +5,30 @@ import { getTrackName } from '@jbrowse/core/util/tracks';
5
5
  import { ErrorMessage } from '@jbrowse/core/ui';
6
6
  import { readConfObject, } from '@jbrowse/core/configuration';
7
7
  import { observer } from 'mobx-react';
8
- function f(track, assembly1, assembly2) {
9
- const assemblyNames = readConfObject(track, 'assemblyNames');
10
- return (assemblyNames.includes(assembly1) &&
11
- assemblyNames.includes(assembly2) &&
12
- track.type.includes('Synteny'));
13
- }
14
- const Selector = observer(({ model, assembly1, assembly2, setShowTrackId, }) => {
8
+ const ImportSyntenyTrackSelector = observer(function ({ model, assembly1, assembly2, preConfiguredSyntenyTrack, setPreConfiguredSyntenyTrack, }) {
15
9
  var _a;
16
10
  const session = getSession(model);
17
11
  const { tracks = [], sessionTracks = [] } = session;
18
12
  const allTracks = [...tracks, ...sessionTracks];
19
- const filteredTracks = allTracks.filter(t => f(t, assembly2, assembly1));
13
+ const filteredTracks = allTracks.filter(track => {
14
+ const assemblyNames = readConfObject(track, 'assemblyNames');
15
+ return (assemblyNames.includes(assembly1) &&
16
+ assemblyNames.includes(assembly2) &&
17
+ track.type.includes('Synteny'));
18
+ });
20
19
  const resetTrack = ((_a = filteredTracks[0]) === null || _a === void 0 ? void 0 : _a.trackId) || '';
21
20
  const [value, setValue] = useState(resetTrack);
22
21
  useEffect(() => {
23
- // if assembly1/assembly2 changes, then we will want to use this effect to
24
- // change the state of the useState because it otherwise gets locked to a
25
- // stale value
26
- setValue(resetTrack);
27
- }, [resetTrack]);
28
- useEffect(() => {
29
- // sets track data in a useEffect because the initial load is needed as well
30
- // as onChange's to the select box
31
- setShowTrackId(value);
32
- }, [value, setShowTrackId]);
22
+ // sets track data in a useEffect because the initial load is needed as
23
+ // well as onChange's to the select box
24
+ if (value !== preConfiguredSyntenyTrack) {
25
+ setPreConfiguredSyntenyTrack(value);
26
+ }
27
+ }, [value, preConfiguredSyntenyTrack, setPreConfiguredSyntenyTrack]);
33
28
  return (React.createElement(Paper, { style: { padding: 12 } },
34
- React.createElement(Typography, { paragraph: true }, "Select a track from the select box below, the track will be shown when you hit \"Launch\"."),
29
+ React.createElement(Typography, null, "Select a track from the select box below, the track will be shown when you hit \"Launch\"."),
35
30
  filteredTracks.length ? (React.createElement(Select, { value: value, onChange: event => {
36
31
  setValue(event.target.value);
37
32
  } }, filteredTracks.map(track => (React.createElement(MenuItem, { key: track.trackId, value: track.trackId }, getTrackName(track, session)))))) : (React.createElement(ErrorMessage, { error: `No synteny tracks found for ${assembly1},${assembly2}` }))));
38
33
  });
39
- export default Selector;
34
+ export default ImportSyntenyTrackSelector;
@@ -0,0 +1,14 @@
1
+ import React from 'react';
2
+ import { SnapshotIn } from 'mobx-state-tree';
3
+ import { AnyConfigurationModel } from '@jbrowse/core/configuration';
4
+ import { LinearSyntenyViewModel } from '../../model';
5
+ type Conf = SnapshotIn<AnyConfigurationModel>;
6
+ export default function TrackSelector({ model, assembly1, assembly2, preConfiguredSyntenyTrack, setPreConfiguredSyntenyTrack, setUserOpenedSyntenyTrack, }: {
7
+ model: LinearSyntenyViewModel;
8
+ assembly1: string;
9
+ assembly2: string;
10
+ preConfiguredSyntenyTrack: string | undefined;
11
+ setUserOpenedSyntenyTrack: (arg: Conf) => void;
12
+ setPreConfiguredSyntenyTrack: (arg?: string) => void;
13
+ }): React.JSX.Element;
14
+ export {};
@@ -0,0 +1,23 @@
1
+ import React, { useState, useEffect } from 'react';
2
+ import { FormControl, FormControlLabel, Radio, RadioGroup } from '@mui/material';
3
+ import ImportCustomTrack from './AddCustomTrack';
4
+ import ImportSyntenyTrackSelector from './TrackSelector';
5
+ export default function TrackSelector({ model, assembly1, assembly2, preConfiguredSyntenyTrack, setPreConfiguredSyntenyTrack, setUserOpenedSyntenyTrack, }) {
6
+ const [choice, setChoice] = useState('tracklist');
7
+ useEffect(() => {
8
+ if (choice === 'none') {
9
+ setPreConfiguredSyntenyTrack(undefined);
10
+ setUserOpenedSyntenyTrack(undefined);
11
+ }
12
+ }, [choice, setPreConfiguredSyntenyTrack, setUserOpenedSyntenyTrack]);
13
+ return (React.createElement("div", null,
14
+ React.createElement(FormControl, null,
15
+ React.createElement(RadioGroup, { row: true, value: choice, onChange: event => {
16
+ setChoice(event.target.value);
17
+ }, "aria-labelledby": "group-label" },
18
+ React.createElement(FormControlLabel, { value: "none", control: React.createElement(Radio, null), label: "None" }),
19
+ React.createElement(FormControlLabel, { value: "tracklist", control: React.createElement(Radio, null), label: "Existing track" }),
20
+ React.createElement(FormControlLabel, { value: "custom", control: React.createElement(Radio, null), label: "New track" }))),
21
+ choice === 'custom' ? (React.createElement(ImportCustomTrack, { setUserOpenedSyntenyTrack: setUserOpenedSyntenyTrack, assembly2: assembly2, assembly1: assembly1 })) : null,
22
+ choice === 'tracklist' ? (React.createElement(ImportSyntenyTrackSelector, { key: `${assembly1}-${assembly2}`, model: model, assembly1: assembly1, assembly2: assembly2, preConfiguredSyntenyTrack: preConfiguredSyntenyTrack, setPreConfiguredSyntenyTrack: setPreConfiguredSyntenyTrack })) : null));
23
+ }
@@ -2,8 +2,8 @@ import React, { lazy } from 'react';
2
2
  import { observer } from 'mobx-react';
3
3
  // locals
4
4
  import LinearComparativeViewComponent from '../../LinearComparativeView/components/LinearComparativeView';
5
- const ImportForm = lazy(() => import('./ImportForm'));
6
- const LinearSyntenyView = observer(({ model }) => {
7
- return !model.initialized ? (React.createElement(ImportForm, { model: model })) : (React.createElement(LinearComparativeViewComponent, { model: model }));
5
+ const LinearSyntenyImportForm = lazy(() => import('./ImportForm/LinearSyntenyImportForm'));
6
+ const LinearSyntenyView = observer(function ({ model }) {
7
+ return !model.initialized ? (React.createElement(LinearSyntenyImportForm, { model: model })) : (React.createElement(LinearComparativeViewComponent, { model: model }));
8
8
  });
9
9
  export default LinearSyntenyView;
@@ -1,6 +1,6 @@
1
1
  import { lazy } from 'react';
2
- import modelFactory from './model';
3
2
  import ViewType from '@jbrowse/core/pluggableElementTypes/ViewType';
3
+ import modelFactory from './model';
4
4
  export default function LinearSyntenyViewF(pluginManager) {
5
5
  pluginManager.addViewType(() => {
6
6
  return new ViewType({
@@ -33,8 +33,20 @@ export default function stateModelFactory(pluginManager: PluginManager): import(
33
33
  trackSelectorType: import("mobx-state-tree").IType<string | undefined, string, string>;
34
34
  showIntraviewLinks: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
35
35
  interactToggled: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
36
- middleComparativeHeight: import("mobx-state-tree").IType<number | undefined, number, number>;
37
- tracks: import("mobx-state-tree").IArrayType<import("mobx-state-tree").IAnyType>;
36
+ levels: import("mobx-state-tree").IArrayType<import("mobx-state-tree").IModelType<{
37
+ id: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
38
+ type: import("mobx-state-tree").IType<string | undefined, string, string>;
39
+ tracks: import("mobx-state-tree").IArrayType<import("mobx-state-tree").IAnyType>;
40
+ height: import("mobx-state-tree").IType<number | undefined, number, number>;
41
+ level: import("mobx-state-tree").ISimpleType<number>;
42
+ }, {
43
+ setHeight(n: number): number;
44
+ showTrack(trackId: string, initialSnapshot?: {}): void;
45
+ hideTrack(trackId: string): number;
46
+ toggleTrack(trackId: string): boolean;
47
+ } & {
48
+ readonly assemblyNames: (string | undefined)[];
49
+ }, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>>;
38
50
  views: import("mobx-state-tree").IArrayType<import("mobx-state-tree").IModelType<{
39
51
  id: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
40
52
  displayName: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<string>>;
@@ -271,7 +283,6 @@ export default function stateModelFactory(pluginManager: PluginManager): import(
271
283
  } & {
272
284
  width: number | undefined;
273
285
  } & {
274
- readonly highResolutionScaling: number;
275
286
  readonly initialized: boolean;
276
287
  readonly refNames: string[][];
277
288
  readonly assemblyNames: string[];
@@ -281,11 +292,11 @@ export default function stateModelFactory(pluginManager: PluginManager): import(
281
292
  setWidth(newWidth: number): void;
282
293
  setViews(views: import("mobx-state-tree").SnapshotIn<import("@jbrowse/plugin-linear-genome-view").LinearGenomeViewModel>[]): void;
283
294
  removeView(view: import("@jbrowse/plugin-linear-genome-view").LinearGenomeViewModel): void;
284
- setMiddleComparativeHeight(n: number): number;
285
- activateTrackSelector(): import("@jbrowse/core/util").Widget | undefined;
286
- toggleTrack(trackId: string): boolean;
287
- showTrack(trackId: string, initialSnapshot?: {}): void;
288
- hideTrack(trackId: string): number;
295
+ setLevelHeight(newHeight: number, level?: number): number;
296
+ activateTrackSelector(level: number): import("@jbrowse/core/util").Widget;
297
+ toggleTrack(trackId: string, level?: number): void;
298
+ showTrack(trackId: string, level?: number, initialSnapshot?: {}): void;
299
+ hideTrack(trackId: string, level?: number): void;
289
300
  squareView(): void;
290
301
  clearView(): void;
291
302
  } & {
@@ -365,6 +376,253 @@ export default function stateModelFactory(pluginManager: PluginManager): import(
365
376
  };
366
377
  onClick: () => void;
367
378
  })[];
368
- }, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>;
379
+ }, {
380
+ type: "LinearComparativeView";
381
+ } & Partial<import("mobx-state-tree/dist/internal").ExtractCFromProps<{
382
+ id: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
383
+ displayName: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<string>>;
384
+ minimized: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
385
+ } & {
386
+ id: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
387
+ type: import("mobx-state-tree").ISimpleType<"LinearComparativeView">;
388
+ trackSelectorType: import("mobx-state-tree").IType<string | undefined, string, string>;
389
+ showIntraviewLinks: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
390
+ interactToggled: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
391
+ levels: import("mobx-state-tree").IArrayType<import("mobx-state-tree").IModelType<{
392
+ id: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
393
+ type: import("mobx-state-tree").IType<string | undefined, string, string>;
394
+ tracks: import("mobx-state-tree").IArrayType<import("mobx-state-tree").IAnyType>;
395
+ height: import("mobx-state-tree").IType<number | undefined, number, number>;
396
+ level: import("mobx-state-tree").ISimpleType<number>;
397
+ }, {
398
+ setHeight(n: number): number;
399
+ showTrack(trackId: string, initialSnapshot?: {}): void;
400
+ hideTrack(trackId: string): number;
401
+ toggleTrack(trackId: string): boolean;
402
+ } & {
403
+ readonly assemblyNames: (string | undefined)[];
404
+ }, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>>;
405
+ views: import("mobx-state-tree").IArrayType<import("mobx-state-tree").IModelType<{
406
+ id: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
407
+ displayName: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<string>>;
408
+ minimized: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
409
+ } & {
410
+ id: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
411
+ type: import("mobx-state-tree").IType<string | undefined, string, string>;
412
+ offsetPx: import("mobx-state-tree").IType<number | undefined, number, number>;
413
+ bpPerPx: import("mobx-state-tree").IType<number | undefined, number, number>;
414
+ displayedRegions: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").IType<import("@jbrowse/core/util").Region[], import("@jbrowse/core/util").Region[], import("@jbrowse/core/util").Region[]>, [undefined]>;
415
+ tracks: import("mobx-state-tree").IArrayType<import("mobx-state-tree").IAnyType>;
416
+ hideHeader: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
417
+ hideHeaderOverview: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
418
+ hideNoTracksActive: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
419
+ trackSelectorType: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
420
+ showCenterLine: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
421
+ showCytobandsSetting: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
422
+ trackLabels: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
423
+ showGridlines: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
424
+ highlight: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").IArrayType<import("mobx-state-tree").IType<import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").HighlightType, import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").HighlightType, import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").HighlightType>>, [undefined]>;
425
+ colorByCDS: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
426
+ showTrackOutlines: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
427
+ }, {
428
+ width: number;
429
+ } & {
430
+ menuItems(): import("@jbrowse/core/ui").MenuItem[];
431
+ } & {
432
+ setDisplayName(name: string): void;
433
+ setWidth(newWidth: number): void;
434
+ setMinimized(flag: boolean): void;
435
+ } & {
436
+ volatileWidth: number | undefined;
437
+ minimumBlockWidth: number;
438
+ draggingTrackId: undefined | string;
439
+ volatileError: unknown;
440
+ afterDisplayedRegionsSetCallbacks: (() => void)[];
441
+ scaleFactor: number;
442
+ trackRefs: Record<string, HTMLDivElement>;
443
+ coarseDynamicBlocks: import("@jbrowse/core/util/blockTypes").BaseBlock[];
444
+ coarseTotalBp: number;
445
+ leftOffset: undefined | import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").BpOffset;
446
+ rightOffset: undefined | import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").BpOffset;
447
+ } & {
448
+ readonly trackLabelsSetting: any;
449
+ readonly width: number;
450
+ readonly interRegionPaddingWidth: number;
451
+ readonly assemblyNames: string[];
452
+ } & {
453
+ scaleBarDisplayPrefix(): string | undefined;
454
+ MiniControlsComponent(): React.FC<any>;
455
+ HeaderComponent(): React.FC<any>;
456
+ readonly assemblyErrors: string;
457
+ readonly assembliesInitialized: boolean;
458
+ readonly initialized: boolean;
459
+ readonly hasDisplayedRegions: boolean;
460
+ readonly scaleBarHeight: number;
461
+ readonly headerHeight: number;
462
+ readonly trackHeights: number;
463
+ readonly trackHeightsWithResizeHandles: number;
464
+ readonly height: number;
465
+ readonly totalBp: number;
466
+ readonly maxBpPerPx: number;
467
+ readonly minBpPerPx: number;
468
+ readonly error: unknown;
469
+ readonly maxOffset: number;
470
+ readonly minOffset: number;
471
+ readonly displayedRegionsTotalPx: number;
472
+ renderProps(): any;
473
+ searchScope(assemblyName: string): {
474
+ assemblyName: string;
475
+ includeAggregateIndexes: boolean;
476
+ tracks: import("mobx-state-tree").IMSTArray<import("mobx-state-tree").IAnyType> & import("mobx-state-tree").IStateTreeNode<import("mobx-state-tree").IArrayType<import("mobx-state-tree").IAnyType>>;
477
+ };
478
+ getTrack(id: string): any;
479
+ rankSearchResults(results: import("@jbrowse/core/TextSearch/BaseResults").default[]): import("@jbrowse/core/TextSearch/BaseResults").default[];
480
+ rewriteOnClicks(trackType: string, viewMenuActions: import("@jbrowse/core/ui").MenuItem[]): void;
481
+ readonly trackTypeActions: Map<string, import("@jbrowse/core/ui").MenuItem[]>;
482
+ } & {
483
+ setShowTrackOutlines(arg: boolean): void;
484
+ setColorByCDS(flag: boolean): void;
485
+ setShowCytobands(flag: boolean): void;
486
+ setWidth(newWidth: number): void;
487
+ setError(error: unknown): void;
488
+ setHideHeader(b: boolean): void;
489
+ setHideHeaderOverview(b: boolean): void;
490
+ setHideNoTracksActive(b: boolean): void;
491
+ setShowGridlines(b: boolean): void;
492
+ addToHighlights(highlight: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").HighlightType): void;
493
+ setHighlight(highlight?: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").HighlightType[]): void;
494
+ removeHighlight(highlight: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").HighlightType): void;
495
+ scrollTo(offsetPx: number): number;
496
+ zoomTo(bpPerPx: number, offset?: number, centerAtOffset?: boolean): number;
497
+ setOffsets(left?: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").BpOffset, right?: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").BpOffset): void;
498
+ setSearchResults(searchResults: import("@jbrowse/core/TextSearch/BaseResults").default[], searchQuery: string, assemblyName?: string): void;
499
+ setNewView(bpPerPx: number, offsetPx: number): void;
500
+ horizontallyFlip(): void;
501
+ showTrack(trackId: string, initialSnapshot?: {}, displayInitialSnapshot?: {}): any;
502
+ hideTrack(trackId: string): number;
503
+ } & {
504
+ moveTrackDown(id: string): void;
505
+ moveTrackUp(id: string): void;
506
+ moveTrackToTop(id: string): void;
507
+ moveTrackToBottom(id: string): void;
508
+ moveTrack(movingId: string, targetId: string): void;
509
+ toggleTrack(trackId: string): boolean;
510
+ setTrackLabels(setting: "overlapping" | "offset" | "hidden"): void;
511
+ setShowCenterLine(b: boolean): void;
512
+ setDisplayedRegions(regions: import("@jbrowse/core/util").Region[]): void;
513
+ activateTrackSelector(): import("@jbrowse/core/util").Widget;
514
+ getSelectedRegions(leftOffset?: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").BpOffset, rightOffset?: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").BpOffset): {
515
+ start: number;
516
+ end: number;
517
+ type: string;
518
+ regionNumber?: number;
519
+ reversed?: boolean;
520
+ refName: string;
521
+ assemblyName: string;
522
+ key: string;
523
+ offsetPx: number;
524
+ widthPx: number;
525
+ variant?: string;
526
+ isLeftEndOfDisplayedRegion?: boolean;
527
+ }[];
528
+ afterDisplayedRegionsSet(cb: () => void): void;
529
+ horizontalScroll(distance: number): number;
530
+ center(): void;
531
+ showAllRegions(): void;
532
+ showAllRegionsInAssembly(assemblyName?: string): void;
533
+ setDraggingTrackId(idx?: string): void;
534
+ setScaleFactor(factor: number): void;
535
+ clearView(): void;
536
+ exportSvg(opts?: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").ExportSvgOptions): Promise<void>;
537
+ } & {
538
+ slide: (viewWidths: number) => void;
539
+ } & {
540
+ zoom: (targetBpPerPx: number) => void;
541
+ } & {
542
+ readonly canShowCytobands: boolean;
543
+ readonly showCytobands: boolean;
544
+ readonly anyCytobandsExist: boolean;
545
+ readonly cytobandOffset: number;
546
+ } & {
547
+ menuItems(): import("@jbrowse/core/ui").MenuItem[];
548
+ } & {
549
+ readonly staticBlocks: import("@jbrowse/core/util/blockTypes").BlockSet;
550
+ readonly dynamicBlocks: import("@jbrowse/core/util/blockTypes").BlockSet;
551
+ readonly roundedDynamicBlocks: import("@jbrowse/core/util/blockTypes").BaseBlock[];
552
+ readonly visibleLocStrings: string;
553
+ readonly coarseVisibleLocStrings: string;
554
+ } & {
555
+ setCoarseDynamicBlocks(blocks: import("@jbrowse/core/util/blockTypes").BlockSet): void;
556
+ afterAttach(): void;
557
+ } & {
558
+ moveTo(start?: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").BpOffset, end?: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").BpOffset): void;
559
+ navToLocString(input: string, optAssemblyName?: string): Promise<void>;
560
+ navToSearchString({ input, assembly, }: {
561
+ input: string;
562
+ assembly: import("@jbrowse/core/assemblyManager/assembly").Assembly;
563
+ }): Promise<void>;
564
+ navToLocations(parsedLocStrings: import("@jbrowse/core/util").ParsedLocString[], assemblyName?: string): Promise<void>;
565
+ navTo(query: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").NavLocation): void;
566
+ navToMultiple(locations: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").NavLocation[]): void;
567
+ } & {
568
+ rubberBandMenuItems(): import("@jbrowse/core/ui").MenuItem[];
569
+ bpToPx({ refName, coord, regionNumber, }: {
570
+ refName: string;
571
+ coord: number;
572
+ regionNumber?: number;
573
+ }): {
574
+ index: number;
575
+ offsetPx: number;
576
+ } | undefined;
577
+ centerAt(coord: number, refName: string, regionNumber?: number): void;
578
+ pxToBp(px: number): {
579
+ coord: number;
580
+ index: number;
581
+ refName: string;
582
+ oob: boolean;
583
+ assemblyName: string;
584
+ offset: number;
585
+ start: number;
586
+ end: number;
587
+ reversed?: boolean;
588
+ };
589
+ readonly centerLineInfo: {
590
+ coord: number;
591
+ index: number;
592
+ refName: string;
593
+ oob: boolean;
594
+ assemblyName: string;
595
+ offset: number;
596
+ start: number;
597
+ end: number;
598
+ reversed?: boolean;
599
+ } | undefined;
600
+ } & {
601
+ afterCreate(): void;
602
+ }, import("mobx-state-tree").ModelCreationType<import("mobx-state-tree/dist/internal").ExtractCFromProps<{
603
+ id: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
604
+ displayName: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<string>>;
605
+ minimized: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
606
+ } & {
607
+ id: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
608
+ type: import("mobx-state-tree").IType<string | undefined, string, string>;
609
+ offsetPx: import("mobx-state-tree").IType<number | undefined, number, number>;
610
+ bpPerPx: import("mobx-state-tree").IType<number | undefined, number, number>;
611
+ displayedRegions: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").IType<import("@jbrowse/core/util").Region[], import("@jbrowse/core/util").Region[], import("@jbrowse/core/util").Region[]>, [undefined]>;
612
+ tracks: import("mobx-state-tree").IArrayType<import("mobx-state-tree").IAnyType>;
613
+ hideHeader: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
614
+ hideHeaderOverview: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
615
+ hideNoTracksActive: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
616
+ trackSelectorType: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
617
+ showCenterLine: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
618
+ showCytobandsSetting: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
619
+ trackLabels: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
620
+ showGridlines: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
621
+ highlight: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").IArrayType<import("mobx-state-tree").IType<import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").HighlightType, import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").HighlightType, import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").HighlightType>>, [undefined]>;
622
+ colorByCDS: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
623
+ showTrackOutlines: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
624
+ }>>, import("mobx-state-tree")._NotCustomized>>;
625
+ viewTrackConfigs: import("mobx-state-tree").IArrayType<import("mobx-state-tree").IAnyModelType>;
626
+ }>> & import("mobx-state-tree/dist/internal").NonEmptyObject & import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>;
369
627
  export type LinearSyntenyViewStateModel = ReturnType<typeof stateModelFactory>;
370
628
  export type LinearSyntenyViewModel = Instance<LinearSyntenyViewStateModel>;
@@ -51,9 +51,9 @@ export default function stateModelFactory(pluginManager) {
51
51
  */
52
52
  showAllRegions() {
53
53
  transaction(() => {
54
- self.views.forEach(view => {
54
+ for (const view of self.views) {
55
55
  view.showAllRegionsInAssembly();
56
- });
56
+ }
57
57
  });
58
58
  },
59
59
  }))
@@ -0,0 +1,12 @@
1
+ import React from 'react';
2
+ import { LinearGenomeViewModel } from '@jbrowse/plugin-linear-genome-view';
3
+ export default function SVGLinearGenomeView({ trackLabelOffset, fontSize, textHeight, trackLabels, view, displayResults, rulerHeight, shift, }: {
4
+ textHeight: number;
5
+ trackLabels: string;
6
+ trackLabelOffset: number;
7
+ fontSize: number;
8
+ view: LinearGenomeViewModel;
9
+ displayResults: any;
10
+ rulerHeight: number;
11
+ shift: number;
12
+ }): React.JSX.Element;