@jbrowse/plugin-alignments 1.7.10 → 2.0.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/AlignmentsFeatureDetail/AlignmentsFeatureDetail.js +192 -216
- package/dist/AlignmentsFeatureDetail/AlignmentsFeatureDetail.js.map +1 -0
- package/dist/AlignmentsFeatureDetail/index.d.ts +3 -3
- package/dist/AlignmentsFeatureDetail/index.js +48 -44
- package/dist/AlignmentsFeatureDetail/index.js.map +1 -0
- package/dist/AlignmentsTrack/index.js +24 -32
- package/dist/AlignmentsTrack/index.js.map +1 -0
- package/dist/BamAdapter/BamAdapter.js +345 -585
- package/dist/BamAdapter/BamAdapter.js.map +1 -0
- package/dist/BamAdapter/BamSlightlyLazyFeature.js +143 -174
- package/dist/BamAdapter/BamSlightlyLazyFeature.js.map +1 -0
- package/dist/BamAdapter/MismatchParser.d.ts +1 -1
- package/dist/BamAdapter/MismatchParser.js +341 -417
- package/dist/BamAdapter/MismatchParser.js.map +1 -0
- package/dist/BamAdapter/configSchema.js +33 -46
- package/dist/BamAdapter/configSchema.js.map +1 -0
- package/dist/BamAdapter/index.js +36 -32
- package/dist/BamAdapter/index.js.map +1 -0
- package/dist/CramAdapter/CramAdapter.js +376 -644
- package/dist/CramAdapter/CramAdapter.js.map +1 -0
- package/dist/CramAdapter/CramSlightlyLazyFeature.js +374 -439
- package/dist/CramAdapter/CramSlightlyLazyFeature.js.map +1 -0
- package/dist/CramAdapter/CramTestAdapters.js +169 -227
- package/dist/CramAdapter/CramTestAdapters.js.map +1 -0
- package/dist/CramAdapter/configSchema.js +28 -38
- package/dist/CramAdapter/configSchema.js.map +1 -0
- package/dist/CramAdapter/index.js +37 -32
- package/dist/CramAdapter/index.js.map +1 -0
- package/dist/HtsgetBamAdapter/HtsgetBamAdapter.js +91 -93
- package/dist/HtsgetBamAdapter/HtsgetBamAdapter.js.map +1 -0
- package/dist/HtsgetBamAdapter/configSchema.js +19 -29
- package/dist/HtsgetBamAdapter/configSchema.js.map +1 -0
- package/dist/HtsgetBamAdapter/index.js +44 -38
- package/dist/HtsgetBamAdapter/index.js.map +1 -0
- package/dist/LinearAlignmentsDisplay/components/AlignmentsDisplay.js +36 -65
- package/dist/LinearAlignmentsDisplay/components/AlignmentsDisplay.js.map +1 -0
- package/dist/LinearAlignmentsDisplay/index.js +22 -28
- package/dist/LinearAlignmentsDisplay/index.js.map +1 -0
- package/dist/LinearAlignmentsDisplay/models/configSchema.js +12 -23
- package/dist/LinearAlignmentsDisplay/models/configSchema.js.map +1 -0
- package/dist/LinearAlignmentsDisplay/models/model.d.ts +10 -10
- package/dist/LinearAlignmentsDisplay/models/model.js +257 -245
- package/dist/LinearAlignmentsDisplay/models/model.js.map +1 -0
- package/dist/LinearPileupDisplay/components/ColorByModifications.js +98 -116
- package/dist/LinearPileupDisplay/components/ColorByModifications.js.map +1 -0
- package/dist/LinearPileupDisplay/components/ColorByTag.js +82 -91
- package/dist/LinearPileupDisplay/components/ColorByTag.js.map +1 -0
- package/dist/LinearPileupDisplay/components/FilterByTag.js +156 -192
- package/dist/LinearPileupDisplay/components/FilterByTag.js.map +1 -0
- package/dist/LinearPileupDisplay/components/LinearPileupDisplayBlurb.js +15 -29
- package/dist/LinearPileupDisplay/components/LinearPileupDisplayBlurb.js.map +1 -0
- package/dist/LinearPileupDisplay/components/SetFeatureHeight.js +79 -93
- package/dist/LinearPileupDisplay/components/SetFeatureHeight.js.map +1 -0
- package/dist/LinearPileupDisplay/components/SetMaxHeight.js +78 -81
- package/dist/LinearPileupDisplay/components/SetMaxHeight.js.map +1 -0
- package/dist/LinearPileupDisplay/components/SortByTag.js +80 -88
- package/dist/LinearPileupDisplay/components/SortByTag.js.map +1 -0
- package/dist/LinearPileupDisplay/configSchema.js +40 -42
- package/dist/LinearPileupDisplay/configSchema.js.map +1 -0
- package/dist/LinearPileupDisplay/index.js +21 -27
- package/dist/LinearPileupDisplay/index.js.map +1 -0
- package/dist/LinearPileupDisplay/model.d.ts +28 -18
- package/dist/LinearPileupDisplay/model.js +702 -797
- package/dist/LinearPileupDisplay/model.js.map +1 -0
- package/dist/LinearSNPCoverageDisplay/components/Tooltip.d.ts +1 -1
- package/dist/LinearSNPCoverageDisplay/components/Tooltip.js +104 -77
- package/dist/LinearSNPCoverageDisplay/components/Tooltip.js.map +1 -0
- package/dist/LinearSNPCoverageDisplay/index.js +21 -27
- package/dist/LinearSNPCoverageDisplay/index.js.map +1 -0
- package/dist/LinearSNPCoverageDisplay/models/configSchema.js +45 -55
- package/dist/LinearSNPCoverageDisplay/models/configSchema.js.map +1 -0
- package/dist/LinearSNPCoverageDisplay/models/model.d.ts +14 -12
- package/dist/LinearSNPCoverageDisplay/models/model.js +257 -230
- package/dist/LinearSNPCoverageDisplay/models/model.js.map +1 -0
- package/dist/NestedFrequencyTable.js +104 -139
- package/dist/NestedFrequencyTable.js.map +1 -0
- package/dist/PileupRPC/rpcMethods.js +199 -278
- package/dist/PileupRPC/rpcMethods.js.map +1 -0
- package/dist/PileupRenderer/PileupLayoutSession.js +56 -76
- package/dist/PileupRenderer/PileupLayoutSession.js.map +1 -0
- package/dist/PileupRenderer/PileupRenderer.d.ts +4 -4
- package/dist/PileupRenderer/PileupRenderer.js +938 -1205
- package/dist/PileupRenderer/PileupRenderer.js.map +1 -0
- package/dist/PileupRenderer/components/PileupRendering.d.ts +1 -1
- package/dist/PileupRenderer/components/PileupRendering.js +173 -253
- package/dist/PileupRenderer/components/PileupRendering.js.map +1 -0
- package/dist/PileupRenderer/configSchema.js +65 -71
- package/dist/PileupRenderer/configSchema.js.map +1 -0
- package/dist/PileupRenderer/index.js +17 -22
- package/dist/PileupRenderer/index.js.map +1 -0
- package/dist/PileupRenderer/sortUtil.js +83 -107
- package/dist/PileupRenderer/sortUtil.js.map +1 -0
- package/dist/SNPCoverageAdapter/SNPCoverageAdapter.js +436 -589
- package/dist/SNPCoverageAdapter/SNPCoverageAdapter.js.map +1 -0
- package/dist/SNPCoverageAdapter/configSchema.js +10 -20
- package/dist/SNPCoverageAdapter/configSchema.js.map +1 -0
- package/dist/SNPCoverageAdapter/index.js +46 -41
- package/dist/SNPCoverageAdapter/index.js.map +1 -0
- package/dist/SNPCoverageRenderer/SNPCoverageRenderer.d.ts +1 -1
- package/dist/SNPCoverageRenderer/SNPCoverageRenderer.js +265 -290
- package/dist/SNPCoverageRenderer/SNPCoverageRenderer.js.map +1 -0
- package/dist/SNPCoverageRenderer/configSchema.js +30 -39
- package/dist/SNPCoverageRenderer/configSchema.js.map +1 -0
- package/dist/SNPCoverageRenderer/index.js +19 -30
- package/dist/SNPCoverageRenderer/index.js.map +1 -0
- package/dist/index.js +135 -152
- package/dist/index.js.map +1 -0
- package/dist/shared.js +84 -92
- package/dist/shared.js.map +1 -0
- package/dist/util.js +130 -121
- package/dist/util.js.map +1 -0
- package/esm/AlignmentsFeatureDetail/AlignmentsFeatureDetail.d.ts +6 -0
- package/esm/AlignmentsFeatureDetail/AlignmentsFeatureDetail.js +145 -0
- package/esm/AlignmentsFeatureDetail/AlignmentsFeatureDetail.js.map +1 -0
- package/esm/AlignmentsFeatureDetail/index.d.ts +38 -0
- package/esm/AlignmentsFeatureDetail/index.js +23 -0
- package/esm/AlignmentsFeatureDetail/index.js.map +1 -0
- package/esm/AlignmentsTrack/index.d.ts +2 -0
- package/esm/AlignmentsTrack/index.js +23 -0
- package/esm/AlignmentsTrack/index.js.map +1 -0
- package/esm/BamAdapter/BamAdapter.d.ts +40 -0
- package/esm/BamAdapter/BamAdapter.js +173 -0
- package/esm/BamAdapter/BamAdapter.js.map +1 -0
- package/esm/BamAdapter/BamSlightlyLazyFeature.d.ts +33 -0
- package/esm/BamAdapter/BamSlightlyLazyFeature.js +107 -0
- package/esm/BamAdapter/BamSlightlyLazyFeature.js.map +1 -0
- package/esm/BamAdapter/MismatchParser.d.ts +25 -0
- package/esm/BamAdapter/MismatchParser.js +294 -0
- package/esm/BamAdapter/MismatchParser.js.map +1 -0
- package/esm/BamAdapter/configSchema.d.ts +2 -0
- package/esm/BamAdapter/configSchema.js +31 -0
- package/esm/BamAdapter/configSchema.js.map +1 -0
- package/esm/BamAdapter/index.d.ts +3 -0
- package/esm/BamAdapter/index.js +10 -0
- package/esm/BamAdapter/index.js.map +1 -0
- package/esm/CramAdapter/CramAdapter.d.ts +53 -0
- package/esm/CramAdapter/CramAdapter.js +228 -0
- package/esm/CramAdapter/CramAdapter.js.map +1 -0
- package/esm/CramAdapter/CramSlightlyLazyFeature.d.ts +49 -0
- package/esm/CramAdapter/CramSlightlyLazyFeature.js +349 -0
- package/esm/CramAdapter/CramSlightlyLazyFeature.js.map +1 -0
- package/esm/CramAdapter/CramTestAdapters.d.ts +29 -0
- package/esm/CramAdapter/CramTestAdapters.js +70 -0
- package/esm/CramAdapter/CramTestAdapters.js.map +1 -0
- package/esm/CramAdapter/configSchema.d.ts +3 -0
- package/esm/CramAdapter/configSchema.js +26 -0
- package/esm/CramAdapter/configSchema.js.map +1 -0
- package/esm/CramAdapter/index.d.ts +3 -0
- package/esm/CramAdapter/index.js +11 -0
- package/esm/CramAdapter/index.js.map +1 -0
- package/esm/HtsgetBamAdapter/HtsgetBamAdapter.d.ts +9 -0
- package/esm/HtsgetBamAdapter/HtsgetBamAdapter.js +27 -0
- package/esm/HtsgetBamAdapter/HtsgetBamAdapter.js.map +1 -0
- package/esm/HtsgetBamAdapter/configSchema.d.ts +2 -0
- package/esm/HtsgetBamAdapter/configSchema.js +17 -0
- package/esm/HtsgetBamAdapter/configSchema.js.map +1 -0
- package/esm/HtsgetBamAdapter/index.d.ts +3 -0
- package/esm/HtsgetBamAdapter/index.js +16 -0
- package/esm/HtsgetBamAdapter/index.js.map +1 -0
- package/esm/LinearAlignmentsDisplay/components/AlignmentsDisplay.d.ts +7 -0
- package/esm/LinearAlignmentsDisplay/components/AlignmentsDisplay.js +34 -0
- package/esm/LinearAlignmentsDisplay/components/AlignmentsDisplay.js.map +1 -0
- package/esm/LinearAlignmentsDisplay/index.d.ts +2 -0
- package/esm/LinearAlignmentsDisplay/index.js +19 -0
- package/esm/LinearAlignmentsDisplay/index.js.map +1 -0
- package/esm/LinearAlignmentsDisplay/models/configSchema.d.ts +4 -0
- package/esm/LinearAlignmentsDisplay/models/configSchema.js +12 -0
- package/esm/LinearAlignmentsDisplay/models/configSchema.js.map +1 -0
- package/esm/LinearAlignmentsDisplay/models/model.d.ts +105 -0
- package/esm/LinearAlignmentsDisplay/models/model.js +181 -0
- package/esm/LinearAlignmentsDisplay/models/model.js.map +1 -0
- package/esm/LinearPileupDisplay/components/ColorByModifications.d.ts +14 -0
- package/esm/LinearPileupDisplay/components/ColorByModifications.js +71 -0
- package/esm/LinearPileupDisplay/components/ColorByModifications.js.map +1 -0
- package/esm/LinearPileupDisplay/components/ColorByTag.d.ts +9 -0
- package/esm/LinearPileupDisplay/components/ColorByTag.js +45 -0
- package/esm/LinearPileupDisplay/components/ColorByTag.js.map +1 -0
- package/esm/LinearPileupDisplay/components/FilterByTag.d.ts +18 -0
- package/esm/LinearPileupDisplay/components/FilterByTag.js +123 -0
- package/esm/LinearPileupDisplay/components/FilterByTag.js.map +1 -0
- package/esm/LinearPileupDisplay/components/LinearPileupDisplayBlurb.d.ts +13 -0
- package/esm/LinearPileupDisplay/components/LinearPileupDisplayBlurb.js +13 -0
- package/esm/LinearPileupDisplay/components/LinearPileupDisplayBlurb.js.map +1 -0
- package/esm/LinearPileupDisplay/components/SetFeatureHeight.d.ts +16 -0
- package/esm/LinearPileupDisplay/components/SetFeatureHeight.js +41 -0
- package/esm/LinearPileupDisplay/components/SetFeatureHeight.js.map +1 -0
- package/esm/LinearPileupDisplay/components/SetMaxHeight.d.ts +10 -0
- package/esm/LinearPileupDisplay/components/SetMaxHeight.js +43 -0
- package/esm/LinearPileupDisplay/components/SetMaxHeight.js.map +1 -0
- package/esm/LinearPileupDisplay/components/SortByTag.d.ts +9 -0
- package/esm/LinearPileupDisplay/components/SortByTag.js +43 -0
- package/esm/LinearPileupDisplay/components/SortByTag.js.map +1 -0
- package/esm/LinearPileupDisplay/configSchema.d.ts +6 -0
- package/esm/LinearPileupDisplay/configSchema.js +41 -0
- package/esm/LinearPileupDisplay/configSchema.js.map +1 -0
- package/esm/LinearPileupDisplay/index.d.ts +2 -0
- package/esm/LinearPileupDisplay/index.js +18 -0
- package/esm/LinearPileupDisplay/index.js.map +1 -0
- package/esm/LinearPileupDisplay/model.d.ts +332 -0
- package/esm/LinearPileupDisplay/model.js +576 -0
- package/esm/LinearPileupDisplay/model.js.map +1 -0
- package/esm/LinearSNPCoverageDisplay/components/Tooltip.d.ts +10 -0
- package/esm/LinearSNPCoverageDisplay/components/Tooltip.js +57 -0
- package/esm/LinearSNPCoverageDisplay/components/Tooltip.js.map +1 -0
- package/esm/LinearSNPCoverageDisplay/index.d.ts +2 -0
- package/esm/LinearSNPCoverageDisplay/index.js +18 -0
- package/esm/LinearSNPCoverageDisplay/index.js.map +1 -0
- package/esm/LinearSNPCoverageDisplay/models/configSchema.d.ts +2 -0
- package/esm/LinearSNPCoverageDisplay/models/configSchema.js +44 -0
- package/esm/LinearSNPCoverageDisplay/models/configSchema.js.map +1 -0
- package/esm/LinearSNPCoverageDisplay/models/model.d.ts +348 -0
- package/esm/LinearSNPCoverageDisplay/models/model.js +185 -0
- package/esm/LinearSNPCoverageDisplay/models/model.js.map +1 -0
- package/esm/NestedFrequencyTable.d.ts +14 -0
- package/esm/NestedFrequencyTable.js +101 -0
- package/esm/NestedFrequencyTable.js.map +1 -0
- package/esm/PileupRPC/rpcMethods.d.ts +34 -0
- package/esm/PileupRPC/rpcMethods.js +70 -0
- package/esm/PileupRPC/rpcMethods.js.map +1 -0
- package/esm/PileupRenderer/PileupLayoutSession.d.ts +32 -0
- package/esm/PileupRenderer/PileupLayoutSession.js +32 -0
- package/esm/PileupRenderer/PileupLayoutSession.js.map +1 -0
- package/esm/PileupRenderer/PileupRenderer.d.ts +182 -0
- package/esm/PileupRenderer/PileupRenderer.js +830 -0
- package/esm/PileupRenderer/PileupRenderer.js.map +1 -0
- package/esm/PileupRenderer/components/PileupRendering.d.ts +23 -0
- package/esm/PileupRenderer/components/PileupRendering.js +138 -0
- package/esm/PileupRenderer/components/PileupRendering.js.map +1 -0
- package/esm/PileupRenderer/configSchema.d.ts +2 -0
- package/esm/PileupRenderer/configSchema.js +64 -0
- package/esm/PileupRenderer/configSchema.js.map +1 -0
- package/esm/PileupRenderer/index.d.ts +2 -0
- package/esm/PileupRenderer/index.js +12 -0
- package/esm/PileupRenderer/index.js.map +1 -0
- package/esm/PileupRenderer/sortUtil.d.ts +8 -0
- package/esm/PileupRenderer/sortUtil.js +80 -0
- package/esm/PileupRenderer/sortUtil.js.map +1 -0
- package/esm/SNPCoverageAdapter/SNPCoverageAdapter.d.ts +67 -0
- package/esm/SNPCoverageAdapter/SNPCoverageAdapter.js +259 -0
- package/esm/SNPCoverageAdapter/SNPCoverageAdapter.js.map +1 -0
- package/esm/SNPCoverageAdapter/configSchema.d.ts +3 -0
- package/esm/SNPCoverageAdapter/configSchema.js +6 -0
- package/esm/SNPCoverageAdapter/configSchema.js.map +1 -0
- package/esm/SNPCoverageAdapter/index.d.ts +3 -0
- package/esm/SNPCoverageAdapter/index.js +18 -0
- package/esm/SNPCoverageAdapter/index.js.map +1 -0
- package/esm/SNPCoverageRenderer/SNPCoverageRenderer.d.ts +20 -0
- package/esm/SNPCoverageRenderer/SNPCoverageRenderer.js +185 -0
- package/esm/SNPCoverageRenderer/SNPCoverageRenderer.js.map +1 -0
- package/esm/SNPCoverageRenderer/configSchema.d.ts +2 -0
- package/esm/SNPCoverageRenderer/configSchema.js +29 -0
- package/esm/SNPCoverageRenderer/configSchema.js.map +1 -0
- package/esm/SNPCoverageRenderer/index.d.ts +3 -0
- package/esm/SNPCoverageRenderer/index.js +14 -0
- package/esm/SNPCoverageRenderer/index.js.map +1 -0
- package/esm/index.d.ts +10 -0
- package/esm/index.js +91 -0
- package/esm/index.js.map +1 -0
- package/esm/shared.d.ts +25 -0
- package/esm/shared.js +28 -0
- package/esm/shared.js.map +1 -0
- package/esm/util.d.ts +19 -0
- package/esm/util.js +83 -0
- package/esm/util.js.map +1 -0
- package/package.json +22 -14
- package/src/AlignmentsFeatureDetail/AlignmentsFeatureDetail.tsx +4 -4
- package/src/AlignmentsFeatureDetail/__snapshots__/index.test.js.snap +321 -397
- package/src/BamAdapter/MismatchParser.ts +2 -2
- package/src/LinearAlignmentsDisplay/components/AlignmentsDisplay.tsx +3 -3
- package/src/LinearPileupDisplay/components/ColorByModifications.tsx +7 -7
- package/src/LinearPileupDisplay/components/ColorByTag.tsx +5 -5
- package/src/LinearPileupDisplay/components/FilterByTag.tsx +5 -5
- package/src/LinearPileupDisplay/components/LinearPileupDisplayBlurb.tsx +1 -1
- package/src/LinearPileupDisplay/components/SetFeatureHeight.tsx +9 -9
- package/src/LinearPileupDisplay/components/SetMaxHeight.tsx +5 -5
- package/src/LinearPileupDisplay/components/SortByTag.tsx +5 -5
- package/src/LinearPileupDisplay/model.ts +16 -10
- package/src/LinearSNPCoverageDisplay/models/model.ts +25 -25
- package/src/PileupRenderer/PileupRenderer.tsx +54 -40
- package/src/PileupRenderer/components/PileupRendering.tsx +11 -11
- package/src/SNPCoverageRenderer/SNPCoverageRenderer.ts +7 -5
- package/dist/AlignmentsFeatureDetail/index.test.js +0 -60
- package/dist/BamAdapter/BamAdapter.test.js +0 -177
- package/dist/BamAdapter/MismatchParser.test.js +0 -251
- package/dist/CramAdapter/CramAdapter.test.js +0 -138
- package/dist/LinearAlignmentsDisplay/models/configSchema.test.js +0 -83
- package/dist/LinearPileupDisplay/configSchema.test.js +0 -92
- package/dist/LinearSNPCoverageDisplay/models/configSchema.test.js +0 -62
- package/dist/PileupRenderer/components/PileupRendering.test.js +0 -36
- package/dist/declare.d.js +0 -1
- package/dist/index.test.js +0 -26
|
@@ -11,8 +11,8 @@ export interface Mismatch {
|
|
|
11
11
|
}
|
|
12
12
|
const mdRegex = new RegExp(/(\d+|\^[a-z]+|[a-z])/gi)
|
|
13
13
|
const modificationRegex = new RegExp(/([A-Z])([-+])([^,.?]+)([.?])?/)
|
|
14
|
-
export function parseCigar(cigar
|
|
15
|
-
return
|
|
14
|
+
export function parseCigar(cigar = '') {
|
|
15
|
+
return cigar.split(/([MIDNSHPX=])/).slice(0, -1)
|
|
16
16
|
}
|
|
17
17
|
export function cigarToMismatches(
|
|
18
18
|
ops: string[],
|
|
@@ -2,10 +2,10 @@ import React from 'react'
|
|
|
2
2
|
import { observer } from 'mobx-react'
|
|
3
3
|
import { getConf } from '@jbrowse/core/configuration'
|
|
4
4
|
import { ResizeHandle } from '@jbrowse/core/ui'
|
|
5
|
-
import { makeStyles } from '
|
|
5
|
+
import { makeStyles } from 'tss-react/mui'
|
|
6
6
|
import { AlignmentsDisplayModel } from '../models/model'
|
|
7
7
|
|
|
8
|
-
const useStyles = makeStyles(() => ({
|
|
8
|
+
const useStyles = makeStyles()(() => ({
|
|
9
9
|
resizeHandle: {
|
|
10
10
|
height: 2,
|
|
11
11
|
position: 'absolute',
|
|
@@ -15,7 +15,7 @@ const useStyles = makeStyles(() => ({
|
|
|
15
15
|
|
|
16
16
|
function AlignmentsDisplay({ model }: { model: AlignmentsDisplayModel }) {
|
|
17
17
|
const { PileupDisplay, SNPCoverageDisplay, showPileup, showCoverage } = model
|
|
18
|
-
const classes = useStyles()
|
|
18
|
+
const { classes } = useStyles()
|
|
19
19
|
const top = SNPCoverageDisplay.height
|
|
20
20
|
return (
|
|
21
21
|
<div
|
|
@@ -3,18 +3,18 @@ import { observer } from 'mobx-react'
|
|
|
3
3
|
import { ObservableMap } from 'mobx'
|
|
4
4
|
import {
|
|
5
5
|
Button,
|
|
6
|
+
CircularProgress,
|
|
6
7
|
Dialog,
|
|
7
8
|
DialogActions,
|
|
8
9
|
DialogContent,
|
|
9
10
|
DialogTitle,
|
|
10
11
|
IconButton,
|
|
11
12
|
Typography,
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
import CloseIcon from '@material-ui/icons/Close'
|
|
13
|
+
} from '@mui/material'
|
|
14
|
+
import { makeStyles } from 'tss-react/mui'
|
|
15
|
+
import CloseIcon from '@mui/icons-material/Close'
|
|
16
16
|
|
|
17
|
-
const useStyles = makeStyles(theme => ({
|
|
17
|
+
const useStyles = makeStyles()(theme => ({
|
|
18
18
|
closeButton: {
|
|
19
19
|
position: 'absolute',
|
|
20
20
|
right: theme.spacing(1),
|
|
@@ -35,7 +35,7 @@ function ModificationTable({
|
|
|
35
35
|
}: {
|
|
36
36
|
modifications: [string, string][]
|
|
37
37
|
}) {
|
|
38
|
-
const classes = useStyles()
|
|
38
|
+
const { classes } = useStyles()
|
|
39
39
|
return (
|
|
40
40
|
<table className={classes.table}>
|
|
41
41
|
<tbody>
|
|
@@ -64,7 +64,7 @@ function ColorByTagDlg(props: {
|
|
|
64
64
|
}
|
|
65
65
|
handleClose: () => void
|
|
66
66
|
}) {
|
|
67
|
-
const classes = useStyles()
|
|
67
|
+
const { classes } = useStyles()
|
|
68
68
|
const { model, handleClose } = props
|
|
69
69
|
const { colorBy, modificationTagMap } = model
|
|
70
70
|
|
|
@@ -9,11 +9,11 @@ import {
|
|
|
9
9
|
IconButton,
|
|
10
10
|
TextField,
|
|
11
11
|
Typography,
|
|
12
|
-
|
|
13
|
-
} from '
|
|
14
|
-
import CloseIcon from '@
|
|
12
|
+
} from '@mui/material'
|
|
13
|
+
import { makeStyles } from 'tss-react/mui'
|
|
14
|
+
import CloseIcon from '@mui/icons-material/Close'
|
|
15
15
|
|
|
16
|
-
const useStyles = makeStyles(theme => ({
|
|
16
|
+
const useStyles = makeStyles()(theme => ({
|
|
17
17
|
root: {
|
|
18
18
|
width: 300,
|
|
19
19
|
},
|
|
@@ -29,7 +29,7 @@ function ColorByTagDlg(props: {
|
|
|
29
29
|
model: { setColorScheme: Function }
|
|
30
30
|
handleClose: () => void
|
|
31
31
|
}) {
|
|
32
|
-
const classes = useStyles()
|
|
32
|
+
const { classes } = useStyles()
|
|
33
33
|
const { model, handleClose } = props
|
|
34
34
|
const [tag, setTag] = useState('')
|
|
35
35
|
const validTag = tag.match(/^[A-Za-z][A-Za-z0-9]$/)
|
|
@@ -11,12 +11,12 @@ import {
|
|
|
11
11
|
Paper,
|
|
12
12
|
TextField,
|
|
13
13
|
Typography,
|
|
14
|
-
|
|
15
|
-
} from '
|
|
14
|
+
} from '@mui/material'
|
|
15
|
+
import { makeStyles } from 'tss-react/mui'
|
|
16
16
|
|
|
17
|
-
import CloseIcon from '@
|
|
17
|
+
import CloseIcon from '@mui/icons-material/Close'
|
|
18
18
|
|
|
19
|
-
const useStyles = makeStyles(theme => ({
|
|
19
|
+
const useStyles = makeStyles()(theme => ({
|
|
20
20
|
paper: {
|
|
21
21
|
padding: theme.spacing(2),
|
|
22
22
|
margin: theme.spacing(2),
|
|
@@ -93,7 +93,7 @@ function FilterByTagDlg(props: {
|
|
|
93
93
|
handleClose: () => void
|
|
94
94
|
}) {
|
|
95
95
|
const { model, handleClose } = props
|
|
96
|
-
const classes = useStyles()
|
|
96
|
+
const { classes } = useStyles()
|
|
97
97
|
const { filterBy } = model
|
|
98
98
|
const [flagInclude, setFlagInclude] = useState(filterBy?.flagInclude)
|
|
99
99
|
const [flagExclude, setFlagExclude] = useState(filterBy?.flagExclude)
|
|
@@ -2,20 +2,20 @@ import React, { useState } from 'react'
|
|
|
2
2
|
import { observer } from 'mobx-react'
|
|
3
3
|
import {
|
|
4
4
|
Button,
|
|
5
|
-
|
|
6
|
-
Typography,
|
|
7
|
-
IconButton,
|
|
5
|
+
Checkbox,
|
|
8
6
|
Dialog,
|
|
9
7
|
DialogActions,
|
|
10
8
|
DialogContent,
|
|
11
9
|
DialogTitle,
|
|
12
|
-
Checkbox,
|
|
13
10
|
FormControlLabel,
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
11
|
+
IconButton,
|
|
12
|
+
TextField,
|
|
13
|
+
Typography,
|
|
14
|
+
} from '@mui/material'
|
|
15
|
+
import { makeStyles } from 'tss-react/mui'
|
|
16
|
+
import CloseIcon from '@mui/icons-material/Close'
|
|
17
17
|
|
|
18
|
-
const useStyles = makeStyles(theme => ({
|
|
18
|
+
const useStyles = makeStyles()(theme => ({
|
|
19
19
|
closeButton: {
|
|
20
20
|
position: 'absolute',
|
|
21
21
|
right: theme.spacing(1),
|
|
@@ -37,7 +37,7 @@ function SetFeatureHeightDlg(props: {
|
|
|
37
37
|
}
|
|
38
38
|
handleClose: () => void
|
|
39
39
|
}) {
|
|
40
|
-
const classes = useStyles()
|
|
40
|
+
const { classes } = useStyles()
|
|
41
41
|
const { model, handleClose } = props
|
|
42
42
|
const { featureHeightSetting, noSpacing: noSpacingSetting } = model
|
|
43
43
|
const [height, setHeight] = useState(`${featureHeightSetting}`)
|
|
@@ -9,11 +9,11 @@ import {
|
|
|
9
9
|
IconButton,
|
|
10
10
|
TextField,
|
|
11
11
|
Typography,
|
|
12
|
-
|
|
13
|
-
} from '
|
|
14
|
-
import CloseIcon from '@
|
|
12
|
+
} from '@mui/material'
|
|
13
|
+
import { makeStyles } from 'tss-react/mui'
|
|
14
|
+
import CloseIcon from '@mui/icons-material/Close'
|
|
15
15
|
|
|
16
|
-
const useStyles = makeStyles(theme => ({
|
|
16
|
+
const useStyles = makeStyles()(theme => ({
|
|
17
17
|
root: {
|
|
18
18
|
width: 500,
|
|
19
19
|
},
|
|
@@ -36,7 +36,7 @@ function SetMaxHeightDlg(props: {
|
|
|
36
36
|
handleClose: () => void
|
|
37
37
|
}) {
|
|
38
38
|
const { model, handleClose } = props
|
|
39
|
-
const classes = useStyles()
|
|
39
|
+
const { classes } = useStyles()
|
|
40
40
|
const { maxHeight = '' } = model
|
|
41
41
|
const [max, setMax] = useState(`${maxHeight}`)
|
|
42
42
|
|
|
@@ -9,12 +9,12 @@ import {
|
|
|
9
9
|
IconButton,
|
|
10
10
|
TextField,
|
|
11
11
|
Typography,
|
|
12
|
-
|
|
13
|
-
} from '
|
|
12
|
+
} from '@mui/material'
|
|
13
|
+
import { makeStyles } from 'tss-react/mui'
|
|
14
14
|
|
|
15
|
-
import CloseIcon from '@
|
|
15
|
+
import CloseIcon from '@mui/icons-material/Close'
|
|
16
16
|
|
|
17
|
-
const useStyles = makeStyles(theme => ({
|
|
17
|
+
const useStyles = makeStyles()(theme => ({
|
|
18
18
|
root: {
|
|
19
19
|
margin: 0,
|
|
20
20
|
padding: theme.spacing(2),
|
|
@@ -31,7 +31,7 @@ function SortByTagDlg(props: {
|
|
|
31
31
|
model: { setSortedBy: Function }
|
|
32
32
|
handleClose: () => void
|
|
33
33
|
}) {
|
|
34
|
-
const classes = useStyles()
|
|
34
|
+
const { classes } = useStyles()
|
|
35
35
|
const { model, handleClose } = props
|
|
36
36
|
const [tag, setTag] = useState('')
|
|
37
37
|
const validTag = tag.match(/^[A-Za-z][A-Za-z0-9]$/)
|
|
@@ -23,12 +23,12 @@ import {
|
|
|
23
23
|
} from '@jbrowse/plugin-linear-genome-view'
|
|
24
24
|
|
|
25
25
|
// icons
|
|
26
|
-
import VisibilityIcon from '@
|
|
26
|
+
import VisibilityIcon from '@mui/icons-material/Visibility'
|
|
27
27
|
import { ContentCopy as ContentCopyIcon } from '@jbrowse/core/ui/Icons'
|
|
28
|
-
import MenuOpenIcon from '@
|
|
29
|
-
import SortIcon from '@
|
|
30
|
-
import PaletteIcon from '@
|
|
31
|
-
import FilterListIcon from '@
|
|
28
|
+
import MenuOpenIcon from '@mui/icons-material/MenuOpen'
|
|
29
|
+
import SortIcon from '@mui/icons-material/Sort'
|
|
30
|
+
import PaletteIcon from '@mui/icons-material/Palette'
|
|
31
|
+
import FilterListIcon from '@mui/icons-material/ClearAll'
|
|
32
32
|
|
|
33
33
|
// locals
|
|
34
34
|
import { LinearPileupDisplayConfigModel } from './configSchema'
|
|
@@ -178,6 +178,13 @@ const stateModelFactory = (configSchema: LinearPileupDisplayConfigModel) =>
|
|
|
178
178
|
} = self
|
|
179
179
|
const { staticBlocks, bpPerPx } = view
|
|
180
180
|
|
|
181
|
+
if (!self.estimatedStatsReady) {
|
|
182
|
+
return
|
|
183
|
+
}
|
|
184
|
+
if (self.regionTooLarge) {
|
|
185
|
+
return
|
|
186
|
+
}
|
|
187
|
+
|
|
181
188
|
// continually generate the vc pairing, set and rerender if any
|
|
182
189
|
// new values seen
|
|
183
190
|
if (colorBy?.tag) {
|
|
@@ -321,16 +328,15 @@ const stateModelFactory = (configSchema: LinearPileupDisplayConfigModel) =>
|
|
|
321
328
|
}
|
|
322
329
|
const { refName, assemblyName, offset } = centerLineInfo
|
|
323
330
|
const centerBp = Math.round(offset) + 1
|
|
324
|
-
const centerRefName = refName
|
|
325
331
|
|
|
326
|
-
if (centerBp < 0) {
|
|
332
|
+
if (centerBp < 0 || !refName) {
|
|
327
333
|
return
|
|
328
334
|
}
|
|
329
335
|
|
|
330
336
|
self.sortedBy = {
|
|
331
337
|
type,
|
|
332
338
|
pos: centerBp,
|
|
333
|
-
refName
|
|
339
|
+
refName,
|
|
334
340
|
assemblyName,
|
|
335
341
|
tag,
|
|
336
342
|
}
|
|
@@ -466,8 +472,8 @@ const stateModelFactory = (configSchema: LinearPileupDisplayConfigModel) =>
|
|
|
466
472
|
sortedBy,
|
|
467
473
|
colorBy,
|
|
468
474
|
filterBy: JSON.parse(JSON.stringify(filterBy)),
|
|
469
|
-
colorTagMap:
|
|
470
|
-
modificationTagMap:
|
|
475
|
+
colorTagMap: Object.fromEntries(colorTagMap.toJSON()),
|
|
476
|
+
modificationTagMap: Object.fromEntries(modificationTagMap.toJSON()),
|
|
471
477
|
showSoftClip: self.showSoftClipping,
|
|
472
478
|
config: self.rendererConfig,
|
|
473
479
|
async onFeatureClick(_: unknown, featureId?: string) {
|
|
@@ -93,35 +93,29 @@ const stateModelFactory = (
|
|
|
93
93
|
{
|
|
94
94
|
...configBlob,
|
|
95
95
|
drawInterbaseCounts:
|
|
96
|
-
self.drawInterbaseCounts
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
drawIndicators:
|
|
100
|
-
self.drawIndicators === undefined
|
|
101
|
-
? configBlob.drawIndicators
|
|
102
|
-
: self.drawIndicators,
|
|
103
|
-
drawArcs:
|
|
104
|
-
self.drawArcs === undefined
|
|
105
|
-
? configBlob.drawArcs
|
|
106
|
-
: self.drawArcs,
|
|
96
|
+
self.drawInterbaseCounts ?? configBlob.drawInterbaseCounts,
|
|
97
|
+
drawIndicators: self.drawIndicators ?? configBlob.drawIndicators,
|
|
98
|
+
drawArcs: self.drawArcs ?? configBlob.drawArcs,
|
|
107
99
|
},
|
|
108
100
|
getEnv(self),
|
|
109
101
|
)
|
|
110
102
|
},
|
|
111
103
|
get drawArcsSetting() {
|
|
112
|
-
return
|
|
113
|
-
|
|
114
|
-
|
|
104
|
+
return (
|
|
105
|
+
self.drawArcs ?? readConfObject(this.rendererConfig, 'drawArcs')
|
|
106
|
+
)
|
|
115
107
|
},
|
|
116
108
|
get drawInterbaseCountsSetting() {
|
|
117
|
-
return
|
|
118
|
-
|
|
119
|
-
|
|
109
|
+
return (
|
|
110
|
+
self.drawInterbaseCounts ??
|
|
111
|
+
readConfObject(this.rendererConfig, 'drawInterbaseCounts')
|
|
112
|
+
)
|
|
120
113
|
},
|
|
121
114
|
get drawIndicatorsSetting() {
|
|
122
|
-
return
|
|
123
|
-
|
|
124
|
-
|
|
115
|
+
return (
|
|
116
|
+
self.drawIndicators ??
|
|
117
|
+
readConfObject(this.rendererConfig, 'drawIndicators')
|
|
118
|
+
)
|
|
125
119
|
},
|
|
126
120
|
|
|
127
121
|
get modificationsReady() {
|
|
@@ -133,17 +127,16 @@ const stateModelFactory = (
|
|
|
133
127
|
|
|
134
128
|
renderProps() {
|
|
135
129
|
const superProps = superRenderProps()
|
|
130
|
+
const { colorBy, filterBy, modificationTagMap } = self
|
|
136
131
|
return {
|
|
137
132
|
...superProps,
|
|
138
133
|
notReady: superProps.notReady || !this.modificationsReady,
|
|
139
|
-
modificationTagMap:
|
|
140
|
-
JSON.stringify(self.modificationTagMap),
|
|
141
|
-
),
|
|
134
|
+
modificationTagMap: Object.fromEntries(modificationTagMap.toJSON()),
|
|
142
135
|
|
|
143
136
|
// must use getSnapshot because otherwise changes to e.g. just the
|
|
144
137
|
// colorBy.type are not read
|
|
145
|
-
colorBy:
|
|
146
|
-
filterBy:
|
|
138
|
+
colorBy: colorBy ? getSnapshot(colorBy) : undefined,
|
|
139
|
+
filterBy: filterBy ? getSnapshot(filterBy) : undefined,
|
|
147
140
|
}
|
|
148
141
|
},
|
|
149
142
|
}
|
|
@@ -166,6 +159,13 @@ const stateModelFactory = (
|
|
|
166
159
|
try {
|
|
167
160
|
const { colorBy } = self
|
|
168
161
|
const { staticBlocks } = getContainingView(self) as LGV
|
|
162
|
+
|
|
163
|
+
if (!self.estimatedStatsReady) {
|
|
164
|
+
return
|
|
165
|
+
}
|
|
166
|
+
if (self.regionTooLarge) {
|
|
167
|
+
return
|
|
168
|
+
}
|
|
169
169
|
if (colorBy?.type === 'modifications') {
|
|
170
170
|
const vals = await getUniqueModificationValues(
|
|
171
171
|
self,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { Theme } from '@mui/material/styles'
|
|
2
2
|
import BoxRendererType, {
|
|
3
3
|
RenderArgs,
|
|
4
4
|
RenderArgsSerialized,
|
|
@@ -7,7 +7,6 @@ import BoxRendererType, {
|
|
|
7
7
|
ResultsSerialized,
|
|
8
8
|
ResultsDeserialized,
|
|
9
9
|
} from '@jbrowse/core/pluggableElementTypes/renderers/BoxRendererType'
|
|
10
|
-
import { Theme } from '@material-ui/core'
|
|
11
10
|
import { createJBrowseTheme } from '@jbrowse/core/ui'
|
|
12
11
|
import {
|
|
13
12
|
bpSpanPx,
|
|
@@ -64,11 +63,13 @@ function fillRect(
|
|
|
64
63
|
}
|
|
65
64
|
|
|
66
65
|
function getColorBaseMap(theme: Theme) {
|
|
66
|
+
// @ts-ignore
|
|
67
|
+
const { bases } = theme.palette
|
|
67
68
|
return {
|
|
68
|
-
A:
|
|
69
|
-
C:
|
|
70
|
-
G:
|
|
71
|
-
T:
|
|
69
|
+
A: bases.A.main,
|
|
70
|
+
C: bases.C.main,
|
|
71
|
+
G: bases.G.main,
|
|
72
|
+
T: bases.T.main,
|
|
72
73
|
deletion: '#808080', // gray
|
|
73
74
|
}
|
|
74
75
|
}
|
|
@@ -137,8 +138,8 @@ interface LayoutFeature {
|
|
|
137
138
|
feature: Feature
|
|
138
139
|
}
|
|
139
140
|
|
|
140
|
-
function
|
|
141
|
-
return
|
|
141
|
+
function shouldDrawSNPsMuted(type?: string) {
|
|
142
|
+
return ['methylation', 'modifications'].includes(type || '')
|
|
142
143
|
}
|
|
143
144
|
|
|
144
145
|
function shouldDrawIndels(type?: string) {
|
|
@@ -152,7 +153,7 @@ export default class PileupRenderer extends BoxRendererType {
|
|
|
152
153
|
// letter M is approximately the height
|
|
153
154
|
getCharWidthHeight(ctx: CanvasRenderingContext2D) {
|
|
154
155
|
const charWidth = measureText('A')
|
|
155
|
-
const charHeight = measureText('M')
|
|
156
|
+
const charHeight = measureText('M') - 2
|
|
156
157
|
return { charWidth, charHeight }
|
|
157
158
|
}
|
|
158
159
|
|
|
@@ -244,7 +245,8 @@ export default class PileupRenderer extends BoxRendererType {
|
|
|
244
245
|
)
|
|
245
246
|
|
|
246
247
|
return {
|
|
247
|
-
|
|
248
|
+
// xref https://github.com/mobxjs/mobx-state-tree/issues/1524 for Omit
|
|
249
|
+
...(region as Omit<typeof region, symbol>),
|
|
248
250
|
start: Math.floor(Math.max(start - bpExpansion, 0)),
|
|
249
251
|
end: Math.ceil(end + bpExpansion),
|
|
250
252
|
}
|
|
@@ -453,7 +455,7 @@ export default class PileupRenderer extends BoxRendererType {
|
|
|
453
455
|
canvasWidth: number
|
|
454
456
|
}) {
|
|
455
457
|
const { feature, topPx, heightPx } = feat
|
|
456
|
-
const { modificationTagMap = {} } = renderArgs
|
|
458
|
+
const { Color, modificationTagMap = {} } = renderArgs
|
|
457
459
|
|
|
458
460
|
const mm = (getTagAlt(feature, 'MM', 'Mm') as string) || ''
|
|
459
461
|
|
|
@@ -481,6 +483,8 @@ export default class PileupRenderer extends BoxRendererType {
|
|
|
481
483
|
for (let i = 0; i < modifications.length; i++) {
|
|
482
484
|
const { type, positions } = modifications[i]
|
|
483
485
|
const col = modificationTagMap[type] || 'black'
|
|
486
|
+
|
|
487
|
+
// @ts-ignore
|
|
484
488
|
const base = Color(col)
|
|
485
489
|
for (const readPos of getNextRefPos(cigarOps, positions)) {
|
|
486
490
|
const r = start + readPos
|
|
@@ -826,7 +830,7 @@ export default class PileupRenderer extends BoxRendererType {
|
|
|
826
830
|
colorForBase,
|
|
827
831
|
contrastForBase,
|
|
828
832
|
canvasWidth,
|
|
829
|
-
|
|
833
|
+
drawSNPsMuted,
|
|
830
834
|
drawIndels = true,
|
|
831
835
|
}: {
|
|
832
836
|
ctx: CanvasRenderingContext2D
|
|
@@ -835,15 +839,15 @@ export default class PileupRenderer extends BoxRendererType {
|
|
|
835
839
|
colorForBase: { [key: string]: string }
|
|
836
840
|
contrastForBase: { [key: string]: string }
|
|
837
841
|
mismatchAlpha?: boolean
|
|
838
|
-
drawSNPs?: boolean
|
|
839
842
|
drawIndels?: boolean
|
|
843
|
+
drawSNPsMuted?: boolean
|
|
840
844
|
minSubfeatureWidth: number
|
|
841
845
|
largeInsertionIndicatorScale: number
|
|
842
846
|
charWidth: number
|
|
843
847
|
charHeight: number
|
|
844
848
|
canvasWidth: number
|
|
845
849
|
}) {
|
|
846
|
-
const { bpPerPx, regions } = renderArgs
|
|
850
|
+
const { Color, bpPerPx, regions } = renderArgs
|
|
847
851
|
const { heightPx, topPx, feature } = feat
|
|
848
852
|
const [region] = regions
|
|
849
853
|
const start = feature.get('start')
|
|
@@ -868,33 +872,39 @@ export default class PileupRenderer extends BoxRendererType {
|
|
|
868
872
|
const mbase = mismatch.base
|
|
869
873
|
const [leftPx, rightPx] = bpSpanPx(mstart, mstart + mlen, region, bpPerPx)
|
|
870
874
|
const widthPx = Math.max(minSubfeatureWidth, Math.abs(leftPx - rightPx))
|
|
871
|
-
if (mismatch.type === 'mismatch'
|
|
872
|
-
|
|
875
|
+
if (mismatch.type === 'mismatch') {
|
|
876
|
+
if (!drawSNPsMuted) {
|
|
877
|
+
const baseColor = colorForBase[mismatch.base] || '#888'
|
|
873
878
|
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
879
|
+
fillRect(
|
|
880
|
+
ctx,
|
|
881
|
+
leftPx,
|
|
882
|
+
topPx,
|
|
883
|
+
widthPx,
|
|
884
|
+
heightPx,
|
|
885
|
+
canvasWidth,
|
|
886
|
+
!mismatchAlpha
|
|
887
|
+
? baseColor
|
|
888
|
+
: mismatch.qual !== undefined
|
|
889
|
+
? // @ts-ignore
|
|
890
|
+
Color(baseColor)
|
|
891
|
+
.alpha(Math.min(1, mismatch.qual / 50))
|
|
892
|
+
.hsl()
|
|
893
|
+
.string()
|
|
894
|
+
: baseColor,
|
|
895
|
+
)
|
|
896
|
+
}
|
|
890
897
|
|
|
891
898
|
if (widthPx >= charWidth && heightPx >= heightLim) {
|
|
892
899
|
// normal SNP coloring
|
|
893
|
-
const contrastColor =
|
|
900
|
+
const contrastColor = drawSNPsMuted
|
|
901
|
+
? 'black'
|
|
902
|
+
: contrastForBase[mismatch.base] || 'black'
|
|
894
903
|
ctx.fillStyle = !mismatchAlpha
|
|
895
904
|
? contrastColor
|
|
896
905
|
: mismatch.qual !== undefined
|
|
897
|
-
?
|
|
906
|
+
? // @ts-ignore
|
|
907
|
+
Color(contrastColor)
|
|
898
908
|
.alpha(Math.min(1, mismatch.qual / 50))
|
|
899
909
|
.hsl()
|
|
900
910
|
.string()
|
|
@@ -1050,11 +1060,13 @@ export default class PileupRenderer extends BoxRendererType {
|
|
|
1050
1060
|
const mismatches: Mismatch[] = feature.get('mismatches')
|
|
1051
1061
|
const seq = feature.get('seq')
|
|
1052
1062
|
const { charWidth, charHeight } = this.getCharWidthHeight(ctx)
|
|
1063
|
+
// @ts-ignore
|
|
1064
|
+
const { bases } = theme.palette
|
|
1053
1065
|
const colorForBase: { [key: string]: string } = {
|
|
1054
|
-
A:
|
|
1055
|
-
C:
|
|
1056
|
-
G:
|
|
1057
|
-
T:
|
|
1066
|
+
A: bases.A.main,
|
|
1067
|
+
C: bases.C.main,
|
|
1068
|
+
G: bases.G.main,
|
|
1069
|
+
T: bases.T.main,
|
|
1058
1070
|
deletion: '#808080', // gray
|
|
1059
1071
|
}
|
|
1060
1072
|
|
|
@@ -1152,7 +1164,7 @@ export default class PileupRenderer extends BoxRendererType {
|
|
|
1152
1164
|
ctx.font = 'bold 10px Courier New,monospace'
|
|
1153
1165
|
|
|
1154
1166
|
const { charWidth, charHeight } = this.getCharWidthHeight(ctx)
|
|
1155
|
-
const
|
|
1167
|
+
const drawSNPsMuted = shouldDrawSNPsMuted(colorBy?.type)
|
|
1156
1168
|
const drawIndels = shouldDrawIndels(colorBy?.type)
|
|
1157
1169
|
for (let i = 0; i < layoutRecords.length; i++) {
|
|
1158
1170
|
const feat = layoutRecords[i]
|
|
@@ -1176,7 +1188,7 @@ export default class PileupRenderer extends BoxRendererType {
|
|
|
1176
1188
|
feat,
|
|
1177
1189
|
renderArgs,
|
|
1178
1190
|
mismatchAlpha,
|
|
1179
|
-
|
|
1191
|
+
drawSNPsMuted,
|
|
1180
1192
|
drawIndels,
|
|
1181
1193
|
largeInsertionIndicatorScale,
|
|
1182
1194
|
minSubfeatureWidth,
|
|
@@ -1279,6 +1291,7 @@ export default class PileupRenderer extends BoxRendererType {
|
|
|
1279
1291
|
|
|
1280
1292
|
const width = (end - start) / bpPerPx
|
|
1281
1293
|
const height = Math.max(layout.getTotalHeight(), 1)
|
|
1294
|
+
const Color = await import('color').then(f => f.default)
|
|
1282
1295
|
const res = await renderToAbstractCanvas(
|
|
1283
1296
|
width,
|
|
1284
1297
|
height,
|
|
@@ -1293,6 +1306,7 @@ export default class PileupRenderer extends BoxRendererType {
|
|
|
1293
1306
|
layout,
|
|
1294
1307
|
features,
|
|
1295
1308
|
regionSequence,
|
|
1309
|
+
Color,
|
|
1296
1310
|
},
|
|
1297
1311
|
}),
|
|
1298
1312
|
)
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
+
import React, { useRef, useState, useEffect } from 'react'
|
|
1
2
|
import { Region } from '@jbrowse/core/util/types'
|
|
2
3
|
import { PrerenderedCanvas } from '@jbrowse/core/ui'
|
|
3
4
|
import { bpSpanPx } from '@jbrowse/core/util'
|
|
4
5
|
import { observer } from 'mobx-react'
|
|
5
|
-
import React, { MouseEvent, useRef, useState, useEffect } from 'react'
|
|
6
6
|
import type { BaseLinearDisplayModel } from '@jbrowse/plugin-linear-genome-view'
|
|
7
7
|
|
|
8
8
|
// used so that user can click-away-from-feature below the laid out features
|
|
@@ -91,46 +91,46 @@ function PileupRendering(props: {
|
|
|
91
91
|
contextMenuFeature,
|
|
92
92
|
])
|
|
93
93
|
|
|
94
|
-
function onMouseDown(event: MouseEvent) {
|
|
94
|
+
function onMouseDown(event: React.MouseEvent) {
|
|
95
95
|
setMouseIsDown(true)
|
|
96
96
|
setMovedDuringLastMouseDown(false)
|
|
97
97
|
callMouseHandler('MouseDown', event)
|
|
98
98
|
}
|
|
99
99
|
|
|
100
|
-
function onMouseEnter(event: MouseEvent) {
|
|
100
|
+
function onMouseEnter(event: React.MouseEvent) {
|
|
101
101
|
callMouseHandler('MouseEnter', event)
|
|
102
102
|
}
|
|
103
103
|
|
|
104
|
-
function onMouseOut(event: MouseEvent) {
|
|
104
|
+
function onMouseOut(event: React.MouseEvent) {
|
|
105
105
|
callMouseHandler('MouseOut', event)
|
|
106
106
|
callMouseHandler('MouseLeave', event)
|
|
107
107
|
}
|
|
108
108
|
|
|
109
|
-
function onMouseOver(event: MouseEvent) {
|
|
109
|
+
function onMouseOver(event: React.MouseEvent) {
|
|
110
110
|
callMouseHandler('MouseOver', event)
|
|
111
111
|
}
|
|
112
112
|
|
|
113
|
-
function onMouseUp(event: MouseEvent) {
|
|
113
|
+
function onMouseUp(event: React.MouseEvent) {
|
|
114
114
|
setMouseIsDown(false)
|
|
115
115
|
callMouseHandler('MouseUp', event)
|
|
116
116
|
}
|
|
117
117
|
|
|
118
|
-
function onClick(event: MouseEvent) {
|
|
118
|
+
function onClick(event: React.MouseEvent) {
|
|
119
119
|
if (!movedDuringLastMouseDown) {
|
|
120
120
|
callMouseHandler('Click', event)
|
|
121
121
|
}
|
|
122
122
|
}
|
|
123
123
|
|
|
124
|
-
function onMouseLeave(event: MouseEvent) {
|
|
124
|
+
function onMouseLeave(event: React.MouseEvent) {
|
|
125
125
|
callMouseHandler('MouseOut', event)
|
|
126
126
|
callMouseHandler('MouseLeave', event)
|
|
127
127
|
}
|
|
128
128
|
|
|
129
|
-
function onContextMenu(event: MouseEvent) {
|
|
129
|
+
function onContextMenu(event: React.MouseEvent) {
|
|
130
130
|
callMouseHandler('ContextMenu', event)
|
|
131
131
|
}
|
|
132
132
|
|
|
133
|
-
function mouseMove(event: MouseEvent) {
|
|
133
|
+
function mouseMove(event: React.MouseEvent) {
|
|
134
134
|
if (mouseIsDown) {
|
|
135
135
|
setMovedDuringLastMouseDown(true)
|
|
136
136
|
}
|
|
@@ -158,7 +158,7 @@ function PileupRendering(props: {
|
|
|
158
158
|
}
|
|
159
159
|
}
|
|
160
160
|
|
|
161
|
-
function callMouseHandler(handlerName: string, event: MouseEvent) {
|
|
161
|
+
function callMouseHandler(handlerName: string, event: React.MouseEvent) {
|
|
162
162
|
// @ts-ignore
|
|
163
163
|
// eslint-disable-next-line react/destructuring-assignment
|
|
164
164
|
const featureHandler = props[`onFeature${handlerName}`]
|