@jbrowse/core 1.6.5 → 1.6.8
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.js +1 -3
- package/BaseFeatureWidget/index.d.ts +1 -1
- package/PluginLoader.d.ts +1 -1
- package/PluginManager.d.ts +4 -2
- package/ReExports/modules.d.ts +4 -2
- package/TextSearch/TextSearchManager.d.ts +2 -2
- package/assemblyManager/assemblyConfigSchema.d.ts +1 -1
- package/assemblyManager/assemblyManager.d.ts +22 -22
- package/configuration/index.d.ts +1 -1
- package/configuration/util.js +1 -5
- package/data_adapters/BaseAdapter.d.ts +2 -1
- package/data_adapters/BaseAdapter.js +90 -110
- package/data_adapters/CytobandAdapter.d.ts +1 -1
- package/package.json +2 -2
- package/pluggableElementTypes/RpcMethodType.js +1 -1
- package/pluggableElementTypes/models/InternetAccountModel.d.ts +103 -7
- package/pluggableElementTypes/models/InternetAccountModel.js +296 -10
- package/pluggableElementTypes/models/baseConnectionConfig.d.ts +1 -1
- package/pluggableElementTypes/models/baseInternetAccountConfig.d.ts +1 -1
- package/pluggableElementTypes/models/baseInternetAccountConfig.js +16 -1
- package/pluggableElementTypes/models/baseTrackConfig.d.ts +1 -1
- package/pluggableElementTypes/renderers/ComparativeServerSideRendererType.d.ts +1 -0
- package/pluggableElementTypes/renderers/ComparativeServerSideRendererType.js +46 -22
- package/pluggableElementTypes/renderers/FeatureRendererType.js +14 -19
- package/rpc/BaseRpcDriver.d.ts +7 -8
- package/rpc/BaseRpcDriver.js +151 -87
- package/rpc/BaseRpcDriver.test.js +55 -36
- package/rpc/MainThreadRpcDriver.d.ts +1 -1
- package/rpc/MainThreadRpcDriver.js +25 -16
- package/rpc/RpcManager.d.ts +1 -1
- package/rpc/RpcManager.js +29 -11
- package/rpc/WebWorkerRpcDriver.d.ts +1 -1
- package/rpc/WebWorkerRpcDriver.js +43 -11
- package/rpc/configSchema.d.ts +1 -1
- package/rpc/configSchema.js +14 -6
- package/ui/ErrorMessage.js +23 -8
- package/ui/FileSelector/FileSelector.js +1 -1
- package/ui/ReturnToImportFormDialog.d.ts +9 -0
- package/ui/ReturnToImportFormDialog.js +63 -0
- package/ui/Tooltip.d.ts +1 -1
- package/ui/Tooltip.js +2 -2
- package/ui/index.d.ts +2 -0
- package/ui/index.js +18 -0
- package/ui/theme.d.ts +8 -0
- package/ui/theme.js +9 -0
- package/ui/theme.test.js +2 -2
- package/util/Base1DViewModel.d.ts +2 -0
- package/util/Base1DViewModel.js +9 -0
- package/util/index.d.ts +7 -4
- package/util/index.js +67 -31
- package/util/index.test.js +35 -14
- package/util/io/index.d.ts +2 -1
- package/util/io/index.js +97 -86
- package/util/offscreenCanvasPonyfill.js +2 -2
- package/util/simpleFeature.d.ts +4 -0
- package/util/tracks.js +4 -1
- package/util/types/index.d.ts +2 -2
- package/util/types/index.js +3 -3
package/rpc/RpcManager.js
CHANGED
|
@@ -25,6 +25,10 @@ var _WebWorkerRpcDriver = _interopRequireDefault(require("./WebWorkerRpcDriver")
|
|
|
25
25
|
|
|
26
26
|
var _MainThreadRpcDriver = _interopRequireDefault(require("./MainThreadRpcDriver"));
|
|
27
27
|
|
|
28
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
29
|
+
|
|
30
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
31
|
+
|
|
28
32
|
var DriverClasses = {
|
|
29
33
|
WebWorkerRpcDriver: _WebWorkerRpcDriver.default,
|
|
30
34
|
MainThreadRpcDriver: _MainThreadRpcDriver.default
|
|
@@ -54,21 +58,35 @@ var RpcManager = /*#__PURE__*/function () {
|
|
|
54
58
|
return driver;
|
|
55
59
|
}
|
|
56
60
|
|
|
57
|
-
var
|
|
58
|
-
var
|
|
61
|
+
var newDriver;
|
|
62
|
+
var config = this.mainConfiguration.drivers.get('WebWorkerRpcDriver');
|
|
59
63
|
|
|
60
|
-
if (
|
|
61
|
-
|
|
62
|
-
}
|
|
64
|
+
if (backendName === 'MainThreadRpcDriver') {
|
|
65
|
+
var backendConfiguration = this.backendConfigurations.MainThreadRpcDriver;
|
|
63
66
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
+
if (!backendConfiguration) {
|
|
68
|
+
throw new Error("requested RPC driver \"".concat(backendName, "\" is missing config"));
|
|
69
|
+
}
|
|
67
70
|
|
|
71
|
+
newDriver = new _MainThreadRpcDriver.default(_objectSpread(_objectSpread({}, backendConfiguration), {}, {
|
|
72
|
+
config: config
|
|
73
|
+
}));
|
|
74
|
+
} else if (backendName === 'WebWorkerRpcDriver') {
|
|
75
|
+
var _backendConfiguration = this.backendConfigurations.WebWorkerRpcDriver;
|
|
76
|
+
|
|
77
|
+
if (!_backendConfiguration) {
|
|
78
|
+
throw new Error("requested RPC driver \"".concat(backendName, "\" is missing config"));
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
newDriver = new _WebWorkerRpcDriver.default(_objectSpread(_objectSpread({}, _backendConfiguration), {}, {
|
|
82
|
+
config: config
|
|
83
|
+
}), {
|
|
84
|
+
plugins: this.pluginManager.runtimePluginDefinitions
|
|
85
|
+
});
|
|
86
|
+
} else {
|
|
87
|
+
throw new Error("requested RPC driver \"".concat(backendName, "\" is not installed"));
|
|
88
|
+
}
|
|
68
89
|
|
|
69
|
-
var newDriver = new DriverClassImpl(backendConfiguration, {
|
|
70
|
-
plugins: this.pluginManager.runtimePluginDefinitions
|
|
71
|
-
});
|
|
72
90
|
this.driverObjects.set(backendName, newDriver);
|
|
73
91
|
return newDriver;
|
|
74
92
|
}
|
|
@@ -24,6 +24,6 @@ export default class WebWorkerRpcDriver extends BaseRpcDriver {
|
|
|
24
24
|
constructor(args: WebWorkerRpcDriverConstructorArgs, workerBootConfiguration: {
|
|
25
25
|
plugins: PluginDefinition[];
|
|
26
26
|
});
|
|
27
|
-
makeWorker(): WebWorkerHandle
|
|
27
|
+
makeWorker(): Promise<WebWorkerHandle>;
|
|
28
28
|
}
|
|
29
29
|
export {};
|
|
@@ -123,17 +123,49 @@ var WebWorkerRpcDriver = /*#__PURE__*/function (_BaseRpcDriver) {
|
|
|
123
123
|
|
|
124
124
|
(0, _createClass2.default)(WebWorkerRpcDriver, [{
|
|
125
125
|
key: "makeWorker",
|
|
126
|
-
value: function
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
126
|
+
value: function () {
|
|
127
|
+
var _makeWorker = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2() {
|
|
128
|
+
var _this2 = this;
|
|
129
|
+
|
|
130
|
+
var worker, p;
|
|
131
|
+
return _regenerator.default.wrap(function _callee2$(_context2) {
|
|
132
|
+
while (1) {
|
|
133
|
+
switch (_context2.prev = _context2.next) {
|
|
134
|
+
case 0:
|
|
135
|
+
// note that we are making a Rpc.Client connection with a worker pool of
|
|
136
|
+
// one for each worker, because we want to do our own state-group-aware
|
|
137
|
+
// load balancing rather than using librpc's builtin round-robin
|
|
138
|
+
worker = new WebWorkerHandle({
|
|
139
|
+
workers: [new this.WorkerClass()]
|
|
140
|
+
}); // send the worker its boot configuration using info from the pluginManager
|
|
141
|
+
|
|
142
|
+
p = new Promise(function (resolve, reject) {
|
|
143
|
+
worker.workers[0].onmessage = function (e) {
|
|
144
|
+
if (e.data === 'ready') {
|
|
145
|
+
resolve(worker);
|
|
146
|
+
} else if (e.data === 'readyForConfig') {
|
|
147
|
+
worker.workers[0].postMessage(_this2.workerBootConfiguration);
|
|
148
|
+
} else {
|
|
149
|
+
reject();
|
|
150
|
+
}
|
|
151
|
+
};
|
|
152
|
+
});
|
|
153
|
+
return _context2.abrupt("return", p);
|
|
154
|
+
|
|
155
|
+
case 3:
|
|
156
|
+
case "end":
|
|
157
|
+
return _context2.stop();
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}, _callee2, this);
|
|
161
|
+
}));
|
|
162
|
+
|
|
163
|
+
function makeWorker() {
|
|
164
|
+
return _makeWorker.apply(this, arguments);
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
return makeWorker;
|
|
168
|
+
}()
|
|
137
169
|
}]);
|
|
138
170
|
return WebWorkerRpcDriver;
|
|
139
171
|
}(_BaseRpcDriver2.default);
|
package/rpc/configSchema.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
declare const _default: import("../configuration
|
|
1
|
+
declare const _default: import("../configuration").AnyConfigurationSchemaType;
|
|
2
2
|
export default _default;
|
package/rpc/configSchema.js
CHANGED
|
@@ -9,14 +9,22 @@ var _mobxStateTree = require("mobx-state-tree");
|
|
|
9
9
|
|
|
10
10
|
var _configuration = require("../configuration");
|
|
11
11
|
|
|
12
|
-
var
|
|
12
|
+
var BaseRpcDriverConfigSchema = (0, _configuration.ConfigurationSchema)('BaseRpcDriver', {
|
|
13
|
+
workerCount: {
|
|
14
|
+
type: 'number',
|
|
15
|
+
description: 'The number of workers to use. If 0 (the default) JBrowse will decide how many workers to use.',
|
|
16
|
+
defaultValue: 0
|
|
17
|
+
}
|
|
18
|
+
}, {
|
|
13
19
|
explicitlyTyped: true
|
|
14
20
|
});
|
|
15
|
-
var
|
|
16
|
-
explicitlyTyped: true
|
|
21
|
+
var MainThreadRpcDriverConfigSchema = (0, _configuration.ConfigurationSchema)('MainThreadRpcDriver', {}, {
|
|
22
|
+
explicitlyTyped: true,
|
|
23
|
+
baseConfiguration: BaseRpcDriverConfigSchema
|
|
17
24
|
});
|
|
18
|
-
var
|
|
19
|
-
explicitlyTyped: true
|
|
25
|
+
var WebWorkerRpcDriverConfigSchema = (0, _configuration.ConfigurationSchema)('WebWorkerRpcDriver', {}, {
|
|
26
|
+
explicitlyTyped: true,
|
|
27
|
+
baseConfiguration: BaseRpcDriverConfigSchema
|
|
20
28
|
});
|
|
21
29
|
|
|
22
30
|
var _default = (0, _configuration.ConfigurationSchema)('RpcOptions', {
|
|
@@ -25,7 +33,7 @@ var _default = (0, _configuration.ConfigurationSchema)('RpcOptions', {
|
|
|
25
33
|
description: 'the RPC driver to use for tracks and tasks that are not configured to use a specific RPC backend',
|
|
26
34
|
defaultValue: 'MainThreadRpcDriver'
|
|
27
35
|
},
|
|
28
|
-
drivers: _mobxStateTree.types.optional(_mobxStateTree.types.map(_mobxStateTree.types.union(MainThreadRpcDriverConfigSchema, WebWorkerRpcDriverConfigSchema
|
|
36
|
+
drivers: _mobxStateTree.types.optional(_mobxStateTree.types.map(_mobxStateTree.types.union(MainThreadRpcDriverConfigSchema, WebWorkerRpcDriverConfigSchema)), {
|
|
29
37
|
MainThreadRpcDriver: {
|
|
30
38
|
type: 'MainThreadRpcDriver'
|
|
31
39
|
}
|
package/ui/ErrorMessage.js
CHANGED
|
@@ -32,22 +32,37 @@ var useStyles = (0, _core.makeStyles)(function (theme) {
|
|
|
32
32
|
var ErrorMessage = function ErrorMessage(_ref) {
|
|
33
33
|
var error = _ref.error;
|
|
34
34
|
var classes = useStyles();
|
|
35
|
+
var snapshotError = '';
|
|
35
36
|
var str = "".concat(error);
|
|
36
|
-
var
|
|
37
|
-
|
|
37
|
+
var findStr = 'is not assignable';
|
|
38
|
+
var idx = str.indexOf(findStr);
|
|
38
39
|
|
|
39
|
-
|
|
40
|
+
if (idx !== -1) {
|
|
41
|
+
var trim = str.slice(0, idx + findStr.length); // best effort to make a better error message than the default
|
|
42
|
+
// mobx-state-tree
|
|
43
|
+
// case 1. element has a path
|
|
40
44
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
45
|
+
var match = trim.match(/.*at path "(.*)" snapshot `(.*)` is not assignable/m);
|
|
46
|
+
|
|
47
|
+
if (match) {
|
|
48
|
+
str = "Failed to load element at ".concat(match[1], "...Failed element had snapshot");
|
|
49
|
+
snapshotError = match[2];
|
|
50
|
+
} // case 2. element has no path
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
var match2 = trim.match(/.*snapshot `(.*)` is not assignable/);
|
|
54
|
+
|
|
55
|
+
if (match2) {
|
|
56
|
+
str = "Failed to load element...Failed element had snapshot";
|
|
57
|
+
snapshotError = match2[1];
|
|
58
|
+
}
|
|
44
59
|
}
|
|
45
60
|
|
|
46
61
|
return /*#__PURE__*/_react.default.createElement("div", {
|
|
47
62
|
className: classes.message
|
|
48
|
-
}, str.slice(0, 10000), snapshotError ? /*#__PURE__*/_react.default.createElement("
|
|
63
|
+
}, str.slice(0, 10000), snapshotError ? /*#__PURE__*/_react.default.createElement("pre", {
|
|
49
64
|
className: classes.errorBox
|
|
50
|
-
}, JSON.stringify(JSON.parse(snapshotError), null, 2))
|
|
65
|
+
}, JSON.stringify(JSON.parse(snapshotError), null, 2)) : null);
|
|
51
66
|
};
|
|
52
67
|
|
|
53
68
|
var _default = ErrorMessage;
|
|
@@ -159,7 +159,7 @@ var FileSelector = (0, _mobxReact.observer)(function (props) {
|
|
|
159
159
|
value: internetAccountId,
|
|
160
160
|
"aria-label": name,
|
|
161
161
|
title: name
|
|
162
|
-
}, shorten(toggleContents || name, 5));
|
|
162
|
+
}, typeof toggleContents === 'string' ? shorten(toggleContents, 5) : toggleContents || shorten(name, 5));
|
|
163
163
|
}), hiddenAccts.length ? /*#__PURE__*/_react.default.createElement(_lab.ToggleButton, {
|
|
164
164
|
onClick: function onClick(event) {
|
|
165
165
|
return setAnchorEl(event.target);
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
declare function ReturnToImportFormDialog({ model, handleClose, }: {
|
|
3
|
+
model: {
|
|
4
|
+
clearView: Function;
|
|
5
|
+
};
|
|
6
|
+
handleClose: () => void;
|
|
7
|
+
}): JSX.Element;
|
|
8
|
+
declare const _default: typeof ReturnToImportFormDialog;
|
|
9
|
+
export default _default;
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.default = void 0;
|
|
9
|
+
|
|
10
|
+
var _react = _interopRequireDefault(require("react"));
|
|
11
|
+
|
|
12
|
+
var _mobxReact = require("mobx-react");
|
|
13
|
+
|
|
14
|
+
var _styles = require("@material-ui/core/styles");
|
|
15
|
+
|
|
16
|
+
var _core = require("@material-ui/core");
|
|
17
|
+
|
|
18
|
+
var _Close = _interopRequireDefault(require("@material-ui/icons/Close"));
|
|
19
|
+
|
|
20
|
+
var useStyles = (0, _styles.makeStyles)(function (theme) {
|
|
21
|
+
return {
|
|
22
|
+
closeButton: {
|
|
23
|
+
position: 'absolute',
|
|
24
|
+
right: theme.spacing(1),
|
|
25
|
+
top: theme.spacing(1),
|
|
26
|
+
color: theme.palette.grey[500]
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
function ReturnToImportFormDialog(_ref) {
|
|
32
|
+
var model = _ref.model,
|
|
33
|
+
handleClose = _ref.handleClose;
|
|
34
|
+
var classes = useStyles();
|
|
35
|
+
return /*#__PURE__*/_react.default.createElement(_core.Dialog, {
|
|
36
|
+
maxWidth: "xl",
|
|
37
|
+
open: true,
|
|
38
|
+
onClose: handleClose
|
|
39
|
+
}, /*#__PURE__*/_react.default.createElement(_core.DialogTitle, null, "Reference sequence", handleClose ? /*#__PURE__*/_react.default.createElement(_core.IconButton, {
|
|
40
|
+
className: classes.closeButton,
|
|
41
|
+
onClick: function onClick() {
|
|
42
|
+
return handleClose();
|
|
43
|
+
}
|
|
44
|
+
}, /*#__PURE__*/_react.default.createElement(_Close.default, null)) : null), /*#__PURE__*/_react.default.createElement(_core.Divider, null), /*#__PURE__*/_react.default.createElement(_core.DialogContent, null, /*#__PURE__*/_react.default.createElement(_core.Typography, null, "Are you sure you want to return to the import form? This will lose your current view")), /*#__PURE__*/_react.default.createElement(_core.DialogActions, null, /*#__PURE__*/_react.default.createElement(_core.Button, {
|
|
45
|
+
onClick: function onClick() {
|
|
46
|
+
model.clearView();
|
|
47
|
+
handleClose();
|
|
48
|
+
},
|
|
49
|
+
variant: "contained",
|
|
50
|
+
color: "primary",
|
|
51
|
+
autoFocus: true
|
|
52
|
+
}, "OK"), /*#__PURE__*/_react.default.createElement(_core.Button, {
|
|
53
|
+
onClick: function onClick() {
|
|
54
|
+
return handleClose();
|
|
55
|
+
},
|
|
56
|
+
color: "secondary",
|
|
57
|
+
variant: "contained"
|
|
58
|
+
}, "Cancel")));
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
var _default = (0, _mobxReact.observer)(ReturnToImportFormDialog);
|
|
62
|
+
|
|
63
|
+
exports.default = _default;
|
package/ui/Tooltip.d.ts
CHANGED
|
@@ -5,7 +5,7 @@ declare const _default: ({ offsetX, offsetY, configuration, feature, timeout, }:
|
|
|
5
5
|
offsetY: number;
|
|
6
6
|
configuration: import("mobx-state-tree").ModelInstanceTypeProps<Record<string, any>> & {
|
|
7
7
|
setSubschema(slotName: string, data: unknown): any;
|
|
8
|
-
} & import("mobx-state-tree").IStateTreeNode<import("../configuration
|
|
8
|
+
} & import("mobx-state-tree").IStateTreeNode<import("../configuration").AnyConfigurationSchemaType>;
|
|
9
9
|
feature?: Feature | undefined;
|
|
10
10
|
timeout?: number | undefined;
|
|
11
11
|
}) => JSX.Element | null;
|
package/ui/Tooltip.js
CHANGED
|
@@ -13,7 +13,7 @@ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/sli
|
|
|
13
13
|
|
|
14
14
|
var _react = _interopRequireWildcard(require("react"));
|
|
15
15
|
|
|
16
|
-
var
|
|
16
|
+
var _core = require("@material-ui/core");
|
|
17
17
|
|
|
18
18
|
var _mobxReact = require("mobx-react");
|
|
19
19
|
|
|
@@ -23,7 +23,7 @@ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "functio
|
|
|
23
23
|
|
|
24
24
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
25
25
|
|
|
26
|
-
var useStyles = (0,
|
|
26
|
+
var useStyles = (0, _core.makeStyles)({
|
|
27
27
|
hoverLabel: {
|
|
28
28
|
border: '1px solid black',
|
|
29
29
|
position: 'absolute',
|
package/ui/index.d.ts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
export * from './theme';
|
|
2
2
|
export { LogoFull, Logomark } from './Logo';
|
|
3
3
|
export { default as App } from './App';
|
|
4
|
+
export { default as ReturnToImportFormDialog } from './ReturnToImportFormDialog';
|
|
4
5
|
export { default as ErrorMessage } from './ErrorMessage';
|
|
6
|
+
export { default as AssemblySelector } from './AssemblySelector';
|
|
5
7
|
export { default as FileSelector } from './FileSelector';
|
|
6
8
|
export { default as PrerenderedCanvas } from './PrerenderedCanvas';
|
|
7
9
|
export { default as ResizeHandle } from './ResizeHandle';
|
package/ui/index.js
CHANGED
|
@@ -11,7 +11,9 @@ var _exportNames = {
|
|
|
11
11
|
LogoFull: true,
|
|
12
12
|
Logomark: true,
|
|
13
13
|
App: true,
|
|
14
|
+
ReturnToImportFormDialog: true,
|
|
14
15
|
ErrorMessage: true,
|
|
16
|
+
AssemblySelector: true,
|
|
15
17
|
FileSelector: true,
|
|
16
18
|
PrerenderedCanvas: true,
|
|
17
19
|
ResizeHandle: true,
|
|
@@ -28,6 +30,12 @@ Object.defineProperty(exports, "App", {
|
|
|
28
30
|
return _App.default;
|
|
29
31
|
}
|
|
30
32
|
});
|
|
33
|
+
Object.defineProperty(exports, "AssemblySelector", {
|
|
34
|
+
enumerable: true,
|
|
35
|
+
get: function get() {
|
|
36
|
+
return _AssemblySelector.default;
|
|
37
|
+
}
|
|
38
|
+
});
|
|
31
39
|
Object.defineProperty(exports, "EditableTypography", {
|
|
32
40
|
enumerable: true,
|
|
33
41
|
get: function get() {
|
|
@@ -88,6 +96,12 @@ Object.defineProperty(exports, "ResizeHandle", {
|
|
|
88
96
|
return _ResizeHandle.default;
|
|
89
97
|
}
|
|
90
98
|
});
|
|
99
|
+
Object.defineProperty(exports, "ReturnToImportFormDialog", {
|
|
100
|
+
enumerable: true,
|
|
101
|
+
get: function get() {
|
|
102
|
+
return _ReturnToImportFormDialog.default;
|
|
103
|
+
}
|
|
104
|
+
});
|
|
91
105
|
Object.defineProperty(exports, "SanitizedHTML", {
|
|
92
106
|
enumerable: true,
|
|
93
107
|
get: function get() {
|
|
@@ -119,8 +133,12 @@ var _Logo = require("./Logo");
|
|
|
119
133
|
|
|
120
134
|
var _App = _interopRequireDefault(require("./App"));
|
|
121
135
|
|
|
136
|
+
var _ReturnToImportFormDialog = _interopRequireDefault(require("./ReturnToImportFormDialog"));
|
|
137
|
+
|
|
122
138
|
var _ErrorMessage = _interopRequireDefault(require("./ErrorMessage"));
|
|
123
139
|
|
|
140
|
+
var _AssemblySelector = _interopRequireDefault(require("./AssemblySelector"));
|
|
141
|
+
|
|
124
142
|
var _FileSelector = _interopRequireDefault(require("./FileSelector"));
|
|
125
143
|
|
|
126
144
|
var _PrerenderedCanvas = _interopRequireDefault(require("./PrerenderedCanvas"));
|
package/ui/theme.d.ts
CHANGED
|
@@ -115,6 +115,14 @@ export declare function createJBrowseDefaultOverrides(palette?: PaletteOptions):
|
|
|
115
115
|
color: string;
|
|
116
116
|
};
|
|
117
117
|
};
|
|
118
|
+
MuiAccordion: {
|
|
119
|
+
root: {
|
|
120
|
+
margin: number;
|
|
121
|
+
'&$expanded': {
|
|
122
|
+
margin: number;
|
|
123
|
+
};
|
|
124
|
+
};
|
|
125
|
+
};
|
|
118
126
|
MuiAccordionSummary: {
|
|
119
127
|
root: {
|
|
120
128
|
backgroundColor: string;
|
package/ui/theme.js
CHANGED
|
@@ -137,6 +137,15 @@ function createJBrowseDefaultOverrides() {
|
|
|
137
137
|
color: generatedPalette.tertiary.main
|
|
138
138
|
}
|
|
139
139
|
},
|
|
140
|
+
MuiAccordion: {
|
|
141
|
+
root: {
|
|
142
|
+
// avoid extra padding around accordion element
|
|
143
|
+
margin: 0,
|
|
144
|
+
'&$expanded': {
|
|
145
|
+
margin: 0
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
},
|
|
140
149
|
MuiAccordionSummary: {
|
|
141
150
|
root: {
|
|
142
151
|
// !important needed to combat the MuiButton being applied to
|
package/ui/theme.test.js
CHANGED
|
@@ -62,7 +62,7 @@ describe('theme utils', function () {
|
|
|
62
62
|
}
|
|
63
63
|
});
|
|
64
64
|
expect((_theme$overrides = theme.overrides) === null || _theme$overrides === void 0 ? void 0 : _theme$overrides.MuiPaper).toEqual(muiPaperStyle);
|
|
65
|
-
expect(Object.keys(theme.overrides || {}).length).toBe(
|
|
65
|
+
expect(Object.keys(theme.overrides || {}).length).toBe(10);
|
|
66
66
|
});
|
|
67
67
|
it('allows modifying a default override', function () {
|
|
68
68
|
var _theme$overrides2;
|
|
@@ -78,7 +78,7 @@ describe('theme utils', function () {
|
|
|
78
78
|
}
|
|
79
79
|
});
|
|
80
80
|
expect((_theme$overrides2 = theme.overrides) === null || _theme$overrides2 === void 0 ? void 0 : _theme$overrides2.MuiButton).toEqual(muiButtonStyle);
|
|
81
|
-
expect(Object.keys(theme.overrides || {}).length).toBe(
|
|
81
|
+
expect(Object.keys(theme.overrides || {}).length).toBe(9);
|
|
82
82
|
});
|
|
83
83
|
it('allows adding a custom prop', function () {
|
|
84
84
|
var _theme$props;
|
|
@@ -9,6 +9,7 @@ export interface BpOffset {
|
|
|
9
9
|
end?: number;
|
|
10
10
|
}
|
|
11
11
|
declare const Base1DView: import("mobx-state-tree").IModelType<{
|
|
12
|
+
id: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
|
|
12
13
|
displayedRegions: import("mobx-state-tree").IArrayType<import("mobx-state-tree").IModelType<{
|
|
13
14
|
refName: import("mobx-state-tree").ISimpleType<string>;
|
|
14
15
|
start: import("mobx-state-tree").ISimpleType<number>;
|
|
@@ -32,6 +33,7 @@ declare const Base1DView: import("mobx-state-tree").IModelType<{
|
|
|
32
33
|
setVolatileWidth(width: number): void;
|
|
33
34
|
} & {
|
|
34
35
|
readonly width: number;
|
|
36
|
+
readonly assemblyNames: string[];
|
|
35
37
|
readonly displayedRegionsTotalPx: number;
|
|
36
38
|
readonly maxOffset: number;
|
|
37
39
|
readonly minOffset: number;
|
package/util/Base1DViewModel.js
CHANGED
|
@@ -9,6 +9,8 @@ exports.default = void 0;
|
|
|
9
9
|
|
|
10
10
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
11
11
|
|
|
12
|
+
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
13
|
+
|
|
12
14
|
var _mobxStateTree = require("mobx-state-tree");
|
|
13
15
|
|
|
14
16
|
var _index = require("./index");
|
|
@@ -24,6 +26,7 @@ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (O
|
|
|
24
26
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
25
27
|
|
|
26
28
|
var Base1DView = _mobxStateTree.types.model('Base1DView', {
|
|
29
|
+
id: _mst.ElementId,
|
|
27
30
|
displayedRegions: _mobxStateTree.types.array(_mst.Region),
|
|
28
31
|
bpPerPx: 0,
|
|
29
32
|
offsetPx: 0,
|
|
@@ -52,6 +55,12 @@ var Base1DView = _mobxStateTree.types.model('Base1DView', {
|
|
|
52
55
|
return self.volatileWidth;
|
|
53
56
|
},
|
|
54
57
|
|
|
58
|
+
get assemblyNames() {
|
|
59
|
+
return (0, _toConsumableArray2.default)(new Set(self.displayedRegions.map(function (region) {
|
|
60
|
+
return region.assemblyName;
|
|
61
|
+
})));
|
|
62
|
+
},
|
|
63
|
+
|
|
55
64
|
get displayedRegionsTotalPx() {
|
|
56
65
|
return this.totalBp / self.bpPerPx;
|
|
57
66
|
},
|
package/util/index.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { IAnyStateTreeNode } from 'mobx-state-tree';
|
|
2
2
|
import { IReactionPublic, IReactionOptions } from 'mobx';
|
|
3
3
|
import SimpleFeature, { Feature, isFeature } from './simpleFeature';
|
|
4
|
-
import {
|
|
4
|
+
import { AssemblyManager, Region, TypeTestedByPredicate } from './types';
|
|
5
|
+
export type { Feature };
|
|
5
6
|
export * from './types';
|
|
6
7
|
export * from './aborting';
|
|
7
8
|
export * from './when';
|
|
@@ -65,6 +66,7 @@ export interface ParsedLocString {
|
|
|
65
66
|
refName: string;
|
|
66
67
|
start?: number;
|
|
67
68
|
end?: number;
|
|
69
|
+
reversed?: boolean;
|
|
68
70
|
}
|
|
69
71
|
export declare function parseLocStringOneBased(locString: string, isValidRefName: (refName: string, assemblyName?: string) => boolean): ParsedLocString;
|
|
70
72
|
/**
|
|
@@ -120,9 +122,9 @@ export declare function clamp(num: number, min: number, max: number): number;
|
|
|
120
122
|
* @param region -
|
|
121
123
|
* @param bpPerPx -
|
|
122
124
|
*/
|
|
123
|
-
export declare function bpToPx(bp: number,
|
|
124
|
-
start
|
|
125
|
-
end
|
|
125
|
+
export declare function bpToPx(bp: number, { reversed, end, start, }: {
|
|
126
|
+
start?: number;
|
|
127
|
+
end?: number;
|
|
126
128
|
reversed?: boolean;
|
|
127
129
|
}, bpPerPx: number): number;
|
|
128
130
|
export declare function radToDeg(radians: number): number;
|
|
@@ -338,3 +340,4 @@ export declare function viewBpToPx({ refName, coord, regionNumber, self, }: {
|
|
|
338
340
|
index: number;
|
|
339
341
|
offsetPx: number;
|
|
340
342
|
} | undefined;
|
|
343
|
+
export declare function getBpDisplayStr(totalBp: number): string;
|