@jbrowse/core 2.10.0 → 2.10.2
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/index.d.ts +1 -1
- package/BaseFeatureWidget/BaseFeatureDetail/index.js +1 -1
- package/BaseFeatureWidget/BaseFeatureDetail/util.d.ts +0 -1
- package/BaseFeatureWidget/BaseFeatureDetail/util.js +1 -5
- package/BaseFeatureWidget/SequenceFeatureDetails/SequenceFeatureDetails.js +6 -6
- package/BaseFeatureWidget/SequenceFeatureDetails/index.js +12 -8
- package/ReExports/modules.js +5 -5
- package/package.json +3 -2
- package/tsconfig.build.tsbuildinfo +1 -1
- package/ui/ErrorMessage.js +33 -10
- package/ui/ErrorMessageStackTraceDialog.d.ts +5 -0
- package/ui/ErrorMessageStackTraceDialog.js +155 -0
- package/ui/RedErrorMessageBox.d.ts +4 -0
- package/ui/RedErrorMessageBox.js +17 -0
- package/ui/Snackbar.js +1 -1
- package/util/index.js +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { IAnyStateTreeNode } from 'mobx-state-tree';
|
|
3
|
-
import { BaseCardProps, BaseProps } from '../types';
|
|
4
3
|
import { SimpleFeatureSerialized } from '../../util';
|
|
4
|
+
import { BaseCardProps, BaseProps } from '../types';
|
|
5
5
|
export declare function BaseCard({ children, title, defaultExpanded, }: BaseCardProps): React.JSX.Element;
|
|
6
6
|
export declare const BaseCoreDetails: (props: BaseProps) => React.JSX.Element;
|
|
7
7
|
export declare const BaseAttributes: (props: BaseProps) => React.JSX.Element;
|
|
@@ -96,7 +96,7 @@ function CoreDetails(props) {
|
|
|
96
96
|
const { start, end } = formattedFeat;
|
|
97
97
|
const displayedDetails = {
|
|
98
98
|
...formattedFeat,
|
|
99
|
-
length: (0,
|
|
99
|
+
length: (0, util_1.toLocale)(end - start),
|
|
100
100
|
};
|
|
101
101
|
const coreRenderedDetails = {
|
|
102
102
|
description: 'Description',
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
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
|
-
export declare function toLocale(n: number): string;
|
|
5
4
|
export declare function accessNested(arr: string[], obj?: Record<string, unknown>): string | undefined;
|
|
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.accessNested = exports.
|
|
6
|
+
exports.accessNested = exports.generateMaxWidth = exports.generateTitle = exports.isEmpty = void 0;
|
|
7
7
|
const is_object_1 = __importDefault(require("is-object"));
|
|
8
8
|
const util_1 = require("../../util");
|
|
9
9
|
const util_2 = require("../util");
|
|
@@ -21,10 +21,6 @@ function generateMaxWidth(array, prefix) {
|
|
|
21
21
|
return (Math.ceil((0, util_1.max)(array.map(key => (0, util_1.measureText)([...prefix, key[0]].join('.'), 12)))) + 10);
|
|
22
22
|
}
|
|
23
23
|
exports.generateMaxWidth = generateMaxWidth;
|
|
24
|
-
function toLocale(n) {
|
|
25
|
-
return n.toLocaleString('en-US');
|
|
26
|
-
}
|
|
27
|
-
exports.toLocale = toLocale;
|
|
28
24
|
// pick using a path from an object, similar to _.get from lodash with special
|
|
29
25
|
// logic for Descriptions from e.g. VCF headers
|
|
30
26
|
//
|
|
@@ -37,7 +37,7 @@ const ui_1 = require("../../ui");
|
|
|
37
37
|
const Settings_1 = __importDefault(require("@mui/icons-material/Settings"));
|
|
38
38
|
const hooks_1 = require("./hooks");
|
|
39
39
|
// lazies
|
|
40
|
-
const
|
|
40
|
+
const SettingsDialog = (0, react_1.lazy)(() => Promise.resolve().then(() => __importStar(require('./SequenceFeatureSettingsDialog'))));
|
|
41
41
|
const SequencePanel = (0, react_1.lazy)(() => Promise.resolve().then(() => __importStar(require('./SequencePanel'))));
|
|
42
42
|
const useStyles = (0, mui_1.makeStyles)()(theme => ({
|
|
43
43
|
button: {
|
|
@@ -126,18 +126,18 @@ function SequenceFeatureDetails({ model, feature: prefeature, }) {
|
|
|
126
126
|
exports.default = SequenceFeatureDetails;
|
|
127
127
|
function Settings({ intronBp, upDownBp, setIntronBp, setUpDownBp, }) {
|
|
128
128
|
const { classes } = useStyles();
|
|
129
|
-
const [
|
|
129
|
+
const [settingsDialogOpen, setSettingsDialogOpen] = (0, react_1.useState)(false);
|
|
130
130
|
return (react_1.default.createElement(react_1.default.Fragment, null,
|
|
131
131
|
react_1.default.createElement(material_1.FormControl, { className: classes.formControl },
|
|
132
|
-
react_1.default.createElement(material_1.IconButton, { onClick: () =>
|
|
132
|
+
react_1.default.createElement(material_1.IconButton, { onClick: () => setSettingsDialogOpen(true) },
|
|
133
133
|
react_1.default.createElement(Settings_1.default, null))),
|
|
134
|
-
|
|
135
|
-
react_1.default.createElement(
|
|
134
|
+
settingsDialogOpen ? (react_1.default.createElement(react_1.Suspense, { fallback: null },
|
|
135
|
+
react_1.default.createElement(SettingsDialog, { handleClose: arg => {
|
|
136
136
|
if (arg) {
|
|
137
137
|
const { upDownBp, intronBp } = arg;
|
|
138
138
|
setIntronBp(intronBp);
|
|
139
139
|
setUpDownBp(upDownBp);
|
|
140
140
|
}
|
|
141
|
-
|
|
141
|
+
setSettingsDialogOpen(false);
|
|
142
142
|
}, upDownBp: upDownBp, intronBp: intronBp }))) : null));
|
|
143
143
|
}
|
|
@@ -29,11 +29,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
29
29
|
const react_1 = __importStar(require("react"));
|
|
30
30
|
const material_1 = require("@mui/material");
|
|
31
31
|
const mui_1 = require("tss-react/mui");
|
|
32
|
+
const mobx_react_1 = require("mobx-react");
|
|
32
33
|
const ui_1 = require("../../ui");
|
|
34
|
+
const util_1 = require("../../util");
|
|
33
35
|
// icons
|
|
34
36
|
const Help_1 = __importDefault(require("@mui/icons-material/Help"));
|
|
35
37
|
// lazies
|
|
36
|
-
const
|
|
38
|
+
const HelpDialog = (0, react_1.lazy)(() => Promise.resolve().then(() => __importStar(require('./SequenceHelpDialog'))));
|
|
37
39
|
const SequenceFeatureDetails = (0, react_1.lazy)(() => Promise.resolve().then(() => __importStar(require('./SequenceFeatureDetails'))));
|
|
38
40
|
const useStyles = (0, mui_1.makeStyles)()(theme => ({
|
|
39
41
|
formControl: {
|
|
@@ -44,25 +46,27 @@ const useStyles = (0, mui_1.makeStyles)()(theme => ({
|
|
|
44
46
|
marginBottom: theme.spacing(4),
|
|
45
47
|
},
|
|
46
48
|
}));
|
|
49
|
+
const SequenceFeatureDetailsHelpButton = (0, mobx_react_1.observer)(function ({ model, }) {
|
|
50
|
+
const { classes } = useStyles();
|
|
51
|
+
const session = (0, util_1.getSession)(model);
|
|
52
|
+
return (react_1.default.createElement(material_1.FormControl, { className: classes.formControl },
|
|
53
|
+
react_1.default.createElement(material_1.IconButton, { onClick: () => session.queueDialog(handleClose => [HelpDialog, { handleClose }]) },
|
|
54
|
+
react_1.default.createElement(Help_1.default, null))));
|
|
55
|
+
});
|
|
47
56
|
// display the stitched-together sequence of a gene's CDS, cDNA, or protein
|
|
48
57
|
// sequence. this is a best effort and weird genomic phenomena could lead these
|
|
49
58
|
// to not be 100% accurate
|
|
50
59
|
function SequenceFeaturePanel({ model, feature }) {
|
|
51
60
|
const { classes } = useStyles();
|
|
52
61
|
const [shown, setShown] = (0, react_1.useState)(false);
|
|
53
|
-
const [helpShown, setHelpShown] = (0, react_1.useState)(false);
|
|
54
62
|
return !model ? null : (react_1.default.createElement("div", { className: classes.container },
|
|
55
63
|
react_1.default.createElement(material_1.Button, { variant: "contained", onClick: () => setShown(!shown) }, shown ? 'Hide feature sequence' : 'Show feature sequence'),
|
|
56
|
-
react_1.default.createElement(
|
|
57
|
-
react_1.default.createElement(material_1.IconButton, { onClick: () => setHelpShown(true) },
|
|
58
|
-
react_1.default.createElement(Help_1.default, null))),
|
|
64
|
+
react_1.default.createElement(SequenceFeatureDetailsHelpButton, { model: model }),
|
|
59
65
|
shown ? (react_1.default.createElement(react_1.Suspense, { fallback: react_1.default.createElement(ui_1.LoadingEllipses, null) },
|
|
60
66
|
react_1.default.createElement(SequenceFeatureDetails
|
|
61
67
|
/* eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion */
|
|
62
68
|
, {
|
|
63
69
|
/* eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion */
|
|
64
|
-
key: feature.uniqueId, model: model, feature: feature }))) : null
|
|
65
|
-
helpShown ? (react_1.default.createElement(react_1.Suspense, { fallback: react_1.default.createElement("div", null) },
|
|
66
|
-
react_1.default.createElement(HelpDlg, { handleClose: () => setHelpShown(false) }))) : null));
|
|
70
|
+
key: feature.uniqueId, model: model, feature: feature }))) : null));
|
|
67
71
|
}
|
|
68
72
|
exports.default = SequenceFeaturePanel;
|
package/ReExports/modules.js
CHANGED
|
@@ -180,7 +180,7 @@ const Entries = {
|
|
|
180
180
|
};
|
|
181
181
|
const LazyMUICore = Object.fromEntries(Object.entries(Entries).map(([key, ReactComponent]) => {
|
|
182
182
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
183
|
-
const Component = react_1.default.forwardRef((props, ref) => (react_1.default.createElement(react_1.Suspense, { fallback:
|
|
183
|
+
const Component = react_1.default.forwardRef((props, ref) => (react_1.default.createElement(react_1.Suspense, { fallback: null },
|
|
184
184
|
react_1.default.createElement(ReactComponent, { ...props, ref: ref }))));
|
|
185
185
|
Component.displayName = key;
|
|
186
186
|
return [key, Component];
|
|
@@ -353,21 +353,21 @@ const DataGridEntries = {
|
|
|
353
353
|
};
|
|
354
354
|
const LazyDataGridComponents = Object.fromEntries(Object.entries(DataGridEntries).map(([key, ReactComponent]) => {
|
|
355
355
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
356
|
-
const Component = react_1.default.forwardRef((props, ref) => (react_1.default.createElement(react_1.Suspense, { fallback:
|
|
356
|
+
const Component = react_1.default.forwardRef((props, ref) => (react_1.default.createElement(react_1.Suspense, { fallback: null },
|
|
357
357
|
react_1.default.createElement(ReactComponent, { ...props, ref: ref }))));
|
|
358
358
|
Component.displayName = key;
|
|
359
359
|
return [key, Component];
|
|
360
360
|
}));
|
|
361
361
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
362
|
-
const LazyAttributes = react_1.default.forwardRef((props, ref) => (react_1.default.createElement(react_1.Suspense, { fallback:
|
|
362
|
+
const LazyAttributes = react_1.default.forwardRef((props, ref) => (react_1.default.createElement(react_1.Suspense, { fallback: null },
|
|
363
363
|
react_1.default.createElement(Attributes, { ...props, ref: ref }))));
|
|
364
364
|
LazyAttributes.displayName = 'Attributes';
|
|
365
365
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
366
|
-
const LazyFeatureDetails = react_1.default.forwardRef((props, ref) => (react_1.default.createElement(react_1.Suspense, { fallback:
|
|
366
|
+
const LazyFeatureDetails = react_1.default.forwardRef((props, ref) => (react_1.default.createElement(react_1.Suspense, { fallback: null },
|
|
367
367
|
react_1.default.createElement(FeatureDetails, { ...props, ref: ref }))));
|
|
368
368
|
LazyFeatureDetails.displayName = 'FeatureDetails';
|
|
369
369
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
370
|
-
const LazyBaseCard = react_1.default.forwardRef((props, ref) => (react_1.default.createElement(react_1.Suspense, { fallback:
|
|
370
|
+
const LazyBaseCard = react_1.default.forwardRef((props, ref) => (react_1.default.createElement(react_1.Suspense, { fallback: null },
|
|
371
371
|
react_1.default.createElement(BaseCard, { ...props, ref: ref }))));
|
|
372
372
|
LazyBaseCard.displayName = 'BaseCard';
|
|
373
373
|
const libs = {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jbrowse/core",
|
|
3
|
-
"version": "2.10.
|
|
3
|
+
"version": "2.10.2",
|
|
4
4
|
"description": "JBrowse 2 core libraries used by plugins",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"jbrowse",
|
|
@@ -53,6 +53,7 @@
|
|
|
53
53
|
"rbush": "^3.0.1",
|
|
54
54
|
"react-error-boundary": "^4.0.3",
|
|
55
55
|
"serialize-error": "^8.0.0",
|
|
56
|
+
"source-map-js": "^1.0.2",
|
|
56
57
|
"svg-path-generator": "^1.1.0"
|
|
57
58
|
},
|
|
58
59
|
"peerDependencies": {
|
|
@@ -71,5 +72,5 @@
|
|
|
71
72
|
"access": "public",
|
|
72
73
|
"directory": "dist"
|
|
73
74
|
},
|
|
74
|
-
"gitHead": "
|
|
75
|
+
"gitHead": "7ca3b7db337ebd88853e2d96cdab940ed550c4fb"
|
|
75
76
|
}
|