@jbrowse/plugin-linear-genome-view 1.6.9 → 1.7.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/BaseLinearDisplay/components/BaseLinearDisplay.d.ts +13 -13
- package/dist/BaseLinearDisplay/components/BaseLinearDisplay.js +232 -0
- package/dist/BaseLinearDisplay/components/Block.d.ts +15 -15
- package/dist/BaseLinearDisplay/components/Block.js +86 -0
- package/dist/BaseLinearDisplay/components/LinearBlocks.d.ts +12 -12
- package/dist/BaseLinearDisplay/components/LinearBlocks.js +110 -0
- package/dist/BaseLinearDisplay/components/ServerSideRenderedBlockContent.d.ts +4 -4
- package/dist/BaseLinearDisplay/components/ServerSideRenderedBlockContent.js +192 -0
- package/dist/BaseLinearDisplay/index.d.ts +5 -5
- package/dist/BaseLinearDisplay/index.js +41 -0
- package/dist/BaseLinearDisplay/models/BaseLinearDisplayModel.d.ts +227 -230
- package/dist/BaseLinearDisplay/models/BaseLinearDisplayModel.js +763 -0
- package/dist/BaseLinearDisplay/models/baseLinearDisplayConfigSchema.d.ts +1 -1
- package/dist/BaseLinearDisplay/models/baseLinearDisplayConfigSchema.js +24 -0
- package/dist/BaseLinearDisplay/models/serverSideRenderedBlock.d.ts +96 -96
- package/dist/BaseLinearDisplay/models/serverSideRenderedBlock.js +328 -0
- package/dist/LinearBareDisplay/configSchema.d.ts +2 -2
- package/dist/LinearBareDisplay/configSchema.js +19 -0
- package/dist/LinearBareDisplay/index.d.ts +2 -2
- package/dist/LinearBareDisplay/index.js +21 -0
- package/dist/LinearBareDisplay/index.test.js +33 -0
- package/dist/LinearBareDisplay/model.d.ts +192 -192
- package/dist/LinearBareDisplay/model.js +44 -0
- package/dist/LinearBasicDisplay/components/SetMaxHeight.d.ts +10 -10
- package/dist/LinearBasicDisplay/components/SetMaxHeight.js +94 -0
- package/dist/LinearBasicDisplay/configSchema.d.ts +2 -2
- package/dist/LinearBasicDisplay/configSchema.js +25 -0
- package/dist/LinearBasicDisplay/index.d.ts +2 -2
- package/dist/LinearBasicDisplay/index.js +23 -0
- package/dist/LinearBasicDisplay/model.d.ts +213 -213
- package/dist/LinearBasicDisplay/model.js +162 -0
- package/dist/LinearGenomeView/components/CenterLine.d.ts +14 -14
- package/dist/LinearGenomeView/components/CenterLine.js +80 -0
- package/dist/LinearGenomeView/components/ExportSvgDialog.d.ts +6 -6
- package/dist/LinearGenomeView/components/ExportSvgDialog.js +137 -0
- package/dist/LinearGenomeView/components/Header.d.ts +7 -7
- package/dist/LinearGenomeView/components/Header.js +144 -0
- package/dist/LinearGenomeView/components/HelpDialog.d.ts +5 -5
- package/dist/LinearGenomeView/components/HelpDialog.js +48 -0
- package/dist/LinearGenomeView/components/ImportForm.d.ts +7 -7
- package/dist/LinearGenomeView/components/ImportForm.js +330 -0
- package/dist/LinearGenomeView/components/LinearGenomeView.d.ts +7 -7
- package/dist/LinearGenomeView/components/LinearGenomeView.js +129 -0
- package/dist/LinearGenomeView/components/LinearGenomeView.test.js +234 -0
- package/dist/LinearGenomeView/components/LinearGenomeViewSvg.d.ts +4 -4
- package/dist/LinearGenomeView/components/LinearGenomeViewSvg.js +349 -0
- package/dist/LinearGenomeView/components/MiniControls.d.ts +6 -6
- package/dist/LinearGenomeView/components/MiniControls.js +83 -0
- package/dist/LinearGenomeView/components/OverviewRubberBand.d.ts +22 -22
- package/dist/LinearGenomeView/components/OverviewRubberBand.js +310 -0
- package/dist/LinearGenomeView/components/OverviewScaleBar.d.ts +132 -124
- package/dist/LinearGenomeView/components/OverviewScaleBar.js +403 -0
- package/dist/LinearGenomeView/components/RefNameAutocomplete.d.ts +21 -21
- package/dist/LinearGenomeView/components/RefNameAutocomplete.js +331 -0
- package/dist/LinearGenomeView/components/RubberBand.d.ts +9 -20
- package/dist/LinearGenomeView/components/RubberBand.js +309 -0
- package/dist/LinearGenomeView/components/Ruler.d.ts +27 -27
- package/dist/LinearGenomeView/components/Ruler.js +101 -0
- package/dist/LinearGenomeView/components/ScaleBar.d.ts +401 -401
- package/dist/LinearGenomeView/components/ScaleBar.js +184 -0
- package/dist/LinearGenomeView/components/ScaleBar.test.js +180 -0
- package/dist/LinearGenomeView/components/SearchBox.d.ts +8 -8
- package/dist/LinearGenomeView/components/SearchBox.js +201 -0
- package/dist/LinearGenomeView/components/SearchResultsDialog.d.ts +8 -8
- package/dist/LinearGenomeView/components/SearchResultsDialog.js +159 -0
- package/dist/LinearGenomeView/components/SequenceDialog.d.ts +8 -8
- package/dist/LinearGenomeView/components/SequenceDialog.js +304 -0
- package/dist/LinearGenomeView/components/TrackContainer.d.ts +9 -9
- package/dist/LinearGenomeView/components/TrackContainer.js +179 -0
- package/dist/LinearGenomeView/components/TrackLabel.d.ts +44 -44
- package/dist/LinearGenomeView/components/TrackLabel.js +165 -0
- package/dist/LinearGenomeView/components/TracksContainer.d.ts +10 -10
- package/dist/LinearGenomeView/components/TracksContainer.js +214 -0
- package/dist/LinearGenomeView/components/VerticalGuides.d.ts +9 -9
- package/dist/LinearGenomeView/components/VerticalGuides.js +116 -0
- package/dist/LinearGenomeView/components/ZoomControls.d.ts +7 -7
- package/dist/LinearGenomeView/components/ZoomControls.js +92 -0
- package/dist/LinearGenomeView/components/util.d.ts +2 -2
- package/dist/LinearGenomeView/components/util.js +16 -0
- package/dist/LinearGenomeView/index.d.ts +292 -292
- package/dist/LinearGenomeView/index.js +1418 -0
- package/dist/LinearGenomeView/index.test.js +1170 -0
- package/dist/LinearGenomeView/util.d.ts +14 -14
- package/dist/LinearGenomeView/util.js +93 -0
- package/dist/LinearGenomeView/util.test.js +78 -0
- package/dist/index.d.ts +565 -565
- package/dist/index.js +293 -6
- package/package.json +6 -9
- package/src/BaseLinearDisplay/models/BaseLinearDisplayModel.tsx +2 -0
- package/src/BaseLinearDisplay/models/serverSideRenderedBlock.ts +10 -8
- package/src/LinearBasicDisplay/components/SetMaxHeight.tsx +1 -1
- package/src/LinearBasicDisplay/model.ts +17 -18
- package/src/LinearGenomeView/components/Header.tsx +1 -1
- package/src/LinearGenomeView/components/ImportForm.tsx +10 -4
- package/src/LinearGenomeView/components/LinearGenomeView.test.js +1 -0
- package/src/LinearGenomeView/components/OverviewScaleBar.tsx +2 -2
- package/src/LinearGenomeView/components/RubberBand.tsx +14 -24
- package/src/LinearGenomeView/components/ScaleBar.test.tsx +1 -0
- package/src/LinearGenomeView/components/ScaleBar.tsx +3 -6
- package/src/LinearGenomeView/components/SequenceDialog.tsx +1 -1
- package/src/LinearGenomeView/components/TrackLabel.tsx +1 -1
- package/src/LinearGenomeView/components/__snapshots__/LinearGenomeView.test.js.snap +0 -4
- package/src/LinearGenomeView/index.tsx +2 -3
- package/dist/LinearBareDisplay/index.test.d.ts +0 -1
- package/dist/LinearGenomeView/components/LinearGenomeView.test.d.ts +0 -1
- package/dist/plugin-linear-genome-view.cjs.development.js +0 -8121
- package/dist/plugin-linear-genome-view.cjs.development.js.map +0 -1
- package/dist/plugin-linear-genome-view.cjs.production.min.js +0 -2
- package/dist/plugin-linear-genome-view.cjs.production.min.js.map +0 -1
- package/dist/plugin-linear-genome-view.esm.js +0 -8105
- package/dist/plugin-linear-genome-view.esm.js.map +0 -1
|
@@ -0,0 +1,331 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports["default"] = void 0;
|
|
9
|
+
|
|
10
|
+
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
11
|
+
|
|
12
|
+
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
|
|
13
|
+
|
|
14
|
+
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
15
|
+
|
|
16
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
17
|
+
|
|
18
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
19
|
+
|
|
20
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
21
|
+
|
|
22
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
23
|
+
|
|
24
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
25
|
+
|
|
26
|
+
var _mobxReact = require("mobx-react");
|
|
27
|
+
|
|
28
|
+
var _util = require("@jbrowse/core/util");
|
|
29
|
+
|
|
30
|
+
var _BaseResults = _interopRequireWildcard(require("@jbrowse/core/TextSearch/BaseResults"));
|
|
31
|
+
|
|
32
|
+
var _core = require("@material-ui/core");
|
|
33
|
+
|
|
34
|
+
var _Search = _interopRequireDefault(require("@material-ui/icons/Search"));
|
|
35
|
+
|
|
36
|
+
var _Autocomplete = _interopRequireDefault(require("@material-ui/lab/Autocomplete"));
|
|
37
|
+
|
|
38
|
+
var _Help = _interopRequireDefault(require("@material-ui/icons/Help"));
|
|
39
|
+
|
|
40
|
+
var _util2 = require("./util");
|
|
41
|
+
|
|
42
|
+
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; }
|
|
43
|
+
|
|
44
|
+
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; }
|
|
45
|
+
|
|
46
|
+
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); }
|
|
47
|
+
|
|
48
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || (0, _typeof2["default"])(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; }
|
|
49
|
+
|
|
50
|
+
// lazy
|
|
51
|
+
var HelpDialog = /*#__PURE__*/(0, _react.lazy)(function () {
|
|
52
|
+
return Promise.resolve().then(function () {
|
|
53
|
+
return _interopRequireWildcard(require('./HelpDialog'));
|
|
54
|
+
});
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
// the logic of this method is to only apply a filter to RefSequenceResults
|
|
58
|
+
// because they do not have a matchedObject. the trix search results already
|
|
59
|
+
// filter so don't need re-filtering
|
|
60
|
+
function _filterOptions(options, searchQuery) {
|
|
61
|
+
return options.filter(function (option) {
|
|
62
|
+
var result = option.result;
|
|
63
|
+
return result.getLabel().toLowerCase().includes(searchQuery) || result.matchedObject;
|
|
64
|
+
});
|
|
65
|
+
} // MyPopper used to expand search results box wider if needed
|
|
66
|
+
// xref https://stackoverflow.com/a/63583835/2129219
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
var MyPopper = function MyPopper(props) {
|
|
70
|
+
var style = props.style;
|
|
71
|
+
return /*#__PURE__*/_react["default"].createElement(_core.Popper, (0, _extends2["default"])({}, props, {
|
|
72
|
+
style: {
|
|
73
|
+
width: 'fit-content',
|
|
74
|
+
minWidth: Math.min(+((style === null || style === void 0 ? void 0 : style.width) || 0), 200),
|
|
75
|
+
background: 'white'
|
|
76
|
+
},
|
|
77
|
+
placement: "bottom-start"
|
|
78
|
+
}));
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
function RefNameAutocomplete(_ref) {
|
|
82
|
+
var model = _ref.model,
|
|
83
|
+
_ref$showHelp = _ref.showHelp,
|
|
84
|
+
showHelp = _ref$showHelp === void 0 ? true : _ref$showHelp,
|
|
85
|
+
onSelect = _ref.onSelect,
|
|
86
|
+
assemblyName = _ref.assemblyName,
|
|
87
|
+
style = _ref.style,
|
|
88
|
+
fetchResults = _ref.fetchResults,
|
|
89
|
+
value = _ref.value,
|
|
90
|
+
_ref$minWidth = _ref.minWidth,
|
|
91
|
+
minWidth = _ref$minWidth === void 0 ? 200 : _ref$minWidth,
|
|
92
|
+
_ref$TextFieldProps = _ref.TextFieldProps,
|
|
93
|
+
TextFieldProps = _ref$TextFieldProps === void 0 ? {} : _ref$TextFieldProps;
|
|
94
|
+
var session = (0, _util.getSession)(model);
|
|
95
|
+
var assemblyManager = session.assemblyManager;
|
|
96
|
+
|
|
97
|
+
var _useState = (0, _react.useState)(false),
|
|
98
|
+
_useState2 = (0, _slicedToArray2["default"])(_useState, 2),
|
|
99
|
+
open = _useState2[0],
|
|
100
|
+
setOpen = _useState2[1];
|
|
101
|
+
|
|
102
|
+
var _useState3 = (0, _react.useState)(true),
|
|
103
|
+
_useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
|
|
104
|
+
loaded = _useState4[0],
|
|
105
|
+
setLoaded = _useState4[1];
|
|
106
|
+
|
|
107
|
+
var _useState5 = (0, _react.useState)(false),
|
|
108
|
+
_useState6 = (0, _slicedToArray2["default"])(_useState5, 2),
|
|
109
|
+
isHelpDialogDisplayed = _useState6[0],
|
|
110
|
+
setHelpDialogDisplayed = _useState6[1];
|
|
111
|
+
|
|
112
|
+
var _useState7 = (0, _react.useState)(''),
|
|
113
|
+
_useState8 = (0, _slicedToArray2["default"])(_useState7, 2),
|
|
114
|
+
currentSearch = _useState8[0],
|
|
115
|
+
setCurrentSearch = _useState8[1];
|
|
116
|
+
|
|
117
|
+
var _useState9 = (0, _react.useState)(''),
|
|
118
|
+
_useState10 = (0, _slicedToArray2["default"])(_useState9, 2),
|
|
119
|
+
inputValue = _useState10[0],
|
|
120
|
+
setInputValue = _useState10[1];
|
|
121
|
+
|
|
122
|
+
var _useState11 = (0, _react.useState)(),
|
|
123
|
+
_useState12 = (0, _slicedToArray2["default"])(_useState11, 2),
|
|
124
|
+
searchOptions = _useState12[0],
|
|
125
|
+
setSearchOptions = _useState12[1];
|
|
126
|
+
|
|
127
|
+
var debouncedSearch = (0, _util.useDebounce)(currentSearch, 300);
|
|
128
|
+
var coarseVisibleLocStrings = model.coarseVisibleLocStrings,
|
|
129
|
+
hasDisplayedRegions = model.hasDisplayedRegions;
|
|
130
|
+
var assembly = assemblyName ? assemblyManager.get(assemblyName) : undefined; // eslint-disable-next-line react-hooks/exhaustive-deps
|
|
131
|
+
|
|
132
|
+
var regions = (assembly === null || assembly === void 0 ? void 0 : assembly.regions) || [];
|
|
133
|
+
var options = (0, _react.useMemo)(function () {
|
|
134
|
+
return regions.map(function (option) {
|
|
135
|
+
return {
|
|
136
|
+
result: new _BaseResults.RefSequenceResult({
|
|
137
|
+
refName: option.refName,
|
|
138
|
+
label: option.refName,
|
|
139
|
+
matchedAttribute: 'refName'
|
|
140
|
+
})
|
|
141
|
+
};
|
|
142
|
+
});
|
|
143
|
+
}, [regions]);
|
|
144
|
+
(0, _react.useEffect)(function () {
|
|
145
|
+
var active = true;
|
|
146
|
+
(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee() {
|
|
147
|
+
var results;
|
|
148
|
+
return _regenerator["default"].wrap(function _callee$(_context) {
|
|
149
|
+
while (1) {
|
|
150
|
+
switch (_context.prev = _context.next) {
|
|
151
|
+
case 0:
|
|
152
|
+
_context.prev = 0;
|
|
153
|
+
|
|
154
|
+
if (!(debouncedSearch === '' || !assemblyName)) {
|
|
155
|
+
_context.next = 3;
|
|
156
|
+
break;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
return _context.abrupt("return");
|
|
160
|
+
|
|
161
|
+
case 3:
|
|
162
|
+
setLoaded(false);
|
|
163
|
+
_context.next = 6;
|
|
164
|
+
return fetchResults(debouncedSearch);
|
|
165
|
+
|
|
166
|
+
case 6:
|
|
167
|
+
results = _context.sent;
|
|
168
|
+
|
|
169
|
+
if (active) {
|
|
170
|
+
setSearchOptions((0, _util2.dedupe)(results, function (r) {
|
|
171
|
+
return r.getDisplayString();
|
|
172
|
+
}).map(function (result) {
|
|
173
|
+
return {
|
|
174
|
+
result: result
|
|
175
|
+
};
|
|
176
|
+
}));
|
|
177
|
+
setLoaded(true);
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
_context.next = 14;
|
|
181
|
+
break;
|
|
182
|
+
|
|
183
|
+
case 10:
|
|
184
|
+
_context.prev = 10;
|
|
185
|
+
_context.t0 = _context["catch"](0);
|
|
186
|
+
console.error(_context.t0);
|
|
187
|
+
|
|
188
|
+
if (active) {
|
|
189
|
+
session.notify("".concat(_context.t0), 'error');
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
case 14:
|
|
193
|
+
case "end":
|
|
194
|
+
return _context.stop();
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
}, _callee, null, [[0, 10]]);
|
|
198
|
+
}))();
|
|
199
|
+
return function () {
|
|
200
|
+
active = false;
|
|
201
|
+
};
|
|
202
|
+
}, [assemblyName, fetchResults, debouncedSearch, session, model]);
|
|
203
|
+
var inputBoxVal = coarseVisibleLocStrings || value || ''; // heuristic, text width + icon width
|
|
204
|
+
// + 45 accomodates help icon and search icon
|
|
205
|
+
|
|
206
|
+
var width = Math.min(Math.max((0, _util.measureText)(inputBoxVal, 16) + 45, minWidth), 550); // notes on implementation:
|
|
207
|
+
// The selectOnFocus setting helps highlight the field when clicked
|
|
208
|
+
|
|
209
|
+
return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(_Autocomplete["default"], {
|
|
210
|
+
id: "refNameAutocomplete-".concat(model.id),
|
|
211
|
+
"data-testid": "autocomplete",
|
|
212
|
+
disableListWrap: true,
|
|
213
|
+
disableClearable: true,
|
|
214
|
+
PopperComponent: MyPopper,
|
|
215
|
+
disabled: !assemblyName,
|
|
216
|
+
freeSolo: true,
|
|
217
|
+
includeInputInList: true,
|
|
218
|
+
selectOnFocus: true,
|
|
219
|
+
style: _objectSpread(_objectSpread({}, style), {}, {
|
|
220
|
+
width: width
|
|
221
|
+
}),
|
|
222
|
+
value: inputBoxVal,
|
|
223
|
+
loading: !loaded,
|
|
224
|
+
inputValue: inputValue,
|
|
225
|
+
onInputChange: function onInputChange(event, newInputValue) {
|
|
226
|
+
return setInputValue(newInputValue);
|
|
227
|
+
},
|
|
228
|
+
loadingText: "loading results",
|
|
229
|
+
open: open,
|
|
230
|
+
onOpen: function onOpen() {
|
|
231
|
+
return setOpen(true);
|
|
232
|
+
},
|
|
233
|
+
onClose: function onClose() {
|
|
234
|
+
setOpen(false);
|
|
235
|
+
setLoaded(true);
|
|
236
|
+
|
|
237
|
+
if (hasDisplayedRegions) {
|
|
238
|
+
setCurrentSearch('');
|
|
239
|
+
setSearchOptions(undefined);
|
|
240
|
+
}
|
|
241
|
+
},
|
|
242
|
+
onChange: function onChange(_event, selectedOption) {
|
|
243
|
+
if (!selectedOption || !assemblyName) {
|
|
244
|
+
return;
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
if (typeof selectedOption === 'string') {
|
|
248
|
+
// handles string inputs on keyPress enter
|
|
249
|
+
onSelect(new _BaseResults["default"]({
|
|
250
|
+
label: selectedOption
|
|
251
|
+
}));
|
|
252
|
+
} else {
|
|
253
|
+
onSelect(selectedOption.result);
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
setInputValue(inputBoxVal);
|
|
257
|
+
},
|
|
258
|
+
options: !(searchOptions !== null && searchOptions !== void 0 && searchOptions.length) ? options : searchOptions,
|
|
259
|
+
getOptionDisabled: function getOptionDisabled(option) {
|
|
260
|
+
return (option === null || option === void 0 ? void 0 : option.group) === 'limitOption';
|
|
261
|
+
},
|
|
262
|
+
filterOptions: function filterOptions(options, params) {
|
|
263
|
+
var filtered = _filterOptions(options, params.inputValue.toLocaleLowerCase());
|
|
264
|
+
|
|
265
|
+
return [].concat((0, _toConsumableArray2["default"])(filtered.slice(0, 100)), (0, _toConsumableArray2["default"])(filtered.length > 100 ? [{
|
|
266
|
+
group: 'limitOption',
|
|
267
|
+
result: new _BaseResults["default"]({
|
|
268
|
+
label: 'keep typing for more results'
|
|
269
|
+
})
|
|
270
|
+
}] : []));
|
|
271
|
+
},
|
|
272
|
+
renderInput: function renderInput(params) {
|
|
273
|
+
var helperText = TextFieldProps.helperText,
|
|
274
|
+
_TextFieldProps$Input = TextFieldProps.InputProps,
|
|
275
|
+
InputProps = _TextFieldProps$Input === void 0 ? {} : _TextFieldProps$Input;
|
|
276
|
+
return /*#__PURE__*/_react["default"].createElement(_core.TextField, (0, _extends2["default"])({
|
|
277
|
+
onBlur: function onBlur() {
|
|
278
|
+
// this is used to restore a refName or the non-user-typed input
|
|
279
|
+
// to the box on blurring
|
|
280
|
+
setInputValue(inputBoxVal);
|
|
281
|
+
}
|
|
282
|
+
}, params, TextFieldProps, {
|
|
283
|
+
helperText: helperText,
|
|
284
|
+
InputProps: _objectSpread(_objectSpread(_objectSpread({}, params.InputProps), InputProps), {}, {
|
|
285
|
+
endAdornment: /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, regions.length === 0 ? /*#__PURE__*/_react["default"].createElement(_core.CircularProgress, {
|
|
286
|
+
color: "inherit",
|
|
287
|
+
size: 20
|
|
288
|
+
}) : /*#__PURE__*/_react["default"].createElement(_core.InputAdornment, {
|
|
289
|
+
position: "end",
|
|
290
|
+
style: {
|
|
291
|
+
marginRight: 7
|
|
292
|
+
}
|
|
293
|
+
}, /*#__PURE__*/_react["default"].createElement(_Search["default"], null), showHelp ? /*#__PURE__*/_react["default"].createElement(_core.IconButton, {
|
|
294
|
+
onClick: function onClick() {
|
|
295
|
+
return setHelpDialogDisplayed(true);
|
|
296
|
+
}
|
|
297
|
+
}, /*#__PURE__*/_react["default"].createElement(_Help["default"], null)) : null), params.InputProps.endAdornment)
|
|
298
|
+
}),
|
|
299
|
+
placeholder: "Search for location",
|
|
300
|
+
onChange: function onChange(e) {
|
|
301
|
+
setCurrentSearch(e.target.value);
|
|
302
|
+
}
|
|
303
|
+
}));
|
|
304
|
+
},
|
|
305
|
+
renderOption: function renderOption(option) {
|
|
306
|
+
var result = option.result;
|
|
307
|
+
var component = result.getRenderingComponent();
|
|
308
|
+
|
|
309
|
+
if (component && /*#__PURE__*/_react["default"].isValidElement(component)) {
|
|
310
|
+
return component;
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
return /*#__PURE__*/_react["default"].createElement(_core.Typography, {
|
|
314
|
+
noWrap: true
|
|
315
|
+
}, result.getDisplayString());
|
|
316
|
+
},
|
|
317
|
+
getOptionLabel: function getOptionLabel(option) {
|
|
318
|
+
return (typeof option === 'string' ? option : option.result.getLabel()) || '';
|
|
319
|
+
}
|
|
320
|
+
}), isHelpDialogDisplayed ? /*#__PURE__*/_react["default"].createElement(_react.Suspense, {
|
|
321
|
+
fallback: /*#__PURE__*/_react["default"].createElement("div", null)
|
|
322
|
+
}, /*#__PURE__*/_react["default"].createElement(HelpDialog, {
|
|
323
|
+
handleClose: function handleClose() {
|
|
324
|
+
return setHelpDialogDisplayed(false);
|
|
325
|
+
}
|
|
326
|
+
})) : null);
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
var _default = (0, _mobxReact.observer)(RefNameAutocomplete);
|
|
330
|
+
|
|
331
|
+
exports["default"] = _default;
|
|
@@ -1,20 +1,9 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
declare namespace RubberBand {
|
|
11
|
-
var propTypes: {
|
|
12
|
-
model: ReactPropTypes.Validator<any>;
|
|
13
|
-
ControlComponent: ReactPropTypes.Requireable<ReactPropTypes.ReactNodeLike>;
|
|
14
|
-
};
|
|
15
|
-
var defaultProps: {
|
|
16
|
-
ControlComponent: JSX.Element;
|
|
17
|
-
};
|
|
18
|
-
}
|
|
19
|
-
declare const _default: typeof RubberBand;
|
|
20
|
-
export default _default;
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { LinearGenomeViewModel } from '..';
|
|
3
|
+
declare type LGV = LinearGenomeViewModel;
|
|
4
|
+
declare function RubberBand({ model, ControlComponent, }: {
|
|
5
|
+
model: LGV;
|
|
6
|
+
ControlComponent?: React.ReactElement;
|
|
7
|
+
}): JSX.Element;
|
|
8
|
+
declare const _default: typeof RubberBand;
|
|
9
|
+
export default _default;
|
|
@@ -0,0 +1,309 @@
|
|
|
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 _core = require("@material-ui/core");
|
|
19
|
+
|
|
20
|
+
var _util = require("@jbrowse/core/util");
|
|
21
|
+
|
|
22
|
+
var _ui = require("@jbrowse/core/ui");
|
|
23
|
+
|
|
24
|
+
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); }
|
|
25
|
+
|
|
26
|
+
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; }
|
|
27
|
+
|
|
28
|
+
var useStyles = (0, _core.makeStyles)(function (theme) {
|
|
29
|
+
var background = theme.palette.tertiary ? (0, _core.alpha)(theme.palette.tertiary.main, 0.7) : (0, _core.alpha)(theme.palette.primary.main, 0.7);
|
|
30
|
+
return {
|
|
31
|
+
rubberBand: {
|
|
32
|
+
height: '100%',
|
|
33
|
+
background: background,
|
|
34
|
+
position: 'absolute',
|
|
35
|
+
zIndex: 10,
|
|
36
|
+
textAlign: 'center',
|
|
37
|
+
overflow: 'hidden'
|
|
38
|
+
},
|
|
39
|
+
rubberBandControl: {
|
|
40
|
+
cursor: 'crosshair',
|
|
41
|
+
width: '100%',
|
|
42
|
+
minHeight: 8
|
|
43
|
+
},
|
|
44
|
+
rubberBandText: {
|
|
45
|
+
color: theme.palette.tertiary ? theme.palette.tertiary.contrastText : theme.palette.primary.contrastText
|
|
46
|
+
},
|
|
47
|
+
popover: {
|
|
48
|
+
mouseEvents: 'none',
|
|
49
|
+
cursor: 'crosshair'
|
|
50
|
+
},
|
|
51
|
+
paper: {
|
|
52
|
+
paddingLeft: theme.spacing(1),
|
|
53
|
+
paddingRight: theme.spacing(1)
|
|
54
|
+
},
|
|
55
|
+
guide: {
|
|
56
|
+
pointerEvents: 'none',
|
|
57
|
+
height: '100%',
|
|
58
|
+
width: 1,
|
|
59
|
+
position: 'absolute',
|
|
60
|
+
zIndex: 10
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
});
|
|
64
|
+
var VerticalGuide = (0, _mobxReact.observer)(function (_ref) {
|
|
65
|
+
var model = _ref.model,
|
|
66
|
+
coordX = _ref.coordX;
|
|
67
|
+
var classes = useStyles();
|
|
68
|
+
return /*#__PURE__*/_react["default"].createElement(_core.Tooltip, {
|
|
69
|
+
open: true,
|
|
70
|
+
placement: "top",
|
|
71
|
+
title: (0, _util.stringify)(model.pxToBp(coordX)),
|
|
72
|
+
arrow: true
|
|
73
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
74
|
+
className: classes.guide,
|
|
75
|
+
style: {
|
|
76
|
+
left: coordX,
|
|
77
|
+
background: 'red'
|
|
78
|
+
}
|
|
79
|
+
}));
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
function RubberBand(_ref2) {
|
|
83
|
+
var model = _ref2.model,
|
|
84
|
+
_ref2$ControlComponen = _ref2.ControlComponent,
|
|
85
|
+
ControlComponent = _ref2$ControlComponen === void 0 ? /*#__PURE__*/_react["default"].createElement("div", null) : _ref2$ControlComponen;
|
|
86
|
+
|
|
87
|
+
var _useState = (0, _react.useState)(),
|
|
88
|
+
_useState2 = (0, _slicedToArray2["default"])(_useState, 2),
|
|
89
|
+
startX = _useState2[0],
|
|
90
|
+
setStartX = _useState2[1];
|
|
91
|
+
|
|
92
|
+
var _useState3 = (0, _react.useState)(),
|
|
93
|
+
_useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
|
|
94
|
+
currentX = _useState4[0],
|
|
95
|
+
setCurrentX = _useState4[1]; // clientX and clientY used for anchorPosition for menu
|
|
96
|
+
// offsetX used for calculations about width of selection
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
var _useState5 = (0, _react.useState)(),
|
|
100
|
+
_useState6 = (0, _slicedToArray2["default"])(_useState5, 2),
|
|
101
|
+
anchorPosition = _useState6[0],
|
|
102
|
+
setAnchorPosition = _useState6[1];
|
|
103
|
+
|
|
104
|
+
var _useState7 = (0, _react.useState)(),
|
|
105
|
+
_useState8 = (0, _slicedToArray2["default"])(_useState7, 2),
|
|
106
|
+
guideX = _useState8[0],
|
|
107
|
+
setGuideX = _useState8[1];
|
|
108
|
+
|
|
109
|
+
var controlsRef = (0, _react.useRef)(null);
|
|
110
|
+
var rubberBandRef = (0, _react.useRef)(null);
|
|
111
|
+
var classes = useStyles();
|
|
112
|
+
var mouseDragging = startX !== undefined && anchorPosition === undefined;
|
|
113
|
+
var setOffsets = model.setOffsets,
|
|
114
|
+
pxToBp = model.pxToBp;
|
|
115
|
+
(0, _react.useEffect)(function () {
|
|
116
|
+
function computeOffsets(offsetX) {
|
|
117
|
+
if (startX === undefined) {
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
var leftPx = startX;
|
|
122
|
+
var rightPx = offsetX; // handles clicking and draging to the left
|
|
123
|
+
|
|
124
|
+
if (rightPx < leftPx) {
|
|
125
|
+
;
|
|
126
|
+
var _ref3 = [rightPx, leftPx];
|
|
127
|
+
leftPx = _ref3[0];
|
|
128
|
+
rightPx = _ref3[1];
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
var leftOffset = pxToBp(leftPx);
|
|
132
|
+
var rightOffset = pxToBp(rightPx);
|
|
133
|
+
return {
|
|
134
|
+
leftOffset: leftOffset,
|
|
135
|
+
rightOffset: rightOffset
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
function globalMouseMove(event) {
|
|
140
|
+
if (controlsRef.current && mouseDragging) {
|
|
141
|
+
var relativeX = event.clientX - controlsRef.current.getBoundingClientRect().left;
|
|
142
|
+
setCurrentX(relativeX);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
function globalMouseUp(event) {
|
|
147
|
+
if (startX !== undefined && controlsRef.current) {
|
|
148
|
+
var clientX = event.clientX,
|
|
149
|
+
clientY = event.clientY;
|
|
150
|
+
var ref = controlsRef.current;
|
|
151
|
+
var offsetX = clientX - ref.getBoundingClientRect().left; // as stated above, store both clientX/Y and offsetX for different
|
|
152
|
+
// purposes
|
|
153
|
+
|
|
154
|
+
setAnchorPosition({
|
|
155
|
+
offsetX: offsetX,
|
|
156
|
+
clientX: clientX,
|
|
157
|
+
clientY: clientY
|
|
158
|
+
});
|
|
159
|
+
var args = computeOffsets(offsetX);
|
|
160
|
+
|
|
161
|
+
if (args) {
|
|
162
|
+
var leftOffset = args.leftOffset,
|
|
163
|
+
rightOffset = args.rightOffset;
|
|
164
|
+
setOffsets(leftOffset, rightOffset);
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
setGuideX(undefined);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
if (mouseDragging) {
|
|
172
|
+
window.addEventListener('mousemove', globalMouseMove);
|
|
173
|
+
window.addEventListener('mouseup', globalMouseUp);
|
|
174
|
+
return function () {
|
|
175
|
+
window.removeEventListener('mousemove', globalMouseMove);
|
|
176
|
+
window.removeEventListener('mouseup', globalMouseUp);
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
return function () {};
|
|
181
|
+
}, [startX, mouseDragging, anchorPosition, setOffsets, pxToBp]);
|
|
182
|
+
(0, _react.useEffect)(function () {
|
|
183
|
+
if (!mouseDragging && currentX !== undefined && startX !== undefined && Math.abs(currentX - startX) <= 3) {
|
|
184
|
+
handleClose();
|
|
185
|
+
}
|
|
186
|
+
}, [mouseDragging, currentX, startX, model.bpPerPx]);
|
|
187
|
+
|
|
188
|
+
function mouseDown(event) {
|
|
189
|
+
event.preventDefault();
|
|
190
|
+
event.stopPropagation();
|
|
191
|
+
var relativeX = event.clientX - event.target.getBoundingClientRect().left;
|
|
192
|
+
setStartX(relativeX);
|
|
193
|
+
setCurrentX(relativeX);
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
function mouseMove(event) {
|
|
197
|
+
var target = event.target;
|
|
198
|
+
setGuideX(event.clientX - target.getBoundingClientRect().left);
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
function mouseOut() {
|
|
202
|
+
setGuideX(undefined);
|
|
203
|
+
model.setOffsets(undefined, undefined);
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
function handleClose() {
|
|
207
|
+
setAnchorPosition(undefined);
|
|
208
|
+
setStartX(undefined);
|
|
209
|
+
setCurrentX(undefined);
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
var open = Boolean(anchorPosition);
|
|
213
|
+
|
|
214
|
+
function handleMenuItemClick(_, callback) {
|
|
215
|
+
callback();
|
|
216
|
+
handleClose();
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
if (startX === undefined) {
|
|
220
|
+
return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, guideX !== undefined ? /*#__PURE__*/_react["default"].createElement(VerticalGuide, {
|
|
221
|
+
model: model,
|
|
222
|
+
coordX: guideX
|
|
223
|
+
}) : null, /*#__PURE__*/_react["default"].createElement("div", {
|
|
224
|
+
"data-testid": "rubberBand_controls",
|
|
225
|
+
className: classes.rubberBandControl,
|
|
226
|
+
role: "presentation",
|
|
227
|
+
ref: controlsRef,
|
|
228
|
+
onMouseDown: mouseDown,
|
|
229
|
+
onMouseOut: mouseOut,
|
|
230
|
+
onMouseMove: mouseMove
|
|
231
|
+
}, ControlComponent));
|
|
232
|
+
}
|
|
233
|
+
/* Calculating Pixels for Mouse Dragging */
|
|
234
|
+
|
|
235
|
+
|
|
236
|
+
var right = anchorPosition ? anchorPosition.offsetX : currentX || 0;
|
|
237
|
+
var left = right < startX ? right : startX;
|
|
238
|
+
var width = Math.abs(right - startX);
|
|
239
|
+
var leftBpOffset = model.pxToBp(left);
|
|
240
|
+
var rightBpOffset = model.pxToBp(left + width);
|
|
241
|
+
var numOfBpSelected = Math.ceil(width * model.bpPerPx);
|
|
242
|
+
return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, rubberBandRef.current ? /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(_core.Popover, {
|
|
243
|
+
className: classes.popover,
|
|
244
|
+
classes: {
|
|
245
|
+
paper: classes.paper
|
|
246
|
+
},
|
|
247
|
+
open: true,
|
|
248
|
+
anchorEl: rubberBandRef.current,
|
|
249
|
+
anchorOrigin: {
|
|
250
|
+
vertical: 'top',
|
|
251
|
+
horizontal: 'left'
|
|
252
|
+
},
|
|
253
|
+
transformOrigin: {
|
|
254
|
+
vertical: 'bottom',
|
|
255
|
+
horizontal: 'right'
|
|
256
|
+
},
|
|
257
|
+
keepMounted: true,
|
|
258
|
+
disableRestoreFocus: true
|
|
259
|
+
}, /*#__PURE__*/_react["default"].createElement(_core.Typography, null, (0, _util.stringify)(leftBpOffset))), /*#__PURE__*/_react["default"].createElement(_core.Popover, {
|
|
260
|
+
className: classes.popover,
|
|
261
|
+
classes: {
|
|
262
|
+
paper: classes.paper
|
|
263
|
+
},
|
|
264
|
+
open: true,
|
|
265
|
+
anchorEl: rubberBandRef.current,
|
|
266
|
+
anchorOrigin: {
|
|
267
|
+
vertical: 'top',
|
|
268
|
+
horizontal: 'right'
|
|
269
|
+
},
|
|
270
|
+
transformOrigin: {
|
|
271
|
+
vertical: 'bottom',
|
|
272
|
+
horizontal: 'left'
|
|
273
|
+
},
|
|
274
|
+
keepMounted: true,
|
|
275
|
+
disableRestoreFocus: true
|
|
276
|
+
}, /*#__PURE__*/_react["default"].createElement(_core.Typography, null, (0, _util.stringify)(rightBpOffset)))) : null, /*#__PURE__*/_react["default"].createElement("div", {
|
|
277
|
+
ref: rubberBandRef,
|
|
278
|
+
className: classes.rubberBand,
|
|
279
|
+
style: {
|
|
280
|
+
left: left,
|
|
281
|
+
width: width
|
|
282
|
+
}
|
|
283
|
+
}, /*#__PURE__*/_react["default"].createElement(_core.Typography, {
|
|
284
|
+
variant: "h6",
|
|
285
|
+
className: classes.rubberBandText
|
|
286
|
+
}, numOfBpSelected.toLocaleString('en-US'), " bp")), /*#__PURE__*/_react["default"].createElement("div", {
|
|
287
|
+
"data-testid": "rubberBand_controls",
|
|
288
|
+
className: classes.rubberBandControl,
|
|
289
|
+
role: "presentation",
|
|
290
|
+
ref: controlsRef,
|
|
291
|
+
onMouseDown: mouseDown,
|
|
292
|
+
onMouseOut: mouseOut,
|
|
293
|
+
onMouseMove: mouseMove
|
|
294
|
+
}, ControlComponent), anchorPosition ? /*#__PURE__*/_react["default"].createElement(_ui.Menu, {
|
|
295
|
+
anchorReference: "anchorPosition",
|
|
296
|
+
anchorPosition: {
|
|
297
|
+
left: anchorPosition.clientX,
|
|
298
|
+
top: anchorPosition.clientY
|
|
299
|
+
},
|
|
300
|
+
onMenuItemClick: handleMenuItemClick,
|
|
301
|
+
open: open,
|
|
302
|
+
onClose: handleClose,
|
|
303
|
+
menuItems: model.rubberBandMenuItems()
|
|
304
|
+
}) : null);
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
var _default = (0, _mobxReact.observer)(RubberBand);
|
|
308
|
+
|
|
309
|
+
exports["default"] = _default;
|