Mercurial > repos > fubar > jbrowse2
view x/static/js/9658.33669a59.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 source
{"version":3,"file":"static/js/9658.33669a59.chunk.js","mappings":"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","sources":["../../../plugins/linear-comparative-view/src/LinearSyntenyDisplay/components/util.ts","../../../plugins/linear-comparative-view/src/LinearSyntenyDisplay/drawSynteny.ts","../../../plugins/linear-comparative-view/src/LinearSyntenyView/svgcomponents/SVGBackground.tsx","../../../plugins/linear-comparative-view/src/LinearSyntenyView/svgcomponents/SVGLinearSyntenyView.tsx"],"sourcesContent":["import React from 'react'\nimport {\n assembleLocString,\n doesIntersect2,\n getSession,\n isSessionModelWithWidgets,\n Feature,\n getContainingTrack,\n getContainingView,\n} from '@jbrowse/core/util'\n\n// locals\nimport { getId, MAX_COLOR_RANGE } from '../drawSynteny'\nimport { LinearSyntenyDisplayModel } from '../model'\n\ninterface Pos {\n offsetPx: number\n}\n\nexport interface ClickCoord {\n clientX: number\n clientY: number\n feature: { f: Feature }\n}\n\ninterface FeatPos {\n p11: Pos\n p12: Pos\n p21: Pos\n p22: Pos\n f: Feature\n cigar: string[]\n}\n\nexport function drawMatchSimple({\n feature,\n ctx,\n offsets,\n cb,\n height,\n drawCurves,\n oobLimit,\n viewWidth,\n hideTiny,\n}: {\n feature: FeatPos\n ctx: CanvasRenderingContext2D\n offsets: number[]\n oobLimit: number\n viewWidth: number\n cb: (ctx: CanvasRenderingContext2D) => void\n height: number\n drawCurves?: boolean\n hideTiny?: boolean\n}) {\n const { p11, p12, p21, p22 } = feature\n\n const x11 = p11.offsetPx - offsets[0]!\n const x12 = p12.offsetPx - offsets[0]!\n const x21 = p21.offsetPx - offsets[1]!\n const x22 = p22.offsetPx - offsets[1]!\n\n const l1 = Math.abs(x12 - x11)\n const l2 = Math.abs(x22 - x21)\n const y1 = 0\n const y2 = height\n const mid = (y2 - y1) / 2\n const minX = Math.min(x21, x22)\n const maxX = Math.max(x21, x22)\n\n if (!doesIntersect2(minX, maxX, -oobLimit, viewWidth + oobLimit)) {\n return\n }\n\n // drawing a line if the results are thin: drawing a line results in much\n // less pixellation than filling in a thin polygon\n if (l1 <= 1 && l2 <= 1) {\n // hideTiny can be used to avoid drawing mouseover for thin lines in this\n // case\n if (!hideTiny) {\n ctx.beginPath()\n ctx.moveTo(x11, y1)\n if (drawCurves) {\n ctx.bezierCurveTo(x11, mid, x21, mid, x21, y2)\n } else {\n ctx.lineTo(x21, y2)\n }\n ctx.stroke()\n }\n } else {\n draw(ctx, x11, x12, y1, x22, x21, y2, mid, drawCurves)\n cb(ctx)\n }\n}\n\nexport function draw(\n ctx: CanvasRenderingContext2D,\n x1: number,\n x2: number,\n y1: number,\n x3: number,\n x4: number,\n y2: number,\n mid: number,\n drawCurves?: boolean,\n) {\n if (drawCurves) {\n drawBezierBox(ctx, x1, x2, y1, x3, x4, y2, mid)\n } else {\n drawBox(ctx, x1, x2, y1, x3, x4, y2)\n }\n}\n\nexport function drawBox(\n ctx: CanvasRenderingContext2D,\n x1: number,\n x2: number,\n y1: number,\n x3: number,\n x4: number,\n y2: number,\n) {\n ctx.beginPath()\n ctx.moveTo(x1, y1)\n ctx.lineTo(x2, y1)\n ctx.lineTo(x3, y2)\n ctx.lineTo(x4, y2)\n ctx.closePath()\n ctx.fill()\n}\n\nexport function drawBezierBox(\n ctx: CanvasRenderingContext2D,\n x1: number,\n x2: number,\n y1: number,\n x3: number,\n x4: number,\n y2: number,\n mid: number,\n) {\n const len1 = Math.abs(x1 - x2)\n const len2 = Math.abs(x1 - x2)\n\n // heuristic to not draw hourglass inversions with bezier curves when they\n // are thin and far apart because it results in areas that are not drawn well\n // demo https://codesandbox.io/s/fast-glitter-q3b1or?file=/src/index.js\n if (len1 < 5 && len2 < 5 && x2 < x1 && Math.abs(x1 - x3) > 100) {\n const tmp = x1\n x1 = x2\n x2 = tmp\n }\n ctx.beginPath()\n ctx.moveTo(x1, y1)\n ctx.lineTo(x2, y1)\n ctx.bezierCurveTo(x2, mid, x3, mid, x3, y2)\n ctx.lineTo(x4, y2)\n ctx.bezierCurveTo(x4, mid, x1, mid, x1, y1)\n ctx.closePath()\n ctx.fill()\n}\n\nexport function onSynClick(\n event: React.MouseEvent,\n model: LinearSyntenyDisplayModel,\n) {\n const view = getContainingView(model)\n const track = getContainingTrack(model)\n const ref1 = model.clickMapCanvas\n const ref2 = model.cigarClickMapCanvas\n if (!ref1 || !ref2) {\n return\n }\n const rect = ref1.getBoundingClientRect()\n const ctx1 = ref1.getContext('2d')\n const ctx2 = ref2.getContext('2d')\n if (!ctx1 || !ctx2) {\n return\n }\n const x = event.clientX - rect.left\n const y = event.clientY - rect.top\n const [r1, g1, b1] = ctx1.getImageData(x, y, 1, 1).data\n const unitMultiplier = Math.floor(MAX_COLOR_RANGE / model.numFeats)\n const id = getId(r1!, g1!, b1!, unitMultiplier)\n const feat = model.featPositions[id]\n if (feat) {\n const { f } = feat\n model.setClickId(f.id())\n const session = getSession(model)\n if (isSessionModelWithWidgets(session)) {\n session.showWidget(\n session.addWidget('BaseFeatureWidget', 'baseFeature', {\n view,\n track,\n featureData: f.toJSON(),\n }),\n )\n }\n }\n return feat\n}\n\nexport function onSynContextClick(\n event: React.MouseEvent,\n model: LinearSyntenyDisplayModel,\n setAnchorEl: (arg: ClickCoord) => void,\n) {\n event.preventDefault()\n const ref1 = model.clickMapCanvas\n const ref2 = model.cigarClickMapCanvas\n if (!ref1 || !ref2) {\n return\n }\n const rect = ref1.getBoundingClientRect()\n const ctx1 = ref1.getContext('2d')\n const ctx2 = ref2.getContext('2d')\n if (!ctx1 || !ctx2) {\n return\n }\n const { clientX, clientY } = event\n const x = clientX - rect.left\n const y = clientY - rect.top\n const [r1, g1, b1] = ctx1.getImageData(x, y, 1, 1).data\n const unitMultiplier = Math.floor(MAX_COLOR_RANGE / model.numFeats)\n const id = getId(r1!, g1!, b1!, unitMultiplier)\n const f = model.featPositions[id]\n if (f) {\n model.setClickId(f.f.id())\n setAnchorEl({ clientX, clientY, feature: f })\n }\n}\n\nexport function getTooltip(f: Feature, cigarOp?: string, cigarOpLen?: string) {\n // @ts-expect-error\n const f1 = f.toJSON() as {\n refName: string\n start: number\n end: number\n strand?: number\n assemblyName: string\n identity?: number\n name?: string\n mate: {\n start: number\n end: number\n refName: string\n name: string\n }\n }\n const f2 = f1.mate\n const l1 = f1.end - f1.start\n const l2 = f2.end - f2.start\n const identity = f1.identity\n const n1 = f1.name\n const n2 = f2.name\n return [\n `Loc1: ${assembleLocString(f1)}`,\n `Loc2: ${assembleLocString(f2)}`,\n `Inverted: ${f1.strand === -1}`,\n `Query len: ${l1.toLocaleString('en-US')}`,\n `Target len: ${l2.toLocaleString('en-US')}`,\n identity ? `Identity: ${identity.toPrecision(2)}` : '',\n cigarOp ? `CIGAR operator: ${cigarOp}${cigarOpLen}` : '',\n n1 ? `Name 1: ${n1}` : '',\n n2 ? `Name 1: ${n2}` : '',\n ]\n .filter(f => !!f)\n .join('<br/>')\n}\n","import { doesIntersect2, getContainingView } from '@jbrowse/core/util'\n// locals\nimport { LinearSyntenyViewModel } from '../LinearSyntenyView/model'\nimport { LinearSyntenyDisplayModel } from './model'\nimport { draw, drawMatchSimple } from './components/util'\n\nexport const MAX_COLOR_RANGE = 255 * 255 * 255 // max color range\n\nfunction makeColor(idx: number) {\n const r = Math.floor(idx / (255 * 255)) % 255\n const g = Math.floor(idx / 255) % 255\n const b = idx % 255\n return `rgb(${r},${g},${b})`\n}\n\nconst colorMap = {\n I: '#ff03',\n N: '#0a03',\n D: '#00f3',\n X: 'brown',\n M: '#f003',\n '=': '#f003',\n}\n\nconst lineLimit = 3\n\nconst oobLimit = 1600\n\nexport function getId(r: number, g: number, b: number, unitMultiplier: number) {\n return Math.floor((r * 255 * 255 + g * 255 + b - 1) / unitMultiplier)\n}\n\nexport function drawRef(\n model: LinearSyntenyDisplayModel,\n ctx1: CanvasRenderingContext2D,\n ctx3?: CanvasRenderingContext2D,\n) {\n const view = getContainingView(model) as LinearSyntenyViewModel\n const drawCurves = view.drawCurves\n const drawCIGAR = view.drawCIGAR\n const height = view.middleComparativeHeight\n const width = view.width\n const bpPerPxs = view.views.map(v => v.bpPerPx)\n\n if (ctx3) {\n ctx3.imageSmoothingEnabled = false\n }\n\n ctx1.beginPath()\n const featPos = model.featPositions\n const offsets = view.views.map(v => v.offsetPx)\n\n const unitMultiplier = Math.floor(MAX_COLOR_RANGE / featPos.length)\n\n // this loop is optimized to draw many thin lines with a single ctx.stroke\n // call, a separate loop below draws larger boxes\n ctx1.fillStyle = colorMap.M\n ctx1.strokeStyle = colorMap.M\n for (const { p11, p12, p21, p22 } of featPos) {\n const x11 = p11.offsetPx - offsets[0]!\n const x12 = p12.offsetPx - offsets[0]!\n const x21 = p21.offsetPx - offsets[1]!\n const x22 = p22.offsetPx - offsets[1]!\n const l1 = Math.abs(x12 - x11)\n const l2 = Math.abs(x22 - x21)\n const y1 = 0\n const y2 = height\n const mid = (y2 - y1) / 2\n\n // drawing a line if the results are thin results in much less pixellation\n // than filling in a thin polygon\n if (\n l1 <= lineLimit &&\n l2 <= lineLimit &&\n x21 < width + oobLimit &&\n x21 > -oobLimit\n ) {\n ctx1.moveTo(x11, y1)\n if (drawCurves) {\n ctx1.bezierCurveTo(x11, mid, x21, mid, x21, y2)\n } else {\n ctx1.lineTo(x21, y2)\n }\n }\n }\n ctx1.stroke()\n\n // this loop only draws small lines as a polyline, the polyline calls\n // ctx.stroke once is much more efficient than calling stroke() many times\n ctx1.fillStyle = colorMap.M\n ctx1.strokeStyle = colorMap.M\n for (const { p11, p12, p21, p22, f, cigar } of featPos) {\n const x11 = p11.offsetPx - offsets[0]!\n const x12 = p12.offsetPx - offsets[0]!\n const x21 = p21.offsetPx - offsets[1]!\n const x22 = p22.offsetPx - offsets[1]!\n const l1 = Math.abs(x12 - x11)\n const l2 = Math.abs(x22 - x21)\n const minX = Math.min(x21, x22)\n const maxX = Math.max(x21, x22)\n const y1 = 0\n const y2 = height\n const mid = (y2 - y1) / 2\n\n if (\n !(l1 <= lineLimit && l2 <= lineLimit) &&\n doesIntersect2(minX, maxX, -oobLimit, view.width + oobLimit)\n ) {\n const s1 = f.get('strand')\n const k1 = s1 === -1 ? x12 : x11\n const k2 = s1 === -1 ? x11 : x12\n\n // rev1/rev2 flip the direction of the CIGAR drawing in horizontally flipped\n // modes. somewhat heuristically determined, but tested for\n const rev1 = k1 < k2 ? 1 : -1\n const rev2 = (x21 < x22 ? 1 : -1) * s1\n\n // cx1/cx2 are the current x positions on top and bottom rows\n let cx1 = k1\n let cx2 = s1 === -1 ? x22 : x21\n if (cigar.length && drawCIGAR) {\n // continuingFlag skips drawing commands on very small CIGAR features\n let continuingFlag = false\n\n // px1/px2 are the previous x positions on the top and bottom rows\n let px1 = 0\n let px2 = 0\n const unitMultiplier2 = Math.floor(MAX_COLOR_RANGE / cigar.length)\n for (let j = 0; j < cigar.length; j += 2) {\n const idx = j * unitMultiplier2 + 1\n\n const len = +cigar[j]!\n const op = cigar[j + 1] as keyof typeof colorMap\n\n if (!continuingFlag) {\n px1 = cx1\n px2 = cx2\n }\n\n const d1 = len / bpPerPxs[0]!\n const d2 = len / bpPerPxs[1]!\n\n if (op === 'M' || op === '=' || op === 'X') {\n cx1 += d1 * rev1\n cx2 += d2 * rev2\n } else if (op === 'D' || op === 'N') {\n cx1 += d1 * rev1\n }\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n else if (op === 'I') {\n cx2 += d2 * rev2\n }\n\n // check that we are even drawing in view here, e.g. that all\n // points are not all less than 0 or greater than width\n if (\n !(\n Math.max(px1, px2, cx1, cx2) < 0 ||\n Math.min(px1, px2, cx1, cx2) > width\n )\n ) {\n // if it is a small feature and not the last element of the\n // CIGAR (which could skip rendering it entire if we did turn\n // it on), then turn on continuing flag\n const isNotLast = j < cigar.length - 2\n if (\n Math.abs(cx1 - px1) <= 1 &&\n Math.abs(cx2 - px2) <= 1 &&\n isNotLast\n ) {\n continuingFlag = true\n } else {\n // allow rendering the dominant color when using continuing flag\n // if the last element of continuing was a large feature, else\n // just use match\n ctx1.fillStyle =\n colorMap[(continuingFlag && d1 > 1) || d2 > 1 ? op : 'M']\n continuingFlag = false\n\n draw(ctx1, px1, cx1, y1, cx2, px2, y2, mid, drawCurves)\n if (ctx3) {\n ctx3.fillStyle = makeColor(idx)\n draw(ctx3, px1, cx1, y1, cx2, px2, y2, mid, drawCurves)\n }\n }\n }\n }\n } else {\n draw(ctx1, x11, x12, y1, x22, x21, y2, mid, drawCurves)\n }\n }\n }\n\n // draw click map\n const ctx2 = model.clickMapCanvas?.getContext('2d')\n if (!ctx2) {\n return\n }\n ctx2.imageSmoothingEnabled = false\n ctx2.clearRect(0, 0, width, height)\n for (let i = 0; i < featPos.length; i++) {\n const feature = featPos[i]!\n const idx = i * unitMultiplier + 1\n ctx2.fillStyle = makeColor(idx)\n\n // too many click map false positives with colored stroked lines\n drawMatchSimple({\n cb: ctx => {\n ctx.fill()\n },\n feature,\n ctx: ctx2,\n drawCurves,\n offsets,\n oobLimit,\n viewWidth: view.width,\n hideTiny: true,\n height,\n })\n }\n return undefined\n}\n\nexport function drawMouseoverSynteny(model: LinearSyntenyDisplayModel) {\n const { clickId, mouseoverId } = model\n const highResolutionScaling = 1\n const view = getContainingView(model) as LinearSyntenyViewModel\n const drawCurves = view.drawCurves\n const height = view.middleComparativeHeight\n const width = view.width\n const ctx = model.mouseoverCanvas?.getContext('2d')\n const offsets = view.views.map(v => v.offsetPx)\n\n if (!ctx) {\n return\n }\n ctx.resetTransform()\n ctx.scale(highResolutionScaling, highResolutionScaling)\n ctx.clearRect(0, 0, width, height)\n const feature1 = model.featMap[mouseoverId || '']\n if (feature1) {\n ctx.fillStyle = 'rgb(0,0,0,0.1)'\n drawMatchSimple({\n cb: ctx => {\n ctx.fill()\n },\n feature: feature1,\n ctx,\n oobLimit,\n viewWidth: view.width,\n drawCurves,\n offsets,\n height,\n })\n }\n const feature2 = model.featMap[clickId || '']\n if (feature2) {\n ctx.strokeStyle = 'rgb(0, 0, 0, 0.9)'\n\n drawMatchSimple({\n cb: ctx => {\n ctx.stroke()\n },\n feature: feature2,\n ctx,\n oobLimit,\n viewWidth: view.width,\n drawCurves,\n offsets,\n height,\n })\n }\n}\n","import React from 'react'\nimport { useTheme } from '@mui/material'\nimport { stripAlpha } from '@jbrowse/core/util'\n\nexport default function SVGBackground({\n width,\n height,\n shift,\n}: {\n width: number\n height: number\n shift: number\n}) {\n const theme = useTheme()\n return (\n <rect\n width={width + shift * 2}\n height={height}\n fill={stripAlpha(theme.palette.background.default)}\n />\n )\n}\n","import React from 'react'\nimport { ThemeProvider } from '@mui/material'\nimport { getRoot } from 'mobx-state-tree'\nimport { when } from 'mobx'\nimport {\n getSession,\n getSerializedSvg,\n max,\n measureText,\n ReactRendering,\n renderToAbstractCanvas,\n renderToStaticMarkup,\n sum,\n getFillProps,\n} from '@jbrowse/core/util'\nimport { getTrackName } from '@jbrowse/core/util/tracks'\nimport { createJBrowseTheme } from '@jbrowse/core/ui'\nimport {\n SVGTracks,\n SVGRuler,\n totalHeight,\n} from '@jbrowse/plugin-linear-genome-view'\n\n// locals\nimport SVGBackground from './SVGBackground'\nimport { ExportSvgOptions, LinearSyntenyViewModel } from '../model'\nimport { drawRef } from '../../LinearSyntenyDisplay/drawSynteny'\n\ntype LSV = LinearSyntenyViewModel\n\n// render LGV to SVG\nexport async function renderToSvg(model: LSV, opts: ExportSvgOptions) {\n await when(() => model.initialized)\n const {\n textHeight = 18,\n headerHeight = 30,\n rulerHeight = 30,\n fontSize = 13,\n trackLabels = 'offset',\n Wrapper = ({ children }) => children,\n themeName = 'default',\n } = opts\n const session = getSession(model)\n const themeVar = session.allThemes?.()[themeName]\n const { width, views, middleComparativeHeight: synH, tracks } = model\n const shift = 50\n const offset = headerHeight + rulerHeight\n\n const { createRootFn } = getRoot<any>(model)\n const heights = views.map(\n v => totalHeight(v.tracks, textHeight, trackLabels) + offset,\n )\n const totalHeightSvg = sum(heights) + synH + 100\n const displayResults = await Promise.all(\n views.map(\n async view =>\n ({\n view,\n data: await Promise.all(\n view.tracks.map(async track => {\n const d = track.displays[0]\n await when(() => (d.ready !== undefined ? d.ready : true))\n return {\n track,\n result: await d.renderSvg({ ...opts, theme: themeVar }),\n }\n }),\n ),\n }) as const,\n ),\n )\n\n const renderings = await Promise.all(\n tracks.map(async track => {\n const d = track.displays[0]\n await when(() => (d.ready !== undefined ? d.ready : true))\n const r = await renderToAbstractCanvas(\n width,\n synH,\n { exportSVG: opts },\n ctx => {\n drawRef(d, ctx)\n return undefined\n },\n )\n\n if ('imageData' in r) {\n throw new Error('found a canvas in svg export, probably a bug')\n }\n if ('canvasRecordedData' in r) {\n return {\n html: await getSerializedSvg({\n ...r,\n width,\n height: synH,\n }),\n }\n }\n return r\n }),\n )\n\n const trackLabelMaxLen =\n max(\n views.flatMap(view =>\n view.tracks.map(t =>\n measureText(getTrackName(t.configuration, session), fontSize),\n ),\n ),\n 0,\n ) + 40\n const trackLabelOffset = trackLabels === 'left' ? trackLabelMaxLen : 0\n const w = width + trackLabelOffset\n const theme = createJBrowseTheme(themeVar)\n\n // the xlink namespace is used for rendering <image> tag\n return renderToStaticMarkup(\n <ThemeProvider theme={theme}>\n <Wrapper>\n <svg\n width={width}\n height={totalHeightSvg}\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n viewBox={[0, 0, w + shift * 2, totalHeightSvg].toString()}\n >\n <SVGBackground width={w} height={totalHeightSvg} shift={shift} />\n <g transform={`translate(${shift} ${fontSize})`}>\n <g transform={`translate(${trackLabelOffset})`}>\n <text\n x={0}\n fontSize={fontSize}\n {...getFillProps(theme.palette.text.primary)}\n >\n {views[0]!.assemblyNames.join(', ')}\n </text>\n\n <SVGRuler model={displayResults[0]!.view} fontSize={fontSize} />\n </g>\n <SVGTracks\n textHeight={textHeight}\n trackLabels={trackLabels}\n fontSize={fontSize}\n model={displayResults[0]!.view}\n displayResults={displayResults[0]!.data}\n offset={offset}\n trackLabelOffset={trackLabelOffset}\n />\n </g>\n\n <defs>\n <clipPath id={'synclip'}>\n <rect x={0} y={0} width={width} height={synH} />\n </clipPath>\n </defs>\n <g\n transform={`translate(${shift + trackLabelOffset} ${\n fontSize + heights[0]!\n })`}\n clipPath={'url(#synclip)'}\n >\n {renderings.map((r, i) => (\n /* biome-ignore lint/suspicious/noArrayIndexKey: */\n <ReactRendering key={i} rendering={r} />\n ))}\n </g>\n <g transform={`translate(${shift} ${fontSize + heights[0]! + synH})`}>\n <g transform={`translate(${trackLabelOffset})`}>\n <text\n x={0}\n fontSize={fontSize}\n {...getFillProps(theme.palette.text.primary)}\n >\n {views[1]!.assemblyNames.join(', ')}\n </text>\n <SVGRuler model={displayResults[1]!.view} fontSize={fontSize} />\n </g>\n <SVGTracks\n textHeight={textHeight}\n trackLabels={trackLabels}\n fontSize={fontSize}\n model={displayResults[1]!.view}\n displayResults={displayResults[1]!.data}\n offset={offset}\n trackLabelOffset={trackLabelOffset}\n />\n </g>\n </svg>\n </Wrapper>\n </ThemeProvider>,\n createRootFn,\n )\n}\n"],"names":["drawMatchSimple","feature","ctx","offsets","cb","height","drawCurves","oobLimit","viewWidth","hideTiny","p11","p12","p21","p22","x11","offsetPx","x12","x21","x22","l1","Math","abs","l2","y2","mid","minX","min","maxX","max","doesIntersect2","beginPath","moveTo","bezierCurveTo","lineTo","stroke","draw","x1","x2","y1","x3","x4","len1","len2","tmp","closePath","fill","drawBezierBox","drawBox","onSynClick","event","model","view","getContainingView","track","getContainingTrack","ref1","clickMapCanvas","ref2","cigarClickMapCanvas","rect","getBoundingClientRect","ctx1","getContext","ctx2","x","clientX","left","y","clientY","top","r1","g1","b1","getImageData","data","unitMultiplier","floor","MAX_COLOR_RANGE","numFeats","id","getId","feat","featPositions","f","setClickId","session","getSession","isSessionModelWithWidgets","showWidget","addWidget","featureData","toJSON","onSynContextClick","setAnchorEl","preventDefault","getTooltip","cigarOp","cigarOpLen","f1","f2","mate","end","start","identity","n1","name","n2","assembleLocString","strand","toLocaleString","toPrecision","filter","join","makeColor","idx","colorMap","I","N","D","X","M","lineLimit","r","g","b","drawRef","ctx3","drawCIGAR","middleComparativeHeight","width","bpPerPxs","views","map","v","bpPerPx","imageSmoothingEnabled","featPos","length","fillStyle","strokeStyle","cigar","s1","get","k1","rev1","rev2","cx1","cx2","continuingFlag","px1","px2","unitMultiplier2","j","len","op","d1","d2","isNotLast","clearRect","i","drawMouseoverSynteny","clickId","mouseoverId","mouseoverCanvas","resetTransform","scale","feature1","featMap","feature2","SVGBackground","shift","theme","useTheme","React","stripAlpha","palette","background","default","async","renderToSvg","opts","when","initialized","textHeight","headerHeight","rulerHeight","fontSize","trackLabels","Wrapper","children","themeName","themeVar","allThemes","synH","tracks","offset","createRootFn","getRoot","heights","totalHeight","totalHeightSvg","sum","displayResults","Promise","all","d","displays","undefined","ready","result","renderSvg","renderings","renderToAbstractCanvas","exportSVG","Error","html","getSerializedSvg","trackLabelMaxLen","flatMap","t","measureText","getTrackName","configuration","trackLabelOffset","w","createJBrowseTheme","renderToStaticMarkup","ThemeProvider","xmlns","xmlnsXlink","viewBox","toString","transform","_extends","getFillProps","text","primary","assemblyNames","SVGRuler","SVGTracks","clipPath","ReactRendering","key","rendering"],"sourceRoot":""}