@jbrowse/core 3.6.4 → 3.7.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/BaseFeatureWidget/BaseFeatureDetail/CoreDetails.js +1 -1
- package/BaseFeatureWidget/SequenceFeatureDetails/SequenceContents.d.ts +1 -1
- package/BaseFeatureWidget/SequenceFeatureDetails/SequenceContents.js +31 -33
- package/BaseFeatureWidget/SequenceFeatureDetails/SequenceFeatureDetails.js +15 -7
- package/BaseFeatureWidget/SequenceFeatureDetails/consts.d.ts +6 -0
- package/BaseFeatureWidget/SequenceFeatureDetails/consts.js +9 -0
- package/BaseFeatureWidget/SequenceFeatureDetails/dialogs/SequenceDialog.d.ts +1 -1
- package/BaseFeatureWidget/SequenceFeatureDetails/dialogs/SequenceDialog.js +17 -7
- package/BaseFeatureWidget/SequenceFeatureDetails/model.d.ts +6 -3
- package/BaseFeatureWidget/SequenceFeatureDetails/model.js +1 -1
- package/BaseFeatureWidget/SequenceFeatureDetails/seqtypes/CDNASequence.js +4 -3
- package/BaseFeatureWidget/SequenceFeatureDetails/seqtypes/CDSSequence.js +2 -1
- package/BaseFeatureWidget/SequenceFeatureDetails/seqtypes/GenomicSequence.js +4 -3
- package/BaseFeatureWidget/SequenceFeatureDetails/seqtypes/ProteinSequence.js +11 -10
- package/BaseFeatureWidget/SequenceFeatureDetails/useSequenceData.d.ts +13 -0
- package/BaseFeatureWidget/SequenceFeatureDetails/useSequenceData.js +67 -0
- package/BaseFeatureWidget/SequenceFeatureDetails/util.d.ts +2 -9
- package/BaseFeatureWidget/SequenceFeatureDetails/util.js +36 -39
- package/BaseFeatureWidget/stateModelFactory.d.ts +4 -4
- package/BaseFeatureWidget/util.d.ts +5 -2
- package/BaseFeatureWidget/util.js +41 -12
- package/PluginLoader.js +1 -1
- package/assemblyManager/assembly.d.ts +1 -0
- package/assemblyManager/assembly.js +3 -0
- package/assemblyManager/assemblyManager.d.ts +8 -0
- package/assemblyManager/assemblyManager.js +4 -0
- package/configuration/configurationSchema.js +1 -1
- package/data_adapters/BaseAdapter/BaseFeatureDataAdapter.js +2 -2
- package/package.json +3 -4
- package/tsconfig.build.tsbuildinfo +1 -1
- package/ui/BaseTooltip.d.ts +1 -1
- package/ui/CascadingMenu.js +33 -4
- package/ui/ConfirmDialog.d.ts +10 -0
- package/ui/ConfirmDialog.js +18 -0
- package/ui/EditableTypography.js +1 -8
- package/ui/LoadingEllipses.d.ts +2 -1
- package/ui/LoadingEllipses.js +1 -1
- package/ui/Menu.d.ts +1 -0
- package/ui/Menu.js +2 -2
- package/ui/SanitizedHTML.js +13 -10
- package/util/aborting.js +1 -1
- package/util/cluster.js +17 -11
- package/util/color/index.d.ts +1 -0
- package/util/color/index.js +8 -0
- package/util/compositeMap.d.ts +2 -2
- package/util/convertCodingSequenceToPeptides.d.ts +6 -0
- package/util/convertCodingSequenceToPeptides.js +12 -0
- package/util/fetchSeq.d.ts +8 -0
- package/util/fetchSeq.js +27 -0
- package/util/flatbush/index.d.ts +25 -0
- package/util/flatbush/index.js +362 -0
- package/util/flatqueue/index.d.ts +11 -0
- package/util/flatqueue/index.js +66 -0
- package/util/index.js +18 -12
- package/util/jexl.js +1 -0
- package/util/layouts/PrecomputedLayout.d.ts +3 -1
- package/util/layouts/PrecomputedLayout.js +23 -14
- package/util/tracks.js +1 -1
- package/util/types/index.d.ts +2 -2
- package/util/useFeatureSequence.d.ts +19 -0
- package/util/useFeatureSequence.js +90 -0
- package/BaseFeatureWidget/SequenceFeatureDetails/hooks.d.ts +0 -10
- package/BaseFeatureWidget/SequenceFeatureDetails/hooks.js +0 -65
|
@@ -26,5 +26,5 @@ function CoreDetails(props) {
|
|
|
26
26
|
return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(SimpleField_1.default, { name: "Position", value: (0, jsx_runtime_1.jsx)(Position_1.default, { ...props, feature: formattedFeat }) }), Object.entries(coreRenderedDetails)
|
|
27
27
|
.map(([key, name]) => [name, displayedDetails[key]])
|
|
28
28
|
.filter(([, value]) => value != null)
|
|
29
|
-
.map(([name, value]) => ((0, jsx_runtime_1.jsx)(SimpleField_1.default, { name: name, value: value }, name)))] }));
|
|
29
|
+
.map(([name, value]) => ((0, jsx_runtime_1.jsx)(SimpleField_1.default, { name: name, value: Array.isArray(value) ? value.join(', ') : value }, name)))] }));
|
|
30
30
|
}
|
|
@@ -6,5 +6,5 @@ declare const SequenceContents: ({ mode, feature, sequence, model, }: {
|
|
|
6
6
|
feature: SimpleFeatureSerialized;
|
|
7
7
|
sequence: SeqState;
|
|
8
8
|
model: SequenceFeatureDetailsModel;
|
|
9
|
-
}) => import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
}) => import("react/jsx-runtime").JSX.Element | null;
|
|
10
10
|
export default SequenceContents;
|
|
@@ -6,43 +6,41 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
7
7
|
const mobx_react_1 = require("mobx-react");
|
|
8
8
|
const util_1 = require("../../util");
|
|
9
|
-
const util_2 = require("../util");
|
|
10
9
|
const CDNASequence_1 = __importDefault(require("./seqtypes/CDNASequence"));
|
|
11
10
|
const CDSSequence_1 = __importDefault(require("./seqtypes/CDSSequence"));
|
|
12
11
|
const GenomicSequence_1 = __importDefault(require("./seqtypes/GenomicSequence"));
|
|
13
12
|
const ProteinSequence_1 = __importDefault(require("./seqtypes/ProteinSequence"));
|
|
14
|
-
const
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
13
|
+
const useSequenceData_1 = require("./useSequenceData");
|
|
14
|
+
function RenderedSequenceComponent({ mode, feature, model, sequenceData, }) {
|
|
15
|
+
const { seq, upstream, downstream, cds, exons, utr } = sequenceData;
|
|
16
|
+
switch (mode) {
|
|
17
|
+
case 'genomic':
|
|
18
|
+
return (0, jsx_runtime_1.jsx)(GenomicSequence_1.default, { feature: feature, model: model, sequence: seq });
|
|
19
|
+
case 'genomic_sequence_updownstream':
|
|
20
|
+
return ((0, jsx_runtime_1.jsx)(GenomicSequence_1.default, { model: model, feature: feature, sequence: seq, upstream: upstream, downstream: downstream }));
|
|
21
|
+
case 'cds':
|
|
22
|
+
return (0, jsx_runtime_1.jsx)(CDSSequence_1.default, { model: model, cds: cds, sequence: seq });
|
|
23
|
+
case 'cdna':
|
|
24
|
+
return ((0, jsx_runtime_1.jsx)(CDNASequence_1.default, { model: model, exons: exons, feature: feature, cds: cds, utr: utr, sequence: seq }));
|
|
25
|
+
case 'protein':
|
|
26
|
+
return ((0, jsx_runtime_1.jsx)(ProteinSequence_1.default, { model: model, cds: cds, codonTable: (0, util_1.generateCodonTable)(util_1.defaultCodonTable), sequence: seq }));
|
|
27
|
+
case 'gene':
|
|
28
|
+
return ((0, jsx_runtime_1.jsx)(CDNASequence_1.default, { model: model, exons: exons, feature: feature, cds: cds, utr: utr, sequence: seq, includeIntrons: true }));
|
|
29
|
+
case 'gene_collapsed_intron':
|
|
30
|
+
return ((0, jsx_runtime_1.jsx)(CDNASequence_1.default, { model: model, exons: exons, feature: feature, cds: cds, sequence: seq, utr: utr, includeIntrons: true, collapseIntron: true }));
|
|
31
|
+
case 'gene_updownstream':
|
|
32
|
+
return ((0, jsx_runtime_1.jsx)(CDNASequence_1.default, { model: model, exons: exons, feature: feature, cds: cds, sequence: seq, utr: utr, upstream: upstream, downstream: downstream, includeIntrons: true }));
|
|
33
|
+
case 'gene_updownstream_collapsed_intron':
|
|
34
|
+
return ((0, jsx_runtime_1.jsx)(CDNASequence_1.default, { model: model, exons: exons, feature: feature, cds: cds, sequence: seq, utr: utr, upstream: upstream, downstream: downstream, includeIntrons: true, collapseIntron: true }));
|
|
35
|
+
default:
|
|
36
|
+
return (0, jsx_runtime_1.jsx)("div", { children: "Unknown type" });
|
|
34
37
|
}
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
cds = (0, util_2.revlist)(cds, seq.length);
|
|
43
|
-
exons = (0, util_2.revlist)(exons, seq.length);
|
|
44
|
-
utr = (0, util_2.revlist)(utr, seq.length);
|
|
45
|
-
}
|
|
46
|
-
return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: mode === 'genomic' ? ((0, jsx_runtime_1.jsx)(GenomicSequence_1.default, { feature: feature, model: model, sequence: seq })) : mode === 'genomic_sequence_updownstream' ? ((0, jsx_runtime_1.jsx)(GenomicSequence_1.default, { model: model, feature: feature, sequence: seq, upstream: upstream, downstream: downstream })) : mode === 'cds' ? ((0, jsx_runtime_1.jsx)(CDSSequence_1.default, { model: model, cds: cds, sequence: seq })) : mode === 'cdna' ? ((0, jsx_runtime_1.jsx)(CDNASequence_1.default, { model: model, exons: exons, feature: feature, cds: cds, utr: utr, sequence: seq })) : mode === 'protein' ? ((0, jsx_runtime_1.jsx)(ProteinSequence_1.default, { model: model, cds: cds, codonTable: (0, util_1.generateCodonTable)(util_1.defaultCodonTable), sequence: seq })) : mode === 'gene' ? ((0, jsx_runtime_1.jsx)(CDNASequence_1.default, { model: model, exons: exons, feature: feature, cds: cds, utr: utr, sequence: seq, includeIntrons: true })) : mode === 'gene_collapsed_intron' ? ((0, jsx_runtime_1.jsx)(CDNASequence_1.default, { model: model, exons: exons, feature: feature, cds: cds, sequence: seq, utr: utr, includeIntrons: true, collapseIntron: true })) : mode === 'gene_updownstream' ? ((0, jsx_runtime_1.jsx)(CDNASequence_1.default, { model: model, exons: exons, feature: feature, cds: cds, sequence: seq, utr: utr, upstream: upstream, downstream: downstream, includeIntrons: true })) : mode === 'gene_updownstream_collapsed_intron' ? ((0, jsx_runtime_1.jsx)(CDNASequence_1.default, { model: model, exons: exons, feature: feature, cds: cds, sequence: seq, utr: utr, upstream: upstream, downstream: downstream, includeIntrons: true, collapseIntron: true })) : ((0, jsx_runtime_1.jsx)("div", { children: "Unknown type" })) }));
|
|
38
|
+
}
|
|
39
|
+
const SequenceContents = (0, mobx_react_1.observer)(function ({ mode, feature, sequence, model, }) {
|
|
40
|
+
const sequenceData = (0, useSequenceData_1.useSequenceData)({
|
|
41
|
+
feature,
|
|
42
|
+
sequence,
|
|
43
|
+
});
|
|
44
|
+
return sequenceData ? ((0, jsx_runtime_1.jsx)(RenderedSequenceComponent, { mode: mode, feature: feature, model: model, sequenceData: sequenceData })) : null;
|
|
47
45
|
});
|
|
48
46
|
exports.default = SequenceContents;
|
|
@@ -40,19 +40,29 @@ const jsx_runtime_1 = require("react/jsx-runtime");
|
|
|
40
40
|
const react_1 = require("react");
|
|
41
41
|
const material_1 = require("@mui/material");
|
|
42
42
|
const mobx_react_1 = require("mobx-react");
|
|
43
|
-
const hooks_1 = require("./hooks");
|
|
44
43
|
const ui_1 = require("../../ui");
|
|
45
44
|
const SequenceFeatureMenu_1 = __importDefault(require("./dialogs/SequenceFeatureMenu"));
|
|
46
45
|
const SequenceTypeSelector_1 = __importDefault(require("./dialogs/SequenceTypeSelector"));
|
|
46
|
+
const util_1 = require("../../util");
|
|
47
|
+
const useFeatureSequence_1 = require("../../util/useFeatureSequence");
|
|
47
48
|
const SequencePanel = (0, react_1.lazy)(() => Promise.resolve().then(() => __importStar(require('./SequencePanel'))));
|
|
48
49
|
const SequenceDialog = (0, react_1.lazy)(() => Promise.resolve().then(() => __importStar(require('./dialogs/SequenceDialog'))));
|
|
49
50
|
const SequenceFeatureDetails = (0, mobx_react_1.observer)(function ({ model, feature, }) {
|
|
51
|
+
var _a, _b;
|
|
50
52
|
const { sequenceFeatureDetails } = model;
|
|
51
53
|
const { upDownBp } = sequenceFeatureDetails;
|
|
52
54
|
const seqPanelRef = (0, react_1.useRef)(null);
|
|
53
55
|
const [openInDialog, setOpenInDialog] = (0, react_1.useState)(false);
|
|
54
|
-
const [
|
|
55
|
-
const
|
|
56
|
+
const [forceLoad, setForceLoad] = (0, react_1.useState)(false);
|
|
57
|
+
const session = (0, util_1.getSession)(model);
|
|
58
|
+
const assemblyName = (_b = (_a = model.view) === null || _a === void 0 ? void 0 : _a.assemblyNames) === null || _b === void 0 ? void 0 : _b[0];
|
|
59
|
+
const { sequence, error } = (0, useFeatureSequence_1.useFeatureSequence)({
|
|
60
|
+
assemblyName,
|
|
61
|
+
session,
|
|
62
|
+
feature: new util_1.SimpleFeature(feature),
|
|
63
|
+
upDownBp,
|
|
64
|
+
forceLoad,
|
|
65
|
+
});
|
|
56
66
|
(0, react_1.useEffect)(() => {
|
|
57
67
|
sequenceFeatureDetails.setFeature(feature);
|
|
58
68
|
}, [sequenceFeatureDetails, feature]);
|
|
@@ -60,15 +70,13 @@ const SequenceFeatureDetails = (0, mobx_react_1.observer)(function ({ model, fea
|
|
|
60
70
|
{
|
|
61
71
|
label: 'Open in dialog',
|
|
62
72
|
onClick: () => {
|
|
63
|
-
|
|
64
|
-
setOpenInDialog(true);
|
|
65
|
-
}, 1);
|
|
73
|
+
setOpenInDialog(true);
|
|
66
74
|
},
|
|
67
75
|
},
|
|
68
76
|
] })] }), openInDialog ? ((0, jsx_runtime_1.jsxs)("div", { children: ["Open in dialog...", (0, jsx_runtime_1.jsx)(react_1.Suspense, { fallback: (0, jsx_runtime_1.jsx)(ui_1.LoadingEllipses, {}), children: (0, jsx_runtime_1.jsx)(SequenceDialog, { model: model, feature: feature, handleClose: () => {
|
|
69
77
|
setOpenInDialog(false);
|
|
70
78
|
} }) })] })) : ((0, jsx_runtime_1.jsxs)("div", { children: [feature.type === 'gene' ? ((0, jsx_runtime_1.jsx)(material_1.Typography, { children: "Note: inspect subfeature sequences for protein/CDS computations" })) : null, error ? ((0, jsx_runtime_1.jsx)(ui_1.ErrorMessage, { error: error })) : !sequence ? ((0, jsx_runtime_1.jsx)(ui_1.LoadingEllipses, {})) : 'error' in sequence ? ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(material_1.Typography, { color: "error", children: sequence.error }), (0, jsx_runtime_1.jsx)(material_1.Button, { variant: "contained", color: "inherit", onClick: () => {
|
|
71
|
-
|
|
79
|
+
setForceLoad(true);
|
|
72
80
|
}, children: "Force load" })] })) : ((0, jsx_runtime_1.jsx)(react_1.Suspense, { fallback: (0, jsx_runtime_1.jsx)(ui_1.LoadingEllipses, {}), children: (0, jsx_runtime_1.jsx)(SequencePanel, { ref: seqPanelRef, feature: feature, sequence: sequence, model: sequenceFeatureDetails }) }))] }))] }));
|
|
73
81
|
});
|
|
74
82
|
exports.default = SequenceFeatureDetails;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare const intronColor: undefined;
|
|
2
|
+
export declare const utrColor = "rgb(200,240,240)";
|
|
3
|
+
export declare const proteinColor = "rgb(220,160,220)";
|
|
4
|
+
export declare const cdsColor = "rgb(220,220,180)";
|
|
5
|
+
export declare const updownstreamColor = "rgba(250,200,200)";
|
|
6
|
+
export declare const genomeColor = "rgb(200,280,200)";
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.genomeColor = exports.updownstreamColor = exports.cdsColor = exports.proteinColor = exports.utrColor = exports.intronColor = void 0;
|
|
4
|
+
exports.intronColor = undefined;
|
|
5
|
+
exports.utrColor = 'rgb(200,240,240)';
|
|
6
|
+
exports.proteinColor = 'rgb(220,160,220)';
|
|
7
|
+
exports.cdsColor = 'rgb(220,220,180)';
|
|
8
|
+
exports.updownstreamColor = 'rgba(250,200,200)';
|
|
9
|
+
exports.genomeColor = 'rgb(200,280,200)';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type SimpleFeatureSerialized } from '../../../util';
|
|
2
2
|
import type { BaseFeatureWidgetModel } from '../../stateModelFactory';
|
|
3
3
|
declare const SequenceDialog: ({ handleClose, model, feature, }: {
|
|
4
4
|
handleClose: () => void;
|
|
@@ -9,10 +9,11 @@ const ui_1 = require("@jbrowse/core/ui");
|
|
|
9
9
|
const material_1 = require("@mui/material");
|
|
10
10
|
const mobx_react_1 = require("mobx-react");
|
|
11
11
|
const mui_1 = require("tss-react/mui");
|
|
12
|
-
const SequencePanel_1 = __importDefault(require("../SequencePanel"));
|
|
13
|
-
const hooks_1 = require("../hooks");
|
|
14
12
|
const SequenceFeatureMenu_1 = __importDefault(require("./SequenceFeatureMenu"));
|
|
15
13
|
const SequenceTypeSelector_1 = __importDefault(require("./SequenceTypeSelector"));
|
|
14
|
+
const util_1 = require("../../../util");
|
|
15
|
+
const useFeatureSequence_1 = require("../../../util/useFeatureSequence");
|
|
16
|
+
const SequencePanel_1 = __importDefault(require("../SequencePanel"));
|
|
16
17
|
const useStyles = (0, mui_1.makeStyles)()({
|
|
17
18
|
dialogContent: {
|
|
18
19
|
width: '80em',
|
|
@@ -23,16 +24,25 @@ const useStyles = (0, mui_1.makeStyles)()({
|
|
|
23
24
|
},
|
|
24
25
|
});
|
|
25
26
|
const SequenceDialog = (0, mobx_react_1.observer)(function ({ handleClose, model, feature, }) {
|
|
27
|
+
var _a, _b;
|
|
26
28
|
const { sequenceFeatureDetails } = model;
|
|
27
29
|
const { upDownBp } = sequenceFeatureDetails;
|
|
28
30
|
const { classes } = useStyles();
|
|
29
31
|
const seqPanelRef = (0, react_1.useRef)(null);
|
|
30
|
-
const [
|
|
31
|
-
const
|
|
32
|
-
|
|
32
|
+
const [forceLoad, setForceLoad] = (0, react_1.useState)(false);
|
|
33
|
+
const session = (0, util_1.getSession)(model);
|
|
34
|
+
const assemblyName = (_b = (_a = model.view) === null || _a === void 0 ? void 0 : _a.assemblyNames) === null || _b === void 0 ? void 0 : _b[0];
|
|
35
|
+
const { sequence, error } = (0, useFeatureSequence_1.useFeatureSequence)({
|
|
36
|
+
assemblyName,
|
|
37
|
+
session,
|
|
38
|
+
feature: new util_1.SimpleFeature(feature),
|
|
39
|
+
upDownBp,
|
|
40
|
+
forceLoad,
|
|
41
|
+
});
|
|
42
|
+
return ((0, jsx_runtime_1.jsxs)(ui_1.Dialog, { maxWidth: "xl", open: true, title: "Sequence view", onClose: () => {
|
|
33
43
|
handleClose();
|
|
34
|
-
},
|
|
35
|
-
|
|
44
|
+
}, children: [(0, jsx_runtime_1.jsxs)(material_1.DialogContent, { className: classes.dialogContent, children: [(0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)(SequenceTypeSelector_1.default, { model: sequenceFeatureDetails }), (0, jsx_runtime_1.jsx)(SequenceFeatureMenu_1.default, { ref: seqPanelRef, model: sequenceFeatureDetails })] }), (0, jsx_runtime_1.jsxs)("div", { children: [feature.type === 'gene' ? ((0, jsx_runtime_1.jsx)(material_1.Typography, { children: "Note: inspect subfeature sequences for protein/CDS computations" })) : null, error ? ((0, jsx_runtime_1.jsx)(ui_1.ErrorMessage, { error: error })) : !sequence ? ((0, jsx_runtime_1.jsx)(ui_1.LoadingEllipses, {})) : 'error' in sequence ? ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(material_1.Typography, { color: "error", children: sequence.error }), (0, jsx_runtime_1.jsx)(material_1.Button, { variant: "contained", color: "inherit", onClick: () => {
|
|
45
|
+
setForceLoad(true);
|
|
36
46
|
}, children: "Force load" })] })) : ((0, jsx_runtime_1.jsx)(react_1.Suspense, { fallback: (0, jsx_runtime_1.jsx)(ui_1.LoadingEllipses, {}), children: (0, jsx_runtime_1.jsx)(SequencePanel_1.default, { ref: seqPanelRef, feature: feature, sequence: sequence, model: sequenceFeatureDetails }) }))] })] }), (0, jsx_runtime_1.jsx)(material_1.DialogActions, { children: (0, jsx_runtime_1.jsx)(material_1.Button, { onClick: () => {
|
|
37
47
|
handleClose();
|
|
38
48
|
}, variant: "contained", children: "Close" }) })] }));
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import type { SimpleFeatureSerialized } from '../../util';
|
|
2
2
|
import type { Instance } from 'mobx-state-tree';
|
|
3
|
+
type ShowCoordinatesMode = 'none' | 'relative' | 'genomic';
|
|
4
|
+
type SequenceDisplayMode = '' | 'gene' | 'gene_collapsed_intron' | 'gene_updownstream' | 'cdna' | 'cds' | 'genomic' | 'genomic_sequence_updownstream' | 'protein';
|
|
3
5
|
export declare function SequenceFeatureDetailsF(): import("mobx-state-tree").IModelType<{}, {
|
|
4
6
|
showCoordinatesSetting: string;
|
|
5
7
|
intronBp: number;
|
|
@@ -7,14 +9,14 @@ export declare function SequenceFeatureDetailsF(): import("mobx-state-tree").IMo
|
|
|
7
9
|
upperCaseCDS: boolean;
|
|
8
10
|
charactersPerRow: number;
|
|
9
11
|
feature: SimpleFeatureSerialized | undefined;
|
|
10
|
-
mode:
|
|
12
|
+
mode: SequenceDisplayMode;
|
|
11
13
|
} & {
|
|
12
14
|
setFeature(f: SimpleFeatureSerialized): void;
|
|
13
15
|
setUpDownBp(f: number): void;
|
|
14
16
|
setIntronBp(f: number): void;
|
|
15
17
|
setUpperCaseCDS(f: boolean): void;
|
|
16
|
-
setShowCoordinates(f:
|
|
17
|
-
setMode(mode:
|
|
18
|
+
setShowCoordinates(f: ShowCoordinatesMode): void;
|
|
19
|
+
setMode(mode: SequenceDisplayMode): void;
|
|
18
20
|
} & {
|
|
19
21
|
readonly showCoordinates: boolean;
|
|
20
22
|
readonly showGenomicCoordsOption: boolean;
|
|
@@ -26,3 +28,4 @@ export declare function SequenceFeatureDetailsF(): import("mobx-state-tree").IMo
|
|
|
26
28
|
}, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>;
|
|
27
29
|
export type SequenceFeatureDetailsStateModel = ReturnType<typeof SequenceFeatureDetailsF>;
|
|
28
30
|
export type SequenceFeatureDetailsModel = Instance<SequenceFeatureDetailsStateModel>;
|
|
31
|
+
export {};
|
|
@@ -55,7 +55,7 @@ function SequenceFeatureDetailsF() {
|
|
|
55
55
|
},
|
|
56
56
|
get hasCDS() {
|
|
57
57
|
var _a, _b;
|
|
58
|
-
return (_b = (_a = self.feature) === null || _a === void 0 ? void 0 : _a.subfeatures) === null || _b === void 0 ? void 0 : _b.some(sub => sub.type === '
|
|
58
|
+
return (_b = (_a = self.feature) === null || _a === void 0 ? void 0 : _a.subfeatures) === null || _b === void 0 ? void 0 : _b.some(sub => { var _a; return ((_a = sub.type) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === 'cds'; });
|
|
59
59
|
},
|
|
60
60
|
get hasExon() {
|
|
61
61
|
var _a, _b;
|
|
@@ -5,6 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
7
7
|
const mobx_react_1 = require("mobx-react");
|
|
8
|
+
const consts_1 = require("../consts");
|
|
8
9
|
const util_1 = require("../util");
|
|
9
10
|
const SequenceDisplay_1 = __importDefault(require("./SequenceDisplay"));
|
|
10
11
|
const CDNASequence = (0, mobx_react_1.observer)(function ({ utr, cds, exons, sequence, upstream, downstream, feature, includeIntrons, collapseIntron, model, }) {
|
|
@@ -31,7 +32,7 @@ const CDNASequence = (0, mobx_react_1.observer)(function ({ utr, cds, exons, seq
|
|
|
31
32
|
charactersPerRow,
|
|
32
33
|
showCoordinates,
|
|
33
34
|
});
|
|
34
|
-
upstreamChunk = ((0, jsx_runtime_1.jsx)(SequenceDisplay_1.default, { model: model, color:
|
|
35
|
+
upstreamChunk = ((0, jsx_runtime_1.jsx)(SequenceDisplay_1.default, { model: model, color: consts_1.updownstreamColor, strand: mult, start: currStart, coordStart: coordStart, chunks: segments }));
|
|
35
36
|
currRemainder = remainder;
|
|
36
37
|
currStart = currStart + upstream.length * mult;
|
|
37
38
|
coordStart = coordStart + upstream.length * mult;
|
|
@@ -51,7 +52,7 @@ const CDNASequence = (0, mobx_react_1.observer)(function ({ utr, cds, exons, seq
|
|
|
51
52
|
currRemainder,
|
|
52
53
|
showCoordinates,
|
|
53
54
|
});
|
|
54
|
-
middleChunks.push((0, jsx_runtime_1.jsx)(SequenceDisplay_1.default, { model: model, color: chunk.type === 'CDS' ?
|
|
55
|
+
middleChunks.push((0, jsx_runtime_1.jsx)(SequenceDisplay_1.default, { model: model, color: chunk.type === 'CDS' ? consts_1.cdsColor : consts_1.utrColor, strand: mult, start: currStart, coordStart: coordStart, chunks: segments }, `${JSON.stringify(chunk)}-mid`));
|
|
55
56
|
currRemainder = remainder;
|
|
56
57
|
currStart = currStart + s.length * mult;
|
|
57
58
|
coordStart = coordStart + s.length * mult;
|
|
@@ -81,7 +82,7 @@ const CDNASequence = (0, mobx_react_1.observer)(function ({ utr, cds, exons, seq
|
|
|
81
82
|
currRemainder,
|
|
82
83
|
showCoordinates,
|
|
83
84
|
});
|
|
84
|
-
downstreamChunk = ((0, jsx_runtime_1.jsx)(SequenceDisplay_1.default, { start: currStart, model: model, strand: mult, chunks: segments, coordStart: coordStart, color:
|
|
85
|
+
downstreamChunk = ((0, jsx_runtime_1.jsx)(SequenceDisplay_1.default, { start: currStart, model: model, strand: mult, chunks: segments, coordStart: coordStart, color: consts_1.updownstreamColor }));
|
|
85
86
|
}
|
|
86
87
|
return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [upstreamChunk, middleChunks, downstreamChunk] }));
|
|
87
88
|
});
|
|
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
7
7
|
const mobx_react_1 = require("mobx-react");
|
|
8
8
|
const util_1 = require("../../util");
|
|
9
|
+
const consts_1 = require("../consts");
|
|
9
10
|
const util_2 = require("../util");
|
|
10
11
|
const SequenceDisplay_1 = __importDefault(require("./SequenceDisplay"));
|
|
11
12
|
const CDSSequence = (0, mobx_react_1.observer)(function ({ cds, sequence, model, }) {
|
|
@@ -15,6 +16,6 @@ const CDSSequence = (0, mobx_react_1.observer)(function ({ cds, sequence, model,
|
|
|
15
16
|
charactersPerRow,
|
|
16
17
|
showCoordinates,
|
|
17
18
|
});
|
|
18
|
-
return ((0, jsx_runtime_1.jsx)(SequenceDisplay_1.default, { model: model, color:
|
|
19
|
+
return ((0, jsx_runtime_1.jsx)(SequenceDisplay_1.default, { model: model, color: consts_1.cdsColor, chunks: segments, start: 0 }));
|
|
19
20
|
});
|
|
20
21
|
exports.default = CDSSequence;
|
|
@@ -5,6 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
7
7
|
const mobx_react_1 = require("mobx-react");
|
|
8
|
+
const consts_1 = require("../consts");
|
|
8
9
|
const util_1 = require("../util");
|
|
9
10
|
const SequenceDisplay_1 = __importDefault(require("./SequenceDisplay"));
|
|
10
11
|
const GenomicSequence = (0, mobx_react_1.observer)(function ({ sequence, upstream, feature, downstream, model, }) {
|
|
@@ -26,7 +27,7 @@ const GenomicSequence = (0, mobx_react_1.observer)(function ({ sequence, upstrea
|
|
|
26
27
|
charactersPerRow,
|
|
27
28
|
showCoordinates,
|
|
28
29
|
});
|
|
29
|
-
upstreamChunk = ((0, jsx_runtime_1.jsx)(SequenceDisplay_1.default, { model: model, color:
|
|
30
|
+
upstreamChunk = ((0, jsx_runtime_1.jsx)(SequenceDisplay_1.default, { model: model, color: consts_1.updownstreamColor, start: currStart, coordStart: coordStart, chunks: segments }));
|
|
30
31
|
currRemainder = remainder;
|
|
31
32
|
currStart = currStart + upstream.length * mult;
|
|
32
33
|
coordStart = coordStart + upstream.length * mult;
|
|
@@ -37,7 +38,7 @@ const GenomicSequence = (0, mobx_react_1.observer)(function ({ sequence, upstrea
|
|
|
37
38
|
showCoordinates,
|
|
38
39
|
currRemainder,
|
|
39
40
|
});
|
|
40
|
-
const middleChunk = ((0, jsx_runtime_1.jsx)(SequenceDisplay_1.default, { model: model, color:
|
|
41
|
+
const middleChunk = ((0, jsx_runtime_1.jsx)(SequenceDisplay_1.default, { model: model, color: consts_1.genomeColor, start: currStart, coordStart: coordStart, chunks: segments }));
|
|
41
42
|
currRemainder = remainder;
|
|
42
43
|
currStart += sequence.length * mult;
|
|
43
44
|
coordStart = coordStart + sequence.length * mult;
|
|
@@ -49,7 +50,7 @@ const GenomicSequence = (0, mobx_react_1.observer)(function ({ sequence, upstrea
|
|
|
49
50
|
currRemainder,
|
|
50
51
|
showCoordinates,
|
|
51
52
|
});
|
|
52
|
-
downstreamChunk = ((0, jsx_runtime_1.jsx)(SequenceDisplay_1.default, { start: currStart, model: model, chunks: segments, coordStart: coordStart, color:
|
|
53
|
+
downstreamChunk = ((0, jsx_runtime_1.jsx)(SequenceDisplay_1.default, { start: currStart, model: model, chunks: segments, coordStart: coordStart, color: consts_1.updownstreamColor }));
|
|
53
54
|
}
|
|
54
55
|
return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [upstreamChunk, middleChunk, downstreamChunk] }));
|
|
55
56
|
});
|
|
@@ -5,21 +5,22 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
7
7
|
const mobx_react_1 = require("mobx-react");
|
|
8
|
-
const
|
|
9
|
-
const
|
|
8
|
+
const consts_1 = require("../consts");
|
|
9
|
+
const util_1 = require("../util");
|
|
10
10
|
const SequenceDisplay_1 = __importDefault(require("./SequenceDisplay"));
|
|
11
|
+
const convertCodingSequenceToPeptides_1 = require("../../../util/convertCodingSequenceToPeptides");
|
|
11
12
|
const ProteinSequence = (0, mobx_react_1.observer)(function ({ cds, sequence, codonTable, model, }) {
|
|
12
13
|
const { charactersPerRow, showCoordinates } = model;
|
|
13
|
-
const str = (0,
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
}
|
|
18
|
-
const { segments } = (0,
|
|
19
|
-
str
|
|
14
|
+
const str = (0, convertCodingSequenceToPeptides_1.convertCodingSequenceToPeptides)({
|
|
15
|
+
cds,
|
|
16
|
+
sequence,
|
|
17
|
+
codonTable,
|
|
18
|
+
});
|
|
19
|
+
const { segments } = (0, util_1.splitString)({
|
|
20
|
+
str,
|
|
20
21
|
charactersPerRow,
|
|
21
22
|
showCoordinates,
|
|
22
23
|
});
|
|
23
|
-
return ((0, jsx_runtime_1.jsx)(SequenceDisplay_1.default, { model: model, color:
|
|
24
|
+
return ((0, jsx_runtime_1.jsx)(SequenceDisplay_1.default, { model: model, color: consts_1.proteinColor, chunks: segments, start: 0 }));
|
|
24
25
|
});
|
|
25
26
|
exports.default = ProteinSequence;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { SimpleFeatureSerialized } from '../../util';
|
|
2
|
+
import type { ErrorState, SeqState } from '../util';
|
|
3
|
+
export declare function useSequenceData({ feature, sequence, }: {
|
|
4
|
+
feature: SimpleFeatureSerialized;
|
|
5
|
+
sequence?: SeqState | ErrorState;
|
|
6
|
+
}): {
|
|
7
|
+
seq: string;
|
|
8
|
+
upstream: string | undefined;
|
|
9
|
+
downstream: string | undefined;
|
|
10
|
+
cds: any[];
|
|
11
|
+
exons: any[];
|
|
12
|
+
utr: any[];
|
|
13
|
+
} | undefined;
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.useSequenceData = useSequenceData;
|
|
4
|
+
const util_1 = require("../../util");
|
|
5
|
+
const util_2 = require("../util");
|
|
6
|
+
function prepareSubfeatures(feature) {
|
|
7
|
+
const { start, subfeatures } = feature;
|
|
8
|
+
return ((subfeatures === null || subfeatures === void 0 ? void 0 : subfeatures.sort((a, b) => a.start - b.start).map(sub => ({
|
|
9
|
+
...sub,
|
|
10
|
+
start: sub.start - start,
|
|
11
|
+
end: sub.end - start,
|
|
12
|
+
}))) || []);
|
|
13
|
+
}
|
|
14
|
+
function processFeatureData(children, feature) {
|
|
15
|
+
const cds = (0, util_2.filterSuccessiveElementsWithSameStartAndEndCoord)(children.filter(sub => { var _a; return ((_a = sub.type) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === 'cds'; }));
|
|
16
|
+
const exons = (0, util_2.filterSuccessiveElementsWithSameStartAndEndCoord)(children.filter(sub => sub.type === 'exon'));
|
|
17
|
+
let utr = (0, util_2.filterSuccessiveElementsWithSameStartAndEndCoord)(children.filter(sub => { var _a; return (_a = sub.type) === null || _a === void 0 ? void 0 : _a.match(/utr/i); }));
|
|
18
|
+
if (!utr.length && cds.length && exons.length) {
|
|
19
|
+
utr = (0, util_2.calculateUTRs)(cds, exons);
|
|
20
|
+
}
|
|
21
|
+
else if (!utr.length && cds.length && !exons.length) {
|
|
22
|
+
utr = (0, util_2.calculateUTRs2)(cds, {
|
|
23
|
+
start: 0,
|
|
24
|
+
end: feature.end - feature.start,
|
|
25
|
+
type: 'gene',
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
return {
|
|
29
|
+
cds,
|
|
30
|
+
exons,
|
|
31
|
+
utr,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
function handleReverseStrand(sequence, cds, exons, utr) {
|
|
35
|
+
const { seq = '', upstream = '', downstream = '' } = sequence;
|
|
36
|
+
return {
|
|
37
|
+
sequence: {
|
|
38
|
+
seq: (0, util_1.revcom)(seq),
|
|
39
|
+
upstream: downstream ? (0, util_1.revcom)(downstream) : '',
|
|
40
|
+
downstream: upstream ? (0, util_1.revcom)(upstream) : '',
|
|
41
|
+
},
|
|
42
|
+
cds: (0, util_2.revlist)(cds, seq.length),
|
|
43
|
+
exons: (0, util_2.revlist)(exons, seq.length),
|
|
44
|
+
utr: (0, util_2.revlist)(utr, seq.length),
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
function useSequenceData({ feature, sequence, }) {
|
|
48
|
+
const children = prepareSubfeatures(feature);
|
|
49
|
+
const { cds, exons, utr } = processFeatureData(children, feature);
|
|
50
|
+
if (!sequence || 'error' in sequence) {
|
|
51
|
+
return undefined;
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
const { sequence: adjustedSequence, cds: adjustedCds, exons: adjustedExons, utr: adjustedUtr, } = feature.strand === -1
|
|
55
|
+
? handleReverseStrand(sequence, cds, exons, utr)
|
|
56
|
+
: { sequence, cds, exons, utr };
|
|
57
|
+
const { seq, upstream, downstream } = adjustedSequence;
|
|
58
|
+
return {
|
|
59
|
+
seq,
|
|
60
|
+
upstream,
|
|
61
|
+
downstream,
|
|
62
|
+
cds: adjustedCds,
|
|
63
|
+
exons: adjustedExons,
|
|
64
|
+
utr: adjustedUtr,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
}
|
|
@@ -1,16 +1,9 @@
|
|
|
1
|
-
export declare
|
|
2
|
-
export declare const utrColor = "rgb(200,240,240)";
|
|
3
|
-
export declare const proteinColor = "rgb(220,160,220)";
|
|
4
|
-
export declare const cdsColor = "rgb(220,220,180)";
|
|
5
|
-
export declare const updownstreamColor = "rgba(250,200,200)";
|
|
6
|
-
export declare const genomeColor = "rgb(200,280,200)";
|
|
7
|
-
export declare function splitString({ str, charactersPerRow, showCoordinates, currRemainder, splitSize, }: {
|
|
1
|
+
export declare function splitString({ str, charactersPerRow, showCoordinates, currRemainder, spacingInterval, }: {
|
|
8
2
|
str: string;
|
|
9
3
|
charactersPerRow: number;
|
|
10
4
|
showCoordinates: boolean;
|
|
11
5
|
currRemainder?: number;
|
|
12
|
-
|
|
13
|
-
splitSize?: number;
|
|
6
|
+
spacingInterval?: number;
|
|
14
7
|
}): {
|
|
15
8
|
segments: any[];
|
|
16
9
|
remainder: number;
|
|
@@ -1,49 +1,46 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.genomeColor = exports.updownstreamColor = exports.cdsColor = exports.proteinColor = exports.utrColor = exports.intronColor = void 0;
|
|
4
3
|
exports.splitString = splitString;
|
|
5
|
-
|
|
6
|
-
exports.utrColor = 'rgb(200,240,240)';
|
|
7
|
-
exports.proteinColor = 'rgb(220,160,220)';
|
|
8
|
-
exports.cdsColor = 'rgb(220,220,180)';
|
|
9
|
-
exports.updownstreamColor = 'rgba(250,200,200)';
|
|
10
|
-
exports.genomeColor = 'rgb(200,280,200)';
|
|
11
|
-
function splitString({ str, charactersPerRow, showCoordinates, currRemainder = 0, splitSize = 10, }) {
|
|
12
|
-
var _a;
|
|
4
|
+
function splitString({ str, charactersPerRow, showCoordinates, currRemainder = 0, spacingInterval = 10, }) {
|
|
13
5
|
const numChunks = Math.ceil(str.length / charactersPerRow);
|
|
14
|
-
const
|
|
15
|
-
let
|
|
16
|
-
let
|
|
17
|
-
let
|
|
18
|
-
for (;
|
|
19
|
-
const
|
|
20
|
-
const
|
|
21
|
-
if (!
|
|
6
|
+
const segments = new Array(numChunks);
|
|
7
|
+
let positionCounter = currRemainder % spacingInterval;
|
|
8
|
+
let chunkIndex = 0;
|
|
9
|
+
let stringOffset = 0;
|
|
10
|
+
for (; chunkIndex < numChunks + 1; ++chunkIndex) {
|
|
11
|
+
const chunkSize = chunkIndex === 0 ? charactersPerRow - currRemainder : charactersPerRow;
|
|
12
|
+
const currentChunk = str.slice(stringOffset, stringOffset + chunkSize);
|
|
13
|
+
if (!currentChunk) {
|
|
22
14
|
break;
|
|
23
15
|
}
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
j = 0;
|
|
30
|
-
}
|
|
31
|
-
res += r[i];
|
|
32
|
-
}
|
|
33
|
-
if (res) {
|
|
34
|
-
chunks[iter] = res;
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
else {
|
|
38
|
-
chunks[iter] = r;
|
|
39
|
-
}
|
|
40
|
-
splitStart = 0;
|
|
41
|
-
offset += inc;
|
|
16
|
+
segments[chunkIndex] = showCoordinates
|
|
17
|
+
? formatWithCoordinateSpacing(currentChunk, positionCounter, spacingInterval)
|
|
18
|
+
: currentChunk;
|
|
19
|
+
positionCounter = 0;
|
|
20
|
+
stringOffset += chunkSize;
|
|
42
21
|
}
|
|
43
22
|
return {
|
|
44
|
-
segments
|
|
45
|
-
remainder: (
|
|
46
|
-
(iter < 2 ? currRemainder : 0)) %
|
|
47
|
-
charactersPerRow,
|
|
23
|
+
segments,
|
|
24
|
+
remainder: calculateRemainder(segments, chunkIndex, currRemainder, charactersPerRow),
|
|
48
25
|
};
|
|
49
26
|
}
|
|
27
|
+
function formatWithCoordinateSpacing(chunk, startPosition, spacingInterval) {
|
|
28
|
+
if (!chunk) {
|
|
29
|
+
return '';
|
|
30
|
+
}
|
|
31
|
+
let formattedChunk = '';
|
|
32
|
+
for (let i = 0, j = startPosition; i < chunk.length; i++, j++) {
|
|
33
|
+
if (j % spacingInterval === 0) {
|
|
34
|
+
formattedChunk += ' ';
|
|
35
|
+
j = 0;
|
|
36
|
+
}
|
|
37
|
+
formattedChunk += chunk[i];
|
|
38
|
+
}
|
|
39
|
+
return formattedChunk;
|
|
40
|
+
}
|
|
41
|
+
function calculateRemainder(segments, chunkIndex, currRemainder, charactersPerRow) {
|
|
42
|
+
var _a;
|
|
43
|
+
const lastSegmentLength = ((_a = segments.at(-1)) === null || _a === void 0 ? void 0 : _a.replaceAll(' ', '').length) || 0;
|
|
44
|
+
const additionalRemainder = chunkIndex < 2 ? currRemainder : 0;
|
|
45
|
+
return (lastSegmentLength + additionalRemainder) % charactersPerRow;
|
|
46
|
+
}
|
|
@@ -20,14 +20,14 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
|
|
|
20
20
|
upperCaseCDS: boolean;
|
|
21
21
|
charactersPerRow: number;
|
|
22
22
|
feature: SimpleFeatureSerialized | undefined;
|
|
23
|
-
mode:
|
|
23
|
+
mode: "" | "genomic" | "gene" | "gene_collapsed_intron" | "gene_updownstream" | "cdna" | "cds" | "genomic_sequence_updownstream" | "protein";
|
|
24
24
|
} & {
|
|
25
25
|
setFeature(f: SimpleFeatureSerialized): void;
|
|
26
26
|
setUpDownBp(f: number): void;
|
|
27
27
|
setIntronBp(f: number): void;
|
|
28
28
|
setUpperCaseCDS(f: boolean): void;
|
|
29
29
|
setShowCoordinates(f: "none" | "relative" | "genomic"): void;
|
|
30
|
-
setMode(mode:
|
|
30
|
+
setMode(mode: "" | "genomic" | "gene" | "gene_collapsed_intron" | "gene_updownstream" | "cdna" | "cds" | "genomic_sequence_updownstream" | "protein"): void;
|
|
31
31
|
} & {
|
|
32
32
|
readonly showCoordinates: boolean;
|
|
33
33
|
readonly showGenomicCoordsOption: boolean;
|
|
@@ -66,14 +66,14 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
|
|
|
66
66
|
upperCaseCDS: boolean;
|
|
67
67
|
charactersPerRow: number;
|
|
68
68
|
feature: SimpleFeatureSerialized | undefined;
|
|
69
|
-
mode:
|
|
69
|
+
mode: "" | "genomic" | "gene" | "gene_collapsed_intron" | "gene_updownstream" | "cdna" | "cds" | "genomic_sequence_updownstream" | "protein";
|
|
70
70
|
} & {
|
|
71
71
|
setFeature(f: SimpleFeatureSerialized): void;
|
|
72
72
|
setUpDownBp(f: number): void;
|
|
73
73
|
setIntronBp(f: number): void;
|
|
74
74
|
setUpperCaseCDS(f: boolean): void;
|
|
75
75
|
setShowCoordinates(f: "none" | "relative" | "genomic"): void;
|
|
76
|
-
setMode(mode:
|
|
76
|
+
setMode(mode: "" | "genomic" | "gene" | "gene_collapsed_intron" | "gene_updownstream" | "cdna" | "cds" | "genomic_sequence_updownstream" | "protein"): void;
|
|
77
77
|
} & {
|
|
78
78
|
readonly showCoordinates: boolean;
|
|
79
79
|
readonly showGenomicCoordsOption: boolean;
|
|
@@ -22,8 +22,11 @@ export interface SeqState {
|
|
|
22
22
|
export interface ErrorState {
|
|
23
23
|
error: string;
|
|
24
24
|
}
|
|
25
|
-
export declare function stitch(subfeats:
|
|
26
|
-
|
|
25
|
+
export declare function stitch(subfeats: {
|
|
26
|
+
start: number;
|
|
27
|
+
end: number;
|
|
28
|
+
}[], sequence: string): string;
|
|
29
|
+
export declare function filterSuccessiveElementsWithSameStartAndEndCoord(list: Feat[]): Feat[];
|
|
27
30
|
export declare function revlist(list: Feat[], seqlen: number): {
|
|
28
31
|
start: number;
|
|
29
32
|
end: number;
|