@jbrowse/plugin-breakpoint-split-view 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 (115) hide show
  1. package/LICENSE +201 -0
  2. package/dist/BreakpointAlignmentsFeatureDetail/BreakpointAlignmentsFeatureDetail.d.ts +5 -0
  3. package/dist/BreakpointAlignmentsFeatureDetail/BreakpointAlignmentsFeatureDetail.js +21 -0
  4. package/dist/BreakpointAlignmentsFeatureDetail/BreakpointAlignmentsFeatureDetail.js.map +1 -0
  5. package/dist/BreakpointAlignmentsFeatureDetail/index.d.ts +3 -0
  6. package/dist/BreakpointAlignmentsFeatureDetail/index.js +57 -0
  7. package/dist/BreakpointAlignmentsFeatureDetail/index.js.map +1 -0
  8. package/dist/BreakpointSplitView/BreakpointSplitView.d.ts +23 -0
  9. package/dist/BreakpointSplitView/BreakpointSplitView.js +92 -0
  10. package/dist/BreakpointSplitView/BreakpointSplitView.js.map +1 -0
  11. package/dist/BreakpointSplitView/components/AlignmentConnections.d.ts +9 -0
  12. package/dist/BreakpointSplitView/components/AlignmentConnections.js +133 -0
  13. package/dist/BreakpointSplitView/components/AlignmentConnections.js.map +1 -0
  14. package/dist/BreakpointSplitView/components/Breakends.d.ts +9 -0
  15. package/dist/BreakpointSplitView/components/Breakends.js +117 -0
  16. package/dist/BreakpointSplitView/components/Breakends.js.map +1 -0
  17. package/dist/BreakpointSplitView/components/BreakpointSplitView.d.ts +6 -0
  18. package/dist/BreakpointSplitView/components/BreakpointSplitView.js +89 -0
  19. package/dist/BreakpointSplitView/components/BreakpointSplitView.js.map +1 -0
  20. package/dist/BreakpointSplitView/components/ExportSvgDialog.d.ts +8 -0
  21. package/dist/BreakpointSplitView/components/ExportSvgDialog.js +84 -0
  22. package/dist/BreakpointSplitView/components/ExportSvgDialog.js.map +1 -0
  23. package/dist/BreakpointSplitView/components/Overlay.d.ts +9 -0
  24. package/dist/BreakpointSplitView/components/Overlay.js +23 -0
  25. package/dist/BreakpointSplitView/components/Overlay.js.map +1 -0
  26. package/dist/BreakpointSplitView/components/Translocations.d.ts +9 -0
  27. package/dist/BreakpointSplitView/components/Translocations.js +113 -0
  28. package/dist/BreakpointSplitView/components/Translocations.js.map +1 -0
  29. package/dist/BreakpointSplitView/components/util.d.ts +7 -0
  30. package/dist/BreakpointSplitView/components/util.js +116 -0
  31. package/dist/BreakpointSplitView/components/util.js.map +1 -0
  32. package/dist/BreakpointSplitView/index.d.ts +3 -0
  33. package/dist/BreakpointSplitView/index.js +43 -0
  34. package/dist/BreakpointSplitView/index.js.map +1 -0
  35. package/dist/BreakpointSplitView/model.d.ts +299 -0
  36. package/dist/BreakpointSplitView/model.js +245 -0
  37. package/dist/BreakpointSplitView/model.js.map +1 -0
  38. package/dist/BreakpointSplitView/svgcomponents/SVGBackground.d.ts +6 -0
  39. package/dist/BreakpointSplitView/svgcomponents/SVGBackground.js +13 -0
  40. package/dist/BreakpointSplitView/svgcomponents/SVGBackground.js.map +1 -0
  41. package/dist/BreakpointSplitView/svgcomponents/SVGBreakpointSplitView.d.ts +4 -0
  42. package/dist/BreakpointSplitView/svgcomponents/SVGBreakpointSplitView.js +83 -0
  43. package/dist/BreakpointSplitView/svgcomponents/SVGBreakpointSplitView.js.map +1 -0
  44. package/dist/BreakpointSplitView/util.d.ts +18 -0
  45. package/dist/BreakpointSplitView/util.js +56 -0
  46. package/dist/BreakpointSplitView/util.js.map +1 -0
  47. package/dist/index.d.ts +7 -0
  48. package/dist/index.js +21 -0
  49. package/dist/index.js.map +1 -0
  50. package/esm/BreakpointAlignmentsFeatureDetail/BreakpointAlignmentsFeatureDetail.d.ts +5 -0
  51. package/esm/BreakpointAlignmentsFeatureDetail/BreakpointAlignmentsFeatureDetail.js +16 -0
  52. package/esm/BreakpointAlignmentsFeatureDetail/BreakpointAlignmentsFeatureDetail.js.map +1 -0
  53. package/esm/BreakpointAlignmentsFeatureDetail/index.d.ts +3 -0
  54. package/esm/BreakpointAlignmentsFeatureDetail/index.js +32 -0
  55. package/esm/BreakpointAlignmentsFeatureDetail/index.js.map +1 -0
  56. package/esm/BreakpointSplitView/BreakpointSplitView.d.ts +23 -0
  57. package/esm/BreakpointSplitView/BreakpointSplitView.js +86 -0
  58. package/esm/BreakpointSplitView/BreakpointSplitView.js.map +1 -0
  59. package/esm/BreakpointSplitView/components/AlignmentConnections.d.ts +9 -0
  60. package/esm/BreakpointSplitView/components/AlignmentConnections.js +108 -0
  61. package/esm/BreakpointSplitView/components/AlignmentConnections.js.map +1 -0
  62. package/esm/BreakpointSplitView/components/Breakends.d.ts +9 -0
  63. package/esm/BreakpointSplitView/components/Breakends.js +92 -0
  64. package/esm/BreakpointSplitView/components/Breakends.js.map +1 -0
  65. package/esm/BreakpointSplitView/components/BreakpointSplitView.d.ts +6 -0
  66. package/esm/BreakpointSplitView/components/BreakpointSplitView.js +61 -0
  67. package/esm/BreakpointSplitView/components/BreakpointSplitView.js.map +1 -0
  68. package/esm/BreakpointSplitView/components/ExportSvgDialog.d.ts +8 -0
  69. package/esm/BreakpointSplitView/components/ExportSvgDialog.js +58 -0
  70. package/esm/BreakpointSplitView/components/ExportSvgDialog.js.map +1 -0
  71. package/esm/BreakpointSplitView/components/Overlay.d.ts +9 -0
  72. package/esm/BreakpointSplitView/components/Overlay.js +18 -0
  73. package/esm/BreakpointSplitView/components/Overlay.js.map +1 -0
  74. package/esm/BreakpointSplitView/components/Translocations.d.ts +9 -0
  75. package/esm/BreakpointSplitView/components/Translocations.js +88 -0
  76. package/esm/BreakpointSplitView/components/Translocations.js.map +1 -0
  77. package/esm/BreakpointSplitView/components/util.d.ts +7 -0
  78. package/esm/BreakpointSplitView/components/util.js +107 -0
  79. package/esm/BreakpointSplitView/components/util.js.map +1 -0
  80. package/esm/BreakpointSplitView/index.d.ts +3 -0
  81. package/esm/BreakpointSplitView/index.js +15 -0
  82. package/esm/BreakpointSplitView/index.js.map +1 -0
  83. package/esm/BreakpointSplitView/model.d.ts +299 -0
  84. package/esm/BreakpointSplitView/model.js +216 -0
  85. package/esm/BreakpointSplitView/model.js.map +1 -0
  86. package/esm/BreakpointSplitView/svgcomponents/SVGBackground.d.ts +6 -0
  87. package/esm/BreakpointSplitView/svgcomponents/SVGBackground.js +7 -0
  88. package/esm/BreakpointSplitView/svgcomponents/SVGBackground.js.map +1 -0
  89. package/esm/BreakpointSplitView/svgcomponents/SVGBreakpointSplitView.d.ts +4 -0
  90. package/esm/BreakpointSplitView/svgcomponents/SVGBreakpointSplitView.js +76 -0
  91. package/esm/BreakpointSplitView/svgcomponents/SVGBreakpointSplitView.js.map +1 -0
  92. package/esm/BreakpointSplitView/util.d.ts +18 -0
  93. package/esm/BreakpointSplitView/util.js +49 -0
  94. package/esm/BreakpointSplitView/util.js.map +1 -0
  95. package/esm/index.d.ts +7 -0
  96. package/esm/index.js +15 -0
  97. package/esm/index.js.map +1 -0
  98. package/package.json +63 -0
  99. package/src/BreakpointAlignmentsFeatureDetail/BreakpointAlignmentsFeatureDetail.tsx +24 -0
  100. package/src/BreakpointAlignmentsFeatureDetail/index.ts +35 -0
  101. package/src/BreakpointSplitView/BreakpointSplitView.ts +100 -0
  102. package/src/BreakpointSplitView/components/AlignmentConnections.tsx +166 -0
  103. package/src/BreakpointSplitView/components/Breakends.tsx +141 -0
  104. package/src/BreakpointSplitView/components/BreakpointSplitView.tsx +95 -0
  105. package/src/BreakpointSplitView/components/ExportSvgDialog.tsx +149 -0
  106. package/src/BreakpointSplitView/components/Overlay.tsx +29 -0
  107. package/src/BreakpointSplitView/components/Translocations.tsx +147 -0
  108. package/src/BreakpointSplitView/components/util.ts +127 -0
  109. package/src/BreakpointSplitView/index.ts +17 -0
  110. package/src/BreakpointSplitView/model.ts +333 -0
  111. package/src/BreakpointSplitView/svgcomponents/SVGBackground.tsx +21 -0
  112. package/src/BreakpointSplitView/svgcomponents/SVGBreakpointSplitView.tsx +179 -0
  113. package/src/BreakpointSplitView/util.ts +89 -0
  114. package/src/index.test.ts +3 -0
  115. package/src/index.ts +15 -0
@@ -0,0 +1,92 @@
1
+ import React, { useState, useMemo } from 'react';
2
+ import { getSession } from '@jbrowse/core/util';
3
+ import { observer } from 'mobx-react';
4
+ import { getSnapshot } from 'mobx-state-tree';
5
+ // locals
6
+ import { findMatchingAlt, getMatchedBreakendFeatures } from './util';
7
+ import { yPos, getPxFromCoordinate, useNextFrame } from '../util';
8
+ const [LEFT] = [0, 1, 2, 3];
9
+ const Breakends = observer(function ({ model, trackId, parentRef: ref, getTrackYPosOverride, }) {
10
+ const { views } = model;
11
+ const session = getSession(model);
12
+ const { assemblyManager } = session;
13
+ const totalFeatures = model.getTrackFeatures(trackId);
14
+ const layoutMatches = useMemo(() => model.getMatchedFeaturesInLayout(trackId, getMatchedBreakendFeatures(totalFeatures)), [totalFeatures, trackId, model]);
15
+ const [mouseoverElt, setMouseoverElt] = useState();
16
+ const snap = getSnapshot(model);
17
+ useNextFrame(snap);
18
+ const assembly = assemblyManager.get(views[0].assemblyNames[0]);
19
+ if (!assembly) {
20
+ return null;
21
+ }
22
+ let yoff = 0;
23
+ if (ref.current) {
24
+ const rect = ref.current.getBoundingClientRect();
25
+ yoff = rect.top;
26
+ }
27
+ return (React.createElement("g", { stroke: "green", strokeWidth: 5, fill: "none", "data-testid": layoutMatches.length ? `${trackId}-loaded` : trackId }, layoutMatches.map(chunk => {
28
+ const ret = [];
29
+ // we follow a path in the list of chunks, not from top to bottom, just
30
+ // in series following x1,y1 -> x2,y2
31
+ for (let i = 0; i < chunk.length - 1; i += 1) {
32
+ const { layout: c1, feature: f1, level: level1 } = chunk[i];
33
+ const { layout: c2, feature: f2, level: level2 } = chunk[i + 1];
34
+ const id = f1.id();
35
+ const relevantAlt = findMatchingAlt(f1, f2);
36
+ if (!c1 || !c2) {
37
+ return null;
38
+ }
39
+ const f1origref = f1.get('refName');
40
+ const f2origref = f2.get('refName');
41
+ const f1ref = assembly.getCanonicalRefName(f1origref);
42
+ const f2ref = assembly.getCanonicalRefName(f2origref);
43
+ if (!f1ref || !f2ref) {
44
+ throw new Error(`unable to find ref for ${f1ref || f2ref}`);
45
+ }
46
+ const x1 = getPxFromCoordinate(views[level1], f1ref, c1[LEFT]);
47
+ const x2 = getPxFromCoordinate(views[level2], f2ref, c2[LEFT]);
48
+ const reversed1 = views[level1].pxToBp(x1).reversed;
49
+ const reversed2 = views[level2].pxToBp(x2).reversed;
50
+ const tracks = views.map(v => v.getTrack(trackId));
51
+ const y1 = yPos(trackId, level1, views, tracks, c1, getTrackYPosOverride) -
52
+ yoff;
53
+ const y2 = yPos(trackId, level2, views, tracks, c2, getTrackYPosOverride) -
54
+ yoff;
55
+ if (!relevantAlt) {
56
+ console.warn('the relevant ALT allele was not found, cannot render');
57
+ }
58
+ else {
59
+ const path = [
60
+ 'M',
61
+ x1 -
62
+ 20 *
63
+ (relevantAlt.Join === 'left' ? -1 : 1) *
64
+ (reversed1 ? -1 : 1),
65
+ y1,
66
+ 'L',
67
+ x1,
68
+ y1,
69
+ 'L',
70
+ x2,
71
+ y2,
72
+ 'L',
73
+ x2 -
74
+ 20 *
75
+ (relevantAlt.MateDirection === 'left' ? 1 : -1) *
76
+ (reversed2 ? -1 : 1),
77
+ y2,
78
+ ].join(' ');
79
+ ret.push(React.createElement("path", { d: path, key: JSON.stringify(path), strokeWidth: id === mouseoverElt ? 10 : 5, onClick: () => {
80
+ var _a, _b, _c;
81
+ const featureWidget = (_a = session.addWidget) === null || _a === void 0 ? void 0 : _a.call(session, 'VariantFeatureWidget', 'variantFeature', {
82
+ featureData: (_b = totalFeatures.get(id)) === null || _b === void 0 ? void 0 : _b.toJSON(),
83
+ });
84
+ (_c = session.showWidget) === null || _c === void 0 ? void 0 : _c.call(session, featureWidget);
85
+ }, onMouseOver: () => setMouseoverElt(id), onMouseOut: () => setMouseoverElt(undefined) }));
86
+ }
87
+ }
88
+ return ret;
89
+ })));
90
+ });
91
+ export default Breakends;
92
+ //# sourceMappingURL=Breakends.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Breakends.js","sourceRoot":"","sources":["../../../src/BreakpointSplitView/components/Breakends.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import React from 'react';
2
+ import { BreakpointViewModel } from '../model';
3
+ declare const BreakpointSplitView: ({ model, }: {
4
+ model: BreakpointViewModel;
5
+ }) => React.JSX.Element;
6
+ export default BreakpointSplitView;
@@ -0,0 +1,61 @@
1
+ import React, { useRef } from 'react';
2
+ import { observer } from 'mobx-react';
3
+ import { getEnv } from 'mobx-state-tree';
4
+ import { makeStyles } from 'tss-react/mui';
5
+ import Overlay from './Overlay';
6
+ const useStyles = makeStyles()(theme => ({
7
+ viewDivider: {
8
+ background: theme.palette.secondary.main,
9
+ height: 3,
10
+ },
11
+ container: {
12
+ display: 'grid',
13
+ },
14
+ overlay: {
15
+ display: 'flex',
16
+ width: '100%',
17
+ gridArea: '1/1',
18
+ '& path': {
19
+ cursor: 'crosshair',
20
+ fill: 'none',
21
+ },
22
+ },
23
+ content: {
24
+ gridArea: '1/1',
25
+ },
26
+ }));
27
+ const BreakpointSplitView = observer(function ({ model, }) {
28
+ const { classes } = useStyles();
29
+ const { views } = model;
30
+ const { pluginManager } = getEnv(model);
31
+ const ref = useRef(null);
32
+ return (React.createElement("div", null,
33
+ React.createElement("div", { className: classes.container },
34
+ React.createElement("div", { className: classes.content },
35
+ React.createElement("div", { style: { position: 'relative' } }, views.map((view, idx) => {
36
+ const { ReactComponent } = pluginManager.getViewType(view.type);
37
+ const viewComponent = (React.createElement(ReactComponent, { key: view.id, model: view }));
38
+ if (idx === views.length - 1) {
39
+ return viewComponent;
40
+ }
41
+ return [
42
+ viewComponent,
43
+ React.createElement("div", { key: `${view.id}-divider`, className: classes.viewDivider }),
44
+ ];
45
+ }))),
46
+ React.createElement("div", { className: classes.overlay },
47
+ React.createElement("svg", { ref: ref, style: {
48
+ width: '100%',
49
+ zIndex: 10,
50
+ pointerEvents: model.interactToggled ? undefined : 'none',
51
+ } }, model.matchedTracks.map(track => (
52
+ // note: we must pass ref down, because the child component
53
+ // needs to getBoundingClientRect on the this components SVG,
54
+ // and we cannot rely on using getBoundingClientRect in this
55
+ // component to make sure this works because if it gets
56
+ // shifted around by another element, this will not re-render
57
+ // necessarily
58
+ React.createElement(Overlay, { parentRef: ref, key: track.configuration.trackId, model: model, trackId: track.configuration.trackId }))))))));
59
+ });
60
+ export default BreakpointSplitView;
61
+ //# sourceMappingURL=BreakpointSplitView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BreakpointSplitView.js","sourceRoot":"","sources":["../../../src/BreakpointSplitView/components/BreakpointSplitView.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+ import { ExportSvgOptions } from '../model';
3
+ export default function ExportSvgDlg({ model, handleClose, }: {
4
+ model: {
5
+ exportSvg(opts: ExportSvgOptions): Promise<void>;
6
+ };
7
+ handleClose: () => void;
8
+ }): React.JSX.Element;
@@ -0,0 +1,58 @@
1
+ import React, { useState } from 'react';
2
+ import { Button, Checkbox, CircularProgress, DialogActions, DialogContent, FormControlLabel, MenuItem, TextField, Typography, } from '@mui/material';
3
+ import { Dialog, ErrorMessage } from '@jbrowse/core/ui';
4
+ import { getSession, useLocalStorage } from '@jbrowse/core/util';
5
+ function LoadingMessage() {
6
+ return (React.createElement("div", null,
7
+ React.createElement(CircularProgress, { size: 20, style: { marginRight: 20 } }),
8
+ React.createElement(Typography, { display: "inline" }, "Creating SVG")));
9
+ }
10
+ function useSvgLocal(key, val) {
11
+ return useLocalStorage('svg-' + key, val);
12
+ }
13
+ export default function ExportSvgDlg({ model, handleClose, }) {
14
+ const session = getSession(model);
15
+ const offscreenCanvas = typeof OffscreenCanvas !== 'undefined';
16
+ const [rasterizeLayers, setRasterizeLayers] = useState(offscreenCanvas);
17
+ const [loading, setLoading] = useState(false);
18
+ const [error, setError] = useState();
19
+ const [filename, setFilename] = useSvgLocal('file', 'jbrowse.svg');
20
+ const [trackLabels, setTrackLabels] = useSvgLocal('tracklabels', 'offset');
21
+ const [themeName, setThemeName] = useSvgLocal('theme', session.themeName || 'default');
22
+ return (React.createElement(Dialog, { open: true, onClose: handleClose, title: "Export SVG" },
23
+ React.createElement(DialogContent, null,
24
+ error ? (React.createElement(ErrorMessage, { error: error })) : loading ? (React.createElement(LoadingMessage, null)) : null,
25
+ React.createElement(TextField, { helperText: "filename", value: filename, onChange: event => setFilename(event.target.value) }),
26
+ React.createElement("br", null),
27
+ React.createElement(TextField, { select: true, label: "Track label positioning", variant: "outlined", style: { width: 150 }, value: trackLabels, onChange: event => setTrackLabels(event.target.value) },
28
+ React.createElement(MenuItem, { value: "offset" }, "Offset"),
29
+ React.createElement(MenuItem, { value: "overlay" }, "Overlay"),
30
+ React.createElement(MenuItem, { value: "left" }, "Left"),
31
+ React.createElement(MenuItem, { value: "none" }, "None")),
32
+ React.createElement("br", null),
33
+ session.allThemes ? (React.createElement(TextField, { select: true, label: "Theme", variant: "outlined", value: themeName, onChange: event => setThemeName(event.target.value) }, Object.entries(session.allThemes()).map(([key, val]) => (React.createElement(MenuItem, { key: key, value: key },
34
+ // @ts-expect-error
35
+ val.name || '(Unknown name)'))))) : null,
36
+ offscreenCanvas ? (React.createElement(FormControlLabel, { control: React.createElement(Checkbox, { checked: rasterizeLayers, onChange: () => setRasterizeLayers(val => !val) }), label: "Rasterize canvas based tracks? File may be much larger if this is turned off" })) : (React.createElement(Typography, null, "Note: rasterizing layers not yet supported in this browser, so SVG size may be large"))),
37
+ React.createElement(DialogActions, null,
38
+ React.createElement(Button, { variant: "contained", color: "secondary", onClick: () => handleClose() }, "Cancel"),
39
+ React.createElement(Button, { variant: "contained", color: "primary", type: "submit", onClick: async () => {
40
+ setLoading(true);
41
+ setError(undefined);
42
+ try {
43
+ await model.exportSvg({
44
+ rasterizeLayers,
45
+ filename,
46
+ trackLabels,
47
+ themeName,
48
+ });
49
+ handleClose();
50
+ }
51
+ catch (e) {
52
+ console.error(e);
53
+ setError(e);
54
+ setLoading(false);
55
+ }
56
+ } }, "Submit"))));
57
+ }
58
+ //# sourceMappingURL=ExportSvgDialog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExportSvgDialog.js","sourceRoot":"","sources":["../../../src/BreakpointSplitView/components/ExportSvgDialog.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import React from 'react';
2
+ import { BreakpointViewModel } from '../model';
3
+ declare const _default: (props: {
4
+ parentRef: React.RefObject<SVGSVGElement>;
5
+ model: BreakpointViewModel;
6
+ trackId: string;
7
+ getTrackYPosOverride?: ((trackId: string, level: number) => number) | undefined;
8
+ }) => React.JSX.Element | null;
9
+ export default _default;
@@ -0,0 +1,18 @@
1
+ import React from 'react';
2
+ import { observer } from 'mobx-react';
3
+ import AlignmentConnections from './AlignmentConnections';
4
+ import Breakends from './Breakends';
5
+ import Translocations from './Translocations';
6
+ export default observer(function (props) {
7
+ var _a, _b;
8
+ const { model, trackId } = props;
9
+ const tracks = model.getMatchedTracks(trackId);
10
+ if (((_a = tracks[0]) === null || _a === void 0 ? void 0 : _a.type) === 'AlignmentsTrack') {
11
+ return React.createElement(AlignmentConnections, { ...props });
12
+ }
13
+ if (((_b = tracks[0]) === null || _b === void 0 ? void 0 : _b.type) === 'VariantTrack') {
14
+ return model.hasTranslocations(trackId) ? (React.createElement(Translocations, { ...props })) : (React.createElement(Breakends, { ...props }));
15
+ }
16
+ return null;
17
+ });
18
+ //# sourceMappingURL=Overlay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Overlay.js","sourceRoot":"","sources":["../../../src/BreakpointSplitView/components/Overlay.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAIrC,OAAO,oBAAoB,MAAM,wBAAwB,CAAA;AACzD,OAAO,SAAS,MAAM,aAAa,CAAA;AACnC,OAAO,cAAc,MAAM,kBAAkB,CAAA;AAE7C,eAAe,QAAQ,CAAC,UAAU,KAKjC;;IACC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,KAAK,CAAA;IAChC,MAAM,MAAM,GAAG,KAAK,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAA;IAC9C,IAAI,CAAA,MAAA,MAAM,CAAC,CAAC,CAAC,0CAAE,IAAI,MAAK,iBAAiB,EAAE;QACzC,OAAO,oBAAC,oBAAoB,OAAK,KAAK,GAAI,CAAA;KAC3C;IACD,IAAI,CAAA,MAAA,MAAM,CAAC,CAAC,CAAC,0CAAE,IAAI,MAAK,cAAc,EAAE;QACtC,OAAO,KAAK,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CACxC,oBAAC,cAAc,OAAK,KAAK,GAAI,CAC9B,CAAC,CAAC,CAAC,CACF,oBAAC,SAAS,OAAK,KAAK,GAAI,CACzB,CAAA;KACF;IACD,OAAO,IAAI,CAAA;AACb,CAAC,CAAC,CAAA"}
@@ -0,0 +1,9 @@
1
+ import React from 'react';
2
+ import { BreakpointViewModel } from '../model';
3
+ declare const Translocations: ({ model, trackId, parentRef: ref, getTrackYPosOverride, }: {
4
+ model: BreakpointViewModel;
5
+ trackId: string;
6
+ parentRef: React.RefObject<SVGSVGElement>;
7
+ getTrackYPosOverride?: ((trackId: string, level: number) => number) | undefined;
8
+ }) => React.JSX.Element | null;
9
+ export default Translocations;
@@ -0,0 +1,88 @@
1
+ import React, { useState, useMemo } from 'react';
2
+ import { getSession } from '@jbrowse/core/util';
3
+ import { observer } from 'mobx-react';
4
+ import { getSnapshot } from 'mobx-state-tree';
5
+ // locals
6
+ import { getMatchedTranslocationFeatures } from './util';
7
+ import { yPos, getPxFromCoordinate, useNextFrame } from '../util';
8
+ const [LEFT] = [0, 1, 2, 3];
9
+ const Translocations = observer(function ({ model, trackId, parentRef: ref, getTrackYPosOverride, }) {
10
+ const { views } = model;
11
+ const session = getSession(model);
12
+ const { assemblyManager } = session;
13
+ const totalFeatures = model.getTrackFeatures(trackId);
14
+ const layoutMatches = useMemo(() => model.getMatchedFeaturesInLayout(trackId, getMatchedTranslocationFeatures(totalFeatures)), [totalFeatures, trackId, model]);
15
+ const [mouseoverElt, setMouseoverElt] = useState();
16
+ const snap = getSnapshot(model);
17
+ useNextFrame(snap);
18
+ const assembly = assemblyManager.get(views[0].assemblyNames[0]);
19
+ if (!assembly) {
20
+ return null;
21
+ }
22
+ let yOffset = 0;
23
+ if (ref.current) {
24
+ const rect = ref.current.getBoundingClientRect();
25
+ yOffset = rect.top;
26
+ }
27
+ // we hardcode the TRA to go to the "other view" and if there is none, we
28
+ // just return null here note: would need to do processing of the INFO
29
+ // CHR2/END and see which view could contain those coordinates to really do
30
+ // it properly
31
+ if (views.length < 2) {
32
+ return null;
33
+ }
34
+ return (React.createElement("g", { fill: "none", stroke: "green", strokeWidth: 5, "data-testid": layoutMatches.length ? `${trackId}-loaded` : trackId }, layoutMatches.map(chunk => {
35
+ // we follow a path in the list of chunks, not from top to bottom,
36
+ // just in series following x1,y1 -> x2,y2
37
+ const ret = [];
38
+ for (let i = 0; i < chunk.length; i += 1) {
39
+ const { layout: c1, feature: f1, level: level1 } = chunk[i];
40
+ const level2 = level1 === 0 ? 1 : 0;
41
+ const id = f1.id();
42
+ if (!c1) {
43
+ return null;
44
+ }
45
+ const info = f1.get('INFO');
46
+ const chr2 = info.CHR2[0];
47
+ const end2 = info.END[0];
48
+ const [myDirection, mateDirection] = info.STRANDS[0].split('');
49
+ const r = getPxFromCoordinate(views[level2], chr2, end2);
50
+ if (r) {
51
+ const c2 = [r, 0, r + 1, 0];
52
+ const x1 = getPxFromCoordinate(views[level1], f1.get('refName'), c1[LEFT]);
53
+ const x2 = r;
54
+ const reversed1 = views[level1].pxToBp(x1).reversed;
55
+ const reversed2 = views[level2].pxToBp(x2).reversed;
56
+ const tracks = views.map(v => v.getTrack(trackId));
57
+ const y1 = yPos(trackId, level1, views, tracks, c1, getTrackYPosOverride) -
58
+ yOffset;
59
+ const y2 = yPos(trackId, level2, views, tracks, c2, getTrackYPosOverride) -
60
+ yOffset;
61
+ const path = [
62
+ 'M',
63
+ x1 - 20 * (myDirection === '+' ? 1 : -1) * (reversed1 ? -1 : 1),
64
+ y1,
65
+ 'L',
66
+ x1,
67
+ y1,
68
+ 'L',
69
+ x2,
70
+ y2,
71
+ 'L',
72
+ x2 - 20 * (mateDirection === '+' ? 1 : -1) * (reversed2 ? -1 : 1),
73
+ y2,
74
+ ].join(' ');
75
+ ret.push(React.createElement("path", { d: path, key: JSON.stringify(path), strokeWidth: id === mouseoverElt ? 10 : 5, onClick: () => {
76
+ var _a, _b;
77
+ const featureWidget = (_a = session.addWidget) === null || _a === void 0 ? void 0 : _a.call(session, 'VariantFeatureWidget', 'variantFeature', {
78
+ featureData: (totalFeatures.get(id) || { toJSON: () => { } }).toJSON(),
79
+ });
80
+ (_b = session.showWidget) === null || _b === void 0 ? void 0 : _b.call(session, featureWidget);
81
+ }, onMouseOver: () => setMouseoverElt(id), onMouseOut: () => setMouseoverElt(undefined) }));
82
+ }
83
+ }
84
+ return ret;
85
+ })));
86
+ });
87
+ export default Translocations;
88
+ //# sourceMappingURL=Translocations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Translocations.js","sourceRoot":"","sources":["../../../src/BreakpointSplitView/components/Translocations.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { Feature } from '@jbrowse/core/util';
2
+ export declare function getBadlyPairedAlignments(features: Map<string, Feature>): Feature[][];
3
+ export declare function getMatchedAlignmentFeatures(features: Map<string, Feature>): Feature[][];
4
+ export declare function hasPairedReads(features: Map<string, Feature>): boolean;
5
+ export declare function findMatchingAlt(feat1: Feature, feat2: Feature): import("@gmod/vcf").Breakend | undefined;
6
+ export declare function getMatchedBreakendFeatures(feats: Map<string, Feature>): Feature[][];
7
+ export declare function getMatchedTranslocationFeatures(feats: Map<string, Feature>): Feature[][];
@@ -0,0 +1,107 @@
1
+ import { notEmpty } from '@jbrowse/core/util';
2
+ import { parseBreakend } from '@gmod/vcf';
3
+ // this finds candidate alignment features, aimed at plotting split reads from
4
+ // BAM/CRAM files
5
+ export function getBadlyPairedAlignments(features) {
6
+ const candidates = new Map();
7
+ const alreadySeen = new Set();
8
+ // this finds candidate features that share the same name
9
+ for (const feature of features.values()) {
10
+ const flags = feature.get('flags');
11
+ const id = feature.id();
12
+ const unmapped = flags & 4;
13
+ const correctlyPaired = flags & 2;
14
+ if (!alreadySeen.has(id) && !correctlyPaired && !unmapped) {
15
+ const n = feature.get('name');
16
+ let val = candidates.get(n);
17
+ if (!val) {
18
+ val = [];
19
+ candidates.set(n, val);
20
+ }
21
+ val.push(feature);
22
+ }
23
+ alreadySeen.add(feature.id());
24
+ }
25
+ return [...candidates.values()].filter(v => v.length > 1);
26
+ }
27
+ function getTag(f, tag) {
28
+ const tags = f.get('tags');
29
+ return tags ? tags[tag] : f.get(tag);
30
+ }
31
+ // this finds candidate alignment features, aimed at plotting split reads from
32
+ // BAM/CRAM files
33
+ export function getMatchedAlignmentFeatures(features) {
34
+ const candidates = new Map();
35
+ const alreadySeen = new Set();
36
+ // this finds candidate features that share the same name
37
+ for (const feature of features.values()) {
38
+ const id = feature.id();
39
+ const unmapped = feature.get('flags') & 4;
40
+ const hasSA = !!getTag(feature, 'SA');
41
+ if (!alreadySeen.has(id) && !unmapped && hasSA) {
42
+ const n = feature.get('name');
43
+ let val = candidates.get(n);
44
+ if (!val) {
45
+ val = [];
46
+ candidates.set(n, val);
47
+ }
48
+ val.push(feature);
49
+ }
50
+ alreadySeen.add(feature.id());
51
+ }
52
+ return [...candidates.values()].filter(v => v.length > 1);
53
+ }
54
+ export function hasPairedReads(features) {
55
+ for (const f of features.values()) {
56
+ if (f.get('flags') & 1) {
57
+ return true;
58
+ }
59
+ }
60
+ return false;
61
+ }
62
+ export function findMatchingAlt(feat1, feat2) {
63
+ const alts = feat1.get('ALT');
64
+ if (alts) {
65
+ return new Map(alts === null || alts === void 0 ? void 0 : alts.map(alt => parseBreakend(alt)).filter(notEmpty).map(bnd => [bnd.MatePosition, bnd])).get(`${feat2.get('refName')}:${feat2.get('start') + 1}`);
66
+ }
67
+ return undefined;
68
+ }
69
+ // Returns paired BND features across multiple views by inspecting the ALT
70
+ // field to get exact coordinate matches
71
+ export function getMatchedBreakendFeatures(feats) {
72
+ const candidates = new Map();
73
+ const alreadySeen = new Set();
74
+ for (const f of feats.values()) {
75
+ if (!alreadySeen.has(f.id()) && f.get('type') === 'breakend') {
76
+ const alts = f.get('ALT');
77
+ alts === null || alts === void 0 ? void 0 : alts.forEach(a => {
78
+ const cur = `${f.get('refName')}:${f.get('start') + 1}`;
79
+ const bnd = parseBreakend(a);
80
+ if (bnd) {
81
+ const val = candidates.get(cur);
82
+ if (!val) {
83
+ candidates.set(bnd.MatePosition || 'none', [f]);
84
+ }
85
+ else {
86
+ val.push(f);
87
+ }
88
+ }
89
+ });
90
+ }
91
+ alreadySeen.add(f.id());
92
+ }
93
+ return [...candidates.values()].filter(v => v.length > 1);
94
+ }
95
+ // Getting "matched" TRA means just return all TRA
96
+ export function getMatchedTranslocationFeatures(feats) {
97
+ const ret = [];
98
+ const alreadySeen = new Set();
99
+ for (const f of feats.values()) {
100
+ if (!alreadySeen.has(f.id()) && f.get('ALT')[0] === '<TRA>') {
101
+ ret.push([f]);
102
+ }
103
+ alreadySeen.add(f.id());
104
+ }
105
+ return ret;
106
+ }
107
+ //# sourceMappingURL=util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../../../src/BreakpointSplitView/components/util.ts"],"names":[],"mappings":"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"}
@@ -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,15 @@
1
+ import { lazy } from 'react';
2
+ // locals
3
+ import BreakpointSplitView from './BreakpointSplitView';
4
+ import stateModelFactory from './model';
5
+ export default (pluginManager) => {
6
+ pluginManager.addViewType(() => {
7
+ return new BreakpointSplitView({
8
+ name: 'BreakpointSplitView',
9
+ displayName: 'Breakpoint split view',
10
+ stateModel: stateModelFactory(pluginManager),
11
+ ReactComponent: lazy(() => import('./components/BreakpointSplitView')),
12
+ });
13
+ });
14
+ };
15
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/BreakpointSplitView/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,OAAO,CAAA;AAG5B,SAAS;AACT,OAAO,mBAAmB,MAAM,uBAAuB,CAAA;AACvD,OAAO,iBAAiB,MAAM,SAAS,CAAA;AAEvC,eAAe,CAAC,aAA4B,EAAE,EAAE;IAC9C,aAAa,CAAC,WAAW,CAAC,GAAG,EAAE;QAC7B,OAAO,IAAI,mBAAmB,CAAC;YAC7B,IAAI,EAAE,qBAAqB;YAC3B,WAAW,EAAE,uBAAuB;YACpC,UAAU,EAAE,iBAAiB,CAAC,aAAa,CAAC;YAC5C,cAAc,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,kCAAkC,CAAC,CAAC;SACvE,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA"}