@jbrowse/plugin-linear-genome-view 2.11.2 → 2.12.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/BaseLinearDisplay/components/Block.js +3 -3
- package/dist/BaseLinearDisplay/components/BlockMsg.js +1 -1
- package/dist/BaseLinearDisplay/models/BaseLinearDisplayModel.d.ts +22 -24
- package/dist/BaseLinearDisplay/models/FeatureDensityMixin.d.ts +2 -2
- package/dist/BaseLinearDisplay/models/FeatureDensityMixin.js +1 -1
- package/dist/BaseLinearDisplay/models/TrackHeightMixin.js +1 -1
- package/dist/BaseLinearDisplay/models/autorunFeatureDensityStats.js +1 -1
- package/dist/BaseLinearDisplay/models/renderSvg.js +1 -2
- package/dist/BaseLinearDisplay/models/serverSideRenderedBlock.d.ts +4 -4
- package/dist/BaseLinearDisplay/models/serverSideRenderedBlock.js +1 -2
- package/dist/BaseLinearDisplay/models/util.js +3 -4
- package/dist/BasicTrack/index.js +1 -1
- package/dist/FeatureTrack/index.js +1 -1
- package/dist/LaunchLinearGenomeView/index.js +1 -1
- package/dist/LinearBareDisplay/configSchema.js +1 -2
- package/dist/LinearBareDisplay/index.js +1 -1
- package/dist/LinearBareDisplay/model.d.ts +26 -33
- package/dist/LinearBareDisplay/model.js +1 -2
- package/dist/LinearBasicDisplay/index.js +1 -1
- package/dist/LinearBasicDisplay/model.d.ts +52 -53
- package/dist/LinearGenomeView/components/ExportSvgDialog.js +1 -1
- package/dist/LinearGenomeView/components/RefNameAutocomplete/AutocompleteTextField.js +1 -1
- package/dist/LinearGenomeView/components/RefNameAutocomplete/EndAdornment.js +1 -1
- package/dist/LinearGenomeView/components/RefNameAutocomplete/HelpDialog.js +1 -1
- package/dist/LinearGenomeView/components/RefNameAutocomplete/util.js +3 -4
- package/dist/LinearGenomeView/components/RubberbandSpan.js +1 -1
- package/dist/LinearGenomeView/components/SearchResultsDialog.js +1 -1
- package/dist/LinearGenomeView/components/SearchResultsTable.js +1 -1
- package/dist/LinearGenomeView/components/TrackLabel.js +4 -4
- package/dist/LinearGenomeView/components/TrackRenderingContainer.js +10 -5
- package/dist/LinearGenomeView/components/hooks.d.ts +2 -2
- package/dist/LinearGenomeView/components/hooks.js +11 -17
- package/dist/LinearGenomeView/components/util.js +4 -5
- package/dist/LinearGenomeView/index.js +1 -1
- package/dist/LinearGenomeView/model.d.ts +12 -30
- package/dist/LinearGenomeView/model.js +4 -4
- package/dist/LinearGenomeView/svgcomponents/SVGBackground.js +1 -1
- package/dist/LinearGenomeView/svgcomponents/SVGHeader.js +1 -1
- package/dist/LinearGenomeView/svgcomponents/SVGLinearGenomeView.js +2 -2
- package/dist/LinearGenomeView/svgcomponents/SVGRegionSeparators.js +1 -1
- package/dist/LinearGenomeView/svgcomponents/SVGRuler.js +1 -1
- package/dist/LinearGenomeView/svgcomponents/SVGScalebar.js +1 -1
- package/dist/LinearGenomeView/svgcomponents/SVGTrackLabel.js +1 -1
- package/dist/LinearGenomeView/svgcomponents/SVGTracks.js +1 -1
- package/dist/LinearGenomeView/svgcomponents/util.js +1 -2
- package/dist/LinearGenomeView/util.d.ts +3 -3
- package/dist/LinearGenomeView/util.js +4 -5
- package/dist/index.d.ts +81 -2352
- package/dist/searchUtils.js +5 -6
- package/esm/BaseLinearDisplay/models/BaseLinearDisplayModel.d.ts +22 -24
- package/esm/BaseLinearDisplay/models/FeatureDensityMixin.d.ts +2 -2
- package/esm/BaseLinearDisplay/models/serverSideRenderedBlock.d.ts +4 -4
- package/esm/LinearBareDisplay/model.d.ts +26 -33
- package/esm/LinearBasicDisplay/model.d.ts +52 -53
- package/esm/LinearGenomeView/components/TrackLabel.js +4 -4
- package/esm/LinearGenomeView/components/TrackRenderingContainer.js +10 -5
- package/esm/LinearGenomeView/components/hooks.d.ts +2 -2
- package/esm/LinearGenomeView/components/hooks.js +8 -10
- package/esm/LinearGenomeView/model.d.ts +12 -30
- package/esm/LinearGenomeView/model.js +3 -3
- package/esm/LinearGenomeView/util.d.ts +3 -3
- package/esm/index.d.ts +81 -2352
- package/package.json +2 -4
|
@@ -25,10 +25,7 @@ const useStyles = makeStyles()(theme => ({
|
|
|
25
25
|
},
|
|
26
26
|
},
|
|
27
27
|
trackName: {
|
|
28
|
-
margin: '0 auto',
|
|
29
|
-
width: '90%',
|
|
30
28
|
fontSize: '0.8rem',
|
|
31
|
-
pointerEvents: 'none',
|
|
32
29
|
},
|
|
33
30
|
iconButton: {
|
|
34
31
|
padding: theme.spacing(1),
|
|
@@ -82,7 +79,10 @@ const TrackLabel = observer(React.forwardRef(function TrackLabel2({ track, class
|
|
|
82
79
|
React.createElement(TrackLabelDragHandle, { track: track, trackId: trackId, view: view }),
|
|
83
80
|
React.createElement(IconButton, { onClick: () => view.hideTrack(trackId), className: classes.iconButton, title: "close this track" },
|
|
84
81
|
React.createElement(CloseIcon, { fontSize: "small" })),
|
|
85
|
-
React.createElement(Typography, { variant: "body1", component: "span", className: classes.trackName
|
|
82
|
+
React.createElement(Typography, { variant: "body1", component: "span", className: classes.trackName, onMouseDown: event => {
|
|
83
|
+
// avoid becoming a click-and-drag action on the lgv
|
|
84
|
+
event.stopPropagation();
|
|
85
|
+
} },
|
|
86
86
|
React.createElement(SanitizedHTML, { html: [trackName, minimized ? '(minimized)' : '']
|
|
87
87
|
.filter(f => !!f)
|
|
88
88
|
.join(' ') })),
|
|
@@ -26,19 +26,24 @@ const TrackRenderingContainer = observer(function ({ model, track, onDragEnter,
|
|
|
26
26
|
const { classes } = useStyles();
|
|
27
27
|
const display = track.displays[0];
|
|
28
28
|
const { height, RenderingComponent, DisplayBlurb } = display;
|
|
29
|
+
const { trackRefs, id, scaleFactor } = model;
|
|
29
30
|
const trackId = getConf(track, 'trackId');
|
|
30
31
|
const ref = useRef(null);
|
|
31
32
|
const minimized = track.minimized;
|
|
32
33
|
useEffect(() => {
|
|
33
34
|
if (ref.current) {
|
|
34
|
-
|
|
35
|
+
trackRefs[trackId] = ref.current;
|
|
35
36
|
}
|
|
36
37
|
return () => {
|
|
37
|
-
delete
|
|
38
|
+
delete trackRefs[trackId];
|
|
38
39
|
};
|
|
39
|
-
}, [
|
|
40
|
-
return (React.createElement("div", { className: classes.trackRenderingContainer, style: {
|
|
41
|
-
|
|
40
|
+
}, [trackRefs, trackId]);
|
|
41
|
+
return (React.createElement("div", { className: classes.trackRenderingContainer, style: {
|
|
42
|
+
height: minimized ? 20 : height,
|
|
43
|
+
}, onScroll: evt => display.setScrollTop(evt.currentTarget.scrollTop), onDragEnter: onDragEnter, "data-testid": `trackRenderingContainer-${id}-${trackId}` }, !minimized ? (React.createElement(React.Fragment, null,
|
|
44
|
+
React.createElement("div", { ref: ref, className: classes.renderingComponentContainer, style: {
|
|
45
|
+
transform: scaleFactor !== 1 ? `scaleX(${scaleFactor})` : undefined,
|
|
46
|
+
} },
|
|
42
47
|
React.createElement(Suspense, { fallback: React.createElement(LoadingEllipses, null) },
|
|
43
48
|
React.createElement(RenderingComponent, { model: display, onHorizontalScroll: model.horizontalScroll }))),
|
|
44
49
|
DisplayBlurb ? (React.createElement("div", { style: {
|
|
@@ -42,7 +42,7 @@ export declare function useRangeSelect(ref: React.RefObject<HTMLDivElement>, mod
|
|
|
42
42
|
offset: number;
|
|
43
43
|
start: number;
|
|
44
44
|
end: number;
|
|
45
|
-
reversed
|
|
45
|
+
reversed?: boolean;
|
|
46
46
|
};
|
|
47
47
|
rightBpOffset: {
|
|
48
48
|
coord: number;
|
|
@@ -53,7 +53,7 @@ export declare function useRangeSelect(ref: React.RefObject<HTMLDivElement>, mod
|
|
|
53
53
|
offset: number;
|
|
54
54
|
start: number;
|
|
55
55
|
end: number;
|
|
56
|
-
reversed
|
|
56
|
+
reversed?: boolean;
|
|
57
57
|
};
|
|
58
58
|
anchorPosition: AnchorPosition | undefined;
|
|
59
59
|
numOfBpSelected: number;
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { useRef, useEffect, useState } from 'react';
|
|
2
|
-
import normalizeWheel from 'normalize-wheel';
|
|
3
2
|
import { getRelativeX } from './util';
|
|
4
3
|
export function useSideScroll(model) {
|
|
5
4
|
const [mouseDragging, setMouseDragging] = useState(false);
|
|
@@ -206,11 +205,10 @@ export function useWheelScroll(ref, model) {
|
|
|
206
205
|
const curr = ref.current;
|
|
207
206
|
// if ctrl is held down, zoom in with y-scroll
|
|
208
207
|
// else scroll horizontally with x-scroll
|
|
209
|
-
function onWheel(
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
delta.current += event.pixelY / 500;
|
|
208
|
+
function onWheel(event) {
|
|
209
|
+
if (event.ctrlKey === true) {
|
|
210
|
+
event.preventDefault();
|
|
211
|
+
delta.current += event.deltaY / 500;
|
|
214
212
|
model.setScaleFactor(delta.current < 0 ? 1 - delta.current : 1 / (1 + delta.current));
|
|
215
213
|
if (timeout.current) {
|
|
216
214
|
clearTimeout(timeout.current);
|
|
@@ -219,7 +217,7 @@ export function useWheelScroll(ref, model) {
|
|
|
219
217
|
model.setScaleFactor(1);
|
|
220
218
|
model.zoomTo(delta.current > 0
|
|
221
219
|
? model.bpPerPx * (1 + delta.current)
|
|
222
|
-
: model.bpPerPx / (1 - delta.current),
|
|
220
|
+
: model.bpPerPx / (1 - delta.current), event.clientX - ((curr === null || curr === void 0 ? void 0 : curr.getBoundingClientRect().left) || 0));
|
|
223
221
|
delta.current = 0;
|
|
224
222
|
}, 300);
|
|
225
223
|
}
|
|
@@ -227,10 +225,10 @@ export function useWheelScroll(ref, model) {
|
|
|
227
225
|
// this is needed to stop the event from triggering "back button
|
|
228
226
|
// action" on MacOSX etc. but is a heuristic to avoid preventing the
|
|
229
227
|
// inner-track scroll behavior
|
|
230
|
-
if (Math.abs(event.
|
|
231
|
-
|
|
228
|
+
if (Math.abs(event.deltaX) > Math.abs(2 * event.deltaY)) {
|
|
229
|
+
event.preventDefault();
|
|
232
230
|
}
|
|
233
|
-
delta.current += event.
|
|
231
|
+
delta.current += event.deltaX;
|
|
234
232
|
if (!scheduled.current) {
|
|
235
233
|
// use rAF to make it so multiple event handlers aren't fired per-frame
|
|
236
234
|
// see https://calendar.perfplanet.com/2013/the-runtime-performance-checklist/
|
|
@@ -62,16 +62,7 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
|
|
|
62
62
|
type: import("mobx-state-tree").IType<string | undefined, string, string>;
|
|
63
63
|
offsetPx: import("mobx-state-tree").IType<number | undefined, number, number>;
|
|
64
64
|
bpPerPx: import("mobx-state-tree").IType<number | undefined, number, number>;
|
|
65
|
-
displayedRegions: import("mobx-state-tree").
|
|
66
|
-
refName: import("mobx-state-tree").ISimpleType<string>;
|
|
67
|
-
start: import("mobx-state-tree").ISimpleType<number>;
|
|
68
|
-
end: import("mobx-state-tree").ISimpleType<number>;
|
|
69
|
-
reversed: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
|
|
70
|
-
} & {
|
|
71
|
-
assemblyName: import("mobx-state-tree").ISimpleType<string>;
|
|
72
|
-
}, {
|
|
73
|
-
setRefName(newRefName: string): void;
|
|
74
|
-
}, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>>;
|
|
65
|
+
displayedRegions: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").IType<Region[], Region[], Region[]>, [undefined]>;
|
|
75
66
|
tracks: import("mobx-state-tree").IArrayType<import("mobx-state-tree").IAnyType>;
|
|
76
67
|
hideHeader: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
77
68
|
hideHeaderOverview: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
@@ -94,15 +85,15 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
|
|
|
94
85
|
} & {
|
|
95
86
|
volatileWidth: number | undefined;
|
|
96
87
|
minimumBlockWidth: number;
|
|
97
|
-
draggingTrackId:
|
|
88
|
+
draggingTrackId: undefined | string;
|
|
98
89
|
volatileError: unknown;
|
|
99
90
|
afterDisplayedRegionsSetCallbacks: Function[];
|
|
100
91
|
scaleFactor: number;
|
|
101
92
|
trackRefs: Record<string, HTMLDivElement>;
|
|
102
93
|
coarseDynamicBlocks: BaseBlock[];
|
|
103
94
|
coarseTotalBp: number;
|
|
104
|
-
leftOffset:
|
|
105
|
-
rightOffset:
|
|
95
|
+
leftOffset: undefined | BpOffset;
|
|
96
|
+
rightOffset: undefined | BpOffset;
|
|
106
97
|
} & {
|
|
107
98
|
/**
|
|
108
99
|
* #getter
|
|
@@ -336,7 +327,7 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
|
|
|
336
327
|
/**
|
|
337
328
|
* #action
|
|
338
329
|
*/
|
|
339
|
-
setTrackLabels(setting:
|
|
330
|
+
setTrackLabels(setting: "overlapping" | "offset" | "hidden"): void;
|
|
340
331
|
/**
|
|
341
332
|
* #action
|
|
342
333
|
*/
|
|
@@ -365,15 +356,15 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
|
|
|
365
356
|
start: number;
|
|
366
357
|
end: number;
|
|
367
358
|
type: string;
|
|
368
|
-
regionNumber?: number
|
|
369
|
-
reversed?: boolean
|
|
359
|
+
regionNumber?: number;
|
|
360
|
+
reversed?: boolean;
|
|
370
361
|
refName: string;
|
|
371
362
|
assemblyName: string;
|
|
372
363
|
key: string;
|
|
373
364
|
offsetPx: number;
|
|
374
365
|
widthPx: number;
|
|
375
|
-
variant?: string
|
|
376
|
-
isLeftEndOfDisplayedRegion?: boolean
|
|
366
|
+
variant?: string;
|
|
367
|
+
isLeftEndOfDisplayedRegion?: boolean;
|
|
377
368
|
}[];
|
|
378
369
|
/**
|
|
379
370
|
* #action
|
|
@@ -585,7 +576,7 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
|
|
|
585
576
|
offset: number;
|
|
586
577
|
start: number;
|
|
587
578
|
end: number;
|
|
588
|
-
reversed
|
|
579
|
+
reversed?: boolean;
|
|
589
580
|
};
|
|
590
581
|
/**
|
|
591
582
|
* #getter
|
|
@@ -599,7 +590,7 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
|
|
|
599
590
|
offset: number;
|
|
600
591
|
start: number;
|
|
601
592
|
end: number;
|
|
602
|
-
reversed
|
|
593
|
+
reversed?: boolean;
|
|
603
594
|
} | undefined;
|
|
604
595
|
} & {
|
|
605
596
|
afterCreate(): void;
|
|
@@ -612,16 +603,7 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
|
|
|
612
603
|
type: import("mobx-state-tree").IType<string | undefined, string, string>;
|
|
613
604
|
offsetPx: import("mobx-state-tree").IType<number | undefined, number, number>;
|
|
614
605
|
bpPerPx: import("mobx-state-tree").IType<number | undefined, number, number>;
|
|
615
|
-
displayedRegions: import("mobx-state-tree").
|
|
616
|
-
refName: import("mobx-state-tree").ISimpleType<string>;
|
|
617
|
-
start: import("mobx-state-tree").ISimpleType<number>;
|
|
618
|
-
end: import("mobx-state-tree").ISimpleType<number>;
|
|
619
|
-
reversed: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
|
|
620
|
-
} & {
|
|
621
|
-
assemblyName: import("mobx-state-tree").ISimpleType<string>;
|
|
622
|
-
}, {
|
|
623
|
-
setRefName(newRefName: string): void;
|
|
624
|
-
}, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>>;
|
|
606
|
+
displayedRegions: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").IType<Region[], Region[], Region[]>, [undefined]>;
|
|
625
607
|
tracks: import("mobx-state-tree").IArrayType<import("mobx-state-tree").IAnyType>;
|
|
626
608
|
hideHeader: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
627
609
|
hideHeaderOverview: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { lazy } from 'react';
|
|
2
2
|
import { getConf } from '@jbrowse/core/configuration';
|
|
3
3
|
import { BaseViewModel } from '@jbrowse/core/pluggableElementTypes/models';
|
|
4
|
-
import { ElementId
|
|
4
|
+
import { ElementId } from '@jbrowse/core/util/types/mst';
|
|
5
5
|
import { assembleLocString, clamp, findLast, getContainingView, getSession, isViewContainer, isSessionModelWithWidgets, isSessionWithAddTracks, localStorageGetItem, localStorageSetItem, measureText, springAnimate, sum, } from '@jbrowse/core/util';
|
|
6
6
|
import calculateDynamicBlocks from '@jbrowse/core/util/calculateDynamicBlocks';
|
|
7
7
|
import calculateStaticBlocks from '@jbrowse/core/util/calculateStaticBlocks';
|
|
@@ -91,7 +91,7 @@ export function stateModelFactory(pluginManager) {
|
|
|
91
91
|
* advised to use the entire set of chromosomes if your assembly is very
|
|
92
92
|
* fragmented
|
|
93
93
|
*/
|
|
94
|
-
displayedRegions: types.
|
|
94
|
+
displayedRegions: types.optional(types.frozen(), []),
|
|
95
95
|
/**
|
|
96
96
|
* #property
|
|
97
97
|
* array of currently displayed tracks state models instances
|
|
@@ -288,7 +288,7 @@ export function stateModelFactory(pluginManager) {
|
|
|
288
288
|
* #getter
|
|
289
289
|
*/
|
|
290
290
|
get totalBp() {
|
|
291
|
-
return self.displayedRegions.
|
|
291
|
+
return sum(self.displayedRegions.map(r => r.end - r.start));
|
|
292
292
|
},
|
|
293
293
|
/**
|
|
294
294
|
* #getter
|
|
@@ -23,9 +23,9 @@ export declare function makeTicks(start: number, end: number, bpPerPx: number, e
|
|
|
23
23
|
export declare function generateLocations(regions: ParsedLocString[] | undefined, assemblyManager: AssemblyManager, assemblyName?: string): Promise<{
|
|
24
24
|
assemblyName: string;
|
|
25
25
|
parentRegion: import("@jbrowse/core/assemblyManager/assembly").BasicRegion;
|
|
26
|
-
end?: number
|
|
27
|
-
start?: number
|
|
28
|
-
reversed?: boolean
|
|
26
|
+
end?: number;
|
|
27
|
+
start?: number;
|
|
28
|
+
reversed?: boolean;
|
|
29
29
|
refName: string;
|
|
30
30
|
}[]>;
|
|
31
31
|
/**
|