@jbrowse/plugin-linear-genome-view 3.2.0 → 3.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/BaseLinearDisplay/components/LinearBlocks.js +1 -1
- package/dist/LinearBasicDisplay/components/AddFiltersDialog.js +1 -1
- package/dist/LinearBasicDisplay/model.js +8 -2
- package/dist/LinearGenomeView/components/HeaderZoomControls.js +8 -2
- package/dist/LinearGenomeView/components/ImportForm.js +1 -1
- package/dist/LinearGenomeView/components/RubberbandSpan.js +2 -2
- package/dist/LinearGenomeView/model.d.ts +1 -0
- package/dist/LinearGenomeView/model.js +3 -0
- package/esm/BaseLinearDisplay/components/LinearBlocks.js +1 -1
- package/esm/LinearBasicDisplay/components/AddFiltersDialog.js +1 -1
- package/esm/LinearBasicDisplay/model.js +8 -2
- package/esm/LinearGenomeView/components/HeaderZoomControls.js +9 -3
- package/esm/LinearGenomeView/components/ImportForm.js +1 -1
- package/esm/LinearGenomeView/components/RubberbandSpan.js +3 -3
- package/esm/LinearGenomeView/model.d.ts +1 -0
- package/esm/LinearGenomeView/model.js +3 -0
- package/package.json +5 -5
|
@@ -43,7 +43,7 @@ const AddFiltersDialog = (0, mobx_react_1.observer)(function ({ model, handleClo
|
|
|
43
43
|
setError(e);
|
|
44
44
|
}
|
|
45
45
|
}, [data]);
|
|
46
|
-
return ((0, jsx_runtime_1.jsxs)(ui_1.Dialog, { maxWidth: "xl", open: true, onClose: handleClose, title: "Add track filters", children: [(0, jsx_runtime_1.jsxs)(material_1.DialogContent, { children: [(0, jsx_runtime_1.jsxs)("div", { children: ["Add filters, in jexl format, one per line, starting with the string jexl:. Examples:", ' ', (0, jsx_runtime_1.jsxs)("ul", { children: [(0, jsx_runtime_1.jsxs)("li", { children: [(0, jsx_runtime_1.jsx)("code", { children: "jexl:get(feature,'name')=='BRCA1'" }), " - show only feature where the name attribute is BRCA1"] }), (0, jsx_runtime_1.jsxs)("li", { children: [(0, jsx_runtime_1.jsx)("code", { children: "jexl:get(feature,'type')=='gene'" }), " - show only gene type features in a GFF that has many other feature types"] }), (0, jsx_runtime_1.jsxs)("li", { children: [(0, jsx_runtime_1.jsx)("code", { children: "jexl:get(feature,'score') > 400" }), " - show only features that have a score greater than 400"] })] })] }), error ? (0, jsx_runtime_1.jsx)("p", { className: classes.error, children: `${error}` }) : null, (0, jsx_runtime_1.jsx)(material_1.TextField, { variant: "outlined", multiline: true, minRows: 5, maxRows: 10, className: classes.dialogContent, fullWidth: true, value: data, onChange: event => {
|
|
46
|
+
return ((0, jsx_runtime_1.jsxs)(ui_1.Dialog, { maxWidth: "xl", open: true, onClose: handleClose, title: "Add track filters", children: [(0, jsx_runtime_1.jsxs)(material_1.DialogContent, { children: [(0, jsx_runtime_1.jsxs)("div", { children: ["Add filters, in jexl format, one per line, starting with the string jexl:. Examples:", ' ', (0, jsx_runtime_1.jsxs)("ul", { children: [(0, jsx_runtime_1.jsxs)("li", { children: [(0, jsx_runtime_1.jsx)("code", { children: "jexl:get(feature,'name')=='BRCA1'" }), " - show only feature where the name attribute is BRCA1"] }), (0, jsx_runtime_1.jsxs)("li", { children: [(0, jsx_runtime_1.jsx)("code", { children: "jexl:get(feature,'type')=='gene'" }), " - show only gene type features in a GFF that has many other feature types"] }), (0, jsx_runtime_1.jsxs)("li", { children: [(0, jsx_runtime_1.jsx)("code", { children: "jexl:get(feature,'score') > 400" }), " - show only features that have a score greater than 400"] }), (0, jsx_runtime_1.jsxs)("li", { children: [(0, jsx_runtime_1.jsx)("code", { children: "jexl:get(feature,'end') - get(feature,'start') < 1000000" }), ' ', "- show only features with length less than 1Mbp"] })] })] }), error ? (0, jsx_runtime_1.jsx)("p", { className: classes.error, children: `${error}` }) : null, (0, jsx_runtime_1.jsx)(material_1.TextField, { variant: "outlined", multiline: true, minRows: 5, maxRows: 10, className: classes.dialogContent, fullWidth: true, value: data, onChange: event => {
|
|
47
47
|
setData(event.target.value);
|
|
48
48
|
}, slotProps: {
|
|
49
49
|
input: {
|
|
@@ -165,7 +165,10 @@ function stateModelFactory(configSchema) {
|
|
|
165
165
|
onClick: () => {
|
|
166
166
|
(0, util_1.getSession)(self).queueDialog(handleClose => [
|
|
167
167
|
SetMaxHeightDialog,
|
|
168
|
-
{
|
|
168
|
+
{
|
|
169
|
+
model: self,
|
|
170
|
+
handleClose,
|
|
171
|
+
},
|
|
169
172
|
]);
|
|
170
173
|
},
|
|
171
174
|
},
|
|
@@ -174,7 +177,10 @@ function stateModelFactory(configSchema) {
|
|
|
174
177
|
onClick: () => {
|
|
175
178
|
(0, util_1.getSession)(self).queueDialog(handleClose => [
|
|
176
179
|
AddFiltersDialog,
|
|
177
|
-
{
|
|
180
|
+
{
|
|
181
|
+
model: self,
|
|
182
|
+
handleClose,
|
|
183
|
+
},
|
|
178
184
|
]);
|
|
179
185
|
},
|
|
180
186
|
},
|
|
@@ -58,9 +58,13 @@ const useStyles = (0, mui_1.makeStyles)()(theme => ({
|
|
|
58
58
|
color: theme.palette.text.secondary,
|
|
59
59
|
},
|
|
60
60
|
}));
|
|
61
|
+
function ValueLabelComponent(props) {
|
|
62
|
+
const { children, open, value } = props;
|
|
63
|
+
return ((0, jsx_runtime_1.jsx)(material_1.Tooltip, { open: open, enterTouchDelay: 0, placement: "top", title: value, arrow: true, children: children }));
|
|
64
|
+
}
|
|
61
65
|
const HeaderZoomControls = (0, mobx_react_1.observer)(function ({ model, }) {
|
|
62
66
|
const { classes } = useStyles();
|
|
63
|
-
const { maxBpPerPx, minBpPerPx, bpPerPx } = model;
|
|
67
|
+
const { width, maxBpPerPx, minBpPerPx, bpPerPx } = model;
|
|
64
68
|
const [value, setValue] = (0, react_1.useState)(-Math.log2(bpPerPx) * 100);
|
|
65
69
|
(0, react_1.useEffect)(() => {
|
|
66
70
|
setValue(-Math.log2(bpPerPx) * 100);
|
|
@@ -69,7 +73,9 @@ const HeaderZoomControls = (0, mobx_react_1.observer)(function ({ model, }) {
|
|
|
69
73
|
const zoomOutDisabled = bpPerPx >= maxBpPerPx - 0.0001;
|
|
70
74
|
return ((0, jsx_runtime_1.jsxs)("div", { className: classes.container, children: [(0, jsx_runtime_1.jsx)(material_1.Tooltip, { title: "Zoom out 2x", children: (0, jsx_runtime_1.jsx)("span", { children: (0, jsx_runtime_1.jsx)(material_1.IconButton, { "data-testid": "zoom_out", disabled: zoomOutDisabled, onClick: () => {
|
|
71
75
|
model.zoom(bpPerPx * 2);
|
|
72
|
-
}, children: (0, jsx_runtime_1.jsx)(ZoomOut_1.default, {}) }) }) }), (0, jsx_runtime_1.jsx)(material_1.Slider, { size: "small", className: classes.slider, value: value, min: -Math.log2(maxBpPerPx) * 100, max: -Math.log2(minBpPerPx) * 100, onChangeCommitted: () => model.zoomTo(2 ** (-value / 100)),
|
|
76
|
+
}, children: (0, jsx_runtime_1.jsx)(ZoomOut_1.default, {}) }) }) }), (0, jsx_runtime_1.jsx)(material_1.Slider, { size: "small", className: classes.slider, value: value, min: -Math.log2(maxBpPerPx) * 100, max: -Math.log2(minBpPerPx) * 100, onChangeCommitted: () => model.zoomTo(2 ** (-value / 100)), valueLabelDisplay: "auto", valueLabelFormat: newValue => `Window size: ${(0, util_1.getBpDisplayStr)(2 ** (-newValue / 100) * width)}`, slots: {
|
|
77
|
+
valueLabel: ValueLabelComponent,
|
|
78
|
+
}, onChange: (_, val) => {
|
|
73
79
|
setValue(val);
|
|
74
80
|
} }), (0, jsx_runtime_1.jsx)(material_1.Tooltip, { title: "Zoom in 2x", children: (0, jsx_runtime_1.jsx)("span", { children: (0, jsx_runtime_1.jsx)(material_1.IconButton, { "data-testid": "zoom_in", disabled: zoomInDisabled, onClick: () => {
|
|
75
81
|
model.zoom(model.bpPerPx / 2);
|
|
@@ -70,7 +70,7 @@ const LinearGenomeViewImportForm = (0, mobx_react_1.observer)(function ({ model,
|
|
|
70
70
|
session.notify(`${e}`, 'warning');
|
|
71
71
|
}
|
|
72
72
|
}
|
|
73
|
-
}, children: (0, jsx_runtime_1.jsxs)(material_1.
|
|
73
|
+
}, children: (0, jsx_runtime_1.jsxs)(material_1.Grid, { container: true, spacing: 1, justifyContent: "center", alignItems: "center", children: [(0, jsx_runtime_1.jsx)(material_1.FormControl, { children: (0, jsx_runtime_1.jsx)(ui_1.AssemblySelector, { onChange: val => {
|
|
74
74
|
setSelectedAsm(val);
|
|
75
75
|
}, localStorageKey: "lgv", session: session, selected: selectedAsm }) }), selectedAsm ? (assemblyError ? ((0, jsx_runtime_1.jsx)(Close_1.default, { style: { color: 'red' } })) : assemblyLoaded ? ((0, jsx_runtime_1.jsx)(material_1.FormControl, { children: (0, jsx_runtime_1.jsx)(ImportFormRefNameAutocomplete_1.default, { value: value, setValue: setValue, selectedAsm: selectedAsm, setOption: setOption, model: model }) })) : ((0, jsx_runtime_1.jsx)(material_1.CircularProgress, { size: 20, disableShrink: true }))) : null, (0, jsx_runtime_1.jsx)(material_1.FormControl, { children: (0, jsx_runtime_1.jsx)(material_1.Button, { type: "submit", disabled: !value, className: classes.button, variant: "contained", color: "primary", children: "Open" }) }), (0, jsx_runtime_1.jsx)(material_1.FormControl, { children: (0, jsx_runtime_1.jsx)(material_1.Button, { disabled: !value, className: classes.button, onClick: () => {
|
|
76
76
|
model.setError(undefined);
|
|
@@ -34,10 +34,10 @@ const useStyles = (0, mui_1.makeStyles)()(theme => {
|
|
|
34
34
|
function RubberbandSpan({ leftBpOffset, rightBpOffset, numOfBpSelected, left, width, top = 0, sticky = false, }) {
|
|
35
35
|
const { classes } = useStyles();
|
|
36
36
|
const [anchorEl, setAnchorEl] = (0, react_1.useState)(null);
|
|
37
|
-
return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [anchorEl ? ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(RubberbandTooltip_1.default, { side: "left", anchorEl: anchorEl, text: (0, util_1.stringify)(leftBpOffset) }), (0, jsx_runtime_1.jsx)(RubberbandTooltip_1.default, { side: "right", anchorEl: anchorEl, text: (0, util_1.stringify)(rightBpOffset) })] })) : null, (0, jsx_runtime_1.jsx)("div", { className: classes.rubberband, style: { left, width }, children: numOfBpSelected ? ((0, jsx_runtime_1.
|
|
37
|
+
return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [anchorEl ? ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(RubberbandTooltip_1.default, { side: "left", anchorEl: anchorEl, text: (0, util_1.stringify)(leftBpOffset) }), (0, jsx_runtime_1.jsx)(RubberbandTooltip_1.default, { side: "right", anchorEl: anchorEl, text: (0, util_1.stringify)(rightBpOffset) })] })) : null, (0, jsx_runtime_1.jsx)("div", { className: classes.rubberband, style: { left, width }, children: numOfBpSelected ? ((0, jsx_runtime_1.jsx)(material_1.Typography, { ref: el => {
|
|
38
38
|
setAnchorEl(el);
|
|
39
39
|
}, variant: "h6", className: classes.rubberbandText, style: {
|
|
40
40
|
top,
|
|
41
41
|
position: sticky ? 'sticky' : undefined,
|
|
42
|
-
}, children:
|
|
42
|
+
}, children: (0, util_1.getBpDisplayStr)(numOfBpSelected) })) : null })] }));
|
|
43
43
|
}
|
|
@@ -174,6 +174,7 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
|
|
|
174
174
|
input: string;
|
|
175
175
|
assembly: Assembly;
|
|
176
176
|
}): Promise<void>;
|
|
177
|
+
navToLocation(parsedLocString: ParsedLocString, assemblyName?: string): Promise<void>;
|
|
177
178
|
navToLocations(parsedLocStrings: ParsedLocString[], assemblyName?: string): Promise<void>;
|
|
178
179
|
navTo(query: NavLocation): void;
|
|
179
180
|
navToMultiple(locations: NavLocation[]): void;
|
|
@@ -856,6 +856,9 @@ function stateModelFactory(pluginManager) {
|
|
|
856
856
|
model: self,
|
|
857
857
|
});
|
|
858
858
|
},
|
|
859
|
+
async navToLocation(parsedLocString, assemblyName) {
|
|
860
|
+
return this.navToLocations([parsedLocString], assemblyName);
|
|
861
|
+
},
|
|
859
862
|
async navToLocations(parsedLocStrings, assemblyName) {
|
|
860
863
|
const { assemblyManager } = (0, util_1.getSession)(self);
|
|
861
864
|
await (0, mobx_1.when)(() => self.volatileWidth !== undefined);
|
|
@@ -41,7 +41,7 @@ const AddFiltersDialog = observer(function ({ model, handleClose, }) {
|
|
|
41
41
|
setError(e);
|
|
42
42
|
}
|
|
43
43
|
}, [data]);
|
|
44
|
-
return (_jsxs(Dialog, { maxWidth: "xl", open: true, onClose: handleClose, title: "Add track filters", children: [_jsxs(DialogContent, { children: [_jsxs("div", { children: ["Add filters, in jexl format, one per line, starting with the string jexl:. Examples:", ' ', _jsxs("ul", { children: [_jsxs("li", { children: [_jsx("code", { children: "jexl:get(feature,'name')=='BRCA1'" }), " - show only feature where the name attribute is BRCA1"] }), _jsxs("li", { children: [_jsx("code", { children: "jexl:get(feature,'type')=='gene'" }), " - show only gene type features in a GFF that has many other feature types"] }), _jsxs("li", { children: [_jsx("code", { children: "jexl:get(feature,'score') > 400" }), " - show only features that have a score greater than 400"] })] })] }), error ? _jsx("p", { className: classes.error, children: `${error}` }) : null, _jsx(TextField, { variant: "outlined", multiline: true, minRows: 5, maxRows: 10, className: classes.dialogContent, fullWidth: true, value: data, onChange: event => {
|
|
44
|
+
return (_jsxs(Dialog, { maxWidth: "xl", open: true, onClose: handleClose, title: "Add track filters", children: [_jsxs(DialogContent, { children: [_jsxs("div", { children: ["Add filters, in jexl format, one per line, starting with the string jexl:. Examples:", ' ', _jsxs("ul", { children: [_jsxs("li", { children: [_jsx("code", { children: "jexl:get(feature,'name')=='BRCA1'" }), " - show only feature where the name attribute is BRCA1"] }), _jsxs("li", { children: [_jsx("code", { children: "jexl:get(feature,'type')=='gene'" }), " - show only gene type features in a GFF that has many other feature types"] }), _jsxs("li", { children: [_jsx("code", { children: "jexl:get(feature,'score') > 400" }), " - show only features that have a score greater than 400"] }), _jsxs("li", { children: [_jsx("code", { children: "jexl:get(feature,'end') - get(feature,'start') < 1000000" }), ' ', "- show only features with length less than 1Mbp"] })] })] }), error ? _jsx("p", { className: classes.error, children: `${error}` }) : null, _jsx(TextField, { variant: "outlined", multiline: true, minRows: 5, maxRows: 10, className: classes.dialogContent, fullWidth: true, value: data, onChange: event => {
|
|
45
45
|
setData(event.target.value);
|
|
46
46
|
}, slotProps: {
|
|
47
47
|
input: {
|
|
@@ -127,7 +127,10 @@ function stateModelFactory(configSchema) {
|
|
|
127
127
|
onClick: () => {
|
|
128
128
|
getSession(self).queueDialog(handleClose => [
|
|
129
129
|
SetMaxHeightDialog,
|
|
130
|
-
{
|
|
130
|
+
{
|
|
131
|
+
model: self,
|
|
132
|
+
handleClose,
|
|
133
|
+
},
|
|
131
134
|
]);
|
|
132
135
|
},
|
|
133
136
|
},
|
|
@@ -136,7 +139,10 @@ function stateModelFactory(configSchema) {
|
|
|
136
139
|
onClick: () => {
|
|
137
140
|
getSession(self).queueDialog(handleClose => [
|
|
138
141
|
AddFiltersDialog,
|
|
139
|
-
{
|
|
142
|
+
{
|
|
143
|
+
model: self,
|
|
144
|
+
handleClose,
|
|
145
|
+
},
|
|
140
146
|
]);
|
|
141
147
|
},
|
|
142
148
|
},
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { lazy, useEffect, useState } from 'react';
|
|
3
3
|
import CascadingMenuButton from '@jbrowse/core/ui/CascadingMenuButton';
|
|
4
|
-
import { getSession } from '@jbrowse/core/util';
|
|
4
|
+
import { getBpDisplayStr, getSession } from '@jbrowse/core/util';
|
|
5
5
|
import MoreVert from '@mui/icons-material/MoreVert';
|
|
6
6
|
import ZoomIn from '@mui/icons-material/ZoomIn';
|
|
7
7
|
import ZoomOut from '@mui/icons-material/ZoomOut';
|
|
@@ -20,9 +20,13 @@ const useStyles = makeStyles()(theme => ({
|
|
|
20
20
|
color: theme.palette.text.secondary,
|
|
21
21
|
},
|
|
22
22
|
}));
|
|
23
|
+
function ValueLabelComponent(props) {
|
|
24
|
+
const { children, open, value } = props;
|
|
25
|
+
return (_jsx(Tooltip, { open: open, enterTouchDelay: 0, placement: "top", title: value, arrow: true, children: children }));
|
|
26
|
+
}
|
|
23
27
|
const HeaderZoomControls = observer(function ({ model, }) {
|
|
24
28
|
const { classes } = useStyles();
|
|
25
|
-
const { maxBpPerPx, minBpPerPx, bpPerPx } = model;
|
|
29
|
+
const { width, maxBpPerPx, minBpPerPx, bpPerPx } = model;
|
|
26
30
|
const [value, setValue] = useState(-Math.log2(bpPerPx) * 100);
|
|
27
31
|
useEffect(() => {
|
|
28
32
|
setValue(-Math.log2(bpPerPx) * 100);
|
|
@@ -31,7 +35,9 @@ const HeaderZoomControls = observer(function ({ model, }) {
|
|
|
31
35
|
const zoomOutDisabled = bpPerPx >= maxBpPerPx - 0.0001;
|
|
32
36
|
return (_jsxs("div", { className: classes.container, children: [_jsx(Tooltip, { title: "Zoom out 2x", children: _jsx("span", { children: _jsx(IconButton, { "data-testid": "zoom_out", disabled: zoomOutDisabled, onClick: () => {
|
|
33
37
|
model.zoom(bpPerPx * 2);
|
|
34
|
-
}, children: _jsx(ZoomOut, {}) }) }) }), _jsx(Slider, { size: "small", className: classes.slider, value: value, min: -Math.log2(maxBpPerPx) * 100, max: -Math.log2(minBpPerPx) * 100, onChangeCommitted: () => model.zoomTo(2 ** (-value / 100)),
|
|
38
|
+
}, children: _jsx(ZoomOut, {}) }) }) }), _jsx(Slider, { size: "small", className: classes.slider, value: value, min: -Math.log2(maxBpPerPx) * 100, max: -Math.log2(minBpPerPx) * 100, onChangeCommitted: () => model.zoomTo(2 ** (-value / 100)), valueLabelDisplay: "auto", valueLabelFormat: newValue => `Window size: ${getBpDisplayStr(2 ** (-newValue / 100) * width)}`, slots: {
|
|
39
|
+
valueLabel: ValueLabelComponent,
|
|
40
|
+
}, onChange: (_, val) => {
|
|
35
41
|
setValue(val);
|
|
36
42
|
} }), _jsx(Tooltip, { title: "Zoom in 2x", children: _jsx("span", { children: _jsx(IconButton, { "data-testid": "zoom_in", disabled: zoomInDisabled, onClick: () => {
|
|
37
43
|
model.zoom(model.bpPerPx / 2);
|
|
@@ -3,7 +3,7 @@ import { useEffect, useState } from 'react';
|
|
|
3
3
|
import { AssemblySelector, ErrorMessage } from '@jbrowse/core/ui';
|
|
4
4
|
import { getSession } from '@jbrowse/core/util';
|
|
5
5
|
import CloseIcon from '@mui/icons-material/Close';
|
|
6
|
-
import { Button, CircularProgress, Container, FormControl,
|
|
6
|
+
import { Button, CircularProgress, Container, FormControl, Grid as Grid, } from '@mui/material';
|
|
7
7
|
import { observer } from 'mobx-react';
|
|
8
8
|
import { makeStyles } from 'tss-react/mui';
|
|
9
9
|
import ImportFormRefNameAutocomplete from './ImportFormRefNameAutocomplete';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { useState } from 'react';
|
|
3
|
-
import {
|
|
3
|
+
import { getBpDisplayStr, stringify } from '@jbrowse/core/util';
|
|
4
4
|
import { Typography, alpha } from '@mui/material';
|
|
5
5
|
import { makeStyles } from 'tss-react/mui';
|
|
6
6
|
import RubberbandTooltip from './RubberbandTooltip';
|
|
@@ -28,10 +28,10 @@ const useStyles = makeStyles()(theme => {
|
|
|
28
28
|
export default function RubberbandSpan({ leftBpOffset, rightBpOffset, numOfBpSelected, left, width, top = 0, sticky = false, }) {
|
|
29
29
|
const { classes } = useStyles();
|
|
30
30
|
const [anchorEl, setAnchorEl] = useState(null);
|
|
31
|
-
return (_jsxs(_Fragment, { children: [anchorEl ? (_jsxs(_Fragment, { children: [_jsx(RubberbandTooltip, { side: "left", anchorEl: anchorEl, text: stringify(leftBpOffset) }), _jsx(RubberbandTooltip, { side: "right", anchorEl: anchorEl, text: stringify(rightBpOffset) })] })) : null, _jsx("div", { className: classes.rubberband, style: { left, width }, children: numOfBpSelected ? (
|
|
31
|
+
return (_jsxs(_Fragment, { children: [anchorEl ? (_jsxs(_Fragment, { children: [_jsx(RubberbandTooltip, { side: "left", anchorEl: anchorEl, text: stringify(leftBpOffset) }), _jsx(RubberbandTooltip, { side: "right", anchorEl: anchorEl, text: stringify(rightBpOffset) })] })) : null, _jsx("div", { className: classes.rubberband, style: { left, width }, children: numOfBpSelected ? (_jsx(Typography, { ref: el => {
|
|
32
32
|
setAnchorEl(el);
|
|
33
33
|
}, variant: "h6", className: classes.rubberbandText, style: {
|
|
34
34
|
top,
|
|
35
35
|
position: sticky ? 'sticky' : undefined,
|
|
36
|
-
}, children:
|
|
36
|
+
}, children: getBpDisplayStr(numOfBpSelected) })) : null })] }));
|
|
37
37
|
}
|
|
@@ -174,6 +174,7 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
|
|
|
174
174
|
input: string;
|
|
175
175
|
assembly: Assembly;
|
|
176
176
|
}): Promise<void>;
|
|
177
|
+
navToLocation(parsedLocString: ParsedLocString, assemblyName?: string): Promise<void>;
|
|
177
178
|
navToLocations(parsedLocStrings: ParsedLocString[], assemblyName?: string): Promise<void>;
|
|
178
179
|
navTo(query: NavLocation): void;
|
|
179
180
|
navToMultiple(locations: NavLocation[]): void;
|
|
@@ -816,6 +816,9 @@ export function stateModelFactory(pluginManager) {
|
|
|
816
816
|
model: self,
|
|
817
817
|
});
|
|
818
818
|
},
|
|
819
|
+
async navToLocation(parsedLocString, assemblyName) {
|
|
820
|
+
return this.navToLocations([parsedLocString], assemblyName);
|
|
821
|
+
},
|
|
819
822
|
async navToLocations(parsedLocStrings, assemblyName) {
|
|
820
823
|
const { assemblyManager } = getSession(self);
|
|
821
824
|
await when(() => self.volatileWidth !== undefined);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jbrowse/plugin-linear-genome-view",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.3.0",
|
|
4
4
|
"description": "JBrowse 2 linear genome view",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"jbrowse",
|
|
@@ -38,9 +38,9 @@
|
|
|
38
38
|
"useSrc": "node ../../scripts/useSrc.js"
|
|
39
39
|
},
|
|
40
40
|
"dependencies": {
|
|
41
|
-
"@jbrowse/core": "^3.
|
|
42
|
-
"@mui/icons-material": "^
|
|
43
|
-
"@mui/material": "^
|
|
41
|
+
"@jbrowse/core": "^3.3.0",
|
|
42
|
+
"@mui/icons-material": "^7.0.0",
|
|
43
|
+
"@mui/material": "^7.0.0",
|
|
44
44
|
"@types/file-saver": "^2.0.1",
|
|
45
45
|
"copy-to-clipboard": "^3.3.1",
|
|
46
46
|
"file-saver": "^2.0.0",
|
|
@@ -58,5 +58,5 @@
|
|
|
58
58
|
"access": "public"
|
|
59
59
|
},
|
|
60
60
|
"module": "esm/index.js",
|
|
61
|
-
"gitHead": "
|
|
61
|
+
"gitHead": "0bb64d8cc7ecdd167515308b31eec3d9acbc59e4"
|
|
62
62
|
}
|