@jbrowse/plugin-grid-bookmark 1.7.10 → 2.0.1
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/GridBookmarkWidget/components/AssemblySelector.js +40 -74
- package/dist/GridBookmarkWidget/components/AssemblySelector.js.map +1 -0
- package/dist/GridBookmarkWidget/components/ClearBookmarks.js +79 -80
- package/dist/GridBookmarkWidget/components/ClearBookmarks.js.map +1 -0
- package/dist/GridBookmarkWidget/components/DeleteBookmark.js +47 -61
- package/dist/GridBookmarkWidget/components/DeleteBookmark.js.map +1 -0
- package/dist/GridBookmarkWidget/components/DownloadBookmarks.js +85 -104
- package/dist/GridBookmarkWidget/components/DownloadBookmarks.js.map +1 -0
- package/dist/GridBookmarkWidget/components/GridBookmarkWidget.js +159 -185
- package/dist/GridBookmarkWidget/components/GridBookmarkWidget.js.map +1 -0
- package/dist/GridBookmarkWidget/components/ImportBookmarks.js +164 -181
- package/dist/GridBookmarkWidget/components/ImportBookmarks.js.map +1 -0
- package/dist/GridBookmarkWidget/index.d.ts +0 -1
- package/dist/GridBookmarkWidget/index.js +10 -28
- package/dist/GridBookmarkWidget/index.js.map +1 -0
- package/dist/GridBookmarkWidget/model.js +77 -67
- package/dist/GridBookmarkWidget/model.js.map +1 -0
- package/dist/GridBookmarkWidget/types.js +2 -4
- package/dist/GridBookmarkWidget/types.js.map +1 -0
- package/dist/GridBookmarkWidget/utils.js +129 -129
- package/dist/GridBookmarkWidget/utils.js.map +1 -0
- package/dist/index.js +181 -187
- package/dist/index.js.map +1 -0
- package/esm/GridBookmarkWidget/components/AssemblySelector.d.ts +7 -0
- package/esm/GridBookmarkWidget/components/AssemblySelector.js +41 -0
- package/esm/GridBookmarkWidget/components/AssemblySelector.js.map +1 -0
- package/esm/GridBookmarkWidget/components/ClearBookmarks.d.ts +7 -0
- package/esm/GridBookmarkWidget/components/ClearBookmarks.js +40 -0
- package/esm/GridBookmarkWidget/components/ClearBookmarks.js.map +1 -0
- package/esm/GridBookmarkWidget/components/DeleteBookmark.d.ts +9 -0
- package/esm/GridBookmarkWidget/components/DeleteBookmark.js +46 -0
- package/esm/GridBookmarkWidget/components/DeleteBookmark.js.map +1 -0
- package/esm/GridBookmarkWidget/components/DownloadBookmarks.d.ts +7 -0
- package/esm/GridBookmarkWidget/components/DownloadBookmarks.js +50 -0
- package/esm/GridBookmarkWidget/components/DownloadBookmarks.js.map +1 -0
- package/esm/GridBookmarkWidget/components/GridBookmarkWidget.d.ts +7 -0
- package/esm/GridBookmarkWidget/components/GridBookmarkWidget.js +95 -0
- package/esm/GridBookmarkWidget/components/GridBookmarkWidget.js.map +1 -0
- package/esm/GridBookmarkWidget/components/ImportBookmarks.d.ts +8 -0
- package/esm/GridBookmarkWidget/components/ImportBookmarks.js +79 -0
- package/esm/GridBookmarkWidget/components/ImportBookmarks.js.map +1 -0
- package/esm/GridBookmarkWidget/index.d.ts +2 -0
- package/esm/GridBookmarkWidget/index.js +4 -0
- package/esm/GridBookmarkWidget/index.js.map +1 -0
- package/esm/GridBookmarkWidget/model.d.ts +35 -0
- package/esm/GridBookmarkWidget/model.js +54 -0
- package/esm/GridBookmarkWidget/model.js.map +1 -0
- package/esm/GridBookmarkWidget/types.d.ts +7 -0
- package/esm/GridBookmarkWidget/types.js +2 -0
- package/esm/GridBookmarkWidget/types.js.map +1 -0
- package/esm/GridBookmarkWidget/utils.d.ts +5 -0
- package/esm/GridBookmarkWidget/utils.js +77 -0
- package/esm/GridBookmarkWidget/utils.js.map +1 -0
- package/esm/index.d.ts +7 -0
- package/esm/index.js +116 -0
- package/esm/index.js.map +1 -0
- package/package.json +23 -15
- package/src/GridBookmarkWidget/components/AssemblySelector.tsx +9 -20
- package/src/GridBookmarkWidget/components/ClearBookmarks.tsx +6 -6
- package/src/GridBookmarkWidget/components/DeleteBookmark.tsx +5 -5
- package/src/GridBookmarkWidget/components/DownloadBookmarks.tsx +6 -6
- package/src/GridBookmarkWidget/components/GridBookmarkWidget.tsx +94 -111
- package/src/GridBookmarkWidget/components/ImportBookmarks.tsx +6 -6
- package/src/GridBookmarkWidget/index.js +0 -2
- package/src/index.ts +2 -2
- package/dist/GridBookmarkWidget/components/GridBookmarkWidget.test.js +0 -302
- package/dist/index.test.js +0 -35
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { observer } from 'mobx-react';
|
|
3
|
+
import { Typography, Select, MenuItem, FormControl } from '@mui/material';
|
|
4
|
+
import { makeStyles } from 'tss-react/mui';
|
|
5
|
+
const useStyles = makeStyles()(() => ({
|
|
6
|
+
container: {
|
|
7
|
+
display: 'flex',
|
|
8
|
+
flexDirection: 'row',
|
|
9
|
+
margin: 5,
|
|
10
|
+
},
|
|
11
|
+
selectText: {
|
|
12
|
+
marginRight: 8,
|
|
13
|
+
marginTop: 10,
|
|
14
|
+
},
|
|
15
|
+
flexItem: {
|
|
16
|
+
marginRight: 8,
|
|
17
|
+
},
|
|
18
|
+
}));
|
|
19
|
+
function AssemblySelector({ model }) {
|
|
20
|
+
const { classes } = useStyles();
|
|
21
|
+
const { assemblies, selectedAssembly, setSelectedAssembly } = model;
|
|
22
|
+
const noAssemblies = assemblies.length === 0 ? true : false;
|
|
23
|
+
const determineCurrentValue = (selectedAssembly) => {
|
|
24
|
+
if (selectedAssembly === 'all') {
|
|
25
|
+
return 'all';
|
|
26
|
+
}
|
|
27
|
+
else if (assemblies.includes(selectedAssembly)) {
|
|
28
|
+
return selectedAssembly;
|
|
29
|
+
}
|
|
30
|
+
return 'none';
|
|
31
|
+
};
|
|
32
|
+
return (React.createElement("div", { className: classes.container },
|
|
33
|
+
React.createElement(Typography, { className: classes.selectText }, "Select assembly:"),
|
|
34
|
+
React.createElement(FormControl, { className: classes.flexItem, disabled: noAssemblies },
|
|
35
|
+
React.createElement(Select, { value: determineCurrentValue(selectedAssembly), onChange: event => setSelectedAssembly(event.target.value) },
|
|
36
|
+
React.createElement(MenuItem, { value: "none" }, "none"),
|
|
37
|
+
React.createElement(MenuItem, { value: "all" }, "all"),
|
|
38
|
+
assemblies.map(assembly => (React.createElement(MenuItem, { value: assembly, key: assembly }, assembly)))))));
|
|
39
|
+
}
|
|
40
|
+
export default observer(AssemblySelector);
|
|
41
|
+
//# sourceMappingURL=AssemblySelector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AssemblySelector.js","sourceRoot":"","sources":["../../../src/GridBookmarkWidget/components/AssemblySelector.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAErC,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AACzE,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAI1C,MAAM,SAAS,GAAG,UAAU,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;IACpC,SAAS,EAAE;QACT,OAAO,EAAE,MAAM;QACf,aAAa,EAAE,KAAK;QACpB,MAAM,EAAE,CAAC;KACV;IACD,UAAU,EAAE;QACV,WAAW,EAAE,CAAC;QACd,SAAS,EAAE,EAAE;KACd;IACD,QAAQ,EAAE;QACR,WAAW,EAAE,CAAC;KACf;CACF,CAAC,CAAC,CAAA;AAEH,SAAS,gBAAgB,CAAC,EAAE,KAAK,EAAgC;IAC/D,MAAM,EAAE,OAAO,EAAE,GAAG,SAAS,EAAE,CAAA;IAC/B,MAAM,EAAE,UAAU,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,GAAG,KAAK,CAAA;IACnE,MAAM,YAAY,GAAG,UAAU,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAA;IAE3D,MAAM,qBAAqB,GAAG,CAAC,gBAAwB,EAAE,EAAE;QACzD,IAAI,gBAAgB,KAAK,KAAK,EAAE;YAC9B,OAAO,KAAK,CAAA;SACb;aAAM,IAAI,UAAU,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE;YAChD,OAAO,gBAAgB,CAAA;SACxB;QAED,OAAO,MAAM,CAAA;IACf,CAAC,CAAA;IAED,OAAO,CACL,6BAAK,SAAS,EAAE,OAAO,CAAC,SAAS;QAC/B,oBAAC,UAAU,IAAC,SAAS,EAAE,OAAO,CAAC,UAAU,uBAA+B;QACxE,oBAAC,WAAW,IAAC,SAAS,EAAE,OAAO,CAAC,QAAQ,EAAE,QAAQ,EAAE,YAAY;YAC9D,oBAAC,MAAM,IACL,KAAK,EAAE,qBAAqB,CAAC,gBAAgB,CAAC,EAC9C,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;gBAE1D,oBAAC,QAAQ,IAAC,KAAK,EAAC,MAAM,WAAgB;gBACtC,oBAAC,QAAQ,IAAC,KAAK,EAAC,KAAK,UAAe;gBACnC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAC1B,oBAAC,QAAQ,IAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,IACrC,QAAQ,CACA,CACZ,CAAC,CACK,CACG,CACV,CACP,CAAA;AACH,CAAC;AAED,eAAe,QAAQ,CAAC,gBAAgB,CAAC,CAAA"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import React, { useState } from 'react';
|
|
2
|
+
import { observer } from 'mobx-react';
|
|
3
|
+
import { Button, IconButton, Dialog, DialogTitle, DialogContent, DialogActions, Typography, } from '@mui/material';
|
|
4
|
+
import { makeStyles } from 'tss-react/mui';
|
|
5
|
+
import ClearAllIcon from '@mui/icons-material/ClearAll';
|
|
6
|
+
import CloseIcon from '@mui/icons-material/Close';
|
|
7
|
+
const useStyles = makeStyles()(() => ({
|
|
8
|
+
closeDialog: {
|
|
9
|
+
position: 'absolute',
|
|
10
|
+
right: 0,
|
|
11
|
+
top: 0,
|
|
12
|
+
},
|
|
13
|
+
dialogContainer: {
|
|
14
|
+
margin: 15,
|
|
15
|
+
},
|
|
16
|
+
}));
|
|
17
|
+
function ClearBookmarks({ model }) {
|
|
18
|
+
const { classes } = useStyles();
|
|
19
|
+
const [dialogOpen, setDialogOpen] = useState(false);
|
|
20
|
+
const { clearAllBookmarks } = model;
|
|
21
|
+
return (React.createElement(React.Fragment, null,
|
|
22
|
+
React.createElement(Button, { startIcon: React.createElement(ClearAllIcon, null), "aria-label": "clear bookmarks", onClick: () => setDialogOpen(true) }, "Clear"),
|
|
23
|
+
React.createElement(Dialog, { open: dialogOpen, onClose: () => setDialogOpen(false) },
|
|
24
|
+
React.createElement(DialogTitle, null,
|
|
25
|
+
"Clear bookmarks",
|
|
26
|
+
React.createElement(IconButton, { className: classes.closeDialog, "aria-label": "close-dialog", onClick: () => setDialogOpen(false) },
|
|
27
|
+
React.createElement(CloseIcon, null))),
|
|
28
|
+
React.createElement(DialogContent, null,
|
|
29
|
+
React.createElement(Typography, null, "Clear all bookmarks? Note this will clear bookmarks for all assemblies")),
|
|
30
|
+
React.createElement(DialogActions, null,
|
|
31
|
+
React.createElement(Button, { variant: "contained", color: "secondary", onClick: () => {
|
|
32
|
+
setDialogOpen(false);
|
|
33
|
+
} }, "Cancel"),
|
|
34
|
+
React.createElement(Button, { variant: "contained", color: "primary", onClick: () => {
|
|
35
|
+
clearAllBookmarks();
|
|
36
|
+
setDialogOpen(false);
|
|
37
|
+
} }, "Confirm")))));
|
|
38
|
+
}
|
|
39
|
+
export default observer(ClearBookmarks);
|
|
40
|
+
//# sourceMappingURL=ClearBookmarks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ClearBookmarks.js","sourceRoot":"","sources":["../../../src/GridBookmarkWidget/components/ClearBookmarks.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAErC,OAAO,EACL,MAAM,EACN,UAAU,EACV,MAAM,EACN,WAAW,EACX,aAAa,EACb,aAAa,EACb,UAAU,GACX,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC1C,OAAO,YAAY,MAAM,8BAA8B,CAAA;AACvD,OAAO,SAAS,MAAM,2BAA2B,CAAA;AAIjD,MAAM,SAAS,GAAG,UAAU,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;IACpC,WAAW,EAAE;QACX,QAAQ,EAAE,UAAU;QACpB,KAAK,EAAE,CAAC;QACR,GAAG,EAAE,CAAC;KACP;IACD,eAAe,EAAE;QACf,MAAM,EAAE,EAAE;KACX;CACF,CAAC,CAAC,CAAA;AAEH,SAAS,cAAc,CAAC,EAAE,KAAK,EAAgC;IAC7D,MAAM,EAAE,OAAO,EAAE,GAAG,SAAS,EAAE,CAAA;IAC/B,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAEnD,MAAM,EAAE,iBAAiB,EAAE,GAAG,KAAK,CAAA;IAEnC,OAAO,CACL;QACE,oBAAC,MAAM,IACL,SAAS,EAAE,oBAAC,YAAY,OAAG,gBAChB,iBAAiB,EAC5B,OAAO,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,YAG3B;QACT,oBAAC,MAAM,IAAC,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC;YAC3D,oBAAC,WAAW;;gBAEV,oBAAC,UAAU,IACT,SAAS,EAAE,OAAO,CAAC,WAAW,gBACnB,cAAc,EACzB,OAAO,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC;oBAEnC,oBAAC,SAAS,OAAG,CACF,CACD;YACd,oBAAC,aAAa;gBACZ,oBAAC,UAAU,iFAGE,CACC;YAChB,oBAAC,aAAa;gBACZ,oBAAC,MAAM,IACL,OAAO,EAAC,WAAW,EACnB,KAAK,EAAC,WAAW,EACjB,OAAO,EAAE,GAAG,EAAE;wBACZ,aAAa,CAAC,KAAK,CAAC,CAAA;oBACtB,CAAC,aAGM;gBACT,oBAAC,MAAM,IACL,OAAO,EAAC,WAAW,EACnB,KAAK,EAAC,SAAS,EACf,OAAO,EAAE,GAAG,EAAE;wBACZ,iBAAiB,EAAE,CAAA;wBACnB,aAAa,CAAC,KAAK,CAAC,CAAA;oBACtB,CAAC,cAGM,CACK,CACT,CACR,CACJ,CAAA;AACH,CAAC;AAED,eAAe,QAAQ,CAAC,cAAc,CAAC,CAAA"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { GridBookmarkModel } from '../model';
|
|
3
|
+
declare function DeleteBookmarkDialog({ rowNumber, model, onClose, }: {
|
|
4
|
+
rowNumber: number | undefined;
|
|
5
|
+
model: GridBookmarkModel;
|
|
6
|
+
onClose: () => void;
|
|
7
|
+
}): JSX.Element;
|
|
8
|
+
declare const _default: typeof DeleteBookmarkDialog;
|
|
9
|
+
export default _default;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { observer } from 'mobx-react';
|
|
3
|
+
import { assembleLocString } from '@jbrowse/core/util';
|
|
4
|
+
import { IconButton, Button, Dialog, DialogTitle, DialogContent, DialogActions, Typography, } from '@mui/material';
|
|
5
|
+
import { makeStyles } from 'tss-react/mui';
|
|
6
|
+
import CloseIcon from '@mui/icons-material/Close';
|
|
7
|
+
const useStyles = makeStyles()(() => ({
|
|
8
|
+
closeDialog: {
|
|
9
|
+
position: 'absolute',
|
|
10
|
+
right: 0,
|
|
11
|
+
top: 0,
|
|
12
|
+
},
|
|
13
|
+
dialogContainer: {
|
|
14
|
+
margin: 15,
|
|
15
|
+
},
|
|
16
|
+
}));
|
|
17
|
+
function DeleteBookmarkDialog({ rowNumber, model, onClose, }) {
|
|
18
|
+
const { classes } = useStyles();
|
|
19
|
+
const { removeBookmark } = model;
|
|
20
|
+
return (React.createElement(Dialog, { open: rowNumber !== undefined, onClose: onClose },
|
|
21
|
+
React.createElement(DialogTitle, null,
|
|
22
|
+
"Delete bookmark",
|
|
23
|
+
React.createElement(IconButton, { className: classes.closeDialog, "aria-label": "close-dialog", onClick: onClose },
|
|
24
|
+
React.createElement(CloseIcon, null))),
|
|
25
|
+
React.createElement(DialogContent, null,
|
|
26
|
+
React.createElement(Typography, null,
|
|
27
|
+
"Remove",
|
|
28
|
+
' ',
|
|
29
|
+
React.createElement("code", null, rowNumber !== undefined
|
|
30
|
+
? assembleLocString(model.bookmarkedRegions[rowNumber])
|
|
31
|
+
: ''),
|
|
32
|
+
' ',
|
|
33
|
+
"?")),
|
|
34
|
+
React.createElement(DialogActions, null,
|
|
35
|
+
React.createElement(Button, { variant: "contained", color: "secondary", onClick: () => {
|
|
36
|
+
onClose();
|
|
37
|
+
} }, "Cancel"),
|
|
38
|
+
React.createElement(Button, { variant: "contained", color: "primary", onClick: () => {
|
|
39
|
+
if (rowNumber !== undefined) {
|
|
40
|
+
removeBookmark(rowNumber);
|
|
41
|
+
onClose();
|
|
42
|
+
}
|
|
43
|
+
} }, "Confirm"))));
|
|
44
|
+
}
|
|
45
|
+
export default observer(DeleteBookmarkDialog);
|
|
46
|
+
//# sourceMappingURL=DeleteBookmark.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DeleteBookmark.js","sourceRoot":"","sources":["../../../src/GridBookmarkWidget/components/DeleteBookmark.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAErC,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAEtD,OAAO,EACL,UAAU,EACV,MAAM,EACN,MAAM,EACN,WAAW,EACX,aAAa,EACb,aAAa,EACb,UAAU,GACX,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC1C,OAAO,SAAS,MAAM,2BAA2B,CAAA;AAIjD,MAAM,SAAS,GAAG,UAAU,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;IACpC,WAAW,EAAE;QACX,QAAQ,EAAE,UAAU;QACpB,KAAK,EAAE,CAAC;QACR,GAAG,EAAE,CAAC;KACP;IACD,eAAe,EAAE;QACf,MAAM,EAAE,EAAE;KACX;CACF,CAAC,CAAC,CAAA;AAEH,SAAS,oBAAoB,CAAC,EAC5B,SAAS,EACT,KAAK,EACL,OAAO,GAKR;IACC,MAAM,EAAE,OAAO,EAAE,GAAG,SAAS,EAAE,CAAA;IAE/B,MAAM,EAAE,cAAc,EAAE,GAAG,KAAK,CAAA;IAEhC,OAAO,CACL,oBAAC,MAAM,IAAC,IAAI,EAAE,SAAS,KAAK,SAAS,EAAE,OAAO,EAAE,OAAO;QACrD,oBAAC,WAAW;;YAEV,oBAAC,UAAU,IACT,SAAS,EAAE,OAAO,CAAC,WAAW,gBACnB,cAAc,EACzB,OAAO,EAAE,OAAO;gBAEhB,oBAAC,SAAS,OAAG,CACF,CACD;QACd,oBAAC,aAAa;YACZ,oBAAC,UAAU;;gBACF,GAAG;gBACV,kCACG,SAAS,KAAK,SAAS;oBACtB,CAAC,CAAC,iBAAiB,CAAC,KAAK,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;oBACvD,CAAC,CAAC,EAAE,CACD;gBAAC,GAAG;oBAEA,CACC;QAChB,oBAAC,aAAa;YACZ,oBAAC,MAAM,IACL,OAAO,EAAC,WAAW,EACnB,KAAK,EAAC,WAAW,EACjB,OAAO,EAAE,GAAG,EAAE;oBACZ,OAAO,EAAE,CAAA;gBACX,CAAC,aAGM;YAET,oBAAC,MAAM,IACL,OAAO,EAAC,WAAW,EACnB,KAAK,EAAC,SAAS,EACf,OAAO,EAAE,GAAG,EAAE;oBACZ,IAAI,SAAS,KAAK,SAAS,EAAE;wBAC3B,cAAc,CAAC,SAAS,CAAC,CAAA;wBACzB,OAAO,EAAE,CAAA;qBACV;gBACH,CAAC,cAGM,CACK,CACT,CACV,CAAA;AACH,CAAC;AAED,eAAe,QAAQ,CAAC,oBAAoB,CAAC,CAAA"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import React, { useState } from 'react';
|
|
2
|
+
import { observer } from 'mobx-react';
|
|
3
|
+
import { IconButton, Button, Dialog, DialogTitle, DialogContent, DialogActions, MenuItem, Select, Typography, } from '@mui/material';
|
|
4
|
+
import { makeStyles } from 'tss-react/mui';
|
|
5
|
+
import CloseIcon from '@mui/icons-material/Close';
|
|
6
|
+
import GetAppIcon from '@mui/icons-material/GetApp';
|
|
7
|
+
import { downloadBookmarkFile } from '../utils';
|
|
8
|
+
const useStyles = makeStyles()(() => ({
|
|
9
|
+
closeDialog: {
|
|
10
|
+
position: 'absolute',
|
|
11
|
+
right: 0,
|
|
12
|
+
top: 0,
|
|
13
|
+
},
|
|
14
|
+
dialogContainer: {
|
|
15
|
+
margin: 15,
|
|
16
|
+
},
|
|
17
|
+
flexItem: {
|
|
18
|
+
margin: 5,
|
|
19
|
+
},
|
|
20
|
+
flexContainer: {
|
|
21
|
+
display: 'flex',
|
|
22
|
+
justifyContent: 'space-evenly',
|
|
23
|
+
width: 200,
|
|
24
|
+
},
|
|
25
|
+
}));
|
|
26
|
+
function DownloadBookmarks({ model }) {
|
|
27
|
+
const { classes } = useStyles();
|
|
28
|
+
const [dialogOpen, setDialogOpen] = useState(false);
|
|
29
|
+
const [fileType, setFileType] = useState('BED');
|
|
30
|
+
const { bookmarkedRegions } = model;
|
|
31
|
+
return (React.createElement(React.Fragment, null,
|
|
32
|
+
React.createElement(Button, { startIcon: React.createElement(GetAppIcon, null), onClick: () => setDialogOpen(true) }, "Download"),
|
|
33
|
+
React.createElement(Dialog, { open: dialogOpen, onClose: () => setDialogOpen(false) },
|
|
34
|
+
React.createElement(DialogTitle, null,
|
|
35
|
+
React.createElement(IconButton, { className: classes.closeDialog, "aria-label": "close-dialog", onClick: () => setDialogOpen(false) },
|
|
36
|
+
React.createElement(CloseIcon, null))),
|
|
37
|
+
React.createElement(DialogContent, null,
|
|
38
|
+
React.createElement(Typography, null, "Format to download"),
|
|
39
|
+
React.createElement(Select, { className: classes.flexItem, "data-testid": "selectFileType", value: fileType, onChange: event => setFileType(event.target.value) },
|
|
40
|
+
React.createElement(MenuItem, { value: "BED" }, "BED"),
|
|
41
|
+
React.createElement(MenuItem, { value: "TSV" }, "TSV"))),
|
|
42
|
+
React.createElement(DialogActions, null,
|
|
43
|
+
React.createElement(Button, { variant: "contained", color: "secondary", onClick: () => setDialogOpen(false) }, "Cancel"),
|
|
44
|
+
React.createElement(Button, { className: classes.flexItem, "data-testid": "dialogDownload", variant: "contained", color: "primary", startIcon: React.createElement(GetAppIcon, null), onClick: () => {
|
|
45
|
+
downloadBookmarkFile(bookmarkedRegions, fileType, model);
|
|
46
|
+
setDialogOpen(false);
|
|
47
|
+
} }, "Download")))));
|
|
48
|
+
}
|
|
49
|
+
export default observer(DownloadBookmarks);
|
|
50
|
+
//# sourceMappingURL=DownloadBookmarks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DownloadBookmarks.js","sourceRoot":"","sources":["../../../src/GridBookmarkWidget/components/DownloadBookmarks.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import React, { useState } from 'react';
|
|
2
|
+
import { observer } from 'mobx-react';
|
|
3
|
+
import { Link, IconButton, Typography } from '@mui/material';
|
|
4
|
+
import { makeStyles } from 'tss-react/mui';
|
|
5
|
+
import { DataGrid } from '@mui/x-data-grid';
|
|
6
|
+
import { getSession, assembleLocString, measureText } from '@jbrowse/core/util';
|
|
7
|
+
import DeleteIcon from '@mui/icons-material/Delete';
|
|
8
|
+
// locals
|
|
9
|
+
import AssemblySelector from './AssemblySelector';
|
|
10
|
+
import DeleteBookmarkDialog from './DeleteBookmark';
|
|
11
|
+
import DownloadBookmarks from './DownloadBookmarks';
|
|
12
|
+
import ImportBookmarks from './ImportBookmarks';
|
|
13
|
+
import ClearBookmarks from './ClearBookmarks';
|
|
14
|
+
import { navToBookmark } from '../utils';
|
|
15
|
+
const useStyles = makeStyles()(() => ({
|
|
16
|
+
link: {
|
|
17
|
+
cursor: 'pointer',
|
|
18
|
+
},
|
|
19
|
+
}));
|
|
20
|
+
// creates a coarse measurement of column width, similar to code in
|
|
21
|
+
// BaseFeatureDetails
|
|
22
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
23
|
+
const measure = (row, col) => Math.min(Math.max(measureText(String(row[col]), 14) + 20, 80), 1000);
|
|
24
|
+
const BookmarkGrid = observer(({ model }) => {
|
|
25
|
+
const { classes } = useStyles();
|
|
26
|
+
const [dialogRowNumber, setDialogRowNumber] = useState();
|
|
27
|
+
const { bookmarkedRegions, selectedAssembly } = model;
|
|
28
|
+
const { views } = getSession(model);
|
|
29
|
+
const bookmarkRows = bookmarkedRegions
|
|
30
|
+
.filter(r => selectedAssembly === 'all' || r.assemblyName === selectedAssembly)
|
|
31
|
+
.map((region, index) => {
|
|
32
|
+
const { assemblyName, ...rest } = region;
|
|
33
|
+
return {
|
|
34
|
+
...region,
|
|
35
|
+
id: index,
|
|
36
|
+
delete: index,
|
|
37
|
+
locString: assembleLocString(selectedAssembly === 'all' ? region : rest),
|
|
38
|
+
};
|
|
39
|
+
});
|
|
40
|
+
const columns = [
|
|
41
|
+
{
|
|
42
|
+
field: 'locString',
|
|
43
|
+
headerName: 'bookmark link',
|
|
44
|
+
width: Math.max(...bookmarkRows.map(row => measure(row, 'locString'))),
|
|
45
|
+
renderCell: (params) => {
|
|
46
|
+
const { value } = params;
|
|
47
|
+
return (React.createElement(Link, { className: classes.link, onClick: (event) => {
|
|
48
|
+
navToBookmark(value, views, model);
|
|
49
|
+
event.preventDefault();
|
|
50
|
+
} }, value));
|
|
51
|
+
},
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
field: 'label',
|
|
55
|
+
width: Math.max(100, Math.max(...bookmarkRows.map(row => measure(row, 'label')))),
|
|
56
|
+
editable: true,
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
field: 'delete',
|
|
60
|
+
width: 30,
|
|
61
|
+
renderCell: (params) => {
|
|
62
|
+
const { value } = params;
|
|
63
|
+
return (React.createElement(IconButton, { "data-testid": "deleteBookmark", "aria-label": "delete", onClick: () => {
|
|
64
|
+
if (value !== null && value !== undefined) {
|
|
65
|
+
setDialogRowNumber(+value);
|
|
66
|
+
}
|
|
67
|
+
} },
|
|
68
|
+
React.createElement(DeleteIcon, null)));
|
|
69
|
+
},
|
|
70
|
+
},
|
|
71
|
+
];
|
|
72
|
+
return (React.createElement(React.Fragment, null,
|
|
73
|
+
React.createElement(DataGrid, { density: "compact", rows: bookmarkRows, columns: columns, onCellEditCommit: args => {
|
|
74
|
+
const { value, id } = args;
|
|
75
|
+
model.updateBookmarkLabel(id, value);
|
|
76
|
+
}, disableSelectionOnClick: true }),
|
|
77
|
+
React.createElement(DeleteBookmarkDialog, { rowNumber: dialogRowNumber, model: model, onClose: () => setDialogRowNumber(undefined) })));
|
|
78
|
+
});
|
|
79
|
+
function GridBookmarkWidget({ model }) {
|
|
80
|
+
const { selectedAssembly } = model;
|
|
81
|
+
return (React.createElement(React.Fragment, null,
|
|
82
|
+
React.createElement(AssemblySelector, { model: model }),
|
|
83
|
+
React.createElement(DownloadBookmarks, { model: model }),
|
|
84
|
+
React.createElement(ImportBookmarks, { model: model, assemblyName: selectedAssembly }),
|
|
85
|
+
React.createElement(ClearBookmarks, { model: model }),
|
|
86
|
+
React.createElement("div", { style: { margin: 12 } },
|
|
87
|
+
React.createElement(Typography, null,
|
|
88
|
+
"Note: you can double click the ",
|
|
89
|
+
React.createElement("code", null, "label"),
|
|
90
|
+
" field to add your own custom notes")),
|
|
91
|
+
React.createElement("div", { style: { height: 750, width: '100%' } },
|
|
92
|
+
React.createElement(BookmarkGrid, { model: model }))));
|
|
93
|
+
}
|
|
94
|
+
export default observer(GridBookmarkWidget);
|
|
95
|
+
//# sourceMappingURL=GridBookmarkWidget.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GridBookmarkWidget.js","sourceRoot":"","sources":["../../../src/GridBookmarkWidget/components/GridBookmarkWidget.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { GridBookmarkModel } from '../model';
|
|
3
|
+
declare function ImportBookmarks({ model, assemblyName, }: {
|
|
4
|
+
model: GridBookmarkModel;
|
|
5
|
+
assemblyName: string;
|
|
6
|
+
}): JSX.Element;
|
|
7
|
+
declare const _default: typeof ImportBookmarks;
|
|
8
|
+
export default _default;
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import React, { useState } from 'react';
|
|
2
|
+
import { observer } from 'mobx-react';
|
|
3
|
+
import { getSession } from '@jbrowse/core/util';
|
|
4
|
+
import AssemblySelector from '@jbrowse/core/ui/AssemblySelector';
|
|
5
|
+
import { FileSelector } from '@jbrowse/core/ui';
|
|
6
|
+
import { openLocation } from '@jbrowse/core/util/io';
|
|
7
|
+
import { IconButton, Button, Dialog, DialogTitle, DialogContent, DialogActions, Typography, } from '@mui/material';
|
|
8
|
+
import { makeStyles } from 'tss-react/mui';
|
|
9
|
+
import CloseIcon from '@mui/icons-material/Close';
|
|
10
|
+
import ImportIcon from '@mui/icons-material/Publish';
|
|
11
|
+
const useStyles = makeStyles()(() => ({
|
|
12
|
+
closeDialog: {
|
|
13
|
+
position: 'absolute',
|
|
14
|
+
right: 0,
|
|
15
|
+
top: 0,
|
|
16
|
+
},
|
|
17
|
+
dialogContainer: {
|
|
18
|
+
margin: 15,
|
|
19
|
+
},
|
|
20
|
+
flexItem: {
|
|
21
|
+
margin: 5,
|
|
22
|
+
},
|
|
23
|
+
}));
|
|
24
|
+
function ImportBookmarks({ model, assemblyName, }) {
|
|
25
|
+
const { classes } = useStyles();
|
|
26
|
+
const session = getSession(model);
|
|
27
|
+
const { assemblyNames } = session;
|
|
28
|
+
const [dialogOpen, setDialogOpen] = useState(false);
|
|
29
|
+
const [location, setLocation] = useState();
|
|
30
|
+
const [error, setError] = useState();
|
|
31
|
+
const [selectedAsm, setSelectedAsm] = useState(assemblyName || assemblyNames[0]);
|
|
32
|
+
return (React.createElement(React.Fragment, null,
|
|
33
|
+
React.createElement(Button, { startIcon: React.createElement(ImportIcon, null), onClick: () => setDialogOpen(true) }, "Import"),
|
|
34
|
+
React.createElement(Dialog, { open: dialogOpen, onClose: () => setDialogOpen(false), maxWidth: "xl" },
|
|
35
|
+
React.createElement(DialogTitle, null,
|
|
36
|
+
"Import bookmarks",
|
|
37
|
+
React.createElement(IconButton, { className: classes.closeDialog, "aria-label": "close-dialog", onClick: () => setDialogOpen(false) },
|
|
38
|
+
React.createElement(CloseIcon, null))),
|
|
39
|
+
React.createElement(DialogContent, null,
|
|
40
|
+
React.createElement(Typography, null, "Choose a BED format file to import. The first 4 columns will be used"),
|
|
41
|
+
React.createElement(FileSelector, { location: location, setLocation: setLocation, name: "File" }),
|
|
42
|
+
React.createElement(Typography, null, "Select assembly that your data belongs to"),
|
|
43
|
+
React.createElement(AssemblySelector, { onChange: val => setSelectedAsm(val), session: session, selected: selectedAsm }),
|
|
44
|
+
error ? (React.createElement(Typography, { color: "error", variant: "h6" }, `${error}`)) : null),
|
|
45
|
+
React.createElement(DialogActions, null,
|
|
46
|
+
React.createElement(Button, { variant: "contained", color: "secondary", onClick: () => setDialogOpen(false) }, "Cancel"),
|
|
47
|
+
React.createElement(Button, { className: classes.flexItem, "data-testid": "dialogImport", variant: "contained", color: "primary", disabled: !location, startIcon: React.createElement(ImportIcon, null), onClick: async () => {
|
|
48
|
+
try {
|
|
49
|
+
if (!location) {
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
const data = await openLocation(location).readFile('utf8');
|
|
53
|
+
const regions = data
|
|
54
|
+
.split('\n')
|
|
55
|
+
.filter(f => !!f.trim())
|
|
56
|
+
.filter(f => !f.startsWith('#') &&
|
|
57
|
+
!f.startsWith('track') &&
|
|
58
|
+
!f.startsWith('browser'))
|
|
59
|
+
.map(line => {
|
|
60
|
+
const [refName, start, end, name] = line.split('\t');
|
|
61
|
+
return {
|
|
62
|
+
assemblyName: selectedAsm,
|
|
63
|
+
refName,
|
|
64
|
+
start: +start,
|
|
65
|
+
end: +end,
|
|
66
|
+
label: name === '.' ? undefined : name,
|
|
67
|
+
};
|
|
68
|
+
});
|
|
69
|
+
model.importBookmarks(regions);
|
|
70
|
+
setDialogOpen(false);
|
|
71
|
+
}
|
|
72
|
+
catch (e) {
|
|
73
|
+
console.error(e);
|
|
74
|
+
setError(e);
|
|
75
|
+
}
|
|
76
|
+
} }, "Import")))));
|
|
77
|
+
}
|
|
78
|
+
export default observer(ImportBookmarks);
|
|
79
|
+
//# sourceMappingURL=ImportBookmarks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ImportBookmarks.js","sourceRoot":"","sources":["../../../src/GridBookmarkWidget/components/ImportBookmarks.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/GridBookmarkWidget/index.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AACjE,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,SAAS,CAAA;AACtD,MAAM,CAAC,MAAM,YAAY,GAAG,mBAAmB,CAAC,oBAAoB,EAAE,EAAE,CAAC,CAAA"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { Instance } from 'mobx-state-tree';
|
|
2
|
+
import PluginManager from '@jbrowse/core/PluginManager';
|
|
3
|
+
import { Region } from '@jbrowse/core/util/types';
|
|
4
|
+
export default function f(pluginManager: PluginManager): import("mobx-state-tree").IModelType<{
|
|
5
|
+
id: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
|
|
6
|
+
type: import("mobx-state-tree").ISimpleType<"GridBookmarkWidget">;
|
|
7
|
+
view: import("mobx-state-tree").IMaybe<import("mobx-state-tree").IReferenceType<import("mobx-state-tree").IAnyType>>;
|
|
8
|
+
bookmarkedRegions: import("mobx-state-tree").IArrayType<import("mobx-state-tree").IModelType<{
|
|
9
|
+
refName: import("mobx-state-tree").ISimpleType<string>;
|
|
10
|
+
start: import("mobx-state-tree").ISimpleType<number>;
|
|
11
|
+
end: import("mobx-state-tree").ISimpleType<number>;
|
|
12
|
+
reversed: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
|
|
13
|
+
} & {
|
|
14
|
+
assemblyName: import("mobx-state-tree").ISimpleType<string>;
|
|
15
|
+
} & {
|
|
16
|
+
label: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
|
|
17
|
+
}, {
|
|
18
|
+
setRefName(newRefName: string): void;
|
|
19
|
+
} & {
|
|
20
|
+
setLabel(label: string): void;
|
|
21
|
+
}, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>>;
|
|
22
|
+
modelSelectedAssembly: import("mobx-state-tree").IType<string | undefined, string, string>;
|
|
23
|
+
}, {
|
|
24
|
+
importBookmarks(regions: Region[]): void;
|
|
25
|
+
addBookmark(region: Region): void;
|
|
26
|
+
removeBookmark(index: number): void;
|
|
27
|
+
clearAllBookmarks(): void;
|
|
28
|
+
updateBookmarkLabel(index: number, label: string): void;
|
|
29
|
+
setSelectedAssembly(assembly: string): void;
|
|
30
|
+
} & {
|
|
31
|
+
readonly selectedAssembly: string;
|
|
32
|
+
readonly assemblies: string[];
|
|
33
|
+
}, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>;
|
|
34
|
+
export declare type GridBookmarkStateModel = ReturnType<typeof f>;
|
|
35
|
+
export declare type GridBookmarkModel = Instance<GridBookmarkStateModel>;
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { types, cast } from 'mobx-state-tree';
|
|
2
|
+
import { Region as RegionModel, ElementId } from '@jbrowse/core/util/types/mst';
|
|
3
|
+
const LabeledRegionModel = types
|
|
4
|
+
.compose(RegionModel, types.model('Label', { label: types.optional(types.string, '') }))
|
|
5
|
+
.actions(self => ({
|
|
6
|
+
setLabel(label) {
|
|
7
|
+
self.label = label;
|
|
8
|
+
},
|
|
9
|
+
}));
|
|
10
|
+
export default function f(pluginManager) {
|
|
11
|
+
return types
|
|
12
|
+
.model('GridBookmarkModel', {
|
|
13
|
+
id: ElementId,
|
|
14
|
+
type: types.literal('GridBookmarkWidget'),
|
|
15
|
+
view: types.safeReference(pluginManager.pluggableMstType('view', 'stateModel')),
|
|
16
|
+
bookmarkedRegions: types.array(LabeledRegionModel),
|
|
17
|
+
modelSelectedAssembly: '',
|
|
18
|
+
})
|
|
19
|
+
.actions(self => ({
|
|
20
|
+
importBookmarks(regions) {
|
|
21
|
+
self.bookmarkedRegions = cast(self.bookmarkedRegions.concat(regions));
|
|
22
|
+
},
|
|
23
|
+
addBookmark(region) {
|
|
24
|
+
self.bookmarkedRegions.push(region);
|
|
25
|
+
},
|
|
26
|
+
removeBookmark(index) {
|
|
27
|
+
self.bookmarkedRegions.splice(index, 1);
|
|
28
|
+
},
|
|
29
|
+
clearAllBookmarks() {
|
|
30
|
+
self.bookmarkedRegions.clear();
|
|
31
|
+
},
|
|
32
|
+
updateBookmarkLabel(index, label) {
|
|
33
|
+
var _a;
|
|
34
|
+
(_a = self.bookmarkedRegions[index]) === null || _a === void 0 ? void 0 : _a.setLabel(label);
|
|
35
|
+
},
|
|
36
|
+
setSelectedAssembly(assembly) {
|
|
37
|
+
self.modelSelectedAssembly = assembly;
|
|
38
|
+
},
|
|
39
|
+
}))
|
|
40
|
+
.views(self => ({
|
|
41
|
+
get selectedAssembly() {
|
|
42
|
+
return (self.modelSelectedAssembly ||
|
|
43
|
+
(self.bookmarkedRegions.length
|
|
44
|
+
? self.bookmarkedRegions[0].assemblyName
|
|
45
|
+
: ''));
|
|
46
|
+
},
|
|
47
|
+
get assemblies() {
|
|
48
|
+
return [
|
|
49
|
+
...new Set(self.bookmarkedRegions.map(region => region.assemblyName)),
|
|
50
|
+
];
|
|
51
|
+
},
|
|
52
|
+
}));
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/GridBookmarkWidget/model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,IAAI,EAAY,MAAM,iBAAiB,CAAA;AAGvD,OAAO,EAAE,MAAM,IAAI,WAAW,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAA;AAE/E,MAAM,kBAAkB,GAAG,KAAK;KAC7B,OAAO,CACN,WAAW,EACX,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,CAClE;KACA,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAChB,QAAQ,CAAC,KAAa;QACpB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;IACpB,CAAC;CACF,CAAC,CAAC,CAAA;AAEL,MAAM,CAAC,OAAO,UAAU,CAAC,CAAC,aAA4B;IACpD,OAAO,KAAK;SACT,KAAK,CAAC,mBAAmB,EAAE;QAC1B,EAAE,EAAE,SAAS;QACb,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,oBAAoB,CAAC;QACzC,IAAI,EAAE,KAAK,CAAC,aAAa,CACvB,aAAa,CAAC,gBAAgB,CAAC,MAAM,EAAE,YAAY,CAAC,CACrD;QACD,iBAAiB,EAAE,KAAK,CAAC,KAAK,CAAC,kBAAkB,CAAC;QAClD,qBAAqB,EAAE,EAAE;KAC1B,CAAC;SACD,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChB,eAAe,CAAC,OAAiB;YAC/B,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAA;QACvE,CAAC;QACD,WAAW,CAAC,MAAc;YACxB,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QACrC,CAAC;QACD,cAAc,CAAC,KAAa;YAC1B,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;QACzC,CAAC;QACD,iBAAiB;YACf,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAA;QAChC,CAAC;QACD,mBAAmB,CAAC,KAAa,EAAE,KAAa;;YAC9C,MAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,0CAAE,QAAQ,CAAC,KAAK,CAAC,CAAA;QAChD,CAAC;QACD,mBAAmB,CAAC,QAAgB;YAClC,IAAI,CAAC,qBAAqB,GAAG,QAAQ,CAAA;QACvC,CAAC;KACF,CAAC,CAAC;SACF,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACd,IAAI,gBAAgB;YAClB,OAAO,CACL,IAAI,CAAC,qBAAqB;gBAC1B,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM;oBAC5B,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,YAAY;oBACxC,CAAC,CAAC,EAAE,CAAC,CACR,CAAA;QACH,CAAC;QACD,IAAI,UAAU;YACZ,OAAO;gBACL,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;aACtE,CAAA;QACH,CAAC;KACF,CAAC,CAAC,CAAA;AACP,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/GridBookmarkWidget/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { AbstractViewModel } from '@jbrowse/core/util/types';
|
|
2
|
+
import { GridBookmarkModel } from './model';
|
|
3
|
+
import { LabeledRegion } from './types';
|
|
4
|
+
export declare function navToBookmark(locString: string, views: AbstractViewModel[], model: GridBookmarkModel): Promise<void>;
|
|
5
|
+
export declare function downloadBookmarkFile(bookmarkedRegions: LabeledRegion[], fileFormat: string, model: GridBookmarkModel): void;
|