Mercurial > repos > fubar > jbrowse2
diff x/static/js/3474.8c1888be.chunk.js.map @ 125:49f3d3878413 draft
planemo upload for repository https://github.com/galaxyproject/tools-iuc/tree/master/tools/jbrowse2 commit 5ea1f9c1eef1de76232e69aa6d34cda77d90d566
author | fubar |
---|---|
date | Sat, 05 Oct 2024 23:58:05 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/x/static/js/3474.8c1888be.chunk.js.map Sat Oct 05 23:58:05 2024 +0000 @@ -0,0 +1,1 @@ +{"version":3,"file":"static/js/3474.8c1888be.chunk.js","mappings":"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","sources":["../../../plugins/dotplot-view/src/DotplotView/components/Axes.tsx","../../../plugins/dotplot-view/src/DotplotView/components/ImportForm/ImportCustomTrack.tsx","../../../plugins/dotplot-view/src/DotplotView/components/ImportForm/util.ts","../../../plugins/dotplot-view/src/DotplotView/components/ImportForm/ImportSyntenyTrackSelector.tsx","../../../plugins/dotplot-view/src/DotplotView/components/ImportForm/index.tsx","../../../plugins/dotplot-view/src/DotplotView/components/DotplotWarnings.tsx","../../../plugins/dotplot-view/src/DotplotView/components/PanButtons.tsx","../../../plugins/dotplot-view/src/DotplotView/components/CursorIcon.tsx","../../../plugins/dotplot-view/src/DotplotView/components/DotplotControls.tsx","../../../plugins/dotplot-view/src/DotplotView/components/Header.tsx","../../../plugins/dotplot-view/src/DotplotView/components/DotplotView.tsx","../../../plugins/dotplot-view/src/DotplotView/components/Grid.tsx"],"sourcesContent":["import React from 'react'\nimport { makeStyles } from 'tss-react/mui'\nimport { observer } from 'mobx-react'\nimport { getSnapshot } from 'mobx-state-tree'\nimport {\n getFillProps,\n getStrokeProps,\n getTickDisplayStr,\n} from '@jbrowse/core/util'\nimport { bpToPx } from '@jbrowse/core/util/Base1DUtils'\nimport { useTheme } from '@mui/material'\n\n// locals\nimport { getBlockLabelKeysToHide } from './util'\nimport { DotplotViewModel } from '../model'\n\nconst useStyles = makeStyles()(() => ({\n vtext: {\n gridColumn: '1/2',\n gridRow: '1/2',\n pointerEvents: 'none',\n userSelect: 'none',\n },\n htext: {\n gridColumn: '2/2',\n gridRow: '2/2',\n pointerEvents: 'none',\n userSelect: 'none',\n },\n}))\nexport const HorizontalAxis = observer(function ({\n model,\n}: {\n model: DotplotViewModel\n}) {\n const { viewWidth, borderY } = model\n const { classes } = useStyles()\n return (\n <svg width={viewWidth} height={borderY} className={classes.htext}>\n <HorizontalAxisRaw model={model} />\n </svg>\n )\n})\n\nexport const HorizontalAxisRaw = observer(function ({\n model,\n}: {\n model: DotplotViewModel\n}) {\n const { viewWidth, borderX, borderY, hview, htextRotation, hticks } = model\n const { offsetPx, width, dynamicBlocks, bpPerPx } = hview\n const dblocks = dynamicBlocks.contentBlocks\n const hide = getBlockLabelKeysToHide(dblocks, viewWidth, offsetPx)\n const theme = useTheme()\n const hviewSnap = {\n ...getSnapshot(hview),\n width,\n staticBlocks: hview.staticBlocks,\n }\n\n const ticks = hticks\n .map(\n tick =>\n [\n tick,\n bpToPx({\n refName: tick.refName,\n coord: tick.base,\n self: hviewSnap,\n })?.offsetPx,\n ] as const,\n )\n .filter(f => f[1] !== undefined)\n .map(f => [f[0], f[1]! - offsetPx] as const)\n\n return (\n <>\n {dblocks\n .filter(region => !hide.has(region.key))\n .map(region => {\n const x = region.offsetPx\n const y = 0\n const xoff = Math.floor(x - hview.offsetPx)\n\n return (\n <text\n transform={`rotate(${htextRotation},${xoff},${y})`}\n key={JSON.stringify(region)}\n x={xoff}\n y={y + 1}\n fontSize={11}\n dominantBaseline=\"hanging\"\n textAnchor=\"end\"\n {...getFillProps(theme.palette.text.primary)}\n >\n {region.refName}\n </text>\n )\n })}\n {ticks.map(([tick, x]) =>\n x > 0 && x < width ? (\n <line\n key={`line-${JSON.stringify(tick)}`}\n x1={x}\n x2={x}\n y1={0}\n y2={tick.type === 'major' ? 6 : 4}\n strokeWidth={1}\n {...getFillProps(theme.palette.text.primary)}\n />\n ) : null,\n )}\n {ticks\n .filter(t => t[0].type === 'major')\n .map(([tick, x]) =>\n x > 10 && x < width ? (\n <text\n x={x - 7}\n y={0}\n transform={`rotate(${htextRotation},${x},0)`}\n key={`text-${JSON.stringify(tick)}`}\n fontSize={11}\n dominantBaseline=\"middle\"\n textAnchor=\"end\"\n {...getFillProps(theme.palette.text.primary)}\n >\n {getTickDisplayStr(tick.base + 1, bpPerPx)}\n </text>\n ) : null,\n )}\n <text\n y={borderY - 12}\n x={(viewWidth - borderX) / 2}\n textAnchor=\"middle\"\n fontSize={11}\n dominantBaseline=\"hanging\"\n {...getFillProps(theme.palette.text.primary)}\n >\n {hview.assemblyNames.join(',')}\n </text>\n </>\n )\n})\nexport const VerticalAxis = observer(function ({\n model,\n}: {\n model: DotplotViewModel\n}) {\n const { borderX, viewHeight } = model\n const { classes } = useStyles()\n return (\n <svg className={classes.vtext} width={borderX} height={viewHeight}>\n <VerticalAxisRaw model={model} />\n </svg>\n )\n})\n\nexport const VerticalAxisRaw = observer(function ({\n model,\n}: {\n model: DotplotViewModel\n}) {\n const { viewHeight, borderX, borderY, vview, vtextRotation, vticks } = model\n const { offsetPx, width, dynamicBlocks, bpPerPx } = vview\n const dblocks = dynamicBlocks.contentBlocks\n const hide = getBlockLabelKeysToHide(dblocks, viewHeight, offsetPx)\n const theme = useTheme()\n const vviewSnap = {\n ...getSnapshot(vview),\n width,\n staticBlocks: vview.staticBlocks,\n }\n const ticks = vticks\n .map(\n tick =>\n [\n tick,\n bpToPx({\n refName: tick.refName,\n coord: tick.base,\n self: vviewSnap,\n })?.offsetPx,\n ] as const,\n )\n .filter(f => f[1] !== undefined)\n .map(f => [f[0], f[1]! - offsetPx] as const)\n\n return (\n <>\n {dblocks\n .filter(region => !hide.has(region.key))\n .map(region => {\n const y = region.offsetPx\n const x = borderX\n const yoff = Math.floor(viewHeight - y + offsetPx)\n\n return (\n <text\n transform={`rotate(${vtextRotation},${x},${y})`}\n key={JSON.stringify(region)}\n x={x}\n y={yoff}\n fontSize={11}\n textAnchor=\"end\"\n {...getFillProps(theme.palette.text.primary)}\n >\n {region.refName}\n </text>\n )\n })}\n {ticks.map(([tick, y]) =>\n y > 0 ? (\n <line\n key={`line-${JSON.stringify(tick)}`}\n y1={viewHeight - y}\n y2={viewHeight - y}\n x1={borderX}\n x2={borderX - (tick.type === 'major' ? 6 : 4)}\n strokeWidth={1}\n {...getStrokeProps(theme.palette.grey[400])}\n />\n ) : null,\n )}\n {ticks\n .filter(t => t[0].type === 'major')\n .map(([tick, y]) =>\n y > 10 && y < viewHeight ? (\n <text\n y={viewHeight - y - 3}\n x={borderX - 7}\n key={`text-${JSON.stringify(tick)}`}\n textAnchor=\"end\"\n dominantBaseline=\"hanging\"\n fontSize={11}\n {...getFillProps(theme.palette.text.primary)}\n >\n {getTickDisplayStr(tick.base + 1, bpPerPx)}\n </text>\n ) : null,\n )}\n <text\n y={(viewHeight - borderY) / 2}\n x={12}\n transform={`rotate(-90,12,${(viewHeight - borderY) / 2})`}\n textAnchor=\"middle\"\n fontSize={11}\n {...getFillProps(theme.palette.text.primary)}\n >\n {vview.assemblyNames.join(',')}\n </text>\n </>\n )\n})\n","import React, { useState, useEffect } from 'react'\nimport { SnapshotIn } from 'mobx-state-tree'\nimport {\n FormControlLabel,\n Grid,\n Paper,\n Radio,\n RadioGroup,\n Typography,\n} from '@mui/material'\nimport { ErrorMessage, FileSelector } from '@jbrowse/core/ui'\nimport { FileLocation } from '@jbrowse/core/util/types'\nimport { observer } from 'mobx-react'\nimport { AnyConfigurationModel } from '@jbrowse/core/configuration'\nimport { basename, extName, getName, stripGz } from './util'\n\nfunction getAdapter({\n radioOption,\n assembly1,\n assembly2,\n fileLocation,\n indexFileLocation,\n bed1Location,\n bed2Location,\n}: {\n radioOption: string\n assembly1: string\n assembly2: string\n fileLocation?: FileLocation\n indexFileLocation?: FileLocation\n bed1Location?: FileLocation\n bed2Location?: FileLocation\n}) {\n if (radioOption === '.paf') {\n return {\n type: 'PAFAdapter',\n pafLocation: fileLocation,\n queryAssembly: assembly1,\n targetAssembly: assembly2,\n }\n } else if (radioOption === '.out') {\n return {\n type: 'MashMapAdapter',\n outLocation: fileLocation,\n queryAssembly: assembly1,\n targetAssembly: assembly2,\n }\n } else if (radioOption === '.delta') {\n return {\n type: 'DeltaAdapter',\n deltaLocation: fileLocation,\n queryAssembly: assembly1,\n targetAssembly: assembly2,\n }\n } else if (radioOption === '.chain') {\n return {\n type: 'ChainAdapter',\n chainLocation: fileLocation,\n queryAssembly: assembly1,\n targetAssembly: assembly2,\n }\n } else if (radioOption === '.anchors') {\n return {\n type: 'MCScanAnchorsAdapter',\n mcscanAnchorsLocation: fileLocation,\n bed1Location,\n bed2Location,\n assemblyNames: [assembly1, assembly2],\n }\n } else if (radioOption === '.anchors.simple') {\n return {\n type: 'MCScanSimpleAnchorsAdapter',\n mcscanSimpleAnchorsLocation: fileLocation,\n bed1Location,\n bed2Location,\n assemblyNames: [assembly1, assembly2],\n }\n } else if (radioOption === '.pif.gz') {\n return {\n type: 'PairwiseIndexedPAFAdapter',\n pifGzLocation: fileLocation,\n index: { location: indexFileLocation },\n assemblyNames: [assembly1, assembly2],\n }\n } else {\n throw new Error(\n `Unknown to detect type ${radioOption} from filename (select radio button to clarify)`,\n )\n }\n}\n\ntype Conf = SnapshotIn<AnyConfigurationModel>\n\nconst ImportCustomTrack = observer(function ({\n assembly1,\n assembly2,\n setSessionTrackData,\n}: {\n sessionTrackData: Conf\n assembly1: string\n assembly2: string\n setSessionTrackData: (arg: Conf) => void\n}) {\n const [bed2Location, setBed2Location] = useState<FileLocation>()\n const [bed1Location, setBed1Location] = useState<FileLocation>()\n const [fileLocation, setFileLocation] = useState<FileLocation>()\n const [indexFileLocation, setIndexFileLocation] = useState<FileLocation>()\n const [value, setValue] = useState('')\n const [error, setError] = useState<unknown>()\n const fileName = getName(fileLocation)\n\n const radioOption = value || (fileName ? extName(stripGz(fileName)) : '')\n\n useEffect(() => {\n try {\n if (fileLocation) {\n const fn = fileName ? basename(fileName) : 'MyTrack'\n const trackId = `${fn}-${Date.now()}`\n setError(undefined)\n\n setSessionTrackData({\n trackId,\n name: fn,\n assemblyNames: [assembly2, assembly1],\n type: 'SyntenyTrack',\n adapter: getAdapter({\n radioOption,\n assembly1,\n assembly2,\n fileLocation,\n indexFileLocation,\n bed1Location,\n bed2Location,\n }),\n })\n }\n } catch (e) {\n console.error(e)\n setError(e)\n }\n }, [\n fileName,\n assembly1,\n assembly2,\n bed1Location,\n bed2Location,\n fileLocation,\n indexFileLocation,\n radioOption,\n setSessionTrackData,\n ])\n return (\n <Paper style={{ padding: 12 }}>\n {error ? <ErrorMessage error={error} /> : null}\n <Typography style={{ textAlign: 'center' }}>\n Add a .paf, .out (MashMap), .delta (Mummer), .chain, .anchors or\n .anchors.simple (MCScan) file to view. These file types can also be\n gzipped. The first assembly should be the query sequence (e.g. left\n column of the PAF) and the second assembly should be the target sequence\n (e.g. right column of the PAF)\n </Typography>\n <RadioGroup\n value={radioOption}\n onChange={event => {\n setValue(event.target.value)\n }}\n >\n <Grid container justifyContent=\"center\">\n <Grid item>\n <FormControlLabel value=\".paf\" control={<Radio />} label=\".paf\" />\n </Grid>\n <Grid item>\n <FormControlLabel value=\".out\" control={<Radio />} label=\".out\" />\n </Grid>\n\n <Grid item>\n <FormControlLabel\n value=\".delta\"\n control={<Radio />}\n label=\".delta\"\n />\n </Grid>\n <Grid item>\n <FormControlLabel\n value=\".chain\"\n control={<Radio />}\n label=\".chain\"\n />\n </Grid>\n <Grid item>\n <FormControlLabel\n value=\".anchors\"\n control={<Radio />}\n label=\".anchors\"\n />\n </Grid>\n <Grid item>\n <FormControlLabel\n value=\".anchors.simple\"\n control={<Radio />}\n label=\".anchors.simple\"\n />\n </Grid>\n <Grid item>\n <FormControlLabel\n value=\".pif.gz\"\n control={<Radio />}\n label=\".pif.gz\"\n />\n </Grid>\n </Grid>\n </RadioGroup>\n <Grid container justifyContent=\"center\">\n <Grid item>\n {value === '.anchors' || value === '.anchors.simple' ? (\n <div>\n <div style={{ margin: 20 }}>\n Open the {value} and .bed files for both genome assemblies from\n the MCScan (Python version) pipeline{' '}\n <a href=\"https://github.com/tanghaibao/jcvi/wiki/MCscan-(Python-version)\">\n (more info)\n </a>\n </div>\n <div style={{ display: 'flex' }}>\n <div>\n <FileSelector\n name=\".anchors file\"\n description=\"\"\n location={fileLocation}\n setLocation={loc => {\n setFileLocation(loc)\n }}\n />\n </div>\n <div>\n <FileSelector\n name=\"genome 1 .bed (left column of anchors file)\"\n description=\"\"\n location={bed1Location}\n setLocation={loc => {\n setBed1Location(loc)\n }}\n />\n </div>\n <div>\n <FileSelector\n name=\"genome 2 .bed (right column of anchors file)\"\n description=\"\"\n location={bed2Location}\n setLocation={loc => {\n setBed2Location(loc)\n }}\n />\n </div>\n </div>\n </div>\n ) : value === '.pif.gz' ? (\n <div style={{ display: 'flex' }}>\n <div>\n <FileSelector\n name={`${value} location`}\n description=\"\"\n location={fileLocation}\n setLocation={loc => {\n setFileLocation(loc)\n }}\n />\n </div>\n <div>\n <FileSelector\n name={`${value} index location`}\n description=\"\"\n location={indexFileLocation}\n setLocation={loc => {\n setIndexFileLocation(loc)\n }}\n />\n </div>\n </div>\n ) : (\n <FileSelector\n name={value ? `${value} location` : ''}\n description=\"\"\n location={fileLocation}\n setLocation={loc => {\n setFileLocation(loc)\n }}\n />\n )}\n </Grid>\n </Grid>\n </Paper>\n )\n})\n\nexport default ImportCustomTrack\n","export function getName(\n sessionTrackData?: { uri: string } | { localPath: string } | { name: string },\n) {\n return sessionTrackData\n ? // @ts-expect-error\n sessionTrackData.uri ||\n // @ts-expect-error\n sessionTrackData.localPath ||\n // @ts-expect-error\n sessionTrackData.name\n : undefined\n}\n\nexport function stripGz(fileName: string) {\n return fileName.endsWith('.gz') ? fileName.slice(0, -3) : fileName\n}\n\nexport function basename(str: string) {\n return str.split('#')[0]!.split('?')[0]!.split('/').pop()\n}\nexport function extName(str: string) {\n const r = str.split('.').pop()\n return r ? `.${r}` : ''\n}\n","import React, { useState, useEffect } from 'react'\nimport { Select, MenuItem, Paper, Typography } from '@mui/material'\nimport { getTrackName } from '@jbrowse/core/util/tracks'\nimport { getSession } from '@jbrowse/core/util'\nimport { ErrorMessage } from '@jbrowse/core/ui'\nimport {\n AnyConfigurationModel,\n readConfObject,\n} from '@jbrowse/core/configuration'\nimport { observer } from 'mobx-react'\n\n// icons\nimport { TrackSelector as TrackSelectorIcon } from '@jbrowse/core/ui/Icons'\n\n// locals\nimport { DotplotViewModel } from '../../model'\n\nfunction f(track: AnyConfigurationModel, assembly1: string, assembly2: string) {\n const assemblyNames = readConfObject(track, 'assemblyNames')\n return (\n assemblyNames.includes(assembly1) &&\n assemblyNames.includes(assembly2) &&\n track.type.includes('Synteny')\n )\n}\n\nconst Selector = observer(\n ({\n model,\n assembly1,\n assembly2,\n setShowTrackId,\n }: {\n model: DotplotViewModel\n assembly1: string\n assembly2: string\n setShowTrackId: (arg: string) => void\n }) => {\n const session = getSession(model)\n const { tracks, sessionTracks } = session\n const allTracks = [\n ...tracks,\n ...(sessionTracks || []),\n ] as AnyConfigurationModel[]\n const filteredTracks = allTracks.filter(t => f(t, assembly2, assembly1))\n const resetTrack = filteredTracks[0]?.trackId || ''\n const [value, setValue] = useState(resetTrack)\n useEffect(() => {\n // if assembly1/assembly2 changes, then we will want to use this effect to change\n // the state of the useState because it otherwise gets locked to a stale value\n setValue(resetTrack)\n }, [resetTrack])\n\n useEffect(() => {\n // sets track data in a useEffect because the initial load is needed as well as\n // onChange's to the select box\n setShowTrackId(value)\n }, [value, setShowTrackId])\n\n return (\n <Paper style={{ padding: 12 }}>\n <Typography paragraph>\n Select a track from the select box below, the track will be shown when\n you hit \"Launch\".\n </Typography>\n\n <Typography paragraph>\n Note: there is a track selector <i>inside</i> the DotplotView, which\n can turn on one or more SyntenyTracks (more than one can be displayed\n at once). Look for the track selector icon <TrackSelectorIcon />\n </Typography>\n {filteredTracks.length ? (\n <Select\n value={value}\n onChange={event => {\n setValue(event.target.value)\n }}\n >\n {filteredTracks.map(track => (\n <MenuItem key={track.trackId} value={track.trackId}>\n {getTrackName(track, session)}\n </MenuItem>\n ))}\n </Select>\n ) : (\n <ErrorMessage\n error={`No synteny tracks found for ${assembly1},${assembly2}`}\n />\n )}\n </Paper>\n )\n },\n)\n\nexport default Selector\n","import React, { useState, useEffect } from 'react'\nimport {\n Button,\n Container,\n FormControl,\n FormLabel,\n FormControlLabel,\n Grid,\n Paper,\n Radio,\n RadioGroup,\n Typography,\n} from '@mui/material'\nimport { makeStyles } from 'tss-react/mui'\nimport { observer } from 'mobx-react'\nimport { transaction } from 'mobx'\nimport { SnapshotIn } from 'mobx-state-tree'\nimport { AnyConfigurationModel } from '@jbrowse/core/configuration'\nimport { getSession, isSessionWithAddTracks } from '@jbrowse/core/util'\nimport { ErrorMessage, AssemblySelector } from '@jbrowse/core/ui'\n\n// locals\nimport { DotplotViewModel } from '../../model'\nimport ImportCustomTrack from './ImportCustomTrack'\nimport ImportSyntenyTrackSelector from './ImportSyntenyTrackSelector'\n\nconst useStyles = makeStyles()(theme => ({\n importFormContainer: {\n padding: theme.spacing(4),\n margin: '0 auto',\n },\n assemblySelector: {\n width: '75%',\n margin: '0 auto',\n },\n}))\n\ntype Conf = SnapshotIn<AnyConfigurationModel>\n\nfunction TrackSelector({\n setSessionTrackData,\n setShowTrackId,\n sessionTrackData,\n assembly1,\n assembly2,\n model,\n}: {\n sessionTrackData: Conf\n setSessionTrackData: (arg: Conf) => void\n setShowTrackId: (arg?: string) => void\n model: DotplotViewModel\n assembly1: string\n assembly2: string\n}) {\n const [choice, setChoice] = useState('tracklist')\n\n useEffect(() => {\n if (choice === 'none') {\n setSessionTrackData(undefined)\n setShowTrackId(undefined)\n }\n }, [choice, setSessionTrackData, setShowTrackId])\n return (\n <>\n <FormControl>\n <FormLabel id=\"group-label\">\n (Optional) Select or add a synteny track\n </FormLabel>\n <RadioGroup\n row\n value={choice}\n onChange={event => {\n setChoice(event.target.value)\n }}\n aria-labelledby=\"group-label\"\n >\n <FormControlLabel value=\"none\" control={<Radio />} label=\"None\" />\n <FormControlLabel\n value=\"tracklist\"\n control={<Radio />}\n label=\"Existing track\"\n />\n <FormControlLabel\n value=\"custom\"\n control={<Radio />}\n label=\"New track\"\n />\n </RadioGroup>\n </FormControl>\n {choice === 'custom' ? (\n <ImportCustomTrack\n setSessionTrackData={setSessionTrackData}\n sessionTrackData={sessionTrackData}\n assembly2={assembly2}\n assembly1={assembly1}\n />\n ) : null}\n {choice === 'tracklist' ? (\n <ImportSyntenyTrackSelector\n model={model}\n assembly1={assembly1}\n assembly2={assembly2}\n setShowTrackId={setShowTrackId}\n />\n ) : null}\n </>\n )\n}\n\nconst DotplotImportForm = observer(({ model }: { model: DotplotViewModel }) => {\n const { classes } = useStyles()\n const session = getSession(model)\n const { assemblyNames } = session\n const [assembly2, setAssembly2] = useState(assemblyNames[0] || '')\n const [assembly1, setAssembly1] = useState(assemblyNames[0] || '')\n const [error, setError] = useState<unknown>()\n const [sessionTrackData, setSessionTrackData] = useState<Conf>()\n const [showTrackId, setShowTrackId] = useState<string>()\n\n function onOpenClick() {\n try {\n if (!isSessionWithAddTracks(session)) {\n return\n }\n setError(undefined)\n model.setError(undefined)\n transaction(() => {\n if (sessionTrackData) {\n session.addTrackConf(sessionTrackData)\n model.toggleTrack(sessionTrackData.trackId)\n } else if (showTrackId) {\n model.showTrack(showTrackId)\n }\n\n model.setViews([\n { bpPerPx: 0.1, offsetPx: 0 },\n { bpPerPx: 0.1, offsetPx: 0 },\n ])\n model.setAssemblyNames(assembly2, assembly1)\n })\n } catch (e) {\n console.error(e)\n setError(e)\n }\n }\n\n // this is a combination of any displayed error message we have\n const displayError = error || model.error\n return (\n <Container className={classes.importFormContainer}>\n {displayError ? <ErrorMessage error={displayError} /> : null}\n <Grid\n container\n spacing={1}\n justifyContent=\"center\"\n alignItems=\"center\"\n className={classes.assemblySelector}\n >\n <Grid item>\n <Paper style={{ padding: 12 }}>\n <Typography style={{ textAlign: 'center' }}>\n Select assemblies for dotplot view\n </Typography>\n <Grid\n container\n spacing={1}\n justifyContent=\"center\"\n alignItems=\"center\"\n >\n <Grid item>\n <AssemblySelector\n selected={assembly1}\n onChange={val => {\n setAssembly1(val)\n }}\n session={session}\n />\n </Grid>\n <Grid item>\n <AssemblySelector\n selected={assembly2}\n onChange={val => {\n setAssembly2(val)\n }}\n session={session}\n />\n </Grid>\n <Grid item>\n <FormControl>\n <Button\n onClick={onOpenClick}\n variant=\"contained\"\n color=\"primary\"\n >\n Launch\n </Button>\n </FormControl>\n </Grid>\n </Grid>\n </Paper>\n <TrackSelector\n setShowTrackId={setShowTrackId}\n assembly2={assembly2}\n assembly1={assembly1}\n setSessionTrackData={setSessionTrackData}\n sessionTrackData={sessionTrackData}\n model={model}\n />\n </Grid>\n </Grid>\n </Container>\n )\n})\n\nexport default DotplotImportForm\n","import React, { lazy, useState } from 'react'\nimport { Alert, Button } from '@mui/material'\nimport { observer } from 'mobx-react'\n\n// locals\nimport { DotplotViewModel } from '../model'\n// lazy components\nconst WarningDialog = lazy(() => import('./WarningDialog'))\n\nconst DotplotWarnings = observer(function ({\n model,\n}: {\n model: DotplotViewModel\n}) {\n const trackWarnings = model.tracks.filter(t => t.displays[0].warnings?.length)\n const [shown, setShown] = useState(false)\n const [hide, setHide] = useState(false)\n return trackWarnings.length && !hide ? (\n <Alert severity=\"warning\">\n Warnings during render{' '}\n <Button\n onClick={() => {\n setShown(true)\n }}\n >\n More info\n </Button>\n {shown ? (\n <WarningDialog\n trackWarnings={trackWarnings}\n handleClose={() => {\n setShown(false)\n }}\n />\n ) : null}\n <Button\n variant=\"contained\"\n onClick={() => {\n setHide(true)\n }}\n >\n Dismiss\n </Button>\n </Alert>\n ) : null\n})\n\nexport default DotplotWarnings\n","import React from 'react'\nimport { IconButton, Paper } from '@mui/material'\nimport { makeStyles } from 'tss-react/mui'\nimport { observer } from 'mobx-react'\n\n// icons\nimport ArrowDropDown from '@mui/icons-material/ArrowDropDown'\nimport ArrowDropUp from '@mui/icons-material/ArrowDropUp'\nimport ArrowLeft from '@mui/icons-material/ArrowLeft'\nimport ArrowRight from '@mui/icons-material/ArrowRight'\nimport ZoomIn from '@mui/icons-material/ZoomIn'\nimport ZoomOut from '@mui/icons-material/ZoomOut'\n\n// locals\nimport { DotplotViewModel } from '../model'\n\nconst useStyles = makeStyles()({\n dpad: {\n display: 'grid',\n gridTemplateColumns: 'repeat(3, 1fr)',\n margin: 0,\n position: 'absolute',\n right: 50,\n zIndex: 1000,\n top: 50,\n },\n icon: {\n padding: 0,\n margin: 0,\n },\n})\n\nconst PanButtons = observer(function PanButtons({\n model,\n}: {\n model: DotplotViewModel\n}) {\n const { classes } = useStyles()\n return (\n <Paper className={classes.dpad} elevation={6}>\n <div />\n <IconButton\n className={classes.icon}\n onClick={() => model.vview.scroll(100)}\n >\n <ArrowDropUp />\n </IconButton>\n <div />\n\n <IconButton\n className={classes.icon}\n onClick={() => model.hview.scroll(-100)}\n >\n <ArrowLeft />\n </IconButton>\n <div />\n <IconButton\n className={classes.icon}\n onClick={() => model.hview.scroll(100)}\n >\n <ArrowRight />\n </IconButton>\n\n <div />\n <IconButton\n className={classes.icon}\n onClick={() => model.vview.scroll(-100)}\n >\n <ArrowDropDown />\n </IconButton>\n <div />\n <IconButton\n className={classes.icon}\n onClick={() => {\n model.hview.zoomIn()\n model.vview.zoomIn()\n }}\n >\n <ZoomIn />\n </IconButton>\n <div />\n <IconButton\n className={classes.icon}\n onClick={() => {\n model.hview.zoomOut()\n model.vview.zoomOut()\n }}\n >\n <ZoomOut />\n </IconButton>\n </Paper>\n )\n})\n\nexport default PanButtons\n","import SvgIcon, { SvgIconProps } from '@mui/material/SvgIcon'\nimport React from 'react'\n\nexport function CursorMove(props: SvgIconProps) {\n return (\n <SvgIcon {...props}>\n <path\n fill=\"currentColor\"\n d=\"M13,6V11H18V7.75L22.25,12L18,16.25V13H13V18H16.25L12,22.25L7.75,18H11V13H6V16.25L1.75,12L6,7.75V11H11V6H7.75L12,1.75L16.25,6H13Z\"\n />\n </SvgIcon>\n )\n}\n\nexport function CursorMouse(props: SvgIconProps) {\n return (\n <SvgIcon {...props}>\n <path\n fill=\"currentColor\"\n d=\"M10.07,14.27C10.57,14.03 11.16,14.25 11.4,14.75L13.7,19.74L15.5,18.89L13.19,13.91C12.95,13.41 13.17,12.81 13.67,12.58L13.95,12.5L16.25,12.05L8,5.12V15.9L9.82,14.43L10.07,14.27M13.64,21.97C13.14,22.21 12.54,22 12.31,21.5L10.13,16.76L7.62,18.78C7.45,18.92 7.24,19 7,19A1,1 0 0,1 6,18V3A1,1 0 0,1 7,2C7.24,2 7.47,2.09 7.64,2.23L7.65,2.22L19.14,11.86C19.57,12.22 19.62,12.85 19.27,13.27C19.12,13.45 18.91,13.57 18.7,13.61L15.54,14.23L17.74,18.96C18,19.46 17.76,20.05 17.26,20.28L13.64,21.97Z\"\n />\n </SvgIcon>\n )\n}\n","import React from 'react'\nimport { IconButton } from '@mui/material'\nimport { observer } from 'mobx-react'\nimport CascadingMenuButton from '@jbrowse/core/ui/CascadingMenuButton'\n\n// icons\nimport ZoomOut from '@mui/icons-material/ZoomOut'\nimport ZoomIn from '@mui/icons-material/ZoomIn'\nimport MoreVert from '@mui/icons-material/MoreVert'\nimport { CursorMouse, CursorMove } from './CursorIcon'\nimport { TrackSelector as TrackSelectorIcon } from '@jbrowse/core/ui/Icons'\n\n// locals\nimport { DotplotViewModel } from '../model'\n\nconst DotplotControls = observer(function ({\n model,\n}: {\n model: DotplotViewModel\n}) {\n return (\n <div>\n <IconButton onClick={model.zoomOutButton}>\n <ZoomOut />\n </IconButton>\n\n <IconButton onClick={model.zoomInButton}>\n <ZoomIn />\n </IconButton>\n\n <IconButton\n onClick={() => model.activateTrackSelector()}\n title=\"Open track selector\"\n >\n <TrackSelectorIcon />\n </IconButton>\n\n <CascadingMenuButton\n menuItems={[\n {\n onClick: () => {\n model.squareView()\n },\n label: 'Square view - same base pairs per pixel',\n },\n {\n onClick: () => {\n model.squareViewProportional()\n },\n label: 'Rectanglularize view - same total bp',\n },\n {\n onClick: () => {\n model.showAllRegions()\n },\n label: 'Show all regions',\n },\n {\n onClick: () => {\n model.setDrawCigar(!model.drawCigar)\n },\n type: 'checkbox',\n label: 'Draw CIGAR',\n checked: model.drawCigar,\n },\n {\n onClick: () => {\n model.setShowPanButtons(!model.showPanButtons)\n },\n label: 'Show pan buttons',\n type: 'checkbox',\n checked: model.showPanButtons,\n },\n {\n label: 'Click and drag mode',\n subMenu: [\n {\n onClick: () => {\n model.setCursorMode('move')\n },\n label:\n 'Pan by default, select region when ctrl/cmd key is held',\n icon: CursorMove,\n type: 'radio',\n checked: model.cursorMode === 'move',\n },\n {\n onClick: () => {\n model.setCursorMode('crosshair')\n },\n label:\n 'Select region by default, pan when ctrl/cmd key is held',\n icon: CursorMouse,\n type: 'radio',\n checked: model.cursorMode === 'crosshair',\n },\n ],\n },\n {\n label: 'Wheel scroll mode',\n subMenu: [\n {\n onClick: () => {\n model.setWheelMode('pan')\n },\n label: 'Pans view',\n type: 'radio',\n checked: model.wheelMode === 'pan',\n },\n {\n onClick: () => {\n model.setWheelMode('zoom')\n },\n label: 'Zooms view',\n type: 'radio',\n checked: model.wheelMode === 'zoom',\n },\n {\n onClick: () => {\n model.setWheelMode('none')\n },\n label: 'Disable',\n type: 'radio',\n checked: model.wheelMode === 'none',\n },\n ],\n },\n ]}\n >\n <MoreVert />\n </CascadingMenuButton>\n </div>\n )\n})\n\nexport default DotplotControls\n","import React from 'react'\nimport { Typography } from '@mui/material'\nimport { observer } from 'mobx-react'\nimport { makeStyles } from 'tss-react/mui'\nimport { getBpDisplayStr } from '@jbrowse/core/util'\n\n// locals\nimport { DotplotViewModel } from '../model'\nimport DotplotWarnings from './DotplotWarnings'\nimport PanButtons from './PanButtons'\nimport DotplotControls from './DotplotControls'\n\nconst useStyles = makeStyles()({\n bp: {\n display: 'flex',\n alignItems: 'center',\n marginLeft: 10,\n },\n spacer: {\n flexGrow: 1,\n },\n headerBar: {\n display: 'flex',\n position: 'relative',\n },\n})\n\nconst DotplotHeader = observer(function ({\n model,\n selection,\n}: {\n model: DotplotViewModel\n selection?: { width: number; height: number }\n}) {\n const { classes } = useStyles()\n const { hview, vview, showPanButtons } = model\n return (\n <div className={classes.headerBar}>\n <DotplotControls model={model} />\n <Typography className={classes.bp} variant=\"body2\" color=\"textSecondary\">\n x: {hview.assemblyNames.join(',')} {getBpDisplayStr(hview.currBp)}\n <br />\n y: {vview.assemblyNames.join(',')} {getBpDisplayStr(vview.currBp)}\n </Typography>\n {selection ? (\n <Typography\n className={classes.bp}\n variant=\"body2\"\n color=\"textSecondary\"\n >\n {`width:${getBpDisplayStr(hview.bpPerPx * selection.width)}`} <br />\n {`height:${getBpDisplayStr(vview.bpPerPx * selection.height)}`}\n </Typography>\n ) : null}\n <div className={classes.spacer} />\n <DotplotWarnings model={model} />\n {showPanButtons ? <PanButtons model={model} /> : null}\n </div>\n )\n})\n\nexport default DotplotHeader\n","import React, { useState, useEffect, useRef, lazy, Suspense } from 'react'\nimport { LoadingEllipses, Menu, ResizeHandle } from '@jbrowse/core/ui'\nimport { observer } from 'mobx-react'\nimport { transaction } from 'mobx'\nimport { makeStyles } from 'tss-react/mui'\n\n// locals\nimport { DotplotViewModel } from '../model'\nimport ImportForm from './ImportForm'\nimport Header from './Header'\nimport Grid from './Grid'\nimport { VerticalAxis, HorizontalAxis } from './Axes'\n\nconst TooltipWhereClicked = lazy(() => import('./DotplotTooltipClick'))\nconst TooltipWhereMouseovered = lazy(() => import('./DotplotTooltipMouseover'))\n\nconst blank = { left: 0, top: 0, width: 0, height: 0 }\n\nconst useStyles = makeStyles()(theme => ({\n spacer: {\n gridColumn: '1/2',\n gridRow: '2/2',\n },\n root: {\n position: 'relative',\n marginBottom: theme.spacing(1),\n overflow: 'hidden',\n },\n\n container: {\n display: 'grid',\n padding: 5,\n position: 'relative',\n },\n overlay: {\n pointerEvents: 'none',\n overflow: 'hidden',\n display: 'flex',\n width: '100%',\n gridRow: '1/2',\n gridColumn: '2/2',\n zIndex: 100, // needs to be below controls\n '& path': {\n cursor: 'crosshair',\n fill: 'none',\n },\n },\n\n content: {\n position: 'relative',\n gridColumn: '2/2',\n gridRow: '1/2',\n },\n\n resizeHandle: {\n height: 4,\n background: '#ccc',\n boxSizing: 'border-box',\n borderTop: '1px solid #fafafa',\n },\n}))\n\ntype Coord = [number, number] | undefined\ninterface Rect {\n left: number\n top: number\n}\n\n// produces offsetX/offsetY coordinates from a clientX and an element's\n// getBoundingClientRect\nfunction getOffset(coord: Coord, rect: Rect) {\n return coord && ([coord[0] - rect.left, coord[1] - rect.top] as Coord)\n}\n\nconst RenderedComponent = observer(({ model }: { model: DotplotViewModel }) => {\n const { classes } = useStyles()\n return (\n <div className={classes.overlay}>\n {model.tracks.map(track => {\n const [display] = track.displays\n const { RenderingComponent } = display\n return RenderingComponent ? (\n <RenderingComponent\n key={track.configuration.trackId}\n model={display}\n />\n ) : null\n })}\n </div>\n )\n})\n\nconst DotplotViewInternal = observer(function ({\n model,\n}: {\n model: DotplotViewModel\n}) {\n const { classes } = useStyles()\n const [mousecurrClient, setMouseCurrClient] = useState<Coord>()\n const [mousedownClient, setMouseDownClient] = useState<Coord>()\n const [mouseOvered, setMouseOvered] = useState(false)\n const [mouseupClient, setMouseUpClient] = useState<Coord>()\n const ref = useRef<HTMLDivElement>(null)\n const root = useRef<HTMLDivElement>(null)\n const distanceX = useRef(0)\n const distanceY = useRef(0)\n const scheduled = useRef(false)\n const [ctrlKeyWasUsed, setCtrlKeyWasUsed] = useState(false)\n const [ctrlKeyDown, setCtrlKeyDown] = useState(false)\n const svg = ref.current?.getBoundingClientRect() || blank\n const rootRect = ref.current?.getBoundingClientRect() || blank\n const mousedown = getOffset(mousedownClient, svg)\n const mousecurr = getOffset(mousecurrClient, svg)\n const mouseup = getOffset(mouseupClient, svg)\n const mouserect = mouseup || mousecurr\n const mouserectClient = mouseupClient || mousecurrClient\n const xdistance = mousedown && mouserect ? mouserect[0] - mousedown[0] : 0\n const ydistance = mousedown && mouserect ? mouserect[1] - mousedown[1] : 0\n const { hview, vview, wheelMode, cursorMode } = model\n\n const validPan =\n (cursorMode === 'move' && !ctrlKeyWasUsed) ||\n (cursorMode === 'crosshair' && ctrlKeyWasUsed)\n\n const validSelect =\n (cursorMode === 'move' && ctrlKeyWasUsed) ||\n (cursorMode === 'crosshair' && !ctrlKeyWasUsed)\n\n // use non-React wheel handler to properly prevent body scrolling\n useEffect(() => {\n function onWheel(event: WheelEvent) {\n event.preventDefault()\n\n distanceX.current += event.deltaX\n distanceY.current -= event.deltaY\n if (!scheduled.current) {\n scheduled.current = true\n\n window.requestAnimationFrame(() => {\n transaction(() => {\n if (wheelMode === 'pan') {\n hview.scroll(distanceX.current / 3)\n vview.scroll(distanceY.current / 10)\n } else if (wheelMode === 'zoom') {\n if (\n Math.abs(distanceY.current) > Math.abs(distanceX.current) * 2 &&\n mousecurr\n ) {\n const val = distanceY.current < 0 ? 1.1 : 0.9\n hview.zoomTo(hview.bpPerPx * val, mousecurr[0])\n vview.zoomTo(\n vview.bpPerPx * val,\n rootRect.height - mousecurr[1],\n )\n }\n }\n })\n scheduled.current = false\n distanceX.current = 0\n distanceY.current = 0\n })\n }\n }\n if (ref.current) {\n const curr = ref.current\n curr.addEventListener('wheel', onWheel)\n return () => {\n curr.removeEventListener('wheel', onWheel)\n }\n }\n return () => {}\n }, [hview, vview, wheelMode, mousecurr, rootRect.height])\n\n useEffect(() => {\n function globalMouseMove(event: MouseEvent) {\n setMouseCurrClient([event.clientX, event.clientY])\n\n if (mousecurrClient && mousedownClient && validPan && !mouseupClient) {\n hview.scroll(-event.clientX + mousecurrClient[0])\n vview.scroll(event.clientY - mousecurrClient[1])\n }\n }\n\n window.addEventListener('mousemove', globalMouseMove)\n return () => {\n window.removeEventListener('mousemove', globalMouseMove)\n }\n }, [validPan, mousecurrClient, mousedownClient, mouseupClient, hview, vview])\n\n useEffect(() => {\n function globalCtrlKeyDown(event: KeyboardEvent) {\n if (event.metaKey || event.ctrlKey) {\n setCtrlKeyDown(true)\n }\n }\n function globalCtrlKeyUp(event: KeyboardEvent) {\n if (!event.metaKey && !event.ctrlKey) {\n setCtrlKeyDown(false)\n }\n }\n window.addEventListener('keydown', globalCtrlKeyDown)\n window.addEventListener('keyup', globalCtrlKeyUp)\n return () => {\n window.removeEventListener('keydown', globalCtrlKeyDown)\n window.addEventListener('keyup', globalCtrlKeyUp)\n }\n }, [])\n\n // detect a mouseup after a mousedown was submitted, autoremoves mouseup once\n // that single mouseup is set\n useEffect(() => {\n function globalMouseUp(event: MouseEvent) {\n if (Math.abs(xdistance) > 3 && Math.abs(ydistance) > 3 && validSelect) {\n setMouseUpClient([event.clientX, event.clientY])\n } else {\n setMouseDownClient(undefined)\n }\n }\n if (mousedown && !mouseup) {\n window.addEventListener('mouseup', globalMouseUp, true)\n return () => {\n window.removeEventListener('mouseup', globalMouseUp, true)\n }\n }\n return () => {}\n }, [validSelect, mousedown, mouseup, xdistance, ydistance])\n\n return (\n <div>\n <Header\n model={model}\n selection={\n !validSelect || !(mousedown && mouserect)\n ? undefined\n : {\n width: Math.abs(xdistance),\n height: Math.abs(ydistance),\n }\n }\n />\n <div\n ref={root}\n className={classes.root}\n onMouseLeave={() => {\n setMouseOvered(false)\n }}\n onMouseEnter={() => {\n setMouseOvered(true)\n }}\n >\n <div className={classes.container}>\n <VerticalAxis model={model} />\n <HorizontalAxis model={model} />\n <div ref={ref} className={classes.content}>\n {mouseOvered && validSelect ? (\n <Suspense fallback={null}>\n <TooltipWhereMouseovered\n model={model}\n mouserect={mouserect}\n mouserectClient={mouserectClient}\n xdistance={xdistance}\n />\n </Suspense>\n ) : null}\n {validSelect ? (\n <Suspense fallback={null}>\n <TooltipWhereClicked\n model={model}\n mousedown={mousedown}\n mousedownClient={mousedownClient}\n xdistance={xdistance}\n ydistance={ydistance}\n />\n </Suspense>\n ) : null}\n <div\n style={{ cursor: ctrlKeyDown ? 'pointer' : cursorMode }}\n onMouseDown={event => {\n if (event.button === 0) {\n const { clientX, clientY } = event\n setMouseDownClient([clientX, clientY])\n setMouseCurrClient([clientX, clientY])\n setCtrlKeyWasUsed(ctrlKeyDown)\n }\n }}\n >\n <Grid model={model}>\n {validSelect && mousedown && mouserect ? (\n <rect\n fill=\"rgba(255,0,0,0.3)\"\n x={Math.min(mouserect[0], mousedown[0])}\n y={Math.min(mouserect[1], mousedown[1])}\n width={Math.abs(xdistance)}\n height={Math.abs(ydistance)}\n />\n ) : null}\n </Grid>\n </div>\n <div className={classes.spacer} />\n </div>\n <RenderedComponent model={model} />\n <Menu\n open={Boolean(mouseup)}\n onMenuItemClick={(_, callback) => {\n callback()\n setMouseUpClient(undefined)\n setMouseDownClient(undefined)\n }}\n onClose={() => {\n setMouseUpClient(undefined)\n setMouseDownClient(undefined)\n }}\n anchorReference=\"anchorPosition\"\n anchorPosition={\n mouseupClient\n ? {\n top: mouseupClient[1] + 50,\n left: mouseupClient[0] + 50,\n }\n : undefined\n }\n style={{ zIndex: 10000 }}\n menuItems={[\n {\n label: 'Zoom in',\n onClick: () => {\n if (mousedown && mouseup) {\n model.zoomIn(mousedown, mouseup)\n }\n // below line is needed to prevent tooltip from sticking\n setMouseOvered(false)\n },\n },\n {\n label: 'Open linear synteny view',\n onClick: () => {\n if (mousedown && mouseup) {\n model.onDotplotView(mousedown, mouseup)\n }\n // below line is needed to prevent tooltip from sticking\n setMouseOvered(false)\n },\n },\n ]}\n />\n </div>\n <ResizeHandle\n onDrag={n => model.setHeight(model.height + n)}\n className={classes.resizeHandle}\n />\n </div>\n </div>\n )\n})\nconst DotplotView = observer(function ({ model }: { model: DotplotViewModel }) {\n const { initialized, loading, error } = model\n\n if ((!initialized && !loading) || error) {\n return <ImportForm model={model} />\n }\n\n if (loading) {\n return <LoadingEllipses variant=\"h6\" />\n }\n\n return <DotplotViewInternal model={model} />\n})\n\nexport default DotplotView\n","import React from 'react'\nimport { observer } from 'mobx-react'\nimport { useTheme } from '@mui/material'\n\n// locals\nimport { DotplotViewModel } from '../model'\nimport { getFillProps, getStrokeProps } from '@jbrowse/core/util'\n\nexport const GridRaw = observer(function ({\n model,\n children,\n}: {\n model: DotplotViewModel\n children?: React.ReactNode\n}) {\n const { viewWidth, viewHeight, hview, vview } = model\n const hblocks = hview.dynamicBlocks.contentBlocks\n const vblocks = vview.dynamicBlocks.contentBlocks\n if (!hblocks.length || !vblocks.length) {\n return null\n }\n const htop = hview.displayedRegionsTotalPx - hview.offsetPx\n const vtop = vview.displayedRegionsTotalPx - vview.offsetPx\n const hbottom = hblocks[0]!.offsetPx - hview.offsetPx\n const vbottom = vblocks[0]!.offsetPx - vview.offsetPx\n const theme = useTheme()\n const stroke = theme.palette.divider\n\n // Uses math.max/min avoid making very large SVG rect offscreen element,\n // which can sometimes fail to draw\n const rx = Math.max(hbottom, 0)\n const ry = Math.max(viewHeight - vtop, 0)\n const w = Math.min(htop - hbottom, viewWidth)\n const h = Math.min(viewHeight - vbottom - ry, viewHeight)\n\n let lastx = Number.POSITIVE_INFINITY\n let lasty = Number.POSITIVE_INFINITY\n return (\n <>\n <rect\n x={rx}\n y={ry}\n width={w}\n height={h}\n {...getFillProps(theme.palette.background.default)}\n />\n <g>\n {hblocks.map(region => {\n const x = region.offsetPx - hview.offsetPx\n const render = Math.floor(x) !== Math.floor(lastx)\n if (render) {\n lastx = x\n }\n return render ? (\n <line\n key={JSON.stringify(region)}\n x1={x}\n y1={0}\n x2={x}\n y2={viewHeight}\n {...getStrokeProps(stroke)}\n />\n ) : null\n })}\n {vblocks.map(region => {\n const y = viewHeight - (region.offsetPx - vview.offsetPx)\n const render = Math.floor(y) !== Math.floor(lasty)\n if (render) {\n lasty = y\n }\n return render ? (\n <line\n key={JSON.stringify(region)}\n x1={0}\n y1={y}\n x2={viewWidth}\n y2={y}\n {...getStrokeProps(stroke)}\n />\n ) : null\n })}\n <line\n x1={htop}\n y1={0}\n x2={htop}\n y2={viewHeight}\n {...getStrokeProps(stroke)}\n />\n <line\n x1={0}\n y1={viewHeight - vtop}\n x2={viewWidth}\n y2={viewHeight - vtop}\n {...getStrokeProps(stroke)}\n />\n </g>\n {children}\n </>\n )\n})\n\nexport default function Grid({\n model,\n children,\n}: {\n model: DotplotViewModel\n children?: React.ReactNode\n}) {\n const { viewWidth, viewHeight } = model\n return (\n <svg\n width={viewWidth}\n height={viewHeight}\n style={{ background: 'rgba(0,0,0,0.12)' }}\n >\n <GridRaw model={model}>{children}</GridRaw>\n </svg>\n )\n}\n"],"names":["useStyles","makeStyles","vtext","gridColumn","gridRow","pointerEvents","userSelect","htext","HorizontalAxis","observer","model","viewWidth","borderY","classes","React","width","height","className","HorizontalAxisRaw","borderX","hview","htextRotation","hticks","offsetPx","dynamicBlocks","bpPerPx","dblocks","contentBlocks","hide","getBlockLabelKeysToHide","theme","useTheme","hviewSnap","getSnapshot","staticBlocks","ticks","map","tick","bpToPx","refName","coord","base","self","filter","f","undefined","region","has","key","x","xoff","Math","floor","_extends","transform","JSON","stringify","y","fontSize","dominantBaseline","textAnchor","getFillProps","palette","text","primary","x1","x2","y1","y2","type","strokeWidth","t","getTickDisplayStr","assemblyNames","join","VerticalAxis","viewHeight","VerticalAxisRaw","vview","vtextRotation","vticks","vviewSnap","yoff","getStrokeProps","grey","getAdapter","radioOption","assembly1","assembly2","fileLocation","indexFileLocation","bed1Location","bed2Location","pafLocation","queryAssembly","targetAssembly","outLocation","deltaLocation","chainLocation","mcscanAnchorsLocation","mcscanSimpleAnchorsLocation","pifGzLocation","index","location","Error","setSessionTrackData","setBed2Location","useState","setBed1Location","setFileLocation","setIndexFileLocation","value","setValue","error","setError","fileName","sessionTrackData","uri","localPath","name","str","r","split","pop","extName","endsWith","slice","stripGz","useEffect","fn","trackId","Date","now","adapter","e","console","Paper","style","padding","ErrorMessage","Typography","textAlign","RadioGroup","onChange","event","target","Grid","container","justifyContent","item","FormControlLabel","control","Radio","label","margin","href","display","FileSelector","description","setLocation","loc","setShowTrackId","session","getSession","tracks","sessionTracks","filteredTracks","track","readConfObject","includes","resetTrack","paragraph","TrackSelectorIcon","length","Select","MenuItem","getTrackName","importFormContainer","spacing","assemblySelector","TrackSelector","choice","setChoice","FormControl","FormLabel","id","row","ImportCustomTrack","ImportSyntenyTrackSelector","setAssembly2","setAssembly1","showTrackId","displayError","Container","alignItems","AssemblySelector","selected","val","Button","onClick","isSessionWithAddTracks","transaction","addTrackConf","toggleTrack","showTrack","setViews","setAssemblyNames","variant","color","WarningDialog","lazy","trackWarnings","displays","warnings","shown","setShown","setHide","Alert","severity","handleClose","dpad","gridTemplateColumns","position","right","zIndex","top","icon","elevation","IconButton","scroll","ArrowDropUp","ArrowLeft","ArrowRight","ArrowDropDown","zoomIn","ZoomIn","zoomOut","ZoomOut","CursorMove","props","SvgIcon","fill","d","CursorMouse","zoomOutButton","zoomInButton","activateTrackSelector","title","CascadingMenuButton","menuItems","squareView","squareViewProportional","showAllRegions","setDrawCigar","drawCigar","checked","setShowPanButtons","showPanButtons","subMenu","setCursorMode","cursorMode","setWheelMode","wheelMode","MoreVert","bp","marginLeft","spacer","flexGrow","headerBar","selection","DotplotControls","getBpDisplayStr","currBp","DotplotWarnings","PanButtons","TooltipWhereClicked","TooltipWhereMouseovered","blank","left","root","marginBottom","overflow","overlay","cursor","content","resizeHandle","background","boxSizing","borderTop","getOffset","rect","RenderedComponent","RenderingComponent","configuration","DotplotViewInternal","mousecurrClient","setMouseCurrClient","mousedownClient","setMouseDownClient","mouseOvered","setMouseOvered","mouseupClient","setMouseUpClient","ref","useRef","distanceX","distanceY","scheduled","ctrlKeyWasUsed","setCtrlKeyWasUsed","ctrlKeyDown","setCtrlKeyDown","svg","current","getBoundingClientRect","rootRect","mousedown","mousecurr","mouseup","mouserect","mouserectClient","xdistance","ydistance","validPan","validSelect","onWheel","preventDefault","deltaX","deltaY","window","requestAnimationFrame","abs","zoomTo","curr","addEventListener","removeEventListener","globalMouseMove","clientX","clientY","globalCtrlKeyDown","metaKey","ctrlKey","globalCtrlKeyUp","globalMouseUp","Header","onMouseLeave","onMouseEnter","Suspense","fallback","onMouseDown","button","min","Menu","open","Boolean","onMenuItemClick","_","callback","onClose","anchorReference","anchorPosition","onDotplotView","ResizeHandle","onDrag","n","setHeight","initialized","loading","ImportForm","LoadingEllipses","GridRaw","children","hblocks","vblocks","htop","displayedRegionsTotalPx","vtop","hbottom","vbottom","stroke","divider","rx","max","ry","w","h","lastx","Number","POSITIVE_INFINITY","lasty","default","render"],"sourceRoot":""} \ No newline at end of file