@jbrowse/plugin-alignments 2.13.0 → 2.14.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/AlignmentsFeatureDetail/AlignmentsFeatureDetail.js +5 -3
- package/dist/AlignmentsFeatureDetail/BreakendOptionDialog.js +12 -4
- package/dist/AlignmentsFeatureDetail/Formatter.js +6 -2
- package/dist/AlignmentsFeatureDetail/SuppAlignmentsLocStrings.js +4 -2
- package/dist/AlignmentsFeatureDetail/getSAFeatures.js +4 -4
- package/dist/AlignmentsFeatureDetail/launchBreakpointSplitView.js +2 -2
- package/dist/BamAdapter/BamAdapter.js +12 -18
- package/dist/BamAdapter/BamSlightlyLazyFeature.js +0 -1
- package/dist/CramAdapter/CramAdapter.d.ts +1 -1
- package/dist/CramAdapter/CramAdapter.js +7 -6
- package/dist/CramAdapter/CramTestAdapters.js +8 -2
- package/dist/GuessAlignmentsTypes/index.js +2 -2
- package/dist/LinearAlignmentsDisplay/components/AlignmentsDisplay.d.ts +2 -2
- package/dist/LinearAlignmentsDisplay/models/model.d.ts +13 -20
- package/dist/LinearAlignmentsDisplay/models/model.js +13 -3
- package/dist/LinearPileupDisplay/SharedLinearPileupDisplayMixin.d.ts +7 -4
- package/dist/LinearPileupDisplay/SharedLinearPileupDisplayMixin.js +36 -21
- package/dist/LinearPileupDisplay/components/{ColorByModifications.js → ColorByModificationsDialog.js} +3 -1
- package/dist/LinearPileupDisplay/components/{ColorByTag.js → ColorByTagDialog.js} +4 -2
- package/dist/LinearPileupDisplay/components/GroupByDialog.d.ts +11 -0
- package/dist/LinearPileupDisplay/components/GroupByDialog.js +129 -0
- package/dist/LinearPileupDisplay/components/LinearPileupDisplayBlurb.js +1 -3
- package/dist/LinearPileupDisplay/components/{SetFeatureHeight.js → SetFeatureHeightDialog.js} +9 -3
- package/{esm/LinearPileupDisplay/components/SetMaxHeight.d.ts → dist/LinearPileupDisplay/components/SetMaxHeightDialog.d.ts} +1 -1
- package/dist/LinearPileupDisplay/components/{SetMaxHeight.js → SetMaxHeightDialog.js} +6 -2
- package/dist/LinearPileupDisplay/components/{SortByTag.d.ts → SortByTagDialog.d.ts} +1 -1
- package/dist/LinearPileupDisplay/components/{SortByTag.js → SortByTagDialog.js} +7 -3
- package/dist/LinearPileupDisplay/configSchema.js +0 -1
- package/dist/LinearPileupDisplay/model.d.ts +58 -46
- package/dist/LinearPileupDisplay/model.js +69 -41
- package/dist/LinearReadArcsDisplay/components/ReactComponent.js +1 -0
- package/dist/LinearReadArcsDisplay/model.d.ts +2 -2
- package/dist/LinearReadArcsDisplay/model.js +37 -13
- package/dist/LinearReadCloudDisplay/components/ReactComponent.js +4 -1
- package/dist/LinearReadCloudDisplay/drawPairChains.js +3 -3
- package/dist/LinearReadCloudDisplay/model.d.ts +4 -8
- package/dist/LinearReadCloudDisplay/model.js +16 -6
- package/dist/LinearSNPCoverageDisplay/components/Tooltip.d.ts +1 -1
- package/dist/LinearSNPCoverageDisplay/components/Tooltip.js +1 -1
- package/dist/LinearSNPCoverageDisplay/models/model.d.ts +1 -1
- package/dist/LinearSNPCoverageDisplay/models/model.js +15 -5
- package/dist/MismatchParser/index.js +11 -9
- package/dist/PileupRPC/base.d.ts +1 -1
- package/dist/PileupRPC/methods/GetGlobalValueForTag.d.ts +1 -1
- package/dist/PileupRPC/methods/GetReducedFeatures.d.ts +3 -3
- package/dist/PileupRPC/methods/GetVisibleModifications.d.ts +1 -1
- package/dist/PileupRenderer/PileupLayoutSession.d.ts +1 -1
- package/dist/PileupRenderer/PileupLayoutSession.js +3 -2
- package/dist/PileupRenderer/PileupRenderer.d.ts +1 -1
- package/dist/PileupRenderer/PileupRenderer.js +16 -13
- package/dist/PileupRenderer/colorBy.js +3 -5
- package/dist/PileupRenderer/components/PileupRendering.d.ts +1 -1
- package/dist/PileupRenderer/components/PileupRendering.js +65 -60
- package/dist/PileupRenderer/getAlignmentShapeColor.js +24 -16
- package/dist/PileupRenderer/layoutFeature.js +6 -1
- package/dist/PileupRenderer/layoutFeatures.js +1 -7
- package/dist/PileupRenderer/makeImageData.d.ts +1 -1
- package/dist/PileupRenderer/makeImageData.js +1 -0
- package/dist/PileupRenderer/renderAlignmentShape.js +1 -1
- package/dist/PileupRenderer/renderMismatches.js +1 -1
- package/dist/PileupRenderer/renderSoftClipping.js +1 -1
- package/dist/PileupRenderer/util.js +3 -5
- package/dist/SNPCoverageAdapter/generateCoverageBins.js +4 -10
- package/dist/SNPCoverageRenderer/SNPCoverageRenderer.d.ts +2 -2
- package/dist/SNPCoverageRenderer/SNPCoverageRenderer.js +2 -5
- package/dist/index.js +3 -1
- package/dist/shared/BaseDisplayComponent.js +3 -1
- package/dist/shared/{FilterByTag.js → FilterByTagDialog.js} +16 -6
- package/dist/shared/color.js +2 -2
- package/dist/shared/index.d.ts +24 -20
- package/dist/shared/index.js +4 -5
- package/dist/shared/renderSvg.js +1 -3
- package/dist/util.d.ts +1 -1
- package/esm/AlignmentsFeatureDetail/AlignmentsFeatureDetail.js +5 -3
- package/esm/AlignmentsFeatureDetail/BreakendOptionDialog.js +12 -4
- package/esm/AlignmentsFeatureDetail/Formatter.js +6 -2
- package/esm/AlignmentsFeatureDetail/SuppAlignmentsLocStrings.js +4 -2
- package/esm/AlignmentsFeatureDetail/getSAFeatures.js +4 -4
- package/esm/AlignmentsFeatureDetail/launchBreakpointSplitView.js +2 -2
- package/esm/BamAdapter/BamAdapter.js +12 -18
- package/esm/BamAdapter/BamSlightlyLazyFeature.js +0 -1
- package/esm/CramAdapter/CramAdapter.d.ts +1 -1
- package/esm/CramAdapter/CramAdapter.js +7 -6
- package/esm/CramAdapter/CramTestAdapters.js +8 -2
- package/esm/GuessAlignmentsTypes/index.js +2 -2
- package/esm/LinearAlignmentsDisplay/components/AlignmentsDisplay.d.ts +2 -2
- package/esm/LinearAlignmentsDisplay/models/model.d.ts +13 -20
- package/esm/LinearAlignmentsDisplay/models/model.js +13 -3
- package/esm/LinearPileupDisplay/SharedLinearPileupDisplayMixin.d.ts +7 -4
- package/esm/LinearPileupDisplay/SharedLinearPileupDisplayMixin.js +36 -21
- package/esm/LinearPileupDisplay/components/{ColorByModifications.js → ColorByModificationsDialog.js} +3 -1
- package/esm/LinearPileupDisplay/components/{ColorByTag.js → ColorByTagDialog.js} +4 -2
- package/esm/LinearPileupDisplay/components/GroupByDialog.d.ts +11 -0
- package/esm/LinearPileupDisplay/components/GroupByDialog.js +104 -0
- package/esm/LinearPileupDisplay/components/LinearPileupDisplayBlurb.js +1 -3
- package/esm/LinearPileupDisplay/components/{SetFeatureHeight.js → SetFeatureHeightDialog.js} +9 -3
- package/{dist/LinearPileupDisplay/components/SetMaxHeight.d.ts → esm/LinearPileupDisplay/components/SetMaxHeightDialog.d.ts} +1 -1
- package/esm/LinearPileupDisplay/components/{SetMaxHeight.js → SetMaxHeightDialog.js} +6 -2
- package/esm/LinearPileupDisplay/components/{SortByTag.d.ts → SortByTagDialog.d.ts} +1 -1
- package/esm/LinearPileupDisplay/components/{SortByTag.js → SortByTagDialog.js} +7 -3
- package/esm/LinearPileupDisplay/configSchema.js +0 -1
- package/esm/LinearPileupDisplay/model.d.ts +58 -46
- package/esm/LinearPileupDisplay/model.js +69 -41
- package/esm/LinearReadArcsDisplay/components/ReactComponent.js +1 -0
- package/esm/LinearReadArcsDisplay/model.d.ts +2 -2
- package/esm/LinearReadArcsDisplay/model.js +37 -13
- package/esm/LinearReadCloudDisplay/components/ReactComponent.js +4 -1
- package/esm/LinearReadCloudDisplay/drawPairChains.js +3 -3
- package/esm/LinearReadCloudDisplay/model.d.ts +4 -8
- package/esm/LinearReadCloudDisplay/model.js +16 -6
- package/esm/LinearSNPCoverageDisplay/components/Tooltip.d.ts +1 -1
- package/esm/LinearSNPCoverageDisplay/components/Tooltip.js +1 -1
- package/esm/LinearSNPCoverageDisplay/models/model.d.ts +1 -1
- package/esm/LinearSNPCoverageDisplay/models/model.js +15 -5
- package/esm/MismatchParser/index.js +11 -9
- package/esm/PileupRPC/base.d.ts +1 -1
- package/esm/PileupRPC/methods/GetGlobalValueForTag.d.ts +1 -1
- package/esm/PileupRPC/methods/GetReducedFeatures.d.ts +3 -3
- package/esm/PileupRPC/methods/GetVisibleModifications.d.ts +1 -1
- package/esm/PileupRenderer/PileupLayoutSession.d.ts +1 -1
- package/esm/PileupRenderer/PileupLayoutSession.js +3 -2
- package/esm/PileupRenderer/PileupRenderer.d.ts +1 -1
- package/esm/PileupRenderer/PileupRenderer.js +16 -13
- package/esm/PileupRenderer/colorBy.js +3 -5
- package/esm/PileupRenderer/components/PileupRendering.d.ts +1 -1
- package/esm/PileupRenderer/components/PileupRendering.js +65 -60
- package/esm/PileupRenderer/getAlignmentShapeColor.js +24 -16
- package/esm/PileupRenderer/layoutFeature.js +6 -1
- package/esm/PileupRenderer/layoutFeatures.js +1 -7
- package/esm/PileupRenderer/makeImageData.d.ts +1 -1
- package/esm/PileupRenderer/makeImageData.js +1 -0
- package/esm/PileupRenderer/renderAlignmentShape.js +1 -1
- package/esm/PileupRenderer/renderMismatches.js +1 -1
- package/esm/PileupRenderer/renderSoftClipping.js +1 -1
- package/esm/PileupRenderer/util.js +3 -5
- package/esm/SNPCoverageAdapter/generateCoverageBins.js +4 -10
- package/esm/SNPCoverageRenderer/SNPCoverageRenderer.d.ts +2 -2
- package/esm/SNPCoverageRenderer/SNPCoverageRenderer.js +2 -5
- package/esm/index.js +3 -1
- package/esm/shared/BaseDisplayComponent.js +3 -1
- package/esm/shared/{FilterByTag.js → FilterByTagDialog.js} +16 -6
- package/esm/shared/color.js +2 -2
- package/esm/shared/index.d.ts +24 -20
- package/esm/shared/index.js +4 -5
- package/esm/shared/renderSvg.js +1 -3
- package/esm/util.d.ts +1 -1
- package/package.json +4 -4
- /package/dist/LinearPileupDisplay/components/{ColorByModifications.d.ts → ColorByModificationsDialog.d.ts} +0 -0
- /package/dist/LinearPileupDisplay/components/{ColorByTag.d.ts → ColorByTagDialog.d.ts} +0 -0
- /package/dist/LinearPileupDisplay/components/{SetFeatureHeight.d.ts → SetFeatureHeightDialog.d.ts} +0 -0
- /package/dist/shared/{FilterByTag.d.ts → FilterByTagDialog.d.ts} +0 -0
- /package/esm/LinearPileupDisplay/components/{ColorByModifications.d.ts → ColorByModificationsDialog.d.ts} +0 -0
- /package/esm/LinearPileupDisplay/components/{ColorByTag.d.ts → ColorByTagDialog.d.ts} +0 -0
- /package/esm/LinearPileupDisplay/components/{SetFeatureHeight.d.ts → SetFeatureHeightDialog.d.ts} +0 -0
- /package/esm/shared/{FilterByTag.d.ts → FilterByTagDialog.d.ts} +0 -0
|
@@ -29,12 +29,14 @@ const material_1 = require("@mui/material");
|
|
|
29
29
|
const ui_1 = require("@jbrowse/core/ui");
|
|
30
30
|
const ColorByTagDialog = (0, mobx_react_1.observer)(function ({ model, handleClose, }) {
|
|
31
31
|
const [tag, setTag] = (0, react_1.useState)('');
|
|
32
|
-
const validTag =
|
|
32
|
+
const validTag = /^[A-Za-z][A-Za-z0-9]$/.exec(tag);
|
|
33
33
|
return (react_1.default.createElement(ui_1.Dialog, { open: true, onClose: handleClose, title: "Color by tag" },
|
|
34
34
|
react_1.default.createElement(material_1.DialogContent, { style: { overflowX: 'hidden' } },
|
|
35
35
|
react_1.default.createElement(material_1.Typography, null, "Enter tag to color by: "),
|
|
36
36
|
react_1.default.createElement(material_1.Typography, { color: "textSecondary" }, "Examples: XS or TS for RNA-seq inferred read strand, ts (lower-case) for minimap2 read strand, HP for haplotype, RG for read group, etc."),
|
|
37
|
-
react_1.default.createElement(material_1.TextField, { value: tag, onChange: event =>
|
|
37
|
+
react_1.default.createElement(material_1.TextField, { value: tag, onChange: event => {
|
|
38
|
+
setTag(event.target.value);
|
|
39
|
+
}, placeholder: "Enter tag name", inputProps: { maxLength: 2 }, error: tag.length === 2 && !validTag, helperText: tag.length === 2 && !validTag ? 'Not a valid tag' : '', autoComplete: "off" }),
|
|
38
40
|
react_1.default.createElement(material_1.DialogActions, null,
|
|
39
41
|
react_1.default.createElement(material_1.Button, { variant: "contained", color: "primary", onClick: () => {
|
|
40
42
|
model.setColorScheme({ type: 'tag', tag });
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { IAnyStateTreeNode } from 'mobx-state-tree';
|
|
3
|
+
import { AnyConfigurationModel } from '@jbrowse/core/configuration';
|
|
4
|
+
declare const GroupByTagDialog: (props: {
|
|
5
|
+
model: {
|
|
6
|
+
adapterConfig: AnyConfigurationModel;
|
|
7
|
+
configuration: AnyConfigurationModel;
|
|
8
|
+
} & IAnyStateTreeNode;
|
|
9
|
+
handleClose: () => void;
|
|
10
|
+
}) => React.JSX.Element;
|
|
11
|
+
export default GroupByTagDialog;
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
const react_1 = __importStar(require("react"));
|
|
27
|
+
const mobx_react_1 = require("mobx-react");
|
|
28
|
+
const material_1 = require("@mui/material");
|
|
29
|
+
const ui_1 = require("@jbrowse/core/ui");
|
|
30
|
+
const mobx_state_tree_1 = require("mobx-state-tree");
|
|
31
|
+
const util_1 = require("@jbrowse/core/util");
|
|
32
|
+
// locals
|
|
33
|
+
const shared_1 = require("../../shared");
|
|
34
|
+
function clone(c) {
|
|
35
|
+
return JSON.parse(JSON.stringify(c));
|
|
36
|
+
}
|
|
37
|
+
const GroupByTagDialog = (0, mobx_react_1.observer)(function (props) {
|
|
38
|
+
const { model, handleClose } = props;
|
|
39
|
+
const [tag, setTag] = (0, react_1.useState)('');
|
|
40
|
+
const [tagSet, setTagSet] = (0, react_1.useState)();
|
|
41
|
+
const [loading, setLoading] = (0, react_1.useState)(false);
|
|
42
|
+
const [error, setError] = (0, react_1.useState)();
|
|
43
|
+
const [includeUndefined, setIncludeUndefined] = (0, react_1.useState)(true);
|
|
44
|
+
const validTag = /^[A-Za-z][A-Za-z0-9]$/.exec(tag);
|
|
45
|
+
const isInvalid = tag.length === 2 && !validTag;
|
|
46
|
+
const debouncedTag = (0, util_1.useDebounce)(tag, 1000);
|
|
47
|
+
(0, react_1.useEffect)(() => {
|
|
48
|
+
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
49
|
+
;
|
|
50
|
+
(async () => {
|
|
51
|
+
try {
|
|
52
|
+
if (!isInvalid) {
|
|
53
|
+
setError(undefined);
|
|
54
|
+
setLoading(true);
|
|
55
|
+
const vals = await (0, shared_1.getUniqueTagValues)({
|
|
56
|
+
self: model,
|
|
57
|
+
tag: debouncedTag,
|
|
58
|
+
blocks: (0, util_1.getContainingView)(model)
|
|
59
|
+
.staticBlocks,
|
|
60
|
+
});
|
|
61
|
+
setTagSet(vals);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
catch (e) {
|
|
65
|
+
console.error(e);
|
|
66
|
+
setError(e);
|
|
67
|
+
}
|
|
68
|
+
finally {
|
|
69
|
+
setLoading(false);
|
|
70
|
+
}
|
|
71
|
+
})();
|
|
72
|
+
}, [model, isInvalid, debouncedTag]);
|
|
73
|
+
return (react_1.default.createElement(ui_1.Dialog, { open: true, onClose: handleClose, title: "Group by tag" },
|
|
74
|
+
react_1.default.createElement(material_1.DialogContent, null,
|
|
75
|
+
react_1.default.createElement(material_1.Typography, null, "Set the tag to group by. NOTE: this will make a set of fully functional subtracks with the filter by by default set to the values of the tag that are visible in the current view"),
|
|
76
|
+
react_1.default.createElement(material_1.Typography, { color: "textSecondary" }, "Examples: HP for haplotype, RG for read group, etc."),
|
|
77
|
+
react_1.default.createElement(material_1.FormControlLabel, { control: react_1.default.createElement(material_1.Checkbox, { checked: includeUndefined, onChange: () => {
|
|
78
|
+
setIncludeUndefined(!includeUndefined);
|
|
79
|
+
} }), label: "Make a new subtrack for undefined values of tag as well?" }),
|
|
80
|
+
react_1.default.createElement(material_1.TextField, { value: tag, onChange: event => {
|
|
81
|
+
setTag(event.target.value);
|
|
82
|
+
}, placeholder: "Enter tag name", inputProps: {
|
|
83
|
+
maxLength: 2,
|
|
84
|
+
'data-testid': 'group-tag-name-input',
|
|
85
|
+
}, error: isInvalid, helperText: isInvalid ? 'Not a valid tag' : '', autoComplete: "off", "data-testid": "group-tag-name" }),
|
|
86
|
+
error ? (react_1.default.createElement(ui_1.ErrorMessage, { error: error })) : loading ? (react_1.default.createElement(ui_1.LoadingEllipses, { title: "Loading unique tags" })) : tagSet ? (react_1.default.createElement("div", null,
|
|
87
|
+
react_1.default.createElement("div", null,
|
|
88
|
+
"Found unique ",
|
|
89
|
+
tag,
|
|
90
|
+
" values:"),
|
|
91
|
+
react_1.default.createElement("div", null, tagSet.join(', ')))) : null),
|
|
92
|
+
react_1.default.createElement(material_1.DialogActions, null,
|
|
93
|
+
react_1.default.createElement(material_1.Button, { variant: "contained", color: "primary", type: "submit", disabled: !tagSet, autoFocus: true, onClick: () => {
|
|
94
|
+
const track = (0, util_1.getContainingTrack)(model);
|
|
95
|
+
const trackConf = clone((0, mobx_state_tree_1.getSnapshot)(track.configuration));
|
|
96
|
+
const session = (0, util_1.getSession)(model);
|
|
97
|
+
if (tagSet) {
|
|
98
|
+
const ret = [...tagSet];
|
|
99
|
+
if (includeUndefined) {
|
|
100
|
+
ret.push(undefined);
|
|
101
|
+
}
|
|
102
|
+
for (const tagValue of ret) {
|
|
103
|
+
// @ts-expect-error
|
|
104
|
+
const newTrackConf = session.addTrackConf({
|
|
105
|
+
...trackConf,
|
|
106
|
+
trackId: `${trackConf.trackId}-${tag}:${tagValue}-${+Date.now()}-sessionTrack`,
|
|
107
|
+
name: `${trackConf.name} ${tag}:${tagValue}`,
|
|
108
|
+
displays: undefined,
|
|
109
|
+
});
|
|
110
|
+
const view = (0, util_1.getContainingView)(model);
|
|
111
|
+
const t = view.showTrack(newTrackConf.trackId);
|
|
112
|
+
const d = t.displays[0];
|
|
113
|
+
d.setFilterBy({
|
|
114
|
+
flagInclude: 0,
|
|
115
|
+
flagExclude: 1540,
|
|
116
|
+
tagFilter: {
|
|
117
|
+
tag,
|
|
118
|
+
value: tagValue,
|
|
119
|
+
},
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
handleClose();
|
|
124
|
+
} }, "Submit"),
|
|
125
|
+
react_1.default.createElement(material_1.Button, { variant: "contained", color: "secondary", onClick: () => {
|
|
126
|
+
handleClose();
|
|
127
|
+
} }, "Cancel"))));
|
|
128
|
+
});
|
|
129
|
+
exports.default = GroupByTagDialog;
|
|
@@ -10,8 +10,6 @@ const LinearPileupDisplayBlurb = (0, mobx_react_1.observer)(function ({ model, }
|
|
|
10
10
|
var _a;
|
|
11
11
|
const { sortedBy } = model;
|
|
12
12
|
return sortedBy ? (react_1.default.createElement("div", { "data-testid": `blurb-${sortedBy}` },
|
|
13
|
-
react_1.default.createElement(material_1.Typography, { color: "secondary", variant: "caption" }, sortedBy
|
|
14
|
-
? `Sorted by ${(_a = sortedBy.tag) !== null && _a !== void 0 ? _a : sortedBy.type} at ${sortedBy.refName}:${sortedBy.pos}`
|
|
15
|
-
: null))) : null;
|
|
13
|
+
react_1.default.createElement(material_1.Typography, { color: "secondary", variant: "caption" }, `Sorted by ${(_a = sortedBy.tag) !== null && _a !== void 0 ? _a : sortedBy.type} at ${sortedBy.refName}:${sortedBy.pos}`))) : null;
|
|
16
14
|
});
|
|
17
15
|
exports.default = LinearPileupDisplayBlurb;
|
package/dist/LinearPileupDisplay/components/{SetFeatureHeight.js → SetFeatureHeightDialog.js}
RENAMED
|
@@ -36,14 +36,20 @@ const SetFeatureHeightDialog = (0, mobx_react_1.observer)(function (props) {
|
|
|
36
36
|
return (react_1.default.createElement(ui_1.Dialog, { open: true, onClose: handleClose, title: "Set feature height" },
|
|
37
37
|
react_1.default.createElement(material_1.DialogContent, null,
|
|
38
38
|
react_1.default.createElement(material_1.Typography, null, "Adjust the feature height and whether there is any spacing between features. Setting feature height to 1 and removing spacing makes the display very compact."),
|
|
39
|
-
react_1.default.createElement(material_1.TextField, { value: height, helperText: "Feature height", onChange: event =>
|
|
40
|
-
|
|
39
|
+
react_1.default.createElement(material_1.TextField, { value: height, helperText: "Feature height", onChange: event => {
|
|
40
|
+
setHeight(event.target.value);
|
|
41
|
+
} }),
|
|
42
|
+
react_1.default.createElement(material_1.FormControlLabel, { control: react_1.default.createElement(material_1.Checkbox, { checked: !!noSpacing, onChange: () => {
|
|
43
|
+
setNoSpacing(val => !val);
|
|
44
|
+
} }), label: "Remove spacing between features in y-direction?" }),
|
|
41
45
|
react_1.default.createElement(material_1.DialogActions, null,
|
|
42
46
|
react_1.default.createElement(material_1.Button, { variant: "contained", color: "primary", type: "submit", autoFocus: true, disabled: !ok, onClick: () => {
|
|
43
47
|
model.setFeatureHeight(height !== '' && !Number.isNaN(+height) ? +height : undefined);
|
|
44
48
|
model.setNoSpacing(noSpacing);
|
|
45
49
|
handleClose();
|
|
46
50
|
} }, "Submit"),
|
|
47
|
-
react_1.default.createElement(material_1.Button, { variant: "contained", color: "secondary", onClick: () =>
|
|
51
|
+
react_1.default.createElement(material_1.Button, { variant: "contained", color: "secondary", onClick: () => {
|
|
52
|
+
handleClose();
|
|
53
|
+
} }, "Cancel")))));
|
|
48
54
|
});
|
|
49
55
|
exports.default = SetFeatureHeightDialog;
|
|
@@ -41,12 +41,16 @@ const SetMaxHeightDialog = (0, mobx_react_1.observer)(function (props) {
|
|
|
41
41
|
return (react_1.default.createElement(ui_1.Dialog, { open: true, onClose: handleClose, title: "Filter options" },
|
|
42
42
|
react_1.default.createElement(material_1.DialogContent, { className: classes.root },
|
|
43
43
|
react_1.default.createElement(material_1.Typography, null, "Set max height for the track. For example, you can increase this if the layout says \"Max height reached\""),
|
|
44
|
-
react_1.default.createElement(material_1.TextField, { value: max, onChange: event =>
|
|
44
|
+
react_1.default.createElement(material_1.TextField, { value: max, onChange: event => {
|
|
45
|
+
setMax(event.target.value);
|
|
46
|
+
}, placeholder: "Enter max height for layout" }),
|
|
45
47
|
react_1.default.createElement(material_1.DialogActions, null,
|
|
46
48
|
react_1.default.createElement(material_1.Button, { variant: "contained", color: "primary", type: "submit", autoFocus: true, onClick: () => {
|
|
47
49
|
model.setMaxHeight(max !== '' && !Number.isNaN(+max) ? +max : undefined);
|
|
48
50
|
handleClose();
|
|
49
51
|
} }, "Submit"),
|
|
50
|
-
react_1.default.createElement(material_1.Button, { variant: "contained", color: "secondary", onClick: () =>
|
|
52
|
+
react_1.default.createElement(material_1.Button, { variant: "contained", color: "secondary", onClick: () => {
|
|
53
|
+
handleClose();
|
|
54
|
+
} }, "Cancel")))));
|
|
51
55
|
});
|
|
52
56
|
exports.default = SetMaxHeightDialog;
|
|
@@ -30,12 +30,14 @@ const ui_1 = require("@jbrowse/core/ui");
|
|
|
30
30
|
const SortByTagDialog = (0, mobx_react_1.observer)(function (props) {
|
|
31
31
|
const { model, handleClose } = props;
|
|
32
32
|
const [tag, setTag] = (0, react_1.useState)('');
|
|
33
|
-
const validTag =
|
|
33
|
+
const validTag = /^[A-Za-z][A-Za-z0-9]$/.exec(tag);
|
|
34
34
|
return (react_1.default.createElement(ui_1.Dialog, { open: true, onClose: handleClose, title: "Sort by tag" },
|
|
35
35
|
react_1.default.createElement(material_1.DialogContent, null,
|
|
36
36
|
react_1.default.createElement(material_1.Typography, null, "Set the tag to sort by"),
|
|
37
37
|
react_1.default.createElement(material_1.Typography, { color: "textSecondary" }, "Examples: HP for haplotype, RG for read group, etc."),
|
|
38
|
-
react_1.default.createElement(material_1.TextField, { value: tag, onChange: event =>
|
|
38
|
+
react_1.default.createElement(material_1.TextField, { value: tag, onChange: event => {
|
|
39
|
+
setTag(event.target.value);
|
|
40
|
+
}, placeholder: "Enter tag name", inputProps: {
|
|
39
41
|
maxLength: 2,
|
|
40
42
|
'data-testid': 'sort-tag-name-input',
|
|
41
43
|
}, error: tag.length === 2 && !validTag, helperText: tag.length === 2 && !validTag ? 'Not a valid tag' : '', autoComplete: "off", "data-testid": "sort-tag-name" }),
|
|
@@ -44,6 +46,8 @@ const SortByTagDialog = (0, mobx_react_1.observer)(function (props) {
|
|
|
44
46
|
model.setSortedBy('tag', tag);
|
|
45
47
|
handleClose();
|
|
46
48
|
} }, "Submit"),
|
|
47
|
-
react_1.default.createElement(material_1.Button, { variant: "contained", color: "secondary", onClick: () =>
|
|
49
|
+
react_1.default.createElement(material_1.Button, { variant: "contained", color: "secondary", onClick: () => {
|
|
50
|
+
handleClose();
|
|
51
|
+
} }, "Cancel")))));
|
|
48
52
|
});
|
|
49
53
|
exports.default = SortByTagDialog;
|
|
@@ -8,7 +8,6 @@ const mobx_state_tree_1 = require("mobx-state-tree");
|
|
|
8
8
|
*/
|
|
9
9
|
function x() { } // eslint-disable-line @typescript-eslint/no-unused-vars
|
|
10
10
|
function configSchemaF(pluginManager) {
|
|
11
|
-
// modify config schema to take in a sub coverage display
|
|
12
11
|
return (0, configuration_1.ConfigurationSchema)('LinearPileupDisplay', {
|
|
13
12
|
/**
|
|
14
13
|
* #slot
|
|
@@ -116,7 +116,7 @@ declare function stateModelFactory(configSchema: AnyConfigurationSchemaType): im
|
|
|
116
116
|
readName: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<string>>;
|
|
117
117
|
tagFilter: import("mobx-state-tree").IMaybe<import("mobx-state-tree").IModelType<{
|
|
118
118
|
tag: import("mobx-state-tree").ISimpleType<string>;
|
|
119
|
-
value: import("mobx-state-tree").ISimpleType<string
|
|
119
|
+
value: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<string>>;
|
|
120
120
|
}, {}, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>>;
|
|
121
121
|
}, {}, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>, [undefined]>;
|
|
122
122
|
jexlFilters: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").IArrayType<import("mobx-state-tree").ISimpleType<string>>, [undefined]>;
|
|
@@ -154,8 +154,10 @@ declare function stateModelFactory(configSchema: AnyConfigurationSchemaType): im
|
|
|
154
154
|
rendererTypeName: string;
|
|
155
155
|
error: unknown;
|
|
156
156
|
message: string | undefined;
|
|
157
|
-
}, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree"
|
|
158
|
-
|
|
157
|
+
}, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree" /**
|
|
158
|
+
* #property
|
|
159
|
+
*/)._NotCustomized>>;
|
|
160
|
+
onHorizontalScroll?: () => void;
|
|
159
161
|
blockState?: Record<string, any>;
|
|
160
162
|
}>;
|
|
161
163
|
readonly DisplayBlurb: import("react").FC<{
|
|
@@ -175,9 +177,9 @@ declare function stateModelFactory(configSchema: AnyConfigurationSchemaType): im
|
|
|
175
177
|
rendererTypeName: string;
|
|
176
178
|
error: unknown;
|
|
177
179
|
message: string | undefined;
|
|
178
|
-
}, import("mobx-state-tree"
|
|
180
|
+
}, import("mobx-state-tree" /**
|
|
179
181
|
* #action
|
|
180
|
-
*/)._NotCustomized>>;
|
|
182
|
+
*/)._NotCustomized, import("mobx-state-tree")._NotCustomized>>;
|
|
181
183
|
}> | null;
|
|
182
184
|
readonly adapterConfig: any;
|
|
183
185
|
readonly parentTrack: any;
|
|
@@ -267,7 +269,7 @@ declare function stateModelFactory(configSchema: AnyConfigurationSchemaType): im
|
|
|
267
269
|
readonly autorunReady: boolean;
|
|
268
270
|
} & {
|
|
269
271
|
setTagsReady(flag: boolean): void;
|
|
270
|
-
setMaxHeight(n
|
|
272
|
+
setMaxHeight(n?: number): void;
|
|
271
273
|
setFeatureHeight(n?: number): void;
|
|
272
274
|
setNoSpacing(flag?: boolean): void;
|
|
273
275
|
setColorScheme(colorScheme: {
|
|
@@ -292,9 +294,7 @@ declare function stateModelFactory(configSchema: AnyConfigurationSchemaType): im
|
|
|
292
294
|
setSubschema(slotName: string, data: Record<string, unknown>): Record<string, unknown> | ({
|
|
293
295
|
[x: string]: any;
|
|
294
296
|
} & import("mobx-state-tree/dist/internal").NonEmptyObject & any & import("mobx-state-tree").IStateTreeNode<AnyConfigurationSchemaType>);
|
|
295
|
-
} & import("mobx-state-tree"
|
|
296
|
-
* #property
|
|
297
|
-
*/).IStateTreeNode<AnyConfigurationSchemaType>);
|
|
297
|
+
} & import("mobx-state-tree").IStateTreeNode<AnyConfigurationSchemaType>);
|
|
298
298
|
} & import("mobx-state-tree").IStateTreeNode<AnyConfigurationSchemaType>;
|
|
299
299
|
} & {
|
|
300
300
|
readonly maxHeight: any;
|
|
@@ -335,6 +335,7 @@ declare function stateModelFactory(configSchema: AnyConfigurationSchemaType): im
|
|
|
335
335
|
icon: import("@mui/material/OverridableComponent").OverridableComponent<import("@mui/material").SvgIconTypeMap<{}, "svg">> & {
|
|
336
336
|
muiName: string;
|
|
337
337
|
};
|
|
338
|
+
priority: number;
|
|
338
339
|
onClick: () => void;
|
|
339
340
|
})[];
|
|
340
341
|
} & {
|
|
@@ -426,49 +427,60 @@ declare function stateModelFactory(configSchema: AnyConfigurationSchemaType): im
|
|
|
426
427
|
/**
|
|
427
428
|
* #method
|
|
428
429
|
*/
|
|
429
|
-
trackMenuItems():
|
|
430
|
-
label:
|
|
431
|
-
icon: import("@mui/material/OverridableComponent").OverridableComponent<import("@mui/material").SvgIconTypeMap<{}, "svg">> & {
|
|
430
|
+
trackMenuItems(): readonly [...import("@jbrowse/core/ui").MenuItem[], {
|
|
431
|
+
readonly label: "Color by...";
|
|
432
|
+
readonly icon: import("@mui/material/OverridableComponent").OverridableComponent<import("@mui/material").SvgIconTypeMap<{}, "svg">> & {
|
|
432
433
|
muiName: string;
|
|
433
434
|
};
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
}
|
|
444
|
-
disabled: boolean;
|
|
445
|
-
subMenu: {
|
|
435
|
+
readonly subMenu: readonly [{
|
|
436
|
+
readonly label: "Pair orientation";
|
|
437
|
+
readonly onClick: () => void;
|
|
438
|
+
}, {
|
|
439
|
+
readonly label: "Modifications or methylation";
|
|
440
|
+
readonly onClick: () => void;
|
|
441
|
+
}, {
|
|
442
|
+
readonly label: "Insert size";
|
|
443
|
+
readonly onClick: () => void;
|
|
444
|
+
}, ...{
|
|
446
445
|
label: string;
|
|
447
446
|
onClick: () => void;
|
|
448
|
-
}[];
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
447
|
+
}[]];
|
|
448
|
+
}, {
|
|
449
|
+
readonly label: "Sort by...";
|
|
450
|
+
readonly icon: import("@mui/material/OverridableComponent").OverridableComponent<import("@mui/material").SvgIconTypeMap<{}, "svg">> & {
|
|
451
|
+
muiName: string;
|
|
452
|
+
};
|
|
453
|
+
readonly disabled: boolean;
|
|
454
|
+
readonly subMenu: readonly [...{
|
|
455
455
|
label: string;
|
|
456
456
|
onClick: () => void;
|
|
457
|
-
}[]
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
457
|
+
}[], {
|
|
458
|
+
readonly label: "Sort by tag...";
|
|
459
|
+
readonly onClick: () => void;
|
|
460
|
+
}, {
|
|
461
|
+
readonly label: "Clear sort";
|
|
462
|
+
readonly onClick: () => void;
|
|
463
|
+
}];
|
|
464
|
+
}, {
|
|
465
|
+
readonly label: "Group by...";
|
|
466
|
+
readonly icon: import("@mui/material/OverridableComponent").OverridableComponent<import("@mui/material").SvgIconTypeMap<{}, "svg">> & {
|
|
467
|
+
muiName: string;
|
|
468
|
+
};
|
|
469
|
+
readonly onClick: () => void;
|
|
470
|
+
}, {
|
|
471
|
+
readonly label: "Show soft clipping";
|
|
472
|
+
readonly icon: import("@mui/material/OverridableComponent").OverridableComponent<import("@mui/material").SvgIconTypeMap<{}, "svg">> & {
|
|
473
|
+
muiName: string;
|
|
474
|
+
};
|
|
475
|
+
readonly type: "checkbox";
|
|
476
|
+
readonly checked: boolean;
|
|
477
|
+
readonly onClick: () => void;
|
|
478
|
+
}, {
|
|
479
|
+
readonly label: "Fade mismatches by quality";
|
|
480
|
+
readonly type: "checkbox";
|
|
481
|
+
readonly checked: any;
|
|
482
|
+
readonly onClick: () => void;
|
|
483
|
+
}];
|
|
472
484
|
} & {
|
|
473
485
|
afterAttach(): void;
|
|
474
486
|
}, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>;
|
|
@@ -36,12 +36,15 @@ const util_2 = require("../util");
|
|
|
36
36
|
// icons
|
|
37
37
|
const Visibility_1 = __importDefault(require("@mui/icons-material/Visibility"));
|
|
38
38
|
const Sort_1 = __importDefault(require("@mui/icons-material/Sort"));
|
|
39
|
+
const Workspaces_1 = __importDefault(require("@mui/icons-material/Workspaces"));
|
|
40
|
+
const ColorLens_1 = __importDefault(require("@mui/icons-material/ColorLens"));
|
|
39
41
|
// locals
|
|
40
42
|
const SharedLinearPileupDisplayMixin_1 = require("./SharedLinearPileupDisplayMixin");
|
|
41
43
|
const mobx_1 = require("mobx");
|
|
42
|
-
//
|
|
43
|
-
const SortByTagDialog = (0, react_1.lazy)(() => Promise.resolve().then(() => __importStar(require('./components/
|
|
44
|
-
const
|
|
44
|
+
// lazies
|
|
45
|
+
const SortByTagDialog = (0, react_1.lazy)(() => Promise.resolve().then(() => __importStar(require('./components/SortByTagDialog'))));
|
|
46
|
+
const GroupByDialog = (0, react_1.lazy)(() => Promise.resolve().then(() => __importStar(require('./components/GroupByDialog'))));
|
|
47
|
+
const ModificationsDialog = (0, react_1.lazy)(() => Promise.resolve().then(() => __importStar(require('./components/ColorByModificationsDialog'))));
|
|
45
48
|
/**
|
|
46
49
|
* #stateModel LinearPileupDisplay
|
|
47
50
|
* #category display
|
|
@@ -248,27 +251,43 @@ function stateModelFactory(configSchema) {
|
|
|
248
251
|
return [
|
|
249
252
|
...superTrackMenuItems(),
|
|
250
253
|
{
|
|
251
|
-
label: '
|
|
252
|
-
icon:
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
254
|
+
label: 'Color by...',
|
|
255
|
+
icon: ColorLens_1.default,
|
|
256
|
+
subMenu: [
|
|
257
|
+
{
|
|
258
|
+
label: 'Pair orientation',
|
|
259
|
+
onClick: () => {
|
|
260
|
+
self.setColorScheme({ type: 'pairOrientation' });
|
|
261
|
+
},
|
|
262
|
+
},
|
|
263
|
+
{
|
|
264
|
+
label: 'Modifications or methylation',
|
|
265
|
+
onClick: () => {
|
|
266
|
+
(0, util_1.getSession)(self).queueDialog(doneCallback => [
|
|
267
|
+
ModificationsDialog,
|
|
268
|
+
{ model: self, handleClose: doneCallback },
|
|
269
|
+
]);
|
|
270
|
+
},
|
|
271
|
+
},
|
|
272
|
+
{
|
|
273
|
+
label: 'Insert size',
|
|
274
|
+
onClick: () => {
|
|
275
|
+
self.setColorScheme({ type: 'insertSize' });
|
|
276
|
+
},
|
|
277
|
+
},
|
|
278
|
+
...superColorSchemeSubMenuItems(),
|
|
279
|
+
],
|
|
263
280
|
},
|
|
264
281
|
{
|
|
265
|
-
label: 'Sort by',
|
|
282
|
+
label: 'Sort by...',
|
|
266
283
|
icon: Sort_1.default,
|
|
267
284
|
disabled: self.showSoftClipping,
|
|
268
285
|
subMenu: [
|
|
269
286
|
...['Start location', 'Read strand', 'Base pair'].map(option => ({
|
|
270
287
|
label: option,
|
|
271
|
-
onClick: () =>
|
|
288
|
+
onClick: () => {
|
|
289
|
+
self.setSortedBy(option);
|
|
290
|
+
},
|
|
272
291
|
})),
|
|
273
292
|
{
|
|
274
293
|
label: 'Sort by tag...',
|
|
@@ -281,38 +300,43 @@ function stateModelFactory(configSchema) {
|
|
|
281
300
|
},
|
|
282
301
|
{
|
|
283
302
|
label: 'Clear sort',
|
|
284
|
-
onClick: () => self.clearSelected(),
|
|
285
|
-
},
|
|
286
|
-
],
|
|
287
|
-
},
|
|
288
|
-
{
|
|
289
|
-
label: 'Color scheme',
|
|
290
|
-
subMenu: [
|
|
291
|
-
{
|
|
292
|
-
label: 'Pair orientation',
|
|
293
|
-
onClick: () => self.setColorScheme({ type: 'pairOrientation' }),
|
|
294
|
-
},
|
|
295
|
-
{
|
|
296
|
-
label: 'Modifications or methylation',
|
|
297
303
|
onClick: () => {
|
|
298
|
-
|
|
299
|
-
ModificationsDialog,
|
|
300
|
-
{ model: self, handleClose: doneCallback },
|
|
301
|
-
]);
|
|
304
|
+
self.clearSelected();
|
|
302
305
|
},
|
|
303
306
|
},
|
|
304
|
-
{
|
|
305
|
-
label: 'Insert size',
|
|
306
|
-
onClick: () => self.setColorScheme({ type: 'insertSize' }),
|
|
307
|
-
},
|
|
308
|
-
...superColorSchemeSubMenuItems(),
|
|
309
307
|
],
|
|
310
308
|
},
|
|
309
|
+
{
|
|
310
|
+
label: 'Group by...',
|
|
311
|
+
icon: Workspaces_1.default,
|
|
312
|
+
onClick: () => {
|
|
313
|
+
(0, util_1.getSession)(self).queueDialog(handleClose => [
|
|
314
|
+
GroupByDialog,
|
|
315
|
+
{ model: self, handleClose },
|
|
316
|
+
]);
|
|
317
|
+
},
|
|
318
|
+
},
|
|
319
|
+
{
|
|
320
|
+
label: 'Show soft clipping',
|
|
321
|
+
icon: Visibility_1.default,
|
|
322
|
+
type: 'checkbox',
|
|
323
|
+
checked: self.showSoftClipping,
|
|
324
|
+
onClick: () => {
|
|
325
|
+
self.toggleSoftClipping();
|
|
326
|
+
// if toggling from off to on, will break sort for this track
|
|
327
|
+
// so clear it
|
|
328
|
+
if (self.showSoftClipping) {
|
|
329
|
+
self.clearSelected();
|
|
330
|
+
}
|
|
331
|
+
},
|
|
332
|
+
},
|
|
311
333
|
{
|
|
312
334
|
label: 'Fade mismatches by quality',
|
|
313
335
|
type: 'checkbox',
|
|
314
336
|
checked: self.mismatchAlphaSetting,
|
|
315
|
-
onClick: () =>
|
|
337
|
+
onClick: () => {
|
|
338
|
+
self.toggleMismatchAlpha();
|
|
339
|
+
},
|
|
316
340
|
},
|
|
317
341
|
];
|
|
318
342
|
},
|
|
@@ -370,7 +394,11 @@ function stateModelFactory(configSchema) {
|
|
|
370
394
|
const { staticBlocks } = (0, util_1.getContainingView)(self);
|
|
371
395
|
if ((colorBy === null || colorBy === void 0 ? void 0 : colorBy.type) === 'modifications') {
|
|
372
396
|
const adapter = (0, configuration_1.getConf)(parentTrack, ['adapter']);
|
|
373
|
-
const vals = await (0, shared_1.getUniqueModificationValues)(
|
|
397
|
+
const vals = await (0, shared_1.getUniqueModificationValues)({
|
|
398
|
+
self,
|
|
399
|
+
adapterConfig: adapter,
|
|
400
|
+
blocks: staticBlocks,
|
|
401
|
+
});
|
|
374
402
|
self.updateModificationColorMap(vals);
|
|
375
403
|
}
|
|
376
404
|
self.setModificationsReady(true);
|
|
@@ -34,6 +34,7 @@ const Arcs = (0, mobx_react_1.observer)(function ({ model, }) {
|
|
|
34
34
|
const view = (0, util_1.getContainingView)(model);
|
|
35
35
|
const width = Math.round(view.dynamicBlocks.totalWidthPx);
|
|
36
36
|
const height = model.height;
|
|
37
|
+
// biome-ignore lint/correctness/useExhaustiveDependencies:
|
|
37
38
|
const cb = (0, react_1.useCallback)((ref) => {
|
|
38
39
|
model.setRef(ref);
|
|
39
40
|
},
|
|
@@ -30,7 +30,7 @@ declare function stateModelFactory(configSchema: AnyConfigurationSchemaType): im
|
|
|
30
30
|
readName: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<string>>;
|
|
31
31
|
tagFilter: import("mobx-state-tree").IMaybe<import("mobx-state-tree").IModelType<{
|
|
32
32
|
tag: import("mobx-state-tree").ISimpleType<string>;
|
|
33
|
-
value: import("mobx-state-tree").ISimpleType<string
|
|
33
|
+
value: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<string>>;
|
|
34
34
|
}, {}, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>>;
|
|
35
35
|
}, {}, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>, [undefined]>;
|
|
36
36
|
lineWidth: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<number>>;
|
|
@@ -65,7 +65,7 @@ declare function stateModelFactory(configSchema: AnyConfigurationSchemaType): im
|
|
|
65
65
|
error: unknown;
|
|
66
66
|
message: string | undefined;
|
|
67
67
|
}, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>>;
|
|
68
|
-
onHorizontalScroll?:
|
|
68
|
+
onHorizontalScroll?: () => void;
|
|
69
69
|
blockState?: Record<string, any>;
|
|
70
70
|
}>;
|
|
71
71
|
readonly DisplayBlurb: React.FC<{
|