@jbrowse/plugin-linear-genome-view 1.6.9 → 1.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/dist/BaseLinearDisplay/components/BaseLinearDisplay.js +232 -0
  2. package/dist/BaseLinearDisplay/components/Block.js +86 -0
  3. package/dist/BaseLinearDisplay/components/LinearBlocks.js +110 -0
  4. package/dist/BaseLinearDisplay/components/ServerSideRenderedBlockContent.js +192 -0
  5. package/dist/BaseLinearDisplay/index.js +41 -0
  6. package/dist/BaseLinearDisplay/models/BaseLinearDisplayModel.js +763 -0
  7. package/dist/BaseLinearDisplay/models/baseLinearDisplayConfigSchema.js +24 -0
  8. package/dist/BaseLinearDisplay/models/serverSideRenderedBlock.js +328 -0
  9. package/dist/LinearBareDisplay/configSchema.js +19 -0
  10. package/dist/LinearBareDisplay/index.js +21 -0
  11. package/dist/LinearBareDisplay/index.test.js +33 -0
  12. package/dist/LinearBareDisplay/model.js +44 -0
  13. package/dist/LinearBasicDisplay/components/SetMaxHeight.js +94 -0
  14. package/dist/LinearBasicDisplay/configSchema.js +25 -0
  15. package/dist/LinearBasicDisplay/index.js +23 -0
  16. package/dist/LinearBasicDisplay/model.js +162 -0
  17. package/dist/LinearGenomeView/components/CenterLine.js +80 -0
  18. package/dist/LinearGenomeView/components/ExportSvgDialog.js +137 -0
  19. package/dist/LinearGenomeView/components/Header.js +144 -0
  20. package/dist/LinearGenomeView/components/HelpDialog.js +48 -0
  21. package/dist/LinearGenomeView/components/ImportForm.js +330 -0
  22. package/dist/LinearGenomeView/components/LinearGenomeView.js +129 -0
  23. package/dist/LinearGenomeView/components/LinearGenomeView.test.js +234 -0
  24. package/dist/LinearGenomeView/components/LinearGenomeViewSvg.js +349 -0
  25. package/dist/LinearGenomeView/components/MiniControls.js +83 -0
  26. package/dist/LinearGenomeView/components/OverviewRubberBand.js +310 -0
  27. package/dist/LinearGenomeView/components/OverviewScaleBar.js +403 -0
  28. package/dist/LinearGenomeView/components/RefNameAutocomplete.js +331 -0
  29. package/dist/LinearGenomeView/components/RubberBand.js +309 -0
  30. package/dist/LinearGenomeView/components/Ruler.js +101 -0
  31. package/dist/LinearGenomeView/components/ScaleBar.js +184 -0
  32. package/dist/LinearGenomeView/components/ScaleBar.test.js +180 -0
  33. package/dist/LinearGenomeView/components/SearchBox.js +201 -0
  34. package/dist/LinearGenomeView/components/SearchResultsDialog.js +159 -0
  35. package/dist/LinearGenomeView/components/SequenceDialog.js +304 -0
  36. package/dist/LinearGenomeView/components/TrackContainer.js +179 -0
  37. package/dist/LinearGenomeView/components/TrackLabel.js +165 -0
  38. package/dist/LinearGenomeView/components/TracksContainer.js +214 -0
  39. package/dist/LinearGenomeView/components/VerticalGuides.js +116 -0
  40. package/dist/LinearGenomeView/components/ZoomControls.js +92 -0
  41. package/dist/LinearGenomeView/components/util.js +16 -0
  42. package/dist/LinearGenomeView/index.js +1418 -0
  43. package/dist/LinearGenomeView/index.test.js +1170 -0
  44. package/dist/LinearGenomeView/util.js +93 -0
  45. package/dist/LinearGenomeView/util.test.js +78 -0
  46. package/dist/index.js +293 -6
  47. package/package.json +4 -8
  48. package/src/BaseLinearDisplay/models/BaseLinearDisplayModel.tsx +2 -0
  49. package/src/BaseLinearDisplay/models/serverSideRenderedBlock.ts +10 -8
  50. package/src/LinearBasicDisplay/components/SetMaxHeight.tsx +1 -1
  51. package/src/LinearBasicDisplay/model.ts +17 -18
  52. package/src/LinearGenomeView/components/Header.tsx +1 -1
  53. package/src/LinearGenomeView/components/ImportForm.tsx +10 -4
  54. package/src/LinearGenomeView/components/LinearGenomeView.test.js +1 -0
  55. package/src/LinearGenomeView/components/OverviewScaleBar.tsx +2 -2
  56. package/src/LinearGenomeView/components/RubberBand.tsx +14 -24
  57. package/src/LinearGenomeView/components/ScaleBar.test.tsx +1 -0
  58. package/src/LinearGenomeView/components/ScaleBar.tsx +3 -6
  59. package/src/LinearGenomeView/components/SequenceDialog.tsx +1 -1
  60. package/src/LinearGenomeView/components/TrackLabel.tsx +1 -1
  61. package/src/LinearGenomeView/components/__snapshots__/LinearGenomeView.test.js.snap +0 -4
  62. package/src/LinearGenomeView/index.tsx +2 -3
@@ -0,0 +1,349 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.renderToSvg = renderToSvg;
9
+
10
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
11
+
12
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
13
+
14
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
15
+
16
+ var _react = _interopRequireDefault(require("react"));
17
+
18
+ var _server = require("react-dom/server");
19
+
20
+ var _mobx = require("mobx");
21
+
22
+ var _mobxStateTree = require("mobx-state-tree");
23
+
24
+ var _configuration = require("@jbrowse/core/configuration");
25
+
26
+ var _util = require("@jbrowse/core/util");
27
+
28
+ var _Base1DViewModel = _interopRequireDefault(require("@jbrowse/core/util/Base1DViewModel"));
29
+
30
+ var _Ruler = _interopRequireDefault(require("./Ruler"));
31
+
32
+ var _ = require("..");
33
+
34
+ var _OverviewScaleBar = require("./OverviewScaleBar");
35
+
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 ScaleBar(_ref) {
41
+ var model = _ref.model,
42
+ fontSize = _ref.fontSize;
43
+ var offsetPx = model.offsetPx,
44
+ _model$dynamicBlocks = model.dynamicBlocks,
45
+ totalWidthPx = _model$dynamicBlocks.totalWidthPxWithoutBorders,
46
+ totalBp = _model$dynamicBlocks.totalBp;
47
+ var displayBp = (0, _util.getBpDisplayStr)(totalBp);
48
+ var x0 = Math.max(-offsetPx, 0);
49
+ var x1 = x0 + totalWidthPx;
50
+ return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("line", {
51
+ x1: x0,
52
+ x2: x1,
53
+ y1: 10,
54
+ y2: 10,
55
+ stroke: "black"
56
+ }), /*#__PURE__*/_react["default"].createElement("line", {
57
+ x1: x0,
58
+ x2: x0,
59
+ y1: 5,
60
+ y2: 15,
61
+ stroke: "black"
62
+ }), /*#__PURE__*/_react["default"].createElement("line", {
63
+ x1: x1,
64
+ x2: x1,
65
+ y1: 5,
66
+ y2: 15,
67
+ stroke: "black"
68
+ }), /*#__PURE__*/_react["default"].createElement("text", {
69
+ x: x0 + (x1 - x0) / 2,
70
+ y: fontSize * 2,
71
+ textAnchor: "middle",
72
+ fontSize: fontSize
73
+ }, displayBp));
74
+ }
75
+
76
+ function SVGRuler(_ref2) {
77
+ var model = _ref2.model,
78
+ fontSize = _ref2.fontSize,
79
+ width = _ref2.width;
80
+ var contentBlocks = model.dynamicBlocks.contentBlocks,
81
+ viewOffsetPx = model.offsetPx,
82
+ bpPerPx = model.bpPerPx;
83
+ var renderRuler = contentBlocks.length < 5;
84
+ return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("defs", null, /*#__PURE__*/_react["default"].createElement("clipPath", {
85
+ id: "clip-ruler"
86
+ }, /*#__PURE__*/_react["default"].createElement("rect", {
87
+ x: 0,
88
+ y: 0,
89
+ width: width,
90
+ height: 20
91
+ }))), contentBlocks.map(function (block) {
92
+ var key = block.key,
93
+ start = block.start,
94
+ end = block.end,
95
+ reversed = block.reversed,
96
+ offsetPx = block.offsetPx,
97
+ refName = block.refName;
98
+ var offsetLeft = offsetPx - viewOffsetPx;
99
+ return /*#__PURE__*/_react["default"].createElement("g", {
100
+ key: "".concat(key),
101
+ transform: "translate(".concat(offsetLeft, " 0)")
102
+ }, /*#__PURE__*/_react["default"].createElement("text", {
103
+ x: offsetLeft / bpPerPx,
104
+ y: fontSize,
105
+ fontSize: fontSize
106
+ }, refName), renderRuler ? /*#__PURE__*/_react["default"].createElement("g", {
107
+ transform: "translate(0 20)",
108
+ clipPath: "url(#clip-ruler)"
109
+ }, /*#__PURE__*/_react["default"].createElement(_Ruler["default"], {
110
+ start: start,
111
+ end: end,
112
+ bpPerPx: bpPerPx,
113
+ reversed: reversed
114
+ })) : /*#__PURE__*/_react["default"].createElement("line", {
115
+ strokeWidth: 1,
116
+ stroke: "black",
117
+ x1: start / bpPerPx,
118
+ x2: end / bpPerPx,
119
+ y1: 20,
120
+ y2: 20
121
+ }));
122
+ }));
123
+ }
124
+
125
+ var fontSize = 15;
126
+ var rulerHeight = 50;
127
+ var textHeight = fontSize + 5;
128
+ var paddingHeight = 20;
129
+ var headerHeight = textHeight + 20;
130
+ var cytobandHeightIfExists = 100;
131
+
132
+ var totalHeight = function totalHeight(tracks) {
133
+ return tracks.reduce(function (accum, track) {
134
+ var display = track.displays[0];
135
+ return accum + display.height + paddingHeight + textHeight;
136
+ }, 0);
137
+ }; // SVG component, ruler and assembly name
138
+
139
+
140
+ var SVGHeader = function SVGHeader(_ref3) {
141
+ var model = _ref3.model;
142
+ var width = model.width,
143
+ assemblyNames = model.assemblyNames,
144
+ showCytobands = model.showCytobands,
145
+ displayedRegions = model.displayedRegions;
146
+
147
+ var _getSession = (0, _util.getSession)(model),
148
+ assemblyManager = _getSession.assemblyManager;
149
+
150
+ var assemblyName = assemblyNames.length > 1 ? '' : assemblyNames[0];
151
+ var assembly = assemblyManager.get(assemblyName);
152
+
153
+ var overview = _Base1DViewModel["default"].create({
154
+ displayedRegions: JSON.parse(JSON.stringify(displayedRegions)),
155
+ interRegionPaddingWidth: 0,
156
+ minimumBlockWidth: model.minimumBlockWidth
157
+ });
158
+
159
+ var visibleRegions = model.dynamicBlocks.contentBlocks;
160
+ overview.setVolatileWidth(width);
161
+ overview.showAllRegions();
162
+ var block = overview.dynamicBlocks.contentBlocks[0];
163
+ var first = visibleRegions[0];
164
+ var firstOverviewPx = overview.bpToPx(_objectSpread(_objectSpread({}, first), {}, {
165
+ coord: first.reversed ? first.end : first.start
166
+ })) || 0;
167
+ var last = visibleRegions[visibleRegions.length - 1];
168
+ var lastOverviewPx = overview.bpToPx(_objectSpread(_objectSpread({}, last), {}, {
169
+ coord: last.reversed ? last.start : last.end
170
+ })) || 0;
171
+ var cytobandHeight = showCytobands ? cytobandHeightIfExists : 0;
172
+ return /*#__PURE__*/_react["default"].createElement("g", {
173
+ id: "header"
174
+ }, /*#__PURE__*/_react["default"].createElement("text", {
175
+ x: 0,
176
+ y: fontSize,
177
+ fontSize: fontSize
178
+ }, assemblyName), showCytobands ? /*#__PURE__*/_react["default"].createElement("g", {
179
+ transform: "translate(0 ".concat(rulerHeight, ")")
180
+ }, /*#__PURE__*/_react["default"].createElement(_OverviewScaleBar.Cytobands, {
181
+ overview: overview,
182
+ assembly: assembly,
183
+ block: block
184
+ }), /*#__PURE__*/_react["default"].createElement("rect", {
185
+ stroke: "red",
186
+ fill: "rgb(255,0,0,0.1)",
187
+ width: Math.max(lastOverviewPx - firstOverviewPx, 0.5),
188
+ height: _.HEADER_OVERVIEW_HEIGHT - 1,
189
+ x: firstOverviewPx,
190
+ y: 0.5
191
+ }), /*#__PURE__*/_react["default"].createElement("g", {
192
+ transform: "translate(0,".concat(_.HEADER_OVERVIEW_HEIGHT, ")")
193
+ }, /*#__PURE__*/_react["default"].createElement(_OverviewScaleBar.Polygon, {
194
+ overview: overview,
195
+ model: model,
196
+ useOffset: false
197
+ }))) : null, /*#__PURE__*/_react["default"].createElement("g", {
198
+ transform: "translate(0 ".concat(fontSize + cytobandHeight, ")")
199
+ }, /*#__PURE__*/_react["default"].createElement(ScaleBar, {
200
+ model: model,
201
+ fontSize: fontSize
202
+ })), /*#__PURE__*/_react["default"].createElement("g", {
203
+ transform: "translate(0 ".concat(rulerHeight + cytobandHeight, ")")
204
+ }, /*#__PURE__*/_react["default"].createElement(SVGRuler, {
205
+ model: model,
206
+ fontSize: fontSize,
207
+ width: width
208
+ })));
209
+ }; // SVG component, region separator
210
+
211
+
212
+ var SVGRegionSeparators = function SVGRegionSeparators(_ref4) {
213
+ var model = _ref4.model,
214
+ height = _ref4.height;
215
+ var dynamicBlocks = model.dynamicBlocks,
216
+ offsetPx = model.offsetPx,
217
+ interRegionPaddingWidth = model.interRegionPaddingWidth;
218
+ return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, dynamicBlocks.contentBlocks.slice(1).map(function (block) {
219
+ return /*#__PURE__*/_react["default"].createElement("rect", {
220
+ key: block.key,
221
+ x: block.offsetPx - offsetPx - interRegionPaddingWidth,
222
+ width: interRegionPaddingWidth,
223
+ y: 0,
224
+ height: height,
225
+ stroke: "none",
226
+ fill: "grey"
227
+ });
228
+ }));
229
+ }; // SVG component, tracks
230
+
231
+
232
+ function SVGTracks(_ref5) {
233
+ var displayResults = _ref5.displayResults,
234
+ model = _ref5.model,
235
+ offset = _ref5.offset;
236
+ return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, displayResults.map(function (_ref6) {
237
+ var track = _ref6.track,
238
+ result = _ref6.result;
239
+ var current = offset;
240
+ var trackName = (0, _configuration.getConf)(track, 'name') || "Reference sequence (".concat((0, _configuration.readConfObject)((0, _mobxStateTree.getParent)(track.configuration), 'name'), ")");
241
+ var display = track.displays[0];
242
+ offset += display.height + paddingHeight + textHeight;
243
+ return /*#__PURE__*/_react["default"].createElement("g", {
244
+ key: track.configuration.trackId,
245
+ transform: "translate(0 ".concat(current, ")")
246
+ }, /*#__PURE__*/_react["default"].createElement("text", {
247
+ fontSize: fontSize,
248
+ x: Math.max(-model.offsetPx, 0)
249
+ }, trackName), /*#__PURE__*/_react["default"].createElement("g", {
250
+ transform: "translate(0 ".concat(textHeight, ")")
251
+ }, result, /*#__PURE__*/_react["default"].createElement(SVGRegionSeparators, {
252
+ model: model,
253
+ height: display.height
254
+ })));
255
+ }));
256
+ } // render LGV to SVG
257
+
258
+
259
+ function renderToSvg(_x, _x2) {
260
+ return _renderToSvg.apply(this, arguments);
261
+ }
262
+
263
+ function _renderToSvg() {
264
+ _renderToSvg = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2(model, opts) {
265
+ var width, tracks, showCytobands, shift, offset, height, displayResults;
266
+ return _regenerator["default"].wrap(function _callee2$(_context2) {
267
+ while (1) {
268
+ switch (_context2.prev = _context2.next) {
269
+ case 0:
270
+ _context2.next = 2;
271
+ return (0, _mobx.when)(function () {
272
+ return model.initialized;
273
+ });
274
+
275
+ case 2:
276
+ width = model.width, tracks = model.tracks, showCytobands = model.showCytobands;
277
+ shift = 50;
278
+ offset = headerHeight + rulerHeight + (showCytobands ? cytobandHeightIfExists : 0) + 20;
279
+ height = totalHeight(tracks) + offset;
280
+ _context2.next = 8;
281
+ return Promise.all(tracks.map( /*#__PURE__*/function () {
282
+ var _ref7 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(track) {
283
+ var display, result;
284
+ return _regenerator["default"].wrap(function _callee$(_context) {
285
+ while (1) {
286
+ switch (_context.prev = _context.next) {
287
+ case 0:
288
+ display = track.displays[0];
289
+ _context.next = 3;
290
+ return (0, _mobx.when)(function () {
291
+ return display.ready !== undefined ? display.ready : true;
292
+ });
293
+
294
+ case 3:
295
+ _context.next = 5;
296
+ return display.renderSvg(opts);
297
+
298
+ case 5:
299
+ result = _context.sent;
300
+ return _context.abrupt("return", {
301
+ track: track,
302
+ result: result
303
+ });
304
+
305
+ case 7:
306
+ case "end":
307
+ return _context.stop();
308
+ }
309
+ }
310
+ }, _callee);
311
+ }));
312
+
313
+ return function (_x3) {
314
+ return _ref7.apply(this, arguments);
315
+ };
316
+ }()));
317
+
318
+ case 8:
319
+ displayResults = _context2.sent;
320
+ return _context2.abrupt("return", (0, _server.renderToStaticMarkup)( /*#__PURE__*/_react["default"].createElement("svg", {
321
+ width: width,
322
+ height: height,
323
+ xmlns: "http://www.w3.org/2000/svg",
324
+ xmlnsXlink: "http://www.w3.org/1999/xlink",
325
+ viewBox: [0, 0, width + shift * 2, height].toString()
326
+ }, /*#__PURE__*/_react["default"].createElement("rect", {
327
+ width: width + shift * 2,
328
+ height: height,
329
+ fill: "white"
330
+ }), /*#__PURE__*/_react["default"].createElement("g", {
331
+ stroke: "none",
332
+ transform: "translate(".concat(shift, " ").concat(fontSize, ")")
333
+ }, /*#__PURE__*/_react["default"].createElement(SVGHeader, {
334
+ model: model
335
+ }), /*#__PURE__*/_react["default"].createElement(SVGTracks, {
336
+ model: model,
337
+ displayResults: displayResults,
338
+ offset: offset
339
+ })))));
340
+
341
+ case 10:
342
+ case "end":
343
+ return _context2.stop();
344
+ }
345
+ }
346
+ }, _callee2);
347
+ }));
348
+ return _renderToSvg.apply(this, arguments);
349
+ }
@@ -0,0 +1,83 @@
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 _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
13
+
14
+ var _react = _interopRequireWildcard(require("react"));
15
+
16
+ var _mobxReact = require("mobx-react");
17
+
18
+ var _IconButton = _interopRequireDefault(require("@material-ui/core/IconButton"));
19
+
20
+ var _ZoomIn = _interopRequireDefault(require("@material-ui/icons/ZoomIn"));
21
+
22
+ var _ZoomOut = _interopRequireDefault(require("@material-ui/icons/ZoomOut"));
23
+
24
+ var _KeyboardArrowDown = _interopRequireDefault(require("@material-ui/icons/KeyboardArrowDown"));
25
+
26
+ var _Paper = _interopRequireDefault(require("@material-ui/core/Paper"));
27
+
28
+ var _Menu = _interopRequireDefault(require("@jbrowse/core/ui/Menu"));
29
+
30
+ 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); }
31
+
32
+ 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; }
33
+
34
+ var MiniControls = (0, _mobxReact.observer)(function (props) {
35
+ var model = props.model;
36
+ var bpPerPx = model.bpPerPx,
37
+ maxBpPerPx = model.maxBpPerPx,
38
+ minBpPerPx = model.minBpPerPx,
39
+ scaleFactor = model.scaleFactor;
40
+
41
+ var _useState = (0, _react.useState)(),
42
+ _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
43
+ anchorEl = _useState2[0],
44
+ setAnchorEl = _useState2[1];
45
+
46
+ return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(_Paper["default"], {
47
+ style: {
48
+ background: '#aaa7'
49
+ }
50
+ }, /*#__PURE__*/_react["default"].createElement(_IconButton["default"], {
51
+ color: "secondary",
52
+ onClick: function onClick(event) {
53
+ setAnchorEl(event.currentTarget);
54
+ }
55
+ }, /*#__PURE__*/_react["default"].createElement(_KeyboardArrowDown["default"], null)), /*#__PURE__*/_react["default"].createElement(_IconButton["default"], {
56
+ "data-testid": "zoom_out",
57
+ onClick: function onClick() {
58
+ model.zoom(bpPerPx * 2);
59
+ },
60
+ disabled: bpPerPx >= maxBpPerPx - 0.0001 || scaleFactor !== 1,
61
+ color: "secondary"
62
+ }, /*#__PURE__*/_react["default"].createElement(_ZoomOut["default"], null)), /*#__PURE__*/_react["default"].createElement(_IconButton["default"], {
63
+ "data-testid": "zoom_in",
64
+ onClick: function onClick() {
65
+ model.zoom(model.bpPerPx / 2);
66
+ },
67
+ disabled: bpPerPx <= minBpPerPx + 0.0001 || scaleFactor !== 1,
68
+ color: "secondary"
69
+ }, /*#__PURE__*/_react["default"].createElement(_ZoomIn["default"], null))), /*#__PURE__*/_react["default"].createElement(_Menu["default"], {
70
+ anchorEl: anchorEl,
71
+ open: Boolean(anchorEl),
72
+ onMenuItemClick: function onMenuItemClick(_, callback) {
73
+ callback();
74
+ setAnchorEl(undefined);
75
+ },
76
+ onClose: function onClose() {
77
+ setAnchorEl(undefined);
78
+ },
79
+ menuItems: model.menuItems()
80
+ }));
81
+ });
82
+ var _default = MiniControls;
83
+ exports["default"] = _default;