@jbrowse/plugin-linear-genome-view 1.6.7 → 1.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/BaseLinearDisplay/components/BaseLinearDisplay.js +232 -0
- package/dist/BaseLinearDisplay/components/Block.js +86 -0
- package/dist/BaseLinearDisplay/components/LinearBlocks.js +110 -0
- package/dist/BaseLinearDisplay/components/ServerSideRenderedBlockContent.js +192 -0
- package/dist/BaseLinearDisplay/index.js +41 -0
- package/dist/BaseLinearDisplay/models/BaseLinearDisplayModel.js +763 -0
- package/dist/BaseLinearDisplay/models/baseLinearDisplayConfigSchema.js +24 -0
- package/dist/BaseLinearDisplay/models/serverSideRenderedBlock.js +328 -0
- package/dist/LinearBareDisplay/configSchema.js +19 -0
- package/dist/LinearBareDisplay/index.js +21 -0
- package/dist/LinearBareDisplay/index.test.js +33 -0
- package/dist/LinearBareDisplay/model.d.ts +7 -7
- package/dist/LinearBareDisplay/model.js +44 -0
- package/dist/LinearBasicDisplay/components/SetMaxHeight.js +94 -0
- package/dist/LinearBasicDisplay/configSchema.js +25 -0
- package/dist/LinearBasicDisplay/index.js +23 -0
- package/dist/LinearBasicDisplay/model.d.ts +7 -7
- package/dist/LinearBasicDisplay/model.js +162 -0
- package/dist/LinearGenomeView/components/CenterLine.js +80 -0
- package/dist/LinearGenomeView/components/ExportSvgDialog.js +137 -0
- package/dist/LinearGenomeView/components/Header.js +144 -0
- package/dist/LinearGenomeView/components/HelpDialog.js +48 -0
- package/dist/LinearGenomeView/components/ImportForm.js +330 -0
- package/dist/LinearGenomeView/components/LinearGenomeView.js +129 -0
- package/dist/LinearGenomeView/components/LinearGenomeView.test.js +234 -0
- package/dist/LinearGenomeView/components/LinearGenomeViewSvg.js +349 -0
- package/dist/LinearGenomeView/components/MiniControls.js +83 -0
- package/dist/LinearGenomeView/components/OverviewRubberBand.js +310 -0
- package/dist/LinearGenomeView/components/OverviewScaleBar.d.ts +6 -6
- package/dist/LinearGenomeView/components/OverviewScaleBar.js +403 -0
- package/dist/LinearGenomeView/components/RefNameAutocomplete.js +331 -0
- package/dist/LinearGenomeView/components/RubberBand.js +309 -0
- package/dist/LinearGenomeView/components/Ruler.js +101 -0
- package/dist/LinearGenomeView/components/ScaleBar.js +184 -0
- package/dist/LinearGenomeView/components/ScaleBar.test.js +180 -0
- package/dist/LinearGenomeView/components/SearchBox.js +201 -0
- package/dist/LinearGenomeView/components/SearchResultsDialog.js +159 -0
- package/dist/LinearGenomeView/components/SequenceDialog.js +304 -0
- package/dist/LinearGenomeView/components/TrackContainer.js +179 -0
- package/dist/LinearGenomeView/components/TrackLabel.js +165 -0
- package/dist/LinearGenomeView/components/TracksContainer.js +214 -0
- package/dist/LinearGenomeView/components/VerticalGuides.js +116 -0
- package/dist/LinearGenomeView/components/ZoomControls.js +92 -0
- package/dist/LinearGenomeView/components/util.js +16 -0
- package/dist/LinearGenomeView/index.js +1418 -0
- package/dist/LinearGenomeView/index.test.js +1170 -0
- package/dist/LinearGenomeView/util.js +93 -0
- package/dist/LinearGenomeView/util.test.js +78 -0
- package/dist/index.d.ts +21 -21
- package/dist/index.js +293 -6
- package/dist/plugin-linear-genome-view.cjs.development.js +37 -22
- package/dist/plugin-linear-genome-view.cjs.development.js.map +1 -1
- package/dist/plugin-linear-genome-view.cjs.production.min.js +1 -1
- package/dist/plugin-linear-genome-view.cjs.production.min.js.map +1 -1
- package/dist/plugin-linear-genome-view.esm.js +37 -22
- package/dist/plugin-linear-genome-view.esm.js.map +1 -1
- package/package.json +4 -8
- package/src/BaseLinearDisplay/components/BaseLinearDisplay.tsx +9 -12
- package/src/BaseLinearDisplay/models/BaseLinearDisplayModel.tsx +2 -0
- package/src/BaseLinearDisplay/models/serverSideRenderedBlock.ts +10 -8
- package/src/LinearBasicDisplay/components/SetMaxHeight.tsx +21 -12
- package/src/LinearBasicDisplay/model.ts +17 -18
- package/src/LinearGenomeView/components/Header.tsx +1 -1
- package/src/LinearGenomeView/components/ImportForm.tsx +10 -4
- package/src/LinearGenomeView/components/LinearGenomeView.test.js +1 -0
- package/src/LinearGenomeView/components/OverviewScaleBar.tsx +2 -2
- package/src/LinearGenomeView/components/RubberBand.tsx +14 -24
- package/src/LinearGenomeView/components/ScaleBar.test.tsx +1 -0
- package/src/LinearGenomeView/components/ScaleBar.tsx +3 -6
- package/src/LinearGenomeView/components/SequenceDialog.tsx +1 -1
- package/src/LinearGenomeView/components/TrackContainer.tsx +31 -24
- package/src/LinearGenomeView/components/TrackLabel.tsx +1 -1
- package/src/LinearGenomeView/components/__snapshots__/LinearGenomeView.test.js.snap +23 -47
- package/src/LinearGenomeView/index.tsx +2 -3
|
@@ -27,7 +27,7 @@ declare const stateModelFactory: (configSchema: AnyConfigurationSchemaType) => i
|
|
|
27
27
|
renderInProgress: AbortController | undefined;
|
|
28
28
|
filled: boolean;
|
|
29
29
|
reactElement: import("react").ReactElement<any, string | ((props: any) => import("react").ReactElement<any, any> | null) | (new (props: any) => import("react").Component<any, any, any>)> | undefined;
|
|
30
|
-
features: Map<string, import("@jbrowse/core/util
|
|
30
|
+
features: Map<string, import("@jbrowse/core/util").Feature> | undefined;
|
|
31
31
|
layout: any;
|
|
32
32
|
status: string;
|
|
33
33
|
error: unknown;
|
|
@@ -45,7 +45,7 @@ declare const stateModelFactory: (configSchema: AnyConfigurationSchemaType) => i
|
|
|
45
45
|
setMessage(messageText: string): void;
|
|
46
46
|
setRendered(props: {
|
|
47
47
|
reactElement: import("react").ReactElement<any, string | ((props: any) => import("react").ReactElement<any, any> | null) | (new (props: any) => import("react").Component<any, any, any>)>;
|
|
48
|
-
features: Map<string, import("@jbrowse/core/util
|
|
48
|
+
features: Map<string, import("@jbrowse/core/util").Feature>;
|
|
49
49
|
layout: any;
|
|
50
50
|
maxHeightReached: boolean;
|
|
51
51
|
renderProps: any;
|
|
@@ -119,7 +119,7 @@ declare const stateModelFactory: (configSchema: AnyConfigurationSchemaType) => i
|
|
|
119
119
|
currBpPerPx: number;
|
|
120
120
|
message: string;
|
|
121
121
|
featureIdUnderMouse: string | undefined;
|
|
122
|
-
contextMenuFeature: import("@jbrowse/core/util
|
|
122
|
+
contextMenuFeature: import("@jbrowse/core/util").Feature | undefined;
|
|
123
123
|
scrollTop: number;
|
|
124
124
|
estimatedRegionStatsP: Promise<import("@jbrowse/core/data_adapters/BaseAdapter").Stats> | undefined;
|
|
125
125
|
estimatedRegionStats: import("@jbrowse/core/data_adapters/BaseAdapter").Stats | undefined;
|
|
@@ -132,8 +132,8 @@ declare const stateModelFactory: (configSchema: AnyConfigurationSchemaType) => i
|
|
|
132
132
|
readonly selectedFeatureId: string | undefined;
|
|
133
133
|
readonly DisplayMessageComponent: import("react").FC<any> | undefined;
|
|
134
134
|
} & {
|
|
135
|
-
readonly features: import("@jbrowse/core/util/compositeMap").default<string, import("@jbrowse/core/util
|
|
136
|
-
readonly featureUnderMouse: import("@jbrowse/core/util
|
|
135
|
+
readonly features: import("@jbrowse/core/util/compositeMap").default<string, import("@jbrowse/core/util").Feature>;
|
|
136
|
+
readonly featureUnderMouse: import("@jbrowse/core/util").Feature | undefined;
|
|
137
137
|
getFeatureOverlapping(blockKey: string, x: number, y: number): any;
|
|
138
138
|
getFeatureByID(blockKey: string, id: string): [number, number, number, number] | undefined;
|
|
139
139
|
searchFeatureByID(id: string): [number, number, number, number] | undefined;
|
|
@@ -160,11 +160,11 @@ declare const stateModelFactory: (configSchema: AnyConfigurationSchemaType) => i
|
|
|
160
160
|
addBlock(key: string, block: import("@jbrowse/core/util/blockTypes").BaseBlock): void;
|
|
161
161
|
setCurrBpPerPx(n: number): void;
|
|
162
162
|
deleteBlock(key: string): void;
|
|
163
|
-
selectFeature(feature: import("@jbrowse/core/util
|
|
163
|
+
selectFeature(feature: import("@jbrowse/core/util").Feature): void;
|
|
164
164
|
clearFeatureSelection(): void;
|
|
165
165
|
setFeatureIdUnderMouse(feature: string | undefined): void;
|
|
166
166
|
reload(): void;
|
|
167
|
-
setContextMenuFeature(feature?: import("@jbrowse/core/util
|
|
167
|
+
setContextMenuFeature(feature?: import("@jbrowse/core/util").Feature | undefined): void;
|
|
168
168
|
} & {
|
|
169
169
|
readonly regionTooLarge: boolean;
|
|
170
170
|
readonly regionTooLargeReason: string;
|
|
@@ -0,0 +1,162 @@
|
|
|
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 _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
|
|
11
|
+
|
|
12
|
+
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
13
|
+
|
|
14
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
15
|
+
|
|
16
|
+
var _react = require("react");
|
|
17
|
+
|
|
18
|
+
var _configuration = require("@jbrowse/core/configuration");
|
|
19
|
+
|
|
20
|
+
var _util = require("@jbrowse/core/util");
|
|
21
|
+
|
|
22
|
+
var _mobxStateTree = require("mobx-state-tree");
|
|
23
|
+
|
|
24
|
+
var _Visibility = _interopRequireDefault(require("@material-ui/icons/Visibility"));
|
|
25
|
+
|
|
26
|
+
var _BaseLinearDisplay = require("../BaseLinearDisplay");
|
|
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
|
+
|
|
32
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
33
|
+
|
|
34
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || (0, _typeof2["default"])(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; }
|
|
35
|
+
|
|
36
|
+
var SetMaxHeightDlg = /*#__PURE__*/(0, _react.lazy)(function () {
|
|
37
|
+
return Promise.resolve().then(function () {
|
|
38
|
+
return _interopRequireWildcard(require('./components/SetMaxHeight'));
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
var stateModelFactory = function stateModelFactory(configSchema) {
|
|
43
|
+
return _mobxStateTree.types.compose('LinearBasicDisplay', _BaseLinearDisplay.BaseLinearDisplay, _mobxStateTree.types.model({
|
|
44
|
+
type: _mobxStateTree.types.literal('LinearBasicDisplay'),
|
|
45
|
+
trackShowLabels: _mobxStateTree.types.maybe(_mobxStateTree.types["boolean"]),
|
|
46
|
+
trackShowDescriptions: _mobxStateTree.types.maybe(_mobxStateTree.types["boolean"]),
|
|
47
|
+
trackDisplayMode: _mobxStateTree.types.maybe(_mobxStateTree.types.string),
|
|
48
|
+
trackMaxHeight: _mobxStateTree.types.maybe(_mobxStateTree.types.number),
|
|
49
|
+
configuration: (0, _configuration.ConfigurationReference)(configSchema)
|
|
50
|
+
})).views(function (self) {
|
|
51
|
+
return {
|
|
52
|
+
get rendererTypeName() {
|
|
53
|
+
return (0, _configuration.getConf)(self, ['renderer', 'type']);
|
|
54
|
+
},
|
|
55
|
+
|
|
56
|
+
get showLabels() {
|
|
57
|
+
var _self$trackShowLabels;
|
|
58
|
+
|
|
59
|
+
return (_self$trackShowLabels = self.trackShowLabels) !== null && _self$trackShowLabels !== void 0 ? _self$trackShowLabels : (0, _configuration.getConf)(self, ['renderer', 'showLabels']);
|
|
60
|
+
},
|
|
61
|
+
|
|
62
|
+
get showDescriptions() {
|
|
63
|
+
var _self$trackShowDescri;
|
|
64
|
+
|
|
65
|
+
return (_self$trackShowDescri = self.trackShowDescriptions) !== null && _self$trackShowDescri !== void 0 ? _self$trackShowDescri : (0, _configuration.getConf)(self, ['renderer', 'showLabels']);
|
|
66
|
+
},
|
|
67
|
+
|
|
68
|
+
get maxHeight() {
|
|
69
|
+
var _self$trackMaxHeight;
|
|
70
|
+
|
|
71
|
+
return (_self$trackMaxHeight = self.trackMaxHeight) !== null && _self$trackMaxHeight !== void 0 ? _self$trackMaxHeight : (0, _configuration.getConf)(self, ['renderer', 'maxHeight']);
|
|
72
|
+
},
|
|
73
|
+
|
|
74
|
+
get displayMode() {
|
|
75
|
+
var _self$trackDisplayMod;
|
|
76
|
+
|
|
77
|
+
var displayMode = (0, _configuration.getConf)(self, ['renderer', 'displayMode']);
|
|
78
|
+
return (_self$trackDisplayMod = self.trackDisplayMode) !== null && _self$trackDisplayMod !== void 0 ? _self$trackDisplayMod : displayMode;
|
|
79
|
+
},
|
|
80
|
+
|
|
81
|
+
get rendererConfig() {
|
|
82
|
+
var configBlob = (0, _configuration.getConf)(self, ['renderer']) || {};
|
|
83
|
+
return self.rendererType.configSchema.create(_objectSpread(_objectSpread({}, configBlob), {}, {
|
|
84
|
+
showLabels: this.showLabels,
|
|
85
|
+
showDescriptions: this.showDescriptions,
|
|
86
|
+
displayMode: this.displayMode,
|
|
87
|
+
maxHeight: this.maxHeight
|
|
88
|
+
}), (0, _mobxStateTree.getEnv)(self));
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
};
|
|
92
|
+
}).actions(function (self) {
|
|
93
|
+
return {
|
|
94
|
+
toggleShowLabels: function toggleShowLabels() {
|
|
95
|
+
self.trackShowLabels = !self.showLabels;
|
|
96
|
+
},
|
|
97
|
+
toggleShowDescriptions: function toggleShowDescriptions() {
|
|
98
|
+
self.trackShowDescriptions = !self.showDescriptions;
|
|
99
|
+
},
|
|
100
|
+
setDisplayMode: function setDisplayMode(val) {
|
|
101
|
+
self.trackDisplayMode = val;
|
|
102
|
+
},
|
|
103
|
+
setMaxHeight: function setMaxHeight(val) {
|
|
104
|
+
self.trackMaxHeight = val;
|
|
105
|
+
}
|
|
106
|
+
};
|
|
107
|
+
}).views(function (self) {
|
|
108
|
+
var superTrackMenuItems = self.trackMenuItems,
|
|
109
|
+
superRenderProps = self.renderProps;
|
|
110
|
+
return {
|
|
111
|
+
renderProps: function renderProps() {
|
|
112
|
+
var config = self.rendererConfig;
|
|
113
|
+
return _objectSpread(_objectSpread({}, superRenderProps()), {}, {
|
|
114
|
+
config: config
|
|
115
|
+
});
|
|
116
|
+
},
|
|
117
|
+
trackMenuItems: function trackMenuItems() {
|
|
118
|
+
return [].concat((0, _toConsumableArray2["default"])(superTrackMenuItems()), [{
|
|
119
|
+
label: 'Show labels',
|
|
120
|
+
icon: _Visibility["default"],
|
|
121
|
+
type: 'checkbox',
|
|
122
|
+
checked: self.showLabels,
|
|
123
|
+
onClick: function onClick() {
|
|
124
|
+
self.toggleShowLabels();
|
|
125
|
+
}
|
|
126
|
+
}, {
|
|
127
|
+
label: 'Show descriptions',
|
|
128
|
+
icon: _Visibility["default"],
|
|
129
|
+
type: 'checkbox',
|
|
130
|
+
checked: self.showDescriptions,
|
|
131
|
+
onClick: function onClick() {
|
|
132
|
+
self.toggleShowDescriptions();
|
|
133
|
+
}
|
|
134
|
+
}, {
|
|
135
|
+
label: 'Display mode',
|
|
136
|
+
icon: _Visibility["default"],
|
|
137
|
+
subMenu: ['compact', 'reducedRepresentation', 'normal', 'collapse'].map(function (val) {
|
|
138
|
+
return {
|
|
139
|
+
label: val,
|
|
140
|
+
onClick: function onClick() {
|
|
141
|
+
self.setDisplayMode(val);
|
|
142
|
+
}
|
|
143
|
+
};
|
|
144
|
+
})
|
|
145
|
+
}, {
|
|
146
|
+
label: 'Set max height',
|
|
147
|
+
onClick: function onClick() {
|
|
148
|
+
(0, _util.getSession)(self).queueDialog(function (doneCallback) {
|
|
149
|
+
return [SetMaxHeightDlg, {
|
|
150
|
+
model: self,
|
|
151
|
+
handleClose: doneCallback
|
|
152
|
+
}];
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
}]);
|
|
156
|
+
}
|
|
157
|
+
};
|
|
158
|
+
});
|
|
159
|
+
};
|
|
160
|
+
|
|
161
|
+
var _default = stateModelFactory;
|
|
162
|
+
exports["default"] = _default;
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports["default"] = void 0;
|
|
9
|
+
|
|
10
|
+
var _styles = require("@material-ui/core/styles");
|
|
11
|
+
|
|
12
|
+
var _mobxReact = require("mobx-react");
|
|
13
|
+
|
|
14
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
15
|
+
|
|
16
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
17
|
+
|
|
18
|
+
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; }
|
|
19
|
+
|
|
20
|
+
var useStyles = (0, _styles.makeStyles)(function () {
|
|
21
|
+
return {
|
|
22
|
+
centerLineContainer: {
|
|
23
|
+
background: 'transparent',
|
|
24
|
+
height: '100%',
|
|
25
|
+
zIndex: 5,
|
|
26
|
+
// above the track but under menu
|
|
27
|
+
position: 'absolute',
|
|
28
|
+
border: '1px black dashed',
|
|
29
|
+
borderTop: 'none',
|
|
30
|
+
borderBottom: 'none',
|
|
31
|
+
pointerEvents: 'none'
|
|
32
|
+
},
|
|
33
|
+
centerLineText: {
|
|
34
|
+
position: 'absolute',
|
|
35
|
+
pointerEvents: 'none',
|
|
36
|
+
whiteSpace: 'nowrap',
|
|
37
|
+
fontWeight: 'bold'
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
function CenterLine(_ref) {
|
|
43
|
+
var model = _ref.model;
|
|
44
|
+
var bpPerPx = model.bpPerPx,
|
|
45
|
+
centerLineInfo = model.centerLineInfo,
|
|
46
|
+
trackHeights = model.trackHeights,
|
|
47
|
+
tracks = model.tracks,
|
|
48
|
+
width = model.width;
|
|
49
|
+
var ref = (0, _react.useRef)(null);
|
|
50
|
+
var classes = useStyles();
|
|
51
|
+
var startingPosition = width / 2;
|
|
52
|
+
return tracks.length ? /*#__PURE__*/_react["default"].createElement("div", {
|
|
53
|
+
"data-testid": "centerline_container",
|
|
54
|
+
className: classes.centerLineContainer,
|
|
55
|
+
role: "presentation",
|
|
56
|
+
ref: ref,
|
|
57
|
+
style: {
|
|
58
|
+
left: "".concat(startingPosition, "px"),
|
|
59
|
+
width: Math.max(1 / bpPerPx, 1)
|
|
60
|
+
}
|
|
61
|
+
}, centerLineInfo && /*#__PURE__*/_react["default"].createElement("div", {
|
|
62
|
+
// text that indicates what bp is center, positioned
|
|
63
|
+
// at the bottom right of the center line
|
|
64
|
+
"data-testid": "centerline_text",
|
|
65
|
+
className: classes.centerLineText,
|
|
66
|
+
role: "presentation",
|
|
67
|
+
style: {
|
|
68
|
+
left: Math.max(1 / bpPerPx, 1) + 5,
|
|
69
|
+
top: trackHeights
|
|
70
|
+
}
|
|
71
|
+
}, centerLineInfo.refName, ":", ' ', Math.max(Math.round(centerLineInfo.offset) + 1, 0))) : null;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
CenterLine.propTypes = {
|
|
75
|
+
model: _mobxReact.PropTypes.objectOrObservableObject.isRequired
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
var _default = (0, _mobxReact.observer)(CenterLine);
|
|
79
|
+
|
|
80
|
+
exports["default"] = _default;
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
6
|
+
|
|
7
|
+
Object.defineProperty(exports, "__esModule", {
|
|
8
|
+
value: true
|
|
9
|
+
});
|
|
10
|
+
exports["default"] = ExportSvgDlg;
|
|
11
|
+
|
|
12
|
+
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
13
|
+
|
|
14
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
15
|
+
|
|
16
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
17
|
+
|
|
18
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
19
|
+
|
|
20
|
+
var _styles = require("@material-ui/core/styles");
|
|
21
|
+
|
|
22
|
+
var _core = require("@material-ui/core");
|
|
23
|
+
|
|
24
|
+
var _Close = _interopRequireDefault(require("@material-ui/icons/Close"));
|
|
25
|
+
|
|
26
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
27
|
+
|
|
28
|
+
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; }
|
|
29
|
+
|
|
30
|
+
var useStyles = (0, _styles.makeStyles)(function (theme) {
|
|
31
|
+
return {
|
|
32
|
+
closeButton: {
|
|
33
|
+
position: 'absolute',
|
|
34
|
+
right: theme.spacing(1),
|
|
35
|
+
top: theme.spacing(1),
|
|
36
|
+
color: theme.palette.grey[500]
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
function ExportSvgDlg(_ref) {
|
|
42
|
+
var model = _ref.model,
|
|
43
|
+
handleClose = _ref.handleClose;
|
|
44
|
+
// @ts-ignore
|
|
45
|
+
var offscreenCanvas = typeof OffscreenCanvas !== 'undefined';
|
|
46
|
+
|
|
47
|
+
var _useState = (0, _react.useState)(offscreenCanvas),
|
|
48
|
+
_useState2 = (0, _slicedToArray2["default"])(_useState, 2),
|
|
49
|
+
rasterizeLayers = _useState2[0],
|
|
50
|
+
setRasterizeLayers = _useState2[1];
|
|
51
|
+
|
|
52
|
+
var _useState3 = (0, _react.useState)(false),
|
|
53
|
+
_useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
|
|
54
|
+
loading = _useState4[0],
|
|
55
|
+
setLoading = _useState4[1];
|
|
56
|
+
|
|
57
|
+
var _useState5 = (0, _react.useState)(),
|
|
58
|
+
_useState6 = (0, _slicedToArray2["default"])(_useState5, 2),
|
|
59
|
+
error = _useState6[0],
|
|
60
|
+
setError = _useState6[1];
|
|
61
|
+
|
|
62
|
+
var classes = useStyles();
|
|
63
|
+
return /*#__PURE__*/_react["default"].createElement(_core.Dialog, {
|
|
64
|
+
open: true,
|
|
65
|
+
onClose: handleClose
|
|
66
|
+
}, /*#__PURE__*/_react["default"].createElement(_core.DialogTitle, null, "Export SVG", /*#__PURE__*/_react["default"].createElement(_core.IconButton, {
|
|
67
|
+
className: classes.closeButton,
|
|
68
|
+
onClick: handleClose
|
|
69
|
+
}, /*#__PURE__*/_react["default"].createElement(_Close["default"], null))), /*#__PURE__*/_react["default"].createElement(_core.DialogContent, null, error ? /*#__PURE__*/_react["default"].createElement("div", {
|
|
70
|
+
style: {
|
|
71
|
+
color: 'red'
|
|
72
|
+
}
|
|
73
|
+
}, "".concat(error)) : loading ? /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement(_core.CircularProgress, {
|
|
74
|
+
size: 20,
|
|
75
|
+
style: {
|
|
76
|
+
marginRight: 20
|
|
77
|
+
}
|
|
78
|
+
}), /*#__PURE__*/_react["default"].createElement(_core.Typography, {
|
|
79
|
+
display: "inline"
|
|
80
|
+
}, "Creating SVG")) : null, offscreenCanvas ? /*#__PURE__*/_react["default"].createElement(_core.FormControlLabel, {
|
|
81
|
+
control: /*#__PURE__*/_react["default"].createElement(_core.Checkbox, {
|
|
82
|
+
checked: rasterizeLayers,
|
|
83
|
+
onChange: function onChange() {
|
|
84
|
+
return setRasterizeLayers(function (val) {
|
|
85
|
+
return !val;
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
}),
|
|
89
|
+
label: "Rasterize canvas based tracks? File may be much larger if this is turned off"
|
|
90
|
+
}) : /*#__PURE__*/_react["default"].createElement(_core.Typography, null, "Note: rasterizing layers not yet supported in this browser, so SVG size may be large")), /*#__PURE__*/_react["default"].createElement(_core.DialogActions, null, /*#__PURE__*/_react["default"].createElement(_core.Button, {
|
|
91
|
+
variant: "contained",
|
|
92
|
+
color: "secondary",
|
|
93
|
+
onClick: function onClick() {
|
|
94
|
+
return handleClose();
|
|
95
|
+
}
|
|
96
|
+
}, "Cancel"), /*#__PURE__*/_react["default"].createElement(_core.Button, {
|
|
97
|
+
variant: "contained",
|
|
98
|
+
color: "primary",
|
|
99
|
+
type: "submit",
|
|
100
|
+
onClick: /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee() {
|
|
101
|
+
return _regenerator["default"].wrap(function _callee$(_context) {
|
|
102
|
+
while (1) {
|
|
103
|
+
switch (_context.prev = _context.next) {
|
|
104
|
+
case 0:
|
|
105
|
+
setLoading(true);
|
|
106
|
+
setError(undefined);
|
|
107
|
+
_context.prev = 2;
|
|
108
|
+
_context.next = 5;
|
|
109
|
+
return model.exportSvg({
|
|
110
|
+
rasterizeLayers: rasterizeLayers
|
|
111
|
+
});
|
|
112
|
+
|
|
113
|
+
case 5:
|
|
114
|
+
handleClose();
|
|
115
|
+
_context.next = 12;
|
|
116
|
+
break;
|
|
117
|
+
|
|
118
|
+
case 8:
|
|
119
|
+
_context.prev = 8;
|
|
120
|
+
_context.t0 = _context["catch"](2);
|
|
121
|
+
console.error(_context.t0);
|
|
122
|
+
setError(_context.t0);
|
|
123
|
+
|
|
124
|
+
case 12:
|
|
125
|
+
_context.prev = 12;
|
|
126
|
+
setLoading(false);
|
|
127
|
+
return _context.finish(12);
|
|
128
|
+
|
|
129
|
+
case 15:
|
|
130
|
+
case "end":
|
|
131
|
+
return _context.stop();
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}, _callee, null, [[2, 8, 12, 15]]);
|
|
135
|
+
}))
|
|
136
|
+
}, "Submit")));
|
|
137
|
+
}
|
|
@@ -0,0 +1,144 @@
|
|
|
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 _core = require("@material-ui/core");
|
|
15
|
+
|
|
16
|
+
var _SearchBox = _interopRequireDefault(require("./SearchBox"));
|
|
17
|
+
|
|
18
|
+
var _Icons = require("@jbrowse/core/ui/Icons");
|
|
19
|
+
|
|
20
|
+
var _ArrowForward = _interopRequireDefault(require("@material-ui/icons/ArrowForward"));
|
|
21
|
+
|
|
22
|
+
var _ArrowBack = _interopRequireDefault(require("@material-ui/icons/ArrowBack"));
|
|
23
|
+
|
|
24
|
+
var _ = require("..");
|
|
25
|
+
|
|
26
|
+
var _OverviewScaleBar = _interopRequireDefault(require("./OverviewScaleBar"));
|
|
27
|
+
|
|
28
|
+
var _ZoomControls = _interopRequireDefault(require("./ZoomControls"));
|
|
29
|
+
|
|
30
|
+
// icons
|
|
31
|
+
// locals
|
|
32
|
+
var useStyles = (0, _core.makeStyles)(function (theme) {
|
|
33
|
+
return {
|
|
34
|
+
headerBar: {
|
|
35
|
+
height: _.HEADER_BAR_HEIGHT,
|
|
36
|
+
display: 'flex'
|
|
37
|
+
},
|
|
38
|
+
headerForm: {
|
|
39
|
+
flexWrap: 'nowrap',
|
|
40
|
+
marginRight: 7
|
|
41
|
+
},
|
|
42
|
+
spacer: {
|
|
43
|
+
flexGrow: 1
|
|
44
|
+
},
|
|
45
|
+
panButton: {
|
|
46
|
+
background: (0, _core.alpha)(theme.palette.background.paper, 0.8),
|
|
47
|
+
height: _.WIDGET_HEIGHT,
|
|
48
|
+
margin: _.SPACING
|
|
49
|
+
},
|
|
50
|
+
bp: {
|
|
51
|
+
display: 'flex',
|
|
52
|
+
alignItems: 'center',
|
|
53
|
+
marginLeft: 5
|
|
54
|
+
},
|
|
55
|
+
toggleButton: {
|
|
56
|
+
height: 44,
|
|
57
|
+
border: 'none',
|
|
58
|
+
margin: theme.spacing(0.5)
|
|
59
|
+
},
|
|
60
|
+
buttonSpacer: {
|
|
61
|
+
marginRight: theme.spacing(2)
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
});
|
|
65
|
+
var HeaderButtons = (0, _mobxReact.observer)(function (_ref) {
|
|
66
|
+
var model = _ref.model;
|
|
67
|
+
var classes = useStyles();
|
|
68
|
+
return /*#__PURE__*/_react["default"].createElement(_core.Button, {
|
|
69
|
+
onClick: model.activateTrackSelector,
|
|
70
|
+
className: classes.toggleButton,
|
|
71
|
+
title: "Open track selector",
|
|
72
|
+
value: "track_select",
|
|
73
|
+
color: "secondary"
|
|
74
|
+
}, /*#__PURE__*/_react["default"].createElement(_Icons.TrackSelector, {
|
|
75
|
+
className: classes.buttonSpacer
|
|
76
|
+
}));
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
function PanControls(_ref2) {
|
|
80
|
+
var model = _ref2.model;
|
|
81
|
+
var classes = useStyles();
|
|
82
|
+
return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(_core.Button, {
|
|
83
|
+
variant: "outlined",
|
|
84
|
+
className: classes.panButton,
|
|
85
|
+
onClick: function onClick() {
|
|
86
|
+
return model.slide(-0.9);
|
|
87
|
+
}
|
|
88
|
+
}, /*#__PURE__*/_react["default"].createElement(_ArrowBack["default"], null)), /*#__PURE__*/_react["default"].createElement(_core.Button, {
|
|
89
|
+
variant: "outlined",
|
|
90
|
+
className: classes.panButton,
|
|
91
|
+
onClick: function onClick() {
|
|
92
|
+
return model.slide(0.9);
|
|
93
|
+
}
|
|
94
|
+
}, /*#__PURE__*/_react["default"].createElement(_ArrowForward["default"], null)));
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
var RegionWidth = (0, _mobxReact.observer)(function (_ref3) {
|
|
98
|
+
var model = _ref3.model;
|
|
99
|
+
var classes = useStyles();
|
|
100
|
+
var coarseTotalBp = model.coarseTotalBp;
|
|
101
|
+
return /*#__PURE__*/_react["default"].createElement(_core.Typography, {
|
|
102
|
+
variant: "body2",
|
|
103
|
+
color: "textSecondary",
|
|
104
|
+
className: classes.bp
|
|
105
|
+
}, Math.round(coarseTotalBp).toLocaleString('en-US'), " bp");
|
|
106
|
+
});
|
|
107
|
+
|
|
108
|
+
var Controls = function Controls(_ref4) {
|
|
109
|
+
var model = _ref4.model;
|
|
110
|
+
var classes = useStyles();
|
|
111
|
+
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
112
|
+
className: classes.headerBar
|
|
113
|
+
}, /*#__PURE__*/_react["default"].createElement(HeaderButtons, {
|
|
114
|
+
model: model
|
|
115
|
+
}), /*#__PURE__*/_react["default"].createElement("div", {
|
|
116
|
+
className: classes.spacer
|
|
117
|
+
}), /*#__PURE__*/_react["default"].createElement(_core.FormGroup, {
|
|
118
|
+
row: true,
|
|
119
|
+
className: classes.headerForm
|
|
120
|
+
}, /*#__PURE__*/_react["default"].createElement(PanControls, {
|
|
121
|
+
model: model
|
|
122
|
+
}), /*#__PURE__*/_react["default"].createElement(_SearchBox["default"], {
|
|
123
|
+
model: model
|
|
124
|
+
})), /*#__PURE__*/_react["default"].createElement(RegionWidth, {
|
|
125
|
+
model: model
|
|
126
|
+
}), /*#__PURE__*/_react["default"].createElement(_ZoomControls["default"], {
|
|
127
|
+
model: model
|
|
128
|
+
}), /*#__PURE__*/_react["default"].createElement("div", {
|
|
129
|
+
className: classes.spacer
|
|
130
|
+
}));
|
|
131
|
+
};
|
|
132
|
+
|
|
133
|
+
var LinearGenomeViewHeader = (0, _mobxReact.observer)(function (_ref5) {
|
|
134
|
+
var model = _ref5.model;
|
|
135
|
+
return model.hideHeaderOverview ? /*#__PURE__*/_react["default"].createElement(Controls, {
|
|
136
|
+
model: model
|
|
137
|
+
}) : /*#__PURE__*/_react["default"].createElement(_OverviewScaleBar["default"], {
|
|
138
|
+
model: model
|
|
139
|
+
}, /*#__PURE__*/_react["default"].createElement(Controls, {
|
|
140
|
+
model: model
|
|
141
|
+
}));
|
|
142
|
+
});
|
|
143
|
+
var _default = LinearGenomeViewHeader;
|
|
144
|
+
exports["default"] = _default;
|
|
@@ -0,0 +1,48 @@
|
|
|
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"] = HelpDialog;
|
|
9
|
+
exports.useStyles = void 0;
|
|
10
|
+
|
|
11
|
+
var _react = _interopRequireDefault(require("react"));
|
|
12
|
+
|
|
13
|
+
var _core = require("@material-ui/core");
|
|
14
|
+
|
|
15
|
+
var _Close = _interopRequireDefault(require("@material-ui/icons/Close"));
|
|
16
|
+
|
|
17
|
+
var useStyles = (0, _core.makeStyles)(function (theme) {
|
|
18
|
+
return {
|
|
19
|
+
closeButton: {
|
|
20
|
+
position: 'absolute',
|
|
21
|
+
right: theme.spacing(1),
|
|
22
|
+
top: theme.spacing(1),
|
|
23
|
+
color: theme.palette.grey[500]
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
});
|
|
27
|
+
exports.useStyles = useStyles;
|
|
28
|
+
|
|
29
|
+
function HelpDialog(_ref) {
|
|
30
|
+
var handleClose = _ref.handleClose;
|
|
31
|
+
var classes = useStyles();
|
|
32
|
+
return /*#__PURE__*/_react["default"].createElement(_core.Dialog, {
|
|
33
|
+
open: true,
|
|
34
|
+
maxWidth: "xl",
|
|
35
|
+
onClose: handleClose
|
|
36
|
+
}, /*#__PURE__*/_react["default"].createElement(_core.DialogTitle, null, "Using the search box", handleClose ? /*#__PURE__*/_react["default"].createElement(_core.IconButton, {
|
|
37
|
+
"data-testid": "close-resultsDialog",
|
|
38
|
+
className: classes.closeButton,
|
|
39
|
+
onClick: function onClick() {
|
|
40
|
+
handleClose();
|
|
41
|
+
}
|
|
42
|
+
}, /*#__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("h3", null, "Searching"), /*#__PURE__*/_react["default"].createElement("ul", null, /*#__PURE__*/_react["default"].createElement("li", null, "Jump to a feature or reference sequence by typing its name in the location box and pressing Enter."), /*#__PURE__*/_react["default"].createElement("li", null, "Jump to a specific region by typing the region into the location box as: ", /*#__PURE__*/_react["default"].createElement("code", null, "ref:start..end"), " or ", /*#__PURE__*/_react["default"].createElement("code", null, "ref:start-end"), ". Commas are allowed in the start and end coordinates. A space-separated list of locstrings can be used to open up multiple chromosomes at a time")), /*#__PURE__*/_react["default"].createElement("h3", null, "Example Searches"), /*#__PURE__*/_react["default"].createElement("ul", null, /*#__PURE__*/_react["default"].createElement("li", null, /*#__PURE__*/_react["default"].createElement("code", null, "BRCA"), " - searches for the feature named BRCA"), /*#__PURE__*/_react["default"].createElement("li", null, /*#__PURE__*/_react["default"].createElement("code", null, "chr4"), " - jumps to chromosome 4"), /*#__PURE__*/_react["default"].createElement("li", null, /*#__PURE__*/_react["default"].createElement("code", null, "chr4:79,500,000..80,000,000"), " - jumps the region on chromosome 4 between 79.5Mb and 80Mb."), /*#__PURE__*/_react["default"].createElement("li", null, /*#__PURE__*/_react["default"].createElement("code", null, "chr1:1-100 chr2:1-100"), " - create a split view of chr1:1-100 and chr2:1-100"), /*#__PURE__*/_react["default"].createElement("li", null, /*#__PURE__*/_react["default"].createElement("code", null, "chr1 chr2 chr3"), " - open up multiple chromosomes at once"), /*#__PURE__*/_react["default"].createElement("li", null, /*#__PURE__*/_react["default"].createElement("code", null, "chr1:1-100[rev] chr2:1-100"), " - open up the first region in the horizontally flipped orientation"))), /*#__PURE__*/_react["default"].createElement(_core.Divider, null), /*#__PURE__*/_react["default"].createElement(_core.DialogActions, null, /*#__PURE__*/_react["default"].createElement(_core.Button, {
|
|
43
|
+
onClick: function onClick() {
|
|
44
|
+
return handleClose();
|
|
45
|
+
},
|
|
46
|
+
color: "primary"
|
|
47
|
+
}, "Close")));
|
|
48
|
+
}
|