@jbrowse/plugin-sv-inspector 2.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/LICENSE +201 -0
  2. package/dist/LaunchSvInspectorView/index.d.ts +3 -0
  3. package/dist/LaunchSvInspectorView/index.js +27 -0
  4. package/dist/LaunchSvInspectorView/index.js.map +1 -0
  5. package/dist/SvInspectorView/components/CircularViewOptions.d.ts +6 -0
  6. package/dist/SvInspectorView/components/CircularViewOptions.js +22 -0
  7. package/dist/SvInspectorView/components/CircularViewOptions.js.map +1 -0
  8. package/dist/SvInspectorView/components/SvInspectorView.d.ts +6 -0
  9. package/dist/SvInspectorView/components/SvInspectorView.js +51 -0
  10. package/dist/SvInspectorView/components/SvInspectorView.js.map +1 -0
  11. package/dist/SvInspectorView/index.d.ts +3 -0
  12. package/dist/SvInspectorView/index.js +35 -0
  13. package/dist/SvInspectorView/index.js.map +1 -0
  14. package/dist/SvInspectorView/models/SvInspectorView.d.ts +881 -0
  15. package/dist/SvInspectorView/models/SvInspectorView.js +317 -0
  16. package/dist/SvInspectorView/models/SvInspectorView.js.map +1 -0
  17. package/dist/SvInspectorView/models/adhocFeatureUtils.d.ts +44 -0
  18. package/dist/SvInspectorView/models/adhocFeatureUtils.js +97 -0
  19. package/dist/SvInspectorView/models/adhocFeatureUtils.js.map +1 -0
  20. package/dist/SvInspectorView/models/breakpointSplitViewFromTableRow.d.ts +4 -0
  21. package/dist/SvInspectorView/models/breakpointSplitViewFromTableRow.js +49 -0
  22. package/dist/SvInspectorView/models/breakpointSplitViewFromTableRow.js.map +1 -0
  23. package/dist/index.d.ts +7 -0
  24. package/dist/index.js +35 -0
  25. package/dist/index.js.map +1 -0
  26. package/esm/LaunchSvInspectorView/index.d.ts +3 -0
  27. package/esm/LaunchSvInspectorView/index.js +25 -0
  28. package/esm/LaunchSvInspectorView/index.js.map +1 -0
  29. package/esm/SvInspectorView/components/CircularViewOptions.d.ts +6 -0
  30. package/esm/SvInspectorView/components/CircularViewOptions.js +17 -0
  31. package/esm/SvInspectorView/components/CircularViewOptions.js.map +1 -0
  32. package/esm/SvInspectorView/components/SvInspectorView.d.ts +6 -0
  33. package/esm/SvInspectorView/components/SvInspectorView.js +46 -0
  34. package/esm/SvInspectorView/components/SvInspectorView.js.map +1 -0
  35. package/esm/SvInspectorView/index.d.ts +3 -0
  36. package/esm/SvInspectorView/index.js +30 -0
  37. package/esm/SvInspectorView/index.js.map +1 -0
  38. package/esm/SvInspectorView/models/SvInspectorView.d.ts +881 -0
  39. package/esm/SvInspectorView/models/SvInspectorView.js +312 -0
  40. package/esm/SvInspectorView/models/SvInspectorView.js.map +1 -0
  41. package/esm/SvInspectorView/models/adhocFeatureUtils.d.ts +44 -0
  42. package/esm/SvInspectorView/models/adhocFeatureUtils.js +90 -0
  43. package/esm/SvInspectorView/models/adhocFeatureUtils.js.map +1 -0
  44. package/esm/SvInspectorView/models/breakpointSplitViewFromTableRow.d.ts +4 -0
  45. package/esm/SvInspectorView/models/breakpointSplitViewFromTableRow.js +42 -0
  46. package/esm/SvInspectorView/models/breakpointSplitViewFromTableRow.js.map +1 -0
  47. package/esm/index.d.ts +7 -0
  48. package/esm/index.js +29 -0
  49. package/esm/index.js.map +1 -0
  50. package/package.json +62 -0
  51. package/src/LaunchSvInspectorView/index.ts +41 -0
  52. package/src/SvInspectorView/components/CircularViewOptions.tsx +47 -0
  53. package/src/SvInspectorView/components/SvInspectorView.tsx +81 -0
  54. package/src/SvInspectorView/index.ts +41 -0
  55. package/src/SvInspectorView/models/SvInspectorView.ts +406 -0
  56. package/src/SvInspectorView/models/adhocFeatureUtils.js +152 -0
  57. package/src/SvInspectorView/models/breakpointSplitViewFromTableRow.js +84 -0
  58. package/src/index.ts +34 -0
@@ -0,0 +1,317 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const clone_1 = __importDefault(require("clone"));
7
+ const mobx_1 = require("mobx");
8
+ const mobx_state_tree_1 = require("mobx-state-tree");
9
+ const util_1 = require("@jbrowse/core/util");
10
+ const configuration_1 = require("@jbrowse/core/configuration");
11
+ const mst_1 = require("@jbrowse/core/util/types/mst");
12
+ const models_1 = require("@jbrowse/core/pluggableElementTypes/models");
13
+ // icons
14
+ const OpenInNew_1 = __importDefault(require("@mui/icons-material/OpenInNew"));
15
+ const FolderOpen_1 = __importDefault(require("@mui/icons-material/FolderOpen"));
16
+ // locals
17
+ const breakpointSplitViewFromTableRow_1 = require("./breakpointSplitViewFromTableRow");
18
+ /**
19
+ * #stateModel SvInspectorView
20
+ * #category view
21
+ * combination of a spreadsheetview and a circularview
22
+ */
23
+ function SvInspectorViewF(pluginManager) {
24
+ const SpreadsheetViewType = pluginManager.getViewType('SpreadsheetView');
25
+ const CircularViewType = pluginManager.getViewType('CircularView');
26
+ const SpreadsheetModel = SpreadsheetViewType.stateModel;
27
+ const CircularModel = CircularViewType.stateModel;
28
+ const minHeight = 400;
29
+ const defaultHeight = 550;
30
+ const headerHeight = 52;
31
+ const circularViewOptionsBarHeight = 52;
32
+ return mobx_state_tree_1.types
33
+ .compose(models_1.BaseViewModel, mobx_state_tree_1.types.model('SvInspectorView', {
34
+ /**
35
+ * #property
36
+ */
37
+ id: mst_1.ElementId,
38
+ /**
39
+ * #property
40
+ */
41
+ type: mobx_state_tree_1.types.literal('SvInspectorView'),
42
+ /**
43
+ * #property
44
+ */
45
+ height: mobx_state_tree_1.types.optional(mobx_state_tree_1.types.refinement('SvInspectorViewHeight', mobx_state_tree_1.types.number, n => n >= minHeight), defaultHeight),
46
+ /**
47
+ * #property
48
+ */
49
+ onlyDisplayRelevantRegionsInCircularView: false,
50
+ /**
51
+ * #property
52
+ * switch specifying whether we are showing the import wizard or the
53
+ * spreadsheet in our viewing area
54
+ */
55
+ mode: mobx_state_tree_1.types.optional(mobx_state_tree_1.types.enumeration('SvInspectorViewMode', ['import', 'display']), 'import'),
56
+ /**
57
+ * #property
58
+ */
59
+ spreadsheetView: mobx_state_tree_1.types.optional(SpreadsheetModel, () => SpreadsheetModel.create({
60
+ type: 'SpreadsheetView',
61
+ hideVerticalResizeHandle: true,
62
+ })),
63
+ /**
64
+ * #property
65
+ */
66
+ circularView: mobx_state_tree_1.types.optional(CircularModel, () => CircularModel.create({
67
+ type: 'CircularView',
68
+ hideVerticalResizeHandle: true,
69
+ hideTrackSelectorButton: true,
70
+ disableImportForm: true,
71
+ })),
72
+ }))
73
+ .volatile(() => ({
74
+ width: 800,
75
+ }))
76
+ .views(self => ({
77
+ /**
78
+ * #getter
79
+ */
80
+ get selectedRows() {
81
+ // @ts-expect-error
82
+ return self.spreadsheetView.rowSet.selectedRows;
83
+ },
84
+ /**
85
+ * #getter
86
+ */
87
+ get assemblyName() {
88
+ const { assembly } = self.spreadsheetView;
89
+ return assembly ? (0, configuration_1.readConfObject)(assembly, 'name') : undefined;
90
+ },
91
+ /**
92
+ * #getter
93
+ */
94
+ get showCircularView() {
95
+ return self.spreadsheetView.mode === 'display';
96
+ },
97
+ /**
98
+ * #getter
99
+ */
100
+ get features() {
101
+ const session = (0, util_1.getSession)(self);
102
+ const { spreadsheetView } = self;
103
+ const { outputRows = [] } = spreadsheetView;
104
+ return outputRows
105
+ .map((r, i) => (0, breakpointSplitViewFromTableRow_1.getFeatureForRow)(session, spreadsheetView, r, i))
106
+ .filter(f => !!f);
107
+ },
108
+ /**
109
+ * #getter
110
+ */
111
+ get featuresAdapterConfigSnapshot() {
112
+ return {
113
+ type: 'FromConfigAdapter',
114
+ features: this.features,
115
+ };
116
+ },
117
+ /**
118
+ * #getter
119
+ */
120
+ get featureRefNames() {
121
+ const refs = this.features.map(r => r.refName);
122
+ const CHR2 = this.features.flatMap(r => { var _a; return (_a = r.INFO) === null || _a === void 0 ? void 0 : _a.CHR2; }).filter(f => !!f);
123
+ return [...refs, ...CHR2];
124
+ },
125
+ /**
126
+ * #getter
127
+ */
128
+ get featuresCircularTrackConfiguration() {
129
+ return {
130
+ type: 'VariantTrack',
131
+ trackId: `sv-inspector-variant-track-${self.id}`,
132
+ name: 'features from tabular data',
133
+ adapter: this.featuresAdapterConfigSnapshot,
134
+ assemblyNames: [this.assemblyName],
135
+ displays: [
136
+ {
137
+ type: 'ChordVariantDisplay',
138
+ displayId: `sv-inspector-variant-track-chord-display-${self.id}`,
139
+ onChordClick: `jexl:defaultOnChordClick(feature, track, pluginManager)`,
140
+ renderer: { type: 'StructuralVariantChordRenderer' },
141
+ },
142
+ ],
143
+ };
144
+ },
145
+ }))
146
+ .volatile(() => ({
147
+ SpreadsheetViewReactComponent: SpreadsheetViewType.ReactComponent,
148
+ CircularViewReactComponent: CircularViewType.ReactComponent,
149
+ circularViewOptionsBarHeight,
150
+ }))
151
+ .actions(self => ({
152
+ /**
153
+ * #action
154
+ */
155
+ setWidth(newWidth) {
156
+ self.width = newWidth;
157
+ },
158
+ /**
159
+ * #action
160
+ */
161
+ setHeight(newHeight) {
162
+ self.height = newHeight > minHeight ? newHeight : minHeight;
163
+ return self.height;
164
+ },
165
+ /**
166
+ * #action
167
+ */
168
+ setImportMode() {
169
+ self.spreadsheetView.setImportMode();
170
+ },
171
+ /**
172
+ * #action
173
+ */
174
+ setDisplayMode() {
175
+ self.spreadsheetView.setDisplayMode();
176
+ },
177
+ /**
178
+ * #action
179
+ */
180
+ closeView() {
181
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
182
+ (0, mobx_state_tree_1.getParent)(self, 2).removeView(self);
183
+ },
184
+ /**
185
+ * #action
186
+ */
187
+ setDisplayedRegions(regions) {
188
+ self.circularView.setDisplayedRegions(regions);
189
+ },
190
+ /**
191
+ * #action
192
+ */
193
+ setOnlyDisplayRelevantRegionsInCircularView(val) {
194
+ self.onlyDisplayRelevantRegionsInCircularView = Boolean(val);
195
+ },
196
+ }))
197
+ .views(self => ({
198
+ /**
199
+ * #method
200
+ */
201
+ menuItems() {
202
+ return [
203
+ {
204
+ label: 'Return to import form',
205
+ onClick: () => self.setImportMode(),
206
+ icon: FolderOpen_1.default,
207
+ },
208
+ ];
209
+ },
210
+ }))
211
+ .actions(self => ({
212
+ /**
213
+ * #action
214
+ */
215
+ resizeHeight(distance) {
216
+ const oldHeight = self.height;
217
+ const newHeight = self.setHeight(self.height + distance);
218
+ return newHeight - oldHeight;
219
+ },
220
+ afterAttach() {
221
+ // synchronize subview widths
222
+ (0, mobx_state_tree_1.addDisposer)(self, (0, mobx_1.autorun)(() => {
223
+ const borderWidth = 1;
224
+ if (self.showCircularView) {
225
+ const spreadsheetWidth = Math.round(self.width * 0.66);
226
+ const circularViewWidth = self.width - spreadsheetWidth;
227
+ self.spreadsheetView.setWidth(spreadsheetWidth - borderWidth);
228
+ self.circularView.setWidth(circularViewWidth);
229
+ }
230
+ else {
231
+ self.spreadsheetView.setWidth(self.width);
232
+ }
233
+ }, { name: 'SvInspectorView width binding' }));
234
+ // synchronize subview heights
235
+ (0, mobx_state_tree_1.addDisposer)(self, (0, mobx_1.autorun)(() => {
236
+ self.spreadsheetView.setHeight(self.height - headerHeight);
237
+ self.circularView.setHeight(self.height - headerHeight - circularViewOptionsBarHeight);
238
+ }, { name: 'SvInspectorView height binding' }));
239
+ // bind circularview displayedRegions to spreadsheet assembly, mediated
240
+ // by the onlyRelevantRegions toggle
241
+ (0, mobx_state_tree_1.addDisposer)(self, (0, mobx_1.autorun)(async () => {
242
+ const { assemblyName, onlyDisplayRelevantRegionsInCircularView, circularView, featureRefNames, } = self;
243
+ const { tracks } = circularView;
244
+ const { assemblyManager } = (0, util_1.getSession)(self);
245
+ if (!assemblyName) {
246
+ return;
247
+ }
248
+ const asm = await assemblyManager.waitForAssembly(assemblyName);
249
+ if (!asm) {
250
+ return;
251
+ }
252
+ const { getCanonicalRefName, regions = [] } = asm;
253
+ if (onlyDisplayRelevantRegionsInCircularView) {
254
+ if (tracks.length === 1) {
255
+ try {
256
+ // canonicalize the store's ref names if necessary
257
+ const refSet = new Set(featureRefNames.map(r => getCanonicalRefName(r) || r));
258
+ circularView.setDisplayedRegions((0, clone_1.default)(regions.filter(r => refSet.has(r.refName))));
259
+ }
260
+ catch (e) {
261
+ circularView.setError(e);
262
+ }
263
+ }
264
+ }
265
+ else {
266
+ circularView.setDisplayedRegions(regions);
267
+ }
268
+ }, { name: 'SvInspectorView displayed regions bind' }));
269
+ // bind circularview tracks to our track snapshot view
270
+ (0, mobx_state_tree_1.addDisposer)(self, (0, mobx_1.reaction)(() => ({
271
+ generatedTrackConf: self === null || self === void 0 ? void 0 : self.featuresCircularTrackConfiguration,
272
+ assemblyName: self === null || self === void 0 ? void 0 : self.assemblyName,
273
+ }), data => {
274
+ if (!data) {
275
+ return;
276
+ }
277
+ const { assemblyName, generatedTrackConf } = data;
278
+ const { circularView } = self;
279
+ // hide any visible tracks
280
+ circularView.tracks.forEach(t => circularView.hideTrack(t.configuration.trackId));
281
+ // put our track in as the only track
282
+ if (assemblyName && generatedTrackConf) {
283
+ // @ts-expect-error
284
+ circularView.addTrackConf(generatedTrackConf, {
285
+ assemblyName,
286
+ });
287
+ }
288
+ }, {
289
+ name: 'SvInspectorView track configuration binding',
290
+ fireImmediately: true,
291
+ }));
292
+ // bind spreadsheetView row menu actions to us
293
+ (0, mobx_state_tree_1.addDisposer)(self, (0, mobx_1.autorun)(() => {
294
+ self.spreadsheetView.setRowMenuItems(
295
+ // these are the MenuItem entries for the row menu actions in the
296
+ // spreadsheet view. these are installed into the child
297
+ // SpreadsheetView using an autorun below
298
+ [
299
+ {
300
+ label: 'Open split detail view',
301
+ icon: OpenInNew_1.default,
302
+ // @ts-expect-error
303
+ disabled(spreadsheetView, spreadsheet, rowNumber, row) {
304
+ return !(0, breakpointSplitViewFromTableRow_1.canOpenBreakpointSplitViewFromTableRow)(self, spreadsheetView, spreadsheet, row, rowNumber);
305
+ },
306
+ // @ts-expect-error
307
+ onClick(spreadsheetView, spreadsheet, rowNumber, row) {
308
+ (0, breakpointSplitViewFromTableRow_1.openBreakpointSplitViewFromTableRow)(self, spreadsheetView, spreadsheet, row, rowNumber);
309
+ },
310
+ },
311
+ ]);
312
+ }));
313
+ },
314
+ }));
315
+ }
316
+ exports.default = SvInspectorViewF;
317
+ //# sourceMappingURL=SvInspectorView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SvInspectorView.js","sourceRoot":"","sources":["../../../src/SvInspectorView/models/SvInspectorView.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ export function makeAdHocFeature(columns: any, columnsAlreadyUsedInLocations: any, row: any, loc1: any, loc2: any, rowNumber: any): {
2
+ uniqueId: string;
3
+ refName: any;
4
+ start: any;
5
+ end: any;
6
+ mate: {
7
+ refName: any;
8
+ start: any;
9
+ end: any;
10
+ };
11
+ };
12
+ export function makeAdHocSvFeatureFromTwoLocations(columns: any, locationColumnNumbers: any, row: any, rowNumber: any, isValidRefName: any): {
13
+ uniqueId: string;
14
+ refName: any;
15
+ start: any;
16
+ end: any;
17
+ mate: {
18
+ refName: any;
19
+ start: any;
20
+ end: any;
21
+ };
22
+ };
23
+ export function makeAdHocSvFeatureFromTwoRefStartEndSets(columns: any, locRefColumnNumbers: any, locStartColumnNumbers: any, locEndColumnNumbers: any, row: any, rowNumber: any): {
24
+ uniqueId: string;
25
+ refName: any;
26
+ start: any;
27
+ end: any;
28
+ mate: {
29
+ refName: any;
30
+ start: any;
31
+ end: any;
32
+ };
33
+ };
34
+ export function makeAdHocSvFeature(sheet: any, rowNumber: any, row: any, isValidRefName: any): {
35
+ uniqueId: string;
36
+ refName: any;
37
+ start: any;
38
+ end: any;
39
+ mate: {
40
+ refName: any;
41
+ start: any;
42
+ end: any;
43
+ };
44
+ } | undefined;
@@ -0,0 +1,97 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.makeAdHocSvFeature = exports.makeAdHocSvFeatureFromTwoRefStartEndSets = exports.makeAdHocSvFeatureFromTwoLocations = exports.makeAdHocFeature = void 0;
4
+ // this file contains the rather verbose functions for
5
+ // creating features from CSV/TSV lines
6
+ const util_1 = require("@jbrowse/core/util");
7
+ function makeAdHocFeature(columns, columnsAlreadyUsedInLocations, row, loc1, loc2, rowNumber) {
8
+ // load all the other data in the row into an `otherData` object
9
+ const otherData = {};
10
+ columns.forEach((column, columnNumber) => {
11
+ if (columnsAlreadyUsedInLocations.includes(columnNumber)) {
12
+ return;
13
+ }
14
+ let { text } = row.cells[columnNumber];
15
+ if (column.dataType.type === 'Number') {
16
+ text = parseFloat(text);
17
+ }
18
+ otherData[column.name] = text;
19
+ });
20
+ // make the final feature data out of otherData + the parsed locations
21
+ return {
22
+ ...otherData,
23
+ uniqueId: `sv-inspector-adhoc-${rowNumber}`,
24
+ refName: loc1.refName,
25
+ start: loc1.start,
26
+ end: loc1.end,
27
+ mate: {
28
+ refName: loc2.refName,
29
+ start: loc2.start,
30
+ end: loc2.end,
31
+ },
32
+ };
33
+ }
34
+ exports.makeAdHocFeature = makeAdHocFeature;
35
+ function makeAdHocSvFeatureFromTwoLocations(columns, locationColumnNumbers, row, rowNumber, isValidRefName) {
36
+ // use the first two locations we found (first according to *displayed* order)
37
+ const loc1 = (0, util_1.parseLocString)(row.cells[locationColumnNumbers[0]].text, isValidRefName);
38
+ const loc2 = (0, util_1.parseLocString)(row.cells[locationColumnNumbers[1]].text, isValidRefName);
39
+ const columnsAlreadyUsedInLocations = [
40
+ locationColumnNumbers[0],
41
+ locationColumnNumbers[1],
42
+ ];
43
+ return makeAdHocFeature(columns, columnsAlreadyUsedInLocations, row, loc1, loc2, rowNumber);
44
+ }
45
+ exports.makeAdHocSvFeatureFromTwoLocations = makeAdHocSvFeatureFromTwoLocations;
46
+ function makeAdHocSvFeatureFromTwoRefStartEndSets(columns, locRefColumnNumbers, locStartColumnNumbers, locEndColumnNumbers, row, rowNumber) {
47
+ const textOf = colno => row.cells[colno].text;
48
+ const loc1 = {
49
+ refName: textOf(locRefColumnNumbers[0]),
50
+ start: parseInt(textOf(locStartColumnNumbers[0]), 10) - 1,
51
+ end: parseInt(textOf(locEndColumnNumbers[0]), 10),
52
+ };
53
+ const loc2 = {
54
+ refName: textOf(locRefColumnNumbers[1]),
55
+ start: parseInt(textOf(locStartColumnNumbers[1]), 10) - 1,
56
+ end: parseInt(textOf(locEndColumnNumbers[1]), 10),
57
+ };
58
+ const columnsAlreadyUsedInLocations = [
59
+ locRefColumnNumbers[0],
60
+ locStartColumnNumbers[0],
61
+ locEndColumnNumbers[0],
62
+ locRefColumnNumbers[1],
63
+ locStartColumnNumbers[1],
64
+ locEndColumnNumbers[1],
65
+ ];
66
+ return makeAdHocFeature(columns, columnsAlreadyUsedInLocations, row, loc1, loc2, rowNumber);
67
+ }
68
+ exports.makeAdHocSvFeatureFromTwoRefStartEndSets = makeAdHocSvFeatureFromTwoRefStartEndSets;
69
+ // makes a feature data object (passed as `data` to a SimpleFeature constructor)
70
+ // out of table row if the row has 2 location columns. undefined if not
71
+ function makeAdHocSvFeature(sheet, rowNumber, row, isValidRefName) {
72
+ const { columns, columnDisplayOrder } = sheet;
73
+ const columnTypes = {};
74
+ columnDisplayOrder.forEach(columnNumber => {
75
+ const columnDefinition = columns[columnNumber];
76
+ if (!columnTypes[columnDefinition.dataType.type]) {
77
+ columnTypes[columnDefinition.dataType.type] = [];
78
+ }
79
+ columnTypes[columnDefinition.dataType.type].push(columnNumber);
80
+ });
81
+ const locationColumnNumbers = columnTypes.LocString || [];
82
+ const locStartColumnNumbers = columnTypes.LocStart || [];
83
+ const locEndColumnNumbers = columnTypes.LocEnd || [];
84
+ const locRefColumnNumbers = columnTypes.LocRef || [];
85
+ // if we have 2 or more columns of type location, make a feature from them
86
+ if (locationColumnNumbers.length >= 2) {
87
+ return makeAdHocSvFeatureFromTwoLocations(columns, locationColumnNumbers, row, rowNumber, isValidRefName);
88
+ }
89
+ if (locRefColumnNumbers.length >= 2 &&
90
+ locStartColumnNumbers.length >= 2 &&
91
+ locEndColumnNumbers.length >= 2) {
92
+ return makeAdHocSvFeatureFromTwoRefStartEndSets(columns, locRefColumnNumbers, locStartColumnNumbers, locEndColumnNumbers, row, rowNumber);
93
+ }
94
+ return undefined;
95
+ }
96
+ exports.makeAdHocSvFeature = makeAdHocSvFeature;
97
+ //# sourceMappingURL=adhocFeatureUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adhocFeatureUtils.js","sourceRoot":"","sources":["../../../src/SvInspectorView/models/adhocFeatureUtils.js"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export function getFeatureForRow(session: any, spreadsheetView: any, row: any, rowNumber: any): any;
2
+ export function breakpointSplitViewSnapshotFromTableRow(svInspectorView: any, spreadsheetView: any, spreadsheet: any, row: any, rowNumber: any): any;
3
+ export function openBreakpointSplitViewFromTableRow(svInspectorView: any, spreadsheetView: any, spreadsheet: any, row: any, rowNumber: any): void;
4
+ export function canOpenBreakpointSplitViewFromTableRow(svInspectorView: any, spreadsheetView: any, spreadsheet: any, row: any, rowNumber: any): boolean;
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.canOpenBreakpointSplitViewFromTableRow = exports.openBreakpointSplitViewFromTableRow = exports.breakpointSplitViewSnapshotFromTableRow = exports.getFeatureForRow = void 0;
4
+ const util_1 = require("@jbrowse/core/util");
5
+ const adhocFeatureUtils_1 = require("./adhocFeatureUtils");
6
+ function getFeatureForRow(session, spreadsheetView, row, rowNumber) {
7
+ var _a, _b;
8
+ return (((_a = row.extendedData) === null || _a === void 0 ? void 0 : _a.vcfFeature) ||
9
+ ((_b = row.extendedData) === null || _b === void 0 ? void 0 : _b.feature) ||
10
+ (0, adhocFeatureUtils_1.makeAdHocSvFeature)(spreadsheetView.spreadsheet, rowNumber, row, session.assemblyManager.isValidRefName));
11
+ }
12
+ exports.getFeatureForRow = getFeatureForRow;
13
+ function breakpointSplitViewSnapshotFromTableRow(svInspectorView, spreadsheetView, spreadsheet, row, rowNumber) {
14
+ const { pluginManager } = (0, util_1.getEnv)(svInspectorView);
15
+ const session = (0, util_1.getSession)(spreadsheetView);
16
+ const featureData = getFeatureForRow(session, spreadsheet, row, rowNumber);
17
+ if (featureData) {
18
+ const feature = new util_1.SimpleFeature(featureData);
19
+ session.setSelection(feature);
20
+ return pluginManager
21
+ .getViewType('BreakpointSplitView')
22
+ .snapshotFromBreakendFeature(feature, svInspectorView.circularView);
23
+ }
24
+ return undefined;
25
+ }
26
+ exports.breakpointSplitViewSnapshotFromTableRow = breakpointSplitViewSnapshotFromTableRow;
27
+ function openBreakpointSplitViewFromTableRow(svInspectorView, spreadsheetView, spreadsheet, row, rowNumber) {
28
+ const viewSnapshot = breakpointSplitViewSnapshotFromTableRow(svInspectorView, spreadsheetView, spreadsheet, row, rowNumber);
29
+ if (viewSnapshot) {
30
+ // try to center the offsetPx
31
+ const { circularView } = svInspectorView;
32
+ viewSnapshot.views[0].offsetPx -= circularView.width / 2 + 100;
33
+ viewSnapshot.views[1].offsetPx -= circularView.width / 2 + 100;
34
+ const session = (0, util_1.getSession)(spreadsheetView);
35
+ session.addView('BreakpointSplitView', viewSnapshot);
36
+ }
37
+ }
38
+ exports.openBreakpointSplitViewFromTableRow = openBreakpointSplitViewFromTableRow;
39
+ function canOpenBreakpointSplitViewFromTableRow(svInspectorView, spreadsheetView, spreadsheet, row, rowNumber) {
40
+ try {
41
+ return Boolean(breakpointSplitViewSnapshotFromTableRow(svInspectorView, spreadsheetView, spreadsheet, row, rowNumber));
42
+ }
43
+ catch (e) {
44
+ console.error('Unable to open breakpoint split view from table row', e);
45
+ return false;
46
+ }
47
+ }
48
+ exports.canOpenBreakpointSplitViewFromTableRow = canOpenBreakpointSplitViewFromTableRow;
49
+ //# sourceMappingURL=breakpointSplitViewFromTableRow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"breakpointSplitViewFromTableRow.js","sourceRoot":"","sources":["../../../src/SvInspectorView/models/breakpointSplitViewFromTableRow.js"],"names":[],"mappings":";;;AAAA,6CAAsE;AACtE,2DAAwD;AAExD,SAAgB,gBAAgB,CAAC,OAAO,EAAE,eAAe,EAAE,GAAG,EAAE,SAAS;;IACvE,OAAO,CACL,CAAA,MAAA,GAAG,CAAC,YAAY,0CAAE,UAAU;SAC5B,MAAA,GAAG,CAAC,YAAY,0CAAE,OAAO,CAAA;QACzB,IAAA,sCAAkB,EAChB,eAAe,CAAC,WAAW,EAC3B,SAAS,EACT,GAAG,EACH,OAAO,CAAC,eAAe,CAAC,cAAc,CACvC,CACF,CAAA;AACH,CAAC;AAXD,4CAWC;AAED,SAAgB,uCAAuC,CACrD,eAAe,EACf,eAAe,EACf,WAAW,EACX,GAAG,EACH,SAAS;IAET,MAAM,EAAE,aAAa,EAAE,GAAG,IAAA,aAAM,EAAC,eAAe,CAAC,CAAA;IACjD,MAAM,OAAO,GAAG,IAAA,iBAAU,EAAC,eAAe,CAAC,CAAA;IAC3C,MAAM,WAAW,GAAG,gBAAgB,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,SAAS,CAAC,CAAA;IAE1E,IAAI,WAAW,EAAE;QACf,MAAM,OAAO,GAAG,IAAI,oBAAa,CAAC,WAAW,CAAC,CAAA;QAC9C,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,CAAA;QAC7B,OAAO,aAAa;aACjB,WAAW,CAAC,qBAAqB,CAAC;aAClC,2BAA2B,CAAC,OAAO,EAAE,eAAe,CAAC,YAAY,CAAC,CAAA;KACtE;IACD,OAAO,SAAS,CAAA;AAClB,CAAC;AAnBD,0FAmBC;AAED,SAAgB,mCAAmC,CACjD,eAAe,EACf,eAAe,EACf,WAAW,EACX,GAAG,EACH,SAAS;IAET,MAAM,YAAY,GAAG,uCAAuC,CAC1D,eAAe,EACf,eAAe,EACf,WAAW,EACX,GAAG,EACH,SAAS,CACV,CAAA;IACD,IAAI,YAAY,EAAE;QAChB,6BAA6B;QAC7B,MAAM,EAAE,YAAY,EAAE,GAAG,eAAe,CAAA;QACxC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,IAAI,YAAY,CAAC,KAAK,GAAG,CAAC,GAAG,GAAG,CAAA;QAC9D,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,IAAI,YAAY,CAAC,KAAK,GAAG,CAAC,GAAG,GAAG,CAAA;QAE9D,MAAM,OAAO,GAAG,IAAA,iBAAU,EAAC,eAAe,CAAC,CAAA;QAC3C,OAAO,CAAC,OAAO,CAAC,qBAAqB,EAAE,YAAY,CAAC,CAAA;KACrD;AACH,CAAC;AAvBD,kFAuBC;AAED,SAAgB,sCAAsC,CACpD,eAAe,EACf,eAAe,EACf,WAAW,EACX,GAAG,EACH,SAAS;IAET,IAAI;QACF,OAAO,OAAO,CACZ,uCAAuC,CACrC,eAAe,EACf,eAAe,EACf,WAAW,EACX,GAAG,EACH,SAAS,CACV,CACF,CAAA;KACF;IAAC,OAAO,CAAC,EAAE;QACV,OAAO,CAAC,KAAK,CAAC,qDAAqD,EAAE,CAAC,CAAC,CAAA;QACvE,OAAO,KAAK,CAAA;KACb;AACH,CAAC;AArBD,wFAqBC"}
@@ -0,0 +1,7 @@
1
+ import PluginManager from '@jbrowse/core/PluginManager';
2
+ import Plugin from '@jbrowse/core/Plugin';
3
+ export default class SvInspectorViewPlugin extends Plugin {
4
+ name: string;
5
+ install(pluginManager: PluginManager): void;
6
+ configure(pluginManager: PluginManager): void;
7
+ }
package/dist/index.js ADDED
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const Plugin_1 = __importDefault(require("@jbrowse/core/Plugin"));
7
+ const types_1 = require("@jbrowse/core/util/types");
8
+ // icons
9
+ const TableChart_1 = __importDefault(require("@mui/icons-material/TableChart"));
10
+ // locals
11
+ const SvInspectorView_1 = __importDefault(require("./SvInspectorView"));
12
+ const LaunchSvInspectorView_1 = __importDefault(require("./LaunchSvInspectorView"));
13
+ class SvInspectorViewPlugin extends Plugin_1.default {
14
+ constructor() {
15
+ super(...arguments);
16
+ this.name = 'SvInspectorViewPlugin';
17
+ }
18
+ install(pluginManager) {
19
+ (0, SvInspectorView_1.default)(pluginManager);
20
+ (0, LaunchSvInspectorView_1.default)(pluginManager);
21
+ }
22
+ configure(pluginManager) {
23
+ if ((0, types_1.isAbstractMenuManager)(pluginManager.rootModel)) {
24
+ pluginManager.rootModel.appendToSubMenu(['Add'], {
25
+ label: 'SV inspector',
26
+ icon: TableChart_1.default,
27
+ onClick: (session) => {
28
+ session.addView('SvInspectorView', {});
29
+ },
30
+ });
31
+ }
32
+ }
33
+ }
34
+ exports.default = SvInspectorViewPlugin;
35
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;AACA,kEAAyC;AACzC,oDAGiC;AAEjC,QAAQ;AACR,gFAA2D;AAE3D,SAAS;AACT,wEAAgD;AAChD,oFAA4D;AAE5D,MAAqB,qBAAsB,SAAQ,gBAAM;IAAzD;;QACE,SAAI,GAAG,uBAAuB,CAAA;IAkBhC,CAAC;IAhBC,OAAO,CAAC,aAA4B;QAClC,IAAA,yBAAgB,EAAC,aAAa,CAAC,CAAA;QAC/B,IAAA,+BAAsB,EAAC,aAAa,CAAC,CAAA;IACvC,CAAC;IAED,SAAS,CAAC,aAA4B;QACpC,IAAI,IAAA,6BAAqB,EAAC,aAAa,CAAC,SAAS,CAAC,EAAE;YAClD,aAAa,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC,KAAK,CAAC,EAAE;gBAC/C,KAAK,EAAE,cAAc;gBACrB,IAAI,EAAE,oBAAc;gBACpB,OAAO,EAAE,CAAC,OAA6B,EAAE,EAAE;oBACzC,OAAO,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAA;gBACxC,CAAC;aACF,CAAC,CAAA;SACH;IACH,CAAC;CACF;AAnBD,wCAmBC"}
@@ -0,0 +1,3 @@
1
+ import PluginManager from '@jbrowse/core/PluginManager';
2
+ declare const _default: (pluginManager: PluginManager) => void;
3
+ export default _default;
@@ -0,0 +1,25 @@
1
+ export default (pluginManager) => {
2
+ pluginManager.addToExtensionPoint('LaunchView-SvInspectorView',
3
+ // @ts-expect-error
4
+ async ({ session, assembly, uri, fileType, }) => {
5
+ var _a, _b;
6
+ // add view, make typescript happy with return type
7
+ const view = session.addView('SvInspectorView');
8
+ if (!view) {
9
+ throw new Error('Failed to initialize view');
10
+ }
11
+ const exts = uri.split('.');
12
+ let ext = (_a = exts === null || exts === void 0 ? void 0 : exts.pop()) === null || _a === void 0 ? void 0 : _a.toUpperCase();
13
+ if (ext === 'GZ') {
14
+ ext = (_b = exts === null || exts === void 0 ? void 0 : exts.pop()) === null || _b === void 0 ? void 0 : _b.toUpperCase();
15
+ }
16
+ view.spreadsheetView.importWizard.setFileType(fileType || ext || '');
17
+ view.spreadsheetView.importWizard.setSelectedAssemblyName(assembly);
18
+ view.spreadsheetView.importWizard.setFileSource({
19
+ uri,
20
+ locationType: 'UriLocation',
21
+ });
22
+ await view.spreadsheetView.importWizard.import(assembly);
23
+ });
24
+ };
25
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/LaunchSvInspectorView/index.ts"],"names":[],"mappings":"AAIA,eAAe,CAAC,aAA4B,EAAE,EAAE;IAC9C,aAAa,CAAC,mBAAmB,CAC/B,4BAA4B;IAC5B,mBAAmB;IACnB,KAAK,EAAE,EACL,OAAO,EACP,QAAQ,EACR,GAAG,EACH,QAAQ,GAMT,EAAE,EAAE;;QACH,mDAAmD;QACnD,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAyB,CAAA;QAEvE,IAAI,CAAC,IAAI,EAAE;YACT,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAA;SAC7C;QACD,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QAC3B,IAAI,GAAG,GAAG,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,GAAG,EAAE,0CAAE,WAAW,EAAE,CAAA;QACpC,IAAI,GAAG,KAAK,IAAI,EAAE;YAChB,GAAG,GAAG,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,GAAG,EAAE,0CAAE,WAAW,EAAE,CAAA;SACjC;QAED,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,WAAW,CAAC,QAAQ,IAAI,GAAG,IAAI,EAAE,CAAC,CAAA;QACpE,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAA;QACnE,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,aAAa,CAAC;YAC9C,GAAG;YACH,YAAY,EAAE,aAAa;SAC5B,CAAC,CAAA;QACF,MAAM,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;IAC1D,CAAC,CACF,CAAA;AACH,CAAC,CAAA"}
@@ -0,0 +1,6 @@
1
+ import React from 'react';
2
+ import { SvInspectorViewModel } from '../models/SvInspectorView';
3
+ declare const CircularViewOptions: ({ svInspector, }: {
4
+ svInspector: SvInspectorViewModel;
5
+ }) => React.JSX.Element;
6
+ export default CircularViewOptions;
@@ -0,0 +1,17 @@
1
+ import React from 'react';
2
+ import { observer } from 'mobx-react';
3
+ import { Grid, FormControlLabel, Checkbox } from '@mui/material';
4
+ import { makeStyles } from 'tss-react/mui';
5
+ const useStyles = makeStyles()(theme => ({
6
+ circularViewOptions: {
7
+ padding: theme.spacing(1),
8
+ },
9
+ }));
10
+ const CircularViewOptions = observer(function ({ svInspector, }) {
11
+ const { classes } = useStyles();
12
+ return (React.createElement(Grid, { container: true, className: classes.circularViewOptions, style: { height: svInspector.circularViewOptionsBarHeight } },
13
+ React.createElement(Grid, { item: true },
14
+ React.createElement(FormControlLabel, { control: React.createElement(Checkbox, { checked: svInspector.onlyDisplayRelevantRegionsInCircularView, onChange: e => svInspector.setOnlyDisplayRelevantRegionsInCircularView(e.target.checked) }), label: "show only regions with data" }))));
15
+ });
16
+ export default CircularViewOptions;
17
+ //# sourceMappingURL=CircularViewOptions.js.map