@jbrowse/core 2.4.1 → 2.5.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 +16 -0
- package/BaseFeatureWidget/BaseFeatureDetail/ArrayValue.js +46 -0
- package/BaseFeatureWidget/BaseFeatureDetail/Attributes.d.ts +15 -0
- package/BaseFeatureWidget/BaseFeatureDetail/Attributes.js +69 -0
- package/BaseFeatureWidget/BaseFeatureDetail/BasicField.d.ts +17 -0
- package/BaseFeatureWidget/BaseFeatureDetail/BasicField.js +23 -0
- package/BaseFeatureWidget/BaseFeatureDetail/BasicValue.d.ts +12 -0
- package/BaseFeatureWidget/BaseFeatureDetail/BasicValue.js +26 -0
- package/BaseFeatureWidget/BaseFeatureDetail/DataGrid.d.ts +14 -0
- package/BaseFeatureWidget/BaseFeatureDetail/DataGrid.js +98 -0
- package/BaseFeatureWidget/BaseFeatureDetail/FieldName.d.ts +16 -0
- package/BaseFeatureWidget/BaseFeatureDetail/FieldName.js +32 -0
- package/BaseFeatureWidget/BaseFeatureDetail/UriField.d.ts +17 -0
- package/BaseFeatureWidget/BaseFeatureDetail/UriField.js +31 -0
- package/BaseFeatureWidget/BaseFeatureDetail/UriLink.d.ts +6 -0
- package/BaseFeatureWidget/BaseFeatureDetail/UriLink.js +13 -0
- package/BaseFeatureWidget/{BaseFeatureDetail.d.ts → BaseFeatureDetail/index.d.ts} +5 -7
- package/BaseFeatureWidget/{BaseFeatureDetail.js → BaseFeatureDetail/index.js} +12 -9
- package/BaseFeatureWidget/BaseFeatureDetail/util.d.ts +4 -0
- package/BaseFeatureWidget/BaseFeatureDetail/util.js +23 -0
- package/BaseFeatureWidget/SequenceFeatureDetails/CDNASequence.d.ts +12 -0
- package/BaseFeatureWidget/SequenceFeatureDetails/CDNASequence.js +25 -0
- package/BaseFeatureWidget/SequenceFeatureDetails/CDSSequence.d.ts +5 -0
- package/BaseFeatureWidget/SequenceFeatureDetails/CDSSequence.js +12 -0
- package/BaseFeatureWidget/SequenceFeatureDetails/GenomicSequence.d.ts +5 -0
- package/BaseFeatureWidget/SequenceFeatureDetails/GenomicSequence.js +14 -0
- package/BaseFeatureWidget/SequenceFeatureDetails/ProteinSequence.d.ts +8 -0
- package/BaseFeatureWidget/SequenceFeatureDetails/ProteinSequence.js +18 -0
- package/BaseFeatureWidget/SequenceFeatureDetails/SequenceFeatureDetails.d.ts +2 -0
- package/BaseFeatureWidget/SequenceFeatureDetails/SequenceFeatureDetails.js +146 -0
- package/BaseFeatureWidget/{SequenceFeatureSettingsDialog.d.ts → SequenceFeatureDetails/SequenceFeatureSettingsDialog.d.ts} +0 -1
- package/BaseFeatureWidget/{SequenceFeatureSettingsDialog.js → SequenceFeatureDetails/SequenceFeatureSettingsDialog.js} +1 -1
- package/BaseFeatureWidget/{SequenceHelpDialog.d.ts → SequenceFeatureDetails/SequenceHelpDialog.d.ts} +0 -1
- package/BaseFeatureWidget/{SequenceHelpDialog.js → SequenceFeatureDetails/SequenceHelpDialog.js} +6 -9
- package/BaseFeatureWidget/{SequencePanel.d.ts → SequenceFeatureDetails/SequencePanel.d.ts} +1 -1
- package/BaseFeatureWidget/{SequencePanel.js → SequenceFeatureDetails/SequencePanel.js} +10 -8
- package/BaseFeatureWidget/SequenceFeatureDetails/hooks.d.ts +10 -0
- package/BaseFeatureWidget/SequenceFeatureDetails/hooks.js +73 -0
- package/BaseFeatureWidget/SequenceFeatureDetails/index.d.ts +2 -0
- package/BaseFeatureWidget/SequenceFeatureDetails/index.js +68 -0
- package/BaseFeatureWidget/SequenceFeatureDetails/util.d.ts +6 -0
- package/BaseFeatureWidget/SequenceFeatureDetails/util.js +11 -0
- package/BaseFeatureWidget/index.d.ts +5 -2
- package/BaseFeatureWidget/index.js +29 -20
- package/BaseFeatureWidget/types.d.ts +2 -2
- package/Plugin.d.ts +1 -1
- package/PluginLoader.js +17 -0
- package/PluginManager.d.ts +6 -5
- package/PluginManager.js +3 -0
- package/ReExports/list.js +1 -0
- package/ReExports/modules.d.ts +6 -5
- package/ReExports/modules.js +7 -4
- package/TextSearch/TextSearchManager.d.ts +2 -9
- package/assemblyManager/assembly.d.ts +91 -8
- package/assemblyManager/assembly.js +92 -8
- package/assemblyManager/assemblyConfigSchema.d.ts +50 -1
- package/assemblyManager/assemblyManager.d.ts +115 -58
- package/assemblyManager/assemblyManager.js +60 -12
- package/configuration/configurationSchema.d.ts +13 -13
- package/configuration/configurationSchema.js +4 -2
- package/configuration/configurationSlot.d.ts +1 -0
- package/configuration/index.d.ts +1 -1
- package/configuration/types.d.ts +13 -0
- package/configuration/types.js +2 -0
- package/configuration/util.d.ts +5 -3
- package/configuration/util.js +18 -18
- package/data_adapters/BaseAdapter/BaseAdapter.d.ts +23 -0
- package/data_adapters/BaseAdapter/BaseAdapter.js +37 -0
- package/data_adapters/BaseAdapter/BaseFeatureDataAdapter.d.ts +128 -0
- package/data_adapters/{BaseAdapter.js → BaseAdapter/BaseFeatureDataAdapter.js} +58 -88
- package/data_adapters/BaseAdapter/BaseOptions.d.ts +16 -0
- package/data_adapters/BaseAdapter/BaseOptions.js +2 -0
- package/data_adapters/BaseAdapter/BaseRefNameAliasAdapter.d.ts +9 -0
- package/data_adapters/BaseAdapter/BaseRefNameAliasAdapter.js +2 -0
- package/data_adapters/BaseAdapter/BaseSequenceAdapter.d.ts +13 -0
- package/data_adapters/BaseAdapter/BaseSequenceAdapter.js +10 -0
- package/data_adapters/BaseAdapter/BaseTextSearchAdapter.d.ts +6 -0
- package/data_adapters/BaseAdapter/BaseTextSearchAdapter.js +2 -0
- package/data_adapters/BaseAdapter/RegionsAdapter.d.ts +6 -0
- package/data_adapters/BaseAdapter/RegionsAdapter.js +2 -0
- package/data_adapters/BaseAdapter/index.d.ts +15 -0
- package/data_adapters/BaseAdapter/index.js +25 -0
- package/data_adapters/BaseAdapter/types.d.ts +21 -0
- package/data_adapters/BaseAdapter/types.js +2 -0
- package/data_adapters/BaseAdapter/util.d.ts +12 -0
- package/data_adapters/BaseAdapter/util.js +23 -0
- package/data_adapters/CytobandAdapter/configSchema.d.ts +11 -1
- package/package.json +4 -5
- package/pluggableElementTypes/AdapterType.d.ts +1 -1
- package/pluggableElementTypes/ConnectionType.d.ts +1 -1
- package/pluggableElementTypes/DisplayType.d.ts +1 -1
- package/pluggableElementTypes/InternetAccountType.d.ts +1 -1
- package/pluggableElementTypes/TextSearchAdapterType.d.ts +1 -1
- package/pluggableElementTypes/models/BaseTrackModel.d.ts +1 -1
- package/pluggableElementTypes/models/BaseTrackModel.js +3 -2
- package/pluggableElementTypes/models/InternetAccountModel.d.ts +30 -0
- package/pluggableElementTypes/models/InternetAccountModel.js +6 -1
- package/pluggableElementTypes/models/baseConnectionConfig.d.ts +18 -1
- package/pluggableElementTypes/models/baseInternetAccountConfig.d.ts +42 -1
- package/pluggableElementTypes/models/baseTrackConfig.d.ts +118 -1
- package/pluggableElementTypes/models/baseTrackConfig.js +1 -1
- package/pluggableElementTypes/renderers/CircularChordRendererType.d.ts +0 -1
- package/pluggableElementTypes/renderers/FeatureRendererType.d.ts +1 -1
- package/pluggableElementTypes/renderers/RendererType.d.ts +1 -1
- package/pluggableElementTypes/renderers/RpcRenderedSvgGroup.d.ts +0 -1
- package/pluggableElementTypes/renderers/ServerSideRendererType.d.ts +1 -1
- package/rpc/RpcManager.d.ts +8 -1
- package/rpc/RpcManager.js +1 -1
- package/rpc/baseRpcConfig.d.ts +10 -1
- package/rpc/configSchema.d.ts +14 -1
- package/rpc/coreRpcMethods.d.ts +1 -1
- package/rpc/coreRpcMethods.js +3 -3
- package/rpc/mainThreadRpcConfig.d.ts +7 -1
- package/rpc/methods/{CoreEstimateRegionStats.d.ts → CoreGetFeatureDensityStats.d.ts} +2 -2
- package/rpc/methods/{CoreEstimateRegionStats.js → CoreGetFeatureDensityStats.js} +4 -4
- package/rpc/methods/CoreGetFeatureDetails.js +5 -5
- package/rpc/webWorkerRpcConfig.d.ts +7 -1
- package/tsconfig.build.tsbuildinfo +1 -1
- package/ui/AboutDialog.d.ts +0 -1
- package/ui/AppLogo.d.ts +0 -1
- package/ui/AssemblySelector.d.ts +0 -1
- package/ui/CascadingMenu.d.ts +0 -1
- package/ui/ColorPicker.d.ts +0 -1
- package/ui/Dialog.d.ts +0 -1
- package/ui/Dialog.js +14 -1
- package/ui/DrawerWidget.d.ts +1 -2
- package/ui/DrawerWidget.js +5 -3
- package/ui/DropDownMenu.d.ts +0 -1
- package/ui/ErrorMessage.d.ts +0 -1
- package/ui/FactoryResetDialog.d.ts +0 -1
- package/ui/FatalErrorDialog.d.ts +0 -1
- package/ui/FileSelector/FileSelector.d.ts +0 -1
- package/ui/FileSelector/LocalFileChooser.d.ts +0 -1
- package/ui/FileSelector/UrlChooser.d.ts +0 -1
- package/ui/Icons.d.ts +0 -1
- package/ui/LoadingEllipses.d.ts +0 -1
- package/ui/Logo.d.ts +0 -1
- package/ui/PrerenderedCanvas.d.ts +0 -1
- package/ui/ResizeBar.js +1 -1
- package/ui/ResizeHandle.d.ts +0 -1
- package/ui/ReturnToImportFormDialog.d.ts +0 -1
- package/ui/SanitizedHTML.d.ts +0 -1
- package/ui/SanitizedHTML.js +6 -0
- package/ui/Snackbar.d.ts +0 -1
- package/ui/Tooltip.d.ts +0 -1
- package/ui/ViewContainer.d.ts +2 -3
- package/ui/ViewContainer.js +7 -39
- package/ui/ViewContainerTitle.d.ts +5 -0
- package/ui/ViewContainerTitle.js +42 -0
- package/ui/ViewLauncher.d.ts +0 -1
- package/ui/ViewMenu.d.ts +1 -2
- package/ui/ViewPanel.d.ts +0 -1
- package/ui/react-colorful.d.ts +1 -1
- package/ui/theme.js +3 -18
- package/util/index.d.ts +9 -4
- package/util/index.js +30 -6
- package/util/io/index.d.ts +3 -1
- package/util/io/index.js +9 -4
- package/util/layouts/PrecomputedMultiLayout.d.ts +1 -1
- package/util/mst-reflection.d.ts +12 -17
- package/util/mst-reflection.js +13 -12
- package/util/stats.d.ts +5 -5
- package/util/types/index.d.ts +4 -1
- package/util/types/mst.d.ts +12 -9
- package/util/useMeasure.d.ts +5 -0
- package/util/useMeasure.js +34 -0
- package/BaseFeatureWidget/SequenceBox.d.ts +0 -29
- package/BaseFeatureWidget/SequenceBox.js +0 -63
- package/BaseFeatureWidget/SequenceFeatureDetails.d.ts +0 -3
- package/BaseFeatureWidget/SequenceFeatureDetails.js +0 -237
- package/data_adapters/BaseAdapter.d.ts +0 -138
- /package/BaseFeatureWidget/{test_data → SequenceFeatureDetails/test_data}/DLGAP3.d.ts +0 -0
- /package/BaseFeatureWidget/{test_data → SequenceFeatureDetails/test_data}/DLGAP3.js +0 -0
- /package/BaseFeatureWidget/{test_data → SequenceFeatureDetails/test_data}/NCDN.d.ts +0 -0
- /package/BaseFeatureWidget/{test_data → SequenceFeatureDetails/test_data}/NCDN.js +0 -0
package/ui/AboutDialog.d.ts
CHANGED
package/ui/AppLogo.d.ts
CHANGED
package/ui/AssemblySelector.d.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
/// <reference types="react" />
|
|
2
1
|
import { InputProps as IIP, TextFieldProps as TFP } from '@mui/material';
|
|
3
2
|
import { AbstractSessionModel } from '../util';
|
|
4
3
|
declare const AssemblySelector: ({ session, onChange, selected, InputProps, TextFieldProps, localStorageKey, helperText, }: {
|
package/ui/CascadingMenu.d.ts
CHANGED
package/ui/ColorPicker.d.ts
CHANGED
package/ui/Dialog.d.ts
CHANGED
package/ui/Dialog.js
CHANGED
|
@@ -27,6 +27,7 @@ function DialogError({ error }) {
|
|
|
27
27
|
function JBrowseDialog(props) {
|
|
28
28
|
const { classes } = useStyles();
|
|
29
29
|
const { title, children, onClose } = props;
|
|
30
|
+
const theme = (0, material_1.useTheme)();
|
|
30
31
|
return (react_1.default.createElement(material_1.Dialog, { ...props },
|
|
31
32
|
react_1.default.createElement(material_1.ScopedCssBaseline, null,
|
|
32
33
|
react_1.default.createElement(material_1.DialogTitle, null,
|
|
@@ -37,6 +38,18 @@ function JBrowseDialog(props) {
|
|
|
37
38
|
} },
|
|
38
39
|
react_1.default.createElement(Close_1.default, null))) : null),
|
|
39
40
|
react_1.default.createElement(material_1.Divider, null),
|
|
40
|
-
react_1.default.createElement(react_error_boundary_1.ErrorBoundary, { FallbackComponent: DialogError },
|
|
41
|
+
react_1.default.createElement(react_error_boundary_1.ErrorBoundary, { FallbackComponent: DialogError },
|
|
42
|
+
react_1.default.createElement(material_1.ThemeProvider, { theme: (0, material_1.createTheme)(theme, {
|
|
43
|
+
components: {
|
|
44
|
+
MuiInputBase: {
|
|
45
|
+
styleOverrides: {
|
|
46
|
+
input: {
|
|
47
|
+
// xref https://github.com/GMOD/jbrowse-components/pull/3666
|
|
48
|
+
boxSizing: 'content-box!important',
|
|
49
|
+
},
|
|
50
|
+
},
|
|
51
|
+
},
|
|
52
|
+
},
|
|
53
|
+
}) }, children)))));
|
|
41
54
|
}
|
|
42
55
|
exports.default = (0, mobx_react_1.observer)(JBrowseDialog);
|
package/ui/DrawerWidget.d.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
/// <reference types="react" />
|
|
2
1
|
import { SessionWithDrawerWidgets } from '../util/types';
|
|
3
|
-
declare const DrawerWidget: ({ session }: {
|
|
2
|
+
declare const DrawerWidget: ({ session, }: {
|
|
4
3
|
session: SessionWithDrawerWidgets;
|
|
5
4
|
}) => JSX.Element;
|
|
6
5
|
export default DrawerWidget;
|
package/ui/DrawerWidget.js
CHANGED
|
@@ -59,7 +59,7 @@ const useStyles = (0, mui_1.makeStyles)()(theme => ({
|
|
|
59
59
|
background: theme.palette.secondary.main,
|
|
60
60
|
},
|
|
61
61
|
}));
|
|
62
|
-
const DrawerHeader = (0, mobx_react_1.observer)(({ session, setToolbarHeight, })
|
|
62
|
+
const DrawerHeader = (0, mobx_react_1.observer)(function ({ session, setToolbarHeight, }) {
|
|
63
63
|
const { pluginManager } = (0, util_1.getEnv)(session);
|
|
64
64
|
const { visibleWidget, activeWidgets, drawerPosition } = session;
|
|
65
65
|
const { classes } = useStyles();
|
|
@@ -109,7 +109,7 @@ const DrawerHeader = (0, mobx_react_1.observer)(({ session, setToolbarHeight, })
|
|
|
109
109
|
setAnchorEl(null);
|
|
110
110
|
} }, option))))));
|
|
111
111
|
});
|
|
112
|
-
const DrawerWidget = (0, mobx_react_1.observer)(({ session })
|
|
112
|
+
const DrawerWidget = (0, mobx_react_1.observer)(function ({ session, }) {
|
|
113
113
|
const { visibleWidget } = session;
|
|
114
114
|
const { pluginManager } = (0, util_1.getEnv)(session);
|
|
115
115
|
const DrawerComponent = visibleWidget
|
|
@@ -125,6 +125,8 @@ const DrawerWidget = (0, mobx_react_1.observer)(({ session }) => {
|
|
|
125
125
|
return (react_1.default.createElement(Drawer_1.default, { session: session },
|
|
126
126
|
react_1.default.createElement(DrawerHeader, { session: session, setToolbarHeight: setToolbarHeight }),
|
|
127
127
|
react_1.default.createElement(react_1.Suspense, { fallback: react_1.default.createElement(LoadingEllipses_1.default, null) },
|
|
128
|
-
react_1.default.createElement(react_error_boundary_1.ErrorBoundary, { FallbackComponent: ({ error }) => react_1.default.createElement(ErrorMessage_1.default, { error: error }) }, DrawerComponent ? (react_1.default.createElement(
|
|
128
|
+
react_1.default.createElement(react_error_boundary_1.ErrorBoundary, { FallbackComponent: ({ error }) => react_1.default.createElement(ErrorMessage_1.default, { error: error }) }, DrawerComponent ? (react_1.default.createElement(react_1.default.Fragment, null,
|
|
129
|
+
react_1.default.createElement(DrawerComponent, { model: visibleWidget, session: session, toolbarHeight: toolbarHeight }),
|
|
130
|
+
react_1.default.createElement("div", { style: { height: 300 } }))) : null))));
|
|
129
131
|
});
|
|
130
132
|
exports.default = DrawerWidget;
|
package/ui/DropDownMenu.d.ts
CHANGED
package/ui/ErrorMessage.d.ts
CHANGED
package/ui/FatalErrorDialog.d.ts
CHANGED
package/ui/Icons.d.ts
CHANGED
package/ui/LoadingEllipses.d.ts
CHANGED
package/ui/Logo.d.ts
CHANGED
package/ui/ResizeBar.js
CHANGED
package/ui/ResizeHandle.d.ts
CHANGED
package/ui/SanitizedHTML.d.ts
CHANGED
package/ui/SanitizedHTML.js
CHANGED
|
@@ -53,6 +53,12 @@ function isHTML(str) {
|
|
|
53
53
|
return full.test(str);
|
|
54
54
|
}
|
|
55
55
|
exports.isHTML = isHTML;
|
|
56
|
+
// note this is mocked during testing, see
|
|
57
|
+
// packages/__mocks__/@jbrowse/core/ui/SanitizedHTML something about dompurify
|
|
58
|
+
// behavior causes errors during tests, was seen in
|
|
59
|
+
// products/jbrowse-web/src/tests/Connection.test.tsx test (can delete mock to
|
|
60
|
+
// see)
|
|
61
|
+
//
|
|
56
62
|
function SanitizedHTML({ html }) {
|
|
57
63
|
const value = isHTML(html) ? html : (0, escape_html_1.default)(html);
|
|
58
64
|
if (!added) {
|
package/ui/Snackbar.d.ts
CHANGED
package/ui/Tooltip.d.ts
CHANGED
package/ui/ViewContainer.d.ts
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { IBaseViewModel } from '../pluggableElementTypes/models';
|
|
3
|
-
declare const
|
|
3
|
+
declare const _default: ({ view, onClose, onMinimize, children, }: {
|
|
4
4
|
view: IBaseViewModel;
|
|
5
5
|
onClose: () => void;
|
|
6
6
|
onMinimize: () => void;
|
|
7
|
-
style?: React.CSSProperties | undefined;
|
|
8
7
|
children: React.ReactNode;
|
|
9
8
|
}) => JSX.Element;
|
|
10
|
-
export default
|
|
9
|
+
export default _default;
|
package/ui/ViewContainer.js
CHANGED
|
@@ -30,19 +30,19 @@ const react_1 = __importStar(require("react"));
|
|
|
30
30
|
const material_1 = require("@mui/material");
|
|
31
31
|
const mui_1 = require("tss-react/mui");
|
|
32
32
|
const mobx_react_1 = require("mobx-react");
|
|
33
|
-
const mobx_state_tree_1 = require("mobx-state-tree");
|
|
34
|
-
const react_use_measure_1 = __importDefault(require("react-use-measure"));
|
|
35
33
|
// icons
|
|
36
34
|
const Close_1 = __importDefault(require("@mui/icons-material/Close"));
|
|
37
35
|
const Minimize_1 = __importDefault(require("@mui/icons-material/Minimize"));
|
|
38
36
|
const Add_1 = __importDefault(require("@mui/icons-material/Add"));
|
|
39
|
-
const EditableTypography_1 = __importDefault(require("./EditableTypography"));
|
|
40
37
|
const ViewMenu_1 = __importDefault(require("./ViewMenu"));
|
|
38
|
+
const util_1 = require("../util");
|
|
39
|
+
const ViewContainerTitle_1 = __importDefault(require("./ViewContainerTitle"));
|
|
41
40
|
const useStyles = (0, mui_1.makeStyles)()(theme => ({
|
|
42
41
|
viewContainer: {
|
|
43
42
|
overflow: 'hidden',
|
|
44
43
|
background: theme.palette.secondary.main,
|
|
45
44
|
margin: theme.spacing(0.5),
|
|
45
|
+
padding: `0 ${theme.spacing(1)} ${theme.spacing(1)}`,
|
|
46
46
|
},
|
|
47
47
|
icon: {
|
|
48
48
|
color: theme.palette.secondary.contrastText,
|
|
@@ -50,34 +50,11 @@ const useStyles = (0, mui_1.makeStyles)()(theme => ({
|
|
|
50
50
|
grow: {
|
|
51
51
|
flexGrow: 1,
|
|
52
52
|
},
|
|
53
|
-
input: {
|
|
54
|
-
paddingBottom: 0,
|
|
55
|
-
paddingTop: 2,
|
|
56
|
-
},
|
|
57
|
-
inputBase: {
|
|
58
|
-
color: theme.palette.secondary.contrastText,
|
|
59
|
-
},
|
|
60
|
-
inputRoot: {
|
|
61
|
-
'&:hover': {
|
|
62
|
-
backgroundColor: theme.palette.secondary.light,
|
|
63
|
-
},
|
|
64
|
-
},
|
|
65
|
-
inputFocused: {
|
|
66
|
-
borderColor: theme.palette.primary.main,
|
|
67
|
-
backgroundColor: theme.palette.secondary.light,
|
|
68
|
-
},
|
|
69
53
|
}));
|
|
70
|
-
|
|
71
|
-
var _a;
|
|
54
|
+
exports.default = (0, mobx_react_1.observer)(function ({ view, onClose, onMinimize, children, }) {
|
|
72
55
|
const { classes } = useStyles();
|
|
73
56
|
const theme = (0, material_1.useTheme)();
|
|
74
|
-
const
|
|
75
|
-
const [ref, { width }] = (0, react_use_measure_1.default)();
|
|
76
|
-
(0, react_1.useEffect)(() => {
|
|
77
|
-
if (width && (0, mobx_state_tree_1.isAlive)(view)) {
|
|
78
|
-
view.setWidth(width - Number.parseInt(padWidth, 10) * 2);
|
|
79
|
-
}
|
|
80
|
-
}, [padWidth, view, width]);
|
|
57
|
+
const ref = (0, util_1.useWidthSetter)(view, theme.spacing(1));
|
|
81
58
|
const scrollRef = (0, react_1.useRef)(null);
|
|
82
59
|
// scroll the view into view when first mounted
|
|
83
60
|
// note that this effect will run only once, because of
|
|
@@ -86,23 +63,14 @@ const ViewContainer = (0, mobx_react_1.observer)(function ({ view, onClose, onMi
|
|
|
86
63
|
var _a, _b;
|
|
87
64
|
(_b = (_a = scrollRef.current) === null || _a === void 0 ? void 0 : _a.scrollIntoView) === null || _b === void 0 ? void 0 : _b.call(_a, { block: 'center' });
|
|
88
65
|
}, []);
|
|
89
|
-
return (react_1.default.createElement(material_1.Paper, { ref: ref, elevation: 12, className: classes.viewContainer
|
|
66
|
+
return (react_1.default.createElement(material_1.Paper, { ref: ref, elevation: 12, className: classes.viewContainer },
|
|
90
67
|
react_1.default.createElement("div", { ref: scrollRef, style: { display: 'flex' } },
|
|
91
68
|
react_1.default.createElement(ViewMenu_1.default, { model: view, IconProps: { className: classes.icon } }),
|
|
92
69
|
react_1.default.createElement("div", { className: classes.grow }),
|
|
93
|
-
react_1.default.createElement(
|
|
94
|
-
react_1.default.createElement(EditableTypography_1.default, { value: view.displayName ||
|
|
95
|
-
// @ts-expect-error
|
|
96
|
-
`${((_a = view.assemblyNames) === null || _a === void 0 ? void 0 : _a.join(',')) || 'Untitled view'}${view.minimized ? ' (minimized)' : ''}`, setValue: val => view.setDisplayName(val), variant: "body2", classes: {
|
|
97
|
-
input: classes.input,
|
|
98
|
-
inputBase: classes.inputBase,
|
|
99
|
-
inputRoot: classes.inputRoot,
|
|
100
|
-
inputFocused: classes.inputFocused,
|
|
101
|
-
} })),
|
|
70
|
+
react_1.default.createElement(ViewContainerTitle_1.default, { view: view }),
|
|
102
71
|
react_1.default.createElement("div", { className: classes.grow }),
|
|
103
72
|
react_1.default.createElement(material_1.IconButton, { "data-testid": "minimize_view", onClick: onMinimize }, view.minimized ? (react_1.default.createElement(Add_1.default, { className: classes.icon, fontSize: "small" })) : (react_1.default.createElement(Minimize_1.default, { className: classes.icon, fontSize: "small" }))),
|
|
104
73
|
react_1.default.createElement(material_1.IconButton, { "data-testid": "close_view", onClick: onClose },
|
|
105
74
|
react_1.default.createElement(Close_1.default, { className: classes.icon, fontSize: "small" }))),
|
|
106
75
|
react_1.default.createElement(material_1.Paper, null, children)));
|
|
107
76
|
});
|
|
108
|
-
exports.default = ViewContainer;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const react_1 = __importDefault(require("react"));
|
|
7
|
+
const material_1 = require("@mui/material");
|
|
8
|
+
const mui_1 = require("tss-react/mui");
|
|
9
|
+
const mobx_react_1 = require("mobx-react");
|
|
10
|
+
// locals
|
|
11
|
+
const EditableTypography_1 = __importDefault(require("./EditableTypography"));
|
|
12
|
+
const useStyles = (0, mui_1.makeStyles)()(theme => ({
|
|
13
|
+
input: {
|
|
14
|
+
paddingBottom: 0,
|
|
15
|
+
paddingTop: 2,
|
|
16
|
+
},
|
|
17
|
+
inputBase: {
|
|
18
|
+
color: theme.palette.secondary.contrastText,
|
|
19
|
+
},
|
|
20
|
+
inputRoot: {
|
|
21
|
+
'&:hover': {
|
|
22
|
+
backgroundColor: theme.palette.secondary.light,
|
|
23
|
+
},
|
|
24
|
+
},
|
|
25
|
+
inputFocused: {
|
|
26
|
+
borderColor: theme.palette.primary.main,
|
|
27
|
+
backgroundColor: theme.palette.secondary.light,
|
|
28
|
+
},
|
|
29
|
+
}));
|
|
30
|
+
exports.default = (0, mobx_react_1.observer)(function ViewContainerTitle({ view, }) {
|
|
31
|
+
var _a;
|
|
32
|
+
const { classes } = useStyles();
|
|
33
|
+
return (react_1.default.createElement(material_1.Tooltip, { title: "Rename view", arrow: true },
|
|
34
|
+
react_1.default.createElement(EditableTypography_1.default, { value: view.displayName ||
|
|
35
|
+
// @ts-expect-error
|
|
36
|
+
`${((_a = view.assemblyNames) === null || _a === void 0 ? void 0 : _a.join(',')) || 'Untitled view'}${view.minimized ? ' (minimized)' : ''}`, setValue: val => view.setDisplayName(val), variant: "body2", classes: {
|
|
37
|
+
input: classes.input,
|
|
38
|
+
inputBase: classes.inputBase,
|
|
39
|
+
inputRoot: classes.inputRoot,
|
|
40
|
+
inputFocused: classes.inputFocused,
|
|
41
|
+
} })));
|
|
42
|
+
});
|
package/ui/ViewLauncher.d.ts
CHANGED
package/ui/ViewMenu.d.ts
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
/// <reference types="react" />
|
|
2
1
|
import { SvgIconProps, IconButtonProps as IconButtonPropsType } from '@mui/material';
|
|
3
2
|
import { IBaseViewModel } from '../pluggableElementTypes/models';
|
|
4
3
|
declare const ViewMenu: ({ model, IconButtonProps, IconProps, }: {
|
|
5
4
|
model: IBaseViewModel;
|
|
6
|
-
IconButtonProps?: IconButtonPropsType
|
|
5
|
+
IconButtonProps?: IconButtonPropsType | undefined;
|
|
7
6
|
IconProps: SvgIconProps;
|
|
8
7
|
}) => JSX.Element;
|
|
9
8
|
export default ViewMenu;
|
package/ui/ViewPanel.d.ts
CHANGED
package/ui/react-colorful.d.ts
CHANGED
|
@@ -13,5 +13,5 @@ declare function Ce(r: any): e.FunctionComponentElement<any>;
|
|
|
13
13
|
declare function me(r: any): e.FunctionComponentElement<any>;
|
|
14
14
|
declare function pe(r: any): e.FunctionComponentElement<any>;
|
|
15
15
|
declare function X(e: any): void;
|
|
16
|
-
import e from
|
|
16
|
+
import e from 'react';
|
|
17
17
|
export { Ne as HexColorInput, J as HexColorPicker, oe as HslColorPicker, le as HslStringColorPicker, Z as HslaColorPicker, re as HslaStringColorPicker, de as HsvColorPicker, he as HsvStringColorPicker, se as HsvaColorPicker, ue as HsvaStringColorPicker, _e as RgbColorPicker, Ce as RgbStringColorPicker, me as RgbaColorPicker, pe as RgbaStringColorPicker, X as setNonce };
|
package/ui/theme.js
CHANGED
|
@@ -246,11 +246,6 @@ function createDefaultProps(theme) {
|
|
|
246
246
|
transitionDuration: 0,
|
|
247
247
|
},
|
|
248
248
|
},
|
|
249
|
-
MuiMenuList: {
|
|
250
|
-
defaultProps: {
|
|
251
|
-
dense: true,
|
|
252
|
-
},
|
|
253
|
-
},
|
|
254
249
|
MuiMenuItem: {
|
|
255
250
|
defaultProps: {
|
|
256
251
|
dense: true,
|
|
@@ -266,8 +261,6 @@ function createDefaultProps(theme) {
|
|
|
266
261
|
styleOverrides: {
|
|
267
262
|
// the default link color uses theme.palette.primary.main which is
|
|
268
263
|
// very bad with dark mode+midnight primary
|
|
269
|
-
//
|
|
270
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
271
264
|
root: ({ theme }) => ({
|
|
272
265
|
color: theme.palette.text.secondary,
|
|
273
266
|
}),
|
|
@@ -282,10 +275,7 @@ function createDefaultProps(theme) {
|
|
|
282
275
|
// keeps the forest-green checkbox by default but for darkmode, uses
|
|
283
276
|
// a text-like coloring to ensure contrast
|
|
284
277
|
// xref https://stackoverflow.com/a/72546130/2129219
|
|
285
|
-
|
|
286
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
287
|
-
root: (props) => {
|
|
288
|
-
const { theme } = props;
|
|
278
|
+
root: ({ theme }) => {
|
|
289
279
|
return theme.palette.mode === 'dark'
|
|
290
280
|
? {
|
|
291
281
|
color: theme.palette.text.secondary,
|
|
@@ -306,10 +296,7 @@ function createDefaultProps(theme) {
|
|
|
306
296
|
// keeps the forest-green checkbox by default but for darkmode, uses
|
|
307
297
|
// a text-like coloring to ensure contrast
|
|
308
298
|
// xref https://stackoverflow.com/a/72546130/2129219
|
|
309
|
-
|
|
310
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
311
|
-
root: (props) => {
|
|
312
|
-
const { theme } = props;
|
|
299
|
+
root: ({ theme }) => {
|
|
313
300
|
return theme.palette.mode === 'dark'
|
|
314
301
|
? {
|
|
315
302
|
color: theme.palette.text.secondary,
|
|
@@ -331,9 +318,7 @@ function createDefaultProps(theme) {
|
|
|
331
318
|
// a text-like coloring to ensure contrast
|
|
332
319
|
// xref https://stackoverflow.com/a/72546130/2129219
|
|
333
320
|
//
|
|
334
|
-
|
|
335
|
-
root: (props) => {
|
|
336
|
-
const { theme } = props;
|
|
321
|
+
root: ({ theme }) => {
|
|
337
322
|
return theme.palette.mode === 'dark'
|
|
338
323
|
? {
|
|
339
324
|
color: theme.palette.text.secondary,
|
package/util/index.d.ts
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
1
2
|
import PluginManager from '../PluginManager';
|
|
2
|
-
import { IAnyStateTreeNode, IStateTreeNode } from 'mobx-state-tree';
|
|
3
|
+
import { IAnyStateTreeNode, IStateTreeNode, Instance } from 'mobx-state-tree';
|
|
3
4
|
import { IReactionPublic, IReactionOptions } from 'mobx';
|
|
4
5
|
import { Feature } from './simpleFeature';
|
|
5
6
|
import { AssemblyManager, Region, TypeTestedByPredicate } from './types';
|
|
7
|
+
import { Region as MUIRegion } from './types/mst';
|
|
6
8
|
import { BaseBlock } from './blockTypes';
|
|
7
9
|
export * from './types';
|
|
8
10
|
export * from './aborting';
|
|
@@ -14,12 +16,14 @@ export * from './offscreenCanvasUtils';
|
|
|
14
16
|
export declare const inDevelopment: boolean;
|
|
15
17
|
export declare const inProduction: boolean;
|
|
16
18
|
export declare function useDebounce<T>(value: T, delay: number): T;
|
|
19
|
+
export declare function useWidthSetter(view: {
|
|
20
|
+
setWidth: (arg: number) => void;
|
|
21
|
+
}, padding: string): import("react").RefObject<HTMLDivElement>;
|
|
17
22
|
export declare function useDebouncedCallback<T>(callback: (...args: T[]) => void, wait?: number): (...args: T[]) => void;
|
|
18
23
|
/** find the first node in the hierarchy that matches the given predicate */
|
|
19
24
|
export declare function findParentThat(node: IAnyStateTreeNode, predicate: (thing: IAnyStateTreeNode) => boolean): IAnyStateTreeNode;
|
|
20
25
|
export declare function springAnimate(fromValue: number, toValue: number, setValue: (value: number) => void, onFinish?: () => void, precision?: number, tension?: number, friction?: number): (() => void)[];
|
|
21
|
-
|
|
22
|
-
export declare function findParentThatIs<PREDICATE extends (thing: IAnyStateTreeNode) => boolean>(node: IAnyStateTreeNode, predicate: PREDICATE): TypeTestedByPredicate<PREDICATE> & IAnyStateTreeNode;
|
|
26
|
+
export declare function findParentThatIs<T extends (a: IAnyStateTreeNode) => boolean>(node: IAnyStateTreeNode, predicate: T): TypeTestedByPredicate<T> & IAnyStateTreeNode;
|
|
23
27
|
/** get the current JBrowse session model, starting at any node in the state tree */
|
|
24
28
|
export declare function getSession(node: IAnyStateTreeNode): import("./types").AbstractSessionModel & IAnyStateTreeNode;
|
|
25
29
|
/** get the state model of the view in the state tree that contains the given node */
|
|
@@ -162,6 +166,7 @@ export declare function iterMap<T, U>(iter: Iterable<T>, func: (arg: T) => U, si
|
|
|
162
166
|
* Otherwise, findLastIndex returns -1.
|
|
163
167
|
*/
|
|
164
168
|
export declare function findLastIndex<T>(array: Array<T>, predicate: (value: T, index: number, obj: T[]) => boolean): number;
|
|
169
|
+
export declare function findLast<T>(array: Array<T>, predicate: (value: T, index: number, obj: T[]) => boolean): T | undefined;
|
|
165
170
|
/**
|
|
166
171
|
* makes a mobx reaction with the given functions, that calls actions on the
|
|
167
172
|
* model for each stage of execution, and to abort the reaction function when
|
|
@@ -180,7 +185,7 @@ export declare function findLastIndex<T>(array: Array<T>, predicate: (value: T,
|
|
|
180
185
|
* @param errorFunction -
|
|
181
186
|
*/
|
|
182
187
|
export declare function makeAbortableReaction<T, U, V>(self: T, dataFunction: (arg: T) => U, asyncReactionFunction: (arg: U | undefined, signal: AbortSignal, model: T, handle: IReactionPublic) => Promise<V>, reactionOptions: IReactionOptions, startedFunction: (aborter: AbortController) => void, successFunction: (arg: V) => void, errorFunction: (err: unknown) => void): void;
|
|
183
|
-
export declare function renameRegionIfNeeded(refNameMap: Record<string, string>, region: Region): Region & {
|
|
188
|
+
export declare function renameRegionIfNeeded(refNameMap: Record<string, string>, region: Region | Instance<typeof MUIRegion>): Region & {
|
|
184
189
|
originalRefName?: string;
|
|
185
190
|
};
|
|
186
191
|
export declare function renameRegionsIfNeeded<ARGTYPE extends {
|
package/util/index.js
CHANGED
|
@@ -17,8 +17,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
17
17
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
18
18
|
};
|
|
19
19
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
-
exports.
|
|
21
|
-
exports.isFeature = exports.SimpleFeature = exports.avg = exports.sum = exports.min = exports.max = exports.localStorageSetItem = exports.localStorageGetItem = exports.getEnv = exports.measureGridWidth = exports.getStr = exports.getUriLink = exports.useLocalStorage = exports.getLayoutId = exports.getViewParams = exports.getTickDisplayStr = exports.toLocale = void 0;
|
|
20
|
+
exports.bytesForRegions = exports.objectHash = exports.hashCode = exports.updateStatus = exports.generateCodonTable = exports.defaultCodonTable = exports.defaultStops = exports.defaultStarts = exports.measureText = exports.rIC = exports.blobToDataURL = exports.complement = exports.reverse = exports.revcom = exports.isElectron = exports.stringify = exports.shorten = exports.minmax = exports.renameRegionsIfNeeded = exports.renameRegionIfNeeded = exports.makeAbortableReaction = exports.findLast = exports.findLastIndex = exports.iterMap = exports.bpSpanPx = exports.featureSpanPx = exports.cartesianToPolar = exports.polarToCartesian = exports.degToRad = exports.radToDeg = exports.bpToPx = exports.clamp = exports.compareLocStrings = exports.compareLocs = exports.parseLocString = exports.parseLocStringOneBased = exports.assembleLocStringFast = exports.assembleLocString = exports.getContainingDisplay = exports.getContainingTrack = exports.getContainingView = exports.getSession = exports.findParentThatIs = exports.springAnimate = exports.findParentThat = exports.useDebouncedCallback = exports.useWidthSetter = exports.useDebounce = exports.inProduction = exports.inDevelopment = void 0;
|
|
21
|
+
exports.isFeature = exports.SimpleFeature = exports.avg = exports.sum = exports.min = exports.max = exports.localStorageSetItem = exports.localStorageGetItem = exports.getEnv = exports.measureGridWidth = exports.getStr = exports.getUriLink = exports.useLocalStorage = exports.getLayoutId = exports.getViewParams = exports.getTickDisplayStr = exports.toLocale = exports.getBpDisplayStr = exports.supportedIndexingAdapters = void 0;
|
|
22
22
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
23
23
|
const react_1 = require("react");
|
|
24
24
|
const is_object_1 = __importDefault(require("is-object"));
|
|
@@ -27,6 +27,7 @@ const mobx_1 = require("mobx");
|
|
|
27
27
|
const types_1 = require("./types");
|
|
28
28
|
const aborting_1 = require("./aborting");
|
|
29
29
|
const types_2 = require("./types");
|
|
30
|
+
const useMeasure_1 = __importDefault(require("@jbrowse/core/util/useMeasure"));
|
|
30
31
|
__exportStar(require("./types"), exports);
|
|
31
32
|
__exportStar(require("./aborting"), exports);
|
|
32
33
|
__exportStar(require("./when"), exports);
|
|
@@ -51,6 +52,20 @@ function useDebounce(value, delay) {
|
|
|
51
52
|
return debouncedValue;
|
|
52
53
|
}
|
|
53
54
|
exports.useDebounce = useDebounce;
|
|
55
|
+
// used in ViewContainer files to get the width
|
|
56
|
+
function useWidthSetter(view, padding) {
|
|
57
|
+
const [ref, { width }] = (0, useMeasure_1.default)();
|
|
58
|
+
(0, react_1.useEffect)(() => {
|
|
59
|
+
if (width && (0, mobx_state_tree_1.isAlive)(view)) {
|
|
60
|
+
// sets after a requestAnimationFrame
|
|
61
|
+
// https://stackoverflow.com/a/58701523/2129219
|
|
62
|
+
// avoids ResizeObserver loop error being shown during development
|
|
63
|
+
requestAnimationFrame(() => view.setWidth(width - Number.parseInt(padding, 10) * 2));
|
|
64
|
+
}
|
|
65
|
+
}, [padding, view, width]);
|
|
66
|
+
return ref;
|
|
67
|
+
}
|
|
68
|
+
exports.useWidthSetter = useWidthSetter;
|
|
54
69
|
// https://stackoverflow.com/questions/56283920/
|
|
55
70
|
function useDebouncedCallback(callback, wait = 400) {
|
|
56
71
|
// track args & timeout handle between calls
|
|
@@ -144,7 +159,7 @@ function springAnimate(fromValue, toValue, setValue, onFinish = () => { }, preci
|
|
|
144
159
|
];
|
|
145
160
|
}
|
|
146
161
|
exports.springAnimate = springAnimate;
|
|
147
|
-
|
|
162
|
+
// find the first node in the hierarchy that matches the given 'is' typescript type guard predicate
|
|
148
163
|
function findParentThatIs(node, predicate) {
|
|
149
164
|
return findParentThat(node, predicate);
|
|
150
165
|
}
|
|
@@ -519,6 +534,16 @@ function findLastIndex(array, predicate) {
|
|
|
519
534
|
return -1;
|
|
520
535
|
}
|
|
521
536
|
exports.findLastIndex = findLastIndex;
|
|
537
|
+
function findLast(array, predicate) {
|
|
538
|
+
let l = array.length;
|
|
539
|
+
while (l--) {
|
|
540
|
+
if (predicate(array[l], l, array)) {
|
|
541
|
+
return array[l];
|
|
542
|
+
}
|
|
543
|
+
}
|
|
544
|
+
return undefined;
|
|
545
|
+
}
|
|
546
|
+
exports.findLast = findLast;
|
|
522
547
|
/**
|
|
523
548
|
* makes a mobx reaction with the given functions, that calls actions on the
|
|
524
549
|
* model for each stage of execution, and to abort the reaction function when
|
|
@@ -598,8 +623,7 @@ function renameRegionIfNeeded(refNameMap, region) {
|
|
|
598
623
|
if (region && (refNameMap === null || refNameMap === void 0 ? void 0 : refNameMap[region.refName])) {
|
|
599
624
|
// clone the region so we don't modify it
|
|
600
625
|
region = (0, mobx_state_tree_1.isStateTreeNode)(region)
|
|
601
|
-
?
|
|
602
|
-
{ ...(0, mobx_state_tree_1.getSnapshot)(region) }
|
|
626
|
+
? { ...(0, mobx_state_tree_1.getSnapshot)(region) }
|
|
603
627
|
: { ...region };
|
|
604
628
|
// modify it directly in the container
|
|
605
629
|
const newRef = refNameMap[region.refName];
|
|
@@ -616,7 +640,7 @@ async function renameRegionsIfNeeded(assemblyManager, args) {
|
|
|
616
640
|
throw new Error('sessionId is required');
|
|
617
641
|
}
|
|
618
642
|
const assemblyNames = regions.map(region => region.assemblyName);
|
|
619
|
-
const assemblyMaps = Object.fromEntries(await Promise.all(assemblyNames.map(async (assemblyName) => {
|
|
643
|
+
const assemblyMaps = Object.fromEntries(await Promise.all([...new Set(assemblyNames)].map(async (assemblyName) => {
|
|
620
644
|
return [
|
|
621
645
|
assemblyName,
|
|
622
646
|
await assemblyManager.getRefNameMapForAdapter(adapterConfig, assemblyName, args),
|
package/util/io/index.d.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { GenericFilehandle, Fetcher } from 'generic-filehandle';
|
|
2
|
-
import { FileLocation } from '../types';
|
|
2
|
+
import { FileLocation, UriLocation } from '../types';
|
|
3
3
|
import PluginManager from '../../PluginManager';
|
|
4
|
+
/** if a UriLocation has a baseUri, resolves its uri with respect to that base */
|
|
5
|
+
export declare function resolveUriLocation(location: UriLocation): UriLocation;
|
|
4
6
|
export declare function openLocation(location: FileLocation, pluginManager?: PluginManager): GenericFilehandle;
|
|
5
7
|
export declare function getFetcher(location: FileLocation, pluginManager?: PluginManager): Fetcher;
|
|
6
8
|
export { RemoteFileWithRangeCache } from './RemoteFileWithRangeCache';
|