jbrowse-plugin-graphgenomeviewer 6.4.0 → 6.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunks/{GraphGenomeView-ULQ6U5MK.js → GraphGenomeView-ZB4ED45M.js} +2 -2
- package/dist/chunks/{GraphTrackSettingsDialog-O6IYVHNJ.js → GraphTrackSettingsDialog-UPAINCUZ.js} +2 -2
- package/dist/chunks/{LinearGraphDisplay-KM5SOSQQ.js → LinearGraphDisplay-TQX7ZJZF.js} +2 -2
- package/dist/chunks/chunk-JC7I7V6M.js +2 -0
- package/dist/chunks/chunk-JC7I7V6M.js.map +7 -0
- package/dist/chunks/chunk-OTI5X5W7.js +2 -0
- package/dist/chunks/chunk-OTI5X5W7.js.map +7 -0
- package/dist/chunks/chunk-OU6VYHKB.js +2 -0
- package/dist/chunks/chunk-OU6VYHKB.js.map +7 -0
- package/dist/jbrowse-plugin-graphgenomeviewer.esm.js +6 -6
- package/dist/jbrowse-plugin-graphgenomeviewer.esm.js.map +4 -4
- package/package.json +2 -2
- package/src/GraphComputeLayout.ts +2 -9
- package/src/GraphGenomeView/components/FacetPanels.tsx +2 -0
- package/src/GraphGenomeView/components/GraphCanvas.tsx +2 -0
- package/src/GraphGenomeView/components/GraphSettingsDialog.tsx +23 -3
- package/src/GraphGenomeView/components/usePaneGestures.ts +1 -0
- package/src/GraphGenomeView/launchKeys.test.ts +1 -0
- package/src/GraphGenomeView/model.test.ts +15 -0
- package/src/GraphGenomeView/pane/fitViews.ts +1 -0
- package/src/GraphGenomeView/pane/loadActions.ts +1 -0
- package/src/GraphGenomeView/pane/paneBase.ts +4 -0
- package/src/GraphGenomeView/pane/settingActions.ts +4 -0
- package/src/LinearGraphDisplay/LinearGraphDisplay.test.ts +26 -0
- package/src/version.ts +1 -1
- package/dist/chunks/chunk-AMD4KXQV.js +0 -2
- package/dist/chunks/chunk-AMD4KXQV.js.map +0 -7
- package/dist/chunks/chunk-GMSOU6VO.js +0 -2
- package/dist/chunks/chunk-GMSOU6VO.js.map +0 -7
- package/dist/chunks/chunk-X4DGSMS6.js +0 -2
- package/dist/chunks/chunk-X4DGSMS6.js.map +0 -7
- /package/dist/chunks/{GraphGenomeView-ULQ6U5MK.js.map → GraphGenomeView-ZB4ED45M.js.map} +0 -0
- /package/dist/chunks/{GraphTrackSettingsDialog-O6IYVHNJ.js.map → GraphTrackSettingsDialog-UPAINCUZ.js.map} +0 -0
- /package/dist/chunks/{LinearGraphDisplay-KM5SOSQQ.js.map → LinearGraphDisplay-TQX7ZJZF.js.map} +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{a as x}from"./chunk-
|
|
1
|
+
import{a as x}from"./chunk-OU6VYHKB.js";import"./chunk-JC7I7V6M.js";import"./chunk-7KFSWOWX.js";import"./chunk-GXQ7NYB3.js";import{p as L}from"./chunk-OTI5X5W7.js";import"./chunk-GB7CF6Z2.js";import"./chunk-WTOQRUK2.js";import"./chunk-B7GF3TC3.js";import"./chunk-KRXALLQG.js";import"./chunk-EHV7EUMI.js";import"./chunk-MYJYGSOH.js";import"./chunk-YBLNN5FU.js";import"./chunk-DILFGQIL.js";import"./chunk-FCWXYIFC.js";import{a as B}from"./chunk-J6KYLXRD.js";import{a as v,b as G}from"./chunk-NXZT63HN.js";import{a as s,b as g}from"./chunk-64LZZURD.js";import{b as a}from"./chunk-FY3BTKY4.js";var S=a(g(),1);var m=a(v(),1),n=a(G(),1),C=a(g(),1),P=a(L(),1),o=a(s(),1),I=(0,P.makeStyles)()({paper:{padding:16,margin:8,maxWidth:560,marginInline:"auto",display:"flex",flexDirection:"column",gap:12},row:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:8}}),b=(0,C.observer)(function({model:e}){let{classes:r}=I();return e.isLoading?(0,o.jsxs)(n.Paper,{className:r.paper,"data-testid":"graph-genome-loading",children:[(0,o.jsxs)("div",{className:r.row,children:[(0,o.jsx)(m.LoadingEllipses,{variant:"h6",message:e.statusMessage}),(0,o.jsx)(n.Button,{size:"small","data-testid":"graph-genome-cancel",onClick:()=>{e.cancelLoad()},children:"Cancel"})]}),(0,o.jsx)(n.LinearProgress,{variant:"indeterminate"})]}):e.error?(0,o.jsx)(n.Paper,{className:r.paper,children:(0,o.jsx)(m.ErrorBanner,{error:e.error,onReset:()=>{e.retryLoad()}})}):(0,o.jsx)(n.Paper,{className:r.paper,"data-testid":"graph-genome-load-canceled",children:(0,o.jsxs)("div",{className:r.row,children:[(0,o.jsx)(n.Typography,{variant:"h6",children:"Loading canceled"}),(0,o.jsx)(n.Button,{variant:"contained",size:"small","data-testid":"graph-genome-retry",onClick:()=>{e.retryLoad()},children:"Retry"})]})})}),h=b;var M=a(B(),1),N=a(v(),1),i=a(G(),1),w=a(g(),1),E=a(L(),1),t=a(s(),1),k=`H VN:Z:1.0
|
|
2
2
|
S 1 ACGT
|
|
3
3
|
S 2 GGCC
|
|
4
4
|
S 3 TTAA
|
|
@@ -7,4 +7,4 @@ L 1 + 2 + 0M
|
|
|
7
7
|
L 1 + 3 + 0M
|
|
8
8
|
L 2 + 4 + 0M
|
|
9
9
|
L 3 + 4 + 0M`,z=(0,E.makeStyles)()({column:{display:"flex",flexDirection:"column",gap:8},rowEnd:{display:"flex",gap:8,alignItems:"flex-end"},rowCenter:{display:"flex",gap:8,alignItems:"center"},flex1:{flex:1},paper:{padding:16,margin:8,maxWidth:560,marginInline:"auto"},header:{marginBottom:12},footer:{marginTop:12,display:"flex",justifyContent:"flex-end"}}),R=(0,w.observer)(function({model:e}){let{classes:r}=z(),[d,T]=(0,M.useState)("");function y(){d.trim()&&e.loadGFAFromLocation({uri:d,locationType:"UriLocation"})}function A(p){let c=p.target.files?.[0];c&&c.text().then(f=>e.loadGFA(f,c.name)).catch(f=>{e.setError(f)})}return(0,t.jsxs)(i.Paper,{className:r.paper,children:[(0,t.jsx)("div",{className:r.header,children:(0,t.jsx)(i.Typography,{variant:"h6",children:"Load a GFA graph"})}),(0,t.jsxs)("div",{className:r.column,children:[(0,t.jsxs)("div",{className:r.rowCenter,children:[(0,t.jsxs)(i.Button,{variant:"outlined",component:"label",size:"small",children:["Choose file",(0,t.jsx)("input",{type:"file",accept:".gfa,.gfa1,.gfa2",hidden:!0,onChange:p=>{A(p)}})]}),(0,t.jsx)(i.Typography,{variant:"caption",color:"text.secondary",children:"Whole-file GFA; best for small/medium graphs."})]}),(0,t.jsxs)("div",{className:r.rowEnd,children:[(0,t.jsx)(i.TextField,{size:"small",label:"URL",placeholder:"https://example.com/graph.gfa",value:d,onChange:p=>{T(p.target.value)},onKeyDown:p=>{p.key==="Enter"&&y()},className:r.flex1}),(0,t.jsx)(i.Button,{variant:"contained",onClick:()=>{y()},disabled:!d.trim(),children:"Open"})]})]}),(0,t.jsx)("div",{className:r.footer,children:(0,t.jsx)(i.Button,{size:"small",onClick:()=>{e.loadGFA(k,"Example graph")},children:"Load 4-node example"})}),e.error?(0,t.jsx)(N.ErrorBanner,{error:e.error}):null]})}),F=R;var l=a(s(),1),U=(0,S.observer)(function({model:e}){return e.hasGraph?(0,l.jsx)(x,{model:e}):e.canRetryLoad&&(e.error||e.loadCanceled)?(0,l.jsx)(h,{model:e}):(0,l.jsxs)(l.Fragment,{children:[e.isLoading?(0,l.jsx)(h,{model:e}):null,(0,l.jsx)("div",{hidden:e.isLoading,children:(0,l.jsx)(F,{model:e})})]})}),O=U;export{O as default};
|
|
10
|
-
//# sourceMappingURL=GraphGenomeView-
|
|
10
|
+
//# sourceMappingURL=GraphGenomeView-ZB4ED45M.js.map
|
package/dist/chunks/{GraphTrackSettingsDialog-O6IYVHNJ.js → GraphTrackSettingsDialog-UPAINCUZ.js}
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{a as g}from"./chunk-
|
|
1
|
+
import{a as g}from"./chunk-JC7I7V6M.js";import{p as f}from"./chunk-OTI5X5W7.js";import"./chunk-B7GF3TC3.js";import"./chunk-MYJYGSOH.js";import"./chunk-DILFGQIL.js";import{a as x}from"./chunk-J6KYLXRD.js";import{b as y}from"./chunk-NXZT63HN.js";import{a as l,b as m}from"./chunk-64LZZURD.js";import{b as o}from"./chunk-FY3BTKY4.js";var a=o(y(),1),b=o(m(),1),S=o(f(),1),n=o(l(),1),L=(0,S.makeStyles)()({section:{marginBottom:24},formControl:{minWidth:200}}),w=[{value:0,label:"None"},{value:1,label:"1 hop"},{value:2,label:"2 hops"}],k=(0,b.observer)(function({model:e}){let{classes:t}=L();return(0,n.jsxs)("div",{className:t.section,children:[(0,n.jsxs)(a.FormControl,{className:t.formControl,children:[(0,n.jsx)(a.InputLabel,{children:"Graph context"}),(0,n.jsx)(a.Select,{value:e.subgraphContext,label:"Graph context","data-testid":"graph-context-select",onChange:p=>{e.setSubgraphContext(p.target.value),e.cut()},children:w.map(({value:p,label:u})=>(0,n.jsx)(a.MenuItem,{value:p,children:u},p))})]}),(0,n.jsx)(a.Typography,{variant:"caption",color:"text.secondary",children:"How far the cut follows links out of the region, one hop by default. A detour that leaves the reference before the window and rejoins after it is indexed under its own sequence, so at none its middle is missing and the one bubble draws as two unrelated stubs. Each hop costs a query per off-reference segment already reached."})]})}),v=k;var C=o(x(),1),d=o(y(),1),c=o(m(),1),G=o(f(),1),i=o(l(),1),T=(0,G.makeStyles)()({section:{marginBottom:24}});function M(r){let e=r.split(/[\s,]+/).map(t=>t.trim()).filter(t=>t!=="");return e.length===0?void 0:e}var F=(0,c.observer)(function({model:e}){let[t,p]=(0,C.useState)(e.chosenHaplotypes?.join(", ")??""),u=()=>{let s=M(t)??[];s.join(`
|
|
2
2
|
`)===(e.chosenHaplotypes??[]).join(`
|
|
3
3
|
`)||(e.setSubgraphHaplotypes(s),e.cut())};return(0,i.jsx)(d.TextField,{fullWidth:!0,label:"Haplotypes",placeholder:"every haplotype",value:t,slotProps:{htmlInput:{"data-testid":"graph-haplotypes-field"}},onChange:s=>{p(s.target.value)},onBlur:()=>{u()},onKeyDown:s=>{s.key==="Enter"&&u()}})}),N=(0,c.observer)(function({model:e}){let{classes:t}=T();return e.adapterConfig.type==="GbzBaseSyntenyAdapter"?(0,i.jsxs)("div",{className:t.section,children:[(0,i.jsx)(F,{model:e},e.chosenHaplotypes?.join(",")??""),(0,i.jsx)(d.Typography,{variant:"caption",color:"text.secondary",children:"The haplotypes the cut is for, as lane assembly names or PanSN prefixes (HG002#1, or HG002 for both), separated by commas. The cut keeps their walks and the nodes those walks visit, with the reference. Empty is every haplotype."})]}):null}),H=N;var h=o(l(),1);function B({model:r,open:e,onClose:t}){return(0,h.jsxs)(g,{model:r,open:e,onClose:t,children:[(0,h.jsx)(v,{model:r}),(0,h.jsx)(H,{model:r})]})}export{B as default};
|
|
4
|
-
//# sourceMappingURL=GraphTrackSettingsDialog-
|
|
4
|
+
//# sourceMappingURL=GraphTrackSettingsDialog-UPAINCUZ.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a as i}from"./chunk-
|
|
2
|
-
//# sourceMappingURL=LinearGraphDisplay-
|
|
1
|
+
import{a as i}from"./chunk-OU6VYHKB.js";import"./chunk-JC7I7V6M.js";import"./chunk-7KFSWOWX.js";import"./chunk-GXQ7NYB3.js";import"./chunk-OTI5X5W7.js";import"./chunk-GB7CF6Z2.js";import"./chunk-WTOQRUK2.js";import"./chunk-B7GF3TC3.js";import"./chunk-KRXALLQG.js";import"./chunk-EHV7EUMI.js";import"./chunk-MYJYGSOH.js";import"./chunk-YBLNN5FU.js";import"./chunk-DILFGQIL.js";import"./chunk-FCWXYIFC.js";import"./chunk-J6KYLXRD.js";import"./chunk-NXZT63HN.js";import{a as e,b as d}from"./chunk-64LZZURD.js";import{a as h,b as t}from"./chunk-FY3BTKY4.js";var p=h((l,o)=>{o.exports=JBrowseExports["@jbrowse/display-kit/DisplayChrome"]});var s=t(p(),1),n=t(d(),1);var r=t(e(),1),y=(0,n.observer)(function({model:a}){return(0,r.jsx)(s.DisplayStatusChrome,{model:a,phase:a.displayPhase,drawn:a.painted&&a.geometryPainted,testid:"linear-graph-display","data-layout":a.chosenLayoutMode,"data-cut-tier":a.cutTier,"data-recuts":a.recuts,"data-node-count":a.hasGraph?a.nodeCount:void 0,"data-loading":a.isLoading?"":void 0,style:{width:a.paneWidth,height:a.height,overflow:"hidden"},children:(0,r.jsx)(i,{model:a,ownChrome:!1})})}),c=y;export{c as default};
|
|
2
|
+
//# sourceMappingURL=LinearGraphDisplay-TQX7ZJZF.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{d as S,g as k,m as T,p as D}from"./chunk-OTI5X5W7.js";import{N as g,T as I}from"./chunk-B7GF3TC3.js";import{a as A,b as R}from"./chunk-NXZT63HN.js";import{a as w,b as E}from"./chunk-64LZZURD.js";import{b as c}from"./chunk-FY3BTKY4.js";var u=[{value:0,label:"Fastest"},{value:1,label:"Fast"},{value:2,label:"Default"},{value:3,label:"Fine"},{value:4,label:"Best"}];var N=c(A(),1),o=c(R(),1),v=c(E(),1),G=c(D(),1),e=c(w(),1),C=(0,G.makeStyles)()({section:{marginBottom:24},formControl:{minWidth:200}});function s({warn:l=!1,children:n}){return(0,e.jsx)(o.Typography,{variant:"caption",color:l?"warning.main":"text.secondary",children:n})}var m=(0,v.observer)(function({model:n}){return n.hasGraph&&!n.usesLayoutEngine?(0,e.jsx)(s,{warn:!0,children:"No effect on this layout: only the force-directed layout is drawn by the engine that reads this."}):null});function b({label:l,checked:n,onChange:t,children:p}){let{classes:h}=C();return(0,e.jsxs)("div",{className:h.section,children:[(0,e.jsx)(o.FormControlLabel,{control:(0,e.jsx)(o.Switch,{checked:n,onChange:d=>{t(d.target.checked)}}),label:l}),p]})}function i({label:l,value:n,options:t,testId:p,sx:h,onChange:d}){let{classes:r}=C();return(0,e.jsxs)(o.FormControl,{className:r.formControl,sx:h,children:[(0,e.jsx)(o.InputLabel,{children:l}),(0,e.jsx)(o.Select,{value:n,label:l,"data-testid":p,onChange:a=>{d(a.target.value)},children:t.map(({value:a,label:f,description:y})=>(0,e.jsx)(o.MenuItem,{value:a,children:y?(0,e.jsx)(o.Tooltip,{title:y,placement:"right",children:(0,e.jsx)("span",{children:f})}):f},a))})]})}var L=l=>l.map(({trackId:n,name:t})=>({value:n,label:t})),P=(0,v.observer)(function(n){let{model:t,open:p,onClose:h,children:d}=n,{classes:r}=C();return(0,e.jsxs)(N.Dialog,{open:p,onClose:h,title:"Graph settings",children:[(0,e.jsxs)(o.DialogContent,{children:[(0,e.jsxs)("div",{className:r.section,children:[(0,e.jsx)(i,{label:"Engine",value:t.layoutEngine,options:S,testId:"graph-layout-engine-select",onChange:a=>{t.setLayoutEngine(a),t.recomputeLayout()}}),(0,e.jsx)(s,{children:"Which engine draws the force-directed layout. Stress reads distances along the graph as distances on the page, so the reference draws straight; it is experimental, and slower than FMMM on large cuts."}),(0,e.jsx)(m,{model:t})]}),(0,e.jsx)("div",{className:r.section,children:(0,e.jsxs)(o.FormControl,{fullWidth:!0,children:[(0,e.jsx)(o.FormLabel,{component:"legend",children:"Layout quality"}),(0,e.jsx)(o.RadioGroup,{value:t.layoutQuality,onChange:a=>{t.setLayoutQuality(parseInt(a.target.value)),t.recomputeLayout()},children:u.map(a=>(0,e.jsx)(o.FormControlLabel,{value:a.value,control:(0,e.jsx)(o.Radio,{}),label:a.label},a.value))}),(0,e.jsx)(s,{children:"The engine's iteration budget; for FMMM the same scale Bandage exposes. Higher is slower: on a thousand-node cut the top setting is seconds rather than tenths."}),(0,e.jsx)(m,{model:t})]})}),(0,e.jsxs)(b,{label:"Draw paths",checked:t.drawPaths,onChange:a=>{t.setDrawPaths(a)},children:[(0,e.jsx)(s,{children:"Color each node and connector by the paths through it, one lane per path in legend order, so a path that skips a node leaves its lane empty"}),t.drawPaths&&!t.effectiveDrawPaths?(0,e.jsx)(s,{warn:!0,children:t.pathCount>g?`Off: ${t.pathCount.toLocaleString()} paths is past the ${g} this can tell apart`:"Off: this graph states no paths"}):null]}),(0,e.jsx)(b,{label:"Mark bubbles",checked:t.showBubbles,onChange:a=>{t.setShowBubbles(a)},children:(0,e.jsx)(s,{children:"A halo along the nodes of each bubble, labelled by what it is, with the label opening the bubble on its own"})}),(0,e.jsxs)(b,{label:"Genes on the backbone",checked:t.showGenes,onChange:a=>{t.setShowGenes(a)},children:[(0,e.jsx)(s,{children:"Exons along the reference nodes that carry them and each gene's name at its midpoint, from the assembly's annotation track"}),t.geneTrackChoices.length>1?(0,e.jsx)(i,{label:"Gene track",value:t.geneTrack?.trackId??"",options:L(t.geneTrackChoices),testId:"graph-gene-track-select",sx:{mt:1},onChange:a=>{t.setGeneTrackId(a),t.reloadGenes()}}):null,t.repeatTrackChoices.length>1?(0,e.jsx)(i,{label:"Repeat track",value:t.repeatTrack?.trackId??"",options:L(t.repeatTrackChoices),testId:"graph-repeat-track-select",sx:{mt:1},onChange:a=>{t.setRepeatTrackId(a),t.reloadRepeats()}}):null]}),t.anchorPaths.length>1?(0,e.jsxs)("div",{className:r.section,children:[(0,e.jsx)(i,{label:"Reference path",value:t.activeReferencePath??"",options:t.anchorPaths.map(({name:a})=>({value:a,label:a})),testId:"graph-reference-path-select",onChange:a=>{t.setReferencePath(a),t.recomputeLayout()}}),(0,e.jsx)(s,{children:"Which path the anchored layouts draw x against. A GFA with no rGFA tags states its coordinates only in its paths, and marks none of them as the reference."})]}):null,(0,e.jsxs)("div",{className:r.section,children:[(0,e.jsx)(i,{label:"Bubble spread",value:t.bubbleSpread,options:T,testId:"graph-bubble-spread-select",onChange:a=>{t.setBubbleSpread(a),t.recomputeLayout()}}),(0,e.jsx)(s,{children:"How far the force layout opens a bubble. A pangenome allele is a few bp, so at Bandage's own scale both arms land inside one node thickness and the graph draws as a rope."}),(0,e.jsx)(m,{model:t})]}),(0,e.jsxs)("div",{className:r.section,children:[(0,e.jsx)(i,{label:"Node width",value:t.nodeWidth,options:I,testId:"graph-node-width-select",onChange:a=>{t.setNodeWidth(a)}}),(0,e.jsx)(s,{children:"Bandage's depth as width. In a cut with walks, depth is how many haplotypes carry the node."})]}),d,(0,e.jsxs)("div",{className:r.section,children:[(0,e.jsx)(i,{label:"Color scheme",value:t.chosenColorScheme,options:k,onChange:a=>{t.setColorScheme(a)}}),t.colorSchemeLock?(0,e.jsxs)(s,{warn:!0,children:["No effect now. ",t.colorSchemeLock.why]}):null]})]}),(0,e.jsx)(o.DialogActions,{children:(0,e.jsx)(o.Button,{variant:"contained",color:"primary",onClick:h,children:"Close"})})]})}),Q=P;export{Q as a};
|
|
2
|
+
//# sourceMappingURL=chunk-JC7I7V6M.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../node_modules/.pnpm/@jbrowse+bandage-core@8.0.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-K5SIJGAE.js", "../../src/GraphGenomeView/components/GraphSettingsDialog.tsx"],
|
|
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 type { ReactNode } from 'react'\n\nimport { BUBBLE_SPREADS } from '@jbrowse/bandage-core/bubbleSpreads'\nimport { COLOR_SCHEMES } from '@jbrowse/bandage-core/colorSchemes'\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 FormControl,\n FormControlLabel,\n FormLabel,\n InputLabel,\n MenuItem,\n Radio,\n RadioGroup,\n Select,\n Switch,\n Tooltip,\n Typography,\n} from '@mui/material'\nimport { observer } from 'mobx-react'\nimport { makeStyles } from 'tss-react/mui'\n\nimport type { GraphPaneModel } from '../model'\nimport type { SxProps } from '@mui/material'\n\nconst useStyles = makeStyles()({\n section: {\n marginBottom: 24,\n },\n formControl: {\n minWidth: 200,\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 color={warn ? 'warning.main' : 'text.secondary'}\n >\n {children}\n </Typography>\n )\n}\n\n// Layout quality and bubble spread are the engine's inputs, and an anchored\n// layout places a node from its coordinates without reaching it. Left enabled\n// so the force layout can be set up before switching to it.\nconst EngineOnly = observer(function EngineOnly({\n model,\n}: {\n model: GraphPaneModel\n}) {\n return model.hasGraph && !model.usesLayoutEngine ? (\n <Caption warn>\n No effect on this layout: only the force-directed layout is drawn by the\n engine that reads this.\n </Caption>\n ) : null\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; an option's description is its tooltip\nfunction SettingSelect<T extends string>({\n label,\n value,\n options,\n testId,\n sx,\n onChange,\n}: {\n label: string\n value: T\n options: readonly { value: T; label: string; description?: string }[]\n testId?: string\n sx?: SxProps\n onChange: (value: T) => void\n}) {\n const { classes } = useStyles()\n return (\n <FormControl className={classes.formControl} sx={sx}>\n <InputLabel>{label}</InputLabel>\n <Select\n value={value}\n label={label}\n data-testid={testId}\n onChange={e => {\n onChange(e.target.value as T)\n }}\n >\n {options.map(({ value, label, description }) => (\n <MenuItem key={value} value={value}>\n {description ? (\n <Tooltip title={description} placement=\"right\">\n <span>{label}</span>\n </Tooltip>\n ) : (\n label\n )}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n )\n}\n\nconst trackOptions = (tracks: { trackId: string; name: string }[]) =>\n tracks.map(({ trackId, name }) => ({ value: trackId, label: name }))\n\n// `children` is the host's own section, between node width and colour\nconst GraphSettingsDialog = observer(function GraphSettingsDialog(props: {\n model: GraphPaneModel\n open: boolean\n onClose: () => void\n children?: ReactNode\n}) {\n const { model, open, onClose, children } = props\n const { classes } = useStyles()\n\n return (\n <Dialog open={open} onClose={onClose} title=\"Graph settings\">\n <DialogContent>\n <div className={classes.section}>\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 void model.recomputeLayout()\n }}\n />\n <Caption>\n Which engine draws the force-directed layout. Stress reads distances\n along the graph as distances on the page, so the reference draws\n straight; it is experimental, and slower than FMMM on large cuts.\n </Caption>\n <EngineOnly model={model} />\n </div>\n\n <div className={classes.section}>\n <FormControl fullWidth>\n <FormLabel component=\"legend\">Layout quality</FormLabel>\n <RadioGroup\n value={model.layoutQuality}\n onChange={e => {\n model.setLayoutQuality(parseInt(e.target.value))\n void model.recomputeLayout()\n }}\n >\n {LAYOUT_QUALITIES.map(q => (\n <FormControlLabel\n key={q.value}\n value={q.value}\n control={<Radio />}\n label={q.label}\n />\n ))}\n </RadioGroup>\n <Caption>\n The engine's iteration budget; for FMMM the same scale\n Bandage exposes. Higher is slower: on a thousand-node cut the top\n setting is seconds rather than tenths.\n </Caption>\n <EngineOnly model={model} />\n </FormControl>\n </div>\n\n <SettingSwitch\n label=\"Draw paths\"\n checked={model.drawPaths}\n onChange={draw => {\n model.setDrawPaths(draw)\n }}\n >\n <Caption>\n Color each node and connector by the paths through it, one lane per\n path in legend order, so a path that skips a node leaves its lane\n empty\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 <SettingSwitch\n label=\"Mark bubbles\"\n checked={model.showBubbles}\n onChange={show => {\n model.setShowBubbles(show)\n }}\n >\n <Caption>\n A halo along the nodes of each bubble, labelled by what it is, with\n the label opening the bubble on its own\n </Caption>\n </SettingSwitch>\n\n <SettingSwitch\n label=\"Genes on the backbone\"\n checked={model.showGenes}\n onChange={show => {\n model.setShowGenes(show)\n }}\n >\n <Caption>\n Exons along the reference nodes that carry them and each gene's name\n at its midpoint, from the assembly's annotation track\n </Caption>\n {model.geneTrackChoices.length > 1 ? (\n <SettingSelect\n label=\"Gene track\"\n value={model.geneTrack?.trackId ?? ''}\n options={trackOptions(model.geneTrackChoices)}\n testId=\"graph-gene-track-select\"\n sx={{ mt: 1 }}\n onChange={trackId => {\n model.setGeneTrackId(trackId)\n void model.reloadGenes()\n }}\n />\n ) : null}\n {model.repeatTrackChoices.length > 1 ? (\n <SettingSelect\n label=\"Repeat track\"\n value={model.repeatTrack?.trackId ?? ''}\n options={trackOptions(model.repeatTrackChoices)}\n testId=\"graph-repeat-track-select\"\n sx={{ mt: 1 }}\n onChange={trackId => {\n model.setRepeatTrackId(trackId)\n void model.reloadRepeats()\n }}\n />\n ) : null}\n </SettingSwitch>\n\n {model.anchorPaths.length > 1 ? (\n <div className={classes.section}>\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>\n Which path the anchored layouts draw x against. A GFA with no rGFA\n tags states its coordinates only in its paths, and marks none of\n them as the reference.\n </Caption>\n </div>\n ) : null}\n\n <div className={classes.section}>\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 void model.recomputeLayout()\n }}\n />\n <Caption>\n How far the force layout opens a bubble. A pangenome allele is a few\n bp, so at Bandage's own scale both arms land inside one node\n thickness and the graph draws as a rope.\n </Caption>\n <EngineOnly model={model} />\n </div>\n\n <div className={classes.section}>\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 Bandage's depth as width. In a cut with walks, depth is how\n many haplotypes carry the node.\n </Caption>\n </div>\n\n {children}\n\n <div className={classes.section}>\n <SettingSelect\n label=\"Color scheme\"\n value={model.chosenColorScheme}\n options={COLOR_SCHEMES}\n onChange={scheme => {\n model.setColorScheme(scheme)\n }}\n />\n {model.colorSchemeLock ? (\n <Caption warn>No effect now. {model.colorSchemeLock.why}</Caption>\n ) : null}\n </div>\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
|
+
"mappings": "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",
|
|
6
|
+
"names": ["LAYOUT_QUALITIES", "import_ui", "import_material", "import_mobx_react", "import_mui", "import_jsx_runtime", "useStyles", "Caption", "warn", "children", "EngineOnly", "model", "SettingSwitch", "label", "checked", "onChange", "classes", "e", "SettingSelect", "value", "options", "testId", "sx", "description", "trackOptions", "tracks", "trackId", "name", "GraphSettingsDialog", "props", "open", "onClose", "LAYOUT_ENGINES", "engine", "LAYOUT_QUALITIES", "q", "draw", "MAX_PATH_COLORS", "show", "BUBBLE_SPREADS", "spread", "NODE_WIDTHS", "width", "COLOR_SCHEMES", "scheme", "GraphSettingsDialog_default"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{c as At}from"./chunk-MYJYGSOH.js";import{a as Xt}from"./chunk-FY3BTKY4.js";var On=Xt((De,Jt)=>{Jt.exports=JBrowseExports["tss-react/mui"]});var ct="\0deletion:",tn=.5;function In(t,e,n=new Set){let o=new Map(e.map(a=>[a.edgeIndex,`${ct}${a.edgeIndex}`])),s=[];return t.edges.forEach((a,i)=>{let c=o.get(i);if(!n.has(i))if(c===void 0)s.push(a);else{let{fromStrand:l,toStrand:d}=a;s.push({from:a.from,to:c,...l?{fromStrand:l}:{}},{from:c,to:a.to,...d?{toStrand:d}:{}})}}),{graph:{...t,nodes:[...t.nodes,...[...o.values()].map(a=>({id:a,name:a,length:0,depth:0}))],edges:s},routes:o,ids:new Set(o.values())}}function Pn(t,e,n,o,s){let a=new Map(t.nodes.map(i=>[i.id,i.length]));return e.map(i=>{let c=i.bypassed.reduce((h,r)=>h+(a.get(r)??0),0),l=Math.max(s.minimumNodeLength,o(c)*tn),d=n.get(i.edgeIndex);return{id:d,name:d,length:Math.round(l*1e6/s.nodeLengthPerMegabase),depth:0}})}function _n(t,e){let n={...t},o={};for(let[s,a]of e){let i=n[a];delete n[a],i?.length&&(o[s]=i)}return{nodePositions:n,deletionRoutes:o}}var lt=12,gt=15,tt=gt*.7,Lt=25*Math.PI/180,nn=.25,en=150,on=[0,-.35,.35,-.7,.7],ht=[0,1];function Et(t){return t?0:1}function rt(t,e){let n=e.x-t.x,o=e.y-t.y,s=Math.hypot(n,o)||1;return{x:n/s,y:o/s}}function dt(t,e,n){return{x:t.x+(e.x-t.x)*n,y:t.y+(e.y-t.y)*n}}function Pt(t){let e=0,n=0;for(let o of t)e+=o.x,n+=o.y;return{x:e/t.length,y:n/t.length}}function _t(t){let e=new Float64Array(t.length);for(let n=1;n<t.length;n++)e[n]=e[n-1]+Math.hypot(t[n].x-t[n-1].x,t[n].y-t[n-1].y);return e}function Tt(t){return _t(t)[t.length-1]??0}function sn(t){let e=1e-6,n=2*Math.PI-1e-6;for(let o=0;o<60;o++){let s=(e+n)/2;s/(2*Math.sin(s/2))<t?e=s:n=s}return(e+n)/2}function rn(t,e){if(t<1e-9)return Math.PI*e;let n=(t*t/4+e*e)/(2*e),o=2*Math.asin(Math.min(1,t/(2*n)));return n*(e>n?2*Math.PI-o:o)}function ft(t,e,n,o){let s=e-2*n,a=t<1e-9?2*Math.PI:sn(s/t),i=s/a,c=Math.cos(a/2),l=t/2,d=o+n-i*c;return{at:h=>{if(h<=n)return{u:0,v:o+h};if(h>=e-n)return{u:t,v:o+e-h};let r=(h-n)/i-a/2;return{u:l+i*Math.sin(r),v:d+i*Math.cos(r)}},apex:o+n+i*(1-c),length:e}}function an(t,e,n){if(!n)return t;let o=Math.cos(n),s=Math.sin(n);return{...t,at:a=>{let{u:i,v:c}=t.at(a),l=i-e/2;return{u:e/2+l*o-c*s,v:l*s+c*o}}}}function St(t,e,n,o,s){return{at:a=>({u:t+n*a,v:e+o*a}),apex:e+Math.max(0,o)*s,length:s}}var ut=class{constructor(t,e,n=!1){this.pts=t,this.normals=e,this.straight=n,this.arc=_t(t),this.total=this.arc[t.length-1]??0}segment(t){let{arc:e}=this,n=1,o=e.length-1;for(;n<o;){let s=n+o>>1;e[s]<t?n=s+1:o=s}return n}fraction(t,e){let n=this.arc[t]-this.arc[t-1];return n>0?(e-this.arc[t-1])/n:0}pointAt(t){let{pts:e}=this,n=e.length-1;if(n===0)return{...e[0]};if(t<=0){let s=rt(e[0],e[1]);return{x:e[0].x+s.x*t,y:e[0].y+s.y*t}}if(t>=this.total){let s=rt(e[n-1],e[n]),a=t-this.total;return{x:e[n].x+s.x*a,y:e[n].y+s.y*a}}let o=this.segment(t);return dt(e[o-1],e[o],this.fraction(o,t))}normalAt(t){let{normals:e}=this;if(e.length===1||t<=0)return e[0];if(t>=this.total)return e[e.length-1];let n=this.segment(t),{x:o,y:s}=dt(e[n-1],e[n],this.fraction(n,t)),a=Math.hypot(o,s)||1;return{x:o/a,y:s/a}}};function cn(t,e){let n=Pt(t);return t.map((o,s)=>{let a=rt(t[Math.max(0,s-1)],t[Math.min(t.length-1,s+1)]),i={x:-a.y,y:a.x},c=o.x-n.x,l=o.y-n.y,d=Math.hypot(c,l),h=i.x*c+i.y*l,r=e[s],f=d>1e-9&&Math.abs(h)>.3*d?Math.sign(h):Math.sign(i.x*r.x+i.y*r.y)||1;return{x:i.x*f,y:i.y*f}})}function mt(t,e,n,o){let s=Math.min(5,Math.max(o.length/24,.5)),a=[],i=[];for(let c=0;c<=o.length+1e-9;c+=s){let{u:l,v:d}=o.at(Math.min(c,o.length)),h=t.pointAt(e+l),r=t.normalAt(e+l),f=r.x*n,g=r.y*n;a.push({x:h.x+f*d,y:h.y+g*d}),i.push({x:f,y:g})}return{pts:a,refs:i}}function pt(t,e,n,o,s){let a=s,i=mt(t,e,n,o(a));if(t.straight)return i;for(let c=0;c<2;c++){let l=Tt(i.pts);if(!(l>0))break;a*=s/l,i=mt(t,e,n,o(a))}return i}function st(t,e){return Array.from({length:e},(n,o)=>t+o*gt/2)}function kt(t){if(t.length===0)return 1/0;let e=1/0,n=-1/0;for(let o of t)e=Math.min(e,o.point.x),n=Math.max(n,o.point.x);return n-e}function Ot(t,e){return t*73856093^e*19349663}var It=class{constructor(t){this.c=t,this.grid=new Map;let{ids:e,first:n,count:o,per:s,seedX:a,seedY:i,backbone:c}=t,l=e.length;this.points=Array.from({length:l},()=>{}),this.params=Array.from({length:l},()=>{}),this.curves=Array.from({length:l},()=>{}),this.links=t.links.map((r,f)=>r.map(g=>g.filter(([E])=>E!==f))),this.route=e.map(r=>r.startsWith(ct));let d=1/0,h=-1/0;for(let r=0;r<l;r++){let f=n[r];!c[f]||Number.isNaN(a[f])||(d=Math.min(d,a[f]),h=Math.max(h,a[f]+s[r]*(o[r]-1)))}this.backbone=new ut([{x:d,y:0},{x:h,y:0}],[{x:0,y:1},{x:0,y:1}],!0),this.backboneCentroid={x:(d+h)/2,y:0};for(let r=0;r<l;r++){let f=n[r];if(!c[f]||Number.isNaN(a[f]))continue;let g=[],E=[];for(let _=0;_<o[r];_++){let B=a[f]+_*s[r];g.push({x:B,y:i[f]}),E.push(B-d)}this.points[r]=g,this.params[r]=E,this.curves[r]=this.backbone,this.occupy(g,this.backbone)}}static hasBackbone(t){for(let e=0;e<t.ids.length;e++){let n=t.first[e];if(t.backbone[n]&&!Number.isNaN(t.seedX[n]))return!0}return!1}run(){let t=[];for(let n=0;n<this.points.length;n++)this.points[n]||t.push(n);let e=this.componentsOf(t).map(n=>({members:n,anchors:this.anchorsOf(n)})).filter(n=>n.anchors.length).map(n=>({members:n.members,span:kt(n.anchors),drawn:n.members.reduce((o,s)=>o+this.drawn(s),0)})).sort((n,o)=>n.span-o.span||n.drawn-o.drawn);for(let n of e)this.placePiece(n.members,this.backboneCentroid)}write(t,e){let{first:n}=this.c;this.points.forEach((o,s)=>{o?.forEach((a,i)=>{t[n[s]+i]=a.x,e[n[s]+i]=a.y})})}drawn(t){return this.c.per[t]*(this.c.count[t]-1)}endIndex(t,e){return e?this.c.count[t]-1:0}occupy(t,e){for(let n of t){let o=Ot(Math.floor(n.x/tt),Math.floor(n.y/tt)),s=this.grid.get(o),a={x:n.x,y:n.y,curve:e};s?s.push(a):this.grid.set(o,[a])}}violations(t,e,n,o){let s=0;for(let a of t){if(n.some(l=>Math.hypot(a.x-l.x,a.y-l.y)<2*gt))continue;let i=Math.floor(a.x/tt),c=Math.floor(a.y/tt);for(let l=i-1;l<=i+1;l++)for(let d=c-1;d<=c+1;d++)for(let h of this.grid.get(Ot(l,d))??[])if(h.curve!==e&&Math.hypot(a.x-h.x,a.y-h.y)<tt&&(s++,s>=o))return s}return s}choose(t,e,n){let o,s=1/0;for(let a of t){let i=a(),c=this.violations(i.pts,e,n,s);if(c===0)return i;c<s&&(s=c,o=i)}return o}anchorsOf(t){let e=new Set(t),n=[];for(let o of t)for(let s of ht)for(let[a,i]of this.links[o][s]){let c=this.points[a];if(e.has(a)||!c)continue;let l=this.endIndex(a,i);n.push({u:o,uSide:s,v:a,vSide:i,point:c[l],curve:this.curves[a],t:this.params[a][l]})}return n}componentsOf(t){let e=new Set(t),n=new Set,o=[];for(let s of t){if(n.has(s))continue;let a=[s];n.add(s);for(let i of a)for(let c of ht)for(let[l]of this.links[i][c])e.has(l)&&!n.has(l)&&(n.add(l),a.push(l));o.push(a)}return o}spinePath(t,e,n,o,s){let a=new Set(t),i=(f,g)=>f*2+g,c=(f,g)=>f===o&&Et(g)===s,l=new Map([[i(e,n),-1]]),d=[[e,n]],h=[e,n];for(let[f,g]of d){if(h=[f,g],o!==void 0&&c(f,g))break;for(let[E,_]of this.links[f][Et(g)])!a.has(E)||l.has(i(E,_))||(l.set(i(E,_),i(f,g)),d.push([E,_]))}if(o!==void 0&&!c(h[0],h[1]))return;let r=[];for(let f=i(h[0],h[1]);f!==-1;f=l.get(f))r.push({k:f>>1,enter:f&1});return r.reverse()}loosePath(t,e,n){let o=new Set(t),s=new Map([[e,-1]]),a=new Map([[e,0]]),i=[e];for(let l of i){if(l===n)break;for(let d of ht)for(let[h,r]of this.links[l][d])!o.has(h)||s.has(h)||(s.set(h,l),a.set(h,r),i.push(h))}let c=[];for(let l=n;l!==-1;l=s.get(l))c.push({k:l,enter:a.get(l)});return c.reverse()}spineLength(t){let{link:e}=this.c;return t.reduce((n,{k:o})=>n+this.drawn(o)+e,e)}layAlong(t,e,n,o){let{count:s,per:a,link:i}=this.c,c=n,l=[];for(let{k:d,enter:h}of t){let r=o??a[d],f=[],g=[];for(let E=0;E<s[d];E++)f.push(e.pointAt(c+E*r)),g.push(c+E*r);h===1&&(f.reverse(),g.reverse()),this.points[d]=f,this.params[d]=g,this.curves[d]=e,l.push(...f),c+=r*(s[d]-1)+i}return l}arcCandidates(t,e,n,o,s){let a=(s-o)/2-1e-6,i=s>2*o?on:[0],c=[];for(let l of st(0,8))for(let d of i)for(let h=0;h<=16;h++){let r=a*h/16;h<16&&ft(o,s,r,l).apex<lt||c.push(()=>pt(t,e,n,f=>an(ft(o,f,Math.min(r,(f-o)/2-1e-6),l),o,d),s))}return c}placePiece(t,e){let{count:n,link:o}=this.c,s=this.anchorsOf(t);if(s.length===0)return;let a=t.every(m=>this.route[m]),i=s.every(m=>m.curve===s[0].curve)?s[0].curve:void 0,c,l,d,h;if(i)s.sort((m,v)=>m.t-v.t),c=i,l=s[0].t,d=s[s.length-1].t,h=c===this.backbone&&a?-1:1;else{s.sort((W,Y)=>W.point.x-Y.point.x||W.point.y-Y.point.y);let m=s[0].point,v=s[s.length-1].point,I=Math.hypot(v.x-m.x,v.y-m.y),k=I>1e-9?rt(m,v):{x:1,y:0},R={x:-k.y,y:k.x},V=dt(m,v,.5);h=s.some(W=>W.curve===this.backbone)?(a?-1:1)*(Math.sign(R.y)||1):(V.x-e.x)*R.x+(V.y-e.y)*R.y>=0?1:-1,c=new ut([m,v],[R,R],!0),l=0,d=I}let r=s[0],f=s[s.length-1],g=d-l,E=s.length===1||r.u===f.u&&r.uSide===f.uSide&&g<1e-9,_=[r.point,f.point],B=m=>this.choose(m,i,_),O,y,A=o,D;if(E){O=this.spinePath(t,r.u,r.uSide);let m=this.spineLength(O),v=r.vSide?Math.max(0,n[r.v]-2):Math.min(1,n[r.v]-1),k=(r.t>=this.params[r.v][v]?1:-1)*Math.cos(Lt),R=Math.sin(Lt);y=B(st(0,12).map(V=>()=>pt(c,l,h,W=>St(0,V,k,R,W),m)))}else{O=this.spinePath(t,r.u,r.uSide,f.u,f.uSide)??this.loosePath(t,r.u,f.u);let m=this.spineLength(O);if(a){let v=Math.max(lt,Math.min(nn*g,en));y=B(st(v,12).map(k=>()=>mt(c,l,h,ft(g,rn(g,k),0,0))));let I=Tt(y.pts);D=Math.max(.001,(I-2*o)/(n[O[0].k]-1))}else if(m>g+1e-6)y=B(this.arcCandidates(c,l,h,g,m));else{let v=m-2*o;y=B(st(lt,12).map(I=>()=>pt(c,l,h,k=>St(g/2-k/2,I,1,0,k),v))),A=0}}let T=new ut(y.pts,cn(y.pts,y.refs)),q=this.layAlong(O,T,A,D);this.occupy(q,T);let H=Pt(q),M=t.filter(m=>!this.points[m]),N=this.componentsOf(M).map(m=>({members:m,span:kt(this.anchorsOf(m))})).sort((m,v)=>m.span-v.span);for(let m of N)this.placePiece(m.members,H)}};function Rt(t){let e=new Float64Array(t.n).fill(NaN),n=new Float64Array(t.n).fill(NaN);if(It.hasBackbone(t)){let o=new It(t);o.run(),o.write(e,n)}return{X:e,Y:n}}var ln=[{walks:2,iterations:15},{walks:4,iterations:30},{walks:8,iterations:60},{walks:12,iterations:90},{walks:16,iterations:120}],hn=20,fn=3,yt=.3,un=2,pn=200,dn=.1,mn=.5;function Ut(t,e){let n=e.at(-1);return(t==="+"||t==="-")&&(n==="+"||n==="-")&&t!==n}function gn(t){let e=Math.imul(t,2654435761)>>>0||1;return()=>(e^=e<<13,e>>>=0,e^=e>>>17,e^=e<<5,e>>>=0,e/4294967296)}function $(t,e){return typeof t=="number"&&Number.isFinite(t)?t:e}function yn(t){let{nodes:e,edges:n}=t.graph,o=t.options,s=$(o.nodeLengthPerMegabase,1e3),a=$(o.minimumNodeLength,1),i=$(o.nodeSegmentLength,1),c=$(o.edgeLength,1),l=e.map(M=>M.id),d=new Int32Array(e.length),h=new Int32Array(e.length),r=new Float64Array(e.length),f=0;e.forEach((M,N)=>{let m=Math.max(s*M.length/1e6,a),v=Math.max(1,Math.ceil(m/i));d[N]=f,h[N]=v+1,r[N]=m/v,f+=v+1});let g=new Int32Array(f),E=new Int32Array(f),_=new Float64Array(f).fill(NaN),B=new Float64Array(f).fill(NaN),O=new Uint8Array(f),y=Array.from({length:f},()=>[]);e.forEach((M,N)=>{let m=typeof M.x=="number"&&typeof M.y=="number",v=At(M)?1:0;for(let I=0;I<h[N];I++){let k=d[N]+I;g[k]=N,E[k]=I,O[k]=v,m&&(_[k]=M.x+I*r[N],B[k]=M.y),I>0&&(y[k-1].push([k,r[N]]),y[k].push([k-1,r[N]]))}});let A=new Map(l.map((M,N)=>[M,N])),D=e.map(()=>[[],[]]);for(let M of n){let N=A.get(M.from),m=A.get(M.to);if(N===void 0||m===void 0||N===m&&h[N]<=2)continue;let v=Ut(M.fromStrand,M.from)?0:1,I=Ut(M.toStrand,M.to)?1:0,k=d[N]+(v?h[N]-1:0),R=d[m]+(I?h[m]-1:0);y[k].push([R,c]),y[R].push([k,c]),D[N][v].push([m,I]),D[m][I].push([N,v])}let T=new Int32Array(f+1);for(let M=0;M<f;M++)T[M+1]=T[M]+y[M].length;let q=new Int32Array(T[f]),H=new Float64Array(T[f]);for(let M=0;M<f;M++)y[M].forEach(([N,m],v)=>{q[T[M]+v]=N,H[T[M]+v]=m});return{ids:l,first:d,count:h,per:r,links:D,chainOf:g,indexOf:E,seedX:_,seedY:B,backbone:O,off:T,nb:q,wt:H,n:f,link:c}}function xn(t){let{n:e,off:n,nb:o}=t,s=new Int32Array(e).fill(-1),a=[];for(let i=0;i<e;i++){if(s[i]>=0)continue;let c=[i];s[i]=a.length;for(let l of c)for(let d=n[l];d<n[l+1];d++){let h=o[d];s[h]<0&&(s[h]=a.length,c.push(h))}a.push(c)}return{comp:s,members:a}}function Bt(t,e={}){let n=yn(t),{n:o,off:s,nb:a,wt:i,seedX:c,seedY:l,backbone:d,first:h,count:r,per:f,link:g}=n,E=t.options,_=ln[Math.max(0,Math.min(4,$(e.quality??E.quality,2)))],B=$(e.componentSeparation??E.componentSeparation,15),O=gn($(e.seed??E.seed,1)),y=new Float64Array(o),A=new Float64Array(o),D={};if(o===0)return{nodePositions:D};let{comp:T,members:q}=xn(n),H=1/0,M=0;for(let u=0;u<a.length;u++)H=Math.min(H,i[u]),M+=i[u];M/=2;let N=!1;for(let u=0;u<o;u++)if(!Number.isNaN(c[u])){N=!0;break}let m=N?Rt(n):void 0,v=Math.sqrt(o)*20;for(let u=0;u<o;u++)m&&!Number.isNaN(m.X[u])?(y[u]=m.X[u],A[u]=m.Y[u]):N&&!Number.isNaN(c[u])?(y[u]=c[u]+O()-.5,A[u]=l[u]+O()-.5):(y[u]=O()*v,A[u]=O()*v);let I=q.map(u=>Int32Array.from(u.filter(x=>d[x]&&!Number.isNaN(c[x])).sort((x,p)=>c[x]-c[p]))),k=I.map(u=>Float64Array.from(u,x=>c[x])),R=0;for(let u of k)u.length&&(R=Math.max(R,u[u.length-1]-u[0]));let V=Math.max(R,M/4,H*10),W=V*V,Y=dn*H*H,{walks:$t,iterations:it}=_,zt=Math.log(W/Y)/Math.max(1,it-1),et=Math.log(H),vt=Math.log(V),wt=(u,x,p,w)=>{let S=w/(p*p);S>1&&(S=1);let L=y[u]-y[x],b=A[u]-A[x],U=Math.sqrt(L*L+b*b)||1e-9,P=S*(U-p)/(2*U),C=P*L,F=P*b;y[u]=y[u]-C,A[u]=A[u]-F,y[x]=y[x]+C,A[x]=A[x]+F},X=0,Qt=(u,x)=>{let p=n.chainOf[u],w=n.indexOf[u],S=O()<.5?-1:1,L=x;for(let b=0;b<pn;b++){let U=r[p],P=f[p],C=(S>0?U-1-w:w)*P;if(L<=C){let J=Math.round(L/P);return X=x-L+J*P,h[p]+w+S*J}L-=C;let F=n.links[p][S>0?1:0];if(F.length===0)return X=x-L,h[p]+(S>0?U-1:0);let[G,j]=F[Math.floor(O()*F.length)];if(L-=g,p=G,S=j===0?1:-1,w=j===0?0:r[G]-1,L<=0)return X=x-L,h[p]+w}return-1},Nt=(u,x)=>{let p=I[T[u]];if(!d[u]||p.length<2||Number.isNaN(c[u]))return;let w=k[T[u]],S=c[u]+Math.exp(et+O()*(vt-et))*(O()<.5?-1:1),L=0,b=w.length;for(;L<b;){let G=L+b>>1;w[G]<S?L=G+1:b=G}let U=p[Math.min(L,p.length-1)],P=c[U]-c[u];if(U===u||P===0)return;let C=x/(P*P);C>1&&(C=1);let F=C*(y[U]-y[u]-P)/2;y[u]=y[u]+F,y[U]=y[U]-F},bt=(u,x)=>{for(let p=s[u];p<s[u+1];p++){let w=a[p];w>u&&wt(u,w,i[p],x)}},z=new Int32Array(o);for(let u=0;u<o;u++)z[u]=u;let Zt=N?Math.floor(mn*it):0;for(let u=Zt;u<it;u++){let x=W*Math.exp(-zt*u);for(let p=o-1;p>0;p--){let w=Math.floor(O()*(p+1)),S=z[p];z[p]=z[w],z[w]=S}for(let p=0;p<o;p++){let w=z[p];bt(w,x);for(let S=0;S<$t;S++){let L=Math.exp(et+O()*(vt-et)),b=Qt(w,L);b>=0&&b!==w&&X>0&&wt(w,b,X,x)}Nt(w,x)}}let K=fn*g,Yt=(u,x)=>Math.floor(u/K)*73856093^Math.floor(x/K)*19349663;for(let u=0;u<hn;u++){let x=new Map;for(let p=0;p<o;p++){let w=Yt(y[p],A[p]),S=x.get(w);S?S.push(p):x.set(w,[p])}for(let p=0;p<o;p++){let w=Math.floor(y[p]/K),S=Math.floor(A[p]/K);for(let L=w-1;L<=w+1;L++)for(let b=S-1;b<=S+1;b++){let U=x.get(L*73856093^b*19349663);if(U)for(let P of U){if(P<=p)continue;let C=!1;for(let Q=s[p];Q<s[p+1];Q++)if(a[Q]===P){C=!0;break}if(C)continue;let F=y[p]-y[P],G=A[p]-A[P],j=Math.sqrt(F*F+G*G);if(j>=K)continue;let J,ot;if(j>1e-6){let Q=yt*(K-j)/(2*j);J=Q*F,ot=Q*G}else J=yt*K*(O()-.5),ot=yt*K*(O()-.5);y[p]=y[p]+J,A[p]=A[p]+ot,y[P]=y[P]-J,A[P]=A[P]-ot}}}for(let p=0;p<o;p++)bt(p,1/0),Nt(p,Y*4)}for(let u=0;u<r.length;u++){let x=h[u],p=r[u];if(!(p<3)){for(let w=0;w<un;w++){let S=y.slice(x,x+p),L=A.slice(x,x+p);for(let b=1;b+1<p;b++)y[x+b]=.5*S[b]+.25*(S[b-1]+S[b+1]),A[x+b]=.5*L[b]+.25*(L[b-1]+L[b+1])}Mn(y,A,x,p,f[u])}}vn(T,q,y,A,N,B);for(let u=0;u<n.ids.length;u++){let x=[];for(let p=0;p<r[u];p++)x.push({x:y[h[u]+p],y:A[h[u]+p]});D[n.ids[u]]=x}return{nodePositions:D}}function Mn(t,e,n,o,s){let a=new Float64Array(o);for(let r=1;r<o;r++)a[r]=a[r-1]+Math.hypot(t[n+r]-t[n+r-1],e[n+r]-e[n+r-1]);if(!a[o-1])return;let i=s*(o-1)-a[o-1];if(i>0){Ft(t,e,n,n+1,i/2),Ft(t,e,n+o-1,n+o-2,i/2);for(let r=1;r<o;r++)a[r]=a[r-1]+Math.hypot(t[n+r]-t[n+r-1],e[n+r]-e[n+r-1])}let c=a[o-1],l=t.slice(n,n+o),d=e.slice(n,n+o),h=1;for(let r=1;r+1<o;r++){let f=c*r/(o-1);for(;h<o-1&&a[h]<f;)h++;let g=a[h]-a[h-1],E=g>0?(f-a[h-1])/g:0;t[n+r]=l[h-1]+(l[h]-l[h-1])*E,e[n+r]=d[h-1]+(d[h]-d[h-1])*E}}function Ft(t,e,n,o,s){let a=t[n]-t[o],i=e[n]-e[o],c=Math.hypot(a,i);c>0&&(t[n]=t[n]+a/c*s,e[n]=e[n]+i/c*s)}function vn(t,e,n,o,s,a){if(!s)for(let r of e)wn(n,o,r);if(e.length<2)return;let i=new Float64Array(e.length).fill(1/0),c=new Float64Array(e.length).fill(1/0),l=new Float64Array(e.length).fill(-1/0);for(let r=0;r<n.length;r++){let f=t[r];i[f]=Math.min(i[f],n[r]),c[f]=Math.min(c[f],o[r]),l[f]=Math.max(l[f],o[r])}let d=new Float64Array(e.length),h=0;for(let r=0;r<e.length;r++)d[r]=h-c[r],h+=l[r]-c[r]+a;for(let r=0;r<n.length;r++){let f=t[r];n[r]=n[r]-i[f],o[r]=o[r]+d[f]}}function wn(t,e,n){if(n.length<3)return;let o=0,s=0;for(let r of n)o+=t[r],s+=e[r];o/=n.length,s/=n.length;let a=0,i=0,c=0;for(let r of n){let f=t[r]-o,g=e[r]-s;a+=f*f,i+=g*g,c+=f*g}let l=-.5*Math.atan2(2*c,a-i),d=Math.cos(l),h=Math.sin(l);for(let r of n){let f=t[r]-o,g=e[r]-s;t[r]=o+d*f-h*g,e[r]=s+h*f+d*g}}var xt;function Ct(){return xt??=import("./bandage-layout-3AR6BCUD-PYYNJEGI.js").then(t=>t.default()).catch(t=>{throw xt=void 0,t}),xt}var Ht=[{value:"fmmm",label:"Bandage (FMMM)",description:"Bandage's force-directed layout: OGDF's fast multipole multilevel method, compiled to wasm."},{value:"stress",label:"Stress (experimental)",description:"Stress layout by stochastic gradient descent in plain JS: distances along the graph become distances on the page, so the reference reads straight and a repeat loop reads as a ring."}],Nn=Ht.map(t=>t.value);var bn=async t=>{if(t.options.engine==="stress"){let s=performance.now();return{result:Bt(t),duration:performance.now()-s}}let e=await Ct(),n=performance.now();return{result:e.computeLayout(t.graph,t.options),duration:performance.now()-n}};var Dt=[{value:"auto",label:"Auto"},{value:"uniform",label:"Uniform"},{value:"random",label:"Random"},{value:"rainbow",label:"Rainbow"},{value:"depth",label:"Depth"},{value:"node-length",label:"Node length"},{value:"stable-rank",label:"Stable rank"},{value:"reference-position",label:"Reference position"},{value:"grey",label:"Grey"}],An=Dt.map(t=>t.value);function Ln(t,e){return t!=="auto"?t:e?.anchoredBy?"reference-position":"uniform"}var nt=40,Wt=500,at=5;function En(t,e){return Math.max(t.nodeLengthPerMegabase*e/1e6,t.minimumNodeLength)}function qt(t,e=at){let o=t.nodes.reduce((a,i)=>a+i.length,0)/1e6,s=Math.max(t.nodes.length*nt,Wt);return{nodeLengthPerMegabase:o>0?s/o:1e4,minimumNodeLength:Math.max(at,e),edgeLength:5,nodeSegmentLength:20}}var Z={power:1,effect:1};function Vt(t){return t.power===1&&t.effect===1}function Kt(t,e){let n=t.nodes.length,o=t.nodes.reduce((i,c)=>i+c.length,0),s=n>0?o/n:0,a=n>0?Math.max(n*nt,Wt)/n:nt;return i=>{if(s<=0)return a;let c=(i/s)**e.power;return Math.max(a*((c-1)*e.effect+1),at)}}var Gt=1e3,jt={law:Z,minNodeLength:0};function ee(t,e=jt){let{law:n,minNodeLength:o}=e,s=qt(t,o);if(Vt(n))return{nodes:t.nodes,opts:s};let a=Kt(t,n);return{nodes:t.nodes.map(i=>({...i,length:Math.round(a(i.length)*Gt)})),opts:{...s,nodeLengthPerMegabase:1e6/Gt,minimumNodeLength:at}}}function oe(t,e=jt){if(Vt(e.law)){let n=qt(t,e.minNodeLength);return o=>En(n,o)}return Kt(t,e.law)}var Mt=[{value:"auto",label:"Proportional",description:"Bandage's own scale: a node draws proportional to its length, so a 1 bp allele is a speck.",law:Z,minNodeFactor:0},{value:"open",label:"Open bubbles",description:"Give every allele a drawn length, so a bubble reads as two arms rather than a knot.",law:Z,minNodeFactor:2.5},{value:"wide",label:"Wide bubbles",description:"As open, spread further. Best on a window of a dozen bubbles.",law:Z,minNodeFactor:10},{value:"compress",label:"Compress lengths",description:"Pull the longest and shortest nodes towards the graph\u2019s mean, so a cut spanning kb and bp fits one pane.",law:{power:.5,effect:.5},minNodeFactor:0}],Sn=Mt.map(t=>t.value);function kn(t){let e=Mt.find(n=>n.value===t);return{law:e?.law??Z,minNodeLength:(e?.minNodeFactor??0)*nt}}export{In as a,Pn as b,_n as c,Ht as d,Nn as e,bn as f,Dt as g,An as h,Ln as i,En as j,ee as k,oe as l,Mt as m,Sn as n,kn as o,On as p};
|
|
2
|
+
//# sourceMappingURL=chunk-OTI5X5W7.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["global-externals:tss-react/mui", "../../node_modules/.pnpm/@jbrowse+bandage-core@8.0.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-JVLURPFW.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@8.0.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-LYJ4US66.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@8.0.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-UNOE2NDN.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@8.0.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-7XHHVYG7.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@8.0.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-6EJIU6IA.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@8.0.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-JKJWSY4V.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@8.0.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-6JEWNXCQ.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@8.0.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-UVBGRJQX.js"],
|
|
4
|
+
"sourcesContent": ["module.exports = JBrowseExports[\"tss-react/mui\"];", "// src/layout/deletionRoutes.ts\nvar ROUTE_ID = \"\\0deletion:\";\nvar ROUTE_FRACTION = 0.5;\nfunction withDeletionRoutes(graph, deletions, dropped = /* @__PURE__ */ new Set()) {\n const routes = new Map(\n deletions.map((d) => [d.edgeIndex, `${ROUTE_ID}${d.edgeIndex}`])\n );\n const edges = [];\n graph.edges.forEach((edge, ei) => {\n const id = routes.get(ei);\n if (dropped.has(ei)) {\n return;\n }\n if (id === void 0) {\n edges.push(edge);\n } else {\n const { fromStrand, toStrand } = edge;\n edges.push(\n { from: edge.from, to: id, ...fromStrand ? { fromStrand } : {} },\n { from: id, to: edge.to, ...toStrand ? { toStrand } : {} }\n );\n }\n });\n return {\n graph: {\n ...graph,\n nodes: [\n ...graph.nodes,\n ...[...routes.values()].map((id) => ({\n id,\n name: id,\n length: 0,\n depth: 0\n }))\n ],\n edges\n },\n routes,\n ids: new Set(routes.values())\n };\n}\nfunction routeNodes(graph, deletions, routes, drawnOf, opts) {\n const lengths = new Map(graph.nodes.map((n) => [n.id, n.length]));\n return deletions.map((d) => {\n const skipped = d.bypassed.reduce(\n (sum, id2) => sum + (lengths.get(id2) ?? 0),\n 0\n );\n const drawn = Math.max(\n opts.minimumNodeLength,\n drawnOf(skipped) * ROUTE_FRACTION\n );\n const id = routes.get(d.edgeIndex);\n return {\n id,\n name: id,\n length: Math.round(drawn * 1e6 / opts.nodeLengthPerMegabase),\n depth: 0\n };\n });\n}\nfunction takeRoutes(positions, routes) {\n const nodePositions = { ...positions };\n const deletionRoutes = {};\n for (const [edgeIndex, id] of routes) {\n const route = nodePositions[id];\n delete nodePositions[id];\n if (route?.length) {\n deletionRoutes[edgeIndex] = route;\n }\n }\n return { nodePositions, deletionRoutes };\n}\n\nexport {\n ROUTE_ID,\n withDeletionRoutes,\n routeNodes,\n takeRoutes\n};\n", "import {\n ROUTE_ID\n} from \"./chunk-JVLURPFW.js\";\n\n// src/layout/stressPlacement.ts\nvar MIN_DEPTH = 12;\nvar LANE_GAP = 15;\nvar CLEAR = LANE_GAP * 0.7;\nvar TIP_ANGLE = 25 * Math.PI / 180;\nvar ROUTE_BOW = 0.25;\nvar ROUTE_CAP = 150;\nvar TEARDROP_TILTS = [0, -0.35, 0.35, -0.7, 0.7];\nvar SIDES = [0, 1];\nfunction other(side) {\n return side ? 0 : 1;\n}\nfunction unit(a, b) {\n const dx = b.x - a.x;\n const dy = b.y - a.y;\n const m = Math.hypot(dx, dy) || 1;\n return { x: dx / m, y: dy / m };\n}\nfunction lerp(a, b, f) {\n return { x: a.x + (b.x - a.x) * f, y: a.y + (b.y - a.y) * f };\n}\nfunction centroidOf(pts) {\n let x = 0;\n let y = 0;\n for (const p of pts) {\n x += p.x;\n y += p.y;\n }\n return { x: x / pts.length, y: y / pts.length };\n}\nfunction arcLengths(pts) {\n const arc = new Float64Array(pts.length);\n for (let i = 1; i < pts.length; i++) {\n arc[i] = arc[i - 1] + Math.hypot(pts[i].x - pts[i - 1].x, pts[i].y - pts[i - 1].y);\n }\n return arc;\n}\nfunction polylineLength(pts) {\n return arcLengths(pts)[pts.length - 1] ?? 0;\n}\nfunction arcAngle(ratio) {\n let lo = 1e-6;\n let hi = 2 * Math.PI - 1e-6;\n for (let i = 0; i < 60; i++) {\n const mid = (lo + hi) / 2;\n if (mid / (2 * Math.sin(mid / 2)) < ratio) {\n lo = mid;\n } else {\n hi = mid;\n }\n }\n return (lo + hi) / 2;\n}\nfunction archLength(c, s) {\n if (c < 1e-9) {\n return Math.PI * s;\n }\n const R = (c * c / 4 + s * s) / (2 * s);\n const theta = 2 * Math.asin(Math.min(1, c / (2 * R)));\n return R * (s > R ? 2 * Math.PI - theta : theta);\n}\nfunction arcFlat(c, length, h, drop) {\n const arc = length - 2 * h;\n const theta = c < 1e-9 ? 2 * Math.PI : arcAngle(arc / c);\n const R = arc / theta;\n const cos = Math.cos(theta / 2);\n const cu = c / 2;\n const cv = drop + h - R * cos;\n return {\n at: (t) => {\n if (t <= h) {\n return { u: 0, v: drop + t };\n }\n if (t >= length - h) {\n return { u: c, v: drop + length - t };\n }\n const a = (t - h) / R - theta / 2;\n return { u: cu + R * Math.sin(a), v: cv + R * Math.cos(a) };\n },\n apex: drop + h + R * (1 - cos),\n length\n };\n}\nfunction tilted(flat, c, angle) {\n if (!angle) {\n return flat;\n }\n const cos = Math.cos(angle);\n const sin = Math.sin(angle);\n return {\n ...flat,\n at: (t) => {\n const { u, v } = flat.at(t);\n const du = u - c / 2;\n return { u: c / 2 + du * cos - v * sin, v: du * sin + v * cos };\n }\n };\n}\nfunction lineFlat(u0, v0, du, dv, length) {\n return {\n at: (t) => ({ u: u0 + du * t, v: v0 + dv * t }),\n apex: v0 + Math.max(0, dv) * length,\n length\n };\n}\nvar Curve = class {\n constructor(pts, normals, straight = false) {\n this.pts = pts;\n this.normals = normals;\n this.straight = straight;\n this.arc = arcLengths(pts);\n this.total = this.arc[pts.length - 1] ?? 0;\n }\n segment(t) {\n const { arc } = this;\n let lo = 1;\n let hi = arc.length - 1;\n while (lo < hi) {\n const mid = lo + hi >> 1;\n if (arc[mid] < t) {\n lo = mid + 1;\n } else {\n hi = mid;\n }\n }\n return lo;\n }\n fraction(i, t) {\n const span = this.arc[i] - this.arc[i - 1];\n return span > 0 ? (t - this.arc[i - 1]) / span : 0;\n }\n pointAt(t) {\n const { pts } = this;\n const last = pts.length - 1;\n if (last === 0) {\n return { ...pts[0] };\n }\n if (t <= 0) {\n const d = unit(pts[0], pts[1]);\n return { x: pts[0].x + d.x * t, y: pts[0].y + d.y * t };\n }\n if (t >= this.total) {\n const d = unit(pts[last - 1], pts[last]);\n const r = t - this.total;\n return { x: pts[last].x + d.x * r, y: pts[last].y + d.y * r };\n }\n const i = this.segment(t);\n return lerp(pts[i - 1], pts[i], this.fraction(i, t));\n }\n normalAt(t) {\n const { normals } = this;\n if (normals.length === 1 || t <= 0) {\n return normals[0];\n }\n if (t >= this.total) {\n return normals[normals.length - 1];\n }\n const i = this.segment(t);\n const { x, y } = lerp(normals[i - 1], normals[i], this.fraction(i, t));\n const m = Math.hypot(x, y) || 1;\n return { x: x / m, y: y / m };\n }\n};\nfunction outwardNormals(pts, outRef) {\n const centroid = centroidOf(pts);\n return pts.map((p, i) => {\n const t = unit(\n pts[Math.max(0, i - 1)],\n pts[Math.min(pts.length - 1, i + 1)]\n );\n const n = { x: -t.y, y: t.x };\n const rx = p.x - centroid.x;\n const ry = p.y - centroid.y;\n const rm = Math.hypot(rx, ry);\n const dot = n.x * rx + n.y * ry;\n const ref = outRef[i];\n const sign = rm > 1e-9 && Math.abs(dot) > 0.3 * rm ? Math.sign(dot) : Math.sign(n.x * ref.x + n.y * ref.y) || 1;\n return { x: n.x * sign, y: n.y * sign };\n });\n}\nfunction mapFlat(frame, tA, sign, flat) {\n const ds = Math.min(5, Math.max(flat.length / 24, 0.5));\n const pts = [];\n const refs = [];\n for (let t = 0; t <= flat.length + 1e-9; t += ds) {\n const { u, v } = flat.at(Math.min(t, flat.length));\n const q = frame.pointAt(tA + u);\n const nr = frame.normalAt(tA + u);\n const ox = nr.x * sign;\n const oy = nr.y * sign;\n pts.push({ x: q.x + ox * v, y: q.y + oy * v });\n refs.push({ x: ox, y: oy });\n }\n return { pts, refs };\n}\nfunction fitted(frame, tA, sign, make, length) {\n let flatLength = length;\n let mapped = mapFlat(frame, tA, sign, make(flatLength));\n if (frame.straight) {\n return mapped;\n }\n for (let i = 0; i < 2; i++) {\n const got = polylineLength(mapped.pts);\n if (!(got > 0)) {\n break;\n }\n flatLength *= length / got;\n mapped = mapFlat(frame, tA, sign, make(flatLength));\n }\n return mapped;\n}\nfunction depths(from, n) {\n return Array.from({ length: n }, (_, i) => from + i * LANE_GAP / 2);\n}\nfunction spanOf(anchors) {\n if (anchors.length === 0) {\n return Infinity;\n }\n let lo = Infinity;\n let hi = -Infinity;\n for (const a of anchors) {\n lo = Math.min(lo, a.point.x);\n hi = Math.max(hi, a.point.x);\n }\n return hi - lo;\n}\nfunction cellKey(gx, gy) {\n return gx * 73856093 ^ gy * 19349663;\n}\nvar Placer = class {\n constructor(c) {\n this.c = c;\n this.grid = /* @__PURE__ */ new Map();\n const { ids, first, count, per, seedX, seedY, backbone } = c;\n const N = ids.length;\n this.points = Array.from({ length: N }, () => void 0);\n this.params = Array.from({ length: N }, () => void 0);\n this.curves = Array.from({ length: N }, () => void 0);\n this.links = c.links.map(\n (sides, k) => sides.map((out) => out.filter(([v]) => v !== k))\n );\n this.route = ids.map((id) => id.startsWith(ROUTE_ID));\n let min = Infinity;\n let max = -Infinity;\n for (let k = 0; k < N; k++) {\n const start = first[k];\n if (!backbone[start] || Number.isNaN(seedX[start])) {\n continue;\n }\n min = Math.min(min, seedX[start]);\n max = Math.max(max, seedX[start] + per[k] * (count[k] - 1));\n }\n this.backbone = new Curve(\n [\n { x: min, y: 0 },\n { x: max, y: 0 }\n ],\n [\n { x: 0, y: 1 },\n { x: 0, y: 1 }\n ],\n true\n );\n this.backboneCentroid = { x: (min + max) / 2, y: 0 };\n for (let k = 0; k < N; k++) {\n const start = first[k];\n if (!backbone[start] || Number.isNaN(seedX[start])) {\n continue;\n }\n const pts = [];\n const ts = [];\n for (let i = 0; i < count[k]; i++) {\n const x = seedX[start] + i * per[k];\n pts.push({ x, y: seedY[start] });\n ts.push(x - min);\n }\n this.points[k] = pts;\n this.params[k] = ts;\n this.curves[k] = this.backbone;\n this.occupy(pts, this.backbone);\n }\n }\n static hasBackbone(c) {\n for (let k = 0; k < c.ids.length; k++) {\n const start = c.first[k];\n if (c.backbone[start] && !Number.isNaN(c.seedX[start])) {\n return true;\n }\n }\n return false;\n }\n run() {\n const free = [];\n for (let k = 0; k < this.points.length; k++) {\n if (!this.points[k]) {\n free.push(k);\n }\n }\n const pieces = this.componentsOf(free).map((members) => ({ members, anchors: this.anchorsOf(members) })).filter((p) => p.anchors.length).map((p) => ({\n members: p.members,\n span: spanOf(p.anchors),\n drawn: p.members.reduce((s, k) => s + this.drawn(k), 0)\n })).sort((a, b) => a.span - b.span || a.drawn - b.drawn);\n for (const p of pieces) {\n this.placePiece(p.members, this.backboneCentroid);\n }\n }\n write(X, Y) {\n const { first } = this.c;\n this.points.forEach((pts, k) => {\n pts?.forEach((p, i) => {\n X[first[k] + i] = p.x;\n Y[first[k] + i] = p.y;\n });\n });\n }\n drawn(k) {\n return this.c.per[k] * (this.c.count[k] - 1);\n }\n endIndex(k, side) {\n return side ? this.c.count[k] - 1 : 0;\n }\n occupy(pts, curve) {\n for (const p of pts) {\n const key = cellKey(Math.floor(p.x / CLEAR), Math.floor(p.y / CLEAR));\n const list = this.grid.get(key);\n const occupant = { x: p.x, y: p.y, curve };\n if (list) {\n list.push(occupant);\n } else {\n this.grid.set(key, [occupant]);\n }\n }\n }\n // placed points within CLEAR of the candidate, off the exempt curve and away\n // from the anchors, up to `limit`\n violations(pts, exempt, anchorPts, limit) {\n let n = 0;\n for (const p of pts) {\n if (anchorPts.some((a) => Math.hypot(p.x - a.x, p.y - a.y) < 2 * LANE_GAP)) {\n continue;\n }\n const cx = Math.floor(p.x / CLEAR);\n const cy = Math.floor(p.y / CLEAR);\n for (let gx = cx - 1; gx <= cx + 1; gx++) {\n for (let gy = cy - 1; gy <= cy + 1; gy++) {\n for (const q of this.grid.get(cellKey(gx, gy)) ?? []) {\n if (q.curve !== exempt && Math.hypot(p.x - q.x, p.y - q.y) < CLEAR) {\n n++;\n if (n >= limit) {\n return n;\n }\n }\n }\n }\n }\n }\n return n;\n }\n // the first candidate that clears what is drawn, else the least crowded\n choose(candidates, exempt, anchorPts) {\n let best;\n let bestV = Infinity;\n for (const candidate of candidates) {\n const m = candidate();\n const v = this.violations(m.pts, exempt, anchorPts, bestV);\n if (v === 0) {\n return m;\n }\n if (v < bestV) {\n bestV = v;\n best = m;\n }\n }\n return best;\n }\n anchorsOf(members) {\n const set = new Set(members);\n const out = [];\n for (const u of members) {\n for (const uSide of SIDES) {\n for (const [v, vSide] of this.links[u][uSide]) {\n const pts = this.points[v];\n if (set.has(v) || !pts) {\n continue;\n }\n const i = this.endIndex(v, vSide);\n out.push({\n u,\n uSide,\n v,\n vSide,\n point: pts[i],\n curve: this.curves[v],\n t: this.params[v][i]\n });\n }\n }\n }\n return out;\n }\n componentsOf(members) {\n const set = new Set(members);\n const seen = /* @__PURE__ */ new Set();\n const comps = [];\n for (const s of members) {\n if (seen.has(s)) {\n continue;\n }\n const queue = [s];\n seen.add(s);\n for (const u of queue) {\n for (const side of SIDES) {\n for (const [v] of this.links[u][side]) {\n if (set.has(v) && !seen.has(v)) {\n seen.add(v);\n queue.push(v);\n }\n }\n }\n }\n comps.push(queue);\n }\n return comps;\n }\n // side-consistent BFS over (node, entered side) within the piece; without a\n // target, the path to the farthest state\n spinePath(members, from, fromSide, to, toExitSide) {\n const set = new Set(members);\n const key = (k, s) => k * 2 + s;\n const reached = (k, s) => k === to && other(s) === toExitSide;\n const prev = /* @__PURE__ */ new Map([[key(from, fromSide), -1]]);\n const queue = [[from, fromSide]];\n let far = [from, fromSide];\n for (const [k, s] of queue) {\n far = [k, s];\n if (to !== void 0 && reached(k, s)) {\n break;\n }\n for (const [v, t] of this.links[k][other(s)]) {\n if (!set.has(v) || prev.has(key(v, t))) {\n continue;\n }\n prev.set(key(v, t), key(k, s));\n queue.push([v, t]);\n }\n }\n if (to !== void 0 && !reached(far[0], far[1])) {\n return void 0;\n }\n const path = [];\n for (let cur = key(far[0], far[1]); cur !== -1; cur = prev.get(cur)) {\n path.push({ k: cur >> 1, enter: cur & 1 });\n }\n return path.reverse();\n }\n loosePath(members, from, to) {\n const set = new Set(members);\n const prev = /* @__PURE__ */ new Map([[from, -1]]);\n const side = /* @__PURE__ */ new Map([[from, 0]]);\n const queue = [from];\n for (const k of queue) {\n if (k === to) {\n break;\n }\n for (const s of SIDES) {\n for (const [v, t] of this.links[k][s]) {\n if (!set.has(v) || prev.has(v)) {\n continue;\n }\n prev.set(v, k);\n side.set(v, t);\n queue.push(v);\n }\n }\n }\n const path = [];\n for (let cur = to; cur !== -1; cur = prev.get(cur)) {\n path.push({ k: cur, enter: side.get(cur) });\n }\n return path.reverse();\n }\n spineLength(spine) {\n const { link } = this.c;\n return spine.reduce((s, { k }) => s + this.drawn(k) + link, link);\n }\n // the spine's chains along the curve from arc length t0, at their own\n // spacing unless one is given\n layAlong(spine, curve, t0, spacing) {\n const { count, per, link } = this.c;\n let t = t0;\n const all = [];\n for (const { k, enter } of spine) {\n const step = spacing ?? per[k];\n const pts = [];\n const ts = [];\n for (let i = 0; i < count[k]; i++) {\n pts.push(curve.pointAt(t + i * step));\n ts.push(t + i * step);\n }\n if (enter === 1) {\n pts.reverse();\n ts.reverse();\n }\n this.points[k] = pts;\n this.params[k] = ts;\n this.curves[k] = curve;\n all.push(...pts);\n t += step * (count[k] - 1) + link;\n }\n return all;\n }\n arcCandidates(frame, tA, sign, c, L) {\n const hMax = (L - c) / 2 - 1e-6;\n const tilts = L > 2 * c ? TEARDROP_TILTS : [0];\n const candidates = [];\n for (const drop of depths(0, 8)) {\n for (const tilt of tilts) {\n for (let i = 0; i <= 16; i++) {\n const h = hMax * i / 16;\n if (i < 16 && arcFlat(c, L, h, drop).apex < MIN_DEPTH) {\n continue;\n }\n candidates.push(\n () => fitted(\n frame,\n tA,\n sign,\n (length) => tilted(\n arcFlat(\n c,\n length,\n Math.min(h, (length - c) / 2 - 1e-6),\n drop\n ),\n c,\n tilt\n ),\n L\n )\n );\n }\n }\n }\n return candidates;\n }\n placePiece(members, parent) {\n const { count, link } = this.c;\n const anchors = this.anchorsOf(members);\n if (anchors.length === 0) {\n return;\n }\n const route = members.every((k) => this.route[k]);\n const shared = anchors.every((a) => a.curve === anchors[0].curve) ? anchors[0].curve : void 0;\n let frame;\n let tA;\n let tB;\n let sign;\n if (shared) {\n anchors.sort((a, b) => a.t - b.t);\n frame = shared;\n tA = anchors[0].t;\n tB = anchors[anchors.length - 1].t;\n sign = frame === this.backbone && route ? -1 : 1;\n } else {\n anchors.sort((a2, b2) => a2.point.x - b2.point.x || a2.point.y - b2.point.y);\n const a = anchors[0].point;\n const b = anchors[anchors.length - 1].point;\n const chord = Math.hypot(b.x - a.x, b.y - a.y);\n const u = chord > 1e-9 ? unit(a, b) : { x: 1, y: 0 };\n const n = { x: -u.y, y: u.x };\n const mid = lerp(a, b, 0.5);\n sign = anchors.some((x) => x.curve === this.backbone) ? (route ? -1 : 1) * (Math.sign(n.y) || 1) : (mid.x - parent.x) * n.x + (mid.y - parent.y) * n.y >= 0 ? 1 : -1;\n frame = new Curve([a, b], [n, n], true);\n tA = 0;\n tB = chord;\n }\n const A = anchors[0];\n const B = anchors[anchors.length - 1];\n const c = tB - tA;\n const single = anchors.length === 1 || A.u === B.u && A.uSide === B.uSide && c < 1e-9;\n const anchorPts = [A.point, B.point];\n const pick = (candidates) => this.choose(candidates, shared, anchorPts);\n let spine;\n let mapped;\n let start = link;\n let spacing;\n if (single) {\n spine = this.spinePath(members, A.u, A.uSide);\n const L = this.spineLength(spine);\n const next = A.vSide ? Math.max(0, count[A.v] - 2) : Math.min(1, count[A.v] - 1);\n const dirU = A.t >= this.params[A.v][next] ? 1 : -1;\n const du = dirU * Math.cos(TIP_ANGLE);\n const dv = Math.sin(TIP_ANGLE);\n mapped = pick(\n depths(0, 12).map(\n (drop) => () => fitted(\n frame,\n tA,\n sign,\n (length) => lineFlat(0, drop, du, dv, length),\n L\n )\n )\n );\n } else {\n spine = this.spinePath(members, A.u, A.uSide, B.u, B.uSide) ?? this.loosePath(members, A.u, B.u);\n const L = this.spineLength(spine);\n if (route) {\n const d0 = Math.max(MIN_DEPTH, Math.min(ROUTE_BOW * c, ROUTE_CAP));\n mapped = pick(\n depths(d0, 12).map(\n (d) => () => mapFlat(frame, tA, sign, arcFlat(c, archLength(c, d), 0, 0))\n )\n );\n const total = polylineLength(mapped.pts);\n spacing = Math.max(1e-3, (total - 2 * link) / (count[spine[0].k] - 1));\n } else if (L > c + 1e-6) {\n mapped = pick(this.arcCandidates(frame, tA, sign, c, L));\n } else {\n const bar = L - 2 * link;\n mapped = pick(\n depths(MIN_DEPTH, 12).map(\n (d) => () => fitted(\n frame,\n tA,\n sign,\n (length) => lineFlat(c / 2 - length / 2, d, 1, 0, length),\n bar\n )\n )\n );\n start = 0;\n }\n }\n const curve = new Curve(mapped.pts, outwardNormals(mapped.pts, mapped.refs));\n const placed = this.layAlong(spine, curve, start, spacing);\n this.occupy(placed, curve);\n const centroid = centroidOf(placed);\n const rest = members.filter((k) => !this.points[k]);\n const subs = this.componentsOf(rest).map((m) => ({ members: m, span: spanOf(this.anchorsOf(m)) })).sort((a, b) => a.span - b.span);\n for (const sub of subs) {\n this.placePiece(sub.members, centroid);\n }\n }\n};\nfunction stressPlacement(c) {\n const X = new Float64Array(c.n).fill(NaN);\n const Y = new Float64Array(c.n).fill(NaN);\n if (Placer.hasBackbone(c)) {\n const placer = new Placer(c);\n placer.run();\n placer.write(X, Y);\n }\n return { X, Y };\n}\n\nexport {\n stressPlacement\n};\n", "import {\n stressPlacement\n} from \"./chunk-LYJ4US66.js\";\nimport {\n isBackbone\n} from \"./chunk-FYQWPEEY.js\";\n\n// src/layout/stressEngine.ts\nvar QUALITY = [\n { walks: 2, iterations: 15 },\n { walks: 4, iterations: 30 },\n { walks: 8, iterations: 60 },\n { walks: 12, iterations: 90 },\n { walks: 16, iterations: 120 }\n];\nvar UNTANGLE_PASSES = 20;\nvar UNTANGLE_LINKS = 3;\nvar UNTANGLE_PUSH = 0.3;\nvar SMOOTH_PASSES = 2;\nvar MAX_HOPS = 200;\nvar EPS = 0.1;\nvar WARM = 0.5;\nfunction flipped(strand, name) {\n const own = name.at(-1);\n return (strand === \"+\" || strand === \"-\") && (own === \"+\" || own === \"-\") && strand !== own;\n}\nfunction xorshift(seed) {\n let s = Math.imul(seed, 2654435761) >>> 0 || 1;\n return () => {\n s ^= s << 13;\n s >>>= 0;\n s ^= s >>> 17;\n s ^= s << 5;\n s >>>= 0;\n return s / 4294967296;\n };\n}\nfunction num(value, fallback) {\n return typeof value === \"number\" && Number.isFinite(value) ? value : fallback;\n}\nfunction chains(request) {\n const { nodes, edges } = request.graph;\n const o = request.options;\n const perMegabase = num(o.nodeLengthPerMegabase, 1e3);\n const minimum = num(o.minimumNodeLength, 1);\n const segment = num(o.nodeSegmentLength, 1);\n const link = num(o.edgeLength, 1);\n const ids = nodes.map((n2) => n2.id);\n const first = new Int32Array(nodes.length);\n const count = new Int32Array(nodes.length);\n const per = new Float64Array(nodes.length);\n let n = 0;\n nodes.forEach((node, k) => {\n const drawn = Math.max(perMegabase * node.length / 1e6, minimum);\n const steps = Math.max(1, Math.ceil(drawn / segment));\n first[k] = n;\n count[k] = steps + 1;\n per[k] = drawn / steps;\n n += steps + 1;\n });\n const chainOf = new Int32Array(n);\n const indexOf = new Int32Array(n);\n const seedX = new Float64Array(n).fill(NaN);\n const seedY = new Float64Array(n).fill(NaN);\n const backbone = new Uint8Array(n);\n const adjacent = Array.from({ length: n }, () => []);\n nodes.forEach((node, k) => {\n const seeded = typeof node.x === \"number\" && typeof node.y === \"number\";\n const reference = isBackbone(node) ? 1 : 0;\n for (let i = 0; i < count[k]; i++) {\n const v = first[k] + i;\n chainOf[v] = k;\n indexOf[v] = i;\n backbone[v] = reference;\n if (seeded) {\n seedX[v] = node.x + i * per[k];\n seedY[v] = node.y;\n }\n if (i > 0) {\n adjacent[v - 1].push([v, per[k]]);\n adjacent[v].push([v - 1, per[k]]);\n }\n }\n });\n const index = new Map(ids.map((id, k) => [id, k]));\n const links = nodes.map(() => [[], []]);\n for (const edge of edges) {\n const a = index.get(edge.from);\n const b = index.get(edge.to);\n if (a === void 0 || b === void 0) {\n continue;\n }\n if (a === b && count[a] <= 2) {\n continue;\n }\n const fromSide = flipped(edge.fromStrand, edge.from) ? 0 : 1;\n const toSide = flipped(edge.toStrand, edge.to) ? 1 : 0;\n const u = first[a] + (fromSide ? count[a] - 1 : 0);\n const v = first[b] + (toSide ? count[b] - 1 : 0);\n adjacent[u].push([v, link]);\n adjacent[v].push([u, link]);\n links[a][fromSide].push([b, toSide]);\n links[b][toSide].push([a, fromSide]);\n }\n const off = new Int32Array(n + 1);\n for (let i = 0; i < n; i++) {\n off[i + 1] = off[i] + adjacent[i].length;\n }\n const nb = new Int32Array(off[n]);\n const wt = new Float64Array(off[n]);\n for (let i = 0; i < n; i++) {\n adjacent[i].forEach(([v, w], k) => {\n nb[off[i] + k] = v;\n wt[off[i] + k] = w;\n });\n }\n return {\n ids,\n first,\n count,\n per,\n links,\n chainOf,\n indexOf,\n seedX,\n seedY,\n backbone,\n off,\n nb,\n wt,\n n,\n link\n };\n}\nfunction components(c) {\n const { n, off, nb } = c;\n const comp = new Int32Array(n).fill(-1);\n const members = [];\n for (let s = 0; s < n; s++) {\n if (comp[s] >= 0) {\n continue;\n }\n const queue = [s];\n comp[s] = members.length;\n for (const u of queue) {\n for (let e = off[u]; e < off[u + 1]; e++) {\n const v = nb[e];\n if (comp[v] < 0) {\n comp[v] = members.length;\n queue.push(v);\n }\n }\n }\n members.push(queue);\n }\n return { comp, members };\n}\nfunction stressLayout(request, opts = {}) {\n const c = chains(request);\n const { n, off, nb, wt, seedX, seedY, backbone, first, count, per, link } = c;\n const o = request.options;\n const quality = QUALITY[Math.max(0, Math.min(4, num(opts.quality ?? o.quality, 2)))];\n const gap = num(opts.componentSeparation ?? o.componentSeparation, 15);\n const rand = xorshift(num(opts.seed ?? o.seed, 1));\n const X = new Float64Array(n);\n const Y = new Float64Array(n);\n const nodePositions = {};\n if (n === 0) {\n return { nodePositions };\n }\n const { comp, members } = components(c);\n let dmin = Infinity;\n let total = 0;\n for (let e = 0; e < nb.length; e++) {\n dmin = Math.min(dmin, wt[e]);\n total += wt[e];\n }\n total /= 2;\n let anySeed = false;\n for (let i = 0; i < n; i++) {\n if (!Number.isNaN(seedX[i])) {\n anySeed = true;\n break;\n }\n }\n const placed = anySeed ? stressPlacement(c) : void 0;\n const side = Math.sqrt(n) * 20;\n for (let i = 0; i < n; i++) {\n if (placed && !Number.isNaN(placed.X[i])) {\n X[i] = placed.X[i];\n Y[i] = placed.Y[i];\n } else if (anySeed && !Number.isNaN(seedX[i])) {\n X[i] = seedX[i] + rand() - 0.5;\n Y[i] = seedY[i] + rand() - 0.5;\n } else {\n X[i] = rand() * side;\n Y[i] = rand() * side;\n }\n }\n const refIdx = members.map(\n (points) => Int32Array.from(\n points.filter((i) => backbone[i] && !Number.isNaN(seedX[i])).sort((a, b) => seedX[a] - seedX[b])\n )\n );\n const refX = refIdx.map((idx) => Float64Array.from(idx, (i) => seedX[i]));\n let span = 0;\n for (const xs of refX) {\n if (xs.length) {\n span = Math.max(span, xs[xs.length - 1] - xs[0]);\n }\n }\n const dmax = Math.max(span, total / 4, dmin * 10);\n const etaMax = dmax * dmax;\n const etaMin = EPS * dmin * dmin;\n const { walks, iterations } = quality;\n const lambda = Math.log(etaMax / etaMin) / Math.max(1, iterations - 1);\n const logMin = Math.log(dmin);\n const logMax = Math.log(dmax);\n const move = (i, j, d, eta) => {\n let mu = eta / (d * d);\n if (mu > 1) {\n mu = 1;\n }\n const dx = X[i] - X[j];\n const dy = Y[i] - Y[j];\n const mag = Math.sqrt(dx * dx + dy * dy) || 1e-9;\n const r = mu * (mag - d) / (2 * mag);\n const rx = r * dx;\n const ry = r * dy;\n X[i] = X[i] - rx;\n Y[i] = Y[i] - ry;\n X[j] = X[j] + rx;\n Y[j] = Y[j] + ry;\n };\n let walked = 0;\n const walk = (i, length) => {\n let chain = c.chainOf[i];\n let idx = c.indexOf[i];\n let dir = rand() < 0.5 ? -1 : 1;\n let remaining = length;\n for (let hops = 0; hops < MAX_HOPS; hops++) {\n const points = count[chain];\n const step = per[chain];\n const toEnd = (dir > 0 ? points - 1 - idx : idx) * step;\n if (remaining <= toEnd) {\n const steps = Math.round(remaining / step);\n walked = length - remaining + steps * step;\n return first[chain] + idx + dir * steps;\n }\n remaining -= toEnd;\n const out = c.links[chain][dir > 0 ? 1 : 0];\n if (out.length === 0) {\n walked = length - remaining;\n return first[chain] + (dir > 0 ? points - 1 : 0);\n }\n const [next, enterSide] = out[Math.floor(rand() * out.length)];\n remaining -= link;\n chain = next;\n dir = enterSide === 0 ? 1 : -1;\n idx = enterSide === 0 ? 0 : count[next] - 1;\n if (remaining <= 0) {\n walked = length - remaining;\n return first[chain] + idx;\n }\n }\n return -1;\n };\n const referenceTerm = (i, eta) => {\n const idx = refIdx[comp[i]];\n if (!backbone[i] || idx.length < 2 || Number.isNaN(seedX[i])) {\n return;\n }\n const xs = refX[comp[i]];\n const target = seedX[i] + Math.exp(logMin + rand() * (logMax - logMin)) * (rand() < 0.5 ? -1 : 1);\n let lo = 0;\n let hi = xs.length;\n while (lo < hi) {\n const mid = lo + hi >> 1;\n if (xs[mid] < target) {\n lo = mid + 1;\n } else {\n hi = mid;\n }\n }\n const j = idx[Math.min(lo, idx.length - 1)];\n const d = seedX[j] - seedX[i];\n if (j === i || d === 0) {\n return;\n }\n let mu = eta / (d * d);\n if (mu > 1) {\n mu = 1;\n }\n const r = mu * (X[j] - X[i] - d) / 2;\n X[i] = X[i] + r;\n X[j] = X[j] - r;\n };\n const adjacentTerms = (i, eta) => {\n for (let e = off[i]; e < off[i + 1]; e++) {\n const j = nb[e];\n if (j > i) {\n move(i, j, wt[e], eta);\n }\n }\n };\n const order = new Int32Array(n);\n for (let i = 0; i < n; i++) {\n order[i] = i;\n }\n const warm = anySeed ? Math.floor(WARM * iterations) : 0;\n for (let t = warm; t < iterations; t++) {\n const eta = etaMax * Math.exp(-lambda * t);\n for (let k = n - 1; k > 0; k--) {\n const r = Math.floor(rand() * (k + 1));\n const tmp = order[k];\n order[k] = order[r];\n order[r] = tmp;\n }\n for (let q = 0; q < n; q++) {\n const i = order[q];\n adjacentTerms(i, eta);\n for (let w = 0; w < walks; w++) {\n const length = Math.exp(logMin + rand() * (logMax - logMin));\n const j = walk(i, length);\n if (j >= 0 && j !== i && walked > 0) {\n move(i, j, walked, eta);\n }\n }\n referenceTerm(i, eta);\n }\n }\n const radius = UNTANGLE_LINKS * link;\n const key = (x, y) => Math.floor(x / radius) * 73856093 ^ Math.floor(y / radius) * 19349663;\n for (let u = 0; u < UNTANGLE_PASSES; u++) {\n const grid = /* @__PURE__ */ new Map();\n for (let i = 0; i < n; i++) {\n const k = key(X[i], Y[i]);\n const list = grid.get(k);\n if (list) {\n list.push(i);\n } else {\n grid.set(k, [i]);\n }\n }\n for (let i = 0; i < n; i++) {\n const cx = Math.floor(X[i] / radius);\n const cy = Math.floor(Y[i] / radius);\n for (let gx = cx - 1; gx <= cx + 1; gx++) {\n for (let gy = cy - 1; gy <= cy + 1; gy++) {\n const list = grid.get(gx * 73856093 ^ gy * 19349663);\n if (!list) {\n continue;\n }\n for (const j of list) {\n if (j <= i) {\n continue;\n }\n let joined = false;\n for (let e = off[i]; e < off[i + 1]; e++) {\n if (nb[e] === j) {\n joined = true;\n break;\n }\n }\n if (joined) {\n continue;\n }\n const dx = X[i] - X[j];\n const dy = Y[i] - Y[j];\n const mag = Math.sqrt(dx * dx + dy * dy);\n if (mag >= radius) {\n continue;\n }\n let rx;\n let ry;\n if (mag > 1e-6) {\n const r = UNTANGLE_PUSH * (radius - mag) / (2 * mag);\n rx = r * dx;\n ry = r * dy;\n } else {\n rx = UNTANGLE_PUSH * radius * (rand() - 0.5);\n ry = UNTANGLE_PUSH * radius * (rand() - 0.5);\n }\n X[i] = X[i] + rx;\n Y[i] = Y[i] + ry;\n X[j] = X[j] - rx;\n Y[j] = Y[j] - ry;\n }\n }\n }\n }\n for (let i = 0; i < n; i++) {\n adjacentTerms(i, Infinity);\n referenceTerm(i, etaMin * 4);\n }\n }\n for (let k = 0; k < count.length; k++) {\n const a = first[k];\n const m = count[k];\n if (m < 3) {\n continue;\n }\n for (let s = 0; s < SMOOTH_PASSES; s++) {\n const xs = X.slice(a, a + m);\n const ys = Y.slice(a, a + m);\n for (let i = 1; i + 1 < m; i++) {\n X[a + i] = 0.5 * xs[i] + 0.25 * (xs[i - 1] + xs[i + 1]);\n Y[a + i] = 0.5 * ys[i] + 0.25 * (ys[i - 1] + ys[i + 1]);\n }\n }\n respace(X, Y, a, m, per[k]);\n }\n packComponents(comp, members, X, Y, anySeed, gap);\n for (let k = 0; k < c.ids.length; k++) {\n const points = [];\n for (let i = 0; i < count[k]; i++) {\n points.push({ x: X[first[k] + i], y: Y[first[k] + i] });\n }\n nodePositions[c.ids[k]] = points;\n }\n return { nodePositions };\n}\nfunction respace(X, Y, a, m, per) {\n const arc = new Float64Array(m);\n for (let i = 1; i < m; i++) {\n arc[i] = arc[i - 1] + Math.hypot(X[a + i] - X[a + i - 1], Y[a + i] - Y[a + i - 1]);\n }\n if (!arc[m - 1]) {\n return;\n }\n const loss = per * (m - 1) - arc[m - 1];\n if (loss > 0) {\n extend(X, Y, a, a + 1, loss / 2);\n extend(X, Y, a + m - 1, a + m - 2, loss / 2);\n for (let i = 1; i < m; i++) {\n arc[i] = arc[i - 1] + Math.hypot(X[a + i] - X[a + i - 1], Y[a + i] - Y[a + i - 1]);\n }\n }\n const total = arc[m - 1];\n const xs = X.slice(a, a + m);\n const ys = Y.slice(a, a + m);\n let seg = 1;\n for (let i = 1; i + 1 < m; i++) {\n const s = total * i / (m - 1);\n while (seg < m - 1 && arc[seg] < s) {\n seg++;\n }\n const span = arc[seg] - arc[seg - 1];\n const t = span > 0 ? (s - arc[seg - 1]) / span : 0;\n X[a + i] = xs[seg - 1] + (xs[seg] - xs[seg - 1]) * t;\n Y[a + i] = ys[seg - 1] + (ys[seg] - ys[seg - 1]) * t;\n }\n}\nfunction extend(X, Y, end, next, by) {\n const dx = X[end] - X[next];\n const dy = Y[end] - Y[next];\n const mag = Math.hypot(dx, dy);\n if (mag > 0) {\n X[end] = X[end] + dx / mag * by;\n Y[end] = Y[end] + dy / mag * by;\n }\n}\nfunction packComponents(comp, members, X, Y, anySeed, gap) {\n if (!anySeed) {\n for (const points of members) {\n rotateToPrincipalAxis(X, Y, points);\n }\n }\n if (members.length < 2) {\n return;\n }\n const minX = new Float64Array(members.length).fill(Infinity);\n const minY = new Float64Array(members.length).fill(Infinity);\n const maxY = new Float64Array(members.length).fill(-Infinity);\n for (let i = 0; i < X.length; i++) {\n const k = comp[i];\n minX[k] = Math.min(minX[k], X[i]);\n minY[k] = Math.min(minY[k], Y[i]);\n maxY[k] = Math.max(maxY[k], Y[i]);\n }\n const shift = new Float64Array(members.length);\n let y = 0;\n for (let k = 0; k < members.length; k++) {\n shift[k] = y - minY[k];\n y += maxY[k] - minY[k] + gap;\n }\n for (let i = 0; i < X.length; i++) {\n const k = comp[i];\n X[i] = X[i] - minX[k];\n Y[i] = Y[i] + shift[k];\n }\n}\nfunction rotateToPrincipalAxis(X, Y, points) {\n if (points.length < 3) {\n return;\n }\n let cx = 0;\n let cy = 0;\n for (const i of points) {\n cx += X[i];\n cy += Y[i];\n }\n cx /= points.length;\n cy /= points.length;\n let sxx = 0;\n let syy = 0;\n let sxy = 0;\n for (const i of points) {\n const dx = X[i] - cx;\n const dy = Y[i] - cy;\n sxx += dx * dx;\n syy += dy * dy;\n sxy += dx * dy;\n }\n const angle = -0.5 * Math.atan2(2 * sxy, sxx - syy);\n const cos = Math.cos(angle);\n const sin = Math.sin(angle);\n for (const i of points) {\n const dx = X[i] - cx;\n const dy = Y[i] - cy;\n X[i] = cx + cos * dx - sin * dy;\n Y[i] = cy + sin * dx + cos * dy;\n }\n}\n\nexport {\n chains,\n stressLayout\n};\n", "// src/loadBandage.ts\nvar cached;\nfunction loadBandage() {\n cached ??= import(\"./bandage-layout-3AR6BCUD.js\").then((mod) => mod.default()).catch((e) => {\n cached = void 0;\n throw e;\n });\n return cached;\n}\n\nexport {\n loadBandage\n};\n", "import {\n stressLayout\n} from \"./chunk-UNOE2NDN.js\";\nimport {\n loadBandage\n} from \"./chunk-7XHHVYG7.js\";\n\n// src/layoutEngines.ts\nvar LAYOUT_ENGINES = [\n {\n value: \"fmmm\",\n label: \"Bandage (FMMM)\",\n description: \"Bandage's force-directed layout: OGDF's fast multipole multilevel method, compiled to wasm.\"\n },\n {\n value: \"stress\",\n label: \"Stress (experimental)\",\n description: \"Stress layout by stochastic gradient descent in plain JS: distances along the graph become distances on the page, so the reference reads straight and a repeat loop reads as a ring.\"\n }\n];\nvar LAYOUT_ENGINE_VALUES = LAYOUT_ENGINES.map((e) => e.value);\nfunction isLayoutEngineKind(value) {\n return LAYOUT_ENGINE_VALUES.includes(value);\n}\nvar layoutEngine = async (request) => {\n if (request.options.engine === \"stress\") {\n const start2 = performance.now();\n const result2 = stressLayout(request);\n return { result: result2, duration: performance.now() - start2 };\n }\n const bandage = await loadBandage();\n const start = performance.now();\n const result = bandage.computeLayout(request.graph, request.options);\n return { result, duration: performance.now() - start };\n};\n\nexport {\n LAYOUT_ENGINES,\n LAYOUT_ENGINE_VALUES,\n isLayoutEngineKind,\n layoutEngine\n};\n", "// src/colorSchemes.ts\nvar COLOR_SCHEMES = [\n // Mirrors `layoutModes`' 'auto': a value the model resolves rather than a\n // colour of its own. It exists because 'uniform' was the default, so a\n // launched graph opened flat grey and both tutorials spent a step saying \"now\n // pick a colour\" \u2014 one figure literally drives that click. A graph with\n // reference coordinates resolves to 'reference-position', which is the one\n // ramp a linear track beside it can be painted with too; a graph with none\n // keeps 'uniform', because there the ramp would be a hue nothing earned.\n //\n // Resolve through `effectiveColorScheme`; the dropdown reads the raw prop, so\n // \"Auto\" stays selectable and visible as what it is.\n { value: \"auto\", label: \"Auto\" },\n { value: \"uniform\", label: \"Uniform\" },\n { value: \"random\", label: \"Random\" },\n { value: \"rainbow\", label: \"Rainbow\" },\n { value: \"depth\", label: \"Depth\" },\n { value: \"node-length\", label: \"Node length\" },\n { value: \"stable-rank\", label: \"Stable rank\" },\n { value: \"reference-position\", label: \"Reference position\" },\n { value: \"grey\", label: \"Grey\" }\n];\nvar COLOR_SCHEME_VALUES = COLOR_SCHEMES.map((s) => s.value);\nfunction resolveColorScheme(scheme, graph) {\n return scheme !== \"auto\" ? scheme : graph?.anchoredBy ? \"reference-position\" : \"uniform\";\n}\n\nexport {\n COLOR_SCHEMES,\n COLOR_SCHEME_VALUES,\n resolveColorScheme\n};\n", "// src/layout/drawnScale.ts\nvar MEAN_NODE_LENGTH = 40;\nvar MIN_TOTAL_GRAPH_LENGTH = 500;\nvar BANDAGE_MINIMUM_NODE_LENGTH = 5;\nfunction drawnNodeLength(opts, length) {\n return Math.max(\n opts.nodeLengthPerMegabase * length / 1e6,\n opts.minimumNodeLength\n );\n}\nfunction bandageAutoScale(graph, minNodeLength = BANDAGE_MINIMUM_NODE_LENGTH) {\n const totalLength = graph.nodes.reduce((sum, n) => sum + n.length, 0);\n const megabases = totalLength / 1e6;\n const target = Math.max(\n graph.nodes.length * MEAN_NODE_LENGTH,\n MIN_TOTAL_GRAPH_LENGTH\n );\n return {\n nodeLengthPerMegabase: megabases > 0 ? target / megabases : 1e4,\n minimumNodeLength: Math.max(BANDAGE_MINIMUM_NODE_LENGTH, minNodeLength),\n edgeLength: 5,\n nodeSegmentLength: 20\n };\n}\nvar PROPORTIONAL_LENGTH = { power: 1, effect: 1 };\nfunction isProportional(law) {\n return law.power === 1 && law.effect === 1;\n}\nfunction drawnLengthFor(graph, law) {\n const count = graph.nodes.length;\n const totalLength = graph.nodes.reduce((sum, n) => sum + n.length, 0);\n const meanBp = count > 0 ? totalLength / count : 0;\n const meanDrawn = count > 0 ? Math.max(count * MEAN_NODE_LENGTH, MIN_TOTAL_GRAPH_LENGTH) / count : MEAN_NODE_LENGTH;\n return (bp) => {\n if (meanBp <= 0) {\n return meanDrawn;\n }\n const relative = (bp / meanBp) ** law.power;\n return Math.max(\n meanDrawn * ((relative - 1) * law.effect + 1),\n BANDAGE_MINIMUM_NODE_LENGTH\n );\n };\n}\nvar LAYOUT_LENGTH_PRECISION = 1e3;\nvar PROPORTIONAL_SPREAD = {\n law: PROPORTIONAL_LENGTH,\n minNodeLength: 0\n};\nfunction layoutScaling(graph, spread = PROPORTIONAL_SPREAD) {\n const { law, minNodeLength } = spread;\n const opts = bandageAutoScale(graph, minNodeLength);\n if (isProportional(law)) {\n return { nodes: graph.nodes, opts };\n }\n const drawn = drawnLengthFor(graph, law);\n return {\n nodes: graph.nodes.map((node) => ({\n ...node,\n length: Math.round(drawn(node.length) * LAYOUT_LENGTH_PRECISION)\n })),\n opts: {\n ...opts,\n nodeLengthPerMegabase: 1e6 / LAYOUT_LENGTH_PRECISION,\n // Bandage's own floor only. A law and a raised floor are alternatives\n // rather than a stack: the law has already lifted the small end, and a\n // floor on top of it would flatten exactly what it just spread.\n minimumNodeLength: BANDAGE_MINIMUM_NODE_LENGTH\n }\n };\n}\nfunction drawnLengthOf(graph, spread = PROPORTIONAL_SPREAD) {\n if (isProportional(spread.law)) {\n const opts = bandageAutoScale(graph, spread.minNodeLength);\n return (bp) => drawnNodeLength(opts, bp);\n }\n return drawnLengthFor(graph, spread.law);\n}\n\nexport {\n MEAN_NODE_LENGTH,\n drawnNodeLength,\n bandageAutoScale,\n PROPORTIONAL_LENGTH,\n isProportional,\n drawnLengthFor,\n PROPORTIONAL_SPREAD,\n layoutScaling,\n drawnLengthOf\n};\n", "import {\n MEAN_NODE_LENGTH,\n PROPORTIONAL_LENGTH\n} from \"./chunk-6JEWNXCQ.js\";\n\n// src/bubbleSpreads.ts\nvar BUBBLE_SPREADS = [\n {\n value: \"auto\",\n label: \"Proportional\",\n description: \"Bandage's own scale: a node draws proportional to its length, so a 1 bp allele is a speck.\",\n law: PROPORTIONAL_LENGTH,\n minNodeFactor: 0\n },\n {\n value: \"open\",\n label: \"Open bubbles\",\n description: \"Give every allele a drawn length, so a bubble reads as two arms rather than a knot.\",\n law: PROPORTIONAL_LENGTH,\n minNodeFactor: 2.5\n },\n {\n value: \"wide\",\n label: \"Wide bubbles\",\n description: \"As open, spread further. Best on a window of a dozen bubbles.\",\n law: PROPORTIONAL_LENGTH,\n minNodeFactor: 10\n },\n {\n value: \"compress\",\n label: \"Compress lengths\",\n description: \"Pull the longest and shortest nodes towards the graph\\u2019s mean, so a cut spanning kb and bp fits one pane.\",\n law: { power: 0.5, effect: 0.5 },\n minNodeFactor: 0\n }\n];\nvar BUBBLE_SPREAD_VALUES = BUBBLE_SPREADS.map((s) => s.value);\nfunction spreadFor(spread) {\n const entry = BUBBLE_SPREADS.find((s) => s.value === spread);\n return {\n law: entry?.law ?? PROPORTIONAL_LENGTH,\n minNodeLength: (entry?.minNodeFactor ?? 0) * MEAN_NODE_LENGTH\n };\n}\n\nexport {\n BUBBLE_SPREADS,\n BUBBLE_SPREAD_VALUES,\n spreadFor\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["require_mui", "__commonJSMin", "exports", "module", "ROUTE_ID", "ROUTE_FRACTION", "withDeletionRoutes", "graph", "deletions", "dropped", "routes", "d", "edges", "edge", "ei", "id", "fromStrand", "toStrand", "routeNodes", "drawnOf", "opts", "lengths", "n", "skipped", "sum", "id2", "drawn", "takeRoutes", "positions", "nodePositions", "deletionRoutes", "edgeIndex", "route", "MIN_DEPTH", "LANE_GAP", "CLEAR", "TIP_ANGLE", "ROUTE_BOW", "ROUTE_CAP", "TEARDROP_TILTS", "SIDES", "other", "side", "unit", "a", "b", "dx", "dy", "m", "lerp", "f", "centroidOf", "pts", "x", "y", "p", "arcLengths", "arc", "i", "polylineLength", "arcAngle", "ratio", "lo", "hi", "mid", "archLength", "c", "s", "R", "theta", "arcFlat", "length", "h", "drop", "cos", "cu", "cv", "t", "tilted", "flat", "angle", "sin", "u", "v", "du", "lineFlat", "u0", "v0", "dv", "Curve", "normals", "straight", "span", "last", "d", "r", "outwardNormals", "outRef", "centroid", "n", "rx", "ry", "rm", "dot", "ref", "sign", "mapFlat", "frame", "tA", "ds", "refs", "q", "nr", "ox", "oy", "fitted", "make", "flatLength", "mapped", "got", "depths", "from", "_", "spanOf", "anchors", "cellKey", "gx", "gy", "Placer", "ids", "first", "count", "per", "seedX", "seedY", "backbone", "N", "sides", "k", "out", "id", "ROUTE_ID", "min", "max", "start", "ts", "free", "pieces", "members", "X", "Y", "curve", "key", "list", "occupant", "exempt", "anchorPts", "limit", "cx", "cy", "candidates", "best", "bestV", "candidate", "set", "uSide", "vSide", "seen", "comps", "queue", "fromSide", "to", "toExitSide", "reached", "prev", "far", "path", "cur", "spine", "link", "t0", "spacing", "all", "enter", "step", "L", "hMax", "tilts", "tilt", "parent", "route", "shared", "tB", "a2", "b2", "chord", "A", "B", "single", "pick", "next", "d0", "total", "bar", "placed", "rest", "subs", "sub", "stressPlacement", "placer", "QUALITY", "UNTANGLE_PASSES", "UNTANGLE_LINKS", "UNTANGLE_PUSH", "SMOOTH_PASSES", "MAX_HOPS", "EPS", "WARM", "flipped", "strand", "name", "own", "xorshift", "seed", "s", "num", "value", "fallback", "chains", "request", "nodes", "edges", "perMegabase", "minimum", "segment", "link", "ids", "n2", "first", "count", "per", "n", "node", "k", "drawn", "steps", "chainOf", "indexOf", "seedX", "seedY", "backbone", "adjacent", "seeded", "reference", "isBackbone", "i", "v", "index", "id", "links", "edge", "a", "b", "fromSide", "toSide", "u", "off", "nb", "wt", "w", "components", "c", "comp", "members", "queue", "e", "stressLayout", "opts", "o", "quality", "gap", "rand", "X", "Y", "nodePositions", "dmin", "total", "anySeed", "placed", "stressPlacement", "side", "refIdx", "points", "refX", "idx", "span", "xs", "dmax", "etaMax", "etaMin", "walks", "iterations", "lambda", "logMin", "logMax", "move", "j", "d", "eta", "mu", "dx", "dy", "mag", "r", "rx", "ry", "walked", "walk", "length", "chain", "dir", "remaining", "hops", "step", "toEnd", "out", "next", "enterSide", "referenceTerm", "target", "lo", "hi", "mid", "adjacentTerms", "order", "warm", "t", "tmp", "q", "radius", "key", "x", "y", "grid", "list", "cx", "cy", "gx", "gy", "joined", "m", "ys", "respace", "packComponents", "arc", "loss", "extend", "seg", "end", "by", "rotateToPrincipalAxis", "minX", "minY", "maxY", "shift", "sxx", "syy", "sxy", "angle", "cos", "sin", "cached", "loadBandage", "mod", "e", "LAYOUT_ENGINES", "LAYOUT_ENGINE_VALUES", "e", "layoutEngine", "request", "start2", "stressLayout", "bandage", "loadBandage", "start", "COLOR_SCHEMES", "COLOR_SCHEME_VALUES", "s", "resolveColorScheme", "scheme", "graph", "MEAN_NODE_LENGTH", "MIN_TOTAL_GRAPH_LENGTH", "BANDAGE_MINIMUM_NODE_LENGTH", "drawnNodeLength", "opts", "length", "bandageAutoScale", "graph", "minNodeLength", "megabases", "sum", "n", "target", "PROPORTIONAL_LENGTH", "isProportional", "law", "drawnLengthFor", "count", "totalLength", "meanBp", "meanDrawn", "bp", "relative", "LAYOUT_LENGTH_PRECISION", "PROPORTIONAL_SPREAD", "layoutScaling", "spread", "drawn", "node", "drawnLengthOf", "BUBBLE_SPREADS", "PROPORTIONAL_LENGTH", "BUBBLE_SPREAD_VALUES", "s", "spreadFor", "spread", "entry", "MEAN_NODE_LENGTH"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{a as Ke}from"./chunk-JC7I7V6M.js";import{a as K,b as R,c as Ye,d as $e,e as ne,f as Ze,g as Ue,i as qe,j as Je,l as Qe,m as et,n as tt,o as nt,p as ot}from"./chunk-7KFSWOWX.js";import{A as fe,C as Ve,D as je,a as w,h as Le,q as Be,r as Fe,s as De,t as _e,u as Xe,z as te}from"./chunk-GXQ7NYB3.js";import{g as Pe,p as Y}from"./chunk-OTI5X5W7.js";import{$ as ue,F as We,K as ze,Q as Ne,S as Q,T as Ae,X as Oe,Z as de,a as mn,ba as ee,h as Ie,i as Ge,z as J}from"./chunk-GB7CF6Z2.js";import{g as Ee,i as He,t as Te}from"./chunk-WTOQRUK2.js";import{z as Ce}from"./chunk-B7GF3TC3.js";import{a as ce}from"./chunk-FCWXYIFC.js";import{a as j}from"./chunk-J6KYLXRD.js";import{a as pe,b as _}from"./chunk-NXZT63HN.js";import{a as f,b as S}from"./chunk-64LZZURD.js";import{a as fn,b as a}from"./chunk-FY3BTKY4.js";var st=fn((ko,at)=>{at.exports=JBrowseExports["@jbrowse/render-core/useRenderingBackend"]});var ie=a(j(),1);function rt(t){return`${t.refName}:${(t.start+1).toLocaleString()}-${t.end.toLocaleString()}`}function me(t,e,n=r=>r){return e?{deletion:{bp:`${e.bp.toLocaleString()} bp`,where:rt(e)}}:{ends:`${n(t.from)}${t.fromStrand??""} \u2192 ${n(t.to)}${t.toStrand??""}`}}var X=a(pe(),1),Me=a(ce(),1),an=a(st(),1);var it=a(f(),1),lt=(0,w.createSvgIcon)((0,it.jsx)("path",{d:"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2m1 15h-2v-6h2zm0-8h-2V7h2z"}),"Info");var C=a(S(),1);var re=a(j(),1);var ae=a(mn(),1),ge=a(S(),1);var H=a(f(),1),A={width:18,height:8,borderRadius:2,flex:"none"},hn={marginBottom:2},gn={...A,width:48};function U({walk:t,label:e,reference:n,hint:r,at:i}){let s=Oe(t,n);return(0,H.jsxs)("div",{style:hn,title:[s.hover,r].filter(Boolean).join(" \xB7 ")||void 0,children:[(0,H.jsxs)("div",{style:R,children:[(0,H.jsx)("div",{style:{...s.shades?gn:A,background:Te(t.encoding)}}),(0,H.jsxs)("span",{children:[(0,H.jsx)("strong",{children:e}),s.delta,s.outside,s.reversed]})]}),i?(0,H.jsx)("div",{"data-testid":"graph-walk-at",children:i}):s.scale?(0,H.jsx)("div",{children:s.scale}):null]})}var I=a(j(),1);var vn=1.1,yn=100,bn=40,wn=800,kn=10,ct=2;function he(t){let e=t.deltaY*(t.deltaMode===1?bn:t.deltaMode===2?wn:1),n=(t.ctrlKey?kn:1)*e/yn;return vn**-Math.max(-ct,Math.min(ct,n))}var pt=a(ce(),1);function oe(t,e){(0,I.useEffect)(()=>{if(!t)return;let n=t;function r(i){if(e.hostPlacesX)return;e.host&&i.stopPropagation(),i.preventDefault();let s=n.getBoundingClientRect();e.zoom(he(i),i.clientX-s.left,i.clientY-s.top)}return n.addEventListener("wheel",r,{passive:!1}),()=>{n.removeEventListener("wheel",r)}},[t,e])}function dt(t){let e=(0,I.useRef)({x:0,y:0}),n=(0,I.useRef)(!1),r=(0,I.useRef)({frame:0,pan:null,hover:null});(0,I.useEffect)(()=>()=>{cancelAnimationFrame(r.current.frame)},[]);let[i,s]=(0,I.useState)(void 0),[p,l]=(0,I.useState)(void 0);function d(c,g){return{x:(c-t.translateX)/t.scaleX,y:(g-t.translateY)/t.scaleY}}function h(c){let g=c.currentTarget.getBoundingClientRect();return d(c.clientX-g.left,c.clientY-g.top)}function u(c,g){let{nodePositions:b}=t,v=c*t.scaleX+t.translateX,M=g*t.scaleY+t.translateY;if(t.layoutResult?.tubeMap)return t.tubeMapNodeAt(v,M);let Re=t.referenceStripNodeAt(v,M);return Re||(b?de(b,c,g,t.axisScale,t.positionsVersion,t.nodeInk):null)}function m(c){if(c.button===0){if(c.preventDefault(),n.current=!1,t.hostPlacesX)return;t.host&&c.stopPropagation();let{x:g,y:b}=h(c),v=t.layoutResult?.tubeMap||c.nativeEvent.offsetY<t.referenceStripZonePx?null:u(g,b);v?t.setDraggingNode(v):t.setPanning(!0),e.current={x:c.clientX,y:c.clientY}}}function L(){let c=r.current;c.frame=0,c.pan&&(t.setTransform(t.scale,t.translateX+c.pan.dx,t.translateY+c.pan.dy),c.pan=null);let g=t.walkRowBars;if(c.hover&&g){let b=t.walkRowAt(c.hover.x,c.hover.y);t.setHoveredWalkRow(b===void 0?null:[g.reference,...g.rows][b].name)}if(c.hover&&t.nodePositions&&t.graph){let{x:b,y:v}=d(c.hover.x,c.hover.y);c.hover=null;let M=u(b,v);t.setHoveredNode(M),t.setHoveredEdge(M||t.layoutResult?.tubeMap?null:ue(t.nodePositions,t.graph,b,v,t.axisScale,t.effectiveDrawPaths&&!t.facetPanels,t.positionsVersion,t.deletionEdgeIndexes,t.hiddenEdgeIndexes,t.deletionRoutes,t.layoutResult?.stranded))}}function P(){r.current.frame||(r.current.frame=requestAnimationFrame(L))}function le(){let c=r.current;cancelAnimationFrame(c.frame),c.frame=0,c.pan=null,c.hover=null}function V(c){let g=c.clientX-e.current.x,b=c.clientY-e.current.y;e.current={x:c.clientX,y:c.clientY},(Math.abs(g)>1||Math.abs(b)>1)&&(n.current=!0);let v=r.current;if(t.draggingNode)t.moveNode(t.draggingNode,g/t.scaleX,b/t.scaleY);else if(t.isPanning)v.pan={dx:(v.pan?.dx??0)+g,dy:(v.pan?.dy??0)+b},P();else{let M=c.currentTarget.getBoundingClientRect();v.hover={x:c.clientX-M.left,y:c.clientY-M.top},P()}}function cn(){t.stopDragging()}function pn(){le(),(0,pt.isAlive)(t)&&(t.stopDragging(),t.setHoveredNode(null),t.setHoveredEdge(null),t.setHoveredWalkRow(null))}function dn(c){let{x:g,y:b}=h(c),v=u(g,b);if(v){c.preventDefault(),s({nodeId:v,top:c.clientY,left:c.clientX});return}let M=t.walkRowAt(g*t.scaleX+t.translateX,b*t.scaleY+t.translateY);M!==void 0&&(c.preventDefault(),l({row:M,top:c.clientY,left:c.clientX}))}function un(c){if(!n.current){let{x:g,y:b}=h(c),v=u(g,b);t.setSelectedNode(v),v&&t.showNodeDetails(v)}}return{handlers:{onMouseDown:m,onMouseMove:V,onMouseUp:cn,onMouseLeave:pn,onClick:un,onContextMenu:dn},contextNode:i,contextRow:p,closeContextMenu:()=>{s(void 0),l(void 0)}}}var W=a(f(),1),Sn={position:"absolute",left:0,top:0,zIndex:4,display:"grid",gap:Ie,lineHeight:"normal"},xn={height:Ge,padding:"2px 6px",boxSizing:"border-box",fontFamily:"inherit",fontSize:11,color:"inherit",cursor:"pointer",border:"none",background:"none",textAlign:"left",display:"block"},Mn=(0,ge.observer)(function({model:e,lift:n,width:r,height:i,cell:s,handlers:p}){let[l,d]=(0,re.useState)(null),h=n.walks[0];oe(l,e),(0,re.useEffect)(()=>{if(!l)return;let m=new Q(l);m.resize(r,i);let L=(0,ae.computed)(()=>e.buildDrawing(n,!1)),P,le=(0,ae.autorun)(()=>{let V=L.get();V&&(V!==P&&(m.uploadGeometry(V.batch),P=V),e.applyHighlights(m),e.paint(m))});return()=>{le(),m.dispose()}},[l,e,n,r,i]);let u=e.walkLabel(h.name);return(0,W.jsxs)("div",{style:s,children:[(0,W.jsx)("button",{type:"button",style:xn,"data-testid":"graph-facet-title",onClick:()=>{e.liftWalks([h.name]),e.setFacet("")},children:(0,W.jsx)(U,{walk:h,label:u,reference:e.walkReference,hint:`click to lift ${u} alone`,at:e.hoveredOn(h)})}),(0,W.jsx)("canvas",{ref:d,"data-testid":"graph-facet-canvas",style:{width:r,height:i,display:"block",cursor:e.isPanning||e.draggingNode?"grabbing":"grab",touchAction:"none",overscrollBehavior:"contain"},...p})]})}),Rn=(0,ge.observer)(function({model:e,handlers:n}){let r=e.facetPanels,i=e.facetGrid,s=e.facetPlacement;if(!r||!i||!s)return null;let{columns:p,width:l,height:d}=i;return(0,W.jsx)("div",{"data-testid":"graph-facet-panels",style:{...Sn,width:e.paneWidth,minHeight:e.canvasHeight,gridTemplateColumns:`repeat(${p}, ${l}px)`,background:e.darkMode?"#1f1f1f":"white"},children:r.map((h,u)=>(0,W.jsx)(Mn,{model:e,lift:h,width:l,height:d,cell:{gridRow:Math.floor(s.cells[u]/p)+1,gridColumn:s.cells[u]%p+1},handlers:n},h.walks[0].name))})}),ut=Rn;var ft=a(f(),1),mt=(0,w.createSvgIcon)((0,ft.jsx)("path",{d:"M3 5v4h2V5h4V3H5c-1.1 0-2 .9-2 2m2 10H3v4c0 1.1.9 2 2 2h4v-2H5zm14 4h-4v2h4c1.1 0 2-.9 2-2v-4h-2zm0-16h-4v2h4v4h2V5c0-1.1-.9-2-2-2"}),"CropFree");var ve=a(f(),1),ht=(0,w.createSvgIcon)([(0,ve.jsx)("path",{d:"M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14"},"0"),(0,ve.jsx)("path",{d:"M12 10h-2v2H9v-2H7V9h2V7h1v2h2z"},"1")],"ZoomIn");var gt=a(f(),1),vt=(0,w.createSvgIcon)((0,gt.jsx)("path",{d:"M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14M7 9h5v1H7z"}),"ZoomOut");var E=a(_(),1),ke=a(S(),1),At=a(Y(),1);var z=a(_(),1),yt=a(S(),1),bt=a(Y(),1),$=a(f(),1),Cn=(0,bt.makeStyles)()({formControl:{minWidth:100}}),Ln=(0,yt.observer)(function({model:e}){let{classes:n}=Cn(),r=e.colorSchemeLock;return(0,$.jsxs)(z.FormControl,{size:"small",className:n.formControl,disabled:r!==void 0,title:r?.why,children:[(0,$.jsx)(z.InputLabel,{children:"Color"}),(0,$.jsx)(z.Select,{value:e.chosenColorScheme,label:"Color",renderValue:r?()=>r.value:void 0,onChange:i=>{e.setColorScheme(i.target.value)},children:Pe.map(({value:i,label:s})=>(0,$.jsx)(z.MenuItem,{value:i,children:s},i))})]})}),wt=Ln;var be=a(_(),1),we=a(S(),1),kt=a(Y(),1),Z=a(f(),1),St=(0,kt.makeStyles)()({stats:{marginLeft:"auto"},perf:{color:"#888",fontVariantNumeric:"tabular-nums"}});function ye(t){return t===void 0?"\u2013":`${Math.round(t)}ms`}var Pn=(0,we.observer)(function({model:e}){let{classes:n}=St(),{lastFetchMs:r,lastLayoutMs:i,lastGeometryMs:s}=e,p=r!==void 0||i!==void 0||s!==void 0;return e.showPerf&&p?(0,Z.jsxs)(be.Typography,{variant:"caption",className:n.perf,"data-testid":"graph-perf-stats",children:["fetch ",ye(r)," \xB7 layout ",ye(i)," \xB7 geom"," ",ye(s)]}):null}),In=(0,we.observer)(function({model:e}){let{classes:n}=St();return(0,Z.jsxs)("div",{className:n.stats,"data-testid":"graph-stats","data-node-count":e.nodeCount,"data-edge-count":e.edgeCount,"data-path-count":e.pathCount,"data-fetch-ms":e.lastFetchMs??"","data-layout-ms":e.lastLayoutMs??"","data-geometry-ms":e.lastGeometryMs??"","data-geometry-strokes":e.lastGeometryStrokeCount??"",children:[(0,Z.jsxs)(be.Typography,{variant:"body2",component:"span",children:[e.nodeCount," nodes, ",e.edgeCount," edges",e.pathCount>0?`, ${e.pathCount} paths`:""]})," ",(0,Z.jsx)(Pn,{model:e})]})}),xt=In;var G=a(_(),1),Mt=a(S(),1),Rt=a(Y(),1),N=a(f(),1),Gn=(0,Rt.makeStyles)()({formControl:{minWidth:150}}),En=(0,Mt.observer)(function({model:e}){let{classes:n}=Gn(),{graph:r}=e;return(0,N.jsxs)(G.FormControl,{size:"small",className:n.formControl,children:[(0,N.jsx)(G.InputLabel,{children:"Layout"}),(0,N.jsx)(G.Select,{value:e.chosenLayoutMode,label:"Layout","data-testid":"graph-layout-select",onChange:i=>{e.switchLayout(i.target.value)},children:Le.map(({value:i,label:s,description:p,available:l})=>(0,N.jsx)(G.MenuItem,{value:i,disabled:r?!l(r):!1,children:(0,N.jsx)(G.Tooltip,{title:p,placement:"right",children:(0,N.jsx)("span",{children:s})})},i))})]})}),Ct=En;var T=a(_(),1),Lt=a(S(),1),Pt=a(Y(),1),B=a(f(),1),Hn=(0,Pt.makeStyles)()({formControl:{minWidth:130,maxWidth:240}}),Tn=(0,Lt.observer)(function({model:e}){let{classes:n}=Hn(),{repeatChoices:r}=e;if(e.chosenLayoutMode!=="walkrows"||r.length===0)return null;let i=new Set(r.map(s=>s.key));return(0,B.jsxs)(T.FormControl,{size:"small",className:n.formControl,children:[(0,B.jsx)(T.InputLabel,{children:"Repeat"}),(0,B.jsxs)(T.Select,{value:i.has(e.repeatKey)?e.repeatKey:"",label:"Repeat","data-testid":"graph-repeat-select",onChange:s=>{e.setRepeatKey(s.target.value)},children:[(0,B.jsx)(T.MenuItem,{value:"",children:(0,B.jsx)("em",{children:"Whole window"})}),r.map(({key:s,name:p,unit:l})=>(0,B.jsxs)(T.MenuItem,{value:s,children:[p," \xB7 ",l.toLocaleString()," bp unit"]},s))]})]})}),It=Tn;var Wt=a(j(),1),zt=a(pe(),1);var Gt=a(f(),1),Et=(0,w.createSvgIcon)((0,Gt.jsx)("path",{d:"M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6zM19 4h-3.5l-1-1h-5l-1 1H5v2h14z"}),"Delete");var Ht=a(f(),1),Tt=(0,w.createSvgIcon)((0,Ht.jsx)("path",{d:"M12 8c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2m0 2c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2m0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2"}),"MoreVert");var Nt=a(S(),1);var F=a(f(),1),Wn=(0,Nt.observer)(function({model:e}){let[n,r]=(0,Wt.useState)(!1);return(0,F.jsxs)(F.Fragment,{children:[(0,F.jsx)(zt.CascadingMenuButton,{size:"small",menuItems:[{type:"checkbox",label:"Linear layout",checked:e.linearLayout,onClick:()=>{e.setLinearLayout(!e.linearLayout),e.recomputeLayout()}},{type:"checkbox",label:"Show deletion edges",checked:e.showDeletionEdges,onClick:()=>{e.toggleDeletionEdges()}},{type:"checkbox",label:"Show timings",checked:e.showPerf,onClick:()=>{e.setShowPerf(!e.showPerf)}},{type:"divider"},{label:"Settings",icon:je,onClick:()=>{r(!0)}},{type:"divider"},{label:"Return to import form",icon:Et,onClick:()=>{e.clearGraph()}}],children:(0,F.jsx)(Tt,{})}),(0,F.jsx)(Ke,{model:e,open:n,onClose:()=>{r(!1)}})]})}),Bt=Wn;var x=a(_(),1),Ft=a(S(),1),Dt=a(Y(),1),D=a(f(),1),zn=(0,Dt.makeStyles)()({formControl:{minWidth:130,maxWidth:260}}),Nn=(0,Ft.observer)(function({model:e}){let{classes:n}=zn(),{walkChoices:r}=e;if(r.length===0||!e.liftsWalks)return null;let i=new Set(r.map(l=>l.name)),s=new Map(r.map(l=>[l.name,l.label])),p=e.walkLayers.map(l=>l.walk).filter(l=>i.has(l));return(0,D.jsxs)(x.FormControl,{size:"small",className:n.formControl,children:[(0,D.jsx)(x.InputLabel,{children:"Walks"}),(0,D.jsx)(x.Select,{multiple:!0,value:p,label:"Walks","data-testid":"graph-walk-select",renderValue:l=>l.map(d=>s.get(d)).join(", "),onChange:l=>{let{value:d}=l.target;e.liftWalks(typeof d=="string"?d.split(","):d)},children:r.map(({name:l,label:d})=>(0,D.jsxs)(x.MenuItem,{value:l,dense:!0,children:[(0,D.jsx)(x.Checkbox,{size:"small",checked:p.includes(l)}),(0,D.jsx)(x.ListItemText,{primary:d})]},l))})]})}),_t=Nn;var y=a(f(),1),Bn=(0,At.makeStyles)()({toolbar:{display:"flex",alignItems:"center",gap:4,padding:"2px 4px",borderBottom:"1px solid #ddd"}}),Fn=(0,ke.observer)(function({model:e}){return(0,y.jsx)(E.Typography,{variant:"body2",children:e.zoomPercent})}),Dn=(0,ke.observer)(function({model:e}){let{classes:n}=Bn();return(0,y.jsxs)("div",{className:n.toolbar,children:[(0,y.jsx)(Ct,{model:e}),(0,y.jsx)(wt,{model:e}),(0,y.jsx)(_t,{model:e}),(0,y.jsx)(It,{model:e}),(0,y.jsx)(E.Tooltip,{title:"Zoom in",children:(0,y.jsx)(E.IconButton,{size:"small",onClick:()=>{e.zoom(1.5,e.viewBox.width/2,e.viewBox.height/2)},children:(0,y.jsx)(ht,{})})}),(0,y.jsx)(E.Tooltip,{title:"Zoom out",children:(0,y.jsx)(E.IconButton,{size:"small",onClick:()=>{e.zoom(1/1.5,e.viewBox.width/2,e.viewBox.height/2)},children:(0,y.jsx)(vt,{})})}),(0,y.jsx)(E.Tooltip,{title:"Zoom to fit",children:(0,y.jsx)(E.IconButton,{size:"small",onClick:()=>{e.zoomToFit()},children:(0,y.jsx)(mt,{})})}),(0,y.jsx)(Fn,{model:e}),(0,y.jsx)(xt,{model:e}),(0,y.jsx)(Bt,{model:e})]})}),Ot=Dn;var Xt=a(_(),1),Vt=a(S(),1),$t=a(f(),1),_n={position:"absolute",left:8,zIndex:5,background:"rgba(255,255,255,0.9)",textTransform:"none"},An=(0,Vt.observer)(function({model:e}){let{poppedFrom:n}=e;return n?(0,$t.jsxs)(Xt.Button,{size:"small",variant:"outlined",style:{..._n,...e.facetPanels?{bottom:8}:{top:8}},"data-testid":"graph-unpop-bubble",onClick:()=>{e.unpopBubble()},children:["\u25C0 Back to ",n.label]}):null}),Yt=An;var qt=a(pe(),1);var Zt=a(f(),1),jt=(0,w.createSvgIcon)((0,Zt.jsx)("path",{d:"M10 18h4v-2h-4zM3 6v2h18V6zm3 7h12v-2H6z"}),"FilterList");var Kt=a(f(),1),Ut=(0,w.createSvgIcon)((0,Kt.jsx)("path",{d:"M10.83 8H21V6H8.83zm5 5H18v-2h-4.17zM14 16.83V18h-4v-2h3.17l-3-3H6v-2h2.17l-3-3H3V6h.17L1.39 4.22 2.8 2.81l18.38 18.38-1.41 1.41z"}),"FilterListOff");var Jt=a(S(),1);var Qt=a(f(),1),se=(0,Jt.observer)(function({model:e,row:n,bars:r,top:i,left:s,onClose:p}){let l=r??e.walkRowBars,d=e.walkRowLaunchTarget(n,l),h=d?.assembly,u=n>0?l?.rows[n-1]?.sample:void 0,m=!r&&e.walkRowBars,L=e.walkRowSamples;return(0,Qt.jsx)(qt.Menu,{open:!0,anchorReference:"anchorPosition",anchorPosition:{top:i,left:s},onClose:()=>{p()},onMenuItemClick:P=>{P()},menuItems:[d&&h?{label:`Linear genome view \u2014 ${h} ${te(d.location)}`,icon:fe,onClick:()=>{e.showInLinearView({location:d.location,assembly:h})}}:{label:"Linear genome view",icon:fe,disabled:!0,disabledHelpText:d?`No assembly in this session is ${d.location.haplotype??d.label}`:"This walk states no contig coordinates",onClick:()=>{}},...m&&u&&!(L?.length===1&&L[0]===u)?[{label:`Show only ${u}`,icon:jt,onClick:()=>{e.setWalkRowSamples([u])}}]:[],...m&&L?[{label:"Show every sample",icon:Ut,onClick:()=>{e.setWalkRowSamples(void 0)}}]:[]]})});var O=a(j(),1);var en=a(ce(),1),Se=a(S(),1);var k=a(f(),1),On={display:"flex",flexWrap:"wrap",gap:"2px 14px",padding:"2px 8px 6px",fontSize:11,color:"#333"},Xn={position:"absolute",pointerEvents:"none",background:"rgba(255,255,255,0.92)",border:"1px solid #ccc",borderRadius:3,padding:"1px 6px",fontSize:11,whiteSpace:"nowrap",zIndex:4},Vn=(0,Se.observer)(function({bars:e,frame:n,ramp:r,rowGenes:i}){let s=(0,O.useId)().replace(/[^\w-]/g,""),p=(0,O.useMemo)(()=>Ne(e,n,{ramp:r,rowGenes:i,idPrefix:s}),[e,n,r,i,s]);return(0,k.jsx)(ne,{el:p})}),Yn=(0,Se.observer)(function({model:e}){let n=e.walkStripRows,r=e.walkStripFrame,[i,s]=(0,O.useState)(void 0),[p,l]=(0,O.useState)(void 0);if(!n||!r)return null;let d=u=>{let m=u.currentTarget.getBoundingClientRect(),L=u.clientX-m.left,P=u.clientY-m.top;return{...Be(n,r,L,P),x:L,y:P}},h=ze(n,{ramp:e.referenceRampDomain,rampCss:J,genes:_e(r,e.walkRowGenes,e.walkRowGeneGaps)});return(0,k.jsxs)("div",{"data-testid":"graph-walk-strip",style:{position:"relative",borderTop:"1px solid #ddd"},onMouseEnter:()=>{e.setPointerInPane(!0)},onMouseLeave:()=>{(0,en.isAlive)(e)&&(e.setPointerInPane(!1),e.setStripHover(null)),l(void 0)},children:[(0,k.jsxs)("svg",{width:r.width,height:r.height,style:{display:"block",cursor:"pointer"},onMouseMove:u=>{let m=d(u);m.row?(e.setStripHover({row:m.row.name,offset:m.offset}),l(r.labelled?void 0:{text:`${m.row.label} \xB7 ${We(m.row,m.index===0?void 0:n.reference)}`,x:m.x,y:m.y})):(e.setStripHover(null),l(void 0))},onClick:u=>{let m=d(u);m.row&&m.index>0&&e.toggleWalk(m.row.name)},onContextMenu:u=>{let m=d(u);m.row&&(u.preventDefault(),s({row:m.index,top:u.clientY,left:u.clientX}))},children:[(0,k.jsx)(Vn,{bars:n,frame:r,ramp:e.referenceRampDomain,rowGenes:e.walkRowGenes}),(0,k.jsx)(ne,{el:Fe(n,r,e.walkStripMarks)}),(0,k.jsx)(ne,{el:De(n,r,new Set(e.walkLayers.map(u=>u.walk)))})]}),p?(0,k.jsx)("div",{style:{...Xn,left:p.x+12,top:p.y-18},children:p.text}):null,(0,k.jsxs)("div",{style:On,"data-testid":"graph-walk-strip-key",children:[h.map(u=>(0,k.jsxs)("div",{style:R,children:[(0,k.jsx)(tt,{swatch:u.swatch}),(0,k.jsx)("span",{children:u.label})]},u.label)),(0,k.jsx)("div",{style:R,children:(0,k.jsx)("span",{children:"\u25AE ticks: where each walk passes the node under the pointer \xB7 click a bar to lift its walk"})})]}),i?(0,k.jsx)(se,{model:e,row:i.row,bars:n,top:i.top,left:i.left,onClose:()=>{s(void 0)}}):null]})}),tn=Yn;var nn=a(S(),1),q=a(f(),1),$n={position:"absolute",left:0,top:0,pointerEvents:"none",overflow:"visible",zIndex:4},Zn=(0,nn.observer)(function({model:e}){let n=e.walkStripLocator;return n?(0,q.jsxs)("svg",{style:$n,width:e.paneWidth,height:e.canvasHeight,"data-testid":"graph-walk-strip-locator",children:[(0,q.jsx)("circle",{cx:n.x,cy:n.y,r:11,fill:"none",stroke:"white",strokeWidth:4}),(0,q.jsx)("circle",{cx:n.x,cy:n.y,r:11,fill:"none",stroke:"#111",strokeWidth:1.75})]}):null}),on=Zn;function rn(t){return Promise.resolve(new Q(t))}var o=a(f(),1),xe={position:"absolute",bottom:8,right:8,background:"rgba(0,0,0,0.75)",color:"white",padding:"4px 8px",borderRadius:4,fontSize:12,pointerEvents:"none",zIndex:6},jn={position:"relative"},Kn={position:"relative",lineHeight:0,isolation:"isolate"},Un={position:"absolute",left:0,right:0,bottom:0,zIndex:0},qn={position:"absolute",inset:0,zIndex:10,lineHeight:"normal",pointerEvents:"none"},Jn={position:"absolute",left:6,transform:"translateY(-50%)",background:"rgba(255,255,255,0.82)",padding:"0 4px",borderRadius:3,fontSize:11,lineHeight:"16px",whiteSpace:"nowrap",pointerEvents:"none",zIndex:4},Qn=(0,C.observer)(function({model:e}){let n=e.drawnRowLabels;return(0,o.jsx)(o.Fragment,{children:n.map(({label:r,y:i})=>{let s=i*e.scaleY+e.translateY;return s>=0&&s<=e.canvasHeight?(0,o.jsx)("div",{"data-testid":"graph-row-label",style:{...Jn,top:s},children:r},i):null})})}),eo={position:"absolute",top:ee,right:ee,display:"flex",flexDirection:"column",alignItems:"flex-end",gap:4,pointerEvents:"none",zIndex:4},to={width:18,height:3,borderRadius:2},no=(0,C.observer)(function({model:e}){let{pathLegend:n}=e;return n.length>0?(0,o.jsx)("div",{style:K,"data-testid":"graph-path-legend",children:n.map(({name:r,label:i,color:s})=>(0,o.jsxs)("div",{style:R,children:[(0,o.jsx)("div",{style:{...to,backgroundColor:s}}),(0,o.jsx)("span",{children:i})]},r))}):null}),oo=(0,C.observer)(function({model:e}){let n=e.walkLift;return n?(0,o.jsxs)("div",{style:K,"data-testid":"graph-walk-readout",children:[n.walks.map(r=>(0,o.jsx)(U,{walk:r,label:e.walkLabel(r.name),reference:e.walkReference,at:e.hoveredOn(r)},r.name)),e.liftPaintsOffReference?(0,o.jsx)(sn,{}):null,(0,o.jsxs)("div",{style:R,children:[(0,o.jsx)("div",{style:{...A,background:Ee}}),(0,o.jsxs)("span",{children:["not on ",e.liftedWalksLabel]})]})]}):null}),ro={minWidth:90,height:8,borderRadius:2,background:J},ao={display:"flex",justifyContent:"space-between",gap:8},so=(0,C.observer)(function({model:e}){let n=e.walkLift?void 0:e.referenceRampDomain,{offReference:r,unplaced:i}=e.referenceRampOffKeys,s=Math.round(n?.start??0),p=Math.round(n?.end??0);return n?(0,o.jsxs)("div",{style:K,"data-testid":"graph-ramp-legend",children:[(0,o.jsx)("div",{style:ro}),(0,o.jsxs)("div",{style:ao,children:[(0,o.jsx)("span",{children:s.toLocaleString()}),(0,o.jsxs)("span",{children:["(",Ce(p-s),")"]}),(0,o.jsx)("span",{children:p.toLocaleString()})]}),r?(0,o.jsx)(sn,{}):null,i?(0,o.jsxs)("div",{style:R,children:[(0,o.jsx)("div",{style:{...A,background:io}}),(0,o.jsx)("span",{children:"no reference position"})]}):null]}):null}),io="rgb(160, 160, 160)";function sn(){return(0,o.jsxs)("div",{style:R,children:[(0,o.jsx)("div",{style:{...A,background:He}}),(0,o.jsx)("span",{children:"off the reference"})]})}var lo={...A,border:`2px solid ${Ae}`,borderRadius:5,boxSizing:"border-box"},co=(0,C.observer)(function({model:e}){return e.genePins.some(n=>n.exonsByNode.length>0)?(0,o.jsx)("div",{style:K,"data-testid":"graph-gene-legend",children:(0,o.jsxs)("div",{style:R,children:[(0,o.jsx)("div",{style:lo}),(0,o.jsx)("span",{children:"exon"})]})}):null}),ln={position:"absolute",transform:"translate(-50%, -50%)",background:"rgba(255,255,255,0.78)",padding:"0 3px",borderRadius:3,fontSize:10,lineHeight:"13px",whiteSpace:"nowrap",pointerEvents:"none",zIndex:3},po={...ln,color:"#18181c",fontWeight:600},uo={position:"absolute",left:0,top:0,pointerEvents:"none",overflow:"visible",zIndex:2},fo=(0,C.observer)(function({model:e}){let n=(0,ie.useRef)(null);return(0,ie.useEffect)(()=>{let r=n.current;if(!r)return;let i=new ResizeObserver(()=>{(0,Me.isAlive)(e)&&e.hoveredNode===null&&e.setLegendSize({width:r.offsetWidth,height:r.offsetHeight})});return i.observe(r),()=>{i.disconnect()}},[e]),(0,o.jsxs)("div",{ref:n,style:{...eo,top:ee+e.referenceStripZonePx},children:[(0,o.jsx)(so,{model:e}),(0,o.jsx)(Je,{model:e}),(0,o.jsx)($e,{model:e}),(0,o.jsx)(co,{model:e}),(0,o.jsx)(no,{model:e}),(0,o.jsx)(et,{model:e}),(0,o.jsx)(nt,{model:e}),(0,o.jsx)(oo,{model:e})]})}),mo=(0,C.observer)(function({model:e}){let n=e.overlayLabels.sizes,r=n.flatMap(({key:i,leader:s})=>s?[{key:i,...s}]:[]);return(0,o.jsxs)(o.Fragment,{children:[r.length>0?(0,o.jsx)("svg",{style:uo,width:e.paneWidth,height:e.canvasHeight,children:r.map(({key:i,arcX:s,arcY:p,labelX:l,labelY:d})=>(0,o.jsx)("line",{"data-testid":"graph-label-leader",x1:s,y1:p,x2:l,y2:d,stroke:"#18181c",strokeWidth:1},i))}):null,n.map(({key:i,text:s,x:p,y:l,kind:d})=>(0,o.jsx)("div",{"data-testid":"graph-size-label",style:{...d==="deletion"?po:ln,left:p,top:l},children:s},i))]})}),ho=(0,C.observer)(function({model:e}){let n=e.hoveredNode?e.nodeById?.get(e.hoveredNode):null,r=e.hoveredEdge!==null&&e.graph?e.graph.edges[e.hoveredEdge]:null,i=n?Xe(n):void 0,s=r?me(r,e.deletions.find(l=>l.edgeIndex===e.hoveredEdge),l=>e.nodeById?.get(l)?.name??l):void 0,p=e.hoveredWalkRowText;return(0,o.jsxs)(o.Fragment,{children:[p&&!n?(0,o.jsxs)("div",{style:xe,"data-testid":"graph-walk-row-tooltip",children:[(0,o.jsx)("strong",{children:p.label})," \u2014 ",p.readout]}):null,n?(0,o.jsxs)("div",{style:xe,children:[(0,o.jsx)("strong",{children:n.name})," \u2014"," ",n.length.toLocaleString()," bp, depth"," ",n.depth.toFixed(1),i?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("br",{}),i.sample," ",te(i)," (rank"," ",n.stable?.rank,")"]}):null]}):null,s?(0,o.jsx)("div",{style:xe,children:s.deletion?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("strong",{children:"Deletion"})," ",s.deletion.bp,(0,o.jsx)("br",{}),s.deletion.where]}):(0,o.jsxs)(o.Fragment,{children:["Edge: ",s.ends]})}):null]})}),go=(0,C.observer)(function({model:e,nodeId:n,top:r,left:i,onClose:s}){let{own:p,reference:l,highlight:d}=e.nodeLaunchTargets(n);return(0,o.jsx)(X.Menu,{open:!0,anchorReference:"anchorPosition",anchorPosition:{top:r,left:i},onClose:()=>{s()},onMenuItemClick:h=>{h()},menuItems:[{label:"Node details",icon:lt,onClick:()=>{e.showNodeDetails(n)}},...Ve({own:p,reference:l,highlight:d,onShowLinear:h=>{e.showInLinearView(h)},onHighlight:e.canHighlightInLinearView?h=>{e.highlightInLinearView(h)}:void 0})]})}),vo=(0,C.observer)(function({model:e,ownChrome:n=!0}){let{canvasRef:r,canvas:i,error:s,retry:p}=(0,an.useRenderingBackend)(rn,e),{handlers:l,contextNode:d,contextRow:h,closeContextMenu:u}=dt(e);oe(i,e);let m=e.facetPanels!==void 0;return(0,o.jsxs)("div",{style:jn,children:[n?(0,o.jsx)(Ot,{model:e}):null,(0,o.jsxs)("div",{style:Kn,onMouseEnter:()=>{e.setPointerInPane(!0)},onMouseLeave:()=>{(0,Me.isAlive)(e)&&e.setPointerInPane(!1)},children:[e.referenceStripShown?(0,o.jsx)("div",{style:{...Un,top:e.referenceStripZonePx,background:e.paperCss}}):null,(0,o.jsx)("canvas",{ref:r,"data-testid":"graph-genome-canvas",style:{width:e.paneWidth,height:e.canvasHeight,cursor:e.isPanning||e.draggingNode?"grabbing":"grab",touchAction:"none",overscrollBehavior:"contain",display:"block",position:"relative",zIndex:1},...l}),m?(0,o.jsx)(ut,{model:e,handlers:l}):(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(Qe,{model:e}),(0,o.jsx)(qe,{model:e}),(0,o.jsx)(Qn,{model:e}),(0,o.jsx)(mo,{model:e}),(0,o.jsx)(Ye,{model:e}),(0,o.jsx)(Ze,{model:e}),(0,o.jsx)(Ue,{model:e}),(0,o.jsx)(ot,{model:e}),(0,o.jsx)(on,{model:e}),(0,o.jsx)(fo,{model:e})]}),(0,o.jsx)(Yt,{model:e}),n?(0,o.jsx)("div",{style:qn,children:(0,o.jsx)(X.LoadingOverlay,{isVisible:e.isLoading,immediate:!e.layoutResult,statusMessage:e.statusMessage,onCancel:e.canCancelLoad?()=>{e.cancelLoad()}:void 0})}):null]}),e.walkStripShown?(0,o.jsx)(tn,{model:e}):null,(0,o.jsx)(ho,{model:e}),d?(0,o.jsx)(go,{model:e,nodeId:d.nodeId,top:d.top,left:d.left,onClose:u}):null,h?(0,o.jsx)(se,{model:e,row:h.row,top:h.top,left:h.left,onClose:u}):null,s?(0,o.jsx)(X.ErrorBanner,{error:s,onReset:p}):null,n&&e.error?(0,o.jsx)(X.ErrorBanner,{error:e.error,onReset:e.canRetryLoad?()=>{e.retryLoad()}:void 0}):null]})}),ba=vo;export{ba as a};
|
|
2
|
+
//# sourceMappingURL=chunk-OU6VYHKB.js.map
|