@jbrowse/plugin-breakpoint-split-view 3.7.0 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (102) hide show
  1. package/esm/BreakpointAlignmentsFeatureDetail/BreakpointAlignmentsFeatureDetail.js +1 -1
  2. package/esm/BreakpointAlignmentsFeatureDetail/index.js +2 -2
  3. package/esm/BreakpointGetFeatures/BreakpointGetFeatures.d.ts +51 -0
  4. package/esm/BreakpointGetFeatures/BreakpointGetFeatures.js +57 -0
  5. package/esm/BreakpointGetFeatures/index.d.ts +2 -0
  6. package/esm/BreakpointGetFeatures/index.js +4 -0
  7. package/esm/BreakpointSplitView/BreakpointSplitView.js +33 -47
  8. package/esm/BreakpointSplitView/components/AlignmentConnections.d.ts +2 -7
  9. package/esm/BreakpointSplitView/components/AlignmentConnections.js +20 -25
  10. package/esm/BreakpointSplitView/components/Breakends.d.ts +2 -7
  11. package/esm/BreakpointSplitView/components/Breakends.js +28 -59
  12. package/esm/BreakpointSplitView/components/BreakpointSplitView.d.ts +1 -1
  13. package/esm/BreakpointSplitView/components/BreakpointSplitView.js +19 -6
  14. package/esm/BreakpointSplitView/components/BreakpointSplitViewOverlay.d.ts +1 -1
  15. package/esm/BreakpointSplitView/components/BreakpointSplitViewOverlay.js +3 -3
  16. package/esm/BreakpointSplitView/components/ExportSvgDialog.d.ts +1 -1
  17. package/esm/BreakpointSplitView/components/ExportSvgDialog.js +5 -1
  18. package/esm/BreakpointSplitView/components/Header.d.ts +2 -2
  19. package/esm/BreakpointSplitView/components/Header.js +4 -4
  20. package/esm/BreakpointSplitView/components/HeaderSearchBoxes.js +2 -2
  21. package/esm/BreakpointSplitView/components/Overlay.d.ts +1 -1
  22. package/esm/BreakpointSplitView/components/Overlay.js +8 -11
  23. package/esm/BreakpointSplitView/components/PairedFeatures.d.ts +2 -7
  24. package/esm/BreakpointSplitView/components/PairedFeatures.js +22 -47
  25. package/esm/BreakpointSplitView/components/Rubberband.d.ts +6 -0
  26. package/esm/BreakpointSplitView/components/Rubberband.js +27 -0
  27. package/esm/BreakpointSplitView/components/RubberbandSpan.d.ts +15 -0
  28. package/esm/BreakpointSplitView/components/RubberbandSpan.js +30 -0
  29. package/esm/BreakpointSplitView/components/RubberbandTooltip.d.ts +5 -0
  30. package/esm/BreakpointSplitView/components/RubberbandTooltip.js +17 -0
  31. package/esm/BreakpointSplitView/components/Translocations.d.ts +2 -7
  32. package/esm/BreakpointSplitView/components/Translocations.js +23 -58
  33. package/esm/BreakpointSplitView/components/VerticalGuide.d.ts +6 -0
  34. package/esm/BreakpointSplitView/components/VerticalGuide.js +24 -0
  35. package/esm/BreakpointSplitView/components/overlayUtils.d.ts +24 -0
  36. package/esm/BreakpointSplitView/components/overlayUtils.js +47 -0
  37. package/esm/BreakpointSplitView/components/rubberbandUtil.d.ts +4 -0
  38. package/esm/BreakpointSplitView/components/rubberbandUtil.js +3 -0
  39. package/esm/BreakpointSplitView/components/useRangeSelect.d.ts +59 -0
  40. package/esm/BreakpointSplitView/components/useRangeSelect.js +121 -0
  41. package/esm/BreakpointSplitView/components/util.js +1 -2
  42. package/esm/BreakpointSplitView/getClip.js +4 -4
  43. package/esm/BreakpointSplitView/index.js +2 -2
  44. package/esm/BreakpointSplitView/model.d.ts +402 -117
  45. package/esm/BreakpointSplitView/model.js +105 -41
  46. package/esm/BreakpointSplitView/svgcomponents/SVGBreakpointSplitView.d.ts +2 -2
  47. package/esm/BreakpointSplitView/svgcomponents/SVGBreakpointSplitView.js +8 -8
  48. package/esm/BreakpointSplitView/types.d.ts +8 -0
  49. package/esm/BreakpointSplitView/util.d.ts +1 -1
  50. package/esm/BreakpointSplitView/util.js +8 -17
  51. package/esm/LaunchBreakpointSplitView/index.d.ts +2 -0
  52. package/esm/LaunchBreakpointSplitView/index.js +12 -0
  53. package/esm/index.js +7 -6
  54. package/package.json +28 -34
  55. package/dist/BreakpointAlignmentsFeatureDetail/BreakpointAlignmentsFeatureDetail.d.ts +0 -10
  56. package/dist/BreakpointAlignmentsFeatureDetail/BreakpointAlignmentsFeatureDetail.js +0 -12
  57. package/dist/BreakpointAlignmentsFeatureDetail/index.d.ts +0 -2
  58. package/dist/BreakpointAlignmentsFeatureDetail/index.js +0 -67
  59. package/dist/BreakpointSplitView/BreakpointSplitView.d.ts +0 -34
  60. package/dist/BreakpointSplitView/BreakpointSplitView.js +0 -84
  61. package/dist/BreakpointSplitView/components/AlignmentConnections.d.ts +0 -8
  62. package/dist/BreakpointSplitView/components/AlignmentConnections.js +0 -133
  63. package/dist/BreakpointSplitView/components/Breakends.d.ts +0 -8
  64. package/dist/BreakpointSplitView/components/Breakends.js +0 -95
  65. package/dist/BreakpointSplitView/components/BreakpointSplitView.d.ts +0 -5
  66. package/dist/BreakpointSplitView/components/BreakpointSplitView.js +0 -46
  67. package/dist/BreakpointSplitView/components/BreakpointSplitViewOverlay.d.ts +0 -5
  68. package/dist/BreakpointSplitView/components/BreakpointSplitViewOverlay.js +0 -33
  69. package/dist/BreakpointSplitView/components/ExportSvgDialog.d.ts +0 -7
  70. package/dist/BreakpointSplitView/components/ExportSvgDialog.js +0 -57
  71. package/dist/BreakpointSplitView/components/Header.d.ts +0 -5
  72. package/dist/BreakpointSplitView/components/Header.js +0 -52
  73. package/dist/BreakpointSplitView/components/HeaderSearchBoxes.d.ts +0 -5
  74. package/dist/BreakpointSplitView/components/HeaderSearchBoxes.js +0 -24
  75. package/dist/BreakpointSplitView/components/Overlay.d.ts +0 -8
  76. package/dist/BreakpointSplitView/components/Overlay.js +0 -27
  77. package/dist/BreakpointSplitView/components/PairedFeatures.d.ts +0 -8
  78. package/dist/BreakpointSplitView/components/PairedFeatures.js +0 -75
  79. package/dist/BreakpointSplitView/components/Translocations.d.ts +0 -8
  80. package/dist/BreakpointSplitView/components/Translocations.js +0 -99
  81. package/dist/BreakpointSplitView/components/getOrientationColor.d.ts +0 -41
  82. package/dist/BreakpointSplitView/components/getOrientationColor.js +0 -103
  83. package/dist/BreakpointSplitView/components/util.d.ts +0 -8
  84. package/dist/BreakpointSplitView/components/util.js +0 -142
  85. package/dist/BreakpointSplitView/getClip.d.ts +0 -1
  86. package/dist/BreakpointSplitView/getClip.js +0 -10
  87. package/dist/BreakpointSplitView/index.d.ts +0 -2
  88. package/dist/BreakpointSplitView/index.js +0 -52
  89. package/dist/BreakpointSplitView/model.d.ts +0 -344
  90. package/dist/BreakpointSplitView/model.js +0 -256
  91. package/dist/BreakpointSplitView/svgcomponents/SVGBackground.d.ts +0 -5
  92. package/dist/BreakpointSplitView/svgcomponents/SVGBackground.js +0 -10
  93. package/dist/BreakpointSplitView/svgcomponents/SVGBreakpointSplitView.d.ts +0 -5
  94. package/dist/BreakpointSplitView/svgcomponents/SVGBreakpointSplitView.js +0 -41
  95. package/dist/BreakpointSplitView/svgcomponents/util.d.ts +0 -4
  96. package/dist/BreakpointSplitView/svgcomponents/util.js +0 -18
  97. package/dist/BreakpointSplitView/types.d.ts +0 -22
  98. package/dist/BreakpointSplitView/types.js +0 -2
  99. package/dist/BreakpointSplitView/util.d.ts +0 -28
  100. package/dist/BreakpointSplitView/util.js +0 -67
  101. package/dist/index.d.ts +0 -7
  102. package/dist/index.js +0 -20
@@ -1,84 +0,0 @@
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 vcf_1 = require("@gmod/vcf");
7
- const ViewType_1 = __importDefault(require("@jbrowse/core/pluggableElementTypes/ViewType"));
8
- const util_1 = require("@jbrowse/core/util");
9
- class BreakpointSplitViewType extends ViewType_1.default {
10
- getBreakendCoveringRegions({ feature, assembly, }) {
11
- var _a;
12
- const alt = (_a = feature.get('ALT')) === null || _a === void 0 ? void 0 : _a[0];
13
- const bnd = alt ? (0, vcf_1.parseBreakend)(alt) : undefined;
14
- const startPos = feature.get('start');
15
- const refName = feature.get('refName');
16
- const f = (ref) => assembly.getCanonicalRefName(ref) || ref;
17
- if (alt === '<TRA>') {
18
- const INFO = feature.get('INFO');
19
- return {
20
- pos: startPos,
21
- refName: f(refName),
22
- mateRefName: f(INFO.CHR2[0]),
23
- matePos: INFO.END[0] - 1,
24
- };
25
- }
26
- else if (bnd === null || bnd === void 0 ? void 0 : bnd.MatePosition) {
27
- const matePosition = bnd.MatePosition.split(':');
28
- return {
29
- pos: startPos,
30
- refName: f(refName),
31
- mateRefName: f(matePosition[0]),
32
- matePos: +matePosition[1] - 1,
33
- };
34
- }
35
- else if (feature.get('mate')) {
36
- const mate = feature.get('mate');
37
- return {
38
- pos: startPos,
39
- refName: f(refName),
40
- mateRefName: f(mate.refName),
41
- matePos: mate.start,
42
- };
43
- }
44
- else {
45
- return {
46
- pos: startPos,
47
- refName: f(refName),
48
- mateRefName: f(refName),
49
- matePos: feature.get('end'),
50
- };
51
- }
52
- }
53
- singleLevelSnapshotFromBreakendFeature({ feature, session, assemblyName, }) {
54
- const { assemblyManager } = session;
55
- const assembly = assemblyManager.get(assemblyName);
56
- if (!assembly) {
57
- throw new Error(`assembly ${assemblyName} not found`);
58
- }
59
- if (!assembly.regions) {
60
- throw new Error(`assembly ${assemblyName} regions not loaded`);
61
- }
62
- const coverage = this.getBreakendCoveringRegions({
63
- feature,
64
- assembly,
65
- });
66
- const { refName, mateRefName } = coverage;
67
- const topRegion = assembly.regions.find(f => f.refName === refName);
68
- const bottomRegion = assembly.regions.find(f => f.refName === mateRefName);
69
- return {
70
- coverage,
71
- snap: {
72
- type: 'BreakpointSplitView',
73
- views: [
74
- {
75
- type: 'LinearGenomeView',
76
- displayedRegions: (0, util_1.gatherOverlaps)([topRegion, bottomRegion]),
77
- },
78
- ],
79
- displayName: `${feature.get('name') || feature.get('id') || 'breakend'} split detail`,
80
- },
81
- };
82
- }
83
- }
84
- exports.default = BreakpointSplitViewType;
@@ -1,8 +0,0 @@
1
- import type { BreakpointViewModel } from '../model';
2
- declare const AlignmentConnections: ({ model, trackId, parentRef, getTrackYPosOverride, }: {
3
- model: BreakpointViewModel;
4
- trackId: string;
5
- parentRef: React.RefObject<SVGSVGElement | null>;
6
- getTrackYPosOverride?: (trackId: string, level: number) => number;
7
- }) => import("react/jsx-runtime").JSX.Element | null;
8
- export default AlignmentConnections;
@@ -1,133 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const jsx_runtime_1 = require("react/jsx-runtime");
4
- const react_1 = require("react");
5
- const util_1 = require("@jbrowse/core/util");
6
- const material_1 = require("@mui/material");
7
- const mobx_react_1 = require("mobx-react");
8
- const mobx_state_tree_1 = require("mobx-state-tree");
9
- const util_2 = require("./util");
10
- const util_3 = require("../util");
11
- const getOrientationColor_1 = require("./getOrientationColor");
12
- const [LEFT, , RIGHT] = [0, 1, 2, 3];
13
- const AlignmentConnections = (0, mobx_react_1.observer)(function ({ model, trackId, parentRef, getTrackYPosOverride, }) {
14
- const { interactiveOverlay, views, showIntraviewLinks } = model;
15
- const theme = (0, material_1.useTheme)();
16
- const session = (0, util_1.getSession)(model);
17
- const snap = (0, mobx_state_tree_1.getSnapshot)(model);
18
- const { assemblyManager } = session;
19
- const v0 = views[0];
20
- const assembly = v0 ? assemblyManager.get(v0.assemblyNames[0]) : undefined;
21
- (0, util_3.useNextFrame)(snap);
22
- const allFeatures = model.getTrackFeatures(trackId);
23
- const hasPaired = (0, react_1.useMemo)(() => (0, util_2.hasPairedReads)(allFeatures), [allFeatures]);
24
- const layoutMatches = (0, react_1.useMemo)(() => {
25
- const layoutMatches = model.getMatchedFeaturesInLayout(trackId, hasPaired
26
- ? (0, util_2.getBadlyPairedAlignments)(allFeatures)
27
- : (0, util_2.getMatchedAlignmentFeatures)(allFeatures));
28
- if (!hasPaired) {
29
- for (const m of layoutMatches) {
30
- m.sort((a, b) => a.clipPos - b.clipPos);
31
- }
32
- }
33
- return layoutMatches;
34
- }, [allFeatures, trackId, hasPaired, model]);
35
- const [mouseoverElt, setMouseoverElt] = (0, react_1.useState)();
36
- let yOffset = 0;
37
- if (parentRef.current) {
38
- const rect = parentRef.current.getBoundingClientRect();
39
- yOffset = rect.top;
40
- }
41
- return assembly ? ((0, jsx_runtime_1.jsx)("g", { fill: "none", "data-testid": layoutMatches.length ? `${trackId}-loaded` : trackId, children: layoutMatches.map(chunk => {
42
- const ret = [];
43
- for (let i = 0; i < chunk.length - 1; i++) {
44
- const { layout: c1, feature: f1, level: level1 } = chunk[i];
45
- const { layout: c2, feature: f2, level: level2 } = chunk[i + 1];
46
- if (!c1 || !c2) {
47
- console.warn('received null layout for a overlay feature');
48
- return null;
49
- }
50
- if (!showIntraviewLinks && level1 === level2) {
51
- return null;
52
- }
53
- const f1ref = assembly.getCanonicalRefName(f1.get('refName'));
54
- const f2ref = assembly.getCanonicalRefName(f2.get('refName'));
55
- if (!f1ref || !f2ref) {
56
- throw new Error(`unable to find ref for ${f1ref || f2ref}`);
57
- }
58
- const r = {
59
- pair_orientation: f1.get('pair_orientation'),
60
- };
61
- const s1 = f1.get('strand');
62
- const s2 = f2.get('strand');
63
- const sameRef = f1ref === f2ref;
64
- const checkOrientation = sameRef;
65
- let orientationColor = '';
66
- let isAbnormal = false;
67
- if (checkOrientation) {
68
- if (hasPaired) {
69
- orientationColor = (0, getOrientationColor_1.getPairedOrientationColor)(r);
70
- isAbnormal = (0, getOrientationColor_1.isAbnormalOrientation)(r);
71
- }
72
- else {
73
- orientationColor = (0, getOrientationColor_1.getLongReadOrientationColorOrDefault)(s1, s2);
74
- isAbnormal = (0, getOrientationColor_1.getLongReadOrientationAbnormal)(s1, s2);
75
- }
76
- }
77
- const p1 = c1[s1 === -1 ? LEFT : RIGHT];
78
- const sn1 = s2 === -1;
79
- const p2 = hasPaired ? c2[sn1 ? LEFT : RIGHT] : c2[sn1 ? RIGHT : LEFT];
80
- const x1 = (0, util_3.getPxFromCoordinate)(views[level1], f1ref, p1);
81
- const x2 = (0, util_3.getPxFromCoordinate)(views[level2], f2ref, p2);
82
- const reversed1 = views[level1].pxToBp(x1).reversed;
83
- const reversed2 = views[level2].pxToBp(x2).reversed;
84
- const rf1 = reversed1 ? -1 : 1;
85
- const rf2 = reversed2 ? -1 : 1;
86
- const tracks = views.map(v => v.getTrack(trackId));
87
- const y1 = (0, util_3.yPos)(trackId, level1, views, tracks, c1, getTrackYPosOverride) -
88
- yOffset;
89
- const y2 = (0, util_3.yPos)(trackId, level2, views, tracks, c2, getTrackYPosOverride) -
90
- yOffset;
91
- const sameLevel = level1 === level2;
92
- const abnormalSpecialRenderFlag = sameLevel && isAbnormal;
93
- const trackHeight = abnormalSpecialRenderFlag
94
- ? tracks[level1].displays[0].height
95
- : 0;
96
- const pf1 = hasPaired ? -1 : 1;
97
- const y0 = (0, util_3.heightFromSpecificLevel)(views, trackId, level1, getTrackYPosOverride);
98
- const path = [
99
- 'M',
100
- x1,
101
- y1,
102
- 'C',
103
- x1 + 200 * f1.get('strand') * rf1,
104
- abnormalSpecialRenderFlag
105
- ? Math.min(y0 - yOffset + trackHeight, y1 + trackHeight)
106
- : y1,
107
- x2 - 200 * f2.get('strand') * rf2 * pf1,
108
- abnormalSpecialRenderFlag
109
- ? Math.min(y0 - yOffset + trackHeight, y2 + trackHeight)
110
- : y2,
111
- x2,
112
- y2,
113
- ].join(' ');
114
- const id = `${f1.id()}-${f2.id()}`;
115
- ret.push((0, jsx_runtime_1.jsx)("path", { d: path, "data-testid": "r1", pointerEvents: interactiveOverlay ? 'auto' : undefined, strokeWidth: mouseoverElt === id ? 5 : 1, ...(0, util_1.getStrokeProps)(orientationColor || theme.palette.text.disabled), onClick: () => {
116
- var _a, _b;
117
- const featureWidget = (_a = session.addWidget) === null || _a === void 0 ? void 0 : _a.call(session, 'BreakpointAlignmentsWidget', 'breakpointAlignments', {
118
- featureData: {
119
- feature1: (allFeatures.get(f1.id()) || { toJSON: () => { } }).toJSON(),
120
- feature2: (allFeatures.get(f2.id()) || { toJSON: () => { } }).toJSON(),
121
- },
122
- });
123
- (_b = session.showWidget) === null || _b === void 0 ? void 0 : _b.call(session, featureWidget);
124
- }, onMouseOver: () => {
125
- setMouseoverElt(id);
126
- }, onMouseOut: () => {
127
- setMouseoverElt(undefined);
128
- } }, id));
129
- }
130
- return ret;
131
- }) })) : null;
132
- });
133
- exports.default = AlignmentConnections;
@@ -1,8 +0,0 @@
1
- import type { BreakpointViewModel } from '../model';
2
- declare const Breakends: ({ model, trackId, parentRef: ref, getTrackYPosOverride, }: {
3
- model: BreakpointViewModel;
4
- trackId: string;
5
- parentRef: React.RefObject<SVGSVGElement | null>;
6
- getTrackYPosOverride?: (trackId: string, level: number) => number;
7
- }) => import("react/jsx-runtime").JSX.Element | null;
8
- export default Breakends;
@@ -1,95 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const jsx_runtime_1 = require("react/jsx-runtime");
4
- const react_1 = require("react");
5
- const util_1 = require("@jbrowse/core/util");
6
- const mobx_react_1 = require("mobx-react");
7
- const mobx_state_tree_1 = require("mobx-state-tree");
8
- const util_2 = require("./util");
9
- const util_3 = require("../util");
10
- const [LEFT] = [0, 1, 2, 3];
11
- const Breakends = (0, mobx_react_1.observer)(function ({ model, trackId, parentRef: ref, getTrackYPosOverride, }) {
12
- const { interactiveOverlay, views } = model;
13
- const session = (0, util_1.getSession)(model);
14
- const { assemblyManager } = session;
15
- const totalFeatures = model.getTrackFeatures(trackId);
16
- const layoutMatches = (0, react_1.useMemo)(() => model.getMatchedFeaturesInLayout(trackId, (0, util_2.getMatchedBreakendFeatures)(totalFeatures)), [totalFeatures, trackId, model]);
17
- const [mouseoverElt, setMouseoverElt] = (0, react_1.useState)();
18
- const snap = (0, mobx_state_tree_1.getSnapshot)(model);
19
- (0, util_3.useNextFrame)(snap);
20
- const assembly = assemblyManager.get(views[0].assemblyNames[0]);
21
- if (!assembly) {
22
- return null;
23
- }
24
- let yoff = 0;
25
- if (ref.current) {
26
- const rect = ref.current.getBoundingClientRect();
27
- yoff = rect.top;
28
- }
29
- return ((0, jsx_runtime_1.jsx)("g", { stroke: "green", strokeWidth: 5, fill: "none", "data-testid": layoutMatches.length ? `${trackId}-loaded` : trackId, children: layoutMatches.map(chunk => {
30
- const ret = [];
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 = (0, util_2.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 = (0, util_3.getPxFromCoordinate)(views[level1], f1ref, c1[LEFT]);
47
- const x2 = (0, util_3.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 = (0, util_3.yPos)(trackId, level1, views, tracks, c1, getTrackYPosOverride) -
52
- yoff;
53
- const y2 = (0, util_3.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((0, jsx_runtime_1.jsx)("path", { d: path, "data-testid": "r2", pointerEvents: interactiveOverlay ? 'auto' : undefined, 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: () => {
86
- setMouseoverElt(id);
87
- }, onMouseOut: () => {
88
- setMouseoverElt(undefined);
89
- } }, JSON.stringify(path)));
90
- }
91
- }
92
- return ret;
93
- }) }));
94
- });
95
- exports.default = Breakends;
@@ -1,5 +0,0 @@
1
- import type { BreakpointViewModel } from '../model';
2
- declare const BreakpointSplitView: ({ model, }: {
3
- model: BreakpointViewModel;
4
- }) => import("react/jsx-runtime").JSX.Element;
5
- export default BreakpointSplitView;
@@ -1,46 +0,0 @@
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 jsx_runtime_1 = require("react/jsx-runtime");
7
- const util_1 = require("@jbrowse/core/util");
8
- const mobx_react_1 = require("mobx-react");
9
- const mui_1 = require("tss-react/mui");
10
- const BreakpointSplitViewOverlay_1 = __importDefault(require("./BreakpointSplitViewOverlay"));
11
- const Header_1 = __importDefault(require("./Header"));
12
- const useStyles = (0, mui_1.makeStyles)()(theme => ({
13
- viewDivider: {
14
- background: theme.palette.secondary.main,
15
- height: 3,
16
- },
17
- container: {
18
- display: 'grid',
19
- },
20
- content: {
21
- gridArea: '1/1',
22
- },
23
- rel: {
24
- position: 'relative',
25
- },
26
- }));
27
- const BreakpointSplitViewLevels = (0, mobx_react_1.observer)(function ({ model, }) {
28
- const { classes } = useStyles();
29
- const { views } = model;
30
- const { pluginManager } = (0, util_1.getEnv)(model);
31
- return ((0, jsx_runtime_1.jsx)("div", { className: classes.content, children: (0, jsx_runtime_1.jsx)("div", { className: classes.rel, children: views.map((view, idx) => {
32
- const { ReactComponent } = pluginManager.getViewType(view.type);
33
- const viewComponent = (0, jsx_runtime_1.jsx)(ReactComponent, { model: view }, view.id);
34
- return idx === views.length - 1
35
- ? viewComponent
36
- : [
37
- viewComponent,
38
- (0, jsx_runtime_1.jsx)("div", { className: classes.viewDivider }, `${view.id}-divider`),
39
- ];
40
- }) }) }));
41
- });
42
- const BreakpointSplitView = (0, mobx_react_1.observer)(function ({ model, }) {
43
- const { classes } = useStyles();
44
- return ((0, jsx_runtime_1.jsxs)("div", { children: [model.showHeader ? (0, jsx_runtime_1.jsx)(Header_1.default, { model: model }) : null, (0, jsx_runtime_1.jsxs)("div", { className: classes.container, children: [(0, jsx_runtime_1.jsx)(BreakpointSplitViewLevels, { model: model }), (0, jsx_runtime_1.jsx)(BreakpointSplitViewOverlay_1.default, { model: model })] })] }));
45
- });
46
- exports.default = BreakpointSplitView;
@@ -1,5 +0,0 @@
1
- import type { BreakpointViewModel } from '../model';
2
- declare const BreakpointSplitViewOverlay: ({ model, }: {
3
- model: BreakpointViewModel;
4
- }) => import("react/jsx-runtime").JSX.Element;
5
- export default BreakpointSplitViewOverlay;
@@ -1,33 +0,0 @@
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 jsx_runtime_1 = require("react/jsx-runtime");
7
- const react_1 = require("react");
8
- const mobx_react_1 = require("mobx-react");
9
- const mui_1 = require("tss-react/mui");
10
- const Overlay_1 = __importDefault(require("./Overlay"));
11
- const useStyles = (0, mui_1.makeStyles)()({
12
- overlay: {
13
- display: 'flex',
14
- width: '100%',
15
- gridArea: '1/1',
16
- '& path': {
17
- cursor: 'crosshair',
18
- fill: 'none',
19
- },
20
- },
21
- base: {
22
- pointerEvents: 'none',
23
- width: '100%',
24
- zIndex: 100,
25
- },
26
- });
27
- const BreakpointSplitViewOverlay = (0, mobx_react_1.observer)(function ({ model, }) {
28
- const { classes } = useStyles();
29
- const { matchedTracks } = model;
30
- const ref = (0, react_1.useRef)(null);
31
- return ((0, jsx_runtime_1.jsx)("div", { className: classes.overlay, children: (0, jsx_runtime_1.jsx)("svg", { ref: ref, className: classes.base, children: matchedTracks.map(track => ((0, jsx_runtime_1.jsx)(Overlay_1.default, { parentRef: ref, model: model, trackId: track.configuration.trackId }, track.configuration.trackId))) }) }));
32
- });
33
- exports.default = BreakpointSplitViewOverlay;
@@ -1,7 +0,0 @@
1
- import type { ExportSvgOptions } from '../types';
2
- export default function ExportSvgDialog({ model, handleClose, }: {
3
- model: {
4
- exportSvg(opts: ExportSvgOptions): Promise<void>;
5
- };
6
- handleClose: () => void;
7
- }): import("react/jsx-runtime").JSX.Element;
@@ -1,57 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.default = ExportSvgDialog;
4
- const jsx_runtime_1 = require("react/jsx-runtime");
5
- const react_1 = require("react");
6
- const ui_1 = require("@jbrowse/core/ui");
7
- const util_1 = require("@jbrowse/core/util");
8
- const material_1 = require("@mui/material");
9
- function LoadingMessage() {
10
- return ((0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)(material_1.CircularProgress, { size: 20, style: { marginRight: 20 } }), (0, jsx_runtime_1.jsx)(material_1.Typography, { display: "inline", children: "Creating SVG" })] }));
11
- }
12
- function TextField2({ children, ...rest }) {
13
- return ((0, jsx_runtime_1.jsx)("div", { children: (0, jsx_runtime_1.jsx)(material_1.TextField, { ...rest, children: children }) }));
14
- }
15
- function useSvgLocal(key, val) {
16
- return (0, util_1.useLocalStorage)(`svg-${key}`, val);
17
- }
18
- function ExportSvgDialog({ model, handleClose, }) {
19
- const session = (0, util_1.getSession)(model);
20
- const offscreenCanvas = typeof OffscreenCanvas !== 'undefined';
21
- const [rasterizeLayers, setRasterizeLayers] = (0, react_1.useState)(offscreenCanvas);
22
- const [loading, setLoading] = (0, react_1.useState)(false);
23
- const [error, setError] = (0, react_1.useState)();
24
- const [filename, setFilename] = useSvgLocal('file', 'jbrowse.svg');
25
- const [trackLabels, setTrackLabels] = useSvgLocal('tracklabels', 'offset');
26
- const [themeName, setThemeName] = useSvgLocal('theme', session.themeName || 'default');
27
- return ((0, jsx_runtime_1.jsxs)(ui_1.Dialog, { open: true, onClose: handleClose, title: "Export SVG", children: [(0, jsx_runtime_1.jsxs)(material_1.DialogContent, { children: [error ? ((0, jsx_runtime_1.jsx)(ui_1.ErrorMessage, { error: error })) : loading ? ((0, jsx_runtime_1.jsx)(LoadingMessage, {})) : null, (0, jsx_runtime_1.jsx)(TextField2, { helperText: "filename", value: filename, onChange: event => {
28
- setFilename(event.target.value);
29
- } }), (0, jsx_runtime_1.jsxs)(TextField2, { select: true, label: "Track label positioning", variant: "outlined", style: { width: 150 }, value: trackLabels, onChange: event => {
30
- setTrackLabels(event.target.value);
31
- }, children: [(0, jsx_runtime_1.jsx)(material_1.MenuItem, { value: "offset", children: "Offset" }), (0, jsx_runtime_1.jsx)(material_1.MenuItem, { value: "overlay", children: "Overlay" }), (0, jsx_runtime_1.jsx)(material_1.MenuItem, { value: "left", children: "Left" }), (0, jsx_runtime_1.jsx)(material_1.MenuItem, { value: "none", children: "None" })] }), (0, jsx_runtime_1.jsx)("br", {}), session.allThemes ? ((0, jsx_runtime_1.jsx)(TextField2, { select: true, label: "Theme", variant: "outlined", value: themeName, onChange: event => {
32
- setThemeName(event.target.value);
33
- }, children: Object.entries(session.allThemes()).map(([key, val]) => ((0, jsx_runtime_1.jsx)(material_1.MenuItem, { value: key, children: val.name || '(Unknown name)' }, key))) })) : null, offscreenCanvas ? ((0, jsx_runtime_1.jsx)(material_1.FormControlLabel, { control: (0, jsx_runtime_1.jsx)(material_1.Checkbox, { checked: rasterizeLayers, onChange: () => {
34
- setRasterizeLayers(val => !val);
35
- } }), label: "Rasterize canvas based tracks? File may be much larger if this is turned off" })) : ((0, jsx_runtime_1.jsx)(material_1.Typography, { children: "Note: rasterizing layers not yet supported in this browser, so SVG size may be large" }))] }), (0, jsx_runtime_1.jsxs)(material_1.DialogActions, { children: [(0, jsx_runtime_1.jsx)(material_1.Button, { variant: "contained", color: "secondary", onClick: () => {
36
- handleClose();
37
- }, children: "Cancel" }), (0, jsx_runtime_1.jsx)(material_1.Button, { variant: "contained", color: "primary", type: "submit", onClick: async () => {
38
- setLoading(true);
39
- setError(undefined);
40
- try {
41
- await model.exportSvg({
42
- rasterizeLayers,
43
- filename,
44
- trackLabels,
45
- themeName,
46
- });
47
- handleClose();
48
- }
49
- catch (e) {
50
- console.error(e);
51
- setError(e);
52
- }
53
- finally {
54
- setLoading(false);
55
- }
56
- }, children: "Submit" })] })] }));
57
- }
@@ -1,5 +0,0 @@
1
- import type { BreakpointViewModel } from '../model';
2
- declare const Header: ({ model }: {
3
- model: BreakpointViewModel;
4
- }) => import("react/jsx-runtime").JSX.Element;
5
- export default Header;
@@ -1,52 +0,0 @@
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 jsx_runtime_1 = require("react/jsx-runtime");
7
- const react_1 = require("react");
8
- const CascadingMenuButton_1 = __importDefault(require("@jbrowse/core/ui/CascadingMenuButton"));
9
- const MoreVert_1 = __importDefault(require("@mui/icons-material/MoreVert"));
10
- const Search_1 = __importDefault(require("@mui/icons-material/Search"));
11
- const material_1 = require("@mui/material");
12
- const mobx_react_1 = require("mobx-react");
13
- const mui_1 = require("tss-react/mui");
14
- const HeaderSearchBoxes_1 = __importDefault(require("./HeaderSearchBoxes"));
15
- const useStyles = (0, mui_1.makeStyles)()({
16
- inline: {
17
- display: 'inline-flex',
18
- },
19
- });
20
- const Header = (0, mobx_react_1.observer)(function ({ model }) {
21
- const { classes } = useStyles();
22
- const { views } = model;
23
- const [showSearchBoxes, setShowSearchBoxes] = (0, react_1.useState)(views.length <= 3);
24
- const [sideBySide, setSideBySide] = (0, react_1.useState)(views.length <= 3);
25
- return ((0, jsx_runtime_1.jsxs)(material_1.FormGroup, { row: true, children: [(0, jsx_runtime_1.jsx)(CascadingMenuButton_1.default, { menuItems: model.menuItems(), children: (0, jsx_runtime_1.jsx)(MoreVert_1.default, {}) }), (0, jsx_runtime_1.jsx)(CascadingMenuButton_1.default, { menuItems: [
26
- {
27
- label: 'Show search boxes',
28
- type: 'checkbox',
29
- checked: showSearchBoxes,
30
- onClick: () => {
31
- setShowSearchBoxes(!showSearchBoxes);
32
- },
33
- },
34
- {
35
- label: 'Orientation - Side-by-side',
36
- type: 'radio',
37
- checked: sideBySide,
38
- onClick: () => {
39
- setSideBySide(!sideBySide);
40
- },
41
- },
42
- {
43
- label: 'Orientation - Vertical',
44
- type: 'radio',
45
- checked: !sideBySide,
46
- onClick: () => {
47
- setSideBySide(!sideBySide);
48
- },
49
- },
50
- ], children: (0, jsx_runtime_1.jsx)(Search_1.default, {}) }), showSearchBoxes ? ((0, jsx_runtime_1.jsx)("span", { className: sideBySide ? classes.inline : undefined, children: views.map(view => ((0, jsx_runtime_1.jsx)(HeaderSearchBoxes_1.default, { view: view }, view.id))) })) : null] }));
51
- });
52
- exports.default = Header;
@@ -1,5 +0,0 @@
1
- import type { LinearGenomeViewModel } from '@jbrowse/plugin-linear-genome-view';
2
- declare const HeaderSearchBoxes: ({ view, }: {
3
- view: LinearGenomeViewModel;
4
- }) => import("react/jsx-runtime").JSX.Element;
5
- export default HeaderSearchBoxes;
@@ -1,24 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const jsx_runtime_1 = require("react/jsx-runtime");
4
- const util_1 = require("@jbrowse/core/util");
5
- const plugin_linear_genome_view_1 = require("@jbrowse/plugin-linear-genome-view");
6
- const material_1 = require("@mui/material");
7
- const mobx_react_1 = require("mobx-react");
8
- const mui_1 = require("tss-react/mui");
9
- const useStyles = (0, mui_1.makeStyles)()(() => ({
10
- bp: {
11
- display: 'flex',
12
- alignItems: 'center',
13
- marginLeft: 10,
14
- },
15
- searchBox: {
16
- display: 'flex',
17
- },
18
- }));
19
- const HeaderSearchBoxes = (0, mobx_react_1.observer)(function ({ view, }) {
20
- const { classes } = useStyles();
21
- const { assemblyDisplayNames, coarseTotalBp } = view;
22
- return ((0, jsx_runtime_1.jsxs)("span", { className: classes.searchBox, children: [(0, jsx_runtime_1.jsx)(plugin_linear_genome_view_1.SearchBox, { model: view, showHelp: false }), (0, jsx_runtime_1.jsxs)(material_1.Typography, { variant: "body2", color: "textSecondary", className: classes.bp, children: [assemblyDisplayNames.join(','), " ", (0, util_1.getBpDisplayStr)(coarseTotalBp)] })] }));
23
- });
24
- exports.default = HeaderSearchBoxes;
@@ -1,8 +0,0 @@
1
- import type { BreakpointViewModel } from '../model';
2
- declare const Overlay: (props: {
3
- parentRef: React.RefObject<SVGSVGElement | null>;
4
- model: BreakpointViewModel;
5
- trackId: string;
6
- getTrackYPosOverride?: (trackId: string, level: number) => number;
7
- }) => import("react/jsx-runtime").JSX.Element | null;
8
- export default Overlay;
@@ -1,27 +0,0 @@
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 jsx_runtime_1 = require("react/jsx-runtime");
7
- const mobx_react_1 = require("mobx-react");
8
- const AlignmentConnections_1 = __importDefault(require("./AlignmentConnections"));
9
- const Breakends_1 = __importDefault(require("./Breakends"));
10
- const PairedFeatures_1 = __importDefault(require("./PairedFeatures"));
11
- const Translocations_1 = __importDefault(require("./Translocations"));
12
- const Overlay = (0, mobx_react_1.observer)(function (props) {
13
- var _a;
14
- const { model, trackId } = props;
15
- const tracks = model.getMatchedTracks(trackId);
16
- const type = (_a = tracks[0]) === null || _a === void 0 ? void 0 : _a.type;
17
- if (type === 'AlignmentsTrack') {
18
- return (0, jsx_runtime_1.jsx)(AlignmentConnections_1.default, { ...props });
19
- }
20
- else if (type === 'VariantTrack') {
21
- return model.hasTranslocations(trackId) ? ((0, jsx_runtime_1.jsx)(Translocations_1.default, { ...props })) : model.hasPairedFeatures(trackId) ? ((0, jsx_runtime_1.jsx)(PairedFeatures_1.default, { ...props })) : ((0, jsx_runtime_1.jsx)(Breakends_1.default, { ...props }));
22
- }
23
- else {
24
- return null;
25
- }
26
- });
27
- exports.default = Overlay;
@@ -1,8 +0,0 @@
1
- import type { BreakpointViewModel } from '../model';
2
- declare const PairedFeatures: ({ model, trackId, parentRef: ref, getTrackYPosOverride, }: {
3
- model: BreakpointViewModel;
4
- trackId: string;
5
- parentRef: React.RefObject<SVGSVGElement | null>;
6
- getTrackYPosOverride?: (trackId: string, level: number) => number;
7
- }) => import("react/jsx-runtime").JSX.Element | null;
8
- export default PairedFeatures;