jbrowse-plugin-graphgenomeviewer 6.3.1 → 6.4.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/README.md +2 -2
- package/dist/chunks/AddTrackWorkflow-ANWIWCO6.js +2 -0
- package/dist/chunks/{AddTrackWorkflow-F5YBOJ3E.js.map → AddTrackWorkflow-ANWIWCO6.js.map} +1 -1
- package/dist/chunks/ChooseSamplesDialog-OYAB355I.js +2 -0
- package/dist/chunks/{ChooseSamplesDialog-KVTDIA4A.js.map → ChooseSamplesDialog-OYAB355I.js.map} +1 -1
- package/dist/chunks/ChooseWalksDialog-HJE4CAKU.js +2 -0
- package/dist/chunks/{ChooseWalksDialog-L6QKOT7M.js.map → ChooseWalksDialog-HJE4CAKU.js.map} +1 -1
- package/dist/chunks/{GraphGenomeView-VIKLXNQD.js → GraphGenomeView-ULQ6U5MK.js} +2 -2
- package/dist/chunks/{GraphGenomeView-VIKLXNQD.js.map → GraphGenomeView-ULQ6U5MK.js.map} +1 -1
- package/dist/chunks/GraphTrackSettingsDialog-O6IYVHNJ.js +4 -0
- package/dist/chunks/{GraphTrackSettingsDialog-MRMSH2FO.js.map → GraphTrackSettingsDialog-O6IYVHNJ.js.map} +1 -1
- package/dist/chunks/HighlightColorDialog-LXT72W7R.js +2 -0
- package/dist/chunks/{HighlightColorDialog-SABW5OMB.js.map → HighlightColorDialog-LXT72W7R.js.map} +1 -1
- package/dist/chunks/LinearGraphDisplay-KM5SOSQQ.js +2 -0
- package/dist/chunks/{LinearGraphDisplay-AHCKWNFJ.js.map → LinearGraphDisplay-KM5SOSQQ.js.map} +1 -1
- package/dist/chunks/TrackWarningsDialog-YL2UP35Z.js +2 -0
- package/dist/chunks/{TrackWarningsDialog-HPHM5S7U.js.map → TrackWarningsDialog-YL2UP35Z.js.map} +1 -1
- package/dist/chunks/chunk-64LZZURD.js +2 -0
- package/dist/chunks/chunk-64LZZURD.js.map +7 -0
- package/dist/chunks/chunk-7KFSWOWX.js +3 -0
- package/dist/chunks/chunk-7KFSWOWX.js.map +7 -0
- package/dist/chunks/chunk-AMD4KXQV.js +2 -0
- package/dist/chunks/chunk-AMD4KXQV.js.map +7 -0
- package/dist/chunks/chunk-GB7CF6Z2.js +2 -0
- package/dist/chunks/chunk-GB7CF6Z2.js.map +7 -0
- package/dist/chunks/chunk-GXQ7NYB3.js +2 -0
- package/dist/chunks/chunk-GXQ7NYB3.js.map +7 -0
- package/dist/chunks/chunk-NXZT63HN.js +2 -0
- package/dist/chunks/chunk-NXZT63HN.js.map +7 -0
- package/dist/chunks/chunk-PLV6SE4Y.js +2 -0
- package/dist/chunks/chunk-PLV6SE4Y.js.map +7 -0
- package/dist/chunks/chunk-X4DGSMS6.js +2 -0
- package/dist/chunks/{chunk-A6GKF63C.js.map → chunk-X4DGSMS6.js.map} +1 -1
- package/dist/chunks/renderSvg-J7L374ND.js +2 -0
- package/dist/chunks/renderSvg-J7L374ND.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 +1 -1
- package/src/GraphGenomeView/components/PaneSvg.tsx +828 -0
- package/src/GraphGenomeView/components/ReferenceStripOverlay.tsx +23 -5
- package/src/GraphGenomeView/components/TubeMapOverlay.tsx +46 -35
- package/src/GraphGenomeView/model.test.ts +52 -0
- package/src/GraphGenomeView/pane/graphViews.ts +4 -0
- package/src/GraphGenomeView/pane/loadActions.ts +5 -2
- package/src/GraphGenomeView/pane/settingActions.ts +30 -12
- package/src/GraphGenomeView/viewModel.ts +16 -0
- package/src/LinearGraphDisplay/LinearGraphDisplay.test.ts +17 -0
- package/src/LinearGraphDisplay/model.ts +24 -1
- package/src/LinearGraphDisplay/renderSvg.tsx +27 -0
- package/src/version.ts +1 -1
- package/dist/chunks/AddTrackWorkflow-F5YBOJ3E.js +0 -2
- package/dist/chunks/ChooseSamplesDialog-KVTDIA4A.js +0 -2
- package/dist/chunks/ChooseWalksDialog-L6QKOT7M.js +0 -2
- package/dist/chunks/GraphTrackSettingsDialog-MRMSH2FO.js +0 -4
- package/dist/chunks/HighlightColorDialog-SABW5OMB.js +0 -2
- package/dist/chunks/LinearGraphDisplay-AHCKWNFJ.js +0 -2
- package/dist/chunks/TrackWarningsDialog-HPHM5S7U.js +0 -2
- package/dist/chunks/chunk-2SL675KP.js +0 -3
- package/dist/chunks/chunk-2SL675KP.js.map +0 -7
- package/dist/chunks/chunk-A6GKF63C.js +0 -2
- package/dist/chunks/chunk-B7KMMGFB.js +0 -2
- package/dist/chunks/chunk-B7KMMGFB.js.map +0 -7
- package/dist/chunks/chunk-TYJTJGPO.js +0 -2
- package/dist/chunks/chunk-TYJTJGPO.js.map +0 -7
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import{$ as Vt,$a as Ga,A as Nr,Aa as la,B as Ir,C as _r,Ca as ga,D as Dt,Ea as ha,F as Hr,Fa as fa,G as $t,Ga as ba,Ha as wa,I as Se,Ia as ya,Ka as ka,La as Sa,M as Wr,Ma as xa,N as En,Na as Ra,O as jr,Oa as Ot,P as Xr,Q as Bn,Qa as Ma,Ta as La,U as Fn,Ua as Ke,V as zr,Va as va,W as Dn,Wa as qe,X as Yr,Xa as Ta,Y as Ur,Ya as _t,Z as Kr,Za as Je,_ as qr,a as ne,b as xt,bb as Pa,c as ur,ca as Jr,da as Zr,ea as Qr,f as wr,fa as ea,g as yr,ga as $n,h as Pe,ha as ta,i as vt,ia as na,j as Ye,ja as oa,k as Ue,ka as ra,l as kr,la as aa,m as Tt,n as Sr,na as ia,o as O,p as An,q as At,qa as Ne,r as re,s as Nt,sa,t as xr,ta as ca,u as It,ua as da,v as Ct,va as pa,w as Tr,x as Gr,y as Pr,ya as ua,z as Ar,za as ma}from"./chunks/chunk-B7KMMGFB.js";import{a as _e,b as ye,c as Cr,g as Er,j as Ae,k as Br,l as Fr,m as Ft,p as In,q as Dr,r as $r,s as Cn}from"./chunks/chunk-WTOQRUK2.js";import{a as Pn,b as Gt,c as Pt,d as Et,e as Nn,f as Rr,h as Mr,i as Lr,j as Uc}from"./chunks/chunk-GMSOU6VO.js";import{D as J,E as Ln,F as vn,G as je,H as Tn,I as Xe,O as Gn,Q as br,R as ze,S as Lt,U as vr,X as Bt,b as He,c as Rt,d as xn,e as mr,f as lr,g as Mt,q as gr,r as hr,s as Rn,u as ke,v as Mn,w as We,x as fr}from"./chunks/chunk-B7GF3TC3.js";import{b as Vr,d as Or}from"./chunks/chunk-KRXALLQG.js";import{a as bn,b as wn,c as yn,d as kn,e as Sn,n as St}from"./chunks/chunk-WUGRVNUJ.js";import"./chunks/chunk-EHV7EUMI.js";import{b as nr,c as V,e as or,f as rr,h as ar,i as ir}from"./chunks/chunk-MYJYGSOH.js";import{a as jc}from"./chunks/chunk-KWAXLUPQ.js";import"./chunks/chunk-YBLNN5FU.js";import{a as er,d as tr}from"./chunks/chunk-DILFGQIL.js";import{a as oe}from"./chunks/chunk-FCWXYIFC.js";import{a as Xc,d as sr,g as cr,h as dr}from"./chunks/chunk-4T7DPQTR.js";import{a as ie}from"./chunks/chunk-J4OLMLS5.js";import{a as Oe}from"./chunks/chunk-J6KYLXRD.js";import{a as de,b as pr,c as zc,d as Yc}from"./chunks/chunk-TYJTJGPO.js";import{a as te,b}from"./chunks/chunk-FY3BTKY4.js";var Na=te((Cp,Aa)=>{Aa.exports=JBrowseExports["@jbrowse/core/Plugin"]});var jt=te((Fp,Ia)=>{Ia.exports=JBrowseExports["@jbrowse/core/pluggableElementTypes/AdapterType"]});var q=te((Dp,Ca)=>{Ca.exports=JBrowseExports["@jbrowse/core/configuration"]});var Hn=te((Hp,Fa)=>{Fa.exports=JBrowseExports["@jbrowse/core/data_adapters/dataAdapterCache"]});var be=te((Wp,Da)=>{Da.exports=JBrowseExports["@jbrowse/core/pluggableElementTypes"]});var Ua=te((Zp,Ya)=>{Ya.exports=JBrowseExports["@jbrowse/core/pluggableElementTypes/ViewType"]});var qa=te((Qp,Ka)=>{Ka.exports=JBrowseExports["@jbrowse/core/util/withLaunchInput"]});var Za=te((eu,Ja)=>{Ja.exports=JBrowseExports["@jbrowse/core/pluggableElementTypes/models"]});var Si=te((Sm,ki)=>{ki.exports=JBrowseExports["@jbrowse/render-core/RenderLifecycleMixin"]});var as=te((Sb,rs)=>{rs.exports=JBrowseExports["@jbrowse/core/pluggableElementTypes/renderers/util/serializableFilterChain"]});var ec=te((Tk,Qs)=>{Qs.exports=JBrowseExports["@jbrowse/core/pluggableElementTypes/DisplayType"]});var nc=te((Gk,tc)=>{tc.exports=JBrowseExports["@jbrowse/display-kit/trackHeightConfigSchemaFields"]});var sc=te((Ik,ic)=>{ic.exports=JBrowseExports["@jbrowse/display-kit/TrackHeightMixin"]});var dc=te((Ck,cc)=>{cc.exports=JBrowseExports["@jbrowse/render-core/displayPhase"]});var Vc=b(Na(),1),Oc=b(ie(),1);var Ht=b(de(),1),Wt=(0,ne.createSvgIcon)([(0,Ht.jsx)("circle",{cx:"7.2",cy:"14.4",r:"3.2"},"0"),(0,Ht.jsx)("circle",{cx:"14.8",cy:"18",r:"2"},"1"),(0,Ht.jsx)("circle",{cx:"15.2",cy:"8.8",r:"4.8"},"2")],"BubbleChart");var Ba=b(jt(),1);var Vn=b(q(),1),On=b(oe(),1),Kc=(0,Vn.ConfigurationSchema)("GbzBaseSyntenyAdapter",{assemblyNames:{type:"stringArray",defaultValue:[]},gbzDbLocation:{type:"fileLocation",defaultValue:{uri:"/path/to/graph.gbz.db",locationType:"UriLocation"}},haplotypeIndexLocation:{type:"fileLocation",defaultValue:{uri:"",locationType:"UriLocation"}},readsLocation:{type:"fileLocation",defaultValue:{uri:"",locationType:"UriLocation"}},readsIndex:(0,Vn.ConfigurationSchema)("GbzBaseReadsIndex",{indexType:{model:On.types.enumeration("IndexType",["TBI","CSI"]),type:"stringEnum",defaultValue:"TBI"},location:{type:"fileLocation",defaultValue:{uri:"",locationType:"UriLocation"}}}),samplesTsvLocation:{type:"fileLocation",defaultValue:{uri:"",locationType:"UriLocation"}},subgraphSnarls:{type:"stringEnum",model:On.types.enumeration("SnarlOutput",["none","contained","overlapping"]),defaultValue:St.snarls},referenceSample:{type:"string",defaultValue:""},assemblyNameToPanSN:{type:"frozen",defaultValue:{}},context:{type:"number",defaultValue:St.context,advanced:!0},nodeLimit:{type:"number",defaultValue:St.limit,advanced:!0}},{explicitlyTyped:!0,preProcessSnapshot:e=>{let{uri:t,baseUri:n,reads:o}=e;return{...e,...t?{gbzDbLocation:{uri:t,baseUri:n}}:{},...typeof o=="string"?{readsLocation:{uri:o,baseUri:n},...o.endsWith(".gz")?{readsIndex:{location:{uri:`${o}.tbi`,baseUri:n}}}:{}}:{}}}}),Ea=Kc;function _n(e){e.addAdapterType(()=>new Ba.default({name:"GbzBaseSyntenyAdapter",displayName:"gbz-base pangenome adapter",configSchema:Ea,adapterCapabilities:["getSubgraph","headerLanes","lanePairsOnAnchor","lanePairBatches"],adapterMetadata:{category:"Synteny adapters"},getAdapterClass:()=>import("./chunks/GbzBaseSyntenyAdapter-KVJKGGQ4.js").then(t=>t.default)}))}var $a=b(Hn(),1),Va=b(be(),1);function qc(e){return"getReads"in e&&typeof e.getReads=="function"}var Jc=e=>typeof e=="object"&&e!==null&&Object.entries(e).some(([t,n])=>["uri","localPath","blobId"].includes(t)&&typeof n=="string"&&n!=="");function Oa(e){return typeof e.reads=="string"&&e.reads!==""||Jc(e.readsLocation)}var Ze=class extends Va.RpcMethodType{constructor(){super(...arguments);this.name="GetGraphReads"}async execute(n){let{adapterConfig:o,nodeNames:r,sessionId:a,signal:i}=n,{dataAdapter:s}=await(0,$a.getAdapter)(this.pluginManager,a,o);return qc(s)?s.getReads(r,{signal:i}):{records:[],total:0}}};var _a=b(Hn(),1),Ha=b(be(),1);function Zc(e){return"getSubgraph"in e&&typeof e.getSubgraph=="function"}var Qe=class extends Ha.RpcMethodTypeWithRenameRegion{constructor(){super(...arguments);this.name="GetSubgraph"}async execute(n){let{adapterConfig:o,region:r,sessionId:a,opts:i,signal:s}=n,{dataAdapter:c}=await(0,_a.getAdapter)(this.pluginManager,a,o);return Zc(c)?c.getSubgraph(r,{...i,signal:s}):(console.warn(`[GetSubgraph] ${c.constructor.name} does not implement getSubgraph`),"")}};var Wa=b(Oe(),1),ja=b(be(),1),Xa=b(oe(),1),Qc=(0,Wa.lazy)(()=>import("./chunks/AddTrackWorkflow-F5YBOJ3E.js"));function Wn(e){e.addAddTrackWorkflowType(()=>new ja.AddTrackWorkflowType({name:"Pangenome graph track",displayName:"Add pangenome graph track",ReactComponent:Qc,stateModel:Xa.types.model({})}))}var jn;function Xn(){return jn??=import("./chunks/bandage-layout-3AR6BCUD-PYYNJEGI.js").then(e=>e.default()).catch(e=>{throw jn=void 0,e}),jn}var za=b(be(),1),et=class extends za.RpcMethodType{constructor(){super(...arguments);this.name="GraphComputeLayout"}async execute(n){let{graph:o,options:r,statusCallback:a}=n;a?.("Loading layout engine");let i=await Xn();a?.("Computing layout");let s=performance.now(),c=i.computeLayout(o,r),d=performance.now()-s;return{result:c,duration:d}}};var Ks=b(Oe(),1),qs=b(Ua(),1),Js=b(qa(),1);var zs=b(Za(),1),Ys=b(ie(),1),Y=b(oe(),1),Us=b(xt(),1);var Ws=b(pr(),1),fe=b(ie(),1);var Qa=b(de(),1),ei=(0,ne.createSvgIcon)((0,Qa.jsx)("path",{d:"M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2m0 16H8V7h11z"}),"ContentCopy");var ti=b(de(),1),ni=(0,ne.createSvgIcon)((0,ti.jsx)("path",{d:"M8.4 18.2c.38.5.6 1.12.6 1.8 0 1.66-1.34 3-3 3s-3-1.34-3-3 1.34-3 3-3c.44 0 .85.09 1.23.26l1.41-1.77c-.92-1.03-1.29-2.39-1.09-3.69l-2.03-.68c-.54.83-1.46 1.38-2.52 1.38-1.66 0-3-1.34-3-3s1.34-3 3-3 3 1.34 3 3c0 .07 0 .14-.01.21l2.03.68c.64-1.21 1.82-2.09 3.22-2.32V5.91C9.96 5.57 9 4.4 9 3c0-1.66 1.34-3 3-3s3 1.34 3 3c0 1.4-.96 2.57-2.25 2.91v2.16c1.4.23 2.58 1.11 3.22 2.32L18 9.71V9.5c0-1.66 1.34-3 3-3s3 1.34 3 3-1.34 3-3 3c-1.06 0-1.98-.55-2.52-1.37l-2.03.68c.2 1.29-.16 2.65-1.09 3.69l1.41 1.77Q17.34 17 18 17c1.66 0 3 1.34 3 3s-1.34 3-3 3-3-1.34-3-3c0-.68.22-1.3.6-1.8l-1.41-1.77c-1.35.75-3.01.76-4.37 0z"}),"Hub");var oi=b(de(),1),ri=(0,ne.createSvgIcon)((0,oi.jsx)("path",{d:"M12 2C6.49 2 2 6.49 2 12s4.49 10 10 10c1.38 0 2.5-1.12 2.5-2.5 0-.61-.23-1.2-.64-1.67-.08-.1-.13-.21-.13-.33 0-.28.22-.5.5-.5H16c3.31 0 6-2.69 6-6 0-4.96-4.49-9-10-9m5.5 11c-.83 0-1.5-.67-1.5-1.5s.67-1.5 1.5-1.5 1.5.67 1.5 1.5-.67 1.5-1.5 1.5m-3-4c-.83 0-1.5-.67-1.5-1.5S13.67 6 14.5 6s1.5.67 1.5 1.5S15.33 9 14.5 9M5 11.5c0-.83.67-1.5 1.5-1.5s1.5.67 1.5 1.5S7.33 13 6.5 13 5 12.33 5 11.5m6-4c0 .83-.67 1.5-1.5 1.5S8 8.33 8 7.5 8.67 6 9.5 6s1.5.67 1.5 1.5"}),"Palette");var zn=b(de(),1),ai=(0,ne.createSvgIcon)([(0,zn.jsx)("circle",{cx:"12",cy:"12",r:"3.2"},"0"),(0,zn.jsx)("path",{d:"M9 2 7.17 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2h-3.17L15 2zm3 15c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5"},"1")],"PhotoCamera");var ii=b(de(),1),si=(0,ne.createSvgIcon)((0,ii.jsx)("path",{d:"M12 4.5C7 4.5 2.73 7.61 1 12c1.73 4.39 6 7.5 11 7.5s9.27-3.11 11-7.5c-1.73-4.39-6-7.5-11-7.5M12 17c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5m0-8c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3"}),"Visibility");var Yt=b(Oe(),1);var ci=30;function ed(e,t){let{opts:n}=t,o=new Map(t.nodes.map(p=>[p.id,Et(n,p.length)])),r=p=>o.get(p)??n.minimumNodeLength,a=e.nodes.filter(V).sort((p,u)=>p.stable.start-u.stable.start),i=new Map,s=0;for(let p of a)i.set(p.id,{x:s,y:0}),s+=r(p.id)+n.edgeLength;let c=_e(e),d=new Map(a.map(p=>[p.id,0])),m=a.map(p=>p.id);for(let p of m){let u=i.get(p),w=d.get(p)+1;for(let R of c.get(p)??[])d.has(R)||(d.set(R,w),i.set(R,{x:u.x+r(p)/2,y:ci*w}),m.push(R))}let l=0;for(let p of e.nodes)i.has(p.id)||i.set(p.id,{x:l++*s/e.nodes.length,y:ci*3});return i}function di(e,t){let n=ed(e,t);return t.nodes.map(o=>({...o,...n.get(o.id)}))}function pi(e,t){let n=e.nodes.filter(k=>V(k)&&(t[k.id]?.length??0)>0);if(n.length<2)return t;let o=n.map(k=>{let f=t[k.id],S=f[Math.floor(f.length/2)];return{x:S.x,y:S.y,r:k.stable.start+k.length/2,w:k.length}}),r=o.reduce((k,f)=>k+f.w,0),a=o.reduce((k,f)=>k+f.x*f.w,0)/r,i=o.reduce((k,f)=>k+f.y*f.w,0)/r,s=o.reduce((k,f)=>k+f.r*f.w,0)/r,c=0,d=0;for(let k of o)c+=k.w*(k.x-a)*(k.r-s),d+=k.w*(k.y-i)*(k.r-s);let m=-Math.atan2(d,c),l=Math.cos(m),p=Math.sin(m),u={};for(let[k,f]of Object.entries(t))u[k]=f.map(S=>{let G=S.x-a,g=S.y-i;return{x:a+l*G-p*g,y:i+p*G+l*g}});let w=0,R=0;for(let k of e.nodes)if(!V(k))for(let f of u[k.id]??[])f.y>i?w++:R++;if(R>w)for(let k of Object.values(u))for(let f of k)f.y=2*i-f.y;return u}function td(e,t){let n=e.indexOf(":"),o=e.indexOf(":",n+1);if(n!==-1&&o!==-1){let r=e.slice(0,n),a=e.slice(n+1,o),i=e.slice(o+1);a==="i"||a==="f"?t[r]=+i:a==="Z"&&(t[r]=i)}}function tt(e){let t={};for(let n of e)td(n,t);return t}function mi(e){let{SN:t,SO:n,SR:o}=e.tags;return typeof t=="string"&&typeof n=="number"&&typeof o=="number"?{refName:t,start:n,rank:o}:void 0}var ui=62,nd=60;function od(e){let t=[],n="+",o=0;function r(a){a>o&&t.push({id:e.slice(o,a),strand:n})}for(let a=0;a<e.length;a++){let i=e.charCodeAt(a);(i===ui||i===nd)&&(r(a),n=i===ui?"+":"-",o=a+1)}return r(e.length),t}function li(e){let t={nodes:[],links:[],paths:[],walks:[],header:[],id:""};for(let n of e.split(`
|
|
2
|
-
`)){let o=n.endsWith("\r")?n.slice(0,-1):n;if(o.startsWith("H")){let[,...r]=o.split(" ");t.header.push(tt(r))}else if(o.startsWith("S")){let[,r,...a]=o.split(" "),i,s,c,d=!1,m=a[0]??"*";/^\d+$/.test(m)?(i=+m,s=a[1]??"*",c=a.slice(2)):(d=!0,s=m,i=s==="*"?0:s.length,c=a.slice(1));let l=tt(c);d&&"LN"in l&&(i=+l.LN),t.nodes.push({id:r,length:i,sequence:s,tags:l})}else if(o.startsWith("E")){let[,,r,a,,,,,i,...s]=o.split(" ");r&&a&&t.links.push({source:r.slice(0,-1),target:a.slice(0,-1),strand1:r.at(-1),strand2:a.at(-1),cigar:i??"*",tags:tt(s)})}else if(o.startsWith("L")){let[,r,a,i,s,c,...d]=o.split(" ");r&&i&&s&&t.links.push({source:r,target:i,strand1:a,strand2:s,cigar:c??"*",tags:tt(d)})}else if(o.startsWith("W")){let[,r,a,i,s,c,d,...m]=o.split(" ");r&&a&&i&&s&&c&&d&&t.walks.push({sample:r,haplotype:+a,contig:i,start:s==="*"?-1:+s,end:c==="*"?-1:+c,segments:od(d),tags:tt(m)})}else if(o.startsWith("P")){let[,r,a,...i]=o.split(" ");r&&a&&t.paths.push({name:r,path:a,rest:i})}}return t}function rd(e){let t=new Map,n=new Map;function o(a,i){t.has(a)||t.set(a,i)}function r(a,i){o(a,i),n.set(a,(n.get(a)??0)+1)}for(let a of e.links)o(a.source,a.strand1==="-"?"-":"+"),o(a.target,a.strand2==="-"?"-":"+");for(let a of e.paths)for(let i of a.path.split(","))r(i.slice(0,-1),i.endsWith("-")?"-":"+");for(let a of e.walks)for(let i of a.segments)r(i.id,i.strand==="-"?"-":"+");return{canonical:t,traversals:n}}var gi=e=>e.start===-1?0:e.start;function ad(e){return[...e.paths.map(t=>({...J(t.name),steps:t.path.split(",").map(n=>({id:n.slice(0,-1),strand:n.endsWith("-")?"-":"+"}))})),...e.walks.map(t=>({name:`${t.sample}#${t.haplotype}#${t.contig}`,start:gi(t),steps:t.segments.map(n=>({id:n.id,strand:n.strand==="-"?"-":"+"}))}))]}function id(e){let t=e.tags.SM;if(typeof t!="string")return;let n=t.split(",").map(o=>o.trim()).filter(Boolean);return n.length>0?n:void 0}var nt=e=>typeof e=="number"&&e>0?e:void 0;function sd({tags:e,length:t}){let n=nt(e.RC)??nt(e.FC)??nt(e.KC);return nt(e.dp)??nt(e.DP)??(n!==void 0&&t>0?n/t:void 0)}function cd(e,t,n){return{id:`${e.id}${t}`,name:e.id,length:e.length,depth:n,stable:mi(e),samples:id(e)}}function hi(e,t="Imported GFA"){let n=[],o=[],{canonical:r,traversals:a}=rd(e),i=u=>`${u}${r.get(u)??"+"}`;for(let u of e.nodes){let w=sd(u)??Math.max(a.get(u.id)??1,1);n.push(cd(u,r.get(u.id)??"+",w))}for(let u of e.links)o.push({from:i(u.source),to:i(u.target),fromStrand:u.strand1==="-"?"-":"+",toStrand:u.strand2==="-"?"-":"+"});let s=[],c=new Map,d=(u,w)=>[u,w].sort().join("--");function m(u,w){for(let R=0;R<u.length-1;R++){let k=d(u[R],u[R+1]);c.has(k)||c.set(k,new Set),c.get(k).add(w)}}for(let u of e.paths){let w=u.path.split(",").map(R=>i(R.slice(0,-1)));s.push({name:u.name,nodeIds:w,start:J(u.name).start}),m(w,u.name)}for(let u of e.walks){let w=u.segments.map(k=>i(k.id)),R=`${u.sample}#${u.haplotype}#${u.contig}`;s.push({name:R,nodeIds:w,start:gi(u),sample:u.sample,haplotype:u.haplotype,contig:u.contig}),m(w,R)}for(let u of o){let w=c.get(d(u.from,u.to));w&&w.size>0&&(u.pathIds=[...w])}let l=new Map(e.nodes.map(u=>[u.id,u.length])),p=e.paths.length>0||e.walks.length>0?Ln(ad(e),u=>l.get(u)??0):void 0;return{name:t,nodes:n,edges:o,paths:s.length>0?s:void 0,anchorPaths:p?.anchorPaths,pathVisits:p?.pathVisits,anchoredBy:n.some(u=>u.stable)?"tags":void 0}}var dd="\0deletion:",pd=.5;function fi(e,t,n=new Set){let o=new Map(t.map(a=>[a.edgeIndex,`${dd}${a.edgeIndex}`])),r=[];return e.edges.forEach((a,i)=>{let s=o.get(i);if(!n.has(i))if(s===void 0)r.push(a);else{let{fromStrand:c,toStrand:d}=a;r.push({from:a.from,to:s,...c?{fromStrand:c}:{}},{from:s,to:a.to,...d?{toStrand:d}:{}})}}),{graph:{...e,nodes:[...e.nodes,...[...o.values()].map(a=>({id:a,name:a,length:0,depth:0}))],edges:r},routes:o,ids:new Set(o.values())}}function bi(e,t,n,o,r){let a=new Map(e.nodes.map(i=>[i.id,i.length]));return t.map(i=>{let s=i.bypassed.reduce((m,l)=>m+(a.get(l)??0),0),c=Math.max(r.minimumNodeLength,o(s)*pd),d=n.get(i.edgeIndex);return{id:d,name:d,length:Math.round(c*1e6/r.nodeLengthPerMegabase),depth:0}})}function wi(e,t){let n={...e},o={};for(let[r,a]of t){let i=n[a];delete n[a],i?.length&&(o[r]=i)}return{nodePositions:n,deletionRoutes:o}}function Yn(e,t,n={}){let o=Tn(hi(li(e),t),n.referencePath);if(o.nodes.length===0)throw new Error(`No graph segments in ${t}`);if(n.maxNodes!==void 0&&o.nodes.length>n.maxNodes)throw new Error(`Graph too large to draw: ${o.nodes.length.toLocaleString()} nodes (limit ${n.maxNodes.toLocaleString()}). Zoom in to a smaller region, or raise maxGraphNodes on this view.`);return o}var me={engine:"fmmm",quality:2,linearLayout:!1,bubbleSpread:"auto",spacing:1,componentSeparation:1,showDeletionEdges:!0};function Un(e={}){return{engine:e.engine??me.engine,quality:e.quality??me.quality,linearLayout:e.linearLayout??me.linearLayout,bubbleSpread:e.bubbleSpread??me.bubbleSpread,spacing:e.spacing??me.spacing,componentSeparation:e.componentSeparation??me.componentSeparation,showDeletionEdges:e.showDeletionEdges??me.showDeletionEdges}}var ud=15;function yi(e,t,n){let o=e.nodes.some(V),r={...t,opts:{...t.opts,edgeLength:t.opts.edgeLength*(n.spacing??1)}};return{graph:{nodes:o?di(e,r):r.nodes,edges:e.edges},options:{quality:n.quality,linearLayout:n.linearLayout,...r.opts,componentSeparation:ud*(n.componentSeparation??1),...o?{rotateComponents:!1}:{},engine:n.engine??"fmmm"}}}function Xt(e,t){let n=e.nodes.some(V);return`${t.engine??"fmmm"}|${t.quality}|${t.linearLayout}|${t.bubbleSpread}|${t.spacing??1}|${t.componentSeparation??1}|${t.showDeletionEdges!==!1}|${n}|${e.referencePath??""}`}async function Kn(e,t,n){let o=Lr(t.bubbleSpread),r=ke(e),a=t.showDeletionEdges===!1?Mn(e,r):new Set,i=r.filter(S=>!a.has(S.edgeIndex)),s=fi(e,i,a),c=gr(s.graph,s.ids),d={...c.graph,nodes:c.graph.nodes.filter(S=>!s.ids.has(S.id))},m=Nn(d,o),{result:l,duration:p}=await n(yi(c.graph,{...m,nodes:[...m.nodes,...bi(e,i,s.routes,Rr(d,o),m.opts)]},t)),u=Nn(e,o),w=new Map(u.nodes.map(S=>[S.id,Et(u.opts,S.length)])),R=hr(l.nodePositions,c.runs,S=>w.get(S)??0),{nodePositions:k,deletionRoutes:f}=wi(e.nodes.some(V)?pi(e,R):R,s.routes);return{result:{...l,nodePositions:k,stranded:!0,...i.length?{deletionRoutes:f,extent:qn(f)}:{}},duration:p}}function qn(e){let t=1/0,n=1/0,o=-1/0,r=-1/0;for(let a of Object.values(e))for(let i of a)t=Math.min(t,i.x),n=Math.min(n,i.y),o=Math.max(o,i.x),r=Math.max(r,i.y);return{minX:t,minY:n,maxX:o,maxY:r}}var F=40,md=1e-6,ld=100;function Ie(e){return Math.max(md,Math.min(ld,e))}function zt(e,t,n,o=F){let r=t-e.h*n;return o-e.minY*n+Math.max(0,r)/2}function Ce(e,t,n,o,{minScale:r=0,padLeft:a=F,padTop:i=F,padRight:s=F,padBottom:c=F}={}){let d=t-a-s,m=n-i-c;if(d<=0||m<=0||!(e.w>0||!o&&e.h>0))return;let l=e.w>0?d/e.w:1/0,p=e.h>0?m/e.h:1/0,u=Ie(Math.max(r,o?l:Math.min(l,p))),w=d-e.w*u;return{scale:u,translateX:a-e.minX*u+Math.max(0,w)/2,translateY:zt(e,m,o?1:u,i)}}function ot(e,t={}){let{minX:n,minY:o,maxX:r,maxY:a}=qn(e.nodePositions),{region:i}=t;e.referenceAxis&&i&&i.end>i.start&&(n=i.start,r=i.end);let s=t.extent??e.extent;return s&&(n=Math.min(n,s.minX??n),o=Math.min(o,s.minY??o),r=Math.max(r,s.maxX??r),a=Math.max(a,s.maxY??a)),{minX:n,minY:o,w:r-n,h:a-o}}var gd=4;function Jn(e=gd){let t=new WeakMap,n=o=>{let r=t.get(o);return r||(r=new Map,t.set(o,r)),r};return{layout(o,r,a){let i=n(o),s=Xt(o,r),c=i.get(s);if(c)return c.run;i.size>=e&&i.delete(i.keys().next().value);let d=performance.now(),m={run:Kn(o,r,a).then(l=>(m.done=l.result,{...l,duration:l.duration||performance.now()-d}))};return m.run.catch(()=>i.delete(s)),i.set(s,m),m.run},ready(o,r){return t.get(o)?.get(Xt(o,r))?.done},inherit(o,r){let a=t.get(o);a&&o!==r&&t.set(r,a)}}}function xe(e,t){return{scaleX:e,scaleY:t?1:e,pixelRows:t}}function Zn(e,t,n,o){return{minX:-e.translateX/t.scaleX,minY:-e.translateY/t.scaleY,maxX:(n-e.translateX)/t.scaleX,maxY:(o-e.translateY)/t.scaleY}}function Qn(e,t){let n=(e.maxX-e.minX)*t,o=(e.maxY-e.minY)*t;return{minX:e.minX-n,minY:e.minY-o,maxX:e.maxX+n,maxY:e.maxY+o}}function eo(e,t){return t.minX>=e.minX&&t.maxX<=e.maxX&&t.minY>=e.minY&&t.maxY<=e.maxY}function to(e,t,n,o,r){let a=Ie(e.scale*t),i=a/e.scale;return{scale:a,translateX:n-(n-e.translateX)*i,translateY:r?e.translateY:o-(o-e.translateY)*i}}var x=b(oe(),1),Mi=b(Si(),1);var Re=b(oe(),1);function xi(e){return t=>e.includes(t)?t:void 0}function no(e){return Re.types.snapshotProcessor(Re.types.maybe(Re.types.enumeration(e)),{preProcessor:xi(e)})}function oo(e,t){return Re.types.snapshotProcessor(Re.types.optional(Re.types.enumeration(e),t),{preProcessor:xi(e)})}var Li=600,Ut=160,Kt=[1,1,1,1],qt=[.12,.12,.12,1],vi=([e,t,n])=>`rgb(${[e,t,n].map(o=>Math.round(o*255)).join(", ")})`,Ti=5,Ee=new Set(["tubemap","tubemapref"]),Gi=(0,Yt.lazy)(()=>import("./chunks/ChooseSamplesDialog-KVTDIA4A.js")),Pi=(0,Yt.lazy)(()=>import("./chunks/ChooseWalksDialog-L6QKOT7M.js")),Ai=(0,Yt.lazy)(()=>import("./chunks/HighlightColorDialog-SABW5OMB.js")),Ni=12,hd=x.types.snapshotProcessor(x.types.model("GraphFacet",{field:x.types.optional(x.types.enumeration(["","walk","sample"]),""),domain:x.types.optional(x.types.frozen(),[]),columns:x.types.maybe(x.types.number)}),{preProcessor:e=>It(e)}),Ii=[{bp:0,label:"None"},{bp:3,label:"Under 3 bp"},{bp:10,label:"Under 10 bp"},{bp:50,label:"Under 50 bp, leaving structural variants"},{bp:1e3,label:"Under 1 kb"}],Ri=".segs.bed.gz";function Ci(e){if(typeof e.uri=="string")return e.uri;let n=e.segmentsLocation?.uri;return typeof n=="string"&&n.endsWith(Ri)?n.slice(0,-Ri.length):void 0}var ro=1.15,Ei=1.6,Bi=150,Fi=1,ao=40,io={nodeStrokes:[],nodeStrokeRuns:new Map,arrows:[],arrowRuns:new Map,edgeCurves:[],edgeCurveRuns:new Map};function he(...e){}var rt=5e6;function Me(e){return e>=1e6?`${+(e/1e6).toFixed(1)} Mb`:`${Math.round(e/1e3)} kb`}var Di=2e4;function Be(e){return e&&"uri"in e&&e.uri?new URL(e.uri,e.baseUri??window.location.href).href:void 0}function so(e){return e.builtViewport!==void 0&&e.paintedViewport===e.builtViewport&&e.builtViewport.viewportDirty===e.viewportDirty&&!e.viewportRebuildPending}function at(e){let{width:t,height:n}=e.viewBox;return Zn(e,e.axisScale,t,n)}var it=Jn(),$i=x.types.compose("GraphPane",(0,Mi.RenderLifecycleMixin)(),x.types.model({layoutQuality:x.types.optional(x.types.number,2),linearLayout:x.types.optional(x.types.boolean,!1),layoutMode:no(Tt),colorScheme:no(Gt),highlightOnHover:x.types.maybe(x.types.boolean),bubbleSpread:oo(Mr,"auto"),nodeWidth:oo(vr,"depth"),showBubbles:x.types.optional(x.types.boolean,!1),showDeletionEdges:x.types.optional(x.types.boolean,!0),showGenes:x.types.optional(x.types.boolean,!0),showReferenceStrip:x.types.optional(x.types.boolean,!0),tubeMapFold:x.types.optional(x.types.number,0),geneTrackId:x.types.optional(x.types.string,""),repeatTrackId:x.types.optional(x.types.string,""),repeatKey:x.types.optional(x.types.string,""),walkRowSamples:x.types.maybe(x.types.frozen()),walkRowGroupBy:x.types.maybe(x.types.snapshotProcessor(x.types.frozen(),{preProcessor:e=>Ar(e)})),walkStrip:x.types.optional(x.types.boolean,!1),walkLayers:x.types.optional(x.types.frozen(),[]),facet:x.types.optional(hd,{}),referencePath:x.types.optional(x.types.string,""),showPerf:x.types.optional(x.types.boolean,!1),contigThickness:x.types.optional(x.types.number,6),connectorThickness:x.types.optional(x.types.number,2),darkMode:x.types.optional(x.types.boolean,!1),scale:x.types.optional(x.types.number,1),translateX:x.types.optional(x.types.number,0),translateY:x.types.optional(x.types.number,0),drawPaths:x.types.optional(x.types.boolean,!1),paneHeight:x.types.maybe(x.types.number),maxGraphNodes:x.types.optional(x.types.number,Di),colorDomain:x.types.maybe(x.types.frozen()),connectedViewId:x.types.maybe(x.types.string)})).volatile(()=>({graph:void 0,graphRegion:void 0,loadedReferencePath:void 0,layoutResult:void 0,legendSize:{width:0,height:0},indexBubbles:void 0,geneTrackFeatures:void 0,walkGeneFeatures:void 0,walkRowSampleTable:void 0,repeatArrays:void 0,popStack:[],error:void 0,isLoading:!1,loadCanceled:!1,statusMessage:"",hoveredNode:null,hoveredRowWalks:[],hoveredBubble:null,pointerInPane:!1,stripHover:null,hoveredWalkRow:null,hoveredEdge:null,selectedNode:null,viewportDirty:0,positionsVersion:0,geometryVersion:0,builtViewport:void 0,paintedViewport:void 0,draggingNode:null,isPanning:!1,viewportOwner:"fit",viewportDirtyTimer:void 0,positionsDirtyFrame:0,lastFetchMs:void 0,readsShown:void 0,lastLayoutMs:void 0,lastGeometryMs:void 0,lastGeometryStrokeCount:void 0,viewportRebuildPending:!1}));var Ds=b(ie(),1),pe=b(oe(),1),_=b(xt(),1);function co(e,t){let n=new Set(t),o=e.nodes.filter(c=>n.has(c.name)),r=new Set(o.map(c=>c.id)),a=new Map(e.nodes.map(c=>[c.id,c.length])),i=new Map,s=e.paths?.flatMap(c=>{let d=c.nodeIds.findIndex(p=>r.has(p));if(d<0)return[];let m=c.nodeIds.filter(p=>r.has(p));i.set(c.name,{first:d,nodeIds:m});let l=c.nodeIds.slice(0,d).reduce((p,u)=>p+(a.get(u)??0),0);return[{...c,nodeIds:m,...c.start===void 0?{}:{start:c.start+l}}]});return{name:e.name,nodes:o,edges:e.edges.filter(c=>r.has(c.from)&&r.has(c.to)),...s?.length?{paths:s}:{},anchorPaths:Xe(e,i),pathVisits:e.pathVisits,anchoredBy:e.anchoredBy,referencePath:e.referencePath}}function Vi(e,t){let n=new Set(e.nodes.filter(c=>V(c)&&rr(c,t)).map(c=>c.id)),o=e.paths??[];if(n.size===0||o.length===0)return e;let r=o.map(c=>{let d=-1,m=-1;return c.nodeIds.forEach((l,p)=>{n.has(l)&&(d<0&&(d=p),m=p)}),d<0?void 0:{first:d,last:m}});if(r.every((c,d)=>c?.first===0&&c.last===o[d].nodeIds.length-1))return e;let a=new Set,i=[],s=new Map;return o.forEach((c,d)=>{let m=r[d];if(m){let l=c.nodeIds.slice(m.first,m.last+1);for(let p of l)a.add(p);i.push({...c,nodeIds:l}),s.set(c.name,{first:m.first,nodeIds:l})}}),{...e,nodes:e.nodes.filter(c=>a.has(c.id)),edges:e.edges.filter(c=>a.has(c.from)&&a.has(c.to)),paths:i,pathVisits:e.pathVisits&&fd(e.pathVisits,o,r,new Map(e.nodes.map(c=>[c.id,c.name]))),anchorPaths:Xe(e,s)}}function fd(e,t,n,o){let r=new Map,a=new Map;return t.forEach((i,s)=>{let c=J(i.name).name,d=n[s];i.nodeIds.forEach((m,l)=>{let p=o.get(m)??m,u=e.get(p);if(!u)return;let w=`${c} ${p}`,R=r.get(w)??0;for(;R<u.length&&u[R].path!==c;)R++;let k=u[R];if(r.set(w,R+1),k&&d&&l>=d.first&&l<=d.last){let f=a.get(p);f?f.push(k):a.set(p,[k])}})}),a}function bd(e,t,n){let o=J(e.name).name,r=new Map,a=[],i=()=>({a:-1/0,b:1/0,detour:[],bp:0}),s=[i()];for(let c of e.nodeIds){let d=t.get(c);if(!d)continue;let m=r.get(d.name)??0;r.set(d.name,m+1);let l=n.get(`${o} ${d.name}`)?.[m]??ur(d),p=s.at(-1),u=a.at(-1);if(V(d)){let w=d.stable.start,R=w+d.length,k=l!==(d.stable.strand??"+"),f=u!==void 0&&p.detour.length===0;f&&!u.inverted&&!k&&u.end===w?u.end=R:f&&u.inverted&&k&&u.start===R?u.start=w:(a.push({start:w,end:R,inverted:k}),s.push(i()))}else p.detour.push({node:d,strand:l}),p.bp+=d.length}return a.forEach((c,d)=>{s[d].b=c.start,s[d+1].a=c.end}),{path:e,runs:a,gaps:s}}function po(e,t){return Number.isFinite(e.a)&&Number.isFinite(e.b)&&e.b>=e.a&&Math.max(e.b-e.a,e.bp)<t}function Oi(e,t,n){let o=0,r=e.length;for(;o<r;){let a=o+r>>1;e[a]<=t?o=a+1:r=a}return o<e.length&&e[o]<n}function wd(e){let t=new Map;for(let n=1;n<e.length;n++){let o=e[n-1],r=e[n],a=o.stable.start+o.length;a!==r.stable.start&&(t.set(a,"reference-gap"),t.set(r.stable.start,"reference-gap"))}return t}function yd(e,t,n){let o=(r,a)=>{Number.isFinite(r)&&!n.has(r)&&n.set(r,a)};for(let{runs:r,gaps:a}of e){let i=r[0],s=r.at(-1);i&&s&&(o(i.start,"walk-end"),o(s.end,"walk-end"));for(let c of r)c.inverted&&c.end-c.start>=t&&(o(c.start,"inversion"),o(c.end,"inversion"));for(let c of a)c.b<c.a?(o(c.a,"backward"),o(c.b,"backward")):po(c,t)||(o(c.a,"variant"),o(c.b,"variant"))}for(let r=!0;r;){r=!1;let a=[...n.keys()].sort((s,c)=>s-c),i=e.flatMap(({runs:s,gaps:c})=>[...c.filter(d=>po(d,t)).map(d=>[d.a,d.b]),...s.filter(d=>d.inverted&&d.end-d.start<t).map(d=>[d.start,d.end])]);for(let[s,c]of i)Oi(a,s,c)&&(r||=!n.has(s)||!n.has(c),o(s,"overlap"),o(c,"overlap"))}return n}function kd(e,t){let n=[],o=[],r=()=>{let a=o[0],i=o.at(-1);if(a&&i){let s=a.stable.start,c=i.stable.start+i.length,d=`${s}-${c}`;n.push({node:{id:`${d}+`,name:d,length:c-s,depth:0,stable:{refName:a.stable.refName,start:s,rank:0,strand:"+"}},members:o})}o=[]};for(let a of e)t.has(a.stable.start)&&r(),o.push(a);return r(),n}function _i(e,t){let n=e.nodes.filter(V).sort((h,M)=>h.stable.start-M.stable.start),o=e.paths??[];if(n.length===0||o.length===0)return;let r=new Map(e.nodes.map(h=>[h.id,h])),a=wr(e),i=o.map(h=>bd(h,r,a)),s=yd(i,t,wd(n)),c=[...s.keys()].sort((h,M)=>h-M),d=kd(n,s),m=d.map(h=>h.node.stable.start),l=h=>{let M=0,v=m.length-1;for(;M<v;){let L=M+v+1>>1;m[L]<=h?M=L:v=L-1}return M},p=new Map,u=new Map;for(let h of d){p.set(h.node.id,h.members.map(M=>M.id));for(let M of h.members)u.set(M.id,h.node.id)}let w=new Map,R=h=>{let M=`${h.a} ${h.b} ${h.detour.map(L=>L.node.id+L.strand).join(",")}`,v=w.get(M);if(!v){let L=`r${w.size}`;v={id:`${L}+`,name:L,length:h.bp,depth:0,stable:{refName:n[0].stable.refName,start:Number.isFinite(h.a)?h.a:h.b,rank:1,strand:"+"}},w.set(M,v),p.set(v.id,h.detour.map(A=>A.node.id));for(let A of h.detour)u.has(A.node.id)||u.set(A.node.id,v.id)}return v},k=new Map,f=[],S=new Map,G=new Map,g=new Map;for(let{path:h,runs:M,gaps:v}of i){let L=[],A=[],I=!1,D=(T,K)=>{let P=L.at(-1);I&&P?.node===T&&P.strand===K||L.push({node:T,strand:K}),I=!0},$=T=>{I=!1,T.detour.length>0&&(D(R(T),"+"),I=!1)},H=T=>{(T.bp>0||T.b>T.a)&&A.push({start:T.a,end:T.b,bp:T.bp});let K=d[l(T.b>T.a?T.a:T.a-1)];for(let P of T.detour)u.has(P.node.id)||(u.set(P.node.id,K.node.id),p.get(K.node.id).push(P.node.id))};M.forEach((T,K)=>{let P=v[K];po(P,t)&&!Oi(c,P.a,P.b)?H(P):$(P);let N=l(T.start),E=l(T.end-1),W=T.end-T.start<t;if(T.inverted&&!W){I=!1;for(let B=E;B>=N;B--)D(d[B].node,"-");I=!1}else{T.inverted&&A.push({start:T.start,end:T.end,bp:T.end-T.start,inverted:!0});for(let B=N;B<=E;B++)D(d[B].node,"+")}}),$(v.at(-1));let U=J(h.name).name,ee=0;L.forEach(({node:T,strand:K},P)=>{g.set(T.id,(g.get(T.id)??0)+1);let N=S.get(T.name)??[];N.push({path:U,sample:h.sample??U,start:ee,strand:K}),S.set(T.name,N),ee+=T.length;let E=L[P+1];if(E){let W=`${T.id}${K} ${E.node.id}${E.strand}`,B=G.get(W);B?B.pathIds.push(h.name):G.set(W,{from:T.id,to:E.node.id,fromStrand:K,toStrand:E.strand,pathIds:[h.name]})}}),f.push({...h,nodeIds:L.map(T=>T.node.id)}),k.set(h.name,A)}let y=[...d.map(h=>h.node),...w.values()].filter(h=>g.has(h.id)).map(h=>({...h,depth:g.get(h.id)}));return{graph:{...e,nodes:y,edges:[...G.values()],paths:f,pathVisits:S,reads:void 0},members:p,coarseOf:u,deviations:k,cuts:s}}var Ns=b(q(),1),Z=b(ie(),1),Co=b(jc(),1),j=b(oe(),1);var wt=b(ie(),1),Io=b(oe(),1);function st(e,t,n={}){return{nodePositions:n.drawsRows?{}:e.nodePositions,deletions:t.bypassed,deletionRoutes:e.deletionRoutes,stranded:e.stranded,hiddenEdges:t.hidden}}var z=e=>+e.toFixed(1);function Sd(e){let t=/^rgba?\(([^,]+),([^,]+),([^,)]+)(?:,([^)]+))?\)$/.exec(e.replaceAll(" ",""));if(!t)return{color:e,opacity:1};let n=t[4]===void 0?1:Number(t[4]);return{color:`rgb(${t[1]},${t[2]},${t[3]})`,opacity:n}}function uo(e,t){let{color:n,opacity:o}=Sd(t);return`${e}="${n}"${o<1?` ${e}-opacity="${z(o)}"`:""}`}var Hi=.5,Wi=.25;function ji(e,t){let n=[],o=[],r=(d,m)=>{let l={d:`M${z(d)} ${z(m)}`,segments:0,x0:d,x1:d,y0:m,y1:m};return o.push(l),l},a=d=>{let m=o.at(-1)??r(d[0],d[1]);for(let l=0;l<d.length;l+=2)m.x0=Math.min(m.x0,d[l]),m.x1=Math.max(m.x1,d[l]),m.y0=Math.min(m.y0,d[l+1]),m.y1=Math.max(m.y1,d[l+1]);return m.segments++,m},i=d=>{let m=new Set;return o.map(l=>{if(!d||l.x1-l.x0>=Hi||l.y1-l.y0>=Hi)return l.d;let p=(l.x0+l.x1)/2,u=(l.y0+l.y1)/2,w=`${Math.round(p/Wi)} ${Math.round(u/Wi)}`;return l.segments===0||m.has(w)?"":(m.add(w),`M${z(p)} ${z(u)}h0`)}).join("")},s={canvas:void 0,fillStyle:"#000",strokeStyle:"#000",lineWidth:1,lineCap:"butt",lineJoin:"miter",beginPath(){o=[]},moveTo(d,m){r(d,m)},lineTo(d,m){a([d,m]).d+=`L${z(d)} ${z(m)}`},bezierCurveTo(d,m,l,p,u,w){a([d,m,l,p,u,w]).d+=`C${z(d)} ${z(m)} ${z(l)} ${z(p)} ${z(u)} ${z(w)}`},closePath(){let d=o.at(-1);d&&(d.d+="Z")},stroke(){let d=i(s.lineCap!=="butt");d&&n.push(`<path d="${d}" fill="none" ${uo("stroke",s.strokeStyle)} stroke-width="${z(s.lineWidth)}" stroke-linecap="${s.lineCap}" stroke-linejoin="${s.lineJoin}"/>`)},fill(){let d=i(!1);d&&n.push(`<path d="${d}" ${uo("fill",s.fillStyle)}/>`)},fillRect(d,m,l,p){n.push(`<rect x="${z(d)}" y="${z(m)}" width="${z(l)}" height="${z(p)}" ${uo("fill",s.fillStyle)}/>`)}},c={width:e,height:t,style:{},getContext:()=>s};return s.canvas=c,{canvas:c,markup:()=>n.join("")}}function ct(e,t,n){let o=new Map;for(let a of e.nodes)if(nr(a)){let{refName:i}=a.stable;if(n[a.id]?.length){let s=o.get(i)??o.set(i,{nodes:[],reach:0}).get(i);s.nodes.push(a),s.reach=Math.max(s.reach,a.length)}}for(let{nodes:a}of o.values())a.sort((i,s)=>i.stable.start-s.stable.start);let r=[];for(let a of t){let i=o.get(a.refName);if(!i)continue;let s=[],c=[],d=new Set,m,l=1/0,p=0,u=(a.start+a.end)/2,{nodes:w,reach:R}=i;for(let k=ar(w,a.start-R);k<w.length&&w[k].stable.start<a.end;k++){let f=w[k],S=f.stable.start,G=S+f.length;if(G<=a.start)continue;let g=n[f.id];d.add(f.id),p+=Math.min(G,a.end)-Math.max(S,a.start);let y=[];for(let v of a.exons){let L=Math.max(v.start,S),A=Math.min(v.end,G);if(A<=L)continue;let I=Rn(g,(L-S)/f.length,(A-S)/f.length);I.length===1&&I.push({...I[0]}),y.push(Mt(I))}y.length>0&&(s.push(...y),c.push({nodeId:f.id,d:y.join("")}));let h=Math.min(Math.max(u,S),G),M=Math.abs(h-u);if(M<l){l=M;let[v]=Rn(g,(h-S)/f.length,(h-S)/f.length);m=v}}m&&r.push({gene:a,exons:s.join(""),exonsByNode:c,nodeIds:d,at:m,covered:p/(a.end-a.start)})}return r}var Xi=(e,t)=>!!e.referencePath&&J(t).name===e.referencePath;function xd(e,t){return(e.paths??[]).filter(n=>n.name===t).sort((n,o)=>(n.start??0)-(o.start??0))}function zi(e,t){let n=xd(e,t),o=n[0];if(!o)return;let r=new Map(e.nodes.map(f=>[f.id,f])),a=new Map;e.edges.forEach((f,S)=>{a.set(`${f.from}>${f.to}`,S)});let i=f=>r.get(f)?.length??0,s=f=>f.nodeIds.reduce((S,G)=>S+i(G),0),c=n.reduce((f,S)=>f+s(S),0),d=o.start===void 0?void 0:{contig:o.contig??tr(J(t).name),start:o.start,end:Math.max(...n.map(f=>(f.start??0)+s(f)))},m=d?d.end-d.start:c,l=new Set,p=new Set,u=new Map,w=0;for(let f of n)d&&(w=Math.max(w,(f.start??0)-d.start)),f.nodeIds.forEach((S,G)=>{if(l.add(S),G>0){let y=f.nodeIds[G-1],h=a.get(`${y}>${S}`)??a.get(`${S}>${y}`);h!==void 0&&p.add(h)}let g=i(S);u.has(S)||u.set(S,m>0?(w+g/2)/m:0),w+=g});let R=Xi(e,t),k=R?[]:(e.paths??[]).filter(f=>Xi(e,f.name));return{name:t,reference:R,range:d,nodeIds:l,edgeIndexes:p,progress:u,steps:n.reduce((f,S)=>f+S.nodeIds.length,0),bp:c,referenceBp:k.length>0?k.reduce((f,S)=>f+s(S),0):void 0}}function Yi(e,t,n,o){let r=new Map(e.nodes.map(i=>[i.id,i])),a=new Map;for(let[i,s]of t.progress){let c=r.get(i),d=o?.midpoints.get(i),m=n.field==="progress"?s:o&&d!==void 0&&!(c?.stable&&c.stable.rank>0)?(d-o.start)/o.span:void 0;a.set(i,Dr(n,m))}return a}function Rd(e,t){let n=new Set,o=0,r=e.referencePath;if(!r||t.reference)return{reversed:n,bp:o};let a=J(t.name).name,i=new Map(e.nodes.map(s=>[s.id,s]));for(let s of t.progress.keys()){let c=i.get(s),d=c?e.pathVisits?.get(c.name):void 0,m=d?.find(p=>p.path===a)?.strand,l=d?.find(p=>p.path===r)?.strand;m&&l&&m!==l&&(n.add(s),o+=c.length)}return{reversed:n,bp:o}}function dt(e,t,n){let o=new Set,r=t.filter(s=>!o.has(s.walk)&&o.add(s.walk)).flatMap(s=>{let c=zi(e,s.walk);return c?[{walk:c,layer:s}]:[]}).sort((s,c)=>Number(c.walk.reference)-Number(s.walk.reference));if(r.length===0)return;let a=0,i=r.map(({walk:s,layer:c})=>{let d=In(c,s.reference,s.reference?0:a++,r.length===1),{reversed:m,bp:l}=Rd(e,s);return{...s,encoding:d,colors:Yi(e,s,d,n),reversed:m,reversedBp:l}});return Ui(i,n)}var Md={field:"progress",scheme:"red"};function pt(e,t,n,o){return t.walks.map(r=>{let a=n.find(s=>s.walk===r.name)?.color,i=In({walk:r.name,color:{...Md,...a}},r.reference,0);return Ui([{...r,encoding:i,colors:Yi(e,r,i,o)}],o)})}function Ui(e,t){return{walks:e,referenceDomain:t?{start:t.start,end:t.start+t.span}:void 0,nodeIds:new Set(e.flatMap(n=>[...n.nodeIds])),edgeIndexes:new Set(e.flatMap(n=>[...n.edgeIndexes])),names:new Set(e.map(n=>n.name))}}var Ki="8.0.1";var lo='font-family="Helvetica, Arial, sans-serif" font-size="11"',Ld=48,Jt=18,vd=16,Td=22,Gd="rgb(160,160,160)",Ji="#1c1c22";function Le(e){return e.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}function mo(e,t,n,o,r,a,i,s=1){let c=o.length>1?Ld:Jt,d=o.length>1?`fill="url(#${e})"`:`fill="${o[0].color}"${s<1?` fill-opacity="${s}"`:""}`,m=o.length>1?`<linearGradient id="${e}">${o.map(p=>`<stop offset="${p.offset}" stop-color="${p.color}"/>`).join("")}</linearGradient>`:"";return{width:Math.max(c+5+(r.length+a.length)*Rt,(i?.length??0)*Rt),markup:`${m}<g transform="translate(${t} ${n})" ${lo}><rect y="5" width="${c}" height="8" rx="2" ${d}/><text x="${c+5}" y="13"><tspan font-weight="bold">${Le(r)}</tspan>${Le(a)}</text>${i?`<text y="28">${Le(i)}</text>`:""}</g>`}}function Pd(e,t){return{width:Jt+5+4*Rt,markup:`<g transform="translate(${e} ${t})" ${lo}><rect x="1" y="4" width="${Jt-2}" height="10" rx="4" fill="none" stroke="${$n}" stroke-width="2"/><text x="${Jt+5}" y="13">exon</text></g>`}}function qi(e,t,n,o,r,a){let i=ra(o,a);return mo(e,t,n,Cn(o.encoding),r,i.delta+i.outside+i.reversed,i.scale)}function Ad(e,t){return e.replaceAll(/([ML])(-?[\d.e-]+),(-?[\d.e-]+)/g,(n,o,r,a)=>`${o}${+(Number(r)*t.scaleX+t.translateX).toFixed(1)},${+(Number(a)*t.scaleY+t.translateY).toFixed(1)}`)}function Nd(e,t,n,o,r){return`<rect x="${e-n/2}" y="${t-He-xn+2}" width="${n}" height="${He+xn*2-2}" rx="3" fill="#fff" fill-opacity="0.85" stroke="${$n}"/><text x="${e}" y="${t}" font-family="Helvetica, Arial, sans-serif" font-size="${He}" fill="${Ji}" text-anchor="middle"><tspan font-style="italic" font-weight="600">${Le(o)}</tspan>${r?Le(r):""}</text>`}function go(e,t,n={}){let o=n.width??1200,r=n.height??800,a=n.region,i=n.colorDomain??a,s=n.walkRows,c=ot(t,{region:n.fitToDrawing?void 0:a,extent:s&&t.extent?Ye(s,n.walkRowPitch):void 0}),d=t.pixelRows??!1,m=new Map(e.nodes.map(P=>[P.id,P])),l=Pt(n.colorScheme??"auto",e),p=l==="reference-position"&&!t.tubeMap?Ae(e,i):void 0,u=p&&{start:p.start,end:p.start+p.span},w=We(e,t.tubeMap?[]:ke(e),n.showDeletionEdges),R=n.walks??[],k=R.some(P=>P.color?.field==="reference")?p??Ae(e,i):void 0,f=R.length>0&&!t.tubeMap?dt(e,R,k):void 0,S=It(n.facet),G=S.field&&f&&f.walks.length>1?pt(e,f,R,k):void 0,g=Lt(e.paths?.length?ze(e.paths):[]),y=P=>g.get(P)??P,h=n.referenceName??wn(e,a),M=f?.referenceDomain&&{...f.referenceDomain,name:h},v=n.contigThickness??6,L=n.nodeWidth??"depth",A=n.genes?.length&&!t.tubeMap&&!s?ct(e,n.genes,t.nodePositions):[],I=Bt(e,m,v,L),D=0;function $(P,N,E,W){let B=[],se=na(ta(A,I.halfWidthPx,P,ue=>Ad(ue,N)),{id:`exons${D++}`,width:E,height:W});se&&B.push(Se(se));let X=ue=>({x:ue.x*N.scaleX+N.translateX,y:ue.y*N.scaleY+N.translateY}),ce={width:E,height:W};for(let{item:ue,x:Ve,y:Ge,w:_c,text:Hc}of lr(sa(A,X,v,ia(t.nodePositions,N)),ce,mr(ce))){let Wc=X(ue.at).y+v/2;B.push(`<line x1="${Ve}" x2="${Ve}" y1="${Ge-He-2}" y2="${Wc}" stroke="${Ji}" stroke-width="0.8" stroke-opacity="0.6"/>`,Nd(Ve,Ge,_c,ue.gene.name,Hc.slice(ue.gene.name.length)))}s&&B.push(Se(Dn(s,{...N,width:E,height:W,...n.walkRowPitch},{ramp:u,rowGenes:n.rowGenes})));let kt=Ue(s,t,n.walkRowPitch);for(let{label:ue,y:Ve}of kt){let Ge=Ve*N.scaleY+N.translateY;Ge>=0&&Ge<=W&&B.push(`<text x="6" y="${Ge+4}" ${lo} stroke="#fff" stroke-width="3" paint-order="stroke">${Le(ue)}</text>`)}return B.join("")}function H(P,N,E){let W=Ce(c,N,E,d,G?{padLeft:re,padTop:re,padRight:re,padBottom:re}:{});if(!W)return"";let B=xe(W.scale,d),{canvas:se,markup:X}=ji(N,E),ce=new ea(se);ce.uploadGeometry(Ft({...st(t,w,{drawsRows:!!s}),graph:e,nodeById:m,colorScheme:l,contigThickness:v,connectorThickness:n.connectorThickness??2,drawPaths:!1,nodeWidth:L,linearLayout:n.linearLayout,highlight:P,axis:B,referenceRamp:p}));let kt={scaleX:B.scaleX,scaleY:B.scaleY,translateX:W.translateX,translateY:W.translateY};return ce.updateTransform({...kt,dpr:1}),ce.render([1,1,1,1]),X()+$(P,kt,N,E)}let U=[],ee;if(G){let P=Ct(G.map(E=>E.walks[0].name),S.field||"walk",S.domain),N=Nt({count:P.count,bounds:c,pixelRows:d,width:o,room:r,columns:P.columns??S.columns});G.forEach((E,W)=>{let B=P.cells[W],se=B%N.columns*(N.width+An),X=Math.floor(B/N.columns)*(N.height+At+An),ce=E.walks[0];U.push(qi(`key${W}`,se+6,X+2,ce,y(ce.name),M).markup,`<svg x="${se}" y="${X+At}" width="${N.width}" height="${N.height}">${H(E,N.width,N.height)}</svg>`)}),ee=N.total}else{let P=6,N=X=>{U.push(X.markup),P+=X.width+vd};if(f&&(f.walks.forEach((X,ce)=>{N(qi(`key${ce}`,P,2,X,y(X.name),M))}),N(mo("faded",P,2,[{offset:0,color:Gd}],"",`not on ${f.walks.length===1?y(f.walks[0].name):"these walks"}`,void 0,.3))),s){let X=Fn(Bn(s,{ramp:u,genes:n.rowGenes?.size?n.rowGeneGaps:void 0}),P,2,"rows-key");N({width:X.width,markup:Se(X.tree)})}else!f&&p&&N(mo("ramp",P,2,Cn({field:"reference",scheme:"rainbow"}),h?`${h} position`:"Reference position","",oa(h,p.start,p.start+p.span)));A.some(X=>X.exonsByNode.length>0)&&N(Pd(P,2));let E=U.length>0?At:0,W=o-2*F,B=d||!(c.w>0)?c.h:c.h*W/c.w,se=Math.max(160,Math.min(r-E,Math.ceil(B+2*F)));U.push(`<svg y="${E}" width="${o}" height="${se}">${H(f,o,se)}</svg>`),ee=E+se}let T=n.walkStrip;if(T&&!s&&!t.tubeMap){let P=Vt(T.rows,{width:o}),N=Fn(Bn(T.rows,{ramp:u,genes:Zr(P,T.rowGenes,T.rowGeneGaps)}),6,ee+P.height,"strip-key");U.push(`<line x1="0" x2="${o}" y1="${ee+.5}" y2="${ee+.5}" stroke="#ddd"/>`,`<svg y="${ee}" width="${o}" height="${P.height}">${Se(Dn(T.rows,P,{ramp:u,rowGenes:T.rowGenes,idPrefix:"strip"}))}${Se(Jr(T.rows,P,new Set(R.map(E=>E.walk))))}</svg>`,Se(N.tree)),ee+=P.height+Td}let K=JSON.stringify({generator:`@jbrowse/bandage-core@${Ki}`,...n.spec===void 0?{}:{spec:n.spec}});return`<svg xmlns="http://www.w3.org/2000/svg" width="${o}" height="${ee}" viewBox="0 0 ${o} ${ee}"><metadata>${Le(K)}</metadata><rect width="${o}" height="${ee}" fill="#fff"/>${U.join("")}</svg>
|
|
3
|
-
`}var Zi={...me,colorScheme:"auto",nodeWidth:"depth",contigThickness:6,connectorThickness:2};function ho(e){let t=Zi,n={};for(let[o,r]of Object.entries(e))r!==void 0&&r!==t[o]&&(n[o]=r);return n}var Id=24,Cd=e=>e.bp1>e.bp0;function Qi(e,t){let n=e.filter(Cd);if(n.length===0){let a=e[0];return a?[{tx:a.x0,sx:t(a.bp0)}]:[]}let o=n.map(a=>({c:a,s0:t(a.bp0),s1:t(a.bp1),trimLeft:0,trimRight:0}));for(let a=0;a+1<o.length;a++){let i=o[a],s=o[a+1],d=Math.min(s.c.x0-i.c.x1,Id)-(s.s0-i.s1);if(d>0){let m=(i.s1-i.s0)/2,l=(s.s1-s.s0)/2,p=Math.min(d/2,m),u=Math.min(d-p,l);p=Math.min(d-u,m),i.trimRight=p,s.trimLeft=u}}let r=[];for(let{c:a,s0:i,s1:s,trimLeft:c,trimRight:d}of o)r.push({tx:a.x0,sx:i+c},{tx:a.x1,sx:s-d});return r}function es(e,t){let n=e.length;if(n===0)return t;let o=e[0],r=e[n-1];if(t<=o.tx)return o.sx+(t-o.tx);if(t>=r.tx)return r.sx+(t-r.tx);let a=0,i=n-1;for(;i-a>1;){let m=a+i>>1;e[m].tx<=t?a=m:i=m}let s=e[a],c=e[i],d=c.tx-s.tx;return d>0?s.sx+(t-s.tx)/d*(c.sx-s.sx):s.sx}var Ed=.05,Zt=9;function Bd(e,t){let{minY:n,maxY:o}=e.layout.bounds,r=o-n;return e.columns&&r>0?Math.max(Ed,Math.min(1,t/r)):1}function fo(e,t){let{scaleX:n,translateX:o,translateY:r}=t,a=t.scaleY*Bd(e,t.usableHeight),i=c=>(c-e.yOffset)*a+r,{columns:s}=e;if(s){let c=Qi(s,d=>d*n+o);return{x:d=>es(c,d),y:i,yScale:a}}return{x:c=>c*n+o,y:i,yScale:a}}function bo(e,{x:t,y:n},o,r){let a=null;return e.layout.nodes.forEach(i=>{i.order>=0&&t(i.x-Zt)<=o&&o<=t(i.x+i.pixelWidth+Zt)&&n(i.y-Zt)<=r&&r<=n(i.y+i.contentHeight+Zt)&&(a=i.name)}),a}var an=b(q(),1),Ls=b(ie(),1),No=b(xt(),1);function ts(e){if(typeof e!="object"||e===null)return!1;let t=e;return typeof t.horizontalScroll=="function"&&typeof t.zoomTo=="function"&&"coarseDynamicBlocks"in t&&"dynamicBlocks"in t}function ns(e){return e.reduce((t,n)=>t&&t.end-t.start>=n.end-n.start?t:n,void 0)}function ut(e,t){let n=ns(e.dynamicBlocks.contentBlocks.filter(a=>a.refName===t.refName&&a.assemblyName===t.assemblyName)),{bpPerPx:o}=e;if(!n||!(o>0))return;let r=n.offsetPx-e.offsetPx;return n.reversed?{scale:-1/o,translateX:r+n.end/o}:{scale:1/o,translateX:r-n.start/o}}function Qt(e){let t=ns(e.dynamicBlocks.contentBlocks),n=t?.displayedRegionIndex===void 0?void 0:e.displayedRegions[t.displayedRegionIndex];return t&&e.bpPerPx>0?{refName:t.refName,assemblyName:t.assemblyName,start:t.start,end:t.end,bpPerPx:e.bpPerPx,span:e.bpPerPx*e.width,regionStart:n?.start??t.start,regionEnd:n?.end??t.end}:void 0}function wo(e,t,n=!0){let o=e.end-e.start,r=n?Math.max(0,Math.min(e.span,(t-o)/2)):0,a=Math.max(e.regionStart,Math.floor(e.start-r)),i=Math.min(e.regionEnd,Math.ceil(e.end+r)),s=i-a-t;return s>0&&(a+=Math.floor(s/2),i-=Math.ceil(s/2)),{refName:e.refName,assemblyName:e.assemblyName,start:a,end:i}}function os(e,t,n=!0){if(e?.refName!==t.refName||e.assemblyName!==t.assemblyName)return!1;if(n)return e.start<=t.start+1&&t.end<=e.end+1;let o=wo(t,1/0,!1);return Math.abs(e.start-o.start)<1&&Math.abs(e.end-o.end)<1}var rn=b(q(),1),Te=b(ie(),1);var Fd=.9,yo=2,Dd=1e3;function ko(e,t,n,o=a=>a,r=[]){let a=new Map(e.nodes.map(s=>[s.name,s])),i=[];for(let s of t){let c=[],d=1/0,m=-1/0,l=1/0,p=[],u=[];for(let S of $t(s)){let G=a.get(S),g=G&&n[G.id];if(!(!G||!g?.length)){if(V(G)&&(G.stable.start<s.start||G.stable.start>=s.end)){u.push(g[Math.floor(g.length/2)]);continue}p.push(G.id),c.push(Mt(g.length===1?[g[0],g[0]]:g));for(let y of g)d=Math.min(d,y.x),m=Math.max(m,y.x),l=Math.min(l,y.y)}}if(p.length===0)continue;let w={x:(d+m)/2,y:l},R=u.length?{x:u.reduce((S,G)=>S+G.x,0)/u.length,y:u.reduce((S,G)=>S+G.y,0)/u.length}:w,k=new Map;for(let S of s.routes??[])for(let G of new Set(S.steps))k.set(G,(k.get(G)??0)+1);let f=[];for(let S of s.routes??[]){if(s.longestAlleleLength<Dd)break;if(S.steps.length===0)continue;let G=Math.min(...S.steps.map(h=>k.get(h))),g,y=-1;for(let h of S.steps)if(k.get(h)===G)for(let M of n[h]??[]){let v=Math.hypot(M.x-R.x,M.y-R.y);v>y&&(y=v,g=M)}g&&f.push({route:S,at:g,text:$d(S,o)})}i.push({bubble:s,...Dt(s,r),path:c.join(""),labelAt:w,members:p.length,nodeIds:p,whole:p.length>=Fd*e.nodes.length,routes:f})}return i}function $d(e,t){let n=[...new Set(e.walks.map(t))].sort(),o=n.slice(0,yo).join(", "),r=n.length>yo?` +${n.length-yo}`:"";return`${o}${r} \xB7 ${_r(e.bp)}`}function So(e){if(!e.nodes.some(V))return[];let t=new Map(e.nodes.map(p=>[p.id,p])),n=yr(e),o=new Map(n.map((p,u)=>[p,u])),r=new Int32Array(n.length+1),a=new Map,i=new Set;for(let p of e.edges){let u=o.get(p.from),w=o.get(p.to);if(u===void 0||w===void 0||u===w)continue;i.add(`${p.from}>${p.to}`).add(`${p.to}>${p.from}`);let[R,k]=u<w?[u,w]:[w,u];r[R+1]++,r[k]--;let[f,S]=u<w?[p.from,p.to]:[p.to,p.from];(a.get(f)??a.set(f,new Set).get(f)).add(S)}for(let p=1;p<r.length;p++)r[p]+=r[p-1];let s=e.nodes.filter(V).sort((p,u)=>p.stable.start-u.stable.start),c=new Set([s[0].id,s.at(-1).id]),d=s.map(p=>[p,o.get(p.id)]).filter(([p,u])=>c.has(p.id)||r[u]===0).sort(([p,u],[w,R])=>u-R||p.stable.start-w.stable.start),m=e.paths?.map(p=>{let u=new Map;return p.nodeIds.forEach((w,R)=>{u.has(w)||u.set(w,R)}),u}),l=[];for(let p=0;p+1<d.length;p++){let[u,w]=d[p],[R,k]=d[p+1],f=n.slice(w+1,k);if(f.length===0)continue;let S=new Map([[u.id,{min:0,max:0,n:1}]]);for(let $ of[u.id,...f]){let H=S.get($);if(H)for(let U of a.get($)??[]){if(o.get(U)>k)continue;let T=U===R.id?0:t.get(U).length,K=S.get(U);S.set(U,{min:Math.min(K?.min??1/0,H.min+T),max:Math.max(K?.max??-1/0,H.max+T),n:Math.min(Or,H.n+(K?.n??0))})}}let G=m&&Vd(e,t,m,u.id,R.id),g=G?.n?G:void 0,y=g??S.get(R.id)??{min:0,max:0,n:0},h=G!==void 0&&G.left>0,M=u.stable.start+u.length,v=R.stable.start,L=[u.id,...f.filter($=>V(t.get($))),R.id],A=L.some(($,H)=>H>0&&!i.has(`${L[H-1]}>${$}`)),I=A||h,D=A&&!g;l.push({refName:u.stable.refName,start:M,end:v,segmentCount:f.length+2,pathCount:y.n,inversion:!1,shortestAlleleLength:D?v-M:y.min,longestAlleleLength:D?v-M:y.max,segments:[u,...f.map($=>t.get($)),R].map($=>$.name).join(","),shortestAllele:void 0,longestAllele:void 0,partial:I,routes:g?.routes})}return l}function Vd(e,t,n,o,r){let a=new Map,i=1/0,s=-1/0,c=0;return e.paths.forEach((d,m)=>{let l=n[m].get(o),p=n[m].get(r);if(l===void 0||p===void 0){(l!==void 0||p!==void 0)&&c++;return}let u=d.nodeIds.slice(Math.min(l,p)+1,Math.max(l,p));p<l&&u.reverse();let w=0;for(let f of u)w+=t.get(f)?.length??0;let R=u.join(","),k=a.get(R)??{steps:u,bp:w,walks:[]};k.walks.push(d.name),a.set(R,k),i=Math.min(i,w),s=Math.max(s,w)}),a.size||c?{min:i,max:s,n:a.size,left:c,routes:[...a.values()]}:void 0}function xo(e,t,n){if(t==="uniform"||t==="grey")return;let o={...Br(e),referenceRamp:n};return new Map(e.nodes.map((r,a)=>[r.id,Cr(Fr(r,a,t,o))]))}var gt=b(q(),1),gs=b(as(),1),ge=b(ie(),1);var en=b(q(),1),is=b(ie(),1),Od=/^[^#]+#\d+$/;function _d(e,t){let n=e.assemblyNameToPanSN??{},o=new Set(Object.values(n)),r={};for(let{name:a,aliases:i}of t){let s=i.find(c=>Od.test(c));s!==void 0&&!o.has(s)&&(r[a]=s)}return Object.keys(r).length===0?e:{...e,assemblyNameToPanSN:{...r,...n}}}function we(e,t){let n=(0,en.readConfObject)(t,"adapter");return n.type==="GbzBaseSyntenyAdapter"?_d(n,(0,is.getSession)(e).assemblyManager.assemblyList.map(o=>({name:(0,en.readConfObject)(o,"name"),aliases:(0,en.readConfObject)(o,"aliases")??[]}))):n}function Ro(e){let t=[];for(let n of[...e].sort((o,r)=>o.start-r.start)){let o=t.at(-1);o&&n.start<=o.end?o.end=Math.max(o.end,n.end):t.push({...n})}return t}function Mo(e){let t=[],n=new Map;for(let o of[...e].sort((r,a)=>r.start-a.start)){let r=`${o.refName} ${o.strand} ${o.name}`,a=n.get(r);if(a&&o.start<a.end)a.end=Math.max(a.end,o.end),a.exons=Ro([...a.exons,...o.exons]);else{let i={...o,exons:Ro(o.exons)};t.push(i),n.set(r,i)}}return t}var Lo=b(q(),1),mt=new Set(["Gff3TabixAdapter","Gff3Adapter","BedTabixAdapter","BedAdapter","GtfTabixAdapter","GtfAdapter","BigBedAdapter","NCListAdapter"]),Hd=/gene|refseq|gencode|ensembl|annotation/i,Wd=new Set(["BedTabixAdapter","BedAdapter"]);function tn(e,t){if(t)return e.find(o=>o.trackId===t);let n=e.filter(o=>mt.has(o.adapterType));return n.find(o=>Hd.test(`${o.trackId} ${o.name??""}`))??n.find(o=>!Wd.has(o.adapterType))}function ss(e,t){let n=e.tracks?.find(o=>(0,Lo.readConfObject)(o.configuration,"trackId")===t)?.displays[0];return n?(0,Lo.readConfObject)(n.configuration,"filter")??[]:[]}var jd=new Set(["chromosome","region","contig","supercontig","scaffold"]);function ae(e,t){return typeof e.get=="function"?e.get(t):e[t]}var Xd=new Set(["exon","CDS","five_prime_UTR","three_prime_UTR","UTR"]);function cs(e,t){let n=ae(e,"type");typeof n=="string"&&Xd.has(n)&&t.push({start:ae(e,"start"),end:ae(e,"end")});let o=ae(e,"subfeatures");for(let r of o??[])cs(r,t)}function zd(e){let t=[...e].sort((o,r)=>o.start-r.start),n=[];for(let o of t){let r=n.at(-1);r&&o.start<=r.end?r.end=Math.max(r.end,o.end):n.push({...o})}return n}function nn(e){let t=[];for(let n of e){let o=ae(n,"gene_name")??ae(n,"name")??ae(n,"gene")??ae(n,"gene_id"),r=ae(n,"start"),a=ae(n,"end");if(!o||!(a>r)||jd.has(ae(n,"type")))continue;let i=[];cs(n,i),t.push({name:o,refName:ae(n,"refName"),start:r,end:a,strand:ae(n,"strand")??0,exons:i.length?zd(i):[{start:r,end:a}]})}return Mo(t)}var Go=new Set(["BedAdapter","BedTabixAdapter","BigBedAdapter","VcfAdapter","VcfTabixAdapter"]),Yd=/repeat|tandem|\bstr\b|vntr|trf|trgt|vamos|expansion|microsat/i;function ds(e,t){return t?e.find(o=>o.trackId===t):e.filter(o=>Go.has(o.adapterType)).find(o=>Yd.test(`${o.trackId} ${o.name??""}`))}function lt(e,t){return typeof e.get=="function"?e.get(t):e[t]}var ps=/^\w+=[^;]*(;\w+=[^;]*)*$/;function Ud(e){let t=lt(e,"name");if(!(typeof t!="string"||!ps.test(t)))return Object.fromEntries(t.split(";").map(n=>{let o=n.indexOf("=");return[n.slice(0,o),n.slice(o+1)]}))}function le(e,t){let n=lt(e,t);return n!==void 0?n:lt(e,"INFO")?.[t]??Ud(e)?.[t]}var us=["RUS","MOTIFS","RU","motifs","motif","sequence","consensus"],Kd=["RUL","period","PERIOD","consensusSize","unit","unitLength"],qd=["TRID","REPID","VARID","ID","name","id"];function on(e,t){for(let n of t){let o=le(e,n),r=String((Array.isArray(o)?o[0]:o)??"").split(",")[0].trim();if(r!==""&&r!==".")return r}}var ms=/^[ACGTURYSWKMBDHVN]+$/i;function Jd(e){let t=Number(on(e,Kd));if(Number.isFinite(t)&&t>0)return Math.round(t);let n=on(e,us);return n&&ms.test(n)?n.length:void 0}function ve(e){return(Array.isArray(e)?e:String(e??"").split(",")).map(n=>{let o=n===""||n===null||n===void 0?NaN:Number(n);return Number.isFinite(o)?o:void 0})}function To(e){return(Array.isArray(e)?e:String(e??"").split(",")).map(n=>{let o=String(n??"").trim();return o===""||o==="."?void 0:o})}var vo="<CNV:TR>";function Zd(e){let t=To(lt(e,"ALT"));if(!t.includes(vo))return;let n=ve(le(e,"RN")),o=To(le(e,"RUS")),r=ve(le(e,"RUL")),a=ve(le(e,"RUC")),i=ve(le(e,"RB")),s=0;return t.map((c,d)=>{let m=n[d]??(c===vo?1:0),l=0,p=0;for(let u=0;u<m;u++,s++){let w=o[s],R=r[s]??(w&&ms.test(w)?w.length:void 0),k=a[s],f=i[s]??(R&&k!==void 0?Math.round(R*k):void 0);f!==void 0&&(l+=f,p++)}return c===vo&&m>0&&p===m?l:void 0})}function Qd(e,t,n){let o=e?.includes("|");return(e??"").split(/[/|]/).flatMap((r,a)=>{let i=Number(r),s=i>0?t[i-1]:n;return!Number.isInteger(i)||s===void 0?[]:[{bp:s,...o?{haplotype:a+1}:{}}]})}function ep(e,t,n){let o=lt(e,"samples"),r={};for(let[a,i]of Object.entries(o??{})){let s=ve(i.SD),c=ve(i.AL).flatMap((m,l)=>m!==void 0&&m>0?[s[l]===void 0?{bp:m}:{bp:m,spanningReads:s[l]}]:[]),d=c.length>0||!t?c:Qd(To(i.GT)[0],t,n);d.length>0&&(r[a]=d)}return Object.keys(r).length>0?r:void 0}function tp(e,t){let n=le(e,"start"),o=le(e,"end"),r=ve(le(e,"SVLEN"))[0];return t&&r!==void 0?{start:n+1,end:n+1+r}:{start:n,end:o}}function ls(e){let t=[];for(let n of e){let o=Zd(n),{start:r,end:a}=tp(n,o!==void 0),i=Jd(n);if(!(a>r)||i===void 0)continue;let s=le(n,"refName"),c=on(n,us),d=on(n,qd);t.push({key:`${s}:${r}-${a}`,name:(d&&!ps.test(d)?d:void 0)??(c&&c.length<=12?`(${c})n`:`${s}:${(r+1).toLocaleString()}-${a.toLocaleString()}`),refName:s,start:r,end:a,unit:i,motif:c,calls:ep(n,o,a-r)})}return t.sort((n,o)=>n.start-o.start)}var hs=$i.views(e=>({get defaultLayoutMode(){return"force"},get defaultColorScheme(){return"auto"},get defaultHighlightOnHover(){return!0},get hasPendingSource(){return!1},get canRetryLoad(){return!1},get sourceTrack(){try{return(0,ge.getContainingTrack)(e).configuration}catch{return}}})).views(e=>({get chosenLayoutMode(){return e.layoutMode??e.defaultLayoutMode},get chosenColorScheme(){return e.colorScheme??e.defaultColorScheme},get chosenHighlightOnHover(){return e.highlightOnHover??e.defaultHighlightOnHover},get litNode(){return this.chosenHighlightOnHover?e.hoveredNode:null}})).views(e=>({get paneWidth(){return(0,ge.getContainingView)(e).width},get drawnGraph(){return e.layoutResult?.tubeMap?.coarse?.graph??e.graph}})).views(e=>({get nodeById(){if(e.drawnGraph){let t=new Map;for(let n of e.drawnGraph.nodes)t.set(n.id,n);return t}},get nodeLengths(){let t=new Map;for(let n of e.drawnGraph?.nodes??[])t.set(n.id,n.length);return t},get nodeCount(){return e.graph?.nodes.length??0},get edgeCount(){return e.graph?.edges.length??0},get pathCount(){return e.graph?.paths?.length??0},get hasGraph(){return e.graph!==void 0},get geometryPainted(){return so(e)},get showLoading(){return e.error===void 0&&(e.isLoading||e.hasPendingSource||e.graph!==void 0&&!so(e))},get canCancelLoad(){return e.isLoading&&!e.layoutResult},get usesLayoutEngine(){return e.graph?Sr(e.chosenLayoutMode,e.graph):!1},get canAnchorLayout(){return e.graph?.nodes.some(t=>t.stable?.rank===0)??!1},get anchorPaths(){return e.graph?.anchorPaths??[]},get walkChoices(){let t=e.graph?.paths;return t?.length?ze(t):[]},get effectiveDrawPaths(){return e.drawPaths&&Gn(e.graph?.paths?.length??0)},get activeReferencePath(){return e.graph?.referencePath},get rampDomain(){return e.colorDomain??e.graphRegion},get walkRamp(){let{graph:t}=e;return t&&e.walkLayers.some(n=>n.color?.field==="reference")?Ae(t,this.rampDomain):void 0},get modeDrawsNodes(){return O(e.chosenLayoutMode).drawsNodes},get liftedWalkLayers(){return e.walkLayers.length>0||!this.modeDrawsNodes?e.walkLayers:e.hoveredRowWalks.map(t=>({walk:t}))},get walkLift(){let{graph:t}=e,n=this.liftedWalkLayers;return t&&n.length>0&&!e.layoutResult?.tubeMap?dt(t,n,this.walkRamp):void 0},get facetPanels(){let{graph:t}=e,n=this.walkLift;return e.facet.field!==""&&this.modeDrawsNodes&&t&&n&&e.walkLayers.length>1&&n.walks.length>1?pt(t,n,e.walkLayers,this.walkRamp):void 0},get drawnWalks(){return this.facetPanels?.map(t=>t.walks[0])??this.walkLift?.walks??[]},get liftsWalks(){return!Ee.has(e.chosenLayoutMode)},get walkReference(){let t=this.walkLift?.referenceDomain;return t&&{...t,name:e.graphRegion?.refName}},get walkLabels(){return Lt(this.walkChoices)},walkLabel(t){return this.walkLabels.get(t)??t},get liftPaintsOffReference(){for(let t of this.walkLift?.walks??[])if(t.encoding.field!=="walk"){for(let n of t.colors.values())if(n===$r)return!0}return!1},get liftedWalksLabel(){let t=this.walkLift?.walks??[];return t.length===1?this.walkLabel(t[0].name):"these walks"},get effectiveColorScheme(){return e.layoutResult?.tubeMap&&(this.tubeMapReads||e.chosenColorScheme==="auto")?"uniform":Pt(e.chosenColorScheme,e.graph)},get tubeMapReads(){return(e.layoutResult?.tubeMap?.layout.reads.length??0)>0},get colorSchemeLock(){return this.walkLift?{value:"By walk",why:"Each lifted walk colours its own lane: set it under the menu, Walk, Colour"}:this.tubeMapReads?{value:"By strand",why:"Reads take the reds and blues, so the tube map leaves its nodes clear"}:void 0},get nodePositions(){return e.layoutResult?.nodePositions},get labelsNodeSizes(){return!e.layoutResult?.tubeMap&&!this.walkLift},get rowLabels(){return e.layoutResult?.rowLabels??[]},get alleleDeletions(){return e.layoutResult?.alleleDeletions??[]},get deletionRoutes(){return e.layoutResult?.deletionRoutes},get stranded(){return e.layoutResult?.stranded},get pixelRows(){return e.layoutResult?.pixelRows??!1},get zoomPercent(){return`${(e.scale*100).toFixed(1)}%`},get isDefaultViewport(){return e.scale===1&&e.translateX===0&&e.translateY===0}})).views(e=>({get poppedFrom(){return e.popStack.at(-1)},get derivedBubbles(){return e.graph?So(e.graph):[]}})).views(e=>({get bubbles(){return e.indexBubbles?.length?e.indexBubbles:e.derivedBubbles}})).views(e=>({get cutHaplotypes(){},get sourceGfaLocation(){},get sourceAdapter(){let t=e.sourceTrack;return t?we(e,t):void 0},get sourceTrackId(){let t=e.sourceTrack;return t?(0,gt.readConfObject)(t,"trackId"):void 0},get assemblyTrackChoices(){let t=e.graphRegion;return t?(0,ge.getSession)(e).tracks.filter(n=>(0,gt.readConfObject)(n,"assemblyNames").includes(t.assemblyName)).map(n=>({trackId:n.trackId,name:(0,gt.readConfObject)(n,"name"),adapterType:(0,gt.readConfObject)(n,"adapter").type})):[]}})).views(e=>({get geneTrackChoices(){return e.assemblyTrackChoices.filter(t=>mt.has(t.adapterType))},get repeatTrackChoices(){return e.assemblyTrackChoices.filter(t=>Go.has(t.adapterType))},get repeatChoices(){return e.repeatArrays??[]}})).views(e=>({get repeatTrack(){return ds(e.repeatTrackChoices,e.repeatTrackId)},get geneTrack(){return tn(e.geneTrackChoices,e.geneTrackId)},get selectedRepeat(){return e.repeatChoices.find(t=>t.key===e.repeatKey)},get backbone(){return e.graph?bn(e.graph):void 0},get cutWalkRows(){return e.graph?vt(e.graph,e.graphRegion):void 0},assemblySpellings(t){let{assemblyManager:n}=(0,ge.getSession)(e),o=n.has(t)?n.get(t):void 0,r=e.sourceAdapter?.assemblyNameToPanSN??{},a=[t,...o?[o.name,...o.aliases]:[]];return{name:t,aliases:[...a,...a.flatMap(i=>r[i]??[])]}},get drawsLoadedReference(){let t=e.graph;return t?.anchoredBy==="tags"||t?.referencePath!==void 0&&t.referencePath===e.loadedReferencePath}})).views(e=>({get geneAssembly(){let t=e.graphRegion;return t?e.assemblySpellings(t.assemblyName):void 0},get geneLaneFilter(){let t;try{t=(0,ge.getContainingView)(e)}catch{return}let n=ss(t,e.geneTrack?.trackId);return n.length?new gs.default({filters:n,jexl:(0,ge.getEnv)(e).pluginManager.jexl}):void 0},get geneFeatures(){let t=e.geneTrackFeatures,n=this.geneLaneFilter;return t?nn(n?t.filter(o=>n.passes(o)):t):void 0}})).views(e=>({get backboneGenes(){let{backbone:t,geneAssembly:n,geneFeatures:o}=e,r=e.drawsLoadedReference||n!==void 0&&yn(t,[n])!==void 0;return t&&o&&r?Sn(o,t):void 0}})).views(e=>({get nodeNeighbors(){return e.drawnGraph?_e(e.drawnGraph):void 0},get nodeInk(){return Bt(e.drawnGraph,e.nodeById,e.contigThickness,e.nodeWidth)},get allDeletions(){return e.graph&&this.drawsNodes?ke(e.graph):[]},get cohortWalkRows(){if(e.chosenLayoutMode!=="walkrows"||!e.graph)return;let t=e.selectedRepeat,n=t?vt(e.graph,t,t.unit):e.cutWalkRows;if(!n)return;let[o,...r]=La([n.reference,...n.rows],t?.calls);return{...n,reference:o,rows:r}},get walkRowSampleChoices(){let t=this.cohortWalkRows?.rows??[];return{samples:[...new Set(t.map(n=>n.sample))].sort(),disagreeing:[...new Set(t.filter(n=>n.call?.agrees===!1).map(n=>n.sample))]}},get walkRowSamplesTsv(){let t=e.sourceAdapter?.samplesTsvLocation;return t&&(!("uri"in t)||t.uri)?t:void 0},get walkRowGroupFields(){return Pr(e.walkRowSampleTable)},get walkRowGroups(){let t=this.cohortWalkRows,n=e.walkRowSampleTable,o=e.walkRowGroupBy;return t&&n&&o&&this.walkRowGroupFields.includes(o.field)?Nr(Pe(t.rows,e.walkRowSamples),n,o):void 0},get walkRowBars(){let t=this.cohortWalkRows;return t?{...t,rows:this.walkRowGroups?.rows??Pe(t.rows,e.walkRowSamples)}:void 0},get drawsNodes(){return!e.layoutResult?.tubeMap&&!this.walkRowBars},get genePins(){he(e.positionsVersion);let t=e.layoutResult?.nodePositions;return e.showGenes&&this.drawsNodes&&e.graph&&e.backboneGenes&&t?ct(e.graph,e.backboneGenes,t):[]},get bubbleHalos(){he(e.positionsVersion);let t=e.layoutResult?.nodePositions;return!e.showBubbles||!this.drawsNodes||!e.graph||!t?[]:ko(e.graph,e.bubbles,t,n=>e.walkLabel(n),e.repeatArrays)},get referenceRamp(){return e.effectiveColorScheme==="reference-position"&&e.drawnGraph?Ae(e.drawnGraph,e.rampDomain):void 0},get assemblyNames(){let t=e.graphRegion;return t?[t.assemblyName]:[]},get scaleX(){return xe(e.scale,e.pixelRows).scaleX},get scaleY(){return xe(e.scale,e.pixelRows).scaleY},get axisScale(){return xe(e.scale,e.pixelRows)}})).views(e=>({get deletionDrawing(){return e.graph?We(e.graph,e.allDeletions,e.showDeletionEdges):void 0},get deletions(){return this.deletionDrawing?.shown??[]},get deletionEdgeIndexes(){return this.deletionDrawing?.bypassed},get hiddenEdgeIndexes(){return this.deletionDrawing?.hidden},get referenceRampDomain(){let t=e.referenceRamp;return t?{start:t.start,end:t.start+t.span}:void 0},get referenceRampOffKeys(){let t=e.referenceRamp,n=e.layoutResult,o=n?.tubeMap?n.nodePositions:void 0,r=!1,a=!1;if(t&&e.drawnGraph)for(let i of e.drawnGraph.nodes)o&&!o[i.id]||(t.midpoints.has(i.id)?i.stable&&i.stable.rank>0&&(r=!0):a=!0);return{offReference:r,unplaced:a}},get tubeMapNodeColors(){let t=e.drawnGraph;return e.layoutResult?.tubeMap&&t?xo(t,e.effectiveColorScheme,e.referenceRamp):void 0},get tubeMapTubeColors(){let t=e.layoutResult?.tubeMap?.pathColors,n=t&&this.tubeMapNodeColors?t.map((a,i)=>br(i,t.length)):t,o=new Set(e.hoveredRowWalks),r=e.drawnGraph?.paths;return n&&r&&o.size>0?n.map((a,i)=>o.has(r[i]?.name??"")?a:Er):n},nodeSpan(t){let{nodeById:n,nodeNeighbors:o}=e;return n&&o?ye({nodeId:t,nodeById:n,neighbors:o}):void 0}})).views(e=>({get pathLegend(){let t=e.graph?.paths,n=e.layoutResult?.tubeMap;return(e.drawPaths||n)&&t&&Gn(t.length)?ze(t,e.tubeMapTubeColors):[]},get hoveredSpan(){let t=e.hoveredNode,n=e.hoveredBubble;return t!==null?e.nodeSpan(t):n?{start:n.start,end:n.end}:void 0}})).views(e=>({get hoverHighlight(){let t=e.graphRegion,n=e.hoveredSpan;return t&&n&&e.chosenHighlightOnHover?{refName:t.refName,assemblyName:t.assemblyName,...n}:void 0}}));var Po=b(q(),1);function Q(e){return typeof e=="object"&&e!==null}function np(e){return Q(e)&&e.type==="LinearGenomeView"&&typeof e.id=="string"&&typeof e.navToLocString=="function"&&Array.isArray(e.assemblyNames)}function ht(e){return e.flatMap(t=>Q(t)&&Array.isArray(t.views)?[t,...t.views]:[t])}function ft({views:e,connectedViewId:t,assemblyName:n}){let o=ht(e).filter(a=>np(a)).filter(a=>a.assemblyNames.includes(n));return o.find(a=>a.id===t)??(o.length===1?o[0]:void 0)}function bt(e,t){let n=e.assemblyManager;return n?.has(t)?n.get(t)?.name??t:t}function bs(e,t,n){n.catch(o=>{console.error(`[GraphGenomeView] ${t}`,o),e.notifyError?.(`${t}: ${o}`,o)})}var op=1e3;function Ao(e,t=op){let n=Math.max(0,Math.ceil((t-(e.end-e.start))/2));return{...e,start:Math.max(0,e.start-n),end:e.end+n}}function ws(e,t){return t?e.map(n=>n.rank===0?{...n,sample:t.assemblyName,haplotype:void 0,refName:t.refName,start:t.start,end:t.end}:n):e}function ys({session:e,location:t,assembly:n,connectedViewId:o,tracks:r=[]}){let a=ft({views:e.views,connectedViewId:o,assemblyName:n}),i;return a?(bs(e,`Could not show ${n} ${Je(t)}`,Promise.resolve(a.navToLocString(_t(t),n))),i=a.id):i=e.addView("LinearGenomeView",{displayName:`${n} \u2014 ${Je(t)}`,init:{assembly:n,loc:_t(t),tracks:r}}).id,i}function ks({session:e,location:t,assembly:n,connectedViewId:o}){let r=ft({views:e.views,connectedViewId:o,assemblyName:n});return r&&e.addHighlight?.({refName:t.refName,start:t.start,end:t.end,assemblyName:n}),r!==void 0}function fs(e,t){if(t===void 0)return[];let n=e.tracks.find(r=>(0,Po.readConfObject)(r,"trackId")===t),o=n?(0,Po.readConfObject)(n,"assemblyNames"):[];return Array.isArray(o)?o.filter(r=>typeof r=="string").map(r=>bt(e,r)):[]}function Ss({session:e,contributors:t,trackId:n,graphTrackId:o}){let r=fs(e,o),a=fs(e,n),i=t.filter(d=>a.includes(d.sample)),s=i.length>=2?i:t,c={init:{views:s.map(d=>({assembly:d.sample,loc:_t(d),...o!==void 0&&r.includes(d.sample)?{tracks:[o]}:{}})),tracks:n?s.slice(1).map(()=>[n]):[],collapseEmptyRows:!0}};e.launchView?bs(e,"Could not open the synteny view",e.launchView("LinearSyntenyView",c)):e.addView("LinearSyntenyView",c)}var xs=hs.views(e=>({get contributingAssemblies(){let t=e.graph,n=t?or(t):[];return t?va(t,{maxGap:n.length>0?ir(n):1/0}):[]}})).views(e=>({get assemblyResolver(){let{assemblyManager:t}=(0,Te.getSession)(e),n=e.sourceAdapter?.assemblyNameToPanSN,o=new Map(Object.entries(n??{}).map(([a,i])=>[i,a])),r=a=>a!==void 0&&t.has(a)?t.get(a)?.name??a:void 0;return a=>r(o.get(a))??r(a)},get geneTracksByAssembly(){let t=new Map;for(let n of(0,Te.getSession)(e).tracks){let o=(0,rn.readConfObject)(n,"adapter").type;if(!mt.has(o))continue;let r={trackId:n.trackId,name:(0,rn.readConfObject)(n,"name"),adapterType:o};for(let a of(0,rn.readConfObject)(n,"assemblyNames")){let i=bt((0,Te.getSession)(e),a);t.set(i,[...t.get(i)??[],r])}}return new Map([...t].flatMap(([n,o])=>{let r=tn(o,"");return r?[[n,r]]:[]}))}})).views(e=>({get launchableAssemblies(){return Ta(ws(e.contributingAssemblies,e.graphRegion),e.assemblyResolver)},get canHighlightInLinearView(){let t=e.graphRegion;return t!==void 0&&ft({views:[...(0,Te.getSession)(e).views],connectedViewId:e.connectedViewId,assemblyName:t.assemblyName})!==void 0},nodeLaunchTargets(t){let n=e.nodeById?.get(t),o=n?Ke(n):void 0,r=o?qe(e.assemblyResolver,o):void 0,a=e.graphRegion,i=e.nodeById,s=e.nodeNeighbors,c=a&&i&&s?ye({nodeId:t,nodeById:i,neighbors:s}):void 0,d=a&&c?{sample:a.assemblyName,haplotype:void 0,refName:a.refName,...c}:void 0;return{own:o&&r?{location:Ao(o),assembly:r}:void 0,reference:a&&d?{location:Ao(d),assembly:a.assemblyName}:void 0,highlight:a&&d?{location:d,assembly:a.assemblyName}:void 0}}})).views(e=>({get host(){let t;try{t=(0,Te.getContainingView)(e)}catch{return}return ts(t)?t:void 0}}));var Rs=xs.views(e=>({get walkStripShown(){return Yr({walkStrip:e.walkStrip,mode:{drawsNodes:e.modeDrawsNodes},drawsPicture:!!e.layoutResult?.tubeMap||!!e.walkRowBars,popped:e.popStack.length>0,walks:e.graph?.paths?.length??0,host:!!e.host})},get walkStripRows(){let t=this.walkStripShown?e.cutWalkRows:void 0;return t?{...t,rows:Pe(t.rows,e.walkRowSamples)}:void 0},get walkStripFrame(){let t=this.walkStripRows;if(t)return Vt(t,{width:e.paneWidth})},get cutsWholeWalks(){return Ur(O(e.chosenLayoutMode),{walkStrip:e.walkStrip,host:!!e.host})},get walkStripMarks(){let t=this.walkStripRows,n=e.hoveredNode??e.selectedNode,o=n===null?void 0:e.nodeById?.get(n);return t&&o&&e.graph?Kr(e.graph,[t.reference,...t.rows],o):[]},get walkStripLocator(){let t=e.stripHover?e.hoveredNode:null;return t===null?void 0:Ot(e.nodePositions?.[t],n=>({x:n.x*e.scaleX+e.translateX,y:n.y*e.scaleY+e.translateY}))}})).views(e=>({get walkGeneReads(){let t=e.walkRowBars??e.walkStripRows;if(!t||!e.showGenes)return;let n=[],o=0,r=0;for(let a of t.rows){if(!a.axis){r++;continue}let i=qe(e.assemblyResolver,{sample:a.sample,haplotype:a.haplotype===void 0?void 0:`${a.sample}#${a.haplotype}`}),s=i?e.geneTracksByAssembly.get(i):void 0;if(!i||!s){o++;continue}n.push({row:a.name,trackId:s.trackId,region:{assemblyName:i,refName:a.axis.contig,...En(a.axis,a.bp)}})}return{reads:n.slice(0,ao),gaps:{untracked:o,unplaced:r,unread:Math.max(0,n.length-ao)}}},get walkRowGeneGaps(){return this.walkGeneReads?.gaps},walkRowLaunchTarget(t,n=e.walkRowBars){let o=n?[n.reference,...n.rows][t]:void 0;if(!o?.axis)return;let r=o.haplotype===void 0?void 0:`${o.sample}#${o.haplotype}`,a=t===0?e.graphRegion?.assemblyName:qe(e.assemblyResolver,{sample:o.sample,haplotype:r});return{label:o.label,assembly:a,location:{sample:o.sample,haplotype:r,refName:o.axis.contig,...En(o.axis,o.bp)}}},get walkRowGenes(){let t=e.walkRowBars??e.walkStripRows;if(!t||!e.showGenes)return;let n=new Map(e.walkGeneFeatures??[]);return e.geneFeatures&&n.set(t.reference.name,e.geneFeatures),n.size?jr([t.reference,...t.rows],n):void 0}}));var Ms=Rs.views(e=>({get xIsReferenceBp(){return e.layoutResult?.referenceAxis===!0&&O(e.chosenLayoutMode).cutMargins}})).views(e=>({get hostPlacesX(){let{host:t,graphRegion:n}=e;return t!==void 0&&t.initialized&&n!==void 0&&e.xIsReferenceBp&&e.popStack.length===0&&!t.dynamicBlocks.contentBlocks.some(o=>o.refName===n.refName&&o.reversed)}})).views(e=>({get hostFrame(){let{host:t,graphRegion:n}=e;return e.hostPlacesX&&t&&n?ut(t,n):void 0},get tubeMapPicture(){let t=e.layoutResult?.tubeMap;return t?ga(t):void 0},get tubeMapReference(){let t=e.layoutResult?.tubeMap;return t&&e.drawnGraph?da(e.drawnGraph,t.layout):void 0},get tubeMapDeviations(){let t=e.layoutResult?.tubeMap?.coarse,n=e.layoutResult?.tubeMap?.layout;return t&&n?Ma(t.graph,n,t.deviations):[]},get tubeMapReferenceNodes(){let t=e.layoutResult;return t?.tubeMap&&!t.referenceAxis&&e.drawnGraph?ua(e.drawnGraph,t.tubeMap.layout):void 0}})).views(e=>({get tubeMapGenes(){let t=e.tubeMapReference;return e.showGenes&&!e.host&&t&&e.backboneGenes?ba(t,e.backboneGenes):[]},get referenceStripApplies(){return!!e.host?.initialized&&!!e.layoutResult&&e.drawsNodes&&!e.hostPlacesX&&!e.facetPanels}})).views(e=>({get referenceStripBlocks(){let{graph:t}=e;return e.showReferenceStrip&&e.referenceStripApplies&&t?Sa(t,{colorScheme:e.effectiveColorScheme,referenceRamp:e.referenceRamp,walks:e.walkLift?.walks}):[]},get referenceStripFrame(){let{host:t,graphRegion:n}=e;return t?.initialized&&n?ut(t,n):void 0}})).views(e=>({get referenceStripShown(){return e.referenceStripBlocks.length>0&&e.referenceStripFrame!==void 0},get referenceStripOverhangs(){let t=e.referenceStripFrame;if(!t||e.referenceStripBlocks.length===0)return!1;let{left:n,right:o}=xa(e.referenceStripBlocks,t,e.paneWidth);return n>0||o>0},get referenceStripFaded(){return e.referenceStripBlocks.some(t=>t.faded)}})).views(e=>({get referenceStripLit(){if(!e.referenceStripShown)return;let t=a=>({x:a.x*e.scaleX+e.translateX,y:a.y*e.scaleY+e.translateY}),n=e.hoveredNode===null?e.hoveredBubble:null;if(n){let a=e.bubbleHalos.find(i=>Vr(i.bubble,n));return{start:n.start,end:n.end,anchor:a?t(a.labelAt):void 0}}let o=e.hoveredNode??e.selectedNode,r=o===null?void 0:e.nodeSpan(o);return r&&o!==null?{...r,anchor:Ot(e.nodePositions?.[o],t)}:void 0},referenceStripNodeAt(t,n){let o=e.referenceStripFrame;return e.referenceStripShown&&o?Ra(e.referenceStripBlocks,o,t,n):void 0},get paperCss(){return vi(e.darkMode?qt:Kt)},get referenceStripZonePx(){return e.referenceStripShown?ka:0}}));function rp(e,t,n){if(!(!e||!t))return Xr(e.rowPx,e.barPx)?n:{untracked:0,unread:0,...n,crowded:!0}}var vs=Ms.views(e=>({get paneCeiling(){return Math.max(Ut,e.paneHeight??Li)},get walkRowPitch(){let t=e.walkRowBars;if(!t)return;let n=e.host?this.canvasHeight:this.paneCeiling,o=(e.walkRowGroups?.sections.length??0)*Tr;return zr(t.rows.length+1,n-this.fitPadTopBase-F-o)},get walkRowPlacement(){let t=this.walkRowPitch;return t?Ir(e.walkRowGroups?.sections??[],t.rowPx):void 0},get walkRowGeneKey(){return rp(this.walkRowPitch,!!e.walkRowGenes?.size,e.walkRowGeneGaps)},get drawnRowLabels(){let t=this.walkRowPlacement,n=Ue(e.walkRowBars,e.layoutResult,this.walkRowPitch);return e.walkRowBars&&t?n.map((o,r)=>({...o,y:t.rowY(r)})):n},get fitPadLeft(){return Math.max(F,...this.drawnRowLabels.map(t=>fr(t.label,0).x1+6))},get layoutBounds(){let t=e.layoutResult,n=e.walkRowBars,o=n&&t?.extent?Ye(n,this.walkRowPitch):void 0;return t?ot(t,{region:e.popStack.length===0?e.graphRegion:void 0,extent:o&&{...o,maxY:o.maxY+(this.walkRowPlacement?.headersPx??0)}}):void 0},get hoveredWalkRowText(){let t=e.walkRowBars,n=e.hoveredWalkRow;if(!t||n===null||this.walkRowPitch?.readouts!==!1)return;let o=t.reference.name===n,r=o?t.reference:t.rows.find(a=>a.name===n);return r?{label:r.label,readout:Wr(r,o?void 0:t.reference,t.unit,r.call)}:void 0},walkRowAt(t,n){let o=e.walkRowBars,r=this.walkRowPitch,a=this.walkRowPlacement;if(!o||!r||!a)return;let i=a.rowAt((n-e.translateY)/e.scaleY,o.rows.length+1),s=[o.reference,...o.rows][i],c=a.rowY(i)*e.scaleY+e.translateY,d=(t-e.translateX)/e.scaleX-o.origin;return s&&Math.abs(n-c)<=r.barPx/2+2&&d>=0&&d<=s.bp?i:void 0},get fitPadTopBase(){let t=ya(e.tubeMapGenes);return F+Math.max(0,t-1)*wa+e.referenceStripZonePx},get legendRoom(){let t=this.layoutBounds,{width:n,height:o}=e.legendSize;if(!t||t.w<=0||n===0||e.facetPanels||e.tubeMapReads)return;if(e.hostPlacesX)return"top";let r=this.fitPadTopBase,a=e.host?this.canvasHeight:this.paneCeiling,i=m=>(e.paneWidth-this.fitPadLeft-m)/t.w,s=m=>e.pixelRows?t.h+m+F<=a?1/0:0:(a-m-F)/t.h,c=Math.min(i(n+2*Ne),s(r));return Math.min(i(F),s(r+o+Ne))>=c?"top":"right"},get fitPadTop(){return this.fitPadTopBase+(this.legendRoom==="top"?e.legendSize.height+Ne:0)},get fitPadRight(){return this.legendRoom==="right"?Math.max(F,e.legendSize.width+2*Ne):F},get minFitScale(){let t=this.layoutBounds,n=e.layoutResult,o=n?.tubeMap?.layout.tracks[0]?.width;return t&&t.h>0&&o&&!n.referenceAxis?Math.min(Ti/o,(this.paneCeiling-this.fitPadTop-F)/t.h):0},get facetSpec(){let{field:t,domain:n,columns:o}=e.facet;return t===""?void 0:n.length===0&&o===void 0?t:{field:t,domain:[...n],...o===void 0?{}:{columns:o}}},get facetPlacement(){let t=e.facetPanels,{field:n,domain:o}=e.facet;return t?Ct(t.map(r=>r.walks[0].name),e.hostPlacesX||n===""?"walk":n,o):void 0},facetGridIn(t){let n=this.facetPlacement,o=this.layoutBounds;return n&&o&&o.w>0?Nt({count:n.count,bounds:o,pixelRows:e.pixelRows,width:e.paneWidth,room:t,columns:e.hostPlacesX?1:n.columns??e.facet.columns}):void 0},get facetGrid(){return this.facetGridIn(e.host?this.canvasHeight:this.paneCeiling)},get canvasHeight(){let t=this.layoutBounds,n=e.paneWidth-F-this.fitPadRight,o=this.paneCeiling;if(!t)return o;let r=this.facetGrid;if(r)return Math.max(Ut,r.total);let a=Math.max(Ut,e.legendSize.height+2*Ne+e.referenceStripZonePx);return e.pixelRows?Math.min(o,Math.max(a,t.h+this.fitPadTop+F)):t.w>0&&n>0?Math.min(o,Math.max(a,t.h*Math.max(n/t.w,this.minFitScale)+this.fitPadTop+F)):o},get viewBox(){let t=this.facetGrid;return t?{width:t.width,height:t.height}:{width:e.paneWidth,height:this.canvasHeight}},get fittedTransform(){let t=this.layoutBounds,n=this.facetGrid;return t?n?Ce(t,n.width,n.height,e.pixelRows,{padLeft:re,padTop:re,padRight:re,padBottom:re}):Ce(t,e.paneWidth,this.canvasHeight,e.pixelRows,{minScale:this.minFitScale,padLeft:this.fitPadLeft,padTop:this.fitPadTop,padRight:this.fitPadRight}):void 0}})).views(e=>({viewportToBuild(){return Qn(at(e),Fi)},applyHighlights(t){let{litNode:n,hoveredEdge:o,selectedNode:r}=e,a=new Map;r!==null&&a.set(r,Ei),n!==null&&n!==r&&a.set(n,ro),t.setNodeHighlights(a),t.setEdgeHighlight(e.chosenHighlightOnHover?o:null,ro)},paint(t){let n=Qr();t.updateTransform({scaleX:e.scaleX*n,scaleY:e.scaleY*n,translateX:e.translateX*n,translateY:e.translateY*n,dpr:n}),t.render(e.referenceStripShown?[0,0,0,0]:e.darkMode?qt:Kt)}})).views(e=>({buildDrawing(t,n){let{graph:o,nodeById:r,layoutResult:a,deletionDrawing:i}=e;if(!o||!r||!a||!i)return;he(e.viewportDirty,e.positionsVersion);let s=(0,No.untracked)(()=>e.viewportToBuild());return{batch:Ft({...st(a,i,{drawsRows:!!e.walkRowBars}),graph:o,nodeById:r,colorScheme:e.effectiveColorScheme,contigThickness:e.contigThickness,connectorThickness:e.connectorThickness,drawPaths:n,nodeWidth:e.nodeWidth,highlight:t,axis:(0,No.untracked)(()=>e.axisScale),linearLayout:e.linearLayout,viewportBounds:s,referenceRamp:e.referenceRamp,version:e.positionsVersion}),viewportBounds:s}},get overlayLabels(){return ca(e)},hoveredOn(t){let n=e.hoveredNode,o=n?e.nodeById?.get(n):void 0;return o?aa(t,o.id,o.length)??"not on this walk":void 0},figureSpec(){let t=e.graphRegion,n=e.sourceAdapter,o=n?.assemblyNameToPanSN,r=t&&`${t.refName}:${t.start}-${t.end}`,a=Be(e.sourceGfaLocation),i=n?.type==="GbzBaseSyntenyAdapter"?Be(n.gbzDbLocation):void 0,s=a?{gfa:a,region:r}:i&&t&&r?{gbz:{db:i,index:Be(n.haplotypeIndexLocation),region:r,haplotypes:e.cutHaplotypes?.map(p=>o?.[p]??p),referenceSample:n.referenceSample||o?.[t.assemblyName]||t.assemblyName,context:n.context,snarls:e.cutsWholeWalks?"overlapping":n.subgraphSnarls}}:void 0;if(!s)return;let c=e.showGenes?e.geneTrack:void 0,d=c?(0,Ls.getSession)(e).tracks.find(p=>p.trackId===c.trackId):void 0,m=d?(0,an.expandTabixShorthand)((0,an.readConfObject)(d,"adapter"),"gffGzLocation"):void 0,l=m?.type==="Gff3TabixAdapter"?{file:Be(m.gffGzLocation),index:Be(m.index?.location),format:"gff3"}:void 0;return JSON.parse(JSON.stringify({...s,genes:l?.file&&l.index?l:void 0,referencePath:e.referencePath||void 0,layout:e.chosenLayoutMode,...ho({quality:e.layoutQuality,linearLayout:e.linearLayout,bubbleSpread:e.bubbleSpread,showDeletionEdges:e.showDeletionEdges,colorScheme:e.chosenColorScheme,nodeWidth:e.nodeWidth,contigThickness:e.contigThickness,connectorThickness:e.connectorThickness,colorDomain:e.colorDomain}),walks:e.walkLayers.length?e.walkLayers.map(p=>p.color?p:p.walk):void 0,facet:e.walkLayers.length>1?e.facetSpec:void 0,walkStrip:e.walkStripShown||void 0,walkRowSamples:e.walkStripShown?e.walkRowSamples:void 0,width:e.paneWidth,height:e.paneCeiling}))},get figureUnavailable(){return e.layoutResult?e.walkRowGroups?"The SVG export cannot group walk rows yet: set Group by... to None first":e.drawsNodes||e.walkRowBars?void 0:`${O(e.chosenLayoutMode).label} draws a picture of its own, which the SVG export does not`:"Nothing is drawn yet"},get figureSpecUnavailable(){return e.drawsNodes?e.popStack.length?"A spec names the whole graph, so go back out of this bubble first":this.figureSpec()?void 0:"bandage-figure reads a graph cut from a gbz-base track or a GFA url":`bandage-figure draws no ${O(e.chosenLayoutMode).label} layout`},figure(){let{graph:t,layoutResult:n}=e;return t&&n&&!this.figureUnavailable?go(t,n,{width:e.paneWidth,height:e.paneCeiling,walks:e.walkLayers,facet:e.facetSpec,colorScheme:e.effectiveColorScheme,nodeWidth:e.nodeWidth,showDeletionEdges:e.showDeletionEdges,linearLayout:e.linearLayout,contigThickness:e.contigThickness,connectorThickness:e.connectorThickness,region:e.graphRegion,colorDomain:e.colorDomain,fitToDrawing:e.popStack.length>0,genes:e.showGenes?e.backboneGenes:void 0,walkRows:e.walkRowBars,walkRowPitch:e.walkRowPitch,rowGenes:e.walkRowGenes,rowGeneGaps:e.walkRowGeneGaps,walkStrip:e.walkStripRows&&{rows:e.walkStripRows,rowGenes:e.walkRowGenes,rowGeneGaps:e.walkRowGeneGaps},spec:this.figureSpecUnavailable?void 0:this.figureSpec()}):void 0},get tubeMapFrame(){let t=e.layoutResult?.tubeMap;return t?fo(t,{scaleX:e.scaleX,translateX:e.translateX,scaleY:e.scaleY,translateY:e.translateY,usableHeight:e.canvasHeight-e.fitPadTop-F}):void 0}})).views(e=>({get tubeMapRulerBoxes(){let t=e.tubeMapReference;return t&&!e.hostPlacesX?pa(t):void 0},get connectorZoneBottom(){let t=e.tubeMapPicture,n=e.tubeMapFrame;return t&&n?n.y(t.bounds.minY)-2:0},get tubeMapConnectors(){let t=e.tubeMapReferenceNodes,n=e.tubeMapFrame,{host:o,graphRegion:r}=e,a=t&&n&&o?.initialized&&r?ut(o,r):void 0;return t&&n&&a?ma(t,i=>i*a.scale+a.translateX,n.x,e.paneWidth):[]}})).views(e=>({get tubeMapKeys(){let t=e.layoutResult,n=t?.tubeMap?.layout.reads??[],o=e.tubeMapPicture,r=e.tubeMapFrame,a=o&&r&&ha(r.yScale)?o.mismatches.filter(i=>fa(i,{x:r.x,width:e.paneWidth})):[];return{logWidths:t?.tubeMap!==void 0&&!t.referenceAxis,foldBp:e.tubeMapDeviations.length>0?e.tubeMapFold:void 0,forwardReads:n.some(i=>!i.is_reverse),reverseReads:n.some(i=>i.is_reverse),mismatches:new Set(a.map(i=>i.kind))}},tubeMapNodeAt(t,n){let o=e.layoutResult?.tubeMap,r=e.tubeMapFrame;return(o&&r?bo(o,r,t,n):null)??la(e.tubeMapConnectors,e.connectorZoneBottom,t,n)??null}}));function Ts(e,t,n){let o=Math.min(48,t,n);return Math.max(0,o-(e+t))-Math.max(0,e-(n-o))}function Gs(e,t,n){return{translateX:t.translateX+Ts(e.minX*t.scaleX+t.translateX,e.w*t.scaleX,n.width),translateY:t.translateY+Ts(e.minY*t.scaleY+t.translateY,e.h*t.scaleY,n.height)}}function Ps(e,t,n){let o=e.minX*t.scaleX+t.translateX,r=e.minY*t.scaleY+t.translateY;return o<n.width&&o+e.w*t.scaleX>0&&r<n.height&&r+e.h*t.scaleY>0}var As=vs.actions(e=>({keepDrawingInView(){let t=e.layoutBounds;if(!t||e.viewportOwner==="fit")return;let n=Gs(t,e,e.viewBox);e.viewportOwner!=="host"&&(e.translateX=n.translateX),e.translateY=n.translateY}})).actions(e=>({setError(t){e.error=t,e.isLoading=!1,e.statusMessage=""},finishLoading(){e.isLoading=!1,e.statusMessage=""},setStatusMessage(t){e.statusMessage=t},setFetchMs(t){e.lastFetchMs=t},setLayoutMs(t){e.lastLayoutMs=t},setGeometryMetrics(t,n,o){e.lastGeometryMs=t,e.lastGeometryStrokeCount=n,e.builtViewport={...o,viewportDirty:e.viewportDirty},e.geometryVersion++},markPainted(){e.paintedViewport=e.builtViewport},setLayoutQuality(t){e.layoutQuality=t},setLinearLayout(t){e.linearLayout=t},setLayoutMode(t){e.layoutMode=t},setHighlightOnHover(t){e.highlightOnHover=t},setReferencePath(t){e.referencePath=t;let n=e.graph;if(n?.anchoredBy==="paths"){let o=je(n,t);it.inherit(n,o),e.graph=o}},setDrawPaths(t){e.drawPaths=t},setShowPerf(t){e.showPerf=t},setColorScheme(t){e.colorScheme=t},setBubbleSpread(t){e.bubbleSpread=t},setNodeWidth(t){e.nodeWidth=t},setShowBubbles(t){e.showBubbles=t},setShowDeletionEdges(t){e.showDeletionEdges=t},setShowGenes(t){e.showGenes=t},setShowReferenceStrip(t){e.showReferenceStrip=t},setTubeMapFold(t){e.tubeMapFold=t},setGeneTrackId(t){e.geneTrackId=t},setRepeatTrackId(t){e.repeatTrackId=t},setRepeatKey(t){e.repeatKey=t},setWalkLayers(t){e.walkLayers=t},liftWalks(t){let n=new Map(e.walkLayers.map(o=>[o.walk,o]));e.walkLayers=t.map(o=>n.get(o)??{walk:o})},setFacet(t){t!==e.facet.field&&(e.facet.domain=[]),e.facet.field=t},setFacetColumns(t){e.facet.columns=t},toggleWalk(t){let n=e.walkLayers;e.walkLayers=n.some(o=>o.walk===t)?n.filter(o=>o.walk!==t):[...n,{walk:t}]},setWalkColor(t,n){e.walkLayers=e.walkLayers.map(o=>o.walk===t?{...o,color:{...o.color,...n}}:o)},setPaneHeight(t){e.paneHeight=t},setWalkRowSamples(t){e.walkRowSamples=t},setWalkRowGroupBy(t){e.walkRowGroupBy=t},setWalkRowSampleTable(t){e.walkRowSampleTable=t},pairWithLinearView(t){let n=e.connectedViewId;n!==void 0&&ht([...(0,wt.getSession)(e).views]).some(r=>r.id===n)||(e.connectedViewId=t)},setHoveredNode(t){e.hoveredNode=t},setHoveredRowWalks(t){t.join(`
|
|
1
|
+
import{a as Jr}from"./chunks/chunk-PLV6SE4Y.js";import{B as Ta,D as Ga,a as te,b as fr,c as br,d as Ge,e as Lt,f as ze,g as Ye,h as wr,i as vt,j as yr,k as _,l as Xr,m as zr,n as Yr,o as Ur,p as Vt,s as Kr,t as qr,u as Ue,v as La,w as Ke,x as va,y as _t,z as qe}from"./chunks/chunk-GXQ7NYB3.js";import{a as Gn,b as Tt,c as Gt,d as Ct,e as An,f as Sr,h as Rr,i as xr,j as Yc}from"./chunks/chunk-GMSOU6VO.js";import{B as ke,Ba as xa,Ea as Ma,F as $r,H as Cn,I as Hr,J as Wr,K as En,O as Bn,P as jr,Q as Fn,R as Zr,S as Qr,T as Dn,U as ea,V as ta,W as na,X as oa,Y as ra,_ as aa,a as St,b as dr,ba as Ae,da as ia,ea as sa,fa as ca,ga as da,h as Pn,i as Pt,j as oe,ja as pa,k as At,ka as ua,l as kr,la as ma,m as Nt,n as It,na as la,o as Lr,p as vr,pa as ga,q as Tr,qa as ha,r as Gr,ra as fa,s as Pr,sa as ba,t as Ar,ta as wa,u as Or,v as Ft,va as ya,wa as ka,x as _r,xa as Sa,y as Dt,ya as Ra,za as Ot}from"./chunks/chunk-GB7CF6Z2.js";import{a as _e,b as we,c as Nr,g as Ir,j as Pe,k as Cr,l as Er,m as Bt,p as Nn,q as Br,r as Fr,s as In}from"./chunks/chunk-WTOQRUK2.js";import{D as q,E as Mn,F as Ln,G as We,H as vn,I as je,O as Tn,Q as hr,R as Xe,S as Mt,U as Mr,X as Et,b as $e,c as Rt,d as Sn,e as pr,f as ur,g as xt,q as mr,r as lr,s as Rn,u as ye,v as xn,w as He,x as gr}from"./chunks/chunk-B7GF3TC3.js";import{b as Dr,d as Vr}from"./chunks/chunk-KRXALLQG.js";import{a as fn,b as bn,c as wn,d as yn,e as kn,n as kt}from"./chunks/chunk-WUGRVNUJ.js";import"./chunks/chunk-EHV7EUMI.js";import{b as er,c as O,e as tr,f as nr,h as or,i as rr}from"./chunks/chunk-MYJYGSOH.js";import{a as Wc}from"./chunks/chunk-KWAXLUPQ.js";import"./chunks/chunk-YBLNN5FU.js";import{a as Zo,d as Qo}from"./chunks/chunk-DILFGQIL.js";import{a as ne}from"./chunks/chunk-FCWXYIFC.js";import{a as jc,d as ar,g as ir,h as sr}from"./chunks/chunk-4T7DPQTR.js";import{a as ae}from"./chunks/chunk-J4OLMLS5.js";import{a as Oe}from"./chunks/chunk-J6KYLXRD.js";import{a as cr,b as zc}from"./chunks/chunk-NXZT63HN.js";import{a as ce,b as Xc}from"./chunks/chunk-64LZZURD.js";import{a as Z,b as f}from"./chunks/chunk-FY3BTKY4.js";var Aa=Z((Np,Pa)=>{Pa.exports=JBrowseExports["@jbrowse/core/Plugin"]});var Wt=Z((Ep,Na)=>{Na.exports=JBrowseExports["@jbrowse/core/pluggableElementTypes/AdapterType"]});var K=Z((Bp,Ia)=>{Ia.exports=JBrowseExports["@jbrowse/core/configuration"]});var $n=Z((_p,Ba)=>{Ba.exports=JBrowseExports["@jbrowse/core/data_adapters/dataAdapterCache"]});var fe=Z(($p,Fa)=>{Fa.exports=JBrowseExports["@jbrowse/core/pluggableElementTypes"]});var Ya=Z((qp,za)=>{za.exports=JBrowseExports["@jbrowse/core/pluggableElementTypes/ViewType"]});var Ka=Z((Jp,Ua)=>{Ua.exports=JBrowseExports["@jbrowse/core/util/withLaunchInput"]});var Ja=Z((Zp,qa)=>{qa.exports=JBrowseExports["@jbrowse/core/pluggableElementTypes/models"]});var ki=Z((ym,yi)=>{yi.exports=JBrowseExports["@jbrowse/render-core/RenderLifecycleMixin"]});var ts=Z((wb,es)=>{es.exports=JBrowseExports["@jbrowse/core/pluggableElementTypes/renderers/util/serializableFilterChain"]});var qs=Z((Mk,Ks)=>{Ks.exports=JBrowseExports["@jbrowse/core/pluggableElementTypes/DisplayType"]});var Zs=Z((Lk,Js)=>{Js.exports=JBrowseExports["@jbrowse/display-kit/trackHeightConfigSchemaFields"]});var oc=Z((Pk,nc)=>{nc.exports=JBrowseExports["@jbrowse/core/svg/svgReady"]});var ac=Z((Ak,rc)=>{rc.exports=JBrowseExports["@jbrowse/display-kit/TrackHeightMixin"]});var sc=Z((Nk,ic)=>{ic.exports=JBrowseExports["@jbrowse/render-core/displayPhase"]});var Vc=f(Aa(),1),Oc=f(ae(),1);var $t=f(ce(),1),Ht=(0,te.createSvgIcon)([(0,$t.jsx)("circle",{cx:"7.2",cy:"14.4",r:"3.2"},"0"),(0,$t.jsx)("circle",{cx:"14.8",cy:"18",r:"2"},"1"),(0,$t.jsx)("circle",{cx:"15.2",cy:"8.8",r:"4.8"},"2")],"BubbleChart");var Ea=f(Wt(),1);var Vn=f(K(),1),On=f(ne(),1),Uc=(0,Vn.ConfigurationSchema)("GbzBaseSyntenyAdapter",{assemblyNames:{type:"stringArray",defaultValue:[]},gbzDbLocation:{type:"fileLocation",defaultValue:{uri:"/path/to/graph.gbz.db",locationType:"UriLocation"}},haplotypeIndexLocation:{type:"fileLocation",defaultValue:{uri:"",locationType:"UriLocation"}},readsLocation:{type:"fileLocation",defaultValue:{uri:"",locationType:"UriLocation"}},readsIndex:(0,Vn.ConfigurationSchema)("GbzBaseReadsIndex",{indexType:{model:On.types.enumeration("IndexType",["TBI","CSI"]),type:"stringEnum",defaultValue:"TBI"},location:{type:"fileLocation",defaultValue:{uri:"",locationType:"UriLocation"}}}),samplesTsvLocation:{type:"fileLocation",defaultValue:{uri:"",locationType:"UriLocation"}},subgraphSnarls:{type:"stringEnum",model:On.types.enumeration("SnarlOutput",["none","contained","overlapping"]),defaultValue:kt.snarls},referenceSample:{type:"string",defaultValue:""},assemblyNameToPanSN:{type:"frozen",defaultValue:{}},context:{type:"number",defaultValue:kt.context,advanced:!0},nodeLimit:{type:"number",defaultValue:kt.limit,advanced:!0}},{explicitlyTyped:!0,preProcessSnapshot:e=>{let{uri:t,baseUri:n,reads:o}=e;return{...e,...t?{gbzDbLocation:{uri:t,baseUri:n}}:{},...typeof o=="string"?{readsLocation:{uri:o,baseUri:n},...o.endsWith(".gz")?{readsIndex:{location:{uri:`${o}.tbi`,baseUri:n}}}:{}}:{}}}}),Ca=Uc;function _n(e){e.addAdapterType(()=>new Ea.default({name:"GbzBaseSyntenyAdapter",displayName:"gbz-base pangenome adapter",configSchema:Ca,adapterCapabilities:["getSubgraph","headerLanes","lanePairsOnAnchor","lanePairBatches"],adapterMetadata:{category:"Synteny adapters"},getAdapterClass:()=>import("./chunks/GbzBaseSyntenyAdapter-KVJKGGQ4.js").then(t=>t.default)}))}var Da=f($n(),1),Va=f(fe(),1);function Kc(e){return"getReads"in e&&typeof e.getReads=="function"}var qc=e=>typeof e=="object"&&e!==null&&Object.entries(e).some(([t,n])=>["uri","localPath","blobId"].includes(t)&&typeof n=="string"&&n!=="");function Oa(e){return typeof e.reads=="string"&&e.reads!==""||qc(e.readsLocation)}var Je=class extends Va.RpcMethodType{constructor(){super(...arguments);this.name="GetGraphReads"}async execute(n){let{adapterConfig:o,nodeNames:r,sessionId:a,signal:i}=n,{dataAdapter:s}=await(0,Da.getAdapter)(this.pluginManager,a,o);return Kc(s)?s.getReads(r,{signal:i}):{records:[],total:0}}};var _a=f($n(),1),$a=f(fe(),1);function Jc(e){return"getSubgraph"in e&&typeof e.getSubgraph=="function"}var Ze=class extends $a.RpcMethodTypeWithRenameRegion{constructor(){super(...arguments);this.name="GetSubgraph"}async execute(n){let{adapterConfig:o,region:r,sessionId:a,opts:i,signal:s}=n,{dataAdapter:c}=await(0,_a.getAdapter)(this.pluginManager,a,o);return Jc(c)?c.getSubgraph(r,{...i,signal:s}):(console.warn(`[GetSubgraph] ${c.constructor.name} does not implement getSubgraph`),"")}};var Ha=f(Oe(),1),Wa=f(fe(),1),ja=f(ne(),1),Zc=(0,Ha.lazy)(()=>import("./chunks/AddTrackWorkflow-ANWIWCO6.js"));function Hn(e){e.addAddTrackWorkflowType(()=>new Wa.AddTrackWorkflowType({name:"Pangenome graph track",displayName:"Add pangenome graph track",ReactComponent:Zc,stateModel:ja.types.model({})}))}var Wn;function jn(){return Wn??=import("./chunks/bandage-layout-3AR6BCUD-PYYNJEGI.js").then(e=>e.default()).catch(e=>{throw Wn=void 0,e}),Wn}var Xa=f(fe(),1),Qe=class extends Xa.RpcMethodType{constructor(){super(...arguments);this.name="GraphComputeLayout"}async execute(n){let{graph:o,options:r,statusCallback:a}=n;a?.("Loading layout engine");let i=await jn();a?.("Computing layout");let s=performance.now(),c=i.computeLayout(o,r),d=performance.now()-s;return{result:c,duration:d}}};var Xs=f(Oe(),1),zs=f(Ya(),1),Ys=f(Ka(),1);var Hs=f(Ja(),1),Ws=f(ae(),1),z=f(ne(),1),js=f(St(),1);var Os=f(cr(),1),he=f(ae(),1);var Za=f(ce(),1),Qa=(0,te.createSvgIcon)((0,Za.jsx)("path",{d:"M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2m0 16H8V7h11z"}),"ContentCopy");var ei=f(ce(),1),ti=(0,te.createSvgIcon)((0,ei.jsx)("path",{d:"M8.4 18.2c.38.5.6 1.12.6 1.8 0 1.66-1.34 3-3 3s-3-1.34-3-3 1.34-3 3-3c.44 0 .85.09 1.23.26l1.41-1.77c-.92-1.03-1.29-2.39-1.09-3.69l-2.03-.68c-.54.83-1.46 1.38-2.52 1.38-1.66 0-3-1.34-3-3s1.34-3 3-3 3 1.34 3 3c0 .07 0 .14-.01.21l2.03.68c.64-1.21 1.82-2.09 3.22-2.32V5.91C9.96 5.57 9 4.4 9 3c0-1.66 1.34-3 3-3s3 1.34 3 3c0 1.4-.96 2.57-2.25 2.91v2.16c1.4.23 2.58 1.11 3.22 2.32L18 9.71V9.5c0-1.66 1.34-3 3-3s3 1.34 3 3-1.34 3-3 3c-1.06 0-1.98-.55-2.52-1.37l-2.03.68c.2 1.29-.16 2.65-1.09 3.69l1.41 1.77Q17.34 17 18 17c1.66 0 3 1.34 3 3s-1.34 3-3 3-3-1.34-3-3c0-.68.22-1.3.6-1.8l-1.41-1.77c-1.35.75-3.01.76-4.37 0z"}),"Hub");var ni=f(ce(),1),oi=(0,te.createSvgIcon)((0,ni.jsx)("path",{d:"M12 2C6.49 2 2 6.49 2 12s4.49 10 10 10c1.38 0 2.5-1.12 2.5-2.5 0-.61-.23-1.2-.64-1.67-.08-.1-.13-.21-.13-.33 0-.28.22-.5.5-.5H16c3.31 0 6-2.69 6-6 0-4.96-4.49-9-10-9m5.5 11c-.83 0-1.5-.67-1.5-1.5s.67-1.5 1.5-1.5 1.5.67 1.5 1.5-.67 1.5-1.5 1.5m-3-4c-.83 0-1.5-.67-1.5-1.5S13.67 6 14.5 6s1.5.67 1.5 1.5S15.33 9 14.5 9M5 11.5c0-.83.67-1.5 1.5-1.5s1.5.67 1.5 1.5S7.33 13 6.5 13 5 12.33 5 11.5m6-4c0 .83-.67 1.5-1.5 1.5S8 8.33 8 7.5 8.67 6 9.5 6s1.5.67 1.5 1.5"}),"Palette");var Xn=f(ce(),1),ri=(0,te.createSvgIcon)([(0,Xn.jsx)("circle",{cx:"12",cy:"12",r:"3.2"},"0"),(0,Xn.jsx)("path",{d:"M9 2 7.17 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2h-3.17L15 2zm3 15c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5"},"1")],"PhotoCamera");var ai=f(ce(),1),ii=(0,te.createSvgIcon)((0,ai.jsx)("path",{d:"M12 4.5C7 4.5 2.73 7.61 1 12c1.73 4.39 6 7.5 11 7.5s9.27-3.11 11-7.5c-1.73-4.39-6-7.5-11-7.5M12 17c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5m0-8c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3"}),"Visibility");var zt=f(Oe(),1);var si=30;function Qc(e,t){let{opts:n}=t,o=new Map(t.nodes.map(p=>[p.id,Ct(n,p.length)])),r=p=>o.get(p)??n.minimumNodeLength,a=e.nodes.filter(O).sort((p,u)=>p.stable.start-u.stable.start),i=new Map,s=0;for(let p of a)i.set(p.id,{x:s,y:0}),s+=r(p.id)+n.edgeLength;let c=_e(e),d=new Map(a.map(p=>[p.id,0])),l=a.map(p=>p.id);for(let p of l){let u=i.get(p),y=d.get(p)+1;for(let x of c.get(p)??[])d.has(x)||(d.set(x,y),i.set(x,{x:u.x+r(p)/2,y:si*y}),l.push(x))}let b=0;for(let p of e.nodes)i.has(p.id)||i.set(p.id,{x:b++*s/e.nodes.length,y:si*3});return i}function ci(e,t){let n=Qc(e,t);return t.nodes.map(o=>({...o,...n.get(o.id)}))}function di(e,t){let n=e.nodes.filter(k=>O(k)&&(t[k.id]?.length??0)>0);if(n.length<2)return t;let o=n.map(k=>{let h=t[k.id],S=h[Math.floor(h.length/2)];return{x:S.x,y:S.y,r:k.stable.start+k.length/2,w:k.length}}),r=o.reduce((k,h)=>k+h.w,0),a=o.reduce((k,h)=>k+h.x*h.w,0)/r,i=o.reduce((k,h)=>k+h.y*h.w,0)/r,s=o.reduce((k,h)=>k+h.r*h.w,0)/r,c=0,d=0;for(let k of o)c+=k.w*(k.x-a)*(k.r-s),d+=k.w*(k.y-i)*(k.r-s);let l=-Math.atan2(d,c),b=Math.cos(l),p=Math.sin(l),u={};for(let[k,h]of Object.entries(t))u[k]=h.map(S=>{let G=S.x-a,m=S.y-i;return{x:a+b*G-p*m,y:i+p*G+b*m}});let y=0,x=0;for(let k of e.nodes)if(!O(k))for(let h of u[k.id]??[])h.y>i?y++:x++;if(x>y)for(let k of Object.values(u))for(let h of k)h.y=2*i-h.y;return u}function ed(e,t){let n=e.indexOf(":"),o=e.indexOf(":",n+1);if(n!==-1&&o!==-1){let r=e.slice(0,n),a=e.slice(n+1,o),i=e.slice(o+1);a==="i"||a==="f"?t[r]=+i:a==="Z"&&(t[r]=i)}}function et(e){let t={};for(let n of e)ed(n,t);return t}function ui(e){let{SN:t,SO:n,SR:o}=e.tags;return typeof t=="string"&&typeof n=="number"&&typeof o=="number"?{refName:t,start:n,rank:o}:void 0}var pi=62,td=60;function nd(e){let t=[],n="+",o=0;function r(a){a>o&&t.push({id:e.slice(o,a),strand:n})}for(let a=0;a<e.length;a++){let i=e.charCodeAt(a);(i===pi||i===td)&&(r(a),n=i===pi?"+":"-",o=a+1)}return r(e.length),t}function mi(e){let t={nodes:[],links:[],paths:[],walks:[],header:[],id:""};for(let n of e.split(`
|
|
2
|
+
`)){let o=n.endsWith("\r")?n.slice(0,-1):n;if(o.startsWith("H")){let[,...r]=o.split(" ");t.header.push(et(r))}else if(o.startsWith("S")){let[,r,...a]=o.split(" "),i,s,c,d=!1,l=a[0]??"*";/^\d+$/.test(l)?(i=+l,s=a[1]??"*",c=a.slice(2)):(d=!0,s=l,i=s==="*"?0:s.length,c=a.slice(1));let b=et(c);d&&"LN"in b&&(i=+b.LN),t.nodes.push({id:r,length:i,sequence:s,tags:b})}else if(o.startsWith("E")){let[,,r,a,,,,,i,...s]=o.split(" ");r&&a&&t.links.push({source:r.slice(0,-1),target:a.slice(0,-1),strand1:r.at(-1),strand2:a.at(-1),cigar:i??"*",tags:et(s)})}else if(o.startsWith("L")){let[,r,a,i,s,c,...d]=o.split(" ");r&&i&&s&&t.links.push({source:r,target:i,strand1:a,strand2:s,cigar:c??"*",tags:et(d)})}else if(o.startsWith("W")){let[,r,a,i,s,c,d,...l]=o.split(" ");r&&a&&i&&s&&c&&d&&t.walks.push({sample:r,haplotype:+a,contig:i,start:s==="*"?-1:+s,end:c==="*"?-1:+c,segments:nd(d),tags:et(l)})}else if(o.startsWith("P")){let[,r,a,...i]=o.split(" ");r&&a&&t.paths.push({name:r,path:a,rest:i})}}return t}function od(e){let t=new Map,n=new Map;function o(a,i){t.has(a)||t.set(a,i)}function r(a,i){o(a,i),n.set(a,(n.get(a)??0)+1)}for(let a of e.links)o(a.source,a.strand1==="-"?"-":"+"),o(a.target,a.strand2==="-"?"-":"+");for(let a of e.paths)for(let i of a.path.split(","))r(i.slice(0,-1),i.endsWith("-")?"-":"+");for(let a of e.walks)for(let i of a.segments)r(i.id,i.strand==="-"?"-":"+");return{canonical:t,traversals:n}}var li=e=>e.start===-1?0:e.start;function rd(e){return[...e.paths.map(t=>({...q(t.name),steps:t.path.split(",").map(n=>({id:n.slice(0,-1),strand:n.endsWith("-")?"-":"+"}))})),...e.walks.map(t=>({name:`${t.sample}#${t.haplotype}#${t.contig}`,start:li(t),steps:t.segments.map(n=>({id:n.id,strand:n.strand==="-"?"-":"+"}))}))]}function ad(e){let t=e.tags.SM;if(typeof t!="string")return;let n=t.split(",").map(o=>o.trim()).filter(Boolean);return n.length>0?n:void 0}var tt=e=>typeof e=="number"&&e>0?e:void 0;function id({tags:e,length:t}){let n=tt(e.RC)??tt(e.FC)??tt(e.KC);return tt(e.dp)??tt(e.DP)??(n!==void 0&&t>0?n/t:void 0)}function sd(e,t,n){return{id:`${e.id}${t}`,name:e.id,length:e.length,depth:n,stable:ui(e),samples:ad(e)}}function gi(e,t="Imported GFA"){let n=[],o=[],{canonical:r,traversals:a}=od(e),i=u=>`${u}${r.get(u)??"+"}`;for(let u of e.nodes){let y=id(u)??Math.max(a.get(u.id)??1,1);n.push(sd(u,r.get(u.id)??"+",y))}for(let u of e.links)o.push({from:i(u.source),to:i(u.target),fromStrand:u.strand1==="-"?"-":"+",toStrand:u.strand2==="-"?"-":"+"});let s=[],c=new Map,d=(u,y)=>[u,y].sort().join("--");function l(u,y){for(let x=0;x<u.length-1;x++){let k=d(u[x],u[x+1]);c.has(k)||c.set(k,new Set),c.get(k).add(y)}}for(let u of e.paths){let y=u.path.split(",").map(x=>i(x.slice(0,-1)));s.push({name:u.name,nodeIds:y,start:q(u.name).start}),l(y,u.name)}for(let u of e.walks){let y=u.segments.map(k=>i(k.id)),x=`${u.sample}#${u.haplotype}#${u.contig}`;s.push({name:x,nodeIds:y,start:li(u),sample:u.sample,haplotype:u.haplotype,contig:u.contig}),l(y,x)}for(let u of o){let y=c.get(d(u.from,u.to));y&&y.size>0&&(u.pathIds=[...y])}let b=new Map(e.nodes.map(u=>[u.id,u.length])),p=e.paths.length>0||e.walks.length>0?Mn(rd(e),u=>b.get(u)??0):void 0;return{name:t,nodes:n,edges:o,paths:s.length>0?s:void 0,anchorPaths:p?.anchorPaths,pathVisits:p?.pathVisits,anchoredBy:n.some(u=>u.stable)?"tags":void 0}}var cd="\0deletion:",dd=.5;function hi(e,t,n=new Set){let o=new Map(t.map(a=>[a.edgeIndex,`${cd}${a.edgeIndex}`])),r=[];return e.edges.forEach((a,i)=>{let s=o.get(i);if(!n.has(i))if(s===void 0)r.push(a);else{let{fromStrand:c,toStrand:d}=a;r.push({from:a.from,to:s,...c?{fromStrand:c}:{}},{from:s,to:a.to,...d?{toStrand:d}:{}})}}),{graph:{...e,nodes:[...e.nodes,...[...o.values()].map(a=>({id:a,name:a,length:0,depth:0}))],edges:r},routes:o,ids:new Set(o.values())}}function fi(e,t,n,o,r){let a=new Map(e.nodes.map(i=>[i.id,i.length]));return t.map(i=>{let s=i.bypassed.reduce((l,b)=>l+(a.get(b)??0),0),c=Math.max(r.minimumNodeLength,o(s)*dd),d=n.get(i.edgeIndex);return{id:d,name:d,length:Math.round(c*1e6/r.nodeLengthPerMegabase),depth:0}})}function bi(e,t){let n={...e},o={};for(let[r,a]of t){let i=n[a];delete n[a],i?.length&&(o[r]=i)}return{nodePositions:n,deletionRoutes:o}}function zn(e,t,n={}){let o=vn(gi(mi(e),t),n.referencePath);if(o.nodes.length===0)throw new Error(`No graph segments in ${t}`);if(n.maxNodes!==void 0&&o.nodes.length>n.maxNodes)throw new Error(`Graph too large to draw: ${o.nodes.length.toLocaleString()} nodes (limit ${n.maxNodes.toLocaleString()}). Zoom in to a smaller region, or raise maxGraphNodes on this view.`);return o}var ue={engine:"fmmm",quality:2,linearLayout:!1,bubbleSpread:"auto",spacing:1,componentSeparation:1,showDeletionEdges:!0};function Yn(e={}){return{engine:e.engine??ue.engine,quality:e.quality??ue.quality,linearLayout:e.linearLayout??ue.linearLayout,bubbleSpread:e.bubbleSpread??ue.bubbleSpread,spacing:e.spacing??ue.spacing,componentSeparation:e.componentSeparation??ue.componentSeparation,showDeletionEdges:e.showDeletionEdges??ue.showDeletionEdges}}var pd=15;function wi(e,t,n){let o=e.nodes.some(O),r={...t,opts:{...t.opts,edgeLength:t.opts.edgeLength*(n.spacing??1)}};return{graph:{nodes:o?ci(e,r):r.nodes,edges:e.edges},options:{quality:n.quality,linearLayout:n.linearLayout,...r.opts,componentSeparation:pd*(n.componentSeparation??1),...o?{rotateComponents:!1}:{},engine:n.engine??"fmmm"}}}function jt(e,t){let n=e.nodes.some(O);return`${t.engine??"fmmm"}|${t.quality}|${t.linearLayout}|${t.bubbleSpread}|${t.spacing??1}|${t.componentSeparation??1}|${t.showDeletionEdges!==!1}|${n}|${e.referencePath??""}`}async function Un(e,t,n){let o=xr(t.bubbleSpread),r=ye(e),a=t.showDeletionEdges===!1?xn(e,r):new Set,i=r.filter(S=>!a.has(S.edgeIndex)),s=hi(e,i,a),c=mr(s.graph,s.ids),d={...c.graph,nodes:c.graph.nodes.filter(S=>!s.ids.has(S.id))},l=An(d,o),{result:b,duration:p}=await n(wi(c.graph,{...l,nodes:[...l.nodes,...fi(e,i,s.routes,Sr(d,o),l.opts)]},t)),u=An(e,o),y=new Map(u.nodes.map(S=>[S.id,Ct(u.opts,S.length)])),x=lr(b.nodePositions,c.runs,S=>y.get(S)??0),{nodePositions:k,deletionRoutes:h}=bi(e.nodes.some(O)?di(e,x):x,s.routes);return{result:{...b,nodePositions:k,stranded:!0,...i.length?{deletionRoutes:h,extent:Kn(h)}:{}},duration:p}}function Kn(e){let t=1/0,n=1/0,o=-1/0,r=-1/0;for(let a of Object.values(e))for(let i of a)t=Math.min(t,i.x),n=Math.min(n,i.y),o=Math.max(o,i.x),r=Math.max(r,i.y);return{minX:t,minY:n,maxX:o,maxY:r}}var F=40,ud=1e-6,md=100;function Ne(e){return Math.max(ud,Math.min(md,e))}function Xt(e,t,n,o=F){let r=t-e.h*n;return o-e.minY*n+Math.max(0,r)/2}function Ie(e,t,n,o,{minScale:r=0,padLeft:a=F,padTop:i=F,padRight:s=F,padBottom:c=F}={}){let d=t-a-s,l=n-i-c;if(d<=0||l<=0||!(e.w>0||!o&&e.h>0))return;let b=e.w>0?d/e.w:1/0,p=e.h>0?l/e.h:1/0,u=Ne(Math.max(r,o?b:Math.min(b,p))),y=d-e.w*u;return{scale:u,translateX:a-e.minX*u+Math.max(0,y)/2,translateY:Xt(e,l,o?1:u,i)}}function nt(e,t={}){let{minX:n,minY:o,maxX:r,maxY:a}=Kn(e.nodePositions),{region:i}=t;e.referenceAxis&&i&&i.end>i.start&&(n=i.start,r=i.end);let s=t.extent??e.extent;return s&&(n=Math.min(n,s.minX??n),o=Math.min(o,s.minY??o),r=Math.max(r,s.maxX??r),a=Math.max(a,s.maxY??a)),{minX:n,minY:o,w:r-n,h:a-o}}var ld=4;function qn(e=ld){let t=new WeakMap,n=o=>{let r=t.get(o);return r||(r=new Map,t.set(o,r)),r};return{layout(o,r,a){let i=n(o),s=jt(o,r),c=i.get(s);if(c)return c.run;i.size>=e&&i.delete(i.keys().next().value);let d=performance.now(),l={run:Un(o,r,a).then(b=>(l.done=b.result,{...b,duration:b.duration||performance.now()-d}))};return l.run.catch(()=>i.delete(s)),i.set(s,l),l.run},ready(o,r){return t.get(o)?.get(jt(o,r))?.done},inherit(o,r){let a=t.get(o);a&&o!==r&&t.set(r,a)}}}function Se(e,t){return{scaleX:e,scaleY:t?1:e,pixelRows:t}}function Jn(e,t,n,o){return{minX:-e.translateX/t.scaleX,minY:-e.translateY/t.scaleY,maxX:(n-e.translateX)/t.scaleX,maxY:(o-e.translateY)/t.scaleY}}function Zn(e,t){let n=(e.maxX-e.minX)*t,o=(e.maxY-e.minY)*t;return{minX:e.minX-n,minY:e.minY-o,maxX:e.maxX+n,maxY:e.maxY+o}}function Qn(e,t){return t.minX>=e.minX&&t.maxX<=e.maxX&&t.minY>=e.minY&&t.maxY<=e.maxY}function eo(e,t,n,o,r){let a=Ne(e.scale*t),i=a/e.scale;return{scale:a,translateX:n-(n-e.translateX)*i,translateY:r?e.translateY:o-(o-e.translateY)*i}}var R=f(ne(),1),xi=f(ki(),1);var Re=f(ne(),1);function Si(e){return t=>e.includes(t)?t:void 0}function to(e){return Re.types.snapshotProcessor(Re.types.maybe(Re.types.enumeration(e)),{preProcessor:Si(e)})}function no(e,t){return Re.types.snapshotProcessor(Re.types.optional(Re.types.enumeration(e),t),{preProcessor:Si(e)})}var Mi=600,Yt=160,Ut=[1,1,1,1],Kt=[.12,.12,.12,1],Li=([e,t,n])=>`rgb(${[e,t,n].map(o=>Math.round(o*255)).join(", ")})`,vi=5,Ce=new Set(["tubemap","tubemapref"]),Ti=(0,zt.lazy)(()=>import("./chunks/ChooseSamplesDialog-OYAB355I.js")),Gi=(0,zt.lazy)(()=>import("./chunks/ChooseWalksDialog-HJE4CAKU.js")),Pi=(0,zt.lazy)(()=>import("./chunks/HighlightColorDialog-LXT72W7R.js")),Ai=12,gd=R.types.snapshotProcessor(R.types.model("GraphFacet",{field:R.types.optional(R.types.enumeration(["","walk","sample"]),""),domain:R.types.optional(R.types.frozen(),[]),columns:R.types.maybe(R.types.number)}),{preProcessor:e=>Nt(e)}),Ni=[{bp:0,label:"None"},{bp:3,label:"Under 3 bp"},{bp:10,label:"Under 10 bp"},{bp:50,label:"Under 50 bp, leaving structural variants"},{bp:1e3,label:"Under 1 kb"}],Ri=".segs.bed.gz";function Ii(e){if(typeof e.uri=="string")return e.uri;let n=e.segmentsLocation?.uri;return typeof n=="string"&&n.endsWith(Ri)?n.slice(0,-Ri.length):void 0}var oo=1.15,Ci=1.6,Ei=150,Bi=1,ro=40,ao={nodeStrokes:[],nodeStrokeRuns:new Map,arrows:[],arrowRuns:new Map,edgeCurves:[],edgeCurveRuns:new Map};function ge(...e){}var ot=5e6;function xe(e){return e>=1e6?`${+(e/1e6).toFixed(1)} Mb`:`${Math.round(e/1e3)} kb`}var Fi=2e4;function Ee(e){return e&&"uri"in e&&e.uri?new URL(e.uri,e.baseUri??window.location.href).href:void 0}function io(e){return e.builtViewport!==void 0&&e.paintedViewport===e.builtViewport&&e.builtViewport.viewportDirty===e.viewportDirty&&!e.viewportRebuildPending}function rt(e){let{width:t,height:n}=e.viewBox;return Jn(e,e.axisScale,t,n)}var at=qn(),Di=R.types.compose("GraphPane",(0,xi.RenderLifecycleMixin)(),R.types.model({layoutQuality:R.types.optional(R.types.number,2),linearLayout:R.types.optional(R.types.boolean,!1),layoutMode:to(vt),colorScheme:to(Tt),highlightOnHover:R.types.maybe(R.types.boolean),bubbleSpread:no(Rr,"auto"),nodeWidth:no(Mr,"depth"),showBubbles:R.types.optional(R.types.boolean,!1),showDeletionEdges:R.types.optional(R.types.boolean,!0),showGenes:R.types.optional(R.types.boolean,!0),showReferenceStrip:R.types.optional(R.types.boolean,!0),tubeMapFold:R.types.optional(R.types.number,0),geneTrackId:R.types.optional(R.types.string,""),repeatTrackId:R.types.optional(R.types.string,""),repeatKey:R.types.optional(R.types.string,""),walkRowSamples:R.types.maybe(R.types.frozen()),walkRowGroupBy:R.types.maybe(R.types.snapshotProcessor(R.types.frozen(),{preProcessor:e=>Gr(e)})),walkStrip:R.types.optional(R.types.boolean,!1),walkLayers:R.types.optional(R.types.frozen(),[]),facet:R.types.optional(gd,{}),referencePath:R.types.optional(R.types.string,""),showPerf:R.types.optional(R.types.boolean,!1),contigThickness:R.types.optional(R.types.number,6),connectorThickness:R.types.optional(R.types.number,2),darkMode:R.types.optional(R.types.boolean,!1),scale:R.types.optional(R.types.number,1),translateX:R.types.optional(R.types.number,0),translateY:R.types.optional(R.types.number,0),drawPaths:R.types.optional(R.types.boolean,!1),paneHeight:R.types.maybe(R.types.number),maxGraphNodes:R.types.optional(R.types.number,Fi),colorDomain:R.types.maybe(R.types.frozen()),connectedViewId:R.types.maybe(R.types.string)})).volatile(()=>({graph:void 0,graphRegion:void 0,loadedReferencePath:void 0,layoutResult:void 0,legendSize:{width:0,height:0},indexBubbles:void 0,geneTrackFeatures:void 0,walkGeneFeatures:void 0,walkRowSampleTable:void 0,repeatArrays:void 0,popStack:[],error:void 0,isLoading:!1,loadCanceled:!1,statusMessage:"",hoveredNode:null,hoveredRowWalks:[],hoveredBubble:null,pointerInPane:!1,stripHover:null,hoveredWalkRow:null,hoveredEdge:null,selectedNode:null,viewportDirty:0,positionsVersion:0,geometryVersion:0,builtViewport:void 0,paintedViewport:void 0,draggingNode:null,isPanning:!1,viewportOwner:"fit",viewportDirtyTimer:void 0,positionsDirtyFrame:0,lastFetchMs:void 0,readsShown:void 0,lastLayoutMs:void 0,lastGeometryMs:void 0,lastGeometryStrokeCount:void 0,viewportRebuildPending:!1}));var Cs=f(ae(),1),de=f(ne(),1),$=f(St(),1);function so(e,t){let n=new Set(t),o=e.nodes.filter(c=>n.has(c.name)),r=new Set(o.map(c=>c.id)),a=new Map(e.nodes.map(c=>[c.id,c.length])),i=new Map,s=e.paths?.flatMap(c=>{let d=c.nodeIds.findIndex(p=>r.has(p));if(d<0)return[];let l=c.nodeIds.filter(p=>r.has(p));i.set(c.name,{first:d,nodeIds:l});let b=c.nodeIds.slice(0,d).reduce((p,u)=>p+(a.get(u)??0),0);return[{...c,nodeIds:l,...c.start===void 0?{}:{start:c.start+b}}]});return{name:e.name,nodes:o,edges:e.edges.filter(c=>r.has(c.from)&&r.has(c.to)),...s?.length?{paths:s}:{},anchorPaths:je(e,i),pathVisits:e.pathVisits,anchoredBy:e.anchoredBy,referencePath:e.referencePath}}function Vi(e,t){let n=new Set(e.nodes.filter(c=>O(c)&&nr(c,t)).map(c=>c.id)),o=e.paths??[];if(n.size===0||o.length===0)return e;let r=o.map(c=>{let d=-1,l=-1;return c.nodeIds.forEach((b,p)=>{n.has(b)&&(d<0&&(d=p),l=p)}),d<0?void 0:{first:d,last:l}});if(r.every((c,d)=>c?.first===0&&c.last===o[d].nodeIds.length-1))return e;let a=new Set,i=[],s=new Map;return o.forEach((c,d)=>{let l=r[d];if(l){let b=c.nodeIds.slice(l.first,l.last+1);for(let p of b)a.add(p);i.push({...c,nodeIds:b}),s.set(c.name,{first:l.first,nodeIds:b})}}),{...e,nodes:e.nodes.filter(c=>a.has(c.id)),edges:e.edges.filter(c=>a.has(c.from)&&a.has(c.to)),paths:i,pathVisits:e.pathVisits&&hd(e.pathVisits,o,r,new Map(e.nodes.map(c=>[c.id,c.name]))),anchorPaths:je(e,s)}}function hd(e,t,n,o){let r=new Map,a=new Map;return t.forEach((i,s)=>{let c=q(i.name).name,d=n[s];i.nodeIds.forEach((l,b)=>{let p=o.get(l)??l,u=e.get(p);if(!u)return;let y=`${c} ${p}`,x=r.get(y)??0;for(;x<u.length&&u[x].path!==c;)x++;let k=u[x];if(r.set(y,x+1),k&&d&&b>=d.first&&b<=d.last){let h=a.get(p);h?h.push(k):a.set(p,[k])}})}),a}function fd(e,t,n){let o=q(e.name).name,r=new Map,a=[],i=()=>({a:-1/0,b:1/0,detour:[],bp:0}),s=[i()];for(let c of e.nodeIds){let d=t.get(c);if(!d)continue;let l=r.get(d.name)??0;r.set(d.name,l+1);let b=n.get(`${o} ${d.name}`)?.[l]??dr(d),p=s.at(-1),u=a.at(-1);if(O(d)){let y=d.stable.start,x=y+d.length,k=b!==(d.stable.strand??"+"),h=u!==void 0&&p.detour.length===0;h&&!u.inverted&&!k&&u.end===y?u.end=x:h&&u.inverted&&k&&u.start===x?u.start=y:(a.push({start:y,end:x,inverted:k}),s.push(i()))}else p.detour.push({node:d,strand:b}),p.bp+=d.length}return a.forEach((c,d)=>{s[d].b=c.start,s[d+1].a=c.end}),{path:e,runs:a,gaps:s}}function co(e,t){return Number.isFinite(e.a)&&Number.isFinite(e.b)&&e.b>=e.a&&Math.max(e.b-e.a,e.bp)<t}function Oi(e,t,n){let o=0,r=e.length;for(;o<r;){let a=o+r>>1;e[a]<=t?o=a+1:r=a}return o<e.length&&e[o]<n}function bd(e){let t=new Map;for(let n=1;n<e.length;n++){let o=e[n-1],r=e[n],a=o.stable.start+o.length;a!==r.stable.start&&(t.set(a,"reference-gap"),t.set(r.stable.start,"reference-gap"))}return t}function wd(e,t,n){let o=(r,a)=>{Number.isFinite(r)&&!n.has(r)&&n.set(r,a)};for(let{runs:r,gaps:a}of e){let i=r[0],s=r.at(-1);i&&s&&(o(i.start,"walk-end"),o(s.end,"walk-end"));for(let c of r)c.inverted&&c.end-c.start>=t&&(o(c.start,"inversion"),o(c.end,"inversion"));for(let c of a)c.b<c.a?(o(c.a,"backward"),o(c.b,"backward")):co(c,t)||(o(c.a,"variant"),o(c.b,"variant"))}for(let r=!0;r;){r=!1;let a=[...n.keys()].sort((s,c)=>s-c),i=e.flatMap(({runs:s,gaps:c})=>[...c.filter(d=>co(d,t)).map(d=>[d.a,d.b]),...s.filter(d=>d.inverted&&d.end-d.start<t).map(d=>[d.start,d.end])]);for(let[s,c]of i)Oi(a,s,c)&&(r||=!n.has(s)||!n.has(c),o(s,"overlap"),o(c,"overlap"))}return n}function yd(e,t){let n=[],o=[],r=()=>{let a=o[0],i=o.at(-1);if(a&&i){let s=a.stable.start,c=i.stable.start+i.length,d=`${s}-${c}`;n.push({node:{id:`${d}+`,name:d,length:c-s,depth:0,stable:{refName:a.stable.refName,start:s,rank:0,strand:"+"}},members:o})}o=[]};for(let a of e)t.has(a.stable.start)&&r(),o.push(a);return r(),n}function _i(e,t){let n=e.nodes.filter(O).sort((g,M)=>g.stable.start-M.stable.start),o=e.paths??[];if(n.length===0||o.length===0)return;let r=new Map(e.nodes.map(g=>[g.id,g])),a=fr(e),i=o.map(g=>fd(g,r,a)),s=wd(i,t,bd(n)),c=[...s.keys()].sort((g,M)=>g-M),d=yd(n,s),l=d.map(g=>g.node.stable.start),b=g=>{let M=0,v=l.length-1;for(;M<v;){let L=M+v+1>>1;l[L]<=g?M=L:v=L-1}return M},p=new Map,u=new Map;for(let g of d){p.set(g.node.id,g.members.map(M=>M.id));for(let M of g.members)u.set(M.id,g.node.id)}let y=new Map,x=g=>{let M=`${g.a} ${g.b} ${g.detour.map(L=>L.node.id+L.strand).join(",")}`,v=y.get(M);if(!v){let L=`r${y.size}`;v={id:`${L}+`,name:L,length:g.bp,depth:0,stable:{refName:n[0].stable.refName,start:Number.isFinite(g.a)?g.a:g.b,rank:1,strand:"+"}},y.set(M,v),p.set(v.id,g.detour.map(A=>A.node.id));for(let A of g.detour)u.has(A.node.id)||u.set(A.node.id,v.id)}return v},k=new Map,h=[],S=new Map,G=new Map,m=new Map;for(let{path:g,runs:M,gaps:v}of i){let L=[],A=[],C=!1,D=(T,U)=>{let P=L.at(-1);C&&P?.node===T&&P.strand===U||L.push({node:T,strand:U}),C=!0},V=T=>{C=!1,T.detour.length>0&&(D(x(T),"+"),C=!1)},H=T=>{(T.bp>0||T.b>T.a)&&A.push({start:T.a,end:T.b,bp:T.bp});let U=d[b(T.b>T.a?T.a:T.a-1)];for(let P of T.detour)u.has(P.node.id)||(u.set(P.node.id,U.node.id),p.get(U.node.id).push(P.node.id))};M.forEach((T,U)=>{let P=v[U];co(P,t)&&!Oi(c,P.a,P.b)?H(P):V(P);let N=b(T.start),E=b(T.end-1),W=T.end-T.start<t;if(T.inverted&&!W){C=!1;for(let B=E;B>=N;B--)D(d[B].node,"-");C=!1}else{T.inverted&&A.push({start:T.start,end:T.end,bp:T.end-T.start,inverted:!0});for(let B=N;B<=E;B++)D(d[B].node,"+")}}),V(v.at(-1));let Y=q(g.name).name,ee=0;L.forEach(({node:T,strand:U},P)=>{m.set(T.id,(m.get(T.id)??0)+1);let N=S.get(T.name)??[];N.push({path:Y,sample:g.sample??Y,start:ee,strand:U}),S.set(T.name,N),ee+=T.length;let E=L[P+1];if(E){let W=`${T.id}${U} ${E.node.id}${E.strand}`,B=G.get(W);B?B.pathIds.push(g.name):G.set(W,{from:T.id,to:E.node.id,fromStrand:U,toStrand:E.strand,pathIds:[g.name]})}}),h.push({...g,nodeIds:L.map(T=>T.node.id)}),k.set(g.name,A)}let w=[...d.map(g=>g.node),...y.values()].filter(g=>m.has(g.id)).map(g=>({...g,depth:m.get(g.id)}));return{graph:{...e,nodes:w,edges:[...G.values()],paths:h,pathVisits:S,reads:void 0},members:p,coarseOf:u,deviations:k,cuts:s}}var Ts=f(K(),1),J=f(ae(),1),No=f(Wc(),1),j=f(ne(),1);var bt=f(ae(),1),Ao=f(ne(),1);function it(e,t,n={}){return{nodePositions:n.drawsRows?{}:e.nodePositions,deletions:t.bypassed,deletionRoutes:e.deletionRoutes,stranded:e.stranded,hiddenEdges:t.hidden}}function st(e,t,n){let o=new Map;for(let a of e.nodes)if(er(a)){let{refName:i}=a.stable;if(n[a.id]?.length){let s=o.get(i)??o.set(i,{nodes:[],reach:0}).get(i);s.nodes.push(a),s.reach=Math.max(s.reach,a.length)}}for(let{nodes:a}of o.values())a.sort((i,s)=>i.stable.start-s.stable.start);let r=[];for(let a of t){let i=o.get(a.refName);if(!i)continue;let s=[],c=[],d=new Set,l,b=1/0,p=0,u=(a.start+a.end)/2,{nodes:y,reach:x}=i;for(let k=or(y,a.start-x);k<y.length&&y[k].stable.start<a.end;k++){let h=y[k],S=h.stable.start,G=S+h.length;if(G<=a.start)continue;let m=n[h.id];d.add(h.id),p+=Math.min(G,a.end)-Math.max(S,a.start);let w=[];for(let v of a.exons){let L=Math.max(v.start,S),A=Math.min(v.end,G);if(A<=L)continue;let C=Rn(m,(L-S)/h.length,(A-S)/h.length);C.length===1&&C.push({...C[0]}),w.push(xt(C))}w.length>0&&(s.push(...w),c.push({nodeId:h.id,d:w.join("")}));let g=Math.min(Math.max(u,S),G),M=Math.abs(g-u);if(M<b){b=M;let[v]=Rn(m,(g-S)/h.length,(g-S)/h.length);l=v}}l&&r.push({gene:a,exons:s.join(""),exonsByNode:c,nodeIds:d,at:l,covered:p/(a.end-a.start)})}return r}var $i=(e,t)=>!!e.referencePath&&q(t).name===e.referencePath;function kd(e,t){return(e.paths??[]).filter(n=>n.name===t).sort((n,o)=>(n.start??0)-(o.start??0))}function Hi(e,t){let n=kd(e,t),o=n[0];if(!o)return;let r=new Map(e.nodes.map(h=>[h.id,h])),a=new Map;e.edges.forEach((h,S)=>{a.set(`${h.from}>${h.to}`,S)});let i=h=>r.get(h)?.length??0,s=h=>h.nodeIds.reduce((S,G)=>S+i(G),0),c=n.reduce((h,S)=>h+s(S),0),d=o.start===void 0?void 0:{contig:o.contig??Qo(q(t).name),start:o.start,end:Math.max(...n.map(h=>(h.start??0)+s(h)))},l=d?d.end-d.start:c,b=new Set,p=new Set,u=new Map,y=0;for(let h of n)d&&(y=Math.max(y,(h.start??0)-d.start)),h.nodeIds.forEach((S,G)=>{if(b.add(S),G>0){let w=h.nodeIds[G-1],g=a.get(`${w}>${S}`)??a.get(`${S}>${w}`);g!==void 0&&p.add(g)}let m=i(S);u.has(S)||u.set(S,l>0?(y+m/2)/l:0),y+=m});let x=$i(e,t),k=x?[]:(e.paths??[]).filter(h=>$i(e,h.name));return{name:t,reference:x,range:d,nodeIds:b,edgeIndexes:p,progress:u,steps:n.reduce((h,S)=>h+S.nodeIds.length,0),bp:c,referenceBp:k.length>0?k.reduce((h,S)=>h+s(S),0):void 0}}function Wi(e,t,n,o){let r=new Map(e.nodes.map(i=>[i.id,i])),a=new Map;for(let[i,s]of t.progress){let c=r.get(i),d=o?.midpoints.get(i),l=n.field==="progress"?s:o&&d!==void 0&&!(c?.stable&&c.stable.rank>0)?(d-o.start)/o.span:void 0;a.set(i,Br(n,l))}return a}function Sd(e,t){let n=new Set,o=0,r=e.referencePath;if(!r||t.reference)return{reversed:n,bp:o};let a=q(t.name).name,i=new Map(e.nodes.map(s=>[s.id,s]));for(let s of t.progress.keys()){let c=i.get(s),d=c?e.pathVisits?.get(c.name):void 0,l=d?.find(p=>p.path===a)?.strand,b=d?.find(p=>p.path===r)?.strand;l&&b&&l!==b&&(n.add(s),o+=c.length)}return{reversed:n,bp:o}}function ct(e,t,n){let o=new Set,r=t.filter(s=>!o.has(s.walk)&&o.add(s.walk)).flatMap(s=>{let c=Hi(e,s.walk);return c?[{walk:c,layer:s}]:[]}).sort((s,c)=>Number(c.walk.reference)-Number(s.walk.reference));if(r.length===0)return;let a=0,i=r.map(({walk:s,layer:c})=>{let d=Nn(c,s.reference,s.reference?0:a++,r.length===1),{reversed:l,bp:b}=Sd(e,s);return{...s,encoding:d,colors:Wi(e,s,d,n),reversed:l,reversedBp:b}});return ji(i,n)}var Rd={field:"progress",scheme:"red"};function dt(e,t,n,o){return t.walks.map(r=>{let a=n.find(s=>s.walk===r.name)?.color,i=Nn({walk:r.name,color:{...Rd,...a}},r.reference,0);return ji([{...r,encoding:i,colors:Wi(e,r,i,o)}],o)})}function ji(e,t){return{walks:e,referenceDomain:t?{start:t.start,end:t.start+t.span}:void 0,nodeIds:new Set(e.flatMap(n=>[...n.nodeIds])),edgeIndexes:new Set(e.flatMap(n=>[...n.edgeIndexes])),names:new Set(e.map(n=>n.name))}}var Xi="8.0.1";var uo='font-family="Helvetica, Arial, sans-serif" font-size="11"',xd=48,qt=18,Md=16,Ld=22,vd="rgb(160,160,160)",Yi="#1c1c22";function Me(e){return e.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}function po(e,t,n,o,r,a,i,s=1){let c=o.length>1?xd:qt,d=o.length>1?`fill="url(#${e})"`:`fill="${o[0].color}"${s<1?` fill-opacity="${s}"`:""}`,l=o.length>1?`<linearGradient id="${e}">${o.map(p=>`<stop offset="${p.offset}" stop-color="${p.color}"/>`).join("")}</linearGradient>`:"";return{width:Math.max(c+5+(r.length+a.length)*Rt,(i?.length??0)*Rt),markup:`${l}<g transform="translate(${t} ${n})" ${uo}><rect y="5" width="${c}" height="8" rx="2" ${d}/><text x="${c+5}" y="13"><tspan font-weight="bold">${Me(r)}</tspan>${Me(a)}</text>${i?`<text y="28">${Me(i)}</text>`:""}</g>`}}function Td(e,t){return{width:qt+5+4*Rt,markup:`<g transform="translate(${e} ${t})" ${uo}><rect x="1" y="4" width="${qt-2}" height="10" rx="4" fill="none" stroke="${Dn}" stroke-width="2"/><text x="${qt+5}" y="13">exon</text></g>`}}function zi(e,t,n,o,r,a){let i=oa(o,a);return po(e,t,n,In(o.encoding),r,i.delta+i.outside+i.reversed,i.scale)}function Gd(e,t){return e.replaceAll(/([ML])(-?[\d.e-]+),(-?[\d.e-]+)/g,(n,o,r,a)=>`${o}${+(Number(r)*t.scaleX+t.translateX).toFixed(1)},${+(Number(a)*t.scaleY+t.translateY).toFixed(1)}`)}function Pd(e,t,n,o,r){return`<rect x="${e-n/2}" y="${t-$e-Sn+2}" width="${n}" height="${$e+Sn*2-2}" rx="3" fill="#fff" fill-opacity="0.85" stroke="${Dn}"/><text x="${e}" y="${t}" font-family="Helvetica, Arial, sans-serif" font-size="${$e}" fill="${Yi}" text-anchor="middle"><tspan font-style="italic" font-weight="600">${Me(o)}</tspan>${r?Me(r):""}</text>`}function mo(e,t,n={}){let o=n.width??1200,r=n.height??800,a=n.region,i=n.colorDomain??a,s=n.walkRows,c=nt(t,{region:n.fitToDrawing?void 0:a,extent:s&&t.extent?ze(s,n.walkRowPitch):void 0}),d=t.pixelRows??!1,l=new Map(e.nodes.map(P=>[P.id,P])),b=Gt(n.colorScheme??"auto",e),p=b==="reference-position"&&!t.tubeMap?Pe(e,i):void 0,u=p&&{start:p.start,end:p.start+p.span},y=He(e,t.tubeMap?[]:ye(e),n.showDeletionEdges),x=n.walks??[],k=x.some(P=>P.color?.field==="reference")?p??Pe(e,i):void 0,h=x.length>0&&!t.tubeMap?ct(e,x,k):void 0,S=Nt(n.facet),G=S.field&&h&&h.walks.length>1?dt(e,h,x,k):void 0,m=Mt(e.paths?.length?Xe(e.paths):[]),w=P=>m.get(P)??P,g=n.referenceName??bn(e,a),M=h?.referenceDomain&&{...h.referenceDomain,name:g},v=n.contigThickness??6,L=n.nodeWidth??"depth",A=n.genes?.length&&!t.tubeMap&&!s?st(e,n.genes,t.nodePositions):[],C=Et(e,l,v,L),D=0;function V(P,N,E,W){let B=[],ie=ta(ea(A,C.halfWidthPx,P,pe=>Gd(pe,N)),{id:`exons${D++}`,width:E,height:W});ie&&B.push(ke(ie));let X=pe=>({x:pe.x*N.scaleX+N.translateX,y:pe.y*N.scaleY+N.translateY}),se={width:E,height:W};for(let{item:pe,x:Ve,y:Te,w:_c,text:$c}of ur(ia(A,X,v,aa(t.nodePositions,N)),se,pr(se))){let Hc=X(pe.at).y+v/2;B.push(`<line x1="${Ve}" x2="${Ve}" y1="${Te-$e-2}" y2="${Hc}" stroke="${Yi}" stroke-width="0.8" stroke-opacity="0.6"/>`,Pd(Ve,Te,_c,pe.gene.name,$c.slice(pe.gene.name.length)))}s&&B.push(ke(Fn(s,{...N,width:E,height:W,...n.walkRowPitch},{ramp:u,rowGenes:n.rowGenes})));let yt=Ye(s,t,n.walkRowPitch);for(let{label:pe,y:Ve}of yt){let Te=Ve*N.scaleY+N.translateY;Te>=0&&Te<=W&&B.push(`<text x="6" y="${Te+4}" ${uo} stroke="#fff" stroke-width="3" paint-order="stroke">${Me(pe)}</text>`)}return B.join("")}function H(P,N,E){let W=Ie(c,N,E,d,G?{padLeft:oe,padTop:oe,padRight:oe,padBottom:oe}:{});if(!W)return"";let B=Se(W.scale,d),{canvas:ie,markup:X}=Jr(N,E),se=new Qr(ie);se.uploadGeometry(Bt({...it(t,y,{drawsRows:!!s}),graph:e,nodeById:l,colorScheme:b,contigThickness:v,connectorThickness:n.connectorThickness??2,drawPaths:!1,nodeWidth:L,linearLayout:n.linearLayout,highlight:P,axis:B,referenceRamp:p}));let yt={scaleX:B.scaleX,scaleY:B.scaleY,translateX:W.translateX,translateY:W.translateY};return se.updateTransform({...yt,dpr:1}),se.render([1,1,1,1]),X()+V(P,yt,N,E)}let Y=[],ee;if(G){let P=It(G.map(E=>E.walks[0].name),S.field||"walk",S.domain),N=At({count:P.count,bounds:c,pixelRows:d,width:o,room:r,columns:P.columns??S.columns});G.forEach((E,W)=>{let B=P.cells[W],ie=B%N.columns*(N.width+Pn),X=Math.floor(B/N.columns)*(N.height+Pt+Pn),se=E.walks[0];Y.push(zi(`key${W}`,ie+6,X+2,se,w(se.name),M).markup,`<svg x="${ie}" y="${X+Pt}" width="${N.width}" height="${N.height}">${H(E,N.width,N.height)}</svg>`)}),ee=N.total}else{let P=6,N=X=>{Y.push(X.markup),P+=X.width+Md};if(h&&(h.walks.forEach((X,se)=>{N(zi(`key${se}`,P,2,X,w(X.name),M))}),N(po("faded",P,2,[{offset:0,color:vd}],"",`not on ${h.walks.length===1?w(h.walks[0].name):"these walks"}`,void 0,.3))),s){let X=Bn(En(s,{ramp:u,genes:n.rowGenes?.size?n.rowGeneGaps:void 0}),P,2,"rows-key");N({width:X.width,markup:ke(X.tree)})}else!h&&p&&N(po("ramp",P,2,In({field:"reference",scheme:"rainbow"}),g?`${g} position`:"Reference position","",na(g,p.start,p.start+p.span)));A.some(X=>X.exonsByNode.length>0)&&N(Td(P,2));let E=Y.length>0?Pt:0,W=o-2*F,B=d||!(c.w>0)?c.h:c.h*W/c.w,ie=Math.max(160,Math.min(r-E,Math.ceil(B+2*F)));Y.push(`<svg y="${E}" width="${o}" height="${ie}">${H(h,o,ie)}</svg>`),ee=E+ie}let T=n.walkStrip;if(T&&!s&&!t.tubeMap){let P=Vt(T.rows,{width:o}),N=Bn(En(T.rows,{ramp:u,genes:qr(P,T.rowGenes,T.rowGeneGaps)}),6,ee+P.height,"strip-key");Y.push(`<line x1="0" x2="${o}" y1="${ee+.5}" y2="${ee+.5}" stroke="#ddd"/>`,`<svg y="${ee}" width="${o}" height="${P.height}">${ke(Fn(T.rows,P,{ramp:u,rowGenes:T.rowGenes,idPrefix:"strip"}))}${ke(Kr(T.rows,P,new Set(x.map(E=>E.walk))))}</svg>`,ke(N.tree)),ee+=P.height+Ld}let U=JSON.stringify({generator:`@jbrowse/bandage-core@${Xi}`,...n.spec===void 0?{}:{spec:n.spec}});return`<svg xmlns="http://www.w3.org/2000/svg" width="${o}" height="${ee}" viewBox="0 0 ${o} ${ee}"><metadata>${Me(U)}</metadata><rect width="${o}" height="${ee}" fill="#fff"/>${Y.join("")}</svg>
|
|
3
|
+
`}var Ui={...ue,colorScheme:"auto",nodeWidth:"depth",contigThickness:6,connectorThickness:2};function lo(e){let t=Ui,n={};for(let[o,r]of Object.entries(e))r!==void 0&&r!==t[o]&&(n[o]=r);return n}var Ad=24,Nd=e=>e.bp1>e.bp0;function Ki(e,t){let n=e.filter(Nd);if(n.length===0){let a=e[0];return a?[{tx:a.x0,sx:t(a.bp0)}]:[]}let o=n.map(a=>({c:a,s0:t(a.bp0),s1:t(a.bp1),trimLeft:0,trimRight:0}));for(let a=0;a+1<o.length;a++){let i=o[a],s=o[a+1],d=Math.min(s.c.x0-i.c.x1,Ad)-(s.s0-i.s1);if(d>0){let l=(i.s1-i.s0)/2,b=(s.s1-s.s0)/2,p=Math.min(d/2,l),u=Math.min(d-p,b);p=Math.min(d-u,l),i.trimRight=p,s.trimLeft=u}}let r=[];for(let{c:a,s0:i,s1:s,trimLeft:c,trimRight:d}of o)r.push({tx:a.x0,sx:i+c},{tx:a.x1,sx:s-d});return r}function qi(e,t){let n=e.length;if(n===0)return t;let o=e[0],r=e[n-1];if(t<=o.tx)return o.sx+(t-o.tx);if(t>=r.tx)return r.sx+(t-r.tx);let a=0,i=n-1;for(;i-a>1;){let l=a+i>>1;e[l].tx<=t?a=l:i=l}let s=e[a],c=e[i],d=c.tx-s.tx;return d>0?s.sx+(t-s.tx)/d*(c.sx-s.sx):s.sx}var Id=.05,Jt=9;function Cd(e,t){let{minY:n,maxY:o}=e.layout.bounds,r=o-n;return e.columns&&r>0?Math.max(Id,Math.min(1,t/r)):1}function go(e,t){let{scaleX:n,translateX:o,translateY:r}=t,a=t.scaleY*Cd(e,t.usableHeight),i=c=>(c-e.yOffset)*a+r,{columns:s}=e;if(s){let c=Ki(s,d=>d*n+o);return{x:d=>qi(c,d),y:i,yScale:a}}return{x:c=>c*n+o,y:i,yScale:a}}function ho(e,{x:t,y:n},o,r){let a=null;return e.layout.nodes.forEach(i=>{i.order>=0&&t(i.x-Jt)<=o&&o<=t(i.x+i.pixelWidth+Jt)&&n(i.y-Jt)<=r&&r<=n(i.y+i.contentHeight+Jt)&&(a=i.name)}),a}var rn=f(K(),1),Ss=f(ae(),1),Po=f(St(),1);function Ji(e){if(typeof e!="object"||e===null)return!1;let t=e;return typeof t.horizontalScroll=="function"&&typeof t.zoomTo=="function"&&"coarseDynamicBlocks"in t&&"dynamicBlocks"in t}function Zi(e){return e.reduce((t,n)=>t&&t.end-t.start>=n.end-n.start?t:n,void 0)}function pt(e,t){let n=Zi(e.dynamicBlocks.contentBlocks.filter(a=>a.refName===t.refName&&a.assemblyName===t.assemblyName)),{bpPerPx:o}=e;if(!n||!(o>0))return;let r=n.offsetPx-e.offsetPx;return n.reversed?{scale:-1/o,translateX:r+n.end/o}:{scale:1/o,translateX:r-n.start/o}}function Zt(e){let t=Zi(e.dynamicBlocks.contentBlocks),n=t?.displayedRegionIndex===void 0?void 0:e.displayedRegions[t.displayedRegionIndex];return t&&e.bpPerPx>0?{refName:t.refName,assemblyName:t.assemblyName,start:t.start,end:t.end,bpPerPx:e.bpPerPx,span:e.bpPerPx*e.width,regionStart:n?.start??t.start,regionEnd:n?.end??t.end}:void 0}function fo(e,t,n=!0){let o=e.end-e.start,r=n?Math.max(0,Math.min(e.span,(t-o)/2)):0,a=Math.max(e.regionStart,Math.floor(e.start-r)),i=Math.min(e.regionEnd,Math.ceil(e.end+r)),s=i-a-t;return s>0&&(a+=Math.floor(s/2),i-=Math.ceil(s/2)),{refName:e.refName,assemblyName:e.assemblyName,start:a,end:i}}function Qi(e,t,n=!0){if(e?.refName!==t.refName||e.assemblyName!==t.assemblyName)return!1;if(n)return e.start<=t.start+1&&t.end<=e.end+1;let o=fo(t,1/0,!1);return Math.abs(e.start-o.start)<1&&Math.abs(e.end-o.end)<1}var on=f(K(),1),ve=f(ae(),1);var Ed=.9,bo=2,Bd=1e3;function wo(e,t,n,o=a=>a,r=[]){let a=new Map(e.nodes.map(s=>[s.name,s])),i=[];for(let s of t){let c=[],d=1/0,l=-1/0,b=1/0,p=[],u=[];for(let S of Dt(s)){let G=a.get(S),m=G&&n[G.id];if(!(!G||!m?.length)){if(O(G)&&(G.stable.start<s.start||G.stable.start>=s.end)){u.push(m[Math.floor(m.length/2)]);continue}p.push(G.id),c.push(xt(m.length===1?[m[0],m[0]]:m));for(let w of m)d=Math.min(d,w.x),l=Math.max(l,w.x),b=Math.min(b,w.y)}}if(p.length===0)continue;let y={x:(d+l)/2,y:b},x=u.length?{x:u.reduce((S,G)=>S+G.x,0)/u.length,y:u.reduce((S,G)=>S+G.y,0)/u.length}:y,k=new Map;for(let S of s.routes??[])for(let G of new Set(S.steps))k.set(G,(k.get(G)??0)+1);let h=[];for(let S of s.routes??[]){if(s.longestAlleleLength<Bd)break;if(S.steps.length===0)continue;let G=Math.min(...S.steps.map(g=>k.get(g))),m,w=-1;for(let g of S.steps)if(k.get(g)===G)for(let M of n[g]??[]){let v=Math.hypot(M.x-x.x,M.y-x.y);v>w&&(w=v,m=M)}m&&h.push({route:S,at:m,text:Fd(S,o)})}i.push({bubble:s,...Ft(s,r),path:c.join(""),labelAt:y,members:p.length,nodeIds:p,whole:p.length>=Ed*e.nodes.length,routes:h})}return i}function Fd(e,t){let n=[...new Set(e.walks.map(t))].sort(),o=n.slice(0,bo).join(", "),r=n.length>bo?` +${n.length-bo}`:"";return`${o}${r} \xB7 ${Or(e.bp)}`}function yo(e){if(!e.nodes.some(O))return[];let t=new Map(e.nodes.map(p=>[p.id,p])),n=br(e),o=new Map(n.map((p,u)=>[p,u])),r=new Int32Array(n.length+1),a=new Map,i=new Set;for(let p of e.edges){let u=o.get(p.from),y=o.get(p.to);if(u===void 0||y===void 0||u===y)continue;i.add(`${p.from}>${p.to}`).add(`${p.to}>${p.from}`);let[x,k]=u<y?[u,y]:[y,u];r[x+1]++,r[k]--;let[h,S]=u<y?[p.from,p.to]:[p.to,p.from];(a.get(h)??a.set(h,new Set).get(h)).add(S)}for(let p=1;p<r.length;p++)r[p]+=r[p-1];let s=e.nodes.filter(O).sort((p,u)=>p.stable.start-u.stable.start),c=new Set([s[0].id,s.at(-1).id]),d=s.map(p=>[p,o.get(p.id)]).filter(([p,u])=>c.has(p.id)||r[u]===0).sort(([p,u],[y,x])=>u-x||p.stable.start-y.stable.start),l=e.paths?.map(p=>{let u=new Map;return p.nodeIds.forEach((y,x)=>{u.has(y)||u.set(y,x)}),u}),b=[];for(let p=0;p+1<d.length;p++){let[u,y]=d[p],[x,k]=d[p+1],h=n.slice(y+1,k);if(h.length===0)continue;let S=new Map([[u.id,{min:0,max:0,n:1}]]);for(let V of[u.id,...h]){let H=S.get(V);if(H)for(let Y of a.get(V)??[]){if(o.get(Y)>k)continue;let T=Y===x.id?0:t.get(Y).length,U=S.get(Y);S.set(Y,{min:Math.min(U?.min??1/0,H.min+T),max:Math.max(U?.max??-1/0,H.max+T),n:Math.min(Vr,H.n+(U?.n??0))})}}let G=l&&Dd(e,t,l,u.id,x.id),m=G?.n?G:void 0,w=m??S.get(x.id)??{min:0,max:0,n:0},g=G!==void 0&&G.left>0,M=u.stable.start+u.length,v=x.stable.start,L=[u.id,...h.filter(V=>O(t.get(V))),x.id],A=L.some((V,H)=>H>0&&!i.has(`${L[H-1]}>${V}`)),C=A||g,D=A&&!m;b.push({refName:u.stable.refName,start:M,end:v,segmentCount:h.length+2,pathCount:w.n,inversion:!1,shortestAlleleLength:D?v-M:w.min,longestAlleleLength:D?v-M:w.max,segments:[u,...h.map(V=>t.get(V)),x].map(V=>V.name).join(","),shortestAllele:void 0,longestAllele:void 0,partial:C,routes:m?.routes})}return b}function Dd(e,t,n,o,r){let a=new Map,i=1/0,s=-1/0,c=0;return e.paths.forEach((d,l)=>{let b=n[l].get(o),p=n[l].get(r);if(b===void 0||p===void 0){(b!==void 0||p!==void 0)&&c++;return}let u=d.nodeIds.slice(Math.min(b,p)+1,Math.max(b,p));p<b&&u.reverse();let y=0;for(let h of u)y+=t.get(h)?.length??0;let x=u.join(","),k=a.get(x)??{steps:u,bp:y,walks:[]};k.walks.push(d.name),a.set(x,k),i=Math.min(i,y),s=Math.max(s,y)}),a.size||c?{min:i,max:s,n:a.size,left:c,routes:[...a.values()]}:void 0}function ko(e,t,n){if(t==="uniform"||t==="grey")return;let o={...Cr(e),referenceRamp:n};return new Map(e.nodes.map((r,a)=>[r.id,Nr(Er(r,a,t,o))]))}var lt=f(K(),1),ps=f(ts(),1),le=f(ae(),1);var Qt=f(K(),1),ns=f(ae(),1),Vd=/^[^#]+#\d+$/;function Od(e,t){let n=e.assemblyNameToPanSN??{},o=new Set(Object.values(n)),r={};for(let{name:a,aliases:i}of t){let s=i.find(c=>Vd.test(c));s!==void 0&&!o.has(s)&&(r[a]=s)}return Object.keys(r).length===0?e:{...e,assemblyNameToPanSN:{...r,...n}}}function be(e,t){let n=(0,Qt.readConfObject)(t,"adapter");return n.type==="GbzBaseSyntenyAdapter"?Od(n,(0,ns.getSession)(e).assemblyManager.assemblyList.map(o=>({name:(0,Qt.readConfObject)(o,"name"),aliases:(0,Qt.readConfObject)(o,"aliases")??[]}))):n}function So(e){let t=[];for(let n of[...e].sort((o,r)=>o.start-r.start)){let o=t.at(-1);o&&n.start<=o.end?o.end=Math.max(o.end,n.end):t.push({...n})}return t}function Ro(e){let t=[],n=new Map;for(let o of[...e].sort((r,a)=>r.start-a.start)){let r=`${o.refName} ${o.strand} ${o.name}`,a=n.get(r);if(a&&o.start<a.end)a.end=Math.max(a.end,o.end),a.exons=So([...a.exons,...o.exons]);else{let i={...o,exons:So(o.exons)};t.push(i),n.set(r,i)}}return t}var xo=f(K(),1),ut=new Set(["Gff3TabixAdapter","Gff3Adapter","BedTabixAdapter","BedAdapter","GtfTabixAdapter","GtfAdapter","BigBedAdapter","NCListAdapter"]),_d=/gene|refseq|gencode|ensembl|annotation/i,$d=new Set(["BedTabixAdapter","BedAdapter"]);function en(e,t){if(t)return e.find(o=>o.trackId===t);let n=e.filter(o=>ut.has(o.adapterType));return n.find(o=>_d.test(`${o.trackId} ${o.name??""}`))??n.find(o=>!$d.has(o.adapterType))}function os(e,t){let n=e.tracks?.find(o=>(0,xo.readConfObject)(o.configuration,"trackId")===t)?.displays[0];return n?(0,xo.readConfObject)(n.configuration,"filter")??[]:[]}var Hd=new Set(["chromosome","region","contig","supercontig","scaffold"]);function re(e,t){return typeof e.get=="function"?e.get(t):e[t]}var Wd=new Set(["exon","CDS","five_prime_UTR","three_prime_UTR","UTR"]);function rs(e,t){let n=re(e,"type");typeof n=="string"&&Wd.has(n)&&t.push({start:re(e,"start"),end:re(e,"end")});let o=re(e,"subfeatures");for(let r of o??[])rs(r,t)}function jd(e){let t=[...e].sort((o,r)=>o.start-r.start),n=[];for(let o of t){let r=n.at(-1);r&&o.start<=r.end?r.end=Math.max(r.end,o.end):n.push({...o})}return n}function tn(e){let t=[];for(let n of e){let o=re(n,"gene_name")??re(n,"name")??re(n,"gene")??re(n,"gene_id"),r=re(n,"start"),a=re(n,"end");if(!o||!(a>r)||Hd.has(re(n,"type")))continue;let i=[];rs(n,i),t.push({name:o,refName:re(n,"refName"),start:r,end:a,strand:re(n,"strand")??0,exons:i.length?jd(i):[{start:r,end:a}]})}return Ro(t)}var vo=new Set(["BedAdapter","BedTabixAdapter","BigBedAdapter","VcfAdapter","VcfTabixAdapter"]),Xd=/repeat|tandem|\bstr\b|vntr|trf|trgt|vamos|expansion|microsat/i;function as(e,t){return t?e.find(o=>o.trackId===t):e.filter(o=>vo.has(o.adapterType)).find(o=>Xd.test(`${o.trackId} ${o.name??""}`))}function mt(e,t){return typeof e.get=="function"?e.get(t):e[t]}var is=/^\w+=[^;]*(;\w+=[^;]*)*$/;function zd(e){let t=mt(e,"name");if(!(typeof t!="string"||!is.test(t)))return Object.fromEntries(t.split(";").map(n=>{let o=n.indexOf("=");return[n.slice(0,o),n.slice(o+1)]}))}function me(e,t){let n=mt(e,t);return n!==void 0?n:mt(e,"INFO")?.[t]??zd(e)?.[t]}var ss=["RUS","MOTIFS","RU","motifs","motif","sequence","consensus"],Yd=["RUL","period","PERIOD","consensusSize","unit","unitLength"],Ud=["TRID","REPID","VARID","ID","name","id"];function nn(e,t){for(let n of t){let o=me(e,n),r=String((Array.isArray(o)?o[0]:o)??"").split(",")[0].trim();if(r!==""&&r!==".")return r}}var cs=/^[ACGTURYSWKMBDHVN]+$/i;function Kd(e){let t=Number(nn(e,Yd));if(Number.isFinite(t)&&t>0)return Math.round(t);let n=nn(e,ss);return n&&cs.test(n)?n.length:void 0}function Le(e){return(Array.isArray(e)?e:String(e??"").split(",")).map(n=>{let o=n===""||n===null||n===void 0?NaN:Number(n);return Number.isFinite(o)?o:void 0})}function Lo(e){return(Array.isArray(e)?e:String(e??"").split(",")).map(n=>{let o=String(n??"").trim();return o===""||o==="."?void 0:o})}var Mo="<CNV:TR>";function qd(e){let t=Lo(mt(e,"ALT"));if(!t.includes(Mo))return;let n=Le(me(e,"RN")),o=Lo(me(e,"RUS")),r=Le(me(e,"RUL")),a=Le(me(e,"RUC")),i=Le(me(e,"RB")),s=0;return t.map((c,d)=>{let l=n[d]??(c===Mo?1:0),b=0,p=0;for(let u=0;u<l;u++,s++){let y=o[s],x=r[s]??(y&&cs.test(y)?y.length:void 0),k=a[s],h=i[s]??(x&&k!==void 0?Math.round(x*k):void 0);h!==void 0&&(b+=h,p++)}return c===Mo&&l>0&&p===l?b:void 0})}function Jd(e,t,n){let o=e?.includes("|");return(e??"").split(/[/|]/).flatMap((r,a)=>{let i=Number(r),s=i>0?t[i-1]:n;return!Number.isInteger(i)||s===void 0?[]:[{bp:s,...o?{haplotype:a+1}:{}}]})}function Zd(e,t,n){let o=mt(e,"samples"),r={};for(let[a,i]of Object.entries(o??{})){let s=Le(i.SD),c=Le(i.AL).flatMap((l,b)=>l!==void 0&&l>0?[s[b]===void 0?{bp:l}:{bp:l,spanningReads:s[b]}]:[]),d=c.length>0||!t?c:Jd(Lo(i.GT)[0],t,n);d.length>0&&(r[a]=d)}return Object.keys(r).length>0?r:void 0}function Qd(e,t){let n=me(e,"start"),o=me(e,"end"),r=Le(me(e,"SVLEN"))[0];return t&&r!==void 0?{start:n+1,end:n+1+r}:{start:n,end:o}}function ds(e){let t=[];for(let n of e){let o=qd(n),{start:r,end:a}=Qd(n,o!==void 0),i=Kd(n);if(!(a>r)||i===void 0)continue;let s=me(n,"refName"),c=nn(n,ss),d=nn(n,Ud);t.push({key:`${s}:${r}-${a}`,name:(d&&!is.test(d)?d:void 0)??(c&&c.length<=12?`(${c})n`:`${s}:${(r+1).toLocaleString()}-${a.toLocaleString()}`),refName:s,start:r,end:a,unit:i,motif:c,calls:Zd(n,o,a-r)})}return t.sort((n,o)=>n.start-o.start)}var us=Di.views(e=>({get defaultLayoutMode(){return"force"},get defaultColorScheme(){return"auto"},get defaultHighlightOnHover(){return!0},get hasPendingSource(){return!1},get canRetryLoad(){return!1},get sourceTrack(){try{return(0,le.getContainingTrack)(e).configuration}catch{return}}})).views(e=>({get chosenLayoutMode(){return e.layoutMode??e.defaultLayoutMode},get chosenColorScheme(){return e.colorScheme??e.defaultColorScheme},get chosenHighlightOnHover(){return e.highlightOnHover??e.defaultHighlightOnHover},get litNode(){return this.chosenHighlightOnHover?e.hoveredNode:null}})).views(e=>({get paneWidth(){return(0,le.getContainingView)(e).width},get paneMeasured(){return!0},get drawnGraph(){return e.layoutResult?.tubeMap?.coarse?.graph??e.graph}})).views(e=>({get nodeById(){if(e.drawnGraph){let t=new Map;for(let n of e.drawnGraph.nodes)t.set(n.id,n);return t}},get nodeLengths(){let t=new Map;for(let n of e.drawnGraph?.nodes??[])t.set(n.id,n.length);return t},get nodeCount(){return e.graph?.nodes.length??0},get edgeCount(){return e.graph?.edges.length??0},get pathCount(){return e.graph?.paths?.length??0},get hasGraph(){return e.graph!==void 0},get geometryPainted(){return io(e)},get showLoading(){return e.error===void 0&&(e.isLoading||e.hasPendingSource||e.graph!==void 0&&!io(e))},get canCancelLoad(){return e.isLoading&&!e.layoutResult},get usesLayoutEngine(){return e.graph?yr(e.chosenLayoutMode,e.graph):!1},get canAnchorLayout(){return e.graph?.nodes.some(t=>t.stable?.rank===0)??!1},get anchorPaths(){return e.graph?.anchorPaths??[]},get walkChoices(){let t=e.graph?.paths;return t?.length?Xe(t):[]},get effectiveDrawPaths(){return e.drawPaths&&Tn(e.graph?.paths?.length??0)},get activeReferencePath(){return e.graph?.referencePath},get rampDomain(){return e.colorDomain??e.graphRegion},get walkRamp(){let{graph:t}=e;return t&&e.walkLayers.some(n=>n.color?.field==="reference")?Pe(t,this.rampDomain):void 0},get modeDrawsNodes(){return _(e.chosenLayoutMode).drawsNodes},get liftedWalkLayers(){return e.walkLayers.length>0||!this.modeDrawsNodes?e.walkLayers:e.hoveredRowWalks.map(t=>({walk:t}))},get walkLift(){let{graph:t}=e,n=this.liftedWalkLayers;return t&&n.length>0&&!e.layoutResult?.tubeMap?ct(t,n,this.walkRamp):void 0},get facetPanels(){let{graph:t}=e,n=this.walkLift;return e.facet.field!==""&&this.modeDrawsNodes&&t&&n&&e.walkLayers.length>1&&n.walks.length>1?dt(t,n,e.walkLayers,this.walkRamp):void 0},get drawnWalks(){return this.facetPanels?.map(t=>t.walks[0])??this.walkLift?.walks??[]},get liftsWalks(){return!Ce.has(e.chosenLayoutMode)},get walkReference(){let t=this.walkLift?.referenceDomain;return t&&{...t,name:e.graphRegion?.refName}},get walkLabels(){return Mt(this.walkChoices)},walkLabel(t){return this.walkLabels.get(t)??t},get liftPaintsOffReference(){for(let t of this.walkLift?.walks??[])if(t.encoding.field!=="walk"){for(let n of t.colors.values())if(n===Fr)return!0}return!1},get liftedWalksLabel(){let t=this.walkLift?.walks??[];return t.length===1?this.walkLabel(t[0].name):"these walks"},get effectiveColorScheme(){return e.layoutResult?.tubeMap&&(this.tubeMapReads||e.chosenColorScheme==="auto")?"uniform":Gt(e.chosenColorScheme,e.graph)},get tubeMapReads(){return(e.layoutResult?.tubeMap?.layout.reads.length??0)>0},get colorSchemeLock(){return this.walkLift?{value:"By walk",why:"Each lifted walk colours its own lane: set it under the menu, Walk, Colour"}:this.tubeMapReads?{value:"By strand",why:"Reads take the reds and blues, so the tube map leaves its nodes clear"}:void 0},get nodePositions(){return e.layoutResult?.nodePositions},get labelsNodeSizes(){return!e.layoutResult?.tubeMap&&!this.walkLift},get rowLabels(){return e.layoutResult?.rowLabels??[]},get alleleDeletions(){return e.layoutResult?.alleleDeletions??[]},get deletionRoutes(){return e.layoutResult?.deletionRoutes},get stranded(){return e.layoutResult?.stranded},get pixelRows(){return e.layoutResult?.pixelRows??!1},get zoomPercent(){return`${(e.scale*100).toFixed(1)}%`},get isDefaultViewport(){return e.scale===1&&e.translateX===0&&e.translateY===0}})).views(e=>({get poppedFrom(){return e.popStack.at(-1)},get derivedBubbles(){return e.graph?yo(e.graph):[]}})).views(e=>({get bubbles(){return e.indexBubbles?.length?e.indexBubbles:e.derivedBubbles}})).views(e=>({get cutHaplotypes(){},get sourceGfaLocation(){},get sourceAdapter(){let t=e.sourceTrack;return t?be(e,t):void 0},get sourceTrackId(){let t=e.sourceTrack;return t?(0,lt.readConfObject)(t,"trackId"):void 0},get assemblyTrackChoices(){let t=e.graphRegion;return t?(0,le.getSession)(e).tracks.filter(n=>(0,lt.readConfObject)(n,"assemblyNames").includes(t.assemblyName)).map(n=>({trackId:n.trackId,name:(0,lt.readConfObject)(n,"name"),adapterType:(0,lt.readConfObject)(n,"adapter").type})):[]}})).views(e=>({get geneTrackChoices(){return e.assemblyTrackChoices.filter(t=>ut.has(t.adapterType))},get repeatTrackChoices(){return e.assemblyTrackChoices.filter(t=>vo.has(t.adapterType))},get repeatChoices(){return e.repeatArrays??[]}})).views(e=>({get repeatTrack(){return as(e.repeatTrackChoices,e.repeatTrackId)},get geneTrack(){return en(e.geneTrackChoices,e.geneTrackId)},get selectedRepeat(){return e.repeatChoices.find(t=>t.key===e.repeatKey)},get backbone(){return e.graph?fn(e.graph):void 0},get cutWalkRows(){return e.graph?Lt(e.graph,e.graphRegion):void 0},assemblySpellings(t){let{assemblyManager:n}=(0,le.getSession)(e),o=n.has(t)?n.get(t):void 0,r=e.sourceAdapter?.assemblyNameToPanSN??{},a=[t,...o?[o.name,...o.aliases]:[]];return{name:t,aliases:[...a,...a.flatMap(i=>r[i]??[])]}},get drawsLoadedReference(){let t=e.graph;return t?.anchoredBy==="tags"||t?.referencePath!==void 0&&t.referencePath===e.loadedReferencePath}})).views(e=>({get geneAssembly(){let t=e.graphRegion;return t?e.assemblySpellings(t.assemblyName):void 0},get geneLaneFilter(){let t;try{t=(0,le.getContainingView)(e)}catch{return}let n=os(t,e.geneTrack?.trackId);return n.length?new ps.default({filters:n,jexl:(0,le.getEnv)(e).pluginManager.jexl}):void 0},get geneFeatures(){let t=e.geneTrackFeatures,n=this.geneLaneFilter;return t?tn(n?t.filter(o=>n.passes(o)):t):void 0}})).views(e=>({get backboneGenes(){let{backbone:t,geneAssembly:n,geneFeatures:o}=e,r=e.drawsLoadedReference||n!==void 0&&wn(t,[n])!==void 0;return t&&o&&r?kn(o,t):void 0}})).views(e=>({get nodeNeighbors(){return e.drawnGraph?_e(e.drawnGraph):void 0},get nodeInk(){return Et(e.drawnGraph,e.nodeById,e.contigThickness,e.nodeWidth)},get allDeletions(){return e.graph&&this.drawsNodes?ye(e.graph):[]},get cohortWalkRows(){if(e.chosenLayoutMode!=="walkrows"||!e.graph)return;let t=e.selectedRepeat,n=t?Lt(e.graph,t,t.unit):e.cutWalkRows;if(!n)return;let[o,...r]=Ma([n.reference,...n.rows],t?.calls);return{...n,reference:o,rows:r}},get walkRowSampleChoices(){let t=this.cohortWalkRows?.rows??[];return{samples:[...new Set(t.map(n=>n.sample))].sort(),disagreeing:[...new Set(t.filter(n=>n.call?.agrees===!1).map(n=>n.sample))]}},get walkRowSamplesTsv(){let t=e.sourceAdapter?.samplesTsvLocation;return t&&(!("uri"in t)||t.uri)?t:void 0},get walkRowGroupFields(){return Tr(e.walkRowSampleTable)},get walkRowGroups(){let t=this.cohortWalkRows,n=e.walkRowSampleTable,o=e.walkRowGroupBy;return t&&n&&o&&this.walkRowGroupFields.includes(o.field)?Pr(Ge(t.rows,e.walkRowSamples),n,o):void 0},get walkRowBars(){let t=this.cohortWalkRows;return t?{...t,rows:this.walkRowGroups?.rows??Ge(t.rows,e.walkRowSamples)}:void 0},get drawsNodes(){return!e.layoutResult?.tubeMap&&!this.walkRowBars},get genePins(){ge(e.positionsVersion);let t=e.layoutResult?.nodePositions;return e.showGenes&&this.drawsNodes&&e.graph&&e.backboneGenes&&t?st(e.graph,e.backboneGenes,t):[]},get bubbleHalos(){ge(e.positionsVersion);let t=e.layoutResult?.nodePositions;return!e.showBubbles||!this.drawsNodes||!e.graph||!t?[]:wo(e.graph,e.bubbles,t,n=>e.walkLabel(n),e.repeatArrays)},get referenceRamp(){return e.effectiveColorScheme==="reference-position"&&e.drawnGraph?Pe(e.drawnGraph,e.rampDomain):void 0},get assemblyNames(){let t=e.graphRegion;return t?[t.assemblyName]:[]},get scaleX(){return Se(e.scale,e.pixelRows).scaleX},get scaleY(){return Se(e.scale,e.pixelRows).scaleY},get axisScale(){return Se(e.scale,e.pixelRows)}})).views(e=>({get deletionDrawing(){return e.graph?He(e.graph,e.allDeletions,e.showDeletionEdges):void 0},get deletions(){return this.deletionDrawing?.shown??[]},get deletionEdgeIndexes(){return this.deletionDrawing?.bypassed},get hiddenEdgeIndexes(){return this.deletionDrawing?.hidden},get referenceRampDomain(){let t=e.referenceRamp;return t?{start:t.start,end:t.start+t.span}:void 0},get referenceRampOffKeys(){let t=e.referenceRamp,n=e.layoutResult,o=n?.tubeMap?n.nodePositions:void 0,r=!1,a=!1;if(t&&e.drawnGraph)for(let i of e.drawnGraph.nodes)o&&!o[i.id]||(t.midpoints.has(i.id)?i.stable&&i.stable.rank>0&&(r=!0):a=!0);return{offReference:r,unplaced:a}},get tubeMapNodeColors(){let t=e.drawnGraph;return e.layoutResult?.tubeMap&&t?ko(t,e.effectiveColorScheme,e.referenceRamp):void 0},get tubeMapTubeColors(){let t=e.layoutResult?.tubeMap?.pathColors,n=t&&this.tubeMapNodeColors?t.map((a,i)=>hr(i,t.length)):t,o=new Set(e.hoveredRowWalks),r=e.drawnGraph?.paths;return n&&r&&o.size>0?n.map((a,i)=>o.has(r[i]?.name??"")?a:Ir):n},nodeSpan(t){let{nodeById:n,nodeNeighbors:o}=e;return n&&o?we({nodeId:t,nodeById:n,neighbors:o}):void 0}})).views(e=>({get pathLegend(){let t=e.graph?.paths,n=e.layoutResult?.tubeMap;return(e.drawPaths||n)&&t&&Tn(t.length)?Xe(t,e.tubeMapTubeColors):[]},get hoveredSpan(){let t=e.hoveredNode,n=e.hoveredBubble;return t!==null?e.nodeSpan(t):n?{start:n.start,end:n.end}:void 0}})).views(e=>({get hoverHighlight(){let t=e.graphRegion,n=e.hoveredSpan;return t&&n&&e.chosenHighlightOnHover?{refName:t.refName,assemblyName:t.assemblyName,...n}:void 0}}));var To=f(K(),1);function Q(e){return typeof e=="object"&&e!==null}function ep(e){return Q(e)&&e.type==="LinearGenomeView"&&typeof e.id=="string"&&typeof e.navToLocString=="function"&&Array.isArray(e.assemblyNames)}function gt(e){return e.flatMap(t=>Q(t)&&Array.isArray(t.views)?[t,...t.views]:[t])}function ht({views:e,connectedViewId:t,assemblyName:n}){let o=gt(e).filter(a=>ep(a)).filter(a=>a.assemblyNames.includes(n));return o.find(a=>a.id===t)??(o.length===1?o[0]:void 0)}function ft(e,t){let n=e.assemblyManager;return n?.has(t)?n.get(t)?.name??t:t}function ls(e,t,n){n.catch(o=>{console.error(`[GraphGenomeView] ${t}`,o),e.notifyError?.(`${t}: ${o}`,o)})}var tp=1e3;function Go(e,t=tp){let n=Math.max(0,Math.ceil((t-(e.end-e.start))/2));return{...e,start:Math.max(0,e.start-n),end:e.end+n}}function gs(e,t){return t?e.map(n=>n.rank===0?{...n,sample:t.assemblyName,haplotype:void 0,refName:t.refName,start:t.start,end:t.end}:n):e}function hs({session:e,location:t,assembly:n,connectedViewId:o,tracks:r=[]}){let a=ht({views:e.views,connectedViewId:o,assemblyName:n}),i;return a?(ls(e,`Could not show ${n} ${qe(t)}`,Promise.resolve(a.navToLocString(_t(t),n))),i=a.id):i=e.addView("LinearGenomeView",{displayName:`${n} \u2014 ${qe(t)}`,init:{assembly:n,loc:_t(t),tracks:r}}).id,i}function fs({session:e,location:t,assembly:n,connectedViewId:o}){let r=ht({views:e.views,connectedViewId:o,assemblyName:n});return r&&e.addHighlight?.({refName:t.refName,start:t.start,end:t.end,assemblyName:n}),r!==void 0}function ms(e,t){if(t===void 0)return[];let n=e.tracks.find(r=>(0,To.readConfObject)(r,"trackId")===t),o=n?(0,To.readConfObject)(n,"assemblyNames"):[];return Array.isArray(o)?o.filter(r=>typeof r=="string").map(r=>ft(e,r)):[]}function bs({session:e,contributors:t,trackId:n,graphTrackId:o}){let r=ms(e,o),a=ms(e,n),i=t.filter(d=>a.includes(d.sample)),s=i.length>=2?i:t,c={init:{views:s.map(d=>({assembly:d.sample,loc:_t(d),...o!==void 0&&r.includes(d.sample)?{tracks:[o]}:{}})),tracks:n?s.slice(1).map(()=>[n]):[],collapseEmptyRows:!0}};e.launchView?ls(e,"Could not open the synteny view",e.launchView("LinearSyntenyView",c)):e.addView("LinearSyntenyView",c)}var ws=us.views(e=>({get contributingAssemblies(){let t=e.graph,n=t?tr(t):[];return t?La(t,{maxGap:n.length>0?rr(n):1/0}):[]}})).views(e=>({get assemblyResolver(){let{assemblyManager:t}=(0,ve.getSession)(e),n=e.sourceAdapter?.assemblyNameToPanSN,o=new Map(Object.entries(n??{}).map(([a,i])=>[i,a])),r=a=>a!==void 0&&t.has(a)?t.get(a)?.name??a:void 0;return a=>r(o.get(a))??r(a)},get geneTracksByAssembly(){let t=new Map;for(let n of(0,ve.getSession)(e).tracks){let o=(0,on.readConfObject)(n,"adapter").type;if(!ut.has(o))continue;let r={trackId:n.trackId,name:(0,on.readConfObject)(n,"name"),adapterType:o};for(let a of(0,on.readConfObject)(n,"assemblyNames")){let i=ft((0,ve.getSession)(e),a);t.set(i,[...t.get(i)??[],r])}}return new Map([...t].flatMap(([n,o])=>{let r=en(o,"");return r?[[n,r]]:[]}))}})).views(e=>({get launchableAssemblies(){return va(gs(e.contributingAssemblies,e.graphRegion),e.assemblyResolver)},get canHighlightInLinearView(){let t=e.graphRegion;return t!==void 0&&ht({views:[...(0,ve.getSession)(e).views],connectedViewId:e.connectedViewId,assemblyName:t.assemblyName})!==void 0},nodeLaunchTargets(t){let n=e.nodeById?.get(t),o=n?Ue(n):void 0,r=o?Ke(e.assemblyResolver,o):void 0,a=e.graphRegion,i=e.nodeById,s=e.nodeNeighbors,c=a&&i&&s?we({nodeId:t,nodeById:i,neighbors:s}):void 0,d=a&&c?{sample:a.assemblyName,haplotype:void 0,refName:a.refName,...c}:void 0;return{own:o&&r?{location:Go(o),assembly:r}:void 0,reference:a&&d?{location:Go(d),assembly:a.assemblyName}:void 0,highlight:a&&d?{location:d,assembly:a.assemblyName}:void 0}}})).views(e=>({get host(){let t;try{t=(0,ve.getContainingView)(e)}catch{return}return Ji(t)?t:void 0}}));var ys=ws.views(e=>({get walkStripShown(){return Xr({walkStrip:e.walkStrip,mode:{drawsNodes:e.modeDrawsNodes},drawsPicture:!!e.layoutResult?.tubeMap||!!e.walkRowBars,popped:e.popStack.length>0,walks:e.graph?.paths?.length??0,host:!!e.host})},get walkStripRows(){let t=this.walkStripShown?e.cutWalkRows:void 0;return t?{...t,rows:Ge(t.rows,e.walkRowSamples)}:void 0},get walkStripFrame(){let t=this.walkStripRows;if(t)return Vt(t,{width:e.paneWidth})},get cutsWholeWalks(){return zr(_(e.chosenLayoutMode),{walkStrip:e.walkStrip,host:!!e.host})},get walkStripMarks(){let t=this.walkStripRows,n=e.hoveredNode??e.selectedNode,o=n===null?void 0:e.nodeById?.get(n);return t&&o&&e.graph?Yr(e.graph,[t.reference,...t.rows],o):[]},get walkStripLocator(){let t=e.stripHover?e.hoveredNode:null;return t===null?void 0:Ot(e.nodePositions?.[t],n=>({x:n.x*e.scaleX+e.translateX,y:n.y*e.scaleY+e.translateY}))}})).views(e=>({get walkGeneReads(){let t=e.walkRowBars??e.walkStripRows;if(!t||!e.showGenes)return;let n=[],o=0,r=0;for(let a of t.rows){if(!a.axis){r++;continue}let i=Ke(e.assemblyResolver,{sample:a.sample,haplotype:a.haplotype===void 0?void 0:`${a.sample}#${a.haplotype}`}),s=i?e.geneTracksByAssembly.get(i):void 0;if(!i||!s){o++;continue}n.push({row:a.name,trackId:s.trackId,region:{assemblyName:i,refName:a.axis.contig,...Cn(a.axis,a.bp)}})}return{reads:n.slice(0,ro),gaps:{untracked:o,unplaced:r,unread:Math.max(0,n.length-ro)}}},get walkRowGeneGaps(){return this.walkGeneReads?.gaps},walkRowLaunchTarget(t,n=e.walkRowBars){let o=n?[n.reference,...n.rows][t]:void 0;if(!o?.axis)return;let r=o.haplotype===void 0?void 0:`${o.sample}#${o.haplotype}`,a=t===0?e.graphRegion?.assemblyName:Ke(e.assemblyResolver,{sample:o.sample,haplotype:r});return{label:o.label,assembly:a,location:{sample:o.sample,haplotype:r,refName:o.axis.contig,...Cn(o.axis,o.bp)}}},get walkRowGenes(){let t=e.walkRowBars??e.walkStripRows;if(!t||!e.showGenes)return;let n=new Map(e.walkGeneFeatures??[]);return e.geneFeatures&&n.set(t.reference.name,e.geneFeatures),n.size?Hr([t.reference,...t.rows],n):void 0}}));var ks=ys.views(e=>({get xIsReferenceBp(){return e.layoutResult?.referenceAxis===!0&&_(e.chosenLayoutMode).cutMargins}})).views(e=>({get hostPlacesX(){let{host:t,graphRegion:n}=e;return t!==void 0&&t.initialized&&n!==void 0&&e.xIsReferenceBp&&e.popStack.length===0&&!t.dynamicBlocks.contentBlocks.some(o=>o.refName===n.refName&&o.reversed)}})).views(e=>({get hostFrame(){let{host:t,graphRegion:n}=e;return e.hostPlacesX&&t&&n?pt(t,n):void 0},get tubeMapPicture(){let t=e.layoutResult?.tubeMap;return t?la(t):void 0},get tubeMapReference(){let t=e.layoutResult?.tubeMap;return t&&e.drawnGraph?ca(e.drawnGraph,t.layout):void 0},get tubeMapDeviations(){let t=e.layoutResult?.tubeMap?.coarse,n=e.layoutResult?.tubeMap?.layout;return t&&n?xa(t.graph,n,t.deviations):[]},get tubeMapReferenceNodes(){let t=e.layoutResult;return t?.tubeMap&&!t.referenceAxis&&e.drawnGraph?pa(e.drawnGraph,t.tubeMap.layout):void 0}})).views(e=>({get tubeMapGenes(){let t=e.tubeMapReference;return e.showGenes&&!e.host&&t&&e.backboneGenes?fa(t,e.backboneGenes):[]},get referenceStripApplies(){return!!e.host?.initialized&&!!e.layoutResult&&e.drawsNodes&&!e.hostPlacesX&&!e.facetPanels}})).views(e=>({get referenceStripBlocks(){let{graph:t}=e;return e.showReferenceStrip&&e.referenceStripApplies&&t?ka(t,{colorScheme:e.effectiveColorScheme,referenceRamp:e.referenceRamp,walks:e.walkLift?.walks}):[]},get referenceStripFrame(){let{host:t,graphRegion:n}=e;return t?.initialized&&n?pt(t,n):void 0}})).views(e=>({get referenceStripShown(){return e.referenceStripBlocks.length>0&&e.referenceStripFrame!==void 0},get referenceStripOverhangs(){let t=e.referenceStripFrame;if(!t||e.referenceStripBlocks.length===0)return!1;let{left:n,right:o}=Sa(e.referenceStripBlocks,t,e.paneWidth);return n>0||o>0},get referenceStripFaded(){return e.referenceStripBlocks.some(t=>t.faded)}})).views(e=>({get referenceStripLit(){if(!e.referenceStripShown)return;let t=a=>({x:a.x*e.scaleX+e.translateX,y:a.y*e.scaleY+e.translateY}),n=e.hoveredNode===null?e.hoveredBubble:null;if(n){let a=e.bubbleHalos.find(i=>Dr(i.bubble,n));return{start:n.start,end:n.end,anchor:a?t(a.labelAt):void 0}}let o=e.hoveredNode??e.selectedNode,r=o===null?void 0:e.nodeSpan(o);return r&&o!==null?{...r,anchor:Ot(e.nodePositions?.[o],t)}:void 0},referenceStripNodeAt(t,n){let o=e.referenceStripFrame;return e.referenceStripShown&&o?Ra(e.referenceStripBlocks,o,t,n):void 0},get paperCss(){return Li(e.darkMode?Kt:Ut)},get referenceStripZonePx(){return e.referenceStripShown?ya:0}}));function np(e,t,n){if(!(!e||!t))return Wr(e.rowPx,e.barPx)?n:{untracked:0,unread:0,...n,crowded:!0}}var Rs=ks.views(e=>({get paneCeiling(){return Math.max(Yt,e.paneHeight??Mi)},get walkRowPitch(){let t=e.walkRowBars;if(!t)return;let n=e.host?this.canvasHeight:this.paneCeiling,o=(e.walkRowGroups?.sections.length??0)*Lr;return jr(t.rows.length+1,n-this.fitPadTopBase-F-o)},get walkRowPlacement(){let t=this.walkRowPitch;return t?Ar(e.walkRowGroups?.sections??[],t.rowPx):void 0},get walkRowGeneKey(){return np(this.walkRowPitch,!!e.walkRowGenes?.size,e.walkRowGeneGaps)},get drawnRowLabels(){let t=this.walkRowPlacement,n=Ye(e.walkRowBars,e.layoutResult,this.walkRowPitch);return e.walkRowBars&&t?n.map((o,r)=>({...o,y:t.rowY(r)})):n},get fitPadLeft(){return Math.max(F,...this.drawnRowLabels.map(t=>gr(t.label,0).x1+6))},get layoutBounds(){let t=e.layoutResult,n=e.walkRowBars,o=n&&t?.extent?ze(n,this.walkRowPitch):void 0;return t?nt(t,{region:e.popStack.length===0?e.graphRegion:void 0,extent:o&&{...o,maxY:o.maxY+(this.walkRowPlacement?.headersPx??0)}}):void 0},get hoveredWalkRowText(){let t=e.walkRowBars,n=e.hoveredWalkRow;if(!t||n===null||this.walkRowPitch?.readouts!==!1)return;let o=t.reference.name===n,r=o?t.reference:t.rows.find(a=>a.name===n);return r?{label:r.label,readout:$r(r,o?void 0:t.reference,t.unit,r.call)}:void 0},walkRowAt(t,n){let o=e.walkRowBars,r=this.walkRowPitch,a=this.walkRowPlacement;if(!o||!r||!a)return;let i=a.rowAt((n-e.translateY)/e.scaleY,o.rows.length+1),s=[o.reference,...o.rows][i],c=a.rowY(i)*e.scaleY+e.translateY,d=(t-e.translateX)/e.scaleX-o.origin;return s&&Math.abs(n-c)<=r.barPx/2+2&&d>=0&&d<=s.bp?i:void 0},get fitPadTopBase(){let t=wa(e.tubeMapGenes);return F+Math.max(0,t-1)*ba+e.referenceStripZonePx},get legendRoom(){let t=this.layoutBounds,{width:n,height:o}=e.legendSize;if(!t||t.w<=0||n===0||e.facetPanels||e.tubeMapReads)return;if(e.hostPlacesX)return"top";let r=this.fitPadTopBase,a=e.host?this.canvasHeight:this.paneCeiling,i=l=>(e.paneWidth-this.fitPadLeft-l)/t.w,s=l=>e.pixelRows?t.h+l+F<=a?1/0:0:(a-l-F)/t.h,c=Math.min(i(n+2*Ae),s(r));return Math.min(i(F),s(r+o+Ae))>=c?"top":"right"},get fitPadTop(){return this.fitPadTopBase+(this.legendRoom==="top"?e.legendSize.height+Ae:0)},get fitPadRight(){return this.legendRoom==="right"?Math.max(F,e.legendSize.width+2*Ae):F},get minFitScale(){let t=this.layoutBounds,n=e.layoutResult,o=n?.tubeMap?.layout.tracks[0]?.width;return t&&t.h>0&&o&&!n.referenceAxis?Math.min(vi/o,(this.paneCeiling-this.fitPadTop-F)/t.h):0},get facetSpec(){let{field:t,domain:n,columns:o}=e.facet;return t===""?void 0:n.length===0&&o===void 0?t:{field:t,domain:[...n],...o===void 0?{}:{columns:o}}},get facetPlacement(){let t=e.facetPanels,{field:n,domain:o}=e.facet;return t?It(t.map(r=>r.walks[0].name),e.hostPlacesX||n===""?"walk":n,o):void 0},facetGridIn(t){let n=this.facetPlacement,o=this.layoutBounds;return n&&o&&o.w>0?At({count:n.count,bounds:o,pixelRows:e.pixelRows,width:e.paneWidth,room:t,columns:e.hostPlacesX?1:n.columns??e.facet.columns}):void 0},get facetGrid(){return this.facetGridIn(e.host?this.canvasHeight:this.paneCeiling)},get canvasHeight(){let t=this.layoutBounds,n=e.paneWidth-F-this.fitPadRight,o=this.paneCeiling;if(!t)return o;let r=this.facetGrid;if(r)return Math.max(Yt,r.total);let a=Math.max(Yt,e.legendSize.height+2*Ae+e.referenceStripZonePx);return e.pixelRows?Math.min(o,Math.max(a,t.h+this.fitPadTop+F)):t.w>0&&n>0?Math.min(o,Math.max(a,t.h*Math.max(n/t.w,this.minFitScale)+this.fitPadTop+F)):o},get viewBox(){let t=this.facetGrid;return t?{width:t.width,height:t.height}:{width:e.paneWidth,height:this.canvasHeight}},get fittedTransform(){let t=this.layoutBounds,n=this.facetGrid;return t?n?Ie(t,n.width,n.height,e.pixelRows,{padLeft:oe,padTop:oe,padRight:oe,padBottom:oe}):Ie(t,e.paneWidth,this.canvasHeight,e.pixelRows,{minScale:this.minFitScale,padLeft:this.fitPadLeft,padTop:this.fitPadTop,padRight:this.fitPadRight}):void 0}})).views(e=>({viewportToBuild(){return Zn(rt(e),Bi)},applyHighlights(t){let{litNode:n,hoveredEdge:o,selectedNode:r}=e,a=new Map;r!==null&&a.set(r,Ci),n!==null&&n!==r&&a.set(n,oo),t.setNodeHighlights(a),t.setEdgeHighlight(e.chosenHighlightOnHover?o:null,oo)},paint(t){let n=Zr();t.updateTransform({scaleX:e.scaleX*n,scaleY:e.scaleY*n,translateX:e.translateX*n,translateY:e.translateY*n,dpr:n}),t.render(e.referenceStripShown?[0,0,0,0]:e.darkMode?Kt:Ut)}})).views(e=>({buildDrawing(t,n){let{graph:o,nodeById:r,layoutResult:a,deletionDrawing:i}=e;if(!o||!r||!a||!i)return;ge(e.viewportDirty,e.positionsVersion);let s=(0,Po.untracked)(()=>e.viewportToBuild());return{batch:Bt({...it(a,i,{drawsRows:!!e.walkRowBars}),graph:o,nodeById:r,colorScheme:e.effectiveColorScheme,contigThickness:e.contigThickness,connectorThickness:e.connectorThickness,drawPaths:n,nodeWidth:e.nodeWidth,highlight:t,axis:(0,Po.untracked)(()=>e.axisScale),linearLayout:e.linearLayout,viewportBounds:s,referenceRamp:e.referenceRamp,version:e.positionsVersion}),viewportBounds:s}},get overlayLabels(){return sa(e)},hoveredOn(t){let n=e.hoveredNode,o=n?e.nodeById?.get(n):void 0;return o?ra(t,o.id,o.length)??"not on this walk":void 0},figureSpec(){let t=e.graphRegion,n=e.sourceAdapter,o=n?.assemblyNameToPanSN,r=t&&`${t.refName}:${t.start}-${t.end}`,a=Ee(e.sourceGfaLocation),i=n?.type==="GbzBaseSyntenyAdapter"?Ee(n.gbzDbLocation):void 0,s=a?{gfa:a,region:r}:i&&t&&r?{gbz:{db:i,index:Ee(n.haplotypeIndexLocation),region:r,haplotypes:e.cutHaplotypes?.map(p=>o?.[p]??p),referenceSample:n.referenceSample||o?.[t.assemblyName]||t.assemblyName,context:n.context,snarls:e.cutsWholeWalks?"overlapping":n.subgraphSnarls}}:void 0;if(!s)return;let c=e.showGenes?e.geneTrack:void 0,d=c?(0,Ss.getSession)(e).tracks.find(p=>p.trackId===c.trackId):void 0,l=d?(0,rn.expandTabixShorthand)((0,rn.readConfObject)(d,"adapter"),"gffGzLocation"):void 0,b=l?.type==="Gff3TabixAdapter"?{file:Ee(l.gffGzLocation),index:Ee(l.index?.location),format:"gff3"}:void 0;return JSON.parse(JSON.stringify({...s,genes:b?.file&&b.index?b:void 0,referencePath:e.referencePath||void 0,layout:e.chosenLayoutMode,...lo({quality:e.layoutQuality,linearLayout:e.linearLayout,bubbleSpread:e.bubbleSpread,showDeletionEdges:e.showDeletionEdges,colorScheme:e.chosenColorScheme,nodeWidth:e.nodeWidth,contigThickness:e.contigThickness,connectorThickness:e.connectorThickness,colorDomain:e.colorDomain}),walks:e.walkLayers.length?e.walkLayers.map(p=>p.color?p:p.walk):void 0,facet:e.walkLayers.length>1?e.facetSpec:void 0,walkStrip:e.walkStripShown||void 0,walkRowSamples:e.walkStripShown?e.walkRowSamples:void 0,width:e.paneWidth,height:e.paneCeiling}))},get figureUnavailable(){return e.layoutResult?e.walkRowGroups?"The SVG export cannot group walk rows yet: set Group by... to None first":e.drawsNodes||e.walkRowBars?void 0:`${_(e.chosenLayoutMode).label} draws a picture of its own, which the SVG export does not`:"Nothing is drawn yet"},get figureSpecUnavailable(){return e.drawsNodes?e.popStack.length?"A spec names the whole graph, so go back out of this bubble first":this.figureSpec()?void 0:"bandage-figure reads a graph cut from a gbz-base track or a GFA url":`bandage-figure draws no ${_(e.chosenLayoutMode).label} layout`},figure(){let{graph:t,layoutResult:n}=e;return t&&n&&!this.figureUnavailable?mo(t,n,{width:e.paneWidth,height:e.paneCeiling,walks:e.walkLayers,facet:e.facetSpec,colorScheme:e.effectiveColorScheme,nodeWidth:e.nodeWidth,showDeletionEdges:e.showDeletionEdges,linearLayout:e.linearLayout,contigThickness:e.contigThickness,connectorThickness:e.connectorThickness,region:e.graphRegion,colorDomain:e.colorDomain,fitToDrawing:e.popStack.length>0,genes:e.showGenes?e.backboneGenes:void 0,walkRows:e.walkRowBars,walkRowPitch:e.walkRowPitch,rowGenes:e.walkRowGenes,rowGeneGaps:e.walkRowGeneGaps,walkStrip:e.walkStripRows&&{rows:e.walkStripRows,rowGenes:e.walkRowGenes,rowGeneGaps:e.walkRowGeneGaps},spec:this.figureSpecUnavailable?void 0:this.figureSpec()}):void 0},get tubeMapFrame(){let t=e.layoutResult?.tubeMap;return t?go(t,{scaleX:e.scaleX,translateX:e.translateX,scaleY:e.scaleY,translateY:e.translateY,usableHeight:e.canvasHeight-e.fitPadTop-F}):void 0}})).views(e=>({get tubeMapRulerBoxes(){let t=e.tubeMapReference;return t&&!e.hostPlacesX?da(t):void 0},get connectorZoneBottom(){let t=e.tubeMapPicture,n=e.tubeMapFrame;return t&&n?n.y(t.bounds.minY)-2:0},get tubeMapConnectors(){let t=e.tubeMapReferenceNodes,n=e.tubeMapFrame,{host:o,graphRegion:r}=e,a=t&&n&&o?.initialized&&r?pt(o,r):void 0;return t&&n&&a?ua(t,i=>i*a.scale+a.translateX,n.x,e.paneWidth):[]}})).views(e=>({get tubeMapKeys(){let t=e.layoutResult,n=t?.tubeMap?.layout.reads??[],o=e.tubeMapPicture,r=e.tubeMapFrame,a=o&&r&&ga(r.yScale)?o.mismatches.filter(i=>ha(i,{x:r.x,width:e.paneWidth})):[];return{logWidths:t?.tubeMap!==void 0&&!t.referenceAxis,foldBp:e.tubeMapDeviations.length>0?e.tubeMapFold:void 0,forwardReads:n.some(i=>!i.is_reverse),reverseReads:n.some(i=>i.is_reverse),mismatches:new Set(a.map(i=>i.kind))}},tubeMapNodeAt(t,n){let o=e.layoutResult?.tubeMap,r=e.tubeMapFrame;return(o&&r?ho(o,r,t,n):null)??ma(e.tubeMapConnectors,e.connectorZoneBottom,t,n)??null}}));function xs(e,t,n){let o=Math.min(48,t,n);return Math.max(0,o-(e+t))-Math.max(0,e-(n-o))}function Ms(e,t,n){return{translateX:t.translateX+xs(e.minX*t.scaleX+t.translateX,e.w*t.scaleX,n.width),translateY:t.translateY+xs(e.minY*t.scaleY+t.translateY,e.h*t.scaleY,n.height)}}function Ls(e,t,n){let o=e.minX*t.scaleX+t.translateX,r=e.minY*t.scaleY+t.translateY;return o<n.width&&o+e.w*t.scaleX>0&&r<n.height&&r+e.h*t.scaleY>0}var vs=Rs.actions(e=>({keepDrawingInView(){let t=e.layoutBounds,n=e.viewBox;if(!t||e.viewportOwner==="fit"||!e.paneMeasured||n.width<=0||n.height<=0)return;let o=Ms(t,e,n);e.viewportOwner!=="host"&&(e.translateX=o.translateX),e.translateY=o.translateY}})).actions(e=>({setError(t){e.error=t,e.isLoading=!1,e.statusMessage=""},finishLoading(){e.isLoading=!1,e.statusMessage=""},setStatusMessage(t){e.statusMessage=t},setFetchMs(t){e.lastFetchMs=t},setLayoutMs(t){e.lastLayoutMs=t},setGeometryMetrics(t,n,o){e.lastGeometryMs=t,e.lastGeometryStrokeCount=n,e.builtViewport={...o,viewportDirty:e.viewportDirty},e.geometryVersion++},markPainted(){e.paintedViewport=e.builtViewport},setLayoutQuality(t){e.layoutQuality=t},setLinearLayout(t){e.linearLayout=t},setLayoutMode(t){e.layoutMode=t},setHighlightOnHover(t){e.highlightOnHover=t},setReferencePath(t){e.referencePath=t;let n=e.graph;if(n?.anchoredBy==="paths"){let o=We(n,t);at.inherit(n,o),e.graph=o}},setDrawPaths(t){e.drawPaths=t},setShowPerf(t){e.showPerf=t},setColorScheme(t){e.colorScheme=t},setBubbleSpread(t){e.bubbleSpread=t},setNodeWidth(t){e.nodeWidth=t},setShowBubbles(t){e.showBubbles=t},setShowDeletionEdges(t){e.showDeletionEdges=t},setShowGenes(t){e.showGenes=t},setShowReferenceStrip(t){e.showReferenceStrip=t},setTubeMapFold(t){e.tubeMapFold=t},setGeneTrackId(t){e.geneTrackId=t},setRepeatTrackId(t){e.repeatTrackId=t},setRepeatKey(t){e.repeatKey=t},setWalkLayers(t){e.walkLayers=t},liftWalks(t){let n=new Map(e.walkLayers.map(o=>[o.walk,o]));e.walkLayers=t.map(o=>n.get(o)??{walk:o})},setFacet(t){t!==e.facet.field&&(e.facet.domain=[]),e.facet.field=t},setFacetColumns(t){e.facet.columns=t},toggleWalk(t){let n=e.walkLayers;e.walkLayers=n.some(o=>o.walk===t)?n.filter(o=>o.walk!==t):[...n,{walk:t}]},setWalkColor(t,n){e.walkLayers=e.walkLayers.map(o=>o.walk===t?{...o,color:{...o.color,...n}}:o)},setPaneHeight(t){e.paneHeight=t},setWalkRowSamples(t){e.walkRowSamples=t},setWalkRowGroupBy(t){e.walkRowGroupBy=t},setWalkRowSampleTable(t){e.walkRowSampleTable=t},pairWithLinearView(t){let n=e.connectedViewId;n!==void 0&>([...(0,bt.getSession)(e).views]).some(r=>r.id===n)||(e.connectedViewId=t)},setHoveredNode(t){e.hoveredNode=t},setHoveredRowWalks(t){t.join(`
|
|
4
4
|
`)!==e.hoveredRowWalks.join(`
|
|
5
|
-
`)&&(e.hoveredRowWalks=t)},setHoveredWalkRow(t){e.hoveredWalkRow=t},setHoveredBubble(t){e.hoveredBubble=t},setPointerInPane(t){e.pointerInPane=t},setWalkStrip(t){e.walkStrip=t,e.stripHover=null},setStripHover(t){e.stripHover=t;let n=e.walkStripRows,o=e.walkStripFrame,r=t&&n?[n.reference,...n.rows].find(i=>i.name===t.row):void 0,a=r&&o&&e.graph?qr(e.graph,r,t.offset,o.scaleX):void 0;e.hoveredNode=a??null},setLegendSize(t){e.legendSize=t},setHoveredEdge(t){e.hoveredEdge=t},setSelectedNode(t){e.selectedNode=t},setDraggingNode(t){e.draggingNode=t},setPanning(t){e.isPanning=t},stopDragging(){e.draggingNode=null,e.isPanning=!1},clearInteractionState(){e.hoveredNode=null,e.hoveredWalkRow=null,e.hoveredBubble=null,e.hoveredEdge=null,e.selectedNode=null,e.draggingNode=null,e.isPanning=!1},showNodeDetails(t){let n=e.nodeById?.get(t),o=e.nodeById,r=e.nodeNeighbors;if(n&&o&&r){let a=(0,wt.getSession)(e),i=e.graphRegion,s=i?ye({nodeId:t,nodeById:o,neighbors:r}):void 0;(0,wt.isSessionModelWithWidgets)(a)&&a.showWidget(a.addWidget("BaseFeatureWidget","baseFeature",{featureData:{id:n.id,name:n.name,length:n.length,depth:n.depth,rank:n.stable?.rank,stableName:n.stable?.refName,contributingAssembly:Ke(n)?.sample,contributingHaplotype:Ke(n)?.haplotype,sampleCount:n.samples?.length,samples:n.samples,...i&&s?{refName:i.refName,assemblyName:i.assemblyName,start:s.start,end:s.end}:{}}}))}},setTransform(t,n,o){let{host:r}=e;e.viewportOwner==="host"&&r?r.horizontalScroll(e.translateX-n):(e.viewportOwner="user",e.scale=Ie(t),e.translateX=n),e.translateY=o,e.keepDrawingInView()},zoom(t,n,o){let{host:r}=e;if(e.viewportOwner==="host"&&r){r.zoomTo(r.bpPerPx/t,n);return}e.viewportOwner="user";let a=to(e,t,n,o,e.pixelRows);e.scale=a.scale,e.translateX=a.translateX,e.translateY=a.translateY,e.keepDrawingInView()},setViewportDirty(){e.viewportRebuildPending=!1,e.viewportDirty++},setPositionsDirty(){e.positionsVersion++},zoomToFit(){if(e.viewportOwner==="host"){let n=e.layoutBounds,o=e.facetGrid!==void 0,r=o?re:F,a=o?re:e.fitPadTop,i=e.viewBox.height-a-r;n&&i>0&&(e.translateY=zt(n,i,e.scaleY,a));return}let t=e.fittedTransform;t&&(e.scale=t.scale,e.translateX=t.translateX,e.translateY=t.translateY)},clearPerfMetrics(){e.lastFetchMs=void 0,e.lastLayoutMs=void 0,e.lastGeometryMs=void 0,e.lastGeometryStrokeCount=void 0,e.builtViewport=void 0}})).actions(e=>({hostTransform(t,n){let o=e.viewportOwner!=="host";o&&(e.viewportOwner="host"),e.scale=t,e.translateX=n,o&&e.zoomToFit()},followNewLayout(t){let n=e.layoutBounds;e.viewportOwner==="user"&&n&&(t&&!e.xIsReferenceBp||!Ps(n,e,e.viewBox))&&(e.viewportOwner="fit",e.zoomToFit())},refitView(){e.viewportOwner==="user"&&(e.viewportOwner="fit"),e.zoomToFit()},releaseHost(){e.viewportOwner==="host"&&(e.xIsReferenceBp?e.viewportOwner="user":(e.viewportOwner="fit",e.zoomToFit()))}})).actions(e=>{function t(){clearTimeout(e.viewportDirtyTimer),e.viewportRebuildPending=!0,e.viewportDirtyTimer=setTimeout(()=>{(0,Io.isAlive)(e)&&e.setViewportDirty()},Bi)}function n(){cancelAnimationFrame(e.positionsDirtyFrame),e.positionsDirtyFrame=requestAnimationFrame(()=>{(0,Io.isAlive)(e)&&e.setPositionsDirty()})}return{moveNode(o,r,a){let i=e.layoutResult?.nodePositions;if(i?.[o]){for(let s of i[o])s.x+=r,s.y+=a;n()}},scheduleViewportDirty:t}});var Is=As.actions(e=>{let t,n;function o(g){let{rpcManager:y}=(0,Z.getSession)(e);return y.call((0,Z.getRpcSessionId)(e),"GraphComputeLayout",{...g,signal:t?.signal,statusCallback:h=>{e.setStatusMessage((0,Z.statusMessageText)(h)??"")}})}function r(){return Un({quality:e.layoutQuality,linearLayout:e.linearLayout,bubbleSpread:e.bubbleSpread,showDeletionEdges:e.showDeletionEdges})}function*a(g){let y=performance.now(),h=Ee.has(e.chosenLayoutMode),M=e.graphRegion,v=h&&M?Vi(g,M):g,L=h&&e.tubeMapFold>0&&!v.reads?_i(v,e.tubeMapFold):void 0,A=O(e.chosenLayoutMode).run(L?.graph??v,e.graphRegion,e.host?e.layoutResult?.sampleRows:void 0);if(A)return{result:L&&A.tubeMap?{...A,tubeMap:{...A.tubeMap,coarse:L}}:A,duration:performance.now()-y};let I=r(),D=it.ready(g,I);return D?{result:D,duration:performance.now()-y}:yield it.layout(g,I,o)}let i=0,s=new Map;function*c(g){let y=++i,h=()=>e.graph===g&&y===i,M=t?.signal,v;try{if(e.modeDrawsNodes&&g.nodes.length>e.maxGraphNodes)throw new Error(`Graph too large to draw: ${g.nodes.length.toLocaleString()} nodes (limit ${e.maxGraphNodes.toLocaleString()}). Pick Layout \u2192 Walk rows, zoom in to a smaller region, or raise maxGraphNodes on this view.`);v=yield*a(g)}catch(A){if(!h()||M?.aborted)return!1;throw A}let L=h();if(L){let A=e.layoutResult,I=A!==void 0&&A!==v.result;e.layoutResult=v.result,e.setLayoutMs(v.duration),e.followNewLayout(I)}return L}function d(g,y){let h=g.anchorPaths;return g.anchoredBy==="paths"&&h?(kn(g,e.assemblySpellings(y.assemblyName))??vn(h,y.assemblyName))?.name:void 0}function*m(g,y,h,M=!1,v){let L=t?.signal;e.setStatusMessage("Parsing GFA");let A=Yn(g,y,{referencePath:e.referencePath||h?.assemblyName}),I=h?d(A,h):void 0,D=!e.referencePath&&I!==void 0&&I!==A.referencePath?je(A,I):A;if(v){e.setStatusMessage("Reading alignments");try{let{records:H,total:U}=yield v(D);D.reads=H,e.readsShown={shown:H.length,total:U}}catch(H){if(L?.aborted)return;console.warn("[GraphGenomeView] no reads for this graph",H),e.readsShown=void 0}if(L?.aborted)return}else e.readsShown=void 0;let $=M?e.selectedNode:null;e.graph=D,e.graphRegion=h,e.loadedReferencePath=I,e.indexBubbles=void 0,e.geneTrackFeatures=void 0,e.walkGeneFeatures=void 0,s.clear(),e.repeatArrays=void 0,e.popStack=[],e.clearInteractionState(),$!==null&&e.nodeById?.has($)&&(e.selectedNode=$),e.setStatusMessage("Computing layout"),yield*c(D)}let l=0;function p(){let g=++l;return t?.abort(),t=new AbortController,e.loadCanceled=!1,{isLive:()=>g===l,signal:t.signal}}function*u(g,y,h){let M=Ci(g);if(!(g.type!=="RgfaTabixAdapter"||M===void 0))try{let v=yield(0,Z.getSession)(e).rpcManager.call((0,Z.getRpcSessionId)(e),"CoreGetFeatures",{adapterConfig:{type:"MinigraphBubbleAdapter",uri:`${M}.bubbles.bed.gz`,baseUri:g.baseUri,assemblyNameToPanSN:g.assemblyNameToPanSN},regions:[y]});h()&&(e.indexBubbles=v.map(L=>({refName:y.refName,start:L.get("start"),end:L.get("end"),segmentCount:L.get("segmentCount"),pathCount:L.get("pathCount")??0,inversion:L.get("inversion"),shortestAlleleLength:L.get("shortestAlleleLength"),longestAlleleLength:L.get("longestAlleleLength"),segments:L.get("segments"),shortestAllele:void 0,longestAllele:void 0})))}catch(v){console.warn("[GraphGenomeView] no bubble index for this graph",v)}}function*w(g,y,h){let M=(0,Z.getSession)(e),v=g?M.tracks.find(L=>L.trackId===g):void 0;if(v)try{return yield M.rpcManager.call((0,Z.getRpcSessionId)(e),"CoreGetFeatures",{adapterConfig:(0,Ns.readConfObject)(v,"adapter"),regions:[y]})}catch(L){console.warn(`[GraphGenomeView] no ${h} for this graph`,L);return}}function*R(g,y){let h=yield*w(e.geneTrack?.trackId,g,"genes");h&&y()&&(e.geneTrackFeatures=h)}function*k(g,y){let h=yield*w(e.repeatTrack?.trackId,g,"repeats");h&&y()&&(e.repeatArrays=ls(h))}function*f(g,y,h){let{isLive:M,signal:v}=p();e.isLoading=!0,e.error=void 0;try{let L=typeof y=="string"?y:yield y(v);M()&&(yield*m(L,g,h))}catch(L){M()&&(console.error("[GraphGenomeView.loadWholeGFA]",L),e.error=L)}finally{M()&&e.finishLoading()}return M()}function S(){t?.abort(),t=void 0,l++,i++}function G(){S(),e.graph=void 0,e.graphRegion=void 0,e.loadedReferencePath=void 0,e.layoutResult=void 0,e.indexBubbles=void 0,e.geneTrackFeatures=void 0,e.walkGeneFeatures=void 0,s.clear(),e.repeatArrays=void 0,e.readsShown=void 0,e.popStack=[],e.error=void 0,e.isLoading=!1,e.loadCanceled=!1,e.statusMessage="",e.clearInteractionState(),e.clearPerfMetrics()}return{clearGraph(){G()},cancelLoad(){e.canCancelLoad&&(G(),e.loadCanceled=!0)},stopLoad(){S(),e.isLoading=!1,e.statusMessage="",e.loadCanceled=!0},beforeDestroy(){S()},loadGFA:(0,j.flow)(function*(g,y="Imported GFA"){yield*f(y,g)}),loadGFAFromLocation:(0,j.flow)(function*(g,y){e.setStatusMessage("Fetching GFA");let h=yield*f("uri"in g?g.uri.split("/").pop()??"GFA":"GFA",M=>(0,Co.openLocation)(g).readFile({encoding:"utf8",signal:M}),y);y&&h&&e.graph&&(yield*k(y,()=>e.graphRegion===y))}),cutSubgraph:(0,j.flow)(function*(g,y,h={}){let{isLive:M,signal:v}=p();e.isLoading=!0,e.error=void 0,e.setStatusMessage("Fetching subgraph");try{let L=performance.now(),A=yield(0,Z.getSession)(e).rpcManager.call((0,Z.getRpcSessionId)(e),"GetSubgraph",{adapterConfig:g,region:y,opts:h,signal:v});if(!M())return;if(e.setFetchMs(performance.now()-L),!A)throw new Error("Adapter returned no GFA \u2014 region may be outside indexed data or the adapter does not implement getSubgraph");if(yield*m(A,Je(y),y,!0,Oa(g)?I=>(0,Z.getSession)(e).rpcManager.call((0,Z.getRpcSessionId)(e),"GetGraphReads",{adapterConfig:g,nodeNames:I.nodes.map(D=>D.name),signal:v}):void 0),!M())return;e.setStatusMessage("Reading annotations"),yield Promise.all([h.tier==="coarse"?void 0:(0,j.flow)(u)(g,y,M),(0,j.flow)(R)(y,M),(0,j.flow)(k)(y,M)])}catch(L){M()&&(console.error("[GraphGenomeView.cutSubgraph]",L),e.error=L)}finally{M()&&e.finishLoading()}}),reloadRepeats:(0,j.flow)(function*(){let g=e.graphRegion,y=e.repeatTrack?.trackId;g&&(yield*k(g,()=>e.graphRegion===g&&e.repeatTrack?.trackId===y))}),loadWalkRowSampleTable:(0,j.flow)(function*(){let g=e.walkRowSamplesTsv,y=g?JSON.stringify(g):void 0;if(y!==n&&(n=y,e.walkRowSampleTable=void 0,!!g))try{let h=yield(0,Co.openLocation)(g).readFile("utf8");(0,j.isAlive)(e)&&y===n&&(e.walkRowSampleTable=Gr(h))}catch(h){(0,j.isAlive)(e)&&y===n&&(0,Z.getSession)(e).notify(`Walk rows cannot be grouped: the samples table did not load (${String(h)})`,"warning")}}),loadWalkGenes:(0,j.flow)(function*(){let g=e.walkGeneReads?.reads??[],y=JSON.stringify(g),h=e.graph,M=new Map;yield Promise.all(g.map(({row:v,trackId:L,region:A})=>(0,j.flow)(function*(){let I=`${L} ${A.refName}:${A.start}-${A.end}`,D=s.get(I);if(!D){let $=yield*w(L,A,"haplotype genes");if(!$)return;D=nn($).map(H=>({...H,refName:A.refName})),s.set(I,D)}M.set(v,D)})())),(0,j.isAlive)(e)&&e.graph===h&&JSON.stringify(e.walkGeneReads?.reads??[])===y&&(e.walkGeneFeatures=g.length?M:void 0)}),reloadGenes:(0,j.flow)(function*(){s.clear();let g=e.graphRegion,y=e.geneTrack?.trackId;g&&(yield*R(g,()=>e.graphRegion===g&&e.geneTrack?.trackId===y))}),popBubble:(0,j.flow)(function*(g){let y=e.graph;if(!y)return;let h=co(y,$t(g));if(h.nodes.length===0){(0,Z.getSession)(e).notify("None of the segments of this bubble are in the cut; widen the graph context to open it","info");return}let{isLive:M}=p();e.popStack=[...e.popStack,{graph:y,layoutMode:e.chosenLayoutMode,label:y.name,indexBubbles:e.indexBubbles}],e.indexBubbles=void 0;let v=`${Hr[Dt(g,e.repeatArrays).kind]} at ${g.refName}:${g.start.toLocaleString()}`;e.graph={...h,name:v},e.clearInteractionState(),e.viewportOwner="fit",e.isLoading=!0;try{(yield*c(e.graph))&&e.finishLoading()}catch(L){M()&&(e.error=L,e.finishLoading())}}),unpopBubble:(0,j.flow)(function*(){let g=e.poppedFrom;if(g){e.popStack=e.popStack.slice(0,-1),e.graph=g.graph,e.layoutMode=g.layoutMode,e.indexBubbles=g.indexBubbles,e.clearInteractionState(),e.viewportOwner="fit",e.isLoading=!0;try{(yield*c(g.graph))&&e.finishLoading()}catch(y){e.error=y,e.finishLoading()}}}),recomputeLayout:(0,j.flow)(function*(){let g=e.graph;if(g){e.isLoading=!0,e.setStatusMessage("Computing layout");try{(yield*c(g))&&e.finishLoading()}catch(y){console.error("[GraphGenomeView.recomputeLayout]",y),e.error=y,e.finishLoading()}}})}});function ap(e){return Q(e)&&typeof e.get=="function"}function ip(e){let t=ap(e)?e.get("name"):Q(e)?e.name:void 0;return typeof t=="string"?t:void 0}function Cs(e){let t;if(Q(e)&&Q(e.hoverPosition)){let{refName:n,coord:o,coord0:r,assemblyName:a}=e.hoverPosition;typeof n=="string"&&typeof o=="number"&&(t={refName:n,coord:typeof r=="number"?r:o-1,assemblyName:typeof a=="string"?a:void 0,featureName:ip(e.hoverFeature)})}return t}function Es(e,t){return(e.assemblyName===void 0||e.assemblyName===t.assemblyName)&&e.refName===t.refName&&e.coord>=t.start&&e.coord<t.end}function Bs({hover:e,nodes:t}){let n,o;for(let r of t)r.name===e.featureName?n=r.id:o===void 0&&V(r)&&e.coord>=r.stable.start&&e.coord<r.stable.start+r.length&&(o=r.id);return n??o??null}var sp=/^(.+) HP(\d+)$/,cp=/^(.+)\.(\d+)$/;function dp(e){let t=sp.exec(e),n=cp.exec(e);return[...t?[{sample:t[1],haplotype:String(Number(t[2])+1)}]:[],...n?[{sample:n[1],haplotype:n[2]}]:[],{sample:e,haplotype:void 0}]}function pp(e){return J(e).name.split("#")[1]}function Fs(e,t){let n=t.map(o=>o.name);for(let{sample:o,haplotype:r}of dp(e)){let a=n.filter(i=>er(J(i).name)===o&&(r===void 0||pp(i)===r));if(a.length>0)return a}return[]}var $s=Is.actions(e=>({startRenderingBackend(t){if(!e.autorunsInstalled){(0,pe.addDisposer)(e,(0,_.autorun)(()=>{e.fittedTransform&&(0,_.untracked)(()=>e.viewportOwner==="fit")&&e.zoomToFit()})),(0,pe.addDisposer)(e,(0,_.reaction)(()=>`${e.viewBox.width} ${e.viewBox.height}`,()=>{e.keepDrawingInView()})),(0,pe.addDisposer)(e,(0,_.reaction)(()=>{let o=e.facetGrid;return o?`${e.facet.field} ${e.facetPanels?.length} ${o.columns}`:""},()=>{e.refitView()})),(0,pe.addDisposer)(e,(0,_.reaction)(()=>({graph:e.graph,reads:JSON.stringify(e.walkGeneReads?.reads??[])}),()=>{e.loadWalkGenes()},{fireImmediately:!0,equals:(o,r)=>o.graph===r.graph&&o.reads===r.reads})),(0,pe.addDisposer)(e,(0,_.reaction)(()=>e.chosenLayoutMode==="walkrows"?JSON.stringify(e.walkRowSamplesTsv??null):void 0,o=>{o!==void 0&&e.loadWalkRowSampleTable()},{fireImmediately:!0})),(0,pe.addDisposer)(e,(0,_.reaction)(()=>e.fitPadTop,()=>{e.viewportOwner==="host"&&e.zoomToFit()})),(0,pe.addDisposer)(e,(0,_.autorun)(()=>{let o=Cs((0,Ds.getSession)(e).hovered);(0,_.untracked)(()=>{let r=e.graphRegion,a=e.graph,i=o&&r&&Es(o,r)?o:void 0,s=i?.featureName&&a?.paths?Fs(i.featureName,a.paths):[];r&&a&&!e.pointerInPane&&e.setHoveredNode(i&&s.length===0?Bs({hover:i,nodes:a.nodes}):null),e.setHoveredRowWalks(s)})})),(0,pe.addDisposer)(e,(0,_.reaction)(()=>`${e.scale}-${e.translateX}-${e.translateY}`,()=>{e.setHoveredNode(null),e.setHoveredBubble(null),e.setHoveredEdge(null)},{name:"GraphClearHoverOnViewportChange"}));let n=!0;(0,pe.addDisposer)(e,(0,_.autorun)(()=>{let{scale:o}=e,r=at(e);if(n){n=!1;return}let a=(0,_.untracked)(()=>e.builtViewport);a?.scale===o&&eo(a.bounds,r)||e.scheduleViewportDirty()})),(0,pe.addDisposer)(e,(0,_.autorun)(()=>{let o=e.currentRenderingBackend;he(e.geometryVersion),o&&(e.applyHighlights(o),e.renderNow())}))}e.attachRenderingBackend(t,()=>({upload:n=>{if(n.resize(e.paneWidth,e.canvasHeight),e.layoutResult?.tubeMap)return he(e.viewportDirty),n.uploadGeometry(io),e.setGeometryMetrics(0,0,{scale:(0,_.untracked)(()=>e.scale),bounds:(0,_.untracked)(()=>at(e))}),!0;if(e.facetPanels)return he(e.viewportDirty),n.uploadGeometry(io),e.setGeometryMetrics(0,0,{scale:(0,_.untracked)(()=>e.scale),bounds:(0,_.untracked)(()=>e.viewportToBuild())}),!0;let o=performance.now(),r=e.buildDrawing(e.walkLift,e.effectiveDrawPaths);return r?(n.uploadGeometry(r.batch),e.setGeometryMetrics(performance.now()-o,r.batch.nodeStrokes.length,{scale:(0,_.untracked)(()=>e.scale),bounds:r.viewportBounds}),!0):!1},render:n=>e.nodePositions?(e.paint(n),e.markPainted(),!0):!1,releaseTargets:n=>{n.releaseOffscreenTargets()}}))}})).actions(e=>({switchLayout(t){return e.setLayoutMode(t),e.recomputeLayout()},toggleDeletionEdges(){return e.setShowDeletionEdges(!e.showDeletionEdges),e.usesLayoutEngine?e.recomputeLayout():void 0},retryLoad(){},afterAttach(){e.isDefaultViewport||(e.viewportOwner="user")}}));var sn=b(q(),1),up="FeatureTrack";function Vs({session:e,assemblyName:t,first:n}){let o=[];for(let r of e.tracks){let a=(0,sn.readConfObject)(r,"type"),i=(0,sn.readConfObject)(r,"assemblyNames"),s=(0,sn.readConfObject)(r,"trackId");a===up&&Array.isArray(i)&&i.includes(t)&&typeof s=="string"&&s!==n&&o.push(s)}return n?[n,...o]:o}var cn=b(q(),1),Os=b(Xc(),1),dn=b(oe(),1);var mp="SyntenyTrack",lp="Synteny adapters";function gp(e){if((0,cn.readConfObject)(e,"type")===mp)return!0;let t=e.adapter?.type;if(typeof t!="string"||!(0,dn.isStateTreeNode)(e))return!1;let{pluginManager:n}=(0,dn.getEnv)(e);return!!n?.hasAdapterType(t)&&n.getAdapterType(t).adapterMetadata?.category===lp}function _s(e,t){let n=new Set(t),o=[];for(let r of e.tracks){let a=(0,cn.readConfObject)(r,"assemblyNames"),i=(0,cn.readConfObject)(r,"trackId");if(gp(r)&&typeof i=="string"&&Array.isArray(a)){let s=a.filter(c=>typeof c=="string"&&n.has(bt(e,c))).length;s>=2&&o.push({trackId:i,name:(0,Os.getTrackName)(r,e),coverage:s})}}return o.sort((r,a)=>a.coverage-r.coverage)}function Hs(e,t,n="image/svg+xml"){let o=URL.createObjectURL(new Blob([e],{type:n})),r=document.createElement("a");r.href=o,r.download=t,r.click(),setTimeout(()=>{URL.revokeObjectURL(o)},0)}var js=$s.actions(e=>({showInLinearView(t){let n=(0,fe.getSession)(e),o=t.assembly===e.graphRegion?.assemblyName,r=ys({session:n,location:t.location,assembly:t.assembly,connectedViewId:e.connectedViewId,tracks:Vs({session:n,assemblyName:t.assembly,first:o?e.sourceTrackId:void 0})});o&&e.pairWithLinearView(r)},highlightInLinearView(t){ks({session:(0,fe.getSession)(e),location:t.location,assembly:t.assembly,connectedViewId:e.connectedViewId})},showSyntenyView(t){Ss({session:(0,fe.getSession)(e),contributors:e.launchableAssemblies,trackId:t,graphTrackId:e.sourceTrackId})}})).views(e=>({get syntenyLaunchTracks(){let t=e.launchableAssemblies.map(n=>n.sample);return t.length>=2?_s((0,fe.getSession)(e),t):[]}})).views(e=>({walkRowSampleMenuItems(){let{disagreeing:t}=e.walkRowSampleChoices,n=e.walkRowSamples,o=r=>r.join(`
|
|
5
|
+
`)&&(e.hoveredRowWalks=t)},setHoveredWalkRow(t){e.hoveredWalkRow=t},setHoveredBubble(t){e.hoveredBubble=t},setPointerInPane(t){e.pointerInPane=t},setWalkStrip(t){e.walkStrip=t,e.stripHover=null},setStripHover(t){e.stripHover=t;let n=e.walkStripRows,o=e.walkStripFrame,r=t&&n?[n.reference,...n.rows].find(i=>i.name===t.row):void 0,a=r&&o&&e.graph?Ur(e.graph,r,t.offset,o.scaleX):void 0;e.hoveredNode=a??null},setLegendSize(t){e.legendSize=t},setHoveredEdge(t){e.hoveredEdge=t},setSelectedNode(t){e.selectedNode=t},setDraggingNode(t){e.draggingNode=t},setPanning(t){e.isPanning=t},stopDragging(){e.draggingNode=null,e.isPanning=!1},clearInteractionState(){e.hoveredNode=null,e.hoveredWalkRow=null,e.hoveredBubble=null,e.hoveredEdge=null,e.selectedNode=null,e.draggingNode=null,e.isPanning=!1},showNodeDetails(t){let n=e.nodeById?.get(t),o=e.nodeById,r=e.nodeNeighbors;if(n&&o&&r){let a=(0,bt.getSession)(e),i=e.graphRegion,s=i?we({nodeId:t,nodeById:o,neighbors:r}):void 0;(0,bt.isSessionModelWithWidgets)(a)&&a.showWidget(a.addWidget("BaseFeatureWidget","baseFeature",{featureData:{id:n.id,name:n.name,length:n.length,depth:n.depth,rank:n.stable?.rank,stableName:n.stable?.refName,contributingAssembly:Ue(n)?.sample,contributingHaplotype:Ue(n)?.haplotype,sampleCount:n.samples?.length,samples:n.samples,...i&&s?{refName:i.refName,assemblyName:i.assemblyName,start:s.start,end:s.end}:{}}}))}},setTransform(t,n,o){let{host:r}=e;e.viewportOwner==="host"&&r?r.horizontalScroll(e.translateX-n):(e.viewportOwner="user",e.scale=Ne(t),e.translateX=n),e.translateY=o,e.keepDrawingInView()},zoom(t,n,o){let{host:r}=e;if(e.viewportOwner==="host"&&r){r.zoomTo(r.bpPerPx/t,n);return}e.viewportOwner="user";let a=eo(e,t,n,o,e.pixelRows);e.scale=a.scale,e.translateX=a.translateX,e.translateY=a.translateY,e.keepDrawingInView()},setViewportDirty(){e.viewportRebuildPending=!1,e.viewportDirty++},setPositionsDirty(){e.positionsVersion++},zoomToFit(){if(e.viewportOwner==="host"){let n=e.layoutBounds,o=e.facetGrid!==void 0,r=o?oe:F,a=o?oe:e.fitPadTop,i=e.viewBox.height-a-r;n&&i>0&&(e.translateY=Xt(n,i,e.scaleY,a));return}let t=e.fittedTransform;t&&(e.scale=t.scale,e.translateX=t.translateX,e.translateY=t.translateY)},clearPerfMetrics(){e.lastFetchMs=void 0,e.lastLayoutMs=void 0,e.lastGeometryMs=void 0,e.lastGeometryStrokeCount=void 0,e.builtViewport=void 0}})).actions(e=>({hostTransform(t,n){let o=e.viewportOwner!=="host";o&&(e.viewportOwner="host"),e.scale=t,e.translateX=n,o&&e.zoomToFit()},followNewLayout(t){let n=e.layoutBounds;if(e.viewportOwner!=="user"||!n||t===e.layoutResult)return;let o=t?.referenceAxis===!0&&e.xIsReferenceBp;t===void 0||o&&(!e.paneMeasured||Ls(n,e,e.viewBox))?e.keepDrawingInView():(e.viewportOwner="fit",e.zoomToFit())},refitView(){e.viewportOwner==="user"&&(e.viewportOwner="fit"),e.zoomToFit()},releaseHost(){e.viewportOwner==="host"&&(e.xIsReferenceBp?e.viewportOwner="user":(e.viewportOwner="fit",e.zoomToFit()))}})).actions(e=>{function t(){clearTimeout(e.viewportDirtyTimer),e.viewportRebuildPending=!0,e.viewportDirtyTimer=setTimeout(()=>{(0,Ao.isAlive)(e)&&e.setViewportDirty()},Ei)}function n(){cancelAnimationFrame(e.positionsDirtyFrame),e.positionsDirtyFrame=requestAnimationFrame(()=>{(0,Ao.isAlive)(e)&&e.setPositionsDirty()})}return{moveNode(o,r,a){let i=e.layoutResult?.nodePositions;if(i?.[o]){for(let s of i[o])s.x+=r,s.y+=a;n()}},scheduleViewportDirty:t}});var Gs=vs.actions(e=>{let t,n;function o(m){let{rpcManager:w}=(0,J.getSession)(e);return w.call((0,J.getRpcSessionId)(e),"GraphComputeLayout",{...m,signal:t?.signal,statusCallback:g=>{e.setStatusMessage((0,J.statusMessageText)(g)??"")}})}function r(){return Yn({quality:e.layoutQuality,linearLayout:e.linearLayout,bubbleSpread:e.bubbleSpread,showDeletionEdges:e.showDeletionEdges})}function*a(m){let w=performance.now(),g=Ce.has(e.chosenLayoutMode),M=e.graphRegion,v=g&&M?Vi(m,M):m,L=g&&e.tubeMapFold>0&&!v.reads?_i(v,e.tubeMapFold):void 0,A=_(e.chosenLayoutMode).run(L?.graph??v,e.graphRegion,e.host?e.layoutResult?.sampleRows:void 0);if(A)return{result:L&&A.tubeMap?{...A,tubeMap:{...A.tubeMap,coarse:L}}:A,duration:performance.now()-w};let C=r(),D=at.ready(m,C);return D?{result:D,duration:performance.now()-w}:yield at.layout(m,C,o)}let i=0,s=new Map;function*c(m){let w=++i,g=()=>e.graph===m&&w===i,M=t?.signal,v;try{if(e.modeDrawsNodes&&m.nodes.length>e.maxGraphNodes)throw new Error(`Graph too large to draw: ${m.nodes.length.toLocaleString()} nodes (limit ${e.maxGraphNodes.toLocaleString()}). Pick Layout \u2192 Walk rows, zoom in to a smaller region, or raise maxGraphNodes on this view.`);v=yield*a(m)}catch(A){if(!g()||M?.aborted)return!1;throw A}let L=g();if(L){let A=e.layoutResult;e.layoutResult=v.result,e.setLayoutMs(v.duration),e.followNewLayout(A)}return L}function d(m,w){let g=m.anchorPaths;return m.anchoredBy==="paths"&&g?(yn(m,e.assemblySpellings(w.assemblyName))??Ln(g,w.assemblyName))?.name:void 0}function*l(m,w,g,M=!1,v){let L=t?.signal;e.setStatusMessage("Parsing GFA");let A=zn(m,w,{referencePath:e.referencePath||g?.assemblyName}),C=g?d(A,g):void 0,D=!e.referencePath&&C!==void 0&&C!==A.referencePath?We(A,C):A;if(v){e.setStatusMessage("Reading alignments");try{let{records:H,total:Y}=yield v(D);D.reads=H,e.readsShown={shown:H.length,total:Y}}catch(H){if(L?.aborted)return;console.warn("[GraphGenomeView] no reads for this graph",H),e.readsShown=void 0}if(L?.aborted)return}else e.readsShown=void 0;let V=M?e.selectedNode:null;e.graph=D,e.graphRegion=g,e.loadedReferencePath=C,e.indexBubbles=void 0,e.geneTrackFeatures=void 0,e.walkGeneFeatures=void 0,s.clear(),e.repeatArrays=void 0,e.popStack=[],e.clearInteractionState(),V!==null&&e.nodeById?.has(V)&&(e.selectedNode=V),e.setStatusMessage("Computing layout"),yield*c(D)}let b=0;function p(){let m=++b;return t?.abort(),t=new AbortController,e.loadCanceled=!1,{isLive:()=>m===b,signal:t.signal}}function*u(m,w,g){let M=Ii(m);if(!(m.type!=="RgfaTabixAdapter"||M===void 0))try{let v=yield(0,J.getSession)(e).rpcManager.call((0,J.getRpcSessionId)(e),"CoreGetFeatures",{adapterConfig:{type:"MinigraphBubbleAdapter",uri:`${M}.bubbles.bed.gz`,baseUri:m.baseUri,assemblyNameToPanSN:m.assemblyNameToPanSN},regions:[w]});g()&&(e.indexBubbles=v.map(L=>({refName:w.refName,start:L.get("start"),end:L.get("end"),segmentCount:L.get("segmentCount"),pathCount:L.get("pathCount")??0,inversion:L.get("inversion"),shortestAlleleLength:L.get("shortestAlleleLength"),longestAlleleLength:L.get("longestAlleleLength"),segments:L.get("segments"),shortestAllele:void 0,longestAllele:void 0})))}catch(v){console.warn("[GraphGenomeView] no bubble index for this graph",v)}}function*y(m,w,g){let M=(0,J.getSession)(e),v=m?M.tracks.find(L=>L.trackId===m):void 0;if(v)try{return yield M.rpcManager.call((0,J.getRpcSessionId)(e),"CoreGetFeatures",{adapterConfig:(0,Ts.readConfObject)(v,"adapter"),regions:[w]})}catch(L){console.warn(`[GraphGenomeView] no ${g} for this graph`,L);return}}function*x(m,w){let g=yield*y(e.geneTrack?.trackId,m,"genes");g&&w()&&(e.geneTrackFeatures=g)}function*k(m,w){let g=yield*y(e.repeatTrack?.trackId,m,"repeats");g&&w()&&(e.repeatArrays=ds(g))}function*h(m,w,g){let{isLive:M,signal:v}=p();e.isLoading=!0,e.error=void 0;try{let L=typeof w=="string"?w:yield w(v);M()&&(yield*l(L,m,g))}catch(L){M()&&(console.error("[GraphGenomeView.loadWholeGFA]",L),e.error=L)}finally{M()&&e.finishLoading()}return M()}function S(){t?.abort(),t=void 0,b++,i++}function G(){S(),e.graph=void 0,e.graphRegion=void 0,e.loadedReferencePath=void 0,e.layoutResult=void 0,e.indexBubbles=void 0,e.geneTrackFeatures=void 0,e.walkGeneFeatures=void 0,s.clear(),e.repeatArrays=void 0,e.readsShown=void 0,e.popStack=[],e.error=void 0,e.isLoading=!1,e.loadCanceled=!1,e.statusMessage="",e.clearInteractionState(),e.clearPerfMetrics(),e.viewportOwner==="user"&&(e.viewportOwner="fit")}return{clearGraph(){G()},cancelLoad(){e.canCancelLoad&&(G(),e.loadCanceled=!0)},stopLoad(){S(),e.isLoading=!1,e.statusMessage="",e.loadCanceled=!0},beforeDestroy(){S()},loadGFA:(0,j.flow)(function*(m,w="Imported GFA"){yield*h(w,m)}),loadGFAFromLocation:(0,j.flow)(function*(m,w){e.setStatusMessage("Fetching GFA");let g=yield*h("uri"in m?m.uri.split("/").pop()??"GFA":"GFA",M=>(0,No.openLocation)(m).readFile({encoding:"utf8",signal:M}),w);w&&g&&e.graph&&(yield*k(w,()=>e.graphRegion===w))}),cutSubgraph:(0,j.flow)(function*(m,w,g={}){let{isLive:M,signal:v}=p();e.isLoading=!0,e.error=void 0,e.setStatusMessage("Fetching subgraph");try{let L=performance.now(),A=yield(0,J.getSession)(e).rpcManager.call((0,J.getRpcSessionId)(e),"GetSubgraph",{adapterConfig:m,region:w,opts:g,signal:v});if(!M())return;if(e.setFetchMs(performance.now()-L),!A)throw new Error("Adapter returned no GFA \u2014 region may be outside indexed data or the adapter does not implement getSubgraph");if(yield*l(A,qe(w),w,!0,Oa(m)?C=>(0,J.getSession)(e).rpcManager.call((0,J.getRpcSessionId)(e),"GetGraphReads",{adapterConfig:m,nodeNames:C.nodes.map(D=>D.name),signal:v}):void 0),!M())return;e.setStatusMessage("Reading annotations"),yield Promise.all([g.tier==="coarse"?void 0:(0,j.flow)(u)(m,w,M),(0,j.flow)(x)(w,M),(0,j.flow)(k)(w,M)])}catch(L){M()&&(console.error("[GraphGenomeView.cutSubgraph]",L),e.error=L)}finally{M()&&e.finishLoading()}}),reloadRepeats:(0,j.flow)(function*(){let m=e.graphRegion,w=e.repeatTrack?.trackId;m&&(yield*k(m,()=>e.graphRegion===m&&e.repeatTrack?.trackId===w))}),loadWalkRowSampleTable:(0,j.flow)(function*(){let m=e.walkRowSamplesTsv,w=m?JSON.stringify(m):void 0;if(w!==n&&(n=w,e.walkRowSampleTable=void 0,!!m))try{let g=yield(0,No.openLocation)(m).readFile("utf8");(0,j.isAlive)(e)&&w===n&&(e.walkRowSampleTable=vr(g))}catch(g){(0,j.isAlive)(e)&&w===n&&(0,J.getSession)(e).notify(`Walk rows cannot be grouped: the samples table did not load (${String(g)})`,"warning")}}),loadWalkGenes:(0,j.flow)(function*(){let m=e.walkGeneReads?.reads??[],w=JSON.stringify(m),g=e.graph,M=new Map;yield Promise.all(m.map(({row:v,trackId:L,region:A})=>(0,j.flow)(function*(){let C=`${L} ${A.refName}:${A.start}-${A.end}`,D=s.get(C);if(!D){let V=yield*y(L,A,"haplotype genes");if(!V)return;D=tn(V).map(H=>({...H,refName:A.refName})),s.set(C,D)}M.set(v,D)})())),(0,j.isAlive)(e)&&e.graph===g&&JSON.stringify(e.walkGeneReads?.reads??[])===w&&(e.walkGeneFeatures=m.length?M:void 0)}),reloadGenes:(0,j.flow)(function*(){s.clear();let m=e.graphRegion,w=e.geneTrack?.trackId;m&&(yield*x(m,()=>e.graphRegion===m&&e.geneTrack?.trackId===w))}),popBubble:(0,j.flow)(function*(m){let w=e.graph;if(!w)return;let g=so(w,Dt(m));if(g.nodes.length===0){(0,J.getSession)(e).notify("None of the segments of this bubble are in the cut; widen the graph context to open it","info");return}let{isLive:M}=p();e.popStack=[...e.popStack,{graph:w,layoutMode:e.chosenLayoutMode,label:w.name,indexBubbles:e.indexBubbles}],e.indexBubbles=void 0;let v=`${_r[Ft(m,e.repeatArrays).kind]} at ${m.refName}:${m.start.toLocaleString()}`;e.graph={...g,name:v},e.clearInteractionState(),e.viewportOwner="fit",e.isLoading=!0;try{(yield*c(e.graph))&&e.finishLoading()}catch(L){M()&&(e.error=L,e.finishLoading())}}),unpopBubble:(0,j.flow)(function*(){let m=e.poppedFrom;if(m){e.popStack=e.popStack.slice(0,-1),e.graph=m.graph,e.layoutMode=m.layoutMode,e.indexBubbles=m.indexBubbles,e.clearInteractionState(),e.viewportOwner="fit",e.isLoading=!0;try{(yield*c(m.graph))&&e.finishLoading()}catch(w){e.error=w,e.finishLoading()}}}),recomputeLayout:(0,j.flow)(function*(){let m=e.graph;if(m){e.isLoading=!0,e.setStatusMessage("Computing layout");try{(yield*c(m))&&e.finishLoading()}catch(w){console.error("[GraphGenomeView.recomputeLayout]",w),e.error=w,e.finishLoading()}}})}});function op(e){return Q(e)&&typeof e.get=="function"}function rp(e){let t=op(e)?e.get("name"):Q(e)?e.name:void 0;return typeof t=="string"?t:void 0}function Ps(e){let t;if(Q(e)&&Q(e.hoverPosition)){let{refName:n,coord:o,coord0:r,assemblyName:a}=e.hoverPosition;typeof n=="string"&&typeof o=="number"&&(t={refName:n,coord:typeof r=="number"?r:o-1,assemblyName:typeof a=="string"?a:void 0,featureName:rp(e.hoverFeature)})}return t}function As(e,t){return(e.assemblyName===void 0||e.assemblyName===t.assemblyName)&&e.refName===t.refName&&e.coord>=t.start&&e.coord<t.end}function Ns({hover:e,nodes:t}){let n,o;for(let r of t)r.name===e.featureName?n=r.id:o===void 0&&O(r)&&e.coord>=r.stable.start&&e.coord<r.stable.start+r.length&&(o=r.id);return n??o??null}var ap=/^(.+) HP(\d+)$/,ip=/^(.+)\.(\d+)$/;function sp(e){let t=ap.exec(e),n=ip.exec(e);return[...t?[{sample:t[1],haplotype:String(Number(t[2])+1)}]:[],...n?[{sample:n[1],haplotype:n[2]}]:[],{sample:e,haplotype:void 0}]}function cp(e){return q(e).name.split("#")[1]}function Is(e,t){let n=t.map(o=>o.name);for(let{sample:o,haplotype:r}of sp(e)){let a=n.filter(i=>Zo(q(i).name)===o&&(r===void 0||cp(i)===r));if(a.length>0)return a}return[]}var Es=Gs.actions(e=>({startRenderingBackend(t){if(!e.autorunsInstalled){(0,de.addDisposer)(e,(0,$.autorun)(()=>{e.fittedTransform&&(0,$.untracked)(()=>e.viewportOwner==="fit")&&e.zoomToFit()})),(0,de.addDisposer)(e,(0,$.reaction)(()=>`${e.viewBox.width} ${e.viewBox.height}`,()=>{e.keepDrawingInView()})),(0,de.addDisposer)(e,(0,$.reaction)(()=>{let o=e.facetGrid;return o?`${e.facet.field} ${e.facetPanels?.length} ${o.columns}`:""},()=>{e.refitView()})),(0,de.addDisposer)(e,(0,$.reaction)(()=>({graph:e.graph,reads:JSON.stringify(e.walkGeneReads?.reads??[])}),()=>{e.loadWalkGenes()},{fireImmediately:!0,equals:(o,r)=>o.graph===r.graph&&o.reads===r.reads})),(0,de.addDisposer)(e,(0,$.reaction)(()=>e.chosenLayoutMode==="walkrows"?JSON.stringify(e.walkRowSamplesTsv??null):void 0,o=>{o!==void 0&&e.loadWalkRowSampleTable()},{fireImmediately:!0})),(0,de.addDisposer)(e,(0,$.reaction)(()=>e.fitPadTop,()=>{e.viewportOwner==="host"&&e.zoomToFit()})),(0,de.addDisposer)(e,(0,$.autorun)(()=>{let o=Ps((0,Cs.getSession)(e).hovered);(0,$.untracked)(()=>{let r=e.graphRegion,a=e.graph,i=o&&r&&As(o,r)?o:void 0,s=i?.featureName&&a?.paths?Is(i.featureName,a.paths):[];r&&a&&!e.pointerInPane&&e.setHoveredNode(i&&s.length===0?Ns({hover:i,nodes:a.nodes}):null),e.setHoveredRowWalks(s)})})),(0,de.addDisposer)(e,(0,$.reaction)(()=>`${e.scale}-${e.translateX}-${e.translateY}`,()=>{e.setHoveredNode(null),e.setHoveredBubble(null),e.setHoveredEdge(null)},{name:"GraphClearHoverOnViewportChange"}));let n=!0;(0,de.addDisposer)(e,(0,$.autorun)(()=>{let{scale:o}=e,r=rt(e);if(n){n=!1;return}let a=(0,$.untracked)(()=>e.builtViewport);a?.scale===o&&Qn(a.bounds,r)||e.scheduleViewportDirty()})),(0,de.addDisposer)(e,(0,$.autorun)(()=>{let o=e.currentRenderingBackend;ge(e.geometryVersion),o&&(e.applyHighlights(o),e.renderNow())}))}e.attachRenderingBackend(t,()=>({upload:n=>{if(n.resize(e.paneWidth,e.canvasHeight),e.layoutResult?.tubeMap)return ge(e.viewportDirty),n.uploadGeometry(ao),e.setGeometryMetrics(0,0,{scale:(0,$.untracked)(()=>e.scale),bounds:(0,$.untracked)(()=>rt(e))}),!0;if(e.facetPanels)return ge(e.viewportDirty),n.uploadGeometry(ao),e.setGeometryMetrics(0,0,{scale:(0,$.untracked)(()=>e.scale),bounds:(0,$.untracked)(()=>e.viewportToBuild())}),!0;let o=performance.now(),r=e.buildDrawing(e.walkLift,e.effectiveDrawPaths);return r?(n.uploadGeometry(r.batch),e.setGeometryMetrics(performance.now()-o,r.batch.nodeStrokes.length,{scale:(0,$.untracked)(()=>e.scale),bounds:r.viewportBounds}),!0):!1},render:n=>e.nodePositions?(e.paint(n),e.markPainted(),!0):!1,releaseTargets:n=>{n.releaseOffscreenTargets()}}))}})).actions(e=>({switchLayout(t){return e.setLayoutMode(t),e.recomputeLayout()},toggleDeletionEdges(){return e.setShowDeletionEdges(!e.showDeletionEdges),e.usesLayoutEngine?e.recomputeLayout():void 0},retryLoad(){},afterAttach(){e.isDefaultViewport||(e.viewportOwner="user")}}));var an=f(K(),1),dp="FeatureTrack";function Bs({session:e,assemblyName:t,first:n}){let o=[];for(let r of e.tracks){let a=(0,an.readConfObject)(r,"type"),i=(0,an.readConfObject)(r,"assemblyNames"),s=(0,an.readConfObject)(r,"trackId");a===dp&&Array.isArray(i)&&i.includes(t)&&typeof s=="string"&&s!==n&&o.push(s)}return n?[n,...o]:o}var sn=f(K(),1),Fs=f(jc(),1),cn=f(ne(),1);var pp="SyntenyTrack",up="Synteny adapters";function mp(e){if((0,sn.readConfObject)(e,"type")===pp)return!0;let t=e.adapter?.type;if(typeof t!="string"||!(0,cn.isStateTreeNode)(e))return!1;let{pluginManager:n}=(0,cn.getEnv)(e);return!!n?.hasAdapterType(t)&&n.getAdapterType(t).adapterMetadata?.category===up}function Ds(e,t){let n=new Set(t),o=[];for(let r of e.tracks){let a=(0,sn.readConfObject)(r,"assemblyNames"),i=(0,sn.readConfObject)(r,"trackId");if(mp(r)&&typeof i=="string"&&Array.isArray(a)){let s=a.filter(c=>typeof c=="string"&&n.has(ft(e,c))).length;s>=2&&o.push({trackId:i,name:(0,Fs.getTrackName)(r,e),coverage:s})}}return o.sort((r,a)=>a.coverage-r.coverage)}function Vs(e,t,n="image/svg+xml"){let o=URL.createObjectURL(new Blob([e],{type:n})),r=document.createElement("a");r.href=o,r.download=t,r.click(),setTimeout(()=>{URL.revokeObjectURL(o)},0)}var _s=Es.actions(e=>({showInLinearView(t){let n=(0,he.getSession)(e),o=t.assembly===e.graphRegion?.assemblyName,r=hs({session:n,location:t.location,assembly:t.assembly,connectedViewId:e.connectedViewId,tracks:Bs({session:n,assemblyName:t.assembly,first:o?e.sourceTrackId:void 0})});o&&e.pairWithLinearView(r)},highlightInLinearView(t){fs({session:(0,he.getSession)(e),location:t.location,assembly:t.assembly,connectedViewId:e.connectedViewId})},showSyntenyView(t){bs({session:(0,he.getSession)(e),contributors:e.launchableAssemblies,trackId:t,graphTrackId:e.sourceTrackId})}})).views(e=>({get syntenyLaunchTracks(){let t=e.launchableAssemblies.map(n=>n.sample);return t.length>=2?Ds((0,he.getSession)(e),t):[]}})).views(e=>({walkRowSampleMenuItems(){let{disagreeing:t}=e.walkRowSampleChoices,n=e.walkRowSamples,o=r=>r.join(`
|
|
6
6
|
`)===n?.join(`
|
|
7
|
-
`);return[{type:"radio",label:"Every sample",checked:n===void 0,onClick:()=>{e.setWalkRowSamples(void 0)}},...t.length>0?[{type:"radio",label:"Where walk and call disagree",checked:o(t),onClick:()=>{e.setWalkRowSamples(t)}}]:[],{type:"radio",label:"Choose samples...",checked:n!==void 0&&!o(t),onClick:()=>{(0,
|
|
8
|
-
`).then(()=>{n.notify("Figure spec copied. Save it as spec.json and run: npx -p @jbrowse/bandage-core bandage-figure spec.json -o figure.svg","info")}).catch(o=>{n.notify(`Could not copy the figure spec: ${String(o)}`)})}}]},highlightMenuItems(){let t=e.walkChoices;if(t.length===0||!e.liftsWalks)return[];let n=r=>e.walkLayers.some(a=>a.walk===r),o=t.length>Ni;return[{type:"subHeader",label:"Highlight"},...o?[{label:"Choose haplotypes...",onClick:()=>{(0,fe.getSession)(e).queueDialog(r=>[Pi,{model:e,onClose:r}])}}]:[],...(o?t.filter(r=>n(r.name)):t).map(r=>({type:"checkbox",label:r.label,checked:n(r.name),onClick:()=>{e.toggleWalk(r.name)}})),{label:"Clear highlights",disabled:e.walkLayers.length===0,onClick:()=>{e.setWalkLayers([])}},...e.drawnWalks.length>0?[{label:"Color highlighted...",onClick:()=>{(0,fe.getSession)(e).queueDialog(r=>[Ai,{model:e,onClose:r}])}}]:[],...e.walkLayers.length>1&&e.modeDrawsNodes?[{type:"subHeader",label:"Arrange"},...xr.map(({value:r,label:a})=>({type:"radio",label:r==="walk"?"A panel per haplotype":a,checked:e.facet.field===r,onClick:()=>{e.setFacet(r)}}))]:[]]},colorSchemeLabel(t){let n=Pn.find(o=>o.value===t)?.label??t;return t==="auto"?`${n} (${this.colorSchemeLabel(e.effectiveColorScheme)})`:n},graphMenuItems(){let t=this.layoutOptionMenuItems();return[{label:`Layout: ${O(e.chosenLayoutMode).label.replace(/ layout$/,"")}`,icon:ni,subMenu:[...kr.map(n=>({type:"radio",label:n.label,checked:e.chosenLayoutMode===n.value,disabled:e.graph?!n.available(e.graph):!1,onClick:()=>{e.switchLayout(n.value)}})),...t.length>0?[{type:"divider"},...t]:[],...e.hostPlacesX?[]:[{type:"divider"},{label:"Zoom to fit",onClick:()=>{e.zoomToFit()}}]]},{label:`Color: ${this.colorSchemeLabel(e.chosenColorScheme)}`,icon:ri,subMenu:Pn.map(n=>({type:"radio",label:this.colorSchemeLabel(n.value),checked:e.chosenColorScheme===n.value,onClick:()=>{e.setColorScheme(n.value)}}))},{label:"Show...",icon:si,subMenu:this.showMenuItems()}]},launchMenuItems(){let t=[];for(let n of Ga({contributors:e.launchableAssemblies,syntenyTracks:e.syntenyLaunchTracks,onShowLinear:o=>{e.showInLinearView(o)},onShowSynteny:o=>{e.showSyntenyView(o)}}))(0,Ws.pushLaunchViewMenuItem)(t,n);return t}}));function pn(){return js}var Eo=b(q(),1);function Xs(e){return Array.isArray(e)&&e.every(t=>typeof t=="string")}function Bo(e){let t=(0,Eo.readConfObject)(e,"assemblyNames"),n=Xs(t)?t.slice(1):[];return n.length>0?n:void 0}function un(e){let t=(0,Eo.readConfObject)(e,"assemblyNames");return Xs(t)?t[0]:void 0}function mn(e,t){return e===void 0||e===t?void 0:`The graph is cut on its reference, ${e}: open it from a view of ${e}`}function hp(e){return("uri"in e?e.uri.split(/[?#]/)[0]:"localPath"in e?e.localPath:"name"in e?e.name:"").split(/[\\/]/).at(-1)??""}function Fo(){return Y.types.compose("GraphGenomeView",zs.BaseViewModel,pn(),Y.types.model({type:Y.types.literal("GraphGenomeView"),gfaLocation:Y.types.maybe(Y.types.frozen()),loadedRegion:Y.types.maybe(Y.types.frozen()),loadedTrackId:Y.types.optional(Y.types.string,""),subgraphContext:Y.types.optional(Y.types.number,1),subgraphHaplotypes:Y.types.maybe(Y.types.frozen()),maxRegionBp:Y.types.optional(Y.types.number,rt)})).views(e=>({get rpcSessionId(){return e.id},get paneWidth(){return e.width},get cutHaplotypes(){return e.subgraphHaplotypes},get sourceGfaLocation(){return e.gfaLocation},get sourceTrack(){return e.loadedTrackId?(0,Ys.getSession)(e).tracks.find(t=>t.trackId===e.loadedTrackId):void 0},get canRetryLoad(){return e.gfaLocation!==void 0||e.loadedTrackId!==""&&e.loadedRegion!==void 0}})).views(e=>({get hasPendingSource(){return e.canRetryLoad&&!e.graph&&!e.loadCanceled},menuItems(){return[...e.exportMenuItems(),...e.launchMenuItems()]}})).actions(e=>{let t=e.clearGraph;return{clearGraph(){t(),e.gfaLocation=void 0,e.loadedRegion=void 0,e.loadedTrackId=""},load(){let n=e.loadedRegion;if(e.gfaLocation)return e.displayName||e.setDisplayName(hp(e.gfaLocation)),e.loadGFAFromLocation(e.gfaLocation,n);if(!e.loadedTrackId||!n)return;let o=e.sourceTrack,r=n.end-n.start,a=o?mn(un(o),n.assemblyName):void 0;if(!o)e.setError(new Error(`The track this graph was cut from, "${e.loadedTrackId}", is not in this session`));else if(a)e.setError(new Error(a));else if(r>e.maxRegionBp)e.setError(new Error(`Region too large (${Me(r)}) \u2014 zoom in to view graph (max ${Me(e.maxRegionBp)})`));else return e.cutSubgraph(we(e,o),n,{hops:e.subgraphContext,haplotypes:e.subgraphHaplotypes,...e.cutsWholeWalks?{snarls:"overlapping"}:{}})}}}).actions(e=>({retryLoad(){e.load()},switchLayout(t){let n=e.cutsWholeWalks;return e.setLayoutMode(t),e.loadedTrackId&&e.cutsWholeWalks!==n?e.load():e.recomputeLayout()},afterAttach(){e.graph||e.load(),(0,Y.addDisposer)(e,(0,Us.reaction)(()=>e.walkStrip,()=>{e.loadedTrackId&&!O(e.chosenLayoutMode).wholeWalks&&e.load()}))}}))}var fp=(0,Js.defineLaunchKeys)()({});function Do(e){e.addViewType(()=>new qs.default({name:"GraphGenomeView",displayName:"Graph genome view",stateModel:Fo(),launchKeys:fp,ReactComponent:(0,Ks.lazy)(()=>import("./chunks/GraphGenomeView-VIKLXNQD.js"))}))}var Zs=b(q(),1),Fe=b(be(),1),$o=["MultiWaySyntenyDisplay","LinearSyntenyDisplay","DotplotDisplay","ChordSyntenyDisplay"];function bp(e){let t=e.getElementTypesInGroup("display"),n=r=>t.find(a=>a.name===r),o=r=>r&&Object.assign(Object.create(r),{adapterCapabilities:["headerLanes"]});return[n("LinearGraphDisplay"),n("LinearBasicDisplay"),...$o.map(r=>o(n(r)))].filter(r=>r!==void 0)}function Vo(e){e.addTrackType(()=>{let t=(0,Zs.ConfigurationSchema)("GraphTrack",{},{baseConfiguration:(0,Fe.createBaseTrackConfig)(e),explicitIdentifier:"trackId"}),n=new Fe.TrackType({name:"GraphTrack",displayName:"Pangenome graph track",configSchema:t,stateModel:(0,Fe.createBaseTrackModel)(e,"GraphTrack",t)});for(let o of bp(e))n.addDisplayType(o);return n})}function Oo(e){e.addToExtensionPoint("LaunchView-GraphGenomeView",t=>{let{session:n,...o}=t;return n.addView("GraphGenomeView",o),t})}var yc=b(Oe(),1),kc=b(ec(),1);var oc=b(q(),1),rc=b(nc(),1),_o=b(oe(),1);function ac(){return(0,oc.ConfigurationSchema)("LinearGraphDisplay",{layoutMode:{type:"stringEnum",model:_o.types.enumeration("LayoutMode",Tt),defaultValue:"auto"},colorScheme:{type:"stringEnum",model:_o.types.enumeration("ColorScheme",Gt),defaultValue:"auto"},highlightOnHover:{type:"boolean",defaultValue:!0},...(0,rc.trackHeightConfigSchemaFields)({defaultHeight:300,height:"the height of the track the graph is drawn in"})},{explicitlyTyped:!0,explicitIdentifier:"displayId"})}var gc=b(Oe(),1);var De=b(q(),1),hc=b(be(),1),fc=b(pr(),1),Ho=b(ie(),1),bc=b(sc(),1),C=b(oe(),1),ln=b(dc(),1);var pc=b(de(),1),uc=(0,ne.createSvgIcon)((0,pc.jsx)("path",{d:"M19 15.18V7c0-2.21-1.79-4-4-4s-4 1.79-4 4v10c0 1.1-.9 2-2 2s-2-.9-2-2V8.82C8.16 8.4 9 7.3 9 6c0-1.66-1.34-3-3-3S3 4.34 3 6c0 1.3.84 2.4 2 2.82V17c0 2.21 1.79 4 4 4s4-1.79 4-4V7c0-1.1.9-2 2-2s2 .9 2 2v8.18c-1.16.41-2 1.51-2 2.82 0 1.66 1.34 3 3 3s3-1.34 3-3c0-1.3-.84-2.4-2-2.82"}),"Route");var yt=b(xt(),1);function mc(e){return e instanceof Error&&(e.name==="NodeLimitError"||e.regionTooLarge===!0||/reads more than nodeLimit|^Subgraph size limit of \d+ nodes exceeded/.test(e.message))}function lc(e,t){if(e?.refName!==t.refName||e.assemblyName!==t.assemblyName)return!1;let n=e.end-e.start;return t.end-t.start>=n&&t.end>e.start-n&&t.start<e.end+n}var wp=(0,gc.lazy)(()=>import("./chunks/GraphTrackSettingsDialog-MRMSH2FO.js"));function wc(e){return C.types.compose("LinearGraphDisplay",hc.BaseDisplay,(0,bc.default)(),pn(),C.types.model({type:C.types.literal("LinearGraphDisplay"),configuration:(0,De.ConfigurationReference)(e),pane:C.types.maybe(C.types.frozen()),overviewRowsChoice:C.types.maybe(C.types.frozen()),overviewRowOrder:C.types.maybe(C.types.frozen()),cutRegion:C.types.maybe(C.types.frozen()),coarseCut:C.types.optional(C.types.boolean,!1),maxRegionBp:C.types.optional(C.types.number,rt),subgraphContext:C.types.optional(C.types.number,1),subgraphHaplotypes:C.types.maybe(C.types.frozen())})).preProcessSnapshot(t=>{let{pane:n,overviewRowsChoice:o,overviewRowOrder:r,...a}=t;if(!n)return a;let{type:i,...s}=n;return{...s,...a}}).volatile(()=>({recuts:0,settledWindow:void 0,dense:void 0})).views(t=>({get adapterConfig(){return we(t,t.parentTrack.configuration)},get defaultLayoutMode(){return(0,De.getConf)(t,"layoutMode")},get defaultColorScheme(){return(0,De.getConf)(t,"colorScheme")},get defaultHighlightOnHover(){return(0,De.getConf)(t,"highlightOnHover")},get drawsGenomicCoordinates(){return t.layoutResult===void 0||t.hostPlacesX},get canvasHeight(){return t.height},get canRetryLoad(){return t.cutRegion!==void 0},get cutHaplotypes(){return this.chosenHaplotypes},get chosenHaplotypes(){return t.subgraphHaplotypes??Bo(t.parentTrack.configuration)},get coarseAboveBpPerPx(){let o=t.adapterConfig.coarse?.aboveBpPerPx;return typeof o=="number"?o:void 0}})).views(t=>({tierAt(n){let o=t.coarseAboveBpPerPx;return o!==void 0&&n>o?"coarse":"fine"},capFor(n){return n==="coarse"?1/0:t.maxRegionBp},get cutTier(){return t.coarseCut&&t.coarseAboveBpPerPx!==void 0?"coarse":"fine"}})).views(t=>({get settledCapBp(){let n=t.settledWindow;return n?t.capFor(t.tierAt(n.bpPerPx)):1/0}})).views(t=>({get regionTooLarge(){let n=t.settledWindow;return n!==void 0&&n.end-n.start>t.settledCapBp},get regionTooLargeReason(){let n=t.settledWindow;return n?`Region too large for a graph cut (${Me(n.end-n.start)}, max ${Me(t.settledCapBp)})`:""},get zoomCanReleaseGate(){return!0},get fetchCanceled(){return t.loadCanceled}})).views(t=>({get displayPhase(){return(0,ln.computeDisplayStatusPhase)({regionTooLarge:t.regionTooLarge,error:t.error??t.renderError},()=>(0,ln.computeActivityPhase)({isMinimized:t.isMinimized,fetchInert:!1,viewportEmpty:t.host?.initialized===!0&&t.host.hasVisibleContent===!1,isLoading:t.isLoading||!t.hasGraph,fetchCanceled:t.loadCanceled,awaitingDependentData:!1,rendersCanvas:!0,canvasDrawn:t.painted&&t.geometryPainted},()=>!0,()=>t.host?.effectiveBodyMounted??!0))}})).actions(t=>({setSubgraphContext(n){t.subgraphContext=n},setSubgraphHaplotypes(n){t.subgraphHaplotypes=n,t.dense=void 0},setDense(n){t.dense=n},setMaxRegionBp(n){t.maxRegionBp=n},cut(){let n=t.cutRegion;if(!n)return;let o=mn(un(t.parentTrack.configuration),n.assemblyName);if(o){t.clearGraph(),t.setError(new Error(o));return}let r=t.cutTier==="coarse";return t.cutSubgraph(t.adapterConfig,n,{hops:r?0:t.subgraphContext,haplotypes:t.chosenHaplotypes,tier:r?"coarse":void 0,...O(t.chosenLayoutMode).wholeWalks?{snarls:"overlapping"}:{}})}})).actions(t=>({recutAt(n){let o=t.tierAt(n.bpPerPx);return t.coarseCut=o==="coarse",t.cutRegion=wo(n,t.capFor(o),O(t.chosenLayoutMode).cutMargins),t.recuts++,t.cut()}})).actions(t=>({settleOn(n){t.settledWindow=n;let o=O(t.chosenLayoutMode).cutMargins;return t.regionTooLarge||lc(t.dense,n)||!t.loadCanceled&&t.tierAt(n.bpPerPx)===t.cutTier&&os(t.cutRegion,n,o)?!1:(Promise.resolve(t.recutAt(n)).then(()=>{(0,C.isAlive)(t)&&mc(t.error)&&this.refuseDenseCut(n)}),!0)},refuseDenseCut(n){t.setDense(n),t.cutRegion=void 0,this.settleOn(t.settledWindow??n)},switchLayout(n){let o=O(t.chosenLayoutMode);t.setLayoutMode(n);let r=O(n),a=t.host?Qt(t.host):void 0;return a&&!t.regionTooLarge&&(r.cutMargins!==o.cutMargins||r.wholeWalks!==o.wholeWalks)?t.recutAt(a):t.recomputeLayout()},retryLoad(){t.cut()},reload(){t.cut()},cancelFetchByUser(){t.stopLoad()}})).actions(t=>({forceLoad(){let n=t.settledWindow;n&&(t.setMaxRegionBp(Math.ceil(n.end-n.start)),t.settleOn(n))},afterAttach(){t.cutRegion&&!t.graph&&t.cut(),(0,C.addDisposer)(t,(0,yt.reaction)(()=>t.hostPlacesX,n=>{n||t.releaseHost()},{name:"GraphHostPlacesX"})),(0,C.addDisposer)(t,(0,yt.reaction)(()=>t.hostFrame,n=>{n&&t.hostTransform(n.scale,n.translateX)},{equals:(n,o)=>n?.scale===o?.scale&&n?.translateX===o?.translateX,fireImmediately:!0,name:"GraphHostFrame"})),(0,C.addDisposer)(t,(0,yt.reaction)(()=>`${t.facet.field} ${t.facetPlacement?.count}`,()=>{let n=t.facetGridIn(t.paneCeiling)?.total??0;(t.facetGrid?.total??0)>t.height&&t.setHeight(Math.max(t.height,Math.ceil(n)))},{name:"GraphFacetHeight"})),(0,C.addDisposer)(t,(0,yt.reaction)(()=>t.host?.coarseDynamicBlocks,n=>{let{host:o}=t,r=n&&o?Qt(o):void 0;r&&t.settleOn(r)},{fireImmediately:!0,name:"GraphHostSettle"}))}})).views(t=>({get graphViewSpec(){let n=t.host?Qt(t.host):void 0,o=t.sourceTrackId;if(!n||!o||!t.hasGraph||t.coarseCut||t.regionTooLarge)return;let r=Math.floor(n.start),a=Math.ceil(n.end);return{loadedTrackId:o,loadedRegion:{refName:n.refName,assemblyName:n.assemblyName,start:r,end:a},subgraphContext:t.subgraphContext,subgraphHaplotypes:t.chosenHaplotypes,maxRegionBp:Math.max(t.maxRegionBp,a-r),layoutMode:t.chosenLayoutMode,colorScheme:t.chosenColorScheme,referencePath:t.referencePath,geneTrackId:t.geneTrackId,showGenes:t.showGenes,showBubbles:t.showBubbles,showDeletionEdges:t.showDeletionEdges,walkLayers:t.walkLayers,facet:(0,C.getSnapshot)(t.facet)}}})).actions(t=>({openGraphView(){let n=t.graphViewSpec;n&&(0,Ho.getSession)(t).addView("GraphGenomeView",n)}})).views(t=>({cutMenuItems(){if(t.adapterConfig.type!=="GbzBaseSyntenyAdapter")return[];let n=Bo(t.parentTrack.configuration),o=t.subgraphHaplotypes,r=a=>{t.setSubgraphHaplotypes(a),t.cut()};return[{type:"subHeader",label:"Load"},{type:"radio",label:"Every haplotype in the graph",checked:o?o.length===0:!n,onClick:()=>{r([])}},...n?[{type:"radio",label:`The track's ${n.length} assemblies`,checked:o===void 0,onClick:()=>{r(void 0)}}]:[],{type:"radio",label:"Chosen in Settings...",checked:(o?.length??0)>0,onClick:()=>{this.openSettings()}}]},openSettings(){(0,Ho.getSession)(t).queueDialog(n=>[wp,{model:t,open:!0,onClose:n}])},trackMenuItems(){let n=t.launchMenuItems();(0,fc.pushLaunchViewMenuItem)(n,{label:"Graph genome view",icon:Wt,disabled:!t.graphViewSpec,disabledHelpText:"Zoom in until the track cuts a graph",onClick:()=>{t.openGraphView()}});let o=[...this.cutMenuItems(),...t.highlightMenuItems()];return[...o.length>0?[{label:"Haplotypes",icon:uc,subMenu:o}]:[],...t.graphMenuItems(),{label:"Settings",icon:Pa,onClick:()=>{this.openSettings()}},...n]}}))}function Wo(e){e.addDisplayType(()=>{let t=ac();return Object.assign(new kc.default({name:"LinearGraphDisplay",displayName:"Graph",configSchema:t,stateModel:wc(t),trackType:["GraphTrack","FeatureTrack","SyntenyTrack"],viewType:"LinearGenomeView",ReactComponent:(0,yc.lazy)(()=>import("./chunks/LinearGraphDisplay-AHCKWNFJ.js"))}),{adapterCapabilities:["getSubgraph"]})})}var Rc=b(jt(),1);var jo=b(q(),1),Sc=b(oe(),1);function Xo(e){let{uri:t,baseUri:n,csi:o}=e;return typeof t=="string"?{...e,bubblesLocation:{uri:t,baseUri:n},index:{indexType:o?"CSI":"TBI",location:{uri:`${t}.${o?"csi":"tbi"}`,baseUri:n}}}:e}var yp=(0,jo.ConfigurationSchema)("MinigraphBubbleAdapter",{bubblesLocation:{type:"fileLocation",defaultValue:{uri:"/path/to/graph.bb.bed.gz",locationType:"UriLocation"}},index:(0,jo.ConfigurationSchema)("MinigraphBubbleIndex",{indexType:{model:Sc.types.enumeration("IndexType",["TBI","CSI"]),type:"stringEnum",defaultValue:"TBI"},location:{type:"fileLocation",defaultValue:{uri:"/path/to/graph.bb.bed.gz.tbi",locationType:"UriLocation"}}}),assemblyNameToPanSN:{type:"frozen",defaultValue:{}}},{explicitlyTyped:!0,preProcessSnapshot:Xo}),xc=yp;function zo(e){e.addAdapterType(()=>new Rc.default({name:"MinigraphBubbleAdapter",displayName:"Minigraph bubble BED adapter",normalizeSnapshot:Xo,configSchema:xc,adapterMetadata:{category:"Graph adapters"},getAdapterClass:()=>import("./chunks/MinigraphBubbleAdapter-CAXB5FGR.js").then(t=>t.default)}))}var Gc=b(jt(),1);var hn=b(q(),1),vc=b(oe(),1);function Mc(e,t,n){return{indexType:n?"CSI":"TBI",location:{uri:`${e}.${n?"csi":"tbi"}`,baseUri:t}}}function Lc(e){let{uri:t,baseUri:n,csi:o}=e;return typeof t=="string"?{...e,segmentsLocation:{uri:`${t}.segs.bed.gz`,baseUri:n},segmentsIndex:Mc(`${t}.segs.bed.gz`,n,o),linksLocation:{uri:`${t}.links.bed.gz`,baseUri:n},linksIndex:Mc(`${t}.links.bed.gz`,n,o)}:e}function Yo(e){let{coarse:t,baseUri:n}=e;return Lc(typeof t=="object"&&t!==null?{...e,coarse:Lc({baseUri:n,...t})}:e)}var gn=(e,t)=>(0,hn.ConfigurationSchema)(e,{indexType:{model:vc.types.enumeration("IndexType",["TBI","CSI"]),type:"stringEnum",defaultValue:"TBI"},location:{type:"fileLocation",defaultValue:{uri:t,locationType:"UriLocation"}}}),kp=(0,hn.ConfigurationSchema)("RgfaTabixCoarseTier",{aboveBpPerPx:{type:"maybeNumber"},segmentsLocation:{type:"fileLocation",defaultValue:{uri:"/path/to/graph.tier.segs.bed.gz",locationType:"UriLocation"}},segmentsIndex:gn("RgfaCoarseSegmentsIndex","/path/to/graph.tier.segs.bed.gz.tbi"),linksLocation:{type:"fileLocation",defaultValue:{uri:"/path/to/graph.tier.links.bed.gz",locationType:"UriLocation"}},linksIndex:gn("RgfaCoarseLinksIndex","/path/to/graph.tier.links.bed.gz.tbi")}),Sp=(0,hn.ConfigurationSchema)("RgfaTabixAdapter",{segmentsLocation:{type:"fileLocation",defaultValue:{uri:"/path/to/graph.segs.bed.gz",locationType:"UriLocation"}},segmentsIndex:gn("RgfaSegmentsIndex","/path/to/graph.segs.bed.gz.tbi"),linksLocation:{type:"fileLocation",defaultValue:{uri:"/path/to/graph.links.bed.gz",locationType:"UriLocation"}},linksIndex:gn("RgfaLinksIndex","/path/to/graph.links.bed.gz.tbi"),assemblyNameToPanSN:{type:"frozen",defaultValue:{}},coarse:kp},{explicitlyTyped:!0,preProcessSnapshot:Yo}),Tc=Sp;function Uo(e){e.addAdapterType(()=>new Gc.default({name:"RgfaTabixAdapter",displayName:"Indexed rGFA adapter",normalizeSnapshot:Yo,configSchema:Tc,adapterCapabilities:["getSubgraph"],adapterMetadata:{category:"Graph adapters"},getAdapterClass:()=>import("./chunks/RgfaTabixAdapter-GYRNCGT2.js").then(t=>t.default)}))}var xp=new Set(["RgfaTabixAdapter","GbzBaseSyntenyAdapter"]);function Rp(e){return sr(e).toLowerCase().endsWith(".gbz.db")}function Mp(e){let t=e.adapter;return t?.type==="GbzBaseSyntenyAdapter"&&!t.assemblyNames?.length&&Array.isArray(e.assemblyNames)&&e.assemblyNames.length>0?{...e,adapter:{...t,assemblyNames:e.assemblyNames}}:e}function Lp(e,t,n){if((!n||n==="GbzBaseSyntenyAdapter")&&Rp(e))return{type:"GbzBaseSyntenyAdapter",gbzDbLocation:e,...t?{haplotypeIndexLocation:t}:{}};if((!n||n==="RgfaTabixAdapter")&&cr(e))return dr({choice:"RgfaTabixAdapter",loc:e,indexLoc:t,assembly:"",sample:""})}function Ko(e){e.addToExtensionPoint("Core-preProcessTrackConfig",Mp),e.addToExtensionPoint("Core-guessAdapterForLocation",t=>(n,o,r)=>Lp(n,o,r)??t(n,o,r)),e.addToExtensionPoint("Core-guessTrackTypeForLocation",t=>(n,o)=>xp.has(n)?"GraphTrack":t(n,o))}var Ic=b(ie(),1),fn=b(Yc(),1),qo=b(zc(),1),Cc=b(Uc(),1);function Pc(e){let t;if(Q(e)){let{refName:n,start:o,end:r,assemblyName:a}=e;typeof n=="string"&&typeof o=="number"&&typeof r=="number"&&(t={refName:n,start:o,end:r,assemblyName:typeof a=="string"?a:void 0})}return t}function vp(e,t,n){let o=e.connectedViewId;return o===void 0||o===t||!n.has(o)}function Ac(e,t){return e.assemblyName===void 0||t===void 0||t.includes(e.assemblyName)}function Tp(e){return(Array.isArray(e.tracks)?e.tracks:[]).flatMap(n=>Q(n)&&Array.isArray(n.displays)?n.displays.filter(o=>Q(o)&&o.type==="LinearGraphDisplay"):[])}function Nc(e,t,n){let o=[],r=ht(e),a=new Set(r.map(i=>Q(i)?i.id:void 0));for(let i of r){if(Q(i)&&i.id===t)for(let s of Tp(i)){let c=Pc(s.hoverHighlight);c&&Ac(c,n)&&o.push({key:typeof s.id=="string"?s.id:"graph-track",region:c})}if(Q(i)&&i.type==="GraphGenomeView"&&vp(i,t,a)){let s=Pc(i.hoverHighlight);s&&Ac(s,n)&&o.push({key:typeof i.id=="string"?i.id:"graph",region:s})}}return o}var $e=b(de(),1),Gp=(0,Cc.makeStyles)()(e=>({highlight:{height:"100%",position:"absolute",background:(0,fn.alpha)(e.palette.primary.main,.08),borderLeft:`1px solid ${(0,fn.alpha)(e.palette.primary.main,.4)}`,borderRight:`1px solid ${(0,fn.alpha)(e.palette.primary.main,.4)}`,pointerEvents:"none",zIndex:10}})),Pp=(0,qo.observer)(function({model:t,region:n}){let{classes:o}=Gp(),r=t.getHighlightCoords(n);return r?(0,$e.jsx)("div",{"data-testid":"graph-node-highlight",className:o.highlight,style:{left:r.left,width:r.width}}):null}),Ap=(0,qo.observer)(function({model:t}){let{views:n}=(0,Ic.getSession)(t);return(0,$e.jsx)($e.Fragment,{children:Nc([...n],t.id,t.assemblyNames).map(({key:o,region:r})=>(0,$e.jsx)(Pp,{model:t,region:r},`graph-hover-${o}`))})}),Ec=Ap;var Bc=b(de(),1),Np="LinearGenomeView-TracksContainerComponent";function Jo(e){e.contributeToExtensionPoint(Np,({model:t})=>(0,Bc.jsx)(Ec,{model:t},"graphgenomeview-hover-highlight"))}var Fc=b(be(),1);function Ip(e){return e.views(t=>({get adapterConfig(){return we(t,t.parentTrack.configuration)}}))}function Zo(e){e.addToExtensionPoint("Core-extendPluggableElement",t=>(t instanceof Fc.DisplayType&&$o.includes(t.name)&&t.extendStateModel(Ip),t))}var Dc="GraphGenomeView";var $c="6.3.1";var Qo=class extends Vc.default{constructor(){super(...arguments);this.name=Dc;this.version=$c}install(n){Do(n),Wo(n),Vo(n),Oo(n),Jo(n),Uo(n),zo(n),_n(n),Wn(n),Ko(n),Zo(n),n.addRpcMethod(()=>new et(n)),n.addRpcMethod(()=>new Qe(n)),n.addRpcMethod(()=>new Ze(n))}configure(n){try{(0,Oc.isAbstractMenuManager)(n.rootModel)&&n.rootModel.appendToSubMenu(["Add"],{label:"Graph genome view",icon:Wt,onClick:o=>{o.addView("GraphGenomeView",{})}})}catch(o){console.warn("[GraphGenomeView] could not add the Add menu entry",o)}}};export{Qo as default};
|
|
7
|
+
`);return[{type:"radio",label:"Every sample",checked:n===void 0,onClick:()=>{e.setWalkRowSamples(void 0)}},...t.length>0?[{type:"radio",label:"Where walk and call disagree",checked:o(t),onClick:()=>{e.setWalkRowSamples(t)}}]:[],{type:"radio",label:"Choose samples...",checked:n!==void 0&&!o(t),onClick:()=>{(0,he.getSession)(e).queueDialog(r=>[Ti,{model:e,onClose:r}])}}]},walkRowGroupMenuItems(){let t=e.walkRowGroups?e.walkRowGroupBy?.field:void 0;return[{type:"radio",label:"None",checked:t===void 0,onClick:()=>{e.setWalkRowGroupBy(void 0)}},...e.walkRowGroupFields.map(n=>({type:"radio",label:n,checked:t===n,onClick:()=>{e.setWalkRowGroupBy({field:n})}}))]},layoutOptionMenuItems(){return[...Ce.has(e.chosenLayoutMode)?[{label:"Fold variants",subMenu:Ni.map(({bp:t,label:n})=>({type:"radio",label:n,checked:e.tubeMapFold===t,disabled:t>0&&e.graph?.reads!==void 0,onClick:()=>{e.setTubeMapFold(t),e.recomputeLayout()}}))}]:[],...e.chosenLayoutMode==="walkrows"&&e.repeatChoices.length>0?[{label:"Repeat",subMenu:[{type:"radio",label:"Whole window",checked:e.repeatKey==="",onClick:()=>{e.setRepeatKey("")}},...e.repeatChoices.map(({key:t,name:n,unit:o})=>({type:"radio",label:`${n} \xB7 ${o.toLocaleString()} bp unit`,checked:e.repeatKey===t,onClick:()=>{e.setRepeatKey(t)}}))]}]:[],...e.chosenLayoutMode==="walkrows"&&e.walkRowBars?[{label:"Samples",subMenu:this.walkRowSampleMenuItems()}]:[],...e.chosenLayoutMode==="walkrows"&&e.walkRowBars&&e.walkRowGroupFields.length>0?[{label:"Group by...",subMenu:this.walkRowGroupMenuItems()}]:[]]},showMenuItems(){return[{type:"checkbox",label:"Show bubble halos",checked:e.showBubbles,onClick:()=>{e.setShowBubbles(!e.showBubbles)}},{type:"checkbox",label:"Show deletion edges",checked:e.showDeletionEdges,onClick:()=>{e.toggleDeletionEdges()}},{type:"checkbox",label:"Show hover highlight",checked:e.chosenHighlightOnHover,onClick:()=>{e.setHighlightOnHover(!e.chosenHighlightOnHover)}},{type:"checkbox",label:"Show genes on the backbone",checked:e.showGenes,onClick:()=>{e.setShowGenes(!e.showGenes)}},...e.referenceStripApplies?[{type:"checkbox",label:"Show reference strip",checked:e.showReferenceStrip,onClick:()=>{e.setShowReferenceStrip(!e.showReferenceStrip)}}]:[]]},exportMenuItems(){return[{label:"Export SVG",icon:ri,disabled:e.figureUnavailable!==void 0,disabledHelpText:e.figureUnavailable,onClick:()=>{let t=e.figure();t&&Vs(t,`${(e.graph?.name??"graph").replaceAll(/[^\w.-]+/g,"_")}.svg`)}},{label:"Copy figure spec",icon:Qa,disabled:e.figureSpecUnavailable!==void 0,disabledHelpText:e.figureSpecUnavailable,onClick:()=>{let t=e.figureSpec(),n=(0,he.getSession)(e);navigator.clipboard.writeText(`${JSON.stringify(t,null,2)}
|
|
8
|
+
`).then(()=>{n.notify("Figure spec copied. Save it as spec.json and run: npx -p @jbrowse/bandage-core bandage-figure spec.json -o figure.svg","info")}).catch(o=>{n.notify(`Could not copy the figure spec: ${String(o)}`)})}}]},highlightMenuItems(){let t=e.walkChoices;if(t.length===0||!e.liftsWalks)return[];let n=r=>e.walkLayers.some(a=>a.walk===r),o=t.length>Ai;return[{type:"subHeader",label:"Highlight"},...o?[{label:"Choose haplotypes...",onClick:()=>{(0,he.getSession)(e).queueDialog(r=>[Gi,{model:e,onClose:r}])}}]:[],...(o?t.filter(r=>n(r.name)):t).map(r=>({type:"checkbox",label:r.label,checked:n(r.name),onClick:()=>{e.toggleWalk(r.name)}})),{label:"Clear highlights",disabled:e.walkLayers.length===0,onClick:()=>{e.setWalkLayers([])}},...e.drawnWalks.length>0?[{label:"Color highlighted...",onClick:()=>{(0,he.getSession)(e).queueDialog(r=>[Pi,{model:e,onClose:r}])}}]:[],...e.walkLayers.length>1&&e.modeDrawsNodes?[{type:"subHeader",label:"Arrange"},...kr.map(({value:r,label:a})=>({type:"radio",label:r==="walk"?"A panel per haplotype":a,checked:e.facet.field===r,onClick:()=>{e.setFacet(r)}}))]:[]]},colorSchemeLabel(t){let n=Gn.find(o=>o.value===t)?.label??t;return t==="auto"?`${n} (${this.colorSchemeLabel(e.effectiveColorScheme)})`:n},graphMenuItems(){let t=this.layoutOptionMenuItems();return[{label:`Layout: ${_(e.chosenLayoutMode).label.replace(/ layout$/,"")}`,icon:ti,subMenu:[...wr.map(n=>({type:"radio",label:n.label,checked:e.chosenLayoutMode===n.value,disabled:e.graph?!n.available(e.graph):!1,onClick:()=>{e.switchLayout(n.value)}})),...t.length>0?[{type:"divider"},...t]:[],...e.hostPlacesX?[]:[{type:"divider"},{label:"Zoom to fit",onClick:()=>{e.zoomToFit()}}]]},{label:`Color: ${this.colorSchemeLabel(e.chosenColorScheme)}`,icon:oi,subMenu:Gn.map(n=>({type:"radio",label:this.colorSchemeLabel(n.value),checked:e.chosenColorScheme===n.value,onClick:()=>{e.setColorScheme(n.value)}}))},{label:"Show...",icon:ii,subMenu:this.showMenuItems()}]},launchMenuItems(){let t=[];for(let n of Ta({contributors:e.launchableAssemblies,syntenyTracks:e.syntenyLaunchTracks,onShowLinear:o=>{e.showInLinearView(o)},onShowSynteny:o=>{e.showSyntenyView(o)}}))(0,Os.pushLaunchViewMenuItem)(t,n);return t}}));function dn(){return _s}var Io=f(K(),1);function $s(e){return Array.isArray(e)&&e.every(t=>typeof t=="string")}function Co(e){let t=(0,Io.readConfObject)(e,"assemblyNames"),n=$s(t)?t.slice(1):[];return n.length>0?n:void 0}function pn(e){let t=(0,Io.readConfObject)(e,"assemblyNames");return $s(t)?t[0]:void 0}function un(e,t){return e===void 0||e===t?void 0:`The graph is cut on its reference, ${e}: open it from a view of ${e}`}function lp(e){return("uri"in e?e.uri.split(/[?#]/)[0]:"localPath"in e?e.localPath:"name"in e?e.name:"").split(/[\\/]/).at(-1)??""}function Eo(){return z.types.compose("GraphGenomeView",Hs.BaseViewModel,dn(),z.types.model({type:z.types.literal("GraphGenomeView"),gfaLocation:z.types.maybe(z.types.frozen()),loadedRegion:z.types.maybe(z.types.frozen()),loadedTrackId:z.types.optional(z.types.string,""),subgraphContext:z.types.optional(z.types.number,1),subgraphHaplotypes:z.types.maybe(z.types.frozen()),maxRegionBp:z.types.optional(z.types.number,ot)})).volatile(()=>({widthMeasured:!1})).actions(e=>{let t=e.setWidth;return{setWidth(n){t(n),e.widthMeasured=!0}}}).views(e=>({get rpcSessionId(){return e.id},get paneWidth(){return e.width},get paneMeasured(){return e.widthMeasured},get cutHaplotypes(){return e.subgraphHaplotypes},get sourceGfaLocation(){return e.gfaLocation},get sourceTrack(){return e.loadedTrackId?(0,Ws.getSession)(e).tracks.find(t=>t.trackId===e.loadedTrackId):void 0},get canRetryLoad(){return e.gfaLocation!==void 0||e.loadedTrackId!==""&&e.loadedRegion!==void 0}})).views(e=>({get hasPendingSource(){return e.canRetryLoad&&!e.graph&&!e.loadCanceled},menuItems(){return[...e.exportMenuItems(),...e.launchMenuItems()]}})).actions(e=>{let t=e.clearGraph;return{clearGraph(){t(),e.gfaLocation=void 0,e.loadedRegion=void 0,e.loadedTrackId=""},load(){let n=e.loadedRegion;if(e.gfaLocation)return e.displayName||e.setDisplayName(lp(e.gfaLocation)),e.loadGFAFromLocation(e.gfaLocation,n);if(!e.loadedTrackId||!n)return;let o=e.sourceTrack,r=n.end-n.start,a=o?un(pn(o),n.assemblyName):void 0;if(!o)e.setError(new Error(`The track this graph was cut from, "${e.loadedTrackId}", is not in this session`));else if(a)e.setError(new Error(a));else if(r>e.maxRegionBp)e.setError(new Error(`Region too large (${xe(r)}) \u2014 zoom in to view graph (max ${xe(e.maxRegionBp)})`));else return e.cutSubgraph(be(e,o),n,{hops:e.subgraphContext,haplotypes:e.subgraphHaplotypes,...e.cutsWholeWalks?{snarls:"overlapping"}:{}})}}}).actions(e=>({retryLoad(){e.load()},switchLayout(t){let n=e.cutsWholeWalks;return e.setLayoutMode(t),e.loadedTrackId&&e.cutsWholeWalks!==n?e.load():e.recomputeLayout()},afterAttach(){e.graph||e.load(),(0,z.addDisposer)(e,(0,js.reaction)(()=>e.walkStrip,()=>{e.loadedTrackId&&!_(e.chosenLayoutMode).wholeWalks&&e.load()}))}}))}var gp=(0,Ys.defineLaunchKeys)()({});function Bo(e){e.addViewType(()=>new zs.default({name:"GraphGenomeView",displayName:"Graph genome view",stateModel:Eo(),launchKeys:gp,ReactComponent:(0,Xs.lazy)(()=>import("./chunks/GraphGenomeView-ULQ6U5MK.js"))}))}var Us=f(K(),1),Be=f(fe(),1),Fo=["MultiWaySyntenyDisplay","LinearSyntenyDisplay","DotplotDisplay","ChordSyntenyDisplay"];function hp(e){let t=e.getElementTypesInGroup("display"),n=r=>t.find(a=>a.name===r),o=r=>r&&Object.assign(Object.create(r),{adapterCapabilities:["headerLanes"]});return[n("LinearGraphDisplay"),n("LinearBasicDisplay"),...Fo.map(r=>o(n(r)))].filter(r=>r!==void 0)}function Do(e){e.addTrackType(()=>{let t=(0,Us.ConfigurationSchema)("GraphTrack",{},{baseConfiguration:(0,Be.createBaseTrackConfig)(e),explicitIdentifier:"trackId"}),n=new Be.TrackType({name:"GraphTrack",displayName:"Pangenome graph track",configSchema:t,stateModel:(0,Be.createBaseTrackModel)(e,"GraphTrack",t)});for(let o of hp(e))n.addDisplayType(o);return n})}function Vo(e){e.addToExtensionPoint("LaunchView-GraphGenomeView",t=>{let{session:n,...o}=t;return n.addView("GraphGenomeView",o),t})}var wc=f(Oe(),1),yc=f(qs(),1);var Qs=f(K(),1),ec=f(Zs(),1),Oo=f(ne(),1);function tc(){return(0,Qs.ConfigurationSchema)("LinearGraphDisplay",{layoutMode:{type:"stringEnum",model:Oo.types.enumeration("LayoutMode",vt),defaultValue:"auto"},colorScheme:{type:"stringEnum",model:Oo.types.enumeration("ColorScheme",Tt),defaultValue:"auto"},highlightOnHover:{type:"boolean",defaultValue:!0},...(0,ec.trackHeightConfigSchemaFields)({defaultHeight:300,height:"the height of the track the graph is drawn in"})},{explicitlyTyped:!0,explicitIdentifier:"displayId"})}var mc=f(Oe(),1);var Fe=f(K(),1),lc=f(fe(),1),gc=f(oc(),1),hc=f(cr(),1),_o=f(ae(),1),fc=f(ac(),1),I=f(ne(),1),mn=f(sc(),1);var cc=f(ce(),1),dc=(0,te.createSvgIcon)((0,cc.jsx)("path",{d:"M19 15.18V7c0-2.21-1.79-4-4-4s-4 1.79-4 4v10c0 1.1-.9 2-2 2s-2-.9-2-2V8.82C8.16 8.4 9 7.3 9 6c0-1.66-1.34-3-3-3S3 4.34 3 6c0 1.3.84 2.4 2 2.82V17c0 2.21 1.79 4 4 4s4-1.79 4-4V7c0-1.1.9-2 2-2s2 .9 2 2v8.18c-1.16.41-2 1.51-2 2.82 0 1.66 1.34 3 3 3s3-1.34 3-3c0-1.3-.84-2.4-2-2.82"}),"Route");var wt=f(St(),1);function pc(e){return e instanceof Error&&(e.name==="NodeLimitError"||e.regionTooLarge===!0||/reads more than nodeLimit|^Subgraph size limit of \d+ nodes exceeded/.test(e.message))}function uc(e,t){if(e?.refName!==t.refName||e.assemblyName!==t.assemblyName)return!1;let n=e.end-e.start;return t.end-t.start>=n&&t.end>e.start-n&&t.start<e.end+n}var fp=(0,mc.lazy)(()=>import("./chunks/GraphTrackSettingsDialog-O6IYVHNJ.js"));function bc(e){return I.types.compose("LinearGraphDisplay",lc.BaseDisplay,(0,fc.default)(),dn(),I.types.model({type:I.types.literal("LinearGraphDisplay"),configuration:(0,Fe.ConfigurationReference)(e),pane:I.types.maybe(I.types.frozen()),overviewRowsChoice:I.types.maybe(I.types.frozen()),overviewRowOrder:I.types.maybe(I.types.frozen()),cutRegion:I.types.maybe(I.types.frozen()),coarseCut:I.types.optional(I.types.boolean,!1),maxRegionBp:I.types.optional(I.types.number,ot),subgraphContext:I.types.optional(I.types.number,1),subgraphHaplotypes:I.types.maybe(I.types.frozen())})).preProcessSnapshot(t=>{let{pane:n,overviewRowsChoice:o,overviewRowOrder:r,...a}=t;if(!n)return a;let{type:i,...s}=n;return{...s,...a}}).volatile(()=>({recuts:0,settledWindow:void 0,dense:void 0})).views(t=>({get adapterConfig(){return be(t,t.parentTrack.configuration)},get defaultLayoutMode(){return(0,Fe.getConf)(t,"layoutMode")},get defaultColorScheme(){return(0,Fe.getConf)(t,"colorScheme")},get defaultHighlightOnHover(){return(0,Fe.getConf)(t,"highlightOnHover")},get drawsGenomicCoordinates(){return t.layoutResult===void 0||t.hostPlacesX},get canvasHeight(){return t.height},get canRetryLoad(){return t.cutRegion!==void 0},get cutHaplotypes(){return this.chosenHaplotypes},get chosenHaplotypes(){return t.subgraphHaplotypes??Co(t.parentTrack.configuration)},get coarseAboveBpPerPx(){let o=t.adapterConfig.coarse?.aboveBpPerPx;return typeof o=="number"?o:void 0}})).views(t=>({tierAt(n){let o=t.coarseAboveBpPerPx;return o!==void 0&&n>o?"coarse":"fine"},capFor(n){return n==="coarse"?1/0:t.maxRegionBp},get cutTier(){return t.coarseCut&&t.coarseAboveBpPerPx!==void 0?"coarse":"fine"}})).views(t=>({get settledCapBp(){let n=t.settledWindow;return n?t.capFor(t.tierAt(n.bpPerPx)):1/0}})).views(t=>({get regionTooLarge(){let n=t.settledWindow;return n!==void 0&&n.end-n.start>t.settledCapBp},get regionTooLargeReason(){let n=t.settledWindow;return n?`Region too large for a graph cut (${xe(n.end-n.start)}, max ${xe(t.settledCapBp)})`:""},get zoomCanReleaseGate(){return!0},get fetchCanceled(){return t.loadCanceled}})).views(t=>({get svgReady(){return(0,gc.computeSvgReady)({error:t.error,regionTooLarge:t.regionTooLarge,extraTerminal:!1,fetchCanceled:t.loadCanceled},()=>!t.isLoading&&t.hasGraph&&!!t.layoutResult)}})).views(t=>({get displayPhase(){return(0,mn.computeDisplayStatusPhase)({regionTooLarge:t.regionTooLarge,error:t.error??t.renderError},()=>(0,mn.computeActivityPhase)({isMinimized:t.isMinimized,fetchInert:!1,viewportEmpty:t.host?.initialized===!0&&t.host.hasVisibleContent===!1,isLoading:t.isLoading||!t.hasGraph,fetchCanceled:t.loadCanceled,awaitingDependentData:!1,rendersCanvas:!0,canvasDrawn:t.painted&&t.geometryPainted},()=>!0,()=>t.host?.effectiveBodyMounted??!0))}})).actions(t=>({setSubgraphContext(n){t.subgraphContext=n},setSubgraphHaplotypes(n){t.subgraphHaplotypes=n,t.dense=void 0},setDense(n){t.dense=n},setMaxRegionBp(n){t.maxRegionBp=n},cut(){let n=t.cutRegion;if(!n)return;let o=un(pn(t.parentTrack.configuration),n.assemblyName);if(o){t.clearGraph(),t.setError(new Error(o));return}let r=t.cutTier==="coarse";return t.cutSubgraph(t.adapterConfig,n,{hops:r?0:t.subgraphContext,haplotypes:t.chosenHaplotypes,tier:r?"coarse":void 0,..._(t.chosenLayoutMode).wholeWalks?{snarls:"overlapping"}:{}})}})).actions(t=>({recutAt(n){let o=t.tierAt(n.bpPerPx);return t.coarseCut=o==="coarse",t.cutRegion=fo(n,t.capFor(o),_(t.chosenLayoutMode).cutMargins),t.recuts++,t.cut()}})).actions(t=>({settleOn(n){t.settledWindow=n;let o=_(t.chosenLayoutMode).cutMargins;return t.regionTooLarge||uc(t.dense,n)||!t.loadCanceled&&t.tierAt(n.bpPerPx)===t.cutTier&&Qi(t.cutRegion,n,o)?!1:(Promise.resolve(t.recutAt(n)).then(()=>{(0,I.isAlive)(t)&&pc(t.error)&&this.refuseDenseCut(n)}),!0)},refuseDenseCut(n){t.setDense(n),t.cutRegion=void 0,this.settleOn(t.settledWindow??n)},switchLayout(n){let o=_(t.chosenLayoutMode);t.setLayoutMode(n);let r=_(n),a=t.host?Zt(t.host):void 0;return a&&!t.regionTooLarge&&(r.cutMargins!==o.cutMargins||r.wholeWalks!==o.wholeWalks)?t.recutAt(a):t.recomputeLayout()},retryLoad(){t.cut()},reload(){t.cut()},cancelFetchByUser(){t.stopLoad()}})).actions(t=>({forceLoad(){let n=t.settledWindow;n&&(t.setMaxRegionBp(Math.ceil(n.end-n.start)),t.settleOn(n))},afterAttach(){t.cutRegion&&!t.graph&&t.cut(),(0,I.addDisposer)(t,(0,wt.reaction)(()=>t.hostPlacesX,n=>{n||t.releaseHost()},{name:"GraphHostPlacesX"})),(0,I.addDisposer)(t,(0,wt.reaction)(()=>t.hostFrame,n=>{n&&t.hostTransform(n.scale,n.translateX)},{equals:(n,o)=>n?.scale===o?.scale&&n?.translateX===o?.translateX,fireImmediately:!0,name:"GraphHostFrame"})),(0,I.addDisposer)(t,(0,wt.reaction)(()=>`${t.facet.field} ${t.facetPlacement?.count}`,()=>{let n=t.facetGridIn(t.paneCeiling)?.total??0;(t.facetGrid?.total??0)>t.height&&t.setHeight(Math.max(t.height,Math.ceil(n)))},{name:"GraphFacetHeight"})),(0,I.addDisposer)(t,(0,wt.reaction)(()=>t.host?.coarseDynamicBlocks,n=>{let{host:o}=t,r=n&&o?Zt(o):void 0;r&&t.settleOn(r)},{fireImmediately:!0,name:"GraphHostSettle"}))}})).views(t=>({get graphViewSpec(){let n=t.host?Zt(t.host):void 0,o=t.sourceTrackId;if(!n||!o||!t.hasGraph||t.coarseCut||t.regionTooLarge)return;let r=Math.floor(n.start),a=Math.ceil(n.end);return{loadedTrackId:o,loadedRegion:{refName:n.refName,assemblyName:n.assemblyName,start:r,end:a},subgraphContext:t.subgraphContext,subgraphHaplotypes:t.chosenHaplotypes,maxRegionBp:Math.max(t.maxRegionBp,a-r),layoutMode:t.chosenLayoutMode,colorScheme:t.chosenColorScheme,referencePath:t.referencePath,geneTrackId:t.geneTrackId,showGenes:t.showGenes,showBubbles:t.showBubbles,showDeletionEdges:t.showDeletionEdges,walkLayers:t.walkLayers,facet:(0,I.getSnapshot)(t.facet)}}})).actions(t=>({openGraphView(){let n=t.graphViewSpec;n&&(0,_o.getSession)(t).addView("GraphGenomeView",n)}})).views(t=>({cutMenuItems(){if(t.adapterConfig.type!=="GbzBaseSyntenyAdapter")return[];let n=Co(t.parentTrack.configuration),o=t.subgraphHaplotypes,r=a=>{t.setSubgraphHaplotypes(a),t.cut()};return[{type:"subHeader",label:"Load"},{type:"radio",label:"Every haplotype in the graph",checked:o?o.length===0:!n,onClick:()=>{r([])}},...n?[{type:"radio",label:`The track's ${n.length} assemblies`,checked:o===void 0,onClick:()=>{r(void 0)}}]:[],{type:"radio",label:"Chosen in Settings...",checked:(o?.length??0)>0,onClick:()=>{this.openSettings()}}]},openSettings(){(0,_o.getSession)(t).queueDialog(n=>[fp,{model:t,open:!0,onClose:n}])},async renderSvg(n){let{renderGraphTrackSvg:o}=await import("./chunks/renderSvg-J7L374ND.js");return o(t,n)},trackMenuItems(){let n=t.launchMenuItems();(0,hc.pushLaunchViewMenuItem)(n,{label:"Graph genome view",icon:Ht,disabled:!t.graphViewSpec,disabledHelpText:"Zoom in until the track cuts a graph",onClick:()=>{t.openGraphView()}});let o=[...this.cutMenuItems(),...t.highlightMenuItems()];return[...o.length>0?[{label:"Haplotypes",icon:dc,subMenu:o}]:[],...t.graphMenuItems(),{label:"Settings",icon:Ga,onClick:()=>{this.openSettings()}},...n]}}))}function $o(e){e.addDisplayType(()=>{let t=tc();return Object.assign(new yc.default({name:"LinearGraphDisplay",displayName:"Graph",configSchema:t,stateModel:bc(t),trackType:["GraphTrack","FeatureTrack","SyntenyTrack"],viewType:"LinearGenomeView",ReactComponent:(0,wc.lazy)(()=>import("./chunks/LinearGraphDisplay-KM5SOSQQ.js"))}),{adapterCapabilities:["getSubgraph"]})})}var Rc=f(Wt(),1);var Ho=f(K(),1),kc=f(ne(),1);function Wo(e){let{uri:t,baseUri:n,csi:o}=e;return typeof t=="string"?{...e,bubblesLocation:{uri:t,baseUri:n},index:{indexType:o?"CSI":"TBI",location:{uri:`${t}.${o?"csi":"tbi"}`,baseUri:n}}}:e}var bp=(0,Ho.ConfigurationSchema)("MinigraphBubbleAdapter",{bubblesLocation:{type:"fileLocation",defaultValue:{uri:"/path/to/graph.bb.bed.gz",locationType:"UriLocation"}},index:(0,Ho.ConfigurationSchema)("MinigraphBubbleIndex",{indexType:{model:kc.types.enumeration("IndexType",["TBI","CSI"]),type:"stringEnum",defaultValue:"TBI"},location:{type:"fileLocation",defaultValue:{uri:"/path/to/graph.bb.bed.gz.tbi",locationType:"UriLocation"}}}),assemblyNameToPanSN:{type:"frozen",defaultValue:{}}},{explicitlyTyped:!0,preProcessSnapshot:Wo}),Sc=bp;function jo(e){e.addAdapterType(()=>new Rc.default({name:"MinigraphBubbleAdapter",displayName:"Minigraph bubble BED adapter",normalizeSnapshot:Wo,configSchema:Sc,adapterMetadata:{category:"Graph adapters"},getAdapterClass:()=>import("./chunks/MinigraphBubbleAdapter-CAXB5FGR.js").then(t=>t.default)}))}var Tc=f(Wt(),1);var gn=f(K(),1),Lc=f(ne(),1);function xc(e,t,n){return{indexType:n?"CSI":"TBI",location:{uri:`${e}.${n?"csi":"tbi"}`,baseUri:t}}}function Mc(e){let{uri:t,baseUri:n,csi:o}=e;return typeof t=="string"?{...e,segmentsLocation:{uri:`${t}.segs.bed.gz`,baseUri:n},segmentsIndex:xc(`${t}.segs.bed.gz`,n,o),linksLocation:{uri:`${t}.links.bed.gz`,baseUri:n},linksIndex:xc(`${t}.links.bed.gz`,n,o)}:e}function Xo(e){let{coarse:t,baseUri:n}=e;return Mc(typeof t=="object"&&t!==null?{...e,coarse:Mc({baseUri:n,...t})}:e)}var ln=(e,t)=>(0,gn.ConfigurationSchema)(e,{indexType:{model:Lc.types.enumeration("IndexType",["TBI","CSI"]),type:"stringEnum",defaultValue:"TBI"},location:{type:"fileLocation",defaultValue:{uri:t,locationType:"UriLocation"}}}),wp=(0,gn.ConfigurationSchema)("RgfaTabixCoarseTier",{aboveBpPerPx:{type:"maybeNumber"},segmentsLocation:{type:"fileLocation",defaultValue:{uri:"/path/to/graph.tier.segs.bed.gz",locationType:"UriLocation"}},segmentsIndex:ln("RgfaCoarseSegmentsIndex","/path/to/graph.tier.segs.bed.gz.tbi"),linksLocation:{type:"fileLocation",defaultValue:{uri:"/path/to/graph.tier.links.bed.gz",locationType:"UriLocation"}},linksIndex:ln("RgfaCoarseLinksIndex","/path/to/graph.tier.links.bed.gz.tbi")}),yp=(0,gn.ConfigurationSchema)("RgfaTabixAdapter",{segmentsLocation:{type:"fileLocation",defaultValue:{uri:"/path/to/graph.segs.bed.gz",locationType:"UriLocation"}},segmentsIndex:ln("RgfaSegmentsIndex","/path/to/graph.segs.bed.gz.tbi"),linksLocation:{type:"fileLocation",defaultValue:{uri:"/path/to/graph.links.bed.gz",locationType:"UriLocation"}},linksIndex:ln("RgfaLinksIndex","/path/to/graph.links.bed.gz.tbi"),assemblyNameToPanSN:{type:"frozen",defaultValue:{}},coarse:wp},{explicitlyTyped:!0,preProcessSnapshot:Xo}),vc=yp;function zo(e){e.addAdapterType(()=>new Tc.default({name:"RgfaTabixAdapter",displayName:"Indexed rGFA adapter",normalizeSnapshot:Xo,configSchema:vc,adapterCapabilities:["getSubgraph"],adapterMetadata:{category:"Graph adapters"},getAdapterClass:()=>import("./chunks/RgfaTabixAdapter-GYRNCGT2.js").then(t=>t.default)}))}var kp=new Set(["RgfaTabixAdapter","GbzBaseSyntenyAdapter"]);function Sp(e){return ar(e).toLowerCase().endsWith(".gbz.db")}function Rp(e){let t=e.adapter;return t?.type==="GbzBaseSyntenyAdapter"&&!t.assemblyNames?.length&&Array.isArray(e.assemblyNames)&&e.assemblyNames.length>0?{...e,adapter:{...t,assemblyNames:e.assemblyNames}}:e}function xp(e,t,n){if((!n||n==="GbzBaseSyntenyAdapter")&&Sp(e))return{type:"GbzBaseSyntenyAdapter",gbzDbLocation:e,...t?{haplotypeIndexLocation:t}:{}};if((!n||n==="RgfaTabixAdapter")&&ir(e))return sr({choice:"RgfaTabixAdapter",loc:e,indexLoc:t,assembly:"",sample:""})}function Yo(e){e.addToExtensionPoint("Core-preProcessTrackConfig",Rp),e.addToExtensionPoint("Core-guessAdapterForLocation",t=>(n,o,r)=>xp(n,o,r)??t(n,o,r)),e.addToExtensionPoint("Core-guessTrackTypeForLocation",t=>(n,o)=>kp.has(n)?"GraphTrack":t(n,o))}var Nc=f(ae(),1),hn=f(zc(),1),Uo=f(Xc(),1),Ic=f(Yc(),1);function Gc(e){let t;if(Q(e)){let{refName:n,start:o,end:r,assemblyName:a}=e;typeof n=="string"&&typeof o=="number"&&typeof r=="number"&&(t={refName:n,start:o,end:r,assemblyName:typeof a=="string"?a:void 0})}return t}function Mp(e,t,n){let o=e.connectedViewId;return o===void 0||o===t||!n.has(o)}function Pc(e,t){return e.assemblyName===void 0||t===void 0||t.includes(e.assemblyName)}function Lp(e){return(Array.isArray(e.tracks)?e.tracks:[]).flatMap(n=>Q(n)&&Array.isArray(n.displays)?n.displays.filter(o=>Q(o)&&o.type==="LinearGraphDisplay"):[])}function Ac(e,t,n){let o=[],r=gt(e),a=new Set(r.map(i=>Q(i)?i.id:void 0));for(let i of r){if(Q(i)&&i.id===t)for(let s of Lp(i)){let c=Gc(s.hoverHighlight);c&&Pc(c,n)&&o.push({key:typeof s.id=="string"?s.id:"graph-track",region:c})}if(Q(i)&&i.type==="GraphGenomeView"&&Mp(i,t,a)){let s=Gc(i.hoverHighlight);s&&Pc(s,n)&&o.push({key:typeof i.id=="string"?i.id:"graph",region:s})}}return o}var De=f(ce(),1),vp=(0,Ic.makeStyles)()(e=>({highlight:{height:"100%",position:"absolute",background:(0,hn.alpha)(e.palette.primary.main,.08),borderLeft:`1px solid ${(0,hn.alpha)(e.palette.primary.main,.4)}`,borderRight:`1px solid ${(0,hn.alpha)(e.palette.primary.main,.4)}`,pointerEvents:"none",zIndex:10}})),Tp=(0,Uo.observer)(function({model:t,region:n}){let{classes:o}=vp(),r=t.getHighlightCoords(n);return r?(0,De.jsx)("div",{"data-testid":"graph-node-highlight",className:o.highlight,style:{left:r.left,width:r.width}}):null}),Gp=(0,Uo.observer)(function({model:t}){let{views:n}=(0,Nc.getSession)(t);return(0,De.jsx)(De.Fragment,{children:Ac([...n],t.id,t.assemblyNames).map(({key:o,region:r})=>(0,De.jsx)(Tp,{model:t,region:r},`graph-hover-${o}`))})}),Cc=Gp;var Ec=f(ce(),1),Pp="LinearGenomeView-TracksContainerComponent";function Ko(e){e.contributeToExtensionPoint(Pp,({model:t})=>(0,Ec.jsx)(Cc,{model:t},"graphgenomeview-hover-highlight"))}var Bc=f(fe(),1);function Ap(e){return e.views(t=>({get adapterConfig(){return be(t,t.parentTrack.configuration)}}))}function qo(e){e.addToExtensionPoint("Core-extendPluggableElement",t=>(t instanceof Bc.DisplayType&&Fo.includes(t.name)&&t.extendStateModel(Ap),t))}var Fc="GraphGenomeView";var Dc="6.4.0";var Jo=class extends Vc.default{constructor(){super(...arguments);this.name=Fc;this.version=Dc}install(n){Bo(n),$o(n),Do(n),Vo(n),Ko(n),zo(n),jo(n),_n(n),Hn(n),Yo(n),qo(n),n.addRpcMethod(()=>new Qe(n)),n.addRpcMethod(()=>new Ze(n)),n.addRpcMethod(()=>new Je(n))}configure(n){try{(0,Oc.isAbstractMenuManager)(n.rootModel)&&n.rootModel.appendToSubMenu(["Add"],{label:"Graph genome view",icon:Ht,onClick:o=>{o.addView("GraphGenomeView",{})}})}catch(o){console.warn("[GraphGenomeView] could not add the Add menu entry",o)}}};export{Jo as default};
|
|
9
9
|
//# sourceMappingURL=jbrowse-plugin-graphgenomeviewer.esm.js.map
|