@jbrowse/core 2.0.0 → 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.
@@ -0,0 +1,32 @@
1
+ import { ViewSnap } from './index';
2
+ export interface BpOffset {
3
+ refName?: string;
4
+ index: number;
5
+ offset: number;
6
+ start?: number;
7
+ end?: number;
8
+ }
9
+ export declare function moveTo(self: ViewSnap & {
10
+ zoomTo: (arg: number) => number;
11
+ scrollTo: (arg: number) => void;
12
+ }, start?: BpOffset, end?: BpOffset): void;
13
+ export declare function pxToBp(self: ViewSnap, px: number): {
14
+ coord: number;
15
+ index: number;
16
+ refName: string;
17
+ oob: boolean;
18
+ assemblyName: string;
19
+ offset: number;
20
+ start: number;
21
+ end: number;
22
+ reversed: boolean;
23
+ };
24
+ export declare function bpToPx({ refName, coord, regionNumber, self, }: {
25
+ refName: string;
26
+ coord: number;
27
+ regionNumber?: number;
28
+ self: ViewSnap;
29
+ }): {
30
+ index: number;
31
+ offsetPx: number;
32
+ } | undefined;
@@ -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
- export interface BpOffset {
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,30 +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
51
  bpToPx({ refName, coord, regionNumber, }: {
66
52
  refName: string;
67
53
  coord: number;
@@ -69,8 +55,14 @@ declare const Base1DView: import("mobx-state-tree").IModelType<{
69
55
  }): number | undefined;
70
56
  } & {
71
57
  setFeatures(features: Feature[]): void;
72
- zoomToDisplayedRegions(leftPx: BpOffset | undefined, rightPx: BpOffset | undefined): void;
73
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
+ } & {
74
66
  /**
75
67
  * offset is the base-pair-offset in the displayed region, index is the index of the
76
68
  * displayed region in the linear genome view
@@ -78,13 +70,7 @@ declare const Base1DView: import("mobx-state-tree").IModelType<{
78
70
  * @param start - object as `{start, end, offset, index}`
79
71
  * @param end - object as `{start, end, offset, index}`
80
72
  */
81
- moveTo(start: BpOffset, end: BpOffset): void;
82
- zoomOut(): void;
83
- zoomIn(): void;
84
- zoomTo(newBpPerPx: number, offset?: number): void;
85
- scrollTo(offsetPx: number): number;
86
- centerAt(coord: number, refName: string, regionNumber: number): void;
87
- scroll(distance: number): number;
73
+ moveTo(start?: BpOffset, end?: BpOffset): void;
88
74
  }, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>;
89
75
  export declare type Base1DViewStateModel = typeof Base1DView;
90
76
  export declare type Base1DViewModel = Instance<Base1DViewStateModel>;
@@ -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
- 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; }
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,82 +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
- var snap = (0, _mobxStateTree.getSnapshot)(region);
97
- return _objectSpread(_objectSpread({}, snap), {}, {
98
- oob: true,
99
- coord: region.reversed ? Math.floor(region.end - offset) + 1 : Math.floor(region.start + offset) + 1,
100
- offset: offset,
101
- index: 0
102
- });
103
- }
104
-
105
- var interRegionPaddingBp = self.interRegionPaddingWidth * self.bpPerPx;
106
- var minimumBlockBp = self.minimumBlockWidth * self.bpPerPx;
107
-
108
- for (var index = 0; index < self.displayedRegions.length; index += 1) {
109
- var _region = self.displayedRegions[index];
110
- var len = _region.end - _region.start;
111
-
112
- var _offset = bp - bpSoFar;
113
-
114
- if (len + bpSoFar > bp && bpSoFar <= bp) {
115
- var _snap = (0, _mobxStateTree.getSnapshot)(_region);
116
-
117
- return _objectSpread(_objectSpread({}, _snap), {}, {
118
- oob: false,
119
- offset: _offset,
120
- coord: _region.reversed ? Math.floor(_region.end - _offset) + 1 : Math.floor(_region.start + _offset) + 1,
121
- index: index
122
- });
123
- } // add the interRegionPaddingWidth if the boundary is in the screen
124
- // e.g. offset>0 && offset<width
125
-
126
-
127
- if (_region.end - _region.start > minimumBlockBp && _offset / self.bpPerPx > 0 && _offset / self.bpPerPx < this.width) {
128
- bpSoFar += len + interRegionPaddingBp;
129
- } else {
130
- bpSoFar += len;
131
- }
132
- }
133
-
134
- if (bp >= bpSoFar) {
135
- var _region2 = self.displayedRegions[n - 1];
136
-
137
- var _len = _region2.end - _region2.start;
138
-
139
- var _offset2 = bp - bpSoFar + _len;
140
-
141
- var _snap2 = (0, _mobxStateTree.getSnapshot)(_region2);
142
-
143
- return _objectSpread(_objectSpread({}, _snap2), {}, {
144
- oob: true,
145
- offset: _offset2,
146
- coord: _region2.reversed ? Math.floor(_region2.end - _offset2) + 1 : Math.floor(_region2.start + _offset2) + 1,
147
- index: n - 1
148
- });
149
- }
150
-
151
- return {
152
- coord: 0,
153
- index: 0,
154
- start: 0,
155
- refName: '',
156
- oob: true,
157
- assemblyName: '',
158
- offset: 0,
159
- reversed: false
160
- };
161
82
  }
83
+
162
84
  };
163
85
  }).views(function (self) {
164
86
  return {
@@ -176,20 +98,26 @@ var Base1DView = _mobxStateTree.types.model('Base1DView', {
176
98
  }).reduce(function (a, b) {
177
99
  return a + b;
178
100
  }, 0);
179
- },
101
+ }
180
102
 
103
+ };
104
+ }).views(function (self) {
105
+ return {
106
+ pxToBp: function pxToBp(px) {
107
+ return (0, _Base1DUtils.pxToBp)(self, px);
108
+ },
181
109
  bpToPx: function bpToPx(_ref) {
182
- var _viewBpToPx;
110
+ var _bpToPx2;
183
111
 
184
112
  var refName = _ref.refName,
185
113
  coord = _ref.coord,
186
114
  regionNumber = _ref.regionNumber;
187
- return (_viewBpToPx = (0, _index.viewBpToPx)({
115
+ return (_bpToPx2 = (0, _Base1DUtils.bpToPx)({
188
116
  refName: refName,
189
117
  coord: coord,
190
118
  regionNumber: regionNumber,
191
119
  self: self
192
- })) === null || _viewBpToPx === void 0 ? void 0 : _viewBpToPx.offsetPx;
120
+ })) === null || _bpToPx2 === void 0 ? void 0 : _bpToPx2.offsetPx;
193
121
  }
194
122
  };
195
123
  }).actions(function (self) {
@@ -197,88 +125,12 @@ var Base1DView = _mobxStateTree.types.model('Base1DView', {
197
125
  setFeatures: function setFeatures(features) {
198
126
  self.features = features;
199
127
  },
200
- zoomToDisplayedRegions: function zoomToDisplayedRegions(leftPx, rightPx) {
201
- if (leftPx === undefined || rightPx === undefined) {
202
- return;
203
- }
204
-
205
- var singleRefSeq = leftPx.refName === rightPx.refName && leftPx.index === rightPx.index; // zooming into one displayed Region
206
-
207
- if (singleRefSeq && rightPx.offset < leftPx.offset || leftPx.index > rightPx.index) {
208
- ;
209
- var _ref2 = [rightPx, leftPx];
210
- leftPx = _ref2[0];
211
- rightPx = _ref2[1];
212
- }
213
-
214
- var startOffset = {
215
- start: leftPx.start,
216
- end: leftPx.end,
217
- index: leftPx.index,
218
- offset: leftPx.offset
219
- };
220
- var endOffset = {
221
- start: rightPx.start,
222
- end: rightPx.end,
223
- index: rightPx.index,
224
- offset: rightPx.offset
225
- };
226
-
227
- if (startOffset && endOffset) {
228
- this.moveTo(startOffset, endOffset);
229
- } else {
230
- throw new Error('regions not found');
231
- }
232
- },
233
128
  // this makes a zoomed out view that shows all displayedRegions
234
129
  // that makes the overview bar square with the scale bar
235
130
  showAllRegions: function showAllRegions() {
236
131
  self.bpPerPx = self.totalBp / self.width;
237
132
  self.offsetPx = 0;
238
133
  },
239
-
240
- /**
241
- * offset is the base-pair-offset in the displayed region, index is the index of the
242
- * displayed region in the linear genome view
243
- *
244
- * @param start - object as `{start, end, offset, index}`
245
- * @param end - object as `{start, end, offset, index}`
246
- */
247
- moveTo: function moveTo(start, end) {
248
- // find locations in the modellist
249
- var bpSoFar = 0;
250
-
251
- if (start.index === end.index) {
252
- bpSoFar += end.offset - start.offset;
253
- } else {
254
- var s = self.displayedRegions[start.index];
255
- bpSoFar += s.end - s.start - start.offset;
256
-
257
- if (end.index - start.index >= 2) {
258
- for (var i = start.index + 1; i < end.index; i += 1) {
259
- bpSoFar += self.displayedRegions[i].end - self.displayedRegions[i].start;
260
- }
261
- }
262
-
263
- bpSoFar += end.offset;
264
- }
265
-
266
- this.zoomTo(bpSoFar / (self.width - self.interRegionPaddingWidth * (end.index - start.index)));
267
- var bpToStart = 0;
268
-
269
- for (var _i = 0; _i < self.displayedRegions.length; _i += 1) {
270
- var region = self.displayedRegions[_i];
271
-
272
- if (start.index === _i) {
273
- bpToStart += start.offset;
274
- break;
275
- } else {
276
- bpToStart += region.end - region.start;
277
- }
278
- }
279
-
280
- self.offsetPx = Math.round(bpToStart / self.bpPerPx) + self.interRegionPaddingWidth * start.index;
281
- },
282
134
  zoomOut: function zoomOut() {
283
135
  this.zoomTo(self.bpPerPx * 2);
284
136
  },
@@ -290,13 +142,14 @@ var Base1DView = _mobxStateTree.types.model('Base1DView', {
290
142
  var bpPerPx = newBpPerPx;
291
143
 
292
144
  if (bpPerPx === self.bpPerPx) {
293
- return;
145
+ return self.bpPerPx;
294
146
  }
295
147
 
296
148
  var oldBpPerPx = self.bpPerPx;
297
149
  self.bpPerPx = bpPerPx; // tweak the offset so that the center of the view remains at the same coordinate
298
150
 
299
151
  self.offsetPx = (0, _index.clamp)(Math.round((self.offsetPx + offset) * oldBpPerPx / bpPerPx - offset), self.minOffset, self.maxOffset);
152
+ return self.bpPerPx;
300
153
  },
301
154
  scrollTo: function scrollTo(offsetPx) {
302
155
  var newOffsetPx = (0, _index.clamp)(offsetPx, self.minOffset, self.maxOffset);
@@ -304,6 +157,10 @@ var Base1DView = _mobxStateTree.types.model('Base1DView', {
304
157
  return newOffsetPx;
305
158
  },
306
159
  centerAt: function centerAt(coord, refName, regionNumber) {
160
+ if (!refName) {
161
+ return;
162
+ }
163
+
307
164
  var centerPx = self.bpToPx({
308
165
  refName: refName,
309
166
  coord: coord,
@@ -322,6 +179,19 @@ var Base1DView = _mobxStateTree.types.model('Base1DView', {
322
179
  return newOffsetPx - oldOffsetPx;
323
180
  }
324
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
+ };
325
195
  });
326
196
 
327
197
  var _default = Base1DView;
package/util/index.d.ts CHANGED
@@ -1,7 +1,8 @@
1
- import { IAnyStateTreeNode } from 'mobx-state-tree';
1
+ import { IAnyStateTreeNode, IStateTreeNode } from 'mobx-state-tree';
2
2
  import { IReactionPublic, IReactionOptions } from 'mobx';
3
3
  import SimpleFeature, { Feature, isFeature } from './simpleFeature';
4
4
  import { AssemblyManager, Region, TypeTestedByPredicate } from './types';
5
+ import { BaseBlock } from './blockTypes';
5
6
  export type { Feature };
6
7
  export * from './types';
7
8
  export * from './aborting';
@@ -318,22 +319,19 @@ export declare type ViewSnap = {
318
319
  interRegionPaddingWidth: number;
319
320
  minimumBlockWidth: number;
320
321
  width: number;
321
- displayedRegions: {
322
+ offsetPx: number;
323
+ staticBlocks: {
324
+ contentBlocks: BaseBlock[];
325
+ blocks: BaseBlock[];
326
+ };
327
+ displayedRegions: (IStateTreeNode & {
322
328
  start: number;
323
329
  end: number;
324
330
  refName: string;
325
331
  reversed: boolean;
326
- }[];
332
+ assemblyName: string;
333
+ })[];
327
334
  };
328
- export declare function viewBpToPx({ refName, coord, regionNumber, self, }: {
329
- refName: string;
330
- coord: number;
331
- regionNumber?: number;
332
- self: ViewSnap;
333
- }): {
334
- index: number;
335
- offsetPx: number;
336
- } | undefined;
337
335
  export declare function supportedIndexingAdapters(type: string): boolean;
338
336
  export declare function getBpDisplayStr(totalBp: number): string;
339
337
  export declare function toLocale(n: number): string;