@jbrowse/core 1.7.10 → 2.0.1
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.d.ts +14 -4
- package/BaseFeatureWidget/BaseFeatureDetail.js +97 -63
- package/BaseFeatureWidget/SequenceFeatureDetails.js +21 -15
- package/BaseFeatureWidget/index.d.ts +2 -2
- package/BaseFeatureWidget/index.js +5 -3
- package/BaseFeatureWidget/index.test.js +48 -30
- package/BaseFeatureWidget/types.d.ts +1 -0
- package/PluginManager.d.ts +68 -104
- package/ReExports/Attributes.d.ts +2 -0
- package/ReExports/Attributes.js +12 -0
- package/ReExports/BaseCard.d.ts +2 -0
- package/ReExports/BaseCard.js +12 -0
- package/ReExports/DataGrid.d.ts +2 -0
- package/ReExports/DataGrid.js +13 -0
- package/ReExports/FeatureDetails.d.ts +2 -0
- package/ReExports/FeatureDetails.js +12 -0
- package/ReExports/list.js +1 -1
- package/ReExports/material-ui-colors.d.ts +1 -19
- package/ReExports/material-ui-colors.js +11 -152
- package/ReExports/modules.d.ts +69 -109
- package/ReExports/modules.js +683 -127
- package/TextSearch/TextSearchManager.d.ts +3 -1
- package/assemblyManager/assembly.d.ts +6 -7
- package/assemblyManager/assembly.js +27 -16
- package/assemblyManager/assemblyManager.d.ts +82 -24
- package/assemblyManager/assemblyManager.js +11 -9
- package/configuration/util.d.ts +1 -1
- package/package.json +14 -16
- package/pluggableElementTypes/models/BaseDisplayModel.d.ts +10 -10
- package/pluggableElementTypes/models/BaseTrackModel.d.ts +1 -1
- package/pluggableElementTypes/models/BaseTrackModel.js +24 -25
- package/pluggableElementTypes/renderers/FeatureRendererType.js +17 -8
- package/pluggableElementTypes/renderers/ServerSideRenderedContent.js +2 -2
- package/pluggableElementTypes/renderers/ServerSideRendererType.d.ts +2 -2
- package/pluggableElementTypes/renderers/ServerSideRendererType.js +1 -1
- package/rpc/BaseRpcDriver.js +1 -1
- package/rpc/coreRpcMethods.d.ts +1 -3
- package/rpc/coreRpcMethods.js +5 -5
- package/tsconfig.build.tsbuildinfo +1 -1
- package/ui/AboutDialog.js +15 -10
- package/ui/App.js +18 -37
- package/ui/AssemblySelector.d.ts +1 -1
- package/ui/AssemblySelector.js +10 -5
- package/ui/CascadingMenu.js +10 -14
- package/ui/Drawer.js +8 -5
- package/ui/DrawerWidget.js +39 -45
- package/ui/DropDownMenu.d.ts +0 -8
- package/ui/DropDownMenu.js +9 -15
- package/ui/EditableTypography.d.ts +1 -1
- package/ui/EditableTypography.js +42 -48
- package/ui/ErrorMessage.js +13 -23
- package/ui/FactoryResetDialog.js +6 -6
- package/ui/FatalErrorDialog.js +5 -5
- package/ui/FileSelector/FileSelector.js +19 -19
- package/ui/FileSelector/LocalFileChooser.js +12 -8
- package/ui/FileSelector/UrlChooser.js +2 -2
- package/ui/Icons.d.ts +1 -1
- package/ui/Icons.js +1 -1
- package/ui/Menu.d.ts +1 -1
- package/ui/Menu.js +28 -29
- package/ui/PrerenderedCanvas.js +10 -1
- package/ui/ResizeHandle.js +8 -6
- package/ui/ReturnToImportFormDialog.js +14 -10
- package/ui/SanitizedHTML.js +15 -21
- package/ui/Snackbar.js +11 -9
- package/ui/Tooltip.d.ts +3 -1
- package/ui/Tooltip.js +5 -3
- package/ui/ViewContainer.js +38 -25
- package/ui/theme.d.ts +279 -131
- package/ui/theme.js +174 -154
- package/ui/theme.test.js +56 -75
- package/util/Base1DUtils.d.ts +32 -0
- package/util/Base1DUtils.js +213 -0
- package/util/Base1DViewModel.d.ts +16 -37
- package/util/Base1DViewModel.js +34 -166
- package/util/color/index.js +6 -6
- package/util/index.d.ts +12 -21
- package/util/index.js +29 -90
- package/util/layouts/GranularRectLayout.js +1 -3
- package/util/layouts/PrecomputedLayout.js +1 -3
- package/util/offscreenCanvasPonyfill.js +10 -12
- package/util/tracks.js +4 -2
- package/util/types/index.d.ts +14 -4
- package/util/types/index.js +6 -0
- package/util/types/mst.d.ts +3 -3
- package/util/types/mst.js +11 -7
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.bpToPx = bpToPx;
|
|
9
|
+
exports.moveTo = moveTo;
|
|
10
|
+
exports.pxToBp = pxToBp;
|
|
11
|
+
|
|
12
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
13
|
+
|
|
14
|
+
var _mobxStateTree = require("mobx-state-tree");
|
|
15
|
+
|
|
16
|
+
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; }
|
|
17
|
+
|
|
18
|
+
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; }
|
|
19
|
+
|
|
20
|
+
function lengthBetween(self, start, end) {
|
|
21
|
+
var bpSoFar = 0;
|
|
22
|
+
var displayedRegions = self.displayedRegions;
|
|
23
|
+
|
|
24
|
+
if (start.index === end.index) {
|
|
25
|
+
bpSoFar += end.offset - start.offset;
|
|
26
|
+
} else {
|
|
27
|
+
var s = displayedRegions[start.index];
|
|
28
|
+
bpSoFar += s.end - s.start - start.offset;
|
|
29
|
+
|
|
30
|
+
if (end.index - start.index >= 2) {
|
|
31
|
+
for (var i = start.index + 1; i < end.index; i++) {
|
|
32
|
+
var region = displayedRegions[i];
|
|
33
|
+
var len = region.end - region.start;
|
|
34
|
+
bpSoFar += len;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
bpSoFar += end.offset;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
return bpSoFar;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
function moveTo(self, start, end) {
|
|
45
|
+
if (!start || !end) {
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
var width = self.width,
|
|
50
|
+
interRegionPaddingWidth = self.interRegionPaddingWidth;
|
|
51
|
+
var len = lengthBetween(self, start, end);
|
|
52
|
+
var numBlocks = end.index - start.index;
|
|
53
|
+
var targetBpPerPx = len / (width - interRegionPaddingWidth * numBlocks);
|
|
54
|
+
var newBpPerPx = self.zoomTo(targetBpPerPx); // If our target bpPerPx was smaller than the allowed minBpPerPx, adjust
|
|
55
|
+
// the scroll so the requested range is in the middle of the screen
|
|
56
|
+
|
|
57
|
+
var extraBp = 0;
|
|
58
|
+
|
|
59
|
+
if (targetBpPerPx < newBpPerPx) {
|
|
60
|
+
extraBp = (newBpPerPx - targetBpPerPx) * self.width / 2;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
var bpToStart = -extraBp;
|
|
64
|
+
|
|
65
|
+
for (var i = 0; i < self.displayedRegions.length; i += 1) {
|
|
66
|
+
var region = self.displayedRegions[i];
|
|
67
|
+
|
|
68
|
+
if (start.index === i) {
|
|
69
|
+
bpToStart += start.offset;
|
|
70
|
+
break;
|
|
71
|
+
} else {
|
|
72
|
+
bpToStart += region.end - region.start;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
self.scrollTo(Math.round(bpToStart / self.bpPerPx));
|
|
77
|
+
} // manual return type since getSnapshot hard to infer here
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
function pxToBp(self, px) {
|
|
81
|
+
var bpSoFar = 0;
|
|
82
|
+
var bpPerPx = self.bpPerPx,
|
|
83
|
+
offsetPx = self.offsetPx,
|
|
84
|
+
displayedRegions = self.displayedRegions,
|
|
85
|
+
interRegionPaddingWidth = self.interRegionPaddingWidth,
|
|
86
|
+
staticBlocks = self.staticBlocks;
|
|
87
|
+
var blocks = staticBlocks.contentBlocks;
|
|
88
|
+
var bp = (offsetPx + px) * bpPerPx;
|
|
89
|
+
|
|
90
|
+
if (bp < 0) {
|
|
91
|
+
var region = displayedRegions[0];
|
|
92
|
+
var snap = (0, _mobxStateTree.getSnapshot)(region); // @ts-ignore
|
|
93
|
+
|
|
94
|
+
return _objectSpread(_objectSpread({}, snap), {}, {
|
|
95
|
+
oob: true,
|
|
96
|
+
coord: region.reversed ? Math.floor(region.end - bp) + 1 : Math.floor(region.start + bp) + 1,
|
|
97
|
+
offset: bp,
|
|
98
|
+
index: 0
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
var interRegionPaddingBp = interRegionPaddingWidth * bpPerPx;
|
|
103
|
+
var currBlock = 0;
|
|
104
|
+
|
|
105
|
+
for (var i = 0; i < displayedRegions.length; i++) {
|
|
106
|
+
var _blocks$currBlock;
|
|
107
|
+
|
|
108
|
+
var _region = displayedRegions[i];
|
|
109
|
+
var len = _region.end - _region.start;
|
|
110
|
+
var offset = bp - bpSoFar;
|
|
111
|
+
|
|
112
|
+
if (len + bpSoFar > bp && bpSoFar <= bp) {
|
|
113
|
+
var _snap = (0, _mobxStateTree.getSnapshot)(_region); // @ts-ignore
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
return _objectSpread(_objectSpread({}, _snap), {}, {
|
|
117
|
+
oob: false,
|
|
118
|
+
offset: offset,
|
|
119
|
+
coord: _region.reversed ? Math.floor(_region.end - offset) + 1 : Math.floor(_region.start + offset) + 1,
|
|
120
|
+
index: i
|
|
121
|
+
});
|
|
122
|
+
} // add the interRegionPaddingWidth if the boundary is in the screen e.g. in
|
|
123
|
+
// a static block
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
if (((_blocks$currBlock = blocks[currBlock]) === null || _blocks$currBlock === void 0 ? void 0 : _blocks$currBlock.regionNumber) === i) {
|
|
127
|
+
bpSoFar += len + interRegionPaddingBp;
|
|
128
|
+
currBlock++;
|
|
129
|
+
} else {
|
|
130
|
+
bpSoFar += len;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
if (bp >= bpSoFar) {
|
|
135
|
+
var _region2 = displayedRegions[displayedRegions.length - 1];
|
|
136
|
+
|
|
137
|
+
var _len = _region2.end - _region2.start;
|
|
138
|
+
|
|
139
|
+
var _offset = bp - bpSoFar + _len;
|
|
140
|
+
|
|
141
|
+
var _snap2 = (0, _mobxStateTree.getSnapshot)(_region2); // @ts-ignore
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
return _objectSpread(_objectSpread({}, _snap2), {}, {
|
|
145
|
+
oob: true,
|
|
146
|
+
offset: _offset,
|
|
147
|
+
coord: _region2.reversed ? Math.floor(_region2.end - _offset) + 1 : Math.floor(_region2.start + _offset) + 1,
|
|
148
|
+
index: displayedRegions.length - 1
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
return {
|
|
153
|
+
coord: 0,
|
|
154
|
+
index: 0,
|
|
155
|
+
refName: '',
|
|
156
|
+
oob: true,
|
|
157
|
+
assemblyName: '',
|
|
158
|
+
offset: 0,
|
|
159
|
+
start: 0,
|
|
160
|
+
end: 0,
|
|
161
|
+
reversed: false
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
function bpToPx(_ref) {
|
|
166
|
+
var refName = _ref.refName,
|
|
167
|
+
coord = _ref.coord,
|
|
168
|
+
regionNumber = _ref.regionNumber,
|
|
169
|
+
self = _ref.self;
|
|
170
|
+
var bpSoFar = 0;
|
|
171
|
+
var interRegionPaddingWidth = self.interRegionPaddingWidth,
|
|
172
|
+
bpPerPx = self.bpPerPx,
|
|
173
|
+
displayedRegions = self.displayedRegions,
|
|
174
|
+
staticBlocks = self.staticBlocks;
|
|
175
|
+
var blocks = staticBlocks.contentBlocks;
|
|
176
|
+
var interRegionPaddingBp = interRegionPaddingWidth * bpPerPx;
|
|
177
|
+
var currBlock = 0;
|
|
178
|
+
var i = 0;
|
|
179
|
+
|
|
180
|
+
for (; i < displayedRegions.length; i++) {
|
|
181
|
+
var _blocks$currBlock2;
|
|
182
|
+
|
|
183
|
+
var region = displayedRegions[i];
|
|
184
|
+
var len = region.end - region.start;
|
|
185
|
+
|
|
186
|
+
if (refName === region.refName && coord >= region.start && coord <= region.end) {
|
|
187
|
+
if (regionNumber ? regionNumber === i : true) {
|
|
188
|
+
bpSoFar += region.reversed ? region.end - coord : coord - region.start;
|
|
189
|
+
break;
|
|
190
|
+
}
|
|
191
|
+
} // add the interRegionPaddingWidth if the boundary is in the screen e.g. in
|
|
192
|
+
// a static block
|
|
193
|
+
|
|
194
|
+
|
|
195
|
+
if (((_blocks$currBlock2 = blocks[currBlock]) === null || _blocks$currBlock2 === void 0 ? void 0 : _blocks$currBlock2.regionNumber) === i) {
|
|
196
|
+
bpSoFar += len + interRegionPaddingBp;
|
|
197
|
+
currBlock++;
|
|
198
|
+
} else {
|
|
199
|
+
bpSoFar += len;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
var found = displayedRegions[i];
|
|
204
|
+
|
|
205
|
+
if (found) {
|
|
206
|
+
return {
|
|
207
|
+
index: i,
|
|
208
|
+
offsetPx: Math.round(bpSoFar / bpPerPx)
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
return undefined;
|
|
213
|
+
}
|
|
@@ -1,13 +1,7 @@
|
|
|
1
1
|
import { Instance } from 'mobx-state-tree';
|
|
2
2
|
import { Feature } from './simpleFeature';
|
|
3
3
|
import { Region as IRegion } from './types';
|
|
4
|
-
|
|
5
|
-
refName?: string;
|
|
6
|
-
index: number;
|
|
7
|
-
offset: number;
|
|
8
|
-
start?: number;
|
|
9
|
-
end?: number;
|
|
10
|
-
}
|
|
4
|
+
import { BpOffset } from './Base1DUtils';
|
|
11
5
|
declare const Base1DView: import("mobx-state-tree").IModelType<{
|
|
12
6
|
id: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
|
|
13
7
|
displayedRegions: import("mobx-state-tree").IArrayType<import("mobx-state-tree").IModelType<{
|
|
@@ -38,37 +32,22 @@ declare const Base1DView: import("mobx-state-tree").IModelType<{
|
|
|
38
32
|
readonly maxOffset: number;
|
|
39
33
|
readonly minOffset: number;
|
|
40
34
|
readonly totalBp: number;
|
|
35
|
+
} & {
|
|
36
|
+
readonly dynamicBlocks: import("./blockTypes").BlockSet;
|
|
37
|
+
readonly staticBlocks: import("./blockTypes").BlockSet;
|
|
38
|
+
readonly currBp: number;
|
|
39
|
+
} & {
|
|
41
40
|
pxToBp(px: number): {
|
|
42
|
-
oob: boolean;
|
|
43
41
|
coord: number;
|
|
44
|
-
offset: number;
|
|
45
42
|
index: number;
|
|
46
43
|
refName: string;
|
|
47
|
-
start: number;
|
|
48
|
-
end: number;
|
|
49
|
-
reversed: boolean;
|
|
50
|
-
assemblyName: string;
|
|
51
|
-
} | {
|
|
52
|
-
coord: number;
|
|
53
|
-
index: number;
|
|
54
|
-
start: number;
|
|
55
|
-
refName: string;
|
|
56
44
|
oob: boolean;
|
|
57
45
|
assemblyName: string;
|
|
58
46
|
offset: number;
|
|
47
|
+
start: number;
|
|
48
|
+
end: number;
|
|
59
49
|
reversed: boolean;
|
|
60
50
|
};
|
|
61
|
-
} & {
|
|
62
|
-
readonly dynamicBlocks: import("./blockTypes").BlockSet;
|
|
63
|
-
readonly staticBlocks: import("./blockTypes").BlockSet;
|
|
64
|
-
readonly currBp: number;
|
|
65
|
-
/**
|
|
66
|
-
* calculates the Px at which coord is found.
|
|
67
|
-
*
|
|
68
|
-
* @param refName - string, refName of region
|
|
69
|
-
* @param coord - number, bp to be translated to Px
|
|
70
|
-
* @param regionNumber - number, index of displayedRegion in displayedRegions array
|
|
71
|
-
*/
|
|
72
51
|
bpToPx({ refName, coord, regionNumber, }: {
|
|
73
52
|
refName: string;
|
|
74
53
|
coord: number;
|
|
@@ -76,8 +55,14 @@ declare const Base1DView: import("mobx-state-tree").IModelType<{
|
|
|
76
55
|
}): number | undefined;
|
|
77
56
|
} & {
|
|
78
57
|
setFeatures(features: Feature[]): void;
|
|
79
|
-
zoomToDisplayedRegions(leftPx: BpOffset | undefined, rightPx: BpOffset | undefined): void;
|
|
80
58
|
showAllRegions(): void;
|
|
59
|
+
zoomOut(): void;
|
|
60
|
+
zoomIn(): void;
|
|
61
|
+
zoomTo(newBpPerPx: number, offset?: number): number;
|
|
62
|
+
scrollTo(offsetPx: number): number;
|
|
63
|
+
centerAt(coord: number, refName: string | undefined, regionNumber: number): void;
|
|
64
|
+
scroll(distance: number): number;
|
|
65
|
+
} & {
|
|
81
66
|
/**
|
|
82
67
|
* offset is the base-pair-offset in the displayed region, index is the index of the
|
|
83
68
|
* displayed region in the linear genome view
|
|
@@ -85,13 +70,7 @@ declare const Base1DView: import("mobx-state-tree").IModelType<{
|
|
|
85
70
|
* @param start - object as `{start, end, offset, index}`
|
|
86
71
|
* @param end - object as `{start, end, offset, index}`
|
|
87
72
|
*/
|
|
88
|
-
moveTo(start
|
|
89
|
-
zoomOut(): void;
|
|
90
|
-
zoomIn(): void;
|
|
91
|
-
zoomTo(newBpPerPx: number, offset?: number): void;
|
|
92
|
-
scrollTo(offsetPx: number): number;
|
|
93
|
-
centerAt(bp: number, refName: string, regionIndex: number): void;
|
|
94
|
-
scroll(distance: number): number;
|
|
73
|
+
moveTo(start?: BpOffset, end?: BpOffset): void;
|
|
95
74
|
}, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>;
|
|
96
75
|
export declare type Base1DViewStateModel = typeof Base1DView;
|
|
97
76
|
export declare type Base1DViewModel = Instance<Base1DViewStateModel>;
|
package/util/Base1DViewModel.js
CHANGED
|
@@ -7,8 +7,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
7
7
|
});
|
|
8
8
|
exports.default = void 0;
|
|
9
9
|
|
|
10
|
-
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
11
|
-
|
|
12
10
|
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
13
11
|
|
|
14
12
|
var _mobxStateTree = require("mobx-state-tree");
|
|
@@ -21,9 +19,7 @@ var _calculateDynamicBlocks = _interopRequireDefault(require("./calculateDynamic
|
|
|
21
19
|
|
|
22
20
|
var _calculateStaticBlocks = _interopRequireDefault(require("./calculateStaticBlocks"));
|
|
23
21
|
|
|
24
|
-
|
|
25
|
-
|
|
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; }
|
|
22
|
+
var _Base1DUtils = require("./Base1DUtils");
|
|
27
23
|
|
|
28
24
|
var Base1DView = _mobxStateTree.types.model('Base1DView', {
|
|
29
25
|
id: _mst.ElementId,
|
|
@@ -83,77 +79,8 @@ var Base1DView = _mobxStateTree.types.model('Base1DView', {
|
|
|
83
79
|
}).reduce(function (a, b) {
|
|
84
80
|
return a + b;
|
|
85
81
|
}, 0);
|
|
86
|
-
},
|
|
87
|
-
|
|
88
|
-
pxToBp: function pxToBp(px) {
|
|
89
|
-
var bpSoFar = 0;
|
|
90
|
-
var bp = (self.offsetPx + px) * self.bpPerPx;
|
|
91
|
-
var n = self.displayedRegions.length;
|
|
92
|
-
|
|
93
|
-
if (bp < 0) {
|
|
94
|
-
var region = self.displayedRegions[0];
|
|
95
|
-
var offset = bp;
|
|
96
|
-
return _objectSpread(_objectSpread({}, (0, _mobxStateTree.getSnapshot)(region)), {}, {
|
|
97
|
-
oob: true,
|
|
98
|
-
coord: region.reversed ? Math.floor(region.end - offset) + 1 : Math.floor(region.start + offset) + 1,
|
|
99
|
-
offset: offset,
|
|
100
|
-
index: 0
|
|
101
|
-
});
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
var interRegionPaddingBp = self.interRegionPaddingWidth * self.bpPerPx;
|
|
105
|
-
var minimumBlockBp = self.minimumBlockWidth * self.bpPerPx;
|
|
106
|
-
|
|
107
|
-
for (var index = 0; index < self.displayedRegions.length; index += 1) {
|
|
108
|
-
var _region = self.displayedRegions[index];
|
|
109
|
-
var len = _region.end - _region.start;
|
|
110
|
-
|
|
111
|
-
var _offset = bp - bpSoFar;
|
|
112
|
-
|
|
113
|
-
if (len + bpSoFar > bp && bpSoFar <= bp) {
|
|
114
|
-
return _objectSpread(_objectSpread({}, (0, _mobxStateTree.getSnapshot)(_region)), {}, {
|
|
115
|
-
oob: false,
|
|
116
|
-
offset: _offset,
|
|
117
|
-
coord: _region.reversed ? Math.floor(_region.end - _offset) + 1 : Math.floor(_region.start + _offset) + 1,
|
|
118
|
-
index: index
|
|
119
|
-
});
|
|
120
|
-
} // add the interRegionPaddingWidth if the boundary is in the screen
|
|
121
|
-
// e.g. offset>0 && offset<width
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
if (_region.end - _region.start > minimumBlockBp && _offset / self.bpPerPx > 0 && _offset / self.bpPerPx < this.width) {
|
|
125
|
-
bpSoFar += len + interRegionPaddingBp;
|
|
126
|
-
} else {
|
|
127
|
-
bpSoFar += len;
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
if (bp >= bpSoFar) {
|
|
132
|
-
var _region2 = self.displayedRegions[n - 1];
|
|
133
|
-
|
|
134
|
-
var _len = _region2.end - _region2.start;
|
|
135
|
-
|
|
136
|
-
var _offset2 = bp - bpSoFar + _len;
|
|
137
|
-
|
|
138
|
-
return _objectSpread(_objectSpread({}, (0, _mobxStateTree.getSnapshot)(_region2)), {}, {
|
|
139
|
-
oob: true,
|
|
140
|
-
offset: _offset2,
|
|
141
|
-
coord: _region2.reversed ? Math.floor(_region2.end - _offset2) + 1 : Math.floor(_region2.start + _offset2) + 1,
|
|
142
|
-
index: n - 1
|
|
143
|
-
});
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
return {
|
|
147
|
-
coord: 0,
|
|
148
|
-
index: 0,
|
|
149
|
-
start: 0,
|
|
150
|
-
refName: '',
|
|
151
|
-
oob: true,
|
|
152
|
-
assemblyName: '',
|
|
153
|
-
offset: 0,
|
|
154
|
-
reversed: false
|
|
155
|
-
};
|
|
156
82
|
}
|
|
83
|
+
|
|
157
84
|
};
|
|
158
85
|
}).views(function (self) {
|
|
159
86
|
return {
|
|
@@ -171,27 +98,26 @@ var Base1DView = _mobxStateTree.types.model('Base1DView', {
|
|
|
171
98
|
}).reduce(function (a, b) {
|
|
172
99
|
return a + b;
|
|
173
100
|
}, 0);
|
|
174
|
-
}
|
|
101
|
+
}
|
|
175
102
|
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
*/
|
|
103
|
+
};
|
|
104
|
+
}).views(function (self) {
|
|
105
|
+
return {
|
|
106
|
+
pxToBp: function pxToBp(px) {
|
|
107
|
+
return (0, _Base1DUtils.pxToBp)(self, px);
|
|
108
|
+
},
|
|
183
109
|
bpToPx: function bpToPx(_ref) {
|
|
184
|
-
var
|
|
110
|
+
var _bpToPx2;
|
|
185
111
|
|
|
186
112
|
var refName = _ref.refName,
|
|
187
113
|
coord = _ref.coord,
|
|
188
114
|
regionNumber = _ref.regionNumber;
|
|
189
|
-
return (
|
|
115
|
+
return (_bpToPx2 = (0, _Base1DUtils.bpToPx)({
|
|
190
116
|
refName: refName,
|
|
191
117
|
coord: coord,
|
|
192
118
|
regionNumber: regionNumber,
|
|
193
119
|
self: self
|
|
194
|
-
})) === null ||
|
|
120
|
+
})) === null || _bpToPx2 === void 0 ? void 0 : _bpToPx2.offsetPx;
|
|
195
121
|
}
|
|
196
122
|
};
|
|
197
123
|
}).actions(function (self) {
|
|
@@ -199,88 +125,12 @@ var Base1DView = _mobxStateTree.types.model('Base1DView', {
|
|
|
199
125
|
setFeatures: function setFeatures(features) {
|
|
200
126
|
self.features = features;
|
|
201
127
|
},
|
|
202
|
-
zoomToDisplayedRegions: function zoomToDisplayedRegions(leftPx, rightPx) {
|
|
203
|
-
if (leftPx === undefined || rightPx === undefined) {
|
|
204
|
-
return;
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
var singleRefSeq = leftPx.refName === rightPx.refName && leftPx.index === rightPx.index; // zooming into one displayed Region
|
|
208
|
-
|
|
209
|
-
if (singleRefSeq && rightPx.offset < leftPx.offset || leftPx.index > rightPx.index) {
|
|
210
|
-
;
|
|
211
|
-
var _ref2 = [rightPx, leftPx];
|
|
212
|
-
leftPx = _ref2[0];
|
|
213
|
-
rightPx = _ref2[1];
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
var startOffset = {
|
|
217
|
-
start: leftPx.start,
|
|
218
|
-
end: leftPx.end,
|
|
219
|
-
index: leftPx.index,
|
|
220
|
-
offset: leftPx.offset
|
|
221
|
-
};
|
|
222
|
-
var endOffset = {
|
|
223
|
-
start: rightPx.start,
|
|
224
|
-
end: rightPx.end,
|
|
225
|
-
index: rightPx.index,
|
|
226
|
-
offset: rightPx.offset
|
|
227
|
-
};
|
|
228
|
-
|
|
229
|
-
if (startOffset && endOffset) {
|
|
230
|
-
this.moveTo(startOffset, endOffset);
|
|
231
|
-
} else {
|
|
232
|
-
throw new Error('regions not found');
|
|
233
|
-
}
|
|
234
|
-
},
|
|
235
128
|
// this makes a zoomed out view that shows all displayedRegions
|
|
236
129
|
// that makes the overview bar square with the scale bar
|
|
237
130
|
showAllRegions: function showAllRegions() {
|
|
238
131
|
self.bpPerPx = self.totalBp / self.width;
|
|
239
132
|
self.offsetPx = 0;
|
|
240
133
|
},
|
|
241
|
-
|
|
242
|
-
/**
|
|
243
|
-
* offset is the base-pair-offset in the displayed region, index is the index of the
|
|
244
|
-
* displayed region in the linear genome view
|
|
245
|
-
*
|
|
246
|
-
* @param start - object as `{start, end, offset, index}`
|
|
247
|
-
* @param end - object as `{start, end, offset, index}`
|
|
248
|
-
*/
|
|
249
|
-
moveTo: function moveTo(start, end) {
|
|
250
|
-
// find locations in the modellist
|
|
251
|
-
var bpSoFar = 0;
|
|
252
|
-
|
|
253
|
-
if (start.index === end.index) {
|
|
254
|
-
bpSoFar += end.offset - start.offset;
|
|
255
|
-
} else {
|
|
256
|
-
var s = self.displayedRegions[start.index];
|
|
257
|
-
bpSoFar += s.end - s.start - start.offset;
|
|
258
|
-
|
|
259
|
-
if (end.index - start.index >= 2) {
|
|
260
|
-
for (var i = start.index + 1; i < end.index; i += 1) {
|
|
261
|
-
bpSoFar += self.displayedRegions[i].end - self.displayedRegions[i].start;
|
|
262
|
-
}
|
|
263
|
-
}
|
|
264
|
-
|
|
265
|
-
bpSoFar += end.offset;
|
|
266
|
-
}
|
|
267
|
-
|
|
268
|
-
this.zoomTo(bpSoFar / (self.width - self.interRegionPaddingWidth * (end.index - start.index)));
|
|
269
|
-
var bpToStart = 0;
|
|
270
|
-
|
|
271
|
-
for (var _i = 0; _i < self.displayedRegions.length; _i += 1) {
|
|
272
|
-
var region = self.displayedRegions[_i];
|
|
273
|
-
|
|
274
|
-
if (start.index === _i) {
|
|
275
|
-
bpToStart += start.offset;
|
|
276
|
-
break;
|
|
277
|
-
} else {
|
|
278
|
-
bpToStart += region.end - region.start;
|
|
279
|
-
}
|
|
280
|
-
}
|
|
281
|
-
|
|
282
|
-
self.offsetPx = Math.round(bpToStart / self.bpPerPx) + self.interRegionPaddingWidth * start.index;
|
|
283
|
-
},
|
|
284
134
|
zoomOut: function zoomOut() {
|
|
285
135
|
this.zoomTo(self.bpPerPx * 2);
|
|
286
136
|
},
|
|
@@ -292,24 +142,29 @@ var Base1DView = _mobxStateTree.types.model('Base1DView', {
|
|
|
292
142
|
var bpPerPx = newBpPerPx;
|
|
293
143
|
|
|
294
144
|
if (bpPerPx === self.bpPerPx) {
|
|
295
|
-
return;
|
|
145
|
+
return self.bpPerPx;
|
|
296
146
|
}
|
|
297
147
|
|
|
298
148
|
var oldBpPerPx = self.bpPerPx;
|
|
299
149
|
self.bpPerPx = bpPerPx; // tweak the offset so that the center of the view remains at the same coordinate
|
|
300
150
|
|
|
301
151
|
self.offsetPx = (0, _index.clamp)(Math.round((self.offsetPx + offset) * oldBpPerPx / bpPerPx - offset), self.minOffset, self.maxOffset);
|
|
152
|
+
return self.bpPerPx;
|
|
302
153
|
},
|
|
303
154
|
scrollTo: function scrollTo(offsetPx) {
|
|
304
155
|
var newOffsetPx = (0, _index.clamp)(offsetPx, self.minOffset, self.maxOffset);
|
|
305
156
|
self.offsetPx = newOffsetPx;
|
|
306
157
|
return newOffsetPx;
|
|
307
158
|
},
|
|
308
|
-
centerAt: function centerAt(
|
|
159
|
+
centerAt: function centerAt(coord, refName, regionNumber) {
|
|
160
|
+
if (!refName) {
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
|
|
309
164
|
var centerPx = self.bpToPx({
|
|
310
165
|
refName: refName,
|
|
311
|
-
coord:
|
|
312
|
-
regionNumber:
|
|
166
|
+
coord: coord,
|
|
167
|
+
regionNumber: regionNumber
|
|
313
168
|
});
|
|
314
169
|
|
|
315
170
|
if (centerPx) {
|
|
@@ -324,6 +179,19 @@ var Base1DView = _mobxStateTree.types.model('Base1DView', {
|
|
|
324
179
|
return newOffsetPx - oldOffsetPx;
|
|
325
180
|
}
|
|
326
181
|
};
|
|
182
|
+
}).actions(function (self) {
|
|
183
|
+
return {
|
|
184
|
+
/**
|
|
185
|
+
* offset is the base-pair-offset in the displayed region, index is the index of the
|
|
186
|
+
* displayed region in the linear genome view
|
|
187
|
+
*
|
|
188
|
+
* @param start - object as `{start, end, offset, index}`
|
|
189
|
+
* @param end - object as `{start, end, offset, index}`
|
|
190
|
+
*/
|
|
191
|
+
moveTo: function moveTo(start, end) {
|
|
192
|
+
(0, _Base1DUtils.moveTo)(self, start, end);
|
|
193
|
+
}
|
|
194
|
+
};
|
|
327
195
|
});
|
|
328
196
|
|
|
329
197
|
var _default = Base1DView;
|
package/util/color/index.js
CHANGED
|
@@ -19,7 +19,7 @@ Object.defineProperty(exports, "namedColorToHex", {
|
|
|
19
19
|
}
|
|
20
20
|
});
|
|
21
21
|
|
|
22
|
-
var
|
|
22
|
+
var _styles = require("@mui/material/styles");
|
|
23
23
|
|
|
24
24
|
var _cssColorsLevel = require("./cssColorsLevel4");
|
|
25
25
|
|
|
@@ -51,7 +51,7 @@ function contrastingTextColor(color) {
|
|
|
51
51
|
|
|
52
52
|
function getLuminance(color) {
|
|
53
53
|
var convertedColor = (0, _cssColorsLevel.namedColorToHex)(color);
|
|
54
|
-
return (0,
|
|
54
|
+
return (0, _styles.getLuminance)(convertedColor || color);
|
|
55
55
|
}
|
|
56
56
|
/**
|
|
57
57
|
* Darken or lighten a color, depending on its luminance.
|
|
@@ -68,7 +68,7 @@ function getLuminance(color) {
|
|
|
68
68
|
function emphasize(color) {
|
|
69
69
|
var coefficient = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0.15;
|
|
70
70
|
var convertedColor = (0, _cssColorsLevel.namedColorToHex)(color);
|
|
71
|
-
return (0,
|
|
71
|
+
return (0, _styles.emphasize)(convertedColor || color, coefficient);
|
|
72
72
|
}
|
|
73
73
|
|
|
74
74
|
function makeContrasting(foreground) {
|
|
@@ -77,14 +77,14 @@ function makeContrasting(foreground) {
|
|
|
77
77
|
var convertedForeground = (0, _cssColorsLevel.namedColorToHex)(foreground) || foreground;
|
|
78
78
|
var convertedBackground = (0, _cssColorsLevel.namedColorToHex)(background) || background;
|
|
79
79
|
var backgroundLuminance = getLuminance(convertedBackground);
|
|
80
|
-
var contrastRatio = (0,
|
|
80
|
+
var contrastRatio = (0, _styles.getContrastRatio)(convertedForeground, convertedBackground);
|
|
81
81
|
var originalColor = convertedForeground;
|
|
82
82
|
var coefficient = 0.05;
|
|
83
83
|
|
|
84
84
|
while (contrastRatio < minContrastRatio) {
|
|
85
|
-
convertedForeground = backgroundLuminance > 0.5 ? (0,
|
|
85
|
+
convertedForeground = backgroundLuminance > 0.5 ? (0, _styles.darken)(originalColor, coefficient) : (0, _styles.lighten)(originalColor, coefficient);
|
|
86
86
|
coefficient += 0.05;
|
|
87
|
-
contrastRatio = (0,
|
|
87
|
+
contrastRatio = (0, _styles.getContrastRatio)(convertedForeground, convertedBackground);
|
|
88
88
|
}
|
|
89
89
|
|
|
90
90
|
return convertedForeground;
|