@jbrowse/plugin-linear-genome-view 1.7.9 → 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 (32) 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.js +3 -2
  6. package/dist/LinearGenomeView/components/Header.js +5 -2
  7. package/dist/LinearGenomeView/components/HelpDialog.js +2 -3
  8. package/dist/LinearGenomeView/components/LinearGenomeView.js +6 -2
  9. package/dist/LinearGenomeView/components/LinearGenomeView.test.js +2 -2
  10. package/dist/LinearGenomeView/components/OverviewScaleBar.js +2 -2
  11. package/dist/LinearGenomeView/components/ScaleBar.d.ts +6 -2
  12. package/dist/LinearGenomeView/components/ScaleBar.js +8 -3
  13. package/dist/LinearGenomeView/components/TrackLabel.js +25 -41
  14. package/dist/LinearGenomeView/index.d.ts +3 -8
  15. package/dist/LinearGenomeView/index.js +59 -32
  16. package/dist/LinearGenomeView/index.test.js +22 -5
  17. package/dist/index.js +22 -11
  18. package/package.json +3 -2
  19. package/src/BaseLinearDisplay/components/BaseLinearDisplay.tsx +4 -89
  20. package/src/BaseLinearDisplay/components/Tooltip.tsx +97 -0
  21. package/src/BaseLinearDisplay/models/BaseLinearDisplayModel.tsx +10 -4
  22. package/src/LinearGenomeView/components/Header.tsx +3 -2
  23. package/src/LinearGenomeView/components/HelpDialog.tsx +5 -4
  24. package/src/LinearGenomeView/components/LinearGenomeView.test.js +2 -2
  25. package/src/LinearGenomeView/components/LinearGenomeView.tsx +16 -10
  26. package/src/LinearGenomeView/components/OverviewScaleBar.tsx +3 -4
  27. package/src/LinearGenomeView/components/ScaleBar.tsx +6 -9
  28. package/src/LinearGenomeView/components/TrackLabel.tsx +25 -28
  29. package/src/LinearGenomeView/components/__snapshots__/LinearGenomeView.test.js.snap +4 -21
  30. package/src/LinearGenomeView/index.test.ts +20 -5
  31. package/src/LinearGenomeView/index.tsx +54 -26
  32. package/src/index.ts +35 -30
@@ -1,10 +1,6 @@
1
1
  import React from 'react';
2
+ import Tooltip from './Tooltip';
2
3
  import { BaseLinearDisplayModel } from '../models/BaseLinearDisplayModel';
3
- declare const Tooltip: ({ model, clientMouseCoord, }: {
4
- model: BaseLinearDisplayModel;
5
- clientMouseCoord: Coord;
6
- }) => JSX.Element | null;
7
- declare type Coord = [number, number];
8
4
  declare const BaseLinearDisplay: (props: {
9
5
  model: BaseLinearDisplayModel;
10
6
  children?: React.ReactNode;
@@ -7,11 +7,13 @@ var _typeof = require("@babel/runtime/helpers/typeof");
7
7
  Object.defineProperty(exports, "__esModule", {
8
8
  value: true
9
9
  });
10
- exports.default = exports.Tooltip = void 0;
11
-
12
- var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
13
-
14
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
10
+ Object.defineProperty(exports, "Tooltip", {
11
+ enumerable: true,
12
+ get: function get() {
13
+ return _Tooltip.default;
14
+ }
15
+ });
16
+ exports.default = void 0;
15
17
 
16
18
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
17
19
 
@@ -25,7 +27,7 @@ var _configuration = require("@jbrowse/core/configuration");
25
27
 
26
28
  var _ui = require("@jbrowse/core/ui");
27
29
 
28
- var _reactPopper = require("react-popper");
30
+ var _Tooltip = _interopRequireDefault(require("./Tooltip"));
29
31
 
30
32
  var _LinearBlocks = _interopRequireDefault(require("./LinearBlocks"));
31
33
 
@@ -33,130 +35,40 @@ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "functio
33
35
 
34
36
  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; }
35
37
 
36
- 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; }
37
-
38
- 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; }
39
-
40
- function round(value) {
41
- return Math.round(value * 1e5) / 1e5;
42
- }
43
-
44
- var useStyles = (0, _core.makeStyles)(function (theme) {
45
- return {
46
- display: {
47
- position: 'relative',
48
- whiteSpace: 'nowrap',
49
- textAlign: 'left',
50
- width: '100%',
51
- minHeight: '100%'
52
- },
53
- // these styles come from
54
- // https://github.com/mui-org/material-ui/blob/master/packages/material-ui/src/Tooltip/Tooltip.js
55
- tooltip: {
56
- pointerEvents: 'none',
57
- backgroundColor: (0, _core.alpha)(theme.palette.grey[700], 0.9),
58
- borderRadius: theme.shape.borderRadius,
59
- color: theme.palette.common.white,
60
- fontFamily: theme.typography.fontFamily,
61
- padding: '4px 8px',
62
- fontSize: theme.typography.pxToRem(12),
63
- lineHeight: "".concat(round(14 / 10), "em"),
64
- maxWidth: 300,
65
- wordWrap: 'break-word'
66
- }
67
- };
68
- });
69
-
70
- var TooltipContents = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref) {
71
- var message = _ref.message;
72
- return /*#__PURE__*/_react.default.createElement("div", {
73
- ref: ref
74
- }, message);
38
+ // locals
39
+ var useStyles = (0, _core.makeStyles)({
40
+ display: {
41
+ position: 'relative',
42
+ whiteSpace: 'nowrap',
43
+ textAlign: 'left',
44
+ width: '100%',
45
+ minHeight: '100%'
46
+ }
75
47
  });
76
-
77
- var Tooltip = (0, _mobxReact.observer)(function (_ref2) {
78
- var model = _ref2.model,
79
- clientMouseCoord = _ref2.clientMouseCoord;
48
+ var BaseLinearDisplay = (0, _mobxReact.observer)(function (props) {
80
49
  var classes = useStyles();
81
- var featureUnderMouse = model.featureUnderMouse;
50
+ var theme = (0, _core.useTheme)();
51
+ var ref = (0, _react.useRef)(null);
82
52
 
83
- var _useState = (0, _react.useState)(0),
53
+ var _useState = (0, _react.useState)(),
84
54
  _useState2 = (0, _slicedToArray2.default)(_useState, 2),
85
- width = _useState2[0],
86
- setWidth = _useState2[1];
55
+ clientRect = _useState2[0],
56
+ setClientRect = _useState2[1];
87
57
 
88
- var _useState3 = (0, _react.useState)(null),
58
+ var _useState3 = (0, _react.useState)([0, 0]),
89
59
  _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
90
- popperElt = _useState4[0],
91
- setPopperElt = _useState4[1]; // must be memoized a la https://github.com/popperjs/react-popper/issues/391
92
-
93
-
94
- var virtElement = (0, _react.useMemo)(function () {
95
- return {
96
- getBoundingClientRect: function getBoundingClientRect() {
97
- var x = clientMouseCoord[0] + width / 2 + 20;
98
- var y = clientMouseCoord[1];
99
- return {
100
- top: y,
101
- left: x,
102
- bottom: y,
103
- right: x,
104
- width: 0,
105
- height: 0,
106
- x: x,
107
- y: y,
108
- toJSON: function toJSON() {}
109
- };
110
- }
111
- };
112
- }, [clientMouseCoord, width]);
113
-
114
- var _usePopper = (0, _reactPopper.usePopper)(virtElement, popperElt),
115
- styles = _usePopper.styles,
116
- attributes = _usePopper.attributes;
117
-
118
- var contents = featureUnderMouse ? (0, _configuration.getConf)(model, 'mouseover', {
119
- feature: featureUnderMouse
120
- }) : undefined;
121
- return featureUnderMouse && contents ? /*#__PURE__*/_react.default.createElement(_core.Portal, null, /*#__PURE__*/_react.default.createElement("div", (0, _extends2.default)({
122
- ref: setPopperElt,
123
- className: classes.tooltip // zIndex needed to go over widget drawer
124
- ,
125
- style: _objectSpread(_objectSpread({}, styles.popper), {}, {
126
- zIndex: 100000
127
- })
128
- }, attributes.popper), /*#__PURE__*/_react.default.createElement(TooltipContents, {
129
- ref: function ref(elt) {
130
- return setWidth((elt === null || elt === void 0 ? void 0 : elt.getBoundingClientRect().width) || 0);
131
- },
132
- message: contents
133
- }))) : null;
134
- });
135
- exports.Tooltip = Tooltip;
136
- var BaseLinearDisplay = (0, _mobxReact.observer)(function (props) {
137
- var classes = useStyles();
138
- var theme = (0, _core.useTheme)();
139
- var ref = (0, _react.useRef)(null);
60
+ offsetMouseCoord = _useState4[0],
61
+ setOffsetMouseCoord = _useState4[1];
140
62
 
141
- var _useState5 = (0, _react.useState)(),
63
+ var _useState5 = (0, _react.useState)([0, 0]),
142
64
  _useState6 = (0, _slicedToArray2.default)(_useState5, 2),
143
- clientRect = _useState6[0],
144
- setClientRect = _useState6[1];
65
+ clientMouseCoord = _useState6[0],
66
+ setClientMouseCoord = _useState6[1];
145
67
 
146
- var _useState7 = (0, _react.useState)([0, 0]),
68
+ var _useState7 = (0, _react.useState)(),
147
69
  _useState8 = (0, _slicedToArray2.default)(_useState7, 2),
148
- offsetMouseCoord = _useState8[0],
149
- setOffsetMouseCoord = _useState8[1];
150
-
151
- var _useState9 = (0, _react.useState)([0, 0]),
152
- _useState10 = (0, _slicedToArray2.default)(_useState9, 2),
153
- clientMouseCoord = _useState10[0],
154
- setClientMouseCoord = _useState10[1];
155
-
156
- var _useState11 = (0, _react.useState)(),
157
- _useState12 = (0, _slicedToArray2.default)(_useState11, 2),
158
- contextCoord = _useState12[0],
159
- setContextCoord = _useState12[1];
70
+ contextCoord = _useState8[0],
71
+ setContextCoord = _useState8[1];
160
72
 
161
73
  var model = props.model,
162
74
  children = props.children;
@@ -0,0 +1,8 @@
1
+ /// <reference types="react" />
2
+ import { BaseLinearDisplayModel } from '../models/BaseLinearDisplayModel';
3
+ declare type Coord = [number, number];
4
+ declare const Tooltip: ({ model, clientMouseCoord, }: {
5
+ model: BaseLinearDisplayModel;
6
+ clientMouseCoord: Coord;
7
+ }) => JSX.Element | null;
8
+ export default Tooltip;
@@ -0,0 +1,125 @@
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 = void 0;
11
+
12
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
13
+
14
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
15
+
16
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
17
+
18
+ var _react = _interopRequireWildcard(require("react"));
19
+
20
+ var _configuration = require("@jbrowse/core/configuration");
21
+
22
+ var _mobxReact = require("mobx-react");
23
+
24
+ var _core = require("@material-ui/core");
25
+
26
+ var _reactPopper = require("react-popper");
27
+
28
+ 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); }
29
+
30
+ 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; }
31
+
32
+ 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; }
33
+
34
+ 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; }
35
+
36
+ function round(value) {
37
+ return Math.round(value * 1e5) / 1e5;
38
+ }
39
+
40
+ var useStyles = (0, _core.makeStyles)(function (theme) {
41
+ return {
42
+ // these styles come from
43
+ // https://github.com/mui-org/material-ui/blob/master/packages/material-ui/src/Tooltip/Tooltip.js
44
+ tooltip: {
45
+ pointerEvents: 'none',
46
+ backgroundColor: (0, _core.alpha)(theme.palette.grey[700], 0.9),
47
+ borderRadius: theme.shape.borderRadius,
48
+ color: theme.palette.common.white,
49
+ fontFamily: theme.typography.fontFamily,
50
+ padding: '4px 8px',
51
+ fontSize: theme.typography.pxToRem(12),
52
+ lineHeight: "".concat(round(14 / 10), "em"),
53
+ maxWidth: 300,
54
+ wordWrap: 'break-word'
55
+ }
56
+ };
57
+ });
58
+
59
+ var TooltipContents = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref) {
60
+ var message = _ref.message;
61
+ return /*#__PURE__*/_react.default.createElement("div", {
62
+ ref: ref
63
+ }, message);
64
+ });
65
+
66
+ var Tooltip = (0, _mobxReact.observer)(function (_ref2) {
67
+ var model = _ref2.model,
68
+ clientMouseCoord = _ref2.clientMouseCoord;
69
+ var classes = useStyles();
70
+ var featureUnderMouse = model.featureUnderMouse;
71
+
72
+ var _useState = (0, _react.useState)(0),
73
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
74
+ width = _useState2[0],
75
+ setWidth = _useState2[1];
76
+
77
+ var _useState3 = (0, _react.useState)(null),
78
+ _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
79
+ popperElt = _useState4[0],
80
+ setPopperElt = _useState4[1]; // must be memoized a la https://github.com/popperjs/react-popper/issues/391
81
+
82
+
83
+ var virtElement = (0, _react.useMemo)(function () {
84
+ return {
85
+ getBoundingClientRect: function getBoundingClientRect() {
86
+ var x = clientMouseCoord[0] + width / 2 + 20;
87
+ var y = clientMouseCoord[1];
88
+ return {
89
+ top: y,
90
+ left: x,
91
+ bottom: y,
92
+ right: x,
93
+ width: 0,
94
+ height: 0,
95
+ x: x,
96
+ y: y,
97
+ toJSON: function toJSON() {}
98
+ };
99
+ }
100
+ };
101
+ }, [clientMouseCoord, width]);
102
+
103
+ var _usePopper = (0, _reactPopper.usePopper)(virtElement, popperElt),
104
+ styles = _usePopper.styles,
105
+ attributes = _usePopper.attributes;
106
+
107
+ var contents = featureUnderMouse ? (0, _configuration.getConf)(model, 'mouseover', {
108
+ feature: featureUnderMouse
109
+ }) : undefined;
110
+ return featureUnderMouse && contents ? /*#__PURE__*/_react.default.createElement(_core.Portal, null, /*#__PURE__*/_react.default.createElement("div", (0, _extends2.default)({
111
+ ref: setPopperElt,
112
+ className: classes.tooltip // zIndex needed to go over widget drawer
113
+ ,
114
+ style: _objectSpread(_objectSpread({}, styles.popper), {}, {
115
+ zIndex: 100000
116
+ })
117
+ }, attributes.popper), /*#__PURE__*/_react.default.createElement(TooltipContents, {
118
+ ref: function ref(elt) {
119
+ return setWidth((elt === null || elt === void 0 ? void 0 : elt.getBoundingClientRect().width) || 0);
120
+ },
121
+ message: contents
122
+ }))) : null;
123
+ });
124
+ var _default = Tooltip;
125
+ exports.default = _default;
@@ -371,8 +371,9 @@ var BaseLinearDisplay = _mobxStateTree.types.compose('BaseLinearDisplay', _model
371
371
 
372
372
  if ((0, _util.isSessionModelWithWidgets)(session)) {
373
373
  var featureWidget = session.addWidget('BaseFeatureWidget', 'baseFeature', {
374
- featureData: feature.toJSON(),
375
- view: (0, _util.getContainingView)(self)
374
+ view: (0, _util.getContainingView)(self),
375
+ track: (0, _util.getContainingTrack)(self),
376
+ featureData: feature.toJSON()
376
377
  });
377
378
  session.showWidget(featureWidget);
378
379
  }
@@ -13,6 +13,8 @@ var _mobxReact = require("mobx-react");
13
13
 
14
14
  var _core = require("@material-ui/core");
15
15
 
16
+ var _util = require("@jbrowse/core/util");
17
+
16
18
  var _SearchBox = _interopRequireDefault(require("./SearchBox"));
17
19
 
18
20
  var _Icons = require("@jbrowse/core/ui/Icons");
@@ -97,12 +99,13 @@ function PanControls(_ref2) {
97
99
  var RegionWidth = (0, _mobxReact.observer)(function (_ref3) {
98
100
  var model = _ref3.model;
99
101
  var classes = useStyles();
100
- var coarseTotalBp = model.coarseTotalBp;
102
+ var coarseTotalBp = model.coarseTotalBp,
103
+ bpPerPx = model.bpPerPx;
101
104
  return /*#__PURE__*/_react.default.createElement(_core.Typography, {
102
105
  variant: "body2",
103
106
  color: "textSecondary",
104
107
  className: classes.bp
105
- }, Math.round(coarseTotalBp).toLocaleString('en-US'), " bp");
108
+ }, (0, _util.getTickDisplayStr2)(coarseTotalBp, bpPerPx));
106
109
  });
107
110
 
108
111
  var Controls = function Controls(_ref4) {
@@ -34,12 +34,11 @@ function HelpDialog(_ref) {
34
34
  maxWidth: "xl",
35
35
  onClose: handleClose
36
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
37
  className: classes.closeButton,
39
38
  onClick: function onClick() {
40
- handleClose();
39
+ return handleClose();
41
40
  }
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, {
41
+ }, /*#__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("li", null, /*#__PURE__*/_react.default.createElement("code", null, "chr1 100 200"), " - use whitespace separated refname, start, end"))), /*#__PURE__*/_react.default.createElement(_core.Divider, null), /*#__PURE__*/_react.default.createElement(_core.DialogActions, null, /*#__PURE__*/_react.default.createElement(_core.Button, {
43
42
  onClick: function onClick() {
44
43
  return handleClose();
45
44
  },
@@ -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%'
@@ -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;
@@ -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;
@@ -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;