@jbrowse/plugin-breakpoint-split-view 2.13.1 → 2.15.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.
- package/dist/BreakpointAlignmentsFeatureDetail/BreakpointAlignmentsFeatureDetail.d.ts +4 -2
- package/dist/BreakpointAlignmentsFeatureDetail/BreakpointAlignmentsFeatureDetail.js +4 -6
- package/dist/BreakpointSplitView/BreakpointSplitView.js +4 -1
- package/dist/BreakpointSplitView/components/AlignmentConnections.js +5 -1
- package/dist/BreakpointSplitView/components/Breakends.js +5 -1
- package/dist/BreakpointSplitView/components/ExportSvgDialog.js +16 -6
- package/dist/BreakpointSplitView/components/Translocations.js +6 -2
- package/dist/BreakpointSplitView/components/util.js +4 -1
- package/dist/BreakpointSplitView/model.d.ts +9 -14
- package/dist/BreakpointSplitView/model.js +10 -13
- package/dist/BreakpointSplitView/svgcomponents/SVGBreakpointSplitView.js +0 -1
- package/esm/BreakpointAlignmentsFeatureDetail/BreakpointAlignmentsFeatureDetail.d.ts +4 -2
- package/esm/BreakpointAlignmentsFeatureDetail/BreakpointAlignmentsFeatureDetail.js +3 -5
- package/esm/BreakpointSplitView/BreakpointSplitView.js +4 -1
- package/esm/BreakpointSplitView/components/AlignmentConnections.js +5 -1
- package/esm/BreakpointSplitView/components/Breakends.js +5 -1
- package/esm/BreakpointSplitView/components/ExportSvgDialog.js +16 -6
- package/esm/BreakpointSplitView/components/Translocations.js +6 -2
- package/esm/BreakpointSplitView/components/util.js +4 -1
- package/esm/BreakpointSplitView/model.d.ts +9 -14
- package/esm/BreakpointSplitView/model.js +11 -14
- package/esm/BreakpointSplitView/svgcomponents/SVGBreakpointSplitView.js +0 -1
- package/package.json +5 -5
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
declare const BreakpointAlignmentsFeatureDetail: ({ model }: {
|
|
3
|
-
model:
|
|
2
|
+
declare const BreakpointAlignmentsFeatureDetail: ({ model, }: {
|
|
3
|
+
model: {
|
|
4
|
+
featureData: Record<string, unknown>;
|
|
5
|
+
};
|
|
4
6
|
}) => React.JSX.Element;
|
|
5
7
|
export default BreakpointAlignmentsFeatureDetail;
|
|
@@ -3,15 +3,13 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
const Paper_1 = __importDefault(require("@mui/material/Paper"));
|
|
7
|
-
const mobx_react_1 = require("mobx-react");
|
|
8
6
|
const react_1 = __importDefault(require("react"));
|
|
7
|
+
const material_1 = require("@mui/material");
|
|
8
|
+
const mobx_react_1 = require("mobx-react");
|
|
9
9
|
const BaseFeatureDetail_1 = require("@jbrowse/core/BaseFeatureWidget/BaseFeatureDetail");
|
|
10
|
-
const BreakpointAlignmentsFeatureDetail = (0, mobx_react_1.observer)(
|
|
11
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
12
|
-
({ model }) => {
|
|
10
|
+
const BreakpointAlignmentsFeatureDetail = (0, mobx_react_1.observer)(function ({ model, }) {
|
|
13
11
|
const { feature1, feature2 } = JSON.parse(JSON.stringify(model.featureData));
|
|
14
|
-
return (react_1.default.createElement(
|
|
12
|
+
return (react_1.default.createElement(material_1.Paper, { "data-testid": "alignment-side-drawer" },
|
|
15
13
|
react_1.default.createElement(BaseFeatureDetail_1.BaseCoreDetails, { title: "Feature 1", feature: feature1 }),
|
|
16
14
|
react_1.default.createElement(BaseFeatureDetail_1.BaseCoreDetails, { title: "Feature 2", feature: feature2 }),
|
|
17
15
|
react_1.default.createElement(BaseFeatureDetail_1.BaseAttributes, { title: "Feature 1 attributes", feature: feature1 }),
|
|
@@ -52,12 +52,15 @@ class BreakpointSplitViewType extends ViewType_1.default {
|
|
|
52
52
|
mateRefName = assembly.getCanonicalRefName(mate.refName);
|
|
53
53
|
endPos = mate.start;
|
|
54
54
|
}
|
|
55
|
+
else {
|
|
56
|
+
endPos = startPos + 1;
|
|
57
|
+
}
|
|
55
58
|
if (!mateRefName) {
|
|
56
59
|
throw new Error(`unable to resolve mate refName ${mateRefName} in reference genome`);
|
|
57
60
|
}
|
|
58
61
|
const bottomRegion = assembly.regions.find(f => f.refName === mateRefName);
|
|
59
62
|
if (!topRegion || !bottomRegion) {
|
|
60
|
-
throw new Error(
|
|
63
|
+
throw new Error('unable to find the refName for the top or bottom of the breakpoint view');
|
|
61
64
|
}
|
|
62
65
|
const topMarkedRegion = [{ ...topRegion }, { ...topRegion }];
|
|
63
66
|
const bottomMarkedRegion = [{ ...bottomRegion }, { ...bottomRegion }];
|
|
@@ -121,7 +121,11 @@ const AlignmentConnections = (0, mobx_react_1.observer)(function ({ model, track
|
|
|
121
121
|
},
|
|
122
122
|
});
|
|
123
123
|
(_b = session.showWidget) === null || _b === void 0 ? void 0 : _b.call(session, featureWidget);
|
|
124
|
-
}, onMouseOver: () =>
|
|
124
|
+
}, onMouseOver: () => {
|
|
125
|
+
setMouseoverElt(id);
|
|
126
|
+
}, onMouseOut: () => {
|
|
127
|
+
setMouseoverElt(undefined);
|
|
128
|
+
} }));
|
|
125
129
|
}
|
|
126
130
|
return ret;
|
|
127
131
|
}))) : null;
|
|
@@ -107,7 +107,11 @@ const Breakends = (0, mobx_react_1.observer)(function ({ model, trackId, parentR
|
|
|
107
107
|
featureData: (_b = totalFeatures.get(id)) === null || _b === void 0 ? void 0 : _b.toJSON(),
|
|
108
108
|
});
|
|
109
109
|
(_c = session.showWidget) === null || _c === void 0 ? void 0 : _c.call(session, featureWidget);
|
|
110
|
-
}, onMouseOver: () =>
|
|
110
|
+
}, onMouseOver: () => {
|
|
111
|
+
setMouseoverElt(id);
|
|
112
|
+
}, onMouseOut: () => {
|
|
113
|
+
setMouseoverElt(undefined);
|
|
114
|
+
} }));
|
|
111
115
|
}
|
|
112
116
|
}
|
|
113
117
|
return ret;
|
|
@@ -38,7 +38,7 @@ function TextField2({ children, ...rest }) {
|
|
|
38
38
|
react_1.default.createElement(material_1.TextField, { ...rest }, children)));
|
|
39
39
|
}
|
|
40
40
|
function useSvgLocal(key, val) {
|
|
41
|
-
return (0, util_1.useLocalStorage)(
|
|
41
|
+
return (0, util_1.useLocalStorage)(`svg-${key}`, val);
|
|
42
42
|
}
|
|
43
43
|
function ExportSvgDialog({ model, handleClose, }) {
|
|
44
44
|
const session = (0, util_1.getSession)(model);
|
|
@@ -52,19 +52,29 @@ function ExportSvgDialog({ model, handleClose, }) {
|
|
|
52
52
|
return (react_1.default.createElement(ui_1.Dialog, { open: true, onClose: handleClose, title: "Export SVG" },
|
|
53
53
|
react_1.default.createElement(material_1.DialogContent, null,
|
|
54
54
|
error ? (react_1.default.createElement(ui_1.ErrorMessage, { error: error })) : loading ? (react_1.default.createElement(LoadingMessage, null)) : null,
|
|
55
|
-
react_1.default.createElement(TextField2, { helperText: "filename", value: filename, onChange: event =>
|
|
56
|
-
|
|
55
|
+
react_1.default.createElement(TextField2, { helperText: "filename", value: filename, onChange: event => {
|
|
56
|
+
setFilename(event.target.value);
|
|
57
|
+
} }),
|
|
58
|
+
react_1.default.createElement(TextField2, { select: true, label: "Track label positioning", variant: "outlined", style: { width: 150 }, value: trackLabels, onChange: event => {
|
|
59
|
+
setTrackLabels(event.target.value);
|
|
60
|
+
} },
|
|
57
61
|
react_1.default.createElement(material_1.MenuItem, { value: "offset" }, "Offset"),
|
|
58
62
|
react_1.default.createElement(material_1.MenuItem, { value: "overlay" }, "Overlay"),
|
|
59
63
|
react_1.default.createElement(material_1.MenuItem, { value: "left" }, "Left"),
|
|
60
64
|
react_1.default.createElement(material_1.MenuItem, { value: "none" }, "None")),
|
|
61
65
|
react_1.default.createElement("br", null),
|
|
62
|
-
session.allThemes ? (react_1.default.createElement(TextField2, { select: true, label: "Theme", variant: "outlined", value: themeName, onChange: event =>
|
|
66
|
+
session.allThemes ? (react_1.default.createElement(TextField2, { select: true, label: "Theme", variant: "outlined", value: themeName, onChange: event => {
|
|
67
|
+
setThemeName(event.target.value);
|
|
68
|
+
} }, Object.entries(session.allThemes()).map(([key, val]) => (react_1.default.createElement(material_1.MenuItem, { key: key, value: key },
|
|
63
69
|
// @ts-expect-error
|
|
64
70
|
val.name || '(Unknown name)'))))) : null,
|
|
65
|
-
offscreenCanvas ? (react_1.default.createElement(material_1.FormControlLabel, { control: react_1.default.createElement(material_1.Checkbox, { checked: rasterizeLayers, onChange: () =>
|
|
71
|
+
offscreenCanvas ? (react_1.default.createElement(material_1.FormControlLabel, { control: react_1.default.createElement(material_1.Checkbox, { checked: rasterizeLayers, onChange: () => {
|
|
72
|
+
setRasterizeLayers(val => !val);
|
|
73
|
+
} }), 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"))),
|
|
66
74
|
react_1.default.createElement(material_1.DialogActions, null,
|
|
67
|
-
react_1.default.createElement(material_1.Button, { variant: "contained", color: "secondary", onClick: () =>
|
|
75
|
+
react_1.default.createElement(material_1.Button, { variant: "contained", color: "secondary", onClick: () => {
|
|
76
|
+
handleClose();
|
|
77
|
+
} }, "Cancel"),
|
|
68
78
|
react_1.default.createElement(material_1.Button, { variant: "contained", color: "primary", type: "submit", onClick: async () => {
|
|
69
79
|
setLoading(true);
|
|
70
80
|
setError(undefined);
|
|
@@ -102,7 +102,7 @@ const Translocations = (0, mobx_react_1.observer)(function ({ model, trackId, pa
|
|
|
102
102
|
'L', // line to
|
|
103
103
|
x1,
|
|
104
104
|
y1,
|
|
105
|
-
'L', // line to
|
|
105
|
+
'L', // line to as const
|
|
106
106
|
x2,
|
|
107
107
|
y2,
|
|
108
108
|
'L', // line to
|
|
@@ -115,7 +115,11 @@ const Translocations = (0, mobx_react_1.observer)(function ({ model, trackId, pa
|
|
|
115
115
|
featureData: (totalFeatures.get(id) || { toJSON: () => { } }).toJSON(),
|
|
116
116
|
});
|
|
117
117
|
(_b = session.showWidget) === null || _b === void 0 ? void 0 : _b.call(session, featureWidget);
|
|
118
|
-
}, onMouseOver: () =>
|
|
118
|
+
}, onMouseOver: () => {
|
|
119
|
+
setMouseoverElt(id);
|
|
120
|
+
}, onMouseOut: () => {
|
|
121
|
+
setMouseoverElt(undefined);
|
|
122
|
+
} }));
|
|
119
123
|
}
|
|
120
124
|
}
|
|
121
125
|
return ret;
|
|
@@ -70,7 +70,10 @@ function hasPairedReads(features) {
|
|
|
70
70
|
function findMatchingAlt(feat1, feat2) {
|
|
71
71
|
const alts = feat1.get('ALT');
|
|
72
72
|
if (alts) {
|
|
73
|
-
return new Map(alts
|
|
73
|
+
return new Map(alts
|
|
74
|
+
.map(alt => (0, vcf_1.parseBreakend)(alt))
|
|
75
|
+
.filter(util_1.notEmpty)
|
|
76
|
+
.map(bnd => [bnd.MatePosition, bnd])).get(`${feat2.get('refName')}:${feat2.get('start') + 1}`);
|
|
74
77
|
}
|
|
75
78
|
return undefined;
|
|
76
79
|
}
|
|
@@ -61,7 +61,7 @@ export default function stateModelFactory(pluginManager: PluginManager): import(
|
|
|
61
61
|
showCytobandsSetting: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
|
|
62
62
|
trackLabels: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
|
|
63
63
|
showGridlines: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
64
|
-
highlight: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").IArrayType<import("mobx-state-tree").IType<
|
|
64
|
+
highlight: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").IArrayType<import("mobx-state-tree").IType<import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").HighlightType, import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").HighlightType, import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").HighlightType>>, [undefined]>;
|
|
65
65
|
colorByCDS: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
|
|
66
66
|
showTrackOutlines: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
|
|
67
67
|
}, {
|
|
@@ -77,7 +77,7 @@ export default function stateModelFactory(pluginManager: PluginManager): import(
|
|
|
77
77
|
minimumBlockWidth: number;
|
|
78
78
|
draggingTrackId: undefined | string;
|
|
79
79
|
volatileError: unknown;
|
|
80
|
-
afterDisplayedRegionsSetCallbacks:
|
|
80
|
+
afterDisplayedRegionsSetCallbacks: (() => void)[];
|
|
81
81
|
scaleFactor: number;
|
|
82
82
|
trackRefs: Record<string, HTMLDivElement>;
|
|
83
83
|
coarseDynamicBlocks: import("@jbrowse/core/util/blockTypes").BaseBlock[];
|
|
@@ -90,7 +90,7 @@ export default function stateModelFactory(pluginManager: PluginManager): import(
|
|
|
90
90
|
readonly interRegionPaddingWidth: number;
|
|
91
91
|
readonly assemblyNames: string[];
|
|
92
92
|
} & {
|
|
93
|
-
scaleBarDisplayPrefix(): string;
|
|
93
|
+
scaleBarDisplayPrefix(): string | undefined;
|
|
94
94
|
MiniControlsComponent(): React.FC<any>;
|
|
95
95
|
HeaderComponent(): React.FC<any>;
|
|
96
96
|
readonly assemblyErrors: string;
|
|
@@ -105,7 +105,7 @@ export default function stateModelFactory(pluginManager: PluginManager): import(
|
|
|
105
105
|
readonly totalBp: number;
|
|
106
106
|
readonly maxBpPerPx: number;
|
|
107
107
|
readonly minBpPerPx: number;
|
|
108
|
-
readonly error:
|
|
108
|
+
readonly error: unknown;
|
|
109
109
|
readonly maxOffset: number;
|
|
110
110
|
readonly minOffset: number;
|
|
111
111
|
readonly displayedRegionsTotalPx: number;
|
|
@@ -129,9 +129,9 @@ export default function stateModelFactory(pluginManager: PluginManager): import(
|
|
|
129
129
|
setHideHeaderOverview(b: boolean): void;
|
|
130
130
|
setHideNoTracksActive(b: boolean): void;
|
|
131
131
|
setShowGridlines(b: boolean): void;
|
|
132
|
-
addToHighlights(highlight:
|
|
133
|
-
setHighlight(highlight
|
|
134
|
-
removeHighlight(highlight:
|
|
132
|
+
addToHighlights(highlight: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").HighlightType): void;
|
|
133
|
+
setHighlight(highlight?: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").HighlightType[]): void;
|
|
134
|
+
removeHighlight(highlight: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").HighlightType): void;
|
|
135
135
|
scrollTo(offsetPx: number): number;
|
|
136
136
|
zoomTo(bpPerPx: number, offset?: number, centerAtOffset?: boolean): number;
|
|
137
137
|
setOffsets(left?: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").BpOffset, right?: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").BpOffset): void;
|
|
@@ -146,7 +146,6 @@ export default function stateModelFactory(pluginManager: PluginManager): import(
|
|
|
146
146
|
moveTrackToTop(id: string): void;
|
|
147
147
|
moveTrackToBottom(id: string): void;
|
|
148
148
|
moveTrack(movingId: string, targetId: string): void;
|
|
149
|
-
closeView(): void;
|
|
150
149
|
toggleTrack(trackId: string): boolean;
|
|
151
150
|
setTrackLabels(setting: "overlapping" | "offset" | "hidden"): void;
|
|
152
151
|
setShowCenterLine(b: boolean): void;
|
|
@@ -166,7 +165,7 @@ export default function stateModelFactory(pluginManager: PluginManager): import(
|
|
|
166
165
|
variant?: string;
|
|
167
166
|
isLeftEndOfDisplayedRegion?: boolean;
|
|
168
167
|
}[];
|
|
169
|
-
afterDisplayedRegionsSet(cb:
|
|
168
|
+
afterDisplayedRegionsSet(cb: () => void): void;
|
|
170
169
|
horizontalScroll(distance: number): number;
|
|
171
170
|
center(): void;
|
|
172
171
|
showAllRegions(): void;
|
|
@@ -259,7 +258,7 @@ export default function stateModelFactory(pluginManager: PluginManager): import(
|
|
|
259
258
|
showCytobandsSetting: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
|
|
260
259
|
trackLabels: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
|
|
261
260
|
showGridlines: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
262
|
-
highlight: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").IArrayType<import("mobx-state-tree").IType<
|
|
261
|
+
highlight: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").IArrayType<import("mobx-state-tree").IType<import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").HighlightType, import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").HighlightType, import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").HighlightType>>, [undefined]>;
|
|
263
262
|
colorByCDS: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
|
|
264
263
|
showTrackOutlines: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
|
|
265
264
|
}>>, import("mobx-state-tree")._NotCustomized>>;
|
|
@@ -323,10 +322,6 @@ export default function stateModelFactory(pluginManager: PluginManager): import(
|
|
|
323
322
|
* #action
|
|
324
323
|
*/
|
|
325
324
|
removeView(view: LGV): void;
|
|
326
|
-
/**
|
|
327
|
-
* #action
|
|
328
|
-
*/
|
|
329
|
-
closeView(): void;
|
|
330
325
|
/**
|
|
331
326
|
* #action
|
|
332
327
|
*/
|
|
@@ -205,7 +205,9 @@ function stateModelFactory(pluginManager) {
|
|
|
205
205
|
*/
|
|
206
206
|
setWidth(newWidth) {
|
|
207
207
|
self.width = newWidth;
|
|
208
|
-
self.views.forEach(v =>
|
|
208
|
+
self.views.forEach(v => {
|
|
209
|
+
v.setWidth(newWidth);
|
|
210
|
+
});
|
|
209
211
|
},
|
|
210
212
|
/**
|
|
211
213
|
* #action
|
|
@@ -213,13 +215,6 @@ function stateModelFactory(pluginManager) {
|
|
|
213
215
|
removeView(view) {
|
|
214
216
|
self.views.remove(view);
|
|
215
217
|
},
|
|
216
|
-
/**
|
|
217
|
-
* #action
|
|
218
|
-
*/
|
|
219
|
-
closeView() {
|
|
220
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
221
|
-
(0, mobx_state_tree_1.getParent)(self, 2).removeView(self);
|
|
222
|
-
},
|
|
223
218
|
/**
|
|
224
219
|
* #action
|
|
225
220
|
*/
|
|
@@ -254,7 +249,6 @@ function stateModelFactory(pluginManager) {
|
|
|
254
249
|
}
|
|
255
250
|
self.setMatchedTrackFeatures(Object.fromEntries(await Promise.all(self.matchedTracks.map(async (track) => [
|
|
256
251
|
track.configuration.trackId,
|
|
257
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
258
252
|
await getBlockFeatures(self, track),
|
|
259
253
|
]))));
|
|
260
254
|
}
|
|
@@ -270,20 +264,23 @@ function stateModelFactory(pluginManager) {
|
|
|
270
264
|
menuItems() {
|
|
271
265
|
return [
|
|
272
266
|
...self.views
|
|
273
|
-
.map((view, idx) =>
|
|
274
|
-
.filter(f => !!f[1])
|
|
267
|
+
.map((view, idx) => [idx, view.menuItems()])
|
|
275
268
|
.map(f => ({ label: `View ${f[0] + 1} Menu`, subMenu: f[1] })),
|
|
276
269
|
{
|
|
277
270
|
label: 'Show intra-view links',
|
|
278
271
|
type: 'checkbox',
|
|
279
272
|
checked: self.showIntraviewLinks,
|
|
280
|
-
onClick: () =>
|
|
273
|
+
onClick: () => {
|
|
274
|
+
self.toggleIntraviewLinks();
|
|
275
|
+
},
|
|
281
276
|
},
|
|
282
277
|
{
|
|
283
278
|
label: 'Allow clicking alignment squiggles?',
|
|
284
279
|
type: 'checkbox',
|
|
285
280
|
checked: self.interactToggled,
|
|
286
|
-
onClick: () =>
|
|
281
|
+
onClick: () => {
|
|
282
|
+
self.toggleInteract();
|
|
283
|
+
},
|
|
287
284
|
},
|
|
288
285
|
{
|
|
289
286
|
label: 'Link views',
|
|
@@ -19,7 +19,6 @@ const util_2 = require("./util");
|
|
|
19
19
|
async function renderToSvg(model, opts) {
|
|
20
20
|
var _a;
|
|
21
21
|
const { textHeight = 18, headerHeight = 30, rulerHeight = 30, fontSize = 13, trackLabels = 'offset', Wrapper = ({ children }) => children, themeName = 'default', } = opts;
|
|
22
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
23
22
|
const { createRootFn } = (0, mobx_state_tree_1.getRoot)(model);
|
|
24
23
|
const session = (0, util_1.getSession)(model);
|
|
25
24
|
const theme = (_a = session.allThemes) === null || _a === void 0 ? void 0 : _a.call(session)[themeName];
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
declare const BreakpointAlignmentsFeatureDetail: ({ model }: {
|
|
3
|
-
model:
|
|
2
|
+
declare const BreakpointAlignmentsFeatureDetail: ({ model, }: {
|
|
3
|
+
model: {
|
|
4
|
+
featureData: Record<string, unknown>;
|
|
5
|
+
};
|
|
4
6
|
}) => React.JSX.Element;
|
|
5
7
|
export default BreakpointAlignmentsFeatureDetail;
|
|
@@ -1,10 +1,8 @@
|
|
|
1
|
-
import Paper from '@mui/material/Paper';
|
|
2
|
-
import { observer } from 'mobx-react';
|
|
3
1
|
import React from 'react';
|
|
2
|
+
import { Paper } from '@mui/material';
|
|
3
|
+
import { observer } from 'mobx-react';
|
|
4
4
|
import { BaseCoreDetails, BaseAttributes, } from '@jbrowse/core/BaseFeatureWidget/BaseFeatureDetail';
|
|
5
|
-
const BreakpointAlignmentsFeatureDetail = observer(
|
|
6
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
7
|
-
({ model }) => {
|
|
5
|
+
const BreakpointAlignmentsFeatureDetail = observer(function ({ model, }) {
|
|
8
6
|
const { feature1, feature2 } = JSON.parse(JSON.stringify(model.featureData));
|
|
9
7
|
return (React.createElement(Paper, { "data-testid": "alignment-side-drawer" },
|
|
10
8
|
React.createElement(BaseCoreDetails, { title: "Feature 1", feature: feature1 }),
|
|
@@ -47,12 +47,15 @@ export default class BreakpointSplitViewType extends ViewType {
|
|
|
47
47
|
mateRefName = assembly.getCanonicalRefName(mate.refName);
|
|
48
48
|
endPos = mate.start;
|
|
49
49
|
}
|
|
50
|
+
else {
|
|
51
|
+
endPos = startPos + 1;
|
|
52
|
+
}
|
|
50
53
|
if (!mateRefName) {
|
|
51
54
|
throw new Error(`unable to resolve mate refName ${mateRefName} in reference genome`);
|
|
52
55
|
}
|
|
53
56
|
const bottomRegion = assembly.regions.find(f => f.refName === mateRefName);
|
|
54
57
|
if (!topRegion || !bottomRegion) {
|
|
55
|
-
throw new Error(
|
|
58
|
+
throw new Error('unable to find the refName for the top or bottom of the breakpoint view');
|
|
56
59
|
}
|
|
57
60
|
const topMarkedRegion = [{ ...topRegion }, { ...topRegion }];
|
|
58
61
|
const bottomMarkedRegion = [{ ...bottomRegion }, { ...bottomRegion }];
|
|
@@ -96,7 +96,11 @@ const AlignmentConnections = observer(function ({ model, trackId, parentRef, get
|
|
|
96
96
|
},
|
|
97
97
|
});
|
|
98
98
|
(_b = session.showWidget) === null || _b === void 0 ? void 0 : _b.call(session, featureWidget);
|
|
99
|
-
}, onMouseOver: () =>
|
|
99
|
+
}, onMouseOver: () => {
|
|
100
|
+
setMouseoverElt(id);
|
|
101
|
+
}, onMouseOut: () => {
|
|
102
|
+
setMouseoverElt(undefined);
|
|
103
|
+
} }));
|
|
100
104
|
}
|
|
101
105
|
return ret;
|
|
102
106
|
}))) : null;
|
|
@@ -82,7 +82,11 @@ const Breakends = observer(function ({ model, trackId, parentRef: ref, getTrackY
|
|
|
82
82
|
featureData: (_b = totalFeatures.get(id)) === null || _b === void 0 ? void 0 : _b.toJSON(),
|
|
83
83
|
});
|
|
84
84
|
(_c = session.showWidget) === null || _c === void 0 ? void 0 : _c.call(session, featureWidget);
|
|
85
|
-
}, onMouseOver: () =>
|
|
85
|
+
}, onMouseOver: () => {
|
|
86
|
+
setMouseoverElt(id);
|
|
87
|
+
}, onMouseOut: () => {
|
|
88
|
+
setMouseoverElt(undefined);
|
|
89
|
+
} }));
|
|
86
90
|
}
|
|
87
91
|
}
|
|
88
92
|
return ret;
|
|
@@ -12,7 +12,7 @@ function TextField2({ children, ...rest }) {
|
|
|
12
12
|
React.createElement(TextField, { ...rest }, children)));
|
|
13
13
|
}
|
|
14
14
|
function useSvgLocal(key, val) {
|
|
15
|
-
return useLocalStorage(
|
|
15
|
+
return useLocalStorage(`svg-${key}`, val);
|
|
16
16
|
}
|
|
17
17
|
export default function ExportSvgDialog({ model, handleClose, }) {
|
|
18
18
|
const session = getSession(model);
|
|
@@ -26,19 +26,29 @@ export default function ExportSvgDialog({ model, handleClose, }) {
|
|
|
26
26
|
return (React.createElement(Dialog, { open: true, onClose: handleClose, title: "Export SVG" },
|
|
27
27
|
React.createElement(DialogContent, null,
|
|
28
28
|
error ? (React.createElement(ErrorMessage, { error: error })) : loading ? (React.createElement(LoadingMessage, null)) : null,
|
|
29
|
-
React.createElement(TextField2, { helperText: "filename", value: filename, onChange: event =>
|
|
30
|
-
|
|
29
|
+
React.createElement(TextField2, { helperText: "filename", value: filename, onChange: event => {
|
|
30
|
+
setFilename(event.target.value);
|
|
31
|
+
} }),
|
|
32
|
+
React.createElement(TextField2, { select: true, label: "Track label positioning", variant: "outlined", style: { width: 150 }, value: trackLabels, onChange: event => {
|
|
33
|
+
setTrackLabels(event.target.value);
|
|
34
|
+
} },
|
|
31
35
|
React.createElement(MenuItem, { value: "offset" }, "Offset"),
|
|
32
36
|
React.createElement(MenuItem, { value: "overlay" }, "Overlay"),
|
|
33
37
|
React.createElement(MenuItem, { value: "left" }, "Left"),
|
|
34
38
|
React.createElement(MenuItem, { value: "none" }, "None")),
|
|
35
39
|
React.createElement("br", null),
|
|
36
|
-
session.allThemes ? (React.createElement(TextField2, { select: true, label: "Theme", variant: "outlined", value: themeName, onChange: event =>
|
|
40
|
+
session.allThemes ? (React.createElement(TextField2, { select: true, label: "Theme", variant: "outlined", value: themeName, onChange: event => {
|
|
41
|
+
setThemeName(event.target.value);
|
|
42
|
+
} }, Object.entries(session.allThemes()).map(([key, val]) => (React.createElement(MenuItem, { key: key, value: key },
|
|
37
43
|
// @ts-expect-error
|
|
38
44
|
val.name || '(Unknown name)'))))) : null,
|
|
39
|
-
offscreenCanvas ? (React.createElement(FormControlLabel, { control: React.createElement(Checkbox, { checked: rasterizeLayers, onChange: () =>
|
|
45
|
+
offscreenCanvas ? (React.createElement(FormControlLabel, { control: React.createElement(Checkbox, { checked: rasterizeLayers, onChange: () => {
|
|
46
|
+
setRasterizeLayers(val => !val);
|
|
47
|
+
} }), 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"))),
|
|
40
48
|
React.createElement(DialogActions, null,
|
|
41
|
-
React.createElement(Button, { variant: "contained", color: "secondary", onClick: () =>
|
|
49
|
+
React.createElement(Button, { variant: "contained", color: "secondary", onClick: () => {
|
|
50
|
+
handleClose();
|
|
51
|
+
} }, "Cancel"),
|
|
42
52
|
React.createElement(Button, { variant: "contained", color: "primary", type: "submit", onClick: async () => {
|
|
43
53
|
setLoading(true);
|
|
44
54
|
setError(undefined);
|
|
@@ -77,7 +77,7 @@ const Translocations = observer(function ({ model, trackId, parentRef: ref, getT
|
|
|
77
77
|
'L', // line to
|
|
78
78
|
x1,
|
|
79
79
|
y1,
|
|
80
|
-
'L', // line to
|
|
80
|
+
'L', // line to as const
|
|
81
81
|
x2,
|
|
82
82
|
y2,
|
|
83
83
|
'L', // line to
|
|
@@ -90,7 +90,11 @@ const Translocations = observer(function ({ model, trackId, parentRef: ref, getT
|
|
|
90
90
|
featureData: (totalFeatures.get(id) || { toJSON: () => { } }).toJSON(),
|
|
91
91
|
});
|
|
92
92
|
(_b = session.showWidget) === null || _b === void 0 ? void 0 : _b.call(session, featureWidget);
|
|
93
|
-
}, onMouseOver: () =>
|
|
93
|
+
}, onMouseOver: () => {
|
|
94
|
+
setMouseoverElt(id);
|
|
95
|
+
}, onMouseOut: () => {
|
|
96
|
+
setMouseoverElt(undefined);
|
|
97
|
+
} }));
|
|
94
98
|
}
|
|
95
99
|
}
|
|
96
100
|
return ret;
|
|
@@ -62,7 +62,10 @@ export function hasPairedReads(features) {
|
|
|
62
62
|
export function findMatchingAlt(feat1, feat2) {
|
|
63
63
|
const alts = feat1.get('ALT');
|
|
64
64
|
if (alts) {
|
|
65
|
-
return new Map(alts
|
|
65
|
+
return new Map(alts
|
|
66
|
+
.map(alt => parseBreakend(alt))
|
|
67
|
+
.filter(notEmpty)
|
|
68
|
+
.map(bnd => [bnd.MatePosition, bnd])).get(`${feat2.get('refName')}:${feat2.get('start') + 1}`);
|
|
66
69
|
}
|
|
67
70
|
return undefined;
|
|
68
71
|
}
|
|
@@ -61,7 +61,7 @@ export default function stateModelFactory(pluginManager: PluginManager): import(
|
|
|
61
61
|
showCytobandsSetting: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
|
|
62
62
|
trackLabels: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
|
|
63
63
|
showGridlines: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
64
|
-
highlight: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").IArrayType<import("mobx-state-tree").IType<
|
|
64
|
+
highlight: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").IArrayType<import("mobx-state-tree").IType<import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").HighlightType, import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").HighlightType, import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").HighlightType>>, [undefined]>;
|
|
65
65
|
colorByCDS: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
|
|
66
66
|
showTrackOutlines: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
|
|
67
67
|
}, {
|
|
@@ -77,7 +77,7 @@ export default function stateModelFactory(pluginManager: PluginManager): import(
|
|
|
77
77
|
minimumBlockWidth: number;
|
|
78
78
|
draggingTrackId: undefined | string;
|
|
79
79
|
volatileError: unknown;
|
|
80
|
-
afterDisplayedRegionsSetCallbacks:
|
|
80
|
+
afterDisplayedRegionsSetCallbacks: (() => void)[];
|
|
81
81
|
scaleFactor: number;
|
|
82
82
|
trackRefs: Record<string, HTMLDivElement>;
|
|
83
83
|
coarseDynamicBlocks: import("@jbrowse/core/util/blockTypes").BaseBlock[];
|
|
@@ -90,7 +90,7 @@ export default function stateModelFactory(pluginManager: PluginManager): import(
|
|
|
90
90
|
readonly interRegionPaddingWidth: number;
|
|
91
91
|
readonly assemblyNames: string[];
|
|
92
92
|
} & {
|
|
93
|
-
scaleBarDisplayPrefix(): string;
|
|
93
|
+
scaleBarDisplayPrefix(): string | undefined;
|
|
94
94
|
MiniControlsComponent(): React.FC<any>;
|
|
95
95
|
HeaderComponent(): React.FC<any>;
|
|
96
96
|
readonly assemblyErrors: string;
|
|
@@ -105,7 +105,7 @@ export default function stateModelFactory(pluginManager: PluginManager): import(
|
|
|
105
105
|
readonly totalBp: number;
|
|
106
106
|
readonly maxBpPerPx: number;
|
|
107
107
|
readonly minBpPerPx: number;
|
|
108
|
-
readonly error:
|
|
108
|
+
readonly error: unknown;
|
|
109
109
|
readonly maxOffset: number;
|
|
110
110
|
readonly minOffset: number;
|
|
111
111
|
readonly displayedRegionsTotalPx: number;
|
|
@@ -129,9 +129,9 @@ export default function stateModelFactory(pluginManager: PluginManager): import(
|
|
|
129
129
|
setHideHeaderOverview(b: boolean): void;
|
|
130
130
|
setHideNoTracksActive(b: boolean): void;
|
|
131
131
|
setShowGridlines(b: boolean): void;
|
|
132
|
-
addToHighlights(highlight:
|
|
133
|
-
setHighlight(highlight
|
|
134
|
-
removeHighlight(highlight:
|
|
132
|
+
addToHighlights(highlight: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").HighlightType): void;
|
|
133
|
+
setHighlight(highlight?: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").HighlightType[]): void;
|
|
134
|
+
removeHighlight(highlight: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").HighlightType): void;
|
|
135
135
|
scrollTo(offsetPx: number): number;
|
|
136
136
|
zoomTo(bpPerPx: number, offset?: number, centerAtOffset?: boolean): number;
|
|
137
137
|
setOffsets(left?: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").BpOffset, right?: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").BpOffset): void;
|
|
@@ -146,7 +146,6 @@ export default function stateModelFactory(pluginManager: PluginManager): import(
|
|
|
146
146
|
moveTrackToTop(id: string): void;
|
|
147
147
|
moveTrackToBottom(id: string): void;
|
|
148
148
|
moveTrack(movingId: string, targetId: string): void;
|
|
149
|
-
closeView(): void;
|
|
150
149
|
toggleTrack(trackId: string): boolean;
|
|
151
150
|
setTrackLabels(setting: "overlapping" | "offset" | "hidden"): void;
|
|
152
151
|
setShowCenterLine(b: boolean): void;
|
|
@@ -166,7 +165,7 @@ export default function stateModelFactory(pluginManager: PluginManager): import(
|
|
|
166
165
|
variant?: string;
|
|
167
166
|
isLeftEndOfDisplayedRegion?: boolean;
|
|
168
167
|
}[];
|
|
169
|
-
afterDisplayedRegionsSet(cb:
|
|
168
|
+
afterDisplayedRegionsSet(cb: () => void): void;
|
|
170
169
|
horizontalScroll(distance: number): number;
|
|
171
170
|
center(): void;
|
|
172
171
|
showAllRegions(): void;
|
|
@@ -259,7 +258,7 @@ export default function stateModelFactory(pluginManager: PluginManager): import(
|
|
|
259
258
|
showCytobandsSetting: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
|
|
260
259
|
trackLabels: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
|
|
261
260
|
showGridlines: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
262
|
-
highlight: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").IArrayType<import("mobx-state-tree").IType<
|
|
261
|
+
highlight: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").IArrayType<import("mobx-state-tree").IType<import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").HighlightType, import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").HighlightType, import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").HighlightType>>, [undefined]>;
|
|
263
262
|
colorByCDS: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
|
|
264
263
|
showTrackOutlines: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
|
|
265
264
|
}>>, import("mobx-state-tree")._NotCustomized>>;
|
|
@@ -323,10 +322,6 @@ export default function stateModelFactory(pluginManager: PluginManager): import(
|
|
|
323
322
|
* #action
|
|
324
323
|
*/
|
|
325
324
|
removeView(view: LGV): void;
|
|
326
|
-
/**
|
|
327
|
-
* #action
|
|
328
|
-
*/
|
|
329
|
-
closeView(): void;
|
|
330
325
|
/**
|
|
331
326
|
* #action
|
|
332
327
|
*/
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { lazy } from 'react';
|
|
2
|
-
import { types,
|
|
2
|
+
import { types, onAction, addDisposer, getPath, } from 'mobx-state-tree';
|
|
3
3
|
import { autorun } from 'mobx';
|
|
4
4
|
import { saveAs } from 'file-saver';
|
|
5
5
|
import { BaseViewModel } from '@jbrowse/core/pluggableElementTypes/models';
|
|
@@ -176,7 +176,9 @@ export default function stateModelFactory(pluginManager) {
|
|
|
176
176
|
*/
|
|
177
177
|
setWidth(newWidth) {
|
|
178
178
|
self.width = newWidth;
|
|
179
|
-
self.views.forEach(v =>
|
|
179
|
+
self.views.forEach(v => {
|
|
180
|
+
v.setWidth(newWidth);
|
|
181
|
+
});
|
|
180
182
|
},
|
|
181
183
|
/**
|
|
182
184
|
* #action
|
|
@@ -184,13 +186,6 @@ export default function stateModelFactory(pluginManager) {
|
|
|
184
186
|
removeView(view) {
|
|
185
187
|
self.views.remove(view);
|
|
186
188
|
},
|
|
187
|
-
/**
|
|
188
|
-
* #action
|
|
189
|
-
*/
|
|
190
|
-
closeView() {
|
|
191
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
192
|
-
getParent(self, 2).removeView(self);
|
|
193
|
-
},
|
|
194
189
|
/**
|
|
195
190
|
* #action
|
|
196
191
|
*/
|
|
@@ -225,7 +220,6 @@ export default function stateModelFactory(pluginManager) {
|
|
|
225
220
|
}
|
|
226
221
|
self.setMatchedTrackFeatures(Object.fromEntries(await Promise.all(self.matchedTracks.map(async (track) => [
|
|
227
222
|
track.configuration.trackId,
|
|
228
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
229
223
|
await getBlockFeatures(self, track),
|
|
230
224
|
]))));
|
|
231
225
|
}
|
|
@@ -241,20 +235,23 @@ export default function stateModelFactory(pluginManager) {
|
|
|
241
235
|
menuItems() {
|
|
242
236
|
return [
|
|
243
237
|
...self.views
|
|
244
|
-
.map((view, idx) =>
|
|
245
|
-
.filter(f => !!f[1])
|
|
238
|
+
.map((view, idx) => [idx, view.menuItems()])
|
|
246
239
|
.map(f => ({ label: `View ${f[0] + 1} Menu`, subMenu: f[1] })),
|
|
247
240
|
{
|
|
248
241
|
label: 'Show intra-view links',
|
|
249
242
|
type: 'checkbox',
|
|
250
243
|
checked: self.showIntraviewLinks,
|
|
251
|
-
onClick: () =>
|
|
244
|
+
onClick: () => {
|
|
245
|
+
self.toggleIntraviewLinks();
|
|
246
|
+
},
|
|
252
247
|
},
|
|
253
248
|
{
|
|
254
249
|
label: 'Allow clicking alignment squiggles?',
|
|
255
250
|
type: 'checkbox',
|
|
256
251
|
checked: self.interactToggled,
|
|
257
|
-
onClick: () =>
|
|
252
|
+
onClick: () => {
|
|
253
|
+
self.toggleInteract();
|
|
254
|
+
},
|
|
258
255
|
},
|
|
259
256
|
{
|
|
260
257
|
label: 'Link views',
|
|
@@ -13,7 +13,6 @@ import { getTrackNameMaxLen, getTrackOffsets } from './util';
|
|
|
13
13
|
export async function renderToSvg(model, opts) {
|
|
14
14
|
var _a;
|
|
15
15
|
const { textHeight = 18, headerHeight = 30, rulerHeight = 30, fontSize = 13, trackLabels = 'offset', Wrapper = ({ children }) => children, themeName = 'default', } = opts;
|
|
16
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
17
16
|
const { createRootFn } = getRoot(model);
|
|
18
17
|
const session = getSession(model);
|
|
19
18
|
const theme = (_a = session.allThemes) === null || _a === void 0 ? void 0 : _a.call(session)[themeName];
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jbrowse/plugin-breakpoint-split-view",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.15.0",
|
|
4
4
|
"description": "JBrowse 2 breakpoint detail split view",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"jbrowse",
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
],
|
|
25
25
|
"scripts": {
|
|
26
26
|
"build": "npm-run-all build:*",
|
|
27
|
-
"test": "cd ../..; jest plugins/breakpoint-split-view",
|
|
27
|
+
"test": "cd ../..; jest --passWithNoTests plugins/breakpoint-split-view",
|
|
28
28
|
"prepublishOnly": "yarn test",
|
|
29
29
|
"prepack": "yarn build && yarn useDist",
|
|
30
30
|
"postpack": "yarn useSrc",
|
|
@@ -37,14 +37,14 @@
|
|
|
37
37
|
},
|
|
38
38
|
"dependencies": {
|
|
39
39
|
"@gmod/vcf": "^5.0.9",
|
|
40
|
-
"@mui/icons-material": "^
|
|
40
|
+
"@mui/icons-material": "^6.0.0",
|
|
41
41
|
"@types/file-saver": "^2.0.1",
|
|
42
42
|
"file-saver": "^2.0.0"
|
|
43
43
|
},
|
|
44
44
|
"peerDependencies": {
|
|
45
45
|
"@jbrowse/core": "^2.0.0",
|
|
46
46
|
"@jbrowse/plugin-linear-genome-view": "^2.0.0",
|
|
47
|
-
"@mui/material": "^
|
|
47
|
+
"@mui/material": "^6.0.0",
|
|
48
48
|
"mobx": "^6.0.0",
|
|
49
49
|
"mobx-react": "^9.0.0",
|
|
50
50
|
"mobx-state-tree": "^5.0.0",
|
|
@@ -58,5 +58,5 @@
|
|
|
58
58
|
"publishConfig": {
|
|
59
59
|
"access": "public"
|
|
60
60
|
},
|
|
61
|
-
"gitHead": "
|
|
61
|
+
"gitHead": "87eeb1fbf8311dbf88d5e75b5a265f03beffdda8"
|
|
62
62
|
}
|