jbrowse-plugin-graphgenomeviewer 8.3.6 → 8.3.7
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/chunks/{GbzBaseSyntenyAdapter-BG6FNGHY.js → GbzBaseSyntenyAdapter-4FATZPZG.js} +2 -2
- package/dist/chunks/{GbzBaseSyntenyAdapter-BG6FNGHY.js.map → GbzBaseSyntenyAdapter-4FATZPZG.js.map} +1 -1
- package/dist/chunks/{GraphGenomeView-JJNU2432.js → GraphGenomeView-H2Z5NQW4.js} +2 -2
- package/dist/chunks/{GraphTrackSettingsDialog-7NGUPDUJ.js → GraphTrackSettingsDialog-LFFJHC7F.js} +2 -2
- package/dist/chunks/{HighlightColorDialog-KFXSZXTC.js → HighlightColorDialog-76RJSXSV.js} +2 -2
- package/dist/chunks/{LinearGraphDisplay-K3AT3S7J.js → LinearGraphDisplay-VYPF26DJ.js} +2 -2
- package/dist/chunks/{MinigraphBubbleAdapter-P66QLENP.js → MinigraphBubbleAdapter-WQUZTNDM.js} +2 -2
- package/dist/chunks/{RgfaTabixAdapter-CQJROUIP.js → RgfaTabixAdapter-K763K62E.js} +2 -2
- package/dist/chunks/{WalkFormsAdapter-YSYANJD5.js → WalkFormsAdapter-WJTEKIOB.js} +2 -2
- package/dist/chunks/{WalkTabixSyntenyAdapter-7COETKFB.js → WalkTabixSyntenyAdapter-PHRULBP7.js} +2 -2
- package/dist/chunks/{chunk-L372SDUG.js → chunk-3M3UH5JQ.js} +1 -1
- package/dist/chunks/{chunk-L372SDUG.js.map → chunk-3M3UH5JQ.js.map} +1 -1
- package/dist/chunks/{chunk-KVZIGTH3.js → chunk-477HYXB2.js} +2 -2
- package/dist/chunks/{chunk-HQ7FQACT.js → chunk-47KLT4FL.js} +2 -2
- package/dist/chunks/{chunk-HQ7FQACT.js.map → chunk-47KLT4FL.js.map} +1 -1
- package/dist/chunks/{chunk-LD6RX4AZ.js → chunk-6NR64IXK.js} +1 -1
- package/dist/chunks/{chunk-LD6RX4AZ.js.map → chunk-6NR64IXK.js.map} +1 -1
- package/dist/chunks/{chunk-C5YAQNOO.js → chunk-6YK4U5LT.js} +2 -2
- package/dist/chunks/{chunk-C5YAQNOO.js.map → chunk-6YK4U5LT.js.map} +2 -2
- package/dist/chunks/{chunk-4B3GQTHX.js → chunk-75WJWJ45.js} +2 -2
- package/dist/chunks/{chunk-4B3GQTHX.js.map → chunk-75WJWJ45.js.map} +1 -1
- package/dist/chunks/{chunk-YS3R3J2I.js → chunk-AILGRHTE.js} +2 -2
- package/dist/chunks/{chunk-YS3R3J2I.js.map → chunk-AILGRHTE.js.map} +1 -1
- package/dist/chunks/{chunk-DKQFTMWL.js → chunk-CI6VQ2KV.js} +2 -2
- package/dist/chunks/{chunk-DKQFTMWL.js.map → chunk-CI6VQ2KV.js.map} +1 -1
- package/dist/chunks/{chunk-HLWIFWDZ.js → chunk-DFWLOMRU.js} +2 -2
- package/dist/chunks/{chunk-NFPLX56S.js → chunk-HVDE2ZKA.js} +1 -1
- package/dist/chunks/{chunk-NFPLX56S.js.map → chunk-HVDE2ZKA.js.map} +1 -1
- package/dist/chunks/{chunk-QB5JERW4.js → chunk-IICQFAGJ.js} +1 -1
- package/dist/chunks/{chunk-QB5JERW4.js.map → chunk-IICQFAGJ.js.map} +1 -1
- package/dist/chunks/{chunk-HICKAMKK.js → chunk-PVRRW4PM.js} +2 -2
- package/dist/chunks/{chunk-HICKAMKK.js.map → chunk-PVRRW4PM.js.map} +1 -1
- package/dist/chunks/chunk-SQBD75UZ.js +2 -0
- package/dist/chunks/{chunk-EVKN4Y3R.js → chunk-SVF6WK42.js} +2 -2
- package/dist/chunks/{chunk-EVKN4Y3R.js.map → chunk-SVF6WK42.js.map} +1 -1
- package/dist/chunks/chunk-UOWS2HEQ.js +2 -0
- package/dist/chunks/chunk-UOWS2HEQ.js.map +7 -0
- package/dist/chunks/{chunk-RCJQCBBI.js → chunk-VEI7EAE6.js} +2 -2
- package/dist/chunks/{chunk-NBS4FGQ6.js → chunk-VZNECPSI.js} +2 -2
- package/dist/chunks/{chunk-DAF7EWRF.js → chunk-XK4HHKSP.js} +2 -2
- package/dist/chunks/{chunk-3S33TTXF.js → chunk-XTEZPFP4.js} +2 -2
- package/dist/chunks/{chunk-3S33TTXF.js.map → chunk-XTEZPFP4.js.map} +1 -1
- package/dist/chunks/chunk-YDJ6SDQM.js +3 -0
- package/dist/chunks/chunk-YDJ6SDQM.js.map +7 -0
- package/dist/chunks/{renderSvg-2YULK24A.js → renderSvg-W2VIM3IT.js} +2 -2
- package/dist/jbrowse-plugin-graphgenomeviewer.esm.js +2 -2
- package/dist/jbrowse-plugin-graphgenomeviewer.esm.js.map +2 -2
- package/package.json +2 -2
- package/src/RgfaTabixAdapter/walkFiles.test.ts +7 -3
- package/src/version.ts +1 -1
- package/dist/chunks/chunk-3HS6N7WB.js +0 -2
- package/dist/chunks/chunk-3HS6N7WB.js.map +0 -7
- package/dist/chunks/chunk-CNFMSSE2.js +0 -3
- package/dist/chunks/chunk-CNFMSSE2.js.map +0 -7
- package/dist/chunks/chunk-SYKOZDP6.js +0 -2
- /package/dist/chunks/{GraphGenomeView-JJNU2432.js.map → GraphGenomeView-H2Z5NQW4.js.map} +0 -0
- /package/dist/chunks/{GraphTrackSettingsDialog-7NGUPDUJ.js.map → GraphTrackSettingsDialog-LFFJHC7F.js.map} +0 -0
- /package/dist/chunks/{HighlightColorDialog-KFXSZXTC.js.map → HighlightColorDialog-76RJSXSV.js.map} +0 -0
- /package/dist/chunks/{LinearGraphDisplay-K3AT3S7J.js.map → LinearGraphDisplay-VYPF26DJ.js.map} +0 -0
- /package/dist/chunks/{MinigraphBubbleAdapter-P66QLENP.js.map → MinigraphBubbleAdapter-WQUZTNDM.js.map} +0 -0
- /package/dist/chunks/{RgfaTabixAdapter-CQJROUIP.js.map → RgfaTabixAdapter-K763K62E.js.map} +0 -0
- /package/dist/chunks/{WalkFormsAdapter-YSYANJD5.js.map → WalkFormsAdapter-WJTEKIOB.js.map} +0 -0
- /package/dist/chunks/{WalkTabixSyntenyAdapter-7COETKFB.js.map → WalkTabixSyntenyAdapter-PHRULBP7.js.map} +0 -0
- /package/dist/chunks/{chunk-KVZIGTH3.js.map → chunk-477HYXB2.js.map} +0 -0
- /package/dist/chunks/{chunk-HLWIFWDZ.js.map → chunk-DFWLOMRU.js.map} +0 -0
- /package/dist/chunks/{chunk-SYKOZDP6.js.map → chunk-SQBD75UZ.js.map} +0 -0
- /package/dist/chunks/{chunk-RCJQCBBI.js.map → chunk-VEI7EAE6.js.map} +0 -0
- /package/dist/chunks/{chunk-NBS4FGQ6.js.map → chunk-VZNECPSI.js.map} +0 -0
- /package/dist/chunks/{chunk-DAF7EWRF.js.map → chunk-XK4HHKSP.js.map} +0 -0
- /package/dist/chunks/{renderSvg-2YULK24A.js.map → renderSvg-W2VIM3IT.js.map} +0 -0
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{i as M,l as W,p as F}from"./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import{i as M,l as W,p as F}from"./chunk-HVDE2ZKA.js";import{b as O,h as A}from"./chunk-6NR64IXK.js";import{K as b,Q as _,X as B}from"./chunk-CI6VQ2KV.js";import{f as R}from"./chunk-NIEZKWQV.js";import{D as E,E as P,H as m,d as v,o as T,q as I,r as L,s as w,t as N,w as D,y as G,z as x}from"./chunk-5Z4VIKXZ.js";import{b as t,c as r,d as C}from"./chunk-JMBDTNUR.js";var S=[{value:0,label:"Fastest"},{value:1,label:"Fast"},{value:2,label:"Default"},{value:3,label:"Fine"},{value:4,label:"Best"}];function f({label:o,value:n,options:e,testId:s,size:d,sx:p,disabled:a,title:h,shown:g,onChange:z}){let k=R();return r(w,{size:d,sx:p,disabled:a,title:h,children:[t(D,{id:k,shrink:!0,children:o}),t(E,{labelId:k,value:n,label:o,notched:!0,displayEmpty:!0,"data-testid":s,renderValue:i=>g??e.find(H=>H.value===i)?.label??i,onChange:i=>{z(i.target.value)},children:e.map(i=>t(x,{value:i.value,disabled:i.disabled,title:i.disabled?void 0:i.description,children:t(G,{primary:i.label,secondary:i.disabled?i.description:void 0})},i.value))})]})}var u=F()({section:{marginBottom:24},group:{marginBottom:16},heading:{marginBottom:8}});function l({warn:o=!1,children:n}){return t(m,{variant:"caption",component:"div",color:o?"warning.main":"text.secondary",children:n})}function y({title:o,children:n}){let{classes:e}=u();return r("section",{className:e.group,children:[t(m,{variant:"subtitle1",className:e.heading,children:o}),n]})}function U({label:o,checked:n,onChange:e,children:s}){let{classes:d}=u();return r("div",{className:d.section,children:[t(N,{control:t(P,{checked:n,onChange:p=>{e(p.target.checked)}}),label:o}),s]})}function c({children:o,...n}){let{classes:e}=u();return r("div",{className:e.section,children:[t(f,{sx:{minWidth:200},...n}),o]})}var Y=[5e3,2e4,5e4,1e5];function $(o){return[...new Set([...Y,o])].sort((n,e)=>n-e).map(n=>({value:String(n),label:n.toLocaleString()}))}function Q({label:o,choices:n,stored:e,auto:s,testId:d,onChange:p,children:a}){return n.length>0?t(c,{label:o,value:n.some(h=>h.trackId===e)?e:"",options:[{value:"",label:`Automatic (${s?.name??"none"})`},...n.map(({trackId:h,name:g})=>({value:h,label:g}))],testId:d,onChange:p,children:a}):null}var q=C(function(n){let{model:e,onClose:s,children:d}=n,{classes:p}=u();return r(v,{open:!0,onClose:s,title:"Graph settings",children:[r(L,{children:[r(y,{title:"Subgraph",children:[d,t(c,{label:"Node limit",value:String(e.maxGraphNodes),options:$(e.maxGraphNodes),testId:"graph-node-limit-select",onChange:a=>{e.setMaxGraphNodes(Number(a))},children:t(l,{children:"The most nodes a layout draws; past it the graph is declined. Walk rows take no limit."})})]}),r(y,{title:"Drawing",children:[e.anchorPaths.length>1?t(c,{label:"Reference path",value:e.activeReferencePath??"",options:e.anchorPaths.map(({name:a})=>({value:a,label:a})),testId:"graph-reference-path-select",onChange:a=>{e.setReferencePath(a),e.recomputeLayout()},children:t(l,{children:"The path the anchored layouts place x along"})}):null,t(c,{label:"Node width",value:e.nodeWidth,options:_,testId:"graph-node-width-select",onChange:a=>{e.setNodeWidth(a)},children:t(l,{children:"Depth as width. In a cut with walks, depth is how many haplotypes carry the node."})}),t(c,{label:"Link width",value:e.linkWidth,options:B,testId:"graph-link-width-select",onChange:a=>{e.setLinkWidth(a)},children:t(l,{children:"Walks as width, so a common route reads heavy and a private one thin."})}),r(U,{label:"Draw paths",checked:e.drawPaths,onChange:a=>{e.setLayer("paths",a)},children:[t(l,{children:"Color each node by the paths through it, one lane per path"}),e.drawPaths&&!e.effectiveDrawPaths?t(l,{warn:!0,children:e.pathCount>b?`Off: ${e.pathCount.toLocaleString()} paths is past the ${b} this can tell apart`:"Off: this graph states no paths"}):null]}),t(Q,{label:"Gene track",choices:e.geneTrackChoices,stored:e.geneTrackId,auto:W(e.geneTrackChoices,""),testId:"graph-gene-track-select",onChange:a=>{e.setGeneTrackId(a)},children:t(l,{children:"Where genes on the backbone come from"})}),t(Q,{label:"Repeat track",choices:e.repeatTrackChoices,stored:e.repeatTrackId,auto:M(e.repeatTrackChoices,""),testId:"graph-repeat-track-select",onChange:a=>{e.setRepeatTrackId(a)},children:t(l,{children:"The tandem repeat annotation walk rows measure and tile by"})})]}),r(y,{title:"Force-directed layout",children:[e.hasGraph&&!e.usesLayoutEngine?t("div",{className:p.section,children:t(l,{warn:!0,children:"No effect on the current layout until Layout is Force-directed"})}):null,t(c,{label:"Engine",value:e.layoutEngine,options:O,testId:"graph-layout-engine-select",onChange:a=>{e.setLayoutEngine(a)},children:t(l,{children:"Stress keeps the reference straight, so a zoom keeps the picture; FMMM lets the whole graph settle."})}),t(c,{label:"Layout quality",value:String(e.layoutQuality),options:S.map(a=>({value:String(a.value),label:a.label})),testId:"graph-layout-quality-select",onChange:a=>{e.setLayoutQuality(Number(a))},children:t(l,{children:"The engine's iteration budget; higher is slower"})}),t(c,{label:"Bubble spread",value:e.bubbleSpread,options:A,testId:"graph-bubble-spread-select",onChange:a=>{e.setBubbleSpread(a)},children:t(l,{children:"How far the layout opens a bubble"})}),e.layoutEngine==="stress"?null:t(U,{label:"Linear layout",checked:e.linearLayout,onChange:a=>{e.setLinearLayout(a)},children:t(l,{children:"Keeps a chain of nodes on one line where it can"})})]})]}),t(I,{children:t(T,{variant:"contained",color:"primary",onClick:s,children:"Close"})})]})}),ge=q;export{f as a,ge as b};
|
|
2
|
+
//# sourceMappingURL=chunk-75WJWJ45.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../node_modules/.pnpm/@jbrowse+bandage-core@12.
|
|
3
|
+
"sources": ["../../node_modules/.pnpm/@jbrowse+bandage-core@12.4.0/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-K5SIJGAE.js", "../../src/GraphGenomeView/components/LabelledSelect.tsx", "../../src/GraphGenomeView/components/GraphSettingsDialog.tsx"],
|
|
4
4
|
"sourcesContent": ["// src/layoutQualities.ts\nvar LAYOUT_QUALITIES = [\n { value: 0, label: \"Fastest\" },\n { value: 1, label: \"Fast\" },\n { value: 2, label: \"Default\" },\n { value: 3, label: \"Fine\" },\n { value: 4, label: \"Best\" }\n];\n\nexport {\n LAYOUT_QUALITIES\n};\n", "import { useId } from 'react'\n\nimport {\n FormControl,\n InputLabel,\n ListItemText,\n MenuItem,\n Select,\n} from '@mui/material'\n\nimport type { SxProps } from '@mui/material'\n\ninterface SelectOption<T extends string> {\n value: T\n label: string\n // an option's tooltip, and the reason under a disabled one, whose tooltip\n // cannot open\n description?: string\n disabled?: boolean\n}\n\n// One dropdown with its label tied to it, so a screen reader names the combobox\nexport default function LabelledSelect<T extends string>({\n label,\n value,\n options,\n testId,\n size,\n sx,\n disabled,\n title,\n shown,\n onChange,\n}: {\n label: string\n value: T\n options: readonly SelectOption<T>[]\n testId?: string\n size?: 'small' | 'medium'\n sx?: SxProps\n disabled?: boolean\n title?: string\n // what the closed select reads, when not the picked option's label\n shown?: string\n onChange: (value: T) => void\n}) {\n const labelId = useId()\n return (\n <FormControl size={size} sx={sx} disabled={disabled} title={title}>\n <InputLabel id={labelId} shrink>\n {label}\n </InputLabel>\n <Select\n labelId={labelId}\n value={value}\n label={label}\n notched\n displayEmpty\n data-testid={testId}\n renderValue={picked =>\n shown ?? options.find(o => o.value === picked)?.label ?? picked\n }\n onChange={e => {\n onChange(e.target.value as T)\n }}\n >\n {options.map(o => (\n <MenuItem\n key={o.value}\n value={o.value}\n disabled={o.disabled}\n title={o.disabled ? undefined : o.description}\n >\n <ListItemText\n primary={o.label}\n secondary={o.disabled ? o.description : undefined}\n />\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n )\n}\n", "import type { ReactNode } from 'react'\n\nimport { BUBBLE_SPREADS } from '@jbrowse/bandage-core/bubbleSpreads'\nimport { EDGE_WIDTHS } from '@jbrowse/bandage-core/edgeWidths'\nimport { LAYOUT_ENGINES } from '@jbrowse/bandage-core/layoutEngines'\nimport { LAYOUT_QUALITIES } from '@jbrowse/bandage-core/layoutQualities'\nimport { NODE_WIDTHS } from '@jbrowse/bandage-core/nodeWidths'\nimport { MAX_PATH_COLORS } from '@jbrowse/bandage-core/pathColors'\nimport { Dialog } from '@jbrowse/core/ui'\nimport {\n Button,\n DialogActions,\n DialogContent,\n FormControlLabel,\n Switch,\n Typography,\n} from '@mui/material'\nimport { observer } from 'mobx-react'\nimport { makeStyles } from 'tss-react/mui'\n\nimport LabelledSelect from './LabelledSelect'\nimport { pickGeneTrack } from '../genes/geneFeatures'\nimport { pickRepeatTrack } from '../repeats/repeatFeatures'\n\nimport type { GraphPaneModel } from '../model'\n\nconst useStyles = makeStyles()({\n section: {\n marginBottom: 24,\n },\n group: {\n marginBottom: 16,\n },\n heading: {\n marginBottom: 8,\n },\n})\n\nfunction Caption({\n warn = false,\n children,\n}: {\n warn?: boolean\n children: ReactNode\n}) {\n return (\n <Typography\n variant=\"caption\"\n component=\"div\"\n color={warn ? 'warning.main' : 'text.secondary'}\n >\n {children}\n </Typography>\n )\n}\n\nfunction Group({ title, children }: { title: string; children: ReactNode }) {\n const { classes } = useStyles()\n return (\n <section className={classes.group}>\n <Typography variant=\"subtitle1\" className={classes.heading}>\n {title}\n </Typography>\n {children}\n </section>\n )\n}\n\nfunction SettingSwitch({\n label,\n checked,\n onChange,\n children,\n}: {\n label: string\n checked: boolean\n onChange: (checked: boolean) => void\n children?: ReactNode\n}) {\n const { classes } = useStyles()\n return (\n <div className={classes.section}>\n <FormControlLabel\n control={\n <Switch\n checked={checked}\n onChange={e => {\n onChange(e.target.checked)\n }}\n />\n }\n label={label}\n />\n {children}\n </div>\n )\n}\n\n// one dropdown setting, at the dialog's width, and its caption\nfunction SettingSelect<T extends string>({\n children,\n ...props\n}: Omit<Parameters<typeof LabelledSelect<T>>[0], 'size' | 'sx'> & {\n children?: ReactNode\n}) {\n const { classes } = useStyles()\n return (\n <div className={classes.section}>\n <LabelledSelect sx={{ minWidth: 200 }} {...props} />\n {children}\n </div>\n )\n}\n\nconst NODE_LIMITS = [5000, 20_000, 50_000, 100_000]\n\n// the presets, with a limit a session states among them\nfunction nodeLimitOptions(current: number) {\n return [...new Set([...NODE_LIMITS, current])]\n .sort((a, b) => a - b)\n .map(limit => ({ value: String(limit), label: limit.toLocaleString() }))\n}\n\ninterface NamedTrack {\n trackId: string\n name: string\n}\n\n// '' leaves the pick to the heuristic, so a session can go back to it\nfunction TrackPickSetting({\n label,\n choices,\n stored,\n auto,\n testId,\n onChange,\n children,\n}: {\n label: string\n choices: NamedTrack[]\n stored: string\n auto: NamedTrack | undefined\n testId: string\n onChange: (trackId: string) => void\n children: ReactNode\n}) {\n return choices.length > 0 ? (\n <SettingSelect\n label={label}\n value={choices.some(t => t.trackId === stored) ? stored : ''}\n options={[\n { value: '', label: `Automatic (${auto?.name ?? 'none'})` },\n ...choices.map(({ trackId, name }) => ({\n value: trackId,\n label: name,\n })),\n ]}\n testId={testId}\n onChange={onChange}\n >\n {children}\n </SettingSelect>\n ) : null\n}\n\n// Toggles the menus already offer (halos, genes, color) stay out of here.\n// `children` is the host's own part of the subgraph group.\nconst GraphSettingsDialog = observer(function GraphSettingsDialog(props: {\n model: GraphPaneModel\n onClose: () => void\n children?: ReactNode\n}) {\n const { model, onClose, children } = props\n const { classes } = useStyles()\n\n return (\n <Dialog open onClose={onClose} title=\"Graph settings\">\n <DialogContent>\n <Group title=\"Subgraph\">\n {children}\n <SettingSelect\n label=\"Node limit\"\n value={String(model.maxGraphNodes)}\n options={nodeLimitOptions(model.maxGraphNodes)}\n testId=\"graph-node-limit-select\"\n onChange={limit => {\n model.setMaxGraphNodes(Number(limit))\n }}\n >\n <Caption>\n The most nodes a layout draws; past it the graph is declined. Walk\n rows take no limit.\n </Caption>\n </SettingSelect>\n </Group>\n\n <Group title=\"Drawing\">\n {model.anchorPaths.length > 1 ? (\n <SettingSelect\n label=\"Reference path\"\n value={model.activeReferencePath ?? ''}\n options={model.anchorPaths.map(({ name }) => ({\n value: name,\n label: name,\n }))}\n testId=\"graph-reference-path-select\"\n onChange={name => {\n model.setReferencePath(name)\n void model.recomputeLayout()\n }}\n >\n <Caption>The path the anchored layouts place x along</Caption>\n </SettingSelect>\n ) : null}\n\n <SettingSelect\n label=\"Node width\"\n value={model.nodeWidth}\n options={NODE_WIDTHS}\n testId=\"graph-node-width-select\"\n onChange={width => {\n model.setNodeWidth(width)\n }}\n >\n <Caption>\n Depth as width. In a cut with walks, depth is how many haplotypes\n carry the node.\n </Caption>\n </SettingSelect>\n\n <SettingSelect\n label=\"Link width\"\n value={model.linkWidth}\n options={EDGE_WIDTHS}\n testId=\"graph-link-width-select\"\n onChange={links => {\n model.setLinkWidth(links)\n }}\n >\n <Caption>\n Walks as width, so a common route reads heavy and a private one\n thin.\n </Caption>\n </SettingSelect>\n\n <SettingSwitch\n label=\"Draw paths\"\n checked={model.drawPaths}\n onChange={draw => {\n model.setLayer('paths', draw)\n }}\n >\n <Caption>\n Color each node by the paths through it, one lane per path\n </Caption>\n {model.drawPaths && !model.effectiveDrawPaths ? (\n <Caption warn>\n {model.pathCount > MAX_PATH_COLORS\n ? `Off: ${model.pathCount.toLocaleString()} paths is past the ${MAX_PATH_COLORS} this can tell apart`\n : 'Off: this graph states no paths'}\n </Caption>\n ) : null}\n </SettingSwitch>\n\n <TrackPickSetting\n label=\"Gene track\"\n choices={model.geneTrackChoices}\n stored={model.geneTrackId}\n auto={pickGeneTrack(model.geneTrackChoices, '')}\n testId=\"graph-gene-track-select\"\n onChange={trackId => {\n model.setGeneTrackId(trackId)\n }}\n >\n <Caption>Where genes on the backbone come from</Caption>\n </TrackPickSetting>\n\n <TrackPickSetting\n label=\"Repeat track\"\n choices={model.repeatTrackChoices}\n stored={model.repeatTrackId}\n auto={pickRepeatTrack(model.repeatTrackChoices, '')}\n testId=\"graph-repeat-track-select\"\n onChange={trackId => {\n model.setRepeatTrackId(trackId)\n }}\n >\n <Caption>\n The tandem repeat annotation walk rows measure and tile by\n </Caption>\n </TrackPickSetting>\n </Group>\n\n <Group title=\"Force-directed layout\">\n {model.hasGraph && !model.usesLayoutEngine ? (\n <div className={classes.section}>\n <Caption warn>\n No effect on the current layout until Layout is Force-directed\n </Caption>\n </div>\n ) : null}\n\n <SettingSelect\n label=\"Engine\"\n value={model.layoutEngine}\n options={LAYOUT_ENGINES}\n testId=\"graph-layout-engine-select\"\n onChange={engine => {\n model.setLayoutEngine(engine)\n }}\n >\n <Caption>\n Stress keeps the reference straight, so a zoom keeps the picture;\n FMMM lets the whole graph settle.\n </Caption>\n </SettingSelect>\n\n <SettingSelect\n label=\"Layout quality\"\n value={String(model.layoutQuality)}\n options={LAYOUT_QUALITIES.map(q => ({\n value: String(q.value),\n label: q.label,\n }))}\n testId=\"graph-layout-quality-select\"\n onChange={quality => {\n model.setLayoutQuality(Number(quality))\n }}\n >\n <Caption>\n The engine's iteration budget; higher is slower\n </Caption>\n </SettingSelect>\n\n <SettingSelect\n label=\"Bubble spread\"\n value={model.bubbleSpread}\n options={BUBBLE_SPREADS}\n testId=\"graph-bubble-spread-select\"\n onChange={spread => {\n model.setBubbleSpread(spread)\n }}\n >\n <Caption>How far the layout opens a bubble</Caption>\n </SettingSelect>\n\n {model.layoutEngine === 'stress' ? null : (\n <SettingSwitch\n label=\"Linear layout\"\n checked={model.linearLayout}\n onChange={linear => {\n model.setLinearLayout(linear)\n }}\n >\n <Caption>Keeps a chain of nodes on one line where it can</Caption>\n </SettingSwitch>\n )}\n </Group>\n </DialogContent>\n\n <DialogActions>\n <Button variant=\"contained\" color=\"primary\" onClick={onClose}>\n Close\n </Button>\n </DialogActions>\n </Dialog>\n )\n})\n\nexport default GraphSettingsDialog\n"],
|
|
5
5
|
"mappings": "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",
|
|
6
6
|
"names": ["LAYOUT_QUALITIES", "LabelledSelect", "label", "value", "options", "testId", "size", "sx", "disabled", "title", "shown", "onChange", "labelId", "useId", "jsxs", "FormControl", "jsx", "InputLabel", "Select", "picked", "o", "e", "MenuItem", "ListItemText", "useStyles", "makeStyles", "Caption", "warn", "children", "jsx", "Typography", "Group", "title", "classes", "jsxs", "SettingSwitch", "label", "checked", "onChange", "FormControlLabel", "Switch", "e", "SettingSelect", "props", "LabelledSelect", "NODE_LIMITS", "nodeLimitOptions", "current", "a", "b", "limit", "TrackPickSetting", "choices", "stored", "auto", "testId", "t", "trackId", "name", "GraphSettingsDialog", "observer", "model", "onClose", "Dialog", "DialogContent", "NODE_WIDTHS", "width", "EDGE_WIDTHS", "links", "draw", "MAX_PATH_COLORS", "pickGeneTrack", "pickRepeatTrack", "LAYOUT_ENGINES", "engine", "LAYOUT_QUALITIES", "q", "quality", "BUBBLE_SPREADS", "spread", "linear", "DialogActions", "Button", "GraphSettingsDialog_default"]
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{G as jn,H as Jn,I as un,J as dn,S as Qn,U as Qt,V as mn,Y as Zn,Z as te,d as $n,e as Kn,f as hn,h as Un,i as Yn,j as qn,k as Vn,l as $t,y as zn}from"./chunk-DKQFTMWL.js";import{a as Bt,g as Xt}from"./chunk-HICKAMKK.js";var Et=2,ae=1.5,Ke=4,ne=12,Ue=64,ee=24,Ye=48,oe="a thread per pass through a node",pn=t=>t.length>1&&t.some(n=>n.mostPasses>1),ce=t=>t*Et+Math.max(0,t-1)*ae,se=t=>t.reduce((n,o)=>n+o,0);function ie(t,n,o){let e=t.map((a,c)=>n[c]>1?ce(a):o*Math.min(1,a)),s=0,r=t.map(a=>{let c=Math.min(1,a),i=Ke*c*s;return s=Math.max(s,c),i});return{widths:e,gaps:r,band:se(e)+se(r)}}var gn=Et+ae;function Kt(t,n,o=t){let{widths:e,gaps:s,band:r}=ie(t,n,Et),a=-r/2;return e.map((c,i)=>{a+=s[i];let f=n[i]>1?Math.max(0,c-ce(o[i])):0,l=a+f/2+Et/2;return a+=c,l})}var nn=t=>ie(t,t,Et).band,en=t=>Math.min(1,Ye/(nn(t)||1)),is=t=>en(t.map(n=>n.mostPasses))<1?`${oe}, thinned to fit`:oe;function Zt(t,n){let o=t.stepOf[n],e=n-t.starts[o];return t.forward[o]?e:t.starts[o+1]-t.starts[o]-1-e}var Nt=(t,n)=>{let o=n.x-t.x,e=n.y-t.y;return Math.sqrt(o*o+e*e)};function Ft(t){let n=new Float64Array(t.length);for(let o=1;o<t.length;o++)n[o]=n[o-1]+Nt(t[o-1],t[o]);return n}function yn(t,n){let o=new Set;return t.map(e=>{let s=new Map;return e.map(r=>r.map(a=>{let c=s.get(a)??0;s.set(a,c+1);let i=n[a],f=!!i?.length&&!o.has(a);return f&&o.add(a),{id:a,visit:c,owned:f,segments:i}}))})}function qe(t,n,o){let e=[];return t.forEach((s,r)=>{let a=0;for(let M of s)for(let{segments:A}of M)a+=A?.length??0;let c=new Float64Array(a),i=new Float64Array(a),f=0,l=0,h=u();function u(){return{walk:r,ids:[],visits:[],forward:[],owned:[],starts:[0]}}let m=()=>{if(h.ids.length){let M=new Int32Array(f-l);for(let A=0;A<h.ids.length;A++)M.fill(A,h.starts[A],h.starts[A+1]);e.push({...h,xs:c.subarray(l,f),ys:i.subarray(l,f),stepOf:M})}h=u(),l=f},w=(M,A,R)=>{let P=R.x-M,k=R.y*n-A;return Math.sqrt(P*P+k*k)};for(let M of s)M.forEach(({id:A,visit:R,owned:P,segments:k},W)=>{if(!k?.length){m();return}let F=k[0],S=k.at(-1),_;if(f>l){let g=c[f-1],E=i[f-1],x=w(g,E,F),C=w(g,E,S);_=x<=C,Math.min(x,C)>o&&m()}else{let g=M[W+1]?.segments,E=x=>g?.length?Math.min(w(x.x,x.y*n,g[0]),w(x.x,x.y*n,g.at(-1))):0;_=E(S)<=E(F)}h.ids.push(A),h.visits.push(R),h.forward.push(_),h.owned.push(P);for(let g=0;g<k.length;g++){let E=k[_?g:k.length-1-g];c[f]=E.x,i[f]=E.y*n,f++}h.starts.push(f-l)}),m()}),e}function xn(t,n,o){let e=[];for(let s=0;s<n.length;s++){if(!n[s])continue;let r=s;for(;r+1<n.length&&n[r+1];)r++;let a=e.at(-1),c=a?a[1]:0,i=s;for(;i>c&&t[s]-t[i-1]<=o;)i--;let f=r;for(;f+1<t.length&&t[f+1]-t[r]<=o;)f++;a&&i<=a[1]+1?a[1]=f:e.push([i,f]),s=r}return e}function Ve(t,n){let o=Ft(t),e=o.at(-1),s=(c,i)=>{let f=t[i],l=t[Math.min(i+1,t.length-1)],h=o[Math.min(i+1,t.length-1)]-o[i],u=h>0?(c-o[i])/h:0;return{x:f.x+(l.x-f.x)*u,y:f.y+(l.y-f.y)*u}},r=0,a=0;return t.map((c,i)=>{let f=Math.max(0,o[i]-n/2),l=Math.min(e,o[i]+n/2);for(;r<t.length-1&&o[r+1]<=f;)r++;for(;a<t.length-1&&o[a+1]<=l;)a++;let h=s(f,r),u=s(l,a),m=Nt(h,u);return m>0?{nx:-(u.y-h.y)/m,ny:(u.x-h.x)/m}:void 0})}function ze(t,n,o){let e=Ft(t),s=t.slice(),r=[];e.forEach((c,i)=>{let f=r.at(-1);(f===void 0||c-e[f]>=n/4)&&r.push(i)}),r.at(-1)!==t.length-1&&r.push(t.length-1);let a=0;for(;a<r.length;){let c=r[a],i=-1;for(let u=a+1;u<r.length&&e[r[u]]-e[c]<=o;u++){let m=r[u];e[m]-e[c]>Math.PI*n&&Nt(t[c],t[m])<=n&&(i=u)}if(i<0){a++;continue}let f=r[i],l=t[c],h=t[f];for(let u=c+1;u<f;u++){let m=(e[u]-e[c])/(e[f]-e[c]);s[u]={...t[u],x:l.x+(h.x-l.x)*m,y:l.y+(h.y-l.y)*m}}a=i}return s}function le(t,n){let o=t.length,e=Ft(t),s=e[o-1],r=new Float64Array(o+1),a=new Float64Array(o+1),c=new Float64Array(o+1);for(let h=0;h<o;h++){let u=t[h],m=(e[Math.min(h+1,o-1)]-e[Math.max(h-1,0)])/2;r[h+1]=r[h]+m,a[h+1]=a[h]+m*u.x,c[h+1]=c[h]+m*u.y}let i=new Array(o),f=0,l=0;for(let h=0;h<o;h++){let u=t[h],m=Math.min(n,e[h],s-e[h]),w=e[h]-m,M=e[h]+m+1e-9*(1+s);for(;f<o&&e[f]<w;)f++;for(;l<o&&e[l]<M;)l++;let A=r[l]-r[f];i[h]=A>0?{x:(a[l]-a[f])/A,y:(c[l]-c[f])/A}:{x:u.x,y:u.y}}return i}function re(t,n){let o=t.length,e=Ft(t),s=e[o-1],r=new Uint8Array(o),a=(f,l)=>{let h=t[f],u=t[f+1];if(!u)return h;let m=e[f+1]-e[f],w=m>0?(l-e[f])/m:0;return{x:h.x+(u.x-h.x)*w,y:h.y+(u.y-h.y)*w}},c=0,i=0;for(let f=0;f<o;f++){if(e[f]<n||s-e[f]<n)continue;for(;c+1<o&&e[c+1]<=e[f]-n;)c++;for(;i+1<o&&e[i+1]<=e[f]+n;)i++;let l=t[f],h=a(c,e[f]-n),u=a(i,e[f]+n),m=Math.abs((u.x-h.x)*(l.y-h.y)-(u.y-h.y)*(l.x-h.x));r[f]=m>0&&Nt(h,u)*Nt(h,l)*Nt(l,u)/(2*m)<n?1:0}return{tight:r,s:e}}function je(t,n){let o=t.slice(),{tight:e,s}=re(o,n),r=xn(s,Array.from(e,a=>a>0),3*n);for(let a=0;a<8&&r.length;a++)r=r.filter(([c,i])=>{let f=o.slice(c,i+1),l=re(f,n);if(!l.tight.includes(1))return!1;let h=tn(l.s,l.tight,n),u=le(f,n);for(let m=0;m<f.length;m++){let w=Math.min(1,3*h[m]);if(w>0){let M=f[m],A=u[m];o[c+m]={x:M.x+(A.x-M.x)*w,y:M.y+(A.y-M.y)*w}}}return!0});return o}function Je(t,n,o,e,s,r){let a=n.length,c=new Float64Array(a),i=0,f=0,l=0,h=0,u=0;for(let m=0;m<a;m++){for(;i<a&&t[i]-t[m]<=r;){let w=o(i),M=n[i];c[i]=w&&M?w.nx*M.nx+w.ny*M.ny:0,l+=c[i],i++}for(;t[m]-t[f]>r;)l-=c[f++];if(Math.abs(l)>1e-9&&(h=l<0?-1:1),!!h)for(;u<=m;u++)s(u,h)}if(u<a){let m=0;for(let w=0;w<a;w++)m+=e(w)?1:-1;for(;u<a;u++)s(u,m<0?-1:1)}}function Qe(t,n,o,e,s=!0){let r=Math.max(o,2*e),a=Math.PI*e,c=s?a+3*e+r/2:r/2,i=new Map,f=new Map,l=[],h=[],u=w=>({normals:new Array(w),shifts:s?new Array(w):[]}),m=(w,M,A,R)=>{let P=i.get(w);P||(P=[],i.set(w,P)),(P[M]??=[])[A]=R};return t.forEach((w,M)=>{let{walk:A,ids:R,visits:P,owned:k,starts:W,xs:F,ys:S,stepOf:_}=w,g=R.length,E=F.length,x=new Array(g);for(let d=0;d<g;d++)k[d]&&(x[d]=u(W[d+1]-W[d]),f.set(R[d],{run:M,step:d,frame:x[d]}),m(R[d],A,P[d],x[d]));let C=new Float64Array(E);for(let d=1;d<E;d++){let I=F[d]-F[d-1],N=S[d]-S[d-1];C[d]=C[d-1]+Math.sqrt(I*I+N*N)}let J=C[E-1],D=new Int32Array(g).fill(-1),B=new Int32Array(g),Y=new Array(g);for(let d=0;d<g;d++){let I=k[d]?void 0:f.get(R[d]);I&&(D[d]=I.run,B[d]=I.step,Y[d]=I.frame)}let et=new Int32Array(g),ct=new Int32Array(g);for(let d=0;d+1<g;d++){let N=D[d]>=0&&D[d+1]===D[d]?B[d+1]-B[d]:0;et[d+1]=et[d]+(N===1?1:0),ct[d+1]=ct[d]+(N===-1?1:0)}let tt=new Array(g),b=0,L=0;for(let d=0;d<g;d++){if(!s){tt[d]=!k[d];continue}let I=C[W[d]]-c,N=C[W[d+1]-1]+c;for(;C[b]<I;)b++;for(;L+1<E&&C[L+1]<=N;)L++;let j=_[Math.max(0,b-1)],st=_[Math.min(E-1,L+1)],H=st-j,it=et[st]-et[j],gt=ct[st]-ct[j];tt[d]=!k[d]&&I>=0&&N<=J&&H>0&&(it===H||gt===H)}for(let d=0;d<g;d++){if(k[d])continue;let I=Y[d];x[d]=!s&&tt[d]?I:tt[d]?{normals:I.normals,shifts:I.shifts}:u(I.normals.length),m(R[d],A,P[d],x[d])}h.push(x);let q=new Array(E);for(let d=0;d<E;d++)q[d]=!tt[_[d]];for(let[d,I]of xn(C,q,c)){let N=[];for(let H=d;H<=I;H++)N.push({x:F[H],y:S[H]});let j=s?je(le(ze(N,e/2,a),e/2),e/2):N,st=Ve(j,r);Je(Ft(j),st,H=>{let it=_[d+H];return(k[it]?x[it]:Y[it])?.normals[Zt(w,d+H)]},H=>w.forward[_[d+H]],(H,it)=>{let gt=d+H,Lt=_[gt];if(tt[Lt])return;let Ht=Zt(w,gt),Rt=st[H];x[Lt].normals[Ht]=Rt&&(it>0?Rt:{nx:-Rt.nx,ny:-Rt.ny}),s&&(x[Lt].shifts[Ht]={dx:j[H].x-N[H].x,dy:(j[H].y-N[H].y)/n})},r)}if(!s){l.push(C);return}let ot=new Float64Array(E),G=0,V=0;for(let d=0;d<E;d++){let I=x[_[d]].shifts[Zt(w,d)],N=F[d]+(I?.dx??0),j=S[d]+(I?.dy??0)*n;ot[d]=d?ot[d-1]+Math.sqrt((N-G)**2+(j-V)**2):0,G=N,V=j}l.push(ot)}),{frames:i,arcs:l,stepFrames:h}}function fe(t,n,o,e){let s=new Array(n.length),r=[],a=0,c=0;for(let i=0;i<n.length;i++){for(;c<n.length&&t[c]-t[i]<=o;){for(;r.length>a&&e*n[r.at(-1)]<=e*n[c];)r.pop();r.push(c++)}for(;t[i]-t[r[a]]>o;)a++;s[i]=n[r[a]]}return s}function tn(t,n,o,e=()=>!0){let s=n.length,r=new Float64Array(s+1),a=new Float64Array(s+1);for(let l=0;l<s;l++){let h=e(n[l])?s>1?(t[Math.min(l+1,s-1)]-t[Math.max(l-1,0)])/2:1:0;r[l+1]=r[l]+h,a[l+1]=a[l]+h*n[l]}let c=new Float64Array(s),i=0,f=0;for(let l=0;l<s;l++){for(;t[l]-t[i]>o;)i++;for(;f<s&&t[f]-t[l]<=o;)f++;let h=r[f]-r[i];c[l]=h>0?(a[f]-a[i])/h:n[l]}return c}var Ze=[0];function to(t){for(let n of t.values())if(n>1)return!0;return!1}function no(t,n,o,e,s){if(!to(n))return{span:n,nodeThreads:new Map,threadPasses:new Map,threadAt:new Map,linkThreads:new Map};let r=new Map,a=[],c=[],i=[],f=[],l=[],h=[],u=[];for(let S of t){let _=[],g=[];for(let b of S){let L=r.get(b);L===void 0&&(L=a.length,r.set(b,L),a.push(b),c.push(0),i.push(0)),g.push(L);let q=o[b],ot=q?.[Math.floor(q.length/2)];_.push(ot?{x:ot.x,y:ot.y*e}:_.at(-1)??{x:0,y:0})}let E=Ft(_),x=S.map(b=>n.get(b)??1),C=fe(E,x,s/2,1),J=g.map(b=>++i[b]),D=S.length,B=new Int32Array(D),Y=-1;for(let b=0;b<D;b++)Y=x[b]===C[b]?b:Y,B[b]=Y;let et=new Int32Array(D);Y=-1;for(let b=D-1;b>=0;b--)Y=x[b]===C[b]?b:Y,et[b]=Y;let ct=new Array(D),tt=new Array(D).fill(NaN);for(let b=0;b<D;b++){let L=B[b],q=et[b],ot=L<0?q:q<0||E[b]-E[L]<=E[q]-E[b]?L:q,G=V=>Math.min(J[V],C[b])-1;if(ct[b]=G(ot),x[b]===1&&L>=0&&q>=0&&G(q)!==G(L)){let V=(E[b]-E[L])/(E[q]-E[L]||1);tt[b]=G(L)+(G(q)-G(L))*V}c[g[b]]=Math.max(c[g[b]],C[b])}f.push(g),l.push(J),h.push(ct),u.push(tt)}let m=[],w=[],M=(S,_)=>{let g=c[S],E=m[S]??=new Set;for(let x=0;x<g;x++)for(let C of[_-x,_+x])if(C>=0&&C<g&&!E.has(C))return C;return _},A=[];f.forEach((S,_)=>{S.forEach((g,E)=>{if(c[g]>1){let x=u[_][E],C=M(g,Number.isNaN(x)?h[_][E]:Math.round(x));m[g].add(C),(w[g]??=[])[l[_][E]]=C,Number.isNaN(x)||((A[g]??=[])[C]=x)}})});let R=new Map,P=new Map,k=new Map,W=new Map;a.forEach((S,_)=>{A[_]&&W.set(S,A[_]),R.set(S,c[_]),P.set(S,m[_]?[...m[_]].sort((E,x)=>E-x):Ze);let g=[];w[_]?.forEach((E,x)=>{g[E]=x-1}),k.set(S,g)});let F=new Map;return f.forEach((S,_)=>{let g=l[_];for(let E=1;E<S.length;E++){let x=S[E-1],C=S[E],J=[w[x]?.[g[E-1]]??0,w[C]?.[g[E]]??0],D=F.get(a[x]);D||(D=new Map,F.set(a[x],D));let B=D.get(a[C]);B?B.some(([Y,et])=>Y===J[0]&&et===J[1])||B.push(J):D.set(a[C],[J])}}),{span:R,nodeThreads:P,threadPasses:k,threadAt:W,linkThreads:F}}function eo(t,n,o,{reach:e,taper:s}){let r=new Map;return t.forEach((a,c)=>{let i=n[c],f=a.ids.map((l,h)=>{let u=a.starts[h+1]-a.starts[h],m=Math.floor(u/2);return i[a.starts[h]+(a.forward[h]?m:u-1-m)]});for(let[l,h]of xn(f,a.owned,e/2+s/2)){let u=f.slice(l,h+1),m=a.ids.slice(l,h+1),w=o.map(M=>{let A=m.map(R=>M.get(R)??0);return A.every(R=>R===A[0])?{slot:A,held:A}:{slot:tn(u,fe(u,A,e/2,1),s/2),held:tn(u,A,s/2,R=>R>0)}});m.forEach((M,A)=>{a.owned[l+A]&&r.set(M,{slot:w.map(R=>R.slot[A]),held:w.map(R=>R.held[A])})})}}),r}function oo(t,n,o,e,s,r,a){let c=Kt(s,s),i=new Map,f=l=>{let h=i.get(l);if(!h){let u=e.get(l);h=u?Kt(u.slot,s,u.held):c,i.set(l,h)}return h};t.forEach((l,h)=>{let{walk:u,ids:m,visits:w,starts:M}=l,{threadPasses:A,threadAt:R}=r[u],P=new Float64Array(l.xs.length);m.forEach((W,F)=>{let S=Math.max(0,A.get(W)?.indexOf(w[F])??0),_=R.get(W)?.[S]??S;P.fill(f(W)[u]+_*gn,M[F],M[F+1])});let k=tn(o[h],P,a);n[h].forEach((W,F)=>{let S=M[F],_=M[F+1],g=!0;for(let x=S+1;g&&x<_;x++)g=Math.abs(k[x]-k[S])<1e-9;if(g){W.offset=k[S];return}let E=new Array(_-S);for(let x=S;x<_;x++)E[Zt(l,x)]=k[x];W.offsets=E})})}function he(t,n,o,e,s=yn(t.map(r=>r.route),n)){let r=pn(t),a=t.map(M=>M.mostPasses),c=Ue*e,i=qe(s,o,ne*e),f=nn(a)*(r?en(a):1)*e,l=Qe(i,o,ne*e,f,r),h=r?t.map(M=>no(M.route,M.passes,n,o,c)):void 0,u=h?eo(i,l.arcs,h.map(M=>M.span),{reach:c,taper:ee*e}):void 0;u&&h&&oo(i,l.stepFrames,l.arcs,u,a,h,ee/2*e);let m={dx:0,dy:0},w=new Set;for(let M of l.frames.values())for(let{shifts:A}of M.flat())if(!w.has(A)){w.add(A);for(let R of A)m.dx=Math.max(m.dx,Math.abs(R?.dx??0)),m.dy=Math.max(m.dy,Math.abs(R?.dy??0))}return{lines:l,threads:h,spans:u,furthestShift:m}}function U(t,n,o,e){return(e<<24|o<<16|n<<8|t)>>>0}function wn(t){return t&255}function Mn(t){return t>>>8&255}function An(t){return t>>>16&255}function En(t){return t>>>24&255}function ue(t){return`rgba(${wn(t)},${Mn(t)},${An(t)},${En(t)/255})`}function fs(t,n){return`rgba(${Math.round(t[0]*255)},${Math.round(t[1]*255)},${Math.round(t[2]*255)},${n})`}function vt(t,n){return U(wn(t),Mn(t),An(t),Math.round(En(t)*n))}function hs(t,n){let o=Math.max(0,1-1/n),e=s=>Math.round(s+(255-s)*o);return U(e(wn(t)),e(Mn(t)),e(An(t)),En(t))}var de=300,Ut=.7,Yt=.5;function so(t){return`hsl(${t}, ${Ut*100}%, ${Yt*100}%)`}function qt(t){return Math.max(0,Math.min(1,t))*de}function vn(t,n){return qt((t-n.start)/(n.end-n.start))}var ro=30;function ds({start:t,bp:n,reversed:o},e){let s=vn(t,e),r=vn(t+n,e);if(r-s<1)return[(s+r)/2];let a=Math.ceil((r-s)/ro);return Array.from({length:a+1},(c,i)=>vn(t+n*(o?a-i:i)/a,e))}var ao=Array.from({length:7},(t,n)=>({offset:n/6,color:so(n/6*de)})),ms=`linear-gradient(to right, ${ao.map(t=>`${t.color} ${t.offset*100}%`).join(", ")})`;var co=$t();function me(t,n,o,e,s,r,a=!1){return co(t,[n,o.scaleX,o.scaleY,e,r,a,s],()=>{let c=new Map;for(let i=0;i<n.edges.length;i++){let f=e?.get(i),l=zn(t,n.edges[i],o,f,f&&r?.[i],a);l&&c.set(i,l)}return c})}var io=4;function lo(t){let n=new Map;for(let o of t.edges)Bt(n,o.from,o.to),Bt(n,o.to,o.from);return n}function fo({nodeId:t,nodeById:n,neighbors:o}){let e=new Set([t]),s=[t],r=1/0,a=-1/0;for(let c=0;c<io&&s.length>0;c++){let i=[];for(let f of s){let l=o.get(f);if(l){for(let h of l)if(!e.has(h)){e.add(h);let u=n.get(h);u&&Xt(u)?(r=Math.min(r,u.stable.start+u.length),a=Math.max(a,u.stable.start)):i.push(h)}}}s=i}return r===1/0?void 0:{start:Math.min(r,a),end:Math.max(r,a)}}function ho({nodeId:t,nodeById:n,neighbors:o}){let e=n.get(t);return e===void 0?void 0:Xt(e)?{start:e.stable.start,end:e.stable.start+e.length}:fo({nodeId:t,nodeById:n,neighbors:o})}function pe(t){let n=new Map(t.nodes.map(s=>[s.id,s])),o=lo(t),e=new Map;for(let s of t.nodes){let r=ho({nodeId:s.id,nodeById:n,neighbors:o});r&&e.set(s.id,(r.start+r.end)/2)}return e}var uo=U(119,119,119,217),ge=U(136,136,136,217),mo=U(24,24,28,240),ye=2.2,Te=U(160,160,160,255),Vt=.18,po=.45,Ns=ue(vt(Te,Vt)),go=11,yo=1.2,xo=1e-6,wo=7,Mo=3,Ao=3,Eo=1.5,xe=3,vo=.5,_o=.45,_n=12,bo=1e-6,pt=new Float64Array(64),_t=new Float64Array(64),bt=new Float64Array(64);function Ro(t,n,o,e){let s=t.length*_n+1;pt.length<s&&(pt=new Float64Array(s),_t=new Float64Array(s),bt=new Float64Array(s));let r=t[t.length-1];pt[0]=r.x1,_t[0]=r.y1,bt[0]=0;let a=1,c=0;for(let i=t.length-1;i>=0&&c<e;i--){let f=t[i];for(let l=1;l<=_n&&c<e;l++){let h=1-(l/_n)**2,u=1-h,m=u*u*u,w=3*u*u*h,M=3*u*h*h,A=h*h*h,R=m*f.x0+w*f.cx0+M*f.cx1+A*f.x1,P=m*f.y0+w*f.cy0+M*f.cy1+A*f.y1;c+=Math.hypot(R-pt[a-1],(P-_t[a-1])*o)*n,pt[a]=R,_t[a]=P,bt[a]=c,a++}}return a}function we(t,n){let o=1;for(;o<t-1&&bt[o]<n;)o++;let e=bt[o-1],s=bt[o],r=s>e?Math.min(1,Math.max(0,(n-e)/(s-e))):0;return{x:pt[o-1]+(pt[o]-pt[o-1])*r,y:_t[o-1]+(_t[o]-_t[o-1])*r}}function So({curves:t,edgeHalfWidth:n,nodeHalfWidth:o,scale:e,yToX:s,color:r,fromSegments:a,toSegments:c}){let i=wo+Mo*n,f=Ro(t,e,s,o+xe*i),l=bt[f-1],h=l<bo,u=Math.min(o,l),m=h?Math.min(1,Vn(a,e,e*s)/i):1;if(h?m<vo:l<xe*i)return;let w=we(f,u),M=we(f,u+i*m),A=w.x-M.x,R=(w.y-M.y)*s,P=t[t.length-1];return{x:w.x,y:w.y,angle:Math.hypot(A,R)>0?Math.atan2(R,A):Wo(P,s,Oo(P,c)),length:i*m,halfWidth:(Ao+Eo*n)*m,color:r}}var Me=[[0,0]],Co=[0],Ae={dx:0,dy:0};function Oe(t,n,o){let e=s=>Math.hypot(s.x-t.x,(s.y-t.y)*o);return e(n[0])<e(n.at(-1))}function To(t,n,o,e,s){return e?Un(t).from==="start":Oe({x:o.x0,y:o.y0},n,s)}function Oo(t,n){if(n.length<2)return;let o=n[0],e=n[n.length-1];return Math.hypot(t.x1-o.x,t.y1-o.y)<=Math.hypot(t.x1-e.x,t.y1-e.y)?{from:o,to:n[1]}:{from:e,to:n[n.length-2]}}function Ee(t,n){if(!t||!n)return;let o=n.x-t.x,e=n.y-t.y,s=Math.hypot(o,e);return s>0?{nx:-e/s,ny:o/s}:void 0}var ke=.1,ko=1/Math.sqrt(ke);function ve(t,n=1){let o=n===1?t:t.map(e=>({x:e.x,y:e.y*n}));return o.map((e,s)=>{let r=Ee(o[s-1],e),a=Ee(e,o[s+1]);if(r&&a){let c=(r.nx+a.nx)/2,i=(r.ny+a.ny)/2,f=r.nx*c+r.ny*i;return f>ke?{nx:c/f,ny:i/f}:{nx:c,ny:i}}return r??a??{nx:0,ny:0}})}function _e(t,n,o,e=1){let s=new Array(t.length);for(let r=0;r<t.length;r++){let a=typeof o=="number"?o:o[r];s[r]={x:t[r].x+n[r].nx*a,y:t[r].y+n[r].ny*a/e}}return s}function Rn(t,n,o){let e=(1-Math.abs(2*o-1))*n,s=e*(1-Math.abs(t/60%2-1)),r=o-e/2,a=0,c=0,i=0;return t<60?(a=e,c=s):t<120?(a=s,c=e):t<180?(c=e,i=s):t<240?(c=s,i=e):t<300?(a=s,i=e):(a=e,i=s),[a+r,c+r,i+r]}function on(t,n,o,e=1){let[s,r,a]=Rn(t,n,o);return U(Math.round(s*255),Math.round(r*255),Math.round(a*255),Math.round(e*255))}var Io=[[68,1,84],[59,82,139],[33,145,140],[94,201,98],[253,231,37]],Po=[[237,137,44],[158,42,122]],No=[[220,50,50],[50,120,220]];function bn(t,n){let o=Math.max(0,Math.min(1,n))*(t.length-1),e=Math.min(t.length-2,Math.floor(o)),s=o-e,r=t[e],a=t[e+1];return U(Math.round(r[0]+(a[0]-r[0])*s),Math.round(r[1]+(a[1]-r[1])*s),Math.round(r[2]+(a[2]-r[2])*s),255)}function Fo(t,n){return on(jn(t),un,dn,n)}var Ie=[60,65,72],Sn=U(...Ie,255),Fs=`rgb(${Ie.join(", ")})`;function Lo(t,n){let o=n.midpoints.get(t.id);return Xt(t)&&o!==void 0?(o-n.start)/n.span:void 0}function Ls(t,n){let o=pe(t);if(n&&n.end>n.start)return{start:n.start,span:n.end-n.start,midpoints:o};let e=1/0,s=-1/0;for(let r of o.values())e=Math.min(e,r),s=Math.max(s,r);return{start:e===1/0?0:e,span:s>e?s-e:1,midpoints:o}}function Ho(t,n){let o=1/0,e=-1/0,s=1/0,r=-1/0,a=0;for(let c of t.nodes)c.stable!==void 0&&c.stable.rank>a&&(a=c.stable.rank),c.depth<o&&(o=c.depth),c.depth>e&&(e=c.depth),c.length<s&&(s=c.length),c.length>r&&(r=c.length);return{minDepth:o,maxDepth:e,minLength:s,maxLength:r,maxRank:a,nodeCount:t.nodes.length,referenceRamp:n}}function Do(t,n,o,e){switch(o){case"random":return Fo(t.id,1);case"depth":return bn(Io,e.maxDepth>e.minDepth?(t.depth-e.minDepth)/(e.maxDepth-e.minDepth):.5);case"node-length":return bn(No,e.maxLength>e.minLength?(t.length-e.minLength)/(e.maxLength-e.minLength):.5);case"stable-rank":return t.stable===void 0?U(160,160,160,255):t.stable.rank===0?U(52,152,219,255):bn(Po,e.maxRank>1?(t.stable.rank-1)/(e.maxRank-1):0);case"reference-position":{let s=e.referenceRamp;if(s===void 0)return U(160,160,160,255);let r=Lo(t,s);return r===void 0?Sn:on(qt(r),Ut,Yt)}case"grey":return U(160,160,160,255);case"rainbow":{let s=e.nodeCount>1?n/e.nodeCount*360:0;return on(s,.75,.5)}default:return U(52,152,219,255)}}function Wo(t,n=1,o){let e=[[t.cx1,t.cy1],[t.cx0,t.cy0],[t.x0,t.y0]];for(let[s,r]of e){let a=t.x1-s,c=(t.y1-r)*n;if(Math.hypot(a,c)>0)return Math.atan2(c,a)}return o?Math.atan2((o.to.y-o.from.y)*n,o.to.x-o.from.x):0}function Go(t,n){let o=!1;for(let e=0;e<t.length-1&&!o;e++){let s=t[e],r=t[e+1];o=Math.max(s.x,r.x)>=n.minX&&Math.min(s.x,r.x)<=n.maxX&&Math.max(s.y,r.y)>=n.minY&&Math.min(s.y,r.y)<=n.maxY}return o}function be(t,n,o=0,e=0){for(let s of t){let r=Math.min(s.x0,s.cx0,s.cx1,s.x1),a=Math.max(s.x0,s.cx0,s.cx1,s.x1),c=Math.min(s.y0,s.cy0,s.cy1,s.y1),i=Math.max(s.y0,s.cy0,s.cy1,s.y1);if(a>=n.minX-o&&r<=n.maxX+o&&i>=n.minY-e&&c<=n.maxY+e)return!0}return!1}var Re=new WeakMap;function Bo(t){let n=Re.get(t);if(!n){let o=[],e=new Map,s=t.paths??[];for(let r=0;r<s.length;r++)o.push(on(Jn(r,s.length),un,dn,.85)),e.has(s[r].name)||e.set(s[r].name,r);n={pathColorByIndex:o,pathIndexByName:e},Re.set(t,n)}return n}var Se=new WeakMap,Xo=new Map;function $o(t){let n=Se.get(t);if(!n){n=new Map;for(let[o,e]of(t.paths??[]).entries())for(let s of new Set(e.nodeIds))Bt(n,s,o);Se.set(t,n)}return n}var Ko=$t(),Uo=$t(),Ce=new WeakMap;function Yo(t){let n=Ce.get(t);if(!n){n=new Map;for(let{from:o,to:e}of t.edges){let s=n.get(o);s||(s=new Set,n.set(o,s)),s.add(e)}Ce.set(t,n)}return n}function Hs(t){let{nodePositions:n,graph:o,nodeById:e,colorScheme:s,contigThickness:r,connectorThickness:a,drawPaths:c,nodeWidth:i="uniform",edgeWidth:f="uniform",highlight:l,axis:h,linearLayout:u,viewportBounds:m,referenceRamp:w,deletions:M,deletionRoutes:A,stranded:R,hiddenEdges:P,version:k=0}=t,W=Qn(o,i),F=f==="walks"?Zn(o):0,S=h.scaleX,_=1/Math.max(S,xo),g=Yn(h),E=me(n,o,h,M,k,A,R),x=[],C=new Map,J=[],D=new Map,B=[],Y=new Map,et=Ho(o,w),ct=new Map;if(s==="rainbow")for(let p=0;p<o.nodes.length;p++)ct.set(o.nodes[p].id,p);let tt=o.paths?.length??0,{pathColorByIndex:b,pathIndexByName:L}=Bo(o),q=p=>b[L.get(p)??-1]??ge,ot=c&&tt>1?$o(o):Xo,G=l?.walks??[],V=pn(G),d=G.map(p=>p.mostPasses),I=V?en(d):1,N=l&&G.length>1?Ko(l,[n,k,h.scaleX,h.scaleY],()=>he(G,n,g,_,Uo(l,[n,k],()=>yn(G.map(p=>p.route),n)))):void 0,j=N?.lines,st=N?.threads,H=N?.spans,it=V?Kt(d,d):[],gt=new Map,Lt=p=>{let y=gt.get(p);if(!y){let v=H?.get(p);y=v?Kt(v.slot,d,v.held):it,gt.set(p,y)}return y},Ht=(p,y,v,T)=>V?(Lt(p)[v]+T*gn)*I:(v-(G.length-1)/2)*y,Rt=(p,y,v)=>{let T=p?.offsets?.[y]??p?.offset;return T===void 0?v:T*I},Pn=p=>V?Et/2*I:p/2,Nn=new Map,Fn=new WeakMap,Ln=(p,y,v)=>st?.[p]?.threadPasses.get(y)?.[v]??0,rn=(p,y)=>{let v=Nn.get(p);return v||(v=ve(y,g),Nn.set(p,v)),v},We=(p,y,v)=>{if(!v)return rn(p,y);let T=Fn.get(v.normals);return T||(T=rn(p,y).map((O,X)=>v.normals[X]??O),Fn.set(v.normals,T)),T},Hn=new Map,an=p=>{let y=Hn.get(p);if(y===void 0){let v=e.get(p);y=mn(v?Qt(v,r,i,W):r,G.length),Hn.set(p,y)}return y},Dn=(p,y,v,T,O,X)=>{let Q=T?0:v.length-1,z=y?.[O]?.[Ln(O,p,X)],rt=z?.offsets?.[Q]??z?.offset;return{normal:z?.normals[Q]??rn(p,v)[Q]??{nx:0,ny:0},shift:z?.shifts[Q]??Ae,offset:rt===void 0?Ht(p,an(p),O,X):rt*I}},Ge=(p,y)=>{if(!m)return!0;let v=V?nn(d)*I:(G.length-1)/2*an(y),T=ko*v*_;return be(p,m,T+(N?.furthestShift.dx??0),T/g+(N?.furthestShift.dy??0))},Be=(p,y,v)=>{let T=st?.[p]?.linkThreads;if(!T?.size)return Me;let O=T.get(y)?.get(v),X=Yo(o).get(v)?.has(y)?void 0:T.get(v)?.get(y);if(!X)return O??Me;let Q=X.map(([z,rt])=>[rt,z]);return O?[...O,...Q]:Q},cn=(p,y,v)=>G[p]?.passColors.get(y)?.[st?.[p]?.threadPasses.get(y)?.[v]??0],Wn=new WeakMap,Xe=(p,y)=>{if(!y||!V)return p;let v=Wn.get(y.shifts);if(!v){let{shifts:T}=y;v=p.map((O,X)=>{let{dx:Q,dy:z}=T[X]??Ae;return{...O,x:O.x+Q,y:O.y+z}}),Wn.set(y.shifts,v)}return v},$e=S>(u?1:_o);for(let p=0;p<o.edges.length;p++){let y=o.edges[p],v=n[y.from],T=n[y.to],O=E.get(p);if(!v?.length||!T?.length||!O||P?.has(p))continue;let X=y.pathIds?.length??0,z=M?.get(p)!==void 0,rt=l?.edgeIndexes.has(p)??!1,Dt=a/2*(z?ye:1),St=te(X,F,f),Ct=a/2*(z?f==="walks"&&F>0?Math.max(1,St):ye:St),lt=c&&X>0,Tt=z?mo:uo,yt=!l||rt?Tt:vt(Tt,Vt),ut=e.get(y.to),Wt=(ut?Qt(ut,r,i,W):r)/2,$=K=>!m||be(K,m),zt=K=>$n(K,go/S,g,m),jt=(K,Z,nt)=>{if(!z){B.push({curves:K,thickness:Z,color:nt});return}for(let mt of zt(K))B.push({curves:mt.curves,thickness:Z,color:nt})},xt=(K,Z,nt,mt,kt,Mt,It,at,Gn)=>{B.push({curves:K,thickness:Z,color:nt,walk:mt,pass:kt,normal:Mt,offsetX:It,endNormal:at,endOffsetX:Gn})},Ot=K=>{let Z=$e?So({curves:K,edgeHalfWidth:z||lt?a/2:Ct,nodeHalfWidth:Wt,scale:S,yToX:g,color:yt,fromSegments:v,toSegments:T}):void 0;Z&&J.push(Z)},dt=B.length,Gt=J.length,wt=l?.walks.length&&rt&&!lt?l.walks:void 0;if(wt&&!Ge(O,y.from))continue;if(wt){let K=To(y,v,O[0],R,g),Z=O.at(-1),nt=Oe({x:Z.x1,y:Z.y1},T,g),mt=wt.length===1,kt=Pn(an(y.from)),Mt=j?.frames.get(y.from),It=j?.frames.get(y.to);for(let at=0;at<wt.length;at++)if(wt[at].edgeIndexes.has(p))for(let[ln,Bn]of Be(at,y.from,y.to)){let ht=Dn(y.from,Mt,v,K,at,ln),Pt=V?Dn(y.to,It,T,nt,at,Bn):ht,At=mt?0:ht.offset*_,fn=V?Pt.offset*_:At,Xn=V?Kn(O,ht.shift.dx+ht.normal.nx*At,ht.shift.dy+ht.normal.ny*At/g,Pt.shift.dx+Pt.normal.nx*fn,Pt.shift.dy+Pt.normal.ny*fn/g):At===0?O:hn(O,ht.normal.nx*At,ht.normal.ny*At/g);$(Xn)&&xt(Xn,kt,cn(at,y.from,ln)??cn(at,y.to,Bn)??Tt,at,ln,ht.normal,At,Pt.normal,fn)}B.length>dt&&Ot(O)}else if(!lt)$(O)&&(jt(O,Ct,yt),Ot(O));else{let K=qn(v,T,X,h),Z=Math.floor((X-1)/2);for(let nt=0;nt<X;nt++){let{x:mt,y:kt}=K[nt],Mt=mt===0&&kt===0?O:hn(O,mt,kt);if(!$(Mt))continue;let It=q(y.pathIds[nt]);jt(Mt,Dt,l&&(l.walks.length?!l.names.has(y.pathIds[nt]):!rt)?vt(It,Vt):It),nt===Z&&Ot(Mt)}}let Jt=B.length-dt;Jt>0&&Y.set(p,{start:dt,count:Jt});let ft=J.length-Gt;ft>0&&D.set(p,{start:Gt,count:ft})}for(let[p,y]of Object.entries(n)){let v=e.get(p);if(!v||m&&!Go(y,m))continue;let T=l!==void 0&&!l.nodeIds.has(p),O=T?Te:Do(v,ct.get(p)??0,s,et),X=T?vt(O,Vt):v.moved?vt(O,po):O,Q=Qt(v,r,i,W),z=Q/2,rt=x.length,Dt=ot.get(p),St=Q/tt,Ct=y.length>=2,lt=l?.walks.length&&!T&&!Dt?.length?l.walks:void 0;if(Ct&<){let yt=mn(Q,lt.length),ut=Pn(yt),Wt=j?.frames.get(p);for(let $=0;$<lt.length;$++){let zt=lt[$].colors.get(p);if(zt===void 0)continue;let jt=st?.[$]?.nodeThreads.get(p)??Co;for(let xt of jt){let Ot=cn($,p,xt)??zt;if(lt.length===1){x.push({points:y,thickness:ut,color:Ot,walk:$,pass:xt});continue}let dt=Wt?.[$]?.[Ln($,p,xt)],Gt=We(p,y,dt),wt=Xe(y,dt),Jt=Ht(p,yt,$,xt),ft=dt?.offsets?.map(Z=>Z*I*_),K=ft?ft[Math.floor(ft.length/2)]:Rt(dt,0,Jt)*_;x.push({points:_e(wt,Gt,ft??K,g),thickness:ut,color:Ot,walk:$,pass:xt,normals:Gt,offsetX:K,...ft&&{offsets:ft}})}}}else if(Ct&&Dt?.length&&St>=yo){let yt=ve(y,g);for(let ut of Dt){let Wt=(ut-(tt-1)/2)*St*_,$=b[ut]??ge;x.push({points:_e(y,yt,Wt,g),thickness:St/2,color:T?vt($,Vt):$})}}else Ct&&x.push({points:y,thickness:z,color:X});let Tt=x.length-rt;Tt>0&&C.set(p,{start:rt,count:Tt})}return{nodeStrokes:x,nodeStrokeRuns:C,arrows:J,arrowRuns:D,edgeCurves:B,edgeCurveRuns:Y}}var Fe=[{value:"progress",label:"Progress along the walk"},{value:"walk",label:"One colour for the walk"},{value:"reference",label:"Reference position"}],On=[{value:"grey",label:"Grey to black",ends:["#a3a3a3","#151515"]},{value:"blue",label:"Cyan to navy",ends:["#6ee0f0","#0b2c7a"]},{value:"red",label:"Yellow to red",ends:["#ffd24a","#b3121b"]},{value:"purple",label:"Pink to plum",ends:["#f5a3d8","#5e1a6e"]},{value:"green",label:"Lime to forest",ends:["#b6e36c","#0b5d3b"]},{value:"orange",label:"Peach to rust",ends:["#ffc285","#8f3a00"]},{value:"rainbow",label:"Rainbow"}],Cn=["blue","red","purple","green"],qo=t=>Fe.some(n=>n.value===t),Vo=t=>On.some(n=>n.value===t);function zo(t,n,o,e=!0){let{field:s,scheme:r}=t.color??{},a=qo(s)?s:e?"progress":"walk",c=n?"grey":Cn[o%Cn.length],i=Vo(r)?r==="rainbow"&&a!=="reference"?c:r:c,f=Math.floor(o/Cn.length)%Pe.length;return a==="walk"&&i===c&&f>0?{field:a,scheme:i,shade:Pe[f]}:e||a==="walk"?{field:a,scheme:i}:{field:a,scheme:i,darkest:jo}}var jo=.55,kn=.5,Pe=[kn,.85,.2],Jo=.08,Ne=({field:t,scheme:n})=>t!=="walk"&&n!=="rainbow";function Qo(t){let n=new Map;for(let e of t)Ne(e)&&n.set(e.scheme,(n.get(e.scheme)??0)+1);let o=new Map;return t.map(e=>{let s=Ne(e)?n.get(e.scheme):1;if(s<2)return e;let r=o.get(e.scheme)??0;o.set(e.scheme,r+1);let a=Jo/2;return{...e,stretch:[r/s+(r>0?a:0),(r+1)/s-(r<s-1?a:0)]}})}var Le=({stretch:t},n)=>t?t[0]+(t[1]-t[0])*n:n,Zo=t=>t<=.04045?t/12.92:((t+.055)/1.055)**2.4,ts=t=>t<=.0031308?t*12.92:1.055*t**(1/2.4)-.055;function ns(t){let[n,o,e]=[1,3,5].map(c=>Zo(Number.parseInt(t.slice(c,c+2),16)/255)),s=Math.cbrt(.4122214708*n+.5363325363*o+.0514459929*e),r=Math.cbrt(.2119034982*n+.6806995451*o+.1073969566*e),a=Math.cbrt(.0883024619*n+.2817188376*o+.6299787005*e);return[.2104542553*s+.793617785*r-.0040720468*a,1.9779984951*s-2.428592205*r+.4505937099*a,.0259040371*s+.7827717662*r-.808675766*a]}function es([t,n,o]){let e=(t+.3963377774*n+.2158037573*o)**3,s=(t-.1055613458*n-.0638541728*o)**3,r=(t-.0894841775*n-1.291485548*o)**3;return[4.0767416621*e-3.3077115913*s+.2309699292*r,-1.2684380046*e+2.6097574011*s-.3413193965*r,-.0041960863*e-.7034186147*s+1.707614701*r].map(a=>ts(Math.max(0,Math.min(1,a)))*255)}var Tn=new Map;function os(t){if(!Tn.has(t)){let n=On.find(o=>o.value===t);Tn.set(t,n&&"ends"in n?n.ends.map(ns):void 0)}return Tn.get(t)}function In(t,n,o=0){let e=Math.max(0,Math.min(1,n)),s=os(t);if(!s)return Rn(qt(e),Ut,Yt).map(l=>l*255);let[r,a]=s,c=r[0],i=a[0],f=i<o&&c>o?(c-o)/(c-i):1;return es(r.map((l,h)=>l+(a[h]-l)*e*f))}function He(t,n,o){let[e,s,r]=In(t,n,o).map(Math.round);return`rgb(${e}, ${s}, ${r})`}function sn(t,n,o){let[e,s,r]=In(t,n,o).map(Math.round);return U(e,s,r,255)}function ss(t,n){let{field:o,scheme:e,darkest:s,shade:r=kn}=t;return o==="walk"?sn(e,r):n===void 0?De:sn(e,Le(t,n),s)}var De=Sn;function rs(t){let{field:n,scheme:o,darkest:e,shade:s=kn}=t,r=(a,c)=>({offset:a,color:He(o,c,e),abgr:sn(o,c,e)});return n==="walk"?[r(0,s)]:Array.from({length:7},(a,c)=>r(c/6,Le(t,c/6)))}export{lo as a,ho as b,Et as c,pn as d,is as e,U as f,ue as g,fs as h,vt as i,hs as j,so as k,ds as l,ao as m,ms as n,me as o,Ns as p,Rn as q,Fs as r,Lo as s,Ls as t,Ho as u,Do as v,Hs as w,Fe as x,On as y,zo as z,Qo as A,ss as B,De as C,rs as D};
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import{G as jn,H as Jn,I as un,J as dn,S as Qn,U as Qt,V as mn,Y as Zn,Z as te,d as $n,e as Kn,f as hn,h as Un,i as Yn,j as qn,k as Vn,l as $t,y as zn}from"./chunk-CI6VQ2KV.js";import{a as Bt,g as Xt}from"./chunk-PVRRW4PM.js";var Et=2,ae=1.5,Ke=4,ne=12,Ue=64,ee=24,Ye=48,oe="a thread per pass through a node",pn=t=>t.length>1&&t.some(n=>n.mostPasses>1),ce=t=>t*Et+Math.max(0,t-1)*ae,se=t=>t.reduce((n,o)=>n+o,0);function ie(t,n,o){let e=t.map((a,c)=>n[c]>1?ce(a):o*Math.min(1,a)),s=0,r=t.map(a=>{let c=Math.min(1,a),i=Ke*c*s;return s=Math.max(s,c),i});return{widths:e,gaps:r,band:se(e)+se(r)}}var gn=Et+ae;function Kt(t,n,o=t){let{widths:e,gaps:s,band:r}=ie(t,n,Et),a=-r/2;return e.map((c,i)=>{a+=s[i];let f=n[i]>1?Math.max(0,c-ce(o[i])):0,l=a+f/2+Et/2;return a+=c,l})}var nn=t=>ie(t,t,Et).band,en=t=>Math.min(1,Ye/(nn(t)||1)),is=t=>en(t.map(n=>n.mostPasses))<1?`${oe}, thinned to fit`:oe;function Zt(t,n){let o=t.stepOf[n],e=n-t.starts[o];return t.forward[o]?e:t.starts[o+1]-t.starts[o]-1-e}var Nt=(t,n)=>{let o=n.x-t.x,e=n.y-t.y;return Math.sqrt(o*o+e*e)};function Ft(t){let n=new Float64Array(t.length);for(let o=1;o<t.length;o++)n[o]=n[o-1]+Nt(t[o-1],t[o]);return n}function yn(t,n){let o=new Set;return t.map(e=>{let s=new Map;return e.map(r=>r.map(a=>{let c=s.get(a)??0;s.set(a,c+1);let i=n[a],f=!!i?.length&&!o.has(a);return f&&o.add(a),{id:a,visit:c,owned:f,segments:i}}))})}function qe(t,n,o){let e=[];return t.forEach((s,r)=>{let a=0;for(let M of s)for(let{segments:A}of M)a+=A?.length??0;let c=new Float64Array(a),i=new Float64Array(a),f=0,l=0,h=u();function u(){return{walk:r,ids:[],visits:[],forward:[],owned:[],starts:[0]}}let m=()=>{if(h.ids.length){let M=new Int32Array(f-l);for(let A=0;A<h.ids.length;A++)M.fill(A,h.starts[A],h.starts[A+1]);e.push({...h,xs:c.subarray(l,f),ys:i.subarray(l,f),stepOf:M})}h=u(),l=f},w=(M,A,R)=>{let P=R.x-M,k=R.y*n-A;return Math.sqrt(P*P+k*k)};for(let M of s)M.forEach(({id:A,visit:R,owned:P,segments:k},W)=>{if(!k?.length){m();return}let F=k[0],S=k.at(-1),_;if(f>l){let g=c[f-1],E=i[f-1],x=w(g,E,F),C=w(g,E,S);_=x<=C,Math.min(x,C)>o&&m()}else{let g=M[W+1]?.segments,E=x=>g?.length?Math.min(w(x.x,x.y*n,g[0]),w(x.x,x.y*n,g.at(-1))):0;_=E(S)<=E(F)}h.ids.push(A),h.visits.push(R),h.forward.push(_),h.owned.push(P);for(let g=0;g<k.length;g++){let E=k[_?g:k.length-1-g];c[f]=E.x,i[f]=E.y*n,f++}h.starts.push(f-l)}),m()}),e}function xn(t,n,o){let e=[];for(let s=0;s<n.length;s++){if(!n[s])continue;let r=s;for(;r+1<n.length&&n[r+1];)r++;let a=e.at(-1),c=a?a[1]:0,i=s;for(;i>c&&t[s]-t[i-1]<=o;)i--;let f=r;for(;f+1<t.length&&t[f+1]-t[r]<=o;)f++;a&&i<=a[1]+1?a[1]=f:e.push([i,f]),s=r}return e}function Ve(t,n){let o=Ft(t),e=o.at(-1),s=(c,i)=>{let f=t[i],l=t[Math.min(i+1,t.length-1)],h=o[Math.min(i+1,t.length-1)]-o[i],u=h>0?(c-o[i])/h:0;return{x:f.x+(l.x-f.x)*u,y:f.y+(l.y-f.y)*u}},r=0,a=0;return t.map((c,i)=>{let f=Math.max(0,o[i]-n/2),l=Math.min(e,o[i]+n/2);for(;r<t.length-1&&o[r+1]<=f;)r++;for(;a<t.length-1&&o[a+1]<=l;)a++;let h=s(f,r),u=s(l,a),m=Nt(h,u);return m>0?{nx:-(u.y-h.y)/m,ny:(u.x-h.x)/m}:void 0})}function ze(t,n,o){let e=Ft(t),s=t.slice(),r=[];e.forEach((c,i)=>{let f=r.at(-1);(f===void 0||c-e[f]>=n/4)&&r.push(i)}),r.at(-1)!==t.length-1&&r.push(t.length-1);let a=0;for(;a<r.length;){let c=r[a],i=-1;for(let u=a+1;u<r.length&&e[r[u]]-e[c]<=o;u++){let m=r[u];e[m]-e[c]>Math.PI*n&&Nt(t[c],t[m])<=n&&(i=u)}if(i<0){a++;continue}let f=r[i],l=t[c],h=t[f];for(let u=c+1;u<f;u++){let m=(e[u]-e[c])/(e[f]-e[c]);s[u]={...t[u],x:l.x+(h.x-l.x)*m,y:l.y+(h.y-l.y)*m}}a=i}return s}function le(t,n){let o=t.length,e=Ft(t),s=e[o-1],r=new Float64Array(o+1),a=new Float64Array(o+1),c=new Float64Array(o+1);for(let h=0;h<o;h++){let u=t[h],m=(e[Math.min(h+1,o-1)]-e[Math.max(h-1,0)])/2;r[h+1]=r[h]+m,a[h+1]=a[h]+m*u.x,c[h+1]=c[h]+m*u.y}let i=new Array(o),f=0,l=0;for(let h=0;h<o;h++){let u=t[h],m=Math.min(n,e[h],s-e[h]),w=e[h]-m,M=e[h]+m+1e-9*(1+s);for(;f<o&&e[f]<w;)f++;for(;l<o&&e[l]<M;)l++;let A=r[l]-r[f];i[h]=A>0?{x:(a[l]-a[f])/A,y:(c[l]-c[f])/A}:{x:u.x,y:u.y}}return i}function re(t,n){let o=t.length,e=Ft(t),s=e[o-1],r=new Uint8Array(o),a=(f,l)=>{let h=t[f],u=t[f+1];if(!u)return h;let m=e[f+1]-e[f],w=m>0?(l-e[f])/m:0;return{x:h.x+(u.x-h.x)*w,y:h.y+(u.y-h.y)*w}},c=0,i=0;for(let f=0;f<o;f++){if(e[f]<n||s-e[f]<n)continue;for(;c+1<o&&e[c+1]<=e[f]-n;)c++;for(;i+1<o&&e[i+1]<=e[f]+n;)i++;let l=t[f],h=a(c,e[f]-n),u=a(i,e[f]+n),m=Math.abs((u.x-h.x)*(l.y-h.y)-(u.y-h.y)*(l.x-h.x));r[f]=m>0&&Nt(h,u)*Nt(h,l)*Nt(l,u)/(2*m)<n?1:0}return{tight:r,s:e}}function je(t,n){let o=t.slice(),{tight:e,s}=re(o,n),r=xn(s,Array.from(e,a=>a>0),3*n);for(let a=0;a<8&&r.length;a++)r=r.filter(([c,i])=>{let f=o.slice(c,i+1),l=re(f,n);if(!l.tight.includes(1))return!1;let h=tn(l.s,l.tight,n),u=le(f,n);for(let m=0;m<f.length;m++){let w=Math.min(1,3*h[m]);if(w>0){let M=f[m],A=u[m];o[c+m]={x:M.x+(A.x-M.x)*w,y:M.y+(A.y-M.y)*w}}}return!0});return o}function Je(t,n,o,e,s,r){let a=n.length,c=new Float64Array(a),i=0,f=0,l=0,h=0,u=0;for(let m=0;m<a;m++){for(;i<a&&t[i]-t[m]<=r;){let w=o(i),M=n[i];c[i]=w&&M?w.nx*M.nx+w.ny*M.ny:0,l+=c[i],i++}for(;t[m]-t[f]>r;)l-=c[f++];if(Math.abs(l)>1e-9&&(h=l<0?-1:1),!!h)for(;u<=m;u++)s(u,h)}if(u<a){let m=0;for(let w=0;w<a;w++)m+=e(w)?1:-1;for(;u<a;u++)s(u,m<0?-1:1)}}function Qe(t,n,o,e,s=!0){let r=Math.max(o,2*e),a=Math.PI*e,c=s?a+3*e+r/2:r/2,i=new Map,f=new Map,l=[],h=[],u=w=>({normals:new Array(w),shifts:s?new Array(w):[]}),m=(w,M,A,R)=>{let P=i.get(w);P||(P=[],i.set(w,P)),(P[M]??=[])[A]=R};return t.forEach((w,M)=>{let{walk:A,ids:R,visits:P,owned:k,starts:W,xs:F,ys:S,stepOf:_}=w,g=R.length,E=F.length,x=new Array(g);for(let d=0;d<g;d++)k[d]&&(x[d]=u(W[d+1]-W[d]),f.set(R[d],{run:M,step:d,frame:x[d]}),m(R[d],A,P[d],x[d]));let C=new Float64Array(E);for(let d=1;d<E;d++){let I=F[d]-F[d-1],N=S[d]-S[d-1];C[d]=C[d-1]+Math.sqrt(I*I+N*N)}let J=C[E-1],D=new Int32Array(g).fill(-1),B=new Int32Array(g),Y=new Array(g);for(let d=0;d<g;d++){let I=k[d]?void 0:f.get(R[d]);I&&(D[d]=I.run,B[d]=I.step,Y[d]=I.frame)}let et=new Int32Array(g),ct=new Int32Array(g);for(let d=0;d+1<g;d++){let N=D[d]>=0&&D[d+1]===D[d]?B[d+1]-B[d]:0;et[d+1]=et[d]+(N===1?1:0),ct[d+1]=ct[d]+(N===-1?1:0)}let tt=new Array(g),b=0,L=0;for(let d=0;d<g;d++){if(!s){tt[d]=!k[d];continue}let I=C[W[d]]-c,N=C[W[d+1]-1]+c;for(;C[b]<I;)b++;for(;L+1<E&&C[L+1]<=N;)L++;let j=_[Math.max(0,b-1)],st=_[Math.min(E-1,L+1)],H=st-j,it=et[st]-et[j],gt=ct[st]-ct[j];tt[d]=!k[d]&&I>=0&&N<=J&&H>0&&(it===H||gt===H)}for(let d=0;d<g;d++){if(k[d])continue;let I=Y[d];x[d]=!s&&tt[d]?I:tt[d]?{normals:I.normals,shifts:I.shifts}:u(I.normals.length),m(R[d],A,P[d],x[d])}h.push(x);let q=new Array(E);for(let d=0;d<E;d++)q[d]=!tt[_[d]];for(let[d,I]of xn(C,q,c)){let N=[];for(let H=d;H<=I;H++)N.push({x:F[H],y:S[H]});let j=s?je(le(ze(N,e/2,a),e/2),e/2):N,st=Ve(j,r);Je(Ft(j),st,H=>{let it=_[d+H];return(k[it]?x[it]:Y[it])?.normals[Zt(w,d+H)]},H=>w.forward[_[d+H]],(H,it)=>{let gt=d+H,Lt=_[gt];if(tt[Lt])return;let Ht=Zt(w,gt),Rt=st[H];x[Lt].normals[Ht]=Rt&&(it>0?Rt:{nx:-Rt.nx,ny:-Rt.ny}),s&&(x[Lt].shifts[Ht]={dx:j[H].x-N[H].x,dy:(j[H].y-N[H].y)/n})},r)}if(!s){l.push(C);return}let ot=new Float64Array(E),G=0,V=0;for(let d=0;d<E;d++){let I=x[_[d]].shifts[Zt(w,d)],N=F[d]+(I?.dx??0),j=S[d]+(I?.dy??0)*n;ot[d]=d?ot[d-1]+Math.sqrt((N-G)**2+(j-V)**2):0,G=N,V=j}l.push(ot)}),{frames:i,arcs:l,stepFrames:h}}function fe(t,n,o,e){let s=new Array(n.length),r=[],a=0,c=0;for(let i=0;i<n.length;i++){for(;c<n.length&&t[c]-t[i]<=o;){for(;r.length>a&&e*n[r.at(-1)]<=e*n[c];)r.pop();r.push(c++)}for(;t[i]-t[r[a]]>o;)a++;s[i]=n[r[a]]}return s}function tn(t,n,o,e=()=>!0){let s=n.length,r=new Float64Array(s+1),a=new Float64Array(s+1);for(let l=0;l<s;l++){let h=e(n[l])?s>1?(t[Math.min(l+1,s-1)]-t[Math.max(l-1,0)])/2:1:0;r[l+1]=r[l]+h,a[l+1]=a[l]+h*n[l]}let c=new Float64Array(s),i=0,f=0;for(let l=0;l<s;l++){for(;t[l]-t[i]>o;)i++;for(;f<s&&t[f]-t[l]<=o;)f++;let h=r[f]-r[i];c[l]=h>0?(a[f]-a[i])/h:n[l]}return c}var Ze=[0];function to(t){for(let n of t.values())if(n>1)return!0;return!1}function no(t,n,o,e,s){if(!to(n))return{span:n,nodeThreads:new Map,threadPasses:new Map,threadAt:new Map,linkThreads:new Map};let r=new Map,a=[],c=[],i=[],f=[],l=[],h=[],u=[];for(let S of t){let _=[],g=[];for(let b of S){let L=r.get(b);L===void 0&&(L=a.length,r.set(b,L),a.push(b),c.push(0),i.push(0)),g.push(L);let q=o[b],ot=q?.[Math.floor(q.length/2)];_.push(ot?{x:ot.x,y:ot.y*e}:_.at(-1)??{x:0,y:0})}let E=Ft(_),x=S.map(b=>n.get(b)??1),C=fe(E,x,s/2,1),J=g.map(b=>++i[b]),D=S.length,B=new Int32Array(D),Y=-1;for(let b=0;b<D;b++)Y=x[b]===C[b]?b:Y,B[b]=Y;let et=new Int32Array(D);Y=-1;for(let b=D-1;b>=0;b--)Y=x[b]===C[b]?b:Y,et[b]=Y;let ct=new Array(D),tt=new Array(D).fill(NaN);for(let b=0;b<D;b++){let L=B[b],q=et[b],ot=L<0?q:q<0||E[b]-E[L]<=E[q]-E[b]?L:q,G=V=>Math.min(J[V],C[b])-1;if(ct[b]=G(ot),x[b]===1&&L>=0&&q>=0&&G(q)!==G(L)){let V=(E[b]-E[L])/(E[q]-E[L]||1);tt[b]=G(L)+(G(q)-G(L))*V}c[g[b]]=Math.max(c[g[b]],C[b])}f.push(g),l.push(J),h.push(ct),u.push(tt)}let m=[],w=[],M=(S,_)=>{let g=c[S],E=m[S]??=new Set;for(let x=0;x<g;x++)for(let C of[_-x,_+x])if(C>=0&&C<g&&!E.has(C))return C;return _},A=[];f.forEach((S,_)=>{S.forEach((g,E)=>{if(c[g]>1){let x=u[_][E],C=M(g,Number.isNaN(x)?h[_][E]:Math.round(x));m[g].add(C),(w[g]??=[])[l[_][E]]=C,Number.isNaN(x)||((A[g]??=[])[C]=x)}})});let R=new Map,P=new Map,k=new Map,W=new Map;a.forEach((S,_)=>{A[_]&&W.set(S,A[_]),R.set(S,c[_]),P.set(S,m[_]?[...m[_]].sort((E,x)=>E-x):Ze);let g=[];w[_]?.forEach((E,x)=>{g[E]=x-1}),k.set(S,g)});let F=new Map;return f.forEach((S,_)=>{let g=l[_];for(let E=1;E<S.length;E++){let x=S[E-1],C=S[E],J=[w[x]?.[g[E-1]]??0,w[C]?.[g[E]]??0],D=F.get(a[x]);D||(D=new Map,F.set(a[x],D));let B=D.get(a[C]);B?B.some(([Y,et])=>Y===J[0]&&et===J[1])||B.push(J):D.set(a[C],[J])}}),{span:R,nodeThreads:P,threadPasses:k,threadAt:W,linkThreads:F}}function eo(t,n,o,{reach:e,taper:s}){let r=new Map;return t.forEach((a,c)=>{let i=n[c],f=a.ids.map((l,h)=>{let u=a.starts[h+1]-a.starts[h],m=Math.floor(u/2);return i[a.starts[h]+(a.forward[h]?m:u-1-m)]});for(let[l,h]of xn(f,a.owned,e/2+s/2)){let u=f.slice(l,h+1),m=a.ids.slice(l,h+1),w=o.map(M=>{let A=m.map(R=>M.get(R)??0);return A.every(R=>R===A[0])?{slot:A,held:A}:{slot:tn(u,fe(u,A,e/2,1),s/2),held:tn(u,A,s/2,R=>R>0)}});m.forEach((M,A)=>{a.owned[l+A]&&r.set(M,{slot:w.map(R=>R.slot[A]),held:w.map(R=>R.held[A])})})}}),r}function oo(t,n,o,e,s,r,a){let c=Kt(s,s),i=new Map,f=l=>{let h=i.get(l);if(!h){let u=e.get(l);h=u?Kt(u.slot,s,u.held):c,i.set(l,h)}return h};t.forEach((l,h)=>{let{walk:u,ids:m,visits:w,starts:M}=l,{threadPasses:A,threadAt:R}=r[u],P=new Float64Array(l.xs.length);m.forEach((W,F)=>{let S=Math.max(0,A.get(W)?.indexOf(w[F])??0),_=R.get(W)?.[S]??S;P.fill(f(W)[u]+_*gn,M[F],M[F+1])});let k=tn(o[h],P,a);n[h].forEach((W,F)=>{let S=M[F],_=M[F+1],g=!0;for(let x=S+1;g&&x<_;x++)g=Math.abs(k[x]-k[S])<1e-9;if(g){W.offset=k[S];return}let E=new Array(_-S);for(let x=S;x<_;x++)E[Zt(l,x)]=k[x];W.offsets=E})})}function he(t,n,o,e,s=yn(t.map(r=>r.route),n)){let r=pn(t),a=t.map(M=>M.mostPasses),c=Ue*e,i=qe(s,o,ne*e),f=nn(a)*(r?en(a):1)*e,l=Qe(i,o,ne*e,f,r),h=r?t.map(M=>no(M.route,M.passes,n,o,c)):void 0,u=h?eo(i,l.arcs,h.map(M=>M.span),{reach:c,taper:ee*e}):void 0;u&&h&&oo(i,l.stepFrames,l.arcs,u,a,h,ee/2*e);let m={dx:0,dy:0},w=new Set;for(let M of l.frames.values())for(let{shifts:A}of M.flat())if(!w.has(A)){w.add(A);for(let R of A)m.dx=Math.max(m.dx,Math.abs(R?.dx??0)),m.dy=Math.max(m.dy,Math.abs(R?.dy??0))}return{lines:l,threads:h,spans:u,furthestShift:m}}function U(t,n,o,e){return(e<<24|o<<16|n<<8|t)>>>0}function wn(t){return t&255}function Mn(t){return t>>>8&255}function An(t){return t>>>16&255}function En(t){return t>>>24&255}function ue(t){return`rgba(${wn(t)},${Mn(t)},${An(t)},${En(t)/255})`}function fs(t,n){return`rgba(${Math.round(t[0]*255)},${Math.round(t[1]*255)},${Math.round(t[2]*255)},${n})`}function vt(t,n){return U(wn(t),Mn(t),An(t),Math.round(En(t)*n))}function hs(t,n){let o=Math.max(0,1-1/n),e=s=>Math.round(s+(255-s)*o);return U(e(wn(t)),e(Mn(t)),e(An(t)),En(t))}var de=300,Ut=.7,Yt=.5;function so(t){return`hsl(${t}, ${Ut*100}%, ${Yt*100}%)`}function qt(t){return Math.max(0,Math.min(1,t))*de}function vn(t,n){return qt((t-n.start)/(n.end-n.start))}var ro=30;function ds({start:t,bp:n,reversed:o},e){let s=vn(t,e),r=vn(t+n,e);if(r-s<1)return[(s+r)/2];let a=Math.ceil((r-s)/ro);return Array.from({length:a+1},(c,i)=>vn(t+n*(o?a-i:i)/a,e))}var ao=Array.from({length:7},(t,n)=>({offset:n/6,color:so(n/6*de)})),ms=`linear-gradient(to right, ${ao.map(t=>`${t.color} ${t.offset*100}%`).join(", ")})`;var co=$t();function me(t,n,o,e,s,r,a=!1){return co(t,[n,o.scaleX,o.scaleY,e,r,a,s],()=>{let c=new Map;for(let i=0;i<n.edges.length;i++){let f=e?.get(i),l=zn(t,n.edges[i],o,f,f&&r?.[i],a);l&&c.set(i,l)}return c})}var io=4;function lo(t){let n=new Map;for(let o of t.edges)Bt(n,o.from,o.to),Bt(n,o.to,o.from);return n}function fo({nodeId:t,nodeById:n,neighbors:o}){let e=new Set([t]),s=[t],r=1/0,a=-1/0;for(let c=0;c<io&&s.length>0;c++){let i=[];for(let f of s){let l=o.get(f);if(l){for(let h of l)if(!e.has(h)){e.add(h);let u=n.get(h);u&&Xt(u)?(r=Math.min(r,u.stable.start+u.length),a=Math.max(a,u.stable.start)):i.push(h)}}}s=i}return r===1/0?void 0:{start:Math.min(r,a),end:Math.max(r,a)}}function ho({nodeId:t,nodeById:n,neighbors:o}){let e=n.get(t);return e===void 0?void 0:Xt(e)?{start:e.stable.start,end:e.stable.start+e.length}:fo({nodeId:t,nodeById:n,neighbors:o})}function pe(t){let n=new Map(t.nodes.map(s=>[s.id,s])),o=lo(t),e=new Map;for(let s of t.nodes){let r=ho({nodeId:s.id,nodeById:n,neighbors:o});r&&e.set(s.id,(r.start+r.end)/2)}return e}var uo=U(119,119,119,217),ge=U(136,136,136,217),mo=U(24,24,28,240),ye=2.2,Te=U(160,160,160,255),Vt=.18,po=.45,Ns=ue(vt(Te,Vt)),go=11,yo=1.2,xo=1e-6,wo=7,Mo=3,Ao=3,Eo=1.5,xe=3,vo=.5,_o=.45,_n=12,bo=1e-6,pt=new Float64Array(64),_t=new Float64Array(64),bt=new Float64Array(64);function Ro(t,n,o,e){let s=t.length*_n+1;pt.length<s&&(pt=new Float64Array(s),_t=new Float64Array(s),bt=new Float64Array(s));let r=t[t.length-1];pt[0]=r.x1,_t[0]=r.y1,bt[0]=0;let a=1,c=0;for(let i=t.length-1;i>=0&&c<e;i--){let f=t[i];for(let l=1;l<=_n&&c<e;l++){let h=1-(l/_n)**2,u=1-h,m=u*u*u,w=3*u*u*h,M=3*u*h*h,A=h*h*h,R=m*f.x0+w*f.cx0+M*f.cx1+A*f.x1,P=m*f.y0+w*f.cy0+M*f.cy1+A*f.y1;c+=Math.hypot(R-pt[a-1],(P-_t[a-1])*o)*n,pt[a]=R,_t[a]=P,bt[a]=c,a++}}return a}function we(t,n){let o=1;for(;o<t-1&&bt[o]<n;)o++;let e=bt[o-1],s=bt[o],r=s>e?Math.min(1,Math.max(0,(n-e)/(s-e))):0;return{x:pt[o-1]+(pt[o]-pt[o-1])*r,y:_t[o-1]+(_t[o]-_t[o-1])*r}}function So({curves:t,edgeHalfWidth:n,nodeHalfWidth:o,scale:e,yToX:s,color:r,fromSegments:a,toSegments:c}){let i=wo+Mo*n,f=Ro(t,e,s,o+xe*i),l=bt[f-1],h=l<bo,u=Math.min(o,l),m=h?Math.min(1,Vn(a,e,e*s)/i):1;if(h?m<vo:l<xe*i)return;let w=we(f,u),M=we(f,u+i*m),A=w.x-M.x,R=(w.y-M.y)*s,P=t[t.length-1];return{x:w.x,y:w.y,angle:Math.hypot(A,R)>0?Math.atan2(R,A):Wo(P,s,Oo(P,c)),length:i*m,halfWidth:(Ao+Eo*n)*m,color:r}}var Me=[[0,0]],Co=[0],Ae={dx:0,dy:0};function Oe(t,n,o){let e=s=>Math.hypot(s.x-t.x,(s.y-t.y)*o);return e(n[0])<e(n.at(-1))}function To(t,n,o,e,s){return e?Un(t).from==="start":Oe({x:o.x0,y:o.y0},n,s)}function Oo(t,n){if(n.length<2)return;let o=n[0],e=n[n.length-1];return Math.hypot(t.x1-o.x,t.y1-o.y)<=Math.hypot(t.x1-e.x,t.y1-e.y)?{from:o,to:n[1]}:{from:e,to:n[n.length-2]}}function Ee(t,n){if(!t||!n)return;let o=n.x-t.x,e=n.y-t.y,s=Math.hypot(o,e);return s>0?{nx:-e/s,ny:o/s}:void 0}var ke=.1,ko=1/Math.sqrt(ke);function ve(t,n=1){let o=n===1?t:t.map(e=>({x:e.x,y:e.y*n}));return o.map((e,s)=>{let r=Ee(o[s-1],e),a=Ee(e,o[s+1]);if(r&&a){let c=(r.nx+a.nx)/2,i=(r.ny+a.ny)/2,f=r.nx*c+r.ny*i;return f>ke?{nx:c/f,ny:i/f}:{nx:c,ny:i}}return r??a??{nx:0,ny:0}})}function _e(t,n,o,e=1){let s=new Array(t.length);for(let r=0;r<t.length;r++){let a=typeof o=="number"?o:o[r];s[r]={x:t[r].x+n[r].nx*a,y:t[r].y+n[r].ny*a/e}}return s}function Rn(t,n,o){let e=(1-Math.abs(2*o-1))*n,s=e*(1-Math.abs(t/60%2-1)),r=o-e/2,a=0,c=0,i=0;return t<60?(a=e,c=s):t<120?(a=s,c=e):t<180?(c=e,i=s):t<240?(c=s,i=e):t<300?(a=s,i=e):(a=e,i=s),[a+r,c+r,i+r]}function on(t,n,o,e=1){let[s,r,a]=Rn(t,n,o);return U(Math.round(s*255),Math.round(r*255),Math.round(a*255),Math.round(e*255))}var Io=[[68,1,84],[59,82,139],[33,145,140],[94,201,98],[253,231,37]],Po=[[237,137,44],[158,42,122]],No=[[220,50,50],[50,120,220]];function bn(t,n){let o=Math.max(0,Math.min(1,n))*(t.length-1),e=Math.min(t.length-2,Math.floor(o)),s=o-e,r=t[e],a=t[e+1];return U(Math.round(r[0]+(a[0]-r[0])*s),Math.round(r[1]+(a[1]-r[1])*s),Math.round(r[2]+(a[2]-r[2])*s),255)}function Fo(t,n){return on(jn(t),un,dn,n)}var Ie=[60,65,72],Sn=U(...Ie,255),Fs=`rgb(${Ie.join(", ")})`;function Lo(t,n){let o=n.midpoints.get(t.id);return Xt(t)&&o!==void 0?(o-n.start)/n.span:void 0}function Ls(t,n){let o=pe(t);if(n&&n.end>n.start)return{start:n.start,span:n.end-n.start,midpoints:o};let e=1/0,s=-1/0;for(let r of o.values())e=Math.min(e,r),s=Math.max(s,r);return{start:e===1/0?0:e,span:s>e?s-e:1,midpoints:o}}function Ho(t,n){let o=1/0,e=-1/0,s=1/0,r=-1/0,a=0;for(let c of t.nodes)c.stable!==void 0&&c.stable.rank>a&&(a=c.stable.rank),c.depth<o&&(o=c.depth),c.depth>e&&(e=c.depth),c.length<s&&(s=c.length),c.length>r&&(r=c.length);return{minDepth:o,maxDepth:e,minLength:s,maxLength:r,maxRank:a,nodeCount:t.nodes.length,referenceRamp:n}}function Do(t,n,o,e){switch(o){case"random":return Fo(t.id,1);case"depth":return bn(Io,e.maxDepth>e.minDepth?(t.depth-e.minDepth)/(e.maxDepth-e.minDepth):.5);case"node-length":return bn(No,e.maxLength>e.minLength?(t.length-e.minLength)/(e.maxLength-e.minLength):.5);case"stable-rank":return t.stable===void 0?U(160,160,160,255):t.stable.rank===0?U(52,152,219,255):bn(Po,e.maxRank>1?(t.stable.rank-1)/(e.maxRank-1):0);case"reference-position":{let s=e.referenceRamp;if(s===void 0)return U(160,160,160,255);let r=Lo(t,s);return r===void 0?Sn:on(qt(r),Ut,Yt)}case"grey":return U(160,160,160,255);case"rainbow":{let s=e.nodeCount>1?n/e.nodeCount*360:0;return on(s,.75,.5)}default:return U(52,152,219,255)}}function Wo(t,n=1,o){let e=[[t.cx1,t.cy1],[t.cx0,t.cy0],[t.x0,t.y0]];for(let[s,r]of e){let a=t.x1-s,c=(t.y1-r)*n;if(Math.hypot(a,c)>0)return Math.atan2(c,a)}return o?Math.atan2((o.to.y-o.from.y)*n,o.to.x-o.from.x):0}function Go(t,n){let o=!1;for(let e=0;e<t.length-1&&!o;e++){let s=t[e],r=t[e+1];o=Math.max(s.x,r.x)>=n.minX&&Math.min(s.x,r.x)<=n.maxX&&Math.max(s.y,r.y)>=n.minY&&Math.min(s.y,r.y)<=n.maxY}return o}function be(t,n,o=0,e=0){for(let s of t){let r=Math.min(s.x0,s.cx0,s.cx1,s.x1),a=Math.max(s.x0,s.cx0,s.cx1,s.x1),c=Math.min(s.y0,s.cy0,s.cy1,s.y1),i=Math.max(s.y0,s.cy0,s.cy1,s.y1);if(a>=n.minX-o&&r<=n.maxX+o&&i>=n.minY-e&&c<=n.maxY+e)return!0}return!1}var Re=new WeakMap;function Bo(t){let n=Re.get(t);if(!n){let o=[],e=new Map,s=t.paths??[];for(let r=0;r<s.length;r++)o.push(on(Jn(r,s.length),un,dn,.85)),e.has(s[r].name)||e.set(s[r].name,r);n={pathColorByIndex:o,pathIndexByName:e},Re.set(t,n)}return n}var Se=new WeakMap,Xo=new Map;function $o(t){let n=Se.get(t);if(!n){n=new Map;for(let[o,e]of(t.paths??[]).entries())for(let s of new Set(e.nodeIds))Bt(n,s,o);Se.set(t,n)}return n}var Ko=$t(),Uo=$t(),Ce=new WeakMap;function Yo(t){let n=Ce.get(t);if(!n){n=new Map;for(let{from:o,to:e}of t.edges){let s=n.get(o);s||(s=new Set,n.set(o,s)),s.add(e)}Ce.set(t,n)}return n}function Hs(t){let{nodePositions:n,graph:o,nodeById:e,colorScheme:s,contigThickness:r,connectorThickness:a,drawPaths:c,nodeWidth:i="uniform",edgeWidth:f="uniform",highlight:l,axis:h,linearLayout:u,viewportBounds:m,referenceRamp:w,deletions:M,deletionRoutes:A,stranded:R,hiddenEdges:P,version:k=0}=t,W=Qn(o,i),F=f==="walks"?Zn(o):0,S=h.scaleX,_=1/Math.max(S,xo),g=Yn(h),E=me(n,o,h,M,k,A,R),x=[],C=new Map,J=[],D=new Map,B=[],Y=new Map,et=Ho(o,w),ct=new Map;if(s==="rainbow")for(let p=0;p<o.nodes.length;p++)ct.set(o.nodes[p].id,p);let tt=o.paths?.length??0,{pathColorByIndex:b,pathIndexByName:L}=Bo(o),q=p=>b[L.get(p)??-1]??ge,ot=c&&tt>1?$o(o):Xo,G=l?.walks??[],V=pn(G),d=G.map(p=>p.mostPasses),I=V?en(d):1,N=l&&G.length>1?Ko(l,[n,k,h.scaleX,h.scaleY],()=>he(G,n,g,_,Uo(l,[n,k],()=>yn(G.map(p=>p.route),n)))):void 0,j=N?.lines,st=N?.threads,H=N?.spans,it=V?Kt(d,d):[],gt=new Map,Lt=p=>{let y=gt.get(p);if(!y){let v=H?.get(p);y=v?Kt(v.slot,d,v.held):it,gt.set(p,y)}return y},Ht=(p,y,v,T)=>V?(Lt(p)[v]+T*gn)*I:(v-(G.length-1)/2)*y,Rt=(p,y,v)=>{let T=p?.offsets?.[y]??p?.offset;return T===void 0?v:T*I},Pn=p=>V?Et/2*I:p/2,Nn=new Map,Fn=new WeakMap,Ln=(p,y,v)=>st?.[p]?.threadPasses.get(y)?.[v]??0,rn=(p,y)=>{let v=Nn.get(p);return v||(v=ve(y,g),Nn.set(p,v)),v},We=(p,y,v)=>{if(!v)return rn(p,y);let T=Fn.get(v.normals);return T||(T=rn(p,y).map((O,X)=>v.normals[X]??O),Fn.set(v.normals,T)),T},Hn=new Map,an=p=>{let y=Hn.get(p);if(y===void 0){let v=e.get(p);y=mn(v?Qt(v,r,i,W):r,G.length),Hn.set(p,y)}return y},Dn=(p,y,v,T,O,X)=>{let Q=T?0:v.length-1,z=y?.[O]?.[Ln(O,p,X)],rt=z?.offsets?.[Q]??z?.offset;return{normal:z?.normals[Q]??rn(p,v)[Q]??{nx:0,ny:0},shift:z?.shifts[Q]??Ae,offset:rt===void 0?Ht(p,an(p),O,X):rt*I}},Ge=(p,y)=>{if(!m)return!0;let v=V?nn(d)*I:(G.length-1)/2*an(y),T=ko*v*_;return be(p,m,T+(N?.furthestShift.dx??0),T/g+(N?.furthestShift.dy??0))},Be=(p,y,v)=>{let T=st?.[p]?.linkThreads;if(!T?.size)return Me;let O=T.get(y)?.get(v),X=Yo(o).get(v)?.has(y)?void 0:T.get(v)?.get(y);if(!X)return O??Me;let Q=X.map(([z,rt])=>[rt,z]);return O?[...O,...Q]:Q},cn=(p,y,v)=>G[p]?.passColors.get(y)?.[st?.[p]?.threadPasses.get(y)?.[v]??0],Wn=new WeakMap,Xe=(p,y)=>{if(!y||!V)return p;let v=Wn.get(y.shifts);if(!v){let{shifts:T}=y;v=p.map((O,X)=>{let{dx:Q,dy:z}=T[X]??Ae;return{...O,x:O.x+Q,y:O.y+z}}),Wn.set(y.shifts,v)}return v},$e=S>(u?1:_o);for(let p=0;p<o.edges.length;p++){let y=o.edges[p],v=n[y.from],T=n[y.to],O=E.get(p);if(!v?.length||!T?.length||!O||P?.has(p))continue;let X=y.pathIds?.length??0,z=M?.get(p)!==void 0,rt=l?.edgeIndexes.has(p)??!1,Dt=a/2*(z?ye:1),St=te(X,F,f),Ct=a/2*(z?f==="walks"&&F>0?Math.max(1,St):ye:St),lt=c&&X>0,Tt=z?mo:uo,yt=!l||rt?Tt:vt(Tt,Vt),ut=e.get(y.to),Wt=(ut?Qt(ut,r,i,W):r)/2,$=K=>!m||be(K,m),zt=K=>$n(K,go/S,g,m),jt=(K,Z,nt)=>{if(!z){B.push({curves:K,thickness:Z,color:nt});return}for(let mt of zt(K))B.push({curves:mt.curves,thickness:Z,color:nt})},xt=(K,Z,nt,mt,kt,Mt,It,at,Gn)=>{B.push({curves:K,thickness:Z,color:nt,walk:mt,pass:kt,normal:Mt,offsetX:It,endNormal:at,endOffsetX:Gn})},Ot=K=>{let Z=$e?So({curves:K,edgeHalfWidth:z||lt?a/2:Ct,nodeHalfWidth:Wt,scale:S,yToX:g,color:yt,fromSegments:v,toSegments:T}):void 0;Z&&J.push(Z)},dt=B.length,Gt=J.length,wt=l?.walks.length&&rt&&!lt?l.walks:void 0;if(wt&&!Ge(O,y.from))continue;if(wt){let K=To(y,v,O[0],R,g),Z=O.at(-1),nt=Oe({x:Z.x1,y:Z.y1},T,g),mt=wt.length===1,kt=Pn(an(y.from)),Mt=j?.frames.get(y.from),It=j?.frames.get(y.to);for(let at=0;at<wt.length;at++)if(wt[at].edgeIndexes.has(p))for(let[ln,Bn]of Be(at,y.from,y.to)){let ht=Dn(y.from,Mt,v,K,at,ln),Pt=V?Dn(y.to,It,T,nt,at,Bn):ht,At=mt?0:ht.offset*_,fn=V?Pt.offset*_:At,Xn=V?Kn(O,ht.shift.dx+ht.normal.nx*At,ht.shift.dy+ht.normal.ny*At/g,Pt.shift.dx+Pt.normal.nx*fn,Pt.shift.dy+Pt.normal.ny*fn/g):At===0?O:hn(O,ht.normal.nx*At,ht.normal.ny*At/g);$(Xn)&&xt(Xn,kt,cn(at,y.from,ln)??cn(at,y.to,Bn)??Tt,at,ln,ht.normal,At,Pt.normal,fn)}B.length>dt&&Ot(O)}else if(!lt)$(O)&&(jt(O,Ct,yt),Ot(O));else{let K=qn(v,T,X,h),Z=Math.floor((X-1)/2);for(let nt=0;nt<X;nt++){let{x:mt,y:kt}=K[nt],Mt=mt===0&&kt===0?O:hn(O,mt,kt);if(!$(Mt))continue;let It=q(y.pathIds[nt]);jt(Mt,Dt,l&&(l.walks.length?!l.names.has(y.pathIds[nt]):!rt)?vt(It,Vt):It),nt===Z&&Ot(Mt)}}let Jt=B.length-dt;Jt>0&&Y.set(p,{start:dt,count:Jt});let ft=J.length-Gt;ft>0&&D.set(p,{start:Gt,count:ft})}for(let[p,y]of Object.entries(n)){let v=e.get(p);if(!v||m&&!Go(y,m))continue;let T=l!==void 0&&!l.nodeIds.has(p),O=T?Te:Do(v,ct.get(p)??0,s,et),X=T?vt(O,Vt):v.moved?vt(O,po):O,Q=Qt(v,r,i,W),z=Q/2,rt=x.length,Dt=ot.get(p),St=Q/tt,Ct=y.length>=2,lt=l?.walks.length&&!T&&!Dt?.length?l.walks:void 0;if(Ct&<){let yt=mn(Q,lt.length),ut=Pn(yt),Wt=j?.frames.get(p);for(let $=0;$<lt.length;$++){let zt=lt[$].colors.get(p);if(zt===void 0)continue;let jt=st?.[$]?.nodeThreads.get(p)??Co;for(let xt of jt){let Ot=cn($,p,xt)??zt;if(lt.length===1){x.push({points:y,thickness:ut,color:Ot,walk:$,pass:xt});continue}let dt=Wt?.[$]?.[Ln($,p,xt)],Gt=We(p,y,dt),wt=Xe(y,dt),Jt=Ht(p,yt,$,xt),ft=dt?.offsets?.map(Z=>Z*I*_),K=ft?ft[Math.floor(ft.length/2)]:Rt(dt,0,Jt)*_;x.push({points:_e(wt,Gt,ft??K,g),thickness:ut,color:Ot,walk:$,pass:xt,normals:Gt,offsetX:K,...ft&&{offsets:ft}})}}}else if(Ct&&Dt?.length&&St>=yo){let yt=ve(y,g);for(let ut of Dt){let Wt=(ut-(tt-1)/2)*St*_,$=b[ut]??ge;x.push({points:_e(y,yt,Wt,g),thickness:St/2,color:T?vt($,Vt):$})}}else Ct&&x.push({points:y,thickness:z,color:X});let Tt=x.length-rt;Tt>0&&C.set(p,{start:rt,count:Tt})}return{nodeStrokes:x,nodeStrokeRuns:C,arrows:J,arrowRuns:D,edgeCurves:B,edgeCurveRuns:Y}}var Fe=[{value:"progress",label:"Progress along the walk"},{value:"walk",label:"One colour for the walk"},{value:"reference",label:"Reference position"}],On=[{value:"grey",label:"Grey to black",ends:["#a3a3a3","#151515"]},{value:"blue",label:"Cyan to navy",ends:["#6ee0f0","#0b2c7a"]},{value:"red",label:"Yellow to red",ends:["#ffd24a","#b3121b"]},{value:"purple",label:"Pink to plum",ends:["#f5a3d8","#5e1a6e"]},{value:"green",label:"Lime to forest",ends:["#b6e36c","#0b5d3b"]},{value:"orange",label:"Peach to rust",ends:["#ffc285","#8f3a00"]},{value:"rainbow",label:"Rainbow"}],Cn=["blue","red","purple","green"],qo=t=>Fe.some(n=>n.value===t),Vo=t=>On.some(n=>n.value===t);function zo(t,n,o,e=!0){let{field:s,scheme:r}=t.color??{},a=qo(s)?s:e?"progress":"walk",c=n?"grey":Cn[o%Cn.length],i=Vo(r)?r==="rainbow"&&a!=="reference"?c:r:c,f=Math.floor(o/Cn.length)%Pe.length;return a==="walk"&&i===c&&f>0?{field:a,scheme:i,shade:Pe[f]}:e||a==="walk"?{field:a,scheme:i}:{field:a,scheme:i,darkest:jo}}var jo=.55,kn=.5,Pe=[kn,.85,.2],Jo=.08,Ne=({field:t,scheme:n})=>t!=="walk"&&n!=="rainbow";function Qo(t){let n=new Map;for(let e of t)Ne(e)&&n.set(e.scheme,(n.get(e.scheme)??0)+1);let o=new Map;return t.map(e=>{let s=Ne(e)?n.get(e.scheme):1;if(s<2)return e;let r=o.get(e.scheme)??0;o.set(e.scheme,r+1);let a=Jo/2;return{...e,stretch:[r/s+(r>0?a:0),(r+1)/s-(r<s-1?a:0)]}})}var Le=({stretch:t},n)=>t?t[0]+(t[1]-t[0])*n:n,Zo=t=>t<=.04045?t/12.92:((t+.055)/1.055)**2.4,ts=t=>t<=.0031308?t*12.92:1.055*t**(1/2.4)-.055;function ns(t){let[n,o,e]=[1,3,5].map(c=>Zo(Number.parseInt(t.slice(c,c+2),16)/255)),s=Math.cbrt(.4122214708*n+.5363325363*o+.0514459929*e),r=Math.cbrt(.2119034982*n+.6806995451*o+.1073969566*e),a=Math.cbrt(.0883024619*n+.2817188376*o+.6299787005*e);return[.2104542553*s+.793617785*r-.0040720468*a,1.9779984951*s-2.428592205*r+.4505937099*a,.0259040371*s+.7827717662*r-.808675766*a]}function es([t,n,o]){let e=(t+.3963377774*n+.2158037573*o)**3,s=(t-.1055613458*n-.0638541728*o)**3,r=(t-.0894841775*n-1.291485548*o)**3;return[4.0767416621*e-3.3077115913*s+.2309699292*r,-1.2684380046*e+2.6097574011*s-.3413193965*r,-.0041960863*e-.7034186147*s+1.707614701*r].map(a=>ts(Math.max(0,Math.min(1,a)))*255)}var Tn=new Map;function os(t){if(!Tn.has(t)){let n=On.find(o=>o.value===t);Tn.set(t,n&&"ends"in n?n.ends.map(ns):void 0)}return Tn.get(t)}function In(t,n,o=0){let e=Math.max(0,Math.min(1,n)),s=os(t);if(!s)return Rn(qt(e),Ut,Yt).map(l=>l*255);let[r,a]=s,c=r[0],i=a[0],f=i<o&&c>o?(c-o)/(c-i):1;return es(r.map((l,h)=>l+(a[h]-l)*e*f))}function He(t,n,o){let[e,s,r]=In(t,n,o).map(Math.round);return`rgb(${e}, ${s}, ${r})`}function sn(t,n,o){let[e,s,r]=In(t,n,o).map(Math.round);return U(e,s,r,255)}function ss(t,n){let{field:o,scheme:e,darkest:s,shade:r=kn}=t;return o==="walk"?sn(e,r):n===void 0?De:sn(e,Le(t,n),s)}var De=Sn;function rs(t){let{field:n,scheme:o,darkest:e,shade:s=kn}=t,r=(a,c)=>({offset:a,color:He(o,c,e),abgr:sn(o,c,e)});return n==="walk"?[r(0,s)]:Array.from({length:7},(a,c)=>r(c/6,Le(t,c/6)))}export{lo as a,ho as b,Et as c,pn as d,is as e,U as f,ue as g,fs as h,vt as i,hs as j,so as k,ds as l,ao as m,ms as n,me as o,Ns as p,Rn as q,Fs as r,Lo as s,Ls as t,Ho as u,Do as v,Hs as w,Fe as x,On as y,zo as z,Qo as A,ss as B,De as C,rs as D};
|
|
2
|
+
//# sourceMappingURL=chunk-AILGRHTE.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../node_modules/.pnpm/@jbrowse+bandage-core@12.
|
|
3
|
+
"sources": ["../../node_modules/.pnpm/@jbrowse+bandage-core@12.4.0/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-YUIKEUKY.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@12.4.0/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-G2FD7S3C.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@12.4.0/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-GQZVR5DW.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@12.4.0/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-URPU4XCM.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@12.4.0/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-L4DBSRA2.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@12.4.0/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-XF2NS52W.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@12.4.0/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-BPCN2ABL.js"],
|
|
4
4
|
"sourcesContent": ["import {\n slideAt\n} from \"./chunk-JJV2GT2Z.js\";\n\n// src/renderer/walkLanes.ts\nvar THREAD_PX = 2;\nvar THREAD_GAP_PX = 1.5;\nvar SLOT_GAP_PX = 4;\nvar LANE_SMOOTHING_PX = 12;\nvar THREAD_REACH_PX = 64;\nvar THREAD_TAPER_PX = 24;\nvar MAX_BAND_PX = 48;\nvar PASSES_KEY = \"a thread per pass through a node\";\nvar threadsPasses = (walks) => walks.length > 1 && walks.some((w) => w.mostPasses > 1);\nvar threadsWidth = (threads) => threads * THREAD_PX + Math.max(0, threads - 1) * THREAD_GAP_PX;\nvar sum = (values) => values.reduce((a, b) => a + b, 0);\nfunction slotLayout(spans, mostPasses, laneWidth) {\n const widths = spans.map(\n (m, i) => mostPasses[i] > 1 ? threadsWidth(m) : laneWidth * Math.min(1, m)\n );\n let seen = 0;\n const gaps = spans.map((m) => {\n const share = Math.min(1, m);\n const gap = SLOT_GAP_PX * share * seen;\n seen = Math.max(seen, share);\n return gap;\n });\n return { widths, gaps, band: sum(widths) + sum(gaps) };\n}\nvar THREAD_PITCH_PX = THREAD_PX + THREAD_GAP_PX;\nfunction slotCentres(spans, mostPasses, held = spans) {\n const { widths, gaps, band } = slotLayout(spans, mostPasses, THREAD_PX);\n let at = -band / 2;\n return widths.map((width, i) => {\n at += gaps[i];\n const slack = mostPasses[i] > 1 ? Math.max(0, width - threadsWidth(held[i])) : 0;\n const centre = at + slack / 2 + THREAD_PX / 2;\n at += width;\n return centre;\n });\n}\nvar bandWidthPx = (mostPasses) => slotLayout(mostPasses, mostPasses, THREAD_PX).band;\nvar bandScale = (mostPasses) => Math.min(1, MAX_BAND_PX / (bandWidthPx(mostPasses) || 1));\nvar passesKey = (walks) => bandScale(walks.map((w) => w.mostPasses)) < 1 ? `${PASSES_KEY}, thinned to fit` : PASSES_KEY;\nfunction laneSlideAt(start, end, along) {\n const vector = ({ normal, offsetX: offsetX2 }) => ({\n dx: normal.nx * offsetX2,\n dy: normal.ny * offsetX2\n });\n const { dx, dy } = slideAt(vector(start), vector(end), along);\n const offsetX = Math.hypot(dx, dy);\n return offsetX > 0 ? { normal: { nx: dx / offsetX, ny: dy / offsetX }, offsetX } : { normal: { nx: 0, ny: 0 }, offsetX: 0 };\n}\nfunction pointIndex(run, p) {\n const i = run.stepOf[p];\n const k = p - run.starts[i];\n return run.forward[i] ? k : run.starts[i + 1] - run.starts[i] - 1 - k;\n}\nvar gapOf = (a, b) => {\n const dx = b.x - a.x;\n const dy = b.y - a.y;\n return Math.sqrt(dx * dx + dy * dy);\n};\nfunction arcOf(run) {\n const s = new Float64Array(run.length);\n for (let i = 1; i < run.length; i++) {\n s[i] = s[i - 1] + gapOf(run[i - 1], run[i]);\n }\n return s;\n}\nfunction walkSteps(walkRoutes, nodePositions) {\n const seen = /* @__PURE__ */ new Set();\n return walkRoutes.map((routes) => {\n const visits = /* @__PURE__ */ new Map();\n return routes.map(\n (route) => route.map((id) => {\n const visit = visits.get(id) ?? 0;\n visits.set(id, visit + 1);\n const segments = nodePositions[id];\n const owned = !!segments?.length && !seen.has(id);\n if (owned) {\n seen.add(id);\n }\n return { id, visit, owned, segments };\n })\n );\n });\n}\nfunction laneRuns(steps, yToX, jump) {\n const runs = [];\n steps.forEach((pieces, walk) => {\n let total = 0;\n for (const piece of pieces) {\n for (const { segments } of piece) {\n total += segments?.length ?? 0;\n }\n }\n const xs = new Float64Array(total);\n const ys = new Float64Array(total);\n let at = 0;\n let from = 0;\n let run = fresh();\n function fresh() {\n return {\n walk,\n ids: [],\n visits: [],\n forward: [],\n owned: [],\n starts: [0]\n };\n }\n const breakRun = () => {\n if (run.ids.length) {\n const stepOf = new Int32Array(at - from);\n for (let i = 0; i < run.ids.length; i++) {\n stepOf.fill(i, run.starts[i], run.starts[i + 1]);\n }\n runs.push({\n ...run,\n xs: xs.subarray(from, at),\n ys: ys.subarray(from, at),\n stepOf\n });\n }\n run = fresh();\n from = at;\n };\n const gap = (x, y, p) => {\n const dx = p.x - x;\n const dy = p.y * yToX - y;\n return Math.sqrt(dx * dx + dy * dy);\n };\n for (const piece of pieces) {\n piece.forEach(({ id, visit, owned, segments }, k) => {\n if (!segments?.length) {\n breakRun();\n return;\n }\n const first = segments[0];\n const last = segments.at(-1);\n let forward;\n if (at > from) {\n const x = xs[at - 1];\n const y = ys[at - 1];\n const toFirst = gap(x, y, first);\n const toLast = gap(x, y, last);\n forward = toFirst <= toLast;\n if (Math.min(toFirst, toLast) > jump) {\n breakRun();\n }\n } else {\n const next = piece[k + 1]?.segments;\n const toNext = (p) => next?.length ? Math.min(\n gap(p.x, p.y * yToX, next[0]),\n gap(p.x, p.y * yToX, next.at(-1))\n ) : 0;\n forward = toNext(last) <= toNext(first);\n }\n run.ids.push(id);\n run.visits.push(visit);\n run.forward.push(forward);\n run.owned.push(owned);\n for (let j = 0; j < segments.length; j++) {\n const p = segments[forward ? j : segments.length - 1 - j];\n xs[at] = p.x;\n ys[at] = p.y * yToX;\n at++;\n }\n run.starts.push(at - from);\n });\n breakRun();\n }\n });\n return runs;\n}\nfunction ownedWindows(s, owned, margin) {\n const windows = [];\n for (let i = 0; i < owned.length; i++) {\n if (!owned[i]) {\n continue;\n }\n let j = i;\n while (j + 1 < owned.length && owned[j + 1]) {\n j++;\n }\n const last = windows.at(-1);\n const floor = last ? last[1] : 0;\n let lo = i;\n while (lo > floor && s[i] - s[lo - 1] <= margin) {\n lo--;\n }\n let hi = j;\n while (hi + 1 < s.length && s[hi + 1] - s[j] <= margin) {\n hi++;\n }\n if (last && lo <= last[1] + 1) {\n last[1] = hi;\n } else {\n windows.push([lo, hi]);\n }\n i = j;\n }\n return windows;\n}\nfunction smoothedNormals(run, reach) {\n const s = arcOf(run);\n const end = s.at(-1);\n const pointAt = (at, j) => {\n const a = run[j];\n const b = run[Math.min(j + 1, run.length - 1)];\n const span = s[Math.min(j + 1, run.length - 1)] - s[j];\n const f = span > 0 ? (at - s[j]) / span : 0;\n return { x: a.x + (b.x - a.x) * f, y: a.y + (b.y - a.y) * f };\n };\n let lo = 0;\n let hi = 0;\n return run.map((_, i) => {\n const back = Math.max(0, s[i] - reach / 2);\n const ahead = Math.min(end, s[i] + reach / 2);\n while (lo < run.length - 1 && s[lo + 1] <= back) {\n lo++;\n }\n while (hi < run.length - 1 && s[hi + 1] <= ahead) {\n hi++;\n }\n const a = pointAt(back, lo);\n const b = pointAt(ahead, hi);\n const len = gapOf(a, b);\n return len > 0 ? { nx: -(b.y - a.y) / len, ny: (b.x - a.x) / len } : void 0;\n });\n}\nfunction cutCurls(run, close, length) {\n const s = arcOf(run);\n const out = run.slice();\n const picks = [];\n s.forEach((at, k) => {\n const last = picks.at(-1);\n if (last === void 0 || at - s[last] >= close / 4) {\n picks.push(k);\n }\n });\n if (picks.at(-1) !== run.length - 1) {\n picks.push(run.length - 1);\n }\n let a = 0;\n while (a < picks.length) {\n const i = picks[a];\n let to = -1;\n for (let b = a + 1; b < picks.length && s[picks[b]] - s[i] <= length; b++) {\n const j2 = picks[b];\n if (s[j2] - s[i] > Math.PI * close && gapOf(run[i], run[j2]) <= close) {\n to = b;\n }\n }\n if (to < 0) {\n a++;\n continue;\n }\n const j = picks[to];\n const p = run[i];\n const q = run[j];\n for (let k = i + 1; k < j; k++) {\n const f = (s[k] - s[i]) / (s[j] - s[i]);\n out[k] = {\n ...run[k],\n x: p.x + (q.x - p.x) * f,\n y: p.y + (q.y - p.y) * f\n };\n }\n a = to;\n }\n return out;\n}\nfunction rounded(run, half) {\n const n = run.length;\n const s = arcOf(run);\n const end = s[n - 1];\n const sumW = new Float64Array(n + 1);\n const sumX = new Float64Array(n + 1);\n const sumY = new Float64Array(n + 1);\n for (let i = 0; i < n; i++) {\n const p = run[i];\n const w = (s[Math.min(i + 1, n - 1)] - s[Math.max(i - 1, 0)]) / 2;\n sumW[i + 1] = sumW[i] + w;\n sumX[i + 1] = sumX[i] + w * p.x;\n sumY[i + 1] = sumY[i] + w * p.y;\n }\n const out = new Array(n);\n let lo = 0;\n let hi = 0;\n for (let i = 0; i < n; i++) {\n const p = run[i];\n const reach = Math.min(half, s[i], end - s[i]);\n const from = s[i] - reach;\n const to = s[i] + reach + 1e-9 * (1 + end);\n while (lo < n && s[lo] < from) {\n lo++;\n }\n while (hi < n && s[hi] < to) {\n hi++;\n }\n const w = sumW[hi] - sumW[lo];\n out[i] = w > 0 ? { x: (sumX[hi] - sumX[lo]) / w, y: (sumY[hi] - sumY[lo]) / w } : { x: p.x, y: p.y };\n }\n return out;\n}\nfunction tightPoints(line, radius) {\n const n = line.length;\n const s = arcOf(line);\n const end = s[n - 1];\n const tight = new Uint8Array(n);\n const along = (j, at) => {\n const a = line[j];\n const b = line[j + 1];\n if (!b) {\n return a;\n }\n const span = s[j + 1] - s[j];\n const f = span > 0 ? (at - s[j]) / span : 0;\n return { x: a.x + (b.x - a.x) * f, y: a.y + (b.y - a.y) * f };\n };\n let lo = 0;\n let hi = 0;\n for (let i = 0; i < n; i++) {\n if (s[i] < radius || end - s[i] < radius) {\n continue;\n }\n while (lo + 1 < n && s[lo + 1] <= s[i] - radius) {\n lo++;\n }\n while (hi + 1 < n && s[hi + 1] <= s[i] + radius) {\n hi++;\n }\n const p = line[i];\n const a = along(lo, s[i] - radius);\n const b = along(hi, s[i] + radius);\n const twice = Math.abs(\n (b.x - a.x) * (p.y - a.y) - (b.y - a.y) * (p.x - a.x)\n );\n tight[i] = twice > 0 && gapOf(a, b) * gapOf(a, p) * gapOf(p, b) / (2 * twice) < radius ? 1 : 0;\n }\n return { tight, s };\n}\nfunction loosened(line, radius) {\n const out = line.slice();\n const { tight, s } = tightPoints(out, radius);\n let windows = ownedWindows(\n s,\n Array.from(tight, (t) => t > 0),\n 3 * radius\n );\n for (let pass = 0; pass < 8 && windows.length; pass++) {\n windows = windows.filter(([lo, hi]) => {\n const part = out.slice(lo, hi + 1);\n const local = tightPoints(part, radius);\n if (!local.tight.includes(1)) {\n return false;\n }\n const weight = windowMean(local.s, local.tight, radius);\n const smoother = rounded(part, radius);\n for (let k = 0; k < part.length; k++) {\n const w = Math.min(1, 3 * weight[k]);\n if (w > 0) {\n const p = part[k];\n const q = smoother[k];\n out[lo + k] = { x: p.x + (q.x - p.x) * w, y: p.y + (q.y - p.y) * w };\n }\n }\n return true;\n });\n }\n return out;\n}\nfunction runSigns(s, own, canonical, forward, settle, half) {\n const n = own.length;\n const agreement = new Float64Array(n);\n let hi = 0;\n let lo = 0;\n let sum2 = 0;\n let decided = 0;\n let pending = 0;\n for (let i = 0; i < n; i++) {\n while (hi < n && s[hi] - s[i] <= half) {\n const theirs = canonical(hi);\n const mine = own[hi];\n agreement[hi] = theirs && mine ? theirs.nx * mine.nx + theirs.ny * mine.ny : 0;\n sum2 += agreement[hi];\n hi++;\n }\n while (s[i] - s[lo] > half) {\n sum2 -= agreement[lo++];\n }\n if (Math.abs(sum2) > 1e-9) {\n decided = sum2 < 0 ? -1 : 1;\n }\n if (!decided) {\n continue;\n }\n for (; pending <= i; pending++) {\n settle(pending, decided);\n }\n }\n if (pending < n) {\n let along = 0;\n for (let k = 0; k < n; k++) {\n along += forward(k) ? 1 : -1;\n }\n for (; pending < n; pending++) {\n settle(pending, along < 0 ? -1 : 1);\n }\n }\n}\nfunction laneLines(runs, yToX, reach, band, smooth = true) {\n const turn = Math.max(reach, 2 * band);\n const curl = Math.PI * band;\n const context = smooth ? curl + 3 * band + turn / 2 : turn / 2;\n const frames = /* @__PURE__ */ new Map();\n const firsts = /* @__PURE__ */ new Map();\n const arcs = [];\n const stepFrames = [];\n const newFrame = (length) => ({\n normals: new Array(length),\n shifts: smooth ? new Array(length) : []\n });\n const place = (id, walk, visit, f) => {\n let byWalk = frames.get(id);\n if (!byWalk) {\n byWalk = [];\n frames.set(id, byWalk);\n }\n ;\n (byWalk[walk] ??= [])[visit] = f;\n };\n runs.forEach((run, r) => {\n const { walk, ids, visits, owned, starts, xs, ys, stepOf } = run;\n const steps = ids.length;\n const n = xs.length;\n const own = new Array(steps);\n for (let i = 0; i < steps; i++) {\n if (owned[i]) {\n own[i] = newFrame(starts[i + 1] - starts[i]);\n firsts.set(ids[i], { run: r, step: i, frame: own[i] });\n place(ids[i], walk, visits[i], own[i]);\n }\n }\n const raw = new Float64Array(n);\n for (let p = 1; p < n; p++) {\n const dx = xs[p] - xs[p - 1];\n const dy = ys[p] - ys[p - 1];\n raw[p] = raw[p - 1] + Math.sqrt(dx * dx + dy * dy);\n }\n const end = raw[n - 1];\n const firstRun = new Int32Array(steps).fill(-1);\n const firstStep = new Int32Array(steps);\n const firstFrame = new Array(steps);\n for (let i = 0; i < steps; i++) {\n const first = owned[i] ? void 0 : firsts.get(ids[i]);\n if (first) {\n firstRun[i] = first.run;\n firstStep[i] = first.step;\n firstFrame[i] = first.frame;\n }\n }\n const plus = new Int32Array(steps);\n const minus = new Int32Array(steps);\n for (let i = 0; i + 1 < steps; i++) {\n const same = firstRun[i] >= 0 && firstRun[i + 1] === firstRun[i];\n const d = same ? firstStep[i + 1] - firstStep[i] : 0;\n plus[i + 1] = plus[i] + (d === 1 ? 1 : 0);\n minus[i + 1] = minus[i] + (d === -1 ? 1 : 0);\n }\n const shared = new Array(steps);\n let reachFrom = 0;\n let reachTo = 0;\n for (let i = 0; i < steps; i++) {\n if (!smooth) {\n shared[i] = !owned[i];\n continue;\n }\n const from = raw[starts[i]] - context;\n const to = raw[starts[i + 1] - 1] + context;\n while (raw[reachFrom] < from) {\n reachFrom++;\n }\n while (reachTo + 1 < n && raw[reachTo + 1] <= to) {\n reachTo++;\n }\n const lo = stepOf[Math.max(0, reachFrom - 1)];\n const hi = stepOf[Math.min(n - 1, reachTo + 1)];\n const span = hi - lo;\n const forward = plus[hi] - plus[lo];\n const backward = minus[hi] - minus[lo];\n shared[i] = !owned[i] && from >= 0 && to <= end && span > 0 && (forward === span || backward === span);\n }\n for (let i = 0; i < steps; i++) {\n if (owned[i]) {\n continue;\n }\n const first = firstFrame[i];\n own[i] = !smooth && shared[i] ? first : shared[i] ? { normals: first.normals, shifts: first.shifts } : newFrame(first.normals.length);\n place(ids[i], walk, visits[i], own[i]);\n }\n stepFrames.push(own);\n const apart = new Array(n);\n for (let p = 0; p < n; p++) {\n apart[p] = !shared[stepOf[p]];\n }\n for (const [from, to] of ownedWindows(raw, apart, context)) {\n const points = [];\n for (let p = from; p <= to; p++) {\n points.push({ x: xs[p], y: ys[p] });\n }\n const line = smooth ? loosened(\n rounded(cutCurls(points, band / 2, curl), band / 2),\n band / 2\n ) : points;\n const normals = smoothedNormals(line, turn);\n runSigns(\n arcOf(line),\n normals,\n (k) => {\n const i = stepOf[from + k];\n return (owned[i] ? own[i] : firstFrame[i])?.normals[pointIndex(run, from + k)];\n },\n (k) => run.forward[stepOf[from + k]],\n (k, sign) => {\n const p = from + k;\n const i = stepOf[p];\n if (shared[i]) {\n return;\n }\n const index = pointIndex(run, p);\n const m = normals[k];\n own[i].normals[index] = m && (sign > 0 ? m : { nx: -m.nx, ny: -m.ny });\n if (smooth) {\n own[i].shifts[index] = {\n dx: line[k].x - points[k].x,\n dy: (line[k].y - points[k].y) / yToX\n };\n }\n },\n turn\n );\n }\n if (!smooth) {\n arcs.push(raw);\n return;\n }\n const s = new Float64Array(n);\n let px = 0;\n let py = 0;\n for (let p = 0; p < n; p++) {\n const shift = own[stepOf[p]].shifts[pointIndex(run, p)];\n const x = xs[p] + (shift?.dx ?? 0);\n const y = ys[p] + (shift?.dy ?? 0) * yToX;\n s[p] = p ? s[p - 1] + Math.sqrt((x - px) ** 2 + (y - py) ** 2) : 0;\n px = x;\n py = y;\n }\n arcs.push(s);\n });\n return { frames, arcs, stepFrames };\n}\nfunction windowed(s, v, half, sign) {\n const out = new Array(v.length);\n const deque = [];\n let head = 0;\n let next = 0;\n for (let i = 0; i < v.length; i++) {\n while (next < v.length && s[next] - s[i] <= half) {\n while (deque.length > head && sign * v[deque.at(-1)] <= sign * v[next]) {\n deque.pop();\n }\n deque.push(next++);\n }\n while (s[i] - s[deque[head]] > half) {\n head++;\n }\n out[i] = v[deque[head]];\n }\n return out;\n}\nfunction windowMean(s, v, half, counted = () => true) {\n const n = v.length;\n const sumW = new Float64Array(n + 1);\n const sumWV = new Float64Array(n + 1);\n for (let i = 0; i < n; i++) {\n const w = !counted(v[i]) ? 0 : n > 1 ? (s[Math.min(i + 1, n - 1)] - s[Math.max(i - 1, 0)]) / 2 : 1;\n sumW[i + 1] = sumW[i] + w;\n sumWV[i + 1] = sumWV[i] + w * v[i];\n }\n const out = new Float64Array(n);\n let lo = 0;\n let hi = 0;\n for (let i = 0; i < n; i++) {\n while (s[i] - s[lo] > half) {\n lo++;\n }\n while (hi < n && s[hi] - s[i] <= half) {\n hi++;\n }\n const w = sumW[hi] - sumW[lo];\n out[i] = w > 0 ? (sumWV[hi] - sumWV[lo]) / w : v[i];\n }\n return out;\n}\nvar ONE_THREAD = [0];\nfunction repeats(passes) {\n for (const p of passes.values()) {\n if (p > 1) {\n return true;\n }\n }\n return false;\n}\nfunction walkThreads(route, passes, nodePositions, yToX, reach) {\n if (!repeats(passes)) {\n return {\n span: passes,\n nodeThreads: /* @__PURE__ */ new Map(),\n threadPasses: /* @__PURE__ */ new Map(),\n threadAt: /* @__PURE__ */ new Map(),\n linkThreads: /* @__PURE__ */ new Map()\n };\n }\n const index = /* @__PURE__ */ new Map();\n const ids = [];\n const widths = [];\n const visits = [];\n const steps = [];\n const stepVisits = [];\n const stepWants = [];\n const stepGlides = [];\n for (const piece of route) {\n const points = [];\n const nodes = [];\n for (const id of piece) {\n let k = index.get(id);\n if (k === void 0) {\n k = ids.length;\n index.set(id, k);\n ids.push(id);\n widths.push(0);\n visits.push(0);\n }\n nodes.push(k);\n const segments = nodePositions[id];\n const mid = segments?.[Math.floor(segments.length / 2)];\n points.push(\n mid ? { x: mid.x, y: mid.y * yToX } : points.at(-1) ?? { x: 0, y: 0 }\n );\n }\n const s = arcOf(points);\n const p = piece.map((id) => passes.get(id) ?? 1);\n const most = windowed(s, p, reach / 2, 1);\n const copy = nodes.map((k) => ++visits[k]);\n const n = piece.length;\n const before = new Int32Array(n);\n let last = -1;\n for (let i = 0; i < n; i++) {\n last = p[i] === most[i] ? i : last;\n before[i] = last;\n }\n const after = new Int32Array(n);\n last = -1;\n for (let i = n - 1; i >= 0; i--) {\n last = p[i] === most[i] ? i : last;\n after[i] = last;\n }\n const wants = new Array(n);\n const glides = new Array(n).fill(NaN);\n for (let i = 0; i < n; i++) {\n const b = before[i];\n const a = after[i];\n const nearest = b < 0 ? a : a < 0 ? b : s[i] - s[b] <= s[a] - s[i] ? b : a;\n const want = (k) => Math.min(copy[k], most[i]) - 1;\n wants[i] = want(nearest);\n if (p[i] === 1 && b >= 0 && a >= 0 && want(a) !== want(b)) {\n const f = (s[i] - s[b]) / (s[a] - s[b] || 1);\n glides[i] = want(b) + (want(a) - want(b)) * f;\n }\n widths[nodes[i]] = Math.max(widths[nodes[i]], most[i]);\n }\n steps.push(nodes);\n stepVisits.push(copy);\n stepWants.push(wants);\n stepGlides.push(glides);\n }\n const taken = [];\n const threadOf = [];\n const free = (k, want) => {\n const width = widths[k];\n const own = taken[k] ??= /* @__PURE__ */ new Set();\n for (let d = 0; d < width; d++) {\n for (const c of [want - d, want + d]) {\n if (c >= 0 && c < width && !own.has(c)) {\n return c;\n }\n }\n }\n return want;\n };\n const glideOf = [];\n steps.forEach((nodes, piece) => {\n nodes.forEach((k, i) => {\n if (widths[k] > 1) {\n const glide = stepGlides[piece][i];\n const t = free(\n k,\n Number.isNaN(glide) ? stepWants[piece][i] : Math.round(glide)\n );\n taken[k].add(t);\n (threadOf[k] ??= [])[stepVisits[piece][i]] = t;\n if (!Number.isNaN(glide)) {\n ;\n (glideOf[k] ??= [])[t] = glide;\n }\n }\n });\n });\n const span = /* @__PURE__ */ new Map();\n const nodeThreads = /* @__PURE__ */ new Map();\n const threadPasses = /* @__PURE__ */ new Map();\n const threadAt = /* @__PURE__ */ new Map();\n ids.forEach((id, k) => {\n if (glideOf[k]) {\n threadAt.set(id, glideOf[k]);\n }\n span.set(id, widths[k]);\n nodeThreads.set(\n id,\n taken[k] ? [...taken[k]].sort((a, b) => a - b) : ONE_THREAD\n );\n const passOf = [];\n threadOf[k]?.forEach((thread, visit) => {\n passOf[thread] = visit - 1;\n });\n threadPasses.set(id, passOf);\n });\n const linkThreads = /* @__PURE__ */ new Map();\n steps.forEach((nodes, piece) => {\n const visit = stepVisits[piece];\n for (let i = 1; i < nodes.length; i++) {\n const from = nodes[i - 1];\n const to = nodes[i];\n const pair = [\n threadOf[from]?.[visit[i - 1]] ?? 0,\n threadOf[to]?.[visit[i]] ?? 0\n ];\n let ahead = linkThreads.get(ids[from]);\n if (!ahead) {\n ahead = /* @__PURE__ */ new Map();\n linkThreads.set(ids[from], ahead);\n }\n const list = ahead.get(ids[to]);\n if (!list) {\n ahead.set(ids[to], [pair]);\n } else if (!list.some(([a, b]) => a === pair[0] && b === pair[1])) {\n list.push(pair);\n }\n }\n });\n return { span, nodeThreads, threadPasses, threadAt, linkThreads };\n}\nfunction bandSpans(runs, arcs, spans, { reach, taper }) {\n const out = /* @__PURE__ */ new Map();\n runs.forEach((run, r) => {\n const s = arcs[r];\n const along = run.ids.map((_, i) => {\n const length = run.starts[i + 1] - run.starts[i];\n const middle = Math.floor(length / 2);\n return s[run.starts[i] + (run.forward[i] ? middle : length - 1 - middle)];\n });\n for (const [lo, hi] of ownedWindows(\n along,\n run.owned,\n reach / 2 + taper / 2\n )) {\n const at = along.slice(lo, hi + 1);\n const ids = run.ids.slice(lo, hi + 1);\n const eased = spans.map((own) => {\n const raw = ids.map((id) => own.get(id) ?? 0);\n return raw.every((v) => v === raw[0]) ? { slot: raw, held: raw } : {\n slot: windowMean(at, windowed(at, raw, reach / 2, 1), taper / 2),\n held: windowMean(at, raw, taper / 2, (v) => v > 0)\n };\n });\n ids.forEach((id, i) => {\n if (run.owned[lo + i]) {\n out.set(id, {\n slot: eased.map((e) => e.slot[i]),\n held: eased.map((e) => e.held[i])\n });\n }\n });\n }\n });\n return out;\n}\nfunction easeOffsets(runs, stepFrames, arcs, spans, passes, threads, half) {\n const plain = slotCentres(passes, passes);\n const byNode = /* @__PURE__ */ new Map();\n const centresAt = (id) => {\n let centres = byNode.get(id);\n if (!centres) {\n const own = spans.get(id);\n centres = own ? slotCentres(own.slot, passes, own.held) : plain;\n byNode.set(id, centres);\n }\n return centres;\n };\n runs.forEach((run, r) => {\n const { walk, ids, visits, starts } = run;\n const { threadPasses, threadAt } = threads[walk];\n const raw = new Float64Array(run.xs.length);\n ids.forEach((id, i) => {\n const thread = Math.max(0, threadPasses.get(id)?.indexOf(visits[i]) ?? 0);\n const place = threadAt.get(id)?.[thread] ?? thread;\n raw.fill(\n centresAt(id)[walk] + place * THREAD_PITCH_PX,\n starts[i],\n starts[i + 1]\n );\n });\n const eased = windowMean(arcs[r], raw, half);\n stepFrames[r].forEach((frame, i) => {\n const from = starts[i];\n const to = starts[i + 1];\n let constant = true;\n for (let p = from + 1; constant && p < to; p++) {\n constant = Math.abs(eased[p] - eased[from]) < 1e-9;\n }\n if (constant) {\n frame.offset = eased[from];\n return;\n }\n const offsets = new Array(to - from);\n for (let p = from; p < to; p++) {\n offsets[pointIndex(run, p)] = eased[p];\n }\n frame.offsets = offsets;\n });\n });\n}\nfunction liftLanes(walks, nodePositions, yToX, worldPerScreenPx, steps = walkSteps(\n walks.map((w) => w.route),\n nodePositions\n)) {\n const threaded = threadsPasses(walks);\n const passes = walks.map((w) => w.mostPasses);\n const reach = THREAD_REACH_PX * worldPerScreenPx;\n const runs = laneRuns(steps, yToX, LANE_SMOOTHING_PX * worldPerScreenPx);\n const band = bandWidthPx(passes) * (threaded ? bandScale(passes) : 1) * worldPerScreenPx;\n const lines = laneLines(\n runs,\n yToX,\n LANE_SMOOTHING_PX * worldPerScreenPx,\n band,\n threaded\n );\n const threads = threaded ? walks.map((w) => walkThreads(w.route, w.passes, nodePositions, yToX, reach)) : void 0;\n const spans = threads ? bandSpans(\n runs,\n lines.arcs,\n threads.map((t) => t.span),\n { reach, taper: THREAD_TAPER_PX * worldPerScreenPx }\n ) : void 0;\n if (spans && threads) {\n easeOffsets(\n runs,\n lines.stepFrames,\n lines.arcs,\n spans,\n passes,\n threads,\n THREAD_TAPER_PX / 2 * worldPerScreenPx\n );\n }\n const furthestShift = { dx: 0, dy: 0 };\n const seenShifts = /* @__PURE__ */ new Set();\n for (const byWalk of lines.frames.values()) {\n for (const { shifts } of byWalk.flat()) {\n if (seenShifts.has(shifts)) {\n continue;\n }\n seenShifts.add(shifts);\n for (const shift of shifts) {\n furthestShift.dx = Math.max(furthestShift.dx, Math.abs(shift?.dx ?? 0));\n furthestShift.dy = Math.max(furthestShift.dy, Math.abs(shift?.dy ?? 0));\n }\n }\n }\n return { lines, threads, spans, furthestShift };\n}\n\nexport {\n THREAD_PX,\n THREAD_GAP_PX,\n SLOT_GAP_PX,\n LANE_SMOOTHING_PX,\n THREAD_REACH_PX,\n THREAD_TAPER_PX,\n MAX_BAND_PX,\n PASSES_KEY,\n threadsPasses,\n THREAD_PITCH_PX,\n slotCentres,\n bandWidthPx,\n bandScale,\n passesKey,\n laneSlideAt,\n walkSteps,\n laneRuns,\n laneLines,\n walkThreads,\n bandSpans,\n liftLanes\n};\n", "// src/renderer/colorBits.ts\nfunction packAbgr(r, g, b, a) {\n return (a << 24 | b << 16 | g << 8 | r) >>> 0;\n}\nfunction abgrRed(c) {\n return c & 255;\n}\nfunction abgrGreen(c) {\n return c >>> 8 & 255;\n}\nfunction abgrBlue(c) {\n return c >>> 16 & 255;\n}\nfunction abgrAlpha(c) {\n return c >>> 24 & 255;\n}\nfunction abgrToCssRgba(c) {\n return `rgba(${abgrRed(c)},${abgrGreen(c)},${abgrBlue(c)},${abgrAlpha(c) / 255})`;\n}\nfunction normalizedRgbToCssRgba(c, alpha) {\n return `rgba(${Math.round(c[0] * 255)},${Math.round(c[1] * 255)},${Math.round(c[2] * 255)},${alpha})`;\n}\nfunction fadeAbgr(c, alpha) {\n return packAbgr(\n abgrRed(c),\n abgrGreen(c),\n abgrBlue(c),\n Math.round(abgrAlpha(c) * alpha)\n );\n}\nfunction brightenAbgr(c, factor) {\n const t = Math.max(0, 1 - 1 / factor);\n const lift = (v) => Math.round(v + (255 - v) * t);\n return packAbgr(\n lift(abgrRed(c)),\n lift(abgrGreen(c)),\n lift(abgrBlue(c)),\n abgrAlpha(c)\n );\n}\n\nexport {\n packAbgr,\n abgrRed,\n abgrGreen,\n abgrBlue,\n abgrAlpha,\n abgrToCssRgba,\n normalizedRgbToCssRgba,\n fadeAbgr,\n brightenAbgr\n};\n", "// src/referenceRampCss.ts\nvar REFERENCE_RAMP_MAX_HUE = 300;\nvar REFERENCE_RAMP_SATURATION = 0.7;\nvar REFERENCE_RAMP_LIGHTNESS = 0.5;\nfunction rampHueCss(hue) {\n return `hsl(${hue}, ${REFERENCE_RAMP_SATURATION * 100}%, ${REFERENCE_RAMP_LIGHTNESS * 100}%)`;\n}\nfunction rampHueAt(frac) {\n return Math.max(0, Math.min(1, frac)) * REFERENCE_RAMP_MAX_HUE;\n}\nfunction rampHue(bp, domain) {\n return rampHueAt((bp - domain.start) / (domain.end - domain.start));\n}\nvar HUE_STOP_DEG = 30;\nfunction rampStops({ start, bp, reversed }, domain) {\n const low = rampHue(start, domain);\n const high = rampHue(start + bp, domain);\n if (high - low < 1) {\n return [(low + high) / 2];\n }\n const n = Math.ceil((high - low) / HUE_STOP_DEG);\n return Array.from(\n { length: n + 1 },\n (_, i) => rampHue(start + bp * (reversed ? n - i : i) / n, domain)\n );\n}\nvar RAMP_GRADIENT_STOPS = Array.from({ length: 7 }, (_, i) => ({\n offset: i / 6,\n color: rampHueCss(i / 6 * REFERENCE_RAMP_MAX_HUE)\n}));\nvar RAMP_GRADIENT_CSS = `linear-gradient(to right, ${RAMP_GRADIENT_STOPS.map(\n (s) => `${s.color} ${s.offset * 100}%`\n).join(\", \")})`;\n\nexport {\n REFERENCE_RAMP_MAX_HUE,\n REFERENCE_RAMP_SATURATION,\n REFERENCE_RAMP_LIGHTNESS,\n rampHueCss,\n rampHueAt,\n rampHue,\n rampStops,\n RAMP_GRADIENT_STOPS,\n RAMP_GRADIENT_CSS\n};\n", "import {\n weakMemo\n} from \"./chunk-HMXCN6PG.js\";\nimport {\n edgeCurvesOf\n} from \"./chunk-ALGYCMMH.js\";\n\n// src/util/edgeCurves.ts\nvar cache = weakMemo();\nfunction baseEdgeCurves(nodePositions, graph, axis, deletions, version, routes, stranded = false) {\n return cache(\n nodePositions,\n [graph, axis.scaleX, axis.scaleY, deletions, routes, stranded, version],\n () => {\n const curves = /* @__PURE__ */ new Map();\n for (let ei = 0; ei < graph.edges.length; ei++) {\n const bypassed = deletions?.get(ei);\n const edgeCurves = edgeCurvesOf(\n nodePositions,\n graph.edges[ei],\n axis,\n bypassed,\n bypassed && routes?.[ei],\n stranded\n );\n if (edgeCurves) {\n curves.set(ei, edgeCurves);\n }\n }\n return curves;\n }\n );\n}\n\nexport {\n baseEdgeCurves\n};\n", "import {\n pushTo\n} from \"./chunk-BSOZW3FC.js\";\nimport {\n isBackbone\n} from \"./chunk-RJWPJCIB.js\";\n\n// src/referenceSpan.ts\nvar MAX_BACKBONE_HOPS = 4;\nfunction buildNeighbors(graph) {\n const neighbors = /* @__PURE__ */ new Map();\n for (const edge of graph.edges) {\n pushTo(neighbors, edge.from, edge.to);\n pushTo(neighbors, edge.to, edge.from);\n }\n return neighbors;\n}\nfunction flankingSpan({\n nodeId,\n nodeById,\n neighbors\n}) {\n const seen = /* @__PURE__ */ new Set([nodeId]);\n let frontier = [nodeId];\n let minEnd = Infinity;\n let maxStart = -Infinity;\n for (let hop = 0; hop < MAX_BACKBONE_HOPS && frontier.length > 0; hop++) {\n const next = [];\n for (const id of frontier) {\n const adjacent = neighbors.get(id);\n if (adjacent) {\n for (const neighborId of adjacent) {\n if (!seen.has(neighborId)) {\n seen.add(neighborId);\n const neighbor = nodeById.get(neighborId);\n if (neighbor && isBackbone(neighbor)) {\n minEnd = Math.min(minEnd, neighbor.stable.start + neighbor.length);\n maxStart = Math.max(maxStart, neighbor.stable.start);\n } else {\n next.push(neighborId);\n }\n }\n }\n }\n }\n frontier = next;\n }\n return minEnd === Infinity ? void 0 : {\n start: Math.min(minEnd, maxStart),\n end: Math.max(minEnd, maxStart)\n };\n}\nfunction nodeReferenceSpan({\n nodeId,\n nodeById,\n neighbors\n}) {\n const node = nodeById.get(nodeId);\n return node === void 0 ? void 0 : isBackbone(node) ? { start: node.stable.start, end: node.stable.start + node.length } : flankingSpan({ nodeId, nodeById, neighbors });\n}\nfunction referenceMidpoints(graph) {\n const nodeById = new Map(graph.nodes.map((node) => [node.id, node]));\n const neighbors = buildNeighbors(graph);\n const midpoints = /* @__PURE__ */ new Map();\n for (const node of graph.nodes) {\n const span = nodeReferenceSpan({ nodeId: node.id, nodeById, neighbors });\n if (span) {\n midpoints.set(node.id, (span.start + span.end) / 2);\n }\n }\n return midpoints;\n}\nfunction referencePositions(graph) {\n const positions = referenceMidpoints(graph);\n const neighbors = buildNeighbors(graph);\n let frontier = [...positions.keys()];\n while (frontier.length > 0) {\n const next = [];\n for (const id of frontier) {\n for (const neighborId of neighbors.get(id) ?? []) {\n if (!positions.has(neighborId)) {\n positions.set(neighborId, positions.get(id));\n next.push(neighborId);\n }\n }\n }\n frontier = next;\n }\n return positions;\n}\n\nexport {\n buildNeighbors,\n nodeReferenceSpan,\n referenceMidpoints,\n referencePositions\n};\n", "import {\n THREAD_PITCH_PX,\n THREAD_PX,\n bandScale,\n bandWidthPx,\n liftLanes,\n slotCentres,\n threadsPasses,\n walkSteps\n} from \"./chunk-YUIKEUKY.js\";\nimport {\n abgrToCssRgba,\n fadeAbgr,\n packAbgr\n} from \"./chunk-G2FD7S3C.js\";\nimport {\n REFERENCE_RAMP_LIGHTNESS,\n REFERENCE_RAMP_SATURATION,\n rampHueAt\n} from \"./chunk-GQZVR5DW.js\";\nimport {\n baseEdgeCurves\n} from \"./chunk-URPU4XCM.js\";\nimport {\n PATH_LIGHTNESS,\n PATH_SATURATION,\n nameHue,\n pathHueAt\n} from \"./chunk-ZULVAGVE.js\";\nimport {\n nodeWidthPx,\n walkLaneWidthPx,\n widthNorm\n} from \"./chunk-XWH4LB56.js\";\nimport {\n referenceMidpoints\n} from \"./chunk-L4DBSRA2.js\";\nimport {\n weakMemo\n} from \"./chunk-HMXCN6PG.js\";\nimport {\n dashSpans,\n pathRibbonOffsets,\n polylinePx,\n slideCurves,\n strandSides,\n translateCurves,\n yToXOf\n} from \"./chunk-JJV2GT2Z.js\";\nimport {\n pushTo\n} from \"./chunk-BSOZW3FC.js\";\nimport {\n isBackbone\n} from \"./chunk-RJWPJCIB.js\";\nimport {\n busiestEdge,\n edgeWidthFactor\n} from \"./chunk-DAEEMZ74.js\";\n\n// src/renderer/GeometryBuilder.ts\nvar EDGE_DEFAULT_COLOR = packAbgr(119, 119, 119, 217);\nvar EDGE_PATH_FALLBACK_COLOR = packAbgr(136, 136, 136, 217);\nvar EDGE_DELETION_COLOR = packAbgr(24, 24, 28, 240);\nvar DELETION_THICKNESS_FACTOR = 2.2;\nvar LIFT_BACKDROP_COLOR = packAbgr(160, 160, 160, 255);\nvar FADED_ALPHA = 0.18;\nvar MOVED_ALPHA = 0.45;\nvar LIFT_BACKDROP_CSS = abgrToCssRgba(\n fadeAbgr(LIFT_BACKDROP_COLOR, FADED_ALPHA)\n);\nvar DELETION_DASH_PX = 11;\nvar MIN_PATH_STRIPE_PX = 1.2;\nvar MIN_SCALE_FOR_OFFSET = 1e-6;\nvar ARROW_LENGTH_BASE_PX = 7;\nvar ARROW_LENGTH_PER_EDGE_PX = 3;\nvar ARROW_HALF_WIDTH_BASE_PX = 3;\nvar ARROW_HALF_WIDTH_PER_EDGE_PX = 1.5;\nvar MIN_LINK_HEADS = 3;\nvar MIN_ARROW_FIT = 0.5;\nvar MIN_ARROW_SCALE = 0.45;\nvar ARROW_CURVE_STEPS = 12;\nvar ABUTTING_PX = 1e-6;\nvar walkX = new Float64Array(64);\nvar walkY = new Float64Array(64);\nvar walkPx = new Float64Array(64);\nfunction backFromEnd(curves, scale, yToX, untilPx) {\n const most = curves.length * ARROW_CURVE_STEPS + 1;\n if (walkX.length < most) {\n walkX = new Float64Array(most);\n walkY = new Float64Array(most);\n walkPx = new Float64Array(most);\n }\n const last = curves[curves.length - 1];\n walkX[0] = last.x1;\n walkY[0] = last.y1;\n walkPx[0] = 0;\n let n = 1;\n let px = 0;\n for (let ci = curves.length - 1; ci >= 0 && px < untilPx; ci--) {\n const c = curves[ci];\n for (let k = 1; k <= ARROW_CURVE_STEPS && px < untilPx; k++) {\n const t = 1 - (k / ARROW_CURVE_STEPS) ** 2;\n const u = 1 - t;\n const a = u * u * u;\n const b = 3 * u * u * t;\n const d = 3 * u * t * t;\n const e = t * t * t;\n const x = a * c.x0 + b * c.cx0 + d * c.cx1 + e * c.x1;\n const y = a * c.y0 + b * c.cy0 + d * c.cy1 + e * c.y1;\n px += Math.hypot(x - walkX[n - 1], (y - walkY[n - 1]) * yToX) * scale;\n walkX[n] = x;\n walkY[n] = y;\n walkPx[n] = px;\n n++;\n }\n }\n return n;\n}\nfunction walkPointAt(n, px) {\n let i = 1;\n while (i < n - 1 && walkPx[i] < px) {\n i++;\n }\n const from = walkPx[i - 1];\n const to = walkPx[i];\n const f = to > from ? Math.min(1, Math.max(0, (px - from) / (to - from))) : 0;\n return {\n x: walkX[i - 1] + (walkX[i] - walkX[i - 1]) * f,\n y: walkY[i - 1] + (walkY[i] - walkY[i - 1]) * f\n };\n}\nfunction arrowheadFor({\n curves,\n edgeHalfWidth,\n nodeHalfWidth,\n scale,\n yToX,\n color,\n fromSegments,\n toSegments\n}) {\n const length = ARROW_LENGTH_BASE_PX + ARROW_LENGTH_PER_EDGE_PX * edgeHalfWidth;\n const n = backFromEnd(\n curves,\n scale,\n yToX,\n nodeHalfWidth + MIN_LINK_HEADS * length\n );\n const lengthPx = walkPx[n - 1];\n const abutting = lengthPx < ABUTTING_PX;\n const inset = Math.min(nodeHalfWidth, lengthPx);\n const fit = abutting ? Math.min(1, polylinePx(fromSegments, scale, scale * yToX) / length) : 1;\n if (abutting ? fit < MIN_ARROW_FIT : lengthPx < MIN_LINK_HEADS * length) {\n return void 0;\n }\n const tip = walkPointAt(n, inset);\n const base = walkPointAt(n, inset + length * fit);\n const dx = tip.x - base.x;\n const dy = (tip.y - base.y) * yToX;\n const last = curves[curves.length - 1];\n return {\n x: tip.x,\n y: tip.y,\n angle: Math.hypot(dx, dy) > 0 ? Math.atan2(dy, dx) : endTangent(last, yToX, intoDirection(last, toSegments)),\n length: length * fit,\n halfWidth: (ARROW_HALF_WIDTH_BASE_PX + ARROW_HALF_WIDTH_PER_EDGE_PX * edgeHalfWidth) * fit,\n color\n };\n}\nvar FIRST_THREADS = [[0, 0]];\nvar ONE_PASS = [0];\nvar NO_SHIFT = { dx: 0, dy: 0 };\nfunction nearerStart(at, segments, yToX) {\n const gap = (p) => Math.hypot(p.x - at.x, (p.y - at.y) * yToX);\n return gap(segments[0]) < gap(segments.at(-1));\n}\nfunction leavesStart(edge, segments, first, stranded, yToX) {\n return stranded ? strandSides(edge).from === \"start\" : nearerStart({ x: first.x0, y: first.y0 }, segments, yToX);\n}\nfunction intoDirection(last, toSegments) {\n if (toSegments.length < 2) {\n return void 0;\n }\n const first = toSegments[0];\n const final = toSegments[toSegments.length - 1];\n const atStart = Math.hypot(last.x1 - first.x, last.y1 - first.y) <= Math.hypot(last.x1 - final.x, last.y1 - final.y);\n return atStart ? { from: first, to: toSegments[1] } : { from: final, to: toSegments[toSegments.length - 2] };\n}\nfunction normal(a, b) {\n if (!a || !b) {\n return void 0;\n }\n const dx = b.x - a.x;\n const dy = b.y - a.y;\n const len = Math.hypot(dx, dy);\n return len > 0 ? { nx: -dy / len, ny: dx / len } : void 0;\n}\nvar MITRE_LIMIT = 0.1;\nvar LONGEST_NORMAL = 1 / Math.sqrt(MITRE_LIMIT);\nfunction pointNormalsOf(rawPoints, yToX = 1) {\n const points = yToX === 1 ? rawPoints : rawPoints.map((p) => ({ x: p.x, y: p.y * yToX }));\n return points.map((p, i) => {\n const before = normal(points[i - 1], p);\n const after = normal(p, points[i + 1]);\n if (before && after) {\n const nx = (before.nx + after.nx) / 2;\n const ny = (before.ny + after.ny) / 2;\n const dot = before.nx * nx + before.ny * ny;\n return dot > MITRE_LIMIT ? { nx: nx / dot, ny: ny / dot } : { nx, ny };\n }\n return before ?? after ?? { nx: 0, ny: 0 };\n });\n}\nfunction offsetPolyline(points, normals, distance, yToX = 1) {\n const out = new Array(points.length);\n for (let i = 0; i < points.length; i++) {\n const d = typeof distance === \"number\" ? distance : distance[i];\n out[i] = {\n x: points[i].x + normals[i].nx * d,\n y: points[i].y + normals[i].ny * d / yToX\n };\n }\n return out;\n}\nfunction hslToRgb(h, s, l) {\n const c = (1 - Math.abs(2 * l - 1)) * s;\n const x = c * (1 - Math.abs(h / 60 % 2 - 1));\n const m = l - c / 2;\n let r = 0;\n let g = 0;\n let b = 0;\n if (h < 60) {\n r = c;\n g = x;\n } else if (h < 120) {\n r = x;\n g = c;\n } else if (h < 180) {\n g = c;\n b = x;\n } else if (h < 240) {\n g = x;\n b = c;\n } else if (h < 300) {\n r = x;\n b = c;\n } else {\n r = c;\n b = x;\n }\n return [r + m, g + m, b + m];\n}\nfunction packHsl(h, s, l, a = 1) {\n const [r, g, b] = hslToRgb(h, s, l);\n return packAbgr(\n Math.round(r * 255),\n Math.round(g * 255),\n Math.round(b * 255),\n Math.round(a * 255)\n );\n}\nvar DEPTH_GRADIENT = [\n [68, 1, 84],\n [59, 82, 139],\n [33, 145, 140],\n [94, 201, 98],\n [253, 231, 37]\n];\nvar STABLE_RANK_GRADIENT = [\n [237, 137, 44],\n [158, 42, 122]\n];\nvar NODE_LENGTH_GRADIENT = [\n [220, 50, 50],\n [50, 120, 220]\n];\nfunction sampleGradient(stops, t) {\n const pos = Math.max(0, Math.min(1, t)) * (stops.length - 1);\n const i = Math.min(stops.length - 2, Math.floor(pos));\n const f = pos - i;\n const a = stops[i];\n const b = stops[i + 1];\n return packAbgr(\n Math.round(a[0] + (b[0] - a[0]) * f),\n Math.round(a[1] + (b[1] - a[1]) * f),\n Math.round(a[2] + (b[2] - a[2]) * f),\n 255\n );\n}\nfunction hashColor(str, alpha) {\n return packHsl(nameHue(str), PATH_SATURATION, PATH_LIGHTNESS, alpha);\n}\nvar REFERENCE_RAMP_ALT_RGB = [60, 65, 72];\nvar REFERENCE_RAMP_ALT_COLOR = packAbgr(...REFERENCE_RAMP_ALT_RGB, 255);\nvar REFERENCE_RAMP_ALT_CSS = `rgb(${REFERENCE_RAMP_ALT_RGB.join(\", \")})`;\nfunction rampFraction(node, ramp) {\n const mid = ramp.midpoints.get(node.id);\n return isBackbone(node) && mid !== void 0 ? (mid - ramp.start) / ramp.span : void 0;\n}\nfunction computeReferenceRamp(graph, domain) {\n const midpoints = referenceMidpoints(graph);\n if (domain && domain.end > domain.start) {\n return {\n start: domain.start,\n span: domain.end - domain.start,\n midpoints\n };\n }\n let min = Infinity;\n let max = -Infinity;\n for (const mid of midpoints.values()) {\n min = Math.min(min, mid);\n max = Math.max(max, mid);\n }\n return {\n start: min === Infinity ? 0 : min,\n span: max > min ? max - min : 1,\n midpoints\n };\n}\nfunction computeColorSchemeRange(graph, referenceRamp) {\n let minDepth = Infinity;\n let maxDepth = -Infinity;\n let minLength = Infinity;\n let maxLength = -Infinity;\n let maxRank = 0;\n for (const n of graph.nodes) {\n if (n.stable !== void 0 && n.stable.rank > maxRank) {\n maxRank = n.stable.rank;\n }\n if (n.depth < minDepth) {\n minDepth = n.depth;\n }\n if (n.depth > maxDepth) {\n maxDepth = n.depth;\n }\n if (n.length < minLength) {\n minLength = n.length;\n }\n if (n.length > maxLength) {\n maxLength = n.length;\n }\n }\n return {\n minDepth,\n maxDepth,\n minLength,\n maxLength,\n maxRank,\n nodeCount: graph.nodes.length,\n referenceRamp\n };\n}\nfunction getNodeColor(node, nodeIndex, colorScheme, range) {\n switch (colorScheme) {\n case \"random\":\n return hashColor(node.id, 1);\n case \"depth\":\n return sampleGradient(\n DEPTH_GRADIENT,\n range.maxDepth > range.minDepth ? (node.depth - range.minDepth) / (range.maxDepth - range.minDepth) : 0.5\n );\n case \"node-length\":\n return sampleGradient(\n NODE_LENGTH_GRADIENT,\n range.maxLength > range.minLength ? (node.length - range.minLength) / (range.maxLength - range.minLength) : 0.5\n );\n // rGFA states the backbone rather than leaving it to be inferred: rank 0 is\n // the reference, higher ranks are the sequence that diverges from it. A\n // graph with no SR tags draws every node as unranked.\n case \"stable-rank\":\n return node.stable === void 0 ? packAbgr(160, 160, 160, 255) : node.stable.rank === 0 ? packAbgr(52, 152, 219, 255) : sampleGradient(\n STABLE_RANK_GRADIENT,\n range.maxRank > 1 ? (node.stable.rank - 1) / (range.maxRank - 1) : 0\n );\n // Position on the reference, the one quantity both panels of a\n // graph-over-linear figure can state, so only the backbone takes a hue\n case \"reference-position\": {\n const ramp = range.referenceRamp;\n if (ramp === void 0) {\n return packAbgr(160, 160, 160, 255);\n }\n const t = rampFraction(node, ramp);\n return t === void 0 ? REFERENCE_RAMP_ALT_COLOR : packHsl(\n rampHueAt(t),\n REFERENCE_RAMP_SATURATION,\n REFERENCE_RAMP_LIGHTNESS\n );\n }\n case \"grey\":\n return packAbgr(160, 160, 160, 255);\n case \"rainbow\": {\n const hue = range.nodeCount > 1 ? nodeIndex / range.nodeCount * 360 : 0;\n return packHsl(hue, 0.75, 0.5);\n }\n default:\n return packAbgr(52, 152, 219, 255);\n }\n}\nfunction endTangent(c, yToX = 1, into) {\n const candidates = [\n [c.cx1, c.cy1],\n [c.cx0, c.cy0],\n [c.x0, c.y0]\n ];\n for (const [x, y] of candidates) {\n const dx = c.x1 - x;\n const dy = (c.y1 - y) * yToX;\n if (Math.hypot(dx, dy) > 0) {\n return Math.atan2(dy, dx);\n }\n }\n return into ? Math.atan2((into.to.y - into.from.y) * yToX, into.to.x - into.from.x) : 0;\n}\nfunction isPolylineInBounds(segments, bounds) {\n let hit = false;\n for (let i = 0; i < segments.length - 1 && !hit; i++) {\n const a = segments[i];\n const b = segments[i + 1];\n hit = Math.max(a.x, b.x) >= bounds.minX && Math.min(a.x, b.x) <= bounds.maxX && Math.max(a.y, b.y) >= bounds.minY && Math.min(a.y, b.y) <= bounds.maxY;\n }\n return hit;\n}\nfunction isBezierInBounds(curves, bounds, growX = 0, growY = 0) {\n for (const c of curves) {\n const cMinX = Math.min(c.x0, c.cx0, c.cx1, c.x1);\n const cMaxX = Math.max(c.x0, c.cx0, c.cx1, c.x1);\n const cMinY = Math.min(c.y0, c.cy0, c.cy1, c.y1);\n const cMaxY = Math.max(c.y0, c.cy0, c.cy1, c.y1);\n if (cMaxX >= bounds.minX - growX && cMinX <= bounds.maxX + growX && cMaxY >= bounds.minY - growY && cMinY <= bounds.maxY + growY) {\n return true;\n }\n }\n return false;\n}\nvar paletteCache = /* @__PURE__ */ new WeakMap();\nfunction pathPaletteOf(graph) {\n let palette = paletteCache.get(graph);\n if (!palette) {\n const pathColorByIndex = [];\n const pathIndexByName = /* @__PURE__ */ new Map();\n const paths = graph.paths ?? [];\n for (let i = 0; i < paths.length; i++) {\n pathColorByIndex.push(\n packHsl(\n pathHueAt(i, paths.length),\n PATH_SATURATION,\n PATH_LIGHTNESS,\n 0.85\n )\n );\n if (!pathIndexByName.has(paths[i].name)) {\n pathIndexByName.set(paths[i].name, i);\n }\n }\n palette = { pathColorByIndex, pathIndexByName };\n paletteCache.set(graph, palette);\n }\n return palette;\n}\nvar slotsCache = /* @__PURE__ */ new WeakMap();\nvar NO_SLOTS = /* @__PURE__ */ new Map();\nfunction pathSlotsOf(graph) {\n let slots = slotsCache.get(graph);\n if (!slots) {\n slots = /* @__PURE__ */ new Map();\n for (const [pathIdx, path] of (graph.paths ?? []).entries()) {\n for (const nodeId of new Set(path.nodeIds)) {\n pushTo(slots, nodeId, pathIdx);\n }\n }\n slotsCache.set(graph, slots);\n }\n return slots;\n}\nvar lanesCache = weakMemo();\nvar stepsCache = weakMemo();\nvar linksCache = /* @__PURE__ */ new WeakMap();\nfunction linksOf(graph) {\n let links = linksCache.get(graph);\n if (!links) {\n links = /* @__PURE__ */ new Map();\n for (const { from, to } of graph.edges) {\n let out = links.get(from);\n if (!out) {\n out = /* @__PURE__ */ new Set();\n links.set(from, out);\n }\n out.add(to);\n }\n linksCache.set(graph, links);\n }\n return links;\n}\nfunction buildGeometry(options) {\n const {\n nodePositions,\n graph,\n nodeById,\n colorScheme,\n contigThickness,\n connectorThickness,\n drawPaths,\n nodeWidth = \"uniform\",\n edgeWidth = \"uniform\",\n highlight,\n axis,\n linearLayout,\n viewportBounds,\n referenceRamp,\n deletions,\n deletionRoutes,\n stranded,\n hiddenEdges,\n version = 0\n } = options;\n const widthScale = widthNorm(graph, nodeWidth);\n const busiest = edgeWidth === \"walks\" ? busiestEdge(graph) : 0;\n const scale = axis.scaleX;\n const worldPerScreenPx = 1 / Math.max(scale, MIN_SCALE_FOR_OFFSET);\n const yToX = yToXOf(axis);\n const sharedCurves = baseEdgeCurves(\n nodePositions,\n graph,\n axis,\n deletions,\n version,\n deletionRoutes,\n stranded\n );\n const nodeStrokes = [];\n const nodeStrokeRuns = /* @__PURE__ */ new Map();\n const arrows = [];\n const arrowRuns = /* @__PURE__ */ new Map();\n const edgeCurves = [];\n const edgeCurveRuns = /* @__PURE__ */ new Map();\n const colorRange = computeColorSchemeRange(graph, referenceRamp);\n const nodeIndexMap = /* @__PURE__ */ new Map();\n if (colorScheme === \"rainbow\") {\n for (let i = 0; i < graph.nodes.length; i++) {\n nodeIndexMap.set(graph.nodes[i].id, i);\n }\n }\n const pathCount = graph.paths?.length ?? 0;\n const { pathColorByIndex, pathIndexByName } = pathPaletteOf(graph);\n const pathColorByName = (name) => pathColorByIndex[pathIndexByName.get(name) ?? -1] ?? EDGE_PATH_FALLBACK_COLOR;\n const nodePathSlots = drawPaths && pathCount > 1 ? pathSlotsOf(graph) : NO_SLOTS;\n const liftedWalks = highlight?.walks ?? [];\n const threaded = threadsPasses(liftedWalks);\n const lanePasses = liftedWalks.map((w) => w.mostPasses);\n const thinned = threaded ? bandScale(lanePasses) : 1;\n const fields = highlight && liftedWalks.length > 1 ? lanesCache(\n highlight,\n [nodePositions, version, axis.scaleX, axis.scaleY],\n () => liftLanes(\n liftedWalks,\n nodePositions,\n yToX,\n worldPerScreenPx,\n stepsCache(\n highlight,\n [nodePositions, version],\n () => walkSteps(\n liftedWalks.map((w) => w.route),\n nodePositions\n )\n )\n )\n ) : void 0;\n const lines = fields?.lines;\n const threads = fields?.threads;\n const spanField = fields?.spans;\n const plainCentres = threaded ? slotCentres(lanePasses, lanePasses) : [];\n const centresByNode = /* @__PURE__ */ new Map();\n const centresOf = (nodeId) => {\n let centres = centresByNode.get(nodeId);\n if (!centres) {\n const spans = spanField?.get(nodeId);\n centres = spans ? slotCentres(spans.slot, lanePasses, spans.held) : plainCentres;\n centresByNode.set(nodeId, centres);\n }\n return centres;\n };\n const laneOffset = (nodeId, laneWidth, lane, pass) => threaded ? (centresOf(nodeId)[lane] + pass * THREAD_PITCH_PX) * thinned : (lane - (liftedWalks.length - 1) / 2) * laneWidth;\n const threadOffsetAt = (frame, at, fallback) => {\n const eased = frame?.offsets?.[at] ?? frame?.offset;\n return eased === void 0 ? fallback : eased * thinned;\n };\n const laneHalfWidth = (laneWidth) => threaded ? THREAD_PX / 2 * thinned : laneWidth / 2;\n const plainNormals = /* @__PURE__ */ new Map();\n const visitNormals = /* @__PURE__ */ new WeakMap();\n const visitOf = (lane, nodeId, thread) => threads?.[lane]?.threadPasses.get(nodeId)?.[thread] ?? 0;\n const plainNormalsOf = (nodeId, segments) => {\n let normals = plainNormals.get(nodeId);\n if (!normals) {\n normals = pointNormalsOf(segments, yToX);\n plainNormals.set(nodeId, normals);\n }\n return normals;\n };\n const laneNormalsOf = (nodeId, segments, frame) => {\n if (!frame) {\n return plainNormalsOf(nodeId, segments);\n }\n let normals = visitNormals.get(frame.normals);\n if (!normals) {\n normals = plainNormalsOf(nodeId, segments).map(\n (n, i) => frame.normals[i] ?? n\n );\n visitNormals.set(frame.normals, normals);\n }\n return normals;\n };\n const laneWidths = /* @__PURE__ */ new Map();\n const laneWidthOf = (id) => {\n let width = laneWidths.get(id);\n if (width === void 0) {\n const node = nodeById.get(id);\n width = walkLaneWidthPx(\n node ? nodeWidthPx(node, contigThickness, nodeWidth, widthScale) : contigThickness,\n liftedWalks.length\n );\n laneWidths.set(id, width);\n }\n return width;\n };\n const laneEndOf = (id, frames, segments, atStart, lane, thread) => {\n const at = atStart ? 0 : segments.length - 1;\n const frame = frames?.[lane]?.[visitOf(lane, id, thread)];\n const eased = frame?.offsets?.[at] ?? frame?.offset;\n return {\n normal: frame?.normals[at] ?? plainNormalsOf(id, segments)[at] ?? { nx: 0, ny: 0 },\n shift: frame?.shifts[at] ?? NO_SHIFT,\n offset: eased === void 0 ? laneOffset(id, laneWidthOf(id), lane, thread) : eased * thinned\n };\n };\n const lanesMayShow = (curves, fromId) => {\n if (!viewportBounds) {\n return true;\n }\n const offset = threaded ? bandWidthPx(lanePasses) * thinned : (liftedWalks.length - 1) / 2 * laneWidthOf(fromId);\n const reach = LONGEST_NORMAL * offset * worldPerScreenPx;\n return isBezierInBounds(\n curves,\n viewportBounds,\n reach + (fields?.furthestShift.dx ?? 0),\n reach / yToX + (fields?.furthestShift.dy ?? 0)\n );\n };\n const threadPairs = (lane, from, to) => {\n const own = threads?.[lane]?.linkThreads;\n if (!own?.size) {\n return FIRST_THREADS;\n }\n const ahead = own.get(from)?.get(to);\n const back = linksOf(graph).get(to)?.has(from) ? void 0 : own.get(to)?.get(from);\n if (!back) {\n return ahead ?? FIRST_THREADS;\n }\n const turned = back.map(([a, b]) => [b, a]);\n return ahead ? [...ahead, ...turned] : turned;\n };\n const threadColor = (lane, nodeId, thread) => liftedWalks[lane]?.passColors.get(nodeId)?.[threads?.[lane]?.threadPasses.get(nodeId)?.[thread] ?? 0];\n const visitPoints = /* @__PURE__ */ new WeakMap();\n const lanePointsOf = (segments, frame) => {\n if (!frame || !threaded) {\n return segments;\n }\n let points = visitPoints.get(frame.shifts);\n if (!points) {\n const { shifts } = frame;\n points = segments.map((p, i) => {\n const { dx, dy } = shifts[i] ?? NO_SHIFT;\n return { ...p, x: p.x + dx, y: p.y + dy };\n });\n visitPoints.set(frame.shifts, points);\n }\n return points;\n };\n const showArrows = scale > (linearLayout ? 1 : MIN_ARROW_SCALE);\n for (let ei = 0; ei < graph.edges.length; ei++) {\n const edge = graph.edges[ei];\n const fromSegments = nodePositions[edge.from];\n const toSegments = nodePositions[edge.to];\n const baseCurves = sharedCurves.get(ei);\n if (!fromSegments?.length || !toSegments?.length || !baseCurves || hiddenEdges?.has(ei)) {\n continue;\n }\n const numPaths = edge.pathIds?.length ?? 0;\n const bypassed = deletions?.get(ei);\n const isDeletion = bypassed !== void 0;\n const onWalk = highlight?.edgeIndexes.has(ei) ?? false;\n const ribbonThickness = connectorThickness / 2 * (isDeletion ? DELETION_THICKNESS_FACTOR : 1);\n const walkFactor = edgeWidthFactor(numPaths, busiest, edgeWidth);\n const edgeThickness = connectorThickness / 2 * (!isDeletion ? walkFactor : edgeWidth === \"walks\" && busiest > 0 ? Math.max(1, walkFactor) : DELETION_THICKNESS_FACTOR);\n const ribbons = drawPaths && numPaths > 0;\n const plainEdgeColor = isDeletion ? EDGE_DELETION_COLOR : EDGE_DEFAULT_COLOR;\n const edgeColor = !highlight || onWalk ? plainEdgeColor : fadeAbgr(plainEdgeColor, FADED_ALPHA);\n const toNode = nodeById.get(edge.to);\n const intoHalfWidth = (toNode ? nodeWidthPx(toNode, contigThickness, nodeWidth, widthScale) : contigThickness) / 2;\n const inView = (curves) => !viewportBounds || isBezierInBounds(curves, viewportBounds);\n const dashesOf = (curves) => dashSpans(curves, DELETION_DASH_PX / scale, yToX, viewportBounds);\n const stroke = (curves, thickness, color) => {\n if (!isDeletion) {\n edgeCurves.push({ curves, thickness, color });\n return;\n }\n for (const dash of dashesOf(curves)) {\n edgeCurves.push({ curves: dash.curves, thickness, color });\n }\n };\n const laneStroke = (curves, thickness, color, walk, pass, normal2, offsetX, endNormal, endOffsetX) => {\n edgeCurves.push({\n curves,\n thickness,\n color,\n walk,\n pass,\n normal: normal2,\n offsetX,\n endNormal,\n endOffsetX\n });\n };\n const arrowOn = (curves) => {\n const head = showArrows ? arrowheadFor({\n curves,\n edgeHalfWidth: isDeletion || ribbons ? connectorThickness / 2 : edgeThickness,\n nodeHalfWidth: intoHalfWidth,\n scale,\n yToX,\n color: edgeColor,\n fromSegments,\n toSegments\n }) : void 0;\n if (head) {\n arrows.push(head);\n }\n };\n const edgeCurveStart = edgeCurves.length;\n const arrowStart = arrows.length;\n const laneWalks = highlight?.walks.length && onWalk && !ribbons ? highlight.walks : void 0;\n if (laneWalks && !lanesMayShow(baseCurves, edge.from)) {\n continue;\n }\n if (laneWalks) {\n const fromAtStart = leavesStart(\n edge,\n fromSegments,\n baseCurves[0],\n stranded,\n yToX\n );\n const last = baseCurves.at(-1);\n const toAtStart = nearerStart(\n { x: last.x1, y: last.y1 },\n toSegments,\n yToX\n );\n const single = laneWalks.length === 1;\n const thickness = laneHalfWidth(laneWidthOf(edge.from));\n const fromFrames = lines?.frames.get(edge.from);\n const toFrames = lines?.frames.get(edge.to);\n for (let lane = 0; lane < laneWalks.length; lane++) {\n const walk = laneWalks[lane];\n if (!walk.edgeIndexes.has(ei)) {\n continue;\n }\n for (const [pass, toPass] of threadPairs(lane, edge.from, edge.to)) {\n const from = laneEndOf(\n edge.from,\n fromFrames,\n fromSegments,\n fromAtStart,\n lane,\n pass\n );\n const to = threaded ? laneEndOf(edge.to, toFrames, toSegments, toAtStart, lane, toPass) : from;\n const offsetX = single ? 0 : from.offset * worldPerScreenPx;\n const endOffsetX = threaded ? to.offset * worldPerScreenPx : offsetX;\n const curves = threaded ? slideCurves(\n baseCurves,\n from.shift.dx + from.normal.nx * offsetX,\n from.shift.dy + from.normal.ny * offsetX / yToX,\n to.shift.dx + to.normal.nx * endOffsetX,\n to.shift.dy + to.normal.ny * endOffsetX / yToX\n ) : offsetX === 0 ? baseCurves : translateCurves(\n baseCurves,\n from.normal.nx * offsetX,\n from.normal.ny * offsetX / yToX\n );\n if (inView(curves)) {\n laneStroke(\n curves,\n thickness,\n threadColor(lane, edge.from, pass) ?? threadColor(lane, edge.to, toPass) ?? plainEdgeColor,\n lane,\n pass,\n from.normal,\n offsetX,\n to.normal,\n endOffsetX\n );\n }\n }\n }\n if (edgeCurves.length > edgeCurveStart) {\n arrowOn(baseCurves);\n }\n } else if (!ribbons) {\n if (inView(baseCurves)) {\n stroke(baseCurves, edgeThickness, edgeColor);\n arrowOn(baseCurves);\n }\n } else {\n const offsets = pathRibbonOffsets(\n fromSegments,\n toSegments,\n numPaths,\n axis\n );\n const arrowRibbon = Math.floor((numPaths - 1) / 2);\n for (let pathIdx = 0; pathIdx < numPaths; pathIdx++) {\n const { x, y } = offsets[pathIdx];\n const curves = x === 0 && y === 0 ? baseCurves : translateCurves(baseCurves, x, y);\n if (!inView(curves)) {\n continue;\n }\n const ribbonColor = pathColorByName(edge.pathIds[pathIdx]);\n stroke(\n curves,\n ribbonThickness,\n highlight && (highlight.walks.length ? !highlight.names.has(edge.pathIds[pathIdx]) : !onWalk) ? fadeAbgr(ribbonColor, FADED_ALPHA) : ribbonColor\n );\n if (pathIdx === arrowRibbon) {\n arrowOn(curves);\n }\n }\n }\n const edgeCurveCount = edgeCurves.length - edgeCurveStart;\n if (edgeCurveCount > 0) {\n edgeCurveRuns.set(ei, { start: edgeCurveStart, count: edgeCurveCount });\n }\n const arrowCount = arrows.length - arrowStart;\n if (arrowCount > 0) {\n arrowRuns.set(ei, { start: arrowStart, count: arrowCount });\n }\n }\n for (const [nodeId, segments] of Object.entries(nodePositions)) {\n const node = nodeById.get(nodeId);\n if (!node) {\n continue;\n }\n if (viewportBounds && !isPolylineInBounds(segments, viewportBounds)) {\n continue;\n }\n const faded = highlight !== void 0 && !highlight.nodeIds.has(nodeId);\n const own = faded ? LIFT_BACKDROP_COLOR : getNodeColor(\n node,\n nodeIndexMap.get(nodeId) ?? 0,\n colorScheme,\n colorRange\n );\n const color = faded ? fadeAbgr(own, FADED_ALPHA) : node.moved ? fadeAbgr(own, MOVED_ALPHA) : own;\n const width = nodeWidthPx(node, contigThickness, nodeWidth, widthScale);\n const nodeThickness = width / 2;\n const start = nodeStrokes.length;\n const slots = nodePathSlots.get(nodeId);\n const slotWidth = width / pathCount;\n const drawable = segments.length >= 2;\n const lanes = highlight?.walks.length && !faded && !slots?.length ? highlight.walks : void 0;\n if (drawable && lanes) {\n const laneWidth = walkLaneWidthPx(width, lanes.length);\n const thickness = laneHalfWidth(laneWidth);\n const frames = lines?.frames.get(nodeId);\n for (let lane = 0; lane < lanes.length; lane++) {\n const laneColor = lanes[lane].colors.get(nodeId);\n if (laneColor === void 0) {\n continue;\n }\n const onThreads = threads?.[lane]?.nodeThreads.get(nodeId) ?? ONE_PASS;\n for (const pass of onThreads) {\n const color2 = threadColor(lane, nodeId, pass) ?? laneColor;\n if (lanes.length === 1) {\n nodeStrokes.push({\n points: segments,\n thickness,\n color: color2,\n walk: lane,\n pass\n });\n continue;\n }\n const frame = frames?.[lane]?.[visitOf(lane, nodeId, pass)];\n const normals = laneNormalsOf(nodeId, segments, frame);\n const points = lanePointsOf(segments, frame);\n const plain = laneOffset(nodeId, laneWidth, lane, pass);\n const offsets = frame?.offsets?.map(\n (o) => o * thinned * worldPerScreenPx\n );\n const offsetX = offsets ? offsets[Math.floor(offsets.length / 2)] : threadOffsetAt(frame, 0, plain) * worldPerScreenPx;\n nodeStrokes.push({\n points: offsetPolyline(points, normals, offsets ?? offsetX, yToX),\n thickness,\n color: color2,\n walk: lane,\n pass,\n normals,\n offsetX,\n ...offsets && { offsets }\n });\n }\n }\n } else if (drawable && slots?.length && slotWidth >= MIN_PATH_STRIPE_PX) {\n const normals = pointNormalsOf(segments, yToX);\n for (const slot of slots) {\n const offset = (slot - (pathCount - 1) / 2) * slotWidth * worldPerScreenPx;\n const stripe = pathColorByIndex[slot] ?? EDGE_PATH_FALLBACK_COLOR;\n nodeStrokes.push({\n points: offsetPolyline(segments, normals, offset, yToX),\n thickness: slotWidth / 2,\n // a node off the lifted walk fades whichever way it is painted\n color: faded ? fadeAbgr(stripe, FADED_ALPHA) : stripe\n });\n }\n } else if (drawable) {\n nodeStrokes.push({ points: segments, thickness: nodeThickness, color });\n }\n const count = nodeStrokes.length - start;\n if (count > 0) {\n nodeStrokeRuns.set(nodeId, { start, count });\n }\n }\n return {\n nodeStrokes,\n nodeStrokeRuns,\n arrows,\n arrowRuns,\n edgeCurves,\n edgeCurveRuns\n };\n}\n\nexport {\n LIFT_BACKDROP_COLOR,\n FADED_ALPHA,\n LIFT_BACKDROP_CSS,\n hslToRgb,\n REFERENCE_RAMP_ALT_COLOR,\n REFERENCE_RAMP_ALT_CSS,\n rampFraction,\n computeReferenceRamp,\n computeColorSchemeRange,\n getNodeColor,\n endTangent,\n buildGeometry\n};\n", "import {\n REFERENCE_RAMP_ALT_COLOR,\n hslToRgb\n} from \"./chunk-XF2NS52W.js\";\nimport {\n packAbgr\n} from \"./chunk-G2FD7S3C.js\";\nimport {\n REFERENCE_RAMP_LIGHTNESS,\n REFERENCE_RAMP_SATURATION,\n rampHueAt\n} from \"./chunk-GQZVR5DW.js\";\n\n// src/walkEncoding.ts\nvar WALK_FIELDS = [\n { value: \"progress\", label: \"Progress along the walk\" },\n { value: \"walk\", label: \"One colour for the walk\" },\n { value: \"reference\", label: \"Reference position\" }\n];\nvar WALK_SCHEMES = [\n { value: \"grey\", label: \"Grey to black\", ends: [\"#a3a3a3\", \"#151515\"] },\n { value: \"blue\", label: \"Cyan to navy\", ends: [\"#6ee0f0\", \"#0b2c7a\"] },\n { value: \"red\", label: \"Yellow to red\", ends: [\"#ffd24a\", \"#b3121b\"] },\n { value: \"purple\", label: \"Pink to plum\", ends: [\"#f5a3d8\", \"#5e1a6e\"] },\n { value: \"green\", label: \"Lime to forest\", ends: [\"#b6e36c\", \"#0b5d3b\"] },\n { value: \"orange\", label: \"Peach to rust\", ends: [\"#ffc285\", \"#8f3a00\"] },\n { value: \"rainbow\", label: \"Rainbow\" }\n];\nvar FAMILIES = [\"blue\", \"red\", \"purple\", \"green\"];\nvar isField = (v) => WALK_FIELDS.some((f) => f.value === v);\nvar isScheme = (v) => WALK_SCHEMES.some((s) => s.value === v);\nfunction resolveEncoding(layer, reference, picked, alone = true) {\n const { field: askedField, scheme: askedScheme } = layer.color ?? {};\n const field = isField(askedField) ? askedField : alone ? \"progress\" : \"walk\";\n const family = reference ? \"grey\" : FAMILIES[picked % FAMILIES.length];\n const scheme = isScheme(askedScheme) ? askedScheme === \"rainbow\" && field !== \"reference\" ? family : askedScheme : family;\n const round = Math.floor(picked / FAMILIES.length) % SHADES.length;\n return field === \"walk\" && scheme === family && round > 0 ? { field, scheme, shade: SHADES[round] } : alone || field === \"walk\" ? { field, scheme } : { field, scheme, darkest: TOGETHER_DARKEST };\n}\nvar TOGETHER_DARKEST = 0.55;\nvar BASE_T = 0.5;\nvar SHADES = [BASE_T, 0.85, 0.2];\nvar STRETCH_GAP = 0.08;\nvar rampsOn = ({ field, scheme }) => field !== \"walk\" && scheme !== \"rainbow\";\nfunction splitFamilies(encodings) {\n const counts = /* @__PURE__ */ new Map();\n for (const e of encodings) {\n if (rampsOn(e)) {\n counts.set(e.scheme, (counts.get(e.scheme) ?? 0) + 1);\n }\n }\n const seen = /* @__PURE__ */ new Map();\n return encodings.map((e) => {\n const k = rampsOn(e) ? counts.get(e.scheme) : 1;\n if (k < 2) {\n return e;\n }\n const j = seen.get(e.scheme) ?? 0;\n seen.set(e.scheme, j + 1);\n const half = STRETCH_GAP / 2;\n return {\n ...e,\n stretch: [\n j / k + (j > 0 ? half : 0),\n (j + 1) / k - (j < k - 1 ? half : 0)\n ]\n };\n });\n}\nvar along = ({ stretch }, t) => stretch ? stretch[0] + (stretch[1] - stretch[0]) * t : t;\nvar toLinear = (c) => c <= 0.04045 ? c / 12.92 : ((c + 0.055) / 1.055) ** 2.4;\nvar toGamma = (c) => c <= 31308e-7 ? c * 12.92 : 1.055 * c ** (1 / 2.4) - 0.055;\nfunction oklab(hex) {\n const [r, g, b] = [1, 3, 5].map(\n (i) => toLinear(Number.parseInt(hex.slice(i, i + 2), 16) / 255)\n );\n const l = Math.cbrt(0.4122214708 * r + 0.5363325363 * g + 0.0514459929 * b);\n const m = Math.cbrt(0.2119034982 * r + 0.6806995451 * g + 0.1073969566 * b);\n const s = Math.cbrt(0.0883024619 * r + 0.2817188376 * g + 0.6299787005 * b);\n return [\n 0.2104542553 * l + 0.793617785 * m - 0.0040720468 * s,\n 1.9779984951 * l - 2.428592205 * m + 0.4505937099 * s,\n 0.0259040371 * l + 0.7827717662 * m - 0.808675766 * s\n ];\n}\nfunction oklabToRgb([L, a, b]) {\n const l = (L + 0.3963377774 * a + 0.2158037573 * b) ** 3;\n const m = (L - 0.1055613458 * a - 0.0638541728 * b) ** 3;\n const s = (L - 0.0894841775 * a - 1.291485548 * b) ** 3;\n return [\n 4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s,\n -1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s,\n -0.0041960863 * l - 0.7034186147 * m + 1.707614701 * s\n ].map((c) => toGamma(Math.max(0, Math.min(1, c))) * 255);\n}\nvar endsCache = /* @__PURE__ */ new Map();\nfunction oklabEnds(scheme) {\n if (!endsCache.has(scheme)) {\n const family = WALK_SCHEMES.find((s) => s.value === scheme);\n endsCache.set(\n scheme,\n family && \"ends\" in family ? family.ends.map(oklab) : void 0\n );\n }\n return endsCache.get(scheme);\n}\nfunction schemeRgb(scheme, t, darkest = 0) {\n const x = Math.max(0, Math.min(1, t));\n const ends = oklabEnds(scheme);\n if (!ends) {\n return hslToRgb(\n rampHueAt(x),\n REFERENCE_RAMP_SATURATION,\n REFERENCE_RAMP_LIGHTNESS\n ).map((c) => c * 255);\n }\n const [from, to] = ends;\n const light = from[0];\n const dark = to[0];\n const reach = dark < darkest && light > darkest ? (light - darkest) / (light - dark) : 1;\n return oklabToRgb(from.map((v, i) => v + (to[i] - v) * x * reach));\n}\nfunction schemeCss(scheme, t, darkest) {\n const [r, g, b] = schemeRgb(scheme, t, darkest).map(Math.round);\n return `rgb(${r}, ${g}, ${b})`;\n}\nfunction schemeColor(scheme, t, darkest) {\n const [r, g, b] = schemeRgb(scheme, t, darkest).map(Math.round);\n return packAbgr(r, g, b, 255);\n}\nfunction encodedColor(encoding, t) {\n const { field, scheme, darkest, shade = BASE_T } = encoding;\n return field === \"walk\" ? schemeColor(scheme, shade) : t === void 0 ? NO_VALUE_COLOR : schemeColor(scheme, along(encoding, t), darkest);\n}\nvar NO_VALUE_COLOR = REFERENCE_RAMP_ALT_COLOR;\nfunction encodingStops(encoding) {\n const { field, scheme, darkest, shade = BASE_T } = encoding;\n const stop = (offset, t) => ({\n offset,\n color: schemeCss(scheme, t, darkest),\n abgr: schemeColor(scheme, t, darkest)\n });\n return field === \"walk\" ? [stop(0, shade)] : Array.from({ length: 7 }, (_, i) => stop(i / 6, along(encoding, i / 6)));\n}\nfunction encodingSwatchCss(encoding) {\n const stops = encodingStops(encoding);\n return stops.length === 1 ? stops[0].color : `linear-gradient(to right, ${stops.map((s) => `${s.color} ${s.offset * 100}%`).join(\", \")})`;\n}\n\nexport {\n WALK_FIELDS,\n WALK_SCHEMES,\n resolveEncoding,\n splitFamilies,\n schemeRgb,\n schemeCss,\n schemeColor,\n encodedColor,\n NO_VALUE_COLOR,\n encodingStops,\n encodingSwatchCss\n};\n"],
|
|
5
5
|
"mappings": "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",
|
|
6
6
|
"names": ["THREAD_PX", "THREAD_GAP_PX", "SLOT_GAP_PX", "LANE_SMOOTHING_PX", "THREAD_REACH_PX", "THREAD_TAPER_PX", "MAX_BAND_PX", "PASSES_KEY", "threadsPasses", "walks", "w", "threadsWidth", "threads", "sum", "values", "a", "b", "slotLayout", "spans", "mostPasses", "laneWidth", "widths", "m", "i", "seen", "gaps", "share", "gap", "THREAD_PITCH_PX", "slotCentres", "held", "band", "at", "width", "slack", "centre", "bandWidthPx", "bandScale", "passesKey", "pointIndex", "run", "p", "i", "k", "gapOf", "a", "b", "dx", "dy", "arcOf", "s", "walkSteps", "walkRoutes", "nodePositions", "seen", "routes", "visits", "route", "id", "visit", "segments", "owned", "laneRuns", "steps", "yToX", "jump", "runs", "pieces", "walk", "total", "piece", "xs", "ys", "at", "from", "fresh", "breakRun", "stepOf", "gap", "x", "y", "first", "last", "forward", "toFirst", "toLast", "next", "toNext", "j", "ownedWindows", "margin", "windows", "floor", "lo", "hi", "smoothedNormals", "reach", "end", "pointAt", "span", "f", "_", "back", "ahead", "len", "cutCurls", "close", "length", "out", "picks", "to", "j2", "q", "rounded", "half", "n", "sumW", "sumX", "sumY", "w", "tightPoints", "line", "radius", "tight", "along", "twice", "loosened", "t", "pass", "part", "local", "weight", "windowMean", "smoother", "runSigns", "own", "canonical", "settle", "agreement", "sum2", "decided", "pending", "theirs", "mine", "laneLines", "band", "smooth", "turn", "curl", "context", "frames", "firsts", "arcs", "stepFrames", "newFrame", "place", "byWalk", "r", "ids", "starts", "raw", "firstRun", "firstStep", "firstFrame", "plus", "minus", "d", "shared", "reachFrom", "reachTo", "backward", "apart", "points", "normals", "sign", "index", "m", "px", "py", "shift", "windowed", "v", "deque", "head", "counted", "sumWV", "ONE_THREAD", "repeats", "passes", "walkThreads", "widths", "stepVisits", "stepWants", "stepGlides", "nodes", "mid", "most", "copy", "before", "after", "wants", "glides", "nearest", "want", "taken", "threadOf", "free", "width", "c", "glideOf", "glide", "nodeThreads", "threadPasses", "threadAt", "passOf", "thread", "linkThreads", "pair", "list", "bandSpans", "spans", "taper", "middle", "eased", "e", "easeOffsets", "threads", "plain", "slotCentres", "byNode", "centresAt", "centres", "THREAD_PITCH_PX", "frame", "constant", "offsets", "liftLanes", "walks", "worldPerScreenPx", "threaded", "threadsPasses", "THREAD_REACH_PX", "LANE_SMOOTHING_PX", "bandWidthPx", "bandScale", "lines", "THREAD_TAPER_PX", "furthestShift", "seenShifts", "shifts", "packAbgr", "r", "g", "b", "a", "abgrRed", "c", "abgrGreen", "abgrBlue", "abgrAlpha", "abgrToCssRgba", "normalizedRgbToCssRgba", "alpha", "fadeAbgr", "brightenAbgr", "factor", "t", "lift", "v", "REFERENCE_RAMP_MAX_HUE", "REFERENCE_RAMP_SATURATION", "REFERENCE_RAMP_LIGHTNESS", "rampHueCss", "hue", "rampHueAt", "frac", "rampHue", "bp", "domain", "HUE_STOP_DEG", "rampStops", "start", "reversed", "low", "high", "n", "_", "RAMP_GRADIENT_STOPS", "i", "RAMP_GRADIENT_CSS", "s", "cache", "weakMemo", "baseEdgeCurves", "nodePositions", "graph", "axis", "deletions", "version", "routes", "stranded", "curves", "ei", "bypassed", "edgeCurves", "edgeCurvesOf", "MAX_BACKBONE_HOPS", "buildNeighbors", "graph", "neighbors", "edge", "pushTo", "flankingSpan", "nodeId", "nodeById", "seen", "frontier", "minEnd", "maxStart", "hop", "next", "id", "adjacent", "neighborId", "neighbor", "isBackbone", "nodeReferenceSpan", "node", "referenceMidpoints", "midpoints", "span", "EDGE_DEFAULT_COLOR", "packAbgr", "EDGE_PATH_FALLBACK_COLOR", "EDGE_DELETION_COLOR", "DELETION_THICKNESS_FACTOR", "LIFT_BACKDROP_COLOR", "FADED_ALPHA", "MOVED_ALPHA", "LIFT_BACKDROP_CSS", "abgrToCssRgba", "fadeAbgr", "DELETION_DASH_PX", "MIN_PATH_STRIPE_PX", "MIN_SCALE_FOR_OFFSET", "ARROW_LENGTH_BASE_PX", "ARROW_LENGTH_PER_EDGE_PX", "ARROW_HALF_WIDTH_BASE_PX", "ARROW_HALF_WIDTH_PER_EDGE_PX", "MIN_LINK_HEADS", "MIN_ARROW_FIT", "MIN_ARROW_SCALE", "ARROW_CURVE_STEPS", "ABUTTING_PX", "walkX", "walkY", "walkPx", "backFromEnd", "curves", "scale", "yToX", "untilPx", "most", "last", "n", "px", "ci", "c", "k", "t", "a", "b", "d", "e", "x", "y", "walkPointAt", "i", "from", "to", "f", "arrowheadFor", "edgeHalfWidth", "nodeHalfWidth", "color", "fromSegments", "toSegments", "length", "lengthPx", "abutting", "inset", "fit", "polylinePx", "tip", "base", "dx", "dy", "endTangent", "intoDirection", "FIRST_THREADS", "ONE_PASS", "NO_SHIFT", "nearerStart", "at", "segments", "gap", "p", "leavesStart", "edge", "first", "stranded", "strandSides", "final", "normal", "len", "MITRE_LIMIT", "LONGEST_NORMAL", "pointNormalsOf", "rawPoints", "points", "before", "after", "nx", "ny", "dot", "offsetPolyline", "normals", "distance", "out", "hslToRgb", "h", "s", "l", "m", "r", "g", "packHsl", "DEPTH_GRADIENT", "STABLE_RANK_GRADIENT", "NODE_LENGTH_GRADIENT", "sampleGradient", "stops", "pos", "hashColor", "str", "alpha", "nameHue", "PATH_SATURATION", "PATH_LIGHTNESS", "REFERENCE_RAMP_ALT_RGB", "REFERENCE_RAMP_ALT_COLOR", "REFERENCE_RAMP_ALT_CSS", "rampFraction", "node", "ramp", "mid", "isBackbone", "computeReferenceRamp", "graph", "domain", "midpoints", "referenceMidpoints", "min", "max", "computeColorSchemeRange", "referenceRamp", "minDepth", "maxDepth", "minLength", "maxLength", "maxRank", "getNodeColor", "nodeIndex", "colorScheme", "range", "rampHueAt", "REFERENCE_RAMP_SATURATION", "REFERENCE_RAMP_LIGHTNESS", "hue", "into", "candidates", "isPolylineInBounds", "bounds", "hit", "isBezierInBounds", "growX", "growY", "cMinX", "cMaxX", "cMinY", "cMaxY", "paletteCache", "pathPaletteOf", "palette", "pathColorByIndex", "pathIndexByName", "paths", "pathHueAt", "slotsCache", "NO_SLOTS", "pathSlotsOf", "slots", "pathIdx", "path", "nodeId", "pushTo", "lanesCache", "weakMemo", "stepsCache", "linksCache", "linksOf", "links", "buildGeometry", "options", "nodePositions", "nodeById", "contigThickness", "connectorThickness", "drawPaths", "nodeWidth", "edgeWidth", "highlight", "axis", "linearLayout", "viewportBounds", "deletions", "deletionRoutes", "hiddenEdges", "version", "widthScale", "widthNorm", "busiest", "busiestEdge", "worldPerScreenPx", "yToXOf", "sharedCurves", "baseEdgeCurves", "nodeStrokes", "nodeStrokeRuns", "arrows", "arrowRuns", "edgeCurves", "edgeCurveRuns", "colorRange", "nodeIndexMap", "pathCount", "pathColorByName", "name", "nodePathSlots", "liftedWalks", "threaded", "threadsPasses", "lanePasses", "w", "thinned", "bandScale", "fields", "liftLanes", "walkSteps", "lines", "threads", "spanField", "plainCentres", "slotCentres", "centresByNode", "centresOf", "centres", "spans", "laneOffset", "laneWidth", "lane", "pass", "THREAD_PITCH_PX", "threadOffsetAt", "frame", "fallback", "eased", "laneHalfWidth", "THREAD_PX", "plainNormals", "visitNormals", "visitOf", "thread", "plainNormalsOf", "laneNormalsOf", "laneWidths", "laneWidthOf", "id", "width", "walkLaneWidthPx", "nodeWidthPx", "laneEndOf", "frames", "atStart", "lanesMayShow", "fromId", "offset", "bandWidthPx", "reach", "threadPairs", "own", "ahead", "back", "turned", "threadColor", "visitPoints", "lanePointsOf", "shifts", "showArrows", "ei", "baseCurves", "numPaths", "isDeletion", "onWalk", "ribbonThickness", "walkFactor", "edgeWidthFactor", "edgeThickness", "ribbons", "plainEdgeColor", "edgeColor", "toNode", "intoHalfWidth", "inView", "dashesOf", "dashSpans", "stroke", "thickness", "dash", "laneStroke", "walk", "normal2", "offsetX", "endNormal", "endOffsetX", "arrowOn", "head", "edgeCurveStart", "arrowStart", "laneWalks", "fromAtStart", "toAtStart", "single", "fromFrames", "toFrames", "toPass", "slideCurves", "translateCurves", "offsets", "pathRibbonOffsets", "arrowRibbon", "ribbonColor", "edgeCurveCount", "arrowCount", "faded", "nodeThickness", "start", "slotWidth", "drawable", "lanes", "laneColor", "onThreads", "color2", "plain", "o", "slot", "stripe", "count", "WALK_FIELDS", "WALK_SCHEMES", "FAMILIES", "isField", "v", "f", "isScheme", "s", "resolveEncoding", "layer", "reference", "picked", "alone", "askedField", "askedScheme", "field", "family", "scheme", "round", "SHADES", "TOGETHER_DARKEST", "BASE_T", "STRETCH_GAP", "rampsOn", "splitFamilies", "encodings", "counts", "seen", "k", "j", "half", "along", "stretch", "t", "toLinear", "c", "toGamma", "oklab", "hex", "r", "g", "b", "i", "l", "m", "oklabToRgb", "L", "a", "endsCache", "oklabEnds", "schemeRgb", "darkest", "x", "ends", "hslToRgb", "rampHueAt", "REFERENCE_RAMP_SATURATION", "REFERENCE_RAMP_LIGHTNESS", "from", "to", "light", "dark", "reach", "schemeCss", "schemeColor", "packAbgr", "encodedColor", "encoding", "shade", "NO_VALUE_COLOR", "REFERENCE_RAMP_ALT_COLOR", "encodingStops", "stop", "offset", "_"]
|