@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,117 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ const react_1 = __importStar(require("react"));
27
+ const util_1 = require("@jbrowse/core/util");
28
+ const mobx_react_1 = require("mobx-react");
29
+ const mobx_state_tree_1 = require("mobx-state-tree");
30
+ // locals
31
+ const util_2 = require("./util");
32
+ const util_3 = require("../util");
33
+ const [LEFT] = [0, 1, 2, 3];
34
+ const Breakends = (0, mobx_react_1.observer)(function ({ model, trackId, parentRef: ref, getTrackYPosOverride, }) {
35
+ const { views } = model;
36
+ const session = (0, util_1.getSession)(model);
37
+ const { assemblyManager } = session;
38
+ const totalFeatures = model.getTrackFeatures(trackId);
39
+ const layoutMatches = (0, react_1.useMemo)(() => model.getMatchedFeaturesInLayout(trackId, (0, util_2.getMatchedBreakendFeatures)(totalFeatures)), [totalFeatures, trackId, model]);
40
+ const [mouseoverElt, setMouseoverElt] = (0, react_1.useState)();
41
+ const snap = (0, mobx_state_tree_1.getSnapshot)(model);
42
+ (0, util_3.useNextFrame)(snap);
43
+ const assembly = assemblyManager.get(views[0].assemblyNames[0]);
44
+ if (!assembly) {
45
+ return null;
46
+ }
47
+ let yoff = 0;
48
+ if (ref.current) {
49
+ const rect = ref.current.getBoundingClientRect();
50
+ yoff = rect.top;
51
+ }
52
+ return (react_1.default.createElement("g", { stroke: "green", strokeWidth: 5, fill: "none", "data-testid": layoutMatches.length ? `${trackId}-loaded` : trackId }, layoutMatches.map(chunk => {
53
+ const ret = [];
54
+ // we follow a path in the list of chunks, not from top to bottom, just
55
+ // in series following x1,y1 -> x2,y2
56
+ for (let i = 0; i < chunk.length - 1; i += 1) {
57
+ const { layout: c1, feature: f1, level: level1 } = chunk[i];
58
+ const { layout: c2, feature: f2, level: level2 } = chunk[i + 1];
59
+ const id = f1.id();
60
+ const relevantAlt = (0, util_2.findMatchingAlt)(f1, f2);
61
+ if (!c1 || !c2) {
62
+ return null;
63
+ }
64
+ const f1origref = f1.get('refName');
65
+ const f2origref = f2.get('refName');
66
+ const f1ref = assembly.getCanonicalRefName(f1origref);
67
+ const f2ref = assembly.getCanonicalRefName(f2origref);
68
+ if (!f1ref || !f2ref) {
69
+ throw new Error(`unable to find ref for ${f1ref || f2ref}`);
70
+ }
71
+ const x1 = (0, util_3.getPxFromCoordinate)(views[level1], f1ref, c1[LEFT]);
72
+ const x2 = (0, util_3.getPxFromCoordinate)(views[level2], f2ref, c2[LEFT]);
73
+ const reversed1 = views[level1].pxToBp(x1).reversed;
74
+ const reversed2 = views[level2].pxToBp(x2).reversed;
75
+ const tracks = views.map(v => v.getTrack(trackId));
76
+ const y1 = (0, util_3.yPos)(trackId, level1, views, tracks, c1, getTrackYPosOverride) -
77
+ yoff;
78
+ const y2 = (0, util_3.yPos)(trackId, level2, views, tracks, c2, getTrackYPosOverride) -
79
+ yoff;
80
+ if (!relevantAlt) {
81
+ console.warn('the relevant ALT allele was not found, cannot render');
82
+ }
83
+ else {
84
+ const path = [
85
+ 'M',
86
+ x1 -
87
+ 20 *
88
+ (relevantAlt.Join === 'left' ? -1 : 1) *
89
+ (reversed1 ? -1 : 1),
90
+ y1,
91
+ 'L',
92
+ x1,
93
+ y1,
94
+ 'L',
95
+ x2,
96
+ y2,
97
+ 'L',
98
+ x2 -
99
+ 20 *
100
+ (relevantAlt.MateDirection === 'left' ? 1 : -1) *
101
+ (reversed2 ? -1 : 1),
102
+ y2,
103
+ ].join(' ');
104
+ ret.push(react_1.default.createElement("path", { d: path, key: JSON.stringify(path), strokeWidth: id === mouseoverElt ? 10 : 5, onClick: () => {
105
+ var _a, _b, _c;
106
+ const featureWidget = (_a = session.addWidget) === null || _a === void 0 ? void 0 : _a.call(session, 'VariantFeatureWidget', 'variantFeature', {
107
+ featureData: (_b = totalFeatures.get(id)) === null || _b === void 0 ? void 0 : _b.toJSON(),
108
+ });
109
+ (_c = session.showWidget) === null || _c === void 0 ? void 0 : _c.call(session, featureWidget);
110
+ }, onMouseOver: () => setMouseoverElt(id), onMouseOut: () => setMouseoverElt(undefined) }));
111
+ }
112
+ }
113
+ return ret;
114
+ })));
115
+ });
116
+ exports.default = Breakends;
117
+ //# sourceMappingURL=Breakends.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Breakends.js","sourceRoot":"","sources":["../../../src/BreakpointSplitView/components/Breakends.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+CAAgD;AAChD,6CAA+C;AAC/C,2CAAqC;AACrC,qDAA6C;AAE7C,SAAS;AACT,iCAAoE;AACpE,kCAAiE;AAGjE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;AAE3B,MAAM,SAAS,GAAG,IAAA,qBAAQ,EAAC,UAAU,EACnC,KAAK,EACL,OAAO,EACP,SAAS,EAAE,GAAG,EACd,oBAAoB,GAMrB;IACC,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,CAAA;IACvB,MAAM,OAAO,GAAG,IAAA,iBAAU,EAAC,KAAK,CAAC,CAAA;IACjC,MAAM,EAAE,eAAe,EAAE,GAAG,OAAO,CAAA;IACnC,MAAM,aAAa,GAAG,KAAK,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAA;IACrD,MAAM,aAAa,GAAG,IAAA,eAAO,EAC3B,GAAG,EAAE,CACH,KAAK,CAAC,0BAA0B,CAC9B,OAAO,EACP,IAAA,iCAA0B,EAAC,aAAa,CAAC,CAC1C,EACH,CAAC,aAAa,EAAE,OAAO,EAAE,KAAK,CAAC,CAChC,CAAA;IAED,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,IAAA,gBAAQ,GAAU,CAAA;IAC1D,MAAM,IAAI,GAAG,IAAA,6BAAW,EAAC,KAAK,CAAC,CAAA;IAC/B,IAAA,mBAAY,EAAC,IAAI,CAAC,CAAA;IAClB,MAAM,QAAQ,GAAG,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAA;IAE/D,IAAI,CAAC,QAAQ,EAAE;QACb,OAAO,IAAI,CAAA;KACZ;IAED,IAAI,IAAI,GAAG,CAAC,CAAA;IACZ,IAAI,GAAG,CAAC,OAAO,EAAE;QACf,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAA;QAChD,IAAI,GAAG,IAAI,CAAC,GAAG,CAAA;KAChB;IAED,OAAO,CACL,qCACE,MAAM,EAAC,OAAO,EACd,WAAW,EAAE,CAAC,EACd,IAAI,EAAC,MAAM,iBACE,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,OAAO,SAAS,CAAC,CAAC,CAAC,OAAO,IAEhE,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;QACzB,MAAM,GAAG,GAAG,EAAE,CAAA;QACd,uEAAuE;QACvE,qCAAqC;QACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;YAC5C,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;YAC3D,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;YAC/D,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,CAAA;YAElB,MAAM,WAAW,GAAG,IAAA,sBAAe,EAAC,EAAE,EAAE,EAAE,CAAC,CAAA;YAC3C,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE;gBACd,OAAO,IAAI,CAAA;aACZ;YACD,MAAM,SAAS,GAAG,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;YACnC,MAAM,SAAS,GAAG,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;YACnC,MAAM,KAAK,GAAG,QAAQ,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAA;YACrD,MAAM,KAAK,GAAG,QAAQ,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAA;YACrD,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,EAAE;gBACpB,MAAM,IAAI,KAAK,CAAC,0BAA0B,KAAK,IAAI,KAAK,EAAE,CAAC,CAAA;aAC5D;YACD,MAAM,EAAE,GAAG,IAAA,0BAAmB,EAAC,KAAK,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAA;YAC9D,MAAM,EAAE,GAAG,IAAA,0BAAmB,EAAC,KAAK,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAA;YAC9D,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAA;YACnD,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAA;YAEnD,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAA;YAClD,MAAM,EAAE,GACN,IAAA,WAAI,EAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,oBAAoB,CAAC;gBAC9D,IAAI,CAAA;YACN,MAAM,EAAE,GACN,IAAA,WAAI,EAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,oBAAoB,CAAC;gBAC9D,IAAI,CAAA;YACN,IAAI,CAAC,WAAW,EAAE;gBAChB,OAAO,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAA;aACrE;iBAAM;gBACL,MAAM,IAAI,GAAG;oBACX,GAAG;oBACH,EAAE;wBACA,EAAE;4BACA,CAAC,WAAW,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;4BACtC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBACxB,EAAE;oBACF,GAAG;oBACH,EAAE;oBACF,EAAE;oBACF,GAAG;oBACH,EAAE;oBACF,EAAE;oBACF,GAAG;oBACH,EAAE;wBACA,EAAE;4BACA,CAAC,WAAW,CAAC,aAAa,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;4BAC/C,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBACxB,EAAE;iBACH,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;gBACX,GAAG,CAAC,IAAI,CACN,wCACE,CAAC,EAAE,IAAI,EACP,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EACzB,WAAW,EAAE,EAAE,KAAK,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EACzC,OAAO,EAAE,GAAG,EAAE;;wBACZ,MAAM,aAAa,GAAG,MAAA,OAAO,CAAC,SAAS,wDACrC,sBAAsB,EACtB,gBAAgB,EAChB;4BACE,WAAW,EAAE,MAAA,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,0CAAE,MAAM,EAAE;yBAC7C,CACF,CAAA;wBACD,MAAA,OAAO,CAAC,UAAU,wDAAG,aAAa,CAAC,CAAA;oBACrC,CAAC,EACD,WAAW,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC,EACtC,UAAU,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,SAAS,CAAC,GAC5C,CACH,CAAA;aACF;SACF;QACD,OAAO,GAAG,CAAA;IACZ,CAAC,CAAC,CACA,CACL,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,kBAAe,SAAS,CAAA"}
@@ -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,89 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ const react_1 = __importStar(require("react"));
30
+ const mobx_react_1 = require("mobx-react");
31
+ const mobx_state_tree_1 = require("mobx-state-tree");
32
+ const mui_1 = require("tss-react/mui");
33
+ const Overlay_1 = __importDefault(require("./Overlay"));
34
+ const useStyles = (0, mui_1.makeStyles)()(theme => ({
35
+ viewDivider: {
36
+ background: theme.palette.secondary.main,
37
+ height: 3,
38
+ },
39
+ container: {
40
+ display: 'grid',
41
+ },
42
+ overlay: {
43
+ display: 'flex',
44
+ width: '100%',
45
+ gridArea: '1/1',
46
+ '& path': {
47
+ cursor: 'crosshair',
48
+ fill: 'none',
49
+ },
50
+ },
51
+ content: {
52
+ gridArea: '1/1',
53
+ },
54
+ }));
55
+ const BreakpointSplitView = (0, mobx_react_1.observer)(function ({ model, }) {
56
+ const { classes } = useStyles();
57
+ const { views } = model;
58
+ const { pluginManager } = (0, mobx_state_tree_1.getEnv)(model);
59
+ const ref = (0, react_1.useRef)(null);
60
+ return (react_1.default.createElement("div", null,
61
+ react_1.default.createElement("div", { className: classes.container },
62
+ react_1.default.createElement("div", { className: classes.content },
63
+ react_1.default.createElement("div", { style: { position: 'relative' } }, views.map((view, idx) => {
64
+ const { ReactComponent } = pluginManager.getViewType(view.type);
65
+ const viewComponent = (react_1.default.createElement(ReactComponent, { key: view.id, model: view }));
66
+ if (idx === views.length - 1) {
67
+ return viewComponent;
68
+ }
69
+ return [
70
+ viewComponent,
71
+ react_1.default.createElement("div", { key: `${view.id}-divider`, className: classes.viewDivider }),
72
+ ];
73
+ }))),
74
+ react_1.default.createElement("div", { className: classes.overlay },
75
+ react_1.default.createElement("svg", { ref: ref, style: {
76
+ width: '100%',
77
+ zIndex: 10,
78
+ pointerEvents: model.interactToggled ? undefined : 'none',
79
+ } }, model.matchedTracks.map(track => (
80
+ // note: we must pass ref down, because the child component
81
+ // needs to getBoundingClientRect on the this components SVG,
82
+ // and we cannot rely on using getBoundingClientRect in this
83
+ // component to make sure this works because if it gets
84
+ // shifted around by another element, this will not re-render
85
+ // necessarily
86
+ react_1.default.createElement(Overlay_1.default, { parentRef: ref, key: track.configuration.trackId, model: model, trackId: track.configuration.trackId }))))))));
87
+ });
88
+ exports.default = BreakpointSplitView;
89
+ //# sourceMappingURL=BreakpointSplitView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BreakpointSplitView.js","sourceRoot":"","sources":["../../../src/BreakpointSplitView/components/BreakpointSplitView.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+CAAqC;AACrC,2CAAqC;AACrC,qDAAwC;AACxC,uCAA0C;AAI1C,wDAA+B;AAE/B,MAAM,SAAS,GAAG,IAAA,gBAAU,GAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACvC,WAAW,EAAE;QACX,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI;QACxC,MAAM,EAAE,CAAC;KACV;IACD,SAAS,EAAE;QACT,OAAO,EAAE,MAAM;KAChB;IACD,OAAO,EAAE;QACP,OAAO,EAAE,MAAM;QACf,KAAK,EAAE,MAAM;QACb,QAAQ,EAAE,KAAK;QACf,QAAQ,EAAE;YACR,MAAM,EAAE,WAAW;YACnB,IAAI,EAAE,MAAM;SACb;KACF;IACD,OAAO,EAAE;QACP,QAAQ,EAAE,KAAK;KAChB;CACF,CAAC,CAAC,CAAA;AAEH,MAAM,mBAAmB,GAAG,IAAA,qBAAQ,EAAC,UAAU,EAC7C,KAAK,GAGN;IACC,MAAM,EAAE,OAAO,EAAE,GAAG,SAAS,EAAE,CAAA;IAC/B,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,CAAA;IACvB,MAAM,EAAE,aAAa,EAAE,GAAG,IAAA,wBAAM,EAAC,KAAK,CAAC,CAAA;IACvC,MAAM,GAAG,GAAG,IAAA,cAAM,EAAC,IAAI,CAAC,CAAA;IAExB,OAAO,CACL;QACE,uCAAK,SAAS,EAAE,OAAO,CAAC,SAAS;YAC/B,uCAAK,SAAS,EAAE,OAAO,CAAC,OAAO;gBAC7B,uCAAK,KAAK,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,IACjC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;oBACvB,MAAM,EAAE,cAAc,EAAE,GAAG,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;oBAC/D,MAAM,aAAa,GAAG,CACpB,8BAAC,cAAc,IAAC,GAAG,EAAE,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,GAAI,CAC9C,CAAA;oBACD,IAAI,GAAG,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;wBAC5B,OAAO,aAAa,CAAA;qBACrB;oBACD,OAAO;wBACL,aAAa;wBACb,uCACE,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,UAAU,EACzB,SAAS,EAAE,OAAO,CAAC,WAAW,GAC9B;qBACH,CAAA;gBACH,CAAC,CAAC,CACE,CACF;YACN,uCAAK,SAAS,EAAE,OAAO,CAAC,OAAO;gBAC7B,uCACE,GAAG,EAAE,GAAG,EACR,KAAK,EAAE;wBACL,KAAK,EAAE,MAAM;wBACb,MAAM,EAAE,EAAE;wBACV,aAAa,EAAE,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM;qBAC1D,IAEA,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;gBAChC,2DAA2D;gBAC3D,6DAA6D;gBAC7D,4DAA4D;gBAC5D,uDAAuD;gBACvD,6DAA6D;gBAC7D,cAAc;gBACd,8BAAC,iBAAO,IACN,SAAS,EAAE,GAAG,EACd,GAAG,EAAE,KAAK,CAAC,aAAa,CAAC,OAAO,EAChC,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,KAAK,CAAC,aAAa,CAAC,OAAO,GACpC,CACH,CAAC,CACE,CACF,CACF,CACF,CACP,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,kBAAe,mBAAmB,CAAA"}
@@ -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,84 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ const react_1 = __importStar(require("react"));
27
+ const material_1 = require("@mui/material");
28
+ const ui_1 = require("@jbrowse/core/ui");
29
+ const util_1 = require("@jbrowse/core/util");
30
+ function LoadingMessage() {
31
+ return (react_1.default.createElement("div", null,
32
+ react_1.default.createElement(material_1.CircularProgress, { size: 20, style: { marginRight: 20 } }),
33
+ react_1.default.createElement(material_1.Typography, { display: "inline" }, "Creating SVG")));
34
+ }
35
+ function useSvgLocal(key, val) {
36
+ return (0, util_1.useLocalStorage)('svg-' + key, val);
37
+ }
38
+ function ExportSvgDlg({ model, handleClose, }) {
39
+ const session = (0, util_1.getSession)(model);
40
+ const offscreenCanvas = typeof OffscreenCanvas !== 'undefined';
41
+ const [rasterizeLayers, setRasterizeLayers] = (0, react_1.useState)(offscreenCanvas);
42
+ const [loading, setLoading] = (0, react_1.useState)(false);
43
+ const [error, setError] = (0, react_1.useState)();
44
+ const [filename, setFilename] = useSvgLocal('file', 'jbrowse.svg');
45
+ const [trackLabels, setTrackLabels] = useSvgLocal('tracklabels', 'offset');
46
+ const [themeName, setThemeName] = useSvgLocal('theme', session.themeName || 'default');
47
+ return (react_1.default.createElement(ui_1.Dialog, { open: true, onClose: handleClose, title: "Export SVG" },
48
+ react_1.default.createElement(material_1.DialogContent, null,
49
+ error ? (react_1.default.createElement(ui_1.ErrorMessage, { error: error })) : loading ? (react_1.default.createElement(LoadingMessage, null)) : null,
50
+ react_1.default.createElement(material_1.TextField, { helperText: "filename", value: filename, onChange: event => setFilename(event.target.value) }),
51
+ react_1.default.createElement("br", null),
52
+ react_1.default.createElement(material_1.TextField, { select: true, label: "Track label positioning", variant: "outlined", style: { width: 150 }, value: trackLabels, onChange: event => setTrackLabels(event.target.value) },
53
+ react_1.default.createElement(material_1.MenuItem, { value: "offset" }, "Offset"),
54
+ react_1.default.createElement(material_1.MenuItem, { value: "overlay" }, "Overlay"),
55
+ react_1.default.createElement(material_1.MenuItem, { value: "left" }, "Left"),
56
+ react_1.default.createElement(material_1.MenuItem, { value: "none" }, "None")),
57
+ react_1.default.createElement("br", null),
58
+ session.allThemes ? (react_1.default.createElement(material_1.TextField, { select: true, label: "Theme", variant: "outlined", value: themeName, onChange: event => setThemeName(event.target.value) }, Object.entries(session.allThemes()).map(([key, val]) => (react_1.default.createElement(material_1.MenuItem, { key: key, value: key },
59
+ // @ts-expect-error
60
+ val.name || '(Unknown name)'))))) : null,
61
+ offscreenCanvas ? (react_1.default.createElement(material_1.FormControlLabel, { control: react_1.default.createElement(material_1.Checkbox, { checked: rasterizeLayers, onChange: () => setRasterizeLayers(val => !val) }), label: "Rasterize canvas based tracks? File may be much larger if this is turned off" })) : (react_1.default.createElement(material_1.Typography, null, "Note: rasterizing layers not yet supported in this browser, so SVG size may be large"))),
62
+ react_1.default.createElement(material_1.DialogActions, null,
63
+ react_1.default.createElement(material_1.Button, { variant: "contained", color: "secondary", onClick: () => handleClose() }, "Cancel"),
64
+ react_1.default.createElement(material_1.Button, { variant: "contained", color: "primary", type: "submit", onClick: async () => {
65
+ setLoading(true);
66
+ setError(undefined);
67
+ try {
68
+ await model.exportSvg({
69
+ rasterizeLayers,
70
+ filename,
71
+ trackLabels,
72
+ themeName,
73
+ });
74
+ handleClose();
75
+ }
76
+ catch (e) {
77
+ console.error(e);
78
+ setError(e);
79
+ setLoading(false);
80
+ }
81
+ } }, "Submit"))));
82
+ }
83
+ exports.default = ExportSvgDlg;
84
+ //# 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,23 @@
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 react_1 = __importDefault(require("react"));
7
+ const mobx_react_1 = require("mobx-react");
8
+ const AlignmentConnections_1 = __importDefault(require("./AlignmentConnections"));
9
+ const Breakends_1 = __importDefault(require("./Breakends"));
10
+ const Translocations_1 = __importDefault(require("./Translocations"));
11
+ exports.default = (0, mobx_react_1.observer)(function (props) {
12
+ var _a, _b;
13
+ const { model, trackId } = props;
14
+ const tracks = model.getMatchedTracks(trackId);
15
+ if (((_a = tracks[0]) === null || _a === void 0 ? void 0 : _a.type) === 'AlignmentsTrack') {
16
+ return react_1.default.createElement(AlignmentConnections_1.default, { ...props });
17
+ }
18
+ if (((_b = tracks[0]) === null || _b === void 0 ? void 0 : _b.type) === 'VariantTrack') {
19
+ return model.hasTranslocations(trackId) ? (react_1.default.createElement(Translocations_1.default, { ...props })) : (react_1.default.createElement(Breakends_1.default, { ...props }));
20
+ }
21
+ return null;
22
+ });
23
+ //# sourceMappingURL=Overlay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Overlay.js","sourceRoot":"","sources":["../../../src/BreakpointSplitView/components/Overlay.tsx"],"names":[],"mappings":";;;;;AAAA,kDAAyB;AACzB,2CAAqC;AAIrC,kFAAyD;AACzD,4DAAmC;AACnC,sEAA6C;AAE7C,kBAAe,IAAA,qBAAQ,EAAC,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,8BAAC,8BAAoB,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,8BAAC,wBAAc,OAAK,KAAK,GAAI,CAC9B,CAAC,CAAC,CAAC,CACF,8BAAC,mBAAS,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,113 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ const react_1 = __importStar(require("react"));
27
+ const util_1 = require("@jbrowse/core/util");
28
+ const mobx_react_1 = require("mobx-react");
29
+ const mobx_state_tree_1 = require("mobx-state-tree");
30
+ // locals
31
+ const util_2 = require("./util");
32
+ const util_3 = require("../util");
33
+ const [LEFT] = [0, 1, 2, 3];
34
+ const Translocations = (0, mobx_react_1.observer)(function ({ model, trackId, parentRef: ref, getTrackYPosOverride, }) {
35
+ const { views } = model;
36
+ const session = (0, util_1.getSession)(model);
37
+ const { assemblyManager } = session;
38
+ const totalFeatures = model.getTrackFeatures(trackId);
39
+ const layoutMatches = (0, react_1.useMemo)(() => model.getMatchedFeaturesInLayout(trackId, (0, util_2.getMatchedTranslocationFeatures)(totalFeatures)), [totalFeatures, trackId, model]);
40
+ const [mouseoverElt, setMouseoverElt] = (0, react_1.useState)();
41
+ const snap = (0, mobx_state_tree_1.getSnapshot)(model);
42
+ (0, util_3.useNextFrame)(snap);
43
+ const assembly = assemblyManager.get(views[0].assemblyNames[0]);
44
+ if (!assembly) {
45
+ return null;
46
+ }
47
+ let yOffset = 0;
48
+ if (ref.current) {
49
+ const rect = ref.current.getBoundingClientRect();
50
+ yOffset = rect.top;
51
+ }
52
+ // we hardcode the TRA to go to the "other view" and if there is none, we
53
+ // just return null here note: would need to do processing of the INFO
54
+ // CHR2/END and see which view could contain those coordinates to really do
55
+ // it properly
56
+ if (views.length < 2) {
57
+ return null;
58
+ }
59
+ return (react_1.default.createElement("g", { fill: "none", stroke: "green", strokeWidth: 5, "data-testid": layoutMatches.length ? `${trackId}-loaded` : trackId }, layoutMatches.map(chunk => {
60
+ // we follow a path in the list of chunks, not from top to bottom,
61
+ // just in series following x1,y1 -> x2,y2
62
+ const ret = [];
63
+ for (let i = 0; i < chunk.length; i += 1) {
64
+ const { layout: c1, feature: f1, level: level1 } = chunk[i];
65
+ const level2 = level1 === 0 ? 1 : 0;
66
+ const id = f1.id();
67
+ if (!c1) {
68
+ return null;
69
+ }
70
+ const info = f1.get('INFO');
71
+ const chr2 = info.CHR2[0];
72
+ const end2 = info.END[0];
73
+ const [myDirection, mateDirection] = info.STRANDS[0].split('');
74
+ const r = (0, util_3.getPxFromCoordinate)(views[level2], chr2, end2);
75
+ if (r) {
76
+ const c2 = [r, 0, r + 1, 0];
77
+ const x1 = (0, util_3.getPxFromCoordinate)(views[level1], f1.get('refName'), c1[LEFT]);
78
+ const x2 = r;
79
+ const reversed1 = views[level1].pxToBp(x1).reversed;
80
+ const reversed2 = views[level2].pxToBp(x2).reversed;
81
+ const tracks = views.map(v => v.getTrack(trackId));
82
+ const y1 = (0, util_3.yPos)(trackId, level1, views, tracks, c1, getTrackYPosOverride) -
83
+ yOffset;
84
+ const y2 = (0, util_3.yPos)(trackId, level2, views, tracks, c2, getTrackYPosOverride) -
85
+ yOffset;
86
+ const path = [
87
+ 'M',
88
+ x1 - 20 * (myDirection === '+' ? 1 : -1) * (reversed1 ? -1 : 1),
89
+ y1,
90
+ 'L',
91
+ x1,
92
+ y1,
93
+ 'L',
94
+ x2,
95
+ y2,
96
+ 'L',
97
+ x2 - 20 * (mateDirection === '+' ? 1 : -1) * (reversed2 ? -1 : 1),
98
+ y2,
99
+ ].join(' ');
100
+ ret.push(react_1.default.createElement("path", { d: path, key: JSON.stringify(path), strokeWidth: id === mouseoverElt ? 10 : 5, onClick: () => {
101
+ var _a, _b;
102
+ const featureWidget = (_a = session.addWidget) === null || _a === void 0 ? void 0 : _a.call(session, 'VariantFeatureWidget', 'variantFeature', {
103
+ featureData: (totalFeatures.get(id) || { toJSON: () => { } }).toJSON(),
104
+ });
105
+ (_b = session.showWidget) === null || _b === void 0 ? void 0 : _b.call(session, featureWidget);
106
+ }, onMouseOver: () => setMouseoverElt(id), onMouseOut: () => setMouseoverElt(undefined) }));
107
+ }
108
+ }
109
+ return ret;
110
+ })));
111
+ });
112
+ exports.default = Translocations;
113
+ //# 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,116 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getMatchedTranslocationFeatures = exports.getMatchedBreakendFeatures = exports.findMatchingAlt = exports.hasPairedReads = exports.getMatchedAlignmentFeatures = exports.getBadlyPairedAlignments = void 0;
4
+ const util_1 = require("@jbrowse/core/util");
5
+ const vcf_1 = require("@gmod/vcf");
6
+ // this finds candidate alignment features, aimed at plotting split reads from
7
+ // BAM/CRAM files
8
+ function getBadlyPairedAlignments(features) {
9
+ const candidates = new Map();
10
+ const alreadySeen = new Set();
11
+ // this finds candidate features that share the same name
12
+ for (const feature of features.values()) {
13
+ const flags = feature.get('flags');
14
+ const id = feature.id();
15
+ const unmapped = flags & 4;
16
+ const correctlyPaired = flags & 2;
17
+ if (!alreadySeen.has(id) && !correctlyPaired && !unmapped) {
18
+ const n = feature.get('name');
19
+ let val = candidates.get(n);
20
+ if (!val) {
21
+ val = [];
22
+ candidates.set(n, val);
23
+ }
24
+ val.push(feature);
25
+ }
26
+ alreadySeen.add(feature.id());
27
+ }
28
+ return [...candidates.values()].filter(v => v.length > 1);
29
+ }
30
+ exports.getBadlyPairedAlignments = getBadlyPairedAlignments;
31
+ function getTag(f, tag) {
32
+ const tags = f.get('tags');
33
+ return tags ? tags[tag] : f.get(tag);
34
+ }
35
+ // this finds candidate alignment features, aimed at plotting split reads from
36
+ // BAM/CRAM files
37
+ function getMatchedAlignmentFeatures(features) {
38
+ const candidates = new Map();
39
+ const alreadySeen = new Set();
40
+ // this finds candidate features that share the same name
41
+ for (const feature of features.values()) {
42
+ const id = feature.id();
43
+ const unmapped = feature.get('flags') & 4;
44
+ const hasSA = !!getTag(feature, 'SA');
45
+ if (!alreadySeen.has(id) && !unmapped && hasSA) {
46
+ const n = feature.get('name');
47
+ let val = candidates.get(n);
48
+ if (!val) {
49
+ val = [];
50
+ candidates.set(n, val);
51
+ }
52
+ val.push(feature);
53
+ }
54
+ alreadySeen.add(feature.id());
55
+ }
56
+ return [...candidates.values()].filter(v => v.length > 1);
57
+ }
58
+ exports.getMatchedAlignmentFeatures = getMatchedAlignmentFeatures;
59
+ function hasPairedReads(features) {
60
+ for (const f of features.values()) {
61
+ if (f.get('flags') & 1) {
62
+ return true;
63
+ }
64
+ }
65
+ return false;
66
+ }
67
+ exports.hasPairedReads = hasPairedReads;
68
+ function findMatchingAlt(feat1, feat2) {
69
+ const alts = feat1.get('ALT');
70
+ if (alts) {
71
+ return new Map(alts === null || alts === void 0 ? void 0 : alts.map(alt => (0, vcf_1.parseBreakend)(alt)).filter(util_1.notEmpty).map(bnd => [bnd.MatePosition, bnd])).get(`${feat2.get('refName')}:${feat2.get('start') + 1}`);
72
+ }
73
+ return undefined;
74
+ }
75
+ exports.findMatchingAlt = findMatchingAlt;
76
+ // Returns paired BND features across multiple views by inspecting the ALT
77
+ // field to get exact coordinate matches
78
+ function getMatchedBreakendFeatures(feats) {
79
+ const candidates = new Map();
80
+ const alreadySeen = new Set();
81
+ for (const f of feats.values()) {
82
+ if (!alreadySeen.has(f.id()) && f.get('type') === 'breakend') {
83
+ const alts = f.get('ALT');
84
+ alts === null || alts === void 0 ? void 0 : alts.forEach(a => {
85
+ const cur = `${f.get('refName')}:${f.get('start') + 1}`;
86
+ const bnd = (0, vcf_1.parseBreakend)(a);
87
+ if (bnd) {
88
+ const val = candidates.get(cur);
89
+ if (!val) {
90
+ candidates.set(bnd.MatePosition || 'none', [f]);
91
+ }
92
+ else {
93
+ val.push(f);
94
+ }
95
+ }
96
+ });
97
+ }
98
+ alreadySeen.add(f.id());
99
+ }
100
+ return [...candidates.values()].filter(v => v.length > 1);
101
+ }
102
+ exports.getMatchedBreakendFeatures = getMatchedBreakendFeatures;
103
+ // Getting "matched" TRA means just return all TRA
104
+ function getMatchedTranslocationFeatures(feats) {
105
+ const ret = [];
106
+ const alreadySeen = new Set();
107
+ for (const f of feats.values()) {
108
+ if (!alreadySeen.has(f.id()) && f.get('ALT')[0] === '<TRA>') {
109
+ ret.push([f]);
110
+ }
111
+ alreadySeen.add(f.id());
112
+ }
113
+ return ret;
114
+ }
115
+ exports.getMatchedTranslocationFeatures = getMatchedTranslocationFeatures;
116
+ //# sourceMappingURL=util.js.map