@jbrowse/core 2.5.0 → 2.6.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/ArrayValue.d.ts +1 -1
- package/BaseFeatureWidget/BaseFeatureDetail/ArrayValue.js +0 -1
- package/BaseFeatureWidget/BaseFeatureDetail/Attributes.d.ts +1 -1
- package/BaseFeatureWidget/BaseFeatureDetail/Attributes.js +8 -25
- package/BaseFeatureWidget/BaseFeatureDetail/BasicValue.d.ts +2 -1
- package/BaseFeatureWidget/BaseFeatureDetail/BasicValue.js +2 -1
- package/BaseFeatureWidget/BaseFeatureDetail/{DataGrid.d.ts → DataGridDetails.d.ts} +2 -1
- package/BaseFeatureWidget/BaseFeatureDetail/FieldName.d.ts +1 -1
- package/BaseFeatureWidget/BaseFeatureDetail/{BasicField.d.ts → SimpleField.d.ts} +2 -2
- package/BaseFeatureWidget/BaseFeatureDetail/{BasicField.js → SimpleField.js} +3 -3
- package/BaseFeatureWidget/BaseFeatureDetail/UriField.d.ts +2 -1
- package/BaseFeatureWidget/BaseFeatureDetail/UriLink.d.ts +2 -1
- package/BaseFeatureWidget/BaseFeatureDetail/index.d.ts +9 -38
- package/BaseFeatureWidget/BaseFeatureDetail/index.js +14 -225
- package/BaseFeatureWidget/BaseFeatureDetail/util.d.ts +1 -0
- package/BaseFeatureWidget/BaseFeatureDetail/util.js +24 -1
- package/BaseFeatureWidget/SequenceFeatureDetails/CDNASequence.d.ts +2 -1
- package/BaseFeatureWidget/SequenceFeatureDetails/CDSSequence.d.ts +2 -1
- package/BaseFeatureWidget/SequenceFeatureDetails/GenomicSequence.d.ts +2 -1
- package/BaseFeatureWidget/SequenceFeatureDetails/ProteinSequence.d.ts +2 -1
- package/BaseFeatureWidget/SequenceFeatureDetails/SequenceFeatureDetails.d.ts +2 -1
- package/BaseFeatureWidget/SequenceFeatureDetails/SequenceFeatureDetails.js +10 -13
- package/BaseFeatureWidget/SequenceFeatureDetails/SequenceFeatureSettingsDialog.d.ts +2 -1
- package/BaseFeatureWidget/SequenceFeatureDetails/SequenceHelpDialog.d.ts +2 -1
- package/BaseFeatureWidget/SequenceFeatureDetails/SequenceHelpDialog.js +1 -1
- package/BaseFeatureWidget/SequenceFeatureDetails/hooks.d.ts +2 -2
- package/BaseFeatureWidget/SequenceFeatureDetails/index.d.ts +2 -1
- package/BaseFeatureWidget/SequenceFeatureDetails/test_data/DLGAP3.d.ts +17 -17
- package/BaseFeatureWidget/SequenceFeatureDetails/test_data/NCDN.d.ts +16 -16
- package/BaseFeatureWidget/util.js +15 -5
- package/PluginManager.d.ts +3 -3
- package/README.md +0 -2
- package/ReExports/modules.d.ts +3 -3
- package/ReExports/modules.js +0 -3
- package/assemblyManager/assemblyConfigSchema.d.ts +2 -0
- package/assemblyManager/assemblyConfigSchema.js +1 -0
- package/assemblyManager/assemblyManager.d.ts +112 -0
- package/assemblyManager/assemblyManager.js +12 -1
- package/assemblyManager/index.d.ts +1 -0
- package/configuration/index.d.ts +1 -1
- package/configuration/types.d.ts +3 -1
- package/data_adapters/BaseAdapter/BaseAdapter.js +1 -1
- package/data_adapters/BaseAdapter/index.d.ts +1 -1
- package/package.json +2 -2
- package/pluggableElementTypes/RpcMethodType.d.ts +9 -7
- package/pluggableElementTypes/RpcMethodType.js +9 -7
- package/pluggableElementTypes/models/BaseConnectionModelFactory.d.ts +18 -0
- package/pluggableElementTypes/models/BaseConnectionModelFactory.js +9 -0
- package/pluggableElementTypes/models/BaseDisplayModel.d.ts +10 -1
- package/pluggableElementTypes/models/BaseDisplayModel.js +9 -1
- package/pluggableElementTypes/models/BaseTrackModel.d.ts +1 -0
- package/pluggableElementTypes/models/BaseTrackModel.js +1 -0
- package/pluggableElementTypes/models/BaseViewModel.d.ts +46 -2
- package/pluggableElementTypes/models/BaseViewModel.js +6 -0
- package/pluggableElementTypes/models/InternetAccountModel.d.ts +6 -2
- package/pluggableElementTypes/models/InternetAccountModel.js +27 -20
- package/pluggableElementTypes/models/baseConnectionConfig.d.ts +5 -2
- package/pluggableElementTypes/models/baseConnectionConfig.js +2 -1
- package/pluggableElementTypes/models/baseInternetAccountConfig.js +1 -1
- package/pluggableElementTypes/models/baseTrackConfig.d.ts +2 -2
- package/pluggableElementTypes/models/baseTrackConfig.js +7 -5
- package/pluggableElementTypes/models/index.d.ts +1 -1
- package/pluggableElementTypes/renderers/BoxRendererType.js +1 -2
- package/pluggableElementTypes/renderers/CircularChordRendererType.d.ts +2 -1
- package/pluggableElementTypes/renderers/FeatureRendererType.d.ts +3 -1
- package/pluggableElementTypes/renderers/FeatureRendererType.js +4 -6
- package/pluggableElementTypes/renderers/RpcRenderedSvgGroup.d.ts +2 -1
- package/pluggableElementTypes/renderers/ServerSideRenderedContent.d.ts +1 -1
- package/rpc/BaseRpcDriver.js +1 -7
- package/tsconfig.build.tsbuildinfo +1 -1
- package/ui/AppLogo.d.ts +2 -1
- package/ui/AssemblySelector.d.ts +2 -1
- package/ui/AssemblySelector.js +1 -1
- package/ui/CascadingMenu.d.ts +2 -1
- package/ui/CascadingMenuButton.d.ts +8 -0
- package/ui/CascadingMenuButton.js +20 -0
- package/ui/ColorPicker.d.ts +4 -3
- package/ui/Dialog.d.ts +5 -4
- package/ui/Dialog.js +5 -6
- package/ui/DropDownMenu.d.ts +2 -1
- package/ui/EditableTypography.js +1 -1
- package/ui/ErrorMessage.d.ts +2 -1
- package/ui/ErrorMessage.js +6 -2
- package/ui/FactoryResetDialog.d.ts +2 -1
- package/ui/FatalErrorDialog.d.ts +6 -6
- package/ui/FatalErrorDialog.js +7 -7
- package/ui/FileSelector/FileSelector.d.ts +2 -1
- package/ui/FileSelector/FileSelector.js +3 -2
- package/ui/FileSelector/LocalFileChooser.d.ts +2 -1
- package/ui/FileSelector/UrlChooser.d.ts +3 -3
- package/ui/FileSelector/UrlChooser.js +8 -10
- package/ui/Icons.d.ts +10 -9
- package/ui/LoadingEllipses.d.ts +2 -1
- package/ui/Logo.d.ts +3 -2
- package/ui/Menu.d.ts +2 -2
- package/ui/PrerenderedCanvas.d.ts +2 -1
- package/ui/ResizeBar.d.ts +1 -1
- package/ui/ResizeHandle.d.ts +2 -1
- package/ui/ReturnToImportFormDialog.d.ts +2 -1
- package/ui/SanitizedHTML.d.ts +2 -1
- package/ui/Snackbar.d.ts +7 -8
- package/ui/Snackbar.js +12 -17
- package/ui/SnackbarModel.d.ts +9 -3
- package/ui/SnackbarModel.js +3 -3
- package/ui/Tooltip.d.ts +2 -1
- package/ui/index.d.ts +0 -1
- package/ui/index.js +1 -3
- package/util/Base1DUtils.js +2 -1
- package/util/QuickLRU.d.ts +1 -1
- package/util/blockTypes.js +1 -1
- package/util/formatFastaStrings.js +1 -1
- package/util/index.d.ts +14 -0
- package/util/index.js +65 -8
- package/util/io/index.js +1 -1
- package/util/mst-reflection.js +1 -2
- package/util/offscreenCanvasUtils.d.ts +2 -2
- package/util/types/index.d.ts +6 -2
- package/util/types/index.js +6 -2
- package/util/types/util.d.ts +0 -3
- package/ui/AboutDialog.d.ts +0 -11
- package/ui/AboutDialog.js +0 -125
- package/ui/App.d.ts +0 -18
- package/ui/App.js +0 -114
- package/ui/AppToolbar.d.ts +0 -19
- package/ui/AppToolbar.js +0 -56
- package/ui/Drawer.d.ts +0 -8
- package/ui/Drawer.js +0 -34
- package/ui/DrawerWidget.d.ts +0 -5
- package/ui/DrawerWidget.js +0 -132
- package/ui/ViewContainer.d.ts +0 -9
- package/ui/ViewContainer.js +0 -76
- package/ui/ViewContainerTitle.d.ts +0 -5
- package/ui/ViewContainerTitle.js +0 -42
- package/ui/ViewLauncher.d.ts +0 -17
- package/ui/ViewLauncher.js +0 -50
- package/ui/ViewMenu.d.ts +0 -8
- package/ui/ViewMenu.js +0 -69
- package/ui/ViewPanel.d.ts +0 -18
- package/ui/ViewPanel.js +0 -49
- /package/BaseFeatureWidget/BaseFeatureDetail/{DataGrid.js → DataGridDetails.js} +0 -0
|
@@ -20,7 +20,6 @@ exports.useStyles = (0, mui_1.makeStyles)()(theme => ({
|
|
|
20
20
|
wordBreak: 'break-word',
|
|
21
21
|
maxHeight: 300,
|
|
22
22
|
padding: theme.spacing(0.5),
|
|
23
|
-
background: theme.palette.action.hover,
|
|
24
23
|
border: `1px solid ${theme.palette.action.selected}`,
|
|
25
24
|
boxSizing: 'border-box',
|
|
26
25
|
overflow: 'auto',
|
|
@@ -4,13 +4,14 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
const react_1 = __importDefault(require("react"));
|
|
7
|
-
const util_1 = require("./util");
|
|
8
|
-
const DataGrid_1 = __importDefault(require("./DataGrid"));
|
|
9
|
-
const ArrayValue_1 = __importDefault(require("./ArrayValue"));
|
|
10
7
|
const is_object_1 = __importDefault(require("is-object"));
|
|
8
|
+
// locals
|
|
9
|
+
const util_1 = require("./util");
|
|
11
10
|
const util_2 = require("../../util");
|
|
11
|
+
const DataGridDetails_1 = __importDefault(require("./DataGridDetails"));
|
|
12
|
+
const ArrayValue_1 = __importDefault(require("./ArrayValue"));
|
|
12
13
|
const UriField_1 = __importDefault(require("./UriField"));
|
|
13
|
-
const
|
|
14
|
+
const SimpleField_1 = __importDefault(require("./SimpleField"));
|
|
14
15
|
const MAX_FIELD_NAME_WIDTH = 170;
|
|
15
16
|
// these are always omitted as too detailed
|
|
16
17
|
const globalOmit = [
|
|
@@ -24,24 +25,6 @@ const globalOmit = [
|
|
|
24
25
|
'thickStart',
|
|
25
26
|
'thickEnd',
|
|
26
27
|
];
|
|
27
|
-
// pick using a path from an object, similar to _.get from lodash with special
|
|
28
|
-
// logic for Descriptions from e.g. VCF headers
|
|
29
|
-
//
|
|
30
|
-
// @param arr example ['a','b'], obj = {a:{b:'hello}}
|
|
31
|
-
// @returns hello (with special addition to grab description also)
|
|
32
|
-
function accessNested(arr, obj = {}) {
|
|
33
|
-
let obj2 = obj;
|
|
34
|
-
arr.forEach(elt => {
|
|
35
|
-
if (obj2) {
|
|
36
|
-
obj2 = obj[elt];
|
|
37
|
-
}
|
|
38
|
-
});
|
|
39
|
-
return typeof obj === 'string'
|
|
40
|
-
? obj
|
|
41
|
-
: typeof (obj === null || obj === void 0 ? void 0 : obj.Description) === 'string'
|
|
42
|
-
? obj.Description
|
|
43
|
-
: undefined;
|
|
44
|
-
}
|
|
45
28
|
function Attributes(props) {
|
|
46
29
|
const { attributes, omit = [], omitSingleLevel = [], descriptions, formatter = val => val, hideUris, prefix = [], } = props;
|
|
47
30
|
const omits = new Set([...omit, ...globalOmit, ...omitSingleLevel]);
|
|
@@ -51,18 +34,18 @@ function Attributes(props) {
|
|
|
51
34
|
return (react_1.default.createElement(react_1.default.Fragment, null, Object.entries(formattedAttributes)
|
|
52
35
|
.filter(([k, v]) => v !== undefined && !omits.has(k))
|
|
53
36
|
.map(([key, value]) => {
|
|
54
|
-
const description = accessNested([...prefix, key], descriptions);
|
|
37
|
+
const description = (0, util_1.accessNested)([...prefix, key], descriptions);
|
|
55
38
|
if (Array.isArray(value)) {
|
|
56
39
|
// check if it looks like an array of objects, which could be used
|
|
57
40
|
// in data grid
|
|
58
|
-
return value.length > 1 && value.every(val => (0, is_object_1.default)(val)) ? (react_1.default.createElement(
|
|
41
|
+
return value.length > 1 && value.every(val => (0, is_object_1.default)(val)) ? (react_1.default.createElement(DataGridDetails_1.default, { key: key, name: key, prefix: prefix, value: value })) : (react_1.default.createElement(ArrayValue_1.default, { key: key, name: key, value: value, description: description, prefix: prefix }));
|
|
59
42
|
}
|
|
60
43
|
else if ((0, is_object_1.default)(value)) {
|
|
61
44
|
const { omitSingleLevel, ...rest } = props;
|
|
62
45
|
return (0, util_2.isUriLocation)(value) ? (hideUris ? null : (react_1.default.createElement(UriField_1.default, { key: key, name: key, prefix: prefix, value: value }))) : (react_1.default.createElement(Attributes, { ...rest, key: key, attributes: value, descriptions: descriptions, prefix: [...prefix, key] }));
|
|
63
46
|
}
|
|
64
47
|
else {
|
|
65
|
-
return (react_1.default.createElement(
|
|
48
|
+
return (react_1.default.createElement(SimpleField_1.default, { key: key, name: key, value: formatter(value, key), description: description, prefix: prefix, width: Math.min(maxLabelWidth, MAX_FIELD_NAME_WIDTH) }));
|
|
66
49
|
}
|
|
67
50
|
})));
|
|
68
51
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import React from 'react';
|
|
1
2
|
export declare const useStyles: (params: void, styleOverrides?: {
|
|
2
3
|
props: any;
|
|
3
4
|
ownerState?: Record<string, unknown> | undefined;
|
|
@@ -9,4 +10,4 @@ export declare const useStyles: (params: void, styleOverrides?: {
|
|
|
9
10
|
};
|
|
10
11
|
export default function BasicValue({ value }: {
|
|
11
12
|
value: unknown;
|
|
12
|
-
}): JSX.Element;
|
|
13
|
+
}): React.JSX.Element;
|
|
@@ -6,9 +6,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.useStyles = void 0;
|
|
7
7
|
const react_1 = __importDefault(require("react"));
|
|
8
8
|
const mui_1 = require("tss-react/mui");
|
|
9
|
-
const ui_1 = require("../../ui");
|
|
10
9
|
const is_object_1 = __importDefault(require("is-object"));
|
|
11
10
|
const material_1 = require("@mui/material");
|
|
11
|
+
// locals
|
|
12
|
+
const ui_1 = require("../../ui");
|
|
12
13
|
exports.useStyles = (0, mui_1.makeStyles)()(theme => ({
|
|
13
14
|
fieldValue: {
|
|
14
15
|
wordBreak: 'break-word',
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import React from 'react';
|
|
1
2
|
export declare const useStyles: (params: void, styleOverrides?: {
|
|
2
3
|
props: any;
|
|
3
4
|
ownerState?: Record<string, unknown> | undefined;
|
|
@@ -11,4 +12,4 @@ export default function DataGridDetails({ value, prefix, name, }: {
|
|
|
11
12
|
name: string;
|
|
12
13
|
prefix?: string[];
|
|
13
14
|
value: Record<string, unknown>[];
|
|
14
|
-
}): JSX.Element | null;
|
|
15
|
+
}): React.JSX.Element | null;
|
|
@@ -8,10 +8,10 @@ export declare const useStyles: (params: void, styleOverrides?: {
|
|
|
8
8
|
css: import("tss-react").Css;
|
|
9
9
|
cx: import("tss-react").Cx;
|
|
10
10
|
};
|
|
11
|
-
export default function
|
|
11
|
+
export default function SimpleField({ name, value, description, prefix, width, }: {
|
|
12
12
|
description?: React.ReactNode;
|
|
13
13
|
name: string;
|
|
14
14
|
value: unknown;
|
|
15
15
|
prefix?: string[];
|
|
16
16
|
width?: number;
|
|
17
|
-
}): JSX.Element | null;
|
|
17
|
+
}): React.JSX.Element | null;
|
|
@@ -6,18 +6,18 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.useStyles = void 0;
|
|
7
7
|
const react_1 = __importDefault(require("react"));
|
|
8
8
|
const mui_1 = require("tss-react/mui");
|
|
9
|
-
const BasicValue_1 = __importDefault(require("./BasicValue"));
|
|
10
9
|
const FieldName_1 = __importDefault(require("./FieldName"));
|
|
10
|
+
const BasicValue_1 = __importDefault(require("./BasicValue"));
|
|
11
11
|
exports.useStyles = (0, mui_1.makeStyles)()({
|
|
12
12
|
field: {
|
|
13
13
|
display: 'flex',
|
|
14
14
|
flexWrap: 'wrap',
|
|
15
15
|
},
|
|
16
16
|
});
|
|
17
|
-
function
|
|
17
|
+
function SimpleField({ name, value, description, prefix, width, }) {
|
|
18
18
|
const { classes } = (0, exports.useStyles)();
|
|
19
19
|
return value !== null && value !== undefined ? (react_1.default.createElement("div", { className: classes.field },
|
|
20
20
|
react_1.default.createElement(FieldName_1.default, { prefix: prefix, description: description, name: name, width: width }),
|
|
21
21
|
react_1.default.createElement(BasicValue_1.default, { value: value }))) : null;
|
|
22
22
|
}
|
|
23
|
-
exports.default =
|
|
23
|
+
exports.default = SimpleField;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import React from 'react';
|
|
1
2
|
export declare const useStyles: (params: void, styleOverrides?: {
|
|
2
3
|
props: any;
|
|
3
4
|
ownerState?: Record<string, unknown> | undefined;
|
|
@@ -14,4 +15,4 @@ export default function UriField({ value, prefix, name, }: {
|
|
|
14
15
|
};
|
|
15
16
|
name: string;
|
|
16
17
|
prefix: string[];
|
|
17
|
-
}): JSX.Element;
|
|
18
|
+
}): React.JSX.Element;
|
|
@@ -1,50 +1,19 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { IAnyStateTreeNode } from 'mobx-state-tree';
|
|
3
3
|
import { BaseCardProps, BaseProps } from '../types';
|
|
4
|
-
import { SimpleFeatureSerialized } from '../../util
|
|
4
|
+
import { SimpleFeatureSerialized } from '../../util';
|
|
5
5
|
export declare const useStyles: (params: void, styleOverrides?: {
|
|
6
6
|
props: any;
|
|
7
7
|
ownerState?: Record<string, unknown> | undefined;
|
|
8
8
|
} | undefined) => {
|
|
9
|
-
classes: Record<"expandIcon" | "expansionPanelDetails"
|
|
9
|
+
classes: Record<"expandIcon" | "expansionPanelDetails", string>;
|
|
10
10
|
theme: import("@mui/material").Theme;
|
|
11
11
|
css: import("tss-react").Css;
|
|
12
12
|
cx: import("tss-react").Cx;
|
|
13
13
|
};
|
|
14
|
-
export declare function BaseCard({ children, title, defaultExpanded, }: BaseCardProps): JSX.Element;
|
|
15
|
-
export declare const
|
|
16
|
-
|
|
17
|
-
name: string;
|
|
18
|
-
prefix?: string[] | undefined;
|
|
19
|
-
width?: number | undefined;
|
|
20
|
-
}) => JSX.Element;
|
|
21
|
-
export declare const BasicValue: ({ value }: {
|
|
22
|
-
value: string | React.ReactNode;
|
|
23
|
-
}) => JSX.Element;
|
|
24
|
-
export declare function SimpleValue({ name, value, description, prefix, width, }: {
|
|
25
|
-
description?: React.ReactNode;
|
|
26
|
-
name: string;
|
|
27
|
-
value: any;
|
|
28
|
-
prefix?: string[];
|
|
29
|
-
width?: number;
|
|
30
|
-
}): JSX.Element | null;
|
|
31
|
-
export declare const BaseCoreDetails: (props: BaseProps) => JSX.Element;
|
|
32
|
-
export declare function UriLink({ value, }: {
|
|
33
|
-
value: {
|
|
34
|
-
uri: string;
|
|
35
|
-
baseUri?: string;
|
|
36
|
-
};
|
|
37
|
-
}): JSX.Element;
|
|
38
|
-
export declare function Attributes(props: {
|
|
39
|
-
attributes: Record<string, any>;
|
|
40
|
-
omit?: string[];
|
|
41
|
-
omitSingleLevel?: string[];
|
|
42
|
-
formatter?: (val: unknown, key: string) => React.ReactNode;
|
|
43
|
-
descriptions?: Record<string, React.ReactNode>;
|
|
44
|
-
prefix?: string[];
|
|
45
|
-
hideUris?: boolean;
|
|
46
|
-
}): JSX.Element;
|
|
47
|
-
export declare const BaseAttributes: (props: BaseProps) => JSX.Element;
|
|
14
|
+
export declare function BaseCard({ children, title, defaultExpanded, }: BaseCardProps): React.JSX.Element;
|
|
15
|
+
export declare const BaseCoreDetails: (props: BaseProps) => React.JSX.Element;
|
|
16
|
+
export declare const BaseAttributes: (props: BaseProps) => React.JSX.Element;
|
|
48
17
|
export interface BaseInputProps extends BaseCardProps {
|
|
49
18
|
omit?: string[];
|
|
50
19
|
model: any;
|
|
@@ -56,7 +25,9 @@ export declare function FeatureDetails(props: {
|
|
|
56
25
|
feature: SimpleFeatureSerialized;
|
|
57
26
|
depth?: number;
|
|
58
27
|
omit?: string[];
|
|
28
|
+
descriptions?: Record<string, React.ReactNode>;
|
|
59
29
|
formatter?: (val: unknown, key: string) => React.ReactNode;
|
|
60
|
-
}): JSX.Element;
|
|
61
|
-
declare const _default: ({ model }: BaseInputProps) => JSX.Element | null;
|
|
30
|
+
}): React.JSX.Element;
|
|
31
|
+
declare const _default: ({ model }: BaseInputProps) => React.JSX.Element | null;
|
|
62
32
|
export default _default;
|
|
33
|
+
export { default as Attributes } from './Attributes';
|
|
@@ -26,35 +26,22 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
26
26
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
27
|
};
|
|
28
28
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
-
exports.
|
|
29
|
+
exports.Attributes = exports.FeatureDetails = exports.BaseAttributes = exports.BaseCoreDetails = exports.BaseCard = exports.useStyles = void 0;
|
|
30
30
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
31
31
|
const react_1 = __importStar(require("react"));
|
|
32
32
|
const react_error_boundary_1 = require("react-error-boundary");
|
|
33
33
|
const material_1 = require("@mui/material");
|
|
34
34
|
const mui_1 = require("tss-react/mui");
|
|
35
|
-
const x_data_grid_1 = require("@mui/x-data-grid");
|
|
36
35
|
const mobx_react_1 = require("mobx-react");
|
|
37
|
-
const is_object_1 = __importDefault(require("is-object"));
|
|
38
36
|
// icons
|
|
39
37
|
const ExpandMore_1 = __importDefault(require("@mui/icons-material/ExpandMore"));
|
|
40
38
|
// locals
|
|
41
39
|
const util_1 = require("../../util");
|
|
42
40
|
const ui_1 = require("../../ui");
|
|
43
41
|
const SequenceFeatureDetails_1 = __importDefault(require("../SequenceFeatureDetails"));
|
|
44
|
-
const
|
|
45
|
-
const
|
|
46
|
-
|
|
47
|
-
const globalOmit = [
|
|
48
|
-
'__jbrowsefmt',
|
|
49
|
-
'length',
|
|
50
|
-
'position',
|
|
51
|
-
'subfeatures',
|
|
52
|
-
'uniqueId',
|
|
53
|
-
'exonFrames',
|
|
54
|
-
'parentId',
|
|
55
|
-
'thickStart',
|
|
56
|
-
'thickEnd',
|
|
57
|
-
];
|
|
42
|
+
const SimpleField_1 = __importDefault(require("./SimpleField"));
|
|
43
|
+
const Attributes_1 = __importDefault(require("./Attributes"));
|
|
44
|
+
const util_2 = require("./util");
|
|
58
45
|
// coreDetails are omitted in some circumstances
|
|
59
46
|
const coreDetails = [
|
|
60
47
|
'name',
|
|
@@ -75,40 +62,6 @@ exports.useStyles = (0, mui_1.makeStyles)()(theme => {
|
|
|
75
62
|
expandIcon: {
|
|
76
63
|
color: ((_a = theme.palette.tertiary) === null || _a === void 0 ? void 0 : _a.contrastText) || '#fff',
|
|
77
64
|
},
|
|
78
|
-
field: {
|
|
79
|
-
display: 'flex',
|
|
80
|
-
flexWrap: 'wrap',
|
|
81
|
-
},
|
|
82
|
-
fieldDescription: {
|
|
83
|
-
'&:hover': {
|
|
84
|
-
background: theme.palette.mode === 'dark' ? '#e65100' : 'yellow',
|
|
85
|
-
},
|
|
86
|
-
},
|
|
87
|
-
fieldName: {
|
|
88
|
-
wordBreak: 'break-all',
|
|
89
|
-
minWidth: 90,
|
|
90
|
-
borderBottom: '1px solid #0003',
|
|
91
|
-
fontSize: 12,
|
|
92
|
-
background: theme.palette.action.disabledBackground,
|
|
93
|
-
marginRight: theme.spacing(1),
|
|
94
|
-
padding: theme.spacing(0.5),
|
|
95
|
-
},
|
|
96
|
-
fieldValue: {
|
|
97
|
-
wordBreak: 'break-word',
|
|
98
|
-
maxHeight: 300,
|
|
99
|
-
fontSize: 12,
|
|
100
|
-
padding: theme.spacing(0.5),
|
|
101
|
-
overflow: 'auto',
|
|
102
|
-
},
|
|
103
|
-
fieldSubvalue: {
|
|
104
|
-
wordBreak: 'break-word',
|
|
105
|
-
maxHeight: 300,
|
|
106
|
-
padding: theme.spacing(0.5),
|
|
107
|
-
background: theme.palette.action.disabledBackground,
|
|
108
|
-
border: `1px solid ${theme.palette.action.disabledBackground}`,
|
|
109
|
-
boxSizing: 'border-box',
|
|
110
|
-
overflow: 'auto',
|
|
111
|
-
},
|
|
112
65
|
});
|
|
113
66
|
});
|
|
114
67
|
function BaseCard({ children, title, defaultExpanded = true, }) {
|
|
@@ -122,44 +75,6 @@ function BaseCard({ children, title, defaultExpanded = true, }) {
|
|
|
122
75
|
react_1.default.createElement(material_1.AccordionDetails, { className: classes.expansionPanelDetails }, children)));
|
|
123
76
|
}
|
|
124
77
|
exports.BaseCard = BaseCard;
|
|
125
|
-
const FieldName = ({ description, name, width, prefix = [], }) => {
|
|
126
|
-
const { classes, cx } = (0, exports.useStyles)();
|
|
127
|
-
const val = [...prefix, name].join('.');
|
|
128
|
-
return description ? (react_1.default.createElement(material_1.Tooltip, { title: description, placement: "left" },
|
|
129
|
-
react_1.default.createElement("div", { className: cx(classes.fieldDescription, classes.fieldName) }, val))) : (react_1.default.createElement("div", { className: classes.fieldName, style: { width: width } }, val));
|
|
130
|
-
};
|
|
131
|
-
exports.FieldName = FieldName;
|
|
132
|
-
const BasicValue = ({ value }) => {
|
|
133
|
-
const { classes } = (0, exports.useStyles)();
|
|
134
|
-
const isLink = `${value}`.match(/^https?:\/\//);
|
|
135
|
-
return (react_1.default.createElement("div", { className: classes.fieldValue }, react_1.default.isValidElement(value) ? (value) : isLink ? (react_1.default.createElement(material_1.Link, { href: `${value}` }, `${value}`)) : (react_1.default.createElement(ui_1.SanitizedHTML, { html: (0, is_object_1.default)(value) ? JSON.stringify(value) : String(value) }))));
|
|
136
|
-
};
|
|
137
|
-
exports.BasicValue = BasicValue;
|
|
138
|
-
function SimpleValue({ name, value, description, prefix, width, }) {
|
|
139
|
-
const { classes } = (0, exports.useStyles)();
|
|
140
|
-
return value !== null && value !== undefined ? (react_1.default.createElement("div", { className: classes.field },
|
|
141
|
-
react_1.default.createElement(exports.FieldName, { prefix: prefix, description: description, name: name, width: width }),
|
|
142
|
-
react_1.default.createElement(exports.BasicValue, { value: value }))) : null;
|
|
143
|
-
}
|
|
144
|
-
exports.SimpleValue = SimpleValue;
|
|
145
|
-
function ArrayValue({ name, value, description, prefix = [], }) {
|
|
146
|
-
const { classes } = (0, exports.useStyles)();
|
|
147
|
-
if (value.length === 1) {
|
|
148
|
-
return (0, is_object_1.default)(value[0]) ? (react_1.default.createElement(Attributes, { attributes: value[0], prefix: [...prefix, name] })) : (react_1.default.createElement("div", { className: classes.field },
|
|
149
|
-
react_1.default.createElement(exports.FieldName, { prefix: prefix, description: description, name: name }),
|
|
150
|
-
react_1.default.createElement(exports.BasicValue, { value: value[0] })));
|
|
151
|
-
}
|
|
152
|
-
else if (value.every(val => (0, is_object_1.default)(val))) {
|
|
153
|
-
return (react_1.default.createElement(react_1.default.Fragment, null, value.map((val, i) => (react_1.default.createElement(Attributes, { key: JSON.stringify(val) + '-' + i, attributes: val, prefix: [...prefix, name + '-' + i] })))));
|
|
154
|
-
}
|
|
155
|
-
else {
|
|
156
|
-
return (react_1.default.createElement("div", { className: classes.field },
|
|
157
|
-
react_1.default.createElement(exports.FieldName, { prefix: prefix, description: description, name: name }),
|
|
158
|
-
value.map((val, i) => (react_1.default.createElement("div", { key: JSON.stringify(val) + '-' + i, className: classes.fieldSubvalue },
|
|
159
|
-
react_1.default.createElement(exports.BasicValue, { value: val }))))));
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
const toLocale = (n) => n.toLocaleString('en-US');
|
|
163
78
|
function Position(props) {
|
|
164
79
|
const { feature } = props;
|
|
165
80
|
const strand = feature.strand;
|
|
@@ -181,7 +96,7 @@ function CoreDetails(props) {
|
|
|
181
96
|
const { start, end } = formattedFeat;
|
|
182
97
|
const displayedDetails = {
|
|
183
98
|
...formattedFeat,
|
|
184
|
-
length: toLocale(end - start),
|
|
99
|
+
length: (0, util_2.toLocale)(end - start),
|
|
185
100
|
};
|
|
186
101
|
const coreRenderedDetails = {
|
|
187
102
|
description: 'Description',
|
|
@@ -190,151 +105,23 @@ function CoreDetails(props) {
|
|
|
190
105
|
type: 'Type',
|
|
191
106
|
};
|
|
192
107
|
return (react_1.default.createElement(react_1.default.Fragment, null,
|
|
193
|
-
react_1.default.createElement(
|
|
108
|
+
react_1.default.createElement(SimpleField_1.default, { name: "Position", value: react_1.default.createElement(Position, { ...props, feature: formattedFeat }) }),
|
|
194
109
|
Object.entries(coreRenderedDetails)
|
|
195
110
|
.map(([key, name]) => [name, displayedDetails[key]])
|
|
196
111
|
.filter(([, value]) => value != null)
|
|
197
|
-
.map(([name, value]) => (react_1.default.createElement(
|
|
112
|
+
.map(([name, value]) => (react_1.default.createElement(SimpleField_1.default, { key: name, name: name, value: value })))));
|
|
198
113
|
}
|
|
199
114
|
const BaseCoreDetails = (props) => {
|
|
200
115
|
return (react_1.default.createElement(BaseCard, { ...props, title: "Primary data" },
|
|
201
116
|
react_1.default.createElement(CoreDetails, { ...props })));
|
|
202
117
|
};
|
|
203
118
|
exports.BaseCoreDetails = BaseCoreDetails;
|
|
204
|
-
function UriLink({ value, }) {
|
|
205
|
-
const href = (0, util_1.getUriLink)(value);
|
|
206
|
-
return react_1.default.createElement(ui_1.SanitizedHTML, { html: `<a href="${href}">${href}</a>` });
|
|
207
|
-
}
|
|
208
|
-
exports.UriLink = UriLink;
|
|
209
|
-
function DataGridDetails({ value, prefix, name, }) {
|
|
210
|
-
const keys = Object.keys(value[0]).sort();
|
|
211
|
-
const unionKeys = new Set(keys);
|
|
212
|
-
for (const val of value) {
|
|
213
|
-
for (const k of Object.keys(val)) {
|
|
214
|
-
unionKeys.add(k);
|
|
215
|
-
}
|
|
216
|
-
}
|
|
217
|
-
if (unionKeys.size < keys.length + 5) {
|
|
218
|
-
// avoids key 'id' from being used in row data
|
|
219
|
-
const rows = Object.entries(value).map(([k, val]) => {
|
|
220
|
-
const { id, ...rest } = val;
|
|
221
|
-
return {
|
|
222
|
-
id: k,
|
|
223
|
-
identifier: id,
|
|
224
|
-
...rest,
|
|
225
|
-
};
|
|
226
|
-
});
|
|
227
|
-
// avoids key 'id' from being used in column names, and tries
|
|
228
|
-
// to make it at the start of the colNames array
|
|
229
|
-
let colNames;
|
|
230
|
-
if (unionKeys.has('id')) {
|
|
231
|
-
unionKeys.delete('id');
|
|
232
|
-
colNames = ['identifier', ...unionKeys];
|
|
233
|
-
}
|
|
234
|
-
else {
|
|
235
|
-
colNames = [...unionKeys];
|
|
236
|
-
}
|
|
237
|
-
const columns = colNames.map(val => ({
|
|
238
|
-
field: val,
|
|
239
|
-
renderCell: (params) => {
|
|
240
|
-
const { value } = params;
|
|
241
|
-
return (0, util_1.isUriLocation)(value) ? react_1.default.createElement(UriLink, { value: value }) : (0, util_1.getStr)(value);
|
|
242
|
-
},
|
|
243
|
-
width: (0, util_1.measureGridWidth)(rows.map(r => r[val])),
|
|
244
|
-
}));
|
|
245
|
-
const rowHeight = 25;
|
|
246
|
-
const hideFoot = rows.length < 100;
|
|
247
|
-
const headHeight = 80;
|
|
248
|
-
const height = Math.min(rows.length, 100) * rowHeight + headHeight + (hideFoot ? 0 : 50);
|
|
249
|
-
// disableSelection on click helps avoid
|
|
250
|
-
// https://github.com/mui-org/material-ui-x/issues/1197
|
|
251
|
-
return (react_1.default.createElement(react_1.default.Fragment, null,
|
|
252
|
-
react_1.default.createElement(exports.FieldName, { prefix: prefix, name: name }),
|
|
253
|
-
react_1.default.createElement("div", { style: {
|
|
254
|
-
height,
|
|
255
|
-
width: '100%',
|
|
256
|
-
} },
|
|
257
|
-
react_1.default.createElement(x_data_grid_1.DataGrid, { disableRowSelectionOnClick: true, rowHeight: rowHeight, rows: rows, hideFooterSelectedRowCount: true, columns: columns, hideFooter: hideFoot }))));
|
|
258
|
-
}
|
|
259
|
-
return null;
|
|
260
|
-
}
|
|
261
|
-
// pick using a path from an object, similar to _.get from lodash with special logic
|
|
262
|
-
// for Descriptions from e.g. VCF headers
|
|
263
|
-
// @param arr example ['a','b'], obj = {a:{b:'hello}}
|
|
264
|
-
// @returns hello (with special addition to grab description also)
|
|
265
|
-
function accessNested(arr, obj = {}) {
|
|
266
|
-
arr.forEach(elt => {
|
|
267
|
-
if (obj) {
|
|
268
|
-
obj = obj[elt];
|
|
269
|
-
}
|
|
270
|
-
});
|
|
271
|
-
return typeof obj === 'string'
|
|
272
|
-
? obj
|
|
273
|
-
: typeof (obj === null || obj === void 0 ? void 0 : obj.Description) === 'string'
|
|
274
|
-
? obj.Description
|
|
275
|
-
: undefined;
|
|
276
|
-
}
|
|
277
|
-
function generateMaxWidth(array, prefix) {
|
|
278
|
-
const arr = [];
|
|
279
|
-
array.forEach(key => {
|
|
280
|
-
const val = [...prefix, key[0]].join('.');
|
|
281
|
-
arr.push((0, util_1.measureText)(val, 12));
|
|
282
|
-
});
|
|
283
|
-
return Math.ceil(Math.max(...arr)) + 10;
|
|
284
|
-
}
|
|
285
|
-
function UriAttribute({ value, prefix, name, }) {
|
|
286
|
-
const { classes } = (0, exports.useStyles)();
|
|
287
|
-
const { uri, baseUri = '' } = value;
|
|
288
|
-
let href;
|
|
289
|
-
try {
|
|
290
|
-
href = new URL(uri, baseUri).href;
|
|
291
|
-
}
|
|
292
|
-
catch (e) {
|
|
293
|
-
href = uri;
|
|
294
|
-
}
|
|
295
|
-
return (react_1.default.createElement("div", { className: classes.field },
|
|
296
|
-
react_1.default.createElement(exports.FieldName, { prefix: prefix, name: name }),
|
|
297
|
-
react_1.default.createElement(exports.BasicValue, { value: href })));
|
|
298
|
-
}
|
|
299
|
-
function Attributes(props) {
|
|
300
|
-
const { attributes, omit = [], omitSingleLevel = [], descriptions, formatter = val => val, hideUris, prefix = [], } = props;
|
|
301
|
-
const omits = new Set([...omit, ...globalOmit, ...omitSingleLevel]);
|
|
302
|
-
const { __jbrowsefmt, ...rest } = attributes;
|
|
303
|
-
const formattedAttributes = { ...rest, ...__jbrowsefmt };
|
|
304
|
-
const maxLabelWidth = generateMaxWidth(Object.entries(formattedAttributes).filter(([k, v]) => v !== undefined && !omits.has(k)), prefix);
|
|
305
|
-
return (react_1.default.createElement(react_1.default.Fragment, null, Object.entries(formattedAttributes)
|
|
306
|
-
.filter(([k, v]) => v !== undefined && !omits.has(k))
|
|
307
|
-
.map(([key, value]) => {
|
|
308
|
-
const description = accessNested([...prefix, key], descriptions);
|
|
309
|
-
if (Array.isArray(value)) {
|
|
310
|
-
// check if it looks like an array of objects, which could be used
|
|
311
|
-
// in data grid
|
|
312
|
-
return value.length > 1 && value.every(val => (0, is_object_1.default)(val)) ? (react_1.default.createElement(DataGridDetails, { key: key, name: key, prefix: prefix, value: value })) : (react_1.default.createElement(ArrayValue, { key: key, name: key, value: value, description: description, prefix: prefix }));
|
|
313
|
-
}
|
|
314
|
-
else if ((0, is_object_1.default)(value)) {
|
|
315
|
-
const { omitSingleLevel, ...rest } = props;
|
|
316
|
-
return (0, util_1.isUriLocation)(value) ? (hideUris ? null : (react_1.default.createElement(UriAttribute, { key: key, name: key, prefix: prefix, value: value }))) : (react_1.default.createElement(Attributes, { ...rest, key: key, attributes: value, descriptions: descriptions, prefix: [...prefix, key] }));
|
|
317
|
-
}
|
|
318
|
-
else {
|
|
319
|
-
return (react_1.default.createElement(SimpleValue, { key: key, name: key, value: formatter(value, key), description: description, prefix: prefix, width: Math.min(maxLabelWidth, MAX_FIELD_NAME_WIDTH) }));
|
|
320
|
-
}
|
|
321
|
-
})));
|
|
322
|
-
}
|
|
323
|
-
exports.Attributes = Attributes;
|
|
324
119
|
const BaseAttributes = (props) => {
|
|
325
120
|
const { feature } = props;
|
|
326
121
|
return (react_1.default.createElement(BaseCard, { ...props, title: "Attributes" },
|
|
327
|
-
react_1.default.createElement(
|
|
122
|
+
react_1.default.createElement(Attributes_1.default, { ...props, attributes: feature })));
|
|
328
123
|
};
|
|
329
124
|
exports.BaseAttributes = BaseAttributes;
|
|
330
|
-
function isEmpty(obj) {
|
|
331
|
-
return Object.keys(obj).length === 0;
|
|
332
|
-
}
|
|
333
|
-
function generateTitle(name, id, type) {
|
|
334
|
-
return [(0, util_2.ellipses)(`${name}` || `${id}`), `${type}`]
|
|
335
|
-
.filter(f => !!f)
|
|
336
|
-
.join(' - ');
|
|
337
|
-
}
|
|
338
125
|
function FeatureDetails(props) {
|
|
339
126
|
const { omit = [], model, feature, depth = 0 } = props;
|
|
340
127
|
const { mate, name = '', id = '', type = '', subfeatures, uniqueId } = feature;
|
|
@@ -345,7 +132,7 @@ function FeatureDetails(props) {
|
|
|
345
132
|
feature,
|
|
346
133
|
model,
|
|
347
134
|
});
|
|
348
|
-
return (react_1.default.createElement(BaseCard, { title: generateTitle(name, id, type) },
|
|
135
|
+
return (react_1.default.createElement(BaseCard, { title: (0, util_2.generateTitle)(name, id, type) },
|
|
349
136
|
react_1.default.createElement(material_1.Typography, null, "Core details"),
|
|
350
137
|
react_1.default.createElement(CoreDetails, { ...props }),
|
|
351
138
|
mate ? (react_1.default.createElement(react_1.default.Fragment, null,
|
|
@@ -354,8 +141,8 @@ function FeatureDetails(props) {
|
|
|
354
141
|
react_1.default.createElement(CoreDetails, { ...props, feature: { ...mate, uniqueId: uniqueId + '-mate' } }))) : null,
|
|
355
142
|
react_1.default.createElement(material_1.Divider, null),
|
|
356
143
|
react_1.default.createElement(material_1.Typography, null, "Attributes"),
|
|
357
|
-
react_1.default.createElement(
|
|
358
|
-
react_1.default.createElement(react_error_boundary_1.ErrorBoundary, { FallbackComponent:
|
|
144
|
+
react_1.default.createElement(Attributes_1.default, { attributes: feature, ...props, omit: omit, omitSingleLevel: coreDetails }),
|
|
145
|
+
react_1.default.createElement(react_error_boundary_1.ErrorBoundary, { FallbackComponent: e => react_1.default.createElement(ui_1.ErrorMessage, { error: e.error }) },
|
|
359
146
|
react_1.default.createElement(SequenceFeatureDetails_1.default, { ...props })),
|
|
360
147
|
ExtraPanel ? (react_1.default.createElement(react_1.default.Fragment, null,
|
|
361
148
|
react_1.default.createElement(material_1.Divider, null),
|
|
@@ -377,5 +164,7 @@ exports.default = (0, mobx_react_1.observer)(function ({ model }) {
|
|
|
377
164
|
// config guide. this replacement happens both here and when snapshotting the
|
|
378
165
|
// featureData
|
|
379
166
|
const g = JSON.parse(JSON.stringify(featureData, (_, v) => (v === undefined ? null : v)));
|
|
380
|
-
return isEmpty(g) ? null : react_1.default.createElement(FeatureDetails, { model: model, feature: g });
|
|
167
|
+
return (0, util_2.isEmpty)(g) ? null : react_1.default.createElement(FeatureDetails, { model: model, feature: g });
|
|
381
168
|
});
|
|
169
|
+
var Attributes_2 = require("./Attributes");
|
|
170
|
+
Object.defineProperty(exports, "Attributes", { enumerable: true, get: function () { return __importDefault(Attributes_2).default; } });
|
|
@@ -2,3 +2,4 @@ export declare function isEmpty(obj: Record<string, unknown>): boolean;
|
|
|
2
2
|
export declare function generateTitle(name: unknown, id: unknown, type: unknown): string;
|
|
3
3
|
export declare function generateMaxWidth(array: unknown[][], prefix: string[]): number;
|
|
4
4
|
export declare function toLocale(n: number): string;
|
|
5
|
+
export declare function accessNested(arr: string[], obj?: Record<string, unknown>): string | undefined;
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.toLocale = exports.generateMaxWidth = exports.generateTitle = exports.isEmpty = void 0;
|
|
6
|
+
exports.accessNested = exports.toLocale = exports.generateMaxWidth = exports.generateTitle = exports.isEmpty = void 0;
|
|
7
|
+
const is_object_1 = __importDefault(require("is-object"));
|
|
4
8
|
const util_1 = require("../../util");
|
|
5
9
|
const util_2 = require("../util");
|
|
6
10
|
function isEmpty(obj) {
|
|
@@ -21,3 +25,22 @@ function toLocale(n) {
|
|
|
21
25
|
return n.toLocaleString('en-US');
|
|
22
26
|
}
|
|
23
27
|
exports.toLocale = toLocale;
|
|
28
|
+
// pick using a path from an object, similar to _.get from lodash with special
|
|
29
|
+
// logic for Descriptions from e.g. VCF headers
|
|
30
|
+
//
|
|
31
|
+
// @param arr example ['a','b'], obj = {a:{b:'hello}}
|
|
32
|
+
// @returns hello (with special addition to grab description also)
|
|
33
|
+
function accessNested(arr, obj = {}) {
|
|
34
|
+
let obj2 = obj;
|
|
35
|
+
arr.forEach(elt => {
|
|
36
|
+
if ((0, is_object_1.default)(obj2)) {
|
|
37
|
+
obj2 = obj2[elt];
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
return typeof obj2 === 'string'
|
|
41
|
+
? obj2
|
|
42
|
+
: (0, is_object_1.default)(obj2) && typeof (obj2 === null || obj2 === void 0 ? void 0 : obj2.Description) === 'string'
|
|
43
|
+
? obj2.Description
|
|
44
|
+
: undefined;
|
|
45
|
+
}
|
|
46
|
+
exports.accessNested = accessNested;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import React from 'react';
|
|
1
2
|
import { Feat } from '../util';
|
|
2
3
|
export default function CDNASequence({ utr, cds, exons, sequence, upstream, downstream, includeIntrons, collapseIntron, intronBp, }: {
|
|
3
4
|
utr: Feat[];
|
|
@@ -9,4 +10,4 @@ export default function CDNASequence({ utr, cds, exons, sequence, upstream, down
|
|
|
9
10
|
includeIntrons?: boolean;
|
|
10
11
|
collapseIntron?: boolean;
|
|
11
12
|
intronBp: number;
|
|
12
|
-
}): JSX.Element;
|
|
13
|
+
}): React.JSX.Element;
|