@jbrowse/plugin-linear-genome-view 1.7.7 → 1.7.10

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.
Files changed (42) hide show
  1. package/dist/BaseLinearDisplay/components/BaseLinearDisplay.d.ts +1 -5
  2. package/dist/BaseLinearDisplay/components/BaseLinearDisplay.js +32 -120
  3. package/dist/BaseLinearDisplay/components/Tooltip.d.ts +8 -0
  4. package/dist/BaseLinearDisplay/components/Tooltip.js +125 -0
  5. package/dist/BaseLinearDisplay/models/BaseLinearDisplayModel.d.ts +3 -3
  6. package/dist/BaseLinearDisplay/models/BaseLinearDisplayModel.js +3 -4
  7. package/dist/LinearGenomeView/components/ExportSvgDialog.js +35 -25
  8. package/dist/LinearGenomeView/components/Header.js +5 -2
  9. package/dist/LinearGenomeView/components/HelpDialog.js +2 -3
  10. package/dist/LinearGenomeView/components/ImportForm.js +47 -47
  11. package/dist/LinearGenomeView/components/LinearGenomeView.js +6 -2
  12. package/dist/LinearGenomeView/components/LinearGenomeView.test.js +2 -2
  13. package/dist/LinearGenomeView/components/OverviewScaleBar.js +2 -2
  14. package/dist/LinearGenomeView/components/RefNameAutocomplete.d.ts +3 -2
  15. package/dist/LinearGenomeView/components/RefNameAutocomplete.js +7 -5
  16. package/dist/LinearGenomeView/components/ScaleBar.d.ts +8 -4
  17. package/dist/LinearGenomeView/components/ScaleBar.js +8 -3
  18. package/dist/LinearGenomeView/components/SearchBox.js +31 -22
  19. package/dist/LinearGenomeView/components/TrackLabel.js +25 -41
  20. package/dist/LinearGenomeView/index.d.ts +7 -11
  21. package/dist/LinearGenomeView/index.js +60 -33
  22. package/dist/LinearGenomeView/index.test.js +22 -5
  23. package/dist/index.js +22 -11
  24. package/package.json +3 -2
  25. package/src/BaseLinearDisplay/components/BaseLinearDisplay.tsx +4 -89
  26. package/src/BaseLinearDisplay/components/Tooltip.tsx +97 -0
  27. package/src/BaseLinearDisplay/models/BaseLinearDisplayModel.tsx +11 -4
  28. package/src/LinearGenomeView/components/ExportSvgDialog.tsx +24 -11
  29. package/src/LinearGenomeView/components/Header.tsx +3 -2
  30. package/src/LinearGenomeView/components/HelpDialog.tsx +5 -4
  31. package/src/LinearGenomeView/components/ImportForm.tsx +37 -32
  32. package/src/LinearGenomeView/components/LinearGenomeView.test.js +2 -2
  33. package/src/LinearGenomeView/components/LinearGenomeView.tsx +16 -10
  34. package/src/LinearGenomeView/components/OverviewScaleBar.tsx +3 -4
  35. package/src/LinearGenomeView/components/RefNameAutocomplete.tsx +10 -5
  36. package/src/LinearGenomeView/components/ScaleBar.tsx +6 -9
  37. package/src/LinearGenomeView/components/SearchBox.tsx +20 -4
  38. package/src/LinearGenomeView/components/TrackLabel.tsx +25 -28
  39. package/src/LinearGenomeView/components/__snapshots__/LinearGenomeView.test.js.snap +4 -21
  40. package/src/LinearGenomeView/index.test.ts +20 -5
  41. package/src/LinearGenomeView/index.tsx +56 -27
  42. package/src/index.ts +35 -30
@@ -70,35 +70,35 @@ var ImportForm = (0, _mobxReact.observer)(function (_ref) {
70
70
  textSearchManager = session.textSearchManager;
71
71
  var rankSearchResults = model.rankSearchResults,
72
72
  isSearchDialogDisplayed = model.isSearchDialogDisplayed,
73
- modelError = model.error;
73
+ error = model.error;
74
74
 
75
75
  var _useState = (0, _react.useState)(assemblyNames[0]),
76
76
  _useState2 = (0, _slicedToArray2.default)(_useState, 2),
77
77
  selectedAsm = _useState2[0],
78
78
  setSelectedAsm = _useState2[1];
79
79
 
80
- var _useState3 = (0, _react.useState)(modelError),
80
+ var _useState3 = (0, _react.useState)(error),
81
81
  _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
82
- error = _useState4[0],
83
- setError = _useState4[1];
82
+ importError = _useState4[0],
83
+ setImportError = _useState4[1];
84
84
 
85
85
  var searchScope = model.searchScope(selectedAsm);
86
86
  var assembly = assemblyManager.get(selectedAsm);
87
87
  var assemblyError = assemblyNames.length ? assembly === null || assembly === void 0 ? void 0 : assembly.error : 'No configured assemblies';
88
88
  var regions = (assembly === null || assembly === void 0 ? void 0 : assembly.regions) || [];
89
- var err = assemblyError || error;
89
+ var err = assemblyError || importError;
90
90
 
91
- var _useState5 = (0, _react.useState)(),
91
+ var _useState5 = (0, _react.useState)(''),
92
92
  _useState6 = (0, _slicedToArray2.default)(_useState5, 2),
93
- myOption = _useState6[0],
94
- setOption = _useState6[1]; // use this instead of useState initializer because the useState initializer
95
- // won't update in response to an observable
93
+ myVal = _useState6[0],
94
+ setValue = _useState6[1];
96
95
 
96
+ var value = myVal || ((_regions$ = regions[0]) === null || _regions$ === void 0 ? void 0 : _regions$.refName); // use this instead of useState initializer because the useState initializer
97
+ // won't update in response to an observable
97
98
 
98
- var option = myOption || new _BaseResults.default({
99
- label: (_regions$ = regions[0]) === null || _regions$ === void 0 ? void 0 : _regions$.refName
99
+ var option = new _BaseResults.default({
100
+ label: value
100
101
  });
101
- var selectedRegion = option === null || option === void 0 ? void 0 : option.getLocation();
102
102
 
103
103
  function fetchResults(_x, _x2) {
104
104
  return _fetchResults.apply(this, arguments);
@@ -155,7 +155,7 @@ var ImportForm = (0, _mobxReact.observer)(function (_ref) {
155
155
 
156
156
  function _handleSelectedRegion() {
157
157
  _handleSelectedRegion = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(input) {
158
- var trackId, location, _assembly$allRefNames2, results;
158
+ var trackId, location, _location$split, _location$split2, ref, rest, allRefs, results;
159
159
 
160
160
  return _regenerator.default.wrap(function _callee2$(_context2) {
161
161
  while (1) {
@@ -171,61 +171,63 @@ var ImportForm = (0, _mobxReact.observer)(function (_ref) {
171
171
  case 2:
172
172
  trackId = option.getTrackId();
173
173
  location = input || option.getLocation() || '';
174
- _context2.prev = 4;
174
+ _location$split = location.split(':'), _location$split2 = (0, _slicedToArray2.default)(_location$split, 2), ref = _location$split2[0], rest = _location$split2[1];
175
+ allRefs = (assembly === null || assembly === void 0 ? void 0 : assembly.allRefNames) || [];
176
+ _context2.prev = 6;
175
177
 
176
- if (!(assembly !== null && assembly !== void 0 && (_assembly$allRefNames2 = assembly.allRefNames) !== null && _assembly$allRefNames2 !== void 0 && _assembly$allRefNames2.includes(location))) {
177
- _context2.next = 9;
178
+ if (!(allRefs.includes(location) || allRefs.includes(ref) && rest !== undefined && !Number.isNaN(parseInt(rest, 10)))) {
179
+ _context2.next = 11;
178
180
  break;
179
181
  }
180
182
 
181
183
  model.navToLocString(location, selectedAsm);
182
- _context2.next = 20;
184
+ _context2.next = 22;
183
185
  break;
184
186
 
185
- case 9:
186
- _context2.next = 11;
187
+ case 11:
188
+ _context2.next = 13;
187
189
  return fetchResults(input, 'exact');
188
190
 
189
- case 11:
191
+ case 13:
190
192
  results = _context2.sent;
191
193
 
192
- if (!(results && results.length > 1)) {
193
- _context2.next = 17;
194
+ if (!(results.length > 1)) {
195
+ _context2.next = 19;
194
196
  break;
195
197
  }
196
198
 
197
199
  model.setSearchResults(results, input.toLowerCase());
198
200
  return _context2.abrupt("return");
199
201
 
200
- case 17:
201
- if ((results === null || results === void 0 ? void 0 : results.length) === 1) {
202
+ case 19:
203
+ if (results.length === 1) {
202
204
  location = results[0].getLocation();
203
205
  trackId = results[0].getTrackId();
204
206
  }
205
207
 
206
- case 18:
208
+ case 20:
207
209
  model.navToLocString(location, selectedAsm);
208
210
 
209
211
  if (trackId) {
210
212
  model.showTrack(trackId);
211
213
  }
212
214
 
213
- case 20:
214
- _context2.next = 26;
215
+ case 22:
216
+ _context2.next = 28;
215
217
  break;
216
218
 
217
- case 22:
218
- _context2.prev = 22;
219
- _context2.t0 = _context2["catch"](4);
219
+ case 24:
220
+ _context2.prev = 24;
221
+ _context2.t0 = _context2["catch"](6);
220
222
  console.error(_context2.t0);
221
223
  session.notify("".concat(_context2.t0), 'warning');
222
224
 
223
- case 26:
225
+ case 28:
224
226
  case "end":
225
227
  return _context2.stop();
226
228
  }
227
229
  }
228
- }, _callee2, null, [[4, 22]]);
230
+ }, _callee2, null, [[6, 24]]);
229
231
  }));
230
232
  return _handleSelectedRegion.apply(this, arguments);
231
233
  }
@@ -241,7 +243,12 @@ var ImportForm = (0, _mobxReact.observer)(function (_ref) {
241
243
  className: classes.importFormContainer
242
244
  }, /*#__PURE__*/_react.default.createElement("form", {
243
245
  onSubmit: function onSubmit(event) {
244
- return event.preventDefault();
246
+ event.preventDefault();
247
+ model.setError(undefined);
248
+
249
+ if (value) {
250
+ handleSelectedRegion(value);
251
+ }
245
252
  }
246
253
  }, /*#__PURE__*/_react.default.createElement(_core.Grid, {
247
254
  container: true,
@@ -252,7 +259,7 @@ var ImportForm = (0, _mobxReact.observer)(function (_ref) {
252
259
  item: true
253
260
  }, /*#__PURE__*/_react.default.createElement(_AssemblySelector.default, {
254
261
  onChange: function onChange(val) {
255
- setError(undefined);
262
+ setImportError('');
256
263
  setSelectedAsm(val);
257
264
  },
258
265
  session: session,
@@ -268,15 +275,15 @@ var ImportForm = (0, _mobxReact.observer)(function (_ref) {
268
275
  style: {
269
276
  color: 'red'
270
277
  }
271
- }) : selectedRegion ? /*#__PURE__*/_react.default.createElement(_RefNameAutocomplete.default, {
278
+ }) : value ? /*#__PURE__*/_react.default.createElement(_RefNameAutocomplete.default, {
272
279
  fetchResults: fetchResults,
273
280
  model: model,
274
281
  assemblyName: assemblyError ? undefined : selectedAsm,
275
- value: selectedRegion // note: minWidth 270 accomodates full width of helperText
282
+ value: value // note: minWidth 270 accomodates full width of helperText
276
283
  ,
277
284
  minWidth: 270,
278
- onSelect: function onSelect(option) {
279
- return setOption(option);
285
+ onChange: function onChange(str) {
286
+ return setValue(str);
280
287
  },
281
288
  TextFieldProps: {
282
289
  variant: 'outlined',
@@ -298,19 +305,12 @@ var ImportForm = (0, _mobxReact.observer)(function (_ref) {
298
305
  item: true
299
306
  }, /*#__PURE__*/_react.default.createElement(_core.Button, {
300
307
  type: "submit",
301
- disabled: !selectedRegion,
308
+ disabled: !value,
302
309
  className: classes.button,
303
- onClick: function onClick() {
304
- model.setError(undefined);
305
-
306
- if (selectedRegion) {
307
- handleSelectedRegion(selectedRegion);
308
- }
309
- },
310
310
  variant: "contained",
311
311
  color: "primary"
312
312
  }, "Open"), /*#__PURE__*/_react.default.createElement(_core.Button, {
313
- disabled: !selectedRegion,
313
+ disabled: !value,
314
314
  className: classes.button,
315
315
  onClick: function onClick() {
316
316
  model.setError(undefined);
@@ -109,7 +109,7 @@ var LinearGenomeView = (0, _mobxReact.observer)(function (_ref) {
109
109
  }, !tracks.length ? /*#__PURE__*/_react.default.createElement(_core.Paper, {
110
110
  variant: "outlined",
111
111
  className: classes.note
112
- }, /*#__PURE__*/_react.default.createElement(_core.Typography, null, "No tracks active."), /*#__PURE__*/_react.default.createElement(_core.Button, {
112
+ }, !model.hideNoTracksActive ? /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_core.Typography, null, "No tracks active."), /*#__PURE__*/_react.default.createElement(_core.Button, {
113
113
  variant: "contained",
114
114
  color: "primary",
115
115
  onClick: model.activateTrackSelector,
@@ -117,7 +117,11 @@ var LinearGenomeView = (0, _mobxReact.observer)(function (_ref) {
117
117
  zIndex: 1000
118
118
  },
119
119
  startIcon: /*#__PURE__*/_react.default.createElement(_Icons.TrackSelector, null)
120
- }, "Open track selector")) : tracks.map(function (track) {
120
+ }, "Open track selector")) : /*#__PURE__*/_react.default.createElement("div", {
121
+ style: {
122
+ height: '48px'
123
+ }
124
+ })) : tracks.map(function (track) {
121
125
  return /*#__PURE__*/_react.default.createElement(_TrackContainer.default, {
122
126
  key: track.id,
123
127
  model: model,
@@ -129,7 +129,7 @@ describe('<LinearGenomeView />', function () {
129
129
 
130
130
  case 9:
131
131
  _context2.next = 11;
132
- return findByText('100 bp');
132
+ return findByText('100bp');
133
133
 
134
134
  case 11:
135
135
  expect(container.firstChild).toMatchSnapshot();
@@ -215,7 +215,7 @@ describe('<LinearGenomeView />', function () {
215
215
 
216
216
  case 10:
217
217
  _context3.next = 12;
218
- return findByText('798 bp');
218
+ return findByText('798bp');
219
219
 
220
220
  case 12:
221
221
  _context3.next = 14;
@@ -66,7 +66,6 @@ var useStyles = (0, _core.makeStyles)(function (theme) {
66
66
  },
67
67
  scaleBarLabel: {
68
68
  height: _.HEADER_OVERVIEW_HEIGHT,
69
- width: 1,
70
69
  position: 'absolute',
71
70
  display: 'flex',
72
71
  justifyContent: 'center',
@@ -244,6 +243,7 @@ var OverviewBox = (0, _mobxReact.observer)(function (_ref5) {
244
243
  overview = _ref5.overview;
245
244
  var classes = useStyles();
246
245
  var cytobandOffset = model.cytobandOffset,
246
+ bpPerPx = model.bpPerPx,
247
247
  showCytobands = model.showCytobands;
248
248
  var start = block.start,
249
249
  end = block.end,
@@ -289,7 +289,7 @@ var OverviewBox = (0, _mobxReact.observer)(function (_ref5) {
289
289
  pointerEvents: 'none',
290
290
  color: refNameColor
291
291
  }
292
- }, tickLabel.toLocaleString('en-US'));
292
+ }, (0, _util.getTickDisplayStr)(tickLabel, bpPerPx));
293
293
  }) : null, showCytobands ? /*#__PURE__*/_react.default.createElement("svg", {
294
294
  style: {
295
295
  width: '100%'
@@ -6,9 +6,10 @@ export interface Option {
6
6
  group?: string;
7
7
  result: BaseResult;
8
8
  }
9
- declare function RefNameAutocomplete({ model, showHelp, onSelect, assemblyName, style, fetchResults, value, minWidth, TextFieldProps, }: {
9
+ declare function RefNameAutocomplete({ model, onSelect, assemblyName, style, fetchResults, onChange, value, showHelp, minWidth, TextFieldProps, }: {
10
10
  model: LinearGenomeViewModel;
11
- onSelect: (region: BaseResult) => void;
11
+ onSelect?: (region: BaseResult) => void;
12
+ onChange?: (val: string) => void;
12
13
  assemblyName?: string;
13
14
  value?: string;
14
15
  fetchResults: (query: string) => Promise<BaseResult[]>;
@@ -80,13 +80,14 @@ var MyPopper = function MyPopper(props) {
80
80
 
81
81
  function RefNameAutocomplete(_ref) {
82
82
  var model = _ref.model,
83
- _ref$showHelp = _ref.showHelp,
84
- showHelp = _ref$showHelp === void 0 ? true : _ref$showHelp,
85
83
  onSelect = _ref.onSelect,
86
84
  assemblyName = _ref.assemblyName,
87
85
  style = _ref.style,
88
86
  fetchResults = _ref.fetchResults,
87
+ onChange = _ref.onChange,
89
88
  value = _ref.value,
89
+ _ref$showHelp = _ref.showHelp,
90
+ showHelp = _ref$showHelp === void 0 ? true : _ref$showHelp,
90
91
  _ref$minWidth = _ref.minWidth,
91
92
  minWidth = _ref$minWidth === void 0 ? 200 : _ref$minWidth,
92
93
  _ref$TextFieldProps = _ref.TextFieldProps,
@@ -223,7 +224,8 @@ function RefNameAutocomplete(_ref) {
223
224
  loading: !loaded,
224
225
  inputValue: inputValue,
225
226
  onInputChange: function onInputChange(event, newInputValue) {
226
- return setInputValue(newInputValue);
227
+ setInputValue(newInputValue);
228
+ onChange === null || onChange === void 0 ? void 0 : onChange(newInputValue);
227
229
  },
228
230
  loadingText: "loading results",
229
231
  open: open,
@@ -246,11 +248,11 @@ function RefNameAutocomplete(_ref) {
246
248
 
247
249
  if (typeof selectedOption === 'string') {
248
250
  // handles string inputs on keyPress enter
249
- onSelect(new _BaseResults.default({
251
+ onSelect === null || onSelect === void 0 ? void 0 : onSelect(new _BaseResults.default({
250
252
  label: selectedOption
251
253
  }));
252
254
  } else {
253
- onSelect(selectedOption.result);
255
+ onSelect === null || onSelect === void 0 ? void 0 : onSelect(selectedOption.result);
254
256
  }
255
257
 
256
258
  setInputValue(inputBoxVal);
@@ -21,6 +21,7 @@ declare const _default: React.ForwardRefExoticComponent<{
21
21
  tracks: import("mobx-state-tree").IArrayType<import("mobx-state-tree").IAnyType>;
22
22
  hideHeader: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
23
23
  hideHeaderOverview: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
24
+ hideNoTracksActive: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
24
25
  trackSelectorType: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<"hierarchical">, [undefined]>;
25
26
  trackLabels: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
26
27
  showCenterLine: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
@@ -52,6 +53,7 @@ declare const _default: React.ForwardRefExoticComponent<{
52
53
  } & {
53
54
  readonly width: number;
54
55
  readonly interRegionPaddingWidth: number;
56
+ readonly assemblyNames: string[];
55
57
  } & {
56
58
  readonly assemblyErrors: string;
57
59
  readonly assembliesInitialized: boolean;
@@ -71,7 +73,6 @@ declare const _default: React.ForwardRefExoticComponent<{
71
73
  readonly minOffset: number;
72
74
  readonly displayedRegionsTotalPx: number;
73
75
  renderProps(): any;
74
- readonly assemblyNames: string[];
75
76
  searchScope(assemblyName: string): {
76
77
  assemblyName: string;
77
78
  includeAggregateIndexes: boolean;
@@ -117,6 +118,7 @@ declare const _default: React.ForwardRefExoticComponent<{
117
118
  setError(error: Error | undefined): void;
118
119
  toggleHeader(): void;
119
120
  toggleHeaderOverview(): void;
121
+ toggleNoTracksActive(): void;
120
122
  scrollTo(offsetPx: number): number;
121
123
  zoomTo(bpPerPx: number): number;
122
124
  setOffsets(left: import("..").BpOffset | undefined, right: import("..").BpOffset | undefined): void;
@@ -130,7 +132,7 @@ declare const _default: React.ForwardRefExoticComponent<{
130
132
  moveTrack(movingTrackId: string, targetTrackId: string): void;
131
133
  closeView(): void;
132
134
  toggleTrack(trackId: string): void;
133
- setTrackLabels(setting: "overlapping" | "offset" | "hidden"): void;
135
+ setTrackLabels(setting: "offset" | "hidden" | "overlapping"): void;
134
136
  toggleCenterLine(): void;
135
137
  setDisplayedRegions(regions: import("@jbrowse/core/util").Region[]): void;
136
138
  activateTrackSelector(): import("@jbrowse/core/util").Widget;
@@ -218,6 +220,7 @@ declare const _default: React.ForwardRefExoticComponent<{
218
220
  tracks: import("mobx-state-tree").IArrayType<import("mobx-state-tree").IAnyType>;
219
221
  hideHeader: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
220
222
  hideHeaderOverview: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
223
+ hideNoTracksActive: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
221
224
  trackSelectorType: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<"hierarchical">, [undefined]>;
222
225
  trackLabels: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
223
226
  showCenterLine: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
@@ -249,6 +252,7 @@ declare const _default: React.ForwardRefExoticComponent<{
249
252
  } & {
250
253
  readonly width: number;
251
254
  readonly interRegionPaddingWidth: number;
255
+ readonly assemblyNames: string[];
252
256
  } & {
253
257
  readonly assemblyErrors: string;
254
258
  readonly assembliesInitialized: boolean;
@@ -268,7 +272,6 @@ declare const _default: React.ForwardRefExoticComponent<{
268
272
  readonly minOffset: number;
269
273
  readonly displayedRegionsTotalPx: number;
270
274
  renderProps(): any;
271
- readonly assemblyNames: string[];
272
275
  searchScope(assemblyName: string): {
273
276
  assemblyName: string;
274
277
  includeAggregateIndexes: boolean;
@@ -314,6 +317,7 @@ declare const _default: React.ForwardRefExoticComponent<{
314
317
  setError(error: Error | undefined): void;
315
318
  toggleHeader(): void;
316
319
  toggleHeaderOverview(): void;
320
+ toggleNoTracksActive(): void;
317
321
  scrollTo(offsetPx: number): number;
318
322
  zoomTo(bpPerPx: number): number;
319
323
  setOffsets(left: import("..").BpOffset | undefined, right: import("..").BpOffset | undefined): void;
@@ -327,7 +331,7 @@ declare const _default: React.ForwardRefExoticComponent<{
327
331
  moveTrack(movingTrackId: string, targetTrackId: string): void;
328
332
  closeView(): void;
329
333
  toggleTrack(trackId: string): void;
330
- setTrackLabels(setting: "overlapping" | "offset" | "hidden"): void;
334
+ setTrackLabels(setting: "offset" | "hidden" | "overlapping"): void;
331
335
  toggleCenterLine(): void;
332
336
  setDisplayedRegions(regions: import("@jbrowse/core/util").Region[]): void;
333
337
  activateTrackSelector(): import("@jbrowse/core/util").Widget;
@@ -27,6 +27,8 @@ var _Block = require("../../BaseLinearDisplay/components/Block");
27
27
 
28
28
  var _util = require("../util");
29
29
 
30
+ var _util2 = require("@jbrowse/core/util");
31
+
30
32
  var _excluded = ["model", "style", "className"];
31
33
 
32
34
  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; }
@@ -100,16 +102,19 @@ var RenderedRefNameLabels = (0, _mobxReact.observer)(function (_ref) {
100
102
  var RenderedScaleBarLabels = (0, _mobxReact.observer)(function (_ref2) {
101
103
  var model = _ref2.model;
102
104
  var classes = useStyles();
105
+ var bpPerPx = model.bpPerPx;
103
106
  return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, model.staticBlocks.map(function (block, index) {
104
107
  if (block instanceof _blockTypes.ContentBlock) {
105
- var ticks = (0, _util.makeTicks)(block.start, block.end, model.bpPerPx, true, false);
108
+ var start = block.start,
109
+ end = block.end;
110
+ var ticks = (0, _util.makeTicks)(start, end, bpPerPx, true, false);
106
111
  return /*#__PURE__*/_react.default.createElement(_Block.ContentBlock, {
107
112
  key: "".concat(block.key, "-").concat(index),
108
113
  block: block
109
114
  }, ticks.map(function (tick) {
110
115
  if (tick.type === 'major') {
111
116
  var x = (block.reversed ? block.end - tick.base : tick.base - block.start) / model.bpPerPx;
112
- var baseNumber = (tick.base + 1).toLocaleString('en-US');
117
+ var baseNumber = tick.base + 1;
113
118
  return /*#__PURE__*/_react.default.createElement("div", {
114
119
  key: tick.base,
115
120
  className: classes.tick,
@@ -118,7 +123,7 @@ var RenderedScaleBarLabels = (0, _mobxReact.observer)(function (_ref2) {
118
123
  }
119
124
  }, baseNumber ? /*#__PURE__*/_react.default.createElement(_core.Typography, {
120
125
  className: classes.majorTickLabel
121
- }, baseNumber) : null);
126
+ }, (0, _util2.getTickDisplayStr)(baseNumber, bpPerPx)) : null);
122
127
  }
123
128
 
124
129
  return null;
@@ -9,6 +9,8 @@ exports.default = void 0;
9
9
 
10
10
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
11
11
 
12
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
13
+
12
14
  var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
13
15
 
14
16
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
@@ -54,7 +56,12 @@ function SearchBox(_ref) {
54
56
 
55
57
  function fetchResults(_x, _x2) {
56
58
  return _fetchResults.apply(this, arguments);
57
- }
59
+ } // gets a string as input, or use stored option results from previous query,
60
+ // then re-query and
61
+ // 1) if it has multiple results: pop a dialog
62
+ // 2) if it's a single result navigate to it
63
+ // 3) else assume it's a locstring and navigate to it
64
+
58
65
 
59
66
  function _fetchResults() {
60
67
  _fetchResults = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(query, searchType) {
@@ -104,7 +111,7 @@ function SearchBox(_ref) {
104
111
 
105
112
  function _handleSelectedRegion() {
106
113
  _handleSelectedRegion = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(option) {
107
- var trackId, location, label, _assembly$allRefNames2, results;
114
+ var trackId, location, label, _location$split, _location$split2, ref, rest, allRefs, results;
108
115
 
109
116
  return _regenerator.default.wrap(function _callee2$(_context2) {
110
117
  while (1) {
@@ -113,61 +120,63 @@ function SearchBox(_ref) {
113
120
  trackId = option.getTrackId();
114
121
  location = option.getLocation();
115
122
  label = option.getLabel();
116
- _context2.prev = 3;
123
+ _location$split = location.split(':'), _location$split2 = (0, _slicedToArray2.default)(_location$split, 2), ref = _location$split2[0], rest = _location$split2[1];
124
+ allRefs = (assembly === null || assembly === void 0 ? void 0 : assembly.allRefNames) || [];
125
+ _context2.prev = 5;
117
126
 
118
- if (!(assembly !== null && assembly !== void 0 && (_assembly$allRefNames2 = assembly.allRefNames) !== null && _assembly$allRefNames2 !== void 0 && _assembly$allRefNames2.includes(location))) {
119
- _context2.next = 8;
127
+ if (!(allRefs.includes(location) || allRefs.includes(ref) && rest !== undefined && !Number.isNaN(parseInt(rest, 10)))) {
128
+ _context2.next = 10;
120
129
  break;
121
130
  }
122
131
 
123
- model.navToLocString(location);
124
- _context2.next = 19;
132
+ model.navToLocString(location, assemblyName);
133
+ _context2.next = 21;
125
134
  break;
126
135
 
127
- case 8:
128
- _context2.next = 10;
136
+ case 10:
137
+ _context2.next = 12;
129
138
  return fetchResults(label, 'exact');
130
139
 
131
- case 10:
140
+ case 12:
132
141
  results = _context2.sent;
133
142
 
134
- if (!(results && results.length > 1)) {
135
- _context2.next = 16;
143
+ if (!(results.length > 1)) {
144
+ _context2.next = 18;
136
145
  break;
137
146
  }
138
147
 
139
148
  model.setSearchResults(results, label.toLowerCase());
140
149
  return _context2.abrupt("return");
141
150
 
142
- case 16:
143
- if ((results === null || results === void 0 ? void 0 : results.length) === 1) {
151
+ case 18:
152
+ if (results.length === 1) {
144
153
  location = results[0].getLocation();
145
154
  trackId = results[0].getTrackId();
146
155
  }
147
156
 
148
- case 17:
157
+ case 19:
149
158
  model.navToLocString(location, assemblyName);
150
159
 
151
160
  if (trackId) {
152
161
  model.showTrack(trackId);
153
162
  }
154
163
 
155
- case 19:
156
- _context2.next = 25;
164
+ case 21:
165
+ _context2.next = 27;
157
166
  break;
158
167
 
159
- case 21:
160
- _context2.prev = 21;
161
- _context2.t0 = _context2["catch"](3);
168
+ case 23:
169
+ _context2.prev = 23;
170
+ _context2.t0 = _context2["catch"](5);
162
171
  console.error(_context2.t0);
163
172
  session.notify("".concat(_context2.t0), 'warning');
164
173
 
165
- case 25:
174
+ case 27:
166
175
  case "end":
167
176
  return _context2.stop();
168
177
  }
169
178
  }
170
- }, _callee2, null, [[3, 21]]);
179
+ }, _callee2, null, [[5, 23]]);
171
180
  }));
172
181
  return _handleSelectedRegion.apply(this, arguments);
173
182
  }