@jbrowse/plugin-linear-comparative-view 3.3.0 → 3.4.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/LGVSyntenyDisplay/model.d.ts +1 -1
- package/dist/LinearComparativeView/model.d.ts +8 -8
- package/dist/LinearSyntenyView/model.d.ts +8 -8
- package/dist/LinearSyntenyView/svgcomponents/SVGLinearSyntenyView.js +1 -1
- package/dist/SyntenyFeatureDetail/Formatter.d.ts +3 -0
- package/dist/SyntenyFeatureDetail/Formatter.js +23 -0
- package/dist/SyntenyFeatureDetail/LinkToSyntenyView.d.ts +3 -1
- package/dist/SyntenyFeatureDetail/LinkToSyntenyView.js +7 -7
- package/dist/SyntenyFeatureDetail/SyntenyFeatureDetail.d.ts +1 -1
- package/dist/SyntenyFeatureDetail/SyntenyFeatureDetail.js +7 -3
- package/dist/SyntenyFeatureDetail/types.d.ts +1 -1
- package/esm/LGVSyntenyDisplay/model.d.ts +1 -1
- package/esm/LinearComparativeView/model.d.ts +8 -8
- package/esm/LinearSyntenyView/model.d.ts +8 -8
- package/esm/LinearSyntenyView/svgcomponents/SVGLinearSyntenyView.js +1 -1
- package/esm/SyntenyFeatureDetail/Formatter.d.ts +3 -0
- package/esm/SyntenyFeatureDetail/Formatter.js +17 -0
- package/esm/SyntenyFeatureDetail/LinkToSyntenyView.d.ts +3 -1
- package/esm/SyntenyFeatureDetail/LinkToSyntenyView.js +7 -7
- package/esm/SyntenyFeatureDetail/SyntenyFeatureDetail.d.ts +1 -1
- package/esm/SyntenyFeatureDetail/SyntenyFeatureDetail.js +7 -3
- package/esm/SyntenyFeatureDetail/types.d.ts +1 -1
- package/package.json +5 -5
|
@@ -201,7 +201,7 @@ declare function stateModelFactory(schema: AnyConfigurationSchemaType): import("
|
|
|
201
201
|
} & {
|
|
202
202
|
addBlock(key: string, block: import("@jbrowse/core/util/blockTypes").BaseBlock): void;
|
|
203
203
|
deleteBlock(key: string): void;
|
|
204
|
-
selectFeature(feature: Feature): void
|
|
204
|
+
selectFeature(feature: Feature): Promise<void>;
|
|
205
205
|
navToFeature(feature: Feature): void;
|
|
206
206
|
clearFeatureSelection(): void;
|
|
207
207
|
setFeatureIdUnderMouse(feature?: string): void;
|
|
@@ -188,13 +188,13 @@ declare function stateModelFactory(pluginManager: PluginManager): import("mobx-s
|
|
|
188
188
|
setCoarseDynamicBlocks(blocks: import("@jbrowse/core/util/blockTypes").BlockSet): void;
|
|
189
189
|
} & {
|
|
190
190
|
moveTo(start?: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").BpOffset, end?: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").BpOffset): void;
|
|
191
|
-
navToLocString(input: string, optAssemblyName?: string): Promise<void>;
|
|
191
|
+
navToLocString(input: string, optAssemblyName?: string, grow?: number): Promise<void>;
|
|
192
192
|
navToSearchString({ input, assembly, }: {
|
|
193
193
|
input: string;
|
|
194
194
|
assembly: import("@jbrowse/core/assemblyManager/assembly").Assembly;
|
|
195
195
|
}): Promise<void>;
|
|
196
|
-
navToLocation(parsedLocString: import("@jbrowse/core/util").ParsedLocString, assemblyName?: string): Promise<void>;
|
|
197
|
-
navToLocations(
|
|
196
|
+
navToLocation(parsedLocString: import("@jbrowse/core/util").ParsedLocString, assemblyName?: string, grow?: number): Promise<void>;
|
|
197
|
+
navToLocations(regions: import("@jbrowse/core/util").ParsedLocString[], assemblyName?: string, grow?: number): Promise<void>;
|
|
198
198
|
navTo(query: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").NavLocation): void;
|
|
199
199
|
navToMultiple(locations: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").NavLocation[]): void;
|
|
200
200
|
} & {
|
|
@@ -262,9 +262,9 @@ declare function stateModelFactory(pluginManager: PluginManager): import("mobx-s
|
|
|
262
262
|
displayName: string | undefined;
|
|
263
263
|
tracks: any[];
|
|
264
264
|
minimized: boolean;
|
|
265
|
-
displayedRegions: import("@jbrowse/core/util").Region[];
|
|
266
265
|
offsetPx: number;
|
|
267
266
|
bpPerPx: number;
|
|
267
|
+
displayedRegions: import("@jbrowse/core/util").Region[];
|
|
268
268
|
hideHeader: boolean;
|
|
269
269
|
hideHeaderOverview: boolean;
|
|
270
270
|
hideNoTracksActive: boolean;
|
|
@@ -503,13 +503,13 @@ declare function stateModelFactory(pluginManager: PluginManager): import("mobx-s
|
|
|
503
503
|
setCoarseDynamicBlocks(blocks: import("@jbrowse/core/util/blockTypes").BlockSet): void;
|
|
504
504
|
} & {
|
|
505
505
|
moveTo(start?: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").BpOffset, end?: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").BpOffset): void;
|
|
506
|
-
navToLocString(input: string, optAssemblyName?: string): Promise<void>;
|
|
506
|
+
navToLocString(input: string, optAssemblyName?: string, grow?: number): Promise<void>;
|
|
507
507
|
navToSearchString({ input, assembly, }: {
|
|
508
508
|
input: string;
|
|
509
509
|
assembly: import("@jbrowse/core/assemblyManager/assembly").Assembly;
|
|
510
510
|
}): Promise<void>;
|
|
511
|
-
navToLocation(parsedLocString: import("@jbrowse/core/util").ParsedLocString, assemblyName?: string): Promise<void>;
|
|
512
|
-
navToLocations(
|
|
511
|
+
navToLocation(parsedLocString: import("@jbrowse/core/util").ParsedLocString, assemblyName?: string, grow?: number): Promise<void>;
|
|
512
|
+
navToLocations(regions: import("@jbrowse/core/util").ParsedLocString[], assemblyName?: string, grow?: number): Promise<void>;
|
|
513
513
|
navTo(query: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").NavLocation): void;
|
|
514
514
|
navToMultiple(locations: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").NavLocation[]): void;
|
|
515
515
|
} & {
|
|
@@ -577,9 +577,9 @@ declare function stateModelFactory(pluginManager: PluginManager): import("mobx-s
|
|
|
577
577
|
displayName: string | undefined;
|
|
578
578
|
tracks: any[];
|
|
579
579
|
minimized: boolean;
|
|
580
|
-
displayedRegions: import("@jbrowse/core/util").Region[];
|
|
581
580
|
offsetPx: number;
|
|
582
581
|
bpPerPx: number;
|
|
582
|
+
displayedRegions: import("@jbrowse/core/util").Region[];
|
|
583
583
|
hideHeader: boolean;
|
|
584
584
|
hideHeaderOverview: boolean;
|
|
585
585
|
hideNoTracksActive: boolean;
|
|
@@ -205,13 +205,13 @@ export default function stateModelFactory(pluginManager: PluginManager): import(
|
|
|
205
205
|
setCoarseDynamicBlocks(blocks: import("@jbrowse/core/util/blockTypes").BlockSet): void;
|
|
206
206
|
} & {
|
|
207
207
|
moveTo(start?: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").BpOffset, end?: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").BpOffset): void;
|
|
208
|
-
navToLocString(input: string, optAssemblyName?: string): Promise<void>;
|
|
208
|
+
navToLocString(input: string, optAssemblyName?: string, grow?: number): Promise<void>;
|
|
209
209
|
navToSearchString({ input, assembly, }: {
|
|
210
210
|
input: string;
|
|
211
211
|
assembly: import("@jbrowse/core/assemblyManager/assembly").Assembly;
|
|
212
212
|
}): Promise<void>;
|
|
213
|
-
navToLocation(parsedLocString: import("@jbrowse/core/util").ParsedLocString, assemblyName?: string): Promise<void>;
|
|
214
|
-
navToLocations(
|
|
213
|
+
navToLocation(parsedLocString: import("@jbrowse/core/util").ParsedLocString, assemblyName?: string, grow?: number): Promise<void>;
|
|
214
|
+
navToLocations(regions: import("@jbrowse/core/util").ParsedLocString[], assemblyName?: string, grow?: number): Promise<void>;
|
|
215
215
|
navTo(query: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").NavLocation): void;
|
|
216
216
|
navToMultiple(locations: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").NavLocation[]): void;
|
|
217
217
|
} & {
|
|
@@ -279,9 +279,9 @@ export default function stateModelFactory(pluginManager: PluginManager): import(
|
|
|
279
279
|
displayName: string | undefined;
|
|
280
280
|
tracks: any[];
|
|
281
281
|
minimized: boolean;
|
|
282
|
-
displayedRegions: import("@jbrowse/core/util").Region[];
|
|
283
282
|
offsetPx: number;
|
|
284
283
|
bpPerPx: number;
|
|
284
|
+
displayedRegions: import("@jbrowse/core/util").Region[];
|
|
285
285
|
hideHeader: boolean;
|
|
286
286
|
hideHeaderOverview: boolean;
|
|
287
287
|
hideNoTracksActive: boolean;
|
|
@@ -587,13 +587,13 @@ export default function stateModelFactory(pluginManager: PluginManager): import(
|
|
|
587
587
|
setCoarseDynamicBlocks(blocks: import("@jbrowse/core/util/blockTypes").BlockSet): void;
|
|
588
588
|
} & {
|
|
589
589
|
moveTo(start?: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").BpOffset, end?: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").BpOffset): void;
|
|
590
|
-
navToLocString(input: string, optAssemblyName?: string): Promise<void>;
|
|
590
|
+
navToLocString(input: string, optAssemblyName?: string, grow?: number): Promise<void>;
|
|
591
591
|
navToSearchString({ input, assembly, }: {
|
|
592
592
|
input: string;
|
|
593
593
|
assembly: import("@jbrowse/core/assemblyManager/assembly").Assembly;
|
|
594
594
|
}): Promise<void>;
|
|
595
|
-
navToLocation(parsedLocString: import("@jbrowse/core/util").ParsedLocString, assemblyName?: string): Promise<void>;
|
|
596
|
-
navToLocations(
|
|
595
|
+
navToLocation(parsedLocString: import("@jbrowse/core/util").ParsedLocString, assemblyName?: string, grow?: number): Promise<void>;
|
|
596
|
+
navToLocations(regions: import("@jbrowse/core/util").ParsedLocString[], assemblyName?: string, grow?: number): Promise<void>;
|
|
597
597
|
navTo(query: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").NavLocation): void;
|
|
598
598
|
navToMultiple(locations: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").NavLocation[]): void;
|
|
599
599
|
} & {
|
|
@@ -661,9 +661,9 @@ export default function stateModelFactory(pluginManager: PluginManager): import(
|
|
|
661
661
|
displayName: string | undefined;
|
|
662
662
|
tracks: any[];
|
|
663
663
|
minimized: boolean;
|
|
664
|
-
displayedRegions: import("@jbrowse/core/util").Region[];
|
|
665
664
|
offsetPx: number;
|
|
666
665
|
bpPerPx: number;
|
|
666
|
+
displayedRegions: import("@jbrowse/core/util").Region[];
|
|
667
667
|
hideHeader: boolean;
|
|
668
668
|
hideHeaderOverview: boolean;
|
|
669
669
|
hideNoTracksActive: boolean;
|
|
@@ -73,7 +73,7 @@ async function renderToSvg(model, opts) {
|
|
|
73
73
|
const rendering = renderings[i - 1];
|
|
74
74
|
const height = heights[i];
|
|
75
75
|
const levelHeight = level.height || 0;
|
|
76
|
-
RenderList.push((0, jsx_runtime_1.jsxs)("g", { transform: `translate(0 ${currOffset})`, children: [levelHeight ? ((0, jsx_runtime_1.jsx)("defs", { children: (0, jsx_runtime_1.jsx)("clipPath", { id: `synclip-${i}`, children: (0, jsx_runtime_1.jsx)("rect", { x: 0, y: 0, width: width, height: levelHeight }) }) })) : null, (0, jsx_runtime_1.jsx)("g", { transform: `translate(${shift + trackLabelOffset} ${fontSize})`, clipPath: `url(#synclip-${i})`, children: rendering === null || rendering === void 0 ? void 0 : rendering.map((r, i) => (
|
|
76
|
+
RenderList.push((0, jsx_runtime_1.jsxs)("g", { transform: `translate(0 ${currOffset})`, children: [levelHeight ? ((0, jsx_runtime_1.jsx)("defs", { children: (0, jsx_runtime_1.jsx)("clipPath", { id: `synclip-${i}`, children: (0, jsx_runtime_1.jsx)("rect", { x: 0, y: 0, width: width, height: levelHeight }) }) })) : null, (0, jsx_runtime_1.jsx)("g", { transform: `translate(${shift + trackLabelOffset} ${fontSize})`, clipPath: `url(#synclip-${i})`, children: rendering === null || rendering === void 0 ? void 0 : rendering.map((r, i) => (0, jsx_runtime_1.jsx)(util_1.ReactRendering, { rendering: r }, i)) }), (0, jsx_runtime_1.jsx)("g", { transform: `translate(0 ${levelHeight})`, children: (0, jsx_runtime_1.jsx)(SVGLinearGenomeView_1.default, { rulerHeight: rulerHeight, shift: shift, trackLabelOffset: trackLabelOffset, textHeight: textHeight, trackLabels: trackLabels, displayResults: displayResults[i], view: view, fontSize: fontSize }, view.id) })] }, view.id));
|
|
77
77
|
currOffset += height + fontSize + rulerHeight + levelHeight;
|
|
78
78
|
}
|
|
79
79
|
return (0, util_1.renderToStaticMarkup)((0, jsx_runtime_1.jsx)(material_1.ThemeProvider, { theme: theme, children: (0, jsx_runtime_1.jsx)(Wrapper, { children: (0, jsx_runtime_1.jsxs)("svg", { width: width, height: totalHeightSvg, xmlns: "http://www.w3.org/2000/svg", xmlnsXlink: "http://www.w3.org/1999/xlink", viewBox: [0, 0, w + shift * 2, totalHeightSvg].toString(), children: [(0, jsx_runtime_1.jsx)(SVGBackground_1.default, { width: w, height: totalHeightSvg, shift: shift }), RenderList] }) }) }));
|
|
@@ -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
|
+
exports.default = Formatter;
|
|
7
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
8
|
+
const react_1 = require("react");
|
|
9
|
+
const copy_to_clipboard_1 = __importDefault(require("copy-to-clipboard"));
|
|
10
|
+
function Formatter({ value }) {
|
|
11
|
+
const [show, setShow] = (0, react_1.useState)(false);
|
|
12
|
+
const [copied, setCopied] = (0, react_1.useState)(false);
|
|
13
|
+
const display = String(value);
|
|
14
|
+
return display.length > 100 ? ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("button", { type: "button", onClick: () => {
|
|
15
|
+
(0, copy_to_clipboard_1.default)(display);
|
|
16
|
+
setCopied(true);
|
|
17
|
+
setTimeout(() => {
|
|
18
|
+
setCopied(false);
|
|
19
|
+
}, 700);
|
|
20
|
+
}, children: copied ? 'Copied to clipboard' : 'Copy' }), (0, jsx_runtime_1.jsx)("button", { type: "button", onClick: () => {
|
|
21
|
+
setShow(val => !val);
|
|
22
|
+
}, children: show ? 'Show less' : 'Show more' }), (0, jsx_runtime_1.jsx)("div", { children: show ? display : `${display.slice(0, 100)}...` })] })) : ((0, jsx_runtime_1.jsx)("div", { children: display }));
|
|
23
|
+
}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import type { SyntenyFeatureDetailModel } from './types';
|
|
2
|
-
|
|
2
|
+
import type { SimpleFeatureSerialized } from '@jbrowse/core/util';
|
|
3
|
+
declare const LinkToSyntenyView: ({ model, feat, }: {
|
|
3
4
|
model: SyntenyFeatureDetailModel;
|
|
5
|
+
feat: SimpleFeatureSerialized;
|
|
4
6
|
}) => import("react/jsx-runtime").JSX.Element;
|
|
5
7
|
export default LinkToSyntenyView;
|
|
@@ -39,19 +39,19 @@ const util_1 = require("@jbrowse/core/util");
|
|
|
39
39
|
const material_1 = require("@mui/material");
|
|
40
40
|
const mobx_react_1 = require("mobx-react");
|
|
41
41
|
const LaunchSyntenyViewDialog = (0, react_1.lazy)(() => Promise.resolve().then(() => __importStar(require('../LGVSyntenyDisplay/components/LaunchSyntenyViewDialog'))));
|
|
42
|
-
const LinkToSyntenyView = (0, mobx_react_1.observer)(function ({ model, }) {
|
|
43
|
-
const {
|
|
42
|
+
const LinkToSyntenyView = (0, mobx_react_1.observer)(function ({ model, feat, }) {
|
|
43
|
+
const { view, level, trackId } = model;
|
|
44
44
|
return ((0, jsx_runtime_1.jsxs)("ul", { children: [view.type === 'LinearSyntenyView' ? ((0, jsx_runtime_1.jsx)("li", { children: (0, jsx_runtime_1.jsx)(material_1.Link, { href: "#", onClick: event => {
|
|
45
45
|
var _a, _b;
|
|
46
46
|
event.preventDefault();
|
|
47
47
|
const { views } = view;
|
|
48
48
|
if (level !== undefined) {
|
|
49
|
-
(_a = views[level]) === null || _a === void 0 ? void 0 : _a.navTo(
|
|
50
|
-
(_b = views[level + 1]) === null || _b === void 0 ? void 0 : _b.navTo(
|
|
49
|
+
(_a = views[level]) === null || _a === void 0 ? void 0 : _a.navTo(feat);
|
|
50
|
+
(_b = views[level + 1]) === null || _b === void 0 ? void 0 : _b.navTo(feat.mate);
|
|
51
51
|
}
|
|
52
52
|
else {
|
|
53
|
-
const f1 =
|
|
54
|
-
const f2 =
|
|
53
|
+
const f1 = feat;
|
|
54
|
+
const f2 = feat.mate;
|
|
55
55
|
const r1 = f1.assemblyName;
|
|
56
56
|
const r2 = f2.assemblyName;
|
|
57
57
|
const v1 = views.find(view => view.assemblyNames[0] === r1);
|
|
@@ -71,7 +71,7 @@ const LinkToSyntenyView = (0, mobx_react_1.observer)(function ({ model, }) {
|
|
|
71
71
|
}
|
|
72
72
|
}, children: "Center view on this feature" }) })) : null, (0, jsx_runtime_1.jsx)("li", { children: (0, jsx_runtime_1.jsx)(material_1.Link, { href: "#", onClick: event => {
|
|
73
73
|
event.preventDefault();
|
|
74
|
-
const feature = new util_1.SimpleFeature(
|
|
74
|
+
const feature = new util_1.SimpleFeature(feat);
|
|
75
75
|
const session = (0, util_1.getSession)(model);
|
|
76
76
|
session.queueDialog(handleClose => [
|
|
77
77
|
LaunchSyntenyViewDialog,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { SyntenyFeatureDetailModel } from './types';
|
|
2
|
-
declare const SyntenyFeatureDetail: (
|
|
2
|
+
declare const SyntenyFeatureDetail: (props: {
|
|
3
3
|
model: SyntenyFeatureDetailModel;
|
|
4
4
|
}) => import("react/jsx-runtime").JSX.Element;
|
|
5
5
|
export default SyntenyFeatureDetail;
|
|
@@ -4,12 +4,16 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
7
|
-
const BaseFeatureDetail_1 = __importDefault(require("@jbrowse/core/BaseFeatureWidget/BaseFeatureDetail"));
|
|
8
7
|
const BaseCard_1 = __importDefault(require("@jbrowse/core/BaseFeatureWidget/BaseFeatureDetail/BaseCard"));
|
|
8
|
+
const FeatureDetails_1 = __importDefault(require("@jbrowse/core/BaseFeatureWidget/BaseFeatureDetail/FeatureDetails"));
|
|
9
9
|
const material_1 = require("@mui/material");
|
|
10
10
|
const mobx_react_1 = require("mobx-react");
|
|
11
|
+
const Formatter_1 = __importDefault(require("./Formatter"));
|
|
11
12
|
const LinkToSyntenyView_1 = __importDefault(require("./LinkToSyntenyView"));
|
|
12
|
-
const SyntenyFeatureDetail = (0, mobx_react_1.observer)(function (
|
|
13
|
-
|
|
13
|
+
const SyntenyFeatureDetail = (0, mobx_react_1.observer)(function (props) {
|
|
14
|
+
const { model } = props;
|
|
15
|
+
const { featureData } = model;
|
|
16
|
+
const feat = structuredClone(featureData);
|
|
17
|
+
return feat ? ((0, jsx_runtime_1.jsxs)(material_1.Paper, { children: [(0, jsx_runtime_1.jsx)(FeatureDetails_1.default, { ...props, feature: feat, formatter: value => (0, jsx_runtime_1.jsx)(Formatter_1.default, { value: value }) }), (0, jsx_runtime_1.jsx)(BaseCard_1.default, { title: "Link to view", children: (0, jsx_runtime_1.jsx)(LinkToSyntenyView_1.default, { model: model, feat: feat }) })] })) : ((0, jsx_runtime_1.jsx)("div", { children: "No feature loaded, may not be available after page refresh because it was too large for localStorage" }));
|
|
14
18
|
});
|
|
15
19
|
exports.default = SyntenyFeatureDetail;
|
|
@@ -201,7 +201,7 @@ declare function stateModelFactory(schema: AnyConfigurationSchemaType): import("
|
|
|
201
201
|
} & {
|
|
202
202
|
addBlock(key: string, block: import("@jbrowse/core/util/blockTypes").BaseBlock): void;
|
|
203
203
|
deleteBlock(key: string): void;
|
|
204
|
-
selectFeature(feature: Feature): void
|
|
204
|
+
selectFeature(feature: Feature): Promise<void>;
|
|
205
205
|
navToFeature(feature: Feature): void;
|
|
206
206
|
clearFeatureSelection(): void;
|
|
207
207
|
setFeatureIdUnderMouse(feature?: string): void;
|
|
@@ -188,13 +188,13 @@ declare function stateModelFactory(pluginManager: PluginManager): import("mobx-s
|
|
|
188
188
|
setCoarseDynamicBlocks(blocks: import("@jbrowse/core/util/blockTypes").BlockSet): void;
|
|
189
189
|
} & {
|
|
190
190
|
moveTo(start?: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").BpOffset, end?: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").BpOffset): void;
|
|
191
|
-
navToLocString(input: string, optAssemblyName?: string): Promise<void>;
|
|
191
|
+
navToLocString(input: string, optAssemblyName?: string, grow?: number): Promise<void>;
|
|
192
192
|
navToSearchString({ input, assembly, }: {
|
|
193
193
|
input: string;
|
|
194
194
|
assembly: import("@jbrowse/core/assemblyManager/assembly").Assembly;
|
|
195
195
|
}): Promise<void>;
|
|
196
|
-
navToLocation(parsedLocString: import("@jbrowse/core/util").ParsedLocString, assemblyName?: string): Promise<void>;
|
|
197
|
-
navToLocations(
|
|
196
|
+
navToLocation(parsedLocString: import("@jbrowse/core/util").ParsedLocString, assemblyName?: string, grow?: number): Promise<void>;
|
|
197
|
+
navToLocations(regions: import("@jbrowse/core/util").ParsedLocString[], assemblyName?: string, grow?: number): Promise<void>;
|
|
198
198
|
navTo(query: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").NavLocation): void;
|
|
199
199
|
navToMultiple(locations: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").NavLocation[]): void;
|
|
200
200
|
} & {
|
|
@@ -262,9 +262,9 @@ declare function stateModelFactory(pluginManager: PluginManager): import("mobx-s
|
|
|
262
262
|
displayName: string | undefined;
|
|
263
263
|
tracks: any[];
|
|
264
264
|
minimized: boolean;
|
|
265
|
-
displayedRegions: import("@jbrowse/core/util").Region[];
|
|
266
265
|
offsetPx: number;
|
|
267
266
|
bpPerPx: number;
|
|
267
|
+
displayedRegions: import("@jbrowse/core/util").Region[];
|
|
268
268
|
hideHeader: boolean;
|
|
269
269
|
hideHeaderOverview: boolean;
|
|
270
270
|
hideNoTracksActive: boolean;
|
|
@@ -503,13 +503,13 @@ declare function stateModelFactory(pluginManager: PluginManager): import("mobx-s
|
|
|
503
503
|
setCoarseDynamicBlocks(blocks: import("@jbrowse/core/util/blockTypes").BlockSet): void;
|
|
504
504
|
} & {
|
|
505
505
|
moveTo(start?: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").BpOffset, end?: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").BpOffset): void;
|
|
506
|
-
navToLocString(input: string, optAssemblyName?: string): Promise<void>;
|
|
506
|
+
navToLocString(input: string, optAssemblyName?: string, grow?: number): Promise<void>;
|
|
507
507
|
navToSearchString({ input, assembly, }: {
|
|
508
508
|
input: string;
|
|
509
509
|
assembly: import("@jbrowse/core/assemblyManager/assembly").Assembly;
|
|
510
510
|
}): Promise<void>;
|
|
511
|
-
navToLocation(parsedLocString: import("@jbrowse/core/util").ParsedLocString, assemblyName?: string): Promise<void>;
|
|
512
|
-
navToLocations(
|
|
511
|
+
navToLocation(parsedLocString: import("@jbrowse/core/util").ParsedLocString, assemblyName?: string, grow?: number): Promise<void>;
|
|
512
|
+
navToLocations(regions: import("@jbrowse/core/util").ParsedLocString[], assemblyName?: string, grow?: number): Promise<void>;
|
|
513
513
|
navTo(query: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").NavLocation): void;
|
|
514
514
|
navToMultiple(locations: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").NavLocation[]): void;
|
|
515
515
|
} & {
|
|
@@ -577,9 +577,9 @@ declare function stateModelFactory(pluginManager: PluginManager): import("mobx-s
|
|
|
577
577
|
displayName: string | undefined;
|
|
578
578
|
tracks: any[];
|
|
579
579
|
minimized: boolean;
|
|
580
|
-
displayedRegions: import("@jbrowse/core/util").Region[];
|
|
581
580
|
offsetPx: number;
|
|
582
581
|
bpPerPx: number;
|
|
582
|
+
displayedRegions: import("@jbrowse/core/util").Region[];
|
|
583
583
|
hideHeader: boolean;
|
|
584
584
|
hideHeaderOverview: boolean;
|
|
585
585
|
hideNoTracksActive: boolean;
|
|
@@ -205,13 +205,13 @@ export default function stateModelFactory(pluginManager: PluginManager): import(
|
|
|
205
205
|
setCoarseDynamicBlocks(blocks: import("@jbrowse/core/util/blockTypes").BlockSet): void;
|
|
206
206
|
} & {
|
|
207
207
|
moveTo(start?: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").BpOffset, end?: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").BpOffset): void;
|
|
208
|
-
navToLocString(input: string, optAssemblyName?: string): Promise<void>;
|
|
208
|
+
navToLocString(input: string, optAssemblyName?: string, grow?: number): Promise<void>;
|
|
209
209
|
navToSearchString({ input, assembly, }: {
|
|
210
210
|
input: string;
|
|
211
211
|
assembly: import("@jbrowse/core/assemblyManager/assembly").Assembly;
|
|
212
212
|
}): Promise<void>;
|
|
213
|
-
navToLocation(parsedLocString: import("@jbrowse/core/util").ParsedLocString, assemblyName?: string): Promise<void>;
|
|
214
|
-
navToLocations(
|
|
213
|
+
navToLocation(parsedLocString: import("@jbrowse/core/util").ParsedLocString, assemblyName?: string, grow?: number): Promise<void>;
|
|
214
|
+
navToLocations(regions: import("@jbrowse/core/util").ParsedLocString[], assemblyName?: string, grow?: number): Promise<void>;
|
|
215
215
|
navTo(query: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").NavLocation): void;
|
|
216
216
|
navToMultiple(locations: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").NavLocation[]): void;
|
|
217
217
|
} & {
|
|
@@ -279,9 +279,9 @@ export default function stateModelFactory(pluginManager: PluginManager): import(
|
|
|
279
279
|
displayName: string | undefined;
|
|
280
280
|
tracks: any[];
|
|
281
281
|
minimized: boolean;
|
|
282
|
-
displayedRegions: import("@jbrowse/core/util").Region[];
|
|
283
282
|
offsetPx: number;
|
|
284
283
|
bpPerPx: number;
|
|
284
|
+
displayedRegions: import("@jbrowse/core/util").Region[];
|
|
285
285
|
hideHeader: boolean;
|
|
286
286
|
hideHeaderOverview: boolean;
|
|
287
287
|
hideNoTracksActive: boolean;
|
|
@@ -587,13 +587,13 @@ export default function stateModelFactory(pluginManager: PluginManager): import(
|
|
|
587
587
|
setCoarseDynamicBlocks(blocks: import("@jbrowse/core/util/blockTypes").BlockSet): void;
|
|
588
588
|
} & {
|
|
589
589
|
moveTo(start?: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").BpOffset, end?: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").BpOffset): void;
|
|
590
|
-
navToLocString(input: string, optAssemblyName?: string): Promise<void>;
|
|
590
|
+
navToLocString(input: string, optAssemblyName?: string, grow?: number): Promise<void>;
|
|
591
591
|
navToSearchString({ input, assembly, }: {
|
|
592
592
|
input: string;
|
|
593
593
|
assembly: import("@jbrowse/core/assemblyManager/assembly").Assembly;
|
|
594
594
|
}): Promise<void>;
|
|
595
|
-
navToLocation(parsedLocString: import("@jbrowse/core/util").ParsedLocString, assemblyName?: string): Promise<void>;
|
|
596
|
-
navToLocations(
|
|
595
|
+
navToLocation(parsedLocString: import("@jbrowse/core/util").ParsedLocString, assemblyName?: string, grow?: number): Promise<void>;
|
|
596
|
+
navToLocations(regions: import("@jbrowse/core/util").ParsedLocString[], assemblyName?: string, grow?: number): Promise<void>;
|
|
597
597
|
navTo(query: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").NavLocation): void;
|
|
598
598
|
navToMultiple(locations: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").NavLocation[]): void;
|
|
599
599
|
} & {
|
|
@@ -661,9 +661,9 @@ export default function stateModelFactory(pluginManager: PluginManager): import(
|
|
|
661
661
|
displayName: string | undefined;
|
|
662
662
|
tracks: any[];
|
|
663
663
|
minimized: boolean;
|
|
664
|
-
displayedRegions: import("@jbrowse/core/util").Region[];
|
|
665
664
|
offsetPx: number;
|
|
666
665
|
bpPerPx: number;
|
|
666
|
+
displayedRegions: import("@jbrowse/core/util").Region[];
|
|
667
667
|
hideHeader: boolean;
|
|
668
668
|
hideHeaderOverview: boolean;
|
|
669
669
|
hideNoTracksActive: boolean;
|
|
@@ -67,7 +67,7 @@ export async function renderToSvg(model, opts) {
|
|
|
67
67
|
const rendering = renderings[i - 1];
|
|
68
68
|
const height = heights[i];
|
|
69
69
|
const levelHeight = level.height || 0;
|
|
70
|
-
RenderList.push(_jsxs("g", { transform: `translate(0 ${currOffset})`, children: [levelHeight ? (_jsx("defs", { children: _jsx("clipPath", { id: `synclip-${i}`, children: _jsx("rect", { x: 0, y: 0, width: width, height: levelHeight }) }) })) : null, _jsx("g", { transform: `translate(${shift + trackLabelOffset} ${fontSize})`, clipPath: `url(#synclip-${i})`, children: rendering === null || rendering === void 0 ? void 0 : rendering.map((r, i) =>
|
|
70
|
+
RenderList.push(_jsxs("g", { transform: `translate(0 ${currOffset})`, children: [levelHeight ? (_jsx("defs", { children: _jsx("clipPath", { id: `synclip-${i}`, children: _jsx("rect", { x: 0, y: 0, width: width, height: levelHeight }) }) })) : null, _jsx("g", { transform: `translate(${shift + trackLabelOffset} ${fontSize})`, clipPath: `url(#synclip-${i})`, children: rendering === null || rendering === void 0 ? void 0 : rendering.map((r, i) => _jsx(ReactRendering, { rendering: r }, i)) }), _jsx("g", { transform: `translate(0 ${levelHeight})`, children: _jsx(SVGLinearGenomeView, { rulerHeight: rulerHeight, shift: shift, trackLabelOffset: trackLabelOffset, textHeight: textHeight, trackLabels: trackLabels, displayResults: displayResults[i], view: view, fontSize: fontSize }, view.id) })] }, view.id));
|
|
71
71
|
currOffset += height + fontSize + rulerHeight + levelHeight;
|
|
72
72
|
}
|
|
73
73
|
return renderToStaticMarkup(_jsx(ThemeProvider, { theme: theme, children: _jsx(Wrapper, { children: _jsxs("svg", { width: width, height: totalHeightSvg, xmlns: "http://www.w3.org/2000/svg", xmlnsXlink: "http://www.w3.org/1999/xlink", viewBox: [0, 0, w + shift * 2, totalHeightSvg].toString(), children: [_jsx(SVGBackground, { width: w, height: totalHeightSvg, shift: shift }), RenderList] }) }) }));
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useState } from 'react';
|
|
3
|
+
import copy from 'copy-to-clipboard';
|
|
4
|
+
export default function Formatter({ value }) {
|
|
5
|
+
const [show, setShow] = useState(false);
|
|
6
|
+
const [copied, setCopied] = useState(false);
|
|
7
|
+
const display = String(value);
|
|
8
|
+
return display.length > 100 ? (_jsxs(_Fragment, { children: [_jsx("button", { type: "button", onClick: () => {
|
|
9
|
+
copy(display);
|
|
10
|
+
setCopied(true);
|
|
11
|
+
setTimeout(() => {
|
|
12
|
+
setCopied(false);
|
|
13
|
+
}, 700);
|
|
14
|
+
}, children: copied ? 'Copied to clipboard' : 'Copy' }), _jsx("button", { type: "button", onClick: () => {
|
|
15
|
+
setShow(val => !val);
|
|
16
|
+
}, children: show ? 'Show less' : 'Show more' }), _jsx("div", { children: show ? display : `${display.slice(0, 100)}...` })] })) : (_jsx("div", { children: display }));
|
|
17
|
+
}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import type { SyntenyFeatureDetailModel } from './types';
|
|
2
|
-
|
|
2
|
+
import type { SimpleFeatureSerialized } from '@jbrowse/core/util';
|
|
3
|
+
declare const LinkToSyntenyView: ({ model, feat, }: {
|
|
3
4
|
model: SyntenyFeatureDetailModel;
|
|
5
|
+
feat: SimpleFeatureSerialized;
|
|
4
6
|
}) => import("react/jsx-runtime").JSX.Element;
|
|
5
7
|
export default LinkToSyntenyView;
|
|
@@ -4,19 +4,19 @@ import { SimpleFeature, assembleLocString, getSession, } from '@jbrowse/core/uti
|
|
|
4
4
|
import { Link } from '@mui/material';
|
|
5
5
|
import { observer } from 'mobx-react';
|
|
6
6
|
const LaunchSyntenyViewDialog = lazy(() => import('../LGVSyntenyDisplay/components/LaunchSyntenyViewDialog'));
|
|
7
|
-
const LinkToSyntenyView = observer(function ({ model, }) {
|
|
8
|
-
const {
|
|
7
|
+
const LinkToSyntenyView = observer(function ({ model, feat, }) {
|
|
8
|
+
const { view, level, trackId } = model;
|
|
9
9
|
return (_jsxs("ul", { children: [view.type === 'LinearSyntenyView' ? (_jsx("li", { children: _jsx(Link, { href: "#", onClick: event => {
|
|
10
10
|
var _a, _b;
|
|
11
11
|
event.preventDefault();
|
|
12
12
|
const { views } = view;
|
|
13
13
|
if (level !== undefined) {
|
|
14
|
-
(_a = views[level]) === null || _a === void 0 ? void 0 : _a.navTo(
|
|
15
|
-
(_b = views[level + 1]) === null || _b === void 0 ? void 0 : _b.navTo(
|
|
14
|
+
(_a = views[level]) === null || _a === void 0 ? void 0 : _a.navTo(feat);
|
|
15
|
+
(_b = views[level + 1]) === null || _b === void 0 ? void 0 : _b.navTo(feat.mate);
|
|
16
16
|
}
|
|
17
17
|
else {
|
|
18
|
-
const f1 =
|
|
19
|
-
const f2 =
|
|
18
|
+
const f1 = feat;
|
|
19
|
+
const f2 = feat.mate;
|
|
20
20
|
const r1 = f1.assemblyName;
|
|
21
21
|
const r2 = f2.assemblyName;
|
|
22
22
|
const v1 = views.find(view => view.assemblyNames[0] === r1);
|
|
@@ -36,7 +36,7 @@ const LinkToSyntenyView = observer(function ({ model, }) {
|
|
|
36
36
|
}
|
|
37
37
|
}, children: "Center view on this feature" }) })) : null, _jsx("li", { children: _jsx(Link, { href: "#", onClick: event => {
|
|
38
38
|
event.preventDefault();
|
|
39
|
-
const feature = new SimpleFeature(
|
|
39
|
+
const feature = new SimpleFeature(feat);
|
|
40
40
|
const session = getSession(model);
|
|
41
41
|
session.queueDialog(handleClose => [
|
|
42
42
|
LaunchSyntenyViewDialog,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { SyntenyFeatureDetailModel } from './types';
|
|
2
|
-
declare const SyntenyFeatureDetail: (
|
|
2
|
+
declare const SyntenyFeatureDetail: (props: {
|
|
3
3
|
model: SyntenyFeatureDetailModel;
|
|
4
4
|
}) => import("react/jsx-runtime").JSX.Element;
|
|
5
5
|
export default SyntenyFeatureDetail;
|
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import BaseFeatureDetail from '@jbrowse/core/BaseFeatureWidget/BaseFeatureDetail';
|
|
3
2
|
import BaseCard from '@jbrowse/core/BaseFeatureWidget/BaseFeatureDetail/BaseCard';
|
|
3
|
+
import FeatureDetails from '@jbrowse/core/BaseFeatureWidget/BaseFeatureDetail/FeatureDetails';
|
|
4
4
|
import { Paper } from '@mui/material';
|
|
5
5
|
import { observer } from 'mobx-react';
|
|
6
|
+
import Formatter from './Formatter';
|
|
6
7
|
import LinkToSyntenyView from './LinkToSyntenyView';
|
|
7
|
-
const SyntenyFeatureDetail = observer(function (
|
|
8
|
-
|
|
8
|
+
const SyntenyFeatureDetail = observer(function (props) {
|
|
9
|
+
const { model } = props;
|
|
10
|
+
const { featureData } = model;
|
|
11
|
+
const feat = structuredClone(featureData);
|
|
12
|
+
return feat ? (_jsxs(Paper, { children: [_jsx(FeatureDetails, { ...props, feature: feat, formatter: value => _jsx(Formatter, { value: value }) }), _jsx(BaseCard, { title: "Link to view", children: _jsx(LinkToSyntenyView, { model: model, feat: feat }) })] })) : (_jsx("div", { children: "No feature loaded, may not be available after page refresh because it was too large for localStorage" }));
|
|
9
13
|
});
|
|
10
14
|
export default SyntenyFeatureDetail;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jbrowse/plugin-linear-comparative-view",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.4.0",
|
|
4
4
|
"description": "JBrowse 2 linear comparative view",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"jbrowse",
|
|
@@ -36,9 +36,9 @@
|
|
|
36
36
|
"clean": "rimraf dist esm *.tsbuildinfo"
|
|
37
37
|
},
|
|
38
38
|
"dependencies": {
|
|
39
|
-
"@jbrowse/core": "^3.
|
|
40
|
-
"@jbrowse/plugin-alignments": "^3.
|
|
41
|
-
"@jbrowse/plugin-linear-genome-view": "^3.
|
|
39
|
+
"@jbrowse/core": "^3.4.0",
|
|
40
|
+
"@jbrowse/plugin-alignments": "^3.4.0",
|
|
41
|
+
"@jbrowse/plugin-linear-genome-view": "^3.4.0",
|
|
42
42
|
"@mui/icons-material": "^7.0.0",
|
|
43
43
|
"@mui/material": "^7.0.0",
|
|
44
44
|
"copy-to-clipboard": "^3.3.1",
|
|
@@ -59,5 +59,5 @@
|
|
|
59
59
|
"publishConfig": {
|
|
60
60
|
"access": "public"
|
|
61
61
|
},
|
|
62
|
-
"gitHead": "
|
|
62
|
+
"gitHead": "a9f1ac35fc2dd810bae92cdaf1fc19995bee4413"
|
|
63
63
|
}
|