@jbrowse/plugin-linear-genome-view 2.10.3 → 2.11.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/Tooltip.js +1 -0
- package/dist/BaseLinearDisplay/models/serverSideRenderedBlock.js +0 -1
- package/dist/BasicTrack/index.d.ts +1 -2
- package/dist/BasicTrack/index.js +3 -2
- package/dist/FeatureTrack/index.d.ts +1 -2
- package/dist/FeatureTrack/index.js +3 -2
- package/dist/LaunchLinearGenomeView/index.d.ts +1 -2
- package/dist/LaunchLinearGenomeView/index.js +17 -8
- package/dist/LinearBareDisplay/index.d.ts +1 -2
- package/dist/LinearBareDisplay/index.js +3 -2
- package/dist/LinearBasicDisplay/components/SetMaxHeight.d.ts +1 -1
- package/dist/LinearBasicDisplay/index.d.ts +1 -2
- package/dist/LinearBasicDisplay/index.js +3 -2
- package/dist/LinearGenomeView/components/Cytobands.d.ts +1 -125
- package/dist/LinearGenomeView/components/Cytobands.js +11 -12
- package/dist/LinearGenomeView/components/ExportSvgDialog.js +9 -5
- package/dist/LinearGenomeView/components/Highlight.d.ts +3 -3
- package/dist/LinearGenomeView/components/Highlight.js +21 -17
- package/dist/LinearGenomeView/components/MiniControls.js +13 -15
- package/dist/LinearGenomeView/components/OverviewHighlight.d.ts +1 -1
- package/dist/LinearGenomeView/components/OverviewHighlight.js +20 -11
- package/dist/LinearGenomeView/components/OverviewRubberband.d.ts +1 -1
- package/dist/LinearGenomeView/components/OverviewScalebar.js +4 -1
- package/dist/LinearGenomeView/components/OverviewScalebarPolygon.d.ts +1 -1
- package/dist/LinearGenomeView/components/OverviewScalebarPolygon.js +2 -1
- package/dist/LinearGenomeView/components/RefNameAutocomplete/index.d.ts +9 -9
- package/dist/LinearGenomeView/components/RefNameAutocomplete/index.js +28 -35
- package/dist/LinearGenomeView/components/Rubberband.d.ts +1 -1
- package/dist/LinearGenomeView/components/SearchBox.d.ts +1 -1
- package/dist/LinearGenomeView/components/SearchResultsTable.js +1 -1
- package/dist/LinearGenomeView/components/TrackContainer.js +10 -23
- package/dist/LinearGenomeView/components/TrackLabel.js +33 -6
- package/dist/LinearGenomeView/components/ZoomControls.js +4 -4
- package/dist/LinearGenomeView/model.d.ts +67 -7
- package/dist/LinearGenomeView/model.js +102 -16
- package/dist/LinearGenomeView/svgcomponents/SVGHeader.js +1 -1
- package/dist/LinearGenomeView/svgcomponents/SVGLinearGenomeView.js +1 -1
- package/dist/LinearGenomeView/svgcomponents/SVGTrackLabel.js +1 -1
- package/dist/index.d.ts +159 -21
- package/esm/BaseLinearDisplay/components/Tooltip.js +1 -0
- package/esm/BaseLinearDisplay/models/serverSideRenderedBlock.js +0 -1
- package/esm/BasicTrack/index.d.ts +1 -2
- package/esm/BasicTrack/index.js +2 -2
- package/esm/FeatureTrack/index.d.ts +1 -2
- package/esm/FeatureTrack/index.js +2 -2
- package/esm/LaunchLinearGenomeView/index.d.ts +1 -2
- package/esm/LaunchLinearGenomeView/index.js +16 -8
- package/esm/LinearBareDisplay/index.d.ts +1 -2
- package/esm/LinearBareDisplay/index.js +2 -2
- package/esm/LinearBasicDisplay/components/SetMaxHeight.d.ts +1 -1
- package/esm/LinearBasicDisplay/index.d.ts +1 -2
- package/esm/LinearBasicDisplay/index.js +2 -2
- package/esm/LinearGenomeView/components/Cytobands.d.ts +1 -125
- package/esm/LinearGenomeView/components/Cytobands.js +11 -12
- package/esm/LinearGenomeView/components/ExportSvgDialog.js +9 -5
- package/esm/LinearGenomeView/components/Highlight.d.ts +3 -3
- package/esm/LinearGenomeView/components/Highlight.js +21 -17
- package/esm/LinearGenomeView/components/MiniControls.js +14 -16
- package/esm/LinearGenomeView/components/OverviewHighlight.d.ts +1 -1
- package/esm/LinearGenomeView/components/OverviewHighlight.js +20 -11
- package/esm/LinearGenomeView/components/OverviewRubberband.d.ts +1 -1
- package/esm/LinearGenomeView/components/OverviewScalebar.js +5 -2
- package/esm/LinearGenomeView/components/OverviewScalebarPolygon.d.ts +1 -1
- package/esm/LinearGenomeView/components/OverviewScalebarPolygon.js +2 -1
- package/esm/LinearGenomeView/components/RefNameAutocomplete/index.d.ts +9 -9
- package/esm/LinearGenomeView/components/RefNameAutocomplete/index.js +28 -35
- package/esm/LinearGenomeView/components/Rubberband.d.ts +1 -1
- package/esm/LinearGenomeView/components/SearchBox.d.ts +1 -1
- package/esm/LinearGenomeView/components/SearchResultsTable.js +1 -1
- package/esm/LinearGenomeView/components/TrackContainer.js +10 -23
- package/esm/LinearGenomeView/components/TrackLabel.js +33 -6
- package/esm/LinearGenomeView/components/TracksContainer.js +2 -2
- package/esm/LinearGenomeView/components/ZoomControls.js +4 -4
- package/esm/LinearGenomeView/model.d.ts +67 -7
- package/esm/LinearGenomeView/model.js +103 -17
- package/esm/LinearGenomeView/svgcomponents/SVGHeader.js +1 -1
- package/esm/LinearGenomeView/svgcomponents/SVGLinearGenomeView.js +1 -1
- package/esm/LinearGenomeView/svgcomponents/SVGTrackLabel.js +2 -2
- package/esm/index.d.ts +159 -21
- package/package.json +2 -2
|
@@ -146,6 +146,7 @@ const Scalebar = (0, mobx_react_1.observer)(function ({ model, scale, overview,
|
|
|
146
146
|
const { classes } = useStyles();
|
|
147
147
|
const theme = (0, material_1.useTheme)();
|
|
148
148
|
const { dynamicBlocks, showCytobands, cytobandOffset } = model;
|
|
149
|
+
const { pluginManager } = (0, util_1.getEnv)(model);
|
|
149
150
|
const visibleRegions = dynamicBlocks.contentBlocks;
|
|
150
151
|
const overviewVisibleRegions = overview.dynamicBlocks;
|
|
151
152
|
const { tertiary, primary } = theme.palette;
|
|
@@ -166,6 +167,7 @@ const Scalebar = (0, mobx_react_1.observer)(function ({ model, scale, overview,
|
|
|
166
167
|
}) || 0;
|
|
167
168
|
const color = showCytobands ? '#f00' : scalebarColor;
|
|
168
169
|
const transparency = showCytobands ? 0.1 : 0.3;
|
|
170
|
+
const additional = pluginManager.evaluateExtensionPoint('LinearGenomeView-OverviewScalebarComponent', undefined, { model, overview });
|
|
169
171
|
return (react_1.default.createElement("div", { className: classes.scalebar },
|
|
170
172
|
react_1.default.createElement("div", { className: classes.scalebarVisibleRegion, style: {
|
|
171
173
|
width: lastOverviewPx - firstOverviewPx,
|
|
@@ -181,7 +183,8 @@ const Scalebar = (0, mobx_react_1.observer)(function ({ model, scale, overview,
|
|
|
181
183
|
backgroundImage: 'repeating-linear-gradient(90deg, transparent, transparent 1px, rgba(255,255,255,.5) 1px, rgba(255,255,255,.5) 3px)',
|
|
182
184
|
} })) : (react_1.default.createElement(OverviewBox, { scale: scale, block: block, model: model, overview: overview, key: `${JSON.stringify(block)}-${idx}` }));
|
|
183
185
|
}),
|
|
184
|
-
react_1.default.createElement(OverviewHighlight_1.default, { model: model, overview: overview })
|
|
186
|
+
react_1.default.createElement(OverviewHighlight_1.default, { model: model, overview: overview }),
|
|
187
|
+
additional));
|
|
185
188
|
});
|
|
186
189
|
const OverviewScalebar = (0, mobx_react_1.observer)(function ({ model, children, }) {
|
|
187
190
|
const { classes } = useStyles();
|
|
@@ -4,6 +4,6 @@ import { LinearGenomeViewModel } from '..';
|
|
|
4
4
|
declare const OverviewScalebarPolygon: ({ model, overview, useOffset, }: {
|
|
5
5
|
model: LinearGenomeViewModel;
|
|
6
6
|
overview: Base1DViewModel;
|
|
7
|
-
useOffset?: boolean
|
|
7
|
+
useOffset?: boolean;
|
|
8
8
|
}) => React.JSX.Element | null;
|
|
9
9
|
export default OverviewScalebarPolygon;
|
|
@@ -8,6 +8,7 @@ const material_1 = require("@mui/material");
|
|
|
8
8
|
const mobx_react_1 = require("mobx-react");
|
|
9
9
|
// locals
|
|
10
10
|
const __1 = require("..");
|
|
11
|
+
const util_1 = require("@jbrowse/core/util");
|
|
11
12
|
const OverviewScalebarPolygon = (0, mobx_react_1.observer)(function ({ model, overview, useOffset = true, }) {
|
|
12
13
|
const theme = (0, material_1.useTheme)();
|
|
13
14
|
const multiplier = Number(useOffset);
|
|
@@ -41,6 +42,6 @@ const OverviewScalebarPolygon = (0, mobx_react_1.observer)(function ({ model, ov
|
|
|
41
42
|
[topRight, 0],
|
|
42
43
|
[topLeft, 0],
|
|
43
44
|
];
|
|
44
|
-
return (react_1.default.createElement("polygon", { points: points.toString(),
|
|
45
|
+
return (react_1.default.createElement("polygon", { points: points.toString(), ...(0, util_1.getFillProps)((0, material_1.alpha)(polygonColor, 0.3)), ...(0, util_1.getStrokeProps)((0, material_1.alpha)(polygonColor, 0.8)) }));
|
|
45
46
|
});
|
|
46
47
|
exports.default = OverviewScalebarPolygon;
|
|
@@ -4,15 +4,15 @@ import { TextFieldProps as TFP } from '@mui/material';
|
|
|
4
4
|
import { LinearGenomeViewModel } from '../../model';
|
|
5
5
|
declare const RefNameAutocomplete: ({ model, onSelect, assemblyName, style, fetchResults, onChange, value, showHelp, minWidth, maxWidth, TextFieldProps, }: {
|
|
6
6
|
model: LinearGenomeViewModel;
|
|
7
|
-
onSelect?: (
|
|
8
|
-
onChange?: (
|
|
9
|
-
assemblyName?: string
|
|
10
|
-
value?: string
|
|
7
|
+
onSelect?: (region: BaseResult) => void;
|
|
8
|
+
onChange?: (val: string) => void;
|
|
9
|
+
assemblyName?: string;
|
|
10
|
+
value?: string;
|
|
11
11
|
fetchResults: (query: string) => Promise<BaseResult[]>;
|
|
12
|
-
style?: React.CSSProperties
|
|
13
|
-
minWidth?: number
|
|
14
|
-
maxWidth?: number
|
|
15
|
-
showHelp?: boolean
|
|
16
|
-
TextFieldProps?: TFP
|
|
12
|
+
style?: React.CSSProperties;
|
|
13
|
+
minWidth?: number;
|
|
14
|
+
maxWidth?: number;
|
|
15
|
+
showHelp?: boolean;
|
|
16
|
+
TextFieldProps?: TFP;
|
|
17
17
|
}) => React.JSX.Element;
|
|
18
18
|
export default RefNameAutocomplete;
|
|
@@ -45,7 +45,8 @@ const RefNameAutocomplete = (0, mobx_react_1.observer)(function ({ model, onSele
|
|
|
45
45
|
const assembly = assemblyName ? assemblyManager.get(assemblyName) : undefined;
|
|
46
46
|
const { coarseVisibleLocStrings, hasDisplayedRegions } = model;
|
|
47
47
|
(0, react_1.useEffect)(() => {
|
|
48
|
-
|
|
48
|
+
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
49
|
+
;
|
|
49
50
|
(async () => {
|
|
50
51
|
try {
|
|
51
52
|
if (debouncedSearch === '' || !assemblyName) {
|
|
@@ -53,21 +54,14 @@ const RefNameAutocomplete = (0, mobx_react_1.observer)(function ({ model, onSele
|
|
|
53
54
|
}
|
|
54
55
|
setLoaded(false);
|
|
55
56
|
const results = await fetchResults(debouncedSearch);
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
setSearchOptions((0, util_2.getDeduplicatedResult)(results));
|
|
59
|
-
}
|
|
57
|
+
setLoaded(true);
|
|
58
|
+
setSearchOptions((0, util_2.getDeduplicatedResult)(results));
|
|
60
59
|
}
|
|
61
60
|
catch (e) {
|
|
62
61
|
console.error(e);
|
|
63
|
-
|
|
64
|
-
session.notify(`${e}`, 'error');
|
|
65
|
-
}
|
|
62
|
+
session.notifyError(`${e}`, e);
|
|
66
63
|
}
|
|
67
64
|
})();
|
|
68
|
-
return () => {
|
|
69
|
-
active = false;
|
|
70
|
-
};
|
|
71
65
|
}, [assemblyName, fetchResults, debouncedSearch, session, model]);
|
|
72
66
|
const inputBoxVal = coarseVisibleLocStrings || value || '';
|
|
73
67
|
// heuristic, text width + 60 accommodates help icon and search icon
|
|
@@ -82,29 +76,28 @@ const RefNameAutocomplete = (0, mobx_react_1.observer)(function ({ model, onSele
|
|
|
82
76
|
}))) || [], [regions]);
|
|
83
77
|
// notes on implementation:
|
|
84
78
|
// The selectOnFocus setting helps highlight the field when clicked
|
|
85
|
-
return (react_1.default.createElement(
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
}, options: (searchOptions === null || searchOptions === void 0 ? void 0 : searchOptions.length) ? searchOptions : regionOptions, getOptionDisabled: option => option.group === 'limitOption', filterOptions: (opts, { inputValue }) => (0, util_2.getFiltered)(opts, inputValue), renderInput: params => (react_1.default.createElement(AutocompleteTextField_1.default, { showHelp: showHelp, params: params, inputBoxVal: inputBoxVal, TextFieldProps: TextFieldProps, setCurrentSearch: setCurrentSearch, setInputValue: setInputValue })), getOptionLabel: opt => typeof opt === 'string' ? opt : opt.result.getDisplayString() })));
|
|
79
|
+
return (react_1.default.createElement(material_1.Autocomplete, { "data-testid": "autocomplete", disableListWrap: true, disableClearable: true, disabled: !assemblyName, freeSolo: true, includeInputInList: true, selectOnFocus: true, style: { ...style, width }, value: inputBoxVal, loading: !loaded, inputValue: inputValue, onInputChange: (_event, newInputValue) => {
|
|
80
|
+
setInputValue(newInputValue);
|
|
81
|
+
onChange === null || onChange === void 0 ? void 0 : onChange(newInputValue);
|
|
82
|
+
}, loadingText: "loading results", open: open, onOpen: () => setOpen(true), onClose: () => {
|
|
83
|
+
setOpen(false);
|
|
84
|
+
setLoaded(true);
|
|
85
|
+
if (hasDisplayedRegions) {
|
|
86
|
+
setCurrentSearch('');
|
|
87
|
+
setSearchOptions(undefined);
|
|
88
|
+
}
|
|
89
|
+
}, onChange: (_event, selectedOption) => {
|
|
90
|
+
if (!selectedOption || !assemblyName) {
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
if (typeof selectedOption === 'string') {
|
|
94
|
+
// handles string inputs on keyPress enter
|
|
95
|
+
onSelect === null || onSelect === void 0 ? void 0 : onSelect(new BaseResults_1.default({ label: selectedOption }));
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
onSelect === null || onSelect === void 0 ? void 0 : onSelect(selectedOption.result);
|
|
99
|
+
}
|
|
100
|
+
setInputValue(inputBoxVal);
|
|
101
|
+
}, options: (searchOptions === null || searchOptions === void 0 ? void 0 : searchOptions.length) ? searchOptions : regionOptions, getOptionDisabled: option => option.group === 'limitOption', filterOptions: (opts, { inputValue }) => (0, util_2.getFiltered)(opts, inputValue), renderInput: params => (react_1.default.createElement(AutocompleteTextField_1.default, { showHelp: showHelp, params: params, inputBoxVal: inputBoxVal, TextFieldProps: TextFieldProps, setCurrentSearch: setCurrentSearch, setInputValue: setInputValue })), getOptionLabel: opt => typeof opt === 'string' ? opt : opt.result.getDisplayString() }));
|
|
109
102
|
});
|
|
110
103
|
exports.default = RefNameAutocomplete;
|
|
@@ -3,6 +3,6 @@ import { LinearGenomeViewModel } from '..';
|
|
|
3
3
|
type LGV = LinearGenomeViewModel;
|
|
4
4
|
declare const Rubberband: ({ model, ControlComponent, }: {
|
|
5
5
|
model: LGV;
|
|
6
|
-
ControlComponent?: React.ReactElement
|
|
6
|
+
ControlComponent?: React.ReactElement;
|
|
7
7
|
}) => React.JSX.Element;
|
|
8
8
|
export default Rubberband;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { LinearGenomeViewModel } from '..';
|
|
3
3
|
declare const SearchBox: ({ model, showHelp, }: {
|
|
4
|
-
showHelp?: boolean
|
|
4
|
+
showHelp?: boolean;
|
|
5
5
|
model: LinearGenomeViewModel;
|
|
6
6
|
}) => React.JSX.Element;
|
|
7
7
|
export default SearchBox;
|
|
@@ -74,7 +74,7 @@ function SearchResultsTable({ searchResults, assemblyName: optAssemblyName, mode
|
|
|
74
74
|
}
|
|
75
75
|
catch (e) {
|
|
76
76
|
console.error(e);
|
|
77
|
-
session.
|
|
77
|
+
session.notifyError(`${e}`, e);
|
|
78
78
|
}
|
|
79
79
|
handleClose();
|
|
80
80
|
}, color: "primary", variant: "contained" }, "Go")))))))));
|
|
@@ -33,7 +33,6 @@ const mobx_react_1 = require("mobx-react");
|
|
|
33
33
|
const mobx_state_tree_1 = require("mobx-state-tree");
|
|
34
34
|
const react_error_boundary_1 = require("react-error-boundary");
|
|
35
35
|
const ui_1 = require("@jbrowse/core/ui");
|
|
36
|
-
const util_1 = require("@jbrowse/core/util");
|
|
37
36
|
const TrackLabelContainer_1 = __importDefault(require("./TrackLabelContainer"));
|
|
38
37
|
const TrackRenderingContainer_1 = __importDefault(require("./TrackRenderingContainer"));
|
|
39
38
|
const useStyles = (0, mui_1.makeStyles)()({
|
|
@@ -46,40 +45,28 @@ const useStyles = (0, mui_1.makeStyles)()({
|
|
|
46
45
|
position: 'relative',
|
|
47
46
|
zIndex: 2,
|
|
48
47
|
},
|
|
49
|
-
overlay: {
|
|
50
|
-
pointerEvents: 'none',
|
|
51
|
-
position: 'absolute',
|
|
52
|
-
top: 0,
|
|
53
|
-
left: 0,
|
|
54
|
-
width: '100%',
|
|
55
|
-
zIndex: 3,
|
|
56
|
-
},
|
|
57
48
|
});
|
|
58
49
|
const TrackContainer = (0, mobx_react_1.observer)(function ({ model, track, }) {
|
|
59
50
|
const { classes } = useStyles();
|
|
60
51
|
const display = track.displays[0];
|
|
61
52
|
const { draggingTrackId } = model;
|
|
62
|
-
const
|
|
63
|
-
|
|
64
|
-
const debouncedOnDragEnter = (0, util_1.useDebouncedCallback)(() => {
|
|
65
|
-
if ((0, mobx_state_tree_1.isAlive)(display) && dimmed) {
|
|
66
|
-
model.moveTrack(draggingTrackId, track.id);
|
|
67
|
-
}
|
|
68
|
-
}, 100);
|
|
69
|
-
return (react_1.default.createElement(material_1.Paper, { ref: ref2, className: classes.root, variant: "outlined", onClick: event => {
|
|
53
|
+
const ref = (0, react_1.useRef)(null);
|
|
54
|
+
return (react_1.default.createElement(material_1.Paper, { ref: ref, className: classes.root, variant: "outlined", onClick: event => {
|
|
70
55
|
var _a;
|
|
71
56
|
if (event.detail === 2 && !track.displays[0].featureIdUnderMouse) {
|
|
72
|
-
const left = ((_a =
|
|
57
|
+
const left = ((_a = ref.current) === null || _a === void 0 ? void 0 : _a.getBoundingClientRect().left) || 0;
|
|
73
58
|
model.zoomTo(model.bpPerPx / 2, event.clientX - left, true);
|
|
74
59
|
}
|
|
75
60
|
} },
|
|
76
61
|
react_1.default.createElement(TrackLabelContainer_1.default, { track: track, view: model }),
|
|
77
62
|
react_1.default.createElement(react_error_boundary_1.ErrorBoundary, { FallbackComponent: e => react_1.default.createElement(ui_1.ErrorMessage, { error: e.error }) },
|
|
78
|
-
react_1.default.createElement(TrackRenderingContainer_1.default, { model: model, track: track, onDragEnter:
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
63
|
+
react_1.default.createElement(TrackRenderingContainer_1.default, { model: model, track: track, onDragEnter: () => {
|
|
64
|
+
if ((0, mobx_state_tree_1.isAlive)(display) &&
|
|
65
|
+
draggingTrackId !== undefined &&
|
|
66
|
+
draggingTrackId !== display.id) {
|
|
67
|
+
model.moveTrack(draggingTrackId, track.id);
|
|
68
|
+
}
|
|
69
|
+
} })),
|
|
83
70
|
react_1.default.createElement(ui_1.ResizeHandle, { onDrag: display.resizeHeight, className: classes.resizeHandle })));
|
|
84
71
|
});
|
|
85
72
|
exports.default = TrackContainer;
|
|
@@ -17,6 +17,10 @@ const MoreVert_1 = __importDefault(require("@mui/icons-material/MoreVert"));
|
|
|
17
17
|
const Close_1 = __importDefault(require("@mui/icons-material/Close"));
|
|
18
18
|
const Minimize_1 = __importDefault(require("@mui/icons-material/Minimize"));
|
|
19
19
|
const Add_1 = __importDefault(require("@mui/icons-material/Add"));
|
|
20
|
+
const KeyboardDoubleArrowDown_1 = __importDefault(require("@mui/icons-material/KeyboardDoubleArrowDown"));
|
|
21
|
+
const KeyboardDoubleArrowUp_1 = __importDefault(require("@mui/icons-material/KeyboardDoubleArrowUp"));
|
|
22
|
+
const KeyboardArrowDown_1 = __importDefault(require("@mui/icons-material/KeyboardArrowDown"));
|
|
23
|
+
const KeyboardArrowUp_1 = __importDefault(require("@mui/icons-material/KeyboardArrowUp"));
|
|
20
24
|
const TrackLabelDragHandle_1 = __importDefault(require("./TrackLabelDragHandle"));
|
|
21
25
|
const useStyles = (0, mui_1.makeStyles)()(theme => ({
|
|
22
26
|
root: {
|
|
@@ -24,9 +28,6 @@ const useStyles = (0, mui_1.makeStyles)()(theme => ({
|
|
|
24
28
|
'&:hover': {
|
|
25
29
|
background: theme.palette.background.paper,
|
|
26
30
|
},
|
|
27
|
-
transition: theme.transitions.create(['background'], {
|
|
28
|
-
duration: theme.transitions.duration.shortest,
|
|
29
|
-
}),
|
|
30
31
|
},
|
|
31
32
|
trackName: {
|
|
32
33
|
margin: '0 auto',
|
|
@@ -49,9 +50,35 @@ const TrackLabel = (0, mobx_react_1.observer)(react_1.default.forwardRef(functio
|
|
|
49
50
|
const trackName = (0, tracks_1.getTrackName)(trackConf, session);
|
|
50
51
|
const items = [
|
|
51
52
|
{
|
|
52
|
-
label:
|
|
53
|
-
|
|
54
|
-
|
|
53
|
+
label: 'Track order',
|
|
54
|
+
type: 'subMenu',
|
|
55
|
+
subMenu: [
|
|
56
|
+
{
|
|
57
|
+
label: minimized ? 'Restore track' : 'Minimize track',
|
|
58
|
+
icon: minimized ? Add_1.default : Minimize_1.default,
|
|
59
|
+
onClick: () => track.setMinimized(!minimized),
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
label: 'Move track to top',
|
|
63
|
+
icon: KeyboardDoubleArrowUp_1.default,
|
|
64
|
+
onClick: () => view.moveTrackToTop(track.id),
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
label: 'Move track up',
|
|
68
|
+
icon: KeyboardArrowUp_1.default,
|
|
69
|
+
onClick: () => view.moveTrackUp(track.id),
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
label: 'Move track down',
|
|
73
|
+
icon: KeyboardArrowDown_1.default,
|
|
74
|
+
onClick: () => view.moveTrackDown(track.id),
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
label: 'Move track to bottom',
|
|
78
|
+
icon: KeyboardDoubleArrowDown_1.default,
|
|
79
|
+
onClick: () => view.moveTrackToBottom(track.id),
|
|
80
|
+
},
|
|
81
|
+
],
|
|
55
82
|
},
|
|
56
83
|
...(((_a = session.getTrackActionMenuItems) === null || _a === void 0 ? void 0 : _a.call(session, trackConf)) || []),
|
|
57
84
|
...track.trackMenuItems(),
|
|
@@ -45,16 +45,16 @@ const useStyles = (0, mui_1.makeStyles)()(theme => ({
|
|
|
45
45
|
}));
|
|
46
46
|
const ZoomControls = (0, mobx_react_1.observer)(function ({ model, }) {
|
|
47
47
|
const { classes } = useStyles();
|
|
48
|
-
const { maxBpPerPx, minBpPerPx, bpPerPx
|
|
48
|
+
const { maxBpPerPx, minBpPerPx, bpPerPx } = model;
|
|
49
49
|
const [value, setValue] = (0, react_1.useState)(-Math.log2(bpPerPx) * 100);
|
|
50
50
|
(0, react_1.useEffect)(() => {
|
|
51
51
|
setValue(-Math.log2(bpPerPx) * 100);
|
|
52
52
|
}, [setValue, bpPerPx]);
|
|
53
53
|
return (react_1.default.createElement("div", { className: classes.container },
|
|
54
|
-
react_1.default.createElement(material_1.IconButton, { "data-testid": "zoom_out", onClick: () => model.zoom(bpPerPx * 2), disabled: bpPerPx >= maxBpPerPx - 0.0001
|
|
54
|
+
react_1.default.createElement(material_1.IconButton, { "data-testid": "zoom_out", onClick: () => model.zoom(bpPerPx * 2), disabled: bpPerPx >= maxBpPerPx - 0.0001, size: "large" },
|
|
55
55
|
react_1.default.createElement(ZoomOut_1.default, null)),
|
|
56
|
-
react_1.default.createElement(material_1.Slider, { size: "small", className: classes.slider, value: value, min: -Math.log2(maxBpPerPx) * 100, max: -Math.log2(minBpPerPx) * 100, onChange: (_, val) => setValue(val), onChangeCommitted: () => model.zoomTo(2 ** (-value / 100))
|
|
57
|
-
react_1.default.createElement(material_1.IconButton, { "data-testid": "zoom_in", onClick: () => model.zoom(model.bpPerPx / 2), disabled: bpPerPx <= minBpPerPx + 0.0001
|
|
56
|
+
react_1.default.createElement(material_1.Slider, { size: "small", className: classes.slider, value: value, min: -Math.log2(maxBpPerPx) * 100, max: -Math.log2(minBpPerPx) * 100, onChange: (_, val) => setValue(val), onChangeCommitted: () => model.zoomTo(2 ** (-value / 100)) }),
|
|
57
|
+
react_1.default.createElement(material_1.IconButton, { "data-testid": "zoom_in", onClick: () => model.zoom(model.bpPerPx / 2), disabled: bpPerPx <= minBpPerPx + 0.0001, size: "large" },
|
|
58
58
|
react_1.default.createElement(ZoomIn_1.default, null))));
|
|
59
59
|
});
|
|
60
60
|
exports.default = ZoomControls;
|
|
@@ -81,7 +81,8 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
|
|
|
81
81
|
showCytobandsSetting: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
|
|
82
82
|
trackLabels: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
|
|
83
83
|
showGridlines: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
84
|
-
highlight: import("mobx-state-tree").
|
|
84
|
+
highlight: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").IArrayType<import("mobx-state-tree").IType<Required<ParsedLocString>, Required<ParsedLocString>, Required<ParsedLocString>>>, [undefined]>;
|
|
85
|
+
colorByCDS: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
|
|
85
86
|
}, {
|
|
86
87
|
width: number;
|
|
87
88
|
} & {
|
|
@@ -224,6 +225,10 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
|
|
|
224
225
|
*/
|
|
225
226
|
readonly trackTypeActions: Map<string, MenuItem[]>;
|
|
226
227
|
} & {
|
|
228
|
+
/**
|
|
229
|
+
* #action
|
|
230
|
+
*/
|
|
231
|
+
setColorByCDS(flag: boolean): void;
|
|
227
232
|
/**
|
|
228
233
|
* #action
|
|
229
234
|
*/
|
|
@@ -255,7 +260,15 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
|
|
|
255
260
|
/**
|
|
256
261
|
* #action
|
|
257
262
|
*/
|
|
258
|
-
|
|
263
|
+
addToHighlights(highlight: Required<ParsedLocString>): void;
|
|
264
|
+
/**
|
|
265
|
+
* #action
|
|
266
|
+
*/
|
|
267
|
+
setHighlight(highlight: Required<ParsedLocString>[] | undefined): void;
|
|
268
|
+
/**
|
|
269
|
+
* #action
|
|
270
|
+
*/
|
|
271
|
+
removeHighlight(highlight: Required<ParsedLocString>): void;
|
|
259
272
|
/**
|
|
260
273
|
* #action
|
|
261
274
|
*/
|
|
@@ -292,6 +305,22 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
|
|
|
292
305
|
*/
|
|
293
306
|
hideTrack(trackId: string): number;
|
|
294
307
|
} & {
|
|
308
|
+
/**
|
|
309
|
+
* #action
|
|
310
|
+
*/
|
|
311
|
+
moveTrackDown(id: string): void;
|
|
312
|
+
/**
|
|
313
|
+
* #action
|
|
314
|
+
*/
|
|
315
|
+
moveTrackUp(id: string): void;
|
|
316
|
+
/**
|
|
317
|
+
* #action
|
|
318
|
+
*/
|
|
319
|
+
moveTrackToTop(id: string): void;
|
|
320
|
+
/**
|
|
321
|
+
* #action
|
|
322
|
+
*/
|
|
323
|
+
moveTrackToBottom(id: string): void;
|
|
295
324
|
/**
|
|
296
325
|
* #action
|
|
297
326
|
*/
|
|
@@ -528,20 +557,21 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
|
|
|
528
557
|
bpToPx({ refName, coord, regionNumber, }: {
|
|
529
558
|
refName: string;
|
|
530
559
|
coord: number;
|
|
531
|
-
regionNumber?: number
|
|
560
|
+
regionNumber?: number;
|
|
532
561
|
}): {
|
|
533
562
|
index: number;
|
|
534
563
|
offsetPx: number;
|
|
535
564
|
} | undefined;
|
|
536
565
|
/**
|
|
537
566
|
* #method
|
|
538
|
-
* scrolls the view to center on the given bp. if that is not in any
|
|
539
|
-
*
|
|
567
|
+
* scrolls the view to center on the given bp. if that is not in any of
|
|
568
|
+
* the displayed regions, does nothing
|
|
569
|
+
*
|
|
540
570
|
* @param coord - basepair at which you want to center the view
|
|
541
571
|
* @param refName - refName of the displayedRegion you are centering at
|
|
542
572
|
* @param regionNumber - index of the displayedRegion
|
|
543
573
|
*/
|
|
544
|
-
centerAt(coord: number, refName: string, regionNumber
|
|
574
|
+
centerAt(coord: number, refName: string, regionNumber?: number): void;
|
|
545
575
|
/**
|
|
546
576
|
* #method
|
|
547
577
|
*/
|
|
@@ -572,7 +602,37 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
|
|
|
572
602
|
} | undefined;
|
|
573
603
|
} & {
|
|
574
604
|
afterCreate(): void;
|
|
575
|
-
}, import("mobx-state-tree").
|
|
605
|
+
}, import("mobx-state-tree").ModelCreationType<import("mobx-state-tree/dist/internal").ExtractCFromProps<{
|
|
606
|
+
id: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
|
|
607
|
+
displayName: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<string>>;
|
|
608
|
+
minimized: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
609
|
+
} & {
|
|
610
|
+
id: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
|
|
611
|
+
type: import("mobx-state-tree").IType<string | undefined, string, string>;
|
|
612
|
+
offsetPx: import("mobx-state-tree").IType<number | undefined, number, number>;
|
|
613
|
+
bpPerPx: import("mobx-state-tree").IType<number | undefined, number, number>;
|
|
614
|
+
displayedRegions: import("mobx-state-tree").IArrayType<import("mobx-state-tree").IModelType<{
|
|
615
|
+
refName: import("mobx-state-tree").ISimpleType<string>;
|
|
616
|
+
start: import("mobx-state-tree").ISimpleType<number>;
|
|
617
|
+
end: import("mobx-state-tree").ISimpleType<number>;
|
|
618
|
+
reversed: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
|
|
619
|
+
} & {
|
|
620
|
+
assemblyName: import("mobx-state-tree").ISimpleType<string>;
|
|
621
|
+
}, {
|
|
622
|
+
setRefName(newRefName: string): void;
|
|
623
|
+
}, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>>;
|
|
624
|
+
tracks: import("mobx-state-tree").IArrayType<import("mobx-state-tree").IAnyType>;
|
|
625
|
+
hideHeader: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
626
|
+
hideHeaderOverview: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
627
|
+
hideNoTracksActive: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
628
|
+
trackSelectorType: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
|
|
629
|
+
showCenterLine: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
|
|
630
|
+
showCytobandsSetting: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
|
|
631
|
+
trackLabels: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
|
|
632
|
+
showGridlines: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
633
|
+
highlight: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").IArrayType<import("mobx-state-tree").IType<Required<ParsedLocString>, Required<ParsedLocString>, Required<ParsedLocString>>>, [undefined]>;
|
|
634
|
+
colorByCDS: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
|
|
635
|
+
}>>, import("mobx-state-tree")._NotCustomized>;
|
|
576
636
|
export type LinearGenomeViewStateModel = ReturnType<typeof stateModelFactory>;
|
|
577
637
|
export type LinearGenomeViewModel = Instance<LinearGenomeViewStateModel>;
|
|
578
638
|
export { default as ReactComponent, default as LinearGenomeView, } from './components/LinearGenomeView';
|