@jbrowse/plugin-linear-comparative-view 3.1.0 → 3.2.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 (27) hide show
  1. package/dist/LinearComparativeView/components/Rubberband.js +5 -5
  2. package/dist/LinearComparativeView/components/VerticalGuide.js +3 -6
  3. package/dist/LinearComparativeView/model.d.ts +52 -4
  4. package/dist/LinearComparativeView/model.js +7 -2
  5. package/dist/LinearReadVsRef/LinearReadVsRef.js +2 -2
  6. package/dist/LinearSyntenyView/components/ImportForm/LeftPanel.d.ts +11 -0
  7. package/dist/LinearSyntenyView/components/ImportForm/LeftPanel.js +58 -0
  8. package/dist/LinearSyntenyView/components/ImportForm/LinearSyntenyImportForm.js +18 -52
  9. package/dist/LinearSyntenyView/components/LinearSyntenyView.d.ts +2 -3
  10. package/dist/LinearSyntenyView/components/LinearSyntenyView.js +1 -1
  11. package/dist/LinearSyntenyView/model.d.ts +53 -5
  12. package/dist/LinearSyntenyView/model.js +3 -3
  13. package/dist/LinearSyntenyViewHelper/stateModelFactory.js +2 -2
  14. package/esm/LinearComparativeView/components/Rubberband.js +5 -5
  15. package/esm/LinearComparativeView/components/VerticalGuide.js +4 -7
  16. package/esm/LinearComparativeView/model.d.ts +52 -4
  17. package/esm/LinearComparativeView/model.js +7 -2
  18. package/esm/LinearReadVsRef/LinearReadVsRef.js +2 -2
  19. package/esm/LinearSyntenyView/components/ImportForm/LeftPanel.d.ts +11 -0
  20. package/esm/LinearSyntenyView/components/ImportForm/LeftPanel.js +53 -0
  21. package/esm/LinearSyntenyView/components/ImportForm/LinearSyntenyImportForm.js +21 -55
  22. package/esm/LinearSyntenyView/components/LinearSyntenyView.d.ts +2 -3
  23. package/esm/LinearSyntenyView/components/LinearSyntenyView.js +1 -1
  24. package/esm/LinearSyntenyView/model.d.ts +53 -5
  25. package/esm/LinearSyntenyView/model.js +3 -3
  26. package/esm/LinearSyntenyViewHelper/stateModelFactory.js +2 -2
  27. package/package.json +5 -5
@@ -13,7 +13,7 @@ const useStyles = makeStyles()(theme => {
13
13
  height: '100%',
14
14
  background: alpha(theme.palette.tertiary.main, 0.7),
15
15
  position: 'absolute',
16
- zIndex: 10,
16
+ zIndex: 900,
17
17
  textAlign: 'center',
18
18
  overflow: 'hidden',
19
19
  },
@@ -76,13 +76,13 @@ const LinearComparativeRubberband = observer(function Rubberband({ model, Contro
76
76
  clientY,
77
77
  });
78
78
  transaction(() => {
79
- model.views.forEach(view => {
79
+ for (const view of model.views) {
80
80
  const args = computeOffsets(offsetX, view);
81
81
  if (args) {
82
82
  const { leftOffset, rightOffset } = args;
83
83
  view.setOffsets(leftOffset, rightOffset);
84
84
  }
85
- });
85
+ }
86
86
  });
87
87
  setGuideX(undefined);
88
88
  }
@@ -120,9 +120,9 @@ const LinearComparativeRubberband = observer(function Rubberband({ model, Contro
120
120
  function mouseOut() {
121
121
  setGuideX(undefined);
122
122
  transaction(() => {
123
- model.views.forEach(view => {
123
+ for (const view of model.views) {
124
124
  view.setOffsets(undefined, undefined);
125
- });
125
+ }
126
126
  });
127
127
  }
128
128
  function handleClose() {
@@ -1,6 +1,6 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { stringify } from '@jbrowse/core/util';
3
- import { Tooltip, Typography } from '@mui/material';
3
+ import { Tooltip } from '@mui/material';
4
4
  import { observer } from 'mobx-react';
5
5
  import { makeStyles } from 'tss-react/mui';
6
6
  const useStyles = makeStyles()({
@@ -9,19 +9,16 @@ const useStyles = makeStyles()({
9
9
  height: '100%',
10
10
  width: 1,
11
11
  position: 'absolute',
12
- zIndex: 10,
13
- },
14
- sm: {
15
- fontSize: 10,
12
+ background: 'red',
13
+ zIndex: 1001,
16
14
  },
17
15
  });
18
16
  const VerticalGuide = observer(function ({ model, coordX, }) {
19
17
  const { classes } = useStyles();
20
18
  return (_jsx(Tooltip, { open: true, placement: "top", title: model.views
21
19
  .map(view => view.pxToBp(coordX))
22
- .map((elt, idx) => (_jsx(Typography, { className: classes.sm, children: stringify(elt, true) }, [JSON.stringify(elt), idx].join('-')))), arrow: true, children: _jsx("div", { className: classes.guide, style: {
20
+ .map((elt, idx) => (_jsx("div", { children: stringify(elt, true) }, [JSON.stringify(elt), idx].join('-')))), arrow: true, children: _jsx("div", { className: classes.guide, style: {
23
21
  left: coordX,
24
- background: 'red',
25
22
  } }) }));
26
23
  });
27
24
  export default VerticalGuide;
@@ -49,6 +49,7 @@ declare function stateModelFactory(pluginManager: PluginManager): import("mobx-s
49
49
  highlight: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").IArrayType<import("mobx-state-tree").IType<import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").HighlightType, import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").HighlightType, import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").HighlightType>>, [undefined]>;
50
50
  colorByCDS: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
51
51
  showTrackOutlines: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
52
+ init: import("mobx-state-tree").IType<import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").InitState | undefined, import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").InitState | undefined, import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").InitState | undefined>;
52
53
  }, {
53
54
  width: number;
54
55
  } & {
@@ -77,6 +78,7 @@ declare function stateModelFactory(pluginManager: PluginManager): import("mobx-s
77
78
  readonly interRegionPaddingWidth: number;
78
79
  readonly assemblyNames: string[];
79
80
  readonly stickyViewHeaders: boolean;
81
+ readonly rubberbandTop: number;
80
82
  readonly pinnedTracksTop: number;
81
83
  } & {
82
84
  scaleBarDisplayPrefix(): string | undefined;
@@ -163,6 +165,7 @@ declare function stateModelFactory(pluginManager: PluginManager): import("mobx-s
163
165
  setDraggingTrackId(idx?: string): void;
164
166
  setScaleFactor(factor: number): void;
165
167
  clearView(): void;
168
+ setInit(arg?: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").InitState): void;
166
169
  exportSvg(opts?: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").ExportSvgOptions): Promise<void>;
167
170
  } & {
168
171
  slide: (viewWidths: number) => void;
@@ -183,7 +186,6 @@ declare function stateModelFactory(pluginManager: PluginManager): import("mobx-s
183
186
  readonly coarseVisibleLocStrings: string;
184
187
  } & {
185
188
  setCoarseDynamicBlocks(blocks: import("@jbrowse/core/util/blockTypes").BlockSet): void;
186
- afterAttach(): void;
187
189
  } & {
188
190
  moveTo(start?: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").BpOffset, end?: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").BpOffset): void;
189
191
  navToLocString(input: string, optAssemblyName?: string): Promise<void>;
@@ -229,6 +231,7 @@ declare function stateModelFactory(pluginManager: PluginManager): import("mobx-s
229
231
  } | undefined;
230
232
  } & {
231
233
  afterCreate(): void;
234
+ afterAttach(): void;
232
235
  }, import("mobx-state-tree").ModelCreationType<import("mobx-state-tree/dist/internal").ExtractCFromProps<{
233
236
  id: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
234
237
  displayName: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<string>>;
@@ -251,7 +254,28 @@ declare function stateModelFactory(pluginManager: PluginManager): import("mobx-s
251
254
  highlight: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").IArrayType<import("mobx-state-tree").IType<import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").HighlightType, import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").HighlightType, import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").HighlightType>>, [undefined]>;
252
255
  colorByCDS: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
253
256
  showTrackOutlines: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
254
- }>>, import("mobx-state-tree")._NotCustomized>>;
257
+ init: import("mobx-state-tree").IType<import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").InitState | undefined, import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").InitState | undefined, import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").InitState | undefined>;
258
+ }>>, {
259
+ id: string;
260
+ type: string;
261
+ displayName: string | undefined;
262
+ tracks: any[];
263
+ minimized: boolean;
264
+ displayedRegions: import("@jbrowse/core/util").Region[];
265
+ offsetPx: number;
266
+ bpPerPx: number;
267
+ hideHeader: boolean;
268
+ hideHeaderOverview: boolean;
269
+ hideNoTracksActive: boolean;
270
+ trackSelectorType: string;
271
+ showCenterLine: boolean;
272
+ showCytobandsSetting: boolean;
273
+ trackLabels: string;
274
+ showGridlines: boolean;
275
+ highlight: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").HighlightType[];
276
+ colorByCDS: boolean;
277
+ showTrackOutlines: boolean;
278
+ }>>;
255
279
  viewTrackConfigs: import("mobx-state-tree").IArrayType<import("mobx-state-tree").IAnyModelType>;
256
280
  }, {
257
281
  width: number;
@@ -339,6 +363,7 @@ declare function stateModelFactory(pluginManager: PluginManager): import("mobx-s
339
363
  highlight: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").IArrayType<import("mobx-state-tree").IType<import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").HighlightType, import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").HighlightType, import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").HighlightType>>, [undefined]>;
340
364
  colorByCDS: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
341
365
  showTrackOutlines: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
366
+ init: import("mobx-state-tree").IType<import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").InitState | undefined, import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").InitState | undefined, import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").InitState | undefined>;
342
367
  }, {
343
368
  width: number;
344
369
  } & {
@@ -367,6 +392,7 @@ declare function stateModelFactory(pluginManager: PluginManager): import("mobx-s
367
392
  readonly interRegionPaddingWidth: number;
368
393
  readonly assemblyNames: string[];
369
394
  readonly stickyViewHeaders: boolean;
395
+ readonly rubberbandTop: number;
370
396
  readonly pinnedTracksTop: number;
371
397
  } & {
372
398
  scaleBarDisplayPrefix(): string | undefined;
@@ -453,6 +479,7 @@ declare function stateModelFactory(pluginManager: PluginManager): import("mobx-s
453
479
  setDraggingTrackId(idx?: string): void;
454
480
  setScaleFactor(factor: number): void;
455
481
  clearView(): void;
482
+ setInit(arg?: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").InitState): void;
456
483
  exportSvg(opts?: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").ExportSvgOptions): Promise<void>;
457
484
  } & {
458
485
  slide: (viewWidths: number) => void;
@@ -473,7 +500,6 @@ declare function stateModelFactory(pluginManager: PluginManager): import("mobx-s
473
500
  readonly coarseVisibleLocStrings: string;
474
501
  } & {
475
502
  setCoarseDynamicBlocks(blocks: import("@jbrowse/core/util/blockTypes").BlockSet): void;
476
- afterAttach(): void;
477
503
  } & {
478
504
  moveTo(start?: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").BpOffset, end?: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").BpOffset): void;
479
505
  navToLocString(input: string, optAssemblyName?: string): Promise<void>;
@@ -519,6 +545,7 @@ declare function stateModelFactory(pluginManager: PluginManager): import("mobx-s
519
545
  } | undefined;
520
546
  } & {
521
547
  afterCreate(): void;
548
+ afterAttach(): void;
522
549
  }, import("mobx-state-tree").ModelCreationType<import("mobx-state-tree/dist/internal").ExtractCFromProps<{
523
550
  id: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
524
551
  displayName: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<string>>;
@@ -541,7 +568,28 @@ declare function stateModelFactory(pluginManager: PluginManager): import("mobx-s
541
568
  highlight: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").IArrayType<import("mobx-state-tree").IType<import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").HighlightType, import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").HighlightType, import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").HighlightType>>, [undefined]>;
542
569
  colorByCDS: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
543
570
  showTrackOutlines: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
544
- }>>, import("mobx-state-tree")._NotCustomized>>;
571
+ init: import("mobx-state-tree").IType<import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").InitState | undefined, import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").InitState | undefined, import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").InitState | undefined>;
572
+ }>>, {
573
+ id: string;
574
+ type: string;
575
+ displayName: string | undefined;
576
+ tracks: any[];
577
+ minimized: boolean;
578
+ displayedRegions: import("@jbrowse/core/util").Region[];
579
+ offsetPx: number;
580
+ bpPerPx: number;
581
+ hideHeader: boolean;
582
+ hideHeaderOverview: boolean;
583
+ hideNoTracksActive: boolean;
584
+ trackSelectorType: string;
585
+ showCenterLine: boolean;
586
+ showCytobandsSetting: boolean;
587
+ trackLabels: string;
588
+ showGridlines: boolean;
589
+ highlight: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").HighlightType[];
590
+ colorByCDS: boolean;
591
+ showTrackOutlines: boolean;
592
+ }>>;
545
593
  viewTrackConfigs: import("mobx-state-tree").IArrayType<import("mobx-state-tree").IAnyModelType>;
546
594
  }>>, import("mobx-state-tree")._NotCustomized>;
547
595
  export type LinearComparativeViewStateModel = ReturnType<typeof stateModelFactory>;
@@ -64,18 +64,23 @@ function stateModelFactory(pluginManager) {
64
64
  }
65
65
  },
66
66
  onSubviewAction(actionName, path, args) {
67
- self.views.forEach(view => {
67
+ for (const view of self.views) {
68
68
  const ret = getPath(view);
69
69
  if (!ret.endsWith(path)) {
70
70
  view[actionName](args === null || args === void 0 ? void 0 : args[0]);
71
71
  }
72
- });
72
+ }
73
73
  },
74
74
  setWidth(newWidth) {
75
75
  self.width = newWidth;
76
76
  },
77
77
  setViews(views) {
78
78
  self.views = cast(views);
79
+ const levels = [];
80
+ for (let i = 0; i < views.length - 1; i++) {
81
+ levels.push({ level: i });
82
+ }
83
+ self.levels = cast(levels);
79
84
  },
80
85
  removeView(view) {
81
86
  self.views.remove(view);
@@ -98,12 +98,12 @@ export default function ReadVsRefDialog({ track, feature: preFeature, handleClos
98
98
  };
99
99
  const totalLength = flags & 2048 ? getLength(suppAlns[0].CIGAR) : getLength(cigar);
100
100
  const features = [feat, ...suppAlns];
101
- features.forEach((f, idx) => {
101
+ for (const [idx, f] of features.entries()) {
102
102
  f.refName = assembly.getCanonicalRefName(f.refName) || f.refName;
103
103
  f.syntenyId = idx;
104
104
  f.mate.syntenyId = idx;
105
105
  f.mate.uniqueId = `${f.uniqueId}_mate`;
106
- });
106
+ }
107
107
  features.sort((a, b) => a.clipPos - b.clipPos);
108
108
  const featSeq = feature.get('seq');
109
109
  const configFeatureStore = [...features, ...features.map(f => f.mate)];
@@ -0,0 +1,11 @@
1
+ import type { LinearSyntenyViewModel } from '../../model';
2
+ declare const LeftPanel: ({ model, selectedAssemblyNames, setSelectedAssemblyNames, selectedRow, setSelectedRow, defaultAssemblyName, onLaunch, }: {
3
+ model: LinearSyntenyViewModel;
4
+ selectedAssemblyNames: string[];
5
+ setSelectedAssemblyNames: (names: string[]) => void;
6
+ selectedRow: number;
7
+ setSelectedRow: (row: number) => void;
8
+ defaultAssemblyName: string;
9
+ onLaunch: () => void;
10
+ }) => import("react/jsx-runtime").JSX.Element;
11
+ export default LeftPanel;
@@ -0,0 +1,53 @@
1
+ import { jsxs as _jsxs, jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { AssemblySelector } from '@jbrowse/core/ui';
3
+ import { getSession, notEmpty } from '@jbrowse/core/util';
4
+ import ArrowForwardIosIcon from '@mui/icons-material/ArrowForwardIos';
5
+ import CloseIcon from '@mui/icons-material/Close';
6
+ import { Button, IconButton } from '@mui/material';
7
+ import { observer } from 'mobx-react';
8
+ import { makeStyles } from 'tss-react/mui';
9
+ const useStyles = makeStyles()(theme => ({
10
+ mb: {
11
+ marginBottom: 10,
12
+ },
13
+ button: {
14
+ margin: theme.spacing(2),
15
+ },
16
+ rel: {
17
+ position: 'relative',
18
+ },
19
+ synbutton: {
20
+ position: 'absolute',
21
+ top: 30,
22
+ },
23
+ bg: {
24
+ background: theme.palette.divider,
25
+ },
26
+ }));
27
+ const AssemblyRows = observer(function ({ selectedRow, selectedAssemblyNames, setSelectedRow, setSelectedAssemblyNames, model, }) {
28
+ const { classes, cx } = useStyles();
29
+ const session = getSession(model);
30
+ return selectedAssemblyNames.map((assemblyName, idx) => (_jsxs("div", { className: classes.rel, children: [_jsxs("span", { children: ["Row ", idx + 1, ": "] }), _jsx(IconButton, { disabled: selectedAssemblyNames.length <= 2, onClick: () => {
31
+ model.importFormRemoveRow(idx);
32
+ setSelectedAssemblyNames(selectedAssemblyNames
33
+ .map((asm, idx2) => (idx2 === idx ? undefined : asm))
34
+ .filter(notEmpty));
35
+ if (selectedRow >= selectedAssemblyNames.length - 2) {
36
+ setSelectedRow(0);
37
+ }
38
+ }, children: _jsx(CloseIcon, {}) }), _jsx(AssemblySelector, { helperText: "", selected: assemblyName, onChange: newAssembly => {
39
+ setSelectedAssemblyNames(selectedAssemblyNames.map((asm, idx2) => idx2 === idx ? newAssembly : asm));
40
+ }, session: session }), idx !== selectedAssemblyNames.length - 1 ? (_jsx(IconButton, { "data-testid": "synbutton", className: cx(classes.synbutton, idx === selectedRow ? classes.bg : undefined), onClick: () => {
41
+ setSelectedRow(idx);
42
+ }, children: _jsx(ArrowForwardIosIcon, {}) })) : null] }, `${assemblyName}-${idx}`)));
43
+ });
44
+ const LeftPanel = observer(function ({ model, selectedAssemblyNames, setSelectedAssemblyNames, selectedRow, setSelectedRow, defaultAssemblyName, onLaunch, }) {
45
+ const { classes } = useStyles();
46
+ return (_jsxs(_Fragment, { children: [_jsx("div", { className: classes.mb, children: "Select assemblies for linear synteny view" }), _jsx(AssemblyRows, { model: model, selectedAssemblyNames: selectedAssemblyNames, setSelectedAssemblyNames: setSelectedAssemblyNames, selectedRow: selectedRow, setSelectedRow: setSelectedRow }), _jsxs("div", { children: [_jsx(Button, { className: classes.button, variant: "contained", color: "secondary", onClick: () => {
47
+ setSelectedAssemblyNames([
48
+ ...selectedAssemblyNames,
49
+ defaultAssemblyName,
50
+ ]);
51
+ }, children: "Add row" }), _jsx(Button, { className: classes.button, onClick: onLaunch, variant: "contained", color: "primary", children: "Launch" })] })] }));
52
+ });
53
+ export default LeftPanel;
@@ -1,38 +1,21 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useState } from 'react';
3
- import { AssemblySelector, ErrorMessage } from '@jbrowse/core/ui';
4
- import { getSession, notEmpty } from '@jbrowse/core/util';
5
- import ArrowForwardIosIcon from '@mui/icons-material/ArrowForwardIos';
6
- import CloseIcon from '@mui/icons-material/Close';
7
- import { Button, Container, IconButton } from '@mui/material';
3
+ import { ErrorMessage } from '@jbrowse/core/ui';
4
+ import { getSession } from '@jbrowse/core/util';
5
+ import { Container } from '@mui/material';
8
6
  import { observer } from 'mobx-react';
9
7
  import { makeStyles } from 'tss-react/mui';
10
8
  import ImportSyntenyTrackSelector from './ImportSyntenyTrackSelectorArea';
9
+ import LeftPanel from './LeftPanel';
11
10
  import { doSubmit } from './doSubmit';
12
11
  const useStyles = makeStyles()(theme => ({
13
12
  importFormContainer: {
14
13
  padding: theme.spacing(4),
15
14
  },
16
- button: {
17
- margin: theme.spacing(2),
18
- },
19
- rel: {
20
- position: 'relative',
21
- },
22
- synbutton: {
23
- position: 'absolute',
24
- top: 30,
25
- },
26
15
  flex: {
27
16
  display: 'flex',
28
17
  gap: 90,
29
18
  },
30
- mb: {
31
- marginBottom: 10,
32
- },
33
- bg: {
34
- background: theme.palette.divider,
35
- },
36
19
  rightPanel: {
37
20
  flexGrow: 11,
38
21
  },
@@ -42,7 +25,7 @@ const useStyles = makeStyles()(theme => ({
42
25
  },
43
26
  }));
44
27
  const LinearSyntenyViewImportForm = observer(function ({ model, }) {
45
- const { classes, cx } = useStyles();
28
+ const { classes } = useStyles();
46
29
  const session = getSession(model);
47
30
  const { assemblyNames } = session;
48
31
  const defaultAssemblyName = assemblyNames[0] || '';
@@ -52,38 +35,21 @@ const LinearSyntenyViewImportForm = observer(function ({ model, }) {
52
35
  defaultAssemblyName,
53
36
  ]);
54
37
  const [error, setError] = useState();
55
- return (_jsxs(Container, { className: classes.importFormContainer, children: [error ? _jsx(ErrorMessage, { error: error }) : null, _jsxs("div", { className: classes.flex, children: [_jsxs("div", { className: classes.leftPanel, children: [_jsx("div", { className: classes.mb, children: "Select assemblies for linear synteny view" }), selectedAssemblyNames.map((assemblyName, idx) => (_jsxs("div", { className: classes.rel, children: [_jsxs("span", { children: ["Row ", idx + 1, ": "] }), _jsx(IconButton, { disabled: selectedAssemblyNames.length <= 2, onClick: () => {
56
- model.importFormRemoveRow(idx);
57
- setSelectedAssemblyNames(selectedAssemblyNames
58
- .map((asm, idx2) => (idx2 === idx ? undefined : asm))
59
- .filter(notEmpty));
60
- if (selectedRow >= selectedAssemblyNames.length - 2) {
61
- setSelectedRow(0);
62
- }
63
- }, children: _jsx(CloseIcon, {}) }), _jsx(AssemblySelector, { helperText: "", selected: assemblyName, onChange: newAssembly => {
64
- setSelectedAssemblyNames(selectedAssemblyNames.map((asm, idx2) => idx2 === idx ? newAssembly : asm));
65
- }, session: session }), idx !== selectedAssemblyNames.length - 1 ? (_jsx(IconButton, { "data-testid": "synbutton", className: cx(classes.synbutton, idx === selectedRow ? classes.bg : undefined), onClick: () => {
66
- setSelectedRow(idx);
67
- }, children: _jsx(ArrowForwardIosIcon, {}) })) : null] }, `${assemblyName}-${idx}`))), _jsxs("div", { children: [_jsx(Button, { className: classes.button, variant: "contained", color: "secondary", onClick: () => {
68
- setSelectedAssemblyNames([
69
- ...selectedAssemblyNames,
70
- defaultAssemblyName,
71
- ]);
72
- }, children: "Add row" }), _jsx(Button, { className: classes.button, onClick: () => {
73
- ;
74
- (async () => {
75
- try {
76
- setError(undefined);
77
- await doSubmit({
78
- selectedAssemblyNames,
79
- model,
80
- });
81
- }
82
- catch (e) {
83
- console.error(e);
84
- setError(e);
85
- }
86
- })();
87
- }, variant: "contained", color: "primary", children: "Launch" })] })] }), _jsxs("div", { className: classes.rightPanel, children: [_jsxs("div", { children: ["Synteny dataset to display between row ", selectedRow + 1, " and", ' ', selectedRow + 2] }), _jsx(ImportSyntenyTrackSelector, { model: model, selectedRow: selectedRow, assembly1: selectedAssemblyNames[selectedRow], assembly2: selectedAssemblyNames[selectedRow + 1] })] })] })] }));
38
+ const handleLaunch = async () => {
39
+ try {
40
+ setError(undefined);
41
+ await doSubmit({
42
+ selectedAssemblyNames,
43
+ model,
44
+ });
45
+ }
46
+ catch (e) {
47
+ console.error(e);
48
+ setError(e);
49
+ }
50
+ };
51
+ return (_jsxs(Container, { className: classes.importFormContainer, children: [error ? _jsx(ErrorMessage, { error: error }) : null, _jsxs("div", { className: classes.flex, children: [_jsx("div", { className: classes.leftPanel, children: _jsx(LeftPanel, { model: model, selectedAssemblyNames: selectedAssemblyNames, setSelectedAssemblyNames: setSelectedAssemblyNames, selectedRow: selectedRow, setSelectedRow: setSelectedRow, defaultAssemblyName: defaultAssemblyName, onLaunch: () => {
52
+ handleLaunch();
53
+ } }) }), _jsxs("div", { className: classes.rightPanel, children: [_jsxs("div", { children: ["Synteny dataset to display between row ", selectedRow + 1, " and", ' ', selectedRow + 2] }), _jsx(ImportSyntenyTrackSelector, { model: model, selectedRow: selectedRow, assembly1: selectedAssemblyNames[selectedRow], assembly2: selectedAssemblyNames[selectedRow + 1] })] })] })] }));
88
54
  });
89
55
  export default LinearSyntenyViewImportForm;
@@ -1,6 +1,5 @@
1
1
  import type { LinearSyntenyViewModel } from '../model';
2
- type LSV = LinearSyntenyViewModel;
3
- declare const LinearSyntenyView: ({ model }: {
4
- model: LSV;
2
+ declare const LinearSyntenyView: ({ model, }: {
3
+ model: LinearSyntenyViewModel;
5
4
  }) => import("react/jsx-runtime").JSX.Element;
6
5
  export default LinearSyntenyView;
@@ -3,7 +3,7 @@ import { lazy } from 'react';
3
3
  import { observer } from 'mobx-react';
4
4
  import LinearComparativeViewComponent from '../../LinearComparativeView/components/LinearComparativeView';
5
5
  const LinearSyntenyImportForm = lazy(() => import('./ImportForm/LinearSyntenyImportForm'));
6
- const LinearSyntenyView = observer(function ({ model }) {
6
+ const LinearSyntenyView = observer(function ({ model, }) {
7
7
  return !model.initialized ? (_jsx(LinearSyntenyImportForm, { model: model })) : (_jsx(LinearComparativeViewComponent, { model: model }));
8
8
  });
9
9
  export default LinearSyntenyView;
@@ -66,6 +66,7 @@ export default function stateModelFactory(pluginManager: PluginManager): import(
66
66
  highlight: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").IArrayType<import("mobx-state-tree").IType<import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").HighlightType, import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").HighlightType, import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").HighlightType>>, [undefined]>;
67
67
  colorByCDS: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
68
68
  showTrackOutlines: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
69
+ init: import("mobx-state-tree").IType<import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").InitState | undefined, import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").InitState | undefined, import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").InitState | undefined>;
69
70
  }, {
70
71
  width: number;
71
72
  } & {
@@ -94,6 +95,7 @@ export default function stateModelFactory(pluginManager: PluginManager): import(
94
95
  readonly interRegionPaddingWidth: number;
95
96
  readonly assemblyNames: string[];
96
97
  readonly stickyViewHeaders: boolean;
98
+ readonly rubberbandTop: number;
97
99
  readonly pinnedTracksTop: number;
98
100
  } & {
99
101
  scaleBarDisplayPrefix(): string | undefined;
@@ -180,6 +182,7 @@ export default function stateModelFactory(pluginManager: PluginManager): import(
180
182
  setDraggingTrackId(idx?: string): void;
181
183
  setScaleFactor(factor: number): void;
182
184
  clearView(): void;
185
+ setInit(arg?: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").InitState): void;
183
186
  exportSvg(opts?: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").ExportSvgOptions): Promise<void>;
184
187
  } & {
185
188
  slide: (viewWidths: number) => void;
@@ -200,7 +203,6 @@ export default function stateModelFactory(pluginManager: PluginManager): import(
200
203
  readonly coarseVisibleLocStrings: string;
201
204
  } & {
202
205
  setCoarseDynamicBlocks(blocks: import("@jbrowse/core/util/blockTypes").BlockSet): void;
203
- afterAttach(): void;
204
206
  } & {
205
207
  moveTo(start?: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").BpOffset, end?: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").BpOffset): void;
206
208
  navToLocString(input: string, optAssemblyName?: string): Promise<void>;
@@ -246,6 +248,7 @@ export default function stateModelFactory(pluginManager: PluginManager): import(
246
248
  } | undefined;
247
249
  } & {
248
250
  afterCreate(): void;
251
+ afterAttach(): void;
249
252
  }, import("mobx-state-tree").ModelCreationType<import("mobx-state-tree/dist/internal").ExtractCFromProps<{
250
253
  id: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
251
254
  displayName: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<string>>;
@@ -268,7 +271,28 @@ export default function stateModelFactory(pluginManager: PluginManager): import(
268
271
  highlight: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").IArrayType<import("mobx-state-tree").IType<import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").HighlightType, import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").HighlightType, import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").HighlightType>>, [undefined]>;
269
272
  colorByCDS: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
270
273
  showTrackOutlines: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
271
- }>>, import("mobx-state-tree")._NotCustomized>>;
274
+ init: import("mobx-state-tree").IType<import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").InitState | undefined, import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").InitState | undefined, import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").InitState | undefined>;
275
+ }>>, {
276
+ id: string;
277
+ type: string;
278
+ displayName: string | undefined;
279
+ tracks: any[];
280
+ minimized: boolean;
281
+ displayedRegions: import("@jbrowse/core/util").Region[];
282
+ offsetPx: number;
283
+ bpPerPx: number;
284
+ hideHeader: boolean;
285
+ hideHeaderOverview: boolean;
286
+ hideNoTracksActive: boolean;
287
+ trackSelectorType: string;
288
+ showCenterLine: boolean;
289
+ showCytobandsSetting: boolean;
290
+ trackLabels: string;
291
+ showGridlines: boolean;
292
+ highlight: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").HighlightType[];
293
+ colorByCDS: boolean;
294
+ showTrackOutlines: boolean;
295
+ }>>;
272
296
  viewTrackConfigs: import("mobx-state-tree").IArrayType<import("mobx-state-tree").IAnyModelType>;
273
297
  } & {
274
298
  type: import("mobx-state-tree").ISimpleType<"LinearSyntenyView">;
@@ -336,10 +360,10 @@ export default function stateModelFactory(pluginManager: PluginManager): import(
336
360
  type?: undefined;
337
361
  } | {
338
362
  label: string;
339
- onClick: () => void;
340
363
  checked: boolean;
341
364
  type: string;
342
365
  description: string;
366
+ onClick: () => void;
343
367
  icon?: undefined;
344
368
  } | {
345
369
  label: string;
@@ -423,6 +447,7 @@ export default function stateModelFactory(pluginManager: PluginManager): import(
423
447
  highlight: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").IArrayType<import("mobx-state-tree").IType<import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").HighlightType, import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").HighlightType, import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").HighlightType>>, [undefined]>;
424
448
  colorByCDS: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
425
449
  showTrackOutlines: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
450
+ init: import("mobx-state-tree").IType<import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").InitState | undefined, import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").InitState | undefined, import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").InitState | undefined>;
426
451
  }, {
427
452
  width: number;
428
453
  } & {
@@ -451,6 +476,7 @@ export default function stateModelFactory(pluginManager: PluginManager): import(
451
476
  readonly interRegionPaddingWidth: number;
452
477
  readonly assemblyNames: string[];
453
478
  readonly stickyViewHeaders: boolean;
479
+ readonly rubberbandTop: number;
454
480
  readonly pinnedTracksTop: number;
455
481
  } & {
456
482
  scaleBarDisplayPrefix(): string | undefined;
@@ -537,6 +563,7 @@ export default function stateModelFactory(pluginManager: PluginManager): import(
537
563
  setDraggingTrackId(idx?: string): void;
538
564
  setScaleFactor(factor: number): void;
539
565
  clearView(): void;
566
+ setInit(arg?: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").InitState): void;
540
567
  exportSvg(opts?: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").ExportSvgOptions): Promise<void>;
541
568
  } & {
542
569
  slide: (viewWidths: number) => void;
@@ -557,7 +584,6 @@ export default function stateModelFactory(pluginManager: PluginManager): import(
557
584
  readonly coarseVisibleLocStrings: string;
558
585
  } & {
559
586
  setCoarseDynamicBlocks(blocks: import("@jbrowse/core/util/blockTypes").BlockSet): void;
560
- afterAttach(): void;
561
587
  } & {
562
588
  moveTo(start?: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").BpOffset, end?: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").BpOffset): void;
563
589
  navToLocString(input: string, optAssemblyName?: string): Promise<void>;
@@ -603,6 +629,7 @@ export default function stateModelFactory(pluginManager: PluginManager): import(
603
629
  } | undefined;
604
630
  } & {
605
631
  afterCreate(): void;
632
+ afterAttach(): void;
606
633
  }, import("mobx-state-tree").ModelCreationType<import("mobx-state-tree/dist/internal").ExtractCFromProps<{
607
634
  id: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
608
635
  displayName: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<string>>;
@@ -625,7 +652,28 @@ export default function stateModelFactory(pluginManager: PluginManager): import(
625
652
  highlight: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").IArrayType<import("mobx-state-tree").IType<import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").HighlightType, import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").HighlightType, import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").HighlightType>>, [undefined]>;
626
653
  colorByCDS: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
627
654
  showTrackOutlines: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
628
- }>>, import("mobx-state-tree")._NotCustomized>>;
655
+ init: import("mobx-state-tree").IType<import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").InitState | undefined, import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").InitState | undefined, import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").InitState | undefined>;
656
+ }>>, {
657
+ id: string;
658
+ type: string;
659
+ displayName: string | undefined;
660
+ tracks: any[];
661
+ minimized: boolean;
662
+ displayedRegions: import("@jbrowse/core/util").Region[];
663
+ offsetPx: number;
664
+ bpPerPx: number;
665
+ hideHeader: boolean;
666
+ hideHeaderOverview: boolean;
667
+ hideNoTracksActive: boolean;
668
+ trackSelectorType: string;
669
+ showCenterLine: boolean;
670
+ showCytobandsSetting: boolean;
671
+ trackLabels: string;
672
+ showGridlines: boolean;
673
+ highlight: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").HighlightType[];
674
+ colorByCDS: boolean;
675
+ showTrackOutlines: boolean;
676
+ }>>;
629
677
  viewTrackConfigs: import("mobx-state-tree").IArrayType<import("mobx-state-tree").IAnyModelType>;
630
678
  }>> & import("mobx-state-tree/dist/internal").NonEmptyObject & import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>;
631
679
  export type LinearSyntenyViewStateModel = ReturnType<typeof stateModelFactory>;
@@ -73,12 +73,12 @@ export default function stateModelFactory(pluginManager) {
73
73
  },
74
74
  {
75
75
  label: 'Draw CIGAR',
76
- onClick: () => {
77
- self.setDrawCIGAR(!self.drawCIGAR);
78
- },
79
76
  checked: self.drawCIGAR,
80
77
  type: 'checkbox',
81
78
  description: 'Draws per-base CIGAR level alignments',
79
+ onClick: () => {
80
+ self.setDrawCIGAR(!self.drawCIGAR);
81
+ },
82
82
  },
83
83
  {
84
84
  label: 'Link views',
@@ -48,9 +48,9 @@ export function linearSyntenyViewHelperModelFactory(pluginManager) {
48
48
  const config = resolveIdentifier(schema, getRoot(self), trackId);
49
49
  const shownTracks = self.tracks.filter(t => t.configuration === config);
50
50
  transaction(() => {
51
- shownTracks.forEach(t => {
51
+ for (const t of shownTracks) {
52
52
  self.tracks.remove(t);
53
- });
53
+ }
54
54
  });
55
55
  return shownTracks.length;
56
56
  },